[
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/circuit_template.md",
    "content": "### Description\n\nFor circuit updates, please provide a brief description of the changes included in this PR.\n\n\n### Checklist\n\nFor any circuit changes, complete the following steps to ensure faster integration with UI and Smart Contracts:\n\n- [ ] Ran `yarn:compile:XXX` where `XXX` is the name of the circuit\n- [ ] Commit the build files (build/venmo_*/venmo_*_js/*.js and build/venmo_*/venmo_*_js/*.wasm) generated by the above command\n- [ ] Ran `yarn test` to check all tests are passing\n- [ ] Update the `circuit.env` with the new `PTAU` power\n- [ ] Ran `yarn:genkey:chunked:unsafe:XXX` AND `yarn:genkey:non-chunked:unsafe:XXX` to generate new proving keys for each circuit that was updated\n- [ ] Updated `UPLOAD_FOLDER` in `circuit.env` to a new path in S3. E.g. `UPLOAD_FOLDER=\"v2/v0.0.5\"`\n- [ ] Ran `yarn uploadkeys:XXX` to upload to S3. Ensure that BOTH chunk and nonchunk keys are uploaded\n- [ ] Ran `yarn:genverifier:XXX` to generate solidity verifier\n- [ ] Copy the generated verifier and paste it in the `contracts` folder\n- [ ] Ran `yarn:gen-input:XXX` to generate inputs for witness generation\n- [ ] Ran `yarn:genwitness:XXX` to generate witnesses for proof generation\n- [ ] Ran `yarn:genproof:XXX` to generate proof for test solidity calldata\n- [ ] Ran `yarn:gencalldata:XXX` to generate solidity calldata\n- [ ] Paste test calldata below\n- [ ] Ensured files are public through ACL in `zk-p2p` S3 bucket\n- [ ] Updated `package.json` in circuits to correct version and run `npm publish`\n- [ ] Commit the updated `package.json`"
  },
  {
    "path": ".github/workflows/circuit.yml",
    "content": "name: circuit\non: [pull_request]\njobs:\n  run-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v3\n      - name: Specify node version...\n        uses: actions/setup-node@v3\n        with:\n          node-version: '18.15.0'\n      - name: Enable Corepack\n        run: corepack enable\n      - name: Install rust...\n        run: curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh -s -- -y\n        working-directory: ./circuits-circom\n      - name: Install circom...\n        run: git clone https://github.com/iden3/circom.git && cd circom && cargo build --release && cargo install --path circom\n        working-directory: ../\n      - name: Create env...\n        run: cp scripts/circuit.env.example scripts/circuit.env\n        working-directory: ./circuits-circom\n      - name: Installing Common Dependencies\n        run: yarn install\n        working-directory: ./circuits-circom/circuits/common\n      - name: Testing Common circuits...\n        run: yarn test\n        working-directory: ./circuits-circom/circuits/common\n      - name: Installing Common V2 Dependencies\n        run: yarn install\n        working-directory: ./circuits-circom/circuits/common-v2\n      - name: Testing Common V2 circuits...\n        run: yarn test\n        working-directory: ./circuits-circom/circuits/common-v2\n      - name: Install Venmo Dependencies\n        run: yarn install\n        working-directory: ./circuits-circom/circuits/venmo\n      - name: Testing Venmo regexes...\n        run: yarn test test/regexes\n        working-directory: ./circuits-circom/circuits/venmo\n      - name: Installing HDFC Dependencies\n        run: yarn install\n        working-directory: ./circuits-circom/circuits/hdfc\n      - name: Testing HDFC regexes...\n        run: yarn test test/regexes\n        working-directory: ./circuits-circom/circuits/hdfc\n      - name: Installing Paylah Dependencies\n        run: yarn install\n        working-directory: ./circuits-circom/circuits/paylah\n      - name: Testing Paylah regexes...\n        run: yarn test test/regexes\n        working-directory: ./circuits-circom/circuits/paylah\n      - name: Installing Garanti Dependencies\n        run: yarn install\n        working-directory: ./circuits-circom/circuits/garanti\n      - name: Testing Garanti regexes...\n        run: yarn test test/regexes\n        working-directory: ./circuits-circom/circuits/garanti\n      - name: Installing Namecheap Dependencies\n        run: yarn install\n        working-directory: ./circuits-circom/circuits/namecheap\n      - name: Testing Namecheap regexes...\n        run: yarn test test/regexes\n        working-directory: ./circuits-circom/circuits/namecheap"
  },
  {
    "path": ".github/workflows/contracts-domain.yml",
    "content": "name: push\non: [push]\njobs:\n  run-tests:\n    runs-on: ubuntu-latest\n    env:\n      NODE_OPTIONS: --max-old-space-size=8192\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v3\n      - name: Specify node version...\n        uses: actions/setup-node@v3\n        with:\n          node-version: '20.9.0'\n      - name: Install Dependencies\n        run: yarn install\n        working-directory: ./contracts-domain\n      - name: Set up env variables...\n        run: cp contracts-domain/.env.default contracts-domain/.env\n      - name: Building...\n        run: yarn build\n        working-directory: ./contracts-domain\n      - name: Set-up chain...\n        run: yarn chain &\n        working-directory: ./contracts-domain\n        env:\n          PORT: 8545\n      - name: Run smart contract tests...\n        run: yarn test:clean --network localhost\n        working-directory: ./contracts-domain\n      - name: Run coverage\n        run: yarn coverage\n        working-directory: ./contracts-domain\n      - name: Check deploy\n        run: yarn deploy:localhost\n        working-directory: ./contracts-domain"
  },
  {
    "path": ".github/workflows/contracts-ramp.yml",
    "content": "name: push\non: [push]\njobs:\n  run-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v3\n      - name: Specify node version...\n        uses: actions/setup-node@v3\n        with:\n          node-version: '18.15.0'\n      - name: Install Dependencies\n        run: yarn install\n        working-directory: ./contracts-ramp\n      - name: Set up env variables...\n        run: cp contracts-ramp/.env.default contracts-ramp/.env\n      - name: Building...\n        run: yarn build\n        working-directory: ./contracts-ramp\n      - name: Set-up chain...\n        run: yarn chain &\n        working-directory: ./contracts-ramp\n        env:\n          PORT: 8545\n      - name: Run smart contract tests...\n        run: yarn test:clean --network localhost\n        working-directory: ./contracts-ramp\n      - name: Run coverage\n        run: yarn coverage\n        working-directory: ./contracts-ramp\n      - name: Check deploy\n        run: yarn deploy:localhost\n        working-directory: ./contracts-ramp\n\n\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules/\n*/node_modules/\n*/*/*/node_modules/\n\n.env\nyarn-error.log\n\n.DS_Store\n\nbuild/\n*/inputs/*.json\n*/*/*/inputs/*.json\n*/emls/*.eml\n*/*/*/emls/*.eml\n*.env\n*/*/*.env\n*/*/*/*.env\n*/.yarn/cache/\n*/*/.yarn/cache\n*/*/*/.yarn/cache/\n*/.yarn/install-state.gz\n*/*/.yarn/install-state.gz\n*/*/*/.yarn/install-state.gz\n*/*/.yarn/unplugged/\n*/dist\n\n.vscode\nptau_files/"
  },
  {
    "path": ".prettierignore",
    "content": "*.md"
  },
  {
    "path": "FUNDING.json",
    "content": "{\n  \"drips\": {\n    \"ethereum\": {\n      \"ownedBy\": \"0x43737376755b1549a086e9b218057d1DBdC139cC\"\n    },\n    \"optimism\": {\n      \"ownedBy\": \"0xeAC1f6bd8339B9DC71D08beeA14EBFd454183640\"\n    }\n  },\n  \"opRetro\": {\n    \"projectId\": \"0xc6203aeab9c0b7346ca9bcb36a2db50c7823908fd66ad61913a53ad6dbc77192\"\n  }\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 ZKP2P\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# ZKP2P\n\n## A trustless P2P fiat onramp powered by ZK proofs\n\nZKP2P is a trustless and privacy-preserving fiat-to-crypto onramp powered by ZK proofs. This (V2) repo is currently under active development. ZKP2P is currently live in Alpha which is a productionized version with audits and supporting Venmo, a popular P2P payment network in the US. Try it out at [zkp2p.xyz](https://zkp2p.xyz/)\n\n![X-blob-background-1500x500px](https://github.com/zkp2p/zk-p2p/assets/6797244/65e8ae36-eb8b-4b53-85e9-fa0801bafcf0)\n\n\n\n## Overview\nThe network is powered by ZK proofs of DKIM signatures in payment confirmation emails, proving the SHA256, email regex, and RSA without revealing sensitive contents in the email. We are working with the Privacy and Scaling Exploration ([PSE](https://pse.dev/projects/zkp2p)) group to explore applications for zero-knowledge proving systems\n\nFollow us on our [Twitter](https://twitter.com/zkp2p) and our [Telegram](https://t.me/+XDj9FNnW-xs5ODNl) for announcements and updates!\n\nAfter the launch of V2, we will continue experimenting with new infrastructure to improve the UX by bringing down proving times and integrating other payment rails such as Paypal and Transferwise.\n\nIf you're interested in collaborating, please reach out to us on our [Telegram](https://t.me/+XDj9FNnW-xs5ODNl).\n\n## How To:\n\n### Fetch Your Venmo ID\nZKP2P off-ramping requires submitting Venmo IDs on chain so the on-rampers knows where to send the payment. A Venmo ID is unique identifier (e.g. 1234567891011121314 up to 19 digits) for your Venmo account that is separate from your handle (@Venmo-User). You can look up your Venmo ID using one of the following methods:\n\n- Open any Venmo payment receipt email and click on 'Show original' and search for `user_id`. As of writing these instructions [4/30/2023], you should be able to locate your id in multiple places but may need to splice the `3D` encoding in front of the id.\n- Paste `curl https://account.venmo.com/u/[YOUR_VENMO_HANDLE] | grep -o '\"user\":{\"displayName\":\"[^\"]*\",\"id\":\"[0-9]*\"' | sed 's/.*\"id\":\"\\([0-9]*\\).*/\\1/'` into the command line, replacing YOUR_VENMO_HANDLE with your Venmo username without the `@` e.g. `Alex-Soong`.\n\nTo verify your id, you can go to https://venmo.com/code?user_id=[YOUR_VENMO_ID] and the page should resolve to a profile for your account.\n\n## Acknowledgements\nThis project has been supported by a grant from EF and PSE. Find our [grant proposal here](https://hackmd.io/R0QW7X4UQCSsZ4X8pFergg). We thank them for their generous support.\n"
  },
  {
    "path": "circuits-circom/README.md",
    "content": "# circuits-circom\n\nThis folder contains the Circom circuits for ZKP2P.\n\n## Usage\n\n### Generating Regexes\n\n1. Go to [zk-regex](https://github.com/zkemail/zk-regex) and follow instructions\n\nIn all the below commands, replace `$payment_type` with `venmo`, `hdfc`, or `paylah` and `$circuit_type` with `send` or `registration`. \nCD into `scripts` and run `cp .env.example .env`. Open the file and input your values.\nCD into the circuit folder you want to develop and run the following commands.\n\n### Compilation\n\n1. Run `yarn compile:$payment_type:$circuit_type`. This will generate the R1CS SYM and WASM files.\n\n### Generate witness\n\n1. Copy a `SEND` eml file into `emls` for a given email type. Make sure you are downloading the original email file. For example you can follow the following steps in [Gmail](https://support.google.com/mail/answer/29436?hl=en#zippy=%2Cgmail). Name your Venmo email `${payment_type}_send.eml`.\n2. Run `yarn gen-input:$payment_type:$circuit_type`. This will generate an input file with the name `input_$payment_type_$circuit_type.json`.\n\n### Run tests\n\n1. Run `yarn test:$payment_type:$circuit_type`.\n2. Optionally, only run regex tests by running `yarn test test/regexes`\n3. For development purposes, you only need to run up to this step.\n\n### Proving Key Generation\n\n1. `cd` into `scripts` and run `cp entropy.env.example entropy.env`. Open the file and input your randomness. Entropy is needed to generate the proving key successfully\n2. cd back into circuit folder and run `yarn genkey:non-chunked:unsafe:$payment_type:$circuit_type`, which will generate keys skipping phase2 contribution and save keygen time (DO NOT USE IN PRODUCTION)\n\n### Generating Proofs\n\n1. cd into `scripts` and update `circuit.env.`\n2. To generate proofs using RapidSnark run `yarn:genproof:$payment_type:$circuit_type`"
  },
  {
    "path": "circuits-circom/circuits/common/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAkgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQALIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAwgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAOIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA8gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFEEQajYCFAwBCwsDQCAAIAAoAhAiAUEBazYCECABBEAgACAAKAIUIgFBAWo2AhQgACABLQAAIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDAwBCwsgACAAKAIYQfH/A3A2AhggACAAKAIMQfH/A3A2AgwLIAAgACgCGCAAKAIMQRB0cjYCHAsgACgCHCEAIANBEGokACAAC1IBAn9BkJcBKAIAIgEgAEEDakF8cSICaiEAAkAgAkEAIAAgAU0bDQAgAD8AQRB0SwRAIAAQDEUNAQtBkJcBIAA2AgAgAQ8LQbSbAUEwNgIAQX8LvAIBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQoAghFBEAgBCAEKAIYQQhqNgIICwJAIAQpAxAgBCgCGCkDMFoEQCAEKAIIQRJBABAUIARBADYCHAwBCwJAIAQoAgxBCHFFBEAgBCgCGCgCQCAEKQMQp0EEdGooAgQNAQsgBCgCGCgCQCAEKQMQp0EEdGooAgBFBEAgBCgCCEESQQAQFCAEQQA2AhwMAgsCQCAEKAIYKAJAIAQpAxCnQQR0ai0ADEEBcUUNACAEKAIMQQhxDQAgBCgCCEEXQQAQFCAEQQA2AhwMAgsgBCAEKAIYKAJAIAQpAxCnQQR0aigCADYCHAwBCyAEIAQoAhgoAkAgBCkDEKdBBHRqKAIENgIcCyAEKAIcIQAgBEEgaiQAIAALhAEBAX8jAEEQayIBJAAgASAANgIIIAFB2AAQGCIANgIEAkAgAEUEQCABQQA2AgwMAQsCQCABKAIIBEAgASgCBCABKAIIQdgAEBkaDAELIAEoAgQQUwsgASgCBEEANgIAIAEoAgRBAToABSABIAEoAgQ2AgwLIAEoAgwhACABQRBqJAAgAAtvAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGCADKAIQrRAeNgIMAkAgAygCDEUEQCADQX82AhwMAQsgAygCDCADKAIUIAMoAhAQGRogA0EANgIcCyADKAIcGiADQSBqJAALogEBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQgBCgCDCAEKQMQECkiADYCBAJAIABFBEAgBCgCCEEOQQAQFCAEQQA2AhwMAQsgBCgCGCAEKAIEKAIEIAQpAxAgBCgCCBBkQQBIBEAgBCgCBBAWIARBADYCHAwBCyAEIAQoAgQ2AhwLIAQoAhwhACAEQSBqJAAgAAugAQEBfyMAQSBrIgMkACADIAA2AhQgAyABNgIQIAMgAjcDCCADIAMoAhA2AgQCQCADKQMIQghUBEAgA0J/NwMYDAELIwBBEGsiACADKAIUNgIMIAAoAgwoAgAhACADKAIEIAA2AgAjAEEQayIAIAMoAhQ2AgwgACgCDCgCBCEAIAMoAgQgADYCBCADQgg3AxgLIAMpAxghAiADQSBqJAAgAguDAQIDfwF+AkAgAEKAgICAEFQEQCAAIQUMAQsDQCABQQFrIgEgACAAQgqAIgVCCn59p0EwcjoAACAAQv////+fAVYhAiAFIQAgAg0ACwsgBaciAgRAA0AgAUEBayIBIAIgAkEKbiIDQQpsa0EwcjoAACACQQlLIQQgAyECIAQNAAsLIAELPwEBfyMAQRBrIgIgADYCDCACIAE2AgggAigCDARAIAIoAgwgAigCCCgCADYCACACKAIMIAIoAggoAgQ2AgQLC9IIAQJ/IwBBIGsiBCQAIAQgADYCGCAEIAE2AhQgBCACNgIQIAQgAzYCDAJAIAQoAhhFBEAgBCgCFARAIAQoAhRBADYCAAsgBEGVFTYCHAwBCyAEKAIQQcAAcUUEQCAEKAIYKAIIRQRAIAQoAhhBABA6GgsCQAJAAkAgBCgCEEGAAXFFDQAgBCgCGCgCCEEBRg0AIAQoAhgoAghBAkcNAQsgBCgCGCgCCEEERw0BCyAEKAIYKAIMRQRAIAQoAhgoAgAhASAEKAIYLwEEIQIgBCgCGEEQaiEDIAQoAgwhBSMAQTBrIgAkACAAIAE2AiggACACNgIkIAAgAzYCICAAIAU2AhwgACAAKAIoNgIYAkAgACgCJEUEQCAAKAIgBEAgACgCIEEANgIACyAAQQA2AiwMAQsgAEEBNgIQIABBADYCDANAIAAoAgwgACgCJEkEQCMAQRBrIgEgACgCGCAAKAIMai0AAEEBdEGgFWovAQA2AggCQCABKAIIQYABSQRAIAFBATYCDAwBCyABKAIIQYAQSQRAIAFBAjYCDAwBCyABKAIIQYCABEkEQCABQQM2AgwMAQsgAUEENgIMCyAAIAEoAgwgACgCEGo2AhAgACAAKAIMQQFqNgIMDAELCyAAIAAoAhAQGCIBNgIUIAFFBEAgACgCHEEOQQAQFCAAQQA2AiwMAQsgAEEANgIIIABBADYCDANAIAAoAgwgACgCJEkEQCAAKAIUIAAoAghqIQIjAEEQayIBIAAoAhggACgCDGotAABBAXRBoBVqLwEANgIIIAEgAjYCBAJAIAEoAghBgAFJBEAgASgCBCABKAIIOgAAIAFBATYCDAwBCyABKAIIQYAQSQRAIAEoAgQgASgCCEEGdkEfcUHAAXI6AAAgASgCBCABKAIIQT9xQYABcjoAASABQQI2AgwMAQsgASgCCEGAgARJBEAgASgCBCABKAIIQQx2QQ9xQeABcjoAACABKAIEIAEoAghBBnZBP3FBgAFyOgABIAEoAgQgASgCCEE/cUGAAXI6AAIgAUEDNgIMDAELIAEoAgQgASgCCEESdkEHcUHwAXI6AAAgASgCBCABKAIIQQx2QT9xQYABcjoAASABKAIEIAEoAghBBnZBP3FBgAFyOgACIAEoAgQgASgCCEE/cUGAAXI6AAMgAUEENgIMCyAAIAEoAgwgACgCCGo2AgggACAAKAIMQQFqNgIMDAELCyAAKAIUIAAoAhBBAWtqQQA6AAAgACgCIARAIAAoAiAgACgCEEEBazYCAAsgACAAKAIUNgIsCyAAKAIsIQEgAEEwaiQAIAQoAhggATYCDCABRQRAIARBADYCHAwECwsgBCgCFARAIAQoAhQgBCgCGCgCEDYCAAsgBCAEKAIYKAIMNgIcDAILCyAEKAIUBEAgBCgCFCAEKAIYLwEENgIACyAEIAQoAhgoAgA2AhwLIAQoAhwhACAEQSBqJAAgAAs5AQF/IwBBEGsiASAANgIMQQAhACABKAIMLQAAQQFxBH8gASgCDCkDECABKAIMKQMIUQVBAAtBAXEL7wIBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCC0AKEEBcQRAIAFBfzYCDAwBCyABKAIIKAIkQQNGBEAgASgCCEEMakEXQQAQFCABQX82AgwMAQsCQCABKAIIKAIgBEACfyMAQRBrIgAgASgCCDYCDCAAKAIMKQMYQsAAg1ALBEAgASgCCEEMakEdQQAQFCABQX82AgwMAwsMAQsgASgCCCgCAARAIAEoAggoAgAQSEEASARAIAEoAghBDGogASgCCCgCABAXIAFBfzYCDAwDCwsgASgCCEEAQgBBABAgQgBTBEAgASgCCCgCAARAIAEoAggoAgAQLxoLIAFBfzYCDAwCCwsgASgCCEEAOgA0IAEoAghBADoANSMAQRBrIgAgASgCCEEMajYCDCAAKAIMBEAgACgCDEEANgIAIAAoAgxBADYCBAsgASgCCCIAIAAoAiBBAWo2AiAgAUEANgIMCyABKAIMIQAgAUEQaiQAIAALdQIBfwF+IwBBEGsiASQAIAEgADYCBAJAIAEoAgQtAChBAXEEQCABQn83AwgMAQsgASgCBCgCIEUEQCABKAIEQQxqQRJBABAUIAFCfzcDCAwBCyABIAEoAgRBAEIAQQcQIDcDCAsgASkDCCECIAFBEGokACACC50BAQF/IwBBEGsiASAANgIIAkACQAJAIAEoAghFDQAgASgCCCgCIEUNACABKAIIKAIkDQELIAFBATYCDAwBCyABIAEoAggoAhw2AgQCQAJAIAEoAgRFDQAgASgCBCgCACABKAIIRw0AIAEoAgQoAgRBtP4ASQ0AIAEoAgQoAgRB0/4ATQ0BCyABQQE2AgwMAQsgAUEANgIMCyABKAIMC4ABAQN/IwBBEGsiAiAANgIMIAIgATYCCCACKAIIQQh2IQEgAigCDCgCCCEDIAIoAgwiBCgCFCEAIAQgAEEBajYCFCAAIANqIAE6AAAgAigCCEH/AXEhASACKAIMKAIIIQMgAigCDCICKAIUIQAgAiAAQQFqNgIUIAAgA2ogAToAAAuZBQEBfyMAQUBqIgQkACAEIAA2AjggBCABNwMwIAQgAjYCLCAEIAM2AiggBEHIABAYIgA2AiQCQCAARQRAIARBADYCPAwBCyAEKAIkQgA3AzggBCgCJEIANwMYIAQoAiRCADcDMCAEKAIkQQA2AgAgBCgCJEEANgIEIAQoAiRCADcDCCAEKAIkQgA3AxAgBCgCJEEANgIoIAQoAiRCADcDIAJAIAQpAzBQBEBBCBAYIQAgBCgCJCAANgIEIABFBEAgBCgCJBAVIAQoAihBDkEAEBQgBEEANgI8DAMLIAQoAiQoAgRCADcDAAwBCyAEKAIkIAQpAzBBABDCAUEBcUUEQCAEKAIoQQ5BABAUIAQoAiQQMiAEQQA2AjwMAgsgBEIANwMIIARCADcDGCAEQgA3AxADQCAEKQMYIAQpAzBUBEAgBCgCOCAEKQMYp0EEdGopAwhQRQRAIAQoAjggBCkDGKdBBHRqKAIARQRAIAQoAihBEkEAEBQgBCgCJBAyIARBADYCPAwFCyAEKAIkKAIAIAQpAxCnQQR0aiAEKAI4IAQpAxinQQR0aigCADYCACAEKAIkKAIAIAQpAxCnQQR0aiAEKAI4IAQpAxinQQR0aikDCDcDCCAEKAIkKAIEIAQpAxinQQN0aiAEKQMINwMAIAQgBCgCOCAEKQMYp0EEdGopAwggBCkDCHw3AwggBCAEKQMQQgF8NwMQCyAEIAQpAxhCAXw3AxgMAQsLIAQoAiQgBCkDEDcDCCAEKAIkIAQoAiwEfkIABSAEKAIkKQMICzcDGCAEKAIkKAIEIAQoAiQpAwinQQN0aiAEKQMINwMAIAQoAiQgBCkDCDcDMAsgBCAEKAIkNgI8CyAEKAI8IQAgBEFAayQAIAALngEBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQgBCgCGCAEKQMQIAQoAgwgBCgCCBA/IgA2AgQCQCAARQRAIARBADYCHAwBCyAEIAQoAgQoAjBBACAEKAIMIAQoAggQRiIANgIAIABFBEAgBEEANgIcDAELIAQgBCgCADYCHAsgBCgCHCEAIARBIGokACAAC5wIAQt/IABFBEAgARAYDwsgAUFATwRAQbSbAUEwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEGIABBCGsiBSgCBCIJQXhxIQQCQCAJQQNxRQRAQQAgBkGAAkkNAhogBkEEaiAETQRAIAUhAiAEIAZrQcSfASgCAEEBdE0NAgtBAAwCCyAEIAVqIQcCQCAEIAZPBEAgBCAGayIDQRBJDQEgBSAJQQFxIAZyQQJyNgIEIAUgBmoiAiADQQNyNgIEIAcgBygCBEEBcjYCBCACIAMQxgEMAQsgB0H8mwEoAgBGBEBB8JsBKAIAIARqIgQgBk0NAiAFIAlBAXEgBnJBAnI2AgQgBSAGaiIDIAQgBmsiAkEBcjYCBEHwmwEgAjYCAEH8mwEgAzYCAAwBCyAHQfibASgCAEYEQEHsmwEoAgAgBGoiAyAGSQ0CAkAgAyAGayICQRBPBEAgBSAJQQFxIAZyQQJyNgIEIAUgBmoiBCACQQFyNgIEIAMgBWoiAyACNgIAIAMgAygCBEF+cTYCBAwBCyAFIAlBAXEgA3JBAnI2AgQgAyAFaiICIAIoAgRBAXI2AgRBACECQQAhBAtB+JsBIAQ2AgBB7JsBIAI2AgAMAQsgBygCBCIDQQJxDQEgA0F4cSAEaiIKIAZJDQEgCiAGayEMAkAgA0H/AU0EQCAHKAIIIgQgA0EDdiICQQN0QYycAWpGGiAEIAcoAgwiA0YEQEHkmwFB5JsBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBygCGCELAkAgByAHKAIMIghHBEAgBygCCCICQfSbASgCAEkaIAIgCDYCDCAIIAI2AggMAQsCQCAHQRRqIgQoAgAiAg0AIAdBEGoiBCgCACICDQBBACEIDAELA0AgBCEDIAIiCEEUaiIEKAIAIgINACAIQRBqIQQgCCgCECICDQALIANBADYCAAsgC0UNAAJAIAcgBygCHCIDQQJ0QZSeAWoiAigCAEYEQCACIAg2AgAgCA0BQeibAUHomwEoAgBBfiADd3E2AgAMAgsgC0EQQRQgCygCECAHRhtqIAg2AgAgCEUNAQsgCCALNgIYIAcoAhAiAgRAIAggAjYCECACIAg2AhgLIAcoAhQiAkUNACAIIAI2AhQgAiAINgIYCyAMQQ9NBEAgBSAJQQFxIApyQQJyNgIEIAUgCmoiAiACKAIEQQFyNgIEDAELIAUgCUEBcSAGckECcjYCBCAFIAZqIgMgDEEDcjYCBCAFIApqIgIgAigCBEEBcjYCBCADIAwQxgELIAUhAgsgAgsiAgRAIAJBCGoPCyABEBgiBUUEQEEADwsgBSAAQXxBeCAAQQRrKAIAIgJBA3EbIAJBeHFqIgIgASABIAJLGxAZGiAAEBUgBQtDAQN/AkAgAkUNAANAIAAtAAAiBCABLQAAIgVGBEAgAUEBaiEBIABBAWohACACQQFrIgINAQwCCwsgBCAFayEDCyADC4wDAQF/IwBBIGsiBCQAIAQgADYCGCAEIAE7ARYgBCACNgIQIAQgAzYCDAJAIAQvARZFBEAgBEEANgIcDAELAkACQAJAAkAgBCgCEEGAMHEiAARAIABBgBBGDQEgAEGAIEYNAgwDCyAEQQA2AgQMAwsgBEECNgIEDAILIARBBDYCBAwBCyAEKAIMQRJBABAUIARBADYCHAwBCyAEQRQQGCIANgIIIABFBEAgBCgCDEEOQQAQFCAEQQA2AhwMAQsgBC8BFkEBahAYIQAgBCgCCCAANgIAIABFBEAgBCgCCBAVIARBADYCHAwBCyAEKAIIKAIAIAQoAhggBC8BFhAZGiAEKAIIKAIAIAQvARZqQQA6AAAgBCgCCCAELwEWOwEEIAQoAghBADYCCCAEKAIIQQA2AgwgBCgCCEEANgIQIAQoAgQEQCAEKAIIIAQoAgQQOkEFRgRAIAQoAggQJCAEKAIMQRJBABAUIARBADYCHAwCCwsgBCAEKAIINgIcCyAEKAIcIQAgBEEgaiQAIAALNwEBfyMAQRBrIgEgADYCCAJAIAEoAghFBEAgAUEAOwEODAELIAEgASgCCC8BBDsBDgsgAS8BDguJAgEBfyMAQRBrIgEkACABIAA2AgwCQCABKAIMLQAFQQFxBEAgASgCDCgCAEECcUUNAQsgASgCDCgCMBAkIAEoAgxBADYCMAsCQCABKAIMLQAFQQFxBEAgASgCDCgCAEEIcUUNAQsgASgCDCgCNBAjIAEoAgxBADYCNAsCQCABKAIMLQAFQQFxBEAgASgCDCgCAEEEcUUNAQsgASgCDCgCOBAkIAEoAgxBADYCOAsCQCABKAIMLQAFQQFxBEAgASgCDCgCAEGAAXFFDQELIAEoAgwoAlQEQCABKAIMKAJUQQAgASgCDCgCVBAuEDMLIAEoAgwoAlQQFSABKAIMQQA2AlQLIAFBEGokAAvxAQEBfyMAQRBrIgEgADYCDCABKAIMQQA2AgAgASgCDEEAOgAEIAEoAgxBADoABSABKAIMQQE6AAYgASgCDEG/BjsBCCABKAIMQQo7AQogASgCDEEAOwEMIAEoAgxBfzYCECABKAIMQQA2AhQgASgCDEEANgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/circuits/common/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/circuits/common/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-common\",\n    \"version\": \"0.0.1\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Common regex circuits for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"main\": \"dist/generate_input.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/zk-regex-circom\": \"1.2.1\",\n        \"circomlib\": \"^2.0.5\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/circuits/common/regexes/body_hash_regex.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate BodyHashRegex (msg_bytes) {\n    signal input msg[msg_bytes];\n    signal output out;\n\n    var num_bytes = msg_bytes;\n    signal in[num_bytes];\n    for (var i = 0; i < msg_bytes; i++) {\n        in[i] <== msg[i];\n    }\n\n    component eq[65][num_bytes];\n    component lt[6][num_bytes];\n    component and[35][num_bytes];\n    component multi_or[7][num_bytes];\n    signal states[num_bytes+1][29];\n\n    for (var i = 0; i < num_bytes; i++) {\n        states[i][0] <== 1;\n    }\n    for (var i = 1; i < 29; i++) {\n        states[0][i] <== 0;\n    }\n\n    for (var i = 0; i < num_bytes; i++) {\n        // First regex catches all lower case except 'b' so only 25 chars\n        // 110 = 'n'\n        eq[0][i] = IsEqual();\n        eq[0][i].in[0] <== in[i];\n        eq[0][i].in[1] <== 110;\n        // 108 = 'l'\n        eq[1][i] = IsEqual();\n        eq[1][i].in[0] <== in[i];\n        eq[1][i].in[1] <== 108;\n        // 103 = 'g'\n        eq[2][i] = IsEqual();\n        eq[2][i].in[0] <== in[i];\n        eq[2][i].in[1] <== 103;\n        // 114 = 'r'\n        eq[3][i] = IsEqual();\n        eq[3][i].in[0] <== in[i];\n        eq[3][i].in[1] <== 114;\n        // 115 = 's'\n        eq[4][i] = IsEqual();\n        eq[4][i].in[0] <== in[i];\n        eq[4][i].in[1] <== 115;\n        // 112 = 'p'\n        eq[5][i] = IsEqual();\n        eq[5][i].in[0] <== in[i];\n        eq[5][i].in[1] <== 112;\n        // 101 = 'e'\n        eq[6][i] = IsEqual();\n        eq[6][i].in[0] <== in[i];\n        eq[6][i].in[1] <== 101;\n        // 107 = 'k'\n        eq[7][i] = IsEqual();\n        eq[7][i].in[0] <== in[i];\n        eq[7][i].in[1] <== 107;\n        // 99 = 'c'\n        eq[8][i] = IsEqual();\n        eq[8][i].in[0] <== in[i];\n        eq[8][i].in[1] <== 99;\n        // 109 = 'm'\n        eq[9][i] = IsEqual();\n        eq[9][i].in[0] <== in[i];\n        eq[9][i].in[1] <== 109;\n        // 118 = 'v'\n        eq[10][i] = IsEqual();\n        eq[10][i].in[0] <== in[i];\n        eq[10][i].in[1] <== 118;\n        // 117 = 'u'\n        eq[11][i] = IsEqual();\n        eq[11][i].in[0] <== in[i];\n        eq[11][i].in[1] <== 117;\n        // 105 = 'i'\n        eq[12][i] = IsEqual();\n        eq[12][i].in[0] <== in[i];\n        eq[12][i].in[1] <== 105;\n        // 113 = 'q'\n        eq[13][i] = IsEqual();\n        eq[13][i].in[0] <== in[i];\n        eq[13][i].in[1] <== 113;\n        // 122 = 'z'\n        eq[14][i] = IsEqual();\n        eq[14][i].in[0] <== in[i];\n        eq[14][i].in[1] <== 122;\n        // 111 = 'o'\n        eq[15][i] = IsEqual();\n        eq[15][i].in[0] <== in[i];\n        eq[15][i].in[1] <== 111;\n        // 104 = 'h'\n        eq[16][i] = IsEqual();\n        eq[16][i].in[0] <== in[i];\n        eq[16][i].in[1] <== 104;\n        // 102 = 'f'\n        eq[17][i] = IsEqual();\n        eq[17][i].in[0] <== in[i];\n        eq[17][i].in[1] <== 102;\n        // 97 = 'a'\n        eq[18][i] = IsEqual();\n        eq[18][i].in[0] <== in[i];\n        eq[18][i].in[1] <== 97;\n        // 116 = 't'\n        eq[19][i] = IsEqual();\n        eq[19][i].in[0] <== in[i];\n        eq[19][i].in[1] <== 116;\n        // 121 = 'y'\n        eq[20][i] = IsEqual();\n        eq[20][i].in[0] <== in[i];\n        eq[20][i].in[1] <== 121;\n        // 120 = 'x'\n        eq[21][i] = IsEqual();\n        eq[21][i].in[0] <== in[i];\n        eq[21][i].in[1] <== 120;\n        // 106 = 'j'\n        eq[22][i] = IsEqual();\n        eq[22][i].in[0] <== in[i];\n        eq[22][i].in[1] <== 106;\n        // 100 = 'd'\n        eq[23][i] = IsEqual();\n        eq[23][i].in[0] <== in[i];\n        eq[23][i].in[1] <== 100;\n        // 119 = 'w'\n        eq[24][i] = IsEqual();\n        eq[24][i].in[0] <== in[i];\n        eq[24][i].in[1] <== 119;\n        and[0][i] = AND();\n        and[0][i].a <== states[i][13];\n        multi_or[0][i] = MultiOR(25);\n        multi_or[0][i].in[0] <== eq[0][i].out; // 110 = 'n'\n        multi_or[0][i].in[1] <== eq[1][i].out; // 108 = 'l'\n        multi_or[0][i].in[2] <== eq[2][i].out; // 103 = 'g'\n        multi_or[0][i].in[3] <== eq[3][i].out; // 114 = 'r'\n        multi_or[0][i].in[4] <== eq[4][i].out; // 115 = 's'\n        multi_or[0][i].in[5] <== eq[5][i].out; // 112 = 'p'\n        multi_or[0][i].in[6] <== eq[6][i].out; // 101 = 'e'\n        multi_or[0][i].in[7] <== eq[7][i].out; // 107 = 'k'\n        multi_or[0][i].in[8] <== eq[8][i].out; // 99 = 'c'\n        multi_or[0][i].in[9] <== eq[9][i].out; // 109 = 'm'\n        multi_or[0][i].in[10] <== eq[10][i].out; // 118 = 'v'\n        multi_or[0][i].in[11] <== eq[11][i].out; // 117 = 'u'\n        multi_or[0][i].in[12] <== eq[12][i].out; // 105 = 'i'\n        multi_or[0][i].in[13] <== eq[13][i].out; // 113 = 'q'\n        multi_or[0][i].in[14] <== eq[14][i].out; // 122 = 'z'\n        multi_or[0][i].in[15] <== eq[15][i].out; // 111 = 'o'\n        multi_or[0][i].in[16] <== eq[16][i].out; // 104 = 'h'\n        multi_or[0][i].in[17] <== eq[17][i].out; // 102 = 'f'\n        multi_or[0][i].in[18] <== eq[18][i].out; // 97 = 'a'\n        multi_or[0][i].in[19] <== eq[19][i].out; // 116 = 't'\n        multi_or[0][i].in[20] <== eq[20][i].out; // 121 = 'y'\n        multi_or[0][i].in[21] <== eq[21][i].out; // 120 = 'x'\n        multi_or[0][i].in[22] <== eq[22][i].out; // 106 = 'j'\n        multi_or[0][i].in[23] <== eq[23][i].out; // 100 = 'd'\n        multi_or[0][i].in[24] <== eq[24][i].out; // 119 = 'w'\n        and[0][i].b <== multi_or[0][i].out;\n        // 96-123 = [a-z]\n        lt[0][i] = LessThan(8);\n        lt[0][i].in[0] <== 96;\n        lt[0][i].in[1] <== in[i];\n        lt[1][i] = LessThan(8);\n        lt[1][i].in[0] <== in[i];\n        lt[1][i].in[1] <== 123;\n        and[1][i] = AND();\n        and[1][i].a <== lt[0][i].out;\n        and[1][i].b <== lt[1][i].out;\n        and[2][i] = AND();\n        and[2][i].a <== states[i][25];\n        and[2][i].b <== and[1][i].out;\n        multi_or[1][i] = MultiOR(2);\n        multi_or[1][i].in[0] <== and[0][i].out;\n        multi_or[1][i].in[1] <== and[2][i].out;\n        states[i+1][1] <== multi_or[1][i].out;\n        // 61 = '='\n        eq[25][i] = IsEqual();\n        eq[25][i].in[0] <== in[i];\n        eq[25][i].in[1] <== 61;\n        and[3][i] = AND();\n        and[3][i].a <== states[i][1];\n        and[3][i].b <== eq[25][i].out;\n        and[4][i] = AND();\n        and[4][i].a <== states[i][14];\n        and[4][i].b <== eq[25][i].out;\n        multi_or[2][i] = MultiOR(2);\n        multi_or[2][i].in[0] <== and[3][i].out;\n        multi_or[2][i].in[1] <== and[4][i].out;\n        states[i+1][2] <== multi_or[2][i].out;\n        // 64-91 = [A-Z]\n        lt[2][i] = LessThan(8);\n        lt[2][i].in[0] <== 64;\n        lt[2][i].in[1] <== in[i];\n        lt[3][i] = LessThan(8);\n        lt[3][i].in[0] <== in[i];\n        lt[3][i].in[1] <== 91;\n        and[5][i] = AND();\n        and[5][i].a <== lt[2][i].out;\n        and[5][i].b <== lt[3][i].out;\n        // 47-58 = [0-9]\n        lt[4][i] = LessThan(8);\n        lt[4][i].in[0] <== 47;\n        lt[4][i].in[1] <== in[i];\n        lt[5][i] = LessThan(8);\n        lt[5][i].in[0] <== in[i];\n        lt[5][i].in[1] <== 58;\n        and[6][i] = AND();\n        and[6][i].a <== lt[4][i].out;\n        and[6][i].b <== lt[5][i].out;\n        // 126 = '~'\n        eq[26][i] = IsEqual();\n        eq[26][i].in[0] <== in[i];\n        eq[26][i].in[1] <== 126;\n        // 60 = '<'\n        eq[27][i] = IsEqual();\n        eq[27][i].in[0] <== in[i];\n        eq[27][i].in[1] <== 60;\n        // 37 = '%'\n        eq[28][i] = IsEqual();\n        eq[28][i].in[0] <== in[i];\n        eq[28][i].in[1] <== 37;\n        // 96 = '`'\n        eq[29][i] = IsEqual();\n        eq[29][i].in[0] <== in[i];\n        eq[29][i].in[1] <== 96;\n        // 11 = '\\t'\n        eq[30][i] = IsEqual();\n        eq[30][i].in[0] <== in[i];\n        eq[30][i].in[1] <== 11;\n        // 58 = ':'\n        eq[31][i] = IsEqual();\n        eq[31][i].in[0] <== in[i];\n        eq[31][i].in[1] <== 58;\n        // 10 = '\\n'\n        eq[32][i] = IsEqual();\n        eq[32][i].in[0] <== in[i];\n        eq[32][i].in[1] <== 10;\n        // 39 = '''\n        eq[33][i] = IsEqual();\n        eq[33][i].in[0] <== in[i];\n        eq[33][i].in[1] <== 39;\n        // 41 = ')'\n        eq[34][i] = IsEqual();\n        eq[34][i].in[0] <== in[i];\n        eq[34][i].in[1] <== 41;\n        // 47 = '/'\n        eq[35][i] = IsEqual();\n        eq[35][i].in[0] <== in[i];\n        eq[35][i].in[1] <== 47;\n        // 93 = ']'\n        eq[36][i] = IsEqual();\n        eq[36][i].in[0] <== in[i];\n        eq[36][i].in[1] <== 93;\n        // 36 = '$'\n        eq[37][i] = IsEqual();\n        eq[37][i].in[0] <== in[i];\n        eq[37][i].in[1] <== 36;\n        // 64 = '@'\n        eq[38][i] = IsEqual();\n        eq[38][i].in[0] <== in[i];\n        eq[38][i].in[1] <== 64;\n        // 63 = '?'\n        eq[39][i] = IsEqual();\n        eq[39][i].in[0] <== in[i];\n        eq[39][i].in[1] <== 63;\n        // 12 = '\\f'\n        eq[40][i] = IsEqual();\n        eq[40][i].in[0] <== in[i];\n        eq[40][i].in[1] <== 12;\n        // 95 = '_'\n        eq[41][i] = IsEqual();\n        eq[41][i].in[0] <== in[i];\n        eq[41][i].in[1] <== 95;\n        // 9 = '\\t'\n        eq[42][i] = IsEqual();\n        eq[42][i].in[0] <== in[i];\n        eq[42][i].in[1] <== 9;\n        // 43 = '+'\n        eq[43][i] = IsEqual();\n        eq[43][i].in[0] <== in[i];\n        eq[43][i].in[1] <== 43;\n        // 35 = '#'\n        eq[44][i] = IsEqual();\n        eq[44][i].in[0] <== in[i];\n        eq[44][i].in[1] <== 35;\n        // 94 = '^'\n        eq[45][i] = IsEqual();\n        eq[45][i].in[0] <== in[i];\n        eq[45][i].in[1] <== 94;\n        // 13 = '\\r'\n        eq[46][i] = IsEqual();\n        eq[46][i].in[0] <== in[i];\n        eq[46][i].in[1] <== 13;\n        // 46 = '.'\n        eq[47][i] = IsEqual();\n        eq[47][i].in[0] <== in[i];\n        eq[47][i].in[1] <== 46;\n        // 123 = '{'\n        eq[48][i] = IsEqual();\n        eq[48][i].in[0] <== in[i];\n        eq[48][i].in[1] <== 123;\n        // 92 = '\\'\n        eq[49][i] = IsEqual();\n        eq[49][i].in[0] <== in[i];\n        eq[49][i].in[1] <== 92;\n        // 40 = '('\n        eq[50][i] = IsEqual();\n        eq[50][i].in[0] <== in[i];\n        eq[50][i].in[1] <== 40;\n        // 44 = ','\n        eq[51][i] = IsEqual();\n        eq[51][i].in[0] <== in[i];\n        eq[51][i].in[1] <== 44;\n        // 38 = '&'\n        eq[52][i] = IsEqual();\n        eq[52][i].in[0] <== in[i];\n        eq[52][i].in[1] <== 38;\n        // 42 = '*'\n        eq[53][i] = IsEqual();\n        eq[53][i].in[0] <== in[i];\n        eq[53][i].in[1] <== 45;\n        // 62 = '>'\n        eq[54][i] = IsEqual();\n        eq[54][i].in[0] <== in[i];\n        eq[54][i].in[1] <== 62;\n        // 32 = ' '\n        eq[55][i] = IsEqual();\n        eq[55][i].in[0] <== in[i];\n        eq[55][i].in[1] <== 32;\n        // 34 = '\"'\n        eq[56][i] = IsEqual();\n        eq[56][i].in[0] <== in[i];\n        eq[56][i].in[1] <== 34;\n        // 91 = '['\n        eq[57][i] = IsEqual();\n        eq[57][i].in[0] <== in[i];\n        eq[57][i].in[1] <== 91;\n        // 33 = '!'\n        eq[58][i] = IsEqual();\n        eq[58][i].in[0] <== in[i];\n        eq[58][i].in[1] <== 33;\n        // 42 = '*'\n        eq[59][i] = IsEqual();\n        eq[59][i].in[0] <== in[i];\n        eq[59][i].in[1] <== 42;\n        // 125 = '}'\n        eq[60][i] = IsEqual();\n        eq[60][i].in[0] <== in[i];\n        eq[60][i].in[1] <== 125;\n        // 124 = '|'\n        eq[61][i] = IsEqual();\n        eq[61][i].in[0] <== in[i];\n        eq[61][i].in[1] <== 124;\n        and[7][i] = AND();\n        and[7][i].a <== states[i][2];\n        multi_or[3][i] = MultiOR(40);\n        multi_or[3][i].in[0] <== and[5][i].out;\n        multi_or[3][i].in[1] <== and[1][i].out;\n        multi_or[3][i].in[2] <== and[6][i].out;\n        multi_or[3][i].in[3] <== eq[26][i].out; // 126 = '~'\n        multi_or[3][i].in[4] <== eq[27][i].out; // 60 = '<'\n        multi_or[3][i].in[5] <== eq[28][i].out; // 37 = '%'\n        multi_or[3][i].in[6] <== eq[29][i].out; // 96 = '`'\n        multi_or[3][i].in[7] <== eq[30][i].out; // 11 = '\\t'\n        multi_or[3][i].in[8] <== eq[31][i].out; // 58 = ':'\n        multi_or[3][i].in[9] <== eq[32][i].out; // 10 = '\\n'\n        multi_or[3][i].in[10] <== eq[33][i].out; // 39 = '''\n        multi_or[3][i].in[11] <== eq[34][i].out; // 41 = ')'\n        multi_or[3][i].in[12] <== eq[35][i].out; // 47 = '/'\n        multi_or[3][i].in[13] <== eq[36][i].out; // 93 = ']'\n        multi_or[3][i].in[14] <== eq[37][i].out; // 36 = '$'\n        multi_or[3][i].in[15] <== eq[38][i].out; // 64 = '@'\n        multi_or[3][i].in[16] <== eq[39][i].out; // 63 = '?'\n        multi_or[3][i].in[17] <== eq[40][i].out; // 12 = '\\f'\n        multi_or[3][i].in[18] <== eq[25][i].out; // 61 = '=': Note using eq[25]\n        multi_or[3][i].in[19] <== eq[41][i].out; // 95 = '_'\n        multi_or[3][i].in[20] <== eq[42][i].out; // 9 = '\\t'\n        multi_or[3][i].in[21] <== eq[43][i].out; // 43 = '+'\n        multi_or[3][i].in[22] <== eq[44][i].out; // 35 = '#'\n        multi_or[3][i].in[23] <== eq[45][i].out; // 94 = '^'\n        multi_or[3][i].in[24] <== eq[46][i].out; // 13 = '\\r'\n        multi_or[3][i].in[25] <== eq[47][i].out; // 46 = '.'\n        multi_or[3][i].in[26] <== eq[48][i].out; // 123 = '{'\n        multi_or[3][i].in[27] <== eq[49][i].out; // 92 = '\\'\n        multi_or[3][i].in[28] <== eq[50][i].out; // 40 = '('\n        multi_or[3][i].in[29] <== eq[51][i].out; // 44 = ','\n        multi_or[3][i].in[30] <== eq[52][i].out; // 38 = '&'\n        multi_or[3][i].in[31] <== eq[53][i].out; // 42 = '*'\n        multi_or[3][i].in[32] <== eq[54][i].out; // 62 = '>'\n        multi_or[3][i].in[33] <== eq[55][i].out; // 32 = ' '\n        multi_or[3][i].in[34] <== eq[56][i].out; // 34 = '\"'\n        multi_or[3][i].in[35] <== eq[57][i].out; // 91 = '['\n        multi_or[3][i].in[36] <== eq[58][i].out; // 33 = '!'\n        multi_or[3][i].in[37] <== eq[59][i].out; // 42 = '*'\n        multi_or[3][i].in[38] <== eq[60][i].out; // 125 = '}'\n        multi_or[3][i].in[39] <== eq[61][i].out; // 124 = '|'\n        and[7][i].b <== multi_or[3][i].out;\n        and[8][i] = AND();\n        and[8][i].a <== states[i][3];\n        and[8][i].b <== multi_or[3][i].out;\n        multi_or[4][i] = MultiOR(2);\n        multi_or[4][i].in[0] <== and[7][i].out;\n        multi_or[4][i].in[1] <== and[8][i].out;\n        states[i+1][3] <== multi_or[4][i].out;\n        and[9][i] = AND();\n        and[9][i].a <== states[i][0];\n        and[9][i].b <== eq[46][i].out; // 13 = '\\r'\n        states[i+1][4] <== and[9][i].out;\n        and[10][i] = AND();\n        and[10][i].a <== states[i][4];\n        and[10][i].b <== eq[32][i].out; // 10 = '\\n'\n        states[i+1][5] <== and[10][i].out;\n        and[11][i] = AND();\n        and[11][i].a <== states[i][5];\n        and[11][i].b <== eq[23][i].out; // 100 = 'd'\n        states[i+1][6] <== and[11][i].out;\n        and[12][i] = AND();\n        and[12][i].a <== states[i][6];\n        and[12][i].b <== eq[7][i].out; // 107 = 'k'\n        states[i+1][7] <== and[12][i].out;\n        and[13][i] = AND();\n        and[13][i].a <== states[i][7];\n        and[13][i].b <== eq[12][i].out; // 105 = 'i'\n        states[i+1][8] <== and[13][i].out;\n        // 59 = ';'\n        eq[62][i] = IsEqual();\n        eq[62][i].in[0] <== in[i];\n        eq[62][i].in[1] <== 59;\n        and[14][i] = AND();\n        and[14][i].a <== states[i][3];\n        and[14][i].b <== eq[62][i].out;\n        states[i+1][9] <== and[14][i].out;\n        and[15][i] = AND();\n        and[15][i].a <== states[i][8];\n        and[15][i].b <== eq[9][i].out; // 109 = 'm'\n        states[i+1][10] <== and[15][i].out;\n        // 45 = '-'\n        eq[63][i] = IsEqual();\n        eq[63][i].in[0] <== in[i];\n        eq[63][i].in[1] <== 45;\n        and[16][i] = AND();\n        and[16][i].a <== states[i][10];\n        and[16][i].b <== eq[63][i].out;\n        states[i+1][11] <== and[16][i].out;\n        and[17][i] = AND();\n        and[17][i].a <== states[i][11];\n        and[17][i].b <== eq[4][i].out; // 115 = 's'\n        states[i+1][12] <== and[17][i].out;\n        and[18][i] = AND();\n        and[18][i].a <== states[i][9];\n        and[18][i].b <== eq[55][i].out; // 32 = ' '\n        states[i+1][13] <== and[18][i].out;\n        // 98 = 'b'\n        eq[64][i] = IsEqual();\n        eq[64][i].in[0] <== in[i];\n        eq[64][i].in[1] <== 98;\n        and[19][i] = AND();\n        and[19][i].a <== states[i][13];\n        and[19][i].b <== eq[64][i].out;\n        states[i+1][14] <== and[19][i].out;\n        and[20][i] = AND();\n        and[20][i].a <== states[i][12];\n        and[20][i].b <== eq[12][i].out;\n        states[i+1][15] <== and[20][i].out;\n        and[21][i] = AND();\n        and[21][i].a <== states[i][14];\n        and[21][i].b <== eq[16][i].out; // 104 = 'h'\n        states[i+1][16] <== and[21][i].out;\n        and[22][i] = AND();\n        and[22][i].a <== states[i][15];\n        and[22][i].b <== eq[2][i].out; // 103 = 'g'\n        states[i+1][17] <== and[22][i].out;\n        and[23][i] = AND();\n        and[23][i].a <== states[i][17];\n        and[23][i].b <== eq[0][i].out; // 110 = 'n'\n        states[i+1][18] <== and[23][i].out;\n        and[24][i] = AND();\n        and[24][i].a <== states[i][18];\n        and[24][i].b <== eq[18][i].out; // 97 = 'a'\n        states[i+1][19] <== and[24][i].out;\n        and[25][i] = AND();\n        and[25][i].a <== states[i][19];\n        and[25][i].b <== eq[19][i].out; // 116 = 't'\n        states[i+1][20] <== and[25][i].out;\n        and[26][i] = AND();\n        and[26][i].a <== states[i][16];\n        and[26][i].b <== eq[25][i].out; // 61 = '='\n        states[i+1][21] <== and[26][i].out;\n        and[27][i] = AND();\n        and[27][i].a <== states[i][20];\n        and[27][i].b <== eq[11][i].out; // 117 = 'u'\n        states[i+1][22] <== and[27][i].out;\n        and[28][i] = AND();\n        and[28][i].a <== states[i][22];\n        and[28][i].b <== eq[3][i].out; // 114 = 'r'\n        states[i+1][23] <== and[28][i].out;\n        and[29][i] = AND();\n        and[29][i].a <== states[i][23];\n        and[29][i].b <== eq[6][i].out; // 112 = 'p'\n        states[i+1][24] <== and[29][i].out;\n        and[30][i] = AND();\n        and[30][i].a <== states[i][24];\n        and[30][i].b <== eq[31][i].out; // 58 = ':'\n        states[i+1][25] <== and[30][i].out;\n        and[31][i] = AND();\n        and[31][i].a <== states[i][21];\n        multi_or[5][i] = MultiOR(6);\n        // Use and[5] and[6] and[1]\n        multi_or[5][i].in[0] <== and[5][i].out;\n        multi_or[5][i].in[1] <== and[1][i].out;\n        multi_or[5][i].in[2] <== and[6][i].out;\n        multi_or[5][i].in[3] <== eq[35][i].out; // 47 = '/'\n        multi_or[5][i].in[4] <== eq[43][i].out; // 43 = '+'\n        multi_or[5][i].in[5] <== eq[25][i].out; // 61 = '='\n        and[31][i].b <== multi_or[5][i].out;\n        and[32][i] = AND();\n        and[32][i].a <== states[i][26];\n        and[32][i].b <== multi_or[5][i].out;\n        multi_or[6][i] = MultiOR(2);\n        multi_or[6][i].in[0] <== and[31][i].out;\n        multi_or[6][i].in[1] <== and[32][i].out;\n        states[i+1][26] <== multi_or[6][i].out;\n        and[33][i] = AND();\n        and[33][i].a <== states[i][26];\n        and[33][i].b <== eq[62][i].out; // 59 = ';'\n        states[i+1][27] <== and[33][i].out;\n        and[34][i] = AND();\n        and[34][i].a <== states[i][27];\n        and[34][i].b <== eq[55][i].out; // 32 = ' '\n        states[i+1][28] <== and[34][i].out;\n    }\n\n    signal final_state_sum[num_bytes+1];\n    final_state_sum[0] <== states[0][28];\n    for (var i = 1; i <= num_bytes; i++) {\n        final_state_sum[i] <== final_state_sum[i-1] + states[i][28];\n    }\n    out <== final_state_sum[num_bytes];\n\n    signal output reveal[num_bytes];\n    for (var i = 0; i < num_bytes; i++) {\n        reveal[i] <== in[i] * states[i+1][26];\n    }\n}"
  },
  {
    "path": "circuits-circom/circuits/common/regexes/from_regex.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\n// (\\r\\n|^)from:([A-Za-z0-9 _.,\"@-]+)<[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+>\\r\\n\ntemplate FromRegex (msg_bytes) {\n    signal input msg[msg_bytes];\n    signal output out;\n\n    var num_bytes = msg_bytes+1;\n    signal in[num_bytes];\n    in[0] <== 128;      // \\x80 (sentinel for first character in string)\n    for (var i = 0; i < msg_bytes; i++) {\n        in[i+1] <== msg[i];\n    }\n\n    component eq[17][num_bytes];\n    component lt[12][num_bytes];\n    component and[22][num_bytes];\n    component multi_or[6][num_bytes];\n    signal states[num_bytes+1][16];\n\n    for (var i = 0; i < num_bytes+1; i++) {\n        states[i][0] <== 1;\n    }\n    for (var i = 1; i < 16; i++) {\n        states[0][i] <== 0;\n    }\n\n    for (var i = 0; i < num_bytes; i++) {\n        // 64-91 = [A-Z]\n        lt[0][i] = LessThan(8);\n        lt[0][i].in[0] <== 64;\n        lt[0][i].in[1] <== in[i];\n        lt[1][i] = LessThan(8);\n        lt[1][i].in[0] <== in[i];\n        lt[1][i].in[1] <== 91;\n        and[0][i] = AND();\n        and[0][i].a <== lt[0][i].out;\n        and[0][i].b <== lt[1][i].out;\n        // 96-123 = [a-z]\n        lt[2][i] = LessThan(8);\n        lt[2][i].in[0] <== 96;\n        lt[2][i].in[1] <== in[i];\n        lt[3][i] = LessThan(8);\n        lt[3][i].in[0] <== in[i];\n        lt[3][i].in[1] <== 123;\n        and[1][i] = AND();\n        and[1][i].a <== lt[2][i].out;\n        and[1][i].b <== lt[3][i].out;\n        // 47-58 = [0-9]\n        lt[4][i] = LessThan(8);\n        lt[4][i].in[0] <== 47;\n        lt[4][i].in[1] <== in[i];\n        lt[5][i] = LessThan(8);\n        lt[5][i].in[0] <== in[i];\n        lt[5][i].in[1] <== 58;\n        and[2][i] = AND();\n        and[2][i].a <== lt[4][i].out;\n        and[2][i].b <== lt[5][i].out;\n        // 44 = ','\n        eq[0][i] = IsEqual();\n        eq[0][i].in[0] <== in[i];\n        eq[0][i].in[1] <== 44;\n        // 45 = '-'\n        eq[1][i] = IsEqual();\n        eq[1][i].in[0] <== in[i];\n        eq[1][i].in[1] <== 45;\n        // 32 = ' '\n        eq[2][i] = IsEqual();\n        eq[2][i].in[0] <== in[i];\n        eq[2][i].in[1] <== 32;\n        // 34 = '\"'\n        eq[3][i] = IsEqual();\n        eq[3][i].in[0] <== in[i];\n        eq[3][i].in[1] <== 34;\n        // 64 = '@'\n        eq[4][i] = IsEqual();\n        eq[4][i].in[0] <== in[i];\n        eq[4][i].in[1] <== 64;\n        // 95 = '_'\n        eq[5][i] = IsEqual();\n        eq[5][i].in[0] <== in[i];\n        eq[5][i].in[1] <== 95;\n        // 46 = '.'\n        eq[6][i] = IsEqual();\n        eq[6][i].in[0] <== in[i];\n        eq[6][i].in[1] <== 46;\n        and[3][i] = AND();\n        and[3][i].a <== states[i][1];\n        multi_or[0][i] = MultiOR(10);\n        multi_or[0][i].in[0] <== and[0][i].out;\n        multi_or[0][i].in[1] <== and[1][i].out;\n        multi_or[0][i].in[2] <== and[2][i].out;\n        multi_or[0][i].in[3] <== eq[0][i].out;\n        multi_or[0][i].in[4] <== eq[1][i].out;\n        multi_or[0][i].in[5] <== eq[2][i].out;\n        multi_or[0][i].in[6] <== eq[3][i].out;\n        multi_or[0][i].in[7] <== eq[4][i].out;\n        multi_or[0][i].in[8] <== eq[5][i].out;\n        multi_or[0][i].in[9] <== eq[6][i].out;\n        and[3][i].b <== multi_or[0][i].out;\n        and[4][i] = AND();\n        and[4][i].a <== states[i][11];\n        and[4][i].b <== multi_or[0][i].out;\n        multi_or[1][i] = MultiOR(2);\n        multi_or[1][i].in[0] <== and[3][i].out;\n        multi_or[1][i].in[1] <== and[4][i].out;\n        states[i+1][1] <== multi_or[1][i].out;\n        // 13 = '\\r'\n        eq[7][i] = IsEqual();\n        eq[7][i].in[0] <== in[i];\n        eq[7][i].in[1] <== 13;\n        and[5][i] = AND();\n        and[5][i].a <== states[i][0];\n        and[5][i].b <== eq[7][i].out;\n        states[i+1][2] <== and[5][i].out;\n        // 128 = '\\x80'\n        eq[8][i] = IsEqual();\n        eq[8][i].in[0] <== in[i];\n        eq[8][i].in[1] <== 128;\n        and[6][i] = AND();\n        and[6][i].a <== states[i][0];\n        and[6][i].b <== eq[8][i].out;\n        // 10 = '\\n'\n        eq[9][i] = IsEqual();\n        eq[9][i].in[0] <== in[i];\n        eq[9][i].in[1] <== 10;\n        and[7][i] = AND();\n        and[7][i].a <== states[i][2];\n        and[7][i].b <== eq[9][i].out;\n        multi_or[2][i] = MultiOR(2);\n        multi_or[2][i].in[0] <== and[6][i].out;\n        multi_or[2][i].in[1] <== and[7][i].out;\n        states[i+1][3] <== multi_or[2][i].out;\n        // 60 = '<'\n        eq[10][i] = IsEqual();\n        eq[10][i].in[0] <== in[i];\n        eq[10][i].in[1] <== 60;\n        and[8][i] = AND();\n        and[8][i].a <== states[i][1];\n        and[8][i].b <== eq[10][i].out;\n        states[i+1][4] <== and[8][i].out;\n        // 102 = 'f'\n        eq[11][i] = IsEqual();\n        eq[11][i].in[0] <== in[i];\n        eq[11][i].in[1] <== 102;\n        and[9][i] = AND();\n        and[9][i].a <== states[i][3];\n        and[9][i].b <== eq[11][i].out;\n        states[i+1][5] <== and[9][i].out;\n        and[10][i] = AND();\n        and[10][i].a <== states[i][4];\n        multi_or[3][i] = MultiOR(6);\n        multi_or[3][i].in[0] <== and[0][i].out; // [A-Z]\n        multi_or[3][i].in[1] <== and[1][i].out; // [a-z]\n        multi_or[3][i].in[2] <== and[2][i].out; // [0-9]\n        multi_or[3][i].in[3] <== eq[1][i].out; // 45 = '-'\n        multi_or[3][i].in[4] <== eq[5][i].out; // 95 = '_'\n        multi_or[3][i].in[5] <== eq[6][i].out; // 46 = '.'\n        and[10][i].b <== multi_or[3][i].out;\n        and[11][i] = AND();\n        and[11][i].a <== states[i][6];\n        and[11][i].b <== multi_or[3][i].out;\n        multi_or[4][i] = MultiOR(2);\n        multi_or[4][i].in[0] <== and[10][i].out;\n        multi_or[4][i].in[1] <== and[11][i].out;\n        states[i+1][6] <== multi_or[4][i].out;\n        // 114 = 'r'\n        eq[12][i] = IsEqual();\n        eq[12][i].in[0] <== in[i];\n        eq[12][i].in[1] <== 114;\n        and[12][i] = AND();\n        and[12][i].a <== states[i][5];\n        and[12][i].b <== eq[12][i].out;\n        states[i+1][7] <== and[12][i].out;\n        // 111 = 'o'\n        eq[13][i] = IsEqual();\n        eq[13][i].in[0] <== in[i];\n        eq[13][i].in[1] <== 111;\n        and[13][i] = AND();\n        and[13][i].a <== states[i][7];\n        and[13][i].b <== eq[13][i].out;\n        states[i+1][8] <== and[13][i].out;\n        // 109 = 'm'\n        eq[14][i] = IsEqual();\n        eq[14][i].in[0] <== in[i];\n        eq[14][i].in[1] <== 109;\n        and[14][i] = AND();\n        and[14][i].a <== states[i][8];\n        and[14][i].b <== eq[14][i].out;\n        states[i+1][9] <== and[14][i].out;\n        and[15][i] = AND();\n        and[15][i].a <== states[i][6];\n        and[15][i].b <== eq[4][i].out; // 64 = '@'\n        states[i+1][10] <== and[15][i].out;\n        // 58 = ':'\n        eq[15][i] = IsEqual();\n        eq[15][i].in[0] <== in[i];\n        eq[15][i].in[1] <== 58;\n        and[16][i] = AND();\n        and[16][i].a <== states[i][9];\n        and[16][i].b <== eq[15][i].out;\n        states[i+1][11] <== and[16][i].out;\n        and[17][i] = AND();\n        and[17][i].a <== states[i][10];\n        and[17][i].b <== multi_or[3][i].out;\n        and[18][i] = AND();\n        and[18][i].a <== states[i][12];\n        and[18][i].b <== multi_or[3][i].out;\n        multi_or[5][i] = MultiOR(2);\n        multi_or[5][i].in[0] <== and[17][i].out;\n        multi_or[5][i].in[1] <== and[18][i].out;\n        states[i+1][12] <== multi_or[5][i].out;\n        // 62 = '>'\n        eq[16][i] = IsEqual();\n        eq[16][i].in[0] <== in[i];\n        eq[16][i].in[1] <== 62;\n        and[19][i] = AND();\n        and[19][i].a <== states[i][12];\n        and[19][i].b <== eq[16][i].out;\n        states[i+1][13] <== and[19][i].out;\n        and[20][i] = AND();\n        and[20][i].a <== states[i][13];\n        and[20][i].b <== eq[7][i].out; // 13 = '\\r'\n        states[i+1][14] <== and[20][i].out;\n        and[21][i] = AND();\n        and[21][i].a <== states[i][14];\n        and[21][i].b <== eq[9][i].out; // 10 = '\\n'\n        states[i+1][15] <== and[21][i].out;\n    }\n\n    signal final_state_sum[num_bytes+1];\n    final_state_sum[0] <== states[0][15];\n    for (var i = 1; i <= num_bytes; i++) {\n        final_state_sum[i] <== final_state_sum[i-1] + states[i][15];\n    }\n    out <== final_state_sum[num_bytes];\n\n    signal output reveal[msg_bytes];\n    for (var i = 0; i < msg_bytes; i++) {\n        reveal[i] <== in[i+1] * (states[i+2][6] + states[i+2][10] + states[i+2][12]);\n    }\n}"
  },
  {
    "path": "circuits-circom/circuits/common/regexes/to_regex.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate ToRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[55][num_bytes];\n\tcomponent lt[18][num_bytes];\n\tcomponent and[35][num_bytes];\n\tcomponent multi_or[13][num_bytes];\n\tsignal states[num_bytes+1][13];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 13; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(12);\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 14;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 59;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 61;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 254;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[2][i].out;\n\t\tand[1][i].b <== lt[3][i].out;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 0;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 1;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 2;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 3;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 4;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 5;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 6;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 7;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 8;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 9;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 11;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 12;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(14);\n\t\tmulti_or[0][i].in[0] <== and[0][i].out;\n\t\tmulti_or[0][i].in[1] <== and[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[13] <== eq[11][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 14;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 44;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== lt[4][i].out;\n\t\tand[3][i].b <== lt[5][i].out;\n\t\tlt[6][i] = LessEqThan(8);\n\t\tlt[6][i].in[0] <== 123;\n\t\tlt[6][i].in[1] <== in[i];\n\t\tlt[7][i] = LessEqThan(8);\n\t\tlt[7][i].in[0] <== in[i];\n\t\tlt[7][i].in[1] <== 254;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== lt[6][i].out;\n\t\tand[4][i].b <== lt[7][i].out;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 47;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 58;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 59;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 61;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 62;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 63;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 64;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 91;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 92;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 93;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 94;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 96;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][2];\n\t\tmulti_or[1][i] = MultiOR(26);\n\t\tmulti_or[1][i].in[0] <== and[3][i].out;\n\t\tmulti_or[1][i].in[1] <== and[4][i].out;\n\t\tmulti_or[1][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[1][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[1][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[1][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[1][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[1][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[1][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[1][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[1][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[1][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[1][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[1][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[1][i].in[14] <== eq[12][i].out;\n\t\tmulti_or[1][i].in[15] <== eq[13][i].out;\n\t\tmulti_or[1][i].in[16] <== eq[14][i].out;\n\t\tmulti_or[1][i].in[17] <== eq[15][i].out;\n\t\tmulti_or[1][i].in[18] <== eq[16][i].out;\n\t\tmulti_or[1][i].in[19] <== eq[17][i].out;\n\t\tmulti_or[1][i].in[20] <== eq[18][i].out;\n\t\tmulti_or[1][i].in[21] <== eq[19][i].out;\n\t\tmulti_or[1][i].in[22] <== eq[20][i].out;\n\t\tmulti_or[1][i].in[23] <== eq[21][i].out;\n\t\tmulti_or[1][i].in[24] <== eq[22][i].out;\n\t\tmulti_or[1][i].in[25] <== eq[23][i].out;\n\t\tand[5][i].b <== multi_or[1][i].out;\n\t\tlt[8][i] = LessEqThan(8);\n\t\tlt[8][i].in[0] <== 14;\n\t\tlt[8][i].in[1] <== in[i];\n\t\tlt[9][i] = LessEqThan(8);\n\t\tlt[9][i].in[0] <== in[i];\n\t\tlt[9][i].in[1] <== 32;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== lt[8][i].out;\n\t\tand[6][i].b <== lt[9][i].out;\n\t\tlt[10][i] = LessEqThan(8);\n\t\tlt[10][i].in[0] <== 127;\n\t\tlt[10][i].in[1] <== in[i];\n\t\tlt[11][i] = LessEqThan(8);\n\t\tlt[11][i].in[0] <== in[i];\n\t\tlt[11][i].in[1] <== 254;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== lt[10][i].out;\n\t\tand[7][i].b <== lt[11][i].out;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 34;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 40;\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 41;\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 44;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][5];\n\t\tmulti_or[2][i] = MultiOR(24);\n\t\tmulti_or[2][i].in[0] <== and[6][i].out;\n\t\tmulti_or[2][i].in[1] <== and[7][i].out;\n\t\tmulti_or[2][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[2][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[2][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[2][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[2][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[2][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[2][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[2][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[2][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[2][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[2][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[2][i].in[14] <== eq[24][i].out;\n\t\tmulti_or[2][i].in[15] <== eq[25][i].out;\n\t\tmulti_or[2][i].in[16] <== eq[26][i].out;\n\t\tmulti_or[2][i].in[17] <== eq[27][i].out;\n\t\tmulti_or[2][i].in[18] <== eq[13][i].out;\n\t\tmulti_or[2][i].in[19] <== eq[14][i].out;\n\t\tmulti_or[2][i].in[20] <== eq[16][i].out;\n\t\tmulti_or[2][i].in[21] <== eq[19][i].out;\n\t\tmulti_or[2][i].in[22] <== eq[20][i].out;\n\t\tmulti_or[2][i].in[23] <== eq[21][i].out;\n\t\tand[8][i].b <== multi_or[2][i].out;\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 60;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][10];\n\t\tmulti_or[3][i] = MultiOR(26);\n\t\tmulti_or[3][i].in[0] <== and[6][i].out;\n\t\tmulti_or[3][i].in[1] <== and[7][i].out;\n\t\tmulti_or[3][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[3][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[3][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[3][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[3][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[3][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[3][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[3][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[3][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[3][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[3][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[3][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[3][i].in[14] <== eq[24][i].out;\n\t\tmulti_or[3][i].in[15] <== eq[25][i].out;\n\t\tmulti_or[3][i].in[16] <== eq[26][i].out;\n\t\tmulti_or[3][i].in[17] <== eq[27][i].out;\n\t\tmulti_or[3][i].in[18] <== eq[13][i].out;\n\t\tmulti_or[3][i].in[19] <== eq[14][i].out;\n\t\tmulti_or[3][i].in[20] <== eq[28][i].out;\n\t\tmulti_or[3][i].in[21] <== eq[16][i].out;\n\t\tmulti_or[3][i].in[22] <== eq[18][i].out;\n\t\tmulti_or[3][i].in[23] <== eq[19][i].out;\n\t\tmulti_or[3][i].in[24] <== eq[20][i].out;\n\t\tmulti_or[3][i].in[25] <== eq[21][i].out;\n\t\tand[9][i].b <== multi_or[3][i].out;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][11];\n\t\tmulti_or[4][i] = MultiOR(25);\n\t\tmulti_or[4][i].in[0] <== and[6][i].out;\n\t\tmulti_or[4][i].in[1] <== and[7][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[4][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[4][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[4][i].in[14] <== eq[24][i].out;\n\t\tmulti_or[4][i].in[15] <== eq[25][i].out;\n\t\tmulti_or[4][i].in[16] <== eq[26][i].out;\n\t\tmulti_or[4][i].in[17] <== eq[27][i].out;\n\t\tmulti_or[4][i].in[18] <== eq[13][i].out;\n\t\tmulti_or[4][i].in[19] <== eq[14][i].out;\n\t\tmulti_or[4][i].in[20] <== eq[16][i].out;\n\t\tmulti_or[4][i].in[21] <== eq[18][i].out;\n\t\tmulti_or[4][i].in[22] <== eq[19][i].out;\n\t\tmulti_or[4][i].in[23] <== eq[20][i].out;\n\t\tmulti_or[4][i].in[24] <== eq[21][i].out;\n\t\tand[10][i].b <== multi_or[4][i].out;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][12];\n\t\tand[11][i].b <== multi_or[1][i].out;\n\t\tmulti_or[5][i] = MultiOR(6);\n\t\tmulti_or[5][i].in[0] <== and[2][i].out;\n\t\tmulti_or[5][i].in[1] <== and[5][i].out;\n\t\tmulti_or[5][i].in[2] <== and[8][i].out;\n\t\tmulti_or[5][i].in[3] <== and[9][i].out;\n\t\tmulti_or[5][i].in[4] <== and[10][i].out;\n\t\tmulti_or[5][i].in[5] <== and[11][i].out;\n\t\tstates[i+1][1] <== multi_or[5][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\tlt[12][i] = LessEqThan(8);\n\t\tlt[12][i].in[0] <== 65;\n\t\tlt[12][i].in[1] <== in[i];\n\t\tlt[13][i] = LessEqThan(8);\n\t\tlt[13][i].in[0] <== in[i];\n\t\tlt[13][i].in[1] <== 90;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== lt[12][i].out;\n\t\tand[12][i].b <== lt[13][i].out;\n\t\tlt[14][i] = LessEqThan(8);\n\t\tlt[14][i].in[0] <== 97;\n\t\tlt[14][i].in[1] <== in[i];\n\t\tlt[15][i] = LessEqThan(8);\n\t\tlt[15][i].in[0] <== in[i];\n\t\tlt[15][i].in[1] <== 122;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== lt[14][i].out;\n\t\tand[13][i].b <== lt[15][i].out;\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 45;\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 46;\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 48;\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 49;\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 50;\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 51;\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 52;\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 53;\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 54;\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 55;\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 56;\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 57;\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 95;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][2];\n\t\tmulti_or[6][i] = MultiOR(15);\n\t\tmulti_or[6][i].in[0] <== and[12][i].out;\n\t\tmulti_or[6][i].in[1] <== and[13][i].out;\n\t\tmulti_or[6][i].in[2] <== eq[29][i].out;\n\t\tmulti_or[6][i].in[3] <== eq[30][i].out;\n\t\tmulti_or[6][i].in[4] <== eq[31][i].out;\n\t\tmulti_or[6][i].in[5] <== eq[32][i].out;\n\t\tmulti_or[6][i].in[6] <== eq[33][i].out;\n\t\tmulti_or[6][i].in[7] <== eq[34][i].out;\n\t\tmulti_or[6][i].in[8] <== eq[35][i].out;\n\t\tmulti_or[6][i].in[9] <== eq[36][i].out;\n\t\tmulti_or[6][i].in[10] <== eq[37][i].out;\n\t\tmulti_or[6][i].in[11] <== eq[38][i].out;\n\t\tmulti_or[6][i].in[12] <== eq[39][i].out;\n\t\tmulti_or[6][i].in[13] <== eq[40][i].out;\n\t\tmulti_or[6][i].in[14] <== eq[41][i].out;\n\t\tand[14][i].b <== multi_or[6][i].out;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][12];\n\t\tand[15][i].b <== multi_or[6][i].out;\n\t\tmulti_or[7][i] = MultiOR(2);\n\t\tmulti_or[7][i].in[0] <== and[14][i].out;\n\t\tmulti_or[7][i].in[1] <== and[15][i].out;\n\t\tstates[i+1][2] <== multi_or[7][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 13;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][2];\n\t\tand[16][i].b <== eq[42][i].out;\n\t\tstates[i+1][3] <== and[16][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 10;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][3];\n\t\tand[17][i].b <== eq[43][i].out;\n\t\tstates[i+1][4] <== and[17][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tlt[16][i] = LessEqThan(8);\n\t\tlt[16][i].in[0] <== 94;\n\t\tlt[16][i].in[1] <== in[i];\n\t\tlt[17][i] = LessEqThan(8);\n\t\tlt[17][i].in[0] <== in[i];\n\t\tlt[17][i].in[1] <== 126;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== lt[16][i].out;\n\t\tand[18][i].b <== lt[17][i].out;\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 33;\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 35;\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 36;\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 37;\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 38;\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 39;\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 42;\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 43;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][5];\n\t\tmulti_or[8][i] = MultiOR(25);\n\t\tmulti_or[8][i].in[0] <== and[12][i].out;\n\t\tmulti_or[8][i].in[1] <== and[18][i].out;\n\t\tmulti_or[8][i].in[2] <== eq[44][i].out;\n\t\tmulti_or[8][i].in[3] <== eq[45][i].out;\n\t\tmulti_or[8][i].in[4] <== eq[46][i].out;\n\t\tmulti_or[8][i].in[5] <== eq[47][i].out;\n\t\tmulti_or[8][i].in[6] <== eq[48][i].out;\n\t\tmulti_or[8][i].in[7] <== eq[49][i].out;\n\t\tmulti_or[8][i].in[8] <== eq[50][i].out;\n\t\tmulti_or[8][i].in[9] <== eq[51][i].out;\n\t\tmulti_or[8][i].in[10] <== eq[29][i].out;\n\t\tmulti_or[8][i].in[11] <== eq[30][i].out;\n\t\tmulti_or[8][i].in[12] <== eq[12][i].out;\n\t\tmulti_or[8][i].in[13] <== eq[31][i].out;\n\t\tmulti_or[8][i].in[14] <== eq[32][i].out;\n\t\tmulti_or[8][i].in[15] <== eq[33][i].out;\n\t\tmulti_or[8][i].in[16] <== eq[34][i].out;\n\t\tmulti_or[8][i].in[17] <== eq[35][i].out;\n\t\tmulti_or[8][i].in[18] <== eq[36][i].out;\n\t\tmulti_or[8][i].in[19] <== eq[37][i].out;\n\t\tmulti_or[8][i].in[20] <== eq[38][i].out;\n\t\tmulti_or[8][i].in[21] <== eq[39][i].out;\n\t\tmulti_or[8][i].in[22] <== eq[40][i].out;\n\t\tmulti_or[8][i].in[23] <== eq[15][i].out;\n\t\tmulti_or[8][i].in[24] <== eq[17][i].out;\n\t\tand[19][i].b <== multi_or[8][i].out;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][10];\n\t\tand[20][i].b <== multi_or[8][i].out;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][11];\n\t\tand[21][i].b <== multi_or[8][i].out;\n\t\tmulti_or[9][i] = MultiOR(3);\n\t\tmulti_or[9][i].in[0] <== and[19][i].out;\n\t\tmulti_or[9][i].in[1] <== and[20][i].out;\n\t\tmulti_or[9][i].in[2] <== and[21][i].out;\n\t\tstates[i+1][5] <== multi_or[9][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][0];\n\t\tand[22][i].b <== eq[42][i].out;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][7];\n\t\tand[23][i].b <== eq[42][i].out;\n\t\tmulti_or[10][i] = MultiOR(2);\n\t\tmulti_or[10][i].in[0] <== and[22][i].out;\n\t\tmulti_or[10][i].in[1] <== and[23][i].out;\n\t\tstates[i+1][6] <== multi_or[10][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 255;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][0];\n\t\tand[24][i].b <== eq[52][i].out;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][6];\n\t\tand[25][i].b <== eq[43][i].out;\n\t\tmulti_or[11][i] = MultiOR(2);\n\t\tmulti_or[11][i].in[0] <== and[24][i].out;\n\t\tmulti_or[11][i].in[1] <== and[25][i].out;\n\t\tstates[i+1][7] <== multi_or[11][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[53][i] = IsEqual();\n\t\teq[53][i].in[0] <== in[i];\n\t\teq[53][i].in[1] <== 116;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][7];\n\t\tand[26][i].b <== eq[53][i].out;\n\t\tstates[i+1][8] <== and[26][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[54][i] = IsEqual();\n\t\teq[54][i].in[0] <== in[i];\n\t\teq[54][i].in[1] <== 111;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][8];\n\t\tand[27][i].b <== eq[54][i].out;\n\t\tstates[i+1][9] <== and[27][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][9];\n\t\tand[28][i].b <== eq[13][i].out;\n\t\tstates[i+1][10] <== and[28][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][1];\n\t\tand[29][i].b <== eq[28][i].out;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][2];\n\t\tand[30][i].b <== eq[28][i].out;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][5];\n\t\tand[31][i].b <== eq[28][i].out;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][11];\n\t\tand[32][i].b <== eq[28][i].out;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][12];\n\t\tand[33][i].b <== eq[28][i].out;\n\t\tmulti_or[12][i] = MultiOR(5);\n\t\tmulti_or[12][i].in[0] <== and[29][i].out;\n\t\tmulti_or[12][i].in[1] <== and[30][i].out;\n\t\tmulti_or[12][i].in[2] <== and[31][i].out;\n\t\tmulti_or[12][i].in[3] <== and[32][i].out;\n\t\tmulti_or[12][i].in[4] <== and[33][i].out;\n\t\tstates[i+1][11] <== multi_or[12][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][5];\n\t\tand[34][i].b <== eq[18][i].out;\n\t\tstates[i+1][12] <== and[34][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][4];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][4] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][11];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][2] * states[i+2][2];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][2] * states[i+2][11];\n\t\tis_substr0[i][3] <== is_substr0[i][2] + states[i+1][5] * states[i+2][5];\n\t\tis_substr0[i][4] <== is_substr0[i][3] + states[i+1][5] * states[i+2][11];\n\t\tis_substr0[i][5] <== is_substr0[i][4] + states[i+1][5] * states[i+2][12];\n\t\tis_substr0[i][6] <== is_substr0[i][5] + states[i+1][10] * states[i+2][5];\n\t\tis_substr0[i][7] <== is_substr0[i][6] + states[i+1][11] * states[i+2][5];\n\t\tis_substr0[i][8] <== is_substr0[i][7] + states[i+1][11] * states[i+2][11];\n\t\tis_substr0[i][9] <== is_substr0[i][8] + states[i+1][12] * states[i+2][2];\n\t\tis_substr0[i][10] <== is_substr0[i][9] + states[i+1][12] * states[i+2][11];\n\t\tis_reveal0[i] <== is_substr0[i][10] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/common/regexes/to_regex.json",
    "content": "{\n  \"parts\": [\n    {\n      \"is_public\": false,\n      \"regex_def\": \"((\\r\\n)|^)to:\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"([^\\r\\n]+<)?\"\n    },\n    {\n      \"is_public\": true,\n      \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|!|#|$|%|&|'|\\\\*|\\\\+|-|/|=|\\\\?|^|_|`|{|\\\\||}|~|\\\\.)+@(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|_|\\\\.|-)+\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"\\r\\n\"\n    }\n  ]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/common/test/mocks/test_body_hash_regex.circom",
    "content": "include \"../../regexes/body_hash_regex.circom\";\n\ncomponent main = BodyHashRegex(249);"
  },
  {
    "path": "circuits-circom/circuits/common/test/mocks/test_from_regex.circom",
    "content": "include \"../../regexes/from_regex.circom\";\n\ncomponent main = FromRegex(50);"
  },
  {
    "path": "circuits-circom/circuits/common/test/mocks/test_to_regex.circom",
    "content": "include \"../../regexes/to_regex.circom\";\n\ncomponent main = ToRegex(50);"
  },
  {
    "path": "circuits-circom/circuits/common/test/regexes/body_hash.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Body Hash  Regex\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_body_hash_regex.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_body_hash_regex\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=\"))\n            .concat(textToAsciiArray(\"; b=\").fill(\"0\"));\n        const result = witness.slice(2, 249 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\n\\rdkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/common/test/regexes/from_regex.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Venmo Actor ID\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_from_regex.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_from_regex\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"from:Venmo <venmo@venmo.com>\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"from:Venmo <venmo@venmo.com>\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"from:Venmo <venmo@venmo.com>\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"from:Venmo <\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"venmo@venmo.com\"))\n            .concat(Array(textToAsciiArray(\">\\r\\nreply-to:Venmo No-re\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"from:Venmo Dvenmo@venmo.com>\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/common/test/regexes/to_regex.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"To regex\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_to_regex.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_to_regex\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"to:0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"to:0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"to:0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"to:\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"0xanonkumar2023@gmail.com\"))\n            .concat(Array(textToAsciiArray(\"\\r\\nreply-to:Venmo No-re\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"to:0xanonkumarA2023gmail.com\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/common/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\",  \"test/regexes/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/common-v2/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIcKAJABEAgASgCCCgCKCABKAIIKAIcKAJAIAEoAggoAiQRBAALIAEoAggoAhwoAjgEQCABKAIIKAIoIAEoAggoAhwoAjggASgCCCgCJBEEAAsgASgCCCgCKCABKAIIKAIcIAEoAggoAiQRBAAgASgCCEEANgIcIAFBfUEAIAEoAgRB8QBGGzYCDAsgASgCDCEAIAFBEGokACAAC+sXAQJ/IwBB8ABrIgMgADYCbCADIAE2AmggAyACNgJkIANBfzYCXCADIAMoAmgvAQI2AlQgA0EANgJQIANBBzYCTCADQQQ2AkggAygCVEUEQCADQYoBNgJMIANBAzYCSAsgA0EANgJgA0AgAygCYCADKAJkSkUEQCADIAMoAlQ2AlggAyADKAJoIAMoAmBBAWpBAnRqLwECNgJUIAMgAygCUEEBaiIANgJQAkACQCADKAJMIABMDQAgAygCWCADKAJURw0ADAELAkAgAygCUCADKAJISARAA0AgAyADKAJsQfwUaiADKAJYQQJ0ai8BAjYCRAJAIAMoAmwoArwtQRAgAygCRGtKBEAgAyADKAJsQfwUaiADKAJYQQJ0ai8BADYCQCADKAJsIgAgAC8BuC0gAygCQEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAJAQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCREEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsQfwUaiADKAJYQQJ0ai8BACADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCRCAAKAK8LWo2ArwtCyADIAMoAlBBAWsiADYCUCAADQALDAELAkAgAygCWARAIAMoAlggAygCXEcEQCADIAMoAmxB/BRqIAMoAlhBAnRqLwECNgI8AkAgAygCbCgCvC1BECADKAI8a0oEQCADIAMoAmxB/BRqIAMoAlhBAnRqLwEANgI4IAMoAmwiACAALwG4LSADKAI4Qf//A3EgAygCbCgCvC10cjsBuC0gAygCbC8BuC1B/wFxIQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbC8BuC1BCHYhASADKAJsKAIIIQIgAygCbCIEKAIUIQAgBCAAQQFqNgIUIAAgAmogAToAACADKAJsIAMoAjhB//8DcUEQIAMoAmwoArwta3U7AbgtIAMoAmwiACAAKAK8LSADKAI8QRBrajYCvC0MAQsgAygCbCIAIAAvAbgtIAMoAmxB/BRqIAMoAlhBAnRqLwEAIAMoAmwoArwtdHI7AbgtIAMoAmwiACADKAI8IAAoArwtajYCvC0LIAMgAygCUEEBazYCUAsgAyADKAJsLwG+FTYCNAJAIAMoAmwoArwtQRAgAygCNGtKBEAgAyADKAJsLwG8FTYCMCADKAJsIgAgAC8BuC0gAygCMEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIwQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCNEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsLwG8FSADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCNCAAKAK8LWo2ArwtCyADQQI2AiwCQCADKAJsKAK8LUEQIAMoAixrSgRAIAMgAygCUEEDazYCKCADKAJsIgAgAC8BuC0gAygCKEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIoQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCLEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJQQQNrQf//A3EgAygCbCgCvC10cjsBuC0gAygCbCIAIAMoAiwgACgCvC1qNgK8LQsMAQsCQCADKAJQQQpMBEAgAyADKAJsLwHCFTYCJAJAIAMoAmwoArwtQRAgAygCJGtKBEAgAyADKAJsLwHAFTYCICADKAJsIgAgAC8BuC0gAygCIEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIgQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCJEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsLwHAFSADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCJCAAKAK8LWo2ArwtCyADQQM2AhwCQCADKAJsKAK8LUEQIAMoAhxrSgRAIAMgAygCUEEDazYCGCADKAJsIgAgAC8BuC0gAygCGEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIYQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCHEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJQQQNrQf//A3EgAygCbCgCvC10cjsBuC0gAygCbCIAIAMoAhwgACgCvC1qNgK8LQsMAQsgAyADKAJsLwHGFTYCFAJAIAMoAmwoArwtQRAgAygCFGtKBEAgAyADKAJsLwHEFTYCECADKAJsIgAgAC8BuC0gAygCEEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIQQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCFEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsLwHEFSADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCFCAAKAK8LWo2ArwtCyADQQc2AgwCQCADKAJsKAK8LUEQIAMoAgxrSgRAIAMgAygCUEELazYCCCADKAJsIgAgAC8BuC0gAygCCEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIIQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCDEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJQQQtrQf//A3EgAygCbCgCvC10cjsBuC0gAygCbCIAIAMoAgwgACgCvC1qNgK8LQsLCwsgA0EANgJQIAMgAygCWDYCXAJAIAMoAlRFBEAgA0GKATYCTCADQQM2AkgMAQsCQCADKAJYIAMoAlRGBEAgA0EGNgJMIANBAzYCSAwBCyADQQc2AkwgA0EENgJICwsLIAMgAygCYEEBajYCYAwBCwsLkQQBAX8jAEEwayIDIAA2AiwgAyABNgIoIAMgAjYCJCADQX82AhwgAyADKAIoLwECNgIUIANBADYCECADQQc2AgwgA0EENgIIIAMoAhRFBEAgA0GKATYCDCADQQM2AggLIAMoAiggAygCJEEBakECdGpB//8DOwECIANBADYCIANAIAMoAiAgAygCJEpFBEAgAyADKAIUNgIYIAMgAygCKCADKAIgQQFqQQJ0ai8BAjYCFCADIAMoAhBBAWoiADYCEAJAAkAgAygCDCAATA0AIAMoAhggAygCFEcNAAwBCwJAIAMoAhAgAygCCEgEQCADKAIsQfwUaiADKAIYQQJ0aiIAIAMoAhAgAC8BAGo7AQAMAQsCQCADKAIYBEAgAygCGCADKAIcRwRAIAMoAiwgAygCGEECdGpB/BRqIgAgAC8BAEEBajsBAAsgAygCLCIAIABBvBVqLwEAQQFqOwG8FQwBCwJAIAMoAhBBCkwEQCADKAIsIgAgAEHAFWovAQBBAWo7AcAVDAELIAMoAiwiACAAQcQVai8BAEEBajsBxBULCwsgA0EANgIQIAMgAygCGDYCHAJAIAMoAhRFBEAgA0GKATYCDCADQQM2AggMAQsCQCADKAIYIAMoAhRGBEAgA0EGNgIMIANBAzYCCAwBCyADQQc2AgwgA0EENgIICwsLIAMgAygCIEEBajYCIAwBCwsLpxIBAn8jAEHQAGsiAyAANgJMIAMgATYCSCADIAI2AkQgA0EANgI4IAMoAkwoAqAtBEADQCADIAMoAkwoAqQtIAMoAjhBAXRqLwEANgJAIAMoAkwoApgtIQAgAyADKAI4IgFBAWo2AjggAyAAIAFqLQAANgI8AkAgAygCQEUEQCADIAMoAkggAygCPEECdGovAQI2AiwCQCADKAJMKAK8LUEQIAMoAixrSgRAIAMgAygCSCADKAI8QQJ0ai8BADYCKCADKAJMIgAgAC8BuC0gAygCKEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIoQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCLEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJIIAMoAjxBAnRqLwEAIAMoAkwoArwtdHI7AbgtIAMoAkwiACADKAIsIAAoArwtajYCvC0LDAELIAMgAygCPC0A0F02AjQgAyADKAJIIAMoAjRBgQJqQQJ0ai8BAjYCJAJAIAMoAkwoArwtQRAgAygCJGtKBEAgAyADKAJIIAMoAjRBgQJqQQJ0ai8BADYCICADKAJMIgAgAC8BuC0gAygCIEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIgQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCJEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJIIAMoAjRBgQJqQQJ0ai8BACADKAJMKAK8LXRyOwG4LSADKAJMIgAgAygCJCAAKAK8LWo2ArwtCyADIAMoAjRBAnRBkOoAaigCADYCMCADKAIwBEAgAyADKAI8IAMoAjRBAnRBgO0AaigCAGs2AjwgAyADKAIwNgIcAkAgAygCTCgCvC1BECADKAIca0oEQCADIAMoAjw2AhggAygCTCIAIAAvAbgtIAMoAhhB//8DcSADKAJMKAK8LXRyOwG4LSADKAJMLwG4LUH/AXEhASADKAJMKAIIIQIgAygCTCIEKAIUIQAgBCAAQQFqNgIUIAAgAmogAToAACADKAJMLwG4LUEIdiEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwgAygCGEH//wNxQRAgAygCTCgCvC1rdTsBuC0gAygCTCIAIAAoArwtIAMoAhxBEGtqNgK8LQwBCyADKAJMIgAgAC8BuC0gAygCPEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwiACADKAIcIAAoArwtajYCvC0LCyADIAMoAkBBAWs2AkAgAwJ/IAMoAkBBgAJJBEAgAygCQC0A0FkMAQsgAygCQEEHdkGAAmotANBZCzYCNCADIAMoAkQgAygCNEECdGovAQI2AhQCQCADKAJMKAK8LUEQIAMoAhRrSgRAIAMgAygCRCADKAI0QQJ0ai8BADYCECADKAJMIgAgAC8BuC0gAygCEEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIQQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCFEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJEIAMoAjRBAnRqLwEAIAMoAkwoArwtdHI7AbgtIAMoAkwiACADKAIUIAAoArwtajYCvC0LIAMgAygCNEECdEGQ6wBqKAIANgIwIAMoAjAEQCADIAMoAkAgAygCNEECdEGA7gBqKAIAazYCQCADIAMoAjA2AgwCQCADKAJMKAK8LUEQIAMoAgxrSgRAIAMgAygCQDYCCCADKAJMIgAgAC8BuC0gAygCCEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIIQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCDEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJAQf//A3EgAygCTCgCvC10cjsBuC0gAygCTCIAIAMoAgwgACgCvC1qNgK8LQsLCyADKAI4IAMoAkwoAqAtSQ0ACwsgAyADKAJILwGCCDYCBAJAIAMoAkwoArwtQRAgAygCBGtKBEAgAyADKAJILwGACDYCACADKAJMIgAgAC8BuC0gAygCAEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIAQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCBEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJILwGACCADKAJMKAK8LXRyOwG4LSADKAJMIgAgAygCBCAAKAK8LWo2ArwtCwuXAgEEfyMAQRBrIgEgADYCDAJAIAEoAgwoArwtQRBGBEAgASgCDC8BuC1B/wFxIQIgASgCDCgCCCEDIAEoAgwiBCgCFCEAIAQgAEEBajYCFCAAIANqIAI6AAAgASgCDC8BuC1BCHYhAiABKAIMKAIIIQMgASgCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAjoAACABKAIMQQA7AbgtIAEoAgxBADYCvC0MAQsgASgCDCgCvC1BCE4EQCABKAIMLwG4LSECIAEoAgwoAgghAyABKAIMIgQoAhQhACAEIABBAWo2AhQgACADaiACOgAAIAEoAgwiACAALwG4LUEIdjsBuC0gASgCDCIAIAAoArwtQQhrNgK8LQsLC+8BAQR/IwBBEGsiASAANgIMAkAgASgCDCgCvC1BCEoEQCABKAIMLwG4LUH/AXEhAiABKAIMKAIIIQMgASgCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAjoAACABKAIMLwG4LUEIdiECIAEoAgwoAgghAyABKAIMIgQoAhQhACAEIABBAWo2AhQgACADaiACOgAADAELIAEoAgwoArwtQQBKBEAgASgCDC8BuC0hAiABKAIMKAIIIQMgASgCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAjoAAAsLIAEoAgxBADsBuC0gASgCDEEANgK8LQv8AQEBfyMAQRBrIgEgADYCDCABQQA2AggDQCABKAIIQZ4CTkUEQCABKAIMQZQBaiABKAIIQQJ0akEAOwEAIAEgASgCCEEBajYCCAwBCwsgAUEANgIIA0AgASgCCEEeTkUEQCABKAIMQYgTaiABKAIIQQJ0akEAOwEAIAEgASgCCEEBajYCCAwBCwsgAUEANgIIA0AgASgCCEETTkUEQCABKAIMQfwUaiABKAIIQQJ0akEAOwEAIAEgASgCCEEBajYCCAwBCwsgASgCDEEBOwGUCSABKAIMQQA2AqwtIAEoAgxBADYCqC0gASgCDEEANgKwLSABKAIMQQA2AqAtCyIBAX8jAEEQayIBJAAgASAANgIMIAEoAgwQFSABQRBqJAAL6QEBAX8jAEEwayICIAA2AiQgAiABNwMYIAJCADcDECACIAIoAiQpAwhCAX03AwgCQANAIAIpAxAgAikDCFQEQCACIAIpAxAgAikDCCACKQMQfUIBiHw3AwACQCACKAIkKAIEIAIpAwCnQQN0aikDACACKQMYVgRAIAIgAikDAEIBfTcDCAwBCwJAIAIpAwAgAigCJCkDCFIEQCACKAIkKAIEIAIpAwBCAXynQQN0aikDACACKQMYWA0BCyACIAIpAwA3AygMBAsgAiACKQMAQgF8NwMQCwwBCwsgAiACKQMQNwMoCyACKQMoC6cBAQF/IwBBMGsiBCQAIAQgADYCKCAEIAE2AiQgBCACNwMYIAQgAzYCFCAEIAQoAigpAzggBCgCKCkDMCAEKAIkIAQpAxggBCgCFBCIATcDCAJAIAQpAwhCAFMEQCAEQX82AiwMAQsgBCgCKCAEKQMINwM4IAQoAiggBCgCKCkDOBDAASECIAQoAiggAjcDQCAEQQA2AiwLIAQoAiwhACAEQTBqJAAgAAvrAQEBfyMAQSBrIgMkACADIAA2AhggAyABNwMQIAMgAjYCDAJAIAMpAxAgAygCGCkDEFQEQCADQQE6AB8MAQsgAyADKAIYKAIAIAMpAxBCBIanEE4iADYCCCAARQRAIAMoAgxBDkEAEBQgA0EAOgAfDAELIAMoAhggAygCCDYCACADIAMoAhgoAgQgAykDEEIBfEIDhqcQTiIANgIEIABFBEAgAygCDEEOQQAQFCADQQA6AB8MAQsgAygCGCADKAIENgIEIAMoAhggAykDEDcDECADQQE6AB8LIAMtAB9BAXEhACADQSBqJAAgAAvOAgEBfyMAQTBrIgQkACAEIAA2AiggBCABNwMgIAQgAjYCHCAEIAM2AhgCQAJAIAQoAigNACAEKQMgUA0AIAQoAhhBEkEAEBQgBEEANgIsDAELIAQgBCgCKCAEKQMgIAQoAhwgBCgCGBBMIgA2AgwgAEUEQCAEQQA2AiwMAQsgBEEYEBgiADYCFCAARQRAIAQoAhhBDkEAEBQgBCgCDBAyIARBADYCLAwBCyAEKAIUIAQoAgw2AhAgBCgCFEEANgIUQQAQASEAIAQoAhQgADYCDCMAQRBrIgAgBCgCFDYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCAEQQIgBCgCFCAEKAIYEIMBIgA2AhAgAEUEQCAEKAIUKAIQEDIgBCgCFBAVIARBADYCLAwBCyAEIAQoAhA2AiwLIAQoAiwhACAEQTBqJAAgAAupAQEBfyMAQTBrIgQkACAEIAA2AiggBCABNwMgIAQgAjYCHCAEIAM2AhgCQCAEKAIoRQRAIAQpAyBCAFIEQCAEKAIYQRJBABAUIARBADYCLAwCCyAEQQBCACAEKAIcIAQoAhgQwwE2AiwMAQsgBCAEKAIoNgIIIAQgBCkDIDcDECAEIARBCGpCASAEKAIcIAQoAhgQwwE2AiwLIAQoAiwhACAEQTBqJAAgAAtGAQF/IwBBIGsiAyQAIAMgADYCHCADIAE3AxAgAyACNgIMIAMoAhwgAykDECADKAIMIAMoAhxBCGoQTSEAIANBIGokACAAC4sMAQZ/IAAgAWohBQJAAkAgACgCBCICQQFxDQAgAkEDcUUNASAAKAIAIgIgAWohAQJAIAAgAmsiAEH4mwEoAgBHBEAgAkH/AU0EQCAAKAIIIgQgAkEDdiICQQN0QYycAWpGGiAAKAIMIgMgBEcNAkHkmwFB5JsBKAIAQX4gAndxNgIADAMLIAAoAhghBgJAIAAgACgCDCIDRwRAIAAoAggiAkH0mwEoAgBJGiACIAM2AgwgAyACNgIIDAELAkAgAEEUaiICKAIAIgQNACAAQRBqIgIoAgAiBA0AQQAhAwwBCwNAIAIhByAEIgNBFGoiAigCACIEDQAgA0EQaiECIAMoAhAiBA0ACyAHQQA2AgALIAZFDQICQCAAIAAoAhwiBEECdEGUngFqIgIoAgBGBEAgAiADNgIAIAMNAUHomwFB6JsBKAIAQX4gBHdxNgIADAQLIAZBEEEUIAYoAhAgAEYbaiADNgIAIANFDQMLIAMgBjYCGCAAKAIQIgIEQCADIAI2AhAgAiADNgIYCyAAKAIUIgJFDQIgAyACNgIUIAIgAzYCGAwCCyAFKAIEIgJBA3FBA0cNAUHsmwEgATYCACAFIAJBfnE2AgQgACABQQFyNgIEIAUgATYCAA8LIAQgAzYCDCADIAQ2AggLAkAgBSgCBCICQQJxRQRAIAVB/JsBKAIARgRAQfybASAANgIAQfCbAUHwmwEoAgAgAWoiATYCACAAIAFBAXI2AgQgAEH4mwEoAgBHDQNB7JsBQQA2AgBB+JsBQQA2AgAPCyAFQfibASgCAEYEQEH4mwEgADYCAEHsmwFB7JsBKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAJBeHEgAWohAQJAIAJB/wFNBEAgBSgCCCIEIAJBA3YiAkEDdEGMnAFqRhogBCAFKAIMIgNGBEBB5JsBQeSbASgCAEF+IAJ3cTYCAAwCCyAEIAM2AgwgAyAENgIIDAELIAUoAhghBgJAIAUgBSgCDCIDRwRAIAUoAggiAkH0mwEoAgBJGiACIAM2AgwgAyACNgIIDAELAkAgBUEUaiIEKAIAIgINACAFQRBqIgQoAgAiAg0AQQAhAwwBCwNAIAQhByACIgNBFGoiBCgCACICDQAgA0EQaiEEIAMoAhAiAg0ACyAHQQA2AgALIAZFDQACQCAFIAUoAhwiBEECdEGUngFqIgIoAgBGBEAgAiADNgIAIAMNAUHomwFB6JsBKAIAQX4gBHdxNgIADAILIAZBEEEUIAYoAhAgBUYbaiADNgIAIANFDQELIAMgBjYCGCAFKAIQIgIEQCADIAI2AhAgAiADNgIYCyAFKAIUIgJFDQAgAyACNgIUIAIgAzYCGAsgACABQQFyNgIEIAAgAWogATYCACAAQfibASgCAEcNAUHsmwEgATYCAA8LIAUgAkF+cTYCBCAAIAFBAXI2AgQgACABaiABNgIACyABQf8BTQRAIAFBA3YiAkEDdEGMnAFqIQECf0HkmwEoAgAiA0EBIAJ0IgJxRQRAQeSbASACIANyNgIAIAEMAQsgASgCCAshAiABIAA2AgggAiAANgIMIAAgATYCDCAAIAI2AggPC0EfIQIgAEIANwIQIAFB////B00EQCABQQh2IgIgAkGA/j9qQRB2QQhxIgR0IgIgAkGA4B9qQRB2QQRxIgN0IgIgAkGAgA9qQRB2QQJxIgJ0QQ92IAMgBHIgAnJrIgJBAXQgASACQRVqdkEBcXJBHGohAgsgACACNgIcIAJBAnRBlJ4BaiEHAkACQEHomwEoAgAiBEEBIAJ0IgNxRQRAQeibASADIARyNgIAIAcgADYCACAAIAc2AhgMAQsgAUEAQRkgAkEBdmsgAkEfRht0IQIgBygCACEDA0AgAyIEKAIEQXhxIAFGDQIgAkEddiEDIAJBAXQhAiAEIANBBHFqIgdBEGooAgAiAw0ACyAHIAA2AhAgACAENgIYCyAAIAA2AgwgACAANgIIDwsgBCgCCCIBIAA2AgwgBCAANgIIIABBADYCGCAAIAQ2AgwgACABNgIICwsGAEG0mwELtQkBAX8jAEHgwABrIgUkACAFIAA2AtRAIAUgATYC0EAgBSACNgLMQCAFIAM3A8BAIAUgBDYCvEAgBSAFKALQQDYCuEACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBSgCvEAOEQMEAAYBAgUJCgoKCgoKCAoHCgsgBUIANwPYQAwKCyAFIAUoArhAQeQAaiAFKALMQCAFKQPAQBBDNwPYQAwJCyAFKAK4QBAVIAVCADcD2EAMCAsgBSgCuEAoAhAEQCAFIAUoArhAKAIQIAUoArhAKQMYIAUoArhAQeQAahBgIgM3A5hAIANQBEAgBUJ/NwPYQAwJCyAFKAK4QCkDCCAFKAK4QCkDCCAFKQOYQHxWBEAgBSgCuEBB5ABqQRVBABAUIAVCfzcD2EAMCQsgBSgCuEAiACAFKQOYQCAAKQMAfDcDACAFKAK4QCIAIAUpA5hAIAApAwh8NwMIIAUoArhAQQA2AhALIAUoArhALQB4QQFxRQRAIAVCADcDqEADQCAFKQOoQCAFKAK4QCkDAFQEQCAFIAUoArhAKQMAIAUpA6hAfUKAwABWBH5CgMAABSAFKAK4QCkDACAFKQOoQH0LNwOgQCAFIAUoAtRAIAVBEGogBSkDoEAQKyIDNwOwQCADQgBTBEAgBSgCuEBB5ABqIAUoAtRAEBcgBUJ/NwPYQAwLCyAFKQOwQFAEQCAFKAK4QEHkAGpBEUEAEBQgBUJ/NwPYQAwLBSAFIAUpA7BAIAUpA6hAfDcDqEAMAgsACwsLIAUoArhAIAUoArhAKQMANwMgIAVCADcD2EAMBwsgBSkDwEAgBSgCuEApAwggBSgCuEApAyB9VgRAIAUgBSgCuEApAwggBSgCuEApAyB9NwPAQAsgBSkDwEBQBEAgBUIANwPYQAwHCyAFKAK4QC0AeEEBcQRAIAUoAtRAIAUoArhAKQMgQQAQJ0EASARAIAUoArhAQeQAaiAFKALUQBAXIAVCfzcD2EAMCAsLIAUgBSgC1EAgBSgCzEAgBSkDwEAQKyIDNwOwQCADQgBTBEAgBSgCuEBB5ABqQRFBABAUIAVCfzcD2EAMBwsgBSgCuEAiACAFKQOwQCAAKQMgfDcDICAFKQOwQFAEQCAFKAK4QCkDICAFKAK4QCkDCFQEQCAFKAK4QEHkAGpBEUEAEBQgBUJ/NwPYQAwICwsgBSAFKQOwQDcD2EAMBgsgBSAFKAK4QCkDICAFKAK4QCkDAH0gBSgCuEApAwggBSgCuEApAwB9IAUoAsxAIAUpA8BAIAUoArhAQeQAahCIATcDCCAFKQMIQgBTBEAgBUJ/NwPYQAwGCyAFKAK4QCAFKQMIIAUoArhAKQMAfDcDICAFQgA3A9hADAULIAUgBSgCzEA2AgQgBSgCBCAFKAK4QEEoaiAFKAK4QEHkAGoQhAFBAEgEQCAFQn83A9hADAULIAVCADcD2EAMBAsgBSAFKAK4QCwAYKw3A9hADAMLIAUgBSgCuEApA3A3A9hADAILIAUgBSgCuEApAyAgBSgCuEApAwB9NwPYQAwBCyAFKAK4QEHkAGpBHEEAEBQgBUJ/NwPYQAsgBSkD2EAhAyAFQeDAAGokACADCwgAQQFBDBB/CyIBAX8jAEEQayIBIAA2AgwgASgCDCIAIAAoAjBBAWo2AjALBwAgACgCLAsHACAAKAIoCxgBAX8jAEEQayIBIAA2AgwgASgCDEEMagsHACAAKAIYCwcAIAAoAhALBwAgACgCCAtFAEGgmwFCADcDAEGYmwFCADcDAEGQmwFCADcDAEGImwFCADcDAEGAmwFCADcDAEH4mgFCADcDAEHwmgFCADcDAEHwmgELFAAgACABrSACrUIghoQgAyAEEH4LEwEBfiAAEEkiAUIgiKcQACABpwsVACAAIAGtIAKtQiCGhCADIAQQxAELFAAgACABIAKtIAOtQiCGhCAEEH0LrQQBAX8jAEEgayIFJAAgBSAANgIYIAUgAa0gAq1CIIaENwMQIAUgAzYCDCAFIAQ2AggCQAJAIAUpAxAgBSgCGCkDMFQEQCAFKAIIQQlNDQELIAUoAhhBCGpBEkEAEBQgBUF/NgIcDAELIAUoAhgoAhhBAnEEQCAFKAIYQQhqQRlBABAUIAVBfzYCHAwBCwJ/IAUoAgwhASMAQRBrIgAkACAAIAE2AgggAEEBOgAHAkAgACgCCEUEQCAAQQE6AA8MAQsgACAAKAIIIAAtAAdBAXEQswFBAEc6AA8LIAAtAA9BAXEhASAAQRBqJAAgAUULBEAgBSgCGEEIakEQQQAQFCAFQX82AhwMAQsgBSAFKAIYKAJAIAUpAxCnQQR0ajYCBCAFIAUoAgQoAgAEfyAFKAIEKAIAKAIQBUF/CzYCAAJAIAUoAgwgBSgCAEYEQCAFKAIEKAIEBEAgBSgCBCgCBCIAIAAoAgBBfnE2AgAgBSgCBCgCBEEAOwFQIAUoAgQoAgQoAgBFBEAgBSgCBCgCBBA3IAUoAgRBADYCBAsLDAELIAUoAgQoAgRFBEAgBSgCBCgCABBAIQAgBSgCBCAANgIEIABFBEAgBSgCGEEIakEOQQAQFCAFQX82AhwMAwsLIAUoAgQoAgQgBSgCDDYCECAFKAIEKAIEIAUoAgg7AVAgBSgCBCgCBCIAIAAoAgBBAXI2AgALIAVBADYCHAsgBSgCHCEAIAVBIGokACAACxcBAX4gACABIAIQciIDQiCIpxAAIAOnCx8BAX4gACABIAKtIAOtQiCGhBArIgRCIIinEAAgBKcLrgECAX8BfgJ/IwBBIGsiAiAANgIUIAIgATYCEAJAIAIoAhRFBEAgAkJ/NwMYDAELIAIoAhBBCHEEQCACIAIoAhQpAzA3AwgDQCACKQMIQgBSBH8gAigCFCgCQCACKQMIQgF9p0EEdGooAgAFQQELRQRAIAIgAikDCEIBfTcDCAwBCwsgAiACKQMINwMYDAELIAIgAigCFCkDMDcDGAsgAikDGCIDQiCIpwsQACADpwsTACAAIAGtIAKtQiCGhCADEMUBC4gCAgF/AX4CfyMAQSBrIgQkACAEIAA2AhQgBCABNgIQIAQgAq0gA61CIIaENwMIAkAgBCgCFEUEQCAEQn83AxgMAQsgBCgCFCgCBARAIARCfzcDGAwBCyAEKQMIQv///////////wBWBEAgBCgCFEEEakESQQAQFCAEQn83AxgMAQsCQCAEKAIULQAQQQFxRQRAIAQpAwhQRQ0BCyAEQgA3AxgMAQsgBCAEKAIUKAIUIAQoAhAgBCkDCBArIgU3AwAgBUIAUwRAIAQoAhRBBGogBCgCFCgCFBAXIARCfzcDGAwBCyAEIAQpAwA3AxgLIAQpAxghBSAEQSBqJAAgBUIgiKcLEAAgBacLTwEBfyMAQSBrIgQkACAEIAA2AhwgBCABrSACrUIghoQ3AxAgBCADNgIMIAQoAhwgBCkDECAEKAIMIAQoAhwoAhwQrQEhACAEQSBqJAAgAAvZAwEBfyMAQSBrIgUkACAFIAA2AhggBSABrSACrUIghoQ3AxAgBSADNgIMIAUgBDYCCAJAIAUoAhggBSkDEEEAQQAQP0UEQCAFQX82AhwMAQsgBSgCGCgCGEECcQRAIAUoAhhBCGpBGUEAEBQgBUF/NgIcDAELIAUoAhgoAkAgBSkDEKdBBHRqKAIIBEAgBSgCGCgCQCAFKQMQp0EEdGooAgggBSgCDBBnQQBIBEAgBSgCGEEIakEPQQAQFCAFQX82AhwMAgsgBUEANgIcDAELIAUgBSgCGCgCQCAFKQMQp0EEdGo2AgQgBSAFKAIEKAIABH8gBSgCDCAFKAIEKAIAKAIURwVBAQtBAXE2AgACQCAFKAIABEAgBSgCBCgCBEUEQCAFKAIEKAIAEEAhACAFKAIEIAA2AgQgAEUEQCAFKAIYQQhqQQ5BABAUIAVBfzYCHAwECwsgBSgCBCgCBCAFKAIMNgIUIAUoAgQoAgQiACAAKAIAQSByNgIADAELIAUoAgQoAgQEQCAFKAIEKAIEIgAgACgCAEFfcTYCACAFKAIEKAIEKAIARQRAIAUoAgQoAgQQNyAFKAIEQQA2AgQLCwsgBUEANgIcCyAFKAIcIQAgBUEgaiQAIAALFwAgACABrSACrUIghoQgAyAEIAUQmQELEgAgACABrSACrUIghoQgAxAnC48BAgF/AX4CfyMAQSBrIgQkACAEIAA2AhQgBCABNgIQIAQgAjYCDCAEIAM2AggCQAJAIAQoAhAEQCAEKAIMDQELIAQoAhRBCGpBEkEAEBQgBEJ/NwMYDAELIAQgBCgCFCAEKAIQIAQoAgwgBCgCCBCaATcDGAsgBCkDGCEFIARBIGokACAFQiCIpwsQACAFpwuFBQIBfwF+An8jAEEwayIDJAAgAyAANgIkIAMgATYCICADIAI2AhwCQCADKAIkKAIYQQJxBEAgAygCJEEIakEZQQAQFCADQn83AygMAQsgAygCIEUEQCADKAIkQQhqQRJBABAUIANCfzcDKAwBCyADQQA2AgwgAyADKAIgEC42AhggAygCICADKAIYQQFraiwAAEEvRwRAIAMgAygCGEECahAYIgA2AgwgAEUEQCADKAIkQQhqQQ5BABAUIANCfzcDKAwCCwJAAkAgAygCDCIBIAMoAiAiAHNBA3ENACAAQQNxBEADQCABIAAtAAAiAjoAACACRQ0DIAFBAWohASAAQQFqIgBBA3ENAAsLIAAoAgAiAkF/cyACQYGChAhrcUGAgYKEeHENAANAIAEgAjYCACAAKAIEIQIgAUEEaiEBIABBBGohACACQYGChAhrIAJBf3NxQYCBgoR4cUUNAAsLIAEgAC0AACICOgAAIAJFDQADQCABIAAtAAEiAjoAASABQQFqIQEgAEEBaiEAIAINAAsLIAMoAgwgAygCGGpBLzoAACADKAIMIAMoAhhBAWpqQQA6AAALIAMgAygCJEEAQgBBABB9IgA2AgggAEUEQCADKAIMEBUgA0J/NwMoDAELIAMgAygCJAJ/IAMoAgwEQCADKAIMDAELIAMoAiALIAMoAgggAygCHBCaATcDECADKAIMEBUCQCADKQMQQgBTBEAgAygCCBAbDAELIAMoAiQgAykDEEEAQQNBgID8jwQQmQFBAEgEQCADKAIkIAMpAxAQmAEaIANCfzcDKAwCCwsgAyADKQMQNwMoCyADKQMoIQQgA0EwaiQAIARCIIinCxAAIASnCxEAIAAgAa0gAq1CIIaEEJgBCxcAIAAgAa0gAq1CIIaEIAMgBCAFEIoBC38CAX8BfiMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCECADIAMoAhggAygCFCADKAIQEHIiBDcDCAJAIARCAFMEQCADQQA2AhwMAQsgAyADKAIYIAMpAwggAygCECADKAIYKAIcEK0BNgIcCyADKAIcIQAgA0EgaiQAIAALEAAjACAAa0FwcSIAJAAgAAsGACAAJAALBAAjAAuCAQIBfwF+IwBBIGsiBCQAIAQgADYCGCAEIAE2AhQgBCACNgIQIAQgAzYCDCAEIAQoAhggBCgCFCAEKAIQEHIiBTcDAAJAIAVCAFMEQCAEQX82AhwMAQsgBCAEKAIYIAQpAwAgBCgCECAEKAIMEH42AhwLIAQoAhwhACAEQSBqJAAgAAvQRQMGfwF+AnwjAEHgAGsiASQAIAEgADYCWAJAIAEoAlhFBEAgAUF/NgJcDAELIwBBIGsiACABKAJYNgIcIAAgAUFAazYCGCAAQQA2AhQgAEIANwMAAkAgACgCHC0AKEEBcUUEQCAAKAIcKAIYIAAoAhwoAhRGDQELIABBATYCFAsgAEIANwMIA0AgACkDCCAAKAIcKQMwVARAAkACQCAAKAIcKAJAIAApAwinQQR0aigCCA0AIAAoAhwoAkAgACkDCKdBBHRqLQAMQQFxDQAgACgCHCgCQCAAKQMIp0EEdGooAgRFDQEgACgCHCgCQCAAKQMIp0EEdGooAgQoAgBFDQELIABBATYCFAsgACgCHCgCQCAAKQMIp0EEdGotAAxBAXFFBEAgACAAKQMAQgF8NwMACyAAIAApAwhCAXw3AwgMAQsLIAAoAhgEQCAAKAIYIAApAwA3AwALIAEgACgCFDYCJCABKQNAUARAAkAgASgCWCgCBEEIcUUEQCABKAIkRQ0BCwJ/IAEoAlgoAgAhAiMAQRBrIgAkACAAIAI2AggCQCAAKAIIKAIkQQNGBEAgAEEANgIMDAELIAAoAggoAiAEQCAAKAIIEC9BAEgEQCAAQX82AgwMAgsLIAAoAggoAiQEQCAAKAIIEGILIAAoAghBAEIAQQ8QIEIAUwRAIABBfzYCDAwBCyAAKAIIQQM2AiQgAEEANgIMCyAAKAIMIQIgAEEQaiQAIAJBAEgLBEACQAJ/IwBBEGsiACABKAJYKAIANgIMIwBBEGsiAiAAKAIMQQxqNgIMIAIoAgwoAgBBFkYLBEAjAEEQayIAIAEoAlgoAgA2AgwjAEEQayICIAAoAgxBDGo2AgwgAigCDCgCBEEsRg0BCyABKAJYQQhqIAEoAlgoAgAQFyABQX82AlwMBAsLCyABKAJYEDwgAUEANgJcDAELIAEoAiRFBEAgASgCWBA8IAFBADYCXAwBCyABKQNAIAEoAlgpAzBWBEAgASgCWEEIakEUQQAQFCABQX82AlwMAQsgASABKQNAp0EDdBAYIgA2AiggAEUEQCABQX82AlwMAQsgAUJ/NwM4IAFCADcDSCABQgA3A1ADQCABKQNQIAEoAlgpAzBUBEACQCABKAJYKAJAIAEpA1CnQQR0aigCAEUNAAJAIAEoAlgoAkAgASkDUKdBBHRqKAIIDQAgASgCWCgCQCABKQNQp0EEdGotAAxBAXENACABKAJYKAJAIAEpA1CnQQR0aigCBEUNASABKAJYKAJAIAEpA1CnQQR0aigCBCgCAEUNAQsgAQJ+IAEpAzggASgCWCgCQCABKQNQp0EEdGooAgApA0hUBEAgASkDOAwBCyABKAJYKAJAIAEpA1CnQQR0aigCACkDSAs3AzgLIAEoAlgoAkAgASkDUKdBBHRqLQAMQQFxRQRAIAEpA0ggASkDQFoEQCABKAIoEBUgASgCWEEIakEUQQAQFCABQX82AlwMBAsgASgCKCABKQNIp0EDdGogASkDUDcDACABIAEpA0hCAXw3A0gLIAEgASkDUEIBfDcDUAwBCwsgASkDSCABKQNAVARAIAEoAigQFSABKAJYQQhqQRRBABAUIAFBfzYCXAwBCwJAAn8jAEEQayIAIAEoAlgoAgA2AgwgACgCDCkDGEKAgAiDUAsEQCABQgA3AzgMAQsgASkDOEJ/UQRAIAFCfzcDGCABQgA3AzggAUIANwNQA0AgASkDUCABKAJYKQMwVARAIAEoAlgoAkAgASkDUKdBBHRqKAIABEAgASgCWCgCQCABKQNQp0EEdGooAgApA0ggASkDOFoEQCABIAEoAlgoAkAgASkDUKdBBHRqKAIAKQNINwM4IAEgASkDUDcDGAsLIAEgASkDUEIBfDcDUAwBCwsgASkDGEJ/UgRAIAEoAlghAiABKQMYIQcgASgCWEEIaiEDIwBBMGsiACQAIAAgAjYCJCAAIAc3AxggACADNgIUIAAgACgCJCAAKQMYIAAoAhQQYCIHNwMIAkAgB1AEQCAAQgA3AygMAQsgACAAKAIkKAJAIAApAxinQQR0aigCADYCBAJAIAApAwggACkDCCAAKAIEKQMgfFgEQCAAKQMIIAAoAgQpAyB8Qv///////////wBYDQELIAAoAhRBBEEWEBQgAEIANwMoDAELIAAgACgCBCkDICAAKQMIfDcDCCAAKAIELwEMQQhxBEAgACgCJCgCACAAKQMIQQAQJ0EASARAIAAoAhQgACgCJCgCABAXIABCADcDKAwCCyAAKAIkKAIAIABCBBArQgRSBEAgACgCFCAAKAIkKAIAEBcgAEIANwMoDAILIAAoAABB0JadwABGBEAgACAAKQMIQgR8NwMICyAAIAApAwhCDHw3AwggACgCBEEAEGVBAXEEQCAAIAApAwhCCHw3AwgLIAApAwhC////////////AFYEQCAAKAIUQQRBFhAUIABCADcDKAwCCwsgACAAKQMINwMoCyAAKQMoIQcgAEEwaiQAIAEgBzcDOCAHUARAIAEoAigQFSABQX82AlwMBAsLCyABKQM4QgBSBEACfyABKAJYKAIAIQIgASkDOCEHIwBBEGsiACQAIAAgAjYCCCAAIAc3AwACQCAAKAIIKAIkQQFGBEAgACgCCEEMakESQQAQFCAAQX82AgwMAQsgACgCCEEAIAApAwBBERAgQgBTBEAgAEF/NgIMDAELIAAoAghBATYCJCAAQQA2AgwLIAAoAgwhAiAAQRBqJAAgAkEASAsEQCABQgA3AzgLCwsgASkDOFAEQAJ/IAEoAlgoAgAhAiMAQRBrIgAkACAAIAI2AggCQCAAKAIIKAIkQQFGBEAgACgCCEEMakESQQAQFCAAQX82AgwMAQsgACgCCEEAQgBBCBAgQgBTBEAgAEF/NgIMDAELIAAoAghBATYCJCAAQQA2AgwLIAAoAgwhAiAAQRBqJAAgAkEASAsEQCABKAJYQQhqIAEoAlgoAgAQFyABKAIoEBUgAUF/NgJcDAILCyABKAJYKAJUIQIjAEEQayIAJAAgACACNgIMIAAoAgwEQCAAKAIMRAAAAAAAAAAAOQMYIAAoAgwoAgBEAAAAAAAAAAAgACgCDCgCDCAAKAIMKAIEERYACyAAQRBqJAAgAUEANgIsIAFCADcDSANAAkAgASkDSCABKQNAWg0AIAEoAlgoAlQhAiABKQNIIge6IAEpA0C6IgijIQkjAEEgayIAJAAgACACNgIcIAAgCTkDECAAIAdCAXy6IAijOQMIIAAoAhwEQCAAKAIcIAArAxA5AyAgACgCHCAAKwMIOQMoIAAoAhxEAAAAAAAAAAAQVwsgAEEgaiQAIAEgASgCKCABKQNIp0EDdGopAwA3A1AgASABKAJYKAJAIAEpA1CnQQR0ajYCEAJAAkAgASgCECgCAEUNACABKAIQKAIAKQNIIAEpAzhaDQAMAQsgAQJ/QQEgASgCECgCCA0AGiABKAIQKAIEBEBBASABKAIQKAIEKAIAQQFxDQEaCyABKAIQKAIEBH8gASgCECgCBCgCAEHAAHFBAEcFQQALC0EBcTYCFCABKAIQKAIERQRAIAEoAhAoAgAQQCEAIAEoAhAgADYCBCAARQRAIAEoAlhBCGpBDkEAEBQgAUEBNgIsDAMLCyABIAEoAhAoAgQ2AgwCfyABKAJYIQIgASkDUCEHIwBBMGsiACQAIAAgAjYCKCAAIAc3AyACQCAAKQMgIAAoAigpAzBaBEAgACgCKEEIakESQQAQFCAAQX82AiwMAQsgACAAKAIoKAJAIAApAyCnQQR0ajYCHAJAIAAoAhwoAgAEQCAAKAIcKAIALQAEQQFxRQ0BCyAAQQA2AiwMAQsgACgCHCgCACkDSEIafEL///////////8AVgRAIAAoAihBCGpBBEEWEBQgAEF/NgIsDAELIAAoAigoAgAgACgCHCgCACkDSEIafEEAECdBAEgEQCAAKAIoQQhqIAAoAigoAgAQFyAAQX82AiwMAQsgACAAKAIoKAIAQgQgAEEYaiAAKAIoQQhqEEIiAjYCFCACRQRAIABBfzYCLAwBCyAAIAAoAhQQHTsBEiAAIAAoAhQQHTsBECAAKAIUEEdBAXFFBEAgACgCFBAWIAAoAihBCGpBFEEAEBQgAEF/NgIsDAELIAAoAhQQFiAALwEQBEAgACgCKCgCACAALwESrUEBECdBAEgEQCAAKAIoQQhqQQRBtJsBKAIAEBQgAEF/NgIsDAILIABBACAAKAIoKAIAIAAvARBBACAAKAIoQQhqEGM2AgggACgCCEUEQCAAQX82AiwMAgsgACgCCCAALwEQQYACIABBDGogACgCKEEIahCUAUEBcUUEQCAAKAIIEBUgAEF/NgIsDAILIAAoAggQFSAAKAIMBEAgACAAKAIMEJMBNgIMIAAoAhwoAgAoAjQgACgCDBCVASECIAAoAhwoAgAgAjYCNAsLIAAoAhwoAgBBAToABAJAIAAoAhwoAgRFDQAgACgCHCgCBC0ABEEBcQ0AIAAoAhwoAgQgACgCHCgCACgCNDYCNCAAKAIcKAIEQQE6AAQLIABBADYCLAsgACgCLCECIABBMGokACACQQBICwRAIAFBATYCLAwCCyABIAEoAlgoAgAQNSIHNwMwIAdCAFMEQCABQQE2AiwMAgsgASgCDCABKQMwNwNIAkAgASgCFARAIAFBADYCCCABKAIQKAIIRQRAIAEgASgCWCABKAJYIAEpA1BBCEEAEK4BIgA2AgggAEUEQCABQQE2AiwMBQsLAn8gASgCWCECAn8gASgCCARAIAEoAggMAQsgASgCECgCCAshAyABKAIMIQQjAEGgAWsiACQAIAAgAjYCmAEgACADNgKUASAAIAQ2ApABAkAgACgClAEgAEE4ahA5QQBIBEAgACgCmAFBCGogACgClAEQFyAAQX82ApwBDAELIAApAzhCwACDUARAIAAgACkDOELAAIQ3AzggAEEAOwFoCwJAAkAgACgCkAEoAhBBf0cEQCAAKAKQASgCEEF+Rw0BCyAALwFoRQ0AIAAoApABIAAvAWg2AhAMAQsCQAJAIAAoApABKAIQDQAgACkDOEIEg1ANACAAIAApAzhCCIQ3AzggACAAKQNQNwNYDAELIAAgACkDOEL3////D4M3AzgLCyAAKQM4QoABg1AEQCAAIAApAzhCgAGENwM4IABBADsBagsgAEGAAjYCJAJAIAApAzhCBINQBEAgACAAKAIkQYAIcjYCJCAAQn83A3AMAQsgACgCkAEgACkDUDcDKCAAIAApA1A3A3ACQCAAKQM4QgiDUARAAkACQAJAAkACQAJ/AkAgACgCkAEoAhBBf0cEQCAAKAKQASgCEEF+Rw0BC0EIDAELIAAoApABKAIQC0H//wNxDg0CAwMDAwMDAwEDAwMAAwsgAEKUwuTzDzcDEAwDCyAAQoODsP8PNwMQDAILIABC/////w83AxAMAQsgAEIANwMQCyAAKQNQIAApAxBWBEAgACAAKAIkQYAIcjYCJAsMAQsgACgCkAEgACkDWDcDIAsLIAAgACgCmAEoAgAQNSIHNwOIASAHQgBTBEAgACgCmAFBCGogACgCmAEoAgAQFyAAQX82ApwBDAELIAAoApABIgIgAi8BDEH3/wNxOwEMIAAgACgCmAEgACgCkAEgACgCJBBUIgI2AiggAkEASARAIABBfzYCnAEMAQsgACAALwFoAn8CQCAAKAKQASgCEEF/RwRAIAAoApABKAIQQX5HDQELQQgMAQsgACgCkAEoAhALQf//A3FHOgAiIAAgAC0AIkEBcQR/IAAvAWhBAEcFQQALQQFxOgAhIAAgAC8BaAR/IAAtACEFQQELQQFxOgAgIAAgAC0AIkEBcQR/IAAoApABKAIQQQBHBUEAC0EBcToAHyAAAn9BASAALQAiQQFxDQAaQQEgACgCkAEoAgBBgAFxDQAaIAAoApABLwFSIAAvAWpHC0EBcToAHiAAIAAtAB5BAXEEfyAALwFqQQBHBUEAC0EBcToAHSAAIAAtAB5BAXEEfyAAKAKQAS8BUkEARwVBAAtBAXE6ABwgACAAKAKUATYCNCMAQRBrIgIgACgCNDYCDCACKAIMIgIgAigCMEEBajYCMCAALQAdQQFxBEAgACAALwFqQQAQeyICNgIMIAJFBEAgACgCmAFBCGpBGEEAEBQgACgCNBAbIABBfzYCnAEMAgsgACAAKAKYASAAKAI0IAAvAWpBACAAKAKYASgCHCAAKAIMEQUAIgI2AjAgAkUEQCAAKAI0EBsgAEF/NgKcAQwCCyAAKAI0EBsgACAAKAIwNgI0CyAALQAhQQFxBEAgACAAKAKYASAAKAI0IAAvAWgQsAEiAjYCMCACRQRAIAAoAjQQGyAAQX82ApwBDAILIAAoAjQQGyAAIAAoAjA2AjQLIAAtACBBAXEEQCAAIAAoApgBIAAoAjRBABCvASICNgIwIAJFBEAgACgCNBAbIABBfzYCnAEMAgsgACgCNBAbIAAgACgCMDYCNAsgAC0AH0EBcQRAIAAoApgBIQMgACgCNCEEIAAoApABKAIQIQUgACgCkAEvAVAhBiMAQRBrIgIkACACIAM2AgwgAiAENgIIIAIgBTYCBCACIAY2AgAgAigCDCACKAIIIAIoAgRBASACKAIAELIBIQMgAkEQaiQAIAAgAyICNgIwIAJFBEAgACgCNBAbIABBfzYCnAEMAgsgACgCNBAbIAAgACgCMDYCNAsgAC0AHEEBcQRAIABBADYCBAJAIAAoApABKAJUBEAgACAAKAKQASgCVDYCBAwBCyAAKAKYASgCHARAIAAgACgCmAEoAhw2AgQLCyAAIAAoApABLwFSQQEQeyICNgIIIAJFBEAgACgCmAFBCGpBGEEAEBQgACgCNBAbIABBfzYCnAEMAgsgACAAKAKYASAAKAI0IAAoApABLwFSQQEgACgCBCAAKAIIEQUAIgI2AjAgAkUEQCAAKAI0EBsgAEF/NgKcAQwCCyAAKAI0EBsgACAAKAIwNgI0CyAAIAAoApgBKAIAEDUiBzcDgAEgB0IAUwRAIAAoApgBQQhqIAAoApgBKAIAEBcgAEF/NgKcAQwBCyAAKAKYASEDIAAoAjQhBCAAKQNwIQcjAEHAwABrIgIkACACIAM2ArhAIAIgBDYCtEAgAiAHNwOoQAJAIAIoArRAEEhBAEgEQCACKAK4QEEIaiACKAK0QBAXIAJBfzYCvEAMAQsgAkEANgIMIAJCADcDEANAAkAgAiACKAK0QCACQSBqQoDAABArIgc3AxggB0IAVw0AIAIoArhAIAJBIGogAikDGBA2QQBIBEAgAkF/NgIMBSACKQMYQoDAAFINAiACKAK4QCgCVEUNAiACKQOoQEIAVw0CIAIgAikDGCACKQMQfDcDECACKAK4QCgCVCACKQMQuSACKQOoQLmjEFcMAgsLCyACKQMYQgBTBEAgAigCuEBBCGogAigCtEAQFyACQX82AgwLIAIoArRAEC8aIAIgAigCDDYCvEALIAIoArxAIQMgAkHAwABqJAAgACADNgIsIAAoAjQgAEE4ahA5QQBIBEAgACgCmAFBCGogACgCNBAXIABBfzYCLAsgACgCNCEDIwBBEGsiAiQAIAIgAzYCCAJAA0AgAigCCARAIAIoAggpAxhCgIAEg0IAUgRAIAIgAigCCEEAQgBBEBAgNwMAIAIpAwBCAFMEQCACQf8BOgAPDAQLIAIpAwBCA1UEQCACKAIIQQxqQRRBABAUIAJB/wE6AA8MBAsgAiACKQMAPAAPDAMFIAIgAigCCCgCADYCCAwCCwALCyACQQA6AA8LIAIsAA8hAyACQRBqJAAgACADIgI6ACMgAkEYdEEYdUEASARAIAAoApgBQQhqIAAoAjQQFyAAQX82AiwLIAAoAjQQGyAAKAIsQQBIBEAgAEF/NgKcAQwBCyAAIAAoApgBKAIAEDUiBzcDeCAHQgBTBEAgACgCmAFBCGogACgCmAEoAgAQFyAAQX82ApwBDAELIAAoApgBKAIAIAApA4gBEJsBQQBIBEAgACgCmAFBCGogACgCmAEoAgAQFyAAQX82ApwBDAELIAApAzhC5ACDQuQAUgRAIAAoApgBQQhqQRRBABAUIABBfzYCnAEMAQsgACgCkAEoAgBBIHFFBEACQCAAKQM4QhCDQgBSBEAgACgCkAEgACgCYDYCFAwBCyAAKAKQAUEUahABGgsLIAAoApABIAAvAWg2AhAgACgCkAEgACgCZDYCGCAAKAKQASAAKQNQNwMoIAAoApABIAApA3ggACkDgAF9NwMgIAAoApABIAAoApABLwEMQfn/A3EgAC0AI0EBdHI7AQwgACgCkAEhAyAAKAIkQYAIcUEARyEEIwBBEGsiAiQAIAIgAzYCDCACIAQ6AAsCQCACKAIMKAIQQQ5GBEAgAigCDEE/OwEKDAELIAIoAgwoAhBBDEYEQCACKAIMQS47AQoMAQsCQCACLQALQQFxRQRAIAIoAgxBABBlQQFxRQ0BCyACKAIMQS07AQoMAQsCQCACKAIMKAIQQQhHBEAgAigCDC8BUkEBRw0BCyACKAIMQRQ7AQoMAQsgAiACKAIMKAIwEFEiAzsBCCADQf//A3EEQCACKAIMKAIwKAIAIAIvAQhBAWtqLQAAQS9GBEAgAigCDEEUOwEKDAILCyACKAIMQQo7AQoLIAJBEGokACAAIAAoApgBIAAoApABIAAoAiQQVCICNgIsIAJBAEgEQCAAQX82ApwBDAELIAAoAiggACgCLEcEQCAAKAKYAUEIakEUQQAQFCAAQX82ApwBDAELIAAoApgBKAIAIAApA3gQmwFBAEgEQCAAKAKYAUEIaiAAKAKYASgCABAXIABBfzYCnAEMAQsgAEEANgKcAQsgACgCnAEhAiAAQaABaiQAIAJBAEgLBEAgAUEBNgIsIAEoAggEQCABKAIIEBsLDAQLIAEoAggEQCABKAIIEBsLDAELIAEoAgwiACAALwEMQff/A3E7AQwgASgCWCABKAIMQYACEFRBAEgEQCABQQE2AiwMAwsgASABKAJYIAEpA1AgASgCWEEIahBgIgc3AwAgB1AEQCABQQE2AiwMAwsgASgCWCgCACABKQMAQQAQJ0EASARAIAEoAlhBCGogASgCWCgCABAXIAFBATYCLAwDCwJ/IAEoAlghAiABKAIMKQMgIQcjAEGgwABrIgAkACAAIAI2AphAIAAgBzcDkEAgACAAKQOQQLo5AwACQANAIAApA5BAUEUEQCAAIAApA5BAQoDAAFYEfkKAwAAFIAApA5BACz4CDCAAKAKYQCgCACAAQRBqIAAoAgytIAAoAphAQQhqEGRBAEgEQCAAQX82ApxADAMLIAAoAphAIABBEGogACgCDK0QNkEASARAIABBfzYCnEAMAwUgACAAKQOQQCAANQIMfTcDkEAgACgCmEAoAlQgACsDACAAKQOQQLqhIAArAwCjEFcMAgsACwsgAEEANgKcQAsgACgCnEAhAiAAQaDAAGokACACQQBICwRAIAFBATYCLAwDCwsLIAEgASkDSEIBfDcDSAwBCwsgASgCLEUEQAJ/IAEoAlghACABKAIoIQMgASkDQCEHIwBBMGsiAiQAIAIgADYCKCACIAM2AiQgAiAHNwMYIAIgAigCKCgCABA1Igc3AxACQCAHQgBTBEAgAkF/NgIsDAELIAIoAighAyACKAIkIQQgAikDGCEHIwBBwAFrIgAkACAAIAM2ArQBIAAgBDYCsAEgACAHNwOoASAAIAAoArQBKAIAEDUiBzcDIAJAIAdCAFMEQCAAKAK0AUEIaiAAKAK0ASgCABAXIABCfzcDuAEMAQsgACAAKQMgNwOgASAAQQA6ABcgAEIANwMYA0AgACkDGCAAKQOoAVQEQCAAIAAoArQBKAJAIAAoArABIAApAxinQQN0aikDAKdBBHRqNgIMIAAgACgCtAECfyAAKAIMKAIEBEAgACgCDCgCBAwBCyAAKAIMKAIAC0GABBBUIgM2AhAgA0EASARAIABCfzcDuAEMAwsgACgCEARAIABBAToAFwsgACAAKQMYQgF8NwMYDAELCyAAIAAoArQBKAIAEDUiBzcDICAHQgBTBEAgACgCtAFBCGogACgCtAEoAgAQFyAAQn83A7gBDAELIAAgACkDICAAKQOgAX03A5gBAkAgACkDoAFC/////w9YBEAgACkDqAFC//8DWA0BCyAAQQE6ABcLIAAgAEEwakLiABApIgM2AiwgA0UEQCAAKAK0AUEIakEOQQAQFCAAQn83A7gBDAELIAAtABdBAXEEQCAAKAIsQecSQQQQQSAAKAIsQiwQLSAAKAIsQS0QHyAAKAIsQS0QHyAAKAIsQQAQISAAKAIsQQAQISAAKAIsIAApA6gBEC0gACgCLCAAKQOoARAtIAAoAiwgACkDmAEQLSAAKAIsIAApA6ABEC0gACgCLEHiEkEEEEEgACgCLEEAECEgACgCLCAAKQOgASAAKQOYAXwQLSAAKAIsQQEQIQsgACgCLEHsEkEEEEEgACgCLEEAECEgACgCLCAAKQOoAUL//wNaBH5C//8DBSAAKQOoAQunQf//A3EQHyAAKAIsIAApA6gBQv//A1oEfkL//wMFIAApA6gBC6dB//8DcRAfIAAoAiwgACkDmAFC/////w9aBH9BfwUgACkDmAGnCxAhIAAoAiwgACkDoAFC/////w9aBH9BfwUgACkDoAGnCxAhIAACfyAAKAK0AS0AKEEBcQRAIAAoArQBKAIkDAELIAAoArQBKAIgCzYClAEgACgCLAJ/IAAoApQBBEAgACgClAEvAQQMAQtBAAtB//8DcRAfAn8jAEEQayIDIAAoAiw2AgwgAygCDC0AAEEBcUULBEAgACgCtAFBCGpBFEEAEBQgACgCLBAWIABCfzcDuAEMAQsgACgCtAECfyMAQRBrIgMgACgCLDYCDCADKAIMKAIECwJ+IwBBEGsiAyAAKAIsNgIMAn4gAygCDC0AAEEBcQRAIAMoAgwpAxAMAQtCAAsLEDZBAEgEQCAAKAIsEBYgAEJ/NwO4AQwBCyAAKAIsEBYgACgClAEEQCAAKAK0ASAAKAKUASgCACAAKAKUAS8BBK0QNkEASARAIABCfzcDuAEMAgsLIAAgACkDmAE3A7gBCyAAKQO4ASEHIABBwAFqJAAgAiAHNwMAIAdCAFMEQCACQX82AiwMAQsgAiACKAIoKAIAEDUiBzcDCCAHQgBTBEAgAkF/NgIsDAELIAJBADYCLAsgAigCLCEAIAJBMGokACAAQQBICwRAIAFBATYCLAsLIAEoAigQFSABKAIsRQRAAn8gASgCWCgCACECIwBBEGsiACQAIAAgAjYCCAJAIAAoAggoAiRBAUcEQCAAKAIIQQxqQRJBABAUIABBfzYCDAwBCyAAKAIIKAIgQQFLBEAgACgCCEEMakEdQQAQFCAAQX82AgwMAQsgACgCCCgCIARAIAAoAggQL0EASARAIABBfzYCDAwCCwsgACgCCEEAQgBBCRAgQgBTBEAgACgCCEECNgIkIABBfzYCDAwBCyAAKAIIQQA2AiQgAEEANgIMCyAAKAIMIQIgAEEQaiQAIAILBEAgASgCWEEIaiABKAJYKAIAEBcgAUEBNgIsCwsgASgCWCgCVCECIwBBEGsiACQAIAAgAjYCDCAAKAIMRAAAAAAAAPA/EFcgAEEQaiQAIAEoAiwEQCABKAJYKAIAEGIgAUF/NgJcDAELIAEoAlgQPCABQQA2AlwLIAEoAlwhACABQeAAaiQAIAAL0g4CB38CfiMAQTBrIgMkACADIAA2AiggAyABNgIkIAMgAjYCICMAQRBrIgAgA0EIajYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCADKAIoIQAjAEEgayIEJAAgBCAANgIYIARCADcDECAEQn83AwggBCADQQhqNgIEAkACQCAEKAIYBEAgBCkDCEJ/WQ0BCyAEKAIEQRJBABAUIARBADYCHAwBCyAEKAIYIQAgBCkDECEKIAQpAwghCyAEKAIEIQEjAEGgAWsiAiQAIAIgADYCmAEgAkEANgKUASACIAo3A4gBIAIgCzcDgAEgAkEANgJ8IAIgATYCeAJAAkAgAigClAENACACKAKYAQ0AIAIoAnhBEkEAEBQgAkEANgKcAQwBCyACKQOAAUIAUwRAIAJCADcDgAELAkAgAikDiAFC////////////AFgEQCACKQOIASACKQOIASACKQOAAXxYDQELIAIoAnhBEkEAEBQgAkEANgKcAQwBCyACQYgBEBgiADYCdCAARQRAIAIoAnhBDkEAEBQgAkEANgKcAQwBCyACKAJ0QQA2AhggAigCmAEEQCACKAKYASIAEC5BAWoiARAYIgUEfyAFIAAgARAZBUEACyEAIAIoAnQgADYCGCAARQRAIAIoAnhBDkEAEBQgAigCdBAVIAJBADYCnAEMAgsLIAIoAnQgAigClAE2AhwgAigCdCACKQOIATcDaCACKAJ0IAIpA4ABNwNwAkAgAigCfARAIAIoAnQiACACKAJ8IgEpAwA3AyAgACABKQMwNwNQIAAgASkDKDcDSCAAIAEpAyA3A0AgACABKQMYNwM4IAAgASkDEDcDMCAAIAEpAwg3AyggAigCdEEANgIoIAIoAnQiACAAKQMgQv7///8PgzcDIAwBCyACKAJ0QSBqEDsLIAIoAnQpA3BCAFIEQCACKAJ0IAIoAnQpA3A3AzggAigCdCIAIAApAyBCBIQ3AyALIwBBEGsiACACKAJ0QdgAajYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCACKAJ0QQA2AoABIAIoAnRBADYChAEjAEEQayIAIAIoAnQ2AgwgACgCDEEANgIAIAAoAgxBADYCBCAAKAIMQQA2AgggAkF/NgIEIAJBBzYCAEEOIAIQNEI/hCEKIAIoAnQgCjcDEAJAIAIoAnQoAhgEQCACIAIoAnQoAhggAkEYahCmAUEATjoAFyACLQAXQQFxRQRAAkAgAigCdCkDaFBFDQAgAigCdCkDcFBFDQAgAigCdEL//wM3AxALCwwBCwJAIAIoAnQoAhwiACgCTEEASA0ACyAAKAI8IQBBACEFIwBBIGsiBiQAAn8CQCAAIAJBGGoiCRAKIgFBeEYEQCMAQSBrIgckACAAIAdBCGoQCSIIBH9BtJsBIAg2AgBBAAVBAQshCCAHQSBqJAAgCA0BCyABQYFgTwR/QbSbAUEAIAFrNgIAQX8FIAELDAELA0AgBSAGaiIBIAVBxxJqLQAAOgAAIAVBDkchByAFQQFqIQUgBw0ACwJAIAAEQEEPIQUgACEBA0AgAUEKTwRAIAVBAWohBSABQQpuIQEMAQsLIAUgBmpBADoAAANAIAYgBUEBayIFaiAAIABBCm4iAUEKbGtBMHI6AAAgAEEJSyEHIAEhACAHDQALDAELIAFBMDoAACAGQQA6AA8LIAYgCRACIgBBgWBPBH9BtJsBQQAgAGs2AgBBfwUgAAsLIQAgBkEgaiQAIAIgAEEATjoAFwsCQCACLQAXQQFxRQRAIAIoAnRB2ABqQQVBtJsBKAIAEBQMAQsgAigCdCkDIEIQg1AEQCACKAJ0IAIoAlg2AkggAigCdCIAIAApAyBCEIQ3AyALIAIoAiRBgOADcUGAgAJGBEAgAigCdEL/gQE3AxAgAikDQCACKAJ0KQNoIAIoAnQpA3B8VARAIAIoAnhBEkEAEBQgAigCdCgCGBAVIAIoAnQQFSACQQA2ApwBDAMLIAIoAnQpA3BQBEAgAigCdCACKQNAIAIoAnQpA2h9NwM4IAIoAnQiACAAKQMgQgSENwMgAkAgAigCdCgCGEUNACACKQOIAVBFDQAgAigCdEL//wM3AxALCwsLIAIoAnQiACAAKQMQQoCAEIQ3AxAgAkEeIAIoAnQgAigCeBCDASIANgJwIABFBEAgAigCdCgCGBAVIAIoAnQQFSACQQA2ApwBDAELIAIgAigCcDYCnAELIAIoApwBIQAgAkGgAWokACAEIAA2AhwLIAQoAhwhACAEQSBqJAAgAyAANgIYAkAgAEUEQCADKAIgIANBCGoQnQEgA0EIahA4IANBADYCLAwBCyADIAMoAhggAygCJCADQQhqEJwBIgA2AhwgAEUEQCADKAIYEBsgAygCICADQQhqEJ0BIANBCGoQOCADQQA2AiwMAQsgA0EIahA4IAMgAygCHDYCLAsgAygCLCEAIANBMGokACAAC5IfAQZ/IwBB4ABrIgQkACAEIAA2AlQgBCABNgJQIAQgAjcDSCAEIAM2AkQgBCAEKAJUNgJAIAQgBCgCUDYCPAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAQoAkQOEwYHAgwEBQoOAQMJEAsPDQgREQARCyAEQgA3A1gMEQsgBCgCQCgCGEUEQCAEKAJAQRxBABAUIARCfzcDWAwRCyAEKAJAIQAjAEGAAWsiASQAIAEgADYCeCABIAEoAngoAhgQLkEIahAYIgA2AnQCQCAARQRAIAEoAnhBDkEAEBQgAUF/NgJ8DAELAkAgASgCeCgCGCABQRBqEKYBRQRAIAEgASgCHDYCbAwBCyABQX82AmwLIAEoAnQhACABIAEoAngoAhg2AgAgAEGrEiABEG8gASgCdCEDIAEoAmwhByMAQTBrIgAkACAAIAM2AiggACAHNgIkIABBADYCECAAIAAoAiggACgCKBAuajYCGCAAIAAoAhhBAWs2AhwDQCAAKAIcIAAoAihPBH8gACgCHCwAAEHYAEYFQQALQQFxBEAgACAAKAIQQQFqNgIQIAAgACgCHEEBazYCHAwBCwsCQCAAKAIQRQRAQbSbAUEcNgIAIABBfzYCLAwBCyAAIAAoAhxBAWo2AhwDQCMAQRBrIgckAAJAAn8jAEEQayIDJAAgAyAHQQhqNgIIIANBBDsBBiADQegLQQBBABBsIgU2AgACQCAFQQBIBEAgA0EAOgAPDAELAn8gAygCACEGIAMoAgghCCADLwEGIQkjAEEQayIFJAAgBSAJNgIMIAUgCDYCCCAGIAVBCGpBASAFQQRqEAYiBgR/QbSbASAGNgIAQX8FQQALIQYgBSgCBCEIIAVBEGokACADLwEGQX8gCCAGG0cLBEAgAygCABBrIANBADoADwwBCyADKAIAEGsgA0EBOgAPCyADLQAPQQFxIQUgA0EQaiQAIAULBEAgByAHKAIINgIMDAELQcCgAS0AAEEBcUUEQEEAEAEhBgJAQciZASgCACIDRQRAQcyZASgCACAGNgIADAELQdCZAUEDQQNBASADQQdGGyADQR9GGzYCAEG8oAFBADYCAEHMmQEoAgAhBSADQQFOBEAgBq0hAkEAIQYDQCAFIAZBAnRqIAJCrf7V5NSF/ajYAH5CAXwiAkIgiD4CACAGQQFqIgYgA0cNAAsLIAUgBSgCAEEBcjYCAAsLQcyZASgCACEDAkBByJkBKAIAIgVFBEAgAyADKAIAQe2cmY4EbEG54ABqQf////8HcSIDNgIADAELIANB0JkBKAIAIgZBAnRqIgggCCgCACADQbygASgCACIIQQJ0aigCAGoiAzYCAEG8oAFBACAIQQFqIgggBSAIRhs2AgBB0JkBQQAgBkEBaiIGIAUgBkYbNgIAIANBAXYhAwsgByADNgIMCyAHKAIMIQMgB0EQaiQAIAAgAzYCDCAAIAAoAhw2AhQDQCAAKAIUIAAoAhhJBEAgACAAKAIMQSRwOgALAn8gACwAC0EKSARAIAAsAAtBMGoMAQsgACwAC0HXAGoLIQMgACAAKAIUIgdBAWo2AhQgByADOgAAIAAgACgCDEEkbjYCDAwBCwsgACgCKCEDIAAgACgCJEF/RgR/QbYDBSAAKAIkCzYCACAAIANBwoEgIAAQbCIDNgIgIANBAE4EQCAAKAIkQX9HBEAgACgCKCAAKAIkEA8iA0GBYE8Ef0G0mwFBACADazYCAEEABSADCxoLIAAgACgCIDYCLAwCC0G0mwEoAgBBFEYNAAsgAEF/NgIsCyAAKAIsIQMgAEEwaiQAIAEgAyIANgJwIABBf0YEQCABKAJ4QQxBtJsBKAIAEBQgASgCdBAVIAFBfzYCfAwBCyABIAEoAnBBoxIQoQEiADYCaCAARQRAIAEoAnhBDEG0mwEoAgAQFCABKAJwEGsgASgCdBBtGiABKAJ0EBUgAUF/NgJ8DAELIAEoAnggASgCaDYChAEgASgCeCABKAJ0NgKAASABQQA2AnwLIAEoAnwhACABQYABaiQAIAQgAKw3A1gMEAsgBCgCQCgCGARAIAQoAkAoAhwQVhogBCgCQEEANgIcCyAEQgA3A1gMDwsgBCgCQCgChAEQVkEASARAIAQoAkBBADYChAEgBCgCQEEGQbSbASgCABAUCyAEKAJAQQA2AoQBIAQoAkAoAoABIAQoAkAoAhgQCCIAQYFgTwR/QbSbAUEAIABrNgIAQX8FIAALQQBIBEAgBCgCQEECQbSbASgCABAUIARCfzcDWAwPCyAEKAJAKAKAARAVIAQoAkBBADYCgAEgBEIANwNYDA4LIAQgBCgCQCAEKAJQIAQpA0gQQzcDWAwNCyAEKAJAKAIYEBUgBCgCQCgCgAEQFSAEKAJAKAIcBEAgBCgCQCgCHBBWGgsgBCgCQBAVIARCADcDWAwMCyAEKAJAKAIYBEAgBCgCQCgCGCEBIwBBIGsiACQAIAAgATYCGCAAQQA6ABcgAEGAgCA2AgwCQCAALQAXQQFxBEAgACAAKAIMQQJyNgIMDAELIAAgACgCDDYCDAsgACgCGCEBIAAoAgwhAyAAQbYDNgIAIAAgASADIAAQbCIBNgIQAkAgAUEASARAIABBADYCHAwBCyAAIAAoAhBBoxJBoBIgAC0AF0EBcRsQoQEiATYCCCABRQRAIABBADYCHAwBCyAAIAAoAgg2AhwLIAAoAhwhASAAQSBqJAAgBCgCQCABNgIcIAFFBEAgBCgCQEELQbSbASgCABAUIARCfzcDWAwNCwsgBCgCQCkDaEIAUgRAIAQoAkAoAhwgBCgCQCkDaCAEKAJAEJ8BQQBIBEAgBEJ/NwNYDA0LCyAEKAJAQgA3A3ggBEIANwNYDAsLAkAgBCgCQCkDcEIAUgRAIAQgBCgCQCkDcCAEKAJAKQN4fTcDMCAEKQMwIAQpA0hWBEAgBCAEKQNINwMwCwwBCyAEIAQpA0g3AzALIAQpAzBC/////w9WBEAgBEL/////DzcDMAsgBAJ/IAQoAjwhByAEKQMwpyEAIAQoAkAoAhwiAygCTBogAyADLQBKIgFBAWsgAXI6AEogAygCCCADKAIEIgVrIgFBAUgEfyAABSAHIAUgASAAIAAgAUsbIgEQGRogAyADKAIEIAFqNgIEIAEgB2ohByAAIAFrCyIBBEADQAJAAn8gAyADLQBKIgVBAWsgBXI6AEogAygCFCADKAIcSwRAIANBAEEAIAMoAiQRAQAaCyADQQA2AhwgA0IANwMQIAMoAgAiBUEEcQRAIAMgBUEgcjYCAEF/DAELIAMgAygCLCADKAIwaiIGNgIIIAMgBjYCBCAFQRt0QR91C0UEQCADIAcgASADKAIgEQEAIgVBAWpBAUsNAQsgACABawwDCyAFIAdqIQcgASAFayIBDQALCyAACyIANgIsIABFBEACfyAEKAJAKAIcIgAoAkxBf0wEQCAAKAIADAELIAAoAgALQQV2QQFxBEAgBCgCQEEFQbSbASgCABAUIARCfzcDWAwMCwsgBCgCQCIAIAApA3ggBCgCLK18NwN4IAQgBCgCLK03A1gMCgsgBCgCQCgCGBBtQQBIBEAgBCgCQEEWQbSbASgCABAUIARCfzcDWAwKCyAEQgA3A1gMCQsgBCgCQCgChAEEQCAEKAJAKAKEARBWGiAEKAJAQQA2AoQBCyAEKAJAKAKAARBtGiAEKAJAKAKAARAVIAQoAkBBADYCgAEgBEIANwNYDAgLIAQCfyAEKQNIQhBUBEAgBCgCQEESQQAQFEEADAELIAQoAlALNgIYIAQoAhhFBEAgBEJ/NwNYDAgLIARBATYCHAJAAkACQAJAAkAgBCgCGCgCCA4DAAIBAwsgBCAEKAIYKQMANwMgDAMLAkAgBCgCQCkDcFAEQCAEKAJAKAIcIAQoAhgpAwBBAiAEKAJAEGpBAEgEQCAEQn83A1gMDQsgBCAEKAJAKAIcEKMBIgI3AyAgAkIAUwRAIAQoAkBBBEG0mwEoAgAQFCAEQn83A1gMDQsgBCAEKQMgIAQoAkApA2h9NwMgIARBADYCHAwBCyAEIAQoAkApA3AgBCgCGCkDAHw3AyALDAILIAQgBCgCQCkDeCAEKAIYKQMAfDcDIAwBCyAEKAJAQRJBABAUIARCfzcDWAwICwJAAkAgBCkDIEIAUw0AIAQoAkApA3BCAFIEQCAEKQMgIAQoAkApA3BWDQELIAQoAkApA2ggBCkDICAEKAJAKQNofFgNAQsgBCgCQEESQQAQFCAEQn83A1gMCAsgBCgCQCAEKQMgNwN4IAQoAhwEQCAEKAJAKAIcIAQoAkApA3ggBCgCQCkDaHwgBCgCQBCfAUEASARAIARCfzcDWAwJCwsgBEIANwNYDAcLIAQCfyAEKQNIQhBUBEAgBCgCQEESQQAQFEEADAELIAQoAlALNgIUIAQoAhRFBEAgBEJ/NwNYDAcLIAQoAkAoAoQBIAQoAhQpAwAgBCgCFCgCCCAEKAJAEGpBAEgEQCAEQn83A1gMBwsgBEIANwNYDAYLIAQpA0hCOFQEQCAEQn83A1gMBgsCfyMAQRBrIgAgBCgCQEHYAGo2AgwgACgCDCgCAAsEQCAEKAJAAn8jAEEQayIAIAQoAkBB2ABqNgIMIAAoAgwoAgALAn8jAEEQayIAIAQoAkBB2ABqNgIMIAAoAgwoAgQLEBQgBEJ/NwNYDAYLIAQoAlAiACAEKAJAIgEpACA3AAAgACABKQBQNwAwIAAgASkASDcAKCAAIAEpAEA3ACAgACABKQA4NwAYIAAgASkAMDcAECAAIAEpACg3AAggBEI4NwNYDAULIAQgBCgCQCkDEDcDWAwECyAEIAQoAkApA3g3A1gMAwsgBCAEKAJAKAKEARCjATcDCCAEKQMIQgBTBEAgBCgCQEEeQbSbASgCABAUIARCfzcDWAwDCyAEIAQpAwg3A1gMAgsgBCgCQCgChAEiACgCTEEAThogACAAKAIAQU9xNgIAIAQCfyAEKAJQIQEgBCkDSKciACAAAn8gBCgCQCgChAEiAygCTEF/TARAIAEgACADEHEMAQsgASAAIAMQcQsiAUYNABogAQs2AgQCQCAEKQNIIAQoAgStUQRAAn8gBCgCQCgChAEiACgCTEF/TARAIAAoAgAMAQsgACgCAAtBBXZBAXFFDQELIAQoAkBBBkG0mwEoAgAQFCAEQn83A1gMAgsgBCAEKAIErTcDWAwBCyAEKAJAQRxBABAUIARCfzcDWAsgBCkDWCECIARB4ABqJAAgAgsJACAAKAI8EAUL5AEBBH8jAEEgayIDJAAgAyABNgIQIAMgAiAAKAIwIgRBAEdrNgIUIAAoAiwhBSADIAQ2AhwgAyAFNgIYQX8hBAJAAkAgACgCPCADQRBqQQIgA0EMahAGIgUEf0G0mwEgBTYCAEF/BUEAC0UEQCADKAIMIgRBAEoNAQsgACAAKAIAIARBMHFBEHNyNgIADAELIAQgAygCFCIGTQ0AIAAgACgCLCIFNgIEIAAgBSAEIAZrajYCCCAAKAIwBEAgACAFQQFqNgIEIAEgAmpBAWsgBS0AADoAAAsgAiEECyADQSBqJAAgBAv0AgEHfyMAQSBrIgMkACADIAAoAhwiBTYCECAAKAIUIQQgAyACNgIcIAMgATYCGCADIAQgBWsiATYCFCABIAJqIQVBAiEHIANBEGohAQJ/AkACQCAAKAI8IANBEGpBAiADQQxqEAMiBAR/QbSbASAENgIAQX8FQQALRQRAA0AgBSADKAIMIgRGDQIgBEF/TA0DIAEgBCABKAIEIghLIgZBA3RqIgkgBCAIQQAgBhtrIgggCSgCAGo2AgAgAUEMQQQgBhtqIgkgCSgCACAIazYCACAFIARrIQUgACgCPCABQQhqIAEgBhsiASAHIAZrIgcgA0EMahADIgQEf0G0mwEgBDYCAEF/BUEAC0UNAAsLIAVBf0cNAQsgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACDAELIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgB0ECRg0AGiACIAEoAgRrCyEAIANBIGokACAAC1IBAX8jAEEQayIDJAAgACgCPCABpyABQiCIpyACQf8BcSADQQhqEA0iAAR/QbSbASAANgIAQX8FQQALIQAgAykDCCEBIANBEGokAEJ/IAEgABsL1QQBBX8jAEGwAWsiASQAIAEgADYCqAEgASgCqAEQOAJAAkAgASgCqAEoAgBBAE4EQCABKAKoASgCAEGAFCgCAEgNAQsgASABKAKoASgCADYCECABQSBqQY8SIAFBEGoQbyABQQA2AqQBIAEgAUEgajYCoAEMAQsgASABKAKoASgCAEECdEGAE2ooAgA2AqQBAkACQAJAAkAgASgCqAEoAgBBAnRBkBRqKAIAQQFrDgIAAQILIAEoAqgBKAIEIQJBkJkBKAIAIQRBACEAAkACQANAIAIgAEGgiAFqLQAARwRAQdcAIQMgAEEBaiIAQdcARw0BDAILCyAAIgMNAEGAiQEhAgwBC0GAiQEhAANAIAAtAAAhBSAAQQFqIgIhACAFDQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/circuits/common-v2/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/circuits/common-v2/body_suffix_hasher.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/circuits/helpers/sha.circom\";\ninclude \"@zk-email/circuits/helpers/extract.circom\";\n\ntemplate BodySuffixHasher(max_body_suffix_bytes) {\n    assert(max_body_suffix_bytes % 64 == 0);\n\n    //-------Signals----------//\n\n    // The intermediate_hash value is the Merkle-Damgard state of our SHA hash until the body cutoff point\n    signal input intermediate_hash[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_suffix_padded[max_body_suffix_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_suffix_len_padded_bytes;\n    \n    //-------Hash Body Suffix----------//\n\n    signal body_hash_bits[256] <== Sha256BytesPartial(max_body_suffix_bytes)(in_body_suffix_padded, in_body_suffix_len_padded_bytes, intermediate_hash);\n\n    component bits2Num[32];\n    signal body_hash_bytes[32];\n    for (var i = 0; i < 32; i++) {\n        bits2Num[i] = Bits2Num(8);\n        for (var j = 0; j < 8; j++) {\n            bits2Num[i].in[7 - j] <== body_hash_bits[i * 8 + j];\n        }\n        body_hash_bytes[i] <== bits2Num[i].out;\n    }\n    \n    //-------Packing For Calldata----------//\n    \n    signal output intermediate_hash_packed[2] <== PackBytes(32, 2, 16)(intermediate_hash);\n    signal output body_hash_packed[2] <== PackBytes(32, 2, 16)(body_hash_bytes);\n}"
  },
  {
    "path": "circuits-circom/circuits/common-v2/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-common-v2\",\n    \"version\": \"0.0.1\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Common regex circuits for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"main\": \"dist/generate_input.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/circuits\": \"3.2.3\",\n        \"@zk-email/zk-regex-circom\": \"1.2.1\",\n        \"circomlib\": \"^2.0.5\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/circuits/common-v2/regexes/body_hash_regex_v2.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate BodyHashRegexV2(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[54][num_bytes];\n\tcomponent lt[16][num_bytes];\n\tcomponent and[54][num_bytes];\n\tcomponent multi_or[19][num_bytes];\n\tsignal states[num_bytes+1][31];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 31; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(30);\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 97;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 122;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== and[0][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 99;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 122;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== lt[2][i].out;\n\t\tand[2][i].b <== lt[3][i].out;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 97;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][6];\n\t\tmulti_or[0][i] = MultiOR(2);\n\t\tmulti_or[0][i].in[0] <== and[2][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[0][i].out;\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 105;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 122;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== lt[4][i].out;\n\t\tand[4][i].b <== lt[5][i].out;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 98;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 99;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 100;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 101;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 102;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 103;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][26];\n\t\tmulti_or[1][i] = MultiOR(8);\n\t\tmulti_or[1][i].in[0] <== and[4][i].out;\n\t\tmulti_or[1][i].in[1] <== eq[0][i].out;\n\t\tmulti_or[1][i].in[2] <== eq[1][i].out;\n\t\tmulti_or[1][i].in[3] <== eq[2][i].out;\n\t\tmulti_or[1][i].in[4] <== eq[3][i].out;\n\t\tmulti_or[1][i].in[5] <== eq[4][i].out;\n\t\tmulti_or[1][i].in[6] <== eq[5][i].out;\n\t\tmulti_or[1][i].in[7] <== eq[6][i].out;\n\t\tand[5][i].b <== multi_or[1][i].out;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][28];\n\t\tand[6][i].b <== and[0][i].out;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][29];\n\t\tand[7][i].b <== and[0][i].out;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][30];\n\t\tand[8][i].b <== and[0][i].out;\n\t\tmulti_or[2][i] = MultiOR(6);\n\t\tmulti_or[2][i].in[0] <== and[1][i].out;\n\t\tmulti_or[2][i].in[1] <== and[3][i].out;\n\t\tmulti_or[2][i].in[2] <== and[5][i].out;\n\t\tmulti_or[2][i].in[3] <== and[6][i].out;\n\t\tmulti_or[2][i].in[4] <== and[7][i].out;\n\t\tmulti_or[2][i].in[5] <== and[8][i].out;\n\t\tstates[i+1][1] <== multi_or[2][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\tlt[6][i] = LessEqThan(8);\n\t\tlt[6][i].in[0] <== 0;\n\t\tlt[6][i].in[1] <== in[i];\n\t\tlt[7][i] = LessEqThan(8);\n\t\tlt[7][i].in[0] <== in[i];\n\t\tlt[7][i].in[1] <== 58;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== lt[6][i].out;\n\t\tand[9][i].b <== lt[7][i].out;\n\t\tlt[8][i] = LessEqThan(8);\n\t\tlt[8][i].in[0] <== 60;\n\t\tlt[8][i].in[1] <== in[i];\n\t\tlt[9][i] = LessEqThan(8);\n\t\tlt[9][i].in[0] <== in[i];\n\t\tlt[9][i].in[1] <== 254;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== lt[8][i].out;\n\t\tand[10][i].b <== lt[9][i].out;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][2];\n\t\tmulti_or[3][i] = MultiOR(2);\n\t\tmulti_or[3][i].in[0] <== and[9][i].out;\n\t\tmulti_or[3][i].in[1] <== and[10][i].out;\n\t\tand[11][i].b <== multi_or[3][i].out;\n\t\tlt[10][i] = LessEqThan(8);\n\t\tlt[10][i].in[0] <== 0;\n\t\tlt[10][i].in[1] <== in[i];\n\t\tlt[11][i] = LessEqThan(8);\n\t\tlt[11][i].in[0] <== in[i];\n\t\tlt[11][i].in[1] <== 42;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== lt[10][i].out;\n\t\tand[12][i].b <== lt[11][i].out;\n\t\tlt[12][i] = LessEqThan(8);\n\t\tlt[12][i].in[0] <== 123;\n\t\tlt[12][i].in[1] <== in[i];\n\t\tlt[13][i] = LessEqThan(8);\n\t\tlt[13][i].in[0] <== in[i];\n\t\tlt[13][i].in[1] <== 254;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== lt[12][i].out;\n\t\tand[13][i].b <== lt[13][i].out;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 44;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 45;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 46;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 58;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 60;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 62;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 63;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 64;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 91;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 92;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 93;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 94;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 95;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 96;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][3];\n\t\tmulti_or[4][i] = MultiOR(16);\n\t\tmulti_or[4][i].in[0] <== and[12][i].out;\n\t\tmulti_or[4][i].in[1] <== and[13][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[7][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[8][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[9][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[10][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[11][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[12][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[13][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[14][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[15][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[16][i].out;\n\t\tmulti_or[4][i].in[12] <== eq[17][i].out;\n\t\tmulti_or[4][i].in[13] <== eq[18][i].out;\n\t\tmulti_or[4][i].in[14] <== eq[19][i].out;\n\t\tmulti_or[4][i].in[15] <== eq[20][i].out;\n\t\tand[14][i].b <== multi_or[4][i].out;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][5];\n\t\tand[15][i].b <== multi_or[4][i].out;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][10];\n\t\tand[16][i].b <== multi_or[3][i].out; // Use multi_or[3]\n\t\tmulti_or[5][i] = MultiOR(4);\n\t\tmulti_or[5][i].in[0] <== and[11][i].out;\n\t\tmulti_or[5][i].in[1] <== and[14][i].out;\n\t\tmulti_or[5][i].in[2] <== and[15][i].out;\n\t\tmulti_or[5][i].in[3] <== and[16][i].out;\n\t\tstates[i+1][2] <== multi_or[5][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 61;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][29];\n\t\tand[17][i].b <== eq[21][i].out;\n\t\tstates[i+1][3] <== and[17][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 59;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][2];\n\t\tand[18][i].b <== eq[22][i].out;\n\t\tstates[i+1][4] <== and[18][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tlt[14][i] = LessEqThan(8);\n\t\tlt[14][i].in[0] <== 65;\n\t\tlt[14][i].in[1] <== in[i];\n\t\tlt[15][i] = LessEqThan(8);\n\t\tlt[15][i].in[0] <== in[i];\n\t\tlt[15][i].in[1] <== 90;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== lt[14][i].out;\n\t\tand[19][i].b <== lt[15][i].out;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 43;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 47;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 48;\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 49;\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 50;\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 51;\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 52;\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 53;\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 54;\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 55;\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 56;\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 57;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][3];\n\t\tmulti_or[6][i] = MultiOR(15);\n\t\tmulti_or[6][i].in[0] <== and[19][i].out;\n\t\tmulti_or[6][i].in[1] <== and[0][i].out;\n\t\tmulti_or[6][i].in[2] <== eq[23][i].out;\n\t\tmulti_or[6][i].in[3] <== eq[24][i].out;\n\t\tmulti_or[6][i].in[4] <== eq[25][i].out;\n\t\tmulti_or[6][i].in[5] <== eq[26][i].out;\n\t\tmulti_or[6][i].in[6] <== eq[27][i].out;\n\t\tmulti_or[6][i].in[7] <== eq[28][i].out;\n\t\tmulti_or[6][i].in[8] <== eq[29][i].out;\n\t\tmulti_or[6][i].in[9] <== eq[30][i].out;\n\t\tmulti_or[6][i].in[10] <== eq[31][i].out;\n\t\tmulti_or[6][i].in[11] <== eq[32][i].out;\n\t\tmulti_or[6][i].in[12] <== eq[33][i].out;\n\t\tmulti_or[6][i].in[13] <== eq[34][i].out;\n\t\tmulti_or[6][i].in[14] <== eq[21][i].out;\n\t\tand[20][i].b <== multi_or[6][i].out;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][5];\n\t\tand[21][i].b <== multi_or[6][i].out;\n\t\tmulti_or[7][i] = MultiOR(2);\n\t\tmulti_or[7][i].in[0] <== and[20][i].out;\n\t\tmulti_or[7][i].in[1] <== and[21][i].out;\n\t\tstates[i+1][5] <== multi_or[7][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 9;\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 32;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][4];\n\t\tmulti_or[8][i] = MultiOR(2);\n\t\tmulti_or[8][i].in[0] <== eq[35][i].out;\n\t\tmulti_or[8][i].in[1] <== eq[36][i].out;\n\t\tand[22][i].b <== multi_or[8][i].out;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][6];\n\t\tand[23][i].b <== multi_or[8][i].out;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][8];\n\t\tand[24][i].b <== multi_or[8][i].out;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][9];\n\t\tand[25][i].b <== multi_or[8][i].out;\n\t\tmulti_or[9][i] = MultiOR(4);\n\t\tmulti_or[9][i].in[0] <== and[22][i].out;\n\t\tmulti_or[9][i].in[1] <== and[23][i].out;\n\t\tmulti_or[9][i].in[2] <== and[24][i].out;\n\t\tmulti_or[9][i].in[3] <== and[25][i].out;\n\t\tstates[i+1][6] <== multi_or[9][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 13;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][4];\n\t\tand[26][i].b <== eq[37][i].out;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][8];\n\t\tand[27][i].b <== eq[37][i].out;\n\t\tmulti_or[10][i] = MultiOR(2);\n\t\tmulti_or[10][i].in[0] <== and[26][i].out;\n\t\tmulti_or[10][i].in[1] <== and[27][i].out;\n\t\tstates[i+1][7] <== multi_or[10][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][5];\n\t\tand[28][i].b <== eq[22][i].out;\n\t\tstates[i+1][8] <== and[28][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 10;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][7];\n\t\tand[29][i].b <== eq[38][i].out;\n\t\tstates[i+1][9] <== and[29][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][1];\n\t\tand[30][i].b <== eq[21][i].out;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][26];\n\t\tand[31][i].b <== eq[21][i].out;\n\t\tmulti_or[11][i] = MultiOR(2);\n\t\tmulti_or[11][i].in[0] <== and[30][i].out;\n\t\tmulti_or[11][i].in[1] <== and[31][i].out;\n\t\tstates[i+1][10] <== multi_or[11][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][0];\n\t\tand[32][i].b <== eq[37][i].out;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][12];\n\t\tand[33][i].b <== eq[37][i].out;\n\t\tmulti_or[12][i] = MultiOR(2);\n\t\tmulti_or[12][i].in[0] <== and[32][i].out;\n\t\tmulti_or[12][i].in[1] <== and[33][i].out;\n\t\tstates[i+1][11] <== multi_or[12][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 255;\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][0];\n\t\tand[34][i].b <== eq[39][i].out;\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][11];\n\t\tand[35][i].b <== eq[38][i].out;\n\t\tmulti_or[13][i] = MultiOR(2);\n\t\tmulti_or[13][i].in[0] <== and[34][i].out;\n\t\tmulti_or[13][i].in[1] <== and[35][i].out;\n\t\tstates[i+1][12] <== multi_or[13][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 68;\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][12];\n\t\tmulti_or[14][i] = MultiOR(2);\n\t\tmulti_or[14][i].in[0] <== eq[40][i].out;\n\t\tmulti_or[14][i].in[1] <== eq[3][i].out;\n\t\tand[36][i].b <== multi_or[14][i].out;\n\t\tstates[i+1][13] <== and[36][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 75;\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 107;\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][13];\n\t\tmulti_or[15][i] = MultiOR(2);\n\t\tmulti_or[15][i].in[0] <== eq[41][i].out;\n\t\tmulti_or[15][i].in[1] <== eq[42][i].out;\n\t\tand[37][i].b <== multi_or[15][i].out;\n\t\tstates[i+1][14] <== and[37][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 73;\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 105;\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][14];\n\t\tmulti_or[16][i] = MultiOR(2);\n\t\tmulti_or[16][i].in[0] <== eq[43][i].out;\n\t\tmulti_or[16][i].in[1] <== eq[44][i].out;\n\t\tand[38][i].b <== multi_or[16][i].out;\n\t\tstates[i+1][15] <== and[38][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 77;\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 109;\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][15];\n\t\tmulti_or[17][i] = MultiOR(2);\n\t\tmulti_or[17][i].in[0] <== eq[45][i].out;\n\t\tmulti_or[17][i].in[1] <== eq[46][i].out;\n\t\tand[39][i].b <== multi_or[17][i].out;\n\t\tstates[i+1][16] <== and[39][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][16];\n\t\tand[40][i].b <== eq[8][i].out;\n\t\tstates[i+1][17] <== and[40][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 83;\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 115;\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][17];\n\t\tmulti_or[18][i] = MultiOR(2);\n\t\tmulti_or[18][i].in[0] <== eq[47][i].out;\n\t\tmulti_or[18][i].in[1] <== eq[48][i].out;\n\t\tand[41][i].b <== multi_or[18][i].out;\n\t\tstates[i+1][18] <== and[41][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][18];\n\t\tand[42][i].b <== eq[44][i].out;\n\t\tstates[i+1][19] <== and[42][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][19];\n\t\tand[43][i].b <== eq[6][i].out;\n\t\tstates[i+1][20] <== and[43][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 110;\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][20];\n\t\tand[44][i].b <== eq[49][i].out;\n\t\tstates[i+1][21] <== and[44][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][21];\n\t\tand[45][i].b <== eq[0][i].out;\n\t\tstates[i+1][22] <== and[45][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 116;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][22];\n\t\tand[46][i].b <== eq[50][i].out;\n\t\tstates[i+1][23] <== and[46][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 117;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][23];\n\t\tand[47][i].b <== eq[51][i].out;\n\t\tstates[i+1][24] <== and[47][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 114;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][24];\n\t\tand[48][i].b <== eq[52][i].out;\n\t\tstates[i+1][25] <== and[48][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][6];\n\t\tand[49][i].b <== eq[1][i].out;\n\t\tstates[i+1][26] <== and[49][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][25];\n\t\tand[50][i].b <== eq[4][i].out;\n\t\tstates[i+1][27] <== and[50][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][27];\n\t\tand[51][i].b <== eq[10][i].out;\n\t\tstates[i+1][28] <== and[51][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\teq[53][i] = IsEqual();\n\t\teq[53][i].in[0] <== in[i];\n\t\teq[53][i].in[1] <== 104;\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][26];\n\t\tand[52][i].b <== eq[53][i].out;\n\t\tstates[i+1][29] <== and[52][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][28];\n\t\tand[53][i].b <== eq[36][i].out;\n\t\tstates[i+1][30] <== and[53][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][8];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][8] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][3] * states[i+2][5];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][5] * states[i+2][5];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/common-v2/regexes/body_hash_regex_v2.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"((\\r\\n)|^)(d|D)(k|K)(i|I)(m|M)-(s|S)ignature:( )?\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"((a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)+=[^;]+;(\\r\\n)?[\\u0009 ]+)+bh=\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|\\\\+|/|=)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \";\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/common-v2/regexes/from_regex_v2.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate FromRegexV2(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[58][num_bytes];\n\tcomponent lt[20][num_bytes];\n\tcomponent and[40][num_bytes];\n\tcomponent multi_or[15][num_bytes];\n\tsignal states[num_bytes+1][16];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 16; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(15);\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 14;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 59;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 61;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 254;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[2][i].out;\n\t\tand[1][i].b <== lt[3][i].out;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 0;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 1;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 2;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 3;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 4;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 5;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 6;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 7;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 8;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 9;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 11;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 12;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(14);\n\t\tmulti_or[0][i].in[0] <== and[0][i].out;\n\t\tmulti_or[0][i].in[1] <== and[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[13] <== eq[11][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 14;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 44;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== lt[4][i].out;\n\t\tand[3][i].b <== lt[5][i].out;\n\t\tlt[6][i] = LessEqThan(8);\n\t\tlt[6][i].in[0] <== 123;\n\t\tlt[6][i].in[1] <== in[i];\n\t\tlt[7][i] = LessEqThan(8);\n\t\tlt[7][i].in[0] <== in[i];\n\t\tlt[7][i].in[1] <== 254;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== lt[6][i].out;\n\t\tand[4][i].b <== lt[7][i].out;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 47;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 58;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 59;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 61;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 63;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 64;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 91;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 92;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 93;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 94;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 96;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][2];\n\t\tmulti_or[1][i] = MultiOR(25);\n\t\tmulti_or[1][i].in[0] <== and[3][i].out;\n\t\tmulti_or[1][i].in[1] <== and[4][i].out;\n\t\tmulti_or[1][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[1][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[1][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[1][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[1][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[1][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[1][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[1][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[1][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[1][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[1][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[1][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[1][i].in[14] <== eq[12][i].out;\n\t\tmulti_or[1][i].in[15] <== eq[13][i].out;\n\t\tmulti_or[1][i].in[16] <== eq[14][i].out;\n\t\tmulti_or[1][i].in[17] <== eq[15][i].out;\n\t\tmulti_or[1][i].in[18] <== eq[16][i].out;\n\t\tmulti_or[1][i].in[19] <== eq[17][i].out;\n\t\tmulti_or[1][i].in[20] <== eq[18][i].out;\n\t\tmulti_or[1][i].in[21] <== eq[19][i].out;\n\t\tmulti_or[1][i].in[22] <== eq[20][i].out;\n\t\tmulti_or[1][i].in[23] <== eq[21][i].out;\n\t\tmulti_or[1][i].in[24] <== eq[22][i].out;\n\t\tand[5][i].b <== multi_or[1][i].out;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][3];\n\t\tand[6][i].b <== multi_or[0][i].out;\n\t\tlt[8][i] = LessEqThan(8);\n\t\tlt[8][i].in[0] <== 14;\n\t\tlt[8][i].in[1] <== in[i];\n\t\tlt[9][i] = LessEqThan(8);\n\t\tlt[9][i].in[0] <== in[i];\n\t\tlt[9][i].in[1] <== 32;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== lt[8][i].out;\n\t\tand[7][i].b <== lt[9][i].out;\n\t\tlt[10][i] = LessEqThan(8);\n\t\tlt[10][i].in[0] <== 127;\n\t\tlt[10][i].in[1] <== in[i];\n\t\tlt[11][i] = LessEqThan(8);\n\t\tlt[11][i].in[0] <== in[i];\n\t\tlt[11][i].in[1] <== 254;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== lt[10][i].out;\n\t\tand[8][i].b <== lt[11][i].out;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 34;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 40;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 41;\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 44;\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 62;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][12];\n\t\tmulti_or[2][i] = MultiOR(25);\n\t\tmulti_or[2][i].in[0] <== and[7][i].out;\n\t\tmulti_or[2][i].in[1] <== and[8][i].out;\n\t\tmulti_or[2][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[2][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[2][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[2][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[2][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[2][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[2][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[2][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[2][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[2][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[2][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[2][i].in[14] <== eq[23][i].out;\n\t\tmulti_or[2][i].in[15] <== eq[24][i].out;\n\t\tmulti_or[2][i].in[16] <== eq[25][i].out;\n\t\tmulti_or[2][i].in[17] <== eq[26][i].out;\n\t\tmulti_or[2][i].in[18] <== eq[13][i].out;\n\t\tmulti_or[2][i].in[19] <== eq[14][i].out;\n\t\tmulti_or[2][i].in[20] <== eq[27][i].out;\n\t\tmulti_or[2][i].in[21] <== eq[17][i].out;\n\t\tmulti_or[2][i].in[22] <== eq[18][i].out;\n\t\tmulti_or[2][i].in[23] <== eq[19][i].out;\n\t\tmulti_or[2][i].in[24] <== eq[20][i].out;\n\t\tand[9][i].b <== multi_or[2][i].out;\n\t\tlt[12][i] = LessEqThan(8);\n\t\tlt[12][i].in[0] <== 14;\n\t\tlt[12][i].in[1] <== in[i];\n\t\tlt[13][i] = LessEqThan(8);\n\t\tlt[13][i].in[0] <== in[i];\n\t\tlt[13][i].in[1] <== 254;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== lt[12][i].out;\n\t\tand[10][i].b <== lt[13][i].out;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][13];\n\t\tmulti_or[3][i] = MultiOR(13);\n\t\tmulti_or[3][i].in[0] <== and[10][i].out;\n\t\tmulti_or[3][i].in[1] <== eq[0][i].out;\n\t\tmulti_or[3][i].in[2] <== eq[1][i].out;\n\t\tmulti_or[3][i].in[3] <== eq[2][i].out;\n\t\tmulti_or[3][i].in[4] <== eq[3][i].out;\n\t\tmulti_or[3][i].in[5] <== eq[4][i].out;\n\t\tmulti_or[3][i].in[6] <== eq[5][i].out;\n\t\tmulti_or[3][i].in[7] <== eq[6][i].out;\n\t\tmulti_or[3][i].in[8] <== eq[7][i].out;\n\t\tmulti_or[3][i].in[9] <== eq[8][i].out;\n\t\tmulti_or[3][i].in[10] <== eq[9][i].out;\n\t\tmulti_or[3][i].in[11] <== eq[10][i].out;\n\t\tmulti_or[3][i].in[12] <== eq[11][i].out;\n\t\tand[11][i].b <== multi_or[3][i].out;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][14];\n\t\tmulti_or[4][i] = MultiOR(24);\n\t\tmulti_or[4][i].in[0] <== and[7][i].out;\n\t\tmulti_or[4][i].in[1] <== and[8][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[4][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[4][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[4][i].in[14] <== eq[23][i].out;\n\t\tmulti_or[4][i].in[15] <== eq[24][i].out;\n\t\tmulti_or[4][i].in[16] <== eq[25][i].out;\n\t\tmulti_or[4][i].in[17] <== eq[26][i].out;\n\t\tmulti_or[4][i].in[18] <== eq[13][i].out;\n\t\tmulti_or[4][i].in[19] <== eq[14][i].out;\n\t\tmulti_or[4][i].in[20] <== eq[27][i].out;\n\t\tmulti_or[4][i].in[21] <== eq[18][i].out;\n\t\tmulti_or[4][i].in[22] <== eq[19][i].out;\n\t\tmulti_or[4][i].in[23] <== eq[20][i].out;\n\t\tand[12][i].b <== multi_or[4][i].out;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][15];\n\t\tmulti_or[5][i] = MultiOR(26);\n\t\tmulti_or[5][i].in[0] <== and[3][i].out;\n\t\tmulti_or[5][i].in[1] <== and[4][i].out;\n\t\tmulti_or[5][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[5][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[5][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[5][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[5][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[5][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[5][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[5][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[5][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[5][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[5][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[5][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[5][i].in[14] <== eq[12][i].out;\n\t\tmulti_or[5][i].in[15] <== eq[13][i].out;\n\t\tmulti_or[5][i].in[16] <== eq[14][i].out;\n\t\tmulti_or[5][i].in[17] <== eq[15][i].out;\n\t\tmulti_or[5][i].in[18] <== eq[27][i].out;\n\t\tmulti_or[5][i].in[19] <== eq[16][i].out;\n\t\tmulti_or[5][i].in[20] <== eq[17][i].out;\n\t\tmulti_or[5][i].in[21] <== eq[18][i].out;\n\t\tmulti_or[5][i].in[22] <== eq[19][i].out;\n\t\tmulti_or[5][i].in[23] <== eq[20][i].out;\n\t\tmulti_or[5][i].in[24] <== eq[21][i].out;\n\t\tmulti_or[5][i].in[25] <== eq[22][i].out;\n\t\tand[13][i].b <== multi_or[5][i].out;\n\t\tmulti_or[6][i] = MultiOR(7);\n\t\tmulti_or[6][i].in[0] <== and[2][i].out;\n\t\tmulti_or[6][i].in[1] <== and[5][i].out;\n\t\tmulti_or[6][i].in[2] <== and[6][i].out;\n\t\tmulti_or[6][i].in[3] <== and[9][i].out;\n\t\tmulti_or[6][i].in[4] <== and[11][i].out;\n\t\tmulti_or[6][i].in[5] <== and[12][i].out;\n\t\tmulti_or[6][i].in[6] <== and[13][i].out;\n\t\tstates[i+1][1] <== multi_or[6][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\tlt[14][i] = LessEqThan(8);\n\t\tlt[14][i].in[0] <== 65;\n\t\tlt[14][i].in[1] <== in[i];\n\t\tlt[15][i] = LessEqThan(8);\n\t\tlt[15][i].in[0] <== in[i];\n\t\tlt[15][i].in[1] <== 90;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== lt[14][i].out;\n\t\tand[14][i].b <== lt[15][i].out;\n\t\tlt[16][i] = LessEqThan(8);\n\t\tlt[16][i].in[0] <== 97;\n\t\tlt[16][i].in[1] <== in[i];\n\t\tlt[17][i] = LessEqThan(8);\n\t\tlt[17][i].in[0] <== in[i];\n\t\tlt[17][i].in[1] <== 122;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== lt[16][i].out;\n\t\tand[15][i].b <== lt[17][i].out;\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 45;\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 46;\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 48;\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 49;\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 50;\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 51;\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 52;\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 53;\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 54;\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 55;\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 56;\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 57;\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 95;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][2];\n\t\tmulti_or[7][i] = MultiOR(15);\n\t\tmulti_or[7][i].in[0] <== and[14][i].out;\n\t\tmulti_or[7][i].in[1] <== and[15][i].out;\n\t\tmulti_or[7][i].in[2] <== eq[28][i].out;\n\t\tmulti_or[7][i].in[3] <== eq[29][i].out;\n\t\tmulti_or[7][i].in[4] <== eq[30][i].out;\n\t\tmulti_or[7][i].in[5] <== eq[31][i].out;\n\t\tmulti_or[7][i].in[6] <== eq[32][i].out;\n\t\tmulti_or[7][i].in[7] <== eq[33][i].out;\n\t\tmulti_or[7][i].in[8] <== eq[34][i].out;\n\t\tmulti_or[7][i].in[9] <== eq[35][i].out;\n\t\tmulti_or[7][i].in[10] <== eq[36][i].out;\n\t\tmulti_or[7][i].in[11] <== eq[37][i].out;\n\t\tmulti_or[7][i].in[12] <== eq[38][i].out;\n\t\tmulti_or[7][i].in[13] <== eq[39][i].out;\n\t\tmulti_or[7][i].in[14] <== eq[40][i].out;\n\t\tand[16][i].b <== multi_or[7][i].out;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][15];\n\t\tand[17][i].b <== multi_or[7][i].out;\n\t\tmulti_or[8][i] = MultiOR(2);\n\t\tmulti_or[8][i].in[0] <== and[16][i].out;\n\t\tmulti_or[8][i].in[1] <== and[17][i].out;\n\t\tstates[i+1][2] <== multi_or[8][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][2];\n\t\tand[18][i].b <== eq[27][i].out;\n\t\tstates[i+1][3] <== and[18][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 13;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][3];\n\t\tand[19][i].b <== eq[41][i].out;\n\t\tstates[i+1][4] <== and[19][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 10;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][4];\n\t\tand[20][i].b <== eq[42][i].out;\n\t\tstates[i+1][5] <== and[20][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][0];\n\t\tand[21][i].b <== eq[41][i].out;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][7];\n\t\tand[22][i].b <== eq[41][i].out;\n\t\tmulti_or[9][i] = MultiOR(2);\n\t\tmulti_or[9][i].in[0] <== and[21][i].out;\n\t\tmulti_or[9][i].in[1] <== and[22][i].out;\n\t\tstates[i+1][6] <== multi_or[9][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 255;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][0];\n\t\tand[23][i].b <== eq[43][i].out;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][6];\n\t\tand[24][i].b <== eq[42][i].out;\n\t\tmulti_or[10][i] = MultiOR(2);\n\t\tmulti_or[10][i].in[0] <== and[23][i].out;\n\t\tmulti_or[10][i].in[1] <== and[24][i].out;\n\t\tstates[i+1][7] <== multi_or[10][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 70;\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 102;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][7];\n\t\tmulti_or[11][i] = MultiOR(2);\n\t\tmulti_or[11][i].in[0] <== eq[44][i].out;\n\t\tmulti_or[11][i].in[1] <== eq[45][i].out;\n\t\tand[25][i].b <== multi_or[11][i].out;\n\t\tstates[i+1][8] <== and[25][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 114;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][8];\n\t\tand[26][i].b <== eq[46][i].out;\n\t\tstates[i+1][9] <== and[26][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 111;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][9];\n\t\tand[27][i].b <== eq[47][i].out;\n\t\tstates[i+1][10] <== and[27][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 109;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][10];\n\t\tand[28][i].b <== eq[48][i].out;\n\t\tstates[i+1][11] <== and[28][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 60;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][1];\n\t\tand[29][i].b <== eq[49][i].out;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][2];\n\t\tand[30][i].b <== eq[49][i].out;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][3];\n\t\tand[31][i].b <== eq[49][i].out;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][12];\n\t\tand[32][i].b <== eq[49][i].out;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][14];\n\t\tand[33][i].b <== eq[49][i].out;\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][15];\n\t\tand[34][i].b <== eq[49][i].out;\n\t\tmulti_or[12][i] = MultiOR(6);\n\t\tmulti_or[12][i].in[0] <== and[29][i].out;\n\t\tmulti_or[12][i].in[1] <== and[30][i].out;\n\t\tmulti_or[12][i].in[2] <== and[31][i].out;\n\t\tmulti_or[12][i].in[3] <== and[32][i].out;\n\t\tmulti_or[12][i].in[4] <== and[33][i].out;\n\t\tmulti_or[12][i].in[5] <== and[34][i].out;\n\t\tstates[i+1][12] <== multi_or[12][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][11];\n\t\tand[35][i].b <== eq[13][i].out;\n\t\tstates[i+1][13] <== and[35][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tlt[18][i] = LessEqThan(8);\n\t\tlt[18][i].in[0] <== 94;\n\t\tlt[18][i].in[1] <== in[i];\n\t\tlt[19][i] = LessEqThan(8);\n\t\tlt[19][i].in[0] <== in[i];\n\t\tlt[19][i].in[1] <== 126;\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== lt[18][i].out;\n\t\tand[36][i].b <== lt[19][i].out;\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 33;\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 35;\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 36;\n\t\teq[53][i] = IsEqual();\n\t\teq[53][i].in[0] <== in[i];\n\t\teq[53][i].in[1] <== 37;\n\t\teq[54][i] = IsEqual();\n\t\teq[54][i].in[0] <== in[i];\n\t\teq[54][i].in[1] <== 38;\n\t\teq[55][i] = IsEqual();\n\t\teq[55][i].in[0] <== in[i];\n\t\teq[55][i].in[1] <== 39;\n\t\teq[56][i] = IsEqual();\n\t\teq[56][i].in[0] <== in[i];\n\t\teq[56][i].in[1] <== 42;\n\t\teq[57][i] = IsEqual();\n\t\teq[57][i].in[0] <== in[i];\n\t\teq[57][i].in[1] <== 43;\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][12];\n\t\tmulti_or[13][i] = MultiOR(25);\n\t\tmulti_or[13][i].in[0] <== and[14][i].out;\n\t\tmulti_or[13][i].in[1] <== and[36][i].out;\n\t\tmulti_or[13][i].in[2] <== eq[50][i].out;\n\t\tmulti_or[13][i].in[3] <== eq[51][i].out;\n\t\tmulti_or[13][i].in[4] <== eq[52][i].out;\n\t\tmulti_or[13][i].in[5] <== eq[53][i].out;\n\t\tmulti_or[13][i].in[6] <== eq[54][i].out;\n\t\tmulti_or[13][i].in[7] <== eq[55][i].out;\n\t\tmulti_or[13][i].in[8] <== eq[56][i].out;\n\t\tmulti_or[13][i].in[9] <== eq[57][i].out;\n\t\tmulti_or[13][i].in[10] <== eq[28][i].out;\n\t\tmulti_or[13][i].in[11] <== eq[29][i].out;\n\t\tmulti_or[13][i].in[12] <== eq[12][i].out;\n\t\tmulti_or[13][i].in[13] <== eq[30][i].out;\n\t\tmulti_or[13][i].in[14] <== eq[31][i].out;\n\t\tmulti_or[13][i].in[15] <== eq[32][i].out;\n\t\tmulti_or[13][i].in[16] <== eq[33][i].out;\n\t\tmulti_or[13][i].in[17] <== eq[34][i].out;\n\t\tmulti_or[13][i].in[18] <== eq[35][i].out;\n\t\tmulti_or[13][i].in[19] <== eq[36][i].out;\n\t\tmulti_or[13][i].in[20] <== eq[37][i].out;\n\t\tmulti_or[13][i].in[21] <== eq[38][i].out;\n\t\tmulti_or[13][i].in[22] <== eq[39][i].out;\n\t\tmulti_or[13][i].in[23] <== eq[15][i].out;\n\t\tmulti_or[13][i].in[24] <== eq[16][i].out;\n\t\tand[37][i].b <== multi_or[13][i].out;\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][14];\n\t\tand[38][i].b <== multi_or[13][i].out;\n\t\tmulti_or[14][i] = MultiOR(2);\n\t\tmulti_or[14][i].in[0] <== and[37][i].out;\n\t\tmulti_or[14][i].in[1] <== and[38][i].out;\n\t\tstates[i+1][14] <== multi_or[14][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][14];\n\t\tand[39][i].b <== eq[17][i].out;\n\t\tstates[i+1][15] <== and[39][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][5];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][5] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][10];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][2] * states[i+2][2];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][2] * states[i+2][12];\n\t\tis_substr0[i][3] <== is_substr0[i][2] + states[i+1][12] * states[i+2][12];\n\t\tis_substr0[i][4] <== is_substr0[i][3] + states[i+1][12] * states[i+2][14];\n\t\tis_substr0[i][5] <== is_substr0[i][4] + states[i+1][14] * states[i+2][12];\n\t\tis_substr0[i][6] <== is_substr0[i][5] + states[i+1][14] * states[i+2][14];\n\t\tis_substr0[i][7] <== is_substr0[i][6] + states[i+1][14] * states[i+2][15];\n\t\tis_substr0[i][8] <== is_substr0[i][7] + states[i+1][15] * states[i+2][2];\n\t\tis_substr0[i][9] <== is_substr0[i][8] + states[i+1][15] * states[i+2][12];\n\t\tis_reveal0[i] <== is_substr0[i][9] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/common-v2/regexes/from_regex_v2.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"((\\r\\n)|^)(from|From):\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"[^\\r\\n]+<\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|!|#|$|%|&|'|\\\\*|\\\\+|-|/|=|\\\\?|^|_|`|{|\\\\||}|~|\\\\.)+@(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|_|\\\\.|-)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \">\\r\\n\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/common-v2/regexes/to_regex_v2.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate ToRegexV2(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[33][num_bytes];\n\tcomponent lt[6][num_bytes];\n\tcomponent and[19][num_bytes];\n\tcomponent multi_or[7][num_bytes];\n\tsignal states[num_bytes+1][12];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 12; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(11);\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 65;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 90;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 94;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 126;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[2][i].out;\n\t\tand[1][i].b <== lt[3][i].out;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 33;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 35;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 36;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 37;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 38;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 39;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 42;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 43;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 45;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 46;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 47;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 48;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 49;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 50;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 51;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 52;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 53;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 54;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 55;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 56;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 57;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 61;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 63;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(25);\n\t\tmulti_or[0][i].in[0] <== and[0][i].out;\n\t\tmulti_or[0][i].in[1] <== and[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[14] <== eq[12][i].out;\n\t\tmulti_or[0][i].in[15] <== eq[13][i].out;\n\t\tmulti_or[0][i].in[16] <== eq[14][i].out;\n\t\tmulti_or[0][i].in[17] <== eq[15][i].out;\n\t\tmulti_or[0][i].in[18] <== eq[16][i].out;\n\t\tmulti_or[0][i].in[19] <== eq[17][i].out;\n\t\tmulti_or[0][i].in[20] <== eq[18][i].out;\n\t\tmulti_or[0][i].in[21] <== eq[19][i].out;\n\t\tmulti_or[0][i].in[22] <== eq[20][i].out;\n\t\tmulti_or[0][i].in[23] <== eq[21][i].out;\n\t\tmulti_or[0][i].in[24] <== eq[22][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][8];\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][10];\n\t\tand[4][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(3);\n\t\tmulti_or[1][i].in[0] <== and[2][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\tmulti_or[1][i].in[2] <== and[4][i].out;\n\t\tstates[i+1][1] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 13;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][0];\n\t\tand[5][i].b <== eq[23][i].out;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][3];\n\t\tand[6][i].b <== eq[23][i].out;\n\t\tmulti_or[2][i] = MultiOR(2);\n\t\tmulti_or[2][i].in[0] <== and[5][i].out;\n\t\tmulti_or[2][i].in[1] <== and[6][i].out;\n\t\tstates[i+1][2] <== multi_or[2][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 255;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][0];\n\t\tand[7][i].b <== eq[24][i].out;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 10;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][2];\n\t\tand[8][i].b <== eq[25][i].out;\n\t\tmulti_or[3][i] = MultiOR(2);\n\t\tmulti_or[3][i].in[0] <== and[7][i].out;\n\t\tmulti_or[3][i].in[1] <== and[8][i].out;\n\t\tstates[i+1][3] <== multi_or[3][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 64;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][1];\n\t\tand[9][i].b <== eq[26][i].out;\n\t\tstates[i+1][4] <== and[9][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 84;\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 116;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][3];\n\t\tmulti_or[4][i] = MultiOR(2);\n\t\tmulti_or[4][i].in[0] <== eq[27][i].out;\n\t\tmulti_or[4][i].in[1] <== eq[28][i].out;\n\t\tand[10][i].b <== multi_or[4][i].out;\n\t\tstates[i+1][5] <== and[10][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 97;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 122;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== lt[4][i].out;\n\t\tand[11][i].b <== lt[5][i].out;\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 95;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][4];\n\t\tmulti_or[5][i] = MultiOR(15);\n\t\tmulti_or[5][i].in[0] <== and[0][i].out;\n\t\tmulti_or[5][i].in[1] <== and[11][i].out;\n\t\tmulti_or[5][i].in[2] <== eq[8][i].out;\n\t\tmulti_or[5][i].in[3] <== eq[9][i].out;\n\t\tmulti_or[5][i].in[4] <== eq[11][i].out;\n\t\tmulti_or[5][i].in[5] <== eq[12][i].out;\n\t\tmulti_or[5][i].in[6] <== eq[13][i].out;\n\t\tmulti_or[5][i].in[7] <== eq[14][i].out;\n\t\tmulti_or[5][i].in[8] <== eq[15][i].out;\n\t\tmulti_or[5][i].in[9] <== eq[16][i].out;\n\t\tmulti_or[5][i].in[10] <== eq[17][i].out;\n\t\tmulti_or[5][i].in[11] <== eq[18][i].out;\n\t\tmulti_or[5][i].in[12] <== eq[19][i].out;\n\t\tmulti_or[5][i].in[13] <== eq[20][i].out;\n\t\tmulti_or[5][i].in[14] <== eq[29][i].out;\n\t\tand[12][i].b <== multi_or[5][i].out;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][6];\n\t\tand[13][i].b <== multi_or[5][i].out;\n\t\tmulti_or[6][i] = MultiOR(2);\n\t\tmulti_or[6][i].in[0] <== and[12][i].out;\n\t\tmulti_or[6][i].in[1] <== and[13][i].out;\n\t\tstates[i+1][6] <== multi_or[6][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 111;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][5];\n\t\tand[14][i].b <== eq[30][i].out;\n\t\tstates[i+1][7] <== and[14][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 58;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][7];\n\t\tand[15][i].b <== eq[31][i].out;\n\t\tstates[i+1][8] <== and[15][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][6];\n\t\tand[16][i].b <== eq[23][i].out;\n\t\tstates[i+1][9] <== and[16][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 32;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][8];\n\t\tand[17][i].b <== eq[32][i].out;\n\t\tstates[i+1][10] <== and[17][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][9];\n\t\tand[18][i].b <== eq[25][i].out;\n\t\tstates[i+1][11] <== and[18][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][11];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][11] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][7];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][1] * states[i+2][4];\n\t\tis_substr0[i][3] <== is_substr0[i][2] + states[i+1][4] * states[i+2][6];\n\t\tis_substr0[i][4] <== is_substr0[i][3] + states[i+1][6] * states[i+2][6];\n\t\tis_substr0[i][5] <== is_substr0[i][4] + states[i+1][8] * states[i+2][1];\n\t\tis_substr0[i][6] <== is_substr0[i][5] + states[i+1][10] * states[i+2][1];\n\t\tis_reveal0[i] <== is_substr0[i][6] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/common-v2/regexes/to_regex_v2.json",
    "content": "{\n    \"parts\": [\n      {\n        \"is_public\": false,\n        \"regex_def\": \"((\\r\\n)|^)(to|To):\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"( )?\"\n      },\n      {\n        \"is_public\": true,\n        \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|!|#|$|%|&|'|\\\\*|\\\\+|-|/|=|\\\\?|^|_|`|{|\\\\||}|~|\\\\.)+@(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|_|\\\\.|-)+\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"\\r\\n\"\n      }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/body_suffix_hasher.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Body Suffix Hasher\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    function bytesToPacked(arr) {\n        // Convert into bigint from string\n        let arrInt = arr.map(BigInt);\n        let n = arrInt.length;\n        let out = BigInt(0);\n        for (let k = 0; k < n; k++) {\n            out += arrInt[k] * BigInt(2 ** (8 * k));  // little endian\n        }\n        return out;\n    }\n\n    function chunkArray(arr, chunkSize, length) {\n        let chunks = [] as any[];\n        for (let i = 0; i < length; i += chunkSize) {\n            let chunk = arr.slice(i, i + chunkSize);\n            if (chunk.length < chunkSize) {\n                chunk = chunk.concat(new Array(chunkSize - chunk.length).fill('0'));\n            }\n            chunks.push(chunk);\n        }\n        return chunks;\n    }\n\n    function base64ToByteArray(base64String) {\n        let binaryString = atob(base64String);\n        let stringArray = new Array(binaryString.length);\n\n        for (let i = 0; i < binaryString.length; i++) {\n            stringArray[i] = binaryString.charCodeAt(i).toString();\n        }\n\n        return stringArray;\n    }\n\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"./mocks/test_body_suffix_hasher.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/test_body_suffix_hasher\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"intermediate_hash\": [\"163\", \"0\", \"85\", \"101\", \"126\", \"105\", \"88\", \"222\", \"225\", \"117\", \"247\", \"171\", \"171\", \"60\", \"248\", \"120\", \"123\", \"118\", \"154\", \"220\", \"154\", \"233\", \"231\", \"77\", \"116\", \"7\", \"2\", \"200\", \"78\", \"54\", \"132\", \"118\"],\n            \"in_body_suffix_padded\": [\n                \"49\", \"34\", \"32\", \"98\", \"111\", \"114\", \"100\", \"101\", \"114\", \"61\", \"34\", \"48\", \"34\", \"32\", \"47\", \"62\",\n                \"13\", \"10\", \"13\", \"10\", \"60\", \"105\", \"109\", \"103\", \"32\", \"115\", \"114\", \"99\", \"61\", \"34\", \"104\", \"116\",\n                \"116\", \"112\", \"58\", \"47\", \"47\", \"101\", \"109\", \"97\", \"105\", \"108\", \"98\", \"117\", \"108\", \"107\", \"114\", \"101\",\n                \"97\", \"100\", \"114\", \"101\", \"99\", \"101\", \"105\", \"112\", \"116\", \"46\", \"103\", \"97\", \"114\", \"97\", \"110\", \"116\",\n                \"105\", \"46\", \"99\", \"111\", \"109\", \"46\", \"116\", \"114\", \"47\", \"114\", \"101\", \"97\", \"100\", \"114\", \"101\", \"99\",\n                \"101\", \"105\", \"112\", \"116\", \"47\", \"108\", \"105\", \"115\", \"116\", \"101\", \"110\", \"101\", \"114\", \"46\", \"97\", \"115\",\n                \"112\", \"120\", \"63\", \"82\", \"101\", \"102\", \"61\", \"54\", \"101\", \"52\", \"48\", \"57\", \"52\", \"50\", \"97\", \"51\",\n                \"48\", \"54\", \"97\", \"54\", \"56\", \"98\", \"50\", \"48\", \"51\", \"100\", \"101\", \"101\", \"57\", \"57\", \"53\", \"52\",\n                \"48\", \"53\", \"55\", \"99\", \"50\", \"52\", \"54\", \"53\", \"53\", \"49\", \"100\", \"52\", \"54\", \"52\", \"100\", \"56\",\n                \"97\", \"48\", \"98\", \"53\", \"100\", \"98\", \"54\", \"57\", \"55\", \"54\", \"97\", \"97\", \"51\", \"100\", \"102\", \"100\",\n                \"53\", \"57\", \"53\", \"97\", \"50\", \"55\", \"54\", \"34\", \"32\", \"97\", \"108\", \"116\", \"61\", \"34\", \"34\", \"32\",\n                \"119\", \"105\", \"100\", \"116\", \"104\", \"61\", \"34\", \"49\", \"34\", \"32\", \"104\", \"101\", \"105\", \"103\", \"104\", \"116\",\n                \"61\", \"34\", \"49\", \"34\", \"32\", \"98\", \"111\", \"114\", \"100\", \"101\", \"114\", \"61\", \"34\", \"48\", \"34\", \"32\", \"47\",\n                \"62\", \"13\", \"10\", \"60\", \"47\", \"98\", \"111\", \"100\", \"121\", \"62\", \"13\", \"10\", \"60\", \"47\", \"104\", \"116\", \"109\",\n                \"108\", \"62\", \"13\", \"10\", \"128\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"2\", \"149\", \"48\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\"\n            ],\n            \"in_body_suffix_len_padded_bytes\": 256,\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match pack precomputed SHA\", async () => {\n        const input = {\n            \"intermediate_hash\": [\"163\", \"0\", \"85\", \"101\", \"126\", \"105\", \"88\", \"222\", \"225\", \"117\", \"247\", \"171\", \"171\", \"60\", \"248\", \"120\", \"123\", \"118\", \"154\", \"220\", \"154\", \"233\", \"231\", \"77\", \"116\", \"7\", \"2\", \"200\", \"78\", \"54\", \"132\", \"118\"],\n            \"in_body_suffix_padded\": [\n                \"49\", \"34\", \"32\", \"98\", \"111\", \"114\", \"100\", \"101\", \"114\", \"61\", \"34\", \"48\", \"34\", \"32\", \"47\", \"62\",\n                \"13\", \"10\", \"13\", \"10\", \"60\", \"105\", \"109\", \"103\", \"32\", \"115\", \"114\", \"99\", \"61\", \"34\", \"104\", \"116\",\n                \"116\", \"112\", \"58\", \"47\", \"47\", \"101\", \"109\", \"97\", \"105\", \"108\", \"98\", \"117\", \"108\", \"107\", \"114\", \"101\",\n                \"97\", \"100\", \"114\", \"101\", \"99\", \"101\", \"105\", \"112\", \"116\", \"46\", \"103\", \"97\", \"114\", \"97\", \"110\", \"116\",\n                \"105\", \"46\", \"99\", \"111\", \"109\", \"46\", \"116\", \"114\", \"47\", \"114\", \"101\", \"97\", \"100\", \"114\", \"101\", \"99\",\n                \"101\", \"105\", \"112\", \"116\", \"47\", \"108\", \"105\", \"115\", \"116\", \"101\", \"110\", \"101\", \"114\", \"46\", \"97\", \"115\",\n                \"112\", \"120\", \"63\", \"82\", \"101\", \"102\", \"61\", \"54\", \"101\", \"52\", \"48\", \"57\", \"52\", \"50\", \"97\", \"51\",\n                \"48\", \"54\", \"97\", \"54\", \"56\", \"98\", \"50\", \"48\", \"51\", \"100\", \"101\", \"101\", \"57\", \"57\", \"53\", \"52\",\n                \"48\", \"53\", \"55\", \"99\", \"50\", \"52\", \"54\", \"53\", \"53\", \"49\", \"100\", \"52\", \"54\", \"52\", \"100\", \"56\",\n                \"97\", \"48\", \"98\", \"53\", \"100\", \"98\", \"54\", \"57\", \"55\", \"54\", \"97\", \"97\", \"51\", \"100\", \"102\", \"100\",\n                \"53\", \"57\", \"53\", \"97\", \"50\", \"55\", \"54\", \"34\", \"32\", \"97\", \"108\", \"116\", \"61\", \"34\", \"34\", \"32\",\n                \"119\", \"105\", \"100\", \"116\", \"104\", \"61\", \"34\", \"49\", \"34\", \"32\", \"104\", \"101\", \"105\", \"103\", \"104\", \"116\",\n                \"61\", \"34\", \"49\", \"34\", \"32\", \"98\", \"111\", \"114\", \"100\", \"101\", \"114\", \"61\", \"34\", \"48\", \"34\", \"32\", \"47\",\n                \"62\", \"13\", \"10\", \"60\", \"47\", \"98\", \"111\", \"100\", \"121\", \"62\", \"13\", \"10\", \"60\", \"47\", \"104\", \"116\", \"109\",\n                \"108\", \"62\", \"13\", \"10\", \"128\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"2\", \"149\", \"48\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\"\n            ],\n            \"in_body_suffix_len_padded_bytes\": 256,\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        const expectedIntermediateHashPacked = chunkArray(input.intermediate_hash, 16, 32);\n        const expectedFirst = bytesToPacked(expectedIntermediateHashPacked[0]);\n        const expectedSecond = bytesToPacked(expectedIntermediateHashPacked[1]);\n\n        assert.equal(witness[1], expectedFirst);\n        assert.equal(witness[2], expectedSecond);\n    });\n\n    it(\"Should output the correct packed body hash SHA\", async () => {\n        const input = {\n            \"intermediate_hash\": [\"163\", \"0\", \"85\", \"101\", \"126\", \"105\", \"88\", \"222\", \"225\", \"117\", \"247\", \"171\", \"171\", \"60\", \"248\", \"120\", \"123\", \"118\", \"154\", \"220\", \"154\", \"233\", \"231\", \"77\", \"116\", \"7\", \"2\", \"200\", \"78\", \"54\", \"132\", \"118\"],\n            \"in_body_suffix_padded\": [\n                \"49\", \"34\", \"32\", \"98\", \"111\", \"114\", \"100\", \"101\", \"114\", \"61\", \"34\", \"48\", \"34\", \"32\", \"47\", \"62\",\n                \"13\", \"10\", \"13\", \"10\", \"60\", \"105\", \"109\", \"103\", \"32\", \"115\", \"114\", \"99\", \"61\", \"34\", \"104\", \"116\",\n                \"116\", \"112\", \"58\", \"47\", \"47\", \"101\", \"109\", \"97\", \"105\", \"108\", \"98\", \"117\", \"108\", \"107\", \"114\", \"101\",\n                \"97\", \"100\", \"114\", \"101\", \"99\", \"101\", \"105\", \"112\", \"116\", \"46\", \"103\", \"97\", \"114\", \"97\", \"110\", \"116\",\n                \"105\", \"46\", \"99\", \"111\", \"109\", \"46\", \"116\", \"114\", \"47\", \"114\", \"101\", \"97\", \"100\", \"114\", \"101\", \"99\",\n                \"101\", \"105\", \"112\", \"116\", \"47\", \"108\", \"105\", \"115\", \"116\", \"101\", \"110\", \"101\", \"114\", \"46\", \"97\", \"115\",\n                \"112\", \"120\", \"63\", \"82\", \"101\", \"102\", \"61\", \"54\", \"101\", \"52\", \"48\", \"57\", \"52\", \"50\", \"97\", \"51\",\n                \"48\", \"54\", \"97\", \"54\", \"56\", \"98\", \"50\", \"48\", \"51\", \"100\", \"101\", \"101\", \"57\", \"57\", \"53\", \"52\",\n                \"48\", \"53\", \"55\", \"99\", \"50\", \"52\", \"54\", \"53\", \"53\", \"49\", \"100\", \"52\", \"54\", \"52\", \"100\", \"56\",\n                \"97\", \"48\", \"98\", \"53\", \"100\", \"98\", \"54\", \"57\", \"55\", \"54\", \"97\", \"97\", \"51\", \"100\", \"102\", \"100\",\n                \"53\", \"57\", \"53\", \"97\", \"50\", \"55\", \"54\", \"34\", \"32\", \"97\", \"108\", \"116\", \"61\", \"34\", \"34\", \"32\",\n                \"119\", \"105\", \"100\", \"116\", \"104\", \"61\", \"34\", \"49\", \"34\", \"32\", \"104\", \"101\", \"105\", \"103\", \"104\", \"116\",\n                \"61\", \"34\", \"49\", \"34\", \"32\", \"98\", \"111\", \"114\", \"100\", \"101\", \"114\", \"61\", \"34\", \"48\", \"34\", \"32\", \"47\",\n                \"62\", \"13\", \"10\", \"60\", \"47\", \"98\", \"111\", \"100\", \"121\", \"62\", \"13\", \"10\", \"60\", \"47\", \"104\", \"116\", \"109\",\n                \"108\", \"62\", \"13\", \"10\", \"128\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"2\", \"149\", \"48\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\",\n                \"0\", \"0\", \"0\", \"0\", \"0\"\n            ],\n            \"in_body_suffix_len_padded_bytes\": 256,\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        const expectedBodyHash = base64ToByteArray(\"gmhfwkcqvc0+z9C9jn4s7JtbkCL8Bc6ysyMgln+cHH0=\");\n        const expectedBodyHashPacked = chunkArray(expectedBodyHash, 16, 32);\n        const expectedFirst = bytesToPacked(expectedBodyHashPacked[0]);\n        const expectedSecond = bytesToPacked(expectedBodyHashPacked[1]);\n\n        assert.equal(witness[3], expectedFirst);\n        assert.equal(witness[4], expectedSecond);\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/mocks/test_body_hash_regex_v2.circom",
    "content": "include \"../../regexes/body_hash_regex_v2.circom\";\n\ncomponent main = BodyHashRegexV2(249);"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/mocks/test_body_suffix_hasher.circom",
    "content": "include \"../../body_suffix_hasher.circom\";\n\ncomponent main = BodySuffixHasher(320);"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/mocks/test_from_regex_v2.circom",
    "content": "include \"../../regexes/from_regex_v2.circom\";\n\ncomponent main = FromRegexV2(50);"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/mocks/test_to_regex_v2.circom",
    "content": "include \"../../regexes/to_regex_v2.circom\";\n\ncomponent main = ToRegexV2(50);"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/regexes/body_hash_regex_v2.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Body Hash Regex V2\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_body_hash_regex_v2.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_body_hash_regex_v2\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    describe(\"when canonicalization is simple/simple\", () => {\n        it(\"Should generate witnesses\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\nDKIM-Signature: v=1; a=rsa-sha256;\\tq=dns/txt;\\tc=simple/simple;\\r\\n\\ts=ylavq3ml4jl4lt6dltbgmnoftxftkly; d=gggg.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date;\\tbh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n    \n            assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n        });\n\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\nDKIM-Signature: v=1; a=rsa-sha256;\\tq=dns/txt;\\tc=simple/simple;\\r\\n\\ts=ylavq3ml4jl4lt6dltbgmnoftxftkly; d=gggg.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date;\\tbh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\nDKIM-Signature: v=1;\\r\\n\\ta=rsa-sha256;\\r\\n d=info.garantibbva.com.tr;\\r\\n\\ts=BulkMailSelector1;\\r\\n\\tc=simple/simple;\\r\\n\\tq=dns/txt;\\r\\n i=@info.garantibbva.com.tr;\\r\\n\\tt=1703416861; h=from:subject:to:cc;\\r\\n\\tbh=gmhfwkcqvc0+z9C9jn4s7JtbkCL8Bc6ysyMgln+cHH0=;\\r\\n b=123\")\n            };\n\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\nDKIM-Signature: v=1; a=rsa-sha256;\\tq=dns/txt;\\tc=simple/simple;\\r\\n\\ts=ylavq3ml4jl4lt6dltbgmnoftxftkly; d=gggg.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date;\\tbh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"\\r\\nDKIM-Signature: v=1; a=rsa-sha256;\\tq=dns/txt;\\tc=simple/simple;\\r\\n\\ts=ylavq3ml4jl4lt6dltbgmnoftxftkly; d=gggg.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date;\\tbh=\").length).fill(\"0\")\n                .concat(textToAsciiArray(\"C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=\"))\n                .concat(textToAsciiArray(\"; b=\").fill(\"0\"));\n            const result = witness.slice(2, 249 + 2);\n\n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n\n        it(\"Should fail to match regex (only one half of new line)\", async () => {\n            // Because we only allow 1 D or d\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\nDKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=simple/simple; s=ylavq3ml4jl4lt6dltbgmnoftxftkly; d=gggg.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date;\\r\\tbh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=1\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n    \n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n        });\n        \n        it(\"Should fail to match regex (no space or tab after new line)\", async () => {\n            // Because we only allow 1 D or d\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\nDKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=simple/simple; s=ylavq3ml4jl4lt6dltbgmnoftxftkly; d=gggg.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date;\\r\\nbh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=1\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n    \n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n        });\n    });\n\n    describe(\"when canonicalization is relaxed\", () => {\n        it(\"Should generate witnesses\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n    \n            assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n        });\n    \n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n    \n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"\\r\\ndkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=\").length).fill(\"0\")\n                .concat(textToAsciiArray(\"C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=\"))\n                .concat(textToAsciiArray(\"; b=\").fill(\"0\"));\n            const result = witness.slice(2, 249 + 2);\n    \n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n    \n        it(\"Should fail to match regex\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\n\\rdkim-signature:v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=yzlavq3ml4jl4lt6dltbgmnoftxftkly; d=venmo.com; t=1698260687; h=From:Reply-To:To:Subject:MIME-Version:Content-Type:Message-ID:Date; bh=C9JrSSzQ+HxrQ6y65Bb/5BE511a00wfrddEQySR9PLI=; b=\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n    \n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n        });\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/regexes/from_regex_v2.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"From Regex V2\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_from_regex_v2.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_from_regex_v2\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"from:PayLah! Alerts <paylah.alert@dbs.com>\\r\\nto:tes\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    describe(\"when canonicalization is relaxed\", () => {\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"from:PayLah! Alerts <paylah.alert@dbs.com>\\r\\nto:tes\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"from:PayLah! Alerts <paylah.alert@dbs.com>\\r\\nto:tes\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"from:PayLah! Alerts <\").length).fill(\"0\")\n                .concat(textToAsciiArray(\"paylah.alert@dbs.com\"))\n                .concat(Array(textToAsciiArray(\">\\r\\nto:tes\").length).fill(\"0\"));\n            const result = witness.slice(2, input.msg.length + 2);\n\n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n    });\n\n    describe(\"when canonicalization is simple\", () => {\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"From: PayLah! Alerts <paylah.alert@dbs.com>\\r\\nto:te\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"From: PayLah! Alerts <paylah.alert@dbs.com>\\r\\nto:te\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"From: PayLah! Alerts <\").length).fill(\"0\")\n                .concat(textToAsciiArray(\"paylah.alert@dbs.com\"))\n                .concat(Array(textToAsciiArray(\">\\r\\nto:te\").length).fill(\"0\"));\n            const result = witness.slice(2, input.msg.length + 2);\n\n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n    });\n\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"from:PayLah! Alerts >paylah.alert@dbs.com>\\r\\nto:tes\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/common-v2/test/regexes/to_regex_v2.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"To regex V2\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_to_regex_v2.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_to_regex_v2\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"to:0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    describe(\"when canonicalization is relaxed\", () => {\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"to:0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-re\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"to:0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-re\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"to:\").length).fill(\"0\")\n                .concat(textToAsciiArray(\"0xanonkumar2023@gmail.com\"))\n                .concat(Array(textToAsciiArray(\"\\r\\nreply-to:Venmo No-re\").length).fill(\"0\"));\n            const result = witness.slice(2, input.msg.length + 2);\n\n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n    });\n\n    describe(\"when canonicalization is simple\", () => {\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"To: 0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-r\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"To: 0xanonkumar2023@gmail.com\\r\\nreply-to:Venmo No-r\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"To: \").length).fill(\"0\")\n                .concat(textToAsciiArray(\"0xanonkumar2023@gmail.com\"))\n                .concat(Array(textToAsciiArray(\"\\r\\nreply-to:Venmo No-r\").length).fill(\"0\"));\n            const result = witness.slice(2, input.msg.length + 2);\n\n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n    });\n\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"to:0xanonkumarA2023gmail.com\\r\\nreply-to:Venmo No-re\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/common-v2/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\", \"test/*/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyABKAJcQYUPNgIYIAEoAlRB0f4ANgIEDAQLDAILIAEoAgxBwABxRQRAIAEgASgCJCABLwESIAEoAixBASABKAIMdEEBa3FqQQJ0aigBADYBEAwBCwsgASgCDEEgcQRAIAEoAlRBv/4ANgIEDAILIAEoAlxB6Q42AhggASgCVEHR/gA2AgQMAQsgASgCUCABKAJMSQR/IAEoAkggASgCQEkFQQALQQFxDQELCyABIAEoAihBA3Y2AgggASABKAJQIAEoAghrNgJQIAEgASgCKCABKAIIQQN0azYCKCABIAEoAixBASABKAIodEEBa3E2AiwgASgCXCABKAJQNgIAIAEoAlwgASgCSDYCDCABKAJcAn8gASgCUCABKAJMSQRAIAEoAkwgASgCUGtBBWoMAQtBBSABKAJQIAEoAkxraws2AgQgASgCXAJ/IAEoAkggASgCQEkEQCABKAJAIAEoAkhrQYECagwBC0GBAiABKAJIIAEoAkBraws2AhAgASgCVCABKAIsNgI8IAEoAlQgASgCKDYCQCAAIAAoAlgoAgw2AkggACAAKAJYKAIQNgJAIAAgACgCWCgCADYCTCAAIAAoAlgoAgQ2AkQgACAAKAJQKAI8NgI8IAAgACgCUCgCQDYCOCAAKAJQKAIEQb/+AEYEQCAAKAJQQX82Asg3CwwNCyAAKAJQQQA2Asg3A0ACQCAAIAAoAlAoAlAgACgCPEEBIAAoAlAoAlh0QQFrcUECdGooAQA2ASAgAC0AISAAKAI4TQ0AIAAoAkRFDQ0gACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLAkAgAC0AIEUNACAALQAgQfABcQ0AIAAgACgBIDYBGANAAkAgACAAKAJQKAJQIAAvARogACgCPEEBIAAtABkgAC0AGGp0QQFrcSAALQAZdmpBAnRqKAEANgEgIAAoAjggAC0AGSAALQAhak8NACAAKAJERQ0OIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjwgAC0AGXY2AjwgACAAKAI4IAAtABlrNgI4IAAoAlAiASAALQAZIAEoAsg3ajYCyDcLIAAgACgCPCAALQAhdjYCPCAAIAAoAjggAC0AIWs2AjggACgCUCIBIAAtACEgASgCyDdqNgLINyAAKAJQIAAvASI2AkQgAC0AIEUEQCAAKAJQQc3+ADYCBAwNCyAALQAgQSBxBEAgACgCUEF/NgLINyAAKAJQQb/+ADYCBAwNCyAALQAgQcAAcQRAIAAoAlhB6Q42AhggACgCUEHR/gA2AgQMDQsgACgCUCAALQAgQQ9xNgJMIAAoAlBByf4ANgIECyAAKAJQKAJMBEADQCAAKAI4IAAoAlAoAkxJBEAgACgCREUNDSAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCUCIBIAEoAkQgACgCPEEBIAAoAlAoAkx0QQFrcWo2AkQgACAAKAI8IAAoAlAoAkx2NgI8IAAgACgCOCAAKAJQKAJMazYCOCAAKAJQIgEgACgCUCgCTCABKALIN2o2Asg3CyAAKAJQIAAoAlAoAkQ2Asw3IAAoAlBByv4ANgIECwNAAkAgACAAKAJQKAJUIAAoAjxBASAAKAJQKAJcdEEBa3FBAnRqKAEANgEgIAAtACEgACgCOE0NACAAKAJERQ0LIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAALQAgQfABcUUEQCAAIAAoASA2ARgDQAJAIAAgACgCUCgCVCAALwEaIAAoAjxBASAALQAZIAAtABhqdEEBa3EgAC0AGXZqQQJ0aigBADYBICAAKAI4IAAtABkgAC0AIWpPDQAgACgCREUNDCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACAAKAI8IAAtABl2NgI8IAAgACgCOCAALQAZazYCOCAAKAJQIgEgAC0AGSABKALIN2o2Asg3CyAAIAAoAjwgAC0AIXY2AjwgACAAKAI4IAAtACFrNgI4IAAoAlAiASAALQAhIAEoAsg3ajYCyDcgAC0AIEHAAHEEQCAAKAJYQYUPNgIYIAAoAlBB0f4ANgIEDAsLIAAoAlAgAC8BIjYCSCAAKAJQIAAtACBBD3E2AkwgACgCUEHL/gA2AgQLIAAoAlAoAkwEQANAIAAoAjggACgCUCgCTEkEQCAAKAJERQ0LIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAKAJQIgEgASgCSCAAKAI8QQEgACgCUCgCTHRBAWtxajYCSCAAIAAoAjwgACgCUCgCTHY2AjwgACAAKAI4IAAoAlAoAkxrNgI4IAAoAlAiASAAKAJQKAJMIAEoAsg3ajYCyDcLIAAoAlBBzP4ANgIECyAAKAJARQ0HIAAgACgCMCAAKAJAazYCLAJAIAAoAlAoAkggACgCLEsEQCAAIAAoAlAoAkggACgCLGs2AiwgACgCLCAAKAJQKAIwSwRAIAAoAlAoAsQ3BEAgACgCWEHdDDYCGCAAKAJQQdH+ADYCBAwMCwsCQCAAKAIsIAAoAlAoAjRLBEAgACAAKAIsIAAoAlAoAjRrNgIsIAAgACgCUCgCOCAAKAJQKAIsIAAoAixrajYCKAwBCyAAIAAoAlAoAjggACgCUCgCNCAAKAIsa2o2AigLIAAoAiwgACgCUCgCREsEQCAAIAAoAlAoAkQ2AiwLDAELIAAgACgCSCAAKAJQKAJIazYCKCAAIAAoAlAoAkQ2AiwLIAAoAiwgACgCQEsEQCAAIAAoAkA2AiwLIAAgACgCQCAAKAIsazYCQCAAKAJQIgEgASgCRCAAKAIsazYCRANAIAAgACgCKCIBQQFqNgIoIAEtAAAhASAAIAAoAkgiAkEBajYCSCACIAE6AAAgACAAKAIsQQFrIgE2AiwgAQ0ACyAAKAJQKAJERQRAIAAoAlBByP4ANgIECwwICyAAKAJARQ0GIAAoAlAoAkQhASAAIAAoAkgiAkEBajYCSCACIAE6AAAgACAAKAJAQQFrNgJAIAAoAlBByP4ANgIEDAcLIAAoAlAoAgwEQANAIAAoAjhBIEkEQCAAKAJERQ0IIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjAgACgCQGs2AjAgACgCWCIBIAAoAjAgASgCFGo2AhQgACgCUCIBIAAoAjAgASgCIGo2AiACQCAAKAJQKAIMQQRxRQ0AIAAoAjBFDQACfyAAKAJQKAIUBEAgACgCUCgCHCAAKAJIIAAoAjBrIAAoAjAQGgwBCyAAKAJQKAIcIAAoAkggACgCMGsgACgCMBA9CyEBIAAoAlAgATYCHCAAKAJYIAE2AjALIAAgACgCQDYCMAJAIAAoAlAoAgxBBHFFDQACfyAAKAJQKAIUBEAgACgCPAwBCyAAKAI8QQh2QYD+A3EgACgCPEEYdmogACgCPEGA/gNxQQh0aiAAKAI8Qf8BcUEYdGoLIAAoAlAoAhxGDQAgACgCWEHIDDYCGCAAKAJQQdH+ADYCBAwICyAAQQA2AjwgAEEANgI4CyAAKAJQQc/+ADYCBAsCQCAAKAJQKAIMRQ0AIAAoAlAoAhRFDQADQCAAKAI4QSBJBEAgACgCREUNByAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCPCAAKAJQKAIgRwRAIAAoAlhBsQw2AhggACgCUEHR/gA2AgQMBwsgAEEANgI8IABBADYCOAsgACgCUEHQ/gA2AgQLIABBATYCEAwDCyAAQX02AhAMAgsgAEF8NgJcDAMLIABBfjYCXAwCCwsgACgCWCAAKAJINgIMIAAoAlggACgCQDYCECAAKAJYIAAoAkw2AgAgACgCWCAAKAJENgIEIAAoAlAgACgCPDYCPCAAKAJQIAAoAjg2AkACQAJAIAAoAlAoAiwNACAAKAIwIAAoAlgoAhBGDQEgACgCUCgCBEHR/gBPDQEgACgCUCgCBEHO/gBJDQAgACgCVEEERg0BCwJ/IAAoAlghAiAAKAJYKAIMIQMgACgCMCAAKAJYKAIQayEEIwBBIGsiASQAIAEgAjYCGCABIAM2AhQgASAENgIQIAEgASgCGCgCHDYCDAJAIAEoAgwoAjhFBEAgASgCGCgCKEEBIAEoAgwoAih0QQEgASgCGCgCIBEBACECIAEoAgwgAjYCOCABKAIMKAI4RQRAIAFBATYCHAwCCwsgASgCDCgCLEUEQCABKAIMQQEgASgCDCgCKHQ2AiwgASgCDEEANgI0IAEoAgxBADYCMAsCQCABKAIQIAEoAgwoAixPBEAgASgCDCgCOCABKAIUIAEoAgwoAixrIAEoAgwoAiwQGRogASgCDEEANgI0IAEoAgwgASgCDCgCLDYCMAwBCyABIAEoAgwoAiwgASgCDCgCNGs2AgggASgCCCABKAIQSwRAIAEgASgCEDYCCAsgASgCDCgCOCABKAIMKAI0aiABKAIUIAEoAhBrIAEoAggQGRogASABKAIQIAEoAghrNgIQAkAgASgCEARAIAEoAgwoAjggASgCFCABKAIQayABKAIQEBkaIAEoAgwgASgCEDYCNCABKAIMIAEoAgwoAiw2AjAMAQsgASgCDCICIAEoAgggAigCNGo2AjQgASgCDCgCNCABKAIMKAIsRgRAIAEoAgxBADYCNAsgASgCDCgCMCABKAIMKAIsSQRAIAEoAgwiAiABKAIIIAIoAjBqNgIwCwsLIAFBADYCHAsgASgCHCECIAFBIGokACACCwRAIAAoAlBB0v4ANgIEIABBfDYCXAwCCwsgACAAKAI0IAAoAlgoAgRrNgI0IAAgACgCMCAAKAJYKAIQazYCMCAAKAJYIgEgACgCNCABKAIIajYCCCAAKAJYIgEgACgCMCABKAIUajYCFCAAKAJQIgEgACgCMCABKAIgajYCIAJAIAAoAlAoAgxBBHFFDQAgACgCMEUNAAJ/IAAoAlAoAhQEQCAAKAJQKAIcIAAoAlgoAgwgACgCMGsgACgCMBAaDAELIAAoAlAoAhwgACgCWCgCDCAAKAIwayAAKAIwED0LIQEgACgCUCABNgIcIAAoAlggATYCMAsgACgCWCAAKAJQKAJAQcAAQQAgACgCUCgCCBtqQYABQQAgACgCUCgCBEG//gBGG2pBgAJBACAAKAJQKAIEQcf+AEcEfyAAKAJQKAIEQcL+AEYFQQELQQFxG2o2AiwCQAJAIAAoAjRFBEAgACgCMEUNAQsgACgCVEEERw0BCyAAKAIQDQAgAEF7NgIQCyAAIAAoAhA2AlwLIAAoAlwhASAAQeAAaiQAIAUgATYCCAsgBSgCECIAIAApAwAgBSgCDDUCIH03AwACQAJAAkACQAJAIAUoAghBBWoOBwIDAwMDAAEDCyAFQQA2AhwMAwsgBUEBNgIcDAILIAUoAgwoAhRFBEAgBUEDNgIcDAILCyAFKAIMKAIAQQ0gBSgCCBAUIAVBAjYCHAsgBSgCHCEAIAVBIGokACAACyQBAX8jAEEQayIBIAA2AgwgASABKAIMNgIIIAEoAghBAToADAuXAQEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjcDCCADIAMoAhg2AgQCQAJAIAMpAwhC/////w9YBEAgAygCBCgCFEUNAQsgAygCBCgCAEESQQAQFCADQQA6AB8MAQsgAygCBCADKQMIPgIUIAMoAgQgAygCFDYCECADQQE6AB8LIAMtAB9BAXEhACADQSBqJAAgAAukAgECfyMAQRBrIgEkACABIAA2AgggASABKAIINgIEAkAgASgCBC0ABEEBcQRAIAEgASgCBEEQahC4ATYCAAwBCyABKAIEQRBqIQIjAEEQayIAJAAgACACNgIIAkAgACgCCBBKBEAgAEF+NgIMDAELIAAgACgCCCgCHDYCBCAAKAIEKAI4BEAgACgCCCgCKCAAKAIEKAI4IAAoAggoAiQRBAALIAAoAggoAiggACgCCCgCHCAAKAIIKAIkEQQAIAAoAghBADYCHCAAQQA2AgwLIAAoAgwhAiAAQRBqJAAgASACNgIACwJAIAEoAgAEQCABKAIEKAIAQQ0gASgCABAUIAFBADoADwwBCyABQQE6AA8LIAEtAA9BAXEhACABQRBqJAAgAAuyGAEFfyMAQRBrIgQkACAEIAA2AgggBCAEKAIINgIEIAQoAgRBADYCFCAEKAIEQQA2AhAgBCgCBEEANgIgIAQoAgRBADYCHAJAIAQoAgQtAARBAXEEQCAEKAIEQRBqIQEgBCgCBCgCCCECIwBBMGsiACQAIAAgATYCKCAAIAI2AiQgAEEINgIgIABBcTYCHCAAQQk2AhggAEEANgIUIABBwBI2AhAgAEE4NgIMIABBATYCBAJAAkACQCAAKAIQRQ0AIAAoAhAsAABB+O4ALAAARw0AIAAoAgxBOEYNAQsgAEF6NgIsDAELIAAoAihFBEAgAEF+NgIsDAELIAAoAihBADYCGCAAKAIoKAIgRQRAIAAoAihBBTYCICAAKAIoQQA2AigLIAAoAigoAiRFBEAgACgCKEEGNgIkCyAAKAIkQX9GBEAgAEEGNgIkCwJAIAAoAhxBAEgEQCAAQQA2AgQgAEEAIAAoAhxrNgIcDAELIAAoAhxBD0oEQCAAQQI2AgQgACAAKAIcQRBrNgIcCwsCQAJAIAAoAhhBAUgNACAAKAIYQQlKDQAgACgCIEEIRw0AIAAoAhxBCEgNACAAKAIcQQ9KDQAgACgCJEEASA0AIAAoAiRBCUoNACAAKAIUQQBIDQAgACgCFEEESg0AIAAoAhxBCEcNASAAKAIEQQFGDQELIABBfjYCLAwBCyAAKAIcQQhGBEAgAEEJNgIcCyAAIAAoAigoAihBAUHELSAAKAIoKAIgEQEANgIIIAAoAghFBEAgAEF8NgIsDAELIAAoAiggACgCCDYCHCAAKAIIIAAoAig2AgAgACgCCEEqNgIEIAAoAgggACgCBDYCGCAAKAIIQQA2AhwgACgCCCAAKAIcNgIwIAAoAghBASAAKAIIKAIwdDYCLCAAKAIIIAAoAggoAixBAWs2AjQgACgCCCAAKAIYQQdqNgJQIAAoAghBASAAKAIIKAJQdDYCTCAAKAIIIAAoAggoAkxBAWs2AlQgACgCCCAAKAIIKAJQQQJqQQNuNgJYIAAoAigoAiggACgCCCgCLEECIAAoAigoAiARAQAhASAAKAIIIAE2AjggACgCKCgCKCAAKAIIKAIsQQIgACgCKCgCIBEBACEBIAAoAgggATYCQCAAKAIoKAIoIAAoAggoAkxBAiAAKAIoKAIgEQEAIQEgACgCCCABNgJEIAAoAghBADYCwC0gACgCCEEBIAAoAhhBBmp0NgKcLSAAIAAoAigoAiggACgCCCgCnC1BBCAAKAIoKAIgEQEANgIAIAAoAgggACgCADYCCCAAKAIIIAAoAggoApwtQQJ0NgIMAkACQCAAKAIIKAI4RQ0AIAAoAggoAkBFDQAgACgCCCgCREUNACAAKAIIKAIIDQELIAAoAghBmgU2AgQgACgCKEG42QAoAgA2AhggACgCKBC4ARogAEF8NgIsDAELIAAoAgggACgCACAAKAIIKAKcLUEBdkEBdGo2AqQtIAAoAgggACgCCCgCCCAAKAIIKAKcLUEDbGo2ApgtIAAoAgggACgCJDYChAEgACgCCCAAKAIUNgKIASAAKAIIIAAoAiA6ACQgACgCKCEBIwBBEGsiAyQAIAMgATYCDCADKAIMIQIjAEEQayIBJAAgASACNgIIAkAgASgCCBB4BEAgAUF+NgIMDAELIAEoAghBADYCFCABKAIIQQA2AgggASgCCEEANgIYIAEoAghBAjYCLCABIAEoAggoAhw2AgQgASgCBEEANgIUIAEoAgQgASgCBCgCCDYCECABKAIEKAIYQQBIBEAgASgCBEEAIAEoAgQoAhhrNgIYCyABKAIEIAEoAgQoAhhBAkYEf0E5BUEqQfEAIAEoAgQoAhgbCzYCBAJ/IAEoAgQoAhhBAkYEQEEAQQBBABAaDAELQQBBAEEAED0LIQIgASgCCCACNgIwIAEoAgRBADYCKCABKAIEIQUjAEEQayICJAAgAiAFNgIMIAIoAgwgAigCDEGUAWo2ApgWIAIoAgxB0N8ANgKgFiACKAIMIAIoAgxBiBNqNgKkFiACKAIMQeTfADYCrBYgAigCDCACKAIMQfwUajYCsBYgAigCDEH43wA2ArgWIAIoAgxBADsBuC0gAigCDEEANgK8LSACKAIMEL4BIAJBEGokACABQQA2AgwLIAEoAgwhAiABQRBqJAAgAyACNgIIIAMoAghFBEAgAygCDCgCHCECIwBBEGsiASQAIAEgAjYCDCABKAIMIAEoAgwoAixBAXQ2AjwgASgCDCgCRCABKAIMKAJMQQFrQQF0akEAOwEAIAEoAgwoAkRBACABKAIMKAJMQQFrQQF0EDMgASgCDCABKAIMKAKEAUEMbEGA7wBqLwECNgKAASABKAIMIAEoAgwoAoQBQQxsQYDvAGovAQA2AowBIAEoAgwgASgCDCgChAFBDGxBgO8Aai8BBDYCkAEgASgCDCABKAIMKAKEAUEMbEGA7wBqLwEGNgJ8IAEoAgxBADYCbCABKAIMQQA2AlwgASgCDEEANgJ0IAEoAgxBADYCtC0gASgCDEECNgJ4IAEoAgxBAjYCYCABKAIMQQA2AmggASgCDEEANgJIIAFBEGokAAsgAygCCCEBIANBEGokACAAIAE2AiwLIAAoAiwhASAAQTBqJAAgBCABNgIADAELIAQoAgRBEGohASMAQSBrIgAkACAAIAE2AhggAEFxNgIUIABBwBI2AhAgAEE4NgIMAkACQAJAIAAoAhBFDQAgACgCECwAAEHAEiwAAEcNACAAKAIMQThGDQELIABBejYCHAwBCyAAKAIYRQRAIABBfjYCHAwBCyAAKAIYQQA2AhggACgCGCgCIEUEQCAAKAIYQQU2AiAgACgCGEEANgIoCyAAKAIYKAIkRQRAIAAoAhhBBjYCJAsgACAAKAIYKAIoQQFB0DcgACgCGCgCIBEBADYCBCAAKAIERQRAIABBfDYCHAwBCyAAKAIYIAAoAgQ2AhwgACgCBCAAKAIYNgIAIAAoAgRBADYCOCAAKAIEQbT+ADYCBCAAKAIYIQIgACgCFCEDIwBBIGsiASQAIAEgAjYCGCABIAM2AhQCQCABKAIYEEoEQCABQX42AhwMAQsgASABKAIYKAIcNgIMAkAgASgCFEEASARAIAFBADYCECABQQAgASgCFGs2AhQMAQsgASABKAIUQQR1QQVqNgIQIAEoAhRBMEgEQCABIAEoAhRBD3E2AhQLCwJAIAEoAhRFDQAgASgCFEEITgRAIAEoAhRBD0wNAQsgAUF+NgIcDAELAkAgASgCDCgCOEUNACABKAIMKAIoIAEoAhRGDQAgASgCGCgCKCABKAIMKAI4IAEoAhgoAiQRBAAgASgCDEEANgI4CyABKAIMIAEoAhA2AgwgASgCDCABKAIUNgIoIAEoAhghAiMAQRBrIgMkACADIAI2AggCQCADKAIIEEoEQCADQX42AgwMAQsgAyADKAIIKAIcNgIEIAMoAgRBADYCLCADKAIEQQA2AjAgAygCBEEANgI0IAMoAgghBSMAQRBrIgIkACACIAU2AggCQCACKAIIEEoEQCACQX42AgwMAQsgAiACKAIIKAIcNgIEIAIoAgRBADYCICACKAIIQQA2AhQgAigCCEEANgIIIAIoAghBADYCGCACKAIEKAIMBEAgAigCCCACKAIEKAIMQQFxNgIwCyACKAIEQbT+ADYCBCACKAIEQQA2AgggAigCBEEANgIQIAIoAgRBgIACNgIYIAIoAgRBADYCJCACKAIEQQA2AjwgAigCBEEANgJAIAIoAgQgAigCBEG0CmoiBTYCcCACKAIEIAU2AlQgAigCBCAFNgJQIAIoAgRBATYCxDcgAigCBEF/NgLINyACQQA2AgwLIAIoAgwhBSACQRBqJAAgAyAFNgIMCyADKAIMIQIgA0EQaiQAIAEgAjYCHAsgASgCHCECIAFBIGokACAAIAI2AgggACgCCARAIAAoAhgoAiggACgCBCAAKAIYKAIkEQQAIAAoAhhBADYCHAsgACAAKAIINgIcCyAAKAIcIQEgAEEgaiQAIAQgATYCAAsCQCAEKAIABEAgBCgCBCgCAEENIAQoAgAQFCAEQQA6AA8MAQsgBEEBOgAPCyAELQAPQQFxIQAgBEEQaiQAIAALbwEBfyMAQRBrIgEgADYCCCABIAEoAgg2AgQCQCABKAIELQAEQQFxRQRAIAFBADYCDAwBCyABKAIEKAIIQQNIBEAgAUECNgIMDAELIAEoAgQoAghBB0oEQCABQQE2AgwMAQsgAUEANgIMCyABKAIMCywBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDDYCCCABKAIIEBUgAUEQaiQACzwBAX8jAEEQayIDJAAgAyAAOwEOIAMgATYCCCADIAI2AgRBASADKAIIIAMoAgQQtAEhACADQRBqJAAgAAvBEAECfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkADQAJAIAIoAhgoAnRBhgJJBEAgAigCGBBcAkAgAigCGCgCdEGGAk8NACACKAIUDQAgAkEANgIcDAQLIAIoAhgoAnRFDQELIAJBADYCECACKAIYKAJ0QQNPBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsgAigCGCACKAIYKAJgNgJ4IAIoAhggAigCGCgCcDYCZCACKAIYQQI2AmACQCACKAIQRQ0AIAIoAhgoAnggAigCGCgCgAFPDQAgAigCGCgCLEGGAmsgAigCGCgCbCACKAIQa0kNACACKAIYIAIoAhAQtgEhACACKAIYIAA2AmACQCACKAIYKAJgQQVLDQAgAigCGCgCiAFBAUcEQCACKAIYKAJgQQNHDQEgAigCGCgCbCACKAIYKAJwa0GAIE0NAQsgAigCGEECNgJgCwsCQAJAIAIoAhgoAnhBA0kNACACKAIYKAJgIAIoAhgoAnhLDQAgAiACKAIYIgAoAmwgACgCdGpBA2s2AgggAiACKAIYKAJ4QQNrOgAHIAIgAigCGCIAKAJsIAAoAmRBf3NqOwEEIAIoAhgiACgCpC0gACgCoC1BAXRqIAIvAQQ7AQAgAi0AByEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACIAIvAQRBAWs7AQQgAigCGCACLQAHQdDdAGotAABBAnRqQZgJaiIAIAAvAQBBAWo7AQAgAigCGEGIE2oCfyACLwEEQYACSQRAIAIvAQQtANBZDAELIAIvAQRBB3ZBgAJqLQDQWQtBAnRqIgAgAC8BAEEBajsBACACIAIoAhgoAqAtIAIoAhgoApwtQQFrRjYCDCACKAIYIgAgACgCdCACKAIYKAJ4QQFrazYCdCACKAIYIgAgACgCeEECazYCeANAIAIoAhgiASgCbEEBaiEAIAEgADYCbCAAIAIoAghNBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsgAigCGCIBKAJ4QQFrIQAgASAANgJ4IAANAAsgAigCGEEANgJoIAIoAhhBAjYCYCACKAIYIgAgACgCbEEBajYCbCACKAIMBEAgAigCGAJ/IAIoAhgoAlxBAE4EQCACKAIYKAI4IAIoAhgoAlxqDAELQQALIAIoAhgoAmwgAigCGCgCXGtBABAoIAIoAhggAigCGCgCbDYCXCACKAIYKAIAEBwgAigCGCgCACgCEEUEQCACQQA2AhwMBgsLDAELAkAgAigCGCgCaARAIAIgAigCGCIAKAI4IAAoAmxqQQFrLQAAOgADIAIoAhgiACgCpC0gACgCoC1BAXRqQQA7AQAgAi0AAyEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACKAIYIAItAANBAnRqIgAgAC8BlAFBAWo7AZQBIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAgwEQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EAECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHAsgAigCGCIAIAAoAmxBAWo2AmwgAigCGCIAIAAoAnRBAWs2AnQgAigCGCgCACgCEEUEQCACQQA2AhwMBgsMAQsgAigCGEEBNgJoIAIoAhgiACAAKAJsQQFqNgJsIAIoAhgiACAAKAJ0QQFrNgJ0CwsMAQsLIAIoAhgoAmgEQCACIAIoAhgiACgCOCAAKAJsakEBay0AADoAAiACKAIYIgAoAqQtIAAoAqAtQQF0akEAOwEAIAItAAIhASACKAIYIgAoApgtIQMgACAAKAKgLSIAQQFqNgKgLSAAIANqIAE6AAAgAigCGCACLQACQQJ0aiIAIAAvAZQBQQFqOwGUASACIAIoAhgoAqAtIAIoAhgoApwtQQFrRjYCDCACKAIYQQA2AmgLIAIoAhgCfyACKAIYKAJsQQJJBEAgAigCGCgCbAwBC0ECCzYCtC0gAigCFEEERgRAIAIoAhgCfyACKAIYKAJcQQBOBEAgAigCGCgCOCACKAIYKAJcagwBC0EACyACKAIYKAJsIAIoAhgoAlxrQQEQKCACKAIYIAIoAhgoAmw2AlwgAigCGCgCABAcIAIoAhgoAgAoAhBFBEAgAkECNgIcDAILIAJBAzYCHAwBCyACKAIYKAKgLQRAIAIoAhgCfyACKAIYKAJcQQBOBEAgAigCGCgCOCACKAIYKAJcagwBC0EACyACKAIYKAJsIAIoAhgoAlxrQQAQKCACKAIYIAIoAhgoAmw2AlwgAigCGCgCABAcIAIoAhgoAgAoAhBFBEAgAkEANgIcDAILCyACQQE2AhwLIAIoAhwhACACQSBqJAAgAAuVDQECfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkADQAJAIAIoAhgoAnRBhgJJBEAgAigCGBBcAkAgAigCGCgCdEGGAk8NACACKAIUDQAgAkEANgIcDAQLIAIoAhgoAnRFDQELIAJBADYCECACKAIYKAJ0QQNPBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsCQCACKAIQRQ0AIAIoAhgoAixBhgJrIAIoAhgoAmwgAigCEGtJDQAgAigCGCACKAIQELYBIQAgAigCGCAANgJgCwJAIAIoAhgoAmBBA08EQCACIAIoAhgoAmBBA2s6AAsgAiACKAIYIgAoAmwgACgCcGs7AQggAigCGCIAKAKkLSAAKAKgLUEBdGogAi8BCDsBACACLQALIQEgAigCGCIAKAKYLSEDIAAgACgCoC0iAEEBajYCoC0gACADaiABOgAAIAIgAi8BCEEBazsBCCACKAIYIAItAAtB0N0Aai0AAEECdGpBmAlqIgAgAC8BAEEBajsBACACKAIYQYgTagJ/IAIvAQhBgAJJBEAgAi8BCC0A0FkMAQsgAi8BCEEHdkGAAmotANBZC0ECdGoiACAALwEAQQFqOwEAIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAhgiACAAKAJ0IAIoAhgoAmBrNgJ0AkACQCACKAIYKAJgIAIoAhgoAoABSw0AIAIoAhgoAnRBA0kNACACKAIYIgAgACgCYEEBazYCYANAIAIoAhgiACAAKAJsQQFqNgJsIAIoAhggAigCGCgCVCACKAIYKAI4IAIoAhgoAmxBAmpqLQAAIAIoAhgoAkggAigCGCgCWHRzcTYCSCACKAIYKAJAIAIoAhgoAmwgAigCGCgCNHFBAXRqIAIoAhgoAkQgAigCGCgCSEEBdGovAQAiADsBACACIABB//8DcTYCECACKAIYKAJEIAIoAhgoAkhBAXRqIAIoAhgoAmw7AQAgAigCGCIBKAJgQQFrIQAgASAANgJgIAANAAsgAigCGCIAIAAoAmxBAWo2AmwMAQsgAigCGCIAIAIoAhgoAmAgACgCbGo2AmwgAigCGEEANgJgIAIoAhggAigCGCgCOCACKAIYKAJsai0AADYCSCACKAIYIAIoAhgoAlQgAigCGCgCOCACKAIYKAJsQQFqai0AACACKAIYKAJIIAIoAhgoAlh0c3E2AkgLDAELIAIgAigCGCIAKAI4IAAoAmxqLQAAOgAHIAIoAhgiACgCpC0gACgCoC1BAXRqQQA7AQAgAi0AByEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACKAIYIAItAAdBAnRqIgAgAC8BlAFBAWo7AZQBIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAhgiACAAKAJ0QQFrNgJ0IAIoAhgiACAAKAJsQQFqNgJsCyACKAIMBEAgAigCGAJ/IAIoAhgoAlxBAE4EQCACKAIYKAI4IAIoAhgoAlxqDAELQQALIAIoAhgoAmwgAigCGCgCXGtBABAoIAIoAhggAigCGCgCbDYCXCACKAIYKAIAEBwgAigCGCgCACgCEEUEQCACQQA2AhwMBAsLDAELCyACKAIYAn8gAigCGCgCbEECSQRAIAIoAhgoAmwMAQtBAgs2ArQtIAIoAhRBBEYEQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EBECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHCACKAIYKAIAKAIQRQRAIAJBAjYCHAwCCyACQQM2AhwMAQsgAigCGCgCoC0EQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EAECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHCACKAIYKAIAKAIQRQRAIAJBADYCHAwCCwsgAkEBNgIcCyACKAIcIQAgAkEgaiQAIAALBwAgAC8BMAspAQF/IwBBEGsiAiQAIAIgADYCDCACIAE2AgggAigCCBAVIAJBEGokAAs6AQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgggAygCBGwQGCEAIANBEGokACAAC84FAQF/IwBB0ABrIgUkACAFIAA2AkQgBSABNgJAIAUgAjYCPCAFIAM3AzAgBSAENgIsIAUgBSgCQDYCKAJAAkACQAJAAkACQAJAAkACQCAFKAIsDg8AAQIDBQYHBwcHBwcHBwQHCwJ/IAUoAkQhASAFKAIoIQIjAEHgAGsiACQAIAAgATYCWCAAIAI2AlQgACAAKAJYIABByABqQgwQKyIDNwMIAkAgA0IAUwRAIAAoAlQgACgCWBAXIABBfzYCXAwBCyAAKQMIQgxSBEAgACgCVEERQQAQFCAAQX82AlwMAQsgACgCVCAAQcgAaiAAQcgAakIMQQAQfCAAKAJYIABBEGoQOUEASARAIABBADYCXAwBCyAAKAI4IABBBmogAEEEahCNAQJAIAAtAFMgACgCPEEYdkYNACAALQBTIAAvAQZBCHZGDQAgACgCVEEbQQAQFCAAQX82AlwMAQsgAEEANgJcCyAAKAJcIQEgAEHgAGokACABQQBICwRAIAVCfzcDSAwICyAFQgA3A0gMBwsgBSAFKAJEIAUoAjwgBSkDMBArIgM3AyAgA0IAUwRAIAUoAiggBSgCRBAXIAVCfzcDSAwHCyAFKAJAIAUoAjwgBSgCPCAFKQMgQQAQfCAFIAUpAyA3A0gMBgsgBUIANwNIDAULIAUgBSgCPDYCHCAFKAIcQQA7ATIgBSgCHCIAIAApAwBCgAGENwMAIAUoAhwpAwBCCINCAFIEQCAFKAIcIgAgACkDIEIMfTcDIAsgBUIANwNIDAQLIAVBfzYCFCAFQQU2AhAgBUEENgIMIAVBAzYCCCAFQQI2AgQgBUEBNgIAIAVBACAFEDQ3A0gMAwsgBSAFKAIoIAUoAjwgBSkDMBBDNwNIDAILIAUoAigQvwEgBUIANwNIDAELIAUoAihBEkEAEBQgBUJ/NwNICyAFKQNIIQMgBUHQAGokACADC+4CAQF/IwBBIGsiBSQAIAUgADYCGCAFIAE2AhQgBSACOwESIAUgAzYCDCAFIAQ2AggCQAJAAkAgBSgCCEUNACAFKAIURQ0AIAUvARJBAUYNAQsgBSgCGEEIakESQQAQFCAFQQA2AhwMAQsgBSgCDEEBcQRAIAUoAhhBCGpBGEEAEBQgBUEANgIcDAELIAVBGBAYIgA2AgQgAEUEQCAFKAIYQQhqQQ5BABAUIAVBADYCHAwBCyMAQRBrIgAgBSgCBDYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCAFKAIEQfis0ZEBNgIMIAUoAgRBic+VmgI2AhAgBSgCBEGQ8dmiAzYCFCAFKAIEQQAgBSgCCCAFKAIIEC6tQQEQfCAFIAUoAhggBSgCFEEDIAUoAgQQYSIANgIAIABFBEAgBSgCBBC/ASAFQQA2AhwMAQsgBSAFKAIANgIcCyAFKAIcIQAgBUEgaiQAIAALBwAgACgCIAu9GAECfyMAQfAAayIEJAAgBCAANgJkIAQgATYCYCAEIAI3A1ggBCADNgJUIAQgBCgCZDYCUAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBCgCVA4UBgcCDAQFCg8AAwkRCxAOCBIBEg0SC0EAQgBBACAEKAJQEEwhACAEKAJQIAA2AhQgAEUEQCAEQn83A2gMEwsgBCgCUCgCFEIANwM4IAQoAlAoAhRCADcDQCAEQgA3A2gMEgsgBCgCUCgCECEBIAQpA1ghAiAEKAJQIQMjAEFAaiIAJAAgACABNgI4IAAgAjcDMCAAIAM2AiwCQCAAKQMwUARAIABBAEIAQQEgACgCLBBMNgI8DAELIAApAzAgACgCOCkDMFYEQCAAKAIsQRJBABAUIABBADYCPAwBCyAAKAI4KAIoBEAgACgCLEEdQQAQFCAAQQA2AjwMAQsgACAAKAI4IAApAzAQwAE3AyAgACAAKQMwIAAoAjgoAgQgACkDIKdBA3RqKQMAfTcDGCAAKQMYUARAIAAgACkDIEIBfTcDICAAIAAoAjgoAgAgACkDIKdBBHRqKQMINwMYCyAAIAAoAjgoAgAgACkDIKdBBHRqKQMIIAApAxh9NwMQIAApAxAgACkDMFYEQCAAKAIsQRxBABAUIABBADYCPAwBCyAAIAAoAjgoAgAgACkDIEIBfEEAIAAoAiwQTCIBNgIMIAFFBEAgAEEANgI8DAELIAAoAgwoAgAgACgCDCkDCEIBfadBBHRqIAApAxg3AwggACgCDCgCBCAAKAIMKQMIp0EDdGogACkDMDcDACAAKAIMIAApAzA3AzAgACgCDAJ+IAAoAjgpAxggACgCDCkDCEIBfVQEQCAAKAI4KQMYDAELIAAoAgwpAwhCAX0LNwMYIAAoAjggACgCDDYCKCAAKAIMIAAoAjg2AiggACgCOCAAKAIMKQMINwMgIAAoAgwgACkDIEIBfDcDICAAIAAoAgw2AjwLIAAoAjwhASAAQUBrJAAgASEAIAQoAlAgADYCFCAARQRAIARCfzcDaAwSCyAEKAJQKAIUIAQpA1g3AzggBCgCUCgCFCAEKAJQKAIUKQMINwNAIARCADcDaAwRCyAEQgA3A2gMEAsgBCgCUCgCEBAyIAQoAlAgBCgCUCgCFDYCECAEKAJQQQA2AhQgBEIANwNoDA8LIAQgBCgCUCAEKAJgIAQpA1gQQzcDaAwOCyAEKAJQKAIQEDIgBCgCUCgCFBAyIAQoAlAQFSAEQgA3A2gMDQsgBCgCUCgCEEIANwM4IAQoAlAoAhBCADcDQCAEQgA3A2gMDAsgBCkDWEL///////////8AVgRAIAQoAlBBEkEAEBQgBEJ/NwNoDAwLIAQoAlAoAhAhASAEKAJgIQMgBCkDWCECIwBBQGoiACQAIAAgATYCNCAAIAM2AjAgACACNwMoIAACfiAAKQMoIAAoAjQpAzAgACgCNCkDOH1UBEAgACkDKAwBCyAAKAI0KQMwIAAoAjQpAzh9CzcDKAJAIAApAyhQBEAgAEIANwM4DAELIAApAyhC////////////AFYEQCAAQn83AzgMAQsgACAAKAI0KQNANwMYIAAgACgCNCkDOCAAKAI0KAIEIAApAxinQQN0aikDAH03AxAgAEIANwMgA0AgACkDICAAKQMoVARAIAACfiAAKQMoIAApAyB9IAAoAjQoAgAgACkDGKdBBHRqKQMIIAApAxB9VARAIAApAyggACkDIH0MAQsgACgCNCgCACAAKQMYp0EEdGopAwggACkDEH0LNwMIIAAoAjAgACkDIKdqIAAoAjQoAgAgACkDGKdBBHRqKAIAIAApAxCnaiAAKQMIpxAZGiAAKQMIIAAoAjQoAgAgACkDGKdBBHRqKQMIIAApAxB9UQRAIAAgACkDGEIBfDcDGAsgACAAKQMIIAApAyB8NwMgIABCADcDEAwBCwsgACgCNCIBIAApAyAgASkDOHw3AzggACgCNCAAKQMYNwNAIAAgACkDIDcDOAsgACkDOCECIABBQGskACAEIAI3A2gMCwsgBEEAQgBBACAEKAJQEEw2AkwgBCgCTEUEQCAEQn83A2gMCwsgBCgCUCgCEBAyIAQoAlAgBCgCTDYCECAEQgA3A2gMCgsgBCgCUCgCFBAyIAQoAlBBADYCFCAEQgA3A2gMCQsgBCAEKAJQKAIQIAQoAmAgBCkDWCAEKAJQEMEBrDcDaAwICyAEIAQoAlAoAhQgBCgCYCAEKQNYIAQoAlAQwQGsNwNoDAcLIAQpA1hCOFQEQCAEKAJQQRJBABAUIARCfzcDaAwHCyAEIAQoAmA2AkggBCgCSBA7IAQoAkggBCgCUCgCDDYCKCAEKAJIIAQoAlAoAhApAzA3AxggBCgCSCAEKAJIKQMYNwMgIAQoAkhBADsBMCAEKAJIQQA7ATIgBCgCSELcATcDACAEQjg3A2gMBgsgBCgCUCAEKAJgKAIANgIMIARCADcDaAwFCyAEQX82AkAgBEETNgI8IARBCzYCOCAEQQ02AjQgBEEMNgIwIARBCjYCLCAEQQ82AiggBEEJNgIkIARBETYCICAEQQg2AhwgBEEHNgIYIARBBjYCFCAEQQU2AhAgBEEENgIMIARBAzYCCCAEQQI2AgQgBEEBNgIAIARBACAEEDQ3A2gMBAsgBCgCUCgCECkDOEL///////////8AVgRAIAQoAlBBHkE9EBQgBEJ/NwNoDAQLIAQgBCgCUCgCECkDODcDaAwDCyAEKAJQKAIUKQM4Qv///////////wBWBEAgBCgCUEEeQT0QFCAEQn83A2gMAwsgBCAEKAJQKAIUKQM4NwNoDAILIAQpA1hC////////////AFYEQCAEKAJQQRJBABAUIARCfzcDaAwCCyAEKAJQKAIUIQEgBCgCYCEDIAQpA1ghAiAEKAJQIQUjAEHgAGsiACQAIAAgATYCVCAAIAM2AlAgACACNwNIIAAgBTYCRAJAIAApA0ggACgCVCkDOCAAKQNIfEL//wN8VgRAIAAoAkRBEkEAEBQgAEJ/NwNYDAELIAAgACgCVCgCBCAAKAJUKQMIp0EDdGopAwA3AyAgACkDICAAKAJUKQM4IAApA0h8VARAIAAgACgCVCkDCCAAKQNIIAApAyAgACgCVCkDOH19Qv//A3xCEIh8NwMYIAApAxggACgCVCkDEFYEQCAAIAAoAlQpAxA3AxAgACkDEFAEQCAAQhA3AxALA0AgACkDECAAKQMYVARAIAAgACkDEEIBhjcDEAwBCwsgACgCVCAAKQMQIAAoAkQQwgFBAXFFBEAgACgCREEOQQAQFCAAQn83A1gMAwsLA0AgACgCVCkDCCAAKQMYVARAQYCABBAYIQEgACgCVCgCACAAKAJUKQMIp0EEdGogATYCACABBEAgACgCVCgCACAAKAJUKQMIp0EEdGpCgIAENwMIIAAoAlQiASABKQMIQgF8NwMIIAAgACkDIEKAgAR8NwMgIAAoAlQoAgQgACgCVCkDCKdBA3RqIAApAyA3AwAMAgUgACgCREEOQQAQFCAAQn83A1gMBAsACwsLIAAgACgCVCkDQDcDMCAAIAAoAlQpAzggACgCVCgCBCAAKQMwp0EDdGopAwB9NwMoIABCADcDOANAIAApAzggACkDSFQEQCAAAn4gACkDSCAAKQM4fSAAKAJUKAIAIAApAzCnQQR0aikDCCAAKQMofVQEQCAAKQNIIAApAzh9DAELIAAoAlQoAgAgACkDMKdBBHRqKQMIIAApAyh9CzcDCCAAKAJUKAIAIAApAzCnQQR0aigCACAAKQMop2ogACgCUCAAKQM4p2ogACkDCKcQGRogACkDCCAAKAJUKAIAIAApAzCnQQR0aikDCCAAKQMofVEEQCAAIAApAzBCAXw3AzALIAAgACkDCCAAKQM4fDcDOCAAQgA3AygMAQsLIAAoAlQiASAAKQM4IAEpAzh8NwM4IAAoAlQgACkDMDcDQCAAKAJUKQM4IAAoAlQpAzBWBEAgACgCVCAAKAJUKQM4NwMwCyAAIAApAzg3A1gLIAApA1ghAiAAQeAAaiQAIAQgAjcDaAwBCyAEKAJQQRxBABAUIARCfzcDaAsgBCkDaCECIARB8ABqJAAgAgsHACAAKAIACxgAQaibAUIANwIAQbCbAUEANgIAQaibAQuGAQIEfwF+IwBBEGsiASQAAkAgACkDMFAEQAwBCwNAAkAgACAFQQAgAUEPaiABQQhqEIoBIgRBf0YNACABLQAPQQNHDQAgAiABKAIIQYCAgIB/cUGAgICAekZqIQILQX8hAyAEQX9GDQEgAiEDIAVCAXwiBSAAKQMwVA0ACwsgAUEQaiQAIAMLC4GNASMAQYAIC4EMaW5zdWZmaWNpZW50IG1lbW9yeQBuZWVkIGRpY3Rpb25hcnkALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABaaXAgYXJjaGl2ZSBpbmNvbnNpc3RlbnQASW52YWxpZCBhcmd1bWVudABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQAaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0AHVua25vd24gaGVhZGVyIGZsYWdzIHNldABpbnZhbGlkIGRpc3RhbmNlcyBzZXQAaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdABGaWxlIGFscmVhZHkgZXhpc3RzAHRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzAGludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMAJXMlcyVzAGJ1ZmZlciBlcnJvcgBObyBlcnJvcgBzdHJlYW0gZXJyb3IAVGVsbCBlcnJvcgBJbnRlcm5hbCBlcnJvcgBTZWVrIGVycm9yAFdyaXRlIGVycm9yAGZpbGUgZXJyb3IAUmVhZCBlcnJvcgBabGliIGVycm9yAGRhdGEgZXJyb3IAQ1JDIGVycm9yAGluY29tcGF0aWJsZSB2ZXJzaW9uAG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/contracts/garanti_body_suffix_hasher_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\n\n    \n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\n    \n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\n    \n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\n    \n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\n    \n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/contracts/garanti_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\n\n    \n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\n    \n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\n    \n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\n    \n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\n    \n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\n    \n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\n    \n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\n    \n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\n    \n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\n    \n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\n    \n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\n    \n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/contracts/garanti_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\n\n    \n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\n    \n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\n    \n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\n    \n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\n    \n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\n    \n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\n    \n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\n    \n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\n    \n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\n    \n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\n    \n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\n    \n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\n    \n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\n    \n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\n    \n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\n    \n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\n    \n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\n    \n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\n    \n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\n    \n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\n    \n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\n    \n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\n    \n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\n    \n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\n    \n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\n    \n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\n    \n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\n    \n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\n    \n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n                \n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\n                \n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\n                \n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\n                \n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\n                \n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\n                \n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\n                \n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\n                \n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\n                \n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\n                \n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\n                \n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\n                \n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\n                \n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\n                \n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\n                \n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\n                \n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n            checkField(calldataload(add(_pubSignals, 384)))\n            \n            checkField(calldataload(add(_pubSignals, 416)))\n            \n            checkField(calldataload(add(_pubSignals, 448)))\n            \n            checkField(calldataload(add(_pubSignals, 480)))\n            \n            checkField(calldataload(add(_pubSignals, 512)))\n            \n            checkField(calldataload(add(_pubSignals, 544)))\n            \n            checkField(calldataload(add(_pubSignals, 576)))\n            \n            checkField(calldataload(add(_pubSignals, 608)))\n            \n            checkField(calldataload(add(_pubSignals, 640)))\n            \n            checkField(calldataload(add(_pubSignals, 672)))\n            \n            checkField(calldataload(add(_pubSignals, 704)))\n            \n            checkField(calldataload(add(_pubSignals, 736)))\n            \n            checkField(calldataload(add(_pubSignals, 768)))\n            \n            checkField(calldataload(add(_pubSignals, 800)))\n            \n            checkField(calldataload(add(_pubSignals, 832)))\n            \n            checkField(calldataload(add(_pubSignals, 864)))\n            \n            checkField(calldataload(add(_pubSignals, 896)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/emls/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/garanti/garanti_body_suffix_hasher.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../common-v2/body_suffix_hasher.circom\";\n\n// TOTAL CONSTRAINTS: 5313489\ncomponent main = BodySuffixHasher(10752);"
  },
  {
    "path": "circuits-circom/circuits/garanti/garanti_registration.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"@zk-email/circuits/helpers/extract.circom\";\ninclude \"@zk-email/circuits/email-verifier.circom\";\n\ninclude \"../utils/ceil.circom\";\ninclude \"../common-v2/regexes/body_hash_regex_v2.circom\";\ninclude \"../common-v2/regexes/from_regex_v2.circom\";\ninclude \"../common-v2/regexes/to_regex_v2.circom\";\ninclude \"./regexes/garanti_subject.circom\";\ninclude \"./regexes/garanti_payer_details.circom\";\n\ntemplate GarantiRegistrationEmail(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 2048); // constraints for 2048 bit RSA\n\n    //-------EMAIL VERIFICATION----------//\n\n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n    \n    // DKIM VERIFICATION\n    var ignore_body_hash_check = 1; // Ignore body hash check\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, ignore_body_hash_check);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n\n    modulus_hash <== EV.pubkey_hash;\n\n    //-------HASH INTERMEDIATE----------//\n\n    // Assert padding is all zeroes\n    AssertZeroes(max_body_bytes)(in_body_padded, in_body_len_padded_bytes + 1);\n\n    // This hashes the body after the precomputed SHA, and outputs the intermediate hash\n    signal intermediate_hash_bits[256] <== Sha256BytesPartial(max_body_bytes)(in_body_padded, in_body_len_padded_bytes, precomputed_sha);\n    signal intermediate_hash_bytes[32];\n    component bits2Num[32];\n    for (var i = 0; i < 32; i++) {\n        bits2Num[i] = Bits2Num(8);\n        for (var j = 0; j < 8; j++) {\n            bits2Num[i].in[7 - j] <== intermediate_hash_bits[i * 8 + j];\n        }\n        intermediate_hash_bytes[i] <== bits2Num[i].out;\n    }\n    // Pack intermediate hash for calldata\n    signal output intermediate_hash_packed[2] <== PackBytes(32, 2, 16)(intermediate_hash_bytes);\n\n    //-------BODY HASH V2 REGEX----------//\n\n    var LEN_SHA_B64 = 44;     // ceil(32 / 3) * 4, due to base64 encoding.\n    signal (bh_regex_out, bh_reveal[max_header_bytes]) <== BodyHashRegexV2(max_header_bytes)(in_padded);\n    bh_regex_out === 1;\n    signal shifted_bh_out[LEN_SHA_B64] <== VarShiftMaskedStr(max_header_bytes, LEN_SHA_B64)(bh_reveal, body_hash_idx);\n    \n    signal sha_b64_out[32] <== Base64Decode(32)(shifted_bh_out);    \n    signal output body_hash_packed[2] <== PackBytes(32, 2, 16)(sha_b64_out);\n\n    //-------CONSTANTS----------//\n\n    var max_email_from_len = 31; // Length of garanti@info.garantibbva.com.tr\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n\n    var max_email_to_len = 49;  // RFC 2821: requires length to be 254, but 49 is safe max length of email to field (https://atdata.com/long-email-addresses/)\n    var max_email_to_packed_bytes = count_packed(max_email_to_len, pack_size);\n    assert(max_email_to_packed_bytes < max_header_bytes);\n\n    var max_payer_mobile_num_len = 7; // +90 5XX XXX XXXX, 90 is country code for Turkey, 5XX is mobile phone code, XXX XXXX is subscriber number in the email\n    var max_payer_mobile_num_packed_bytes = count_packed(max_payer_mobile_num_len, pack_size);\n    assert(max_payer_mobile_num_packed_bytes < max_body_bytes);\n\n    //-------REGEXES----------//\n\n    // Garanti subject regex\n    signal subject_regex_out <== GarantiSubjectRegex(max_header_bytes)(in_padded);\n    subject_regex_out === 1;\n\n    // From header V2 regex\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegexV2(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n\n    // To V2 regex\n    signal (to_regex_out, to_regex_reveal[max_header_bytes]) <== ToRegexV2(max_header_bytes)(in_padded);\n    to_regex_out === 1;\n\n    // Garanti payer details regex\n    signal (\n        garanti_payer_details_regex_out, \n        payer_mobile_num_regex_reveal[max_body_bytes]\n    ) <== GarantiPayerDetailsRegex(max_body_bytes)(in_body_padded);\n    garanti_payer_details_regex_out === 1;\n\n    //-------BUSINESS LOGIC----------//\n\n    // Output packed email from\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_from_len, \n        pack_size\n    )(from_regex_reveal, email_from_idx);\n\n    // Packed to (Not an output. Used to compute user id)\n    signal input email_to_idx;\n    signal reveal_email_to_packed[max_email_to_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_to_len, \n        pack_size\n    )(to_regex_reveal, email_to_idx);\n\n    // Packed payer mobile number (Not an output. Used to compute user id)\n    signal input garanti_payer_mobile_num_idx;\n    signal reveal_payer_mobile_num_packed[max_payer_mobile_num_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payer_mobile_num_len, \n        pack_size\n    )(payer_mobile_num_regex_reveal, garanti_payer_mobile_num_idx);\n\n    //-------USER REGISTRATION ID----------//\n\n    // Output hashed registration id = hash(to_packed + payer_mobile_num_packed)\n    var max_id_bytes = max_email_to_packed_bytes + max_payer_mobile_num_packed_bytes;\n    assert(max_id_bytes < 16);\n    \n    component hash = Poseidon(max_id_bytes);\n    for (var i = 0; i < max_email_to_packed_bytes; i++) {\n        hash.inputs[i] <== reveal_email_to_packed[i];\n    }\n    for (var i = 0; i < max_payer_mobile_num_packed_bytes; i++) {\n        hash.inputs[max_email_to_packed_bytes + i] <== reveal_payer_mobile_num_packed[i];\n    }\n    signal output registration_id <== hash.out;\n\n    // TOTAL CONSTRAINTS: 4229779\n}\n\n// Args:\n// * max_header_bytes = 512 is the max number of bytes in the header\n// * max_body_bytes = 2688 is the max number of bytes in the body after precomputed slice\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main = GarantiRegistrationEmail(512, 2688, 121, 17, 7);"
  },
  {
    "path": "circuits-circom/circuits/garanti/garanti_send.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"@zk-email/circuits/helpers/extract.circom\";\n\ninclude \"../utils/ceil.circom\";\ninclude \"../utils/email_nullifier.circom\";\ninclude \"../utils/hash_sign_gen_rand.circom\";\ninclude \"../common-v2/regexes/from_regex_v2.circom\";\ninclude \"../common-v2/regexes/to_regex_v2.circom\";\ninclude \"../common-v2/regexes/body_hash_regex_v2.circom\";\ninclude \"./regexes/garanti_subject.circom\";\ninclude \"./regexes/garanti_payer_details.circom\";\ninclude \"./regexes/garanti_payment_details.circom\";\ninclude \"./regexes/garanti_timestamp.circom\";\n\n\ntemplate GarantiSendEmail(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 2048); // constraints for 2048 bit RSA\n\n    //-------EMAIL VERIFICATION----------//\n\n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Base 64 body hash variables\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n\n    // DKIM VERIFICATION\n    var ignore_body_hash_check = 1; // Ignore body hash check\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, ignore_body_hash_check);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n\n    modulus_hash <== EV.pubkey_hash;\n    signal header_hash[256] <== EV.sha;\n\n    //-------HASH INTERMEDIATE----------//\n\n    // Assert padding is all zeroes\n    AssertZeroes(max_body_bytes)(in_body_padded, in_body_len_padded_bytes + 1);\n\n    // This hashes the body after the precomputed SHA, and outputs the intermediate hash\n    signal intermediate_hash_bits[256] <== Sha256BytesPartial(max_body_bytes)(in_body_padded, in_body_len_padded_bytes, precomputed_sha);\n    signal intermediate_hash_bytes[32];\n    component bits2Num[32];\n    for (var i = 0; i < 32; i++) {\n        bits2Num[i] = Bits2Num(8);\n        for (var j = 0; j < 8; j++) {\n            bits2Num[i].in[7 - j] <== intermediate_hash_bits[i * 8 + j];\n        }\n        intermediate_hash_bytes[i] <== bits2Num[i].out;\n    }\n    // Pack intermediate hash for calldata\n    signal output intermediate_hash_packed[2] <== PackBytes(32, 2, 16)(intermediate_hash_bytes);\n\n    //-------BODY HASH V2 REGEX----------//\n\n    var LEN_SHA_B64 = 44;     // ceil(32 / 3) * 4, due to base64 encoding.\n    signal (bh_regex_out, bh_reveal[max_header_bytes]) <== BodyHashRegexV2(max_header_bytes)(in_padded);\n    bh_regex_out === 1;\n    signal shifted_bh_out[LEN_SHA_B64] <== VarShiftMaskedStr(max_header_bytes, LEN_SHA_B64)(bh_reveal, body_hash_idx);\n    \n    signal sha_b64_out[32] <== Base64Decode(32)(shifted_bh_out);    \n    signal output body_hash_packed[2] <== PackBytes(32, 2, 16)(sha_b64_out);\n\n    //-------CONSTANTS----------//\n\n    var max_email_from_len = 31; // Length of garanti@info.garantibbva.com.tr\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n\n    var max_email_to_len = 49;  // RFC 2821: requires length to be 254, but 49 is safe max length of email to field (https://atdata.com/long-email-addresses/)\n    var max_email_to_packed_bytes = count_packed(max_email_to_len, pack_size);\n    assert(max_email_to_packed_bytes < max_header_bytes);\n\n    var max_timestamp_len = 10; // 10 digits till year 2286\n    var max_timestamp_packed_bytes = count_packed(max_timestamp_len, pack_size);\n    assert(max_timestamp_packed_bytes < max_header_bytes);\n\n    var max_payer_mobile_num_len = 7; // +90 5XX XXX XXXX, 90 is country code for Turkey, 5XX is mobile phone code, XXX XXXX is subscriber number in the email\n    var max_payer_mobile_num_packed_bytes = count_packed(max_payer_mobile_num_len, pack_size);\n    assert(max_payer_mobile_num_packed_bytes < max_body_bytes);\n\n    var max_payee_name_len = 42; // International SWIFT standard for beneficiary name is 35 characters. We add some padding for special chars.\n    var max_payee_name_packed_bytes = count_packed(max_payee_name_len, pack_size);\n    assert(max_payee_name_packed_bytes < max_body_bytes);\n\n    var max_payee_acc_num_len = 32; // Length of \"TRXX XXXX XXXX XXXX XXXX XXXX XX\"\n    var max_payee_acc_num_packed_bytes = count_packed(max_payee_acc_num_len, pack_size);\n    assert(max_payee_acc_num_packed_bytes < max_body_bytes);\n\n    var max_amount_len = 8; // Length of \"2.000,00\"; // TODO: What is the MAX amount?\n    var max_amount_packed_bytes = count_packed(max_amount_len, pack_size);\n    assert(max_amount_packed_bytes < max_body_bytes);\n\n    //-------REGEXES----------//\n\n    // Garanti subject regex\n    signal subject_regex_out <== GarantiSubjectRegex(max_header_bytes)(in_padded);\n    subject_regex_out === 1;\n\n    // From header V2 regex\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegexV2(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n\n    // To V2 regex\n    signal (to_regex_out, to_regex_reveal[max_header_bytes]) <== ToRegexV2(max_header_bytes)(in_padded);\n    to_regex_out === 1;\n\n    // Garanti timestamp regex\n    signal (timestamp_regex_out, timestamp_regex_reveal[max_header_bytes]) <== GarantiTimestampRegex(max_header_bytes)(in_padded);\n    timestamp_regex_out === 1;\n\n    // Garanti payer details regex\n    signal (\n        garanti_payer_details_regex_out, \n        payer_mobile_num_regex_reveal[max_body_bytes]\n    ) <== GarantiPayerDetailsRegex(max_body_bytes)(in_body_padded);\n    garanti_payer_details_regex_out === 1;\n\n    // Garanti payment details regex\n    signal (\n        garanti_payment_details_regex_out,\n        payee_name_regex_reveal[max_body_bytes],\n        payee_acc_num_regex_reveal[max_body_bytes],\n        amount_regex_reveal[max_body_bytes]\n    ) <== GarantiPaymentDetailsRegex(max_body_bytes)(in_body_padded);\n    garanti_payment_details_regex_out === 1;\n\n    //-------BUSINESS LOGIC----------//\n\n    // Output packed email from\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_from_len, \n        pack_size\n    )(from_regex_reveal, email_from_idx);\n\n    // Output packed timestamp\n    signal input email_timestamp_idx;\n    signal output reveal_timestamp_packed[max_timestamp_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_timestamp_len, \n        pack_size\n    )(timestamp_regex_reveal, email_timestamp_idx);\n\n    // Packed to (Not an output. Used to compute onramper id)\n    signal input email_to_idx;\n    signal reveal_email_to_packed[max_email_to_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_to_len, \n        pack_size\n    )(to_regex_reveal, email_to_idx);\n\n    // Packed payer mobile number (Not an output. Used to compute onramper id)\n    signal input garanti_payer_mobile_num_idx;\n    signal reveal_payer_mobile_num_packed[max_payer_mobile_num_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payer_mobile_num_len, \n        pack_size\n    )(payer_mobile_num_regex_reveal, garanti_payer_mobile_num_idx);\n\n    // Output packed payee name\n    signal input garanti_payee_name_idx;\n    signal output reveal_payee_name_packed[max_payee_name_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payee_name_len, \n        pack_size\n    )(payee_name_regex_reveal, garanti_payee_name_idx);\n    // Output packed payment account number\n    signal input garanti_payee_acc_num_idx;\n    signal output reveal_payee_acc_num_packed[max_payee_acc_num_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payee_acc_num_len, \n        pack_size\n    )(payee_acc_num_regex_reveal, garanti_payee_acc_num_idx);\n\n    // Output packed payment amount\n    signal input garanti_amount_idx;\n    signal output reveal_amount_packed[max_amount_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_amount_len, \n        pack_size\n    )(amount_regex_reveal, garanti_amount_idx);\n\n\n    //-------POSEIDON HASHING----------//\n\n    // Output hashed onramper id = hash(to_packed + payer_mobile_num_packed)\n    var max_id_bytes = max_email_to_packed_bytes + max_payer_mobile_num_packed_bytes;\n    assert(max_id_bytes < 16);\n    \n    component onramper_hash = Poseidon(max_id_bytes);\n    for (var i = 0; i < max_email_to_packed_bytes; i++) {\n        onramper_hash.inputs[i] <== reveal_email_to_packed[i];\n    }\n    for (var i = 0; i < max_payer_mobile_num_packed_bytes; i++) {\n        onramper_hash.inputs[max_email_to_packed_bytes + i] <== reveal_payer_mobile_num_packed[i];\n    }\n    signal output onramper_id <== onramper_hash.out;\n\n    // NULLIFIER\n    signal output email_nullifier;\n    signal cm_rand <== HashSignGenRand(n, k)(signature);\n    email_nullifier <== EmailNullifier()(header_hash, cm_rand);\n\n    // The following signals do not take part in any computation, but tie the proof to a specific intent_hash & claim_id to prevent replay attacks and frontrunning.\n    // https://geometry.xyz/notebook/groth16-malleability\n    signal input intent_hash;\n    signal intent_hash_squared;\n    intent_hash_squared <== intent_hash * intent_hash;\n\n    // TOTAL CONSTRAINTS: 5048064\n}\n\n\n// Args:\n// * max_header_bytes = 512 is the max number of bytes in the header\n// * max_body_bytes = 2688 is the max number of bytes in the body after precomputed slice\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main { public [ intent_hash ] } = GarantiSendEmail(512, 2688, 121, 17, 7);"
  },
  {
    "path": "circuits-circom/circuits/garanti/inputs/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/garanti/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-garanti\",\n    \"version\": \"0.0.1\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Garanti circuits for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"main\": \"dist/generate_input.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/circuits\": \"3.2.3\",\n        \"@zk-email/helpers\": \"^3.0.2\",\n        \"@zk-email/zk-regex-circom\": \"1.2.1\",\n        \"buffer\": \"^6.0.3\",\n        \"circomlib\": \"^2.0.5\",\n        \"ethers\": \"^5.5.1\",\n        \"process\": \"^0.11.10\",\n        \"snarkjs\": \"latest\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\",\n        \"gen-input:garanti:send\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/garanti_send.eml --payment_type=garanti --circuit_type=send --output_file=input_garanti_send\",\n        \"gen-input:garanti:registration\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/garanti_send.eml --payment_type=garanti --circuit_type=registration --output_file=input_garanti_registration\",\n        \"gen-input:garanti:body-suffix-hasher\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/garanti_send.eml --payment_type=garanti --circuit_type=body_suffix_hasher --output_file=input_garanti_body_suffix_hasher\",\n        \"compile:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"compile:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"compile:garanti:body-suffix-hasher\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_body_suffix_hasher && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:garanti:body-suffix-hasher\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_body_suffix_hasher && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"uploadkeys:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"uploadkeys:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"uploadkeys:garanti:body-suffix-hasher\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_body_suffix_hasher && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"test:garanti:send\": \"yarn test ./test/garanti_send.spec.ts\",\n        \"test:garanti:registration\": \"yarn test ./test/garanti_registration.spec.ts\",\n        \"genverifier:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"genverifier:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"genverifier:garanti:body-suffix-hasher\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_body_suffix_hasher && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"gencalldata:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"gencalldata:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"gencalldata:garanti:body-suffix-hasher\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_body_suffix_hasher && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"genwitness:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genwitness:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genwitness:garanti:body-suffix-hasher\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_body_suffix_hasher && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genproof:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n        \"genproof:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n        \"genproof:garanti:body-suffix-hasher\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_body_suffix_hasher && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n        \"runall:garanti:registration\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_registration && cd ../../scripts && ./10_run_all.sh && cd ..\",\n        \"runall:garanti:send\": \"CIRCUIT_DIR=garanti CIRCUIT_NAME=garanti_send && cd ../../scripts && ./10_run_all.sh && cd ..\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_payer_details.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate GarantiPayerDetailsRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[48][num_bytes];\n\tcomponent lt[44][num_bytes];\n\tcomponent and[154][num_bytes];\n\tcomponent multi_or[20][num_bytes];\n\tsignal states[num_bytes+1][88];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 88; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(87);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 105;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][87];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 14;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 59;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[0][i].out;\n\t\tand[1][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 61;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 254;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== lt[2][i].out;\n\t\tand[2][i].b <== lt[3][i].out;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 0;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 1;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 2;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 3;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 4;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 5;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 6;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 7;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 8;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 9;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 11;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 12;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][2];\n\t\tmulti_or[0][i] = MultiOR(14);\n\t\tmulti_or[0][i].in[0] <== and[1][i].out;\n\t\tmulti_or[0][i].in[1] <== and[2][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[13] <== eq[12][i].out;\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 61;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 97;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== lt[4][i].out;\n\t\tand[4][i].b <== lt[5][i].out;\n\t\tlt[6][i] = LessEqThan(8);\n\t\tlt[6][i].in[0] <== 99;\n\t\tlt[6][i].in[1] <== in[i];\n\t\tlt[7][i] = LessEqThan(8);\n\t\tlt[7][i].in[0] <== in[i];\n\t\tlt[7][i].in[1] <== 254;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== lt[6][i].out;\n\t\tand[5][i].b <== lt[7][i].out;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][9];\n\t\tmulti_or[1][i] = MultiOR(15);\n\t\tmulti_or[1][i].in[0] <== and[1][i].out;\n\t\tmulti_or[1][i].in[1] <== and[4][i].out;\n\t\tmulti_or[1][i].in[2] <== and[5][i].out;\n\t\tmulti_or[1][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[1][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[1][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[1][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[1][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[1][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[1][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[1][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[1][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[1][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[1][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[1][i].in[14] <== eq[12][i].out;\n\t\tand[6][i].b <== multi_or[1][i].out;\n\t\tlt[8][i] = LessEqThan(8);\n\t\tlt[8][i].in[0] <== 61;\n\t\tlt[8][i].in[1] <== in[i];\n\t\tlt[9][i] = LessEqThan(8);\n\t\tlt[9][i].in[0] <== in[i];\n\t\tlt[9][i].in[1] <== 113;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== lt[8][i].out;\n\t\tand[7][i].b <== lt[9][i].out;\n\t\tlt[10][i] = LessEqThan(8);\n\t\tlt[10][i].in[0] <== 115;\n\t\tlt[10][i].in[1] <== in[i];\n\t\tlt[11][i] = LessEqThan(8);\n\t\tlt[11][i].in[0] <== in[i];\n\t\tlt[11][i].in[1] <== 254;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== lt[10][i].out;\n\t\tand[8][i].b <== lt[11][i].out;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][18];\n\t\tmulti_or[2][i] = MultiOR(15);\n\t\tmulti_or[2][i].in[0] <== and[1][i].out;\n\t\tmulti_or[2][i].in[1] <== and[7][i].out;\n\t\tmulti_or[2][i].in[2] <== and[8][i].out;\n\t\tmulti_or[2][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[2][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[2][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[2][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[2][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[2][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[2][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[2][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[2][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[2][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[2][i].in[14] <== eq[12][i].out;\n\t\tand[9][i].b <== multi_or[2][i].out;\n\t\tlt[12][i] = LessEqThan(8);\n\t\tlt[12][i].in[0] <== 63;\n\t\tlt[12][i].in[1] <== in[i];\n\t\tlt[13][i] = LessEqThan(8);\n\t\tlt[13][i].in[0] <== in[i];\n\t\tlt[13][i].in[1] <== 254;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== lt[12][i].out;\n\t\tand[10][i].b <== lt[13][i].out;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 61;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][19];\n\t\tmulti_or[3][i] = MultiOR(15);\n\t\tmulti_or[3][i].in[0] <== and[1][i].out;\n\t\tmulti_or[3][i].in[1] <== and[10][i].out;\n\t\tmulti_or[3][i].in[2] <== eq[1][i].out;\n\t\tmulti_or[3][i].in[3] <== eq[2][i].out;\n\t\tmulti_or[3][i].in[4] <== eq[3][i].out;\n\t\tmulti_or[3][i].in[5] <== eq[4][i].out;\n\t\tmulti_or[3][i].in[6] <== eq[5][i].out;\n\t\tmulti_or[3][i].in[7] <== eq[6][i].out;\n\t\tmulti_or[3][i].in[8] <== eq[7][i].out;\n\t\tmulti_or[3][i].in[9] <== eq[8][i].out;\n\t\tmulti_or[3][i].in[10] <== eq[9][i].out;\n\t\tmulti_or[3][i].in[11] <== eq[10][i].out;\n\t\tmulti_or[3][i].in[12] <== eq[11][i].out;\n\t\tmulti_or[3][i].in[13] <== eq[12][i].out;\n\t\tmulti_or[3][i].in[14] <== eq[13][i].out;\n\t\tand[11][i].b <== multi_or[3][i].out;\n\t\tlt[14][i] = LessEqThan(8);\n\t\tlt[14][i].in[0] <== 14;\n\t\tlt[14][i].in[1] <== in[i];\n\t\tlt[15][i] = LessEqThan(8);\n\t\tlt[15][i].in[0] <== in[i];\n\t\tlt[15][i].in[1] <== 47;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== lt[14][i].out;\n\t\tand[12][i].b <== lt[15][i].out;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 58;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 59;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][20];\n\t\tmulti_or[4][i] = MultiOR(16);\n\t\tmulti_or[4][i].in[0] <== and[12][i].out;\n\t\tmulti_or[4][i].in[1] <== and[2][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[1][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[2][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[3][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[4][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[5][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[6][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[7][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[8][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[9][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[10][i].out;\n\t\tmulti_or[4][i].in[12] <== eq[11][i].out;\n\t\tmulti_or[4][i].in[13] <== eq[12][i].out;\n\t\tmulti_or[4][i].in[14] <== eq[14][i].out;\n\t\tmulti_or[4][i].in[15] <== eq[15][i].out;\n\t\tand[13][i].b <== multi_or[4][i].out;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][31];\n\t\tand[14][i].b <== multi_or[4][i].out;\n\t\tlt[16][i] = LessEqThan(8);\n\t\tlt[16][i].in[0] <== 14;\n\t\tlt[16][i].in[1] <== in[i];\n\t\tlt[17][i] = LessEqThan(8);\n\t\tlt[17][i].in[0] <== in[i];\n\t\tlt[17][i].in[1] <== 46;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== lt[16][i].out;\n\t\tand[15][i].b <== lt[17][i].out;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 48;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 49;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 50;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 51;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 52;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 53;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 54;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 55;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 56;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 57;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][33];\n\t\tmulti_or[5][i] = MultiOR(27);\n\t\tmulti_or[5][i].in[0] <== and[15][i].out;\n\t\tmulti_or[5][i].in[1] <== and[4][i].out;\n\t\tmulti_or[5][i].in[2] <== and[5][i].out;\n\t\tmulti_or[5][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[5][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[5][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[5][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[5][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[5][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[5][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[5][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[5][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[5][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[5][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[5][i].in[14] <== eq[12][i].out;\n\t\tmulti_or[5][i].in[15] <== eq[16][i].out;\n\t\tmulti_or[5][i].in[16] <== eq[17][i].out;\n\t\tmulti_or[5][i].in[17] <== eq[18][i].out;\n\t\tmulti_or[5][i].in[18] <== eq[19][i].out;\n\t\tmulti_or[5][i].in[19] <== eq[20][i].out;\n\t\tmulti_or[5][i].in[20] <== eq[21][i].out;\n\t\tmulti_or[5][i].in[21] <== eq[22][i].out;\n\t\tmulti_or[5][i].in[22] <== eq[23][i].out;\n\t\tmulti_or[5][i].in[23] <== eq[24][i].out;\n\t\tmulti_or[5][i].in[24] <== eq[25][i].out;\n\t\tmulti_or[5][i].in[25] <== eq[14][i].out;\n\t\tmulti_or[5][i].in[26] <== eq[15][i].out;\n\t\tand[16][i].b <== multi_or[5][i].out;\n\t\tlt[18][i] = LessEqThan(8);\n\t\tlt[18][i].in[0] <== 61;\n\t\tlt[18][i].in[1] <== in[i];\n\t\tlt[19][i] = LessEqThan(8);\n\t\tlt[19][i].in[0] <== in[i];\n\t\tlt[19][i].in[1] <== 114;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== lt[18][i].out;\n\t\tand[17][i].b <== lt[19][i].out;\n\t\tlt[20][i] = LessEqThan(8);\n\t\tlt[20][i].in[0] <== 116;\n\t\tlt[20][i].in[1] <== in[i];\n\t\tlt[21][i] = LessEqThan(8);\n\t\tlt[21][i].in[0] <== in[i];\n\t\tlt[21][i].in[1] <== 254;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== lt[20][i].out;\n\t\tand[18][i].b <== lt[21][i].out;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][34];\n\t\tmulti_or[6][i] = MultiOR(15);\n\t\tmulti_or[6][i].in[0] <== and[1][i].out;\n\t\tmulti_or[6][i].in[1] <== and[17][i].out;\n\t\tmulti_or[6][i].in[2] <== and[18][i].out;\n\t\tmulti_or[6][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[6][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[6][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[6][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[6][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[6][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[6][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[6][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[6][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[6][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[6][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[6][i].in[14] <== eq[12][i].out;\n\t\tand[19][i].b <== multi_or[6][i].out;\n\t\tlt[22][i] = LessEqThan(8);\n\t\tlt[22][i].in[0] <== 61;\n\t\tlt[22][i].in[1] <== in[i];\n\t\tlt[23][i] = LessEqThan(8);\n\t\tlt[23][i].in[0] <== in[i];\n\t\tlt[23][i].in[1] <== 115;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== lt[22][i].out;\n\t\tand[20][i].b <== lt[23][i].out;\n\t\tlt[24][i] = LessEqThan(8);\n\t\tlt[24][i].in[0] <== 117;\n\t\tlt[24][i].in[1] <== in[i];\n\t\tlt[25][i] = LessEqThan(8);\n\t\tlt[25][i].in[0] <== in[i];\n\t\tlt[25][i].in[1] <== 254;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== lt[24][i].out;\n\t\tand[21][i].b <== lt[25][i].out;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][35];\n\t\tmulti_or[7][i] = MultiOR(15);\n\t\tmulti_or[7][i].in[0] <== and[1][i].out;\n\t\tmulti_or[7][i].in[1] <== and[20][i].out;\n\t\tmulti_or[7][i].in[2] <== and[21][i].out;\n\t\tmulti_or[7][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[7][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[7][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[7][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[7][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[7][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[7][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[7][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[7][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[7][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[7][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[7][i].in[14] <== eq[12][i].out;\n\t\tand[22][i].b <== multi_or[7][i].out;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][36];\n\t\tand[23][i].b <== multi_or[2][i].out; // Use multi_or[2]\n\t\tlt[26][i] = LessEqThan(8);\n\t\tlt[26][i].in[0] <== 61;\n\t\tlt[26][i].in[1] <== in[i];\n\t\tlt[27][i] = LessEqThan(8);\n\t\tlt[27][i].in[0] <== in[i];\n\t\tlt[27][i].in[1] <== 110;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== lt[26][i].out;\n\t\tand[24][i].b <== lt[27][i].out;\n\t\tlt[28][i] = LessEqThan(8);\n\t\tlt[28][i].in[0] <== 112;\n\t\tlt[28][i].in[1] <== in[i];\n\t\tlt[29][i] = LessEqThan(8);\n\t\tlt[29][i].in[0] <== in[i];\n\t\tlt[29][i].in[1] <== 254;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== lt[28][i].out;\n\t\tand[25][i].b <== lt[29][i].out;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][37];\n\t\tmulti_or[8][i] = MultiOR(15);\n\t\tmulti_or[8][i].in[0] <== and[1][i].out;\n\t\tmulti_or[8][i].in[1] <== and[24][i].out;\n\t\tmulti_or[8][i].in[2] <== and[25][i].out;\n\t\tmulti_or[8][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[8][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[8][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[8][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[8][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[8][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[8][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[8][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[8][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[8][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[8][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[8][i].in[14] <== eq[12][i].out;\n\t\tand[26][i].b <== multi_or[8][i].out;\n\t\tlt[30][i] = LessEqThan(8);\n\t\tlt[30][i].in[0] <== 61;\n\t\tlt[30][i].in[1] <== in[i];\n\t\tlt[31][i] = LessEqThan(8);\n\t\tlt[31][i].in[0] <== in[i];\n\t\tlt[31][i].in[1] <== 109;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== lt[30][i].out;\n\t\tand[27][i].b <== lt[31][i].out;\n\t\tlt[32][i] = LessEqThan(8);\n\t\tlt[32][i].in[0] <== 111;\n\t\tlt[32][i].in[1] <== in[i];\n\t\tlt[33][i] = LessEqThan(8);\n\t\tlt[33][i].in[0] <== in[i];\n\t\tlt[33][i].in[1] <== 254;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== lt[32][i].out;\n\t\tand[28][i].b <== lt[33][i].out;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][38];\n\t\tmulti_or[9][i] = MultiOR(15);\n\t\tmulti_or[9][i].in[0] <== and[1][i].out;\n\t\tmulti_or[9][i].in[1] <== and[27][i].out;\n\t\tmulti_or[9][i].in[2] <== and[28][i].out;\n\t\tmulti_or[9][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[9][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[9][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[9][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[9][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[9][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[9][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[9][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[9][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[9][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[9][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[9][i].in[14] <== eq[12][i].out;\n\t\tand[29][i].b <== multi_or[9][i].out;\n\t\tlt[34][i] = LessEqThan(8);\n\t\tlt[34][i].in[0] <== 61;\n\t\tlt[34][i].in[1] <== in[i];\n\t\tlt[35][i] = LessEqThan(8);\n\t\tlt[35][i].in[0] <== in[i];\n\t\tlt[35][i].in[1] <== 102;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== lt[34][i].out;\n\t\tand[30][i].b <== lt[35][i].out;\n\t\tlt[36][i] = LessEqThan(8);\n\t\tlt[36][i].in[0] <== 104;\n\t\tlt[36][i].in[1] <== in[i];\n\t\tlt[37][i] = LessEqThan(8);\n\t\tlt[37][i].in[0] <== in[i];\n\t\tlt[37][i].in[1] <== 254;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== lt[36][i].out;\n\t\tand[31][i].b <== lt[37][i].out;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][39];\n\t\tmulti_or[10][i] = MultiOR(15);\n\t\tmulti_or[10][i].in[0] <== and[1][i].out;\n\t\tmulti_or[10][i].in[1] <== and[30][i].out;\n\t\tmulti_or[10][i].in[2] <== and[31][i].out;\n\t\tmulti_or[10][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[10][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[10][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[10][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[10][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[10][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[10][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[10][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[10][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[10][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[10][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[10][i].in[14] <== eq[12][i].out;\n\t\tand[32][i].b <== multi_or[10][i].out;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][40];\n\t\tand[33][i].b <== multi_or[3][i].out;\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][41];\n\t\tand[34][i].b <== multi_or[0][i].out; // Use multi_or[0]\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][42];\n\t\tand[35][i].b <== multi_or[5][i].out; // Use multi_or[5]\n\t\tlt[38][i] = LessEqThan(8);\n\t\tlt[38][i].in[0] <== 61;\n\t\tlt[38][i].in[1] <== in[i];\n\t\tlt[39][i] = LessEqThan(8);\n\t\tlt[39][i].in[0] <== in[i];\n\t\tlt[39][i].in[1] <== 111;\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== lt[38][i].out;\n\t\tand[36][i].b <== lt[39][i].out;\n\t\tlt[40][i] = LessEqThan(8);\n\t\tlt[40][i].in[0] <== 113;\n\t\tlt[40][i].in[1] <== in[i];\n\t\tlt[41][i] = LessEqThan(8);\n\t\tlt[41][i].in[0] <== in[i];\n\t\tlt[41][i].in[1] <== 254;\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== lt[40][i].out;\n\t\tand[37][i].b <== lt[41][i].out;\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][43];\n\t\tmulti_or[11][i] = MultiOR(15);\n\t\tmulti_or[11][i].in[0] <== and[1][i].out;\n\t\tmulti_or[11][i].in[1] <== and[36][i].out;\n\t\tmulti_or[11][i].in[2] <== and[37][i].out;\n\t\tmulti_or[11][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[11][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[11][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[11][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[11][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[11][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[11][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[11][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[11][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[11][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[11][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[11][i].in[14] <== eq[12][i].out;\n\t\tand[38][i].b <== multi_or[11][i].out;\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][44];\n\t\tand[39][i].b <== multi_or[3][i].out;\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][45];\n\t\tand[40][i].b <== multi_or[0][i].out; // Use multi_or[0]\n\t\tlt[42][i] = LessEqThan(8);\n\t\tlt[42][i].in[0] <== 14;\n\t\tlt[42][i].in[1] <== in[i];\n\t\tlt[43][i] = LessEqThan(8);\n\t\tlt[43][i].in[0] <== in[i];\n\t\tlt[43][i].in[1] <== 254;\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== lt[42][i].out;\n\t\tand[41][i].b <== lt[43][i].out;\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][82];\n\t\tmulti_or[12][i] = MultiOR(13);\n\t\tmulti_or[12][i].in[0] <== and[41][i].out;\n\t\tmulti_or[12][i].in[1] <== eq[1][i].out;\n\t\tmulti_or[12][i].in[2] <== eq[2][i].out;\n\t\tmulti_or[12][i].in[3] <== eq[3][i].out;\n\t\tmulti_or[12][i].in[4] <== eq[4][i].out;\n\t\tmulti_or[12][i].in[5] <== eq[5][i].out;\n\t\tmulti_or[12][i].in[6] <== eq[6][i].out;\n\t\tmulti_or[12][i].in[7] <== eq[7][i].out;\n\t\tmulti_or[12][i].in[8] <== eq[8][i].out;\n\t\tmulti_or[12][i].in[9] <== eq[9][i].out;\n\t\tmulti_or[12][i].in[10] <== eq[10][i].out;\n\t\tmulti_or[12][i].in[11] <== eq[11][i].out;\n\t\tmulti_or[12][i].in[12] <== eq[12][i].out;\n\t\tand[42][i].b <== multi_or[12][i].out;\n\t\tmulti_or[13][i] = MultiOR(20);\n\t\tmulti_or[13][i].in[0] <== and[3][i].out;\n\t\tmulti_or[13][i].in[1] <== and[6][i].out;\n\t\tmulti_or[13][i].in[2] <== and[9][i].out;\n\t\tmulti_or[13][i].in[3] <== and[11][i].out;\n\t\tmulti_or[13][i].in[4] <== and[13][i].out;\n\t\tmulti_or[13][i].in[5] <== and[14][i].out;\n\t\tmulti_or[13][i].in[6] <== and[16][i].out;\n\t\tmulti_or[13][i].in[7] <== and[19][i].out;\n\t\tmulti_or[13][i].in[8] <== and[22][i].out;\n\t\tmulti_or[13][i].in[9] <== and[23][i].out;\n\t\tmulti_or[13][i].in[10] <== and[26][i].out;\n\t\tmulti_or[13][i].in[11] <== and[29][i].out;\n\t\tmulti_or[13][i].in[12] <== and[32][i].out;\n\t\tmulti_or[13][i].in[13] <== and[33][i].out;\n\t\tmulti_or[13][i].in[14] <== and[34][i].out;\n\t\tmulti_or[13][i].in[15] <== and[35][i].out;\n\t\tmulti_or[13][i].in[16] <== and[38][i].out;\n\t\tmulti_or[13][i].in[17] <== and[39][i].out;\n\t\tmulti_or[13][i].in[18] <== and[40][i].out;\n\t\tmulti_or[13][i].in[19] <== and[42][i].out;\n\t\tstates[i+1][2] <== multi_or[13][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][1];\n\t\tand[43][i].b <== eq[14][i].out;\n\t\tstates[i+1][3] <== and[43][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 60;\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][3];\n\t\tand[44][i].b <== eq[26][i].out;\n\t\tstates[i+1][4] <== and[44][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 98;\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][4];\n\t\tand[45][i].b <== eq[27][i].out;\n\t\tstates[i+1][5] <== and[45][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 114;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][5];\n\t\tand[46][i].b <== eq[28][i].out;\n\t\tstates[i+1][6] <== and[46][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 62;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][6];\n\t\tand[47][i].b <== eq[29][i].out;\n\t\tstates[i+1][7] <== and[47][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 13;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][7];\n\t\tand[48][i].b <== eq[30][i].out;\n\t\tstates[i+1][8] <== and[48][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][2];\n\t\tand[49][i].b <== eq[26][i].out;\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][9];\n\t\tand[50][i].b <== eq[26][i].out;\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][18];\n\t\tand[51][i].b <== eq[26][i].out;\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][19];\n\t\tand[52][i].b <== eq[26][i].out;\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][20];\n\t\tand[53][i].b <== eq[26][i].out;\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][33];\n\t\tand[54][i].b <== eq[26][i].out;\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][34];\n\t\tand[55][i].b <== eq[26][i].out;\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][35];\n\t\tand[56][i].b <== eq[26][i].out;\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][36];\n\t\tand[57][i].b <== eq[26][i].out;\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== states[i][37];\n\t\tand[58][i].b <== eq[26][i].out;\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== states[i][38];\n\t\tand[59][i].b <== eq[26][i].out;\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][39];\n\t\tand[60][i].b <== eq[26][i].out;\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][40];\n\t\tand[61][i].b <== eq[26][i].out;\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== states[i][42];\n\t\tand[62][i].b <== eq[26][i].out;\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== states[i][43];\n\t\tand[63][i].b <== eq[26][i].out;\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][44];\n\t\tand[64][i].b <== eq[26][i].out;\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][45];\n\t\tand[65][i].b <== eq[26][i].out;\n\t\tmulti_or[14][i] = MultiOR(17);\n\t\tmulti_or[14][i].in[0] <== and[49][i].out;\n\t\tmulti_or[14][i].in[1] <== and[50][i].out;\n\t\tmulti_or[14][i].in[2] <== and[51][i].out;\n\t\tmulti_or[14][i].in[3] <== and[52][i].out;\n\t\tmulti_or[14][i].in[4] <== and[53][i].out;\n\t\tmulti_or[14][i].in[5] <== and[54][i].out;\n\t\tmulti_or[14][i].in[6] <== and[55][i].out;\n\t\tmulti_or[14][i].in[7] <== and[56][i].out;\n\t\tmulti_or[14][i].in[8] <== and[57][i].out;\n\t\tmulti_or[14][i].in[9] <== and[58][i].out;\n\t\tmulti_or[14][i].in[10] <== and[59][i].out;\n\t\tmulti_or[14][i].in[11] <== and[60][i].out;\n\t\tmulti_or[14][i].in[12] <== and[61][i].out;\n\t\tmulti_or[14][i].in[13] <== and[62][i].out;\n\t\tmulti_or[14][i].in[14] <== and[63][i].out;\n\t\tmulti_or[14][i].in[15] <== and[64][i].out;\n\t\tmulti_or[14][i].in[16] <== and[65][i].out;\n\t\tstates[i+1][9] <== multi_or[14][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 10;\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][8];\n\t\tand[66][i].b <== eq[31][i].out;\n\t\tstates[i+1][10] <== and[66][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 32;\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][10];\n\t\tand[67][i].b <== eq[32][i].out;\n\t\tstates[i+1][11] <== and[67][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][11];\n\t\tand[68][i].b <== eq[32][i].out;\n\t\tstates[i+1][12] <== and[68][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][12];\n\t\tand[69][i].b <== eq[32][i].out;\n\t\tstates[i+1][13] <== and[69][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][13];\n\t\tand[70][i].b <== eq[32][i].out;\n\t\tstates[i+1][14] <== and[70][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[71][i] = AND();\n\t\tand[71][i].a <== states[i][14];\n\t\tand[71][i].b <== eq[32][i].out;\n\t\tstates[i+1][15] <== and[71][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[72][i] = AND();\n\t\tand[72][i].a <== states[i][15];\n\t\tand[72][i].b <== eq[32][i].out;\n\t\tstates[i+1][16] <== and[72][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[73][i] = AND();\n\t\tand[73][i].a <== states[i][16];\n\t\tand[73][i].b <== eq[32][i].out;\n\t\tstates[i+1][17] <== and[73][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[74][i] = AND();\n\t\tand[74][i].a <== states[i][9];\n\t\tand[74][i].b <== eq[27][i].out;\n\t\tand[75][i] = AND();\n\t\tand[75][i].a <== states[i][33];\n\t\tand[75][i].b <== eq[27][i].out;\n\t\tand[76][i] = AND();\n\t\tand[76][i].a <== states[i][42];\n\t\tand[76][i].b <== eq[27][i].out;\n\t\tmulti_or[15][i] = MultiOR(3);\n\t\tmulti_or[15][i].in[0] <== and[74][i].out;\n\t\tmulti_or[15][i].in[1] <== and[75][i].out;\n\t\tmulti_or[15][i].in[2] <== and[76][i].out;\n\t\tstates[i+1][18] <== multi_or[15][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[77][i] = AND();\n\t\tand[77][i].a <== states[i][18];\n\t\tand[77][i].b <== eq[28][i].out;\n\t\tstates[i+1][19] <== and[77][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tand[78][i] = AND();\n\t\tand[78][i].a <== states[i][19];\n\t\tand[78][i].b <== eq[29][i].out;\n\t\tstates[i+1][20] <== and[78][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[79][i] = AND();\n\t\tand[79][i].a <== states[i][17];\n\t\tand[79][i].b <== eq[32][i].out;\n\t\tstates[i+1][21] <== and[79][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[80][i] = AND();\n\t\tand[80][i].a <== states[i][21];\n\t\tand[80][i].b <== eq[32][i].out;\n\t\tstates[i+1][22] <== and[80][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[81][i] = AND();\n\t\tand[81][i].a <== states[i][22];\n\t\tand[81][i].b <== eq[32][i].out;\n\t\tstates[i+1][23] <== and[81][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\tand[82][i] = AND();\n\t\tand[82][i].a <== states[i][23];\n\t\tand[82][i].b <== eq[32][i].out;\n\t\tstates[i+1][24] <== and[82][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tand[83][i] = AND();\n\t\tand[83][i].a <== states[i][24];\n\t\tand[83][i].b <== eq[32][i].out;\n\t\tstates[i+1][25] <== and[83][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[84][i] = AND();\n\t\tand[84][i].a <== states[i][25];\n\t\tand[84][i].b <== eq[32][i].out;\n\t\tstates[i+1][26] <== and[84][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\tand[85][i] = AND();\n\t\tand[85][i].a <== states[i][26];\n\t\tand[85][i].b <== eq[32][i].out;\n\t\tstates[i+1][27] <== and[85][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tand[86][i] = AND();\n\t\tand[86][i].a <== states[i][27];\n\t\tand[86][i].b <== eq[32][i].out;\n\t\tstates[i+1][28] <== and[86][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[87][i] = AND();\n\t\tand[87][i].a <== states[i][28];\n\t\tand[87][i].b <== eq[32][i].out;\n\t\tstates[i+1][29] <== and[87][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tand[88][i] = AND();\n\t\tand[88][i].a <== states[i][29];\n\t\tand[88][i].b <== eq[32][i].out;\n\t\tstates[i+1][30] <== and[88][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tand[89][i] = AND();\n\t\tand[89][i].a <== states[i][20];\n\t\tmulti_or[16][i] = MultiOR(10);\n\t\tmulti_or[16][i].in[0] <== eq[16][i].out;\n\t\tmulti_or[16][i].in[1] <== eq[17][i].out;\n\t\tmulti_or[16][i].in[2] <== eq[18][i].out;\n\t\tmulti_or[16][i].in[3] <== eq[19][i].out;\n\t\tmulti_or[16][i].in[4] <== eq[20][i].out;\n\t\tmulti_or[16][i].in[5] <== eq[21][i].out;\n\t\tmulti_or[16][i].in[6] <== eq[22][i].out;\n\t\tmulti_or[16][i].in[7] <== eq[23][i].out;\n\t\tmulti_or[16][i].in[8] <== eq[24][i].out;\n\t\tmulti_or[16][i].in[9] <== eq[25][i].out;\n\t\tand[89][i].b <== multi_or[16][i].out;\n\t\tand[90][i] = AND();\n\t\tand[90][i].a <== states[i][31];\n\t\tand[90][i].b <== multi_or[16][i].out; // Use multi_or[16]\n\t\tmulti_or[17][i] = MultiOR(2);\n\t\tmulti_or[17][i].in[0] <== and[89][i].out;\n\t\tmulti_or[17][i].in[1] <== and[90][i].out;\n\t\tstates[i+1][31] <== multi_or[17][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[91][i] = AND();\n\t\tand[91][i].a <== states[i][30];\n\t\tand[91][i].b <== eq[32][i].out;\n\t\tstates[i+1][32] <== and[91][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[92][i] = AND();\n\t\tand[92][i].a <== states[i][31];\n\t\tand[92][i].b <== eq[26][i].out;\n\t\tstates[i+1][33] <== and[92][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 47;\n\t\tand[93][i] = AND();\n\t\tand[93][i].a <== states[i][33];\n\t\tand[93][i].b <== eq[33][i].out;\n\t\tstates[i+1][34] <== and[93][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 115;\n\t\tand[94][i] = AND();\n\t\tand[94][i].a <== states[i][34];\n\t\tand[94][i].b <== eq[34][i].out;\n\t\tstates[i+1][35] <== and[94][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 116;\n\t\tand[95][i] = AND();\n\t\tand[95][i].a <== states[i][35];\n\t\tand[95][i].b <== eq[35][i].out;\n\t\tstates[i+1][36] <== and[95][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[96][i] = AND();\n\t\tand[96][i].a <== states[i][36];\n\t\tand[96][i].b <== eq[28][i].out;\n\t\tstates[i+1][37] <== and[96][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 111;\n\t\tand[97][i] = AND();\n\t\tand[97][i].a <== states[i][37];\n\t\tand[97][i].b <== eq[36][i].out;\n\t\tstates[i+1][38] <== and[97][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 110;\n\t\tand[98][i] = AND();\n\t\tand[98][i].a <== states[i][38];\n\t\tand[98][i].b <== eq[37][i].out;\n\t\tstates[i+1][39] <== and[98][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 103;\n\t\tand[99][i] = AND();\n\t\tand[99][i].a <== states[i][39];\n\t\tand[99][i].b <== eq[38][i].out;\n\t\tstates[i+1][40] <== and[99][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tand[100][i] = AND();\n\t\tand[100][i].a <== states[i][40];\n\t\tand[100][i].b <== eq[29][i].out;\n\t\tstates[i+1][41] <== and[100][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[101][i] = AND();\n\t\tand[101][i].a <== states[i][41];\n\t\tand[101][i].b <== eq[26][i].out;\n\t\tstates[i+1][42] <== and[101][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tand[102][i] = AND();\n\t\tand[102][i].a <== states[i][42];\n\t\tand[102][i].b <== eq[33][i].out;\n\t\tstates[i+1][43] <== and[102][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 112;\n\t\tand[103][i] = AND();\n\t\tand[103][i].a <== states[i][43];\n\t\tand[103][i].b <== eq[39][i].out;\n\t\tstates[i+1][44] <== and[103][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\tand[104][i] = AND();\n\t\tand[104][i].a <== states[i][44];\n\t\tand[104][i].b <== eq[29][i].out;\n\t\tstates[i+1][45] <== and[104][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\tand[105][i] = AND();\n\t\tand[105][i].a <== states[i][45];\n\t\tand[105][i].b <== eq[30][i].out;\n\t\tstates[i+1][46] <== and[105][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\tand[106][i] = AND();\n\t\tand[106][i].a <== states[i][46];\n\t\tand[106][i].b <== eq[31][i].out;\n\t\tstates[i+1][47] <== and[106][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tand[107][i] = AND();\n\t\tand[107][i].a <== states[i][0];\n\t\tand[107][i].b <== eq[26][i].out;\n\t\tstates[i+1][48] <== and[107][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tand[108][i] = AND();\n\t\tand[108][i].a <== states[i][32];\n\t\tand[108][i].b <== eq[32][i].out;\n\t\tstates[i+1][49] <== and[108][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\tand[109][i] = AND();\n\t\tand[109][i].a <== states[i][49];\n\t\tand[109][i].b <== eq[32][i].out;\n\t\tstates[i+1][50] <== and[109][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tand[110][i] = AND();\n\t\tand[110][i].a <== states[i][50];\n\t\tand[110][i].b <== eq[26][i].out;\n\t\tstates[i+1][51] <== and[110][i].out;\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tand[111][i] = AND();\n\t\tand[111][i].a <== states[i][51];\n\t\tand[111][i].b <== eq[34][i].out;\n\t\tstates[i+1][52] <== and[111][i].out;\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tand[112][i] = AND();\n\t\tand[112][i].a <== states[i][52];\n\t\tand[112][i].b <== eq[35][i].out;\n\t\tstates[i+1][53] <== and[112][i].out;\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\tand[113][i] = AND();\n\t\tand[113][i].a <== states[i][53];\n\t\tand[113][i].b <== eq[28][i].out;\n\t\tstates[i+1][54] <== and[113][i].out;\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tand[114][i] = AND();\n\t\tand[114][i].a <== states[i][54];\n\t\tand[114][i].b <== eq[36][i].out;\n\t\tstates[i+1][55] <== and[114][i].out;\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\tand[115][i] = AND();\n\t\tand[115][i].a <== states[i][55];\n\t\tand[115][i].b <== eq[37][i].out;\n\t\tstates[i+1][56] <== and[115][i].out;\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tand[116][i] = AND();\n\t\tand[116][i].a <== states[i][56];\n\t\tand[116][i].b <== eq[38][i].out;\n\t\tstates[i+1][57] <== and[116][i].out;\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\tand[117][i] = AND();\n\t\tand[117][i].a <== states[i][57];\n\t\tand[117][i].b <== eq[29][i].out;\n\t\tstates[i+1][58] <== and[117][i].out;\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\tand[118][i] = AND();\n\t\tand[118][i].a <== states[i][58];\n\t\tand[118][i].b <== multi_or[12][i].out; // Use multi_or[12]\n\t\tand[119][i] = AND();\n\t\tand[119][i].a <== states[i][59];\n\t\tand[119][i].b <== multi_or[0][i].out; // Use multi_or[0]\n\t\tand[120][i] = AND();\n\t\tand[120][i].a <== states[i][72];\n\t\tand[120][i].b <== multi_or[1][i].out; // Use multi_or[1]\n\t\tand[121][i] = AND();\n\t\tand[121][i].a <== states[i][80];\n\t\tand[121][i].b <== multi_or[2][i].out; // Use multi_or[2]\n\t\tand[122][i] = AND();\n\t\tand[122][i].a <== states[i][81];\n\t\tand[122][i].b <== multi_or[3][i].out; // Use multi_or[3]\n\t\tmulti_or[18][i] = MultiOR(5);\n\t\tmulti_or[18][i].in[0] <== and[118][i].out;\n\t\tmulti_or[18][i].in[1] <== and[119][i].out;\n\t\tmulti_or[18][i].in[2] <== and[120][i].out;\n\t\tmulti_or[18][i].in[3] <== and[121][i].out;\n\t\tmulti_or[18][i].in[4] <== and[122][i].out;\n\t\tstates[i+1][59] <== multi_or[18][i].out;\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\tand[123][i] = AND();\n\t\tand[123][i].a <== states[i][48];\n\t\tand[123][i].b <== eq[39][i].out;\n\t\tstates[i+1][60] <== and[123][i].out;\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\tand[124][i] = AND();\n\t\tand[124][i].a <== states[i][60];\n\t\tand[124][i].b <== eq[29][i].out;\n\t\tstates[i+1][61] <== and[124][i].out;\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 71;\n\t\tand[125][i] = AND();\n\t\tand[125][i].a <== states[i][61];\n\t\tand[125][i].b <== eq[40][i].out;\n\t\tstates[i+1][62] <== and[125][i].out;\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 38;\n\t\tand[126][i] = AND();\n\t\tand[126][i].a <== states[i][62];\n\t\tand[126][i].b <== eq[41][i].out;\n\t\tstates[i+1][63] <== and[126][i].out;\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t\tand[127][i] = AND();\n\t\tand[127][i].a <== states[i][63];\n\t\tand[127][i].b <== eq[36][i].out;\n\t\tstates[i+1][64] <== and[127][i].out;\n\t\tstate_changed[i].in[63] <== states[i+1][64];\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 117;\n\t\tand[128][i] = AND();\n\t\tand[128][i].a <== states[i][64];\n\t\tand[128][i].b <== eq[42][i].out;\n\t\tstates[i+1][65] <== and[128][i].out;\n\t\tstate_changed[i].in[64] <== states[i+1][65];\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 109;\n\t\tand[129][i] = AND();\n\t\tand[129][i].a <== states[i][65];\n\t\tand[129][i].b <== eq[43][i].out;\n\t\tstates[i+1][66] <== and[129][i].out;\n\t\tstate_changed[i].in[65] <== states[i+1][66];\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 108;\n\t\tand[130][i] = AND();\n\t\tand[130][i].a <== states[i][66];\n\t\tand[130][i].b <== eq[44][i].out;\n\t\tstates[i+1][67] <== and[130][i].out;\n\t\tstate_changed[i].in[66] <== states[i+1][67];\n\t\tand[131][i] = AND();\n\t\tand[131][i].a <== states[i][67];\n\t\tand[131][i].b <== eq[15][i].out;\n\t\tstates[i+1][68] <== and[131][i].out;\n\t\tstate_changed[i].in[67] <== states[i+1][68];\n\t\tand[132][i] = AND();\n\t\tand[132][i].a <== states[i][68];\n\t\tand[132][i].b <== eq[37][i].out;\n\t\tstates[i+1][69] <== and[132][i].out;\n\t\tstate_changed[i].in[68] <== states[i+1][69];\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 100;\n\t\tand[133][i] = AND();\n\t\tand[133][i].a <== states[i][69];\n\t\tand[133][i].b <== eq[45][i].out;\n\t\tstates[i+1][70] <== and[133][i].out;\n\t\tstate_changed[i].in[69] <== states[i+1][70];\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 101;\n\t\tand[134][i] = AND();\n\t\tand[134][i].a <== states[i][70];\n\t\tand[134][i].b <== eq[46][i].out;\n\t\tstates[i+1][71] <== and[134][i].out;\n\t\tstate_changed[i].in[70] <== states[i+1][71];\n\t\tand[135][i] = AND();\n\t\tand[135][i].a <== states[i][59];\n\t\tand[135][i].b <== eq[26][i].out;\n\t\tand[136][i] = AND();\n\t\tand[136][i].a <== states[i][72];\n\t\tand[136][i].b <== eq[26][i].out;\n\t\tand[137][i] = AND();\n\t\tand[137][i].a <== states[i][80];\n\t\tand[137][i].b <== eq[26][i].out;\n\t\tand[138][i] = AND();\n\t\tand[138][i].a <== states[i][81];\n\t\tand[138][i].b <== eq[26][i].out;\n\t\tmulti_or[19][i] = MultiOR(4);\n\t\tmulti_or[19][i].in[0] <== and[135][i].out;\n\t\tmulti_or[19][i].in[1] <== and[136][i].out;\n\t\tmulti_or[19][i].in[2] <== and[137][i].out;\n\t\tmulti_or[19][i].in[3] <== and[138][i].out;\n\t\tstates[i+1][72] <== multi_or[19][i].out;\n\t\tstate_changed[i].in[71] <== states[i+1][72];\n\t\tand[139][i] = AND();\n\t\tand[139][i].a <== states[i][71];\n\t\tand[139][i].b <== eq[28][i].out;\n\t\tstates[i+1][73] <== and[139][i].out;\n\t\tstate_changed[i].in[72] <== states[i+1][73];\n\t\tand[140][i] = AND();\n\t\tand[140][i].a <== states[i][73];\n\t\tand[140][i].b <== eq[46][i].out;\n\t\tstates[i+1][74] <== and[140][i].out;\n\t\tstate_changed[i].in[73] <== states[i+1][74];\n\t\tand[141][i] = AND();\n\t\tand[141][i].a <== states[i][74];\n\t\tand[141][i].b <== eq[37][i].out;\n\t\tstates[i+1][75] <== and[141][i].out;\n\t\tstate_changed[i].in[74] <== states[i+1][75];\n\t\tand[142][i] = AND();\n\t\tand[142][i].a <== states[i][75];\n\t\tand[142][i].b <== eq[32][i].out;\n\t\tstates[i+1][76] <== and[142][i].out;\n\t\tstate_changed[i].in[75] <== states[i+1][76];\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 66;\n\t\tand[143][i] = AND();\n\t\tand[143][i].a <== states[i][76];\n\t\tand[143][i].b <== eq[47][i].out;\n\t\tstates[i+1][77] <== and[143][i].out;\n\t\tstate_changed[i].in[76] <== states[i+1][77];\n\t\tand[144][i] = AND();\n\t\tand[144][i].a <== states[i][77];\n\t\tand[144][i].b <== eq[0][i].out;\n\t\tstates[i+1][78] <== and[144][i].out;\n\t\tstate_changed[i].in[77] <== states[i+1][78];\n\t\tand[145][i] = AND();\n\t\tand[145][i].a <== states[i][78];\n\t\tand[145][i].b <== eq[44][i].out;\n\t\tstates[i+1][79] <== and[145][i].out;\n\t\tstate_changed[i].in[78] <== states[i+1][79];\n\t\tand[146][i] = AND();\n\t\tand[146][i].a <== states[i][72];\n\t\tand[146][i].b <== eq[27][i].out;\n\t\tstates[i+1][80] <== and[146][i].out;\n\t\tstate_changed[i].in[79] <== states[i+1][80];\n\t\tand[147][i] = AND();\n\t\tand[147][i].a <== states[i][80];\n\t\tand[147][i].b <== eq[28][i].out;\n\t\tstates[i+1][81] <== and[147][i].out;\n\t\tstate_changed[i].in[80] <== states[i+1][81];\n\t\tand[148][i] = AND();\n\t\tand[148][i].a <== states[i][81];\n\t\tand[148][i].b <== eq[29][i].out;\n\t\tstates[i+1][82] <== and[148][i].out;\n\t\tstate_changed[i].in[81] <== states[i+1][82];\n\t\tand[149][i] = AND();\n\t\tand[149][i].a <== states[i][79];\n\t\tand[149][i].b <== eq[38][i].out;\n\t\tstates[i+1][83] <== and[149][i].out;\n\t\tstate_changed[i].in[82] <== states[i+1][83];\n\t\tand[150][i] = AND();\n\t\tand[150][i].a <== states[i][83];\n\t\tand[150][i].b <== eq[0][i].out;\n\t\tstates[i+1][84] <== and[150][i].out;\n\t\tstate_changed[i].in[83] <== states[i+1][84];\n\t\tand[151][i] = AND();\n\t\tand[151][i].a <== states[i][84];\n\t\tand[151][i].b <== eq[44][i].out;\n\t\tstates[i+1][85] <== and[151][i].out;\n\t\tstate_changed[i].in[84] <== states[i+1][85];\n\t\tand[152][i] = AND();\n\t\tand[152][i].a <== states[i][85];\n\t\tand[152][i].b <== eq[46][i].out;\n\t\tstates[i+1][86] <== and[152][i].out;\n\t\tstate_changed[i].in[85] <== states[i+1][86];\n\t\tand[153][i] = AND();\n\t\tand[153][i].a <== states[i][86];\n\t\tand[153][i].b <== eq[28][i].out;\n\t\tstates[i+1][87] <== and[153][i].out;\n\t\tstate_changed[i].in[86] <== states[i+1][87];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][47];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][47] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][20] * states[i+2][31];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][31] * states[i+2][31];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_payer_details.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<p>G&ouml;nderen Bilgileri:<br>\\r\\n                    <strong>\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"[^\\r\\n]+<br>\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"[^\\r\\n]+<br>\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"</strong></p>\\r\\n\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_payment_details.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate GarantiPaymentDetailsRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[32][num_bytes];\n\tcomponent lt[4][num_bytes];\n\tcomponent and[91][num_bytes];\n\tcomponent multi_or[6][num_bytes];\n\tsignal states[num_bytes+1][87];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 87; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(86);\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 0;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 59;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 61;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 254;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[2][i].out;\n\t\tand[1][i].b <== lt[3][i].out;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(2);\n\t\tmulti_or[0][i].in[0] <== and[0][i].out;\n\t\tmulti_or[0][i].in[1] <== and[1][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][9];\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[2][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\tstates[i+1][1] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 60;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][0];\n\t\tand[4][i].b <== eq[0][i].out;\n\t\tstates[i+1][2] <== and[4][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 115;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][2];\n\t\tand[5][i].b <== eq[1][i].out;\n\t\tstates[i+1][3] <== and[5][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 116;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][3];\n\t\tand[6][i].b <== eq[2][i].out;\n\t\tstates[i+1][4] <== and[6][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 114;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][4];\n\t\tand[7][i].b <== eq[3][i].out;\n\t\tstates[i+1][5] <== and[7][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 111;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][5];\n\t\tand[8][i].b <== eq[4][i].out;\n\t\tstates[i+1][6] <== and[8][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 110;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][6];\n\t\tand[9][i].b <== eq[5][i].out;\n\t\tstates[i+1][7] <== and[9][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 103;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][7];\n\t\tand[10][i].b <== eq[6][i].out;\n\t\tstates[i+1][8] <== and[10][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 62;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][8];\n\t\tand[11][i].b <== eq[7][i].out;\n\t\tstates[i+1][9] <== and[11][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][1];\n\t\tand[12][i].b <== eq[0][i].out;\n\t\tstates[i+1][10] <== and[12][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 98;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][10];\n\t\tand[13][i].b <== eq[8][i].out;\n\t\tstates[i+1][11] <== and[13][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][11];\n\t\tand[14][i].b <== eq[3][i].out;\n\t\tstates[i+1][12] <== and[14][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][12];\n\t\tand[15][i].b <== eq[7][i].out;\n\t\tstates[i+1][13] <== and[15][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 84;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][13];\n\t\tand[16][i].b <== eq[9][i].out;\n\t\tstates[i+1][14] <== and[16][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 82;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][14];\n\t\tand[17][i].b <== eq[10][i].out;\n\t\tstates[i+1][15] <== and[17][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 32;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 48;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 49;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 50;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 51;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 52;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 53;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 54;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 55;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 56;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 57;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][15];\n\t\tmulti_or[2][i] = MultiOR(11);\n\t\tmulti_or[2][i].in[0] <== eq[11][i].out;\n\t\tmulti_or[2][i].in[1] <== eq[12][i].out;\n\t\tmulti_or[2][i].in[2] <== eq[13][i].out;\n\t\tmulti_or[2][i].in[3] <== eq[14][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[15][i].out;\n\t\tmulti_or[2][i].in[5] <== eq[16][i].out;\n\t\tmulti_or[2][i].in[6] <== eq[17][i].out;\n\t\tmulti_or[2][i].in[7] <== eq[18][i].out;\n\t\tmulti_or[2][i].in[8] <== eq[19][i].out;\n\t\tmulti_or[2][i].in[9] <== eq[20][i].out;\n\t\tmulti_or[2][i].in[10] <== eq[21][i].out;\n\t\tand[18][i].b <== multi_or[2][i].out;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][16];\n\t\tand[19][i].b <== multi_or[2][i].out;\n\t\tmulti_or[3][i] = MultiOR(2);\n\t\tmulti_or[3][i].in[0] <== and[18][i].out;\n\t\tmulti_or[3][i].in[1] <== and[19][i].out;\n\t\tstates[i+1][16] <== multi_or[3][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][16];\n\t\tand[20][i].b <== eq[0][i].out;\n\t\tstates[i+1][17] <== and[20][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 47;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][17];\n\t\tand[21][i].b <== eq[22][i].out;\n\t\tstates[i+1][18] <== and[21][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][18];\n\t\tand[22][i].b <== eq[1][i].out;\n\t\tstates[i+1][19] <== and[22][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][19];\n\t\tand[23][i].b <== eq[2][i].out;\n\t\tstates[i+1][20] <== and[23][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][20];\n\t\tand[24][i].b <== eq[3][i].out;\n\t\tstates[i+1][21] <== and[24][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][21];\n\t\tand[25][i].b <== eq[4][i].out;\n\t\tstates[i+1][22] <== and[25][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][22];\n\t\tand[26][i].b <== eq[5][i].out;\n\t\tstates[i+1][23] <== and[26][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][23];\n\t\tand[27][i].b <== eq[6][i].out;\n\t\tstates[i+1][24] <== and[27][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][24];\n\t\tand[28][i].b <== eq[7][i].out;\n\t\tstates[i+1][25] <== and[28][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][25];\n\t\tand[29][i].b <== eq[0][i].out;\n\t\tstates[i+1][26] <== and[29][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][26];\n\t\tand[30][i].b <== eq[22][i].out;\n\t\tstates[i+1][27] <== and[30][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 112;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][27];\n\t\tand[31][i].b <== eq[23][i].out;\n\t\tstates[i+1][28] <== and[31][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][28];\n\t\tand[32][i].b <== eq[7][i].out;\n\t\tstates[i+1][29] <== and[32][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 13;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][29];\n\t\tand[33][i].b <== eq[24][i].out;\n\t\tstates[i+1][30] <== and[33][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 10;\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][30];\n\t\tand[34][i].b <== eq[25][i].out;\n\t\tstates[i+1][31] <== and[34][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][31];\n\t\tand[35][i].b <== eq[11][i].out;\n\t\tstates[i+1][32] <== and[35][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][32];\n\t\tand[36][i].b <== eq[11][i].out;\n\t\tstates[i+1][33] <== and[36][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][33];\n\t\tand[37][i].b <== eq[11][i].out;\n\t\tstates[i+1][34] <== and[37][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][34];\n\t\tand[38][i].b <== eq[11][i].out;\n\t\tstates[i+1][35] <== and[38][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][35];\n\t\tand[39][i].b <== eq[11][i].out;\n\t\tstates[i+1][36] <== and[39][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][36];\n\t\tand[40][i].b <== eq[11][i].out;\n\t\tstates[i+1][37] <== and[40][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][37];\n\t\tand[41][i].b <== eq[11][i].out;\n\t\tstates[i+1][38] <== and[41][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][38];\n\t\tand[42][i].b <== eq[11][i].out;\n\t\tstates[i+1][39] <== and[42][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][39];\n\t\tand[43][i].b <== eq[11][i].out;\n\t\tstates[i+1][40] <== and[43][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][40];\n\t\tand[44][i].b <== eq[11][i].out;\n\t\tstates[i+1][41] <== and[44][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][41];\n\t\tand[45][i].b <== eq[11][i].out;\n\t\tstates[i+1][42] <== and[45][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][42];\n\t\tand[46][i].b <== eq[11][i].out;\n\t\tstates[i+1][43] <== and[46][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][43];\n\t\tand[47][i].b <== eq[11][i].out;\n\t\tstates[i+1][44] <== and[47][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][44];\n\t\tand[48][i].b <== eq[11][i].out;\n\t\tstates[i+1][45] <== and[48][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][45];\n\t\tand[49][i].b <== eq[11][i].out;\n\t\tstates[i+1][46] <== and[49][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][46];\n\t\tand[50][i].b <== eq[11][i].out;\n\t\tstates[i+1][47] <== and[50][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][47];\n\t\tand[51][i].b <== eq[11][i].out;\n\t\tstates[i+1][48] <== and[51][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][48];\n\t\tand[52][i].b <== eq[11][i].out;\n\t\tstates[i+1][49] <== and[52][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][49];\n\t\tand[53][i].b <== eq[0][i].out;\n\t\tstates[i+1][50] <== and[53][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][50];\n\t\tand[54][i].b <== eq[23][i].out;\n\t\tstates[i+1][51] <== and[54][i].out;\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][51];\n\t\tand[55][i].b <== eq[7][i].out;\n\t\tstates[i+1][52] <== and[55][i].out;\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][52];\n\t\tand[56][i].b <== eq[9][i].out;\n\t\tstates[i+1][53] <== and[56][i].out;\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 117;\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][53];\n\t\tand[57][i].b <== eq[26][i].out;\n\t\tstates[i+1][54] <== and[57][i].out;\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== states[i][54];\n\t\tand[58][i].b <== eq[2][i].out;\n\t\tstates[i+1][55] <== and[58][i].out;\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 97;\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== states[i][55];\n\t\tand[59][i].b <== eq[27][i].out;\n\t\tstates[i+1][56] <== and[59][i].out;\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][56];\n\t\tand[60][i].b <== eq[3][i].out;\n\t\tstates[i+1][57] <== and[60][i].out;\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 58;\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][57];\n\t\tand[61][i].b <== eq[28][i].out;\n\t\tstates[i+1][58] <== and[61][i].out;\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== states[i][58];\n\t\tand[62][i].b <== eq[11][i].out;\n\t\tstates[i+1][59] <== and[62][i].out;\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== states[i][59];\n\t\tand[63][i].b <== eq[0][i].out;\n\t\tstates[i+1][60] <== and[63][i].out;\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][60];\n\t\tand[64][i].b <== eq[1][i].out;\n\t\tstates[i+1][61] <== and[64][i].out;\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][61];\n\t\tand[65][i].b <== eq[2][i].out;\n\t\tstates[i+1][62] <== and[65][i].out;\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][62];\n\t\tand[66][i].b <== eq[3][i].out;\n\t\tstates[i+1][63] <== and[66][i].out;\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][63];\n\t\tand[67][i].b <== eq[4][i].out;\n\t\tstates[i+1][64] <== and[67][i].out;\n\t\tstate_changed[i].in[63] <== states[i+1][64];\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][64];\n\t\tand[68][i].b <== eq[5][i].out;\n\t\tstates[i+1][65] <== and[68][i].out;\n\t\tstate_changed[i].in[64] <== states[i+1][65];\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][65];\n\t\tand[69][i].b <== eq[6][i].out;\n\t\tstates[i+1][66] <== and[69][i].out;\n\t\tstate_changed[i].in[65] <== states[i+1][66];\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][66];\n\t\tand[70][i].b <== eq[7][i].out;\n\t\tstates[i+1][67] <== and[70][i].out;\n\t\tstate_changed[i].in[66] <== states[i+1][67];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 44;\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 46;\n\t\tand[71][i] = AND();\n\t\tand[71][i].a <== states[i][67];\n\t\tmulti_or[4][i] = MultiOR(12);\n\t\tmulti_or[4][i].in[0] <== eq[29][i].out;\n\t\tmulti_or[4][i].in[1] <== eq[30][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[12][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[13][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[14][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[15][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[16][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[17][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[18][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[19][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[20][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[21][i].out;\n\t\tand[71][i].b <== multi_or[4][i].out;\n\t\tand[72][i] = AND();\n\t\tand[72][i].a <== states[i][68];\n\t\tand[72][i].b <== multi_or[4][i].out;\n\t\tmulti_or[5][i] = MultiOR(2);\n\t\tmulti_or[5][i].in[0] <== and[71][i].out;\n\t\tmulti_or[5][i].in[1] <== and[72][i].out;\n\t\tstates[i+1][68] <== multi_or[5][i].out;\n\t\tstate_changed[i].in[67] <== states[i+1][68];\n\t\tand[73][i] = AND();\n\t\tand[73][i].a <== states[i][68];\n\t\tand[73][i].b <== eq[11][i].out;\n\t\tstates[i+1][69] <== and[73][i].out;\n\t\tstate_changed[i].in[68] <== states[i+1][69];\n\t\tand[74][i] = AND();\n\t\tand[74][i].a <== states[i][69];\n\t\tand[74][i].b <== eq[9][i].out;\n\t\tstates[i+1][70] <== and[74][i].out;\n\t\tstate_changed[i].in[69] <== states[i+1][70];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 76;\n\t\tand[75][i] = AND();\n\t\tand[75][i].a <== states[i][70];\n\t\tand[75][i].b <== eq[31][i].out;\n\t\tstates[i+1][71] <== and[75][i].out;\n\t\tstate_changed[i].in[70] <== states[i+1][71];\n\t\tand[76][i] = AND();\n\t\tand[76][i].a <== states[i][71];\n\t\tand[76][i].b <== eq[0][i].out;\n\t\tstates[i+1][72] <== and[76][i].out;\n\t\tstate_changed[i].in[71] <== states[i+1][72];\n\t\tand[77][i] = AND();\n\t\tand[77][i].a <== states[i][72];\n\t\tand[77][i].b <== eq[22][i].out;\n\t\tstates[i+1][73] <== and[77][i].out;\n\t\tstate_changed[i].in[72] <== states[i+1][73];\n\t\tand[78][i] = AND();\n\t\tand[78][i].a <== states[i][73];\n\t\tand[78][i].b <== eq[1][i].out;\n\t\tstates[i+1][74] <== and[78][i].out;\n\t\tstate_changed[i].in[73] <== states[i+1][74];\n\t\tand[79][i] = AND();\n\t\tand[79][i].a <== states[i][74];\n\t\tand[79][i].b <== eq[2][i].out;\n\t\tstates[i+1][75] <== and[79][i].out;\n\t\tstate_changed[i].in[74] <== states[i+1][75];\n\t\tand[80][i] = AND();\n\t\tand[80][i].a <== states[i][75];\n\t\tand[80][i].b <== eq[3][i].out;\n\t\tstates[i+1][76] <== and[80][i].out;\n\t\tstate_changed[i].in[75] <== states[i+1][76];\n\t\tand[81][i] = AND();\n\t\tand[81][i].a <== states[i][76];\n\t\tand[81][i].b <== eq[4][i].out;\n\t\tstates[i+1][77] <== and[81][i].out;\n\t\tstate_changed[i].in[76] <== states[i+1][77];\n\t\tand[82][i] = AND();\n\t\tand[82][i].a <== states[i][77];\n\t\tand[82][i].b <== eq[5][i].out;\n\t\tstates[i+1][78] <== and[82][i].out;\n\t\tstate_changed[i].in[77] <== states[i+1][78];\n\t\tand[83][i] = AND();\n\t\tand[83][i].a <== states[i][78];\n\t\tand[83][i].b <== eq[6][i].out;\n\t\tstates[i+1][79] <== and[83][i].out;\n\t\tstate_changed[i].in[78] <== states[i+1][79];\n\t\tand[84][i] = AND();\n\t\tand[84][i].a <== states[i][79];\n\t\tand[84][i].b <== eq[7][i].out;\n\t\tstates[i+1][80] <== and[84][i].out;\n\t\tstate_changed[i].in[79] <== states[i+1][80];\n\t\tand[85][i] = AND();\n\t\tand[85][i].a <== states[i][80];\n\t\tand[85][i].b <== eq[0][i].out;\n\t\tstates[i+1][81] <== and[85][i].out;\n\t\tstate_changed[i].in[80] <== states[i+1][81];\n\t\tand[86][i] = AND();\n\t\tand[86][i].a <== states[i][81];\n\t\tand[86][i].b <== eq[8][i].out;\n\t\tstates[i+1][82] <== and[86][i].out;\n\t\tstate_changed[i].in[81] <== states[i+1][82];\n\t\tand[87][i] = AND();\n\t\tand[87][i].a <== states[i][82];\n\t\tand[87][i].b <== eq[3][i].out;\n\t\tstates[i+1][83] <== and[87][i].out;\n\t\tstate_changed[i].in[82] <== states[i+1][83];\n\t\tand[88][i] = AND();\n\t\tand[88][i].a <== states[i][83];\n\t\tand[88][i].b <== eq[7][i].out;\n\t\tstates[i+1][84] <== and[88][i].out;\n\t\tstate_changed[i].in[83] <== states[i+1][84];\n\t\tand[89][i] = AND();\n\t\tand[89][i].a <== states[i][84];\n\t\tand[89][i].b <== eq[24][i].out;\n\t\tstates[i+1][85] <== and[89][i].out;\n\t\tstate_changed[i].in[84] <== states[i+1][85];\n\t\tand[90][i] = AND();\n\t\tand[90][i].a <== states[i][85];\n\t\tand[90][i].b <== eq[25][i].out;\n\t\tstates[i+1][86] <== and[90][i].out;\n\t\tstate_changed[i].in[85] <== states[i+1][86];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][86];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][86] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][9] * states[i+2][1];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n\tsignal is_substr1[msg_bytes][5];\n\tsignal is_reveal1[msg_bytes];\n\tsignal output reveal1[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr1[i][0] <== 0;\n\t\tis_substr1[i][1] <== is_substr1[i][0] + states[i+1][13] * states[i+2][14];\n\t\tis_substr1[i][2] <== is_substr1[i][1] + states[i+1][14] * states[i+2][15];\n\t\tis_substr1[i][3] <== is_substr1[i][2] + states[i+1][15] * states[i+2][16];\n\t\tis_substr1[i][4] <== is_substr1[i][3] + states[i+1][16] * states[i+2][16];\n\t\tis_reveal1[i] <== is_substr1[i][4] * is_consecutive[i][1];\n\t\treveal1[i] <== in[i+1] * is_reveal1[i];\n\t}\n\tsignal is_substr2[msg_bytes][3];\n\tsignal is_reveal2[msg_bytes];\n\tsignal output reveal2[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr2[i][0] <== 0;\n\t\tis_substr2[i][1] <== is_substr2[i][0] + states[i+1][67] * states[i+2][68];\n\t\tis_substr2[i][2] <== is_substr2[i][1] + states[i+1][68] * states[i+2][68];\n\t\tis_reveal2[i] <== is_substr2[i][2] * is_consecutive[i][1];\n\t\treveal2[i] <== in[i+1] * is_reveal2[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_payment_details.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<strong>\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"[^<]+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<br>\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"TR(0|1|2|3|4|5|6|7|8|9| )+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"</strong></p>\\r\\n                  <p>Tutar: <strong>\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9|\\\\.|,)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \" TL</strong><br>\\r\\n\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_subject.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate GarantiSubjectRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[24][num_bytes];\n\tcomponent and[41][num_bytes];\n\tsignal states[num_bytes+1][42];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 42; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(41);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 105;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][41];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 108;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 103;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[0][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[1][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 101;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[3][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 110;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[4][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 100;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[5][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[0][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 114;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[6][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 109;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[7][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[3][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 115;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][12];\n\t\tand[12][i].b <== eq[8][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[0][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 13;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[9][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 10;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[10][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 83;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][0];\n\t\tand[16][i].b <== eq[11][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 117;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[12][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 98;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[13][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 106;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[14][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[3][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 99;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[15][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 116;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][22];\n\t\tand[22][i].b <== eq[16][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 58;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[17][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 32;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tand[24][i].b <== eq[18][i].out;\n\t\tstates[i+1][25] <== and[24][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 80;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tand[25][i].b <== eq[19][i].out;\n\t\tstates[i+1][26] <== and[25][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 97;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][26];\n\t\tand[26][i].b <== eq[20][i].out;\n\t\tstates[i+1][27] <== and[26][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][27];\n\t\tand[27][i].b <== eq[6][i].out;\n\t\tstates[i+1][28] <== and[27][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][28];\n\t\tand[28][i].b <== eq[20][i].out;\n\t\tstates[i+1][29] <== and[28][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][29];\n\t\tand[29][i].b <== eq[18][i].out;\n\t\tstates[i+1][30] <== and[29][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 84;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][30];\n\t\tand[30][i].b <== eq[21][i].out;\n\t\tstates[i+1][31] <== and[30][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][31];\n\t\tand[31][i].b <== eq[6][i].out;\n\t\tstates[i+1][32] <== and[31][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][32];\n\t\tand[32][i].b <== eq[20][i].out;\n\t\tstates[i+1][33] <== and[32][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][33];\n\t\tand[33][i].b <== eq[4][i].out;\n\t\tstates[i+1][34] <== and[33][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][34];\n\t\tand[34][i].b <== eq[8][i].out;\n\t\tstates[i+1][35] <== and[34][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 102;\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][35];\n\t\tand[35][i].b <== eq[22][i].out;\n\t\tstates[i+1][36] <== and[35][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][36];\n\t\tand[36][i].b <== eq[3][i].out;\n\t\tstates[i+1][37] <== and[36][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][37];\n\t\tand[37][i].b <== eq[6][i].out;\n\t\tstates[i+1][38] <== and[37][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][38];\n\t\tand[38][i].b <== eq[0][i].out;\n\t\tstates[i+1][39] <== and[38][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][39];\n\t\tand[39][i].b <== eq[18][i].out;\n\t\tstates[i+1][40] <== and[39][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 66;\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][40];\n\t\tand[40][i].b <== eq[23][i].out;\n\t\tstates[i+1][41] <== and[40][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][16];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][16] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_subject.json",
    "content": "{\n    \"parts\": [\n      {\n        \"is_public\": false,\n        \"regex_def\": \"Subject: Para Transferi Bilgilendirmesi\\r\\n\"\n      }\n    ]\n  }\n  "
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_timestamp.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate GarantiTimestampRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[28][num_bytes];\n\tcomponent and[29][num_bytes];\n\tcomponent multi_or[2][num_bytes];\n\tsignal states[num_bytes+1][29];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 29; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(28);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 61;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][28];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 102;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 114;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 111;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 109;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[4][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 58;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[5][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 115;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[6][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 117;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[7][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 98;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[8][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 106;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[9][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 101;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[10][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 99;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[11][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 116;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][12];\n\t\tand[12][i].b <== eq[12][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[5][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[12][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[3][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tand[16][i].b <== eq[5][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[11][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[11][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 59;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[13][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 13;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[14][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 10;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[15][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][0];\n\t\tand[22][i].b <== eq[12][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[0][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 48;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 49;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 50;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 51;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 52;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 53;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 54;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 55;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 56;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 57;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== eq[16][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[17][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[18][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[19][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[20][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[21][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[22][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[23][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[24][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[25][i].out;\n\t\tand[24][i].b <== multi_or[0][i].out;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tand[25][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[24][i].out;\n\t\tmulti_or[1][i].in[1] <== and[25][i].out;\n\t\tstates[i+1][25] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][25];\n\t\tand[26][i].b <== eq[13][i].out;\n\t\tstates[i+1][26] <== and[26][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 32;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][26];\n\t\tand[27][i].b <== eq[26][i].out;\n\t\tstates[i+1][27] <== and[27][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 104;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][27];\n\t\tand[28][i].b <== eq[27][i].out;\n\t\tstates[i+1][28] <== and[28][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][22];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][22] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][24] * states[i+2][25];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][25] * states[i+2][25];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/garanti/regexes/garanti_timestamp.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"t=\"\n        }, \n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"; h=from:subject:to:cc;\\r\\n\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/garanti_registration.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, chunkedBytesToBigInt, base64ToByteArray, packedToBytes } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\n\ndescribe(\"Garanti registration WASM tester\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let cir_hasher;\n    let poseidon;\n    let mimcSponge;\n    let account;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../garanti_registration.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/garanti_registration\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        cir_hasher = await wasm_tester(\n            path.join(__dirname, \"../garanti_body_suffix_hasher.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/garanti_body_suffix_hasher\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example garanti_send.eml to run tests \n        // Otherwise, you can download the original eml from any garanti send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct intermediate hash packed\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // This is a workaround to use our divided hasher because no JS SHA256 libraries do not support a precomputed initial state\n        // We test that the precomputed SHA hashed + intermediate body is equal to the expected SHA from the registration circuit\n\n        let paddedArray = Array.from({ length: 10752 }, (v, i) => input[\"in_body_padded\"][i] || \"0\");\n\n        const hasher_witness = await cir_hasher.calculateWitness(\n            {\n                intermediate_hash: input[\"precomputed_sha\"],\n                in_body_suffix_padded: paddedArray,\n                in_body_suffix_len_padded_bytes: input[\"in_body_len_padded_bytes\"],\n            },\n            true\n        );\n\n        assert(Fr.eq(Fr.e(hasher_witness[0]), Fr.e(1)));\n        assert.equal(witness[2], hasher_witness[3], true);\n        assert.equal(witness[3], hasher_witness[4], true);\n    });\n\n    it(\"Should return the correct body hash packed\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get expected body hash packed\n        const regex_start_body_hash = Number(input[\"body_hash_idx\"]);\n        const regex_start_sub_array_body_hash = input[\"in_padded\"].slice(regex_start_body_hash);\n        const regex_end_body_hash = regex_start_sub_array_body_hash.indexOf(\"59\"); // Look for ; to end the from which is 59 in ascii.\n        const body_hash_array = regex_start_sub_array_body_hash.slice(0, regex_end_body_hash);\n\n        // Decode body hash\n        const expectedBodyHashArray = base64ToByteArray(body_hash_array);\n\n        const bodyHashChunkedArray = chunkArray(expectedBodyHashArray, 16, 32);\n        const expectedFirst = bytesToPacked(bodyHashChunkedArray[0]);\n        const expectedSecond = bytesToPacked(bodyHashChunkedArray[1]);\n\n        assert.equal(witness[4], expectedFirst, true);\n        assert.equal(witness[5], expectedSecond, true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example garanti_send.eml to run tests \n        // Otherwise, you can download the original eml from any garanti send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 6 to 11 represent the packed from email (31 \\ 7)\n        const packed_from_email = witness.slice(6, 11);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<garanti@garanti.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 31);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"should return the correct hashed onramper id\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example garanti_send.eml to run tests \n        // Otherwise, you can download the original eml from any garanti send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed onramper id\n        const hashed_onramper_id = witness[11];\n\n        // Get expected packed to email\n        const regex_start_to_email = Number(input[\"email_to_idx\"]);\n        const regex_start_sub_array_to_email = input[\"in_padded\"].slice(regex_start_to_email);\n        const regex_end_to_email = regex_start_sub_array_to_email.indexOf(\"13\"); // Look for `\\r` to end the from which is 13 in ascii. e.g. `to:0xAnonKumar@gmail.com`\n        const to_email_array = regex_start_sub_array_to_email.slice(0, regex_end_to_email);\n\n        // Get expected packed account number array\n        const regex_start_mobile_number = Number(input[\"garanti_payer_mobile_num_idx\"]);\n        const regex_start_sub_array_mobile_number = input[\"in_body_padded\"].slice(regex_start_mobile_number);\n        const regex_end_mobile_number = regex_start_sub_array_mobile_number.indexOf(\"60\"); // Look for `<` to end the from which is 60 in ascii.\n        const mobile_number_array = regex_start_sub_array_mobile_number.slice(0, regex_end_mobile_number);\n\n        // Chunk bytes into 7 and pack\n        const toEmailChunkedArray = chunkArray(to_email_array, 7, 49);\n        const packed_to_email_array = toEmailChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const mobileNumberChunkedArray = chunkArray(mobile_number_array, 7, 7);\n        const packed_mobile_number_array = mobileNumberChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const combinedArray = packed_to_email_array.concat(packed_mobile_number_array);\n        const expected_hash = poseidon(combinedArray)\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should fail if padding is not all zeroes\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        input[\"in_body_padded\"][input[\"in_body_padded\"].length - 2] = \"1\";\n\n        try {\n            const witness = await cir.calculateWitness(input, true);\n            await cir.checkConstraints(witness);\n        } catch (error) {\n            expect((error as Error).message).toMatch(\"Assert Failed\");\n        }\n    });\n\n    describe(\"Body Suffix Hasher\", function () {\n        it(\"Should generate witnesses\", async () => {\n            // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example garanti_send.eml to run tests \n            // Otherwise, you can download the original eml from any garanti send payment transaction\n            const input_path = path.join(__dirname, \"../inputs/input_garanti_body_suffix_hasher.json\");\n            const jsonString = fs.readFileSync(input_path, \"utf8\");\n            const input = JSON.parse(jsonString);\n            const witness = await cir_hasher.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n        });\n\n        it(\"Should return the packed precomputed SHA equal to output SHA of Garanti registration\", async () => {\n            const input_hasher_path = path.join(__dirname, \"../inputs/input_garanti_body_suffix_hasher.json\");\n            const jsonStringHasher = fs.readFileSync(input_hasher_path, \"utf8\");\n            const input_hasher = JSON.parse(jsonStringHasher);\n            const witness_hasher = await cir_hasher.calculateWitness(\n                input_hasher,\n                true\n            );\n            const input_registration_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n            const jsonStringRegistration = fs.readFileSync(input_registration_path, \"utf8\");\n            const input_registration = JSON.parse(jsonStringRegistration);\n            const witness_registration = await cir.calculateWitness(\n                input_registration,\n                true\n            );\n\n            assert.equal(witness_hasher[1], witness_registration[2], true);\n            assert.equal(witness_hasher[2], witness_registration[3], true);\n        });\n\n        it(\"Should return the same body hash packed as Garanti registration\", async () => {\n            const input_hasher_path = path.join(__dirname, \"../inputs/input_garanti_body_suffix_hasher.json\");\n            const jsonStringHasher = fs.readFileSync(input_hasher_path, \"utf8\");\n            const input_hasher = JSON.parse(jsonStringHasher);\n            const witness_hasher = await cir_hasher.calculateWitness(\n                input_hasher,\n                true\n            );\n            const input_registration_path = path.join(__dirname, \"../inputs/input_garanti_registration.json\");\n            const jsonStringRegistration = fs.readFileSync(input_registration_path, \"utf8\");\n            const input_registration = JSON.parse(jsonStringRegistration);\n            const witness_registration = await cir.calculateWitness(\n                input_registration,\n                true\n            );\n\n            assert.equal(witness_hasher[3], witness_registration[4], true);\n            assert.equal(witness_hasher[4], witness_registration[5], true);\n        });\n    })\n});"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/garanti_send.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport {\n    chunkArray,\n    bytesToPacked,\n    chunkedBytesToBigInt,\n    packedToBytes,\n    base64ToByteArray,\n    packNullifier,\n    hashSignatureGenRand\n} from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\nimport { partialSha } from \"@zk-email/helpers/src/shaHash\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\n// Constants used in the circuit\nconst N = 121;\nconst K = 17;\n\ndescribe(\"Garanti send WASM tester\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let cir_hasher;\n    let poseidon;\n    let mimcSponge;\n    let account;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../garanti_send.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/garanti_send\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        cir_hasher = await wasm_tester(\n            path.join(__dirname, \"../garanti_body_suffix_hasher.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/garanti_body_suffix_hasher\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct intermediate hash packed\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // This is a workaround to use our divided hasher because no JS SHA256 libraries do not support a precomputed initial state\n        // We test that the precomputed SHA hashed + intermediate body is equal to the expected SHA from the send circuit\n        let paddedArray = Array.from({ length: 10752 }, (v, i) => input[\"in_body_padded\"][i] || \"0\");\n\n        const hasher_witness = await cir_hasher.calculateWitness(\n            {\n                intermediate_hash: input[\"precomputed_sha\"],\n                in_body_suffix_padded: paddedArray,\n                in_body_suffix_len_padded_bytes: input[\"in_body_len_padded_bytes\"],\n            },\n            true\n        );\n\n        assert(Fr.eq(Fr.e(hasher_witness[0]), Fr.e(1)));\n        assert.equal(witness[2], hasher_witness[3], true);\n        assert.equal(witness[3], hasher_witness[4], true);\n    });\n\n    it(\"Should return the correct body hash packed\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get expected body hash packed\n        const regex_start_body_hash = Number(input[\"body_hash_idx\"]);\n        const regex_start_sub_array_body_hash = input[\"in_padded\"].slice(regex_start_body_hash);\n        const regex_end_body_hash = regex_start_sub_array_body_hash.indexOf(\"59\"); // Look for ; to end the from which is 59 in ascii.\n        const body_hash_array = regex_start_sub_array_body_hash.slice(0, regex_end_body_hash);\n\n        // Decode body hash\n        const expectedBodyHashArray = base64ToByteArray(body_hash_array);\n\n        const bodyHashChunkedArray = chunkArray(expectedBodyHashArray, 16, 32);\n        const expectedFirst = bytesToPacked(bodyHashChunkedArray[0]);\n        const expectedSecond = bytesToPacked(bodyHashChunkedArray[1]);\n\n        assert.equal(witness[4], expectedFirst, true);\n        assert.equal(witness[5], expectedSecond, true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 6 to 11 represent the packed from email (31 \\ 7)\n        const packed_from_email = witness.slice(6, 11);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 31);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"Should return the correct packed timestamp\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed timestamp\n        const packed_timestamp = witness.slice(11, 13);\n\n        // Get expected packed timestamp\n        const regex_start = Number(input[\"email_timestamp_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"59\"); // Look for `;` to end the timestamp which is 59 in ascii\n        const timestamp_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(timestamp_array, 7, 10);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed timestamp is the same\n            assert.equal(expectedValue, packed_timestamp[i], true);\n        });\n    });\n\n    it(\"should return the correct packed payee name\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed payee name\n        const packed_payee_name = witness.slice(13, 19);\n\n        // Get expected packed payee name\n        const regex_start = Number(input[\"garanti_payee_name_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"60\"); // Look for `<` to end the payee name which is 60 in ascii\n        const payee_name_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(payee_name_array, 7, 42);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed payee name is the same\n            assert.equal(expectedValue, packed_payee_name[i], true);\n        });\n\n    });\n\n    it(\"should return the correct packed payee account number\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed acc num\n        const packed_payee_acc_num = witness.slice(19, 24);\n\n        // Get expected packed payee_acc_num\n        const regex_start = Number(input[\"garanti_payee_acc_num_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"60\"); // Look for `<` to end the payee_acc_num which is 60 in ascii\n        const payee_acc_num_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(payee_acc_num_array, 7, 32);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed payee_acc_num is the same\n            assert.equal(expectedValue, packed_payee_acc_num[i], true);\n        });\n\n    });\n\n    it(\"Should return the correct packed amount\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed amount\n        const packed_amount = witness.slice(24, 26);\n\n        // Get expected packed amount\n        const regex_start = Number(input[\"garanti_amount_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"32\"); // Look for ` ` to end the amount which is 32 in ascii\n        const amount_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(amount_array, 7, 8);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed amount is the same\n            assert.equal(expectedValue, packed_amount[i], true);\n        });\n    });\n\n    it(\"should return the correct hashed onramper id\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed onramper id\n        const hashed_onramper_id = witness[26];\n\n        // Get expected packed to email\n        const regex_start_to_email = Number(input[\"email_to_idx\"]);\n        const regex_start_sub_array_to_email = input[\"in_padded\"].slice(regex_start_to_email);\n        const regex_end_to_email = regex_start_sub_array_to_email.indexOf(\"13\"); // Look for `\\r` to end the from which is 13 in ascii. e.g. `to:0xAnonKumar@gmail.com`\n        const to_email_array = regex_start_sub_array_to_email.slice(0, regex_end_to_email);\n\n        // Get expected packed account number array\n        const regex_start_mobile_number = Number(input[\"garanti_payer_mobile_num_idx\"]);\n        const regex_start_sub_array_mobile_number = input[\"in_body_padded\"].slice(regex_start_mobile_number);\n        const regex_end_mobile_number = regex_start_sub_array_mobile_number.indexOf(\"60\"); // Look for `<` to end the from which is 60 in ascii.\n        const mobile_number_array = regex_start_sub_array_mobile_number.slice(0, regex_end_mobile_number);\n\n        // Chunk bytes into 7 and pack\n        const toEmailChunkedArray = chunkArray(to_email_array, 7, 49);\n        const packed_to_email_array = toEmailChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const mobileNumberChunkedArray = chunkArray(mobile_number_array, 7, 7);\n        const packed_mobile_number_array = mobileNumberChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const combinedArray = packed_to_email_array.concat(packed_mobile_number_array);\n        const expected_hash = poseidon(combinedArray)\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct nullifier\", async () => {\n        const venmo_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned nullifier\n        const nullifier = witness[27];\n\n        // Get expected nullifier\n        const sha_out = await partialSha(input[\"in_padded\"], input[\"in_len_padded_bytes\"]);\n        const packed_nullifier = packNullifier(sha_out);\n        const cm_rand = hashSignatureGenRand(input[\"signature\"], N, K, poseidon);\n        const expected_nullifier = poseidon([cm_rand, packed_nullifier])\n        assert.equal(JSON.stringify(poseidon.F.e(nullifier)), JSON.stringify(expected_nullifier), true);\n    });\n\n    it(\"Should return the correct intent hash\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus\n        const intent_hash = witness[28];\n\n        // Get expected modulus\n        const expected_intent_hash = input[\"intent_hash\"];\n\n        assert.equal(JSON.stringify(intent_hash), JSON.stringify(expected_intent_hash), true);\n    });\n\n    it(\"Should fail if padding is not all zeroes\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        input[\"in_body_padded\"][input[\"in_body_padded\"].length - 2] = \"1\";\n\n        try {\n            const witness = await cir.calculateWitness(input, true);\n            await cir.checkConstraints(witness);\n        } catch (error) {\n            expect((error as Error).message).toMatch(\"Assert Failed\");\n        }\n    });\n\n    describe(\"Body Suffix Hasher\", function () {\n        it(\"Should generate witnesses\", async () => {\n            // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example garanti_send.eml to run tests \n            // Otherwise, you can download the original eml from any garanti send payment transaction\n            const input_path = path.join(__dirname, \"../inputs/input_garanti_body_suffix_hasher.json\");\n            const jsonString = fs.readFileSync(input_path, \"utf8\");\n            const input = JSON.parse(jsonString);\n            const witness = await cir_hasher.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n        });\n\n        it(\"Should return the packed precomputed SHA equal to output SHA of Garanti send\", async () => {\n            const input_hasher_path = path.join(__dirname, \"../inputs/input_garanti_body_suffix_hasher.json\");\n            const jsonStringHasher = fs.readFileSync(input_hasher_path, \"utf8\");\n            const input_hasher = JSON.parse(jsonStringHasher);\n            const witness_hasher = await cir_hasher.calculateWitness(\n                input_hasher,\n                true\n            );\n            const input_send_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n            const jsonStringSend = fs.readFileSync(input_send_path, \"utf8\");\n            const input_send = JSON.parse(jsonStringSend);\n            const witness_send = await cir.calculateWitness(\n                input_send,\n                true\n            );\n\n            assert.equal(witness_hasher[1], witness_send[2], true);\n            assert.equal(witness_hasher[2], witness_send[3], true);\n        });\n\n        it(\"Should return the same body hash packed as Garanti send\", async () => {\n            const input_hasher_path = path.join(__dirname, \"../inputs/input_garanti_body_suffix_hasher.json\");\n            const jsonStringHasher = fs.readFileSync(input_hasher_path, \"utf8\");\n            const input_hasher = JSON.parse(jsonStringHasher);\n            const witness_hasher = await cir_hasher.calculateWitness(\n                input_hasher,\n                true\n            );\n            const input_send_path = path.join(__dirname, \"../inputs/input_garanti_send.json\");\n            const jsonStringSend = fs.readFileSync(input_send_path, \"utf8\");\n            const input_send = JSON.parse(jsonStringSend);\n            const witness_send = await cir.calculateWitness(\n                input_send,\n                true\n            );\n\n            assert.equal(witness_hasher[3], witness_send[4], true);\n            assert.equal(witness_hasher[4], witness_send[5], true);\n        });\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/mocks/test_garanti_payer_details.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/garanti_payer_details.circom\";\n\ncomponent main = GarantiPayerDetailsRegex(160);"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/mocks/test_garanti_payment_details.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/garanti_payment_details.circom\";\n\ncomponent main = GarantiPaymentDetailsRegex(228);"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/mocks/test_garanti_subject.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/garanti_subject.circom\";\n\ncomponent main = GarantiSubjectRegex(43);\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/mocks/test_garanti_timestamp.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/garanti_timestamp.circom\";\n\ncomponent main = GarantiTimestampRegex(46);"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/regexes/garanti_payer_details.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Garanti payer details\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_garanti_payer_details.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../../build/test_garanti_payer_details\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textUtf8ToAsciiArray(text: string): string[] {\n        const utf8Encoder = new TextEncoder(); // TextEncoder encodes into UTF-8 by default\n        const utf8Bytes = utf8Encoder.encode(text);\n        return Array.from(utf8Bytes).map(byte => byte.toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"          <p>G&ouml;nderen Bilgileri:<br>\\r\\n\" +\n                \"                    <strong>ĞÜÖÇıİçğİ SSŞİşöü<br>Ş BBESEE -  1111<br>1233362</strong></p>\\r\\n\" +\n                \"        <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n           \"msg\": textUtf8ToAsciiArray(\n                \"          <p>G&ouml;nderen Bilgileri:<br>\\r\\n\" +\n                \"                    <strong>ĞÜÖÇıİçğİ SSŞİşöü<br>Ş BBESEE -  1111<br>1233362</strong></p>\\r\\n\" +\n                \"        <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal number regex correctly\", async () => {\n        const input = {\n           \"msg\": textUtf8ToAsciiArray(\n                \"          <p>G&ouml;nderen Bilgileri:<br>\\r\\n\" +\n                \"                    <strong>ĞÜÖÇıİçğİ SSŞİşöü<br>Ş BBESEE -  1111<br>1233362</strong></p>\\r\\n\" +\n                \"        <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textUtf8ToAsciiArray(\"          <p>G&ouml;nderen Bilgileri:<br>\\r\\n                    <strong>ĞÜÖÇıİçğİ SSŞİşöü<br>Ş BBESEE -  1111<br>\").length).fill(\"0\")\n            .concat(textUtf8ToAsciiArray(\"1233362\"))\n            .concat(Array(textUtf8ToAsciiArray(\"</strong></p>\\r\\n        <p>\").length).fill(\"0\"))\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"          <p>G&ouml;nderen Bilgileri:<br>\\r\\n\" +\n                \"                    <strong>ĞÜÖÇıİçğİ SSŞİşöü<bl>Ş BBESEE -  1111<br>1233362</strong></p>\\r\\n\" +\n                \"        <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/regexes/garanti_payment_details.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Garanti payment details\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_garanti_payment_details.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../../build/test_garanti_payment_details\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textUtf8ToAsciiArray(text: string): string[] {\n        const utf8Encoder = new TextEncoder(); // TextEncoder encodes into UTF-8 by default\n        const utf8Bytes = utf8Encoder.encode(text);\n        return Array.from(utf8Bytes).map(byte => byte.toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"Alıcı Bilgileri: <br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\t<strong>ğİşü Şıçşö<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n\" +\n                \"                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"Alıcı Bilgileri: <br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\t<strong>ğİşü Şıçşö<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n\" +\n                \"                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal first regex correctly\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"Alıcı Bilgileri: <br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\t<strong>ğİşü Şıçşö<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n\" +\n                \"                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textUtf8ToAsciiArray(\"Alıcı Bilgileri: <br>\\r\\n\\t\\t\\t\\t\\t<strong>\").length).fill(\"0\")\n            .concat(textUtf8ToAsciiArray(\"ğİşü Şıçşö\"))\n            .concat(Array(textUtf8ToAsciiArray(\"<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\").length).fill(\"0\"))\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should reveal second regex correctly\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"Alıcı Bilgileri: <br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\t<strong>ğİşü Şıçşö<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n\" +\n                \"                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textUtf8ToAsciiArray(\"Alıcı Bilgileri: <br>\\r\\n\\t\\t\\t\\t\\t<strong>ğİşü Şıçşö<br>\").length).fill(\"0\")\n            .concat(textUtf8ToAsciiArray(\"TR11 0000 1111 3333 2222 1111 99\"))\n            .concat(Array(textUtf8ToAsciiArray(\"</strong></p>\\r\\n                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\").length).fill(\"0\"))\n        const result = witness.slice(input.msg.length + 2, input.msg.length * 2 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should reveal third regex correctly\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"Alıcı Bilgileri: <br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\t<strong>ğİşü Şıçşö<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n\" +\n                \"                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textUtf8ToAsciiArray(\"Alıcı Bilgileri: <br>\\r\\n\\t\\t\\t\\t\\t<strong>ğİşü Şıçşö<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n                  <p>Tutar: <strong>\").length).fill(\"0\")\n            .concat(textUtf8ToAsciiArray(\"800,00\"))\n            .concat(Array(textUtf8ToAsciiArray(\" TL</strong><br>\\r\\n\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\").length).fill(\"0\"))\n        const result = witness.slice(input.msg.length * 2 + 2, input.msg.length * 3 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textUtf8ToAsciiArray(\n                \"Alıcı Bilgileri: <br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\t<strong>ğİşü <Şıçaö<br>TR11 0000 1111 3333 2222 1111 99</strong></p>\\r\\n\" +\n                \"                  <p>Tutar: <strong>800,00 TL</strong><br>\\r\\n\" +\n                \"\\t\\t\\t\\t\\tİşlem Tarihi:<strong> 21.12.2023 14:21</strong><br>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/regexes/garanti_subject.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Garanti Subject\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_garanti_subject.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../../build/test_garanti_subject\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nSubject: Para Transferi Bilgilendirmesi\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nSubject: Para Transferi Bilgilendirmesi\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nsubject: Para Transferi Bilgilendirmesi\\r\\n\")   // subject is lowercase\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/garanti/test/regexes/garanti_timestamp.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Garanti timestamp\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_garanti_timestamp.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../../build/test_garanti_timestamp\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"aaa\\r\\n t=1703416861; h=from:subject:to:cc;\\r\\naaa\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"aaa\\r\\n t=1703416861; h=from:subject:to:cc;\\r\\naaa\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"aaa\\r\\n t=1703416861; h=from:subject:to:cc;\\r\\naaa\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"aaa\\r\\n t=\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"1703416861\"))\n            .concat(Array(textToAsciiArray(\"; h=from:subject:to:cc;\\r\\naaa\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"aaa\\r\\n T=1703416861; h=from:subject:to:cc;\\r\\naaa\")     // T instead of t\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/garanti/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\",  \"test/regexes/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJIQgQQHhogASgCSBAqBEAgASgCOEEBQQAQFCABQQA2AkwMAQsgASABKAJIEB1B//8Dca03AyggASABKAJIEB1B//8Dca03AyAgASkDICABKQMoUgRAIAEoAjhBE0EAEBQgAUEANgJMDAELIAEgASgCSBAqrTcDGCABIAEoAkgQKq03AxAgASkDECABKQMQIAEpAxh8VgRAIAEoAjhBBEEWEBQgAUEANgJMDAELIAEpAxAgASkDGHwgASkDQCABKQMIfFYEQCABKAI4QRVBABAUIAFBADYCTAwBCwJAIAEoAjxBBHFFDQAgASkDECABKQMYfCABKQNAIAEpAwh8UQ0AIAEoAjhBFUEAEBQgAUEANgJMDAELIAEgASkDICABKAI4EJABIgU2AjQgBUUEQCABQQA2AkwMAQsgASgCNEEAOgAsIAEoAjQgASkDGDcDGCABKAI0IAEpAxA3AyAgASABKAI0NgJMCyABKAJMIQUgAUHQAGokACAAIAU2AlALIAAoAlBFBEAgAEEANgJsDAELIAAoAmQgACkDMEIUfBAsGiAAIAAoAmQQHTsBTiAAKAJQKQMgIAAoAlApAxh8IAApA1ggACkDMHxWBEAgACgCVEEVQQAQFCAAKAJQECUgAEEANgJsDAELAkAgAC8BTkUEQCAAKAJoKAIEQQRxRQ0BCyAAKAJkIAApAzBCFnwQLBogACAAKAJkEDA3AyACQCAAKQMgIAAvAU6tWgRAIAAoAmgoAgRBBHFFDQEgACkDICAALwFOrVENAQsgACgCVEEVQQAQFCAAKAJQECUgAEEANgJsDAILIAAvAU4EQCAAKAJkIAAvAU6tEB4gAC8BTkEAIAAoAlQQUCEBIAAoAlAgATYCKCABRQRAIAAoAlAQJSAAQQA2AmwMAwsLCwJAIAAoAlApAyAgACkDWFoEQCAAKAJkIAAoAlApAyAgACkDWH0QLBogACAAKAJkIAAoAlApAxgQHiIBNgIcIAFFBEAgACgCVEEVQQAQFCAAKAJQECUgAEEANgJsDAMLIAAgACgCHCAAKAJQKQMYECkiATYCLCABRQRAIAAoAlRBDkEAEBQgACgCUBAlIABBADYCbAwDCwwBCyAAQQA2AiwgACgCaCgCACAAKAJQKQMgQQAQJ0EASARAIAAoAlQgACgCaCgCABAXIAAoAlAQJSAAQQA2AmwMAgsgACgCaCgCABBJIAAoAlApAyBSBEAgACgCVEETQQAQFCAAKAJQECUgAEEANgJsDAILCyAAIAAoAlApAxg3AzggAEIANwNAA0ACQCAAKQM4UA0AIABBADoAGyAAKQNAIAAoAlApAwhRBEAgACgCUC0ALEEBcQ0BIAApAzhCLlQNASAAKAJQQoCABCAAKAJUEI8BQQFxRQRAIAAoAlAQJSAAKAIsEBYgAEEANgJsDAQLIABBAToAGwsjAEEQayIBJAAgAUHYABAYIgU2AggCQCAFRQRAIAFBADYCDAwBCyABKAIIEFMgASABKAIINgIMCyABKAIMIQUgAUEQaiQAIAUhASAAKAJQKAIAIAApA0CnQQR0aiABNgIAAkAgAQRAIAAgACgCUCgCACAAKQNAp0EEdGooAgAgACgCaCgCACAAKAIsQQAgACgCVBCMASIJNwMQIAlCAFkNAQsCQCAALQAbQQFxRQ0AIwBBEGsiASAAKAJUNgIMIAEoAgwoAgBBE0cNACAAKAJUQRVBABAUCyAAKAJQECUgACgCLBAWIABBADYCbAwDCyAAIAApA0BCAXw3A0AgACAAKQM4IAApAxB9NwM4DAELCwJAIAApA0AgACgCUCkDCFEEQCAAKQM4UA0BCyAAKAJUQRVBABAUIAAoAiwQFiAAKAJQECUgAEEANgJsDAELIAAoAmgoAgRBBHEEQAJAIAAoAiwEQCAAIAAoAiwQR0EBcToADwwBCyAAIAAoAmgoAgAQSTcDACAAKQMAQgBTBEAgACgCVCAAKAJoKAIAEBcgACgCUBAlIABBADYCbAwDCyAAIAApAwAgACgCUCkDICAAKAJQKQMYfFE6AA8LIAAtAA9BAXFFBEAgACgCVEEVQQAQFCAAKAIsEBYgACgCUBAlIABBADYCbAwCCwsgACgCLBAWIAAgACgCUDYCbAsgACgCbCEBIABB8ABqJAAgAiABNgJIIAEEQAJAIAIoAkwEQCACKQMgQgBXBEAgAiACKAJYIAIoAkwgAkEQahBoNwMgCyACIAIoAlggAigCSCACQRBqEGg3AygCQCACKQMgIAIpAyhTBEAgAigCTBAlIAIgAigCSDYCTCACIAIpAyg3AyAMAQsgAigCSBAlCwwBCyACIAIoAkg2AkwCQCACKAJYKAIEQQRxBEAgAiACKAJYIAIoAkwgAkEQahBoNwMgDAELIAJCADcDIAsLIAJBADYCSAsgAiACKAJEQQFqNgJEIAIoAgwgAigCRAJ/IwBBEGsiACACKAIMNgIMIAAoAgwoAgQLa6wQLBoMAQsLIAIoAgwQFiACKQMgQgBTBEAgAigCWEEIaiACQRBqEEUgAigCTBAlIAJBADYCXAwBCyACIAIoAkw2AlwLIAIoAlwhACACQeAAaiQAIAMgADYCWCAARQRAIAMoAmAgAygCXEEIahBFIwBBEGsiACADKAJoNgIMIAAoAgwiACAAKAIwQQFqNgIwIAMoAlwQPCADQQA2AmwMAQsgAygCXCADKAJYKAIANgJAIAMoAlwgAygCWCkDCDcDMCADKAJcIAMoAlgpAxA3AzggAygCXCADKAJYKAIoNgIgIAMoAlgQFSADKAJcKAJQIQAgAygCXCkDMCEJIAMoAlxBCGohAiMAQSBrIgEkACABIAA2AhggASAJNwMQIAEgAjYCDAJAIAEpAxBQBEAgAUEBOgAfDAELIwBBIGsiACABKQMQNwMQIAAgACkDELpEAAAAAAAA6D+jOQMIAkAgACsDCEQAAOD////vQWQEQCAAQX82AgQMAQsgAAJ/IAArAwgiCkQAAAAAAADwQWMgCkQAAAAAAAAAAGZxBEAgCqsMAQtBAAs2AgQLAkAgACgCBEGAgICAeEsEQCAAQYCAgIB4NgIcDAELIAAgACgCBEEBazYCBCAAIAAoAgQgACgCBEEBdnI2AgQgACAAKAIEIAAoAgRBAnZyNgIEIAAgACgCBCAAKAIEQQR2cjYCBCAAIAAoAgQgACgCBEEIdnI2AgQgACAAKAIEIAAoAgRBEHZyNgIEIAAgACgCBEEBajYCBCAAIAAoAgQ2AhwLIAEgACgCHDYCCCABKAIIIAEoAhgoAgBNBEAgAUEBOgAfDAELIAEoAhggASgCCCABKAIMEFpBAXFFBEAgAUEAOgAfDAELIAFBAToAHwsgAS0AHxogAUEgaiQAIANCADcDEANAIAMpAxAgAygCXCkDMFQEQCADIAMoAlwoAkAgAykDEKdBBHRqKAIAKAIwQQBBACADKAJgEEY2AgwgAygCDEUEQCMAQRBrIgAgAygCaDYCDCAAKAIMIgAgACgCMEEBajYCMCADKAJcEDwgA0EANgJsDAMLIAMoAlwoAlAgAygCDCADKQMQQQggAygCXEEIahB0QQFxRQRAAkAgAygCXCgCCEEKRgRAIAMoAmRBBHFFDQELIAMoAmAgAygCXEEIahBFIwBBEGsiACADKAJoNgIMIAAoAgwiACAAKAIwQQFqNgIwIAMoAlwQPCADQQA2AmwMBAsLIAMgAykDEEIBfDcDEAwBCwsgAygCXCADKAJcKAIUNgIYIAMgAygCXDYCbAsgAygCbCEAIANB8ABqJAAgBCAANgI4CyAEKAI4RQRAIAQoAlgQLxogBEEANgJcDAELIAQgBCgCODYCXAsgBCgCXCEAIARB4ABqJAAgAAuOAQEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIAJBADYCBCACKAIIBEAjAEEQayIAIAIoAgg2AgwgAiAAKAIMKAIANgIEIAIoAggQrAFBAUYEQCMAQRBrIgAgAigCCDYCDEG0mwEgACgCDCgCBDYCAAsLIAIoAgwEQCACKAIMIAIoAgQ2AgALIAJBEGokAAuVAQEBfyMAQRBrIgEkACABIAA2AggCQAJ/IwBBEGsiACABKAIINgIMIAAoAgwpAxhCgIAQg1ALBEAgASgCCCgCAARAIAEgASgCCCgCABCeAUEBcToADwwCCyABQQE6AA8MAQsgASABKAIIQQBCAEESECA+AgQgASABKAIEQQBHOgAPCyABLQAPQQFxIQAgAUEQaiQAIAALfwEBfyMAQSBrIgMkACADIAA2AhggAyABNwMQIANBADYCDCADIAI2AggCQCADKQMQQv///////////wBWBEAgAygCCEEEQT0QFCADQX82AhwMAQsgAyADKAIYIAMpAxAgAygCDCADKAIIEGo2AhwLIAMoAhwhACADQSBqJAAgAAt9ACACQQFGBEAgASAAKAIIIAAoAgRrrH0hAQsCQCAAKAIUIAAoAhxLBEAgAEEAQQAgACgCJBEBABogACgCFEUNAQsgAEEANgIcIABCADcDECAAIAEgAiAAKAIoEQ8AQgBTDQAgAEIANwIEIAAgACgCAEFvcTYCAEEADwtBfwvhAgECfyMAQSBrIgMkAAJ/AkACQEGnEiABLAAAEKIBRQRAQbSbAUEcNgIADAELQZgJEBgiAg0BC0EADAELIAJBAEGQARAzIAFBKxCiAUUEQCACQQhBBCABLQAAQfIARhs2AgALAkAgAS0AAEHhAEcEQCACKAIAIQEMAQsgAEEDQQAQBCIBQYAIcUUEQCADIAFBgAhyNgIQIABBBCADQRBqEAQaCyACIAIoAgBBgAFyIgE2AgALIAJB/wE6AEsgAkGACDYCMCACIAA2AjwgAiACQZgBajYCLAJAIAFBCHENACADIANBGGo2AgAgAEGTqAEgAxAODQAgAkEKOgBLCyACQRo2AiggAkEbNgIkIAJBHDYCICACQR02AgxB6J8BKAIARQRAIAJBfzYCTAsgAkGsoAEoAgA2AjhBrKABKAIAIgAEQCAAIAI2AjQLQaygASACNgIAIAILIQAgA0EgaiQAIAAL8AEBAn8CfwJAIAFB/wFxIgMEQCAAQQNxBEADQCAALQAAIgJFDQMgAiABQf8BcUYNAyAAQQFqIgBBA3ENAAsLAkAgACgCACICQX9zIAJBgYKECGtxQYCBgoR4cQ0AIANBgYKECGwhAwNAIAIgA3MiAkF/cyACQYGChAhrcUGAgYKEeHENASAAKAIEIQIgAEEEaiEAIAJBgYKECGsgAkF/c3FBgIGChHhxRQ0ACwsDQCAAIgItAAAiAwRAIAJBAWohACADIAFB/wFxRw0BCwsgAgwCCyAAEC4gAGoMAQsgAAsiAEEAIAAtAAAgAUH/AXFGGwsYACAAKAJMQX9MBEAgABCkAQ8LIAAQpAELYAIBfgJ/IAAoAighAkEBIQMgAEIAIAAtAABBgAFxBH9BAkEBIAAoAhQgACgCHEsbBUEBCyACEQ8AIgFCAFkEfiAAKAIUIAAoAhxrrCABIAAoAgggACgCBGusfXwFIAELC2sBAX8gAARAIAAoAkxBf0wEQCAAEG4PCyAAEG4PC0GwoAEoAgAEQEGwoAEoAgAQpQEhAQtBrKABKAIAIgAEQANAIAAoAkwaIAAoAhQgACgCHEsEQCAAEG4gAXIhAQsgACgCOCIADQALCyABCyIAIAAgARACIgBBgWBPBH9BtJsBQQAgAGs2AgBBfwUgAAsLUwEDfwJAIAAoAgAsAABBMGtBCk8NAANAIAAoAgAiAiwAACEDIAAgAkEBajYCACABIANqQTBrIQEgAiwAAUEwa0EKTw0BIAFBCmwhAQwACwALIAELuwIAAkAgAUEUSw0AAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4KAAECAwQFBgcICQoLIAIgAigCACIBQQRqNgIAIAAgASgCADYCAA8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASsDADkDAA8LIAAgAkEYEQQACwt/AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARCpASEAIAEoAgBBQGoLNgIAIAAPCyABIAJB/gdrNgIAIANC/////////4eAf4NCgICAgICAgPA/hL8FIAALC5sCACAARQRAQQAPCwJ/AkAgAAR/IAFB/wBNDQECQEGQmQEoAgAoAgBFBEAgAUGAf3FBgL8DRg0DDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMBAsgAUGAsANPQQAgAUGAQHFBgMADRxtFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAwwECyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBAwECwtBtJsBQRk2AgBBfwVBAQsMAQsgACABOgAAQQELC+MBAQJ/IAJBAEchAwJAAkACQCAAQQNxRQ0AIAJFDQAgAUH/AXEhBANAIAAtAAAgBEYNAiACQQFrIgJBAEchAyAAQQFqIgBBA3FFDQEgAg0ACwsgA0UNAQsCQCAALQAAIAFB/wFxRg0AIAJBBEkNACABQf8BcUGBgoQIbCEDA0AgACgCACADcyIEQX9zIARBgYKECGtxQYCBgoR4cQ0BIABBBGohACACQQRrIgJBA0sNAAsLIAJFDQAgAUH/AXEhAQNAIAEgAC0AAEYEQCAADwsgAEEBaiEAIAJBAWsiAg0ACwtBAAtaAQF/IwBBEGsiASAANgIIAkACQCABKAIIKAIAQQBOBEAgASgCCCgCAEGAFCgCAEgNAQsgAUEANgIMDAELIAEgASgCCCgCAEECdEGQFGooAgA2AgwLIAEoAgwL+QIBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQgBCgCGCAEKAIYIAQpAxAgBCgCDCAEKAIIEK4BIgA2AgACQCAARQRAIARBADYCHAwBCyAEKAIAEEhBAEgEQCAEKAIYQQhqIAQoAgAQFyAEKAIAEBsgBEEANgIcDAELIAQoAhghAiMAQRBrIgAkACAAIAI2AgggAEEYEBgiAjYCBAJAIAJFBEAgACgCCEEIakEOQQAQFCAAQQA2AgwMAQsgACgCBCAAKAIINgIAIwBBEGsiAiAAKAIEQQRqNgIMIAIoAgxBADYCACACKAIMQQA2AgQgAigCDEEANgIIIAAoAgRBADoAECAAKAIEQQA2AhQgACAAKAIENgIMCyAAKAIMIQIgAEEQaiQAIAQgAjYCBCACRQRAIAQoAgAQGyAEQQA2AhwMAQsgBCgCBCAEKAIANgIUIAQgBCgCBDYCHAsgBCgCHCEAIARBIGokACAAC7cOAgN/AX4jAEHAAWsiBSQAIAUgADYCuAEgBSABNgK0ASAFIAI3A6gBIAUgAzYCpAEgBUIANwOYASAFQgA3A5ABIAUgBDYCjAECQCAFKAK4AUUEQCAFQQA2ArwBDAELAkAgBSgCtAEEQCAFKQOoASAFKAK0ASkDMFQNAQsgBSgCuAFBCGpBEkEAEBQgBUEANgK8AQwBCwJAIAUoAqQBQQhxDQAgBSgCtAEoAkAgBSkDqAGnQQR0aigCCEUEQCAFKAK0ASgCQCAFKQOoAadBBHRqLQAMQQFxRQ0BCyAFKAK4AUEIakEPQQAQFCAFQQA2ArwBDAELIAUoArQBIAUpA6gBIAUoAqQBQQhyIAVByABqEH5BAEgEQCAFKAK4AUEIakEUQQAQFCAFQQA2ArwBDAELIAUoAqQBQSBxBEAgBSAFKAKkAUEEcjYCpAELAkAgBSkDmAFQBEAgBSkDkAFQDQELIAUoAqQBQQRxRQ0AIAUoArgBQQhqQRJBABAUIAVBADYCvAEMAQsCQCAFKQOYAVAEQCAFKQOQAVANAQsgBSkDmAEgBSkDmAEgBSkDkAF8WARAIAUpA2AgBSkDmAEgBSkDkAF8Wg0BCyAFKAK4AUEIakESQQAQFCAFQQA2ArwBDAELIAUpA5ABUARAIAUgBSkDYCAFKQOYAX03A5ABCyAFIAUpA5ABIAUpA2BUOgBHIAUgBSgCpAFBIHEEf0EABSAFLwF6QQBHC0EBcToARSAFIAUoAqQBQQRxBH9BAAUgBS8BeEEARwtBAXE6AEQgBQJ/IAUoAqQBQQRxBEBBACAFLwF4DQEaCyAFLQBHQX9zC0EBcToARiAFLQBFQQFxBEAgBSgCjAFFBEAgBSAFKAK4ASgCHDYCjAELIAUoAowBRQRAIAUoArgBQQhqQRpBABAUIAVBADYCvAEMAgsLIAUpA2hQBEAgBSAFKAK4AUEAQgBBABB9NgK8AQwBCwJAAkAgBS0AR0EBcUUNACAFLQBFQQFxDQAgBS0AREEBcQ0AIAUgBSkDkAE3AyAgBSAFKQOQATcDKCAFQQA7ATggBSAFKAJwNgIwIAVC3AA3AwggBSAFKAK0ASgCACAFKQOYASAFKQOQASAFQQhqQQAgBSgCtAEgBSkDqAEgBSgCuAFBCGoQXyIANgKIAQwBCyAFIAUoArQBIAUpA6gBIAUoAqQBIAUoArgBQQhqED8iADYCBCAARQRAIAVBADYCvAEMAgsgBSAFKAK0ASgCAEIAIAUpA2ggBUHIAGogBSgCBC8BDEEBdkEDcSAFKAK0ASAFKQOoASAFKAK4AUEIahBfIgA2AogBCyAARQRAIAVBADYCvAEMAQsCfyAFKAKIASEAIAUoArQBIQMjAEEQayIBJAAgASAANgIMIAEgAzYCCCABKAIMIAEoAgg2AiwgASgCCCEDIAEoAgwhBCMAQSBrIgAkACAAIAM2AhggACAENgIUAkAgACgCGCgCSCAAKAIYKAJEQQFqTQRAIAAgACgCGCgCSEEKajYCDCAAIAAoAhgoAkwgACgCDEECdBBONgIQIAAoAhBFBEAgACgCGEEIakEOQQAQFCAAQX82AhwMAgsgACgCGCAAKAIMNgJIIAAoAhggACgCEDYCTAsgACgCFCEEIAAoAhgoAkwhBiAAKAIYIgcoAkQhAyAHIANBAWo2AkQgA0ECdCAGaiAENgIAIABBADYCHAsgACgCHCEDIABBIGokACABQRBqJAAgA0EASAsEQCAFKAKIARAbIAVBADYCvAEMAQsgBS0ARUEBcQRAIAUgBS8BekEAEHsiADYCACAARQRAIAUoArgBQQhqQRhBABAUIAVBADYCvAEMAgsgBSAFKAK4ASAFKAKIASAFLwF6QQAgBSgCjAEgBSgCABEFADYChAEgBSgCiAEQGyAFKAKEAUUEQCAFQQA2ArwBDAILIAUgBSgChAE2AogBCyAFLQBEQQFxBEAgBSAFKAK4ASAFKAKIASAFLwF4ELABNgKEASAFKAKIARAbIAUoAoQBRQRAIAVBADYCvAEMAgsgBSAFKAKEATYCiAELIAUtAEZBAXEEQCAFIAUoArgBIAUoAogBQQEQrwE2AoQBIAUoAogBEBsgBSgChAFFBEAgBUEANgK8AQwCCyAFIAUoAoQBNgKIAQsCQCAFLQBHQQFxRQ0AIAUtAEVBAXFFBEAgBS0AREEBcUUNAQsgBSgCuAEhASAFKAKIASEDIAUpA5gBIQIgBSkDkAEhCCMAQSBrIgAkACAAIAE2AhwgACADNgIYIAAgAjcDECAAIAg3AwggACgCGCAAKQMQIAApAwhBAEEAQQBCACAAKAIcQQhqEF8hASAAQSBqJAAgBSABNgKEASAFKAKIARAbIAUoAoQBRQRAIAVBADYCvAEMAgsgBSAFKAKEATYCiAELIAUgBSgCiAE2ArwBCyAFKAK8ASEAIAVBwAFqJAAgAAuEAgEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCEAJAIAMoAhRFBEAgAygCGEEIakESQQAQFCADQQA2AhwMAQsgA0E4EBgiADYCDCAARQRAIAMoAhhBCGpBDkEAEBQgA0EANgIcDAELIwBBEGsiACADKAIMQQhqNgIMIAAoAgxBADYCACAAKAIMQQA2AgQgACgCDEEANgIIIAMoAgwgAygCEDYCACADKAIMQQA2AgQgAygCDEIANwMoQQBBAEEAEBohACADKAIMIAA2AjAgAygCDEIANwMYIAMgAygCGCADKAIUQRQgAygCDBBhNgIcCyADKAIcIQAgA0EgaiQAIAALQwEBfyMAQRBrIgMkACADIAA2AgwgAyABNgIIIAMgAjYCBCADKAIMIAMoAgggAygCBEEAQQAQsgEhACADQRBqJAAgAAtJAQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDCgCrEAgASgCDCgCqEAoAgQRAgAgASgCDBA4IAEoAgwQFQsgAUEQaiQAC5QFAQF/IwBBMGsiBSQAIAUgADYCKCAFIAE2AiQgBSACNgIgIAUgAzoAHyAFIAQ2AhggBUEANgIMAkAgBSgCJEUEQCAFKAIoQQhqQRJBABAUIAVBADYCLAwBCyAFIAUoAiAgBS0AH0EBcRCzASIANgIMIABFBEAgBSgCKEEIakEQQQAQFCAFQQA2AiwMAQsgBSgCICEBIAUtAB9BAXEhAiAFKAIYIQMgBSgCDCEEIwBBIGsiACQAIAAgATYCGCAAIAI6ABcgACADNgIQIAAgBDYCDCAAQbDAABAYIgE2AggCQCABRQRAIABBADYCHAwBCyMAQRBrIgEgACgCCDYCDCABKAIMQQA2AgAgASgCDEEANgIEIAEoAgxBADYCCCAAKAIIAn8gAC0AF0EBcQRAIAAoAhhBf0cEfyAAKAIYQX5GBUEBC0EBcQwBC0EAC0EARzoADiAAKAIIIAAoAgw2AqhAIAAoAgggACgCGDYCFCAAKAIIIAAtABdBAXE6ABAgACgCCEEAOgAMIAAoAghBADoADSAAKAIIQQA6AA8gACgCCCgCqEAoAgAhAQJ/AkAgACgCGEF/RwRAIAAoAhhBfkcNAQtBCAwBCyAAKAIYC0H//wNxIAAoAhAgACgCCCABEQEAIQEgACgCCCABNgKsQCABRQRAIAAoAggQOCAAKAIIEBUgAEEANgIcDAELIAAgACgCCDYCHAsgACgCHCEBIABBIGokACAFIAE2AhQgAUUEQCAFKAIoQQhqQQ5BABAUIAVBADYCLAwBCyAFIAUoAiggBSgCJEETIAUoAhQQYSIANgIQIABFBEAgBSgCFBCxASAFQQA2AiwMAQsgBSAFKAIQNgIsCyAFKAIsIQAgBUEwaiQAIAALzAEBAX8jAEEgayICIAA2AhggAiABOgAXIAICfwJAIAIoAhhBf0cEQCACKAIYQX5HDQELQQgMAQsgAigCGAs7AQ4gAkEANgIQAkADQCACKAIQQdSXASgCAEkEQCACKAIQQQxsQdiXAWovAQAgAi8BDkYEQCACLQAXQQFxBEAgAiACKAIQQQxsQdiXAWooAgQ2AhwMBAsgAiACKAIQQQxsQdiXAWooAgg2AhwMAwUgAiACKAIQQQFqNgIQDAILAAsLIAJBADYCHAsgAigCHAvkAQEBfyMAQSBrIgMkACADIAA6ABsgAyABNgIUIAMgAjYCECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/contracts/hdfc_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\n\n\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\n\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\n\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\n\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\n\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\n\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "circuits-circom/circuits/hdfc/contracts/hdfc_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\n\n\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\n\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\n\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\n\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\n\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\n\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\n\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\n\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\n\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\n\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\n\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\n\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\n\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\n\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\n\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\n\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\n\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\n\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n            checkField(calldataload(add(_pubSignals, 192)))\n\n            checkField(calldataload(add(_pubSignals, 224)))\n\n            checkField(calldataload(add(_pubSignals, 256)))\n\n            checkField(calldataload(add(_pubSignals, 288)))\n\n            checkField(calldataload(add(_pubSignals, 320)))\n\n            checkField(calldataload(add(_pubSignals, 352)))\n\n            checkField(calldataload(add(_pubSignals, 384)))\n\n            checkField(calldataload(add(_pubSignals, 416)))\n\n            checkField(calldataload(add(_pubSignals, 448)))\n\n            checkField(calldataload(add(_pubSignals, 480)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "circuits-circom/circuits/hdfc/emls/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/hdfc/hdfc_registration.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"@zk-email/circuits/helpers/extract.circom\";\n\ninclude \"./helpers/hdfc_helpers.circom\";\ninclude \"./regexes/hdfc_upi_subject.circom\";\n\n\ntemplate HdfcRegistrationEmail(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 2048); // constraints for 2048 bit RSA\n\n    var max_email_from_len = 21; // Length of alerts@hdfcbank.net\n    \n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Base 64 body hash variables\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n\n    // DKIM VERIFICATION\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n    EV.body_hash_idx <== body_hash_idx;\n    EV.precomputed_sha <== precomputed_sha;\n    EV.in_body_padded <== in_body_padded;\n    EV.in_body_len_padded_bytes <== in_body_len_padded_bytes;\n    signal header_hash[256] <== EV.sha;\n\n    modulus_hash <== EV.pubkey_hash;\n\n    // HDFC UPI EMAIL VERIFICATION REGEX (Check that regex matches)\n    signal upi_subject_regex_out <== HdfcUpiSubjectRegex(max_header_bytes)(in_padded);\n    upi_subject_regex_out === 1;\n\n    // FROM HEADER REGEX\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes]; // packed into 7-bytes\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegex(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n    reveal_email_from_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_from_len, pack_size)(from_regex_reveal, email_from_idx);\n\n    // Extract packed and hashed onramper id\n    signal input email_to_idx;\n    signal input hdfc_acc_num_idx;\n    signal output onramper_id <== HdfcOnramperId(\n        max_header_bytes, \n        max_body_bytes, \n        pack_size\n    )(in_padded, email_to_idx, in_body_padded, hdfc_acc_num_idx);\n\n    // TOTAL CONSTRAINTS: 4255879\n}\n\n// Args:\n// * max_header_bytes = 1024 is the max number of bytes in the header\n// * max_body_bytes = 4352 is the max number of bytes in the body after precomputed slice\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main = HdfcRegistrationEmail(1024, 4352, 121, 17, 7);\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/hdfc_send.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"../utils/ceil.circom\";\n\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"@zk-email/circuits/helpers/extract.circom\";\n\ninclude \"./helpers/hdfc_helpers.circom\";\ninclude \"./regexes/hdfc_amount.circom\";\ninclude \"./regexes/hdfc_date.circom\";\ninclude \"./regexes/hdfc_upi_subject.circom\";\ninclude \"./regexes/hdfc_payment_id.circom\";\n\ntemplate HdfcSendEmail(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 2048); // constraints for 2048 bit RSA\n\n    var max_email_from_len = 21; // Length of alerts@hdfcbank.net\n    var max_email_date_len = 31; // Sat, 14 Oct 2023 22:09:12 +0530\n    var max_amount_len = 9; // Max UPI transaction size is ₹1 Lakh. Max 6 fig amount + one decimal point + 2 decimal places. e.g. 999999.00\n    var max_payment_id_len = 14; // Current payment ID length is 12, but account for 2 extra bytes for future proofing\n\n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Base 64 body hash variables\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n\n    // DKIM VERIFICATION\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n    EV.body_hash_idx <== body_hash_idx;\n    EV.precomputed_sha <== precomputed_sha;\n    EV.in_body_padded <== in_body_padded;\n    EV.in_body_len_padded_bytes <== in_body_len_padded_bytes;\n\n    modulus_hash <== EV.pubkey_hash;\n\n    // HDFC UPI EMAIL VERIFICATION REGEX (Check that regex matches)\n    signal upi_subject_regex_out <== HdfcUpiSubjectRegex(max_header_bytes)(in_padded);\n    upi_subject_regex_out === 1;\n\n    // FROM HEADER REGEX\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes]; // packed into 7-bytes\n\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegex(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n    reveal_email_from_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_from_len, pack_size)(from_regex_reveal, email_from_idx);\n\n    // HDFC SEND AMOUNT REGEX\n    var max_email_amount_packed_bytes = count_packed(max_amount_len, pack_size);\n    assert(max_email_amount_packed_bytes < max_body_bytes);\n\n    signal input hdfc_amount_idx;\n    signal output reveal_email_amount_packed[max_email_amount_packed_bytes]; // packed into 7-bytes. TODO: make this rotate to take up even less space\n\n    signal (amount_regex_out, amount_regex_reveal[max_body_bytes]) <== HdfcAmountRegex(max_body_bytes)(in_body_padded);\n    amount_regex_out === 1;\n    reveal_email_amount_packed <== ShiftAndPackMaskedStr(max_body_bytes, max_amount_len, pack_size)(amount_regex_reveal, hdfc_amount_idx);\n\n    // DATE REGEX\n    var max_email_date_packed_bytes = count_packed(max_email_date_len, pack_size);\n    assert(max_email_date_packed_bytes < max_header_bytes);\n\n    signal input email_date_idx;\n    signal output reveal_email_date_packed[max_email_date_packed_bytes]; // packed into 7-bytes\n\n    signal (date_regex_out, date_regex_reveal[max_header_bytes]) <== HdfcDateRegex(max_header_bytes)(in_padded);\n    date_regex_out === 1;\n    reveal_email_date_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_date_len, pack_size)(date_regex_reveal, email_date_idx);\n\n    // HDFC ONRAMPER ID REGEX\n\n    // Extract packed and hashed onramper id\n    signal input email_to_idx;\n    signal input hdfc_acc_num_idx;\n    signal output onramper_id <== HdfcOnramperId(\n        max_header_bytes, \n        max_body_bytes, \n        pack_size\n    )(in_padded, email_to_idx, in_body_padded, hdfc_acc_num_idx);\n\n    // Extract packed and hashed offramper id\n    signal input hdfc_payee_id_idx;\n    signal output offramper_id <== HdfcOfframperId(\n        max_body_bytes, \n        pack_size\n    )(in_body_padded, hdfc_payee_id_idx);\n\n    // NULLIFIER: PAYMENT ID HASH\n    var max_payment_id_packed_bytes = count_packed(max_payment_id_len, pack_size);\n    assert(max_payment_id_packed_bytes < max_body_bytes);\n\n    signal input hdfc_payment_id_idx;\n    signal reveal_payment_id_packed[max_payment_id_packed_bytes]; // packed into 7-bytes\n\n    signal (payment_regex_out, payment_regex_reveal[max_body_bytes]) <== HdfcPaymentIdRegex(max_body_bytes)(in_body_padded);\n    payment_regex_out === 1;\n    reveal_payment_id_packed <== ShiftAndPackMaskedStr(max_body_bytes, max_payment_id_len, pack_size)(payment_regex_reveal, hdfc_payment_id_idx);\n    \n    component hash_payment_id = Poseidon(max_payment_id_packed_bytes);\n    for (var i = 0; i < max_payment_id_packed_bytes; i++) {\n        hash_payment_id.inputs[i] <== reveal_payment_id_packed[i];\n    }\n    signal output payment_id_nullifier <== hash_payment_id.out;\n\n    // The following signals do not take part in any computation, but tie the proof to a specific intent_hash & claim_id to prevent replay attacks and frontrunning.\n    // https://geometry.xyz/notebook/groth16-malleability\n    signal input intent_hash;\n    signal intent_hash_squared;\n    intent_hash_squared <== intent_hash * intent_hash;\n\n    // TOTAL CONSTRAINTS: 6040228\n}\n\n// Args:\n// * max_header_bytes = 1024 is the max number of bytes in the header\n// * max_body_bytes = 4352 is the max number of bytes in the body after precomputed slice\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main { public [ intent_hash ] } = HdfcSendEmail(1024, 4352, 121, 17, 7);\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/helpers/hdfc_helpers.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../utils/ceil.circom\";\ninclude \"../../common/regexes/from_regex.circom\";\ninclude \"../../common/regexes/to_regex.circom\";\ninclude \"../regexes/hdfc_accnum.circom\";\ninclude \"../regexes/hdfc_payee_id.circom\";\n\n\ntemplate HdfcOnramperId(\n    max_header_bytes, \n    max_body_bytes, \n    pack_size\n) {\n    var max_email_to_len = 49;  // RFC 2821: requires length to be 254, but 49 is safe max length of email to field (https://atdata.com/long-email-addresses/)\n    var max_account_number_len = 4; // Example: **1234\n    assert(pack_size == 7);\n\n    // TO HEADER REGEX\n    // NOTE: this does not work for hotmail users\n    var max_email_to_packed_bytes = count_packed(max_email_to_len, pack_size);\n    assert(max_email_to_packed_bytes < max_header_bytes);\n    assert(max_email_to_packed_bytes == 7);\n\n    signal input in_padded[max_header_bytes];\n    signal input email_to_idx;\n    signal reveal_email_to_packed[max_email_to_packed_bytes]; // Not a public output\n    signal (to_regex_out, to_regex_reveal[max_header_bytes]) <== ToRegex(max_header_bytes)(in_padded);\n    to_regex_out === 1;\n    reveal_email_to_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_to_len, pack_size)(to_regex_reveal, email_to_idx);\n\n    // HDFC ACCOUNT NUMBER REGEX\n    // NOTE: Protonmail encrypts the email body, so we can't regex this\n    var max_acc_num_packed_bytes = count_packed(max_account_number_len, pack_size);\n    assert(max_acc_num_packed_bytes < max_body_bytes);\n    assert(max_acc_num_packed_bytes == 1);\n\n    signal input in_body_padded[max_body_bytes];\n    signal input hdfc_acc_num_idx;\n    signal reveal_acc_num_packed[max_acc_num_packed_bytes]; // Not a public output\n    signal (acc_num_regex_out, acc_num_regex_reveal[max_body_bytes]) <== HdfcAccountNumberRegex(max_body_bytes)(in_body_padded);\n    acc_num_regex_out === 1;\n    reveal_acc_num_packed <== ShiftAndPackMaskedStr(max_body_bytes, max_account_number_len, pack_size)(acc_num_regex_reveal, hdfc_acc_num_idx);\n\n    // HASH \"TO\" EMAIL ID + BANK ACCOUNT NUMBER\n    var max_total_id_packed_bytes = max_email_to_packed_bytes + max_acc_num_packed_bytes;\n    assert(max_total_id_packed_bytes == 8);\n\n    // Feed first 6 bytes into the first hash\n    // Feed output of first hash + last 2 bytes into the second hash\n    component hash1 = Poseidon(6);\n    for (var i = 0; i < 6; i++) {\n        hash1.inputs[i] <== reveal_email_to_packed[i];\n    }\n    component hash2 = Poseidon(3);\n    hash2.inputs[0] <== hash1.out;\n    hash2.inputs[1] <== reveal_email_to_packed[6];\n    hash2.inputs[2] <== reveal_acc_num_packed[0];\n    \n    signal output packed_id_hashed <== hash2.out;\n}\n\ntemplate HdfcOfframperId(max_body_bytes, pack_size) {\n    var max_payee_len = 50;    // Max 50 characters in UPI ID (https://www.deutschebank.co.in/en/connect-with-us/upi.html)\n\n    // HDFC SEND PAYEE ID REGEX\n    var max_payee_packed_bytes = count_packed(max_payee_len, pack_size);\n    assert(max_payee_packed_bytes < max_body_bytes);\n    assert(max_payee_packed_bytes == 8);\n\n    signal input in_body_padded[max_body_bytes];\n    signal input hdfc_payee_id_idx;\n    signal reveal_payee_packed[max_payee_packed_bytes];\n\n    signal (payee_regex_out, payee_regex_reveal[max_body_bytes]) <== HdfcPayeeIdRegex(max_body_bytes)(in_body_padded);\n    signal is_found_payee <== IsZero()(payee_regex_out);\n    is_found_payee === 0;\n    reveal_payee_packed <== ShiftAndPackMaskedStr(max_body_bytes, max_payee_len, pack_size)(payee_regex_reveal, hdfc_payee_id_idx);\n\n    // HASH PAYEE ID\n    // Feed first 6 bytes into the first hash\n    // Feed output of first hash + last 2 bytes into the second hash\n    component hash1 = Poseidon(6);\n    for (var i = 0; i < 6; i++) {\n        hash1.inputs[i] <== reveal_payee_packed[i];\n    }\n    component hash2 = Poseidon(3);\n    hash2.inputs[0] <== hash1.out;\n    hash2.inputs[1] <== reveal_payee_packed[6];\n    hash2.inputs[2] <== reveal_payee_packed[7];\n\n    signal output packed_offramper_id_hashed <== hash2.out;\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/inputs/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/hdfc/package.json",
    "content": "{\n  \"name\": \"@zkp2p/circuits-circom-hdfc\",\n  \"version\": \"0.0.1\",\n  \"packageManager\": \"yarn@3.6.3\",\n  \"description\": \"HDFC circuits for ZKP2P\",\n  \"contributors\": [\n    \"0xSachinK\",\n    \"richardliang\"\n  ],\n  \"main\": \"dist/generate_input.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@zk-email/circuits\": \"3.2.3\",\n    \"@zk-email/helpers\": \"^3.0.2\",\n    \"@zk-email/zk-regex-circom\": \"1.2.1\",\n    \"buffer\": \"^6.0.3\",\n    \"circomlib\": \"^2.0.5\",\n    \"process\": \"^0.11.10\",\n    \"snarkjs\": \"latest\"\n  },\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"build\": \"tsc\",\n    \"gen-input:hdfc:send\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/hdfc_send.eml --payment_type=hdfc --circuit_type=send --output_file=input_hdfc_send\",\n    \"gen-input:hdfc:registration\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/hdfc_send.eml --payment_type=hdfc --circuit_type=registration  --output_file=input_hdfc_registration\",\n    \"gen-input:hdfc:registration:wrong-subject\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/hdfc_send.eml --payment_type=hdfc --circuit_type=registration  --output_file=input_hdfc_registration_wrong_subject\",\n    \"compile:hdfc:send\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_send && cd ../../scripts && ./1_compile.sh && cd ..\",\n    \"compile:hdfc:registration\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_registration && cd ../../scripts && ./1_compile.sh && cd ..\",\n    \"genkey:non-chunked:unsafe:hdfc:send\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_send && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n    \"genkey:non-chunked:unsafe:hdfc:registration\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_registration && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n    \"uploadkeys:hdfc:send\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_send && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n    \"uploadkeys:hdfc:registration\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_registration && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n    \"test:hdfc:send\": \"yarn test ./test/hdfc_send.spec.ts\",\n    \"test:hdfc:registration\": \"yarn test ./test/hdfc_registration.spec.ts\",\n    \"genverifier:hdfc:send\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_send && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n    \"genverifier:hdfc:registration\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_registration && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n    \"gencalldata:hdfc:send\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_send && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n    \"gencalldata:hdfc:registration\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_registration && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n    \"genwitness:hdfc:send\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_send && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n    \"genwitness:hdfc:registration\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_registration && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n    \"genproof:hdfc:send\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_send && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n    \"genproof:hdfc:registration\": \"CIRCUIT_DIR=hdfc CIRCUIT_NAME=hdfc_registration && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\"\n  },\n  \"devDependencies\": {\n    \"@babel/preset-env\": \"^7.22.2\",\n    \"@babel/preset-react\": \"^7.22.0\",\n    \"@babel/preset-typescript\": \"^7.21.5\",\n    \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n    \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n    \"@openzeppelin/contracts\": \"^4.9.1\",\n    \"@types/atob\": \"^2.1.2\",\n    \"@types/jest\": \"^29.5.1\",\n    \"@types/mocha\": \"^10.0.1\",\n    \"@types/node\": \"^18.0.6\",\n    \"@types/node-forge\": \"^1.3.2\",\n    \"@types/tar-stream\": \"^2.2.2\",\n    \"babel-preset-jest\": \"^29.5.0\",\n    \"browserify-fs\": \"^1.0.0\",\n    \"browserstack-local\": \"^1.5.1\",\n    \"browserstack-node-sdk\": \"^1.6.1\",\n    \"chai\": \"^4.3.7\",\n    \"circom_tester\": \"^0.0.19\",\n    \"circomlibjs\": \"^0.1.7\",\n    \"ganache\": \"^7.3.0\",\n    \"husky\": \"^8.0.3\",\n    \"jest\": \"^29.5.0\",\n    \"jest-environment-jsdom\": \"^29.5.0\",\n    \"jest-fetch-mock\": \"^3.0.3\",\n    \"jest-junit\": \"^15.0.0\",\n    \"madge\": \"^6.0.0\",\n    \"mocha\": \"^10.2.0\",\n    \"msw\": \"^1.0.1\",\n    \"node-forge\": \"^1.3.1\",\n    \"nodemon\": \"^2.0.19\",\n    \"process\": \"^0.11.10\",\n    \"puppeteer\": \"18.1\",\n    \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n    \"selenium-webdriver\": \"^4.8.1\",\n    \"ts-jest\": \"^29.1.0\",\n    \"ts-node\": \"^10.9.1\",\n    \"ts-node-dev\": \"^2.0.0\",\n    \"typescript\": \"^5.1.6\",\n    \"util\": \"^0.12.5\",\n    \"vite-plugin-commonjs\": \"^0.7.1\",\n    \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n    \"vite-plugin-node-polyfills\": \"^0.8.2\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \"^.+\\\\.tsx?$\": \"ts-jest\"\n    },\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\",\n      \"jsx\",\n      \"json\"\n    ],\n    \"testEnvironment\": \"node\",\n    \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n    \"transformIgnorePatterns\": [\n      \"node_modules/(?!(@zk-email)/)\"\n    ]\n  },\n  \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_accnum.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate HdfcAccountNumberRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[17][num_bytes];\n\tcomponent and[11][num_bytes];\n\tcomponent multi_or[2][num_bytes];\n\tsignal states[num_bytes+1][11];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 11; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(10);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 32;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][10];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 86;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 80;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 65;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 42;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][0];\n\t\tand[4][i].b <== eq[4][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[4][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 48;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 49;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 50;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 51;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 52;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 53;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 54;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 55;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 56;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 57;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[12][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[13][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[14][i].out;\n\t\tand[6][i].b <== multi_or[0][i].out;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[6][i].out;\n\t\tmulti_or[1][i].in[1] <== and[7][i].out;\n\t\tstates[i+1][7] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][7];\n\t\tand[8][i].b <== eq[0][i].out;\n\t\tstates[i+1][8] <== and[8][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 116;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][8];\n\t\tand[9][i].b <== eq[15][i].out;\n\t\tstates[i+1][9] <== and[9][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 111;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][9];\n\t\tand[10][i].b <== eq[16][i].out;\n\t\tstates[i+1][10] <== and[10][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][4];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][4] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][6] * states[i+2][7];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][7] * states[i+2][7];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_accnum.json",
    "content": "{\n  \"parts\": [\n    {\n      \"is_public\": false,\n      \"regex_def\": \"\\\\*\\\\*\"\n    },\n    {\n      \"is_public\": true,\n      \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \" to VPA\"\n    }\n  ]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_amount.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate HdfcAmountRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[32][num_bytes];\n\tcomponent and[51][num_bytes];\n\tcomponent multi_or[2][num_bytes];\n\tsignal states[num_bytes+1][51];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 51; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(50);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 115;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][50];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 46;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 48;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 49;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 50;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 51;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 52;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 53;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 54;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 55;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 56;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 57;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tmulti_or[0][i] = MultiOR(11);\n\t\tmulti_or[0][i].in[0] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[11][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[2][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\tstates[i+1][3] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 32;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][3];\n\t\tand[4][i].b <== eq[12][i].out;\n\t\tstates[i+1][4] <== and[4][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 104;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][4];\n\t\tand[5][i].b <== eq[13][i].out;\n\t\tstates[i+1][5] <== and[5][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 68;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][0];\n\t\tand[6][i].b <== eq[14][i].out;\n\t\tstates[i+1][6] <== and[6][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 97;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][5];\n\t\tand[7][i].b <== eq[15][i].out;\n\t\tstates[i+1][7] <== and[7][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][7];\n\t\tand[8][i].b <== eq[0][i].out;\n\t\tstates[i+1][8] <== and[8][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][8];\n\t\tand[9][i].b <== eq[12][i].out;\n\t\tstates[i+1][9] <== and[9][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 98;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][9];\n\t\tand[10][i].b <== eq[16][i].out;\n\t\tstates[i+1][10] <== and[10][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 101;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][10];\n\t\tand[11][i].b <== eq[17][i].out;\n\t\tstates[i+1][11] <== and[11][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][11];\n\t\tand[12][i].b <== eq[17][i].out;\n\t\tstates[i+1][12] <== and[12][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 110;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][12];\n\t\tand[13][i].b <== eq[18][i].out;\n\t\tstates[i+1][13] <== and[13][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][13];\n\t\tand[14][i].b <== eq[12][i].out;\n\t\tstates[i+1][14] <== and[14][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 100;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][14];\n\t\tand[15][i].b <== eq[19][i].out;\n\t\tstates[i+1][15] <== and[15][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][15];\n\t\tand[16][i].b <== eq[17][i].out;\n\t\tstates[i+1][16] <== and[16][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][16];\n\t\tand[17][i].b <== eq[16][i].out;\n\t\tstates[i+1][17] <== and[17][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 105;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][17];\n\t\tand[18][i].b <== eq[20][i].out;\n\t\tstates[i+1][18] <== and[18][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 116;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][18];\n\t\tand[19][i].b <== eq[21][i].out;\n\t\tstates[i+1][19] <== and[19][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][19];\n\t\tand[20][i].b <== eq[17][i].out;\n\t\tstates[i+1][20] <== and[20][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][20];\n\t\tand[21][i].b <== eq[19][i].out;\n\t\tstates[i+1][21] <== and[21][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][21];\n\t\tand[22][i].b <== eq[12][i].out;\n\t\tstates[i+1][22] <== and[22][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 102;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][22];\n\t\tand[23][i].b <== eq[22][i].out;\n\t\tstates[i+1][23] <== and[23][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 114;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][23];\n\t\tand[24][i].b <== eq[23][i].out;\n\t\tstates[i+1][24] <== and[24][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 111;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][24];\n\t\tand[25][i].b <== eq[24][i].out;\n\t\tstates[i+1][25] <== and[25][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 109;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][25];\n\t\tand[26][i].b <== eq[25][i].out;\n\t\tstates[i+1][26] <== and[26][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][6];\n\t\tand[27][i].b <== eq[17][i].out;\n\t\tstates[i+1][27] <== and[27][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][27];\n\t\tand[28][i].b <== eq[15][i].out;\n\t\tstates[i+1][28] <== and[28][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][28];\n\t\tand[29][i].b <== eq[23][i].out;\n\t\tstates[i+1][29] <== and[29][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][29];\n\t\tand[30][i].b <== eq[12][i].out;\n\t\tstates[i+1][30] <== and[30][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 67;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][30];\n\t\tand[31][i].b <== eq[26][i].out;\n\t\tstates[i+1][31] <== and[31][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 117;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][31];\n\t\tand[32][i].b <== eq[27][i].out;\n\t\tstates[i+1][32] <== and[32][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][32];\n\t\tand[33][i].b <== eq[0][i].out;\n\t\tstates[i+1][33] <== and[33][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][33];\n\t\tand[34][i].b <== eq[21][i].out;\n\t\tstates[i+1][34] <== and[34][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][34];\n\t\tand[35][i].b <== eq[24][i].out;\n\t\tstates[i+1][35] <== and[35][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][35];\n\t\tand[36][i].b <== eq[25][i].out;\n\t\tstates[i+1][36] <== and[36][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][36];\n\t\tand[37][i].b <== eq[17][i].out;\n\t\tstates[i+1][37] <== and[37][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][37];\n\t\tand[38][i].b <== eq[23][i].out;\n\t\tstates[i+1][38] <== and[38][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 44;\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][38];\n\t\tand[39][i].b <== eq[28][i].out;\n\t\tstates[i+1][39] <== and[39][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 60;\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][39];\n\t\tand[40][i].b <== eq[29][i].out;\n\t\tstates[i+1][40] <== and[40][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][40];\n\t\tand[41][i].b <== eq[16][i].out;\n\t\tstates[i+1][41] <== and[41][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][41];\n\t\tand[42][i].b <== eq[23][i].out;\n\t\tstates[i+1][42] <== and[42][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 62;\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][42];\n\t\tand[43][i].b <== eq[30][i].out;\n\t\tstates[i+1][43] <== and[43][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][43];\n\t\tand[44][i].b <== eq[12][i].out;\n\t\tstates[i+1][44] <== and[44][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][44];\n\t\tand[45][i].b <== eq[29][i].out;\n\t\tstates[i+1][45] <== and[45][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][45];\n\t\tand[46][i].b <== eq[16][i].out;\n\t\tstates[i+1][46] <== and[46][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][46];\n\t\tand[47][i].b <== eq[23][i].out;\n\t\tstates[i+1][47] <== and[47][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][47];\n\t\tand[48][i].b <== eq[30][i].out;\n\t\tstates[i+1][48] <== and[48][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][48];\n\t\tand[49][i].b <== eq[12][i].out;\n\t\tstates[i+1][49] <== and[49][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 82;\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][49];\n\t\tand[50][i].b <== eq[31][i].out;\n\t\tstates[i+1][50] <== and[50][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][26];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][26] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][2] * states[i+2][3];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][3] * states[i+2][3];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_amount.json",
    "content": "{\n  \"parts\": [\n    {\n      \"is_public\": false,\n      \"regex_def\": \"Dear Customer,<br> <br> Rs.\"\n    },\n    {\n      \"is_public\": true,\n      \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9|\\\\.)+\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \" has been debited from\"\n    }\n  ]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_date.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate HdfcDateRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[21][num_bytes];\n\tcomponent lt[4][num_bytes];\n\tcomponent and[15][num_bytes];\n\tcomponent multi_or[4][num_bytes];\n\tsignal states[num_bytes+1][11];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 11; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(10);\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 65;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 90;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 97;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 122;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[2][i].out;\n\t\tand[1][i].b <== lt[3][i].out;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 32;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 43;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 44;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 48;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 49;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 50;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 51;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 52;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 53;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 54;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 55;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 56;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 57;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 58;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(16);\n\t\tmulti_or[0][i].in[0] <== and[0][i].out;\n\t\tmulti_or[0][i].in[1] <== and[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[14] <== eq[12][i].out;\n\t\tmulti_or[0][i].in[15] <== eq[13][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][10];\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[2][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\tstates[i+1][1] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 13;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][0];\n\t\tand[4][i].b <== eq[14][i].out;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][4];\n\t\tand[5][i].b <== eq[14][i].out;\n\t\tmulti_or[2][i] = MultiOR(2);\n\t\tmulti_or[2][i].in[0] <== and[4][i].out;\n\t\tmulti_or[2][i].in[1] <== and[5][i].out;\n\t\tstates[i+1][2] <== multi_or[2][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][1];\n\t\tand[6][i].b <== eq[14][i].out;\n\t\tstates[i+1][3] <== and[6][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 255;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][0];\n\t\tand[7][i].b <== eq[15][i].out;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 10;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][2];\n\t\tand[8][i].b <== eq[16][i].out;\n\t\tmulti_or[3][i] = MultiOR(2);\n\t\tmulti_or[3][i].in[0] <== and[7][i].out;\n\t\tmulti_or[3][i].in[1] <== and[8][i].out;\n\t\tstates[i+1][4] <== multi_or[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 100;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][4];\n\t\tand[9][i].b <== eq[17][i].out;\n\t\tstates[i+1][5] <== and[9][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][3];\n\t\tand[10][i].b <== eq[16][i].out;\n\t\tstates[i+1][6] <== and[10][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 97;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][5];\n\t\tand[11][i].b <== eq[18][i].out;\n\t\tstates[i+1][7] <== and[11][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 116;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][7];\n\t\tand[12][i].b <== eq[19][i].out;\n\t\tstates[i+1][8] <== and[12][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 101;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][8];\n\t\tand[13][i].b <== eq[20][i].out;\n\t\tstates[i+1][9] <== and[13][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][9];\n\t\tand[14][i].b <== eq[13][i].out;\n\t\tstates[i+1][10] <== and[14][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][6];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][6] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][10] * states[i+2][1];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_date.json",
    "content": "{\n  \"parts\": [\n    {\n      \"is_public\": false,\n      \"regex_def\": \"((\\r\\n)|^)date:\"\n    },\n    {\n      \"is_public\": true,\n      \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9| |:|,|\\\\+)+\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"\\r\\n\"\n    }\n  ]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_payee_id.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate HdfcPayeeIdRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[21][num_bytes];\n\tcomponent lt[4][num_bytes];\n\tcomponent and[17][num_bytes];\n\tcomponent multi_or[3][num_bytes];\n\tsignal states[num_bytes+1][14];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 14; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(13);\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 65;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 90;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 97;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 122;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[2][i].out;\n\t\tand[1][i].b <== lt[3][i].out;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 45;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 46;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 48;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 49;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 50;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 51;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 52;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 53;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 54;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 55;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 56;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 57;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 95;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(15);\n\t\tmulti_or[0][i].in[0] <== and[0][i].out;\n\t\tmulti_or[0][i].in[1] <== and[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[13] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[14] <== eq[12][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][13];\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[2][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\tstates[i+1][1] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 116;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][0];\n\t\tand[4][i].b <== eq[13][i].out;\n\t\tstates[i+1][2] <== and[4][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 111;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][2];\n\t\tand[5][i].b <== eq[14][i].out;\n\t\tstates[i+1][3] <== and[5][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 64;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][1];\n\t\tand[6][i].b <== eq[15][i].out;\n\t\tstates[i+1][4] <== and[6][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 32;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][3];\n\t\tand[7][i].b <== eq[16][i].out;\n\t\tstates[i+1][5] <== and[7][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 86;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][5];\n\t\tand[8][i].b <== eq[17][i].out;\n\t\tstates[i+1][6] <== and[8][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][4];\n\t\tand[9][i].b <== and[1][i].out;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][7];\n\t\tand[10][i].b <== and[1][i].out;\n\t\tmulti_or[2][i] = MultiOR(2);\n\t\tmulti_or[2][i].in[0] <== and[9][i].out;\n\t\tmulti_or[2][i].in[1] <== and[10][i].out;\n\t\tstates[i+1][7] <== multi_or[2][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 80;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][6];\n\t\tand[11][i].b <== eq[18][i].out;\n\t\tstates[i+1][8] <== and[11][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][7];\n\t\tand[12][i].b <== eq[16][i].out;\n\t\tstates[i+1][9] <== and[12][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 65;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][8];\n\t\tand[13][i].b <== eq[19][i].out;\n\t\tstates[i+1][10] <== and[13][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][9];\n\t\tand[14][i].b <== eq[14][i].out;\n\t\tstates[i+1][11] <== and[14][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 110;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][11];\n\t\tand[15][i].b <== eq[20][i].out;\n\t\tstates[i+1][12] <== and[15][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][10];\n\t\tand[16][i].b <== eq[16][i].out;\n\t\tstates[i+1][13] <== and[16][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][12];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][12] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][6];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][1] * states[i+2][4];\n\t\tis_substr0[i][3] <== is_substr0[i][2] + states[i+1][4] * states[i+2][7];\n\t\tis_substr0[i][4] <== is_substr0[i][3] + states[i+1][7] * states[i+2][7];\n\t\tis_substr0[i][5] <== is_substr0[i][4] + states[i+1][13] * states[i+2][1];\n\t\tis_reveal0[i] <== is_substr0[i][5] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_payee_id.json",
    "content": "{\n  \"parts\": [\n    {\n      \"is_public\": false,\n      \"regex_def\": \"to VPA \"\n    },\n    {\n      \"is_public\": true,\n      \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|.|-|_)+@(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)+\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \" on\"\n    }\n  ]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_payment_id.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate HdfcPaymentIdRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[21][num_bytes];\n\tcomponent and[19][num_bytes];\n\tcomponent multi_or[3][num_bytes];\n\tsignal states[num_bytes+1][19];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 19; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(18);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 98;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][18];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 114;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 62;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 32;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 60;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[4][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[0][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[1][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[2][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[3][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 80;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[5][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 108;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[6][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 101;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[7][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 105;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][0];\n\t\tand[12][i].b <== eq[8][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 115;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[9][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[3][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 48;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 49;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 50;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 51;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 52;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 53;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 54;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 55;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 56;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 57;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[12][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[13][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[14][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[15][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[16][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[17][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[18][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[19][i].out;\n\t\tand[15][i].b <== multi_or[0][i].out;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tmulti_or[1][i] = MultiOR(10);\n\t\tmulti_or[1][i].in[0] <== eq[10][i].out;\n\t\tmulti_or[1][i].in[1] <== eq[11][i].out;\n\t\tmulti_or[1][i].in[2] <== eq[12][i].out;\n\t\tmulti_or[1][i].in[3] <== eq[13][i].out;\n\t\tmulti_or[1][i].in[4] <== eq[14][i].out;\n\t\tmulti_or[1][i].in[5] <== eq[15][i].out;\n\t\tmulti_or[1][i].in[6] <== eq[16][i].out;\n\t\tmulti_or[1][i].in[7] <== eq[17][i].out;\n\t\tmulti_or[1][i].in[8] <== eq[18][i].out;\n\t\tmulti_or[1][i].in[9] <== eq[19][i].out;\n\t\tand[16][i].b <== multi_or[1][i].out;\n\t\tmulti_or[2][i] = MultiOR(2);\n\t\tmulti_or[2][i].in[0] <== and[15][i].out;\n\t\tmulti_or[2][i].in[1] <== and[16][i].out;\n\t\tstates[i+1][16] <== multi_or[2][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 46;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][16];\n\t\tand[17][i].b <== eq[20][i].out;\n\t\tstates[i+1][17] <== and[17][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][17];\n\t\tand[18][i].b <== eq[4][i].out;\n\t\tstates[i+1][18] <== and[18][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][12];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][12] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][15] * states[i+2][16];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][16] * states[i+2][16];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_payment_id.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"is \"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \".<br> <br> Ple\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_upi_subject.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate HdfcUpiSubjectRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[40][num_bytes];\n\tcomponent and[71][num_bytes];\n\tsignal states[num_bytes+1][72];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 72; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(71);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 57;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][71];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 55;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 95;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 89;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 111;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[4][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 117;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[5][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[2][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 104;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[6][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 97;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[7][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 118;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[8][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 101;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[9][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[2][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 100;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][12];\n\t\tand[12][i].b <== eq[10][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[4][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 110;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[11][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[9][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tand[16][i].b <== eq[2][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[7][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[2][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 85;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[12][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 80;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[13][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 73;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[14][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][22];\n\t\tand[22][i].b <== eq[2][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 116;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[15][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 120;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tand[24][i].b <== eq[16][i].out;\n\t\tstates[i+1][25] <== and[24][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tand[25][i].b <== eq[11][i].out;\n\t\tstates[i+1][26] <== and[25][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 115;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][0];\n\t\tand[26][i].b <== eq[17][i].out;\n\t\tstates[i+1][27] <== and[26][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 46;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][26];\n\t\tand[27][i].b <== eq[18][i].out;\n\t\tstates[i+1][28] <== and[27][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][28];\n\t\tand[28][i].b <== eq[2][i].out;\n\t\tstates[i+1][29] <== and[28][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 67;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][29];\n\t\tand[29][i].b <== eq[19][i].out;\n\t\tstates[i+1][30] <== and[29][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][30];\n\t\tand[30][i].b <== eq[6][i].out;\n\t\tstates[i+1][31] <== and[30][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][31];\n\t\tand[31][i].b <== eq[9][i].out;\n\t\tstates[i+1][32] <== and[31][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 99;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][32];\n\t\tand[32][i].b <== eq[20][i].out;\n\t\tstates[i+1][33] <== and[32][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 107;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][33];\n\t\tand[33][i].b <== eq[21][i].out;\n\t\tstates[i+1][34] <== and[33][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][34];\n\t\tand[34][i].b <== eq[2][i].out;\n\t\tstates[i+1][35] <== and[34][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][35];\n\t\tand[35][i].b <== eq[10][i].out;\n\t\tstates[i+1][36] <== and[35][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][36];\n\t\tand[36][i].b <== eq[9][i].out;\n\t\tstates[i+1][37] <== and[36][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][37];\n\t\tand[37][i].b <== eq[15][i].out;\n\t\tstates[i+1][38] <== and[37][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][38];\n\t\tand[38][i].b <== eq[7][i].out;\n\t\tstates[i+1][39] <== and[38][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 105;\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][39];\n\t\tand[39][i].b <== eq[22][i].out;\n\t\tstates[i+1][40] <== and[39][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 108;\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][40];\n\t\tand[40][i].b <== eq[23][i].out;\n\t\tstates[i+1][41] <== and[40][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][41];\n\t\tand[41][i].b <== eq[17][i].out;\n\t\tstates[i+1][42] <== and[41][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 33;\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][42];\n\t\tand[42][i].b <== eq[24][i].out;\n\t\tstates[i+1][43] <== and[42][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 63;\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][43];\n\t\tand[43][i].b <== eq[25][i].out;\n\t\tstates[i+1][44] <== and[43][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 61;\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][44];\n\t\tand[44][i].b <== eq[26][i].out;\n\t\tstates[i+1][45] <== and[44][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 13;\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][45];\n\t\tand[45][i].b <== eq[27][i].out;\n\t\tstates[i+1][46] <== and[45][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 10;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][46];\n\t\tand[46][i].b <== eq[28][i].out;\n\t\tstates[i+1][47] <== and[46][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][27];\n\t\tand[47][i].b <== eq[5][i].out;\n\t\tstates[i+1][48] <== and[47][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 98;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][48];\n\t\tand[48][i].b <== eq[29][i].out;\n\t\tstates[i+1][49] <== and[48][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 106;\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][49];\n\t\tand[49][i].b <== eq[30][i].out;\n\t\tstates[i+1][50] <== and[49][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][50];\n\t\tand[50][i].b <== eq[9][i].out;\n\t\tstates[i+1][51] <== and[50][i].out;\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][51];\n\t\tand[51][i].b <== eq[20][i].out;\n\t\tstates[i+1][52] <== and[51][i].out;\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][52];\n\t\tand[52][i].b <== eq[15][i].out;\n\t\tstates[i+1][53] <== and[52][i].out;\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 58;\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][53];\n\t\tand[53][i].b <== eq[31][i].out;\n\t\tstates[i+1][54] <== and[53][i].out;\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][54];\n\t\tand[54][i].b <== eq[26][i].out;\n\t\tstates[i+1][55] <== and[54][i].out;\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][55];\n\t\tand[55][i].b <== eq[25][i].out;\n\t\tstates[i+1][56] <== and[55][i].out;\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][56];\n\t\tand[56][i].b <== eq[12][i].out;\n\t\tstates[i+1][57] <== and[56][i].out;\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 84;\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][57];\n\t\tand[57][i].b <== eq[32][i].out;\n\t\tstates[i+1][58] <== and[57][i].out;\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 70;\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== states[i][58];\n\t\tand[58][i].b <== eq[33][i].out;\n\t\tstates[i+1][59] <== and[58][i].out;\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 45;\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== states[i][59];\n\t\tand[59][i].b <== eq[34][i].out;\n\t\tstates[i+1][60] <== and[59][i].out;\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 56;\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][60];\n\t\tand[60][i].b <== eq[35][i].out;\n\t\tstates[i+1][61] <== and[60][i].out;\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][61];\n\t\tand[61][i].b <== eq[25][i].out;\n\t\tstates[i+1][62] <== and[61][i].out;\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 113;\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== states[i][62];\n\t\tand[62][i].b <== eq[36][i].out;\n\t\tstates[i+1][63] <== and[62][i].out;\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== states[i][63];\n\t\tand[63][i].b <== eq[25][i].out;\n\t\tstates[i+1][64] <== and[63][i].out;\n\t\tstate_changed[i].in[63] <== states[i+1][64];\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][64];\n\t\tand[64][i].b <== eq[26][i].out;\n\t\tstates[i+1][65] <== and[64][i].out;\n\t\tstate_changed[i].in[64] <== states[i+1][65];\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 69;\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][65];\n\t\tand[65][i].b <== eq[37][i].out;\n\t\tstates[i+1][66] <== and[65][i].out;\n\t\tstate_changed[i].in[65] <== states[i+1][66];\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 50;\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][66];\n\t\tand[66][i].b <== eq[38][i].out;\n\t\tstates[i+1][67] <== and[66][i].out;\n\t\tstate_changed[i].in[66] <== states[i+1][67];\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][67];\n\t\tand[67][i].b <== eq[26][i].out;\n\t\tstates[i+1][68] <== and[67][i].out;\n\t\tstate_changed[i].in[67] <== states[i+1][68];\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][68];\n\t\tand[68][i].b <== eq[0][i].out;\n\t\tstates[i+1][69] <== and[68][i].out;\n\t\tstate_changed[i].in[68] <== states[i+1][69];\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 68;\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][69];\n\t\tand[69][i].b <== eq[39][i].out;\n\t\tstates[i+1][70] <== and[69][i].out;\n\t\tstate_changed[i].in[69] <== states[i+1][70];\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][70];\n\t\tand[70][i].b <== eq[26][i].out;\n\t\tstates[i+1][71] <== and[70][i].out;\n\t\tstate_changed[i].in[70] <== states[i+1][71];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][47];\n\t}\n\tout <== final_state_result.out;\n}"
  },
  {
    "path": "circuits-circom/circuits/hdfc/regexes/hdfc_upi_subject.json",
    "content": "{\n  \"parts\": [\n    {\n      \"is_public\": false,\n      \"regex_def\": \"subject:=\\\\?UTF-8\\\\?q\\\\?=E2=9D=97_You_have_done_a_UPI_txn\\\\._Check_details\\\\!\\\\?=\\r\\n\"\n    }\n  ]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/hdfc_registration.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, chunkedBytesToBigInt } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\nimport ganache from \"ganache\";\n\nconst { createCode, generateABI } = poseidonContract;\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"HDFC Registration\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let poseidon;\n    let mimcSponge;\n    let account;\n    let poseidonContract1;\n    let poseidonContract2;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../hdfc_registration.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/hdfc_registration\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_registration.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_registration.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_registration.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 2 to 5 represent the packed from email (15 \\ 7)\n        const packed_from_email = witness.slice(2, 5);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 15);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"Should return the correct hashed to email id + bank account number\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n        const C6 = new ethers.ContractFactory(\n            generateABI(6),\n            createCode(6),\n            account\n        );\n        const C3 = new ethers.ContractFactory(\n            generateABI(3),\n            createCode(3),\n            account\n        );\n\n        poseidonContract1 = await C6.deploy();\n        poseidonContract2 = await C3.deploy();\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_registration.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed registration id\n        // Indexes 5 represents the hashed registration id\n        const hashed_registration_id = witness[5];\n\n        // Get expected packed to email\n        const regex_start_to_email = Number(input[\"email_to_idx\"]);\n        const regex_start_sub_array_to_email = input[\"in_padded\"].slice(regex_start_to_email);\n        const regex_end_to_email = regex_start_sub_array_to_email.indexOf(\"13\"); // Look for `\\r` to end the from which is 13 in ascii. e.g. `to:0xAnonKumar@gmail.com`\n        const to_email_array = regex_start_sub_array_to_email.slice(0, regex_end_to_email);\n\n        // Get expected packed account number array\n        const regex_start_account_number = Number(input[\"hdfc_acc_num_idx\"]);\n        const regex_start_sub_array_account_number = input[\"in_body_padded\"].slice(regex_start_account_number);\n        const regex_end_account_number = regex_start_sub_array_account_number.indexOf(\"32\"); // Look for ` ` to end the from which is 32 in ascii.\n        const account_number_array = regex_start_sub_array_account_number.slice(0, regex_end_account_number);\n\n\n        // Chunk bytes into 7 and pack\n        const toEmailChunkedArray = chunkArray(to_email_array, 7, 49);\n        const packed_to_email_array = toEmailChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const accountNumberChunkedArray = chunkArray(account_number_array, 7, 7);\n        const packed_account_number_array = accountNumberChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const combinedArray = packed_to_email_array.concat(packed_account_number_array)\n        // hash only the first 6 elements\n        const temp_hash_out = poseidon(combinedArray.slice(0, 6))\n        const expected_hash = poseidon([temp_hash_out].concat(combinedArray.slice(6, 8)))\n        const temp_contract_hash_out = await poseidonContract1[\"poseidon(uint256[6])\"](combinedArray.slice(0, 6));\n        const expected_hash_contract = await poseidonContract2[\"poseidon(uint256[3])\"]([temp_contract_hash_out].concat(combinedArray.slice(6, 8)));\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_registration_id)), JSON.stringify(expected_hash), true);\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_registration_id)), JSON.stringify(poseidon.F.e(expected_hash_contract.toString())), true);\n    });\n\n    // Could not find another email from alerts@hdfcbank.net that fits inside the 3200 limit set by us for the UPI email\n    // it(\"should fail to generate witness if hdfc email does not has the right subject\", async () => {\n    //     // Generate inputs for this test using `yarn gen-input:hdfc:registration:wrong-subject`\n    //     const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_registration_receive.json\");\n    //     const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n    //     const input = JSON.parse(jsonString);\n    //     try {\n    //         await cir.calculateWitness(input, true);\n    //         assert.fail('Expected calculateWitness to throw an error');\n    //     } catch (error) {\n    //         assert.instanceOf(error, Error);\n    //         console.log(error.message);\n    //         // assert.equal(error.message, 'Error: Assert Failed.\\nError in template HdfcRegistration_243 line: 65\\n');\n    //     }\n    // });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/hdfc_send.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, chunkedBytesToBigInt } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\nimport ganache from \"ganache\";\n\nconst { createCode, generateABI } = poseidonContract;\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\n// Constants used in the circuit\nconst N = 121;\nconst K = 17;\n\ndescribe(\"HDFC send WASM tester\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let poseidon;\n    let mimcSponge;\n    let account;\n    let poseidonContract1;\n    let poseidonContract2;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../hdfc_send.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/hdfc_send\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_receive.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo receive payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 2 to 5 represent the packed from email (15 \\ 7)\n        const packed_from_email = witness.slice(2, 5);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 15);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    // There's probably a diff on how the packing happens on contract / circuit vs how we do it here.\n    it(\"Should return the correct packed amount\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed amount\n        // Indexes 5 to 7 represent the packed amount (8 \\ 7)\n        const packed_amount = witness.slice(5, 7);\n\n        // Get expected packed amount\n        const regex_start = Number(input[\"hdfc_amount_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"32\"); // Look for `space` to end the amount which is 32 in ascii\n        const amount_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(amount_array, 7, 8);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed amount is the same\n            assert.equal(expectedValue, packed_amount[i], true);\n        });\n    });\n\n    it(\"Should return the correct packed date\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_receive.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo receive payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed timestamp\n        // Indexes 7 to 9 represent the packed timestamp; (10 \\ 7)\n        const packed_timestamp = witness.slice(7, 12);\n\n        // Get expected packed timestamp\n        const regex_start = Number(input[\"email_date_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"13\"); // Look for `\\r` to end the timestamp which is 13 in ascii\n        const date_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(date_array, 7, 31);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed timestamp is the same\n            assert.equal(expectedValue, packed_timestamp[i], true);\n        });\n    });\n\n    it(\"should return the correct hashed onramper id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n        const C6 = new ethers.ContractFactory(\n            generateABI(6),\n            createCode(6),\n            account\n        );\n        const C3 = new ethers.ContractFactory(\n            generateABI(3),\n            createCode(3),\n            account\n        );\n\n        poseidonContract1 = await C6.deploy();\n        poseidonContract2 = await C3.deploy();\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed registration id\n        // Indexes 5 represents the hashed registration id\n        const hashed_onramper_id = witness[12];\n\n        // Get expected packed to email\n        const regex_start_to_email = Number(input[\"email_to_idx\"]);\n        const regex_start_sub_array_to_email = input[\"in_padded\"].slice(regex_start_to_email);\n        const regex_end_to_email = regex_start_sub_array_to_email.indexOf(\"13\"); // Look for `\\r` to end the from which is 13 in ascii. e.g. `to:0xAnonKumar@gmail.com`\n        const to_email_array = regex_start_sub_array_to_email.slice(0, regex_end_to_email);\n\n        // Get expected packed account number array\n        const regex_start_account_number = Number(input[\"hdfc_acc_num_idx\"]);\n        const regex_start_sub_array_account_number = input[\"in_body_padded\"].slice(regex_start_account_number);\n        const regex_end_account_number = regex_start_sub_array_account_number.indexOf(\"32\"); // Look for ` ` to end the from which is 32 in ascii.\n        const account_number_array = regex_start_sub_array_account_number.slice(0, regex_end_account_number);\n\n\n        // Chunk bytes into 7 and pack\n        const toEmailChunkedArray = chunkArray(to_email_array, 7, 49);\n        const packed_to_email_array = toEmailChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const accountNumberChunkedArray = chunkArray(account_number_array, 7, 7);\n        const packed_account_number_array = accountNumberChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const combinedArray = packed_to_email_array.concat(packed_account_number_array)\n        const expected_hash = poseidon([poseidon(combinedArray.slice(0, 6))].concat(combinedArray.slice(6, 8)))\n        const temp_contract_hash_out = await poseidonContract1[\"poseidon(uint256[6])\"](combinedArray.slice(0, 6));\n        const expected_hash_contract = await poseidonContract2[\"poseidon(uint256[3])\"]([temp_contract_hash_out].concat(combinedArray.slice(6, 8)));\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(expected_hash), true);\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(poseidon.F.e(expected_hash_contract.toString())), true);\n    });\n\n    it(\"Should return the correct hashed offramper id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n        const C6 = new ethers.ContractFactory(\n            generateABI(6),\n            createCode(6),\n            account\n        );\n        const C3 = new ethers.ContractFactory(\n            generateABI(3),\n            createCode(3),\n            account\n        );\n\n        poseidonContract1 = await C6.deploy();\n        poseidonContract2 = await C3.deploy();\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed offramper_id\n        // Index 9 represents the hashed offramper_id\n        const hashed_offramper_id = witness[13];\n\n        // Get expected packed offramper_id\n        const regex_start = Number(input[\"hdfc_payee_id_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"32\");  // Look for ` ` to end the offramper_id which is 32 in ascii\n        const offramper_id_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        const chunkedArrays = chunkArray(offramper_id_array, 7, 56);\n\n        const packed_offramper_id = chunkedArrays.map((arr, i) => bytesToPacked(arr));\n        const expected_hash = poseidon([poseidon(packed_offramper_id.slice(0, 6))].concat(packed_offramper_id.slice(6, 8)));\n        const temp_contract_hash_out = await poseidonContract1[\"poseidon(uint256[6])\"](packed_offramper_id.slice(0, 6));\n        const expected_hash_contract = await poseidonContract2[\"poseidon(uint256[3])\"]([temp_contract_hash_out].concat(packed_offramper_id.slice(6, 8)));\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_offramper_id)), JSON.stringify(expected_hash), true);\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_offramper_id)), JSON.stringify(poseidon.F.e(expected_hash_contract.toString())), true);\n    });\n\n    it(\"Should return the correct payment ID nullifier\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned nullifier\n        const nullifier = witness[14];\n\n        // Get expected packed offramper_id\n        const regex_start = Number(input[\"hdfc_payment_id_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"46\");  // Look for `.` to end the payment_id which is 46 in ascii\n        const payment_id_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        const chunkedArrays = chunkArray(payment_id_array, 7, 14);\n        const packed_payment_id = chunkedArrays.map((arr, i) => bytesToPacked(arr));\n\n        const expected_nullifier = poseidon(packed_payment_id)\n        assert.equal(JSON.stringify(poseidon.F.e(nullifier)), JSON.stringify(expected_nullifier), true);\n    });\n\n    it(\"Should return the correct intent hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const hdfc_path = path.join(__dirname, \"../inputs/input_hdfc_send.json\");\n        const jsonString = fs.readFileSync(hdfc_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus\n        const intent_hash = witness[15];\n\n        // Get expected modulus\n        const expected_intent_hash = input[\"intent_hash\"];\n\n        assert.equal(JSON.stringify(intent_hash), JSON.stringify(expected_intent_hash), true);\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/mocks/test_hdfc_accnum.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/hdfc_accnum.circom\";\n\ncomponent main = HdfcAccountNumberRegex(13);"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/mocks/test_hdfc_amount.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/hdfc_amount.circom\";\n\ncomponent main = HdfcAmountRegex(56);"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/mocks/test_hdfc_date.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/hdfc_date.circom\";\n\ncomponent main = HdfcDateRegex(40);"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/mocks/test_hdfc_payee_id.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/hdfc_payee_id.circom\";\n\ncomponent main = HdfcPayeeIdRegex(40);"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/mocks/test_hdfc_payment_id.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/hdfc_payment_id.circom\";\n\ncomponent main = HdfcPaymentIdRegex(61);"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/mocks/test_hdfc_upi_subject.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/hdfc_upi_subject.circom\";\n\ncomponent main = HdfcUpiSubjectRegex(71);"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/regexes/hdfc_accnum.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"HDFC Account Number\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_hdfc_accnum.circom\"),\n            {\n                include: path.join(__dirname, \"../../../hdfc/node_modules\"),\n                output: path.join(__dirname, \"../../../hdfc/build/test_hdfc_accnum\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        // No commas in amount.\n        const input = {\n            \"msg\": textToAsciiArray(\"**5678 to VPA\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"**5678 to VPA\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"**5678 to VPA\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"**\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"5678\"))\n            .concat(Array(textToAsciiArray(\" to VPA\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"**5678 to PPA\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/regexes/hdfc_amount.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"HDFC amount\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_hdfc_amount.circom\"),\n            {\n                include: path.join(__dirname, \"../../../hdfc/node_modules\"),\n                output: path.join(__dirname, \"../../../hdfc/build/test_hdfc_amount\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        // No commas in amount.\n        const input = {\n            \"msg\": textToAsciiArray(\"Dear Customer,<br> <br> Rs.1234.56 has been debited from\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"Dear Customer,<br> <br> Rs.1234.56 has been debited from\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"Dear Customer,<br> <br> Rs.1234.56 has been debited from\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"Dear Customer,<br> <br> Rs.\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"1234.56\"))\n            .concat(Array(textToAsciiArray(\" has been debited from\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"Dear Customer,<br> <br> RS.1234.56 has been debited from\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/regexes/hdfc_date.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"HDFC date\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_hdfc_date.circom\"),\n            {\n                include: path.join(__dirname, \"../../../hdfc/node_modules\"),\n                output: path.join(__dirname, \"../../../hdfc/build/test_hdfc_date\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        // No commas in amount.\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\ndate:Tue, 16 Jan 2024 13:18:32 +0530\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    describe(\"when date starts with \\r\\n\", () => {\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\ndate:Tue, 16 Jan 2024 13:18:32 +0530\\r\\n\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n\n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\ndate:Tue, 16 Jan 2024 13:18:32 +0530\\r\\n\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"\\r\\ndate:\").length).fill(\"0\")\n                .concat(textToAsciiArray(\"Tue, 16 Jan 2024 13:18:32 +0530\"))\n                .concat(Array(textToAsciiArray(\"\\r\\n\").length).fill(\"0\"));\n            const result = witness.slice(2, input.msg.length + 2);\n\n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n\n        it(\"Should fail to match regex\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"\\r\\ndape:Sat, 14 Oct 2023 22:09:12 +0530\\r\\n\")     // replace t with p\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n        });\n    });\n\n    describe(\"when date does not start with \\r\\n\", () => {\n        it(\"Should match regex once\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"date:Tue, 16 Jan 2024 13:18:32 +0530\\r\\nto\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n        });\n\n\n        it(\"Should reveal regex correctly\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"date:Tue, 16 Jan 2024 13:18:32 +0530\\r\\nto\")\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n            const expected = Array(textToAsciiArray(\"date:\").length).fill(\"0\")\n                .concat(textToAsciiArray(\"Tue, 16 Jan 2024 13:18:32 +0530\"))\n                .concat(Array(textToAsciiArray(\"\\r\\nto\").length).fill(\"0\"));\n            const result = witness.slice(2, input.msg.length + 2);\n\n            assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n        });\n\n        it(\"Should fail to match regex\", async () => {\n            const input = {\n                \"msg\": textToAsciiArray(\"dape:Sat, 14 Oct 2023 22:09:12 +0530\\r\\nto\")     // replace t with p\n            };\n            const witness = await cir.calculateWitness(\n                input,\n                true\n            );\n\n            assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n        });\n    });\n\n});"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/regexes/hdfc_payee_id.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"HDFC payer id\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_hdfc_payee_id.circom\"),\n            {\n                include: path.join(__dirname, \"../../../hdfc/node_modules\"),\n                output: path.join(__dirname, \"../../../hdfc/build/test_hdfc_payee_id\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"5678 to VPA sachin1234@paytm on 28-10-23\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"5678 to VPA sachin1234@paytm on 28-10-23\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once when there is hyphen (-) in the UPI ID\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"5678 to VPA sachin1234-1@paytm on 28-10-\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once when there is dot (.) in the UPI ID\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"5678 to VPA sachin1234.1@paytm on 28-10-\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once when there is underscore (_) in the UPI ID\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"5678 to VPA sachin1234_1@paytm on 28-10-\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"5678 to VPA sachin1234@paytm on 28-10-23\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        // 0s, sachin1234@paytm, 0s\n        const expected = Array(textToAsciiArray(\"5678 to VPA \").length).fill(\"0\")\n            .concat(textToAsciiArray(\"sachin1234@paytm\"))\n            .concat(Array(textToAsciiArray(\" on 28-10-23\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"5678 to VPA sachin1234apaytm on 28-10-23\") // @ missing\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/regexes/hdfc_payment_id.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"HDFC payment ID\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_hdfc_payment_id.circom\"),\n            {\n                include: path.join(__dirname, \"../../../hdfc/node_modules\"),\n                output: path.join(__dirname, \"../../../hdfc/build/test_hdfc_payment_id\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        // No commas in payment_id.\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nansaction reference number is 123123123123.<br> <br> Please\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nansaction reference number is 123123123123.<br> <br> Please\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nansaction reference number is 123123123123.<br> <br> Please\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"\\r\\nansaction reference number is \").length).fill(\"0\")\n            .concat(textToAsciiArray(\"123123123123\"))\n            .concat(Array(textToAsciiArray(\".<br> <br> Please\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nansaction reference number is 123123123123.<br> <br> PLease\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/hdfc/test/regexes/hdfc_upi_subject.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"HDFC UPI Subject\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_hdfc_upi_subject.circom\"),\n            {\n                include: path.join(__dirname, \"../../../hdfc/node_modules\"),\n                output: path.join(__dirname, \"../../../hdfc/build/test_hdfc_upi_subject\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"subject:=?UTF-8?q?=E2=9D=97_You_have_done_a_UPI_txn._Check_details!?=\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"subject:=?UTF-8?q?=E2=9D=97_You_have_done_a_UPI_txn._Check_details!?=\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"subject:=?UTF-8?q?=E2=9D=97_You_have_done_a_API_txn._Check_details!?=\\r\\n\")   // API instead of UPI\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/hdfc/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\",  \"test/regexes/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/namecheap/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"W2QRIYo8Dg3EPjwjAzV1Mx4AWBbYhog/2fqQcbrIkz0xXrV55pTm5nGL+OMMcCdHxKi3slT78/Nq0QmoG+2FzL0kWXKIVHqxtm7BxVCECWJQGCjQZfDQfqL+jHqEQnLt5xcmc4zM+G5w+ImJyv0E6fG5lmp/f16YEA+4sMIlhQxXSnlBooU4cqrMxNK1JQfPp1tVNQFfrW94+WcaTm3Ns1ZB/N5NfYy6ziX7qgIc7AtZHesjHLapNK0ZK1i4GNVIplkItOn6w/R+vW/6mWmJdUmoUqwgX8fPKsXKVIoiTPfp7sU8zIyIwRAlkPPxHbie37rb3fc9jFsKALG1APmdD7UbyTiXxTbaUGEEUjZ0USTrWz7NYjESqXg4eTu10+QkFEZtVfV0E1KSGI+wdsj/hEMexBxrml8aWQFH29jrX9fvuvp6t2oIECIgogRkb3+MrH92W73ttM7/NwoBkhACRKrunpksc5SYPnz3o11ZpjFwMqQtiLiLEmy/1dHvh+YXZp1e3gpjvUNJ92vX8mrCFrk4xtPjvsQXFVgmQ/3ZafSL1cpAH4sBxpLjQrpJxRQresAU77eUeFloPrvVRkpOkTtG9GQYe1yn1l/to51Dfh8szWPm+RlAM7aRNf96AM2giNQFBJwG+M+f0XBC+v6OxsEqLNvLrBwOhN6XQROGFuzS7OO6LBoeYcb0u3fTgwek5eZWNH7DQBf/O9KJBeaNGruKV0MKp53Ws02jOMi+NAvpBJ3Jd7VqxsbXlaAZ2gyWPMgmX5J+W1hHNfWPvQqx0nqlZtV3NmrAU1Be/QG/BotuT7ipISrJvzHuxKw8Zg+AQUsYPBS+spnM+E9SBWq/E1vUAq6tQl7ahXhEwfpHVxLOgZrorkD6iHK2CoEJvx6tMSj9GlcR2QEXgg6p3qM4gGEAcb06WpOHbjQEt5HSiP/D0Qp+XJWbjfSv0lWG0gmY13RiY2AL9wGftld98QxOkEZl7kMw6k10lpO/C+BM+nj87+T4/TvnWN1AyXt6MSmU/YMDBJBBB1CXvKvo29mjVqtalVf7NGl3Zi31W1k5dos9k+38qjO6Ruj+oZ4L/g7pZ9lsyez00cgVFhvXRvcd+zQtpyj3xUpozpBYTGov4es7ZKAblavQ4EnG7/TO3iBdvTaXMTzGgpAlGv6cx9AF/cNBZiE+gF6f12qThUSzz0XY/M0AsCG9G4ywmUN933dyg82clp8JG1DEDSXeFFwknhdfTEHyNN7Pn9cRBCEo3yCXDV73/NlGJ+L/5vsvh8s999dSv7+nsPY0QnqXkWgyPxDlmVmGC4gC0UgMgiWCZT8e4foSmR0dnvdkdQJAJhMfQeJYtOg3pNm7i5jJizJmzs9UsXxa2meSD91or4zAbbxq5Si12uiVJfuUaQl3mMLCs1m/IugoMC/twr8S6la2cCJdbYRBckwAKJFcs4XTqN4KP0y7s2i97paIO6ro3/36MBxn0XGnDsDkHQrgaEF1VeXGA8WuFZf+zeg3olZXKe7saKaHooBsz9jvfChZaRVJexxF0f2LYrxNX0mvI7z9Tg8eiIWIurCPJNgEWm1GTGIOZuAhstFrH9ljFdQWNR6KODtQ1u5iBGKuffTtPkfjxrPkrLNko2MIV3s2zfk7dBci4q6eegc919bB716Vt52QkvhAS4b/VTQDoa6dzaIJCYVEmKtZkzJN/mUXt6XoWd3eZSM9mVJtoiWCN24pF4J83inWupcDtCz7rL9I6sRbDoBcoYlmqQCXEwgWuNmj/wG4VhgR96iuiYAQHYRRm+dMRpzXLF/GR8tWqbPTKDSQ9xPWUVWbFqZLn3td0AuRHqvT2QDO7wcA8TDIDs2rtoKDJG9IrozeZVSF9oOK26D9O7cwrNKnjRbqO0kWu7+nfWHM5a0wJYx0krheHCXZ3EOeyslJMuSaUJoHfYJv8OQe/lw2R1MqNCVmn06eEnYoqepsyw500JRHxcsvpypMmjoCMdGUxbcgq+EWtAsLBELDUuv6W3XsbjlHXjUqlWJ2X+yQwH8K0iW6i6aLRM3zBcXRJIhmloL2c4bWXkSR5+5YSzo1SgQnqcIHJ9w5UEo9BRFb9R5nkZDh/vq4R8X45WkbjM8oLTn86kRZEScOknLNlRhXk1P+lxoStwe7chJ5EC6DYqHJ8ZCu5teUsG3UCKNwN0vfkyC6f977WaMRG/oCBnCwEF6S2YpbnHXvBEidEh5oSMmPdt7sQwm9BHnOMBw1KC3AgBsmR4JSVe3X2+QApKh+hiPHPCcFtPGczbcIVXSM2X3gno7TrpSygAi8mcTkQkW+eXltHsPBoZPHPZhhYvFifeWWp6D1iL1orCxRUr8lL/umNH/KpZqrcSnHnRSiPjP5oDYRjNKx1MBos3EgwSvYfFijpIakSzOGluVAqwp1tVZaPeJJjzgtsfk28Yp95suwavFP6edpHLa8erI2N75xpOUy6hXillfJAIiOywX3UOwBR1ztUfJnGKFmcBrL3QZOsXwZ8vN5tVYY4fHsib6MkvjwfDbafQFgzJ7Udf1qXgiwMbCWH4SFWvs4q5pgaaUaRR/tjpket81YrCgEKBKpAwf4VqZErIGkhLvfqQxyuA+uRKMLgyVpn3sQ1JBHZMHBtw29aUhMCvmf5Pw36i4unSkKs5YURHmPPEb/ecBgBUlvDajMah2Hx3EszCcSIOSdWxev/TaCtS+DgDitF9US8Tpp9MzvtrSrRg5VE+fFyKu0NcK4hhsrj1ZBAj+nDWWGDouvz/AEY/zLD9HOeOfXgo89KtrHBEWFPQwz5yEDjQ7oJl07LHV9Z5giJUyXpToj/3kicbVGdfBo01Byvfhurb77dqjvpteP773aLyRVIJ83VaM5HYFsGw2rqcfXsdHs2FVumOdsqog+CgnKUHciiPh18DqWwyexMHzwuYP0qE3S3ZEa5jH3cPBTjTxJOriqljuvbbNx56x94qx6VzdG/R8D5dGWVcy8SrmplNBv17VYo0zn7OLg6JRoeEsbewSqFVr6aIftYrnltEw1LtKTfpo1bYNbghR+p50E/R637oCiSaS7U+KgJwzWjjdpcNsyMBch1SpO7SH8RwZBPsetpyaMXTfO1/jVFTCzYdyTYjCoPMTmirbHGeVolRk0fGK24XRdXPZBYyMqI+AQoaq6A6q0H3OoZRWNQJ8w7QCvthn4Bn+j4nl3aRElnm25ZgEIvs9oxrSuOizVPSQra99ylaMVDq1AcX3SA/bNA/4bS1JlvyVQcV/1pw/8DxKMPMShR3XBSSZoRfZFLmynx5XcuvdprCMqEAN5UOn8gx0CRw9bITdeCQTNjUwI5+rVBLM4tjC/ceceLxnHi1YMM448NzUkVxngPS0p7dX0kSw2LZJp/QzamMR2OseDoZJhJbgwXshbGXUxpBws67Vp4AibNnwqAd/TLOI3NRO0p71be4PhwHidnPDvuwOqpUP+N71v9LrvJslOKnrzmFbZz77HppLiOdU/433zOPrXkFTn9mrdjK8/zi853R1/8Ofpijy1DoYljrOfJmsg0cv0KU2GZdc3SYcse3ddHvfo94zqcblzl0pFe1i2lQz7Hq4Oafqny9xZ5kvAvceuNmeNrf5LEqmerDgt0NpNhiq53lCXpNbR1JwmMtgbyWDitqYBGcBEZB1mylkMyyawHtC0ZPY1mn6jkfQCzqxCnw/LmyIftBNBGysHKMwlRvJGJ+w1sbK2vzBf6wHbDulYXwt7lWG6vVsbz8I5bHe/VbHelqGVsRGzYnaDIwoY3wL0ZlgJ5vpHzH/3Yms1OkKGGBYpEUtdiLDF8SqmRFmFjncvOdg8BP2BcsRcqOBWsHhjd9E0JnsiVQvMbCCrCAGnMVTeRbnq7eUJTTWAeYZ+Z071Sg1x7zXZxTjoplVsNVTrcvdb0Rle1yTn2liT3AVHEBfE4/92shZSAt7+lbqWwsHQ1fnqchqAnR+BYKLASv62ax6385/9TV/wNs95G9+ArEUkoTukCcqqc3H937ZTtNamoPFRZq+OeCsVHz0E7yOJqLnI2tNFy0UnisbEJT44OKZA92ioa+6YVuC90IqdQYEukCAIwssT33DVUp310mWVDMUsUnWVQZEtvk7F9d+5WhwD0wjZYhjmLW17wjUy9b3fRhtPFNA1rhoZ6mB9GVYABkdUOFQVcGHvHpzVKfw5vm3Ro/g9osk4ycPAW0N5zJ4KslWCvWXmXZZwjH/h3zkXVk3WDsxfbg3YZ0Dg47bdvFbcoQUnfbyyYMc5acOa6XL1M+uX3rTJJx3RzM7f9aCnHjCs9sbiU2bDBymlADCw/MPsyrmQ2jAA8HIbRxO7XpFh5grpWTCRpLSUy27/Npcu6IuB8QGuiBuFikDgpSooX1FtA42KQGg1+5S2jQhMzdJmCj2ufYLU8w+ie5fJVNR2Yc7DJjcguXXb4qKGa/nLdSXwizzLGtvtK4qWDYuAy/vVyU75oh7ZIxoD+Oonfvjpte1Q+H1BxNqvIsG+bv7Y2IsPchq+FJhJtA9B3FLxGjhRj2WK7aF9aYWnOmRCxCF2TJgITk4iEMck+bnOrQjnIFcDVLumgZ/X7OnZDOGd51yZl8P1mTFHZH0eNPX44PJijqJ7fxbMqeC8txGMrmuDDyy9QTpZIsCh0wszWmBLvHbemL3/nvH9PQ7LV3EekiV5I6QsXnFybrZtEBcEmf5WjxeHEfNx0GtePUixEOubB5t4cMaPz2Xa6dA7qHbr2C++Mgc/aE4+g4K+d9tsAObG+pyOrNVnI+O3tRY7aBPnMeFRNaaDxvjWJA+mGXwy9E8P95qexF6ZxJgCj3e3wfemkxsr75KhtKZSzX5M04jPmsVl0DLyh81S9WiOFQAoj5Ieqk/NdvWsHDypgvYWGZ3EB0I0Irm3LSCqOnOaLGYE5rB0e8mMoR8qwd+P43enTXSohyFkENlXTdO4tune88SsbgpMkzH30wfw6V/7qNcxweQAB9cfbA+oZSb3yDJ+Xr3jn4q3n168cfeqSP6Umc5Am3yw6zOT++AQEAa1CmehtjeMXVGWXJs0eb7lqcmdMU7WjbA5GJ9RaPZdlqqRbynT+9VlglmGqsr53UfmZ05RVIDkbNapvMiFbyh8muzFN5N0WLXIcQOU8k0WE7BtyizkWBmb84+rOchkSAgot2zvCbUtfZYyLqXyNdfS7jWpAaWYRf2jT4WWhO209dUjCi0j1iY8fOoKN+a0ohU2hGpozNdMHew0JKTQ3UFKbhIun0fP18Rrb2pkHjC8my2T3jo/umMixN0i70gIntEND1eFZ4Ts+waXWp3VnFmCZnf9BnO7HoOonXD1ow8fUJfvVWgH8fI1NyDJUX3ukExaFmu498AR6+G3f/cHGIhZJ5U8qiPgiIknxnmss/jU0HlgRAzrhWzh7FD/PiOu58l/3nwISdwU4OSnfkzgQAYgehWE+39D+/3mCCBzrFpXmY9pX4KF6f0zeiVuAHT89Ui7KtuoFGy3UXm6Ee5nrUw9zL+f4WCMBtTCrheB9DV8I7B4jKOjg7a/zeuzOi6l1jApciGvnWVuuUtHkzKczBNWQ6hz1lD3lBFPyZDIOVVpL5vcIXVMowSeVTVnc4gXYZZxb8rtcf7J84SNe5PuoU0lV+kz0vFgs3oxqUGkkxOt238TUmXgUN8351TeMMVIotUPMUk1j1J/ZuUUjqbIH+YiKjdclWArUxlj0nwagKrVdCfknM5d5c3TgfQZmzYq2Wh0PuBN8sxHoIgCGAelAsRSQ3oQ2esT4WNlvjqIWYY3Z8KJhsSDwplnYQZYxbMxehGd2ieD7Aq1JvQPJNDughNqUjMYv02uQ0FMdDwC8KE/lpoU7BI0yrfGKcJtKHq7TC5CigwmYyizKlZsm+mT4fho9g0TUalb+dsCZPpE9hhZS5yGwN5n6x2p2BdNupJDlbvHUvszLhrgdVRXCDBez2HA7xHMjDw5jOLiMMO/hP0EVSJ+j6RDZb1k5wFHtrNmSIgEnnl7mZC6EYg1XNHcdthirMspycqxOljqi6rq6zD2EHAIDEoQajcs31xaR3z9Wi3X6gPTGKmXc1wrrGOCIjT6OR0o6/n1gHzMfX1JNssgyDaBMKCOR7XmMACMR8SHAyA34RFGZ8f8jvOrTJQXB5ZppE1HouYE+m9i5T6za3/nnRSgV/aNZ5Lwh+pAnB+iJnk06hXbT9vUDoBP17ifF7XVJTZNDpx2sCe0hoJc36Z9fCwtD0W5Y4R8Dt8uXY4wp+Ix52iApseJIt2AyxXgx9o2eihkJ795DuXot9qbAUVy6tqRgXf9SqILYcU7yi84wLfT/gohSU8dmm6/V7I+t1XXB3q5V+CdYEsLAOnRRbE0gvqq99Gh2otsvxIM2uDrL27G7ivYJzcdjCwdGMIX4rq6L667a/7H9S6K3a3G7oOL3W3F7gOJ3WwtFsM9cud0V4+BI8DrKyzgDEkYyaxOQ1VTnO2bygkpVxJdvrik95ZTpCVrgiHWiYfIQ3qmDx/3bTbxEniYoN4nwBpD0ljF7rWUHzjdXE5IudLp9M0lvfecIi1apf0l4vze2Ea/JLLcyPIGlswwWO/szBLDmno/XiL2dMb87aLTZa1cF/2Jqh5fdk8sv29wpIFu4vBJm5pgRvZlmPeE7eq9f5qBqSLbnA8G6c+LKhv6J+1MtxxpLBQcPXl+qM9x/DDS5fsBb7VH41YPpqxvnF1y9RZDHTnr2jqr5+wbggBrgS2f3TzNP+wPNszf3WZfD967s0FJfxnW3cjU/j0od+wD/4/ec577e8BV9wic3O0gLsCTY339BeC1Q2tYtE5k6BhfxmETz4AqK8xd7yeO2vJZYaNCo8Qw5TwTWmOp48/X1PlEENyjA4BCwwfMIUgU0HMT9hi7ZC0HLMnTOL0+TiFYP85l+mHtrapQBY8OtkGZk/+2pGxnYrf/ZU/HzXobX3Uej2lHrxNNkw9lA6pb2sXwsNMGQ/uBNV2ql1OreMONJctHtZR/7t/s/zgHIgfr5sLzjjLwKwrpQSh7qoLnZdj32s/PVsdBvN+uftTF+eyxvaHWabPytTptL/7Cs89l2sTbxN3gyr2Am64h+8pEQP22qPIhEIbWlwKdqiKfcc4Jae6WG1U+pvnMfHJhfyJ7TTpOwe1nh/n1RaYa37AvNsuVL38yI5M9V4ZbVjX2ym3HtKOFAw6jjidOmaqQYF1++igBbQZN9tdSYUft9JgM8RxeOZnPzy7WXODUU5tj/ZoSTNUe5p3aXqqJqFfMHfdvAZ+e/pDBSbCtR4CQF1W3Hm76kzS5+vj9P7nl5O/JkZRBWv+Ae+JDrPFsDWmsWCS/8TfV6WUfT02WgK/3yVs2HdDyg9cJxPHkMw7S/tpIUodlz4wlb+dCT7oPHlsnZhyPNaussXwv80fv0s93fS50z5EOnMmQL0EmG/HvT1DjQV2X0hWgOC4+V4lFxQNUWd8gzdZhB8v+4mNg38xPN5b6Fpch7UudZ1/zKrJl1EFBi/Pq3mXRZo+jHkjAU3cu+Ny1/BhQn5jZVquMgXVbWmURKClKs99qgcpbToEoRM29Lab0JUfw0Mb0DGSMAPDYgjic6XtYyO17vAlETvrrs9vY7W1sQUaVgva3PQkjdpb+JhDedSvsvIXZh7jeKGL/diBhdKcAaFfxhHLpfNON0K0Xb4NW4wYT6uEA+8ilbTI8c+jVD+uNLXwVZVZ0CaMNeDfZxqGuriVtzVLYpoGweWkzrIfea8iMoevNHBg1xElP8wZPMu+rL+vNBWiERr5W1uH069BYPD+vx7h7Cq9jIsTX4ViB5/cxuvN9i937Fbv3M3brEcg8eKXSaGEA9guDjpT1LbOEASXg9t4ayUtEScXyqFsA94sHHynrb80WxpSROL83R8TyxGqKbsaNqq8M1Npo1SANWZ/7o1OtLRKHqAPW2cTRmd2RozCJpXTujxTlyQCMJb660Y+rIkOWBkF6atJen/uCDPU2f0euoV/dY+7pfYSaJ8PSi1uJGNcEvZW+6DGmYV39IrBchFctnctRc3QNc4XK8rbPGCskeiv1kS88ksoayxgrbEdvpDcghJmSa38ArdU9scrXUUOtcK4PzogzvD2QM/sl3/higPL6LfEs5Sb+p7R5YEQZxEyB8eSw5TTz7StN1seukzbZX2Imd/XCuIyIIxMk8oI08/8vyy8SPGeWPtmOLIB61WNklvKTD0n54xc3rPnLO8Ndfq6O7IlynJ/HIVCcazY9BnR6U2aOfER0ryEdt9OfU+CWz/19baCP5qyqW6FSM0W/OnFMSN9xVMCsCxavF2h7qQ/BIAqppF8AUhcmoQmc/X3hEUyUUisNZQBoqwQSi85/fwhDsIV4xvbQhRAWTcYhCzxDXgp5gCKPIiQMNcO7tp6Z1p28KXYmTx86L4ITqfFZvrqv9ZC/Uf54qBzYHyoDyMf2dQanjwDq/tiw/y2CkHd2+q2uH+tlV+UBsB6i1yfP1OXjcaPPpprMjwtqvQP+sh7rM2kIbkHaEVqUFtcYIavh/BUi7uynLMdFts/doghIir/LTnt31rbInnQfy8ZDphwfXHL/OEzZUWAc5HUgwBG1i9fhTlwdOjBajnzQadPuZrMk6YlQFXrXPBXT9JEgCb2ASEkxxlB8K6keI2lx2kNhPsw7krjoyDBm6IHdN3TkJDd7YyzDW7y5hQ+f3kkY86OTU5yEoYUR48IHYViLzGEUIm9CQ6azU6/yj04AKim9XEWExP1an/OePH15I5hybA4BT3ei0b9mBbc5zLg7WrsYlL+15hgDoTyH0ZWpBJMVac4K562i03cxcpWSARHlmMVQkCFQQfpTr6mPv4boI3ZGhiB9h4UhLFpILhl4Go69AH2tKuzT7mpRFMRw51WlB5c7vEXRRdhJp5GhL94Llz9AGRTF8wnpbg/8REjtK3i8Rqyk1tDGRxBr1+MxOMqoRpI1M8dsAx6mLnN9X+j9Z7ISjG14FjU6pHl+C4+OZqyiS5Gm/5DwW1Sp3p8FrSCTmM8T5lesd/JddsFW6ESql3lzYrgjVWv2My6nQo3g8BcHvn5qaFqR5aGfZGvZI9pot6jDzkR8F/tY2Bn9elu0yXJyCuRnWJ87eVY/AR71NWp4d6j0mTV53/i/7KVa7O/j8qEJLgNeMrWlmSGdWALB0FRGdFuUs8GR2EdRm6+aw3KTq+xwBY1p0yeQWNUakl/QxCtucxATCJqvjxIDknf3yZcnHqmRdk/+7XXgDKUxjSdo/E1oxu3CY4gjaNiORua5DD3nBNtWNC2UvFEMKrpmEz2EwmO8WHxlfBcr/b7CWBd01IqvwvQNzy5UvWzH5Y60vlRzP6MXbhdlstiE0dEp+mhN5QYNu+xterH8yrzY/CLzK8a3W/1+oYNZNGjg53XjGxWM09AEk+Za3myHJBK1xvgfeeJqxi7oYAgxssXSMTZUxpNeDjhAIeUPjYqhzkz0FM8+IGXFZl6Uz04Q5T6y73jR80tghuvd1ikGJ0wbJXZI5fv5UHqzSNsqg63N77+tSL3i7IqrUmq2sQPool6byFS/p5yF453fKqQpV7wsBVXiLGVWj/DOANKpMpE9IsxlOGLwJvszCV9kOvQb9cb/3xGMHCITW8nLKkJy3s9BwkKXPdQY7tIUrC5c6LZRTwW8q26BfUgTJCO0oZdps23hWxcoIprOa4czkoTWWr7YQbkl/EfmE/rPteWgODVTgq05S5dDo5K82mf8U3y3sCk4ZFqs2YImAdVwWNloKConEtlqf1cOlyp3n5rL3Kv/JOvkZKhHxa7QEkp9GWx5qWr1EsrgFlrVF7GmgZWzANf+j5qx+prWIuxAxcA+EIuFXkI709aJZzn5ZQENWOh0cWEAmWHevuV6PuybJsSfWD1NXtQXGUWkRNsXsGoiaqXws+PB46IZXXoqn0yhEwe2B/jnL/Zf333R0c5lm/9z9mCcb5ya+z6HwO09dzbs/3a6v6apFDbvDsa6vJHprX4UjcLyirlGCgKy2qS14iVWW8xJegKjVUYQ8HY2YhS/QCdmpp8uT3YzL/NddrcgvPEuaxH+XoDZJHUXNxGCvJEe1FJ61Dp8sRBvuaOa7K6euAFDc4KZGRSXaEY6x1YFuLMhfBZl63pzGZUuPV1Kmm8+qs3NmJN3npq4+oAOcKOQdfga0gUfH9uXCHw1Q2KBRGPg4g2jSbm2lJ8kYrLkDV5a79gA7Q1pHg8q5rMMH8tE7KfzyBp5tLFnFqQDwG2sd6CGzV0EsjavJzIdUuhyRABt4SSG5Xz9wATtjckvT070iazaIDpzJwuv6ZKS773MxXnKbbSLqnnpBSO8S2hnZmhhwMJUhMZC34gYrXkcGIqYGoC7NxawdLBEuRONviYVUtEESDesWuDIIVra/woqRLB5bYYuSLCaDkpZSKOdIMgKhXfxLx+dOak90Afo1iTT32nxa08Jsv+4bXWROdNJqN6CSq5NxtmCMomtCTGJLunWSucFQ+QQt0h2+Uc43XfL0GPH6P7MjHuWjCWt2FM0YsBvV06eHlJLCKom1QKqDNFmY2x5rIgUn3wPB8ZlGmDh975taUY8nYGHxhdt5sdNBFT+nuZnksEpYd52pwfWrtFG9t6LAR/OkXfjedMCR8dzbfwjv2QC9FzdC2kjEOyCw3wnuAzXZnX8Vn/dBqO2u3DVNAGascCGW2ED6Msz1h+kNJCvev/nh1R0HVc9y+o3seQWIMBgFVU9/cYpNKVCvFDWX0guku+K1Bq2ZX6rCHuYKwbVCU0m8ik7IImGH5biAaDlaYPF8NpQM6BYXalDq2qxpWdzQObXzZUy3aVSM7QHJNTyQ3WDSxR2kFQF0uinay0C7ywiA3TAu/qktQ77wgfh3MmprB9w+2+XQNPJuzs9bmLAb27c9qSO28npDbmK4fZGaQw3S7XrQgNTU6nL892GP7oMfDlPg+Mqh0FqykwvuyQ2qsVAoWMgwaR0qc7hBYwv1BjZIzRThMHxKbg/VWsdy61iKHJABFoZpBd0ToNO+tVPo6QBiFlhuvP4aeNlqpz7WaApxA+mMFi6G4uGxftiAvoU+2Lo8j4GMCrkyqeMTB3pp4UkgiEwQMJNKH7+4H8xUaMRhoHiGzail552pVhKrfL84aeE/5kQhuwqaTkPgPmWEocaO4iGM9zEVk8JKDnlf/1mD4shjWbMxVGWxuTSkHSGfybwPadVXrEjWLUyvCTJUCXYBJ0mIJTNCDZ+u6z00WgRJRM0vcsk2oSVQJjUriBEN1Y2R0e/bKl+5YroxQvwYIUbN3wg68s/eqVv91kKrpwKfoVbE7W2fc0JNr/LAhYmW7HTCMCVOUtWG3pGtib/DGrIvzPd8SH/SZlfDFHeGWORQXd8ZW43UA0LTdXhgoY98dEazfY9XAw/xSR1DAwpZ7cXKoT1bN4FB6xblJ4EPjgxjuQc4ja43VcauDLzS3LbXRFEC0IK7RtVLfZ+TePD9gDFBIJHFATgtiX+/17QDR/aTg0/+7SdddBPY75gr0hO5n1akFTpNWSkoUdJC6wnkY4MFg6iDT3ntCiuNVZ3wSjEESgivtPAuj0lz/e+oh+AvwV7abejqgfRUi7PUCbRYlEzJsZsLxzJg+LGcy3DnVpdDTNzfeTeGboQQMFeGyvXaKhECI9JRf02NcWyjboOsT7k/MaiuERZzhpVqwokXEQL3wgfWHgoLOFz+x95lUhsdaaaR2+TPnsuJ3aYgh3Peb2exQyllwReCHEcMEuggQLGLy+DGaR176cG1oe5Zwt1WO0LxN9UNikvZKUjCyRB6HaKBYUTOfnuAm+LIZ1EPIXOj4b9LneKNDFSP6eLKEXewCPar9g8Gpk75m6dWm7nIUKPFbzWdsFZB0etSBKx6zE8NKIi0L4gN8kb+ATO06SFDf72qsL+uaUdZ1YCwe7SPiwx3RAVG6Ibjt95dzhOppRoubrn4Q7mkISs/Tk+fU1YdSLcH5kHDO2BygHfA6jyB0FbMX4mPabT8AhROSc8vXPElbPaJr/j3kQ83ReecY9NJcj5BpZxhxW3C1z8Y2flyuhOJ/yqmuAL9+ebdSvboU1ECgy7B+Q4vOUZ397T2Wa+u2L6D78Cy1h46gdc5ZA4mGXfTmZ+T+ewP9f1b8GV9WKkAjrO8U1sRpc+67et5xP0l7PzoW8Ihbe/8pO4cCEKkkcahMO2dESwohysabpZaOCdYdwkJIiklZH+3HJXbhI+Lt0AI5IqQRJsNfzKNi+1I5zzZ6nBB7ERC4wiDbmcTtI0nTt90whmNMLhMUto+aHcU7w9JVGeIjbeTYoynAnDt+80kdEqy70M/RMpCm4/61nPftZzPsdTFCszv7F8WTzH4wH8V/WwacyojvSuEe+k82i9sakUPcS9PWaoRzD+1Cy0gszLJ4oxF14fjhczVXgezbr5E52gk1BnSlRhjyJsWx208dqQgL1DNJlCUWk+X/lSduzLin0/QzX2FG/QsTuDxu8hCL1oXbKjxn4Iq0pv97KFKBnFtRk0AvNDe2VqkGJtBjr6vWELSpuLlg3FwRnnhdB9ss/v8/22zEA5xmp9O1MCkvSy9r0TcrHuVMVnhf9jMNEZbO5KCrpllR/pC7bSLiZB/fWKA09FLji+3rZyk1VZEW3exc4xsq6sk7l2lLfrMlpH4q0zcBabLTVVj6pPaZZoOnNcecMdZKU8tuU/r54+2a5MuQPQ9Kjf0mkJLyrO6ci8uhWndOD//eJR+V/ZpThcItLXgIqeTcPaCkJaudYTPWwh0jmCpvvwh7XIB4PEHWMQ+XvE+2OOTEbms1SSu0qK/p16+a2xcwdg4aNIQhpuK38YiGRS6xwszeUhDXmip+Nzun1b/zL6Yutxr2pETwWiK/dImrECDHPKn0si6bsehz8qRLKQdpfGt/347EJn9ZRuaLSldFRO6WFCTYGqOFQhTHjvPgRG4/ZenhgtdTCbJ1RSeAWFU/K14+wOkQxE5JGmMv0ktaWnfPqq96ldvjhbBmiTzosguECbhl/HRaMAogjOkgAM4XW2kDC2ESQvXFZE0sXm1aYy22b3e2w9rbS6s6ht8IBMqANMC9Wk4nEH6G0TH3dkEDnVVDEegixAHGLj9qfWpikKTh5QGImkESN8fWoxXmIwvGAN/sxWBNk7pKLEB7AzBKOlpbS2palF9H2yqi2sWEpqLGS/qVgqHVPlyjrCeZ3/nGKsv8BnSWRKKJqnLePVLUY41BMAYWMyzHRBDrVQBxnkAEDuTv07AiDPSgglgDpk0GVfjv33B64i2/oNP9/21bGxlbXvwre2XtMLunaxZhfsQr1hwNrd2rvS6+1CvxZrtnHrWXvmH2AbO2htPDwoj+jdKEI9r1ov5cIvLQ1vCWPYNEypBu6ZDQTXfwy5OCqoQkgNKSzHiEUxW7CjAEQNk1lwMPRdsOOCVdv+Iw1mys82cPuKymyCaHbyNaj3tl0HFzhqR/qt4DgZrWHQtRMPZXioYo4nepWl0LcrTm9QswkAudNBhv/0XAKjc5QTjLCnIg5By4oNFKOkW11sE+YMDxpxcNqGyl1Ty+68gtr28EwIfQyiHxZwrvjCGkgyUw4IqEw+QMKknexG2mYuZQphe57iHh68VtZRK+Bk/lB3tE1WA43ri+K4WjYbgLZZzcXBdzH/17KY8qLoM3iDQI3Oqj0jpDxgHB2XpkAelBmfe2rsPTRdd+JjnlvYQfSZq14ItEOul+gtt8dfaNNOR3neEMoGcWGCXPtxHJ44LMAEmpKYj7H1Da3IRaytl6j5dHT6xkQTUtIGUdg3bk0kUpefUBm2KaCx/rwYVd30D8qxlNT0kLQ45WXpQoP8uFQVR0K1LovTWLPzLb+WvPpynp06lSnWpkaIaLrH0ocJiTBXSAo2WYKc0khnZx0owsoXtl4h4KRah1N2aMCwDUvB7Wl2j0rgIO1wdEH4b1vgiurcP2CD9T4iOEEy7mtbXkIHzk4AeMZ85CjG7zJKbo+nWyXtQkql1PIUc9sLRrRHdvKTTnnwdPgE4KI/na7iWLIVeZ0ALF17Bp8L22mvLus1G0+EpPPSg28PgxmvNsHGmNXwjYv909hZwvdTGf/btaqEbHELQvDPstRIdiJzHlDN0aTwa1RgrusU1c7sAOoXLHHhYL6760XtqBMjz1UzL4yC7E78ymXr670E3Q8TLE6Q2mUvfoERzhmWaCJTVK9cmljJ8jeOpvbIM7DmcMfFqgCoaXYTzss5kXtx4PcE8ddWxlSKr3oJkJ/APsCGeVXI4XJjejhstSa9ygBzph3kNMobWMJGLUXz9D0f/is7s+HnhFm2O0tnerR8hYn12ES1uKy53ISu34unX6pT/sDpBAT/yjIzTVj8w0aMXN2+xgystdNLSF+W7isxDS1GIw3Ua6cLG66/7PQrT+w9TVnF26WvfQwUL3SSl1VxLVxfPGKy13NtflE2kzvyKP+Jqm2SYQAn3OnDYZf8ITgN2fpVx3xPyFXWPxl+D6U0Gvv2Hen2yzXPxM3VC3gztWUPs/qwVnlOEltQdNLGzG9mUpw2YDo7nCi31nX21lg85KZoSl8PJuh1j4IOD8GKvFsXsxt5p7SQCXzIvqIrHRst+LaGgOoNVknWHpcejqIE/8z4fBZtEqn+6jI37Dwy51sIpLocs054mbi176BKsPyqMfLiqt1FMoElr3dZ68U6vwbOa78UPfjuSp0URMqjU42pndbkTF9aFzi9XxTfDs3+rfGELbFhpWwCjJwPqpobEYOjFcfXaSHG0nny+C4jvVcuIIBFuSTzaS3Er5UCjNTSTL9exEaR4XyaqBDGNrDpZUkPfOaHf3nSwIdLSIiVebAsWpFSJ8a1VSgzrykd7bePT+LC4XNRA0WyL/IXEWX1dg0rIJqlKs0ZqmKaxDIfyCcHJB/rF6eAVlOgxoXt8lIzF5P5M19s6Whpv3jq5GeNnVsOWL7JjAa8mfp23TbbYizgncfDq4Z/wSsEOP0PYdXhkzRV/PEfUni7iIGIecSty3lpw6/Ri5vr86sqf3Qs9bgMO3xlojeyaf+Sbzk8Abw+emg6bJEdUlzziMZFMi9V4xVFc7vZKlX+Lb+wWyOg3BYGuS0JznqD74fBojJ8gOixiFzYSVOl85bmc0UYVstatNCtEDbaJJxtk43apgMOFPvhIdLz5hbkITqY4mex1puesC2bAZnCEUI+CX2Ji5b/7ADxmgukNL9u2LcT7uGYyXI/O2HNPlmlP4kUyKvivnV8Z6LpxfvmsYF5wqzpB37JCZlzh4Ohp7c8uqJcDqxyfKgfSYkmJL9M+SQHOO4eJVhvWunw2KoMppfExI9D5p7dRNoGvVO3twf81w4l4vJKKC6OdjUz3W89jkf5Z9dF67DVGNT48sxdiTneDUASvh90+ucw1wxGMtsoaZF3dVa+qHimrIRlSBP5cQh4tgFDAlyam1U2w4UYJujLHsewxxEvYR3L3uoFUw2fmrLLAYyzVHKnip1wsCWm/Zw4tk+9PHNjYwRw0MwJmDblAgShHKQcL7Fjt6GumSoiqjAaLBk3uCh9NQ9BCOHmjArk5HKVY/BBo8NxXxSFIV1H1B0HLnZFxVncgjn4mNrACzIPqGPHxGZFF1wNuq3713KTboT2bmC/sjUAPN/M44cjnhktofS3cOtOhd8Pemh+oyqtrA6iH8es8nTysaaUItV2PJDkvtV71c06CEXhMxVHtofIrOVJ+K0p4uOi/RDwRxSbJcgJjW0/xLqVOuWKfy6BiYP6GMfiw/THg7Ix0LvQksXmqfwnhweBnI0ZFDquHiZo8wiBABdrBUglDXPxAW+f2Wk8I5XXqQtRG3BnVc/iN2y9wt60+DF/cv9kLoOQDYt6Z9Ot05lf+pSZTMYzG5XSi3ADvHgzrBj0MHOER6uRejgetaMIOx1WxvWlZzjS75FGkapyfLA5p31x2nTbiulfxufbHp32DWEpMXsCE074L/THjwCHUNeBkBVAuvtw4cfkMNHJP754V/nUXFuV8uQ8NHCACyH5qGk8okihFLU4EJMbkGJggJ6LEGb9yi7bByf431cj56d4GpnePPU8iqu/qYXEyLvaBKRP7jzf0w4+qdz4wT9wNHnc4S74+T5vl5cAf6B13Gn4+nu93YfkzvkPDGSky62HNFXMu8UCPsMQMnKJZMwGo+JyX5AdAoq71mJtAMiTgLHOnew0Hx4IRvprP9kvm3jkvmr/GNmvPBh1M8qkQyijNENRaciTWVERLQA=\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/circuits/namecheap/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/circuits/namecheap/contracts/namecheap_push_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\n\n\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\n\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\n\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\n\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\n\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\n\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\n\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\n\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\n\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\n\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\n\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, r)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n            checkField(calldataload(add(_pubSignals, 192)))\n\n            checkField(calldataload(add(_pubSignals, 224)))\n\n            checkField(calldataload(add(_pubSignals, 256)))\n\n            checkField(calldataload(add(_pubSignals, 288)))\n\n            checkField(calldataload(add(_pubSignals, 320)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "circuits-circom/circuits/namecheap/emls/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/namecheap/inputs/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/namecheap/namecheap_push.circom",
    "content": "pragma circom 2.1.9;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"@zk-email/circuits/utils/regex.circom\";\ninclude \"@zk-email/circuits/helpers/email-nullifier.circom\";\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"@zk-email/zk-regex-circom/circuits/common/from_addr_regex.circom\";\n\ninclude \"./regexes/namecheap_subject.circom\";\ninclude \"./regexes/namecheap_transfer_details.circom\";\n\n\n/// @title NamecheapPushDomainVerifier\n/// @notice Circuit to verify input email matches Namecheap push domain email, and extract the new domain registrant and domain name\n/// @param maxHeadersLength Maximum length for the email header.\n/// @param maxBodyLength Maximum length for the email body.\n/// @param n Number of bits per chunk the RSA key is split into. Recommended to be 121.\n/// @param k Number of chunks the RSA key is split into. Recommended to be 17.\n/// @input emailHeader Email headers that are signed (ones in `DKIM-Signature` header) as ASCII int[], padded as per SHA-256 block size.\n/// @input emailHeaderLength Length of the email header including the SHA-256 padding.\n/// @input pubkey RSA public key split into k chunks of n bits each.\n/// @input signature RSA signature split into k chunks of n bits each.\n/// @input emailBody Email body after the precomputed SHA as ASCII int[], padded as per SHA-256 block size.\n/// @input emailBodyLength Length of the email body including the SHA-256 padding.\n/// @input bodyHashIndex Index of the body hash `bh` in the emailHeader.\n/// @input precomputedSHA Precomputed SHA-256 hash of the email body till the bodyHashIndex.\n/// @input fromEmailIndex Index of from email address in the email header\n/// @input namecheapBuyerIdIndex Index of buyer id in the namecheap email body\n/// @input namecheapDomainNameIndex Index of domain name in the namecheap email body\n/// @input bidId On-chain bid id as identity commitment (to make it as part of the proof).\n/// @output pubkeyHash Poseidon hash of the pubkey - Poseidon(n/2)(n/2 chunks of pubkey with k*2 bits per chunk).\n/// @output fromEmailAddrPacked Packed from email address extracted from the email header (Default packing size is 31)\n/// @output domainNamePacked Packed domain name extracted from the email body (array of length 5)\n/// @output buyerIdHash Hash of packed buyer Id (new domain registrant) extracted from the email body\n/// @output emailNullifier Nullifier generated from email by hashing the header and randomness generated from signature\n/// @output bidId On-chain bid id input during proof gen and is tied to this proof\ntemplate NamecheapPushDomainVerifier(maxHeadersLength, maxBodyLength, n, k) {\n    assert(n * k > 2048); // constraints for 2048 bit RSA\n\n    //---------------EMAIL VERIFICATION------------------//\n\n    signal input emailHeader[maxHeadersLength];\n    signal input emailHeaderLength;\n    signal input pubkey[k];\n    signal input signature[k];\n    signal input emailBody[maxBodyLength];\n    signal input emailBodyLength;\n    signal input bodyHashIndex;\n    signal input precomputedSHA[32];\n\n    signal output pubkeyHash;\n\n    // DKIM VERIFICATION\n    component EV = EmailVerifier(maxHeadersLength, maxBodyLength, n, k, 0);\n    EV.emailHeader <== emailHeader;\n    EV.pubkey <== pubkey;\n    EV.signature <== signature;\n    EV.emailHeaderLength <== emailHeaderLength;\n    EV.bodyHashIndex <== bodyHashIndex;\n    EV.precomputedSHA <== precomputedSHA;\n    EV.emailBody <== emailBody;\n    EV.emailBodyLength <== emailBodyLength;\n\n    pubkeyHash <== EV.pubkeyHash;\n    signal headerHash[256] <== EV.sha;\n\n    //---------------CONSTANTS------------------//\n\n    var maxEmailFromLen = 21;           // Length of support@namecheap.com\n    var maxBuyerIdLen = 31;             // same as pack size; should be good enough\n    var maxDomainNameLen = 127;         // Second-Level Domain (63) + \".\" (1) + Top-Level Domain (63)\n    var maxEmailPackedChunks = 1;       // Max number of chunks for email address\n    var maxBuyerIdPackedChunks = 1;     // Max number of chunks for buyer id\n    var maxDomainNamePackedChunks = 5;  // Max number of chunks for domain name\n    \n    //---------------REGEXES------------------//\n\n    // Namecheap subject regex\n    signal subjectFound <== NamecheapSubjectRegex(maxHeadersLength)(emailHeader);\n    subjectFound === 1;\n\n    // From header regex\n    signal (fromEmailFound, fromEmailReveal[maxHeadersLength]) <== FromAddrRegex(maxHeadersLength)(emailHeader);\n    fromEmailFound === 1;\n\n    // Namecheap transfer details regex\n    signal (\n        transferDetailsFound, \n        buyerIdReveal[maxBodyLength],\n        domainNameReveal[maxBodyLength]\n    ) <== NamecheapTransferDetailsRegex(maxBodyLength)(emailBody);\n    transferDetailsFound === 1;\n\n    \n    //---------------BUSINESS LOGIC------------------//\n\n    // Output packed email from\n    signal input fromEmailIndex;\n    \n    // Assert fromEmailIndex < emailHeaderLength\n    signal isFromIndexValid <== LessThan(log2Ceil(maxHeadersLength))([fromEmailIndex, emailHeaderLength]);\n    isFromIndexValid === 1;\n\n    signal output fromEmailAddrPacked[maxEmailPackedChunks] <== PackRegexReveal(maxHeadersLength, maxEmailFromLen)(fromEmailReveal, fromEmailIndex);\n\n    // Packed buyer id (Hashed before making public output)\n    signal input namecheapBuyerIdIndex;\n    \n    // Assert namecheapBuyerIdIndex < emailBodyLength\n    signal namecheapBuyerIdIndexValid <== LessThan(log2Ceil(maxBodyLength))([namecheapBuyerIdIndex, emailBodyLength]);\n    namecheapBuyerIdIndexValid === 1;\n\n    signal buyerIdPacked[maxBuyerIdPackedChunks] <== PackRegexReveal(maxBodyLength, maxBuyerIdLen)(buyerIdReveal, namecheapBuyerIdIndex);\n\n    // Output packed domain name\n    signal input namecheapDomainNameIndex;\n    \n    // Assert namecheapDomainNameIndex < emailBodyLength\n    signal namecheapDomainNameIndexValid <== LessThan(log2Ceil(maxBodyLength))([namecheapDomainNameIndex, emailBodyLength]);\n    namecheapDomainNameIndexValid === 1;\n\n    signal output domainNamePacked[maxDomainNamePackedChunks] <== PackRegexReveal(maxBodyLength, maxDomainNameLen)(domainNameReveal, namecheapDomainNameIndex);\n    \n    //---------------POSEIDON HASHING------------------//\n\n    // Hash(buyerIdPacked)\n    signal output buyerIdHash <== Poseidon(maxBuyerIdPackedChunks)(buyerIdPacked);\n\n    // NULLIFIER\n    signal output emailNullifier;\n    emailNullifier <== EmailNullifier(n, k)(signature);\n\n    // The following signals do not take part in any computation, but tie the proof to a specific intentHash to prevent replay attacks and frontrunning.\n    // https://geometry.xyz/notebook/groth16-malleability\n    signal input bidId;\n    signal bidIdSquared;\n    bidIdSquared <== bidId * bidId;\n\n    // TOTAL CONSTRAINTS: 2980076\n}\n\n\n// Args:\n// * maxHeadersLength = 768 is the max number of bytes in the header\n// * maxBodyLength = 768 is the max number of bytes in the body after precomputed slice\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\ncomponent main { public [ bidId ] } = NamecheapPushDomainVerifier(768, 768, 121, 17);"
  },
  {
    "path": "circuits-circom/circuits/namecheap/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-namecheap\",\n    \"version\": \"0.0.1\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Namecheap circuits for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"main\": \"dist/generate_input.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/circuits\": \"6.1.3\",\n        \"@zk-email/helpers\": \"^6.1.3\",\n        \"@zk-email/zk-regex-circom\": \"2.1.0\",\n        \"buffer\": \"^6.0.3\",\n        \"circomlib\": \"^2.0.5\",\n        \"process\": \"^0.11.10\",\n        \"snarkjs\": \"latest\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\",\n        \"gen-input:namecheap:push\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/namecheap_push.eml --payment_type=namecheap --circuit_type=push --output_file=input_namecheap_push\",\n        \"compile:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"uploadkeys:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"test:namecheap:push\": \"yarn test ./test/namecheap_push.spec.ts\",\n        \"genverifier:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"gencalldata:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"genwitness:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genproof:rapidsnark:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n        \"genproof:wasm:namecheap:push\": \"CIRCUIT_DIR=namecheap CIRCUIT_NAME=namecheap_push && cd ../../scripts && ./5_gen_proof.sh && cd ..\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/circuits/namecheap/regexes/namecheap_subject.circom",
    "content": "pragma circom 2.1.9;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\n// regex: subject:PUSH DOMAIN CONFIRMATION EMAIL - Namecheap.com\\r\\n\ntemplate NamecheapSubjectRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[79][num_bytes];\n\tcomponent lt[12][num_bytes];\n\tcomponent and[76][num_bytes];\n\tcomponent multi_or[7][num_bytes];\n\tsignal states[num_bytes+1][64];\n\tsignal states_tmp[num_bytes+1][64];\n\tsignal from_zero_enabled[num_bytes+1];\n\tfrom_zero_enabled[num_bytes] <== 0;\n\tcomponent state_changed[num_bytes];\n\n\tfor (var i = 1; i < 64; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(63);\n\t\tstates[i][0] <== 1;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 115;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][0];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates_tmp[i+1][1] <== 0;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 117;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 98;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 106;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 101;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[4][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 99;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[5][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 116;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[6][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 58;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[7][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 80;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[8][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 85;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[9][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 83;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[10][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 72;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[11][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 32;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][12];\n\t\tand[12][i].b <== eq[12][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 68;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[13][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 79;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[14][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 77;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[15][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 65;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tand[16][i].b <== eq[16][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 73;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[17][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 78;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[18][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[12][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 67;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[19][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[14][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][22];\n\t\tand[22][i].b <== eq[18][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 70;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[20][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tand[24][i].b <== eq[17][i].out;\n\t\tstates[i+1][25] <== and[24][i].out;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 82;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tand[25][i].b <== eq[21][i].out;\n\t\tstates[i+1][26] <== and[25][i].out;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][26];\n\t\tand[26][i].b <== eq[15][i].out;\n\t\tstates[i+1][27] <== and[26][i].out;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][27];\n\t\tand[27][i].b <== eq[16][i].out;\n\t\tstates[i+1][28] <== and[27][i].out;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 84;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][28];\n\t\tand[28][i].b <== eq[22][i].out;\n\t\tstates[i+1][29] <== and[28][i].out;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][29];\n\t\tand[29][i].b <== eq[17][i].out;\n\t\tstates[i+1][30] <== and[29][i].out;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][30];\n\t\tand[30][i].b <== eq[14][i].out;\n\t\tstates[i+1][31] <== and[30][i].out;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][31];\n\t\tand[31][i].b <== eq[18][i].out;\n\t\tstates[i+1][32] <== and[31][i].out;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][32];\n\t\tand[32][i].b <== eq[12][i].out;\n\t\tstates[i+1][33] <== and[32][i].out;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 69;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][33];\n\t\tand[33][i].b <== eq[23][i].out;\n\t\tstates[i+1][34] <== and[33][i].out;\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][34];\n\t\tand[34][i].b <== eq[15][i].out;\n\t\tstates[i+1][35] <== and[34][i].out;\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][35];\n\t\tand[35][i].b <== eq[16][i].out;\n\t\tstates[i+1][36] <== and[35][i].out;\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][36];\n\t\tand[36][i].b <== eq[17][i].out;\n\t\tstates[i+1][37] <== and[36][i].out;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 76;\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][37];\n\t\tand[37][i].b <== eq[24][i].out;\n\t\tstates[i+1][38] <== and[37][i].out;\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][38];\n\t\tand[38][i].b <== eq[12][i].out;\n\t\tstates[i+1][39] <== and[38][i].out;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 45;\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][39];\n\t\tand[39][i].b <== eq[25][i].out;\n\t\tstates[i+1][40] <== and[39][i].out;\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][40];\n\t\tand[40][i].b <== eq[12][i].out;\n\t\tstates[i+1][41] <== and[40][i].out;\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][41];\n\t\tand[41][i].b <== eq[18][i].out;\n\t\tstates[i+1][42] <== and[41][i].out;\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 97;\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][42];\n\t\tand[42][i].b <== eq[26][i].out;\n\t\tstates[i+1][43] <== and[42][i].out;\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 109;\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][43];\n\t\tand[43][i].b <== eq[27][i].out;\n\t\tstates[i+1][44] <== and[43][i].out;\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][44];\n\t\tand[44][i].b <== eq[4][i].out;\n\t\tstates[i+1][45] <== and[44][i].out;\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][45];\n\t\tand[45][i].b <== eq[5][i].out;\n\t\tstates[i+1][46] <== and[45][i].out;\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 104;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][46];\n\t\tand[46][i].b <== eq[28][i].out;\n\t\tstates[i+1][47] <== and[46][i].out;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][47];\n\t\tand[47][i].b <== eq[4][i].out;\n\t\tstates[i+1][48] <== and[47][i].out;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][48];\n\t\tand[48][i].b <== eq[26][i].out;\n\t\tstates[i+1][49] <== and[48][i].out;\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 112;\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][49];\n\t\tand[49][i].b <== eq[29][i].out;\n\t\tstates[i+1][50] <== and[49][i].out;\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 11;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 127;\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== lt[0][i].out;\n\t\tand[50][i].b <== lt[1][i].out;\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 1;\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 2;\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 3;\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 4;\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 5;\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 6;\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 7;\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 8;\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 9;\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][50];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== and[50][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[30][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[31][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[32][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[33][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[34][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[35][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[36][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[37][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[38][i].out;\n\t\tand[51][i].b <== multi_or[0][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 128;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 191;\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== lt[2][i].out;\n\t\tand[52][i].b <== lt[3][i].out;\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][52];\n\t\tand[53][i].b <== and[52][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[51][i].out;\n\t\tmulti_or[1][i].in[1] <== and[53][i].out;\n\t\tstates[i+1][51] <== multi_or[1][i].out;\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 194;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 223;\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== lt[4][i].out;\n\t\tand[54][i].b <== lt[5][i].out;\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][50];\n\t\tand[55][i].b <== and[54][i].out;\n\t\tlt[6][i] = LessEqThan(8);\n\t\tlt[6][i].in[0] <== 160;\n\t\tlt[6][i].in[1] <== in[i];\n\t\tlt[7][i] = LessEqThan(8);\n\t\tlt[7][i].in[0] <== in[i];\n\t\tlt[7][i].in[1] <== 191;\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== lt[6][i].out;\n\t\tand[56][i].b <== lt[7][i].out;\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][53];\n\t\tand[57][i].b <== and[56][i].out;\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== states[i][54];\n\t\tand[58][i].b <== and[52][i].out;\n\t\tlt[8][i] = LessEqThan(8);\n\t\tlt[8][i].in[0] <== 128;\n\t\tlt[8][i].in[1] <== in[i];\n\t\tlt[9][i] = LessEqThan(8);\n\t\tlt[9][i].in[0] <== in[i];\n\t\tlt[9][i].in[1] <== 159;\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== lt[8][i].out;\n\t\tand[59][i].b <== lt[9][i].out;\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][55];\n\t\tand[60][i].b <== and[59][i].out;\n\t\tmulti_or[2][i] = MultiOR(4);\n\t\tmulti_or[2][i].in[0] <== and[55][i].out;\n\t\tmulti_or[2][i].in[1] <== and[57][i].out;\n\t\tmulti_or[2][i].in[2] <== and[58][i].out;\n\t\tmulti_or[2][i].in[3] <== and[60][i].out;\n\t\tstates[i+1][52] <== multi_or[2][i].out;\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 224;\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][50];\n\t\tand[61][i].b <== eq[39][i].out;\n\t\tstates[i+1][53] <== and[61][i].out;\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 225;\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 226;\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 227;\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 228;\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 229;\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 230;\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 231;\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 232;\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 233;\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 234;\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 235;\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 236;\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 238;\n\t\teq[53][i] = IsEqual();\n\t\teq[53][i].in[0] <== in[i];\n\t\teq[53][i].in[1] <== 239;\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== states[i][50];\n\t\tmulti_or[3][i] = MultiOR(14);\n\t\tmulti_or[3][i].in[0] <== eq[40][i].out;\n\t\tmulti_or[3][i].in[1] <== eq[41][i].out;\n\t\tmulti_or[3][i].in[2] <== eq[42][i].out;\n\t\tmulti_or[3][i].in[3] <== eq[43][i].out;\n\t\tmulti_or[3][i].in[4] <== eq[44][i].out;\n\t\tmulti_or[3][i].in[5] <== eq[45][i].out;\n\t\tmulti_or[3][i].in[6] <== eq[46][i].out;\n\t\tmulti_or[3][i].in[7] <== eq[47][i].out;\n\t\tmulti_or[3][i].in[8] <== eq[48][i].out;\n\t\tmulti_or[3][i].in[9] <== eq[49][i].out;\n\t\tmulti_or[3][i].in[10] <== eq[50][i].out;\n\t\tmulti_or[3][i].in[11] <== eq[51][i].out;\n\t\tmulti_or[3][i].in[12] <== eq[52][i].out;\n\t\tmulti_or[3][i].in[13] <== eq[53][i].out;\n\t\tand[62][i].b <== multi_or[3][i].out;\n\t\tlt[10][i] = LessEqThan(8);\n\t\tlt[10][i].in[0] <== 144;\n\t\tlt[10][i].in[1] <== in[i];\n\t\tlt[11][i] = LessEqThan(8);\n\t\tlt[11][i].in[0] <== in[i];\n\t\tlt[11][i].in[1] <== 191;\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== lt[10][i].out;\n\t\tand[63][i].b <== lt[11][i].out;\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][56];\n\t\tand[64][i].b <== and[63][i].out;\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][57];\n\t\tand[65][i].b <== and[52][i].out;\n\t\teq[54][i] = IsEqual();\n\t\teq[54][i].in[0] <== in[i];\n\t\teq[54][i].in[1] <== 128;\n\t\teq[55][i] = IsEqual();\n\t\teq[55][i].in[0] <== in[i];\n\t\teq[55][i].in[1] <== 129;\n\t\teq[56][i] = IsEqual();\n\t\teq[56][i].in[0] <== in[i];\n\t\teq[56][i].in[1] <== 130;\n\t\teq[57][i] = IsEqual();\n\t\teq[57][i].in[0] <== in[i];\n\t\teq[57][i].in[1] <== 131;\n\t\teq[58][i] = IsEqual();\n\t\teq[58][i].in[0] <== in[i];\n\t\teq[58][i].in[1] <== 132;\n\t\teq[59][i] = IsEqual();\n\t\teq[59][i].in[0] <== in[i];\n\t\teq[59][i].in[1] <== 133;\n\t\teq[60][i] = IsEqual();\n\t\teq[60][i].in[0] <== in[i];\n\t\teq[60][i].in[1] <== 134;\n\t\teq[61][i] = IsEqual();\n\t\teq[61][i].in[0] <== in[i];\n\t\teq[61][i].in[1] <== 135;\n\t\teq[62][i] = IsEqual();\n\t\teq[62][i].in[0] <== in[i];\n\t\teq[62][i].in[1] <== 136;\n\t\teq[63][i] = IsEqual();\n\t\teq[63][i].in[0] <== in[i];\n\t\teq[63][i].in[1] <== 137;\n\t\teq[64][i] = IsEqual();\n\t\teq[64][i].in[0] <== in[i];\n\t\teq[64][i].in[1] <== 138;\n\t\teq[65][i] = IsEqual();\n\t\teq[65][i].in[0] <== in[i];\n\t\teq[65][i].in[1] <== 139;\n\t\teq[66][i] = IsEqual();\n\t\teq[66][i].in[0] <== in[i];\n\t\teq[66][i].in[1] <== 140;\n\t\teq[67][i] = IsEqual();\n\t\teq[67][i].in[0] <== in[i];\n\t\teq[67][i].in[1] <== 141;\n\t\teq[68][i] = IsEqual();\n\t\teq[68][i].in[0] <== in[i];\n\t\teq[68][i].in[1] <== 142;\n\t\teq[69][i] = IsEqual();\n\t\teq[69][i].in[0] <== in[i];\n\t\teq[69][i].in[1] <== 143;\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][58];\n\t\tmulti_or[4][i] = MultiOR(16);\n\t\tmulti_or[4][i].in[0] <== eq[54][i].out;\n\t\tmulti_or[4][i].in[1] <== eq[55][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[56][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[57][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[58][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[59][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[60][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[61][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[62][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[63][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[64][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[65][i].out;\n\t\tmulti_or[4][i].in[12] <== eq[66][i].out;\n\t\tmulti_or[4][i].in[13] <== eq[67][i].out;\n\t\tmulti_or[4][i].in[14] <== eq[68][i].out;\n\t\tmulti_or[4][i].in[15] <== eq[69][i].out;\n\t\tand[66][i].b <== multi_or[4][i].out;\n\t\tmulti_or[5][i] = MultiOR(4);\n\t\tmulti_or[5][i].in[0] <== and[62][i].out;\n\t\tmulti_or[5][i].in[1] <== and[64][i].out;\n\t\tmulti_or[5][i].in[2] <== and[65][i].out;\n\t\tmulti_or[5][i].in[3] <== and[66][i].out;\n\t\tstates[i+1][54] <== multi_or[5][i].out;\n\t\teq[70][i] = IsEqual();\n\t\teq[70][i].in[0] <== in[i];\n\t\teq[70][i].in[1] <== 237;\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][50];\n\t\tand[67][i].b <== eq[70][i].out;\n\t\tstates[i+1][55] <== and[67][i].out;\n\t\teq[71][i] = IsEqual();\n\t\teq[71][i].in[0] <== in[i];\n\t\teq[71][i].in[1] <== 240;\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][50];\n\t\tand[68][i].b <== eq[71][i].out;\n\t\tstates[i+1][56] <== and[68][i].out;\n\t\teq[72][i] = IsEqual();\n\t\teq[72][i].in[0] <== in[i];\n\t\teq[72][i].in[1] <== 241;\n\t\teq[73][i] = IsEqual();\n\t\teq[73][i].in[0] <== in[i];\n\t\teq[73][i].in[1] <== 242;\n\t\teq[74][i] = IsEqual();\n\t\teq[74][i].in[0] <== in[i];\n\t\teq[74][i].in[1] <== 243;\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][50];\n\t\tmulti_or[6][i] = MultiOR(3);\n\t\tmulti_or[6][i].in[0] <== eq[72][i].out;\n\t\tmulti_or[6][i].in[1] <== eq[73][i].out;\n\t\tmulti_or[6][i].in[2] <== eq[74][i].out;\n\t\tand[69][i].b <== multi_or[6][i].out;\n\t\tstates[i+1][57] <== and[69][i].out;\n\t\teq[75][i] = IsEqual();\n\t\teq[75][i].in[0] <== in[i];\n\t\teq[75][i].in[1] <== 244;\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][50];\n\t\tand[70][i].b <== eq[75][i].out;\n\t\tstates[i+1][58] <== and[70][i].out;\n\t\tand[71][i] = AND();\n\t\tand[71][i].a <== states[i][51];\n\t\tand[71][i].b <== eq[5][i].out;\n\t\tstates[i+1][59] <== and[71][i].out;\n\t\teq[76][i] = IsEqual();\n\t\teq[76][i].in[0] <== in[i];\n\t\teq[76][i].in[1] <== 111;\n\t\tand[72][i] = AND();\n\t\tand[72][i].a <== states[i][59];\n\t\tand[72][i].b <== eq[76][i].out;\n\t\tstates[i+1][60] <== and[72][i].out;\n\t\tand[73][i] = AND();\n\t\tand[73][i].a <== states[i][60];\n\t\tand[73][i].b <== eq[27][i].out;\n\t\tstates[i+1][61] <== and[73][i].out;\n\t\teq[77][i] = IsEqual();\n\t\teq[77][i].in[0] <== in[i];\n\t\teq[77][i].in[1] <== 13;\n\t\tand[74][i] = AND();\n\t\tand[74][i].a <== states[i][61];\n\t\tand[74][i].b <== eq[77][i].out;\n\t\tstates[i+1][62] <== and[74][i].out;\n\t\teq[78][i] = IsEqual();\n\t\teq[78][i].in[0] <== in[i];\n\t\teq[78][i].in[1] <== 10;\n\t\tand[75][i] = AND();\n\t\tand[75][i].a <== states[i][62];\n\t\tand[75][i].b <== eq[78][i].out;\n\t\tstates[i+1][63] <== and[75][i].out;\n\t\tfrom_zero_enabled[i] <== MultiNOR(63)([states_tmp[i+1][1], states[i+1][2], states[i+1][3], states[i+1][4], states[i+1][5], states[i+1][6], states[i+1][7], states[i+1][8], states[i+1][9], states[i+1][10], states[i+1][11], states[i+1][12], states[i+1][13], states[i+1][14], states[i+1][15], states[i+1][16], states[i+1][17], states[i+1][18], states[i+1][19], states[i+1][20], states[i+1][21], states[i+1][22], states[i+1][23], states[i+1][24], states[i+1][25], states[i+1][26], states[i+1][27], states[i+1][28], states[i+1][29], states[i+1][30], states[i+1][31], states[i+1][32], states[i+1][33], states[i+1][34], states[i+1][35], states[i+1][36], states[i+1][37], states[i+1][38], states[i+1][39], states[i+1][40], states[i+1][41], states[i+1][42], states[i+1][43], states[i+1][44], states[i+1][45], states[i+1][46], states[i+1][47], states[i+1][48], states[i+1][49], states[i+1][50], states[i+1][51], states[i+1][52], states[i+1][53], states[i+1][54], states[i+1][55], states[i+1][56], states[i+1][57], states[i+1][58], states[i+1][59], states[i+1][60], states[i+1][61], states[i+1][62], states[i+1][63]]);\n\t\tstates[i+1][1] <== MultiOR(2)([states_tmp[i+1][1], from_zero_enabled[i] * and[0][i].out]);\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t}\n\n\tcomponent is_accepted = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tis_accepted.in[i] <== states[i][63];\n\t}\n\tout <== is_accepted.out;\n\tsignal is_consecutive[msg_bytes+1][3];\n\tis_consecutive[msg_bytes][2] <== 0;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][63] * (1 - is_consecutive[msg_bytes-i][2]) + is_consecutive[msg_bytes-i][2];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t\tis_consecutive[msg_bytes-1-i][2] <== ORAnd()([(1 - from_zero_enabled[msg_bytes-i+1]), states[num_bytes-i][63], is_consecutive[msg_bytes-1-i][1]]);\n\t}\n\t// substrings calculated: []\n}"
  },
  {
    "path": "circuits-circom/circuits/namecheap/regexes/namecheap_subject.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"subject:PUSH DOMAIN CONFIRMATION EMAIL - Namecheap.com\\r\\n\"\n        }\n    ]\n}\n  "
  },
  {
    "path": "circuits-circom/circuits/namecheap/regexes/namecheap_transfer_details.circom",
    "content": "pragma circom 2.1.9;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\n// regex: The request to push the domain has been fulfilled.\\r\\nPush to Login ID: (a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|.|-|_)+\\r\\nThese changes apply to the following domain\\(s\\):\\r\\n(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|.|-|_)+\\r\\n\\r\\nPlease contact our support team if you have any questions.\ntemplate NamecheapTransferDetailsRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[81][num_bytes];\n\tcomponent lt[14][num_bytes];\n\tcomponent and[264][num_bytes];\n\tcomponent multi_or[27][num_bytes];\n\tsignal states[num_bytes+1][214];\n\tsignal states_tmp[num_bytes+1][214];\n\tsignal from_zero_enabled[num_bytes+1];\n\tfrom_zero_enabled[num_bytes] <== 0;\n\tcomponent state_changed[num_bytes];\n\n\tfor (var i = 1; i < 214; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(213);\n\t\tstates[i][0] <== 1;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 84;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][0];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates_tmp[i+1][1] <== 0;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 104;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 101;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 32;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 114;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[4][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[2][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 113;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[5][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 117;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[6][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[2][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 115;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[7][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 116;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[8][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[3][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][12];\n\t\tand[12][i].b <== eq[8][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 111;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[9][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[3][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 112;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[10][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tand[16][i].b <== eq[6][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[7][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[1][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[3][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[8][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[1][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][22];\n\t\tand[22][i].b <== eq[2][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[3][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 100;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tand[24][i].b <== eq[11][i].out;\n\t\tstates[i+1][25] <== and[24][i].out;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tand[25][i].b <== eq[9][i].out;\n\t\tstates[i+1][26] <== and[25][i].out;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 109;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][26];\n\t\tand[26][i].b <== eq[12][i].out;\n\t\tstates[i+1][27] <== and[26][i].out;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 97;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][27];\n\t\tand[27][i].b <== eq[13][i].out;\n\t\tstates[i+1][28] <== and[27][i].out;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 105;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][28];\n\t\tand[28][i].b <== eq[14][i].out;\n\t\tstates[i+1][29] <== and[28][i].out;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 110;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][29];\n\t\tand[29][i].b <== eq[15][i].out;\n\t\tstates[i+1][30] <== and[29][i].out;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][30];\n\t\tand[30][i].b <== eq[3][i].out;\n\t\tstates[i+1][31] <== and[30][i].out;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][31];\n\t\tand[31][i].b <== eq[1][i].out;\n\t\tstates[i+1][32] <== and[31][i].out;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][32];\n\t\tand[32][i].b <== eq[13][i].out;\n\t\tstates[i+1][33] <== and[32][i].out;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][33];\n\t\tand[33][i].b <== eq[7][i].out;\n\t\tstates[i+1][34] <== and[33][i].out;\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][34];\n\t\tand[34][i].b <== eq[3][i].out;\n\t\tstates[i+1][35] <== and[34][i].out;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 98;\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][35];\n\t\tand[35][i].b <== eq[16][i].out;\n\t\tstates[i+1][36] <== and[35][i].out;\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][36];\n\t\tand[36][i].b <== eq[2][i].out;\n\t\tstates[i+1][37] <== and[36][i].out;\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][37];\n\t\tand[37][i].b <== eq[2][i].out;\n\t\tstates[i+1][38] <== and[37][i].out;\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][38];\n\t\tand[38][i].b <== eq[15][i].out;\n\t\tstates[i+1][39] <== and[38][i].out;\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][39];\n\t\tand[39][i].b <== eq[3][i].out;\n\t\tstates[i+1][40] <== and[39][i].out;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 102;\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][40];\n\t\tand[40][i].b <== eq[17][i].out;\n\t\tstates[i+1][41] <== and[40][i].out;\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][41];\n\t\tand[41][i].b <== eq[6][i].out;\n\t\tstates[i+1][42] <== and[41][i].out;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 108;\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][42];\n\t\tand[42][i].b <== eq[18][i].out;\n\t\tstates[i+1][43] <== and[42][i].out;\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][43];\n\t\tand[43][i].b <== eq[17][i].out;\n\t\tstates[i+1][44] <== and[43][i].out;\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][44];\n\t\tand[44][i].b <== eq[14][i].out;\n\t\tstates[i+1][45] <== and[44][i].out;\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][45];\n\t\tand[45][i].b <== eq[18][i].out;\n\t\tstates[i+1][46] <== and[45][i].out;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][46];\n\t\tand[46][i].b <== eq[18][i].out;\n\t\tstates[i+1][47] <== and[46][i].out;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][47];\n\t\tand[47][i].b <== eq[2][i].out;\n\t\tstates[i+1][48] <== and[47][i].out;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][48];\n\t\tand[48][i].b <== eq[11][i].out;\n\t\tstates[i+1][49] <== and[48][i].out;\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 11;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 127;\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== lt[0][i].out;\n\t\tand[49][i].b <== lt[1][i].out;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 1;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 2;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 3;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 4;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 5;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 6;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 7;\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 8;\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 9;\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][49];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== and[49][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[19][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[20][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[21][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[22][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[23][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[24][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[25][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[26][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[27][i].out;\n\t\tand[50][i].b <== multi_or[0][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 128;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 191;\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== lt[2][i].out;\n\t\tand[51][i].b <== lt[3][i].out;\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][51];\n\t\tand[52][i].b <== and[51][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[50][i].out;\n\t\tmulti_or[1][i].in[1] <== and[52][i].out;\n\t\tstates[i+1][50] <== multi_or[1][i].out;\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 194;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 223;\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== lt[4][i].out;\n\t\tand[53][i].b <== lt[5][i].out;\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][49];\n\t\tand[54][i].b <== and[53][i].out;\n\t\tlt[6][i] = LessEqThan(8);\n\t\tlt[6][i].in[0] <== 160;\n\t\tlt[6][i].in[1] <== in[i];\n\t\tlt[7][i] = LessEqThan(8);\n\t\tlt[7][i].in[0] <== in[i];\n\t\tlt[7][i].in[1] <== 191;\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== lt[6][i].out;\n\t\tand[55][i].b <== lt[7][i].out;\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][52];\n\t\tand[56][i].b <== and[55][i].out;\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][53];\n\t\tand[57][i].b <== and[51][i].out;\n\t\tlt[8][i] = LessEqThan(8);\n\t\tlt[8][i].in[0] <== 128;\n\t\tlt[8][i].in[1] <== in[i];\n\t\tlt[9][i] = LessEqThan(8);\n\t\tlt[9][i].in[0] <== in[i];\n\t\tlt[9][i].in[1] <== 159;\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== lt[8][i].out;\n\t\tand[58][i].b <== lt[9][i].out;\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== states[i][54];\n\t\tand[59][i].b <== and[58][i].out;\n\t\tmulti_or[2][i] = MultiOR(4);\n\t\tmulti_or[2][i].in[0] <== and[54][i].out;\n\t\tmulti_or[2][i].in[1] <== and[56][i].out;\n\t\tmulti_or[2][i].in[2] <== and[57][i].out;\n\t\tmulti_or[2][i].in[3] <== and[59][i].out;\n\t\tstates[i+1][51] <== multi_or[2][i].out;\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 224;\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][49];\n\t\tand[60][i].b <== eq[28][i].out;\n\t\tstates[i+1][52] <== and[60][i].out;\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 225;\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 226;\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 227;\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 228;\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 229;\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 230;\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 231;\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 232;\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 233;\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 234;\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 235;\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 236;\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 238;\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 239;\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][49];\n\t\tmulti_or[3][i] = MultiOR(14);\n\t\tmulti_or[3][i].in[0] <== eq[29][i].out;\n\t\tmulti_or[3][i].in[1] <== eq[30][i].out;\n\t\tmulti_or[3][i].in[2] <== eq[31][i].out;\n\t\tmulti_or[3][i].in[3] <== eq[32][i].out;\n\t\tmulti_or[3][i].in[4] <== eq[33][i].out;\n\t\tmulti_or[3][i].in[5] <== eq[34][i].out;\n\t\tmulti_or[3][i].in[6] <== eq[35][i].out;\n\t\tmulti_or[3][i].in[7] <== eq[36][i].out;\n\t\tmulti_or[3][i].in[8] <== eq[37][i].out;\n\t\tmulti_or[3][i].in[9] <== eq[38][i].out;\n\t\tmulti_or[3][i].in[10] <== eq[39][i].out;\n\t\tmulti_or[3][i].in[11] <== eq[40][i].out;\n\t\tmulti_or[3][i].in[12] <== eq[41][i].out;\n\t\tmulti_or[3][i].in[13] <== eq[42][i].out;\n\t\tand[61][i].b <== multi_or[3][i].out;\n\t\tlt[10][i] = LessEqThan(8);\n\t\tlt[10][i].in[0] <== 144;\n\t\tlt[10][i].in[1] <== in[i];\n\t\tlt[11][i] = LessEqThan(8);\n\t\tlt[11][i].in[0] <== in[i];\n\t\tlt[11][i].in[1] <== 191;\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== lt[10][i].out;\n\t\tand[62][i].b <== lt[11][i].out;\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== states[i][55];\n\t\tand[63][i].b <== and[62][i].out;\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][56];\n\t\tand[64][i].b <== and[51][i].out;\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 128;\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 129;\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 130;\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 131;\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 132;\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 133;\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 134;\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 135;\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 136;\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 137;\n\t\teq[53][i] = IsEqual();\n\t\teq[53][i].in[0] <== in[i];\n\t\teq[53][i].in[1] <== 138;\n\t\teq[54][i] = IsEqual();\n\t\teq[54][i].in[0] <== in[i];\n\t\teq[54][i].in[1] <== 139;\n\t\teq[55][i] = IsEqual();\n\t\teq[55][i].in[0] <== in[i];\n\t\teq[55][i].in[1] <== 140;\n\t\teq[56][i] = IsEqual();\n\t\teq[56][i].in[0] <== in[i];\n\t\teq[56][i].in[1] <== 141;\n\t\teq[57][i] = IsEqual();\n\t\teq[57][i].in[0] <== in[i];\n\t\teq[57][i].in[1] <== 142;\n\t\teq[58][i] = IsEqual();\n\t\teq[58][i].in[0] <== in[i];\n\t\teq[58][i].in[1] <== 143;\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][57];\n\t\tmulti_or[4][i] = MultiOR(16);\n\t\tmulti_or[4][i].in[0] <== eq[43][i].out;\n\t\tmulti_or[4][i].in[1] <== eq[44][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[45][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[46][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[47][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[48][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[49][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[50][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[51][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[52][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[53][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[54][i].out;\n\t\tmulti_or[4][i].in[12] <== eq[55][i].out;\n\t\tmulti_or[4][i].in[13] <== eq[56][i].out;\n\t\tmulti_or[4][i].in[14] <== eq[57][i].out;\n\t\tmulti_or[4][i].in[15] <== eq[58][i].out;\n\t\tand[65][i].b <== multi_or[4][i].out;\n\t\tmulti_or[5][i] = MultiOR(4);\n\t\tmulti_or[5][i].in[0] <== and[61][i].out;\n\t\tmulti_or[5][i].in[1] <== and[63][i].out;\n\t\tmulti_or[5][i].in[2] <== and[64][i].out;\n\t\tmulti_or[5][i].in[3] <== and[65][i].out;\n\t\tstates[i+1][53] <== multi_or[5][i].out;\n\t\teq[59][i] = IsEqual();\n\t\teq[59][i].in[0] <== in[i];\n\t\teq[59][i].in[1] <== 237;\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][49];\n\t\tand[66][i].b <== eq[59][i].out;\n\t\tstates[i+1][54] <== and[66][i].out;\n\t\teq[60][i] = IsEqual();\n\t\teq[60][i].in[0] <== in[i];\n\t\teq[60][i].in[1] <== 240;\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][49];\n\t\tand[67][i].b <== eq[60][i].out;\n\t\tstates[i+1][55] <== and[67][i].out;\n\t\teq[61][i] = IsEqual();\n\t\teq[61][i].in[0] <== in[i];\n\t\teq[61][i].in[1] <== 241;\n\t\teq[62][i] = IsEqual();\n\t\teq[62][i].in[0] <== in[i];\n\t\teq[62][i].in[1] <== 242;\n\t\teq[63][i] = IsEqual();\n\t\teq[63][i].in[0] <== in[i];\n\t\teq[63][i].in[1] <== 243;\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][49];\n\t\tmulti_or[6][i] = MultiOR(3);\n\t\tmulti_or[6][i].in[0] <== eq[61][i].out;\n\t\tmulti_or[6][i].in[1] <== eq[62][i].out;\n\t\tmulti_or[6][i].in[2] <== eq[63][i].out;\n\t\tand[68][i].b <== multi_or[6][i].out;\n\t\tstates[i+1][56] <== and[68][i].out;\n\t\teq[64][i] = IsEqual();\n\t\teq[64][i].in[0] <== in[i];\n\t\teq[64][i].in[1] <== 244;\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][49];\n\t\tand[69][i].b <== eq[64][i].out;\n\t\tstates[i+1][57] <== and[69][i].out;\n\t\teq[65][i] = IsEqual();\n\t\teq[65][i].in[0] <== in[i];\n\t\teq[65][i].in[1] <== 13;\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][50];\n\t\tand[70][i].b <== eq[65][i].out;\n\t\tstates[i+1][58] <== and[70][i].out;\n\t\teq[66][i] = IsEqual();\n\t\teq[66][i].in[0] <== in[i];\n\t\teq[66][i].in[1] <== 10;\n\t\tand[71][i] = AND();\n\t\tand[71][i].a <== states[i][58];\n\t\tand[71][i].b <== eq[66][i].out;\n\t\tstates[i+1][59] <== and[71][i].out;\n\t\teq[67][i] = IsEqual();\n\t\teq[67][i].in[0] <== in[i];\n\t\teq[67][i].in[1] <== 80;\n\t\tand[72][i] = AND();\n\t\tand[72][i].a <== states[i][59];\n\t\tand[72][i].b <== eq[67][i].out;\n\t\tstates[i+1][60] <== and[72][i].out;\n\t\tand[73][i] = AND();\n\t\tand[73][i].a <== states[i][60];\n\t\tand[73][i].b <== eq[6][i].out;\n\t\tstates[i+1][61] <== and[73][i].out;\n\t\tand[74][i] = AND();\n\t\tand[74][i].a <== states[i][61];\n\t\tand[74][i].b <== eq[7][i].out;\n\t\tstates[i+1][62] <== and[74][i].out;\n\t\tand[75][i] = AND();\n\t\tand[75][i].a <== states[i][62];\n\t\tand[75][i].b <== eq[1][i].out;\n\t\tstates[i+1][63] <== and[75][i].out;\n\t\tand[76][i] = AND();\n\t\tand[76][i].a <== states[i][63];\n\t\tand[76][i].b <== eq[3][i].out;\n\t\tstates[i+1][64] <== and[76][i].out;\n\t\tand[77][i] = AND();\n\t\tand[77][i].a <== states[i][64];\n\t\tand[77][i].b <== eq[8][i].out;\n\t\tstates[i+1][65] <== and[77][i].out;\n\t\tand[78][i] = AND();\n\t\tand[78][i].a <== states[i][65];\n\t\tand[78][i].b <== eq[9][i].out;\n\t\tstates[i+1][66] <== and[78][i].out;\n\t\tand[79][i] = AND();\n\t\tand[79][i].a <== states[i][66];\n\t\tand[79][i].b <== eq[3][i].out;\n\t\tstates[i+1][67] <== and[79][i].out;\n\t\teq[68][i] = IsEqual();\n\t\teq[68][i].in[0] <== in[i];\n\t\teq[68][i].in[1] <== 76;\n\t\tand[80][i] = AND();\n\t\tand[80][i].a <== states[i][67];\n\t\tand[80][i].b <== eq[68][i].out;\n\t\tstates[i+1][68] <== and[80][i].out;\n\t\tand[81][i] = AND();\n\t\tand[81][i].a <== states[i][68];\n\t\tand[81][i].b <== eq[9][i].out;\n\t\tstates[i+1][69] <== and[81][i].out;\n\t\teq[69][i] = IsEqual();\n\t\teq[69][i].in[0] <== in[i];\n\t\teq[69][i].in[1] <== 103;\n\t\tand[82][i] = AND();\n\t\tand[82][i].a <== states[i][69];\n\t\tand[82][i].b <== eq[69][i].out;\n\t\tstates[i+1][70] <== and[82][i].out;\n\t\tand[83][i] = AND();\n\t\tand[83][i].a <== states[i][70];\n\t\tand[83][i].b <== eq[14][i].out;\n\t\tstates[i+1][71] <== and[83][i].out;\n\t\tand[84][i] = AND();\n\t\tand[84][i].a <== states[i][71];\n\t\tand[84][i].b <== eq[15][i].out;\n\t\tstates[i+1][72] <== and[84][i].out;\n\t\tand[85][i] = AND();\n\t\tand[85][i].a <== states[i][72];\n\t\tand[85][i].b <== eq[3][i].out;\n\t\tstates[i+1][73] <== and[85][i].out;\n\t\teq[70][i] = IsEqual();\n\t\teq[70][i].in[0] <== in[i];\n\t\teq[70][i].in[1] <== 73;\n\t\tand[86][i] = AND();\n\t\tand[86][i].a <== states[i][73];\n\t\tand[86][i].b <== eq[70][i].out;\n\t\tstates[i+1][74] <== and[86][i].out;\n\t\teq[71][i] = IsEqual();\n\t\teq[71][i].in[0] <== in[i];\n\t\teq[71][i].in[1] <== 68;\n\t\tand[87][i] = AND();\n\t\tand[87][i].a <== states[i][74];\n\t\tand[87][i].b <== eq[71][i].out;\n\t\tstates[i+1][75] <== and[87][i].out;\n\t\teq[72][i] = IsEqual();\n\t\teq[72][i].in[0] <== in[i];\n\t\teq[72][i].in[1] <== 58;\n\t\tand[88][i] = AND();\n\t\tand[88][i].a <== states[i][75];\n\t\tand[88][i].b <== eq[72][i].out;\n\t\tstates[i+1][76] <== and[88][i].out;\n\t\tand[89][i] = AND();\n\t\tand[89][i].a <== states[i][76];\n\t\tand[89][i].b <== eq[3][i].out;\n\t\tstates[i+1][77] <== and[89][i].out;\n\t\tand[90][i] = AND();\n\t\tand[90][i].a <== states[i][77];\n\t\tand[90][i].b <== and[53][i].out;\n\t\tand[91][i] = AND();\n\t\tand[91][i].a <== states[i][79];\n\t\tand[91][i].b <== and[55][i].out;\n\t\tand[92][i] = AND();\n\t\tand[92][i].a <== states[i][80];\n\t\tand[92][i].b <== and[51][i].out;\n\t\tand[93][i] = AND();\n\t\tand[93][i].a <== states[i][81];\n\t\tand[93][i].b <== and[58][i].out;\n\t\tand[94][i] = AND();\n\t\tand[94][i].a <== states[i][85];\n\t\tand[94][i].b <== and[53][i].out;\n\t\tmulti_or[7][i] = MultiOR(5);\n\t\tmulti_or[7][i].in[0] <== and[90][i].out;\n\t\tmulti_or[7][i].in[1] <== and[91][i].out;\n\t\tmulti_or[7][i].in[2] <== and[92][i].out;\n\t\tmulti_or[7][i].in[3] <== and[93][i].out;\n\t\tmulti_or[7][i].in[4] <== and[94][i].out;\n\t\tstates[i+1][78] <== multi_or[7][i].out;\n\t\tand[95][i] = AND();\n\t\tand[95][i].a <== states[i][77];\n\t\tand[95][i].b <== eq[28][i].out;\n\t\tand[96][i] = AND();\n\t\tand[96][i].a <== states[i][85];\n\t\tand[96][i].b <== eq[28][i].out;\n\t\tmulti_or[8][i] = MultiOR(2);\n\t\tmulti_or[8][i].in[0] <== and[95][i].out;\n\t\tmulti_or[8][i].in[1] <== and[96][i].out;\n\t\tstates[i+1][79] <== multi_or[8][i].out;\n\t\tand[97][i] = AND();\n\t\tand[97][i].a <== states[i][77];\n\t\tand[97][i].b <== multi_or[3][i].out;\n\t\tand[98][i] = AND();\n\t\tand[98][i].a <== states[i][82];\n\t\tand[98][i].b <== and[62][i].out;\n\t\tand[99][i] = AND();\n\t\tand[99][i].a <== states[i][83];\n\t\tand[99][i].b <== and[51][i].out;\n\t\tand[100][i] = AND();\n\t\tand[100][i].a <== states[i][84];\n\t\tand[100][i].b <== multi_or[4][i].out;\n\t\tand[101][i] = AND();\n\t\tand[101][i].a <== states[i][85];\n\t\tand[101][i].b <== multi_or[3][i].out;\n\t\tmulti_or[9][i] = MultiOR(5);\n\t\tmulti_or[9][i].in[0] <== and[97][i].out;\n\t\tmulti_or[9][i].in[1] <== and[98][i].out;\n\t\tmulti_or[9][i].in[2] <== and[99][i].out;\n\t\tmulti_or[9][i].in[3] <== and[100][i].out;\n\t\tmulti_or[9][i].in[4] <== and[101][i].out;\n\t\tstates[i+1][80] <== multi_or[9][i].out;\n\t\tand[102][i] = AND();\n\t\tand[102][i].a <== states[i][77];\n\t\tand[102][i].b <== eq[59][i].out;\n\t\tand[103][i] = AND();\n\t\tand[103][i].a <== states[i][85];\n\t\tand[103][i].b <== eq[59][i].out;\n\t\tmulti_or[10][i] = MultiOR(2);\n\t\tmulti_or[10][i].in[0] <== and[102][i].out;\n\t\tmulti_or[10][i].in[1] <== and[103][i].out;\n\t\tstates[i+1][81] <== multi_or[10][i].out;\n\t\tand[104][i] = AND();\n\t\tand[104][i].a <== states[i][77];\n\t\tand[104][i].b <== eq[60][i].out;\n\t\tand[105][i] = AND();\n\t\tand[105][i].a <== states[i][85];\n\t\tand[105][i].b <== eq[60][i].out;\n\t\tmulti_or[11][i] = MultiOR(2);\n\t\tmulti_or[11][i].in[0] <== and[104][i].out;\n\t\tmulti_or[11][i].in[1] <== and[105][i].out;\n\t\tstates[i+1][82] <== multi_or[11][i].out;\n\t\tand[106][i] = AND();\n\t\tand[106][i].a <== states[i][77];\n\t\tand[106][i].b <== multi_or[6][i].out;\n\t\tand[107][i] = AND();\n\t\tand[107][i].a <== states[i][85];\n\t\tand[107][i].b <== multi_or[6][i].out;\n\t\tmulti_or[12][i] = MultiOR(2);\n\t\tmulti_or[12][i].in[0] <== and[106][i].out;\n\t\tmulti_or[12][i].in[1] <== and[107][i].out;\n\t\tstates[i+1][83] <== multi_or[12][i].out;\n\t\tand[108][i] = AND();\n\t\tand[108][i].a <== states[i][77];\n\t\tand[108][i].b <== eq[64][i].out;\n\t\tand[109][i] = AND();\n\t\tand[109][i].a <== states[i][85];\n\t\tand[109][i].b <== eq[64][i].out;\n\t\tmulti_or[13][i] = MultiOR(2);\n\t\tmulti_or[13][i].in[0] <== and[108][i].out;\n\t\tmulti_or[13][i].in[1] <== and[109][i].out;\n\t\tstates[i+1][84] <== multi_or[13][i].out;\n\t\tand[110][i] = AND();\n\t\tand[110][i].a <== states[i][77];\n\t\tand[110][i].b <== multi_or[0][i].out;\n\t\tand[111][i] = AND();\n\t\tand[111][i].a <== states[i][78];\n\t\tand[111][i].b <== and[51][i].out;\n\t\tlt[12][i] = LessEqThan(8);\n\t\tlt[12][i].in[0] <== 14;\n\t\tlt[12][i].in[1] <== in[i];\n\t\tlt[13][i] = LessEqThan(8);\n\t\tlt[13][i].in[0] <== in[i];\n\t\tlt[13][i].in[1] <== 127;\n\t\tand[112][i] = AND();\n\t\tand[112][i].a <== lt[12][i].out;\n\t\tand[112][i].b <== lt[13][i].out;\n\t\teq[73][i] = IsEqual();\n\t\teq[73][i].in[0] <== in[i];\n\t\teq[73][i].in[1] <== 11;\n\t\teq[74][i] = IsEqual();\n\t\teq[74][i].in[0] <== in[i];\n\t\teq[74][i].in[1] <== 12;\n\t\tand[113][i] = AND();\n\t\tand[113][i].a <== states[i][85];\n\t\tmulti_or[14][i] = MultiOR(12);\n\t\tmulti_or[14][i].in[0] <== and[112][i].out;\n\t\tmulti_or[14][i].in[1] <== eq[19][i].out;\n\t\tmulti_or[14][i].in[2] <== eq[20][i].out;\n\t\tmulti_or[14][i].in[3] <== eq[21][i].out;\n\t\tmulti_or[14][i].in[4] <== eq[22][i].out;\n\t\tmulti_or[14][i].in[5] <== eq[23][i].out;\n\t\tmulti_or[14][i].in[6] <== eq[24][i].out;\n\t\tmulti_or[14][i].in[7] <== eq[25][i].out;\n\t\tmulti_or[14][i].in[8] <== eq[26][i].out;\n\t\tmulti_or[14][i].in[9] <== eq[27][i].out;\n\t\tmulti_or[14][i].in[10] <== eq[73][i].out;\n\t\tmulti_or[14][i].in[11] <== eq[74][i].out;\n\t\tand[113][i].b <== multi_or[14][i].out;\n\t\tmulti_or[15][i] = MultiOR(3);\n\t\tmulti_or[15][i].in[0] <== and[110][i].out;\n\t\tmulti_or[15][i].in[1] <== and[111][i].out;\n\t\tmulti_or[15][i].in[2] <== and[113][i].out;\n\t\tstates[i+1][85] <== multi_or[15][i].out;\n\t\tand[114][i] = AND();\n\t\tand[114][i].a <== states[i][85];\n\t\tand[114][i].b <== eq[65][i].out;\n\t\tstates[i+1][86] <== and[114][i].out;\n\t\tand[115][i] = AND();\n\t\tand[115][i].a <== states[i][86];\n\t\tand[115][i].b <== eq[66][i].out;\n\t\tstates[i+1][87] <== and[115][i].out;\n\t\tand[116][i] = AND();\n\t\tand[116][i].a <== states[i][87];\n\t\tand[116][i].b <== eq[0][i].out;\n\t\tstates[i+1][88] <== and[116][i].out;\n\t\tand[117][i] = AND();\n\t\tand[117][i].a <== states[i][88];\n\t\tand[117][i].b <== eq[1][i].out;\n\t\tstates[i+1][89] <== and[117][i].out;\n\t\tand[118][i] = AND();\n\t\tand[118][i].a <== states[i][89];\n\t\tand[118][i].b <== eq[2][i].out;\n\t\tstates[i+1][90] <== and[118][i].out;\n\t\tand[119][i] = AND();\n\t\tand[119][i].a <== states[i][90];\n\t\tand[119][i].b <== eq[7][i].out;\n\t\tstates[i+1][91] <== and[119][i].out;\n\t\tand[120][i] = AND();\n\t\tand[120][i].a <== states[i][91];\n\t\tand[120][i].b <== eq[2][i].out;\n\t\tstates[i+1][92] <== and[120][i].out;\n\t\tand[121][i] = AND();\n\t\tand[121][i].a <== states[i][92];\n\t\tand[121][i].b <== eq[3][i].out;\n\t\tstates[i+1][93] <== and[121][i].out;\n\t\teq[75][i] = IsEqual();\n\t\teq[75][i].in[0] <== in[i];\n\t\teq[75][i].in[1] <== 99;\n\t\tand[122][i] = AND();\n\t\tand[122][i].a <== states[i][93];\n\t\tand[122][i].b <== eq[75][i].out;\n\t\tstates[i+1][94] <== and[122][i].out;\n\t\tand[123][i] = AND();\n\t\tand[123][i].a <== states[i][94];\n\t\tand[123][i].b <== eq[1][i].out;\n\t\tstates[i+1][95] <== and[123][i].out;\n\t\tand[124][i] = AND();\n\t\tand[124][i].a <== states[i][95];\n\t\tand[124][i].b <== eq[13][i].out;\n\t\tstates[i+1][96] <== and[124][i].out;\n\t\tand[125][i] = AND();\n\t\tand[125][i].a <== states[i][96];\n\t\tand[125][i].b <== eq[15][i].out;\n\t\tstates[i+1][97] <== and[125][i].out;\n\t\tand[126][i] = AND();\n\t\tand[126][i].a <== states[i][97];\n\t\tand[126][i].b <== eq[69][i].out;\n\t\tstates[i+1][98] <== and[126][i].out;\n\t\tand[127][i] = AND();\n\t\tand[127][i].a <== states[i][98];\n\t\tand[127][i].b <== eq[2][i].out;\n\t\tstates[i+1][99] <== and[127][i].out;\n\t\tand[128][i] = AND();\n\t\tand[128][i].a <== states[i][99];\n\t\tand[128][i].b <== eq[7][i].out;\n\t\tstates[i+1][100] <== and[128][i].out;\n\t\tand[129][i] = AND();\n\t\tand[129][i].a <== states[i][100];\n\t\tand[129][i].b <== eq[3][i].out;\n\t\tstates[i+1][101] <== and[129][i].out;\n\t\tand[130][i] = AND();\n\t\tand[130][i].a <== states[i][101];\n\t\tand[130][i].b <== eq[13][i].out;\n\t\tstates[i+1][102] <== and[130][i].out;\n\t\tand[131][i] = AND();\n\t\tand[131][i].a <== states[i][102];\n\t\tand[131][i].b <== eq[10][i].out;\n\t\tstates[i+1][103] <== and[131][i].out;\n\t\tand[132][i] = AND();\n\t\tand[132][i].a <== states[i][103];\n\t\tand[132][i].b <== eq[10][i].out;\n\t\tstates[i+1][104] <== and[132][i].out;\n\t\tand[133][i] = AND();\n\t\tand[133][i].a <== states[i][104];\n\t\tand[133][i].b <== eq[18][i].out;\n\t\tstates[i+1][105] <== and[133][i].out;\n\t\teq[76][i] = IsEqual();\n\t\teq[76][i].in[0] <== in[i];\n\t\teq[76][i].in[1] <== 121;\n\t\tand[134][i] = AND();\n\t\tand[134][i].a <== states[i][105];\n\t\tand[134][i].b <== eq[76][i].out;\n\t\tstates[i+1][106] <== and[134][i].out;\n\t\tand[135][i] = AND();\n\t\tand[135][i].a <== states[i][106];\n\t\tand[135][i].b <== eq[3][i].out;\n\t\tstates[i+1][107] <== and[135][i].out;\n\t\tand[136][i] = AND();\n\t\tand[136][i].a <== states[i][107];\n\t\tand[136][i].b <== eq[8][i].out;\n\t\tstates[i+1][108] <== and[136][i].out;\n\t\tand[137][i] = AND();\n\t\tand[137][i].a <== states[i][108];\n\t\tand[137][i].b <== eq[9][i].out;\n\t\tstates[i+1][109] <== and[137][i].out;\n\t\tand[138][i] = AND();\n\t\tand[138][i].a <== states[i][109];\n\t\tand[138][i].b <== eq[3][i].out;\n\t\tstates[i+1][110] <== and[138][i].out;\n\t\tand[139][i] = AND();\n\t\tand[139][i].a <== states[i][110];\n\t\tand[139][i].b <== eq[8][i].out;\n\t\tstates[i+1][111] <== and[139][i].out;\n\t\tand[140][i] = AND();\n\t\tand[140][i].a <== states[i][111];\n\t\tand[140][i].b <== eq[1][i].out;\n\t\tstates[i+1][112] <== and[140][i].out;\n\t\tand[141][i] = AND();\n\t\tand[141][i].a <== states[i][112];\n\t\tand[141][i].b <== eq[2][i].out;\n\t\tstates[i+1][113] <== and[141][i].out;\n\t\tand[142][i] = AND();\n\t\tand[142][i].a <== states[i][113];\n\t\tand[142][i].b <== eq[3][i].out;\n\t\tstates[i+1][114] <== and[142][i].out;\n\t\tand[143][i] = AND();\n\t\tand[143][i].a <== states[i][114];\n\t\tand[143][i].b <== eq[17][i].out;\n\t\tstates[i+1][115] <== and[143][i].out;\n\t\tand[144][i] = AND();\n\t\tand[144][i].a <== states[i][115];\n\t\tand[144][i].b <== eq[9][i].out;\n\t\tstates[i+1][116] <== and[144][i].out;\n\t\tand[145][i] = AND();\n\t\tand[145][i].a <== states[i][116];\n\t\tand[145][i].b <== eq[18][i].out;\n\t\tstates[i+1][117] <== and[145][i].out;\n\t\tand[146][i] = AND();\n\t\tand[146][i].a <== states[i][117];\n\t\tand[146][i].b <== eq[18][i].out;\n\t\tstates[i+1][118] <== and[146][i].out;\n\t\tand[147][i] = AND();\n\t\tand[147][i].a <== states[i][118];\n\t\tand[147][i].b <== eq[9][i].out;\n\t\tstates[i+1][119] <== and[147][i].out;\n\t\teq[77][i] = IsEqual();\n\t\teq[77][i].in[0] <== in[i];\n\t\teq[77][i].in[1] <== 119;\n\t\tand[148][i] = AND();\n\t\tand[148][i].a <== states[i][119];\n\t\tand[148][i].b <== eq[77][i].out;\n\t\tstates[i+1][120] <== and[148][i].out;\n\t\tand[149][i] = AND();\n\t\tand[149][i].a <== states[i][120];\n\t\tand[149][i].b <== eq[14][i].out;\n\t\tstates[i+1][121] <== and[149][i].out;\n\t\tand[150][i] = AND();\n\t\tand[150][i].a <== states[i][121];\n\t\tand[150][i].b <== eq[15][i].out;\n\t\tstates[i+1][122] <== and[150][i].out;\n\t\tand[151][i] = AND();\n\t\tand[151][i].a <== states[i][122];\n\t\tand[151][i].b <== eq[69][i].out;\n\t\tstates[i+1][123] <== and[151][i].out;\n\t\tand[152][i] = AND();\n\t\tand[152][i].a <== states[i][123];\n\t\tand[152][i].b <== eq[3][i].out;\n\t\tstates[i+1][124] <== and[152][i].out;\n\t\tand[153][i] = AND();\n\t\tand[153][i].a <== states[i][124];\n\t\tand[153][i].b <== eq[11][i].out;\n\t\tstates[i+1][125] <== and[153][i].out;\n\t\tand[154][i] = AND();\n\t\tand[154][i].a <== states[i][125];\n\t\tand[154][i].b <== eq[9][i].out;\n\t\tstates[i+1][126] <== and[154][i].out;\n\t\tand[155][i] = AND();\n\t\tand[155][i].a <== states[i][126];\n\t\tand[155][i].b <== eq[12][i].out;\n\t\tstates[i+1][127] <== and[155][i].out;\n\t\tand[156][i] = AND();\n\t\tand[156][i].a <== states[i][127];\n\t\tand[156][i].b <== eq[13][i].out;\n\t\tstates[i+1][128] <== and[156][i].out;\n\t\tand[157][i] = AND();\n\t\tand[157][i].a <== states[i][128];\n\t\tand[157][i].b <== eq[14][i].out;\n\t\tstates[i+1][129] <== and[157][i].out;\n\t\tand[158][i] = AND();\n\t\tand[158][i].a <== states[i][129];\n\t\tand[158][i].b <== eq[15][i].out;\n\t\tstates[i+1][130] <== and[158][i].out;\n\t\teq[78][i] = IsEqual();\n\t\teq[78][i].in[0] <== in[i];\n\t\teq[78][i].in[1] <== 40;\n\t\tand[159][i] = AND();\n\t\tand[159][i].a <== states[i][130];\n\t\tand[159][i].b <== eq[78][i].out;\n\t\tstates[i+1][131] <== and[159][i].out;\n\t\tand[160][i] = AND();\n\t\tand[160][i].a <== states[i][131];\n\t\tand[160][i].b <== eq[7][i].out;\n\t\tstates[i+1][132] <== and[160][i].out;\n\t\teq[79][i] = IsEqual();\n\t\teq[79][i].in[0] <== in[i];\n\t\teq[79][i].in[1] <== 41;\n\t\tand[161][i] = AND();\n\t\tand[161][i].a <== states[i][132];\n\t\tand[161][i].b <== eq[79][i].out;\n\t\tstates[i+1][133] <== and[161][i].out;\n\t\tand[162][i] = AND();\n\t\tand[162][i].a <== states[i][133];\n\t\tand[162][i].b <== eq[72][i].out;\n\t\tstates[i+1][134] <== and[162][i].out;\n\t\tand[163][i] = AND();\n\t\tand[163][i].a <== states[i][134];\n\t\tand[163][i].b <== eq[65][i].out;\n\t\tstates[i+1][135] <== and[163][i].out;\n\t\tand[164][i] = AND();\n\t\tand[164][i].a <== states[i][135];\n\t\tand[164][i].b <== eq[66][i].out;\n\t\tstates[i+1][136] <== and[164][i].out;\n\t\tand[165][i] = AND();\n\t\tand[165][i].a <== states[i][136];\n\t\tand[165][i].b <== and[53][i].out;\n\t\tand[166][i] = AND();\n\t\tand[166][i].a <== states[i][138];\n\t\tand[166][i].b <== and[55][i].out;\n\t\tand[167][i] = AND();\n\t\tand[167][i].a <== states[i][139];\n\t\tand[167][i].b <== and[51][i].out;\n\t\tand[168][i] = AND();\n\t\tand[168][i].a <== states[i][140];\n\t\tand[168][i].b <== and[58][i].out;\n\t\tand[169][i] = AND();\n\t\tand[169][i].a <== states[i][144];\n\t\tand[169][i].b <== and[53][i].out;\n\t\tmulti_or[16][i] = MultiOR(5);\n\t\tmulti_or[16][i].in[0] <== and[165][i].out;\n\t\tmulti_or[16][i].in[1] <== and[166][i].out;\n\t\tmulti_or[16][i].in[2] <== and[167][i].out;\n\t\tmulti_or[16][i].in[3] <== and[168][i].out;\n\t\tmulti_or[16][i].in[4] <== and[169][i].out;\n\t\tstates[i+1][137] <== multi_or[16][i].out;\n\t\tand[170][i] = AND();\n\t\tand[170][i].a <== states[i][136];\n\t\tand[170][i].b <== eq[28][i].out;\n\t\tand[171][i] = AND();\n\t\tand[171][i].a <== states[i][144];\n\t\tand[171][i].b <== eq[28][i].out;\n\t\tmulti_or[17][i] = MultiOR(2);\n\t\tmulti_or[17][i].in[0] <== and[170][i].out;\n\t\tmulti_or[17][i].in[1] <== and[171][i].out;\n\t\tstates[i+1][138] <== multi_or[17][i].out;\n\t\tand[172][i] = AND();\n\t\tand[172][i].a <== states[i][136];\n\t\tand[172][i].b <== multi_or[3][i].out;\n\t\tand[173][i] = AND();\n\t\tand[173][i].a <== states[i][141];\n\t\tand[173][i].b <== and[62][i].out;\n\t\tand[174][i] = AND();\n\t\tand[174][i].a <== states[i][142];\n\t\tand[174][i].b <== and[51][i].out;\n\t\tand[175][i] = AND();\n\t\tand[175][i].a <== states[i][143];\n\t\tand[175][i].b <== multi_or[4][i].out;\n\t\tand[176][i] = AND();\n\t\tand[176][i].a <== states[i][144];\n\t\tand[176][i].b <== multi_or[3][i].out;\n\t\tmulti_or[18][i] = MultiOR(5);\n\t\tmulti_or[18][i].in[0] <== and[172][i].out;\n\t\tmulti_or[18][i].in[1] <== and[173][i].out;\n\t\tmulti_or[18][i].in[2] <== and[174][i].out;\n\t\tmulti_or[18][i].in[3] <== and[175][i].out;\n\t\tmulti_or[18][i].in[4] <== and[176][i].out;\n\t\tstates[i+1][139] <== multi_or[18][i].out;\n\t\tand[177][i] = AND();\n\t\tand[177][i].a <== states[i][136];\n\t\tand[177][i].b <== eq[59][i].out;\n\t\tand[178][i] = AND();\n\t\tand[178][i].a <== states[i][144];\n\t\tand[178][i].b <== eq[59][i].out;\n\t\tmulti_or[19][i] = MultiOR(2);\n\t\tmulti_or[19][i].in[0] <== and[177][i].out;\n\t\tmulti_or[19][i].in[1] <== and[178][i].out;\n\t\tstates[i+1][140] <== multi_or[19][i].out;\n\t\tand[179][i] = AND();\n\t\tand[179][i].a <== states[i][136];\n\t\tand[179][i].b <== eq[60][i].out;\n\t\tand[180][i] = AND();\n\t\tand[180][i].a <== states[i][144];\n\t\tand[180][i].b <== eq[60][i].out;\n\t\tmulti_or[20][i] = MultiOR(2);\n\t\tmulti_or[20][i].in[0] <== and[179][i].out;\n\t\tmulti_or[20][i].in[1] <== and[180][i].out;\n\t\tstates[i+1][141] <== multi_or[20][i].out;\n\t\tand[181][i] = AND();\n\t\tand[181][i].a <== states[i][136];\n\t\tand[181][i].b <== multi_or[6][i].out;\n\t\tand[182][i] = AND();\n\t\tand[182][i].a <== states[i][144];\n\t\tand[182][i].b <== multi_or[6][i].out;\n\t\tmulti_or[21][i] = MultiOR(2);\n\t\tmulti_or[21][i].in[0] <== and[181][i].out;\n\t\tmulti_or[21][i].in[1] <== and[182][i].out;\n\t\tstates[i+1][142] <== multi_or[21][i].out;\n\t\tand[183][i] = AND();\n\t\tand[183][i].a <== states[i][136];\n\t\tand[183][i].b <== eq[64][i].out;\n\t\tand[184][i] = AND();\n\t\tand[184][i].a <== states[i][144];\n\t\tand[184][i].b <== eq[64][i].out;\n\t\tmulti_or[22][i] = MultiOR(2);\n\t\tmulti_or[22][i].in[0] <== and[183][i].out;\n\t\tmulti_or[22][i].in[1] <== and[184][i].out;\n\t\tstates[i+1][143] <== multi_or[22][i].out;\n\t\tand[185][i] = AND();\n\t\tand[185][i].a <== states[i][136];\n\t\tand[185][i].b <== multi_or[0][i].out;\n\t\tand[186][i] = AND();\n\t\tand[186][i].a <== states[i][137];\n\t\tand[186][i].b <== and[51][i].out;\n\t\tand[187][i] = AND();\n\t\tand[187][i].a <== states[i][144];\n\t\tand[187][i].b <== multi_or[14][i].out;\n\t\tmulti_or[23][i] = MultiOR(3);\n\t\tmulti_or[23][i].in[0] <== and[185][i].out;\n\t\tmulti_or[23][i].in[1] <== and[186][i].out;\n\t\tmulti_or[23][i].in[2] <== and[187][i].out;\n\t\tstates[i+1][144] <== multi_or[23][i].out;\n\t\tand[188][i] = AND();\n\t\tand[188][i].a <== states[i][144];\n\t\tand[188][i].b <== eq[65][i].out;\n\t\tstates[i+1][145] <== and[188][i].out;\n\t\tand[189][i] = AND();\n\t\tand[189][i].a <== states[i][145];\n\t\tand[189][i].b <== eq[66][i].out;\n\t\tstates[i+1][146] <== and[189][i].out;\n\t\tand[190][i] = AND();\n\t\tand[190][i].a <== states[i][146];\n\t\tand[190][i].b <== eq[65][i].out;\n\t\tstates[i+1][147] <== and[190][i].out;\n\t\tand[191][i] = AND();\n\t\tand[191][i].a <== states[i][147];\n\t\tand[191][i].b <== eq[66][i].out;\n\t\tstates[i+1][148] <== and[191][i].out;\n\t\tand[192][i] = AND();\n\t\tand[192][i].a <== states[i][148];\n\t\tand[192][i].b <== eq[67][i].out;\n\t\tstates[i+1][149] <== and[192][i].out;\n\t\tand[193][i] = AND();\n\t\tand[193][i].a <== states[i][149];\n\t\tand[193][i].b <== eq[18][i].out;\n\t\tstates[i+1][150] <== and[193][i].out;\n\t\tand[194][i] = AND();\n\t\tand[194][i].a <== states[i][150];\n\t\tand[194][i].b <== eq[2][i].out;\n\t\tstates[i+1][151] <== and[194][i].out;\n\t\tand[195][i] = AND();\n\t\tand[195][i].a <== states[i][151];\n\t\tand[195][i].b <== eq[13][i].out;\n\t\tstates[i+1][152] <== and[195][i].out;\n\t\tand[196][i] = AND();\n\t\tand[196][i].a <== states[i][152];\n\t\tand[196][i].b <== eq[7][i].out;\n\t\tstates[i+1][153] <== and[196][i].out;\n\t\tand[197][i] = AND();\n\t\tand[197][i].a <== states[i][153];\n\t\tand[197][i].b <== eq[2][i].out;\n\t\tstates[i+1][154] <== and[197][i].out;\n\t\tand[198][i] = AND();\n\t\tand[198][i].a <== states[i][154];\n\t\tand[198][i].b <== eq[3][i].out;\n\t\tstates[i+1][155] <== and[198][i].out;\n\t\tand[199][i] = AND();\n\t\tand[199][i].a <== states[i][155];\n\t\tand[199][i].b <== eq[75][i].out;\n\t\tstates[i+1][156] <== and[199][i].out;\n\t\tand[200][i] = AND();\n\t\tand[200][i].a <== states[i][156];\n\t\tand[200][i].b <== eq[9][i].out;\n\t\tstates[i+1][157] <== and[200][i].out;\n\t\tand[201][i] = AND();\n\t\tand[201][i].a <== states[i][157];\n\t\tand[201][i].b <== eq[15][i].out;\n\t\tstates[i+1][158] <== and[201][i].out;\n\t\tand[202][i] = AND();\n\t\tand[202][i].a <== states[i][158];\n\t\tand[202][i].b <== eq[8][i].out;\n\t\tstates[i+1][159] <== and[202][i].out;\n\t\tand[203][i] = AND();\n\t\tand[203][i].a <== states[i][159];\n\t\tand[203][i].b <== eq[13][i].out;\n\t\tstates[i+1][160] <== and[203][i].out;\n\t\tand[204][i] = AND();\n\t\tand[204][i].a <== states[i][160];\n\t\tand[204][i].b <== eq[75][i].out;\n\t\tstates[i+1][161] <== and[204][i].out;\n\t\tand[205][i] = AND();\n\t\tand[205][i].a <== states[i][161];\n\t\tand[205][i].b <== eq[8][i].out;\n\t\tstates[i+1][162] <== and[205][i].out;\n\t\tand[206][i] = AND();\n\t\tand[206][i].a <== states[i][162];\n\t\tand[206][i].b <== eq[3][i].out;\n\t\tstates[i+1][163] <== and[206][i].out;\n\t\tand[207][i] = AND();\n\t\tand[207][i].a <== states[i][163];\n\t\tand[207][i].b <== eq[9][i].out;\n\t\tstates[i+1][164] <== and[207][i].out;\n\t\tand[208][i] = AND();\n\t\tand[208][i].a <== states[i][164];\n\t\tand[208][i].b <== eq[6][i].out;\n\t\tstates[i+1][165] <== and[208][i].out;\n\t\tand[209][i] = AND();\n\t\tand[209][i].a <== states[i][165];\n\t\tand[209][i].b <== eq[4][i].out;\n\t\tstates[i+1][166] <== and[209][i].out;\n\t\tand[210][i] = AND();\n\t\tand[210][i].a <== states[i][166];\n\t\tand[210][i].b <== eq[3][i].out;\n\t\tstates[i+1][167] <== and[210][i].out;\n\t\tand[211][i] = AND();\n\t\tand[211][i].a <== states[i][167];\n\t\tand[211][i].b <== eq[7][i].out;\n\t\tstates[i+1][168] <== and[211][i].out;\n\t\tand[212][i] = AND();\n\t\tand[212][i].a <== states[i][168];\n\t\tand[212][i].b <== eq[6][i].out;\n\t\tstates[i+1][169] <== and[212][i].out;\n\t\tand[213][i] = AND();\n\t\tand[213][i].a <== states[i][169];\n\t\tand[213][i].b <== eq[10][i].out;\n\t\tstates[i+1][170] <== and[213][i].out;\n\t\tand[214][i] = AND();\n\t\tand[214][i].a <== states[i][170];\n\t\tand[214][i].b <== eq[10][i].out;\n\t\tstates[i+1][171] <== and[214][i].out;\n\t\tand[215][i] = AND();\n\t\tand[215][i].a <== states[i][171];\n\t\tand[215][i].b <== eq[9][i].out;\n\t\tstates[i+1][172] <== and[215][i].out;\n\t\tand[216][i] = AND();\n\t\tand[216][i].a <== states[i][172];\n\t\tand[216][i].b <== eq[4][i].out;\n\t\tstates[i+1][173] <== and[216][i].out;\n\t\tand[217][i] = AND();\n\t\tand[217][i].a <== states[i][173];\n\t\tand[217][i].b <== eq[8][i].out;\n\t\tstates[i+1][174] <== and[217][i].out;\n\t\tand[218][i] = AND();\n\t\tand[218][i].a <== states[i][174];\n\t\tand[218][i].b <== eq[3][i].out;\n\t\tstates[i+1][175] <== and[218][i].out;\n\t\tand[219][i] = AND();\n\t\tand[219][i].a <== states[i][175];\n\t\tand[219][i].b <== eq[8][i].out;\n\t\tstates[i+1][176] <== and[219][i].out;\n\t\tand[220][i] = AND();\n\t\tand[220][i].a <== states[i][176];\n\t\tand[220][i].b <== eq[2][i].out;\n\t\tstates[i+1][177] <== and[220][i].out;\n\t\tand[221][i] = AND();\n\t\tand[221][i].a <== states[i][177];\n\t\tand[221][i].b <== eq[13][i].out;\n\t\tstates[i+1][178] <== and[221][i].out;\n\t\tand[222][i] = AND();\n\t\tand[222][i].a <== states[i][178];\n\t\tand[222][i].b <== eq[12][i].out;\n\t\tstates[i+1][179] <== and[222][i].out;\n\t\tand[223][i] = AND();\n\t\tand[223][i].a <== states[i][179];\n\t\tand[223][i].b <== eq[3][i].out;\n\t\tstates[i+1][180] <== and[223][i].out;\n\t\tand[224][i] = AND();\n\t\tand[224][i].a <== states[i][180];\n\t\tand[224][i].b <== eq[14][i].out;\n\t\tstates[i+1][181] <== and[224][i].out;\n\t\tand[225][i] = AND();\n\t\tand[225][i].a <== states[i][181];\n\t\tand[225][i].b <== eq[17][i].out;\n\t\tstates[i+1][182] <== and[225][i].out;\n\t\tand[226][i] = AND();\n\t\tand[226][i].a <== states[i][182];\n\t\tand[226][i].b <== eq[3][i].out;\n\t\tstates[i+1][183] <== and[226][i].out;\n\t\tand[227][i] = AND();\n\t\tand[227][i].a <== states[i][183];\n\t\tand[227][i].b <== eq[76][i].out;\n\t\tstates[i+1][184] <== and[227][i].out;\n\t\tand[228][i] = AND();\n\t\tand[228][i].a <== states[i][184];\n\t\tand[228][i].b <== eq[9][i].out;\n\t\tstates[i+1][185] <== and[228][i].out;\n\t\tand[229][i] = AND();\n\t\tand[229][i].a <== states[i][185];\n\t\tand[229][i].b <== eq[6][i].out;\n\t\tstates[i+1][186] <== and[229][i].out;\n\t\tand[230][i] = AND();\n\t\tand[230][i].a <== states[i][186];\n\t\tand[230][i].b <== eq[3][i].out;\n\t\tstates[i+1][187] <== and[230][i].out;\n\t\tand[231][i] = AND();\n\t\tand[231][i].a <== states[i][187];\n\t\tand[231][i].b <== eq[1][i].out;\n\t\tstates[i+1][188] <== and[231][i].out;\n\t\tand[232][i] = AND();\n\t\tand[232][i].a <== states[i][188];\n\t\tand[232][i].b <== eq[13][i].out;\n\t\tstates[i+1][189] <== and[232][i].out;\n\t\teq[80][i] = IsEqual();\n\t\teq[80][i].in[0] <== in[i];\n\t\teq[80][i].in[1] <== 118;\n\t\tand[233][i] = AND();\n\t\tand[233][i].a <== states[i][189];\n\t\tand[233][i].b <== eq[80][i].out;\n\t\tstates[i+1][190] <== and[233][i].out;\n\t\tand[234][i] = AND();\n\t\tand[234][i].a <== states[i][190];\n\t\tand[234][i].b <== eq[2][i].out;\n\t\tstates[i+1][191] <== and[234][i].out;\n\t\tand[235][i] = AND();\n\t\tand[235][i].a <== states[i][191];\n\t\tand[235][i].b <== eq[3][i].out;\n\t\tstates[i+1][192] <== and[235][i].out;\n\t\tand[236][i] = AND();\n\t\tand[236][i].a <== states[i][192];\n\t\tand[236][i].b <== eq[13][i].out;\n\t\tstates[i+1][193] <== and[236][i].out;\n\t\tand[237][i] = AND();\n\t\tand[237][i].a <== states[i][193];\n\t\tand[237][i].b <== eq[15][i].out;\n\t\tstates[i+1][194] <== and[237][i].out;\n\t\tand[238][i] = AND();\n\t\tand[238][i].a <== states[i][194];\n\t\tand[238][i].b <== eq[76][i].out;\n\t\tstates[i+1][195] <== and[238][i].out;\n\t\tand[239][i] = AND();\n\t\tand[239][i].a <== states[i][195];\n\t\tand[239][i].b <== eq[3][i].out;\n\t\tstates[i+1][196] <== and[239][i].out;\n\t\tand[240][i] = AND();\n\t\tand[240][i].a <== states[i][196];\n\t\tand[240][i].b <== eq[5][i].out;\n\t\tstates[i+1][197] <== and[240][i].out;\n\t\tand[241][i] = AND();\n\t\tand[241][i].a <== states[i][197];\n\t\tand[241][i].b <== eq[6][i].out;\n\t\tstates[i+1][198] <== and[241][i].out;\n\t\tand[242][i] = AND();\n\t\tand[242][i].a <== states[i][198];\n\t\tand[242][i].b <== eq[2][i].out;\n\t\tstates[i+1][199] <== and[242][i].out;\n\t\tand[243][i] = AND();\n\t\tand[243][i].a <== states[i][199];\n\t\tand[243][i].b <== eq[7][i].out;\n\t\tstates[i+1][200] <== and[243][i].out;\n\t\tand[244][i] = AND();\n\t\tand[244][i].a <== states[i][200];\n\t\tand[244][i].b <== eq[8][i].out;\n\t\tstates[i+1][201] <== and[244][i].out;\n\t\tand[245][i] = AND();\n\t\tand[245][i].a <== states[i][201];\n\t\tand[245][i].b <== eq[14][i].out;\n\t\tstates[i+1][202] <== and[245][i].out;\n\t\tand[246][i] = AND();\n\t\tand[246][i].a <== states[i][202];\n\t\tand[246][i].b <== eq[9][i].out;\n\t\tstates[i+1][203] <== and[246][i].out;\n\t\tand[247][i] = AND();\n\t\tand[247][i].a <== states[i][203];\n\t\tand[247][i].b <== eq[15][i].out;\n\t\tstates[i+1][204] <== and[247][i].out;\n\t\tand[248][i] = AND();\n\t\tand[248][i].a <== states[i][204];\n\t\tand[248][i].b <== eq[7][i].out;\n\t\tstates[i+1][205] <== and[248][i].out;\n\t\tand[249][i] = AND();\n\t\tand[249][i].a <== states[i][205];\n\t\tand[249][i].b <== multi_or[0][i].out;\n\t\tand[250][i] = AND();\n\t\tand[250][i].a <== states[i][207];\n\t\tand[250][i].b <== and[51][i].out;\n\t\tmulti_or[24][i] = MultiOR(2);\n\t\tmulti_or[24][i].in[0] <== and[249][i].out;\n\t\tmulti_or[24][i].in[1] <== and[250][i].out;\n\t\tstates[i+1][206] <== multi_or[24][i].out;\n\t\tand[251][i] = AND();\n\t\tand[251][i].a <== states[i][205];\n\t\tand[251][i].b <== and[53][i].out;\n\t\tand[252][i] = AND();\n\t\tand[252][i].a <== states[i][208];\n\t\tand[252][i].b <== and[55][i].out;\n\t\tand[253][i] = AND();\n\t\tand[253][i].a <== states[i][209];\n\t\tand[253][i].b <== and[51][i].out;\n\t\tand[254][i] = AND();\n\t\tand[254][i].a <== states[i][210];\n\t\tand[254][i].b <== and[58][i].out;\n\t\tmulti_or[25][i] = MultiOR(4);\n\t\tmulti_or[25][i].in[0] <== and[251][i].out;\n\t\tmulti_or[25][i].in[1] <== and[252][i].out;\n\t\tmulti_or[25][i].in[2] <== and[253][i].out;\n\t\tmulti_or[25][i].in[3] <== and[254][i].out;\n\t\tstates[i+1][207] <== multi_or[25][i].out;\n\t\tand[255][i] = AND();\n\t\tand[255][i].a <== states[i][205];\n\t\tand[255][i].b <== eq[28][i].out;\n\t\tstates[i+1][208] <== and[255][i].out;\n\t\tand[256][i] = AND();\n\t\tand[256][i].a <== states[i][205];\n\t\tand[256][i].b <== multi_or[3][i].out;\n\t\tand[257][i] = AND();\n\t\tand[257][i].a <== states[i][211];\n\t\tand[257][i].b <== and[62][i].out;\n\t\tand[258][i] = AND();\n\t\tand[258][i].a <== states[i][212];\n\t\tand[258][i].b <== and[51][i].out;\n\t\tand[259][i] = AND();\n\t\tand[259][i].a <== states[i][213];\n\t\tand[259][i].b <== multi_or[4][i].out;\n\t\tmulti_or[26][i] = MultiOR(4);\n\t\tmulti_or[26][i].in[0] <== and[256][i].out;\n\t\tmulti_or[26][i].in[1] <== and[257][i].out;\n\t\tmulti_or[26][i].in[2] <== and[258][i].out;\n\t\tmulti_or[26][i].in[3] <== and[259][i].out;\n\t\tstates[i+1][209] <== multi_or[26][i].out;\n\t\tand[260][i] = AND();\n\t\tand[260][i].a <== states[i][205];\n\t\tand[260][i].b <== eq[59][i].out;\n\t\tstates[i+1][210] <== and[260][i].out;\n\t\tand[261][i] = AND();\n\t\tand[261][i].a <== states[i][205];\n\t\tand[261][i].b <== eq[60][i].out;\n\t\tstates[i+1][211] <== and[261][i].out;\n\t\tand[262][i] = AND();\n\t\tand[262][i].a <== states[i][205];\n\t\tand[262][i].b <== multi_or[6][i].out;\n\t\tstates[i+1][212] <== and[262][i].out;\n\t\tand[263][i] = AND();\n\t\tand[263][i].a <== states[i][205];\n\t\tand[263][i].b <== eq[64][i].out;\n\t\tstates[i+1][213] <== and[263][i].out;\n\t\tfrom_zero_enabled[i] <== MultiNOR(213)([states_tmp[i+1][1], states[i+1][2], states[i+1][3], states[i+1][4], states[i+1][5], states[i+1][6], states[i+1][7], states[i+1][8], states[i+1][9], states[i+1][10], states[i+1][11], states[i+1][12], states[i+1][13], states[i+1][14], states[i+1][15], states[i+1][16], states[i+1][17], states[i+1][18], states[i+1][19], states[i+1][20], states[i+1][21], states[i+1][22], states[i+1][23], states[i+1][24], states[i+1][25], states[i+1][26], states[i+1][27], states[i+1][28], states[i+1][29], states[i+1][30], states[i+1][31], states[i+1][32], states[i+1][33], states[i+1][34], states[i+1][35], states[i+1][36], states[i+1][37], states[i+1][38], states[i+1][39], states[i+1][40], states[i+1][41], states[i+1][42], states[i+1][43], states[i+1][44], states[i+1][45], states[i+1][46], states[i+1][47], states[i+1][48], states[i+1][49], states[i+1][50], states[i+1][51], states[i+1][52], states[i+1][53], states[i+1][54], states[i+1][55], states[i+1][56], states[i+1][57], states[i+1][58], states[i+1][59], states[i+1][60], states[i+1][61], states[i+1][62], states[i+1][63], states[i+1][64], states[i+1][65], states[i+1][66], states[i+1][67], states[i+1][68], states[i+1][69], states[i+1][70], states[i+1][71], states[i+1][72], states[i+1][73], states[i+1][74], states[i+1][75], states[i+1][76], states[i+1][77], states[i+1][78], states[i+1][79], states[i+1][80], states[i+1][81], states[i+1][82], states[i+1][83], states[i+1][84], states[i+1][85], states[i+1][86], states[i+1][87], states[i+1][88], states[i+1][89], states[i+1][90], states[i+1][91], states[i+1][92], states[i+1][93], states[i+1][94], states[i+1][95], states[i+1][96], states[i+1][97], states[i+1][98], states[i+1][99], states[i+1][100], states[i+1][101], states[i+1][102], states[i+1][103], states[i+1][104], states[i+1][105], states[i+1][106], states[i+1][107], states[i+1][108], states[i+1][109], states[i+1][110], states[i+1][111], states[i+1][112], states[i+1][113], states[i+1][114], states[i+1][115], states[i+1][116], states[i+1][117], states[i+1][118], states[i+1][119], states[i+1][120], states[i+1][121], states[i+1][122], states[i+1][123], states[i+1][124], states[i+1][125], states[i+1][126], states[i+1][127], states[i+1][128], states[i+1][129], states[i+1][130], states[i+1][131], states[i+1][132], states[i+1][133], states[i+1][134], states[i+1][135], states[i+1][136], states[i+1][137], states[i+1][138], states[i+1][139], states[i+1][140], states[i+1][141], states[i+1][142], states[i+1][143], states[i+1][144], states[i+1][145], states[i+1][146], states[i+1][147], states[i+1][148], states[i+1][149], states[i+1][150], states[i+1][151], states[i+1][152], states[i+1][153], states[i+1][154], states[i+1][155], states[i+1][156], states[i+1][157], states[i+1][158], states[i+1][159], states[i+1][160], states[i+1][161], states[i+1][162], states[i+1][163], states[i+1][164], states[i+1][165], states[i+1][166], states[i+1][167], states[i+1][168], states[i+1][169], states[i+1][170], states[i+1][171], states[i+1][172], states[i+1][173], states[i+1][174], states[i+1][175], states[i+1][176], states[i+1][177], states[i+1][178], states[i+1][179], states[i+1][180], states[i+1][181], states[i+1][182], states[i+1][183], states[i+1][184], states[i+1][185], states[i+1][186], states[i+1][187], states[i+1][188], states[i+1][189], states[i+1][190], states[i+1][191], states[i+1][192], states[i+1][193], states[i+1][194], states[i+1][195], states[i+1][196], states[i+1][197], states[i+1][198], states[i+1][199], states[i+1][200], states[i+1][201], states[i+1][202], states[i+1][203], states[i+1][204], states[i+1][205], states[i+1][206], states[i+1][207], states[i+1][208], states[i+1][209], states[i+1][210], states[i+1][211], states[i+1][212], states[i+1][213]]);\n\t\tstates[i+1][1] <== MultiOR(2)([states_tmp[i+1][1], from_zero_enabled[i] * and[0][i].out]);\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t\tstate_changed[i].in[63] <== states[i+1][64];\n\t\tstate_changed[i].in[64] <== states[i+1][65];\n\t\tstate_changed[i].in[65] <== states[i+1][66];\n\t\tstate_changed[i].in[66] <== states[i+1][67];\n\t\tstate_changed[i].in[67] <== states[i+1][68];\n\t\tstate_changed[i].in[68] <== states[i+1][69];\n\t\tstate_changed[i].in[69] <== states[i+1][70];\n\t\tstate_changed[i].in[70] <== states[i+1][71];\n\t\tstate_changed[i].in[71] <== states[i+1][72];\n\t\tstate_changed[i].in[72] <== states[i+1][73];\n\t\tstate_changed[i].in[73] <== states[i+1][74];\n\t\tstate_changed[i].in[74] <== states[i+1][75];\n\t\tstate_changed[i].in[75] <== states[i+1][76];\n\t\tstate_changed[i].in[76] <== states[i+1][77];\n\t\tstate_changed[i].in[77] <== states[i+1][78];\n\t\tstate_changed[i].in[78] <== states[i+1][79];\n\t\tstate_changed[i].in[79] <== states[i+1][80];\n\t\tstate_changed[i].in[80] <== states[i+1][81];\n\t\tstate_changed[i].in[81] <== states[i+1][82];\n\t\tstate_changed[i].in[82] <== states[i+1][83];\n\t\tstate_changed[i].in[83] <== states[i+1][84];\n\t\tstate_changed[i].in[84] <== states[i+1][85];\n\t\tstate_changed[i].in[85] <== states[i+1][86];\n\t\tstate_changed[i].in[86] <== states[i+1][87];\n\t\tstate_changed[i].in[87] <== states[i+1][88];\n\t\tstate_changed[i].in[88] <== states[i+1][89];\n\t\tstate_changed[i].in[89] <== states[i+1][90];\n\t\tstate_changed[i].in[90] <== states[i+1][91];\n\t\tstate_changed[i].in[91] <== states[i+1][92];\n\t\tstate_changed[i].in[92] <== states[i+1][93];\n\t\tstate_changed[i].in[93] <== states[i+1][94];\n\t\tstate_changed[i].in[94] <== states[i+1][95];\n\t\tstate_changed[i].in[95] <== states[i+1][96];\n\t\tstate_changed[i].in[96] <== states[i+1][97];\n\t\tstate_changed[i].in[97] <== states[i+1][98];\n\t\tstate_changed[i].in[98] <== states[i+1][99];\n\t\tstate_changed[i].in[99] <== states[i+1][100];\n\t\tstate_changed[i].in[100] <== states[i+1][101];\n\t\tstate_changed[i].in[101] <== states[i+1][102];\n\t\tstate_changed[i].in[102] <== states[i+1][103];\n\t\tstate_changed[i].in[103] <== states[i+1][104];\n\t\tstate_changed[i].in[104] <== states[i+1][105];\n\t\tstate_changed[i].in[105] <== states[i+1][106];\n\t\tstate_changed[i].in[106] <== states[i+1][107];\n\t\tstate_changed[i].in[107] <== states[i+1][108];\n\t\tstate_changed[i].in[108] <== states[i+1][109];\n\t\tstate_changed[i].in[109] <== states[i+1][110];\n\t\tstate_changed[i].in[110] <== states[i+1][111];\n\t\tstate_changed[i].in[111] <== states[i+1][112];\n\t\tstate_changed[i].in[112] <== states[i+1][113];\n\t\tstate_changed[i].in[113] <== states[i+1][114];\n\t\tstate_changed[i].in[114] <== states[i+1][115];\n\t\tstate_changed[i].in[115] <== states[i+1][116];\n\t\tstate_changed[i].in[116] <== states[i+1][117];\n\t\tstate_changed[i].in[117] <== states[i+1][118];\n\t\tstate_changed[i].in[118] <== states[i+1][119];\n\t\tstate_changed[i].in[119] <== states[i+1][120];\n\t\tstate_changed[i].in[120] <== states[i+1][121];\n\t\tstate_changed[i].in[121] <== states[i+1][122];\n\t\tstate_changed[i].in[122] <== states[i+1][123];\n\t\tstate_changed[i].in[123] <== states[i+1][124];\n\t\tstate_changed[i].in[124] <== states[i+1][125];\n\t\tstate_changed[i].in[125] <== states[i+1][126];\n\t\tstate_changed[i].in[126] <== states[i+1][127];\n\t\tstate_changed[i].in[127] <== states[i+1][128];\n\t\tstate_changed[i].in[128] <== states[i+1][129];\n\t\tstate_changed[i].in[129] <== states[i+1][130];\n\t\tstate_changed[i].in[130] <== states[i+1][131];\n\t\tstate_changed[i].in[131] <== states[i+1][132];\n\t\tstate_changed[i].in[132] <== states[i+1][133];\n\t\tstate_changed[i].in[133] <== states[i+1][134];\n\t\tstate_changed[i].in[134] <== states[i+1][135];\n\t\tstate_changed[i].in[135] <== states[i+1][136];\n\t\tstate_changed[i].in[136] <== states[i+1][137];\n\t\tstate_changed[i].in[137] <== states[i+1][138];\n\t\tstate_changed[i].in[138] <== states[i+1][139];\n\t\tstate_changed[i].in[139] <== states[i+1][140];\n\t\tstate_changed[i].in[140] <== states[i+1][141];\n\t\tstate_changed[i].in[141] <== states[i+1][142];\n\t\tstate_changed[i].in[142] <== states[i+1][143];\n\t\tstate_changed[i].in[143] <== states[i+1][144];\n\t\tstate_changed[i].in[144] <== states[i+1][145];\n\t\tstate_changed[i].in[145] <== states[i+1][146];\n\t\tstate_changed[i].in[146] <== states[i+1][147];\n\t\tstate_changed[i].in[147] <== states[i+1][148];\n\t\tstate_changed[i].in[148] <== states[i+1][149];\n\t\tstate_changed[i].in[149] <== states[i+1][150];\n\t\tstate_changed[i].in[150] <== states[i+1][151];\n\t\tstate_changed[i].in[151] <== states[i+1][152];\n\t\tstate_changed[i].in[152] <== states[i+1][153];\n\t\tstate_changed[i].in[153] <== states[i+1][154];\n\t\tstate_changed[i].in[154] <== states[i+1][155];\n\t\tstate_changed[i].in[155] <== states[i+1][156];\n\t\tstate_changed[i].in[156] <== states[i+1][157];\n\t\tstate_changed[i].in[157] <== states[i+1][158];\n\t\tstate_changed[i].in[158] <== states[i+1][159];\n\t\tstate_changed[i].in[159] <== states[i+1][160];\n\t\tstate_changed[i].in[160] <== states[i+1][161];\n\t\tstate_changed[i].in[161] <== states[i+1][162];\n\t\tstate_changed[i].in[162] <== states[i+1][163];\n\t\tstate_changed[i].in[163] <== states[i+1][164];\n\t\tstate_changed[i].in[164] <== states[i+1][165];\n\t\tstate_changed[i].in[165] <== states[i+1][166];\n\t\tstate_changed[i].in[166] <== states[i+1][167];\n\t\tstate_changed[i].in[167] <== states[i+1][168];\n\t\tstate_changed[i].in[168] <== states[i+1][169];\n\t\tstate_changed[i].in[169] <== states[i+1][170];\n\t\tstate_changed[i].in[170] <== states[i+1][171];\n\t\tstate_changed[i].in[171] <== states[i+1][172];\n\t\tstate_changed[i].in[172] <== states[i+1][173];\n\t\tstate_changed[i].in[173] <== states[i+1][174];\n\t\tstate_changed[i].in[174] <== states[i+1][175];\n\t\tstate_changed[i].in[175] <== states[i+1][176];\n\t\tstate_changed[i].in[176] <== states[i+1][177];\n\t\tstate_changed[i].in[177] <== states[i+1][178];\n\t\tstate_changed[i].in[178] <== states[i+1][179];\n\t\tstate_changed[i].in[179] <== states[i+1][180];\n\t\tstate_changed[i].in[180] <== states[i+1][181];\n\t\tstate_changed[i].in[181] <== states[i+1][182];\n\t\tstate_changed[i].in[182] <== states[i+1][183];\n\t\tstate_changed[i].in[183] <== states[i+1][184];\n\t\tstate_changed[i].in[184] <== states[i+1][185];\n\t\tstate_changed[i].in[185] <== states[i+1][186];\n\t\tstate_changed[i].in[186] <== states[i+1][187];\n\t\tstate_changed[i].in[187] <== states[i+1][188];\n\t\tstate_changed[i].in[188] <== states[i+1][189];\n\t\tstate_changed[i].in[189] <== states[i+1][190];\n\t\tstate_changed[i].in[190] <== states[i+1][191];\n\t\tstate_changed[i].in[191] <== states[i+1][192];\n\t\tstate_changed[i].in[192] <== states[i+1][193];\n\t\tstate_changed[i].in[193] <== states[i+1][194];\n\t\tstate_changed[i].in[194] <== states[i+1][195];\n\t\tstate_changed[i].in[195] <== states[i+1][196];\n\t\tstate_changed[i].in[196] <== states[i+1][197];\n\t\tstate_changed[i].in[197] <== states[i+1][198];\n\t\tstate_changed[i].in[198] <== states[i+1][199];\n\t\tstate_changed[i].in[199] <== states[i+1][200];\n\t\tstate_changed[i].in[200] <== states[i+1][201];\n\t\tstate_changed[i].in[201] <== states[i+1][202];\n\t\tstate_changed[i].in[202] <== states[i+1][203];\n\t\tstate_changed[i].in[203] <== states[i+1][204];\n\t\tstate_changed[i].in[204] <== states[i+1][205];\n\t\tstate_changed[i].in[205] <== states[i+1][206];\n\t\tstate_changed[i].in[206] <== states[i+1][207];\n\t\tstate_changed[i].in[207] <== states[i+1][208];\n\t\tstate_changed[i].in[208] <== states[i+1][209];\n\t\tstate_changed[i].in[209] <== states[i+1][210];\n\t\tstate_changed[i].in[210] <== states[i+1][211];\n\t\tstate_changed[i].in[211] <== states[i+1][212];\n\t\tstate_changed[i].in[212] <== states[i+1][213];\n\t}\n\n\tcomponent is_accepted = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tis_accepted.in[i] <== states[i][206];\n\t}\n\tout <== is_accepted.out;\n\tsignal is_consecutive[msg_bytes+1][3];\n\tis_consecutive[msg_bytes][2] <== 0;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][206] * (1 - is_consecutive[msg_bytes-i][2]) + is_consecutive[msg_bytes-i][2];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t\tis_consecutive[msg_bytes-1-i][2] <== ORAnd()([(1 - from_zero_enabled[msg_bytes-i+1]), states[num_bytes-i][206], is_consecutive[msg_bytes-1-i][1]]);\n\t}\n\t// substrings calculated: [{(77, 78), (77, 79), (77, 80), (77, 81), (77, 82), (77, 83), (77, 84), (77, 85), (78, 85), (79, 78), (80, 78), (81, 78), (82, 80), (83, 80), (84, 80), (85, 78), (85, 79), (85, 80), (85, 81), (85, 82), (85, 83), (85, 84), (85, 85)}, {(136, 137), (136, 138), (136, 139), (136, 140), (136, 141), (136, 142), (136, 143), (136, 144), (137, 144), (138, 137), (139, 137), (140, 137), (141, 139), (142, 139), (143, 139), (144, 137), (144, 138), (144, 139), (144, 140), (144, 141), (144, 142), (144, 143), (144, 144)}]\n\tsignal prev_states0[23][msg_bytes];\n\tsignal is_substr0[msg_bytes];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\t // the 0-th substring transitions: [(77, 78), (77, 79), (77, 80), (77, 81), (77, 82), (77, 83), (77, 84), (77, 85), (78, 85), (79, 78), (80, 78), (81, 78), (82, 80), (83, 80), (84, 80), (85, 78), (85, 79), (85, 80), (85, 81), (85, 82), (85, 83), (85, 84), (85, 85)]\n\t\tprev_states0[0][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[1][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[2][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[3][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[4][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[5][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[6][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[7][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][77];\n\t\tprev_states0[8][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][78];\n\t\tprev_states0[9][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][79];\n\t\tprev_states0[10][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][80];\n\t\tprev_states0[11][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][81];\n\t\tprev_states0[12][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][82];\n\t\tprev_states0[13][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][83];\n\t\tprev_states0[14][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][84];\n\t\tprev_states0[15][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tprev_states0[16][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tprev_states0[17][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tprev_states0[18][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tprev_states0[19][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tprev_states0[20][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tprev_states0[21][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tprev_states0[22][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][85];\n\t\tis_substr0[i] <== MultiOR(23)([prev_states0[0][i] * states[i+2][78], prev_states0[1][i] * states[i+2][79], prev_states0[2][i] * states[i+2][80], prev_states0[3][i] * states[i+2][81], prev_states0[4][i] * states[i+2][82], prev_states0[5][i] * states[i+2][83], prev_states0[6][i] * states[i+2][84], prev_states0[7][i] * states[i+2][85], prev_states0[8][i] * states[i+2][85], prev_states0[9][i] * states[i+2][78], prev_states0[10][i] * states[i+2][78], prev_states0[11][i] * states[i+2][78], prev_states0[12][i] * states[i+2][80], prev_states0[13][i] * states[i+2][80], prev_states0[14][i] * states[i+2][80], prev_states0[15][i] * states[i+2][78], prev_states0[16][i] * states[i+2][79], prev_states0[17][i] * states[i+2][80], prev_states0[18][i] * states[i+2][81], prev_states0[19][i] * states[i+2][82], prev_states0[20][i] * states[i+2][83], prev_states0[21][i] * states[i+2][84], prev_states0[22][i] * states[i+2][85]]);\n\t\tis_reveal0[i] <== MultiAND(3)([out, is_substr0[i], is_consecutive[i][2]]);\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n\tsignal prev_states1[23][msg_bytes];\n\tsignal is_substr1[msg_bytes];\n\tsignal is_reveal1[msg_bytes];\n\tsignal output reveal1[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\t // the 1-th substring transitions: [(136, 137), (136, 138), (136, 139), (136, 140), (136, 141), (136, 142), (136, 143), (136, 144), (137, 144), (138, 137), (139, 137), (140, 137), (141, 139), (142, 139), (143, 139), (144, 137), (144, 138), (144, 139), (144, 140), (144, 141), (144, 142), (144, 143), (144, 144)]\n\t\tprev_states1[0][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[1][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[2][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[3][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[4][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[5][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[6][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[7][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][136];\n\t\tprev_states1[8][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][137];\n\t\tprev_states1[9][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][138];\n\t\tprev_states1[10][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][139];\n\t\tprev_states1[11][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][140];\n\t\tprev_states1[12][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][141];\n\t\tprev_states1[13][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][142];\n\t\tprev_states1[14][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][143];\n\t\tprev_states1[15][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tprev_states1[16][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tprev_states1[17][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tprev_states1[18][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tprev_states1[19][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tprev_states1[20][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tprev_states1[21][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tprev_states1[22][i] <== (1 - from_zero_enabled[i+1]) * states[i+1][144];\n\t\tis_substr1[i] <== MultiOR(23)([prev_states1[0][i] * states[i+2][137], prev_states1[1][i] * states[i+2][138], prev_states1[2][i] * states[i+2][139], prev_states1[3][i] * states[i+2][140], prev_states1[4][i] * states[i+2][141], prev_states1[5][i] * states[i+2][142], prev_states1[6][i] * states[i+2][143], prev_states1[7][i] * states[i+2][144], prev_states1[8][i] * states[i+2][144], prev_states1[9][i] * states[i+2][137], prev_states1[10][i] * states[i+2][137], prev_states1[11][i] * states[i+2][137], prev_states1[12][i] * states[i+2][139], prev_states1[13][i] * states[i+2][139], prev_states1[14][i] * states[i+2][139], prev_states1[15][i] * states[i+2][137], prev_states1[16][i] * states[i+2][138], prev_states1[17][i] * states[i+2][139], prev_states1[18][i] * states[i+2][140], prev_states1[19][i] * states[i+2][141], prev_states1[20][i] * states[i+2][142], prev_states1[21][i] * states[i+2][143], prev_states1[22][i] * states[i+2][144]]);\n\t\tis_reveal1[i] <== MultiAND(3)([out, is_substr1[i], is_consecutive[i][2]]);\n\t\treveal1[i] <== in[i+1] * is_reveal1[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/namecheap/regexes/namecheap_transfer_details.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"The request to push the domain has been fulfilled.\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"Push to Login ID: \"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|.|-|_)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"\\r\\nThese changes apply to the following domain\\\\(s\\\\):\\r\\n\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|.|-|_)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"\\r\\n\\r\\nPlease contact our support team if you have any questions.\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/namecheap/test/mocks/test_namecheap_date.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/namecheap_date.circom\";\n\ncomponent main = NamecheapDateRegex(73);"
  },
  {
    "path": "circuits-circom/circuits/namecheap/test/mocks/test_namecheap_subject.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/namecheap_subject.circom\";\n\ncomponent main = NamecheapSubjectRegex(58);"
  },
  {
    "path": "circuits-circom/circuits/namecheap/test/mocks/test_namecheap_transfer_details.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"../../regexes/namecheap_transfer_details.circom\";\n\ncomponent main = NamecheapTransferDetailsRegex(207);"
  },
  {
    "path": "circuits-circom/circuits/namecheap/test/namecheap_push.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, chunkedBytesToBigInt } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binary-format\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\n// Constants used in the circuit\nconst N = 121;\nconst K = 17;\n\ndescribe(\"Namecheap Push Domain Circuit\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let poseidon;\n    let mimcSponge;\n    let account;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../namecheap_push.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/namecheap_push\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example namecheap_push.eml to run tests \n        // Otherwise, you can download the original eml from any Namecheap push domain email\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct pubkey hash\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"pubkey\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        const packed_from_email = witness.slice(2, 3);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"fromEmailIndex\"]);\n        const regex_start_sub_array = input[\"emailHeader\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 31 and pack\n        let chunkedArrays = chunkArray(from_email_array, 31, 21);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"Should return the correct packed domain name\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed domain name\n        const packed_domain_name = witness.slice(3, 8);\n\n        // Get expected packed domain name\n        const regex_start = Number(input[\"namecheapDomainNameIndex\"]);\n        const regex_start_sub_array = input[\"emailBody\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"13\"); // Look for `\\r` to end the domain name which is 13 in ASCII\n        const domain_name_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 31 and pack\n        let chunkedArrays = chunkArray(domain_name_array, 31, 127);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed domain name is the same\n            assert.equal(expectedValue, packed_domain_name[i], true);\n        });\n    });\n\n\n    it(\"Should return the correct hashed packed buyer id\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed buyer id\n        const buyerIdHash = witness[8];\n\n        // Get expected packed buyer id\n        const regex_start = Number(input[\"namecheapBuyerIdIndex\"]);\n        const regex_start_sub_array = input[\"emailBody\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"13\"); // Look for `\\r` to end the buyer id which is 13 in ASCII\n        const buyer_id_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 31 and pack\n        let chunkedArray = chunkArray(buyer_id_array, 31, 31);\n\n        // Poseidon hash the chunkedArray\n        const expectedHashedBuyerId = poseidon(chunkedArray.map(arr => bytesToPacked(arr)));\n\n        // Compare the hashed buyer id with the buyerIdHash from the witness\n        assert.equal(JSON.stringify(poseidon.F.e(buyerIdHash)), JSON.stringify(expectedHashedBuyerId), true);\n    });\n\n    it(\"Should return the correct nullifier\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned nullifier\n        const nullifier = witness[9];\n\n        // Calculate expected output\n        const bigIntSignature = chunkedBytesToBigInt(input[\"signature\"], 121);\n        const signatureChunked = bigIntToChunkedBytes(bigIntSignature, 242, 9);\n\n        // Calculate expected nullifier\n        const signatureHash = poseidon(signatureChunked);\n        const expected_nullifier = poseidon([signatureHash]);\n\n        assert.equal(JSON.stringify(poseidon.F.e(nullifier)), JSON.stringify(expected_nullifier), true);\n    });\n\n\n    it(\"Should return the correct bid id\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus\n        const bid_id = witness[10];\n\n        // Get expected modulus\n        const expected_bid_id = input[\"bidId\"];\n\n        assert.equal(JSON.stringify(bid_id), JSON.stringify(expected_bid_id), true);\n    });\n\n    it(\"Should not generate witnesses when fromEmailIndex is invalid\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        input[\"fromEmailIndex\"] = 100000;\n        try {\n            await cir.calculateWitness(input, true);\n            assert.fail('Expected calculateWitness to throw an error');\n        } catch (error) {\n            assert.instanceOf(error, Error);\n            assert.equal(\n                error.message,\n                'Error: Assert Failed.\\nError in template Num2Bits_1 line: 38\\nError in template LessThan_252 line: 96\\nError in template NamecheapPushDomainVerifier_337 line: 101\\n');\n        }\n    });\n\n    it(\"Should not generate witnesses when namecheapBuyerIdIndex is invalid\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        input[\"namecheapBuyerIdIndex\"] = 100000;\n        try {\n            await cir.calculateWitness(input, true);\n            assert.fail('Expected calculateWitness to throw an error');\n        } catch (error) {\n            assert.instanceOf(error, Error);\n            assert.equal(\n                error.message,\n                'Error: Assert Failed.\\nError in template Num2Bits_1 line: 38\\nError in template LessThan_252 line: 96\\nError in template NamecheapPushDomainVerifier_337 line: 101\\nError in template Num2Bits_1 line: 38\\nError in template LessThan_252 line: 96\\nError in template NamecheapPushDomainVerifier_337 line: 110\\n');\n        }\n    });\n\n    it(\"Should not generate witnesses when namecheapDomainNameIndex is invalid\", async () => {\n        const input_path = path.join(__dirname, \"../inputs/input_namecheap_push.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        input[\"namecheapDomainNameIndex\"] = 100000;\n        try {\n            await cir.calculateWitness(input, true);\n            assert.fail('Expected calculateWitness to throw an error');\n        } catch (error) {\n            assert.instanceOf(error, Error);\n            assert.equal(\n                error.message,\n                'Error: Assert Failed.\\nError in template Num2Bits_1 line: 38\\nError in template LessThan_252 line: 96\\nError in template NamecheapPushDomainVerifier_337 line: 101\\nError in template Num2Bits_1 line: 38\\nError in template LessThan_252 line: 96\\nError in template NamecheapPushDomainVerifier_337 line: 110\\nError in template Num2Bits_1 line: 38\\nError in template LessThan_252 line: 96\\nError in template NamecheapPushDomainVerifier_337 line: 119\\n');\n        }\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/namecheap/test/regexes/namecheap_subject.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Namecheap Subject\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_namecheap_subject.circom\"),\n            {\n                include: path.join(__dirname, \"../../../namecheap/node_modules\"),\n                output: path.join(__dirname, \"../../../namecheap/build/test_namecheap_subject\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nsubject:PUSH DOMAIN CONFIRMATION EMAIL - Namecheap.com\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nsubject:PUSH DOMAIN CONFIRMATION EMAIL - Namecheap.com\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nSubject:PUSH DOMAIN CONFIRMATION EMAIL - Namecheap.com\\r\\n\")   // subject is upercase\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/namecheap/test/regexes/namecheap_transfer_details.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Namecheap Transfer Details\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_namecheap_transfer_details.circom\"),\n            {\n                include: path.join(__dirname, \"../../../namecheap/node_modules\"),\n                output: path.join(__dirname, \"../../../namecheap/build/test_namecheap_transfer_details\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"The request to push the domain has been fulfilled.\\r\\n\" +\n                \"Push to Login ID: richard2015\" +\n                \"\\r\\nThese changes apply to the following domain(s):\\r\\n\" +\n                \"0xsachink.xyz\\r\\n\\r\\nPlease contact our support team if you have any questions.\"\n            )\n\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"The request to push the domain has been fulfilled.\\r\\n\" +\n                \"Push to Login ID: richard2015\" +\n                \"\\r\\nThese changes apply to the following domain(s):\\r\\n\" +\n                \"0xsachink.xyz\\r\\n\\r\\nPlease contact our support team if you have any questions.\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal first regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"The request to push the domain has been fulfilled.\\r\\n\" +\n                \"Push to Login ID: richard2015\" +\n                \"\\r\\nThese changes apply to the following domain(s):\\r\\n\" +\n                \"0xsachink.xyz\\r\\n\\r\\nPlease contact our support team if you have any questions.\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"The request to push the domain has been fulfilled.\\r\\nPush to Login ID: \").length).fill(\"0\")\n            .concat(textToAsciiArray(\"richard2015\"))\n            .concat(Array(textToAsciiArray(\"\\r\\nThese changes apply to the following domain(s):\\r\\n0xsachink.xyz\\r\\n\\r\\nPlease contact our support team if you have any questions.\").length).fill(\"0\"))\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should reveal second regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"The request to push the domain has been fulfilled.\\r\\n\" +\n                \"Push to Login ID: richard2015\" +\n                \"\\r\\nThese changes apply to the following domain(s):\\r\\n\" +\n                \"0xsachink.xyz\\r\\n\\r\\nPlease contact our support team if you have any questions.\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"The request to push the domain has been fulfilled.\\r\\nPush to Login ID: richard2015\\r\\nThese changes apply to the following domain(s):\\r\\n\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"0xsachink.xyz\"))\n            .concat(Array(textToAsciiArray(\"\\r\\n\\r\\nPlease contact our support team if you have any questions.\").length).fill(\"0\"))\n        const result = witness.slice(input.msg.length + 2, input.msg.length * 2 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"The request to pull the domain has been fulfilled.\\r\\n\" +          // pull instead of push\n                \"Push to Login ID: richard2015\" +\n                \"\\r\\nThese changes apply to the following domain(s):\\r\\n\" +\n                \"0xsachink.xyz\\r\\n\\r\\nPlease contact our support team if you have any questions.\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/namecheap/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\",  \"test/regexes/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyABKAJcQYUPNgIYIAEoAlRB0f4ANgIEDAQLDAILIAEoAgxBwABxRQRAIAEgASgCJCABLwESIAEoAixBASABKAIMdEEBa3FqQQJ0aigBADYBEAwBCwsgASgCDEEgcQRAIAEoAlRBv/4ANgIEDAILIAEoAlxB6Q42AhggASgCVEHR/gA2AgQMAQsgASgCUCABKAJMSQR/IAEoAkggASgCQEkFQQALQQFxDQELCyABIAEoAihBA3Y2AgggASABKAJQIAEoAghrNgJQIAEgASgCKCABKAIIQQN0azYCKCABIAEoAixBASABKAIodEEBa3E2AiwgASgCXCABKAJQNgIAIAEoAlwgASgCSDYCDCABKAJcAn8gASgCUCABKAJMSQRAIAEoAkwgASgCUGtBBWoMAQtBBSABKAJQIAEoAkxraws2AgQgASgCXAJ/IAEoAkggASgCQEkEQCABKAJAIAEoAkhrQYECagwBC0GBAiABKAJIIAEoAkBraws2AhAgASgCVCABKAIsNgI8IAEoAlQgASgCKDYCQCAAIAAoAlgoAgw2AkggACAAKAJYKAIQNgJAIAAgACgCWCgCADYCTCAAIAAoAlgoAgQ2AkQgACAAKAJQKAI8NgI8IAAgACgCUCgCQDYCOCAAKAJQKAIEQb/+AEYEQCAAKAJQQX82Asg3CwwNCyAAKAJQQQA2Asg3A0ACQCAAIAAoAlAoAlAgACgCPEEBIAAoAlAoAlh0QQFrcUECdGooAQA2ASAgAC0AISAAKAI4TQ0AIAAoAkRFDQ0gACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLAkAgAC0AIEUNACAALQAgQfABcQ0AIAAgACgBIDYBGANAAkAgACAAKAJQKAJQIAAvARogACgCPEEBIAAtABkgAC0AGGp0QQFrcSAALQAZdmpBAnRqKAEANgEgIAAoAjggAC0AGSAALQAhak8NACAAKAJERQ0OIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjwgAC0AGXY2AjwgACAAKAI4IAAtABlrNgI4IAAoAlAiASAALQAZIAEoAsg3ajYCyDcLIAAgACgCPCAALQAhdjYCPCAAIAAoAjggAC0AIWs2AjggACgCUCIBIAAtACEgASgCyDdqNgLINyAAKAJQIAAvASI2AkQgAC0AIEUEQCAAKAJQQc3+ADYCBAwNCyAALQAgQSBxBEAgACgCUEF/NgLINyAAKAJQQb/+ADYCBAwNCyAALQAgQcAAcQRAIAAoAlhB6Q42AhggACgCUEHR/gA2AgQMDQsgACgCUCAALQAgQQ9xNgJMIAAoAlBByf4ANgIECyAAKAJQKAJMBEADQCAAKAI4IAAoAlAoAkxJBEAgACgCREUNDSAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCUCIBIAEoAkQgACgCPEEBIAAoAlAoAkx0QQFrcWo2AkQgACAAKAI8IAAoAlAoAkx2NgI8IAAgACgCOCAAKAJQKAJMazYCOCAAKAJQIgEgACgCUCgCTCABKALIN2o2Asg3CyAAKAJQIAAoAlAoAkQ2Asw3IAAoAlBByv4ANgIECwNAAkAgACAAKAJQKAJUIAAoAjxBASAAKAJQKAJcdEEBa3FBAnRqKAEANgEgIAAtACEgACgCOE0NACAAKAJERQ0LIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAALQAgQfABcUUEQCAAIAAoASA2ARgDQAJAIAAgACgCUCgCVCAALwEaIAAoAjxBASAALQAZIAAtABhqdEEBa3EgAC0AGXZqQQJ0aigBADYBICAAKAI4IAAtABkgAC0AIWpPDQAgACgCREUNDCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACAAKAI8IAAtABl2NgI8IAAgACgCOCAALQAZazYCOCAAKAJQIgEgAC0AGSABKALIN2o2Asg3CyAAIAAoAjwgAC0AIXY2AjwgACAAKAI4IAAtACFrNgI4IAAoAlAiASAALQAhIAEoAsg3ajYCyDcgAC0AIEHAAHEEQCAAKAJYQYUPNgIYIAAoAlBB0f4ANgIEDAsLIAAoAlAgAC8BIjYCSCAAKAJQIAAtACBBD3E2AkwgACgCUEHL/gA2AgQLIAAoAlAoAkwEQANAIAAoAjggACgCUCgCTEkEQCAAKAJERQ0LIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAKAJQIgEgASgCSCAAKAI8QQEgACgCUCgCTHRBAWtxajYCSCAAIAAoAjwgACgCUCgCTHY2AjwgACAAKAI4IAAoAlAoAkxrNgI4IAAoAlAiASAAKAJQKAJMIAEoAsg3ajYCyDcLIAAoAlBBzP4ANgIECyAAKAJARQ0HIAAgACgCMCAAKAJAazYCLAJAIAAoAlAoAkggACgCLEsEQCAAIAAoAlAoAkggACgCLGs2AiwgACgCLCAAKAJQKAIwSwRAIAAoAlAoAsQ3BEAgACgCWEHdDDYCGCAAKAJQQdH+ADYCBAwMCwsCQCAAKAIsIAAoAlAoAjRLBEAgACAAKAIsIAAoAlAoAjRrNgIsIAAgACgCUCgCOCAAKAJQKAIsIAAoAixrajYCKAwBCyAAIAAoAlAoAjggACgCUCgCNCAAKAIsa2o2AigLIAAoAiwgACgCUCgCREsEQCAAIAAoAlAoAkQ2AiwLDAELIAAgACgCSCAAKAJQKAJIazYCKCAAIAAoAlAoAkQ2AiwLIAAoAiwgACgCQEsEQCAAIAAoAkA2AiwLIAAgACgCQCAAKAIsazYCQCAAKAJQIgEgASgCRCAAKAIsazYCRANAIAAgACgCKCIBQQFqNgIoIAEtAAAhASAAIAAoAkgiAkEBajYCSCACIAE6AAAgACAAKAIsQQFrIgE2AiwgAQ0ACyAAKAJQKAJERQRAIAAoAlBByP4ANgIECwwICyAAKAJARQ0GIAAoAlAoAkQhASAAIAAoAkgiAkEBajYCSCACIAE6AAAgACAAKAJAQQFrNgJAIAAoAlBByP4ANgIEDAcLIAAoAlAoAgwEQANAIAAoAjhBIEkEQCAAKAJERQ0IIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjAgACgCQGs2AjAgACgCWCIBIAAoAjAgASgCFGo2AhQgACgCUCIBIAAoAjAgASgCIGo2AiACQCAAKAJQKAIMQQRxRQ0AIAAoAjBFDQACfyAAKAJQKAIUBEAgACgCUCgCHCAAKAJIIAAoAjBrIAAoAjAQGgwBCyAAKAJQKAIcIAAoAkggACgCMGsgACgCMBA9CyEBIAAoAlAgATYCHCAAKAJYIAE2AjALIAAgACgCQDYCMAJAIAAoAlAoAgxBBHFFDQACfyAAKAJQKAIUBEAgACgCPAwBCyAAKAI8QQh2QYD+A3EgACgCPEEYdmogACgCPEGA/gNxQQh0aiAAKAI8Qf8BcUEYdGoLIAAoAlAoAhxGDQAgACgCWEHIDDYCGCAAKAJQQdH+ADYCBAwICyAAQQA2AjwgAEEANgI4CyAAKAJQQc/+ADYCBAsCQCAAKAJQKAIMRQ0AIAAoAlAoAhRFDQADQCAAKAI4QSBJBEAgACgCREUNByAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCPCAAKAJQKAIgRwRAIAAoAlhBsQw2AhggACgCUEHR/gA2AgQMBwsgAEEANgI8IABBADYCOAsgACgCUEHQ/gA2AgQLIABBATYCEAwDCyAAQX02AhAMAgsgAEF8NgJcDAMLIABBfjYCXAwCCwsgACgCWCAAKAJINgIMIAAoAlggACgCQDYCECAAKAJYIAAoAkw2AgAgACgCWCAAKAJENgIEIAAoAlAgACgCPDYCPCAAKAJQIAAoAjg2AkACQAJAIAAoAlAoAiwNACAAKAIwIAAoAlgoAhBGDQEgACgCUCgCBEHR/gBPDQEgACgCUCgCBEHO/gBJDQAgACgCVEEERg0BCwJ/IAAoAlghAiAAKAJYKAIMIQMgACgCMCAAKAJYKAIQayEEIwBBIGsiASQAIAEgAjYCGCABIAM2AhQgASAENgIQIAEgASgCGCgCHDYCDAJAIAEoAgwoAjhFBEAgASgCGCgCKEEBIAEoAgwoAih0QQEgASgCGCgCIBEBACECIAEoAgwgAjYCOCABKAIMKAI4RQRAIAFBATYCHAwCCwsgASgCDCgCLEUEQCABKAIMQQEgASgCDCgCKHQ2AiwgASgCDEEANgI0IAEoAgxBADYCMAsCQCABKAIQIAEoAgwoAixPBEAgASgCDCgCOCABKAIUIAEoAgwoAixrIAEoAgwoAiwQGRogASgCDEEANgI0IAEoAgwgASgCDCgCLDYCMAwBCyABIAEoAgwoAiwgASgCDCgCNGs2AgggASgCCCABKAIQSwRAIAEgASgCEDYCCAsgASgCDCgCOCABKAIMKAI0aiABKAIUIAEoAhBrIAEoAggQGRogASABKAIQIAEoAghrNgIQAkAgASgCEARAIAEoAgwoAjggASgCFCABKAIQayABKAIQEBkaIAEoAgwgASgCEDYCNCABKAIMIAEoAgwoAiw2AjAMAQsgASgCDCICIAEoAgggAigCNGo2AjQgASgCDCgCNCABKAIMKAIsRgRAIAEoAgxBADYCNAsgASgCDCgCMCABKAIMKAIsSQRAIAEoAgwiAiABKAIIIAIoAjBqNgIwCwsLIAFBADYCHAsgASgCHCECIAFBIGokACACCwRAIAAoAlBB0v4ANgIEIABBfDYCXAwCCwsgACAAKAI0IAAoAlgoAgRrNgI0IAAgACgCMCAAKAJYKAIQazYCMCAAKAJYIgEgACgCNCABKAIIajYCCCAAKAJYIgEgACgCMCABKAIUajYCFCAAKAJQIgEgACgCMCABKAIgajYCIAJAIAAoAlAoAgxBBHFFDQAgACgCMEUNAAJ/IAAoAlAoAhQEQCAAKAJQKAIcIAAoAlgoAgwgACgCMGsgACgCMBAaDAELIAAoAlAoAhwgACgCWCgCDCAAKAIwayAAKAIwED0LIQEgACgCUCABNgIcIAAoAlggATYCMAsgACgCWCAAKAJQKAJAQcAAQQAgACgCUCgCCBtqQYABQQAgACgCUCgCBEG//gBGG2pBgAJBACAAKAJQKAIEQcf+AEcEfyAAKAJQKAIEQcL+AEYFQQELQQFxG2o2AiwCQAJAIAAoAjRFBEAgACgCMEUNAQsgACgCVEEERw0BCyAAKAIQDQAgAEF7NgIQCyAAIAAoAhA2AlwLIAAoAlwhASAAQeAAaiQAIAUgATYCCAsgBSgCECIAIAApAwAgBSgCDDUCIH03AwACQAJAAkACQAJAIAUoAghBBWoOBwIDAwMDAAEDCyAFQQA2AhwMAwsgBUEBNgIcDAILIAUoAgwoAhRFBEAgBUEDNgIcDAILCyAFKAIMKAIAQQ0gBSgCCBAUIAVBAjYCHAsgBSgCHCEAIAVBIGokACAACyQBAX8jAEEQayIBIAA2AgwgASABKAIMNgIIIAEoAghBAToADAuXAQEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjcDCCADIAMoAhg2AgQCQAJAIAMpAwhC/////w9YBEAgAygCBCgCFEUNAQsgAygCBCgCAEESQQAQFCADQQA6AB8MAQsgAygCBCADKQMIPgIUIAMoAgQgAygCFDYCECADQQE6AB8LIAMtAB9BAXEhACADQSBqJAAgAAukAgECfyMAQRBrIgEkACABIAA2AgggASABKAIINgIEAkAgASgCBC0ABEEBcQRAIAEgASgCBEEQahC4ATYCAAwBCyABKAIEQRBqIQIjAEEQayIAJAAgACACNgIIAkAgACgCCBBKBEAgAEF+NgIMDAELIAAgACgCCCgCHDYCBCAAKAIEKAI4BEAgACgCCCgCKCAAKAIEKAI4IAAoAggoAiQRBAALIAAoAggoAiggACgCCCgCHCAAKAIIKAIkEQQAIAAoAghBADYCHCAAQQA2AgwLIAAoAgwhAiAAQRBqJAAgASACNgIACwJAIAEoAgAEQCABKAIEKAIAQQ0gASgCABAUIAFBADoADwwBCyABQQE6AA8LIAEtAA9BAXEhACABQRBqJAAgAAuyGAEFfyMAQRBrIgQkACAEIAA2AgggBCAEKAIINgIEIAQoAgRBADYCFCAEKAIEQQA2AhAgBCgCBEEANgIgIAQoAgRBADYCHAJAIAQoAgQtAARBAXEEQCAEKAIEQRBqIQEgBCgCBCgCCCECIwBBMGsiACQAIAAgATYCKCAAIAI2AiQgAEEINgIgIABBcTYCHCAAQQk2AhggAEEANgIUIABBwBI2AhAgAEE4NgIMIABBATYCBAJAAkACQCAAKAIQRQ0AIAAoAhAsAABB+O4ALAAARw0AIAAoAgxBOEYNAQsgAEF6NgIsDAELIAAoAihFBEAgAEF+NgIsDAELIAAoAihBADYCGCAAKAIoKAIgRQRAIAAoAihBBTYCICAAKAIoQQA2AigLIAAoAigoAiRFBEAgACgCKEEGNgIkCyAAKAIkQX9GBEAgAEEGNgIkCwJAIAAoAhxBAEgEQCAAQQA2AgQgAEEAIAAoAhxrNgIcDAELIAAoAhxBD0oEQCAAQQI2AgQgACAAKAIcQRBrNgIcCwsCQAJAIAAoAhhBAUgNACAAKAIYQQlKDQAgACgCIEEIRw0AIAAoAhxBCEgNACAAKAIcQQ9KDQAgACgCJEEASA0AIAAoAiRBCUoNACAAKAIUQQBIDQAgACgCFEEESg0AIAAoAhxBCEcNASAAKAIEQQFGDQELIABBfjYCLAwBCyAAKAIcQQhGBEAgAEEJNgIcCyAAIAAoAigoAihBAUHELSAAKAIoKAIgEQEANgIIIAAoAghFBEAgAEF8NgIsDAELIAAoAiggACgCCDYCHCAAKAIIIAAoAig2AgAgACgCCEEqNgIEIAAoAgggACgCBDYCGCAAKAIIQQA2AhwgACgCCCAAKAIcNgIwIAAoAghBASAAKAIIKAIwdDYCLCAAKAIIIAAoAggoAixBAWs2AjQgACgCCCAAKAIYQQdqNgJQIAAoAghBASAAKAIIKAJQdDYCTCAAKAIIIAAoAggoAkxBAWs2AlQgACgCCCAAKAIIKAJQQQJqQQNuNgJYIAAoAigoAiggACgCCCgCLEECIAAoAigoAiARAQAhASAAKAIIIAE2AjggACgCKCgCKCAAKAIIKAIsQQIgACgCKCgCIBEBACEBIAAoAgggATYCQCAAKAIoKAIoIAAoAggoAkxBAiAAKAIoKAIgEQEAIQEgACgCCCABNgJEIAAoAghBADYCwC0gACgCCEEBIAAoAhhBBmp0NgKcLSAAIAAoAigoAiggACgCCCgCnC1BBCAAKAIoKAIgEQEANgIAIAAoAgggACgCADYCCCAAKAIIIAAoAggoApwtQQJ0NgIMAkACQCAAKAIIKAI4RQ0AIAAoAggoAkBFDQAgACgCCCgCREUNACAAKAIIKAIIDQELIAAoAghBmgU2AgQgACgCKEG42QAoAgA2AhggACgCKBC4ARogAEF8NgIsDAELIAAoAgggACgCACAAKAIIKAKcLUEBdkEBdGo2AqQtIAAoAgggACgCCCgCCCAAKAIIKAKcLUEDbGo2ApgtIAAoAgggACgCJDYChAEgACgCCCAAKAIUNgKIASAAKAIIIAAoAiA6ACQgACgCKCEBIwBBEGsiAyQAIAMgATYCDCADKAIMIQIjAEEQayIBJAAgASACNgIIAkAgASgCCBB4BEAgAUF+NgIMDAELIAEoAghBADYCFCABKAIIQQA2AgggASgCCEEANgIYIAEoAghBAjYCLCABIAEoAggoAhw2AgQgASgCBEEANgIUIAEoAgQgASgCBCgCCDYCECABKAIEKAIYQQBIBEAgASgCBEEAIAEoAgQoAhhrNgIYCyABKAIEIAEoAgQoAhhBAkYEf0E5BUEqQfEAIAEoAgQoAhgbCzYCBAJ/IAEoAgQoAhhBAkYEQEEAQQBBABAaDAELQQBBAEEAED0LIQIgASgCCCACNgIwIAEoAgRBADYCKCABKAIEIQUjAEEQayICJAAgAiAFNgIMIAIoAgwgAigCDEGUAWo2ApgWIAIoAgxB0N8ANgKgFiACKAIMIAIoAgxBiBNqNgKkFiACKAIMQeTfADYCrBYgAigCDCACKAIMQfwUajYCsBYgAigCDEH43wA2ArgWIAIoAgxBADsBuC0gAigCDEEANgK8LSACKAIMEL4BIAJBEGokACABQQA2AgwLIAEoAgwhAiABQRBqJAAgAyACNgIIIAMoAghFBEAgAygCDCgCHCECIwBBEGsiASQAIAEgAjYCDCABKAIMIAEoAgwoAixBAXQ2AjwgASgCDCgCRCABKAIMKAJMQQFrQQF0akEAOwEAIAEoAgwoAkRBACABKAIMKAJMQQFrQQF0EDMgASgCDCABKAIMKAKEAUEMbEGA7wBqLwECNgKAASABKAIMIAEoAgwoAoQBQQxsQYDvAGovAQA2AowBIAEoAgwgASgCDCgChAFBDGxBgO8Aai8BBDYCkAEgASgCDCABKAIMKAKEAUEMbEGA7wBqLwEGNgJ8IAEoAgxBADYCbCABKAIMQQA2AlwgASgCDEEANgJ0IAEoAgxBADYCtC0gASgCDEECNgJ4IAEoAgxBAjYCYCABKAIMQQA2AmggASgCDEEANgJIIAFBEGokAAsgAygCCCEBIANBEGokACAAIAE2AiwLIAAoAiwhASAAQTBqJAAgBCABNgIADAELIAQoAgRBEGohASMAQSBrIgAkACAAIAE2AhggAEFxNgIUIABBwBI2AhAgAEE4NgIMAkACQAJAIAAoAhBFDQAgACgCECwAAEHAEiwAAEcNACAAKAIMQThGDQELIABBejYCHAwBCyAAKAIYRQRAIABBfjYCHAwBCyAAKAIYQQA2AhggACgCGCgCIEUEQCAAKAIYQQU2AiAgACgCGEEANgIoCyAAKAIYKAIkRQRAIAAoAhhBBjYCJAsgACAAKAIYKAIoQQFB0DcgACgCGCgCIBEBADYCBCAAKAIERQRAIABBfDYCHAwBCyAAKAIYIAAoAgQ2AhwgACgCBCAAKAIYNgIAIAAoAgRBADYCOCAAKAIEQbT+ADYCBCAAKAIYIQIgACgCFCEDIwBBIGsiASQAIAEgAjYCGCABIAM2AhQCQCABKAIYEEoEQCABQX42AhwMAQsgASABKAIYKAIcNgIMAkAgASgCFEEASARAIAFBADYCECABQQAgASgCFGs2AhQMAQsgASABKAIUQQR1QQVqNgIQIAEoAhRBMEgEQCABIAEoAhRBD3E2AhQLCwJAIAEoAhRFDQAgASgCFEEITgRAIAEoAhRBD0wNAQsgAUF+NgIcDAELAkAgASgCDCgCOEUNACABKAIMKAIoIAEoAhRGDQAgASgCGCgCKCABKAIMKAI4IAEoAhgoAiQRBAAgASgCDEEANgI4CyABKAIMIAEoAhA2AgwgASgCDCABKAIUNgIoIAEoAhghAiMAQRBrIgMkACADIAI2AggCQCADKAIIEEoEQCADQX42AgwMAQsgAyADKAIIKAIcNgIEIAMoAgRBADYCLCADKAIEQQA2AjAgAygCBEEANgI0IAMoAgghBSMAQRBrIgIkACACIAU2AggCQCACKAIIEEoEQCACQX42AgwMAQsgAiACKAIIKAIcNgIEIAIoAgRBADYCICACKAIIQQA2AhQgAigCCEEANgIIIAIoAghBADYCGCACKAIEKAIMBEAgAigCCCACKAIEKAIMQQFxNgIwCyACKAIEQbT+ADYCBCACKAIEQQA2AgggAigCBEEANgIQIAIoAgRBgIACNgIYIAIoAgRBADYCJCACKAIEQQA2AjwgAigCBEEANgJAIAIoAgQgAigCBEG0CmoiBTYCcCACKAIEIAU2AlQgAigCBCAFNgJQIAIoAgRBATYCxDcgAigCBEF/NgLINyACQQA2AgwLIAIoAgwhBSACQRBqJAAgAyAFNgIMCyADKAIMIQIgA0EQaiQAIAEgAjYCHAsgASgCHCECIAFBIGokACAAIAI2AgggACgCCARAIAAoAhgoAiggACgCBCAAKAIYKAIkEQQAIAAoAhhBADYCHAsgACAAKAIINgIcCyAAKAIcIQEgAEEgaiQAIAQgATYCAAsCQCAEKAIABEAgBCgCBCgCAEENIAQoAgAQFCAEQQA6AA8MAQsgBEEBOgAPCyAELQAPQQFxIQAgBEEQaiQAIAALbwEBfyMAQRBrIgEgADYCCCABIAEoAgg2AgQCQCABKAIELQAEQQFxRQRAIAFBADYCDAwBCyABKAIEKAIIQQNIBEAgAUECNgIMDAELIAEoAgQoAghBB0oEQCABQQE2AgwMAQsgAUEANgIMCyABKAIMCywBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDDYCCCABKAIIEBUgAUEQaiQACzwBAX8jAEEQayIDJAAgAyAAOwEOIAMgATYCCCADIAI2AgRBASADKAIIIAMoAgQQtAEhACADQRBqJAAgAAvBEAECfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkADQAJAIAIoAhgoAnRBhgJJBEAgAigCGBBcAkAgAigCGCgCdEGGAk8NACACKAIUDQAgAkEANgIcDAQLIAIoAhgoAnRFDQELIAJBADYCECACKAIYKAJ0QQNPBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsgAigCGCACKAIYKAJgNgJ4IAIoAhggAigCGCgCcDYCZCACKAIYQQI2AmACQCACKAIQRQ0AIAIoAhgoAnggAigCGCgCgAFPDQAgAigCGCgCLEGGAmsgAigCGCgCbCACKAIQa0kNACACKAIYIAIoAhAQtgEhACACKAIYIAA2AmACQCACKAIYKAJgQQVLDQAgAigCGCgCiAFBAUcEQCACKAIYKAJgQQNHDQEgAigCGCgCbCACKAIYKAJwa0GAIE0NAQsgAigCGEECNgJgCwsCQAJAIAIoAhgoAnhBA0kNACACKAIYKAJgIAIoAhgoAnhLDQAgAiACKAIYIgAoAmwgACgCdGpBA2s2AgggAiACKAIYKAJ4QQNrOgAHIAIgAigCGCIAKAJsIAAoAmRBf3NqOwEEIAIoAhgiACgCpC0gACgCoC1BAXRqIAIvAQQ7AQAgAi0AByEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACIAIvAQRBAWs7AQQgAigCGCACLQAHQdDdAGotAABBAnRqQZgJaiIAIAAvAQBBAWo7AQAgAigCGEGIE2oCfyACLwEEQYACSQRAIAIvAQQtANBZDAELIAIvAQRBB3ZBgAJqLQDQWQtBAnRqIgAgAC8BAEEBajsBACACIAIoAhgoAqAtIAIoAhgoApwtQQFrRjYCDCACKAIYIgAgACgCdCACKAIYKAJ4QQFrazYCdCACKAIYIgAgACgCeEECazYCeANAIAIoAhgiASgCbEEBaiEAIAEgADYCbCAAIAIoAghNBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsgAigCGCIBKAJ4QQFrIQAgASAANgJ4IAANAAsgAigCGEEANgJoIAIoAhhBAjYCYCACKAIYIgAgACgCbEEBajYCbCACKAIMBEAgAigCGAJ/IAIoAhgoAlxBAE4EQCACKAIYKAI4IAIoAhgoAlxqDAELQQALIAIoAhgoAmwgAigCGCgCXGtBABAoIAIoAhggAigCGCgCbDYCXCACKAIYKAIAEBwgAigCGCgCACgCEEUEQCACQQA2AhwMBgsLDAELAkAgAigCGCgCaARAIAIgAigCGCIAKAI4IAAoAmxqQQFrLQAAOgADIAIoAhgiACgCpC0gACgCoC1BAXRqQQA7AQAgAi0AAyEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACKAIYIAItAANBAnRqIgAgAC8BlAFBAWo7AZQBIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAgwEQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EAECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHAsgAigCGCIAIAAoAmxBAWo2AmwgAigCGCIAIAAoAnRBAWs2AnQgAigCGCgCACgCEEUEQCACQQA2AhwMBgsMAQsgAigCGEEBNgJoIAIoAhgiACAAKAJsQQFqNgJsIAIoAhgiACAAKAJ0QQFrNgJ0CwsMAQsLIAIoAhgoAmgEQCACIAIoAhgiACgCOCAAKAJsakEBay0AADoAAiACKAIYIgAoAqQtIAAoAqAtQQF0akEAOwEAIAItAAIhASACKAIYIgAoApgtIQMgACAAKAKgLSIAQQFqNgKgLSAAIANqIAE6AAAgAigCGCACLQACQQJ0aiIAIAAvAZQBQQFqOwGUASACIAIoAhgoAqAtIAIoAhgoApwtQQFrRjYCDCACKAIYQQA2AmgLIAIoAhgCfyACKAIYKAJsQQJJBEAgAigCGCgCbAwBC0ECCzYCtC0gAigCFEEERgRAIAIoAhgCfyACKAIYKAJcQQBOBEAgAigCGCgCOCACKAIYKAJcagwBC0EACyACKAIYKAJsIAIoAhgoAlxrQQEQKCACKAIYIAIoAhgoAmw2AlwgAigCGCgCABAcIAIoAhgoAgAoAhBFBEAgAkECNgIcDAILIAJBAzYCHAwBCyACKAIYKAKgLQRAIAIoAhgCfyACKAIYKAJcQQBOBEAgAigCGCgCOCACKAIYKAJcagwBC0EACyACKAIYKAJsIAIoAhgoAlxrQQAQKCACKAIYIAIoAhgoAmw2AlwgAigCGCgCABAcIAIoAhgoAgAoAhBFBEAgAkEANgIcDAILCyACQQE2AhwLIAIoAhwhACACQSBqJAAgAAuVDQECfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkADQAJAIAIoAhgoAnRBhgJJBEAgAigCGBBcAkAgAigCGCgCdEGGAk8NACACKAIUDQAgAkEANgIcDAQLIAIoAhgoAnRFDQELIAJBADYCECACKAIYKAJ0QQNPBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsCQCACKAIQRQ0AIAIoAhgoAixBhgJrIAIoAhgoAmwgAigCEGtJDQAgAigCGCACKAIQELYBIQAgAigCGCAANgJgCwJAIAIoAhgoAmBBA08EQCACIAIoAhgoAmBBA2s6AAsgAiACKAIYIgAoAmwgACgCcGs7AQggAigCGCIAKAKkLSAAKAKgLUEBdGogAi8BCDsBACACLQALIQEgAigCGCIAKAKYLSEDIAAgACgCoC0iAEEBajYCoC0gACADaiABOgAAIAIgAi8BCEEBazsBCCACKAIYIAItAAtB0N0Aai0AAEECdGpBmAlqIgAgAC8BAEEBajsBACACKAIYQYgTagJ/IAIvAQhBgAJJBEAgAi8BCC0A0FkMAQsgAi8BCEEHdkGAAmotANBZC0ECdGoiACAALwEAQQFqOwEAIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAhgiACAAKAJ0IAIoAhgoAmBrNgJ0AkACQCACKAIYKAJgIAIoAhgoAoABSw0AIAIoAhgoAnRBA0kNACACKAIYIgAgACgCYEEBazYCYANAIAIoAhgiACAAKAJsQQFqNgJsIAIoAhggAigCGCgCVCACKAIYKAI4IAIoAhgoAmxBAmpqLQAAIAIoAhgoAkggAigCGCgCWHRzcTYCSCACKAIYKAJAIAIoAhgoAmwgAigCGCgCNHFBAXRqIAIoAhgoAkQgAigCGCgCSEEBdGovAQAiADsBACACIABB//8DcTYCECACKAIYKAJEIAIoAhgoAkhBAXRqIAIoAhgoAmw7AQAgAigCGCIBKAJgQQFrIQAgASAANgJgIAANAAsgAigCGCIAIAAoAmxBAWo2AmwMAQsgAigCGCIAIAIoAhgoAmAgACgCbGo2AmwgAigCGEEANgJgIAIoAhggAigCGCgCOCACKAIYKAJsai0AADYCSCACKAIYIAIoAhgoAlQgAigCGCgCOCACKAIYKAJsQQFqai0AACACKAIYKAJIIAIoAhgoAlh0c3E2AkgLDAELIAIgAigCGCIAKAI4IAAoAmxqLQAAOgAHIAIoAhgiACgCpC0gACgCoC1BAXRqQQA7AQAgAi0AByEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACKAIYIAItAAdBAnRqIgAgAC8BlAFBAWo7AZQBIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAhgiACAAKAJ0QQFrNgJ0IAIoAhgiACAAKAJsQQFqNgJsCyACKAIMBEAgAigCGAJ/IAIoAhgoAlxBAE4EQCACKAIYKAI4IAIoAhgoAlxqDAELQQALIAIoAhgoAmwgAigCGCgCXGtBABAoIAIoAhggAigCGCgCbDYCXCACKAIYKAIAEBwgAigCGCgCACgCEEUEQCACQQA2AhwMBAsLDAELCyACKAIYAn8gAigCGCgCbEECSQRAIAIoAhgoAmwMAQtBAgs2ArQtIAIoAhRBBEYEQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EBECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHCACKAIYKAIAKAIQRQRAIAJBAjYCHAwCCyACQQM2AhwMAQsgAigCGCgCoC0EQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EAECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHCACKAIYKAIAKAIQRQRAIAJBADYCHAwCCwsgAkEBNgIcCyACKAIcIQAgAkEgaiQAIAALBwAgAC8BMAspAQF/IwBBEGsiAiQAIAIgADYCDCACIAE2AgggAigCCBAVIAJBEGokAAs6AQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgggAygCBGwQGCEAIANBEGokACAAC84FAQF/IwBB0ABrIgUkACAFIAA2AkQgBSABNgJAIAUgAjYCPCAFIAM3AzAgBSAENgIsIAUgBSgCQDYCKAJAAkACQAJAAkACQAJAAkACQCAFKAIsDg8AAQIDBQYHBwcHBwcHBwQHCwJ/IAUoAkQhASAFKAIoIQIjAEHgAGsiACQAIAAgATYCWCAAIAI2AlQgACAAKAJYIABByABqQgwQKyIDNwMIAkAgA0IAUwRAIAAoAlQgACgCWBAXIABBfzYCXAwBCyAAKQMIQgxSBEAgACgCVEERQQAQFCAAQX82AlwMAQsgACgCVCAAQcgAaiAAQcgAakIMQQAQfCAAKAJYIABBEGoQOUEASARAIABBADYCXAwBCyAAKAI4IABBBmogAEEEahCNAQJAIAAtAFMgACgCPEEYdkYNACAALQBTIAAvAQZBCHZGDQAgACgCVEEbQQAQFCAAQX82AlwMAQsgAEEANgJcCyAAKAJcIQEgAEHgAGokACABQQBICwRAIAVCfzcDSAwICyAFQgA3A0gMBwsgBSAFKAJEIAUoAjwgBSkDMBArIgM3AyAgA0IAUwRAIAUoAiggBSgCRBAXIAVCfzcDSAwHCyAFKAJAIAUoAjwgBSgCPCAFKQMgQQAQfCAFIAUpAyA3A0gMBgsgBUIANwNIDAULIAUgBSgCPDYCHCAFKAIcQQA7ATIgBSgCHCIAIAApAwBCgAGENwMAIAUoAhwpAwBCCINCAFIEQCAFKAIcIgAgACkDIEIMfTcDIAsgBUIANwNIDAQLIAVBfzYCFCAFQQU2AhAgBUEENgIMIAVBAzYCCCAFQQI2AgQgBUEBNgIAIAVBACAFEDQ3A0gMAwsgBSAFKAIoIAUoAjwgBSkDMBBDNwNIDAILIAUoAigQvwEgBUIANwNIDAELIAUoAihBEkEAEBQgBUJ/NwNICyAFKQNIIQMgBUHQAGokACADC+4CAQF/IwBBIGsiBSQAIAUgADYCGCAFIAE2AhQgBSACOwESIAUgAzYCDCAFIAQ2AggCQAJAAkAgBSgCCEUNACAFKAIURQ0AIAUvARJBAUYNAQsgBSgCGEEIakESQQAQFCAFQQA2AhwMAQsgBSgCDEEBcQRAIAUoAhhBCGpBGEEAEBQgBUEANgIcDAELIAVBGBAYIgA2AgQgAEUEQCAFKAIYQQhqQQ5BABAUIAVBADYCHAwBCyMAQRBrIgAgBSgCBDYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCAFKAIEQfis0ZEBNgIMIAUoAgRBic+VmgI2AhAgBSgCBEGQ8dmiAzYCFCAFKAIEQQAgBSgCCCAFKAIIEC6tQQEQfCAFIAUoAhggBSgCFEEDIAUoAgQQYSIANgIAIABFBEAgBSgCBBC/ASAFQQA2AhwMAQsgBSAFKAIANgIcCyAFKAIcIQAgBUEgaiQAIAALBwAgACgCIAu9GAECfyMAQfAAayIEJAAgBCAANgJkIAQgATYCYCAEIAI3A1ggBCADNgJUIAQgBCgCZDYCUAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBCgCVA4UBgcCDAQFCg8AAwkRCxAOCBIBEg0SC0EAQgBBACAEKAJQEEwhACAEKAJQIAA2AhQgAEUEQCAEQn83A2gMEwsgBCgCUCgCFEIANwM4IAQoAlAoAhRCADcDQCAEQgA3A2gMEgsgBCgCUCgCECEBIAQpA1ghAiAEKAJQIQMjAEFAaiIAJAAgACABNgI4IAAgAjcDMCAAIAM2AiwCQCAAKQMwUARAIABBAEIAQQEgACgCLBBMNgI8DAELIAApAzAgACgCOCkDMFYEQCAAKAIsQRJBABAUIABBADYCPAwBCyAAKAI4KAIoBEAgACgCLEEdQQAQFCAAQQA2AjwMAQsgACAAKAI4IAApAzAQwAE3AyAgACAAKQMwIAAoAjgoAgQgACkDIKdBA3RqKQMAfTcDGCAAKQMYUARAIAAgACkDIEIBfTcDICAAIAAoAjgoAgAgACkDIKdBBHRqKQMINwMYCyAAIAAoAjgoAgAgACkDIKdBBHRqKQMIIAApAxh9NwMQIAApAxAgACkDMFYEQCAAKAIsQRxBABAUIABBADYCPAwBCyAAIAAoAjgoAgAgACkDIEIBfEEAIAAoAiwQTCIBNgIMIAFFBEAgAEEANgI8DAELIAAoAgwoAgAgACgCDCkDCEIBfadBBHRqIAApAxg3AwggACgCDCgCBCAAKAIMKQMIp0EDdGogACkDMDcDACAAKAIMIAApAzA3AzAgACgCDAJ+IAAoAjgpAxggACgCDCkDCEIBfVQEQCAAKAI4KQMYDAELIAAoAgwpAwhCAX0LNwMYIAAoAjggACgCDDYCKCAAKAIMIAAoAjg2AiggACgCOCAAKAIMKQMINwMgIAAoAgwgACkDIEIBfDcDICAAIAAoAgw2AjwLIAAoAjwhASAAQUBrJAAgASEAIAQoAlAgADYCFCAARQRAIARCfzcDaAwSCyAEKAJQKAIUIAQpA1g3AzggBCgCUCgCFCAEKAJQKAIUKQMINwNAIARCADcDaAwRCyAEQgA3A2gMEAsgBCgCUCgCEBAyIAQoAlAgBCgCUCgCFDYCECAEKAJQQQA2AhQgBEIANwNoDA8LIAQgBCgCUCAEKAJgIAQpA1gQQzcDaAwOCyAEKAJQKAIQEDIgBCgCUCgCFBAyIAQoAlAQFSAEQgA3A2gMDQsgBCgCUCgCEEIANwM4IAQoAlAoAhBCADcDQCAEQgA3A2gMDAsgBCkDWEL///////////8AVgRAIAQoAlBBEkEAEBQgBEJ/NwNoDAwLIAQoAlAoAhAhASAEKAJgIQMgBCkDWCECIwBBQGoiACQAIAAgATYCNCAAIAM2AjAgACACNwMoIAACfiAAKQMoIAAoAjQpAzAgACgCNCkDOH1UBEAgACkDKAwBCyAAKAI0KQMwIAAoAjQpAzh9CzcDKAJAIAApAyhQBEAgAEIANwM4DAELIAApAyhC////////////AFYEQCAAQn83AzgMAQsgACAAKAI0KQNANwMYIAAgACgCNCkDOCAAKAI0KAIEIAApAxinQQN0aikDAH03AxAgAEIANwMgA0AgACkDICAAKQMoVARAIAACfiAAKQMoIAApAyB9IAAoAjQoAgAgACkDGKdBBHRqKQMIIAApAxB9VARAIAApAyggACkDIH0MAQsgACgCNCgCACAAKQMYp0EEdGopAwggACkDEH0LNwMIIAAoAjAgACkDIKdqIAAoAjQoAgAgACkDGKdBBHRqKAIAIAApAxCnaiAAKQMIpxAZGiAAKQMIIAAoAjQoAgAgACkDGKdBBHRqKQMIIAApAxB9UQRAIAAgACkDGEIBfDcDGAsgACAAKQMIIAApAyB8NwMgIABCADcDEAwBCwsgACgCNCIBIAApAyAgASkDOHw3AzggACgCNCAAKQMYNwNAIAAgACkDIDcDOAsgACkDOCECIABBQGskACAEIAI3A2gMCwsgBEEAQgBBACAEKAJQEEw2AkwgBCgCTEUEQCAEQn83A2gMCwsgBCgCUCgCEBAyIAQoAlAgBCgCTDYCECAEQgA3A2gMCgsgBCgCUCgCFBAyIAQoAlBBADYCFCAEQgA3A2gMCQsgBCAEKAJQKAIQIAQoAmAgBCkDWCAEKAJQEMEBrDcDaAwICyAEIAQoAlAoAhQgBCgCYCAEKQNYIAQoAlAQwQGsNwNoDAcLIAQpA1hCOFQEQCAEKAJQQRJBABAUIARCfzcDaAwHCyAEIAQoAmA2AkggBCgCSBA7IAQoAkggBCgCUCgCDDYCKCAEKAJIIAQoAlAoAhApAzA3AxggBCgCSCAEKAJIKQMYNwMgIAQoAkhBADsBMCAEKAJIQQA7ATIgBCgCSELcATcDACAEQjg3A2gMBgsgBCgCUCAEKAJgKAIANgIMIARCADcDaAwFCyAEQX82AkAgBEETNgI8IARBCzYCOCAEQQ02AjQgBEEMNgIwIARBCjYCLCAEQQ82AiggBEEJNgIkIARBETYCICAEQQg2AhwgBEEHNgIYIARBBjYCFCAEQQU2AhAgBEEENgIMIARBAzYCCCAEQQI2AgQgBEEBNgIAIARBACAEEDQ3A2gMBAsgBCgCUCgCECkDOEL///////////8AVgRAIAQoAlBBHkE9EBQgBEJ/NwNoDAQLIAQgBCgCUCgCECkDODcDaAwDCyAEKAJQKAIUKQM4Qv///////////wBWBEAgBCgCUEEeQT0QFCAEQn83A2gMAwsgBCAEKAJQKAIUKQM4NwNoDAILIAQpA1hC////////////AFYEQCAEKAJQQRJBABAUIARCfzcDaAwCCyAEKAJQKAIUIQEgBCgCYCEDIAQpA1ghAiAEKAJQIQUjAEHgAGsiACQAIAAgATYCVCAAIAM2AlAgACACNwNIIAAgBTYCRAJAIAApA0ggACgCVCkDOCAAKQNIfEL//wN8VgRAIAAoAkRBEkEAEBQgAEJ/NwNYDAELIAAgACgCVCgCBCAAKAJUKQMIp0EDdGopAwA3AyAgACkDICAAKAJUKQM4IAApA0h8VARAIAAgACgCVCkDCCAAKQNIIAApAyAgACgCVCkDOH19Qv//A3xCEIh8NwMYIAApAxggACgCVCkDEFYEQCAAIAAoAlQpAxA3AxAgACkDEFAEQCAAQhA3AxALA0AgACkDECAAKQMYVARAIAAgACkDEEIBhjcDEAwBCwsgACgCVCAAKQMQIAAoAkQQwgFBAXFFBEAgACgCREEOQQAQFCAAQn83A1gMAwsLA0AgACgCVCkDCCAAKQMYVARAQYCABBAYIQEgACgCVCgCACAAKAJUKQMIp0EEdGogATYCACABBEAgACgCVCgCACAAKAJUKQMIp0EEdGpCgIAENwMIIAAoAlQiASABKQMIQgF8NwMIIAAgACkDIEKAgAR8NwMgIAAoAlQoAgQgACgCVCkDCKdBA3RqIAApAyA3AwAMAgUgACgCREEOQQAQFCAAQn83A1gMBAsACwsLIAAgACgCVCkDQDcDMCAAIAAoAlQpAzggACgCVCgCBCAAKQMwp0EDdGopAwB9NwMoIABCADcDOANAIAApAzggACkDSFQEQCAAAn4gACkDSCAAKQM4fSAAKAJUKAIAIAApAzCnQQR0aikDCCAAKQMofVQEQCAAKQNIIAApAzh9DAELIAAoAlQoAgAgACkDMKdBBHRqKQMIIAApAyh9CzcDCCAAKAJUKAIAIAApAzCnQQR0aigCACAAKQMop2ogACgCUCAAKQM4p2ogACkDCKcQGRogACkDCCAAKAJUKAIAIAApAzCnQQR0aikDCCAAKQMofVEEQCAAIAApAzBCAXw3AzALIAAgACkDCCAAKQM4fDcDOCAAQgA3AygMAQsLIAAoAlQiASAAKQM4IAEpAzh8NwM4IAAoAlQgACkDMDcDQCAAKAJUKQM4IAAoAlQpAzBWBEAgACgCVCAAKAJUKQM4NwMwCyAAIAApAzg3A1gLIAApA1ghAiAAQeAAaiQAIAQgAjcDaAwBCyAEKAJQQRxBABAUIARCfzcDaAsgBCkDaCECIARB8ABqJAAgAgsHACAAKAIACxgAQaibAUIANwIAQbCbAUEANgIAQaibAQuGAQIEfwF+IwBBEGsiASQAAkAgACkDMFAEQAwBCwNAAkAgACAFQQAgAUEPaiABQQhqEIoBIgRBf0YNACABLQAPQQNHDQAgAiABKAIIQYCAgIB/cUGAgICAekZqIQILQX8hAyAEQX9GDQEgAiEDIAVCAXwiBSAAKQMwVA0ACwsgAUEQaiQAIAMLC4GNASMAQYAIC4EMaW5zdWZmaWNpZW50IG1lbW9yeQBuZWVkIGRpY3Rpb25hcnkALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABaaXAgYXJjaGl2ZSBpbmNvbnNpc3RlbnQASW52YWxpZCBhcmd1bWVudABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQAaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0AHVua25vd24gaGVhZGVyIGZsYWdzIHNldABpbnZhbGlkIGRpc3RhbmNlcyBzZXQAaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdABGaWxlIGFscmVhZHkgZXhpc3RzAHRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzAGludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMAJXMlcyVzAGJ1ZmZlciBlcnJvcgBObyBlcnJvcgBzdHJlYW0gZXJyb3IAVGVsbCBlcnJvcgBJbnRlcm5hbCBlcnJvcgBTZWVrIGVycm9yAFdyaXRlIGVycm9yAGZpbGUgZXJyb3IAUmVhZCBlcnJvcgBabGliIGVycm9yAGRhdGEgZXJyb3IAQ1JDIGVycm9yAGluY29tcGF0aWJsZSB2ZXJzaW9uAG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/contracts/paylah_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n\n    \n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\n    \n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\n    \n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\n    \n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\n    \n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\n    \n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/contracts/paylah_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n\n    \n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\n    \n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\n    \n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\n    \n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\n    \n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\n    \n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\n    \n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\n    \n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\n    \n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\n    \n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\n    \n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\n    \n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/emls/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/paylah/inputs/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/paylah/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-paylah\",\n    \"version\": \"0.0.1\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Paylah circuits for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"main\": \"dist/generate_input.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/circuits\": \"3.2.3\",\n        \"@zk-email/helpers\": \"^3.0.2\",\n        \"@zk-email/zk-regex-circom\": \"1.2.1\",\n        \"buffer\": \"^6.0.3\",\n        \"circomlib\": \"^2.0.5\",\n        \"ethers\": \"^5.5.1\",\n        \"process\": \"^0.11.10\",\n        \"snarkjs\": \"latest\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\",\n        \"gen-input:paylah:send\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/paylah_send.eml --payment_type=paylah --circuit_type=send --output_file=input_paylah_send\",\n        \"gen-input:paylah:registration\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/paylah_send.eml --payment_type=paylah --circuit_type=registration --output_file=input_paylah_registration\",\n        \"compile:paylah:send\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_send && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"compile:paylah:registration\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_registration && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:paylah:send\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_send && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:paylah:registration\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_registration && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"uploadkeys:paylah:send\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_send && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"uploadkeys:paylah:registration\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_registration && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"test:paylah:send\": \"yarn test ./test/paylah_send.spec.ts\",\n        \"test:paylah:registration\": \"yarn test ./test/paylah_registration.spec.ts\",\n        \"genverifier:paylah:send\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_send && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"genverifier:paylah:registration\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_registration && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"gencalldata:paylah:send\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_send && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"gencalldata:paylah:registration\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_registration && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"genwitness:paylah:send\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_send && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genwitness:paylah:registration\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_registration && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genproof:paylah:send\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_send && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n        \"genproof:paylah:registration\": \"CIRCUIT_DIR=paylah CIRCUIT_NAME=paylah_registration && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/paylah_registration.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"@zk-email/circuits/helpers/extract.circom\";\n\ninclude \"../utils/ceil.circom\";\ninclude \"../common-v2/regexes/from_regex_v2.circom\";\ninclude \"../common-v2/regexes/to_regex_v2.circom\";\n\ninclude \"./regexes/paylah_payer_mobile_num.circom\";\ninclude \"./regexes/paylah_subject.circom\";\n\ntemplate PaylahRegistrationEmail(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 2048); // constraints for 2048 bit RSA\n\n    //-------EMAIL VERIFICATION----------//\n\n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Base 64 body hash variables\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n\n    // DKIM VERIFICATION\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n    EV.body_hash_idx <== body_hash_idx;\n    EV.precomputed_sha <== precomputed_sha;\n    EV.in_body_padded <== in_body_padded;\n    EV.in_body_len_padded_bytes <== in_body_len_padded_bytes;\n\n    modulus_hash <== EV.pubkey_hash;\n\n    //-------CONSTANTS----------//\n\n    var max_email_from_len = 20; // Length of paylah.alert@dbs.com\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n\n    var max_email_to_len = 49;  // RFC 2821: requires length to be 254, but 49 is safe max length of email to field (https://atdata.com/long-email-addresses/)\n    var max_email_to_packed_bytes = count_packed(max_email_to_len, pack_size);\n    assert(max_email_to_packed_bytes < max_header_bytes);\n\n    var max_payer_mobile_num_len = 4; // Length of 1234\n    var max_payer_mobile_num_packed_bytes = count_packed(max_payer_mobile_num_len, pack_size);\n    assert(max_payer_mobile_num_packed_bytes < max_body_bytes);\n\n    //-------REGEXES----------//\n\n    // Paylah subject regex\n    signal subject_regex_out <== PaylahSubjectRegex(max_header_bytes)(in_padded);\n    subject_regex_out === 1;\n\n    // From header v2 regex\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegexV2(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n\n    // To regex\n    signal (to_regex_out, to_regex_reveal[max_header_bytes]) <== ToRegexV2(max_header_bytes)(in_padded);\n    to_regex_out === 1;\n\n    // Paylah payer mobile num regex\n    signal (paylah_payer_mobile_num_regex_out, payer_mobile_num_regex_reveal[max_body_bytes]) <== PaylahPayerMobileNumRegex(max_body_bytes)(in_body_padded);\n    paylah_payer_mobile_num_regex_out === 1;\n\n    //-------BUSINESS LOGIC----------//\n\n    // Output packed email from\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_from_len, \n        pack_size\n    )(from_regex_reveal, email_from_idx);\n\n    // Packed to (Not an output. Used used to compute user id)\n    signal input email_to_idx;\n    signal reveal_email_to_packed[max_email_to_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_to_len, \n        pack_size\n    )(to_regex_reveal, email_to_idx);\n    \n    // Packed payer mobile number (Not an output. Used used to compute user id)\n    signal input paylah_payer_mobile_num_idx;\n    signal reveal_payer_mobile_num_packed[max_payer_mobile_num_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payer_mobile_num_len, \n        pack_size\n    )(payer_mobile_num_regex_reveal, paylah_payer_mobile_num_idx);\n\n    //-------ONRAMPER ID----------//\n\n    // Output hashed user id = hash(to_packed + payer_mobile_num_packed)\n    var max_id_bytes = max_email_to_packed_bytes + max_payer_mobile_num_packed_bytes;\n    assert(max_id_bytes < 16);    \n    component hash = Poseidon(max_id_bytes);\n    for (var i = 0; i < max_email_to_packed_bytes; i++) {\n        hash.inputs[i] <== reveal_email_to_packed[i];\n    }\n    for (var i = 0; i < max_payer_mobile_num_packed_bytes; i++) {\n        hash.inputs[i + max_email_to_packed_bytes] <== reveal_payer_mobile_num_packed[i];\n    }\n    signal output registration_id <== hash.out;\n\n    // TOTAL CONSTRAINTS: 3154474\n}\n\n// Args:\n// * max_header_bytes = 1024 is the max number of bytes in the header\n// * max_body_bytes = 2240 is the max number of bytes in the body after precomputed slice\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main = PaylahRegistrationEmail(1024, 2240, 121, 17, 7);\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/paylah_send.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"@zk-email/circuits/helpers/extract.circom\";\n\ninclude \"../utils/ceil.circom\";\ninclude \"../common-v2/regexes/from_regex_v2.circom\";\ninclude \"../common-v2/regexes/to_regex_v2.circom\";\n\ninclude \"./regexes/paylah_payment_details.circom\";\ninclude \"./regexes/paylah_timestamp.circom\";\ninclude \"./regexes/paylah_subject.circom\";\ninclude \"./regexes/paylah_payment_id.circom\";\n\ntemplate PaylahSendEmail(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 2048); // constraints for 2048 bit RSA\n\n    //-------EMAIL VERIFICATION----------//\n\n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Base 64 body hash variables\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n\n    // DKIM VERIFICATION\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n    EV.body_hash_idx <== body_hash_idx;\n    EV.precomputed_sha <== precomputed_sha;\n    EV.in_body_padded <== in_body_padded;\n    EV.in_body_len_padded_bytes <== in_body_len_padded_bytes;\n\n    modulus_hash <== EV.pubkey_hash;\n\n    //-------CONSTANTS----------//\n\n    var max_email_from_len = 20; // Length of paylah.alert@dbs.com\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n\n    var max_email_to_len = 49;  // RFC 2821: requires length to be 254, but 49 is safe max length of email to field (https://atdata.com/long-email-addresses/)\n    var max_email_to_packed_bytes = count_packed(max_email_to_len, pack_size);\n    assert(max_email_to_packed_bytes < max_header_bytes);\n\n    var max_timestamp_len = 10; // 10 digits till year 2286\n    var max_timestamp_packed_bytes = count_packed(max_timestamp_len, pack_size);\n    assert(max_timestamp_packed_bytes < max_header_bytes);\n\n    var max_amount_len = 7; // Max 4 fig amount + one decimal point + 2 decimal places. e.g. 999999.00\n    var max_amount_packed_bytes = count_packed(max_amount_len, pack_size);\n    assert(max_amount_packed_bytes < max_body_bytes);\n\n    var max_payer_mobile_num_len = 4;\n    var max_payer_mobile_num_packed_bytes = count_packed(max_payer_mobile_num_len, pack_size);\n    assert(max_payer_mobile_num_packed_bytes < max_body_bytes);\n\n    var max_payee_name_len = 35; // Max length of payee alias / name\n    var max_payee_name_packed_bytes = count_packed(max_payee_name_len, pack_size);\n    assert(max_payee_name_packed_bytes < max_body_bytes);\n\n    var max_payee_mobile_num_len = 4;\n    var max_payee_mobile_num_packed_bytes = count_packed(max_payee_mobile_num_len, pack_size);\n    assert(max_payee_mobile_num_packed_bytes < max_body_bytes);\n    \n    var max_payment_id_len = 28; // Current transaction reference length 20 + 8 for future proofing\n    var max_payment_id_packed_bytes = count_packed(max_payment_id_len, pack_size);\n    assert(max_payment_id_packed_bytes < max_body_bytes);\n\n    //-------REGEXES----------//\n\n    // Paylah subject regex\n    signal subject_regex_out <== PaylahSubjectRegex(max_header_bytes)(in_padded);\n    subject_regex_out === 1;\n\n    // From regex v2\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegexV2(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n    \n    // To regex\n    signal (to_regex_out, to_regex_reveal[max_header_bytes]) <== ToRegexV2(max_header_bytes)(in_padded);\n    to_regex_out === 1;\n\n    // Paylah timestamp regex\n    signal (timestamp_regex_out, timestamp_regex_reveal[max_header_bytes]) <== PaylahTimestampRegex(max_header_bytes)(in_padded);\n    timestamp_regex_out === 1;\n\n    // Paylah payment details regex\n    signal (\n        paylah_regex_out, \n        amount_regex_reveal[max_body_bytes], \n        payer_mobile_num_regex_reveal[max_body_bytes], \n        payee_name_regex_reveal[max_body_bytes], \n        payee_mobile_num_regex_reveal[max_body_bytes]\n    ) <== PaylahPaymentDetailsRegex(max_body_bytes)(in_body_padded);\n    paylah_regex_out === 1;\n\n    // Paylah payment id regex\n    signal (payment_regex_out, payment_regex_reveal[max_body_bytes]) <== PaylahPaymentIdRegex(max_body_bytes)(in_body_padded);\n    payment_regex_out === 1;\n\n    //-------BUSINESS LOGIC----------//\n\n    // Output packed from\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_from_len, \n        pack_size\n    )(from_regex_reveal, email_from_idx);\n\n    // Packed to (Not an output. Used to compute onramper id)\n    signal input email_to_idx;\n    signal reveal_email_to_packed[max_email_to_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_email_to_len, \n        pack_size\n    )(to_regex_reveal, email_to_idx);\n\n    // Output packed timestamp\n    signal input email_timestamp_idx;\n    signal output reveal_timestamp_packed[max_timestamp_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_header_bytes, \n        max_timestamp_len, \n        pack_size\n    )(timestamp_regex_reveal, email_timestamp_idx);\n    \n    // Output packed amount\n    signal input paylah_amount_idx;\n    signal output reveal_amount_packed[max_amount_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_amount_len, \n        pack_size\n    )(amount_regex_reveal, paylah_amount_idx);\n\n    // Packed payer mobile number (Not an output. Used to compute onramper id)\n    signal input paylah_payer_mobile_num_idx;\n    signal reveal_payer_mobile_num_packed[max_payer_mobile_num_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payer_mobile_num_len, \n        pack_size\n    )(payer_mobile_num_regex_reveal, paylah_payer_mobile_num_idx);\n\n    // Packed payee name (Not an output. Used to compute offramper id)\n    signal input paylah_payee_name_idx;\n    signal reveal_payee_name_packed[max_payee_name_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payee_name_len, \n        pack_size\n    )(payee_name_regex_reveal, paylah_payee_name_idx);\n    \n    // Packed payee mobile number (Not an output. Used to compute offramper id)\n    signal input paylah_payee_mobile_num_idx;\n    signal reveal_payee_mobile_num_packed[max_payee_mobile_num_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payee_mobile_num_len, \n        pack_size\n    )(payee_mobile_num_regex_reveal, paylah_payee_mobile_num_idx);\n\n    // Packed payment id (Not an output. Used to compute payment id nullifier)\n    signal input paylah_payment_id_idx;\n    signal reveal_payment_id_packed[max_payment_id_packed_bytes] <== ShiftAndPackMaskedStr(\n        max_body_bytes, \n        max_payment_id_len, \n        pack_size\n    )(payment_regex_reveal, paylah_payment_id_idx);\n\n    //-------ONRAMPER_ID, OFFRAMPER_ID, NULLIFIER----------//\n\n    // Output hashed onramper id = hash(to_packed + payer_mobile_num_packed)\n    var max_id_bytes = max_email_to_packed_bytes + max_payer_mobile_num_packed_bytes;\n    assert(max_id_bytes < 16);    \n    component hash_onramper_id = Poseidon(max_id_bytes);\n    for (var i = 0; i < max_email_to_packed_bytes; i++) {\n        hash_onramper_id.inputs[i] <== reveal_email_to_packed[i];\n    }\n    for (var i = 0; i < max_payer_mobile_num_packed_bytes; i++) {\n        hash_onramper_id.inputs[i + max_email_to_packed_bytes] <== reveal_payer_mobile_num_packed[i];\n    }\n    signal output onramper_id <== hash_onramper_id.out;\n\n    // Output hashed offramper id = hash(payee_name_packed + payee_mobile_num_packed)\n    assert(max_payee_name_packed_bytes == 5);\n    assert(max_payee_mobile_num_packed_bytes == 1);\n    component hash_offramper_id = Poseidon(6);\n    for (var i = 0; i < 5; i++) {\n        hash_offramper_id.inputs[i] <== reveal_payee_name_packed[i];\n    }\n    hash_offramper_id.inputs[5] <== reveal_payee_mobile_num_packed[0];\n    signal output offramper_id <== hash_offramper_id.out;\n\n    // Output hashed payment id nullifier = hash(payment_id_packed)\n    assert(max_payment_id_packed_bytes == 4);\n    component hash_payment_id = Poseidon(4);\n    for (var i = 0; i < 4; i++) {\n        hash_payment_id.inputs[i] <== reveal_payment_id_packed[i];\n    }\n    signal output payment_id_nullifier <== hash_payment_id.out;\n\n    // The following signals do not take part in any computation, but tie the proof to a specific intent_hash & claim_id to prevent replay attacks and frontrunning.\n    // https://geometry.xyz/notebook/groth16-malleability\n    signal input intent_hash;\n    signal intent_hash_squared;\n    intent_hash_squared <== intent_hash * intent_hash;\n\n    // TOTAL CONSTRAINTS: 4044153  \n}\n\n// Args:\n// * max_header_bytes = 1024 is the max number of bytes in the header\n// * max_body_bytes = 2240 is the max number of bytes in the body after precomputed slice\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main { public [ intent_hash ] } = PaylahSendEmail(1024, 2240, 121, 17, 7);\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_payer_mobile_num.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate PaylahPayerMobileNumRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[39][num_bytes];\n\tcomponent and[58][num_bytes];\n\tcomponent multi_or[2][num_bytes];\n\tsignal states[num_bytes+1][58];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 58; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(57);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 104;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][57];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 33;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 32;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 87;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 97;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[4][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 108;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[5][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[5][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 101;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[6][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 116;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[7][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[2][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 40;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[8][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 77;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[9][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 111;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][12];\n\t\tand[12][i].b <== eq[10][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 98;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[11][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 105;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[12][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[5][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tand[16][i].b <== eq[6][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[2][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[6][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 110;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[13][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 100;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[14][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[12][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][22];\n\t\tand[22][i].b <== eq[13][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 103;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[15][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tand[24][i].b <== eq[2][i].out;\n\t\tstates[i+1][25] <== and[24][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 48;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 49;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 50;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 51;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 52;\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 53;\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 54;\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 55;\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 56;\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 57;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== eq[16][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[17][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[18][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[19][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[20][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[21][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[22][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[23][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[24][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[25][i].out;\n\t\tand[25][i].b <== multi_or[0][i].out;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][26];\n\t\tand[26][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[25][i].out;\n\t\tmulti_or[1][i].in[1] <== and[26][i].out;\n\t\tstates[i+1][26] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 60;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][0];\n\t\tand[27][i].b <== eq[26][i].out;\n\t\tstates[i+1][27] <== and[27][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 41;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][26];\n\t\tand[28][i].b <== eq[27][i].out;\n\t\tstates[i+1][28] <== and[28][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][28];\n\t\tand[29][i].b <== eq[26][i].out;\n\t\tstates[i+1][29] <== and[29][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 47;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][29];\n\t\tand[30][i].b <== eq[28][i].out;\n\t\tstates[i+1][30] <== and[30][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][30];\n\t\tand[31][i].b <== eq[7][i].out;\n\t\tstates[i+1][31] <== and[31][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][31];\n\t\tand[32][i].b <== eq[14][i].out;\n\t\tstates[i+1][32] <== and[32][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 62;\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][32];\n\t\tand[33][i].b <== eq[29][i].out;\n\t\tstates[i+1][33] <== and[33][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][27];\n\t\tand[34][i].b <== eq[7][i].out;\n\t\tstates[i+1][34] <== and[34][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][34];\n\t\tand[35][i].b <== eq[14][i].out;\n\t\tstates[i+1][35] <== and[35][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][35];\n\t\tand[36][i].b <== eq[29][i].out;\n\t\tstates[i+1][36] <== and[36][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 70;\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][36];\n\t\tand[37][i].b <== eq[30][i].out;\n\t\tstates[i+1][37] <== and[37][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 114;\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][37];\n\t\tand[38][i].b <== eq[31][i].out;\n\t\tstates[i+1][38] <== and[38][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][38];\n\t\tand[39][i].b <== eq[10][i].out;\n\t\tstates[i+1][39] <== and[39][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 109;\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][39];\n\t\tand[40][i].b <== eq[32][i].out;\n\t\tstates[i+1][40] <== and[40][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 58;\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][40];\n\t\tand[41][i].b <== eq[33][i].out;\n\t\tstates[i+1][41] <== and[41][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][41];\n\t\tand[42][i].b <== eq[26][i].out;\n\t\tstates[i+1][42] <== and[42][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][42];\n\t\tand[43][i].b <== eq[28][i].out;\n\t\tstates[i+1][43] <== and[43][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][43];\n\t\tand[44][i].b <== eq[7][i].out;\n\t\tstates[i+1][44] <== and[44][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][44];\n\t\tand[45][i].b <== eq[14][i].out;\n\t\tstates[i+1][45] <== and[45][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][45];\n\t\tand[46][i].b <== eq[29][i].out;\n\t\tstates[i+1][46] <== and[46][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 13;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][46];\n\t\tand[47][i].b <== eq[34][i].out;\n\t\tstates[i+1][47] <== and[47][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 10;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][47];\n\t\tand[48][i].b <== eq[35][i].out;\n\t\tstates[i+1][48] <== and[48][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][48];\n\t\tand[49][i].b <== eq[26][i].out;\n\t\tstates[i+1][49] <== and[49][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][49];\n\t\tand[50][i].b <== eq[7][i].out;\n\t\tstates[i+1][50] <== and[50][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][50];\n\t\tand[51][i].b <== eq[14][i].out;\n\t\tstates[i+1][51] <== and[51][i].out;\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][51];\n\t\tand[52][i].b <== eq[29][i].out;\n\t\tstates[i+1][52] <== and[52][i].out;\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 80;\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][52];\n\t\tand[53][i].b <== eq[36][i].out;\n\t\tstates[i+1][53] <== and[53][i].out;\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][53];\n\t\tand[54][i].b <== eq[4][i].out;\n\t\tstates[i+1][54] <== and[54][i].out;\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 121;\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][54];\n\t\tand[55][i].b <== eq[37][i].out;\n\t\tstates[i+1][55] <== and[55][i].out;\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 76;\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][55];\n\t\tand[56][i].b <== eq[38][i].out;\n\t\tstates[i+1][56] <== and[56][i].out;\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][56];\n\t\tand[57][i].b <== eq[4][i].out;\n\t\tstates[i+1][57] <== and[57][i].out;\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][33];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][33] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][25] * states[i+2][26];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][26] * states[i+2][26];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_payer_mobile_num.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>From:</td>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>PayLah! Wallet \\\\(Mobile ending \"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"\\\\)</td>\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_payment_details.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate PaylahPaymentDetailsRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[50][num_bytes];\n\tcomponent lt[4][num_bytes];\n\tcomponent and[170][num_bytes];\n\tcomponent multi_or[9][num_bytes];\n\tsignal states[num_bytes+1][163];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 163; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(162);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 46;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 48;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 49;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 50;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 51;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 52;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 53;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 54;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 55;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 56;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 57;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(11);\n\t\tmulti_or[0][i].in[0] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[10][i].out;\n\t\tand[0][i].b <== multi_or[0][i].out;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][162];\n\t\tand[1][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[0][i].out;\n\t\tmulti_or[1][i].in[1] <== and[1][i].out;\n\t\tstates[i+1][1] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 60;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tand[2][i].b <== eq[11][i].out;\n\t\tstates[i+1][2] <== and[2][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 47;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][2];\n\t\tand[3][i].b <== eq[12][i].out;\n\t\tstates[i+1][3] <== and[3][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 116;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][3];\n\t\tand[4][i].b <== eq[13][i].out;\n\t\tstates[i+1][4] <== and[4][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 100;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][4];\n\t\tand[5][i].b <== eq[14][i].out;\n\t\tstates[i+1][5] <== and[5][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][0];\n\t\tand[6][i].b <== eq[11][i].out;\n\t\tstates[i+1][6] <== and[6][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 62;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][5];\n\t\tand[7][i].b <== eq[15][i].out;\n\t\tstates[i+1][7] <== and[7][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 13;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][7];\n\t\tand[8][i].b <== eq[16][i].out;\n\t\tstates[i+1][8] <== and[8][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 10;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][8];\n\t\tand[9][i].b <== eq[17][i].out;\n\t\tstates[i+1][9] <== and[9][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][9];\n\t\tand[10][i].b <== eq[11][i].out;\n\t\tstates[i+1][10] <== and[10][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][10];\n\t\tand[11][i].b <== eq[12][i].out;\n\t\tstates[i+1][11] <== and[11][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][11];\n\t\tand[12][i].b <== eq[13][i].out;\n\t\tstates[i+1][12] <== and[12][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 114;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][12];\n\t\tand[13][i].b <== eq[18][i].out;\n\t\tstates[i+1][13] <== and[13][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][13];\n\t\tand[14][i].b <== eq[15][i].out;\n\t\tstates[i+1][14] <== and[14][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][14];\n\t\tand[15][i].b <== eq[16][i].out;\n\t\tstates[i+1][15] <== and[15][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][15];\n\t\tand[16][i].b <== eq[17][i].out;\n\t\tstates[i+1][16] <== and[16][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][16];\n\t\tand[17][i].b <== eq[11][i].out;\n\t\tstates[i+1][17] <== and[17][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][17];\n\t\tand[18][i].b <== eq[13][i].out;\n\t\tstates[i+1][18] <== and[18][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][18];\n\t\tand[19][i].b <== eq[18][i].out;\n\t\tstates[i+1][19] <== and[19][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][19];\n\t\tand[20][i].b <== eq[15][i].out;\n\t\tstates[i+1][20] <== and[20][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][20];\n\t\tand[21][i].b <== eq[16][i].out;\n\t\tstates[i+1][21] <== and[21][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][21];\n\t\tand[22][i].b <== eq[17][i].out;\n\t\tstates[i+1][22] <== and[22][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][22];\n\t\tand[23][i].b <== eq[11][i].out;\n\t\tstates[i+1][23] <== and[23][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][23];\n\t\tand[24][i].b <== eq[13][i].out;\n\t\tstates[i+1][24] <== and[24][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][24];\n\t\tand[25][i].b <== eq[14][i].out;\n\t\tstates[i+1][25] <== and[25][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][25];\n\t\tand[26][i].b <== eq[15][i].out;\n\t\tstates[i+1][26] <== and[26][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 70;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][26];\n\t\tand[27][i].b <== eq[19][i].out;\n\t\tstates[i+1][27] <== and[27][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][27];\n\t\tand[28][i].b <== eq[18][i].out;\n\t\tstates[i+1][28] <== and[28][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 111;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][28];\n\t\tand[29][i].b <== eq[20][i].out;\n\t\tstates[i+1][29] <== and[29][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 109;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][29];\n\t\tand[30][i].b <== eq[21][i].out;\n\t\tstates[i+1][30] <== and[30][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 58;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][30];\n\t\tand[31][i].b <== eq[22][i].out;\n\t\tstates[i+1][31] <== and[31][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][31];\n\t\tand[32][i].b <== eq[11][i].out;\n\t\tstates[i+1][32] <== and[32][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][6];\n\t\tand[33][i].b <== eq[13][i].out;\n\t\tstates[i+1][33] <== and[33][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][32];\n\t\tand[34][i].b <== eq[12][i].out;\n\t\tstates[i+1][34] <== and[34][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][34];\n\t\tand[35][i].b <== eq[13][i].out;\n\t\tstates[i+1][35] <== and[35][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][35];\n\t\tand[36][i].b <== eq[14][i].out;\n\t\tstates[i+1][36] <== and[36][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][36];\n\t\tand[37][i].b <== eq[15][i].out;\n\t\tstates[i+1][37] <== and[37][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][37];\n\t\tand[38][i].b <== eq[16][i].out;\n\t\tstates[i+1][38] <== and[38][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][38];\n\t\tand[39][i].b <== eq[17][i].out;\n\t\tstates[i+1][39] <== and[39][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][39];\n\t\tand[40][i].b <== eq[11][i].out;\n\t\tstates[i+1][40] <== and[40][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][40];\n\t\tand[41][i].b <== eq[13][i].out;\n\t\tstates[i+1][41] <== and[41][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][41];\n\t\tand[42][i].b <== eq[14][i].out;\n\t\tstates[i+1][42] <== and[42][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][42];\n\t\tand[43][i].b <== eq[15][i].out;\n\t\tstates[i+1][43] <== and[43][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 80;\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][43];\n\t\tand[44][i].b <== eq[23][i].out;\n\t\tstates[i+1][44] <== and[44][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 97;\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][44];\n\t\tand[45][i].b <== eq[24][i].out;\n\t\tstates[i+1][45] <== and[45][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 121;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][45];\n\t\tand[46][i].b <== eq[25][i].out;\n\t\tstates[i+1][46] <== and[46][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 76;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][46];\n\t\tand[47][i].b <== eq[26][i].out;\n\t\tstates[i+1][47] <== and[47][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][47];\n\t\tand[48][i].b <== eq[24][i].out;\n\t\tstates[i+1][48] <== and[48][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 104;\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][48];\n\t\tand[49][i].b <== eq[27][i].out;\n\t\tstates[i+1][49] <== and[49][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 33;\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][49];\n\t\tand[50][i].b <== eq[28][i].out;\n\t\tstates[i+1][50] <== and[50][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 32;\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][50];\n\t\tand[51][i].b <== eq[29][i].out;\n\t\tstates[i+1][51] <== and[51][i].out;\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 87;\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][51];\n\t\tand[52][i].b <== eq[30][i].out;\n\t\tstates[i+1][52] <== and[52][i].out;\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][52];\n\t\tand[53][i].b <== eq[24][i].out;\n\t\tstates[i+1][53] <== and[53][i].out;\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 108;\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][53];\n\t\tand[54][i].b <== eq[31][i].out;\n\t\tstates[i+1][54] <== and[54][i].out;\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][54];\n\t\tand[55][i].b <== eq[31][i].out;\n\t\tstates[i+1][55] <== and[55][i].out;\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 101;\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][55];\n\t\tand[56][i].b <== eq[32][i].out;\n\t\tstates[i+1][56] <== and[56][i].out;\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][56];\n\t\tand[57][i].b <== eq[13][i].out;\n\t\tstates[i+1][57] <== and[57][i].out;\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== states[i][57];\n\t\tand[58][i].b <== eq[29][i].out;\n\t\tstates[i+1][58] <== and[58][i].out;\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 40;\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== states[i][58];\n\t\tand[59][i].b <== eq[33][i].out;\n\t\tstates[i+1][59] <== and[59][i].out;\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][33];\n\t\tand[60][i].b <== eq[14][i].out;\n\t\tstates[i+1][60] <== and[60][i].out;\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 77;\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][59];\n\t\tand[61][i].b <== eq[34][i].out;\n\t\tstates[i+1][61] <== and[61][i].out;\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== states[i][61];\n\t\tand[62][i].b <== eq[20][i].out;\n\t\tstates[i+1][62] <== and[62][i].out;\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 98;\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== states[i][62];\n\t\tand[63][i].b <== eq[35][i].out;\n\t\tstates[i+1][63] <== and[63][i].out;\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 105;\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][63];\n\t\tand[64][i].b <== eq[36][i].out;\n\t\tstates[i+1][64] <== and[64][i].out;\n\t\tstate_changed[i].in[63] <== states[i+1][64];\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][64];\n\t\tand[65][i].b <== eq[31][i].out;\n\t\tstates[i+1][65] <== and[65][i].out;\n\t\tstate_changed[i].in[64] <== states[i+1][65];\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][65];\n\t\tand[66][i].b <== eq[32][i].out;\n\t\tstates[i+1][66] <== and[66][i].out;\n\t\tstate_changed[i].in[65] <== states[i+1][66];\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][66];\n\t\tand[67][i].b <== eq[29][i].out;\n\t\tstates[i+1][67] <== and[67][i].out;\n\t\tstate_changed[i].in[66] <== states[i+1][67];\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][67];\n\t\tand[68][i].b <== eq[32][i].out;\n\t\tstates[i+1][68] <== and[68][i].out;\n\t\tstate_changed[i].in[67] <== states[i+1][68];\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 110;\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][68];\n\t\tand[69][i].b <== eq[37][i].out;\n\t\tstates[i+1][69] <== and[69][i].out;\n\t\tstate_changed[i].in[68] <== states[i+1][69];\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][69];\n\t\tand[70][i].b <== eq[14][i].out;\n\t\tstates[i+1][70] <== and[70][i].out;\n\t\tstate_changed[i].in[69] <== states[i+1][70];\n\t\tand[71][i] = AND();\n\t\tand[71][i].a <== states[i][70];\n\t\tand[71][i].b <== eq[36][i].out;\n\t\tstates[i+1][71] <== and[71][i].out;\n\t\tstate_changed[i].in[70] <== states[i+1][71];\n\t\tand[72][i] = AND();\n\t\tand[72][i].a <== states[i][71];\n\t\tand[72][i].b <== eq[37][i].out;\n\t\tstates[i+1][72] <== and[72][i].out;\n\t\tstate_changed[i].in[71] <== states[i+1][72];\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 103;\n\t\tand[73][i] = AND();\n\t\tand[73][i].a <== states[i][72];\n\t\tand[73][i].b <== eq[38][i].out;\n\t\tstates[i+1][73] <== and[73][i].out;\n\t\tstate_changed[i].in[72] <== states[i+1][73];\n\t\tand[74][i] = AND();\n\t\tand[74][i].a <== states[i][73];\n\t\tand[74][i].b <== eq[29][i].out;\n\t\tstates[i+1][74] <== and[74][i].out;\n\t\tstate_changed[i].in[73] <== states[i+1][74];\n\t\tand[75][i] = AND();\n\t\tand[75][i].a <== states[i][74];\n\t\tmulti_or[2][i] = MultiOR(10);\n\t\tmulti_or[2][i].in[0] <== eq[1][i].out;\n\t\tmulti_or[2][i].in[1] <== eq[2][i].out;\n\t\tmulti_or[2][i].in[2] <== eq[3][i].out;\n\t\tmulti_or[2][i].in[3] <== eq[4][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[5][i].out;\n\t\tmulti_or[2][i].in[5] <== eq[6][i].out;\n\t\tmulti_or[2][i].in[6] <== eq[7][i].out;\n\t\tmulti_or[2][i].in[7] <== eq[8][i].out;\n\t\tmulti_or[2][i].in[8] <== eq[9][i].out;\n\t\tmulti_or[2][i].in[9] <== eq[10][i].out;\n\t\tand[75][i].b <== multi_or[2][i].out;\n\t\tand[76][i] = AND();\n\t\tand[76][i].a <== states[i][75];\n\t\tand[76][i].b <== multi_or[2][i].out;\n\t\tmulti_or[3][i] = MultiOR(2);\n\t\tmulti_or[3][i].in[0] <== and[75][i].out;\n\t\tmulti_or[3][i].in[1] <== and[76][i].out;\n\t\tstates[i+1][75] <== multi_or[3][i].out;\n\t\tstate_changed[i].in[74] <== states[i+1][75];\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 41;\n\t\tand[77][i] = AND();\n\t\tand[77][i].a <== states[i][75];\n\t\tand[77][i].b <== eq[39][i].out;\n\t\tstates[i+1][76] <== and[77][i].out;\n\t\tstate_changed[i].in[75] <== states[i+1][76];\n\t\tand[78][i] = AND();\n\t\tand[78][i].a <== states[i][60];\n\t\tand[78][i].b <== eq[15][i].out;\n\t\tstates[i+1][77] <== and[78][i].out;\n\t\tstate_changed[i].in[76] <== states[i+1][77];\n\t\tand[79][i] = AND();\n\t\tand[79][i].a <== states[i][76];\n\t\tand[79][i].b <== eq[11][i].out;\n\t\tstates[i+1][78] <== and[79][i].out;\n\t\tstate_changed[i].in[77] <== states[i+1][78];\n\t\tand[80][i] = AND();\n\t\tand[80][i].a <== states[i][78];\n\t\tand[80][i].b <== eq[12][i].out;\n\t\tstates[i+1][79] <== and[80][i].out;\n\t\tstate_changed[i].in[78] <== states[i+1][79];\n\t\tand[81][i] = AND();\n\t\tand[81][i].a <== states[i][79];\n\t\tand[81][i].b <== eq[13][i].out;\n\t\tstates[i+1][80] <== and[81][i].out;\n\t\tstate_changed[i].in[79] <== states[i+1][80];\n\t\tand[82][i] = AND();\n\t\tand[82][i].a <== states[i][80];\n\t\tand[82][i].b <== eq[14][i].out;\n\t\tstates[i+1][81] <== and[82][i].out;\n\t\tstate_changed[i].in[80] <== states[i+1][81];\n\t\tand[83][i] = AND();\n\t\tand[83][i].a <== states[i][81];\n\t\tand[83][i].b <== eq[15][i].out;\n\t\tstates[i+1][82] <== and[83][i].out;\n\t\tstate_changed[i].in[81] <== states[i+1][82];\n\t\tand[84][i] = AND();\n\t\tand[84][i].a <== states[i][82];\n\t\tand[84][i].b <== eq[16][i].out;\n\t\tstates[i+1][83] <== and[84][i].out;\n\t\tstate_changed[i].in[82] <== states[i+1][83];\n\t\tand[85][i] = AND();\n\t\tand[85][i].a <== states[i][83];\n\t\tand[85][i].b <== eq[17][i].out;\n\t\tstates[i+1][84] <== and[85][i].out;\n\t\tstate_changed[i].in[83] <== states[i+1][84];\n\t\tand[86][i] = AND();\n\t\tand[86][i].a <== states[i][84];\n\t\tand[86][i].b <== eq[11][i].out;\n\t\tstates[i+1][85] <== and[86][i].out;\n\t\tstate_changed[i].in[84] <== states[i+1][85];\n\t\tand[87][i] = AND();\n\t\tand[87][i].a <== states[i][85];\n\t\tand[87][i].b <== eq[12][i].out;\n\t\tstates[i+1][86] <== and[87][i].out;\n\t\tstate_changed[i].in[85] <== states[i+1][86];\n\t\tand[88][i] = AND();\n\t\tand[88][i].a <== states[i][86];\n\t\tand[88][i].b <== eq[13][i].out;\n\t\tstates[i+1][87] <== and[88][i].out;\n\t\tstate_changed[i].in[86] <== states[i+1][87];\n\t\tand[89][i] = AND();\n\t\tand[89][i].a <== states[i][87];\n\t\tand[89][i].b <== eq[18][i].out;\n\t\tstates[i+1][88] <== and[89][i].out;\n\t\tstate_changed[i].in[87] <== states[i+1][88];\n\t\tand[90][i] = AND();\n\t\tand[90][i].a <== states[i][88];\n\t\tand[90][i].b <== eq[15][i].out;\n\t\tstates[i+1][89] <== and[90][i].out;\n\t\tstate_changed[i].in[88] <== states[i+1][89];\n\t\tand[91][i] = AND();\n\t\tand[91][i].a <== states[i][89];\n\t\tand[91][i].b <== eq[16][i].out;\n\t\tstates[i+1][90] <== and[91][i].out;\n\t\tstate_changed[i].in[89] <== states[i+1][90];\n\t\tand[92][i] = AND();\n\t\tand[92][i].a <== states[i][90];\n\t\tand[92][i].b <== eq[17][i].out;\n\t\tstates[i+1][91] <== and[92][i].out;\n\t\tstate_changed[i].in[90] <== states[i+1][91];\n\t\tand[93][i] = AND();\n\t\tand[93][i].a <== states[i][91];\n\t\tand[93][i].b <== eq[11][i].out;\n\t\tstates[i+1][92] <== and[93][i].out;\n\t\tstate_changed[i].in[91] <== states[i+1][92];\n\t\tand[94][i] = AND();\n\t\tand[94][i].a <== states[i][92];\n\t\tand[94][i].b <== eq[13][i].out;\n\t\tstates[i+1][93] <== and[94][i].out;\n\t\tstate_changed[i].in[92] <== states[i+1][93];\n\t\tand[95][i] = AND();\n\t\tand[95][i].a <== states[i][93];\n\t\tand[95][i].b <== eq[18][i].out;\n\t\tstates[i+1][94] <== and[95][i].out;\n\t\tstate_changed[i].in[93] <== states[i+1][94];\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 65;\n\t\tand[96][i] = AND();\n\t\tand[96][i].a <== states[i][77];\n\t\tand[96][i].b <== eq[40][i].out;\n\t\tstates[i+1][95] <== and[96][i].out;\n\t\tstate_changed[i].in[94] <== states[i+1][95];\n\t\tand[97][i] = AND();\n\t\tand[97][i].a <== states[i][94];\n\t\tand[97][i].b <== eq[15][i].out;\n\t\tstates[i+1][96] <== and[97][i].out;\n\t\tstate_changed[i].in[95] <== states[i+1][96];\n\t\tand[98][i] = AND();\n\t\tand[98][i].a <== states[i][96];\n\t\tand[98][i].b <== eq[16][i].out;\n\t\tstates[i+1][97] <== and[98][i].out;\n\t\tstate_changed[i].in[96] <== states[i+1][97];\n\t\tand[99][i] = AND();\n\t\tand[99][i].a <== states[i][97];\n\t\tand[99][i].b <== eq[17][i].out;\n\t\tstates[i+1][98] <== and[99][i].out;\n\t\tstate_changed[i].in[97] <== states[i+1][98];\n\t\tand[100][i] = AND();\n\t\tand[100][i].a <== states[i][98];\n\t\tand[100][i].b <== eq[11][i].out;\n\t\tstates[i+1][99] <== and[100][i].out;\n\t\tstate_changed[i].in[98] <== states[i+1][99];\n\t\tand[101][i] = AND();\n\t\tand[101][i].a <== states[i][99];\n\t\tand[101][i].b <== eq[13][i].out;\n\t\tstates[i+1][100] <== and[101][i].out;\n\t\tstate_changed[i].in[99] <== states[i+1][100];\n\t\tand[102][i] = AND();\n\t\tand[102][i].a <== states[i][100];\n\t\tand[102][i].b <== eq[14][i].out;\n\t\tstates[i+1][101] <== and[102][i].out;\n\t\tstate_changed[i].in[100] <== states[i+1][101];\n\t\tand[103][i] = AND();\n\t\tand[103][i].a <== states[i][101];\n\t\tand[103][i].b <== eq[15][i].out;\n\t\tstates[i+1][102] <== and[103][i].out;\n\t\tstate_changed[i].in[101] <== states[i+1][102];\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 84;\n\t\tand[104][i] = AND();\n\t\tand[104][i].a <== states[i][102];\n\t\tand[104][i].b <== eq[41][i].out;\n\t\tstates[i+1][103] <== and[104][i].out;\n\t\tstate_changed[i].in[102] <== states[i+1][103];\n\t\tand[105][i] = AND();\n\t\tand[105][i].a <== states[i][103];\n\t\tand[105][i].b <== eq[20][i].out;\n\t\tstates[i+1][104] <== and[105][i].out;\n\t\tstate_changed[i].in[103] <== states[i+1][104];\n\t\tand[106][i] = AND();\n\t\tand[106][i].a <== states[i][104];\n\t\tand[106][i].b <== eq[22][i].out;\n\t\tstates[i+1][105] <== and[106][i].out;\n\t\tstate_changed[i].in[104] <== states[i+1][105];\n\t\tand[107][i] = AND();\n\t\tand[107][i].a <== states[i][105];\n\t\tand[107][i].b <== eq[11][i].out;\n\t\tstates[i+1][106] <== and[107][i].out;\n\t\tstate_changed[i].in[105] <== states[i+1][106];\n\t\tand[108][i] = AND();\n\t\tand[108][i].a <== states[i][106];\n\t\tand[108][i].b <== eq[12][i].out;\n\t\tstates[i+1][107] <== and[108][i].out;\n\t\tstate_changed[i].in[106] <== states[i+1][107];\n\t\tand[109][i] = AND();\n\t\tand[109][i].a <== states[i][107];\n\t\tand[109][i].b <== eq[13][i].out;\n\t\tstates[i+1][108] <== and[109][i].out;\n\t\tstate_changed[i].in[107] <== states[i+1][108];\n\t\tand[110][i] = AND();\n\t\tand[110][i].a <== states[i][108];\n\t\tand[110][i].b <== eq[14][i].out;\n\t\tstates[i+1][109] <== and[110][i].out;\n\t\tstate_changed[i].in[108] <== states[i+1][109];\n\t\tand[111][i] = AND();\n\t\tand[111][i].a <== states[i][109];\n\t\tand[111][i].b <== eq[15][i].out;\n\t\tstates[i+1][110] <== and[111][i].out;\n\t\tstate_changed[i].in[109] <== states[i+1][110];\n\t\tand[112][i] = AND();\n\t\tand[112][i].a <== states[i][110];\n\t\tand[112][i].b <== eq[16][i].out;\n\t\tstates[i+1][111] <== and[112][i].out;\n\t\tstate_changed[i].in[110] <== states[i+1][111];\n\t\tand[113][i] = AND();\n\t\tand[113][i].a <== states[i][111];\n\t\tand[113][i].b <== eq[17][i].out;\n\t\tstates[i+1][112] <== and[113][i].out;\n\t\tstate_changed[i].in[111] <== states[i+1][112];\n\t\tand[114][i] = AND();\n\t\tand[114][i].a <== states[i][112];\n\t\tand[114][i].b <== eq[11][i].out;\n\t\tstates[i+1][113] <== and[114][i].out;\n\t\tstate_changed[i].in[112] <== states[i+1][113];\n\t\tand[115][i] = AND();\n\t\tand[115][i].a <== states[i][113];\n\t\tand[115][i].b <== eq[13][i].out;\n\t\tstates[i+1][114] <== and[115][i].out;\n\t\tstate_changed[i].in[113] <== states[i+1][114];\n\t\tand[116][i] = AND();\n\t\tand[116][i].a <== states[i][114];\n\t\tand[116][i].b <== eq[14][i].out;\n\t\tstates[i+1][115] <== and[116][i].out;\n\t\tstate_changed[i].in[114] <== states[i+1][115];\n\t\tand[117][i] = AND();\n\t\tand[117][i].a <== states[i][115];\n\t\tand[117][i].b <== eq[15][i].out;\n\t\tstates[i+1][116] <== and[117][i].out;\n\t\tstate_changed[i].in[115] <== states[i+1][116];\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 65;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 90;\n\t\tand[118][i] = AND();\n\t\tand[118][i].a <== lt[0][i].out;\n\t\tand[118][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 97;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 122;\n\t\tand[119][i] = AND();\n\t\tand[119][i].a <== lt[2][i].out;\n\t\tand[119][i].b <== lt[3][i].out;\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 39;\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 44;\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 45;\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 95;\n\t\tand[120][i] = AND();\n\t\tand[120][i].a <== states[i][116];\n\t\tmulti_or[4][i] = MultiOR(18);\n\t\tmulti_or[4][i].in[0] <== and[118][i].out;\n\t\tmulti_or[4][i].in[1] <== and[119][i].out;\n\t\tmulti_or[4][i].in[2] <== eq[29][i].out;\n\t\tmulti_or[4][i].in[3] <== eq[42][i].out;\n\t\tmulti_or[4][i].in[4] <== eq[43][i].out;\n\t\tmulti_or[4][i].in[5] <== eq[44][i].out;\n\t\tmulti_or[4][i].in[6] <== eq[0][i].out;\n\t\tmulti_or[4][i].in[7] <== eq[1][i].out;\n\t\tmulti_or[4][i].in[8] <== eq[2][i].out;\n\t\tmulti_or[4][i].in[9] <== eq[3][i].out;\n\t\tmulti_or[4][i].in[10] <== eq[4][i].out;\n\t\tmulti_or[4][i].in[11] <== eq[5][i].out;\n\t\tmulti_or[4][i].in[12] <== eq[6][i].out;\n\t\tmulti_or[4][i].in[13] <== eq[7][i].out;\n\t\tmulti_or[4][i].in[14] <== eq[8][i].out;\n\t\tmulti_or[4][i].in[15] <== eq[9][i].out;\n\t\tmulti_or[4][i].in[16] <== eq[10][i].out;\n\t\tmulti_or[4][i].in[17] <== eq[45][i].out;\n\t\tand[120][i].b <== multi_or[4][i].out;\n\t\tand[121][i] = AND();\n\t\tand[121][i].a <== states[i][117];\n\t\tmulti_or[5][i] = MultiOR(17);\n\t\tmulti_or[5][i].in[0] <== and[118][i].out;\n\t\tmulti_or[5][i].in[1] <== and[119][i].out;\n\t\tmulti_or[5][i].in[2] <== eq[42][i].out;\n\t\tmulti_or[5][i].in[3] <== eq[43][i].out;\n\t\tmulti_or[5][i].in[4] <== eq[44][i].out;\n\t\tmulti_or[5][i].in[5] <== eq[0][i].out;\n\t\tmulti_or[5][i].in[6] <== eq[1][i].out;\n\t\tmulti_or[5][i].in[7] <== eq[2][i].out;\n\t\tmulti_or[5][i].in[8] <== eq[3][i].out;\n\t\tmulti_or[5][i].in[9] <== eq[4][i].out;\n\t\tmulti_or[5][i].in[10] <== eq[5][i].out;\n\t\tmulti_or[5][i].in[11] <== eq[6][i].out;\n\t\tmulti_or[5][i].in[12] <== eq[7][i].out;\n\t\tmulti_or[5][i].in[13] <== eq[8][i].out;\n\t\tmulti_or[5][i].in[14] <== eq[9][i].out;\n\t\tmulti_or[5][i].in[15] <== eq[10][i].out;\n\t\tmulti_or[5][i].in[16] <== eq[45][i].out;\n\t\tand[121][i].b <== multi_or[5][i].out;\n\t\tand[122][i] = AND();\n\t\tand[122][i].a <== states[i][121];\n\t\tand[122][i].b <== multi_or[5][i].out;\n\t\tmulti_or[6][i] = MultiOR(3);\n\t\tmulti_or[6][i].in[0] <== and[120][i].out;\n\t\tmulti_or[6][i].in[1] <== and[121][i].out;\n\t\tmulti_or[6][i].in[2] <== and[122][i].out;\n\t\tstates[i+1][117] <== multi_or[6][i].out;\n\t\tstate_changed[i].in[116] <== states[i+1][117];\n\t\tand[123][i] = AND();\n\t\tand[123][i].a <== states[i][95];\n\t\tand[123][i].b <== eq[21][i].out;\n\t\tstates[i+1][118] <== and[123][i].out;\n\t\tstate_changed[i].in[117] <== states[i+1][118];\n\t\tand[124][i] = AND();\n\t\tand[124][i].a <== states[i][118];\n\t\tand[124][i].b <== eq[20][i].out;\n\t\tstates[i+1][119] <== and[124][i].out;\n\t\tstate_changed[i].in[118] <== states[i+1][119];\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 117;\n\t\tand[125][i] = AND();\n\t\tand[125][i].a <== states[i][119];\n\t\tand[125][i].b <== eq[46][i].out;\n\t\tstates[i+1][120] <== and[125][i].out;\n\t\tstate_changed[i].in[119] <== states[i+1][120];\n\t\tand[126][i] = AND();\n\t\tand[126][i].a <== states[i][117];\n\t\tand[126][i].b <== eq[29][i].out;\n\t\tand[127][i] = AND();\n\t\tand[127][i].a <== states[i][121];\n\t\tand[127][i].b <== eq[29][i].out;\n\t\tmulti_or[7][i] = MultiOR(2);\n\t\tmulti_or[7][i].in[0] <== and[126][i].out;\n\t\tmulti_or[7][i].in[1] <== and[127][i].out;\n\t\tstates[i+1][121] <== multi_or[7][i].out;\n\t\tstate_changed[i].in[120] <== states[i+1][121];\n\t\tand[128][i] = AND();\n\t\tand[128][i].a <== states[i][120];\n\t\tand[128][i].b <== eq[37][i].out;\n\t\tstates[i+1][122] <== and[128][i].out;\n\t\tstate_changed[i].in[121] <== states[i+1][122];\n\t\tand[129][i] = AND();\n\t\tand[129][i].a <== states[i][122];\n\t\tand[129][i].b <== eq[13][i].out;\n\t\tstates[i+1][123] <== and[129][i].out;\n\t\tstate_changed[i].in[122] <== states[i+1][123];\n\t\tand[130][i] = AND();\n\t\tand[130][i].a <== states[i][123];\n\t\tand[130][i].b <== eq[22][i].out;\n\t\tstates[i+1][124] <== and[130][i].out;\n\t\tstate_changed[i].in[123] <== states[i+1][124];\n\t\tand[131][i] = AND();\n\t\tand[131][i].a <== states[i][121];\n\t\tand[131][i].b <== eq[33][i].out;\n\t\tstates[i+1][125] <== and[131][i].out;\n\t\tstate_changed[i].in[124] <== states[i+1][125];\n\t\tand[132][i] = AND();\n\t\tand[132][i].a <== states[i][125];\n\t\tand[132][i].b <== eq[34][i].out;\n\t\tstates[i+1][126] <== and[132][i].out;\n\t\tstate_changed[i].in[125] <== states[i+1][126];\n\t\tand[133][i] = AND();\n\t\tand[133][i].a <== states[i][126];\n\t\tand[133][i].b <== eq[20][i].out;\n\t\tstates[i+1][127] <== and[133][i].out;\n\t\tstate_changed[i].in[126] <== states[i+1][127];\n\t\tand[134][i] = AND();\n\t\tand[134][i].a <== states[i][127];\n\t\tand[134][i].b <== eq[35][i].out;\n\t\tstates[i+1][128] <== and[134][i].out;\n\t\tstate_changed[i].in[127] <== states[i+1][128];\n\t\tand[135][i] = AND();\n\t\tand[135][i].a <== states[i][128];\n\t\tand[135][i].b <== eq[36][i].out;\n\t\tstates[i+1][129] <== and[135][i].out;\n\t\tstate_changed[i].in[128] <== states[i+1][129];\n\t\tand[136][i] = AND();\n\t\tand[136][i].a <== states[i][129];\n\t\tand[136][i].b <== eq[31][i].out;\n\t\tstates[i+1][130] <== and[136][i].out;\n\t\tstate_changed[i].in[129] <== states[i+1][130];\n\t\tand[137][i] = AND();\n\t\tand[137][i].a <== states[i][130];\n\t\tand[137][i].b <== eq[32][i].out;\n\t\tstates[i+1][131] <== and[137][i].out;\n\t\tstate_changed[i].in[130] <== states[i+1][131];\n\t\tand[138][i] = AND();\n\t\tand[138][i].a <== states[i][131];\n\t\tand[138][i].b <== eq[29][i].out;\n\t\tstates[i+1][132] <== and[138][i].out;\n\t\tstate_changed[i].in[131] <== states[i+1][132];\n\t\tand[139][i] = AND();\n\t\tand[139][i].a <== states[i][132];\n\t\tand[139][i].b <== eq[32][i].out;\n\t\tstates[i+1][133] <== and[139][i].out;\n\t\tstate_changed[i].in[132] <== states[i+1][133];\n\t\tand[140][i] = AND();\n\t\tand[140][i].a <== states[i][133];\n\t\tand[140][i].b <== eq[37][i].out;\n\t\tstates[i+1][134] <== and[140][i].out;\n\t\tstate_changed[i].in[133] <== states[i+1][134];\n\t\tand[141][i] = AND();\n\t\tand[141][i].a <== states[i][134];\n\t\tand[141][i].b <== eq[14][i].out;\n\t\tstates[i+1][135] <== and[141][i].out;\n\t\tstate_changed[i].in[134] <== states[i+1][135];\n\t\tand[142][i] = AND();\n\t\tand[142][i].a <== states[i][135];\n\t\tand[142][i].b <== eq[36][i].out;\n\t\tstates[i+1][136] <== and[142][i].out;\n\t\tstate_changed[i].in[135] <== states[i+1][136];\n\t\tand[143][i] = AND();\n\t\tand[143][i].a <== states[i][136];\n\t\tand[143][i].b <== eq[37][i].out;\n\t\tstates[i+1][137] <== and[143][i].out;\n\t\tstate_changed[i].in[136] <== states[i+1][137];\n\t\tand[144][i] = AND();\n\t\tand[144][i].a <== states[i][137];\n\t\tand[144][i].b <== eq[38][i].out;\n\t\tstates[i+1][138] <== and[144][i].out;\n\t\tstate_changed[i].in[137] <== states[i+1][138];\n\t\tand[145][i] = AND();\n\t\tand[145][i].a <== states[i][138];\n\t\tand[145][i].b <== eq[29][i].out;\n\t\tstates[i+1][139] <== and[145][i].out;\n\t\tstate_changed[i].in[138] <== states[i+1][139];\n\t\tand[146][i] = AND();\n\t\tand[146][i].a <== states[i][139];\n\t\tand[146][i].b <== multi_or[2][i].out;\n\t\tand[147][i] = AND();\n\t\tand[147][i].a <== states[i][140];\n\t\tand[147][i].b <== multi_or[2][i].out;\n\t\tmulti_or[8][i] = MultiOR(2);\n\t\tmulti_or[8][i].in[0] <== and[146][i].out;\n\t\tmulti_or[8][i].in[1] <== and[147][i].out;\n\t\tstates[i+1][140] <== multi_or[8][i].out;\n\t\tstate_changed[i].in[139] <== states[i+1][140];\n\t\tand[148][i] = AND();\n\t\tand[148][i].a <== states[i][124];\n\t\tand[148][i].b <== eq[11][i].out;\n\t\tstates[i+1][141] <== and[148][i].out;\n\t\tstate_changed[i].in[140] <== states[i+1][141];\n\t\tand[149][i] = AND();\n\t\tand[149][i].a <== states[i][140];\n\t\tand[149][i].b <== eq[39][i].out;\n\t\tstates[i+1][142] <== and[149][i].out;\n\t\tstate_changed[i].in[141] <== states[i+1][142];\n\t\tand[150][i] = AND();\n\t\tand[150][i].a <== states[i][142];\n\t\tand[150][i].b <== eq[11][i].out;\n\t\tstates[i+1][143] <== and[150][i].out;\n\t\tstate_changed[i].in[142] <== states[i+1][143];\n\t\tand[151][i] = AND();\n\t\tand[151][i].a <== states[i][143];\n\t\tand[151][i].b <== eq[12][i].out;\n\t\tstates[i+1][144] <== and[151][i].out;\n\t\tstate_changed[i].in[143] <== states[i+1][144];\n\t\tand[152][i] = AND();\n\t\tand[152][i].a <== states[i][144];\n\t\tand[152][i].b <== eq[13][i].out;\n\t\tstates[i+1][145] <== and[152][i].out;\n\t\tstate_changed[i].in[144] <== states[i+1][145];\n\t\tand[153][i] = AND();\n\t\tand[153][i].a <== states[i][145];\n\t\tand[153][i].b <== eq[14][i].out;\n\t\tstates[i+1][146] <== and[153][i].out;\n\t\tstate_changed[i].in[145] <== states[i+1][146];\n\t\tand[154][i] = AND();\n\t\tand[154][i].a <== states[i][146];\n\t\tand[154][i].b <== eq[15][i].out;\n\t\tstates[i+1][147] <== and[154][i].out;\n\t\tstate_changed[i].in[146] <== states[i+1][147];\n\t\tand[155][i] = AND();\n\t\tand[155][i].a <== states[i][147];\n\t\tand[155][i].b <== eq[16][i].out;\n\t\tstates[i+1][148] <== and[155][i].out;\n\t\tstate_changed[i].in[147] <== states[i+1][148];\n\t\tand[156][i] = AND();\n\t\tand[156][i].a <== states[i][148];\n\t\tand[156][i].b <== eq[17][i].out;\n\t\tstates[i+1][149] <== and[156][i].out;\n\t\tstate_changed[i].in[148] <== states[i+1][149];\n\t\tand[157][i] = AND();\n\t\tand[157][i].a <== states[i][141];\n\t\tand[157][i].b <== eq[12][i].out;\n\t\tstates[i+1][150] <== and[157][i].out;\n\t\tstate_changed[i].in[149] <== states[i+1][150];\n\t\tand[158][i] = AND();\n\t\tand[158][i].a <== states[i][150];\n\t\tand[158][i].b <== eq[13][i].out;\n\t\tstates[i+1][151] <== and[158][i].out;\n\t\tstate_changed[i].in[150] <== states[i+1][151];\n\t\tand[159][i] = AND();\n\t\tand[159][i].a <== states[i][151];\n\t\tand[159][i].b <== eq[14][i].out;\n\t\tstates[i+1][152] <== and[159][i].out;\n\t\tstate_changed[i].in[151] <== states[i+1][152];\n\t\tand[160][i] = AND();\n\t\tand[160][i].a <== states[i][152];\n\t\tand[160][i].b <== eq[15][i].out;\n\t\tstates[i+1][153] <== and[160][i].out;\n\t\tstate_changed[i].in[152] <== states[i+1][153];\n\t\tand[161][i] = AND();\n\t\tand[161][i].a <== states[i][153];\n\t\tand[161][i].b <== eq[16][i].out;\n\t\tstates[i+1][154] <== and[161][i].out;\n\t\tstate_changed[i].in[153] <== states[i+1][154];\n\t\tand[162][i] = AND();\n\t\tand[162][i].a <== states[i][154];\n\t\tand[162][i].b <== eq[17][i].out;\n\t\tstates[i+1][155] <== and[162][i].out;\n\t\tstate_changed[i].in[154] <== states[i+1][155];\n\t\tand[163][i] = AND();\n\t\tand[163][i].a <== states[i][155];\n\t\tand[163][i].b <== eq[11][i].out;\n\t\tstates[i+1][156] <== and[163][i].out;\n\t\tstate_changed[i].in[155] <== states[i+1][156];\n\t\tand[164][i] = AND();\n\t\tand[164][i].a <== states[i][156];\n\t\tand[164][i].b <== eq[13][i].out;\n\t\tstates[i+1][157] <== and[164][i].out;\n\t\tstate_changed[i].in[156] <== states[i+1][157];\n\t\tand[165][i] = AND();\n\t\tand[165][i].a <== states[i][157];\n\t\tand[165][i].b <== eq[14][i].out;\n\t\tstates[i+1][158] <== and[165][i].out;\n\t\tstate_changed[i].in[157] <== states[i+1][158];\n\t\tand[166][i] = AND();\n\t\tand[166][i].a <== states[i][158];\n\t\tand[166][i].b <== eq[15][i].out;\n\t\tstates[i+1][159] <== and[166][i].out;\n\t\tstate_changed[i].in[158] <== states[i+1][159];\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 83;\n\t\tand[167][i] = AND();\n\t\tand[167][i].a <== states[i][159];\n\t\tand[167][i].b <== eq[47][i].out;\n\t\tstates[i+1][160] <== and[167][i].out;\n\t\tstate_changed[i].in[159] <== states[i+1][160];\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 71;\n\t\tand[168][i] = AND();\n\t\tand[168][i].a <== states[i][160];\n\t\tand[168][i].b <== eq[48][i].out;\n\t\tstates[i+1][161] <== and[168][i].out;\n\t\tstate_changed[i].in[160] <== states[i+1][161];\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 68;\n\t\tand[169][i] = AND();\n\t\tand[169][i].a <== states[i][161];\n\t\tand[169][i].b <== eq[49][i].out;\n\t\tstates[i+1][162] <== and[169][i].out;\n\t\tstate_changed[i].in[161] <== states[i+1][162];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][149];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][149] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][162] * states[i+2][1];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n\tsignal is_substr1[msg_bytes][3];\n\tsignal is_reveal1[msg_bytes];\n\tsignal output reveal1[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr1[i][0] <== 0;\n\t\tis_substr1[i][1] <== is_substr1[i][0] + states[i+1][74] * states[i+2][75];\n\t\tis_substr1[i][2] <== is_substr1[i][1] + states[i+1][75] * states[i+2][75];\n\t\tis_reveal1[i] <== is_substr1[i][2] * is_consecutive[i][1];\n\t\treveal1[i] <== in[i+1] * is_reveal1[i];\n\t}\n\tsignal is_substr2[msg_bytes][6];\n\tsignal is_reveal2[msg_bytes];\n\tsignal output reveal2[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr2[i][0] <== 0;\n\t\tis_substr2[i][1] <== is_substr2[i][0] + states[i+1][116] * states[i+2][117];\n\t\tis_substr2[i][2] <== is_substr2[i][1] + states[i+1][117] * states[i+2][117];\n\t\tis_substr2[i][3] <== is_substr2[i][2] + states[i+1][117] * states[i+2][121];\n\t\tis_substr2[i][4] <== is_substr2[i][3] + states[i+1][121] * states[i+2][117];\n\t\tis_substr2[i][5] <== is_substr2[i][4] + states[i+1][121] * states[i+2][121];\n\t\tis_reveal2[i] <== is_substr2[i][5] * is_consecutive[i][1];\n\t\treveal2[i] <== in[i+1] * is_reveal2[i];\n\t}\n\tsignal is_substr3[msg_bytes][3];\n\tsignal is_reveal3[msg_bytes];\n\tsignal output reveal3[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr3[i][0] <== 0;\n\t\tis_substr3[i][1] <== is_substr3[i][0] + states[i+1][139] * states[i+2][140];\n\t\tis_substr3[i][2] <== is_substr3[i][1] + states[i+1][140] * states[i+2][140];\n\t\tis_reveal3[i] <== is_substr3[i][2] * is_consecutive[i][1];\n\t\treveal3[i] <== in[i+1] * is_reveal3[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_payment_details.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>Amount:</td>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>SGD\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9|\\\\.)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"</td>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"</tr>\\r\\n<tr>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>From:</td>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>PayLah! Wallet \\\\(Mobile ending \"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"\\\\)</td>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"</tr>\\r\\n<tr>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>To:</td>\\r\\n\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<td>\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|-| |\\\\.|'|_|,)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \" \\\\(Mobile ending \"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"\\\\)</td>\\r\\n\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_payment_id.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate PaylahPaymentIdRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[25][num_bytes];\n\tcomponent and[20][num_bytes];\n\tcomponent multi_or[2][num_bytes];\n\tsignal states[num_bytes+1][20];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 20; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(19);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 48;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 49;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 50;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 51;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 52;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 53;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 54;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 55;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 56;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 57;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[9][i].out;\n\t\tand[0][i].b <== multi_or[0][i].out;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][19];\n\t\tand[1][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[0][i].out;\n\t\tmulti_or[1][i].in[1] <== and[1][i].out;\n\t\tstates[i+1][1] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 60;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tand[2][i].b <== eq[10][i].out;\n\t\tstates[i+1][2] <== and[2][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 84;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][0];\n\t\tand[3][i].b <== eq[11][i].out;\n\t\tstates[i+1][3] <== and[3][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 114;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][3];\n\t\tand[4][i].b <== eq[12][i].out;\n\t\tstates[i+1][4] <== and[4][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 97;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][4];\n\t\tand[5][i].b <== eq[13][i].out;\n\t\tstates[i+1][5] <== and[5][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 110;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][5];\n\t\tand[6][i].b <== eq[14][i].out;\n\t\tstates[i+1][6] <== and[6][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 115;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][6];\n\t\tand[7][i].b <== eq[15][i].out;\n\t\tstates[i+1][7] <== and[7][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][7];\n\t\tand[8][i].b <== eq[13][i].out;\n\t\tstates[i+1][8] <== and[8][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 99;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][8];\n\t\tand[9][i].b <== eq[16][i].out;\n\t\tstates[i+1][9] <== and[9][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 116;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][9];\n\t\tand[10][i].b <== eq[17][i].out;\n\t\tstates[i+1][10] <== and[10][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 105;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][10];\n\t\tand[11][i].b <== eq[18][i].out;\n\t\tstates[i+1][11] <== and[11][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 111;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][11];\n\t\tand[12][i].b <== eq[19][i].out;\n\t\tstates[i+1][12] <== and[12][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][12];\n\t\tand[13][i].b <== eq[14][i].out;\n\t\tstates[i+1][13] <== and[13][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 32;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][13];\n\t\tand[14][i].b <== eq[20][i].out;\n\t\tstates[i+1][14] <== and[14][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 82;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][14];\n\t\tand[15][i].b <== eq[21][i].out;\n\t\tstates[i+1][15] <== and[15][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 101;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][15];\n\t\tand[16][i].b <== eq[22][i].out;\n\t\tstates[i+1][16] <== and[16][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 102;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][16];\n\t\tand[17][i].b <== eq[23][i].out;\n\t\tstates[i+1][17] <== and[17][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 58;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][17];\n\t\tand[18][i].b <== eq[24][i].out;\n\t\tstates[i+1][18] <== and[18][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][18];\n\t\tand[19][i].b <== eq[20][i].out;\n\t\tstates[i+1][19] <== and[19][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][2];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][2] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][19] * states[i+2][1];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_payment_id.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"Transaction Ref: \"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"<\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_subject.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate PaylahSubjectRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[19][num_bytes];\n\tcomponent and[28][num_bytes];\n\tsignal states[num_bytes+1][29];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 29; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(28);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 115;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][28];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 13;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 10;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][0];\n\t\tand[3][i].b <== eq[0][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 117;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[3][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 98;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[4][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 106;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[5][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 101;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[6][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 99;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[7][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 116;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[8][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 58;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[9][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 84;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[10][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 114;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][12];\n\t\tand[12][i].b <== eq[11][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 97;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[12][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 110;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[13][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[0][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tand[16][i].b <== eq[12][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[7][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[8][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 105;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[14][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 111;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[15][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[13][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 32;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][22];\n\t\tand[22][i].b <== eq[16][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 65;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[17][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 108;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tand[24][i].b <== eq[18][i].out;\n\t\tstates[i+1][25] <== and[24][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tand[25][i].b <== eq[6][i].out;\n\t\tstates[i+1][26] <== and[25][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][26];\n\t\tand[26][i].b <== eq[11][i].out;\n\t\tstates[i+1][27] <== and[26][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][27];\n\t\tand[27][i].b <== eq[8][i].out;\n\t\tstates[i+1][28] <== and[27][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][3];\n\t}\n\tout <== final_state_result.out;\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_subject.json",
    "content": "{\n    \"parts\": [\n      {\n        \"is_public\": false,\n        \"regex_def\": \"subject:Transaction Alerts\\r\\n\"\n      }\n    ]\n  }\n  "
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_timestamp.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate PaylahTimestampRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[21][num_bytes];\n\tcomponent and[16][num_bytes];\n\tcomponent multi_or[2][num_bytes];\n\tsignal states[num_bytes+1][16];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 16; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(15);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 48;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 49;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 50;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 51;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 52;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 53;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 54;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 55;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 56;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 57;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(10);\n\t\tmulti_or[0][i].in[0] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[9][i].out;\n\t\tand[0][i].b <== multi_or[0][i].out;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][15];\n\t\tand[1][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[0][i].out;\n\t\tmulti_or[1][i].in[1] <== and[1][i].out;\n\t\tstates[i+1][1] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 59;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tand[2][i].b <== eq[10][i].out;\n\t\tstates[i+1][2] <== and[2][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 100;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][0];\n\t\tand[3][i].b <== eq[11][i].out;\n\t\tstates[i+1][3] <== and[3][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 61;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][3];\n\t\tand[4][i].b <== eq[12][i].out;\n\t\tstates[i+1][4] <== and[4][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][4];\n\t\tand[5][i].b <== eq[11][i].out;\n\t\tstates[i+1][5] <== and[5][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 98;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][5];\n\t\tand[6][i].b <== eq[13][i].out;\n\t\tstates[i+1][6] <== and[6][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 115;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][6];\n\t\tand[7][i].b <== eq[14][i].out;\n\t\tstates[i+1][7] <== and[7][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 46;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][7];\n\t\tand[8][i].b <== eq[15][i].out;\n\t\tstates[i+1][8] <== and[8][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 99;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][8];\n\t\tand[9][i].b <== eq[16][i].out;\n\t\tstates[i+1][9] <== and[9][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 111;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][9];\n\t\tand[10][i].b <== eq[17][i].out;\n\t\tstates[i+1][10] <== and[10][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 109;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][10];\n\t\tand[11][i].b <== eq[18][i].out;\n\t\tstates[i+1][11] <== and[11][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][11];\n\t\tand[12][i].b <== eq[10][i].out;\n\t\tstates[i+1][12] <== and[12][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 32;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][12];\n\t\tand[13][i].b <== eq[19][i].out;\n\t\tstates[i+1][13] <== and[13][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 116;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][13];\n\t\tand[14][i].b <== eq[20][i].out;\n\t\tstates[i+1][14] <== and[14][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][14];\n\t\tand[15][i].b <== eq[12][i].out;\n\t\tstates[i+1][15] <== and[15][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][2];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][2] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][15] * states[i+2][1];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/regexes/paylah_timestamp.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"d=dbs.com; t=\"\n        }, \n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \";\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/mocks/test_paylah_payer_mobile_num.circom",
    "content": "include \"../../regexes/paylah_payer_mobile_num.circom\";\n\ncomponent main = PaylahPayerMobileNumRegex(62);"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/mocks/test_paylah_payment_details.circom",
    "content": "include \"../../regexes/paylah_payment_details.circom\";\n\ncomponent main = PaylahPaymentDetailsRegex(189);"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/mocks/test_paylah_payment_id.circom",
    "content": "include \"../../regexes/paylah_payment_id.circom\";\n\ncomponent main = PaylahPaymentIdRegex(38);"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/mocks/test_paylah_subject.circom",
    "content": "include \"../../regexes/paylah_subject.circom\";\n\ncomponent main = PaylahSubjectRegex(28);"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/mocks/test_paylah_timestamp.circom",
    "content": "include \"../../regexes/paylah_timestamp.circom\";\n\ncomponent main = PaylahTimestampRegex(38);"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/paylah_registration.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, chunkedBytesToBigInt } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\nimport ganache from \"ganache\";\n\nconst { createCode, generateABI } = poseidonContract;\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\n// Constants used in the circuit\nconst N = 121;\nconst K = 17;\n\ndescribe(\"Paylah registration WASM tester\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let poseidon;\n    let mimcSponge;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../paylah_registration.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/paylah_registration\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_receive.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo receive payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 2 to 5 represent the packed from email (15 \\ 7)\n        const packed_from_email = witness.slice(2, 5);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        /// TODO: SUS???/// TODO: SUS???/// TODO: SUS???\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 20);    /// TODO: SUS???\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"should return the correct hashed onramper id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_registration.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed onramper id\n        const hashed_onramper_id = witness[5];\n\n        // Get expected packed to email\n        const regex_start_to_email = Number(input[\"email_to_idx\"]);\n        const regex_start_sub_array_to_email = input[\"in_padded\"].slice(regex_start_to_email);\n        const regex_end_to_email = regex_start_sub_array_to_email.indexOf(\"13\"); // Look for `\\r` to end the from which is 13 in ascii. e.g. `to:0xAnonKumar@gmail.com`\n        const to_email_array = regex_start_sub_array_to_email.slice(0, regex_end_to_email);\n\n        // Get expected packed account number array\n        const regex_start_mobile_number = Number(input[\"paylah_payer_mobile_num_idx\"]);\n        const regex_start_sub_array_mobile_number = input[\"in_body_padded\"].slice(regex_start_mobile_number);\n        const regex_end_mobile_number = regex_start_sub_array_mobile_number.indexOf(\"41\"); // Look for `)` to end the from which is 41 in ascii.\n        const mobile_number_array = regex_start_sub_array_mobile_number.slice(0, regex_end_mobile_number);\n\n        // Chunk bytes into 7 and pack\n        const toEmailChunkedArray = chunkArray(to_email_array, 7, 49);\n        const packed_to_email_array = toEmailChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const mobileNumberChunkedArray = chunkArray(mobile_number_array, 7, 7);\n        const packed_mobile_number_array = mobileNumberChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const combinedArray = packed_to_email_array.concat(packed_mobile_number_array)\n        const expected_hash = poseidon(combinedArray)\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(expected_hash), true);\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/paylah_send.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, chunkedBytesToBigInt } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\nimport ganache from \"ganache\";\n\nconst { createCode, generateABI } = poseidonContract;\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\n// Constants used in the circuit\nconst N = 121;\nconst K = 17;\n\ndescribe(\"Paylah send WASM tester\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let poseidon;\n    let mimcSponge;\n    let account;\n    let poseidonContract1;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../paylah_send.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/paylah_send\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_receive.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo receive payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 2 to 5 represent the packed from email (15 \\ 7)\n        const packed_from_email = witness.slice(2, 5);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 20);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"Should return the correct packed timestamp\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed timestamp\n        const packed_timestamp = witness.slice(5, 7);\n\n        // Get expected packed timestamp\n        const regex_start = Number(input[\"email_timestamp_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"59\"); // Look for `;` to end the timestamp which is 59 in ascii\n        const timestamp_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(timestamp_array, 7, 10);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed timestamp is the same\n            assert.equal(expectedValue, packed_timestamp[i], true);\n        });\n    });\n\n    // There's probably a diff on how the packing happens on contract / circuit vs how we do it here.\n    it(\"Should return the correct packed amount\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed amount\n        // Indexes 5 to 7 represent the packed amount (8 \\ 7)\n        const packed_amount = witness.slice(7, 8);\n\n        // Get expected packed amount\n        const regex_start = Number(input[\"paylah_amount_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"60\"); // Look for `<` to end the amount which is 60 in ascii\n        const amount_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(amount_array, 7, 7);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed amount is the same\n            assert.equal(expectedValue, packed_amount[i], true);\n        });\n    });\n\n    it(\"should return the correct hashed onramper id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed onramper id\n        const hashed_onramper_id = witness[8];\n\n        // Get expected packed to email\n        const regex_start_to_email = Number(input[\"email_to_idx\"]);\n        const regex_start_sub_array_to_email = input[\"in_padded\"].slice(regex_start_to_email);\n        const regex_end_to_email = regex_start_sub_array_to_email.indexOf(\"13\"); // Look for `\\r` to end the from which is 13 in ascii. e.g. `to:0xAnonKumar@gmail.com`\n        const to_email_array = regex_start_sub_array_to_email.slice(0, regex_end_to_email);\n\n        // Get expected packed account number array\n        const regex_start_mobile_number = Number(input[\"paylah_payer_mobile_num_idx\"]);\n        const regex_start_sub_array_mobile_number = input[\"in_body_padded\"].slice(regex_start_mobile_number);\n        const regex_end_mobile_number = regex_start_sub_array_mobile_number.indexOf(\"41\"); // Look for `)` to end the from which is 41 in ascii.\n        const mobile_number_array = regex_start_sub_array_mobile_number.slice(0, regex_end_mobile_number);\n\n        // Chunk bytes into 7 and pack\n        const toEmailChunkedArray = chunkArray(to_email_array, 7, 49);\n        const packed_to_email_array = toEmailChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const mobileNumberChunkedArray = chunkArray(mobile_number_array, 7, 7);\n        const packed_mobile_number_array = mobileNumberChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const combinedArray = packed_to_email_array.concat(packed_mobile_number_array)\n        const expected_hash = poseidon(combinedArray);\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct hashed offramper id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n        const C6 = new ethers.ContractFactory(\n            generateABI(6),\n            createCode(6),\n            account\n        );\n        poseidonContract1 = await C6.deploy();\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed offramper_id\n        const hashed_offramper_id = witness[9];\n\n        // Get expected packed offramper_id\n        const regex_start = Number(input[\"paylah_payee_name_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"40\");  // Look for `(` to end the offramper name which is 40 in ascii\n        const offramper_name_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Get expected packed phone number array\n        const regex_start_mobile_number = Number(input[\"paylah_payee_mobile_num_idx\"]);\n        const regex_start_sub_array_mobile_number = input[\"in_body_padded\"].slice(regex_start_mobile_number);\n        const regex_end_mobile_number = regex_start_sub_array_mobile_number.indexOf(\"41\"); // Look for `)` to end the from which is 41 in ascii.\n        const mobile_number_array = regex_start_sub_array_mobile_number.slice(0, regex_end_mobile_number);\n\n        // Chunk bytes into 7 and pack\n        const toEmailChunkedArray = chunkArray(offramper_name_array, 7, 35);\n        const packed_offramper_name_array = toEmailChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const mobileNumberChunkedArray = chunkArray(mobile_number_array, 7, 7);\n        const packed_mobile_number_array = mobileNumberChunkedArray.map((arr, i) => bytesToPacked(arr));\n\n        const combinedArray = packed_offramper_name_array.concat(packed_mobile_number_array)\n        const expected_hash = poseidon(combinedArray)\n        const expected_hash_contract = await poseidonContract1[\"poseidon(uint256[6])\"](combinedArray);\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_offramper_id)), JSON.stringify(expected_hash), true);\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_offramper_id)), JSON.stringify(poseidon.F.e(expected_hash_contract.toString())), true);\n    });\n\n    it(\"Should return the correct payment ID nullifier\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned nullifier\n        const nullifier = witness[10];\n\n        // Get expected packed offramper_id\n        const regex_start = Number(input[\"paylah_payment_id_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"60\");  // Look for `<` to end the payment_id which is 46 in ascii\n        const payment_id_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        const chunkedArrays = chunkArray(payment_id_array, 7, 28);\n        const packed_payment_id = chunkedArrays.map((arr, i) => bytesToPacked(arr));\n\n        const expected_nullifier = poseidon(packed_payment_id)\n        assert.equal(JSON.stringify(poseidon.F.e(nullifier)), JSON.stringify(expected_nullifier), true);\n    });\n\n    it(\"Should return the correct intent hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const input_path = path.join(__dirname, \"../inputs/input_paylah_send.json\");\n        const jsonString = fs.readFileSync(input_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus\n        const intent_hash = witness[11];\n\n        // Get expected modulus\n        const expected_intent_hash = input[\"intent_hash\"];\n\n        assert.equal(JSON.stringify(intent_hash), JSON.stringify(expected_intent_hash), true);\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/regexes/paylah_payer_mobile_num.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Paylah payer id\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_paylah_payer_mobile_num.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_paylah_payer_mobile_num\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"<td>From:</td>\\r\\n\" +\n                \"<td>PayLah! Wallet (Mobile ending 1111)</td>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"<td>From:</td>\\r\\n\" +\n                \"<td>PayLah! Wallet (Mobile ending 1111)</td>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"<td>From:</td>\\r\\n\" +\n                \"<td>PayLah! Wallet (Mobile ending 1111)</td>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"<td>From:</td>\\r\\n<td>PayLah! Wallet (Mobile ending \").length).fill(\"0\")\n            .concat(textToAsciiArray(\"1111\"))\n            .concat(textToAsciiArray(\")</td>\\r\\n\").fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"<td>From:</td>\\r\\n\" +\n                \"<td>EeeeeEe EeeEee (Mobile ending 1111)</td>\\r\\n\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/regexes/paylah_payment_details.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\nconst MIN_LEN = 189;\n\ndescribe(\"Paylah payment details\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let input;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    function textToAsciiArrayPadded(text: string): string[] {\n        while (text.length < MIN_LEN) {\n            text += \" \";\n        }\n        return textToAsciiArray(text);\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_paylah_payment_details.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_paylah_payment_details\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n        input = {\n            \"msg\": textToAsciiArray(\n                \"<td>Amount:</td>\\r\\n<td>SGD300.00</td>\\r\\n\" +\n                \"</tr>\\r\\n<tr>\\r\\n\" +\n                \"<td>From:</td>\\r\\n\" +\n                \"<td>PayLah! Wallet (Mobile ending 1111)</td>\\r\\n\" +\n                \"</tr>\\r\\n<tr>\\r\\n\" +\n                \"<td>To:</td>\\r\\n\" +\n                \"<td>Steven 'O K-M Jr. (Mobile ending 2222)</td>\\r\\n\"\n            )\n        };\n    });\n\n    const subject = async (input) => {\n        return await cir.calculateWitness(\n            input,\n            true\n        );\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const witness = await subject(input);\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        console.log(input.msg.length)\n        const witness = await subject(input);\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal amount correctly\", async () => {\n        const witness = await subject(input);\n\n        const expected = Array(textToAsciiArray(\"<td>Amount:</td>\\r\\n<td>SGD\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"300.00\"))\n            .concat(textToAsciiArray(\"</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>From:</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>PayLah! Wallet (Mobile ending 1111)</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>To:</td>\\r\\n<td>Steven 'O K-M Jr. (Mobile ending 2222)</td>\\r\\n\").fill(\"0\"))\n\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should reveal the payer mobile num correctly\", async () => {\n        const witness = await subject(input);\n\n        const expected = Array(textToAsciiArray(\"<td>Amount:</td>\\r\\n<td>SGD\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"300.00\")).fill(\"0\")\n            .concat(textToAsciiArray(\"</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>From:</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>PayLah! Wallet (Mobile ending \")).fill(\"0\")\n            .concat(textToAsciiArray(\"1111\"))\n            .concat(textToAsciiArray(\")</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>To:</td>\\r\\n<td>Steven 'O K-M Jr. (Mobile ending 2222)</td>\\r\\n\").fill(\"0\"));\n\n        const result = witness.slice(input.msg.length + 2, input.msg.length * 2 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"should reveal the payee name correctly\", async () => {\n        const witness = await subject(input);\n\n        const expected = Array(textToAsciiArray(\"<td>Amount:</td>\\r\\n<td>SGD\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"300.00\")).fill(\"0\")\n            .concat(textToAsciiArray(\"</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>From:</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>PayLah! Wallet (Mobile ending \")).fill(\"0\")\n            .concat(textToAsciiArray(\"1111\")).fill(\"0\")\n            .concat(textToAsciiArray(\")</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>To:</td>\\r\\n<td>\")).fill(\"0\")\n            .concat(textToAsciiArray(\"Steven 'O K-M Jr. \"))     // TODO: the space is included in regex extraction\n            .concat(textToAsciiArray(\"(Mobile ending 2222)</td>\\r\\n\").fill(\"0\"));\n\n        const result = witness.slice(input.msg.length * 2 + 2, input.msg.length * 3 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"should reveal the payee mobile num correctly\", async () => {\n        const witness = await subject(input);\n\n        const expected = Array(textToAsciiArray(\"<td>Amount:</td>\\r\\n<td>SGD\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"300.00\")).fill(\"0\")\n            .concat(textToAsciiArray(\"</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>From:</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>PayLah! Wallet (Mobile ending \")).fill(\"0\")\n            .concat(textToAsciiArray(\"1111\")).fill(\"0\")\n            .concat(textToAsciiArray(\")</td>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"</tr>\\r\\n<tr>\\r\\n\").fill(\"0\"))\n            .concat(textToAsciiArray(\"<td>To:</td>\\r\\n<td>Steven 'O K-M Jr. (Mobile ending \")).fill(\"0\")\n            .concat(textToAsciiArray(\"2222\"))\n            .concat(textToAsciiArray(\")</td>\\r\\n\").fill(\"0\"));\n\n        const result = witness.slice(input.msg.length * 3 + 2, input.msg.length * 4 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        input = {\n            \"msg\": textToAsciiArrayPadded(\n                \"<td>Amount:</td>\\r\\n<td>SGD300.00</td>\\r\\n\" +\n                \"</tr>\\r\\n<tr>\\r\\n\" +\n                \"<td>From:</td>\\r\\n\" +\n                \"<td>PayLah! Wallet (Mobile ending 1111)</td>\\r\\n\" +\n                \"</tr>\\r\\n<tr>\\r\\n\" +\n                \"<td>To:</td>\\r\\n\" +\n                \"<td>WISE ASIA-PACIFIC PTE LTD</td>\\r\\n\"        // Replace payee name with company name\n            )\n        };\n\n        const witness = await subject(input);\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/regexes/paylah_payment_id.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Paylah Payment ID\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_paylah_payment_id.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_paylah_payment_id\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        // No commas in payment_id.\n        const input = {\n            \"msg\": textToAsciiArray(\"Transaction Ref: 55941571702351184917<\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"Transaction Ref: 55941571702351184917<\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"Transaction Ref: 55941571702351184917<\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"Transaction Ref: \").length).fill(\"0\")\n            .concat(textToAsciiArray(\"55941571702351184917\"))\n            .concat(Array(textToAsciiArray(\"<\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"Transaction Ref: 559415717023511849170\")   // Remove the `<`\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/regexes/paylah_subject.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Paylah Subject\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_paylah_subject.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_paylah_subject\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"subject:Transaction Alerts\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"subject:Transaction Alerts\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"subject:Transaction Alertz\\r\\n\")   // z instead of s\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/paylah/test/regexes/paylah_timestamp.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Paylah timestamp\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_paylah_timestamp.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_paylah_timestamp\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; d=dbs.com; t=1698260687; h=Fro\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; d=dbs.com; t=1698260687; h=Fro\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; d=dbs.com; t=1698260687; h=Fro\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"xftkly; d=dbs.com; t=\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"1698260687\"))\n            .concat(Array(textToAsciiArray(\"; h=Fro\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; D=dbs.com; t=1698260687; h=Fro\")     // D instead of d\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/paylah/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\",  \"test/regexes/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/stubs/email-verifier.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/mimcsponge.circom\";\n// include \"./helpers/sha.circom\";\n\ntemplate EmailVerifier(max_header_bytes, max_body_bytes, n, k, ignore_body_hash_check) {\n    signal input in_padded[max_header_bytes];\n    signal input pubkey[k];\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Fill it with 256 zeros\n    signal output sha[256];\n    signal output pubkey_hash;\n\n   \n    if (ignore_body_hash_check != 1) {\n        signal input body_hash_idx;\n        signal input precomputed_sha[32];\n        signal input in_body_padded[max_body_bytes];\n        signal input in_body_len_padded_bytes;\n    }\n\n    // signal output sha[256] <== Sha256Bytes(max_header_bytes)(in_padded, in_len_padded_bytes);\n\n    // Fill random values for outputs\n    for (var i = 0; i < 256; i++) {\n        sha[i] <== i;\n    }\n\n    // Calculate the hash (MIMC) of public key and produce as an output\n    // This can be used to verify the public key is correct in contract without requiring the actual key\n    component hasher = MiMCSponge(k, 220, 1);\n    hasher.ins <== pubkey;\n    hasher.k <== 123;\n    pubkey_hash <== hasher.outs[0];\n}"
  },
  {
    "path": "circuits-circom/circuits/utils/ceil.circom",
    "content": "pragma circom 2.1.9;\n\nfunction ceil(value, precision) {\n    return (value + precision - 1) \\ precision * precision;\n}"
  },
  {
    "path": "circuits-circom/circuits/utils/email_nullifier.circom",
    "content": "pragma circom 2.1.9;\n\ninclude \"circomlib/circuits/poseidon.circom\";\n\n// Nullifies a email using the header hash and a commitment to a random value\n// Adapted from email-wallet https://github.com/zkemail/email-wallet\ntemplate EmailNullifier() {\n    signal input header_hash[256];\n    signal input cm_rand;\n\n    signal output email_nullifier;\n\n    var field_pack_bits = 248;\n\n    // Pack header hash into 1 int of size 248 bits\n    signal header_hash_int[field_pack_bits+1];\n    header_hash_int[0] <== 0;\n    for(var i = 0; i < field_pack_bits; i++) {\n        header_hash_int[i+1] <== 2 * header_hash_int[i] + header_hash[i];\n    }\n    signal email_nullifier_input[2];\n    email_nullifier_input[0] <== cm_rand;\n    email_nullifier_input[1] <== header_hash_int[field_pack_bits];\n    email_nullifier <== Poseidon(2)(email_nullifier_input);\n}"
  },
  {
    "path": "circuits-circom/circuits/utils/hash_sign_gen_rand.circom",
    "content": "pragma circom 2.1.9;\n\ninclude \"circomlib/circuits/poseidon.circom\";\n\n// Adapted from email-wallet: https://github.com/zkemail/email-wallet/blob/783700a03b1cb3b07604502c41c2cbcabc87789f/packages/circuits/src/utils/hash_pubkey_and_sign.circom\ntemplate HashSignGenRand(n,k) {\n    signal input signature[k];\n\n    signal output cm_rand;\n\n    var k2_chunked_size = k >> 1;\n    if(k % 2 == 1) {\n        k2_chunked_size += 1;\n    }\n\n    signal cm_rand_input[k2_chunked_size];\n    for(var i = 0; i < k2_chunked_size; i++) {\n        if(i==k2_chunked_size-1 && k2_chunked_size % 2 == 1) {\n            cm_rand_input[i] <== signature[2*i];\n        } else {\n            cm_rand_input[i] <== signature[2*i] + (1<<n) * signature[2*i+1];\n        }\n    }\n    cm_rand <== Poseidon(k2_chunked_size)(cm_rand_input);\n}"
  },
  {
    "path": "circuits-circom/circuits/utils/test-utils/index.ts",
    "content": "export * from \"./utils\";"
  },
  {
    "path": "circuits-circom/circuits/utils/test-utils/utils.ts",
    "content": "export function bytesToPacked(arr) {\n    // Convert into bigint from string\n    let arrInt = arr.map(BigInt);\n    let n = arrInt.length;\n    let out = BigInt(0);\n    for (let k = 0; k < n; k++) {\n        out += arrInt[k] * BigInt(2 ** (8 * k));  // little endian\n    }\n    return out;\n}\n\nexport function chunkArray(arr, chunkSize, length) {\n    let chunks = [] as any[];\n    for (let i = 0; i < length; i += chunkSize) {\n        let chunk = arr.slice(i, i + chunkSize);\n        if (chunk.length < chunkSize) {\n            chunk = chunk.concat(new Array(chunkSize - chunk.length).fill('0'));\n        }\n        chunks.push(chunk);\n    }\n    return chunks;\n}\n\nexport function chunkedBytesToBigInt(chunks: string[], bytesPerChunk: number): bigint {\n    let result = BigInt(0);\n    for (let i = 0; i < chunks.length; ++i) {\n        // Convert each string chunk to a bigint and shift it to its proper position\n        const chunkBigInt = BigInt(chunks[i]);\n        result += chunkBigInt << BigInt(i * bytesPerChunk);\n    }\n    return result;\n}\n\nexport function packNullifier(header_hash) {\n    const field_pack_bits = 248;\n    let header_hash_int = new Array(field_pack_bits + 1).fill(0n);  // Initialize to BigInt zeros\n\n    // Initialize the first element to 0 as per the Circom code\n    header_hash_int[0] = 0n;\n\n    let currentBitIndex = 0;\n\n    // Loop through each byte in header_hash\n    for (let i = 0; i < header_hash.length; i++) {\n        const byte = header_hash[i];\n\n        // Convert the byte to its 8-bit binary representation\n        const byteAsBinary = byte.toString(2).padStart(8, '0');\n\n        // Loop through each bit in the binary representation\n        for (let j = 0; j < 8; j++) {\n            if (currentBitIndex >= field_pack_bits) {\n                break;  // Stop if we've reached the target bit size\n            }\n\n            // Convert the current bit to a BigInt and use it in the packing operation\n            const bit = BigInt(Number(byteAsBinary[j]));\n            header_hash_int[currentBitIndex + 1] = 2n * header_hash_int[currentBitIndex] + bit;\n\n            currentBitIndex++;\n        }\n    }\n\n    // The packed integer is stored in header_hash_int[field_pack_bits]\n    const packedNullifier = header_hash_int[field_pack_bits];\n\n    return packedNullifier;\n}\n\n\nexport function hashSignatureGenRand(signature, n, k, poseidon) {\n\n    let k2_chunked_size = k >> 1;\n    if (k % 2 == 1) {\n        k2_chunked_size += 1;\n    }\n\n    let cm_rand_input = new Array(k2_chunked_size).fill(0n);\n    for (let i = 0; i < k2_chunked_size; i++) {\n        if (i == k2_chunked_size - 1 && k2_chunked_size % 2 == 1) {\n            cm_rand_input[i] = BigInt(signature[2 * i]);\n        } else {\n            cm_rand_input[i] = BigInt(signature[2 * i]) + (1n << BigInt(n)) * BigInt(signature[2 * i + 1]);\n        }\n    }\n\n    let cm_rand = poseidon(cm_rand_input);\n    return cm_rand;\n}\n\nexport function base64ToByteArray(base64Array) {\n    const base64String = base64Array.map(base64Val => String.fromCharCode(parseInt(base64Val, 10))).join('');\n    let binaryString = atob(base64String);\n    let stringArray = new Array(binaryString.length);\n\n    for (let i = 0; i < binaryString.length; i++) {\n        stringArray[i] = binaryString.charCodeAt(i).toString();\n    }\n\n    return stringArray;\n}\n\nexport function packedToBytes(packed) {\n    const bytes = [];\n    while (packed > 0) {\n        // Extract the least significant byte\n        let byte = Number(packed & BigInt(0xFF));\n        bytes.push(byte);\n\n        // Shift right by 8 bits to process the next byte\n        packed >>= BigInt(8);\n    }\n    return bytes;\n}"
  },
  {
    "path": "circuits-circom/circuits/venmo/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAkgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQALIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAwgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAOIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA8gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFEEQajYCFAwBCwsDQCAAIAAoAhAiAUEBazYCECABBEAgACAAKAIUIgFBAWo2AhQgACABLQAAIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDAwBCwsgACAAKAIYQfH/A3A2AhggACAAKAIMQfH/A3A2AgwLIAAgACgCGCAAKAIMQRB0cjYCHAsgACgCHCEAIANBEGokACAAC1IBAn9BkJcBKAIAIgEgAEEDakF8cSICaiEAAkAgAkEAIAAgAU0bDQAgAD8AQRB0SwRAIAAQDEUNAQtBkJcBIAA2AgAgAQ8LQbSbAUEwNgIAQX8LvAIBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQoAghFBEAgBCAEKAIYQQhqNgIICwJAIAQpAxAgBCgCGCkDMFoEQCAEKAIIQRJBABAUIARBADYCHAwBCwJAIAQoAgxBCHFFBEAgBCgCGCgCQCAEKQMQp0EEdGooAgQNAQsgBCgCGCgCQCAEKQMQp0EEdGooAgBFBEAgBCgCCEESQQAQFCAEQQA2AhwMAgsCQCAEKAIYKAJAIAQpAxCnQQR0ai0ADEEBcUUNACAEKAIMQQhxDQAgBCgCCEEXQQAQFCAEQQA2AhwMAgsgBCAEKAIYKAJAIAQpAxCnQQR0aigCADYCHAwBCyAEIAQoAhgoAkAgBCkDEKdBBHRqKAIENgIcCyAEKAIcIQAgBEEgaiQAIAALhAEBAX8jAEEQayIBJAAgASAANgIIIAFB2AAQGCIANgIEAkAgAEUEQCABQQA2AgwMAQsCQCABKAIIBEAgASgCBCABKAIIQdgAEBkaDAELIAEoAgQQUwsgASgCBEEANgIAIAEoAgRBAToABSABIAEoAgQ2AgwLIAEoAgwhACABQRBqJAAgAAtvAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGCADKAIQrRAeNgIMAkAgAygCDEUEQCADQX82AhwMAQsgAygCDCADKAIUIAMoAhAQGRogA0EANgIcCyADKAIcGiADQSBqJAALogEBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQgBCgCDCAEKQMQECkiADYCBAJAIABFBEAgBCgCCEEOQQAQFCAEQQA2AhwMAQsgBCgCGCAEKAIEKAIEIAQpAxAgBCgCCBBkQQBIBEAgBCgCBBAWIARBADYCHAwBCyAEIAQoAgQ2AhwLIAQoAhwhACAEQSBqJAAgAAugAQEBfyMAQSBrIgMkACADIAA2AhQgAyABNgIQIAMgAjcDCCADIAMoAhA2AgQCQCADKQMIQghUBEAgA0J/NwMYDAELIwBBEGsiACADKAIUNgIMIAAoAgwoAgAhACADKAIEIAA2AgAjAEEQayIAIAMoAhQ2AgwgACgCDCgCBCEAIAMoAgQgADYCBCADQgg3AxgLIAMpAxghAiADQSBqJAAgAguDAQIDfwF+AkAgAEKAgICAEFQEQCAAIQUMAQsDQCABQQFrIgEgACAAQgqAIgVCCn59p0EwcjoAACAAQv////+fAVYhAiAFIQAgAg0ACwsgBaciAgRAA0AgAUEBayIBIAIgAkEKbiIDQQpsa0EwcjoAACACQQlLIQQgAyECIAQNAAsLIAELPwEBfyMAQRBrIgIgADYCDCACIAE2AgggAigCDARAIAIoAgwgAigCCCgCADYCACACKAIMIAIoAggoAgQ2AgQLC9IIAQJ/IwBBIGsiBCQAIAQgADYCGCAEIAE2AhQgBCACNgIQIAQgAzYCDAJAIAQoAhhFBEAgBCgCFARAIAQoAhRBADYCAAsgBEGVFTYCHAwBCyAEKAIQQcAAcUUEQCAEKAIYKAIIRQRAIAQoAhhBABA6GgsCQAJAAkAgBCgCEEGAAXFFDQAgBCgCGCgCCEEBRg0AIAQoAhgoAghBAkcNAQsgBCgCGCgCCEEERw0BCyAEKAIYKAIMRQRAIAQoAhgoAgAhASAEKAIYLwEEIQIgBCgCGEEQaiEDIAQoAgwhBSMAQTBrIgAkACAAIAE2AiggACACNgIkIAAgAzYCICAAIAU2AhwgACAAKAIoNgIYAkAgACgCJEUEQCAAKAIgBEAgACgCIEEANgIACyAAQQA2AiwMAQsgAEEBNgIQIABBADYCDANAIAAoAgwgACgCJEkEQCMAQRBrIgEgACgCGCAAKAIMai0AAEEBdEGgFWovAQA2AggCQCABKAIIQYABSQRAIAFBATYCDAwBCyABKAIIQYAQSQRAIAFBAjYCDAwBCyABKAIIQYCABEkEQCABQQM2AgwMAQsgAUEENgIMCyAAIAEoAgwgACgCEGo2AhAgACAAKAIMQQFqNgIMDAELCyAAIAAoAhAQGCIBNgIUIAFFBEAgACgCHEEOQQAQFCAAQQA2AiwMAQsgAEEANgIIIABBADYCDANAIAAoAgwgACgCJEkEQCAAKAIUIAAoAghqIQIjAEEQayIBIAAoAhggACgCDGotAABBAXRBoBVqLwEANgIIIAEgAjYCBAJAIAEoAghBgAFJBEAgASgCBCABKAIIOgAAIAFBATYCDAwBCyABKAIIQYAQSQRAIAEoAgQgASgCCEEGdkEfcUHAAXI6AAAgASgCBCABKAIIQT9xQYABcjoAASABQQI2AgwMAQsgASgCCEGAgARJBEAgASgCBCABKAIIQQx2QQ9xQeABcjoAACABKAIEIAEoAghBBnZBP3FBgAFyOgABIAEoAgQgASgCCEE/cUGAAXI6AAIgAUEDNgIMDAELIAEoAgQgASgCCEESdkEHcUHwAXI6AAAgASgCBCABKAIIQQx2QT9xQYABcjoAASABKAIEIAEoAghBBnZBP3FBgAFyOgACIAEoAgQgASgCCEE/cUGAAXI6AAMgAUEENgIMCyAAIAEoAgwgACgCCGo2AgggACAAKAIMQQFqNgIMDAELCyAAKAIUIAAoAhBBAWtqQQA6AAAgACgCIARAIAAoAiAgACgCEEEBazYCAAsgACAAKAIUNgIsCyAAKAIsIQEgAEEwaiQAIAQoAhggATYCDCABRQRAIARBADYCHAwECwsgBCgCFARAIAQoAhQgBCgCGCgCEDYCAAsgBCAEKAIYKAIMNgIcDAILCyAEKAIUBEAgBCgCFCAEKAIYLwEENgIACyAEIAQoAhgoAgA2AhwLIAQoAhwhACAEQSBqJAAgAAs5AQF/IwBBEGsiASAANgIMQQAhACABKAIMLQAAQQFxBH8gASgCDCkDECABKAIMKQMIUQVBAAtBAXEL7wIBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCC0AKEEBcQRAIAFBfzYCDAwBCyABKAIIKAIkQQNGBEAgASgCCEEMakEXQQAQFCABQX82AgwMAQsCQCABKAIIKAIgBEACfyMAQRBrIgAgASgCCDYCDCAAKAIMKQMYQsAAg1ALBEAgASgCCEEMakEdQQAQFCABQX82AgwMAwsMAQsgASgCCCgCAARAIAEoAggoAgAQSEEASARAIAEoAghBDGogASgCCCgCABAXIAFBfzYCDAwDCwsgASgCCEEAQgBBABAgQgBTBEAgASgCCCgCAARAIAEoAggoAgAQLxoLIAFBfzYCDAwCCwsgASgCCEEAOgA0IAEoAghBADoANSMAQRBrIgAgASgCCEEMajYCDCAAKAIMBEAgACgCDEEANgIAIAAoAgxBADYCBAsgASgCCCIAIAAoAiBBAWo2AiAgAUEANgIMCyABKAIMIQAgAUEQaiQAIAALdQIBfwF+IwBBEGsiASQAIAEgADYCBAJAIAEoAgQtAChBAXEEQCABQn83AwgMAQsgASgCBCgCIEUEQCABKAIEQQxqQRJBABAUIAFCfzcDCAwBCyABIAEoAgRBAEIAQQcQIDcDCAsgASkDCCECIAFBEGokACACC50BAQF/IwBBEGsiASAANgIIAkACQAJAIAEoAghFDQAgASgCCCgCIEUNACABKAIIKAIkDQELIAFBATYCDAwBCyABIAEoAggoAhw2AgQCQAJAIAEoAgRFDQAgASgCBCgCACABKAIIRw0AIAEoAgQoAgRBtP4ASQ0AIAEoAgQoAgRB0/4ATQ0BCyABQQE2AgwMAQsgAUEANgIMCyABKAIMC4ABAQN/IwBBEGsiAiAANgIMIAIgATYCCCACKAIIQQh2IQEgAigCDCgCCCEDIAIoAgwiBCgCFCEAIAQgAEEBajYCFCAAIANqIAE6AAAgAigCCEH/AXEhASACKAIMKAIIIQMgAigCDCICKAIUIQAgAiAAQQFqNgIUIAAgA2ogAToAAAuZBQEBfyMAQUBqIgQkACAEIAA2AjggBCABNwMwIAQgAjYCLCAEIAM2AiggBEHIABAYIgA2AiQCQCAARQRAIARBADYCPAwBCyAEKAIkQgA3AzggBCgCJEIANwMYIAQoAiRCADcDMCAEKAIkQQA2AgAgBCgCJEEANgIEIAQoAiRCADcDCCAEKAIkQgA3AxAgBCgCJEEANgIoIAQoAiRCADcDIAJAIAQpAzBQBEBBCBAYIQAgBCgCJCAANgIEIABFBEAgBCgCJBAVIAQoAihBDkEAEBQgBEEANgI8DAMLIAQoAiQoAgRCADcDAAwBCyAEKAIkIAQpAzBBABDCAUEBcUUEQCAEKAIoQQ5BABAUIAQoAiQQMiAEQQA2AjwMAgsgBEIANwMIIARCADcDGCAEQgA3AxADQCAEKQMYIAQpAzBUBEAgBCgCOCAEKQMYp0EEdGopAwhQRQRAIAQoAjggBCkDGKdBBHRqKAIARQRAIAQoAihBEkEAEBQgBCgCJBAyIARBADYCPAwFCyAEKAIkKAIAIAQpAxCnQQR0aiAEKAI4IAQpAxinQQR0aigCADYCACAEKAIkKAIAIAQpAxCnQQR0aiAEKAI4IAQpAxinQQR0aikDCDcDCCAEKAIkKAIEIAQpAxinQQN0aiAEKQMINwMAIAQgBCgCOCAEKQMYp0EEdGopAwggBCkDCHw3AwggBCAEKQMQQgF8NwMQCyAEIAQpAxhCAXw3AxgMAQsLIAQoAiQgBCkDEDcDCCAEKAIkIAQoAiwEfkIABSAEKAIkKQMICzcDGCAEKAIkKAIEIAQoAiQpAwinQQN0aiAEKQMINwMAIAQoAiQgBCkDCDcDMAsgBCAEKAIkNgI8CyAEKAI8IQAgBEFAayQAIAALngEBAX8jAEEgayIEJAAgBCAANgIYIAQgATcDECAEIAI2AgwgBCADNgIIIAQgBCgCGCAEKQMQIAQoAgwgBCgCCBA/IgA2AgQCQCAARQRAIARBADYCHAwBCyAEIAQoAgQoAjBBACAEKAIMIAQoAggQRiIANgIAIABFBEAgBEEANgIcDAELIAQgBCgCADYCHAsgBCgCHCEAIARBIGokACAAC5wIAQt/IABFBEAgARAYDwsgAUFATwRAQbSbAUEwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEGIABBCGsiBSgCBCIJQXhxIQQCQCAJQQNxRQRAQQAgBkGAAkkNAhogBkEEaiAETQRAIAUhAiAEIAZrQcSfASgCAEEBdE0NAgtBAAwCCyAEIAVqIQcCQCAEIAZPBEAgBCAGayIDQRBJDQEgBSAJQQFxIAZyQQJyNgIEIAUgBmoiAiADQQNyNgIEIAcgBygCBEEBcjYCBCACIAMQxgEMAQsgB0H8mwEoAgBGBEBB8JsBKAIAIARqIgQgBk0NAiAFIAlBAXEgBnJBAnI2AgQgBSAGaiIDIAQgBmsiAkEBcjYCBEHwmwEgAjYCAEH8mwEgAzYCAAwBCyAHQfibASgCAEYEQEHsmwEoAgAgBGoiAyAGSQ0CAkAgAyAGayICQRBPBEAgBSAJQQFxIAZyQQJyNgIEIAUgBmoiBCACQQFyNgIEIAMgBWoiAyACNgIAIAMgAygCBEF+cTYCBAwBCyAFIAlBAXEgA3JBAnI2AgQgAyAFaiICIAIoAgRBAXI2AgRBACECQQAhBAtB+JsBIAQ2AgBB7JsBIAI2AgAMAQsgBygCBCIDQQJxDQEgA0F4cSAEaiIKIAZJDQEgCiAGayEMAkAgA0H/AU0EQCAHKAIIIgQgA0EDdiICQQN0QYycAWpGGiAEIAcoAgwiA0YEQEHkmwFB5JsBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBygCGCELAkAgByAHKAIMIghHBEAgBygCCCICQfSbASgCAEkaIAIgCDYCDCAIIAI2AggMAQsCQCAHQRRqIgQoAgAiAg0AIAdBEGoiBCgCACICDQBBACEIDAELA0AgBCEDIAIiCEEUaiIEKAIAIgINACAIQRBqIQQgCCgCECICDQALIANBADYCAAsgC0UNAAJAIAcgBygCHCIDQQJ0QZSeAWoiAigCAEYEQCACIAg2AgAgCA0BQeibAUHomwEoAgBBfiADd3E2AgAMAgsgC0EQQRQgCygCECAHRhtqIAg2AgAgCEUNAQsgCCALNgIYIAcoAhAiAgRAIAggAjYCECACIAg2AhgLIAcoAhQiAkUNACAIIAI2AhQgAiAINgIYCyAMQQ9NBEAgBSAJQQFxIApyQQJyNgIEIAUgCmoiAiACKAIEQQFyNgIEDAELIAUgCUEBcSAGckECcjYCBCAFIAZqIgMgDEEDcjYCBCAFIApqIgIgAigCBEEBcjYCBCADIAwQxgELIAUhAgsgAgsiAgRAIAJBCGoPCyABEBgiBUUEQEEADwsgBSAAQXxBeCAAQQRrKAIAIgJBA3EbIAJBeHFqIgIgASABIAJLGxAZGiAAEBUgBQtDAQN/AkAgAkUNAANAIAAtAAAiBCABLQAAIgVGBEAgAUEBaiEBIABBAWohACACQQFrIgINAQwCCwsgBCAFayEDCyADC4wDAQF/IwBBIGsiBCQAIAQgADYCGCAEIAE7ARYgBCACNgIQIAQgAzYCDAJAIAQvARZFBEAgBEEANgIcDAELAkACQAJAAkAgBCgCEEGAMHEiAARAIABBgBBGDQEgAEGAIEYNAgwDCyAEQQA2AgQMAwsgBEECNgIEDAILIARBBDYCBAwBCyAEKAIMQRJBABAUIARBADYCHAwBCyAEQRQQGCIANgIIIABFBEAgBCgCDEEOQQAQFCAEQQA2AhwMAQsgBC8BFkEBahAYIQAgBCgCCCAANgIAIABFBEAgBCgCCBAVIARBADYCHAwBCyAEKAIIKAIAIAQoAhggBC8BFhAZGiAEKAIIKAIAIAQvARZqQQA6AAAgBCgCCCAELwEWOwEEIAQoAghBADYCCCAEKAIIQQA2AgwgBCgCCEEANgIQIAQoAgQEQCAEKAIIIAQoAgQQOkEFRgRAIAQoAggQJCAEKAIMQRJBABAUIARBADYCHAwCCwsgBCAEKAIINgIcCyAEKAIcIQAgBEEgaiQAIAALNwEBfyMAQRBrIgEgADYCCAJAIAEoAghFBEAgAUEAOwEODAELIAEgASgCCC8BBDsBDgsgAS8BDguJAgEBfyMAQRBrIgEkACABIAA2AgwCQCABKAIMLQAFQQFxBEAgASgCDCgCAEECcUUNAQsgASgCDCgCMBAkIAEoAgxBADYCMAsCQCABKAIMLQAFQQFxBEAgASgCDCgCAEEIcUUNAQsgASgCDCgCNBAjIAEoAgxBADYCNAsCQCABKAIMLQAFQQFxBEAgASgCDCgCAEEEcUUNAQsgASgCDCgCOBAkIAEoAgxBADYCOAsCQCABKAIMLQAFQQFxBEAgASgCDCgCAEGAAXFFDQELIAEoAgwoAlQEQCABKAIMKAJUQQAgASgCDCgCVBAuEDMLIAEoAgwoAlQQFSABKAIMQQA2AlQLIAFBEGokAAvxAQEBfyMAQRBrIgEgADYCDCABKAIMQQA2AgAgASgCDEEAOgAEIAEoAgxBADoABSABKAIMQQE6AAYgASgCDEG/BjsBCCABKAIMQQo7AQogASgCDEEAOwEMIAEoAgxBfzYCECABKAIMQQA2AhQgASgCDEEANgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYCJAJAIABFBEAgBSgCKEEOQQAQFCAFQQA6AD8MAQsgBUEANgIgIAVBADYCGANAAn8jAEEQayIAIAUoAiQ2AgwgACgCDC0AAEEBcQsEfyAFKAIkEDBCBFoFQQALQQFxBEAgBSAFKAIkEB07ARYgBSAFKAIkEB07ARQgBSAFKAIkIAUvARStEB42AhAgBSgCEEUEQCAFKAIoQRVBABAUIAUoAiQQFiAFKAIYECMgBUEAOgA/DAMLIAUgBS8BFiAFLwEUIAUoAhAgBSgCMBBVIgA2AhwgAEUEQCAFKAIoQQ5BABAUIAUoAiQQFiAFKAIYECMgBUEAOgA/DAMLAkAgBSgCGARAIAUoAiAgBSgCHDYCACAFIAUoAhw2AiAMAQsgBSAFKAIcIgA2AiAgBSAANgIYCwwBCwsgBSgCJBBHQQFxRQRAIAUgBSgCJBAwPgIMIAUgBSgCJCAFKAIMrRAeNgIIAkACQCAFKAIMQQRPDQAgBSgCCEUNACAFKAIIQZEVIAUoAgwQT0UNAQsgBSgCKEEVQQAQFCAFKAIkEBYgBSgCGBAjIAVBADoAPwwCCwsgBSgCJBAWAkAgBSgCLARAIAUoAiwgBSgCGDYCAAwBCyAFKAIYECMLIAVBAToAPwsgBS0AP0EBcSEAIAVBQGskACAAC+8CAQF/IwBBIGsiAiQAIAIgADYCGCACIAE2AhQCQCACKAIYRQRAIAIgAigCFDYCHAwBCyACIAIoAhg2AggDQCACKAIIKAIABEAgAiACKAIIKAIANgIIDAELCwNAIAIoAhQEQCACIAIoAhQoAgA2AhAgAkEANgIEIAIgAigCGDYCDANAAkAgAigCDEUNAAJAIAIoAgwvAQggAigCFC8BCEcNACACKAIMLwEKIAIoAhQvAQpHDQAgAigCDC8BCgRAIAIoAgwoAgwgAigCFCgCDCACKAIMLwEKEE8NAQsgAigCDCIAIAAoAgQgAigCFCgCBEGABnFyNgIEIAJBATYCBAwBCyACIAIoAgwoAgA2AgwMAQsLIAIoAhRBADYCAAJAIAIoAgQEQCACKAIUECMMAQsgAigCCCACKAIUIgA2AgAgAiAANgIICyACIAIoAhA2AhQMAQsLIAIgAigCGDYCHAsgAigCHCEAIAJBIGokACAAC18BAX8jAEEQayICJAAgAiAANgIIIAIgAToAByACIAIoAghCARAeNgIAAkAgAigCAEUEQCACQX82AgwMAQsgAigCACACLQAHOgAAIAJBADYCDAsgAigCDBogAkEQaiQAC1QBAX8jAEEQayIBJAAgASAANgIIIAEgASgCCEIBEB42AgQCQCABKAIERQRAIAFBADoADwwBCyABIAEoAgQtAAA6AA8LIAEtAA8hACABQRBqJAAgAAucBgECfyMAQSBrIgIkACACIAA2AhggAiABNwMQAkAgAikDECACKAIYKQMwWgRAIAIoAhhBCGpBEkEAEBQgAkF/NgIcDAELIAIoAhgoAhhBAnEEQCACKAIYQQhqQRlBABAUIAJBfzYCHAwBCyACIAIoAhggAikDEEEAIAIoAhhBCGoQTSIANgIMIABFBEAgAkF/NgIcDAELIAIoAhgoAlAgAigCDCACKAIYQQhqEFlBAXFFBEAgAkF/NgIcDAELAn8gAigCGCEDIAIpAxAhASMAQTBrIgAkACAAIAM2AiggACABNwMgIABBATYCHAJAIAApAyAgACgCKCkDMFoEQCAAKAIoQQhqQRJBABAUIABBfzYCLAwBCwJAIAAoAhwNACAAKAIoKAJAIAApAyCnQQR0aigCBEUNACAAKAIoKAJAIAApAyCnQQR0aigCBCgCAEECcUUNAAJAIAAoAigoAkAgACkDIKdBBHRqKAIABEAgACAAKAIoIAApAyBBCCAAKAIoQQhqEE0iAzYCDCADRQRAIABBfzYCLAwECyAAIAAoAiggACgCDEEAQQAQWDcDEAJAIAApAxBCAFMNACAAKQMQIAApAyBRDQAgACgCKEEIakEKQQAQFCAAQX82AiwMBAsMAQsgAEEANgIMCyAAIAAoAiggACkDIEEAIAAoAihBCGoQTSIDNgIIIANFBEAgAEF/NgIsDAILIAAoAgwEQCAAKAIoKAJQIAAoAgwgACkDIEEAIAAoAihBCGoQdEEBcUUEQCAAQX82AiwMAwsLIAAoAigoAlAgACgCCCAAKAIoQQhqEFlBAXFFBEAgACgCKCgCUCAAKAIMQQAQWRogAEF/NgIsDAILCyAAKAIoKAJAIAApAyCnQQR0aigCBBA3IAAoAigoAkAgACkDIKdBBHRqQQA2AgQgACgCKCgCQCAAKQMgp0EEdGoQXiAAQQA2AiwLIAAoAiwhAyAAQTBqJAAgAwsEQCACQX82AhwMAQsgAigCGCgCQCACKQMQp0EEdGpBAToADCACQQA2AhwLIAIoAhwhACACQSBqJAAgAAulBAEBfyMAQTBrIgUkACAFIAA2AiggBSABNwMgIAUgAjYCHCAFIAM6ABsgBSAENgIUAkAgBSgCKCAFKQMgQQBBABA/RQRAIAVBfzYCLAwBCyAFKAIoKAIYQQJxBEAgBSgCKEEIakEZQQAQFCAFQX82AiwMAQsgBSAFKAIoKAJAIAUpAyCnQQR0ajYCECAFAn8gBSgCECgCAARAIAUoAhAoAgAvAQhBCHYMAQtBAws6AAsgBQJ/IAUoAhAoAgAEQCAFKAIQKAIAKAJEDAELQYCA2I14CzYCBEEBIQAgBSAFLQAbIAUtAAtGBH8gBSgCFCAFKAIERwVBAQtBAXE2AgwCQCAFKAIMBEAgBSgCECgCBEUEQCAFKAIQKAIAEEAhACAFKAIQIAA2AgQgAEUEQCAFKAIoQQhqQQ5BABAUIAVBfzYCLAwECwsgBSgCECgCBCAFKAIQKAIELwEIQf8BcSAFLQAbQQh0cjsBCCAFKAIQKAIEIAUoAhQ2AkQgBSgCECgCBCIAIAAoAgBBEHI2AgAMAQsgBSgCECgCBARAIAUoAhAoAgQiACAAKAIAQW9xNgIAAkAgBSgCECgCBCgCAEUEQCAFKAIQKAIEEDcgBSgCEEEANgIEDAELIAUoAhAoAgQgBSgCECgCBC8BCEH/AXEgBS0AC0EIdHI7AQggBSgCECgCBCAFKAIENgJECwsLIAVBADYCLAsgBSgCLCEAIAVBMGokACAAC90PAgF/AX4jAEFAaiIEJAAgBCAANgI0IARCfzcDKCAEIAE2AiQgBCACNgIgIAQgAzYCHAJAIAQoAjQoAhhBAnEEQCAEKAI0QQhqQRlBABAUIARCfzcDOAwBCyAEIAQoAjQpAzA3AxAgBCkDKEJ/UQRAIARCfzcDCCAEKAIcQYDAAHEEQCAEIAQoAjQgBCgCJCAEKAIcQQAQWDcDCAsgBCkDCEJ/UQRAIAQoAjQhASMAQUBqIgAkACAAIAE2AjQCQCAAKAI0KQM4IAAoAjQpAzBCAXxYBEAgACAAKAI0KQM4NwMYIAAgACkDGEIBhjcDEAJAIAApAxBCEFQEQCAAQhA3AxAMAQsgACkDEEKACFYEQCAAQoAINwMQCwsgACAAKQMQIAApAxh8NwMYIAAgACkDGKdBBHStNwMIIAApAwggACgCNCkDOKdBBHStVARAIAAoAjRBCGpBDkEAEBQgAEJ/NwM4DAILIAAgACgCNCgCQCAAKQMYp0EEdBBONgIkIAAoAiRFBEAgACgCNEEIakEOQQAQFCAAQn83AzgMAgsgACgCNCAAKAIkNgJAIAAoAjQgACkDGDcDOAsgACgCNCIBKQMwIQUgASAFQgF8NwMwIAAgBTcDKCAAKAI0KAJAIAApAyinQQR0ahC1ASAAIAApAyg3AzgLIAApAzghBSAAQUBrJAAgBCAFNwMIIAVCAFMEQCAEQn83AzgMAwsLIAQgBCkDCDcDKAsCQCAEKAIkRQ0AIAQoAjQhASAEKQMoIQUgBCgCJCECIAQoAhwhAyMAQUBqIgAkACAAIAE2AjggACAFNwMwIAAgAjYCLCAAIAM2AigCQCAAKQMwIAAoAjgpAzBaBEAgACgCOEEIakESQQAQFCAAQX82AjwMAQsgACgCOCgCGEECcQRAIAAoAjhBCGpBGUEAEBQgAEF/NgI8DAELAkACQCAAKAIsRQ0AIAAoAiwsAABFDQAgACAAKAIsIAAoAiwQLkH//wNxIAAoAiggACgCOEEIahBQIgE2AiAgAUUEQCAAQX82AjwMAwsCQCAAKAIoQYAwcQ0AIAAoAiBBABA6QQNHDQAgACgCIEECNgIICwwBCyAAQQA2AiALIAAgACgCOCAAKAIsQQBBABBYIgU3AxACQCAFQgBTDQAgACkDECAAKQMwUQ0AIAAoAiAQJCAAKAI4QQhqQQpBABAUIABBfzYCPAwBCwJAIAApAxBCAFMNACAAKQMQIAApAzBSDQAgACgCIBAkIABBADYCPAwBCyAAIAAoAjgoAkAgACkDMKdBBHRqNgIkAkAgACgCJCgCAARAIAAgACgCJCgCACgCMCAAKAIgEIYBQQBHOgAfDAELIABBADoAHwsCQCAALQAfQQFxDQAgACgCJCgCBA0AIAAoAiQoAgAQQCEBIAAoAiQgATYCBCABRQRAIAAoAjhBCGpBDkEAEBQgACgCIBAkIABBfzYCPAwCCwsgAAJ/IAAtAB9BAXEEQCAAKAIkKAIAKAIwDAELIAAoAiALQQBBACAAKAI4QQhqEEYiATYCCCABRQRAIAAoAiAQJCAAQX82AjwMAQsCQCAAKAIkKAIEBEAgACAAKAIkKAIEKAIwNgIEDAELAkAgACgCJCgCAARAIAAgACgCJCgCACgCMDYCBAwBCyAAQQA2AgQLCwJAIAAoAgQEQCAAIAAoAgRBAEEAIAAoAjhBCGoQRiIBNgIMIAFFBEAgACgCIBAkIABBfzYCPAwDCwwBCyAAQQA2AgwLIAAoAjgoAlAgACgCCCAAKQMwQQAgACgCOEEIahB0QQFxRQRAIAAoAiAQJCAAQX82AjwMAQsgACgCDARAIAAoAjgoAlAgACgCDEEAEFkaCwJAIAAtAB9BAXEEQCAAKAIkKAIEBEAgACgCJCgCBCgCAEECcQRAIAAoAiQoAgQoAjAQJCAAKAIkKAIEIgEgASgCAEF9cTYCAAJAIAAoAiQoAgQoAgBFBEAgACgCJCgCBBA3IAAoAiRBADYCBAwBCyAAKAIkKAIEIAAoAiQoAgAoAjA2AjALCwsgACgCIBAkDAELIAAoAiQoAgQoAgBBAnEEQCAAKAIkKAIEKAIwECQLIAAoAiQoAgQiASABKAIAQQJyNgIAIAAoAiQoAgQgACgCIDYCMAsgAEEANgI8CyAAKAI8IQEgAEFAayQAIAFFDQAgBCgCNCkDMCAEKQMQUgRAIAQoAjQoAkAgBCkDKKdBBHRqEHcgBCgCNCAEKQMQNwMwCyAEQn83AzgMAQsgBCgCNCgCQCAEKQMop0EEdGoQXgJAIAQoAjQoAkAgBCkDKKdBBHRqKAIARQ0AIAQoAjQoAkAgBCkDKKdBBHRqKAIEBEAgBCgCNCgCQCAEKQMop0EEdGooAgQoAgBBAXENAQsgBCgCNCgCQCAEKQMop0EEdGooAgRFBEAgBCgCNCgCQCAEKQMop0EEdGooAgAQQCEAIAQoAjQoAkAgBCkDKKdBBHRqIAA2AgQgAEUEQCAEKAI0QQhqQQ5BABAUIARCfzcDOAwDCwsgBCgCNCgCQCAEKQMop0EEdGooAgRBfjYCECAEKAI0KAJAIAQpAyinQQR0aigCBCIAIAAoAgBBAXI2AgALIAQoAjQoAkAgBCkDKKdBBHRqIAQoAiA2AgggBCAEKQMoNwM4CyAEKQM4IQUgBEFAayQAIAULqgEBAX8jAEEwayICJAAgAiAANgIoIAIgATcDICACQQA2AhwCQAJAIAIoAigoAiRBAUYEQCACKAIcRQ0BIAIoAhxBAUYNASACKAIcQQJGDQELIAIoAihBDGpBEkEAEBQgAkF/NgIsDAELIAIgAikDIDcDCCACIAIoAhw2AhAgAkF/QQAgAigCKCACQQhqQhBBDBAgQgBTGzYCLAsgAigCLCEAIAJBMGokACAAC6UyAwZ/AX4BfCMAQeAAayIEJAAgBCAANgJYIAQgATYCVCAEIAI2AlACQAJAIAQoAlRBAE4EQCAEKAJYDQELIAQoAlBBEkEAEBQgBEEANgJcDAELIAQgBCgCVDYCTCMAQRBrIgAgBCgCWDYCDCAEIAAoAgwpAxg3A0BB4JoBKQMAQn9RBEAgBEF/NgIUIARBAzYCECAEQQc2AgwgBEEGNgIIIARBAjYCBCAEQQE2AgBB4JoBQQAgBBA0NwMAIARBfzYCNCAEQQ82AjAgBEENNgIsIARBDDYCKCAEQQo2AiQgBEEJNgIgQeiaAUEIIARBIGoQNDcDAAtB4JoBKQMAIAQpA0BB4JoBKQMAg1IEQCAEKAJQQRxBABAUIARBADYCXAwBC0HomgEpAwAgBCkDQEHomgEpAwCDUgRAIAQgBCgCTEEQcjYCTAsgBCgCTEEYcUEYRgRAIAQoAlBBGUEAEBQgBEEANgJcDAELIAQoAlghASAEKAJQIQIjAEHQAGsiACQAIAAgATYCSCAAIAI2AkQgAEEIahA7AkAgACgCSCAAQQhqEDkEQCMAQRBrIgEgACgCSDYCDCAAIAEoAgxBDGo2AgQjAEEQayIBIAAoAgQ2AgwCQCABKAIMKAIAQQVHDQAjAEEQayIBIAAoAgQ2AgwgASgCDCgCBEEsRw0AIABBADYCTAwCCyAAKAJEIAAoAgQQRSAAQX82AkwMAQsgAEEBNgJMCyAAKAJMIQEgAEHQAGokACAEIAE2AjwCQAJAAkAgBCgCPEEBag4CAAECCyAEQQA2AlwMAgsgBCgCTEEBcUUEQCAEKAJQQQlBABAUIARBADYCXAwCCyAEIAQoAlggBCgCTCAEKAJQEGk2AlwMAQsgBCgCTEECcQRAIAQoAlBBCkEAEBQgBEEANgJcDAELIAQoAlgQSEEASARAIAQoAlAgBCgCWBAXIARBADYCXAwBCwJAIAQoAkxBCHEEQCAEIAQoAlggBCgCTCAEKAJQEGk2AjgMAQsgBCgCWCEAIAQoAkwhASAEKAJQIQIjAEHwAGsiAyQAIAMgADYCaCADIAE2AmQgAyACNgJgIANBIGoQOwJAIAMoAmggA0EgahA5QQBIBEAgAygCYCADKAJoEBcgA0EANgJsDAELIAMpAyBCBINQBEAgAygCYEEEQYoBEBQgA0EANgJsDAELIAMgAykDODcDGCADIAMoAmggAygCZCADKAJgEGkiADYCXCAARQRAIANBADYCbAwBCwJAIAMpAxhQRQ0AIAMoAmgQngFBAXFFDQAgAyADKAJcNgJsDAELIAMoAlwhACADKQMYIQkjAEHgAGsiAiQAIAIgADYCWCACIAk3A1ACQCACKQNQQhZUBEAgAigCWEEIakETQQAQFCACQQA2AlwMAQsgAgJ+IAIpA1BCqoAEVARAIAIpA1AMAQtCqoAECzcDMCACKAJYKAIAQgAgAikDMH1BAhAnQQBIBEAjAEEQayIAIAIoAlgoAgA2AgwgAiAAKAIMQQxqNgIIAkACfyMAQRBrIgAgAigCCDYCDCAAKAIMKAIAQQRGCwRAIwBBEGsiACACKAIINgIMIAAoAgwoAgRBFkYNAQsgAigCWEEIaiACKAIIEEUgAkEANgJcDAILCyACIAIoAlgoAgAQSSIJNwM4IAlCAFMEQCACKAJYQQhqIAIoAlgoAgAQFyACQQA2AlwMAQsgAiACKAJYKAIAIAIpAzBBACACKAJYQQhqEEIiADYCDCAARQRAIAJBADYCXAwBCyACQn83AyAgAkEANgJMIAIpAzBCqoAEWgRAIAIoAgxCFBAsGgsgAkEQakETQQAQFCACIAIoAgxCABAeNgJEA0ACQCACKAJEIQEgAigCDBAwQhJ9pyEFIwBBIGsiACQAIAAgATYCGCAAIAU2AhQgAEHsEjYCECAAQQQ2AgwCQAJAIAAoAhQgACgCDE8EQCAAKAIMDQELIABBADYCHAwBCyAAIAAoAhhBAWs2AggDQAJAIAAgACgCCEEBaiAAKAIQLQAAIAAoAhggACgCCGsgACgCFCAAKAIMa2oQqwEiATYCCCABRQ0AIAAoAghBAWogACgCEEEBaiAAKAIMQQFrEE8NASAAIAAoAgg2AhwMAgsLIABBADYCHAsgACgCHCEBIABBIGokACACIAE2AkQgAUUNACACKAIMIAIoAkQCfyMAQRBrIgAgAigCDDYCDCAAKAIMKAIEC2usECwaIAIoAlghASACKAIMIQUgAikDOCEJIwBB8ABrIgAkACAAIAE2AmggACAFNgJkIAAgCTcDWCAAIAJBEGo2AlQjAEEQayIBIAAoAmQ2AgwgAAJ+IAEoAgwtAABBAXEEQCABKAIMKQMQDAELQgALNwMwAkAgACgCZBAwQhZUBEAgACgCVEETQQAQFCAAQQA2AmwMAQsgACgCZEIEEB4oAABB0JaVMEcEQCAAKAJUQRNBABAUIABBADYCbAwBCwJAAkAgACkDMEIUVA0AIwBBEGsiASAAKAJkNgIMIAEoAgwoAgQgACkDMKdqQRRrKAAAQdCWmThHDQAgACgCZCAAKQMwQhR9ECwaIAAoAmgoAgAhBSAAKAJkIQYgACkDWCEJIAAoAmgoAhQhByAAKAJUIQgjAEGwAWsiASQAIAEgBTYCqAEgASAGNgKkASABIAk3A5gBIAEgBzYClAEgASAINgKQASMAQRBrIgUgASgCpAE2AgwgAQJ+IAUoAgwtAABBAXEEQCAFKAIMKQMQDAELQgALNwMYIAEoAqQBQgQQHhogASABKAKkARAdQf//A3E2AhAgASABKAKkARAdQf//A3E2AgggASABKAKkARAxNwM4AkAgASkDOEL///////////8AVgRAIAEoApABQQRBFhAUIAFBADYCrAEMAQsgASkDOEI4fCABKQMYIAEpA5gBfFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELAkACQCABKQM4IAEpA5gBVA0AIAEpAzhCOHwgASkDmAECfiMAQRBrIgUgASgCpAE2AgwgBSgCDCkDCAt8Vg0AIAEoAqQBIAEpAzggASkDmAF9ECwaIAFBADoAFwwBCyABKAKoASABKQM4QQAQJ0EASARAIAEoApABIAEoAqgBEBcgAUEANgKsAQwCCyABIAEoAqgBQjggAUFAayABKAKQARBCIgU2AqQBIAVFBEAgAUEANgKsAQwCCyABQQE6ABcLIAEoAqQBQgQQHigAAEHQlpkwRwRAIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELIAEgASgCpAEQMTcDMAJAIAEoApQBQQRxRQ0AIAEpAzAgASkDOHxCDHwgASkDmAEgASkDGHxRDQAgASgCkAFBFUEAEBQgAS0AF0EBcQRAIAEoAqQBEBYLIAFBADYCrAEMAQsgASgCpAFCBBAeGiABIAEoAqQBECo2AgwgASABKAKkARAqNgIEIAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/contracts/venmo_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 16692827623879808830126666424117838150546424161010311559130132272860078100250;\n    uint256 constant deltax2 = 10427071116080203280483990720065140241625477298313711514843941053378169062748;\n    uint256 constant deltay1 = 12292291730534257963793035250750833013505862587513324721305952905575695195722;\n    uint256 constant deltay2 = 20744227296603881754617447489692206687227195961073977292626564883622660146422;\n\n    \n    uint256 constant IC0x = 8444387327591820163253359883706304250001395835708102283881672029412593968774;\n    uint256 constant IC0y = 277567402350001170949287541204029095267467381858853916455216632597839881894;\n    \n    uint256 constant IC1x = 11766018000598374647690511651127745003630346152255765679463620118729063279220;\n    uint256 constant IC1y = 9973870620290232174118930849612458053973396098852917252709131237691777167431;\n    \n    uint256 constant IC2x = 21007152236406284962452665998326532111064818140624217664323424373713986554835;\n    uint256 constant IC2y = 21775424933265972488601591944473690558387975377218817711132857025038427581344;\n    \n    uint256 constant IC3x = 19548332954070589452554863336717712265670681575029463650291986455368503640194;\n    uint256 constant IC3y = 9885572105525346384114396000793852863725331019928798599079916138124811450063;\n    \n    uint256 constant IC4x = 20459688676260758193620894047864540995062748169615148342851161008796903469478;\n    uint256 constant IC4y = 7185096966400904659568958817597117358528438755253953902329001546341542579806;\n    \n    uint256 constant IC5x = 15566588852465957839914470257479783208753427872712540953155019219989274639291;\n    uint256 constant IC5y = 13117341851862511824800803143692229606087651943401230287864971446454834743578;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/contracts/venmo_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 5710629204359318057562498392234897061794505526378244639613545081979421872324;\n    uint256 constant deltax2 = 990656993167988662763349194790300993619547607285680693352122387169954518876;\n    uint256 constant deltay1 = 716219014029453087010203485855017030343957665868140907538168510860723855404;\n    uint256 constant deltay2 = 15567073068481787678459322691280596720950847803967120869528969231388542383007;\n\n    \n    uint256 constant IC0x = 3627016935680980991432758845809120437097698562642321662019774941798047598180;\n    uint256 constant IC0y = 16742737478481137559777273336649173908087975045426893354724005348183061433359;\n    \n    uint256 constant IC1x = 1454889468509402624274228018232533000837827531552657849863656594197598947498;\n    uint256 constant IC1y = 21114519264105667881501109217530601184286085076749464919673271702318856586869;\n    \n    uint256 constant IC2x = 15214926606177919954497590021391485480795904680262796779354958872907701613369;\n    uint256 constant IC2y = 3436701283643568631088610954415601741399004409005447167420424641912447528939;\n    \n    uint256 constant IC3x = 4535577697185795754970511618264939460763831131849914629687538976336257649268;\n    uint256 constant IC3y = 7758558535557743288212279084775965030097651866120453423634300893790511261820;\n    \n    uint256 constant IC4x = 874294953994422297831973347765527399192587644625708091600444498339317231142;\n    uint256 constant IC4y = 987062449590966973283739390864507348641413150099442677760662058272414279274;\n    \n    uint256 constant IC5x = 21093306057635441117249393023592254587788813974241613308459037792013982125271;\n    uint256 constant IC5y = 2674227458751675036151996130714025181946977717008550031124827209614433661640;\n    \n    uint256 constant IC6x = 13846687013867984054231693830774779045583700534400211257658890706223553634739;\n    uint256 constant IC6y = 8017285138819571587063238313118652954321504644123983130004849545264828919081;\n    \n    uint256 constant IC7x = 13134004890952141957850059371765174729898824494756098133509785273144965229605;\n    uint256 constant IC7y = 19833383650616654544301917274181853787895876513168493371626228893058581160277;\n    \n    uint256 constant IC8x = 15730855678085463666228938279082107543444904323060443712618683292548728266981;\n    uint256 constant IC8y = 11187003173972315212472857297424367154976035201682387760241185052675631112914;\n    \n    uint256 constant IC9x = 19431007015983296833648365920726396734910027676221391642968597625199383752634;\n    uint256 constant IC9y = 21132440606561643161647678729377817341013518219983716149257194049459184921050;\n    \n    uint256 constant IC10x = 4559717915456495626304866642697317683057747436742022494016974327403606371979;\n    uint256 constant IC10y = 11478380993372530002009436682140297146781606321299572933211280870931334446617;\n    \n    uint256 constant IC11x = 16525805622865173604160997674689687443990633252176419982940261013647563901344;\n    uint256 constant IC11y = 792201218354373970098710160330509619168590675536085985581042389294282406443;\n    \n    uint256 constant IC12x = 10525116069038722935367461628431297752051968830490923775813610986261326824582;\n    uint256 constant IC12y = 10970802876973329565857167947893820731407652682848506683295471907792738767120;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n            checkField(calldataload(add(_pubSignals, 384)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/contracts/venmo_send_verifier_v1.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\n\n    \n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\n    \n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\n    \n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\n    \n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\n    \n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\n    \n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\n    \n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\n    \n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\n    \n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\n    \n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\n    \n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\n    \n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\n    \n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n            checkField(calldataload(add(_pubSignals, 384)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "circuits-circom/circuits/venmo/contracts/venmo_send_verifier_v2.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\n\n\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\n\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\n\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\n\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\n\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\n\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\n\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\n\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\n\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\n\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\n\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\n\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\n\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n            checkField(calldataload(add(_pubSignals, 192)))\n\n            checkField(calldataload(add(_pubSignals, 224)))\n\n            checkField(calldataload(add(_pubSignals, 256)))\n\n            checkField(calldataload(add(_pubSignals, 288)))\n\n            checkField(calldataload(add(_pubSignals, 320)))\n\n            checkField(calldataload(add(_pubSignals, 352)))\n\n            checkField(calldataload(add(_pubSignals, 384)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "circuits-circom/circuits/venmo/emls/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/venmo/inputs/.placeholder",
    "content": ""
  },
  {
    "path": "circuits-circom/circuits/venmo/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-venmo\",\n    \"version\": \"0.0.1\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Venmo circuits for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"main\": \"dist/generate_input.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/circuits\": \"3.2.3\",\n        \"@zk-email/helpers\": \"^3.0.2\",\n        \"@zk-email/zk-regex-circom\": \"1.2.1\",\n        \"buffer\": \"^6.0.3\",\n        \"circomlib\": \"^2.0.5\",\n        \"process\": \"^0.11.10\",\n        \"snarkjs\": \"latest\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\",\n        \"gen-input:venmo:send\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/venmo_send.eml --payment_type=venmo --circuit_type=send\",\n        \"gen-input:venmo:registration\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/venmo_send.eml --payment_type=venmo --circuit_type=registration\",\n        \"gen-input:venmo:send:receive\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/venmo_receive.eml --payment_type=venmo --circuit_type=send --output_file=input_venmo_send_receive\",\n        \"gen-input:venmo:send:merchant\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/venmo_send_merchant.eml --payment_type=venmo --circuit_type=send --output_file=input_venmo_send_merchant\",\n        \"gen-input:venmo:registration:receive\": \"npx tsx ../../package/generate_input.ts --email_file=./emls/venmo_receive.eml --payment_type=venmo --circuit_type=registration --output_file=input_venmo_registration_receive\",\n        \"compile:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"compile:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./1_compile.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"genkey:non-chunked:unsafe:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./3_gen_zkey_unsafe.sh && cd ..\",\n        \"uploadkeys:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"uploadkeys:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./7_upload_to_s3.sh && cd ..\",\n        \"test:venmo:send\": \"yarn test ./test/venmo_send.spec.ts\",\n        \"test:venmo:registration\": \"yarn test ./test/venmo_registration.spec.ts\",\n        \"genverifier:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"genverifier:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./8_gen_sol_verifier.sh && cd ..\",\n        \"gencalldata:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"gencalldata:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./9_gen_sol_calldata.sh && cd ..\",\n        \"genwitness:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genwitness:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./2_gen_wtns.sh && cd ..\",\n        \"genproof:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n        \"genproof:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./6_gen_proof_rapidsnark.sh && cd ..\",\n        \"setup:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send && cd ../../scripts && ./ceremony/1_setup_ceremony.sh && cd ..\",\n        \"setup:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration && cd ../../scripts && ./ceremony/1_setup_ceremony.sh && cd ..\",\n        \"contribute:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send PREV_VERSION=${0:-0} CURR_VERSION=${1:-1} ENTROPY=${2:-12345abcd} && cd ../../scripts && ./ceremony/2_contribute_ceremony.sh && cd ..\",\n        \"contribute:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration PREV_VERSION=${0:-1} CURR_VERSION=${1:-1} ENTROPY=${2:-12345abcd} && cd ../../scripts && ./ceremony/2_contribute_ceremony.sh && cd ..\",\n        \"finalize:venmo:send\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_send PREV_VERSION=${0:-0} && cd ../../scripts && ./ceremony/3_finalize_ceremony.sh && cd ..\",\n        \"finalize:venmo:registration\": \"CIRCUIT_DIR=venmo CIRCUIT_NAME=venmo_registration PREV_VERSION=${0:-0} && cd ../../scripts && ./ceremony/3_finalize_ceremony.sh && cd ..\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_actor_id.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate VenmoActorIdRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[60][num_bytes];\n\tcomponent lt[2][num_bytes];\n\tcomponent and[334][num_bytes];\n\tcomponent multi_or[6][num_bytes];\n\tsignal states[num_bytes+1][331];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 331; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(330);\n\t\t// 32 = ` `\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 32;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][330];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\t// Catch all except `\\r` `\\n`\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 14;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 254;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[0][i].out;\n\t\tand[1][i].b <== lt[1][i].out;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 0;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 1;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 2;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 3;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 4;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 5;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 6;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 7;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 8;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 9;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 11;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 12;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tmulti_or[0][i] = MultiOR(13);\n\t\tmulti_or[0][i].in[0] <== and[1][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[12][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][313];\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[2][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\tstates[i+1][2] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][1];\n\t\tand[4][i].b <== eq[0][i].out;\n\t\tstates[i+1][3] <== and[4][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][3];\n\t\tand[5][i].b <== eq[0][i].out;\n\t\tstates[i+1][4] <== and[5][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][4];\n\t\tand[6][i].b <== eq[0][i].out;\n\t\tstates[i+1][5] <== and[6][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\t// 10 = `\\n`\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 10;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][325];\n\t\tand[7][i].b <== eq[13][i].out;\n\t\tstates[i+1][6] <== and[7][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][6];\n\t\tand[8][i].b <== eq[0][i].out;\n\t\tstates[i+1][7] <== and[8][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][7];\n\t\tand[9][i].b <== eq[0][i].out;\n\t\tstates[i+1][8] <== and[9][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][8];\n\t\tand[10][i].b <== eq[0][i].out;\n\t\tstates[i+1][9] <== and[10][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][9];\n\t\tand[11][i].b <== eq[0][i].out;\n\t\tstates[i+1][10] <== and[11][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][10];\n\t\tand[12][i].b <== eq[0][i].out;\n\t\tstates[i+1][11] <== and[12][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][11];\n\t\tand[13][i].b <== eq[0][i].out;\n\t\tstates[i+1][12] <== and[13][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][12];\n\t\tand[14][i].b <== eq[0][i].out;\n\t\tstates[i+1][13] <== and[14][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][13];\n\t\tand[15][i].b <== eq[0][i].out;\n\t\tstates[i+1][14] <== and[15][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][14];\n\t\tand[16][i].b <== eq[0][i].out;\n\t\tstates[i+1][15] <== and[16][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][15];\n\t\tand[17][i].b <== eq[0][i].out;\n\t\tstates[i+1][16] <== and[17][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][16];\n\t\tand[18][i].b <== eq[0][i].out;\n\t\tstates[i+1][17] <== and[18][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][17];\n\t\tand[19][i].b <== eq[0][i].out;\n\t\tstates[i+1][18] <== and[19][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][18];\n\t\tand[20][i].b <== eq[0][i].out;\n\t\tstates[i+1][19] <== and[20][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][19];\n\t\tand[21][i].b <== eq[0][i].out;\n\t\tstates[i+1][20] <== and[21][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][20];\n\t\tand[22][i].b <== eq[0][i].out;\n\t\tstates[i+1][21] <== and[22][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][5];\n\t\tand[23][i].b <== eq[0][i].out;\n\t\tstates[i+1][22] <== and[23][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][21];\n\t\tand[24][i].b <== eq[0][i].out;\n\t\tstates[i+1][23] <== and[24][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\t// 60 = `<`\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 60;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][23];\n\t\tand[25][i].b <== eq[14][i].out;\n\t\tstates[i+1][24] <== and[25][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\t// 47 = `/`\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 47;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][24];\n\t\tand[26][i].b <== eq[15][i].out;\n\t\tstates[i+1][25] <== and[26][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\t// 97 = `a`\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 97;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][25];\n\t\tand[27][i].b <== eq[16][i].out;\n\t\tstates[i+1][26] <== and[27][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\t// 62 = `>`\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 62;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][26];\n\t\tand[28][i].b <== eq[17][i].out;\n\t\tstates[i+1][27] <== and[28][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\t// 13 = `\\r`\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 13;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][27];\n\t\tand[29][i].b <== eq[18][i].out;\n\t\tstates[i+1][28] <== and[29][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][28];\n\t\tand[30][i].b <== eq[13][i].out; // 10 = `\\n`\n\t\tstates[i+1][29] <== and[30][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][29];\n\t\tand[31][i].b <== eq[0][i].out;\n\t\tstates[i+1][30] <== and[31][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][30];\n\t\tand[32][i].b <== eq[0][i].out;\n\t\tstates[i+1][31] <== and[32][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][31];\n\t\tand[33][i].b <== eq[0][i].out;\n\t\tstates[i+1][32] <== and[33][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][32];\n\t\tand[34][i].b <== eq[0][i].out;\n\t\tstates[i+1][33] <== and[34][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][33];\n\t\tand[35][i].b <== eq[0][i].out;\n\t\tstates[i+1][34] <== and[35][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][34];\n\t\tand[36][i].b <== eq[0][i].out;\n\t\tstates[i+1][35] <== and[36][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][35];\n\t\tand[37][i].b <== eq[0][i].out;\n\t\tstates[i+1][36] <== and[37][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][36];\n\t\tand[38][i].b <== eq[0][i].out;\n\t\tstates[i+1][37] <== and[38][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][37];\n\t\tand[39][i].b <== eq[0][i].out;\n\t\tstates[i+1][38] <== and[39][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][38];\n\t\tand[40][i].b <== eq[0][i].out;\n\t\tstates[i+1][39] <== and[40][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][39];\n\t\tand[41][i].b <== eq[0][i].out;\n\t\tstates[i+1][40] <== and[41][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][40];\n\t\tand[42][i].b <== eq[0][i].out;\n\t\tstates[i+1][41] <== and[42][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][41];\n\t\tand[43][i].b <== eq[0][i].out;\n\t\tstates[i+1][42] <== and[43][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][42];\n\t\tand[44][i].b <== eq[0][i].out;\n\t\tstates[i+1][43] <== and[44][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][43];\n\t\tand[45][i].b <== eq[0][i].out;\n\t\tstates[i+1][44] <== and[45][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\t// 61 = `=`\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 61;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][44];\n\t\tand[46][i].b <== eq[19][i].out;\n\t\tstates[i+1][45] <== and[46][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\t// 50 = `2`\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 50;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][45];\n\t\tand[47][i].b <== eq[20][i].out;\n\t\tstates[i+1][46] <== and[47][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\t// 48 = `0`\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 48;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][46];\n\t\tand[48][i].b <== eq[21][i].out;\n\t\tstates[i+1][47] <== and[48][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][47];\n\t\tand[49][i].b <== eq[18][i].out; // 13 = `\\r`\n\t\tstates[i+1][48] <== and[49][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][22];\n\t\tand[50][i].b <== eq[0][i].out;\n\t\tstates[i+1][49] <== and[50][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][48];\n\t\tand[51][i].b <== eq[13][i].out; // 10 = `\\n`\n\t\tstates[i+1][50] <== and[51][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][50];\n\t\tand[52][i].b <== eq[0][i].out;\n\t\tstates[i+1][51] <== and[52][i].out;\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][51];\n\t\tand[53][i].b <== eq[0][i].out;\n\t\tstates[i+1][52] <== and[53][i].out;\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][52];\n\t\tand[54][i].b <== eq[0][i].out;\n\t\tstates[i+1][53] <== and[54][i].out;\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][53];\n\t\tand[55][i].b <== eq[0][i].out;\n\t\tstates[i+1][54] <== and[55][i].out;\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][54];\n\t\tand[56][i].b <== eq[0][i].out;\n\t\tstates[i+1][55] <== and[56][i].out;\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][55];\n\t\tand[57][i].b <== eq[0][i].out;\n\t\tstates[i+1][56] <== and[57][i].out;\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== states[i][56];\n\t\tand[58][i].b <== eq[0][i].out;\n\t\tstates[i+1][57] <== and[58][i].out;\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== states[i][57];\n\t\tand[59][i].b <== eq[0][i].out;\n\t\tstates[i+1][58] <== and[59][i].out;\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][58];\n\t\tand[60][i].b <== eq[0][i].out;\n\t\tstates[i+1][59] <== and[60][i].out;\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][59];\n\t\tand[61][i].b <== eq[0][i].out;\n\t\tstates[i+1][60] <== and[61][i].out;\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== states[i][60];\n\t\tand[62][i].b <== eq[0][i].out;\n\t\tstates[i+1][61] <== and[62][i].out;\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== states[i][61];\n\t\tand[63][i].b <== eq[0][i].out;\n\t\tstates[i+1][62] <== and[63][i].out;\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][62];\n\t\tand[64][i].b <== eq[14][i].out; // 60 = `<`\n\t\tstates[i+1][63] <== and[64][i].out;\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][63];\n\t\tand[65][i].b <== eq[15][i].out;\n\t\tstates[i+1][64] <== and[65][i].out;\n\t\tstate_changed[i].in[63] <== states[i+1][64];\n\t\t// 100 = `d`\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 100;\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][64];\n\t\tand[66][i].b <== eq[22][i].out;\n\t\tstates[i+1][65] <== and[66][i].out;\n\t\tstate_changed[i].in[64] <== states[i+1][65];\n\t\t// 105 = `i`\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 105;\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][65];\n\t\tand[67][i].b <== eq[23][i].out;\n\t\tstates[i+1][66] <== and[67][i].out;\n\t\tstate_changed[i].in[65] <== states[i+1][66];\n\t\t// 118 = `v`\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 118;\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][66];\n\t\tand[68][i].b <== eq[24][i].out;\n\t\tstates[i+1][67] <== and[68][i].out;\n\t\tstate_changed[i].in[66] <== states[i+1][67];\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][67];\n\t\tand[69][i].b <== eq[17][i].out; // 62 = `>`\n\t\tstates[i+1][68] <== and[69][i].out;\n\t\tstate_changed[i].in[67] <== states[i+1][68];\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][68];\n\t\tand[70][i].b <== eq[18][i].out; // 13 = `\\r`\n\t\tstates[i+1][69] <== and[70][i].out;\n\t\tstate_changed[i].in[68] <== states[i+1][69];\n\t\tand[71][i] = AND();\n\t\tand[71][i].a <== states[i][69];\n\t\tand[71][i].b <== eq[13][i].out; // 10 = `\\n`\n\t\tstates[i+1][70] <== and[71][i].out;\n\t\tstate_changed[i].in[69] <== states[i+1][70];\n\t\tand[72][i] = AND();\n\t\tand[72][i].a <== states[i][70];\n\t\tand[72][i].b <== eq[0][i].out;\n\t\tstates[i+1][71] <== and[72][i].out;\n\t\tstate_changed[i].in[70] <== states[i+1][71];\n\t\tand[73][i] = AND();\n\t\tand[73][i].a <== states[i][71];\n\t\tand[73][i].b <== eq[0][i].out;\n\t\tstates[i+1][72] <== and[73][i].out;\n\t\tstate_changed[i].in[71] <== states[i+1][72];\n\t\tand[74][i] = AND();\n\t\tand[74][i].a <== states[i][72];\n\t\tand[74][i].b <== eq[0][i].out;\n\t\tstates[i+1][73] <== and[74][i].out;\n\t\tstate_changed[i].in[72] <== states[i+1][73];\n\t\tand[75][i] = AND();\n\t\tand[75][i].a <== states[i][73];\n\t\tand[75][i].b <== eq[0][i].out;\n\t\tstates[i+1][74] <== and[75][i].out;\n\t\tstate_changed[i].in[73] <== states[i+1][74];\n\t\tand[76][i] = AND();\n\t\tand[76][i].a <== states[i][74];\n\t\tand[76][i].b <== eq[0][i].out;\n\t\tstates[i+1][75] <== and[76][i].out;\n\t\tstate_changed[i].in[74] <== states[i+1][75];\n\t\tand[77][i] = AND();\n\t\tand[77][i].a <== states[i][49];\n\t\tand[77][i].b <== eq[0][i].out;\n\t\tstates[i+1][76] <== and[77][i].out;\n\t\tstate_changed[i].in[75] <== states[i+1][76];\n\t\tand[78][i] = AND();\n\t\tand[78][i].a <== states[i][75];\n\t\tand[78][i].b <== eq[0][i].out;\n\t\tstates[i+1][77] <== and[78][i].out;\n\t\tstate_changed[i].in[76] <== states[i+1][77];\n\t\tand[79][i] = AND();\n\t\tand[79][i].a <== states[i][77];\n\t\tand[79][i].b <== eq[0][i].out;\n\t\tstates[i+1][78] <== and[79][i].out;\n\t\tstate_changed[i].in[77] <== states[i+1][78];\n\t\tand[80][i] = AND();\n\t\tand[80][i].a <== states[i][78];\n\t\tand[80][i].b <== eq[0][i].out;\n\t\tstates[i+1][79] <== and[80][i].out;\n\t\tstate_changed[i].in[78] <== states[i+1][79];\n\t\tand[81][i] = AND();\n\t\tand[81][i].a <== states[i][79];\n\t\tand[81][i].b <== eq[0][i].out;\n\t\tstates[i+1][80] <== and[81][i].out;\n\t\tstate_changed[i].in[79] <== states[i+1][80];\n\t\tand[82][i] = AND();\n\t\tand[82][i].a <== states[i][80];\n\t\tand[82][i].b <== eq[0][i].out;\n\t\tstates[i+1][81] <== and[82][i].out;\n\t\tstate_changed[i].in[80] <== states[i+1][81];\n\t\tand[83][i] = AND();\n\t\tand[83][i].a <== states[i][81];\n\t\tand[83][i].b <== eq[0][i].out;\n\t\tstates[i+1][82] <== and[83][i].out;\n\t\tstate_changed[i].in[81] <== states[i+1][82];\n\t\tand[84][i] = AND();\n\t\tand[84][i].a <== states[i][82];\n\t\tand[84][i].b <== eq[0][i].out;\n\t\tstates[i+1][83] <== and[84][i].out;\n\t\tstate_changed[i].in[82] <== states[i+1][83];\n\t\tand[85][i] = AND();\n\t\tand[85][i].a <== states[i][83];\n\t\tand[85][i].b <== eq[14][i].out;\n\t\tstates[i+1][84] <== and[85][i].out;\n\t\tstate_changed[i].in[83] <== states[i+1][84];\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 33;\n\t\tand[86][i] = AND();\n\t\tand[86][i].a <== states[i][84];\n\t\tand[86][i].b <== eq[25][i].out;\n\t\tstates[i+1][85] <== and[86][i].out;\n\t\tstate_changed[i].in[84] <== states[i+1][85];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 45;\n\t\tand[87][i] = AND();\n\t\tand[87][i].a <== states[i][85];\n\t\tand[87][i].b <== eq[26][i].out;\n\t\tstates[i+1][86] <== and[87][i].out;\n\t\tstate_changed[i].in[85] <== states[i+1][86];\n\t\tand[88][i] = AND();\n\t\tand[88][i].a <== states[i][86];\n\t\tand[88][i].b <== eq[26][i].out;\n\t\tstates[i+1][87] <== and[88][i].out;\n\t\tstate_changed[i].in[86] <== states[i+1][87];\n\t\tand[89][i] = AND();\n\t\tand[89][i].a <== states[i][87];\n\t\tand[89][i].b <== eq[0][i].out;\n\t\tstates[i+1][88] <== and[89][i].out;\n\t\tstate_changed[i].in[87] <== states[i+1][88];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 110;\n\t\tand[90][i] = AND();\n\t\tand[90][i].a <== states[i][88];\n\t\tand[90][i].b <== eq[27][i].out;\n\t\tstates[i+1][89] <== and[90][i].out;\n\t\tstate_changed[i].in[88] <== states[i+1][89];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 111;\n\t\tand[91][i] = AND();\n\t\tand[91][i].a <== states[i][89];\n\t\tand[91][i].b <== eq[28][i].out;\n\t\tstates[i+1][90] <== and[91][i].out;\n\t\tstate_changed[i].in[89] <== states[i+1][90];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 116;\n\t\tand[92][i] = AND();\n\t\tand[92][i].a <== states[i][90];\n\t\tand[92][i].b <== eq[29][i].out;\n\t\tstates[i+1][91] <== and[92][i].out;\n\t\tstate_changed[i].in[90] <== states[i+1][91];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 101;\n\t\tand[93][i] = AND();\n\t\tand[93][i].a <== states[i][91];\n\t\tand[93][i].b <== eq[30][i].out;\n\t\tstates[i+1][92] <== and[93][i].out;\n\t\tstate_changed[i].in[91] <== states[i+1][92];\n\t\tand[94][i] = AND();\n\t\tand[94][i].a <== states[i][92];\n\t\tand[94][i].b <== eq[0][i].out;\n\t\tstates[i+1][93] <== and[94][i].out;\n\t\tstate_changed[i].in[92] <== states[i+1][93];\n\t\tand[95][i] = AND();\n\t\tand[95][i].a <== states[i][93];\n\t\tand[95][i].b <== eq[26][i].out;\n\t\tstates[i+1][94] <== and[95][i].out;\n\t\tstate_changed[i].in[93] <== states[i+1][94];\n\t\tand[96][i] = AND();\n\t\tand[96][i].a <== states[i][94];\n\t\tand[96][i].b <== eq[26][i].out;\n\t\tstates[i+1][95] <== and[96][i].out;\n\t\tstate_changed[i].in[94] <== states[i+1][95];\n\t\tand[97][i] = AND();\n\t\tand[97][i].a <== states[i][95];\n\t\tand[97][i].b <== eq[17][i].out;\n\t\tstates[i+1][96] <== and[97][i].out;\n\t\tstate_changed[i].in[95] <== states[i+1][96];\n\t\tand[98][i] = AND();\n\t\tand[98][i].a <== states[i][96];\n\t\tand[98][i].b <== eq[18][i].out;\n\t\tstates[i+1][97] <== and[98][i].out;\n\t\tstate_changed[i].in[96] <== states[i+1][97];\n\t\tand[99][i] = AND();\n\t\tand[99][i].a <== states[i][97];\n\t\tand[99][i].b <== eq[13][i].out;\n\t\tstates[i+1][98] <== and[99][i].out;\n\t\tstate_changed[i].in[97] <== states[i+1][98];\n\t\tand[100][i] = AND();\n\t\tand[100][i].a <== states[i][76];\n\t\tand[100][i].b <== eq[0][i].out;\n\t\tstates[i+1][99] <== and[100][i].out;\n\t\tstate_changed[i].in[98] <== states[i+1][99];\n\t\tand[101][i] = AND();\n\t\tand[101][i].a <== states[i][99];\n\t\tand[101][i].b <== eq[0][i].out;\n\t\tstates[i+1][100] <== and[101][i].out;\n\t\tstate_changed[i].in[99] <== states[i+1][100];\n\t\tand[102][i] = AND();\n\t\tand[102][i].a <== states[i][100];\n\t\tand[102][i].b <== eq[0][i].out;\n\t\tstates[i+1][101] <== and[102][i].out;\n\t\tstate_changed[i].in[100] <== states[i+1][101];\n\t\tand[103][i] = AND();\n\t\tand[103][i].a <== states[i][101];\n\t\tand[103][i].b <== eq[0][i].out;\n\t\tstates[i+1][102] <== and[103][i].out;\n\t\tstate_changed[i].in[101] <== states[i+1][102];\n\t\tand[104][i] = AND();\n\t\tand[104][i].a <== states[i][102];\n\t\tand[104][i].b <== eq[0][i].out;\n\t\tstates[i+1][103] <== and[104][i].out;\n\t\tstate_changed[i].in[102] <== states[i+1][103];\n\t\tand[105][i] = AND();\n\t\tand[105][i].a <== states[i][103];\n\t\tand[105][i].b <== eq[0][i].out;\n\t\tstates[i+1][104] <== and[105][i].out;\n\t\tstate_changed[i].in[103] <== states[i+1][104];\n\t\tand[106][i] = AND();\n\t\tand[106][i].a <== states[i][104];\n\t\tand[106][i].b <== eq[0][i].out;\n\t\tstates[i+1][105] <== and[106][i].out;\n\t\tstate_changed[i].in[104] <== states[i+1][105];\n\t\tand[107][i] = AND();\n\t\tand[107][i].a <== states[i][105];\n\t\tand[107][i].b <== eq[0][i].out;\n\t\tstates[i+1][106] <== and[107][i].out;\n\t\tstate_changed[i].in[105] <== states[i+1][106];\n\t\tand[108][i] = AND();\n\t\tand[108][i].a <== states[i][106];\n\t\tand[108][i].b <== eq[0][i].out;\n\t\tstates[i+1][107] <== and[108][i].out;\n\t\tstate_changed[i].in[106] <== states[i+1][107];\n\t\tand[109][i] = AND();\n\t\tand[109][i].a <== states[i][107];\n\t\tand[109][i].b <== eq[14][i].out;\n\t\tstates[i+1][108] <== and[109][i].out;\n\t\tstate_changed[i].in[107] <== states[i+1][108];\n\t\tand[110][i] = AND();\n\t\tand[110][i].a <== states[i][108];\n\t\tand[110][i].b <== eq[16][i].out;\n\t\tstates[i+1][109] <== and[110][i].out;\n\t\tstate_changed[i].in[108] <== states[i+1][109];\n\t\tand[111][i] = AND();\n\t\tand[111][i].a <== states[i][109];\n\t\tand[111][i].b <== eq[0][i].out;\n\t\tstates[i+1][110] <== and[111][i].out;\n\t\tstate_changed[i].in[109] <== states[i+1][110];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 115;\n\t\tand[112][i] = AND();\n\t\tand[112][i].a <== states[i][110];\n\t\tand[112][i].b <== eq[31][i].out;\n\t\tstates[i+1][111] <== and[112][i].out;\n\t\tstate_changed[i].in[110] <== states[i+1][111];\n\t\tand[113][i] = AND();\n\t\tand[113][i].a <== states[i][111];\n\t\tand[113][i].b <== eq[29][i].out;\n\t\tstates[i+1][112] <== and[113][i].out;\n\t\tstate_changed[i].in[111] <== states[i+1][112];\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 121;\n\t\tand[114][i] = AND();\n\t\tand[114][i].a <== states[i][112];\n\t\tand[114][i].b <== eq[32][i].out;\n\t\tstates[i+1][113] <== and[114][i].out;\n\t\tstate_changed[i].in[112] <== states[i+1][113];\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 108;\n\t\tand[115][i] = AND();\n\t\tand[115][i].a <== states[i][113];\n\t\tand[115][i].b <== eq[33][i].out;\n\t\tstates[i+1][114] <== and[115][i].out;\n\t\tstate_changed[i].in[113] <== states[i+1][114];\n\t\tand[116][i] = AND();\n\t\tand[116][i].a <== states[i][114];\n\t\tand[116][i].b <== eq[30][i].out;\n\t\tstates[i+1][115] <== and[116][i].out;\n\t\tstate_changed[i].in[114] <== states[i+1][115];\n\t\tand[117][i] = AND();\n\t\tand[117][i].a <== states[i][115];\n\t\tand[117][i].b <== eq[19][i].out;\n\t\tstates[i+1][116] <== and[117][i].out;\n\t\tstate_changed[i].in[115] <== states[i+1][116];\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 51;\n\t\tand[118][i] = AND();\n\t\tand[118][i].a <== states[i][116];\n\t\tand[118][i].b <== eq[34][i].out;\n\t\tstates[i+1][117] <== and[118][i].out;\n\t\tstate_changed[i].in[116] <== states[i+1][117];\n\t\tand[119][i] = AND();\n\t\tand[119][i].a <== states[i][0];\n\t\tand[119][i].b <== eq[14][i].out;\n\t\tstates[i+1][118] <== and[119][i].out;\n\t\tstate_changed[i].in[117] <== states[i+1][118];\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 68;\n\t\tand[120][i] = AND();\n\t\tand[120][i].a <== states[i][117];\n\t\tand[120][i].b <== eq[35][i].out;\n\t\tstates[i+1][119] <== and[120][i].out;\n\t\tstate_changed[i].in[118] <== states[i+1][119];\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 34;\n\t\tand[121][i] = AND();\n\t\tand[121][i].a <== states[i][119];\n\t\tand[121][i].b <== eq[36][i].out;\n\t\tstates[i+1][120] <== and[121][i].out;\n\t\tstate_changed[i].in[119] <== states[i+1][120];\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 99;\n\t\tand[122][i] = AND();\n\t\tand[122][i].a <== states[i][120];\n\t\tand[122][i].b <== eq[37][i].out;\n\t\tstates[i+1][121] <== and[122][i].out;\n\t\tstate_changed[i].in[120] <== states[i+1][121];\n\t\tand[123][i] = AND();\n\t\tand[123][i].a <== states[i][121];\n\t\tand[123][i].b <== eq[28][i].out;\n\t\tstates[i+1][122] <== and[123][i].out;\n\t\tstate_changed[i].in[121] <== states[i+1][122];\n\t\tand[124][i] = AND();\n\t\tand[124][i].a <== states[i][122];\n\t\tand[124][i].b <== eq[33][i].out;\n\t\tstates[i+1][123] <== and[124][i].out;\n\t\tstate_changed[i].in[122] <== states[i+1][123];\n\t\tand[125][i] = AND();\n\t\tand[125][i].a <== states[i][123];\n\t\tand[125][i].b <== eq[28][i].out;\n\t\tstates[i+1][124] <== and[125][i].out;\n\t\tstate_changed[i].in[123] <== states[i+1][124];\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 114;\n\t\tand[126][i] = AND();\n\t\tand[126][i].a <== states[i][124];\n\t\tand[126][i].b <== eq[38][i].out;\n\t\tstates[i+1][125] <== and[126][i].out;\n\t\tstate_changed[i].in[124] <== states[i+1][125];\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 58;\n\t\tand[127][i] = AND();\n\t\tand[127][i].a <== states[i][125];\n\t\tand[127][i].b <== eq[39][i].out;\n\t\tstates[i+1][126] <== and[127][i].out;\n\t\tstate_changed[i].in[125] <== states[i+1][126];\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 35;\n\t\tand[128][i] = AND();\n\t\tand[128][i].a <== states[i][126];\n\t\tand[128][i].b <== eq[40][i].out;\n\t\tstates[i+1][127] <== and[128][i].out;\n\t\tstate_changed[i].in[126] <== states[i+1][127];\n\t\tand[129][i] = AND();\n\t\tand[129][i].a <== states[i][127];\n\t\tand[129][i].b <== eq[21][i].out;\n\t\tstates[i+1][128] <== and[129][i].out;\n\t\tstate_changed[i].in[127] <== states[i+1][128];\n\t\tand[130][i] = AND();\n\t\tand[130][i].a <== states[i][128];\n\t\tand[130][i].b <== eq[21][i].out;\n\t\tstates[i+1][129] <== and[130][i].out;\n\t\tstate_changed[i].in[128] <== states[i+1][129];\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 55;\n\t\tand[131][i] = AND();\n\t\tand[131][i].a <== states[i][129];\n\t\tand[131][i].b <== eq[41][i].out;\n\t\tstates[i+1][130] <== and[131][i].out;\n\t\tstate_changed[i].in[129] <== states[i+1][130];\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 52;\n\t\tand[132][i] = AND();\n\t\tand[132][i].a <== states[i][130];\n\t\tand[132][i].b <== eq[42][i].out;\n\t\tstates[i+1][131] <== and[132][i].out;\n\t\tstate_changed[i].in[130] <== states[i+1][131];\n\t\tand[133][i] = AND();\n\t\tand[133][i].a <== states[i][131];\n\t\tand[133][i].b <== eq[35][i].out;\n\t\tstates[i+1][132] <== and[133][i].out;\n\t\tstate_changed[i].in[131] <== states[i+1][132];\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 69;\n\t\tand[134][i] = AND();\n\t\tand[134][i].a <== states[i][132];\n\t\tand[134][i].b <== eq[43][i].out;\n\t\tstates[i+1][133] <== and[134][i].out;\n\t\tstate_changed[i].in[132] <== states[i+1][133];\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 59;\n\t\tand[135][i] = AND();\n\t\tand[135][i].a <== states[i][133];\n\t\tand[135][i].b <== eq[44][i].out;\n\t\tstates[i+1][134] <== and[135][i].out;\n\t\tstate_changed[i].in[133] <== states[i+1][134];\n\t\tand[136][i] = AND();\n\t\tand[136][i].a <== states[i][134];\n\t\tand[136][i].b <== eq[0][i].out;\n\t\tstates[i+1][135] <== and[136][i].out;\n\t\tstate_changed[i].in[134] <== states[i+1][135];\n\t\tand[137][i] = AND();\n\t\tand[137][i].a <== states[i][135];\n\t\tand[137][i].b <== eq[29][i].out;\n\t\tstates[i+1][136] <== and[137][i].out;\n\t\tstate_changed[i].in[135] <== states[i+1][136];\n\t\tand[138][i] = AND();\n\t\tand[138][i].a <== states[i][136];\n\t\tand[138][i].b <== eq[30][i].out;\n\t\tstates[i+1][137] <== and[138][i].out;\n\t\tstate_changed[i].in[136] <== states[i+1][137];\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 120;\n\t\tand[139][i] = AND();\n\t\tand[139][i].a <== states[i][137];\n\t\tand[139][i].b <== eq[45][i].out;\n\t\tstates[i+1][138] <== and[139][i].out;\n\t\tstate_changed[i].in[137] <== states[i+1][138];\n\t\tand[140][i] = AND();\n\t\tand[140][i].a <== states[i][138];\n\t\tand[140][i].b <== eq[29][i].out;\n\t\tstates[i+1][139] <== and[140][i].out;\n\t\tstate_changed[i].in[138] <== states[i+1][139];\n\t\tand[141][i] = AND();\n\t\tand[141][i].a <== states[i][139];\n\t\tand[141][i].b <== eq[26][i].out;\n\t\tstates[i+1][140] <== and[141][i].out;\n\t\tstate_changed[i].in[139] <== states[i+1][140];\n\t\tand[142][i] = AND();\n\t\tand[142][i].a <== states[i][140];\n\t\tand[142][i].b <== eq[22][i].out;\n\t\tstates[i+1][141] <== and[142][i].out;\n\t\tstate_changed[i].in[140] <== states[i+1][141];\n\t\tand[143][i] = AND();\n\t\tand[143][i].a <== states[i][141];\n\t\tand[143][i].b <== eq[30][i].out;\n\t\tstates[i+1][142] <== and[143][i].out;\n\t\tstate_changed[i].in[141] <== states[i+1][142];\n\t\tand[144][i] = AND();\n\t\tand[144][i].a <== states[i][142];\n\t\tand[144][i].b <== eq[37][i].out;\n\t\tstates[i+1][143] <== and[144][i].out;\n\t\tstate_changed[i].in[142] <== states[i+1][143];\n\t\tand[145][i] = AND();\n\t\tand[145][i].a <== states[i][143];\n\t\tand[145][i].b <== eq[28][i].out;\n\t\tstates[i+1][144] <== and[145][i].out;\n\t\tstate_changed[i].in[143] <== states[i+1][144];\n\t\tand[146][i] = AND();\n\t\tand[146][i].a <== states[i][118];\n\t\tand[146][i].b <== eq[25][i].out;\n\t\tstates[i+1][145] <== and[146][i].out;\n\t\tstate_changed[i].in[144] <== states[i+1][145];\n\t\tand[147][i] = AND();\n\t\tand[147][i].a <== states[i][144];\n\t\tand[147][i].b <== eq[38][i].out;\n\t\tstates[i+1][146] <== and[147][i].out;\n\t\tstate_changed[i].in[145] <== states[i+1][146];\n\t\tand[148][i] = AND();\n\t\tand[148][i].a <== states[i][146];\n\t\tand[148][i].b <== eq[16][i].out;\n\t\tstates[i+1][147] <== and[148][i].out;\n\t\tstate_changed[i].in[146] <== states[i+1][147];\n\t\tand[149][i] = AND();\n\t\tand[149][i].a <== states[i][147];\n\t\tand[149][i].b <== eq[29][i].out;\n\t\tstates[i+1][148] <== and[149][i].out;\n\t\tstate_changed[i].in[147] <== states[i+1][148];\n\t\tand[150][i] = AND();\n\t\tand[150][i].a <== states[i][148];\n\t\tand[150][i].b <== eq[23][i].out;\n\t\tstates[i+1][149] <== and[150][i].out;\n\t\tstate_changed[i].in[148] <== states[i+1][149];\n\t\tand[151][i] = AND();\n\t\tand[151][i].a <== states[i][149];\n\t\tand[151][i].b <== eq[28][i].out;\n\t\tstates[i+1][150] <== and[151][i].out;\n\t\tstate_changed[i].in[149] <== states[i+1][150];\n\t\tand[152][i] = AND();\n\t\tand[152][i].a <== states[i][150];\n\t\tand[152][i].b <== eq[27][i].out;\n\t\tstates[i+1][151] <== and[152][i].out;\n\t\tstate_changed[i].in[150] <== states[i+1][151];\n\t\tand[153][i] = AND();\n\t\tand[153][i].a <== states[i][151];\n\t\tand[153][i].b <== eq[39][i].out;\n\t\tstates[i+1][152] <== and[153][i].out;\n\t\tstate_changed[i].in[151] <== states[i+1][152];\n\t\tand[154][i] = AND();\n\t\tand[154][i].a <== states[i][152];\n\t\tand[154][i].b <== eq[27][i].out;\n\t\tstates[i+1][153] <== and[154][i].out;\n\t\tstate_changed[i].in[152] <== states[i+1][153];\n\t\tand[155][i] = AND();\n\t\tand[155][i].a <== states[i][153];\n\t\tand[155][i].b <== eq[28][i].out;\n\t\tstates[i+1][154] <== and[155][i].out;\n\t\tstate_changed[i].in[153] <== states[i+1][154];\n\t\tand[156][i] = AND();\n\t\tand[156][i].a <== states[i][154];\n\t\tand[156][i].b <== eq[27][i].out;\n\t\tstates[i+1][155] <== and[156][i].out;\n\t\tstate_changed[i].in[154] <== states[i+1][155];\n\t\tand[157][i] = AND();\n\t\tand[157][i].a <== states[i][155];\n\t\tand[157][i].b <== eq[30][i].out;\n\t\tstates[i+1][156] <== and[157][i].out;\n\t\tstate_changed[i].in[155] <== states[i+1][156];\n\t\tand[158][i] = AND();\n\t\tand[158][i].a <== states[i][156];\n\t\tand[158][i].b <== eq[36][i].out;\n\t\tstates[i+1][157] <== and[158][i].out;\n\t\tstate_changed[i].in[156] <== states[i+1][157];\n\t\tand[159][i] = AND();\n\t\tand[159][i].a <== states[i][157];\n\t\tand[159][i].b <== eq[18][i].out;\n\t\tstates[i+1][158] <== and[159][i].out;\n\t\tstate_changed[i].in[157] <== states[i+1][158];\n\t\tand[160][i] = AND();\n\t\tand[160][i].a <== states[i][158];\n\t\tand[160][i].b <== eq[13][i].out;\n\t\tstates[i+1][159] <== and[160][i].out;\n\t\tstate_changed[i].in[158] <== states[i+1][159];\n\t\tand[161][i] = AND();\n\t\tand[161][i].a <== states[i][159];\n\t\tand[161][i].b <== eq[0][i].out;\n\t\tstates[i+1][160] <== and[161][i].out;\n\t\tstate_changed[i].in[159] <== states[i+1][160];\n\t\tand[162][i] = AND();\n\t\tand[162][i].a <== states[i][160];\n\t\tand[162][i].b <== eq[0][i].out;\n\t\tstates[i+1][161] <== and[162][i].out;\n\t\tstate_changed[i].in[160] <== states[i+1][161];\n\t\tand[163][i] = AND();\n\t\tand[163][i].a <== states[i][161];\n\t\tand[163][i].b <== eq[0][i].out;\n\t\tstates[i+1][162] <== and[163][i].out;\n\t\tstate_changed[i].in[161] <== states[i+1][162];\n\t\tand[164][i] = AND();\n\t\tand[164][i].a <== states[i][162];\n\t\tand[164][i].b <== eq[0][i].out;\n\t\tstates[i+1][163] <== and[164][i].out;\n\t\tstate_changed[i].in[162] <== states[i+1][163];\n\t\tand[165][i] = AND();\n\t\tand[165][i].a <== states[i][163];\n\t\tand[165][i].b <== eq[0][i].out;\n\t\tstates[i+1][164] <== and[165][i].out;\n\t\tstate_changed[i].in[163] <== states[i+1][164];\n\t\tand[166][i] = AND();\n\t\tand[166][i].a <== states[i][164];\n\t\tand[166][i].b <== eq[0][i].out;\n\t\tstates[i+1][165] <== and[166][i].out;\n\t\tstate_changed[i].in[164] <== states[i+1][165];\n\t\tand[167][i] = AND();\n\t\tand[167][i].a <== states[i][165];\n\t\tand[167][i].b <== eq[0][i].out;\n\t\tstates[i+1][166] <== and[167][i].out;\n\t\tstate_changed[i].in[165] <== states[i+1][166];\n\t\tand[168][i] = AND();\n\t\tand[168][i].a <== states[i][166];\n\t\tand[168][i].b <== eq[0][i].out;\n\t\tstates[i+1][167] <== and[168][i].out;\n\t\tstate_changed[i].in[166] <== states[i+1][167];\n\t\tand[169][i] = AND();\n\t\tand[169][i].a <== states[i][167];\n\t\tand[169][i].b <== eq[0][i].out;\n\t\tstates[i+1][168] <== and[169][i].out;\n\t\tstate_changed[i].in[167] <== states[i+1][168];\n\t\tand[170][i] = AND();\n\t\tand[170][i].a <== states[i][168];\n\t\tand[170][i].b <== eq[0][i].out;\n\t\tstates[i+1][169] <== and[170][i].out;\n\t\tstate_changed[i].in[168] <== states[i+1][169];\n\t\tand[171][i] = AND();\n\t\tand[171][i].a <== states[i][169];\n\t\tand[171][i].b <== eq[0][i].out;\n\t\tstates[i+1][170] <== and[171][i].out;\n\t\tstate_changed[i].in[169] <== states[i+1][170];\n\t\tand[172][i] = AND();\n\t\tand[172][i].a <== states[i][170];\n\t\tand[172][i].b <== eq[0][i].out;\n\t\tstates[i+1][171] <== and[172][i].out;\n\t\tstate_changed[i].in[170] <== states[i+1][171];\n\t\tand[173][i] = AND();\n\t\tand[173][i].a <== states[i][145];\n\t\tand[173][i].b <== eq[26][i].out;\n\t\tstates[i+1][172] <== and[173][i].out;\n\t\tstate_changed[i].in[171] <== states[i+1][172];\n\t\tand[174][i] = AND();\n\t\tand[174][i].a <== states[i][171];\n\t\tand[174][i].b <== eq[0][i].out;\n\t\tstates[i+1][173] <== and[174][i].out;\n\t\tstate_changed[i].in[172] <== states[i+1][173];\n\t\tand[175][i] = AND();\n\t\tand[175][i].a <== states[i][173];\n\t\tand[175][i].b <== eq[0][i].out;\n\t\tstates[i+1][174] <== and[175][i].out;\n\t\tstate_changed[i].in[173] <== states[i+1][174];\n\t\tand[176][i] = AND();\n\t\tand[176][i].a <== states[i][174];\n\t\tand[176][i].b <== eq[0][i].out;\n\t\tstates[i+1][175] <== and[176][i].out;\n\t\tstate_changed[i].in[174] <== states[i+1][175];\n\t\tand[177][i] = AND();\n\t\tand[177][i].a <== states[i][175];\n\t\tand[177][i].b <== eq[0][i].out;\n\t\tstates[i+1][176] <== and[177][i].out;\n\t\tstate_changed[i].in[175] <== states[i+1][176];\n\t\tand[178][i] = AND();\n\t\tand[178][i].a <== states[i][176];\n\t\tand[178][i].b <== eq[0][i].out;\n\t\tstates[i+1][177] <== and[178][i].out;\n\t\tstate_changed[i].in[176] <== states[i+1][177];\n\t\tand[179][i] = AND();\n\t\tand[179][i].a <== states[i][177];\n\t\tand[179][i].b <== eq[0][i].out;\n\t\tstates[i+1][178] <== and[179][i].out;\n\t\tstate_changed[i].in[177] <== states[i+1][178];\n\t\tand[180][i] = AND();\n\t\tand[180][i].a <== states[i][178];\n\t\tand[180][i].b <== eq[0][i].out;\n\t\tstates[i+1][179] <== and[180][i].out;\n\t\tstate_changed[i].in[178] <== states[i+1][179];\n\t\tand[181][i] = AND();\n\t\tand[181][i].a <== states[i][179];\n\t\tand[181][i].b <== eq[19][i].out;\n\t\tstates[i+1][180] <== and[181][i].out;\n\t\tstate_changed[i].in[179] <== states[i+1][180];\n\t\tand[182][i] = AND();\n\t\tand[182][i].a <== states[i][180];\n\t\tand[182][i].b <== eq[20][i].out;\n\t\tstates[i+1][181] <== and[182][i].out;\n\t\tstate_changed[i].in[180] <== states[i+1][181];\n\t\tand[183][i] = AND();\n\t\tand[183][i].a <== states[i][181];\n\t\tand[183][i].b <== eq[21][i].out;\n\t\tstates[i+1][182] <== and[183][i].out;\n\t\tstate_changed[i].in[181] <== states[i+1][182];\n\t\tand[184][i] = AND();\n\t\tand[184][i].a <== states[i][182];\n\t\tand[184][i].b <== eq[18][i].out;\n\t\tstates[i+1][183] <== and[184][i].out;\n\t\tstate_changed[i].in[182] <== states[i+1][183];\n\t\tand[185][i] = AND();\n\t\tand[185][i].a <== states[i][183];\n\t\tand[185][i].b <== eq[13][i].out;\n\t\tstates[i+1][184] <== and[185][i].out;\n\t\tstate_changed[i].in[183] <== states[i+1][184];\n\t\tand[186][i] = AND();\n\t\tand[186][i].a <== states[i][184];\n\t\tand[186][i].b <== eq[0][i].out;\n\t\tstates[i+1][185] <== and[186][i].out;\n\t\tstate_changed[i].in[184] <== states[i+1][185];\n\t\tand[187][i] = AND();\n\t\tand[187][i].a <== states[i][185];\n\t\tand[187][i].b <== eq[0][i].out;\n\t\tstates[i+1][186] <== and[187][i].out;\n\t\tstate_changed[i].in[185] <== states[i+1][186];\n\t\tand[188][i] = AND();\n\t\tand[188][i].a <== states[i][186];\n\t\tand[188][i].b <== eq[0][i].out;\n\t\tstates[i+1][187] <== and[188][i].out;\n\t\tstate_changed[i].in[186] <== states[i+1][187];\n\t\tand[189][i] = AND();\n\t\tand[189][i].a <== states[i][187];\n\t\tand[189][i].b <== eq[0][i].out;\n\t\tstates[i+1][188] <== and[189][i].out;\n\t\tstate_changed[i].in[187] <== states[i+1][188];\n\t\tand[190][i] = AND();\n\t\tand[190][i].a <== states[i][188];\n\t\tand[190][i].b <== eq[0][i].out;\n\t\tstates[i+1][189] <== and[190][i].out;\n\t\tstate_changed[i].in[188] <== states[i+1][189];\n\t\tand[191][i] = AND();\n\t\tand[191][i].a <== states[i][189];\n\t\tand[191][i].b <== eq[0][i].out;\n\t\tstates[i+1][190] <== and[191][i].out;\n\t\tstate_changed[i].in[189] <== states[i+1][190];\n\t\tand[192][i] = AND();\n\t\tand[192][i].a <== states[i][190];\n\t\tand[192][i].b <== eq[0][i].out;\n\t\tstates[i+1][191] <== and[192][i].out;\n\t\tstate_changed[i].in[190] <== states[i+1][191];\n\t\tand[193][i] = AND();\n\t\tand[193][i].a <== states[i][191];\n\t\tand[193][i].b <== eq[0][i].out;\n\t\tstates[i+1][192] <== and[193][i].out;\n\t\tstate_changed[i].in[191] <== states[i+1][192];\n\t\tand[194][i] = AND();\n\t\tand[194][i].a <== states[i][192];\n\t\tand[194][i].b <== eq[0][i].out;\n\t\tstates[i+1][193] <== and[194][i].out;\n\t\tstate_changed[i].in[192] <== states[i+1][193];\n\t\tand[195][i] = AND();\n\t\tand[195][i].a <== states[i][193];\n\t\tand[195][i].b <== eq[0][i].out;\n\t\tstates[i+1][194] <== and[195][i].out;\n\t\tstate_changed[i].in[193] <== states[i+1][194];\n\t\tand[196][i] = AND();\n\t\tand[196][i].a <== states[i][194];\n\t\tand[196][i].b <== eq[0][i].out;\n\t\tstates[i+1][195] <== and[196][i].out;\n\t\tstate_changed[i].in[194] <== states[i+1][195];\n\t\tand[197][i] = AND();\n\t\tand[197][i].a <== states[i][195];\n\t\tand[197][i].b <== eq[0][i].out;\n\t\tstates[i+1][196] <== and[197][i].out;\n\t\tstate_changed[i].in[195] <== states[i+1][196];\n\t\tand[198][i] = AND();\n\t\tand[198][i].a <== states[i][196];\n\t\tand[198][i].b <== eq[0][i].out;\n\t\tstates[i+1][197] <== and[198][i].out;\n\t\tstate_changed[i].in[196] <== states[i+1][197];\n\t\tand[199][i] = AND();\n\t\tand[199][i].a <== states[i][197];\n\t\tand[199][i].b <== eq[0][i].out;\n\t\tstates[i+1][198] <== and[199][i].out;\n\t\tstate_changed[i].in[197] <== states[i+1][198];\n\t\tand[200][i] = AND();\n\t\tand[200][i].a <== states[i][172];\n\t\tand[200][i].b <== eq[26][i].out;\n\t\tstates[i+1][199] <== and[200][i].out;\n\t\tstate_changed[i].in[198] <== states[i+1][199];\n\t\tand[201][i] = AND();\n\t\tand[201][i].a <== states[i][198];\n\t\tand[201][i].b <== eq[0][i].out;\n\t\tstates[i+1][200] <== and[201][i].out;\n\t\tstate_changed[i].in[199] <== states[i+1][200];\n\t\tand[202][i] = AND();\n\t\tand[202][i].a <== states[i][200];\n\t\tand[202][i].b <== eq[0][i].out;\n\t\tstates[i+1][201] <== and[202][i].out;\n\t\tstate_changed[i].in[200] <== states[i+1][201];\n\t\tand[203][i] = AND();\n\t\tand[203][i].a <== states[i][201];\n\t\tand[203][i].b <== eq[0][i].out;\n\t\tstates[i+1][202] <== and[203][i].out;\n\t\tstate_changed[i].in[201] <== states[i+1][202];\n\t\tand[204][i] = AND();\n\t\tand[204][i].a <== states[i][202];\n\t\tand[204][i].b <== eq[0][i].out;\n\t\tstates[i+1][203] <== and[204][i].out;\n\t\tstate_changed[i].in[202] <== states[i+1][203];\n\t\tand[205][i] = AND();\n\t\tand[205][i].a <== states[i][203];\n\t\tand[205][i].b <== eq[0][i].out;\n\t\tstates[i+1][204] <== and[205][i].out;\n\t\tstate_changed[i].in[203] <== states[i+1][204];\n\t\tand[206][i] = AND();\n\t\tand[206][i].a <== states[i][204];\n\t\tand[206][i].b <== eq[0][i].out;\n\t\tstates[i+1][205] <== and[206][i].out;\n\t\tstate_changed[i].in[204] <== states[i+1][205];\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 104;\n\t\tand[207][i] = AND();\n\t\tand[207][i].a <== states[i][205];\n\t\tand[207][i].b <== eq[46][i].out;\n\t\tstates[i+1][206] <== and[207][i].out;\n\t\tstate_changed[i].in[205] <== states[i+1][206];\n\t\tand[208][i] = AND();\n\t\tand[208][i].a <== states[i][206];\n\t\tand[208][i].b <== eq[38][i].out;\n\t\tstates[i+1][207] <== and[208][i].out;\n\t\tstate_changed[i].in[206] <== states[i+1][207];\n\t\tand[209][i] = AND();\n\t\tand[209][i].a <== states[i][207];\n\t\tand[209][i].b <== eq[30][i].out;\n\t\tstates[i+1][208] <== and[209][i].out;\n\t\tstate_changed[i].in[207] <== states[i+1][208];\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 102;\n\t\tand[210][i] = AND();\n\t\tand[210][i].a <== states[i][208];\n\t\tand[210][i].b <== eq[47][i].out;\n\t\tstates[i+1][209] <== and[210][i].out;\n\t\tstate_changed[i].in[208] <== states[i+1][209];\n\t\tand[211][i] = AND();\n\t\tand[211][i].a <== states[i][209];\n\t\tand[211][i].b <== eq[19][i].out;\n\t\tstates[i+1][210] <== and[211][i].out;\n\t\tstate_changed[i].in[209] <== states[i+1][210];\n\t\tand[212][i] = AND();\n\t\tand[212][i].a <== states[i][210];\n\t\tand[212][i].b <== eq[34][i].out;\n\t\tstates[i+1][211] <== and[212][i].out;\n\t\tstate_changed[i].in[210] <== states[i+1][211];\n\t\tand[213][i] = AND();\n\t\tand[213][i].a <== states[i][211];\n\t\tand[213][i].b <== eq[35][i].out;\n\t\tstates[i+1][212] <== and[213][i].out;\n\t\tstate_changed[i].in[211] <== states[i+1][212];\n\t\tand[214][i] = AND();\n\t\tand[214][i].a <== states[i][212];\n\t\tand[214][i].b <== eq[36][i].out;\n\t\tstates[i+1][213] <== and[214][i].out;\n\t\tstate_changed[i].in[212] <== states[i+1][213];\n\t\tand[215][i] = AND();\n\t\tand[215][i].a <== states[i][213];\n\t\tand[215][i].b <== eq[46][i].out;\n\t\tstates[i+1][214] <== and[215][i].out;\n\t\tstate_changed[i].in[213] <== states[i+1][214];\n\t\tand[216][i] = AND();\n\t\tand[216][i].a <== states[i][214];\n\t\tand[216][i].b <== eq[29][i].out;\n\t\tstates[i+1][215] <== and[216][i].out;\n\t\tstate_changed[i].in[214] <== states[i+1][215];\n\t\tand[217][i] = AND();\n\t\tand[217][i].a <== states[i][215];\n\t\tand[217][i].b <== eq[29][i].out;\n\t\tstates[i+1][216] <== and[217][i].out;\n\t\tstate_changed[i].in[215] <== states[i+1][216];\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 112;\n\t\tand[218][i] = AND();\n\t\tand[218][i].a <== states[i][216];\n\t\tand[218][i].b <== eq[48][i].out;\n\t\tstates[i+1][217] <== and[218][i].out;\n\t\tstate_changed[i].in[216] <== states[i+1][217];\n\t\tand[219][i] = AND();\n\t\tand[219][i].a <== states[i][217];\n\t\tand[219][i].b <== eq[31][i].out;\n\t\tstates[i+1][218] <== and[219][i].out;\n\t\tstate_changed[i].in[217] <== states[i+1][218];\n\t\tand[220][i] = AND();\n\t\tand[220][i].a <== states[i][218];\n\t\tand[220][i].b <== eq[39][i].out;\n\t\tstates[i+1][219] <== and[220][i].out;\n\t\tstate_changed[i].in[218] <== states[i+1][219];\n\t\tand[221][i] = AND();\n\t\tand[221][i].a <== states[i][219];\n\t\tand[221][i].b <== eq[15][i].out;\n\t\tstates[i+1][220] <== and[221][i].out;\n\t\tstate_changed[i].in[219] <== states[i+1][220];\n\t\tand[222][i] = AND();\n\t\tand[222][i].a <== states[i][220];\n\t\tand[222][i].b <== eq[15][i].out;\n\t\tstates[i+1][221] <== and[222][i].out;\n\t\tstate_changed[i].in[220] <== states[i+1][221];\n\t\tand[223][i] = AND();\n\t\tand[223][i].a <== states[i][221];\n\t\tand[223][i].b <== eq[24][i].out;\n\t\tstates[i+1][222] <== and[223][i].out;\n\t\tstate_changed[i].in[221] <== states[i+1][222];\n\t\tand[224][i] = AND();\n\t\tand[224][i].a <== states[i][222];\n\t\tand[224][i].b <== eq[30][i].out;\n\t\tstates[i+1][223] <== and[224][i].out;\n\t\tstate_changed[i].in[222] <== states[i+1][223];\n\t\tand[225][i] = AND();\n\t\tand[225][i].a <== states[i][223];\n\t\tand[225][i].b <== eq[27][i].out;\n\t\tstates[i+1][224] <== and[225][i].out;\n\t\tstate_changed[i].in[223] <== states[i+1][224];\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 109;\n\t\tand[226][i] = AND();\n\t\tand[226][i].a <== states[i][224];\n\t\tand[226][i].b <== eq[49][i].out;\n\t\tstates[i+1][225] <== and[226][i].out;\n\t\tstate_changed[i].in[224] <== states[i+1][225];\n\t\tand[227][i] = AND();\n\t\tand[227][i].a <== states[i][199];\n\t\tand[227][i].b <== eq[0][i].out;\n\t\tstates[i+1][226] <== and[227][i].out;\n\t\tstate_changed[i].in[225] <== states[i+1][226];\n\t\tand[228][i] = AND();\n\t\tand[228][i].a <== states[i][225];\n\t\tand[228][i].b <== eq[28][i].out;\n\t\tstates[i+1][227] <== and[228][i].out;\n\t\tstate_changed[i].in[226] <== states[i+1][227];\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 46;\n\t\tand[229][i] = AND();\n\t\tand[229][i].a <== states[i][227];\n\t\tand[229][i].b <== eq[50][i].out;\n\t\tstates[i+1][228] <== and[229][i].out;\n\t\tstate_changed[i].in[227] <== states[i+1][228];\n\t\tand[230][i] = AND();\n\t\tand[230][i].a <== states[i][228];\n\t\tand[230][i].b <== eq[37][i].out;\n\t\tstates[i+1][229] <== and[230][i].out;\n\t\tstate_changed[i].in[228] <== states[i+1][229];\n\t\tand[231][i] = AND();\n\t\tand[231][i].a <== states[i][229];\n\t\tand[231][i].b <== eq[28][i].out;\n\t\tstates[i+1][230] <== and[231][i].out;\n\t\tstate_changed[i].in[229] <== states[i+1][230];\n\t\tand[232][i] = AND();\n\t\tand[232][i].a <== states[i][230];\n\t\tand[232][i].b <== eq[49][i].out;\n\t\tstates[i+1][231] <== and[232][i].out;\n\t\tstate_changed[i].in[230] <== states[i+1][231];\n\t\tand[233][i] = AND();\n\t\tand[233][i].a <== states[i][231];\n\t\tand[233][i].b <== eq[15][i].out;\n\t\tstates[i+1][232] <== and[233][i].out;\n\t\tstate_changed[i].in[231] <== states[i+1][232];\n\t\tand[234][i] = AND();\n\t\tand[234][i].a <== states[i][232];\n\t\tand[234][i].b <== eq[37][i].out;\n\t\tstates[i+1][233] <== and[234][i].out;\n\t\tstate_changed[i].in[232] <== states[i+1][233];\n\t\tand[235][i] = AND();\n\t\tand[235][i].a <== states[i][233];\n\t\tand[235][i].b <== eq[28][i].out;\n\t\tstates[i+1][234] <== and[235][i].out;\n\t\tstate_changed[i].in[233] <== states[i+1][234];\n\t\tand[236][i] = AND();\n\t\tand[236][i].a <== states[i][234];\n\t\tand[236][i].b <== eq[22][i].out;\n\t\tstates[i+1][235] <== and[236][i].out;\n\t\tstate_changed[i].in[234] <== states[i+1][235];\n\t\tand[237][i] = AND();\n\t\tand[237][i].a <== states[i][235];\n\t\tand[237][i].b <== eq[30][i].out;\n\t\tstates[i+1][236] <== and[237][i].out;\n\t\tstate_changed[i].in[235] <== states[i+1][236];\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 63;\n\t\tand[238][i] = AND();\n\t\tand[238][i].a <== states[i][236];\n\t\tand[238][i].b <== eq[51][i].out;\n\t\tstates[i+1][237] <== and[238][i].out;\n\t\tstate_changed[i].in[236] <== states[i+1][237];\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 117;\n\t\tand[239][i] = AND();\n\t\tand[239][i].a <== states[i][237];\n\t\tand[239][i].b <== eq[52][i].out;\n\t\tstates[i+1][238] <== and[239][i].out;\n\t\tstate_changed[i].in[237] <== states[i+1][238];\n\t\tand[240][i] = AND();\n\t\tand[240][i].a <== states[i][238];\n\t\tand[240][i].b <== eq[31][i].out;\n\t\tstates[i+1][239] <== and[240][i].out;\n\t\tstate_changed[i].in[238] <== states[i+1][239];\n\t\tand[241][i] = AND();\n\t\tand[241][i].a <== states[i][239];\n\t\tand[241][i].b <== eq[30][i].out;\n\t\tstates[i+1][240] <== and[241][i].out;\n\t\tstate_changed[i].in[239] <== states[i+1][240];\n\t\tand[242][i] = AND();\n\t\tand[242][i].a <== states[i][240];\n\t\tand[242][i].b <== eq[38][i].out;\n\t\tstates[i+1][241] <== and[242][i].out;\n\t\tstate_changed[i].in[240] <== states[i+1][241];\n\t\teq[53][i] = IsEqual();\n\t\teq[53][i].in[0] <== in[i];\n\t\teq[53][i].in[1] <== 95;\n\t\tand[243][i] = AND();\n\t\tand[243][i].a <== states[i][241];\n\t\tand[243][i].b <== eq[53][i].out;\n\t\tstates[i+1][242] <== and[243][i].out;\n\t\tstate_changed[i].in[241] <== states[i+1][242];\n\t\tand[244][i] = AND();\n\t\tand[244][i].a <== states[i][242];\n\t\tand[244][i].b <== eq[23][i].out;\n\t\tstates[i+1][243] <== and[244][i].out;\n\t\tstate_changed[i].in[242] <== states[i+1][243];\n\t\tand[245][i] = AND();\n\t\tand[245][i].a <== states[i][243];\n\t\tand[245][i].b <== eq[22][i].out;\n\t\tstates[i+1][244] <== and[245][i].out;\n\t\tstate_changed[i].in[243] <== states[i+1][244];\n\t\tand[246][i] = AND();\n\t\tand[246][i].a <== states[i][244];\n\t\tand[246][i].b <== eq[19][i].out;\n\t\tstates[i+1][245] <== and[246][i].out;\n\t\tstate_changed[i].in[244] <== states[i+1][245];\n\t\tand[247][i] = AND();\n\t\tand[247][i].a <== states[i][245];\n\t\tand[247][i].b <== eq[34][i].out;\n\t\tstates[i+1][246] <== and[247][i].out;\n\t\tstate_changed[i].in[245] <== states[i+1][246];\n\t\tand[248][i] = AND();\n\t\tand[248][i].a <== states[i][246];\n\t\tand[248][i].b <== eq[35][i].out;\n\t\tstates[i+1][247] <== and[248][i].out;\n\t\tstate_changed[i].in[246] <== states[i+1][247];\n\t\teq[54][i] = IsEqual();\n\t\teq[54][i].in[0] <== in[i];\n\t\teq[54][i].in[1] <== 49;\n\t\teq[55][i] = IsEqual();\n\t\teq[55][i].in[0] <== in[i];\n\t\teq[55][i].in[1] <== 53;\n\t\teq[56][i] = IsEqual();\n\t\teq[56][i].in[0] <== in[i];\n\t\teq[56][i].in[1] <== 54;\n\t\teq[57][i] = IsEqual();\n\t\teq[57][i].in[0] <== in[i];\n\t\teq[57][i].in[1] <== 56;\n\t\teq[58][i] = IsEqual();\n\t\teq[58][i].in[0] <== in[i];\n\t\teq[58][i].in[1] <== 57;\n\t\tand[249][i] = AND();\n\t\tand[249][i].a <== states[i][247];\n\t\tmulti_or[2][i] = MultiOR(13);\n\t\tmulti_or[2][i].in[0] <== eq[13][i].out; // 10 = `\\n`\n\t\tmulti_or[2][i].in[1] <== eq[18][i].out; // 13 = `\\r`\n\t\tmulti_or[2][i].in[2] <== eq[21][i].out; // 48 = `0`\n\t\tmulti_or[2][i].in[3] <== eq[54][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[20][i].out; // 50 = `2`\n\t\tmulti_or[2][i].in[5] <== eq[34][i].out; // 51 = `3`\n\t\tmulti_or[2][i].in[6] <== eq[42][i].out; // 52 = `4`\n\t\tmulti_or[2][i].in[7] <== eq[55][i].out; // 53 = `5`\n\t\tmulti_or[2][i].in[8] <== eq[56][i].out; // 54 = `6`\n\t\tmulti_or[2][i].in[9] <== eq[41][i].out; // 55 = `7`\n\t\tmulti_or[2][i].in[10] <== eq[57][i].out;\n\t\tmulti_or[2][i].in[11] <== eq[58][i].out;\n\t\tmulti_or[2][i].in[12] <== eq[19][i].out; // 61 = `=`\n\t\tand[249][i].b <== multi_or[2][i].out;\n\t\tand[250][i] = AND();\n\t\tand[250][i].a <== states[i][248];\n\t\tand[250][i].b <== multi_or[2][i].out;\n\t\tmulti_or[3][i] = MultiOR(2);\n\t\tmulti_or[3][i].in[0] <== and[249][i].out;\n\t\tmulti_or[3][i].in[1] <== and[250][i].out;\n\t\tstates[i+1][248] <== multi_or[3][i].out;\n\t\tstate_changed[i].in[247] <== states[i+1][248];\n\t\tand[251][i] = AND();\n\t\tand[251][i].a <== states[i][226];\n\t\tand[251][i].b <== eq[38][i].out;\n\t\tstates[i+1][249] <== and[251][i].out;\n\t\tstate_changed[i].in[248] <== states[i+1][249];\n\t\teq[59][i] = IsEqual();\n\t\teq[59][i].in[0] <== in[i];\n\t\teq[59][i].in[1] <== 38;\n\t\tand[252][i] = AND();\n\t\tand[252][i].a <== states[i][248];\n\t\tand[252][i].b <== eq[59][i].out;\n\t\tstates[i+1][250] <== and[252][i].out;\n\t\tstate_changed[i].in[249] <== states[i+1][250];\n\t\tand[253][i] = AND();\n\t\tand[253][i].a <== states[i][250];\n\t\tand[253][i].b <== eq[16][i].out;\n\t\tstates[i+1][251] <== and[253][i].out;\n\t\tstate_changed[i].in[250] <== states[i+1][251];\n\t\tand[254][i] = AND();\n\t\tand[254][i].a <== states[i][251];\n\t\tand[254][i].b <== eq[37][i].out;\n\t\tstates[i+1][252] <== and[254][i].out;\n\t\tstate_changed[i].in[251] <== states[i+1][252];\n\t\tand[255][i] = AND();\n\t\tand[255][i].a <== states[i][252];\n\t\tand[255][i].b <== eq[29][i].out;\n\t\tstates[i+1][253] <== and[255][i].out;\n\t\tstate_changed[i].in[252] <== states[i+1][253];\n\t\tand[256][i] = AND();\n\t\tand[256][i].a <== states[i][253];\n\t\tand[256][i].b <== eq[28][i].out;\n\t\tstates[i+1][254] <== and[256][i].out;\n\t\tstate_changed[i].in[253] <== states[i+1][254];\n\t\tand[257][i] = AND();\n\t\tand[257][i].a <== states[i][249];\n\t\tand[257][i].b <== eq[30][i].out;\n\t\tstates[i+1][255] <== and[257][i].out;\n\t\tstate_changed[i].in[254] <== states[i+1][255];\n\t\tand[258][i] = AND();\n\t\tand[258][i].a <== states[i][254];\n\t\tand[258][i].b <== eq[38][i].out;\n\t\tstates[i+1][256] <== and[258][i].out;\n\t\tstate_changed[i].in[255] <== states[i+1][256];\n\t\tand[259][i] = AND();\n\t\tand[259][i].a <== states[i][256];\n\t\tand[259][i].b <== eq[53][i].out;\n\t\tstates[i+1][257] <== and[259][i].out;\n\t\tstate_changed[i].in[256] <== states[i+1][257];\n\t\tand[260][i] = AND();\n\t\tand[260][i].a <== states[i][257];\n\t\tand[260][i].b <== eq[23][i].out;\n\t\tstates[i+1][258] <== and[260][i].out;\n\t\tstate_changed[i].in[257] <== states[i+1][258];\n\t\tand[261][i] = AND();\n\t\tand[261][i].a <== states[i][258];\n\t\tand[261][i].b <== eq[22][i].out;\n\t\tstates[i+1][259] <== and[261][i].out;\n\t\tstate_changed[i].in[258] <== states[i+1][259];\n\t\tand[262][i] = AND();\n\t\tand[262][i].a <== states[i][259];\n\t\tand[262][i].b <== eq[19][i].out;\n\t\tstates[i+1][260] <== and[262][i].out;\n\t\tstate_changed[i].in[259] <== states[i+1][260];\n\t\tand[263][i] = AND();\n\t\tand[263][i].a <== states[i][260];\n\t\tand[263][i].b <== eq[34][i].out;\n\t\tstates[i+1][261] <== and[263][i].out;\n\t\tstate_changed[i].in[260] <== states[i+1][261];\n\t\tand[264][i] = AND();\n\t\tand[264][i].a <== states[i][261];\n\t\tand[264][i].b <== eq[35][i].out;\n\t\tstates[i+1][262] <== and[264][i].out;\n\t\tstate_changed[i].in[261] <== states[i+1][262];\n\t\tand[265][i] = AND();\n\t\tand[265][i].a <== states[i][262];\n\t\tmulti_or[4][i] = MultiOR(10);\n\t\tmulti_or[4][i].in[0] <== eq[21][i].out; // 48 = `0`\n\t\tmulti_or[4][i].in[1] <== eq[54][i].out; // 49 = `1`\n\t\tmulti_or[4][i].in[2] <== eq[20][i].out; // 50 = `2`\n\t\tmulti_or[4][i].in[3] <== eq[34][i].out; // 51 = `3`\n\t\tmulti_or[4][i].in[4] <== eq[42][i].out; // 52 = `4`\n\t\tmulti_or[4][i].in[5] <== eq[55][i].out; // 53 = `5`\n\t\tmulti_or[4][i].in[6] <== eq[56][i].out; // 54 = `6`\n\t\tmulti_or[4][i].in[7] <== eq[41][i].out; // 55 = `7`\n\t\tmulti_or[4][i].in[8] <== eq[57][i].out; // 56 = `8`\n\t\tmulti_or[4][i].in[9] <== eq[58][i].out; // 57 = `9`\n\t\tand[265][i].b <== multi_or[4][i].out;\n\t\tand[266][i] = AND();\n\t\tand[266][i].a <== states[i][263];\n\t\tand[266][i].b <== multi_or[4][i].out;\n\t\tmulti_or[5][i] = MultiOR(2);\n\t\tmulti_or[5][i].in[0] <== and[265][i].out;\n\t\tmulti_or[5][i].in[1] <== and[266][i].out;\n\t\tstates[i+1][263] <== multi_or[5][i].out;\n\t\tstate_changed[i].in[262] <== states[i+1][263];\n\t\tand[267][i] = AND();\n\t\tand[267][i].a <== states[i][263];\n\t\tand[267][i].b <== eq[36][i].out;\n\t\tstates[i+1][264] <== and[267][i].out;\n\t\tstate_changed[i].in[263] <== states[i+1][264];\n\t\tand[268][i] = AND();\n\t\tand[268][i].a <== states[i][255];\n\t\tand[268][i].b <== eq[37][i].out;\n\t\tstates[i+1][265] <== and[268][i].out;\n\t\tstate_changed[i].in[264] <== states[i+1][265];\n\t\tand[269][i] = AND();\n\t\tand[269][i].a <== states[i][264];\n\t\tand[269][i].b <== eq[17][i].out;\n\t\tstates[i+1][266] <== and[269][i].out;\n\t\tstate_changed[i].in[265] <== states[i+1][266];\n\t\tand[270][i] = AND();\n\t\tand[270][i].a <== states[i][266];\n\t\tand[270][i].b <== eq[18][i].out;\n\t\tstates[i+1][267] <== and[270][i].out;\n\t\tstate_changed[i].in[266] <== states[i+1][267];\n\t\tand[271][i] = AND();\n\t\tand[271][i].a <== states[i][267];\n\t\tand[271][i].b <== eq[13][i].out;\n\t\tstates[i+1][268] <== and[271][i].out;\n\t\tstate_changed[i].in[267] <== states[i+1][268];\n\t\tand[272][i] = AND();\n\t\tand[272][i].a <== states[i][268];\n\t\tand[272][i].b <== eq[0][i].out;\n\t\tstates[i+1][269] <== and[272][i].out;\n\t\tstate_changed[i].in[268] <== states[i+1][269];\n\t\tand[273][i] = AND();\n\t\tand[273][i].a <== states[i][269];\n\t\tand[273][i].b <== eq[0][i].out;\n\t\tstates[i+1][270] <== and[273][i].out;\n\t\tstate_changed[i].in[269] <== states[i+1][270];\n\t\tand[274][i] = AND();\n\t\tand[274][i].a <== states[i][270];\n\t\tand[274][i].b <== eq[0][i].out;\n\t\tstates[i+1][271] <== and[274][i].out;\n\t\tstate_changed[i].in[270] <== states[i+1][271];\n\t\tand[275][i] = AND();\n\t\tand[275][i].a <== states[i][271];\n\t\tand[275][i].b <== eq[0][i].out;\n\t\tstates[i+1][272] <== and[275][i].out;\n\t\tstate_changed[i].in[271] <== states[i+1][272];\n\t\tand[276][i] = AND();\n\t\tand[276][i].a <== states[i][272];\n\t\tand[276][i].b <== eq[0][i].out;\n\t\tstates[i+1][273] <== and[276][i].out;\n\t\tstate_changed[i].in[272] <== states[i+1][273];\n\t\tand[277][i] = AND();\n\t\tand[277][i].a <== states[i][273];\n\t\tand[277][i].b <== eq[0][i].out;\n\t\tstates[i+1][274] <== and[277][i].out;\n\t\tstate_changed[i].in[273] <== states[i+1][274];\n\t\tand[278][i] = AND();\n\t\tand[278][i].a <== states[i][274];\n\t\tand[278][i].b <== eq[0][i].out;\n\t\tstates[i+1][275] <== and[278][i].out;\n\t\tstate_changed[i].in[274] <== states[i+1][275];\n\t\tand[279][i] = AND();\n\t\tand[279][i].a <== states[i][275];\n\t\tand[279][i].b <== eq[0][i].out;\n\t\tstates[i+1][276] <== and[279][i].out;\n\t\tstate_changed[i].in[275] <== states[i+1][276];\n\t\tand[280][i] = AND();\n\t\tand[280][i].a <== states[i][276];\n\t\tand[280][i].b <== eq[0][i].out;\n\t\tstates[i+1][277] <== and[280][i].out;\n\t\tstate_changed[i].in[276] <== states[i+1][277];\n\t\tand[281][i] = AND();\n\t\tand[281][i].a <== states[i][277];\n\t\tand[281][i].b <== eq[0][i].out;\n\t\tstates[i+1][278] <== and[281][i].out;\n\t\tstate_changed[i].in[277] <== states[i+1][278];\n\t\tand[282][i] = AND();\n\t\tand[282][i].a <== states[i][278];\n\t\tand[282][i].b <== eq[0][i].out;\n\t\tstates[i+1][279] <== and[282][i].out;\n\t\tstate_changed[i].in[278] <== states[i+1][279];\n\t\tand[283][i] = AND();\n\t\tand[283][i].a <== states[i][279];\n\t\tand[283][i].b <== eq[0][i].out;\n\t\tstates[i+1][280] <== and[283][i].out;\n\t\tstate_changed[i].in[279] <== states[i+1][280];\n\t\tand[284][i] = AND();\n\t\tand[284][i].a <== states[i][280];\n\t\tand[284][i].b <== eq[0][i].out;\n\t\tstates[i+1][281] <== and[284][i].out;\n\t\tstate_changed[i].in[280] <== states[i+1][281];\n\t\tand[285][i] = AND();\n\t\tand[285][i].a <== states[i][281];\n\t\tand[285][i].b <== eq[0][i].out;\n\t\tstates[i+1][282] <== and[285][i].out;\n\t\tstate_changed[i].in[281] <== states[i+1][282];\n\t\tand[286][i] = AND();\n\t\tand[286][i].a <== states[i][282];\n\t\tand[286][i].b <== eq[0][i].out;\n\t\tstates[i+1][283] <== and[286][i].out;\n\t\tstate_changed[i].in[282] <== states[i+1][283];\n\t\tand[287][i] = AND();\n\t\tand[287][i].a <== states[i][283];\n\t\tand[287][i].b <== eq[0][i].out;\n\t\tstates[i+1][284] <== and[287][i].out;\n\t\tstate_changed[i].in[283] <== states[i+1][284];\n\t\tand[288][i] = AND();\n\t\tand[288][i].a <== states[i][284];\n\t\tand[288][i].b <== eq[0][i].out;\n\t\tstates[i+1][285] <== and[288][i].out;\n\t\tstate_changed[i].in[284] <== states[i+1][285];\n\t\tand[289][i] = AND();\n\t\tand[289][i].a <== states[i][285];\n\t\tand[289][i].b <== eq[0][i].out;\n\t\tstates[i+1][286] <== and[289][i].out;\n\t\tstate_changed[i].in[285] <== states[i+1][286];\n\t\tand[290][i] = AND();\n\t\tand[290][i].a <== states[i][286];\n\t\tand[290][i].b <== eq[0][i].out;\n\t\tstates[i+1][287] <== and[290][i].out;\n\t\tstate_changed[i].in[286] <== states[i+1][287];\n\t\tand[291][i] = AND();\n\t\tand[291][i].a <== states[i][287];\n\t\tand[291][i].b <== eq[19][i].out;\n\t\tstates[i+1][288] <== and[291][i].out;\n\t\tstate_changed[i].in[287] <== states[i+1][288];\n\t\tand[292][i] = AND();\n\t\tand[292][i].a <== states[i][288];\n\t\tand[292][i].b <== eq[20][i].out;\n\t\tstates[i+1][289] <== and[292][i].out;\n\t\tstate_changed[i].in[288] <== states[i+1][289];\n\t\tand[293][i] = AND();\n\t\tand[293][i].a <== states[i][265];\n\t\tand[293][i].b <== eq[23][i].out;\n\t\tstates[i+1][290] <== and[293][i].out;\n\t\tstate_changed[i].in[289] <== states[i+1][290];\n\t\tand[294][i] = AND();\n\t\tand[294][i].a <== states[i][289];\n\t\tand[294][i].b <== eq[21][i].out;\n\t\tstates[i+1][291] <== and[294][i].out;\n\t\tstate_changed[i].in[290] <== states[i+1][291];\n\t\tand[295][i] = AND();\n\t\tand[295][i].a <== states[i][291];\n\t\tand[295][i].b <== eq[18][i].out;\n\t\tstates[i+1][292] <== and[295][i].out;\n\t\tstate_changed[i].in[291] <== states[i+1][292];\n\t\tand[296][i] = AND();\n\t\tand[296][i].a <== states[i][292];\n\t\tand[296][i].b <== eq[13][i].out;\n\t\tstates[i+1][293] <== and[296][i].out;\n\t\tstate_changed[i].in[292] <== states[i+1][293];\n\t\tand[297][i] = AND();\n\t\tand[297][i].a <== states[i][293];\n\t\tand[297][i].b <== eq[0][i].out;\n\t\tstates[i+1][294] <== and[297][i].out;\n\t\tstate_changed[i].in[293] <== states[i+1][294];\n\t\tand[298][i] = AND();\n\t\tand[298][i].a <== states[i][294];\n\t\tand[298][i].b <== eq[0][i].out;\n\t\tstates[i+1][295] <== and[298][i].out;\n\t\tstate_changed[i].in[294] <== states[i+1][295];\n\t\tand[299][i] = AND();\n\t\tand[299][i].a <== states[i][295];\n\t\tand[299][i].b <== eq[0][i].out;\n\t\tstates[i+1][296] <== and[299][i].out;\n\t\tstate_changed[i].in[295] <== states[i+1][296];\n\t\tand[300][i] = AND();\n\t\tand[300][i].a <== states[i][296];\n\t\tand[300][i].b <== eq[0][i].out;\n\t\tstates[i+1][297] <== and[300][i].out;\n\t\tstate_changed[i].in[296] <== states[i+1][297];\n\t\tand[301][i] = AND();\n\t\tand[301][i].a <== states[i][297];\n\t\tand[301][i].b <== eq[0][i].out;\n\t\tstates[i+1][298] <== and[301][i].out;\n\t\tstate_changed[i].in[297] <== states[i+1][298];\n\t\tand[302][i] = AND();\n\t\tand[302][i].a <== states[i][298];\n\t\tand[302][i].b <== eq[0][i].out;\n\t\tstates[i+1][299] <== and[302][i].out;\n\t\tstate_changed[i].in[298] <== states[i+1][299];\n\t\tand[303][i] = AND();\n\t\tand[303][i].a <== states[i][299];\n\t\tand[303][i].b <== eq[0][i].out;\n\t\tstates[i+1][300] <== and[303][i].out;\n\t\tstate_changed[i].in[299] <== states[i+1][300];\n\t\tand[304][i] = AND();\n\t\tand[304][i].a <== states[i][300];\n\t\tand[304][i].b <== eq[0][i].out;\n\t\tstates[i+1][301] <== and[304][i].out;\n\t\tstate_changed[i].in[300] <== states[i+1][301];\n\t\tand[305][i] = AND();\n\t\tand[305][i].a <== states[i][301];\n\t\tand[305][i].b <== eq[0][i].out;\n\t\tstates[i+1][302] <== and[305][i].out;\n\t\tstate_changed[i].in[301] <== states[i+1][302];\n\t\tand[306][i] = AND();\n\t\tand[306][i].a <== states[i][302];\n\t\tand[306][i].b <== eq[0][i].out;\n\t\tstates[i+1][303] <== and[306][i].out;\n\t\tstate_changed[i].in[302] <== states[i+1][303];\n\t\tand[307][i] = AND();\n\t\tand[307][i].a <== states[i][303];\n\t\tand[307][i].b <== eq[0][i].out;\n\t\tstates[i+1][304] <== and[307][i].out;\n\t\tstate_changed[i].in[303] <== states[i+1][304];\n\t\tand[308][i] = AND();\n\t\tand[308][i].a <== states[i][304];\n\t\tand[308][i].b <== eq[0][i].out;\n\t\tstates[i+1][305] <== and[308][i].out;\n\t\tstate_changed[i].in[304] <== states[i+1][305];\n\t\tand[309][i] = AND();\n\t\tand[309][i].a <== states[i][305];\n\t\tand[309][i].b <== eq[0][i].out;\n\t\tstates[i+1][306] <== and[309][i].out;\n\t\tstate_changed[i].in[305] <== states[i+1][306];\n\t\tand[310][i] = AND();\n\t\tand[310][i].a <== states[i][306];\n\t\tand[310][i].b <== eq[0][i].out;\n\t\tstates[i+1][307] <== and[310][i].out;\n\t\tstate_changed[i].in[306] <== states[i+1][307];\n\t\tand[311][i] = AND();\n\t\tand[311][i].a <== states[i][307];\n\t\tand[311][i].b <== eq[0][i].out;\n\t\tstates[i+1][308] <== and[311][i].out;\n\t\tstate_changed[i].in[307] <== states[i+1][308];\n\t\tand[312][i] = AND();\n\t\tand[312][i].a <== states[i][308];\n\t\tand[312][i].b <== eq[0][i].out;\n\t\tstates[i+1][309] <== and[312][i].out;\n\t\tstate_changed[i].in[308] <== states[i+1][309];\n\t\tand[313][i] = AND();\n\t\tand[313][i].a <== states[i][309];\n\t\tand[313][i].b <== eq[0][i].out;\n\t\tstates[i+1][310] <== and[313][i].out;\n\t\tstate_changed[i].in[309] <== states[i+1][310];\n\t\tand[314][i] = AND();\n\t\tand[314][i].a <== states[i][310];\n\t\tand[314][i].b <== eq[0][i].out;\n\t\tstates[i+1][311] <== and[314][i].out;\n\t\tstate_changed[i].in[310] <== states[i+1][311];\n\t\tand[315][i] = AND();\n\t\tand[315][i].a <== states[i][311];\n\t\tand[315][i].b <== eq[0][i].out;\n\t\tstates[i+1][312] <== and[315][i].out;\n\t\tstate_changed[i].in[311] <== states[i+1][312];\n\t\tand[316][i] = AND();\n\t\tand[316][i].a <== states[i][312];\n\t\tand[316][i].b <== eq[0][i].out;\n\t\tstates[i+1][313] <== and[316][i].out;\n\t\tstate_changed[i].in[312] <== states[i+1][313];\n\t\tand[317][i] = AND();\n\t\tand[317][i].a <== states[i][290];\n\t\tand[317][i].b <== eq[48][i].out;\n\t\tstates[i+1][314] <== and[317][i].out;\n\t\tstate_changed[i].in[313] <== states[i+1][314];\n\t\tand[318][i] = AND();\n\t\tand[318][i].a <== states[i][314];\n\t\tand[318][i].b <== eq[23][i].out;\n\t\tstates[i+1][315] <== and[318][i].out;\n\t\tstate_changed[i].in[314] <== states[i+1][315];\n\t\tand[319][i] = AND();\n\t\tand[319][i].a <== states[i][315];\n\t\tand[319][i].b <== eq[30][i].out;\n\t\tstates[i+1][316] <== and[319][i].out;\n\t\tstate_changed[i].in[315] <== states[i+1][316];\n\t\tand[320][i] = AND();\n\t\tand[320][i].a <== states[i][316];\n\t\tand[320][i].b <== eq[27][i].out;\n\t\tstates[i+1][317] <== and[320][i].out;\n\t\tstate_changed[i].in[316] <== states[i+1][317];\n\t\tand[321][i] = AND();\n\t\tand[321][i].a <== states[i][317];\n\t\tand[321][i].b <== eq[29][i].out;\n\t\tstates[i+1][318] <== and[321][i].out;\n\t\tstate_changed[i].in[317] <== states[i+1][318];\n\t\tand[322][i] = AND();\n\t\tand[322][i].a <== states[i][318];\n\t\tand[322][i].b <== eq[0][i].out;\n\t\tstates[i+1][319] <== and[322][i].out;\n\t\tstate_changed[i].in[318] <== states[i+1][319];\n\t\tand[323][i] = AND();\n\t\tand[323][i].a <== states[i][319];\n\t\tand[323][i].b <== eq[27][i].out;\n\t\tstates[i+1][320] <== and[323][i].out;\n\t\tstate_changed[i].in[319] <== states[i+1][320];\n\t\tand[324][i] = AND();\n\t\tand[324][i].a <== states[i][320];\n\t\tand[324][i].b <== eq[16][i].out;\n\t\tstates[i+1][321] <== and[324][i].out;\n\t\tstate_changed[i].in[320] <== states[i+1][321];\n\t\tand[325][i] = AND();\n\t\tand[325][i].a <== states[i][321];\n\t\tand[325][i].b <== eq[49][i].out;\n\t\tstates[i+1][322] <== and[325][i].out;\n\t\tstate_changed[i].in[321] <== states[i+1][322];\n\t\tand[326][i] = AND();\n\t\tand[326][i].a <== states[i][322];\n\t\tand[326][i].b <== eq[30][i].out;\n\t\tstates[i+1][323] <== and[326][i].out;\n\t\tstate_changed[i].in[322] <== states[i+1][323];\n\t\tand[327][i] = AND();\n\t\tand[327][i].a <== states[i][323];\n\t\tand[327][i].b <== eq[0][i].out;\n\t\tstates[i+1][324] <== and[327][i].out;\n\t\tstate_changed[i].in[323] <== states[i+1][324];\n\t\tand[328][i] = AND();\n\t\tand[328][i].a <== states[i][2];\n\t\tand[328][i].b <== eq[18][i].out;\n\t\tstates[i+1][325] <== and[328][i].out;\n\t\tstate_changed[i].in[324] <== states[i+1][325];\n\t\tand[329][i] = AND();\n\t\tand[329][i].a <== states[i][324];\n\t\tand[329][i].b <== eq[26][i].out;\n\t\tstates[i+1][326] <== and[329][i].out;\n\t\tstate_changed[i].in[325] <== states[i+1][326];\n\t\tand[330][i] = AND();\n\t\tand[330][i].a <== states[i][326];\n\t\tand[330][i].b <== eq[26][i].out;\n\t\tstates[i+1][327] <== and[330][i].out;\n\t\tstate_changed[i].in[326] <== states[i+1][327];\n\t\tand[331][i] = AND();\n\t\tand[331][i].a <== states[i][327];\n\t\tand[331][i].b <== eq[17][i].out;\n\t\tstates[i+1][328] <== and[331][i].out;\n\t\tstate_changed[i].in[327] <== states[i+1][328];\n\t\tand[332][i] = AND();\n\t\tand[332][i].a <== states[i][328];\n\t\tand[332][i].b <== eq[18][i].out;\n\t\tstates[i+1][329] <== and[332][i].out;\n\t\tstate_changed[i].in[328] <== states[i+1][329];\n\t\tand[333][i] = AND();\n\t\tand[333][i].a <== states[i][329];\n\t\tand[333][i].b <== eq[13][i].out;\n\t\tstates[i+1][330] <== and[333][i].out;\n\t\tstate_changed[i].in[329] <== states[i+1][330];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][98];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][98] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][262] * states[i+2][263];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][263] * states[i+2][263];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_actor_id.json",
    "content": "{\n    \"parts\": [\n      {\n        \"is_public\": false,\n        \"regex_def\": \"<!-- recipient name -->\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"                   =20\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"                    href=3D\\\"https://venmo.com/code\\\\?user_id=3D\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9|\\r|\\n|=)+&actor_id=3D\"\n      },\n      {\n        \"is_public\": true,\n        \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"\\\">\\r\\n                   =20\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"                    [^\\r\\n]+\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"                </a>\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"               =20\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"            </div>\\r\\n\"\n      },\n      {\n        \"is_public\": false,\n        \"regex_def\": \"            <!-- note -->\\r\\n\"\n      }\n    ]\n  }\n  "
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_p2p_check.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\n\ntemplate VenmoP2PCheckRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[17][num_bytes];\n\tcomponent and[37][num_bytes];\n\tsignal states[num_bytes+1][38];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 38; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(37);\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 121;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][37];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 32;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== states[i][1];\n\t\tand[1][i].b <== eq[1][i].out;\n\t\tstates[i+1][2] <== and[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 111;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tand[2][i].b <== eq[2][i].out;\n\t\tstates[i+1][3] <== and[2][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 114;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][3];\n\t\tand[3][i].b <== eq[3][i].out;\n\t\tstates[i+1][4] <== and[3][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][4];\n\t\tand[4][i].b <== eq[1][i].out;\n\t\tstates[i+1][5] <== and[4][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 100;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][5];\n\t\tand[5][i].b <== eq[4][i].out;\n\t\tstates[i+1][6] <== and[5][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 101;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][6];\n\t\tand[6][i].b <== eq[5][i].out;\n\t\tstates[i+1][7] <== and[6][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 108;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][7];\n\t\tand[7][i].b <== eq[6][i].out;\n\t\tstates[i+1][8] <== and[7][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 97;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][8];\n\t\tand[8][i].b <== eq[7][i].out;\n\t\tstates[i+1][9] <== and[8][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][9];\n\t\tand[9][i].b <== eq[0][i].out;\n\t\tstates[i+1][10] <== and[9][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][10];\n\t\tand[10][i].b <== eq[5][i].out;\n\t\tstates[i+1][11] <== and[10][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][11];\n\t\tand[11][i].b <== eq[4][i].out;\n\t\tstates[i+1][12] <== and[11][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][0];\n\t\tand[12][i].b <== eq[6][i].out;\n\t\tstates[i+1][13] <== and[12][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 105;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][13];\n\t\tand[13][i].b <== eq[8][i].out;\n\t\tstates[i+1][14] <== and[13][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][14];\n\t\tand[14][i].b <== eq[7][i].out;\n\t\tstates[i+1][15] <== and[14][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 98;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][15];\n\t\tand[15][i].b <== eq[9][i].out;\n\t\tstates[i+1][16] <== and[15][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][16];\n\t\tand[16][i].b <== eq[6][i].out;\n\t\tstates[i+1][17] <== and[16][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][17];\n\t\tand[17][i].b <== eq[5][i].out;\n\t\tstates[i+1][18] <== and[17][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][18];\n\t\tand[18][i].b <== eq[1][i].out;\n\t\tstates[i+1][19] <== and[18][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 102;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][19];\n\t\tand[19][i].b <== eq[10][i].out;\n\t\tstates[i+1][20] <== and[19][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][20];\n\t\tand[20][i].b <== eq[2][i].out;\n\t\tstates[i+1][21] <== and[20][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[3][i].out;\n\t\tstates[i+1][22] <== and[21][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][22];\n\t\tand[22][i].b <== eq[1][i].out;\n\t\tstates[i+1][23] <== and[22][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 110;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][23];\n\t\tand[23][i].b <== eq[11][i].out;\n\t\tstates[i+1][24] <== and[23][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][24];\n\t\tand[24][i].b <== eq[2][i].out;\n\t\tstates[i+1][25] <== and[24][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][25];\n\t\tand[25][i].b <== eq[11][i].out;\n\t\tstates[i+1][26] <== and[25][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 45;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][26];\n\t\tand[26][i].b <== eq[12][i].out;\n\t\tstates[i+1][27] <== and[26][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][27];\n\t\tand[27][i].b <== eq[4][i].out;\n\t\tstates[i+1][28] <== and[27][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][28];\n\t\tand[28][i].b <== eq[5][i].out;\n\t\tstates[i+1][29] <== and[28][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][29];\n\t\tand[29][i].b <== eq[6][i].out;\n\t\tstates[i+1][30] <== and[29][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][30];\n\t\tand[30][i].b <== eq[8][i].out;\n\t\tstates[i+1][31] <== and[30][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 118;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][31];\n\t\tand[31][i].b <== eq[13][i].out;\n\t\tstates[i+1][32] <== and[31][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][32];\n\t\tand[32][i].b <== eq[5][i].out;\n\t\tstates[i+1][33] <== and[32][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][33];\n\t\tand[33][i].b <== eq[3][i].out;\n\t\tstates[i+1][34] <== and[33][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 61;\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][34];\n\t\tand[34][i].b <== eq[14][i].out;\n\t\tstates[i+1][35] <== and[34][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 13;\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][35];\n\t\tand[35][i].b <== eq[15][i].out;\n\t\tstates[i+1][36] <== and[35][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 10;\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][36];\n\t\tand[36][i].b <== eq[16][i].out;\n\t\tstates[i+1][37] <== and[36][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][12];\n\t}\n\tout <== final_state_result.out;\n}"
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_p2p_check.json",
    "content": "{\n\t\"parts\": [\n\t\t{\n\t\t\t\"is_public\": false,\n\t\t\t\"regex_def\": \"liable for non-deliver=\\r\\ny or delayed\"\n\t\t}\n\t]\n}\n  "
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_send_amount.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate VenmoSendAmountRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[53][num_bytes];\n\tcomponent lt[8][num_bytes];\n\tcomponent and[36][num_bytes];\n\tcomponent multi_or[10][num_bytes];\n\tsignal states[num_bytes+1][25];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 25; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(24);\n\t\t// Catch all except `$` `\\r` `\\n`\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 14;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 35;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== lt[0][i].out;\n\t\tand[0][i].b <== lt[1][i].out;\n\t\tlt[2][i] = LessEqThan(8);\n\t\tlt[2][i].in[0] <== 37;\n\t\tlt[2][i].in[1] <== in[i];\n\t\tlt[3][i] = LessEqThan(8);\n\t\tlt[3][i].in[0] <== in[i];\n\t\tlt[3][i].in[1] <== 254;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[2][i].out;\n\t\tand[1][i].b <== lt[3][i].out;\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 0;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 1;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 2;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 3;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 4;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 5;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 6;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 7;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 8;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 9;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 11;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 12;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][1];\n\t\tmulti_or[0][i] = MultiOR(14);\n\t\tmulti_or[0][i].in[0] <== and[0][i].out;\n\t\tmulti_or[0][i].in[1] <== and[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[13] <== eq[11][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\t// Catch all except `$` `\\r` `\\n` `,` `.` `[0-9]`\n\t\tlt[4][i] = LessEqThan(8);\n\t\tlt[4][i].in[0] <== 58;\n\t\tlt[4][i].in[1] <== in[i];\n\t\tlt[5][i] = LessEqThan(8);\n\t\tlt[5][i].in[0] <== in[i];\n\t\tlt[5][i].in[1] <== 254;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== lt[4][i].out;\n\t\tand[3][i].b <== lt[5][i].out;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 37;\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 38;\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 39;\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 40;\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 41;\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 42;\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 43;\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 45;\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 47;\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][11];\n\t\tmulti_or[1][i] = MultiOR(23);\n\t\tmulti_or[1][i].in[0] <== and[3][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\t// Reuse previous eq\n\t\tmulti_or[1][i].in[2] <== eq[0][i].out;\n\t\tmulti_or[1][i].in[3] <== eq[1][i].out;\n\t\tmulti_or[1][i].in[4] <== eq[2][i].out;\n\t\tmulti_or[1][i].in[5] <== eq[3][i].out;\n\t\tmulti_or[1][i].in[6] <== eq[4][i].out;\n\t\tmulti_or[1][i].in[7] <== eq[5][i].out;\n\t\tmulti_or[1][i].in[8] <== eq[6][i].out;\n\t\tmulti_or[1][i].in[9] <== eq[7][i].out;\n\t\tmulti_or[1][i].in[10] <== eq[8][i].out;\n\t\tmulti_or[1][i].in[11] <== eq[9][i].out;\n\t\tmulti_or[1][i].in[12] <== eq[10][i].out;\n\t\tmulti_or[1][i].in[13] <== eq[11][i].out;\n\t\t// Start using new eq\n\t\tmulti_or[1][i].in[14] <== eq[12][i].out;\n\t\tmulti_or[1][i].in[15] <== eq[13][i].out;\n\t\tmulti_or[1][i].in[16] <== eq[14][i].out;\n\t\tmulti_or[1][i].in[17] <== eq[15][i].out;\n\t\tmulti_or[1][i].in[18] <== eq[16][i].out;\n\t\tmulti_or[1][i].in[19] <== eq[17][i].out;\n\t\tmulti_or[1][i].in[20] <== eq[18][i].out;\n\t\tmulti_or[1][i].in[21] <== eq[19][i].out;\n\t\tmulti_or[1][i].in[22] <== eq[20][i].out;\n\t\tand[4][i].b <== multi_or[1][i].out;\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][21];\n\t\tand[5][i].b <== multi_or[1][i].out;\n\t\t// Catch all except `\\r` `\\n`\n\t\tlt[6][i] = LessEqThan(8);\n\t\tlt[6][i].in[0] <== 14;\n\t\tlt[6][i].in[1] <== in[i];\n\t\tlt[7][i] = LessEqThan(8);\n\t\tlt[7][i].in[0] <== in[i];\n\t\tlt[7][i].in[1] <== 254;\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== lt[6][i].out;\n\t\tand[6][i].b <== lt[7][i].out;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][23];\n\t\tmulti_or[2][i] = MultiOR(13);\n\t\tmulti_or[2][i].in[0] <== and[6][i].out;\n\t\tmulti_or[2][i].in[1] <== eq[0][i].out;\n\t\tmulti_or[2][i].in[2] <== eq[1][i].out;\n\t\tmulti_or[2][i].in[3] <== eq[2][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[3][i].out;\n\t\tmulti_or[2][i].in[5] <== eq[4][i].out;\n\t\tmulti_or[2][i].in[6] <== eq[5][i].out;\n\t\tmulti_or[2][i].in[7] <== eq[6][i].out;\n\t\tmulti_or[2][i].in[8] <== eq[7][i].out;\n\t\tmulti_or[2][i].in[9] <== eq[8][i].out;\n\t\tmulti_or[2][i].in[10] <== eq[9][i].out;\n\t\tmulti_or[2][i].in[11] <== eq[10][i].out;\n\t\tmulti_or[2][i].in[12] <== eq[11][i].out;\n\t\tand[7][i].b <== multi_or[2][i].out;\n\t\tmulti_or[3][i] = MultiOR(4);\n\t\tmulti_or[3][i].in[0] <== and[2][i].out;\n\t\tmulti_or[3][i].in[1] <== and[4][i].out;\n\t\tmulti_or[3][i].in[2] <== and[5][i].out;\n\t\tmulti_or[3][i].in[3] <== and[7][i].out;\n\t\tstates[i+1][1] <== multi_or[3][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\t// 13 = `\\r`\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 13;\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][0];\n\t\tand[8][i].b <== eq[21][i].out;\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][3];\n\t\tand[9][i].b <== eq[21][i].out; // Use eq[21]\n\t\tmulti_or[4][i] = MultiOR(2);\n\t\tmulti_or[4][i].in[0] <== and[8][i].out;\n\t\tmulti_or[4][i].in[1] <== and[9][i].out;\n\t\tstates[i+1][2] <== multi_or[4][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\t// 255 = `&nbsp`\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 255;\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][0];\n\t\tand[10][i].b <== eq[22][i].out;\n\t\t// 10 = `\\n`\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 10;\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][2];\n\t\tand[11][i].b <== eq[23][i].out;\n\t\tmulti_or[5][i] = MultiOR(2);\n\t\tmulti_or[5][i].in[0] <== and[10][i].out;\n\t\tmulti_or[5][i].in[1] <== and[11][i].out;\n\t\tstates[i+1][3] <== multi_or[5][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\t// 115 = `s`\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 115;\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][3];\n\t\tand[12][i].b <== eq[24][i].out;\n\t\tstates[i+1][4] <== and[12][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\t// 117 = `u`\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 117;\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][4];\n\t\tand[13][i].b <== eq[25][i].out;\n\t\tstates[i+1][5] <== and[13][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\t// 98 = `b`\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 98;\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][5];\n\t\tand[14][i].b <== eq[26][i].out;\n\t\tstates[i+1][6] <== and[14][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\t// 106 = `j`\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 106;\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][6];\n\t\tand[15][i].b <== eq[27][i].out;\n\t\tstates[i+1][7] <== and[15][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\t// 101 = `e`\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 101;\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][7];\n\t\tand[16][i].b <== eq[28][i].out;\n\t\tstates[i+1][8] <== and[16][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\t// 99 = `c`\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 99;\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][8];\n\t\tand[17][i].b <== eq[29][i].out;\n\t\tstates[i+1][9] <== and[17][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\t// 116 = `t`\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 116;\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][9];\n\t\tand[18][i].b <== eq[30][i].out;\n\t\tstates[i+1][10] <== and[18][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\t// 36 = `$`\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 36;\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][1];\n\t\tand[19][i].b <== eq[31][i].out;\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][11];\n\t\tand[20][i].b <== eq[31][i].out; // Reuse eq[31]\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][21];\n\t\tand[21][i].b <== eq[31][i].out; // Reuse eq[31]\n\t\tmulti_or[7][i] = MultiOR(3);\n\t\tmulti_or[7][i].in[0] <== and[19][i].out;\n\t\tmulti_or[7][i].in[1] <== and[20][i].out;\n\t\tmulti_or[7][i].in[2] <== and[21][i].out;\n\t\tstates[i+1][11] <== multi_or[7][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\t// 58 = `:`\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 58;\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][10];\n\t\tand[22][i].b <== eq[32][i].out;\n\t\tstates[i+1][12] <== and[22][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\t// 89 = `Y`\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 89;\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][12];\n\t\tand[23][i].b <== eq[33][i].out;\n\t\tstates[i+1][13] <== and[23][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\t// 111 = `o`\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 111;\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][13];\n\t\tand[24][i].b <== eq[34][i].out;\n\t\tstates[i+1][14] <== and[24][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\t// 117 = `u`\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 117;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][14];\n\t\tand[25][i].b <== eq[35][i].out;\n\t\tstates[i+1][15] <== and[25][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\t// 32 = ` `\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 32;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][15];\n\t\tand[26][i].b <== eq[36][i].out;\n\t\tstates[i+1][16] <== and[26][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\t// 112 = `p`\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 112;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][16];\n\t\tand[27][i].b <== eq[37][i].out;\n\t\tstates[i+1][17] <== and[27][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\t// 97 = `a`\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 97;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][17];\n\t\tand[28][i].b <== eq[38][i].out;\n\t\tstates[i+1][18] <== and[28][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\t// 105 = `i`\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 105;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][18];\n\t\tand[29][i].b <== eq[39][i].out;\n\t\tstates[i+1][19] <== and[29][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\t// 100 = `d`\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 100;\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][19];\n\t\tand[30][i].b <== eq[40][i].out;\n\t\tstates[i+1][20] <== and[30][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\t// 44 = `,`\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 44;\n\t\t// 46 = `.`\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 46;\n\t\t// 48 = `0`\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 48;\n\t\t// 49 = `1`\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 49;\n\t\t// 50 = `2`\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 50;\n\t\t// 51 = `3`\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 51;\n\t\t// 52 = `4`\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 52;\n\t\t// 53 = `5`\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 53;\n\t\t// 54 = `6`\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 54;\n\t\t// 55 = `7`\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 55;\n\t\t// 56 = `8`\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 56;\n\t\t// 57 = `9`\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 57;\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][11];\n\t\tmulti_or[8][i] = MultiOR(12);\n\t\tmulti_or[8][i].in[0] <== eq[41][i].out;\n\t\tmulti_or[8][i].in[1] <== eq[42][i].out;\n\t\tmulti_or[8][i].in[2] <== eq[43][i].out;\n\t\tmulti_or[8][i].in[3] <== eq[44][i].out;\n\t\tmulti_or[8][i].in[4] <== eq[45][i].out;\n\t\tmulti_or[8][i].in[5] <== eq[46][i].out;\n\t\tmulti_or[8][i].in[6] <== eq[47][i].out;\n\t\tmulti_or[8][i].in[7] <== eq[48][i].out;\n\t\tmulti_or[8][i].in[8] <== eq[49][i].out;\n\t\tmulti_or[8][i].in[9] <== eq[50][i].out;\n\t\tmulti_or[8][i].in[10] <== eq[51][i].out;\n\t\tmulti_or[8][i].in[11] <== eq[52][i].out;\n\t\tand[31][i].b <== multi_or[8][i].out;\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][21];\n\t\tand[32][i].b <== multi_or[8][i].out;\n\t\tmulti_or[9][i] = MultiOR(2);\n\t\tmulti_or[9][i].in[0] <== and[31][i].out;\n\t\tmulti_or[9][i].in[1] <== and[32][i].out;\n\t\tstates[i+1][21] <== multi_or[9][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][21];\n\t\tand[33][i].b <== eq[21][i].out; // 13 = `\\r`\n\t\tstates[i+1][22] <== and[33][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][20];\n\t\tand[34][i].b <== eq[36][i].out; // 32 = ` `\n\t\tstates[i+1][23] <== and[34][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][22];\n\t\tand[35][i].b <== eq[23][i].out; // 10 = `\\n`\n\t\tstates[i+1][24] <== and[35][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][24];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][24] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][5];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][11] * states[i+2][11];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][11] * states[i+2][21];\n\t\tis_substr0[i][3] <== is_substr0[i][2] + states[i+1][21] * states[i+2][11];\n\t\tis_substr0[i][4] <== is_substr0[i][3] + states[i+1][21] * states[i+2][21];\n\t\tis_reveal0[i] <== is_substr0[i][4] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_send_amount.json",
    "content": "{\n    \"parts\": [\n        {\n            \"is_public\": false,\n            \"regex_def\": \"((\\r\\n)|^)subject:You paid \"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"[^\\r\\n]+\\\\$\"\n        },\n        {\n            \"is_public\": true,\n            \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9|\\\\.|,)+\"\n        },\n        {\n            \"is_public\": false,\n            \"regex_def\": \"\\r\\n\"\n        }\n    ]\n}"
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_send_id.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\ntemplate VenmoSendIdRegex(msg_bytes) {\n\tsignal input msg[msg_bytes];\n\tsignal output out;\n\n\tvar num_bytes = msg_bytes+1;\n\tsignal in[num_bytes];\n\tin[0]<==255;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tin[i+1] <== msg[i];\n\t}\n\n\tcomponent eq[60][num_bytes];\n\tcomponent lt[2][num_bytes];\n\tcomponent and[334][num_bytes];\n\tcomponent multi_or[6][num_bytes];\n\tsignal states[num_bytes+1][331];\n\tcomponent state_changed[num_bytes];\n\n\tstates[0][0] <== 1;\n\tfor (var i = 1; i < 331; i++) {\n\t\tstates[0][i] <== 0;\n\t}\n\n\tfor (var i = 0; i < num_bytes; i++) {\n\t\tstate_changed[i] = MultiOR(330);\n\t\t// 32 = ` `\n\t\teq[0][i] = IsEqual();\n\t\teq[0][i].in[0] <== in[i];\n\t\teq[0][i].in[1] <== 32;\n\t\tand[0][i] = AND();\n\t\tand[0][i].a <== states[i][330];\n\t\tand[0][i].b <== eq[0][i].out;\n\t\tstates[i+1][1] <== and[0][i].out;\n\t\tstate_changed[i].in[0] <== states[i+1][1];\n\t\t// Catch all except `\\r` `\\n`\n\t\tlt[0][i] = LessEqThan(8);\n\t\tlt[0][i].in[0] <== 14;\n\t\tlt[0][i].in[1] <== in[i];\n\t\tlt[1][i] = LessEqThan(8);\n\t\tlt[1][i].in[0] <== in[i];\n\t\tlt[1][i].in[1] <== 254;\n\t\tand[1][i] = AND();\n\t\tand[1][i].a <== lt[0][i].out;\n\t\tand[1][i].b <== lt[1][i].out;\n\t\teq[1][i] = IsEqual();\n\t\teq[1][i].in[0] <== in[i];\n\t\teq[1][i].in[1] <== 0;\n\t\teq[2][i] = IsEqual();\n\t\teq[2][i].in[0] <== in[i];\n\t\teq[2][i].in[1] <== 1;\n\t\teq[3][i] = IsEqual();\n\t\teq[3][i].in[0] <== in[i];\n\t\teq[3][i].in[1] <== 2;\n\t\teq[4][i] = IsEqual();\n\t\teq[4][i].in[0] <== in[i];\n\t\teq[4][i].in[1] <== 3;\n\t\teq[5][i] = IsEqual();\n\t\teq[5][i].in[0] <== in[i];\n\t\teq[5][i].in[1] <== 4;\n\t\teq[6][i] = IsEqual();\n\t\teq[6][i].in[0] <== in[i];\n\t\teq[6][i].in[1] <== 5;\n\t\teq[7][i] = IsEqual();\n\t\teq[7][i].in[0] <== in[i];\n\t\teq[7][i].in[1] <== 6;\n\t\teq[8][i] = IsEqual();\n\t\teq[8][i].in[0] <== in[i];\n\t\teq[8][i].in[1] <== 7;\n\t\teq[9][i] = IsEqual();\n\t\teq[9][i].in[0] <== in[i];\n\t\teq[9][i].in[1] <== 8;\n\t\teq[10][i] = IsEqual();\n\t\teq[10][i].in[0] <== in[i];\n\t\teq[10][i].in[1] <== 9;\n\t\teq[11][i] = IsEqual();\n\t\teq[11][i].in[0] <== in[i];\n\t\teq[11][i].in[1] <== 11;\n\t\teq[12][i] = IsEqual();\n\t\teq[12][i].in[0] <== in[i];\n\t\teq[12][i].in[1] <== 12;\n\t\tand[2][i] = AND();\n\t\tand[2][i].a <== states[i][2];\n\t\tmulti_or[0][i] = MultiOR(13);\n\t\tmulti_or[0][i].in[0] <== and[1][i].out;\n\t\tmulti_or[0][i].in[1] <== eq[1][i].out;\n\t\tmulti_or[0][i].in[2] <== eq[2][i].out;\n\t\tmulti_or[0][i].in[3] <== eq[3][i].out;\n\t\tmulti_or[0][i].in[4] <== eq[4][i].out;\n\t\tmulti_or[0][i].in[5] <== eq[5][i].out;\n\t\tmulti_or[0][i].in[6] <== eq[6][i].out;\n\t\tmulti_or[0][i].in[7] <== eq[7][i].out;\n\t\tmulti_or[0][i].in[8] <== eq[8][i].out;\n\t\tmulti_or[0][i].in[9] <== eq[9][i].out;\n\t\tmulti_or[0][i].in[10] <== eq[10][i].out;\n\t\tmulti_or[0][i].in[11] <== eq[11][i].out;\n\t\tmulti_or[0][i].in[12] <== eq[12][i].out;\n\t\tand[2][i].b <== multi_or[0][i].out;\n\t\tand[3][i] = AND();\n\t\tand[3][i].a <== states[i][313];\n\t\tand[3][i].b <== multi_or[0][i].out;\n\t\tmulti_or[1][i] = MultiOR(2);\n\t\tmulti_or[1][i].in[0] <== and[2][i].out;\n\t\tmulti_or[1][i].in[1] <== and[3][i].out;\n\t\tstates[i+1][2] <== multi_or[1][i].out;\n\t\tstate_changed[i].in[1] <== states[i+1][2];\n\t\tand[4][i] = AND();\n\t\tand[4][i].a <== states[i][1];\n\t\tand[4][i].b <== eq[0][i].out;\n\t\tstates[i+1][3] <== and[4][i].out;\n\t\tstate_changed[i].in[2] <== states[i+1][3];\n\t\tand[5][i] = AND();\n\t\tand[5][i].a <== states[i][3];\n\t\tand[5][i].b <== eq[0][i].out;\n\t\tstates[i+1][4] <== and[5][i].out;\n\t\tstate_changed[i].in[3] <== states[i+1][4];\n\t\tand[6][i] = AND();\n\t\tand[6][i].a <== states[i][4];\n\t\tand[6][i].b <== eq[0][i].out;\n\t\tstates[i+1][5] <== and[6][i].out;\n\t\tstate_changed[i].in[4] <== states[i+1][5];\n\t\t// 10 = `\\n`\n\t\teq[13][i] = IsEqual();\n\t\teq[13][i].in[0] <== in[i];\n\t\teq[13][i].in[1] <== 10;\n\t\tand[7][i] = AND();\n\t\tand[7][i].a <== states[i][325];\n\t\tand[7][i].b <== eq[13][i].out;\n\t\tstates[i+1][6] <== and[7][i].out;\n\t\tstate_changed[i].in[5] <== states[i+1][6];\n\t\tand[8][i] = AND();\n\t\tand[8][i].a <== states[i][6];\n\t\tand[8][i].b <== eq[0][i].out;\n\t\tstates[i+1][7] <== and[8][i].out;\n\t\tstate_changed[i].in[6] <== states[i+1][7];\n\t\tand[9][i] = AND();\n\t\tand[9][i].a <== states[i][7];\n\t\tand[9][i].b <== eq[0][i].out;\n\t\tstates[i+1][8] <== and[9][i].out;\n\t\tstate_changed[i].in[7] <== states[i+1][8];\n\t\tand[10][i] = AND();\n\t\tand[10][i].a <== states[i][8];\n\t\tand[10][i].b <== eq[0][i].out;\n\t\tstates[i+1][9] <== and[10][i].out;\n\t\tstate_changed[i].in[8] <== states[i+1][9];\n\t\tand[11][i] = AND();\n\t\tand[11][i].a <== states[i][9];\n\t\tand[11][i].b <== eq[0][i].out;\n\t\tstates[i+1][10] <== and[11][i].out;\n\t\tstate_changed[i].in[9] <== states[i+1][10];\n\t\tand[12][i] = AND();\n\t\tand[12][i].a <== states[i][10];\n\t\tand[12][i].b <== eq[0][i].out;\n\t\tstates[i+1][11] <== and[12][i].out;\n\t\tstate_changed[i].in[10] <== states[i+1][11];\n\t\tand[13][i] = AND();\n\t\tand[13][i].a <== states[i][11];\n\t\tand[13][i].b <== eq[0][i].out;\n\t\tstates[i+1][12] <== and[13][i].out;\n\t\tstate_changed[i].in[11] <== states[i+1][12];\n\t\tand[14][i] = AND();\n\t\tand[14][i].a <== states[i][12];\n\t\tand[14][i].b <== eq[0][i].out;\n\t\tstates[i+1][13] <== and[14][i].out;\n\t\tstate_changed[i].in[12] <== states[i+1][13];\n\t\tand[15][i] = AND();\n\t\tand[15][i].a <== states[i][13];\n\t\tand[15][i].b <== eq[0][i].out;\n\t\tstates[i+1][14] <== and[15][i].out;\n\t\tstate_changed[i].in[13] <== states[i+1][14];\n\t\tand[16][i] = AND();\n\t\tand[16][i].a <== states[i][14];\n\t\tand[16][i].b <== eq[0][i].out;\n\t\tstates[i+1][15] <== and[16][i].out;\n\t\tstate_changed[i].in[14] <== states[i+1][15];\n\t\tand[17][i] = AND();\n\t\tand[17][i].a <== states[i][15];\n\t\tand[17][i].b <== eq[0][i].out;\n\t\tstates[i+1][16] <== and[17][i].out;\n\t\tstate_changed[i].in[15] <== states[i+1][16];\n\t\tand[18][i] = AND();\n\t\tand[18][i].a <== states[i][16];\n\t\tand[18][i].b <== eq[0][i].out;\n\t\tstates[i+1][17] <== and[18][i].out;\n\t\tstate_changed[i].in[16] <== states[i+1][17];\n\t\tand[19][i] = AND();\n\t\tand[19][i].a <== states[i][17];\n\t\tand[19][i].b <== eq[0][i].out;\n\t\tstates[i+1][18] <== and[19][i].out;\n\t\tstate_changed[i].in[17] <== states[i+1][18];\n\t\tand[20][i] = AND();\n\t\tand[20][i].a <== states[i][18];\n\t\tand[20][i].b <== eq[0][i].out;\n\t\tstates[i+1][19] <== and[20][i].out;\n\t\tstate_changed[i].in[18] <== states[i+1][19];\n\t\tand[21][i] = AND();\n\t\tand[21][i].a <== states[i][19];\n\t\tand[21][i].b <== eq[0][i].out;\n\t\tstates[i+1][20] <== and[21][i].out;\n\t\tstate_changed[i].in[19] <== states[i+1][20];\n\t\tand[22][i] = AND();\n\t\tand[22][i].a <== states[i][20];\n\t\tand[22][i].b <== eq[0][i].out;\n\t\tstates[i+1][21] <== and[22][i].out;\n\t\tstate_changed[i].in[20] <== states[i+1][21];\n\t\tand[23][i] = AND();\n\t\tand[23][i].a <== states[i][5];\n\t\tand[23][i].b <== eq[0][i].out;\n\t\tstates[i+1][22] <== and[23][i].out;\n\t\tstate_changed[i].in[21] <== states[i+1][22];\n\t\tand[24][i] = AND();\n\t\tand[24][i].a <== states[i][21];\n\t\tand[24][i].b <== eq[0][i].out;\n\t\tstates[i+1][23] <== and[24][i].out;\n\t\tstate_changed[i].in[22] <== states[i+1][23];\n\t\t// 60 = `<`\n\t\teq[14][i] = IsEqual();\n\t\teq[14][i].in[0] <== in[i];\n\t\teq[14][i].in[1] <== 60;\n\t\tand[25][i] = AND();\n\t\tand[25][i].a <== states[i][23];\n\t\tand[25][i].b <== eq[14][i].out;\n\t\tstates[i+1][24] <== and[25][i].out;\n\t\tstate_changed[i].in[23] <== states[i+1][24];\n\t\t// 47 = `/`\n\t\teq[15][i] = IsEqual();\n\t\teq[15][i].in[0] <== in[i];\n\t\teq[15][i].in[1] <== 47;\n\t\tand[26][i] = AND();\n\t\tand[26][i].a <== states[i][24];\n\t\tand[26][i].b <== eq[15][i].out;\n\t\tstates[i+1][25] <== and[26][i].out;\n\t\tstate_changed[i].in[24] <== states[i+1][25];\n\t\t// 97 = `a`\n\t\teq[16][i] = IsEqual();\n\t\teq[16][i].in[0] <== in[i];\n\t\teq[16][i].in[1] <== 97;\n\t\tand[27][i] = AND();\n\t\tand[27][i].a <== states[i][25];\n\t\tand[27][i].b <== eq[16][i].out;\n\t\tstates[i+1][26] <== and[27][i].out;\n\t\tstate_changed[i].in[25] <== states[i+1][26];\n\t\t// 62 = `>`\n\t\teq[17][i] = IsEqual();\n\t\teq[17][i].in[0] <== in[i];\n\t\teq[17][i].in[1] <== 62;\n\t\tand[28][i] = AND();\n\t\tand[28][i].a <== states[i][26];\n\t\tand[28][i].b <== eq[17][i].out;\n\t\tstates[i+1][27] <== and[28][i].out;\n\t\tstate_changed[i].in[26] <== states[i+1][27];\n\t\t// 13 = `\\r`\n\t\teq[18][i] = IsEqual();\n\t\teq[18][i].in[0] <== in[i];\n\t\teq[18][i].in[1] <== 13;\n\t\tand[29][i] = AND();\n\t\tand[29][i].a <== states[i][27];\n\t\tand[29][i].b <== eq[18][i].out;\n\t\tstates[i+1][28] <== and[29][i].out;\n\t\tstate_changed[i].in[27] <== states[i+1][28];\n\t\tand[30][i] = AND();\n\t\tand[30][i].a <== states[i][28];\n\t\tand[30][i].b <== eq[13][i].out; // 10 = `\\n`\n\t\tstates[i+1][29] <== and[30][i].out;\n\t\tstate_changed[i].in[28] <== states[i+1][29];\n\t\tand[31][i] = AND();\n\t\tand[31][i].a <== states[i][29];\n\t\tand[31][i].b <== eq[0][i].out;\n\t\tstates[i+1][30] <== and[31][i].out;\n\t\tstate_changed[i].in[29] <== states[i+1][30];\n\t\tand[32][i] = AND();\n\t\tand[32][i].a <== states[i][30];\n\t\tand[32][i].b <== eq[0][i].out;\n\t\tstates[i+1][31] <== and[32][i].out;\n\t\tstate_changed[i].in[30] <== states[i+1][31];\n\t\tand[33][i] = AND();\n\t\tand[33][i].a <== states[i][31];\n\t\tand[33][i].b <== eq[0][i].out;\n\t\tstates[i+1][32] <== and[33][i].out;\n\t\tstate_changed[i].in[31] <== states[i+1][32];\n\t\tand[34][i] = AND();\n\t\tand[34][i].a <== states[i][32];\n\t\tand[34][i].b <== eq[0][i].out;\n\t\tstates[i+1][33] <== and[34][i].out;\n\t\tstate_changed[i].in[32] <== states[i+1][33];\n\t\tand[35][i] = AND();\n\t\tand[35][i].a <== states[i][33];\n\t\tand[35][i].b <== eq[0][i].out;\n\t\tstates[i+1][34] <== and[35][i].out;\n\t\tstate_changed[i].in[33] <== states[i+1][34];\n\t\tand[36][i] = AND();\n\t\tand[36][i].a <== states[i][34];\n\t\tand[36][i].b <== eq[0][i].out;\n\t\tstates[i+1][35] <== and[36][i].out;\n\t\tstate_changed[i].in[34] <== states[i+1][35];\n\t\tand[37][i] = AND();\n\t\tand[37][i].a <== states[i][35];\n\t\tand[37][i].b <== eq[0][i].out;\n\t\tstates[i+1][36] <== and[37][i].out;\n\t\tstate_changed[i].in[35] <== states[i+1][36];\n\t\tand[38][i] = AND();\n\t\tand[38][i].a <== states[i][36];\n\t\tand[38][i].b <== eq[0][i].out;\n\t\tstates[i+1][37] <== and[38][i].out;\n\t\tstate_changed[i].in[36] <== states[i+1][37];\n\t\tand[39][i] = AND();\n\t\tand[39][i].a <== states[i][37];\n\t\tand[39][i].b <== eq[0][i].out;\n\t\tstates[i+1][38] <== and[39][i].out;\n\t\tstate_changed[i].in[37] <== states[i+1][38];\n\t\tand[40][i] = AND();\n\t\tand[40][i].a <== states[i][38];\n\t\tand[40][i].b <== eq[0][i].out;\n\t\tstates[i+1][39] <== and[40][i].out;\n\t\tstate_changed[i].in[38] <== states[i+1][39];\n\t\tand[41][i] = AND();\n\t\tand[41][i].a <== states[i][39];\n\t\tand[41][i].b <== eq[0][i].out;\n\t\tstates[i+1][40] <== and[41][i].out;\n\t\tstate_changed[i].in[39] <== states[i+1][40];\n\t\tand[42][i] = AND();\n\t\tand[42][i].a <== states[i][40];\n\t\tand[42][i].b <== eq[0][i].out;\n\t\tstates[i+1][41] <== and[42][i].out;\n\t\tstate_changed[i].in[40] <== states[i+1][41];\n\t\tand[43][i] = AND();\n\t\tand[43][i].a <== states[i][41];\n\t\tand[43][i].b <== eq[0][i].out;\n\t\tstates[i+1][42] <== and[43][i].out;\n\t\tstate_changed[i].in[41] <== states[i+1][42];\n\t\tand[44][i] = AND();\n\t\tand[44][i].a <== states[i][42];\n\t\tand[44][i].b <== eq[0][i].out;\n\t\tstates[i+1][43] <== and[44][i].out;\n\t\tstate_changed[i].in[42] <== states[i+1][43];\n\t\tand[45][i] = AND();\n\t\tand[45][i].a <== states[i][43];\n\t\tand[45][i].b <== eq[0][i].out;\n\t\tstates[i+1][44] <== and[45][i].out;\n\t\tstate_changed[i].in[43] <== states[i+1][44];\n\t\t// 61 = `=`\n\t\teq[19][i] = IsEqual();\n\t\teq[19][i].in[0] <== in[i];\n\t\teq[19][i].in[1] <== 61;\n\t\tand[46][i] = AND();\n\t\tand[46][i].a <== states[i][44];\n\t\tand[46][i].b <== eq[19][i].out;\n\t\tstates[i+1][45] <== and[46][i].out;\n\t\tstate_changed[i].in[44] <== states[i+1][45];\n\t\t// 50 = `2`\n\t\teq[20][i] = IsEqual();\n\t\teq[20][i].in[0] <== in[i];\n\t\teq[20][i].in[1] <== 50;\n\t\tand[47][i] = AND();\n\t\tand[47][i].a <== states[i][45];\n\t\tand[47][i].b <== eq[20][i].out;\n\t\tstates[i+1][46] <== and[47][i].out;\n\t\tstate_changed[i].in[45] <== states[i+1][46];\n\t\t// 48 = `0`\n\t\teq[21][i] = IsEqual();\n\t\teq[21][i].in[0] <== in[i];\n\t\teq[21][i].in[1] <== 48;\n\t\tand[48][i] = AND();\n\t\tand[48][i].a <== states[i][46];\n\t\tand[48][i].b <== eq[21][i].out;\n\t\tstates[i+1][47] <== and[48][i].out;\n\t\tstate_changed[i].in[46] <== states[i+1][47];\n\t\tand[49][i] = AND();\n\t\tand[49][i].a <== states[i][47];\n\t\tand[49][i].b <== eq[18][i].out; // 13 = `\\r`\n\t\tstates[i+1][48] <== and[49][i].out;\n\t\tstate_changed[i].in[47] <== states[i+1][48];\n\t\tand[50][i] = AND();\n\t\tand[50][i].a <== states[i][22];\n\t\tand[50][i].b <== eq[0][i].out;\n\t\tstates[i+1][49] <== and[50][i].out;\n\t\tstate_changed[i].in[48] <== states[i+1][49];\n\t\tand[51][i] = AND();\n\t\tand[51][i].a <== states[i][48];\n\t\tand[51][i].b <== eq[13][i].out; // 10 = `\\n`\n\t\tstates[i+1][50] <== and[51][i].out;\n\t\tstate_changed[i].in[49] <== states[i+1][50];\n\t\tand[52][i] = AND();\n\t\tand[52][i].a <== states[i][50];\n\t\tand[52][i].b <== eq[0][i].out;\n\t\tstates[i+1][51] <== and[52][i].out;\n\t\tstate_changed[i].in[50] <== states[i+1][51];\n\t\tand[53][i] = AND();\n\t\tand[53][i].a <== states[i][51];\n\t\tand[53][i].b <== eq[0][i].out;\n\t\tstates[i+1][52] <== and[53][i].out;\n\t\tstate_changed[i].in[51] <== states[i+1][52];\n\t\tand[54][i] = AND();\n\t\tand[54][i].a <== states[i][52];\n\t\tand[54][i].b <== eq[0][i].out;\n\t\tstates[i+1][53] <== and[54][i].out;\n\t\tstate_changed[i].in[52] <== states[i+1][53];\n\t\tand[55][i] = AND();\n\t\tand[55][i].a <== states[i][53];\n\t\tand[55][i].b <== eq[0][i].out;\n\t\tstates[i+1][54] <== and[55][i].out;\n\t\tstate_changed[i].in[53] <== states[i+1][54];\n\t\tand[56][i] = AND();\n\t\tand[56][i].a <== states[i][54];\n\t\tand[56][i].b <== eq[0][i].out;\n\t\tstates[i+1][55] <== and[56][i].out;\n\t\tstate_changed[i].in[54] <== states[i+1][55];\n\t\tand[57][i] = AND();\n\t\tand[57][i].a <== states[i][55];\n\t\tand[57][i].b <== eq[0][i].out;\n\t\tstates[i+1][56] <== and[57][i].out;\n\t\tstate_changed[i].in[55] <== states[i+1][56];\n\t\tand[58][i] = AND();\n\t\tand[58][i].a <== states[i][56];\n\t\tand[58][i].b <== eq[0][i].out;\n\t\tstates[i+1][57] <== and[58][i].out;\n\t\tstate_changed[i].in[56] <== states[i+1][57];\n\t\tand[59][i] = AND();\n\t\tand[59][i].a <== states[i][57];\n\t\tand[59][i].b <== eq[0][i].out;\n\t\tstates[i+1][58] <== and[59][i].out;\n\t\tstate_changed[i].in[57] <== states[i+1][58];\n\t\tand[60][i] = AND();\n\t\tand[60][i].a <== states[i][58];\n\t\tand[60][i].b <== eq[0][i].out;\n\t\tstates[i+1][59] <== and[60][i].out;\n\t\tstate_changed[i].in[58] <== states[i+1][59];\n\t\tand[61][i] = AND();\n\t\tand[61][i].a <== states[i][59];\n\t\tand[61][i].b <== eq[0][i].out;\n\t\tstates[i+1][60] <== and[61][i].out;\n\t\tstate_changed[i].in[59] <== states[i+1][60];\n\t\tand[62][i] = AND();\n\t\tand[62][i].a <== states[i][60];\n\t\tand[62][i].b <== eq[0][i].out;\n\t\tstates[i+1][61] <== and[62][i].out;\n\t\tstate_changed[i].in[60] <== states[i+1][61];\n\t\tand[63][i] = AND();\n\t\tand[63][i].a <== states[i][61];\n\t\tand[63][i].b <== eq[0][i].out;\n\t\tstates[i+1][62] <== and[63][i].out;\n\t\tstate_changed[i].in[61] <== states[i+1][62];\n\t\tand[64][i] = AND();\n\t\tand[64][i].a <== states[i][62];\n\t\tand[64][i].b <== eq[14][i].out; // 60 = `<`\n\t\tstates[i+1][63] <== and[64][i].out;\n\t\tstate_changed[i].in[62] <== states[i+1][63];\n\t\tand[65][i] = AND();\n\t\tand[65][i].a <== states[i][63];\n\t\tand[65][i].b <== eq[15][i].out;\n\t\tstates[i+1][64] <== and[65][i].out;\n\t\tstate_changed[i].in[63] <== states[i+1][64];\n\t\t// 100 = `d`\n\t\teq[22][i] = IsEqual();\n\t\teq[22][i].in[0] <== in[i];\n\t\teq[22][i].in[1] <== 100;\n\t\tand[66][i] = AND();\n\t\tand[66][i].a <== states[i][64];\n\t\tand[66][i].b <== eq[22][i].out;\n\t\tstates[i+1][65] <== and[66][i].out;\n\t\tstate_changed[i].in[64] <== states[i+1][65];\n\t\t// 105 = `i`\n\t\teq[23][i] = IsEqual();\n\t\teq[23][i].in[0] <== in[i];\n\t\teq[23][i].in[1] <== 105;\n\t\tand[67][i] = AND();\n\t\tand[67][i].a <== states[i][65];\n\t\tand[67][i].b <== eq[23][i].out;\n\t\tstates[i+1][66] <== and[67][i].out;\n\t\tstate_changed[i].in[65] <== states[i+1][66];\n\t\t// 118 = `v`\n\t\teq[24][i] = IsEqual();\n\t\teq[24][i].in[0] <== in[i];\n\t\teq[24][i].in[1] <== 118;\n\t\tand[68][i] = AND();\n\t\tand[68][i].a <== states[i][66];\n\t\tand[68][i].b <== eq[24][i].out;\n\t\tstates[i+1][67] <== and[68][i].out;\n\t\tstate_changed[i].in[66] <== states[i+1][67];\n\t\tand[69][i] = AND();\n\t\tand[69][i].a <== states[i][67];\n\t\tand[69][i].b <== eq[17][i].out; // 62 = `>`\n\t\tstates[i+1][68] <== and[69][i].out;\n\t\tstate_changed[i].in[67] <== states[i+1][68];\n\t\tand[70][i] = AND();\n\t\tand[70][i].a <== states[i][68];\n\t\tand[70][i].b <== eq[18][i].out; // 13 = `\\r`\n\t\tstates[i+1][69] <== and[70][i].out;\n\t\tstate_changed[i].in[68] <== states[i+1][69];\n\t\tand[71][i] = AND();\n\t\tand[71][i].a <== states[i][69];\n\t\tand[71][i].b <== eq[13][i].out; // 10 = `\\n`\n\t\tstates[i+1][70] <== and[71][i].out;\n\t\tstate_changed[i].in[69] <== states[i+1][70];\n\t\tand[72][i] = AND();\n\t\tand[72][i].a <== states[i][70];\n\t\tand[72][i].b <== eq[0][i].out;\n\t\tstates[i+1][71] <== and[72][i].out;\n\t\tstate_changed[i].in[70] <== states[i+1][71];\n\t\tand[73][i] = AND();\n\t\tand[73][i].a <== states[i][71];\n\t\tand[73][i].b <== eq[0][i].out;\n\t\tstates[i+1][72] <== and[73][i].out;\n\t\tstate_changed[i].in[71] <== states[i+1][72];\n\t\tand[74][i] = AND();\n\t\tand[74][i].a <== states[i][72];\n\t\tand[74][i].b <== eq[0][i].out;\n\t\tstates[i+1][73] <== and[74][i].out;\n\t\tstate_changed[i].in[72] <== states[i+1][73];\n\t\tand[75][i] = AND();\n\t\tand[75][i].a <== states[i][73];\n\t\tand[75][i].b <== eq[0][i].out;\n\t\tstates[i+1][74] <== and[75][i].out;\n\t\tstate_changed[i].in[73] <== states[i+1][74];\n\t\tand[76][i] = AND();\n\t\tand[76][i].a <== states[i][74];\n\t\tand[76][i].b <== eq[0][i].out;\n\t\tstates[i+1][75] <== and[76][i].out;\n\t\tstate_changed[i].in[74] <== states[i+1][75];\n\t\tand[77][i] = AND();\n\t\tand[77][i].a <== states[i][49];\n\t\tand[77][i].b <== eq[0][i].out;\n\t\tstates[i+1][76] <== and[77][i].out;\n\t\tstate_changed[i].in[75] <== states[i+1][76];\n\t\tand[78][i] = AND();\n\t\tand[78][i].a <== states[i][75];\n\t\tand[78][i].b <== eq[0][i].out;\n\t\tstates[i+1][77] <== and[78][i].out;\n\t\tstate_changed[i].in[76] <== states[i+1][77];\n\t\tand[79][i] = AND();\n\t\tand[79][i].a <== states[i][77];\n\t\tand[79][i].b <== eq[0][i].out;\n\t\tstates[i+1][78] <== and[79][i].out;\n\t\tstate_changed[i].in[77] <== states[i+1][78];\n\t\tand[80][i] = AND();\n\t\tand[80][i].a <== states[i][78];\n\t\tand[80][i].b <== eq[0][i].out;\n\t\tstates[i+1][79] <== and[80][i].out;\n\t\tstate_changed[i].in[78] <== states[i+1][79];\n\t\tand[81][i] = AND();\n\t\tand[81][i].a <== states[i][79];\n\t\tand[81][i].b <== eq[0][i].out;\n\t\tstates[i+1][80] <== and[81][i].out;\n\t\tstate_changed[i].in[79] <== states[i+1][80];\n\t\tand[82][i] = AND();\n\t\tand[82][i].a <== states[i][80];\n\t\tand[82][i].b <== eq[0][i].out;\n\t\tstates[i+1][81] <== and[82][i].out;\n\t\tstate_changed[i].in[80] <== states[i+1][81];\n\t\tand[83][i] = AND();\n\t\tand[83][i].a <== states[i][81];\n\t\tand[83][i].b <== eq[0][i].out;\n\t\tstates[i+1][82] <== and[83][i].out;\n\t\tstate_changed[i].in[81] <== states[i+1][82];\n\t\tand[84][i] = AND();\n\t\tand[84][i].a <== states[i][82];\n\t\tand[84][i].b <== eq[0][i].out;\n\t\tstates[i+1][83] <== and[84][i].out;\n\t\tstate_changed[i].in[82] <== states[i+1][83];\n\t\tand[85][i] = AND();\n\t\tand[85][i].a <== states[i][83];\n\t\tand[85][i].b <== eq[14][i].out;\n\t\tstates[i+1][84] <== and[85][i].out;\n\t\tstate_changed[i].in[83] <== states[i+1][84];\n\t\teq[25][i] = IsEqual();\n\t\teq[25][i].in[0] <== in[i];\n\t\teq[25][i].in[1] <== 33;\n\t\tand[86][i] = AND();\n\t\tand[86][i].a <== states[i][84];\n\t\tand[86][i].b <== eq[25][i].out;\n\t\tstates[i+1][85] <== and[86][i].out;\n\t\tstate_changed[i].in[84] <== states[i+1][85];\n\t\teq[26][i] = IsEqual();\n\t\teq[26][i].in[0] <== in[i];\n\t\teq[26][i].in[1] <== 45;\n\t\tand[87][i] = AND();\n\t\tand[87][i].a <== states[i][85];\n\t\tand[87][i].b <== eq[26][i].out;\n\t\tstates[i+1][86] <== and[87][i].out;\n\t\tstate_changed[i].in[85] <== states[i+1][86];\n\t\tand[88][i] = AND();\n\t\tand[88][i].a <== states[i][86];\n\t\tand[88][i].b <== eq[26][i].out;\n\t\tstates[i+1][87] <== and[88][i].out;\n\t\tstate_changed[i].in[86] <== states[i+1][87];\n\t\tand[89][i] = AND();\n\t\tand[89][i].a <== states[i][87];\n\t\tand[89][i].b <== eq[0][i].out;\n\t\tstates[i+1][88] <== and[89][i].out;\n\t\tstate_changed[i].in[87] <== states[i+1][88];\n\t\teq[27][i] = IsEqual();\n\t\teq[27][i].in[0] <== in[i];\n\t\teq[27][i].in[1] <== 110;\n\t\tand[90][i] = AND();\n\t\tand[90][i].a <== states[i][88];\n\t\tand[90][i].b <== eq[27][i].out;\n\t\tstates[i+1][89] <== and[90][i].out;\n\t\tstate_changed[i].in[88] <== states[i+1][89];\n\t\teq[28][i] = IsEqual();\n\t\teq[28][i].in[0] <== in[i];\n\t\teq[28][i].in[1] <== 111;\n\t\tand[91][i] = AND();\n\t\tand[91][i].a <== states[i][89];\n\t\tand[91][i].b <== eq[28][i].out;\n\t\tstates[i+1][90] <== and[91][i].out;\n\t\tstate_changed[i].in[89] <== states[i+1][90];\n\t\teq[29][i] = IsEqual();\n\t\teq[29][i].in[0] <== in[i];\n\t\teq[29][i].in[1] <== 116;\n\t\tand[92][i] = AND();\n\t\tand[92][i].a <== states[i][90];\n\t\tand[92][i].b <== eq[29][i].out;\n\t\tstates[i+1][91] <== and[92][i].out;\n\t\tstate_changed[i].in[90] <== states[i+1][91];\n\t\teq[30][i] = IsEqual();\n\t\teq[30][i].in[0] <== in[i];\n\t\teq[30][i].in[1] <== 101;\n\t\tand[93][i] = AND();\n\t\tand[93][i].a <== states[i][91];\n\t\tand[93][i].b <== eq[30][i].out;\n\t\tstates[i+1][92] <== and[93][i].out;\n\t\tstate_changed[i].in[91] <== states[i+1][92];\n\t\tand[94][i] = AND();\n\t\tand[94][i].a <== states[i][92];\n\t\tand[94][i].b <== eq[0][i].out;\n\t\tstates[i+1][93] <== and[94][i].out;\n\t\tstate_changed[i].in[92] <== states[i+1][93];\n\t\tand[95][i] = AND();\n\t\tand[95][i].a <== states[i][93];\n\t\tand[95][i].b <== eq[26][i].out;\n\t\tstates[i+1][94] <== and[95][i].out;\n\t\tstate_changed[i].in[93] <== states[i+1][94];\n\t\tand[96][i] = AND();\n\t\tand[96][i].a <== states[i][94];\n\t\tand[96][i].b <== eq[26][i].out;\n\t\tstates[i+1][95] <== and[96][i].out;\n\t\tstate_changed[i].in[94] <== states[i+1][95];\n\t\tand[97][i] = AND();\n\t\tand[97][i].a <== states[i][95];\n\t\tand[97][i].b <== eq[17][i].out;\n\t\tstates[i+1][96] <== and[97][i].out;\n\t\tstate_changed[i].in[95] <== states[i+1][96];\n\t\tand[98][i] = AND();\n\t\tand[98][i].a <== states[i][96];\n\t\tand[98][i].b <== eq[18][i].out;\n\t\tstates[i+1][97] <== and[98][i].out;\n\t\tstate_changed[i].in[96] <== states[i+1][97];\n\t\tand[99][i] = AND();\n\t\tand[99][i].a <== states[i][97];\n\t\tand[99][i].b <== eq[13][i].out;\n\t\tstates[i+1][98] <== and[99][i].out;\n\t\tstate_changed[i].in[97] <== states[i+1][98];\n\t\tand[100][i] = AND();\n\t\tand[100][i].a <== states[i][76];\n\t\tand[100][i].b <== eq[0][i].out;\n\t\tstates[i+1][99] <== and[100][i].out;\n\t\tstate_changed[i].in[98] <== states[i+1][99];\n\t\tand[101][i] = AND();\n\t\tand[101][i].a <== states[i][99];\n\t\tand[101][i].b <== eq[0][i].out;\n\t\tstates[i+1][100] <== and[101][i].out;\n\t\tstate_changed[i].in[99] <== states[i+1][100];\n\t\tand[102][i] = AND();\n\t\tand[102][i].a <== states[i][100];\n\t\tand[102][i].b <== eq[0][i].out;\n\t\tstates[i+1][101] <== and[102][i].out;\n\t\tstate_changed[i].in[100] <== states[i+1][101];\n\t\tand[103][i] = AND();\n\t\tand[103][i].a <== states[i][101];\n\t\tand[103][i].b <== eq[0][i].out;\n\t\tstates[i+1][102] <== and[103][i].out;\n\t\tstate_changed[i].in[101] <== states[i+1][102];\n\t\tand[104][i] = AND();\n\t\tand[104][i].a <== states[i][102];\n\t\tand[104][i].b <== eq[0][i].out;\n\t\tstates[i+1][103] <== and[104][i].out;\n\t\tstate_changed[i].in[102] <== states[i+1][103];\n\t\tand[105][i] = AND();\n\t\tand[105][i].a <== states[i][103];\n\t\tand[105][i].b <== eq[0][i].out;\n\t\tstates[i+1][104] <== and[105][i].out;\n\t\tstate_changed[i].in[103] <== states[i+1][104];\n\t\tand[106][i] = AND();\n\t\tand[106][i].a <== states[i][104];\n\t\tand[106][i].b <== eq[0][i].out;\n\t\tstates[i+1][105] <== and[106][i].out;\n\t\tstate_changed[i].in[104] <== states[i+1][105];\n\t\tand[107][i] = AND();\n\t\tand[107][i].a <== states[i][105];\n\t\tand[107][i].b <== eq[0][i].out;\n\t\tstates[i+1][106] <== and[107][i].out;\n\t\tstate_changed[i].in[105] <== states[i+1][106];\n\t\tand[108][i] = AND();\n\t\tand[108][i].a <== states[i][106];\n\t\tand[108][i].b <== eq[0][i].out;\n\t\tstates[i+1][107] <== and[108][i].out;\n\t\tstate_changed[i].in[106] <== states[i+1][107];\n\t\tand[109][i] = AND();\n\t\tand[109][i].a <== states[i][107];\n\t\tand[109][i].b <== eq[14][i].out;\n\t\tstates[i+1][108] <== and[109][i].out;\n\t\tstate_changed[i].in[107] <== states[i+1][108];\n\t\tand[110][i] = AND();\n\t\tand[110][i].a <== states[i][108];\n\t\tand[110][i].b <== eq[16][i].out;\n\t\tstates[i+1][109] <== and[110][i].out;\n\t\tstate_changed[i].in[108] <== states[i+1][109];\n\t\tand[111][i] = AND();\n\t\tand[111][i].a <== states[i][109];\n\t\tand[111][i].b <== eq[0][i].out;\n\t\tstates[i+1][110] <== and[111][i].out;\n\t\tstate_changed[i].in[109] <== states[i+1][110];\n\t\teq[31][i] = IsEqual();\n\t\teq[31][i].in[0] <== in[i];\n\t\teq[31][i].in[1] <== 115;\n\t\tand[112][i] = AND();\n\t\tand[112][i].a <== states[i][110];\n\t\tand[112][i].b <== eq[31][i].out;\n\t\tstates[i+1][111] <== and[112][i].out;\n\t\tstate_changed[i].in[110] <== states[i+1][111];\n\t\tand[113][i] = AND();\n\t\tand[113][i].a <== states[i][111];\n\t\tand[113][i].b <== eq[29][i].out;\n\t\tstates[i+1][112] <== and[113][i].out;\n\t\tstate_changed[i].in[111] <== states[i+1][112];\n\t\teq[32][i] = IsEqual();\n\t\teq[32][i].in[0] <== in[i];\n\t\teq[32][i].in[1] <== 121;\n\t\tand[114][i] = AND();\n\t\tand[114][i].a <== states[i][112];\n\t\tand[114][i].b <== eq[32][i].out;\n\t\tstates[i+1][113] <== and[114][i].out;\n\t\tstate_changed[i].in[112] <== states[i+1][113];\n\t\teq[33][i] = IsEqual();\n\t\teq[33][i].in[0] <== in[i];\n\t\teq[33][i].in[1] <== 108;\n\t\tand[115][i] = AND();\n\t\tand[115][i].a <== states[i][113];\n\t\tand[115][i].b <== eq[33][i].out;\n\t\tstates[i+1][114] <== and[115][i].out;\n\t\tstate_changed[i].in[113] <== states[i+1][114];\n\t\tand[116][i] = AND();\n\t\tand[116][i].a <== states[i][114];\n\t\tand[116][i].b <== eq[30][i].out;\n\t\tstates[i+1][115] <== and[116][i].out;\n\t\tstate_changed[i].in[114] <== states[i+1][115];\n\t\tand[117][i] = AND();\n\t\tand[117][i].a <== states[i][115];\n\t\tand[117][i].b <== eq[19][i].out;\n\t\tstates[i+1][116] <== and[117][i].out;\n\t\tstate_changed[i].in[115] <== states[i+1][116];\n\t\teq[34][i] = IsEqual();\n\t\teq[34][i].in[0] <== in[i];\n\t\teq[34][i].in[1] <== 51;\n\t\tand[118][i] = AND();\n\t\tand[118][i].a <== states[i][116];\n\t\tand[118][i].b <== eq[34][i].out;\n\t\tstates[i+1][117] <== and[118][i].out;\n\t\tstate_changed[i].in[116] <== states[i+1][117];\n\t\tand[119][i] = AND();\n\t\tand[119][i].a <== states[i][0];\n\t\tand[119][i].b <== eq[14][i].out;\n\t\tstates[i+1][118] <== and[119][i].out;\n\t\tstate_changed[i].in[117] <== states[i+1][118];\n\t\teq[35][i] = IsEqual();\n\t\teq[35][i].in[0] <== in[i];\n\t\teq[35][i].in[1] <== 68;\n\t\tand[120][i] = AND();\n\t\tand[120][i].a <== states[i][117];\n\t\tand[120][i].b <== eq[35][i].out;\n\t\tstates[i+1][119] <== and[120][i].out;\n\t\tstate_changed[i].in[118] <== states[i+1][119];\n\t\teq[36][i] = IsEqual();\n\t\teq[36][i].in[0] <== in[i];\n\t\teq[36][i].in[1] <== 34;\n\t\tand[121][i] = AND();\n\t\tand[121][i].a <== states[i][119];\n\t\tand[121][i].b <== eq[36][i].out;\n\t\tstates[i+1][120] <== and[121][i].out;\n\t\tstate_changed[i].in[119] <== states[i+1][120];\n\t\teq[37][i] = IsEqual();\n\t\teq[37][i].in[0] <== in[i];\n\t\teq[37][i].in[1] <== 99;\n\t\tand[122][i] = AND();\n\t\tand[122][i].a <== states[i][120];\n\t\tand[122][i].b <== eq[37][i].out;\n\t\tstates[i+1][121] <== and[122][i].out;\n\t\tstate_changed[i].in[120] <== states[i+1][121];\n\t\tand[123][i] = AND();\n\t\tand[123][i].a <== states[i][121];\n\t\tand[123][i].b <== eq[28][i].out;\n\t\tstates[i+1][122] <== and[123][i].out;\n\t\tstate_changed[i].in[121] <== states[i+1][122];\n\t\tand[124][i] = AND();\n\t\tand[124][i].a <== states[i][122];\n\t\tand[124][i].b <== eq[33][i].out;\n\t\tstates[i+1][123] <== and[124][i].out;\n\t\tstate_changed[i].in[122] <== states[i+1][123];\n\t\tand[125][i] = AND();\n\t\tand[125][i].a <== states[i][123];\n\t\tand[125][i].b <== eq[28][i].out;\n\t\tstates[i+1][124] <== and[125][i].out;\n\t\tstate_changed[i].in[123] <== states[i+1][124];\n\t\teq[38][i] = IsEqual();\n\t\teq[38][i].in[0] <== in[i];\n\t\teq[38][i].in[1] <== 114;\n\t\tand[126][i] = AND();\n\t\tand[126][i].a <== states[i][124];\n\t\tand[126][i].b <== eq[38][i].out;\n\t\tstates[i+1][125] <== and[126][i].out;\n\t\tstate_changed[i].in[124] <== states[i+1][125];\n\t\teq[39][i] = IsEqual();\n\t\teq[39][i].in[0] <== in[i];\n\t\teq[39][i].in[1] <== 58;\n\t\tand[127][i] = AND();\n\t\tand[127][i].a <== states[i][125];\n\t\tand[127][i].b <== eq[39][i].out;\n\t\tstates[i+1][126] <== and[127][i].out;\n\t\tstate_changed[i].in[125] <== states[i+1][126];\n\t\teq[40][i] = IsEqual();\n\t\teq[40][i].in[0] <== in[i];\n\t\teq[40][i].in[1] <== 35;\n\t\tand[128][i] = AND();\n\t\tand[128][i].a <== states[i][126];\n\t\tand[128][i].b <== eq[40][i].out;\n\t\tstates[i+1][127] <== and[128][i].out;\n\t\tstate_changed[i].in[126] <== states[i+1][127];\n\t\tand[129][i] = AND();\n\t\tand[129][i].a <== states[i][127];\n\t\tand[129][i].b <== eq[21][i].out;\n\t\tstates[i+1][128] <== and[129][i].out;\n\t\tstate_changed[i].in[127] <== states[i+1][128];\n\t\tand[130][i] = AND();\n\t\tand[130][i].a <== states[i][128];\n\t\tand[130][i].b <== eq[21][i].out;\n\t\tstates[i+1][129] <== and[130][i].out;\n\t\tstate_changed[i].in[128] <== states[i+1][129];\n\t\teq[41][i] = IsEqual();\n\t\teq[41][i].in[0] <== in[i];\n\t\teq[41][i].in[1] <== 55;\n\t\tand[131][i] = AND();\n\t\tand[131][i].a <== states[i][129];\n\t\tand[131][i].b <== eq[41][i].out;\n\t\tstates[i+1][130] <== and[131][i].out;\n\t\tstate_changed[i].in[129] <== states[i+1][130];\n\t\teq[42][i] = IsEqual();\n\t\teq[42][i].in[0] <== in[i];\n\t\teq[42][i].in[1] <== 52;\n\t\tand[132][i] = AND();\n\t\tand[132][i].a <== states[i][130];\n\t\tand[132][i].b <== eq[42][i].out;\n\t\tstates[i+1][131] <== and[132][i].out;\n\t\tstate_changed[i].in[130] <== states[i+1][131];\n\t\tand[133][i] = AND();\n\t\tand[133][i].a <== states[i][131];\n\t\tand[133][i].b <== eq[35][i].out;\n\t\tstates[i+1][132] <== and[133][i].out;\n\t\tstate_changed[i].in[131] <== states[i+1][132];\n\t\teq[43][i] = IsEqual();\n\t\teq[43][i].in[0] <== in[i];\n\t\teq[43][i].in[1] <== 69;\n\t\tand[134][i] = AND();\n\t\tand[134][i].a <== states[i][132];\n\t\tand[134][i].b <== eq[43][i].out;\n\t\tstates[i+1][133] <== and[134][i].out;\n\t\tstate_changed[i].in[132] <== states[i+1][133];\n\t\teq[44][i] = IsEqual();\n\t\teq[44][i].in[0] <== in[i];\n\t\teq[44][i].in[1] <== 59;\n\t\tand[135][i] = AND();\n\t\tand[135][i].a <== states[i][133];\n\t\tand[135][i].b <== eq[44][i].out;\n\t\tstates[i+1][134] <== and[135][i].out;\n\t\tstate_changed[i].in[133] <== states[i+1][134];\n\t\tand[136][i] = AND();\n\t\tand[136][i].a <== states[i][134];\n\t\tand[136][i].b <== eq[0][i].out;\n\t\tstates[i+1][135] <== and[136][i].out;\n\t\tstate_changed[i].in[134] <== states[i+1][135];\n\t\tand[137][i] = AND();\n\t\tand[137][i].a <== states[i][135];\n\t\tand[137][i].b <== eq[29][i].out;\n\t\tstates[i+1][136] <== and[137][i].out;\n\t\tstate_changed[i].in[135] <== states[i+1][136];\n\t\tand[138][i] = AND();\n\t\tand[138][i].a <== states[i][136];\n\t\tand[138][i].b <== eq[30][i].out;\n\t\tstates[i+1][137] <== and[138][i].out;\n\t\tstate_changed[i].in[136] <== states[i+1][137];\n\t\teq[45][i] = IsEqual();\n\t\teq[45][i].in[0] <== in[i];\n\t\teq[45][i].in[1] <== 120;\n\t\tand[139][i] = AND();\n\t\tand[139][i].a <== states[i][137];\n\t\tand[139][i].b <== eq[45][i].out;\n\t\tstates[i+1][138] <== and[139][i].out;\n\t\tstate_changed[i].in[137] <== states[i+1][138];\n\t\tand[140][i] = AND();\n\t\tand[140][i].a <== states[i][138];\n\t\tand[140][i].b <== eq[29][i].out;\n\t\tstates[i+1][139] <== and[140][i].out;\n\t\tstate_changed[i].in[138] <== states[i+1][139];\n\t\tand[141][i] = AND();\n\t\tand[141][i].a <== states[i][139];\n\t\tand[141][i].b <== eq[26][i].out;\n\t\tstates[i+1][140] <== and[141][i].out;\n\t\tstate_changed[i].in[139] <== states[i+1][140];\n\t\tand[142][i] = AND();\n\t\tand[142][i].a <== states[i][140];\n\t\tand[142][i].b <== eq[22][i].out;\n\t\tstates[i+1][141] <== and[142][i].out;\n\t\tstate_changed[i].in[140] <== states[i+1][141];\n\t\tand[143][i] = AND();\n\t\tand[143][i].a <== states[i][141];\n\t\tand[143][i].b <== eq[30][i].out;\n\t\tstates[i+1][142] <== and[143][i].out;\n\t\tstate_changed[i].in[141] <== states[i+1][142];\n\t\tand[144][i] = AND();\n\t\tand[144][i].a <== states[i][142];\n\t\tand[144][i].b <== eq[37][i].out;\n\t\tstates[i+1][143] <== and[144][i].out;\n\t\tstate_changed[i].in[142] <== states[i+1][143];\n\t\tand[145][i] = AND();\n\t\tand[145][i].a <== states[i][143];\n\t\tand[145][i].b <== eq[28][i].out;\n\t\tstates[i+1][144] <== and[145][i].out;\n\t\tstate_changed[i].in[143] <== states[i+1][144];\n\t\tand[146][i] = AND();\n\t\tand[146][i].a <== states[i][118];\n\t\tand[146][i].b <== eq[25][i].out;\n\t\tstates[i+1][145] <== and[146][i].out;\n\t\tstate_changed[i].in[144] <== states[i+1][145];\n\t\tand[147][i] = AND();\n\t\tand[147][i].a <== states[i][144];\n\t\tand[147][i].b <== eq[38][i].out;\n\t\tstates[i+1][146] <== and[147][i].out;\n\t\tstate_changed[i].in[145] <== states[i+1][146];\n\t\tand[148][i] = AND();\n\t\tand[148][i].a <== states[i][146];\n\t\tand[148][i].b <== eq[16][i].out;\n\t\tstates[i+1][147] <== and[148][i].out;\n\t\tstate_changed[i].in[146] <== states[i+1][147];\n\t\tand[149][i] = AND();\n\t\tand[149][i].a <== states[i][147];\n\t\tand[149][i].b <== eq[29][i].out;\n\t\tstates[i+1][148] <== and[149][i].out;\n\t\tstate_changed[i].in[147] <== states[i+1][148];\n\t\tand[150][i] = AND();\n\t\tand[150][i].a <== states[i][148];\n\t\tand[150][i].b <== eq[23][i].out;\n\t\tstates[i+1][149] <== and[150][i].out;\n\t\tstate_changed[i].in[148] <== states[i+1][149];\n\t\tand[151][i] = AND();\n\t\tand[151][i].a <== states[i][149];\n\t\tand[151][i].b <== eq[28][i].out;\n\t\tstates[i+1][150] <== and[151][i].out;\n\t\tstate_changed[i].in[149] <== states[i+1][150];\n\t\tand[152][i] = AND();\n\t\tand[152][i].a <== states[i][150];\n\t\tand[152][i].b <== eq[27][i].out;\n\t\tstates[i+1][151] <== and[152][i].out;\n\t\tstate_changed[i].in[150] <== states[i+1][151];\n\t\tand[153][i] = AND();\n\t\tand[153][i].a <== states[i][151];\n\t\tand[153][i].b <== eq[39][i].out;\n\t\tstates[i+1][152] <== and[153][i].out;\n\t\tstate_changed[i].in[151] <== states[i+1][152];\n\t\tand[154][i] = AND();\n\t\tand[154][i].a <== states[i][152];\n\t\tand[154][i].b <== eq[27][i].out;\n\t\tstates[i+1][153] <== and[154][i].out;\n\t\tstate_changed[i].in[152] <== states[i+1][153];\n\t\tand[155][i] = AND();\n\t\tand[155][i].a <== states[i][153];\n\t\tand[155][i].b <== eq[28][i].out;\n\t\tstates[i+1][154] <== and[155][i].out;\n\t\tstate_changed[i].in[153] <== states[i+1][154];\n\t\tand[156][i] = AND();\n\t\tand[156][i].a <== states[i][154];\n\t\tand[156][i].b <== eq[27][i].out;\n\t\tstates[i+1][155] <== and[156][i].out;\n\t\tstate_changed[i].in[154] <== states[i+1][155];\n\t\tand[157][i] = AND();\n\t\tand[157][i].a <== states[i][155];\n\t\tand[157][i].b <== eq[30][i].out;\n\t\tstates[i+1][156] <== and[157][i].out;\n\t\tstate_changed[i].in[155] <== states[i+1][156];\n\t\tand[158][i] = AND();\n\t\tand[158][i].a <== states[i][156];\n\t\tand[158][i].b <== eq[36][i].out;\n\t\tstates[i+1][157] <== and[158][i].out;\n\t\tstate_changed[i].in[156] <== states[i+1][157];\n\t\tand[159][i] = AND();\n\t\tand[159][i].a <== states[i][157];\n\t\tand[159][i].b <== eq[18][i].out;\n\t\tstates[i+1][158] <== and[159][i].out;\n\t\tstate_changed[i].in[157] <== states[i+1][158];\n\t\tand[160][i] = AND();\n\t\tand[160][i].a <== states[i][158];\n\t\tand[160][i].b <== eq[13][i].out;\n\t\tstates[i+1][159] <== and[160][i].out;\n\t\tstate_changed[i].in[158] <== states[i+1][159];\n\t\tand[161][i] = AND();\n\t\tand[161][i].a <== states[i][159];\n\t\tand[161][i].b <== eq[0][i].out;\n\t\tstates[i+1][160] <== and[161][i].out;\n\t\tstate_changed[i].in[159] <== states[i+1][160];\n\t\tand[162][i] = AND();\n\t\tand[162][i].a <== states[i][160];\n\t\tand[162][i].b <== eq[0][i].out;\n\t\tstates[i+1][161] <== and[162][i].out;\n\t\tstate_changed[i].in[160] <== states[i+1][161];\n\t\tand[163][i] = AND();\n\t\tand[163][i].a <== states[i][161];\n\t\tand[163][i].b <== eq[0][i].out;\n\t\tstates[i+1][162] <== and[163][i].out;\n\t\tstate_changed[i].in[161] <== states[i+1][162];\n\t\tand[164][i] = AND();\n\t\tand[164][i].a <== states[i][162];\n\t\tand[164][i].b <== eq[0][i].out;\n\t\tstates[i+1][163] <== and[164][i].out;\n\t\tstate_changed[i].in[162] <== states[i+1][163];\n\t\tand[165][i] = AND();\n\t\tand[165][i].a <== states[i][163];\n\t\tand[165][i].b <== eq[0][i].out;\n\t\tstates[i+1][164] <== and[165][i].out;\n\t\tstate_changed[i].in[163] <== states[i+1][164];\n\t\tand[166][i] = AND();\n\t\tand[166][i].a <== states[i][164];\n\t\tand[166][i].b <== eq[0][i].out;\n\t\tstates[i+1][165] <== and[166][i].out;\n\t\tstate_changed[i].in[164] <== states[i+1][165];\n\t\tand[167][i] = AND();\n\t\tand[167][i].a <== states[i][165];\n\t\tand[167][i].b <== eq[0][i].out;\n\t\tstates[i+1][166] <== and[167][i].out;\n\t\tstate_changed[i].in[165] <== states[i+1][166];\n\t\tand[168][i] = AND();\n\t\tand[168][i].a <== states[i][166];\n\t\tand[168][i].b <== eq[0][i].out;\n\t\tstates[i+1][167] <== and[168][i].out;\n\t\tstate_changed[i].in[166] <== states[i+1][167];\n\t\tand[169][i] = AND();\n\t\tand[169][i].a <== states[i][167];\n\t\tand[169][i].b <== eq[0][i].out;\n\t\tstates[i+1][168] <== and[169][i].out;\n\t\tstate_changed[i].in[167] <== states[i+1][168];\n\t\tand[170][i] = AND();\n\t\tand[170][i].a <== states[i][168];\n\t\tand[170][i].b <== eq[0][i].out;\n\t\tstates[i+1][169] <== and[170][i].out;\n\t\tstate_changed[i].in[168] <== states[i+1][169];\n\t\tand[171][i] = AND();\n\t\tand[171][i].a <== states[i][169];\n\t\tand[171][i].b <== eq[0][i].out;\n\t\tstates[i+1][170] <== and[171][i].out;\n\t\tstate_changed[i].in[169] <== states[i+1][170];\n\t\tand[172][i] = AND();\n\t\tand[172][i].a <== states[i][170];\n\t\tand[172][i].b <== eq[0][i].out;\n\t\tstates[i+1][171] <== and[172][i].out;\n\t\tstate_changed[i].in[170] <== states[i+1][171];\n\t\tand[173][i] = AND();\n\t\tand[173][i].a <== states[i][145];\n\t\tand[173][i].b <== eq[26][i].out;\n\t\tstates[i+1][172] <== and[173][i].out;\n\t\tstate_changed[i].in[171] <== states[i+1][172];\n\t\tand[174][i] = AND();\n\t\tand[174][i].a <== states[i][171];\n\t\tand[174][i].b <== eq[0][i].out;\n\t\tstates[i+1][173] <== and[174][i].out;\n\t\tstate_changed[i].in[172] <== states[i+1][173];\n\t\tand[175][i] = AND();\n\t\tand[175][i].a <== states[i][173];\n\t\tand[175][i].b <== eq[0][i].out;\n\t\tstates[i+1][174] <== and[175][i].out;\n\t\tstate_changed[i].in[173] <== states[i+1][174];\n\t\tand[176][i] = AND();\n\t\tand[176][i].a <== states[i][174];\n\t\tand[176][i].b <== eq[0][i].out;\n\t\tstates[i+1][175] <== and[176][i].out;\n\t\tstate_changed[i].in[174] <== states[i+1][175];\n\t\tand[177][i] = AND();\n\t\tand[177][i].a <== states[i][175];\n\t\tand[177][i].b <== eq[0][i].out;\n\t\tstates[i+1][176] <== and[177][i].out;\n\t\tstate_changed[i].in[175] <== states[i+1][176];\n\t\tand[178][i] = AND();\n\t\tand[178][i].a <== states[i][176];\n\t\tand[178][i].b <== eq[0][i].out;\n\t\tstates[i+1][177] <== and[178][i].out;\n\t\tstate_changed[i].in[176] <== states[i+1][177];\n\t\tand[179][i] = AND();\n\t\tand[179][i].a <== states[i][177];\n\t\tand[179][i].b <== eq[0][i].out;\n\t\tstates[i+1][178] <== and[179][i].out;\n\t\tstate_changed[i].in[177] <== states[i+1][178];\n\t\tand[180][i] = AND();\n\t\tand[180][i].a <== states[i][178];\n\t\tand[180][i].b <== eq[0][i].out;\n\t\tstates[i+1][179] <== and[180][i].out;\n\t\tstate_changed[i].in[178] <== states[i+1][179];\n\t\tand[181][i] = AND();\n\t\tand[181][i].a <== states[i][179];\n\t\tand[181][i].b <== eq[19][i].out;\n\t\tstates[i+1][180] <== and[181][i].out;\n\t\tstate_changed[i].in[179] <== states[i+1][180];\n\t\tand[182][i] = AND();\n\t\tand[182][i].a <== states[i][180];\n\t\tand[182][i].b <== eq[20][i].out;\n\t\tstates[i+1][181] <== and[182][i].out;\n\t\tstate_changed[i].in[180] <== states[i+1][181];\n\t\tand[183][i] = AND();\n\t\tand[183][i].a <== states[i][181];\n\t\tand[183][i].b <== eq[21][i].out;\n\t\tstates[i+1][182] <== and[183][i].out;\n\t\tstate_changed[i].in[181] <== states[i+1][182];\n\t\tand[184][i] = AND();\n\t\tand[184][i].a <== states[i][182];\n\t\tand[184][i].b <== eq[18][i].out;\n\t\tstates[i+1][183] <== and[184][i].out;\n\t\tstate_changed[i].in[182] <== states[i+1][183];\n\t\tand[185][i] = AND();\n\t\tand[185][i].a <== states[i][183];\n\t\tand[185][i].b <== eq[13][i].out;\n\t\tstates[i+1][184] <== and[185][i].out;\n\t\tstate_changed[i].in[183] <== states[i+1][184];\n\t\tand[186][i] = AND();\n\t\tand[186][i].a <== states[i][184];\n\t\tand[186][i].b <== eq[0][i].out;\n\t\tstates[i+1][185] <== and[186][i].out;\n\t\tstate_changed[i].in[184] <== states[i+1][185];\n\t\tand[187][i] = AND();\n\t\tand[187][i].a <== states[i][185];\n\t\tand[187][i].b <== eq[0][i].out;\n\t\tstates[i+1][186] <== and[187][i].out;\n\t\tstate_changed[i].in[185] <== states[i+1][186];\n\t\tand[188][i] = AND();\n\t\tand[188][i].a <== states[i][186];\n\t\tand[188][i].b <== eq[0][i].out;\n\t\tstates[i+1][187] <== and[188][i].out;\n\t\tstate_changed[i].in[186] <== states[i+1][187];\n\t\tand[189][i] = AND();\n\t\tand[189][i].a <== states[i][187];\n\t\tand[189][i].b <== eq[0][i].out;\n\t\tstates[i+1][188] <== and[189][i].out;\n\t\tstate_changed[i].in[187] <== states[i+1][188];\n\t\tand[190][i] = AND();\n\t\tand[190][i].a <== states[i][188];\n\t\tand[190][i].b <== eq[0][i].out;\n\t\tstates[i+1][189] <== and[190][i].out;\n\t\tstate_changed[i].in[188] <== states[i+1][189];\n\t\tand[191][i] = AND();\n\t\tand[191][i].a <== states[i][189];\n\t\tand[191][i].b <== eq[0][i].out;\n\t\tstates[i+1][190] <== and[191][i].out;\n\t\tstate_changed[i].in[189] <== states[i+1][190];\n\t\tand[192][i] = AND();\n\t\tand[192][i].a <== states[i][190];\n\t\tand[192][i].b <== eq[0][i].out;\n\t\tstates[i+1][191] <== and[192][i].out;\n\t\tstate_changed[i].in[190] <== states[i+1][191];\n\t\tand[193][i] = AND();\n\t\tand[193][i].a <== states[i][191];\n\t\tand[193][i].b <== eq[0][i].out;\n\t\tstates[i+1][192] <== and[193][i].out;\n\t\tstate_changed[i].in[191] <== states[i+1][192];\n\t\tand[194][i] = AND();\n\t\tand[194][i].a <== states[i][192];\n\t\tand[194][i].b <== eq[0][i].out;\n\t\tstates[i+1][193] <== and[194][i].out;\n\t\tstate_changed[i].in[192] <== states[i+1][193];\n\t\tand[195][i] = AND();\n\t\tand[195][i].a <== states[i][193];\n\t\tand[195][i].b <== eq[0][i].out;\n\t\tstates[i+1][194] <== and[195][i].out;\n\t\tstate_changed[i].in[193] <== states[i+1][194];\n\t\tand[196][i] = AND();\n\t\tand[196][i].a <== states[i][194];\n\t\tand[196][i].b <== eq[0][i].out;\n\t\tstates[i+1][195] <== and[196][i].out;\n\t\tstate_changed[i].in[194] <== states[i+1][195];\n\t\tand[197][i] = AND();\n\t\tand[197][i].a <== states[i][195];\n\t\tand[197][i].b <== eq[0][i].out;\n\t\tstates[i+1][196] <== and[197][i].out;\n\t\tstate_changed[i].in[195] <== states[i+1][196];\n\t\tand[198][i] = AND();\n\t\tand[198][i].a <== states[i][196];\n\t\tand[198][i].b <== eq[0][i].out;\n\t\tstates[i+1][197] <== and[198][i].out;\n\t\tstate_changed[i].in[196] <== states[i+1][197];\n\t\tand[199][i] = AND();\n\t\tand[199][i].a <== states[i][197];\n\t\tand[199][i].b <== eq[0][i].out;\n\t\tstates[i+1][198] <== and[199][i].out;\n\t\tstate_changed[i].in[197] <== states[i+1][198];\n\t\tand[200][i] = AND();\n\t\tand[200][i].a <== states[i][172];\n\t\tand[200][i].b <== eq[26][i].out;\n\t\tstates[i+1][199] <== and[200][i].out;\n\t\tstate_changed[i].in[198] <== states[i+1][199];\n\t\tand[201][i] = AND();\n\t\tand[201][i].a <== states[i][198];\n\t\tand[201][i].b <== eq[0][i].out;\n\t\tstates[i+1][200] <== and[201][i].out;\n\t\tstate_changed[i].in[199] <== states[i+1][200];\n\t\tand[202][i] = AND();\n\t\tand[202][i].a <== states[i][200];\n\t\tand[202][i].b <== eq[0][i].out;\n\t\tstates[i+1][201] <== and[202][i].out;\n\t\tstate_changed[i].in[200] <== states[i+1][201];\n\t\tand[203][i] = AND();\n\t\tand[203][i].a <== states[i][201];\n\t\tand[203][i].b <== eq[0][i].out;\n\t\tstates[i+1][202] <== and[203][i].out;\n\t\tstate_changed[i].in[201] <== states[i+1][202];\n\t\tand[204][i] = AND();\n\t\tand[204][i].a <== states[i][202];\n\t\tand[204][i].b <== eq[0][i].out;\n\t\tstates[i+1][203] <== and[204][i].out;\n\t\tstate_changed[i].in[202] <== states[i+1][203];\n\t\tand[205][i] = AND();\n\t\tand[205][i].a <== states[i][203];\n\t\tand[205][i].b <== eq[0][i].out;\n\t\tstates[i+1][204] <== and[205][i].out;\n\t\tstate_changed[i].in[203] <== states[i+1][204];\n\t\tand[206][i] = AND();\n\t\tand[206][i].a <== states[i][204];\n\t\tand[206][i].b <== eq[0][i].out;\n\t\tstates[i+1][205] <== and[206][i].out;\n\t\tstate_changed[i].in[204] <== states[i+1][205];\n\t\teq[46][i] = IsEqual();\n\t\teq[46][i].in[0] <== in[i];\n\t\teq[46][i].in[1] <== 104;\n\t\tand[207][i] = AND();\n\t\tand[207][i].a <== states[i][205];\n\t\tand[207][i].b <== eq[46][i].out;\n\t\tstates[i+1][206] <== and[207][i].out;\n\t\tstate_changed[i].in[205] <== states[i+1][206];\n\t\tand[208][i] = AND();\n\t\tand[208][i].a <== states[i][206];\n\t\tand[208][i].b <== eq[38][i].out;\n\t\tstates[i+1][207] <== and[208][i].out;\n\t\tstate_changed[i].in[206] <== states[i+1][207];\n\t\tand[209][i] = AND();\n\t\tand[209][i].a <== states[i][207];\n\t\tand[209][i].b <== eq[30][i].out;\n\t\tstates[i+1][208] <== and[209][i].out;\n\t\tstate_changed[i].in[207] <== states[i+1][208];\n\t\teq[47][i] = IsEqual();\n\t\teq[47][i].in[0] <== in[i];\n\t\teq[47][i].in[1] <== 102;\n\t\tand[210][i] = AND();\n\t\tand[210][i].a <== states[i][208];\n\t\tand[210][i].b <== eq[47][i].out;\n\t\tstates[i+1][209] <== and[210][i].out;\n\t\tstate_changed[i].in[208] <== states[i+1][209];\n\t\tand[211][i] = AND();\n\t\tand[211][i].a <== states[i][209];\n\t\tand[211][i].b <== eq[19][i].out;\n\t\tstates[i+1][210] <== and[211][i].out;\n\t\tstate_changed[i].in[209] <== states[i+1][210];\n\t\tand[212][i] = AND();\n\t\tand[212][i].a <== states[i][210];\n\t\tand[212][i].b <== eq[34][i].out;\n\t\tstates[i+1][211] <== and[212][i].out;\n\t\tstate_changed[i].in[210] <== states[i+1][211];\n\t\tand[213][i] = AND();\n\t\tand[213][i].a <== states[i][211];\n\t\tand[213][i].b <== eq[35][i].out;\n\t\tstates[i+1][212] <== and[213][i].out;\n\t\tstate_changed[i].in[211] <== states[i+1][212];\n\t\tand[214][i] = AND();\n\t\tand[214][i].a <== states[i][212];\n\t\tand[214][i].b <== eq[36][i].out;\n\t\tstates[i+1][213] <== and[214][i].out;\n\t\tstate_changed[i].in[212] <== states[i+1][213];\n\t\tand[215][i] = AND();\n\t\tand[215][i].a <== states[i][213];\n\t\tand[215][i].b <== eq[46][i].out;\n\t\tstates[i+1][214] <== and[215][i].out;\n\t\tstate_changed[i].in[213] <== states[i+1][214];\n\t\tand[216][i] = AND();\n\t\tand[216][i].a <== states[i][214];\n\t\tand[216][i].b <== eq[29][i].out;\n\t\tstates[i+1][215] <== and[216][i].out;\n\t\tstate_changed[i].in[214] <== states[i+1][215];\n\t\tand[217][i] = AND();\n\t\tand[217][i].a <== states[i][215];\n\t\tand[217][i].b <== eq[29][i].out;\n\t\tstates[i+1][216] <== and[217][i].out;\n\t\tstate_changed[i].in[215] <== states[i+1][216];\n\t\teq[48][i] = IsEqual();\n\t\teq[48][i].in[0] <== in[i];\n\t\teq[48][i].in[1] <== 112;\n\t\tand[218][i] = AND();\n\t\tand[218][i].a <== states[i][216];\n\t\tand[218][i].b <== eq[48][i].out;\n\t\tstates[i+1][217] <== and[218][i].out;\n\t\tstate_changed[i].in[216] <== states[i+1][217];\n\t\tand[219][i] = AND();\n\t\tand[219][i].a <== states[i][217];\n\t\tand[219][i].b <== eq[31][i].out;\n\t\tstates[i+1][218] <== and[219][i].out;\n\t\tstate_changed[i].in[217] <== states[i+1][218];\n\t\tand[220][i] = AND();\n\t\tand[220][i].a <== states[i][218];\n\t\tand[220][i].b <== eq[39][i].out;\n\t\tstates[i+1][219] <== and[220][i].out;\n\t\tstate_changed[i].in[218] <== states[i+1][219];\n\t\tand[221][i] = AND();\n\t\tand[221][i].a <== states[i][219];\n\t\tand[221][i].b <== eq[15][i].out;\n\t\tstates[i+1][220] <== and[221][i].out;\n\t\tstate_changed[i].in[219] <== states[i+1][220];\n\t\tand[222][i] = AND();\n\t\tand[222][i].a <== states[i][220];\n\t\tand[222][i].b <== eq[15][i].out;\n\t\tstates[i+1][221] <== and[222][i].out;\n\t\tstate_changed[i].in[220] <== states[i+1][221];\n\t\tand[223][i] = AND();\n\t\tand[223][i].a <== states[i][221];\n\t\tand[223][i].b <== eq[24][i].out;\n\t\tstates[i+1][222] <== and[223][i].out;\n\t\tstate_changed[i].in[221] <== states[i+1][222];\n\t\tand[224][i] = AND();\n\t\tand[224][i].a <== states[i][222];\n\t\tand[224][i].b <== eq[30][i].out;\n\t\tstates[i+1][223] <== and[224][i].out;\n\t\tstate_changed[i].in[222] <== states[i+1][223];\n\t\tand[225][i] = AND();\n\t\tand[225][i].a <== states[i][223];\n\t\tand[225][i].b <== eq[27][i].out;\n\t\tstates[i+1][224] <== and[225][i].out;\n\t\tstate_changed[i].in[223] <== states[i+1][224];\n\t\teq[49][i] = IsEqual();\n\t\teq[49][i].in[0] <== in[i];\n\t\teq[49][i].in[1] <== 109;\n\t\tand[226][i] = AND();\n\t\tand[226][i].a <== states[i][224];\n\t\tand[226][i].b <== eq[49][i].out;\n\t\tstates[i+1][225] <== and[226][i].out;\n\t\tstate_changed[i].in[224] <== states[i+1][225];\n\t\tand[227][i] = AND();\n\t\tand[227][i].a <== states[i][199];\n\t\tand[227][i].b <== eq[0][i].out;\n\t\tstates[i+1][226] <== and[227][i].out;\n\t\tstate_changed[i].in[225] <== states[i+1][226];\n\t\tand[228][i] = AND();\n\t\tand[228][i].a <== states[i][225];\n\t\tand[228][i].b <== eq[28][i].out;\n\t\tstates[i+1][227] <== and[228][i].out;\n\t\tstate_changed[i].in[226] <== states[i+1][227];\n\t\teq[50][i] = IsEqual();\n\t\teq[50][i].in[0] <== in[i];\n\t\teq[50][i].in[1] <== 46;\n\t\tand[229][i] = AND();\n\t\tand[229][i].a <== states[i][227];\n\t\tand[229][i].b <== eq[50][i].out;\n\t\tstates[i+1][228] <== and[229][i].out;\n\t\tstate_changed[i].in[227] <== states[i+1][228];\n\t\tand[230][i] = AND();\n\t\tand[230][i].a <== states[i][228];\n\t\tand[230][i].b <== eq[37][i].out;\n\t\tstates[i+1][229] <== and[230][i].out;\n\t\tstate_changed[i].in[228] <== states[i+1][229];\n\t\tand[231][i] = AND();\n\t\tand[231][i].a <== states[i][229];\n\t\tand[231][i].b <== eq[28][i].out;\n\t\tstates[i+1][230] <== and[231][i].out;\n\t\tstate_changed[i].in[229] <== states[i+1][230];\n\t\tand[232][i] = AND();\n\t\tand[232][i].a <== states[i][230];\n\t\tand[232][i].b <== eq[49][i].out;\n\t\tstates[i+1][231] <== and[232][i].out;\n\t\tstate_changed[i].in[230] <== states[i+1][231];\n\t\tand[233][i] = AND();\n\t\tand[233][i].a <== states[i][231];\n\t\tand[233][i].b <== eq[15][i].out;\n\t\tstates[i+1][232] <== and[233][i].out;\n\t\tstate_changed[i].in[231] <== states[i+1][232];\n\t\tand[234][i] = AND();\n\t\tand[234][i].a <== states[i][232];\n\t\tand[234][i].b <== eq[37][i].out;\n\t\tstates[i+1][233] <== and[234][i].out;\n\t\tstate_changed[i].in[232] <== states[i+1][233];\n\t\tand[235][i] = AND();\n\t\tand[235][i].a <== states[i][233];\n\t\tand[235][i].b <== eq[28][i].out;\n\t\tstates[i+1][234] <== and[235][i].out;\n\t\tstate_changed[i].in[233] <== states[i+1][234];\n\t\tand[236][i] = AND();\n\t\tand[236][i].a <== states[i][234];\n\t\tand[236][i].b <== eq[22][i].out;\n\t\tstates[i+1][235] <== and[236][i].out;\n\t\tstate_changed[i].in[234] <== states[i+1][235];\n\t\tand[237][i] = AND();\n\t\tand[237][i].a <== states[i][235];\n\t\tand[237][i].b <== eq[30][i].out;\n\t\tstates[i+1][236] <== and[237][i].out;\n\t\tstate_changed[i].in[235] <== states[i+1][236];\n\t\teq[51][i] = IsEqual();\n\t\teq[51][i].in[0] <== in[i];\n\t\teq[51][i].in[1] <== 63;\n\t\tand[238][i] = AND();\n\t\tand[238][i].a <== states[i][236];\n\t\tand[238][i].b <== eq[51][i].out;\n\t\tstates[i+1][237] <== and[238][i].out;\n\t\tstate_changed[i].in[236] <== states[i+1][237];\n\t\teq[52][i] = IsEqual();\n\t\teq[52][i].in[0] <== in[i];\n\t\teq[52][i].in[1] <== 117;\n\t\tand[239][i] = AND();\n\t\tand[239][i].a <== states[i][237];\n\t\tand[239][i].b <== eq[52][i].out;\n\t\tstates[i+1][238] <== and[239][i].out;\n\t\tstate_changed[i].in[237] <== states[i+1][238];\n\t\tand[240][i] = AND();\n\t\tand[240][i].a <== states[i][238];\n\t\tand[240][i].b <== eq[31][i].out;\n\t\tstates[i+1][239] <== and[240][i].out;\n\t\tstate_changed[i].in[238] <== states[i+1][239];\n\t\tand[241][i] = AND();\n\t\tand[241][i].a <== states[i][239];\n\t\tand[241][i].b <== eq[30][i].out;\n\t\tstates[i+1][240] <== and[241][i].out;\n\t\tstate_changed[i].in[239] <== states[i+1][240];\n\t\tand[242][i] = AND();\n\t\tand[242][i].a <== states[i][240];\n\t\tand[242][i].b <== eq[38][i].out;\n\t\tstates[i+1][241] <== and[242][i].out;\n\t\tstate_changed[i].in[240] <== states[i+1][241];\n\t\teq[53][i] = IsEqual();\n\t\teq[53][i].in[0] <== in[i];\n\t\teq[53][i].in[1] <== 95;\n\t\tand[243][i] = AND();\n\t\tand[243][i].a <== states[i][241];\n\t\tand[243][i].b <== eq[53][i].out;\n\t\tstates[i+1][242] <== and[243][i].out;\n\t\tstate_changed[i].in[241] <== states[i+1][242];\n\t\tand[244][i] = AND();\n\t\tand[244][i].a <== states[i][242];\n\t\tand[244][i].b <== eq[23][i].out;\n\t\tstates[i+1][243] <== and[244][i].out;\n\t\tstate_changed[i].in[242] <== states[i+1][243];\n\t\tand[245][i] = AND();\n\t\tand[245][i].a <== states[i][243];\n\t\tand[245][i].b <== eq[22][i].out;\n\t\tstates[i+1][244] <== and[245][i].out;\n\t\tstate_changed[i].in[243] <== states[i+1][244];\n\t\tand[246][i] = AND();\n\t\tand[246][i].a <== states[i][244];\n\t\tand[246][i].b <== eq[19][i].out;\n\t\tstates[i+1][245] <== and[246][i].out;\n\t\tstate_changed[i].in[244] <== states[i+1][245];\n\t\tand[247][i] = AND();\n\t\tand[247][i].a <== states[i][245];\n\t\tand[247][i].b <== eq[34][i].out;\n\t\tstates[i+1][246] <== and[247][i].out;\n\t\tstate_changed[i].in[245] <== states[i+1][246];\n\t\tand[248][i] = AND();\n\t\tand[248][i].a <== states[i][246];\n\t\tand[248][i].b <== eq[35][i].out;\n\t\tstates[i+1][247] <== and[248][i].out;\n\t\tstate_changed[i].in[246] <== states[i+1][247];\n\t\teq[54][i] = IsEqual();\n\t\teq[54][i].in[0] <== in[i];\n\t\teq[54][i].in[1] <== 49;\n\t\teq[55][i] = IsEqual();\n\t\teq[55][i].in[0] <== in[i];\n\t\teq[55][i].in[1] <== 53;\n\t\teq[56][i] = IsEqual();\n\t\teq[56][i].in[0] <== in[i];\n\t\teq[56][i].in[1] <== 54;\n\t\teq[57][i] = IsEqual();\n\t\teq[57][i].in[0] <== in[i];\n\t\teq[57][i].in[1] <== 56;\n\t\teq[58][i] = IsEqual();\n\t\teq[58][i].in[0] <== in[i];\n\t\teq[58][i].in[1] <== 57;\n\t\tand[249][i] = AND();\n\t\tand[249][i].a <== states[i][247];\n\t\tmulti_or[2][i] = MultiOR(13);\n\t\tmulti_or[2][i].in[0] <== eq[13][i].out; // 10 = `\\n`\n\t\tmulti_or[2][i].in[1] <== eq[18][i].out; // 13 = `\\r`\n\t\tmulti_or[2][i].in[2] <== eq[21][i].out; // 48 = `0`\n\t\tmulti_or[2][i].in[3] <== eq[54][i].out;\n\t\tmulti_or[2][i].in[4] <== eq[20][i].out; // 50 = `2`\n\t\tmulti_or[2][i].in[5] <== eq[34][i].out; // 51 = `3`\n\t\tmulti_or[2][i].in[6] <== eq[42][i].out; // 52 = `4`\n\t\tmulti_or[2][i].in[7] <== eq[55][i].out; // 53 = `5`\n\t\tmulti_or[2][i].in[8] <== eq[56][i].out; // 54 = `6`\n\t\tmulti_or[2][i].in[9] <== eq[41][i].out; // 55 = `7`\n\t\tmulti_or[2][i].in[10] <== eq[57][i].out;\n\t\tmulti_or[2][i].in[11] <== eq[58][i].out;\n\t\tmulti_or[2][i].in[12] <== eq[19][i].out; // 61 = `=`\n\t\tand[249][i].b <== multi_or[2][i].out;\n\t\tand[250][i] = AND();\n\t\tand[250][i].a <== states[i][248];\n\t\tand[250][i].b <== multi_or[2][i].out;\n\t\tmulti_or[3][i] = MultiOR(2);\n\t\tmulti_or[3][i].in[0] <== and[249][i].out;\n\t\tmulti_or[3][i].in[1] <== and[250][i].out;\n\t\tstates[i+1][248] <== multi_or[3][i].out;\n\t\tstate_changed[i].in[247] <== states[i+1][248];\n\t\tand[251][i] = AND();\n\t\tand[251][i].a <== states[i][226];\n\t\tand[251][i].b <== eq[38][i].out;\n\t\tstates[i+1][249] <== and[251][i].out;\n\t\tstate_changed[i].in[248] <== states[i+1][249];\n\t\teq[59][i] = IsEqual();\n\t\teq[59][i].in[0] <== in[i];\n\t\teq[59][i].in[1] <== 38;\n\t\tand[252][i] = AND();\n\t\tand[252][i].a <== states[i][248];\n\t\tand[252][i].b <== eq[59][i].out;\n\t\tstates[i+1][250] <== and[252][i].out;\n\t\tstate_changed[i].in[249] <== states[i+1][250];\n\t\tand[253][i] = AND();\n\t\tand[253][i].a <== states[i][250];\n\t\tand[253][i].b <== eq[16][i].out;\n\t\tstates[i+1][251] <== and[253][i].out;\n\t\tstate_changed[i].in[250] <== states[i+1][251];\n\t\tand[254][i] = AND();\n\t\tand[254][i].a <== states[i][251];\n\t\tand[254][i].b <== eq[37][i].out;\n\t\tstates[i+1][252] <== and[254][i].out;\n\t\tstate_changed[i].in[251] <== states[i+1][252];\n\t\tand[255][i] = AND();\n\t\tand[255][i].a <== states[i][252];\n\t\tand[255][i].b <== eq[29][i].out;\n\t\tstates[i+1][253] <== and[255][i].out;\n\t\tstate_changed[i].in[252] <== states[i+1][253];\n\t\tand[256][i] = AND();\n\t\tand[256][i].a <== states[i][253];\n\t\tand[256][i].b <== eq[28][i].out;\n\t\tstates[i+1][254] <== and[256][i].out;\n\t\tstate_changed[i].in[253] <== states[i+1][254];\n\t\tand[257][i] = AND();\n\t\tand[257][i].a <== states[i][249];\n\t\tand[257][i].b <== eq[30][i].out;\n\t\tstates[i+1][255] <== and[257][i].out;\n\t\tstate_changed[i].in[254] <== states[i+1][255];\n\t\tand[258][i] = AND();\n\t\tand[258][i].a <== states[i][254];\n\t\tand[258][i].b <== eq[38][i].out;\n\t\tstates[i+1][256] <== and[258][i].out;\n\t\tstate_changed[i].in[255] <== states[i+1][256];\n\t\tand[259][i] = AND();\n\t\tand[259][i].a <== states[i][256];\n\t\tand[259][i].b <== eq[53][i].out;\n\t\tstates[i+1][257] <== and[259][i].out;\n\t\tstate_changed[i].in[256] <== states[i+1][257];\n\t\tand[260][i] = AND();\n\t\tand[260][i].a <== states[i][257];\n\t\tand[260][i].b <== eq[23][i].out;\n\t\tstates[i+1][258] <== and[260][i].out;\n\t\tstate_changed[i].in[257] <== states[i+1][258];\n\t\tand[261][i] = AND();\n\t\tand[261][i].a <== states[i][258];\n\t\tand[261][i].b <== eq[22][i].out;\n\t\tstates[i+1][259] <== and[261][i].out;\n\t\tstate_changed[i].in[258] <== states[i+1][259];\n\t\tand[262][i] = AND();\n\t\tand[262][i].a <== states[i][259];\n\t\tand[262][i].b <== eq[19][i].out;\n\t\tstates[i+1][260] <== and[262][i].out;\n\t\tstate_changed[i].in[259] <== states[i+1][260];\n\t\tand[263][i] = AND();\n\t\tand[263][i].a <== states[i][260];\n\t\tand[263][i].b <== eq[34][i].out;\n\t\tstates[i+1][261] <== and[263][i].out;\n\t\tstate_changed[i].in[260] <== states[i+1][261];\n\t\tand[264][i] = AND();\n\t\tand[264][i].a <== states[i][261];\n\t\tand[264][i].b <== eq[35][i].out;\n\t\tstates[i+1][262] <== and[264][i].out;\n\t\tstate_changed[i].in[261] <== states[i+1][262];\n\t\tand[265][i] = AND();\n\t\tand[265][i].a <== states[i][262];\n\t\tmulti_or[4][i] = MultiOR(10);\n\t\tmulti_or[4][i].in[0] <== eq[21][i].out; // 48 = `0`\n\t\tmulti_or[4][i].in[1] <== eq[54][i].out; // 49 = `1`\n\t\tmulti_or[4][i].in[2] <== eq[20][i].out; // 50 = `2`\n\t\tmulti_or[4][i].in[3] <== eq[34][i].out; // 51 = `3`\n\t\tmulti_or[4][i].in[4] <== eq[42][i].out; // 52 = `4`\n\t\tmulti_or[4][i].in[5] <== eq[55][i].out; // 53 = `5`\n\t\tmulti_or[4][i].in[6] <== eq[56][i].out; // 54 = `6`\n\t\tmulti_or[4][i].in[7] <== eq[41][i].out; // 55 = `7`\n\t\tmulti_or[4][i].in[8] <== eq[57][i].out; // 56 = `8`\n\t\tmulti_or[4][i].in[9] <== eq[58][i].out; // 57 = `9`\n\t\tand[265][i].b <== multi_or[4][i].out;\n\t\tand[266][i] = AND();\n\t\tand[266][i].a <== states[i][263];\n\t\tand[266][i].b <== multi_or[4][i].out;\n\t\tmulti_or[5][i] = MultiOR(2);\n\t\tmulti_or[5][i].in[0] <== and[265][i].out;\n\t\tmulti_or[5][i].in[1] <== and[266][i].out;\n\t\tstates[i+1][263] <== multi_or[5][i].out;\n\t\tstate_changed[i].in[262] <== states[i+1][263];\n\t\tand[267][i] = AND();\n\t\tand[267][i].a <== states[i][263];\n\t\tand[267][i].b <== eq[36][i].out;\n\t\tstates[i+1][264] <== and[267][i].out;\n\t\tstate_changed[i].in[263] <== states[i+1][264];\n\t\tand[268][i] = AND();\n\t\tand[268][i].a <== states[i][255];\n\t\tand[268][i].b <== eq[37][i].out;\n\t\tstates[i+1][265] <== and[268][i].out;\n\t\tstate_changed[i].in[264] <== states[i+1][265];\n\t\tand[269][i] = AND();\n\t\tand[269][i].a <== states[i][264];\n\t\tand[269][i].b <== eq[17][i].out;\n\t\tstates[i+1][266] <== and[269][i].out;\n\t\tstate_changed[i].in[265] <== states[i+1][266];\n\t\tand[270][i] = AND();\n\t\tand[270][i].a <== states[i][266];\n\t\tand[270][i].b <== eq[18][i].out;\n\t\tstates[i+1][267] <== and[270][i].out;\n\t\tstate_changed[i].in[266] <== states[i+1][267];\n\t\tand[271][i] = AND();\n\t\tand[271][i].a <== states[i][267];\n\t\tand[271][i].b <== eq[13][i].out;\n\t\tstates[i+1][268] <== and[271][i].out;\n\t\tstate_changed[i].in[267] <== states[i+1][268];\n\t\tand[272][i] = AND();\n\t\tand[272][i].a <== states[i][268];\n\t\tand[272][i].b <== eq[0][i].out;\n\t\tstates[i+1][269] <== and[272][i].out;\n\t\tstate_changed[i].in[268] <== states[i+1][269];\n\t\tand[273][i] = AND();\n\t\tand[273][i].a <== states[i][269];\n\t\tand[273][i].b <== eq[0][i].out;\n\t\tstates[i+1][270] <== and[273][i].out;\n\t\tstate_changed[i].in[269] <== states[i+1][270];\n\t\tand[274][i] = AND();\n\t\tand[274][i].a <== states[i][270];\n\t\tand[274][i].b <== eq[0][i].out;\n\t\tstates[i+1][271] <== and[274][i].out;\n\t\tstate_changed[i].in[270] <== states[i+1][271];\n\t\tand[275][i] = AND();\n\t\tand[275][i].a <== states[i][271];\n\t\tand[275][i].b <== eq[0][i].out;\n\t\tstates[i+1][272] <== and[275][i].out;\n\t\tstate_changed[i].in[271] <== states[i+1][272];\n\t\tand[276][i] = AND();\n\t\tand[276][i].a <== states[i][272];\n\t\tand[276][i].b <== eq[0][i].out;\n\t\tstates[i+1][273] <== and[276][i].out;\n\t\tstate_changed[i].in[272] <== states[i+1][273];\n\t\tand[277][i] = AND();\n\t\tand[277][i].a <== states[i][273];\n\t\tand[277][i].b <== eq[0][i].out;\n\t\tstates[i+1][274] <== and[277][i].out;\n\t\tstate_changed[i].in[273] <== states[i+1][274];\n\t\tand[278][i] = AND();\n\t\tand[278][i].a <== states[i][274];\n\t\tand[278][i].b <== eq[0][i].out;\n\t\tstates[i+1][275] <== and[278][i].out;\n\t\tstate_changed[i].in[274] <== states[i+1][275];\n\t\tand[279][i] = AND();\n\t\tand[279][i].a <== states[i][275];\n\t\tand[279][i].b <== eq[0][i].out;\n\t\tstates[i+1][276] <== and[279][i].out;\n\t\tstate_changed[i].in[275] <== states[i+1][276];\n\t\tand[280][i] = AND();\n\t\tand[280][i].a <== states[i][276];\n\t\tand[280][i].b <== eq[0][i].out;\n\t\tstates[i+1][277] <== and[280][i].out;\n\t\tstate_changed[i].in[276] <== states[i+1][277];\n\t\tand[281][i] = AND();\n\t\tand[281][i].a <== states[i][277];\n\t\tand[281][i].b <== eq[0][i].out;\n\t\tstates[i+1][278] <== and[281][i].out;\n\t\tstate_changed[i].in[277] <== states[i+1][278];\n\t\tand[282][i] = AND();\n\t\tand[282][i].a <== states[i][278];\n\t\tand[282][i].b <== eq[0][i].out;\n\t\tstates[i+1][279] <== and[282][i].out;\n\t\tstate_changed[i].in[278] <== states[i+1][279];\n\t\tand[283][i] = AND();\n\t\tand[283][i].a <== states[i][279];\n\t\tand[283][i].b <== eq[0][i].out;\n\t\tstates[i+1][280] <== and[283][i].out;\n\t\tstate_changed[i].in[279] <== states[i+1][280];\n\t\tand[284][i] = AND();\n\t\tand[284][i].a <== states[i][280];\n\t\tand[284][i].b <== eq[0][i].out;\n\t\tstates[i+1][281] <== and[284][i].out;\n\t\tstate_changed[i].in[280] <== states[i+1][281];\n\t\tand[285][i] = AND();\n\t\tand[285][i].a <== states[i][281];\n\t\tand[285][i].b <== eq[0][i].out;\n\t\tstates[i+1][282] <== and[285][i].out;\n\t\tstate_changed[i].in[281] <== states[i+1][282];\n\t\tand[286][i] = AND();\n\t\tand[286][i].a <== states[i][282];\n\t\tand[286][i].b <== eq[0][i].out;\n\t\tstates[i+1][283] <== and[286][i].out;\n\t\tstate_changed[i].in[282] <== states[i+1][283];\n\t\tand[287][i] = AND();\n\t\tand[287][i].a <== states[i][283];\n\t\tand[287][i].b <== eq[0][i].out;\n\t\tstates[i+1][284] <== and[287][i].out;\n\t\tstate_changed[i].in[283] <== states[i+1][284];\n\t\tand[288][i] = AND();\n\t\tand[288][i].a <== states[i][284];\n\t\tand[288][i].b <== eq[0][i].out;\n\t\tstates[i+1][285] <== and[288][i].out;\n\t\tstate_changed[i].in[284] <== states[i+1][285];\n\t\tand[289][i] = AND();\n\t\tand[289][i].a <== states[i][285];\n\t\tand[289][i].b <== eq[0][i].out;\n\t\tstates[i+1][286] <== and[289][i].out;\n\t\tstate_changed[i].in[285] <== states[i+1][286];\n\t\tand[290][i] = AND();\n\t\tand[290][i].a <== states[i][286];\n\t\tand[290][i].b <== eq[0][i].out;\n\t\tstates[i+1][287] <== and[290][i].out;\n\t\tstate_changed[i].in[286] <== states[i+1][287];\n\t\tand[291][i] = AND();\n\t\tand[291][i].a <== states[i][287];\n\t\tand[291][i].b <== eq[19][i].out;\n\t\tstates[i+1][288] <== and[291][i].out;\n\t\tstate_changed[i].in[287] <== states[i+1][288];\n\t\tand[292][i] = AND();\n\t\tand[292][i].a <== states[i][288];\n\t\tand[292][i].b <== eq[20][i].out;\n\t\tstates[i+1][289] <== and[292][i].out;\n\t\tstate_changed[i].in[288] <== states[i+1][289];\n\t\tand[293][i] = AND();\n\t\tand[293][i].a <== states[i][265];\n\t\tand[293][i].b <== eq[23][i].out;\n\t\tstates[i+1][290] <== and[293][i].out;\n\t\tstate_changed[i].in[289] <== states[i+1][290];\n\t\tand[294][i] = AND();\n\t\tand[294][i].a <== states[i][289];\n\t\tand[294][i].b <== eq[21][i].out;\n\t\tstates[i+1][291] <== and[294][i].out;\n\t\tstate_changed[i].in[290] <== states[i+1][291];\n\t\tand[295][i] = AND();\n\t\tand[295][i].a <== states[i][291];\n\t\tand[295][i].b <== eq[18][i].out;\n\t\tstates[i+1][292] <== and[295][i].out;\n\t\tstate_changed[i].in[291] <== states[i+1][292];\n\t\tand[296][i] = AND();\n\t\tand[296][i].a <== states[i][292];\n\t\tand[296][i].b <== eq[13][i].out;\n\t\tstates[i+1][293] <== and[296][i].out;\n\t\tstate_changed[i].in[292] <== states[i+1][293];\n\t\tand[297][i] = AND();\n\t\tand[297][i].a <== states[i][293];\n\t\tand[297][i].b <== eq[0][i].out;\n\t\tstates[i+1][294] <== and[297][i].out;\n\t\tstate_changed[i].in[293] <== states[i+1][294];\n\t\tand[298][i] = AND();\n\t\tand[298][i].a <== states[i][294];\n\t\tand[298][i].b <== eq[0][i].out;\n\t\tstates[i+1][295] <== and[298][i].out;\n\t\tstate_changed[i].in[294] <== states[i+1][295];\n\t\tand[299][i] = AND();\n\t\tand[299][i].a <== states[i][295];\n\t\tand[299][i].b <== eq[0][i].out;\n\t\tstates[i+1][296] <== and[299][i].out;\n\t\tstate_changed[i].in[295] <== states[i+1][296];\n\t\tand[300][i] = AND();\n\t\tand[300][i].a <== states[i][296];\n\t\tand[300][i].b <== eq[0][i].out;\n\t\tstates[i+1][297] <== and[300][i].out;\n\t\tstate_changed[i].in[296] <== states[i+1][297];\n\t\tand[301][i] = AND();\n\t\tand[301][i].a <== states[i][297];\n\t\tand[301][i].b <== eq[0][i].out;\n\t\tstates[i+1][298] <== and[301][i].out;\n\t\tstate_changed[i].in[297] <== states[i+1][298];\n\t\tand[302][i] = AND();\n\t\tand[302][i].a <== states[i][298];\n\t\tand[302][i].b <== eq[0][i].out;\n\t\tstates[i+1][299] <== and[302][i].out;\n\t\tstate_changed[i].in[298] <== states[i+1][299];\n\t\tand[303][i] = AND();\n\t\tand[303][i].a <== states[i][299];\n\t\tand[303][i].b <== eq[0][i].out;\n\t\tstates[i+1][300] <== and[303][i].out;\n\t\tstate_changed[i].in[299] <== states[i+1][300];\n\t\tand[304][i] = AND();\n\t\tand[304][i].a <== states[i][300];\n\t\tand[304][i].b <== eq[0][i].out;\n\t\tstates[i+1][301] <== and[304][i].out;\n\t\tstate_changed[i].in[300] <== states[i+1][301];\n\t\tand[305][i] = AND();\n\t\tand[305][i].a <== states[i][301];\n\t\tand[305][i].b <== eq[0][i].out;\n\t\tstates[i+1][302] <== and[305][i].out;\n\t\tstate_changed[i].in[301] <== states[i+1][302];\n\t\tand[306][i] = AND();\n\t\tand[306][i].a <== states[i][302];\n\t\tand[306][i].b <== eq[0][i].out;\n\t\tstates[i+1][303] <== and[306][i].out;\n\t\tstate_changed[i].in[302] <== states[i+1][303];\n\t\tand[307][i] = AND();\n\t\tand[307][i].a <== states[i][303];\n\t\tand[307][i].b <== eq[0][i].out;\n\t\tstates[i+1][304] <== and[307][i].out;\n\t\tstate_changed[i].in[303] <== states[i+1][304];\n\t\tand[308][i] = AND();\n\t\tand[308][i].a <== states[i][304];\n\t\tand[308][i].b <== eq[0][i].out;\n\t\tstates[i+1][305] <== and[308][i].out;\n\t\tstate_changed[i].in[304] <== states[i+1][305];\n\t\tand[309][i] = AND();\n\t\tand[309][i].a <== states[i][305];\n\t\tand[309][i].b <== eq[0][i].out;\n\t\tstates[i+1][306] <== and[309][i].out;\n\t\tstate_changed[i].in[305] <== states[i+1][306];\n\t\tand[310][i] = AND();\n\t\tand[310][i].a <== states[i][306];\n\t\tand[310][i].b <== eq[0][i].out;\n\t\tstates[i+1][307] <== and[310][i].out;\n\t\tstate_changed[i].in[306] <== states[i+1][307];\n\t\tand[311][i] = AND();\n\t\tand[311][i].a <== states[i][307];\n\t\tand[311][i].b <== eq[0][i].out;\n\t\tstates[i+1][308] <== and[311][i].out;\n\t\tstate_changed[i].in[307] <== states[i+1][308];\n\t\tand[312][i] = AND();\n\t\tand[312][i].a <== states[i][308];\n\t\tand[312][i].b <== eq[0][i].out;\n\t\tstates[i+1][309] <== and[312][i].out;\n\t\tstate_changed[i].in[308] <== states[i+1][309];\n\t\tand[313][i] = AND();\n\t\tand[313][i].a <== states[i][309];\n\t\tand[313][i].b <== eq[0][i].out;\n\t\tstates[i+1][310] <== and[313][i].out;\n\t\tstate_changed[i].in[309] <== states[i+1][310];\n\t\tand[314][i] = AND();\n\t\tand[314][i].a <== states[i][310];\n\t\tand[314][i].b <== eq[0][i].out;\n\t\tstates[i+1][311] <== and[314][i].out;\n\t\tstate_changed[i].in[310] <== states[i+1][311];\n\t\tand[315][i] = AND();\n\t\tand[315][i].a <== states[i][311];\n\t\tand[315][i].b <== eq[0][i].out;\n\t\tstates[i+1][312] <== and[315][i].out;\n\t\tstate_changed[i].in[311] <== states[i+1][312];\n\t\tand[316][i] = AND();\n\t\tand[316][i].a <== states[i][312];\n\t\tand[316][i].b <== eq[0][i].out;\n\t\tstates[i+1][313] <== and[316][i].out;\n\t\tstate_changed[i].in[312] <== states[i+1][313];\n\t\tand[317][i] = AND();\n\t\tand[317][i].a <== states[i][290];\n\t\tand[317][i].b <== eq[48][i].out;\n\t\tstates[i+1][314] <== and[317][i].out;\n\t\tstate_changed[i].in[313] <== states[i+1][314];\n\t\tand[318][i] = AND();\n\t\tand[318][i].a <== states[i][314];\n\t\tand[318][i].b <== eq[23][i].out;\n\t\tstates[i+1][315] <== and[318][i].out;\n\t\tstate_changed[i].in[314] <== states[i+1][315];\n\t\tand[319][i] = AND();\n\t\tand[319][i].a <== states[i][315];\n\t\tand[319][i].b <== eq[30][i].out;\n\t\tstates[i+1][316] <== and[319][i].out;\n\t\tstate_changed[i].in[315] <== states[i+1][316];\n\t\tand[320][i] = AND();\n\t\tand[320][i].a <== states[i][316];\n\t\tand[320][i].b <== eq[27][i].out;\n\t\tstates[i+1][317] <== and[320][i].out;\n\t\tstate_changed[i].in[316] <== states[i+1][317];\n\t\tand[321][i] = AND();\n\t\tand[321][i].a <== states[i][317];\n\t\tand[321][i].b <== eq[29][i].out;\n\t\tstates[i+1][318] <== and[321][i].out;\n\t\tstate_changed[i].in[317] <== states[i+1][318];\n\t\tand[322][i] = AND();\n\t\tand[322][i].a <== states[i][318];\n\t\tand[322][i].b <== eq[0][i].out;\n\t\tstates[i+1][319] <== and[322][i].out;\n\t\tstate_changed[i].in[318] <== states[i+1][319];\n\t\tand[323][i] = AND();\n\t\tand[323][i].a <== states[i][319];\n\t\tand[323][i].b <== eq[27][i].out;\n\t\tstates[i+1][320] <== and[323][i].out;\n\t\tstate_changed[i].in[319] <== states[i+1][320];\n\t\tand[324][i] = AND();\n\t\tand[324][i].a <== states[i][320];\n\t\tand[324][i].b <== eq[16][i].out;\n\t\tstates[i+1][321] <== and[324][i].out;\n\t\tstate_changed[i].in[320] <== states[i+1][321];\n\t\tand[325][i] = AND();\n\t\tand[325][i].a <== states[i][321];\n\t\tand[325][i].b <== eq[49][i].out;\n\t\tstates[i+1][322] <== and[325][i].out;\n\t\tstate_changed[i].in[321] <== states[i+1][322];\n\t\tand[326][i] = AND();\n\t\tand[326][i].a <== states[i][322];\n\t\tand[326][i].b <== eq[30][i].out;\n\t\tstates[i+1][323] <== and[326][i].out;\n\t\tstate_changed[i].in[322] <== states[i+1][323];\n\t\tand[327][i] = AND();\n\t\tand[327][i].a <== states[i][323];\n\t\tand[327][i].b <== eq[0][i].out;\n\t\tstates[i+1][324] <== and[327][i].out;\n\t\tstate_changed[i].in[323] <== states[i+1][324];\n\t\tand[328][i] = AND();\n\t\tand[328][i].a <== states[i][2];\n\t\tand[328][i].b <== eq[18][i].out;\n\t\tstates[i+1][325] <== and[328][i].out;\n\t\tstate_changed[i].in[324] <== states[i+1][325];\n\t\tand[329][i] = AND();\n\t\tand[329][i].a <== states[i][324];\n\t\tand[329][i].b <== eq[26][i].out;\n\t\tstates[i+1][326] <== and[329][i].out;\n\t\tstate_changed[i].in[325] <== states[i+1][326];\n\t\tand[330][i] = AND();\n\t\tand[330][i].a <== states[i][326];\n\t\tand[330][i].b <== eq[26][i].out;\n\t\tstates[i+1][327] <== and[330][i].out;\n\t\tstate_changed[i].in[326] <== states[i+1][327];\n\t\tand[331][i] = AND();\n\t\tand[331][i].a <== states[i][327];\n\t\tand[331][i].b <== eq[17][i].out;\n\t\tstates[i+1][328] <== and[331][i].out;\n\t\tstate_changed[i].in[327] <== states[i+1][328];\n\t\tand[332][i] = AND();\n\t\tand[332][i].a <== states[i][328];\n\t\tand[332][i].b <== eq[18][i].out;\n\t\tstates[i+1][329] <== and[332][i].out;\n\t\tstate_changed[i].in[328] <== states[i+1][329];\n\t\tand[333][i] = AND();\n\t\tand[333][i].a <== states[i][329];\n\t\tand[333][i].b <== eq[13][i].out;\n\t\tstates[i+1][330] <== and[333][i].out;\n\t\tstate_changed[i].in[329] <== states[i+1][330];\n\t\tstates[i+1][0] <== 1 - state_changed[i].out;\n\t}\n\n\tcomponent final_state_result = MultiOR(num_bytes+1);\n\tfor (var i = 0; i <= num_bytes; i++) {\n\t\tfinal_state_result.in[i] <== states[i][98];\n\t}\n\tout <== final_state_result.out;\n\n\tsignal is_consecutive[msg_bytes+1][2];\n\tis_consecutive[msg_bytes][1] <== 1;\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][98] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];\n\t\tis_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];\n\t}\n\tsignal is_substr0[msg_bytes][3];\n\tsignal is_reveal0[msg_bytes];\n\tsignal output reveal0[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr0[i][0] <== 0;\n\t\tis_substr0[i][1] <== is_substr0[i][0] + states[i+1][247] * states[i+2][248];\n\t\tis_substr0[i][2] <== is_substr0[i][1] + states[i+1][248] * states[i+2][248];\n\t\tis_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];\n\t\treveal0[i] <== in[i+1] * is_reveal0[i];\n\t}\n\tsignal is_substr1[msg_bytes][3];\n\tsignal is_reveal1[msg_bytes];\n\tsignal output reveal1[msg_bytes];\n\tfor (var i = 0; i < msg_bytes; i++) {\n\t\tis_substr1[i][0] <== 0;\n\t\tis_substr1[i][1] <== is_substr1[i][0] + states[i+1][262] * states[i+2][263];\n\t\tis_substr1[i][2] <== is_substr1[i][1] + states[i+1][263] * states[i+2][263];\n\t\tis_reveal1[i] <== is_substr1[i][2] * is_consecutive[i][1];\n\t\treveal1[i] <== in[i+1] * is_reveal1[i];\n\t}\n}"
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_send_id.json",
    "content": "{\n  \"parts\": [\n    {\n      \"is_public\": false,\n      \"regex_def\": \"<!-- recipient name -->\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"                   =20\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"                    href=3D\\\"https://venmo.com/code\\\\?user_id=3D\"\n    },\n    {\n      \"is_public\": true,\n      \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9|\\r|\\n|=)+\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"&actor_id=3D\"\n    },\n    {\n      \"is_public\": true,\n      \"regex_def\": \"(0|1|2|3|4|5|6|7|8|9)+\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"\\\">\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"                   =20\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"                    [^\\r\\n]+\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"                </a>\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"               =20\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"            </div>\\r\\n\"\n    },\n    {\n      \"is_public\": false,\n      \"regex_def\": \"            <!-- note -->\\r\\n\"\n    }\n  ]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/regexes/venmo_timestamp.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/zk-regex-circom/circuits/regex_helpers.circom\";\n\n// `d=venmo.com; t=(0|1|2|3|4|5|6|7|8|9)+;\\r\\n` OR `;\\r\\nd=venmo.com; t=(0|1|2|3|4|5|6|7|8|9)+`\ntemplate VenmoTimestampRegex (msg_bytes) {\n    signal input msg[msg_bytes];\n    signal output out;\n\n    var num_bytes = msg_bytes;\n    signal in[num_bytes];\n    for (var i = 0; i < msg_bytes; i++) {\n        in[i] <== msg[i];\n    }\n\n    component eq[14][num_bytes];\n    component lt[2][num_bytes];\n    component and[21][num_bytes];\n    component multi_or[1][num_bytes];\n    signal states[num_bytes+1][20];\n\n    for (var i = 0; i < num_bytes; i++) {\n        states[i][0] <== 1;\n    }\n    for (var i = 1; i < 20; i++) {\n        states[0][i] <== 0;\n    }\n\n    for (var i = 0; i < num_bytes; i++) {\n        // 47-58 = [0-9]\n        lt[0][i] = LessThan(8);\n        lt[0][i].in[0] <== 47;\n        lt[0][i].in[1] <== in[i];\n        lt[1][i] = LessThan(8);\n        lt[1][i].in[0] <== in[i];\n        lt[1][i].in[1] <== 58;\n        and[0][i] = AND();\n        and[0][i].a <== lt[0][i].out;\n        and[0][i].b <== lt[1][i].out;\n        and[1][i] = AND();\n        and[1][i].a <== states[i][1];\n        and[1][i].b <== and[0][i].out;\n        and[2][i] = AND();\n        and[2][i].a <== states[i][19];\n        and[2][i].b <== and[0][i].out;\n        multi_or[0][i] = MultiOR(2);\n        multi_or[0][i].in[0] <== and[1][i].out;\n        multi_or[0][i].in[1] <== and[2][i].out;\n        states[i+1][1] <== multi_or[0][i].out;\n        // 59 = ';'\n        eq[0][i] = IsEqual();\n        eq[0][i].in[0] <== in[i];\n        eq[0][i].in[1] <== 59;\n        and[3][i] = AND();\n        and[3][i].a <== states[i][1];\n        and[3][i].b <== eq[0][i].out;\n        states[i+1][2] <== and[3][i].out;\n        // 13 = '\\r'\n        eq[1][i] = IsEqual();\n        eq[1][i].in[0] <== in[i];\n        eq[1][i].in[1] <== 13;\n        and[4][i] = AND();\n        and[4][i].a <== states[i][2];\n        and[4][i].b <== eq[1][i].out;\n        states[i+1][3] <== and[4][i].out;\n        // 10 = '\\n'\n        eq[2][i] = IsEqual();\n        eq[2][i].in[0] <== in[i];\n        eq[2][i].in[1] <== 10;\n        and[5][i] = AND();\n        and[5][i].a <== states[i][3];\n        and[5][i].b <== eq[2][i].out;\n        states[i+1][4] <== and[5][i].out;\n        // 100 = 'd'\n        eq[3][i] = IsEqual();\n        eq[3][i].in[0] <== in[i];\n        eq[3][i].in[1] <== 100;\n        and[6][i] = AND();\n        and[6][i].a <== states[i][0];\n        and[6][i].b <== eq[3][i].out;\n        states[i+1][5] <== and[6][i].out;\n        // 61 = '='\n        eq[4][i] = IsEqual();\n        eq[4][i].in[0] <== in[i];\n        eq[4][i].in[1] <== 61;\n        and[7][i] = AND();\n        and[7][i].a <== states[i][5];\n        and[7][i].b <== eq[4][i].out;\n        states[i+1][6] <== and[7][i].out;\n        // 118 = 'v'\n        eq[5][i] = IsEqual();\n        eq[5][i].in[0] <== in[i];\n        eq[5][i].in[1] <== 118;\n        and[8][i] = AND();\n        and[8][i].a <== states[i][6];\n        and[8][i].b <== eq[5][i].out;\n        states[i+1][7] <== and[8][i].out;\n        // 101 = 'e'\n        eq[6][i] = IsEqual();\n        eq[6][i].in[0] <== in[i];\n        eq[6][i].in[1] <== 101;\n        and[9][i] = AND();\n        and[9][i].a <== states[i][7];\n        and[9][i].b <== eq[6][i].out;\n        states[i+1][8] <== and[9][i].out;\n        // 110 = 'n'\n        eq[7][i] = IsEqual();\n        eq[7][i].in[0] <== in[i];\n        eq[7][i].in[1] <== 110;\n        and[10][i] = AND();\n        and[10][i].a <== states[i][8];\n        and[10][i].b <== eq[7][i].out;\n        states[i+1][9] <== and[10][i].out;\n        // 109 = 'm'\n        eq[8][i] = IsEqual();\n        eq[8][i].in[0] <== in[i];\n        eq[8][i].in[1] <== 109;\n        and[11][i] = AND();\n        and[11][i].a <== states[i][9];\n        and[11][i].b <== eq[8][i].out;\n        states[i+1][10] <== and[11][i].out;\n        // 111 = 'o'\n        eq[9][i] = IsEqual();\n        eq[9][i].in[0] <== in[i];\n        eq[9][i].in[1] <== 111;\n        and[12][i] = AND();\n        and[12][i].a <== states[i][10];\n        and[12][i].b <== eq[9][i].out;\n        states[i+1][11] <== and[12][i].out;\n        // 46 = '.'\n        eq[10][i] = IsEqual();\n        eq[10][i].in[0] <== in[i];\n        eq[10][i].in[1] <== 46;\n        and[13][i] = AND();\n        and[13][i].a <== states[i][11];\n        and[13][i].b <== eq[10][i].out;\n        states[i+1][12] <== and[13][i].out;\n        // 99 = 'c'\n        eq[11][i] = IsEqual();\n        eq[11][i].in[0] <== in[i];\n        eq[11][i].in[1] <== 99;\n        and[14][i] = AND();\n        and[14][i].a <== states[i][12];\n        and[14][i].b <== eq[11][i].out;\n        states[i+1][13] <== and[14][i].out;\n        and[15][i] = AND();\n        and[15][i].a <== states[i][13];\n        and[15][i].b <== eq[9][i].out; // 111 = 'o'\n        states[i+1][14] <== and[15][i].out;\n        and[16][i] = AND();\n        and[16][i].a <== states[i][14];\n        and[16][i].b <== eq[8][i].out; // 109 = 'm'\n        states[i+1][15] <== and[16][i].out;\n        and[17][i] = AND();\n        and[17][i].a <== states[i][15];\n        and[17][i].b <== eq[0][i].out; // 59 = ';'\n        states[i+1][16] <== and[17][i].out;\n        // 32 = space\n        eq[12][i] = IsEqual();\n        eq[12][i].in[0] <== in[i];\n        eq[12][i].in[1] <== 32;\n        and[18][i] = AND();\n        and[18][i].a <== states[i][16];\n        and[18][i].b <== eq[12][i].out;\n        states[i+1][17] <== and[18][i].out;\n        // 116 = 't'\n        eq[13][i] = IsEqual();\n        eq[13][i].in[0] <== in[i];\n        eq[13][i].in[1] <== 116;\n        and[19][i] = AND();\n        and[19][i].a <== states[i][17];\n        and[19][i].b <== eq[13][i].out;\n        states[i+1][18] <== and[19][i].out;\n        and[20][i] = AND();\n        and[20][i].a <== states[i][18];\n        and[20][i].b <== eq[4][i].out; // 61 = '='\n        states[i+1][19] <== and[20][i].out;\n    }\n\n    signal final_state_sum[num_bytes+1];\n    final_state_sum[0] <== states[0][19];\n    for (var i = 1; i <= num_bytes; i++) {\n        final_state_sum[i] <== final_state_sum[i-1] + states[i][19];\n    }\n    out <== final_state_sum[num_bytes];\n\n    signal output reveal[num_bytes];\n    for (var i = 0; i < num_bytes; i++) {\n        reveal[i] <== in[i] * states[i+1][1];\n    }\n}\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/mocks/test_venmo_actor_id.circom",
    "content": "include \"../../regexes/venmo_actor_id.circom\";\n\ncomponent main = VenmoActorIdRegex(430);"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/mocks/test_venmo_p2p_check.circom",
    "content": "include \"../../regexes/venmo_p2p_check.circom\";\n\ncomponent main = VenmoP2PCheckRegex(150);"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/mocks/test_venmo_send_amount.circom",
    "content": "include \"../../regexes/venmo_send_amount.circom\";\n\ncomponent main = VenmoSendAmountRegex(42);"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/mocks/test_venmo_send_id.circom",
    "content": "include \"../../regexes/venmo_send_id.circom\";\n\ncomponent main = VenmoSendIdRegex(430);"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/mocks/test_venmo_timestamp.circom",
    "content": "include \"../../regexes/venmo_timestamp.circom\";\n\ncomponent main = VenmoTimestampRegex(40);"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/regexes/venmo_actor_id.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Venmo actor id\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks/test_venmo_actor_id.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_venmo_actor_id\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"EEEEEEEEEEE<!-- recipient name -->\\r\\n                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n                   =20\\r\\n                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n45553&actor_id=3D\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"1192345678912345678\"))\n            .concat(textToAsciiArray(\"\\\">\\r\\n                   =20\\r\\n                    La Fleur Salon\\r\\n                </a>\\r\\n               =20\\r\\n            </div>\\r\\n            <!-- note -->\\r\\n            <div>\\r\\n               <p>\").fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- npte -->\\r\\n\" // Update to `p`\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/regexes/venmo_p2p_check.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Venmo p2p check\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks//test_venmo_p2p_check.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_venmo_p2p_check\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEE<br/><br/>As an obl=\\r\\n\"\n                + \"igor of this payment, PayPal, Inc. (855-812-4430) is liable for non-deliver=\\r\\n\"\n                + \"y or delayed delivery of your funds.<br/>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEE<br/><br/>As an obl=\\r\\n\"\n                + \"igor of this payment, PayPal, Inc. (855-812-4430) is liable for non-deliver=\\r\\n\"\n                + \"y or delayed delivery of your funds.<br/>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEE<br/><br/>As an obl=\\r\\n\"\n                + \"igor of this payment, PayPal, Inc. (855-812-4320) is liable for non-deliver=\\r\\n\"\n                + \"y or ddlayed delivery of your funds.<br/>\" // update to d\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/regexes/venmo_send_amount.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Venmo send amount\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks//test_venmo_send_amount.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_venmo_send_amount\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nsubject:You paid Eeeee Eeeee $2,500.00\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nsubject:You paid Eeeee Eeeee $2,500.00\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nsubject:You paid Eeeee Eeeee $2,500.00\\r\\n\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"\\r\\nsubject:You paid Eeeee Eeeee $\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"2,500.00\"))\n            .concat(Array(textToAsciiArray(\"\\r\\n\").length).fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"\\r\\nsubject:Eeeee Eeeee paid you $2,500.00\\r\\n\")   // Use receive subject\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/regexes/venmo_send_id.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Venmo send id\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks//test_venmo_send_id.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_venmo_send_id\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal first regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"EEEEEEEEEEE<!-- recipient name -->\\r\\n                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n                   =20\\r\\n                    href=3D\\\"https://venmo.com/code?user_id=3D\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"27443255215553=\\r\\n45553\"))\n            .concat(textToAsciiArray(\"&actor_id=3D1192345678912345678\\\">\\r\\n                   =20\\r\\n                    La Fleur Salon\\r\\n                </a>\\r\\n               =20\\r\\n            </div>\\r\\n            <!-- note -->\\r\\n            <div>\\r\\n               <p>\").fill(\"0\"));\n        const result = witness.slice(2, input.msg.length + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should reveal second regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&actor_id=3D1192345678912345678\\\">\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"EEEEEEEEEEE<!-- recipient name -->\\r\\n                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n                   =20\\r\\n                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n45553&actor_id=3D\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"1192345678912345678\"))\n            .concat(textToAsciiArray(\"\\\">\\r\\n                   =20\\r\\n                    La Fleur Salon\\r\\n                </a>\\r\\n               =20\\r\\n            </div>\\r\\n            <!-- note -->\\r\\n            <div>\\r\\n               <p>\").fill(\"0\"));\n        const result = witness.slice(input.msg.length + 2, input.msg.length * 2 + 2);\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\n                \"EEEEEEEEEEE<!-- recipient name -->\\r\\n\"\n                + \"                <a style=3D\\\"color:#0074DE; text-decoration:none\\\"\\r\\n\"\n                + \"                   =20\\r\\n\"\n                + \"                    href=3D\\\"https://venmo.com/code?user_id=3D27443255215553=\\r\\n\"\n                + \"45553&pctor_id=3D1192345678912345678\\\">\\r\\n\" // update to p\n                + \"                   =20\\r\\n\"\n                + \"                    La Fleur Salon\\r\\n\"\n                + \"                </a>\\r\\n\"\n                + \"               =20\\r\\n\"\n                + \"            </div>\\r\\n\"\n                + \"            <!-- note -->\\r\\n\"\n                + \"            <div>\\r\\n\"\n                + \"               <p>\"\n            )\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/regexes/venmo_timestamp.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\n\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Venmo timestamp\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../mocks//test_venmo_timestamp.circom\"),\n            {\n                include: path.join(__dirname, \"../../node_modules\"),\n                output: path.join(__dirname, \"../../build/test_venmo_timestamp\"),\n                recompile: true,\n                verbose: true,\n            }\n        );\n    });\n\n\n    function textToAsciiArray(text: string): string[] {\n        return Array.from(text).map(char => char.charCodeAt(0).toString());\n    }\n\n    it(\"Should generate witnesses\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; d=venmo.com; t=1698260687; h=Fro\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should match regex once\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; d=venmo.com; t=1698260687; h=Fro\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(1)));\n    });\n\n    it(\"Should reveal regex correctly\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; d=venmo.com; t=1698260687; h=Fro\")\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n        const expected = Array(textToAsciiArray(\"xftkly; d=venmo.com; t=\").length).fill(\"0\")\n            .concat(textToAsciiArray(\"1698260687\"))\n            .concat(Array(textToAsciiArray(\"; h=Fro\").length).fill(\"0\"));\n        const result = witness.slice(2, 40 + 2);\n\n        assert.equal(JSON.stringify(result), JSON.stringify(expected), true);\n    });\n\n    it(\"Should fail to match regex\", async () => {\n        const input = {\n            \"msg\": textToAsciiArray(\"xftkly; D=venmo.com; t=1698260687; h=Fro\")     // D instead of d\n        };\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[1]), Fr.e(0)));\n    });\n});"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/venmo_registration.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, chunkedBytesToBigInt } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\nimport ganache from \"ganache\";\n\nconst { createCode, generateABI } = poseidonContract;\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\ndescribe(\"Venmo Registration\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let poseidon;\n    let mimcSponge;\n    let account;\n    let poseidonContract;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../venmo_registration.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/venmo_registration\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_registration.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_registration.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_registration.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 2 to 5 represent the packed from email (15 \\ 7)\n        const packed_from_email = witness.slice(2, 5);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 15);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"Should return the correct hashed actor id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n        const C6 = new ethers.ContractFactory(\n            generateABI(3),\n            createCode(3),\n            account\n        );\n\n        poseidonContract = await C6.deploy();\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_registration.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed actor_id\n        // Indexes 6 represents the hashed actor_id\n        const hashed_actor_id = witness[5];\n\n        // Get expected packed offramper_id\n        // xxxx&actor_id=3Dxxxxxxxxxxxxxxxxxxx\">\n        const actor_id_selector = Buffer.from('&actor_id=3D');\n        const venmo_actor_id_start_idx = (Buffer.from(input['in_body_padded']).indexOf(actor_id_selector) + actor_id_selector.length);\n        const venmo_actor_id_end_idx = (Buffer.from(input['in_body_padded']).indexOf(Buffer.from('\"', 'ascii'), venmo_actor_id_start_idx));\n        const actor_id_array = input['in_body_padded'].slice(venmo_actor_id_start_idx, venmo_actor_id_end_idx);\n\n        // Chunk bytes into 7 and pack\n        const chunkedArrays = chunkArray(actor_id_array, 7, 21);\n\n        const packed_actor_id = chunkedArrays.map((arr, i) => bytesToPacked(arr));\n        const expected_hash = poseidon(packed_actor_id);\n        const expected_hash_contract = await poseidonContract[\"poseidon(uint256[3])\"](packed_actor_id);\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_actor_id)), JSON.stringify(expected_hash), true);\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_actor_id)), JSON.stringify(poseidon.F.e(expected_hash_contract.toString())), true);\n    });\n\n    it(\"should fail to generate witness if receive email is provided\", async () => {\n        // Generate inputs for this test using `yarn gen-input:registration:receive`\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_registration_receive.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        try {\n            await cir.calculateWitness(input, true);\n            assert.fail('Expected calculateWitness to throw an error');\n        } catch (error) {\n            assert.instanceOf(error, Error);\n            assert.equal(error.message, 'Error: Assert Failed.\\nError in template VenmoRegistration_243 line: 65\\n');\n        }\n    });\n});\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/test/venmo_send.spec.ts",
    "content": "import chai from \"chai\";\nimport path from \"path\";\nimport { F1Field, Scalar } from \"ffjavascript\";\nimport { buildPoseidonOpt as buildPoseidon, buildMimcSponge, poseidonContract } from \"circomlibjs\";\nimport { chunkArray, bytesToPacked, packNullifier, hashSignatureGenRand, chunkedBytesToBigInt } from \"../../utils/test-utils\";\nimport { bigIntToChunkedBytes } from \"@zk-email/helpers/dist/binaryFormat\";\nimport { ethers } from \"ethers\";\nimport ganache from \"ganache\";\nimport { partialSha } from \"@zk-email/helpers/src/shaHash\";\n\nconst { createCode, generateABI } = poseidonContract;\nexport const p = Scalar.fromString(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\nconst Fr = new F1Field(p);\n\nconst assert = chai.assert;\n\nconst wasm_tester = require(\"circom_tester\").wasm;\n\nconst fs = require('fs');\n\n// Constants used in the circuit\nconst N = 121;\nconst K = 17;\n\ndescribe(\"Venmo send WASM tester\", function () {\n    jest.setTimeout(10 * 60 * 1000); // 10 minutes\n\n    let cir;\n    let poseidon;\n    let mimcSponge;\n    let account;\n    let poseidonContract;\n\n    beforeAll(async () => {\n        cir = await wasm_tester(\n            path.join(__dirname, \"../venmo_send.circom\"),\n            {\n                include: path.join(__dirname, \"../node_modules\"),\n                output: path.join(__dirname, \"../build/venmo_send\"),\n                recompile: false, // setting this to true will recompile the circuit (~3-5min)\n                verbose: true,\n            }\n        );\n\n        poseidon = await buildPoseidon();\n        mimcSponge = await buildMimcSponge();\n    });\n\n    it(\"Should generate witnesses\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        assert(Fr.eq(Fr.e(witness[0]), Fr.e(1)));\n    });\n\n    it(\"Should return the correct modulus hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus hash\n        const modulus_hash = witness[1];\n\n        // Calculate the expected poseidon hash with pubkey chunked to 9*242 like in circuit\n        const poseidon = await buildPoseidon();\n        const modulus = chunkedBytesToBigInt(input[\"modulus\"], 121);\n        const pubkeyChunked = bigIntToChunkedBytes(modulus, 242, 9);\n        const expected_hash = poseidon(pubkeyChunked);\n\n        assert.equal(JSON.stringify(mimcSponge.F.e(modulus_hash)), JSON.stringify(expected_hash), true);\n    });\n\n    it(\"Should return the correct packed from email\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed from email\n        // Indexes 2 to 5 represent the packed from email (15 \\ 7)\n        const packed_from_email = witness.slice(2, 5);\n\n        // Get expected packed from email\n        const regex_start = Number(input[\"email_from_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"62\"); // Look for `>` to end the from which is 62 in ascii. e.g. `from:<venmo@venmo.com>`\n        const from_email_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(from_email_array, 7, 15);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed email is the same\n            assert.equal(expectedValue, packed_from_email[i], true);\n        });\n    });\n\n    it(\"Should return the correct packed amount\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed amount\n        // Indexes 5 to 7 represent the packed amount (8 \\ 7)\n        const packed_amount = witness.slice(5, 7);\n\n        // Get expected packed amount\n        const regex_start = Number(input[\"venmo_amount_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"13\"); // Look for `\\r` to end the amount which is 13 in ascii\n        const amount_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(amount_array, 7, 10);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed amount is the same\n            assert.equal(expectedValue, packed_amount[i], true);\n        });\n    });\n\n    it(\"Should return the correct packed timestamp\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned packed timestamp\n        // Indexes 7 to 9 represent the packed timestamp; (10 \\ 7)\n        const packed_timestamp = witness.slice(7, 9);\n\n        // Get expected packed timestamp\n        const regex_start = Number(input[\"email_timestamp_idx\"]);\n        const regex_start_sub_array = input[\"in_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"59\"); // Look for `;` to end the timestamp which is 59 in ascii\n        const timestamp_array = regex_start_sub_array.slice(0, regex_end);\n\n        // Chunk bytes into 7 and pack\n        let chunkedArrays = chunkArray(timestamp_array, 7, 10);\n\n        chunkedArrays.map((arr, i) => {\n            // Pack each chunk\n            let expectedValue = bytesToPacked(arr);\n\n            // Check packed timestamp is the same\n            assert.equal(expectedValue, packed_timestamp[i], true);\n        });\n    });\n\n    it(\"Should return the correct hashed offramper id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n        const C6 = new ethers.ContractFactory(\n            generateABI(3),\n            createCode(3),\n            account\n        );\n\n        poseidonContract = await C6.deploy();\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed offramper_id\n        // Index 9 represents the hashed offramper_id\n        const hashed_offramper_id = witness[9];\n\n        // Get expected packed offramper_id\n        const regex_start = Number(input[\"venmo_payee_id_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"38\"); // Look for `&` to end the offramper_id which is 38 in ascii\n        const offramper_id_array = regex_start_sub_array.slice(0, regex_end);\n        const index_of_equals = offramper_id_array.indexOf(\"61\"); // Look for `=` to end the offramper_id which is 61 in ascii\n        // Skip `=\\r\\n`\n        offramper_id_array.splice(index_of_equals, 3);\n        // Chunk bytes into 7 and pack\n        const chunkedArrays = chunkArray(offramper_id_array, 7, 21);\n\n        const packed_offramper_id = chunkedArrays.map((arr, i) => bytesToPacked(arr));\n        const expected_hash = poseidon(packed_offramper_id);\n        const expected_hash_contract = await poseidonContract[\"poseidon(uint256[3])\"](packed_offramper_id);\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_offramper_id)), JSON.stringify(expected_hash), true);\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_offramper_id)), JSON.stringify(poseidon.F.e(expected_hash_contract.toString())), true);\n    });\n\n    it(\"Should return the correct hashed onramper id\", async () => {\n        const provider = new ethers.providers.Web3Provider(\n            ganache.provider({\n                logging: {\n                    logger: {\n                        log: () => { } // Turn off logging\n                    }\n                }\n            })\n        );\n        account = provider.getSigner(0);\n        const C6 = new ethers.ContractFactory(\n            generateABI(3),\n            createCode(3),\n            account\n        );\n\n        poseidonContract = await C6.deploy();\n\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned hashed onramper_id\n        // Index 10 represents the hashed onramper_id\n        const hashed_onramper_id = witness[10];\n\n        // Get expected packed onramper_id\n        const regex_start = Number(input[\"venmo_payer_id_idx\"]);\n        const regex_start_sub_array = input[\"in_body_padded\"].slice(regex_start);\n        const regex_end = regex_start_sub_array.indexOf(\"34\"); // Look for `\"` to end the onramper_id which is 34 in ascii\n        const onramper_id_array = regex_start_sub_array.slice(0, regex_end);\n        // Chunk bytes into 7 and pack\n        const chunkedArrays = chunkArray(onramper_id_array, 7, 21);\n\n        const packed_onramper_id = chunkedArrays.map((arr, i) => bytesToPacked(arr));\n        const expected_hash = poseidon(packed_onramper_id);\n        const expected_hash_contract = await poseidonContract[\"poseidon(uint256[3])\"](packed_onramper_id);\n\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(expected_hash), true);\n        assert.equal(JSON.stringify(poseidon.F.e(hashed_onramper_id)), JSON.stringify(poseidon.F.e(expected_hash_contract.toString())), true);\n    });\n\n    it(\"Should return the correct nullifier\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned nullifier\n        const nullifier = witness[11];\n\n        // Get expected nullifier\n        const sha_out = await partialSha(input[\"in_padded\"], input[\"in_len_padded_bytes\"]);\n        const packed_nullifier = packNullifier(sha_out);\n        const cm_rand = hashSignatureGenRand(input[\"signature\"], N, K, poseidon);\n        const expected_nullifier = poseidon([cm_rand, packed_nullifier])\n        assert.equal(JSON.stringify(poseidon.F.e(nullifier)), JSON.stringify(expected_nullifier), true);\n    });\n\n    it(\"Should return the correct intent hash\", async () => {\n        // To preserve privacy of emails, load inputs generated using `yarn gen-input`. Ping us if you want an example venmo_send.eml to run tests \n        // Otherwise, you can download the original eml from any Venmo send payment transaction\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        const witness = await cir.calculateWitness(\n            input,\n            true\n        );\n\n        // Get returned modulus\n        const intent_hash = witness[12];\n\n        // Get expected modulus\n        const expected_intent_hash = input[\"intent_hash\"];\n\n        assert.equal(JSON.stringify(intent_hash), JSON.stringify(expected_intent_hash), true);\n    });\n\n    it(\"Should not generate witnesses for a receive email\", async () => {\n        // Generate input with receive email using yarn gen-input:send:receive\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send_receive.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        try {\n            await cir.calculateWitness(input, true);\n            assert.fail('Expected calculateWitness to throw an error');\n        } catch (error) {\n            assert.instanceOf(error, Error);\n            assert.equal(error.message, 'Error: Assert Failed.\\nError in template VenmoSendEmail_404 line: 77\\n');\n        }\n    });\n\n    it(\"Should not generate witnesses for a merchant email\", async () => {\n        // Generate input with receive email using yarn gen-input:send:merchant\n        const venmo_path = path.join(__dirname, \"../inputs/input_venmo_send_merchant.json\");\n        const jsonString = fs.readFileSync(venmo_path, \"utf8\");\n        const input = JSON.parse(jsonString);\n        try {\n            await cir.calculateWitness(input, true);\n            assert.fail('Expected calculateWitness to throw an error');\n        } catch (error) {\n            assert.instanceOf(error, Error);\n            assert.equal(error.message, 'Error: Assert Failed.\\nError in template VenmoSendEmail_404 line: 77\\nError in template VenmoSendEmail_404 line: 130\\n');\n        }\n    });\n\n});\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\",  \"test/regexes/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/utils/extract.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"@zk-email/circuits/helpers/extract.circom\";\n\n\n// Adapted from ShiftAndPackMaskedStr function in zkemail to shift, remove line break, and pack.\n// https://github.com/zkemail/zk-email-verify/blob/main/packages/circuits/helpers/extract.circom\ntemplate ShiftAndPackMaskedStrVenmoPayeeId(in_array_len, max_substr_len, pack_size) {\n    var max_substr_len_packed = ((max_substr_len - 1) \\ pack_size + 1);\n\n    // Include unrevealed 3 0s at the end, which we will remove prior to packing\n    // e.g. [67,64,65,65,48,61,13,10,48,44] => [67,64,65,65,48,61,13,10,48,44,0,0,0]\n    component shifter = VarShiftMaskedStr(in_array_len, max_substr_len + 3);\n    component packer = PackBytes(max_substr_len, max_substr_len_packed, pack_size);\n\n    signal input in[in_array_len];\n    signal input shift;\n    signal output out[max_substr_len_packed];\n\n    for (var i = 0; i < in_array_len; i++) {\n        shifter.in[i] <== in[i];\n    }\n    shifter.shift <== shift;\n\n    // Find index where `=\\r\\n` starts\n    signal find_equals_idx[max_substr_len];\n    component eq[max_substr_len];\n    for (var i = 0; i < max_substr_len; i++) {\n        eq[i] = IsEqual();\n        eq[i].in[0] <== 61;\n        eq[i].in[1] <== shifter.out[i];\n        if (i == 0) {\n            find_equals_idx[i] <== eq[i].out * i;\n        } else {\n            find_equals_idx[i] <== find_equals_idx[i - 1] + eq[i].out * i;\n        }\n    } \n\n    // Since shifter.out is max_substr_len + 3 and padded with 0s at the end, we can skip `=\\r\\n` without worrying about out of bounds\n    signal skip_equals[max_substr_len];\n    var max_substr_len_bits = log2(max_substr_len);\n    component lt[max_substr_len];\n    for (var i = 0; i < max_substr_len; i++) {\n        lt[i] = LessThan(max_substr_len_bits);\n        lt[i].in[0] <== i;\n        lt[i].in[1] <== find_equals_idx[max_substr_len - 1];\n        // If current index < index of `=`, then return original, otherwise skip 3 chars and return value\n        skip_equals[i] <== (shifter.out[i] - shifter.out[i + 3]) * lt[i].out + shifter.out[i + 3];\n    }\n\n    // Note that this technically doesn't constrain the rest øf the bits after the max_substr_len to be 0/unmatched/unrevealed\n    // Because of the constraints on signed inputs, it seems this should be OK security wise\n    // But still, TODO unconstrained assert to double check they are 0\n    for (var i = 0; i < max_substr_len; i++) {\n        packer.in[i] <== skip_equals[i];\n    }\n    for (var i = 0; i < max_substr_len_packed; i++) {\n        out[i] <== packer.out[i];\n    }\n}"
  },
  {
    "path": "circuits-circom/circuits/venmo/venmo_registration.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"../utils/ceil.circom\";\ninclude \"../common/regexes/from_regex.circom\";\n\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"./utils/extract.circom\";\n\ninclude \"./regexes/venmo_actor_id.circom\";\ninclude \"./regexes/venmo_send_amount.circom\";\n\ntemplate VenmoRegistration(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 1024); // constraints for 1024 bit RSA\n\n    // Rounded to the nearest multiple of pack_size for extra room in case of change of constants\n    var max_email_from_len = ceil(21, pack_size); // RFC 2821: requires length to be 254, but we can limit to 21 (venmo@venmo.com)\n    var max_actor_id_len = ceil(21, pack_size); // Current Venmo IDs are 19 digits, but we allow for 21 digits to be future proof\n    \n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Base 64 body hash variables\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n\n    // DKIM VERIFICATION\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n    EV.body_hash_idx <== body_hash_idx;\n    EV.precomputed_sha <== precomputed_sha;\n    EV.in_body_padded <== in_body_padded;\n    EV.in_body_len_padded_bytes <== in_body_len_padded_bytes;\n\n    modulus_hash <== EV.pubkey_hash;\n\n    // FROM HEADER REGEX\n    // This extracts the from email, and the precise regex format can be viewed in the README\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes]; // packed into 7-bytes\n\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegex(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n    reveal_email_from_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_from_len, pack_size)(from_regex_reveal, email_from_idx);\n\n    // VENMO SEND AMOUNT REGEX\n    // Check that email is of the format \"You paid YYYY $X\"\n    // Registration only works with send emails, not any other type of email\n    signal amount_regex_out;\n    (amount_regex_out, _) <== VenmoSendAmountRegex(max_header_bytes)(in_padded);\n    // Check that regex matches; no need to reveal output\n    amount_regex_out === 1;\n\n    // VENMO EMAIL ACTOR ID REGEX\n    var max_actor_id_packed_bytes = count_packed(max_actor_id_len, pack_size); // ceil(max_num_bytes / 7)\n    \n    signal input venmo_actor_id_idx;\n    signal reveal_actor_packed[max_actor_id_packed_bytes];\n\n    signal (actor_id_regex_out, actor_id_regex_reveal[max_body_bytes]) <== VenmoActorIdRegex(max_body_bytes)(in_body_padded);    \n    signal is_found_actor_id <== IsZero()(actor_id_regex_out);\n    is_found_actor_id === 0;\n\n    // PACKING\n    reveal_actor_packed <== ShiftAndPackMaskedStr(max_body_bytes, max_actor_id_len, pack_size)(actor_id_regex_reveal, venmo_actor_id_idx);\n\n    // HASH ACTOR ID\n    component hash = Poseidon(max_actor_id_packed_bytes);\n    assert(max_actor_id_packed_bytes < 16);\n    for (var i = 0; i < max_actor_id_packed_bytes; i++) {\n        hash.inputs[i] <== reveal_actor_packed[i];\n    }\n    signal output packed_actor_id_hashed <== hash.out;\n\n    // TOTAL CONSTRAINTS: 8114747\n}\n\n// Args:\n// * max_header_bytes = 768 is the max number of bytes in the header\n// * max_body_bytes = 6912 is the max number of bytes in the body after precomputed slice (Need to leave room for >280 char custom message)\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main = VenmoRegistration(768, 6912, 121, 17, 7);\n"
  },
  {
    "path": "circuits-circom/circuits/venmo/venmo_send.circom",
    "content": "pragma circom 2.1.5;\n\ninclude \"circomlib/circuits/poseidon.circom\";\ninclude \"../utils/ceil.circom\";\ninclude \"../utils/email_nullifier.circom\";\ninclude \"../utils/hash_sign_gen_rand.circom\";\ninclude \"../common/regexes/from_regex.circom\";\n\ninclude \"@zk-email/circuits/email-verifier.circom\";\ninclude \"./utils/extract.circom\";\n\ninclude \"./regexes/venmo_p2p_check.circom\";\ninclude \"./regexes/venmo_send_amount.circom\";\ninclude \"./regexes/venmo_send_id.circom\";\ninclude \"./regexes/venmo_timestamp.circom\";\n\ntemplate VenmoSendEmail(max_header_bytes, max_body_bytes, n, k, pack_size) {\n    assert(n * k > 1024); // constraints for 1024 bit RSA\n\n    // Rounded to the nearest multiple of pack_size for extra room in case of change of constants\n    var max_email_amount_len = 8; // Allowing max 4 fig amount + one decimal point + 2 decimal places. e.g. $2,500.00\n    var max_email_from_len = ceil(21, pack_size); // RFC 2821: requires length to be 254, but we can limit to 21 (venmo@venmo.com)\n    var max_email_timestamp_len = 10; // 10 digits till year 2286\n    // 21 digits does not include the 3 chars `=\\r\\n` extracted from regex. These 3 chars will be removed during shift and pack\n    // Current Venmo IDs are 19 digits, but we allow for 21 digits to be future proof\n    var max_payee_len = ceil(21, pack_size);\n\n    signal input in_padded[max_header_bytes]; // prehashed email data, includes up to 512 + 64? bytes of padding pre SHA256, and padded with lots of 0s at end after the length\n    signal input modulus[k]; // rsa pubkey, verified with smart contract + DNSSEC proof. split up into k parts of n bits each.\n    signal input signature[k]; // rsa signature. split up into k parts of n bits each.\n    signal input in_len_padded_bytes; // length of in email data including the padding, which will inform the sha256 block length\n\n    // Base 64 body hash variables\n    signal input body_hash_idx;\n    // The precomputed_sha value is the Merkle-Damgard state of our SHA hash uptil our first regex match which allows us to save SHA constraints by only hashing the relevant part of the body\n    signal input precomputed_sha[32];\n    // Suffix of the body after precomputed SHA\n    signal input in_body_padded[max_body_bytes];\n    // Length of the body after precomputed SHA\n    signal input in_body_len_padded_bytes;\n\n    signal output modulus_hash;\n\n    // DKIM VERIFICATION\n    component EV = EmailVerifier(max_header_bytes, max_body_bytes, n, k, 0);\n    EV.in_padded <== in_padded;\n    EV.pubkey <== modulus;\n    EV.signature <== signature;\n    EV.in_len_padded_bytes <== in_len_padded_bytes;\n    EV.body_hash_idx <== body_hash_idx;\n    EV.precomputed_sha <== precomputed_sha;\n    EV.in_body_padded <== in_body_padded;\n    EV.in_body_len_padded_bytes <== in_body_len_padded_bytes;\n    signal header_hash[256] <== EV.sha;\n\n    modulus_hash <== EV.pubkey_hash;\n\n    // FROM HEADER REGEX\n    // This extracts the from email, and the precise regex format can be viewed in the README\n    var max_email_from_packed_bytes = count_packed(max_email_from_len, pack_size);\n    assert(max_email_from_packed_bytes < max_header_bytes);\n\n    signal input email_from_idx;\n    signal output reveal_email_from_packed[max_email_from_packed_bytes]; // packed into 7-bytes\n\n    signal (from_regex_out, from_regex_reveal[max_header_bytes]) <== FromRegex(max_header_bytes)(in_padded);\n    from_regex_out === 1;\n    reveal_email_from_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_from_len, pack_size)(from_regex_reveal, email_from_idx);\n\n    // VENMO SEND AMOUNT REGEX\n    var max_email_amount_packed_bytes = count_packed(max_email_amount_len, pack_size);\n    assert(max_email_amount_packed_bytes < max_header_bytes);\n\n    signal input venmo_amount_idx;\n    signal output reveal_email_amount_packed[max_email_amount_packed_bytes]; // packed into 7-bytes. TODO: make this rotate to take up even less space\n\n    signal amount_regex_out, amount_regex_reveal[max_header_bytes];\n    (amount_regex_out, amount_regex_reveal) <== VenmoSendAmountRegex(max_header_bytes)(in_padded);\n    amount_regex_out === 1;\n\n    reveal_email_amount_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_amount_len, pack_size)(amount_regex_reveal, venmo_amount_idx);\n\n    // TIMESTAMP REGEX\n    var max_email_timestamp_packed_bytes = count_packed(max_email_timestamp_len, pack_size);\n    assert(max_email_timestamp_packed_bytes < max_header_bytes);\n\n    signal input email_timestamp_idx;\n    signal output reveal_email_timestamp_packed[max_email_timestamp_packed_bytes]; // packed into 7-bytes\n\n    signal timestamp_regex_out, timestamp_regex_reveal[max_header_bytes];\n    (timestamp_regex_out, timestamp_regex_reveal) <== VenmoTimestampRegex(max_header_bytes)(in_padded);\n    timestamp_regex_out === 1;\n\n    // PACKING\n    reveal_email_timestamp_packed <== ShiftAndPackMaskedStr(max_header_bytes, max_email_timestamp_len, pack_size)(timestamp_regex_reveal, email_timestamp_idx);\n    \n    // VENMO SEND PAYEE ID AND PAYER ID REGEX\n    var max_venmo_id_packed_bytes = count_packed(max_payee_len, pack_size); // ceil(max_num_bytes / 7)\n    \n    signal input venmo_payee_id_idx;\n    signal reveal_payee_packed[max_venmo_id_packed_bytes];\n    signal input venmo_payer_id_idx;\n    signal reveal_payer_packed[max_venmo_id_packed_bytes];\n\n    signal (payee_regex_out, payee_regex_reveal[max_body_bytes], payer_regex_reveal[max_body_bytes]) <== VenmoSendIdRegex(max_body_bytes)(in_body_padded);\n    signal is_found_payee <== IsZero()(payee_regex_out);\n    is_found_payee === 0;\n\n    // PACKING\n    // Special packing to skip over `=\\r\\n` only for Venmo payee ids\n    reveal_payee_packed <== ShiftAndPackMaskedStrVenmoPayeeId(max_body_bytes, max_payee_len, pack_size)(payee_regex_reveal, venmo_payee_id_idx);\n    reveal_payer_packed <== ShiftAndPackMaskedStr(max_body_bytes, max_payee_len, pack_size)(payer_regex_reveal, venmo_payer_id_idx);\n    \n    // HASH OFFRAMPER ID\n    component hash_payee = Poseidon(max_venmo_id_packed_bytes);\n    assert(max_venmo_id_packed_bytes < 16);\n    for (var i = 0; i < max_venmo_id_packed_bytes; i++) {\n        hash_payee.inputs[i] <== reveal_payee_packed[i];\n    }\n    signal output packed_offramper_id_hashed <== hash_payee.out;\n\n    // HASH ONRAMPER ID\n    component hash_payer = Poseidon(max_venmo_id_packed_bytes);\n    for (var i = 0; i < max_venmo_id_packed_bytes; i++) {\n        hash_payer.inputs[i] <== reveal_payer_packed[i];\n    }\n    signal output packed_onramper_id_hashed <== hash_payer.out;\n\n    // P2P PAYMENT CHECK REGEX\n    signal venmo_p2p_check_regex_out;\n    venmo_p2p_check_regex_out <== VenmoP2PCheckRegex(max_body_bytes)(in_body_padded);\n    venmo_p2p_check_regex_out === 0;\n\n    // NULLIFIER\n    signal output email_nullifier;\n    signal cm_rand <== HashSignGenRand(n, k)(signature);\n    email_nullifier <== EmailNullifier()(header_hash, cm_rand);\n\n    // The following signals do not take part in any computation, but tie the proof to a specific intent_hash & claim_id to prevent replay attacks and frontrunning.\n    // https://geometry.xyz/notebook/groth16-malleability\n    signal input intent_hash;\n    signal intent_hash_squared;\n    intent_hash_squared <== intent_hash * intent_hash;\n\n    // TOTAL CONSTRAINTS: 8879008\n}\n\n// Args:\n// * max_header_bytes = 768 is the max number of bytes in the header\n// * max_body_bytes = 6912 is the max number of bytes in the body after precomputed slice (Need to leave room for >280 char custom message)\n// * n = 121 is the number of bits in each chunk of the modulus (RSA parameter)\n// * k = 17 is the number of chunks in the modulus (RSA parameter)\n// * pack_size = 7 is the number of bytes that can fit into a 255ish bit signal (can increase later)\ncomponent main { public [ intent_hash ] } = VenmoSendEmail(768, 6912, 121, 17, 7);"
  },
  {
    "path": "circuits-circom/package/.npmignore",
    "content": "node_modules/\n.env\n.DS_Store\n*.env\n.yarn\n"
  },
  {
    "path": "circuits-circom/package/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"W9rheIFxrIB/3Qnoz55s1X/YEmWILAV2tWvYmTaJks+s3FB2u4JIdxIJfq99W2srgqqqpiWVIS4pe9pSGGy76tWU4AFHiryjKNAhLkHpA+HUeUz10yGn4ZA9UFiF6dhnNHRZ1eLczWuZ2yq6XLQr4GmlAuJpqOAITL6vsyJwBy2HLDcGFvpIv7YZBTc2xGFs8mciLz+vZCGj+Tn+/YVvPPgJzoXl1bzn4SH6FRwiiaTWcx4udWRt9O70mcjRPOrwETRcGBn4BEV/vT/jJnX6F0mt6yVfA+i4/VUA4ggSk1KNGRjP6FzJpjiYi3nypf+Yqp6Fy+kJRkJ86uvDardQhu5eJ4ISqOlBDQ8lTUFggae/ULRav5JMdm9L33supzC/LfJXXGaEwFRZ6LLsOngEhlTe0MNQ0iqJ/+1Vv6/fi8arR8worbA6YpJXSvFkFQTG5kUFt1RYvzf3+z2bVfAG95BOYM6LnUz7wG9R/d///LWv/++fr/OcLal7jNPOHt6GKNP2c6HEOxuPWi6JmBYDlRMXugZTfV+nVfiTBSgGeTy2vJTSNkOpdZji+zatM1xO7PZkartuKY2XGBt7PJE+epJZ2DIwL/5beW1BiIA/B+BmqWn231S08/npdKVjaD9UjnPiGFyJ5AAMkPmA3qv27n+Z7t2W2pwJA7LJSaAPyCXNBJJO1zFdTzKW35iMBcDNlvb8JvJePC23CDITOuBiKfySkINg0XZzmsX8WX88vJ/7mc87SrKSGBJaxXhaeuuwU1kxkLZ0Nxg//oeT///8uPe+onra9HOt2QMZQohDRJv+xfQ40LwWDWk3Fp4of/N46A8RNR7fZDfJIquONtpww4CDIsY21UH9qLH98dDBraiPxzfLAIOCDUhFN8JcjAoVfyv5UXvn8dCDVFNrj29mZ5fhlwyEJHiLWBdEE5VUtFDZhlZjf7mbERgEBmEICW9I2rQ89Jaqx2tKu34MQe1sRMtQp28x5QwYPzLpG8NTlrM/Hn6axfn4WiMbfXDoYfPNsdXIGWob8bf25vEKJsysR9hGV9rQghEjNz8diD4TJvgJmqhq45ovbaQ7+KVLwW24A1OpdNmx/95My5N/v3swGNACNCfyjDXZANyTcTYIPd5/v3+h//89Yk8PcBiH3ZkBWAsMiLoxRB0B3PYA3NUMlieB5LLKyIF7VypQlpQ1hKGOIM+Q3N0zXBnjYmNsblyoUNFGMkGm8LJEpSRRkioJlGbG+pW/r153doUmez4AWPZ2VdY9EY2CmVkRwD15MiunX8PMopjM7xhOvR5BC8j78uTqel9NWx3uNOiUSrdu2kiCdMilq5J/w9vD/wg6JJoAeTeiQkq7+x6oDxDUEORZAnlKsXMKoWutzrXLyqOicmwa+9/3fmbvd5KAopWxfjCSZ6NQbBlj54p55T57n9WVz6QKSCQkAAV8+mhWfbKtOWuvc+6zCaZBsatQ1Qyy2P2Doox1Y83mzk4HiSwZsqWRsSMNhmP5//Wm1v804t40oBEpVVOq0mq1+nk/zkxAkCm13jfOj5sR58RelTfi3l9AmlVEZuK1CIDrl2jWKhJkG0kVcTNB3puE1AmI9ToBsbpBSdWPUptFqZ3ajN4v1bduaNxk/IwffeMmwz8Y6nu1vrf883H0qn/Oy/YuJRYgTrps9LGi5X13rFEFy//TX0x3z4U/YSIJv4kiskQwEW2bmscj0V26BN0eloyZh23994e5xt3BeDVjFKECioE2Jhg1YcWE1UNo7/4cYJvffzbRd+aPhTYVooSIaGNj5Jw9MxZ3P2ogN6uDCnuklJNKnAgeSoNJ8VIqVMADbWmIkCB6M1/wnQPVBqakgEw60GkGBgWPwD9d8O/rnZD/bxUVFYgKRJMhEAgEWdiCQCAQJ//N4v//f7/Xhj/66oWNrEGQgCUEKTFIkAgZxEfxDRIhSKEZ1KDEGtSgxB4cVb+5+H+QvU/IL64INCIiIpRQIiIiQomIiFjKUlZEhDJixEBHHDHiLjv4p9f7gHd3D4IgCIJgEATBIBgEQRAEQRAEg0G+q3z92rWdVuw+CfvJYMZEPxFGAWFk0EGQSSn9HU3OpZ5y2GaJeBXzbR2o0jqrcq9vMglJ5eb5Of0/uEghxLvSqjgYDpbKUhHHynBkoDSWoTvZH7/tC6DRc948tK3//7gCroK+9/4G9AQwRQ1DDllKhpQooX2vW+eco+5MR4CzTPk4uAb4p42cTnct+ZBLdEKDCTWlzXF30pfmOgCRD5kofvpLEtDivFIUBcXGZQjCSRtt/fXeQx5bB8bjTxiDz3wtpiVUC4sBkZLoNw0+HA8hX2JjlgYjuQhZSXnPR0AIOO0hmTcjaoasFBUND+QClQL06qXfU12vZWiUyUHQNXjokqIo0nuJUhXSL1CEG3QSP3nIwDUL9jZKDEsRrvqkOSF5lRQc3JgC+XUyK7oFokJn25vVdLur5dZWlTK8Ebd3eiWFLAKHj1XoX6MGZigp7lEK5PwbRxMCdc2q45QCLXlwrKq4CTl3yMbZAxL9frLj4MIL6Vd3jnXbDrTQnwn/lHTfci8759LeDm4dKOycJEwmb7sNAaYqkcuHPfYOFCVBkTL08/DLZSKzEGT1l2Q0x/9waxoCFMIUdkyc7DNfHd5JnguKJZQXZuXVHdeJ/bKB0sWSk1nf0m/MmfAaApXEZ8LdQQpogZnIGZVI8W/Nl8fYq9GzegOOl+RnMmhQ+GEmzIZg94B4EW1ySWk5dNZQUg5XgySOH07Dil3Oy4czZFRX1cciSgfUAhS+1np93aC8v0dWe8CXIzb4MzDnEGRLG7iuiqTRidVVvscBdlxDKpGPECG5hWSKVY3OmH9nI+Ji+QQ5lgdeqEsXV7krmD7cttXm2h6LXHHpk8pUuIXsHE6SBdTv+vY8WOj38bzAO33Py+hc2FvFJqKqdX2I8oVFkdbDDiVSqgNzCuTZ0QNvi1++0iCikmsN8ImhwuO+oael1jUevkUe52e6wIqY3iD89cTfS8JrXaynw/hXKrT8U5LKX7Q3+ZKNd0xdrpqIsKdDBxY5A/2YC0tr+IT0dAh0FEni2Se5RNqCRacxOGRa08Dt8+16ToPdrNz+7vZ3r2Snfbz4WkDQCW0gXCLuwUK5w/YXIPxtkMf9lAloC0bz4muNoDBSnIPhIXKRp6vB1VDgucr3ogb7GfFcZqlBVNjtvc+rFq5tHGMYS3xE+f0utvKwSvPQURxeADeQXn6HgxzOqy30Vawy/85rUO3blqbjBA4R5RGvuYcxeqznIPRa1ljmFeampQuHUWXOTdX1shnQQvOyz11hx6s+tH83NtYY65FcFHpZ5Swn+XkosiX7ILwHJ8baQTYRoESHwvKLTp/jo2jOH13UJbTuPPC3/hErrku5g0OhsIC1atlpwqw82KQcCRaVcbmrG9ujcY5798upibztZkSvmF/ev2LPJadwqRFCdRE4TbwPtWpn5adbfpPb1vQiLLV4Sgt/2TzfwfNUQABjgAIX/ZBQGYpHf94PwUtGN/vTbvOmp/J0nkKrCLh3e9Lt9Q9KpgzoBv6gjM6AbiAr2x1K6qoboirxARUuhyFzdQAI4WEImpf7jgYv+xF4LQCAP/YDKOxhg5MBG5f+gMbu+hF69cCR2LN+v6yOr4y9tug2f9VtW9OEexoF2ww39OtoTOS3NUbHzHe8ceBev9QcNZCXbzSvw8dLSUD6BMEyvFpexq/SS14lSMRNIiLT+S+9f+GsRY2k6x0YKuxacjv4wi7WRRabVyeFBhXg+RoOVO79gagP2SLDg7yS2m/rVISnveIAIkp/2mCm+bDk0NGEHoFpQLtGJm56D2eFJtp5sDCD/nL5as0Qg9ul/9gk2e+suGke1qM92PRg52mnAiyf1dXiT245avbvHZxOZdu5GdpWVc/nDqFoiXsP1J9DSHYo/PGNmzp1+R0JGIBK1PSzl7lJETbJAgvIA3wApS/ytWoKQheKyOAs9K8NK2BDOz0Osk0ll0DQNOk1LFLDGmgyv+iRdKidRYtsEtcHM7CILMMUHfthCciwppbjyvR6kziDp1lWPNMPqtk2nzUDkNT5vMjHYNIbBvSO+uXkVDhCognWfGwB1s0G3DNVGLaMvaYmuPTX8wI+wkP3RYdpIwOYdBUEJjaTqYPEik6LCGgnEWlSwgQkXo7gugl+DyoyihNr1TJqiehA1QxOCxZIK0rSwXiwlg+kFvy993PsWaaB79gPDeS/dmGbbuf/9zunF3MpyTj/r+h7tEBwx+CCs0HWR6m2tnApndivVKKpcEYX1ISPbOR/C/HaKoXyAqntilYIA61YJnxufmf2O7yPoxi33tjTQ4CNP4nhJWfUiaugir5/SCQ8uSAaRk7g+dmciwhmPC6hJWXYiBETMSYSPMNhtc8kyBb7lagzF8kXJ8LgmP1dp3aOdLo8lFfqrflNwbm9d8Zk7PKQDPEERhlxaYifDLmTkDJ5RINj4BEYvkG8R8wmE8R4fdoZgSYCFtFJhBpaouZx8EJKKGYPgtYxQzxpzmzRQGIWvka7NjCKaDhCOykjaG1C0GLbtrxAmN9TLWEXlTYNyqaJFVHnutbF5d60Yyeu6j+7cQz6cjSAI8d02Pr98E9cUo+tqMdKvwyhbMdBfgk0SFeOlG1lNUdjHvDsKspC7QNjqIueRry2QVUcLjnXEDdD1aNHc3wVLZ4uLPLg8BFuDGlqT68nDdOmFhYZKOqW8taWMmAY1gMhGxpuUJ6EIqeapSB8E17hhCA4IrwPH5RxPZIk8WYNKDVb/t7MiJhvzzvHhnUxxwvvaAwNxyXu5nKINggus0Q9XyFOPfMStW/gE5n1AdHcQTCeQfiFKnz7mvuWKbuMUVxG7jhOi4rbOBtP6K6Csj8K5UUYO39zZ2rjM1zWiEZTkFRN96QZASsMU25FQRIfZcZlEAVUUyru7icYPRMQRAcXLeOh7mbKIyIZfmcE+ITkCdDL7H51t227SmQGGtSthfTlSLUPSiA4JDHfGE3NmiAqUa2TsTJjRC4180l+8Y+a/jVroZzl0XTwnMau55yOWO+GXu4KjtOldHJeRpsvw5egQ0AX8Si+J9LkRl1M8ZppSgRe13KBuf+7BuGU3qsdCCEGfDuz2u6xHQlq9gHqsN5OwspqHQkRX9eweNQs8NsLn+N/56HiULUCn5kscJOIYwfg0ZGirZmtQULfSBwg7LJroDHyPtjJ1QcyU3YLDsIIyl25z5u33W5i6uyxVS8mBlTOmJJpvy2sbqDrcdWDe1tE5m/l78N1vV2mSQQbTOmsrSyt53jmbW8tvwWHDhY+ZM5rH+6jQpX9yC1Tj/3hyEr0133scnMWLk2qO4go7cK5KOOo+HjYgDJCNJbqaBVA9czovpISYhZYimHgGNsp2jgEMy9uTuxMywTwMWYNcesJIAobenNqGGw1tWUieH2cozrTWFwkMi74CGwF1kjfgcwHYXP7kmprRp7CRWxdWmYkNTh3/cZgAzHJ5L1Vc2WwcqNtnz2N+xhJS2p3os7kEVLc2BJ2vV4/+/bafOhXprz5IFvQuykZ2O3MXKgCxVwOUXGyfuMIqdKdrDe+TR6hdTqpfs8KSpf2qCw6lBmuCm2rYzakqxpqXRYcDM5s08eI3WFaabOhrwFrHy5wPHD2dvAMLJC4J8CAgBEWqUhWdtoJy1E8e4XlayDuQgsjAhV7JAdnjFLENSrIyCs8z/G4oIRjHOq7K56fFu7DiojQxv1yweSWn+4tSp3VC+eW1XTLyOkTfAj+ELBUp2wS3wdbyBsbj4OysiR+ZPVFgwi0o0CwImVd0Zc7nDINh+g1LLaG5yS1M+FWpESu5KqHkF6YgO2M3MXPTw8ceCoK/D9DhdcZg9iarNKwzqNlq588VqLiKghTRa8nDCnzouMV0uZcGhckIBprx/Qr/IbIGy2PwMdoIfVG6BKnWnA/WJ2lhfZJ7Phyecee4Nj6FAm3rez1Av+hcN9mClPKbVi22agwk5xIVyGd3em+RtospQbl6bJyBBaIbYXUdWVxQfNOLJH5TdnGIzeMEIBKGEsrP1z7qpfohlNXo4+1vs+dVne5qk4/sDVl5GtObn6u3t3D5OSEV0m99qTgdrG96yDd+C0Fg+8nPQT9BABEsmt6mJxrvx9D2AumnYZDNLzHEdIeA8lCpGSFXkjF4lw07n77ICwADeeRmRg9WUfoeM1IwskGqm6QnptcNhu9mYzUxHXcGSgZEBXEG3NcyY5TNcO2wuGXs7PFV3kqNkWC82FoOMNrmbUvdkyC8ulxjhM7umN8g9Vs69KmGvgFPd9v5aQiZ+kq2F+pc1iUVDMJlgbud5cInQJnvsQ0X8l4EJqDxvjwJeq1pn1TKyzkD4CuxwIdYVZ8KqFXR0POgL7gsd+gs7ZtpxJHSQmfnh1rYyF/AHZ6TfhLONcHXes43fQqs2YHKRBZnn1RmtRnbmHoSxh4+Sa5RPT4hKmXZjyA/AGAIuOVkmgZhVTTq+tSEQB9gQKsyaeHPgFbefGPdJngBZDHM4lPUMrvsgCXkEgl2dv1Gv4es0X8Aih/nwPyxiFZdPcoIHH8P1VO/c16BczSIUorbW7ewra7JKw0//Fu76z7/yRoeRVaeu59BCm5CzAxKX5wt0xxa2e70aTWBpMjAuXOM7WWEHVoi2YaaQWUQ2qjCRg/dZIAueFmAW+2EJ3B5qk8TdMsxXBEohFozgKgtj4cfsHSunIJRqdsUB9NpuN1/M9DS6V0CwV2959HL5eaUWE6Hjf/+ngLcGddotCjzuUEuSXtncbrlqs5/nc5zK0r9JYVFi1u1bc4qFnEn331velWoeamXyxdyj1praTScBWy72433pkHCsHY59Npa0Tc3XDXbBRTGwNXOA4yM7aElRMImOE8Sn6Mh0UAMOpscOLJFMsYsrh0xBC7KBDqVjqrDGp/EDN2OGw8VKE/rN5X6E0opITPcTnBX09foM8re89tt8go6JCn3MyGrPnxyjjW46IHe2aOjkwxzoqSLOuLsb4GRstXhOXCIEL0rd/+CIBuq6t0HorSbT/zUvfXaTuuBzNosOImMo1pHkmXGMjwzhSaB4ocsCfHK9o7wMMXeG2/1JSgkuMnXNHY7C2B9vkxe9pjrcZ0QsPANm1wJqLPouaG5yHlvnVZnQdVfelyZmhiKmHkS8VtO3I+nYlob+MegKKWBwA2hmxNv+WkLvI9hneB+VuFBAv3E8EGUyMVQi8Gb/adg/7gwfdmUaEljV0LDxsNMuTMI+13bfNj7beahpf9hFQYURwchYJAlVJJy/Ew0Es9P/nMzJ8oy/595YTngdLeLGKPF14WmFuDUq24GpQ798wedSYA2zrgPMU3jbGbvZYIxFrQCqkgUeh3zdUEHq02Ho4Mcqk+rrQEY+WlCS8KFzhgwFsnSAOJ3kJztp7PfbA/W1aKPyDOnU9EAEX7Az/sk408aadT/loFbrKoI1uTbe4SFX+CqxOAmKp+1pWcAx0FtaTFGsKFEHVRVLuKW9wd4HDqr/xsIpkdUSFiLUl1Ns4QzCxIwx4bSiGmU+6UKbXNoE7imrXDqAbc2RpBBoRasjYiniZ5tSkAYhSck3LhT+THPFbagfLGcYHjoLMoXp7lCHrbatPsHEXlQYyyvigsj64Tuq0uV3bXeR0jFlLNYB8bsXtMi4ULoTB3CQ1zc3ND3ZydDFbZfNVvvegPb6zG2xwq9+szuN7ChXlRnvbRFtPLimfvrSiSDwyn57lZMkoGqKbXYPthPMwSO1UJDTWFNsMrGHO5NIMkwu0O6WaJqEgqSkUlK+I9uARLgAyYY0LO9C6P2UDeFSnuL8dR3Nnnl3jx7LTfeiJ2W9F7e6qTkKEj7UAlAI7TDhrq0Et24WMi+97DUuNFpDT34prDYvt/f2Jvcgwg+DBqb7MKiG5yO6U6QL4i2QO0gmEatPeyefU1AWoOPPNND9ou4oRhD/aBxFtFNO3yngB4sDIugOR9shuhm4iJysyoM8IUO5NEORzEIDGWMbRMbWaFcDGvQCS668Nrx46otdG40mry3MSJcd7C7yKHdVuHiVxeAuh0rfbYqBqsQ99NbVpHziFX6mCCsMvz4cmQQVn/BEgoiSLIFSyaSRAj1ozh+sB8rADropX2myOAGzor/1ryMMVOHMx3c5iwgBAmPoi4GsiHgs8f57xgfPA9SdiAlowGfGDffZA9i0sLJCQG62UDecKPeHxtlDqb597IE9pfx3+Raq2f0vrHVVPOUF+i8CeXC3z9Xn/040ZIJhZ+3HL5+MONVOalssc4UOThfsAbGuqyCCoi33sVe3wLnde10/5kwXxDRZI2ogaj++8iyvXWEdi2LoUhI3M9SpVPOVBdFrFZ3j0QRDkc0KJer49rZ/Cbd7+B52O9jNuy1OOfPF6QAge+GOQWbEQ7rqCG84FuEcgE0s/7o7gv88MdpyOFjYnzV4SjAP8l8/hSTj+/F6SY676Msk8RgjOgAtmaJ/zwpLtI8EvzAgVp9VYiJce/QpMjSaAU0WURhVx96ZQLkmX2KFTYJSWrplWOc0Z65RSqy+R40ozzVWdG6Mp1mVKL6+FPj1omhCiTTdIgR19d5NSPIyJHS3DW1l7eBJLpbdt/Mq6pb2Cy3Nx5qmTJJcOrWPRDdu9L+7j9DWpycQmRcOC72q6bCkIgquZZxwuoibXKAngVqLsheRO87sfDdTsPXLqWbQAkwXg4ym75PGrZ1e3ODjHWzHeOHZTivuzT781kO8jnb4YerEv8ngsOJvHIQnpDIybHuuXbB1PBFJrXGnZHXnT/MR9bZ2t43dxjouTaBuUs1hx+tUQhAlUyh5X4TJCaPy2YQsgED7OdhDXPUrPo50kGRmEa1aToNDMkMOuewsIqwK+X3/0vJTbeXYcWmdPhEc7NVMn2yEAfR2x/t6AK0fochGTxKgtFX4y4V8oKS6t9G4qkxRaRDeimXjmq0BfsN959UUzbEOya3vy0rHiy4J/96dWpChPNuUrD+GyoPTuTrloib78TcB0U/u2yv2JOA7PJxpLyDtKTuNMMeZhnK2pCHhDpEXotZQFxPM4NZQqdFadZ0SL4py6T6ZoZWkou3vLpS4PASPnlqTf2S31N6AU+Q9Zbo3Q+UV4vZI+wgstSZGm7rrJdK5xBbiW+suXQLyVD9Nj2NpUs58ziuaEsp4n8e9SUy1h5cxogUm1XuuF0eMEtfdXr0j3cOrIxqePjjuDdd9yD6TKzjTuMAHqUpw/Iu48GktPB7wl38tor/CB465d3COuXtwdpj+H+Y5CxTmnoigJEpLDr4SRa7FeO52Z/Y09drpzPTGoyQ7IF0WOYXgfRx3tiZH7P6E8eje+Lu4rdR+79Q2b0K6h9fMMTzaMQ81EsWsjheBXKx2Xh6W04Pt1/BC5eQxXMrtL2BhOPLT/D8ipT25NmFPSvVnEkjqmG0DunmtRt4eks0sgPQWWN5LwLBQ41hJYw5pXFhkILw12ube08injzNuwWKnXO6898RGISjNqdrCoaRDTp+ezimOCTdhc+KERskkLhKpJt+tPyfkpN60xiAI3IBhx/kqap1htSQ565dIbBkojSlQ2jsU+Q1BiGu6l25Crmr3Eg/vf1wbBND/zaptCsxJLZeQV22yF2RYFRUJnd10uG66xcQZPBtaNNBxvdqwnS3qrwPXT3NqrfsUIM44KtIC3WKWYq5gipzDyOCmJOtGYx4MywWQgsQOJBYhoBYwKdSoI0xtPaGqukx/G5Qw8kXiVqYyzq6MgniRmFQgkFEwkP2bb9ivcZPcynIVq9MWoz/q2IHXVaVqX174V4ruPSLhy23xa162q71+8NKUGNd8duBGPQuSX6YJS9J2repdTOMN+zQWQcrSsyvx5E9b+zpnfaLnf47YBXOeyvtt3a/4/Aepa3NEcpdjZWdmxcYD3jpPi902sa6QZYkAblOCWjyBzxyTTIgYFRDG0RqoePs/JcRfO0eWg9KzXl8+jWyO4Ms1WRrPFDeZ0Md2dd2WvyuDzmuHDm53ncaJwYI/IijRnDFHAroACq5EK3ptxuGyNelj10HN0yuxqB6YVgzccGz4Biw9Jayrd7cATKjgZzG8ZNC47EsvdnMDOTZFT4LGzEjBGP1X7kx+MBQUXcgmLltMWKmtQyRYURChe/H1bMcQd6SkMvLXKnE/PuJTyIgXva4khdTgEvzu0hEr+Ng5psjfHdMIStA6YrEjtWshlztXV4j9q0rm6QYF6qYWPEgraqeo0JWsYYESEZQXkSQhvgMi0XgusKreGwfgMlb68quZtdooEgeKJlB2gZwXCJXIhBl8KnDs0OWD5GdAZAuj7qmUxdJF/uQFA8z8LIdITmEemo+5fVpt1/QQQ+VgJfXg8+LgJfCoGYTbZZ/o+cQJcyzcgB0/zCy1B2IEAx06B8eyUWi+BRBYMZYnKpksrOcLdggCFFG/AhcXyl7mFP58EnHyWPpgRmJBnbfOkY2m4JUi5oETA8ibDh0QWDGaKyqpPSznD3YIAhQaOWnDMJ8PsGUskg0CNJHgxnxNJpOFkirjtt8yW6G9EngikfdoGraHcTpV6g9DwBL5J3CK0xdBH+DwZiNmMo6uiMXizgfFkMhsw2QwR+mACxPlyekujbg4dnlhRG0HbcGbuLWnPc7t3A9dAxl21byVfUdhxeY0yAy5qqWgX5Oothg0pIRS0ldGXURlCpH5UOWIP6dnzY0mtDIkYQFzeD+IpmkDp2M4e/2AzEs80YWrlUm65hCltnl2WGJdfNBn+TAHdsGW/wtYiQjGgUYDYKJIZhLDJUgkL4nkGlx0sxzkYzgYw2Ar8XYKiPGA4E32pIHYaRjsWjT9I4WVgfzTRu29KGl90gnz7phXpRjHatiOCB2laX3HP13xYp+YUeTAsdD77g4VIJH7YVZUAEi6TpTrF6TIfJPMzDjq+0nU3LGCuvBIIh6Ep3cHmSwup1x9Eu2Wk4AgD2FYFOakaEIeBMgErj7bR8a7X4oyUzqFiv2Y9yOR5SZh0IKtn3pO5tz2CfpuObgtf3FhG9kY05jA06XsC3TIzDt5QKHaxG9XyZ0EoWcT54XAHOcpx5ihLza7ZDoD8oDSjvzb5qcSMk86OPpucIqSzFoU4IxFAkpEqZS5Y6cmXvZqjxoqg5uq12MVg4Ga3xSRfXAXsbQllfZIGlubYzMd6zC2jQMVwkizEjL2xVfNZqA7yzhc113FqiG3w/lq7Y0jVCYdtRDlUyNgsAwIsDXjnbwvdP2LryeXmfTLiI5DdyQaBTMD/7HaQAiKB4tMF3hj63H3BDRI51hAacG6GCPkAOsaaa6dCBAb8fErT5Mg5oFbBYoBHM4MPwctk9OVsZGH/Pd7I0IGAtHYqa8xeY9m4BeuyjwFACX788GXOZCL/A6YVZuYqdQMUE+b4CDYWQ40jLnjp3D2AcbdJ39cU6LPWKC04PLb9yg7FrPYV+8eMuXGbP7PdZdgu3RfCRhGaNDfXVjx0LRonoUV5PkPW2CKeeNutpcWDGm3+XysPHf/3Ht2LjvXaWdGOQRTyimNxsQn/45sFZwMa9zS/7Xf1hISS/j/T70Y52LvZdixnb0i1ggNU74LpwYoj9yamCzYfAqT+0Lp8Q6Bhw4BK7vPh54n1sMfNQdr2vrSLGz8YiIkyhdDEQNBdGshMOeQa97i9YYjVuZbYTDR0RG0ebdZO/gk1GU/uHEUHSHVMor/LrVhpOCqVu5xXjn9Cz8QxUrFA9++TFgduG0Zu+TrOBd7I80t9m1wtVC6tPsHFA4N86/+VVAM4PwTOxLxSdGFhAcDb6JY/wkzBNASY9PFAvGOTKCRR92bq8nKVsygy4d1pfgVNSvZDAJiDuo47ndzHMoQ2J/dQGYpW9tpSqt6dC16Bee6g9NzGpP/x6rq1zFw5UzzLMIGIupZjkZHhEbgvCvYzTrg46zwNUEB5Na920hHBds9WfUMaazN02p81eU2I+ki9+mhjh9EkT14uXbEblyT12fML5sYfosQvKXxdnFd6evMAq24ADr/sRsaatRI1Qzgz70ltTObRq6lB8ahJrOQBeh41/QHP13S02P8UzflM8+oCQ2gjKLnbShgrR1BqzLXtarPYwFA1Zun/vOYg1xFrJih8W1WbOamLprlOYIOwuwP/dMSPTIhnAyGyRZK8SBU5A2FAtznWbR7SYayZMdewE1Be49oOWjZ+wA9Uzf44sAy5qMMKKuMPH3PHEvqGPutOeGUkcNiap9mKebMtMdiqKdUqLNh7bUToFhQfiqbuDzyz4C0XpR1Gb4FzZYDhMeO5esH47DQ4/wvHhcoB6lCzI5Z2dUSGDJx81hk/YBnrpb0IUMOMgMxTKjR57rV3HaGA/onofHxyqhhXXhJi+jxmHmSplwDZWJK5HVWmWd3MmVDOCFmnh+j+HBr0AyBqurmqg9gLyq1eqJpltCDoWV08hyjacu00i0VHp3SPeGCIIsrgKkDF5wyWPZSic5UpEiPoHIbX/WhD4wkU6l2ml6U7IROEvYy2FOT2Odft9s2f4Stc2xGg5ovy58vawc7YHRfxh1zEChYJpIA1Ilb3tYon6uYRhusszKluLx90BapzbtQCz71+U7RM+D+M1XfyBva//uEAPeq3Qw2xkyP7BiKAPVaPk1K981ldniLnj4yWBeGdnV7FcXK4OUlIugRjfV4H30Y4lq+2sJWf21/GplHbHJ/63Yfjo8ffj7p8OYP1y4+5v4B+T9aXEUcZkD9tDukkDiS6wOOv+JL1p2PJy3LdN0eCUTAPjtMEntm/eGp9nvLRRUY0MnvzYL8oxp53MfYPweO7uG+0Sd1UQ24iXE/ujv5kCuluxhI4KsKfMd5ywK7zdvimcLOWTHUgeedMNAfNFNRB22j3HQsCXO3t1sQoghYPr/IDhT9wjd6IGLUK7sD8PriIkuqH4sEXZJGL3YFAaL4KWiQTFPVgCLyjnzizHsJJNwrCvpmXupITQE4FMsadOI73yLcUkvHFaYOMl7M36O0kvmrVp8ljw7gK31l41xzycUx8y7ZIkjI58S2To8z+44z/o+Pbo9IeztGp1OlUAuQ0iqpvYHa+Fe+4oZX7FK2pPl3AB3/M3oqR7fTrHgflTrqiut2CQKYqYsBVFfrfK61fcj9o9i4wBJQ+GwPZKGkgr+S6mVckH+3imZGo8GOUCCKAFhIeXk0Y0glvfvCKVqiPMROGF/Uy4XU+TNHtzDWIVPlv9qv0saiwHxr4eJvo/8pWLzzaPYUvsrCTAGbon26NDBN9GDo5AxJ2HLKvtSffwpmu+yONurAb8fl//FAdp+/hym5mtCPnnd4NXFRYoAavWy/2uW+g2M+0t/Xst8cD6TrAmtph+gwrkZ8Z9NOJRHdZLvGPH/GQVS8kzg0wFJhr23ndh+NEvw6U5Y62tlhThTSHG/3icnSEP592+pCwe9rP/NpPzNEAjD6qWCKizFs47nUqUWYTAmRN0kGuDfHK0FD40QZYsLUl1JE24f/dfJskE9w1Bqs6TbHWu0Ky1VEYFjJiukHYglvuU0bieCxzOiqAFnFIavcEF/6lV9tLbrc3CgUt74/J/B2TNp4VwHB8BW3itDdaaOAUNdwu3fvYIFop97Z/1LuqetvcJ224sNUe4eU+bM17sYQvsA6oAFTWlGKek/hTM5gLDVpPyGhsCQb3nBVJN9zK36C7JgHKPYW+typD2rpPrvT4IdZ9SvWV5x2p2BduZjP10lSGwbY/6H1x9oZe8yxQJvK11tvD6MIQ6V0Zy6I64ac5LUTWAeZTVAyGIe/O5DgeKP3YBPMRLf8dCxS5Y/MOCUb1UQcj7eLtaUutJL+3SGewoaTm4HOMIhq/lh3yM88PVmgQNYNmrgwysghrgcA3HljG6/maM+vIQ4V+Rdzv7gP+PgmNNM7SHxyAZyX9rC9vWIV1bPP2/e1D+yXMQ3agrEku26XffYK57J5hoWfhtDf0yR54VpGkUutvuXdSWKkICNGt7MstuMqQQ41UzeUd/JTwvGeo+9Udz9UdzG2wZ7FdY2c9lM0JI0qWdSfMf9RlBb7//vZeUP7hb8DHsF4AAdS+sk0EA0ZQQJic6WT0ESoC25VTc39LTvnXXInd9J4UeF9KAxZY4/dWCLwLnPyOx/G0oJx9cMRX0AtuyFBXBymKzA68n3VMjhS6uQlbulx9Xn4si9IAbqzX0VwO4p2PCYjrflddcNN86EOyuIX/mM+ipqlc32dINbmieRxbwalQ4QHm2GAFNdlP6CE7jCQmoD0O0JtQVD24ifs/t9BB0VyEI/Yv7g09YMox5FChl01SnVTdSpIzrqRTcgEYS7Mc/vhOFbtGvZHsKZ61nH4jxfSKQeD7pAr1TueBF9sn4EIrDEC2zL3BSlruvZtR9zoRgWJTtWt4U/sWHcuAeY9g8VU292URBp3Yw6N7dQO30H7K6SCVHKamXNLjHGG2do19liNwXWYTXG4Fhthwjldq+Ui9JFu1d/jl5/9W58X+C8a+U6IntFBazggOt9Vuagb8PtNsiGC7PvYohRoJO2+hZgikOJMWngUrPWsVLiHI8jBDEORNaosG+0bHj7N/iYRV7E6xkUwLAGdtYwp0fihkXFhv4eqMJPksTMvLvKZJ4G+he+xew8FPaLbjGmK6nDpbAXBQtlv2ym+i39IM7eY5yH6QfwuS6md5zz+FFRgyvdsrTmQKY3uT5PRBiZu6wl0X8OJGfxHgyXK9weAXsVJVhDBytwIelUwXPfDojQB0neLhawZ4Wq99ZQe+GAFxDH6qucjeFCaG9KGlEH06hvWmg+xraEoJ5p7dhIGcvTmhBxMeCDW0NcRTnv/NHXpFUOD0M83OkkNkWChdc9u+DvqSBc575YyHtAV4X79i4R2c7ZNY+WCjFR3abvLKlevxsrNTt0rqLATjs7MrlGybD49/XxtI/C1tnQQjnIOWk9QY8QSu1k6BGDLQQXfwz6ifUCG6THVk5EK7sdLvOCzo6RwxCGnNc6suRk0oDYtlJdGRLWV5sIQ8lZfUGPXJ04dOaycruoyN742o+6n5SrioDhd61ZDwlcV2aHX7ORq/K0a/Vp8GfZOLNXuhaCWMp83vn9k/9SRDJdgUPIg7q7bH6M2D/sJrOExDgUAv2Tfic8XwbT9SalqLQzIzn+gTDmhsYda/aeJZ0upQDQYvEp++Sv32NfF4lsyFA+OwAxin7UXlD3FCFLJEvFlUh6rJ0GDADCwXPym0txCyXcRn72e9aX05gKKsY3zLI5ZXsr9Oz686kLd+ygP+LYWX8Ca+AaLLNffgEPiwkcraq3toWLUIxMMQBPYVKLqddx3zAjmB3Rsti7fbsA5ZrrMSJFVjsrCFHY09mWPjuVD7UtCxYu06RC96CkcJTx7N7ohmX0pBh4v2UHL7a3alz66ey4W97SOPfqU9gvdTqeF4ES0q8q1PfrCtBvkX+0a9Sd9GYTpU2cLoPmAKF89bn5yR2z7t4GqKdUoCWFlrq8q92RuqicInnRb2704gskKOIX1lKK2FOSEJJ45nInV2JeMQTqRWr5iwXlJuFScfEtJTg7OId4UfomDmm3bp9ezsl9boNVJBW8aIsJJspCGTQDj3Z/lMgprZW6tyz6Wp3A4ABrtXb54D2iuKQn3YQs69+/iWi9kWOQU/tBH6PtVng0yRwF4HfJy24tQWd2Ieih++b9uHptOBTaEFA8B+sLPrgRD6GSPG8bK9guAWTK7x0jNs1nRg/39VfXnyVzzTTTOh2SmJ4VcF4ld+hg16/aGw7HuGASHzccnYjDY1rYx7Z3qJKCB/i4c0SFISquZrscwuFW7+Sqr8n+bynaSfBLXegZCFrLiq7j2DscGuCLPN5BJkE7Sd04Ejc4xZ/nX5OYR7ye8cGDXtwzOwXznL/W83D7tbfLbuXP8X92vOMb2+3y/q6vjGUJT3CRond1d/v52MP1+9lkrGchE+wcRramwD/AqVItw158WQOUQvB614W6+1LaEPszGwgviU/QBtLD0lVqc6jqNbG/fzyTnmnY7aIkxWI2NCsfBWziMkLTOhYPx9yfjdqtyQIVYEPf7psn3z0FDvimhtR9MLUFuPm21587qeuk4rw2qRU9DotMWRcgea8YrnN1PnIHpjJmfhAmh/3/XSMz5ftrmGNgXSJ9PtSlGnuf3ZihtKDJOXu+dY41/TrUlbnt+//s3jm66p6lNnwxirrzxxqfnRRq4s4HjWp+5/ImK3/tl47e/gdXrMrKisrN+IGFY9oIEB8WKiZ/iL78/c1DtDrSK2El86L/TGW5URwZmOJPk/SpqrrEG2QlM95DMZOKGQrZr5xZNYNFHqHXnEVNguchSlz7UjoLKIZ0ZRa7zZuz+7rMBmVjVPnXsvwSliSEbTA3Dnb0g1J6F+ydQ+RGxGtp1TcnpOoKrZEDokfiyi47vHEQB0tLadihxAKlsO52xKhnGjSdrnYPHsBNTLUHCpEAltFsPGYb6WxU1A3rfsJ8UcvEAISHSKRiem4Fl49RfVdputOZiMlYiegCX7e2mt2Q+9qcamVDW+1DWHzulKoBT7cNn5E4TupWHnp9toMd2Vvx+g2C2KAKf+2S3fsjM4O2IPHAOJj4/d6vVJpPURWC+7VPId8xXqXTGLBQb83WYMm4y4wIP6KQ5aiHnUVp489mt2RRUd43EIxFkM4OjhX2ktodyBTnWhy50kBbDFeHwe5I9Vz8tFGN5lg6VBE6YfsgNPvKIRp+GEd2a7Crhvfw797Gttvl6Z7g3FsFAiQ9Axnq80DKvcceqlORm1SJpPqTq4+U8DgdBq6kIKZfHBsUYeSiiwOP2RaxICtep8+jLz0JaLO8gDOqxs+52IK4T7LBn3jNOHvSnPdBkNtubikIlo+3bdP8rf2yR2Sn5msRepV4UKaDY/AwDRM5zCjXH7EDjw6jOO1O+YGW63mZ5Jugfcj4gcinlVaZQRdPzBn1de9f853g//55tRHNS0SH0IOc4jhjqNXQokPUMDVI8QdpJsk9FchRZJeZoeia+raMvDPzIGRDV0kcejx/Hq+5SvdlYsBVZDvzeCntEKyV7rBHTlEeOUZIMmvbCMyhWF27ULoxyJGQ7TP20IPc6WH2bb1OmtcsNdX2eHvHzwb8oWQpnkbdS7zuZDQxshWty8IGKuahhe30vFCjKJCqxuVU683qDddd7LdNhvEh+l+L8nPLR7WJ/8jBnLpBayLriKBNQyx3Klf4tk3DnwDAMHU8N2HCtu3YcC/n5AbpdsfIip+ebVUt9oT2/9gtp2AoYieQozaF9GAMOtmW7VI9ahV2frtpcSOfk6ZyFCb5+jwuvTSZbnzQ+rajRniEx31KD3qRf9f5x11iholD78jKmwI0tgr6R4Fzhc4jvAPtHgvUNV2NwTAxrh8x5I+s3rDWfB2olcMdkhHmDjNPEmGT/Q6+cji1+7x/Rv6OSMKZhoRnwGs3WYfHwXQ806MBCA0+0/1Zd+rLQ7VAsA2cSUYWXa20HdzjPaZSUjEssjEurnvJLIYKWRdpcKPLz9zcB6s1qjWaXLWmxmNUHa8pDnYrAT1nXhkrZlHMgf/hc9BnjOm15xhkYtYzxXlaIE94iFNFyMt0wz5B+bDSDEvawRxgpnfyhJ/hk+Z4lz+Dz/4/fv1AdMxWq3KIPY6zM9+0kcCTNriAgVtZItvoujoVXhOngFoKpFgoIxv12qZeFJ87SMgEQey3HpYdcLxA+zDMmWBJJs51ZyUfdBNv5rzN6lbnoyxyN941HtVR3LOsJ+VK5gzD88EX0FCNl654EhNLl54i51taeKczI7MsXS4bf+oGJ4xY3IsoHvAhHd4IDbvfV1+JdBv/zVrlPYZvnbfFXT389zaHqrB0rudaPWP7yC11Tv02LH9Z445iIPZBmnA/DU5vR6pjsj3uwUjMT4XxsNAo9X0yym2/h+UJSgGACeeisoogPdg2v3k7mEBd/qZpuAzSNDScM1BpzR+8po8cVR2HnTBkaK8c7aT1/gZngqozJ/Eye2p7AXWaG+yp+0L6937kdMlKnRfYqEsIxwhKTszMXVfv/kAQ7K5iDkKwQ41pzORw3LhadqnTIM33ulCAnCotbNdAhtMZMppp4I6zijJRMaDJ/AUP+CYWFK3gHwD3FNTD/P3nrB+87xjcuYQnVu8mOEYv4GujQeInPxlf0+RU7OP2N01LdvqXySdp4WUAFWNsEiL1SQ0GceA77pA5CjmhqsZ5kPUNBhdvMox7hYa5MktUxCxKmWNS3nEMMaGRC35wbTIhHMLAX4ixR9cRdUa4O5rMe1pvDUTr51RfxqAN5KGljXWcMM82Gyg0JJxwYnE6lY44TMjh9QOXZMtsH5c4m7NOro1BFwshhWz7xbtsHNghAmcCjiT6O0/7AMk5EJaYSGnDx2G2Vmv8VECKWs7V4fHZBq+tqW7rxhuZ+nO6g19D4KDohBDmp3tO5jjsGJd/6mHM0NNB8oZk/dHty2yE6HnXP6Okxbw5BE5GIqHnJFjjX07qzdLRDs/3f515vyBuFtPTMGSPHewemy4Ansz90nzlhxDWNiEX9A3nmFSEFDMrr5dJZEXt9+RV9q4wgbELcT5PAHxW8ARdLoCuzxr2utOogup3GthvPLa6zLqFJO7Iecck3ZI5VsFcBdGg4mlEEuKzLlLDQd+TfrA2+6BzKhpdDZUyYwm2vFUl+6BhUEJbTPl35wglJpgox3JPSphJmrRQW4UqGtZ3d2P/0bh54fMmDCjWwN2ar9U882fCE9f9lEfzm5WzDNYBTY4ym2CsZly0s3IfB1S02KkacYHgFFuVJ1irz8Gj4uXPVDeRLkb2hKAoQGgYI1lGwbs7HH18jy7K4GPogcfTQ+ir2Wq6GQAFbrk2iLpVUrMDHa/9Xqqn+DDNfL85PZScr/R8M5TKJKzZdPvYmz5Bzn44u+bbnw9iR5Jf0v+fHxG+FaHDQjY5bjVVO8LfHFdzVUfgkdfY5Xp0Je9vJI3p5qVmjrsAitQqUKlajU+2bOl2M4nh3yt0p9LM/c4gLjxq1YNgwkgqQ75iPyinrK+jbC+fNWtw946+YQAZgAczT4VQX64yHCwEgct7gYM21HpMqAkbhYfKgfV36I/PDXq9wjmxp9nJ8XviLmt55VGMerp36BHegvW9BDTzU3F2RENf+gwhvnjGoJXdHn8S9ZhAQHt9A2NmdPHMJTM66MLJs41OFELDYRNaWYEZ26BEoNe30xJ4csXXrpwmseXu/veFoM7S+1rx7sY2jRwKdaNOo/f0yU46aXaqGfztxG375GOv8haGm6dngnRswHrlXpxJTxcyepCeo+C8dHSXcKIB6RnYqXZojryvgnGpTz24jFLQwuiOLSMPDvFoLr9r6wHb/2dwdZe4pTxluXHkO5xtUQRC0WPu+GxhDX9QJZQ/VDNX3mcu/rz/5RdteUcyB8dAGoKAGCfdkBLr3U9sHIi4mvXt0Bis/5uBHLh1Iuyyo1r/vOPIoBJ3JMneSZLncHQ/3VxQOBmy/btaGLpJFx20VIF8uSUVUzG2JMsCMQzU9sWDNEFuG6qAxsPWpaOJqsIwRHm7VCOXgZqWkg4s995OJEnRhqW6gjr9zAwI9OH6c4Ynwv+HVQ3f+2H6LwJN2kEDPM44+aBgKPLKx/6OhJiscBaKUjiDZyAPlkpU5gD3GA7BFBvxkZ1rlKlZCpuoX2FkFO2VPYRLqYEnNYBDvXozhnCDIwXIJ/rIdwtMj8f7vcbdNAJg+LAod3imF7I2ngH06lO9b11D8nN/C7yRva+p21sXf7EiwP29yuO8V1EcSFRg6op0sbUyQPBavBQrAjF/AXuQD0I+dsVG+b4EVnrGQIhZeuYve8y8pF9qt3TaHU5xfCxTUCcN3fX/t0N1Jv7BMqum7fV/7Q700hYNjSbt288SmZI48cmyeNjNFVbtQMDQXFDcN/LHu4aK2A49ro7/el6EEpzMEJQdYgNSyt6jH0AE1fQizPjUAJUM+31O4ELwUzFUH89OlBUCay/tbQWY4YW3me6Dn79vtP1fEEQyq4qB6irAho7+UxtWQ00BZeL0+wIBHSjN08z2DHOp14bTtMBFAWW9GafurTSOQ8j9Km5A+0Omi8aCZbEOXOjTpBhn8KidvDMIo9Qnb+IG+MAoICaC7hpjOMx68hfaM0/h1ymiFbbHOaJBKRUti0eABE4uT+eRhzfZ+8ee9HeG4H31YN3JLBgzQ5YPAgFK3QAevF9tsTBT2JSzq7TEcekHkrvmsVYBZSaNRWApf5eWBoTEGjJZxdWyGNUCii+sxXbGIFLeFxtynPVcUy+TxUoAJC2l9+fSrPloiQmQECxx/eHKr3bFJhjoMJeMJVY2wS0sdPqi9t4WTCDNscEYKXtBTMvY7X/CgFwR/BcKgrCn59CA8zwmakymjUHwKyAwqkiIMhohKNgDkmYsOKu+P43TBb+07Wgbp0BwBwDpo/OhhX+0+HApO08ptRD1ThU4A2mBEDNlUOI/5OYAII59qLbw+Be4m/3/Rs8evQnhOIkf3SmRiMFhwqjRx3jBbpLZmswfNgbNhrOjgbBvPw0IrEfboOhoAqzg9H/jiIYxq3dg+QIHYLqhMaYyAqPGBQS84cbH3fUg7bXXDtEF7fPH43L41DtCwnE20NBJKzXbFbuHF3LEptwW881SBTYq80FIyGJ/Kxy1vxPsZE5b8OktKoeVSBMA+Z3MgBYAii5JAwR8yAIh0GMja3JY1NhqbvAC2NVCArGiQBD2WVbAJcBIYnqS7YANwCNv/5yLQAYEJjpUi2sXVLj7oU2vFPI2piWsa8Z97omNPHWQoGuCmoF3Eaus/Hti/NqzoOrlDYcKCGrngmBFRObSSDkAQnpnwmSK023q15NPI8d3lma60vreyIcWXHTshvMfF02OFvPm4VrJ36Qyvr8CcFsBM93m/8W/e4gkaV76460ekp10+3sMGrSy38Dfbwmi3ulfDQTThNUWqhMuH0nZ4ekBrqQQEHa+IHP+MqUpWfHfxRm7yGs5Qdb4AsldhgGBxhr4yHi758U4b3FVtE0TdJnBOm7Y0Mos1O64PhryWcJhmLHL2e2TE56xHq4CQlNzsEFL3SebO1AwaDUeBsi7q0Bcz4rru7DwZHssZxuyc5ZJ/6Jfm5QBeH0ZhMhZQFDBR7OkhwF1y8zmPPCkqTrwJJ49Lue56ois8CDrNe3JfgIEX1sJvjRSOrtlECBS1MHEnbrGhDVvI5iwUfoHcGnN+rizkhx1DmLgy27u3Z5tM0DoVjt9o2f1nGW1klDDK2RSVgvJgLDLN/UJI0LFpsy9ngkkGAnRBeRtZbs0uqpGiTkjrhMNuztqmzmSALOZ5TWWjSfSoLEKFoVv0UpFmCtVHAKARh9eq6803sSFSxvqk724n3g2pUaYgwGTkgLD84EIOgGL9CbUy4RE0qJ5b3vZgyO0/3h9ICCyhgYfad3bCVY6Vi6wTuZZnVriASjl4Mguj9nMfyKcZjR26Pe93I9Q8r8MWnbyl5KVvkbyHtXvnJVsiYJXO5KJ1T9VWg7fZBbAg55n+6h+xcI8vyD04n2CO/3smFywbugiVhcAnVF2Pt9KJRX2zfj0840E6Kr/2kiS1uk5NA+uDDizI0waJIA3lrGiGJTqw8SKHV9myI4KZoYwB2AvprLvfC8aUDzexKDV9wOw4wtyzW4+SvPBVxb1+iXo1i5NXzDYFqLPuHQblbBAxHwDAhWo6ZRE56HZT1D4DUOjxwTQpi4owvgmF2Y/cUwFFf7k2A2kIuapIAbn2KOfFmWL4LzAxIlXl46Fj9hLKPnTPZ3lyinQJ3u/hKLeDrwPbBB4L8DayxoeILnWVPN4oOvTqc10D8e0LIWrn70hX4ez6a/Zig+YdydMD1/WHw5wrimj/4dmPeFC4r9wxrDFnJNiU/N/+HI9pfJiRy+QZD3Xj9FwtMgesvfkQLE23crMpdZ/K6ecN0Jd1diFX8+YZ+XEa4X8kl3642uAVDP6mGGEZF7Ku4uhKEfMciftC6zhEQvW18qZiVu2DcSlj9pXeaJjJ1kzVb1wcGlfZlfPn9Idkg6SIZljvTQN6d54gqD2OeAjy3i2Mn5jx2JqN7B2oyQiCDjzh0CtF8VE5PLJUkk10VVWh/aufuUz5BmmikqGj4Y/XJyJSDzrbcapBYKYESY3cifp8cR6KiWmTK/Aw5vKM8nL76WQg5mV+zoPvmx1uPaRpVVvg5Dciyf/nRrmPPl7+O2x2czPgPPFa6sUPKd5htET5Altpmnntayus+hwvdlbNHwGT+HGjG9LITGAYYI3VH8IXS7EkHHlvHcmShPmYKAzI8L0LKfqwLhDP+aL3r2VkgSZULoFuBMBD8/P2xVtdDkK1QC8heY4GBigDj+LiTO086YsdJQ8kup1KuGIjNVLSABwC6y18+Zwy45bbG+rRlpHerQam/ohT6s0wtXQGsudyhmaN5+cc1XQ35gPh1POYyGov6DwXqlxKcXHn90DOYmR0n3g9BBFvUfS9YrpOCbsZRNr2TTiiZUopZWlU7xJHte6DJFQzLaoudwVqGun766voqWzXRlU4HpuBMj6F00QZoKAfPsuBhHWP/hcL0e4GJau5Sh+zcQLpx9u6gKwKGDRc+eLi+/gX59KQL/MpLcC5Fibe7D8fiRw/MzylETL9Px86S4lj/OV2WV90Cl3/sdxnREgqRsAFwQHFyuTI9t0uOcJZvWiPRPsjy4lHPtayMNsBe0MLay5phGr+tlqf7jRevfgrBudefV1N65NRteCP2+G+CNRM919qjVZTEEytilMYTfZLA1PQeJ6c/CriNu0S4Iicuk5CE6hN7iC/GjIFFBQ4ZMfmWd4oziEECieWBVJsjlwxlTEEcQHmlXy3OsrmU8zMXtecDB5viX46lPBoShoEwghF4o8uuHrKkwTbxYdiDDgIMvuiBLvRwFkQJFEmQdtOzyLGsqU2EvtjKeRM2lmVyrIxxYCu1Aqu3p9WnKW2Ia0+L1ss5ESRsph8H8pxfgKZcc8ByPvawzGRBhkVPAjyeXeIQE3hOBj68FHwOB90igXjup3qJxLW4xNmos4AKW7HpS9RYQOS7+1eUYgAlLwZpZqwASfzHARAAwtuA6XvUPPp4KAGijXKXXDStPB0F8i6cGY6UkJTAncExaHa1ekiB0bPYyLQKYACpWgVtNm4RoqNcoIARAYEyuTletWRSuCu0C1HEO0yvi5RUMFGmHRNVslkA8lsRCgPYxSQDuSkhB7qmfrfiMebZxcpjn09O1axdzHieXtuOo+jMJxbWOc7CByPriXnop/3GxD9xyCq7uXuXOz3b3mXcjoxu+0lmsIbIYdySu0a3/mlkc2ke6LfSutl0sl91YIzonBDvMykxEK5sNDpCcVFInoaOOP/lkk6fOUaaS14wEwikD+cwkVeG4pPjyfewkaSe+UFe4+U+TFeWzuKG+Wr2/cn1N+YCRElt5Ez+8F1JeW6XtKYceSeC2hOQT+bh9eIcCxe/cGLh8WJPizCdxNFrw8kEP3iaVGnIC324p6szYkhdtZqGkgP6NoPi2uvLeYHNpvSVcnuJPVxlqAEg6JIx+OcaqQffFwnRnX1KD91SojZjJYD7eh0oXn+3yyTKKD9gFfcH8NnLEwALoqUrbZ5s+Sdf0TnhmOAZOuOb9efhnpVciG/oM6ccuZzpV+PPMMtfhNOoAEzAg+iTzHB5henJO8/pbwLjb3XrA8xaRrcCDD6WKCxKQlVYxGyOfyL+LwNY8mIyvlNbNLhiqc4VMYVDtQzWsf8V0fy12b0g5+OuYfH6i/pWbPeNOqW8D1VrAOhBFCBfsJVDRZhkjWdRfKvDkw88zo44wfoCRJc0gOdkMNIuamWC9GVhmmvUWD4smAg9ztdyBIz7q0HytAgBDBQCEEijY22IpxcWZKJYlyDEQwJvdeKNezkFiJQoHhnSQ41t+LBrxEn+pskEkPySp+10LAJ5KAGjzwP+YZVYk8K8CgEge6H7XAoCnEvgy0Jzf+qXsXWNcrlE2SiM3iG+gq/iBZflBJB3VIXIFMgfybEjze90smnETbFRHvMYogOw2MPUZOkquQPEKhwAqvrXZtCjHGRNcxLDZ3iIXkzGsJvmrEfO5EepxvORUYgCv5wDpiT/6LB776pUR34klHg2lkO8/qT8TyYibk8DRVEhAfikbY6pfC8pwLAaATCEA2KsBx9DcJ8L1NpBI2izQOjYQKLIBqrbldxFaNPoC5IsVCEwewMTCmxvVy1ORqYhShq3Dlt9NqX55rxCpxSdMg5YCswqJIUjuGlXPS8Z0bPa64eaACkd4f6z69MRbaV2jS3+/oF9cNIaCpOaSHLY87uieXfXCAJ7JAgGp6GliNtYHnOBDPXc+Hkl//OgxgKO0nyqVBBnr9s7xP5D6tliByf7BHuQuZRtsYS1Z9gRWXxQ4/YT64kRJ2VYRZeXg+6cu8z8wq0QC06DjTT3C9whbsFHwfYOjgLgQCd4fTrsTVFme30kcWb5KvxKiFS+4LC9R7o+unJpsK5eIYFK1K67UF12mV0WRWo6kvMJnaadoG4mwGmwmo6daoYnzfSli0CyLLx2U9XQVtefPQbXghiMOGNn93Zv+nEBF1TMPXVUWxWkObrmip2OZrJjDHwwi7y1OTbrPAvunqUiymUl2MQIfIB4efHs5XqE+V5aT2cu0g1YjN5ugqm5v4ZJ9mH5k5Gf9yRsJMWR5iK+TTE9wU/WfQ1ZQaDULX9hq1ABhnW9vL+tLgxkwUgTAXQpEn3udwd0dn5nDBnWaGK4iJ/2VXFDArpXwde7KBru0jzMCUA+O6B53SEV7f8WvwZRWlnbKQFWTD/Wn0CU5LRknMplX5FvYCU+VmulDjweXsPcdj2MWwEI/ccFiDsM4ZiY3xNwcAH3CxSquoAOauJMBvp8Qrr6a2MPCosPtm5fA4m04ycrm85OtkyxUgAJk47SlyHsxFnmlMEVCyrSoz1n28DHbEfC9UotAbJA3L4qpFceIpLAwdzcofVGnBu88tOGyfYOdDfaTOy7TMl4jWffiOc0h9cHj0NIT6eZVBDDTH2NtmCvrB7njNz7NT7fZROAMFyUOnMMi5S04p9/0ULFJiXMZioTcFTyMgadaXB21FFLPxDdlX83Q63PABOD/DADz9uyWU/sAZrl/u0NjL80XkidYvOSk5RbHjLsy5s7UOLbXSnlzgwCoueQKqgX+7JeUmCdySrdcw2edEfeWci6iO/FlqDeEn+dsHIn53RLqrBmoPVKWqgapjsVr/JY0ni8CZQuy9TEKbBmXfCqMk4EjQSrnWiJrStFUX8C0tGl5BoU9v4oRwhIg/SLV0TjcLLwLH7IJIqFFAg5vHRnvidyTdINm53o2nt1r0pQ058hYjR777CgZjE7gcZkf9E84qNYyyB7+eA06D6fOeUlsXvxaK1nx+QX0Iv9RT73fJNEp9vUeSHSVEaADiiCK6bmPKQbvH89GW/G5eBSmq7zWH7B1xcAgVR/uiS/cLIbujmk8xU++Ai5zd+Y19qK0T7i60dorJqXP7j4w7bsQo/nHPYPBNTd/tI76P7RlnEv7nY3cfwUcMH05nnaT2Dm+txdYrDxUPl/Rtf/8cY358+3t+Nz/A/6Ds/2lmTV0bpih/CdGM93E+6HDR366HO7woLZgN95iNdykO5txY7A9DHz3yR6pm7MQOzjcNEs7D+3J9YdY6WtKvcdYh8ELM+e+BP1nvwS96x/H8idjZCg1Pzs0PmYAfinAvmVLHqGvfXzXBaO7imaiP5O0v959DfdgWlzp7KB540zjf+n4QhqA5P5Wtq1alCyg46U3rB0a+m6jfnkVgWUGHQ8CvN3rbB/maDy4prMzwmLX90yxV77FUHLlrdpsP1xE09Gb/87zwgiQM84XYKCNb+/m6HCx1GpzxnFY6FvIJ2pTw9CL1VknRxy4frhca1UOYx/uWjKVBbhTqFm7NXOlBRi7pg51rB7D9shfEV3E3DSB05CvFxin5e7EUGTsRoCrIAPj9pVdqwyTUEyPA8VkDhSsE+OvFsegqA6HZXjlUCyGxbHAOroym+RSdm53L/QwjgPBmRIs9GpBtB/7eTbf3WPJDtuttK0J6eqQUfeo+JnCe3utwA1NvQRGY7nV4SodzXDMam4KcTxCh96Gc+pMrjnMDDYZSq7YLnWUy4mVwAbLS03PhaZgWrx23XJI8m2thFNUwXetVmV2hKbD34uDXvbNDTNwsxEcNYICIVisedm6mmDlTVP+2ddp5EgF+qR4DooAU9VyJP2q/oIMFquWhfxHKhi90MU739RNCizwnYje0F49Zp3AS57mq5Fkhp3WfUV+PirtAchAOGSQVeQH4FlwScnBID6oCrjDVwDTdD9utvQ7bxLIPbrhN9qRdeA/1s6wrl+LjZFbxPLAES36qYH0u5ByJVcKEBvR36ZQz+b4zXj+sRn1H7ut8wDd37Ml7zT+m+U8CZvKJ6NZP/1xCG6bPl8sy47xAXp1ZR5oH5pHGVwgIVWOr4pszc5+CNnf3mlD4bS3cg1H/2F2VFDavVtv0Ok8tPfdGVNZQHvxa8gOBZBYHD+3hO/Fcxyd9ULUMqH8FiaA904JPfTu5Ba6TM5G4PuBVJGAz1mgb1buQn8tHwtZPcVttq+HPYmF9HlxL+G+QE6cE1Wv34vTTCEtNkbY6P9soR4AtIUlFvEcKYgDxlx14HCwNDsHD9dCxDd+dONBJ54YigjTNWGQUAzIOctatI8r+0IluXdKA2M2WtJ8SdqglZRrVFQtyu4OG16+oUqL9lsSPyFGhsUNle4ycJQJQ4Zk9acon05tgD56oVACgUIdnNN410iCLoEPoA1W5c8FeyGBJfo8aOicuwp+uUURzdqSMyCimrcDA8XNgbmO1B7bExBcSLLGCGNB54f97k6KfoTuFuaTLSyWmGJ1HaZBRg8SHzUgwoCPWjh+hjDv8fbCzu3tUkXO58NPqqOUV8Z3w5lnusX2eGYXjhKUdD6wSbgcLO6cwkWGdNf0kGVx5/7kxXvAPNzJVz959celEJO1igq7OAZBycv/+S5fd9Hi1qHtK0uSec3C2tWManfLG01UQzcG0tc5KLnKMEDM1uHPtzkpRt+Hfn4oVGoeMEoalPGxXTxisGjAT57XnaxB6RN94Jevv4IeWT++7WMdcByAMSiYERKAReP2cTMjTMiqn8UDqO+CrS8IPRh/CCp88+Fg6lNFP56RSR55CnrC+vtXbTPW1+icHiNZpGrW5xGL9WQS0Bc/iAdKiEx30AZ1Yp2pEzNCB0961EZDPFR1/pgaS76QTmJWbhSuGYFHH9tS5IQeqPkx8zSiKQBSJ94odIFeWaW8Mn2x1pERQoWdBTq+29jf72g18Jc4W+saniW1/SlIgLUeq8s9vjiMX0QwCoVRbB1vd0t+/J1fGtQ0y6Q7zCx79kA6DGxR5l8dzjkoqinM0FrWyj4T6rxhTsNF5N6PXosIezfMt4d7a/kUjBewMvyOwmDOI9U+KG/0n0GdRb5Q+jfNQdHYwuEjpUbC/ij23YKlK2WisgFKtuGuIuVMODmd/+yEy+rJePkabuy/najEkkciNX9uiLTc9WUIjsiB1bDbzp/kafPpmRInM0Dg7zoUPL6bIvuNl+zTT44LB8Rx7UXE2jagbDD4x3LYuX1okdKwIMm8xAmwsyDsl8BWmO5F/QOUFrIx2oBkG9hNzuXrqKtb+HvqTb/15PKeNC3wkWp9djiHna1Np4vNSsNJgP00moCXSEeSVvEmIsmqVBBK5ozfZIlz+mXHRPJFW9QQBWBUUqKKbKAPqusnfxxN4sw90WWR6TJWPHBeVCAsAKvhW35QLXiXr+rVkKYsM7hb8+/eRzigWgLJ9tYE7ovPM6J25PbzCIszMY473XILsLv6PKZOzvJ8ooPf9DvrCX4WNxu3CCy5giAetcAONN1quYMkoDaJLIQQHS8x0LieAkaxKL79H5HoJhi01/VcRcNeY1plg8nVPXLNl8W88QXn3JbMkc2hlbnytIIYkRhK5IR266P2ueBcziUeU6HlBQhMzs1dOEKUrJMozqrnSx5ahhzPAIDcDsp/vFllGEILFWYKyjAxBqJu4138uAxEV2C6L/S6zCGshnn+ESF8fgqCtsr+YWqjFmaYlBcEjW6v0MS57oMfcvgpQvSbX0WJokgexzsZs7U8L58n13JANFsaGquSCSLQcQOupzjSdP+9541t9JswHAJT9L3DboA3wsthjhuUHbWtIgH4pkyJDRnoEZ9bEQFFEiZJoNc3cSTnZebfmLQkWqyjg+EzB7KSQF84G6CovScYMlECR0bjZ1Z3UQ0m5h4qUKJVHmdLtpF5h2HPcRM+evqZ9zTk7oAE+yvcNFpwlwTNtqkgmnVTanwn8nXQ93x8uB8u/psW/pKYalPUtb2i+5bJJgTXyDZc7T6vuzFv1iF1oFJjz24t8UiodSPZYggv7ApOa5zOsHp+adoxF7Kmfl0fbbFkdYgnbz+G2f7TKm0NonY5n8CL8MWhAbK2iwY0URF0ckBqOJyNp+qLUBvelKgtZi8GKZoOE21oQw1cFhnP+dNOXLg47czFb2V9rlD4tAqXNe7xWFSEXnLXqNhO5L7zmkMp0G/0RpAVYMjdQHaXNwwC9afKrMd12HBo5Wn2vgHcQC84xNVjAItIEi7qHGOC/Amey2tANMYum7TvPFLpK39NCeoZ4iT9FXc8IsKBI9G8oJt/lIWhckMIzPo1pCaaywQhXACXKErd29ZLXP7HBYIgm+DuTmnj+U+HVdRtW3B+xev7Z40j4WPwhP+Y22y4xVO/PLQlSvX6gdFkJaSDup5Fyq27Cwr9ofyz+PAQLsAXBE4pKqe4jvsKbC8bK6D6ZYoiJgfSN5ICCNuDeQaUkwxG3LKIklMBJDuunupr82EL4Qgp4q0dDyT4NHL7qcGhjTIUhI2uozmoQ84Dv3VGGeYqo5qFhudJeeAJoSIdOBFkOBiCNYY69yb7a+ZZvjMR/ywZVNrcJ+1ScFm4PZmp5zWzfXEiLOZTIpVwYjm4mKsPaUB8q/nqLHI/9tDnM/vtWwJcauYR97y+iXtp4vehTKrd5Tb1lcaJuJ7Sj0jNO2RoaTNr7zfCqJ6zUvevuBDqQsrpeMqKE2aZaR9i6x95H8w8tanrIbWU7+e/ehg3yA/9wYQx6xYSN6WmW1nu2BgbDir/G33dGuwBPC/x2rMkeUu5cUz+/9oo53+NX9GZbO/roQ3+5JrnAPZlpcKUD3mwavH2SRqTPn8LuiZ94drGIDwcliMNkUaTokny399qNRt/GOh8pmimWEZ+6+zo55/u7mBRZYkuG7NHoY/QXec8Ayuo3VB4mG+7vwcsfV1VBEFyEAAQ/M8odHcAKvedlSKyOa2Ly3DK0SPw5wkQSiXm/4ELi4ZX5R3PDrwtigbQL4A/Atxg94z5o+y/XeYPTrI/zCuGvnYRugNOCSEVAMqyn9/RQUi/mzXgIvS8jnBqEYuoF/yUdLMuJ5Lv2knp2thMJj21QpFPOD0BIqBZKFXdpE0Ts361BNdykoobMqPc1EeMwGMel88xebM0Z1BOVV4I4vK72W23yRTQ7YbYM+km990dBSoBMgm9Hn05P2E+iCMqSCjGWnZwWNhQzIHC4Y5QuT1Nm+1x9glfja1uJK7xEQgBfKtsOueH7VoDlXPk9FdSS/rJaMH8XqfThUNjv7tvgcYfHWffqGP/iM6h+DaJveDda0VDxPh/d9FN3n5AQE1lprV5NT3Cz4zzjV0IzXjrJeUmWuNy3+5pgYs2i9+vhFqTYxnBi5bzMwVfhrsihZJc9mOO+vzJrdkxQzj0pRPFGPL6YlQLxrWIKqj1rr80ThlfMxckMiGlauQwtOP4qIRkCnc2jHY6Mi0hprc5Y3aA47mFIUqH32wijjN998Jg/YyL+ejyzVsHiO2E/U+0UdfqykrnF3oBV7oYsiyZpgl53Uu+aN5rw7lW6PIwiYjLbWL59x5murl0QG272QFx8ZYM9urtLgKlx4p+JL3HmW8dBAJgkZGGdncyNWXhD6HX/36S4iMA/CpUMAIOFmA8Zs7AUGMuwwsUw6PKItLHC0BUJ3ub8tn2vcqN9dCnA+wnt2BFW9wuQzfhKJh+OjJH61AeAJgxwtB9wDMrOSWRq9wznYWJeLBU/s0oVaekFSL0sEd88TtdTfXLOcbZwSvbZLbO4iw9NJYtvSWCbYxnkM1Ok8lKFPi9L3fjWRBeTvbir3uFzeCe+dQaRjuA29AmGhftHZtMLFhtQPJ9JdxSbIw0N5iZcejsTeTDc1Xwh4uq5uOjuvdQPvnOKdQS8TOzWwLZH5R0lxzPfbF7nhme5aGz4MbvVRW2dpzjYyG0U2CH+VmBl3HvyuCaLRCak4EtVUXQke67Ivx9k8GcMZ9xm/VJ7VD6uu5qE0F6bM4/UIq08/XN/kjxm4PWxS8yvXydscI/UE6EOkX3IiJjD8mykc2HUax43H7wYarJmeGwWxx8V7xHpTnPJQ8VKJKVbxQ1iHRU83wb/f80L0ek+cDRn6bD34PijmfAwyH8euY43iVI4dTTHOYYjHK+kXy0AP/jh93O35I8YpKDnt/57hZRQDsf1PykiUbKvLDxqRyyzxaOJu1uG18bf7ssxXwXosP89FclML7o9g+FxulUzZz8LV4wJoZ8I1wGKmNzEVpdvqCcm4SbOwaVZKD34nJJK60KbstaXT7UCRAJONHvHHiQvXC4ZHbsPIt1jFm6Sno9DWYrl8UrgS6/mQfbA0X/uEEcu9vAzMKH/QeGhfnz5zYmbTRh6a6fU/qXijQOlqJ0RcA3J7QxxVQeHe8MkXCDnjxBHcuUuoGuBvxC0BNCyqDT/azNVvqnB/BUaiiK2pJK3ksa2N+fEkrtpWwleBS2alSwhHaK0ujviQJLUbi7X+/r4A+KKoy1Am+LIIUH4fwVkNpH2g9W/vtSPh11IAFeYX8AC82RmCwdvyb856hgK2OMztO5A3mY/F2zN2DryyA9ze1Eqh89UyqWKm6BnWs9vh8xc5uMaSmmBzam06+QeRF3vf2UX6Y9yecQlk83qU+mfgXhFrkwckPLgtoUGoC4/XRQusjVdJCjwYrfl3dtuWGPzl7IeqPjbO1tC7yqH34d1vVM9rT2n2mKuG5nrHyWTcCqvLnnK6/CnvwNKkuKCo/v3D86vYLQxuLDu9CB9nMFWewJtG13L5BOLCiF5OqN/f7332sRR056foUvifXma/gVccJJBpQLHGeTPbg6ndAtbQUtBBVFeRKtv8vXkgI5ReGOLqA/a8BX/QD4ey7CfzXAX4bv8Hu23x2gFuqRByca5oeInbdSWB5y5Lpz35GT/jpfHLoK0e+5wtAg4Pf9kUTPQBb/vb7O8R8B1lvwfhJFZqJVE60a5eLNNZJ/y7oOm1zIW8VV40h6DYtW2AWOSqE0n53+k1D1YYANvHHtNOiG2xhTc4eoNwmbuBo2N2mEpQa2t+/3qYnIm7J5rt4Mao/kQUDwW37Qwx8/fEwSzan1O5lzxCjfwZLue3TAZn65xppq/774kmvzSTXMgxcyA6W5ptJrCgztqGftcCSCvUfx+wVRZ+C67n4QlsZBqAFCWzcIM/2gA4xgtWGMhKFBpq377abkuPhQXICTGemEarGAFQjJcQV8I1XDRVqNCsBnh13yk/y3tK2NFoAstK/b34/iQZe3Cn07UsLWD4itwQ7Epdb6xCRpDIybWrXlYDGhySFgm7V5oJnV+Q8zjTt8uJQXCgAOedAdYJpcdQDm9QP0zZ+GQS9L/TFCfhHaf0r8zO79hAb8ksEv2u6p2sLfNRyD6RCs0dL+a1hi5TO2Bx1CEwmQa3eIaTiYtmMQVcoYmofN1v4D6FoDJAcQ3QCOQeq4Ie6u5EZO3rm13is/fuXOo5B/qvKe2zTu5dt5cbv+ycsR1FdnITIxH2GI8RTdhLczDiumjGFue3v6dQU115iWDXmlr37S4L3202XV2xj4z/2Ra5DuVt9rVLzIVq1073kYnz15PynrbzlNxII6Pt7gwRPivwdjAKAvlFMHv3BYGuj5r+vJL+apAbw/DmU//fVhdNgtnLWqpxCgjpyky297F6sOed179CDWg/l2QjPM/GFpHw65Pfgtwb10aD/E5Gd2FDcAEIpw7wSNFXQSPbKWCIwL1e5ITs1Y0T1CdohYe+ZhiOGXeMTe/tbHNPb6IG4Rjchy73yIuVI4f1B+3Cg1Gvcw+iscLMCnVcJgdfBlCXxbMD8rGC2Y496cnrazmSBtF/hvteb3NX6Y6wyzJV3M1wOTfyFsZ3ZA9amUEYPiWPguNk/J9MN6m9jz1RoOgVwa86JSxZaSQXJKjbS9GXboQQWjQ6UQ47r6icGWJs6ciqUmjlzxv0WSDRbReKQNt0bSXKt0H9OX1KI3tiy39pxRG8Z4Z2Sa5shXD9XPJAS3pecqsGGjm2sW1EqJIZqFyhVOTXhKKj3FMqbk75g6zBWAzxVPe9F4w9a1Yu0o1gX3qSFXMSIYwSgIjf1Gd/NUcIhhQxhpABUrNmpjqPiOUHrTyhmKRym9OBKWhNgurr2JyUUQauy+rd/jtQ3sp6TGa8+D97EB7vlPnPiBDRMOI5AyqUYKiy3KUNCW+G/ClnA5LI5RToK2w7cylb6sECtBxox2ondlK1euEKs11pOgXcAssluNepx4A+dl60OIxYrNINgxfhCqY/A48RabUbBTrBB6VuywaxDgX1F2gp3jU6YXjfY4cYsZCHYhN8qUwQ04Wd9p1OFkh06jd5zss9OoxcmGTqM3WPbVadTAsu9Oo1dY9tNpdMLJxk5th5MdO41eYNmp0+gZlp07jWpYNnWKT6ajHnYq3/fCfJtw71NGg8x3ysCp6pG6stsLk3jkuinjFuFdzUgscrt7xh+P3G4vzB+L3G7K+KPMHzXjl0fu457xyyL3sRfml3KmyjDlIp2MBrQC55n9RFvjo6eDrgTnnnvLY5zVOs8tzpFz6AtPM1oU/7H7neApU2jNL9WM/mk6UY1k/5/p5l/KNWCF0P5jC1bS2XSr8I2NLJxArhEjUEGFM1aUI5pVLNwKWo6V4hYRihrihyvbf1LY/916SLrPNSgojhQRLHrs5gVElEwThZF80O0Djt4bTFAkoc4dFJ5wE8eRckSFX0Ghsfw0bXGZTVxD0aghASKexgqC0/34EdEJSK9iQbpfcaslsO/VyEDV4k5ih7gp6bNe+NoOrwX0zvenUOk6sI/Vb6R0+JV1Ron7ET/e6TUiBixzwMDC2SCQiOlAFosQ8vROrLFq4RAg96eeXrVqNMWWNJClxS3YtK/WsjyZGqF/9wokUFTEYXRmAizilAjMFEEKJIiw3AnsQJL26EkrKDT6BgzSkk4mEhGdMIs4RSF4JLjGAnOw9BtYBkXpUEM6K6yaGX2rPngavZETkI7NQhRyjQiFGNIP/4iUjpS60T1iUdFSHc2EGa7sr++w9VJbIc6BiFA429GKZeS1A6pFZvA+O0SzBkd009DrH5xFbBf1CrRMv/+SuK5nV/oC9tFfEIHKGSjaiORvOn9nycIJiHCQa0RXEFzru5+y83Ogotn6AgdA5VQBmZhwmkGMyJSGNK65JSZaZAcDyjtEYphNlL0IWcfA0RMLykeyUPezQdppLSTp9CuXrIYkDaYZuFsLdnQjPkpKkL1wf8DbyCYyVUHRjv7emof0syACo+kCbcI+4YW91iRuNyabFkab+YSnY9UeIFIsFzo21iVX4gPuFHsNHLvdcvrZQwuB+OsFo5PWcsAEZUSAcqzsiLGsJyus+z2t7+mdTccEhRbxn+DdT4Skxb71o3Vs7ZvsqbQN7SJ8h3YWZU5RiQfiOV9QKylRJSNIXx94z8dyI6hwMsCF9XoB0cKLG2JEsFRR5NZ+EsgWWq040YM44lkPPOumSC5+NTjZez2wkGZADlWelQSIuB7IWrCGNTlQAXZuK6/jbq1l2MPw6nCHAQpOFwuQkv3wMCKbNiyu10Q3T8iRnL6RTXlEGzSINru1RXDaJQTZaeFiOH2/SFdSdN84RHA34v7XPEpCOwEoPMUvx1vX+Ho66/547mRneE6Q73JR2mlbn6L8MGFWZMBEfOTCvbV8A95JSLs+ibFUo0pCyoKYm9LHDZb8dieCyL0gIxzezgYZpaZ5/yHMAjmjyJACChmFnCAboli7QrbX+9r0iGDV2IhJJIFUy+vxnJ2WdEJN6kYTVe3kCosYfV8CEbCB2BFTizMa8ZQiC7kCsc0xBFCEiIWVGmmqDinwCTp9Z2E/jdgvBDy0asD+KmDxQpzIYRpFhUKCBqkWS2JoXvLWIDZg5PDpeaIusU7rMmFnZzOcowYU6iMpYwUC2hCKFYJCoU2yq4XCTAjHQqXq9V0u/E8ZbfVlNcA/v1UdAJl8hgifKpD+WmUB23vchHXa5bVEmaVoG9Npppe6nS1ET6G+lRhVmuMo/br8E7NgkJ2eNXGjB1KoT2hO8iVtouw+KCyghMphD5xHlcnfCNW9a0lZJBWRbRGMAvQrTlPi7AEEdVKVgYdWqcbS0oxgIbr64zvfqiGBiCGDqUSc3GCBgs6nEQoy0+0DTBHRXhaX+GwKBUu5O6t0+8C7MVH1+U61X0yhOJkiAiuWsTLJKlCya1TuPTHSONREdObhjXDgkQ52kV/TmWO3kwB7q2iRlxQ5DSEUm9pdTgx9eG/GcJc17Z1Athc2A1jb3rkwix69g8KcMEkQNoARSpEEQyBLw3dFSMTXnLNY5GI0lQE85L0LknvGLDitgklI4I3E8tIJfh9Fz2Dd+xzqcoR5QEQqMJ0Rge4MmaPqWl4KmDaWMXOgQ7LWD2e/MZTT7wmM0B6U2q9FgOn11ku6ip2iV2ufTGBe5jRaOt4s3mPWDZtbKwvT/aWZ0Q4/5hylnQZUoJg4RQaFnskwuBWz4BW01cgmUi4EgGRGZv7qCDeMMpRMhROLvglht1k8TNrRY4y2auxbyDEIBlkrNbbEIaM2MYmWlKOBeCTh7cu2TRhLEp9RxAbV4Qd3VJdvoTiwwghNcVABXIjJjBGRWAYS8IxOFULfBeuvfPvQoCD6vfu6jtRQrkfi0n4x6R0X/P8y0iZBj1298ZKnr4tXbA24UoMw6JvBwP99vMEsNLVAo4FFH8cEBZF7uF+0RWV31qC9kdXOHTwxbqedBhtGNXhU3uyMMnU2oPn4xcB/ByMGWHbtq/4/xXj28fou1ZrwI7qs3AUWqKGEXQjMUAwebttFdy79A4U8SghxjatOARcWnqk3dazmAxYlmjEAlkQzBCy4SVWQx7p6vItoVl7n8NsAkZd5AIFuxYxX1ALs5wBBevynY8HOSOS/HYHjgUV55hFuK3zDqtfxRjh1+FXfU+slwAyeAbUaknQ2xSAWq4r5dPkKSmb1AkTSxJgIdUq5CMTPB3kvERtAPV2XiSaXUkVpLw/SdxI0lu36dREpR5KT1rIX2MRrAXjpyhynJvJjq6QZfGhhl8N5OYteqVphZJRYRUZSJJwsPWGP6AFHW2qfAi8sYf1rdJigMMKxG2pJT8RE/+Kb5yy7WRJQOklLQJy3zULcSU8txUIyKWskcWWeQtZyA0wkZ3E03AuqEEkuza0te9kYKiYBgkaEzxYLZH+fXKkRx6SFnvOlRZ3ayaqo8duxftn+bvSQbKH5xyu8BjWs2090NyanB9D+38nFOI/bEKIRKFrEQnhNqomlbFu5nPquOV2fP/hcCjpNFiYVT/w46gQKyYHl9QnBoLZb1+2vzWi9Hnmqf1o07WzOIoEvYVRQ64mCqoiC4lql8UVjTeJ+Z/0CEFHKFWlitC/cLZQNpQyoSoUimknaiq5kHsVkNFg4uczDkHzrWsMQFxxIflE2ReWRoZQC03d8qRoU/kp+AblU6mQbuMXyV7IzmstuU1i8G+uP4FDtH1eYwJvgDc7aVSmcKehg2XodadcEtPZ0QLjqNFIuLeZgRGg7um4fvO6/pOBw5Ytyq1FGg+vJY+XHUmRwvSzQvjgo2KW2vQXsikiJrmymq0qEb2dvDBcd6MilOhULKNY0jPih8TJNEh+exPUIMEC8kWEodmf1QTtCWwhAGZ6qCLYGZK0Wh74RBSBFF+HLRCqFtukNif+2GTWS5JDdm19wAT5l45UjMv4lGhMIP0QRWSZ4WzW8uAGFkMiqwHVyXKiCSSKJmFM+2SIvoXnL4EllNlpQTikCEXs6RUU7PgU3jmxaRUCsS7IQGY7/KgJty0tBiCyRBFFLcxixOril80AxPTGf0ND+nyXmlzGPVfedrpI3haRm5CS42K80uCT/gbqcOs520wYZFgqgdEXpDWGwbV6r62zxIwG1g6Zdz1B4ssmReM8Ppvw8IHJUuBuMHJex2NV0nsnW2A4pzZnIwjQNZOBYtKqPl45uqkPZx9aTdFktBJJNrx+pvrrg7YV4HxMYqWr/7rJbqmpw9Ix5vHdaSv0vKfZH4NirZ5zS+eXePbpbxA5dvVA60/a7xrCeAZeRZhW/Ert+zPqkSVsjzM+ZTP7kya3h6Qh++yChCFrYGVAoStV+6cSQNSJGe80WjGrBG8EcXqpQPPjSmDHLUqdo6QnVT53C8z7b8ZwrweDEylLeC7IzbS72D1rRcGzadd3Xu2mvQshaz7btSoI20jVsnIbfWZXTgSCp/5VLDDUbQObBh9CAT5VDWZT3HNqPPYX2sABlhbfZpRPclz/mPNCmsgiKwksVMnnTAIKdajWpy1OhFmGvrYGydrhSHKLEJN5bTnQByidZaxvCLdI2U8Oxvab59S7WbFIuCruSmIYns90g+hkHUzL9uDpUy60I9NKwXA4akV0cRGnPSX6ZPCPUalDCoW9uY7g/gZtTBhA8FmlMj5TivVs1NVhJFFsoxiTskuRuhKEKlJb18RZDBGMyT4xw9eQ8k2BeswbRHXqLYwtU52Ujb8fKCBY8hqzDYQC5v0CIy7qM1iJcyWJsl+7QXW1iXbcO0PZsaxsBPFAjJ4DdPYgGeZ0MVYkMP5mODaU4kr3HBLC795gAeAZ6RBzM2WAzcI/EAFobP1UWg8qbCEiWo3SuxVbLEE90TgPE7t4PDW7L2ihKgO62lcoYUpQieCgiqmYNIpolBNEe3DlclS2swWNLVcYxqKF77sXopq146k7RDh8UMQ0JEMdPJxG3R66jNAe4P+6P+2AyWU4GtZVxDo5fjbLH5dkOeAGfth+nUdHfR+mMzmCtzHCOO6aDtd6j7ODofuuv9pO1mpfiA4G5JBldVSKiv9ZC6VLDESxSB8ckkifaJRgdo9M0wlSkarCEt9PY/AysTYwEN0AtpbAbXSoziQfhomUb7GEngTQLNlXPaDTBgEmlXKMOEh5p6dVU1tZs7k9Iu/Mw6+dt59QT3xCJdkeAB+SknChCSxUFVFDbvC1TJQ0bUJqhiVazwMohkPxf86/DT12+qpUNgXr0fiOi6DpZnpDl8cfYcTcO2leywBOlWojGnhUDd0KPlOmbQ+9uej0XqyO/e6UzeaqEtLTp54Iqjg/R4KlYn5REKZMqsJIKja/19EwFVfvCJWheHqHCSQExw+MgaIbqo8M/AIYRWrtAPU3h6DK4L5Zrff/wWJUFvl0xABaJgZfHkYLVQvzculYsNokRg0KCqxrvqkoXEdncPmQtfNuOWKTtt/cpuXuvKM6XY8oVm2AIS1BrSUI+JoYFLs7wd2Oib5KOLuNrQHBVRA3E3O2kwJCY2whqWhhUdJkjK1z//tQbM2eQT6L7qbfxVA81q8ma033uUlB84l0lbl1umaDQYzO1CFbLM4gQHam7enF3NWvkBlpqFetxARHrUbq6NNqjEVyhOJ4JW3SLrltBcBOUdOMhFgKqUQvdgNaICE8vGi6Rar4idTvBEgRxta8UsT9BXxXB8dyI0ySvaYej0WJbhUlCu3HXhkRUQ0EtTnqTjV6iSSlJnZzPBD3vL0LFqokNTCqyaMpuwduAilWIQtHqOENgobEX3ISWmesj4DnSSAn91bnvDgEc5AwrFkJGDuOTRacJ1Ox1qi8nnp7liaWGqFfF51+KuHsntbg0osAQ+iXVWMCKTUJL3f4rqY8GcCMFmOJJlTKjCZwy1OVQfMFy+Tjs9kGsAzRqoGuRPY6eTeWPTwDwRWkIxyNVeKRlk5FPSC92rIwOTKIcy75lcNZFdyyNpjFjywibooXl7SsW0WBLdGFVtIhNseU52B38LHvSZPr2eHhNZ9Nkm1AiIhN3Lay4z0CUo6XFJUGdlToy1iTiScU2zmTAG7HyfHxdwZHwn+kCkFtAbrFW8CaCduz/7X9jWcVuO4MgG4JTOEDEgmoDCjJUdNzwpW9lZ4VPBsg3xwE+gSBfH1vIOXNo8rxeBAa1spY5ocARaFWWMhLmCcAOB4FriZFBEr/zQySB3tMKPJmUE5GfLDlvWaxmnNJSB6EAWs93EBxAk3DAAMBoJu3vwjQLr6YqtpSGOx3qzhhq/0QlGg5io+x/FpoKncSWqjxeZ62AIvvzpxW73oX7XLUfa3uViOjjb4TNCmyOiIwE+u2M6gYDiZm3imyi8NTEmigZaxC1Veei/m9zef4pd7sz1hTbnddXeI7ds2hM/gTkBUt9dd9sy6VNEonTVPvbq/Ymw/8nqn87Ai7aMWTQzb59vI6I75TmjObRlRTqgCbF1SlcYkAp8Lq/vP2SWs2oYZv2MJ5k07dhv5+RFn+nfz56eEeUTMY/oejEdREubpPT76MeAkMc+S0jKaRel16JCHo2lEBN7SeGz+771JIEBR7sAXq6RfXH8yPVMy830Q3uhps6K/VrmlYNuHLFl1tfHH1PF0/rdtX5jkTejgQlj3pBGSvIiiVB+tIUhWqPl36E0SFfCFZcNFOUAqbXAmBwVxDtcfcPcO3ykwsn2brzyzVmCJL29NIIAWrQ7W9/QL6vuv7lHWuEJDrpckIINLi1x10jBOQT0fcS+1Y7n64djW8RNV+BQuEpkauJ3WnmBI0nmBqLxFkXOl72ID1YkJtzDrmLQPlTDXE6prhnKP5BCafVT7BY2w0zQPxPYVJUUMQV2sqiFXRRV8Sg/IkV4XYAvcJyxARAexxkoTGaW+TFdfpkbCKdQ0D2cZACabF1UmAV1orznuhPlh5g1m1CGIlZYaDryEZ/9K6NDBimoMu2ARWbbRo7DvdrVIIQAJXzPrFG3XoGEY6f8S4hoORWglBU/FOuWajdH7hEG7ls5DSuhfVzWxdeCFGY1iY0NnQEoA19ECCJv4M/ufcdAhFcRlObI6ImeQaSyYo2dvknWA6LgIyYj9iEomYzi0HIrpgNB/Z1nQVD2W1vBBLmKD0RHspxhCJBHdCG48meyJJjD4Ao/8Q7QGSHOJk+CfrEe5PXTyEpcRKkWuUYs87wlVbwHQiHPqKhklmZKRgrY4uIOU/zBDfRud0vinMXAC4pZJfUx+p8AgsagXxCAgLYJTLFR75BmOar1LG2octv7fHfcEFGjKsgFQdin9zgS3gT271kAFGT+aBzmuv+RvBaChqSpNdnp/nckJisIttrRd49uzuEp1KqnLSFOaQDe7dOKHW8HYOYGuZL8g1CMlmNeyIThxrnynmEwCjYBAIcjjqCokrMw3tX7uwobRZtZYeGTi0wjkBlgmcywiPWvqyfkKY2EWeU117bBSjsIhCwAU7PdZACpoxr4N9BMWT5BmHbvEx10qOCUCz8tkvC1Ys1uummb7gMgubKrf84HMcW9efqJ4qSI1MWCKmjZIsitucRQucYmWVC3zEC5zNjrFKG5IqAE5L5aUS8huvSZdcACRVoZtnpaIBLcMuvD502UBEb2fit8lxYFnPcXjRUq9a0TCIF5Gws69oVqLAKxNxAIsSHUlyOr9ZkCotRqRwVyQUGuCUitHROm+OgO6MuqflL5Sw8W1N+OQEfuaICahlTRxNmAq5NELvZnFsaDzpXoOTwXaW8sga5rcAMXRRiVPxC9206rHbhy+KX9LQSCDeF+nldAPFLQRQtyEcddOX5GxgoFLCKri/++TkGSMrHtFxdcSWJ2rFyNNNaCTUPP7RYIpl3X+X4YRc7zfNoL+3/6LSyJA6iiDInMtUF7/zLVz/p+DTEl9yQkMQhDu2HfrtQL5eWNyxycivNsfLGIIBaUdqnPt3MhzFjf+Rmntnon2kOq7NpXwZTU5PbQmTqR2iEy+CV3/Y8UXs7j5QK6vhlwFUllFxxNfDx3uWi6bhDMMmgyIab0lRXFBXcAzWJc7ANwOvUAJ/dslhba2u72Gh29aL6rlJ8t6w8cgX1F06109fwFmP3RmwkifN2hJpM2bKBqWfr3eIkUs4Il8tBAJxtldcZgf7949SNrJfzgvKIijssmBzM2Q7hcUnjl3xsJqqNiijapQNQFvJ1ijm1nTmn1Lwc93e65L/Z7y62WLyRDGdlAoK3urn9UZPMgZ5WExyt14iJWUmVVtQaLawT/OZtLOywf41sXwjTiRaBW/zcr2gjJN8BTOcGECy3BJX7E+9osXNrBr6gOX1xybP83iwKaUPrJBRAytAx6oiQcH23Z5mEdsMMtiH/w1Vukha+ugPG/viLfUjBI2DKVMBKdhR8cSYkAFOoQIftTekMaWzv8imBGj+yfftUOVoCDZ4acwcMeaPK9j30bzF1NXPHV96ftBtzlJzhR923lbd90qayyxMLSMUbIKfhO1WIKNPyrhzkFs034U9aOEp1OiD1H/EsxSgfepbn4MvXSf86YKU8IbRg6nc/kmhRvnOf+xotNHIvR6b4ByIZCejfT1aTRHPyOVWH83HZ9FCpxeR1fDr+uZMknXMJkEjm7JLY4KIxDiu0kreCNZJC7gmsenC+uh3f3YoxiY8dQcpiqEjwo0sL6dmij/vWC0BIfhK6DwG8nBuXYzu3EyqdJzPpiJl8e1CiDnlVz0HLgQyPNKQ+gzjYwbIW6PprutNlTfapa1hWwmXeBBqNbtlpiCKrxgWu9dWqqSD9TXxacKcoq33Kz+L0c+a/lCQ6Q/6nBTCSkwKAKFD1qpfGH9ZCTIoGlxtaAU7aVKQW/Y2rqknaFQLaba4CTqtJ4szZDdsR4NmApq8WxX3fYs18OceD/jce4trAg3PkoWsTQuTMryQ0EChLoMAnpCyE17cygc6Bi17LeddmbjbtwSns/RcgkjPvV+b3kQMHfXTY/1ARlmscNADZQ0CuuliPw7SDjbDGw3Ds49MOmffv1hzrk5F7kOBAVMYVHZQ1BliaPikfjEyCa1nexzkdNxHz4PLzmV58ed1M/vLjcZCyAd41PcsOlHB5b+PmrtFFld0MgUKI0mlSWcNY3qMfa6UenEIxFNOkZYOcplywcqZA9CT5yuQHgafdZkm7NBkTqrV4T7JK+zNzXIhVuUNKEtQ7RxN1x5aLznBAvexjh2StXksgvM7Ox7l+Y4UEIgnbAnUDGIMX4bA2aKT5gfXD8h8hYQiRt/EEMA9BAtXJ1vXAYj9sDEqMRyJcRAzRKMXskWixCQjwEGhleDdUEYdHcvdXWoCQwaeR6sxuKTSLq4rcHaQWz6XXQTEQlhaasy6xP4h72gA7K9BMepMtu3VnlM8rS38kB7sLklWkBOHOS045UBKTOfzlckNWRPdJ4BoVsXZGl7xLKPcRQWtIktROdpZEfZMrhUDXOLQ/haDQk3LPDhNgBt115kV1poo/iWKf4vln2f0y5Hb5vrZBajeGqOjK8pgU2FijAlsXJxTlq6YdYwL9WuRLG07Dsp5fX1iDVXXNDtTmceK9tlK6IIxurUoYt1Ya/YSPQIspIMBjUYzXYGFahjSdOF254oGmLHqNo00XEwLbncCU7MYIzPSJUGPfXtt0cye/cEI7P2OSqYH9Ufs/lQj2OHYPDicxBVhMBZHrKcy8PiJK2gds4SI/AptNkDgf2PbuyN9CeDuLNoFJqTm77ZL4zLRqKNcRjwQCM8GaRCy8Vk6KboR/S5arId0oOY/5ortMu92vF8Af1uHypIjrSJDUQYdMmQEbzgojCF0VM60lcV1im/8wDnf4KqwVmwNPzFhris4Psfuk5QqeyO/HfR9XxA2UD2pjI+gmv6hQcLqqIpuWp6tStatCcEdLZntern9zLHwpopudvfUphR70SX5Wd/gOmcERCU3pbPWcAheLv4wW2Lkih2zcc940oGBNPU1gO08pl+l9jeGn1NTkuHn4enOwBAsg49+GivVcY4sDIR8jRko5LmkbVBDXMffcM2pjLj4cUcd6JTkdPUPfB/OPK5uw3AOgY5mFz0updplv4eqiIz3a9QmYHKy1brJcF+SXwdndihkLbSIcK7ikDrCf+iFPDIhzw+fUpSYBVT0qxs/6zAi9DpyWJh0Ngpfn37DMozgkji9kMTWGOTl6MPA0UY6AYmaJwoMsWmBvWH5PEkkIQg90drRH3Za4vc5TP1CKBXZ5SATLXVpzVTcW+V3R/cuABo0I9StAZh3kyifuCWDwkHYHeA/l1kN6B9DGrXrycUsP3dv5HJ0roW2IZFuCyyfdJsBgdNZke8yiggLxKIojFTKxDl+TQTDRIpPwM2vU3vOGl4tuhtcmsT3y5dS3iIec/859HCkKQbUBBJXLEe30AK7WC0AGoKOKqnR4QsAA/CKis9we6Bbot7iqVRDFuRw030d2zFgQ17YjpVNW1pQJmwSE72x5IVxYTclChJlxLB1QpC+UQyG8JCQmiE5QOteUpLVzM5DlQ6pPR/4dlkAoJEPyNEoVFjZT6KplZJW/K/e+kI2B/Z8OEdrn8kdzDyILqunYEv4yaCowaIDTLbKIBWFYgI+vyem5D6th/GahtAy/M3QlNqD2i6zkPiy+IL4AzcXHFPYCYK5bF8N7d4YQiyOSyl2oBGIt4YV6tP49QazSUqdNaq5BxDjC7BpS56k0jddXMmeam5iXfXBaU+KMN1TuezFhgUUu7eT/EoomBei2v6qMX1G32V11R9RvtYrPDDUaCe+fLM8J2Fz79xOvQiRB6kC93tbLPb6CgOtvO5vSeKaNkOqudvfL/PJY35EvYWNFyqRNOwU9G5EkMaTIiZx4K/m6GhkufFrLyHFyUpG0H+yz9dRukw0xGGg26SyYQkULrpcMrxt5MeWCCNiWwT1J6mgXhUD5JC0OFnZL4kq+oL1fSl73Hw6CYk0i6NX46Nfk7H+6PTewOTpZYXfNrtDe4CsCEV7+OFAit13ipFqQTFTTaA1LRd/2D6sHm2MIJUYzFmx1iw5Wd1XJZkZRYntJQGZelhsEpuVJSxQkIS0TMhWq8zrxKlwct8Ok20IYSyt32zcgFGjuXDSr9VNk58U+ZlCN5Sth2i6ZzNMhzg7afgjbx55h2XaQNRxBTXiHKR5rw2bSjeC8UqkIUHDKQPFt49E/xr6sYLTnWEtWNM/bvMl+31I254mpEjzhyfDzqzQX06mNKAiKwyNEwnNSA1JoKQsWC6hJMAWTf0Kv2hXqAm4f8Z5UWbXnpNBDVpUjb5Rcr91q6u2PtBQca+5HBzAvwsA6USUhFFXYel7zqjBQsR4abyYG7GsOCwHkDKs1QuME0gdrmNNtfzSzsA0i/AZgT9SYUq9027SCBvW3Haaqioj62UFWosMbHNUbxT4H4kugCdHzhSU+ojU+uFzptg4POt/f/FDRrOKGprNOxMDepjklUdv/VnOhhgiYCirOF8CiAqbzPXntlbe+SEVcpR59AIR+TnM6Q1ZKxi2AyKHJbr85kuNR3RXY3aJ1/b630B44d2lnVjrZqrwR5yg6KIC/eg/MS5XOGsP5LvwnChv/PoXn6Kbxqfpfr2yiTa8SDh3aJGgcI4SjOavNXZBxhLCHhAoh9gTXLloDUBC1d64Dbn6it4/Tc/0BC4XZ44DVItO2NkOkcz5WtnWYsVdCZsb8C9nFBne5I0ynfq821SKNtG5ElBEDlZqJ2zaVsf+rRYRKVzQ8S1umlBmK23/u7eV6olG4PWlPVmCXkTPl9GnvfiFHsgo/euLp6jnmUAp4Q3xsYvknvuI3tlJ8eku4oWO4OfOErLnPakweEZoaMZgELf5ciEoKEVk25d7zgAwTKhq0CDH7Qgab7F2Luj5bWZG6hmDKWRYlaLnzZVBZ9nIaNZGbvpjvVYKubvkTiG61jCSa3MEOZwDY2v4uYL0qjNZmC87WKnxH65rjZBy4su3KpL/pW6HyWJ318QN4Fr5MxsEDGRllhDGRGPe3iYw/nuxUlqNt3jpNXJp8FCt824Ev3VJ3agkpZ5rehlonFYjeNyesVw3izNlY+UVz5V0Fbhi4Z4N2XssONRhRiUczozk1IOZuIeJXADP9sfVYcb9DDgar3Y6I6o6cZy72JKT9KFIyzaqKpYuC6knGhbQnbQRq110tCmJ2ZmYbk3dnv1AYaZoM3rh7XSVbaYzvFzi9fvLFR8bbmaG4T1+UC5XM31T36yvczlkDN8nLJZnTz31IiP1apS9O4UYx1o0M9nWbbl/BJap5QGMpRdyGaodYNE46zpQaU6vePTQE6tuFppNWhWr1LtIkl5JLpu/4rPQibDePYy4gqbbzKmjool8AktZqRBZ1+MIqvaNf460BxrSCimRs1wHaMrrlsxeOqmUMy9e/cGyXMVvG8/LNy1guX/LCucMybdY6YqSaW9XomZxWWgmI5bqLj9GRCKb9AEENJFoiUw7fNMWgneXDC4fmdeSulq984ci+jh5tGbvlm5dRl2964fiwjMXyLS+cq5ZxvUx351jssfF0Pt4rG67q8TvkbIbvyh0U0Fzjj1XEC7d2w+krh7r3JlwFFtc281rGDspuUYvnHyZ5SYYIH6KIOMEqTJFdtQsUjHYfCY2e7/MaNr8IkkLEp8g1k2LMXlWnFUmIw8zKjEJJupQA63WjMh5FiYLyvqwWERigKZiwsZpBdA6kVPX8G+qOxwnTGWF9Zk7lhNed3yLOAGKBBt1cEaMBTh2kjDbh95PBFzs8v2DPpDIUs4UcUfnHGJLkO1JanjZQOd4RWzMrQ/lb6DGhMPH9Pd0Bllj5TngsfHHR+YTSIinV4+Xo+xW2CzANR8ui5nOuvl2MhZ2e37gjbEeQc5MKFD8Jl7+QmEOPnIkwUAlX7Nzhr/IdV0/RiYfAn+xaNy4puaTEVPfrfTVy2R/9YjQdP3xGPLwjzMPI9MPxtV5juLpr/SuYy6uYaHAjAar/ljacCo2I2o8GYXFeF6uElTMGeS6r6kNNNtnCNWgYsHX64uzQiyNRhxPIzfvKNbEISjmhTo5k0pTVAC3/9NRv2u1OXdzhS76oXmqV59ifcUDcnbcK54hGEK/mRKuOJTO0tziVL2/uHSE+sf35z9e3QpeT/Obb7wVx4W+P+NX0MBoxGI3qeLwf0b2VTULM61VpRNH1+1i86nE+gvm9p5urhMvd0sA2yEOkeNJzzWmuMtTfkHsyU54CDsmTu8ELuzS9dfL02lpycvDHnEklAs8mPdzViULn6j0i4Tk+rDF3OpiIQTqrVxjBrycIt5Vz1lDRVSIBOEgQoLVj5ggSdnRgmXtsymxI7QsUKq6WwT2VCevtmIDIsxf7FzUPVJxabbPR1poWF64QAdFmw14pnaVfm9Eng/4nyCkZSeaWgA4mKRUhtRYJJbCccNuH+4C5e5vMIaLs/AEvBLkvWwOqpLfaFsm6tXy+ZEE8LUItVyNPRS1jiudYCRiT2V9lwLZSi8MMhxZbIksJmN+SxNIDbzNKzQ7vhocybku+Ba7GoaRRdgogZMHSdK0mwyWSu3h3vY5oNLQlqP9Qf8TurG+nvgMOAm6wnldvl4t3ICo83ICmiGzzgTkgYkTSXs4v6Kn6l1Kp1PhK+vlOT/dlHTuLlCHi5lVXt3jkGzd95eVWmp0XZ9B3PjsOKawz+bNE2l05rIifXwz0387/6Otc3gU5+kmVZ2Z2cCPyubRr9ccI2PMgllTJAfc50QSrmijxQxpmTqNUqFjgh26/VKXfrKVpwVKJ6VBkak262Hvn/3BVvi7OqSKXIz+dTsMGWZfWLLPvrPiXbSMa0emVbA1yFuqo8Rz7f3TVyyIUyRZ7BqGYkDn+5qZIItAvSCdAvEFR1PqvmWWeUmiQiaNX8VXcIE2x5mUyxQ+AORLMCpOVkfEHwCZRAqnBuAI3slFo/Ypj2Tx2dIZ77A0JMl40qmlVkaHx47Ek9jXvXCoJ5eOY4oWIANnvpgonT6Gb8iAZ+IM8lBQ2HUiHCxXwmU1mcQ6RXBhTig6ud5IMtF97642u8gEuDys0mlgwn8RWlwVKd24fH9QGIFgh/VYGTw4iLUqwsLoTKjVmAWF1rsAX7jNWLSVXSpcX9IWfVla93cK/33QEDtZ0snGffI7H/HZJ1x55Mf6GlFRA+KOJuMWorBagaOnJPnJNxB3+h7ZMd63r7CzbGa5Lpc2R45gfIX8+Z1xlun/Dp2lO9Vh/9JVGTGQJnVj+uEWJj9hGRtjBNivdYIqhkuSnIA67C5UVUZVLP5xAkUUrtIM3zmoPkyHY0PLD0ZPPMlIzQqlE7XOu2vVqnuEyLIpbp5hhaHEd+3d1ClbQEKgjrloTaqD43V2tVIAcLqFTdpWojjggNwtAlpkCPwVJy0LXtCIG7MaqU13LsmsnmN5SdaX1iAvscP+e+AruQ4OKgkSpl4W+nQ2oSqiPllNDbLYM3X5BR5HkQrkN2tOYuOXkboxQhn4kUfzwhWrgM8N8YBVX82yK4x8y3TG3osQwvPb8YCqhsYowHPScU+SG2sgDH7KBXT7BhjGii+BwcT/M5gW60Mb6+konRKSggggpdSKWbTKNYi3Tmduc1/QyZ8X6poicKmA6txgmo2wfwJ6QNdoBBivuz25hOk91rkW80mOi2HM7Jp2YzZonTqmCG61UUhZpcSzru/Lw7JY5R0pt5KvfIOQhUb2zfxYP2HCp19DxW5OYkbBTktXX55FT0WKkEbwQB4481YST3SK6YzfjxfeiXkVWKnQcTuSqxLJmFZ5C4QFLpGNj/2QHQ21FW6kRdsYbYESNHOrTKu43XbpJic9FQfrRCEtWfDu4242KBqhZXUmrdwRmVsVAXDzZI3aH6M9mmkAcgSK78pTsmowj3KDQVQFrdd+lL2PN03XA5FXSqVdHe9jBqcZC8SXAhCr9EtyzcBIWX4VrsPg7Ls58o6sMS/g+Ia6VVtLYj6Px4wnhKtfUcl+sjUmeCkdW0W9XJ1zhenVKEtHH303uNCY4jp9f0ORPSnJCvitpHE+KPCGMorFvjNXY1DdqNWSDpwvDbn7zkUkMm8MZBC0ue/0eoTsrTRu8uhfwFyURl2Bvp5vCKLDbCRYOdocmctC52t3LyCbjDc9AJjdK24qxRJ8AVrjybwJMy3OHFTXhRh8g2Y+5Lybv3T1bJ1e8JAdAqI60S4IVC3WBGMoBFwBGuazOiE+B2NFiUVAxb3Uei7ZTg1V/LbddvZ3hbZATLGaKH6TfqJs7/8X4ti6nxgQeOFKmPNqOso5kyVqdA1S6AjEnnvdULLq1BMIdMh2piSL60MrNeR9xIMVeqRdIKezC3TkmvxrSxlGou7LCTSA5t5hPi2EOBE76HpHkxphvoOyVUnh92izKFxqLkgThu4ay9ONk6XGf8ffvaZtJm9J10Ha2idriIRBs4pupXLDrXM0sG1w7T6wXfXBy6NZCkgE0mbX+n7bI/fkfUU+aEeMdkQ/FzA0R7qJt8HNPSZjE0q8rxwxsqaJqen6KRUuZtsZ6Shvw8BkupNFQRJyrTfPvtyP8yz7P5sj8e15cbXqTBdLfbGTzLhYRy6hwvGRYcolvgS53Y1jQeiYD/zrjCWw8sOgg7pa4+PTgmvz00JHjHCvDwVNeOgrg5edPw8/HJtofTWNxbT/vW1dLeakRhWd3qLOnbD6C2f+Mz71MQL17+5XnaFYd3pyJV2X+3ckWqEcFDNMR6yhHLGfLXtsIfAmbn58PKGz95YgbZ3gLEjOGWvWChjCtMObLDVoheyD/jtQUYIWwgmmWjIt+LGcpB8OrvFbwk3sDG7sqdNAGZqMQfEWgChvUheXKq5vCdY8zncWI8DkqWv4XrE1fKvx1JQ0rNsMhoOGrtuo906G07BEAcI4G3HlSz6QxGSO3S2gNfoLxS72rbNNGfQ69xZRINlxI5fkazypO+gxeFMqItHB4U29TS9ziDWj9jEUjpZD1BJ+9Iev3EBuswkF+w5QfUYPqwNm3t+0x8XgmxzCWd0gB/FOSw/ua8fq1SJcbVS6MCb6krZKPsAHXrQZzpxXomIqwN+Ks9olfGblcB2v+DpyXDuTSRIDtHSThKCnhbR34x2QtXHbgHTkKf84xgU2+e+7XYtDsXHJYXa2N4er7Uq7Qcm5Iqn6dHL4cUu05hI59tqTpHOGiVTm1J72hQtb2uwYskjVCuST5X+0UvnxO3YCh3cFhgIsZZDUf7+N8sXmZZyMei9udMO78KIKKTBfI93eiacSbdLOmHqWiEGHTjLiRu0NtSxvuAxLQedHESBK1B4uST51i0zEOha7mxtvf6odwujdE2JCyuX5TH+suAvx7lbVNMboVGbHT521jP8EVMoR91ewcpMJC4OnEHM22foZfq42Dkyi9stNd26xjHm4xNHJKkbZ+9GFuYkRivYgwU/g1GpY6aYK+G2nBGe0p7SuSCCFr0akVw67ehuUFsnr3YqTatVJRgXruHkeAScWHsLi5Wk67qCnRRavLrBXhKEWPd970mTrlwBOxn8KW06uW9bWOJPhp4KS/3VS1SiRK4iS3tuu2ZP9CV6Yc/6S118CmZZpkUDLVIrH0qdALyZiyzsiW7/CUl4Qsifd0kfZfEFrabaLKLT6BeEqQUvkzkFnQLOuO7VToW8DWf4NPVTEBu1kPe3+BYmRUu95XPUY8abGhgR+tT1Qc1nbvlvKLoiwEYcA8MVwtMnJlsfE7Mp0I/J47G7js9Qy/YOIvYheHCqcGJDHz7m2pQJViT4vcA7NRdfMzupXU+IrRgHWqws7F54Au2sQDCG+JhK9yaoiM3Cs4oZI0aMeGt0zqQAPASrXXBe0Qw7UjFpvXjZimtfnilhbRZnzyA4dUwhP8XcVNrL3nX8hSXNETnXvzxS2WKR4Yx9Z32Hewd3Ap0WVSEgzfwWR5izE9jTSMtocgu0GYY7GbuK3DeYU69PaKWwmOQPohog2Zcz37us0M8RwGk5N7KYBkhdjH5ZJsDL14PJzOMhM4D4jxvF71M2tCjpkKbftDTpMZb3LG1EIufNwQASustluZh/nBB/cEiZuc4JpEcZo89sp7p5NpCt+sPJ5ugLu4AfGiJyeGQ83VUsIxRpBR68MYIRI3eXB/zIhzBBNTUYfUujzxFLmza+Y0FzKROQYDYjpQzmYyhAAY1YxFJRgBQ1Wr6iA9CfdXnXIkr2AvhxcLBCf4mpRc63mcQvm7SLaClLhUxTUNLdx8Ys/IiCPh3lm6W1CSzxaL05OVETIBXzVqv6DNygp5cSSuXbXO7mX+EsbsWMjqsxsY584bRLI80vaIWA/xRrRfiEytXE0MMPPPrzrCxAatxevjpPWuxfNPSmWGogLuTq4GA1YlFb/gOBG9NP9EynusQoN+4ELBX16kgfKsbZIE1cw4Ptkl9/hdWv5c4X3BUb+18h/O36NGCW1iv4j83siONrjSqTc3y/ZsprrxgirD5KlzcRolC3wnVtRdwp531ZTCKv6sSDB2Z2QbAE3JJC96HTuAqMqXdW15g2Wk6B8QeM04rUjzaVuH96lRaypTjrEwIr2bbsrAQCc5i9d1PYfOFkpuWxg/+MWXN3ZaNkO+yEJdZ1Sdoei9x8m4eq1fSb7E6VKNUckXAlHBVk9lbPRuGcIQ2SJ50Rjxz8g8gFNTj+J58kgSB8f8kHuks1zfLn0tLOmknVv5YkPlaEDfDpWySDYgdqTEihL+6xQJRY71qd1uW9zD43Rp6uT5cH3F9MxBst2MJvJDcu1fFHLUtKb11MVmbaMMQi2HvoUDaYbDVT8YBPYVBq4gvrp6PPII308/hcDKl7+1DHkiuhusU5YsgChTUwJB/QiI3jUh6PILQ2Q9XCkq4aa5JPbzdQ9AgqolXXiTd5g3yfubekiQRVEQ+9TK6K0KTeH30Xws0giPBx2fPT+N4Sct2KVHGoY5K6oBszcK3jZZNNOkZsr9zj9J18pJR0qMWknjInFQWZLscLltsipwDEk6+L7dAE68yPWJkTNhJm31GzC+lzwP8dMFShka18NPN4pEFwzmH+NvyGLv2mBjaHBUxiNx0MamCNV5BbYY8g0Hc4clGl6RmOqMx0P45yGrLp36z/Pr8N83vRq19ZWy4BEZFi1AfpMDwmEHXydErZpZEB1dMPJzHZ5927A1++9SaMykGuHdzyRSDw1Tlg1M3K1g3zjNCp5Q2DFTi+5eSuUn8idQv30uUIqs4tCtm5w3LFXogku0ifjnWBqL5yWRNBxXP8NGzmybKUgNXBBQhS1NvUgd+Rh2A6fiQj6CUudIHMWo1BYN5y8ekTcFDHXOpoXXWOdhVFIveZ7+uDXBPIUGJUXzRjOKGxaHJCnjBGIzB1fLdwtRuzxFslto7rJ2AVmC5weQ9fRhuLQioyCICwO0vqUHuD6+L4GBpuP0prZkuL7GAI24eAzrP8MIrG0SIyKq7o97BbXxt2Nl3kdARNnR3slmhzcSdBnpDbR+6j6+Vo+LF9b7dtlB7oFf5V1j29nbw5Un08I6bVefDt9/U2bdJ5PzMU4F7Ckp5K/gFiecPmbzhafhcDY4MlwBmgqagPpK6IWtOk6Ve8VjJBz5z30ldoOEV8erYPb8ZbDW3yPIFkt7mOM7TWN1uRx4oXObRa0atJUc2bOKlbAvy9IOn+BqZiJWWH1U0O8QEU4ksWannCEBzhtOqx/ni0iB9/E7yRSTeD/mLzDjBbz1lTg4A/slXT8rRtNT3PBFSmAszY8Y3sX3o4NLaJti/GSis+iO3ujk4F9IbpqXI5GsME4f87mL/Bx3dQjHa5Qi1Z6rCgDc/+BZNUudB85MJs/5oTjdXXB7kuEeqiVQpu6aeVgXki0L8H6J/Iv7tPzjEYUKI0ZBC1aqlPvOlCdY3W0zcjVi6pxTxbqWHhobnmi0mTh+SdjntjYUipbJhrv+4ReE6onSyv00eIrU0IUuv1rbBNNZ3z4aYc/YVZRSLbjlDnhCwPoiydddbXjqnkYzF0P6GBQo6OdUW/KglJnT496Ru2GNsBK+4clFJCJK+W5Xt59DfiAuh4d+XGXD7DbwN+RjqcJO2ypBwZqJuscDZ3whejjF3M7b/Lzsl3ooVj3lV6EnXlgHGBL+Z/oj5RZIYm39pcYG0Z8mBQeHWIjKUq1yEuZFWh2il+CUoBPIT2aMy9lcrmdoltkxtFguZ3+Lo5/Am7Q8fSl/LJ+9wMe1TNmlchF+0ErwBA3QI9nKASXHL9ZkrVJKeCxRIHC3UHpEdumQveVtwuECh9UtBHf2d2bwW9rNJc9+0d1nt7RrQNDvPdoe3SWX+A4K+qC6WFQIZt8QP860ngZGAjKV7cWDRdAXrsj7UDLhwfoc0Y8HJBHxXn9TRtaEJDlEOOdCSx5LUNONoFIjU8146y+nmws9P0B4i2SmMVHFjlAxfYIbJIjS6bcrO6oi+Qh7hMu1NyOqePCVftx+C0p5SMkSkiibzrUo1G8luSGtHdZMigUSJrOVxl5YbF9INAzq8tk/MIL5vbdj0POI2murPfGkDkic0VGZCixlqWwevCoaTM/WadW/q4c8W6H4v1NGqoBOcpGnKtwG6fyIwv0Df4HML7IrZ3cKqbSBnzWHS4xpvHDFZLmrQMh9KAqGq0vZ6tCp2BqsX7mBlYhCSAyB1bjWBBW+XSoJ08kleu0BrSy83CJNDVWo62TzZExQ9ZFeg91BBOTc3x7MVuQ0UsUzFAnyhXpN2jnNtUElg3TstmxrZ/PlPCiSYePOw5JwdcgvMQxf28FcNFEcCwz5fhA69rTvppSq0QYPqRkIZyr6fstAEE5XYOofmJlnDKwwKskIkJmh2vCHGM4Q+NVEDuE3miaASyit8Wo2yAn/fAnSfwZNAZa/2gQBMgiGQ6f5uPybfdb6yNQCheLBLb5WtwtR1xDkNKsrJGwhrpwp/eCcRUybwpf/2xgQRd8TbI3IHhYZSVBTlp5cpX49IbEeHWXVHD57MS55jwrdOsc6/ZHl+6EPpTEygvShzOhvEmm8hzmtnhxEInhpH8rUWSPlCht3Q65ZjiS0GHQNN8s1IbS6Xd3g/Jd5p/0Y/yqIlY1Ti/mm7i+vDvQTqIJq1TdC9q5Qtx5rbHxqwBMDJoy/OGl7BMy/6OxINN8JZezdPTsdaBHyQiRmCnzsJIn2UcrLrEAv2H62GiXb8igUP/oJGm3bPULsrx0t2ICsGaKNJ+HbJVNUSSlux5Clfzgmu46NQWpeEBA7NQ7oQ0fbM5bZeD5rOPqpv2T1p5gVzrhNz35/+l/EoHP0xShsDLIC4xtVNGlYNC6cF6oL0jL4XWedgI0NifApWfWrl/3vjY5DebuPLSFrQNowU0YDcPXYmCUqZd6OEbV5WXcuJKEMjb1MF6obgVDb6d60kPoUjAmV5klEtnMovMLYaknnWVQyvRz8VNJYZ5W5/57sKOaAjGVzGXNIwWGez+6nYFoPNnM/gymkURyrpTP1gvB5uR3WBEpVKCBqOMiaTmE8Axu1eI5SSyGSyiNcTwUVOo2Ze0OsgVZAendZ5R66WiwJ+fZuyjQUpRbBpXavXAV0WqMmbkVS8cJFs7FZNM5wbaIk9cfM14YPWQO6SCZzCTUwfX0zG9Ja+LXXuKdde0PQz4pL5RT5QklKDUPyNCjBSxNHGneKqRe89AGfM4H5O3EZeiA1rCw65A19w064EKWfkRCJ5fj1jZRm8/ecDLW2wS/8e5k4nAJDoCc0aTRlVRqBOOsFLowk7KiRsiPJ9yGokcck4zDOTZLi3G5oxlbm7v8QIz+OQdf9LGs5e8X+kUMGNFaw0Vnpnhk68CZUssSo1FreW5jJv/k6OdxF3saTHfLEw9oY/bDy7coPKoscrXf/OhJbPVbwxomey5R3I1aUq685Lfw+fQnvcAGxxyyQsDX3v5M9OjhyBvjFj6pv3p2FXhY+vWxUDHaMthYSF5vr+Qq/EiVfw+vnwswEsfCbXL59SfqT7/Czst3nraOtLROqYa63vN0oZECfvMaHFmIKy4wM1z9lGA2afXzDVdC/56e/REIYsuHPaC7ZbRaOvZjmrtoFmE8C4+Sd7s9kQhdbYVUWlpAg6IBtqb+HFF7XFRKntzPYQdZHH3i3h16XURop+AknpdUi6iB0dLQdTRRqAvINYb0rPcpjb6iqu4I8j2o+qsVpd2W0t1DJhBgXgJwGTIr+23km0rKH8xg9m86JG7ZKAUhSwWcjMCvTmKrP95Zaj73vPu6ODq90PxOJZjWJjY5sJbv3DK0mIidSh0goLL8Ub8IZ1pb6R9Legu8/zn/K4i8pxBlo4XIrw1d65ZyQDvqx0uxeGuGBMrgACRlH17ewYxFe4LVdNYbCMOmwychp3bi5a0iIz6lDbSAumXsm+Fy65IWFLS3L+BeslaExdKwBFAYXSXyEcMlOEYNRTbgGiWSiTrkae9vKQGiiCLRfMlvTZLRHZbz+SDD/oZa9CqUobUqlNPesURv0sZE1W3EkKlRa4E36zCn21PJp2h578Vmg4QqAAHCU8bqZXbhlbk5Dqu7aZSWRXPmG+U+2tVLEo3yT8IINJ5st1TZ4QX0pn25Bjatiy/5WaOcPucEXogOzzuHoUWzP5aoRZ4RfQ083Z6sk/Q+ka6OBh6yxOXn6MK6kjM+6x1p3dsRk+tQWx1ttBCQHzS307dllFEp3njhEeM9aLnX5Q2IA9zYDERgQtCMEWHmpwmxA6ZKXeuYBa5OAHQHzMd2APO3GV3TCkwcaVWJI49HEdr/RrhkkTroIO+6wgu6HIgA82nV3qcwnNLEzvpC3UJijzzYA5oAzlHXmXjnWDBjNhvri5xhG1GL3+jLcMz1Z313Bo/6nXwqksHdn4rQS+SCfl9abaGzl6jNiAo3xdm4CMw+T8YQWJbbClylDGtzyO9PwuoyEaEZ0lTEgyoEozBsnOhmfRxZtz4JkJaAvGfNPcHB4Greq9cnCZHuuBMnfNHhWyCBpivHmIeu0NKqzmVD0/P7zi+nB2KVhqZAyLkNiFwCLZGzd6ctAG5pybW3BtilY5bwUhgbPmVxSWNYo5oIudKbxHeDokAMrFzeSPVHesmD7ToHDX2dAAVqpkqT6BGB9Xi5CLq65mjh56sYsGc7hCjOa0+/tBtQ37px24JylVOEiJpyMlEGkXMrKhHNGJ2mtSUkZEexHNQXVBuaS2q/PGgbhAJgSyaI5FU7gDpEMmZ3lKsi14+JuYuSxBVMUINFSSSUV4xk3rugZibQKPonQdeawxNT92RLBWQU2wzmMdO4U8h7xNbFEcDFJBgBbtq3U7e7dxhwAqyBL3D655FRSV4oJbE/Ph6WCn5cxL8REmO22NSP7D91YHcbTfqzpuH/ht1ZSMX6lpaRo+SUp3VtJyJgskhTqljP9vjUCDmXle8rq/g2lAWuEsQmtntMoUACdrCq0RM1IDmjvhlwAOqSRoMYxTXqQx8Y40rU3joFcu3ofGDGmb2Ckphamf4jbMyXPAE95ciEPqxbfwLWCtSrTSHOH6AGtLMeuj6o8aASpFqcEW4cYpL2E64UQd8hAJ2r+j2YjNgUgMaU4jjQjNExIEMkgz5RgBqqW8Sg2pukTmjwnJr0J40tO7ykRzks2SkW9ANt5rYAjzAJ5GNhni5ULHVbJ2DyOKM2CufI+agBoXBZaOFTXM+XIk48yVZnx8nQIedrzhTptF4RF6dEkiY8xPL8dkq8o8Kw9cT1wP1Q2iEUAP14See+iHNo80l+G4e+uaVG/ABll5y1La7Tyqgz1yXtgO2heOINlcOMB42MRm/Pm33n3+Pd2nbyeSHRPVIyZYtAkUBsNUPtgHwwW8uDtn5TEyTRzy9drkevrchNpTGDkbde1YGDcAv2YwyTu0o7+gCddd9T4Rkhs6VAzbVwsbF4sc5AHtNY6xWz2Hyti9Ogyuz/Q7fjgFPPFnHbjjuCuTEo7gRzbGthfyJ8HbhCYFVCVOrg2lttko2diIZfYfeL/KFdgLsgbFCY9RMm4vcVOyQ3SsMBYWYLXqSVxA4gh0dSXadMcYdS3rADZxuMpBsa20PVahqynWueRlBAuXLczmhxl3PgTCmqNS8wk6JwW/f5SvfH3vVHrA8ASVOOzW187RSG4J04OBUbaUk0l+EPISs1CFH8kXBERnWngEnBDykXQghApVC+rFIsIbddJTQg1Qpw7AgVDstPpx6GovPJyiECtRnmGSFPcGB1p54znHnbzwElB7cI36JC+IWKOyAv3mdDHPK3eHHLL+jT3sZJe7/WscfP0TVYkSQpC8pBc9Q50TmNmGSz+WvZB4qqK3P1O4iFxE2LvO2PFUSNHf+/iIp680znF047jvM9fPzAHUrqFdIVV3/GMZqUFtC7pCN1Se7dHrxkFqrr9ZdYMEOJWvO/bmO8WzaIytMWo4S1nockvqp4K+Qolr2eP3kLSTMfEuMevYPIZQMmxJI71UZ8xHGZ+PsULmecXk2GhOkJf0H1gvB1C2W/gBlo9CDZDMittK21IQPKRe/Ey30hvhW66vsWQS0Hyun597BSgVNro9tAnRmtur1qrS1g7Dq+PUeEbLQPSKVJ9/Tc6Ir+bLIkx9xFKtBRi+5/V0FmpHoMMVT+B9gNbwmC0gd/2bhOXAiKnk1E2XmAVidLABI8XXw6P7a6qaBrEhu4g3HXe35xULLw6aJma8dx1yVho1HSMJk8VJGVJMcfffgyZIPhWUKFI/DyD1ZMSrLSc2hntdGKR7mpeaJccwoQeHA42RczAFEONla3bsptDGrQt16KXT0YlSht7zm9Zx3E9QrqLvUIeTH8QjIzziRpVGZS9PCazBsVq4Ag2NAZTYGyGmbe6/WYYFmGjOO+ZaCBclgJzY4wVtuGsoK1TjAKxi5vckT1dTVvNrL5Hlmr9lLhsQ1Su+lE6Ze7AVYKt3/t7qEmiaKysnaIGHi5c+ruqGEjJWIWRCSTyenLSbIpzr+XQj69a0qkC7x6fvEN61SfKRiek843JliRsD8/X4FHU93hQ+NV7JDJd1JHhS4nob9Tj3oizojYRkOaaHVjLoj7yMQJYeTFQtB9wiDKyEqA/Ug5cD1yXEzOp2gA3rgu04lasizTmNoKusLt0JCWagSJC+g6dQxhp2+1BMYU0WDc0jWMYPTFyQQyZpjtTVeHm1iFsBLPrCNgWNXFe3xHOQPoFRwOi3KIU/CIIrwaI/MaDsCAwCbewvMsgj35AINwcZY9eaFISLltjsSoGpfG3SCNsQHMoXjU+G1TzTpmHSuRVe399xmmMZs+JXzien9nCdUIWnLMYj1g7Zwyf1NNZG1dFEdmvjTi2y96Kb1948fiIO+dLOZtNBWgNWk9aHAYjWkdBNLYEInWa3qAx7MignWvmgria1ehR4mY0a6cEWAH72BmhRmVlGkyPRUSSuY9q78seGdq4KgvPYDYhOOix85U+HbZOxSyDfsr0ziHdQiahJZBO4xgy8/a3JS53xvSvVHjb78+LBNt+fuTKGd8iCkjY9N3jiyt3Sw4Pq9v5ivt3SsixPlSJiGyYcUGkxU8K/s1JJZEzpxR0o/wU5TwOzpj9XdJmMqPw++WN7EP2JZI5PHW41OpdUctiGsF/o5wDMF4LNfZHvkGXAWLEDAIlqpOKqOTFizR/ejEECnt+RPssHaosvRTc6CxIS5+VT9c0SZrpbLKGernTSqWvCRrpquujPa0u9aMikl/dSuEabAljpxrQFB0rY4XmShjtSEzv7fikLUpqhnMSBa4b6X0WENc6ezC1J28r23Vmc561TgKRuIkScgFTJ6wtOoV1RwIP2AqeqQi0aiXl/gXV9f5lff8aN97c1sMBxWgSYsX99XCcsrwOvSVA3VyAvAwSHJoeYZkbvdCa9lKPJI7bKGprSmpZu8PXECNiISj6zJVwTtySHnJF28PovEKQPGH3oGUPJvHGQf4d+AaI/kkzjnTQdrx59p5gfCo7tQg2k6JsKlOzELSio8M/2ASXkjoWhQ5GM502TIsx0fsSVecgEmTUMwq3lAh90r1n/zyRewNnSOUpNotCqecGPaCO/YhgjmvyyCUsIToJNPVKLkRR1IxFf1afRoZK25hVZT2XJtUjHFiqQksrMEK2/tzGjcDEERhNxIdBrbsWQBIkSD4TaTvGY72uG3myCKp8Cz8EGw3KY8ulTI3cgOjbRMcZARW7wKtbZwGhr1KHKHeqeE0ixB94uerCc+sE1zC0RJ6MFLgreBfMjafcDuVDYz1jG4rXBN0Vx84Krp+aVA8E64HwrUZL/IhR90WjEbxy8nbIDjlnBYY3s2zbXsnMQLZaVyfQ2z4OVWmAWqu0noEHpnhvfkz7GjUVg7mDR2K2fEh51ObmO1imUmTzZtqac9DsJTcRY83uG+ZAkxlE5us4MCG1QlfU8XVK8Pc+fzDWBv2hotMU6XhMMkGTFC9rAyKGG36LvCfcNr1wQkZ6BQkC7gjVkf6ic4IegTbqQ+NwEZbV3ZQzw9Hnxr96RAIBhAGjdyf7HL2lsVJb++qetBU/UVt4zcNfx4Og3Ve0/VLD7Kl2tu4eBGb9T1QmAKvzqRO1mdrk0Sfb4ZjvtHvVIHsmyBfBU+2u+5EGs/qKwZvMF3aYdgB3CupZf8kySfFBrnrq6Opeu5qGeeFpnGRwpb5ekXl/BG91oKeV15Fg+JzdHhz3E09a2i0xgPFEHpz2y5QMzdAN94qBXHQT905smSxDM5uTrSeD3faf1aPD6KmF9Sa54G2tIzvI8rREXTOEGwPgFt7RWBEePYl36mdluPQl245qS9c/re0Or06m33do40ZhBex91faoMPJXUoM1YMPkQbrgt+va72gfeQc6bSConEJ2VAF4IBz9dNlkkvzTOc7pRAnlbzrf3OF1q2ONekdaB057hC+cHrN3kI20Wh/3ekXzHMbP97YNgbsFx5Oe10nNX2E5aIu0AfzGV2clKuOCTuNHicHpKaKum7IipgW1bVc7mQofOSyLQ8fFcrkjrH1w/kZ3ndnukmw973AgmDnNqh32JHcGrzp0n2R2ZOXgyTunO4G4YFfvC7a6RQ2Cs4KX7cHtbjVUPtxCw14ZPVkq2Y6woAdHSPPzhIfKs8VTX/+GTta84sd7gVa0QO2h7a021nHTDHPoYMmkQ+CN/BlAoldCuTfe+7yvzsrSZXZn6aumfu2p/wGTYgEJMdxe4/p8fKe8J3IFI3jj4zLRPs/bCxcut87KdYoNamrpBM2pt5nJ3f5YV0E9fRfB/pZEMbmSnGNEn0DQmReZDSMk6+U7kJ+t6AVb0XpOjZG/+t4WO5QqlXMmWard/+a1gonGlum0BWxsKgYiKY42v3nygEvPnjMcjG1mPUZ4ioTjHh6bjIbXHiSkr+nvEMuzxw8BKPu5TgWFMnMXV4gnYQ8mblMyMV6h7+6NMjjnbISwpaXI4AYR7hTKF6hxSKuLcMZp1PYGsfyisue7O+zqlDmfZpB39TzoobsZkOd+yK2vD7+N5zt16e2ztMCeuIp9XGbJVGq+rffH/HxU/QJjTsYfpmgn5uODSZHKvJlIv3mNx7dQiXzDF+avsRhlvpnnfds6lq9TWG6Y/RKnHdMQiSThz/8+t64r0oSnWn7mhjeu+Haa+7a88Fp6w0d+s/USyfMx3b64dedWkVqXYMzYi9nLjmhDpolBuOeGbyeLURi625No5EL1TKJumR4ToyObkfFrutTZLRpFstusAn5+wY0r4CDFz4ncTVwz166dxgM9oQvPYidF9Orx6HbZBuxMW6IQK2fzso5U9stmY5S1O9NEwuoVQGwzZZXGxDitDkgmhcy00liBtiB96aHQHbW+JavCba1zyZDBicqUDgNl/YXzM1FLqRdR6Vkz9SkaC9SIDCw9GnZinrlGdAGX+k7eDgy50MZgrblhTyDGiYfMipCp9w84b1DoioUr1FFNTr4NKBLy5zkxHpH0uLOKEVepgaowKyRU9+nN+V5sJ3rfnU0aymBJI3Q74zJmgoKGhR2qqDNrU9PA41jQeE0FEWfeXjojzzxOjAzNtd9pvY4K7Y/albYbVLs3ED30Ud+bAtebGIPCFVf2xnAiQT9jtXaletFZNcQ0vGBO04tYIwEtxSBg0xvBf+/Jje1jBb5+4m+eChfApGWkAKPmF4TP/ZS+PBuMqGsXPyMdOXnEW4DsZt0tjyXy4nkCS2qjDBScYH5BB0c9C3OlMCbAFeQ7DKfVvEBPAuanfly0IQaA1n48ZBUFQ3pDBTLC2u5ZL0rpWiD25qhSb2SNMLwVXPdJoDhEtkGcDvVpA7yKmO5bYE6ogXwsepfnzjPemzLzUw5YY5qO77Vpi8aZFVGwHHGQPWv6xRXFszOEH0nlFUj/ohXIgUlLVV6tE0K6v81UTRDpmbD8lqJJJB3sAFU2oDM5iIZOX9xiuPrdpl2XkSF4mvHa/foQfaejJEvXO4wpKSVYWZhAlhGOFWgrlahkXuVskNUN5b+v0Oe5DJOjL70ugc37nuURdQgt2mx/Lj2HzNKAqV3WWwLg3PQYWyjlISt7bXrB4UCEuYmQBsqCnhfiGo22SKGNe1xynKO3s6IOIM3TfhZtlwUqzn4EQrr0DGZFigt8hdQJr8KQUaHYpT0aHhjR3loDdmKiJQkiga3dV3rQqhK4FZFwXFfNQ40RAGsNadMf8rMgxHeVnILxHM/OUHf2yNl0WIqv5FgJgp+8/lmv7bLQE+/GWeF3d7S+a0yQ1i1I6jdpKRkQ2yViqRlQrXOE8xYpMQJ9Fz7Cn1rdc7VdMHylnYXX0AiDdN6cYEDJ3wdev/a8u3ooCD7KLIsu+FBfd5g5iLpWxsJ0jCPBp2LUlb5LZRuC56gdrhq6rLo2xKIjg1c6ApLmCRYgNIInYv+2tSzBeAs0QdoGHCgQYFSQ+LAHzE5/8OhDd2Km7MMYAOooejxz8mGELFzfjXVyaqIGmh83kzLIsvlTehHSaiJ4R51MafmVE9u++2MmM+/TbwZW07kGIsptfiibe0sD+QnxkC20ZwdnntBM3zTJWDOU8e6KchTgXeJzZ0WpRW2uZE/e4yuUSEGqJFk9Hn/DEiqWVipkFJ1Y49XulG6uIzoxhOUW/WCamYPo2eygW9uCHg0N66jGfy/K+vhzpowlpQugz9B7Me7fR0gK3llgiORFebudbCz99GcSoe2UdByxer5GdffuxpYM34FCDRMGN8IVid6R1yJgGuUjTt69yHkDeNh0ggs+v0ZK3oDIeshr9RgypobZCV9b1naUMzt5eR3iOJbH/FZb0HhXuvXGEeNhNdEpP716rEmw9W788D+ekgbpReSTCokIoSHs6U1g6J856iF+gric93MUxWgkloBMKYHDNwwdmji86GsYynQaDt3Sr6Cd1cBuscojKiD8ggH2d+NxOJjJy2sP7kW8o8YMPWNhBJorw9hUIbWsD6/V3i2e36PwZbNZtG4bqCLIr30B3i3/6Ad/zOzfizss6EsRIlCWwr5ftwIzvOCxlb826KHuJfRCi/9p4aOQ+GZ8MQiX17H4IxlfHvGckTOQd99tKYP+oziL46J/kW8jJveaesSd8uykE4V5l2HAYP/sN0eBBWhvRkQsNbSbaclSSRrfQ9buJriAYPjj0WM757zsE43oDUozuuAneE5l4C1Qjti16/SrvLYOmQ2g2A5rNKRgXaFRdGQTNLtzl/LX8BiBTm+zIXRRB1NE729KmajiAnUS0df0SyHXJA3jX24dMdfXgvvP6Mdkggi+8R6S0L5YitIG9/WPbEKhhv8CE7ipsVA/mkLWKvEtuWYxGll+JjqHOyGxh8DeQ0+6PPBe8FPzz4D78/lsOxKMrUYidjfOyMNISFp1PQTZJe1l06Jb0ihdc3wevZyDnp/wWdpBzs3nP5IJEAtDGzt0RSaXl/JoYtkyzXU7JAe6wu0QCtjn/2IrUZj8rQl8Vw5rLJlU3YVSIgpZQj2HIf2n5f0Cvi36C5l9JdCuCKNYS2XWZY1V9aNXf4k/IdVFfWN0ej1ujFWIdjU8z5FpLAwYneUuzJUad4R5qfDKtXHqFBxg3ns2numqrYAXRf6U1fPeE3qtYjjU9HuZKREIx3Zz37LxApWN+VAjJHS8mC4tI3va9n/emk5P3OA/vit+u9ny/kNYX+/Z2vxMTNo8C2yBtuiEMo4ka23NSf7v1lydmm/XV8UOFgOY3WxuSKUY3sHTK0Ii8Rbu1ChTg3XpJs6iBG6cUP4738VOqNeidXv1GIXqwcyKvZbHRZmDYhdWD6tROfuOOitpzAaisxdF8uyRuKk1sjUb/8v6G7Ukf5XbRIyzdLL+iRzO2+n08UnQB6tTG47oc2FrAQNlU9rVOEt8Mh7X7K0ksqZmdatM8lrzDLZf0zFqnumSGANf7PhpJr31l+qbvWviPlHvaifgkPYYescuo0zVR07quKW7bgV1v6ZPd/l858TsYNbPnrnQWkXpFUum3etpUJDQOBelEybNh5e/GB9I9XQTX8QXgAynLJpwSsMvpqfCV6vv0qHB0j/Ik31FPTqoFnjk2/kaJZui2QLs1GfADVgejNff2tn7sD58JH9xhaw4UuokqSyjcC4IlsppI45UFrQ+9lWssYQeqn2yoZpbTj9391sEYG94rO1OnKCFVpX8VdeJ185CI+nU/8iTG6WbiL8MdpQO+vdsjreX9kOXtBaUNWTbeCAWmo18+zSgdx074oQgsu2Wa8JoiOt1ihc/9/C+IPpc5aaHAtjUF2Cs49DPn010Sw8ZbK9R94fm77obcLIRUIq8dc+yJdLWWvHoviKEK9m9m0tBwc7JbYYomo3jBgaPJs/qo4iOhQBJunvkrhhzNl1jbKQVA3Dco3NNw74cpomJAPRe24nF4Ztod/7vIkwttw5+bcoJIkDZrYXX5qnMHKbpymTTG0m6neWmQdIwmsCK/eFrlmx3XhtiNT9XeD3b51gx5rZ+fv3p9BjqeO0n4gPt/fvKDIr/Ftuzlzr/gUFxl+iHxEAoN9BVt3kNpnHDGzRWfKXmHVzu6+99vxyqgQz6eC6friZNly6sP3p+q92i9j34Q7EUR0esynCionDwERVQWITDiPTjypxuPUuWk0fy6K+aL2hQHp4LqokiMcLfp8RfKD8AQdc/36oPOnJdT0UHlcHeS7ZmRDBxodbxk51R0v01HzIahzGknE2MtXCtA7RKjemZqBiLuQg6P7FN2rfhCELxFkhT+EfYR93pgiVWekyYOlZLo18+SrJH7Yfo1qvlvJY4v7rtqVPebR9xA1ZFHU3b0/AnYbr0DBISKohEWIlH34gZYTD3DxomjoBCOahtxUem+eAyqhE87w+FlXHSb1yn61ZCMtJyefW7cUbZvGPE2j53QaEbTgJUcst2Ph6ROnPT11ygRkdqmPoc/lGrOST63FhgtTsshMLoulF8CB1W5CAz73XzmIbJ0Xs4uFJamYUcr7laH6Fh/jidTdv28eUIio57vAkp4xpo0H1tRsTCpg+3wrqlvT79K5orRYJgsG8JOQThTDMU+kGfDxxlTXZdnQ4TZ4JYAaGmzkhzpziPajOwIOCiss/a4pcqC69RNrePx8Hjk9/x8ELpEmjFcyHj3VoR0Ka63vnIJmkF+u517Hjg2HrW+RBQE8PGq4Q5Dt+FIQasGsLvvT0YyUBzPaIuY9mFSNO1lfcC4XP7BUE3RdjbuB1esKiSGVTJoznSrr23EsLXmg+jfE8OTWIIO4UttIpJJHdrPOMO7e7L4zIbDXjDWB7nN245ON7iZgwH+fD9Eh5E+AgocLFAeL3aXTw5/WlW+xfi2kAxHhCGLJoEUo/OTfIOQJxIzdz7qLn85Y9L1D6G2riEEYxLt/w/IkvTtoqmqMnhhTBTvhW8uO0f8IkxIzIrdnECVN0lGOkKhQ+8KARYXV2iTcM4xDK8BR2w75Yewk7RvsSru8rkDby8g2iA0wk25KK7Q13hHO4Jxo07AMtNMbP2jxYM+LNcANZVeVy8ha212DtZZEbtcbyJMoOXXGJftQARt/Wuca6/YdFNLwcHi+eZNNSXgzW53SzKeNRSLaEYAbGX5HVJ93SyO2/oZSe1SfQaGlCsTB8PYtSLnxDdg1Qe7OY0Zkg4DvGibTIXROmUfWABAkxyxu2txaFkt8uUFnvlhNmLWXK6To34lyxk0wswPuK1gpsUSH7OwcUw3litfmUVfq2xoaQAtc1ht2jKDvKep+LQUGZ2sLRvU5IBvKZZqQgRZXzAQL+KNIlKkj7E/6YrHK/v5VmA7mOWYgcTkj57sU1EQnIrpviG2DfnYOsip5iIMU/AZnSURtIP/uu08nD3bDKLf9UsLZpMhWfm5guu3Qv0crqG3AZ+6RbZfwuCrq5RbV/i1im/3a3PKpIIb42DRER/6mn8gyp4jGt8aoOlOdn+iYu2WXbZAe4VJ4RL0E0JiDzKie+vr+kCxvgdXVLuDdlDNnQ9OM7FVvQFcjZ+21RUq1zcAKy87OMY3+O9muHg3HtRHXeJI2rMAdtkTxm5zN5MZTWWXS/+cV1K5hO/Qm+JIETprBb2h2NB38yAX5Xv0b6mUILfYKmJqGnewkrUIvPzCBUeTaqfQYGClDlc8k7CHFVxpktCo1gruogFdqvBIf61bLFlNcbdhCtZam+QErwNdXIJfvcgyFUDXdv80FM+vyJFn6Ml692pEypUZHmIVMDjrZDgWvlRluI29E4d0nkhuq3aSst4svCtEPKeGDdOVILYTjw7NGRq6B5hfyRz2/P/wwlPCdGPmfTugzgi5IYIxQr81HRNXq6LxuLe3DaT5xUfSsdMoatdyPhXToUXg1/EeOZiLwZHXnsPlMFbF+Ynf7nk2GWaPOCTVKJpzZsMTEAeo7I4Xkc/ymZ/2rmulhAFvcjHlwnIty+BCoh2p9zX4f7md33o6swVN3GP8lGWaLs29blWL4fmJJ7zHnpb5z1dodDivNdXI+Bti5nS+ZnZyxq4FlJQak/o9zSJ3dUZrxBSZlDdcVlug4SV+ypS4Z9WelCT8T6pbL7jN7bNCVvIFk7PQ6Npjrj5iW27BYgdBue9MdeLETncaVZZMalS+cfu85gOfNYz9fPrpJ4sxeOL8YyZTNx4v7r5rquusTBWIwxuRcyCWL3Ss7uFsYYWH9x1Pc7taOJ/vXLNUU/EB8oz/FxJ9J/JSUIPir7r9gCvmOFfJwyXmsCo+F35FiMWs6RHKIz36oz1jq+jGVF6gDlxA5aHaMM3X6vq0kN8LO7WrLSBObbR0WumPd7dw+tb01/hU/LDLyeqOCI8G9OiR+D2sG+hXsQhA214tJesgdGWGI7bLDVbhen5em5CfvOLDzc91BQRKfN3OF6QYSk+113mfXvvpxj9r+AEBJEhumT8wy5DvCrjODoS5JSOV6DP/QsypKI4XY/+cf1hLxzD1C9+VNIDdVh4AAFgREB2hZjiHLeJV1+4IRQVoe8WNIgbdagRupkL+c7Bn9YU6p6F0H6wXmhtwhfovpbblXC0PoI1jg6C+oWtqo17vcfiHTt1Fe8e3nX+mm/9Bbsl0l/xiPf29o/KeE+5AO6EnYV77oLeva7HOiZsPg5OueCfY6enjjg5Ci9j3lnr5lCpvJf3KHYq/iK3Xv5sqHxWpHAw6pbx1obxxe4wZv85ps3+hxjgaZp72b20HYbWyFKaeVf4SSJsMzjFCnlcv4Q9V65mMWXr+05gM+cW2WwB9jxeXwdxmw6CHemhIyOLoKqCOAwm6DzJYm8pJ2NwKQ0L+F/QmCJIqS+awhx4qWDecCHD5299c+GwjrQp2ryVNTzGMGjitd6w+OEhKX9jDEZ9oSfm4jn0ZkalQafPeLB93OU5rmcTgeNsVILQWviYAcw5aYXce+2lHBHv1M593hXhpkOWjVForeXUvWLTPxwCzxn/aAyol/7MMlOpNkAdqDFp8I+MeG/T17SBv5F/z4SV9ozfxvUDp77i2iRSqMM4Jx/aq/FVd1hrdzbb8E7DoKovNY8tg9brrdFg1OzJM3zBCXDR/Ic7o/gH0pPTJoddiGX+DMxByxYZ3BXE3ZKM1ZoAyrboLB2WC5nuS/ugBr3rUlEaOoUT+TM6YlNrgZ2E+4R0zrD8kggGfO8rMMjSSAOLLGY84+cChrFsakOQA6GfHR32UOQMNXG/X2NyYCavMZ/hVIpWGLQcBB+ceFnOYwIYywmEgbjuQ2TQjftwH9QNGWqtN5zgRKMt9jVX/6JUrpbbtLDzENea4k4Ke6h4YNU81C8yF1elHwpvqrNiRmnaM/n6SWlOGGzXj2PA8A3XCGt9aTyeLWrhrAmCIDM5lRAE4VWUZkp3GZ5mhnKWlu7PU9NJSPZ8FyWJUNoF8C6ScbjGKPlpis0eIELGP4T6n6tgrsqR9XjDTWc3RXK84Kj+9ekLFFoqXqwXQ1Cm6dipLlzNu0Rl5dbJ7EnlndKFUzoWb2kpGAKyxs2QtHlHYP6MxZeVOcAwg4QrIkE7QJC0q1Gs47ejnk1mRWg3vcKkjojwNuVHFoNkOyxqGEtRGbdV+YkGiXZgJM3XfdcY2KiaavDUUrbzdgN7TN9AP96XBSuadnQgYlOubhWENcQwtjkPRyD1uVhivAIU7TxBQQ0qPRZcWZfjIkiex5zcfILvdV5vPDwUappZ8TNksxZmkaxRzMD5Yye7+l7oI0sULN1apdFz5Bgsg/jZE1C40GE5xeoZs7eqXzjcExIbLXGe6giK5nQ0gS9SI1F/ojt5Qx23odgB9H0fPUQy8gSNfvUYk3gSnHSRPXZl835KmAxIJp1L99ZItVQTgYIDJtT/9pi8F6OGjnaw/vtWONeVaVj8M8nCeoS8+r69JGqZvunUgTcxWoGeIxsKYWE/kidavwD1WiXsNOHHdeGCk74Wv+SBcvdgRwpUEbQ2lQg83fxvVWhmbGdFQqwY0AyuqNXcvh6D1azYeFK3XIR4BYwpR6QgqpObsGDhUusOuKEb7aS3ScuATlkYzjfChvjhmCm3EpSHQnDLINpIlFMCE2B0kzcgfomjMyXzH1T6GCzs+YlQOMIRpOoo2USg7+dCqTFhnJn1sPYDSupz42PVQYY6SExRRF00d0/2U784VN1lXQ+eO1cefPt1nHPoylTzoXadvws5pMmlzKcRzCANP26KO3B1DETnd2ncVO9EUb4czJ1ylQinrcncNBSTpcpbx1JqSbi8dEcm/+vQ/nYoyEQ32BRfwydw2FWfUrucHWI5mk87FRZ1TZ5oi1OMo9HJmV+1uNk8IYZZMwwLCBc6EuRU6kyBxpMXtirmP+aBUz3rR4xTtWAhLMKVwDdUBe1uFVz85kCK9B46yd/iPgVryH6Tx/4by/dfCPdSwj6Ak3O9rj13X5BdWP/Q8eLWcmTMEnL5F/GdQ4pAsiOY50j+VfYFec2/PO6QkIJ61IGb//nanfVJ6BrySVF3Fo9JiIN4jkkyha6Y/nMdJJI2ST3USeFRdG0DJqvovBBF8cqOt8ZnRLJX+F+/JYnSDV6lVdQl4JKaGuvnGMUbK0v97/4MZbTtK1LYteNL6DuW9vaMv+fF1dJML25ZzEwy2mL+bHRdz0ceruDzJDU5XYgMHssUHNVgq1arzk8eMUVd/JhQ7dQTfRuv62KbGqE3SGdpn75CcxqKbtNIK9/pbeHD3waxzPyYjARwaLS7GfuHVlbzWJ0ylsCpwJ+HI6ws6HIWM082/EqQ+Zk7Ti86Ll5QIdX6nPqlQ/hDAewdcBiCq4bJpQqfnx2g90Hf3Jt1wiFFoAeVFhHDSVOdfo7h3nLI1NwU6cPdVq196NW7daQL93QtR9E5xtblQMU3eZ2462SjuI7OHM28T7nCJJV6f0MWsWaUZjW7D7veQjgXrz/2Pu4lp+0wFoRtCskU2vfCoAqtJ5XCjvgpSlmmpIYWuwTbRg55gPjPObGhKenC91P88mumO/zE9Vqo9t/b97nd31zl7S6k+tLWIAOh197Qnib4jlbftEtSCfWqgygFH8uaAcy9AW4o01tiEO7x365C3YGOejxm6BbyK3BCTER01ZbHCW9PJTmQRdJzvRYPh2WB3NZ9Q5H2NZbWmjBFSnlRqkoy8Sf3cjdTXkWcwLdfPJeXWSlU2tErCUFrytqIepRlvVFIpEWdIqktA6kKvFJepot4wlxRkkpSpXELtP9yLQ/dr5+x6sifiITFh/rP24c2m+CoVZTqTLp4jsJUxXbGC+fZcm7HSrkCfcGlMI/iRW04xNaqoHaQk0kc78HtbNL3rDdYydC8PCId2nVffFa+I7z1NJS/kHgSsddRKLFAZucoqdUuPXrxpvbgysJ3fzZbIKMzJ8KSVveksGbOejhaiJ2/eX2abHP19EjZdmmvMx29+V4mzD6mAzDZeUXYt0fC3e/M5757wjIIQLBr3Wog2a/kJX3ztSaAyNTt95K3zixrK1pp2OSjgO+sIZHsPB4yz6A96/lTAWOGL3jeALCd7L8fh8eJd3+LZofuT9EAfVSLMozImDSh+/aWM3csu/0Ntef4XVJsLOD2ejAiAtDDpzv8ii6J1F9/TMGcJkAP0Xvb3LnSSY/tnrzuaH6rOKlzS/vJCI9DA8YNNa3oOV1vL4b7RSxePMTbX4v9GOGFFEqK+96Yh0IIIXPINl29CkgXuv3WhH16wFpiIGFfkRLDCs81CqkFunr1ddV1kHXq434aXsG8H0tMqYU9wGWly05FUaCLMNc0gF7X1YakjylNKLzCBVDwanDmRYKocWF2PmKfoQ4WZ7+2Jiuxv0303ruYGEEk5bm3a2r9IzsYQFL9ejvnbvnzNj6X5ALctQR12n14wAVLpaxXWL7tUoksWDgz2qkobsCR9CqudP3vVkiv3YZsfUJzFpNI/dmIs9AnbAin+QdoLBH+XoygN2UIF+Qh+DtfvDvYoUkXM6T5igHpxcojdHzewplSZFrZVVvzdJ/eirLNLq8oquSEwgGzD79GYu0Owhc6OhC7eRwR0dZ7O77B91yT2N+JGlZNOB+D4uf6jz07CIF3kmSF5jY+ah1Yy9hOlmM6nO3U9k1oW4/44D3o97uuvHtGH9CZwh5zAYY+TJ43XT25CYYjd1Jf1hT4xOhMlI5//a52G8FrKZlJiRh0/RMsWf8ZReFwTfPc9toqGvGeJ+t34piJimcSxAmS5jWwMP05muYRMiRhFG78yxMi+zI3RUzwBsmMa7rjOqvNmY5Lu4S6NmbdgcdDD61rN8Hi9uznyqYb0r2qhJes+2eSz0wDwQopfC8YOcLw9NLkDH2dgpXpCl6Mp3tUQ7wVvs5JQ3gf9D1rEeoP553LYYvoHIfZj09ZPLSSc+M3rfj5JOlDsFYvj0cypYbaub3QfsErkmjf7jJ+LvkrI5Z9+gZyYS14uQuy9Pvqajpuu+eoSCzaKx8i2WY2rnj7/cc9rHozPWL8ThGu1QwksbcDEMPIa3/opFIHqMR6LTraCuiSutw+JZixVFDU9SQg2s4Lxu4Od4DjM587g03W9mkKnNLWD7sdflulFILSFa0vtM5NgObT6/PGruwIss5cI2CZfiWF3A6UuTQuoLKKjrzIDRfdN+P4J3tBo4FSq+rbMHeqdC99It1eTyP2sus6FSxI6LUofLn+eGLuO8TuaFGSrpDToXSoGNTpKLQzcqsvuhMHNK3uP0Cy6mx0l/nO4mY7FcTpx2NxfnJvahrxehmEp5dXbb/DqlHJZxBdp4122rQWh+BaFG32coByrzS2s9ujBQ0DCjcrtefl3pxwaGw2zpkZytqZZVN5KVvIZX5r6vJh48yFFkjGdCHokeiwK+2cKBSQ0TJ05de0bFBwJCsNddsgxZdXR2+b6phAZzHUfFCXbu55xQY7M4X3kNbPYusgpc2bY6I/FiNczPAlunXxuasrJ26pse61AzpxG4HMvc2VoahLFbgB7nZeC9xOYe903XNHG2RzMKWKXRha2NVtHxrKP8kt6rP4a5JTCzbk7vPcuy6+tyDsh9mdUZEDq3oJ5JlK0OMfuxykgNTVViFngjEQUAk4Rpa4A3+gXA6JZliCwuMwMFcrxc5PyYNcgVTbzuyoLiMM36PmBQh10xzfRmGpWNS5D/eliM4Of6rFWHpgsGMLSSRAF1yqk5RyD3ypG0KM1CPbqlXRjtC4OI4Au3AgBk/kNPG+YeXZqECPPQj6rjFPntPW7ZNUwJohdurQoLBkW8UqgNy8ljMK4nliNhvCC9Us4ei4m1RYqFmqHWH7cQoXkmK2t4vKQNgkv6cWD869NbIF3/0LgJbnvWiPFxEKAOn1aDTegv1SW/pBKzn8lesonktw4usJ344FvxtKLzqpPV4D9iBDTPNvOzSORm60S/2uLQz/mG987kZwBaPW1bQcsjqZ7l9bo4ztPlqtJbrnwMT5pKm23WgA3SlcRYsDHc4ydolU2p39eXNENX7XshIpqjj7SUnqAV/m/UoQlpY2i6PCX7bfppvPjeSmiO8/JWYD1u6/PB750L0KVgvRM5N2bvzAEmOaAgLu877P3fcGgKBk9uU9KloBfe/JywOiEf7mc+EHbSyiYWBEceTByEiwyTyV7uJddTIPeYqu7un7eYUD8ff25d3pZ/CS9CFOg3Q5fwbgitZMLooUiadPr+oiZ3gcDCQcIsBb8LQGGfvXScTYyAAOBdUby29ZIPeXHBTfw5O02VrRvopfZUS69dmpOWoa0TEPt8qVBZmOzKv3LzpRmjTFA034kuaq2p+8PVMXUyZ6U4zy0vUfi/oTV4wBieqOP40HPZedbOWOXGZ+4ipQrbBJpi0JaFT0wn3z4jptIOTavb7y3YGP0A+w7f96r8EwgGlsccbNfwPu1XgBGkkLdvb9g5c87h1I0mYe5YAoqWYW8tAHnG9vAA68y++H3kNCbIok5YvnbkQDU+LM19H0vq+Q/SCtHClllMUsR5wN2Wz9gLpLiktlMmuYq5N5R/usChwHDfBMRTQTq5lNH8ZLuoYCbo0ODGTufUjmvmsJ46HbfdVa4ydwgCbwC+0+LutkgEzyaH9RG2JSlBsrgka1FEwYjTezfPtgWO2CkqD9+8sVgfNXPuW/A1Sp4HsO2QIFpBx+1MA1AMmFSpVrU72MEOCXpG+uFnIjWtAaBTDnZYOixn8DT6urjKTTX1576sBV2N6g7hcrgjWiASTtwX27SeKGCljdqcLICmkD3X+4rmzEIX9o7DriKosUrD1P3pLk0Mym2pOVF56/Q+ZAqcDkRuq3/VwkfXNja9YA1I4eFA7NJBzuh4PD9jSMCx4AE4rrTeR7PavleIgjNE6r4Gr5wkkwhbjw9jMbYlZyi4T983REH3geVEUmNIIN0ucIL7RF7lShBc2kM4SkTitJLYEXldetICs6Gv+kZrdC7SPNHQyELkvtCrkGgUnZpHiKQvkP/4w6rEHwGytcFu8suWla7cBN5Sr7AUv7n1O82x5g5hwDBE7iCRdskagJeKeMS04R9PD7kpzptVikVCZ/eLQvgKDCOyjcTgmpbpFaVzpSzwLCQaAdczCPG2IEOqAd40ni58M9msv1lcc1hnaA3FMlO4KRNExI6F/GbEBRFMsdWMN5E91rIB8mG7YE1SnPL2xlmeOEf5oaS4Yf9G0ciNLlIgjZqFFPyf/N67dFQg/m3CGMDTVpDOni9kxLCMhK/+ZM5Rs2xMZfXwE5ugyQS+NSqIKPlo/pnZglgWcZTgn9AvgTZadvKiJGsERK9DlygAQMrCeZtwvmXgFz0y7q97vuJTgDSKTMSVWrMCzAEwOwIgGk/eqk29HeQ4ixqUE+TbHH5e88QKSEsL3h/2EADd7ZNv7Q0J3J83tD1sb9BhDG4p7cyUjHpXBZAvSJTyVw9+nY6jujS3uosyKpoibT5j7BcQ4p/DiFrpc297wzAeDbJgub7EHUPHPHpmB//XQ0u6JAb0acJePikVd+uZjWv0fWlHrp6JNJoEij+u4tRRvBt9MqtxYx2iMiv1w5mUMvk9EC4TORdbuLo6mS7zzL7C9v96284+gDrvp1BCKg9DAL7mWpFNqBkoV6MUS/NKoiZVYO+u1yRrHJL6SAJ7q5zZWcKtIdgnW9VkZwNuVlBaku+NFec3kKmEpJmINHZmyeZBp/1i2NyW3hyuu1vCJjLEojgZBq5ArRYV3moicsB+dq1MaCEnWt4autlv4Gry5jH11md763eQ49Zwqat4zuIAT+Oh6pchiOkSeCEQoDUAljXNibXP+M1sdQP4B+2MCOwpVzBn6CB6Ia/QMoXYFRPVLhx4HhBPIrwWhf7HH9UxMTC4QMQkLhOf2WLblJ9UHEIZnQa+C6D+MZXbRmCRujRGnLlKvJPMW52Y5DrKhr0HbAQQYrpSlV8g/l+Wm6ErgcdYcDGJl7TWmz+s9LgP+XyGR57Cf4GD60o/GzOOAo/SFsfmjRjR3LiyPHJZU8IN1iMu1YOgmnAxEKktvMTutJ7NmXJrYeMbjHY2mI2A2LqkoKD5LjxFHpEirMVMQCuDnSmxCHb+ZGg5zpn2+ElzTUBbiZkF2lgkSSr0F1hCyE62rNMbHC03X/TjuIrRxkPj/iqv9wZCOPJBPpH7/BbcRtdPxNWkXld4knsa3+gttSkoYP4nN5ACGmuWt8bGAkuxds1Aa6OVPMVbl+3oCkc/AfDaXDcgcS3YEgP/hwYg8iJj1zatbf0R5hOszJKLbvJIl9fQoRTHAlTuc8IXswzKWTiE+l7lNZSPaRHwY7moEn7R7aHoYvmhA2WxHVaTUf9iLJzxqoSNqkDZT4S079SMOwY6K0e4NEDz6Uu99NChey1WGHas4bdqiDYjP+l6NtuKUR7RvcwjndFbmU2H4bkK2DdVjaJVs9mHYpqPFR/FWs15GpnzZiaySpyp3Eq/3al7eulKorfmGEoCBaJESu+if6yIzaX4kD30KMnADvglDCEZdWSflIj26nq4G45OAoxZuP3jOIyVwIk6vSz7q7c7x0g6oWOQ7i3BSwd/DwtFUR30PLXhj+hKx5W4SkRqr9VM2urS/h/YIgtYDO3daDmDiXwGWYpa/a2XvgBouLOpWiQg5Uv3VGr5vcyyL3+8ujHmabtVRT+/huBaUdpj4kaYbl5aTsijZWxFabCgTCNNVeQ2gLb/zhIFGL1yqf5uy9z0ae45lorS8hfUaeO7JcGIX5rHQBf643Bq0udXzDfcnE9UqZEZEEMHy1hl9aWITGfQhLDiGRBeSgdEwSiOV0ZstAzzhclSBLpzEAunTbz1FvWRJkA6n5HyOeJooPqOgEldilPrN0eAebHPG4jXzNhTQovWlI58F9L0GNh+qoD9CA5EEQbV3SCfV5TE8X7f2uczyGiAeBm/8iiD3E9d8XR9iSBt2GZxJgxypPLaQBKvDYjE+xttJiuqWgDBqeqo7P41j2i2jvfb7fjJtCKFA18yLbOSNm6lgRgkJsLJjpTPotZt15mh0aU94dUAK5ozCM1WyflsAMD9k77KZBRM9kzPYfpDuZMO89ZTvznJ2JdzwC0AZIIeIREaSWn0/UJBsyhirVDy2b0k0rdAN4NrshyH0jj+bV8fVkiA/2kbPE+syYg7ZP5+mskxGs0xXoVT3KSiLaeHI1XhOQErx5Gh2hpBB5m11USeVhTY3q2RIaq495IMGFN1QWJKQ59O6IeqI0EOlvlZghk8S6U2hO1cvXrYb7K358iXetWidAjt0QnstjDx6LPFzx6Yr79tCop0xrXX8IeUyzys9k3ObR33am33Bvx38g24XEq7qcUujP48pMhrbQHUACPSamy7lTFjaEUh9M3yNxbPWGvSfstGp6G9IyzDnmCr6pAuBWFaJwZMC57PJTcdI30MW114fqqaw97eV3G7/et/6b8Aesm3fd4n3AY5mUJuAxp4Ibb0GIIIo1d1EOj4/4CiBY9s6Hlq0gMxqsiPvZL8rIoZV/5y5k6kTa6ZOSxyH8q0FsDDX+VkI+SqdMfV/rg9y+Bm3cJZ/eYh8Nk5DCxjfUWau7siWAvZE1HJ0P6MleEdupI3dtihOn/yBjSJncvol4Fuh7J9NWfIdYsIbSm1N1NDutlpUGJNRLggnef8l0tz+on2fqeJleZ38cfwJ0QhOh16Lh4A5PENPNb3Ya9Jwc747jz4ulJyESDxuokK0yaXeDzzMOhybn5c9VwrLYGSYItGTwCgak78rr0MNDfwMBpzLMRpgd45vsFFxumkj+GPEcCqbeuK+jKIkXWUbepyj0rVAqYwfzVX0GR27HMlm7CewghIZXTCEjHSnvsTd5IVkzcaNyb7CBI92YOOUZparbq1/s1LphEEWyRrJyf9+j8DzyDpT7Ee8/Ak9n0zW24xC1fhVishx+Y8EhwetV+YwWmhcvrSluT+OdMP2Wd8JiN4HMjdRhO5uosWi+nT2pyFIU1iVlkejoM5qnPonli9lds4Xwj4BOV/hQSmJWh1voxfkZ9PPQzk5h1O8kylVRl7WUKiWearlujLABbIjHm+elwasPnvwhZ68o/oMzbToq48XGQOQPWOJrBUuh9XVag/rJHJ5Ej1hbKNndluNH8lS8baVc7lvQ6GuYXaScYRKN6gqGZ3NWg1vha9nym5lqWIk/Qofv4RjbULhz6tGAGFe3/wm74lzo10CXeuWQUK2aaCiPNEouFyhleo5fDBavcwJPVGk97uOAaJetRBiN4JG4LuG/0j/GQorhQHUbkbJcMiYLByIN49A/L50nsrtqagudLGIyDmmXRaST5nyr8t1VAltKq0gQS5lgb0nrzdCNMobGPeI/sQtEsnBQiKwV0T3yYLb2j2M1rXGCvUOkyG/z+2vdt8OSGJwXoCPB+xW6kF4mKqc681NYEOzAjIqxJdmx7Gzre0br27b6fiNuKA3sYvEbya5FfB7vVGJrKU5ROGZKDuh9RleVaslJ2+3e5ycQjUrPfKnZ43q5mGRTPd0eiFFx/4jJBg5wYLbZRMQ9wQPyuQih1MjLcPl9LuS/5ggc+g10/PQRBOW73mNXHN3H3N519ibAsZshQAfno0fRG9mU50Ve61lcO5tKMtx3LzDTgHO5I5eXoXH99DzdbR8BpKjHZDNin/42TQ9SaZ4YVqm/XIp8HZRTcLHZKrx7WFIykCr8VhLkYvGEbglOpBu3O4RJj5bnOaPDsZccVLtnuHCBZilRYVuhVvum/jjkeep5aWlTtoWDbDj47IK8FpYnNFSwGPxBeeJx6UAIWDOTtHLKOq9PeJvdXQbLq8+PwWEnL2W28VzJpuOwGjezvS4+BCqy3Pa9OYWpCzNFcrkHeWfyb8990wpX/Yc4MLk61GbXRebE0TrNGSkusZNM//qxaXGuWSCjW2+nw3KiLO1TqQOfW1K1INVHe1mn453pdH9Cytle9PZkgoDiUuvMg86IP9I33GLGl9y7DhvSUo4ZWmBCL4ZvvwIjPecU0V4BtlvExNiorVFpPQ8eqgvBh7glYRQl3dNVkfXD53TeI6hbYQStDWsgd6vptnPLSutWFrzWC4rD8brxE19uWVYddZtcJFNql4q8YM6ncUa4idPaSeQm5JQS+McO0vg2z2QfJoyKdMigemti/oyvMGTMafTeBvlIbTF5R/Cc9rgCKmr9pqnt9pcmzcws/cIxCyKJJmAJBSvk8ILnBcQeXj631yaSWJZpurnJ0Ivp3SpojFObtpd47kRLAiXgdQTLhJL6DyJVNc5DVUSuiizxwwaFtUYL319LndLR+TERk08pVXBBiHYdwMJJ4DP9wKTrTXRPKelQaOI4VPSzBL5L+NfxHmqxqZI6CyK3D6Q2ud1FhlthiQp4pp2dnjDnNmIB5m/W+wygXvYxc3oR7zepKHhOtSfDFmtvbv/8v/fVmoAi4W6n9K2n8ZF5ceTB+eCKp33P4j0/raFTkvwB+a3dTK8zA/oXnQuzd3phLdJJ173wShMkybDshTzYtowkuV1XVWCF6u57tBnFolJiVGEOOhjh6IdHh/3Un7Z+pV/jJbTTjmksRZmBJ9mr20dc1oo3FmsNZYXRo1z6Mt6vZPXEeJdEQeTqSoNhxQnshIdKh0bIaD75fOAyPWKXUg1/Xa0mtxOOvQaMQPU3syufcIJiTahIQbFD6mppAmsomnCxIv3EzGHwZRvtJcOXw+Yo0viKAOYp8hKoScEGrn9Br+VMbmNYmHLaVFM0BBC1Hs4HCaHBk8qZqV6hT6o9MqgkfXFIZ89+2hUe2G5KJ+92pCTs4h5GR1egEVsOD8y/XA15uKXxBorhknKi76gogV0xo1Oy0V760/DH3kIVAGAlXes78gLmqBODHZ8puJJbPmNToIWmt+s15mx/uVmqHzEvmgQF9Qrm6G43efY/vcvPC67LU60A8jVWWV+s0vyM+mMg17tV+2Q5Yog9crtZRfYpnn+W/bwMxU9QVYszogwPzPx7tVwjjfU+x22Wjq95N1n2WmfH11iKfIrrZ9nj8mTf5TUWz0S+lGEJeSnJp3j4LHv3iUs/i+cgO1HYTZy1RXwkS+FPcfksuy2Tf8qyuBfdUmJrjYql2E9x/iy7Lo9bpktrpR0eVGOKJ9mvWJj1HB5oXnbVCtvaHOVBIbrGWAn7aKjQ/YUJWZlyWorTi/1UqRmqa673H5zcTjOYI5qnUKsllhZwYIGrDUY5XWYvlYhx55QctBYdjNHcxFeoSTurzCeOukpO6reFsUrvrcRR7tpImpfjvMWneo4D1XxAN/EAYORCDfw+W5z2bnu25+0e+NwIcE7Ar6BVNcilvCVg0J0hVnRecY2c6EBEVHoMRR0Yzi2O3/KQyBUiJNZ/ubtf0N5t5JL6v0yyQ/ZO3wdwCv8y3uRY7/ErCxV7gHW+a93D/BfbRNdNhiidPPZAVbQp163J1mKzVbUqD78tFp3WU8Xx81N1WavkVHR1envJEx/4WlYoOE3PL/XUO1Pbr6FfeI9MkpitmM4tPAcLsxFNCbV/1rjB4iYs2xxyDavJknPXVNSgNaqsWuZN+WJlsdJclidfpDRtl6nsYltTFsufet66WIlbLJXThMDQCrSc2Y2i3WYNktIMAAPHd3fkPMMS6sviZQd2wu1G4v8U18+yx+XIxoNl13EEVssXy4z174BTR8NuZtZkCFpcSqp0Zzzjdk7d6uKZDUqjG+1RwITtYHOfTAwb2ZTXdrncpO1yHzDkPMyaoL1bpm0h/97aVHH54cveQhUAUA+rqYsan5P6ZmeZb9kjfleOobvpBiVrthxWWbEnhoRsaCT/0Y0l3Z0r4HXaYkNvdiON7a03VUEhPI/Bn527St2ULIU/xeWz7LYMvsLL1u2qbYZdtaYwesw8Tm0XtyIooATjGfwOddC8zJdQ75ac9y2qdq3z/wRPwbLrMrgSat1i2yVvCeEhTdr9shVKfK3w1ZRlN1T6dYI5wm4Q7ac4PsuOp0oAudNSb0kffPnzE1GZaxN6exPhDCXTvJClM2uCifbEoPDHNqGSWC1ZP2kx4wum8RGEmoGTCF5jSNz+LCa+qL6oUGMVjZtjCOQTXtJFxCFcDy8D7hTnwXRvufWXPhEi8dSSaiOHvOT1c7BibmVxwXVriqB2+o35CzBa/SAlqUP8A7/cAQsKvaPfFcaUj3wa0aa9BcJsKBCqOjs9mf4yyJYbWzCZJwdtBSRwl/+G/6XZuMfm7V9i+9xzSe9Dm6VqGa9q73vuxpRToXuXxvsTw5d8m8LLjK8QFvZ5dJ4xQJ5JJiXtiOLefn6KIp2Q6gQRSjNTEC+zgyU2btz3gQ7zBRPXY307hUQVxVmvYNQ8u+00AwaLx5hzgJjjTEh+xHuTcZhjmH2U0V//O46DPiiqNZkeuJyCskT0jtLtiTj/9dUiesZChBEEHcmo5KjdM3TMlhVspQIN7EuUB1r3HAiIt8rKi3rVmiKgYXadx3RKf5ASqdhnCfIThs8LhHiblnTykEgtQywAVAmpthAG+20vZJLja5NtrfW3Sm5gKNeD6Pzza3D9+8m3B5FzXlt5QmMx4amJXR6iWVoc+Rj+pBGrVb4YfeQVASbeBDA4QIUfWIuK3871kGDg7C/AAWB/HuJNNxfmayAVjiYVBDq7EiM6dhRVdEh2Yl1l0n7WNd/i3Hi6v0cMDUNXqE8e27viyzilN1EjVI2y4BFusJYk3VQFJSTZR/YeStjloL+Ju3D83/vNrxPo9FGpWcZz8EJ+A3WgVktxTOWIhD9HfMlaG8eATMei7lJYpflwQRM2aeY7ulTINVmKHFEFdICoF6EikFtkb/KOwNcH8xb2tjCjOEPTfL9AVlgyYljUQw84wLxpv4QO0paUumkA6WZTKSDgxdWxeGFy/eo27pp3OX3oYwG2Y2MSlmsvO6tbpWJbLbT/Z+nifd10tjsYITBFqI9TenJgPk5wUxvJKbi4bCEf1gvu40iFsVrm8ij2hzgB3wKw+uNKi0FvXtKjPUNp7t4gUtxVEPtjqGQuyvi5gsiEk0rxfFVA1k7KU4/Q6OrrM3ZibRFlmJxaM1xGKyXxtGr326xCaFfNtp43xB1CHWh81EQDw3RwRwsrXdHHbWEZLMJttjbagqaei7T4Y+5gVS27+VrBY9U8gDwZlNRUm/2XjG1S1bRG3C3kJgi5ovRnama8S0gla1FOkZfSNmVFbn2ZL/zhqrubde3PFufO+iv250Qjq9EJ4Uau8edFBSBWdsuv1vqcbJv4qfiGZjHscm7KHAPNCzvFLbrQRhRLV2G7VYHhce3h2V7ldN8qYl+2CfO+WA+/rLudS5AZi7X9I+C2ypbNiJ0GRtBq9gHxAViqHwx5ecIUADHeyB6fhIeRan/LbGaFq8/lu9dkCK+/S1wbVxRXor22RLAMg4mTy9vKalKJONUU3OCgxpoy5fPJ2t8a3zJKk7FCZwVy2Ldkhryga4Wlq36RolraC1xb/cA+4AHt/WakthItOyTSdu+mGjMPYhfwkUzZf1G/aPjSaH5Uo1364lufqkoCjuMxS1wJzs9hl5CdVTKBiAlGqYVEJLhTgSWy1V98gj85zGUISo0uHYa9Z1Tke9SUKhw/uiMIrNkvLe5LheoW/yc0l+iJ8irIP/JaLGegI8R+Zd20+GcbznN2M/X1AQ+dYtlQG68ZIB8KAWJK94qVPsGIIm9aE0G3nLBTG9m8VpRy3AqXj4WI0BOKr4OaN9H/eJXRdHuDXwMCKpVkzo8n1Iucrw3ddMrF5CQJIqCAJ0eStZS2rr2RoJEFhOozRDFtUuERUU5rpiKDoq0c+PtCrxRwCLkc8Z46Im1RM2RQPkExFC2+/6O+9WsswBdKH8RtgQ+HmOCV1PzhCJkG9r46E5eaovd9zhlsNZsXuTjHLQuLMiEHhLrS4+YLmnUPyfAipwOMvXEb+hWuzjLzg5moCKPZicKC/HRjeC1ypDSdLalJqglfg8o/D5Pdte7rWv8AQ6jDRqHthfU1MvgrPYoykTTkaI7rx7trIxwaNsLcpHQ/84j/nGrSatDa1vFzk68ukRM6pjZ1mvCFZ9WOKl01iuZwU0/kJoi5C6SmErHo8jrnpRmH/CQ6zw8fVo3hYoJkWVUZe4IGUQlMp/7cnwEeNYj/6bWMV0YF3CPnWy9jc9QB+GEKevpnFTazhCIueexW3ifKoI3pXaqKopllFMR/EYNqnitlbvJHXysGVDT6MQIwKt/S+oBoTBHR4gk6hjw1XpGk2xOn8lcXmNd453pOX/Sq9bI172Zn/en28oL//hiXEhLcr1yWeHY1No3aKA34zjT4FS38hvYx7oP/CDnvwec+xGHSiAqWNGh4UdyPgMg0kjSOi97BoGOen8CAIlwM8ouPKfQCJzC9IkIlhwZrt/r8BExzdlM3+GavQ+DjRkSP+TGYtndY1Rt9B/0kPMmmUjpPKKu001s5wWexbdku4ht2zpOud6WWNkSQbHjWiTIzWGzIDgsIhTEMbcoAMiHPdApjYLA06mk2ZZGhax7qXcNFkqc+kUKG0+jbtK2tnt2LNkHNmUEi4U0l1RQSg+O72neSoH1sJZV2gocv0dbUzlsyBJQ7/zYQQe07BAcNi2r9wJPJqXqRYgt+TvpciC/YxY8VP4JQXDWtpjX54vWkLujFb6TWjcX/A+rbAlCsT/K1coe9+WdJfJh2LDq+KiAy75qPUA3ufaMGMa+lOlc7D4qXXCmFbSx/s3CcXchlwCXpp6G4peeaLf+wkjWSYIDtXua3Cl4dRUlDEWq2BoU9Mi7oXJ79Ofve9nFkXsFlTTYI4eiA7xY+VE8MDiDJKx9F4PuowMrGuudWlI0BQ8kFgb1ijdtO75Dxgt6CpQcpOCcCZmGOFApbr85ASdlCwoxDIvaHaDVqa+h2bPR3WBZXAOyyTsmY5a/QEw4U74D4G9uTbCCWA580rRPHd7D1ikVHOZgMo8wUObwKoMkEh/q15h/+2miUvd8RHfUVL2Kxptrw3XavRQaFDyYL38GTUfYoBrm4YCaeZ6jp1gt5pxeUGOGqNFe7iXVIsp+rdVP3UNBHiomieIF5w23EEisO+k05gok11NCCWslismjXmDaQLQeKBzeQQPxMRXPOyJd9YvoauY7x3neCLegFnbFi9gTadqhWcgexXz9/nBStfbsUHN1rF5zM3Ny0MSpPJlh9oygJPhDs4W6Hi6UkQ16yd1UeSOqGbdmO63HyLHteTdEPrfCjP+ekNHX7kwR2pTx3Yw9AJxnLBdTmLLTowNvrYmuJYXe9DQeqEtvfI1Ep0EYB+thCfN4WAJHPUwgOIepP48RrMjfBc9rDAWF/bukKHWg2jK7gQubwJDPCFWPiG+MfMKDYGKYkGH8TsyH7qCzXCnicyDgF3CyE6ZfFzF3L1+r2KZ6ZWV2WHZJivUGWihQbg3BgajkN9AjAXxWSI4u/CXo8YMvSI6BngIAGpgpVUg82PhDajUDIocgWxoW9s40jXRwubXxBIsC/DeD4jzDhIVBN3EzEtyrImQ9/ZrdvkD9uDG8N3kO+wccrx1yETV9HxyJq7YYWWyLrTjaq3TLumT/AmSO1PunH8D8Aw7Oehe9XwAE7ZxZ4O4VALfgG41RG0UVw9caD+zaW/3tiiaIoCL9jXRvS///1Y+AZBByH0p/2igyIgLkCAxlQEPAM+JcwOjcXxTlUbtNZ6yK2MaLdDq7KYpbJ3XIa4A9f8+m15slIFrJ0VxQrYjaQ7iASHqW4zrElVstUxuG0nYFdZuD00klUQxhfQtYoHAMPbT13QcJKbEcx5sChIrE2wCGMr0dPauOAOoQnsTfPSHDSOHDKiuPVS5YWQpclEfb7bl4S497LyzGR/+gW8CXtsAfAl+fXQb5uHr/YoUBBni+ALcaRdyEuk1tZb1FLe7s9r58rcETf41s/FRmwiRh5XHQIdDwWf0ZMPdjr25goAxgInwbtBnG5AXm4GKIDNRL5iSboNNFETLx2hvM2DTH46JBU6NngypM4KwySzh+AFA+HggVfEgE040ppdxPQOCFZx7rKnoRZkyRYmH3h6RufFgIoJdZ9QYRNkygqJ+4avJ2bwFFX3nDl3hsKtyMeFDUWA+m7HcAwZi7HyzpX6waPXapvvPQnpn6v0DR89VkrYPGG4g3UDgtboxyWwSq298iM01abyJxu3S1XuCLabeN2NlXXJhEulrcamwDgQozT3YuD1Oz4OOAPdTFLrY7LHfIEbRm26sLdt3gD/c7PGetqDeqyzdNLkY5i6R1lKYqHJknSkZvFDSqtdrhmWCA2tGnmvtQAa5LBmiHLx8t7bHdGAdKY++ocETa2mEH+Wd6SCobErfX3vudhXP9Trbm2CTwPEzfrHYMYNaOG6nriYNU4dSOT6+4D5oLboWamifUrn+T3Cl3Vh3n2Ck58vlfPW/d3+LICqJ0KSp8b3Bor6UPI/hzpECtL5YHl1QI4rdBLxp9gKZfdaxl14jwwojvgHaiERKGTPCoxuJYPUcThDDcWghMFsqMOvnwZnUquZ+q/uuGl68mQCnwLskT48Ng1Mfd6C4B/1VhqCnG4+x8yMJlwIVHXpCdcCmifkYRnVho8FXbNdx4KUdaol0B6LcjW93OaHJjDxk6I+P/uNSOtuzxudoaaB5p6fd4PmtCOSS/elDk1PpDaZu63YC1U4ulkY6IJ7KaCVFmxxrEGFlImK4EhsMbAITWa1joIx0XxEu63wGvH+rlV+Ri96xND2SZcEJgILPVZLWbptdRWyiA9GGBSuvWg8BIKPhDXCGQB75W6gcEDRujCWmA5+2BeLuxdgWzdgw/iNYVo/O/xXH1/ebQ4rk2GOq2i3csFftuQ5Fs9Cg7zZ8O43o1TlrOq7IM+cME3fIsyMUKlHT+lJXPXnvFFuFdj55VW+N39RFwYxTVRxAh4e8jYqU0Jy59lRzgx9f9Zb1854LdjJAiHRDizhebboGkycxYu/d4IpbOPpEBqk88wA0SMAChh9jMEZPm7qBxVrjGP/TdKQqBhHmwg2BAYGTMw1bZVXlnlSmEdcsakmhfNK+Nk8vCwq5UCUzC4R+9DoRCec4iHzi3iVfe2rMcnUUFItheP0xcirEGzZEz4BYYw1BbE2zmAPxPlHijMXtaBrnW5+UzNyeVdddosBiYl/OY5CvSTLN4vpX1u4VuDQ78qPgCFV6lQ5ydtn7c990yXWj932YgGMXTNEhXAKkbkwCdpn9DhSxoFiqhdlOgl0QaM3yYSNGyuSguuDS7dOOF6Pa3qCZWOh5zlkspoHBSPzzuyz0ciOKkDRwrMjYO1j7zW8iOijstkDYjNDE/RG2asYaLpTuCqqNAJgdwexKok7IHfxTqSYIY2ikpSEe708UG1RapcOO9GjNhdr9VBnPEQ3irYEaoqL3QaDRrWFdK6QgwAT1fEa1WTIU6roB7zV4HJ3dQdjGthPnj2TBGVwkEafoOXtvpTKHiPOXoDPrPaL+mDLCsJV0H2lVVtPF5/3RvDnEXDriygqJaj1tKTG4DanUM7gtIZcstNcorMCbQAuAAwH6sw9cqzTKhC113JniyPeMKj9r2GXqRJrleJN6iwVOWVkvHiXCjUtS8apE/ulcBWD7dri9foNYGPoLs7ELwR0fK9pEb4+MSjDTmAfgMfBGV5lWs5GL5/SJspginnbOn2SvPolRtkIIK25m4sPG/H+vosCrZGzTAo0DAuX5ZiIVi27h+pC1uomh+V18ufr//T/1MSia+PtPHaTw93D4Xf2qCxLpi60CXw6LRWalpYlrv9vpz9MZeS7SW1TCuL3NsbdgEN0mUathbecc3lVnWi8SPPcXrfBAEsI9ZPpTVJkhoPLxr5TuMJGv6Ac1BzgSyFGsAYRfn5LEzU2EVPEriYbiIs3YaBTpC71IVyz9s6a5V8PmSL58AFBF/8RtBQJAsxHZNHPm4Klk43C8X4TF4/qhXEwjrkMsHq1WNK2z+uP+JA3NbooSNP/Z7+nmB65eMy1R8EDMufzH6VXrttzXj0DADwXEBnhCoPZaRUxeiRG8npLsE+ut0T+2Rxu8pHXS9RlR+aICKnSxtVdC6lQNfISTqra1ajWceegWkWSXXqbnp2uOcij1vUalWl+jA+yUvOZ/Biqud6vvda0g+pcLEngbwPtQqyrNzmftDk00tkfxELbFrGlwVXD1GWfbaAWtiM13Edy/0HLEtrR2J1Gz/oJ35h4Cg7VSsr/O0auYWt2MC8C5TGk+Zb/U1BSTzF2h/piJq3wlBXD+fLZk9XfzyKO8l1NOkAagwiQ83ruQr6OFLlVj/tIS8qlAK51R80QNdxztUj59kWwZHJu4TduB+Md5a6yKA4Y/hq4AMn33n5zcOwoDmjjwEWYe3l0KUWJpsF8PZ8dkImjnfSUiXNGrdl0/9V4zQS5AABM7o4gBU8Vv3M5xYf9PxU9Yc7X6RIB4UZ2thlhPcL4zYdqogFOnTopYoTgeaN0LfSHxKJkULBhrjA5AYEsKv7fxWyrfj+qU1n64mjIXBHe3xnOWJ7LwptlzVFrnN45F7SKYednQW9Ux3xk+UzBMdVTr5IucnVA9a/qKY74zryCvvSZklHaqTBUlFk5uR4eklWFyYTIyAardS3jU3E4xGWnSd+9rlmliBytRd3JImVDWDHyji00pDYh2iCCphfrgqTWfPmkQpCeULWvoPH60u7nT5AFM7r0J7J7+1w/M/GzYXn9mt8V/+g/03rC6G0brffByWbmGLHn/DmkL+G+l8rRHZUMGaleQvGivEMLOtAvTpYf0mH0UqlGAnbX9SxAhM3N3dJGCTvs2Tczd0xuz2HDN5w94b4nohmifWI8b2kg+5/Ww5LzH9PSYkk9dFqHN6a/qn1jHpW7gPzoefsEZxPV8IEFSvVtPbVG7Y+f5BU7UbcccCNWgVfYCPn7i3WikIL7YELQfT1dOKQuslJc7pfJ3b1CfQ/p0r9bMA+YtGGR64z2awwG8OH2zOqmPTWExiTN8heaftaRB/X0ROSy1s/qOolU3u2cyvPPBXj2s9KGv2Cb7IpjezMTjqzchdaCOIQlvrs4S2U03yi/6R9D8SJnvCHteCOAE9O9QlYYhtCUzN0Y12RgIpFrY1eqakiZnty0kUw+zJT8FSJluAx4r306dgoTuny5gtD8OqMsTfH2wyP3HT0cWF4/jCCH16VMCpFi+F4cOH7pP32JHg/ZdOr7JUb0/V4hAWUI4GNb0T7zME3TfW3aPjpvMEC8K5L/HcvUcVqiUGAOAbofFyb0RnwAJxWNm5hgSjZE0AmvKdbGS9u1QWFmaXP8WoLVCrl/jHflpNXlV2dmVLezmkQekxlFcyBfNsecjyk8KYj8HRDDd4budrUGzUb0RZRVUwL58JyvHfIKQc6KnnN7d12nOUB4efimgPplOXqMZAYmwEQ6YguJ05wiEcjHzP6cBKtSKYJoBUJkfW9nz6hm4oMz0Xu9jNz02iEfeyU/vHLQOmrPUQtTbxz024/FoUN3Zwx7+MnctlXD/gSB/HK00LBA0RcDC5cqdT7iBxPIzuvApsK9CBhS6HcyTATTMp4aqKF5t3rmo1Y2gE1jC8yb300XuoXfqod+B187FktyUaBol5wKzc602itigM54vde4QxJeRLhFm/oq1szgnjLf2yMKX21OCrlJ/PFt3l9Df7e7/G++Vu9M2O+/sYa4+n8N2IwaXTNW9+DgpFhmjE34oKPoaWUKBIBDfgKTg+56F/4+36BMIdTG0lGyU9+nbGJTYFPZUrO0tlXeXGU9KH4LlV/mehSmvzIqQSM35ibKb+dm17uP3P8+AOnO8yNqs8fJV1K3JGr3Uq+pexdyrnhzP1QkwVQZNBa6KXw92oUIXkuwWDvDt+d2qySm58QlR/NLpn8jZHziXlTP04xEb3Aywqys/mDgp5D8IW8LB8JKf4ZXxuv4Eqgu9mytipn5kZfMZAH1viM7v6+gItL8fpkm8ceCzTx13xImrcwJy1y03I1PYob6GYFbJaRPA5PRDDGZX47PmoQBui2PBuArZhQh2TMDO6Zm60KqQ3NlHjxTGhDKbO6saUw1iXRpGP3pMwFmbbeeSztr8AGyBENL4Y9NLURbkLqpXGx9ZOx+9anCqvpsRmjtYjHDy/XVBbhTm0tBTDY89x00U5kh/3IvUE24bxKjvlmqAoB3Zo00J+wKEzcC92vZD9a0HzMWSkK7e7vcXCqx7V1K2k3EJV7orZwbKVDX2pbArOAP+oxSln9FzXCsguxQEBXRyxgQ5jznX43BqeQAr8gsdj4erQoCE7OyJEqbeX5x1evvjvCig9+ounhYH76KG/AVc9OxEMOwhPDkuA8PxP5KfdEBBfv1dJIs1GLnIIcVDT/bgKH6+5vBwm2tHGkJdZ2HLAUB/VyZm0/+gpWZ++iQPiB4ZOMctX65M3iksn9K6U7ayROGeNTqKKtR2I3ZunPoHIQF670CvKaYi5uu3RMqc+WxeV77VJT7wnRAx/xbYQWdU8kv723eWoikDK3zdGeEGqzxCeaU9uVlLhUcBk2ksJeB1JYqGvHXxK3vv2yr1R0Up999IY76iLnhEvJdRxJR3HWS2lbNV/4iWN+GHeBHvv1D85gCurbqAcvAVPuTQOi4MkiotuQ/g7QEt9CrWC96q3ktTvROuNvc74o8qUfi7+yrfKK67afE80s1QMJXy5M/TGgrObF3019outNnTDb03KDFL08AigeaZBAnekIEVh7ZEFGfq0a4/Af5alGLrGkjyyhG1XudKslj8TJI1yJAj82xDWbhqnn05ATtQGGeJwMzpH1Yo1RDIGXd3RdaomaNny/LBpOA7/RnPNcDX6nJ/3LYiybBJtyZ2zCpAtRCqKgoJnjH8DB9TYS5ofxrAgbzzaohV9BZL/vR6iKQBiVqRiS/SPLqlk7gQwgpMa7z3nKwXOM8GD+4eicCJBmiuzFA++4KZl/CtYP3PL3uwOd3J73T6oqmqP+8XGIu0Evf4xD3GLqZI1ZPOCi24HrMCXnEuL2PeJUaPBNzNGNFuMQzIVPGMsmYRxe9nYs1tvlZ50sEZhpAtK1yeBcvR3EzfOH6ktxL3QkoiCa9pM0urva9Wi/uQnW8u6qHbYVWPoz6Bt/hSMBrYfqZWdZA7KD7aeCErh3tPhHSxXvThTGZaDxC5VoGChMqo4mJ9scxnxXqaLuhkdIly2Xt9KVpyqrdOc7pslXV2E4Ml0fJeMR8XxYBZ7ueDSGqx7sCfJ2qtovwCm89lKtHzulJp2Mln4xqzmCo2x6+Ykwt/N/WanoX6SvZTmkiFlRx2uwPGPMD05dJ4aaOiF+xjJyYmi6lOxeWHnV5RJ72622hQwRIgQHSfdxDjnG6cYcXgwajtnTTrAi9ZNZ0aU7hY/2XzyW0rtH1w3t4tJURcacxNzr0j5+8iCRkRj+AWc1kEP4lz6yKH58xzzwW+0zTe8TZgeFyptHcsI/k1JQ4AlBfcjfqw/Gyf9YpNYDJG0gnbVq+hQNy4cuY5PTAe+MfXmSyuGWdRwET5Jmr1qW4IyE43/aGYFSA/9IiibSAa8f1ujpyQkkCQ8HmDBsoU0qqkAarJJZgZtw7W69aKQnmUWDlaVzPgh2zwkDFLhNoTtInNhRRJhX1aLRx1d/0zOJr9sQfVbaAV9PzEmneQNE5wGBjL71N5zuvCMh6wYv6pqjBwrbJEn1uDDUTmSeeR97FQsEQqz9ldaNvxFB6Hfv6gfl0mF/mJ3coxWnWjQg3DfbVWGG13JZJT824Vg4McXX5WK1q5ne1XiTcPt7MaAooF1uesE99M6/Bpk9v355emireNFeDkgfBAc/UkzHcSVgBGLBrz5EuJOhjpgfjaASXo5XssNEmutJoLj0xBX9x4d9zE6/Dit90PbhHnSCzdzq9uryazhOhHHqTY0QadgNff+IaN+km7JVB8UMGJpD02GsilUnjLG2OASulvZvNB0efvrGNhyaHsvvzaBnQqV7MndMUrw+M9gePmRwJ6+9d6gNo11blX6n6AXmHvagb8srXDMDLizlm9m5tn4FFmIxt5pV/6FQaRniJthverGDtpVbdu52JgjqvnQPzl7Zw5P8j/HRFfkpqwHsXdQKrqtU2cjLv7SBYtjxj6hwN+IqavhOn4rKvBM3GK69EdoY4rq9TtvKVCnz2kvv8m0xdwWw5wntDzXmFySiro4t2heHx8pbBK7XzbuLtygfKqN9Og/+DySNO5NR5Y6utxUJ4E8pbtNrO0Wcp0s1Ou41SvUk8Zxonz3eWzxR5N/Wug3QPHmqp+rpTAO6aA5rP7mN6KKebN24Dd/1k5MFRIKpPu28QurY82OTw1LeguYqBek3M910P0rlBDMzXz+VHM5WcM80Ug/F+HNsnXPWQu1Bw68dqLFLHbmBKPbTcuUsq/5Y1ZYbhFtwrWX7nShFxn5cOb+zp2BbSvSSuAKJzyCsDm/aBgHvIFgmOcLgfXYhIApzrgxJPNzWvWyeisAmQTWSAac2UdWMPUnoLlx3JZFaMbY5Y3W71Azuq2kUFSfsdHMvAmXJsUF7NNAXQiFLrifULOEGLKXot9zYtSEd/2/5Yds9J6/MC5KFbNdAskU7eklTl+7CzE00h4TMEVroIz0HR6k/f0Dd1KzJaH3DesOz+TA+J88vspDRFlyc/I/sit0QPxvcB7u3zAMTAe1pR1LkgbcPzW9HOw5utLnQoRX3+PtNgWe5haTSeMi+JBqfPtyrbdwvfwuqkAraiCgqfXF+MVXRJ1cDLFCOGIlSYennwyvk25AYDp7TTxM/NTLyLIxFM5GKWdD7axiOhhRhC1S7r1eYtCK2N/ZjixTJd5Mt4trLMhv5ywq/ldfyUni5vBHDelaaN1OfBsJIf92RaOdWhrrXBrTL+cd3E/8l33ZDIfMIaJdiIDa8sdjHVBhdfbzjqSJd7/mu29z8pfiGLTY3+vvFYnW7+gMShga7EjPmz2D3VoHoMqpL2Zc2k/BsVlXJDK7gt6CX5DD6OYOsFu+mDHQUqch1LQRWRnBrE3b8gHQHdIR+I9jVStTBzeqb5vowrBKghIXaY0jVhySUAzBbogRwaPRJ2iHvQMLxnchvDNVk5PyQ7brOSaIp2PGzn8sJkXDHBYJ/1Ct42kyN7w6407vcjEFjv391RTBg7m8BIC1TIN/iLbM5Iw+uSyQYUXA8HtRIDVfy8opADhth3nj2xidUGtSeU0aX4eQobr0iX05FSFCICXDzOZgju583ZBR1cW7jsveVVO8QjPVT0UImQrX9zy5ti8qUMuo0IeSQtVdf2Rk/4eQahTEEWlgF/oSEtziaqNhnnqmz16H39b0gBXJyLqprxOv3iqQaFkgfwrKAeApryTX+IlZW28mhxgvkEkx2ZVVum25lgUXqt0QXiP5j0Lr2k1LeIGjBbv4OZiGRTTmmHEcT74IL234y+uRn6j8Lt46VIxPuyNXNqhshTGkYWqzowHyE7HHKG9HPo+3a+TySTL90ZdJwp1YTqfHH2F96KaMaiOcJL/Y14PL7R4yhHIzW4kNgNm5NPh4Lizj+scekSLEvswbIUOe6uD/Wd4q2eIAQpdgKEiNhQtTVi2lHEKl8ow+knxYjgYlQtJvlUH/maJEA0G4jeztwE8SEtYr2bUn35UC5XRp0+vKIgqlAf9WNwLgfmMbEaUEYNdB+AwnbMyjvizriF5WAbYw1aWZm2cL4znnV5TXA8W1VmV98oDcdRzLzzOcTlMXUjm0IdhaJnxRg6vMNQNh658yRs6Zbm7wi2y7PhDF39vGMfCwM+ZJr40iM2A03KJQHwSOtSQw+a59NsZrpkrCVC0nqS8TgPxeHht0cx407/56HqxA5XC+PHNHQ8JHo/jlVTaosXZcZetzztS7XZ5O6BXQ0UMXnh3lkBV++P5ueWiF8gzc7fl61d7pq0Ij12VRWWVKcbKyYtc8tt8RDBIYR3TxCrc59OVEunXSmkPfS7kO+eXT73hr4MTKfP34A6auDDxB3WvUl+z9PMtKEkRgMjjqq/+EG1o38Y4xT89OV6DVUXTwF33a/nYGt8Dc9avgZxGqF46T3C9HJD/CEjkfDLtxLj/X1QbnvYSchZRwy7zOlDIQs/2cg1xSgWzwmKUkipERrW4vP6X9mOdEwtNHOLctoeCguWDlgRjjrd2xycKNUhtJnN213whNKUFK++6P/LR382zUeDhjp5zU48+UpFPQH0l0vWQbh7UaN0HUQiiszIfV1kQu3iSc2LAU/e+a4SsbYAtm+31p/RyiNUZv5GexGlSsqxtz6UEnM10uU5621q690AgONv23rQak1geL2HeHSERe/tv8FIoVAv0MU9dZSy5PGwZ6KYVvg/5jrR43zALfea1nf6uh0I4+Ls4Qm4IIf/XKUw4192RTfXz8Fa+AgV3WvGdLP/5/i1hbSrfOnPP+DxLYcciPVcLAwR4FnkqdqLje3GGpxQVpLi8/cE/3cc/+ABH286O6N/Vonk4W0Ikw2mdnPzgJtgjRXCAI4nmVHNBzKg1jSu1A0j5i+vhpqDYu65eEqIoXQKUzGA+3P/vlhWUT0LWjHcuCHeR0vEGTY4mCDo3YBhmayHGQKoJgin+TwXxZ2jnar+Bw7Ya5y+1/tcLRKU/sL/sXhbGiBufO2vpRZwqSYVpQzyv8/IVgvw6kKP55OgZpgyDrffv0qSuxcAXPIl/tJ3BkG9pbeQyzLIiA6LSqunPmrhdpBGuZzVHGgZeZTZsgDf3HJhbQm+qrT5bDr6eSXPwhdVJWyCS6v+1aQkQdEPP3fjskN7APxEfOiKLlRQt0UEQ50A8iyRCByBNEvT6TJ6ToGO3XIFC9JbxmKhBYb5dBgvm4GAa62jZhtoMUr47D/HQuzWtc1YuNxroDh5O5JwpxKXenL2Hs/7bwHR6tbkcc2orEldyBcw6B7t48LDr423EILxtTAjOzssRQYx1MSZGExzYN66zz3KNjfifc7+czzf7CgP3f7xKeV7KP8KQtxwng2PZ9ByFQh//KNp9996PTn6zdiIjTcaHtoWucOL6P7XQzsg7/I1sA6H2HKg5bqIsTbCFLouwdrT01REw485jwPWhHLig/W16DUt5RN81TfQqEtaVVzpkXV4mRa/OiNHHou0LgP2gpJ9Yf2+t5HNgh+Vr5cOeUb/p9CxGVCpzX9lfAF65t6WX1a70deACagH9UP5zF/2pgCUcpUVxWtMNOjGiMjowRZGc+1g7It2GMNd0+15Q4DpTVIITEuTIMmkiUJT1NY1d5T+jKNAbYRSvEFKYhG7xiwax7ECJ/pj/SFDtnJ4EKQ+GJ6P3BpQdHL20cobFqa7zKA+5+5SZ3ydBFoHN9sAeL0AMvr1fhN/F9ed9dqW4ykC5aS6sCI17slq0tVL+gHGg9K0qhPloNi1vhJV5ROY7i8lWAxTNESb9FaAVLy6jGtTV8lhdYu4YB+k24RodWucVXnxxtCp2NKt0ufVMJX4e138T85+mkcOHT/+wbRq57OeSzvIe7y1bqz96HVa8IyWXZOMjDB2PDxRXDiRFymCtV0WnATeajGUhDrTjdC92QFKfrSNl29728N8TDV6Sbt0saVnH6Du76UAqZfr0Hs3X/dNWU/pY3AlQNrMlcGersTW65n8mmHBxfT8fIYUBHUuiQWqaBkTPpS5sWk9q66+GrwZ3rTgsSyM/cwzIUYwgkCFh4Oswb2KSKJpkTuaahMQBWml/PdoWkQmEMishV0Nnw7HXM48PJLUv1geoqUMDy/b2gFjxeX7Fbwc5XM2goqgsQWMDeiGLjUoOiccFKAsVYM/oLq19x8IJR5OdVj7ZXoAWgcDnoj7MFnvxq/dRrP34UduB52NQKKvpJv0vvxC5J93GM8sFaltHs+jypawa8EvU/2socH/1873Fbx6jmqfl1NF8LJVZIsx8/K/WilO6fW9aok4e5IFTyb3JI9ZI8JqhGl6td8/GKD6m6Tx/oq+45FcTJ1pSEUWRCm02v/u6oW4ojb4DAS3Ht1HneOSfCTKBk9Ktqyv5ZeqYr7sIqWX/F36R8R1VFf740OlUaoOr6TeK3azd+MP+tk1tcJ/qNJQlEJfPEsP/kO/GDCrBaHSBG1FoDIpVsKKJ2OOY6Gl7FCpkgRteDP2XS+RYQi4vgWQI0aKBKHir71oVqlIldvz3eontgRqpoxGoBI1XHTULNP6BbYwbnEpT1GQ/i2xYNt1q+PQ2rcC1Ds+aITKHXGC8Z8WluV00CdB86P88jNATZUF1kSh8Gh2eQYnabDuXuU9nveqEd7Fg/ff2CtvmQx9/Wjqw50+nrZ7PfBJTPa1vtaX5e0H31DQ+ySlWzK47gUsNeOAY3/BkUi8RNMxK+qoY7m7A9+LYq6lrGBWiodT/eNTqwLGNR9awPq4Oo0VsnWtkj2isbIT/7/V0SdMLWxqBQ6sV8C0iv0C3EUT2BylRywdImN3C8jwjJs+BtvtGtdS11uOM7o8VH1fQbvvpEGL6C11oI/swulUsM0a01VuQ+ldgeQP3jNGUaaouh71XG914/s7uuR29Fwt7kYwkoroR2UtqiBZCsDvVK3uAUAwXSWK0wDsI+y+5egFf6bB714RMTvpylk766dlcSIrRvbl7dhOClCVpAEVn4qYyOoQ7vF7BcvLGykFDMIQfdLqPpIepWB7f+mxRDCurnOY4usSBDF1wxGymKMcC2neRPC+trRbipZbL7vmaW7qdk6ZztHKXSVFVUiF2iIAieONreDTQv4X0FYb9WADUOtcZraCiNgu0NUZZORoLg8eOUoRbFCQhlwGmr1y04OY6kq5KaLchTeSNW80l/W4uH32Ms00NaCdaoSFxb49qhNozOW13zxfswmPb0cED0lNcSC/cOLSV0LW7X3kIanHArVL58D5ULW+L1OlKJqdoKyZ2wmFZAaZDb802xvZXZnt1B1T6gx/otE49P4U34jyBLpMrfA5XuxrOIcPI6OWk/0ASVelMRGnVmvSOa6Uecae+NbMU27QH8eybXMTnLwuiJiGWFCz2elGzoQa0nStrncVXOcJqAdhW6vOsi77eqfki7zIFrDYG0wU6EUVONsnMALqWCotAWlo2NyyXwo41geLSJ9xgcn2IELHwuEtuBpmNa5KiSn6RQJgaAt7wNsFokRk+Pb4Yk0CNVLX+6in7FSXZ5MmrVQRjhZTrae+qX7U8N54Y7ejaMh58Gkt438tSOkhjMQ3ia6uCZq3rL94QTo0RkNcTD437Xqvbx9v9xJ4XwWCJfPZWkC2lpsBanV/stVgRQshZB/P0CHcZDJ6p14t2R3tGYkgWfZsVwTwptDQv9mpamAy6Txi2E6B21S8IipKzptR0vthfA6tUVT828y+Hq3c4ejzaPbIf2g5YJVymA4cy70Fb15IX9N9SYCGiHcAJNu3y5u1GzcYycySx48r08QsAD/JqQNnje7SpL8Cbjq54YcKahDWn+A7T5eIVMFSetT1j6B4bbjKU/cW9Djvb4ZKPF7v6mVXo0+VDkAt7Eg3zkoOmUx5stSxLnqhQsnJ8RrKOOBo6W/YdK5n71hs5HBelznJJWff+1IO4XjoMdVPQWiAVhYK5oNNKKsCeHCMJxfQujpbKGTCD4Xy+SX2BgeL0LrXwsdRYRAA7MFnm0jLPF0/Plz7Z3OXh/rcDc3I4wZMwbfZ0IF+p2f1qDpGAUIPp/j3PN0nGCDoT44+yCmwPSqC8UdJpDnXMWqhmM1KlWFr8EpTW4pldK1j+lvcKMwrv/FZ/DaQU19fyHtjHSof22ROzcKN8SSSKFyNZgRjn6oXqQQWcHpMvM0cmQFuU601ZlDwIznCNa00sfKmRoBZCcBXwdcL+EZ87pHI/yvsXhivoGawiDJ93vtAkQ18vGVUgvc4IbdcBt0SJSqzjeskaTLHyQdQJceeNkPuu2Y7FfewWWkU9UumOYFVyPRpEKe3+IydE5h6AZxHRQo2nSWEfazn/EKTvSl8bWWx41zoqKVcJgaJOUJh7WIZrSY7Z4C/Lz/1Ft1G/LT+asbfUDC/5JgwJ7tqrCwPYkz8C6bG4O3Ba9FchHWLq5EEhKt+Gz1Fkn1TUEU3Ka45mChA20WioQKFKufz25rOmAxNz5am+QHKme1gw+dVWmheR35IP/ZU3yenbxuF4lYGXuw6OIhDLpueQhdjcjwUZBiwk7vsYAxT1ef3OWEoiObrNOsGtYU5RMldITKu8AiYBy5q3xo4d0PZWXIGDfuWnbaoa6tAQGJQ997DbVypGnWqoy+yIwLao7HLMsoLNjPmOQQ4R9DFa0VnC36Cs71q4sFMIbHKIATLI9aaK5EzOLC+jIhcNv0MYAs2O1RTvKwOIP6Ie6Z3EUrDKNmyROpRzp7v8Z2NoRZqoraXXBSC5yZa0fHjUsYcueLADyxm5Ez72AAEv+6cv2DZdrCqo+KeoRUPKMCPua3Vo0YfmP87AQYRn+kUa8AE0fa/G+Ti70hYmEewFTVn7sFMHC5jY/OT3a+GJ6BLtYlkqyzyLMgoHHD7JRTuuPtGFDvdIImi5gNfkiSvQWXg8mEhsdqLs0lPuLRuaPrfrTXCaqXTJAqeKpLaY2cMldptOIr+AL83FGp/ENwZwvYKipu8BuOcn0ymHtU4TlPB9XraU+NkNx6E5qB3ksFg17EmJ+g1ypBgg4LJTYZIfrZLI0K5Tf67BuDgx+jkT1MMMpPlKx1r1kZYMB1MCfFhtQUViKqmST3u9vs3zBwgz4W8nglDJ+d+ijIPabwoqmtEukcv75KRveBsOre7+lCcphP6DTBQQG2CwuOK0H6AHCGfPPe9JRcuS1iaSExSLCI5Vax8nKQtTrcN/Ox4MsOJ5WeiYNlnETOyXgdYoUEtZzeK3V25DKzUyoKyk+CUg8bkrRM+Pcy0Lj8MQAOA0PUjiOQtsjNdMk+5qIhJ6ZJL+pvtrz02AFa9Rh1fG4B98nj1yUMRLLDvg+vfzYgJhV4NHcwyz7LxUJWVIUQI/tgShGCgyamy31vfKP25PactfBRGUkuHIkrEPeBzarHFdjpcEUb1uBb530OJHtE/eJ0qUObR+/HEKee6PUePn/BNpJ7YmMMDv3qX44ALAOxJSyiQs6j6C+IdrSmxgRXEBTyLPjpxMWA6jbCfTzR4ySIDp3JzbkmudkqlLmSettm+vhjzPHUA/7iDgq9CPBjrtizK+N0kojVPyCKIkVJYUd9dkkilBn2JIP0D4DIGol//g+z+HhSi345MF8uauhlYK63L9dP0CD7K/kNC6Yw4tolImsguVXnhc+/75hFjoA5+7MRkKsMNhpIAbStd1iNGbnux1efKrcmjDpZJBTqnP0OfINmIZu/Gp6iAE9Uvm31rQRCG2+k5phA2VoTBRMjKuufdMwM6MnKkIm84bMmh8Bojx+snxSYMbe6S+CMYAiEpAy+0go3xC9kYN4y49ocmdsJePJbRPufUDqIKxlKzrRP/zM+9ryVfsWE2S2ekYhSsNoSUvY8It4uPLXRmRlZz2C4NVtE0FGEX/IDaKec6fcVafrrZeSvP5Rka8H1ZeLz3ZGXl7gk/EiIrfDWgQGsuqr8S/RNiNwvaUffgayCv0a67O//vsMSjap14nUK64J9CK+of4ElizxqFyBcyKneYTQxpDDA4HNCHKBFZPZM93rRxTLV8Dj6DRhEEC5puW5GaReBj5biuZoxg1kd7ABVilQ3zv10330jbemoyt+uHFFVCkwUpU/OTnov7V9e4QVtmTdzwplsyo0W/CIWr+lOZXYxNfNy5a+ELMWwYmqe7q3MSdgZz76glXLO2gR0+i7OiEAHhX2d0a9QQ8/GdAODXOFPs2hCTPUU0SNehzc7pNdNPz0g+M0UzRDFBi/jZ5qGoDl8G5fwwyqaEXEDSmFC03/6CUF/ZHbxSlX8dMAp5WGu4PU4VqjeDbq5SYHaa+6UcLNBIPSmt2XG8pB5Tq/ktLdcKfmhHj/IJwhea/QEXdnFqlkRxhSaknBGxNJO5v2v4Pf4Dpoi8O9oSpd3r0lM2dTo4FdBfGdhRZbMCC7Lr6NoNjHXfMmCXH3tfgPLLa6UWX/4zSufEC7gR7Lsb9NiSv6obN3xU6FMtUidyThFdPjmLlQYkib/u3iQ7xo+OUsFhwnqtn5yurg/tJ5FK56C/pUKjKRgbvw5GzdLru84y2PzJJ7o+5yJ66axCFHQLH4keJGA/Azzs6QulqEmb8zt4XxFF8hPIPduy2W8xwhGoEjUt1/3PjQIc/qcsUGrKYCRYunKfZzzhqhS4IsfUEmWd3FpdDcQixEl3+V43OFVezFer9si7SeXDNqr6bc3c5D30xpSFCw129G1wMy5+QVW0jB9JY3aozEyBCpkMEuDUtzjNUlrD8ajt0I3Z2ctzkBXtxk7LPwsli3Wl1I7a57h8cJVhN/0ktvgPV11B0wr24rS0Sy2djftsEw5z9E1ofcjE5G51SE5Kcjas9+0eCSmpauglaaCDEBo3uD0/FAKD3UvY5e+s349Fb+IX3LL6FhoTOc6S/IEN1vnLu/yguL2ZBgfWLAK02OY1MBuQgeeStm6/Py63MwbZXoJX4XUU/QmeA5jYYTX4nxjUNH+QY1F8hNXpyi69V3Q5bl1WYJDKxb7tdhDVMDjj3GPxSzdTV3LhaYNP7hcFijolq+KVMB7x/br1t7I/LAAOrlfez8zTxs1hnoTQN7TEdNbn9PiJ8CVRIuOZMZwiXoTwMWDfReJiHzQPMkJrQGIChDBpfCIavO2HXvvKrVwIyKdK9lb2paB4JacBPWFlbp6x4WOLB4zMT7k3pTaBuf0EwQcVvnex8DN6r3iNRsMiVzzgS/TutPq60XQSJJuXicgE22n2CoMs33t1wjcd4J7pdQKJ0u+2ie0zv7yg5jw14XsSUTnPJec5KkyZyj1szitegdGyo9E9xjOXjKCZ8DhHgK1etmlQSHsZxcU6Dic9QEjMqJvefU5tdNom4BkcLlLEfd5FqnTzsnTR5pAqV6G4jopzseeP5sSvuKwXNzYVhdcyRHtA+HzIOTy9apHSdj+uP7E/wuM/v9d7hrL8LShBgD9Bz8sp8F6UOG84NF5ukjMUnHTj0xq2gqNR+fwzjJvKm3BTJy2XNRVIVs5Udf/OFf/H+aKmXKvT8myMOgKQj2LwtYaNK2JHSA5/7HWHEMAIbq4dnaPDaUcJ/D1uMIyI686Dgp+d9BDmESj1J6gXPTTulkRiXVaoFE2eYyWcVYptr5DOdFX1ulL3swKYklPGq5Z2Tlpdn9MfpAFie6cxrg9qqVAmML2shH7gH4ez3+VGJJhDI+0jV52EWQjRVhy8ti1L6MrNE0sugZnRU88d9usmZLogt5sdizuN5GFjovtfoL7PvqN2r8iLFuKJuGhci1a+hMxJP88tFZsxfI/0WSMurh5TskIBEEzZe0XtLFwPAVrkvRwpmTR07cdCzKtgbUXrc6y/orDFOLiAC2uTlSJ9U+MGg8U5130nXu1zQ/Znva0W0paGCa2RR5rg6Gi7pFTCzdq5EWBycUo8TR4AYo8NNFGdVV4KqyjprXCayKwcAIoRc/LiitCnVU7aIR7oL7OgwUqZZuPAP4Y/YP0ZwRdo594USrqQtWiSa3T4GvlPaOtnrubFX9M/6fhnLZzyQdoUYqYqfQMJrHluSFf7Fw/t7b43MKa8taGWeH9CQUQL9Il8vFi6pdJ2nlkizSg23hqhnUxisR+SiTcfkguRI0M/qBrvC+Ez0EoQD8FIFsRywhxtnsfnYMqP34ZnjaqodjwxrTXFZbgq7nHpI1jSvXeWSnf37KI85qK7TwMsjVA4T2xbZU63QLihN2/1dBu7HvtyAEhtqHqM1n/7TOT40EYuMJ7dYt/WfnCaWMcRfDdwwyXJaXgggSVCismTpcMjLhutUps1l6lmB5FOLImuMQQ55U0FpnjUbDoamUMUkqpimulj1WklSDksyM0pg7JPpDmaO03505eAICVpJYde1H/RH/vwk3gwJTJRczwxS0fkkL1CHxCAO4UEjgp5KHMbZ6GneLu326GuD69y88LrstTs+vvoxEK6ZxzC4P99NRkjJb5yyG3a++p8NyAMZC5krg+p3UFDUufdlltSMDSrWMhJ2rP/lL70Wq8Tc0C0wXVfLYtGXTwDUuvEXUvbRWXDe5mBU1zb4qymqjVkSltQn0bca/KckcsIvSx3bENuQxya5cOLQ2a31vcx6JlC7rYW960Pb0WhL7VHaxc//eD2ePDavrxiOOvdR0o+MOjoW6+z9xyR8RvNFDHQpTfkOfG3XY3PpD1IN3BSy9Yc2edZxvIU4qC5XtpS0nuKZ8vDIeE8uWYaYsXsa+tSvshIO90fjfWOSIMC59V99W9ra2kviT2/ummP2PNBe3Sj44NjuD2AFshOMyPo2/RBAspNZGt3NSfBGQ59RwZzyn45nspFwoxbmJy6/8ZghGPF9pp180i/w1oUotpwz63zq2ca9nGVO/ja3wP/Xxa18Ery6ZQzLE4DPzDiuelsH0kvBF7VhluKJ2PKgbBDSvgDbdW8t2rS43dVC0zylRxU+on4KSo2g2lOLiW24Q/e7h45283L60PgjSdk4hIMaTzOpcTB2SphyTPdOBCV67dxkiXF2hnt0B91/FMSUvEa4oo3STyofdvvWWAzcciEbCXwT+NEfv7f1LWEQ8pBslvohraVH8/VPTx1xvT+6fvbRwGvr6Bg1w3JS0XM14pbHNx0/WsVYAtnmdeAVSnvAuOZKzJcQ8AAh5W3f2kLgy9nnObVV591KNKE/dlz7LZRhnaZEk9Eftj2yhNYH++3dqyfSfVxgojyrwkcN65s2QAC2F5hej3UxDsxYjx6nzKiCQQ/zu9TxYZ+WTig1CMJhfDgZzTmxKzBENP/NqAPtFqwD8PJyLgbiczJ9vPkxowCWsu1GkXuefAaIQ1RWUbxnY87fHSfuXnhK882P741pEjMXSBlVbsx8Rm8DC8/L0fC2UtZL68LLCQ8YJ5zXvok4lkVPJIAoUtRnTXxWpj9aM6++Bf3m0jvlc7AUg+Px7gkOZEJDEUVnlOStQt9rgYZw1dIw8mVQ+F+wkz8d/rMviYI54ATUYa2dEYACYf2CEHjpCbtXIpQwwjDs7e/IjHXsKgsyRamdIzRW4jxXOnmEuj8nOMRy2Za0LYvzxC5IhyR2n+ZZ+yf3cJkhT1YYHQHEPtd4hFPt3t055wpnBXwKd9HkZHcEqNj6sCVpkTVpj43fsGhQGVZOU6LbYIR1lJOaUX6KMOo5+DybGOzBeoPXOMswY/y+QLL4nLBRDCiSPbsRgBKDaEaHVmp8bXnbJvJ7zdTKAvTMlZLyIZVomPDdIPCfPR/7E47ZPK7b6a2yo5xjefzDJ/xEK9q0dFLeO1pIgrPbyHUQxU7szcLAXaNK2dJw5oVbcozUE9jJUZDcVMkO/NK2CgjOFwXGNxBvRwixPixxV2VJYUvO/Ksf148uUz7hw5IbJeLumviAESIRNwdIZD4QyTz74wOwZul6lbMkNQ+AvhTM9in80YM3o7ls3cPAZapw3AiUxblRbTPjy/HQ3IyVT9n0AF5PYb80iOyH3mqIv/i6gAKmshn8zj5858nYtsEwrvKRolkdLxX3n6L0W3PZbSxPSHSIf6dUPN5XNOxLac19idV5l0Qfki6SUDcbCiDImA6rr7h8INCtKYVq8aU7fKNEKHYoIq+Ige1/4Oqmttch/M1bhZZNN4dzsPPClJTf+StoJUz7gpFIbXdq9TYCuARbD45zIspJc9IIMAJcl1ps3XfN6GCF+4p4rz9Vt2RHVXxA+uTd+SqCzE/TWkp4j1vWn3rUu/ydg9dF+e61D174CjmuBbuF8GNWFaPvEpbIrvNITquIYJWy+kTcUMWl9j6WGuujU6BMu8stB4eJGDX+WyF+YpIjtVd6uziRtM2191iWavLWPl1Y9M5w0+p2ZtScwbWL7xagbbVh7RzVyVNbrHZtDE8Z00ryoNYC1PcUbC/hg0tAd3y494CpGgY8/z7gIbn+T4gwubqK32rUujZQaC8xfa5nXfUUZCa0ruRPX1odQavnT3hdIV+3iyB6wEBMCo5kMpIYFlRQrYVBZCK1HfhM3OTIepvLL+gzUcyxlOPp21QiSu+jM8ZsO/GSxAHnr/tGfpGpNnu+ET3X1MQr4yvS/JeUaf+vRWLH6HHEvJzimjYblc0PX6nq0ijcrG2FrixKe01Wy4KFhU6n3XcWA6NJp/EdKl1Drm0WZSXIxbFxRe4cFD29F8Qrx/QuXDsXXpvudTVd5j7zh6xWnxoB6Fsd14E81obxt3D9r9HZ8J/LW8EQXIrqEVx54kqYWvGp2iPsXSHYUOhZRjMrPiOch1v/BjT+XCddWm6gAR/J1puiUefean8e5BS+xO2tXzpgJa3b/wIZ9jRk2uzfUrTwXGJKk4pHb9/XGRVMkecsrb0yTDkL576kUTSXHNAU2eAs0/qknkx7ov2gopU1MGS4lpQxmSZ0IA2VBiOIoenTrquH1WNhHoKT653nBAS2hYZ+lqDtzfohVukfoJ7T+wIC9jSHF0AVEislQoe4Dnkz5FyhZesoxAcPcsngtIlYUsnmnnlnwCr1jyeEXh1bSOk42GIMBbEK7fiOWTWX1gwV5yCI+TZnqww0wBYtFda1e/zg/ekj5V7Ac1TsIVfF+A8dYU78jdwxLz4xiPp+K+09rNfxTOIr4S5rRFvEZbc6szv9/c9DqJZGWTuyIK86C1Xyfklmb/wvd9fxp3XAs/Z+R72ntC8RCDql5tdpkdWqQM5YJBGOFm98UjYMr52C5QSPf7tvKn5CfP+1/8j41ZPhLTe7bkIhr5Mo2BI9akG4x5v4jU+SDqq7F7gOHLqI97rEXrKJfyIB4mrGvrkZrGsT8/NMfI14iGc6uWQPQ5GrVCcOsNmwKBPQPaBZk3gawjAt26nA98Cyv+1HzmfO4DqK8iopcOmCyI5N1hCJM9n7sXGdV2BfTxdC91RC+Xog3spKtVe0qcV9ZLCZ12hhu2r8tK5j7Xw8VM/WQu8IqVqxeD03sP6e7Uc2BxbIomyLums7Sm1cIBzxz1WFYLnfWkSZvRvUxnVO27hxSl2XApduOstsQug0QnALgKsa+XmQChFb5drjyVYf5haw3VOE8OfHIuczna+MuqME8hrA6/efwZUlexfphkEqnJ1ePawKJT7vDM9tJYaFxvNJuqsagLno4UxqlQvXH1Ol5nYtWQHFl2Ltk/4jXKYBqWN9l0j/yfXP4bSHfP2sZ+trZQlonw2+WM+eFYzY7GfI2iM/EnLvqVywKpWxfachMHA3GXSP6TKiVNtO4gJWpgIFHcHAiwidxkcS/CofXHAODHzqGPOTlLpeUiYx813ON6d5udQ6MT/KGmn0zNJMO0K/Jh7I3OfpOfzQOnux5CUmO9tWE/+ywuz4s6LhU8xHCbiPUFadZUXEmzmbJJH6vNKl0BvZoD+N7sr1bAJoAH92QNYfynYw6KKCE4tMaLQOOwYaGSO6vR1L1HozAyhI+zq4D/xz90f0IErSs+NI0wPrrnY6RYgZMUqMRM86FMmEMKD56RXTwKoDbAhrfT+V0M4UunKIhJsLsA8oBb7vD+Yx+i2FxwdpytWxpvBvSISNjeSVHeagCCrUtob2E8Y7//w0Pi+5ZDdtrocbjNgZiY8uGQ7C3yC4cfuna2VV3gED5dUCjGzHxtnN06ObfqxNUuLRmzemFphk5qpMSLnXf1pnZJaewSOyHCtkZAMuB3MlvIWi/MIEiTrzvgAsFCNKfwnWwaT7D7yd9PcBaH9VsPHjZQ2lVta5Z8UUWRubTA+CHGEwemwkxrDiJzwopyQIcL8YncpMMZHiXTKGzlrA/icp0he6ApOqCyaeCH4rQKUUGcr2nDhfSy2FEiv2tlubDWEVE774ssvDnCxPZbw8W7zf7zFWHUVsTS+sQAtyMQxVq49AlI/hxB5qaQVoPcS5S3FtJrXtTuGhVe2q438wll6nrwHHfic9tLaM3HryH+76uaD/vgMc/5QhEZIHojvOuprqEELTnaF6vXHEpj2PMX4GA/CMkxcLJ3OHi/+5X7kjbA3VC1aFq6MFrgXxa7z6LhWfjVNUKpcareFcqP3pz6plHHkG8DF1DOX/mdHt/b2GiVKmrKE0ksx+TPdqp3aoQcXaEZ8d3Til9YqxHnmlmQD5rDv/BbD7JomMY2A1suieOmCP070lHOW2mM/cqL+uRGn3AoOSaHJ8uiHRsd+tx2F0Gp4UVXDHQkW3RdLKS6mxDBcMJx7Pqc7yDm905wzOpeL2s0riuwMEucJgZSSjL0CW0+QAVvUrDllYhr1Hy0Acnu+or0NSDypD5D7N+Li/NYfivosuTSDZki8chI1X8sGv/Pi19T79PBWAuTcZP7JmCn1UB2fLQBrTRoKVc1zgdCysiBrwwMonuFRRiorINBcTl3dUi/Y/UxT184ysia/sjPot9MlCpH6HPhI/e5EUCNwT2Pw8oP+LsPtZr1ZhJpdLcSjGbTcnw8msfoZpNpOA/6KCzdTgFth6B4P77hL25PFWaz1ZmpK/J1fKgB+UWyYbLWHPCVQfgLkpFWHZWdtY1k48XxpjXPU4FSM1ctNDi0QrljzIFLZg4qXQNp/eHO7nXUU6ikCIKm+jY/TeJ4BFW1ehFcEbbGm55Oj8HB+GZPbq8ymy1NxSr0Tj2QDdNgvtOcQ5/luo6dcX3CjbI4Hj0AMmSODafg+RBa26qN9B2NkI63k+kkaDDzOLwlHus7MboPp54k+1SYz3jZFCX988dP+CPzOLXcz5dvi8H0eK/YT7mVA2Av9j15GWAvRZZsb6rdpynBlHIor8f/k40h//tM88fzWYrTzb/w2Zc3Ij8n80awVcWFP9x46byaKzVJnNZXQlHyXk72ugmCblNK0yCtwnEjy54IC8lTeUJWfupDRfCoF5H0LTbs2J1f1OWVY0JA9qONRm5EFiPZLV+aS4ARzDjNNUciueCg+YlY25UXVo30wZIsjU5NmVok07k26FVEOLRtO8ie1e+lxARm1u6FzcZatlr7jLdSghcsPiRmHKRL8o2dkKfebtzDZwrmc8/uYbebPRVbvbv8gF/ZGLdC9uqJTPVBQM/NfBwVLllj62QPnM0BoL3JcRFwH368QjEI2R0u5wzJQT2IjLxUfaft/1TyLRuML/QQfihFS589Bq8jVTSpiiTzIA2Vm9dYEY0oYGosT+0tzat5RZUDXVoev1ZNRRpxRebY+qI+af7qzDcl//ZJ7xDNsvoek5f+/qC4KqLL4I411FbKqK3ErTSKu5CiIRPdKSwskB1OjYp9Y5ZbdjkTpZmcF0cYN51j/+dbqDfNrBQu4aJ9YU90DgKNgKM2+14OdCBNQtOOVQpnTe7BitC8HetemZEiNLLJuhs/SUWfxVihpj17QOrbhD6ssPEdJt74KsgBSXNovILPRgDLLrQHWBfejvuFRzVLau6wyGpn0UcXx2v0diFJQNlhcFmU7txGBKlbPc0H8FSy5hQEDPlZMnvKnBN3+3zTuTwLdhkvfofxQNurP0H8+wljSjnmwVGV6CF714N3K4BVgTgI4/cdQaRhShHR5zSXTZz66twOb4I69q/thviSBby1LWMxuNwF/BKLkgtVVnjIsP7y23fH3K4LxVFZWhjizb+mocLg7czvWoG2mOsOMYAdGX4zM1dSsCnDBT3hnlKKx6SY4saqdyoJlIiQJ15GxxJBSB0C6TI/jl5B/DNHo0jlu66wm9w21ql/a2BlUaGSmiCi5DdQvwDq+oEjs2ylWhsvuM1U0FSP2Utt66fXPYLkcSWeG/D3EXlqIoJcRYMCT6EpVmZUbTMj3w+52dyjAPDMgssL19KtOU15vBE3U8s0hbo+Qf59PT8ehbULtK3KvBqqetnEj9hc6sN6ke8jtXFldMVlrxkv5jMXmlPRZpeLz2x81JmpImYjerUm5W8IsODVNKpf16l+bS6oiEITuc9sEn19KbJH0WDBplP1WbSnSIQ/II2zx16mkCgG+RfW1U32BpLMintxMxTNX6dNuaj2qLCdRaRNIbJ8OmpYh/pwhFneT0mQWVI14WIhI0NSmwgoyBpEfHH58aW69nCS7OobZHQiErcbm+XaHs+05bZa6i8wJ8rcZ7X4P9JkgADBT130dNcxwjC4U/0mo8yz3GVBZyc6VAdBEkQqBc1K+ey7MMY2hlPmnlowOvKSxJJScs/R91s070LfTEc4Xn/en2wyShCpRNkCNcvImvNhccCJ1eojDAJlJELHdbwAY6YrV5EWerE28xyCrVPS/BTIBqjHpFbUcxnmXfO4Y90GDd/9YoKvKWxcce+fZ79Fmh0Q9sxfaIXQIA+bfAcHCN6KENWoxF0Lv4xjbIxxjIOmlEncWdyxG0IAM7lsZ8KwEkzmcmVI3j4925LLlJcGI2ELSBb2vmT0dWvEtMEnfx149yeLQbyIRM6pC3PRdl9UdWyVaqq3EpaIpbSImayuDlWrz5RUm+SsIjsfauyjTp+vDr0yaUNUbhPLa0JG9/go1ak2vagfX5/Kh2d2f/xd3edqlE7qwzgN7jJu8eEIHjKNZis7ej8g7goViHxqUse4FoMsK771wbUx98BLNOXWXqVjR4rKWq+TbOgWLK7DZqF040z8gBG45q1TMze4ezdA44t3Rq+6zt5FvxM9Fred20D8e9WAhqLkyrj7iaOfkqLGDmAPot1T31X00jtvztJLq9Jcjy6SaCXXV+K51Fg+6zWK+mZKHVF4HPIRAnIkANWjuafunWpd0Q4yqYi4O/JXsss5quDh18rp9XOQ8Xehfwxkf9uThPxoSLPukmWeLngEQyG8ooq1oj45wjcfjI15vQzKie4CdgNWRIBrMZkO0W/W/OoBjy2Sz+g8uLc2tXtFQ7JRvKTpuaTdes9r9ZtM2F+akTPfv+Yh6jges9szi+ZepOSear8QTbDjW7X33bo+n/aNhh3lF5z4l3rR3uCnJLn5hvvDunUwrppM7Vwu0X4WU1OY8wJQd7aZD5E2oJ6+skLNI1u09aTIMBVjXdf2V3mMk8U2l534EKrAY1eNtmpZMRtTiPqsOAmu82g36RD9vmwu56Wth0Zu5r8Ag+rqxIYndIHIsWrQpkpSEnFeRdYoXgQuo0Fi2YDiF1ahVHytOiuK0s5nKbN55nOGrCnS0ExNH2N1nQXJG2A9y0qAk9gOrqnXYsQz5l0Xz2TTq5CeWfFCIofMTdSAOiQkEFrHSSxb9sM2oZqBG0gsq0ONnfEyAR8EfuUtmp+sYvYsrG5/KuhTjus3cM4LR2/7/hImj9JCQVS4+DoBb38no0orpPgcwvyuB6q0O5BMfcdzZgdE+WXf5mIqGN2W/6zAKuDJ9aIPVcvXDNXDFPOWbhdwxf1GPimQWzXnLG1nPaFnsujB6DENSlgliCRaSY7buER7toUKeIHy3tgV41o8uXm6rLbqT+G++aDMco+hKTQWa81uvWSSqdUzCmDqasJsFNp63c9EmjjJQZYA0eSMB3aq+z4N2ycPCwhT54DW0Y+C8Zcnoe7NoBuS7iuwyW0RgMJC/f9SHj3xLzNynToH71i7R+bLk34A5BKaNSnc4fket+e102CkuVUUGhaK9HYM+vrMH4cKujzMQpV5T2qKJC0d9tLg4mvZE/seRsyrHiQouns9YxtWet2C5OU69emEwaUC6WerKDeTY8ezQ7y72EBnJxK+p728zwCaFc3ilR9e7bC9WGf4eK4Bg61dKW+Yk8Pyuy7qLj3iMWQkjPrN7l0tJJ8s6NGN9FKBgVd+T3W3hHe9Q0W4IveX6P47ufXFlyJ90YtbPie24Pl9qgr/BBtMIjJRUAwFAa8yvMcUKvd3senCBxtAFDF74G7Qk7hZwSX+X2FaFHSF4EFeOyGhj8pA9FA6P6JvWgMZO1d5UuB6ARwzw90lyVEHbaiExhkBoEJUsWLFirWhilkMkpiCYXqLIyMyelJXK8t7S7yHumuf05Eb/n5/AfSVWq0EWpLQRmttpYHPPvZNW1qDLmZ1a82xteAG9dLmAJYAcMTQudMAR5x2EmNxi29JhTPwfYBt11CHLVhsqiJtSTjCzKNCbF/avkvnI5/VYpAqNItGViJ/lIAGjHmxGKPY8VdAK9wkRHJbYYIrUiM6w2kUcWtZHwvK3ISUbGO2pq2pbotxA7XUCrfQJltEm0pT1kAfuwBPF0IV0aTixv7vle9OiXgs2YL5cG4xXZBwqUmUbe7joiHRWJClT5ULRzLf1/DPXgssG0uUK3210aquK9gqbYawipUsiozNrIQTqFIjP0JwFbRqzarMpXTbixpDb2yBL9/2hBLWZIUtyf4FELDz8gsLgH/xxx3VGKq/MoOVT0GwkRzSTtSJ/TfSoEIJwe9td9RTPL58B4mtRKjg/bagIzx9Z3zqobojaTGvJFBFDVznbhns4cx0A2Js5eI4Yelz7KyFSwnMXX3aRERjkI2NWA+Sh+vbuxkv7YEGFB58NRlORIJMgcvSPf30tD6OJ6GJEvw/ZvJN7xWw75BqxQPXTvghkk3jI32kEpPgjxsVP3WCNtj5F1n8bIUQopzzg7g/dgGeBox/SOcUFALZCMPI56cUMsf89pjH8Y++O8qE3WsSX8/Pcjhx4uvvECXegx2F96X9fgbqoclP1Yif0lJ+MQGeFEySZESu2oE84JNziqvNlPzpn76nSD3HimvvOzsXEdbeCUUh0ssTArcfeMygRgwnEcrVnTh4dQ/winTGgCgtFltqdYinwYdILZ7p/F/bzOkV9slU23t1rciDaB7Wi0T0PVl16Fb58fP34YImP5F0z4cjd4e2z6b2mzezmBwAbv+QmG1q8DHEdUavqi4jjUuW2XSNNKGxjXuavGWZSZJWS0tpvYbvAOA7qS9EiLUObMDQycacHpfHNpI5BcCh9rQq32Y32yrpXf9DG3knC4k3o6rvINmmHT0rdp9hhZEt+pEe7h5FfGbCbVHc0XqvyD/RTiUlYivkeHRJMZylNXaaK0OZz6HnDkXRQqnEo/6ZNZETV7naVlZJkno7WQhM4vykOXsT8G+emQimaH9MRhtdC/WuDamO0HafXFz2ume3cNMJLKfGzxAMdpRghewI72Yc4Dmlfx1J/FX6DxPbj5viO5Ol2a/u6HD/P88vYSYkfyBx0PDHr5F2cIhVJ4f+MVThx6sb294w84DFxQCivAkE1RfNw+QIODHd4ETx7+xXPE/fGyirTWnz025qP7PaEIG8/0GouZs67N+4HVY9uZM4WGzdCljOHV/xwCTEsdhbozBHgk2vkSzDF34OYIAaJK6PyQJeSlcBOMfnBlKl0v6TDg3RCm177YibE5TkiSQvK/cnTykqYf0u7ce7L0ocPVoQ5WJ3ozdcD+TqD1zyWNGBsur+cBJ2xTOXtvxoIKH2TF6O3BAPHt4cI3kwVCUUv0lE0c0Gn20yYfhiCi3w55g6ZIiOqJvYw3b75FdrX/TJKWTRaxiDlB6f9zDfWiN0YOhXxeUgNjSlYPaYlJIZ3HsY98TvmQKiiaCoZCeXnt7Vu+mQ3aRW8Jzo/pOxsFXjfkqDwNduGuU/6HW5VTS7sltze3xxFS4Ge0XZVCG71GBsEzifBxj0AyzdiQPUwILfcyWO0d4cWLkzWgUU3StYN6VL2rATcFGHDjZiSPhOwg6cOkrCfWVVIXGO7shLHufSddyS13cMV4cYL3pO4irdM53mD0hrpk4tZxwAxhgTb51skUMsiDC/2kpmNg/ehZVJjAtZJviwIvuQ9yP4CCwVFmCEkHQ6SI7XZ9bzGLB/Zfj6VqwHpMG/0ZTLwGjtosKUBGbtYMXwMS2AZMZ5OFT0qpUulX0lSKOqdawfIB+/o0Z2QvjiTBiF6WFsVvgHRH4bEf3ULHFX7Zlzf/2dhBVJYauRGLPdvSc4A4WWF5YgpfuSfO04+fHe2M09ngkAPuES7F3nqZ1MKoNhQ/IYg1pt3xU5OTf1k/PBzuFZVSOM4KYjTqKNJ22p/DlW6jYbdcuZ4QqP77jd9ht9WmA3pqMssxX4IvW6ra/uEf3hhBsl03lwIvM6l/hlO0Ul11wXxXuY+il6PSKsPMXhuVpa4pitY36zI24xRdrYoa8U2UoXr0SGVDwX7iuE3JAepUA7iB6zk+8V8m9w0cEc0XmxzyhpgVwwhkDM8cY3KsnQXBu92u35/fGa7J8CJwpSqpKyjBfxGa9FeHw0mUVlgbexCHd8yDKNdgv0KWPcPzWp1XWpSVRLoYzBRKiRTjq0Im3x/8hywqgUkcKZ2lUAWiVa99cUDRoeIyeM4p02acxQTtqqskxq17itb8Bugd6+fmDEz7I007DSalKyV8J6Uhzpbohf0kKeVCl8/e7J8W0wVxWYZUJBWELPzGooC9Ngw22DFN1hNcBIU2UzVEh5Lr392ssN3C0iajoS60nurBRrHjBnkRWW9FWCWcm0n5GKVBp2sJnJYDxLu192vFncvJE6j2IRaqobpS+ORVZEa4MmNxA6MS6zBaTgt65z7CS+5A1bAZNkD1YNg58n4q30l3JEjDPBXl75nJiXPtdB8rJ3FvvMPQKmm5fbmWIyapm5RmP4xvDasso/awUyynqCIOptm9HdAE733xQ2DF73hXShfoPmg9LduKTRLrVnvOO6N7ctS1tXzx2xjXzUBN33W5YCfceBahUix5xuZ8kjYTcbi1r5jw8HcgmqsRyQnULTAPIwDozqvLrCTVKyTqIuGjj6eG42omjqUf2rYh6h4OQuLJnGq8ZctbLqsXpsCKvrl4OvAWn9Dulnm4G9y8NmllwfVP5fwER+jWEP030oMI+FZLyOVzGrzU3r/PS5i2fR2P1wepYOgo1KpkGwasFw0dWWlC627+8mv2wlwWTaJTVFs7eSnUKqlSq6/kkbw5Pn5+3/C8q1DaoCTQ5roBxoaV1tx99HcjcHVx5MUJFjIGex1biC9WQo70Z5AnGaRruV4bIM3cc3dqbfaB9dOLCj++jQ3tz1cHB2b3a0Ida68DEovjUl89Tqwan6llHAqbZlTZKm/jx0jjlpv+zGsKYdnlN3JsXbks9DTyE67/sdhRVGvZRwhkjaHrpVfzWMBAXGp++0X7S7tRVoRH/0GkC2hLMNCg6ko2GC83AqFdDqKsbPzlGr2Lb/EVJbntfQ5CAKLu3I2/HVS7IgTUUxXXbiah/nKKqNEzdnQjj/oi5x04BjSIWamozw7Gi8fBA+JwvMvebX4NrKqE0aRoMHgnhLflMpv19BKcwFjs2MqAGjptVDJ/zojpvu6ZzFCpyRhfBIU1Cd60BX/rJX3V0Tpb9d4Z59mlq/DR2lWSw9HLfSwOZJGE9q691KPkRLtqR4PflY5ZLeF0nMfxX/+IF5A+kiylE7rgI8S8ydH8HZWiCOJ/sF6eTPSUdnMhGQ9VcYtBjYywhP3Z86q/nG6fyN9YnGK47ScEmHL3A2QQrr4PoGQv2XPdLwCBbIVO0YFMZ4OvsqNK2iG2lBGWrK4tz+aDPvqzf6upkKMWQMH9krAbuk6sW6sDvVXtzhYafNIxPOId/dtsVvslwIJDSPTlp9hXRQimzp0Jn+Ye9KfHpMkOKe67tEoHZ8PZfAXKoP1Ew09ed5B1cL3XyzCBE1S8i3l1CRfttSNVHpGeqOeHH80kmtTQqLKIsunBReXJzKJFurkZaGAQfUKJD5DTEFbhJ72Wm/djWT/RRuLgr3U2stZsxaiRPDNAZKDfbTIcTb4fz6DawJJxri+bYCwamnfHWorEM6oWa4m273nRnmErFRMEKEc49rYEg6J2wwnHNBqakBsAdS3beBLYy7XeO/sfKCcHnQ+CzJooN76DXMhq2LHim403BkaklvJyaiFxxzlF8vVZNRU3z2FPe7AW8Q9SJIS82Q1t/n+h1umpoIy351b/EuDbNg8qJZd9ek5vHlcrWug62OEdmegnTV1JyDf4c0i9TK7ZWQHYYINIJjcJsdOt/TQzTnOgeupLOsNDVx5Dh3abEwNZbFziAn6j2bneFZ3kUlf0uNoxzA50ALVzvtazFn3/DTRRwJaYRjuzRLxmr67gvbDqmc0PZFdq7EoqcifxSLt58WKeGS0tF1zJ2ven3shbCbXaxuk1tZVfRanuO3y/pXkrZ864/fjADSZoP+fpSc6e+c4G77fNisVINpZCHWm/vfdZiUW2/bwjY2Tcg/p6Jjn/6fcbcUx1/cYI1JlKL4g5n8qsKuEsVHv2GnDXZvgpUTHBrEhxR8px0OY8K3JQztsR8icSKGk8/03ml/xPFCofWJeJUbfGfG+z6x+0XHF99xYxU7EUdqspeyiCNCAwbo0Og3RcXfc4LoWAaQfx2sRJ5kvmVEY5WW8vQm3p27DZv5/H9iwKVqmXavNrx/jlDqbz6VGUP3v14Oeh/knZvK/XLfCf3dl3fJLzsv7jaRLwx1u/S1LTp79kMH1xGOoZEeTpEpXuE6NOANbkTzHHCGwnHDA6XiGz5HBfzENag8GG7AipA4j634wYUYiCAK88KQFrWTFBLxlFaQGR9UQFZsvSg8o42yhVfslF7gOyLQG/xI5KVDNByc7JGATumAlOMe9IXU4N7LiDSQGZ2RPLnSf6SQHvaKLOidDGmNR6N7Ukel9Eg6UcMuSQMwXqfYeAiNDliGFe4Lq4ewcMaKkB7+Yy288DHKAdxCgo3ij4UZewIo60LV4AY+oOV4U/uTVKFAowt2jh83j66YjHfjR4oQ4c2MbviE69EmQP0cXMNNAbepDS8luNePGhoYvB5ruMCQhr6GvXP6v3Ml4YerQm32blN9cX2G8zRsa5AQPsyVKfyPDpX7vnVhqlzB6HXDdQH//8P/yq9Orrryxvaz4ys3FC4df8pyXVeY8gNwu4183t2g1OgYux1uz+mC4aOcD+7i5dGOahunLzv6WCjv7X8dol154DBuM17LaRVzSKyPAAAgazz/g01ocSQOeV2joE7uLOROZdPS+phZ2BOZFaYq9uvMw1r1vqhccoUrTkFKLdagH8LlMHXEmKzn/Ty4CDhIjnO+6E/R2c2TJZyicfZeXBo2l4wA/DIPJRi2fbktLT5c20OguCVDXAKIdJo0xrEb6IJx/TRn0j75IBu4A5NTUEWRMDJu2dW3XDYxw18RVR1UObwt1AEr3HTroF5GBtpab8vph8ekqxx8TCQC8fitfX1uNr8y/Gq3oEz4fFO7lPad51O1Xxh0lJigrBVxkp2bjKGTE/pXN6MpjYjvAcY776qLURZOacSY1FPeSAbCud4WfW/9FY1M7HY5klnbg6dzZVlUTqSiPNib472JWxy4AtQ2F1+ZjBB2i4cbpz5Y75flGOSK93GGAayNmSJJbSwsP8xspk47gpQReYfBEYsEyKEgOvdkEg/ZbJ40CS1G0n9kGki5fI2Me7M003Eh5dh0kaeHFDpEXnjE3gEd+lOu+qvlEu48D83E2qQg7B190ycjSfr5Be6e/gox+q/Heo6EBWlEoT0ey4bOC99d7RuCT3MjopEHzfEyhUxJCdS5JD4rfpDgWkHJfGbtM9v2ix8T9d+XDbnNcZRZYBn9XpKGN4bxjNr4wMJbYeYg3acal2SLv+cqXnsV8YZuMrnn1Pr4fQv6gCeWz53Lgn/0ScDHdTBNQ/bnuVvg1Hzd2VgZtIuQFdQhsdEotEKheh5C8+ZF8Sp6AliChXiBPa0nn7VZNi/695DDXFPq8KsuhtneuSlpVzVsytR6TikXqhEq8FCkLITj5K71FImYwk8PqSqkDMERifYBjLv9LlwJpOUN74TnnAZwoJ7ve8H5ey9iOCGexOp6+EyBgZba19ATS9R/KAS+KXm7KVxR6wlJp0/r5q4qSHeYiPDk3AYiXmMgibwITmHfiUmHKFItJIZfRjwBWZAZByLr0mJOt8Z7+S9AsKn1xrgwPsaUOfLCxUbp9F8ihjlGXkewcCTyG8YN0h53O+DfDNI1ZxSgcyZXhXhPuZ94fhjqMP3yXwL8igVZYW41T2YbJC59QLMh9zYq5KI1Y4aJOG8HQlHeMGzD9iM+MIlMjAkjvaFBALiKUJJ+KaUEc472PQhLOez0X0C3y0wieKQFTXEn2OiX4fQloodEoy5ZJPi4KJ3MbjwIataTTjFzsEINVGlCr/ukYxBI70kQ2zmbYlizNeSpmDDs8axAcsdj4ImXzitYRInJmi4yqghaXvawblBGFtGZp2lz147NkAhf+vv+W9+UINEZtI+hXkEyeGRbo+9k565jeQbS9NfNglQmQCB989mzNrWwrkKdnhHPuKop+y5hbV9GyTMRCTSE2kwS009NsnjDyNEnzPqK4nSHYRiGZQ33SJtJQYzD9HXvEN7oHdzaReskm6Mxl8dBtDllT3/CRD6npBEWSPzoGcKe1z6z16w3Au47hJ8PqpiU0hUOVRM4Ow1o86HlznMqug3L6tJbfzr9Oj7TphgXj2fDKZEwJdkcLkfA5TzUXTe3sYzjepKl9wBpCnRKr+LH3Vw6TxgrI5yxp3F3bU7iar23vCVseYZse1EVu3qQ6PeW27aPcEngtORyvZEh9ArGLLJPx2tVdKZ1zME5hZ77TSHcBuKewI+FUakI3Yf02TEDfZT6beR5KO8yR66sDNDCVA5A/mqR3MyWwXF0G0bLAn62TeMUagGe1W61e4uO/2zo2Ig+Oj+ujHdEUpw+pUuy6OdMsoSjwJH8gvAEZ03POWD3g4oL3xq0frQ9UUXcQUS9a6iM8RYeL8ducnbARGoBIKKhiJBXGx6LZkc2hijjQ0RDyCUwjblb8cnQvbekauvAHRYwov7kKsUzmoBDgatbgU4jVrHEduhFB8wKvhkmSOjtrNzBKJ6iK6VUZ9ZDxMEggej3VWCxFdAkTjbWz2zA/Nl2QBj2inRs0jmbV6tzXVHb7Rg8Y97E0Ha0IAUApEXTSkcqn7pPqBnM2ck5F4K1VhGo/fU90jI9UX3QKcSNigYSm/zwqwKfGwVqVXZgH2l+1EeYy8ZfT+VOcxvcuoCnWbV4eMdbz7ZOnK4Ce6B2xnUJAl2SMGXltit9PpjmyWM9s8sL4/4xnckSh/jkhsQ4cZ24dIGMTz7pCSmeDje2ipPf7KY5sZhf8LpMVos69Jzm4lL5PyiMUQzh1eeUfnUpMwwgNFxyhcbbEJyTbIQOhRY8tLlIm3BMW6AwajVH0lGE1Pl6M9W1KVBxIndlpM9G/jaRjMf9t71KYZq3BKOY3q0SVgkIOmUNS4VgAvtLyKkjBaEjRSrcamirhFRuyzPTolLrpZEibk81ekPEZ9tRBaLLR777lvB0tGup3Uz1MVNYq12Pyj4H5Qay6auS1uJf+QnyaYmPZ8dOBgtIA6VESaplApExcBw2fsnep8cGkCACDLCasGY397PM82ifRUVUJ78Ed4R65ikPi90F+w3e1sEsTdASHyn4LXSBx17xMJH1ZHjq1+/Y+Hb6SUVmfreLsY026WEDPFxeH/ylyaTHiGjiX1vaWDBG9b06o4fGFe0Un6T43QKdwX5Fpiov1ws6SMZIpG0C8YZyaVBeQ9AeOsH6ZdUgQr+t7DP02egMHHeO9isPVVZFa9BRPZLkQ+bM2rLRmP7p1CaZkHV26I0yCgBOSI62N+tTkFaYNmZp6kz8Bh/AVZN9ADbWM/+U8EElShDOz+gcUdvN6iNAudC+yr5VaFK6uLx/5ldrDeoBu1mnVdVgGIZhTGTnmIgMWsZM7yHhUK1RWeDmfk/2qxVIaN3UZvPWFR7CtmjBhpco5iv5Dp13ANxFDXA74ZjlnJuFduFHLzRjkoVaxVmoKgml1ly4kbdH198rTyooe05gl+wIztxZofrAA/EeFYhkOlzJ9WXDEcWFEj3jAVuX6Pcm8iuXEAFW8v0+1hUK71ddtcgZ476FIgcH5DBPskeFePh3DBiFjtiyMieanvkCeegFZrIhMRUPDD/pg9PgIabbN06IFXzLwaNjWDFgVWvsJX+1Gv2gyRfgTkGPeeGUbqqSRqyNQfE6qOKWGt2X3Z14SosFze56SJaF80GzT1d3hfaIc+mL+1GQrLDrOZKlK3Lxb/LtomifcUCL3YdFpLiFuBSiHI5DDFVGwCdTvX4ThY+hNjloapU9pkqNypl7bWFcAix2qSKZ65Z+sivjJ3ovWA5MDjDhR7uHewS8aNaonhE1sGWbKycDd9JTYR6Z0/Y726CQ18T043WK+ztyh6sxunSBV0wqmh9dKiIhhF6A1QF04mUqaqBkVz51qLJAeCe8GmuJJH7aZa+Q3RSTyvSAM24hDM3gCsYBswXc2A63T16glL1y8oHUv6FUcAYcALccxlyZoeHyMYBokVu/eljrUoEZAvcoL1alZihsNBGWn+k4vS3hJqYq77Fjk1r4Zm5EV7kHnDHG5GYloUVdN+QBvNg5jQVgFsf3TRk9A/inzpcViHy8D5awTORDNbiFR/OmH0ntNmTldzrQ+52Frl2f7QQJF1m1Pxdr0y+tu6CKHyNIrOwYgzrLZEB7Eoh9cq9K4mWGF4DQr4xtgg2l/9QeEShWjN1bChxnhpbfrdP1FvZ1bYIQiCQijCFhgV5nY3X1l1mVASDkBxcloc+kXUOdDKNVqJv0l/DSHZNItsJ7npC0xx4dGrKa20G8bS2muBVW7sfuMkAtD8RHMI/qJ9Tdnr3DyEhGbYRjzQHfL3wIjYMoKSRYmdk02vzhoNhTu1RRs0K5gv6LHdk1Xj5PclM6beb7IThz4My4AW4JvufA4ZyGK6lmTf7ME9O4nUGq1j+i08I34ZvR7uVbBe09JqqxNbBZE3FghYacjBLhCdEp2EgjPWmotjKDj9TeKWsPeyvMQawsue0e+JWNsuc0pOnNMAhdHvTv0impuvH3gyfNlT3ywrvI+WND4+e3kjUFSUBIbCXzsR62G+9g2xRfHbd8jTtt93it2klV1nV5r7Lur3bkBDS+G3JIivyuP3A3iBQJ42hwfABdC2cFNP5zvq3dbphacCS+N90pKA/G30E6dWJ29Ez9Eg3lzds8+uvlSbPjoekNo0g/pKaDybP22Ihg79S/eKkY8gnqToJqAKa4y7WKdvA01Q5gGIZhpHC+9U7/MdNGbgAsjFWcLNSPMjEUFeldzQcMxtFb032xGyiljvzmjii2feT40sHIO9Eku5WvpMEmbNk+UulYCnnC0OJFVCkHmGVsF3Tlke96z2o5hQylmIMpp0izkIFzdINE8FDyJBxwPpmk/dXL965cj1rdzvHSYYxy1TTA/mlNRHWWpIez9ewOo1S/zG8d/XlrUq07SpzEFq9Hu5TkdoogjN/LaADs76MWA60kwfI3DC2ToEETMmCXG5axpW52yvDqEWo2g1MzH64q7E5vLwZ8zo7lOisZ2O0ZUIItSKVgjSz6vgiScQWa+rfMUlDT1/w0jqN5Peg4NNAqGw8nonomNtH058qURmmjSzJuH5oEPNFruyXINUkIiWFI0Mw18V7EspWmlzZDtkmFvhLPzyk3jYyvfAfqFXIqJWV1/IPqL9K9xW+WWUk0Fr1P6bS9XZUHIfAFAim/pK/OwgGaLwdbHCZC3gt4Vs1SePbJDvNia7qcrVTEoO6GZITwGbCYLCRzpsVS7B/gkmHna6HbuLrzsmBjoERryvtuU1l+oLgOdHlzuVMRT7DDFVx9XFD/FCV2+8bwNPach1UpJvivsZEbfzHbF5EGeWLF7uZZN2F02Ee+jQUeDAVsnKweKbBO39v8Nt8ccxRFmL0CuDmnJjyRrcQo3em66ajtiXmDPMf5jE95DHMWCIQ6lKoPzDmBTJpRaul9JnxdaRbCKkyvIr3uBULJieF8aPrljfiN5xJgxifsk5+ebRv4XPsNXi2RuQtJApng1oIh9gYS3kETUXotElJCq3Rsn1g0HX+s/qtdTN9w5TEYFiy1MR3ETRaJiEYHXBuAeFzpkrqFHneCNIPgpj5ruD/FDgcuBB1pr29mzgQmuDpHiZE6Ssk/h+jlulPoKPnYFiiTjlXxbdqR6Xbq5HEk0JwIaA8NlWOjzJ+VEvzN1upKUkWWEFYU9lcOzrB1wM6tkuAOmIJmYyOH03s2DhOvDbiRdrHeakEtHZW5sYsnCUkM+F6jRtyKInvhZjlZKlUQpjr4BSHIWCqKuA4OkLyaLLILU0CC0XTd63tPX6+JIocoFsUOchb82nuUcts8EBVz4CnVosDGLn2d8JDLKfTqKmEWy14uIsz3Lb3P1g2aNCGIJ/sxmiaxyHKVG+y1kVi86aga1YnHQ8oTpGZ6hcQng+0g9PcAVhPFMCcGo9jL+Xy31HL+IvLYhZxOysjZ3qWSB7n1vyaeFo8u199r/fi52mNN5i5/lupGYsBtKvB0CFXmQBY+vQL3Z61vOrWH+iI9dqATdXj57I82x7LMFOJ791bQYC4vdh3uqdinyuvheAGUjSDANA1R6crE9HzybvGyFyT5OFFOIqINwzAMi7IfF5EN3urqoAb5IueFkxbSDvXA2K9+VKVq1PPnpRjzXFya38DVUI20nnbMhPjcCRzxj8bJ5mRxDpRToTxfdsh2pqFuCy+CTrgHuZLOPagjtMStG4L10G1oS3xf85jEdMiIngEjHa+WdfxVT8CEr5086YHUi21HlskxKGwhWPMT3lUQyTAR5GGZyrfoHx43RZ01XRlqEBHMAu2MDvjMesLZtSQ3L/JXZsdtj4xxtgcGxXUsxwXcoPZGC3Tk5amhvS7aMMTPLN1GB53ETdrT9uBwtwWFAogxnbA7C2yN0bB5pMSO6SXenH6Hc68qR9+1UiaZ8LhPJJQbmU66DyOoIDlMeb7s2nuK/t2wy2xFLomdkyGnC9Q34I2E3gcG2si/TLEZe4DGZlr6S7AmtgWzBiE5CaL1VBxytZ4S+GEz5HRp9j2SSBNTn0+oSWH86ZHGCsqZLCSbpoeeOrBfsRwPc5aEvV4D5QIua6eupKWSEyrRN870YDIg9PsA2jXSAPklYUOcoWwt5MOUpkcalqqhRMjaZRfChO++EurDt086yLxmvXsh9e9MsVZCJg6DBEfQY+NjXnTcmtWIacisjdFhY4FSH5XddkwXWF7lOU4KkQ5WPfZucwtPT0f9JnmYYbICHGxFiik5TC5RjjredDc9PijWd8ds8oqO+Zu5pt9J5h2vqBt4kAl/XopR6rI3XXvoflMJzdXNmsckxnYhLnafPIc3Sg7ZMvCZ9TiRjduCM6TN4YYK4pDGaNhcO1V11Iw9QJ7MabYnN/IvkwbpuUk0GcuykcL5946HOYtX9uQzeDp5ucy+BjAOMq9ZSsPaZ084igDWfYG4SFaAg3BPf8YRvNnLUkp+3ffJc7g2CqoelJ8zlWVUiBTg6eSlpyuIRzemRm83156G2ZgaPQhCNfF1YoH8JtV16ItXf9FSluP4D5G+Xn+n5l3GnNaaYOo783iMEo9IDip4pVGiKwxEtQPFq7+AY4d0jbugaFWLA1mE56zBlYyd7xMOJCX0iCYuOT2HZ+ePBFSmMtr6mVHP4dkKzslW4sEQG1XkFAtERiz8Mae15tKwqnXJw7suXk9yS9W9fr1HOMfM2vzu87lz9CdJEK0HVOl3ztSXB9jUyGJeTY5FX53h6njeh1y3kl7KJdYo0ZWDPLI+aZOQv1ZgOfhnpykJApJ2ZZG4g7QR5QYtLszeVWZhQhdusYoZWI71PVs5q5PsJGyOetEo+z5+lfR1QdGqIWWaoQJfc0iCIvz9bPnvCmiCnI9QPg4aNPQYJHKEptpPuw5NC0jLNzgPWoiMgPhE/MpCGmC/Cn9Dj0QVeCApoR9u6+1tmbEHp03UPuqOfvc1zytEGzVxLf0gjsQghmEYRnKP1/EVJFmUXQ9tPpU+kZVhlBbCKNoqyYek6KX6tGt699lPFbjApbtsCCmu4wwo48xwwE8JXk8IeWI/2zsULwjtVHlZjJZ5P6loduiIC4YD9KySQFY7GH4ivlUzTsLbdHq4VdKZEziv1TyuDJ/LMq7pI2e/wPHB+gsXa14jQdU0Y37jfiVVSdGJtUTkl7CkibBtB6fsqvn52ZurYxwi1za40gycd0Y9SznzdOYPb0ZgjTbuN/cUqs4qhSWhtdvn3ztC8nHBTyjLUIYEz/XbP5pQ3mfPVFkV4YGpGpOt6ts+rFZBCDWbq8r//civ/Sh0BrOrVe5BFiUUTtBuoSh5tNlq7OrB5/wfIiOwU7yrE3aNZPL7yaydvTQkhSGFgi1GYCr5DfnMFq0Y5fdpbsXGw3BBHBtBewGTppeA6P/2jYxDr1+kJ+wUCIRXKeLXuoLx1nmp3ypUXwucOgwcl19MehxLJ463MBPqcRUFgDC/iSWMjS16Rqry7YP0UO+k5whG11xbaYaPtc55oQXx7cCk0rW8nTYDyrdST6vtH51o0IBlAGTT/DW/Gq8niXpMn+px3g6JRkjcJ+B2c5fG5aJ/NE73yeDpRcm5J8SyymYGp3/bqucpyFdFcVVILEB+8ozfNgDeKHfTsTPEn/EjGLrBFgRYN5clr/cWXWzTytHyL34Sjm7SBo3LY+LnctcPa2sShm33dg9+QlObgqGnIQwKXjwHWFnl0dlc5llELtlGLRAYqiy9SqTV4eA3f/JWcV8nWbJM3MgIMlFCbbPcnFPRg225eZB6pGbphxR2wxRoPiUMqzXNJ/odgXeDqsEBLZe0EUSvBUIhAHIr7iNImod7U1FEXhR91hVGie+tt9/ase5VhfqF0B2ACOU5IEpah09on7c1FciL6C+hZJoUEnTMrn+4e63P5jytKs5aCjTq5Yv73tPoCuLwbRvWAS5gfDFbdFFTrmZgrtWcT+wt34I6+wwHH8hiLVTakPzYT0QLqH2w3HUzmoerIePNySyPudaBs7SgS554cDbO4mtgzDN3PPG8PTOV5yoXmVda/WQ7x+jjIMks6ZENNwBfrrH4JZx9vOXq0VsZOMSBgzWS42IbvxdlvOlpkfj4rSq3NopQKwwY9qb8T8xgRO2mAscDulWxgIoDewXC+Y71NOw+9gv0BNGEz4suWKkvoHPZjU8hEQco4JXTQjtzoXPzOfQXjiKEPl+UZ5A3pxlCaXFtJNjHrcRxBaA8LRoG95zuZNlUUNdvi98hBWkfG62Sc57InxHclkTzWe2AXKY1HwUOuQoUJjNc0ayLdcvhQ0JGIIxW5ztmZCzW4w6Ro6GaYKlYcoZxGfEurlZTygJ+vOWrNvxjGIZhGJnL+oJvTfdihgyInELdzEf6UfrOKjB1NKEtLoElwBLG0wLZP0jclokRVmDLuTueMn0ywIY2d5DGwa9su8+0oEyJG6MsEyoqt3gje0OuP9chXXA7vd2OUkqa5TEs9PHvx9roZFPu4WWTIJvG4AZU1DoB2DO9uHdW1ZYELkCYH+SNlVAH/N3qsGAEB3a4DfmXzRNSyxzUw6+e7ahO6qeVCDfoLMO3We682TvJ5ghvSAKCocbh8el+Biyf4MilKt3jwEVrTxQz+cmA2sH5zzM7P3i6hStJxcpSpRMG6g22SncWjdwr+TdTiZAsdrO+eiwUNPf7ysO46KLL9K/q9pjL+oJ9I6tGixdP91kvDHxEh19QlKNoa6gTU7EKw+kp1stcVDKtnwNN804T1QbdKfHElJqLOS3hV43X/OZb+t3wcXPEk8e40CIUBpz4Baz8mpGRlEsrSornYoQKl9UGZkbaXT9tn7sBmHjXnk78+oTiuJ51kEoejSFJx5DrjEmT6Zm1rghDuLilHry05a0iXAVglYCvJTOz7osbOgxIgmah9Kpb4j75s0Mh49+p0HQ+6xTQzxUYO5JNzquSzcEuQw79NxPZ0HjUOUQjyh4zFG5GHzA4I+i37YJZSrRU957JMLoUnBCPJqDpNL0QKdI8+QjRffDdQqsPPp5oMRqBU0fQ1nQvBrPL9wS09wPIviDiFO9/X2zVABLd4yUVP1xeTLaiJq/vL5xjbFLTqvCCG1qSFx3QB6JCFAi4dnPZtyz80aBrYZT9udBRAyPyq0A4kLZ6yQTuIxF5yYGUFJy7LfY5/hhrVKhD42uQE2wvf92xcGlmZEc71jXCRvs0JugBBL9yxOKIT66+jJH7p/LnAWDfXBV1RKGkVXc0CiulXpjQPcLIYSBmtqYXGJB0h8Ae8mtKtlsZ310M7IOA9MlOZZBGVIxvzHnVX6BSeabNpCwJrPqMZfQZVmjbNwthWvew8jIWp7kTvdZTUf0zRvI9Bl2oZcNlSuhL0tOhQAZ6d4vZh3PIgMhR2ROUK0+DlGsAhkVKs8lef3Eqevvo6Ru1+k1jRPVt1Ng8E+eHP5iAZyUwT+2kh7eqjijrWrmRn9p0226dIKrpc4YHU3LfoG28gHaHTFqjokcH6SiCDYKXaMrbWXCDr0OnqAm/A4y881NTfhmUeP4nemKQpX37Fom15GHRICt2cs3GccRIrBNrEPsqkfh+nVitUaswXGdOPN6uoZKa1W/jdpMBHPcqh2G5RagNSQ3AzcLirzxFmBSYbd29VuVZuB+kO5JUVYijVcCJ6WaX6yby/D6eFMgjGOxk5/Q0jEj4py5XGyox2fp0k+FD+ry3SWinDhWYYoHRSGb32kCkwzAMw2G3VI5bMyvdq8E7QNjJWsYmTT5GF+4x/Svhr8Pf3FlIFFJ8bL3vih3gR5KZYI9usv9lZ19iJo0acNsLYupIYVUTWvAA9+LMr8vtdvui6M38pFpeCRgumpb/CvxW1+isUeYU3Ca0CQ8FsCKBVCz7gGZeZst2dl5StEephlpdeO222876iYdmIRV8LAUDcbRjSVNMipTRhvOD9eg4YuXYLrWL+ntzGoDtwytq/BqQuBynHdWkBEyGLBsTECUws5kd0ERlxEEh6pRHu7QqhGjQi0DkBQNloENmReETNJjETEHHX6D+/F312Pai+lvBRd9p9x04x2MpwfbsYWsVwq5yUWxohWjAiBfKQc/Upa59Uc7tbPu0jQGA+qlb9jCbViSawtQnma1QWpuwKHhC9Pvc56rELCYYTL51/SH5Emr33wPZy2y9mVG2rFGsSN41vuDekx1TEAg45JQ69Zhn5ntYl1eaZxMymuY9JJUUvNL1TXk9Uj/OMErt0Ny5A4LVNH9M9GPx08pOg0eBHTf5kYVArsQGvN3IhoubmwlMVAEQ4KrXpJBclzIG01vOJFc+zCw/nn6rPgdWCDgxhmSKOBzuNsEVEGbLQCEgGVviXUP/cBFCf/DXBhpuhTbN0FeXqBmhd7IRmQAVsYrKAPoDqDjUEi41TGGIOcndwAT1xTqvkeGEWHA8QiEuBzLxgMCTwpFCKtGXtVCi/nh9xVHO6hdlIVMyGEQZPxJ9CEeKiHiBWDFKbV7qy6/EbA9BOf1tynOYwTJHBJWcFaFh1QkQ9oflp8z5162YO67Nfs9NM9JDWdm+6lGssnekBzoykw3itNZVFLevrfUjHqdANAJBT9Wqmb2DSJclkFhlByV4je75/jSTFcwbTPjlwgh5CulPeyt9bVTLk8CZrZw5nqTrNjeOfGcZfT8yi2gIlPdJyDGjL8eqNW2xpdUAWmGJy1N1W6qKgxTQtuvEYrGD6y7cWHZ28k4pnMgLK8i6vd+kVlBTHhL+q1xUMg41vfvT6rpi9cmpSTa5RSVjjwrO1Ec+5lQ9rqOj66RGZYrGdJT7Pp0ZeICzRDinuCRPSjF4twTvyn6/PMgJQf3yfFy11PSwCxyZKdSndL76ClTesnAVCHNTdPOT62slzcsO3gZS8cIsVrHsZojTPLYT36vGFKzF0F7bo2mSFubx1jUy/dtWwCRmG55p1pJIXh1hqlym7zX2Cx6HEp7AdskFjXqdCheupUoE/4fM8YYW1rHP3BI+bH0k+KzNQMM54VQFyMInet++br6kk7gVADLLnC6Bla76/hUMKqvIz5H305gZphcf+eFhlUMrgGefV+ShKwLmfBBV7nr8ns2lId7AiXQf29HERPbeFOLc4B+7YBnmxFIUL95yO1TQ4F5bDkWFdlqqyGS9k2edMtJOGJVoV4t1nXjfJZWSSknNU3erPuDhIu0DPkwfPyQqtvwhcVnp5I1rdrWz2RvXafBiNgoj/k+kPM7/ed6Ldt60z/hhA0E7D/0Wb4Q56D252S0/JIZVe/s+8Tuei0+buy/RP65hsp61lCOW1+Wn76NTkRyyOxwbY9XAfVyRv7g0tKSnUdhqIGFvDpI2G8ix2kiSbiVJ23PQfd6Hbx8vR9B3LXqDTxTsHFa+Quilcrarzdjyngc3vqGrb2w5cYU7pNxIWkbxjxSbf+cuRufucvJsROPHsRVRCFxobNdxyjBahHEEWVSBuHhW2IRct3IeR5NHJwSKW5Eq3Lqk47CrXZR4cfwttQ57Iz+OqYju0ItVvOErwz+7MI4siz6gXHyjtgm0ja7IOIo86mEoLgWq8OWQjjtyOphk/dTgWKYm901quCWWInoAHNGSOFfVXlpVfUtEWfQM5uJbpU2o9CvJOLo8uiBRvBOrwh+3dNzfCwsqKCerdgtMDC4qfA5W2sIGoLIq/Gcosn8K6USoxRwK3eocrXnKiWg4e7YJ0RlhHR5Isuy7iJ8IwoXfLkX0T2UzEXbRZ1PtSh+lXmU4UeXZH6kwERyFg1EWvQpVEzG57L1TGt2jbcIGv3qXfeKv3E3kw+HTLo9+5dYTkVF2b+ajPVQVrtiK7EItnQj4DADykt2D8jRFGMIRcInHrcRYZChpWNIQuEfWwUDMK0h5RBmDaB1fmT9+zjGX34w3V309Ij20NxRMy0Uer8RwdkRRYy0Nol7WaOD5kHhcLFGuEELvcG3v4XR5ucQBb/yYI33MdB7HWc7L+/O8Pu+TVsfgMdqv2nA+f7nf9vb6N9U96mjC/d59ba9Nstg5K/7EfhG34z8m2C5MMPMzz6dpz///miMK+V2wrtUJS4hU1rAQa7YXmMubts+dhte5Rfm4L60W+yW3OM5i/SXZJ5+k+8BZeXDPC4F/G/qHab5/iv2MsBVhcT2B5xb/pOsG+ZHiVYQgvx39XbtrzA+JYXECQG12n443JekjSVLjfOFANrVLN4wPLRIrgD1U7e14RQ3aJhvrfzMsXXD8++Ima9jjSHN6PpPGIb5i5wy0zN45Jwpy450qc7dJxT5zdPmnP/C7VxV3B1QEGDT01Y83uKdF8bWp3CLIXRsTHe52g2eMHoc6PGq42A2Ew8/7wn1XDzd/dU6qaKhs6btNNY6xMVJji7XRSUk/cE+r6cVEU/YGeAWn5BNc8OJ2WmB7nUaLD7QdrXFGjLTOBeF0ytv8eAIi36WpvswciczB3/zghgOXc7+7fPCeI9EuH/pNY3H9Jz6mfiE7T9FkevXXyBNEAFc0ltIQNSjDOhzkzs8c/P++QXeqkS8QYnBRLTdXG6IxqBnWCe7lEDEH5M8QD6AS8gwRC64uWASiUqhWa/M7Z5LPEXOCfAfRm3r0l8gPEKXCZUA2iDRgRqynGOKG2SMXiKXR8PYb+StEcLh2WloqR9QONWJ9h2CDc0Y+Qjya2ikgnwohyV6fnkVu0oZoEuoT6wH34iPmEzILsVJUiSwjYuK6EyziiGqAWmF9wVObZJinyLtCrFWvfkL+YkQ5wGWCDEOk32FeYD3HEG8x75F7EwF96/+Rb0aEDq5Zi0twRN1B7bH+g+AI5xp5b4iNq53myFdDyAwuvdCmc0Qzg/qG9RgPchgx35G3hnhw1BXyNyPid3At3LCAqCLqRmuz3CiHAvOAPCiiT7rTBfKoiDLi8oQ0EKljCtaZUcQ7zCXyRhHLpG/9BvlJibCD660WlzgQ9Q7qDetoBJ/hPEc+KOIx6U4R+awIaXVVus/NhSOaFnWE9dMM4hPMF+SqiNWAqpBTifiE61/BUkJUE6g11r2Z21GGeY58r4j1oK5+i/yoRDmByylyp4j0FcxLrN9CEc+Yv5F9Yylzpm/9PfLkRMhwrbW4lI6oM9Qz1jcjOMA5IIcjNp3u1CBfHCEjXO41bdQRzQh1hvXIGOWQMf8hf3bEQ4daIM9OxL/hOtVYRBFVD/VHl3iUr4x5jHzniH6mj/4a+cERZQ+Xd2RzRDrBbLCeGUV8h/mIXByxnLHn7Rn5qxOhgOtGpKV2RF1AfWD9MIKf4HyNfHTE48yRE8gnhGDP/BJpaRzRgHKsrob4gGnIRKwiCmRBRLhuBYsYojKoDutOPcrXiDlD3iHWUR/9DfIXiNLgckAGRCqYCWuhDHHFbJF7PJdXB/rWvyPfIILCda7FJSiiVqgd1r9KMOAckfcQm53aKSFfIcThstS0aTdE41AF1qnyIIcec0TeQjzsUBn5G0Tc4HqisbAhqoS61dr83U3ymTE/kQdD9K0++gXyaIgy4fKCVIiUmCXWE2WI95gr5I0hlq09bwH5yYgwwPVOS0vcEPUA9RfrfyX4Hc4XyAdDPLa6U4V8NoR0DAotN9kRTQc1xfql7sULzD1yNcRqgqqR04h4hOt/wVIqoppBbbC+qqc2zTC/Id8bYj3Rqz9HfjSinMHlHLkzRPoO5hXWXy4mP2DeIFGdGHZW7g5QPAG35SShk6lhfhs6Od4blZtT03ypr7sXFDF2RGek6v5RbdXx1nQmyswD038u6ZLOaLnzj88g7+t4zxZ9gSvn1dTD8c4s03NTx7y5xfH+vPNcN9e6Xrm+hp+CF86jsF/H++AVXXN3P/sXgofhQMrES+uCpgo1atIaQWsiqr0qHkVjCFoHchVMWqoYKVoSEm8VR1FW7+4JAg/ASAXe3xPqPE4UD6LcsdUpaKhgzTO9MFKtqSF4AjpSdjHaL1hfYYuG1BBcy0bUxF4JpIAYchDXbHiA6gS4onlztPhBBFADdxdcc41lWAEB67QAkJEbwWCG7SMDoOaaYU3CsGnL/sqoeaPtWQ68eVrYxUUk/NsiFDCP021Obb+LYJVLgCljLJeQ9HYagu1NElu62Yq2K7aG9e7wu7VYjQ3v79s25Ddj06bGVrHGxUsnBUg6V6no5imLhlfTUxCjEj63kQumbe23doN1XDqKLcCD0902dn3sww1/ff2AJW/l/2VUX1/+2S+ts6jkXQIJZutyMHTt3levQpX/ObW2FNjlT1JmvF4SeFh9a29zX/ZjKIf/vvDnWTTOXpHweJ0M/6r+fLUuvQjXb8lxOS6bw6IHu3Zjkpf97jF9vluYmO2/plqSPOu4zw/eCtnBTq4aN9r4Jhmekn/dPkMCRuXiYK/e/Obd9tU7yILBybBtrUB/ksPqUFGVp4szAGUc7ptmdEiHKxE8Drwhvuk2MGK6Zn9LL+6eoWE3luOSJ0cArm+0w/HI3DPtEL6ENCvc5s9WRo/hkL5iSRrxQsQRe5fbWq/piHNy9TJZJAiQuVKFt/nQcL3viGJN9by5Jrc2KduMz9Ve+1hiNg04uiiHCIr2lZlzqCwpzOmQ//HEeIcq0AgBlMDoi5fmLraU1TjneaRUhF5g7rUNTuH5jk2mIGBo2uMIGs6CHvbS+oKbNE/Brw/Fj15dcLqzX230NdqCNS8BGuKJb/2UHUpLRs69N87kerRx0jdOVxZ43cOOJhUClMwBjBzu3nGiHTnS6P9vnM8na5EbcWVF4V77AvwwgBTGiipPUPVlpHgoVT4mJ74PJC3z9EiHXglHmmG25fZ7I23I2ib/juBsDMofpJbKWk04YFfC77u/7N9WVD7rI0CvJvOilpZl+s/FRqixjnTSjpUnY9mEgvtwo5xfHxwXsORL8Oj2xjoJVM7mWoz3sxbGK3N3Z9jj8tanYW41Zv+3YfTrNF26hEolVlmRRRi9xLKAXjYhEIuahKeX3O90b48TvGz0Swhemz444ZWQ7qUYxsPqjNFOLJ1GnqWx1nK6g88+3CRXG8uXASaTYdEgJGKgnxE33KtoNk3rk4ND3CG+5RUIRAxB1L0rYvn4xtzD3amtitXmoA890TW1tG7VPGFZwXxdLvyJmlXd2y9LztfmMQT/fuuJH0K+eGt3E/AUjoxW8zATUVXAnnUgu4UeUszSe5gyppS0OinkkyDJUQ4OKchKUulmMRifBrgcS0/dFFIyR4aUgFAVgcm9Bq+GPK3pKRjAGDg10GPHDWnngfSsDGO7QmmziIeuZtzkek2K05ZD5IyRkSOh/BX+dSlQ8sysiTSlyRJ0UmTVu0QPmXnpOML0v+FcidtguxjWxKKEKUsludKbRw2I5tgMMRDD4zaLNGrrT0NgwgEpeSxb3qghVncwr2VhA73tyi9WLz4GaEQvCnDAU7UMNG2l/cK1pemtxkCT2RNrRU8wliuAilY/fEvKRsJ+2RseByme5NlMU7Q2CAm1DT411M6JjLo3B3MQ2SQ6jZksZREanQM8bWgodrq55Xv+fKohb6PqjH2eZ2cac+zRPAL6OKh7KzYWmckV4DqnXOE2Dws49IhIif2oEMii3+/1uitJV5oLzootASTD1BWiTt07/sZUs/obYOyxs3XmrMJ5dwC1hyBFPzYmo77F5rD05JtLL5A2YUxINRYRzRVq0kBNSNKgRqrA0vArpZH10z1sIZQ8E7z1FQGCqfvVMDROkbOo2TzTVPgctnk3irwh2Fporqj708dbShq7ZrQz3L0Lsl6fm0QD3MD+HwPBm87LhXpFXWfcwMonL1IQhqyRzWhHIOvaJ8Sp7hcOc1llLybNF176Cr2FxTawwC+cz3upzDatpol6ho8G+QJP5ygcJd3VmW9EHfSK12EEWdnkc25Nhh/8KErDf7myLK4OLIc9rF67bmQAxlGwEr3HuuYL/Pu4ecFzUFxDTSUD+nS2qRayi6dM+wonfG4D6Jc0ICxXkEZEfWFLBK71lJPYNBKBbTcvtx57EftSJhdifNm9Dw1xo66VdwhJyzb79SK2AwPt8su//r7RtcQ44VGZp6ZkO695oAPya6AIePimngmeeP3vokqVV4F6TEDMtwRRbw2BDQXW3lqSbSZp+8Ce9BxO+VUaoajMc1ipCWfz/BYJk2aKCL0mu0KeXAC4V1L3gazpcmDono0lnjLTCkEgaWaHsCY1zBiidtcz1shQ1n5v+vpsbEPl/lAEAo8kMzA6gzJ3H/AF1oJbrpQWVu+blrL6f047oEFhynUtZFI/+tAK5pMLUICUqReW3SNIKudNzl7pL3wTtXYmhinV6XPsS9JtyXisY0bybxoi3zILZb2Ex6lDtN+Ep0IzS2rPiXkKqbtIYxQf4fCN1RAriKFujko6BI2IECtj+2H+EGQ17OZ0X5S7L/CrOLWDpVOQSNcG2kLXcw8Z+wvqJSAqQabn8xmjWMCpAcuZLs0v7si+JU4Opr8sylqaRA+xi67ydiMTTMgDnPegP3PiBHe12FPwonMRkqS6AzvfLUoXWAJOB9kceu7vqltunEa/nfUyC8kyGlgILSE/8i96X8M0dqrJl9GM/dRhmRL8HBQ+FfQmmaSvruZ0HcgbKgUELHLRpRTpq6TZJ2EJsDWZdQa4Ee2+e2AmIu9Lwq6s6fROHRMRnbnEMxWdXyDUBr5JZqh/CVzfFjdUGXukZ78bWBrrOI3yXFC+2bErce9EiGTRCLzMZpt7bX/6ppqMjN0ICGxkCjR6Aow/oe1sj80WxL0s1w/doZGvgdHjXi5kZ1kkcvTa/m/2u27J1oaqBm7O+2QeWj/YirWrkFkJ8Uip+yVEHjdhm9hosKTnsytdYDDbohFbookFq0GdBN2+psNENilJImse1C72JMMqhUlc5xne8Ixm6312Y9gM0mxf43JQo8dv2V6qawDaD7cKliGWYO4hNxIOsQLxD9kyDP5pOGujIUKwQPejmEyZhta4Q3FdGhYZW7xQwiZkhdB3Om2oVggZs2bs1O5senbyBIA4KIYNmCipztp+l+0NikeFLt7S9zwP6ln2nzeK8WFy6FzP8EkCwj2mzrUAs9Py+z4oBshlRPoiOvZn90KtVN54/WT/J0WYnCDggoK0EJ7nG961mhUwLn/i1qGETfA4ca1m4BxmmLT2EZVAYuK/+k86Rxm1r4haRNwMNHq2Pxvvk8+EOZaHwAUpEIe//OfGVg4EeiFr45mJKXR4H6qRlGUxHTEKK9ZCUmKsC7TsFATQTZ7fM5VItUCXhfhawvmaJ09DE6O2+Vbs5gMA6FSsAzvbkG9KVUYle106ru8etLlSvX0ft7+4gyMR5mfwhgSY9yJbkILJ+55BdWetaUg8lbyDA9kO5rv8529um0A/f7kAYjSYO4o0W/f/oOv/R0i9xqw9Tgtcy1z+N6f8O8AkBuMMpVodTL/26doqSRBnMjlp8qYQGHVaiARPXDYI6b65E3ZxzrEa/N0NNhLGMew3gkhDLN36weVV7uv5nbVo2QaunWQxFrmbHG6QmgaUae+PJU1SDaUBk9ULbaPxoeOkQqfaxKTzWV6knq/zRoT/RafrnrcIsj64+N/81yyBdG0R8F1YiqDfBPiWi+oMHQ6aC/3ZTxq2aglSrVYQS49x1sXDbIJJTP8XGdukqaJzvoA0/glbv9+HAwFIuS0404kfxwMnskXihTkYW3LWnm3spx1O3oCbfVkxuYHXmItYDZ4mNqUZQKuBl3sSE0awa9aou94dVYlcaOpwQ+zJil3ndXOo8hYUXW5wLLpSlQdRXPsPMB2PukE35HltOUO4D9PtQ9bS3HAR7fKz/GX1oCbflHUXXCrBNdvp2rBmaA0hALWz9NyTQyGASgoEWx/ZR1VGQ97OPRsNcFeTZ7JD4lhP21iHUEREpc7VzogwKnCRW3G1GJMOXd0Upd3KvEzQcPO+p7MvROjQofX85sN9ZM2wPUpDdRESRUvpJxoeOffR0PF8i3noUIFtLStnjVo+Ntm+9fnmo6MXoP1aHh6daJ7PlzQyqmb+Ct1n8omM3dJPQ68HfpKpQ+87lh1ved19DjciNAbgCOVD6IjH5Zmz8+FieoIqzmbzPgL3qP1vEvjJaMQsvDZ2C6Jk1iZFKSdsT1BkFxS30htIoBiY6K7vA6Zohje8q5DxT/iaiIGso5UuL1XQMTGKHsBF2SNmKCrTpK/A+DxyA3nIECCxM7pG9yM+2n3jW+3hUDyBUKe92iQ+NgKL0sQS+CNjLYyDPYF0PgMhzbW0FkwmOgql3RXIGJt2yMgPJePxBbJfvTgDjg1PNjDCQ4we6NkDe3kfwylHsTrTYDW7xIvkfgg+Io/2VQOk5FzyAYHG18vWyn7ppC0YYgteqcSdKh6JL8bjHjjSGq5R61gfaYBsVOoopm+WzTsivoexehRz/kD0Z+nwFFsoOy2XteNyKZq7su2AnvQA8rwkDiuFkMWfCqJXppvMER8UXdohbtS3AhjJ5Qs/q/x5wpLKXnN2Q9s2spjk/FqZn3HSFnBWjKRECN1xbI2Trmfrn1vhqreXG9ERGP0kWJUArKKsYdLdzNeX7cXVrGaVOQtvyGDFcon7or0Q21Gb4m5SA9w9LkF9l6224PC/eDQUW2wYy4mEvxXFE4GVGbid910kERFOTYCIc7ksftuejODDdR8YULx0yVtahxs/nkuU217Fm59BtJKzCaOT6dXhjnd4VvVGTsblMxbVMzrPrWTcloOJfJd8bU7o3gciIavkGA7UgXRaUunyQrEfoVXasjTqyCDaPcrkd51QclkQFygXzJk1yKHpEXKiZr+0aQK4lLme7aYKz0jb7J5YL5oDNpl8vAp8zsjf29yvPB5dBka9juseikHoqgt8W920O1eE2Vrjyq3azxv5HkDz1PAkq+QK3KgtlIKTmfbZRF9McSapuN+3FDmeATfDGGCn7jP5hcDpAi4IxouDHk91uetHiOEC+X1VZ9uogWogkXcWRcUJNG28CqbSD6oIyC0aux9YI5OT95FL8sH5xcZXQZBvX7x0xxRQkDpPPQn4Op9ZS2CAZLRQpTpRwEF7pff/CpfBfj5x68G2Npbbwk6sVR1q/R1lfEsHh9/N1Tra6mMOrALg3A8spj6MgbW7aMMmRi8xqJXlBCdioc7IpciouUHHyP2jL1IR/k34HOWxClhHMxiuz4O6umASg2NBIy1ug47uSD3Uy26QhIBLuIH4mTJnhJv+snVlLELSRR5zVabaubsV7smUVu55KpTCWEijuuk3t/afZ/8EVqkMEdnRWagapFP9x5Xwb92D0l8acvCzom14BaeJvHCwYHz2tSlOQ0NsOqghZmRMmrNNeKDpu6BXJtpd+ftm5t+YGOn9wzlXBzQR90cISMYfLHLQqD1me1yO3+NftFHhgOLRtl5fpzrDw84OhjhYs9Cn9/Z2OKuh5mY8p3XXHQxcMtTfatn+UGbusYLhCa3uGqHKPquQsBVvKrrSasazv3i/fEWt4+1pH/YIaq4w6ZcwzLq9y1UfVkIJq/03EyFudVOrFDpWn1jFDFCtWfvk0J2WF7IJQ1+DjkopWcQBwdkws+7bYS+SkK+g2f2ycPQ9t61rB6GCUn8N1YvhbDimKhSvR74LkXQmfD0saJkoFD+RE7/mU4Laki9VJmyUGH1MizgNfHYLVFJ27I73r5TdF8K48vVLlHDgDwn0FoWRrom/lxQSEmMMnme03+Uy5VdE5qThRWYJ2we50lnY3+iyE036jRuV90CZQDLobpoCLTJQmWWFYUX2ebfqLrc+QLEi0JnuUPEhjOZD7MhFfD/F8mF22hg+QH4XYEdk4UMYzUIythFFGC3G28PnlT72CSDKHL07AvfPf/sxkdZkyYcIRQyYqGkasxk6vaDVZxqu07SG+NBRWUlyQMkJ7rZV4oIm4DDGk+GIqcLW3isMFkvFtzlLEja0DOivfFfBFxLoKCfRLAKZDu4Xwx0T9bnXnOIfvHLG1wq5d+ozuqae5v2nDc8XzL4L3g4fsF2Hu0xeqKuboaGwFwIuT+b1hUrsrQEJcNiDRJwUqUdOED5JVR5dogi2aGE1sHWKE8Ig0gPboQ1ULDwwXJJc0p2pRv6O2Rgu1pomBECEAE3pLFLblSBR7SdFgEkgODeod2MP4JcUwlFQXvik2sE2p6JsMzY6beWCNLcNcJt3tnz2TmjWJVuVVbERSQenm0y5Tsdn9W5DkTAxfPbDkqyOa3qaRPmRWxdNCQepWHyv07BvsbeaZDw5RPL1KKXIbdgeV31HrTJC3dumioQ/cP8WFBFjPVtVuSsp8bR6PeBZ//1Aacye9QDNHAr7H8Js/E9goFxoZ6EEOoN09WCKt4052Kek6t9KkRoSnR/AvU0eMthzSxq4Tx/hgmg3DXBmbfDFgVRULrcAwqKbTGoR+RMOss73RnVb050pOujrV2x5K+mHIceIum6m9+6a6hMUV9UwxhTJ8CeUHbmujF+WWDszqezGQYwzkK/NjPOmSy0bLXXJESYwQUVartmEt9Yoaf4Fef0gpiGAsblkGCk7cea9xctGNzOKFM7lv+OSW3u0Ozm07JRQuJ//SJBHD4+DBvx5HBxFAWlU7AcC6entpLlyBSsKBAZHnEzWWl7sgQIgOOlAkAln5Y50BkZh44DxM64xIptebLuwiiKeOOQAkn7HDl7qk2L4tPr36tKlkhBbuYLFpvCbOwSlKbXB+peN3auGNkMMYswXDUC56kHuAqKRIDWXjkwHghrJiIeKCa7uHCG5zuxigJxfmYJHwDmmPcdYndaJSq3mvRfxQEMsoe9OmeYuPWj1ptO28ljvpDeyADBGiFO7DB0VV2r7hMP9Pyiw7qgCj+oM0KUbVkswZsyDhN7LuxwKp4LCcVse/XNlTRewNLy470EdLr/wjVpD/B6Fj/+Myj/41xUCQk7vuhDRhPKpeUpg1KCCSd8H8JsCURINRRYh7v2AUWEgZjoZ7S3OCYCwqM7QWI82UIg4FWzO03EpgipMgg9BaBWyqjMBpCuUUyjmxEr5PZ4khPH+sb4euamyz2VC43zZ3TlPfu3XHObf9D2//BOJL+bBUU9QTeeD9bBsNrJDZgiBQfAMDze0Kt/loyO3poG5LlKl9IWAcbpL17NRCJbr8zU4BrSRNmKLiRhd2SiOhFE6XYPFcWuyU5XIUagWGTZ5nt609tAkFOXT3uqFX90aqk+mfqNKTfdkCIjfgHT++SzjBk8Tvg9FMWre8rvO8KAVh9Uv/WKiKyu5EFe5A83jo6CN8Kqz+avSVUu6Ru0ejaCfItRtlYq2DXRZxIGq5Tmu3JKUf7v/38buJ1tPqlAbhxXkdgMRIZNDECXTdoBp43OWBqsUuhWukUgwNEmsC0d/pOy0WzYzgB5tquzRFS/12EpKy5JVDBRE1QOtz2juTIUoKbK8IU6xh+PJg2J4lGnyFzZ9L95Z24Dw29bPMkSxJhqfekokO/HgsDKYRXxqWxzLJoRbRejUEwCU6LLQ0wNoDnnxxzV6q+ehDqlueHXW5siT7nih2txWD5aRrt7QoidR+8tLVw/08mwioeAQfFl/dEc9gm2beSRN1cQxlU7gVtTmAx1xjSEqLMV/K5Xp+AIRo65+ZhIpj5cadx3wdrGr7+PVTGQZwo6kF4GJ/lizZ+kNdLtacOKhVHdibrZp+m1I3F3BFkbwIfY4CDkUsTUpyI39cVkGGdOhrboi0fcfr5XTLwCEgWY2okEV+RVUQT/9iLmOmHNq9o1pyKb7aw1NMrwgo9KG+Jem1/t2RHfQusWFh9tQV+smJ9UUgLm3r49vJMFhQLQcfaYz7F85BUQEKIYLDdiNCtbzFKNjdlr+tgxBQq1RshAW1m6CVn64kXykNMifHTb4ZrQNtb2Hj/HWMY/bU0cEw7rJbodMHBtxN3TluwxkGfREw9YbZfRNKfVYM8r2fifeJCOSWs4U4pKXBUbxLkVcHxRHCOkF7qP300jWyV3tQiM2Kp95t7O3SZhfONi2j2e2kjeG4wpbU3eJpr8dZJ+p9vb1ALaG7Pp4S5YWzXHwYMR23zUDlUQB/MvB1vshAd8tYAHRSYB832Xjx/qaiCZyGmzcQBJ+nLuAyCED5JVSe4kGCnflXB8LVYLpEWcU6RcufiYBn/BkNAvTyXLfEbSMOkm8yaWblPC1GDy4QZXt9WVokcoTptDN32pZ7c1Ttnchj5y52JpUpSwWAsHB6DjSrjdHl87QLrvcSiyIpmZ3FX20k6CtwReSNdiqVXDQJUG4iLutxdLevpAyLgSrQZfr0iSV+6L147M4Fal4L3x6UDNVc55ufBVxZRR/exeGQlbvC2NRVdgcYoi/rFRQblodryYGUhmjepdXfExEtc6ZyIRFqXiVNx1l1Bo0ajQENconSabzjCiWdBFMLicHGIJXz8U0lanyw0gPGClsEyQEqzFKaRxNJCYETKV2lflVbt/l/bHolkJHmTGgGKqoVl3KHAJtKaoYhbeiXArbRmsN1tVx6JZdTtXxuHP77Kv1iUUNHSUZdtv2oFoabm7KofIM2pItSm80kXm8AtdFq9xNMgMiypK+fAb6EJMrAnWJXtHgWALqKie17l8eZ0gycbl3GfU+PoTGX3O33OpB2RpKYWKqQtynHWRbrWt7UTv4jCFiuSvjZlXnUAKjxJ15dBuXEhOAc4qXXjfPNqSawBIq8oSjYMqOdXJKmHeNdSTZDs5TmOQvjDJE1Cp2F3LREZ2njf9OmM1TS/qunEOdoZ3gnDgWUUDSkpayQTbmUpI7t1owOoloko2u2gPRr9BbFqsG74HHi5Ns5Z1IzjrOiqrQOi3eTx4K6klbl0QpMgKBT2Y5T6bU3opawgZSJ5QEl76uER0JMItMiEwJvsQNauNDGujpXEJAVd0ewR7DNNbu8whIuiCCvF6aqiDF5YCg0DF9DGkqZCg1RKcbvhxcoPtCa8XNoMj1xA4H+LhZ7sBMkb70ZHKbnbh17w9QnvsFEXxTve8FIwI7c6//w/afcusUenlnqprpq9WFmgN3+y25zvX2um7ewY0QXMx3fbFMy+xI4Y6WXbEgUKM9IE7gwHpJnOPsqf4cuNuDoI4T6X8K45ho+PmXPowkL25lSMM+BhhCb8G6oHdWurej33LEoZ3h1kLQE2v/i/nA6gNbWg18HmqYeYIlAdg93DrAUszvHsKpVB2GgYoDzLliPDZ9AGUN9XZnR/HYMaCVOwuY966Vpm1X4ryCRXTNT4rYzeDW7kWTFrUHDLSk7FoRNqrPFn9m9iDryWgZaJeheDzQa2YpsP0ntW6n+5LDszi00uqEc1qjBmq4Rv5sot9GLSTnYvfAtdWsr9Yi1yUzhYpTW3UTt7uEgofhuO0dH3tb5dylIKdmmoTgECWJi5thQoACZGChRshlZGtn6x6l2zlhtzm/2Yd2YUombUcjW8YcZoztD08iiaCNHbzW2lb912MF2s4MiuGt4AZX632MVnwUJ2t975t1i/WjUZQUgjveVnYaPLaqNgCM2e1kjGX6YmHlcRRW+PP4uRFTKG2LWxRNnKUteItPGP8HoujZSNnW/aP/PfuOR3QCuIYlCI+dI1XZnwT+UfalU72mcMxLWWhxMGUI+KtHICoIU0mfwNKPOPDjYaPjAizUMzK+kA6tAuk+SwT2k+ygHJyPG//1by2JupEKFJUFVsTyisnbx9XPMsD6xxBObUgeHwzozovBcbC/Y9GgBlcMAuzvVMu1zAoFW3SVf2HpPnFuYQ8vIVjKR89dst4UtLhXHdjMUPBMmd6JcM7Zlj07Tts+k2P+wR7dwYWB8CCzaJuTyG6m6rDaOuGNTVb+g0ty+onZLdPakvLtGjRBBGzfJXCZJxFw+SErWBv7ZfhTzcv4KIdA4nyCuGwD8v+SzFa5nGG8aetmPD4fAuCGc3NIs3ACTEh3ePYEg9OD+gldGbGcwSPnDHPAUSHof++cchqfe4F0aaeOAQJSArqmusrp54KwemKUctH8rKoGuQUPppefUKTsJgeXF3WjNHaDsPpFKKD4B/TjS1FWX4fHZ8gBwq6hA6BJPu50XDddCHjvA+wgtsgAyHVX0/Ut3fhMoeUusFgGtu0CWCS7O6nsIIkwDYlPl7QgZ2PJg0OKs+l2iqNg0cPX3jDNRYd5OiGB3nkxV7+z0mJ3dq67AbCey/OCSrEwc81C/bN9Vt/u4wk92BzsuhVa/5yfj+8+mkzdOwbxyYBg8JqF9VKkq1obA1cAnZ3dBuU4/3XEVDQOqCqRFqXAC2v0WNhLnOUorLv1M9SuM7mu8HEU4+UNSzNV6is1p65Jjv8pZTHKm76i0rMhE9eWXZtDxvGXZqxC3Pi1pOGxHs0XNgrQxL1+Jbr65YfaO1t0GzyOX2zLSV+tT7um4EkzbZktbUNPJm0etXnk+EIWXeJXugTLveBq4X6ZlCw/BMIf+hbs6NqDfLZTDp+Isq3UeYOuePQZCasvZeR2Hcwx+pA602Z4JkNUfrY2cNBY3QiBYZaeO2NwPkK4ysEPd0sSIPXrHzbuvuRmd6eYWLeBuzIYEdUGetyl1MHqSXLsjoLC4Kd+3XviuJPqMcZDBZi7RQnmIZ4LghTs1j4Kan4aywptGuTU4g6p8CIEsceq1GfahV1h4+t5buOc5vFu5DN4RX4/4Rl8yWfgS34I1CBAs/5FUBV9EASobyjPmWM/W6hUtq+B5MQWUa+lEOCyFGFq4tNg2iE3vMT6F5bSQUFjoR5qsPeT0T9ngGCfRcX4rxfJTuIh8iL4I9kbhsSEmM4h4kyG8IMKDTn6lND+WRJ/uWpmrakGIs5kAE/8a8DRJ6ZdZqLvHifOzvqiY1lZvAmzOX0bfMoULD/7dwq8xJ4QOo3LwtEnpfuvbfewBk0LIAsNTA1X24BOpCaYknWRFruqIB4/wf3F5MZnEMYKKDcTjF4fDDTGT+V4afT4tOPVxz6T9CzxJzd5EEb/fU/uD/TP+b2RvvIi3VEVSj83TCe7DJan0pUGblzq6KwEUCxyz9BAscdBFGce8vik2N0wMMaQOe/bZSdTnOTDOTlsc4QgNRi704egn8/tWhELCjA+HssvKm1vJSjB8OTqeuIgUpZkFUEArE46ZgPq+wOQjtVGT7MnG+ZmXB/UHxoPjYcYd+cYDulndC7QKwyG2pkX85k5xyysIb3L6tODAFEagp9inAahFevNp1c5o2GiXLtqYBw+THC/E8CRnmVvpRJkLJy9yHwnVy9dS/ULXsWYv9A1T65n1lqEU7a7q8keW7xAvoVCCSdO3PcEaIQQeoGUqjCwOpihatd/R2bz6rLrtegmX8dV/F+9+ammYgeBwd3r9V5bwaUIi8gIy/WtqNLHe2Ys9aYr9aonuldUN4yJKdMXaiwm11c4oB8f9zbc02q5x0MIrT40fSkZC1NlrPmqtd0yJEKdHeYS6REbxiIDIdILhq3uoK0bzz9Sfqh92/h8Q5bO98pgvfeN5S7/7FZ+04z4v3TARaKJDCeye575ekL8iFA+EFd9fDosDr6CeaKhPcqCrcN2yOapx+GH1hyeSZukq61769CbS5Juei4wDtSDRLlJLWpi//3szwzEevk6iH/HRI0kl0bSSUH40QmUbXNgXWwhHKbiJ/HlkauEu7jeKQf2VBm43VPvElPffOciZgHWHm8WmSc/ad9NR05/QWceP28YZ/BHbYoXWPuCfncqPbNCiaKCwvlpPtJFG2mBGPXK6cAvfhGz/Bxmyfbdr79HpyDtEYYXB7p5G7FvW05P0KP/JefATNYX6vW89EOyTP8QDdGXaltPoGMvizfyeinr3Yh13/CmLXj9sfiItZkv1fwD2DIl8ORwuqH8eL/xd8JBgdPHGQRazMHN3OUGBCHMqSmqwsbTJofbKvVa/+bjfje3+fJ8W1PNik/NC7hUQeNc7JO7KNtRkwZmh+iQz0fxJoI5wDwrm56xFOypMAjHuv4xmLHzLGrwWJSQ7gntRzijPsY846z1u0W4eoSqoDtOylyYm6RtnGhHUtsS+EVJOhPptuYoq0L8H/VFwgN0zzfcPk1q4oJz+opAIoqLA7hCmLZWGF7cD1Ng4TqSZOOyV7xzzFJVP9a1tspH3ByRbdc1kPlgZEBARJ1nmTXtWLyr0uezCdQJ8I5WRXmXMpKwfRZvPRfH5Qo2LEgJI+KkGxlAXt9lDjrvpiadxHmjlpQgZBi4B9DXAsPVCQXJQ/Fvcy8Xny8m1pHmAhc7sguaH62UFOwfgyAZniP48N16UUecoE5K424YFi11Kyx4YelUCdK2EzMhPbWxBFAOixGxYwSdhxnhZmSiUEO2uhh+7INdvW9oKJJGXmNjwM/8GHoxJXqUfr6hs8BlVQUiZsOKzEcAIqXmRA85GFSgSG+KeQbNSGVsqRe8W8lRtNLO5xjDBmNAmZwj5fjAtsIXI8KnSkqH2hYFED1ItF+y8ktM/3suo475vcYCJdXPPgCLpYrgvPW7QNKiksT18tPxSyiGFlyRq9rWadsYbCUaZXnniRDtxMadT9sdekcyvFkS3CpzZ1eE3NBtiTDw+8VdYJaMRauGbBV2jLq7s8DNkyF14Jxjd7PLluhtnAraXcj3f554ozpsppOl8Q1fmgb8lTdywAfck8P+jC0BxDNpp0e+XaWNwN8gi3T57oqeAfireKxGCCIQe4XNRMCfqFsd/p3esMksPYt2yR0k9ZA3wngOJ1BqMTHsJWDB76CU2xS4rxOWW0TSQlo8uT1DpzcmwYaK3sOCLnvPMVxRtWEFT6l0XSri4wfj+ImySa4yiWYMiw/kVm2kZ6+F9w46akLPC59tdZXfQRzU/Tl8L7nD5a9vjcdJ23jm1IsoF0DEuqBQLXCQtfcDvd3Fk6mPPN1QE5Hp6i+OR1lR5lrMcc00cJZs2g89Ona3V+8rdNAWcTqbrftDM332so+/wYjxss+3ubHAqIY9+kEUfv87c32nrDT9cDAwqjv6UOI0oiI5dj7P9C1YdvLCjnM5i0YKCUAjQizAGX9pJ/DhjBl8GvIqmiDQKdS1JcjFM718B/BtkLcSxJBEcz7ItS6eKtk7u30/uE09qRrttwSRu0Z0nc8EA1Ub20YGaV56xH6r1qrgHXdCdxModpmIaYWudP+iezLkyEAmys9f9ECnbBs29waHJfMA9PtVaJldesiKGn96PLgS7eS4UCJez1UyjBBd73RjPH6OBcW1bmXSVeoe4hyjUDT+f+P3cMAyKUotGyOxGtWNINkSdlG8buXB5WChQlXUM4DveCcwChIHwv8T1ZuYUfeiZ11I4zD4flliNOjSF9kc2S6yR/J/qV3oH7u9YUqf6kaNLDzVX01Y7bnnDMJiKr9XJhDF8RMhlpy1EaXTb4FtqcaB5ymlr7kUX3kw8e1ZZjSi1951C5eT/g+z4SzwWl2MgLjRflCBf/iDfGbe7GtVRZvxYG31vr3r3HuEp0m0FWclcgXhTyfOQqfcsyqYfHj7EmZg6nfruc9H9YaWJeyKpU5rHg7jH1FXgPk4CxbU8YOkBMbfwKLMy2E+LrrPJjEsn4vvCll0d7ZNOkuMPdhjEdZC+aFVdaQS6zDaAoWYUB407c2nEonI/MKDqtD0cSt5O4E0jGosuGbiLgMm+FD77Bv5Mu55+NT121Q9QA44FP5EHKpZqb0LmMUM4RjuwKlw0R+BPjugk+n8DpVCg9WIcZ5yukn/UHU/VDk2egC3iqi20c7wOyosYVm/+1ODJL3YNpnSsgG4vhI/MyfQslMo2XHBELzOy5mSmhjWHAw5xpos2extU67oupyjaBAw0GjTU3Yrs+PTExrdpTuOAYC4nDZObMGBOMZbsYUsnaqobhwZg8N9gGkyBoLsRyunXdwSK5QFBXM5CtZRmd7RmsQWsuQfxnKSVp1bod5xItjS1fxvxw4b5n/dBstsi1cqh+pV2X+ebNuH65G+qsOdMYCIumAtfdy/kyZB2CefKG9HsH4BrKKg0K+6wgtYbXuoxp3RZBcpBi602vL+IjcKsEbKl7biXbqrJoJWkjHBvPYEXRnIZLrfxM+IF9afVFVC1bJQyT6Wu471Sj+IP4hyuwa6zJSYbc7NYHdjxFL9hhPBoh1UtTlpZ+A+Sg2MKAf+6Ui0ilGvq50/mnSkmWsoUd+ioFfbjPdjQtM31ckoaowJxva+bK/2uD4S0QT36hsk3gWw+vbuNBiHGiU1zG/FVpae5WVcRjDd6tPWJ3bre9mKFkhBLjbBfZP2EehmvtuKqwfy2VNnh14xs8eu3XWLaJqVgGIuaPmtJGw+P0TLniA6iOn39gdeR0YM9oALEbuBLaKomw1rClrpA4cU1YZu1HQ9um6GyNxWeN6AJ+TLn3ADquMAN33QaUJ9MuJYyvEAyaVeFpJKgjIKczV1NpfvUP5W2WQbRTq1tLiB5xStxv7Rcc4cFK9v/2wYg6AwV+0rj7hVK4cE7oJ9wwQwNKGhTrRlziApEgteb3GzY112FMlibNCOrlFgYtgbz8NTh3iR5+OvVzBmtzqKyczqAAad6afj32gyO5zES0cqaA3wcJJoTt6aXW8Dieg2uXduR30aI4Ex2BHv+ltYm4C5Igi1c8ziam6rYD9BXT/uIVelfigijjYrKg5Bly7nfho05EJ4kkqeDgXRBFGjLGKgn+XNNg451GXksFFv6ONGwAwk5yleQZXO/6oL1QbWVVE9iFsAF0+Z5g9+rNrbEXFPmi2n8NqSeN/rtE85MseNrl5vWrjCu7d9yG1kMT9gnUAL5kEj3tGredRJ8Snbnc/i8T0qdFvHGx9UCc/c2ye+Uu9X37NHXZbRIOMNawylUwVTiIJO3DiYwhZaWoX1sHOar5UpUGSdqb/Zu/U/bjuLQWBGoegLaabzk8FUnZGz0FK7N3SZOw2Hw5jPOQbxIzKOSLCYAVbFVIASUVKrbQZNv+SmcQ3DvuqBv4yrIAYtglCSGEZPAxtVoIfPhOno2egF73Zrh7F3YKHk0QjkgGFJ5Dya8JJWDabjcW84pysWP0zfF0+CIDyORzG55cSDvEHMqB/5LJ39XTcc2gIJ0cIJTAz+g9qdDRj4GYJYJfcNfT/ekjeTwoJq2Jnwb7vFBbVfbOFILrIJV0lv6fLN0xCphlkjTIVa+oRu5am3OBDoI148+x+t3EQEw9mKOQGctfPla8qBQg/NqzB5l0Rd1zBY56r0XKbVHzGbrWjxBh+zEl5GRQSa/t6XnTRY25PYcDfbkGheiAj1CixGrZsYKLogrJMsWOt2pfCNGQxy8+lW6wsZRPFDl6UgnwLSMqzD9XDSGZ8pffLNafFGsjHSaua+NUUIw1FDc8o99ol+W+NQJhujL9zWr/l4TZz+CgYRMphFRuKHVm0xn1rqYpBeJr64bZB2/vyw82qH09Qp8ONn9dHkf1aH02CXvc3KB+ZjW77Ph/n7I5PAuAeO5IWo+/5a95ipuUZl5mteO9HARB6xTXVhNQzLZK46iEXE1DUESNfmZmW4xSkG9v2l0rBlPZx/YlmYXqHGTWhy1WFome+rVT+jiHJrfszQZiG6yO7KX89SbasnPR7AAuAfEAEL4X+QAGrSLJmuNOLxTLqh1L1fB1nR9/+qUjGk927Vxc4M+satM7MJoN3jBJjs+LtHgZyMiNE7ge+T9XGeWPEQfSEhWZCf1oUayPrDISivUZBmhXLlm1rvDjTQbqgdHq8bUjiGrtwLhx68W48Y8HOC+pC/NZ3iU0uB32ybEcif36YtGN8OwhqonWF1572q/0TQ5+CnrwgUR3HQIe97cBpuRHrLNsi9zwU66h4+FIMOupO3+0Bfy2wYKc/4bAhSBzxRBxN8X2d9uBlq9zIYzIlauR7Wn8R/qEgEgZisY3AixPxY/K7dAycYk2ERNDg70tiMmyINmEzJ4YGXLSUw56hygRaCD2z6H/+cP2nDF5GrFm4pDPWN+EJft39UwnLbGM8wrN8zY3+JyKUfeeFRR3aHg+rHcvF58Jv3ZaHa0DZPoCzE9DmxVYfDOvm38oetyTkGVHF1HH3PL/Kzkp/z71K0lwZFBnQ2FZPKNSqjIxK4LqBamtNwEvTHZXedN2ot5VpHqn56vUXCd5R0JczhZ1Bwk8q0lqm8LMwvsJozxdNwzUx+jMNcqj3/JQRs/CVkKonYl86fdNl2vF3O4BqGorH50FTfrggaf1SEGu3i51QQMMJTUk13iTManxVmPKn+1T03SBvVj6/3pSA80GxAYegF3Py8/0tYcPgaEVb59+DnQ534rN4sAlYJ3jri4TQYVXV9HABP+Hk1FH8+YuK7nc+9qbsWKtESsVRJMvY7c4IJIQJQ6vJSk7n3G27v6xzU792g6UQIkVCQ/VYmo0QmExbubzuE8ZDjd3T5bhvmneJULnlTz5rDMiR1QRtJ0C5rusXkHXSpBPwaRUBihChMa1ul3hgX5kq6pxkJbMRtTp2jrGU8g92EuFEcYwTbqhoX4R563mGZhsMZpwUboJSJwxNnoBMclRuA9ug13N6BPeg76N8tPhBQ7pBn4PMHu1iZMJBj58iR2PYFa/h3jvArn0fmXFoHXS49FPlhw71UGKWvN+P4z0z0arhNHix/HqgTiE6n+o260SqCp7uTKW8BlpaXygCgQzx+tlCJhyBiAIhfpZsvoXX1MHKIyRDcj6FVDEmuio/PdZKgOnrjv7v6WdBLUi/aWuKpdmFehu0gteX/+MGNjABry09F/8K55+FVHwrnR7X6kpSXSpahQA/tIiV4Ivq0AK3y8XqRnxFZxjmhyDrZlyRsLdQ24Ht4MCvlOHD6miPCFoPOeG1J3P+K4j960Nay3c1LIZKXO3DMygn+N5HKQFjWcCSY1s1E9ggjnq4maTj+7Dym8yH0gtQof4c+6gWTTvMkYOk6DXZZvwGwuLrhbl5E8+TxRiydQZodthQdgzOZrV8/9c33uAcfS8vS5y8zbSOIZxjfB9lJ0JZImFlZOvcpR2xBuV/nvmlIE5f3YJGQNypTikbrPpbfmwrcxtaqSIN0IWBR/H6BgJv7YGgGX6EMHD/OLXnh8NDIW3i3NS1KhREjdJe718Kl2vO0ZHAA0wWEw+O/rc1KJRMQDUbQfjYB+DIqGlYJBv2b2kq1M8Kv48KssRR3D5RxseEdwmNv/eLG9WbyHGYjyHuEZLyWFo2lxqulWAJx0MzIVbpMt68L0Op88f+sLAVpwzcLSrnQc2QLjFg1UyuThs/Ch0CZemnGjWsDs8+gVDLDSN/FICFTvRVoZFiY/vvG6Q+fALm6eomhW5tlomNOZZEOQhga02GVU8btJTZpLy4266iP9YyuOA40eWMzo4hds0KNbvHQnKs44tKRglfHqEa3A75CrWNfR/2O3eCx6qilMKoRQyxq/y0mO0L03ACmHTO9fRTAXn9U9NHLGp25C+eaiRHA53iBl8KzvEPiMtloneR7Yj+m+uATirVTFdJqJPdqGoizxxe/I0SE3HOmoA6htjEFCvWwrrjpQ54bcVg/miU+yqd/eP4ougUWP/cb+/MFNkCx92W06mng2/Y3YOZz7yaGbDtVXvTkR2cL34pD7/P25LzRWX/WaScOGj29FM2kySn4KUZLvhJT61qJnBp0cEH9hC3oMWDpikDfi5/qOztOZ3Hl95wwdw8CY6ouwCbynifFE+zw3mwjZIl99uXV+xPN+Elh6MlJcdMH3p98bMl3ok16ymUhLUTMCAvbZtHOYM3aJlPSaJ5cmHia1C3nEx15v3l2ifk4NBKbTC7joNqbl3ibinBuJ5EN4bTYtvoOAvd0ZiTTEvn3mPUBZ/wMO9aoqes147mBI0DzdyLow1Dwn2/sJDRMabJ4sqLcvoieg1Lw9EzObD1ZE1TOObFcy195vjQL8P0ulD0BnPC383hhCFj+CKDHRU8EamnV9lmT77kbNPpF02lQq+Q+5aHwSO2ZjdF74jle209Cw2xtrpaurUmxN19/vOwlPpze+5YKibrBW5/wCDTbymR8A/vdGDn1WMvk0Y0k5Qp2zUjSccjZfzTdzZ8M/G3rMHLI1jE/ztPA1412buBDw2Sna67enwyaUoO3RAoZvE4rDPjybQiA9ZLPORe+u1w26VpvbOX0r3ss1YxKq7wZFaDtyhEqhqCF/aXxFht3d6HbmuXkUSLN54vepOPwo12fVU5/O0eO2iLj5Xz8uTTkJMHVPR5CohbbouTpVvjYmYCLtzJWQ8wGBizEC2xtWZ0PKNhH1BJOZJuc2On88VI2wbB7cAftPmTBPAPEy/+thc6MjmoHTFCYVb4ICQlb4CDWNJGnsmBUhmnmB+1P5dENjK6iWGYHVUTSOFxI1KSb3gm50j5h3xgUEElL03MJU/YhzjonEvkyByeW2CtqKzHs2+kD5mAp9rB3XRmsohEpPeZkBmQAroDIbE3jN8j6QOTb0fddpa7n+cXwzCGPw1cz/OhZZryCNqEyhwgnIu10qDbDDFI0Jnz9A3jIcRzpvw8KuCCAH7x3f2k4vtaB6VKr0A2O1uZRC7uyzh2csKFzqfEpbKIHVioBcAfsM7VGeV2wMQKwTgHPJ0aJsBryjG++jy6yRXcosnZYEvu3bX6Ygsd8O6uHCOzsM58w2wbJibWZbKxacroarcHbF236qSO/djnC3XtmJwJoMDK/zZuyyjPeHMrH8t0O67csqLQh9tAT83kJao9B1xCh5TIoorHjBZQFmmfAW97NK2cA3oIoQOnFvVnqmQNBVf5zNLyFwQ3IOwSOLNdUpuAm/U0jMNM81x4LxUDExZibc669l8GdjNFgfDyLvTsDTcVVImng1kahW6lRILKYyBtr81lVCmOeHU/jDRdcgLjObZM3KG4vZ2fiB303eUkqYvxGEIDVSGgJjqCPOR2DZFZ+YDbEnDQVlszFPdGCzzWqMySsDENag0Bl9g+CwZAHhgx91ILq/s7sdrtjHRMS45rYMV8TQ9yMmcpc1JPFvj/Pgnm/YIAnSFaNWPtanyKIsM+NikbfEWhYrT2v0/qfAYqN2LEKKjxTlwtrD8VdRrvL07wKbeg+XavbVUCLOmfxXL2tRN970xiQsAlVwinWDrWTMEiIlTsM2uGOZloWpPlHUVbDaE+n7ZhI62YBRqI1HwButmIb3BuIfXf3T/Xa4ffKp9GCPqLF4gy/tD5kqcmz5B+Of+s0DEJEJbGh72jIFLskSovW7yzJyJBHta9S04Sev8hywPAkPcGHs0L889PcxLq8Dh62m+gZuzTU6/RBQqPNHVjovDteVl8/p016OoNKBjet55pJ67SuHyr7uVkHmj6vTNCV6/I61pXqtE7rZuugi+vm66BL66Cr182PyTrC4i5Vvrt++NV+Zu5a8VzFsp9vAKIFAf51U/pedpXLizfitn3e0H2qeDGYRyJblm9Jxa/7rk9XNVbTFNe656QEL7w8pZunKYaZwZboKTRyqsXhHzRqy3kigigNeZvNqU9qV2+KoMZb8cWSAGcTzFkPIUzfk9Oeg0EPNvak5k4XjH7tG/wd3hx+1bO2L1goji0CSKXz+oMaZfxjk1s40TzFGOPTFQWTaNWYRAgPzJiIIqA5PhtTFtEmnoURI1OtB1Vmkz7AFoGvOtJFuAZ3xbiyLHwq7oTRfkDqTosqN00b8KG6qcGRAPKso6CWvMHndYg+Lw15JDx0r1cJZdWX0xSRaoGREdYks4t1qEPZJQSIyD7+0FAdRW/XUWoq2Zq1BSeGG9iXiim7Qhh32eqnfSGLViuY74WM6OhUL4CCj7X8qfGJVwD6Sg2af9yVdViZdkty3K0W080KQ/doSSccJynKcevGQTZ1TjTHvwcU4jBKtvfpyyi3wHste0jM9W5HS74ZhxU4Nmkznl/NO23LCMq+VE9RUQbAjf7k+6twJ8ZjYR/pSoF9ezgY+TYLKi5o8PTYahqXZtEEoDvZENwTX9P9I0jKE8Ww5IMNOVLHXCo1NyUQw68FKPw+BSKUM7ixQRx69Ek9zqFwPjijpHoYMbEvrIqyiXypLIs/Pk2qBcwswEq/D+s6FE3NAzwI/5gMatgPpKwNe8RwPTEGgb88/4XQO8KEscAIuh8+P8AxkTxlY9SAhc+OB0F/H2jhF/TqIDM7UZUi2ZwnQ1GQ7p9MVH53bI926oyzIz/ICSz/5XhntDguIBh0WhJaneKAUWTIKoDav3RDQW2lPe/2vmUUVSZ+7VotP3wjFIeSKrCtmBgI3471eQ33T3Ti28X4NYGjdpznQXef4SGyPmC/H5d9FlBkfbbLdkJOKzLbnSHNij9WITFk+oDyA0kh7DGDZVf2LTJp7hi+ijv7Wsq5KR8zs7dTftfaP2DvAS4YS8iVMg8PskYjLg0ASOsQSv4yhquUBGTNvpXsxuvowRD+KrUHVn4cwWP9zPbL4aPT9LwPqYuuCSBm3hQDbv1+Pum79zA9RxPerYrwJJq9sSXswJbPt9vkKflb7QZgQpTd3bNbXutvPWWbLw3PaSIP3R60GRAH9WSX24ACVw07m/FoH2K9A3BJC3Ihs7ew+LdL95RSQOFVc8ezlMx522LwEkSv+aa6zOY01i+VHY8y6t5RTO19spIPWSd/gMNPCZjQNn2P61bImN9c9ZeOMDwJw99F7ok2fXVZgUw24lpw30WxbMqh9MEhPdENyErPLNqy+bCNx4Q3NiACc95phIDIjdN7WB/TSOX0WUCrM3PW1T3ixw+OB3m2PJr0NQlW9SW68rXyzv9+JW8JWi9eyo178cozctv9eSfoNwmxcKgPWx/K7w1/8TPyFrLDpbr9sQ/IWs/eInMa3eoXDyXI65RzoTHtuwZWvMPNEeUBaHnZiwY2IBEJHCtCTgYlPkC8SHnhX9oZAf1hRqNHH/GP/nUn1lQ/CInYW2VpPA04lF1sS5T/5mCiN3MLb264oks/fSpEs9XHXhCWXscen1RL05in23Kguki5OTactmgZK19olCgu7pMPlzE4EzFnrJeIzL8rFG7tfpuHTfoTY7dRvDuBaRiGvytmRkFxD8EGscpkoylHwpgIgHFeHv3l3vB53ZisKfl1dW07einzHKtU8KhdcPRSKTPQTgG8lIzMBGLgeSvODMU0pAgg53eXgbZcaE5sL65O7e5CGVzdYTzAMYvA1q1PzB8whpm+K0DjGS/eB88/XmFY6hqVp7UYY1Tvwr1FlAdbD/D7KMH41bvObsHbTLeoPZVll+Y4iTlwNv7pbUChsy3v0z7d39b4VDrTT7keIlnd9k7XEcYhr8L7ZhqKiMwqpaaORN3cutyHOFu8/wo7pNHsSHRMvjhztfxjXsn+UYb0+v/L9F8F00L32wuSvAiQuM3zk6xtycE2er676JKjIPy4euvFF2ji1nwm2lEa/gtlwRXW71ugHRN8F/otYqc7zHyMxT30ft9S+nCy8PtU2cpXVn8xG3w6/ddnEwkBWcWIHqY+dOlfafXy1SBfyedZbXl4WtehC6wwLrX1EEHoldhpk6Ko4cbmcudV+EHV/v0iEBtt4PgYfyASTN3AuIJn40L28CRo/0qDu0DBsGOwFu3ECWekFA8dIVNuNJCGFbXjVZeQe0EPZKwbhC4VEecBVdQNS/WujH16ZKlmfuRK0eNIt6LF2kOon1927itD1tnjsXF27jh0PoOCXvnXXTSLbwGHFeVb2l1/nbtQy3u606SGMWHjdlw79A78Nk7ph6dQUVxivp082RuhNpGj48Sgmdxw0vliTvUE9zambDaDMszCDxP50U43YMylFvq+OIEcjwYQvrlynoJT96MAzv1LPCR6o4/e1QkWXK6nwvn7jPi3oW5nuQ261ZND+s/1lVhkqKvfE1J0PJr43sdyiNBaMbpDeGuApkXcxnTiwtDv4t8fATGN1Gj/xA5cx38Ss+9HdiFt2XVvJv/QD/d/fT+19Q9Js9fY+FmCIhqPyZHuRr7/+/vh/tg34xctmMUZD2PPxIk9+X50qi9OzcqRwYTJCdHC8EuKlBad1s/3jgFmEddI9JC1Z4buh8r498ZzuyL3fbgJQny596IA48ECu3+pcg2tmZ+nWWtmlA8uZkhhw+5L/Avsy02/UZA2DjPrKRClYpd3Fz7yZTpwgs6fkcJZld9fOP70Ne0VM5jkdFz+4t95Rv8jP3vUAw8eWMV5c5CUpbs8beQfSJMK1Sv0Agbg8RoRIXyiEEqeqXMz5LkqiZMcXxe/iGLHTeDAJl85I5OOyHCCKZZWDloU/BH6p+ff+X/d2Pl2NAUHRwx/uC0Kmsvi78OFo9UbXiGRTMRoIMAgAubfot9Z3/7Isz7w5I/4A4eIRLiECTHp/3nsBbEs8iMmc3HlvUxWLymX717+NntbY53kkjUsSAgbKmo0bNM9gGdUwFEb6vg47pEyLuIRI2QdKHuBMp42wFjCmh17L2WA0FEfpl72gJ2cU3j6h4EAG0ICrpHQbDjF7o0/VTgGWGIdsAxtrOyLRnQh0CwhvURPXTG83YLn67HHk0v24qV76FUY+s0zTKQhkJDUnYPjxRu+rQ1C9xteSk+RytmHwdCg3mbVaRfsB3SvMVowcRlIBxrtb5jeF11Eiy9Fpi/wveGyQY6/dV9d4gOgNjx6q+ktDo8TFWNPr1MC2OE9VS5Dvby+LP6SJV4+v6/KvV/71iId378/QWGnYKKaYAVu+SscwinkkBN+D9OpvQElEiwZyeOjUTsdd/0Plk3v2d/7tIMuHcbcpX/uDQpYuISVWbT03BDed63ev0R51OrT4vqtw9DbFPOiqbZtU2HZKqOGhAiF7WqpKtci36/PeyUUsFRK6uoAqZgiMFRfckFeYQds9vbbx9y1/CIM1i9z5dhqywhA+XpnUzzd4jFzNV41/kx7HRdm0Yh11VEJtK9t4Gi6gVb+GxUnXut+KBprVj7mfwd0qTU6j6tLoqK+bAjMvh9Nt5j2r3dBmNZlS63Fd0eKkp0Xtfc0b8kIHPGbdNjfgBoxBUL52uB5DGJDR4xdiORrOherA6OV6grVcS/2+feMP7wF93q2+7rGXClDG71NNjA0hcg420Eq0JLrOARKcN/+SXh+oOvRf5FSJstizpYiJmYUicbwZvPJNRw/0Qy/1GQnYyEuWmX4mgZujPNFC/lnH35r92vtHtb+wRqbsthfujcE4fnh2CHahJSmhJry0GpT4BJiT44q77+fSIQ1sxH9uO61GR7KlmKNS4TqTuyMHejkJZ+W5x5ntdv37L64y3iKXXHakmON7oZJLxoAYoeOD49dKHaQuNV/YNE8Iq+dzHfkGJ51pw856r3icQck+t4IJVGgYC7naWCPib3NZJBjtmDnOWIMUCwDbm62ak6QRWjt+xKa9dd16GD7o+Na3s2QD64+mM73w3RwCMhqZhDCexBzXtUY4eva9//IC/XFP7Z/qTjqcc0qEKvKKKX4MtsjXSW/eetVWA7xhylsHc0rGQtVBsToORgTs0r3xlX+UE6s9j9hg1++Kjc++ewHIrlT0f6wMynH3UfvB94FazoWXAF7o6LjjkY4lx7rydi0Egy2tmVVHQa5bhn/Q1TzW0RkAUi0ZxXUAlf3M8g4tBBhN+v9jV8f7IfQdZ2heOuVFy0Lj0ZCH6aAf7sV/ZHcH1i+HeicxLOW/uCGoVPu1JS/AYC7mcp2WvE0IWJRFU4BKex4ckNbtSvMdjD/067RdfB0MRo6HMrlK9z9k41s5d453PxWLETCt/ByRm9p+qKysOm/tatxvb5UCtsW+xQirta2F7bH2DrsDmYuiMTVMc0FXcHTlGCSszbRNtAEx4pNPP5iIt20VlG22UK5aHIPdxhGwAUNlmV8YsqUX5IGhJ3YQp8P/9JftoMgqJJUYxFi7hQ5t86VPfa6vv/mmW2+nP59tfO/u5zwwM0s6QXVE0Ub1/1DGL/AC6J5HroxOmFi1kFFsEqTroUmseW5SXcLAtOAa9s0jUbLv6oPR7XNMrqGZ6vw8S03trqesv1PERDhByrfgF6BLvvtA5rTa3ATrOlLQ5/TXNnvjoNsjELEMGlxagLoXHCbmVxYm5dW92LedKK8EpymOr5tnSIudi/BB+RUj5W+Tk78S+Fcw4t8w1sCi/6CLp05eR/G84EfHw50/8hXHCI2j1i94v4CAzwwgegCLKH3qwIFw2Pio0UesyKm/+D8i0Ruu+pkpEZ9S9awGO/NZFA8itNdc7b5RjfbYEjnW8sh7w/gpaAaAGT7dfFvdj9shKjSstqMgV+ONH/W28psMBzjccVlnmae0VFsuitxEDFUmYVgybpEsr4rKlu1KhurutFgOQBcXT0A+goAZC9Qf3w/pRGldHBAb1eL6Ep9WnPR80tt1DvjqJFBJuMXgASRuLh38ar3udlWAlKA0mxgDa36o4arzd6erP9yfVur3rkQ5EydM6gKDiBPMm1NWJc6i2fqn3lf/bmYoqlFdOpbcgepWVak0HjvH41sPqf3P49UUc+zqDerUUxoEK1zk4dn0JaHJSGxZOiBomsGpZQGb5M4H7p2fhgGtZ0Us/AM/val+V8YEJsWLz6PrJbky6nlg835B2ZYcBd9aRxlARuL/nVJ5VLAouoegISFjWb7LmJU+8UxP0+3bNmHU7kQ4OCsIBH4Y37yp1nA9I+Ep4uvtPs6ADXwbL+EscPGbNZYQTzGcHqjFvTaCXrs0Y9MGHtiwXEGNWI8KZEBipmIleCoXm5nK7L/dxLr3XxNs8euHQZFZFP6g4cMPBCNb+Z5hY7ExpqcPjHy785Fv6jSxouFWrowgjfNhxdtcwJcZWo+EwmGU9fS1Fo0JwfhJA5nlYW0dAv6qnd+n4H20mB/WYG20TsMVOfO7zZwPu0LDoiAUuniFfoBuMhJtWdAqPw1dX0B9NTMLCBAo4cxCxDQsBq7cADz+vJDXIA70Zj5CGyur+9rro+uEvjzgAUJI0SRCL4hNPAnlqPUK4fgd1zDJ4EK/s5eHvo9/5ugn39OUEQTKiNoErUfiLb46hx2mN8S9t9yoVXzpf4EYDArzNX8SnKymg+HRKPwV8Vgx8YKWBULsUgdrYqD+KiPVsUv+HpzulKBen8g56sStZfuSQJyFEgATNHYm+yS48Sf7Nq7oqW990YZaqqUSBVabY1mgFsBK9DfaAoXHFDb4CXXWRlqmsxCEEJxMyYrj16paNS2Dk4MzdnsZBfFntVx2nHWvzW13WnRi2f0HGQ9b3l/8b7e0T0RSOrFC06hFRZgCGV6Seh/8WhIuYiK5u7RrdDSAu765MyxSUjPlX7GxIv2ZKnhzCktP5uY4T9suKcqtBX+cTO188icScjBFFYlj0ZXN12dtUDdGoy5AVfa8y7BdsdetSu0EwW8ZmoFteNtMzZoOZ5s2VmKQO0Wgo1CTx9I6aKbvXMzF1zFsNceu4EHvCKy8sFLzDOP6F6CnX3Sf8qGvax49gJi1kUTTwSzbwRg51EXbe3dK1jsfqDF7/1zJ1IiUxVgsiCBM+7Y5aIk1ViuQUCVocYtNWiuRo6UZskja36pISUIisiyr6yYpdYocNpY4zfNpPIMZo3Tv6DB1bYUUfCSAx42lFQ0hovKGVSJu1kGYFKWyEz9W9sNByyFqbr6bzYehPFCbiZRv6DRuh0As6mEmZniTeRUryuaVvoxVozEStD5NfSEeUjNZkbaUgHs6FaxBmhcr05+DAwDlBzQMqW53VbyGs4JOLlEv9IvLic3Is0gu/ZcvZJEZdABTLIPVnDOxoeFHe4d3K/dElV/FPyrU/xfHZAXE0kflsagPITRb4esg/j0FzWLKAIAGLryFfi9G87mYo8QizEpp0uYp/k8AHkKrD5AGXEEsDhSp0BRvwGLtswVedDegNQFYTxZ22KF3PT7OCuYKBiG/zD3TQITtGplkm3rLYXYXTpk1VEgLJj0C+GFJoCyDTOUt6/16nY1koX3vvFDba0nLKxaWs/5eqt56P9/E5iDWMcewUBjibWRWT0EfPTFmxmLJEBVNGIwGWDhj44YT6sQY+mn12C1OKyYNZR+vBnMxJ+i6BsL9y6QquLmIF0D+0UnRSWsoXTFCB0PT6XoSj/O9uglhHmlIgaTAeITmEZglbaG0gGRJMVD0cLQFOtMhwVPdoE0FTWG0jUL2frnCly96ZTbrDIfVMwYSj7lf3siaasUnalaYcBjdFJxV2/6ycDaE3YikJWI6k8PuJ6Vo1Mp+tJP8SVr0UmlrLFxaKz/W4iXE/mUrggy+w6oqzAGx4F3DZqGqqqiM11DkjcPwapCDtIVJH/0NEhZMVdvemgdUfRAvxQU/eMp+PkSE8Cqi85xAvDWDhG7kyrhGRwrCzxiukCsZEz/OOmEJUulIkbHiA79EUFaaWss/fiipEhYNTGUCkdzpx9ca5AgVjVmRr+/axk4i1Ec9B3tE1TemMHCNOQaPUNF5uqGvPekoRZGU4PcD6az5r0+xfezMpufeShLQ0mSBRMTDXoCyxk7N5HTy3B4VS9jpQrAS1BajoCkyC/8WbHdNIaBZFs4sCroJSajmYuLo3R47tgu8xwqphWQlV4dAgEPYYQqm2ThHG3kNmiyAHGiheLl7NYCVctJVfhxTytd21u70OoyvDckuFzxiKqNbRtxfRSOrgc2QNG0WNllsvf7kgp8gg/J8RnsiaUtHIa3q/lSpD3nd9qm9Y47W4SOd/o9AM31cglMup7fKJCcdyxClATbu4wPZ7aDZWI7QcmlB2v62MZnkdTy1Toe5bTwFyJ+yuInLxmGRBT8X0yWakRjPi7UmhJD+GcLDXTq/wgUVXyEHFV+hJIni750j0EvNAMqDXwNmtDYInpZB55BA5/opI+jawtAbk7d9V/ptusUz9h3nTLpwldnLaoOI1YT9og2WsdOfBNTtDZRbVPTKcED1Ojukdph8KLbeJ8LamNPLPIEPTdhXAYrUFMKNMWfePh2mirMwtSETX7TvcBX2mO9axK66U2DtSs6SE0zFtIkoxqY6ZB2CK2/2kbj4DjbxXIQ4a1i7Og6Ux7R4OEG7cDcEyBqjWTakaZzUjzzkcRi3F2jEkMo38sFdNExm/La5y2VKVr3TAIB+i+LIlowzgNZPtE3tWK0LlFbdBfj9AitXXl/ht0jt//7fUK3dFF0mlbgAJuZ/x8px3W/XwkaoN3v7Oefh8zg2ARKcjxOKJpxxXpDRqy8TR3rIQsit1OkHAMLggiGGUpmGv9WwG3H1sMrEHAXcDI+C1t7mQJayUaWBBq6S7YqAgKXGSiE7M7nAlTd0wibYd/vAaz1+kYVzXBQIfNKr5c4kVVSTiNBpgqb8dBK0YNmWBxnydx6oaOKZjiBKuXOSjGvgMYpJUx1ki2eOAvWYFNanQxtgNdQhMp/ZkpVAY1Qg3MHUd5OlFy91mfhSjYB1tU1OYQwQfrBP7GEQowtTAJuhVkWeDtO28H8GSmnxYC9pFZHNTU6Mo3yB6p7TN+l3kDNJx9o5DGDuosoI+GTGP5bBiQGXYZz/1ezmfQS8LAmsm0rTLWjNYNnHiEYfSzeN7zJXyd4QOMmQX7P/zL7uzXzdhw9heFGfQb9fBYGflwDTOdLPA2yRs0j/vai7qfJIvNa/LOwQo3oEmgt5pAfhhzcgJXcgZBEhrrAw/AY4JBRhv7NQNxJa1J7AlIY64P0bTuzw4PubqA/3xlQuTDTbKsuzw2Zyx3h3pIlf51buheocD60nZykDSqA8Qz3K+atDuIsxoDhLdr4NjlzMafyzUstIS5duHIYG1r6mYfCnBEb0NtW2GeERSQoxAQcCIhgBxmNCEr9EQHuGNDDIPwWxkwPIzY75mSXw/3OKpRPexL9UCxtcGn/r7VLzXRn+tW5/M+9EKw2/ni3zbst28qm7DDvDOR2KzOO/xEbU3kXbWLU1q25VJ+vMgLznXiBNW5JjrjwbOderbCfr/AZbCV+w/9zwawESgTjukjeLmtW1+rLQ8Ozk0ALy3xmoTPJJ7OKAS1gN7nIcQoTUl9ovlEnmYMLXxTdPIE8BtuE3pM8/6Y+abM7PBFcCQor7M0+/ZlKpbzuLBJlM82qqIA8DAMPfCoKA2mRkD0WV8x+w0kFaa95+MwcuANrg/YzREN8AKFnEy5SX+RvgvYv4jh4M7bPXK9si+PGjHMOGvCfQzCH8qI83H4Vd8j4iuCHcQctcwpRjuhf7xpBAfBizjSwoGMvI+ewSeBfG2nvUPtFIfCTIRqotin9P7COiGlYF8ZTfmys/z8mQIba8n3r+bnuLcKi2Uhb/wqyhAQ2t2AOyn2mJNe+y9sC5n3AcqbFq+I7emO1zvgJ4935yf6EmJKJBAjKwqzuFZzBvzD6dX+mPc1LqnbM7Jm5fC6lVJz0tvK9IJjFMzw5OjNADPD4PgZi+k42OjfqgI8fk1UjWIM5BoF/hCDsSTllEKy2fLvuvkn2bY7cwflUxDCgHoY9XYrR+mZj5xMQQNJiVGDkr4E3vkUGVcylHN4MDqn3hnnNXjLqblb+CN9J3bg700aNOOmpERohsXH+952S9W3ITZ0b/tmn/uqL6W9gudq2i3PPDMn+RxV03OYha8FTSAVv0A2xteibQV54Rw3zHnoNJaJI3ZXFgWitBVPQEBhWy3DMF3QYMd3YZUV+hfT1AWlrUxF40LWmihkplm2e73dEeC4qizkZJQg/NN4aLKyk4T/KKelbjIxwOflAgt8TNUvsbvgpeHAD/pNRwvcDRnjYUF6RdfDleRdiQGcrlgBODIjfrm7hnPr/jY+XKuE6w/Do+JhRPzy1hir0BqPOwgFVtm9Ms+Rh2FW24R77WCpcz+/RVsHndxCbZf58j7sopFxoMWpKkA+ZhG7C5Lo9eGzsGMX/v+eIEUx+1pP39vE9Ds0sQ5qyA7GknoECFZkXu+NzLAJkrpAI9uOJdIv8u7BWjOfuY7b10XFbASzO1NtYHIFZ5rE4TOBZ+fmdVW9uGSYY+pCRarYrhL/5g4bLdpNFleWLUnp42+0G/KUQ5KfeYV0lvwirR6sxzE1ZQS8AwpbtQ2b9p1VJ6UMx9W5OfLhA/oaTdt2RapFZ9YEWv0Spj7J4Zt+GgclF3xtajL3mpSFluxTcD0yUIdcYfm14C0jc8iKyerK7stQtPvlCog8NhgN8D+sBHdCWwksKwVHAVanFAERHWisg4GPkHbkulZYjYzhMZ/ZwyR+VptZEPNwhc0e9YE5vOD8IHUeBzlBEOT7Ix474cwMKS0gcJ3EAdT4HCrGWWbxxZfbqnjPMN7vtEpXa11c9a6D0Ce/QsJYLao5qj8/jZIv9vvFq/F678Zi1R8nPtiKqyagRkdAyx2KRdyodNjNQcQlQX5gDIKI70Esn189S1PUftyY/eyZENREJUdu0WuqcSPConGkLZerdTx65iX3Df9XmNVbvLQ+x0Zz0WehGqtVudRzM4bOf8KgjOzjBv5PozW9seaV/Zee/n8qU3sprwBezLecVK4tE6RQmPUg0DWinnJregn9vbXw/iU8SEnvV32mZPjOOw9BZ6WxHy1CEcIEPaie+3JA2zAp+gBSJrC3JYwNCabNCxq7FJkqSARoKULUCjWvphBfA7Sg7CNz5eT5rTMH1lfpDyknQMpveO9xIqAg3YsrdiEc9beYn1kTs4bbD1+IDUrQm1YpqE3RHFTfPVhbs/e9MINbid417FxkCSGujR9KO/KDhodWeEpGtnPe08KFByDoDly+vIvt+PWZS0/9aTQiuHUIIYVhuXhduaXI8GCZrsrzhxyaz+osfInyrtFIOryRb52tbDuxKp8ONW55MGezBk9FCj96o30iiWZsOjrKyURhqX5N+XlnNQPR7xXhepN3SYBR6LBWNb0xkkDi0DYXqb+cd/GUJpsqwAmMN5e1fljTH62DU+o+02uvPdsdqwM5zWQCtwK/r5Ovr/emSPhp0ripFU9f1v2HSu2ojqszBwZNS3w29ewdunmy9FYCAHSA0bw31GacJ+5cWEMphCUTCIv6O28Wzlm16SqCz7RNbFyqar+wwcgj2GjZdKqBo2jYsQM594xkB+o/9VBJ3T886qRpW4EdEx2tPtl5m40u1/QugIVdGSQdRmxJKZKj7qRIcW7OLr67yE6q2aQU6luBuMtcjXsvSJWr+O24Oezp54xjKBJRHJhWH1CRqToRL5fvkzcbOtp6ZNiDatJf1IbAi/pkLRdL0mJlE4mT8gpSZRpSVVOUClckcx5fAJAIyuHCiusv+qF7mDlV3cj1bO3ED4RevZZyMo4Ir7448pTaOdb0gkk/nHKvtW27+2NEw4vwvnLqvNPUuDNF5/EFnb3h6PEfIAOBNKoGEItcUDQ2igaDrN0QA5B2B0xJ9BoBuRO8a2lTFYOKNnbuagTdGFzHr3P4YasKyBWYajqZS+UC+iVkcD2Cto0cr+rxAOnWFBWtEAGvX0CXlWuCSTwx9MK7bMHgW8KUhLFZ7/27j2wylcbYMblTmYE4VKLqxqKt9qXMp7TMDc9a7EENflH3snX38Wq3VWV84OZq/dd1JN51fhwrEJ+wXdqGo4AvnPJSbcr+yBnTk16+m7GRX5E3EsCf6+fU7rN3NBCtCL0i+81irWnsrsR28LLPakc85ZnHL4jOUcx1jsdNvcHpP9EVFqSBM0nYmOyonvoiA6wbjKmPL9c+mgO/O9xt0G92BpiOyhtN7MaqT1/xdutG55aafV35JXrXo0PryEp3OB8BfdenDpvDWk1zGkfumggMqdeHSSW+TOMCKoqsvvT6Ny4FsAAGoKnIbiWBq2vJb758sdZ8yw54urRYRSmcDeBvdv/Hx0iXkjgyh4cnqb2Us9y2CD1ujVGJxoiBK3ZIzHQcVqpV2gIPBzz+k779fODRi4AccpDK0WbUhSqWRzUCZdFTRxUOpyjt62TMrd0rbss+dtJ1978FJj7ktt4t/HrML+tN9cOc7/REa5yjR7fdO4z4Xfh5QPdHnzjLN9GgbM2dBh50kJ0QH2d8GegylSnFAAwt/jLY5owdKrmmv9pG07MfXV6ujuSIJ1MunLtJ90IqN/8vQNlP0PVGMHuYF1EPuWQz7aTxbwtJJkN3SCvMiKtO1JqAQB/Ff/x2i39pKlGhaVkX1zul0C2I+5dTsPhKrR+G8KP7N5xLUO/PnCYRCBwIcApGANVaPsGo7Jm2s2xDkpDMER/wdh8uBNOUqpJVVyPgDv+KvY5t72YONNsWycIWb+hcvq4znNz44/e34mS2BV3vrCFVBGeFZwwJZE0z8DLoJVjzn6mA4/XHrMKzrtaWhiy4jh4sZkx2mqbUhPMn9zI9pMRlj+xjHWGF4IW0lWKONmwqMMsOm9b6+RaPX/6kk8WXZWqxZ2ZEzfm0GAFsJkLANjN0ddra8vT1Fyn18oW4JQM3U/AB6YScMI/pPwz69TOIHWC6Bg9Xrx0S9e4PyZHs3uK3sWIr5DazBxl+IK3qYOrxiuwCQ9ilxyUqHHxuSHTNAKaTgrjDGZNudWHtyb6SMvdRqD4WhajVZ6bM4RDl7L8JPj1mKMT+C3Cbt2IX+sk9aYhGM/k+FYpdeS9dzXdlesVQgAwOowzN5MHQ0h+V8nC3xIkxe4lRfxEjhNzTH6YaM4TJYFAzk27DjCwl7B3nvrwEM0wETTwXIZHyVrjhUTQCCCJzG4Pk940/fWk99vmw8TLvLKPOXGZnnIPMbikPyYuao5TLX9lWMmciYNMSXV3Pd3sqdxszwsyJAm+rVItycmk4Q1Ayql3DjnPkCZxhtIWA+4M8Nx6p/QwhLKoaVQcCJbrGHR4lIFrCIbauQOvTbGQ2mRjXkQFDQmlGJquvsQOSfdKjgGNRwPVxx8JPOFJSMo6i30GinUJROrLtr+1+8Or95/j4uFSijohfC33PNFDP8XJx4q+LmrxwCPnoOBf+Ah+4EHETqgI0Pr9bTCLAHi/F7UinhcZiJprcQwt4oh0HxpdWsa0TuRNOGpVbxWj8BAbQ9Wn9v14ewvwDH4rxFn1QmAj1XGPFm93Y4dpSx9/fGM1E3j/dvNdsaVslZoQ377KxfsVjXLcYVuBCZRNEyMv7xz2sEYJKz6ZA9xYwIoT2sCL+eRPENSZNRfaMsGRUm80xhG6x32nkP8cdZO9hSClL4HP86ZlQQ95P3yc+l+m25d8KnqUP2c1t2xmmqWOHk//jby4eVomB11vSBM3YU5pDvCo4nLa6Wal1nwKQYeWOEZR3VF7SRR2iHN1kzVchFUnOIUFLlssoQfgS3g0I2V/QAkDKf9JEV5gyWruCO0oblXSLv/r2u/nAmzg9wX4LMpC8/P2p45t0Y18Z/NRmIMIHjxMPxTdC9MU7QiRkdYXswH8WYtHF/jPNT4md7MH8X1sL3jtlklzgxDfVfHMlk2TEV7+uG4Bo0F1cuFWdE4e/8W3lf3At+NGyZjwXEgwA+Kufuc2+Sng5vmcT9CAMuQEp1azQA1zw6Hxq6eMeBA8Nqe+RtTQcxbEmThPsVZy0euKfDAJ1z6MllYpd96VaiV6Xo70uZlgzTd7E4Pprz6IEDwjVp9U05yHyI0oAgBEPHArTw20UmEYUYI893bA4mrvIEmic8x4eD/z8kmqboCD14E2TnJDAFfRg9uXebxYXHLTh6ThEfPL6QidMQkNIol1pUrVQxGxyXGYEKCryvMuujIJ/rL1+23nHXie9H/b0PHPS1QBokrdFk5SLm1J8vABAKZK0orjqzDeVLdtRQJWZThgT2lWrDQTveEBaEPeoL4RpfhcDyDV9ho6uo2V/D2BhKVcDmcnTmgSQcpvCTtsgS5EW/fcRHim8rClPHoH1J5HlBnEXl+Maic1vI+Yg+oLl6oji4qALkj4q/OW95YjSxfcw/+MDBz9zqZVo19mqOb99cBkQ7YTV71K3jBsKS5hYr/qC44a/952bkhKYnEJr6jvx2c+Vryba+Yb2tlwb5LZ1y3mHjLQNW2YyWbV5IwM3PongXCRZVmRp/6XLdc3HxbTDj/O0gQrARTphO/jllikvkYWQ684mojKjEtmoq1wSZyNPr86vLLs+XH2/KS2n0fc1awst2+hrtw2wk3uD9hyDkP1RFJJTU4vk7NtTeeEl48cdsG7qOB/hnRlte40k2mCEMpyDtiUIdhNiEuOzz5w6A3vxjVzVRaWlThaTs7GnD8urnCqEmQxocaznE6aWcucWwF8NEieUj6WcYqLHthBJwNu5dZzGtLy2m9pqz0GAjmA817Pqd2VEVhmQxYWWbSDqYaTqQVjAeyGBt2GqrF+vt7CE/oOVBNL9zwc0rw1g+JhmKFvpmdqBQUf52KFxnLyDzKqnwTz2KAOG1h/IUKhpdzvj1Tz4RYDe4QByMA5kS4FCqoMLAO6cd4H6EiKt1j2DkpX7hOlFstkOtEku+YFBImEHruUqxRRpw0n43EpvsT3VOXD7d/p4tDEX57wnIcxsjp6WsCUK+GyX3356Wt60M9rsWYHGPBGUUmYJhS/Wk+SK/C3ginUnchFNQO77ntDwLgUiD4A0JdvmdiuisW3jQmu42E3RzP3AgvX6fKjOr7AEdsJZ1ADNlvCeg/P9pOjqAMX95Wj5Os32I3ZyjC5VQCZVWKVV/OkD4TpkinM2rlCvLePNGNlcpQeYlwO15HL1pICFQbHWO5KifzLdISi6q11/UxsihGn+vOZ1+G4SSIBCrDUh22IDlPnoY5HIB4pP+UJLr6EaQqGiBzSO0QC5HUKzZ37L4f5p3IucXv/3sbxCdCXcUF+cfVG3dOOiWW4f0RMoEVx43EK2WQjQAGvgWiRoh+aYkC9jjmLCOOf3/gs5lwX5DiyMLWEtjb8/RY8XszsOAh/yL7FhgMCZzgJTYoQf7HGICciSBuC73hYQIdSkjOmswb7CClYQvBocnDSjxRgYCs/tPlKQi2iY6kGA1gUHTDgHOBlEED2g1Al5E7rOtcufMskpDAh6T9hcnYYQ6q/+blcUwKi0/TW3cxXNwZzGTKit8XwfN82blBnrKrm4sJh5ea/5E8vcWuYCF5dlUJT1LAQ4MfCgc6iAbr7AI/p0Flt4QjxRzOZaKhd7SXwBKNzUVLS66CBFyZx5qAsVMqX6sUvtVtrAEgLhuLoJK3bhaJfaPnPlWBebKtnf1FN3dSBq+QjDbliu7ePBECGaZPBUI6IGKrqUDKxK524vemKdI9MayTlbniTjsxlIMVmFQlTw8BP5gQwoswPfnRrADD70RQxVdIigm1fL1ZD9Tl67kkYKX8L0l7PM7lWVNX7WTR7odZ+UAdYOR9novlBsHVHFm5T+RYzQFnMjVrAjXBX0hdqYK6m3Z3dH0FCzLobbBCDfXZQzI+WAeQb662ILbtmsbyV3dOIR2FJJCcUozeAV/BtT5xRkw1f6zox4M7asyjRWd3noCP+nvAnBNoOqaaNFHJ70Fx+SkjeqCi2uc1UE0oQ9TGRcR3FqOcxo0kacD82F+p9bouvz7JaA52zwALZmzgUVjlCCx7jNwzfSRl/3FCXEFSDVZEMWYSg+aYK5Epbd8uisBMrsYpu+v5cjaIMMrfFn8/xvrwR7x5vjy/xWpvtPEvsJXtmEEsi1zcFj2Oc0O7PNhfYYAF5bM+3qOfWr9BLjvOcOsaJMsrksHQ+5OEABAH5GeWRRKt2/IElwtq3MY9HCAI9BjmY3bkZItESmFz6Ygbmg0gPvFaKHLRQKqodF59r/8YB2fmvQmnMB5Cs3CH472DN2AuJAKbYVs7hiHZ8pJTLeI66KqNq8VLuuXk3hqosnYd98SsDQDdd75yNYfCoCGmKQZBjyHqQbj/mrsyQaLjo1fzUSrfYSPNziMzhMQRtKlCxibbFrDlYoiaExRI3U81VJZhac5chAFgnmmDpoU+Cp5ImUMRG1dtgOmghF1zPotLlTzOmWY7M6qAWw00RExPILge4yTLe8lisNslOW+QbiQ0QGRG34uVko7ryku9YznqR58Lyh13Cm6s2NdKQsUposDgWvSuYBAj0Q4VfJH2PrA66pPzqO25hxxmGogJuWnGB1YhldZR727AN1Ks91uDl+Tlxqsj6JJxu6O0c8MRi9vzq9AF9WOG+Pb9XL/kUScLla3Mr/I89gwEQE4XrD2lve4mRhu7S/yiyWqQOXlqyOgrfTBo6FwJ8EMhohSxYxKkuYuGv4ZKRfnvFw6wP2ey1UVefWF0u4GAYkBZ3kHJRzLtFCHGRP4Dhb4Et2VNOA9+E2Azq8TC88AiD4wr33bP7f4QV8agp2hmAaaDDgOPDLShEucjOwJmkPkeQAbfvB9bTktd9YTQN/Z1Njx33IQELOf5J2d7NAwPM7wtfMRTnsRIULnNMVLIWV2wSPWK5Ua1auOsqk2D0l1ckyd/mISafL7JMBobCq1TjZuoFdd1XlOAVBTdruOd3h0x7OjomkiGKJnZZ/69e2ajqtUuOv3fLAq05UiG0a2zWH0mndxIrn7/PnsnXAApk6qtmYQUaMdawHNVckGc1SuhcxwNMvpzsx0mtA5cz8cSJMuYi3ip2bO891l651XZKTygg4t3eiSNnZVH7+erf/xj5QXGlilhlz+yhNKwtUREkbRd5mrJOsLmSehgbN88/WA9IYIG+ASWO3mOQX3M4DwzBwvQHBPLFbQVJuPoKGIJNi1KxtseXVqYfZ9FkvD0oFD6cqOA+mJHmwqhUwR33QR3Zj9hMsU2B1tVtFfixK+rxJeVs/4SelIlWNZbG97OuVmYZ7KyyXj41JomOLrMKD5hIHroSEwBoWsZ0ySVwZwXFGEyVN8hFqFUDzw+LuP/r3l/nb3N/fMGGh3rlFBMWJeYV8/znA/D+x27psLtyYld+0ubW/OEOYEpIKB1uJ4woJ/XKVV+0XVJ1fy4GdJ3+Cbn0gB0UHkoGMm+ihrlHI681HHcRn3k4YgGDxsCSNLHeHZQU3FiKOYMY1i7A3ogaOJfU11LsjdNEBSBIPovYj4+nCnIpVSBY4Td3blY39X3DkwdQ/AfMqOW6KQjBUx9ieGuQQvKsA2jn8ioDqfwhcoTs/q9YYeH4LBVOLr7PQN9Khw0KqlneDluQb0zxOAQUMCHU71DGoPxL92Lqh03pIA4kG4iLKGxsL6gnXbB5nuwEpZqwb17k2tZ68gORn1YIYmiX2pN91OfeHuPZ4C8FVdYJTw754M0xMt6vDphUjnJehlPSaQvE6+mjkNL9Q5NDeEWazHL7bBH1RaTvT+46U8p+6n0lJ1VcSuuoWlS6Iqf8nqGsbSIaOisutaLiBXVcxGJGrGYR7GHGA51+EjeMaGbgNh5irdS1IF4arEqlfqAEAPj2MFulck55EKFLdkh8gbpzynSX1SN7Y9u9btbAjRmHmtv6QAT0fPJcSnrRY6E89JqGlCzfphxDRm+AsNyQsjAHHXe6wvbJ6+nLT6ywyQ+Y7XJQ66oA2y88EJq355QJ0dHt1RQHcjORbncRHsiTLj/RvTJQtohguv8YtrHQtA26LmzAFRMDrRTispwkd4OEX4DROJOkgJ/Hby3xQUy/As2Y6oySJa+wwUX0PRDjsvL0eUcvPkRmpxoWQUfRmZzsC8xwvHA5CxYWOastsKb4qD3sYrdC/BFSOZMaxd3bQ4pWhqTGfI/2/6Um+Hq7JTV1L+YtbsA/rd21qypCPp64povFTdXbiqR3ZmmgXRQe35TpMaiRgHeU6PUWVbYDQZWqwwXQOVveK+UmBNMg6sHODy7a4LDZpBk3l/3wDtnukK+lKyWgZjiDRcXo5tX8yDzx8d9cQFGTRUqJNVbzHFJTEfxpq4EDoqPqMVxArBpxX1lwxrOPhEefVanR3F+FVYQCeX5JJpLbkmzzqQsqyseXkrO+5OF/r58YOusEmjSDuhnaLyhrABQNOV4sa6NFZZovuVAyp1OkpMr70IqNxdnTITu9wIn7S8VIC82FWk/rLSiqpLOkS1VsOYoryUx/XxH9BNV6U0M5C83HOZavqsclSdV7EGylqquiXTUJ1h6jOthnpcPazOA0qXefWQfyQhUd5iyV4BPjdTO12lcVSKo25cnWb6oLM+PrHyGZxflLXaT1aH+9rDNgt6VbXAEF0NeK6qFgxqpfDb43rtCkMZxTP79xkL8P7buCR0AKeWZwI7vevQ3qIP1VX1Q6nkFXYZUf696DFohAUAZJVGNf3G8DQ90Pdo6x9iyqOs/SoY7dUVqzcplNtxmCEgJq+Q6pxgXq+4QfVgaWArKj6E5nMt+sIUbH3L+EGXwQhqJcH6eIo8flBd8R3wnxCxlWyLF2/0dk1Pzl7WLutimZchKA+qK7kMYX6I1wJDV6KSXM1j3marFKIk6IoHu/Y0uBE+LxlHHrZK/LUVbOPBpxaVoCRUdJ/Ps0mnx3FaQv8Q3ZVTAN7NaIYHCfZHlnNpRRRNIFwZ05R4aIaHPXmkFSEiBceqPtzFbHNrK4cvBIXwQA+Wc+YaUI8fwrYi4wrLyAB5XgqgKPsLO4MjDhtXVnN/GkYOiD3v6OnBNUv9hvDsKKWvMKAFcO2ciogn5OqgF76zlGVj7Bb4336GmhDnweXsGl62fX1X7g4pADsLsHsFTiHvXfUdwK7aiaQFI3R930P6Yr7IDOsZASMiD4WzcfiEOor834oaNCyK3w/9eJOHfSXLfsl1van6sh39JBTwjvhI7GQLRotGxtGOQ7doDwu7D/1Ba7MBLdDD/EcHArUCqWF1u29qSJ1rCTG8SjzWVXXe70klLpQqHUwsGxHw5N7QsnHEZ5vP/qwtj30s3mq0tdg5keocFFxzIDvgP3uC5yxOWSUWFXZVAY4RzTzVlvqHfeZSmBt5CqmJhOiNcn7DVqiNdayHMCXdfAq0lDPsEysfvRiD3nXcmwo/8SedLzZ9NKdLwE3AKdRQu4Y7iAQvDMZCJK6g8nswJOmAoPFjXInOWmP9VKTQCMIeRX3KFdrOBRi7TMKIkCXqN29VIOgFYZUgTnkY4nGhAFw3qmH1N3I97bll0MCB/PLCwjHLZFft4oDmFi66NOlmnprU8X8Q69Hz3eIQFNExF77L/SEYrRGZ+LZlfRA0HkNZak3WOsgyuJoxALo27S6n6AGjjpp5bZxJ8JdklZWSHENNGLbTBgVZCoraVIA0NKLjAOwnzHgpi2Bu4FHNCS4sjQCGYo31kMco8nF1xsANcZqrO2xBlQzFkNA+FhoAkfzQyy2njDLcxM/4OfDSgH2DijEVfFNLSKc87+E0Sz6zCG3WgLCvzEZbRJR4hYSsk10NcO8bhnyKamQJkma+j9HJ9Ca+luj6RnRnKPG2KRunP5GcJ448sHQy4WT5s3EyyWHYtk6QMHYoS89YptZ0CiPkaXZT8HshEee7BTsnHHCxwjNH9phcneINJhJJADbcsTN0zpCZkW/EllhYd8MWAhAcU3Z2ySbed6TTTq1ojW22VuXXzPDzpnXYPLJBbF2FzUJfD4wrpRFBXOoIdzqksIXsa5rLmm+eHvn0p1dDrykplHku6zA/OqaSgHgXlggCYrYw4HQcvhIfZRoPkixEC2YdeiHwIQ34ExXSAgZDdGQqAicHo6QfORB6eixOj9ZRWh2YRKxE2iQlVDbkwMTr5Ehqost44fXFo8nkjm7TYwCH6TG1TfWfYoubekqezyUp/MwVaTKJrRNQiIDmPgBiV0rrXhlaVPKIk5BTe20p54Q/JnROQeBRdKIagF1bTLyt5Ms8dcjeTRDxpDCAL1+VHvko2QedWi16+djQREIOSjNJGxEna/N91vaKGTpTgxVgeDEQuNU2FnUm6vw8r9X8MEO+XsSEid/vIlUXDc/f3pwegN+ybbv/rowU+vD/lfC68tVhUPVP8A4F/PS/A/4vxzvQP4NCdr4DRjN6nsM6+cy1CFoDp1HBZekNF16RG52RkXp2zPOMW3Mzi3bgiAdNuuCnjNfPD4D04p0LejoV/EigSVNfyw7t+XGhNnf2SL9TsHO0wl3f4SsyzW2+eK0K0DGF81IHcYaAwLzVzK1PKTp1T6RhTmKNUJuNH/f1kDRHqEwyXEAcYEjdw/yIydPzUM0EcpgBvLSDYU84SmhMTY4AFgN1IB79Dbp3HtxbGovpaZAjboFme6TPn74NFVN+vuSKdgJy45YkTOghqciAIJ1DdEteeJ24kNoarynuUDRletMR8JfrR09gfbs48gFLKg+mG5g7bPt4fLO/BGbmFSKhYcvu5OcdrBaZGb1YMP/e7bohzFI0hDsDE1p3vaVoPYaPOm6CVFS2Eu6WgELTivXHFjdOEqDEBXg4/p7MxKvT1vnyPc2U2TXntCzGKwoc7p4okoPLnZ0Wt+9cqgvgbrSwOKTAl0CLoCZIhFK81xvxTh+GREaDvQ+1ncE3C8q8jKzQcpVjl4w7GxUGF4g0LlhaY7ghTBySlcqXCgfeGIph4/qSvlQTQDLJBwwvX99jzahwrmizlmvexQwJZu001qMSseW7jvcCvk+uGyrNzatGb7dmLahE0ChT/hCzMH66td/dCO7V7Kk49UZHRt7SEqtBvNYCmyozUlnrC0vTozXlAA8yHkemL9ZM8JrRJpvrm2P5Vy7kubDCmoWs4xBI64gxpOSTXAKTTcanmUR4JTrpuTEY+h286GWCEK4zZwKZhT0Wg0eCwe5GvFNcM7huZeoXTOITq9pPH56o7E72n9cent6Gsp2UzGt2vgvAmelVP8vC5/kNmglgDzsVgaS9QdZTbh4MWwAin0Q73Q05LzZ0I87H9hv/+ZTlL1FGByCGXTaIvk6JxipgbyoDN2tDMAxdxc0OsoDcGuzt5tFGab12dwpueCQ2/vauXZGjcIrF+t327b9KOBovaCdGuWq2vgY2X8dTcHOWgwOZE9spO5bV2Whj7pvFcu0g1gqE1JGe6GfKFcGRDS4jzLEkXgF7w9QTa43sa3U3L7Idr05wReLucfQu3XVg/MLw3/NbZ++k4+lwNz13N36/iH9KIOSbclNQ2faDYdGbrGImBUFW/m5Y+5A/1GP2fgocLoepMUbJLjegE9zc3Cwcr/mzxd3C8cnSPR+dzoKUmBDSCKnagthtYVWGwRnxTAAij+l5iyOIcEmModbmSMFMAHQT49okDE/lxo8z2C9YW97rzEdcsLulGcNWE4XwkMCMJ0tycY5Oot8JmHTJOJGPfr+K8nbAto9jvCsL5AIPxXL339lzYZ2J8dq8/d8JW39RLSCpK2Lp9plHm6PtICBOGDd3R7Z03yvvC2iqcYiHoJxRYAJQ58HPr+Pj4wPy/dQJSEOpqyTCdWbilcI9pZTw4r4w1tgyrqQI6Bk57zVtmlgBI2WzzE3FLZkI1OosO3oUm0FQXO2C1Ys2C38mQIY+/tN1CLigvzIoQ/HFi/xGGDoHBvCaupX/P8ppcKNQqPC6is/knEx57SujYQpNT5Lpg2lv+OCod41zaWUZV+ByuTWy7cl1hU36IktKHeoaCQzhGQCQU6jthkCEptoqd2aUq+qmZ5tT8H3TkLxHSib4yNgmd6kN7s1Ndz8H66ovHCHS/tSN9pSxla3kjnFGY7aK04maqg9V7uQ8OKxmlK8DLAICFEz0xthRPbcUmhI4G95ubX8ODLHaLyycJZ62CcMNVhLb98pfAwJKzxIOdFcihAc1lz1mhhYbk6wakfljZI+5c4jdEDFTPHYwU799nghpJN7gNs37Ja2Dk+zx0Br5ArWm7PQGmyEIvxwZrqVPaHd5ZoEb9EliZnPdd7WfQFxRXBGAjcqVfXncZF4ML4TNFN6QTV1if+tyjXQ3l+/AphKKMLvK+G49hIHAf32TXxwmS0uOZ04+HvU2W44N6nw+tNXluxGdLkwf+3lzYdkV3e20M70Np9F0Loh5EYK/yOUbFsDuhSqMAFy7GCTnwybHOtk8DzZmYgz9ntfk3WBIaMYbtNmWRoFhgMfNnIZ23HiuJ9uNSwRdCEGZjBZaDWBehQiZ2R0iJkeI2SIZvquJZvmK3A9ZojJtMHO+3RNmEcoVlKnW3JqGkg358zLDng09I2DpCz0VZYecwNizB9+MLp+B1QznLXK+GL5KTUZfyRxAC5ltfp1A4Rhp7QmhfUPPaEF2N8ZxvMXE08S39+d8cnc8svZtgRvOSdaLawxtTTFol9xecZrElpwWLzEwsFKugobIyUXdtoRrmeCi5jrShSp2QNOrbYQWnbUoeGyMSj8FgBXtfB3pzAzgYph/zq+0cxjjIg5AscPiupILBTj8MRpgeSAaldw2ccjL2NdA1kvkTpg/9FZCZDGG4mOcI/ETQ/DZ8mpbQKMcyLyiph627Fb9tBXw9BZecucwZHJcnRkuqaGatmc26RnT2MxSf4IgTIYTBVwxsoWwfjXU3XOhMpsYaQniMf69q6PCQ/G7+tzBFb4zJjnyMPNtUacTNsNmv+woO2UAVKMDm1Dn4OMJcfUk7FODvr0aeszibZ2k4Tx60BZ8awT+4BtMZYpEo2fTq0fVmgbzqqTeyCa2L5groLtPUSoktLm5CoM2b+p7Zk6NT7Z3zZ1hz5phJvekdV34PsqQNmDPZlxr5F3gZUwgOhRulC8+wnpWZ2RsR7el2VP1qkRfxDm4hqpqlTPw0i4u6XVv5g0tBi5qtTlP2eGON25SUY0NLJEa6BoKN6jUHZ/cwKRgBrR+xzXOqPLvSn72jk84UqLilpPpZW2GunPkeM2yh+rhpjIelGcPRxVMDbr2SB5ELhmpr/5CQK/96YLGSNnFOnRSu7D7O63RCqnBjZwj6ybQHsgFD7hmgBB5MGGbIjUF1cbFt+mJrEfWarofZDd+NFH6aPce539gjiGGQtIZwnA5PohxSX0E9W/7CQpFLAiDOrMjx1GrxXZyWnjqk9zcUEafOFAISvUMQdmFajfF0RyrPD8RIoCrwx/yR1udRJrGMI3HEQSlT1RV5/MtNjoWuMznYns+IrK3vrvEP5dAJJaM68Q6NDc4tjWuUFceihUym8vQWCGkkC51KRxWJ/WlMQQminWS5CL7yHa3f54M2HYxIichtsw520Dv4+TgGZi/iguqnqiURKdGqYtVXIdkUtLYUQNM2d/Gtv6mVgDI4p0EzPuGKpRrwlNWUUWAKhv1AKKTnjT3XVIWAP151gDQSbBm24oE0G42dbIVyG5tGwi6k44ZL4AoNNLAT/M7/WvrSHwxS5hb/WHddRQKJjWy7Tki4u4YRLZsJXCFfdX4Mw0QWXR+tg48B0Z+IfsCgO1eoXd7jt2HZb0wWG6lrweml6l0clkYtvocbom2uz0e/4zKfINaVWdXObhiQNWgFHgMUEkGkiIgUvO1UTs19qxjdFDXfrRDSrVwStwRxJR7WyMbQJlhxtD0vvE87BRtryR61DDR4+H0qGX3Rxfj0k+bZzJyKjMYvb1UkwKnWE+Jt6sWiroTg9Re7wXBhWjvhf/jdR1e4xK4F1Ivsynva8nUzfuwoVMiK8iFZwLFxbfHWcPwwVBP03gk5LNHtf6ljQCmqNLBR+ztek/iukvyNj2e8SpylECJkbXcPIZeKyiFeKsSi5/huT9WH5xi56g6WIo/uvWmFaRFknqFJZ/BHW7r87+w1HRwXALo9ABwAuWhwse4nRYF0Y22zmpMc6ZeTabPiaJv/8qXPQ95EAzrgdXJ/FnjjU5ZmavCSgapD263mtUDt/KDcw6MEKi3k1Km6FBTOuRBEOz1WwhuJizJp7Dn2vpKBn89vytgTdlvvJtJYg05G0oPacKJoiXkM2irEgh1rtXtANL6GtkNfbcDrraYG3DJ5WAGP/r1Rm2NAMJUejesHTOqSJlSsiOE5Ec19HbI6Lpnej01Ywm0h+Opo0KxddNhI2vVVousy0d27SabKhYKVBJP+g6JPndd+oL4DnIARk8LA3ZO3enDPh6mSkRxnfqjYMCfz9MFG7NYThmR8x1R220yz/ywhXWdcI7cJjavPF3lO/D23YXnXXAynQldEUXaS4kodIfV1E+ZENVs1Ftf4E3vYMISCTMUNrlyXB5o0JFPq/pV14BqpSqooArVRRNOa8D0r94zx30qJPfnve9mjB1oNg0mQPnvCwrYOtoqRHOScw3lp5Pf8RtqpyKxSDq674RL3uu0+mHiNI/CkzSWJbRLayXrhm7YN3icxDZyCBPpSJPuh17jgzOVQ9Cw4/4dSy+nW6WsQ/e5HUPvp7I4UTgKZ3IP/ONX05d8fjcCSJBfGAcD3kbL9uWta3B+ZiM5mccTfHT9/F8dZi3i5Oa07VcOB84ngDQJfaUOX5JNT/E8a5VrUV4VnenZouk4U93RkUOTM7jzMx2lgQoc6f5jXcoIr2GO/x4dprkMmYJ+PPHZ+ahyvY5zOsDVCfYlOhjCuVrOEz59KOFs+l9MBY9Hw+Wc45laj1LOBMlSbKYA0BirafTcmV527lGkqZdWoigpYhpN8OrnVyEJuP8II0TXBGoHxo65nxfLK4Ihb/61wiVJYdBMZRT/QhInTCsTMvkvE/g7dGN5J5P5mst0SyjcsW2+HZJY1lGLCdG48y+KAkO8taqKsKDd870IVYW0AsuRsv8chbtTFiHFf7UE6CxFZVmXEECziUOV66EsReiWnkxN1zADmu5XT/8J6hpUVHR/DcbIDXFJxZSt0FGy7T7+eDIo7lqn8O0XT///CtD8ZppbdyPQULABdTcbrpl0W2/0ITudjXbKhPCBpEwKL08YvSo+xQT5aqXKQSpFfmwyAgGDtTCmtCcq3irJgUKiXK2afWW7fCYzafwR55+ZlhI21Jn6+o8tX/GFQJPhQ93ph3xl102ydJlLb4gRbTWTdRMB2OQVtqkTdHrvntCsstJWhQaZSJTFw400f5JI7DPOj/zdh+aY86GVZuHlzxkXj7u+Sy87/a37JeTamCIdr7gsXRF2+Lod0TsSUstZ7oFIZSBAm+RCSsuxB470GDd+w8YMJy9TXmW1zomudCTWmg9btKyp8r9Ni+fIvfr8Zzy3Qcy4/ouALVxa609P/xfJ4P86w0Ups6/++EPA2XWacaFavIIulM7WXdxzEk2KkPMPmckJHszpWAOEKcAlgnGPTv2N4ynR+XQM/GBG7mDPHHc392Q7Wz0BgM3usyFZBNSHh4dZG0xLq7Kq14aZgvtDXVCNzXp7Fp0c/XsPNRUlola6AX8ZQZ5w1MukKsPlxdch+XRY+Cm08QIDNqPnIXDvB5J31pSj++ELWV+8tiG9J4Zph1CIW8LmkRTrX3qqyGAvMUziTDP6vp/Qg9AjVHaV4vLHbxFZVI4a2W5noUUlmwqsET5T3rS8w82qIoMZc5Jmst483dRwrr20fPW1p16FoMXBISkMo0b28XAb8OnS0dEhbN72I7DAQJh8QFuvHQJq52StfCyUWpFCD2mGqi6O0gwzXfFCWdVLaapBXTKnYzBw97DFrRvcg2pTz/dFRB/5Q21j9dQg6RlM9/Rf7eFTZj/L3YfVJdQ9MfbfUhTYOqa+a6h8QQPBfcSzqHs1FoppAweq8UCBqjsw+u/TGGhGgzG+77214tZUykW0M28YGc6emU9gNxI7TBTSenicBlrJm2tA4pXMo6YcSLZHoF/FUb4QKC4HydgJYUZYB+OmVypTyrl167SQTa7MPsED2QOOSTVvp+JQRZB6o60NsTp2L36o3tJ9AblRNnJzNedrU+O1RnpZ6h22pPL3nUVzdYG3HEOY7d2ff+dakllBhO2pijUlsKGH4H/uFLgEFKQsVTCSwlk8iIMfHZPXHY7DBENI7aFKVE5nUOR6W8VSXQBVyJgKZwjyGJjSW+mskfNz9SXqrZiNjf5LetM9WWdzkvvU3taRPGz1vWH9re6Cvr01jVazSKj9RnQKSVgEsAOR526zwyD14NAQYnpavGBWS+BCcn2z0ILLleHjCbijwrg2UbBwEUlbiH9ore4AVFiOyrmdS4TxQDrmja/YIdc119R9G5o4zq3J3NqML0+y27kRLddZWFJUiIE8is/75Fc7TgIGlQgHbSxuFYHzz4LGIYr2ck/h2k8u6E4ZT07bVHM90cNvIGM8YcJXFWdalT7fHvDy6b37JP6Jqg+Qj24Hajd5tBDkcS/eEnW9pUH/06AfW53JUQb3SNTqNriLRSNxH2V+HaMyqcTxhH/7WPNfBVVrPulkxuGq/esUVDENmWsMdxqaX/5Y8vat87t3zsbpT8UhO+999G4XbT2BZpD1X+4otvnatVEbvq+C6syNrWg57VKWYvM76/L+k8/Mz42lpYHOepbeBPyGnHybrwAMSohbPc9K2Lr2MeXimhdwKt8vpPMp7OmyOhMuJ8T2qH0HYpGPXDggjDSS/wsPkKxhJqMEwnrFLT3pjy8jiYRqX6gQj88EBtFTJkuuUahLkylNSBYKrXTbf47zKwGYFA26GL0kub8OrWrxeoEvnmicXnLkl4Rh4Qffem14hB76Tk8IVvfwBj5yWdFTw2DKtIS+k1hmmFE9MF/DugnnPvKApmx/ykAuTC/ge5dZnU5MUll096sa92pK8SFpG/T+hHovgWiA7JwijqbI4cngcCL3v3SnBZibDShcjsgW1/ovc9U5WOfdNcKWDp6N7hG5weRI6aX71s/ujwzzz3nBU5eOwxO4QVvtFjEXy/MNnXmDX9IzQmbFap61c4Ns4J6RxGDpEclbVbUDXRDz63TAw2LwweUkOW1bmc9m6NoN53PvGK/Yt5WtuLrRXg9PLsZWXOhLeOhl34Zu9uaQ6pXeMhVP5LI4Q1NAQsmq0/Y3YSMvBACmkG5uOpLrF8jFuQ5aXa1UgEKFhQOYpohI6+J9fDuy2JT3dTHsYCdFzuzanNuCGZAd2PCWUa6BQ1rVBvhMkvRloEzrEp7D2yCkOqdfk1dw0iuRvJ+SUTZhdPleLzEVXeXAmnAUaSIU6WKvp6KiHUC+QWhypUov2Dwexvo5WGkLvgbGJikHVJkqrwiwYhy78fpAavOSK6WHUErOPQO91w0dgdBrNAyhvJB7P/SagjIPufBMAmIwA6H5Z/RU4H4PBiDRS6q9jYvwm7QjXyc4xHlmP7fINXVFStyxsY5AAW63yFRqnSXmpi7KFFGVwQn0lQo0BgmRZM9/VrWYLUulKl8tkzmzh1saqFhbCE0Cx5JrEnaZlrqk6n/QgxYN/ZzTdJYDY/Jfi8Alub360i9qValQzBqD9j6Us7IySQIJHfRCsPhGPQPLhsMunj88wBwKYlsLSZk6eZJwohvdvUffY/PC6UpcXaTZlZyTutVkVPUfFeC2ihBwQfBC8Wm3XghL4MFzaPdGUfZ6YNty4/IzUDneGqoe7xhZdY+br2b5ljKi8gx+mlQCc81X5v7DEHiAbj6VxDlrdWCkqL7z5DwzXVv30iANkfBxkbimitwtuX7YuDeidU/9sOf2q2sk2gYLc53r+SQzKNnbcYqcly8EFM1DpKrpIILS5/Ew3c2k2BjvmyZBYv8MnBF1k/gmUxqlI60G0J9q9bLYLqCfrGHXPrB3vZ2x7oWJmWPs3D0KwudCqIOD7R+ZvG5qX2zZPq9vhaHe1oCAvOlF2wx8XX8PLAWddCHNYjH5Y67kPlCC2azBGaGtdvHiSuWgUpt+rizFqRd0aLEIO/KUVj8li1qE0H4LIQ3cOBnFwukbXeSsF89Exz0X4m8b8GhAmFAeDBlQ9dLqMNfi1TCv/e1USgwP1bOuRfC1GwZryqML4o932dQ1P+lBbCmFr3cf2JDwOWMRP3MQA5084POxKvIBcvM7Ca6+OqeNxxEqg+BKQDFRvQNbM5NBRDSWxNdZqXcKvHCD5wHCaGcWV5Oi8Q18Vqy7wwQkuVMHycITPYlCwIjn4iHGS524jp+rPgMATvTCxteueTZcVyuW7gjdr0sVlVVsgTCCU2LeUle6XXIwTOPGB8MbiF85YMZBAQx56UMS9UCOdiYexixDHLUJaaqmiFk1d/kWQ3+q5yWTX8j9L5xTX6NxKLuqmZrPMqprnV/o/IqBumZDKebqi6yUYXlfAijAPpY4vQnLezHmU96fi3uO6BDT8Xn39xTZkpHADgQ3WXMpzmX4qlfkQOkR0tUhNgfuWTexKxkue9SFb6CnFbn49B8PgWTU3bC6eucL8Kuq3uTsui7MToIeaqfb8kugOTkqeg+LeShcFu1/ehSofIaejuu/Zq0kNdnSy67I8EYiDCR5nQWQ0uM9VdkH9qePG+NCUGXG/seMoQn/hJ1FBXSOm+wr0xR3TUJkMULnhmi2aqqej9u49Q6oO6w/C0lco8nZcWrAW3IrcUr3Wf8mwDtGYhGbQWw1Vfdin8LblizsfR7Ax6zY6t24SeA+QSTOW55UUbF2OeKKqKEX6nDnGRy3l6s9btlj2HILxHTkllJkNMi5QSrWwf5SJpWZ61sI7kfjnDVuChYHm5Glk3OyYuj6ZMx+tZI+PMEKOM8yA0uq8cIXsuA6cPkjDK77p1GRZx05atg2iYr5fLri+16Shh69ywQ7bD8rRQOP53RLe4HDZQClUD8TQOnW8RwJmG31oT01SyyRYgHV7ORtoo5RRwjO0iJFZU5ramgQbgiJxnuw7SbpYVabGresWqQTtUP2Nd5BLzXowLwT4hBmUlTgIvaXJSJci8I2BB+SCaVamjdj4TGMhS3nAe33hG5nBC0ArcjJX+BNHNIfz0s+AhxPho3tRbLTK/i2SJLn6lAf4V/3Mxq6K1YVx20ZwGUe0+nZH50wRgEVrB0CdVr4pSuYXbBj/Yy4Gr9Pt8jiL/5cyHIb72UT4B5DqqKs5eLdxjaPV8g6Pxvo35qamNgYECBKHCpwSgvyDkMQwkPrEuzXWZAPDNgbuR44hUyMRfKz5Arfa0YpVfjaqYGWnVKw6nXht00w35JfA7pFvANUTI+mcvWSt/Rttj+tzuWI8nX/usl2SZ8FsBAZ8lJrOYr9Idq5e/8ew+MJ5AdmuLOBm7S485JH/8adcvHvyMfdFzfmeCJrl5Qcq6q9mu3+VrUZOu7nm0wEm5lJHPh1HzFI8aXK+ZXcb8MpDxv2tCz9Db33M2D+itaJqIgIahPj5Uf9XHH69QBY77odDSWdfHxdq88Au5GBLXhEW8R0n8kVmckdfi/XWcKbsU3L4IjuNBW96jXVFo8StclU7gQD\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/package/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/package/generate_input.ts",
    "content": "import {\n  bytesToBigInt,\n  stringToBytes,\n  fromHex,\n  toCircomBigIntBytes,\n  packBytesIntoNBytes,\n  bufferToUint8Array,\n  bufferToString,\n  bufferToHex,\n  Uint8ArrayToString,\n  Uint8ArrayToCharArray,\n  assert,\n  mergeUInt8Arrays,\n  int8toBytes,\n  int64toBytes,\n} from \"@zk-email/helpers/dist/binaryFormat\";\nimport { CIRCOM_FIELD_MODULUS, MAX_HEADER_PADDED_BYTES, MAX_BODY_PADDED_BYTES, STRING_PRESELECTOR } from \"@zk-email/helpers/dist/constants\";\nimport { shaHash, partialSha, sha256Pad } from \"@zk-email/helpers/dist/shaHash\";\nimport { dkimVerify } from \"@zk-email/helpers/dist/dkim\";\nimport * as fs from \"fs\";\nimport { pki } from \"node-forge\";\nimport { hdfcReplaceMessageIdWithXGoogleOriginalMessageId } from \"./preprocess\";\n\nasync function getArgs() {\n  const args = process.argv.slice(2);\n  const emailFileArg = args.find((arg) => arg.startsWith(\"--email_file=\"));\n  const paymentTypeArg = args.find((arg) => arg.startsWith(\"--payment_type=\"));\n  const circuitTypeArg = args.find((arg) => arg.startsWith(\"--circuit_type=\"));\n  const intentHashArg = args.find((arg) => arg.startsWith(\"--intent_hash=\"));\n  const nonceArg = args.find((arg) => arg.startsWith(\"--nonce=\"));\n  const outputFileNameArg = args.find((arg) => arg.startsWith(\"--output_file=\"))\n\n  if (!emailFileArg || !paymentTypeArg || !circuitTypeArg) {\n    console.log(\"Usage: npx ts-node generate_inputs.ts --email_file=emls/venmo_send.eml --payment_type=venmo --circuit_type=send --intent_hash=12345 --nonce=1 --output_file=inputs/input_venmo_send.json\");\n    process.exit(1);\n  }\n\n  const email_file = emailFileArg.split(\"=\")[1];\n  const payment_type = paymentTypeArg.split(\"=\")[1];\n  const circuit_type = circuitTypeArg.split(\"=\")[1];\n  const intentHash = intentHashArg ? intentHashArg.split(\"=\")[1] : \"12345\";\n  const nonce = nonceArg ? nonceArg.split(\"=\")[1] : null;\n\n  const email_file_dir = email_file.substring(0, email_file.lastIndexOf(\"/\") + 1);\n  const outputFileName = outputFileNameArg ? outputFileNameArg.split(\"=\")[1] : nonce ? `input_${payment_type}_${circuit_type}_${nonce}` : `input_${payment_type}_${circuit_type}`;\n  const output_file_path = `${email_file_dir}/../inputs/${outputFileName}.json`;\n\n  return { email_file, payment_type, circuit_type, intentHash, nonce, output_file_path };\n}\n\nexport interface ICircuitInputs {\n  modulus?: string[];\n  pubkey?: string[];      // v6 names\n  signature?: string[];\n  base_message?: string[];\n  in_padded?: string[];\n  emailHeader?: string[];   // v6 names\n  in_body_padded?: string[];\n  emailBody?: string[];   // v6 names\n  in_body_len_padded_bytes?: string;\n  emailBodyLength?: string;   // v6 names\n  in_padded_n_bytes?: string[];\n  in_len_padded_bytes?: string;\n  emailHeaderLength?: string;   // v6 names\n  expected_sha?: string[];\n  precomputed_sha?: string[];\n  precomputedSHA?: string[];    // v6 names\n  body_hash_idx?: string;\n  bodyHashIndex?: string;   // v6 names\n  venmo_payer_id_idx?: string;\n  email_from_idx?: string | number;\n  fromEmailIndex?: string | number;   // v6 names\n  email_to_idx?: string | number;\n  toEmailIndex?: string | number;   // v6 names\n  email_timestamp_idx?: string;\n  venmo_payee_id_idx?: string;\n  venmo_amount_idx?: string;\n  venmo_actor_id_idx?: string;\n  hdfc_payee_id_idx?: string;\n  hdfc_amount_idx?: string;\n  hdfc_payment_id_idx?: string;\n  hdfc_acc_num_idx?: string;\n  paylah_amount_idx?: string;\n  paylah_payer_mobile_num_idx?: string;\n  paylah_payee_name_idx?: string;\n  paylah_payee_mobile_num_idx?: string;\n  paylah_payment_id_idx?: string;\n  garanti_payer_mobile_num_idx?: string;\n  garanti_payee_name_idx?: string;\n  garanti_payee_acc_num_idx?: string;\n  garanti_amount_idx?: string;\n  email_date_idx?: string;\n  intermediate_hash?: string[];\n  in_body_suffix_padded?: string[];\n  in_body_suffix_len_padded_bytes?: string;\n  intent_hash?: string;\n  bidId?: string;\n  namecheapBuyerIdIndex?: string;\n  namecheapDomainNameIndex?: string;\n\n  // subject commands only\n  command_idx?: string;\n  message_id_idx?: string;\n  amount_idx?: string;\n  currency_idx?: string;\n  recipient_idx?: string;\n  custom_message_id_from?: string[];\n  custom_message_id_recipient?: string[];\n  nullifier?: string;\n  relayer?: string;\n}\n\nexport enum CircuitType {\n  RSA = \"rsa\",\n  SHA = \"sha\",\n  TEST = \"test\",\n  EMAIL_VENMO_SEND = \"venmo_send\",\n  EMAIL_VENMO_REGISTRATION = \"venmo_registration\",\n  EMAIL_HDFC_SEND = \"hdfc_send\",\n  EMAIL_HDFC_REGISTRATION = \"hdfc_registration\",\n  EMAIL_PAYLAH_SEND = \"paylah_send\",\n  EMAIL_PAYLAH_REGISTRATION = \"paylah_registration\",\n  EMAIL_GARANTI_REGISTRATION = \"garanti_registration\",\n  EMAIL_GARANTI_BODY_SUFFIX_HASHER = \"garanti_body_suffix_hasher\",\n  EMAIL_GARANTI_SEND = \"garanti_send\",\n  EMAIL_NAMECHEAP_PUSH_DOMAIN = \"namecheap_push\"\n}\n\nasync function findSelector(a: Uint8Array, selector: number[]): Promise<number> {\n  let i = 0;\n  let j = 0;\n  while (i < a.length) {\n    if (a[i] === selector[j]) {\n      j++;\n      if (j === selector.length) {\n        return i - j + 1;\n      }\n    } else {\n      j = 0;\n    }\n    i++;\n  }\n  return -1;\n}\n\n// Returns the part of str that appears after substr\nfunction trimStrByStr(str: string, substr: string) {\n  const index = str.indexOf(substr);\n  if (index === -1) return str;\n  return str.slice(index + substr.length, str.length);\n}\n\nfunction strToCharArrayStr(str: string) {\n  return str.split(\"\").map((char) => char.charCodeAt(0).toString());\n}\n\n// padWithZero(bodyRemaining, MAX_BODY_PADDED_BYTES)\nfunction padWithZero(arr: Uint8Array, length: number) {\n  while (arr.length < length) {\n    arr = mergeUInt8Arrays(arr, int8toBytes(0));\n  }\n  return arr;\n}\n\nfunction base64ToByteArray(base64Array: string[]): string[] {\n  const base64String = base64Array.map(base64Val => String.fromCharCode(parseInt(base64Val, 10))).join('');\n  let binaryString = atob(base64String);\n  let stringArray = new Array(binaryString.length);\n\n  for (let i = 0; i < binaryString.length; i++) {\n    stringArray[i] = binaryString.charCodeAt(i).toString();\n  }\n\n  return stringArray;\n}\n\nexport async function getCircuitInputs(\n  rsa_signature: BigInt,\n  rsa_modulus: BigInt,\n  message: Buffer,\n  body: Buffer,\n  body_hash: string,\n  intent_hash: string,\n  circuit: CircuitType\n): Promise<{\n  valid: {\n    validSignatureFormat?: boolean;\n    validMessage?: boolean;\n  };\n  circuitInputs: ICircuitInputs;\n}> {\n  console.log(\"Starting processing of inputs\");\n\n  let MAX_HEADER_PADDED_BYTES_FOR_EMAIL_TYPE = MAX_HEADER_PADDED_BYTES;\n  let MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = MAX_BODY_PADDED_BYTES;\n  let MAX_INTERMEDIATE_PADDING_LENGTH = MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE;\n  let STRING_PRESELECTOR_FOR_EMAIL_TYPE = STRING_PRESELECTOR;\n  let STRING_PRESELECTOR_FOR_EMAIL_TYPE_INTERMEDIATE = STRING_PRESELECTOR;\n\n  // Update preselector string based on circuit type\n  if (circuit === CircuitType.EMAIL_VENMO_SEND) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"<!-- recipient name -->\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 6912;  // +448 (>280 limit for custom message)\n    MAX_HEADER_PADDED_BYTES_FOR_EMAIL_TYPE = 768;\n  } else if (circuit === CircuitType.EMAIL_VENMO_REGISTRATION) {\n    // IMPORTANT: Only send payment email can be used to register\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"<!-- recipient name -->\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 6912;  // +448 (>280 limit for custom message)\n    MAX_HEADER_PADDED_BYTES_FOR_EMAIL_TYPE = 768;\n  } else if (circuit == CircuitType.EMAIL_HDFC_SEND) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"td esd-text\\\"\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 4352;  // 4096 is the max observed body length\n  } else if (circuit == CircuitType.EMAIL_HDFC_REGISTRATION) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"td esd-text\\\"\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 4352;  // 4096 is the max observed body length\n  } else if (circuit == CircuitType.EMAIL_PAYLAH_SEND) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"ontenttable\\\" align=3D\\\"left\\\"><br />\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 2240;  // 2240 is the max observed body length\n  } else if (circuit == CircuitType.EMAIL_PAYLAH_REGISTRATION) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"ontenttable\\\" align=3D\\\"left\\\"><br />\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 2240;  // 2240 is the max observed body length\n  } else if (circuit == CircuitType.EMAIL_GARANTI_SEND) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"<p>G&ouml;nderen Bilgileri:<br>\";\n    MAX_HEADER_PADDED_BYTES_FOR_EMAIL_TYPE = 512;\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 13312;  // 13312 is the max observed body length\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE_INTERMEDIATE = \"Para transferleri bilgilendirmeleri\"; // Should be the same as hashing helper circuit\n    MAX_INTERMEDIATE_PADDING_LENGTH = 2688; // For divided circuits, we calculate what the padded intermediate length should be\n  } else if (circuit == CircuitType.EMAIL_GARANTI_REGISTRATION) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"<p>G&ouml;nderen Bilgileri:<br>\";\n    MAX_HEADER_PADDED_BYTES_FOR_EMAIL_TYPE = 512;\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 13312;  // 13312 is max observed body length\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE_INTERMEDIATE = \"Para transferleri bilgilendirmeleri\"; // Should be the same as hashing helper circuit\n    MAX_INTERMEDIATE_PADDING_LENGTH = 2688; // For divided circuits, we calculate what the padded intermediate length should be\n  } else if (circuit == CircuitType.EMAIL_GARANTI_BODY_SUFFIX_HASHER) {\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"Para transferleri bilgilendirmeleri\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 10752;  // 10752 is estimated length plus padding from intermediate cutoff to end\n  } else if (circuit == CircuitType.EMAIL_NAMECHEAP_PUSH_DOMAIN) {\n    MAX_HEADER_PADDED_BYTES_FOR_EMAIL_TYPE = 768;\n    STRING_PRESELECTOR_FOR_EMAIL_TYPE = \"----------------------------------------------------------------------\";\n    MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE = 768;   // Todo: Finalize this later\n  }\n\n  // Derive modulus from signature\n  // const modulusBigInt = bytesToBigInt(pubKeyParts[2]);\n  const modulusBigInt = rsa_modulus;\n  // Message is the email header with the body hash\n  const prehash_message_string = message;\n\n  // const baseMessageBigInt = AAYUSH_PREHASH_MESSAGE_INT; // bytesToBigInt(stringToBytes(message)) ||\n  // const postShaBigint = AAYUSH_POSTHASH_MESSAGE_PADDED_INT;\n  const signatureBigInt = rsa_signature;\n\n  // Perform conversions\n  const prehashBytesUnpadded = typeof prehash_message_string == \"string\" ? new TextEncoder().encode(prehash_message_string) : Uint8Array.from(prehash_message_string);\n  const postShaBigintUnpadded = bytesToBigInt(stringToBytes((await shaHash(prehashBytesUnpadded)).toString())) % CIRCOM_FIELD_MODULUS;\n\n  // Sha add padding\n  // 65 comes from the 64 at the end and the 1 bit in the start, then 63 comes from the formula to round it up to the nearest 64. see sha256algorithm.com for a more full explanation of paddnig length\n  const calc_length = Math.floor((body.length + 63 + 65) / 64) * 64;\n  const [messagePadded, messagePaddedLen] = await sha256Pad(prehashBytesUnpadded, MAX_HEADER_PADDED_BYTES_FOR_EMAIL_TYPE);\n  const [bodyPadded, bodyPaddedLen] = await sha256Pad(body, Math.max(MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE, calc_length));\n\n  // Convert messagePadded to string to print the specific header data that is signed\n  // console.log(JSON.stringify(message).toString());\n\n  // Ensure SHA manual unpadded is running the correct function\n  const shaOut = await partialSha(messagePadded, messagePaddedLen);\n\n  assert((await Uint8ArrayToString(shaOut)) === (await Uint8ArrayToString(Uint8Array.from(await shaHash(prehashBytesUnpadded)))), \"SHA256 calculation did not match!\");\n\n  // Precompute SHA prefix\n  const selector = STRING_PRESELECTOR_FOR_EMAIL_TYPE.split(\"\").map((char) => char.charCodeAt(0));\n  const selector_loc = await findSelector(bodyPadded, selector);\n  console.log(\"Body selector found at: \", selector_loc);\n  let shaCutoffIndex = Math.floor((await findSelector(bodyPadded, selector)) / 64) * 64;\n  const precomputeText = bodyPadded.slice(0, shaCutoffIndex);\n  let bodyRemaining = bodyPadded.slice(shaCutoffIndex);\n  const bodyRemainingLen = bodyPaddedLen - precomputeText.length;\n  console.log(bodyRemainingLen, \" bytes remaining in body\");\n  assert(bodyRemainingLen < MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE, \"Invalid slice\");\n  assert(bodyRemaining.length % 64 === 0, \"Not going to be padded correctly with int64s\");\n  bodyRemaining = padWithZero(bodyRemaining, MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE);\n  assert(bodyRemaining.length === MAX_BODY_PADDED_BYTES_FOR_EMAIL_TYPE, \"Invalid slice\");\n  const bodyShaPrecompute = await partialSha(precomputeText, shaCutoffIndex);\n\n  // Compute identity revealer\n  let circuitInputs: ICircuitInputs;\n  const modulus = toCircomBigIntBytes(modulusBigInt);\n  const signature = toCircomBigIntBytes(signatureBigInt);\n\n  const in_len_padded_bytes = messagePaddedLen.toString();\n  const in_padded = await Uint8ArrayToCharArray(messagePadded); // Packed into 1 byte signals\n  const in_body_len_padded_bytes = bodyRemainingLen.toString();\n  const in_body_padded = await Uint8ArrayToCharArray(bodyRemaining);\n  const base_message = toCircomBigIntBytes(postShaBigintUnpadded);\n  const precomputed_sha = await Uint8ArrayToCharArray(bodyShaPrecompute);\n  const body_hash_idx = bufferToString(message).indexOf(body_hash).toString();\n\n  let raw_header = Buffer.from(prehash_message_string).toString();\n  const email_from_idx = raw_header.length - trimStrByStr(trimStrByStr(raw_header, \"from:\"), \"<\").length;\n\n  let email_subject = trimStrByStr(raw_header, \"\\r\\nsubject:\");\n  //in javascript, give me a function that extracts the first word in a string, everything before the first space\n\n  if (circuit === CircuitType.RSA) {\n    circuitInputs = {\n      modulus,\n      signature,\n      base_message,\n    };\n  } else if (circuit === CircuitType.EMAIL_VENMO_SEND) {\n    const payee_id_selector = Buffer.from(\"user_id=3D\");\n    const venmo_payee_id_idx = (Buffer.from(bodyRemaining).indexOf(payee_id_selector) + payee_id_selector.length).toString();\n    const payer_id_selector = Buffer.from(\"actor_id=3D\");\n    const venmo_payer_id_idx = (Buffer.from(bodyRemaining).indexOf(payer_id_selector) + payer_id_selector.length).toString();\n    const email_timestamp_idx = (raw_header.length - trimStrByStr(raw_header, \"t=\").length).toString();\n    const venmo_amount_idx = (raw_header.length - trimStrByStr(email_subject, \"$\").length).toString();\n    console.log(\"Indexes into for venmo send email are: \", email_from_idx, venmo_amount_idx, venmo_payee_id_idx, venmo_payer_id_idx, email_timestamp_idx);\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded,\n      in_body_len_padded_bytes,\n      body_hash_idx,\n      // venmo specific indices\n      venmo_amount_idx,\n      email_timestamp_idx,\n      venmo_payee_id_idx,\n      venmo_payer_id_idx,\n      email_from_idx,\n      // IDs\n      intent_hash,\n    };\n  } else if (circuit == CircuitType.EMAIL_VENMO_REGISTRATION) {\n    const actor_id_selector = Buffer.from('&actor_id=3D');\n    const venmo_actor_id_idx = (Buffer.from(bodyRemaining).indexOf(actor_id_selector) + actor_id_selector.length).toString();\n    console.log(\"Indexes into for venmo send email are: \", email_from_idx, venmo_actor_id_idx);\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded,\n      in_body_len_padded_bytes,\n      body_hash_idx,\n      // venmo specific indices\n      venmo_actor_id_idx,\n      email_from_idx,\n    };\n  } else if (circuit == CircuitType.EMAIL_HDFC_SEND) {\n\n    const payee_id_selector = Buffer.from(\"to VPA \");\n    const hdfc_payee_id_idx = (Buffer.from(bodyRemaining).indexOf(payee_id_selector) + payee_id_selector.length).toString();\n\n    const hdfc_amount_selector = Buffer.from(\"Dear Customer,<br> <br> Rs.\");\n    const hdfc_amount_idx = (Buffer.from(bodyRemaining).indexOf(hdfc_amount_selector) + hdfc_amount_selector.length).toString();\n    const bodyRemainingString = Buffer.from(bodyRemaining).toString();\n    const paymentIdRegex = /is ([0-9]+).<br/;\n    const match = bodyRemainingString.match(paymentIdRegex);\n    const hdfc_payment_id_selector = Buffer.from(match ? match[0] : \"NOT A MATCH\");\n    // NOTE: add 3 to skip \"is \" \n    const hdfc_payment_id_idx = (Buffer.from(bodyRemaining).indexOf(hdfc_payment_id_selector) + 3).toString();\n\n    const email_date_idx = (raw_header.length - trimStrByStr(raw_header, \"date:\").length).toString();\n    const email_to_idx = raw_header.length - trimStrByStr(raw_header, \"to:\").length;\n    const hdfc_acc_num_idx = (Buffer.from(bodyRemaining).indexOf(Buffer.from(\"**\")) + Buffer.from(\"**\").length).toString();\n\n    console.log(\"Indexes into for hdfc send email are: \", email_from_idx, hdfc_payee_id_idx, hdfc_amount_idx, email_date_idx, email_to_idx, hdfc_acc_num_idx, hdfc_payment_id_idx)\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded,\n      in_body_len_padded_bytes,\n      body_hash_idx,\n      // hdfc specific indices\n      hdfc_amount_idx,\n      hdfc_payee_id_idx,\n      email_date_idx,\n      email_from_idx,\n      email_to_idx,\n      hdfc_acc_num_idx,\n      hdfc_payment_id_idx,\n      // IDs\n      intent_hash,\n    }\n  } else if (circuit == CircuitType.EMAIL_HDFC_REGISTRATION) {\n    const email_to_idx = raw_header.length - trimStrByStr(raw_header, \"to:\").length;\n    const hdfc_acc_num_idx = (Buffer.from(bodyRemaining).indexOf(Buffer.from(\"**\")) + Buffer.from(\"**\").length).toString();\n\n    console.log(\"Indexes into for hdfc registration email are: \", email_from_idx, email_to_idx, hdfc_acc_num_idx)\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded,\n      in_body_len_padded_bytes,\n      body_hash_idx,\n      // hdfc specific indices\n      email_from_idx,\n      email_to_idx,\n      hdfc_acc_num_idx\n    }\n  } else if (circuit == CircuitType.EMAIL_PAYLAH_SEND) {\n    const paylah_amount_selector = Buffer.from(\"<td>SGD\");\n    const paylah_amount_idx = (Buffer.from(bodyRemaining).indexOf(paylah_amount_selector) + paylah_amount_selector.length).toString();\n\n    const paylah_payer_mobile_num_selector = Buffer.from(\"<td>PayLah! Wallet (Mobile ending \");\n    const paylah_payer_mobile_num_idx = (Buffer.from(bodyRemaining).indexOf(paylah_payer_mobile_num_selector) + paylah_payer_mobile_num_selector.length).toString();\n\n    const paylah_payee_name_selector = Buffer.from(\"To:</td>\\r\\n<td>\");\n    const paylah_payee_name_idx = (Buffer.from(bodyRemaining).indexOf(paylah_payee_name_selector) + paylah_payee_name_selector.length).toString();\n\n    const paylah_payee_mobile_num_selector = Buffer.from(\"Mobile ending \");\n    const first_mobile_ending_idx = Buffer.from(bodyRemaining).indexOf(paylah_payee_mobile_num_selector) + paylah_payee_mobile_num_selector.length;\n    const paylah_payee_mobile_num_idx = (Buffer.from(bodyRemaining).indexOf(paylah_payee_mobile_num_selector, first_mobile_ending_idx) + paylah_payee_mobile_num_selector.length).toString();\n\n    const paylah_payment_id_selector = Buffer.from(\"Transaction Ref: \");\n    const paylah_payment_id_idx = (Buffer.from(bodyRemaining).indexOf(paylah_payment_id_selector) + paylah_payment_id_selector.length).toString();\n\n    const email_timestamp_idx = (raw_header.length - trimStrByStr(raw_header, \"t=\").length).toString();\n    const email_to_idx = raw_header.length - trimStrByStr(raw_header, \"to:\").length;\n    console.log({\n      'email_from_idx': email_from_idx,\n      'email_timestamp_idx': email_timestamp_idx,\n      'email_to_idx': email_to_idx,\n      'paylah_amount_idx': paylah_amount_idx,\n      'paylah_payer_mobile_num_idx': paylah_payer_mobile_num_idx,\n      'paylah_payee_name_idx': paylah_payee_name_idx,\n      'paylah_payee_mobile_num_idx': paylah_payee_mobile_num_idx,\n      'paylah_payment_id_idx': paylah_payment_id_idx\n    })\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded,\n      in_body_len_padded_bytes,\n      body_hash_idx,\n      // paylah specific indices\n      paylah_amount_idx,\n      paylah_payer_mobile_num_idx,\n      paylah_payee_name_idx,\n      paylah_payee_mobile_num_idx,\n      paylah_payment_id_idx,\n      email_from_idx,\n      email_timestamp_idx,\n      email_to_idx,\n      // IDs\n      intent_hash,\n    }\n  } else if (circuit == CircuitType.EMAIL_PAYLAH_REGISTRATION) {\n    const paylah_payer_mobile_num_selector = Buffer.from(\"<td>PayLah! Wallet (Mobile ending \");\n    const paylah_payer_mobile_num_idx = (Buffer.from(bodyRemaining).indexOf(paylah_payer_mobile_num_selector) + paylah_payer_mobile_num_selector.length).toString();\n\n    const email_to_idx = raw_header.length - trimStrByStr(raw_header, \"to:\").length;\n    console.log(\"Indexes into for paylah send email are: \", email_from_idx, email_to_idx, paylah_payer_mobile_num_idx)\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded,\n      in_body_len_padded_bytes,\n      body_hash_idx,\n      // paylah specific indices\n      paylah_payer_mobile_num_idx,\n      email_from_idx,\n      email_to_idx,\n    }\n  } else if (circuit == CircuitType.EMAIL_GARANTI_REGISTRATION) {\n    // Calculate SHA end selector.\n    const intermediateShaSelector = STRING_PRESELECTOR_FOR_EMAIL_TYPE_INTERMEDIATE.split(\"\").map((char) => char.charCodeAt(0));\n    const foundIndex = await findSelector(bodyRemaining, intermediateShaSelector);\n    let intermediateShaCutoffIndex = foundIndex - foundIndex % 64;\n    let intermediateBodyText = bodyRemaining.slice(0, intermediateShaCutoffIndex);\n\n    intermediateBodyText = padWithZero(intermediateBodyText, MAX_INTERMEDIATE_PADDING_LENGTH);\n    const in_body_intermediate = await Uint8ArrayToCharArray(intermediateBodyText);\n\n    const bodyIntermediateLen = intermediateShaCutoffIndex;\n    const in_body_len_intermediate_bytes = bodyIntermediateLen.toString();\n    console.log(bodyIntermediateLen, \" bytes in intermediate body (to be hashed with precomputed and returned to contract)\");\n\n    // Regexes\n    const garanti_payer_name_selector = Buffer.from(\"<p>G&ouml;nderen Bilgileri:<br>\\r\\n                    <strong>\");\n    const garanti_payer_name_idx = (Buffer.from(bodyRemaining).indexOf(garanti_payer_name_selector) + garanti_payer_name_selector.length).toString();\n\n    // Index of mobile number is index of first </strong></p> after payer_name - 7 (length of mobile number)\n    const garanti_payer_mobile_num_selector = Buffer.from(\"</strong></p>\");\n    const garanti_payer_mobile_num_idx = (Buffer.from(bodyRemaining).indexOf(garanti_payer_mobile_num_selector, Number(garanti_payer_name_idx)) - 7).toString();\n\n    let email_from_idx = raw_header.length - trimStrByStr(trimStrByStr(raw_header, \"From:\"), \"<\").length;    // Capital F\n    const email_to_idx = raw_header.length - trimStrByStr(raw_header, \"To: \").length;    // Capital T\n    console.log({\n      'email_from_idx': email_from_idx,\n      'email_to_idx': email_to_idx,\n      'garanti_payer_name_idx': garanti_payer_name_idx,\n      'garanti_payer_mobile_num_idx': garanti_payer_mobile_num_idx\n    });\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded: in_body_intermediate,\n      in_body_len_padded_bytes: in_body_len_intermediate_bytes,\n      body_hash_idx,\n      // garanti specific indices\n      email_from_idx,\n      email_to_idx,\n      garanti_payer_mobile_num_idx\n    }\n  } else if (circuit == CircuitType.EMAIL_GARANTI_SEND) {\n    // Calculate SHA end selector.\n    const intermediateShaSelector = STRING_PRESELECTOR_FOR_EMAIL_TYPE_INTERMEDIATE.split(\"\").map((char) => char.charCodeAt(0));\n    const foundIndex = await findSelector(bodyRemaining, intermediateShaSelector);\n    let intermediateShaCutoffIndex = foundIndex - foundIndex % 64;\n    let intermediateBodyText = bodyRemaining.slice(0, intermediateShaCutoffIndex);\n\n    intermediateBodyText = padWithZero(intermediateBodyText, MAX_INTERMEDIATE_PADDING_LENGTH);\n    const in_body_intermediate = await Uint8ArrayToCharArray(intermediateBodyText);\n\n    const bodyIntermediateLen = intermediateShaCutoffIndex;\n    const in_body_len_intermediate_bytes = bodyIntermediateLen.toString();\n    console.log(bodyIntermediateLen, \" bytes in intermediate body (to be hashed with precomputed and returned to contract)\");\n\n    // Regexes\n    const garanti_payer_name_selector = Buffer.from(\"<p>G&ouml;nderen Bilgileri:<br>\\r\\n                    <strong>\");\n    const garanti_payer_name_idx = (Buffer.from(bodyRemaining).indexOf(garanti_payer_name_selector) + garanti_payer_name_selector.length).toString();\n\n    // Index of mobile number is index of first </strong></p> after payer_name - 7 (length of mobile number)\n    const garanti_payer_mobile_num_selector = Buffer.from(\"</strong></p>\");\n    const garanti_payer_mobile_num_idx = (Buffer.from(bodyRemaining).indexOf(garanti_payer_mobile_num_selector, Number(garanti_payer_name_idx)) - 7).toString();\n\n    // Index of payee name is the <strong> tag after 5 tabs and new line\n    const garanti_payee_name_selector = Buffer.from(\"\\r\\n\\t\\t\\t\\t\\t<strong>\");\n    const garanti_payee_name_idx = (Buffer.from(bodyRemaining).indexOf(garanti_payee_name_selector) + garanti_payee_name_selector.length).toString();\n\n    const garanti_payee_acc_num_selector = Buffer.from(\"<br>TR\");\n    const garanti_payee_acc_num_idx = (Buffer.from(bodyRemaining).indexOf(garanti_payee_acc_num_selector) + \"<br>\".length).toString();\n\n    const garanti_amount_selector = Buffer.from(\"<p>Tutar: <strong>\");\n    const garanti_amount_idx = (Buffer.from(bodyRemaining).indexOf(garanti_amount_selector) + garanti_amount_selector.length).toString();\n\n    let email_from_idx = raw_header.length - trimStrByStr(trimStrByStr(raw_header, \"From:\"), \"<\").length;    // Capital F\n    const email_to_idx = raw_header.length - trimStrByStr(raw_header, \"To: \").length;    // Capital T\n    // TODO: MIGHT NOT WORK ALWAYS!!\n    const email_timestamp_idx = (raw_header.length - trimStrByStr(raw_header, \"t=\").length).toString();    // Look for the first occurence of t=\n\n    console.log({\n      'email_from_idx': email_from_idx,\n      'email_to_idx': email_to_idx,\n      'email_timestamp_idx': email_timestamp_idx,\n      'garanti_payee_name_idx': garanti_payee_name_idx,\n      'garanti_payer_mobile_num_idx': garanti_payer_mobile_num_idx,\n      'garanti_payee_acc_num_idx': garanti_payee_acc_num_idx,\n      'garanti_amount_idx': garanti_amount_idx\n    });\n\n    circuitInputs = {\n      in_padded,\n      modulus,\n      signature,\n      in_len_padded_bytes,\n      precomputed_sha,\n      in_body_padded: in_body_intermediate,\n      in_body_len_padded_bytes: in_body_len_intermediate_bytes,\n      body_hash_idx,\n      // garanti specific indices\n      email_from_idx,\n      email_to_idx,\n      email_timestamp_idx,\n      garanti_payer_mobile_num_idx,\n      garanti_payee_name_idx,\n      garanti_payee_acc_num_idx,\n      garanti_amount_idx,\n      // IDs\n      intent_hash,\n    }\n\n  } else if (circuit == CircuitType.EMAIL_GARANTI_BODY_SUFFIX_HASHER) {\n    const intermediate_hash = precomputed_sha;\n    const in_body_suffix_padded = in_body_padded;\n    const in_body_suffix_len_padded_bytes = in_body_len_padded_bytes;\n\n    // console.log(\"decoded body hash: \", JSON.stringify(intermediate_hash));\n\n    circuitInputs = {\n      intermediate_hash,\n      in_body_suffix_padded,\n      in_body_suffix_len_padded_bytes,\n    }\n  } else if (circuit == CircuitType.EMAIL_NAMECHEAP_PUSH_DOMAIN) {\n    const buyerIdSelector = Buffer.from(\"Login ID: \");\n    const namecheapBuyerIdIndex = (Buffer.from(bodyRemaining).indexOf(buyerIdSelector) + buyerIdSelector.length).toString();\n    const domainNameSelector = Buffer.from(\"domain(s):\\r\\n\");\n    const namecheapDomainNameIndex = (Buffer.from(bodyRemaining).indexOf(domainNameSelector) + domainNameSelector.length).toString();\n\n    const toEmailIndex = raw_header.length - trimStrByStr(trimStrByStr(raw_header, \"to:\"), \"<\").length;\n\n    circuitInputs = {\n      emailHeader: in_padded,\n      pubkey: modulus,\n      signature,\n      emailHeaderLength: in_len_padded_bytes,\n      precomputedSHA: precomputed_sha,\n      emailBody: in_body_padded,\n      emailBodyLength: in_body_len_padded_bytes,\n      bodyHashIndex: body_hash_idx,\n      // namecheap specific indices\n      fromEmailIndex: email_from_idx,\n      namecheapBuyerIdIndex,\n      namecheapDomainNameIndex,\n      // IDs\n      bidId: intent_hash,\n    };\n  }\n  else {\n    assert(circuit === CircuitType.SHA, \"Invalid circuit type\");\n    circuitInputs = {\n      in_padded,\n      in_len_padded_bytes,\n      precomputed_sha,\n    };\n  }\n  return {\n    circuitInputs,\n    valid: {},\n  };\n}\n\n// Nonce is useful to disambiguate files for input/output when calling from the command line, it is usually null or hash(email)\nexport async function generate_inputs(\n  raw_email: Buffer | string,\n  type: CircuitType,\n  intent_hash: string,\n  nonce_raw: number | string | null = null\n): Promise<ICircuitInputs> {\n  const nonce = typeof nonce_raw == \"string\" ? nonce_raw.trim() : nonce_raw;\n\n  var result, email: Buffer;\n  if (typeof raw_email === \"string\") {\n    email = Buffer.from(raw_email);\n  } else email = raw_email;\n  // console.log(email.toString());\n  const processed_email = preProcessEmail(email, type);\n  console.log(processed_email.toString());\n  console.log(\"DKIM verification starting\");\n  result = await dkimVerify(processed_email);\n  // console.log(\"From:\", result.headerFrom);\n  console.log(\"Results:\", result.results[0]);\n  if (!result.results[0]) {\n    throw new Error(`No result found on dkim output ${result}`);\n  } else {\n    if (!result.results[0].publicKey) {\n      if (result.results[0].status.message) {\n        throw new Error(result.results[0].status.message);\n      } else {\n        throw new Error(`No public key found on generate_inputs result ${JSON.stringify(result)}`);\n      }\n    }\n  }\n  const _ = result.results[0].publicKey.toString();\n  console.log(\"DKIM verification successful\");\n  // try {\n  //   // TODO: Condition code on if there is an internet connection, run this code\n  //   var frozen = Cryo.stringify(result);\n  //   fs.writeFileSync(`./email_cache_2.json`, frozen, { flag: \"w\" });\n  // } catch (e) {\n  //   console.log(\"Reading cached email instead!\");\n  //   let frozen = fs.readFileSync(`./email_cache.json`, { encoding: \"utf-8\" });\n  //   result = Cryo.parse(frozen);\n  // }\n  let sig = BigInt(\"0x\" + Buffer.from(result.results[0].signature, \"base64\").toString(\"hex\"));\n  let message = result.results[0].status.signature_header;\n  let body = result.results[0].body;\n  let body_hash = result.results[0].bodyHash;\n\n  let pubkey = result.results[0].publicKey;\n  const pubKeyData = pki.publicKeyFromPem(pubkey.toString());\n  // const pubKeyData = CryptoJS.parseKey(pubkey.toString(), 'pem');\n  let modulus = BigInt(pubKeyData.n.toString());\n  let fin_result = await getCircuitInputs(sig, modulus, message, body, body_hash, intent_hash, type);\n  return fin_result.circuitInputs;\n}\n\n// Sometimes, newline encodings re-encode \\r\\n as just \\n, so re-insert the \\r so that the email hashes correctly\nexport async function insert13Before10(a: Uint8Array): Promise<Uint8Array> {\n  let ret = new Uint8Array(a.length + 1000);\n  let j = 0;\n  for (let i = 0; i < a.length; i++) {\n    // Ensure each \\n is preceded by a \\r\n    if (a[i] === 10 && i > 0 && a[i - 1] !== 13) {\n      ret[j] = 13;\n      j++;\n    }\n    ret[j] = a[i];\n    j++;\n  }\n  return ret.slice(0, j);\n}\n\n\n\nfunction preProcessEmail(email: Buffer, type: CircuitType): Buffer {\n\n  if (type === CircuitType.EMAIL_HDFC_REGISTRATION || type === CircuitType.EMAIL_HDFC_SEND) {\n    console.log(\"Preprocessing HDFC email. Updating message-id with x-google-original-message-id\");\n    return Buffer.from(hdfcReplaceMessageIdWithXGoogleOriginalMessageId(email.toString()));\n  }\n  return email;\n}\n\n// Only called when the whole function is called from the command line, to read inputs\nasync function test_generate(writeToFile: boolean = true) {\n  const args = await getArgs();\n  console.log(`Generating inputs for ${args.payment_type} ${args.circuit_type} with email file ${args.email_file} and output file ${args.output_file_path}`)\n  const email = fs.readFileSync(args.email_file.trim());\n  console.log(\"Email file read\");\n\n  const type = `${args.payment_type}_${args.circuit_type}` as CircuitType;\n  const gen_inputs = await generate_inputs(email, type, args.intentHash, args.nonce);\n  console.log(\"Input generation successful\");\n  if (writeToFile) {\n    fs.writeFileSync(args.output_file_path, JSON.stringify(gen_inputs), { flag: \"w\" });\n  }\n  return gen_inputs;\n}\n\n// If file called directly with `npx tsx generate_inputs.ts`\nif (typeof require !== \"undefined\" && require.main === module) {\n  test_generate(true);\n}\n"
  },
  {
    "path": "circuits-circom/package/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-helpers\",\n    \"version\": \"0.2.6-rc3\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Circom circuit helpers for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"main\": \"dist/generate_input.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/helpers\": \"3.0.2\",\n        \"circomlib\": \"^2.0.5\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/package/preprocess.ts",
    "content": "export function hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str: string) {\n\n    // Replace Message-ID with X-Google-Original-Message-ID if Message-ID contains SMTPIN_ADDED_BROKEN@mx.google.com\n    const messageIdLabel = \"Message-ID: \";\n    const xGoogleMessageIdLabel = \"X-Google-Original-Message-ID: \";\n\n    if (str.indexOf(messageIdLabel) == -1) {\n        return str;\n    }\n\n    const messageIdStart = str.indexOf(messageIdLabel) + messageIdLabel.length;\n    const messageIdEnd = str.indexOf(\"\\n\", messageIdStart);\n    const messageId = str.substring(messageIdStart, messageIdEnd);\n\n    console.log(\"Message ID:\", messageId, \"\\n\");\n\n    if (\n        messageId.includes(\"SMTPIN_ADDED_BROKEN@mx.google.com\") ||\n        messageId.includes(\"SMTPIN_ADDED_BROKEN@MX.GOOGLE.COM\")\n    ) {\n        const xMessageIdStart = str.indexOf\n            (xGoogleMessageIdLabel) + xGoogleMessageIdLabel.length;\n        const xMessageIdEnd = str.indexOf(\"\\n\", xMessageIdStart);\n        const xMessageId = str.substring(xMessageIdStart, xMessageIdEnd);\n\n        console.log(\"X-Google-Original-Message-ID:\", xMessageId, \"\\n\");\n        return str.replace(messageId, xMessageId);\n    }\n\n    return str;\n}"
  },
  {
    "path": "circuits-circom/package/test/preprocess_input.spec.ts",
    "content": "import chai from \"chai\";\nimport { hdfcReplaceMessageIdWithXGoogleOriginalMessageId } from \"../preprocess\";\n\nconst PREFIX = \"Delivered-To: 0xsachink@gmail.com\"\nconst SUFFIX = \"DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=acls01; d=hdfcbank.net;\"\n\nfunction constructEmail(messageId: string, xGoogleMessageId: string, delimeter = \"\\n\") {\n    return `${PREFIX}${delimeter}Message-ID: ${messageId}${delimeter}X-Google-Original-Message-ID: ${xGoogleMessageId}${delimeter}${SUFFIX}${delimeter}`;\n}\n\n\ndescribe(\"HDFC send WASM tester\", function () {\n\n    describe(\"when x-google-original-message-id in caps\", function () {\n\n        const xGoogleMessageId = \"A.1702559867679766244.23077.1156.5.1.0.0.1#0XSACHINK@GMAIL.COM\"\n\n        it(\"Message-ID is not broken\", async function () {\n            const str = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n            const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            chai.expect(returnedString).to.equal(expectedString);\n        });\n\n        it(\"Message-ID is broken and not surrounded with <>\", async function () {\n            const str = constructEmail(\"657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com\", xGoogleMessageId);\n            const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n            const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            chai.expect(returnedString).to.equal(expectedString);\n        });\n\n        it(\"Message-ID is broken and surrounded with <>\", async function () {\n            const str = constructEmail(\"<657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com>\", xGoogleMessageId);\n            const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n            const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            chai.expect(returnedString).to.equal(expectedString);\n        });\n\n        describe(\"when delimeter is \\r\\n\", function () {\n\n            it(\"Message-ID is not broken\", async function () {\n                const str = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n                const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                chai.expect(returnedString).to.equal(expectedString);\n            });\n\n            it(\"Message-ID is broken and not surrounded with <>\", async function () {\n                const str = constructEmail(\"657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com\", xGoogleMessageId, \"\\r\\n\");\n                const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n                const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                chai.expect(returnedString).to.equal(expectedString);\n            });\n\n            it(\"Message-ID is broken and surrounded with <>\", async function () {\n                const str = constructEmail(\"<657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com>\", xGoogleMessageId, \"\\r\\n\");\n                const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n                const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                chai.expect(returnedString).to.equal(expectedString);\n            });\n        });\n    });\n\n    describe(\"when x-google-original-message-id is in lower letters\", function () {\n\n        const xGoogleMessageId = \"A.1702559867679766244.23077.1156.5.1.0.0.1#0xsachink@gmail.com\"\n\n        it(\"Message-ID is not broken\", async function () {\n            const str = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n            const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            chai.expect(returnedString).to.equal(expectedString);\n        });\n\n        it(\"Message-ID is broken and not surrounded with <>\", async function () {\n            const str = constructEmail(\"657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com\", xGoogleMessageId);\n            const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n            const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            chai.expect(returnedString).to.equal(expectedString);\n        });\n\n        it(\"Message-ID is broken and surrounded with <>\", async function () {\n            const str = constructEmail(\"<657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com>\", xGoogleMessageId);\n            const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n            const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId);\n            chai.expect(returnedString).to.equal(expectedString);\n        });\n\n        describe(\"when delimeter is \\r\\n\", function () {\n            it(\"Message-ID is not broken\", async function () {\n                const str = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n                const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                chai.expect(returnedString).to.equal(expectedString);\n            });\n\n            it(\"Message-ID is broken and not surrounded with <>\", async function () {\n                const str = constructEmail(\"657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com\", xGoogleMessageId, \"\\r\\n\");\n                const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n                const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                chai.expect(returnedString).to.equal(expectedString);\n            });\n\n            it(\"Message-ID is broken and surrounded with <>\", async function () {\n                const str = constructEmail(\"<657b007d.650a0220.1a585.45e6SMTPIN_ADDED_BROKEN@mx.google.com>\", xGoogleMessageId, \"\\r\\n\");\n                const returnedString = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(str);\n                const expectedString = constructEmail(xGoogleMessageId, xGoogleMessageId, \"\\r\\n\");\n                chai.expect(returnedString).to.equal(expectedString);\n            });\n        });\n    });\n});"
  },
  {
    "path": "circuits-circom/package/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"declaration\": true,\n    \"outDir\": \"./dist\",\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": false,\n    \"jsx\": \"react-jsx\",\n    \"typeRoots\": [\"./node_modules/@types\", \"./types\"],\n    \"types\": [\"node\", \"jest\"],\n    \"incremental\": true\n  },\n  \"include\": [\"test/*.ts\",  \"test/regexes/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "circuits-circom/scripts/10_run_all.sh",
    "content": "#!/bin/bash\nset -e  # Exit immediately if a command exits with a non-zero status.\n\nsource circuit.env\n\npayment_type=$1\ncircuit_type=$2\n\necho \"Please make sure you have the right upload folder set in circuit.env\"\n\nexport CIRCUIT_NAME=\"${payment_type}_${circuit_type}\"\necho \"CIRCUIT_NAME: $CIRCUIT_NAME\"\n\nyarn gen-input:$payment_type:$circuit_type\n\ncd ../circuits/$CIRCUIT_DIR\nyarn compile:$payment_type:$circuit_type\nyarn test:$payment_type:$circuit_type\nyarn genkey:non-chunked:unsafe:$payment_type:$circuit_type\nyarn uploadkeys:$payment_type:$circuit_type\nyarn genverifier:$payment_type:$circuit_type\nyarn genwitness:$payment_type:$circuit_type\nyarn genproof:$payment_type:$circuit_type\nyarn gencalldata:$payment_type:$circuit_type"
  },
  {
    "path": "circuits-circom/scripts/1_compile.sh",
    "content": "#!/bin/bash\nsource circuit.env\n\nif [ ! -d \"$BUILD_DIR\" ]; then\n    echo \"No build directory found. Creating build directory...\"\n    mkdir -p \"$BUILD_DIR\"\nfi\n\necho '****COMPILING CIRCUIT****'\nstart=$(date +%s)\nset -x\ncircom \"../circuits/$CIRCUIT_DIR/$CIRCUIT_NAME\".circom --r1cs --wasm --sym --c --wat --output \"$BUILD_DIR\" -l \"../circuits/$CIRCUIT_DIR/node_modules\"\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/2_gen_wtns.sh",
    "content": "#!/bin/bash\nsource circuit.env\n\necho \"****GENERATING WITNESS FOR SAMPLE INPUT****\"\nstart=$(date +%s)\nset -x\nnode \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_js/generate_witness.js \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_js/\"$CIRCUIT_NAME\".wasm ../circuits/\"$CIRCUIT_DIR\"/inputs/input_$CIRCUIT_NAME.json \"$BUILD_DIR\"/witness.wtns\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/3_gen_zkey_unsafe.sh",
    "content": "#!/bin/bash\n# Tries to generate a chunked and non-chunked zkey\n# You need to set entropy.env for this to work\n\nsource circuit.env\n\nR1CS_FILE=\"$BUILD_DIR/$CIRCUIT_NAME.r1cs\"\nPARTIAL_ZKEYS=\"$BUILD_DIR\"/partial_zkeys\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\nsource entropy.env\n\necho \"****GENERATING ZKEY NONCHUNKED FINAL****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs zkey new \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".r1cs \"$PHASE1\" \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey -v\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\n# Export the verification key to JSON\necho \"Exporting verification key to JSON...\"\nnode ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs zkey export verificationkey \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_vkey.json\n"
  },
  {
    "path": "circuits-circom/scripts/4_gen_vkey.sh",
    "content": "#!/bin/bash\n\nsource circuit.env\nR1CS_FILE=\"$BUILD_DIR/$CIRCUIT_NAME.r1cs\"\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\n\necho \"****EXPORTING VKEY****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=644000' ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs zkey export verificationkey \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey \"$BUILD_DIR\"/vkey.json\nend=$(date +%s)\n{ set +x; } 2>/dev/null\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/5_gen_proof.sh",
    "content": "#!/bin/bash\n\nsource circuit.env\n\necho \"****GENERATING PROOF FOR SAMPLE INPUT****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=644000' ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs groth16 prove \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey \"$BUILD_DIR\"/witness.wtns \"$BUILD_DIR\"/proof.json \"$BUILD_DIR\"/public.json\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\necho \"****VERIFYING PROOF FOR SAMPLE INPUT****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=644000' ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs groth16 verify \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_vkey.json \"$BUILD_DIR\"/public.json \"$BUILD_DIR\"/proof.json\nend=$(date +%s)\n{ set +x; } 2>/dev/null\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/6_gen_proof_rapidsnark.sh",
    "content": "#!/bin/bash\n\nsource circuit.env\n\n# echo \"****MAKE CPP FILE FOR WITNESS GENERATION****\"\n# start=$(date +%s)\n# set -x\n# make -C \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_cpp/\n# { set +x; } 2>/dev/null\n# end=$(date +%s)\n# echo \"DONE ($((end - start))s)\"\n# echo\n\n# echo \"****GENERATING WITNESS FOR SAMPLE INPUT****\"\n# start=`date +%s`\n# set -x\n# ./\"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_cpp/\"$CIRCUIT_NAME\" input_\"$CIRCUIT_NAME\".json \"$BUILD_DIR\"/witness.wtns\n# { set +x; } 2>/dev/null\n# end=`date +%s`\n# echo \"DONE ($((end-start))s)\"\n# echo\n\necho \"****GENERATING PROOF FOR SAMPLE INPUT****\"\nstart=$(date +%s)\nset -x\n$RAPIDSNARK_PATH \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey \"$BUILD_DIR\"/witness.wtns \"$BUILD_DIR\"/rapidsnark_proof.json \"$BUILD_DIR\"/rapidsnark_public.json\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/7_upload_to_s3.sh",
    "content": "#!/bin/bash\n\nsource circuit.env\necho $UPLOAD_FOLDER\n\necho \"Uploading wasm to s3...\"\npython3 upload_to_s3.py --dirs \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_js/ --upload_dir $UPLOAD_FOLDER/$CIRCUIT_NAME\n\necho \"Uploading c++ dat file to s3\"\npython3 upload_to_s3.py --dirs \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_cpp/ --upload_dir $UPLOAD_FOLDER/$CIRCUIT_NAME\n\necho \"Uploading zkey and vkey.json to s3...\"\npython3 upload_to_s3.py --dirs \"$BUILD_DIR\"/ --upload_dir $UPLOAD_FOLDER/$CIRCUIT_NAME\n"
  },
  {
    "path": "circuits-circom/scripts/8_gen_sol_verifier.sh",
    "content": "#!/bin/bash\nsource circuit.env\n\necho \"Generating solidity verifier...\"\nnode ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs zkey export solidityverifier \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey ../circuits/$CIRCUIT_DIR/contracts/\"$CIRCUIT_NAME\"_verifier.sol"
  },
  {
    "path": "circuits-circom/scripts/9_gen_sol_calldata.sh",
    "content": "#!/bin/bash\nsource circuit.env\n\necho \"Generating solidity calldata...\"\nnode ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs zkey export soliditycalldata \"$BUILD_DIR\"/rapidsnark_public.json \"$BUILD_DIR\"/rapidsnark_proof.json"
  },
  {
    "path": "circuits-circom/scripts/ceremony/1_setup_ceremony.sh",
    "content": "#!/bin/bash\n# You need to set entropy.env for this to work\n\nsource circuit.env\n\nR1CS_FILE=\"$BUILD_DIR/$CIRCUIT_NAME.r1cs\"\nPARTIAL_ZKEYS=\"$BUILD_DIR\"/partial_zkeys\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\nsource entropy.env\n\nif [ ! -d \"$BUILD_DIR\"/partial_zkeys ]; then\n    echo \"No partial_zkeys directory found. Creating partial_zkeys directory...\"\n    mkdir -p \"$BUILD_DIR\"/partial_zkeys\nfi\n\necho \"****GENERATING ZKEY NONCHUNKED 0****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs groth16 setup \"$R1CS_FILE\" \"$PHASE1\" \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_0.zkey -e=$ENTROPY1\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho"
  },
  {
    "path": "circuits-circom/scripts/ceremony/2_contribute_ceremony.sh",
    "content": "#!/bin/bash\n\nsource circuit.env\n\nR1CS_FILE=\"$BUILD_DIR/$CIRCUIT_NAME.r1cs\"\nPARTIAL_ZKEYS=\"$BUILD_DIR\"/partial_zkeys\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\n\nif [ ! -d \"$BUILD_DIR\"/partial_zkeys ]; then\n    echo \"No partial_zkeys directory found. Creating partial_zkeys directory...\"\n    mkdir -p \"$BUILD_DIR\"/partial_zkeys\nfi\n\necho \"****GENERATING ZKEY NONCHUNKED 1****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs zkey contribute \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_\"$PREV_VERSION\".zkey \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_\"$CURR_VERSION\".zkey --name=\"1st Contributor Name\" -v -e=$ENTROPY\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/ceremony/3_finalize_ceremony.sh",
    "content": "#!/bin/bash\n# You need to set entropy.env for this to work\n\nsource circuit.env\n\nPARTIAL_ZKEYS=\"$BUILD_DIR\"/partial_zkeys\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\nsource entropy.env\n\necho \"****GENERATING ZKEY NONCHUNKED FINAL****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../circuits/$CIRCUIT_DIR/node_modules/.bin/snarkjs zkey beacon \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_\"$PREV_VERSION\".zkey \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_final.zkey $BEACON 10 -n=\"Final Beacon phase2\"\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho"
  },
  {
    "path": "circuits-circom/scripts/circuit.env.example",
    "content": "BUILD_DIR=\"../circuits/$CIRCUIT_DIR/build/$CIRCUIT_NAME\"\nPTAU_DIR=\"../..\"\nPTAU=23\nRAPIDSNARK_PATH=./../../rapidsnark/build/prover\nUPLOAD_FOLDER=\"v2/test\""
  },
  {
    "path": "circuits-circom/scripts/deprecated/3_gen_both_zkeys.sh",
    "content": "#!/bin/bash\n# Tries to generate a chunked and non-chunked zkey\n# You need to set entropy.env for this to work\n\nsource circuit.env\n\nR1CS_FILE=\"$BUILD_DIR/$CIRCUIT_NAME.r1cs\"\nPARTIAL_ZKEYS=\"$BUILD_DIR\"/partial_zkeys\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\nsource entropy.env\n\nif [ ! -d \"$BUILD_DIR\"/partial_zkeys ]; then\n    echo \"No partial_zkeys directory found. Creating partial_zkeys directory...\"\n    mkdir -p \"$BUILD_DIR\"/partial_zkeys\nfi\n\n# First, chunked snarkjs\nyarn remove snarkjs\n# mv ../yarn.lock ../yarn.lock_old\n# rm -r ../node_modules_old\n# mv ../node_modules ../node_modules_old\nyarn add snarkjs@git+https://github.com/vb7401/snarkjs.git#24981febe8826b6ab76ae4d76cf7f9142919d2b8\nyarn\n\necho \"****GENERATING ZKEY 0****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs groth16 setup \"$R1CS_FILE\" \"$PHASE1\" \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_0.zkey -e=$ENTROPY1\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\necho \"****GENERATING ZKEY 1****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs zkey contribute \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_0.zkey \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_1.zkey --name=\"1st Contributor Name\" -e=$ENTROPY2\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\necho \"****GENERATING FINAL ZKEY****\"\nstart=$(date +%s)\nset -x\n# hashlib.sha256(b\"sampritiaayush\").hexdigest().upper()\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs zkey beacon \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_1.zkey \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey $BEACON 10 -n=\"Final Beacon phase2\"\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\n# Then, nonchunked snarkjs\nyarn remove snarkjs\n# mv ../yarn.lock ../yarn.lock_old2\n# rm -rf ../node_modules_old2\n# mv ../node_modules ../node_modules_old2\nyarn add snarkjs@latest\n\necho \"****GENERATING ZKEY NONCHUNKED 0****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs groth16 setup \"$R1CS_FILE\" \"$PHASE1\" \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_0.zkey -e=$ENTROPY1\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\necho \"****GENERATING ZKEY NONCHUNKED 1****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs zkey contribute \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_0.zkey \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_1.zkey --name=\"1st Contributor Name\" -v -e=$ENTROPY2\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\necho \"****GENERATING ZKEY NONCHUNKED FINAL****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs zkey beacon \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_1.zkey \"$BUILD_DIR\"/\"$CIRCUIT_NAME\"_nonchunked.zkey $BEACON 10 -n=\"Final Beacon phase2\"\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\nyarn remove snarkjs\n# mv ../yarn.lock ../yarn.lock_old3\n# rm -rf ../node_modules_old3\n# mv ../node_modules ../node_modules_old3\nyarn add snarkjs@git+https://github.com/vb7401/snarkjs.git#24981febe8826b6ab76ae4d76cf7f9142919d2b8\nyarn\n"
  },
  {
    "path": "circuits-circom/scripts/deprecated/3_gen_chunk_zkey.sh",
    "content": "#!/bin/bash\n\nsource circuit.env\n\nR1CS_FILE=\"$BUILD_DIR/$CIRCUIT_NAME.r1cs\"\nPARTIAL_ZKEYS=\"$BUILD_DIR\"/partial_zkeys\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\nsource entropy.env\n\nif [ ! -d \"$BUILD_DIR\"/partial_zkeys ]; then\n    echo \"No partial_zkeys directory found. Creating partial_zkeys directory...\"\n    mkdir -p \"$BUILD_DIR\"/partial_zkeys\nfi\n\necho \"****GENERATING ZKEY NONCHUNKED 0****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs groth16 setup \"$R1CS_FILE\" \"$PHASE1\" \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_0.zkey -e=$ENTROPY1\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\necho \"****GENERATING ZKEY NONCHUNKED 1****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs zkey contribute \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_0.zkey \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_1.zkey --name=\"1st Contributor Name\" -v -e=$ENTROPY2\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n\necho \"****GENERATING ZKEY NONCHUNKED FINAL****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs zkey beacon \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\"_1.zkey \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".zkey $BEACON 10 -n=\"Final Beacon phase2\"\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/deprecated/3_gen_chunk_zkey_unsafe.sh",
    "content": "#!/bin/bash\n\nsource circuit.env\n\nR1CS_FILE=\"$BUILD_DIR/$CIRCUIT_NAME.r1cs\"\nPARTIAL_ZKEYS=\"$BUILD_DIR\"/partial_zkeys\nPHASE1=\"$PTAU_DIR/powersOfTau28_hez_final_$PTAU.ptau\"\nsource entropy.env\n\nif [ ! -d \"$BUILD_DIR\"/partial_zkeys ]; then\n    echo \"No partial_zkeys directory found. Creating partial_zkeys directory...\"\n    mkdir -p \"$BUILD_DIR\"/partial_zkeys\nfi\n\necho \"****GENERATING ZKEY NONCHUNKED FINAL****\"\nstart=$(date +%s)\nset -x\nNODE_OPTIONS='--max-old-space-size=112000' node ../node_modules/.bin/snarkjs zkey new \"$BUILD_DIR\"/\"$CIRCUIT_NAME\".r1cs \"$PHASE1\" \"$PARTIAL_ZKEYS\"/\"$CIRCUIT_NAME\".zkey -v\n{ set +x; } 2>/dev/null\nend=$(date +%s)\necho \"DONE ($((end - start))s)\"\necho\n"
  },
  {
    "path": "circuits-circom/scripts/entropy.env.example",
    "content": "ENTROPY1=\nENTROPY2=\nBEACON=\n"
  },
  {
    "path": "circuits-circom/scripts/upload_to_s3.py",
    "content": "import boto3\nimport os\nimport tarfile\nimport time\nimport gzip\nimport argparse\n\n# Set up the client for the AWS S3 service\ns3 = boto3.client('s3')\n\nparser = argparse.ArgumentParser(description='Upload files to S3 bucket')\nparser.add_argument('--bucket_name', type=str, default='zk-p2p', help='Name of the S3 bucket')\n# parser.add_argument('--build_dir', type=str, default='build', help='Name of the build directory directory with the circuitname/ folder')\n# parser.add_argument('--circuit_name', type=str, default='venmo_send', help='Name of the circuit (i.e. the foldername in build_dir/)')\nparser.add_argument('--prefix_to_tar', type=str, default='venmo_send.zkey,venmo_registration.zkey,hdfc_send.zkey,hdfc_registration.zkey', help='Prefix to match for files in order to compress to a .tar.gz and upload')\nparser.add_argument('--prefix', type=str, default=\n                    'venmo_send.wasm,venmo_registration.wasm,venmo_send_vkey.json,' +\n                    'venmo_registration_vkey.json,venmo_send.dat,venmo_registration.dat,' +\n                    'hdfc_send.wasm,hdfc_registration.wasm,hdfc_send_vkey.json,' +\n                    'hdfc_registration_vkey.json,hdfc_send.dat,hdfc_registration.dat,' +\n                    'paylah_send.wasm,paylah_send_vkey.json,paylah_send.dat,paylah_send.zkey,' +\n                    'paylah_registration.wasm,paylah_registration_vkey.json,paylah_registration.dat,paylah_registration.zkey,' +\n                    'garanti_body_suffix_hasher.wasm,garanti_body_suffix_hasher_vkey.json,garanti_body_suffix_hasher.dat,garanti_body_suffix_hasher.zkey,' +\n                    'garanti_registration.wasm,garanti_registration_vkey.json,garanti_registration.dat,garanti_registration.zkey,' +\n                    'garanti_send.wasm,garanti_send_vkey.json,garanti_send.dat,garanti_send.zkey,' +\n                    'namecheap_push.wasm,namecheap_push_vkey.json,namecheap_push.dat,namecheap_push.zkey',\n                    help='Comma-seperated prefixes to upload without compression')\nparser.add_argument('--dirs', type=str, default='', help='Comma-separated list of directories to upload from')\nparser.add_argument('--upload_dir', type=str, default='', help='Directory to upload to')\nargs = parser.parse_args()\nbucket_name = args.bucket_name\n# build_dir = args.build_dir\n# circuit_name = args.circuit_name\nprefixes_to_tar = args.prefix_to_tar.split(',')\nprefixes = args.prefix.split(',')\ndirs = args.dirs.split(',')\nupload_dir = args.upload_dir\n\n# Set the name of the remote directory and the AWS bucket\n# source = '~/Documents/projects/zk-email-verify'\n# source = '.'\n# zkey_dir = source + '/{build_dir}/{circuit_name}/'\n# wasm_dir = source + '/{build_dir}/{circuit_name}/{circuit_name}_js/'\n\n# Print dirs\n# print(\"zkey_dir: \", zkey_dir)\n# print(\"wasm_dir: \", wasm_dir)\n\n\ndef upload_to_s3(filename, dir=\"\"):\n    with open(dir + filename, 'rb') as file:\n        print(\"Starting upload of \", filename, \"...\")\n        s3.upload_fileobj(file, bucket_name, f\"{upload_dir}/{filename}\", ExtraArgs={\n                          'ACL': 'public-read', 'ContentType': 'binary/octet-stream'})\n        print(\"Done uploading \", filename, \"!\")\n\n\n# Loop through the files in the remote directory\nfor dir in dirs:\n    for file in os.listdir(dir):\n        # Check if the file matches the pattern\n        if any(file.startswith(prefix_to_tar) for prefix_to_tar in prefixes_to_tar):\n            source_file_path = dir + file\n            upload_to_s3(file, dir)  # Uncompressed file\n\n            # Make a .gz file\n            print(\"Compressing .gz: \", source_file_path)\n            gz_file = file + \".gz\"\n            with open(source_file_path, 'rb') as f_in, gzip.open(gz_file, 'wb') as f_out:\n                f_out.write(f_in.read())\n            gz_file_name = file + '.gz'\n            # Upload the zip file to the AWS bucket, overwriting any existing file with the same name\n            upload_to_s3(gz_file)\n\n            # Create a .tar.gz file for the file\n            tar_file_name = file + '.tar.gz'\n            print(\"Compressing .tar.gz: \", source_file_path)\n            with tarfile.open(tar_file_name, 'w:gz') as tar_file:\n                tar_file.add(source_file_path,\n                             arcname=os.path.basename(source_file_path))\n\n            # Upload the .tar.gz file to the AWS bucket, overwriting any existing file with the same name\n            upload_to_s3(tar_file_name)\n\n            os.remove(tar_file_name)\n            os.remove(gz_file_name)\n\n        # If file starts with any one of the prefixes\n        if any(file.startswith(prefix) for prefix in prefixes):\n            # Upload the zip file to the AWS bucket, overwriting any existing file with the same name\n            upload_to_s3(file, dir)\n        # if file.startswith('vkey.json') or file.startswith('email.wasm'):\n        #     upload_to_s3(file, dir)\n\n"
  },
  {
    "path": "circuits-circom/tasks/.yarn/releases/yarn-3.6.3.cjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw new Error('Dynamic require of \"'+r+'\" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,\"default\",{value:r,enumerable:!0}):t,r));var PK=w((z7e,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J(\"fs\");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(\";\"),t.indexOf(\"\")!==-1))return!0;for(var i=0;i<t.length;i++){var n=t[i].toLowerCase();if(n&&r.substr(-n.length).toLowerCase()===n)return!0}return!1}function SK(r,e,t){return!r.isSymbolicLink()&&!r.isFile()?!1:rfe(e,t)}function vK(r,e,t){QK.stat(r,function(i,n){t(i,i?!1:SK(n,r,e))})}function ife(r,e){return SK(QK.statSync(r),r,e)}});var NK=w((V7e,FK)=>{FK.exports=kK;kK.sync=nfe;var DK=J(\"fs\");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),l=parseInt(\"010\",8),c=parseInt(\"001\",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((Z7e,TK)=>{var X7e=J(\"fs\"),lI;process.platform===\"win32\"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e==\"function\"&&(t=e,e={}),!t){if(typeof Promise!=\"function\")throw new TypeError(\"callback not provided\");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code===\"EACCES\"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code===\"EACCES\")return!1;throw t}}});var YK=w((_7e,GK)=>{var Dg=process.platform===\"win32\"||process.env.OSTYPE===\"cygwin\"||process.env.OSTYPE===\"msys\",MK=J(\"path\"),afe=Dg?\";\":\":\",OK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:\"ENOENT\"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\\//)||Dg&&r.match(/\\\\/)?[\"\"]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||\"\").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\":\"\",s=Dg?n.split(t):[\"\"];return Dg&&r.indexOf(\".\")!==-1&&s[0]!==\"\"&&s.unshift(\"\"),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e==\"function\"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^\".*\"$/.test(f)?f.slice(1,-1):f,p=MK.join(h,r),C=!h&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];OK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o<t.length;o++){let a=t[o],l=/^\".*\"$/.test(a)?a.slice(1,-1):a,c=MK.join(l,r),u=!l&&/^\\.[\\\\\\/]/.test(r)?r.slice(0,2)+c:c;for(let g=0;g<i.length;g++){let f=u+i[g];try{if(OK.sync(f,{pathExt:n}))if(e.all)s.push(f);else return f}catch{}}}if(e.all&&s.length)return s;if(e.nothrow)return null;throw KK(r)};GK.exports=HK;HK.sync=Afe});var qK=w(($7e,vS)=>{\"use strict\";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!==\"win32\"?\"PATH\":Object.keys(e).reverse().find(i=>i.toUpperCase()===\"PATH\")||\"Path\"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{\"use strict\";var JK=J(\"path\"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:\"\",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{\"use strict\";var xS=/([()\\][%!^\"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,\"^$1\"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\\\*)\"/g,'$1$1\\\\\"'),r=r.replace(/(\\\\*)$/,\"$1$1\"),r=`\"${r}\"`,r=r.replace(xS,\"^$1\"),e&&(r=r.replace(xS,\"^$1\")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{\"use strict\";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{\"use strict\";var hfe=_K();$K.exports=(r=\"\")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,\"\").split(\" \"),n=t.split(\"/\").pop();return n===\"env\"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{\"use strict\";var DS=J(\"fs\"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,\"r\"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{\"use strict\";var Cfe=J(\"path\"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform===\"win32\",Ife=/\\.(?:com|exe)$/i,yfe=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(\" \");r.args=[\"/d\",\"/s\",\"/c\",`\"${n}\"`],r.command=process.env.comspec||\"cmd.exe\",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{\"use strict\";var kS=process.platform===\"win32\";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:\"ENOENT\",errno:\"ENOENT\",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i===\"exit\"){let s=aU(n,e,\"spawn\");if(s)return t.call(r,\"error\",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawn\"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,\"spawnSync\"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{\"use strict\";var cU=J(\"child_process\"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{\"use strict\";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function Pfe(r,e){e=e!==void 0?e:{};var t={},i={Start:SA},n=SA,s=function(m){return m||[]},o=function(m,Q,N){return[{command:m,type:Q}].concat(N||[])},a=function(m,Q){return[{command:m,type:Q||\";\"}]},l=function(m){return m},c=\";\",u=me(\";\",!1),g=\"&\",f=me(\"&\",!1),h=function(m,Q){return Q?{chain:m,then:Q}:{chain:m}},p=function(m,Q){return{type:m,line:Q}},C=\"&&\",y=me(\"&&\",!1),B=\"||\",v=me(\"||\",!1),D=function(m,Q){return Q?{...m,then:Q}:m},T=function(m,Q){return{type:m,chain:Q}},H=\"|&\",j=me(\"|&\",!1),$=\"|\",V=me(\"|\",!1),W=\"=\",_=me(\"=\",!1),A=function(m,Q){return{name:m,args:[Q]}},Ae=function(m){return{name:m,args:[]}},ge=\"(\",re=me(\"(\",!1),M=\")\",F=me(\")\",!1),ue=function(m,Q){return{type:\"subshell\",subshell:m,args:Q}},pe=\"{\",ke=me(\"{\",!1),Fe=\"}\",Ne=me(\"}\",!1),oe=function(m,Q){return{type:\"group\",group:m,args:Q}},le=function(m,Q){return{type:\"command\",args:Q,envs:m}},Be=function(m){return{type:\"envs\",envs:m}},fe=function(m){return m},ae=function(m){return m},qe=/^[0-9]/,ne=Je([[\"0\",\"9\"]],!1,!1),Y=function(m,Q,N){return{type:\"redirection\",subtype:Q,fd:m!==null?parseInt(m):null,args:[N]}},he=\">>\",ie=me(\">>\",!1),de=\">&\",_e=me(\">&\",!1),Pt=\">\",It=me(\">\",!1),Mr=\"<<<\",ii=me(\"<<<\",!1),gi=\"<&\",hr=me(\"<&\",!1),fi=\"<\",ni=me(\"<\",!1),Ks=function(m){return{type:\"argument\",segments:[].concat(...m)}},pr=function(m){return m},Ii=\"$'\",rs=me(\"$'\",!1),fa=\"'\",dA=me(\"'\",!1),cg=function(m){return[{type:\"text\",text:m}]},is='\"\"',CA=me('\"\"',!1),ha=function(){return{type:\"text\",text:\"\"}},wp='\"',mA=me('\"',!1),EA=function(m){return m},wr=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!0}},Tl=function(m){return{type:\"shell\",shell:m,quoted:!0}},ug=function(m){return{type:\"variable\",...m,quoted:!0}},yo=function(m){return{type:\"text\",text:m}},gg=function(m){return{type:\"arithmetic\",arithmetic:m,quoted:!1}},Bp=function(m){return{type:\"shell\",shell:m,quoted:!1}},bp=function(m){return{type:\"variable\",...m,quoted:!1}},vr=function(m){return{type:\"glob\",pattern:m}},se=/^[^']/,wo=Je([\"'\"],!0,!1),Fn=function(m){return m.join(\"\")},fg=/^[^$\"]/,bt=Je([\"$\",'\"'],!0,!1),Ll=`\\\\\n`,Nn=me(`\\\\\n`,!1),ns=function(){return\"\"},ss=\"\\\\\",gt=me(\"\\\\\",!1),Bo=/^[\\\\$\"`]/,At=Je([\"\\\\\",\"$\",'\"',\"`\"],!1,!1),ln=function(m){return m},S=\"\\\\a\",Lt=me(\"\\\\a\",!1),hg=function(){return\"a\"},Ml=\"\\\\b\",Qp=me(\"\\\\b\",!1),Sp=function(){return\"\\b\"},vp=/^[Ee]/,xp=Je([\"E\",\"e\"],!1,!1),Pp=function(){return\"\\x1B\"},G=\"\\\\f\",yt=me(\"\\\\f\",!1),IA=function(){return\"\\f\"},zi=\"\\\\n\",Ol=me(\"\\\\n\",!1),Xe=function(){return`\n`},pa=\"\\\\r\",pg=me(\"\\\\r\",!1),ME=function(){return\"\\r\"},Dp=\"\\\\t\",OE=me(\"\\\\t\",!1),ar=function(){return\"\t\"},Tn=\"\\\\v\",Kl=me(\"\\\\v\",!1),kp=function(){return\"\\v\"},Us=/^[\\\\'\"?]/,da=Je([\"\\\\\",\"'\",'\"',\"?\"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le=\"\\\\x\",dg=me(\"\\\\x\",!1),Ul=\"\\\\u\",Hs=me(\"\\\\u\",!1),Hl=\"\\\\U\",yA=me(\"\\\\U\",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([[\"0\",\"7\"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"f\"]],!1,!1),bo=nt(),wA=\"-\",Gl=me(\"-\",!1),Gs=\"+\",Yl=me(\"+\",!1),KE=\".\",Rp=me(\".\",!1),Eg=function(m,Q,N){return{type:\"number\",value:(m===\"-\"?-1:1)*parseFloat(Q.join(\"\")+\".\"+N.join(\"\"))}},Fp=function(m,Q){return{type:\"number\",value:(m===\"-\"?-1:1)*parseInt(Q.join(\"\"))}},UE=function(m){return{type:\"variable\",...m}},jl=function(m){return{type:\"variable\",name:m}},HE=function(m){return m},Ig=\"*\",BA=me(\"*\",!1),Rr=\"/\",GE=me(\"/\",!1),Ys=function(m,Q,N){return{type:Q===\"*\"?\"multiplication\":\"division\",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q===\"+\"?\"addition\":\"subtraction\",right:N}},bA=\"$((\",R=me(\"$((\",!1),q=\"))\",Ce=me(\"))\",!1),Ke=function(m){return m},Re=\"$(\",ze=me(\"$(\",!1),dt=function(m){return m},Ft=\"${\",Ln=me(\"${\",!1),JQ=\":-\",k1=me(\":-\",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=\":-}\",F1=me(\":-}\",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=\":+\",T1=me(\":+\",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=\":+}\",M1=me(\":+}\",!1),O1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1=\"$\",U1=me(\"$\",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\\-]/,tS=Je([\"$\",\"@\",\"*\",\"?\",\"#\",[\"a\",\"z\"],[\"A\",\"Z\"],[\"0\",\"9\"],\"_\",\"-\"],!1,!1),Y1=/^[(){}<>$|&; \\t\"']/,wg=Je([\"(\",\")\",\"{\",\"}\",\"<\",\">\",\"$\",\"|\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),rS=/^[<>&; \\t\"']/,iS=Je([\"<\",\">\",\"&\",\";\",\" \",\"\t\",'\"',\"'\"],!1,!1),YE=/^[ \\t]/,jE=Je([\" \",\"\t\"],!1,!1),b=0,Oe=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function L(){return r.substring(Oe,b)}function Z(){return Et(Oe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Ri([lt(m)],r.substring(Oe,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Oe,b),Mn(m,Q)}function me(m,Q){return{type:\"literal\",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:\"class\",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:\"any\"}}function wt(){return{type:\"end\"}}function lt(m){return{type:\"other\",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};N<m;)r.charCodeAt(N)===10?(Q.line++,Q.column=1):Q.column++,N++;return QA[m]=Q,Q}function Et(m,Q){var N=it(m),U=it(Q);return{start:{offset:m,line:N.line,column:N.column},end:{offset:Q,line:U.line,column:U.column}}}function be(m){b<d||(b>d&&(d=b,E=[]),E.push(m))}function Mn(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Or(),Q===t&&(Q=null),Q!==t&&(Oe=m,Q=s(Q)),m=Q,m}function Or(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Oe=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Oe=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Or(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Oe=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Oe=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Oe=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=M,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Or(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Oe=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Oe=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Oe=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Oe=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Mr?(m=Mr,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Oe=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Oe=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Oe=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Oe=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Oe=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Oe=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Oe=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Oe=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Oe=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Oe=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Oe=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Oe=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Oe=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ml?(Q=Ml,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Oe=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Oe=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Oe=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ol)),Q!==t&&(Oe=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Oe=m,Q=ME()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(OE)),Q!==t&&(Oe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Oe=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Oe=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=On(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=On(),ce!==t?(Se=On(),Se!==t?(ht=On(),ht!==t?(Bt=On(),Bt!==t?(qr=On(),qr!==t?(hi=On(),hi!==t?(as=On(),as!==t?(AS=On(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Oe=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function On(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Oe=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Oe=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Oe=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Oe=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=M,b++):(Se=t,I===0&&be(F)),Se!==t?(Oe=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Oe=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Oe=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Oe=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Oe=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Or(),N!==t?(r.charCodeAt(b)===41?(U=M,b++):(U=t,I===0&&be(F)),U!==t?(Oe=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Oe=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Oe=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(M1)),U!==t?(Oe=m,Q=O1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Oe=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Oe=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Oe=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Oe=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Oe=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Oe=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b<r.length&&be(wt()),Ri(E,d<r.length?r.charAt(d):null,d<r.length?Et(d,d+1):Et(d,d))}gU.exports={SyntaxError:Zl,parse:Pfe}});var dU=w((wZe,pU)=>{\"use strict\";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function kfe(r,e){e=e!==void 0?e:{};var t={},i={resolution:le},n=le,s=\"/\",o=ge(\"/\",!1),a=function(ne,Y){return{from:ne,descriptor:Y}},l=function(ne){return{descriptor:ne}},c=\"@\",u=ge(\"@\",!1),g=function(ne,Y){return{fullName:ne,description:Y}},f=function(ne){return{fullName:ne}},h=function(){return W()},p=/^[^\\/@]/,C=re([\"/\",\"@\"],!0,!1),y=/^[^\\/]/,B=re([\"/\"],!0,!1),v=0,D=0,T=[{line:1,column:1}],H=0,j=[],$=0,V;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function W(){return r.substring(D,v)}function _(){return ke(D,v)}function A(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),oe([ue(ne)],r.substring(D,v),Y)}function Ae(ne,Y){throw Y=Y!==void 0?Y:ke(D,v),Ne(ne,Y)}function ge(ne,Y){return{type:\"literal\",text:ne,ignoreCase:Y}}function re(ne,Y,he){return{type:\"class\",parts:ne,inverted:Y,ignoreCase:he}}function M(){return{type:\"any\"}}function F(){return{type:\"end\"}}function ue(ne){return{type:\"other\",description:ne}}function pe(ne){var Y=T[ne],he;if(Y)return Y;for(he=ne-1;!T[he];)he--;for(Y=T[he],Y={line:Y.line,column:Y.column};he<ne;)r.charCodeAt(he)===10?(Y.line++,Y.column=1):Y.column++,he++;return T[ne]=Y,Y}function ke(ne,Y){var he=pe(ne),ie=pe(Y);return{start:{offset:ne,line:he.line,column:he.column},end:{offset:Y,line:ie.line,column:ie.column}}}function Fe(ne){v<H||(v>H&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v<r.length&&Fe(F()),oe(j,H<r.length?r.charAt(H):null,H<r.length?ke(H,H+1):ke(H,H))}pU.exports={SyntaxError:$l,parse:kfe}});var tc=w((bZe,ec)=>{\"use strict\";function mU(r){return typeof r>\"u\"||r===null}function Rfe(r){return typeof r==\"object\"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t<i;t+=1)n=s[t],r[n]=e[n];return r}function Tfe(r,e){var t=\"\",i;for(i=0;i<e;i+=1)t+=r;return t}function Lfe(r){return r===0&&Number.NEGATIVE_INFINITY===1/r}ec.exports.isNothing=mU;ec.exports.isObject=Rfe;ec.exports.toArray=Ffe;ec.exports.repeat=Tfe;ec.exports.isNegativeZero=Lfe;ec.exports.extend=Nfe});var Ng=w((QZe,EU)=>{\"use strict\";function Vp(r,e){Error.call(this),this.name=\"YAMLException\",this.reason=r,this.mark=e,this.message=(this.reason||\"(unknown reason)\")+(this.mark?\" \"+this.mark.toString():\"\"),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\"}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+\": \";return t+=this.reason||\"(unknown reason)\",!e&&this.mark&&(t+=\" \"+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{\"use strict\";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i=\"\",n=this.position;n>0&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=\" ... \",n+=5;break}for(s=\"\",o=this.position;o<this.buffer.length&&`\\0\\r\n\\x85\\u2028\\u2029`.indexOf(this.buffer.charAt(o))===-1;)if(o+=1,o-this.position>t/2-1){s=\" ... \",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(\" \",e)+i+a+s+`\n`+IU.repeat(\" \",e+this.position-n+i.length)+\"^\"};HS.prototype.toString=function(e){var t,i=\"\";return this.name&&(i+='in \"'+this.name+'\" '),i+=\"at line \"+(this.line+1)+\", column \"+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`:\n`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{\"use strict\";var BU=Ng(),Mfe=[\"kind\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"defaultStyle\",\"styleAliases\"],Ofe=[\"scalar\",\"sequence\",\"mapping\"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Mfe.indexOf(t)===-1)throw new BU('Unknown option \"'+t+'\" is met in definition of \"'+r+'\" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Ofe.indexOf(this.kind)===-1)throw new BU('Unknown kind \"'+this.kind+'\" is specified for \"'+r+'\" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{\"use strict\";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return r}function Tg(r){this.include=r.include||[],this.implicit=r.implicit||[],this.explicit=r.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&e.loadKind!==\"scalar\")throw new dI(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\")}),this.compiledImplicit=GS(this,\"implicit\",[]),this.compiledExplicit=GS(this,\"explicit\",[]),this.compiledTypeMap=Gfe(this.compiledImplicit,this.compiledExplicit)}Tg.DEFAULT=null;Tg.create=function(){var e,t;switch(arguments.length){case 1:e=Tg.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new dI(\"Wrong number of arguments for Schema.create function\")}if(e=QU.toArray(e),t=QU.toArray(t),!e.every(function(i){return i instanceof Tg}))throw new dI(\"Specified list of super schemas (or a single Schema object) contains a non-Schema object.\");if(!t.every(function(i){return i instanceof Hfe}))throw new dI(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");return new Tg({include:e,explicit:t})};SU.exports=Tg});var xU=w((PZe,vU)=>{\"use strict\";var Yfe=si();vU.exports=new Yfe(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(r){return r!==null?r:\"\"}})});var DU=w((DZe,PU)=>{\"use strict\";var jfe=si();PU.exports=new jfe(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{\"use strict\";var qfe=si();kU.exports=new qfe(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{\"use strict\";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{\"use strict\";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r===\"~\"||e===4&&(r===\"null\"||r===\"Null\"||r===\"NULL\")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"}},defaultStyle:\"lowercase\"})});var MU=w((NZe,LU)=>{\"use strict\";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r===\"true\"||r===\"True\"||r===\"TRUE\")||e===5&&(r===\"false\"||r===\"False\"||r===\"FALSE\")}function $fe(r){return r===\"true\"||r===\"True\"||r===\"TRUE\"}function ehe(r){return Object.prototype.toString.call(r)===\"[object Boolean]\"}LU.exports=new Zfe(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?\"true\":\"false\"},uppercase:function(r){return r?\"TRUE\":\"FALSE\"},camelcase:function(r){return r?\"True\":\"False\"}},defaultStyle:\"lowercase\"})});var KU=w((TZe,OU)=>{\"use strict\";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n===\"-\"||n===\"+\")&&(n=r[++t]),n===\"0\"){if(t+1===e)return!0;if(n=r[++t],n===\"b\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(n!==\"0\"&&n!==\"1\")return!1;i=!0}return i&&n!==\"_\"}if(n===\"x\"){for(t++;t<e;t++)if(n=r[t],n!==\"_\"){if(!ihe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}for(;t<e;t++)if(n=r[t],n!==\"_\"){if(!nhe(r.charCodeAt(t)))return!1;i=!0}return i&&n!==\"_\"}if(n===\"_\")return!1;for(;t<e;t++)if(n=r[t],n!==\"_\"){if(n===\":\")break;if(!she(r.charCodeAt(t)))return!1;i=!0}return!i||n===\"_\"?!1:n!==\":\"?!0:/^(:[0-5]?[0-9])+$/.test(r.slice(t))}function ahe(r){var e=r,t=1,i,n,s=[];return e.indexOf(\"_\")!==-1&&(e=e.replace(/_/g,\"\")),i=e[0],(i===\"-\"||i===\"+\")&&(i===\"-\"&&(t=-1),e=e.slice(1),i=e[0]),e===\"0\"?0:i===\"0\"?e[1]===\"b\"?t*parseInt(e.slice(2),2):e[1]===\"x\"?t*parseInt(e,16):t*parseInt(e,8):e.indexOf(\":\")!==-1?(e.split(\":\").forEach(function(o){s.unshift(parseInt(o,10))}),e=0,n=1,s.forEach(function(o){e+=o*n,n*=60}),t*e):t*parseInt(e,10)}function Ahe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&r%1===0&&!the.isNegativeZero(r)}OU.exports=new rhe(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:ohe,construct:ahe,predicate:Ahe,represent:{binary:function(r){return r>=0?\"0b\"+r.toString(2):\"-0b\"+r.toString(2).slice(1)},octal:function(r){return r>=0?\"0\"+r.toString(8):\"-0\"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?\"0x\"+r.toString(16).toUpperCase():\"-0x\"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}})});var GU=w((LZe,HU)=>{\"use strict\";var UU=tc(),lhe=si(),che=new RegExp(\"^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]===\"_\")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,\"\").toLowerCase(),t=e[0]===\"-\"?-1:1,n=[],\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),e===\".inf\"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===\".nan\"?NaN:e.indexOf(\":\")>=0?(e.split(\":\").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===r)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(UU.isNegativeZero(r))return\"-0.0\";return t=r.toString(10),fhe.test(t)?t.replace(\"e\",\".e\"):t}function phe(r){return Object.prototype.toString.call(r)===\"[object Number]\"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:\"lowercase\"})});var YS=w((MZe,YU)=>{\"use strict\";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),MU(),KU(),GU()]})});var jS=w((OZe,jU)=>{\"use strict\";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{\"use strict\";var mhe=si(),qU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),JU=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error(\"Date resolve error\");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+=\"0\";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]===\"-\"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{\"use strict\";var whe=si();function Bhe(r){return r===\"<<\"||r===null}VU.exports=new whe(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:Bhe})});var $U=w((HZe,_U)=>{\"use strict\";var ic;try{ZU=J,ic=ZU(\"buffer\").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t<n;t++)if(e=s.indexOf(r.charAt(t)),!(e>64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\\r\\n=]/g,\"\"),n=i.length,s=qS,o=0,a=[];for(e=0;e<n;e++)e%4===0&&e&&(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e=\"\",t=0,i,n,s=r.length,o=qS;for(i=0;i<s;i++)i%3===0&&i&&(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{\"use strict\";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t<i;t+=1){if(n=a[t],o=!1,khe.call(n)!==\"[object Object]\")return!1;for(s in n)if(Dhe.call(n,s))if(!o)o=!0;else return!1;if(!o)return!1;if(e.indexOf(s)===-1)e.push(s);else return!1}return!0}function Fhe(r){return r!==null?r:[]}e2.exports=new Phe(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:Rhe,construct:Fhe})});var i2=w((jZe,r2)=>{\"use strict\";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1){if(i=o[e],The.call(i)!==\"[object Object]\"||(n=Object.keys(i),n.length!==1))return!1;s[e]=[n[0],i[n[0]]]}return!0}function Mhe(r){if(r===null)return[];var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e<t;e+=1)i=o[e],n=Object.keys(i),s[e]=[n[0],i[n[0]]];return s}r2.exports=new Nhe(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:Lhe,construct:Mhe})});var s2=w((qZe,n2)=>{\"use strict\";var Ohe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Ohe(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{\"use strict\";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{\"use strict\";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return\"\"}function Whe(r){return typeof r>\"u\"}a2.exports=new Yhe(\"tag:yaml.org,2002:js/undefined\",{kind:\"scalar\",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{\"use strict\";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return!(e[0]===\"/\"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!==\"/\"))}function Xhe(r){var e=r,t=/\\/([gim]*)$/.exec(r),i=\"\";return e[0]===\"/\"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e=\"/\"+r.source+\"/\";return r.global&&(e+=\"g\"),r.multiline&&(e+=\"m\"),r.ignoreCase&&(e+=\"i\"),e}function _he(r){return Object.prototype.toString.call(r)===\"[object RegExp]\"}l2.exports=new zhe(\"tag:yaml.org,2002:js/regexp\",{kind:\"scalar\",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{\"use strict\";var mI;try{u2=J,mI=u2(\"esprima\")}catch{typeof window<\"u\"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0});return!(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")}catch{return!1}}function tpe(r){var e=\"(\"+r+\")\",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!==\"Program\"||t.body.length!==1||t.body[0].type!==\"ExpressionStatement\"||t.body[0].expression.type!==\"ArrowFunctionExpression\"&&t.body[0].expression.type!==\"FunctionExpression\")throw new Error(\"Failed to resolve function\");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type===\"BlockStatement\"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,\"return \"+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)===\"[object Function]\"}g2.exports=new $he(\"tag:yaml.org,2002:js/function\",{kind:\"scalar\",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{\"use strict\";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{\"use strict\";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Ape=/[\\x85\\u2028\\u2029]/,lpe=/[,\\[\\]\\{\\}]/,S2=/^(?:!|!!|![a-z\\-]+!)$/i,v2=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Mg(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?\"\\0\":r===97?\"\\x07\":r===98?\"\\b\":r===116||r===9?\"\t\":r===110?`\n`:r===118?\"\\v\":r===102?\"\\f\":r===114?\"\\r\":r===101?\"\\x1B\":r===32?\" \":r===34?'\"':r===47?\"/\":r===92?\"\\\\\":r===78?\"\\x85\":r===95?\"\\xA0\":r===76?\"\\u2028\":r===80?\"\\u2029\":\"\"}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,\"duplication of %YAML directive\"),i.length!==1&&ft(e,\"YAML directive accepts exactly one argument\"),n=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,\"ill-formed argument of the YAML directive\"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,\"TAG directive accepts exactly two arguments\"),n=i[0],s=i[1],S2.test(n)||ft(e,\"ill-formed tag handle (first argument) of the TAG directive\"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for \"'+n+'\" tag handle'),v2.test(s)||ft(e,\"ill-formed tag prefix (second argument) of the TAG directive\"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e<t){if(a=r.input.slice(e,t),i)for(n=0,s=a.length;n<s;n+=1)o=a.charCodeAt(n),o===9||32<=o&&o<=1114111||ft(r,\"expected valid JSON character\");else ape.test(a)&&ft(r,\"the stream contains non-printable characters\");r.result+=a}}function I2(r,e,t,i){var n,s,o,a;for(Ba.isObject(t)||ft(r,\"cannot merge mappings; the provided source object is unacceptable\"),n=Object.keys(t),o=0,a=n.length;o<a;o+=1)s=n[o],kA.call(e,s)||(e[s]=t[s],i[s]=!0)}function Og(r,e,t,i,n,s,o,a){var l,c;if(Array.isArray(n))for(n=Array.prototype.slice.call(n),l=0,c=n.length;l<c;l+=1)Array.isArray(n[l])&&ft(r,\"nested arrays are not supported inside keys\"),typeof n==\"object\"&&C2(n[l])===\"[object Object]\"&&(n[l]=\"[object Object]\");if(typeof n==\"object\"&&C2(n)===\"[object Object]\"&&(n=\"[object Object]\"),n=String(n),e===null&&(e={}),i===\"tag:yaml.org,2002:merge\")if(Array.isArray(s))for(l=0,c=s.length;l<c;l+=1)I2(r,e,s[l],t);else I2(r,e,s,t);else!r.json&&!kA.call(t,n)&&kA.call(e,n)&&(r.line=o||r.line,r.position=a||r.position,ft(r,\"duplicated mapping key\")),e[n]=s,delete t[n];return e}function WS(r){var e;e=r.input.charCodeAt(r.position),e===10?r.position++:e===13?(r.position++,r.input.charCodeAt(r.position)===10&&r.position++):ft(r,\"a line break is expected\"),r.line+=1,r.lineStart=r.position}function zr(r,e,t){for(var i=0,n=r.input.charCodeAt(r.position);n!==0;){for(;sc(n);)n=r.input.charCodeAt(++r.position);if(e&&n===35)do n=r.input.charCodeAt(++r.position);while(n!==10&&n!==13&&n!==0);if(xo(n))for(WS(r),n=r.input.charCodeAt(r.position),i++,r.lineIndent=0;n===32;)r.lineIndent++,n=r.input.charCodeAt(++r.position);else break}return t!==-1&&i!==0&&r.lineIndent<t&&yI(r,\"deficient indentation\"),i}function wI(r){var e=r.position,t;return t=r.input.charCodeAt(e),!!((t===45||t===46)&&t===r.input.charCodeAt(e+1)&&t===r.input.charCodeAt(e+2)&&(e+=3,t=r.input.charCodeAt(e),t===0||fn(t)))}function zS(r,e){e===1?r.result+=\" \":e>1&&(r.result+=Ba.repeat(`\n`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Mg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n)))return!1;for(r.kind=\"scalar\",r.result=\"\",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Mg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Mg(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a single quoted scalar\"):(r.position++,n=r.position);ft(r,\"unexpected end of the stream within a single quoted scalar\")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind=\"scalar\",r.result=\"\",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,\"expected hexadecimal character\");r.result+=fpe(s),r.position++}else ft(r,\"unknown escape sequence\");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,\"unexpected end of the document within a double quoted scalar\"):(r.position++,i=r.position)}ft(r,\"unexpected end of the stream within a double quoted scalar\")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?\"mapping\":\"sequence\",r.result=s,!0;t||ft(r,\"missed comma between flow collection entries\"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Og(r,s,f,p,h,C):c?s.push(Og(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,\"unexpected end of the stream within a flow collection\")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind=\"scalar\",r.result=\"\";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,\"repeat of a chomping mode identifier\");else if((u=gpe(g))>=0)u===0?ft(r,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):o?ft(r,\"repeat of an indentation width identifier\"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndent<a)&&g===32;)r.lineIndent++,g=r.input.charCodeAt(++r.position);if(!o&&r.lineIndent>a&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndent<a){n===d2?r.result+=Ba.repeat(`\n`,s?1+l:l):n===JS&&s&&(r.result+=`\n`);break}for(i?sc(g)?(c=!0,r.result+=Ba.repeat(`\n`,s?1+l:l)):c?(c=!1,r.result+=Ba.repeat(`\n`,l+1)):l===0?s&&(r.result+=\" \"):r.result+=Ba.repeat(`\n`,l):r.result+=Ba.repeat(`\n`,s?1+l:l),s=!0,o=!0,l=0,t=r.position;!xo(g)&&g!==0;)g=r.input.charCodeAt(++r.position);DA(r,t,r.position,!1)}return!0}function y2(r,e){var t,i=r.tag,n=r.anchor,s=[],o,a=!1,l;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),l=r.input.charCodeAt(r.position);l!==0&&!(l!==45||(o=r.input.charCodeAt(r.position+1),!fn(o)));){if(a=!0,r.position++,zr(r,!0,-1)&&r.lineIndent<=e){s.push(null),l=r.input.charCodeAt(r.position);continue}if(t=r.line,Kg(r,e,Q2,!1,!0),s.push(r.result),zr(r,!0,-1),l=r.input.charCodeAt(r.position),(r.line===t||r.lineIndent>e)&&l!==0)ft(r,\"bad indentation of a sequence entry\");else if(r.lineIndent<e)break}return a?(r.tag=i,r.anchor=n,r.kind=\"sequence\",r.result=s,!0):!1}function Ipe(r,e,t){var i,n,s,o,a=r.tag,l=r.anchor,c={},u={},g=null,f=null,h=null,p=!1,C=!1,y;for(r.anchor!==null&&(r.anchorMap[r.anchor]=c),y=r.input.charCodeAt(r.position);y!==0;){if(i=r.input.charCodeAt(r.position+1),s=r.line,o=r.position,(y===63||y===58)&&fn(i))y===63?(p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!0,n=!0):p?(p=!1,n=!0):ft(r,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),r.position+=1,y=i;else if(Kg(r,t,b2,!1,!0))if(r.line===s){for(y=r.input.charCodeAt(r.position);sc(y);)y=r.input.charCodeAt(++r.position);if(y===58)y=r.input.charCodeAt(++r.position),fn(y)||ft(r,\"a whitespace character is expected after the key-value separator within a block mapping\"),p&&(Og(r,c,u,g,f,null),g=f=h=null),C=!0,p=!1,n=!1,g=r.tag,f=r.result;else if(C)ft(r,\"can not read an implicit mapping pair; a colon is missed\");else return r.tag=a,r.anchor=l,!0}else if(C)ft(r,\"can not read a block mapping entry; a multiline key may not be an implicit key\");else return r.tag=a,r.anchor=l,!0;else break;if((r.line===s||r.lineIndent>e)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Og(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,\"bad indentation of a mapping entry\");else if(r.lineIndent<e)break}return p&&Og(r,c,u,g,f,null),C&&(r.tag=a,r.anchor=l,r.kind=\"mapping\",r.result=c),C}function ype(r){var e,t=!1,i=!1,n,s,o;if(o=r.input.charCodeAt(r.position),o!==33)return!1;if(r.tag!==null&&ft(r,\"duplication of a tag property\"),o=r.input.charCodeAt(++r.position),o===60?(t=!0,o=r.input.charCodeAt(++r.position)):o===33?(i=!0,n=\"!!\",o=r.input.charCodeAt(++r.position)):n=\"!\",e=r.position,t){do o=r.input.charCodeAt(++r.position);while(o!==0&&o!==62);r.position<r.length?(s=r.input.slice(e,r.position),o=r.input.charCodeAt(++r.position)):ft(r,\"unexpected end of the stream within a verbatim tag\")}else{for(;o!==0&&!fn(o);)o===33&&(i?ft(r,\"tag suffix cannot contain exclamation marks\"):(n=r.input.slice(e-1,r.position+1),S2.test(n)||ft(r,\"named tag handle cannot contain such characters\"),i=!0,e=r.position+1)),o=r.input.charCodeAt(++r.position);s=r.input.slice(e,r.position),lpe.test(s)&&ft(r,\"tag suffix cannot contain flow indicator characters\")}return s&&!v2.test(s)&&ft(r,\"tag name cannot contain such characters: \"+s),t?r.tag=s:kA.call(r.tagMap,n)?r.tag=r.tagMap[n]+s:n===\"!\"?r.tag=\"!\"+s:n===\"!!\"?r.tag=\"tag:yaml.org,2002:\"+s:ft(r,'undeclared tag handle \"'+n+'\"'),!0}function wpe(r){var e,t;if(t=r.input.charCodeAt(r.position),t!==38)return!1;for(r.anchor!==null&&ft(r,\"duplication of an anchor property\"),t=r.input.charCodeAt(++r.position),e=r.position;t!==0&&!fn(t)&&!Mg(t);)t=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an anchor node must contain at least one character\"),r.anchor=r.input.slice(e,r.position),!0}function Bpe(r){var e,t,i;if(i=r.input.charCodeAt(r.position),i!==42)return!1;for(i=r.input.charCodeAt(++r.position),e=r.position;i!==0&&!fn(i)&&!Mg(i);)i=r.input.charCodeAt(++r.position);return r.position===e&&ft(r,\"name of an alias node must contain at least one character\"),t=r.input.slice(e,r.position),kA.call(r.anchorMap,t)||ft(r,'unidentified alias \"'+t+'\"'),r.result=r.anchorMap[t],zr(r,!0,-1),!0}function Kg(r,e,t,i,n){var s,o,a,l=1,c=!1,u=!1,g,f,h,p,C;if(r.listener!==null&&r.listener(\"open\",r),r.tag=null,r.anchor=null,r.kind=null,r.result=null,s=o=a=II===t||Q2===t,i&&zr(r,!0,-1)&&(c=!0,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)),l===1)for(;ype(r)||wpe(r);)zr(r,!0,-1)?(c=!0,a=s,r.lineIndent>e?l=1:r.lineIndent===e?l=0:r.lineIndent<e&&(l=-1)):a=!1;if(a&&(a=c||n),(l===1||II===t)&&(EI===t||b2===t?p=e:p=e+1,C=r.position-r.lineStart,l===1?a&&(y2(r,C)||Ipe(r,C,p))||mpe(r,p)?u=!0:(o&&Epe(r,p)||dpe(r,p)||Cpe(r,p)?u=!0:Bpe(r)?(u=!0,(r.tag!==null||r.anchor!==null)&&ft(r,\"alias node should not have any properties\")):ppe(r,p,EI===t)&&(u=!0,r.tag===null&&(r.tag=\"?\")),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):l===0&&(u=a&&y2(r,C))),r.tag!==null&&r.tag!==\"!\")if(r.tag===\"?\"){for(r.result!==null&&r.kind!==\"scalar\"&&ft(r,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+r.kind+'\"'),g=0,f=r.implicitTypes.length;g<f;g+=1)if(h=r.implicitTypes[g],h.resolve(r.result)){r.result=h.construct(r.result),r.tag=h.tag,r.anchor!==null&&(r.anchorMap[r.anchor]=r.result);break}}else kA.call(r.typeMap[r.kind||\"fallback\"],r.tag)?(h=r.typeMap[r.kind||\"fallback\"][r.tag],r.result!==null&&h.kind!==r.kind&&ft(r,\"unacceptable node kind for !<\"+r.tag+'> tag; it should be \"'+h.kind+'\", not \"'+r.kind+'\"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,\"cannot resolve a node with !<\"+r.tag+\"> explicit tag\")):ft(r,\"unknown tag !<\"+r.tag+\">\");return r.listener!==null&&r.listener(\"close\",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,\"directive name must not be less than one character in length\");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive \"'+i+'\"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,\"directives end mark is expected\"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,\"non-ASCII line breaks are interpreted as content\"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position<r.length-1)ft(r,\"end of the stream or a document separator is expected\");else return}function k2(r,e){r=String(r),e=e||{},r.length!==0&&(r.charCodeAt(r.length-1)!==10&&r.charCodeAt(r.length-1)!==13&&(r+=`\n`),r.charCodeAt(0)===65279&&(r=r.slice(1)));var t=new hpe(r,e),i=r.indexOf(\"\\0\");for(i!==-1&&(t.position=i,ft(t,\"null byte is not allowed in input\")),t.input+=\"\\0\";t.input.charCodeAt(t.position)===32;)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)bpe(t);return t.documents}function R2(r,e,t){e!==null&&typeof e==\"object\"&&typeof t>\"u\"&&(t=e,e=null);var i=k2(r,t);if(typeof e!=\"function\")return i;for(var n=0,s=i.length;n<s;n+=1)e(i[n])}function F2(r,e){var t=k2(r,e);if(t.length!==0){if(t.length===1)return t[0];throw new w2(\"expected a single document in the stream, but found more\")}}function Qpe(r,e,t){return typeof e==\"object\"&&e!==null&&typeof t>\"u\"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{\"use strict\";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Mpe=42,q2=44,Ope=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]=\"\\\\0\";Ni[7]=\"\\\\a\";Ni[8]=\"\\\\b\";Ni[9]=\"\\\\t\";Ni[10]=\"\\\\n\";Ni[11]=\"\\\\v\";Ni[12]=\"\\\\f\";Ni[13]=\"\\\\r\";Ni[27]=\"\\\\e\";Ni[34]='\\\\\"';Ni[92]=\"\\\\\\\\\";Ni[133]=\"\\\\N\";Ni[160]=\"\\\\_\";Ni[8232]=\"\\\\L\";Ni[8233]=\"\\\\P\";var qpe=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n<s;n+=1)o=i[n],a=String(e[o]),o.slice(0,2)===\"!!\"&&(o=\"tag:yaml.org,2002:\"+o.slice(2)),l=r.compiledTypeMap.fallback[o],l&&Y2.call(l.styleAliases,a)&&(a=l.styleAliases[a]),t[o]=a;return t}function T2(r){var e,t,i;if(e=r.toString(16).toUpperCase(),r<=255)t=\"x\",i=2;else if(r<=65535)t=\"u\",i=4;else if(r<=4294967295)t=\"U\",i=8;else throw new ed(\"code point within a string may not be greater than 0xFFFFFFFF\");return\"\\\\\"+t+$p.repeat(\"0\",i-e.length)+e}function Wpe(r){this.schema=r.schema||vpe,this.indent=Math.max(1,r.indent||2),this.noArrayIndent=r.noArrayIndent||!1,this.skipInvalid=r.skipInvalid||!1,this.flowLevel=$p.isNothing(r.flowLevel)?-1:r.flowLevel,this.styleMap=Jpe(this.schema,r.styles||null),this.sortKeys=r.sortKeys||!1,this.lineWidth=r.lineWidth||80,this.noRefs=r.noRefs||!1,this.noCompatMode=r.noCompatMode||!1,this.condenseFlow=r.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function L2(r,e){for(var t=$p.repeat(\" \",e),i=0,n=-1,s=\"\",o,a=r.length;i<a;)n=r.indexOf(`\n`,i),n===-1?(o=r.slice(i),i=a):(o=r.slice(i,n+1),i=n+1),o.length&&o!==`\n`&&(s+=t),s+=o;return s}function VS(r,e){return`\n`+$p.repeat(\" \",r.indent*e)}function zpe(r,e){var t,i,n;for(t=0,i=r.implicitTypes.length;t<i;t+=1)if(n=r.implicitTypes[t],n.resolve(e))return!0;return!1}function ZS(r){return r===kpe||r===Ppe}function Ug(r){return 32<=r&&r<=126||161<=r&&r<=55295&&r!==8232&&r!==8233||57344<=r&&r<=65533&&r!==65279||65536<=r&&r<=1114111}function Vpe(r){return Ug(r)&&!ZS(r)&&r!==65279&&r!==Dpe&&r!==_p}function M2(r,e){return Ug(r)&&r!==65279&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==J2&&(r!==j2||e&&Vpe(e))}function Xpe(r){return Ug(r)&&r!==65279&&!ZS(r)&&r!==Ope&&r!==Hpe&&r!==J2&&r!==q2&&r!==W2&&r!==z2&&r!==V2&&r!==X2&&r!==j2&&r!==Tpe&&r!==Mpe&&r!==Rpe&&r!==jpe&&r!==Kpe&&r!==Upe&&r!==Lpe&&r!==Fpe&&r!==Npe&&r!==Gpe&&r!==Ype}function Z2(r){var e=/^\\n* /;return e.test(r)}var _2=1,$2=2,eH=3,tH=4,BI=5;function Zpe(r,e,t,i,n){var s,o,a,l=!1,c=!1,u=i!==-1,g=-1,f=Xpe(r.charCodeAt(0))&&!ZS(r.charCodeAt(r.length-1));if(e)for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}else{for(s=0;s<r.length;s++){if(o=r.charCodeAt(s),o===_p)l=!0,u&&(c=c||s-g-1>i&&r[g+1]!==\" \",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&M2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==\" \"}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return\"''\";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return\"'\"+e+\"'\";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case eH:return\"|\"+O2(e,r.indent)+K2(L2(e,n));case tH:return\">\"+O2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'\"'+ede(e,s)+'\"';default:throw new ed(\"impossible error: invalid scalar style\")}}()}function O2(r,e){var t=Z2(r)?String(e):\"\",i=r[r.length-1]===`\n`,n=i&&(r[r.length-2]===`\n`||r===`\n`),s=n?\"+\":i?\"\":\"-\";return t+s+`\n`}function K2(r){return r[r.length-1]===`\n`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\\n+)([^\\n]*)/g,i=function(){var c=r.indexOf(`\n`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===`\n`||r[0]===\" \",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===\" \",i+=a+(!n&&!s&&l!==\"\"?`\n`:\"\")+U2(l,e),n=s}return i}function U2(r,e){if(r===\"\"||r[0]===\" \")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l=\"\";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=`\n`+r.slice(n,s),n=s+1),o=a;return l+=`\n`,r.length-n>e&&o>n?l+=r.slice(n,o)+`\n`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e=\"\",t,i,n,s=0;s<r.length;s++){if(t=r.charCodeAt(s),t>=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i=\"\",n=r.tag,s,o;for(s=0,o=t.length;s<o;s+=1)oc(r,e,t[s],!1,!1)&&(s!==0&&(i+=\",\"+(r.condenseFlow?\"\":\" \")),i+=r.dump);r.tag=n,r.dump=\"[\"+i+\"]\"}function rde(r,e,t,i){var n=\"\",s=r.tag,o,a;for(o=0,a=t.length;o<a;o+=1)oc(r,e+1,t[o],!0,!0)&&((!i||o!==0)&&(n+=VS(r,e)),r.dump&&_p===r.dump.charCodeAt(0)?n+=\"-\":n+=\"- \",n+=r.dump);r.tag=s,r.dump=n||\"[]\"}function ide(r,e,t){var i=\"\",n=r.tag,s=Object.keys(t),o,a,l,c,u;for(o=0,a=s.length;o<a;o+=1)u=\"\",o!==0&&(u+=\", \"),r.condenseFlow&&(u+='\"'),l=s[o],c=t[l],oc(r,e,l,!1,!1)&&(r.dump.length>1024&&(u+=\"? \"),u+=r.dump+(r.condenseFlow?'\"':\"\")+\":\"+(r.condenseFlow?\"\":\" \"),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump=\"{\"+i+\"}\"}function nde(r,e,t,i){var n=\"\",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys==\"function\")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed(\"sortKeys must be a boolean or a function\");for(a=0,l=o.length;a<l;a+=1)f=\"\",(!i||a!==0)&&(f+=VS(r,e)),c=o[a],u=t[c],oc(r,e+1,c,!0,!0,!0)&&(g=r.tag!==null&&r.tag!==\"?\"||r.dump&&r.dump.length>1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\"?\":f+=\"? \"),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=\":\":f+=\": \",f+=r.dump,n+=f));r.tag=s,r.dump=n||\"{}\"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s<o;s+=1)if(a=n[s],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e==\"object\"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(r.tag=t?a.tag:\"?\",a.represent){if(l=r.styleMap[a.tag]||a.defaultStyle,G2.call(a.represent)===\"[object Function]\")i=a.represent(e,l);else if(Y2.call(a.represent,l))i=a.represent[l](e,l);else throw new ed(\"!<\"+a.tag+'> tag resolver accepts not \"'+l+'\" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o===\"[object Object]\"||o===\"[object Array]\",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!==\"?\"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump=\"*ref_\"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o===\"[object Object]\")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump));else if(o===\"[object Array]\"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump=\"&ref_\"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump=\"&ref_\"+l+\" \"+r.dump))}else if(o===\"[object String]\")r.tag!==\"?\"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed(\"unacceptable kind of an object to dump \"+o)}r.tag!==null&&r.tag!==\"?\"&&(r.dump=\"!<\"+r.tag+\"> \"+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n<s;n+=1)e.duplicates.push(t[i[n]]);e.usedDuplicates=new Array(s)}function XS(r,e,t){var i,n,s;if(r!==null&&typeof r==\"object\")if(n=e.indexOf(r),n!==-1)t.indexOf(n)===-1&&t.push(n);else if(e.push(r),Array.isArray(r))for(n=0,s=r.length;n<s;n+=1)XS(r[n],e,t);else for(i=Object.keys(r),n=0,s=i.length;n<s;n+=1)XS(r[i[n]],e,t)}function rH(r,e){e=e||{};var t=new Wpe(e);return t.noRefs||sde(r,t),oc(t,0,r,!0,!0)?t.dump+`\n`:\"\"}function ode(r,e){return rH(r,$p.extend({schema:xpe},e))}_S.exports.dump=rH;_S.exports.safeDump=ode});var sH=w((e_e,Fr)=>{\"use strict\";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error(\"Function \"+r+\" is deprecated and cannot be used.\")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI(\"scan\");Fr.exports.parse=QI(\"parse\");Fr.exports.compose=QI(\"compose\");Fr.exports.addConstructor=QI(\"addConstructor\")});var aH=w((t_e,oH)=>{\"use strict\";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{\"use strict\";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name=\"SyntaxError\",typeof Error.captureStackTrace==\"function\"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'\"'+n(c.text)+'\"'},class:function(c){var u=\"\",g;for(g=0;g<c.parts.length;g++)u+=c.parts[g]instanceof Array?s(c.parts[g][0])+\"-\"+s(c.parts[g][1]):s(c.parts[g]);return\"[\"+(c.inverted?\"^\":\"\")+u+\"]\"},any:function(c){return\"any character\"},end:function(c){return\"end of input\"},other:function(c){return c.description}};function i(c){return c.charCodeAt(0).toString(16).toUpperCase()}function n(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function s(c){return c.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,function(u){return\"\\\\x0\"+i(u)}).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,function(u){return\"\\\\x\"+i(u)})}function o(c){return t[c.type](c)}function a(c){var u=new Array(c.length),g,f;for(g=0;g<c.length;g++)u[g]=o(c[g]);if(u.sort(),u.length>0){for(g=1,f=1;g<u.length;g++)u[g-1]!==u[g]&&(u[f]=u[g],f++);u.length=f}switch(u.length){case 1:return u[0];case 2:return u[0]+\" or \"+u[1];default:return u.slice(0,-1).join(\", \")+\", or \"+u[u.length-1]}}function l(c){return c?'\"'+n(c)+'\"':\"end of input\"}return\"Expected \"+a(r)+\" but \"+l(e)+\" found.\"};function lde(r,e){e=e!==void 0?e:{};var t={},i={Start:Hs},n=Hs,s=function(R){return[].concat(...R)},o=\"-\",a=ar(\"-\",!1),l=function(R){return R},c=function(R){return Object.assign({},...R)},u=\"#\",g=ar(\"#\",!1),f=Kl(),h=function(){return{}},p=\":\",C=ar(\":\",!1),y=function(R,q){return{[R]:q}},B=\",\",v=ar(\",\",!1),D=function(R,q){return q},T=function(R,q,Ce){return Object.assign({},...[R].concat(q).map(Ke=>({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us(\"correct indentation\"),V=\" \",W=ar(\" \",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},M=Us(\"pseudostring\"),F=/^[^\\r\\n\\t ?:,\\][{}#&*!|>'\"%@`\\-]/,ue=Tn([\"\\r\",`\n`,\"\t\",\" \",\"?\",\":\",\",\",\"]\",\"[\",\"{\",\"}\",\"#\",\"&\",\"*\",\"!\",\"|\",\">\",\"'\",'\"',\"%\",\"@\",\"`\",\"-\"],!0,!1),pe=/^[^\\r\\n\\t ,\\][{}:#\"']/,ke=Tn([\"\\r\",`\n`,\"\t\",\" \",\",\",\"]\",\"[\",\"{\",\"}\",\":\",\"#\",'\"',\"'\"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,\"\")},Ne=\"--\",oe=ar(\"--\",!1),le=/^[a-zA-Z\\/0-9]/,Be=Tn([[\"a\",\"z\"],[\"A\",\"Z\"],\"/\",[\"0\",\"9\"]],!1,!1),fe=/^[^\\r\\n\\t :,]/,ae=Tn([\"\\r\",`\n`,\"\t\",\" \",\":\",\",\"],!0,!1),qe=\"null\",ne=ar(\"null\",!1),Y=function(){return null},he=\"true\",ie=ar(\"true\",!1),de=function(){return!0},_e=\"false\",Pt=ar(\"false\",!1),It=function(){return!1},Mr=Us(\"string\"),ii='\"',gi=ar('\"',!1),hr=function(){return\"\"},fi=function(R){return R},ni=function(R){return R.join(\"\")},Ks=/^[^\"\\\\\\0-\\x1F\\x7F]/,pr=Tn(['\"',\"\\\\\",[\"\\0\",\"\u001f\"],\"\\x7F\"],!0,!1),Ii='\\\\\"',rs=ar('\\\\\"',!1),fa=function(){return'\"'},dA=\"\\\\\\\\\",cg=ar(\"\\\\\\\\\",!1),is=function(){return\"\\\\\"},CA=\"\\\\/\",ha=ar(\"\\\\/\",!1),wp=function(){return\"/\"},mA=\"\\\\b\",EA=ar(\"\\\\b\",!1),wr=function(){return\"\\b\"},Tl=\"\\\\f\",ug=ar(\"\\\\f\",!1),yo=function(){return\"\\f\"},gg=\"\\\\n\",Bp=ar(\"\\\\n\",!1),bp=function(){return`\n`},vr=\"\\\\r\",se=ar(\"\\\\r\",!1),wo=function(){return\"\\r\"},Fn=\"\\\\t\",fg=ar(\"\\\\t\",!1),bt=function(){return\"\t\"},Ll=\"\\\\u\",Nn=ar(\"\\\\u\",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([[\"0\",\"9\"],[\"a\",\"f\"],[\"A\",\"F\"]],!1,!1),Bo=Us(\"blank space\"),At=/^[ \\t]/,ln=Tn([\" \",\"\t\"],!1,!1),S=Us(\"white space\"),Lt=/^[ \\t\\n\\r]/,hg=Tn([\" \",\"\t\",`\n`,\"\\r\"],!1,!1),Ml=`\\r\n`,Qp=ar(`\\r\n`,!1),Sp=`\n`,vp=ar(`\n`,!1),xp=\"\\r\",Pp=ar(\"\\r\",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ol=[],Xe=0,pa;if(\"startRule\"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule \"`+e.startRule+'\".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function ME(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function OE(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:\"literal\",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:\"class\",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:\"any\"}}function kp(){return{type:\"end\"}}function Us(R){return{type:\"other\",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Ce<R;)r.charCodeAt(Ce)===10?(q.line++,q.column=1):q.column++,Ce++;return IA[R]=q,q}function cn(R,q){var Ce=da(R),Ke=da(q);return{start:{offset:R,line:Ce.line,column:Ce.column},end:{offset:q,line:Ke.line,column:Ke.column}}}function Le(R){G<zi||(G>zi&&(zi=G,Ol=[]),Ol.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(M)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Mr)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ml?(R=Ml,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G<r.length&&Le(kp()),Ul(Ol,zi<r.length?r.charAt(zi):null,zi<r.length?cn(zi,zi+1):cn(zi,zi))}AH.exports={SyntaxError:ac,parse:lde}});var pH=w((a_e,ev)=>{\"use strict\";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n<r.length;n++){let s=r[n];e&&/[a-zA-Z]/.test(s)&&s.toUpperCase()===s?(r=r.slice(0,n)+\"-\"+r.slice(n),e=!1,i=t,t=!0,n++):t&&i&&/[a-zA-Z]/.test(s)&&s.toLowerCase()===s?(r=r.slice(0,n-1)+\"-\"+r.slice(n-1),i=t,t=!1,e=!0):(e=s.toLowerCase()===s&&s.toUpperCase()!==s,i=t,t=s.toUpperCase()===s&&s.toLowerCase()!==s)}return r},hH=(r,e)=>{if(!(typeof r==\"string\"||Array.isArray(r)))throw new TypeError(\"Expected the input to be `string | string[]`\");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join(\"-\"):r=r.trim(),r.length===0?\"\":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\\- ]+/,\"\").toLowerCase().replace(/[_.\\- ]+(\\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\\d+(\\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:\"AppVeyor\",constant:\"APPVEYOR\",env:\"APPVEYOR\",pr:\"APPVEYOR_PULL_REQUEST_NUMBER\"},{name:\"Azure Pipelines\",constant:\"AZURE_PIPELINES\",env:\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\",pr:\"SYSTEM_PULLREQUEST_PULLREQUESTID\"},{name:\"Appcircle\",constant:\"APPCIRCLE\",env:\"AC_APPCIRCLE\"},{name:\"Bamboo\",constant:\"BAMBOO\",env:\"bamboo_planKey\"},{name:\"Bitbucket Pipelines\",constant:\"BITBUCKET\",env:\"BITBUCKET_COMMIT\",pr:\"BITBUCKET_PR_ID\"},{name:\"Bitrise\",constant:\"BITRISE\",env:\"BITRISE_IO\",pr:\"BITRISE_PULL_REQUEST\"},{name:\"Buddy\",constant:\"BUDDY\",env:\"BUDDY_WORKSPACE_ID\",pr:\"BUDDY_EXECUTION_PULL_REQUEST_ID\"},{name:\"Buildkite\",constant:\"BUILDKITE\",env:\"BUILDKITE\",pr:{env:\"BUILDKITE_PULL_REQUEST\",ne:\"false\"}},{name:\"CircleCI\",constant:\"CIRCLE\",env:\"CIRCLECI\",pr:\"CIRCLE_PULL_REQUEST\"},{name:\"Cirrus CI\",constant:\"CIRRUS\",env:\"CIRRUS_CI\",pr:\"CIRRUS_PR\"},{name:\"AWS CodeBuild\",constant:\"CODEBUILD\",env:\"CODEBUILD_BUILD_ARN\"},{name:\"Codefresh\",constant:\"CODEFRESH\",env:\"CF_BUILD_ID\",pr:{any:[\"CF_PULL_REQUEST_NUMBER\",\"CF_PULL_REQUEST_ID\"]}},{name:\"Codeship\",constant:\"CODESHIP\",env:{CI_NAME:\"codeship\"}},{name:\"Drone\",constant:\"DRONE\",env:\"DRONE\",pr:{DRONE_BUILD_EVENT:\"pull_request\"}},{name:\"dsari\",constant:\"DSARI\",env:\"DSARI\"},{name:\"GitHub Actions\",constant:\"GITHUB_ACTIONS\",env:\"GITHUB_ACTIONS\",pr:{GITHUB_EVENT_NAME:\"pull_request\"}},{name:\"GitLab CI\",constant:\"GITLAB\",env:\"GITLAB_CI\",pr:\"CI_MERGE_REQUEST_ID\"},{name:\"GoCD\",constant:\"GOCD\",env:\"GO_PIPELINE_LABEL\"},{name:\"LayerCI\",constant:\"LAYERCI\",env:\"LAYERCI\",pr:\"LAYERCI_PULL_REQUEST\"},{name:\"Hudson\",constant:\"HUDSON\",env:\"HUDSON_URL\"},{name:\"Jenkins\",constant:\"JENKINS\",env:[\"JENKINS_URL\",\"BUILD_ID\"],pr:{any:[\"ghprbPullId\",\"CHANGE_ID\"]}},{name:\"Magnum CI\",constant:\"MAGNUM\",env:\"MAGNUM\"},{name:\"Netlify CI\",constant:\"NETLIFY\",env:\"NETLIFY\",pr:{env:\"PULL_REQUEST\",ne:\"false\"}},{name:\"Nevercode\",constant:\"NEVERCODE\",env:\"NEVERCODE\",pr:{env:\"NEVERCODE_PULL_REQUEST\",ne:\"false\"}},{name:\"Render\",constant:\"RENDER\",env:\"RENDER\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Sail CI\",constant:\"SAIL\",env:\"SAILCI\",pr:\"SAIL_PULL_REQUEST_NUMBER\"},{name:\"Semaphore\",constant:\"SEMAPHORE\",env:\"SEMAPHORE\",pr:\"PULL_REQUEST_NUMBER\"},{name:\"Screwdriver\",constant:\"SCREWDRIVER\",env:\"SCREWDRIVER\",pr:{env:\"SD_PULL_REQUEST\",ne:\"false\"}},{name:\"Shippable\",constant:\"SHIPPABLE\",env:\"SHIPPABLE\",pr:{IS_PULL_REQUEST:\"true\"}},{name:\"Solano CI\",constant:\"SOLANO\",env:\"TDDIUM\",pr:\"TDDIUM_PR_ID\"},{name:\"Strider CD\",constant:\"STRIDER\",env:\"STRIDER\"},{name:\"TaskCluster\",constant:\"TASKCLUSTER\",env:[\"TASK_ID\",\"RUN_ID\"]},{name:\"TeamCity\",constant:\"TEAMCITY\",env:\"TEAMCITY_VERSION\"},{name:\"Travis CI\",constant:\"TRAVIS\",env:\"TRAVIS\",pr:{env:\"TRAVIS_PULL_REQUEST\",ne:\"false\"}},{name:\"Vercel\",constant:\"VERCEL\",env:\"NOW_BUILDER\"},{name:\"Visual Studio App Center\",constant:\"APPCENTER\",env:\"APPCENTER_BUILD_ID\"}]});var Ac=w(Un=>{\"use strict\";var mH=dH(),Po=process.env;Object.defineProperty(Un,\"_vendors\",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case\"string\":Un.isPR=!!Po[r.pr];break;case\"object\":\"env\"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:\"any\"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r==\"string\"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Mde,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Ode,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?\"null\":r===void 0?\"undefined\":r===\"\"?\"an empty string\":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e==\"number\"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:\".\"}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:\"\"}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:\".\"}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:\".\"}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Mde,Ode,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\\d{3}(-?)(?:(?:0[1-9]|1[0-2])\\1(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])\\1(?:29|30)|(?:0[13578]|1[02])(?:\\1)31|00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[0-5]))|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\\2)29|-?366))T(?:[01]\\d|2[0-3])(:?)[0-5]\\d(?:\\3[0-5]\\d)?(?:Z|[+-][01]\\d(?:\\3[0-5]\\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!=\"string\"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([[\"true\",!0],[\"True\",!0],[\"1\",!0],[1,!0],[\"false\",!1],[\"False\",!1],[\"0\",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"boolean\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i=Cde.get(r);if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!=\"number\"){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"){let n;try{n=JSON.parse(r)}catch{}if(typeof n==\"number\")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<\"u\"){if(typeof(e==null?void 0:e.coercion)>\"u\")return pt(e,\"Unbound coercion result\");let i;if(typeof r==\"string\"&&ov.test(r))i=new Date(r);else{let n;if(typeof r==\"string\"){let s;try{s=JSON.parse(r)}catch{}typeof s==\"number\"&&(n=s)}else typeof r==\"number\"&&(n=r);if(typeof n<\"u\")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<\"u\")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:\".\",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t==\"string\"&&typeof e<\"u\"&&typeof(i==null?void 0:i.coercions)<\"u\"){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o<a&&(s=r(t[o],Object.assign(Object.assign({},i),{p:RA(i,o),coercion:cc(t,o)}))&&s,!(!s&&(i==null?void 0:i.errors)==null));++o);return s}}),wde=(r,{delimiter:e}={})=>{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i==\"string\"&&typeof e<\"u\"&&typeof(n==null?void 0:n.coercions)<\"u\"){if(typeof(n==null?void 0:n.coercion)>\"u\")return pt(n,\"Unbound coercion result\");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:\".\",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;a<l&&a<r.length&&(o=r[a](i[a],Object.assign(Object.assign({},n),{p:RA(n,a),coercion:cc(i,a)}))&&o,!(!o&&(n==null?void 0:n.errors)==null));++a);return o}})},Bde=(r,{keys:e=null}={})=>Qt({test:(t,i)=>{if(typeof t!=\"object\"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o<a&&(s||(i==null?void 0:i.errors)!=null);++o){let l=n[o],c=t[l];if(l===\"__proto__\"||l===\"constructor\"){s=pt(Object.assign(Object.assign({},i),{p:RA(i,l)}),\"Unsafe property name\");continue}if(e!==null&&!e(l,i)){s=!1;continue}if(!r(c,Object.assign(Object.assign({},i),{p:RA(i,l),coercion:cc(t,l)}))){s=!1;continue}}return s}}),bde=(r,{extra:e=null}={})=>{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!=\"object\"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l===\"constructor\"||l===\"__proto__\")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),\"Unsafe property name\");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<\"u\"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0;for(let c=0,u=r.length;c<u;++c){let g=typeof(i==null?void 0:i.errors)<\"u\"?[]:void 0,f=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(r[c](t,Object.assign(Object.assign({},i),{errors:g,coercions:f,p:`${(n=i==null?void 0:i.p)!==null&&n!==void 0?n:\".\"}#${c+1}`}))){if(a.push([`#${c+1}`,f]),!e)break}else l==null||l.push(g[0])}if(a.length===1){let[,c]=a[0];return typeof c<\"u\"&&((s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...c)),!0}return a.length>1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(\", \")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<\"u\"?cc(o,\"value\"):void 0,l=typeof(i==null?void 0:i.coercions)<\"u\"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<\"u\")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<\"u\"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>\"u\")return pt(i,\"Unbound coercion result\");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:\".\",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>\"u\"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;s<o;++s){let a=e[s],l=typeof r<\"u\"?r(a):a;if(i.has(l)){if(n.has(l))continue;pt(t,`Expected to contain unique elements; got a duplicate with ${Vr(e)}`),n.add(l)}else i.add(l)}return n.size===0}}),Rde=()=>Qt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Mde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<e?!0:pt(i,`Expected to be in the [${r}; ${e}[ range (got ${t})`)}),Ode=({unsafe:r=!1}={})=>Qt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,\"property\",\"properties\")} ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`\"${o}\"`).join(\", \")}`):!0}})};(function(r){r.Forbids=\"Forbids\",r.Requires=\"Requires\"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:\"forbids using\"},[lc.Requires]:{expect:!0,message:\"requires using\"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property \"${r}\" ${o.message} ${kI(u.length,\"property\",\"properties\")} ${u.map(g=>`\"${g}\"`).join(\", \")}`):!0}})}});var qH=w((A$e,jH)=>{\"use strict\";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{\"use strict\";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError(\"Expected `concurrency` to be a number from 1 and up\");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{t<r?n(a,l,...c):e.push(n.bind(null,a,l,...c))},o=(a,...l)=>new Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe=\"2.0.0\",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process==\"object\"&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error(\"SEMVER\",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?\"g\":void 0)};St(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\");St(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\");St(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\");St(\"MAINVERSION\",`(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})\\\\.(${et[tt.NUMERICIDENTIFIER]})`);St(\"MAINVERSIONLOOSE\",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St(\"PRERELEASEIDENTIFIER\",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St(\"PRERELEASE\",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St(\"PRERELEASELOOSE\",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\");St(\"BUILD\",`(?:\\\\+(${et[tt.BUILDIDENTIFIER]}(?:\\\\.${et[tt.BUILDIDENTIFIER]})*))`);St(\"FULLPLAIN\",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St(\"FULL\",`^${et[tt.FULLPLAIN]}$`);St(\"LOOSEPLAIN\",`[v=\\\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St(\"LOOSE\",`^${et[tt.LOOSEPLAIN]}$`);St(\"GTLT\",\"((?:<|>)?=?)\");St(\"XRANGEIDENTIFIERLOOSE\",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);St(\"XRANGEIDENTIFIER\",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\\\*`);St(\"XRANGEPLAIN\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St(\"XRANGE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAIN]}$`);St(\"XRANGELOOSE\",`^${et[tt.GTLT]}\\\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${dv}})(?:\\\\.(\\\\d{1,${dv}}))?(?:\\\\.(\\\\d{1,${dv}}))?(?:$|[^\\\\d])`);St(\"COERCERTL\",et[tt.COERCE],!0);St(\"LONETILDE\",\"(?:~>?)\");St(\"TILDETRIM\",`(\\\\s*)${et[tt.LONETILDE]}\\\\s+`,!0);NA.tildeTrimReplace=\"$1~\";St(\"TILDE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St(\"TILDELOOSE\",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"LONECARET\",\"(?:\\\\^)\");St(\"CARETTRIM\",`(\\\\s*)${et[tt.LONECARET]}\\\\s+`,!0);NA.caretTrimReplace=\"$1^\";St(\"CARET\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St(\"CARETLOOSE\",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St(\"COMPARATORLOOSE\",`^${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St(\"COMPARATOR\",`^${et[tt.GTLT]}\\\\s*(${et[tt.FULLPLAIN]})$|^$`);St(\"COMPARATORTRIM\",`(\\\\s*)${et[tt.GTLT]}\\\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace=\"$1$2$3\";St(\"HYPHENRANGE\",`^\\\\s*(${et[tt.XRANGEPLAIN]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAIN]})\\\\s*$`);St(\"HYPHENRANGELOOSE\",`^\\\\s*(${et[tt.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${et[tt.XRANGEPLAINLOOSE]})\\\\s*$`);St(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\");St(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\");St(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")});var hd=w((f$e,XH)=>{var ICe=[\"includePrerelease\",\"loose\",\"rtl\"],yCe=r=>r?typeof r!=\"object\"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var MI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r<e?-1:1},wCe=(r,e)=>_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var OI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=MI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!=\"string\")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);OI(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>KI||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>KI||this.patch<0)throw new TypeError(\"Invalid patch version\");i[4]?this.prerelease=i[4].split(\".\").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s<KI)return s}return n}):this.prerelease=[],this.build=i[5]?i[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(OI(\"SemVer.compare\",this.version,this.options,e),!(e instanceof Yn)){if(typeof e==\"string\"&&e===this.version)return 0;e=new Yn(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof Yn||(e=new Yn(e,this.options)),pd(this.major,e.major)||pd(this.minor,e.minor)||pd(this.patch,e.patch)}comparePre(e){if(e instanceof Yn||(e=new Yn(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let i=this.prerelease[t],n=e.prerelease[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}compareBuild(e){e instanceof Yn||(e=new Yn(e,this.options));let t=0;do{let i=this.build[t],n=e.build[t];if(OI(\"prerelease compare\",t,i,n),i===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(i===void 0)return-1;if(i===n)continue;return pd(i,n)}while(++t)}inc(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":this.prerelease.length===0&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case\"pre\":if(this.prerelease.length===0)this.prerelease=[0];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]==\"number\"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!=\"string\"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,\"\"),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t==\"string\"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),MCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?\"pre\":\"\",o=n?\"prerelease\":\"\";for(let a in t)if((a===\"major\"||a===\"minor\"||a===\"patch\")&&t[a]!==i[a])return s+a;return o}};mG.exports=MCe});var yG=w((B$e,IG)=>{var OCe=Li(),KCe=(r,e)=>new OCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var MG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,OG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;OG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((M$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case\"===\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r===t;case\"!==\":return typeof r==\"object\"&&(r=r.version),typeof t==\"object\"&&(t=t.version),r!==t;case\"\":case\"=\":case\"==\":return ume(r,t,i);case\"!=\":return gme(r,t,i);case\">\":return fme(r,t,i);case\">=\":return hme(r,t,i);case\"<\":return pme(r,t,i);case\"<=\":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((O$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r==\"number\"&&(r=String(r)),typeof r!=\"string\")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||\"0\"}.${t[4]||\"0\"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{\"use strict\";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{\"use strict\";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach==\"function\")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t<i;t++)e.push(arguments[t]);return e}Ht.prototype.removeNode=function(r){if(r.list!==this)throw new Error(\"removing node which does not belong to this list\");var e=r.next,t=r.prev;return e&&(e.prev=t),t&&(t.next=e),r===this.head&&(this.head=e),r===this.tail&&(this.tail=t),r.list.length--,r.next=null,r.prev=null,r.list=null,e};Ht.prototype.unshiftNode=function(r){if(r!==this.head){r.list&&r.list.removeNode(r);var e=this.head;r.list=this,r.next=e,e&&(e.prev=r),this.head=r,this.tail||(this.tail=r),this.length++}};Ht.prototype.pushNode=function(r){if(r!==this.tail){r.list&&r.list.removeNode(r);var e=this.tail;r.list=this,r.prev=e,e&&(e.next=r),this.tail=r,this.head||(this.head=r),this.length++}};Ht.prototype.push=function(){for(var r=0,e=arguments.length;r<e;r++)wme(this,arguments[r]);return this.length};Ht.prototype.unshift=function(){for(var r=0,e=arguments.length;r<e;r++)Bme(this,arguments[r]);return this.length};Ht.prototype.pop=function(){if(!!this.tail){var r=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,r}};Ht.prototype.shift=function(){if(!!this.head){var r=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,r}};Ht.prototype.forEach=function(r,e){e=e||this;for(var t=this.head,i=0;t!==null;i++)r.call(e,t.value,i,this),t=t.next};Ht.prototype.forEachReverse=function(r,e){e=e||this;for(var t=this.tail,i=this.length-1;t!==null;i--)r.call(e,t.value,i,this),t=t.prev};Ht.prototype.get=function(r){for(var e=0,t=this.head;t!==null&&e<r;e++)t=t.next;if(e===r&&t!==null)return t.value};Ht.prototype.getReverse=function(r){for(var e=0,t=this.tail;t!==null&&e<r;e++)t=t.prev;if(e===r&&t!==null)return t.value};Ht.prototype.map=function(r,e){e=e||this;for(var t=new Ht,i=this.head;i!==null;)t.push(r.call(e,i.value,this)),i=i.next;return t};Ht.prototype.mapReverse=function(r,e){e=e||this;for(var t=new Ht,i=this.tail;i!==null;)t.push(r.call(e,i.value,this)),i=i.prev;return t};Ht.prototype.reduce=function(r,e){var t,i=this.head;if(arguments.length>1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError(\"Reduce of empty list with no initial value\");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(;n!==null&&i<e;i++,n=n.next)t.push(n.value);return t};Ht.prototype.sliceReverse=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(e<r||e<0)return t;r<0&&(r=0),e>this.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i<r;i++)n=n.next;for(var s=[],i=0;n&&i<e;i++)s.push(n.value),n=this.removeNode(n);n===null&&(n=this.tail),n!==this.head&&n!==this.tail&&(n=n.prev);for(var i=0;i<t.length;i++)n=yme(this,n,t[i]);return s};Ht.prototype.reverse=function(){for(var r=this.head,e=this.tail,t=r;t!==null;t=t.prev){var i=t.prev;t.prev=t.next,t.next=i}return this.head=e,this.tail=r,this};function yme(r,e,t){var i=e===r.head?new fc(t,null,e,r):new fc(t,e,e.next,r);return i.next===null&&(r.tail=i),i.prev===null&&(r.head=i),r.length++,i}function wme(r,e){r.tail=new fc(e,r.tail,null,r),r.head||(r.head=r.tail),r.length++}function Bme(r,e){r.head=new fc(e,null,r.head,r),r.tail||(r.tail=r.head),r.length++}function fc(r,e,t,i){if(!(this instanceof fc))return new fc(r,e,t,i);this.list=i,this.value=r,e?(e.next=this,this.prev=e):this.prev=null,t?(t.prev=this,this.next=t):this.next=null}try{WG()(Ht)}catch{}});var $G=w((H$e,_G)=>{\"use strict\";var bme=WI(),hc=Symbol(\"max\"),va=Symbol(\"length\"),Wg=Symbol(\"lengthCalculator\"),md=Symbol(\"allowStale\"),pc=Symbol(\"maxAge\"),Sa=Symbol(\"dispose\"),VG=Symbol(\"noDisposeOnSet\"),di=Symbol(\"lruList\"),Zs=Symbol(\"cache\"),ZG=Symbol(\"updateAgeOnGet\"),Ev=()=>1,yv=class{constructor(e){if(typeof e==\"number\"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!=\"number\"||e.max<0))throw new TypeError(\"max must be a non-negative number\");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!=\"function\"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!=\"number\")throw new TypeError(\"maxAge must be a number\");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!=\"number\"||e<0)throw new TypeError(\"max must be a non-negative number\");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!=\"number\")throw new TypeError(\"maxAge must be a non-negative number\");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!=\"function\"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!=\"number\")throw new TypeError(\"maxAge must be a number\");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(\",\")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[bi.HYPHENRANGELOOSE]:Mi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr(\"hyphen replace\",e),e=e.replace(Mi[bi.COMPARATORTRIM],xme),Hr(\"comparator trim\",e,Mi[bi.COMPARATORTRIM]),e=e.replace(Mi[bi.TILDETRIM],Pme),e=e.replace(Mi[bi.CARETTRIM],Dme),e=e.split(/\\s+/).join(\" \");let a=s?Mi[bi.COMPARATORLOOSE]:Mi[bi.COMPARATOR],l=e.split(\" \").map(f=>Rme(f,this.options)).join(\" \").split(/\\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has(\"\")&&u.delete(\"\");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError(\"a Range is required\");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e==\"string\")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Gme(this.set[t],e,this.options))return!0;return!1}};iY.exports=dc;var Qme=$G(),eY=new Qme({max:1e3}),Sme=hd(),Bv=Ed(),Hr=fd(),vme=Li(),{re:Mi,t:bi,comparatorTrimReplace:xme,tildeTrimReplace:Pme,caretTrimReplace:Dme}=uc(),tY=r=>r.value===\"<0.0.0-0\",kme=r=>r.value===\"\",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr(\"comp\",r,e),r=Tme(r,e),Hr(\"caret\",r),r=Fme(r,e),Hr(\"tildes\",r),r=Mme(r,e),Hr(\"xrange\",r),r=Kme(r,e),Hr(\"stars\",r),r),$i=r=>!r||r.toLowerCase()===\"x\"||r===\"*\",Fme=(r,e)=>r.trim().split(/\\s+/).map(t=>Nme(t,e)).join(\" \"),Nme=(r,e)=>{let t=e.loose?Mi[bi.TILDELOOSE]:Mi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr(\"tilde\",r,i,n,s,o,a);let l;return $i(n)?l=\"\":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr(\"replaceTilde pr\",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr(\"tilde return\",l),l})},Tme=(r,e)=>r.trim().split(/\\s+/).map(t=>Lme(t,e)).join(\" \"),Lme=(r,e)=>{Hr(\"caret\",r,e);let t=e.loose?Mi[bi.CARETLOOSE]:Mi[bi.CARET],i=e.includePrerelease?\"-0\":\"\";return r.replace(t,(n,s,o,a,l)=>{Hr(\"caret\",r,n,s,o,a,l);let c;return $i(s)?c=\"\":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s===\"0\"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr(\"replaceCaret pr\",l),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr(\"no pr\"),s===\"0\"?o===\"0\"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr(\"caret return\",c),c})},Mme=(r,e)=>(Hr(\"replaceXRanges\",r,e),r.split(/\\s+/).map(t=>Ome(t,e)).join(\" \")),Ome=(r,e)=>{r=r.trim();let t=e.loose?Mi[bi.XRANGELOOSE]:Mi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr(\"xRange\",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n===\"=\"&&f&&(n=\"\"),l=e.includePrerelease?\"-0\":\"\",c?n===\">\"||n===\"<\"?i=\"<0.0.0-0\":i=\"*\":n&&f?(u&&(o=0),a=0,n===\">\"?(n=\">=\",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n===\"<=\"&&(n=\"<\",u?s=+s+1:o=+o+1),n===\"<\"&&(l=\"-0\"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr(\"xRange return\",i),i})},Kme=(r,e)=>(Hr(\"replaceStars\",r,e),r.trim().replace(Mi[bi.STAR],\"\")),Ume=(r,e)=>(Hr(\"replaceGTE0\",r,e),r.trim().replace(Mi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],\"\")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t=\"\":$i(n)?t=`>=${i}.0.0${r?\"-0\":\"\"}`:$i(s)?t=`>=${i}.${n}.0${r?\"-0\":\"\"}`:o?t=`>=${t}`:t=`>=${t}${r?\"-0\":\"\"}`,$i(c)?l=\"\":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i<r.length;i++)if(!r[i].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let i=0;i<r.length;i++)if(Hr(r[i].semver),r[i].semver!==Bv.ANY&&r[i].semver.prerelease.length>0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol(\"SemVer ANY\"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value=\"\":this.value=this.operator+this.semver.version,Qv(\"comp\",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:\"\",this.operator===\"=\"&&(this.operator=\"\"),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv(\"Comparator.test\",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e==\"string\")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError(\"a Comparator is required\");if((!t||typeof t!=\"object\")&&(t={loose:!!t,includePrerelease:!1}),this.operator===\"\")return this.value===\"\"?!0:new aY(e.value,t).test(this.value);if(e.operator===\"\")return e.value===\"\"?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\">=\"||e.operator===\">\"),n=(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\"<=\"||e.operator===\"<\"),s=this.semver.version===e.semver.version,o=(this.operator===\">=\"||this.operator===\"<=\")&&(e.operator===\">=\"||e.operator===\"<=\"),a=bv(this.semver,\"<\",e.semver,t)&&(this.operator===\">=\"||this.operator===\">\")&&(e.operator===\"<=\"||e.operator===\"<\"),l=bv(this.semver,\">\",e.semver,t)&&(this.operator===\"<=\"||this.operator===\"<\")&&(e.operator===\">=\"||e.operator===\">\");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(\" \").trim().split(\" \"));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv(\"0.0.0\");if(r.test(t)||(t=new Sv(\"0.0.0-0\"),r.test(t)))return t;t=null;for(let i=0;i<r.set.length;++i){let n=r.set[i],s=null;n.forEach(o=>{let a=new Sv(o.semver.version);switch(o.operator){case\">\":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case\"\":case\">=\":(!s||dY(a,s))&&(s=a);break;case\"<\":case\"<=\":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||\"*\"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case\">\":n=yY,s=AEe,o=wY,a=\">\",l=\">=\";break;case\"<\":n=wY,s=lEe,o=yY,a=\"<\",l=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(aEe(r,e,i))return!1;for(let c=0;c<e.set.length;++c){let u=e.set[c],g=null,f=null;if(u.forEach(h=>{h.semver===sEe&&(h=new BY(\">=0.0.0\")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,\">\",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,\"<\",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push(\"*\"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(\" || \"),c=typeof e.raw==\"string\"?e.raw:String(e);return l.length<c.length?l:e}});var OY=w((tet,MY)=>{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(\">=0.0.0-0\")]:r=[new XI(\">=0.0.0\")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(\">=0.0.0\")]}let i=new Set,n,s;for(let h of r)h.operator===\">\"||h.operator===\">=\"?n=TY(n,h,t):h.operator===\"<\"||h.operator===\"<=\"?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==\">=\"||s.operator!==\"<=\"))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator===\"<\"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===\">\"||h.operator===\">=\",c=c||h.operator===\"<\"||h.operator===\"<=\",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===\">\"||h.operator===\">=\"){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===\">=\"&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator===\"<\"||h.operator===\"<=\"){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator===\"<=\"&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===\">\"&&r.operator===\">=\"?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator===\"<\"&&r.operator===\"<=\"?e:r};MY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:MI().compareIdentifiers,rcompareIdentifiers:MI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:MG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:OY()}});var Dv=w(ZI=>{\"use strict\";Object.defineProperty(ZI,\"__esModule\",{value:!0});ZI.VERSION=void 0;ZI.VERSION=\"9.1.0\"});var Gt=w((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i<n;i++)(s||!(i in e))&&(s||(s=Array.prototype.slice.call(e,0,i)),s[i]=e[i]);return r.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(exports,\"__esModule\",{value:!0});exports.toFastProperties=exports.timer=exports.peek=exports.isES2015MapSupported=exports.PRINT_WARNING=exports.PRINT_ERROR=exports.packArray=exports.IDENTITY=exports.NOOP=exports.merge=exports.groupBy=exports.defaults=exports.assignNoOverwrite=exports.assign=exports.zipObject=exports.sortBy=exports.indexOf=exports.some=exports.difference=exports.every=exports.isObject=exports.isRegExp=exports.isArray=exports.partial=exports.uniq=exports.compact=exports.reduce=exports.findAll=exports.find=exports.cloneObj=exports.cloneArr=exports.contains=exports.has=exports.pick=exports.reject=exports.filter=exports.dropRight=exports.drop=exports.isFunction=exports.isUndefined=exports.isString=exports.forEach=exports.last=exports.first=exports.flatten=exports.map=exports.mapValues=exports.values=exports.keys=exports.isEmpty=void 0;exports.upperFirst=void 0;function isEmpty(r){return r&&r.length===0}exports.isEmpty=isEmpty;function keys(r){return r==null?[]:Object.keys(r)}exports.keys=keys;function values(r){for(var e=[],t=Object.keys(r),i=0;i<t.length;i++)e.push(r[t[i]]);return e}exports.values=values;function mapValues(r,e){for(var t=[],i=keys(r),n=0;n<i.length;n++){var s=i[n];t.push(e.call(null,r[s],s))}return t}exports.mapValues=mapValues;function map(r,e){for(var t=[],i=0;i<r.length;i++)t.push(e.call(null,r[i],i));return t}exports.map=map;function flatten(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];Array.isArray(i)?e=e.concat(flatten(i)):e.push(i)}return e}exports.flatten=flatten;function first(r){return isEmpty(r)?void 0:r[0]}exports.first=first;function last(r){var e=r&&r.length;return e?r[e-1]:void 0}exports.last=last;function forEach(r,e){if(Array.isArray(r))for(var t=0;t<r.length;t++)e.call(null,r[t],t);else if(isObject(r))for(var i=keys(r),t=0;t<i.length;t++){var n=i[t],s=r[n];e.call(null,s,n)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(r){return typeof r==\"string\"}exports.isString=isString;function isUndefined(r){return r===void 0}exports.isUndefined=isUndefined;function isFunction(r){return r instanceof Function}exports.isFunction=isFunction;function drop(r,e){return e===void 0&&(e=1),r.slice(e,r.length)}exports.drop=drop;function dropRight(r,e){return e===void 0&&(e=1),r.slice(0,r.length-e)}exports.dropRight=dropRight;function filter(r,e){var t=[];if(Array.isArray(r))for(var i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.filter=filter;function reject(r,e){return filter(r,function(t){return!e(t)})}exports.reject=reject;function pick(r,e){for(var t=Object.keys(r),i={},n=0;n<t.length;n++){var s=t[n],o=r[s];e(o)&&(i[s]=o)}return i}exports.pick=pick;function has(r,e){return isObject(r)?r.hasOwnProperty(e):!1}exports.has=has;function contains(r,e){return find(r,function(t){return t===e})!==void 0}exports.contains=contains;function cloneArr(r){for(var e=[],t=0;t<r.length;t++)e.push(r[t]);return e}exports.cloneArr=cloneArr;function cloneObj(r){var e={};for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e}exports.cloneObj=cloneObj;function find(r,e){for(var t=0;t<r.length;t++){var i=r[t];if(e.call(null,i))return i}}exports.find=find;function findAll(r,e){for(var t=[],i=0;i<r.length;i++){var n=r[i];e.call(null,n)&&t.push(n)}return t}exports.findAll=findAll;function reduce(r,e,t){for(var i=Array.isArray(r),n=i?r:values(r),s=i?[]:keys(r),o=t,a=0;a<n.length;a++)o=e.call(null,o,n[a],i?a:s[a]);return o}exports.reduce=reduce;function compact(r){return reject(r,function(e){return e==null})}exports.compact=compact;function uniq(r,e){e===void 0&&(e=function(i){return i});var t=[];return reduce(r,function(i,n){var s=e(n);return contains(t,s)?i:(t.push(s),i.concat(n))},[])}exports.uniq=uniq;function partial(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var i=[null],n=i.concat(e);return Function.bind.apply(r,n)}exports.partial=partial;function isArray(r){return Array.isArray(r)}exports.isArray=isArray;function isRegExp(r){return r instanceof RegExp}exports.isRegExp=isRegExp;function isObject(r){return r instanceof Object}exports.isObject=isObject;function every(r,e){for(var t=0;t<r.length;t++)if(!e(r[t],t))return!1;return!0}exports.every=every;function difference(r,e){return reject(r,function(t){return contains(e,t)})}exports.difference=difference;function some(r,e){for(var t=0;t<r.length;t++)if(e(r[t]))return!0;return!1}exports.some=some;function indexOf(r,e){for(var t=0;t<r.length;t++)if(r[t]===e)return t;return-1}exports.indexOf=indexOf;function sortBy(r,e){var t=cloneArr(r);return t.sort(function(i,n){return e(i)-e(n)}),t}exports.sortBy=sortBy;function zipObject(r,e){if(r.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var t={},i=0;i<r.length;i++)t[r[i]]=e[i];return t}exports.zipObject=zipObject;function assign(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];r[a]=n[a]}return r}exports.assign=assign;function assignNoOverwrite(r){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=0;i<e.length;i++)for(var n=e[i],s=keys(n),o=0;o<s.length;o++){var a=s[o];has(r,a)||(r[a]=n[a])}return r}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],r,!1))}exports.defaults=defaults;function groupBy(r,e){var t={};return forEach(r,function(i){var n=e(i),s=t[n];s?s.push(i):t[n]=[i]}),t}exports.groupBy=groupBy;function merge(r,e){for(var t=cloneObj(r),i=keys(e),n=0;n<i.length;n++){var s=i[n],o=e[s];t[s]=o}return t}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(r){return r}exports.IDENTITY=IDENTITY;function packArray(r){for(var e=[],t=0;t<r.length;t++){var i=r[t];e.push(i!==void 0?i:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(r){console&&console.error&&console.error(\"Error: \"+r)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(r){console&&console.warn&&console.warn(\"Warning: \"+r)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(r){return r[r.length-1]}exports.peek=peek;function timer(r){var e=new Date().getTime(),t=r(),i=new Date().getTime(),n=i-e;return{time:n,value:t}}exports.timer=timer;function toFastProperties(toBecomeFast){function FakeConstructor(){}FakeConstructor.prototype=toBecomeFast;var fakeInstance=new FakeConstructor;function fakeAccess(){return typeof fakeInstance.bar}return fakeAccess(),fakeAccess(),toBecomeFast;eval(toBecomeFast)}exports.toFastProperties=toFastProperties;function upperFirst(r){if(!r)return r;var e=getCharacterFromCodePointAt(r,0);return e.toUpperCase()+r.substring(e.length)}exports.upperFirst=upperFirst;var surrogatePairPattern=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;function getCharacterFromCodePointAt(r,e){var t=r.substring(e,e+1);return surrogatePairPattern.test(t)?t:r[e]}});var $I=w((UY,_I)=>{(function(r,e){typeof define==\"function\"&&define.amd?define([],e):typeof _I==\"object\"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<\"u\"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar(\"/\");var C=this.disjunction();this.consumeChar(\"/\");for(var y={type:\"Flags\",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(y,\"global\");break;case\"i\":o(y,\"ignoreCase\");break;case\"m\":o(y,\"multiLine\");break;case\"u\":o(y,\"unicode\");break;case\"y\":o(y,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()===\"|\";)this.consumeChar(\"|\"),p.push(this.alternative());return{type:\"Disjunction\",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:\"Alternative\",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case\"^\":return{type:\"StartAnchor\",loc:this.loc(p)};case\"$\":return{type:\"EndAnchor\",loc:this.loc(p)};case\"\\\\\":switch(this.popChar()){case\"b\":return{type:\"WordBoundary\",loc:this.loc(p)};case\"B\":return{type:\"NonWordBoundary\",loc:this.loc(p)}}throw Error(\"Invalid Assertion Escape\");case\"(\":this.consumeChar(\"?\");var C;switch(this.popChar()){case\"=\":C=\"Lookahead\";break;case\"!\":C=\"NegativeLookahead\";break}a(C);var y=this.disjunction();return this.consumeChar(\")\"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case\"*\":C={atLeast:0,atMost:1/0};break;case\"+\":C={atLeast:1,atMost:1/0};break;case\"?\":C={atLeast:0,atMost:1};break;case\"{\":var B=this.integerIncludingZero();switch(this.popChar()){case\"}\":C={atLeast:B,atMost:B};break;case\",\":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar(\"}\");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),C.greedy=!1):C.greedy=!0,C.type=\"Quantifier\",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case\".\":p=this.dotAll();break;case\"\\\\\":p=this.atomEscape();break;case\"[\":p=this.characterClass();break;case\"(\":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[n(`\n`),n(\"\\r\"),n(\"\\u2028\"),n(\"\\u2029\")]}},r.prototype.atomEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":return this.decimalEscapeAtom();case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:\"GroupBackReference\",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case\"d\":p=u;break;case\"D\":p=u,C=!0;break;case\"s\":p=f;break;case\"S\":p=f,C=!0;break;case\"w\":p=g;break;case\"W\":p=g,C=!0;break}return a(p),{type:\"Set\",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case\"f\":p=n(\"\\f\");break;case\"n\":p=n(`\n`);break;case\"r\":p=n(\"\\r\");break;case\"t\":p=n(\"\t\");break;case\"v\":p=n(\"\\v\");break}return a(p),{type:\"Character\",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error(\"Invalid \");var C=p.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:n(\"\\0\")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:\"Character\",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var p=this.popChar();return{type:\"Character\",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type===\"Character\";if(B&&this.isRangeDash()){this.consumeChar(\"-\");var v=this.classAtom(),D=v.type===\"Character\";if(D){if(v.value<y.value)throw Error(\"Range out of order in character class\");p.push({from:y.value,to:v.value})}else s(y.value,p),p.push(n(\"-\")),s(v.value,p)}else s(y.value,p)}return this.consumeChar(\"]\"),{type:\"Set\",complement:C,value:p}},r.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},r.prototype.classEscape=function(){switch(this.consumeChar(\"\\\\\"),this.peekChar()){case\"b\":return this.consumeChar(\"b\"),{type:\"Character\",value:n(\"\\b\")};case\"d\":case\"D\":case\"s\":case\"S\":case\"w\":case\"W\":return this.characterClassEscape();case\"f\":case\"n\":case\"r\":case\"t\":case\"v\":return this.controlEscapeAtom();case\"c\":return this.controlLetterEscapeAtom();case\"0\":return this.nulCharacterAtom();case\"x\":return this.hexEscapeSequenceAtom();case\"u\":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.group=function(){var p=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),p=!1;break;default:this.groupIdx++;break}var C=this.disjunction();this.consumeChar(\")\");var y={type:\"Group\",capturing:p,value:C};return p&&(y.idx=this.groupIdx),y},r.prototype.positiveInteger=function(){var p=this.popChar();if(i.test(p)===!1)throw Error(\"Expecting a positive integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.integerIncludingZero=function(){var p=this.popChar();if(t.test(p)===!1)throw Error(\"Expecting an integer\");for(;t.test(this.peekChar(0));)p+=this.popChar();return parseInt(p,10)},r.prototype.patternCharacter=function(){var p=this.popChar();switch(p){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":throw Error(\"TBD\");default:return{type:\"Character\",value:n(p)}}},r.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},r.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},r.prototype.isDigit=function(){return t.test(this.peekChar(0))},r.prototype.isClassAtom=function(p){switch(p===void 0&&(p=0),this.peekChar(p)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},r.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},r.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},r.prototype.isQuantifier=function(){var p=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(p)}},r.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},r.prototype.parseHexDigits=function(p){for(var C=\"\",y=0;y<p;y++){var B=this.popChar();if(e.test(B)===!1)throw Error(\"Expecting a HexDecimal digits\");C+=B}var v=parseInt(C,16);return{type:\"Character\",value:v}},r.prototype.peekChar=function(p){return p===void 0&&(p=0),this.input[this.idx+p]},r.prototype.popChar=function(){var p=this.peekChar(0);return this.consumeChar(),p},r.prototype.consumeChar=function(p){if(p!==void 0&&this.input[this.idx]!==p)throw Error(\"Expected: '\"+p+\"' but found: '\"+this.input[this.idx]+\"' at offset: \"+this.idx);if(this.idx>=this.input.length)throw Error(\"Unexpected end of input\");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw\"duplicate flag \"+C;p[C]=!0}function a(p){if(p===void 0)throw Error(\"Internal Error - Should never get here!\")}function l(){throw Error(\"Internal Error - Should never get here!\")}var c,u=[];for(c=n(\"0\");c<=n(\"9\");c++)u.push(c);var g=[n(\"_\")].concat(u);for(c=n(\"a\");c<=n(\"z\");c++)g.push(c);for(c=n(\"A\");c<=n(\"Z\");c++)g.push(c);var f=[n(\" \"),n(\"\\f\"),n(`\n`),n(\"\\r\"),n(\"\t\"),n(\"\\v\"),n(\"\t\"),n(\"\\xA0\"),n(\"\\u1680\"),n(\"\\u2000\"),n(\"\\u2001\"),n(\"\\u2002\"),n(\"\\u2003\"),n(\"\\u2004\"),n(\"\\u2005\"),n(\"\\u2006\"),n(\"\\u2007\"),n(\"\\u2008\"),n(\"\\u2009\"),n(\"\\u200A\"),n(\"\\u2028\"),n(\"\\u2029\"),n(\"\\u202F\"),n(\"\\u205F\"),n(\"\\u3000\"),n(\"\\uFEFF\")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case\"Pattern\":this.visitPattern(p);break;case\"Flags\":this.visitFlags(p);break;case\"Disjunction\":this.visitDisjunction(p);break;case\"Alternative\":this.visitAlternative(p);break;case\"StartAnchor\":this.visitStartAnchor(p);break;case\"EndAnchor\":this.visitEndAnchor(p);break;case\"WordBoundary\":this.visitWordBoundary(p);break;case\"NonWordBoundary\":this.visitNonWordBoundary(p);break;case\"Lookahead\":this.visitLookahead(p);break;case\"NegativeLookahead\":this.visitNegativeLookahead(p);break;case\"Character\":this.visitCharacter(p);break;case\"Set\":this.visitSet(p);break;case\"Group\":this.visitGroup(p);break;case\"GroupBackReference\":this.visitGroupBackReference(p);break;case\"Quantifier\":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:\"0.5.0\"}})});var ty=w(Xg=>{\"use strict\";Object.defineProperty(Xg,\"__esModule\",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{\"use strict\";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,\"__esModule\",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY=\"Complement Sets are not supported for first char optimization\";Cn.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(\"\"+Cn.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+r.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n=\"\";e&&(n=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+r.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+GY.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case\"Disjunction\":for(var i=0;i<r.value.length;i++)iy(r.value[i],e,t);break;case\"Alternative\":for(var n=r.value,i=0;i<n.length;i++){var s=n[i];switch(s.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=s;switch(o.type){case\"Character\":ry(o.value,e,t);break;case\"Set\":if(o.complement===!0)throw Error(jY);(0,gs.forEach)(o.value,function(c){if(typeof c==\"number\")ry(c,e,t);else{var u=c;if(t===!0)for(var g=u.from;g<=u.to;g++)ry(g,e,t);else{for(var g=u.from;g<=u.to&&g<xa.minOptimizationVal;g++)ry(g,e,t);if(u.to>=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case\"Group\":iy(o.value,e,t);break;default:throw Error(\"Non Exhaustive Match\")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type===\"Group\"&&kv(o)===!1||o.type!==\"Group\"&&a===!1)break}break;default:throw Error(\"non exhaustive match!\")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t==\"number\")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case\"Lookahead\":this.visitLookahead(t);return;case\"NegativeLookahead\":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{\"use strict\";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,\"__esModule\",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko=\"PATTERN\";Ve.DEFAULT_MODE=\"defaultMode\";Ve.MODES=\"modes\";Ve.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(v,D){return D()}});var t=e.tracer;t(\"initCharCodeToOptimizedIndexMap\",function(){HEe()});var i;t(\"Reject Lexer.NA\",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t(\"Transform Patterns\",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!==\"^\"&&T!==\"$\"&&T!==\".\"&&!D.ignoreCase?T:T.length===2&&T[0]===\"\\\\\"&&!(0,xe.contains)([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,\"exec\"))return n=!0,D;if(typeof D==\"string\"){if(D.length===1)return D;var H=D.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error(\"non exhaustive match\")}})});var o,a,l,c,u;t(\"misc mapping\",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error(\"non exhaustive match\")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,\"POP_MODE\")})});var g;t(\"Line Terminator Handling\",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!==\"onlyOffset\"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,\"LINE_BREAKS\"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t(\"Misc Mapping #2\",function(){f=(0,xe.map)(i,Mv),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t(\"First Char Optimization\",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN==\"string\"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W==\"string\"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+D.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(\"\"+Zg.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+D.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t(\"ArrayPacking\",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- missing static 'PATTERN' property\",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,\"exec\")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\\\][\\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test(\"\")}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' must not match an empty string\",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\\\[][\\^]|^\\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:\"The same RegExp pattern ->\"+a+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,\"GROUP\"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s=\"Token Type: ->\"+n.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+n.PUSH_MODE+\"<-which does not exist\";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&MEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n<a&&LEe(o,i.PATTERN)){var c=\"Token: ->\"+l.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+i.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,\"exec\"))return e.exec(r,0,[],{});if(typeof e==\"string\")return e===r;throw Error(\"non exhaustive match\")}}function MEe(r){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+r.source+\")\",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+r.source,e)}Ve.addStickyFlag=Tv;function OEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.DEFAULT_MODE+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+Ve.MODES+`> property in its definition\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:\"A MultiMode Lexer cannot be initialized with a \"+Ve.DEFAULT_MODE+\": <\"+r.defaultMode+`>which does not exist\n`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+s+\"> at index: <\"+a+`>\n`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=OEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,\"LINE_BREAKS\")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n\tfor details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error(\"non exhaustive match\")}),e}Ve.cloneEmptyGroups=UEe;function Mv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,\"exec\"))return!0;if((0,xe.isString)(e))return!1;throw Error(\"non exhaustive match\")}Ve.isCustomPattern=Mv;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t<e;t++){var i=r.charCodeAt(t);if(i===10)return this.lastIndex=t+1,!0;if(i===13)return r.charCodeAt(t+1)===10?this.lastIndex=t+2:this.lastIndex=t+1,!0}return!1},lastIndex:0};function oj(r,e){if((0,xe.has)(r,\"LINE_BREAKS\"))return!1;if((0,xe.isRegExp)(r.PATTERN)){try{(0,Zg.canMatchCharCode)(e,r.PATTERN)}catch(t){return{issue:ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:t.message}}return!1}else{if((0,xe.isString)(r.PATTERN))return!1;if(Mv(r))return{issue:ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function aj(r,e){if(e.issue===ir.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+r.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r<Ve.minOptimizationVal?r:ny[r]}Ve.charCodeToOptimizedIndex=Lv;function HEe(){if((0,xe.isEmpty)(ny)){ny=new Array(65536);for(var r=0;r<65536;r++)ny[r]=r>255?255+~~(r/255):r}}});var _g=w(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Ov(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ov(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.hasShortKeyProperty=fj;function Ov(r){return(0,Zr.has)(r,\"CATEGORIES\")}Nt.hasCategoriesProperty=Ov;function hj(r){return(0,Zr.has)(r,\"categoryMatches\")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,\"categoryMatchesMap\")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,\"tokenTypeIdx\")}Nt.isTokenType=qEe});var Uv=w(sy=>{\"use strict\";Object.defineProperty(sy,\"__esModule\",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return\"Unable to pop Lexer Mode after encountering Token ->\"+r.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return\"unexpected character: ->\"+r.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+t+\" characters.\")}}});var Bd=w(Cc=>{\"use strict\";Object.defineProperty(Cc,\"__esModule\",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]=\"MISSING_PATTERN\",r[r.INVALID_PATTERN=1]=\"INVALID_PATTERN\",r[r.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",r[r.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",r[r.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",r[r.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",r[r.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",r[r.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",r[r.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",r[r.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",r[r.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",r[r.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",r[r.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n==\"number\"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var s,o=!0;i.TRACE_INIT(\"Lexer Config handling\",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT(\"performRuntimeChecks\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT(\"performWarningRuntimeChecks\",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT(\"Mode: <\"+g+\"> processing\",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT(\"validatePatterns\",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT(\"analyzeTokenTypes\",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+i.config.positionTracking+'\"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT(\"Failed Optimization Warnings\",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error(\"Lexer Modes: < \"+u.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT(\"clearRegExpParserCache\",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT(\"toFastProperties\",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,M=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;j<H;){c=null;var qe=T.charCodeAt(j),ne=Ne(qe),Y=ne.length;for(n=0;n<Y;n++){ae=ne[n];var he=ae.pattern;u=null;var ie=ae.short;if(ie!==!1?qe===ie&&(c=he):ae.isCustom===!0?(D=he.exec(T,j,W,ge),D!==null?(c=D[0],D.payload!==void 0&&(u=D.payload)):c=null):(this.updateLastIndex(he,j),c=this.match(he,e,j)),c!==null){if(l=ae.longerAlt,l!==void 0){var de=l.length;for(o=0;o<de;o++){var _e=ue[l[o]],Pt=_e.pattern;if(g=null,_e.isCustom===!0?(D=Pt.exec(T,j,W,ge),D!==null?(a=D[0],D.payload!==void 0&&(g=D.payload)):a=null):(this.updateLastIndex(Pt,j),a=this.match(Pt,e,j)),a&&a.length>c.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Mr=void 0,ii=void 0;M.lastIndex=0;do Mr=M.test(c),Mr===!0&&(ii=M.lastIndex-1,It++);while(Mr===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j<H;)for(B=T.charCodeAt(j),e=this.chopInput(e,1),j++,s=0;s<F;s++){var Ks=ue[s],he=Ks.pattern,ie=Ks.short;if(ie!==!1?T.charCodeAt(j)===ie&&(ni=!0):Ks.isCustom===!0?ni=he.exec(T,j,W,ge)!==null:(this.updateLastIndex(he,j),ni=he.exec(e)!==null),ni===!0)break}y=j-gi,v=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(T,gi,y,hr,fi),_.push({offset:gi,line:hr,column:fi,length:y,message:v})}}return this.hasCustom||(W.length=$),{tokens:W,groups:ge,errors:_}},r.prototype.handleModes=function(e,t,i,n){if(e.pop===!0){var s=e.push;t(n),s!==void 0&&i.call(this,s)}else e.push!==void 0&&i.call(this,e.push)},r.prototype.chopInput=function(e,t){return e.substring(t)},r.prototype.updateLastIndex=function(e,t){e.lastIndex=t},r.prototype.updateTokenEndLineColumnLocation=function(e,t,i,n,s,o,a){var l,c;t!==void 0&&(l=i===a-1,c=l?-1:0,n===1&&l===!0||(e.endLine=s+c,e.endColumn=o-1+-c))},r.prototype.computeNewColumn=function(e,t){return e+t},r.prototype.createTokenInstance=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return null},r.prototype.createOffsetOnlyToken=function(e,t,i,n){return{image:e,startOffset:t,tokenTypeIdx:i,tokenType:n}},r.prototype.createStartOnlyToken=function(e,t,i,n,s,o){return{image:e,startOffset:t,startLine:s,startColumn:o,tokenTypeIdx:i,tokenType:n}},r.prototype.createFullToken=function(e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:t+a-1,startLine:s,endLine:s,startColumn:o,endColumn:o+a-1,tokenTypeIdx:i,tokenType:n}},r.prototype.addToken=function(e,t,i){return 666},r.prototype.addTokenUsingPush=function(e,t,i){return e.push(i),t},r.prototype.addTokenUsingMemberAccess=function(e,t,i){return e[t]=i,t++,t},r.prototype.handlePayload=function(e,t){},r.prototype.handlePayloadNoCustom=function(e,t){},r.prototype.handlePayloadWithCustom=function(e,t){t!==null&&(e.payload=t)},r.prototype.match=function(e,t,i){return null},r.prototype.matchWithTest=function(e,t,i){var n=e.test(t);return n===!0?t.substring(i,e.lastIndex):null},r.prototype.matchWithExec=function(e,t){var i=e.exec(t);return i!==null?i[0]:i},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r.SKIPPED=\"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{\"use strict\";Object.defineProperty(Qi,\"__esModule\",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==\"\"}Qi.hasTokenLabel=bj;var eIe=\"parent\",dj=\"categories\",Cj=\"label\",mj=\"group\",Ej=\"push_mode\",Ij=\"pop_mode\",yj=\"longer_alt\",wj=\"line_breaks\",Bj=\"start_chars_hint\";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:\"EOF\",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{\"use strict\";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,\"__esModule\",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText=\"\",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:\"NonTerminal\",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:\"Alternative\",definition:e(r.definition)};if(r instanceof Pj)return{type:\"Option\",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:\"RepetitionMandatory\",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:\"RepetitionMandatoryWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:\"RepetitionWithSeparator\",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:\"Repetition\",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:\"Alternation\",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:\"Terminal\",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:\"Rule\",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error(\"non exhaustive match\")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{\"use strict\";Object.defineProperty(ay,\"__esModule\",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error(\"non exhaustive match\")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{\"use strict\";Object.defineProperty(ly,\"__esModule\",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error(\"non exhaustive match\")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Oi=>{\"use strict\";var AIe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,\"__esModule\",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Oi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Oi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Oi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return\"SUBRULE\";if(r instanceof br.Option)return\"OPTION\";if(r instanceof br.Alternation)return\"OR\";if(r instanceof br.RepetitionMandatory)return\"AT_LEAST_ONE\";if(r instanceof br.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(r instanceof br.RepetitionWithSeparator)return\"MANY_SEP\";if(r instanceof br.Repetition)return\"MANY\";if(r instanceof br.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}Oi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator=\"-\",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+\"Terminal\";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Oi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Oi.collectMethods=fIe});var qv=w(No=>{\"use strict\";Object.defineProperty(No,\"__esModule\",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Mj=mn(),jv=vd();function gy(r){if(r instanceof Mj.NonTerminal)return gy(r.referencedRule);if(r instanceof Mj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Oj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error(\"non exhaustive match\")}No.first=gy;function Oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Oj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{\"use strict\";Object.defineProperty(fy,\"__esModule\",{value:!0});fy.IN=void 0;fy.IN=\"_~IN~_\"});var qj=w(fs=>{\"use strict\";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,\"__esModule\",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{\"use strict\";Object.defineProperty(Da,\"__esModule\",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?\"--> \"+(0,ef.tokenLabel)(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",a=\"Expecting \"+o+\" but found --> '\"+t.image+\"' <--\";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o=\"Expecting: \",a=(0,eo.first)(t).image,l=`\nbut found: '`+a+\"'\";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return\"[\"+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(\", \")+\"]\"}),g=(0,eo.map)(u,function(h,p){return\"  \"+(p+1)+\". \"+h}),f=`one of these possible Token sequences:\n`+g.join(`\n`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s=\"Expecting: \",o=(0,eo.first)(t).image,a=`\nbut found: '`+o+\"'\";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return\"[\"+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(\",\")+\"]\"}),c=`expecting at least one iteration which starts with one of these possible Token sequences::\n  `+(\"<\"+l.join(\" ,\")+\">\");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+r.name+\"<-\";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:\"\"}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c=\"->\"+o+(l?s:\"\")+\"<- \"+(a?\"with argument: ->\"+a+\"<-\":\"\")+`\n                  appears more than once (`+e.length+\" times) in the top level rule: ->\"+i+`<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  `;return c=c.replace(/[ \\t]+/g,\" \"),c=c.replace(/\\s\\s+/g,`\n`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+r.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous alternatives: <\"+r.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+t+\"> inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(\", \"),t=r.alternation.idx===0?\"\":r.alternation.idx,i=\"Ambiguous Alternatives Detected: <\"+r.ambiguityIndices.join(\" ,\")+\"> in <OR\"+t+\">\"+(\" inside <\"+r.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t=\"The repetition <\"+e+\"> within Rule <\"+r.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return\"deprecated\"},buildEmptyAlternationError:function(r){var e=\"Ambiguous empty alternative: <\"+(r.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+r.alternation.idx+\"> inside <\"+r.topLevelRule.name+`> Rule.\n has `+(r.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+\" --> \"+t.concat([e]).join(\" --> \"),n=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is: \n `+i+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return\"deprecated\"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+r.grammarName+\"<-\";return t}}});var Vj=w(LA=>{\"use strict\";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,\"__esModule\",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{\"use strict\";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,\"__esModule\",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName=\"\",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName=\"\",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length<e&&n<r.length;){var a=r[n];if(a instanceof kt.Alternative)return o(a.definition);if(a instanceof kt.NonTerminal)return o(a.definition);if(a instanceof kt.Option)i=o(a.definition);else if(a instanceof kt.RepetitionMandatory){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);return o(l)}else if(a instanceof kt.RepetitionMandatoryWithSeparator){var l=[new kt.Alternative({definition:a.definition}),new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})];return o(l)}else if(a instanceof kt.RepetitionWithSeparator){var l=a.definition.concat([new kt.Repetition({definition:[new kt.Terminal({terminalType:a.separator})].concat(a.definition)})]);i=o(l)}else if(a instanceof kt.Repetition){var l=a.definition.concat([new kt.Repetition({definition:a.definition})]);i=o(l)}else{if(a instanceof kt.Alternation)return(0,Kt.forEach)(a.definition,function(c){(0,Kt.isEmpty)(c.definition)===!1&&(i=o(c.definition))}),i;if(a instanceof kt.Terminal)t.push(a.terminalType);else throw Error(\"non exhaustive match\")}n++}return i.push({partialPath:t,suffixDef:(0,Kt.drop)(r,n)}),i}Nr.possiblePathsFrom=_j;function kIe(r,e,t,i){var n=\"EXIT_NONE_TERMINAL\",s=[n],o=\"EXIT_ALTERNATIVE\",a=!1,l=e.length,c=l-i-1,u=[],g=[];for(g.push({idx:-1,def:r,ruleStack:[],occurrenceStack:[]});!(0,Kt.isEmpty)(g);){var f=g.pop();if(f===o){a&&(0,Kt.last)(g).idx<=c&&g.pop();continue}var h=f.def,p=f.idx,C=f.ruleStack,y=f.occurrenceStack;if(!(0,Kt.isEmpty)(h)){var B=h[0];if(B===n){var v={idx:p,def:(0,Kt.drop)(h),ruleStack:(0,Kt.dropRight)(C),occurrenceStack:(0,Kt.dropRight)(y)};g.push(v)}else if(B instanceof kt.Terminal)if(p<l-1){var D=p+1,T=e[D];if(t(T,B.terminalType)){var v={idx:D,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push(v)}}else if(p===l-1)u.push({nextTokenType:B.terminalType,nextTokenOccurrence:B.idx,ruleStack:C,occurrenceStack:y}),a=!0;else throw Error(\"non exhaustive match\");else if(B instanceof kt.NonTerminal){var H=(0,Kt.cloneArr)(C);H.push(B.nonTerminalName);var j=(0,Kt.cloneArr)(y);j.push(B.idx);var v={idx:p,def:B.definition.concat(s,(0,Kt.drop)(h)),ruleStack:H,occurrenceStack:j};g.push(v)}else if(B instanceof kt.Option){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var V={idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.RepetitionMandatory){var W=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionMandatoryWithSeparator){var A=new kt.Terminal({terminalType:B.separator}),W=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([W],(0,Kt.drop)(h)),v={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(v)}else if(B instanceof kt.RepetitionWithSeparator){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var A=new kt.Terminal({terminalType:B.separator}),Ae=new kt.Repetition({definition:[A].concat(B.definition),idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Repetition){var $={idx:p,def:(0,Kt.drop)(h),ruleStack:C,occurrenceStack:y};g.push($),g.push(o);var Ae=new kt.Repetition({definition:B.definition,idx:B.idx}),_=B.definition.concat([Ae],(0,Kt.drop)(h)),V={idx:p,def:_,ruleStack:C,occurrenceStack:y};g.push(V)}else if(B instanceof kt.Alternation)for(var ge=B.definition.length-1;ge>=0;ge--){var re=B.definition[ge],M={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(M),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error(\"non exhaustive match\")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{\"use strict\";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),MA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]=\"OPTION\",r[r.REPETITION=1]=\"REPETITION\",r[r.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",r[r.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",r[r.ALTERNATION=5]=\"ALTERNATION\"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof MA.Option)return oi.OPTION;if(r instanceof MA.Repetition)return oi.REPETITION;if(r instanceof MA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof MA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof MA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof MA.Alternation)return oi.ALTERNATION;throw Error(\"non exhaustive match\")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function MIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=MIe;function OIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u<n;u++){var g=r[u],f=g.length,h=c[u];if(h!==void 0&&h.call(this)===!1)continue;e:for(var p=0;p<f;p++){for(var C=g[p],y=C.length,B=0;B<y;B++){var v=this.LA(B+1);if(t(v,C[B])===!1)continue e}return u}}};if(s&&!i){var o=(0,sr.map)(r,function(l){return(0,sr.flatten)(l)}),a=(0,sr.reduce)(o,function(l,c,u){return(0,sr.forEach)(c,function(g){(0,sr.has)(l,g.tokenTypeIdx)||(l[g.tokenTypeIdx]=u),(0,sr.forEach)(g.categoryMatches,function(f){(0,sr.has)(l,f)||(l[f]=u)})}),l},[]);return function(){var l=this.LA(1);return a[l.tokenTypeIdx]}}else return function(){for(var l=0;l<n;l++){var c=r[l],u=c.length;e:for(var g=0;g<u;g++){for(var f=c[g],h=f.length,p=0;p<h;p++){var C=this.LA(p+1);if(t(C,f[p])===!1)continue e}return l}}}}Zt.buildAlternativesLookAheadFunc=OIe;function KIe(r,e,t){var i=(0,sr.every)(r,function(c){return c.length===1}),n=r.length;if(i&&!t){var s=(0,sr.flatten)(r);if(s.length===1&&(0,sr.isEmpty)(s[0].categoryMatches)){var o=s[0],a=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===a}}else{var l=(0,sr.reduce)(s,function(c,u,g){return c[u.tokenTypeIdx]=!0,(0,sr.forEach)(u.categoryMatches,function(f){c[f]=!0}),c},[]);return function(){var c=this.LA(1);return l[c.tokenTypeIdx]===!0}}}else return function(){e:for(var c=0;c<n;c++){for(var u=r[c],g=u.length,f=0;f<g;f++){var h=this.LA(f+1);if(e(h,u[f])===!1)continue e}return!0}return!1}}Zt.buildSingleAlternativeLookaheadFunction=KIe;var UIe=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.topProd=t,s.targetOccurrence=i,s.targetProdType=n,s}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(t,i,n,s){return t.idx===this.targetOccurrence&&this.targetProdType===i?(this.restDef=n.concat(s),!0):!1},e.prototype.walkOption=function(t,i,n){this.checkIsTarget(t,oi.OPTION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOne=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkAtLeastOneSep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkMany=function(t,i,n){this.checkIsTarget(t,oi.REPETITION,i,n)||r.prototype.walkOption.call(this,t,i,n)},e.prototype.walkManySep=function(t,i,n){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR,i,n)||r.prototype.walkOption.call(this,t,i,n)},e}(FIe.RestWalker),rq=function(r){tq(e,r);function e(t,i,n){var s=r.call(this)||this;return s.targetOccurrence=t,s.targetProdType=i,s.targetRef=n,s.result=[],s}return e.prototype.checkIsTarget=function(t,i){t.idx===this.targetOccurrence&&this.targetProdType===i&&(this.targetRef===void 0||t===this.targetRef)&&(this.result=t.definition)},e.prototype.visitOption=function(t){this.checkIsTarget(t,oi.OPTION)},e.prototype.visitRepetition=function(t){this.checkIsTarget(t,oi.REPETITION)},e.prototype.visitRepetitionMandatory=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_MANDATORY_WITH_SEPARATOR)},e.prototype.visitRepetitionWithSeparator=function(t){this.checkIsTarget(t,oi.REPETITION_WITH_SEPARATOR)},e.prototype.visitAlternation=function(t){this.checkIsTarget(t,oi.ALTERNATION)},e}(NIe.GAstVisitor);function eq(r){for(var e=new Array(r),t=0;t<r;t++)e[t]=[];return e}function zv(r){for(var e=[\"\"],t=0;t<r.length;t++){for(var i=r[t],n=[],s=0;s<e.length;s++){var o=e[s];n.push(o+\"_\"+i.tokenTypeIdx);for(var a=0;a<i.categoryMatches.length;a++){var l=\"_\"+i.categoryMatches[a];n.push(o+l)}}e=n}return e}function HIe(r,e,t){for(var i=0;i<r.length;i++)if(i!==t)for(var n=r[i],s=0;s<e.length;s++){var o=e[s];if(n[o]===!0)return!1}return!0}function Vv(r,e){for(var t=(0,sr.map)(r,function(u){return(0,$j.possiblePathsFrom)([u],1)}),i=eq(t.length),n=(0,sr.map)(t,function(u){var g={};return(0,sr.forEach)(u,function(f){var h=zv(f.partialPath);(0,sr.forEach)(h,function(p){g[p]=!0})}),g}),s=t,o=1;o<=e;o++){var a=s;s=eq(a.length);for(var l=function(u){for(var g=a[u],f=0;f<g.length;f++){var h=g[f].partialPath,p=g[f].suffixDef,C=zv(h),y=HIe(n,C,u);if(y||(0,sr.isEmpty)(p)||h.length===e){var B=i[u];if(sq(B,h)===!1){B.push(h);for(var v=0;v<C.length;v++){var D=C[v];n[u][D]=!0}}}else{var T=(0,$j.possiblePathsFrom)(p,o+1,h);s[u]=s[u].concat(T),(0,sr.forEach)(T,function(H){var j=zv(H.partialPath);(0,sr.forEach)(j,function($){n[u][$]=!0})})}}},c=0;c<a.length;c++)l(c)}return i}Zt.lookAheadSequenceFromAlternatives=Vv;function iq(r,e,t,i){var n=new rq(r,oi.ALTERNATION,i);return e.accept(n),Vv(n.result,t)}Zt.getLookaheadPathsForOr=iq;function nq(r,e,t,i){var n=new rq(r,t);e.accept(n);var s=n.result,o=new UIe(e,r,t),a=o.startWalking(),l=new MA.Alternative({definition:s}),c=new MA.Alternative({definition:a});return Vv([l,c],i)}Zt.getLookaheadPathsForOptionalProd=nq;function sq(r,e){e:for(var t=0;t<r.length;t++){var i=r[t];if(i.length===e.length){for(var n=0;n<i.length;n++){var s=e[n],o=i[n],a=s===o||o.categoryMatchesMap[s.tokenTypeIdx]!==void 0;if(a===!1)continue e}return!0}}return!1}Zt.containsPath=sq;function GIe(r,e){return r.length<e.length&&(0,sr.every)(r,function(t,i){var n=e[i];return t===n||n.categoryMatchesMap[t.tokenTypeIdx]})}Zt.isStrictPrefixOfPath=GIe;function Xv(r){return(0,sr.every)(r,function(e){return(0,sr.every)(e,function(t){return(0,sr.every)(t,function(i){return(0,sr.isEmpty)(i.categoryMatches)})})})}Zt.areTokenCategoriesNotUsed=Xv});var rx=w(Vt=>{\"use strict\";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+\"_#_\"+r.idx+\"_#_\"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:\"\"}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n=\"Invalid rule override, rule: ->\"+r+\"<- cannot be overridden in the grammar: ->\"+t+\"<-as it is not defined in any of the super grammars \",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error(\"non exhaustive match\");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx<l&&(0,tf.isStrictPrefixOfPath)(f.path,c)}),g=(0,Qr.map)(u,function(f){var h=[f.idx+1,l+1],p=e.idx===0?\"\":e.idx,C=i.buildAlternationPrefixAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:h,prefixPath:f.path});return{message:C,type:To.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,ruleName:t.name,occurrence:p,alternatives:h}});n=n.concat(g)}}),n}Vt.checkPrefixAlternativesAmbiguities=pq;function zIe(r,e,t){var i=[],n=(0,Qr.map)(e,function(s){return s.name});return(0,Qr.forEach)(r,function(s){var o=s.name;if((0,Qr.contains)(n,o)){var a=t.buildNamespaceConflictError(s);i.push({message:a,type:To.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),i}});var Cq=w(rf=>{\"use strict\";Object.defineProperty(rf,\"__esModule\",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{\"use strict\";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,\"__esModule\",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq=\"MismatchedTokenException\",Eq=\"NoViableAltException\",Iq=\"EarlyExitException\",yq=\"NotAllInputParsedException\",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{\"use strict\";Object.defineProperty(Ki,\"__esModule\",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,\"recoveryEnabled\")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx(\"sad sad panda\")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.OPTION_IDX=2<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_IDX=3<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_IDX=4<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.MANY_SEP_IDX=5<<Jt.BITS_FOR_OCCURRENCE_IDX;Jt.AT_LEAST_ONE_SEP_IDX=6<<Jt.BITS_FOR_OCCURRENCE_IDX;function lye(r,e,t){return t|e|r}Jt.getKeyForAutomaticLookahead=lye;var xet=32-Jt.BITS_FOR_ALT_IDX});var Qq=w(my=>{\"use strict\";Object.defineProperty(my,\"__esModule\",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,\"dynamicTokensEnabled\")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,\"maxLookahead\")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+\" Rule Lookahead\",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?\"\":g.idx;t.TRACE_INIT(\"\"+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(\"\"+o+(t===0?\"\":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{\"use strict\";Object.defineProperty(Lo,\"__esModule\",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset)}Lo.setNodeLocationOnlyOffset=uye;function gye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.startColumn=e.startColumn,r.startLine=e.startLine,r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine):r.endOffset<e.endOffset&&(r.endOffset=e.endOffset,r.endColumn=e.endColumn,r.endLine=e.endLine)}Lo.setNodeLocationFull=gye;function fye(r,e,t){r.children[t]===void 0?r.children[t]=[e]:r.children[t].push(e)}Lo.addTerminalToCst=fye;function hye(r,e,t){r.children[e]===void 0?r.children[e]=[t]:r.children[e].push(t)}Lo.addNoneTerminalToCst=hye});var ox=w(OA=>{\"use strict\";Object.defineProperty(OA,\"__esModule\",{value:!0});OA.defineNameProp=OA.functionName=OA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}OA.classNameFromInstance=dye;var vq=\"name\";function xq(r){var e=r.name;return e||\"anonymous\"}OA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}OA.defineNameProp=Cye});var Fq=w(Si=>{\"use strict\";Object.defineProperty(Si,\"__esModule\",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n<i;n++)for(var s=t[n],o=r[s],a=o.length,l=0;l<a;l++){var c=o[l];c.tokenTypeIdx===void 0&&this[c.name](c.children,e)}}Si.defaultVisit=Pq;function mye(r,e){var t=function(){};(0,Nd.defineNameProp)(t,r+\"BaseSemantics\");var i={visit:function(n,s){if((0,ps.isArray)(n)&&(n=n[0]),!(0,ps.isUndefined)(n))return this[n.name](n.children,s)},validateVisitor:function(){var n=Dq(this,e);if(!(0,ps.isEmpty)(n)){var s=(0,ps.map)(n,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+(0,Nd.functionName)(this.constructor)+`>:\n\t`+(\"\"+s.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+\"BaseSemanticsWithDefaults\");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",r[r.MISSING_METHOD=1]=\"MISSING_METHOD\"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:\"Missing visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+\" CST Visitor.\",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=[\"constructor\",\"visit\",\"validateVisitor\"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:\"Redundant visitor method: <\"+i+\"> on \"+(0,Nd.functionName)(r.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{\"use strict\";Object.defineProperty(Ey,\"__esModule\",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,\"nodeLocationTracking\")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Mq=w(Iy=>{\"use strict\";Object.defineProperty(Iy,\"__esModule\",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{\"use strict\";Object.defineProperty(yy,\"__esModule\",{value:!0});yy.RecognizerApi=void 0;var Oq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Oq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Oq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{\"use strict\";Object.defineProperty(By,\"__esModule\",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset==\"number\")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,\"modes\")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,\"resyncEnabled\")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,\"recoveryValueFunc\")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<<qn.BITS_FOR_METHOD_TYPE+qn.BITS_FOR_OCCURRENCE_IDX;this.ruleShortNameIdx++,this.shortRuleNameToFull[o]=e,this.fullRuleNameToShort[e]=o;function a(u){try{if(this.outputCst===!0){t.apply(this,u);var g=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(g),g}else return t.apply(this,u)}catch(f){return this.invokeRuleCatch(f,n,s)}finally{this.ruleFinallyStateUpdate()}}var l=function(u,g){return u===void 0&&(u=0),this.ruleInvocationStateUpdate(o,e,u),a.call(this,g)},c=\"ruleName\";return l[c]=e,l.originalGrammarAction=t,l},r.prototype.invokeRuleCatch=function(e,t,i){var n=this.RULE_STACK.length===1,s=t&&!this.isBackTracking()&&this.recoveryEnabled;if((0,wy.isRecognitionException)(e)){var o=e;if(s){var a=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(a))if(o.resyncedTokens=this.reSyncTo(a),this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];return l.recoveredNode=!0,l}else return i();else{if(this.outputCst){var l=this.CST_STACK[this.CST_STACK.length-1];l.recoveredNode=!0,o.partialCstResult=l}throw o}}else{if(n)return this.moveToTerminatedState(),i();throw o}}else throw e},r.prototype.optionInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OPTION_IDX,t);return this.optionInternalLogic(e,t,i)},r.prototype.optionInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(e.DEF!==void 0){if(o=e.DEF,a=e.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=e;if(s.call(this)===!0)return o.call(this)},r.prototype.atLeastOneInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,t,i)},r.prototype.atLeastOneInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;if(s.call(this)===!0)for(var c=this.doSingleRepetition(o);s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY,t.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,t],s,qn.AT_LEAST_ONE_IDX,e,of.NextTerminalAfterAtLeastOneWalker)},r.prototype.atLeastOneSepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,t,i)},r.prototype.atLeastOneSepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterAtLeastOneSepWalker],l,qn.AT_LEAST_ONE_SEP_IDX,e,of.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,Uq.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,t.ERR_MSG)},r.prototype.manyInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_IDX,e);return this.manyInternalLogic(e,t,i)},r.prototype.manyInternalLogic=function(e,t,i){var n=this,s=this.getLaFuncFromCache(i),o,a;if(t.DEF!==void 0){if(o=t.DEF,a=t.GATE,a!==void 0){var l=s;s=function(){return a.call(n)&&l.call(n)}}}else o=t;for(var c=!0;s.call(this)===!0&&c===!0;)c=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,t],s,qn.MANY_IDX,e,of.NextTerminalAfterManyWalker,c)},r.prototype.manySepFirstInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,t,i)},r.prototype.manySepFirstInternalLogic=function(e,t,i){var n=this,s=t.DEF,o=t.SEP,a=this.getLaFuncFromCache(i);if(a.call(this)===!0){s.call(this);for(var l=function(){return n.tokenMatcher(n.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),s.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,l,s,of.NextTerminalAfterManySepWalker],l,qn.MANY_SEP_IDX,e,of.NextTerminalAfterManySepWalker)}},r.prototype.repetitionSepSecondInternal=function(e,t,i,n,s){for(;i();)this.CONSUME(t),n.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,t,i,n,s],i,qn.AT_LEAST_ONE_SEP_IDX,e,s)},r.prototype.doSingleRepetition=function(e){var t=this.getLexerPosition();e.call(this);var i=this.getLexerPosition();return i>t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{\"use strict\";Object.defineProperty(by,\"__esModule\",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,\"errorMessageProvider\")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error(\"Trying to save an Error which is not a RecognitionException\")},Object.defineProperty(r.prototype,\"errors\",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{\"use strict\";Object.defineProperty(Qy,\"__esModule\",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{\"use strict\";Object.defineProperty(xy,\"__esModule\",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Mo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Mye=Cy(),vy={description:\"This Object indicates the Parser is during Recording Phase\"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Mye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:\"RECORDING_PHASE_TOKEN\",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Oye={name:`This CSTNode indicates the Parser is in Recording Phase\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var t=function(n){var s=n>0?n:\"\";e[\"CONSUME\"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e[\"SUBRULE\"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e[\"OPTION\"+s]=function(o){return this.optionInternalRecord(o,n)},e[\"OR\"+s]=function(o){return this.orInternalRecord(o,n)},e[\"MANY\"+s]=function(o){this.manyInternalRecord(n,o)},e[\"MANY_SEP\"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e[\"AT_LEAST_ONE\"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e[\"AT_LEAST_ONE_SEP\"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var t=0;t<10;t++){var i=t>0?t:\"\";delete e[\"CONSUME\"+i],delete e[\"SUBRULE\"+i],delete e[\"OPTION\"+i],delete e[\"OR\"+i],delete e[\"MANY\"+i],delete e[\"MANY_SEP\"+i],delete e[\"AT_LEAST_ONE\"+i],delete e[\"AT_LEAST_ONE_SEP\"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Mo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Mo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Mo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Mo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,\"ruleName\")===!1){var n=new Error(\"<SUBRULE\"+Zq(t)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Mo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Oye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(\"<CONSUME\"+Zq(t)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Mo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Mo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Mo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,\"IGNORE_AMBIGUITIES\")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,\"GATE\")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?\"\":\"\"+r}function Sy(r){if(r<0||r>Xq){var e=new Error(\"Invalid DSL Method idx value: <\"+r+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{\"use strict\";Object.defineProperty(Py,\"__esModule\",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,\"traceInitPerf\")){var t=e.traceInitPerf,i=typeof t==\"number\";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(i+\"--> <\"+e+\">\");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&a(i+\"<-- <\"+e+\"> time: \"+s+\"ms\"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{\"use strict\";Object.defineProperty(Dy,\"__esModule\",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!==\"constructor\"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{\"use strict\";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,\"__esModule\",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Mq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,\"\",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",r[r.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",r[r.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",r[r.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",r[r.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",r[r.LEFT_RECURSION=5]=\"LEFT_RECURSION\",r[r.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",r[r.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",r[r.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",r[r.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",r[r.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",r[r.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=(0,en.has)(t,\"skipValidations\")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT(\"toFastProps\",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+\" Rule\",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT(\"Grammar Resolving\",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT(\"Grammar Validations\",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected:\n `+t.join(`\n-------------------------------\n`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{\"use strict\";Object.defineProperty(Ry,\"__esModule\",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/\":i,s=t.css,o=s===void 0?\"https://unpkg.com/chevrotain@\"+cJ.VERSION+\"/diagrams/diagrams.css\":s,a=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n`,l=`\n<link rel='stylesheet' href='`+o+`'>\n`,c=`\n<script src='`+n+`vendor/railroad-diagrams.js'><\\/script>\n<script src='`+n+`src/diagrams_builder.js'><\\/script>\n<script src='`+n+`src/diagrams_behavior.js'><\\/script>\n<script src='`+n+`src/main.js'><\\/script>\n`,u=`\n<div id=\"diagrams\" align=\"center\"></div>    \n`,g=`\n<script>\n    window.serializedGrammar = `+JSON.stringify(r,null,\"  \")+`;\n<\\/script>\n`,f=`\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n<\\/script>\n`;return a+l+c+u+g+f}Ry.createSyntaxDiagramsCode=owe});var hJ=w(We=>{\"use strict\";Object.defineProperty(We,\"__esModule\",{value:!0});We.Parser=We.createSyntaxDiagramsCode=We.clearCache=We.GAstVisitor=We.serializeProduction=We.serializeGrammar=We.Terminal=We.Rule=We.RepetitionWithSeparator=We.RepetitionMandatoryWithSeparator=We.RepetitionMandatory=We.Repetition=We.Option=We.NonTerminal=We.Alternative=We.Alternation=We.defaultLexerErrorProvider=We.NoViableAltException=We.NotAllInputParsedException=We.MismatchedTokenException=We.isRecognitionException=We.EarlyExitException=We.defaultParserErrorProvider=We.tokenName=We.tokenMatcher=We.tokenLabel=We.EOF=We.createTokenInstance=We.createToken=We.LexerDefinitionErrorType=We.Lexer=We.EMPTY_ALT=We.ParserDefinitionErrorType=We.EmbeddedActionsParser=We.CstParser=We.VERSION=void 0;var awe=Dv();Object.defineProperty(We,\"VERSION\",{enumerable:!0,get:function(){return awe.VERSION}});var Fy=jn();Object.defineProperty(We,\"CstParser\",{enumerable:!0,get:function(){return Fy.CstParser}});Object.defineProperty(We,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return Fy.EmbeddedActionsParser}});Object.defineProperty(We,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return Fy.ParserDefinitionErrorType}});Object.defineProperty(We,\"EMPTY_ALT\",{enumerable:!0,get:function(){return Fy.EMPTY_ALT}});var gJ=Bd();Object.defineProperty(We,\"Lexer\",{enumerable:!0,get:function(){return gJ.Lexer}});Object.defineProperty(We,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return gJ.LexerDefinitionErrorType}});var af=TA();Object.defineProperty(We,\"createToken\",{enumerable:!0,get:function(){return af.createToken}});Object.defineProperty(We,\"createTokenInstance\",{enumerable:!0,get:function(){return af.createTokenInstance}});Object.defineProperty(We,\"EOF\",{enumerable:!0,get:function(){return af.EOF}});Object.defineProperty(We,\"tokenLabel\",{enumerable:!0,get:function(){return af.tokenLabel}});Object.defineProperty(We,\"tokenMatcher\",{enumerable:!0,get:function(){return af.tokenMatcher}});Object.defineProperty(We,\"tokenName\",{enumerable:!0,get:function(){return af.tokenName}});var Awe=xd();Object.defineProperty(We,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Awe.defaultParserErrorProvider}});var Md=nf();Object.defineProperty(We,\"EarlyExitException\",{enumerable:!0,get:function(){return Md.EarlyExitException}});Object.defineProperty(We,\"isRecognitionException\",{enumerable:!0,get:function(){return Md.isRecognitionException}});Object.defineProperty(We,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Md.MismatchedTokenException}});Object.defineProperty(We,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Md.NotAllInputParsedException}});Object.defineProperty(We,\"NoViableAltException\",{enumerable:!0,get:function(){return Md.NoViableAltException}});var lwe=Uv();Object.defineProperty(We,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return lwe.defaultLexerErrorProvider}});var Oo=mn();Object.defineProperty(We,\"Alternation\",{enumerable:!0,get:function(){return Oo.Alternation}});Object.defineProperty(We,\"Alternative\",{enumerable:!0,get:function(){return Oo.Alternative}});Object.defineProperty(We,\"NonTerminal\",{enumerable:!0,get:function(){return Oo.NonTerminal}});Object.defineProperty(We,\"Option\",{enumerable:!0,get:function(){return Oo.Option}});Object.defineProperty(We,\"Repetition\",{enumerable:!0,get:function(){return Oo.Repetition}});Object.defineProperty(We,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Oo.RepetitionMandatory}});Object.defineProperty(We,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionMandatoryWithSeparator}});Object.defineProperty(We,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Oo.RepetitionWithSeparator}});Object.defineProperty(We,\"Rule\",{enumerable:!0,get:function(){return Oo.Rule}});Object.defineProperty(We,\"Terminal\",{enumerable:!0,get:function(){return Oo.Terminal}});var fJ=mn();Object.defineProperty(We,\"serializeGrammar\",{enumerable:!0,get:function(){return fJ.serializeGrammar}});Object.defineProperty(We,\"serializeProduction\",{enumerable:!0,get:function(){return fJ.serializeProduction}});var cwe=$g();Object.defineProperty(We,\"GAstVisitor\",{enumerable:!0,get:function(){return cwe.GAstVisitor}});function uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}We.clearCache=uwe;var gwe=uJ();Object.defineProperty(We,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return gwe.createSyntaxDiagramsCode}});var fwe=function(){function r(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return r}();We.Parser=fwe});var CJ=w((Jet,dJ)=>{var Ny=hJ(),Fa=Ny.createToken,pJ=Ny.tokenMatcher,ux=Ny.Lexer,hwe=Ny.EmbeddedActionsParser;dJ.exports=r=>{let e=Fa({name:\"LogicalOperator\",pattern:ux.NA}),t=Fa({name:\"Or\",pattern:/\\|/,categories:e}),i=Fa({name:\"Xor\",pattern:/\\^/,categories:e}),n=Fa({name:\"And\",pattern:/&/,categories:e}),s=Fa({name:\"Not\",pattern:/!/}),o=Fa({name:\"LParen\",pattern:/\\(/}),a=Fa({name:\"RParen\",pattern:/\\)/}),l=Fa({name:\"Query\",pattern:r}),u=[Fa({name:\"WhiteSpace\",pattern:/\\s+/,group:ux.SKIPPED}),t,i,n,o,a,s,e,l],g=new ux(u);class f extends hwe{constructor(p){super(u),this.RULE(\"expression\",()=>this.SUBRULE(this.logicalExpression)),this.RULE(\"logicalExpression\",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let B=y,v=this.CONSUME(e),D=this.SUBRULE2(this.atomicExpression);pJ(v,t)?y=T=>B(T)||D(T):pJ(v,i)?y=T=>!!(B(T)^D(T)):y=T=>B(T)&&D(T)}),y}),this.RULE(\"atomicExpression\",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:C}=this.CONSUME(l);return y=>y(C)}},{ALT:()=>{this.CONSUME(s);let C=this.SUBRULE(this.atomicExpression);return y=>!C(y)}}])),this.RULE(\"parenthesisExpression\",()=>{let C;return this.CONSUME(o),C=this.SUBRULE(this.expression),this.CONSUME(a),C}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var mJ=w(Ty=>{var pwe=CJ();Ty.makeParser=(r=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:t}=pwe(r),i=new t;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};Ty.parse=Ty.makeParser()});var IJ=w((zet,EJ)=>{\"use strict\";EJ.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var gx=w((Vet,wJ)=>{var Od=IJ(),yJ={};for(let r of Object.keys(Od))yJ[Od[r]]=r;var st={rgb:{channels:3,labels:\"rgb\"},hsl:{channels:3,labels:\"hsl\"},hsv:{channels:3,labels:\"hsv\"},hwb:{channels:3,labels:\"hwb\"},cmyk:{channels:4,labels:\"cmyk\"},xyz:{channels:3,labels:\"xyz\"},lab:{channels:3,labels:\"lab\"},lch:{channels:3,labels:\"lch\"},hex:{channels:1,labels:[\"hex\"]},keyword:{channels:1,labels:[\"keyword\"]},ansi16:{channels:1,labels:[\"ansi16\"]},ansi256:{channels:1,labels:[\"ansi256\"]},hcg:{channels:3,labels:[\"h\",\"c\",\"g\"]},apple:{channels:3,labels:[\"r16\",\"g16\",\"b16\"]},gray:{channels:1,labels:[\"gray\"]}};wJ.exports=st;for(let r of Object.keys(st)){if(!(\"channels\"in st[r]))throw new Error(\"missing channels property: \"+r);if(!(\"labels\"in st[r]))throw new Error(\"missing channel labels property: \"+r);if(st[r].labels.length!==st[r].channels)throw new Error(\"channel and label counts mismatch: \"+r);let{channels:e,labels:t}=st[r];delete st[r].channels,delete st[r].labels,Object.defineProperty(st[r],\"channels\",{value:e}),Object.defineProperty(st[r],\"labels\",{value:t})}st.rgb.hsl=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(e,t,i),s=Math.max(e,t,i),o=s-n,a,l;s===n?a=0:e===s?a=(t-i)/o:t===s?a=2+(i-e)/o:i===s&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};st.rgb.hsv=function(r){let e,t,i,n,s,o=r[0]/255,a=r[1]/255,l=r[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),t=g(a),i=g(l),o===c?n=i-t:a===c?n=1/3+e-i:l===c&&(n=2/3+t-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};st.rgb.hwb=function(r){let e=r[0],t=r[1],i=r[2],n=st.rgb.hsl(r)[0],s=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[n,s*100,i*100]};st.rgb.cmyk=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.min(1-e,1-t,1-i),s=(1-e-n)/(1-n)||0,o=(1-t-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function dwe(r,e){return(r[0]-e[0])**2+(r[1]-e[1])**2+(r[2]-e[2])**2}st.rgb.keyword=function(r){let e=yJ[r];if(e)return e;let t=1/0,i;for(let n of Object.keys(Od)){let s=Od[n],o=dwe(r,s);o<t&&(t=o,i=n)}return i};st.keyword.rgb=function(r){return Od[r]};st.rgb.xyz=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let n=e*.4124+t*.3576+i*.1805,s=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[n*100,s*100,o*100]};st.rgb.lab=function(r){let e=st.rgb.xyz(r),t=e[0],i=e[1],n=e[2];t/=95.047,i/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let s=116*i-16,o=500*(t-i),a=200*(i-n);return[s,o,a]};st.hsl.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n,s,o;if(t===0)return o=i*255,[o,o,o];i<.5?n=i*(1+t):n=i+t-i*t;let a=2*i-n,l=[0,0,0];for(let c=0;c<3;c++)s=e+1/3*-(c-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(n-a)*6*s:2*s<1?o=n:3*s<2?o=a+(n-a)*(2/3-s)*6:o=a,l[c]=o*255;return l};st.hsl.hsv=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=t,s=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s;let o=(i+t)/2,a=i===0?2*n/(s+n):2*t/(i+t);return[e,a*100,o*100]};st.hsv.rgb=function(r){let e=r[0]/60,t=r[1]/100,i=r[2]/100,n=Math.floor(e)%6,s=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*s),l=255*i*(1-t*(1-s));switch(i*=255,n){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};st.hsv.hsl=function(r){let e=r[0],t=r[1]/100,i=r[2]/100,n=Math.max(i,.01),s,o;o=(2-t)*i;let a=(2-t)*n;return s=t*n,s/=a<=1?a:2-a,s=s||0,o/=2,[e,s*100,o*100]};st.hwb.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100,n=t+i,s;n>1&&(t/=n,i/=n);let o=Math.floor(6*e),a=1-i;s=6*e-o,(o&1)!==0&&(s=1-s);let l=t+s*(a-t),c,u,g;switch(o){default:case 6:case 0:c=a,u=l,g=t;break;case 1:c=l,u=a,g=t;break;case 2:c=t,u=a,g=l;break;case 3:c=t,u=l,g=a;break;case 4:c=l,u=t,g=a;break;case 5:c=a,u=t,g=l;break}return[c*255,u*255,g*255]};st.cmyk.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n=r[3]/100,s=1-Math.min(1,e*(1-n)+n),o=1-Math.min(1,t*(1-n)+n),a=1-Math.min(1,i*(1-n)+n);return[s*255,o*255,a*255]};st.xyz.rgb=function(r){let e=r[0]/100,t=r[1]/100,i=r[2]/100,n,s,o;return n=e*3.2406+t*-1.5372+i*-.4986,s=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,n=Math.min(Math.max(0,n),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[n*255,s*255,o*255]};st.xyz.lab=function(r){let e=r[0],t=r[1],i=r[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let n=116*t-16,s=500*(e-t),o=200*(t-i);return[n,s,o]};st.lab.xyz=function(r){let e=r[0],t=r[1],i=r[2],n,s,o;s=(e+16)/116,n=t/500+s,o=s-i/200;let a=s**3,l=n**3,c=o**3;return s=a>.008856?a:(s-16/116)/7.787,n=l>.008856?l:(n-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,n*=95.047,s*=100,o*=108.883,[n,s,o]};st.lab.lch=function(r){let e=r[0],t=r[1],i=r[2],n;n=Math.atan2(i,t)*360/2/Math.PI,n<0&&(n+=360);let o=Math.sqrt(t*t+i*i);return[e,o,n]};st.lch.lab=function(r){let e=r[0],t=r[1],n=r[2]/360*2*Math.PI,s=t*Math.cos(n),o=t*Math.sin(n);return[e,s,o]};st.rgb.ansi16=function(r,e=null){let[t,i,n]=r,s=e===null?st.rgb.hsv(r)[2]:e;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(n/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return s===2&&(o+=60),o};st.hsv.ansi16=function(r){return st.rgb.ansi16(st.hsv.rgb(r),r[2])};st.rgb.ansi256=function(r){let e=r[0],t=r[1],i=r[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};st.ansi16.rgb=function(r){let e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(r>50)+1)*.5,i=(e&1)*t*255,n=(e>>1&1)*t*255,s=(e>>2&1)*t*255;return[i,n,s]};st.ansi256.rgb=function(r){if(r>=232){let s=(r-232)*10+8;return[s,s,s]}r-=16;let e,t=Math.floor(r/36)/5*255,i=Math.floor((e=r%36)/6)/5*255,n=e%6/5*255;return[t,i,n]};st.rgb.hex=function(r){let t=(((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255)).toString(16).toUpperCase();return\"000000\".substring(t.length)+t};st.hex.rgb=function(r){let e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split(\"\").map(a=>a+a).join(\"\"));let i=parseInt(t,16),n=i>>16&255,s=i>>8&255,o=i&255;return[n,s,o]};st.rgb.hcg=function(r){let e=r[0]/255,t=r[1]/255,i=r[2]/255,n=Math.max(Math.max(e,t),i),s=Math.min(Math.min(e,t),i),o=n-s,a,l;return o<1?a=s/(1-o):a=0,o<=0?l=0:n===e?l=(t-i)/o%6:n===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};st.hsl.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=t<.5?2*e*t:2*e*(1-t),n=0;return i<1&&(n=(t-.5*i)/(1-i)),[r[0],i*100,n*100]};st.hsv.hcg=function(r){let e=r[1]/100,t=r[2]/100,i=e*t,n=0;return i<1&&(n=(t-i)/(1-i)),[r[0],i*100,n*100]};st.hcg.rgb=function(r){let e=r[0]/360,t=r[1]/100,i=r[2]/100;if(t===0)return[i*255,i*255,i*255];let n=[0,0,0],s=e%1*6,o=s%1,a=1-o,l=0;switch(Math.floor(s)){case 0:n[0]=1,n[1]=o,n[2]=0;break;case 1:n[0]=a,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=o;break;case 3:n[0]=0,n[1]=a,n[2]=1;break;case 4:n[0]=o,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=a}return l=(1-t)*i,[(t*n[0]+l)*255,(t*n[1]+l)*255,(t*n[2]+l)*255]};st.hcg.hsv=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e),n=0;return i>0&&(n=e/i),[r[0],n*100,i*100]};st.hcg.hsl=function(r){let e=r[1]/100,i=r[2]/100*(1-e)+.5*e,n=0;return i>0&&i<.5?n=e/(2*i):i>=.5&&i<1&&(n=e/(2*(1-i))),[r[0],n*100,i*100]};st.hcg.hwb=function(r){let e=r[1]/100,t=r[2]/100,i=e+t*(1-e);return[r[0],(i-e)*100,(1-i)*100]};st.hwb.hcg=function(r){let e=r[1]/100,i=1-r[2]/100,n=i-e,s=0;return n<1&&(s=(i-n)/(1-n)),[r[0],n*100,s*100]};st.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};st.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};st.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};st.gray.hsl=function(r){return[0,0,r[0]]};st.gray.hsv=st.gray.hsl;st.gray.hwb=function(r){return[0,100,r[0]]};st.gray.cmyk=function(r){return[0,0,0,r[0]]};st.gray.lab=function(r){return[r[0],0,0]};st.gray.hex=function(r){let e=Math.round(r[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return\"000000\".substring(i.length)+i};st.rgb.gray=function(r){return[(r[0]+r[1]+r[2])/3/255*100]}});var bJ=w((Xet,BJ)=>{var Ly=gx();function Cwe(){let r={},e=Object.keys(Ly);for(let t=e.length,i=0;i<t;i++)r[e[i]]={distance:-1,parent:null};return r}function mwe(r){let e=Cwe(),t=[r];for(e[r].distance=0;t.length;){let i=t.pop(),n=Object.keys(Ly[i]);for(let s=n.length,o=0;o<s;o++){let a=n[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Ewe(r,e){return function(t){return e(r(t))}}function Iwe(r,e){let t=[e[r].parent,r],i=Ly[e[r].parent][r],n=e[r].parent;for(;e[n].parent;)t.unshift(e[n].parent),i=Ewe(Ly[e[n].parent][n],i),n=e[n].parent;return i.conversion=t,i}BJ.exports=function(r){let e=mwe(r),t={},i=Object.keys(e);for(let n=i.length,s=0;s<n;s++){let o=i[s];e[o].parent!==null&&(t[o]=Iwe(o,e))}return t}});var SJ=w((Zet,QJ)=>{var fx=gx(),ywe=bJ(),Af={},wwe=Object.keys(fx);function Bwe(r){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),r(t))};return\"conversion\"in r&&(e.conversion=r.conversion),e}function bwe(r){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let n=r(t);if(typeof n==\"object\")for(let s=n.length,o=0;o<s;o++)n[o]=Math.round(n[o]);return n};return\"conversion\"in r&&(e.conversion=r.conversion),e}wwe.forEach(r=>{Af[r]={},Object.defineProperty(Af[r],\"channels\",{value:fx[r].channels}),Object.defineProperty(Af[r],\"labels\",{value:fx[r].labels});let e=ywe(r);Object.keys(e).forEach(i=>{let n=e[i];Af[r][i]=bwe(n),Af[r][i].raw=Bwe(n)})});QJ.exports=Af});var RJ=w((_et,kJ)=>{\"use strict\";var vJ=(r,e)=>(...t)=>`\\x1B[${r(...t)+e}m`,xJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};5;${i}m`},PJ=(r,e)=>(...t)=>{let i=r(...t);return`\\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},My=r=>r,DJ=(r,e,t)=>[r,e,t],lf=(r,e,t)=>{Object.defineProperty(r,e,{get:()=>{let i=t();return Object.defineProperty(r,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},hx,cf=(r,e,t,i)=>{hx===void 0&&(hx=SJ());let n=i?10:0,s={};for(let[o,a]of Object.entries(hx)){let l=o===\"ansi16\"?\"ansi\":o;o===e?s[l]=r(t,n):typeof a==\"object\"&&(s[l]=r(a[e],n))}return s};function Qwe(){let r=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[n,s]of Object.entries(i))e[n]={open:`\\x1B[${s[0]}m`,close:`\\x1B[${s[1]}m`},i[n]=e[n],r.set(s[0],s[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,\"codes\",{value:r,enumerable:!1}),e.color.close=\"\\x1B[39m\",e.bgColor.close=\"\\x1B[49m\",lf(e.color,\"ansi\",()=>cf(vJ,\"ansi16\",My,!1)),lf(e.color,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!1)),lf(e.color,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!1)),lf(e.bgColor,\"ansi\",()=>cf(vJ,\"ansi16\",My,!0)),lf(e.bgColor,\"ansi256\",()=>cf(xJ,\"ansi256\",My,!0)),lf(e.bgColor,\"ansi16m\",()=>cf(PJ,\"rgb\",DJ,!0)),e}Object.defineProperty(kJ,\"exports\",{enumerable:!0,get:Qwe})});var NJ=w(($et,FJ)=>{\"use strict\";FJ.exports=(r,e=process.argv)=>{let t=r.startsWith(\"-\")?\"\":r.length===1?\"-\":\"--\",i=e.indexOf(t+r),n=e.indexOf(\"--\");return i!==-1&&(n===-1||i<n)}});var MJ=w((ett,LJ)=>{\"use strict\";var Swe=J(\"os\"),TJ=J(\"tty\"),ds=NJ(),{env:ai}=process,KA;ds(\"no-color\")||ds(\"no-colors\")||ds(\"color=false\")||ds(\"color=never\")?KA=0:(ds(\"color\")||ds(\"colors\")||ds(\"color=true\")||ds(\"color=always\"))&&(KA=1);\"FORCE_COLOR\"in ai&&(ai.FORCE_COLOR===\"true\"?KA=1:ai.FORCE_COLOR===\"false\"?KA=0:KA=ai.FORCE_COLOR.length===0?1:Math.min(parseInt(ai.FORCE_COLOR,10),3));function px(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function dx(r,e){if(KA===0)return 0;if(ds(\"color=16m\")||ds(\"color=full\")||ds(\"color=truecolor\"))return 3;if(ds(\"color=256\"))return 2;if(r&&!e&&KA===void 0)return 0;let t=KA||0;if(ai.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let i=Swe.release().split(\".\");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if(\"CI\"in ai)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\"].some(i=>i in ai)||ai.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in ai)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(ai.TEAMCITY_VERSION)?1:0;if(\"GITHUB_ACTIONS\"in ai)return 1;if(ai.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in ai){let i=parseInt((ai.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(ai.TERM_PROGRAM){case\"iTerm.app\":return i>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(ai.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ai.TERM)||\"COLORTERM\"in ai?1:t}function vwe(r){let e=dx(r,r&&r.isTTY);return px(e)}LJ.exports={supportsColor:vwe,stdout:px(dx(!0,TJ.isatty(1))),stderr:px(dx(!0,TJ.isatty(2)))}});var KJ=w((ttt,OJ)=>{\"use strict\";var xwe=(r,e,t)=>{let i=r.indexOf(e);if(i===-1)return r;let n=e.length,s=0,o=\"\";do o+=r.substr(s,i-s)+e+t,s=i+n,i=r.indexOf(e,s);while(i!==-1);return o+=r.substr(s),o},Pwe=(r,e,t,i)=>{let n=0,s=\"\";do{let o=r[i-1]===\"\\r\";s+=r.substr(n,(o?i-1:i)-n)+e+(o?`\\r\n`:`\n`)+t,n=i+1,i=r.indexOf(`\n`,n)}while(i!==-1);return s+=r.substr(n),s};OJ.exports={stringReplaceAll:xwe,stringEncaseCRLFWithFirstIndex:Pwe}});var jJ=w((rtt,YJ)=>{\"use strict\";var Dwe=/(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi,UJ=/(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g,kwe=/^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/,Rwe=/\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.)|([^\\\\])/gi,Fwe=new Map([[\"n\",`\n`],[\"r\",\"\\r\"],[\"t\",\"\t\"],[\"b\",\"\\b\"],[\"f\",\"\\f\"],[\"v\",\"\\v\"],[\"0\",\"\\0\"],[\"\\\\\",\"\\\\\"],[\"e\",\"\\x1B\"],[\"a\",\"\\x07\"]]);function GJ(r){let e=r[0]===\"u\",t=r[1]===\"{\";return e&&!t&&r.length===5||r[0]===\"x\"&&r.length===3?String.fromCharCode(parseInt(r.slice(1),16)):e&&t?String.fromCodePoint(parseInt(r.slice(2,-1),16)):Fwe.get(r)||r}function Nwe(r,e){let t=[],i=e.trim().split(/\\s*,\\s*/g),n;for(let s of i){let o=Number(s);if(!Number.isNaN(o))t.push(o);else if(n=s.match(kwe))t.push(n[2].replace(Rwe,(a,l,c)=>l?GJ(l):c));else throw new Error(`Invalid Chalk template style argument: ${s} (in style '${r}')`)}return t}function Twe(r){UJ.lastIndex=0;let e=[],t;for(;(t=UJ.exec(r))!==null;){let i=t[1];if(t[2]){let n=Nwe(i,t[2]);e.push([i].concat(n))}else e.push([i])}return e}function HJ(r,e){let t={};for(let n of e)for(let s of n.styles)t[s[0]]=n.inverse?null:s.slice(1);let i=r;for(let[n,s]of Object.entries(t))if(!!Array.isArray(s)){if(!(n in i))throw new Error(`Unknown Chalk style: ${n}`);i=s.length>0?i[n](...s):i[n]}return i}YJ.exports=(r,e)=>{let t=[],i=[],n=[];if(e.replace(Dwe,(s,o,a,l,c,u)=>{if(o)n.push(GJ(o));else if(l){let g=n.join(\"\");n=[],i.push(t.length===0?g:HJ(r,t)(g)),t.push({inverse:a,styles:Twe(l)})}else if(c){if(t.length===0)throw new Error(\"Found extraneous } in Chalk template literal\");i.push(HJ(r,t)(n.join(\"\"))),n=[],t.pop()}else n.push(u)}),i.push(n.join(\"\")),t.length>0){let s=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?\"\":\"s\"} (\\`}\\`)`;throw new Error(s)}return i.join(\"\")}});var wx=w((itt,zJ)=>{\"use strict\";var Kd=RJ(),{stdout:mx,stderr:Ex}=MJ(),{stringReplaceAll:Lwe,stringEncaseCRLFWithFirstIndex:Mwe}=KJ(),qJ=[\"ansi\",\"ansi\",\"ansi256\",\"ansi16m\"],uf=Object.create(null),Owe=(r,e={})=>{if(e.level>3||e.level<0)throw new Error(\"The `level` option should be an integer from 0 to 3\");let t=mx?mx.level:0;r.level=e.level===void 0?t:e.level},Ix=class{constructor(e){return JJ(e)}},JJ=r=>{let e={};return Owe(e,r),e.template=(...t)=>Hwe(e.template,...t),Object.setPrototypeOf(e,Oy.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error(\"`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.\")},e.template.Instance=Ix,e.template};function Oy(r){return JJ(r)}for(let[r,e]of Object.entries(Kd))uf[r]={get(){let t=Ky(this,yx(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,r,{value:t}),t}};uf.visible={get(){let r=Ky(this,this._styler,!0);return Object.defineProperty(this,\"visible\",{value:r}),r}};var WJ=[\"rgb\",\"hex\",\"keyword\",\"hsl\",\"hsv\",\"hwb\",\"ansi\",\"ansi256\"];for(let r of WJ)uf[r]={get(){let{level:e}=this;return function(...t){let i=yx(Kd.color[qJ[e]][r](...t),Kd.color.close,this._styler);return Ky(this,i,this._isEmpty)}}};for(let r of WJ){let e=\"bg\"+r[0].toUpperCase()+r.slice(1);uf[e]={get(){let{level:t}=this;return function(...i){let n=yx(Kd.bgColor[qJ[t]][r](...i),Kd.bgColor.close,this._styler);return Ky(this,n,this._isEmpty)}}}}var Kwe=Object.defineProperties(()=>{},{...uf,level:{enumerable:!0,get(){return this._generator.level},set(r){this._generator.level=r}}}),yx=(r,e,t)=>{let i,n;return t===void 0?(i=r,n=e):(i=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:i,closeAll:n,parent:t}},Ky=(r,e,t)=>{let i=(...n)=>Uwe(i,n.length===1?\"\"+n[0]:n.join(\" \"));return i.__proto__=Kwe,i._generator=r,i._styler=e,i._isEmpty=t,i},Uwe=(r,e)=>{if(r.level<=0||!e)return r._isEmpty?\"\":e;let t=r._styler;if(t===void 0)return e;let{openAll:i,closeAll:n}=t;if(e.indexOf(\"\\x1B\")!==-1)for(;t!==void 0;)e=Lwe(e,t.close,t.open),t=t.parent;let s=e.indexOf(`\n`);return s!==-1&&(e=Mwe(e,n,i,s)),i+e+n},Cx,Hwe=(r,...e)=>{let[t]=e;if(!Array.isArray(t))return e.join(\" \");let i=e.slice(1),n=[t.raw[0]];for(let s=1;s<t.length;s++)n.push(String(i[s-1]).replace(/[{}\\\\]/g,\"\\\\$&\"),String(t.raw[s]));return Cx===void 0&&(Cx=jJ()),Cx(r,n.join(\"\"))};Object.defineProperties(Oy.prototype,uf);var Ud=Oy();Ud.supportsColor=mx;Ud.stderr=Oy({level:Ex?Ex.level:0});Ud.stderr.supportsColor=Ex;Ud.Level={None:0,Basic:1,Ansi256:2,TrueColor:3,0:\"None\",1:\"Basic\",2:\"Ansi256\",3:\"TrueColor\"};zJ.exports=Ud});var Uy=w(Cs=>{\"use strict\";Cs.isInteger=r=>typeof r==\"number\"?Number.isInteger(r):typeof r==\"string\"&&r.trim()!==\"\"?Number.isInteger(Number(r)):!1;Cs.find=(r,e)=>r.nodes.find(t=>t.type===e);Cs.exceedsLimit=(r,e,t=1,i)=>i===!1||!Cs.isInteger(r)||!Cs.isInteger(e)?!1:(Number(e)-Number(r))/Number(t)>=i;Cs.escapeNode=(r,e=0,t)=>{let i=r.nodes[e];!i||(t&&i.type===t||i.type===\"open\"||i.type===\"close\")&&i.escaped!==!0&&(i.value=\"\\\\\"+i.value,i.escaped=!0)};Cs.encloseBrace=r=>r.type!==\"brace\"?!1:r.commas>>0+r.ranges>>0===0?(r.invalid=!0,!0):!1;Cs.isInvalidBrace=r=>r.type!==\"brace\"?!1:r.invalid===!0||r.dollar?!0:r.commas>>0+r.ranges>>0===0||r.open!==!0||r.close!==!0?(r.invalid=!0,!0):!1;Cs.isOpenOrClose=r=>r.type===\"open\"||r.type===\"close\"?!0:r.open===!0||r.close===!0;Cs.reduce=r=>r.reduce((e,t)=>(t.type===\"text\"&&e.push(t.value),t.type===\"range\"&&(t.type=\"text\"),e),[]);Cs.flatten=(...r)=>{let e=[],t=i=>{for(let n=0;n<i.length;n++){let s=i[n];Array.isArray(s)?t(s,e):s!==void 0&&e.push(s)}return e};return t(r),e}});var Hy=w((stt,XJ)=>{\"use strict\";var VJ=Uy();XJ.exports=(r,e={})=>{let t=(i,n={})=>{let s=e.escapeInvalid&&VJ.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=\"\";if(i.value)return(s||o)&&VJ.isOpenOrClose(i)?\"\\\\\"+i.value:i.value;if(i.value)return i.value;if(i.nodes)for(let l of i.nodes)a+=t(l);return a};return t(r)}});var _J=w((ott,ZJ)=>{\"use strict\";ZJ.exports=function(r){return typeof r==\"number\"?r-r===0:typeof r==\"string\"&&r.trim()!==\"\"?Number.isFinite?Number.isFinite(+r):isFinite(+r):!1}});var aW=w((att,oW)=>{\"use strict\";var $J=_J(),Ic=(r,e,t)=>{if($J(r)===!1)throw new TypeError(\"toRegexRange: expected the first argument to be a number\");if(e===void 0||r===e)return String(r);if($J(e)===!1)throw new TypeError(\"toRegexRange: expected the second argument to be a number.\");let i={relaxZeros:!0,...t};typeof i.strictZeros==\"boolean\"&&(i.relaxZeros=i.strictZeros===!1);let n=String(i.relaxZeros),s=String(i.shorthand),o=String(i.capture),a=String(i.wrap),l=r+\":\"+e+\"=\"+n+s+o+a;if(Ic.cache.hasOwnProperty(l))return Ic.cache[l].result;let c=Math.min(r,e),u=Math.max(r,e);if(Math.abs(c-u)===1){let C=r+\"|\"+e;return i.capture?`(${C})`:i.wrap===!1?C:`(?:${C})`}let g=sW(r)||sW(e),f={min:r,max:e,a:c,b:u},h=[],p=[];if(g&&(f.isPadded=g,f.maxLen=String(f.max).length),c<0){let C=u<0?Math.abs(u):1;p=eW(C,Math.abs(c),f,i),c=f.a=0}return u>=0&&(h=eW(c,u,f,i)),f.negatives=p,f.positives=h,f.result=Gwe(p,h,i),i.capture===!0?f.result=`(${f.result})`:i.wrap!==!1&&h.length+p.length>1&&(f.result=`(?:${f.result})`),Ic.cache[l]=f,f.result};function Gwe(r,e,t){let i=Bx(r,e,\"-\",!1,t)||[],n=Bx(e,r,\"\",!1,t)||[],s=Bx(r,e,\"-?\",!0,t)||[];return i.concat(s).concat(n).join(\"|\")}function Ywe(r,e){let t=1,i=1,n=rW(r,t),s=new Set([e]);for(;r<=n&&n<=e;)s.add(n),t+=1,n=rW(r,t);for(n=iW(e+1,i)-1;r<n&&n<=e;)s.add(n),i+=1,n=iW(e+1,i)-1;return s=[...s],s.sort(Jwe),s}function jwe(r,e,t){if(r===e)return{pattern:r,count:[],digits:0};let i=qwe(r,e),n=i.length,s=\"\",o=0;for(let a=0;a<n;a++){let[l,c]=i[a];l===c?s+=l:l!==\"0\"||c!==\"9\"?s+=Wwe(l,c,t):o++}return o&&(s+=t.shorthand===!0?\"\\\\d\":\"[0-9]\"),{pattern:s,count:[o],digits:n}}function eW(r,e,t,i){let n=Ywe(r,e),s=[],o=r,a;for(let l=0;l<n.length;l++){let c=n[l],u=jwe(String(o),String(c),i),g=\"\";if(!t.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+nW(a.count),o=c+1;continue}t.isPadded&&(g=zwe(c,t,i)),u.string=g+u.pattern+nW(u.count),s.push(u),o=c+1,a=u}return s}function Bx(r,e,t,i,n){let s=[];for(let o of r){let{string:a}=o;!i&&!tW(e,\"string\",a)&&s.push(t+a),i&&tW(e,\"string\",a)&&s.push(t+a)}return s}function qwe(r,e){let t=[];for(let i=0;i<r.length;i++)t.push([r[i],e[i]]);return t}function Jwe(r,e){return r>e?1:e>r?-1:0}function tW(r,e,t){return r.some(i=>i[e]===t)}function rW(r,e){return Number(String(r).slice(0,-e)+\"9\".repeat(e))}function iW(r,e){return r-r%Math.pow(10,e)}function nW(r){let[e=0,t=\"\"]=r;return t||e>1?`{${e+(t?\",\"+t:\"\")}}`:\"\"}function Wwe(r,e,t){return`[${r}${e-r===1?\"\":\"-\"}${e}]`}function sW(r){return/^-?(0+)\\d/.test(r)}function zwe(r,e,t){if(!e.isPadded)return r;let i=Math.abs(e.maxLen-String(r).length),n=t.relaxZeros!==!1;switch(i){case 0:return\"\";case 1:return n?\"0?\":\"0\";case 2:return n?\"0{0,2}\":\"00\";default:return n?`0{0,${i}}`:`0{${i}}`}}Ic.cache={};Ic.clearCache=()=>Ic.cache={};oW.exports=Ic});var Sx=w((Att,pW)=>{\"use strict\";var Vwe=J(\"util\"),cW=aW(),AW=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),Xwe=r=>e=>r===!0?Number(e):String(e),bx=r=>typeof r==\"number\"||typeof r==\"string\"&&r!==\"\",Hd=r=>Number.isInteger(+r),Qx=r=>{let e=`${r}`,t=-1;if(e[0]===\"-\"&&(e=e.slice(1)),e===\"0\")return!1;for(;e[++t]===\"0\";);return t>0},Zwe=(r,e,t)=>typeof r==\"string\"||typeof e==\"string\"?!0:t.stringify===!0,_we=(r,e,t)=>{if(e>0){let i=r[0]===\"-\"?\"-\":\"\";i&&(r=r.slice(1)),r=i+r.padStart(i?e-1:e,\"0\")}return t===!1?String(r):r},lW=(r,e)=>{let t=r[0]===\"-\"?\"-\":\"\";for(t&&(r=r.slice(1),e--);r.length<e;)r=\"0\"+r;return t?\"-\"+r:r},$we=(r,e)=>{r.negatives.sort((o,a)=>o<a?-1:o>a?1:0),r.positives.sort((o,a)=>o<a?-1:o>a?1:0);let t=e.capture?\"\":\"?:\",i=\"\",n=\"\",s;return r.positives.length&&(i=r.positives.join(\"|\")),r.negatives.length&&(n=`-(${t}${r.negatives.join(\"|\")})`),i&&n?s=`${i}|${n}`:s=i||n,e.wrap?`(${t}${s})`:s},uW=(r,e,t,i)=>{if(t)return cW(r,e,{wrap:!1,...i});let n=String.fromCharCode(r);if(r===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},gW=(r,e,t)=>{if(Array.isArray(r)){let i=t.wrap===!0,n=t.capture?\"\":\"?:\";return i?`(${n}${r.join(\"|\")})`:r.join(\"|\")}return cW(r,e,t)},fW=(...r)=>new RangeError(\"Invalid range arguments: \"+Vwe.inspect(...r)),hW=(r,e,t)=>{if(t.strictRanges===!0)throw fW([r,e]);return[]},eBe=(r,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step \"${r}\" to be a number`);return[]},tBe=(r,e,t=1,i={})=>{let n=Number(r),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(i.strictRanges===!0)throw fW([r,e]);return[]}n===0&&(n=0),s===0&&(s=0);let o=n>s,a=String(r),l=String(e),c=String(t);t=Math.max(Math.abs(t),1);let u=Qx(a)||Qx(l)||Qx(c),g=u?Math.max(a.length,l.length,c.length):0,f=u===!1&&Zwe(r,e,i)===!1,h=i.transform||Xwe(f);if(i.toRegex&&t===1)return uW(lW(r,g),lW(e,g),!0,i);let p={negatives:[],positives:[]},C=v=>p[v<0?\"negatives\":\"positives\"].push(Math.abs(v)),y=[],B=0;for(;o?n>=s:n<=s;)i.toRegex===!0&&t>1?C(n):y.push(_we(h(n,B),g,f)),n=o?n-t:n+t,B++;return i.toRegex===!0?t>1?$we(p,i):gW(y,null,{wrap:!1,...i}):y},rBe=(r,e,t=1,i={})=>{if(!Hd(r)&&r.length>1||!Hd(e)&&e.length>1)return hW(r,e,i);let n=i.transform||(f=>String.fromCharCode(f)),s=`${r}`.charCodeAt(0),o=`${e}`.charCodeAt(0),a=s>o,l=Math.min(s,o),c=Math.max(s,o);if(i.toRegex&&t===1)return uW(l,c,!1,i);let u=[],g=0;for(;a?s>=o:s<=o;)u.push(n(s,g)),s=a?s-t:s+t,g++;return i.toRegex===!0?gW(u,null,{wrap:!1,options:i}):u},Gy=(r,e,t,i={})=>{if(e==null&&bx(r))return[r];if(!bx(r)||!bx(e))return hW(r,e,i);if(typeof t==\"function\")return Gy(r,e,1,{transform:t});if(AW(t))return Gy(r,e,0,t);let n={...i};return n.capture===!0&&(n.wrap=!0),t=t||n.step||1,Hd(t)?Hd(r)&&Hd(e)?tBe(r,e,t,n):rBe(r,e,Math.max(Math.abs(t),1),n):t!=null&&!AW(t)?eBe(t,n):Gy(r,e,1,t)};pW.exports=Gy});var mW=w((ltt,CW)=>{\"use strict\";var iBe=Sx(),dW=Uy(),nBe=(r,e={})=>{let t=(i,n={})=>{let s=dW.isInvalidBrace(n),o=i.invalid===!0&&e.escapeInvalid===!0,a=s===!0||o===!0,l=e.escapeInvalid===!0?\"\\\\\":\"\",c=\"\";if(i.isOpen===!0||i.isClose===!0)return l+i.value;if(i.type===\"open\")return a?l+i.value:\"(\";if(i.type===\"close\")return a?l+i.value:\")\";if(i.type===\"comma\")return i.prev.type===\"comma\"?\"\":a?i.value:\"|\";if(i.value)return i.value;if(i.nodes&&i.ranges>0){let u=dW.reduce(i.nodes),g=iBe(...u,{...e,wrap:!1,toRegex:!0});if(g.length!==0)return u.length>1&&g.length>1?`(${g})`:g}if(i.nodes)for(let u of i.nodes)c+=t(u,i);return c};return t(r)};CW.exports=nBe});var yW=w((ctt,IW)=>{\"use strict\";var sBe=Sx(),EW=Hy(),gf=Uy(),yc=(r=\"\",e=\"\",t=!1)=>{let i=[];if(r=[].concat(r),e=[].concat(e),!e.length)return r;if(!r.length)return t?gf.flatten(e).map(n=>`{${n}}`):e;for(let n of r)if(Array.isArray(n))for(let s of n)i.push(yc(s,e,t));else for(let s of e)t===!0&&typeof s==\"string\"&&(s=`{${s}}`),i.push(Array.isArray(s)?yc(n,s,t):n+s);return gf.flatten(i)},oBe=(r,e={})=>{let t=e.rangeLimit===void 0?1e3:e.rangeLimit,i=(n,s={})=>{n.queue=[];let o=s,a=s.queue;for(;o.type!==\"brace\"&&o.type!==\"root\"&&o.parent;)o=o.parent,a=o.queue;if(n.invalid||n.dollar){a.push(yc(a.pop(),EW(n,e)));return}if(n.type===\"brace\"&&n.invalid!==!0&&n.nodes.length===2){a.push(yc(a.pop(),[\"{}\"]));return}if(n.nodes&&n.ranges>0){let g=gf.reduce(n.nodes);if(gf.exceedsLimit(...g,e.step,t))throw new RangeError(\"expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.\");let f=sBe(...g,e);f.length===0&&(f=EW(n,e)),a.push(yc(a.pop(),f)),n.nodes=[];return}let l=gf.encloseBrace(n),c=n.queue,u=n;for(;u.type!==\"brace\"&&u.type!==\"root\"&&u.parent;)u=u.parent,c=u.queue;for(let g=0;g<n.nodes.length;g++){let f=n.nodes[g];if(f.type===\"comma\"&&n.type===\"brace\"){g===1&&c.push(\"\"),c.push(\"\");continue}if(f.type===\"close\"){a.push(yc(a.pop(),c,l));continue}if(f.value&&f.type!==\"open\"){c.push(yc(c.pop(),f.value));continue}f.nodes&&i(f,n)}return c};return gf.flatten(i(r))};IW.exports=oBe});var BW=w((utt,wW)=>{\"use strict\";wW.exports={MAX_LENGTH:1024*64,CHAR_0:\"0\",CHAR_9:\"9\",CHAR_UPPERCASE_A:\"A\",CHAR_LOWERCASE_A:\"a\",CHAR_UPPERCASE_Z:\"Z\",CHAR_LOWERCASE_Z:\"z\",CHAR_LEFT_PARENTHESES:\"(\",CHAR_RIGHT_PARENTHESES:\")\",CHAR_ASTERISK:\"*\",CHAR_AMPERSAND:\"&\",CHAR_AT:\"@\",CHAR_BACKSLASH:\"\\\\\",CHAR_BACKTICK:\"`\",CHAR_CARRIAGE_RETURN:\"\\r\",CHAR_CIRCUMFLEX_ACCENT:\"^\",CHAR_COLON:\":\",CHAR_COMMA:\",\",CHAR_DOLLAR:\"$\",CHAR_DOT:\".\",CHAR_DOUBLE_QUOTE:'\"',CHAR_EQUAL:\"=\",CHAR_EXCLAMATION_MARK:\"!\",CHAR_FORM_FEED:\"\\f\",CHAR_FORWARD_SLASH:\"/\",CHAR_HASH:\"#\",CHAR_HYPHEN_MINUS:\"-\",CHAR_LEFT_ANGLE_BRACKET:\"<\",CHAR_LEFT_CURLY_BRACE:\"{\",CHAR_LEFT_SQUARE_BRACKET:\"[\",CHAR_LINE_FEED:`\n`,CHAR_NO_BREAK_SPACE:\"\\xA0\",CHAR_PERCENT:\"%\",CHAR_PLUS:\"+\",CHAR_QUESTION_MARK:\"?\",CHAR_RIGHT_ANGLE_BRACKET:\">\",CHAR_RIGHT_CURLY_BRACE:\"}\",CHAR_RIGHT_SQUARE_BRACKET:\"]\",CHAR_SEMICOLON:\";\",CHAR_SINGLE_QUOTE:\"'\",CHAR_SPACE:\" \",CHAR_TAB:\"\t\",CHAR_UNDERSCORE:\"_\",CHAR_VERTICAL_LINE:\"|\",CHAR_ZERO_WIDTH_NOBREAK_SPACE:\"\\uFEFF\"}});var xW=w((gtt,vW)=>{\"use strict\";var aBe=Hy(),{MAX_LENGTH:bW,CHAR_BACKSLASH:vx,CHAR_BACKTICK:ABe,CHAR_COMMA:lBe,CHAR_DOT:cBe,CHAR_LEFT_PARENTHESES:uBe,CHAR_RIGHT_PARENTHESES:gBe,CHAR_LEFT_CURLY_BRACE:fBe,CHAR_RIGHT_CURLY_BRACE:hBe,CHAR_LEFT_SQUARE_BRACKET:QW,CHAR_RIGHT_SQUARE_BRACKET:SW,CHAR_DOUBLE_QUOTE:pBe,CHAR_SINGLE_QUOTE:dBe,CHAR_NO_BREAK_SPACE:CBe,CHAR_ZERO_WIDTH_NOBREAK_SPACE:mBe}=BW(),EBe=(r,e={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");let t=e||{},i=typeof t.maxLength==\"number\"?Math.min(bW,t.maxLength):bW;if(r.length>i)throw new SyntaxError(`Input length (${r.length}), exceeds max characters (${i})`);let n={type:\"root\",input:r,nodes:[]},s=[n],o=n,a=n,l=0,c=r.length,u=0,g=0,f,h={},p=()=>r[u++],C=y=>{if(y.type===\"text\"&&a.type===\"dot\"&&(a.type=\"text\"),a&&a.type===\"text\"&&y.type===\"text\"){a.value+=y.value;return}return o.nodes.push(y),y.parent=o,y.prev=a,a=y,y};for(C({type:\"bos\"});u<c;)if(o=s[s.length-1],f=p(),!(f===mBe||f===CBe)){if(f===vx){C({type:\"text\",value:(e.keepEscaping?f:\"\")+p()});continue}if(f===SW){C({type:\"text\",value:\"\\\\\"+f});continue}if(f===QW){l++;let y=!0,B;for(;u<c&&(B=p());){if(f+=B,B===QW){l++;continue}if(B===vx){f+=p();continue}if(B===SW&&(l--,l===0))break}C({type:\"text\",value:f});continue}if(f===uBe){o=C({type:\"paren\",nodes:[]}),s.push(o),C({type:\"text\",value:f});continue}if(f===gBe){if(o.type!==\"paren\"){C({type:\"text\",value:f});continue}o=s.pop(),C({type:\"text\",value:f}),o=s[s.length-1];continue}if(f===pBe||f===dBe||f===ABe){let y=f,B;for(e.keepQuotes!==!0&&(f=\"\");u<c&&(B=p());){if(B===vx){f+=B+p();continue}if(B===y){e.keepQuotes===!0&&(f+=B);break}f+=B}C({type:\"text\",value:f});continue}if(f===fBe){g++;let B={type:\"brace\",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)===\"$\"||o.dollar===!0,depth:g,commas:0,ranges:0,nodes:[]};o=C(B),s.push(o),C({type:\"open\",value:f});continue}if(f===hBe){if(o.type!==\"brace\"){C({type:\"text\",value:f});continue}let y=\"close\";o=s.pop(),o.close=!0,C({type:y,value:f}),g--,o=s[s.length-1];continue}if(f===lBe&&g>0){if(o.ranges>0){o.ranges=0;let y=o.nodes.shift();o.nodes=[y,{type:\"text\",value:aBe(o)}]}C({type:\"comma\",value:f}),o.commas++;continue}if(f===cBe&&g>0&&o.commas===0){let y=o.nodes;if(g===0||y.length===0){C({type:\"text\",value:f});continue}if(a.type===\"dot\"){if(o.range=[],a.value+=f,a.type=\"range\",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,a.type=\"text\";continue}o.ranges++,o.args=[];continue}if(a.type===\"range\"){y.pop();let B=y[y.length-1];B.value+=a.value+f,a=B,o.ranges--;continue}C({type:\"dot\",value:f});continue}C({type:\"text\",value:f})}do if(o=s.pop(),o.type!==\"root\"){o.nodes.forEach(v=>{v.nodes||(v.type===\"open\"&&(v.isOpen=!0),v.type===\"close\"&&(v.isClose=!0),v.nodes||(v.type=\"text\"),v.invalid=!0)});let y=s[s.length-1],B=y.nodes.indexOf(o);y.nodes.splice(B,1,...o.nodes)}while(s.length>0);return C({type:\"eos\"}),n};vW.exports=EBe});var kW=w((ftt,DW)=>{\"use strict\";var PW=Hy(),IBe=mW(),yBe=yW(),wBe=xW(),Jn=(r,e={})=>{let t=[];if(Array.isArray(r))for(let i of r){let n=Jn.create(i,e);Array.isArray(n)?t.push(...n):t.push(n)}else t=[].concat(Jn.create(r,e));return e&&e.expand===!0&&e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.parse=(r,e={})=>wBe(r,e);Jn.stringify=(r,e={})=>PW(typeof r==\"string\"?Jn.parse(r,e):r,e);Jn.compile=(r,e={})=>(typeof r==\"string\"&&(r=Jn.parse(r,e)),IBe(r,e));Jn.expand=(r,e={})=>{typeof r==\"string\"&&(r=Jn.parse(r,e));let t=yBe(r,e);return e.noempty===!0&&(t=t.filter(Boolean)),e.nodupes===!0&&(t=[...new Set(t)]),t};Jn.create=(r,e={})=>r===\"\"||r.length<3?[r]:e.expand!==!0?Jn.compile(r,e):Jn.expand(r,e);DW.exports=Jn});var Gd=w((htt,LW)=>{\"use strict\";var BBe=J(\"path\"),Ko=\"\\\\\\\\/\",RW=`[^${Ko}]`,Na=\"\\\\.\",bBe=\"\\\\+\",QBe=\"\\\\?\",Yy=\"\\\\/\",SBe=\"(?=.)\",FW=\"[^/]\",xx=`(?:${Yy}|$)`,NW=`(?:^|${Yy})`,Px=`${Na}{1,2}${xx}`,vBe=`(?!${Na})`,xBe=`(?!${NW}${Px})`,PBe=`(?!${Na}{0,1}${xx})`,DBe=`(?!${Px})`,kBe=`[^.${Yy}]`,RBe=`${FW}*?`,TW={DOT_LITERAL:Na,PLUS_LITERAL:bBe,QMARK_LITERAL:QBe,SLASH_LITERAL:Yy,ONE_CHAR:SBe,QMARK:FW,END_ANCHOR:xx,DOTS_SLASH:Px,NO_DOT:vBe,NO_DOTS:xBe,NO_DOT_SLASH:PBe,NO_DOTS_SLASH:DBe,QMARK_NO_DOT:kBe,STAR:RBe,START_ANCHOR:NW},FBe={...TW,SLASH_LITERAL:`[${Ko}]`,QMARK:RW,STAR:`${RW}*?`,DOTS_SLASH:`${Na}{1,2}(?:[${Ko}]|$)`,NO_DOT:`(?!${Na})`,NO_DOTS:`(?!(?:^|[${Ko}])${Na}{1,2}(?:[${Ko}]|$))`,NO_DOT_SLASH:`(?!${Na}{0,1}(?:[${Ko}]|$))`,NO_DOTS_SLASH:`(?!${Na}{1,2}(?:[${Ko}]|$))`,QMARK_NO_DOT:`[^.${Ko}]`,START_ANCHOR:`(?:^|[${Ko}])`,END_ANCHOR:`(?:[${Ko}]|$)`},NBe={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};LW.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:NBe,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:BBe.sep,extglobChars(r){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${r.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(r){return r===!0?FBe:TW}}});var Yd=w(wn=>{\"use strict\";var TBe=J(\"path\"),LBe=process.platform===\"win32\",{REGEX_BACKSLASH:MBe,REGEX_REMOVE_BACKSLASH:OBe,REGEX_SPECIAL_CHARS:KBe,REGEX_SPECIAL_CHARS_GLOBAL:UBe}=Gd();wn.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);wn.hasRegexChars=r=>KBe.test(r);wn.isRegexChar=r=>r.length===1&&wn.hasRegexChars(r);wn.escapeRegex=r=>r.replace(UBe,\"\\\\$1\");wn.toPosixSlashes=r=>r.replace(MBe,\"/\");wn.removeBackslashes=r=>r.replace(OBe,e=>e===\"\\\\\"?\"\":e);wn.supportsLookbehinds=()=>{let r=process.version.slice(1).split(\".\").map(Number);return r.length===3&&r[0]>=9||r[0]===8&&r[1]>=10};wn.isWindows=r=>r&&typeof r.windows==\"boolean\"?r.windows:LBe===!0||TBe.sep===\"\\\\\";wn.escapeLast=(r,e,t)=>{let i=r.lastIndexOf(e,t);return i===-1?r:r[i-1]===\"\\\\\"?wn.escapeLast(r,e,i-1):`${r.slice(0,i)}\\\\${r.slice(i)}`};wn.removePrefix=(r,e={})=>{let t=r;return t.startsWith(\"./\")&&(t=t.slice(2),e.prefix=\"./\"),t};wn.wrapOutput=(r,e={},t={})=>{let i=t.contains?\"\":\"^\",n=t.contains?\"\":\"$\",s=`${i}(?:${r})${n}`;return e.negated===!0&&(s=`(?:^(?!${s}).*$)`),s}});var jW=w((dtt,YW)=>{\"use strict\";var MW=Yd(),{CHAR_ASTERISK:Dx,CHAR_AT:HBe,CHAR_BACKWARD_SLASH:jd,CHAR_COMMA:GBe,CHAR_DOT:kx,CHAR_EXCLAMATION_MARK:Rx,CHAR_FORWARD_SLASH:GW,CHAR_LEFT_CURLY_BRACE:Fx,CHAR_LEFT_PARENTHESES:Nx,CHAR_LEFT_SQUARE_BRACKET:YBe,CHAR_PLUS:jBe,CHAR_QUESTION_MARK:OW,CHAR_RIGHT_CURLY_BRACE:qBe,CHAR_RIGHT_PARENTHESES:KW,CHAR_RIGHT_SQUARE_BRACKET:JBe}=Gd(),UW=r=>r===GW||r===jd,HW=r=>{r.isPrefix!==!0&&(r.depth=r.isGlobstar?1/0:1)},WBe=(r,e)=>{let t=e||{},i=r.length-1,n=t.parts===!0||t.scanToEnd===!0,s=[],o=[],a=[],l=r,c=-1,u=0,g=0,f=!1,h=!1,p=!1,C=!1,y=!1,B=!1,v=!1,D=!1,T=!1,H=!1,j=0,$,V,W={value:\"\",depth:0,isGlob:!1},_=()=>c>=i,A=()=>l.charCodeAt(c+1),Ae=()=>($=V,l.charCodeAt(++c));for(;c<i;){V=Ae();let ue;if(V===jd){v=W.backslashes=!0,V=Ae(),V===Fx&&(B=!0);continue}if(B===!0||V===Fx){for(j++;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,Ae();continue}if(V===Fx){j++;continue}if(B!==!0&&V===kx&&(V=Ae())===kx){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(B!==!0&&V===GBe){if(f=W.isBrace=!0,p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===qBe&&(j--,j===0)){B=!1,f=W.isBrace=!0,H=!0;break}}if(n===!0)continue;break}if(V===GW){if(s.push(c),o.push(W),W={value:\"\",depth:0,isGlob:!1},H===!0)continue;if($===kx&&c===u+1){u+=2;continue}g=c+1;continue}if(t.noext!==!0&&(V===jBe||V===HBe||V===Dx||V===OW||V===Rx)===!0&&A()===Nx){if(p=W.isGlob=!0,C=W.isExtglob=!0,H=!0,V===Rx&&c===u&&(T=!0),n===!0){for(;_()!==!0&&(V=Ae());){if(V===jd){v=W.backslashes=!0,V=Ae();continue}if(V===KW){p=W.isGlob=!0,H=!0;break}}continue}break}if(V===Dx){if($===Dx&&(y=W.isGlobstar=!0),p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===OW){if(p=W.isGlob=!0,H=!0,n===!0)continue;break}if(V===YBe){for(;_()!==!0&&(ue=Ae());){if(ue===jd){v=W.backslashes=!0,Ae();continue}if(ue===JBe){h=W.isBracket=!0,p=W.isGlob=!0,H=!0;break}}if(n===!0)continue;break}if(t.nonegate!==!0&&V===Rx&&c===u){D=W.negated=!0,u++;continue}if(t.noparen!==!0&&V===Nx){if(p=W.isGlob=!0,n===!0){for(;_()!==!0&&(V=Ae());){if(V===Nx){v=W.backslashes=!0,V=Ae();continue}if(V===KW){H=!0;break}}continue}break}if(p===!0){if(H=!0,n===!0)continue;break}}t.noext===!0&&(C=!1,p=!1);let ge=l,re=\"\",M=\"\";u>0&&(re=l.slice(0,u),l=l.slice(u),g-=u),ge&&p===!0&&g>0?(ge=l.slice(0,g),M=l.slice(g)):p===!0?(ge=\"\",M=l):ge=l,ge&&ge!==\"\"&&ge!==\"/\"&&ge!==l&&UW(ge.charCodeAt(ge.length-1))&&(ge=ge.slice(0,-1)),t.unescape===!0&&(M&&(M=MW.removeBackslashes(M)),ge&&v===!0&&(ge=MW.removeBackslashes(ge)));let F={prefix:re,input:r,start:u,base:ge,glob:M,isBrace:f,isBracket:h,isGlob:p,isExtglob:C,isGlobstar:y,negated:D,negatedExtglob:T};if(t.tokens===!0&&(F.maxDepth=0,UW(V)||o.push(W),F.tokens=o),t.parts===!0||t.tokens===!0){let ue;for(let pe=0;pe<s.length;pe++){let ke=ue?ue+1:u,Fe=s[pe],Ne=r.slice(ke,Fe);t.tokens&&(pe===0&&u!==0?(o[pe].isPrefix=!0,o[pe].value=re):o[pe].value=Ne,HW(o[pe]),F.maxDepth+=o[pe].depth),(pe!==0||Ne!==\"\")&&a.push(Ne),ue=Fe}if(ue&&ue+1<r.length){let pe=r.slice(ue+1);a.push(pe),t.tokens&&(o[o.length-1].value=pe,HW(o[o.length-1]),F.maxDepth+=o[o.length-1].depth)}F.slashes=s,F.parts=a}return F};YW.exports=WBe});var WW=w((Ctt,JW)=>{\"use strict\";var jy=Gd(),Wn=Yd(),{MAX_LENGTH:qy,POSIX_REGEX_SOURCE:zBe,REGEX_NON_SPECIAL_CHARS:VBe,REGEX_SPECIAL_CHARS_BACKREF:XBe,REPLACEMENTS:qW}=jy,ZBe=(r,e)=>{if(typeof e.expandRange==\"function\")return e.expandRange(...r,e);r.sort();let t=`[${r.join(\"-\")}]`;try{new RegExp(t)}catch{return r.map(n=>Wn.escapeRegex(n)).join(\"..\")}return t},ff=(r,e)=>`Missing ${r}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`,Tx=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");r=qW[r]||r;let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);let s={type:\"bos\",value:\"\",output:t.prepend||\"\"},o=[s],a=t.capture?\"\":\"?:\",l=Wn.isWindows(e),c=jy.globChars(l),u=jy.extglobChars(c),{DOT_LITERAL:g,PLUS_LITERAL:f,SLASH_LITERAL:h,ONE_CHAR:p,DOTS_SLASH:C,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:v,QMARK:D,QMARK_NO_DOT:T,STAR:H,START_ANCHOR:j}=c,$=Y=>`(${a}(?:(?!${j}${Y.dot?C:g}).)*?)`,V=t.dot?\"\":y,W=t.dot?D:T,_=t.bash===!0?$(t):H;t.capture&&(_=`(${_})`),typeof t.noext==\"boolean\"&&(t.noextglob=t.noext);let A={input:r,index:-1,start:0,dot:t.dot===!0,consumed:\"\",output:\"\",prefix:\"\",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};r=Wn.removePrefix(r,A),n=r.length;let Ae=[],ge=[],re=[],M=s,F,ue=()=>A.index===n-1,pe=A.peek=(Y=1)=>r[A.index+Y],ke=A.advance=()=>r[++A.index]||\"\",Fe=()=>r.slice(A.index+1),Ne=(Y=\"\",he=0)=>{A.consumed+=Y,A.index+=he},oe=Y=>{A.output+=Y.output!=null?Y.output:Y.value,Ne(Y.value)},le=()=>{let Y=1;for(;pe()===\"!\"&&(pe(2)!==\"(\"||pe(3)===\"?\");)ke(),A.start++,Y++;return Y%2===0?!1:(A.negated=!0,A.start++,!0)},Be=Y=>{A[Y]++,re.push(Y)},fe=Y=>{A[Y]--,re.pop()},ae=Y=>{if(M.type===\"globstar\"){let he=A.braces>0&&(Y.type===\"comma\"||Y.type===\"brace\"),ie=Y.extglob===!0||Ae.length&&(Y.type===\"pipe\"||Y.type===\"paren\");Y.type!==\"slash\"&&Y.type!==\"paren\"&&!he&&!ie&&(A.output=A.output.slice(0,-M.output.length),M.type=\"star\",M.value=\"*\",M.output=_,A.output+=M.output)}if(Ae.length&&Y.type!==\"paren\"&&(Ae[Ae.length-1].inner+=Y.value),(Y.value||Y.output)&&oe(Y),M&&M.type===\"text\"&&Y.type===\"text\"){M.value+=Y.value,M.output=(M.output||\"\")+Y.value;return}Y.prev=M,o.push(Y),M=Y},qe=(Y,he)=>{let ie={...u[he],conditions:1,inner:\"\"};ie.prev=M,ie.parens=A.parens,ie.output=A.output;let de=(t.capture?\"(\":\"\")+ie.open;Be(\"parens\"),ae({type:Y,value:he,output:A.output?\"\":p}),ae({type:\"paren\",extglob:!0,value:ke(),output:de}),Ae.push(ie)},ne=Y=>{let he=Y.close+(t.capture?\")\":\"\"),ie;if(Y.type===\"negate\"){let de=_;if(Y.inner&&Y.inner.length>1&&Y.inner.includes(\"/\")&&(de=$(t)),(de!==_||ue()||/^\\)+$/.test(Fe()))&&(he=Y.close=`)$))${de}`),Y.inner.includes(\"*\")&&(ie=Fe())&&/^\\.[^\\\\/.]+$/.test(ie)){let _e=Tx(ie,{...e,fastpaths:!1}).output;he=Y.close=`)${_e})${de})`}Y.prev.type===\"bos\"&&(A.negatedExtglob=!0)}ae({type:\"paren\",extglob:!0,value:F,output:he}),fe(\"parens\")};if(t.fastpaths!==!1&&!/(^[*!]|[/()[\\]{}\"])/.test(r)){let Y=!1,he=r.replace(XBe,(ie,de,_e,Pt,It,Mr)=>Pt===\"\\\\\"?(Y=!0,ie):Pt===\"?\"?de?de+Pt+(It?D.repeat(It.length):\"\"):Mr===0?W+(It?D.repeat(It.length):\"\"):D.repeat(_e.length):Pt===\".\"?g.repeat(_e.length):Pt===\"*\"?de?de+Pt+(It?_:\"\"):_:de?ie:`\\\\${ie}`);return Y===!0&&(t.unescape===!0?he=he.replace(/\\\\/g,\"\"):he=he.replace(/\\\\+/g,ie=>ie.length%2===0?\"\\\\\\\\\":ie?\"\\\\\":\"\")),he===r&&t.contains===!0?(A.output=r,A):(A.output=Wn.wrapOutput(he,A,e),A)}for(;!ue();){if(F=ke(),F===\"\\0\")continue;if(F===\"\\\\\"){let ie=pe();if(ie===\"/\"&&t.bash!==!0||ie===\".\"||ie===\";\")continue;if(!ie){F+=\"\\\\\",ae({type:\"text\",value:F});continue}let de=/^\\\\+/.exec(Fe()),_e=0;if(de&&de[0].length>2&&(_e=de[0].length,A.index+=_e,_e%2!==0&&(F+=\"\\\\\")),t.unescape===!0?F=ke():F+=ke(),A.brackets===0){ae({type:\"text\",value:F});continue}}if(A.brackets>0&&(F!==\"]\"||M.value===\"[\"||M.value===\"[^\")){if(t.posix!==!1&&F===\":\"){let ie=M.value.slice(1);if(ie.includes(\"[\")&&(M.posix=!0,ie.includes(\":\"))){let de=M.value.lastIndexOf(\"[\"),_e=M.value.slice(0,de),Pt=M.value.slice(de+2),It=zBe[Pt];if(It){M.value=_e+It,A.backtrack=!0,ke(),!s.output&&o.indexOf(M)===1&&(s.output=p);continue}}}(F===\"[\"&&pe()!==\":\"||F===\"-\"&&pe()===\"]\")&&(F=`\\\\${F}`),F===\"]\"&&(M.value===\"[\"||M.value===\"[^\")&&(F=`\\\\${F}`),t.posix===!0&&F===\"!\"&&M.value===\"[\"&&(F=\"^\"),M.value+=F,oe({value:F});continue}if(A.quotes===1&&F!=='\"'){F=Wn.escapeRegex(F),M.value+=F,oe({value:F});continue}if(F==='\"'){A.quotes=A.quotes===1?0:1,t.keepQuotes===!0&&ae({type:\"text\",value:F});continue}if(F===\"(\"){Be(\"parens\"),ae({type:\"paren\",value:F});continue}if(F===\")\"){if(A.parens===0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"(\"));let ie=Ae[Ae.length-1];if(ie&&A.parens===ie.parens+1){ne(Ae.pop());continue}ae({type:\"paren\",value:F,output:A.parens?\")\":\"\\\\)\"}),fe(\"parens\");continue}if(F===\"[\"){if(t.nobracket===!0||!Fe().includes(\"]\")){if(t.nobracket!==!0&&t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));F=`\\\\${F}`}else Be(\"brackets\");ae({type:\"bracket\",value:F});continue}if(F===\"]\"){if(t.nobracket===!0||M&&M.type===\"bracket\"&&M.value.length===1){ae({type:\"text\",value:F,output:`\\\\${F}`});continue}if(A.brackets===0){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"opening\",\"[\"));ae({type:\"text\",value:F,output:`\\\\${F}`});continue}fe(\"brackets\");let ie=M.value.slice(1);if(M.posix!==!0&&ie[0]===\"^\"&&!ie.includes(\"/\")&&(F=`/${F}`),M.value+=F,oe({value:F}),t.literalBrackets===!1||Wn.hasRegexChars(ie))continue;let de=Wn.escapeRegex(M.value);if(A.output=A.output.slice(0,-M.value.length),t.literalBrackets===!0){A.output+=de,M.value=de;continue}M.value=`(${a}${de}|${M.value})`,A.output+=M.value;continue}if(F===\"{\"&&t.nobrace!==!0){Be(\"braces\");let ie={type:\"brace\",value:F,output:\"(\",outputIndex:A.output.length,tokensIndex:A.tokens.length};ge.push(ie),ae(ie);continue}if(F===\"}\"){let ie=ge[ge.length-1];if(t.nobrace===!0||!ie){ae({type:\"text\",value:F,output:F});continue}let de=\")\";if(ie.dots===!0){let _e=o.slice(),Pt=[];for(let It=_e.length-1;It>=0&&(o.pop(),_e[It].type!==\"brace\");It--)_e[It].type!==\"dots\"&&Pt.unshift(_e[It].value);de=ZBe(Pt,t),A.backtrack=!0}if(ie.comma!==!0&&ie.dots!==!0){let _e=A.output.slice(0,ie.outputIndex),Pt=A.tokens.slice(ie.tokensIndex);ie.value=ie.output=\"\\\\{\",F=de=\"\\\\}\",A.output=_e;for(let It of Pt)A.output+=It.output||It.value}ae({type:\"brace\",value:F,output:de}),fe(\"braces\"),ge.pop();continue}if(F===\"|\"){Ae.length>0&&Ae[Ae.length-1].conditions++,ae({type:\"text\",value:F});continue}if(F===\",\"){let ie=F,de=ge[ge.length-1];de&&re[re.length-1]===\"braces\"&&(de.comma=!0,ie=\"|\"),ae({type:\"comma\",value:F,output:ie});continue}if(F===\"/\"){if(M.type===\"dot\"&&A.index===A.start+1){A.start=A.index+1,A.consumed=\"\",A.output=\"\",o.pop(),M=s;continue}ae({type:\"slash\",value:F,output:h});continue}if(F===\".\"){if(A.braces>0&&M.type===\"dot\"){M.value===\".\"&&(M.output=g);let ie=ge[ge.length-1];M.type=\"dots\",M.output+=F,M.value+=F,ie.dots=!0;continue}if(A.braces+A.parens===0&&M.type!==\"bos\"&&M.type!==\"slash\"){ae({type:\"text\",value:F,output:g});continue}ae({type:\"dot\",value:F,output:g});continue}if(F===\"?\"){if(!(M&&M.value===\"(\")&&t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"qmark\",F);continue}if(M&&M.type===\"paren\"){let de=pe(),_e=F;if(de===\"<\"&&!Wn.supportsLookbehinds())throw new Error(\"Node.js v10 or higher is required for regex lookbehinds\");(M.value===\"(\"&&!/[!=<:]/.test(de)||de===\"<\"&&!/<([!=]|\\w+>)/.test(Fe()))&&(_e=`\\\\${F}`),ae({type:\"text\",value:F,output:_e});continue}if(t.dot!==!0&&(M.type===\"slash\"||M.type===\"bos\")){ae({type:\"qmark\",value:F,output:T});continue}ae({type:\"qmark\",value:F,output:D});continue}if(F===\"!\"){if(t.noextglob!==!0&&pe()===\"(\"&&(pe(2)!==\"?\"||!/[!=<:]/.test(pe(3)))){qe(\"negate\",F);continue}if(t.nonegate!==!0&&A.index===0){le();continue}}if(F===\"+\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){qe(\"plus\",F);continue}if(M&&M.value===\"(\"||t.regex===!1){ae({type:\"plus\",value:F,output:f});continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\"||M.type===\"brace\")||A.parens>0){ae({type:\"plus\",value:F});continue}ae({type:\"plus\",value:f});continue}if(F===\"@\"){if(t.noextglob!==!0&&pe()===\"(\"&&pe(2)!==\"?\"){ae({type:\"at\",extglob:!0,value:F,output:\"\"});continue}ae({type:\"text\",value:F});continue}if(F!==\"*\"){(F===\"$\"||F===\"^\")&&(F=`\\\\${F}`);let ie=VBe.exec(Fe());ie&&(F+=ie[0],A.index+=ie[0].length),ae({type:\"text\",value:F});continue}if(M&&(M.type===\"globstar\"||M.star===!0)){M.type=\"star\",M.star=!0,M.value+=F,M.output=_,A.backtrack=!0,A.globstar=!0,Ne(F);continue}let Y=Fe();if(t.noextglob!==!0&&/^\\([^?]/.test(Y)){qe(\"star\",F);continue}if(M.type===\"star\"){if(t.noglobstar===!0){Ne(F);continue}let ie=M.prev,de=ie.prev,_e=ie.type===\"slash\"||ie.type===\"bos\",Pt=de&&(de.type===\"star\"||de.type===\"globstar\");if(t.bash===!0&&(!_e||Y[0]&&Y[0]!==\"/\")){ae({type:\"star\",value:F,output:\"\"});continue}let It=A.braces>0&&(ie.type===\"comma\"||ie.type===\"brace\"),Mr=Ae.length&&(ie.type===\"pipe\"||ie.type===\"paren\");if(!_e&&ie.type!==\"paren\"&&!It&&!Mr){ae({type:\"star\",value:F,output:\"\"});continue}for(;Y.slice(0,3)===\"/**\";){let ii=r[A.index+4];if(ii&&ii!==\"/\")break;Y=Y.slice(3),Ne(\"/**\",3)}if(ie.type===\"bos\"&&ue()){M.type=\"globstar\",M.value+=F,M.output=$(t),A.output=M.output,A.globstar=!0,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&!Pt&&ue()){A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=$(t)+(t.strictSlashes?\")\":\"|$)\"),M.value+=F,A.globstar=!0,A.output+=ie.output+M.output,Ne(F);continue}if(ie.type===\"slash\"&&ie.prev.type!==\"bos\"&&Y[0]===\"/\"){let ii=Y[1]!==void 0?\"|$\":\"\";A.output=A.output.slice(0,-(ie.output+M.output).length),ie.output=`(?:${ie.output}`,M.type=\"globstar\",M.output=`${$(t)}${h}|${h}${ii})`,M.value+=F,A.output+=ie.output+M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}if(ie.type===\"bos\"&&Y[0]===\"/\"){M.type=\"globstar\",M.value+=F,M.output=`(?:^|${h}|${$(t)}${h})`,A.output=M.output,A.globstar=!0,Ne(F+ke()),ae({type:\"slash\",value:\"/\",output:\"\"});continue}A.output=A.output.slice(0,-M.output.length),M.type=\"globstar\",M.output=$(t),M.value+=F,A.output+=M.output,A.globstar=!0,Ne(F);continue}let he={type:\"star\",value:F,output:_};if(t.bash===!0){he.output=\".*?\",(M.type===\"bos\"||M.type===\"slash\")&&(he.output=V+he.output),ae(he);continue}if(M&&(M.type===\"bracket\"||M.type===\"paren\")&&t.regex===!0){he.output=F,ae(he);continue}(A.index===A.start||M.type===\"slash\"||M.type===\"dot\")&&(M.type===\"dot\"?(A.output+=B,M.output+=B):t.dot===!0?(A.output+=v,M.output+=v):(A.output+=V,M.output+=V),pe()!==\"*\"&&(A.output+=p,M.output+=p)),ae(he)}for(;A.brackets>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"]\"));A.output=Wn.escapeLast(A.output,\"[\"),fe(\"brackets\")}for(;A.parens>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\")\"));A.output=Wn.escapeLast(A.output,\"(\"),fe(\"parens\")}for(;A.braces>0;){if(t.strictBrackets===!0)throw new SyntaxError(ff(\"closing\",\"}\"));A.output=Wn.escapeLast(A.output,\"{\"),fe(\"braces\")}if(t.strictSlashes!==!0&&(M.type===\"star\"||M.type===\"bracket\")&&ae({type:\"maybe_slash\",value:\"\",output:`${h}?`}),A.backtrack===!0){A.output=\"\";for(let Y of A.tokens)A.output+=Y.output!=null?Y.output:Y.value,Y.suffix&&(A.output+=Y.suffix)}return A};Tx.fastpaths=(r,e)=>{let t={...e},i=typeof t.maxLength==\"number\"?Math.min(qy,t.maxLength):qy,n=r.length;if(n>i)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${i}`);r=qW[r]||r;let s=Wn.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:a,ONE_CHAR:l,DOTS_SLASH:c,NO_DOT:u,NO_DOTS:g,NO_DOTS_SLASH:f,STAR:h,START_ANCHOR:p}=jy.globChars(s),C=t.dot?g:u,y=t.dot?f:u,B=t.capture?\"\":\"?:\",v={negated:!1,prefix:\"\"},D=t.bash===!0?\".*?\":h;t.capture&&(D=`(${D})`);let T=V=>V.noglobstar===!0?D:`(${B}(?:(?!${p}${V.dot?c:o}).)*?)`,H=V=>{switch(V){case\"*\":return`${C}${l}${D}`;case\".*\":return`${o}${l}${D}`;case\"*.*\":return`${C}${D}${o}${l}${D}`;case\"*/*\":return`${C}${D}${a}${l}${y}${D}`;case\"**\":return C+T(t);case\"**/*\":return`(?:${C}${T(t)}${a})?${y}${l}${D}`;case\"**/*.*\":return`(?:${C}${T(t)}${a})?${y}${D}${o}${l}${D}`;case\"**/.*\":return`(?:${C}${T(t)}${a})?${o}${l}${D}`;default:{let W=/^(.*?)\\.(\\w+)$/.exec(V);if(!W)return;let _=H(W[1]);return _?_+o+W[2]:void 0}}},j=Wn.removePrefix(r,v),$=H(j);return $&&t.strictSlashes!==!0&&($+=`${a}?`),$};JW.exports=Tx});var VW=w((mtt,zW)=>{\"use strict\";var _Be=J(\"path\"),$Be=jW(),Lx=WW(),Mx=Yd(),e0e=Gd(),t0e=r=>r&&typeof r==\"object\"&&!Array.isArray(r),Gr=(r,e,t=!1)=>{if(Array.isArray(r)){let u=r.map(f=>Gr(f,e,t));return f=>{for(let h of u){let p=h(f);if(p)return p}return!1}}let i=t0e(r)&&r.tokens&&r.input;if(r===\"\"||typeof r!=\"string\"&&!i)throw new TypeError(\"Expected pattern to be a non-empty string\");let n=e||{},s=Mx.isWindows(e),o=i?Gr.compileRe(r,e):Gr.makeRe(r,e,!1,!0),a=o.state;delete o.state;let l=()=>!1;if(n.ignore){let u={...e,ignore:null,onMatch:null,onResult:null};l=Gr(n.ignore,u,t)}let c=(u,g=!1)=>{let{isMatch:f,match:h,output:p}=Gr.test(u,o,e,{glob:r,posix:s}),C={glob:r,state:a,regex:o,posix:s,input:u,output:p,match:h,isMatch:f};return typeof n.onResult==\"function\"&&n.onResult(C),f===!1?(C.isMatch=!1,g?C:!1):l(u)?(typeof n.onIgnore==\"function\"&&n.onIgnore(C),C.isMatch=!1,g?C:!1):(typeof n.onMatch==\"function\"&&n.onMatch(C),g?C:!0)};return t&&(c.state=a),c};Gr.test=(r,e,t,{glob:i,posix:n}={})=>{if(typeof r!=\"string\")throw new TypeError(\"Expected input to be a string\");if(r===\"\")return{isMatch:!1,output:\"\"};let s=t||{},o=s.format||(n?Mx.toPosixSlashes:null),a=r===i,l=a&&o?o(r):r;return a===!1&&(l=o?o(r):r,a=l===i),(a===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?a=Gr.matchBase(r,e,t,n):a=e.exec(l)),{isMatch:Boolean(a),match:a,output:l}};Gr.matchBase=(r,e,t,i=Mx.isWindows(t))=>(e instanceof RegExp?e:Gr.makeRe(e,t)).test(_Be.basename(r));Gr.isMatch=(r,e,t)=>Gr(e,t)(r);Gr.parse=(r,e)=>Array.isArray(r)?r.map(t=>Gr.parse(t,e)):Lx(r,{...e,fastpaths:!1});Gr.scan=(r,e)=>$Be(r,e);Gr.compileRe=(r,e,t=!1,i=!1)=>{if(t===!0)return r.output;let n=e||{},s=n.contains?\"\":\"^\",o=n.contains?\"\":\"$\",a=`${s}(?:${r.output})${o}`;r&&r.negated===!0&&(a=`^(?!${a}).*$`);let l=Gr.toRegex(a,e);return i===!0&&(l.state=r),l};Gr.makeRe=(r,e={},t=!1,i=!1)=>{if(!r||typeof r!=\"string\")throw new TypeError(\"Expected a non-empty string\");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(r[0]===\".\"||r[0]===\"*\")&&(n.output=Lx.fastpaths(r,e)),n.output||(n=Lx(r,e)),Gr.compileRe(n,e,t,i)};Gr.toRegex=(r,e)=>{try{let t=e||{};return new RegExp(r,t.flags||(t.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===!0)throw t;return/$^/}};Gr.constants=e0e;zW.exports=Gr});var Ox=w((Ett,XW)=>{\"use strict\";XW.exports=VW()});var Bn=w((Itt,e3)=>{\"use strict\";var _W=J(\"util\"),$W=kW(),Uo=Ox(),Kx=Yd(),ZW=r=>r===\"\"||r===\"./\",Sr=(r,e,t)=>{e=[].concat(e),r=[].concat(r);let i=new Set,n=new Set,s=new Set,o=0,a=u=>{s.add(u.output),t&&t.onResult&&t.onResult(u)};for(let u=0;u<e.length;u++){let g=Uo(String(e[u]),{...t,onResult:a},!0),f=g.state.negated||g.state.negatedExtglob;f&&o++;for(let h of r){let p=g(h,!0);!(f?!p.isMatch:p.isMatch)||(f?i.add(p.output):(i.delete(p.output),n.add(p.output)))}}let c=(o===e.length?[...s]:[...n]).filter(u=>!i.has(u));if(t&&c.length===0){if(t.failglob===!0)throw new Error(`No matches found for \"${e.join(\", \")}\"`);if(t.nonull===!0||t.nullglob===!0)return t.unescape?e.map(u=>u.replace(/\\\\/g,\"\")):e}return c};Sr.match=Sr;Sr.matcher=(r,e)=>Uo(r,e);Sr.isMatch=(r,e,t)=>Uo(e,t)(r);Sr.any=Sr.isMatch;Sr.not=(r,e,t={})=>{e=[].concat(e).map(String);let i=new Set,n=[],o=Sr(r,e,{...t,onResult:a=>{t.onResult&&t.onResult(a),n.push(a.output)}});for(let a of n)o.includes(a)||i.add(a);return[...i]};Sr.contains=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);if(Array.isArray(e))return e.some(i=>Sr.contains(r,i,t));if(typeof e==\"string\"){if(ZW(r)||ZW(e))return!1;if(r.includes(e)||r.startsWith(\"./\")&&r.slice(2).includes(e))return!0}return Sr.isMatch(r,e,{...t,contains:!0})};Sr.matchKeys=(r,e,t)=>{if(!Kx.isObject(r))throw new TypeError(\"Expected the first argument to be an object\");let i=Sr(Object.keys(r),e,t),n={};for(let s of i)n[s]=r[s];return n};Sr.some=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(i.some(o=>s(o)))return!0}return!1};Sr.every=(r,e,t)=>{let i=[].concat(r);for(let n of[].concat(e)){let s=Uo(String(n),t);if(!i.every(o=>s(o)))return!1}return!0};Sr.all=(r,e,t)=>{if(typeof r!=\"string\")throw new TypeError(`Expected a string: \"${_W.inspect(r)}\"`);return[].concat(e).every(i=>Uo(i,t)(r))};Sr.capture=(r,e,t)=>{let i=Kx.isWindows(t),s=Uo.makeRe(String(r),{...t,capture:!0}).exec(i?Kx.toPosixSlashes(e):e);if(s)return s.slice(1).map(o=>o===void 0?\"\":o)};Sr.makeRe=(...r)=>Uo.makeRe(...r);Sr.scan=(...r)=>Uo.scan(...r);Sr.parse=(r,e)=>{let t=[];for(let i of[].concat(r||[]))for(let n of $W(String(i),e))t.push(Uo.parse(n,e));return t};Sr.braces=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return e&&e.nobrace===!0||!/\\{.*\\}/.test(r)?[r]:$W(r,e)};Sr.braceExpand=(r,e)=>{if(typeof r!=\"string\")throw new TypeError(\"Expected a string\");return Sr.braces(r,{...e,expand:!0})};e3.exports=Sr});var r3=w((ytt,t3)=>{\"use strict\";t3.exports=({onlyFirst:r=!1}={})=>{let e=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(e,r?void 0:\"g\")}});var n3=w((wtt,i3)=>{\"use strict\";var r0e=r3();i3.exports=r=>typeof r==\"string\"?r.replace(r0e(),\"\"):r});var m3=w((Ftt,C3)=>{\"use strict\";C3.exports=(...r)=>[...new Set([].concat(...r))]});var sP=w((Ntt,y3)=>{\"use strict\";var p0e=J(\"stream\"),E3=p0e.PassThrough,d0e=Array.prototype.slice;y3.exports=C0e;function C0e(){let r=[],e=!1,t=d0e.call(arguments),i=t[t.length-1];i&&!Array.isArray(i)&&i.pipe==null?t.pop():i={};let n=i.end!==!1;i.objectMode==null&&(i.objectMode=!0),i.highWaterMark==null&&(i.highWaterMark=64*1024);let s=E3(i);function o(){for(let c=0,u=arguments.length;c<u;c++)r.push(I3(arguments[c],i));return a(),this}function a(){if(e)return;e=!0;let c=r.shift();if(!c){process.nextTick(l);return}Array.isArray(c)||(c=[c]);let u=c.length+1;function g(){--u>0||(e=!1,a())}function f(h){function p(){h.removeListener(\"merge2UnpipeEnd\",p),h.removeListener(\"end\",p),g()}if(h._readableState.endEmitted)return g();h.on(\"merge2UnpipeEnd\",p),h.on(\"end\",p),h.pipe(s,{end:!1}),h.resume()}for(let h=0;h<c.length;h++)f(c[h]);g()}function l(){return e=!1,s.emit(\"queueDrain\"),n&&s.end()}return s.setMaxListeners(0),s.add=o,s.on(\"unpipe\",function(c){c.emit(\"merge2UnpipeEnd\")}),t.length&&o.apply(null,t),s}function I3(r,e){if(Array.isArray(r))for(let t=0,i=r.length;t<i;t++)r[t]=I3(r[t],e);else{if(!r._readableState&&r.pipe&&(r=r.pipe(E3(e))),!r._readableState||!r.pause||!r.pipe)throw new Error(\"Only readable stream can be merged.\");r.pause()}return r}});var w3=w(Zy=>{\"use strict\";Object.defineProperty(Zy,\"__esModule\",{value:!0});function m0e(r){return r.reduce((e,t)=>[].concat(e,t),[])}Zy.flatten=m0e;function E0e(r,e){let t=[[]],i=0;for(let n of r)e(n)?(i++,t[i]=[]):t[i].push(n);return t}Zy.splitWhen=E0e});var B3=w(oP=>{\"use strict\";Object.defineProperty(oP,\"__esModule\",{value:!0});function I0e(r){return r.code===\"ENOENT\"}oP.isEnoentCodeError=I0e});var b3=w(AP=>{\"use strict\";Object.defineProperty(AP,\"__esModule\",{value:!0});var aP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function y0e(r,e){return new aP(r,e)}AP.createDirentFromStats=y0e});var Q3=w(yf=>{\"use strict\";Object.defineProperty(yf,\"__esModule\",{value:!0});var w0e=J(\"path\"),B0e=2,b0e=/(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;function Q0e(r){return r.replace(/\\\\/g,\"/\")}yf.unixify=Q0e;function S0e(r,e){return w0e.resolve(r,e)}yf.makeAbsolute=S0e;function v0e(r){return r.replace(b0e,\"\\\\$2\")}yf.escape=v0e;function x0e(r){if(r.charAt(0)===\".\"){let e=r.charAt(1);if(e===\"/\"||e===\"\\\\\")return r.slice(B0e)}return r}yf.removeLeadingDotSegment=x0e});var v3=w((Ktt,S3)=>{S3.exports=function(e){if(typeof e!=\"string\"||e===\"\")return!1;for(var t;t=/(\\\\).|([@?!+*]\\(.*\\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}});var D3=w((Utt,P3)=>{var P0e=v3(),x3={\"{\":\"}\",\"(\":\")\",\"[\":\"]\"},D0e=function(r){if(r[0]===\"!\")return!0;for(var e=0,t=-2,i=-2,n=-2,s=-2,o=-2;e<r.length;){if(r[e]===\"*\"||r[e+1]===\"?\"&&/[\\].+)]/.test(r[e])||i!==-1&&r[e]===\"[\"&&r[e+1]!==\"]\"&&(i<e&&(i=r.indexOf(\"]\",e)),i>e&&(o===-1||o>i||(o=r.indexOf(\"\\\\\",e),o===-1||o>i)))||n!==-1&&r[e]===\"{\"&&r[e+1]!==\"}\"&&(n=r.indexOf(\"}\",e),n>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>n))||s!==-1&&r[e]===\"(\"&&r[e+1]===\"?\"&&/[:!=]/.test(r[e+2])&&r[e+3]!==\")\"&&(s=r.indexOf(\")\",e),s>e&&(o=r.indexOf(\"\\\\\",e),o===-1||o>s))||t!==-1&&r[e]===\"(\"&&r[e+1]!==\"|\"&&(t<e&&(t=r.indexOf(\"|\",e)),t!==-1&&r[t+1]!==\")\"&&(s=r.indexOf(\")\",t),s>t&&(o=r.indexOf(\"\\\\\",t),o===-1||o>s))))return!0;if(r[e]===\"\\\\\"){var a=r[e+1];e+=2;var l=x3[a];if(l){var c=r.indexOf(l,e);c!==-1&&(e=c+1)}if(r[e]===\"!\")return!0}else e++}return!1},k0e=function(r){if(r[0]===\"!\")return!0;for(var e=0;e<r.length;){if(/[*?{}()[\\]]/.test(r[e]))return!0;if(r[e]===\"\\\\\"){var t=r[e+1];e+=2;var i=x3[t];if(i){var n=r.indexOf(i,e);n!==-1&&(e=n+1)}if(r[e]===\"!\")return!0}else e++}return!1};P3.exports=function(e,t){if(typeof e!=\"string\"||e===\"\")return!1;if(P0e(e))return!0;var i=D0e;return t&&t.strict===!1&&(i=k0e),i(e)}});var R3=w((Htt,k3)=>{\"use strict\";var R0e=D3(),F0e=J(\"path\").posix.dirname,N0e=J(\"os\").platform()===\"win32\",lP=\"/\",T0e=/\\\\/g,L0e=/[\\{\\[].*[\\}\\]]$/,M0e=/(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/,O0e=/\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;k3.exports=function(e,t){var i=Object.assign({flipBackslashes:!0},t);i.flipBackslashes&&N0e&&e.indexOf(lP)<0&&(e=e.replace(T0e,lP)),L0e.test(e)&&(e+=lP),e+=\"a\";do e=F0e(e);while(R0e(e)||M0e.test(e));return e.replace(O0e,\"$1\")}});var H3=w($r=>{\"use strict\";Object.defineProperty($r,\"__esModule\",{value:!0});var K0e=J(\"path\"),U0e=R3(),F3=Bn(),H0e=Ox(),N3=\"**\",G0e=\"\\\\\",Y0e=/[*?]|^!/,j0e=/\\[.*]/,q0e=/(?:^|[^!*+?@])\\(.*\\|.*\\)/,J0e=/[!*+?@]\\(.*\\)/,W0e=/{.*(?:,|\\.\\.).*}/;function T3(r,e={}){return!L3(r,e)}$r.isStaticPattern=T3;function L3(r,e={}){return!!(e.caseSensitiveMatch===!1||r.includes(G0e)||Y0e.test(r)||j0e.test(r)||q0e.test(r)||e.extglob!==!1&&J0e.test(r)||e.braceExpansion!==!1&&W0e.test(r))}$r.isDynamicPattern=L3;function z0e(r){return _y(r)?r.slice(1):r}$r.convertToPositivePattern=z0e;function V0e(r){return\"!\"+r}$r.convertToNegativePattern=V0e;function _y(r){return r.startsWith(\"!\")&&r[1]!==\"(\"}$r.isNegativePattern=_y;function M3(r){return!_y(r)}$r.isPositivePattern=M3;function X0e(r){return r.filter(_y)}$r.getNegativePatterns=X0e;function Z0e(r){return r.filter(M3)}$r.getPositivePatterns=Z0e;function _0e(r){return U0e(r,{flipBackslashes:!1})}$r.getBaseDirectory=_0e;function $0e(r){return r.includes(N3)}$r.hasGlobStar=$0e;function O3(r){return r.endsWith(\"/\"+N3)}$r.endsWithSlashGlobStar=O3;function ebe(r){let e=K0e.basename(r);return O3(r)||T3(e)}$r.isAffectDepthOfReadingPattern=ebe;function tbe(r){return r.reduce((e,t)=>e.concat(K3(t)),[])}$r.expandPatternsWithBraceExpansion=tbe;function K3(r){return F3.braces(r,{expand:!0,nodupes:!0})}$r.expandBraceExpansion=K3;function rbe(r,e){let t=H0e.scan(r,Object.assign(Object.assign({},e),{parts:!0}));return t.parts.length===0?[r]:t.parts}$r.getPatternParts=rbe;function U3(r,e){return F3.makeRe(r,e)}$r.makeRe=U3;function ibe(r,e){return r.map(t=>U3(t,e))}$r.convertPatternsToRe=ibe;function nbe(r,e){return e.some(t=>t.test(r))}$r.matchAny=nbe});var Y3=w(cP=>{\"use strict\";Object.defineProperty(cP,\"__esModule\",{value:!0});var sbe=sP();function obe(r){let e=sbe(r);return r.forEach(t=>{t.once(\"error\",i=>e.emit(\"error\",i))}),e.once(\"close\",()=>G3(r)),e.once(\"end\",()=>G3(r)),e}cP.merge=obe;function G3(r){r.forEach(e=>e.emit(\"close\"))}});var j3=w($y=>{\"use strict\";Object.defineProperty($y,\"__esModule\",{value:!0});function abe(r){return typeof r==\"string\"}$y.isString=abe;function Abe(r){return r===\"\"}$y.isEmpty=Abe});var Ma=w(La=>{\"use strict\";Object.defineProperty(La,\"__esModule\",{value:!0});var lbe=w3();La.array=lbe;var cbe=B3();La.errno=cbe;var ube=b3();La.fs=ube;var gbe=Q3();La.path=gbe;var fbe=H3();La.pattern=fbe;var hbe=Y3();La.stream=hbe;var pbe=j3();La.string=pbe});var V3=w(Oa=>{\"use strict\";Object.defineProperty(Oa,\"__esModule\",{value:!0});var bc=Ma();function dbe(r,e){let t=q3(r),i=J3(r,e.ignore),n=t.filter(l=>bc.pattern.isStaticPattern(l,e)),s=t.filter(l=>bc.pattern.isDynamicPattern(l,e)),o=uP(n,i,!1),a=uP(s,i,!0);return o.concat(a)}Oa.generate=dbe;function uP(r,e,t){let i=W3(r);return\".\"in i?[gP(\".\",r,e,t)]:z3(i,e,t)}Oa.convertPatternsToTasks=uP;function q3(r){return bc.pattern.getPositivePatterns(r)}Oa.getPositivePatterns=q3;function J3(r,e){return bc.pattern.getNegativePatterns(r).concat(e).map(bc.pattern.convertToPositivePattern)}Oa.getNegativePatternsAsPositive=J3;function W3(r){let e={};return r.reduce((t,i)=>{let n=bc.pattern.getBaseDirectory(i);return n in t?t[n].push(i):t[n]=[i],t},e)}Oa.groupPatternsByBaseDirectory=W3;function z3(r,e,t){return Object.keys(r).map(i=>gP(i,r[i],e,t))}Oa.convertPatternGroupsToTasks=z3;function gP(r,e,t,i){return{dynamic:i,positive:e,negative:t,base:r,patterns:[].concat(e,t.map(bc.pattern.convertToNegativePattern))}}Oa.convertPatternGroupToTask=gP});var Z3=w(ew=>{\"use strict\";Object.defineProperty(ew,\"__esModule\",{value:!0});ew.read=void 0;function Cbe(r,e,t){e.fs.lstat(r,(i,n)=>{if(i!==null){X3(t,i);return}if(!n.isSymbolicLink()||!e.followSymbolicLink){fP(t,n);return}e.fs.stat(r,(s,o)=>{if(s!==null){if(e.throwErrorOnBrokenSymbolicLink){X3(t,s);return}fP(t,n);return}e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),fP(t,o)})})}ew.read=Cbe;function X3(r,e){r(e)}function fP(r,e){r(null,e)}});var _3=w(tw=>{\"use strict\";Object.defineProperty(tw,\"__esModule\",{value:!0});tw.read=void 0;function mbe(r,e){let t=e.fs.lstatSync(r);if(!t.isSymbolicLink()||!e.followSymbolicLink)return t;try{let i=e.fs.statSync(r);return e.markSymbolicLink&&(i.isSymbolicLink=()=>!0),i}catch(i){if(!e.throwErrorOnBrokenSymbolicLink)return t;throw i}}tw.read=mbe});var $3=w(UA=>{\"use strict\";Object.defineProperty(UA,\"__esModule\",{value:!0});UA.createFileSystemAdapter=UA.FILE_SYSTEM_ADAPTER=void 0;var rw=J(\"fs\");UA.FILE_SYSTEM_ADAPTER={lstat:rw.lstat,stat:rw.stat,lstatSync:rw.lstatSync,statSync:rw.statSync};function Ebe(r){return r===void 0?UA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},UA.FILE_SYSTEM_ADAPTER),r)}UA.createFileSystemAdapter=Ebe});var e4=w(pP=>{\"use strict\";Object.defineProperty(pP,\"__esModule\",{value:!0});var Ibe=$3(),hP=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Ibe.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return e!=null?e:t}};pP.default=hP});var Qc=w(HA=>{\"use strict\";Object.defineProperty(HA,\"__esModule\",{value:!0});HA.statSync=HA.stat=HA.Settings=void 0;var t4=Z3(),ybe=_3(),dP=e4();HA.Settings=dP.default;function wbe(r,e,t){if(typeof e==\"function\"){t4.read(r,CP(),e);return}t4.read(r,CP(e),t)}HA.stat=wbe;function Bbe(r,e){let t=CP(e);return ybe.read(r,t)}HA.statSync=Bbe;function CP(r={}){return r instanceof dP.default?r:new dP.default(r)}});var i4=w((_tt,r4)=>{r4.exports=bbe;function bbe(r,e){var t,i,n,s=!0;Array.isArray(r)?(t=[],i=r.length):(n=Object.keys(r),t={},i=n.length);function o(l){function c(){e&&e(l,t),e=null}s?process.nextTick(c):c()}function a(l,c,u){t[l]=u,(--i===0||c)&&o(c)}i?n?n.forEach(function(l){r[l](function(c,u){a(l,c,u)})}):r.forEach(function(l,c){l(function(u,g){a(c,u,g)})}):o(null),s=!1}});var mP=w(nw=>{\"use strict\";Object.defineProperty(nw,\"__esModule\",{value:!0});nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var iw=process.versions.node.split(\".\");if(iw[0]===void 0||iw[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var n4=Number.parseInt(iw[0],10),Qbe=Number.parseInt(iw[1],10),s4=10,Sbe=10,vbe=n4>s4,xbe=n4===s4&&Qbe>=Sbe;nw.IS_SUPPORT_READDIR_WITH_FILE_TYPES=vbe||xbe});var o4=w(sw=>{\"use strict\";Object.defineProperty(sw,\"__esModule\",{value:!0});sw.createDirentFromStats=void 0;var EP=class{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}};function Pbe(r,e){return new EP(r,e)}sw.createDirentFromStats=Pbe});var IP=w(ow=>{\"use strict\";Object.defineProperty(ow,\"__esModule\",{value:!0});ow.fs=void 0;var Dbe=o4();ow.fs=Dbe});var yP=w(aw=>{\"use strict\";Object.defineProperty(aw,\"__esModule\",{value:!0});aw.joinPathSegments=void 0;function kbe(r,e,t){return r.endsWith(t)?r+e:r+t+e}aw.joinPathSegments=kbe});var g4=w(GA=>{\"use strict\";Object.defineProperty(GA,\"__esModule\",{value:!0});GA.readdir=GA.readdirWithFileTypes=GA.read=void 0;var Rbe=Qc(),a4=i4(),Fbe=mP(),A4=IP(),l4=yP();function Nbe(r,e,t){if(!e.stats&&Fbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES){c4(r,e,t);return}u4(r,e,t)}GA.read=Nbe;function c4(r,e,t){e.fs.readdir(r,{withFileTypes:!0},(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(a=>({dirent:a,name:a.name,path:l4.joinPathSegments(r,a.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){wP(t,s);return}let o=s.map(a=>Tbe(a,e));a4(o,(a,l)=>{if(a!==null){Aw(t,a);return}wP(t,l)})})}GA.readdirWithFileTypes=c4;function Tbe(r,e){return t=>{if(!r.dirent.isSymbolicLink()){t(null,r);return}e.fs.stat(r.path,(i,n)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){t(i);return}t(null,r);return}r.dirent=A4.fs.createDirentFromStats(r.name,n),t(null,r)})}}function u4(r,e,t){e.fs.readdir(r,(i,n)=>{if(i!==null){Aw(t,i);return}let s=n.map(o=>{let a=l4.joinPathSegments(r,o,e.pathSegmentSeparator);return l=>{Rbe.stat(a,e.fsStatSettings,(c,u)=>{if(c!==null){l(c);return}let g={name:o,path:a,dirent:A4.fs.createDirentFromStats(o,u)};e.stats&&(g.stats=u),l(null,g)})}});a4(s,(o,a)=>{if(o!==null){Aw(t,o);return}wP(t,a)})})}GA.readdir=u4;function Aw(r,e){r(e)}function wP(r,e){r(null,e)}});var C4=w(YA=>{\"use strict\";Object.defineProperty(YA,\"__esModule\",{value:!0});YA.readdir=YA.readdirWithFileTypes=YA.read=void 0;var Lbe=Qc(),Mbe=mP(),f4=IP(),h4=yP();function Obe(r,e){return!e.stats&&Mbe.IS_SUPPORT_READDIR_WITH_FILE_TYPES?p4(r,e):d4(r,e)}YA.read=Obe;function p4(r,e){return e.fs.readdirSync(r,{withFileTypes:!0}).map(i=>{let n={dirent:i,name:i.name,path:h4.joinPathSegments(r,i.name,e.pathSegmentSeparator)};if(n.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let s=e.fs.statSync(n.path);n.dirent=f4.fs.createDirentFromStats(n.name,s)}catch(s){if(e.throwErrorOnBrokenSymbolicLink)throw s}return n})}YA.readdirWithFileTypes=p4;function d4(r,e){return e.fs.readdirSync(r).map(i=>{let n=h4.joinPathSegments(r,i,e.pathSegmentSeparator),s=Lbe.statSync(n,e.fsStatSettings),o={name:i,path:n,dirent:f4.fs.createDirentFromStats(i,s)};return e.stats&&(o.stats=s),o})}YA.readdir=d4});var m4=w(jA=>{\"use strict\";Object.defineProperty(jA,\"__esModule\",{value:!0});jA.createFileSystemAdapter=jA.FILE_SYSTEM_ADAPTER=void 0;var wf=J(\"fs\");jA.FILE_SYSTEM_ADAPTER={lstat:wf.lstat,stat:wf.stat,lstatSync:wf.lstatSync,statSync:wf.statSync,readdir:wf.readdir,readdirSync:wf.readdirSync};function Kbe(r){return r===void 0?jA.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},jA.FILE_SYSTEM_ADAPTER),r)}jA.createFileSystemAdapter=Kbe});var E4=w(bP=>{\"use strict\";Object.defineProperty(bP,\"__esModule\",{value:!0});var Ube=J(\"path\"),Hbe=Qc(),Gbe=m4(),BP=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Gbe.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Ube.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new Hbe.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};bP.default=BP});var lw=w(qA=>{\"use strict\";Object.defineProperty(qA,\"__esModule\",{value:!0});qA.Settings=qA.scandirSync=qA.scandir=void 0;var I4=g4(),Ybe=C4(),QP=E4();qA.Settings=QP.default;function jbe(r,e,t){if(typeof e==\"function\"){I4.read(r,SP(),e);return}I4.read(r,SP(e),t)}qA.scandir=jbe;function qbe(r,e){let t=SP(e);return Ybe.read(r,t)}qA.scandirSync=qbe;function SP(r={}){return r instanceof QP.default?r:new QP.default(r)}});var w4=w((Art,y4)=>{\"use strict\";function Jbe(r){var e=new r,t=e;function i(){var s=e;return s.next?e=s.next:(e=new r,t=e),s.next=null,s}function n(s){t.next=s,t=s}return{get:i,release:n}}y4.exports=Jbe});var b4=w((lrt,vP)=>{\"use strict\";var Wbe=w4();function B4(r,e,t){if(typeof r==\"function\"&&(t=e,e=r,r=null),t<1)throw new Error(\"fastqueue concurrency must be greater than 1\");var i=Wbe(zbe),n=null,s=null,o=0,a=null,l={push:C,drain:Is,saturated:Is,pause:u,paused:!1,concurrency:t,running:c,resume:h,idle:p,length:g,getQueue:f,unshift:y,empty:Is,kill:v,killAndDrain:D,error:T};return l;function c(){return o}function u(){l.paused=!0}function g(){for(var H=n,j=0;H;)H=H.next,j++;return j}function f(){for(var H=n,j=[];H;)j.push(H.value),H=H.next;return j}function h(){if(!!l.paused){l.paused=!1;for(var H=0;H<l.concurrency;H++)o++,B()}}function p(){return o===0&&l.length()===0}function C(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,$.errorHandler=a,o===l.concurrency||l.paused?s?(s.next=$,s=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function y(H,j){var $=i.get();$.context=r,$.release=B,$.value=H,$.callback=j||Is,o===l.concurrency||l.paused?n?($.next=n,n=$):(n=$,s=$,l.saturated()):(o++,e.call(r,$.value,$.worked))}function B(H){H&&i.release(H);var j=n;j?l.paused?o--:(s===n&&(s=null),n=j.next,j.next=null,e.call(r,j.value,j.worked),s===null&&l.empty()):--o===0&&l.drain()}function v(){n=null,s=null,l.drain=Is}function D(){n=null,s=null,l.drain(),l.drain=Is}function T(H){a=H}}function Is(){}function zbe(){this.value=null,this.callback=Is,this.next=null,this.release=Is,this.context=null,this.errorHandler=null;var r=this;this.worked=function(t,i){var n=r.callback,s=r.errorHandler,o=r.value;r.value=null,r.callback=Is,r.errorHandler&&s(t,o),n.call(r.context,t,i),r.release(r)}}function Vbe(r,e,t){typeof r==\"function\"&&(t=e,e=r,r=null);function i(u,g){e.call(this,u).then(function(f){g(null,f)},g)}var n=B4(r,i,t),s=n.push,o=n.unshift;return n.push=a,n.unshift=l,n.drained=c,n;function a(u){var g=new Promise(function(f,h){s(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function l(u){var g=new Promise(function(f,h){o(u,function(p,C){if(p){h(p);return}f(C)})});return g.catch(Is),g}function c(){var u=n.drain,g=new Promise(function(f){n.drain=function(){u(),f()}});return g}}vP.exports=B4;vP.exports.promise=Vbe});var cw=w(Yo=>{\"use strict\";Object.defineProperty(Yo,\"__esModule\",{value:!0});Yo.joinPathSegments=Yo.replacePathSegmentSeparator=Yo.isAppliedFilter=Yo.isFatalError=void 0;function Xbe(r,e){return r.errorFilter===null?!0:!r.errorFilter(e)}Yo.isFatalError=Xbe;function Zbe(r,e){return r===null||r(e)}Yo.isAppliedFilter=Zbe;function _be(r,e){return r.split(/[/\\\\]/).join(e)}Yo.replacePathSegmentSeparator=_be;function $be(r,e,t){return r===\"\"?e:r.endsWith(t)?r+e:r+t+e}Yo.joinPathSegments=$be});var DP=w(PP=>{\"use strict\";Object.defineProperty(PP,\"__esModule\",{value:!0});var eQe=cw(),xP=class{constructor(e,t){this._root=e,this._settings=t,this._root=eQe.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}};PP.default=xP});var FP=w(RP=>{\"use strict\";Object.defineProperty(RP,\"__esModule\",{value:!0});var tQe=J(\"events\"),rQe=lw(),iQe=b4(),uw=cw(),nQe=DP(),kP=class extends nQe.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=rQe.scandir,this._emitter=new tQe.EventEmitter,this._queue=iQe(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit(\"end\")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error(\"The reader is already destroyed\");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on(\"entry\",e)}onError(e){this._emitter.once(\"error\",e)}onEnd(e){this._emitter.once(\"end\",e)}_pushToQueue(e,t){let i={directory:e,base:t};this._queue.push(i,n=>{n!==null&&this._handleError(n)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(i,n)=>{if(i!==null){t(i,void 0);return}for(let s of n)this._handleEntry(s,e.base);t(null,void 0)})}_handleError(e){this._isDestroyed||!uw.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit(\"error\",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;let i=e.path;t!==void 0&&(e.path=uw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),uw.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&uw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_emitEntry(e){this._emitter.emit(\"entry\",e)}};RP.default=kP});var Q4=w(TP=>{\"use strict\";Object.defineProperty(TP,\"__esModule\",{value:!0});var sQe=FP(),NP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new sQe.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{oQe(e,t)}),this._reader.onEntry(t=>{this._storage.add(t)}),this._reader.onEnd(()=>{aQe(e,[...this._storage])}),this._reader.read()}};TP.default=NP;function oQe(r,e){r(e)}function aQe(r,e){r(null,e)}});var S4=w(MP=>{\"use strict\";Object.defineProperty(MP,\"__esModule\",{value:!0});var AQe=J(\"stream\"),lQe=FP(),LP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new lQe.default(this._root,this._settings),this._stream=new AQe.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit(\"error\",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};MP.default=LP});var v4=w(KP=>{\"use strict\";Object.defineProperty(KP,\"__esModule\",{value:!0});var cQe=lw(),gw=cw(),uQe=DP(),OP=class extends uQe.default{constructor(){super(...arguments),this._scandir=cQe.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{let i=this._scandir(e,this._settings.fsScandirSettings);for(let n of i)this._handleEntry(n,t)}catch(i){this._handleError(i)}}_handleError(e){if(!!gw.isFatalError(this._settings,e))throw e}_handleEntry(e,t){let i=e.path;t!==void 0&&(e.path=gw.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),gw.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&gw.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(i,e.path)}_pushToStorage(e){this._storage.add(e)}};KP.default=OP});var x4=w(HP=>{\"use strict\";Object.defineProperty(HP,\"__esModule\",{value:!0});var gQe=v4(),UP=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new gQe.default(this._root,this._settings)}read(){return this._reader.read()}};HP.default=UP});var P4=w(YP=>{\"use strict\";Object.defineProperty(YP,\"__esModule\",{value:!0});var fQe=J(\"path\"),hQe=lw(),GP=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fQe.sep),this.fsScandirSettings=new hQe.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return e!=null?e:t}};YP.default=GP});var qP=w(jo=>{\"use strict\";Object.defineProperty(jo,\"__esModule\",{value:!0});jo.Settings=jo.walkStream=jo.walkSync=jo.walk=void 0;var D4=Q4(),pQe=S4(),dQe=x4(),jP=P4();jo.Settings=jP.default;function CQe(r,e,t){if(typeof e==\"function\"){new D4.default(r,fw()).read(e);return}new D4.default(r,fw(e)).read(t)}jo.walk=CQe;function mQe(r,e){let t=fw(e);return new dQe.default(r,t).read()}jo.walkSync=mQe;function EQe(r,e){let t=fw(e);return new pQe.default(r,t).read()}jo.walkStream=EQe;function fw(r={}){return r instanceof jP.default?r:new jP.default(r)}});var zP=w(WP=>{\"use strict\";Object.defineProperty(WP,\"__esModule\",{value:!0});var IQe=J(\"path\"),yQe=Qc(),k4=Ma(),JP=class{constructor(e){this._settings=e,this._fsStatSettings=new yQe.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return IQe.resolve(this._settings.cwd,e)}_makeEntry(e,t){let i={name:t,path:t,dirent:k4.fs.createDirentFromStats(t,e)};return this._settings.stats&&(i.stats=e),i}_isFatalError(e){return!k4.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};WP.default=JP});var ZP=w(XP=>{\"use strict\";Object.defineProperty(XP,\"__esModule\",{value:!0});var wQe=J(\"stream\"),BQe=Qc(),bQe=qP(),QQe=zP(),VP=class extends QQe.default{constructor(){super(...arguments),this._walkStream=bQe.walkStream,this._stat=BQe.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){let i=e.map(this._getFullEntryPath,this),n=new wQe.PassThrough({objectMode:!0});n._write=(s,o,a)=>this._getEntry(i[s],e[s],t).then(l=>{l!==null&&t.entryFilter(l)&&n.push(l),s===i.length-1&&n.end(),a()}).catch(a);for(let s=0;s<i.length;s++)n.write(s);return n}_getEntry(e,t,i){return this._getStat(e).then(n=>this._makeEntry(n,t)).catch(n=>{if(i.errorFilter(n))return null;throw n})}_getStat(e){return new Promise((t,i)=>{this._stat(e,this._fsStatSettings,(n,s)=>n===null?t(s):i(n))})}};XP.default=VP});var R4=w($P=>{\"use strict\";Object.defineProperty($P,\"__esModule\",{value:!0});var Bf=Ma(),_P=class{constructor(e,t,i){this._patterns=e,this._settings=t,this._micromatchOptions=i,this._storage=[],this._fillStorage()}_fillStorage(){let e=Bf.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let t of e){let i=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(i);this._storage.push({complete:n.length<=1,pattern:t,segments:i,sections:n})}}_getPatternSegments(e){return Bf.pattern.getPatternParts(e,this._micromatchOptions).map(i=>Bf.pattern.isDynamicPattern(i,this._settings)?{dynamic:!0,pattern:i,patternRe:Bf.pattern.makeRe(i,this._micromatchOptions)}:{dynamic:!1,pattern:i})}_splitSegmentsIntoSections(e){return Bf.array.splitWhen(e,t=>t.dynamic&&Bf.pattern.hasGlobStar(t.pattern))}};$P.default=_P});var F4=w(tD=>{\"use strict\";Object.defineProperty(tD,\"__esModule\",{value:!0});var SQe=R4(),eD=class extends SQe.default{match(e){let t=e.split(\"/\"),i=t.length,n=this._storage.filter(s=>!s.complete||s.segments.length>i);for(let s of n){let o=s.sections[0];if(!s.complete&&i>o.length||t.every((l,c)=>{let u=s.segments[c];return!!(u.dynamic&&u.patternRe.test(l)||!u.dynamic&&u.pattern===l)}))return!0}return!1}};tD.default=eD});var N4=w(iD=>{\"use strict\";Object.defineProperty(iD,\"__esModule\",{value:!0});var hw=Ma(),vQe=F4(),rD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,i){let n=this._getMatcher(t),s=this._getNegativePatternsRe(i);return o=>this._filter(e,o,n,s)}_getMatcher(e){return new vQe.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let t=e.filter(hw.pattern.isAffectDepthOfReadingPattern);return hw.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,i,n){let s=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(s)||this._isSkippedSymbolicLink(t))return!1;let o=hw.path.removeLeadingDotSegment(t.path);return this._isSkippedByPositivePatterns(o,i)?!1:this._isSkippedByNegativePatterns(o,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){let i=e.split(\"/\").length;return t.split(\"/\").length-(e===\"\"?0:i)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!hw.pattern.matchAny(e,t)}};iD.default=rD});var T4=w(sD=>{\"use strict\";Object.defineProperty(sD,\"__esModule\",{value:!0});var Zd=Ma(),nD=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){let i=Zd.pattern.convertPatternsToRe(e,this._micromatchOptions),n=Zd.pattern.convertPatternsToRe(t,this._micromatchOptions);return s=>this._filter(s,i,n)}_filter(e,t,i){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e,i))return!1;let n=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(n,t)&&!this._isMatchToPatterns(e.path,i)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;let i=Zd.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(i,t)}_isMatchToPatterns(e,t){let i=Zd.path.removeLeadingDotSegment(e);return Zd.pattern.matchAny(i,t)}};sD.default=nD});var L4=w(aD=>{\"use strict\";Object.defineProperty(aD,\"__esModule\",{value:!0});var xQe=Ma(),oD=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return xQe.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};aD.default=oD});var O4=w(lD=>{\"use strict\";Object.defineProperty(lD,\"__esModule\",{value:!0});var M4=Ma(),AD=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=M4.path.makeAbsolute(this._settings.cwd,t),t=M4.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+=\"/\"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}};lD.default=AD});var pw=w(uD=>{\"use strict\";Object.defineProperty(uD,\"__esModule\",{value:!0});var PQe=J(\"path\"),DQe=N4(),kQe=T4(),RQe=L4(),FQe=O4(),cD=class{constructor(e){this._settings=e,this.errorFilter=new RQe.default(this._settings),this.entryFilter=new kQe.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new DQe.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new FQe.default(this._settings)}_getRootDirectory(e){return PQe.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let t=e.base===\".\"?\"\":e.base;return{basePath:t,pathSegmentSeparator:\"/\",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};uD.default=cD});var K4=w(fD=>{\"use strict\";Object.defineProperty(fD,\"__esModule\",{value:!0});var NQe=ZP(),TQe=pw(),gD=class extends TQe.default{constructor(){super(...arguments),this._reader=new NQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=[];return new Promise((s,o)=>{let a=this.api(t,e,i);a.once(\"error\",o),a.on(\"data\",l=>n.push(i.transform(l))),a.once(\"end\",()=>s(n))})}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};fD.default=gD});var U4=w(pD=>{\"use strict\";Object.defineProperty(pD,\"__esModule\",{value:!0});var LQe=J(\"stream\"),MQe=ZP(),OQe=pw(),hD=class extends OQe.default{constructor(){super(...arguments),this._reader=new MQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e),n=this.api(t,e,i),s=new LQe.Readable({objectMode:!0,read:()=>{}});return n.once(\"error\",o=>s.emit(\"error\",o)).on(\"data\",o=>s.emit(\"data\",i.transform(o))).once(\"end\",()=>s.emit(\"end\")),s.once(\"close\",()=>n.destroy()),s}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};pD.default=hD});var H4=w(CD=>{\"use strict\";Object.defineProperty(CD,\"__esModule\",{value:!0});var KQe=Qc(),UQe=qP(),HQe=zP(),dD=class extends HQe.default{constructor(){super(...arguments),this._walkSync=UQe.walkSync,this._statSync=KQe.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){let i=[];for(let n of e){let s=this._getFullEntryPath(n),o=this._getEntry(s,n,t);o===null||!t.entryFilter(o)||i.push(o)}return i}_getEntry(e,t,i){try{let n=this._getStat(e);return this._makeEntry(n,t)}catch(n){if(i.errorFilter(n))return null;throw n}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};CD.default=dD});var G4=w(ED=>{\"use strict\";Object.defineProperty(ED,\"__esModule\",{value:!0});var GQe=H4(),YQe=pw(),mD=class extends YQe.default{constructor(){super(...arguments),this._reader=new GQe.default(this._settings)}read(e){let t=this._getRootDirectory(e),i=this._getReaderOptions(e);return this.api(t,e,i).map(i.transform)}api(e,t,i){return t.dynamic?this._reader.dynamic(e,i):this._reader.static(t.patterns,i)}};ED.default=mD});var Y4=w(_d=>{\"use strict\";Object.defineProperty(_d,\"__esModule\",{value:!0});var bf=J(\"fs\"),jQe=J(\"os\"),qQe=jQe.cpus().length;_d.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:bf.lstat,lstatSync:bf.lstatSync,stat:bf.stat,statSync:bf.statSync,readdir:bf.readdir,readdirSync:bf.readdirSync};var ID=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,qQe),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return e===void 0?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},_d.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};_d.default=ID});var dw=w((Frt,q4)=>{\"use strict\";var j4=V3(),JQe=K4(),WQe=U4(),zQe=G4(),yD=Y4(),Sc=Ma();async function wD(r,e){Qf(r);let t=BD(r,JQe.default,e),i=await Promise.all(t);return Sc.array.flatten(i)}(function(r){function e(o,a){Qf(o);let l=BD(o,zQe.default,a);return Sc.array.flatten(l)}r.sync=e;function t(o,a){Qf(o);let l=BD(o,WQe.default,a);return Sc.stream.merge(l)}r.stream=t;function i(o,a){Qf(o);let l=[].concat(o),c=new yD.default(a);return j4.generate(l,c)}r.generateTasks=i;function n(o,a){Qf(o);let l=new yD.default(a);return Sc.pattern.isDynamicPattern(o,l)}r.isDynamicPattern=n;function s(o){return Qf(o),Sc.path.escape(o)}r.escapePath=s})(wD||(wD={}));function BD(r,e,t){let i=[].concat(r),n=new yD.default(t),s=j4.generate(i,n),o=new e(n);return s.map(o.read,o)}function Qf(r){if(![].concat(r).every(i=>Sc.string.isString(i)&&!Sc.string.isEmpty(i)))throw new TypeError(\"Patterns must be a string (non empty) or an array of strings\")}q4.exports=wD});var W4=w(vc=>{\"use strict\";var{promisify:VQe}=J(\"util\"),J4=J(\"fs\");async function bD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return(await VQe(J4[r])(t))[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}function QD(r,e,t){if(typeof t!=\"string\")throw new TypeError(`Expected a string, got ${typeof t}`);try{return J4[r](t)[e]()}catch(i){if(i.code===\"ENOENT\")return!1;throw i}}vc.isFile=bD.bind(null,\"stat\",\"isFile\");vc.isDirectory=bD.bind(null,\"stat\",\"isDirectory\");vc.isSymlink=bD.bind(null,\"lstat\",\"isSymbolicLink\");vc.isFileSync=QD.bind(null,\"statSync\",\"isFile\");vc.isDirectorySync=QD.bind(null,\"statSync\",\"isDirectory\");vc.isSymlinkSync=QD.bind(null,\"lstatSync\",\"isSymbolicLink\")});var _4=w((Trt,SD)=>{\"use strict\";var xc=J(\"path\"),z4=W4(),V4=r=>r.length>1?`{${r.join(\",\")}}`:r[0],X4=(r,e)=>{let t=r[0]===\"!\"?r.slice(1):r;return xc.isAbsolute(t)?t:xc.join(e,t)},XQe=(r,e)=>xc.extname(r)?`**/${r}`:`**/${r}.${V4(e)}`,Z4=(r,e)=>{if(e.files&&!Array.isArray(e.files))throw new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof e.files}\\``);if(e.extensions&&!Array.isArray(e.extensions))throw new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof e.extensions}\\``);return e.files&&e.extensions?e.files.map(t=>xc.posix.join(r,XQe(t,e.extensions))):e.files?e.files.map(t=>xc.posix.join(r,`**/${t}`)):e.extensions?[xc.posix.join(r,`**/*.${V4(e.extensions)}`)]:[xc.posix.join(r,\"**\")]};SD.exports=async(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=await Promise.all([].concat(r).map(async i=>await z4.isDirectory(X4(i,e.cwd))?Z4(i,e):i));return[].concat.apply([],t)};SD.exports.sync=(r,e)=>{if(e={cwd:process.cwd(),...e},typeof e.cwd!=\"string\")throw new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof e.cwd}\\``);let t=[].concat(r).map(i=>z4.isDirectorySync(X4(i,e.cwd))?Z4(i,e):i);return[].concat.apply([],t)}});var o8=w((Lrt,s8)=>{function $4(r){return Array.isArray(r)?r:[r]}var i8=\"\",e8=\" \",vD=\"\\\\\",ZQe=/^\\s+$/,_Qe=/^\\\\!/,$Qe=/^\\\\#/,eSe=/\\r?\\n/g,tSe=/^\\.*\\/|^\\.+$/,xD=\"/\",t8=typeof Symbol<\"u\"?Symbol.for(\"node-ignore\"):\"node-ignore\",rSe=(r,e,t)=>Object.defineProperty(r,e,{value:t}),iSe=/([0-z])-([0-z])/g,nSe=r=>r.replace(iSe,(e,t,i)=>t.charCodeAt(0)<=i.charCodeAt(0)?e:i8),sSe=r=>{let{length:e}=r;return r.slice(0,e-e%2)},oSe=[[/\\\\?\\s+$/,r=>r.indexOf(\"\\\\\")===0?e8:i8],[/\\\\\\s/g,()=>e8],[/[\\\\$.|*+(){^]/g,r=>`\\\\${r}`],[/(?!\\\\)\\?/g,()=>\"[^/]\"],[/^\\//,()=>\"^\"],[/\\//g,()=>\"\\\\/\"],[/^\\^*\\\\\\*\\\\\\*\\\\\\//,()=>\"^(?:.*\\\\/)?\"],[/^(?=[^^])/,function(){return/\\/(?!$)/.test(this)?\"^\":\"(?:^|\\\\/)\"}],[/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,(r,e,t)=>e+6<t.length?\"(?:\\\\/[^\\\\/]+)*\":\"\\\\/.+\"],[/(^|[^\\\\]+)\\\\\\*(?=.+)/g,(r,e)=>`${e}[^\\\\/]*`],[/\\\\\\\\\\\\(?=[$.|*+(){^])/g,()=>vD],[/\\\\\\\\/g,()=>vD],[/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,(r,e,t,i,n)=>e===vD?`\\\\[${t}${sSe(i)}${n}`:n===\"]\"&&i.length%2===0?`[${nSe(t)}${i}]`:\"[]\"],[/(?:[^*])$/,r=>/\\/$/.test(r)?`${r}$`:`${r}(?=$|\\\\/$)`],[/(\\^|\\\\\\/)?\\\\\\*$/,(r,e)=>`${e?`${e}[^/]+`:\"[^/]*\"}(?=$|\\\\/$)`]],r8=Object.create(null),aSe=(r,e)=>{let t=r8[r];return t||(t=oSe.reduce((i,n)=>i.replace(n[0],n[1].bind(r)),r),r8[r]=t),e?new RegExp(t,\"i\"):new RegExp(t)},kD=r=>typeof r==\"string\",ASe=r=>r&&kD(r)&&!ZQe.test(r)&&r.indexOf(\"#\")!==0,lSe=r=>r.split(eSe),PD=class{constructor(e,t,i,n){this.origin=e,this.pattern=t,this.negative=i,this.regex=n}},cSe=(r,e)=>{let t=r,i=!1;r.indexOf(\"!\")===0&&(i=!0,r=r.substr(1)),r=r.replace(_Qe,\"!\").replace($Qe,\"#\");let n=aSe(r,e);return new PD(t,r,i,n)},uSe=(r,e)=>{throw new e(r)},Ka=(r,e,t)=>kD(r)?r?Ka.isNotRelative(r)?t(`path should be a \\`path.relative()\\`d string, but got \"${e}\"`,RangeError):!0:t(\"path must not be empty\",TypeError):t(`path must be a string, but got \\`${e}\\``,TypeError),n8=r=>tSe.test(r);Ka.isNotRelative=n8;Ka.convert=r=>r;var DD=class{constructor({ignorecase:e=!0}={}){rSe(this,t8,!0),this._rules=[],this._ignorecase=e,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[t8]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(ASe(e)){let t=cSe(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,$4(kD(e)?lSe(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:o}=s;if(n===o&&i!==n||o&&!i&&!n&&!t)return;s.regex.test(e)&&(i=!o,n=o)}),{ignored:i,unignored:n}}_test(e,t,i,n){let s=e&&Ka.convert(e);return Ka(s,e,uSe),this._t(s,t,i,n)}_t(e,t,i,n){if(e in t)return t[e];if(n||(n=e.split(xD)),n.pop(),!n.length)return t[e]=this._testOne(e,i);let s=this._t(n.join(xD)+xD,t,i,n);return t[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return $4(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Cw=r=>new DD(r),gSe=()=>!1,fSe=r=>Ka(r&&Ka.convert(r),r,gSe);Cw.isPathValid=fSe;Cw.default=Cw;s8.exports=Cw;if(typeof process<\"u\"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform===\"win32\")){let r=t=>/^\\\\\\\\\\?\\\\/.test(t)||/[\"<>|\\u0000-\\u001F]+/u.test(t)?t:t.replace(/\\\\/g,\"/\");Ka.convert=r;let e=/^[a-z]:\\//i;Ka.isNotRelative=t=>e.test(t)||n8(t)}});var A8=w((Mrt,a8)=>{\"use strict\";a8.exports=r=>{let e=/^\\\\\\\\\\?\\\\/.test(r),t=/[^\\u0000-\\u0080]+/.test(r);return e||t?r:r.replace(/\\\\/g,\"/\")}});var p8=w((Ort,RD)=>{\"use strict\";var{promisify:hSe}=J(\"util\"),l8=J(\"fs\"),Ua=J(\"path\"),c8=dw(),pSe=o8(),$d=A8(),u8=[\"**/node_modules/**\",\"**/flow-typed/**\",\"**/coverage/**\",\"**/.git\"],dSe=hSe(l8.readFile),CSe=r=>e=>e.startsWith(\"!\")?\"!\"+Ua.posix.join(r,e.slice(1)):Ua.posix.join(r,e),mSe=(r,e)=>{let t=$d(Ua.relative(e.cwd,Ua.dirname(e.fileName)));return r.split(/\\r?\\n/).filter(Boolean).filter(i=>!i.startsWith(\"#\")).map(CSe(t))},g8=r=>{let e=pSe();for(let t of r)e.add(mSe(t.content,{cwd:t.cwd,fileName:t.filePath}));return e},ESe=(r,e)=>{if(r=$d(r),Ua.isAbsolute(e)){if($d(e).startsWith(r))return e;throw new Error(`Path ${e} is not in cwd ${r}`)}return Ua.join(r,e)},f8=(r,e)=>t=>r.ignores($d(Ua.relative(e,ESe(e,t.path||t)))),ISe=async(r,e)=>{let t=Ua.join(e,r),i=await dSe(t,\"utf8\");return{cwd:e,filePath:t,content:i}},ySe=(r,e)=>{let t=Ua.join(e,r),i=l8.readFileSync(t,\"utf8\");return{cwd:e,filePath:t,content:i}},h8=({ignore:r=[],cwd:e=$d(process.cwd())}={})=>({ignore:r,cwd:e});RD.exports=async r=>{r=h8(r);let e=await c8(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}),t=await Promise.all(e.map(n=>ISe(n,r.cwd))),i=g8(t);return f8(i,r.cwd)};RD.exports.sync=r=>{r=h8(r);let t=c8.sync(\"**/.gitignore\",{ignore:u8.concat(r.ignore),cwd:r.cwd}).map(n=>ySe(n,r.cwd)),i=g8(t);return f8(i,r.cwd)}});var C8=w((Krt,d8)=>{\"use strict\";var{Transform:wSe}=J(\"stream\"),mw=class extends wSe{constructor(){super({objectMode:!0})}},FD=class extends mw{constructor(e){super(),this._filter=e}_transform(e,t,i){this._filter(e)&&this.push(e),i()}},ND=class extends mw{constructor(){super(),this._pushed=new Set}_transform(e,t,i){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),i()}};d8.exports={FilterStream:FD,UniqueStream:ND}});var OD=w((Urt,Pc)=>{\"use strict\";var E8=J(\"fs\"),Ew=m3(),BSe=sP(),Iw=dw(),yw=_4(),TD=p8(),{FilterStream:bSe,UniqueStream:QSe}=C8(),I8=()=>!1,m8=r=>r[0]===\"!\",SSe=r=>{if(!r.every(e=>typeof e==\"string\"))throw new TypeError(\"Patterns must be a string or an array of strings\")},vSe=(r={})=>{if(!r.cwd)return;let e;try{e=E8.statSync(r.cwd)}catch{return}if(!e.isDirectory())throw new Error(\"The `cwd` option must be a path to a directory\")},xSe=r=>r.stats instanceof E8.Stats?r.path:r,ww=(r,e)=>{r=Ew([].concat(r)),SSe(r),vSe(e);let t=[];e={ignore:[],expandDirectories:!0,...e};for(let[i,n]of r.entries()){if(m8(n))continue;let s=r.slice(i).filter(a=>m8(a)).map(a=>a.slice(1)),o={...e,ignore:e.ignore.concat(s)};t.push({pattern:n,options:o})}return t},PSe=(r,e)=>{let t={};return r.options.cwd&&(t.cwd=r.options.cwd),Array.isArray(r.options.expandDirectories)?t={...t,files:r.options.expandDirectories}:typeof r.options.expandDirectories==\"object\"&&(t={...t,...r.options.expandDirectories}),e(r.pattern,t)},LD=(r,e)=>r.options.expandDirectories?PSe(r,e):[r.pattern],y8=r=>r&&r.gitignore?TD.sync({cwd:r.cwd,ignore:r.ignore}):I8,MD=r=>e=>{let{options:t}=r;return t.ignore&&Array.isArray(t.ignore)&&t.expandDirectories&&(t.ignore=yw.sync(t.ignore)),{pattern:e,options:t}};Pc.exports=async(r,e)=>{let t=ww(r,e),i=async()=>e&&e.gitignore?TD({cwd:e.cwd,ignore:e.ignore}):I8,n=async()=>{let l=await Promise.all(t.map(async c=>{let u=await LD(c,yw);return Promise.all(u.map(MD(c)))}));return Ew(...l)},[s,o]=await Promise.all([i(),n()]),a=await Promise.all(o.map(l=>Iw(l.pattern,l.options)));return Ew(...a).filter(l=>!s(xSe(l)))};Pc.exports.sync=(r,e)=>{let t=ww(r,e),i=[];for(let o of t){let a=LD(o,yw.sync).map(MD(o));i.push(...a)}let n=y8(e),s=[];for(let o of i)s=Ew(s,Iw.sync(o.pattern,o.options));return s.filter(o=>!n(o))};Pc.exports.stream=(r,e)=>{let t=ww(r,e),i=[];for(let a of t){let l=LD(a,yw.sync).map(MD(a));i.push(...l)}let n=y8(e),s=new bSe(a=>!n(a)),o=new QSe;return BSe(i.map(a=>Iw.stream(a.pattern,a.options))).pipe(s).pipe(o)};Pc.exports.generateGlobTasks=ww;Pc.exports.hasMagic=(r,e)=>[].concat(r).some(t=>Iw.isDynamicPattern(t,e));Pc.exports.gitignore=TD});var vn=w((iit,L8)=>{function GSe(r){var e=typeof r;return r!=null&&(e==\"object\"||e==\"function\")}L8.exports=GSe});var WD=w((nit,M8)=>{var YSe=typeof global==\"object\"&&global&&global.Object===Object&&global;M8.exports=YSe});var ys=w((sit,O8)=>{var jSe=WD(),qSe=typeof self==\"object\"&&self&&self.Object===Object&&self,JSe=jSe||qSe||Function(\"return this\")();O8.exports=JSe});var U8=w((oit,K8)=>{var WSe=ys(),zSe=function(){return WSe.Date.now()};K8.exports=zSe});var G8=w((ait,H8)=>{var VSe=/\\s/;function XSe(r){for(var e=r.length;e--&&VSe.test(r.charAt(e)););return e}H8.exports=XSe});var j8=w((Ait,Y8)=>{var ZSe=G8(),_Se=/^\\s+/;function $Se(r){return r&&r.slice(0,ZSe(r)+1).replace(_Se,\"\")}Y8.exports=$Se});var Rc=w((lit,q8)=>{var eve=ys(),tve=eve.Symbol;q8.exports=tve});var V8=w((cit,z8)=>{var J8=Rc(),W8=Object.prototype,rve=W8.hasOwnProperty,ive=W8.toString,uC=J8?J8.toStringTag:void 0;function nve(r){var e=rve.call(r,uC),t=r[uC];try{r[uC]=void 0;var i=!0}catch{}var n=ive.call(r);return i&&(e?r[uC]=t:delete r[uC]),n}z8.exports=nve});var Z8=w((uit,X8)=>{var sve=Object.prototype,ove=sve.toString;function ave(r){return ove.call(r)}X8.exports=ave});var Fc=w((git,ez)=>{var _8=Rc(),Ave=V8(),lve=Z8(),cve=\"[object Null]\",uve=\"[object Undefined]\",$8=_8?_8.toStringTag:void 0;function gve(r){return r==null?r===void 0?uve:cve:$8&&$8 in Object(r)?Ave(r):lve(r)}ez.exports=gve});var Wo=w((fit,tz)=>{function fve(r){return r!=null&&typeof r==\"object\"}tz.exports=fve});var gC=w((hit,rz)=>{var hve=Fc(),pve=Wo(),dve=\"[object Symbol]\";function Cve(r){return typeof r==\"symbol\"||pve(r)&&hve(r)==dve}rz.exports=Cve});var oz=w((pit,sz)=>{var mve=j8(),iz=vn(),Eve=gC(),nz=0/0,Ive=/^[-+]0x[0-9a-f]+$/i,yve=/^0b[01]+$/i,wve=/^0o[0-7]+$/i,Bve=parseInt;function bve(r){if(typeof r==\"number\")return r;if(Eve(r))return nz;if(iz(r)){var e=typeof r.valueOf==\"function\"?r.valueOf():r;r=iz(e)?e+\"\":e}if(typeof r!=\"string\")return r===0?r:+r;r=mve(r);var t=yve.test(r);return t||wve.test(r)?Bve(r.slice(2),t?2:8):Ive.test(r)?nz:+r}sz.exports=bve});var lz=w((dit,Az)=>{var Qve=vn(),zD=U8(),az=oz(),Sve=\"Expected a function\",vve=Math.max,xve=Math.min;function Pve(r,e,t){var i,n,s,o,a,l,c=0,u=!1,g=!1,f=!0;if(typeof r!=\"function\")throw new TypeError(Sve);e=az(e)||0,Qve(t)&&(u=!!t.leading,g=\"maxWait\"in t,s=g?vve(az(t.maxWait)||0,e):s,f=\"trailing\"in t?!!t.trailing:f);function h(j){var $=i,V=n;return i=n=void 0,c=j,o=r.apply(V,$),o}function p(j){return c=j,a=setTimeout(B,e),u?h(j):o}function C(j){var $=j-l,V=j-c,W=e-$;return g?xve(W,s-V):W}function y(j){var $=j-l,V=j-c;return l===void 0||$>=e||$<0||g&&V>=s}function B(){var j=zD();if(y(j))return v(j);a=setTimeout(B,C(j))}function v(j){return a=void 0,f&&i?h(j):(i=n=void 0,o)}function D(){a!==void 0&&clearTimeout(a),c=0,i=l=n=a=void 0}function T(){return a===void 0?o:v(zD())}function H(){var j=zD(),$=y(j);if(i=arguments,n=this,l=j,$){if(a===void 0)return p(l);if(g)return clearTimeout(a),a=setTimeout(B,e),h(l)}return a===void 0&&(a=setTimeout(B,e)),o}return H.cancel=D,H.flush=T,H}Az.exports=Pve});var uz=w((Cit,cz)=>{var Dve=lz(),kve=vn(),Rve=\"Expected a function\";function Fve(r,e,t){var i=!0,n=!0;if(typeof r!=\"function\")throw new TypeError(Rve);return kve(t)&&(i=\"leading\"in t?!!t.leading:i,n=\"trailing\"in t?!!t.trailing:n),Dve(r,e,{leading:i,maxWait:e,trailing:n})}cz.exports=Fve});var Ya=w((Ga,jw)=>{\"use strict\";Object.defineProperty(Ga,\"__esModule\",{value:!0});var Iz=[\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\",\"BigInt64Array\",\"BigUint64Array\"];function Jve(r){return Iz.includes(r)}var Wve=[\"Function\",\"Generator\",\"AsyncGenerator\",\"GeneratorFunction\",\"AsyncGeneratorFunction\",\"AsyncFunction\",\"Observable\",\"Array\",\"Buffer\",\"Object\",\"RegExp\",\"Date\",\"Error\",\"Map\",\"Set\",\"WeakMap\",\"WeakSet\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"DataView\",\"Promise\",\"URL\",\"FormData\",\"URLSearchParams\",\"HTMLElement\",...Iz];function zve(r){return Wve.includes(r)}var Vve=[\"null\",\"undefined\",\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\"];function Xve(r){return Vve.includes(r)}function Lf(r){return e=>typeof e===r}var{toString:yz}=Object.prototype,CC=r=>{let e=yz.call(r).slice(8,-1);if(/HTML\\w+Element/.test(e)&&X.domElement(r))return\"HTMLElement\";if(zve(e))return e},lr=r=>e=>CC(e)===r;function X(r){if(r===null)return\"null\";switch(typeof r){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"Function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";default:}if(X.observable(r))return\"Observable\";if(X.array(r))return\"Array\";if(X.buffer(r))return\"Buffer\";let e=CC(r);if(e)return e;if(r instanceof String||r instanceof Boolean||r instanceof Number)throw new TypeError(\"Please don't use object wrappers for primitive types\");return\"Object\"}X.undefined=Lf(\"undefined\");X.string=Lf(\"string\");var Zve=Lf(\"number\");X.number=r=>Zve(r)&&!X.nan(r);X.bigint=Lf(\"bigint\");X.function_=Lf(\"function\");X.null_=r=>r===null;X.class_=r=>X.function_(r)&&r.toString().startsWith(\"class \");X.boolean=r=>r===!0||r===!1;X.symbol=Lf(\"symbol\");X.numericString=r=>X.string(r)&&!X.emptyStringOrWhitespace(r)&&!Number.isNaN(Number(r));X.array=(r,e)=>Array.isArray(r)?X.function_(e)?r.every(e):!0:!1;X.buffer=r=>{var e,t,i,n;return(n=(i=(t=(e=r)===null||e===void 0?void 0:e.constructor)===null||t===void 0?void 0:t.isBuffer)===null||i===void 0?void 0:i.call(t,r))!==null&&n!==void 0?n:!1};X.nullOrUndefined=r=>X.null_(r)||X.undefined(r);X.object=r=>!X.null_(r)&&(typeof r==\"object\"||X.function_(r));X.iterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.iterator])};X.asyncIterable=r=>{var e;return X.function_((e=r)===null||e===void 0?void 0:e[Symbol.asyncIterator])};X.generator=r=>X.iterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.asyncGenerator=r=>X.asyncIterable(r)&&X.function_(r.next)&&X.function_(r.throw);X.nativePromise=r=>lr(\"Promise\")(r);var _ve=r=>{var e,t;return X.function_((e=r)===null||e===void 0?void 0:e.then)&&X.function_((t=r)===null||t===void 0?void 0:t.catch)};X.promise=r=>X.nativePromise(r)||_ve(r);X.generatorFunction=lr(\"GeneratorFunction\");X.asyncGeneratorFunction=r=>CC(r)===\"AsyncGeneratorFunction\";X.asyncFunction=r=>CC(r)===\"AsyncFunction\";X.boundFunction=r=>X.function_(r)&&!r.hasOwnProperty(\"prototype\");X.regExp=lr(\"RegExp\");X.date=lr(\"Date\");X.error=lr(\"Error\");X.map=r=>lr(\"Map\")(r);X.set=r=>lr(\"Set\")(r);X.weakMap=r=>lr(\"WeakMap\")(r);X.weakSet=r=>lr(\"WeakSet\")(r);X.int8Array=lr(\"Int8Array\");X.uint8Array=lr(\"Uint8Array\");X.uint8ClampedArray=lr(\"Uint8ClampedArray\");X.int16Array=lr(\"Int16Array\");X.uint16Array=lr(\"Uint16Array\");X.int32Array=lr(\"Int32Array\");X.uint32Array=lr(\"Uint32Array\");X.float32Array=lr(\"Float32Array\");X.float64Array=lr(\"Float64Array\");X.bigInt64Array=lr(\"BigInt64Array\");X.bigUint64Array=lr(\"BigUint64Array\");X.arrayBuffer=lr(\"ArrayBuffer\");X.sharedArrayBuffer=lr(\"SharedArrayBuffer\");X.dataView=lr(\"DataView\");X.directInstanceOf=(r,e)=>Object.getPrototypeOf(r)===e.prototype;X.urlInstance=r=>lr(\"URL\")(r);X.urlString=r=>{if(!X.string(r))return!1;try{return new URL(r),!0}catch{return!1}};X.truthy=r=>Boolean(r);X.falsy=r=>!r;X.nan=r=>Number.isNaN(r);X.primitive=r=>X.null_(r)||Xve(typeof r);X.integer=r=>Number.isInteger(r);X.safeInteger=r=>Number.isSafeInteger(r);X.plainObject=r=>{if(yz.call(r)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.getPrototypeOf({})};X.typedArray=r=>Jve(CC(r));var $ve=r=>X.safeInteger(r)&&r>=0;X.arrayLike=r=>!X.nullOrUndefined(r)&&!X.function_(r)&&$ve(r.length);X.inRange=(r,e)=>{if(X.number(e))return r>=Math.min(0,e)&&r<=Math.max(e,0);if(X.array(e)&&e.length===2)return r>=Math.min(...e)&&r<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var exe=1,txe=[\"innerHTML\",\"ownerDocument\",\"style\",\"attributes\",\"nodeValue\"];X.domElement=r=>X.object(r)&&r.nodeType===exe&&X.string(r.nodeName)&&!X.plainObject(r)&&txe.every(e=>e in r);X.observable=r=>{var e,t,i,n;return r?r===((t=(e=r)[Symbol.observable])===null||t===void 0?void 0:t.call(e))||r===((n=(i=r)[\"@@observable\"])===null||n===void 0?void 0:n.call(i)):!1};X.nodeStream=r=>X.object(r)&&X.function_(r.pipe)&&!X.observable(r);X.infinite=r=>r===1/0||r===-1/0;var wz=r=>e=>X.integer(e)&&Math.abs(e%2)===r;X.evenInteger=wz(0);X.oddInteger=wz(1);X.emptyArray=r=>X.array(r)&&r.length===0;X.nonEmptyArray=r=>X.array(r)&&r.length>0;X.emptyString=r=>X.string(r)&&r.length===0;X.nonEmptyString=r=>X.string(r)&&r.length>0;var rxe=r=>X.string(r)&&!/\\S/.test(r);X.emptyStringOrWhitespace=r=>X.emptyString(r)||rxe(r);X.emptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length===0;X.nonEmptyObject=r=>X.object(r)&&!X.map(r)&&!X.set(r)&&Object.keys(r).length>0;X.emptySet=r=>X.set(r)&&r.size===0;X.nonEmptySet=r=>X.set(r)&&r.size>0;X.emptyMap=r=>X.map(r)&&r.size===0;X.nonEmptyMap=r=>X.map(r)&&r.size>0;X.propertyKey=r=>X.any([X.string,X.number,X.symbol],r);X.formData=r=>lr(\"FormData\")(r);X.urlSearchParams=r=>lr(\"URLSearchParams\")(r);var Bz=(r,e,t)=>{if(!X.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(t.length===0)throw new TypeError(\"Invalid number of values\");return r.call(t,e)};X.any=(r,...e)=>(X.array(r)?r:[r]).some(i=>Bz(Array.prototype.some,i,e));X.all=(r,...e)=>Bz(Array.prototype.every,r,e);var Ye=(r,e,t,i={})=>{if(!r){let{multipleValues:n}=i,s=n?`received values of types ${[...new Set(t.map(o=>`\\`${X(o)}\\``))].join(\", \")}`:`received value of type \\`${X(t)}\\``;throw new TypeError(`Expected value which is \\`${e}\\`, ${s}.`)}};Ga.assert={undefined:r=>Ye(X.undefined(r),\"undefined\",r),string:r=>Ye(X.string(r),\"string\",r),number:r=>Ye(X.number(r),\"number\",r),bigint:r=>Ye(X.bigint(r),\"bigint\",r),function_:r=>Ye(X.function_(r),\"Function\",r),null_:r=>Ye(X.null_(r),\"null\",r),class_:r=>Ye(X.class_(r),\"Class\",r),boolean:r=>Ye(X.boolean(r),\"boolean\",r),symbol:r=>Ye(X.symbol(r),\"symbol\",r),numericString:r=>Ye(X.numericString(r),\"string with a number\",r),array:(r,e)=>{Ye(X.array(r),\"Array\",r),e&&r.forEach(e)},buffer:r=>Ye(X.buffer(r),\"Buffer\",r),nullOrUndefined:r=>Ye(X.nullOrUndefined(r),\"null or undefined\",r),object:r=>Ye(X.object(r),\"Object\",r),iterable:r=>Ye(X.iterable(r),\"Iterable\",r),asyncIterable:r=>Ye(X.asyncIterable(r),\"AsyncIterable\",r),generator:r=>Ye(X.generator(r),\"Generator\",r),asyncGenerator:r=>Ye(X.asyncGenerator(r),\"AsyncGenerator\",r),nativePromise:r=>Ye(X.nativePromise(r),\"native Promise\",r),promise:r=>Ye(X.promise(r),\"Promise\",r),generatorFunction:r=>Ye(X.generatorFunction(r),\"GeneratorFunction\",r),asyncGeneratorFunction:r=>Ye(X.asyncGeneratorFunction(r),\"AsyncGeneratorFunction\",r),asyncFunction:r=>Ye(X.asyncFunction(r),\"AsyncFunction\",r),boundFunction:r=>Ye(X.boundFunction(r),\"Function\",r),regExp:r=>Ye(X.regExp(r),\"RegExp\",r),date:r=>Ye(X.date(r),\"Date\",r),error:r=>Ye(X.error(r),\"Error\",r),map:r=>Ye(X.map(r),\"Map\",r),set:r=>Ye(X.set(r),\"Set\",r),weakMap:r=>Ye(X.weakMap(r),\"WeakMap\",r),weakSet:r=>Ye(X.weakSet(r),\"WeakSet\",r),int8Array:r=>Ye(X.int8Array(r),\"Int8Array\",r),uint8Array:r=>Ye(X.uint8Array(r),\"Uint8Array\",r),uint8ClampedArray:r=>Ye(X.uint8ClampedArray(r),\"Uint8ClampedArray\",r),int16Array:r=>Ye(X.int16Array(r),\"Int16Array\",r),uint16Array:r=>Ye(X.uint16Array(r),\"Uint16Array\",r),int32Array:r=>Ye(X.int32Array(r),\"Int32Array\",r),uint32Array:r=>Ye(X.uint32Array(r),\"Uint32Array\",r),float32Array:r=>Ye(X.float32Array(r),\"Float32Array\",r),float64Array:r=>Ye(X.float64Array(r),\"Float64Array\",r),bigInt64Array:r=>Ye(X.bigInt64Array(r),\"BigInt64Array\",r),bigUint64Array:r=>Ye(X.bigUint64Array(r),\"BigUint64Array\",r),arrayBuffer:r=>Ye(X.arrayBuffer(r),\"ArrayBuffer\",r),sharedArrayBuffer:r=>Ye(X.sharedArrayBuffer(r),\"SharedArrayBuffer\",r),dataView:r=>Ye(X.dataView(r),\"DataView\",r),urlInstance:r=>Ye(X.urlInstance(r),\"URL\",r),urlString:r=>Ye(X.urlString(r),\"string with a URL\",r),truthy:r=>Ye(X.truthy(r),\"truthy\",r),falsy:r=>Ye(X.falsy(r),\"falsy\",r),nan:r=>Ye(X.nan(r),\"NaN\",r),primitive:r=>Ye(X.primitive(r),\"primitive\",r),integer:r=>Ye(X.integer(r),\"integer\",r),safeInteger:r=>Ye(X.safeInteger(r),\"integer\",r),plainObject:r=>Ye(X.plainObject(r),\"plain object\",r),typedArray:r=>Ye(X.typedArray(r),\"TypedArray\",r),arrayLike:r=>Ye(X.arrayLike(r),\"array-like\",r),domElement:r=>Ye(X.domElement(r),\"HTMLElement\",r),observable:r=>Ye(X.observable(r),\"Observable\",r),nodeStream:r=>Ye(X.nodeStream(r),\"Node.js Stream\",r),infinite:r=>Ye(X.infinite(r),\"infinite number\",r),emptyArray:r=>Ye(X.emptyArray(r),\"empty array\",r),nonEmptyArray:r=>Ye(X.nonEmptyArray(r),\"non-empty array\",r),emptyString:r=>Ye(X.emptyString(r),\"empty string\",r),nonEmptyString:r=>Ye(X.nonEmptyString(r),\"non-empty string\",r),emptyStringOrWhitespace:r=>Ye(X.emptyStringOrWhitespace(r),\"empty string or whitespace\",r),emptyObject:r=>Ye(X.emptyObject(r),\"empty object\",r),nonEmptyObject:r=>Ye(X.nonEmptyObject(r),\"non-empty object\",r),emptySet:r=>Ye(X.emptySet(r),\"empty set\",r),nonEmptySet:r=>Ye(X.nonEmptySet(r),\"non-empty set\",r),emptyMap:r=>Ye(X.emptyMap(r),\"empty map\",r),nonEmptyMap:r=>Ye(X.nonEmptyMap(r),\"non-empty map\",r),propertyKey:r=>Ye(X.propertyKey(r),\"PropertyKey\",r),formData:r=>Ye(X.formData(r),\"FormData\",r),urlSearchParams:r=>Ye(X.urlSearchParams(r),\"URLSearchParams\",r),evenInteger:r=>Ye(X.evenInteger(r),\"even integer\",r),oddInteger:r=>Ye(X.oddInteger(r),\"odd integer\",r),directInstanceOf:(r,e)=>Ye(X.directInstanceOf(r,e),\"T\",r),inRange:(r,e)=>Ye(X.inRange(r,e),\"in range\",r),any:(r,...e)=>Ye(X.any(r,...e),\"predicate returns truthy for any value\",e,{multipleValues:!0}),all:(r,...e)=>Ye(X.all(r,...e),\"predicate returns truthy for all values\",e,{multipleValues:!0})};Object.defineProperties(X,{class:{value:X.class_},function:{value:X.function_},null:{value:X.null_}});Object.defineProperties(Ga.assert,{class:{value:Ga.assert.class_},function:{value:Ga.assert.function_},null:{value:Ga.assert.null_}});Ga.default=X;jw.exports=X;jw.exports.default=X;jw.exports.assert=Ga.assert});var bz=w((rnt,dk)=>{\"use strict\";var qw=class extends Error{constructor(e){super(e||\"Promise was canceled\"),this.name=\"CancelError\"}get isCanceled(){return!0}},Mf=class{static fn(e){return(...t)=>new Mf((i,n,s)=>{t.push(s),e(...t).then(i,n)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,i)=>{this._reject=i;let n=a=>{this._isPending=!1,t(a)},s=a=>{this._isPending=!1,i(a)},o=a=>{if(!this._isPending)throw new Error(\"The `onCancel` handler was attached after the promise settled.\");this._cancelHandlers.push(a)};return Object.defineProperties(o,{shouldReject:{get:()=>this._rejectOnCancel,set:a=>{this._rejectOnCancel=a}}}),e(n,s,o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let t of this._cancelHandlers)t()}catch(t){this._reject(t)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new qw(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Mf.prototype,Promise.prototype);dk.exports=Mf;dk.exports.CancelError=qw});var Qz=w((mk,Ek)=>{\"use strict\";Object.defineProperty(mk,\"__esModule\",{value:!0});var ixe=J(\"tls\"),Ck=(r,e)=>{let t;typeof e==\"function\"?t={connect:e}:t=e;let i=typeof t.connect==\"function\",n=typeof t.secureConnect==\"function\",s=typeof t.close==\"function\",o=()=>{i&&t.connect(),r instanceof ixe.TLSSocket&&n&&(r.authorized?t.secureConnect():r.authorizationError||r.once(\"secureConnect\",t.secureConnect)),s&&r.once(\"close\",t.close)};r.writable&&!r.connecting?o():r.connecting?r.once(\"connect\",o):r.destroyed&&s&&t.close(r._hadError)};mk.default=Ck;Ek.exports=Ck;Ek.exports.default=Ck});var Sz=w((yk,wk)=>{\"use strict\";Object.defineProperty(yk,\"__esModule\",{value:!0});var nxe=Qz(),sxe=Number(process.versions.node.split(\".\")[0]),Ik=r=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};r.timings=e;let t=o=>{let a=o.emit.bind(o);o.emit=(l,...c)=>(l===\"error\"&&(e.error=Date.now(),e.phases.total=e.error-e.start,o.emit=a),a(l,...c))};t(r),r.prependOnceListener(\"abort\",()=>{e.abort=Date.now(),(!e.response||sxe>=13)&&(e.phases.total=Date.now()-e.start)});let i=o=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let a=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};o.prependOnceListener(\"lookup\",a),nxe.default(o,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(o.removeListener(\"lookup\",a),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};r.socket?i(r.socket):r.prependOnceListener(\"socket\",i);let n=()=>{var o;e.upload=Date.now(),e.phases.request=e.upload-(o=e.secureConnect,o!=null?o:e.connect)};return(()=>typeof r.writableFinished==\"boolean\"?r.writableFinished:r.finished&&r.outputSize===0&&(!r.socket||r.socket.writableLength===0))()?n():r.prependOnceListener(\"finish\",n),r.prependOnceListener(\"response\",o=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,o.timings=e,t(o),o.prependOnceListener(\"end\",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};yk.default=Ik;wk.exports=Ik;wk.exports.default=Ik});var Fz=w((int,Qk)=>{\"use strict\";var{V4MAPPED:oxe,ADDRCONFIG:axe,ALL:Rz,promises:{Resolver:vz},lookup:Axe}=J(\"dns\"),{promisify:Bk}=J(\"util\"),lxe=J(\"os\"),Of=Symbol(\"cacheableLookupCreateConnection\"),bk=Symbol(\"cacheableLookupInstance\"),xz=Symbol(\"expires\"),cxe=typeof Rz==\"number\",Pz=r=>{if(!(r&&typeof r.createConnection==\"function\"))throw new Error(\"Expected an Agent instance as the first argument\")},uxe=r=>{for(let e of r)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Dz=()=>{let r=!1,e=!1;for(let t of Object.values(lxe.networkInterfaces()))for(let i of t)if(!i.internal&&(i.family===\"IPv6\"?e=!0:r=!0,r&&e))return{has4:r,has6:e};return{has4:r,has6:e}},gxe=r=>Symbol.iterator in r,kz={ttl:!0},fxe={all:!0},Jw=class{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:i=3600,errorTtl:n=.15,resolver:s=new vz,lookup:o=Axe}={}){if(this.maxTtl=t,this.errorTtl=n,this._cache=e,this._resolver=s,this._dnsLookup=Bk(o),this._resolver instanceof vz?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=Bk(this._resolver.resolve4.bind(this._resolver)),this._resolve6=Bk(this._resolver.resolve6.bind(this._resolver))),this._iface=Dz(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,i<1)this._fallback=!1;else{this._fallback=!0;let a=setInterval(()=>{this._hostnamesToFallback.clear()},i*1e3);a.unref&&a.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,i){if(typeof t==\"function\"?(i=t,t={}):typeof t==\"number\"&&(t={family:t}),!i)throw new Error(\"Callback must be a function.\");this.lookupAsync(e,t).then(n=>{t.all?i(null,n):i(null,n.address,n.family,n.expires,n.ttl)},i)}async lookupAsync(e,t={}){typeof t==\"number\"&&(t={family:t});let i=await this.query(e);if(t.family===6){let n=i.filter(s=>s.family===6);t.hints&oxe&&(cxe&&t.hints&Rz||n.length===0)?uxe(i):i=n}else t.family===4&&(i=i.filter(n=>n.family===4));if(t.hints&axe){let{_iface:n}=this;i=i.filter(s=>s.family===6?n.has6:n.has4)}if(i.length===0){let n=new Error(`cacheableLookup ENOTFOUND ${e}`);throw n.code=\"ENOTFOUND\",n.hostname=e,n}return t.all?i:i[0]}async query(e){let t=await this._cache.get(e);if(!t){let i=this._pending[e];if(i)t=await i;else{let n=this.queryAndCache(e);this._pending[e]=n,t=await n}}return t=t.map(i=>({...i})),t}async _resolve(e){let t=async c=>{try{return await c}catch(u){if(u.code===\"ENODATA\"||u.code===\"ENOTFOUND\")return[];throw u}},[i,n]=await Promise.all([this._resolve4(e,kz),this._resolve6(e,kz)].map(c=>t(c))),s=0,o=0,a=0,l=Date.now();for(let c of i)c.family=4,c.expires=l+c.ttl*1e3,s=Math.max(s,c.ttl);for(let c of n)c.family=6,c.expires=l+c.ttl*1e3,o=Math.max(o,c.ttl);return i.length>0?n.length>0?a=Math.min(s,o):a=s:a=o,{entries:[...i,...n],cacheTtl:a}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,t,i){if(this.maxTtl>0&&i>0){i=Math.min(i,this.maxTtl)*1e3,t[xz]=Date.now()+i;try{await this._cache.set(e,t,i)}catch(n){this.lookupAsync=async()=>{let s=new Error(\"Cache Error. Please recreate the CacheableLookup instance.\");throw s.cause=n,s}}gxe(this._cache)&&this._tick(i)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,fxe);try{let t=await this._resolve(e);t.entries.length===0&&this._fallback&&(t=await this._lookup(e),t.entries.length!==0&&this._hostnamesToFallback.add(e));let i=t.entries.length===0?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,i),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){let t=this._nextRemovalTime;(!t||e<t)&&(clearTimeout(this._removalTimeout),this._nextRemovalTime=e,this._removalTimeout=setTimeout(()=>{this._nextRemovalTime=!1;let i=1/0,n=Date.now();for(let[s,o]of this._cache){let a=o[xz];n>=a?this._cache.delete(s):a<i&&(i=a)}i!==1/0&&this._tick(i-n)},e),this._removalTimeout.unref&&this._removalTimeout.unref())}install(e){if(Pz(e),Of in e)throw new Error(\"CacheableLookup has been already installed\");e[Of]=e.createConnection,e[bk]=this,e.createConnection=(t,i)=>(\"lookup\"in t||(t.lookup=this.lookup),e[Of](t,i))}uninstall(e){if(Pz(e),e[Of]){if(e[bk]!==this)throw new Error(\"The agent is not owned by this CacheableLookup instance\");e.createConnection=e[Of],delete e[Of],delete e[bk]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Dz(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};Qk.exports=Jw;Qk.exports.default=Jw});var Lz=w((nnt,Sk)=>{\"use strict\";var hxe=typeof URL>\"u\"?J(\"url\").URL:URL,pxe=\"text/plain\",dxe=\"us-ascii\",Nz=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),Cxe=(r,{stripHash:e})=>{let t=r.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!t)throw new Error(`Invalid URL: ${r}`);let i=t[1].split(\";\"),n=t[2],s=e?\"\":t[3],o=!1;i[i.length-1]===\"base64\"&&(i.pop(),o=!0);let a=(i.shift()||\"\").toLowerCase(),c=[...i.map(u=>{let[g,f=\"\"]=u.split(\"=\").map(h=>h.trim());return g===\"charset\"&&(f=f.toLowerCase(),f===dxe)?\"\":`${g}${f?`=${f}`:\"\"}`}).filter(Boolean)];return o&&c.push(\"base64\"),(c.length!==0||a&&a!==pxe)&&c.unshift(a),`data:${c.join(\";\")},${o?n.trim():n}${s?`#${s}`:\"\"}`},Tz=(r,e)=>{if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,\"normalizeHttps\"))throw new Error(\"options.normalizeHttps is renamed to options.forceHttp\");if(Reflect.has(e,\"normalizeHttp\"))throw new Error(\"options.normalizeHttp is renamed to options.forceHttps\");if(Reflect.has(e,\"stripFragment\"))throw new Error(\"options.stripFragment is renamed to options.stripHash\");if(r=r.trim(),/^data:/i.test(r))return Cxe(r,e);let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new hxe(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash&&(n.hash=\"\"),n.pathname&&(n.pathname=n.pathname.replace(/((?!:).|^)\\/{2,}/g,(s,o)=>/^(?!\\/)/g.test(o)?`${o}/`:\"/\")),n.pathname&&(n.pathname=decodeURI(n.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let s=n.pathname.split(\"/\"),o=s[s.length-1];Nz(o,e.removeDirectoryIndex)&&(s=s.slice(0,s.length-1),n.pathname=s.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.([a-z\\-\\d]{2,63})\\.([a-z.]{2,5})$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let s of[...n.searchParams.keys()])Nz(s,e.removeQueryParameters)&&n.searchParams.delete(s);return e.sortQueryParameters&&n.searchParams.sort(),e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\")),r=n.toString(),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r};Sk.exports=Tz;Sk.exports.default=Tz});var Kz=w((snt,Oz)=>{Oz.exports=Mz;function Mz(r,e){if(r&&e)return Mz(r)(e);if(typeof r!=\"function\")throw new TypeError(\"need wrapper function\");return Object.keys(r).forEach(function(i){t[i]=r[i]}),t;function t(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];var s=r.apply(this,i),o=i[i.length-1];return typeof s==\"function\"&&s!==o&&Object.keys(o).forEach(function(a){s[a]=o[a]}),s}}});var xk=w((ont,vk)=>{var Uz=Kz();vk.exports=Uz(Ww);vk.exports.strict=Uz(Hz);Ww.proto=Ww(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return Ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return Hz(this)},configurable:!0})});function Ww(r){var e=function(){return e.called?e.value:(e.called=!0,e.value=r.apply(this,arguments))};return e.called=!1,e}function Hz(r){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=r.apply(this,arguments)},t=r.name||\"Function wrapped with `once`\";return e.onceError=t+\" shouldn't be called more than once\",e.called=!1,e}});var Pk=w((ant,Yz)=>{var mxe=xk(),Exe=function(){},Ixe=function(r){return r.setHeader&&typeof r.abort==\"function\"},yxe=function(r){return r.stdio&&Array.isArray(r.stdio)&&r.stdio.length===3},Gz=function(r,e,t){if(typeof e==\"function\")return Gz(r,null,e);e||(e={}),t=mxe(t||Exe);var i=r._writableState,n=r._readableState,s=e.readable||e.readable!==!1&&r.readable,o=e.writable||e.writable!==!1&&r.writable,a=function(){r.writable||l()},l=function(){o=!1,s||t.call(r)},c=function(){s=!1,o||t.call(r)},u=function(p){t.call(r,p?new Error(\"exited with error code: \"+p):null)},g=function(p){t.call(r,p)},f=function(){if(s&&!(n&&n.ended))return t.call(r,new Error(\"premature close\"));if(o&&!(i&&i.ended))return t.call(r,new Error(\"premature close\"))},h=function(){r.req.on(\"finish\",l)};return Ixe(r)?(r.on(\"complete\",l),r.on(\"abort\",f),r.req?h():r.on(\"request\",h)):o&&!i&&(r.on(\"end\",a),r.on(\"close\",a)),yxe(r)&&r.on(\"exit\",u),r.on(\"end\",c),r.on(\"finish\",l),e.error!==!1&&r.on(\"error\",g),r.on(\"close\",f),function(){r.removeListener(\"complete\",l),r.removeListener(\"abort\",f),r.removeListener(\"request\",h),r.req&&r.req.removeListener(\"finish\",l),r.removeListener(\"end\",a),r.removeListener(\"close\",a),r.removeListener(\"finish\",l),r.removeListener(\"exit\",u),r.removeListener(\"end\",c),r.removeListener(\"error\",g),r.removeListener(\"close\",f)}};Yz.exports=Gz});var Jz=w((Ant,qz)=>{var wxe=xk(),Bxe=Pk(),Dk=J(\"fs\"),mC=function(){},bxe=/^v?\\.0/.test(process.version),zw=function(r){return typeof r==\"function\"},Qxe=function(r){return!bxe||!Dk?!1:(r instanceof(Dk.ReadStream||mC)||r instanceof(Dk.WriteStream||mC))&&zw(r.close)},Sxe=function(r){return r.setHeader&&zw(r.abort)},vxe=function(r,e,t,i){i=wxe(i);var n=!1;r.on(\"close\",function(){n=!0}),Bxe(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,Qxe(r))return r.close(mC);if(Sxe(r))return r.abort();if(zw(r.destroy))return r.destroy();i(o||new Error(\"stream was destroyed\"))}}},jz=function(r){r()},xxe=function(r,e){return r.pipe(e)},Pxe=function(){var r=Array.prototype.slice.call(arguments),e=zw(r[r.length-1]||mC)&&r.pop()||mC;if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Error(\"pump requires two streams per minimum\");var t,i=r.map(function(n,s){var o=s<r.length-1,a=s>0;return vxe(n,o,a,function(l){t||(t=l),l&&i.forEach(jz),!o&&(i.forEach(jz),e(t))})});return r.reduce(xxe)};qz.exports=Pxe});var zz=w((lnt,Wz)=>{\"use strict\";var{PassThrough:Dxe}=J(\"stream\");Wz.exports=r=>{r={...r};let{array:e}=r,{encoding:t}=r,i=t===\"buffer\",n=!1;e?n=!(t||i):t=t||\"utf8\",i&&(t=null);let s=new Dxe({objectMode:n});t&&s.setEncoding(t);let o=0,a=[];return s.on(\"data\",l=>{a.push(l),n?o=a.length:o+=l.length}),s.getBufferedValue=()=>e?a:i?Buffer.concat(a,o):a.join(\"\"),s.getBufferedLength=()=>o,s}});var Vz=w((cnt,Kf)=>{\"use strict\";var kxe=Jz(),Rxe=zz(),Vw=class extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}};async function Xw(r,e){if(!r)return Promise.reject(new Error(\"Expected a stream\"));e={maxBuffer:1/0,...e};let{maxBuffer:t}=e,i;return await new Promise((n,s)=>{let o=a=>{a&&(a.bufferedData=i.getBufferedValue()),s(a)};i=kxe(r,Rxe(e),a=>{if(a){o(a);return}n()}),i.on(\"data\",()=>{i.getBufferedLength()>t&&o(new Vw)})}),i.getBufferedValue()}Kf.exports=Xw;Kf.exports.default=Xw;Kf.exports.buffer=(r,e)=>Xw(r,{...e,encoding:\"buffer\"});Kf.exports.array=(r,e)=>Xw(r,{...e,array:!0});Kf.exports.MaxBufferError=Vw});var Zz=w((gnt,Xz)=>{\"use strict\";var Fxe=new Set([200,203,204,206,300,301,404,405,410,414,501]),Nxe=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Txe=new Set([500,502,503,504]),Lxe={date:!0,connection:!0,\"keep-alive\":!0,\"proxy-authenticate\":!0,\"proxy-authorization\":!0,te:!0,trailer:!0,\"transfer-encoding\":!0,upgrade:!0},Mxe={\"content-length\":!0,\"content-encoding\":!0,\"transfer-encoding\":!0,\"content-range\":!0};function Lc(r){let e=parseInt(r,10);return isFinite(e)?e:0}function Oxe(r){return r?Txe.has(r.status):!0}function kk(r){let e={};if(!r)return e;let t=r.trim().split(/\\s*,\\s*/);for(let i of t){let[n,s]=i.split(/\\s*=\\s*/,2);e[n]=s===void 0?!0:s.replace(/^\"|\"$/g,\"\")}return e}function Kxe(r){let e=[];for(let t in r){let i=r[t];e.push(i===!0?t:t+\"=\"+i)}if(!!e.length)return e.join(\", \")}Xz.exports=class{constructor(e,t,{shared:i,cacheHeuristic:n,immutableMinTimeToLive:s,ignoreCargoCult:o,_fromObject:a}={}){if(a){this._fromObject(a);return}if(!t||!t.headers)throw Error(\"Response headers missing\");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=i!==!1,this._cacheHeuristic=n!==void 0?n:.1,this._immutableMinTtl=s!==void 0?s:24*3600*1e3,this._status=\"status\"in t?t.status:200,this._resHeaders=t.headers,this._rescc=kk(t.headers[\"cache-control\"]),this._method=\"method\"in e?e.method:\"GET\",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=kk(e.headers[\"cache-control\"]),o&&\"pre-check\"in this._rescc&&\"post-check\"in this._rescc&&(delete this._rescc[\"pre-check\"],delete this._rescc[\"post-check\"],delete this._rescc[\"no-cache\"],delete this._rescc[\"no-store\"],delete this._rescc[\"must-revalidate\"],this._resHeaders=Object.assign({},this._resHeaders,{\"cache-control\":Kxe(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),t.headers[\"cache-control\"]==null&&/no-cache/.test(t.headers.pragma)&&(this._rescc[\"no-cache\"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc[\"no-store\"]&&(this._method===\"GET\"||this._method===\"HEAD\"||this._method===\"POST\"&&this._hasExplicitExpiration())&&Nxe.has(this._status)&&!this._rescc[\"no-store\"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc[\"max-age\"]||this._isShared&&this._rescc[\"s-maxage\"]||this._rescc.public||Fxe.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc[\"s-maxage\"]||this._rescc[\"max-age\"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error(\"Request headers missing\")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let t=kk(e.headers[\"cache-control\"]);return t[\"no-cache\"]||/no-cache/.test(e.headers.pragma)||t[\"max-age\"]&&this.age()>t[\"max-age\"]||t[\"min-fresh\"]&&this.timeToLive()<1e3*t[\"min-fresh\"]||this.stale()&&!(t[\"max-stale\"]&&!this._rescc[\"must-revalidate\"]&&(t[\"max-stale\"]===!0||t[\"max-stale\"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&e.method===\"HEAD\")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc[\"must-revalidate\"]||this._rescc.public||this._rescc[\"s-maxage\"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary===\"*\")return!1;let t=this._resHeaders.vary.trim().toLowerCase().split(/\\s*,\\s*/);for(let i of t)if(e.headers[i]!==this._reqHeaders[i])return!1;return!0}_copyWithoutHopByHopHeaders(e){let t={};for(let i in e)Lxe[i]||(t[i]=e[i]);if(e.connection){let i=e.connection.trim().split(/\\s*,\\s*/);for(let n of i)delete t[n]}if(t.warning){let i=t.warning.split(/,/).filter(n=>!/^\\s*1[0-9][0-9]/.test(n));i.length?t.warning=i.join(\",\").trim():delete t.warning}return t}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:\"\")+'113 - \"rfc7234 5.5.4\"'),e.age=`${Math.round(t)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),t=(this.now()-this._responseTime)/1e3;return e+t}_ageValue(){return Lc(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc[\"no-cache\"]||this._isShared&&this._resHeaders[\"set-cookie\"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary===\"*\")return 0;if(this._isShared){if(this._rescc[\"proxy-revalidate\"])return 0;if(this._rescc[\"s-maxage\"])return Lc(this._rescc[\"s-maxage\"])}if(this._rescc[\"max-age\"])return Lc(this._rescc[\"max-age\"]);let e=this._rescc.immutable?this._immutableMinTtl:0,t=this.date();if(this._resHeaders.expires){let i=Date.parse(this._resHeaders.expires);return Number.isNaN(i)||i<t?0:Math.max(e,(i-t)/1e3)}if(this._resHeaders[\"last-modified\"]){let i=Date.parse(this._resHeaders[\"last-modified\"]);if(isFinite(i)&&t>i)return Math.max(e,(t-i)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),t=e+Lc(this._rescc[\"stale-if-error\"]),i=e+Lc(this._rescc[\"stale-while-revalidate\"]);return Math.max(0,e,t,i)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Lc(this._rescc[\"stale-if-error\"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Lc(this._rescc[\"stale-while-revalidate\"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error(\"Reinitialized\");if(!e||e.v!==1)throw Error(\"Invalid serialization\");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t[\"if-range\"],!this._requestMatches(e,!0)||!this.storable())return delete t[\"if-none-match\"],delete t[\"if-modified-since\"],t;if(this._resHeaders.etag&&(t[\"if-none-match\"]=t[\"if-none-match\"]?`${t[\"if-none-match\"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),t[\"accept-ranges\"]||t[\"if-match\"]||t[\"if-unmodified-since\"]||this._method&&this._method!=\"GET\"){if(delete t[\"if-modified-since\"],t[\"if-none-match\"]){let n=t[\"if-none-match\"].split(/,/).filter(s=>!/^\\s*W\\//.test(s));n.length?t[\"if-none-match\"]=n.join(\",\").trim():delete t[\"if-none-match\"]}}else this._resHeaders[\"last-modified\"]&&!t[\"if-modified-since\"]&&(t[\"if-modified-since\"]=this._resHeaders[\"last-modified\"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Oxe(t))return{modified:!1,matches:!1,policy:this};if(!t||!t.headers)throw Error(\"Response headers missing\");let i=!1;if(t.status!==void 0&&t.status!=304?i=!1:t.headers.etag&&!/^\\s*W\\//.test(t.headers.etag)?i=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?i=this._resHeaders.etag.replace(/^\\s*W\\//,\"\")===t.headers.etag.replace(/^\\s*W\\//,\"\"):this._resHeaders[\"last-modified\"]?i=this._resHeaders[\"last-modified\"]===t.headers[\"last-modified\"]:!this._resHeaders.etag&&!this._resHeaders[\"last-modified\"]&&!t.headers.etag&&!t.headers[\"last-modified\"]&&(i=!0),!i)return{policy:new this.constructor(e,t),modified:t.status!=304,matches:!1};let n={};for(let o in this._resHeaders)n[o]=o in t.headers&&!Mxe[o]?t.headers[o]:this._resHeaders[o];let s=Object.assign({},t,{status:this._status,method:this._method,headers:n});return{policy:new this.constructor(e,s,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Zw=w((fnt,_z)=>{\"use strict\";_z.exports=r=>{let e={};for(let[t,i]of Object.entries(r))e[t.toLowerCase()]=i;return e}});var e5=w((hnt,$z)=>{\"use strict\";var Uxe=J(\"stream\").Readable,Hxe=Zw(),Rk=class extends Uxe{constructor(e,t,i,n){if(typeof e!=\"number\")throw new TypeError(\"Argument `statusCode` should be a number\");if(typeof t!=\"object\")throw new TypeError(\"Argument `headers` should be an object\");if(!(i instanceof Buffer))throw new TypeError(\"Argument `body` should be a buffer\");if(typeof n!=\"string\")throw new TypeError(\"Argument `url` should be a string\");super(),this.statusCode=e,this.headers=Hxe(t),this.body=i,this.url=n}_read(){this.push(this.body),this.push(null)}};$z.exports=Rk});var r5=w((pnt,t5)=>{\"use strict\";var Gxe=[\"destroy\",\"setTimeout\",\"socket\",\"headers\",\"trailers\",\"rawHeaders\",\"statusCode\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"rawTrailers\",\"statusMessage\"];t5.exports=(r,e)=>{let t=new Set(Object.keys(r).concat(Gxe));for(let i of t)i in e||(e[i]=typeof r[i]==\"function\"?r[i].bind(r):r[i])}});var n5=w((dnt,i5)=>{\"use strict\";var Yxe=J(\"stream\").PassThrough,jxe=r5(),qxe=r=>{if(!(r&&r.pipe))throw new TypeError(\"Parameter `response` must be a response stream.\");let e=new Yxe;return jxe(r,e),r.pipe(e)};i5.exports=qxe});var s5=w(Fk=>{Fk.stringify=function r(e){if(typeof e>\"u\")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(\":base64:\"+e.toString(\"base64\"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e==\"object\"){var t=\"\",i=Array.isArray(e);t=i?\"[\":\"{\";var n=!0;for(var s in e){var o=typeof e[s]==\"function\"||!i&&typeof e[s]>\"u\";Object.hasOwnProperty.call(e,s)&&!o&&(n||(t+=\",\"),n=!1,i?e[s]==null?t+=\"null\":t+=r(e[s]):e[s]!==void 0&&(t+=r(s)+\":\"+r(e[s])))}return t+=i?\"]\":\"}\",t}else return typeof e==\"string\"?JSON.stringify(/^:/.test(e)?\":\"+e:e):typeof e>\"u\"?\"null\":JSON.stringify(e)};Fk.parse=function(r){return JSON.parse(r,function(e,t){return typeof t==\"string\"?/^:base64:/.test(t)?Buffer.from(t.substring(8),\"base64\"):/^:/.test(t)?t.substring(1):t:t})}});var A5=w((mnt,a5)=>{\"use strict\";var Jxe=J(\"events\"),o5=s5(),Wxe=r=>{let e={redis:\"@keyv/redis\",mongodb:\"@keyv/mongo\",mongo:\"@keyv/mongo\",sqlite:\"@keyv/sqlite\",postgresql:\"@keyv/postgres\",postgres:\"@keyv/postgres\",mysql:\"@keyv/mysql\"};if(r.adapter||r.uri){let t=r.adapter||/^[^:]*/.exec(r.uri)[0];return new(J(e[t]))(r)}return new Map},Nk=class extends Jxe{constructor(e,t){if(super(),this.opts=Object.assign({namespace:\"keyv\",serialize:o5.stringify,deserialize:o5.parse},typeof e==\"string\"?{uri:e}:e,t),!this.opts.store){let i=Object.assign({},this.opts);this.opts.store=Wxe(i)}typeof this.opts.store.on==\"function\"&&this.opts.store.on(\"error\",i=>this.emit(\"error\",i)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);let{store:i}=this.opts;return Promise.resolve().then(()=>i.get(e)).then(n=>typeof n==\"string\"?this.opts.deserialize(n):n).then(n=>{if(n!==void 0){if(typeof n.expires==\"number\"&&Date.now()>n.expires){this.delete(e);return}return t&&t.raw?n:n.value}})}set(e,t,i){e=this._getKeyPrefix(e),typeof i>\"u\"&&(i=this.opts.ttl),i===0&&(i=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let s=typeof i==\"number\"?Date.now()+i:null;return t={value:t,expires:s},this.opts.serialize(t)}).then(s=>n.set(e,s,i)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};a5.exports=Nk});var u5=w((Int,c5)=>{\"use strict\";var zxe=J(\"events\"),_w=J(\"url\"),Vxe=Lz(),Xxe=Vz(),Tk=Zz(),l5=e5(),Zxe=Zw(),_xe=n5(),$xe=A5(),ao=class{constructor(e,t){if(typeof e!=\"function\")throw new TypeError(\"Parameter `request` must be a function\");return this.cache=new $xe({uri:typeof t==\"string\"&&t,store:typeof t!=\"string\"&&t,namespace:\"cacheable-request\"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,i)=>{let n;if(typeof t==\"string\")n=Lk(_w.parse(t)),t={};else if(t instanceof _w.URL)n=Lk(_w.parse(t.toString())),t={};else{let[g,...f]=(t.path||\"\").split(\"?\"),h=f.length>0?`?${f.join(\"?\")}`:\"\";n=Lk({...t,pathname:g,search:h})}t={headers:{},method:\"GET\",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...ePe(n)},t.headers=Zxe(t.headers);let s=new zxe,o=Vxe(_w.format(n),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),a=`${t.method}:${o}`,l=!1,c=!1,u=g=>{c=!0;let f=!1,h,p=new Promise(y=>{h=()=>{f||(f=!0,y())}}),C=y=>{if(l&&!g.forceRefresh){y.status=y.statusCode;let v=Tk.fromObject(l.cachePolicy).revalidatedPolicy(g,y);if(!v.modified){let D=v.policy.responseHeaders();y=new l5(l.statusCode,D,l.body,l.url),y.cachePolicy=v.policy,y.fromCache=!0}}y.fromCache||(y.cachePolicy=new Tk(g,y,g),y.fromCache=!1);let B;g.cache&&y.cachePolicy.storable()?(B=_xe(y),(async()=>{try{let v=Xxe.buffer(y);if(await Promise.race([p,new Promise(j=>y.once(\"end\",j))]),f)return;let D=await v,T={cachePolicy:y.cachePolicy.toObject(),url:y.url,statusCode:y.fromCache?l.statusCode:y.statusCode,body:D},H=g.strictTtl?y.cachePolicy.timeToLive():void 0;g.maxTtl&&(H=H?Math.min(H,g.maxTtl):g.maxTtl),await this.cache.set(a,T,H)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})()):g.cache&&l&&(async()=>{try{await this.cache.delete(a)}catch(v){s.emit(\"error\",new ao.CacheError(v))}})(),s.emit(\"response\",B||y),typeof i==\"function\"&&i(B||y)};try{let y=e(g,C);y.once(\"error\",h),y.once(\"abort\",h),s.emit(\"request\",y)}catch(y){s.emit(\"error\",new ao.RequestError(y))}};return(async()=>{let g=async h=>{await Promise.resolve();let p=h.cache?await this.cache.get(a):void 0;if(typeof p>\"u\")return u(h);let C=Tk.fromObject(p.cachePolicy);if(C.satisfiesWithoutRevalidation(h)&&!h.forceRefresh){let y=C.responseHeaders(),B=new l5(p.statusCode,y,p.body,p.url);B.cachePolicy=C,B.fromCache=!0,s.emit(\"response\",B),typeof i==\"function\"&&i(B)}else l=p,h.headers=C.revalidationHeaders(h),u(h)},f=h=>s.emit(\"error\",new ao.CacheError(h));this.cache.once(\"error\",f),s.on(\"response\",()=>this.cache.removeListener(\"error\",f));try{await g(t)}catch(h){t.automaticFailover&&!c&&u(t),s.emit(\"error\",new ao.CacheError(h))}})(),s}}};function ePe(r){let e={...r};return e.path=`${r.pathname||\"/\"}${r.search||\"\"}`,delete e.pathname,delete e.search,e}function Lk(r){return{protocol:r.protocol,auth:r.auth,hostname:r.hostname||r.host||\"localhost\",port:r.port,pathname:r.pathname,search:r.search}}ao.RequestError=class extends Error{constructor(r){super(r.message),this.name=\"RequestError\",Object.assign(this,r)}};ao.CacheError=class extends Error{constructor(r){super(r.message),this.name=\"CacheError\",Object.assign(this,r)}};c5.exports=ao});var f5=w((Bnt,g5)=>{\"use strict\";var tPe=[\"aborted\",\"complete\",\"headers\",\"httpVersion\",\"httpVersionMinor\",\"httpVersionMajor\",\"method\",\"rawHeaders\",\"rawTrailers\",\"setTimeout\",\"socket\",\"statusCode\",\"statusMessage\",\"trailers\",\"url\"];g5.exports=(r,e)=>{if(e._readableState.autoDestroy)throw new Error(\"The second stream must have the `autoDestroy` option set to `false`\");let t=new Set(Object.keys(r).concat(tPe)),i={};for(let n of t)n in e||(i[n]={get(){let s=r[n];return typeof s==\"function\"?s.bind(r):s},set(s){r[n]=s},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),r.once(\"aborted\",()=>{e.destroy(),e.emit(\"aborted\")}),r.once(\"close\",()=>{r.complete&&e.readable?e.once(\"end\",()=>{e.emit(\"close\")}):e.emit(\"close\")}),e}});var p5=w((bnt,h5)=>{\"use strict\";var{Transform:rPe,PassThrough:iPe}=J(\"stream\"),Mk=J(\"zlib\"),nPe=f5();h5.exports=r=>{let e=(r.headers[\"content-encoding\"]||\"\").toLowerCase();if(![\"gzip\",\"deflate\",\"br\"].includes(e))return r;let t=e===\"br\";if(t&&typeof Mk.createBrotliDecompress!=\"function\")return r.destroy(new Error(\"Brotli is not supported on Node.js < 12\")),r;let i=!0,n=new rPe({transform(a,l,c){i=!1,c(null,a)},flush(a){a()}}),s=new iPe({autoDestroy:!1,destroy(a,l){r.destroy(),l(a)}}),o=t?Mk.createBrotliDecompress():Mk.createUnzip();return o.once(\"error\",a=>{if(i&&!r.readable){s.end();return}s.destroy(a)}),nPe(r,s),r.pipe(n).pipe(o).pipe(s),s}});var Kk=w((Qnt,d5)=>{\"use strict\";var Ok=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction==\"function\")for(let[i,n]of this.oldCache.entries())this.onEviction(i,n);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};d5.exports=Ok});var Hk=w((Snt,I5)=>{\"use strict\";var sPe=J(\"events\"),oPe=J(\"tls\"),aPe=J(\"http2\"),APe=Kk(),on=Symbol(\"currentStreamsCount\"),C5=Symbol(\"request\"),Bs=Symbol(\"cachedOriginSet\"),Uf=Symbol(\"gracefullyClosing\"),lPe=[\"maxDeflateDynamicTableSize\",\"maxSessionMemory\",\"maxHeaderListPairs\",\"maxOutstandingPings\",\"maxReservedRemoteStreams\",\"maxSendHeaderBlockLength\",\"paddingStrategy\",\"localAddress\",\"path\",\"rejectUnauthorized\",\"minDHSize\",\"ca\",\"cert\",\"clientCertEngine\",\"ciphers\",\"key\",\"pfx\",\"servername\",\"minVersion\",\"maxVersion\",\"secureProtocol\",\"crl\",\"honorCipherOrder\",\"ecdhCurve\",\"dhparam\",\"secureOptions\",\"sessionIdContext\"],cPe=(r,e,t)=>{let i=0,n=r.length;for(;i<n;){let s=i+n>>>1;t(r[s],e)?i=s+1:n=s}return i},uPe=(r,e)=>r.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,Uk=(r,e)=>{for(let t of r)t[Bs].length<e[Bs].length&&t[Bs].every(i=>e[Bs].includes(i))&&t[on]+e[on]<=e.remoteSettings.maxConcurrentStreams&&E5(t)},gPe=(r,e)=>{for(let t of r)e[Bs].length<t[Bs].length&&e[Bs].every(i=>t[Bs].includes(i))&&e[on]+t[on]<=t.remoteSettings.maxConcurrentStreams&&E5(e)},m5=({agent:r,isFree:e})=>{let t={};for(let i in r.sessions){let s=r.sessions[i].filter(o=>{let a=o[zo.kCurrentStreamsCount]<o.remoteSettings.maxConcurrentStreams;return e?a:!a});s.length!==0&&(t[i]=s)}return t},E5=r=>{r[Uf]=!0,r[on]===0&&r.close()},zo=class extends sPe{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:i=10,maxCachedTlsSessions:n=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=i,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new APe({maxSize:n})}static normalizeOrigin(e,t){return typeof e==\"string\"&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t=\"\";if(e)for(let i of lPe)e[i]&&(t+=`:${e[i]}`);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;let i=this.queue[e][t];this._sessionsCount<this.maxSessions&&!i.completed&&(i.completed=!0,i())}getSession(e,t,i){return new Promise((n,s)=>{Array.isArray(i)?(i=[...i],n()):i=[{resolve:n,reject:s}];let o=this.normalizeOptions(t),a=zo.normalizeOrigin(e,t&&t.servername);if(a===void 0){for(let{reject:u}of i)u(new TypeError(\"The `origin` argument needs to be a string or an URL object\"));return}if(o in this.sessions){let u=this.sessions[o],g=-1,f=-1,h;for(let p of u){let C=p.remoteSettings.maxConcurrentStreams;if(C<g)break;if(p[Bs].includes(a)){let y=p[on];if(y>=C||p[Uf]||p.destroyed)continue;h||(g=C),y>f&&(h=p,f=y)}}if(h){if(i.length!==1){for(let{reject:p}of i){let C=new Error(`Expected the length of listeners to be 1, got ${i.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`);p(C)}return}i[0].resolve(h);return}}if(o in this.queue){if(a in this.queue[o]){this.queue[o][a].listeners.push(...i),this._tryToCreateNewSession(o,a);return}}else this.queue[o]={};let l=()=>{o in this.queue&&this.queue[o][a]===c&&(delete this.queue[o][a],Object.keys(this.queue[o]).length===0&&delete this.queue[o])},c=()=>{let u=`${a}:${o}`,g=!1;try{let f=aPe.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(u),...t});f[on]=0,f[Uf]=!1;let h=()=>f[on]<f.remoteSettings.maxConcurrentStreams,p=!0;f.socket.once(\"session\",y=>{this.tlsSessionCache.set(u,y)}),f.once(\"error\",y=>{for(let{reject:B}of i)B(y);this.tlsSessionCache.delete(u)}),f.setTimeout(this.timeout,()=>{f.destroy()}),f.once(\"close\",()=>{if(g){p&&this._freeSessionsCount--,this._sessionsCount--;let y=this.sessions[o];y.splice(y.indexOf(f),1),y.length===0&&delete this.sessions[o]}else{let y=new Error(\"Session closed without receiving a SETTINGS frame\");y.code=\"HTTP2WRAPPER_NOSETTINGS\";for(let{reject:B}of i)B(y);l()}this._tryToCreateNewSession(o,a)});let C=()=>{if(!(!(o in this.queue)||!h())){for(let y of f[Bs])if(y in this.queue[o]){let{listeners:B}=this.queue[o][y];for(;B.length!==0&&h();)B.shift().resolve(f);let v=this.queue[o];if(v[y].listeners.length===0&&(delete v[y],Object.keys(v).length===0)){delete this.queue[o];break}if(!h())break}}};f.on(\"origin\",()=>{f[Bs]=f.originSet,h()&&(C(),Uk(this.sessions[o],f))}),f.once(\"remoteSettings\",()=>{if(f.ref(),f.unref(),this._sessionsCount++,c.destroyed){let y=new Error(\"Agent has been destroyed\");for(let B of i)B.reject(y);f.destroy();return}f[Bs]=f.originSet;{let y=this.sessions;if(o in y){let B=y[o];B.splice(cPe(B,f,uPe),0,f)}else y[o]=[f]}this._freeSessionsCount+=1,g=!0,this.emit(\"session\",f),C(),l(),f[on]===0&&this._freeSessionsCount>this.maxFreeSessions&&f.close(),i.length!==0&&(this.getSession(a,t,i),i.length=0),f.on(\"remoteSettings\",()=>{C(),Uk(this.sessions[o],f)})}),f[C5]=f.request,f.request=(y,B)=>{if(f[Uf])throw new Error(\"The session is gracefully closing. No new streams are allowed.\");let v=f[C5](y,B);return f.ref(),++f[on],f[on]===f.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,v.once(\"close\",()=>{if(p=h(),--f[on],!f.destroyed&&!f.closed&&(gPe(this.sessions[o],f),h()&&!f.closed)){p||(this._freeSessionsCount++,p=!0);let D=f[on]===0;D&&f.unref(),D&&(this._freeSessionsCount>this.maxFreeSessions||f[Uf])?f.close():(Uk(this.sessions[o],f),C())}}),v}}catch(f){for(let h of i)h.reject(f);l()}};c.listeners=i,c.completed=!1,c.destroyed=!1,this.queue[o][a]=c,this._tryToCreateNewSession(o,a)})}request(e,t,i,n){return new Promise((s,o)=>{this.getSession(e,t,[{reject:o,resolve:a=>{try{s(a.request(i,n))}catch(l){o(l)}}}])})}createConnection(e,t){return zo.connect(e,t)}static connect(e,t){t.ALPNProtocols=[\"h2\"];let i=e.port||443,n=e.hostname||e.host;return typeof t.servername>\"u\"&&(t.servername=n),oPe.connect(i,n,t)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let t of e)t[on]===0&&t.close()}destroy(e){for(let t of Object.values(this.sessions))for(let i of t)i.destroy(e);for(let t of Object.values(this.queue))for(let i of Object.values(t))i.destroyed=!0;this.queue={}}get freeSessions(){return m5({agent:this,isFree:!0})}get busySessions(){return m5({agent:this,isFree:!1})}};zo.kCurrentStreamsCount=on;zo.kGracefullyClosing=Uf;I5.exports={Agent:zo,globalAgent:new zo}});var Yk=w((vnt,y5)=>{\"use strict\";var{Readable:fPe}=J(\"stream\"),Gk=class extends fPe{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage=\"\",this.httpVersion=\"2.0\",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners(\"data\"),this.resume())}_read(){this.req&&this.req._request.resume()}};y5.exports=Gk});var jk=w((xnt,w5)=>{\"use strict\";w5.exports=r=>{let e={protocol:r.protocol,hostname:typeof r.hostname==\"string\"&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return typeof r.port==\"string\"&&r.port.length!==0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var b5=w((Pnt,B5)=>{\"use strict\";B5.exports=(r,e,t)=>{for(let i of t)r.on(i,(...n)=>e.emit(i,...n))}});var S5=w((Dnt,Q5)=>{\"use strict\";Q5.exports=r=>{switch(r){case\":method\":case\":scheme\":case\":authority\":case\":path\":return!0;default:return!1}}});var x5=w((Rnt,v5)=>{\"use strict\";var Hf=(r,e,t)=>{v5.exports[e]=class extends r{constructor(...n){super(typeof t==\"string\"?t:t(n)),this.name=`${super.name} [${e}]`,this.code=e}}};Hf(TypeError,\"ERR_INVALID_ARG_TYPE\",r=>{let e=r[0].includes(\".\")?\"property\":\"argument\",t=r[1],i=Array.isArray(t);return i&&(t=`${t.slice(0,-1).join(\", \")} or ${t.slice(-1)}`),`The \"${r[0]}\" ${e} must be ${i?\"one of\":\"of\"} type ${t}. Received ${typeof r[2]}`});Hf(TypeError,\"ERR_INVALID_PROTOCOL\",r=>`Protocol \"${r[0]}\" not supported. Expected \"${r[1]}\"`);Hf(Error,\"ERR_HTTP_HEADERS_SENT\",r=>`Cannot ${r[0]} headers after they are sent to the client`);Hf(TypeError,\"ERR_INVALID_HTTP_TOKEN\",r=>`${r[0]} must be a valid HTTP token [${r[1]}]`);Hf(TypeError,\"ERR_HTTP_INVALID_HEADER_VALUE\",r=>`Invalid value \"${r[0]} for header \"${r[1]}\"`);Hf(TypeError,\"ERR_INVALID_CHAR\",r=>`Invalid character in ${r[0]} [${r[1]}]`)});var Vk=w((Fnt,T5)=>{\"use strict\";var hPe=J(\"http2\"),{Writable:pPe}=J(\"stream\"),{Agent:P5,globalAgent:dPe}=Hk(),CPe=Yk(),mPe=jk(),EPe=b5(),IPe=S5(),{ERR_INVALID_ARG_TYPE:qk,ERR_INVALID_PROTOCOL:yPe,ERR_HTTP_HEADERS_SENT:D5,ERR_INVALID_HTTP_TOKEN:wPe,ERR_HTTP_INVALID_HEADER_VALUE:BPe,ERR_INVALID_CHAR:bPe}=x5(),{HTTP2_HEADER_STATUS:k5,HTTP2_HEADER_METHOD:R5,HTTP2_HEADER_PATH:F5,HTTP2_METHOD_CONNECT:QPe}=hPe.constants,Ui=Symbol(\"headers\"),Jk=Symbol(\"origin\"),Wk=Symbol(\"session\"),N5=Symbol(\"options\"),$w=Symbol(\"flushedHeaders\"),EC=Symbol(\"jobs\"),SPe=/^[\\^`\\-\\w!#$%&*+.|~]+$/,vPe=/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/,zk=class extends pPe{constructor(e,t,i){super({autoDestroy:!1});let n=typeof e==\"string\"||e instanceof URL;if(n&&(e=mPe(e instanceof URL?e:new URL(e))),typeof t==\"function\"||t===void 0?(i=t,t=n?e:{...e}):t={...e,...t},t.h2session)this[Wk]=t.h2session;else if(t.agent===!1)this.agent=new P5({maxFreeSessions:0});else if(typeof t.agent>\"u\"||t.agent===null)typeof t.createConnection==\"function\"?(this.agent=new P5({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=dPe;else if(typeof t.agent.request==\"function\")this.agent=t.agent;else throw new qk(\"options.agent\",[\"Agent-like Object\",\"undefined\",\"false\"],t.agent);if(t.protocol&&t.protocol!==\"https:\")throw new yPe(t.protocol,\"https:\");let s=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,o=t.hostname||t.host||\"localhost\";delete t.hostname,delete t.host,delete t.port;let{timeout:a}=t;if(t.timeout=void 0,this[Ui]=Object.create(null),this[EC]=[],this.socket=null,this.connection=null,this.method=t.method||\"GET\",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(let[l,c]of Object.entries(t.headers))this.setHeader(l,c);t.auth&&!(\"authorization\"in this[Ui])&&(this[Ui].authorization=\"Basic \"+Buffer.from(t.auth).toString(\"base64\")),t.session=t.tlsSession,t.path=t.socketPath,this[N5]=t,s===443?(this[Jk]=`https://${o}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=o)):(this[Jk]=`https://${o}:${s}`,\":authority\"in this[Ui]||(this[Ui][\":authority\"]=`${o}:${s}`)),a&&this.setTimeout(a),i&&this.once(\"response\",i),this[$w]=!1}get method(){return this[Ui][R5]}set method(e){e&&(this[Ui][R5]=e.toUpperCase())}get path(){return this[Ui][F5]}set path(e){e&&(this[Ui][F5]=e)}get _mustNotHaveABody(){return this.method===\"GET\"||this.method===\"HEAD\"||this.method===\"DELETE\"}_write(e,t,i){if(this._mustNotHaveABody){i(new Error(\"The GET, HEAD and DELETE methods must NOT have a body\"));return}this.flushHeaders();let n=()=>this._request.write(e,t,i);this._request?n():this[EC].push(n)}_final(e){if(this.destroyed)return;this.flushHeaders();let t=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?t():this[EC].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit(\"abort\")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[$w]||this.destroyed)return;this[$w]=!0;let e=this.method===QPe,t=i=>{if(this._request=i,this.destroyed){i.destroy();return}e||EPe(i,this,[\"timeout\",\"continue\",\"close\",\"error\"]);let n=o=>(...a)=>{!this.writable&&!this.destroyed?o(...a):this.once(\"finish\",()=>{o(...a)})};i.once(\"response\",n((o,a,l)=>{let c=new CPe(this.socket,i.readableHighWaterMark);this.res=c,c.req=this,c.statusCode=o[k5],c.headers=o,c.rawHeaders=l,c.once(\"end\",()=>{this.aborted?(c.aborted=!0,c.emit(\"aborted\")):(c.complete=!0,c.socket=null,c.connection=null)}),e?(c.upgrade=!0,this.emit(\"connect\",c,i,Buffer.alloc(0))?this.emit(\"close\"):i.destroy()):(i.on(\"data\",u=>{!c._dumped&&!c.push(u)&&i.pause()}),i.once(\"end\",()=>{c.push(null)}),this.emit(\"response\",c)||c._dump())})),i.once(\"headers\",n(o=>this.emit(\"information\",{statusCode:o[k5]}))),i.once(\"trailers\",n((o,a,l)=>{let{res:c}=this;c.trailers=o,c.rawTrailers=l}));let{socket:s}=i.session;this.socket=s,this.connection=s;for(let o of this[EC])o();this.emit(\"socket\",this.socket)};if(this[Wk])try{t(this[Wk].request(this[Ui]))}catch(i){this.emit(\"error\",i)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[Jk],this[N5],this[Ui]))}catch(i){this.emit(\"error\",i)}}}getHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);return this[Ui][e.toLowerCase()]}get headersSent(){return this[$w]}removeHeader(e){if(typeof e!=\"string\")throw new qk(\"name\",\"string\",e);if(this.headersSent)throw new D5(\"remove\");delete this[Ui][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new D5(\"set\");if(typeof e!=\"string\"||!SPe.test(e)&&!IPe(e))throw new wPe(\"Header name\",e);if(typeof t>\"u\")throw new BPe(t,e);if(vPe.test(t))throw new bPe(\"header content\",e);this[Ui][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){let i=()=>this._request.setTimeout(e,t);return this._request?i():this[EC].push(i),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};T5.exports=zk});var M5=w((Nnt,L5)=>{\"use strict\";var xPe=J(\"tls\");L5.exports=(r={})=>new Promise((e,t)=>{let i=xPe.connect(r,()=>{r.resolveSocket?(i.off(\"error\",t),e({alpnProtocol:i.alpnProtocol,socket:i})):(i.destroy(),e({alpnProtocol:i.alpnProtocol}))});i.on(\"error\",t)})});var K5=w((Tnt,O5)=>{\"use strict\";var PPe=J(\"net\");O5.exports=r=>{let e=r.host,t=r.headers&&r.headers.host;return t&&(t.startsWith(\"[\")?t.indexOf(\"]\")===-1?e=t:e=t.slice(1,-1):e=t.split(\":\",1)[0]),PPe.isIP(e)?\"\":e}});var G5=w((Lnt,Zk)=>{\"use strict\";var U5=J(\"http\"),Xk=J(\"https\"),DPe=M5(),kPe=Kk(),RPe=Vk(),FPe=K5(),NPe=jk(),eB=new kPe({maxSize:100}),IC=new Map,H5=(r,e,t)=>{e._httpMessage={shouldKeepAlive:!0};let i=()=>{r.emit(\"free\",e,t)};e.on(\"free\",i);let n=()=>{r.removeSocket(e,t)};e.on(\"close\",n);let s=()=>{r.removeSocket(e,t),e.off(\"close\",n),e.off(\"free\",i),e.off(\"agentRemove\",s)};e.on(\"agentRemove\",s),r.emit(\"free\",e,t)},TPe=async r=>{let e=`${r.host}:${r.port}:${r.ALPNProtocols.sort()}`;if(!eB.has(e)){if(IC.has(e))return(await IC.get(e)).alpnProtocol;let{path:t,agent:i}=r;r.path=r.socketPath;let n=DPe(r);IC.set(e,n);try{let{socket:s,alpnProtocol:o}=await n;if(eB.set(e,o),r.path=t,o===\"h2\")s.destroy();else{let{globalAgent:a}=Xk,l=Xk.Agent.prototype.createConnection;i?i.createConnection===l?H5(i,s,r):s.destroy():a.createConnection===l?H5(a,s,r):s.destroy()}return IC.delete(e),o}catch(s){throw IC.delete(e),s}}return eB.get(e)};Zk.exports=async(r,e,t)=>{if((typeof r==\"string\"||r instanceof URL)&&(r=NPe(new URL(r))),typeof e==\"function\"&&(t=e,e=void 0),e={ALPNProtocols:[\"h2\",\"http/1.1\"],...r,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error(\"The `ALPNProtocols` option must be an Array with at least one entry\");e.protocol=e.protocol||\"https:\";let i=e.protocol===\"https:\";e.host=e.hostname||e.host||\"localhost\",e.session=e.tlsSession,e.servername=e.servername||FPe(e),e.port=e.port||(i?443:80),e._defaultAgent=i?Xk.globalAgent:U5.globalAgent;let n=e.agent;if(n){if(n.addRequest)throw new Error(\"The `options.agent` object can contain only `http`, `https` or `http2` properties\");e.agent=n[i?\"https\":\"http\"]}return i&&await TPe(e)===\"h2\"?(n&&(e.agent=n.http2),new RPe(e,t)):U5.request(e,t)};Zk.exports.protocolCache=eB});var j5=w((Mnt,Y5)=>{\"use strict\";var LPe=J(\"http2\"),MPe=Hk(),_k=Vk(),OPe=Yk(),KPe=G5(),UPe=(r,e,t)=>new _k(r,e,t),HPe=(r,e,t)=>{let i=new _k(r,e,t);return i.end(),i};Y5.exports={...LPe,ClientRequest:_k,IncomingMessage:OPe,...MPe,request:UPe,get:HPe,auto:KPe}});var eR=w($k=>{\"use strict\";Object.defineProperty($k,\"__esModule\",{value:!0});var q5=Ya();$k.default=r=>q5.default.nodeStream(r)&&q5.default.function_(r.getBoundary)});var V5=w(tR=>{\"use strict\";Object.defineProperty(tR,\"__esModule\",{value:!0});var W5=J(\"fs\"),z5=J(\"util\"),J5=Ya(),GPe=eR(),YPe=z5.promisify(W5.stat);tR.default=async(r,e)=>{if(e&&\"content-length\"in e)return Number(e[\"content-length\"]);if(!r)return 0;if(J5.default.string(r))return Buffer.byteLength(r);if(J5.default.buffer(r))return r.length;if(GPe.default(r))return z5.promisify(r.getLength.bind(r))();if(r instanceof W5.ReadStream){let{size:t}=await YPe(r.path);return t===0?void 0:t}}});var iR=w(rR=>{\"use strict\";Object.defineProperty(rR,\"__esModule\",{value:!0});function jPe(r,e,t){let i={};for(let n of t)i[n]=(...s)=>{e.emit(n,...s)},r.on(n,i[n]);return()=>{for(let n of t)r.off(n,i[n])}}rR.default=jPe});var X5=w(nR=>{\"use strict\";Object.defineProperty(nR,\"__esModule\",{value:!0});nR.default=()=>{let r=[];return{once(e,t,i){e.once(t,i),r.push({origin:e,event:t,fn:i})},unhandleAll(){for(let e of r){let{origin:t,event:i,fn:n}=e;t.removeListener(i,n)}r.length=0}}}});var _5=w(yC=>{\"use strict\";Object.defineProperty(yC,\"__esModule\",{value:!0});yC.TimeoutError=void 0;var qPe=J(\"net\"),JPe=X5(),Z5=Symbol(\"reentry\"),WPe=()=>{},tB=class extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name=\"TimeoutError\",this.code=\"ETIMEDOUT\"}};yC.TimeoutError=tB;yC.default=(r,e,t)=>{if(Z5 in r)return WPe;r[Z5]=!0;let i=[],{once:n,unhandleAll:s}=JPe.default(),o=(g,f,h)=>{var p;let C=setTimeout(f,g,g,h);(p=C.unref)===null||p===void 0||p.call(C);let y=()=>{clearTimeout(C)};return i.push(y),y},{host:a,hostname:l}=t,c=(g,f)=>{r.destroy(new tB(g,f))},u=()=>{for(let g of i)g();s()};if(r.once(\"error\",g=>{if(u(),r.listenerCount(\"error\")===0)throw g}),r.once(\"close\",u),n(r,\"response\",g=>{n(g,\"end\",u)}),typeof e.request<\"u\"&&o(e.request,c,\"request\"),typeof e.socket<\"u\"){let g=()=>{c(e.socket,\"socket\")};r.setTimeout(e.socket,g),i.push(()=>{r.removeListener(\"timeout\",g)})}return n(r,\"socket\",g=>{var f;let{socketPath:h}=r;if(g.connecting){let p=Boolean(h!=null?h:qPe.isIP((f=l!=null?l:a)!==null&&f!==void 0?f:\"\")!==0);if(typeof e.lookup<\"u\"&&!p&&typeof g.address().address>\"u\"){let C=o(e.lookup,c,\"lookup\");n(g,\"lookup\",C)}if(typeof e.connect<\"u\"){let C=()=>o(e.connect,c,\"connect\");p?n(g,\"connect\",C()):n(g,\"lookup\",y=>{y===null&&n(g,\"connect\",C())})}typeof e.secureConnect<\"u\"&&t.protocol===\"https:\"&&n(g,\"connect\",()=>{let C=o(e.secureConnect,c,\"secureConnect\");n(g,\"secureConnect\",C)})}if(typeof e.send<\"u\"){let p=()=>o(e.send,c,\"send\");g.connecting?n(g,\"connect\",()=>{n(r,\"upload-complete\",p())}):n(r,\"upload-complete\",p())}}),typeof e.response<\"u\"&&n(r,\"upload-complete\",()=>{let g=o(e.response,c,\"response\");n(r,\"response\",g)}),u}});var e6=w(sR=>{\"use strict\";Object.defineProperty(sR,\"__esModule\",{value:!0});var $5=Ya();sR.default=r=>{r=r;let e={protocol:r.protocol,hostname:$5.default.string(r.hostname)&&r.hostname.startsWith(\"[\")?r.hostname.slice(1,-1):r.hostname,host:r.host,hash:r.hash,search:r.search,pathname:r.pathname,href:r.href,path:`${r.pathname||\"\"}${r.search||\"\"}`};return $5.default.string(r.port)&&r.port.length>0&&(e.port=Number(r.port)),(r.username||r.password)&&(e.auth=`${r.username||\"\"}:${r.password||\"\"}`),e}});var t6=w(oR=>{\"use strict\";Object.defineProperty(oR,\"__esModule\",{value:!0});var zPe=J(\"url\"),VPe=[\"protocol\",\"host\",\"hostname\",\"port\",\"pathname\",\"search\"];oR.default=(r,e)=>{var t,i;if(e.path){if(e.pathname)throw new TypeError(\"Parameters `path` and `pathname` are mutually exclusive.\");if(e.search)throw new TypeError(\"Parameters `path` and `search` are mutually exclusive.\");if(e.searchParams)throw new TypeError(\"Parameters `path` and `searchParams` are mutually exclusive.\")}if(e.search&&e.searchParams)throw new TypeError(\"Parameters `search` and `searchParams` are mutually exclusive.\");if(!r){if(!e.protocol)throw new TypeError(\"No URL protocol specified\");r=`${e.protocol}//${(i=(t=e.hostname)!==null&&t!==void 0?t:e.host)!==null&&i!==void 0?i:\"\"}`}let n=new zPe.URL(r);if(e.path){let s=e.path.indexOf(\"?\");s===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,s),e.search=e.path.slice(s+1)),delete e.path}for(let s of VPe)e[s]&&(n[s]=e[s].toString());return n}});var r6=w(AR=>{\"use strict\";Object.defineProperty(AR,\"__esModule\",{value:!0});var aR=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){typeof e==\"object\"?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return typeof e==\"object\"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e==\"object\"?this.weakMap.has(e):this.map.has(e)}};AR.default=aR});var cR=w(lR=>{\"use strict\";Object.defineProperty(lR,\"__esModule\",{value:!0});var XPe=async r=>{let e=[],t=0;for await(let i of r)e.push(i),t+=Buffer.byteLength(i);return Buffer.isBuffer(e[0])?Buffer.concat(e,t):Buffer.from(e.join(\"\"))};lR.default=XPe});var n6=w(Mc=>{\"use strict\";Object.defineProperty(Mc,\"__esModule\",{value:!0});Mc.dnsLookupIpVersionToFamily=Mc.isDnsLookupIpVersion=void 0;var i6={auto:0,ipv4:4,ipv6:6};Mc.isDnsLookupIpVersion=r=>r in i6;Mc.dnsLookupIpVersionToFamily=r=>{if(Mc.isDnsLookupIpVersion(r))return i6[r];throw new Error(\"Invalid DNS lookup IP version\")}});var uR=w(rB=>{\"use strict\";Object.defineProperty(rB,\"__esModule\",{value:!0});rB.isResponseOk=void 0;rB.isResponseOk=r=>{let{statusCode:e}=r,t=r.request.options.followRedirect?299:399;return e>=200&&e<=t||e===304}});var o6=w(gR=>{\"use strict\";Object.defineProperty(gR,\"__esModule\",{value:!0});var s6=new Set;gR.default=r=>{s6.has(r)||(s6.add(r),process.emitWarning(`Got: ${r}`,{type:\"DeprecationWarning\"}))}});var a6=w(fR=>{\"use strict\";Object.defineProperty(fR,\"__esModule\",{value:!0});var mr=Ya(),ZPe=(r,e)=>{if(mr.default.null_(r.encoding))throw new TypeError(\"To get a Buffer, set `options.responseType` to `buffer` instead\");mr.assert.any([mr.default.string,mr.default.undefined],r.encoding),mr.assert.any([mr.default.boolean,mr.default.undefined],r.resolveBodyOnly),mr.assert.any([mr.default.boolean,mr.default.undefined],r.methodRewriting),mr.assert.any([mr.default.boolean,mr.default.undefined],r.isStream),mr.assert.any([mr.default.string,mr.default.undefined],r.responseType),r.responseType===void 0&&(r.responseType=\"text\");let{retry:t}=r;if(e?r.retry={...e.retry}:r.retry={calculateDelay:i=>i.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mr.default.object(t)?(r.retry={...r.retry,...t},r.retry.methods=[...new Set(r.retry.methods.map(i=>i.toUpperCase()))],r.retry.statusCodes=[...new Set(r.retry.statusCodes)],r.retry.errorCodes=[...new Set(r.retry.errorCodes)]):mr.default.number(t)&&(r.retry.limit=t),mr.default.undefined(r.retry.maxRetryAfter)&&(r.retry.maxRetryAfter=Math.min(...[r.timeout.request,r.timeout.connect].filter(mr.default.number))),mr.default.object(r.pagination)){e&&(r.pagination={...e.pagination,...r.pagination});let{pagination:i}=r;if(!mr.default.function_(i.transform))throw new Error(\"`options.pagination.transform` must be implemented\");if(!mr.default.function_(i.shouldContinue))throw new Error(\"`options.pagination.shouldContinue` must be implemented\");if(!mr.default.function_(i.filter))throw new TypeError(\"`options.pagination.filter` must be implemented\");if(!mr.default.function_(i.paginate))throw new Error(\"`options.pagination.paginate` must be implemented\")}return r.responseType===\"json\"&&r.headers.accept===void 0&&(r.headers.accept=\"application/json\"),r};fR.default=ZPe});var A6=w(wC=>{\"use strict\";Object.defineProperty(wC,\"__esModule\",{value:!0});wC.retryAfterStatusCodes=void 0;wC.retryAfterStatusCodes=new Set([413,429,503]);var _Pe=({attemptCount:r,retryOptions:e,error:t,retryAfter:i})=>{if(r>e.limit)return 0;let n=e.methods.includes(t.options.method),s=e.errorCodes.includes(t.code),o=t.response&&e.statusCodes.includes(t.response.statusCode);if(!n||!s&&!o)return 0;if(t.response){if(i)return e.maxRetryAfter===void 0||i>e.maxRetryAfter?0:i;if(t.response.statusCode===413)return 0}let a=Math.random()*100;return 2**(r-1)*1e3+a};wC.default=_Pe});var QC=w(Yt=>{\"use strict\";Object.defineProperty(Yt,\"__esModule\",{value:!0});Yt.UnsupportedProtocolError=Yt.ReadError=Yt.TimeoutError=Yt.UploadError=Yt.CacheError=Yt.HTTPError=Yt.MaxRedirectsError=Yt.RequestError=Yt.setNonEnumerableProperties=Yt.knownHookEvents=Yt.withoutBody=Yt.kIsNormalizedAlready=void 0;var l6=J(\"util\"),c6=J(\"stream\"),$Pe=J(\"fs\"),VA=J(\"url\"),u6=J(\"http\"),hR=J(\"http\"),eDe=J(\"https\"),tDe=Sz(),rDe=Fz(),g6=u5(),iDe=p5(),nDe=j5(),sDe=Zw(),Ee=Ya(),oDe=V5(),f6=eR(),aDe=iR(),h6=_5(),ADe=e6(),p6=t6(),lDe=r6(),cDe=cR(),d6=n6(),uDe=uR(),XA=o6(),gDe=a6(),fDe=A6(),pR,Pi=Symbol(\"request\"),sB=Symbol(\"response\"),Gf=Symbol(\"responseSize\"),Yf=Symbol(\"downloadedSize\"),jf=Symbol(\"bodySize\"),qf=Symbol(\"uploadedSize\"),iB=Symbol(\"serverResponsesPiped\"),C6=Symbol(\"unproxyEvents\"),m6=Symbol(\"isFromCache\"),dR=Symbol(\"cancelTimeouts\"),E6=Symbol(\"startedReading\"),Jf=Symbol(\"stopReading\"),nB=Symbol(\"triggerRead\"),ZA=Symbol(\"body\"),BC=Symbol(\"jobs\"),I6=Symbol(\"originalResponse\"),y6=Symbol(\"retryTimeout\");Yt.kIsNormalizedAlready=Symbol(\"isNormalizedAlready\");var hDe=Ee.default.string(process.versions.brotli);Yt.withoutBody=new Set([\"GET\",\"HEAD\"]);Yt.knownHookEvents=[\"init\",\"beforeRequest\",\"beforeRedirect\",\"beforeError\",\"beforeRetry\",\"afterResponse\"];function pDe(r){for(let e in r){let t=r[e];if(!Ee.default.string(t)&&!Ee.default.number(t)&&!Ee.default.boolean(t)&&!Ee.default.null_(t)&&!Ee.default.undefined(t))throw new TypeError(`The \\`searchParams\\` value '${String(t)}' must be a string, number, boolean or null`)}}function dDe(r){return Ee.default.object(r)&&!(\"statusCode\"in r)}var CR=new lDe.default,CDe=async r=>new Promise((e,t)=>{let i=n=>{t(n)};r.pending||e(),r.once(\"error\",i),r.once(\"ready\",()=>{r.off(\"error\",i),e()})}),mDe=new Set([300,301,302,303,304,307,308]),EDe=[\"context\",\"body\",\"json\",\"form\"];Yt.setNonEnumerableProperties=(r,e)=>{let t={};for(let i of r)if(!!i)for(let n of EDe)n in i&&(t[n]={writable:!0,configurable:!0,enumerable:!1,value:i[n]});Object.defineProperties(e,t)};var ei=class extends Error{constructor(e,t,i){var n;if(super(e),Error.captureStackTrace(this,this.constructor),this.name=\"RequestError\",this.code=t.code,i instanceof gB?(Object.defineProperty(this,\"request\",{enumerable:!1,value:i}),Object.defineProperty(this,\"response\",{enumerable:!1,value:i[sB]}),Object.defineProperty(this,\"options\",{enumerable:!1,value:i.options})):Object.defineProperty(this,\"options\",{enumerable:!1,value:i}),this.timings=(n=this.request)===null||n===void 0?void 0:n.timings,Ee.default.string(t.stack)&&Ee.default.string(this.stack)){let s=this.stack.indexOf(this.message)+this.message.length,o=this.stack.slice(s).split(`\n`).reverse(),a=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split(`\n`).reverse();for(;a.length!==0&&a[0]===o[0];)o.shift();this.stack=`${this.stack.slice(0,s)}${o.reverse().join(`\n`)}${a.reverse().join(`\n`)}`}}};Yt.RequestError=ei;var oB=class extends ei{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name=\"MaxRedirectsError\"}};Yt.MaxRedirectsError=oB;var aB=class extends ei{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name=\"HTTPError\"}};Yt.HTTPError=aB;var AB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"CacheError\"}};Yt.CacheError=AB;var lB=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"UploadError\"}};Yt.UploadError=lB;var cB=class extends ei{constructor(e,t,i){super(e.message,e,i),this.name=\"TimeoutError\",this.event=e.event,this.timings=t}};Yt.TimeoutError=cB;var bC=class extends ei{constructor(e,t){super(e.message,e,t),this.name=\"ReadError\"}};Yt.ReadError=bC;var uB=class extends ei{constructor(e){super(`Unsupported protocol \"${e.url.protocol}\"`,{},e),this.name=\"UnsupportedProtocolError\"}};Yt.UnsupportedProtocolError=uB;var IDe=[\"socket\",\"connect\",\"continue\",\"information\",\"upgrade\",\"timeout\"],gB=class extends c6.Duplex{constructor(e,t={},i){super({autoDestroy:!1,highWaterMark:0}),this[Yf]=0,this[qf]=0,this.requestInitialized=!1,this[iB]=new Set,this.redirects=[],this[Jf]=!1,this[nB]=!1,this[BC]=[],this.retryCount=0,this._progressCallbacks=[];let n=()=>this._unlockWrite(),s=()=>this._lockWrite();this.on(\"pipe\",c=>{c.prependListener(\"data\",n),c.on(\"data\",s),c.prependListener(\"end\",n),c.on(\"end\",s)}),this.on(\"unpipe\",c=>{c.off(\"data\",n),c.off(\"data\",s),c.off(\"end\",n),c.off(\"end\",s)}),this.on(\"pipe\",c=>{c instanceof hR.IncomingMessage&&(this.options.headers={...c.headers,...this.options.headers})});let{json:o,body:a,form:l}=t;if((o||a||l)&&this._lockWrite(),Yt.kIsNormalizedAlready in t)this.options=t;else try{this.options=this.constructor.normalizeArguments(e,t,i)}catch(c){Ee.default.nodeStream(t.body)&&t.body.destroy(),this.destroy(c);return}(async()=>{var c;try{this.options.body instanceof $Pe.ReadStream&&await CDe(this.options.body);let{url:u}=this.options;if(!u)throw new TypeError(\"Missing `url` property\");if(this.requestUrl=u.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(c=this[Pi])===null||c===void 0||c.destroy();return}for(let g of this[BC])g();this[BC].length=0,this.requestInitialized=!0}catch(u){if(u instanceof ei){this._beforeError(u);return}this.destroyed||this.destroy(u)}})()}static normalizeArguments(e,t,i){var n,s,o,a,l;let c=t;if(Ee.default.object(e)&&!Ee.default.urlInstance(e))t={...i,...e,...t};else{if(e&&t&&t.url!==void 0)throw new TypeError(\"The `url` option is mutually exclusive with the `input` argument\");t={...i,...t},e!==void 0&&(t.url=e),Ee.default.urlInstance(t.url)&&(t.url=new VA.URL(t.url.toString()))}if(t.cache===!1&&(t.cache=void 0),t.dnsCache===!1&&(t.dnsCache=void 0),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.method),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.headers),Ee.assert.any([Ee.default.string,Ee.default.urlInstance,Ee.default.undefined],t.prefixUrl),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cookieJar),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.searchParams),Ee.assert.any([Ee.default.object,Ee.default.string,Ee.default.undefined],t.cache),Ee.assert.any([Ee.default.object,Ee.default.number,Ee.default.undefined],t.timeout),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.context),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.hooks),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.decompress),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.ignoreInvalidCookies),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.followRedirect),Ee.assert.any([Ee.default.number,Ee.default.undefined],t.maxRedirects),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.throwHttpErrors),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.http2),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.allowGetBody),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.localAddress),Ee.assert.any([d6.isDnsLookupIpVersion,Ee.default.undefined],t.dnsLookupIpVersion),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.https),Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.rejectUnauthorized),t.https&&(Ee.assert.any([Ee.default.boolean,Ee.default.undefined],t.https.rejectUnauthorized),Ee.assert.any([Ee.default.function_,Ee.default.undefined],t.https.checkServerIdentity),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificateAuthority),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.key),Ee.assert.any([Ee.default.string,Ee.default.object,Ee.default.array,Ee.default.undefined],t.https.certificate),Ee.assert.any([Ee.default.string,Ee.default.undefined],t.https.passphrase),Ee.assert.any([Ee.default.string,Ee.default.buffer,Ee.default.array,Ee.default.undefined],t.https.pfx)),Ee.assert.any([Ee.default.object,Ee.default.undefined],t.cacheOptions),Ee.default.string(t.method)?t.method=t.method.toUpperCase():t.method=\"GET\",t.headers===(i==null?void 0:i.headers)?t.headers={...t.headers}:t.headers=sDe({...i==null?void 0:i.headers,...t.headers}),\"slashes\"in t)throw new TypeError(\"The legacy `url.Url` has been deprecated. Use `URL` instead.\");if(\"auth\"in t)throw new TypeError(\"Parameter `auth` is deprecated. Use `username` / `password` instead.\");if(\"searchParams\"in t&&t.searchParams&&t.searchParams!==(i==null?void 0:i.searchParams)){let h;if(Ee.default.string(t.searchParams)||t.searchParams instanceof VA.URLSearchParams)h=new VA.URLSearchParams(t.searchParams);else{pDe(t.searchParams),h=new VA.URLSearchParams;for(let p in t.searchParams){let C=t.searchParams[p];C===null?h.append(p,\"\"):C!==void 0&&h.append(p,C)}}(n=i==null?void 0:i.searchParams)===null||n===void 0||n.forEach((p,C)=>{h.has(C)||h.append(C,p)}),t.searchParams=h}if(t.username=(s=t.username)!==null&&s!==void 0?s:\"\",t.password=(o=t.password)!==null&&o!==void 0?o:\"\",Ee.default.undefined(t.prefixUrl)?t.prefixUrl=(a=i==null?void 0:i.prefixUrl)!==null&&a!==void 0?a:\"\":(t.prefixUrl=t.prefixUrl.toString(),t.prefixUrl!==\"\"&&!t.prefixUrl.endsWith(\"/\")&&(t.prefixUrl+=\"/\")),Ee.default.string(t.url)){if(t.url.startsWith(\"/\"))throw new Error(\"`input` must not start with a slash when using `prefixUrl`\");t.url=p6.default(t.prefixUrl+t.url,t)}else(Ee.default.undefined(t.url)&&t.prefixUrl!==\"\"||t.protocol)&&(t.url=p6.default(t.prefixUrl,t));if(t.url){\"port\"in t&&delete t.port;let{prefixUrl:h}=t;Object.defineProperty(t,\"prefixUrl\",{set:C=>{let y=t.url;if(!y.href.startsWith(C))throw new Error(`Cannot change \\`prefixUrl\\` from ${h} to ${C}: ${y.href}`);t.url=new VA.URL(C+y.href.slice(h.length)),h=C},get:()=>h});let{protocol:p}=t.url;if(p===\"unix:\"&&(p=\"http:\",t.url=new VA.URL(`http://unix${t.url.pathname}${t.url.search}`)),t.searchParams&&(t.url.search=t.searchParams.toString()),p!==\"http:\"&&p!==\"https:\")throw new uB(t);t.username===\"\"?t.username=t.url.username:t.url.username=t.username,t.password===\"\"?t.password=t.url.password:t.url.password=t.password}let{cookieJar:u}=t;if(u){let{setCookie:h,getCookieString:p}=u;Ee.assert.function_(h),Ee.assert.function_(p),h.length===4&&p.length===0&&(h=l6.promisify(h.bind(t.cookieJar)),p=l6.promisify(p.bind(t.cookieJar)),t.cookieJar={setCookie:h,getCookieString:p})}let{cache:g}=t;if(g&&(CR.has(g)||CR.set(g,new g6((h,p)=>{let C=h[Pi](h,p);return Ee.default.promise(C)&&(C.once=(y,B)=>{if(y===\"error\")C.catch(B);else if(y===\"abort\")(async()=>{try{(await C).once(\"abort\",B)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${y}`);return C}),C},g))),t.cacheOptions={...t.cacheOptions},t.dnsCache===!0)pR||(pR=new rDe.default),t.dnsCache=pR;else if(!Ee.default.undefined(t.dnsCache)&&!t.dnsCache.lookup)throw new TypeError(`Parameter \\`dnsCache\\` must be a CacheableLookup instance or a boolean, got ${Ee.default(t.dnsCache)}`);Ee.default.number(t.timeout)?t.timeout={request:t.timeout}:i&&t.timeout!==i.timeout?t.timeout={...i.timeout,...t.timeout}:t.timeout={...t.timeout},t.context||(t.context={});let f=t.hooks===(i==null?void 0:i.hooks);t.hooks={...t.hooks};for(let h of Yt.knownHookEvents)if(h in t.hooks)if(Ee.default.array(t.hooks[h]))t.hooks[h]=[...t.hooks[h]];else throw new TypeError(`Parameter \\`${h}\\` must be an Array, got ${Ee.default(t.hooks[h])}`);else t.hooks[h]=[];if(i&&!f)for(let h of Yt.knownHookEvents)i.hooks[h].length>0&&(t.hooks[h]=[...i.hooks[h],...t.hooks[h]]);if(\"family\"in t&&XA.default('\"options.family\" was never documented, please use \"options.dnsLookupIpVersion\"'),i!=null&&i.https&&(t.https={...i.https,...t.https}),\"rejectUnauthorized\"in t&&XA.default('\"options.rejectUnauthorized\" is now deprecated, please use \"options.https.rejectUnauthorized\"'),\"checkServerIdentity\"in t&&XA.default('\"options.checkServerIdentity\" was never documented, please use \"options.https.checkServerIdentity\"'),\"ca\"in t&&XA.default('\"options.ca\" was never documented, please use \"options.https.certificateAuthority\"'),\"key\"in t&&XA.default('\"options.key\" was never documented, please use \"options.https.key\"'),\"cert\"in t&&XA.default('\"options.cert\" was never documented, please use \"options.https.certificate\"'),\"passphrase\"in t&&XA.default('\"options.passphrase\" was never documented, please use \"options.https.passphrase\"'),\"pfx\"in t&&XA.default('\"options.pfx\" was never documented, please use \"options.https.pfx\"'),\"followRedirects\"in t)throw new TypeError(\"The `followRedirects` option does not exist. Use `followRedirect` instead.\");if(t.agent){for(let h in t.agent)if(h!==\"http\"&&h!==\"https\"&&h!==\"http2\")throw new TypeError(`Expected the \\`options.agent\\` properties to be \\`http\\`, \\`https\\` or \\`http2\\`, got \\`${h}\\``)}return t.maxRedirects=(l=t.maxRedirects)!==null&&l!==void 0?l:0,Yt.setNonEnumerableProperties([i,c],t),gDe.default(t,i)}_lockWrite(){let e=()=>{throw new TypeError(\"The payload has been already provided\")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:t}=e,i=!Ee.default.undefined(e.form),n=!Ee.default.undefined(e.json),s=!Ee.default.undefined(e.body),o=i||n||s,a=Yt.withoutBody.has(e.method)&&!(e.method===\"GET\"&&e.allowGetBody);if(this._cannotHaveBody=a,o){if(a)throw new TypeError(`The \\`${e.method}\\` method cannot be used with a body`);if([s,i,n].filter(l=>l).length>1)throw new TypeError(\"The `body`, `json` and `form` options are mutually exclusive\");if(s&&!(e.body instanceof c6.Readable)&&!Ee.default.string(e.body)&&!Ee.default.buffer(e.body)&&!f6.default(e.body))throw new TypeError(\"The `body` option must be a stream.Readable, string or Buffer\");if(i&&!Ee.default.object(e.form))throw new TypeError(\"The `form` option must be an Object\");{let l=!Ee.default.string(t[\"content-type\"]);s?(f6.default(e.body)&&l&&(t[\"content-type\"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ZA]=e.body):i?(l&&(t[\"content-type\"]=\"application/x-www-form-urlencoded\"),this[ZA]=new VA.URLSearchParams(e.form).toString()):(l&&(t[\"content-type\"]=\"application/json\"),this[ZA]=e.stringifyJson(e.json));let c=await oDe.default(this[ZA],e.headers);Ee.default.undefined(t[\"content-length\"])&&Ee.default.undefined(t[\"transfer-encoding\"])&&!a&&!Ee.default.undefined(c)&&(t[\"content-length\"]=String(c))}}else a?this._lockWrite():this._unlockWrite();this[jf]=Number(t[\"content-length\"])||void 0}async _onResponseBase(e){let{options:t}=this,{url:i}=t;this[I6]=e,t.decompress&&(e=iDe(e));let n=e.statusCode,s=e;s.statusMessage=s.statusMessage?s.statusMessage:u6.STATUS_CODES[n],s.url=t.url.toString(),s.requestUrl=this.requestUrl,s.redirectUrls=this.redirects,s.request=this,s.isFromCache=e.fromCache||!1,s.ip=this.ip,s.retryCount=this.retryCount,this[m6]=s.isFromCache,this[Gf]=Number(e.headers[\"content-length\"])||void 0,this[sB]=e,e.once(\"end\",()=>{this[Gf]=this[Yf],this.emit(\"downloadProgress\",this.downloadProgress)}),e.once(\"error\",a=>{e.destroy(),this._beforeError(new bC(a,this))}),e.once(\"aborted\",()=>{this._beforeError(new bC({name:\"Error\",message:\"The server aborted pending request\",code:\"ECONNRESET\"},this))}),this.emit(\"downloadProgress\",this.downloadProgress);let o=e.headers[\"set-cookie\"];if(Ee.default.object(t.cookieJar)&&o){let a=o.map(async l=>t.cookieJar.setCookie(l,i.toString()));t.ignoreInvalidCookies&&(a=a.map(async l=>l.catch(()=>{})));try{await Promise.all(a)}catch(l){this._beforeError(l);return}}if(t.followRedirect&&e.headers.location&&mDe.has(n)){if(e.resume(),this[Pi]&&(this[dR](),delete this[Pi],this[C6]()),(n===303&&t.method!==\"GET\"&&t.method!==\"HEAD\"||!t.methodRewriting)&&(t.method=\"GET\",\"body\"in t&&delete t.body,\"json\"in t&&delete t.json,\"form\"in t&&delete t.form,this[ZA]=void 0,delete t.headers[\"content-length\"]),this.redirects.length>=t.maxRedirects){this._beforeError(new oB(this));return}try{let l=Buffer.from(e.headers.location,\"binary\").toString(),c=new VA.URL(l,i),u=c.toString();decodeURI(u),c.hostname!==i.hostname||c.port!==i.port?(\"host\"in t.headers&&delete t.headers.host,\"cookie\"in t.headers&&delete t.headers.cookie,\"authorization\"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username=\"\",t.password=\"\")):(c.username=t.username,c.password=t.password),this.redirects.push(u),t.url=c;for(let g of t.hooks.beforeRedirect)await g(t,s);this.emit(\"redirect\",s,t),await this._makeRequest()}catch(l){this._beforeError(l);return}return}if(t.isStream&&t.throwHttpErrors&&!uDe.isResponseOk(s)){this._beforeError(new aB(s));return}e.on(\"readable\",()=>{this[nB]&&this._read()}),this.on(\"resume\",()=>{e.resume()}),this.on(\"pause\",()=>{e.pause()}),e.once(\"end\",()=>{this.push(null)}),this.emit(\"response\",e);for(let a of this[iB])if(!a.headersSent){for(let l in e.headers){let c=t.decompress?l!==\"content-encoding\":!0,u=e.headers[l];c&&a.setHeader(l,u)}a.statusCode=n}}async _onResponse(e){try{await this._onResponseBase(e)}catch(t){this._beforeError(t)}}_onRequest(e){let{options:t}=this,{timeout:i,url:n}=t;tDe.default(e),this[dR]=h6.default(e,i,n);let s=t.cache?\"cacheableResponse\":\"response\";e.once(s,l=>{this._onResponse(l)}),e.once(\"error\",l=>{var c;e.destroy(),(c=e.res)===null||c===void 0||c.removeAllListeners(\"end\"),l=l instanceof h6.TimeoutError?new cB(l,this.timings,this):new ei(l.message,l,this),this._beforeError(l)}),this[C6]=aDe.default(e,this,IDe),this[Pi]=e,this.emit(\"uploadProgress\",this.uploadProgress);let o=this[ZA],a=this.redirects.length===0?this:e;Ee.default.nodeStream(o)?(o.pipe(a),o.once(\"error\",l=>{this._beforeError(new lB(l,this))})):(this._unlockWrite(),Ee.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(a.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),a.end(),this._lockWrite())),this.emit(\"request\",e)}async _createCacheableRequest(e,t){return new Promise((i,n)=>{Object.assign(t,ADe.default(e)),delete t.url;let s,o=CR.get(t.cache)(t,async a=>{a._readableState.autoDestroy=!1,s&&(await s).emit(\"cacheableResponse\",a),i(a)});t.url=e,o.once(\"error\",n),o.once(\"request\",async a=>{s=a,i(s)})})}async _makeRequest(){var e,t,i,n,s;let{options:o}=this,{headers:a}=o;for(let B in a)if(Ee.default.undefined(a[B]))delete a[B];else if(Ee.default.null_(a[B]))throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${B}\\` header`);if(o.decompress&&Ee.default.undefined(a[\"accept-encoding\"])&&(a[\"accept-encoding\"]=hDe?\"gzip, deflate, br\":\"gzip, deflate\"),o.cookieJar){let B=await o.cookieJar.getCookieString(o.url.toString());Ee.default.nonEmptyString(B)&&(o.headers.cookie=B)}for(let B of o.hooks.beforeRequest){let v=await B(o);if(!Ee.default.undefined(v)){o.request=()=>v;break}}o.body&&this[ZA]!==o.body&&(this[ZA]=o.body);let{agent:l,request:c,timeout:u,url:g}=o;if(o.dnsCache&&!(\"lookup\"in o)&&(o.lookup=o.dnsCache.lookup),g.hostname===\"unix\"){let B=/(?<socketPath>.+?):(?<path>.+)/.exec(`${g.pathname}${g.search}`);if(B!=null&&B.groups){let{socketPath:v,path:D}=B.groups;Object.assign(o,{socketPath:v,path:D,host:\"\"})}}let f=g.protocol===\"https:\",h;o.http2?h=nDe.auto:h=f?eDe.request:u6.request;let p=(e=o.request)!==null&&e!==void 0?e:h,C=o.cache?this._createCacheableRequest:p;l&&!o.http2&&(o.agent=l[f?\"https\":\"http\"]),o[Pi]=p,delete o.request,delete o.timeout;let y=o;if(y.shared=(t=o.cacheOptions)===null||t===void 0?void 0:t.shared,y.cacheHeuristic=(i=o.cacheOptions)===null||i===void 0?void 0:i.cacheHeuristic,y.immutableMinTimeToLive=(n=o.cacheOptions)===null||n===void 0?void 0:n.immutableMinTimeToLive,y.ignoreCargoCult=(s=o.cacheOptions)===null||s===void 0?void 0:s.ignoreCargoCult,o.dnsLookupIpVersion!==void 0)try{y.family=d6.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch{throw new Error(\"Invalid `dnsLookupIpVersion` option value\")}o.https&&(\"rejectUnauthorized\"in o.https&&(y.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(y.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(y.ca=o.https.certificateAuthority),o.https.certificate&&(y.cert=o.https.certificate),o.https.key&&(y.key=o.https.key),o.https.passphrase&&(y.passphrase=o.https.passphrase),o.https.pfx&&(y.pfx=o.https.pfx));try{let B=await C(g,y);Ee.default.undefined(B)&&(B=h(g,y)),o.request=c,o.timeout=u,o.agent=l,o.https&&(\"rejectUnauthorized\"in o.https&&delete y.rejectUnauthorized,o.https.checkServerIdentity&&delete y.checkServerIdentity,o.https.certificateAuthority&&delete y.ca,o.https.certificate&&delete y.cert,o.https.key&&delete y.key,o.https.passphrase&&delete y.passphrase,o.https.pfx&&delete y.pfx),dDe(B)?this._onRequest(B):this.writable?(this.once(\"finish\",()=>{this._onResponse(B)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(B)}catch(B){throw B instanceof g6.CacheError?new AB(B,this):new ei(B.message,B,this)}}async _error(e){try{for(let t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new ei(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Jf])return;let{options:t}=this,i=this.retryCount+1;this[Jf]=!0,e instanceof ei||(e=new ei(e.message,e,this));let n=e,{response:s}=n;(async()=>{if(s&&!s.body){s.setEncoding(this._readableState.encoding);try{s.rawBody=await cDe.default(s),s.body=s.rawBody.toString()}catch{}}if(this.listenerCount(\"retry\")!==0){let o;try{let a;s&&\"retry-after\"in s.headers&&(a=Number(s.headers[\"retry-after\"]),Number.isNaN(a)?(a=Date.parse(s.headers[\"retry-after\"])-Date.now(),a<=0&&(a=1)):a*=1e3),o=await t.retry.calculateDelay({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:fDe.default({attemptCount:i,retryOptions:t.retry,error:n,retryAfter:a,computedValue:0})})}catch(a){this._error(new ei(a.message,a,this));return}if(o){let a=async()=>{try{for(let l of this.options.hooks.beforeRetry)await l(this.options,n,i)}catch(l){this._error(new ei(l.message,e,this));return}this.destroyed||(this.destroy(),this.emit(\"retry\",i,e))};this[y6]=setTimeout(a,o);return}}this._error(n)})()}_read(){this[nB]=!0;let e=this[sB];if(e&&!this[Jf]){e.readableLength&&(this[nB]=!1);let t;for(;(t=e.read())!==null;){this[Yf]+=t.length,this[E6]=!0;let i=this.downloadProgress;i.percent<1&&this.emit(\"downloadProgress\",i),this.push(t)}}}_write(e,t,i){let n=()=>{this._writeRequest(e,t,i)};this.requestInitialized?n():this[BC].push(n)}_writeRequest(e,t,i){this[Pi].destroyed||(this._progressCallbacks.push(()=>{this[qf]+=Buffer.byteLength(e,t);let n=this.uploadProgress;n.percent<1&&this.emit(\"uploadProgress\",n)}),this[Pi].write(e,t,n=>{!n&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),i(n)}))}_final(e){let t=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Pi in this)){e();return}if(this[Pi].destroyed){e();return}this[Pi].end(i=>{i||(this[jf]=this[qf],this.emit(\"uploadProgress\",this.uploadProgress),this[Pi].emit(\"upload-complete\")),e(i)})};this.requestInitialized?t():this[BC].push(t)}_destroy(e,t){var i;this[Jf]=!0,clearTimeout(this[y6]),Pi in this&&(this[dR](),!((i=this[sB])===null||i===void 0)&&i.complete||this[Pi].destroy()),e!==null&&!Ee.default.undefined(e)&&!(e instanceof ei)&&(e=new ei(e.message,e,this)),t(e)}get _isAboutToError(){return this[Jf]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,t,i;return((t=(e=this[Pi])===null||e===void 0?void 0:e.destroyed)!==null&&t!==void 0?t:this.destroyed)&&!(!((i=this[I6])===null||i===void 0)&&i.complete)}get socket(){var e,t;return(t=(e=this[Pi])===null||e===void 0?void 0:e.socket)!==null&&t!==void 0?t:void 0}get downloadProgress(){let e;return this[Gf]?e=this[Yf]/this[Gf]:this[Gf]===this[Yf]?e=1:e=0,{percent:e,transferred:this[Yf],total:this[Gf]}}get uploadProgress(){let e;return this[jf]?e=this[qf]/this[jf]:this[jf]===this[qf]?e=1:e=0,{percent:e,transferred:this[qf],total:this[jf]}}get timings(){var e;return(e=this[Pi])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[m6]}pipe(e,t){if(this[E6])throw new Error(\"Failed to pipe. The response has been emitted already.\");return e instanceof hR.ServerResponse&&this[iB].add(e),super.pipe(e,t)}unpipe(e){return e instanceof hR.ServerResponse&&this[iB].delete(e),super.unpipe(e),this}};Yt.default=gB});var SC=w(Ao=>{\"use strict\";var yDe=Ao&&Ao.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),wDe=Ao&&Ao.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&yDe(e,r,t)};Object.defineProperty(Ao,\"__esModule\",{value:!0});Ao.CancelError=Ao.ParseError=void 0;var w6=QC(),mR=class extends w6.RequestError{constructor(e,t){let{options:i}=t.request;super(`${e.message} in \"${i.url.toString()}\"`,e,t.request),this.name=\"ParseError\"}};Ao.ParseError=mR;var ER=class extends w6.RequestError{constructor(e){super(\"Promise was canceled\",{},e),this.name=\"CancelError\"}get isCanceled(){return!0}};Ao.CancelError=ER;wDe(QC(),Ao)});var b6=w(IR=>{\"use strict\";Object.defineProperty(IR,\"__esModule\",{value:!0});var B6=SC(),BDe=(r,e,t,i)=>{let{rawBody:n}=r;try{if(e===\"text\")return n.toString(i);if(e===\"json\")return n.length===0?\"\":t(n.toString());if(e===\"buffer\")return n;throw new B6.ParseError({message:`Unknown body type '${e}'`,name:\"Error\"},r)}catch(s){throw new B6.ParseError(s,r)}};IR.default=BDe});var yR=w(_A=>{\"use strict\";var bDe=_A&&_A.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),QDe=_A&&_A.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&bDe(e,r,t)};Object.defineProperty(_A,\"__esModule\",{value:!0});var SDe=J(\"events\"),vDe=Ya(),xDe=bz(),fB=SC(),Q6=b6(),S6=QC(),PDe=iR(),DDe=cR(),v6=uR(),kDe=[\"request\",\"response\",\"redirect\",\"uploadProgress\",\"downloadProgress\"];function x6(r){let e,t,i=new SDe.EventEmitter,n=new xDe((o,a,l)=>{let c=u=>{let g=new S6.default(void 0,r);g.retryCount=u,g._noPipe=!0,l(()=>g.destroy()),l.shouldReject=!1,l(()=>a(new fB.CancelError(g))),e=g,g.once(\"response\",async p=>{var C;if(p.retryCount=u,p.request.aborted)return;let y;try{y=await DDe.default(g),p.rawBody=y}catch{return}if(g._isAboutToError)return;let B=((C=p.headers[\"content-encoding\"])!==null&&C!==void 0?C:\"\").toLowerCase(),v=[\"gzip\",\"deflate\",\"br\"].includes(B),{options:D}=g;if(v&&!D.decompress)p.body=y;else try{p.body=Q6.default(p,D.responseType,D.parseJson,D.encoding)}catch(T){if(p.body=y.toString(),v6.isResponseOk(p)){g._beforeError(T);return}}try{for(let[T,H]of D.hooks.afterResponse.entries())p=await H(p,async j=>{let $=S6.default.normalizeArguments(void 0,{...j,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},D);$.hooks.afterResponse=$.hooks.afterResponse.slice(0,T);for(let W of $.hooks.beforeRetry)await W($);let V=x6($);return l(()=>{V.catch(()=>{}),V.cancel()}),V})}catch(T){g._beforeError(new fB.RequestError(T.message,T,g));return}if(!v6.isResponseOk(p)){g._beforeError(new fB.HTTPError(p));return}t=p,o(g.options.resolveBodyOnly?p.body:p)});let f=p=>{if(n.isCanceled)return;let{options:C}=g;if(p instanceof fB.HTTPError&&!C.throwHttpErrors){let{response:y}=p;o(g.options.resolveBodyOnly?y.body:y);return}a(p)};g.once(\"error\",f);let h=g.options.body;g.once(\"retry\",(p,C)=>{var y,B;if(h===((y=C.request)===null||y===void 0?void 0:y.options.body)&&vDe.default.nodeStream((B=C.request)===null||B===void 0?void 0:B.options.body)){f(C);return}c(p)}),PDe.default(g,i,kDe)};c(0)});n.on=(o,a)=>(i.on(o,a),n);let s=o=>{let a=(async()=>{await n;let{options:l}=t.request;return Q6.default(t,o,l.parseJson,l.encoding)})();return Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)),a};return n.json=()=>{let{headers:o}=e.options;return!e.writableFinished&&o.accept===void 0&&(o.accept=\"application/json\"),s(\"json\")},n.buffer=()=>s(\"buffer\"),n.text=()=>s(\"text\"),n}_A.default=x6;QDe(SC(),_A)});var P6=w(wR=>{\"use strict\";Object.defineProperty(wR,\"__esModule\",{value:!0});var RDe=SC();function FDe(r,...e){let t=(async()=>{if(r instanceof RDe.RequestError)try{for(let n of e)if(n)for(let s of n)r=await s(r)}catch(n){r=n}throw r})(),i=()=>t;return t.json=i,t.text=i,t.buffer=i,t.on=i,t}wR.default=FDe});var R6=w(BR=>{\"use strict\";Object.defineProperty(BR,\"__esModule\",{value:!0});var D6=Ya();function k6(r){for(let e of Object.values(r))(D6.default.plainObject(e)||D6.default.array(e))&&k6(e);return Object.freeze(r)}BR.default=k6});var N6=w(F6=>{\"use strict\";Object.defineProperty(F6,\"__esModule\",{value:!0})});var bR=w(Qs=>{\"use strict\";var NDe=Qs&&Qs.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),TDe=Qs&&Qs.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&NDe(e,r,t)};Object.defineProperty(Qs,\"__esModule\",{value:!0});Qs.defaultHandler=void 0;var T6=Ya(),bs=yR(),LDe=P6(),pB=QC(),MDe=R6(),ODe={RequestError:bs.RequestError,CacheError:bs.CacheError,ReadError:bs.ReadError,HTTPError:bs.HTTPError,MaxRedirectsError:bs.MaxRedirectsError,TimeoutError:bs.TimeoutError,ParseError:bs.ParseError,CancelError:bs.CancelError,UnsupportedProtocolError:bs.UnsupportedProtocolError,UploadError:bs.UploadError},KDe=async r=>new Promise(e=>{setTimeout(e,r)}),{normalizeArguments:hB}=pB.default,L6=(...r)=>{let e;for(let t of r)e=hB(void 0,t,e);return e},UDe=r=>r.isStream?new pB.default(void 0,r):bs.default(r),HDe=r=>\"defaults\"in r&&\"options\"in r.defaults,GDe=[\"get\",\"post\",\"put\",\"patch\",\"head\",\"delete\"];Qs.defaultHandler=(r,e)=>e(r);var M6=(r,e)=>{if(r)for(let t of r)t(e)},O6=r=>{r._rawHandlers=r.handlers,r.handlers=r.handlers.map(i=>(n,s)=>{let o,a=i(n,l=>(o=s(l),o));if(a!==o&&!n.isStream&&o){let l=a,{then:c,catch:u,finally:g}=l;Object.setPrototypeOf(l,Object.getPrototypeOf(o)),Object.defineProperties(l,Object.getOwnPropertyDescriptors(o)),l.then=c,l.catch=u,l.finally=g}return a});let e=(i,n={},s)=>{var o,a;let l=0,c=u=>r.handlers[l++](u,l===r.handlers.length?UDe:c);if(T6.default.plainObject(i)){let u={...i,...n};pB.setNonEnumerableProperties([i,n],u),n=u,i=void 0}try{let u;try{M6(r.options.hooks.init,n),M6((o=n.hooks)===null||o===void 0?void 0:o.init,n)}catch(f){u=f}let g=hB(i,n,s!=null?s:r.options);if(g[pB.kIsNormalizedAlready]=!0,u)throw new bs.RequestError(u.message,u,g);return c(g)}catch(u){if(n.isStream)throw u;return LDe.default(u,r.options.hooks.beforeError,(a=n.hooks)===null||a===void 0?void 0:a.beforeError)}};e.extend=(...i)=>{let n=[r.options],s=[...r._rawHandlers],o;for(let a of i)HDe(a)?(n.push(a.defaults.options),s.push(...a.defaults._rawHandlers),o=a.defaults.mutableDefaults):(n.push(a),\"handlers\"in a&&s.push(...a.handlers),o=a.mutableDefaults);return s=s.filter(a=>a!==Qs.defaultHandler),s.length===0&&s.push(Qs.defaultHandler),O6({options:L6(...n),handlers:s,mutableDefaults:Boolean(o)})};let t=async function*(i,n){let s=hB(i,n,r.options);s.resolveBodyOnly=!1;let o=s.pagination;if(!T6.default.object(o))throw new TypeError(\"`options.pagination` must be implemented\");let a=[],{countLimit:l}=o,c=0;for(;c<o.requestLimit;){c!==0&&await KDe(o.backoff);let u=await e(void 0,void 0,s),g=await o.transform(u),f=[];for(let p of g)if(o.filter(p,a,f)&&(!o.shouldContinue(p,a,f)||(yield p,o.stackAllItems&&a.push(p),f.push(p),--l<=0)))return;let h=o.paginate(u,a,f);if(h===!1)return;h===u.request.options?s=u.request.options:h!==void 0&&(s=hB(void 0,h,s)),c++}};e.paginate=t,e.paginate.all=async(i,n)=>{let s=[];for await(let o of t(i,n))s.push(o);return s},e.paginate.each=t,e.stream=(i,n)=>e(i,{...n,isStream:!0});for(let i of GDe)e[i]=(n,s)=>e(n,{...s,method:i}),e.stream[i]=(n,s)=>e(n,{...s,method:i,isStream:!0});return Object.assign(e,ODe),Object.defineProperty(e,\"defaults\",{value:r.mutableDefaults?r:MDe.default(r),writable:r.mutableDefaults,configurable:r.mutableDefaults,enumerable:!0}),e.mergeOptions=L6,e};Qs.default=O6;TDe(N6(),Qs)});var CB=w((ja,dB)=>{\"use strict\";var YDe=ja&&ja.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t),Object.defineProperty(r,i,{enumerable:!0,get:function(){return e[t]}})}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),K6=ja&&ja.__exportStar||function(r,e){for(var t in r)t!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,t)&&YDe(e,r,t)};Object.defineProperty(ja,\"__esModule\",{value:!0});var jDe=J(\"url\"),U6=bR(),qDe={options:{method:\"GET\",retry:{limit:2,methods:[\"GET\",\"PUT\",\"HEAD\",\"DELETE\",\"OPTIONS\",\"TRACE\"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:[\"ETIMEDOUT\",\"ECONNRESET\",\"EADDRINUSE\",\"ECONNREFUSED\",\"EPIPE\",\"ENOTFOUND\",\"ENETUNREACH\",\"EAI_AGAIN\"],maxRetryAfter:void 0,calculateDelay:({computedValue:r})=>r},timeout:{},headers:{\"user-agent\":\"got (https://github.com/sindresorhus/got)\"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:\"text\",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:\"\",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:r=>r.request.options.responseType===\"json\"?r.body:JSON.parse(r.body),paginate:r=>{if(!Reflect.has(r.headers,\"link\"))return!1;let e=r.headers.link.split(\",\"),t;for(let i of e){let n=i.split(\";\");if(n[1].includes(\"next\")){t=n[0].trimStart().trim(),t=t.slice(1,-1);break}}return t?{url:new jDe.URL(t)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:r=>JSON.parse(r),stringifyJson:r=>JSON.stringify(r),cacheOptions:{}},handlers:[U6.defaultHandler],mutableDefaults:!1},QR=U6.default(qDe);ja.default=QR;dB.exports=QR;dB.exports.default=QR;dB.exports.__esModule=!0;K6(bR(),ja);K6(yR(),ja)});var j6=w(Wf=>{\"use strict\";var ost=J(\"net\"),JDe=J(\"tls\"),SR=J(\"http\"),H6=J(\"https\"),WDe=J(\"events\"),ast=J(\"assert\"),zDe=J(\"util\");Wf.httpOverHttp=VDe;Wf.httpsOverHttp=XDe;Wf.httpOverHttps=ZDe;Wf.httpsOverHttps=_De;function VDe(r){var e=new qa(r);return e.request=SR.request,e}function XDe(r){var e=new qa(r);return e.request=SR.request,e.createSocket=G6,e.defaultPort=443,e}function ZDe(r){var e=new qa(r);return e.request=H6.request,e}function _De(r){var e=new qa(r);return e.request=H6.request,e.createSocket=G6,e.defaultPort=443,e}function qa(r){var e=this;e.options=r||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||SR.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on(\"free\",function(i,n,s,o){for(var a=Y6(n,s,o),l=0,c=e.requests.length;l<c;++l){var u=e.requests[l];if(u.host===a.host&&u.port===a.port){e.requests.splice(l,1),u.request.onSocket(i);return}}i.destroy(),e.removeSocket(i)})}zDe.inherits(qa,WDe.EventEmitter);qa.prototype.addRequest=function(e,t,i,n){var s=this,o=vR({request:e},s.options,Y6(t,i,n));if(s.sockets.length>=this.maxSockets){s.requests.push(o);return}s.createSocket(o,function(a){a.on(\"free\",l),a.on(\"close\",c),a.on(\"agentRemove\",c),e.onSocket(a);function l(){s.emit(\"free\",a,o)}function c(u){s.removeSocket(a),a.removeListener(\"free\",l),a.removeListener(\"close\",c),a.removeListener(\"agentRemove\",c)}})};qa.prototype.createSocket=function(e,t){var i=this,n={};i.sockets.push(n);var s=vR({},i.proxyOptions,{method:\"CONNECT\",path:e.host+\":\"+e.port,agent:!1,headers:{host:e.host+\":\"+e.port}});e.localAddress&&(s.localAddress=e.localAddress),s.proxyAuth&&(s.headers=s.headers||{},s.headers[\"Proxy-Authorization\"]=\"Basic \"+new Buffer(s.proxyAuth).toString(\"base64\")),$A(\"making CONNECT request\");var o=i.request(s);o.useChunkedEncodingByDefault=!1,o.once(\"response\",a),o.once(\"upgrade\",l),o.once(\"connect\",c),o.once(\"error\",u),o.end();function a(g){g.upgrade=!0}function l(g,f,h){process.nextTick(function(){c(g,f,h)})}function c(g,f,h){if(o.removeAllListeners(),f.removeAllListeners(),g.statusCode!==200){$A(\"tunneling socket could not be established, statusCode=%d\",g.statusCode),f.destroy();var p=new Error(\"tunneling socket could not be established, statusCode=\"+g.statusCode);p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}if(h.length>0){$A(\"got illegal response body from proxy\"),f.destroy();var p=new Error(\"got illegal response body from proxy\");p.code=\"ECONNRESET\",e.request.emit(\"error\",p),i.removeSocket(n);return}return $A(\"tunneling connection has established\"),i.sockets[i.sockets.indexOf(n)]=f,t(f)}function u(g){o.removeAllListeners(),$A(`tunneling socket could not be established, cause=%s\n`,g.message,g.stack);var f=new Error(\"tunneling socket could not be established, cause=\"+g.message);f.code=\"ECONNRESET\",e.request.emit(\"error\",f),i.removeSocket(n)}};qa.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var i=this.requests.shift();i&&this.createSocket(i,function(n){i.request.onSocket(n)})}};function G6(r,e){var t=this;qa.prototype.createSocket.call(t,r,function(i){var n=r.request.getHeader(\"host\"),s=vR({},t.options,{socket:i,servername:n?n.replace(/:.*$/,\"\"):r.host}),o=JDe.connect(0,s);t.sockets[t.sockets.indexOf(i)]=o,e(o)})}function Y6(r,e,t){return typeof r==\"string\"?{host:r,port:e,localAddress:t}:r}function vR(r){for(var e=1,t=arguments.length;e<t;++e){var i=arguments[e];if(typeof i==\"object\")for(var n=Object.keys(i),s=0,o=n.length;s<o;++s){var a=n[s];i[a]!==void 0&&(r[a]=i[a])}}return r}var $A;process.env.NODE_DEBUG&&/\\btunnel\\b/.test(process.env.NODE_DEBUG)?$A=function(){var r=Array.prototype.slice.call(arguments);typeof r[0]==\"string\"?r[0]=\"TUNNEL: \"+r[0]:r.unshift(\"TUNNEL:\"),console.error.apply(console,r)}:$A=function(){};Wf.debug=$A});var J6=w((lst,q6)=>{q6.exports=j6()});var iV=w((IB,FR)=>{var rV=Object.assign({},J(\"fs\")),RR=function(){var r=typeof document<\"u\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<\"u\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e<\"u\"?e:{},i,n;t.ready=new Promise(function(d,E){i=d,n=E});var s={},o;for(o in t)t.hasOwnProperty(o)&&(s[o]=t[o]);var a=[],l=\"./this.program\",c=function(d,E){throw E},u=!1,g=!0,f=\"\";function h(d){return t.locateFile?t.locateFile(d,f):f+d}var p,C,y,B;g&&(u?f=J(\"path\").dirname(f)+\"/\":f=__dirname+\"/\",p=function(E,I){var k=Ca(E);return k?I?k:k.toString():(y||(y=rV),B||(B=J(\"path\")),E=B.normalize(E),y.readFileSync(E,I?null:\"utf8\"))},C=function(E){var I=p(E,!0);return I.buffer||(I=new Uint8Array(I)),re(I.buffer),I},process.argv.length>1&&(l=process.argv[1].replace(/\\\\/g,\"/\")),a=process.argv.slice(2),c=function(d){process.exit(d)},t.inspect=function(){return\"[Emscripten Module object]\"});var v=t.print||console.log.bind(console),D=t.printErr||console.warn.bind(console);for(o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);s=null,t.arguments&&(a=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(c=t.quit);var T=16;function H(d,E){return E||(E=T),Math.ceil(d/E)*E}var j=0,$=function(d){j=d},V;t.wasmBinary&&(V=t.wasmBinary);var W=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&wr(\"no native wasm support detected\");function _(d,E,I){switch(E=E||\"i8\",E.charAt(E.length-1)===\"*\"&&(E=\"i32\"),E){case\"i1\":return ne[d>>0];case\"i8\":return ne[d>>0];case\"i16\":return he[d>>1];case\"i32\":return de[d>>2];case\"i64\":return de[d>>2];case\"float\":return Pt[d>>2];case\"double\":return It[d>>3];default:wr(\"invalid type for getValue: \"+E)}return null}var A,Ae=!1,ge;function re(d,E){d||wr(\"Assertion failed: \"+E)}function M(d){var E=t[\"_\"+d];return re(E,\"Cannot call unknown function \"+d+\", make sure it is exported\"),E}function F(d,E,I,k,L){var Z={string:function(it){var Et=0;if(it!=null&&it!==0){var be=(it.length<<2)+1;Et=b(be),oe(it,Et,be)}return Et},array:function(it){var Et=b(it.length);return fe(it,Et),Et}};function te(it){return E===\"string\"?Fe(it):E===\"boolean\"?Boolean(it):it}var we=M(d),me=[],Je=0;if(k)for(var nt=0;nt<k.length;nt++){var wt=Z[I[nt]];wt?(Je===0&&(Je=YE()),me[nt]=wt(k[nt])):me[nt]=k[nt]}var lt=we.apply(null,me);return lt=te(lt),Je!==0&&jE(Je),lt}function ue(d,E,I,k){I=I||[];var L=I.every(function(te){return te===\"number\"}),Z=E!==\"string\";return Z&&L&&!k?M(d):function(){return F(d,E,I,arguments,k)}}var pe=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0;function ke(d,E,I){for(var k=E+I,L=E;d[L]&&!(L>=k);)++L;if(L-E>16&&d.subarray&&pe)return pe.decode(d.subarray(E,L));for(var Z=\"\";E<L;){var te=d[E++];if(!(te&128)){Z+=String.fromCharCode(te);continue}var we=d[E++]&63;if((te&224)==192){Z+=String.fromCharCode((te&31)<<6|we);continue}var me=d[E++]&63;if((te&240)==224?te=(te&15)<<12|we<<6|me:te=(te&7)<<18|we<<12|me<<6|d[E++]&63,te<65536)Z+=String.fromCharCode(te);else{var Je=te-65536;Z+=String.fromCharCode(55296|Je>>10,56320|Je&1023)}}return Z}function Fe(d,E){return d?ke(Y,d,E):\"\"}function Ne(d,E,I,k){if(!(k>0))return 0;for(var L=I,Z=I+k-1,te=0;te<d.length;++te){var we=d.charCodeAt(te);if(we>=55296&&we<=57343){var me=d.charCodeAt(++te);we=65536+((we&1023)<<10)|me&1023}if(we<=127){if(I>=Z)break;E[I++]=we}else if(we<=2047){if(I+1>=Z)break;E[I++]=192|we>>6,E[I++]=128|we&63}else if(we<=65535){if(I+2>=Z)break;E[I++]=224|we>>12,E[I++]=128|we>>6&63,E[I++]=128|we&63}else{if(I+3>=Z)break;E[I++]=240|we>>18,E[I++]=128|we>>12&63,E[I++]=128|we>>6&63,E[I++]=128|we&63}}return E[I]=0,I-L}function oe(d,E,I){return Ne(d,Y,E,I)}function le(d){for(var E=0,I=0;I<d.length;++I){var k=d.charCodeAt(I);k>=55296&&k<=57343&&(k=65536+((k&1023)<<10)|d.charCodeAt(++I)&1023),k<=127?++E:k<=2047?E+=2:k<=65535?E+=3:E+=4}return E}function Be(d){var E=le(d)+1,I=dt(E);return I&&Ne(d,ne,I,E),I}function fe(d,E){ne.set(d,E)}function ae(d,E){return d%E>0&&(d+=E-d%E),d}var qe,ne,Y,he,ie,de,_e,Pt,It;function Mr(d){qe=d,t.HEAP8=ne=new Int8Array(d),t.HEAP16=he=new Int16Array(d),t.HEAP32=de=new Int32Array(d),t.HEAPU8=Y=new Uint8Array(d),t.HEAPU16=ie=new Uint16Array(d),t.HEAPU32=_e=new Uint32Array(d),t.HEAPF32=Pt=new Float32Array(d),t.HEAPF64=It=new Float64Array(d)}var ii=t.INITIAL_MEMORY||16777216,gi,hr=[],fi=[],ni=[],Ks=!1;function pr(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)fa(t.preRun.shift());wo(hr)}function Ii(){Ks=!0,!t.noFSInit&&!S.init.initialized&&S.init(),ns.init(),wo(fi)}function rs(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)cg(t.postRun.shift());wo(ni)}function fa(d){hr.unshift(d)}function dA(d){fi.unshift(d)}function cg(d){ni.unshift(d)}var is=0,CA=null,ha=null;function wp(d){return d}function mA(d){is++,t.monitorRunDependencies&&t.monitorRunDependencies(is)}function EA(d){if(is--,t.monitorRunDependencies&&t.monitorRunDependencies(is),is==0&&(CA!==null&&(clearInterval(CA),CA=null),ha)){var E=ha;ha=null,E()}}t.preloadedImages={},t.preloadedAudios={};function wr(d){t.onAbort&&t.onAbort(d),d+=\"\",D(d),Ae=!0,ge=1,d=\"abort(\"+d+\"). Build with -s ASSERTIONS=1 for more info.\";var E=new WebAssembly.RuntimeError(d);throw n(E),E}var Tl=\"data:application/octet-stream;base64,\";function ug(d){return d.startsWith(Tl)}var yo=\"data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCGCABKAIUSQtBAXENAAsgASgCKEGCAiABKAIUIAEoAhhrazYCYCABKAIoKAJgIAEoAigoAnRLBEAgASgCKCABKAIoKAJ0NgJgCwsLAkAgASgCKCgCYEEDTwRAIAEgASgCKCgCYEEDazoAEyABQQE7ARAgASgCKCICKAKkLSACKAKgLUEBdGogAS8BEDsBACABLQATIQMgASgCKCICKAKYLSEEIAIgAigCoC0iAkEBajYCoC0gAiAEaiADOgAAIAEgAS8BEEEBazsBECABKAIoIAEtABNB0N0Aai0AAEECdGpBmAlqIgIgAi8BAEEBajsBACABKAIoQYgTagJ/IAEvARBBgAJJBEAgAS8BEC0A0FkMAQsgAS8BEEEHdkGAAmotANBZC0ECdGoiAiACLwEAQQFqOwEAIAEgASgCKCgCoC0gASgCKCgCnC1BAWtGNgIgIAEoAigiAiACKAJ0IAEoAigoAmBrNgJ0IAEoAigiAiABKAIoKAJgIAIoAmxqNgJsIAEoAihBADYCYAwBCyABIAEoAigiAigCOCACKAJsai0AADoADyABKAIoIgIoAqQtIAIoAqAtQQF0akEAOwEAIAEtAA8hAyABKAIoIgIoApgtIQQgAiACKAKgLSICQQFqNgKgLSACIARqIAM6AAAgASgCKCABLQAPQQJ0aiICIAIvAZQBQQFqOwGUASABIAEoAigoAqAtIAEoAigoApwtQQFrRjYCICABKAIoIgIgAigCdEEBazYCdCABKAIoIgIgAigCbEEBajYCbAsgASgCIARAIAEoAigCfyABKAIoKAJcQQBOBEAgASgCKCgCOCABKAIoKAJcagwBC0EACyABKAIoKAJsIAEoAigoAlxrQQAQKCABKAIoIAEoAigoAmw2AlwgASgCKCgCABAcIAEoAigoAgAoAhBFBEAgAUEANgIsDAQLCwwBCwsgASgCKEEANgK0LSABKAIkQQRGBEAgASgCKAJ/IAEoAigoAlxBAE4EQCABKAIoKAI4IAEoAigoAlxqDAELQQALIAEoAigoAmwgASgCKCgCXGtBARAoIAEoAiggASgCKCgCbDYCXCABKAIoKAIAEBwgASgCKCgCACgCEEUEQCABQQI2AiwMAgsgAUEDNgIsDAELIAEoAigoAqAtBEAgASgCKAJ/IAEoAigoAlxBAE4EQCABKAIoKAI4IAEoAigoAlxqDAELQQALIAEoAigoAmwgASgCKCgCXGtBABAoIAEoAiggASgCKCgCbDYCXCABKAIoKAIAEBwgASgCKCgCACgCEEUEQCABQQA2AiwMAgsLIAFBATYCLAsgASgCLCECIAFBMGokACACDAELIAAoAiwgACgCNCAAKAIsKAKEAUEMbEGA7wBqKAIIEQMACwsLNgIEAkAgACgCBEECRwRAIAAoAgRBA0cNAQsgACgCLEGaBTYCBAsCQCAAKAIEBEAgACgCBEECRw0BCyAAKAI4KAIQRQRAIAAoAixBfzYCKAsgAEEANgI8DAILIAAoAgRBAUYEQAJAIAAoAjRBAUYEQCAAKAIsIQIjAEEgayIBJAAgASACNgIcIAFBAzYCGAJAIAEoAhwoArwtQRAgASgCGGtKBEAgAUECNgIUIAEoAhwiAiACLwG4LSABKAIUQf//A3EgASgCHCgCvC10cjsBuC0gASgCHC8BuC1B/wFxIQMgASgCHCgCCCEEIAEoAhwiBigCFCECIAYgAkEBajYCFCACIARqIAM6AAAgASgCHC8BuC1BCHYhAyABKAIcKAIIIQQgASgCHCIGKAIUIQIgBiACQQFqNgIUIAIgBGogAzoAACABKAIcIAEoAhRB//8DcUEQIAEoAhwoArwta3U7AbgtIAEoAhwiAiACKAK8LSABKAIYQRBrajYCvC0MAQsgASgCHCICIAIvAbgtQQIgASgCHCgCvC10cjsBuC0gASgCHCICIAEoAhggAigCvC1qNgK8LQsgAUGS6AAvAQA2AhACQCABKAIcKAK8LUEQIAEoAhBrSgRAIAFBkOgALwEANgIMIAEoAhwiAiACLwG4LSABKAIMQf//A3EgASgCHCgCvC10cjsBuC0gASgCHC8BuC1B/wFxIQMgASgCHCgCCCEEIAEoAhwiBigCFCECIAYgAkEBajYCFCACIARqIAM6AAAgASgCHC8BuC1BCHYhAyABKAIcKAIIIQQgASgCHCIGKAIUIQIgBiACQQFqNgIUIAIgBGogAzoAACABKAIcIAEoAgxB//8DcUEQIAEoAhwoArwta3U7AbgtIAEoAhwiAiACKAK8LSABKAIQQRBrajYCvC0MAQsgASgCHCICIAIvAbgtQZDoAC8BACABKAIcKAK8LXRyOwG4LSABKAIcIgIgASgCECACKAK8LWo2ArwtCyABKAIcELwBIAFBIGokAAwBCyAAKAI0QQVHBEAgACgCLEEAQQBBABBdIAAoAjRBA0YEQCAAKAIsKAJEIAAoAiwoAkxBAWtBAXRqQQA7AQAgACgCLCgCREEAIAAoAiwoAkxBAWtBAXQQMyAAKAIsKAJ0RQRAIAAoAixBADYCbCAAKAIsQQA2AlwgACgCLEEANgK0LQsLCwsgACgCOBAcIAAoAjgoAhBFBEAgACgCLEF/NgIoIABBADYCPAwDCwsLIAAoAjRBBEcEQCAAQQA2AjwMAQsgACgCLCgCGEEATARAIABBATYCPAwBCwJAIAAoAiwoAhhBAkYEQCAAKAI4KAIwQf8BcSECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAAIAAoAjgoAjBBCHZB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCOCgCMEEQdkH/AXEhAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAACAAKAI4KAIwQRh2IQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCOCgCCEH/AXEhAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAACAAKAI4KAIIQQh2Qf8BcSECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAAIAAoAjgoAghBEHZB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCOCgCCEEYdiECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAADAELIAAoAiwgACgCOCgCMEEQdhBLIAAoAiwgACgCOCgCMEH//wNxEEsLIAAoAjgQHCAAKAIsKAIYQQBKBEAgACgCLEEAIAAoAiwoAhhrNgIYCyAAIAAoAiwoAhRFNgI8CyAAKAI8IQEgAEFAayQAIAUgATYCCAwBCyAFKAIMQRBqIQEjAEHgAGsiACQAIAAgATYCWCAAQQI2AlQCQAJAAkAgACgCWBBKDQAgACgCWCgCDEUNACAAKAJYKAIADQEgACgCWCgCBEUNAQsgAEF+NgJcDAELIAAgACgCWCgCHDYCUCAAKAJQKAIEQb/+AEYEQCAAKAJQQcD+ADYCBAsgACAAKAJYKAIMNgJIIAAgACgCWCgCEDYCQCAAIAAoAlgoAgA2AkwgACAAKAJYKAIENgJEIAAgACgCUCgCPDYCPCAAIAAoAlAoAkA2AjggACAAKAJENgI0IAAgACgCQDYCMCAAQQA2AhADQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAJQKAIEQbT+AGsOHwABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fCyAAKAJQKAIMRQRAIAAoAlBBwP4ANgIEDCELA0AgACgCOEEQSQRAIAAoAkRFDSEgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLAkAgACgCUCgCDEECcUUNACAAKAI8QZ+WAkcNACAAKAJQKAIoRQRAIAAoAlBBDzYCKAtBAEEAQQAQGiEBIAAoAlAgATYCHCAAIAAoAjw6AAwgACAAKAI8QQh2OgANIAAoAlAoAhwgAEEMakECEBohASAAKAJQIAE2AhwgAEEANgI8IABBADYCOCAAKAJQQbX+ADYCBAwhCyAAKAJQQQA2AhQgACgCUCgCJARAIAAoAlAoAiRBfzYCMAsCQCAAKAJQKAIMQQFxBEAgACgCPEH/AXFBCHQgACgCPEEIdmpBH3BFDQELIAAoAlhBmgw2AhggACgCUEHR/gA2AgQMIQsgACgCPEEPcUEIRwRAIAAoAlhBmw82AhggACgCUEHR/gA2AgQMIQsgACAAKAI8QQR2NgI8IAAgACgCOEEEazYCOCAAIAAoAjxBD3FBCGo2AhQgACgCUCgCKEUEQCAAKAJQIAAoAhQ2AigLAkAgACgCFEEPTQRAIAAoAhQgACgCUCgCKE0NAQsgACgCWEGTDTYCGCAAKAJQQdH+ADYCBAwhCyAAKAJQQQEgACgCFHQ2AhhBAEEAQQAQPSEBIAAoAlAgATYCHCAAKAJYIAE2AjAgACgCUEG9/gBBv/4AIAAoAjxBgARxGzYCBCAAQQA2AjwgAEEANgI4DCALA0AgACgCOEEQSQRAIAAoAkRFDSAgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAgACgCPDYCFCAAKAJQKAIUQf8BcUEIRwRAIAAoAlhBmw82AhggACgCUEHR/gA2AgQMIAsgACgCUCgCFEGAwANxBEAgACgCWEGgCTYCGCAAKAJQQdH+ADYCBAwgCyAAKAJQKAIkBEAgACgCUCgCJCAAKAI8QQh2QQFxNgIACwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACAAKAI8OgAMIAAgACgCPEEIdjoADSAAKAJQKAIcIABBDGpBAhAaIQEgACgCUCABNgIcCyAAQQA2AjwgAEEANgI4IAAoAlBBtv4ANgIECwNAIAAoAjhBIEkEQCAAKAJERQ0fIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAKAJQKAIkBEAgACgCUCgCJCAAKAI8NgIECwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACAAKAI8OgAMIAAgACgCPEEIdjoADSAAIAAoAjxBEHY6AA4gACAAKAI8QRh2OgAPIAAoAlAoAhwgAEEMakEEEBohASAAKAJQIAE2AhwLIABBADYCPCAAQQA2AjggACgCUEG3/gA2AgQLA0AgACgCOEEQSQRAIAAoAkRFDR4gACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAoAiQEQCAAKAJQKAIkIAAoAjxB/wFxNgIIIAAoAlAoAiQgACgCPEEIdjYCDAsCQCAAKAJQKAIUQYAEcUUNACAAKAJQKAIMQQRxRQ0AIAAgACgCPDoADCAAIAAoAjxBCHY6AA0gACgCUCgCHCAAQQxqQQIQGiEBIAAoAlAgATYCHAsgAEEANgI8IABBADYCOCAAKAJQQbj+ADYCBAsCQCAAKAJQKAIUQYAIcQRAA0AgACgCOEEQSQRAIAAoAkRFDR8gACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAgACgCPDYCRCAAKAJQKAIkBEAgACgCUCgCJCAAKAI8NgIUCwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACAAKAI8OgAMIAAgACgCPEEIdjoADSAAKAJQKAIcIABBDGpBAhAaIQEgACgCUCABNgIcCyAAQQA2AjwgAEEANgI4DAELIAAoAlAoAiQEQCAAKAJQKAIkQQA2AhALCyAAKAJQQbn+ADYCBAsgACgCUCgCFEGACHEEQCAAIAAoAlAoAkQ2AiwgACgCLCAAKAJESwRAIAAgACgCRDYCLAsgACgCLARAAkAgACgCUCgCJEUNACAAKAJQKAIkKAIQRQ0AIAAgACgCUCgCJCgCFCAAKAJQKAJEazYCFCAAKAJQKAIkKAIQIAAoAhRqIAAoAkwCfyAAKAJQKAIkKAIYIAAoAhQgACgCLGpJBEAgACgCUCgCJCgCGCAAKAIUawwBCyAAKAIsCxAZGgsCQCAAKAJQKAIUQYAEcUUNACAAKAJQKAIMQQRxRQ0AIAAoAlAoAhwgACgCTCAAKAIsEBohASAAKAJQIAE2AhwLIAAgACgCRCAAKAIsazYCRCAAIAAoAiwgACgCTGo2AkwgACgCUCIBIAEoAkQgACgCLGs2AkQLIAAoAlAoAkQNGwsgACgCUEEANgJEIAAoAlBBuv4ANgIECwJAIAAoAlAoAhRBgBBxBEAgACgCREUNGyAAQQA2AiwDQCAAKAJMIQEgACAAKAIsIgJBAWo2AiwgACABIAJqLQAANgIUAkAgACgCUCgCJEUNACAAKAJQKAIkKAIcRQ0AIAAoAlAoAkQgACgCUCgCJCgCIE8NACAAKAIUIQIgACgCUCgCJCgCHCEDIAAoAlAiBCgCRCEBIAQgAUEBajYCRCABIANqIAI6AAALIAAoAhQEfyAAKAIsIAAoAkRJBUEAC0EBcQ0ACwJAIAAoAlAoAhRBgARxRQ0AIAAoAlAoAgxBBHFFDQAgACgCUCgCHCAAKAJMIAAoAiwQGiEBIAAoAlAgATYCHAsgACAAKAJEIAAoAixrNgJEIAAgACgCLCAAKAJMajYCTCAAKAIUDRsMAQsgACgCUCgCJARAIAAoAlAoAiRBADYCHAsLIAAoAlBBADYCRCAAKAJQQbv+ADYCBAsCQCAAKAJQKAIUQYAgcQRAIAAoAkRFDRogAEEANgIsA0AgACgCTCEBIAAgACgCLCICQQFqNgIsIAAgASACai0AADYCFAJAIAAoAlAoAiRFDQAgACgCUCgCJCgCJEUNACAAKAJQKAJEIAAoAlAoAiQoAihPDQAgACgCFCECIAAoAlAoAiQoAiQhAyAAKAJQIgQoAkQhASAEIAFBAWo2AkQgASADaiACOgAACyAAKAIUBH8gACgCLCAAKAJESQVBAAtBAXENAAsCQCAAKAJQKAIUQYAEcUUNACAAKAJQKAIMQQRxRQ0AIAAoAlAoAhwgACgCTCAAKAIsEBohASAAKAJQIAE2AhwLIAAgACgCRCAAKAIsazYCRCAAIAAoAiwgACgCTGo2AkwgACgCFA0aDAELIAAoAlAoAiQEQCAAKAJQKAIkQQA2AiQLCyAAKAJQQbz+ADYCBAsgACgCUCgCFEGABHEEQANAIAAoAjhBEEkEQCAAKAJERQ0aIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCwJAIAAoAlAoAgxBBHFFDQAgACgCPCAAKAJQKAIcQf//A3FGDQAgACgCWEH7DDYCGCAAKAJQQdH+ADYCBAwaCyAAQQA2AjwgAEEANgI4CyAAKAJQKAIkBEAgACgCUCgCJCAAKAJQKAIUQQl1QQFxNgIsIAAoAlAoAiRBATYCMAtBAEEAQQAQGiEBIAAoAlAgATYCHCAAKAJYIAE2AjAgACgCUEG//gA2AgQMGAsDQCAAKAI4QSBJBEAgACgCREUNGCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCUCAAKAI8QQh2QYD+A3EgACgCPEEYdmogACgCPEGA/gNxQQh0aiAAKAI8Qf8BcUEYdGoiATYCHCAAKAJYIAE2AjAgAEEANgI8IABBADYCOCAAKAJQQb7+ADYCBAsgACgCUCgCEEUEQCAAKAJYIAAoAkg2AgwgACgCWCAAKAJANgIQIAAoAlggACgCTDYCACAAKAJYIAAoAkQ2AgQgACgCUCAAKAI8NgI8IAAoAlAgACgCODYCQCAAQQI2AlwMGAtBAEEAQQAQPSEBIAAoAlAgATYCHCAAKAJYIAE2AjAgACgCUEG//gA2AgQLIAAoAlRBBUYNFCAAKAJUQQZGDRQLIAAoAlAoAggEQCAAIAAoAjwgACgCOEEHcXY2AjwgACAAKAI4IAAoAjhBB3FrNgI4IAAoAlBBzv4ANgIEDBULA0AgACgCOEEDSQRAIAAoAkRFDRUgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAlAgACgCPEEBcTYCCCAAIAAoAjxBAXY2AjwgACAAKAI4QQFrNgI4AkACQAJAAkACQCAAKAI8QQNxDgQAAQIDBAsgACgCUEHB/gA2AgQMAwsjAEEQayIBIAAoAlA2AgwgASgCDEGw8gA2AlAgASgCDEEJNgJYIAEoAgxBsIIBNgJUIAEoAgxBBTYCXCAAKAJQQcf+ADYCBCAAKAJUQQZGBEAgACAAKAI8QQJ2NgI8IAAgACgCOEECazYCOAwXCwwCCyAAKAJQQcT+ADYCBAwBCyAAKAJYQfANNgIYIAAoAlBB0f4ANgIECyAAIAAoAjxBAnY2AjwgACAAKAI4QQJrNgI4DBQLIAAgACgCPCAAKAI4QQdxdjYCPCAAIAAoAjggACgCOEEHcWs2AjgDQCAAKAI4QSBJBEAgACgCREUNFCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCPEH//wNxIAAoAjxBEHZB//8Dc0cEQCAAKAJYQaEKNgIYIAAoAlBB0f4ANgIEDBQLIAAoAlAgACgCPEH//wNxNgJEIABBADYCPCAAQQA2AjggACgCUEHC/gA2AgQgACgCVEEGRg0SCyAAKAJQQcP+ADYCBAsgACAAKAJQKAJENgIsIAAoAiwEQCAAKAIsIAAoAkRLBEAgACAAKAJENgIsCyAAKAIsIAAoAkBLBEAgACAAKAJANgIsCyAAKAIsRQ0RIAAoAkggACgCTCAAKAIsEBkaIAAgACgCRCAAKAIsazYCRCAAIAAoAiwgACgCTGo2AkwgACAAKAJAIAAoAixrNgJAIAAgACgCLCAAKAJIajYCSCAAKAJQIgEgASgCRCAAKAIsazYCRAwSCyAAKAJQQb/+ADYCBAwRCwNAIAAoAjhBDkkEQCAAKAJERQ0RIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAKAJQIAAoAjxBH3FBgQJqNgJkIAAgACgCPEEFdjYCPCAAIAAoAjhBBWs2AjggACgCUCAAKAI8QR9xQQFqNgJoIAAgACgCPEEFdjYCPCAAIAAoAjhBBWs2AjggACgCUCAAKAI8QQ9xQQRqNgJgIAAgACgCPEEEdjYCPCAAIAAoAjhBBGs2AjgCQCAAKAJQKAJkQZ4CTQRAIAAoAlAoAmhBHk0NAQsgACgCWEH9CTYCGCAAKAJQQdH+ADYCBAwRCyAAKAJQQQA2AmwgACgCUEHF/gA2AgQLA0AgACgCUCgCbCAAKAJQKAJgSQRAA0AgACgCOEEDSQRAIAAoAkRFDRIgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLIAAoAjxBB3EhAiAAKAJQQfQAaiEDIAAoAlAiBCgCbCEBIAQgAUEBajYCbCABQQF0QYDyAGovAQBBAXQgA2ogAjsBACAAIAAoAjxBA3Y2AjwgACAAKAI4QQNrNgI4DAELCwNAIAAoAlAoAmxBE0kEQCAAKAJQQfQAaiECIAAoAlAiAygCbCEBIAMgAUEBajYCbCABQQF0QYDyAGovAQBBAXQgAmpBADsBAAwBCwsgACgCUCAAKAJQQbQKajYCcCAAKAJQIAAoAlAoAnA2AlAgACgCUEEHNgJYIABBACAAKAJQQfQAakETIAAoAlBB8ABqIAAoAlBB2ABqIAAoAlBB9AVqEHU2AhAgACgCEARAIAAoAlhBhwk2AhggACgCUEHR/gA2AgQMEAsgACgCUEEANgJsIAAoAlBBxv4ANgIECwNAAkAgACgCUCgCbCAAKAJQKAJkIAAoAlAoAmhqTw0AA0ACQCAAIAAoAlAoAlAgACgCPEEBIAAoAlAoAlh0QQFrcUECdGooAQA2ASAgAC0AISAAKAI4TQ0AIAAoAkRFDREgACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLAkAgAC8BIkEQSQRAIAAgACgCPCAALQAhdjYCPCAAIAAoAjggAC0AIWs2AjggAC8BIiECIAAoAlBB9ABqIQMgACgCUCIEKAJsIQEgBCABQQFqNgJsIAFBAXQgA2ogAjsBAAwBCwJAIAAvASJBEEYEQANAIAAoAjggAC0AIUECakkEQCAAKAJERQ0UIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjwgAC0AIXY2AjwgACAAKAI4IAAtACFrNgI4IAAoAlAoAmxFBEAgACgCWEHPCTYCGCAAKAJQQdH+ADYCBAwECyAAIAAoAlAgACgCUCgCbEEBdGovAXI2AhQgACAAKAI8QQNxQQNqNgIsIAAgACgCPEECdjYCPCAAIAAoAjhBAms2AjgMAQsCQCAALwEiQRFGBEADQCAAKAI4IAAtACFBA2pJBEAgACgCREUNFSAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACAAKAI8IAAtACF2NgI8IAAgACgCOCAALQAhazYCOCAAQQA2AhQgACAAKAI8QQdxQQNqNgIsIAAgACgCPEEDdjYCPCAAIAAoAjhBA2s2AjgMAQsDQCAAKAI4IAAtACFBB2pJBEAgACgCREUNFCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACAAKAI8IAAtACF2NgI8IAAgACgCOCAALQAhazYCOCAAQQA2AhQgACAAKAI8Qf8AcUELajYCLCAAIAAoAjxBB3Y2AjwgACAAKAI4QQdrNgI4CwsgACgCUCgCbCAAKAIsaiAAKAJQKAJkIAAoAlAoAmhqSwRAIAAoAlhBzwk2AhggACgCUEHR/gA2AgQMAgsDQCAAIAAoAiwiAUEBazYCLCABBEAgACgCFCECIAAoAlBB9ABqIQMgACgCUCIEKAJsIQEgBCABQQFqNgJsIAFBAXQgA2ogAjsBAAwBCwsLDAELCyAAKAJQKAIEQdH+AEYNDiAAKAJQLwH0BEUEQCAAKAJYQfULNgIYIAAoAlBB0f4ANgIEDA8LIAAoAlAgACgCUEG0Cmo2AnAgACgCUCAAKAJQKAJwNgJQIAAoAlBBCTYCWCAAQQEgACgCUEH0AGogACgCUCgCZCAAKAJQQfAAaiAAKAJQQdgAaiAAKAJQQfQFahB1NgIQIAAoAhAEQCAAKAJYQesINgIYIAAoAlBB0f4ANgIEDA8LIAAoAlAgACgCUCgCcDYCVCAAKAJQQQY2AlwgAEECIAAoAlBB9ABqIAAoAlAoAmRBAXRqIAAoAlAoAmggACgCUEHwAGogACgCUEHcAGogACgCUEH0BWoQdTYCECAAKAIQBEAgACgCWEG5CTYCGCAAKAJQQdH+ADYCBAwPCyAAKAJQQcf+ADYCBCAAKAJUQQZGDQ0LIAAoAlBByP4ANgIECwJAIAAoAkRBBkkNACAAKAJAQYICSQ0AIAAoAlggACgCSDYCDCAAKAJYIAAoAkA2AhAgACgCWCAAKAJMNgIAIAAoAlggACgCRDYCBCAAKAJQIAAoAjw2AjwgACgCUCAAKAI4NgJAIAAoAjAhAiMAQeAAayIBIAAoAlg2AlwgASACNgJYIAEgASgCXCgCHDYCVCABIAEoAlwoAgA2AlAgASABKAJQIAEoAlwoAgRBBWtqNgJMIAEgASgCXCgCDDYCSCABIAEoAkggASgCWCABKAJcKAIQa2s2AkQgASABKAJIIAEoAlwoAhBBgQJrajYCQCABIAEoAlQoAiw2AjwgASABKAJUKAIwNgI4IAEgASgCVCgCNDYCNCABIAEoAlQoAjg2AjAgASABKAJUKAI8NgIsIAEgASgCVCgCQDYCKCABIAEoAlQoAlA2AiQgASABKAJUKAJUNgIgIAFBASABKAJUKAJYdEEBazYCHCABQQEgASgCVCgCXHRBAWs2AhgDQCABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiQgASgCLCABKAIccUECdGooAQA2ARACQAJAA0AgASABLQARNgIMIAEgASgCLCABKAIMdjYCLCABIAEoAiggASgCDGs2AiggASABLQAQNgIMIAEoAgxFBEAgAS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyABKAJcQYUPNgIYIAEoAlRB0f4ANgIEDAQLDAILIAEoAgxBwABxRQRAIAEgASgCJCABLwESIAEoAixBASABKAIMdEEBa3FqQQJ0aigBADYBEAwBCwsgASgCDEEgcQRAIAEoAlRBv/4ANgIEDAILIAEoAlxB6Q42AhggASgCVEHR/gA2AgQMAQsgASgCUCABKAJMSQR/IAEoAkggASgCQEkFQQALQQFxDQELCyABIAEoAihBA3Y2AgggASABKAJQIAEoAghrNgJQIAEgASgCKCABKAIIQQN0azYCKCABIAEoAixBASABKAIodEEBa3E2AiwgASgCXCABKAJQNgIAIAEoAlwgASgCSDYCDCABKAJcAn8gASgCUCABKAJMSQRAIAEoAkwgASgCUGtBBWoMAQtBBSABKAJQIAEoAkxraws2AgQgASgCXAJ/IAEoAkggASgCQEkEQCABKAJAIAEoAkhrQYECagwBC0GBAiABKAJIIAEoAkBraws2AhAgASgCVCABKAIsNgI8IAEoAlQgASgCKDYCQCAAIAAoAlgoAgw2AkggACAAKAJYKAIQNgJAIAAgACgCWCgCADYCTCAAIAAoAlgoAgQ2AkQgACAAKAJQKAI8NgI8IAAgACgCUCgCQDYCOCAAKAJQKAIEQb/+AEYEQCAAKAJQQX82Asg3CwwNCyAAKAJQQQA2Asg3A0ACQCAAIAAoAlAoAlAgACgCPEEBIAAoAlAoAlh0QQFrcUECdGooAQA2ASAgAC0AISAAKAI4TQ0AIAAoAkRFDQ0gACAAKAJEQQFrNgJEIAAgACgCTCIBQQFqNgJMIAAgACgCPCABLQAAIAAoAjh0ajYCPCAAIAAoAjhBCGo2AjgMAQsLAkAgAC0AIEUNACAALQAgQfABcQ0AIAAgACgBIDYBGANAAkAgACAAKAJQKAJQIAAvARogACgCPEEBIAAtABkgAC0AGGp0QQFrcSAALQAZdmpBAnRqKAEANgEgIAAoAjggAC0AGSAALQAhak8NACAAKAJERQ0OIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjwgAC0AGXY2AjwgACAAKAI4IAAtABlrNgI4IAAoAlAiASAALQAZIAEoAsg3ajYCyDcLIAAgACgCPCAALQAhdjYCPCAAIAAoAjggAC0AIWs2AjggACgCUCIBIAAtACEgASgCyDdqNgLINyAAKAJQIAAvASI2AkQgAC0AIEUEQCAAKAJQQc3+ADYCBAwNCyAALQAgQSBxBEAgACgCUEF/NgLINyAAKAJQQb/+ADYCBAwNCyAALQAgQcAAcQRAIAAoAlhB6Q42AhggACgCUEHR/gA2AgQMDQsgACgCUCAALQAgQQ9xNgJMIAAoAlBByf4ANgIECyAAKAJQKAJMBEADQCAAKAI4IAAoAlAoAkxJBEAgACgCREUNDSAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCUCIBIAEoAkQgACgCPEEBIAAoAlAoAkx0QQFrcWo2AkQgACAAKAI8IAAoAlAoAkx2NgI8IAAgACgCOCAAKAJQKAJMazYCOCAAKAJQIgEgACgCUCgCTCABKALIN2o2Asg3CyAAKAJQIAAoAlAoAkQ2Asw3IAAoAlBByv4ANgIECwNAAkAgACAAKAJQKAJUIAAoAjxBASAAKAJQKAJcdEEBa3FBAnRqKAEANgEgIAAtACEgACgCOE0NACAAKAJERQ0LIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAALQAgQfABcUUEQCAAIAAoASA2ARgDQAJAIAAgACgCUCgCVCAALwEaIAAoAjxBASAALQAZIAAtABhqdEEBa3EgAC0AGXZqQQJ0aigBADYBICAAKAI4IAAtABkgAC0AIWpPDQAgACgCREUNDCAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACAAKAI8IAAtABl2NgI8IAAgACgCOCAALQAZazYCOCAAKAJQIgEgAC0AGSABKALIN2o2Asg3CyAAIAAoAjwgAC0AIXY2AjwgACAAKAI4IAAtACFrNgI4IAAoAlAiASAALQAhIAEoAsg3ajYCyDcgAC0AIEHAAHEEQCAAKAJYQYUPNgIYIAAoAlBB0f4ANgIEDAsLIAAoAlAgAC8BIjYCSCAAKAJQIAAtACBBD3E2AkwgACgCUEHL/gA2AgQLIAAoAlAoAkwEQANAIAAoAjggACgCUCgCTEkEQCAAKAJERQ0LIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAKAJQIgEgASgCSCAAKAI8QQEgACgCUCgCTHRBAWtxajYCSCAAIAAoAjwgACgCUCgCTHY2AjwgACAAKAI4IAAoAlAoAkxrNgI4IAAoAlAiASAAKAJQKAJMIAEoAsg3ajYCyDcLIAAoAlBBzP4ANgIECyAAKAJARQ0HIAAgACgCMCAAKAJAazYCLAJAIAAoAlAoAkggACgCLEsEQCAAIAAoAlAoAkggACgCLGs2AiwgACgCLCAAKAJQKAIwSwRAIAAoAlAoAsQ3BEAgACgCWEHdDDYCGCAAKAJQQdH+ADYCBAwMCwsCQCAAKAIsIAAoAlAoAjRLBEAgACAAKAIsIAAoAlAoAjRrNgIsIAAgACgCUCgCOCAAKAJQKAIsIAAoAixrajYCKAwBCyAAIAAoAlAoAjggACgCUCgCNCAAKAIsa2o2AigLIAAoAiwgACgCUCgCREsEQCAAIAAoAlAoAkQ2AiwLDAELIAAgACgCSCAAKAJQKAJIazYCKCAAIAAoAlAoAkQ2AiwLIAAoAiwgACgCQEsEQCAAIAAoAkA2AiwLIAAgACgCQCAAKAIsazYCQCAAKAJQIgEgASgCRCAAKAIsazYCRANAIAAgACgCKCIBQQFqNgIoIAEtAAAhASAAIAAoAkgiAkEBajYCSCACIAE6AAAgACAAKAIsQQFrIgE2AiwgAQ0ACyAAKAJQKAJERQRAIAAoAlBByP4ANgIECwwICyAAKAJARQ0GIAAoAlAoAkQhASAAIAAoAkgiAkEBajYCSCACIAE6AAAgACAAKAJAQQFrNgJAIAAoAlBByP4ANgIEDAcLIAAoAlAoAgwEQANAIAAoAjhBIEkEQCAAKAJERQ0IIAAgACgCREEBazYCRCAAIAAoAkwiAUEBajYCTCAAIAAoAjwgAS0AACAAKAI4dGo2AjwgACAAKAI4QQhqNgI4DAELCyAAIAAoAjAgACgCQGs2AjAgACgCWCIBIAAoAjAgASgCFGo2AhQgACgCUCIBIAAoAjAgASgCIGo2AiACQCAAKAJQKAIMQQRxRQ0AIAAoAjBFDQACfyAAKAJQKAIUBEAgACgCUCgCHCAAKAJIIAAoAjBrIAAoAjAQGgwBCyAAKAJQKAIcIAAoAkggACgCMGsgACgCMBA9CyEBIAAoAlAgATYCHCAAKAJYIAE2AjALIAAgACgCQDYCMAJAIAAoAlAoAgxBBHFFDQACfyAAKAJQKAIUBEAgACgCPAwBCyAAKAI8QQh2QYD+A3EgACgCPEEYdmogACgCPEGA/gNxQQh0aiAAKAI8Qf8BcUEYdGoLIAAoAlAoAhxGDQAgACgCWEHIDDYCGCAAKAJQQdH+ADYCBAwICyAAQQA2AjwgAEEANgI4CyAAKAJQQc/+ADYCBAsCQCAAKAJQKAIMRQ0AIAAoAlAoAhRFDQADQCAAKAI4QSBJBEAgACgCREUNByAAIAAoAkRBAWs2AkQgACAAKAJMIgFBAWo2AkwgACAAKAI8IAEtAAAgACgCOHRqNgI8IAAgACgCOEEIajYCOAwBCwsgACgCPCAAKAJQKAIgRwRAIAAoAlhBsQw2AhggACgCUEHR/gA2AgQMBwsgAEEANgI8IABBADYCOAsgACgCUEHQ/gA2AgQLIABBATYCEAwDCyAAQX02AhAMAgsgAEF8NgJcDAMLIABBfjYCXAwCCwsgACgCWCAAKAJINgIMIAAoAlggACgCQDYCECAAKAJYIAAoAkw2AgAgACgCWCAAKAJENgIEIAAoAlAgACgCPDYCPCAAKAJQIAAoAjg2AkACQAJAIAAoAlAoAiwNACAAKAIwIAAoAlgoAhBGDQEgACgCUCgCBEHR/gBPDQEgACgCUCgCBEHO/gBJDQAgACgCVEEERg0BCwJ/IAAoAlghAiAAKAJYKAIMIQMgACgCMCAAKAJYKAIQayEEIwBBIGsiASQAIAEgAjYCGCABIAM2AhQgASAENgIQIAEgASgCGCgCHDYCDAJAIAEoAgwoAjhFBEAgASgCGCgCKEEBIAEoAgwoAih0QQEgASgCGCgCIBEBACECIAEoAgwgAjYCOCABKAIMKAI4RQRAIAFBATYCHAwCCwsgASgCDCgCLEUEQCABKAIMQQEgASgCDCgCKHQ2AiwgASgCDEEANgI0IAEoAgxBADYCMAsCQCABKAIQIAEoAgwoAixPBEAgASgCDCgCOCABKAIUIAEoAgwoAixrIAEoAgwoAiwQGRogASgCDEEANgI0IAEoAgwgASgCDCgCLDYCMAwBCyABIAEoAgwoAiwgASgCDCgCNGs2AgggASgCCCABKAIQSwRAIAEgASgCEDYCCAsgASgCDCgCOCABKAIMKAI0aiABKAIUIAEoAhBrIAEoAggQGRogASABKAIQIAEoAghrNgIQAkAgASgCEARAIAEoAgwoAjggASgCFCABKAIQayABKAIQEBkaIAEoAgwgASgCEDYCNCABKAIMIAEoAgwoAiw2AjAMAQsgASgCDCICIAEoAgggAigCNGo2AjQgASgCDCgCNCABKAIMKAIsRgRAIAEoAgxBADYCNAsgASgCDCgCMCABKAIMKAIsSQRAIAEoAgwiAiABKAIIIAIoAjBqNgIwCwsLIAFBADYCHAsgASgCHCECIAFBIGokACACCwRAIAAoAlBB0v4ANgIEIABBfDYCXAwCCwsgACAAKAI0IAAoAlgoAgRrNgI0IAAgACgCMCAAKAJYKAIQazYCMCAAKAJYIgEgACgCNCABKAIIajYCCCAAKAJYIgEgACgCMCABKAIUajYCFCAAKAJQIgEgACgCMCABKAIgajYCIAJAIAAoAlAoAgxBBHFFDQAgACgCMEUNAAJ/IAAoAlAoAhQEQCAAKAJQKAIcIAAoAlgoAgwgACgCMGsgACgCMBAaDAELIAAoAlAoAhwgACgCWCgCDCAAKAIwayAAKAIwED0LIQEgACgCUCABNgIcIAAoAlggATYCMAsgACgCWCAAKAJQKAJAQcAAQQAgACgCUCgCCBtqQYABQQAgACgCUCgCBEG//gBGG2pBgAJBACAAKAJQKAIEQcf+AEcEfyAAKAJQKAIEQcL+AEYFQQELQQFxG2o2AiwCQAJAIAAoAjRFBEAgACgCMEUNAQsgACgCVEEERw0BCyAAKAIQDQAgAEF7NgIQCyAAIAAoAhA2AlwLIAAoAlwhASAAQeAAaiQAIAUgATYCCAsgBSgCECIAIAApAwAgBSgCDDUCIH03AwACQAJAAkACQAJAIAUoAghBBWoOBwIDAwMDAAEDCyAFQQA2AhwMAwsgBUEBNgIcDAILIAUoAgwoAhRFBEAgBUEDNgIcDAILCyAFKAIMKAIAQQ0gBSgCCBAUIAVBAjYCHAsgBSgCHCEAIAVBIGokACAACyQBAX8jAEEQayIBIAA2AgwgASABKAIMNgIIIAEoAghBAToADAuXAQEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjcDCCADIAMoAhg2AgQCQAJAIAMpAwhC/////w9YBEAgAygCBCgCFEUNAQsgAygCBCgCAEESQQAQFCADQQA6AB8MAQsgAygCBCADKQMIPgIUIAMoAgQgAygCFDYCECADQQE6AB8LIAMtAB9BAXEhACADQSBqJAAgAAukAgECfyMAQRBrIgEkACABIAA2AgggASABKAIINgIEAkAgASgCBC0ABEEBcQRAIAEgASgCBEEQahC4ATYCAAwBCyABKAIEQRBqIQIjAEEQayIAJAAgACACNgIIAkAgACgCCBBKBEAgAEF+NgIMDAELIAAgACgCCCgCHDYCBCAAKAIEKAI4BEAgACgCCCgCKCAAKAIEKAI4IAAoAggoAiQRBAALIAAoAggoAiggACgCCCgCHCAAKAIIKAIkEQQAIAAoAghBADYCHCAAQQA2AgwLIAAoAgwhAiAAQRBqJAAgASACNgIACwJAIAEoAgAEQCABKAIEKAIAQQ0gASgCABAUIAFBADoADwwBCyABQQE6AA8LIAEtAA9BAXEhACABQRBqJAAgAAuyGAEFfyMAQRBrIgQkACAEIAA2AgggBCAEKAIINgIEIAQoAgRBADYCFCAEKAIEQQA2AhAgBCgCBEEANgIgIAQoAgRBADYCHAJAIAQoAgQtAARBAXEEQCAEKAIEQRBqIQEgBCgCBCgCCCECIwBBMGsiACQAIAAgATYCKCAAIAI2AiQgAEEINgIgIABBcTYCHCAAQQk2AhggAEEANgIUIABBwBI2AhAgAEE4NgIMIABBATYCBAJAAkACQCAAKAIQRQ0AIAAoAhAsAABB+O4ALAAARw0AIAAoAgxBOEYNAQsgAEF6NgIsDAELIAAoAihFBEAgAEF+NgIsDAELIAAoAihBADYCGCAAKAIoKAIgRQRAIAAoAihBBTYCICAAKAIoQQA2AigLIAAoAigoAiRFBEAgACgCKEEGNgIkCyAAKAIkQX9GBEAgAEEGNgIkCwJAIAAoAhxBAEgEQCAAQQA2AgQgAEEAIAAoAhxrNgIcDAELIAAoAhxBD0oEQCAAQQI2AgQgACAAKAIcQRBrNgIcCwsCQAJAIAAoAhhBAUgNACAAKAIYQQlKDQAgACgCIEEIRw0AIAAoAhxBCEgNACAAKAIcQQ9KDQAgACgCJEEASA0AIAAoAiRBCUoNACAAKAIUQQBIDQAgACgCFEEESg0AIAAoAhxBCEcNASAAKAIEQQFGDQELIABBfjYCLAwBCyAAKAIcQQhGBEAgAEEJNgIcCyAAIAAoAigoAihBAUHELSAAKAIoKAIgEQEANgIIIAAoAghFBEAgAEF8NgIsDAELIAAoAiggACgCCDYCHCAAKAIIIAAoAig2AgAgACgCCEEqNgIEIAAoAgggACgCBDYCGCAAKAIIQQA2AhwgACgCCCAAKAIcNgIwIAAoAghBASAAKAIIKAIwdDYCLCAAKAIIIAAoAggoAixBAWs2AjQgACgCCCAAKAIYQQdqNgJQIAAoAghBASAAKAIIKAJQdDYCTCAAKAIIIAAoAggoAkxBAWs2AlQgACgCCCAAKAIIKAJQQQJqQQNuNgJYIAAoAigoAiggACgCCCgCLEECIAAoAigoAiARAQAhASAAKAIIIAE2AjggACgCKCgCKCAAKAIIKAIsQQIgACgCKCgCIBEBACEBIAAoAgggATYCQCAAKAIoKAIoIAAoAggoAkxBAiAAKAIoKAIgEQEAIQEgACgCCCABNgJEIAAoAghBADYCwC0gACgCCEEBIAAoAhhBBmp0NgKcLSAAIAAoAigoAiggACgCCCgCnC1BBCAAKAIoKAIgEQEANgIAIAAoAgggACgCADYCCCAAKAIIIAAoAggoApwtQQJ0NgIMAkACQCAAKAIIKAI4RQ0AIAAoAggoAkBFDQAgACgCCCgCREUNACAAKAIIKAIIDQELIAAoAghBmgU2AgQgACgCKEG42QAoAgA2AhggACgCKBC4ARogAEF8NgIsDAELIAAoAgggACgCACAAKAIIKAKcLUEBdkEBdGo2AqQtIAAoAgggACgCCCgCCCAAKAIIKAKcLUEDbGo2ApgtIAAoAgggACgCJDYChAEgACgCCCAAKAIUNgKIASAAKAIIIAAoAiA6ACQgACgCKCEBIwBBEGsiAyQAIAMgATYCDCADKAIMIQIjAEEQayIBJAAgASACNgIIAkAgASgCCBB4BEAgAUF+NgIMDAELIAEoAghBADYCFCABKAIIQQA2AgggASgCCEEANgIYIAEoAghBAjYCLCABIAEoAggoAhw2AgQgASgCBEEANgIUIAEoAgQgASgCBCgCCDYCECABKAIEKAIYQQBIBEAgASgCBEEAIAEoAgQoAhhrNgIYCyABKAIEIAEoAgQoAhhBAkYEf0E5BUEqQfEAIAEoAgQoAhgbCzYCBAJ/IAEoAgQoAhhBAkYEQEEAQQBBABAaDAELQQBBAEEAED0LIQIgASgCCCACNgIwIAEoAgRBADYCKCABKAIEIQUjAEEQayICJAAgAiAFNgIMIAIoAgwgAigCDEGUAWo2ApgWIAIoAgxB0N8ANgKgFiACKAIMIAIoAgxBiBNqNgKkFiACKAIMQeTfADYCrBYgAigCDCACKAIMQfwUajYCsBYgAigCDEH43wA2ArgWIAIoAgxBADsBuC0gAigCDEEANgK8LSACKAIMEL4BIAJBEGokACABQQA2AgwLIAEoAgwhAiABQRBqJAAgAyACNgIIIAMoAghFBEAgAygCDCgCHCECIwBBEGsiASQAIAEgAjYCDCABKAIMIAEoAgwoAixBAXQ2AjwgASgCDCgCRCABKAIMKAJMQQFrQQF0akEAOwEAIAEoAgwoAkRBACABKAIMKAJMQQFrQQF0EDMgASgCDCABKAIMKAKEAUEMbEGA7wBqLwECNgKAASABKAIMIAEoAgwoAoQBQQxsQYDvAGovAQA2AowBIAEoAgwgASgCDCgChAFBDGxBgO8Aai8BBDYCkAEgASgCDCABKAIMKAKEAUEMbEGA7wBqLwEGNgJ8IAEoAgxBADYCbCABKAIMQQA2AlwgASgCDEEANgJ0IAEoAgxBADYCtC0gASgCDEECNgJ4IAEoAgxBAjYCYCABKAIMQQA2AmggASgCDEEANgJIIAFBEGokAAsgAygCCCEBIANBEGokACAAIAE2AiwLIAAoAiwhASAAQTBqJAAgBCABNgIADAELIAQoAgRBEGohASMAQSBrIgAkACAAIAE2AhggAEFxNgIUIABBwBI2AhAgAEE4NgIMAkACQAJAIAAoAhBFDQAgACgCECwAAEHAEiwAAEcNACAAKAIMQThGDQELIABBejYCHAwBCyAAKAIYRQRAIABBfjYCHAwBCyAAKAIYQQA2AhggACgCGCgCIEUEQCAAKAIYQQU2AiAgACgCGEEANgIoCyAAKAIYKAIkRQRAIAAoAhhBBjYCJAsgACAAKAIYKAIoQQFB0DcgACgCGCgCIBEBADYCBCAAKAIERQRAIABBfDYCHAwBCyAAKAIYIAAoAgQ2AhwgACgCBCAAKAIYNgIAIAAoAgRBADYCOCAAKAIEQbT+ADYCBCAAKAIYIQIgACgCFCEDIwBBIGsiASQAIAEgAjYCGCABIAM2AhQCQCABKAIYEEoEQCABQX42AhwMAQsgASABKAIYKAIcNgIMAkAgASgCFEEASARAIAFBADYCECABQQAgASgCFGs2AhQMAQsgASABKAIUQQR1QQVqNgIQIAEoAhRBMEgEQCABIAEoAhRBD3E2AhQLCwJAIAEoAhRFDQAgASgCFEEITgRAIAEoAhRBD0wNAQsgAUF+NgIcDAELAkAgASgCDCgCOEUNACABKAIMKAIoIAEoAhRGDQAgASgCGCgCKCABKAIMKAI4IAEoAhgoAiQRBAAgASgCDEEANgI4CyABKAIMIAEoAhA2AgwgASgCDCABKAIUNgIoIAEoAhghAiMAQRBrIgMkACADIAI2AggCQCADKAIIEEoEQCADQX42AgwMAQsgAyADKAIIKAIcNgIEIAMoAgRBADYCLCADKAIEQQA2AjAgAygCBEEANgI0IAMoAgghBSMAQRBrIgIkACACIAU2AggCQCACKAIIEEoEQCACQX42AgwMAQsgAiACKAIIKAIcNgIEIAIoAgRBADYCICACKAIIQQA2AhQgAigCCEEANgIIIAIoAghBADYCGCACKAIEKAIMBEAgAigCCCACKAIEKAIMQQFxNgIwCyACKAIEQbT+ADYCBCACKAIEQQA2AgggAigCBEEANgIQIAIoAgRBgIACNgIYIAIoAgRBADYCJCACKAIEQQA2AjwgAigCBEEANgJAIAIoAgQgAigCBEG0CmoiBTYCcCACKAIEIAU2AlQgAigCBCAFNgJQIAIoAgRBATYCxDcgAigCBEF/NgLINyACQQA2AgwLIAIoAgwhBSACQRBqJAAgAyAFNgIMCyADKAIMIQIgA0EQaiQAIAEgAjYCHAsgASgCHCECIAFBIGokACAAIAI2AgggACgCCARAIAAoAhgoAiggACgCBCAAKAIYKAIkEQQAIAAoAhhBADYCHAsgACAAKAIINgIcCyAAKAIcIQEgAEEgaiQAIAQgATYCAAsCQCAEKAIABEAgBCgCBCgCAEENIAQoAgAQFCAEQQA6AA8MAQsgBEEBOgAPCyAELQAPQQFxIQAgBEEQaiQAIAALbwEBfyMAQRBrIgEgADYCCCABIAEoAgg2AgQCQCABKAIELQAEQQFxRQRAIAFBADYCDAwBCyABKAIEKAIIQQNIBEAgAUECNgIMDAELIAEoAgQoAghBB0oEQCABQQE2AgwMAQsgAUEANgIMCyABKAIMCywBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDDYCCCABKAIIEBUgAUEQaiQACzwBAX8jAEEQayIDJAAgAyAAOwEOIAMgATYCCCADIAI2AgRBASADKAIIIAMoAgQQtAEhACADQRBqJAAgAAvBEAECfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkADQAJAIAIoAhgoAnRBhgJJBEAgAigCGBBcAkAgAigCGCgCdEGGAk8NACACKAIUDQAgAkEANgIcDAQLIAIoAhgoAnRFDQELIAJBADYCECACKAIYKAJ0QQNPBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsgAigCGCACKAIYKAJgNgJ4IAIoAhggAigCGCgCcDYCZCACKAIYQQI2AmACQCACKAIQRQ0AIAIoAhgoAnggAigCGCgCgAFPDQAgAigCGCgCLEGGAmsgAigCGCgCbCACKAIQa0kNACACKAIYIAIoAhAQtgEhACACKAIYIAA2AmACQCACKAIYKAJgQQVLDQAgAigCGCgCiAFBAUcEQCACKAIYKAJgQQNHDQEgAigCGCgCbCACKAIYKAJwa0GAIE0NAQsgAigCGEECNgJgCwsCQAJAIAIoAhgoAnhBA0kNACACKAIYKAJgIAIoAhgoAnhLDQAgAiACKAIYIgAoAmwgACgCdGpBA2s2AgggAiACKAIYKAJ4QQNrOgAHIAIgAigCGCIAKAJsIAAoAmRBf3NqOwEEIAIoAhgiACgCpC0gACgCoC1BAXRqIAIvAQQ7AQAgAi0AByEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACIAIvAQRBAWs7AQQgAigCGCACLQAHQdDdAGotAABBAnRqQZgJaiIAIAAvAQBBAWo7AQAgAigCGEGIE2oCfyACLwEEQYACSQRAIAIvAQQtANBZDAELIAIvAQRBB3ZBgAJqLQDQWQtBAnRqIgAgAC8BAEEBajsBACACIAIoAhgoAqAtIAIoAhgoApwtQQFrRjYCDCACKAIYIgAgACgCdCACKAIYKAJ4QQFrazYCdCACKAIYIgAgACgCeEECazYCeANAIAIoAhgiASgCbEEBaiEAIAEgADYCbCAAIAIoAghNBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsgAigCGCIBKAJ4QQFrIQAgASAANgJ4IAANAAsgAigCGEEANgJoIAIoAhhBAjYCYCACKAIYIgAgACgCbEEBajYCbCACKAIMBEAgAigCGAJ/IAIoAhgoAlxBAE4EQCACKAIYKAI4IAIoAhgoAlxqDAELQQALIAIoAhgoAmwgAigCGCgCXGtBABAoIAIoAhggAigCGCgCbDYCXCACKAIYKAIAEBwgAigCGCgCACgCEEUEQCACQQA2AhwMBgsLDAELAkAgAigCGCgCaARAIAIgAigCGCIAKAI4IAAoAmxqQQFrLQAAOgADIAIoAhgiACgCpC0gACgCoC1BAXRqQQA7AQAgAi0AAyEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACKAIYIAItAANBAnRqIgAgAC8BlAFBAWo7AZQBIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAgwEQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EAECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHAsgAigCGCIAIAAoAmxBAWo2AmwgAigCGCIAIAAoAnRBAWs2AnQgAigCGCgCACgCEEUEQCACQQA2AhwMBgsMAQsgAigCGEEBNgJoIAIoAhgiACAAKAJsQQFqNgJsIAIoAhgiACAAKAJ0QQFrNgJ0CwsMAQsLIAIoAhgoAmgEQCACIAIoAhgiACgCOCAAKAJsakEBay0AADoAAiACKAIYIgAoAqQtIAAoAqAtQQF0akEAOwEAIAItAAIhASACKAIYIgAoApgtIQMgACAAKAKgLSIAQQFqNgKgLSAAIANqIAE6AAAgAigCGCACLQACQQJ0aiIAIAAvAZQBQQFqOwGUASACIAIoAhgoAqAtIAIoAhgoApwtQQFrRjYCDCACKAIYQQA2AmgLIAIoAhgCfyACKAIYKAJsQQJJBEAgAigCGCgCbAwBC0ECCzYCtC0gAigCFEEERgRAIAIoAhgCfyACKAIYKAJcQQBOBEAgAigCGCgCOCACKAIYKAJcagwBC0EACyACKAIYKAJsIAIoAhgoAlxrQQEQKCACKAIYIAIoAhgoAmw2AlwgAigCGCgCABAcIAIoAhgoAgAoAhBFBEAgAkECNgIcDAILIAJBAzYCHAwBCyACKAIYKAKgLQRAIAIoAhgCfyACKAIYKAJcQQBOBEAgAigCGCgCOCACKAIYKAJcagwBC0EACyACKAIYKAJsIAIoAhgoAlxrQQAQKCACKAIYIAIoAhgoAmw2AlwgAigCGCgCABAcIAIoAhgoAgAoAhBFBEAgAkEANgIcDAILCyACQQE2AhwLIAIoAhwhACACQSBqJAAgAAuVDQECfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkADQAJAIAIoAhgoAnRBhgJJBEAgAigCGBBcAkAgAigCGCgCdEGGAk8NACACKAIUDQAgAkEANgIcDAQLIAIoAhgoAnRFDQELIAJBADYCECACKAIYKAJ0QQNPBEAgAigCGCACKAIYKAJUIAIoAhgoAjggAigCGCgCbEECamotAAAgAigCGCgCSCACKAIYKAJYdHNxNgJIIAIoAhgoAkAgAigCGCgCbCACKAIYKAI0cUEBdGogAigCGCgCRCACKAIYKAJIQQF0ai8BACIAOwEAIAIgAEH//wNxNgIQIAIoAhgoAkQgAigCGCgCSEEBdGogAigCGCgCbDsBAAsCQCACKAIQRQ0AIAIoAhgoAixBhgJrIAIoAhgoAmwgAigCEGtJDQAgAigCGCACKAIQELYBIQAgAigCGCAANgJgCwJAIAIoAhgoAmBBA08EQCACIAIoAhgoAmBBA2s6AAsgAiACKAIYIgAoAmwgACgCcGs7AQggAigCGCIAKAKkLSAAKAKgLUEBdGogAi8BCDsBACACLQALIQEgAigCGCIAKAKYLSEDIAAgACgCoC0iAEEBajYCoC0gACADaiABOgAAIAIgAi8BCEEBazsBCCACKAIYIAItAAtB0N0Aai0AAEECdGpBmAlqIgAgAC8BAEEBajsBACACKAIYQYgTagJ/IAIvAQhBgAJJBEAgAi8BCC0A0FkMAQsgAi8BCEEHdkGAAmotANBZC0ECdGoiACAALwEAQQFqOwEAIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAhgiACAAKAJ0IAIoAhgoAmBrNgJ0AkACQCACKAIYKAJgIAIoAhgoAoABSw0AIAIoAhgoAnRBA0kNACACKAIYIgAgACgCYEEBazYCYANAIAIoAhgiACAAKAJsQQFqNgJsIAIoAhggAigCGCgCVCACKAIYKAI4IAIoAhgoAmxBAmpqLQAAIAIoAhgoAkggAigCGCgCWHRzcTYCSCACKAIYKAJAIAIoAhgoAmwgAigCGCgCNHFBAXRqIAIoAhgoAkQgAigCGCgCSEEBdGovAQAiADsBACACIABB//8DcTYCECACKAIYKAJEIAIoAhgoAkhBAXRqIAIoAhgoAmw7AQAgAigCGCIBKAJgQQFrIQAgASAANgJgIAANAAsgAigCGCIAIAAoAmxBAWo2AmwMAQsgAigCGCIAIAIoAhgoAmAgACgCbGo2AmwgAigCGEEANgJgIAIoAhggAigCGCgCOCACKAIYKAJsai0AADYCSCACKAIYIAIoAhgoAlQgAigCGCgCOCACKAIYKAJsQQFqai0AACACKAIYKAJIIAIoAhgoAlh0c3E2AkgLDAELIAIgAigCGCIAKAI4IAAoAmxqLQAAOgAHIAIoAhgiACgCpC0gACgCoC1BAXRqQQA7AQAgAi0AByEBIAIoAhgiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACKAIYIAItAAdBAnRqIgAgAC8BlAFBAWo7AZQBIAIgAigCGCgCoC0gAigCGCgCnC1BAWtGNgIMIAIoAhgiACAAKAJ0QQFrNgJ0IAIoAhgiACAAKAJsQQFqNgJsCyACKAIMBEAgAigCGAJ/IAIoAhgoAlxBAE4EQCACKAIYKAI4IAIoAhgoAlxqDAELQQALIAIoAhgoAmwgAigCGCgCXGtBABAoIAIoAhggAigCGCgCbDYCXCACKAIYKAIAEBwgAigCGCgCACgCEEUEQCACQQA2AhwMBAsLDAELCyACKAIYAn8gAigCGCgCbEECSQRAIAIoAhgoAmwMAQtBAgs2ArQtIAIoAhRBBEYEQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EBECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHCACKAIYKAIAKAIQRQRAIAJBAjYCHAwCCyACQQM2AhwMAQsgAigCGCgCoC0EQCACKAIYAn8gAigCGCgCXEEATgRAIAIoAhgoAjggAigCGCgCXGoMAQtBAAsgAigCGCgCbCACKAIYKAJca0EAECggAigCGCACKAIYKAJsNgJcIAIoAhgoAgAQHCACKAIYKAIAKAIQRQRAIAJBADYCHAwCCwsgAkEBNgIcCyACKAIcIQAgAkEgaiQAIAALBwAgAC8BMAspAQF/IwBBEGsiAiQAIAIgADYCDCACIAE2AgggAigCCBAVIAJBEGokAAs6AQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgggAygCBGwQGCEAIANBEGokACAAC84FAQF/IwBB0ABrIgUkACAFIAA2AkQgBSABNgJAIAUgAjYCPCAFIAM3AzAgBSAENgIsIAUgBSgCQDYCKAJAAkACQAJAAkACQAJAAkACQCAFKAIsDg8AAQIDBQYHBwcHBwcHBwQHCwJ/IAUoAkQhASAFKAIoIQIjAEHgAGsiACQAIAAgATYCWCAAIAI2AlQgACAAKAJYIABByABqQgwQKyIDNwMIAkAgA0IAUwRAIAAoAlQgACgCWBAXIABBfzYCXAwBCyAAKQMIQgxSBEAgACgCVEERQQAQFCAAQX82AlwMAQsgACgCVCAAQcgAaiAAQcgAakIMQQAQfCAAKAJYIABBEGoQOUEASARAIABBADYCXAwBCyAAKAI4IABBBmogAEEEahCNAQJAIAAtAFMgACgCPEEYdkYNACAALQBTIAAvAQZBCHZGDQAgACgCVEEbQQAQFCAAQX82AlwMAQsgAEEANgJcCyAAKAJcIQEgAEHgAGokACABQQBICwRAIAVCfzcDSAwICyAFQgA3A0gMBwsgBSAFKAJEIAUoAjwgBSkDMBArIgM3AyAgA0IAUwRAIAUoAiggBSgCRBAXIAVCfzcDSAwHCyAFKAJAIAUoAjwgBSgCPCAFKQMgQQAQfCAFIAUpAyA3A0gMBgsgBUIANwNIDAULIAUgBSgCPDYCHCAFKAIcQQA7ATIgBSgCHCIAIAApAwBCgAGENwMAIAUoAhwpAwBCCINCAFIEQCAFKAIcIgAgACkDIEIMfTcDIAsgBUIANwNIDAQLIAVBfzYCFCAFQQU2AhAgBUEENgIMIAVBAzYCCCAFQQI2AgQgBUEBNgIAIAVBACAFEDQ3A0gMAwsgBSAFKAIoIAUoAjwgBSkDMBBDNwNIDAILIAUoAigQvwEgBUIANwNIDAELIAUoAihBEkEAEBQgBUJ/NwNICyAFKQNIIQMgBUHQAGokACADC+4CAQF/IwBBIGsiBSQAIAUgADYCGCAFIAE2AhQgBSACOwESIAUgAzYCDCAFIAQ2AggCQAJAAkAgBSgCCEUNACAFKAIURQ0AIAUvARJBAUYNAQsgBSgCGEEIakESQQAQFCAFQQA2AhwMAQsgBSgCDEEBcQRAIAUoAhhBCGpBGEEAEBQgBUEANgIcDAELIAVBGBAYIgA2AgQgAEUEQCAFKAIYQQhqQQ5BABAUIAVBADYCHAwBCyMAQRBrIgAgBSgCBDYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCAFKAIEQfis0ZEBNgIMIAUoAgRBic+VmgI2AhAgBSgCBEGQ8dmiAzYCFCAFKAIEQQAgBSgCCCAFKAIIEC6tQQEQfCAFIAUoAhggBSgCFEEDIAUoAgQQYSIANgIAIABFBEAgBSgCBBC/ASAFQQA2AhwMAQsgBSAFKAIANgIcCyAFKAIcIQAgBUEgaiQAIAALBwAgACgCIAu9GAECfyMAQfAAayIEJAAgBCAANgJkIAQgATYCYCAEIAI3A1ggBCADNgJUIAQgBCgCZDYCUAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBCgCVA4UBgcCDAQFCg8AAwkRCxAOCBIBEg0SC0EAQgBBACAEKAJQEEwhACAEKAJQIAA2AhQgAEUEQCAEQn83A2gMEwsgBCgCUCgCFEIANwM4IAQoAlAoAhRCADcDQCAEQgA3A2gMEgsgBCgCUCgCECEBIAQpA1ghAiAEKAJQIQMjAEFAaiIAJAAgACABNgI4IAAgAjcDMCAAIAM2AiwCQCAAKQMwUARAIABBAEIAQQEgACgCLBBMNgI8DAELIAApAzAgACgCOCkDMFYEQCAAKAIsQRJBABAUIABBADYCPAwBCyAAKAI4KAIoBEAgACgCLEEdQQAQFCAAQQA2AjwMAQsgACAAKAI4IAApAzAQwAE3AyAgACAAKQMwIAAoAjgoAgQgACkDIKdBA3RqKQMAfTcDGCAAKQMYUARAIAAgACkDIEIBfTcDICAAIAAoAjgoAgAgACkDIKdBBHRqKQMINwMYCyAAIAAoAjgoAgAgACkDIKdBBHRqKQMIIAApAxh9NwMQIAApAxAgACkDMFYEQCAAKAIsQRxBABAUIABBADYCPAwBCyAAIAAoAjgoAgAgACkDIEIBfEEAIAAoAiwQTCIBNgIMIAFFBEAgAEEANgI8DAELIAAoAgwoAgAgACgCDCkDCEIBfadBBHRqIAApAxg3AwggACgCDCgCBCAAKAIMKQMIp0EDdGogACkDMDcDACAAKAIMIAApAzA3AzAgACgCDAJ+IAAoAjgpAxggACgCDCkDCEIBfVQEQCAAKAI4KQMYDAELIAAoAgwpAwhCAX0LNwMYIAAoAjggACgCDDYCKCAAKAIMIAAoAjg2AiggACgCOCAAKAIMKQMINwMgIAAoAgwgACkDIEIBfDcDICAAIAAoAgw2AjwLIAAoAjwhASAAQUBrJAAgASEAIAQoAlAgADYCFCAARQRAIARCfzcDaAwSCyAEKAJQKAIUIAQpA1g3AzggBCgCUCgCFCAEKAJQKAIUKQMINwNAIARCADcDaAwRCyAEQgA3A2gMEAsgBCgCUCgCEBAyIAQoAlAgBCgCUCgCFDYCECAEKAJQQQA2AhQgBEIANwNoDA8LIAQgBCgCUCAEKAJgIAQpA1gQQzcDaAwOCyAEKAJQKAIQEDIgBCgCUCgCFBAyIAQoAlAQFSAEQgA3A2gMDQsgBCgCUCgCEEIANwM4IAQoAlAoAhBCADcDQCAEQgA3A2gMDAsgBCkDWEL///////////8AVgRAIAQoAlBBEkEAEBQgBEJ/NwNoDAwLIAQoAlAoAhAhASAEKAJgIQMgBCkDWCECIwBBQGoiACQAIAAgATYCNCAAIAM2AjAgACACNwMoIAACfiAAKQMoIAAoAjQpAzAgACgCNCkDOH1UBEAgACkDKAwBCyAAKAI0KQMwIAAoAjQpAzh9CzcDKAJAIAApAyhQBEAgAEIANwM4DAELIAApAyhC////////////AFYEQCAAQn83AzgMAQsgACAAKAI0KQNANwMYIAAgACgCNCkDOCAAKAI0KAIEIAApAxinQQN0aikDAH03AxAgAEIANwMgA0AgACkDICAAKQMoVARAIAACfiAAKQMoIAApAyB9IAAoAjQoAgAgACkDGKdBBHRqKQMIIAApAxB9VARAIAApAyggACkDIH0MAQsgACgCNCgCACAAKQMYp0EEdGopAwggACkDEH0LNwMIIAAoAjAgACkDIKdqIAAoAjQoAgAgACkDGKdBBHRqKAIAIAApAxCnaiAAKQMIpxAZGiAAKQMIIAAoAjQoAgAgACkDGKdBBHRqKQMIIAApAxB9UQRAIAAgACkDGEIBfDcDGAsgACAAKQMIIAApAyB8NwMgIABCADcDEAwBCwsgACgCNCIBIAApAyAgASkDOHw3AzggACgCNCAAKQMYNwNAIAAgACkDIDcDOAsgACkDOCECIABBQGskACAEIAI3A2gMCwsgBEEAQgBBACAEKAJQEEw2AkwgBCgCTEUEQCAEQn83A2gMCwsgBCgCUCgCEBAyIAQoAlAgBCgCTDYCECAEQgA3A2gMCgsgBCgCUCgCFBAyIAQoAlBBADYCFCAEQgA3A2gMCQsgBCAEKAJQKAIQIAQoAmAgBCkDWCAEKAJQEMEBrDcDaAwICyAEIAQoAlAoAhQgBCgCYCAEKQNYIAQoAlAQwQGsNwNoDAcLIAQpA1hCOFQEQCAEKAJQQRJBABAUIARCfzcDaAwHCyAEIAQoAmA2AkggBCgCSBA7IAQoAkggBCgCUCgCDDYCKCAEKAJIIAQoAlAoAhApAzA3AxggBCgCSCAEKAJIKQMYNwMgIAQoAkhBADsBMCAEKAJIQQA7ATIgBCgCSELcATcDACAEQjg3A2gMBgsgBCgCUCAEKAJgKAIANgIMIARCADcDaAwFCyAEQX82AkAgBEETNgI8IARBCzYCOCAEQQ02AjQgBEEMNgIwIARBCjYCLCAEQQ82AiggBEEJNgIkIARBETYCICAEQQg2AhwgBEEHNgIYIARBBjYCFCAEQQU2AhAgBEEENgIMIARBAzYCCCAEQQI2AgQgBEEBNgIAIARBACAEEDQ3A2gMBAsgBCgCUCgCECkDOEL///////////8AVgRAIAQoAlBBHkE9EBQgBEJ/NwNoDAQLIAQgBCgCUCgCECkDODcDaAwDCyAEKAJQKAIUKQM4Qv///////////wBWBEAgBCgCUEEeQT0QFCAEQn83A2gMAwsgBCAEKAJQKAIUKQM4NwNoDAILIAQpA1hC////////////AFYEQCAEKAJQQRJBABAUIARCfzcDaAwCCyAEKAJQKAIUIQEgBCgCYCEDIAQpA1ghAiAEKAJQIQUjAEHgAGsiACQAIAAgATYCVCAAIAM2AlAgACACNwNIIAAgBTYCRAJAIAApA0ggACgCVCkDOCAAKQNIfEL//wN8VgRAIAAoAkRBEkEAEBQgAEJ/NwNYDAELIAAgACgCVCgCBCAAKAJUKQMIp0EDdGopAwA3AyAgACkDICAAKAJUKQM4IAApA0h8VARAIAAgACgCVCkDCCAAKQNIIAApAyAgACgCVCkDOH19Qv//A3xCEIh8NwMYIAApAxggACgCVCkDEFYEQCAAIAAoAlQpAxA3AxAgACkDEFAEQCAAQhA3AxALA0AgACkDECAAKQMYVARAIAAgACkDEEIBhjcDEAwBCwsgACgCVCAAKQMQIAAoAkQQwgFBAXFFBEAgACgCREEOQQAQFCAAQn83A1gMAwsLA0AgACgCVCkDCCAAKQMYVARAQYCABBAYIQEgACgCVCgCACAAKAJUKQMIp0EEdGogATYCACABBEAgACgCVCgCACAAKAJUKQMIp0EEdGpCgIAENwMIIAAoAlQiASABKQMIQgF8NwMIIAAgACkDIEKAgAR8NwMgIAAoAlQoAgQgACgCVCkDCKdBA3RqIAApAyA3AwAMAgUgACgCREEOQQAQFCAAQn83A1gMBAsACwsLIAAgACgCVCkDQDcDMCAAIAAoAlQpAzggACgCVCgCBCAAKQMwp0EDdGopAwB9NwMoIABCADcDOANAIAApAzggACkDSFQEQCAAAn4gACkDSCAAKQM4fSAAKAJUKAIAIAApAzCnQQR0aikDCCAAKQMofVQEQCAAKQNIIAApAzh9DAELIAAoAlQoAgAgACkDMKdBBHRqKQMIIAApAyh9CzcDCCAAKAJUKAIAIAApAzCnQQR0aigCACAAKQMop2ogACgCUCAAKQM4p2ogACkDCKcQGRogACkDCCAAKAJUKAIAIAApAzCnQQR0aikDCCAAKQMofVEEQCAAIAApAzBCAXw3AzALIAAgACkDCCAAKQM4fDcDOCAAQgA3AygMAQsLIAAoAlQiASAAKQM4IAEpAzh8NwM4IAAoAlQgACkDMDcDQCAAKAJUKQM4IAAoAlQpAzBWBEAgACgCVCAAKAJUKQM4NwMwCyAAIAApAzg3A1gLIAApA1ghAiAAQeAAaiQAIAQgAjcDaAwBCyAEKAJQQRxBABAUIARCfzcDaAsgBCkDaCECIARB8ABqJAAgAgsHACAAKAIACxgAQaibAUIANwIAQbCbAUEANgIAQaibAQuGAQIEfwF+IwBBEGsiASQAAkAgACkDMFAEQAwBCwNAAkAgACAFQQAgAUEPaiABQQhqEIoBIgRBf0YNACABLQAPQQNHDQAgAiABKAIIQYCAgIB/cUGAgICAekZqIQILQX8hAyAEQX9GDQEgAiEDIAVCAXwiBSAAKQMwVA0ACwsgAUEQaiQAIAMLC4GNASMAQYAIC4EMaW5zdWZmaWNpZW50IG1lbW9yeQBuZWVkIGRpY3Rpb25hcnkALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABaaXAgYXJjaGl2ZSBpbmNvbnNpc3RlbnQASW52YWxpZCBhcmd1bWVudABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQAaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0AHVua25vd24gaGVhZGVyIGZsYWdzIHNldABpbnZhbGlkIGRpc3RhbmNlcyBzZXQAaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdABGaWxlIGFscmVhZHkgZXhpc3RzAHRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzAGludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMAJXMlcyVzAGJ1ZmZlciBlcnJvcgBObyBlcnJvcgBzdHJlYW0gZXJyb3IAVGVsbCBlcnJvcgBJbnRlcm5hbCBlcnJvcgBTZWVrIGVycm9yAFdyaXRlIGVycm9yAGZpbGUgZXJyb3IAUmVhZCBlcnJvcgBabGliIGVycm9yAGRhdGEgZXJyb3IAQ1JDIGVycm9yAGluY29tcGF0aWJsZSB2ZXJzaW9uAG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=\";ug(yo)||(yo=h(yo));function gg(d){try{if(d==yo&&V)return new Uint8Array(V);var E=Ca(d);if(E)return E;if(C)return C(d);throw\"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)\"}catch(I){wr(I)}}function Bp(d,E){var I,k,L;try{L=gg(d),k=new WebAssembly.Module(L),I=new WebAssembly.Instance(k,E)}catch(te){var Z=te.toString();throw D(\"failed to compile wasm module: \"+Z),(Z.includes(\"imported Memory\")||Z.includes(\"memory import\"))&&D(\"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).\"),te}return[I,k]}function bp(){var d={a:ma};function E(L,Z){var te=L.exports;t.asm=te,A=t.asm.u,Mr(A.buffer),gi=t.asm.pa,dA(t.asm.v),EA(\"wasm-instantiate\")}if(mA(\"wasm-instantiate\"),t.instantiateWasm)try{var I=t.instantiateWasm(d,E);return I}catch(L){return D(\"Module.instantiateWasm callback failed with error: \"+L),!1}var k=Bp(yo,d);return E(k[0]),t.asm}var vr,se;function wo(d){for(;d.length>0;){var E=d.shift();if(typeof E==\"function\"){E(t);continue}var I=E.func;typeof I==\"number\"?E.arg===void 0?gi.get(I)():gi.get(I)(E.arg):I(E.arg===void 0?null:E.arg)}}function Fn(d,E){var I=new Date(de[d>>2]*1e3);de[E>>2]=I.getUTCSeconds(),de[E+4>>2]=I.getUTCMinutes(),de[E+8>>2]=I.getUTCHours(),de[E+12>>2]=I.getUTCDate(),de[E+16>>2]=I.getUTCMonth(),de[E+20>>2]=I.getUTCFullYear()-1900,de[E+24>>2]=I.getUTCDay(),de[E+36>>2]=0,de[E+32>>2]=0;var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[E+28>>2]=L,Fn.GMTString||(Fn.GMTString=Be(\"GMT\")),de[E+40>>2]=Fn.GMTString,E}function fg(d,E){return Fn(d,E)}var bt={splitPath:function(d){var E=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return E.exec(d).slice(1)},normalizeArray:function(d,E){for(var I=0,k=d.length-1;k>=0;k--){var L=d[k];L===\".\"?d.splice(k,1):L===\"..\"?(d.splice(k,1),I++):I&&(d.splice(k,1),I--)}if(E)for(;I;I--)d.unshift(\"..\");return d},normalize:function(d){var E=d.charAt(0)===\"/\",I=d.substr(-1)===\"/\";return d=bt.normalizeArray(d.split(\"/\").filter(function(k){return!!k}),!E).join(\"/\"),!d&&!E&&(d=\".\"),d&&I&&(d+=\"/\"),(E?\"/\":\"\")+d},dirname:function(d){var E=bt.splitPath(d),I=E[0],k=E[1];return!I&&!k?\".\":(k&&(k=k.substr(0,k.length-1)),I+k)},basename:function(d){if(d===\"/\")return\"/\";d=bt.normalize(d),d=d.replace(/\\/$/,\"\");var E=d.lastIndexOf(\"/\");return E===-1?d:d.substr(E+1)},extname:function(d){return bt.splitPath(d)[3]},join:function(){var d=Array.prototype.slice.call(arguments,0);return bt.normalize(d.join(\"/\"))},join2:function(d,E){return bt.normalize(d+\"/\"+E)}};function Ll(){if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"){var d=new Uint8Array(1);return function(){return crypto.getRandomValues(d),d[0]}}else if(g)try{var E=J(\"crypto\");return function(){return E.randomBytes(1)[0]}}catch{}return function(){wr(\"randomDevice\")}}var Nn={resolve:function(){for(var d=\"\",E=!1,I=arguments.length-1;I>=-1&&!E;I--){var k=I>=0?arguments[I]:S.cwd();if(typeof k!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!k)return\"\";d=k+\"/\"+d,E=k.charAt(0)===\"/\"}return d=bt.normalizeArray(d.split(\"/\").filter(function(L){return!!L}),!E).join(\"/\"),(E?\"/\":\"\")+d||\".\"},relative:function(d,E){d=Nn.resolve(d).substr(1),E=Nn.resolve(E).substr(1);function I(Je){for(var nt=0;nt<Je.length&&Je[nt]===\"\";nt++);for(var wt=Je.length-1;wt>=0&&Je[wt]===\"\";wt--);return nt>wt?[]:Je.slice(nt,wt-nt+1)}for(var k=I(d.split(\"/\")),L=I(E.split(\"/\")),Z=Math.min(k.length,L.length),te=Z,we=0;we<Z;we++)if(k[we]!==L[we]){te=we;break}for(var me=[],we=te;we<k.length;we++)me.push(\"..\");return me=me.concat(L.slice(te)),me.join(\"/\")}},ns={ttys:[],init:function(){},shutdown:function(){},register:function(d,E){ns.ttys[d]={input:[],output:[],ops:E},S.registerDevice(d,ns.stream_ops)},stream_ops:{open:function(d){var E=ns.ttys[d.node.rdev];if(!E)throw new S.ErrnoError(43);d.tty=E,d.seekable=!1},close:function(d){d.tty.ops.flush(d.tty)},flush:function(d){d.tty.ops.flush(d.tty)},read:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.get_char)throw new S.ErrnoError(60);for(var Z=0,te=0;te<k;te++){var we;try{we=d.tty.ops.get_char(d.tty)}catch{throw new S.ErrnoError(29)}if(we===void 0&&Z===0)throw new S.ErrnoError(6);if(we==null)break;Z++,E[I+te]=we}return Z&&(d.node.timestamp=Date.now()),Z},write:function(d,E,I,k,L){if(!d.tty||!d.tty.ops.put_char)throw new S.ErrnoError(60);try{for(var Z=0;Z<k;Z++)d.tty.ops.put_char(d.tty,E[I+Z])}catch{throw new S.ErrnoError(29)}return k&&(d.node.timestamp=Date.now()),Z}},default_tty_ops:{get_char:function(d){if(!d.input.length){var E=null;if(g){var I=256,k=Buffer.alloc?Buffer.alloc(I):new Buffer(I),L=0;try{L=y.readSync(process.stdin.fd,k,0,I,null)}catch(Z){if(Z.toString().includes(\"EOF\"))L=0;else throw Z}L>0?E=k.slice(0,L).toString(\"utf-8\"):E=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(E=window.prompt(\"Input: \"),E!==null&&(E+=`\n`)):typeof readline==\"function\"&&(E=readline(),E!==null&&(E+=`\n`));if(!E)return null;d.input=yA(E,!0)}return d.input.shift()},put_char:function(d,E){E===null||E===10?(v(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(v(ke(d.output,0)),d.output=[])}},default_tty1_ops:{put_char:function(d,E){E===null||E===10?(D(ke(d.output,0)),d.output=[]):E!=0&&d.output.push(E)},flush:function(d){d.output&&d.output.length>0&&(D(ke(d.output,0)),d.output=[])}}};function ss(d){for(var E=H(d,65536),I=dt(E);d<E;)ne[I+d++]=0;return I}var gt={ops_table:null,mount:function(d){return gt.createNode(null,\"/\",16895,0)},createNode:function(d,E,I,k){if(S.isBlkdev(I)||S.isFIFO(I))throw new S.ErrnoError(63);gt.ops_table||(gt.ops_table={dir:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,lookup:gt.node_ops.lookup,mknod:gt.node_ops.mknod,rename:gt.node_ops.rename,unlink:gt.node_ops.unlink,rmdir:gt.node_ops.rmdir,readdir:gt.node_ops.readdir,symlink:gt.node_ops.symlink},stream:{llseek:gt.stream_ops.llseek}},file:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:{llseek:gt.stream_ops.llseek,read:gt.stream_ops.read,write:gt.stream_ops.write,allocate:gt.stream_ops.allocate,mmap:gt.stream_ops.mmap,msync:gt.stream_ops.msync}},link:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr,readlink:gt.node_ops.readlink},stream:{}},chrdev:{node:{getattr:gt.node_ops.getattr,setattr:gt.node_ops.setattr},stream:S.chrdev_stream_ops}});var L=S.createNode(d,E,I,k);return S.isDir(L.mode)?(L.node_ops=gt.ops_table.dir.node,L.stream_ops=gt.ops_table.dir.stream,L.contents={}):S.isFile(L.mode)?(L.node_ops=gt.ops_table.file.node,L.stream_ops=gt.ops_table.file.stream,L.usedBytes=0,L.contents=null):S.isLink(L.mode)?(L.node_ops=gt.ops_table.link.node,L.stream_ops=gt.ops_table.link.stream):S.isChrdev(L.mode)&&(L.node_ops=gt.ops_table.chrdev.node,L.stream_ops=gt.ops_table.chrdev.stream),L.timestamp=Date.now(),d&&(d.contents[E]=L,d.timestamp=L.timestamp),L},getFileDataAsTypedArray:function(d){return d.contents?d.contents.subarray?d.contents.subarray(0,d.usedBytes):new Uint8Array(d.contents):new Uint8Array(0)},expandFileStorage:function(d,E){var I=d.contents?d.contents.length:0;if(!(I>=E)){var k=1024*1024;E=Math.max(E,I*(I<k?2:1.125)>>>0),I!=0&&(E=Math.max(E,256));var L=d.contents;d.contents=new Uint8Array(E),d.usedBytes>0&&d.contents.set(L.subarray(0,d.usedBytes),0)}},resizeFileStorage:function(d,E){if(d.usedBytes!=E)if(E==0)d.contents=null,d.usedBytes=0;else{var I=d.contents;d.contents=new Uint8Array(E),I&&d.contents.set(I.subarray(0,Math.min(E,d.usedBytes))),d.usedBytes=E}},node_ops:{getattr:function(d){var E={};return E.dev=S.isChrdev(d.mode)?d.id:1,E.ino=d.id,E.mode=d.mode,E.nlink=1,E.uid=0,E.gid=0,E.rdev=d.rdev,S.isDir(d.mode)?E.size=4096:S.isFile(d.mode)?E.size=d.usedBytes:S.isLink(d.mode)?E.size=d.link.length:E.size=0,E.atime=new Date(d.timestamp),E.mtime=new Date(d.timestamp),E.ctime=new Date(d.timestamp),E.blksize=4096,E.blocks=Math.ceil(E.size/E.blksize),E},setattr:function(d,E){E.mode!==void 0&&(d.mode=E.mode),E.timestamp!==void 0&&(d.timestamp=E.timestamp),E.size!==void 0&&gt.resizeFileStorage(d,E.size)},lookup:function(d,E){throw S.genericErrors[44]},mknod:function(d,E,I,k){return gt.createNode(d,E,I,k)},rename:function(d,E,I){if(S.isDir(d.mode)){var k;try{k=S.lookupNode(E,I)}catch{}if(k)for(var L in k.contents)throw new S.ErrnoError(55)}delete d.parent.contents[d.name],d.parent.timestamp=Date.now(),d.name=I,E.contents[I]=d,E.timestamp=d.parent.timestamp,d.parent=E},unlink:function(d,E){delete d.contents[E],d.timestamp=Date.now()},rmdir:function(d,E){var I=S.lookupNode(d,E);for(var k in I.contents)throw new S.ErrnoError(55);delete d.contents[E],d.timestamp=Date.now()},readdir:function(d){var E=[\".\",\"..\"];for(var I in d.contents)!d.contents.hasOwnProperty(I)||E.push(I);return E},symlink:function(d,E,I){var k=gt.createNode(d,E,41471,0);return k.link=I,k},readlink:function(d){if(!S.isLink(d.mode))throw new S.ErrnoError(28);return d.link}},stream_ops:{read:function(d,E,I,k,L){var Z=d.node.contents;if(L>=d.node.usedBytes)return 0;var te=Math.min(d.node.usedBytes-L,k);if(te>8&&Z.subarray)E.set(Z.subarray(L,L+te),I);else for(var we=0;we<te;we++)E[I+we]=Z[L+we];return te},write:function(d,E,I,k,L,Z){if(E.buffer===ne.buffer&&(Z=!1),!k)return 0;var te=d.node;if(te.timestamp=Date.now(),E.subarray&&(!te.contents||te.contents.subarray)){if(Z)return te.contents=E.subarray(I,I+k),te.usedBytes=k,k;if(te.usedBytes===0&&L===0)return te.contents=E.slice(I,I+k),te.usedBytes=k,k;if(L+k<=te.usedBytes)return te.contents.set(E.subarray(I,I+k),L),k}if(gt.expandFileStorage(te,L+k),te.contents.subarray&&E.subarray)te.contents.set(E.subarray(I,I+k),L);else for(var we=0;we<k;we++)te.contents[L+we]=E[I+we];return te.usedBytes=Math.max(te.usedBytes,L+k),k},llseek:function(d,E,I){var k=E;if(I===1?k+=d.position:I===2&&S.isFile(d.node.mode)&&(k+=d.node.usedBytes),k<0)throw new S.ErrnoError(28);return k},allocate:function(d,E,I){gt.expandFileStorage(d.node,E+I),d.node.usedBytes=Math.max(d.node.usedBytes,E+I)},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te,we,me=d.node.contents;if(!(Z&2)&&me.buffer===qe)we=!1,te=me.byteOffset;else{if((k>0||k+I<me.length)&&(me.subarray?me=me.subarray(k,k+I):me=Array.prototype.slice.call(me,k,k+I)),we=!0,te=ss(I),!te)throw new S.ErrnoError(48);ne.set(me,te)}return{ptr:te,allocated:we}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=gt.stream_ops.write(d,E,0,k,I,!1);return 0}}},Bo={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},At={isWindows:!1,staticInit:function(){At.isWindows=!!process.platform.match(/^win/);var d={fs:Le.constants};d.fs&&(d=d.fs),At.flagsForNodeMap={1024:d.O_APPEND,64:d.O_CREAT,128:d.O_EXCL,256:d.O_NOCTTY,0:d.O_RDONLY,2:d.O_RDWR,4096:d.O_SYNC,512:d.O_TRUNC,1:d.O_WRONLY}},bufferFrom:function(d){return Buffer.alloc?Buffer.from(d):new Buffer(d)},convertNodeCode:function(d){var E=d.code;return Bo[E]},mount:function(d){return At.createNode(null,\"/\",At.getMode(d.opts.root),0)},createNode:function(d,E,I,k){if(!S.isDir(I)&&!S.isFile(I)&&!S.isLink(I))throw new S.ErrnoError(28);var L=S.createNode(d,E,I);return L.node_ops=At.node_ops,L.stream_ops=At.stream_ops,L},getMode:function(d){var E;try{E=Le.lstatSync(d),At.isWindows&&(E.mode=E.mode|(E.mode&292)>>2)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}return E.mode},realPath:function(d){for(var E=[];d.parent!==d;)E.push(d.name),d=d.parent;return E.push(d.mount.opts.root),E.reverse(),bt.join.apply(null,E)},flagsForNode:function(d){d&=-2097153,d&=-2049,d&=-32769,d&=-524289;var E=0;for(var I in At.flagsForNodeMap)d&I&&(E|=At.flagsForNodeMap[I],d^=I);if(d)throw new S.ErrnoError(28);return E},node_ops:{getattr:function(d){var E=At.realPath(d),I;try{I=Le.lstatSync(E)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}return At.isWindows&&!I.blksize&&(I.blksize=4096),At.isWindows&&!I.blocks&&(I.blocks=(I.size+I.blksize-1)/I.blksize|0),{dev:I.dev,ino:I.ino,mode:I.mode,nlink:I.nlink,uid:I.uid,gid:I.gid,rdev:I.rdev,size:I.size,atime:I.atime,mtime:I.mtime,ctime:I.ctime,blksize:I.blksize,blocks:I.blocks}},setattr:function(d,E){var I=At.realPath(d);try{if(E.mode!==void 0&&(Le.chmodSync(I,E.mode),d.mode=E.mode),E.timestamp!==void 0){var k=new Date(E.timestamp);Le.utimesSync(I,k,k)}E.size!==void 0&&Le.truncateSync(I,E.size)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},lookup:function(d,E){var I=bt.join2(At.realPath(d),E),k=At.getMode(I);return At.createNode(d,E,k)},mknod:function(d,E,I,k){var L=At.createNode(d,E,I,k),Z=At.realPath(L);try{S.isDir(L.mode)?Le.mkdirSync(Z,L.mode):Le.writeFileSync(Z,\"\",{mode:L.mode})}catch(te){throw te.code?new S.ErrnoError(At.convertNodeCode(te)):te}return L},rename:function(d,E,I){var k=At.realPath(d),L=bt.join2(At.realPath(E),I);try{Le.renameSync(k,L)}catch(Z){throw Z.code?new S.ErrnoError(At.convertNodeCode(Z)):Z}d.name=I},unlink:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.unlinkSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},rmdir:function(d,E){var I=bt.join2(At.realPath(d),E);try{Le.rmdirSync(I)}catch(k){throw k.code?new S.ErrnoError(At.convertNodeCode(k)):k}},readdir:function(d){var E=At.realPath(d);try{return Le.readdirSync(E)}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},symlink:function(d,E,I){var k=bt.join2(At.realPath(d),E);try{Le.symlinkSync(I,k)}catch(L){throw L.code?new S.ErrnoError(At.convertNodeCode(L)):L}},readlink:function(d){var E=At.realPath(d);try{return E=Le.readlinkSync(E),E=dg.relative(dg.resolve(d.mount.opts.root),E),E}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}}},stream_ops:{open:function(d){var E=At.realPath(d.node);try{S.isFile(d.node.mode)&&(d.nfd=Le.openSync(E,At.flagsForNode(d.flags)))}catch(I){throw I.code?new S.ErrnoError(At.convertNodeCode(I)):I}},close:function(d){try{S.isFile(d.node.mode)&&d.nfd&&Le.closeSync(d.nfd)}catch(E){throw E.code?new S.ErrnoError(At.convertNodeCode(E)):E}},read:function(d,E,I,k,L){if(k===0)return 0;try{return Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},write:function(d,E,I,k,L){try{return Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L)}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}},llseek:function(d,E,I){var k=E;if(I===1)k+=d.position;else if(I===2&&S.isFile(d.node.mode))try{var L=Le.fstatSync(d.nfd);k+=L.size}catch(Z){throw new S.ErrnoError(At.convertNodeCode(Z))}if(k<0)throw new S.ErrnoError(28);return k},mmap:function(d,E,I,k,L,Z){if(E!==0)throw new S.ErrnoError(28);if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);var te=ss(I);return At.stream_ops.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){if(!S.isFile(d.node.mode))throw new S.ErrnoError(43);if(L&2)return 0;var Z=At.stream_ops.write(d,E,0,k,I,!1);return 0}}},ln={lookupPath:function(d){return{path:d,node:{mode:At.getMode(d)}}},createStandardStreams:function(){S.streams[0]={fd:0,nfd:0,position:0,path:\"\",flags:0,tty:!0,seekable:!1};for(var d=1;d<3;d++)S.streams[d]={fd:d,nfd:d,position:0,path:\"\",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(d,E){S.isDir(d)?Le.mkdirSync(d,E):Le.writeFileSync(d,\"\",{mode:E})},mkdir:function(){Le.mkdirSync.apply(void 0,arguments)},symlink:function(){Le.symlinkSync.apply(void 0,arguments)},rename:function(){Le.renameSync.apply(void 0,arguments)},rmdir:function(){Le.rmdirSync.apply(void 0,arguments)},readdir:function(){Le.readdirSync.apply(void 0,arguments)},unlink:function(){Le.unlinkSync.apply(void 0,arguments)},readlink:function(){return Le.readlinkSync.apply(void 0,arguments)},stat:function(){return Le.statSync.apply(void 0,arguments)},lstat:function(){return Le.lstatSync.apply(void 0,arguments)},chmod:function(){Le.chmodSync.apply(void 0,arguments)},fchmod:function(){Le.fchmodSync.apply(void 0,arguments)},chown:function(){Le.chownSync.apply(void 0,arguments)},fchown:function(){Le.fchownSync.apply(void 0,arguments)},truncate:function(){Le.truncateSync.apply(void 0,arguments)},ftruncate:function(d,E){if(E<0)throw new S.ErrnoError(28);Le.ftruncateSync.apply(void 0,arguments)},utime:function(){Le.utimesSync.apply(void 0,arguments)},open:function(d,E,I,k){typeof E==\"string\"&&(E=Hs.modeStringToFlags(E));var L=Le.openSync(d,At.flagsForNode(E),I),Z=k!=null?k:S.nextfd(L),te={fd:Z,nfd:L,position:0,path:d,flags:E,seekable:!0};return S.streams[Z]=te,te},close:function(d){d.stream_ops||Le.closeSync(d.nfd),S.closeStream(d.fd)},llseek:function(d,E,I){if(d.stream_ops)return Hs.llseek(d,E,I);var k=E;if(I===1)k+=d.position;else if(I===2)k+=Le.fstatSync(d.nfd).size;else if(I!==0)throw new S.ErrnoError(Bo.EINVAL);if(k<0)throw new S.ErrnoError(Bo.EINVAL);return d.position=k,k},read:function(d,E,I,k,L){if(d.stream_ops)return Hs.read(d,E,I,k,L);var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.readSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L){if(d.stream_ops)return Hs.write(d,E,I,k,L);d.flags&+\"1024\"&&S.llseek(d,0,+\"2\");var Z=typeof L<\"u\";!Z&&d.seekable&&(L=d.position);var te=Le.writeSync(d.nfd,At.bufferFrom(E.buffer),I,k,L);return Z||(d.position+=te),te},allocate:function(){throw new S.ErrnoError(Bo.EOPNOTSUPP)},mmap:function(d,E,I,k,L,Z){if(d.stream_ops)return Hs.mmap(d,E,I,k,L,Z);if(E!==0)throw new S.ErrnoError(28);var te=ss(I);return S.read(d,ne,te,I,k),{ptr:te,allocated:!0}},msync:function(d,E,I,k,L){return d.stream_ops?Hs.msync(d,E,I,k,L):(L&2||S.write(d,E,0,k,I),0)},munmap:function(){return 0},ioctl:function(){throw new S.ErrnoError(Bo.ENOTTY)}},S={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(d,E){if(d=Nn.resolve(S.cwd(),d),E=E||{},!d)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};for(var k in I)E[k]===void 0&&(E[k]=I[k]);if(E.recurse_count>8)throw new S.ErrnoError(32);for(var L=bt.normalizeArray(d.split(\"/\").filter(function(lt){return!!lt}),!1),Z=S.root,te=\"/\",we=0;we<L.length;we++){var me=we===L.length-1;if(me&&E.parent)break;if(Z=S.lookupNode(Z,L[we]),te=bt.join2(te,L[we]),S.isMountpoint(Z)&&(!me||me&&E.follow_mount)&&(Z=Z.mounted.root),!me||E.follow)for(var Je=0;S.isLink(Z.mode);){var nt=S.readlink(te);te=Nn.resolve(bt.dirname(te),nt);var wt=S.lookupPath(te,{recurse_count:E.recurse_count});if(Z=wt.node,Je++>40)throw new S.ErrnoError(32)}}return{path:te,node:Z}},getPath:function(d){for(var E;;){if(S.isRoot(d)){var I=d.mount.mountpoint;return E?I[I.length-1]!==\"/\"?I+\"/\"+E:I+E:I}E=E?d.name+\"/\"+E:d.name,d=d.parent}},hashName:function(d,E){for(var I=0,k=0;k<E.length;k++)I=(I<<5)-I+E.charCodeAt(k)|0;return(d+I>>>0)%S.nameTable.length},hashAddNode:function(d){var E=S.hashName(d.parent.id,d.name);d.name_next=S.nameTable[E],S.nameTable[E]=d},hashRemoveNode:function(d){var E=S.hashName(d.parent.id,d.name);if(S.nameTable[E]===d)S.nameTable[E]=d.name_next;else for(var I=S.nameTable[E];I;){if(I.name_next===d){I.name_next=d.name_next;break}I=I.name_next}},lookupNode:function(d,E){var I=S.mayLookup(d);if(I)throw new S.ErrnoError(I,d);for(var k=S.hashName(d.id,E),L=S.nameTable[k];L;L=L.name_next){var Z=L.name;if(L.parent.id===d.id&&Z===E)return L}return S.lookup(d,E)},createNode:function(d,E,I,k){var L=new S.FSNode(d,E,I,k);return S.hashAddNode(L),L},destroyNode:function(d){S.hashRemoveNode(d)},isRoot:function(d){return d===d.parent},isMountpoint:function(d){return!!d.mounted},isFile:function(d){return(d&61440)===32768},isDir:function(d){return(d&61440)===16384},isLink:function(d){return(d&61440)===40960},isChrdev:function(d){return(d&61440)===8192},isBlkdev:function(d){return(d&61440)===24576},isFIFO:function(d){return(d&61440)===4096},isSocket:function(d){return(d&49152)===49152},flagModes:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},modeStringToFlags:function(d){var E=S.flagModes[d];if(typeof E>\"u\")throw new Error(\"Unknown file open mode: \"+d);return E},flagsToPermissionString:function(d){var E=[\"r\",\"w\",\"rw\"][d&3];return d&512&&(E+=\"w\"),E},nodePermissions:function(d,E){return S.ignorePermissions?0:E.includes(\"r\")&&!(d.mode&292)||E.includes(\"w\")&&!(d.mode&146)||E.includes(\"x\")&&!(d.mode&73)?2:0},mayLookup:function(d){var E=S.nodePermissions(d,\"x\");return E||(d.node_ops.lookup?0:2)},mayCreate:function(d,E){try{var I=S.lookupNode(d,E);return 20}catch{}return S.nodePermissions(d,\"wx\")},mayDelete:function(d,E,I){var k;try{k=S.lookupNode(d,E)}catch(Z){return Z.errno}var L=S.nodePermissions(d,\"wx\");if(L)return L;if(I){if(!S.isDir(k.mode))return 54;if(S.isRoot(k)||S.getPath(k)===S.cwd())return 10}else if(S.isDir(k.mode))return 31;return 0},mayOpen:function(d,E){return d?S.isLink(d.mode)?32:S.isDir(d.mode)&&(S.flagsToPermissionString(E)!==\"r\"||E&512)?31:S.nodePermissions(d,S.flagsToPermissionString(E)):44},MAX_OPEN_FDS:4096,nextfd:function(d,E){d=d||0,E=E||S.MAX_OPEN_FDS;for(var I=d;I<=E;I++)if(!S.streams[I])return I;throw new S.ErrnoError(33)},getStream:function(d){return S.streams[d]},createStream:function(d,E,I){S.FSStream||(S.FSStream=function(){},S.FSStream.prototype={object:{get:function(){return this.node},set:function(te){this.node=te}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}});var k=new S.FSStream;for(var L in d)k[L]=d[L];d=k;var Z=S.nextfd(E,I);return d.fd=Z,S.streams[Z]=d,d},closeStream:function(d){S.streams[d]=null},chrdev_stream_ops:{open:function(d){var E=S.getDevice(d.node.rdev);d.stream_ops=E.stream_ops,d.stream_ops.open&&d.stream_ops.open(d)},llseek:function(){throw new S.ErrnoError(70)}},major:function(d){return d>>8},minor:function(d){return d&255},makedev:function(d,E){return d<<8|E},registerDevice:function(d,E){S.devices[d]={stream_ops:E}},getDevice:function(d){return S.devices[d]},getMounts:function(d){for(var E=[],I=[d];I.length;){var k=I.pop();E.push(k),I.push.apply(I,k.mounts)}return E},syncfs:function(d,E){typeof d==\"function\"&&(E=d,d=!1),S.syncFSRequests++,S.syncFSRequests>1&&D(\"warning: \"+S.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");var I=S.getMounts(S.root.mount),k=0;function L(te){return S.syncFSRequests--,E(te)}function Z(te){if(te)return Z.errored?void 0:(Z.errored=!0,L(te));++k>=I.length&&L(null)}I.forEach(function(te){if(!te.type.syncfs)return Z(null);te.type.syncfs(te,d,Z)})},mount:function(d,E,I){var k=I===\"/\",L=!I,Z;if(k&&S.root)throw new S.ErrnoError(10);if(!k&&!L){var te=S.lookupPath(I,{follow_mount:!1});if(I=te.path,Z=te.node,S.isMountpoint(Z))throw new S.ErrnoError(10);if(!S.isDir(Z.mode))throw new S.ErrnoError(54)}var we={type:d,opts:E,mountpoint:I,mounts:[]},me=d.mount(we);return me.mount=we,we.root=me,k?S.root=me:Z&&(Z.mounted=we,Z.mount&&Z.mount.mounts.push(we)),me},unmount:function(d){var E=S.lookupPath(d,{follow_mount:!1});if(!S.isMountpoint(E.node))throw new S.ErrnoError(28);var I=E.node,k=I.mounted,L=S.getMounts(k);Object.keys(S.nameTable).forEach(function(te){for(var we=S.nameTable[te];we;){var me=we.name_next;L.includes(we.mount)&&S.destroyNode(we),we=me}}),I.mounted=null;var Z=I.mount.mounts.indexOf(k);I.mount.mounts.splice(Z,1)},lookup:function(d,E){return d.node_ops.lookup(d,E)},mknod:function(d,E,I){var k=S.lookupPath(d,{parent:!0}),L=k.node,Z=bt.basename(d);if(!Z||Z===\".\"||Z===\"..\")throw new S.ErrnoError(28);var te=S.mayCreate(L,Z);if(te)throw new S.ErrnoError(te);if(!L.node_ops.mknod)throw new S.ErrnoError(63);return L.node_ops.mknod(L,Z,E,I)},create:function(d,E){return E=E!==void 0?E:438,E&=4095,E|=32768,S.mknod(d,E,0)},mkdir:function(d,E){return E=E!==void 0?E:511,E&=1023,E|=16384,S.mknod(d,E,0)},mkdirTree:function(d,E){for(var I=d.split(\"/\"),k=\"\",L=0;L<I.length;++L)if(!!I[L]){k+=\"/\"+I[L];try{S.mkdir(k,E)}catch(Z){if(Z.errno!=20)throw Z}}},mkdev:function(d,E,I){return typeof I>\"u\"&&(I=E,E=438),E|=8192,S.mknod(d,E,I)},symlink:function(d,E){if(!Nn.resolve(d))throw new S.ErrnoError(44);var I=S.lookupPath(E,{parent:!0}),k=I.node;if(!k)throw new S.ErrnoError(44);var L=bt.basename(E),Z=S.mayCreate(k,L);if(Z)throw new S.ErrnoError(Z);if(!k.node_ops.symlink)throw new S.ErrnoError(63);return k.node_ops.symlink(k,L,d)},rename:function(d,E){var I=bt.dirname(d),k=bt.dirname(E),L=bt.basename(d),Z=bt.basename(E),te,we,me;if(te=S.lookupPath(d,{parent:!0}),we=te.node,te=S.lookupPath(E,{parent:!0}),me=te.node,!we||!me)throw new S.ErrnoError(44);if(we.mount!==me.mount)throw new S.ErrnoError(75);var Je=S.lookupNode(we,L),nt=Nn.relative(d,k);if(nt.charAt(0)!==\".\")throw new S.ErrnoError(28);if(nt=Nn.relative(E,I),nt.charAt(0)!==\".\")throw new S.ErrnoError(55);var wt;try{wt=S.lookupNode(me,Z)}catch{}if(Je!==wt){var lt=S.isDir(Je.mode),it=S.mayDelete(we,L,lt);if(it)throw new S.ErrnoError(it);if(it=wt?S.mayDelete(me,Z,lt):S.mayCreate(me,Z),it)throw new S.ErrnoError(it);if(!we.node_ops.rename)throw new S.ErrnoError(63);if(S.isMountpoint(Je)||wt&&S.isMountpoint(wt))throw new S.ErrnoError(10);if(me!==we&&(it=S.nodePermissions(we,\"w\"),it))throw new S.ErrnoError(it);try{S.trackingDelegate.willMovePath&&S.trackingDelegate.willMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['willMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}S.hashRemoveNode(Je);try{we.node_ops.rename(Je,me,Z)}catch(Et){throw Et}finally{S.hashAddNode(Je)}try{S.trackingDelegate.onMovePath&&S.trackingDelegate.onMovePath(d,E)}catch(Et){D(\"FS.trackingDelegate['onMovePath']('\"+d+\"', '\"+E+\"') threw an exception: \"+Et.message)}}},rmdir:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!0);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.rmdir)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.rmdir(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readdir:function(d){var E=S.lookupPath(d,{follow:!0}),I=E.node;if(!I.node_ops.readdir)throw new S.ErrnoError(54);return I.node_ops.readdir(I)},unlink:function(d){var E=S.lookupPath(d,{parent:!0}),I=E.node,k=bt.basename(d),L=S.lookupNode(I,k),Z=S.mayDelete(I,k,!1);if(Z)throw new S.ErrnoError(Z);if(!I.node_ops.unlink)throw new S.ErrnoError(63);if(S.isMountpoint(L))throw new S.ErrnoError(10);try{S.trackingDelegate.willDeletePath&&S.trackingDelegate.willDeletePath(d)}catch(te){D(\"FS.trackingDelegate['willDeletePath']('\"+d+\"') threw an exception: \"+te.message)}I.node_ops.unlink(I,k),S.destroyNode(L);try{S.trackingDelegate.onDeletePath&&S.trackingDelegate.onDeletePath(d)}catch(te){D(\"FS.trackingDelegate['onDeletePath']('\"+d+\"') threw an exception: \"+te.message)}},readlink:function(d){var E=S.lookupPath(d),I=E.node;if(!I)throw new S.ErrnoError(44);if(!I.node_ops.readlink)throw new S.ErrnoError(28);return Nn.resolve(S.getPath(I.parent),I.node_ops.readlink(I))},stat:function(d,E){var I=S.lookupPath(d,{follow:!E}),k=I.node;if(!k)throw new S.ErrnoError(44);if(!k.node_ops.getattr)throw new S.ErrnoError(63);return k.node_ops.getattr(k)},lstat:function(d){return S.stat(d,!0)},chmod:function(d,E,I){var k;if(typeof d==\"string\"){var L=S.lookupPath(d,{follow:!I});k=L.node}else k=d;if(!k.node_ops.setattr)throw new S.ErrnoError(63);k.node_ops.setattr(k,{mode:E&4095|k.mode&-4096,timestamp:Date.now()})},lchmod:function(d,E){S.chmod(d,E,!0)},fchmod:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);S.chmod(I.node,E)},chown:function(d,E,I,k){var L;if(typeof d==\"string\"){var Z=S.lookupPath(d,{follow:!k});L=Z.node}else L=d;if(!L.node_ops.setattr)throw new S.ErrnoError(63);L.node_ops.setattr(L,{timestamp:Date.now()})},lchown:function(d,E,I){S.chown(d,E,I,!0)},fchown:function(d,E,I){var k=S.getStream(d);if(!k)throw new S.ErrnoError(8);S.chown(k.node,E,I)},truncate:function(d,E){if(E<0)throw new S.ErrnoError(28);var I;if(typeof d==\"string\"){var k=S.lookupPath(d,{follow:!0});I=k.node}else I=d;if(!I.node_ops.setattr)throw new S.ErrnoError(63);if(S.isDir(I.mode))throw new S.ErrnoError(31);if(!S.isFile(I.mode))throw new S.ErrnoError(28);var L=S.nodePermissions(I,\"w\");if(L)throw new S.ErrnoError(L);I.node_ops.setattr(I,{size:E,timestamp:Date.now()})},ftruncate:function(d,E){var I=S.getStream(d);if(!I)throw new S.ErrnoError(8);if((I.flags&2097155)===0)throw new S.ErrnoError(28);S.truncate(I.node,E)},utime:function(d,E,I){var k=S.lookupPath(d,{follow:!0}),L=k.node;L.node_ops.setattr(L,{timestamp:Math.max(E,I)})},open:function(d,E,I,k,L){if(d===\"\")throw new S.ErrnoError(44);E=typeof E==\"string\"?S.modeStringToFlags(E):E,I=typeof I>\"u\"?438:I,E&64?I=I&4095|32768:I=0;var Z;if(typeof d==\"object\")Z=d;else{d=bt.normalize(d);try{var te=S.lookupPath(d,{follow:!(E&131072)});Z=te.node}catch{}}var we=!1;if(E&64)if(Z){if(E&128)throw new S.ErrnoError(20)}else Z=S.mknod(d,I,0),we=!0;if(!Z)throw new S.ErrnoError(44);if(S.isChrdev(Z.mode)&&(E&=-513),E&65536&&!S.isDir(Z.mode))throw new S.ErrnoError(54);if(!we){var me=S.mayOpen(Z,E);if(me)throw new S.ErrnoError(me)}E&512&&S.truncate(Z,0),E&=-131713;var Je=S.createStream({node:Z,path:S.getPath(Z),flags:E,seekable:!0,position:0,stream_ops:Z.stream_ops,ungotten:[],error:!1},k,L);Je.stream_ops.open&&Je.stream_ops.open(Je),t.logReadFiles&&!(E&1)&&(S.readFiles||(S.readFiles={}),d in S.readFiles||(S.readFiles[d]=1,D(\"FS.trackingDelegate error on read file: \"+d)));try{if(S.trackingDelegate.onOpenFile){var nt=0;(E&2097155)!==1&&(nt|=S.tracking.openFlags.READ),(E&2097155)!==0&&(nt|=S.tracking.openFlags.WRITE),S.trackingDelegate.onOpenFile(d,nt)}}catch(wt){D(\"FS.trackingDelegate['onOpenFile']('\"+d+\"', flags) threw an exception: \"+wt.message)}return Je},close:function(d){if(S.isClosed(d))throw new S.ErrnoError(8);d.getdents&&(d.getdents=null);try{d.stream_ops.close&&d.stream_ops.close(d)}catch(E){throw E}finally{S.closeStream(d.fd)}d.fd=null},isClosed:function(d){return d.fd===null},llseek:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(!d.seekable||!d.stream_ops.llseek)throw new S.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new S.ErrnoError(28);return d.position=d.stream_ops.llseek(d,E,I),d.ungotten=[],d.position},read:function(d,E,I,k,L){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===1)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.read)throw new S.ErrnoError(28);var Z=typeof L<\"u\";if(!Z)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var te=d.stream_ops.read(d,E,I,k,L);return Z||(d.position+=te),te},write:function(d,E,I,k,L,Z){if(k<0||L<0)throw new S.ErrnoError(28);if(S.isClosed(d))throw new S.ErrnoError(8);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(S.isDir(d.node.mode))throw new S.ErrnoError(31);if(!d.stream_ops.write)throw new S.ErrnoError(28);d.seekable&&d.flags&1024&&S.llseek(d,0,2);var te=typeof L<\"u\";if(!te)L=d.position;else if(!d.seekable)throw new S.ErrnoError(70);var we=d.stream_ops.write(d,E,I,k,L,Z);te||(d.position+=we);try{d.path&&S.trackingDelegate.onWriteToFile&&S.trackingDelegate.onWriteToFile(d.path)}catch(me){D(\"FS.trackingDelegate['onWriteToFile']('\"+d.path+\"') threw an exception: \"+me.message)}return we},allocate:function(d,E,I){if(S.isClosed(d))throw new S.ErrnoError(8);if(E<0||I<=0)throw new S.ErrnoError(28);if((d.flags&2097155)===0)throw new S.ErrnoError(8);if(!S.isFile(d.node.mode)&&!S.isDir(d.node.mode))throw new S.ErrnoError(43);if(!d.stream_ops.allocate)throw new S.ErrnoError(138);d.stream_ops.allocate(d,E,I)},mmap:function(d,E,I,k,L,Z){if((L&2)!==0&&(Z&2)===0&&(d.flags&2097155)!==2)throw new S.ErrnoError(2);if((d.flags&2097155)===1)throw new S.ErrnoError(2);if(!d.stream_ops.mmap)throw new S.ErrnoError(43);return d.stream_ops.mmap(d,E,I,k,L,Z)},msync:function(d,E,I,k,L){return!d||!d.stream_ops.msync?0:d.stream_ops.msync(d,E,I,k,L)},munmap:function(d){return 0},ioctl:function(d,E,I){if(!d.stream_ops.ioctl)throw new S.ErrnoError(59);return d.stream_ops.ioctl(d,E,I)},readFile:function(d,E){if(E=E||{},E.flags=E.flags||0,E.encoding=E.encoding||\"binary\",E.encoding!==\"utf8\"&&E.encoding!==\"binary\")throw new Error('Invalid encoding type \"'+E.encoding+'\"');var I,k=S.open(d,E.flags),L=S.stat(d),Z=L.size,te=new Uint8Array(Z);return S.read(k,te,0,Z,0),E.encoding===\"utf8\"?I=ke(te,0):E.encoding===\"binary\"&&(I=te),S.close(k),I},writeFile:function(d,E,I){I=I||{},I.flags=I.flags||577;var k=S.open(d,I.flags,I.mode);if(typeof E==\"string\"){var L=new Uint8Array(le(E)+1),Z=Ne(E,L,0,L.length);S.write(k,L,0,Z,void 0,I.canOwn)}else if(ArrayBuffer.isView(E))S.write(k,E,0,E.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");S.close(k)},cwd:function(){return S.currentPath},chdir:function(d){var E=S.lookupPath(d,{follow:!0});if(E.node===null)throw new S.ErrnoError(44);if(!S.isDir(E.node.mode))throw new S.ErrnoError(54);var I=S.nodePermissions(E.node,\"x\");if(I)throw new S.ErrnoError(I);S.currentPath=E.path},createDefaultDirectories:function(){S.mkdir(\"/tmp\"),S.mkdir(\"/home\"),S.mkdir(\"/home/web_user\")},createDefaultDevices:function(){S.mkdir(\"/dev\"),S.registerDevice(S.makedev(1,3),{read:function(){return 0},write:function(E,I,k,L,Z){return L}}),S.mkdev(\"/dev/null\",S.makedev(1,3)),ns.register(S.makedev(5,0),ns.default_tty_ops),ns.register(S.makedev(6,0),ns.default_tty1_ops),S.mkdev(\"/dev/tty\",S.makedev(5,0)),S.mkdev(\"/dev/tty1\",S.makedev(6,0));var d=Ll();S.createDevice(\"/dev\",\"random\",d),S.createDevice(\"/dev\",\"urandom\",d),S.mkdir(\"/dev/shm\"),S.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories:function(){S.mkdir(\"/proc\");var d=S.mkdir(\"/proc/self\");S.mkdir(\"/proc/self/fd\"),S.mount({mount:function(){var E=S.createNode(d,\"fd\",16895,73);return E.node_ops={lookup:function(I,k){var L=+k,Z=S.getStream(L);if(!Z)throw new S.ErrnoError(8);var te={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function(){return Z.path}}};return te.parent=te,te}},E}},{},\"/proc/self/fd\")},createStandardStreams:function(){t.stdin?S.createDevice(\"/dev\",\"stdin\",t.stdin):S.symlink(\"/dev/tty\",\"/dev/stdin\"),t.stdout?S.createDevice(\"/dev\",\"stdout\",null,t.stdout):S.symlink(\"/dev/tty\",\"/dev/stdout\"),t.stderr?S.createDevice(\"/dev\",\"stderr\",null,t.stderr):S.symlink(\"/dev/tty1\",\"/dev/stderr\");var d=S.open(\"/dev/stdin\",0),E=S.open(\"/dev/stdout\",1),I=S.open(\"/dev/stderr\",1)},ensureErrnoError:function(){S.ErrnoError||(S.ErrnoError=function(E,I){this.node=I,this.setErrno=function(k){this.errno=k},this.setErrno(E),this.message=\"FS error\"},S.ErrnoError.prototype=new Error,S.ErrnoError.prototype.constructor=S.ErrnoError,[44].forEach(function(d){S.genericErrors[d]=new S.ErrnoError(d),S.genericErrors[d].stack=\"<generic error, no stack>\"}))},staticInit:function(){S.ensureErrnoError(),S.nameTable=new Array(4096),S.mount(gt,{},\"/\"),S.createDefaultDirectories(),S.createDefaultDevices(),S.createSpecialDirectories(),S.filesystems={MEMFS:gt,NODEFS:At}},init:function(d,E,I){S.init.initialized=!0,S.ensureErrnoError(),t.stdin=d||t.stdin,t.stdout=E||t.stdout,t.stderr=I||t.stderr,S.createStandardStreams()},quit:function(){S.init.initialized=!1;var d=t._fflush;d&&d(0);for(var E=0;E<S.streams.length;E++){var I=S.streams[E];!I||S.close(I)}},getMode:function(d,E){var I=0;return d&&(I|=365),E&&(I|=146),I},findObject:function(d,E){var I=S.analyzePath(d,E);return I.exists?I.object:null},analyzePath:function(d,E){try{var I=S.lookupPath(d,{follow:!E});d=I.path}catch{}var k={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=S.lookupPath(d,{parent:!0});k.parentExists=!0,k.parentPath=I.path,k.parentObject=I.node,k.name=bt.basename(d),I=S.lookupPath(d,{follow:!E}),k.exists=!0,k.path=I.path,k.object=I.node,k.name=I.node.name,k.isRoot=I.path===\"/\"}catch(L){k.error=L.errno}return k},createPath:function(d,E,I,k){d=typeof d==\"string\"?d:S.getPath(d);for(var L=E.split(\"/\").reverse();L.length;){var Z=L.pop();if(!!Z){var te=bt.join2(d,Z);try{S.mkdir(te)}catch{}d=te}}return te},createFile:function(d,E,I,k,L){var Z=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),te=S.getMode(k,L);return S.create(Z,te)},createDataFile:function(d,E,I,k,L,Z){var te=E?bt.join2(typeof d==\"string\"?d:S.getPath(d),E):d,we=S.getMode(k,L),me=S.create(te,we);if(I){if(typeof I==\"string\"){for(var Je=new Array(I.length),nt=0,wt=I.length;nt<wt;++nt)Je[nt]=I.charCodeAt(nt);I=Je}S.chmod(me,we|146);var lt=S.open(me,577);S.write(lt,I,0,I.length,0,Z),S.close(lt),S.chmod(me,we)}return me},createDevice:function(d,E,I,k){var L=bt.join2(typeof d==\"string\"?d:S.getPath(d),E),Z=S.getMode(!!I,!!k);S.createDevice.major||(S.createDevice.major=64);var te=S.makedev(S.createDevice.major++,0);return S.registerDevice(te,{open:function(we){we.seekable=!1},close:function(we){k&&k.buffer&&k.buffer.length&&k(10)},read:function(we,me,Je,nt,wt){for(var lt=0,it=0;it<nt;it++){var Et;try{Et=I()}catch{throw new S.ErrnoError(29)}if(Et===void 0&&lt===0)throw new S.ErrnoError(6);if(Et==null)break;lt++,me[Je+it]=Et}return lt&&(we.node.timestamp=Date.now()),lt},write:function(we,me,Je,nt,wt){for(var lt=0;lt<nt;lt++)try{k(me[Je+lt])}catch{throw new S.ErrnoError(29)}return nt&&(we.node.timestamp=Date.now()),lt}}),S.mkdev(L,Z,te)},forceLoadFile:function(d){if(d.isDevice||d.isFolder||d.link||d.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(p)try{d.contents=yA(p(d.url),!0),d.usedBytes=d.contents.length}catch{throw new S.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile:function(d,E,I,k,L){function Z(){this.lengthKnown=!1,this.chunks=[]}if(Z.prototype.get=function(lt){if(!(lt>this.length-1||lt<0)){var it=lt%this.chunkSize,Et=lt/this.chunkSize|0;return this.getter(Et)[it]}},Z.prototype.setDataGetter=function(lt){this.getter=lt},Z.prototype.cacheLength=function(){var lt=new XMLHttpRequest;if(lt.open(\"HEAD\",I,!1),lt.send(null),!(lt.status>=200&&lt.status<300||lt.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+lt.status);var it=Number(lt.getResponseHeader(\"Content-length\")),Et,be=(Et=lt.getResponseHeader(\"Accept-Ranges\"))&&Et===\"bytes\",Mn=(Et=lt.getResponseHeader(\"Content-Encoding\"))&&Et===\"gzip\",Ri=1024*1024;be||(Ri=it);var SA=function(os,Ea){if(os>Ea)throw new Error(\"invalid range (\"+os+\", \"+Ea+\") or no bytes requested!\");if(Ea>it-1)throw new Error(\"only \"+it+\" bytes available! programmer error!\");var Kr=new XMLHttpRequest;if(Kr.open(\"GET\",I,!1),it!==Ri&&Kr.setRequestHeader(\"Range\",\"bytes=\"+os+\"-\"+Ea),typeof Uint8Array<\"u\"&&(Kr.responseType=\"arraybuffer\"),Kr.overrideMimeType&&Kr.overrideMimeType(\"text/plain; charset=x-user-defined\"),Kr.send(null),!(Kr.status>=200&&Kr.status<300||Kr.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+Kr.status);return Kr.response!==void 0?new Uint8Array(Kr.response||[]):yA(Kr.responseText||\"\",!0)},Or=this;Or.setDataGetter(function(os){var Ea=os*Ri,Kr=(os+1)*Ri-1;if(Kr=Math.min(Kr,it-1),typeof Or.chunks[os]>\"u\"&&(Or.chunks[os]=SA(Ea,Kr)),typeof Or.chunks[os]>\"u\")throw new Error(\"doXHR failed!\");return Or.chunks[os]}),(Mn||!it)&&(Ri=it=1,it=this.getter(0).length,Ri=it,v(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=it,this._chunkSize=Ri,this.lengthKnown=!0},typeof XMLHttpRequest<\"u\"){if(!u)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var te=new Z;Object.defineProperties(te,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var we={isDevice:!1,contents:te}}else var we={isDevice:!1,url:I};var me=S.createFile(d,E,we,k,L);we.contents?me.contents=we.contents:we.url&&(me.contents=null,me.url=we.url),Object.defineProperties(me,{usedBytes:{get:function(){return this.contents.length}}});var Je={},nt=Object.keys(me.stream_ops);return nt.forEach(function(wt){var lt=me.stream_ops[wt];Je[wt]=function(){return S.forceLoadFile(me),lt.apply(null,arguments)}}),Je.read=function(lt,it,Et,be,Mn){S.forceLoadFile(me);var Ri=lt.node.contents;if(Mn>=Ri.length)return 0;var SA=Math.min(Ri.length-Mn,be);if(Ri.slice)for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri[Mn+Or];else for(var Or=0;Or<SA;Or++)it[Et+Or]=Ri.get(Mn+Or);return SA},me.stream_ops=Je,me},createPreloadedFile:function(d,E,I,k,L,Z,te,we,me,Je){Browser.init();var nt=E?Nn.resolve(bt.join2(d,E)):d,wt=\"cp \"+nt;function lt(it){function Et(Mn){Je&&Je(),we||S.createDataFile(d,E,Mn,k,L,me),Z&&Z(),EA(wt)}var be=!1;t.preloadPlugins.forEach(function(Mn){be||Mn.canHandle(nt)&&(Mn.handle(it,nt,Et,function(){te&&te(),EA(wt)}),be=!0)}),be||Et(it)}mA(wt),typeof I==\"string\"?Browser.asyncLoad(I,function(it){lt(it)},te):lt(I)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\"EM_FS_\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=function(){v(\"creating db\");var te=L.result;te.createObjectStore(S.DB_STORE_NAME)},L.onsuccess=function(){var te=L.result,we=te.transaction([S.DB_STORE_NAME],\"readwrite\"),me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.put(S.analyzePath(it).object.contents,it);Et.onsuccess=function(){Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I},loadFilesFromDB:function(d,E,I){E=E||function(){},I=I||function(){};var k=S.indexedDB();try{var L=k.open(S.DB_NAME(),S.DB_VERSION)}catch(Z){return I(Z)}L.onupgradeneeded=I,L.onsuccess=function(){var te=L.result;try{var we=te.transaction([S.DB_STORE_NAME],\"readonly\")}catch(it){I(it);return}var me=we.objectStore(S.DB_STORE_NAME),Je=0,nt=0,wt=d.length;function lt(){nt==0?E():I()}d.forEach(function(it){var Et=me.get(it);Et.onsuccess=function(){S.analyzePath(it).exists&&S.unlink(it),S.createDataFile(bt.dirname(it),bt.basename(it),Et.result,!0,!0,!0),Je++,Je+nt==wt&&lt()},Et.onerror=function(){nt++,Je+nt==wt&&lt()}}),we.onerror=I},L.onerror=I}},Lt={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(d,E,I){if(E[0]===\"/\")return E;var k;if(d===-100)k=S.cwd();else{var L=S.getStream(d);if(!L)throw new S.ErrnoError(8);k=L.path}if(E.length==0){if(!I)throw new S.ErrnoError(44);return k}return bt.join2(k,E)},doStat:function(d,E,I){try{var k=d(E)}catch(L){if(L&&L.node&&bt.normalize(E)!==bt.normalize(S.getPath(L.node)))return-54;throw L}return de[I>>2]=k.dev,de[I+4>>2]=0,de[I+8>>2]=k.ino,de[I+12>>2]=k.mode,de[I+16>>2]=k.nlink,de[I+20>>2]=k.uid,de[I+24>>2]=k.gid,de[I+28>>2]=k.rdev,de[I+32>>2]=0,se=[k.size>>>0,(vr=k.size,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+40>>2]=se[0],de[I+44>>2]=se[1],de[I+48>>2]=4096,de[I+52>>2]=k.blocks,de[I+56>>2]=k.atime.getTime()/1e3|0,de[I+60>>2]=0,de[I+64>>2]=k.mtime.getTime()/1e3|0,de[I+68>>2]=0,de[I+72>>2]=k.ctime.getTime()/1e3|0,de[I+76>>2]=0,se=[k.ino>>>0,(vr=k.ino,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[I+80>>2]=se[0],de[I+84>>2]=se[1],0},doMsync:function(d,E,I,k,L){var Z=Y.slice(d,d+I);S.msync(E,Z,L,I,k)},doMkdir:function(d,E){return d=bt.normalize(d),d[d.length-1]===\"/\"&&(d=d.substr(0,d.length-1)),S.mkdir(d,E,0),0},doMknod:function(d,E,I){switch(E&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return S.mknod(d,E,I),0},doReadlink:function(d,E,I){if(I<=0)return-28;var k=S.readlink(d),L=Math.min(I,le(k)),Z=ne[E+L];return oe(k,E,I+1),ne[E+L]=Z,L},doAccess:function(d,E){if(E&-8)return-28;var I,k=S.lookupPath(d,{follow:!0});if(I=k.node,!I)return-44;var L=\"\";return E&4&&(L+=\"r\"),E&2&&(L+=\"w\"),E&1&&(L+=\"x\"),L&&S.nodePermissions(I,L)?-2:0},doDup:function(d,E,I){var k=S.getStream(I);return k&&S.close(k),S.open(d,E,0,I,I).fd},doReadv:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.read(d,ne,te,we,k);if(me<0)return-1;if(L+=me,me<we)break}return L},doWritev:function(d,E,I,k){for(var L=0,Z=0;Z<I;Z++){var te=de[E+Z*8>>2],we=de[E+(Z*8+4)>>2],me=S.write(d,ne,te,we,k);if(me<0)return-1;L+=me}return L},varargs:void 0,get:function(){Lt.varargs+=4;var d=de[Lt.varargs-4>>2];return d},getStr:function(d){var E=Fe(d);return E},getStreamFromFD:function(d){var E=S.getStream(d);if(!E)throw new S.ErrnoError(8);return E},get64:function(d,E){return d}};function hg(d,E){try{return d=Lt.getStr(d),S.chmod(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function Ml(d){return de[Ft()>>2]=d,d}function Qp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 0:{var L=Lt.get();if(L<0)return-28;var Z;return Z=S.open(k.path,k.flags,0,L),Z.fd}case 1:case 2:return 0;case 3:return k.flags;case 4:{var L=Lt.get();return k.flags|=L,0}case 12:{var L=Lt.get(),te=0;return he[L+te>>1]=2,0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Ml(28),-1;default:return-28}}catch(we){return(typeof S>\"u\"||!(we instanceof S.ErrnoError))&&wr(we),-we.errno}}function Sp(d,E){try{var I=Lt.getStreamFromFD(d);return Lt.doStat(S.stat,I.path,E)}catch(k){return(typeof S>\"u\"||!(k instanceof S.ErrnoError))&&wr(k),-k.errno}}function vp(d,E,I){Lt.varargs=I;try{var k=Lt.getStreamFromFD(d);switch(E){case 21509:case 21505:return k.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return k.tty?0:-59;case 21519:{if(!k.tty)return-59;var L=Lt.get();return de[L>>2]=0,0}case 21520:return k.tty?-28:-59;case 21531:{var L=Lt.get();return S.ioctl(k,E,L)}case 21523:return k.tty?0:-59;case 21524:return k.tty?0:-59;default:wr(\"bad ioctl syscall \"+E)}}catch(Z){return(typeof S>\"u\"||!(Z instanceof S.ErrnoError))&&wr(Z),-Z.errno}}function xp(d,E,I){Lt.varargs=I;try{var k=Lt.getStr(d),L=I?Lt.get():0,Z=S.open(k,E,L);return Z.fd}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),-te.errno}}function Pp(d,E){try{return d=Lt.getStr(d),E=Lt.getStr(E),S.rename(d,E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function G(d){try{return d=Lt.getStr(d),S.rmdir(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function yt(d,E){try{return d=Lt.getStr(d),Lt.doStat(S.stat,d,E)}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),-I.errno}}function IA(d){try{return d=Lt.getStr(d),S.unlink(d),0}catch(E){return(typeof S>\"u\"||!(E instanceof S.ErrnoError))&&wr(E),-E.errno}}function zi(d,E,I){Y.copyWithin(d,E,E+I)}function Ol(d){try{return A.grow(d-qe.byteLength+65535>>>16),Mr(A.buffer),1}catch{}}function Xe(d){var E=Y.length;d=d>>>0;var I=2147483648;if(d>I)return!1;for(var k=1;k<=4;k*=2){var L=E*(1+.2/k);L=Math.min(L,d+100663296);var Z=Math.min(I,ae(Math.max(d,L),65536)),te=Ol(Z);if(te)return!0}return!1}function pa(d){try{var E=Lt.getStreamFromFD(d);return S.close(E),0}catch(I){return(typeof S>\"u\"||!(I instanceof S.ErrnoError))&&wr(I),I.errno}}function pg(d,E){try{var I=Lt.getStreamFromFD(d),k=I.tty?2:S.isDir(I.mode)?3:S.isLink(I.mode)?7:4;return ne[E>>0]=k,0}catch(L){return(typeof S>\"u\"||!(L instanceof S.ErrnoError))&&wr(L),L.errno}}function ME(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doReadv(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function Dp(d,E,I,k,L){try{var Z=Lt.getStreamFromFD(d),te=4294967296,we=I*te+(E>>>0),me=9007199254740992;return we<=-me||we>=me?-61:(S.llseek(Z,we,k),se=[Z.position>>>0,(vr=Z.position,+Math.abs(vr)>=1?vr>0?(Math.min(+Math.floor(vr/4294967296),4294967295)|0)>>>0:~~+Math.ceil((vr-+(~~vr>>>0))/4294967296)>>>0:0)],de[L>>2]=se[0],de[L+4>>2]=se[1],Z.getdents&&we===0&&k===0&&(Z.getdents=null),0)}catch(Je){return(typeof S>\"u\"||!(Je instanceof S.ErrnoError))&&wr(Je),Je.errno}}function OE(d,E,I,k){try{var L=Lt.getStreamFromFD(d),Z=Lt.doWritev(L,E,I);return de[k>>2]=Z,0}catch(te){return(typeof S>\"u\"||!(te instanceof S.ErrnoError))&&wr(te),te.errno}}function ar(d){$(d)}function Tn(d){var E=Date.now()/1e3|0;return d&&(de[d>>2]=E),E}function Kl(){if(Kl.called)return;Kl.called=!0;var d=new Date().getFullYear(),E=new Date(d,0,1),I=new Date(d,6,1),k=E.getTimezoneOffset(),L=I.getTimezoneOffset(),Z=Math.max(k,L);de[iS()>>2]=Z*60,de[rS()>>2]=Number(k!=L);function te(wt){var lt=wt.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);return lt?lt[1]:\"GMT\"}var we=te(E),me=te(I),Je=Be(we),nt=Be(me);L<k?(de[wg()>>2]=Je,de[wg()+4>>2]=nt):(de[wg()>>2]=nt,de[wg()+4>>2]=Je)}function kp(d){Kl();var E=Date.UTC(de[d+20>>2]+1900,de[d+16>>2],de[d+12>>2],de[d+8>>2],de[d+4>>2],de[d>>2],0),I=new Date(E);de[d+24>>2]=I.getUTCDay();var k=Date.UTC(I.getUTCFullYear(),0,1,0,0,0,0),L=(I.getTime()-k)/(1e3*60*60*24)|0;return de[d+28>>2]=L,I.getTime()/1e3|0}var Us=function(d,E,I,k){d||(d=this),this.parent=d,this.mount=d.mount,this.mounted=null,this.id=S.nextInode++,this.name=E,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=k},da=365,cn=146;if(Object.defineProperties(Us.prototype,{read:{get:function(){return(this.mode&da)===da},set:function(d){d?this.mode|=da:this.mode&=~da}},write:{get:function(){return(this.mode&cn)===cn},set:function(d){d?this.mode|=cn:this.mode&=~cn}},isFolder:{get:function(){return S.isDir(this.mode)}},isDevice:{get:function(){return S.isChrdev(this.mode)}}}),S.FSNode=Us,S.staticInit(),g){var Le=rV,dg=J(\"path\");At.staticInit()}if(g){var Ul=function(d){return function(){try{return d.apply(this,arguments)}catch(E){throw E.code?new S.ErrnoError(Bo[E.code]):E}}},Hs=Object.assign({},S);for(var Hl in ln)S[Hl]=Ul(ln[Hl])}else throw new Error(\"NODERAWFS is currently only supported on Node.js environment.\");function yA(d,E,I){var k=I>0?I:le(d)+1,L=new Array(k),Z=Ne(d,L,0,L.length);return E&&(L.length=Z),L}var Cg=typeof atob==\"function\"?atob:function(d){var E=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",I=\"\",k,L,Z,te,we,me,Je,nt=0;d=d.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do te=E.indexOf(d.charAt(nt++)),we=E.indexOf(d.charAt(nt++)),me=E.indexOf(d.charAt(nt++)),Je=E.indexOf(d.charAt(nt++)),k=te<<2|we>>4,L=(we&15)<<4|me>>2,Z=(me&3)<<6|Je,I=I+String.fromCharCode(k),me!==64&&(I=I+String.fromCharCode(L)),Je!==64&&(I=I+String.fromCharCode(Z));while(nt<d.length);return I};function mg(d){if(typeof g==\"boolean\"&&g){var E;try{E=Buffer.from(d,\"base64\")}catch{E=new Buffer(d,\"base64\")}return new Uint8Array(E.buffer,E.byteOffset,E.byteLength)}try{for(var I=Cg(d),k=new Uint8Array(I.length),L=0;L<I.length;++L)k[L]=I.charCodeAt(L);return k}catch{throw new Error(\"Converting base64 string to bytes failed.\")}}function Ca(d){if(!!ug(d))return mg(d.slice(Tl.length))}var ma={s:fg,p:hg,e:Qp,k:Sp,o:vp,q:xp,i:Pp,r:G,c:yt,h:IA,l:zi,m:Xe,f:pa,j:pg,g:ME,n:Dp,d:OE,a:ar,b:Tn,t:kp},rt=bp(),bo=t.___wasm_call_ctors=rt.v,wA=t._zip_ext_count_symlinks=rt.w,Gl=t._zip_file_get_external_attributes=rt.x,Gs=t._zipstruct_stat=rt.y,Yl=t._zipstruct_statS=rt.z,KE=t._zipstruct_stat_name=rt.A,Rp=t._zipstruct_stat_index=rt.B,Eg=t._zipstruct_stat_size=rt.C,Fp=t._zipstruct_stat_mtime=rt.D,UE=t._zipstruct_stat_crc=rt.E,jl=t._zipstruct_error=rt.F,HE=t._zipstruct_errorS=rt.G,Ig=t._zipstruct_error_code_zip=rt.H,BA=t._zipstruct_stat_comp_size=rt.I,Rr=t._zipstruct_stat_comp_method=rt.J,GE=t._zip_close=rt.K,Ys=t._zip_delete=rt.L,js=t._zip_dir_add=rt.M,yg=t._zip_discard=rt.N,bA=t._zip_error_init_with_code=rt.O,R=t._zip_get_error=rt.P,q=t._zip_file_get_error=rt.Q,Ce=t._zip_error_strerror=rt.R,Ke=t._zip_fclose=rt.S,Re=t._zip_file_add=rt.T,ze=t._free=rt.U,dt=t._malloc=rt.V,Ft=t.___errno_location=rt.W,Ln=t._zip_source_error=rt.X,JQ=t._zip_source_seek=rt.Y,k1=t._zip_file_set_external_attributes=rt.Z,R1=t._zip_file_set_mtime=rt._,WQ=t._zip_fopen=rt.$,F1=t._zip_fopen_index=rt.aa,N1=t._zip_fread=rt.ba,zQ=t._zip_get_name=rt.ca,T1=t._zip_get_num_entries=rt.da,L1=t._zip_source_read=rt.ea,VQ=t._zip_name_locate=rt.fa,M1=t._zip_open=rt.ga,O1=t._zip_open_from_source=rt.ha,XQ=t._zip_set_file_compression=rt.ia,K1=t._zip_source_buffer=rt.ja,U1=t._zip_source_buffer_create=rt.ka,H1=t._zip_source_close=rt.la,G1=t._zip_source_free=rt.ma,ZQ=t._zip_source_keep=rt.na,_Q=t._zip_source_open=rt.oa,$Q=t._zip_source_set_mtime=rt.qa,eS=t._zip_source_tell=rt.ra,tS=t._zip_stat=rt.sa,Y1=t._zip_stat_index=rt.ta,wg=t.__get_tzname=rt.ua,rS=t.__get_daylight=rt.va,iS=t.__get_timezone=rt.wa,YE=t.stackSave=rt.xa,jE=t.stackRestore=rt.ya,b=t.stackAlloc=rt.za;t.cwrap=ue,t.getValue=_;var Oe;ha=function d(){Oe||QA(),Oe||(ha=d)};function QA(d){if(d=d||a,is>0||(pr(),is>0))return;function E(){Oe||(Oe=!0,t.calledRun=!0,!Ae&&(Ii(),i(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),rs()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),E()},1)):E()}if(t.run=QA,t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return QA(),e}}();typeof IB==\"object\"&&typeof FR==\"object\"?FR.exports=RR:typeof define==\"function\"&&define.amd?define([],function(){return RR}):typeof IB==\"object\"&&(IB.createModule=RR)});var vV=w((jst,SV)=>{function dke(r,e){for(var t=-1,i=r==null?0:r.length,n=Array(i);++t<i;)n[t]=e(r[t],t,r);return n}SV.exports=dke});var vs=w((qst,xV)=>{var Cke=Array.isArray;xV.exports=Cke});var NV=w((Jst,FV)=>{var PV=Rc(),mke=vV(),Eke=vs(),Ike=gC(),yke=1/0,DV=PV?PV.prototype:void 0,kV=DV?DV.toString:void 0;function RV(r){if(typeof r==\"string\")return r;if(Eke(r))return mke(r,RV)+\"\";if(Ike(r))return kV?kV.call(r):\"\";var e=r+\"\";return e==\"0\"&&1/r==-yke?\"-0\":e}FV.exports=RV});var Vf=w((Wst,TV)=>{var wke=NV();function Bke(r){return r==null?\"\":wke(r)}TV.exports=Bke});var HR=w((zst,LV)=>{function bke(r,e,t){var i=-1,n=r.length;e<0&&(e=-e>n?0:n+e),t=t>n?n:t,t<0&&(t+=n),n=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=r[i+e];return s}LV.exports=bke});var OV=w((Vst,MV)=>{var Qke=HR();function Ske(r,e,t){var i=r.length;return t=t===void 0?i:t,!e&&t>=i?r:Qke(r,e,t)}MV.exports=Ske});var GR=w((Xst,KV)=>{var vke=\"\\\\ud800-\\\\udfff\",xke=\"\\\\u0300-\\\\u036f\",Pke=\"\\\\ufe20-\\\\ufe2f\",Dke=\"\\\\u20d0-\\\\u20ff\",kke=xke+Pke+Dke,Rke=\"\\\\ufe0e\\\\ufe0f\",Fke=\"\\\\u200d\",Nke=RegExp(\"[\"+Fke+vke+kke+Rke+\"]\");function Tke(r){return Nke.test(r)}KV.exports=Tke});var HV=w((Zst,UV)=>{function Lke(r){return r.split(\"\")}UV.exports=Lke});var VV=w((_st,zV)=>{var GV=\"\\\\ud800-\\\\udfff\",Mke=\"\\\\u0300-\\\\u036f\",Oke=\"\\\\ufe20-\\\\ufe2f\",Kke=\"\\\\u20d0-\\\\u20ff\",Uke=Mke+Oke+Kke,Hke=\"\\\\ufe0e\\\\ufe0f\",Gke=\"[\"+GV+\"]\",YR=\"[\"+Uke+\"]\",jR=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Yke=\"(?:\"+YR+\"|\"+jR+\")\",YV=\"[^\"+GV+\"]\",jV=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qV=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",jke=\"\\\\u200d\",JV=Yke+\"?\",WV=\"[\"+Hke+\"]?\",qke=\"(?:\"+jke+\"(?:\"+[YV,jV,qV].join(\"|\")+\")\"+WV+JV+\")*\",Jke=WV+JV+qke,Wke=\"(?:\"+[YV+YR+\"?\",YR,jV,qV,Gke].join(\"|\")+\")\",zke=RegExp(jR+\"(?=\"+jR+\")|\"+Wke+Jke,\"g\");function Vke(r){return r.match(zke)||[]}zV.exports=Vke});var ZV=w(($st,XV)=>{var Xke=HV(),Zke=GR(),_ke=VV();function $ke(r){return Zke(r)?_ke(r):Xke(r)}XV.exports=$ke});var $V=w((eot,_V)=>{var eRe=OV(),tRe=GR(),rRe=ZV(),iRe=Vf();function nRe(r){return function(e){e=iRe(e);var t=tRe(e)?rRe(e):void 0,i=t?t[0]:e.charAt(0),n=t?eRe(t,1).join(\"\"):e.slice(1);return i[r]()+n}}_V.exports=nRe});var t9=w((tot,e9)=>{var sRe=$V(),oRe=sRe(\"toUpperCase\");e9.exports=oRe});var PB=w((rot,r9)=>{var aRe=Vf(),ARe=t9();function lRe(r){return ARe(aRe(r).toLowerCase())}r9.exports=lRe});var i9=w((iot,DB)=>{function cRe(){var r=0,e=1,t=2,i=3,n=4,s=5,o=6,a=7,l=8,c=9,u=10,g=11,f=12,h=13,p=14,C=15,y=16,B=17,v=0,D=1,T=2,H=3,j=4;function $(A,Ae){return 55296<=A.charCodeAt(Ae)&&A.charCodeAt(Ae)<=56319&&56320<=A.charCodeAt(Ae+1)&&A.charCodeAt(Ae+1)<=57343}function V(A,Ae){Ae===void 0&&(Ae=0);var ge=A.charCodeAt(Ae);if(55296<=ge&&ge<=56319&&Ae<A.length-1){var re=ge,M=A.charCodeAt(Ae+1);return 56320<=M&&M<=57343?(re-55296)*1024+(M-56320)+65536:re}if(56320<=ge&&ge<=57343&&Ae>=1){var re=A.charCodeAt(Ae-1),M=ge;return 55296<=re&&re<=56319?(re-55296)*1024+(M-56320)+65536:M}return ge}function W(A,Ae,ge){var re=[A].concat(Ae).concat([ge]),M=re[re.length-2],F=ge,ue=re.lastIndexOf(p);if(ue>1&&re.slice(1,ue).every(function(Fe){return Fe==i})&&[i,h,B].indexOf(A)==-1)return T;var pe=re.lastIndexOf(n);if(pe>0&&re.slice(1,pe).every(function(Fe){return Fe==n})&&[f,n].indexOf(M)==-1)return re.filter(function(Fe){return Fe==n}).length%2==1?H:j;if(M==r&&F==e)return v;if(M==t||M==r||M==e)return F==p&&Ae.every(function(Fe){return Fe==i})?T:D;if(F==t||F==r||F==e)return D;if(M==o&&(F==o||F==a||F==c||F==u))return v;if((M==c||M==a)&&(F==a||F==l))return v;if((M==u||M==l)&&F==l)return v;if(F==i||F==C)return v;if(F==s)return v;if(M==f)return v;var ke=re.indexOf(i)!=-1?re.lastIndexOf(i)-1:re.length-2;return[h,B].indexOf(re[ke])!=-1&&re.slice(ke+1,-1).every(function(Fe){return Fe==i})&&F==p||M==C&&[y,B].indexOf(F)!=-1?v:Ae.indexOf(n)!=-1?T:M==n&&F==n?v:D}this.nextBreak=function(A,Ae){if(Ae===void 0&&(Ae=0),Ae<0)return 0;if(Ae>=A.length-1)return A.length;for(var ge=_(V(A,Ae)),re=[],M=Ae+1;M<A.length;M++)if(!$(A,M-1)){var F=_(V(A,M));if(W(ge,re,F))return M;re.push(F)}return A.length},this.splitGraphemes=function(A){for(var Ae=[],ge=0,re;(re=this.nextBreak(A,ge))<A.length;)Ae.push(A.slice(ge,re)),ge=re;return ge<A.length&&Ae.push(A.slice(ge)),Ae},this.iterateGraphemes=function(A){var Ae=0,ge={next:function(){var re,M;return(M=this.nextBreak(A,Ae))<A.length?(re=A.slice(Ae,M),Ae=M,{value:re,done:!1}):Ae<A.length?(re=A.slice(Ae),Ae=A.length,{value:re,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<\"u\"&&Symbol.iterator&&(ge[Symbol.iterator]=function(){return ge}),ge},this.countGraphemes=function(A){for(var Ae=0,ge=0,re;(re=this.nextBreak(A,ge))<A.length;)ge=re,Ae++;return ge<A.length&&Ae++,Ae};function _(A){return 1536<=A&&A<=1541||A==1757||A==1807||A==2274||A==3406||A==69821||70082<=A&&A<=70083||A==72250||72326<=A&&A<=72329||A==73030?f:A==13?r:A==10?e:0<=A&&A<=9||11<=A&&A<=12||14<=A&&A<=31||127<=A&&A<=159||A==173||A==1564||A==6158||A==8203||8206<=A&&A<=8207||A==8232||A==8233||8234<=A&&A<=8238||8288<=A&&A<=8292||A==8293||8294<=A&&A<=8303||55296<=A&&A<=57343||A==65279||65520<=A&&A<=65528||65529<=A&&A<=65531||113824<=A&&A<=113827||119155<=A&&A<=119162||A==917504||A==917505||917506<=A&&A<=917535||917632<=A&&A<=917759||918e3<=A&&A<=921599?t:768<=A&&A<=879||1155<=A&&A<=1159||1160<=A&&A<=1161||1425<=A&&A<=1469||A==1471||1473<=A&&A<=1474||1476<=A&&A<=1477||A==1479||1552<=A&&A<=1562||1611<=A&&A<=1631||A==1648||1750<=A&&A<=1756||1759<=A&&A<=1764||1767<=A&&A<=1768||1770<=A&&A<=1773||A==1809||1840<=A&&A<=1866||1958<=A&&A<=1968||2027<=A&&A<=2035||2070<=A&&A<=2073||2075<=A&&A<=2083||2085<=A&&A<=2087||2089<=A&&A<=2093||2137<=A&&A<=2139||2260<=A&&A<=2273||2275<=A&&A<=2306||A==2362||A==2364||2369<=A&&A<=2376||A==2381||2385<=A&&A<=2391||2402<=A&&A<=2403||A==2433||A==2492||A==2494||2497<=A&&A<=2500||A==2509||A==2519||2530<=A&&A<=2531||2561<=A&&A<=2562||A==2620||2625<=A&&A<=2626||2631<=A&&A<=2632||2635<=A&&A<=2637||A==2641||2672<=A&&A<=2673||A==2677||2689<=A&&A<=2690||A==2748||2753<=A&&A<=2757||2759<=A&&A<=2760||A==2765||2786<=A&&A<=2787||2810<=A&&A<=2815||A==2817||A==2876||A==2878||A==2879||2881<=A&&A<=2884||A==2893||A==2902||A==2903||2914<=A&&A<=2915||A==2946||A==3006||A==3008||A==3021||A==3031||A==3072||3134<=A&&A<=3136||3142<=A&&A<=3144||3146<=A&&A<=3149||3157<=A&&A<=3158||3170<=A&&A<=3171||A==3201||A==3260||A==3263||A==3266||A==3270||3276<=A&&A<=3277||3285<=A&&A<=3286||3298<=A&&A<=3299||3328<=A&&A<=3329||3387<=A&&A<=3388||A==3390||3393<=A&&A<=3396||A==3405||A==3415||3426<=A&&A<=3427||A==3530||A==3535||3538<=A&&A<=3540||A==3542||A==3551||A==3633||3636<=A&&A<=3642||3655<=A&&A<=3662||A==3761||3764<=A&&A<=3769||3771<=A&&A<=3772||3784<=A&&A<=3789||3864<=A&&A<=3865||A==3893||A==3895||A==3897||3953<=A&&A<=3966||3968<=A&&A<=3972||3974<=A&&A<=3975||3981<=A&&A<=3991||3993<=A&&A<=4028||A==4038||4141<=A&&A<=4144||4146<=A&&A<=4151||4153<=A&&A<=4154||4157<=A&&A<=4158||4184<=A&&A<=4185||4190<=A&&A<=4192||4209<=A&&A<=4212||A==4226||4229<=A&&A<=4230||A==4237||A==4253||4957<=A&&A<=4959||5906<=A&&A<=5908||5938<=A&&A<=5940||5970<=A&&A<=5971||6002<=A&&A<=6003||6068<=A&&A<=6069||6071<=A&&A<=6077||A==6086||6089<=A&&A<=6099||A==6109||6155<=A&&A<=6157||6277<=A&&A<=6278||A==6313||6432<=A&&A<=6434||6439<=A&&A<=6440||A==6450||6457<=A&&A<=6459||6679<=A&&A<=6680||A==6683||A==6742||6744<=A&&A<=6750||A==6752||A==6754||6757<=A&&A<=6764||6771<=A&&A<=6780||A==6783||6832<=A&&A<=6845||A==6846||6912<=A&&A<=6915||A==6964||6966<=A&&A<=6970||A==6972||A==6978||7019<=A&&A<=7027||7040<=A&&A<=7041||7074<=A&&A<=7077||7080<=A&&A<=7081||7083<=A&&A<=7085||A==7142||7144<=A&&A<=7145||A==7149||7151<=A&&A<=7153||7212<=A&&A<=7219||7222<=A&&A<=7223||7376<=A&&A<=7378||7380<=A&&A<=7392||7394<=A&&A<=7400||A==7405||A==7412||7416<=A&&A<=7417||7616<=A&&A<=7673||7675<=A&&A<=7679||A==8204||8400<=A&&A<=8412||8413<=A&&A<=8416||A==8417||8418<=A&&A<=8420||8421<=A&&A<=8432||11503<=A&&A<=11505||A==11647||11744<=A&&A<=11775||12330<=A&&A<=12333||12334<=A&&A<=12335||12441<=A&&A<=12442||A==42607||42608<=A&&A<=42610||42612<=A&&A<=42621||42654<=A&&A<=42655||42736<=A&&A<=42737||A==43010||A==43014||A==43019||43045<=A&&A<=43046||43204<=A&&A<=43205||43232<=A&&A<=43249||43302<=A&&A<=43309||43335<=A&&A<=43345||43392<=A&&A<=43394||A==43443||43446<=A&&A<=43449||A==43452||A==43493||43561<=A&&A<=43566||43569<=A&&A<=43570||43573<=A&&A<=43574||A==43587||A==43596||A==43644||A==43696||43698<=A&&A<=43700||43703<=A&&A<=43704||43710<=A&&A<=43711||A==43713||43756<=A&&A<=43757||A==43766||A==44005||A==44008||A==44013||A==64286||65024<=A&&A<=65039||65056<=A&&A<=65071||65438<=A&&A<=65439||A==66045||A==66272||66422<=A&&A<=66426||68097<=A&&A<=68099||68101<=A&&A<=68102||68108<=A&&A<=68111||68152<=A&&A<=68154||A==68159||68325<=A&&A<=68326||A==69633||69688<=A&&A<=69702||69759<=A&&A<=69761||69811<=A&&A<=69814||69817<=A&&A<=69818||69888<=A&&A<=69890||69927<=A&&A<=69931||69933<=A&&A<=69940||A==70003||70016<=A&&A<=70017||70070<=A&&A<=70078||70090<=A&&A<=70092||70191<=A&&A<=70193||A==70196||70198<=A&&A<=70199||A==70206||A==70367||70371<=A&&A<=70378||70400<=A&&A<=70401||A==70460||A==70462||A==70464||A==70487||70502<=A&&A<=70508||70512<=A&&A<=70516||70712<=A&&A<=70719||70722<=A&&A<=70724||A==70726||A==70832||70835<=A&&A<=70840||A==70842||A==70845||70847<=A&&A<=70848||70850<=A&&A<=70851||A==71087||71090<=A&&A<=71093||71100<=A&&A<=71101||71103<=A&&A<=71104||71132<=A&&A<=71133||71219<=A&&A<=71226||A==71229||71231<=A&&A<=71232||A==71339||A==71341||71344<=A&&A<=71349||A==71351||71453<=A&&A<=71455||71458<=A&&A<=71461||71463<=A&&A<=71467||72193<=A&&A<=72198||72201<=A&&A<=72202||72243<=A&&A<=72248||72251<=A&&A<=72254||A==72263||72273<=A&&A<=72278||72281<=A&&A<=72283||72330<=A&&A<=72342||72344<=A&&A<=72345||72752<=A&&A<=72758||72760<=A&&A<=72765||A==72767||72850<=A&&A<=72871||72874<=A&&A<=72880||72882<=A&&A<=72883||72885<=A&&A<=72886||73009<=A&&A<=73014||A==73018||73020<=A&&A<=73021||73023<=A&&A<=73029||A==73031||92912<=A&&A<=92916||92976<=A&&A<=92982||94095<=A&&A<=94098||113821<=A&&A<=113822||A==119141||119143<=A&&A<=119145||119150<=A&&A<=119154||119163<=A&&A<=119170||119173<=A&&A<=119179||119210<=A&&A<=119213||119362<=A&&A<=119364||121344<=A&&A<=121398||121403<=A&&A<=121452||A==121461||A==121476||121499<=A&&A<=121503||121505<=A&&A<=121519||122880<=A&&A<=122886||122888<=A&&A<=122904||122907<=A&&A<=122913||122915<=A&&A<=122916||122918<=A&&A<=122922||125136<=A&&A<=125142||125252<=A&&A<=125258||917536<=A&&A<=917631||917760<=A&&A<=917999?i:127462<=A&&A<=127487?n:A==2307||A==2363||2366<=A&&A<=2368||2377<=A&&A<=2380||2382<=A&&A<=2383||2434<=A&&A<=2435||2495<=A&&A<=2496||2503<=A&&A<=2504||2507<=A&&A<=2508||A==2563||2622<=A&&A<=2624||A==2691||2750<=A&&A<=2752||A==2761||2763<=A&&A<=2764||2818<=A&&A<=2819||A==2880||2887<=A&&A<=2888||2891<=A&&A<=2892||A==3007||3009<=A&&A<=3010||3014<=A&&A<=3016||3018<=A&&A<=3020||3073<=A&&A<=3075||3137<=A&&A<=3140||3202<=A&&A<=3203||A==3262||3264<=A&&A<=3265||3267<=A&&A<=3268||3271<=A&&A<=3272||3274<=A&&A<=3275||3330<=A&&A<=3331||3391<=A&&A<=3392||3398<=A&&A<=3400||3402<=A&&A<=3404||3458<=A&&A<=3459||3536<=A&&A<=3537||3544<=A&&A<=3550||3570<=A&&A<=3571||A==3635||A==3763||3902<=A&&A<=3903||A==3967||A==4145||4155<=A&&A<=4156||4182<=A&&A<=4183||A==4228||A==6070||6078<=A&&A<=6085||6087<=A&&A<=6088||6435<=A&&A<=6438||6441<=A&&A<=6443||6448<=A&&A<=6449||6451<=A&&A<=6456||6681<=A&&A<=6682||A==6741||A==6743||6765<=A&&A<=6770||A==6916||A==6965||A==6971||6973<=A&&A<=6977||6979<=A&&A<=6980||A==7042||A==7073||7078<=A&&A<=7079||A==7082||A==7143||7146<=A&&A<=7148||A==7150||7154<=A&&A<=7155||7204<=A&&A<=7211||7220<=A&&A<=7221||A==7393||7410<=A&&A<=7411||A==7415||43043<=A&&A<=43044||A==43047||43136<=A&&A<=43137||43188<=A&&A<=43203||43346<=A&&A<=43347||A==43395||43444<=A&&A<=43445||43450<=A&&A<=43451||43453<=A&&A<=43456||43567<=A&&A<=43568||43571<=A&&A<=43572||A==43597||A==43755||43758<=A&&A<=43759||A==43765||44003<=A&&A<=44004||44006<=A&&A<=44007||44009<=A&&A<=44010||A==44012||A==69632||A==69634||A==69762||69808<=A&&A<=69810||69815<=A&&A<=69816||A==69932||A==70018||70067<=A&&A<=70069||70079<=A&&A<=70080||70188<=A&&A<=70190||70194<=A&&A<=70195||A==70197||70368<=A&&A<=70370||70402<=A&&A<=70403||A==70463||70465<=A&&A<=70468||70471<=A&&A<=70472||70475<=A&&A<=70477||70498<=A&&A<=70499||70709<=A&&A<=70711||70720<=A&&A<=70721||A==70725||70833<=A&&A<=70834||A==70841||70843<=A&&A<=70844||A==70846||A==70849||71088<=A&&A<=71089||71096<=A&&A<=71099||A==71102||71216<=A&&A<=71218||71227<=A&&A<=71228||A==71230||A==71340||71342<=A&&A<=71343||A==71350||71456<=A&&A<=71457||A==71462||72199<=A&&A<=72200||A==72249||72279<=A&&A<=72280||A==72343||A==72751||A==72766||A==72873||A==72881||A==72884||94033<=A&&A<=94078||A==119142||A==119149?s:4352<=A&&A<=4447||43360<=A&&A<=43388?o:4448<=A&&A<=4519||55216<=A&&A<=55238?a:4520<=A&&A<=4607||55243<=A&&A<=55291?l:A==44032||A==44060||A==44088||A==44116||A==44144||A==44172||A==44200||A==44228||A==44256||A==44284||A==44312||A==44340||A==44368||A==44396||A==44424||A==44452||A==44480||A==44508||A==44536||A==44564||A==44592||A==44620||A==44648||A==44676||A==44704||A==44732||A==44760||A==44788||A==44816||A==44844||A==44872||A==44900||A==44928||A==44956||A==44984||A==45012||A==45040||A==45068||A==45096||A==45124||A==45152||A==45180||A==45208||A==45236||A==45264||A==45292||A==45320||A==45348||A==45376||A==45404||A==45432||A==45460||A==45488||A==45516||A==45544||A==45572||A==45600||A==45628||A==45656||A==45684||A==45712||A==45740||A==45768||A==45796||A==45824||A==45852||A==45880||A==45908||A==45936||A==45964||A==45992||A==46020||A==46048||A==46076||A==46104||A==46132||A==46160||A==46188||A==46216||A==46244||A==46272||A==46300||A==46328||A==46356||A==46384||A==46412||A==46440||A==46468||A==46496||A==46524||A==46552||A==46580||A==46608||A==46636||A==46664||A==46692||A==46720||A==46748||A==46776||A==46804||A==46832||A==46860||A==46888||A==46916||A==46944||A==46972||A==47e3||A==47028||A==47056||A==47084||A==47112||A==47140||A==47168||A==47196||A==47224||A==47252||A==47280||A==47308||A==47336||A==47364||A==47392||A==47420||A==47448||A==47476||A==47504||A==47532||A==47560||A==47588||A==47616||A==47644||A==47672||A==47700||A==47728||A==47756||A==47784||A==47812||A==47840||A==47868||A==47896||A==47924||A==47952||A==47980||A==48008||A==48036||A==48064||A==48092||A==48120||A==48148||A==48176||A==48204||A==48232||A==48260||A==48288||A==48316||A==48344||A==48372||A==48400||A==48428||A==48456||A==48484||A==48512||A==48540||A==48568||A==48596||A==48624||A==48652||A==48680||A==48708||A==48736||A==48764||A==48792||A==48820||A==48848||A==48876||A==48904||A==48932||A==48960||A==48988||A==49016||A==49044||A==49072||A==49100||A==49128||A==49156||A==49184||A==49212||A==49240||A==49268||A==49296||A==49324||A==49352||A==49380||A==49408||A==49436||A==49464||A==49492||A==49520||A==49548||A==49576||A==49604||A==49632||A==49660||A==49688||A==49716||A==49744||A==49772||A==49800||A==49828||A==49856||A==49884||A==49912||A==49940||A==49968||A==49996||A==50024||A==50052||A==50080||A==50108||A==50136||A==50164||A==50192||A==50220||A==50248||A==50276||A==50304||A==50332||A==50360||A==50388||A==50416||A==50444||A==50472||A==50500||A==50528||A==50556||A==50584||A==50612||A==50640||A==50668||A==50696||A==50724||A==50752||A==50780||A==50808||A==50836||A==50864||A==50892||A==50920||A==50948||A==50976||A==51004||A==51032||A==51060||A==51088||A==51116||A==51144||A==51172||A==51200||A==51228||A==51256||A==51284||A==51312||A==51340||A==51368||A==51396||A==51424||A==51452||A==51480||A==51508||A==51536||A==51564||A==51592||A==51620||A==51648||A==51676||A==51704||A==51732||A==51760||A==51788||A==51816||A==51844||A==51872||A==51900||A==51928||A==51956||A==51984||A==52012||A==52040||A==52068||A==52096||A==52124||A==52152||A==52180||A==52208||A==52236||A==52264||A==52292||A==52320||A==52348||A==52376||A==52404||A==52432||A==52460||A==52488||A==52516||A==52544||A==52572||A==52600||A==52628||A==52656||A==52684||A==52712||A==52740||A==52768||A==52796||A==52824||A==52852||A==52880||A==52908||A==52936||A==52964||A==52992||A==53020||A==53048||A==53076||A==53104||A==53132||A==53160||A==53188||A==53216||A==53244||A==53272||A==53300||A==53328||A==53356||A==53384||A==53412||A==53440||A==53468||A==53496||A==53524||A==53552||A==53580||A==53608||A==53636||A==53664||A==53692||A==53720||A==53748||A==53776||A==53804||A==53832||A==53860||A==53888||A==53916||A==53944||A==53972||A==54e3||A==54028||A==54056||A==54084||A==54112||A==54140||A==54168||A==54196||A==54224||A==54252||A==54280||A==54308||A==54336||A==54364||A==54392||A==54420||A==54448||A==54476||A==54504||A==54532||A==54560||A==54588||A==54616||A==54644||A==54672||A==54700||A==54728||A==54756||A==54784||A==54812||A==54840||A==54868||A==54896||A==54924||A==54952||A==54980||A==55008||A==55036||A==55064||A==55092||A==55120||A==55148||A==55176?c:44033<=A&&A<=44059||44061<=A&&A<=44087||44089<=A&&A<=44115||44117<=A&&A<=44143||44145<=A&&A<=44171||44173<=A&&A<=44199||44201<=A&&A<=44227||44229<=A&&A<=44255||44257<=A&&A<=44283||44285<=A&&A<=44311||44313<=A&&A<=44339||44341<=A&&A<=44367||44369<=A&&A<=44395||44397<=A&&A<=44423||44425<=A&&A<=44451||44453<=A&&A<=44479||44481<=A&&A<=44507||44509<=A&&A<=44535||44537<=A&&A<=44563||44565<=A&&A<=44591||44593<=A&&A<=44619||44621<=A&&A<=44647||44649<=A&&A<=44675||44677<=A&&A<=44703||44705<=A&&A<=44731||44733<=A&&A<=44759||44761<=A&&A<=44787||44789<=A&&A<=44815||44817<=A&&A<=44843||44845<=A&&A<=44871||44873<=A&&A<=44899||44901<=A&&A<=44927||44929<=A&&A<=44955||44957<=A&&A<=44983||44985<=A&&A<=45011||45013<=A&&A<=45039||45041<=A&&A<=45067||45069<=A&&A<=45095||45097<=A&&A<=45123||45125<=A&&A<=45151||45153<=A&&A<=45179||45181<=A&&A<=45207||45209<=A&&A<=45235||45237<=A&&A<=45263||45265<=A&&A<=45291||45293<=A&&A<=45319||45321<=A&&A<=45347||45349<=A&&A<=45375||45377<=A&&A<=45403||45405<=A&&A<=45431||45433<=A&&A<=45459||45461<=A&&A<=45487||45489<=A&&A<=45515||45517<=A&&A<=45543||45545<=A&&A<=45571||45573<=A&&A<=45599||45601<=A&&A<=45627||45629<=A&&A<=45655||45657<=A&&A<=45683||45685<=A&&A<=45711||45713<=A&&A<=45739||45741<=A&&A<=45767||45769<=A&&A<=45795||45797<=A&&A<=45823||45825<=A&&A<=45851||45853<=A&&A<=45879||45881<=A&&A<=45907||45909<=A&&A<=45935||45937<=A&&A<=45963||45965<=A&&A<=45991||45993<=A&&A<=46019||46021<=A&&A<=46047||46049<=A&&A<=46075||46077<=A&&A<=46103||46105<=A&&A<=46131||46133<=A&&A<=46159||46161<=A&&A<=46187||46189<=A&&A<=46215||46217<=A&&A<=46243||46245<=A&&A<=46271||46273<=A&&A<=46299||46301<=A&&A<=46327||46329<=A&&A<=46355||46357<=A&&A<=46383||46385<=A&&A<=46411||46413<=A&&A<=46439||46441<=A&&A<=46467||46469<=A&&A<=46495||46497<=A&&A<=46523||46525<=A&&A<=46551||46553<=A&&A<=46579||46581<=A&&A<=46607||46609<=A&&A<=46635||46637<=A&&A<=46663||46665<=A&&A<=46691||46693<=A&&A<=46719||46721<=A&&A<=46747||46749<=A&&A<=46775||46777<=A&&A<=46803||46805<=A&&A<=46831||46833<=A&&A<=46859||46861<=A&&A<=46887||46889<=A&&A<=46915||46917<=A&&A<=46943||46945<=A&&A<=46971||46973<=A&&A<=46999||47001<=A&&A<=47027||47029<=A&&A<=47055||47057<=A&&A<=47083||47085<=A&&A<=47111||47113<=A&&A<=47139||47141<=A&&A<=47167||47169<=A&&A<=47195||47197<=A&&A<=47223||47225<=A&&A<=47251||47253<=A&&A<=47279||47281<=A&&A<=47307||47309<=A&&A<=47335||47337<=A&&A<=47363||47365<=A&&A<=47391||47393<=A&&A<=47419||47421<=A&&A<=47447||47449<=A&&A<=47475||47477<=A&&A<=47503||47505<=A&&A<=47531||47533<=A&&A<=47559||47561<=A&&A<=47587||47589<=A&&A<=47615||47617<=A&&A<=47643||47645<=A&&A<=47671||47673<=A&&A<=47699||47701<=A&&A<=47727||47729<=A&&A<=47755||47757<=A&&A<=47783||47785<=A&&A<=47811||47813<=A&&A<=47839||47841<=A&&A<=47867||47869<=A&&A<=47895||47897<=A&&A<=47923||47925<=A&&A<=47951||47953<=A&&A<=47979||47981<=A&&A<=48007||48009<=A&&A<=48035||48037<=A&&A<=48063||48065<=A&&A<=48091||48093<=A&&A<=48119||48121<=A&&A<=48147||48149<=A&&A<=48175||48177<=A&&A<=48203||48205<=A&&A<=48231||48233<=A&&A<=48259||48261<=A&&A<=48287||48289<=A&&A<=48315||48317<=A&&A<=48343||48345<=A&&A<=48371||48373<=A&&A<=48399||48401<=A&&A<=48427||48429<=A&&A<=48455||48457<=A&&A<=48483||48485<=A&&A<=48511||48513<=A&&A<=48539||48541<=A&&A<=48567||48569<=A&&A<=48595||48597<=A&&A<=48623||48625<=A&&A<=48651||48653<=A&&A<=48679||48681<=A&&A<=48707||48709<=A&&A<=48735||48737<=A&&A<=48763||48765<=A&&A<=48791||48793<=A&&A<=48819||48821<=A&&A<=48847||48849<=A&&A<=48875||48877<=A&&A<=48903||48905<=A&&A<=48931||48933<=A&&A<=48959||48961<=A&&A<=48987||48989<=A&&A<=49015||49017<=A&&A<=49043||49045<=A&&A<=49071||49073<=A&&A<=49099||49101<=A&&A<=49127||49129<=A&&A<=49155||49157<=A&&A<=49183||49185<=A&&A<=49211||49213<=A&&A<=49239||49241<=A&&A<=49267||49269<=A&&A<=49295||49297<=A&&A<=49323||49325<=A&&A<=49351||49353<=A&&A<=49379||49381<=A&&A<=49407||49409<=A&&A<=49435||49437<=A&&A<=49463||49465<=A&&A<=49491||49493<=A&&A<=49519||49521<=A&&A<=49547||49549<=A&&A<=49575||49577<=A&&A<=49603||49605<=A&&A<=49631||49633<=A&&A<=49659||49661<=A&&A<=49687||49689<=A&&A<=49715||49717<=A&&A<=49743||49745<=A&&A<=49771||49773<=A&&A<=49799||49801<=A&&A<=49827||49829<=A&&A<=49855||49857<=A&&A<=49883||49885<=A&&A<=49911||49913<=A&&A<=49939||49941<=A&&A<=49967||49969<=A&&A<=49995||49997<=A&&A<=50023||50025<=A&&A<=50051||50053<=A&&A<=50079||50081<=A&&A<=50107||50109<=A&&A<=50135||50137<=A&&A<=50163||50165<=A&&A<=50191||50193<=A&&A<=50219||50221<=A&&A<=50247||50249<=A&&A<=50275||50277<=A&&A<=50303||50305<=A&&A<=50331||50333<=A&&A<=50359||50361<=A&&A<=50387||50389<=A&&A<=50415||50417<=A&&A<=50443||50445<=A&&A<=50471||50473<=A&&A<=50499||50501<=A&&A<=50527||50529<=A&&A<=50555||50557<=A&&A<=50583||50585<=A&&A<=50611||50613<=A&&A<=50639||50641<=A&&A<=50667||50669<=A&&A<=50695||50697<=A&&A<=50723||50725<=A&&A<=50751||50753<=A&&A<=50779||50781<=A&&A<=50807||50809<=A&&A<=50835||50837<=A&&A<=50863||50865<=A&&A<=50891||50893<=A&&A<=50919||50921<=A&&A<=50947||50949<=A&&A<=50975||50977<=A&&A<=51003||51005<=A&&A<=51031||51033<=A&&A<=51059||51061<=A&&A<=51087||51089<=A&&A<=51115||51117<=A&&A<=51143||51145<=A&&A<=51171||51173<=A&&A<=51199||51201<=A&&A<=51227||51229<=A&&A<=51255||51257<=A&&A<=51283||51285<=A&&A<=51311||51313<=A&&A<=51339||51341<=A&&A<=51367||51369<=A&&A<=51395||51397<=A&&A<=51423||51425<=A&&A<=51451||51453<=A&&A<=51479||51481<=A&&A<=51507||51509<=A&&A<=51535||51537<=A&&A<=51563||51565<=A&&A<=51591||51593<=A&&A<=51619||51621<=A&&A<=51647||51649<=A&&A<=51675||51677<=A&&A<=51703||51705<=A&&A<=51731||51733<=A&&A<=51759||51761<=A&&A<=51787||51789<=A&&A<=51815||51817<=A&&A<=51843||51845<=A&&A<=51871||51873<=A&&A<=51899||51901<=A&&A<=51927||51929<=A&&A<=51955||51957<=A&&A<=51983||51985<=A&&A<=52011||52013<=A&&A<=52039||52041<=A&&A<=52067||52069<=A&&A<=52095||52097<=A&&A<=52123||52125<=A&&A<=52151||52153<=A&&A<=52179||52181<=A&&A<=52207||52209<=A&&A<=52235||52237<=A&&A<=52263||52265<=A&&A<=52291||52293<=A&&A<=52319||52321<=A&&A<=52347||52349<=A&&A<=52375||52377<=A&&A<=52403||52405<=A&&A<=52431||52433<=A&&A<=52459||52461<=A&&A<=52487||52489<=A&&A<=52515||52517<=A&&A<=52543||52545<=A&&A<=52571||52573<=A&&A<=52599||52601<=A&&A<=52627||52629<=A&&A<=52655||52657<=A&&A<=52683||52685<=A&&A<=52711||52713<=A&&A<=52739||52741<=A&&A<=52767||52769<=A&&A<=52795||52797<=A&&A<=52823||52825<=A&&A<=52851||52853<=A&&A<=52879||52881<=A&&A<=52907||52909<=A&&A<=52935||52937<=A&&A<=52963||52965<=A&&A<=52991||52993<=A&&A<=53019||53021<=A&&A<=53047||53049<=A&&A<=53075||53077<=A&&A<=53103||53105<=A&&A<=53131||53133<=A&&A<=53159||53161<=A&&A<=53187||53189<=A&&A<=53215||53217<=A&&A<=53243||53245<=A&&A<=53271||53273<=A&&A<=53299||53301<=A&&A<=53327||53329<=A&&A<=53355||53357<=A&&A<=53383||53385<=A&&A<=53411||53413<=A&&A<=53439||53441<=A&&A<=53467||53469<=A&&A<=53495||53497<=A&&A<=53523||53525<=A&&A<=53551||53553<=A&&A<=53579||53581<=A&&A<=53607||53609<=A&&A<=53635||53637<=A&&A<=53663||53665<=A&&A<=53691||53693<=A&&A<=53719||53721<=A&&A<=53747||53749<=A&&A<=53775||53777<=A&&A<=53803||53805<=A&&A<=53831||53833<=A&&A<=53859||53861<=A&&A<=53887||53889<=A&&A<=53915||53917<=A&&A<=53943||53945<=A&&A<=53971||53973<=A&&A<=53999||54001<=A&&A<=54027||54029<=A&&A<=54055||54057<=A&&A<=54083||54085<=A&&A<=54111||54113<=A&&A<=54139||54141<=A&&A<=54167||54169<=A&&A<=54195||54197<=A&&A<=54223||54225<=A&&A<=54251||54253<=A&&A<=54279||54281<=A&&A<=54307||54309<=A&&A<=54335||54337<=A&&A<=54363||54365<=A&&A<=54391||54393<=A&&A<=54419||54421<=A&&A<=54447||54449<=A&&A<=54475||54477<=A&&A<=54503||54505<=A&&A<=54531||54533<=A&&A<=54559||54561<=A&&A<=54587||54589<=A&&A<=54615||54617<=A&&A<=54643||54645<=A&&A<=54671||54673<=A&&A<=54699||54701<=A&&A<=54727||54729<=A&&A<=54755||54757<=A&&A<=54783||54785<=A&&A<=54811||54813<=A&&A<=54839||54841<=A&&A<=54867||54869<=A&&A<=54895||54897<=A&&A<=54923||54925<=A&&A<=54951||54953<=A&&A<=54979||54981<=A&&A<=55007||55009<=A&&A<=55035||55037<=A&&A<=55063||55065<=A&&A<=55091||55093<=A&&A<=55119||55121<=A&&A<=55147||55149<=A&&A<=55175||55177<=A&&A<=55203?u:A==9757||A==9977||9994<=A&&A<=9997||A==127877||127938<=A&&A<=127940||A==127943||127946<=A&&A<=127948||128066<=A&&A<=128067||128070<=A&&A<=128080||A==128110||128112<=A&&A<=128120||A==128124||128129<=A&&A<=128131||128133<=A&&A<=128135||A==128170||128372<=A&&A<=128373||A==128378||A==128400||128405<=A&&A<=128406||128581<=A&&A<=128583||128587<=A&&A<=128591||A==128675||128692<=A&&A<=128694||A==128704||A==128716||129304<=A&&A<=129308||129310<=A&&A<=129311||A==129318||129328<=A&&A<=129337||129341<=A&&A<=129342||129489<=A&&A<=129501?h:127995<=A&&A<=127999?p:A==8205?C:A==9792||A==9794||9877<=A&&A<=9878||A==9992||A==10084||A==127752||A==127806||A==127859||A==127891||A==127908||A==127912||A==127979||A==127981||A==128139||128187<=A&&A<=128188||A==128295||A==128300||A==128488||A==128640||A==128658?y:128102<=A&&A<=128105?B:g}return this}typeof DB<\"u\"&&DB.exports&&(DB.exports=cRe)});var s9=w((not,n9)=>{var uRe=/^(.*?)(\\x1b\\[[^m]+m|\\x1b\\]8;;.*?(\\x1b\\\\|\\u0007))/,kB;function gRe(){if(kB)return kB;if(typeof Intl.Segmenter<\"u\"){let r=new Intl.Segmenter(\"en\",{granularity:\"grapheme\"});return kB=e=>Array.from(r.segment(e),({segment:t})=>t)}else{let r=i9(),e=new r;return kB=t=>e.splitGraphemes(t)}}n9.exports=(r,e=0,t=r.length)=>{if(e<0||t<0)throw new RangeError(\"Negative indices aren't supported by this implementation\");let i=t-e,n=\"\",s=0,o=0;for(;r.length>0;){let a=r.match(uRe)||[r,r,void 0],l=gRe()(a[1]),c=Math.min(e-s,l.length);l=l.slice(c);let u=Math.min(i-o,l.length);n+=l.slice(0,u).join(\"\"),s+=c,o+=u,typeof a[2]<\"u\"&&(n+=a[2]),r=r.slice(a[0].length)}return n}});var Xf=w((bot,y9)=>{\"use strict\";var I9=new Map([[\"C\",\"cwd\"],[\"f\",\"file\"],[\"z\",\"gzip\"],[\"P\",\"preservePaths\"],[\"U\",\"unlink\"],[\"strip-components\",\"strip\"],[\"stripComponents\",\"strip\"],[\"keep-newer\",\"newer\"],[\"keepNewer\",\"newer\"],[\"keep-newer-files\",\"newer\"],[\"keepNewerFiles\",\"newer\"],[\"k\",\"keep\"],[\"keep-existing\",\"keep\"],[\"keepExisting\",\"keep\"],[\"m\",\"noMtime\"],[\"no-mtime\",\"noMtime\"],[\"p\",\"preserveOwner\"],[\"L\",\"follow\"],[\"h\",\"follow\"]]);y9.exports=r=>r?Object.keys(r).map(e=>[I9.has(e)?I9.get(e):e,r[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var _f=w((Qot,D9)=>{\"use strict\";var w9=typeof process==\"object\"&&process?process:{stdout:null,stderr:null},QRe=J(\"events\"),B9=J(\"stream\"),b9=J(\"string_decoder\").StringDecoder,Wa=Symbol(\"EOF\"),za=Symbol(\"maybeEmitEnd\"),rl=Symbol(\"emittedEnd\"),MB=Symbol(\"emittingEnd\"),NC=Symbol(\"emittedError\"),OB=Symbol(\"closed\"),Q9=Symbol(\"read\"),KB=Symbol(\"flush\"),S9=Symbol(\"flushChunk\"),xn=Symbol(\"encoding\"),Va=Symbol(\"decoder\"),UB=Symbol(\"flowing\"),TC=Symbol(\"paused\"),Zf=Symbol(\"resume\"),Ci=Symbol(\"bufferLength\"),XR=Symbol(\"bufferPush\"),ZR=Symbol(\"bufferShift\"),Hi=Symbol(\"objectMode\"),Gi=Symbol(\"destroyed\"),_R=Symbol(\"emitData\"),v9=Symbol(\"emitEnd\"),$R=Symbol(\"emitEnd2\"),Xa=Symbol(\"async\"),LC=r=>Promise.resolve().then(r),x9=global._MP_NO_ITERATOR_SYMBOLS_!==\"1\",SRe=x9&&Symbol.asyncIterator||Symbol(\"asyncIterator not implemented\"),vRe=x9&&Symbol.iterator||Symbol(\"iterator not implemented\"),xRe=r=>r===\"end\"||r===\"finish\"||r===\"prefinish\",PRe=r=>r instanceof ArrayBuffer||typeof r==\"object\"&&r.constructor&&r.constructor.name===\"ArrayBuffer\"&&r.byteLength>=0,DRe=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),HB=class{constructor(e,t,i){this.src=e,this.dest=t,this.opts=i,this.ondrain=()=>e[Zf](),t.on(\"drain\",this.ondrain)}unpipe(){this.dest.removeListener(\"drain\",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},eF=class extends HB{unpipe(){this.src.removeListener(\"error\",this.proxyErrors),super.unpipe()}constructor(e,t,i){super(e,t,i),this.proxyErrors=n=>t.emit(\"error\",n),e.on(\"error\",this.proxyErrors)}};D9.exports=class P9 extends B9{constructor(e){super(),this[UB]=!1,this[TC]=!1,this.pipes=[],this.buffer=[],this[Hi]=e&&e.objectMode||!1,this[Hi]?this[xn]=null:this[xn]=e&&e.encoding||null,this[xn]===\"buffer\"&&(this[xn]=null),this[Xa]=e&&!!e.async||!1,this[Va]=this[xn]?new b9(this[xn]):null,this[Wa]=!1,this[rl]=!1,this[MB]=!1,this[OB]=!1,this[NC]=null,this.writable=!0,this.readable=!0,this[Ci]=0,this[Gi]=!1}get bufferLength(){return this[Ci]}get encoding(){return this[xn]}set encoding(e){if(this[Hi])throw new Error(\"cannot set encoding in objectMode\");if(this[xn]&&e!==this[xn]&&(this[Va]&&this[Va].lastNeed||this[Ci]))throw new Error(\"cannot change encoding\");this[xn]!==e&&(this[Va]=e?new b9(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Va].write(t)))),this[xn]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Hi]}set objectMode(e){this[Hi]=this[Hi]||!!e}get async(){return this[Xa]}set async(e){this[Xa]=this[Xa]||!!e}write(e,t,i){if(this[Wa])throw new Error(\"write after end\");if(this[Gi])return this.emit(\"error\",Object.assign(new Error(\"Cannot call write after a stream was destroyed\"),{code:\"ERR_STREAM_DESTROYED\"})),!0;typeof t==\"function\"&&(i=t,t=\"utf8\"),t||(t=\"utf8\");let n=this[Xa]?LC:s=>s();return!this[Hi]&&!Buffer.isBuffer(e)&&(DRe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):PRe(e)?e=Buffer.from(e):typeof e!=\"string\"&&(this.objectMode=!0)),this[Hi]?(this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):e.length?(typeof e==\"string\"&&!(t===this[xn]&&!this[Va].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xn]&&(e=this[Va].write(e)),this.flowing&&this[Ci]!==0&&this[KB](!0),this.flowing?this.emit(\"data\",e):this[XR](e),this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing):(this[Ci]!==0&&this.emit(\"readable\"),i&&n(i),this.flowing)}read(e){if(this[Gi])return null;if(this[Ci]===0||e===0||e>this[Ci])return this[za](),null;this[Hi]&&(e=null),this.buffer.length>1&&!this[Hi]&&(this.encoding?this.buffer=[this.buffer.join(\"\")]:this.buffer=[Buffer.concat(this.buffer,this[Ci])]);let t=this[Q9](e||null,this.buffer[0]);return this[za](),t}[Q9](e,t){return e===t.length||e===null?this[ZR]():(this.buffer[0]=t.slice(e),t=t.slice(0,e),this[Ci]-=e),this.emit(\"data\",t),!this.buffer.length&&!this[Wa]&&this.emit(\"drain\"),t}end(e,t,i){return typeof e==\"function\"&&(i=e,e=null),typeof t==\"function\"&&(i=t,t=\"utf8\"),e&&this.write(e,t),i&&this.once(\"end\",i),this[Wa]=!0,this.writable=!1,(this.flowing||!this[TC])&&this[za](),this}[Zf](){this[Gi]||(this[TC]=!1,this[UB]=!0,this.emit(\"resume\"),this.buffer.length?this[KB]():this[Wa]?this[za]():this.emit(\"drain\"))}resume(){return this[Zf]()}pause(){this[UB]=!1,this[TC]=!0}get destroyed(){return this[Gi]}get flowing(){return this[UB]}get paused(){return this[TC]}[XR](e){this[Hi]?this[Ci]+=1:this[Ci]+=e.length,this.buffer.push(e)}[ZR](){return this.buffer.length&&(this[Hi]?this[Ci]-=1:this[Ci]-=this.buffer[0].length),this.buffer.shift()}[KB](e){do;while(this[S9](this[ZR]()));!e&&!this.buffer.length&&!this[Wa]&&this.emit(\"drain\")}[S9](e){return e?(this.emit(\"data\",e),this.flowing):!1}pipe(e,t){if(this[Gi])return;let i=this[rl];return t=t||{},e===w9.stdout||e===w9.stderr?t.end=!1:t.end=t.end!==!1,t.proxyErrors=!!t.proxyErrors,i?t.end&&e.end():(this.pipes.push(t.proxyErrors?new eF(this,e,t):new HB(this,e,t)),this[Xa]?LC(()=>this[Zf]()):this[Zf]()),e}unpipe(e){let t=this.pipes.find(i=>i.dest===e);t&&(this.pipes.splice(this.pipes.indexOf(t),1),t.unpipe())}addListener(e,t){return this.on(e,t)}on(e,t){let i=super.on(e,t);return e===\"data\"&&!this.pipes.length&&!this.flowing?this[Zf]():e===\"readable\"&&this[Ci]!==0?super.emit(\"readable\"):xRe(e)&&this[rl]?(super.emit(e),this.removeAllListeners(e)):e===\"error\"&&this[NC]&&(this[Xa]?LC(()=>t.call(this,this[NC])):t.call(this,this[NC])),i}get emittedEnd(){return this[rl]}[za](){!this[MB]&&!this[rl]&&!this[Gi]&&this.buffer.length===0&&this[Wa]&&(this[MB]=!0,this.emit(\"end\"),this.emit(\"prefinish\"),this.emit(\"finish\"),this[OB]&&this.emit(\"close\"),this[MB]=!1)}emit(e,t,...i){if(e!==\"error\"&&e!==\"close\"&&e!==Gi&&this[Gi])return;if(e===\"data\")return t?this[Xa]?LC(()=>this[_R](t)):this[_R](t):!1;if(e===\"end\")return this[v9]();if(e===\"close\"){if(this[OB]=!0,!this[rl]&&!this[Gi])return;let s=super.emit(\"close\");return this.removeAllListeners(\"close\"),s}else if(e===\"error\"){this[NC]=t;let s=super.emit(\"error\",t);return this[za](),s}else if(e===\"resume\"){let s=super.emit(\"resume\");return this[za](),s}else if(e===\"finish\"||e===\"prefinish\"){let s=super.emit(e);return this.removeAllListeners(e),s}let n=super.emit(e,t,...i);return this[za](),n}[_R](e){for(let i of this.pipes)i.dest.write(e)===!1&&this.pause();let t=super.emit(\"data\",e);return this[za](),t}[v9](){this[rl]||(this[rl]=!0,this.readable=!1,this[Xa]?LC(()=>this[$R]()):this[$R]())}[$R](){if(this[Va]){let t=this[Va].end();if(t){for(let i of this.pipes)i.dest.write(t);super.emit(\"data\",t)}}for(let t of this.pipes)t.end();let e=super.emit(\"end\");return this.removeAllListeners(\"end\"),e}collect(){let e=[];this[Hi]||(e.dataLength=0);let t=this.promise();return this.on(\"data\",i=>{e.push(i),this[Hi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this.collect().then(e=>this[Hi]?Promise.reject(new Error(\"cannot concat in objectMode\")):this[xn]?e.join(\"\"):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(Gi,()=>t(new Error(\"stream destroyed\"))),this.on(\"error\",i=>t(i)),this.on(\"end\",()=>e())})}[SRe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Wa])return Promise.resolve({done:!0});let i=null,n=null,s=c=>{this.removeListener(\"data\",o),this.removeListener(\"end\",a),n(c)},o=c=>{this.removeListener(\"error\",s),this.removeListener(\"end\",a),this.pause(),i({value:c,done:!!this[Wa]})},a=()=>{this.removeListener(\"error\",s),this.removeListener(\"data\",o),i({done:!0})},l=()=>s(new Error(\"stream destroyed\"));return new Promise((c,u)=>{n=u,i=c,this.once(Gi,l),this.once(\"error\",s),this.once(\"end\",a),this.once(\"data\",o)})}}}[vRe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[Gi]?(e?this.emit(\"error\",e):this.emit(Gi),this):(this[Gi]=!0,this.buffer.length=0,this[Ci]=0,typeof this.close==\"function\"&&!this[OB]&&this.close(),e?this.emit(\"error\",e):this.emit(Gi),this)}static isStream(e){return!!e&&(e instanceof P9||e instanceof B9||e instanceof QRe&&(typeof e.pipe==\"function\"||typeof e.write==\"function\"&&typeof e.end==\"function\"))}}});var R9=w((Sot,k9)=>{var kRe=J(\"zlib\").constants||{ZLIB_VERNUM:4736};k9.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},kRe))});var dF=w(Xn=>{\"use strict\";var sF=J(\"assert\"),il=J(\"buffer\").Buffer,T9=J(\"zlib\"),Uc=Xn.constants=R9(),RRe=_f(),F9=il.concat,Hc=Symbol(\"_superWrite\"),eh=class extends Error{constructor(e){super(\"zlib: \"+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code=\"ZLIB_ERROR\"),this.message=\"zlib: \"+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return\"ZlibError\"}},FRe=Symbol(\"opts\"),MC=Symbol(\"flushFlag\"),N9=Symbol(\"finishFlushFlag\"),pF=Symbol(\"fullFlushFlag\"),cr=Symbol(\"handle\"),GB=Symbol(\"onError\"),$f=Symbol(\"sawError\"),tF=Symbol(\"level\"),rF=Symbol(\"strategy\"),iF=Symbol(\"ended\"),vot=Symbol(\"_defaultFullFlush\"),YB=class extends RRe{constructor(e,t){if(!e||typeof e!=\"object\")throw new TypeError(\"invalid options for ZlibBase constructor\");super(e),this[$f]=!1,this[iF]=!1,this[FRe]=e,this[MC]=e.flush,this[N9]=e.finishFlush;try{this[cr]=new T9[t](e)}catch(i){throw new eh(i)}this[GB]=i=>{this[$f]||(this[$f]=!0,this.close(),this.emit(\"error\",i))},this[cr].on(\"error\",i=>this[GB](new eh(i))),this.once(\"end\",()=>this.close)}close(){this[cr]&&(this[cr].close(),this[cr]=null,this.emit(\"close\"))}reset(){if(!this[$f])return sF(this[cr],\"zlib binding closed\"),this[cr].reset()}flush(e){this.ended||(typeof e!=\"number\"&&(e=this[pF]),this.write(Object.assign(il.alloc(0),{[MC]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[N9]),this[iF]=!0,super.end(null,null,i)}get ended(){return this[iF]}write(e,t,i){if(typeof t==\"function\"&&(i=t,t=\"utf8\"),typeof e==\"string\"&&(e=il.from(e,t)),this[$f])return;sF(this[cr],\"zlib binding closed\");let n=this[cr]._handle,s=n.close;n.close=()=>{};let o=this[cr].close;this[cr].close=()=>{},il.concat=c=>c;let a;try{let c=typeof e[MC]==\"number\"?e[MC]:this[MC];a=this[cr]._processChunk(e,c),il.concat=F9}catch(c){il.concat=F9,this[GB](new eh(c))}finally{this[cr]&&(this[cr]._handle=n,n.close=s,this[cr].close=o,this[cr].removeAllListeners(\"error\"))}this[cr]&&this[cr].on(\"error\",c=>this[GB](new eh(c)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[Hc](il.from(a[0]));for(let c=1;c<a.length;c++)l=this[Hc](a[c])}else l=this[Hc](il.from(a));return i&&i(),l}[Hc](e){return super.write(e)}},Za=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.Z_NO_FLUSH,e.finishFlush=e.finishFlush||Uc.Z_FINISH,super(e,t),this[pF]=Uc.Z_FULL_FLUSH,this[tF]=e.level,this[rF]=e.strategy}params(e,t){if(!this[$f]){if(!this[cr])throw new Error(\"cannot switch params when binding is closed\");if(!this[cr].params)throw new Error(\"not supported in this implementation\");if(this[tF]!==e||this[rF]!==t){this.flush(Uc.Z_SYNC_FLUSH),sF(this[cr],\"zlib binding closed\");let i=this[cr].flush;this[cr].flush=(n,s)=>{this.flush(n),s()};try{this[cr].params(e,t)}finally{this[cr].flush=i}this[cr]&&(this[tF]=e,this[rF]=t)}}}},oF=class extends Za{constructor(e){super(e,\"Deflate\")}},aF=class extends Za{constructor(e){super(e,\"Inflate\")}},nF=Symbol(\"_portable\"),AF=class extends Za{constructor(e){super(e,\"Gzip\"),this[nF]=e&&!!e.portable}[Hc](e){return this[nF]?(this[nF]=!1,e[9]=255,super[Hc](e)):super[Hc](e)}},lF=class extends Za{constructor(e){super(e,\"Gunzip\")}},cF=class extends Za{constructor(e){super(e,\"DeflateRaw\")}},uF=class extends Za{constructor(e){super(e,\"InflateRaw\")}},gF=class extends Za{constructor(e){super(e,\"Unzip\")}},jB=class extends YB{constructor(e,t){e=e||{},e.flush=e.flush||Uc.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Uc.BROTLI_OPERATION_FINISH,super(e,t),this[pF]=Uc.BROTLI_OPERATION_FLUSH}},fF=class extends jB{constructor(e){super(e,\"BrotliCompress\")}},hF=class extends jB{constructor(e){super(e,\"BrotliDecompress\")}};Xn.Deflate=oF;Xn.Inflate=aF;Xn.Gzip=AF;Xn.Gunzip=lF;Xn.DeflateRaw=cF;Xn.InflateRaw=uF;Xn.Unzip=gF;typeof T9.BrotliCompress==\"function\"?(Xn.BrotliCompress=fF,Xn.BrotliDecompress=hF):Xn.BrotliCompress=Xn.BrotliDecompress=class{constructor(){throw new Error(\"Brotli is not supported in this version of Node.js\")}}});var th=w((Dot,L9)=>{var NRe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;L9.exports=NRe!==\"win32\"?r=>r:r=>r&&r.replace(/\\\\/g,\"/\")});var qB=w((Rot,M9)=>{\"use strict\";var TRe=_f(),CF=th(),mF=Symbol(\"slurp\");M9.exports=class extends TRe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case\"File\":case\"OldFile\":case\"Link\":case\"SymbolicLink\":case\"CharacterDevice\":case\"BlockDevice\":case\"Directory\":case\"FIFO\":case\"ContiguousFile\":case\"GNUDumpDir\":break;case\"NextFileHasLongLinkpath\":case\"NextFileHasLongPath\":case\"OldGnuLongPath\":case\"GlobalExtendedHeader\":case\"ExtendedHeader\":case\"OldExtendedHeader\":this.meta=!0;break;default:this.ignore=!0}this.path=CF(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=CF(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[mF](t),i&&this[mF](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");let i=this.remain,n=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,n-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[mF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=i===\"path\"||i===\"linkpath\"?CF(e[i]):e[i])}}});var EF=w(JB=>{\"use strict\";JB.name=new Map([[\"0\",\"File\"],[\"\",\"OldFile\"],[\"1\",\"Link\"],[\"2\",\"SymbolicLink\"],[\"3\",\"CharacterDevice\"],[\"4\",\"BlockDevice\"],[\"5\",\"Directory\"],[\"6\",\"FIFO\"],[\"7\",\"ContiguousFile\"],[\"g\",\"GlobalExtendedHeader\"],[\"x\",\"ExtendedHeader\"],[\"A\",\"SolarisACL\"],[\"D\",\"GNUDumpDir\"],[\"I\",\"Inode\"],[\"K\",\"NextFileHasLongLinkpath\"],[\"L\",\"NextFileHasLongPath\"],[\"M\",\"ContinuationFile\"],[\"N\",\"OldGnuLongPath\"],[\"S\",\"SparseFile\"],[\"V\",\"TapeVolumeHeader\"],[\"X\",\"OldExtendedHeader\"]]);JB.code=new Map(Array.from(JB.name).map(r=>[r[1],r[0]]))});var H9=w((Not,U9)=>{\"use strict\";var LRe=(r,e)=>{if(Number.isSafeInteger(r))r<0?ORe(r,e):MRe(r,e);else throw Error(\"cannot encode number outside of javascript safe integer range\");return e},MRe=(r,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=r&255,r=Math.floor(r/256)},ORe=(r,e)=>{e[0]=255;var t=!1;r=r*-1;for(var i=e.length;i>1;i--){var n=r&255;r=Math.floor(r/256),t?e[i-1]=O9(n):n===0?e[i-1]=0:(t=!0,e[i-1]=K9(n))}},KRe=r=>{let e=r[0],t=e===128?HRe(r.slice(1,r.length)):e===255?URe(r):null;if(t===null)throw Error(\"invalid base256 encoding\");if(!Number.isSafeInteger(t))throw Error(\"parsed number outside of javascript safe integer range\");return t},URe=r=>{for(var e=r.length,t=0,i=!1,n=e-1;n>-1;n--){var s=r[n],o;i?o=O9(s):s===0?o=s:(i=!0,o=K9(s)),o!==0&&(t-=o*Math.pow(256,e-n-1))}return t},HRe=r=>{for(var e=r.length,t=0,i=e-1;i>-1;i--){var n=r[i];n!==0&&(t+=n*Math.pow(256,e-i-1))}return t},O9=r=>(255^r)&255,K9=r=>(255^r)+1&255;U9.exports={encode:LRe,parse:KRe}});var ih=w((Tot,Y9)=>{\"use strict\";var IF=EF(),rh=J(\"path\").posix,G9=H9(),yF=Symbol(\"slurp\"),Zn=Symbol(\"type\"),bF=class{constructor(e,t,i,n){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[Zn]=\"0\",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,n):e&&this.set(e)}decode(e,t,i,n){if(t||(t=0),!e||!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");if(this.path=Gc(e,t,100),this.mode=nl(e,t+100,8),this.uid=nl(e,t+108,8),this.gid=nl(e,t+116,8),this.size=nl(e,t+124,12),this.mtime=wF(e,t+136,12),this.cksum=nl(e,t+148,12),this[yF](i),this[yF](n,!0),this[Zn]=Gc(e,t+156,1),this[Zn]===\"\"&&(this[Zn]=\"0\"),this[Zn]===\"0\"&&this.path.substr(-1)===\"/\"&&(this[Zn]=\"5\"),this[Zn]===\"5\"&&(this.size=0),this.linkpath=Gc(e,t+157,100),e.slice(t+257,t+265).toString()===\"ustar\\x0000\")if(this.uname=Gc(e,t+265,32),this.gname=Gc(e,t+297,32),this.devmaj=nl(e,t+329,8),this.devmin=nl(e,t+337,8),e[t+475]!==0){let o=Gc(e,t+345,155);this.path=o+\"/\"+this.path}else{let o=Gc(e,t+345,130);o&&(this.path=o+\"/\"+this.path),this.atime=wF(e,t+476,12),this.ctime=wF(e,t+488,12)}let s=8*32;for(let o=t;o<t+148;o++)s+=e[o];for(let o=t+156;o<t+512;o++)s+=e[o];this.cksumValid=s===this.cksum,this.cksum===null&&s===8*32&&(this.nullBlock=!0)}[yF](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i===\"path\")&&(this[i]=e[i])}encode(e,t){if(e||(e=this.block=Buffer.alloc(512),t=0),t||(t=0),!(e.length>=t+512))throw new Error(\"need 512 bytes for header\");let i=this.ctime||this.atime?130:155,n=GRe(this.path||\"\",i),s=n[0],o=n[1];this.needPax=n[2],this.needPax=Yc(e,t,100,s)||this.needPax,this.needPax=sl(e,t+100,8,this.mode)||this.needPax,this.needPax=sl(e,t+108,8,this.uid)||this.needPax,this.needPax=sl(e,t+116,8,this.gid)||this.needPax,this.needPax=sl(e,t+124,12,this.size)||this.needPax,this.needPax=BF(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[Zn].charCodeAt(0),this.needPax=Yc(e,t+157,100,this.linkpath)||this.needPax,e.write(\"ustar\\x0000\",t+257,8),this.needPax=Yc(e,t+265,32,this.uname)||this.needPax,this.needPax=Yc(e,t+297,32,this.gname)||this.needPax,this.needPax=sl(e,t+329,8,this.devmaj)||this.needPax,this.needPax=sl(e,t+337,8,this.devmin)||this.needPax,this.needPax=Yc(e,t+345,i,o)||this.needPax,e[t+475]!==0?this.needPax=Yc(e,t+345,155,o)||this.needPax:(this.needPax=Yc(e,t+345,130,o)||this.needPax,this.needPax=BF(e,t+476,12,this.atime)||this.needPax,this.needPax=BF(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l<t+148;l++)a+=e[l];for(let l=t+156;l<t+512;l++)a+=e[l];return this.cksum=a,sl(e,t+148,8,this.cksum),this.cksumValid=!0,this.needPax}set(e){for(let t in e)e[t]!==null&&e[t]!==void 0&&(this[t]=e[t])}get type(){return IF.name.get(this[Zn])||this[Zn]}get typeKey(){return this[Zn]}set type(e){IF.code.has(e)?this[Zn]=IF.code.get(e):this[Zn]=e}},GRe=(r,e)=>{let i=r,n=\"\",s,o=rh.parse(r).root||\".\";if(Buffer.byteLength(i)<100)s=[i,n,!1];else{n=rh.dirname(i),i=rh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(n)<=e?s=[i,n,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(n)<=e?s=[i.substr(0,100-1),n,!0]:(i=rh.join(rh.basename(n),i),n=rh.dirname(n));while(n!==o&&!s);s||(s=[r.substr(0,100-1),\"\",!0])}return s},Gc=(r,e,t)=>r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*/,\"\"),wF=(r,e,t)=>YRe(nl(r,e,t)),YRe=r=>r===null?null:new Date(r*1e3),nl=(r,e,t)=>r[e]&128?G9.parse(r.slice(e,e+t)):qRe(r,e,t),jRe=r=>isNaN(r)?null:r,qRe=(r,e,t)=>jRe(parseInt(r.slice(e,e+t).toString(\"utf8\").replace(/\\0.*$/,\"\").trim(),8)),JRe={12:8589934591,8:2097151},sl=(r,e,t,i)=>i===null?!1:i>JRe[t]||i<0?(G9.encode(i,r.slice(e,e+t)),!0):(WRe(r,e,t,i),!1),WRe=(r,e,t,i)=>r.write(zRe(i,t),e,t,\"ascii\"),zRe=(r,e)=>VRe(Math.floor(r).toString(8),e),VRe=(r,e)=>(r.length===e-1?r:new Array(e-r.length-1).join(\"0\")+r+\" \")+\"\\0\",BF=(r,e,t,i)=>i===null?!1:sl(r,e,t,i.getTime()/1e3),XRe=new Array(156).join(\"\\0\"),Yc=(r,e,t,i)=>i===null?!1:(r.write(i+XRe,e,t,\"utf8\"),i.length!==Buffer.byteLength(i)||i.length>t);Y9.exports=bF});var WB=w((Lot,j9)=>{\"use strict\";var ZRe=ih(),_Re=J(\"path\"),OC=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e===\"\")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),n=Buffer.allocUnsafe(i);for(let s=0;s<512;s++)n[s]=0;new ZRe({path:(\"PaxHeader/\"+_Re.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?\"GlobalExtendedHeader\":\"ExtendedHeader\",linkpath:\"\",uname:this.uname||\"\",gname:this.gname||\"\",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(n),n.write(e,512,t,\"utf8\");for(let s=t+512;s<n.length;s++)n[s]=0;return n}encodeBody(){return this.encodeField(\"path\")+this.encodeField(\"ctime\")+this.encodeField(\"atime\")+this.encodeField(\"dev\")+this.encodeField(\"ino\")+this.encodeField(\"nlink\")+this.encodeField(\"charset\")+this.encodeField(\"comment\")+this.encodeField(\"gid\")+this.encodeField(\"gname\")+this.encodeField(\"linkpath\")+this.encodeField(\"mtime\")+this.encodeField(\"size\")+this.encodeField(\"uid\")+this.encodeField(\"uname\")}encodeField(e){if(this[e]===null||this[e]===void 0)return\"\";let t=this[e]instanceof Date?this[e].getTime()/1e3:this[e],i=\" \"+(e===\"dev\"||e===\"ino\"||e===\"nlink\"?\"SCHILY.\":\"\")+e+\"=\"+t+`\n`,n=Buffer.byteLength(i),s=Math.floor(Math.log(n)/Math.log(10))+1;return n+s>=Math.pow(10,s)&&(s+=1),s+n+i}};OC.parse=(r,e,t)=>new OC($Re(eFe(r),e),t);var $Re=(r,e)=>e?Object.keys(r).reduce((t,i)=>(t[i]=r[i],t),e):r,eFe=r=>r.replace(/\\n$/,\"\").split(`\n`).reduce(tFe,Object.create(null)),tFe=(r,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return r;e=e.substr((t+\" \").length);let i=e.split(\"=\"),n=i.shift().replace(/^SCHILY\\.(dev|ino|nlink)/,\"$1\");if(!n)return r;let s=i.join(\"=\");return r[n]=/^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(n)?new Date(s*1e3):/^[0-9]+$/.test(s)?+s:s,r};j9.exports=OC});var nh=w((Mot,q9)=>{q9.exports=r=>{let e=r.length-1,t=-1;for(;e>-1&&r.charAt(e)===\"/\";)t=e,e--;return t===-1?r:r.slice(0,t)}});var zB=w((Oot,J9)=>{\"use strict\";J9.exports=r=>class extends r{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit(\"warn\",i.tarCode,t,i)):t instanceof Error?this.emit(\"error\",Object.assign(t,i)):this.emit(\"error\",Object.assign(new Error(`${e}: ${t}`),i))}}});var SF=w((Uot,W9)=>{\"use strict\";var VB=[\"|\",\"<\",\">\",\"?\",\":\"],QF=VB.map(r=>String.fromCharCode(61440+r.charCodeAt(0))),rFe=new Map(VB.map((r,e)=>[r,QF[e]])),iFe=new Map(QF.map((r,e)=>[r,VB[e]]));W9.exports={encode:r=>VB.reduce((e,t)=>e.split(t).join(rFe.get(t)),r),decode:r=>QF.reduce((e,t)=>e.split(t).join(iFe.get(t)),r)}});var vF=w((Hot,V9)=>{var{isAbsolute:nFe,parse:z9}=J(\"path\").win32;V9.exports=r=>{let e=\"\",t=z9(r);for(;nFe(r)||t.root;){let i=r.charAt(0)===\"/\"&&r.slice(0,4)!==\"//?/\"?\"/\":t.root;r=r.substr(i.length),e+=i,t=z9(r)}return[e,r]}});var Z9=w((Got,X9)=>{\"use strict\";X9.exports=(r,e,t)=>(r&=4095,t&&(r=(r|384)&-19),e&&(r&256&&(r|=64),r&32&&(r|=8),r&4&&(r|=1)),r)});var MF=w((qot,uX)=>{\"use strict\";var nX=_f(),sX=WB(),oX=ih(),Zo=J(\"fs\"),_9=J(\"path\"),Xo=th(),sFe=nh(),aX=(r,e)=>e?(r=Xo(r).replace(/^\\.(\\/|$)/,\"\"),sFe(e)+\"/\"+r):Xo(r),oFe=16*1024*1024,$9=Symbol(\"process\"),eX=Symbol(\"file\"),tX=Symbol(\"directory\"),PF=Symbol(\"symlink\"),rX=Symbol(\"hardlink\"),KC=Symbol(\"header\"),XB=Symbol(\"read\"),DF=Symbol(\"lstat\"),ZB=Symbol(\"onlstat\"),kF=Symbol(\"onread\"),RF=Symbol(\"onreadlink\"),FF=Symbol(\"openfile\"),NF=Symbol(\"onopenfile\"),ol=Symbol(\"close\"),_B=Symbol(\"mode\"),TF=Symbol(\"awaitDrain\"),xF=Symbol(\"ondrain\"),_o=Symbol(\"prefix\"),iX=Symbol(\"hadError\"),AX=zB(),aFe=SF(),lX=vF(),cX=Z9(),$B=AX(class extends nX{constructor(e,t){if(t=t||{},super(t),typeof e!=\"string\")throw new TypeError(\"path is required\");this.path=Xo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||\"\",this.maxReadSize=t.maxReadSize||oFe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=Xo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?Xo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.win32=!!t.win32||process.platform===\"win32\",this.win32&&(this.path=aFe.decode(this.path.replace(/\\\\/g,\"/\")),e=e.replace(/\\\\/g,\"/\")),this.absolute=Xo(t.absolute||_9.resolve(this.cwd,e)),this.path===\"\"&&(this.path=\"./\"),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[ZB](this.statCache.get(this.absolute)):this[DF]()}emit(e,...t){return e===\"error\"&&(this[iX]=!0),super.emit(e,...t)}[DF](){Zo.lstat(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[ZB](t)})}[ZB](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=lFe(e),this.emit(\"stat\",e),this[$9]()}[$9](){switch(this.type){case\"File\":return this[eX]();case\"Directory\":return this[tX]();case\"SymbolicLink\":return this[PF]();default:return this.end()}}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}[_o](e){return aX(e,this.prefix)}[KC](){this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this[_B](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:\"\",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[tX](){this.path.substr(-1)!==\"/\"&&(this.path+=\"/\"),this.stat.size=0,this[KC](),this.end()}[PF](){Zo.readlink(this.absolute,(e,t)=>{if(e)return this.emit(\"error\",e);this[RF](t)})}[RF](e){this.linkpath=Xo(e),this[KC](),this.end()}[rX](e){this.type=\"Link\",this.linkpath=Xo(_9.relative(this.cwd,e)),this.stat.size=0,this[KC](),this.end()}[eX](){if(this.stat.nlink>1){let e=this.stat.dev+\":\"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[rX](t)}this.linkCache.set(e,this.absolute)}if(this[KC](),this.stat.size===0)return this.end();this[FF]()}[FF](){Zo.open(this.absolute,\"r\",(e,t)=>{if(e)return this.emit(\"error\",e);this[NF](t)})}[NF](e){if(this.fd=e,this[iX])return this[ol]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[XB]()}[XB](){let{fd:e,buf:t,offset:i,length:n,pos:s}=this;Zo.read(e,t,i,n,s,(o,a)=>{if(o)return this[ol](()=>this.emit(\"error\",o));this[kF](a)})}[ol](e){Zo.close(this.fd,e)}[kF](e){if(e<=0&&this.remain>0){let n=new Error(\"encountered unexpected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e>this.remain){let n=new Error(\"did not encounter expected EOF\");return n.path=this.absolute,n.syscall=\"read\",n.code=\"EOF\",this[ol](()=>this.emit(\"error\",n))}if(e===this.remain)for(let n=e;n<this.length&&e<this.blockRemain;n++)this.buf[n+this.offset]=0,e++,this.remain++;let t=this.offset===0&&e===this.buf.length?this.buf:this.buf.slice(this.offset,this.offset+e);this.write(t)?this[xF]():this[TF](()=>this[xF]())}[TF](e){this.once(\"drain\",e)}write(e){if(this.blockRemain<e.length){let t=new Error(\"writing more data than expected\");return t.path=this.absolute,this.emit(\"error\",t)}return this.remain-=e.length,this.blockRemain-=e.length,this.pos+=e.length,this.offset+=e.length,super.write(e)}[xF](){if(!this.remain)return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),this[ol](e=>e?this.emit(\"error\",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[XB]()}}),LF=class extends $B{[DF](){this[ZB](Zo.lstatSync(this.absolute))}[PF](){this[RF](Zo.readlinkSync(this.absolute))}[FF](){this[NF](Zo.openSync(this.absolute,\"r\"))}[XB](){let e=!0;try{let{fd:t,buf:i,offset:n,length:s,pos:o}=this,a=Zo.readSync(t,i,n,s,o);this[kF](a),e=!1}finally{if(e)try{this[ol](()=>{})}catch{}}}[TF](e){e()}[ol](e){Zo.closeSync(this.fd),e()}},AFe=AX(class extends nX{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type===\"Directory\"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=Xo(e.path),this.mode=this[_B](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=Xo(e.linkpath),typeof t.onwarn==\"function\"&&this.on(\"warn\",t.onwarn);let i=!1;if(!this.preservePaths){let[n,s]=lX(this.path);n&&(this.path=s,i=n)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new oX({path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn(\"TAR_ENTRY_INFO\",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new sX({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[_o](this.path),linkpath:this.type===\"Link\"?this[_o](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[_o](e){return aX(e,this.prefix)}[_B](e){return cX(e,this.type===\"Directory\",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error(\"writing more to entry than is appropriate\");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});$B.Sync=LF;$B.Tar=AFe;var lFe=r=>r.isFile()?\"File\":r.isDirectory()?\"Directory\":r.isSymbolicLink()?\"SymbolicLink\":\"Unsupported\";uX.exports=$B});var A0=w((Wot,mX)=>{\"use strict\";var o0=class{constructor(e,t){this.path=e||\"./\",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},cFe=_f(),uFe=dF(),gFe=qB(),JF=MF(),fFe=JF.Sync,hFe=JF.Tar,pFe=WI(),gX=Buffer.alloc(1024),r0=Symbol(\"onStat\"),e0=Symbol(\"ended\"),$o=Symbol(\"queue\"),sh=Symbol(\"current\"),jc=Symbol(\"process\"),t0=Symbol(\"processing\"),fX=Symbol(\"processJob\"),ea=Symbol(\"jobs\"),OF=Symbol(\"jobDone\"),i0=Symbol(\"addFSEntry\"),hX=Symbol(\"addTarEntry\"),GF=Symbol(\"stat\"),YF=Symbol(\"readdir\"),n0=Symbol(\"onreaddir\"),s0=Symbol(\"pipe\"),pX=Symbol(\"entry\"),KF=Symbol(\"entryOpt\"),jF=Symbol(\"writeEntryClass\"),CX=Symbol(\"write\"),UF=Symbol(\"ondrain\"),a0=J(\"fs\"),dX=J(\"path\"),dFe=zB(),HF=th(),WF=dFe(class extends cFe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||\"\",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=HF(e.prefix||\"\"),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[jF]=JF,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!=\"object\"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new uFe.Gzip(e.gzip),this.zip.on(\"data\",t=>super.write(t)),this.zip.on(\"end\",t=>super.end()),this.zip.on(\"drain\",t=>this[UF]()),this.on(\"resume\",t=>this.zip.resume())):this.on(\"drain\",this[UF]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter==\"function\"?e.filter:t=>!0,this[$o]=new pFe,this[ea]=0,this.jobs=+e.jobs||4,this[t0]=!1,this[e0]=!1}[CX](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[e0]=!0,this[jc](),this}write(e){if(this[e0])throw new Error(\"write after end\");return e instanceof gFe?this[hX](e):this[i0](e),this.flowing}[hX](e){let t=HF(dX.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new o0(e.path,t,!1);i.entry=new hFe(e,this[KF](i)),i.entry.on(\"end\",n=>this[OF](i)),this[ea]+=1,this[$o].push(i)}this[jc]()}[i0](e){let t=HF(dX.resolve(this.cwd,e));this[$o].push(new o0(e,t)),this[jc]()}[GF](e){e.pending=!0,this[ea]+=1;let t=this.follow?\"stat\":\"lstat\";a0[t](e.absolute,(i,n)=>{e.pending=!1,this[ea]-=1,i?this.emit(\"error\",i):this[r0](e,n)})}[r0](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[jc]()}[YF](e){e.pending=!0,this[ea]+=1,a0.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[ea]-=1,t)return this.emit(\"error\",t);this[n0](e,i)})}[n0](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[jc]()}[jc](){if(!this[t0]){this[t0]=!0;for(let e=this[$o].head;e!==null&&this[ea]<this.jobs;e=e.next)if(this[fX](e.value),e.value.ignore){let t=e.next;this[$o].removeNode(e),e.next=t}this[t0]=!1,this[e0]&&!this[$o].length&&this[ea]===0&&(this.zip?this.zip.end(gX):(super.write(gX),super.end()))}}get[sh](){return this[$o]&&this[$o].head&&this[$o].head.value}[OF](e){this[$o].shift(),this[ea]-=1,this[jc]()}[fX](e){if(!e.pending){if(e.entry){e===this[sh]&&!e.piped&&this[s0](e);return}if(e.stat||(this.statCache.has(e.absolute)?this[r0](e,this.statCache.get(e.absolute)):this[GF](e)),!!e.stat&&!e.ignore&&!(!this.noDirRecurse&&e.stat.isDirectory()&&!e.readdir&&(this.readdirCache.has(e.absolute)?this[n0](e,this.readdirCache.get(e.absolute)):this[YF](e),!e.readdir))){if(e.entry=this[pX](e),!e.entry){e.ignore=!0;return}e===this[sh]&&!e.piped&&this[s0](e)}}}[KF](e){return{onwarn:(t,i,n)=>this.warn(t,i,n),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[pX](e){this[ea]+=1;try{return new this[jF](e.path,this[KF](e)).on(\"end\",()=>this[OF](e)).on(\"error\",t=>this.emit(\"error\",t))}catch(t){this.emit(\"error\",t)}}[UF](){this[sh]&&this[sh].entry&&this[sh].entry.resume()}[s0](e){e.piped=!0,e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)});let t=e.entry,i=this.zip;i?t.on(\"data\",n=>{i.write(n)||t.pause()}):t.on(\"data\",n=>{super.write(n)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),qF=class extends WF{constructor(e){super(e),this[jF]=fFe}pause(){}resume(){}[GF](e){let t=this.follow?\"statSync\":\"lstatSync\";this[r0](e,a0[t](e.absolute))}[YF](e,t){this[n0](e,a0.readdirSync(e.absolute))}[s0](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(n=>{let s=e.path,o=s===\"./\"?\"\":s.replace(/\\/*$/,\"/\");this[i0](o+n)}),i?t.on(\"data\",n=>{i.write(n)}):t.on(\"data\",n=>{super[CX](n)})}};WF.Sync=qF;mX.exports=WF});var fh=w(HC=>{\"use strict\";var CFe=_f(),mFe=J(\"events\").EventEmitter,Pn=J(\"fs\"),XF=Pn.writev;if(!XF){let r=process.binding(\"fs\"),e=r.FSReqWrap||r.FSReqCallback;XF=(t,i,n,s)=>{let o=(l,c)=>s(l,c,i),a=new e;a.oncomplete=o,r.writeBuffers(t,i,n,a)}}var uh=Symbol(\"_autoClose\"),lo=Symbol(\"_close\"),UC=Symbol(\"_ended\"),rr=Symbol(\"_fd\"),EX=Symbol(\"_finished\"),Al=Symbol(\"_flags\"),zF=Symbol(\"_flush\"),ZF=Symbol(\"_handleChunk\"),_F=Symbol(\"_makeBuf\"),f0=Symbol(\"_mode\"),l0=Symbol(\"_needDrain\"),lh=Symbol(\"_onerror\"),gh=Symbol(\"_onopen\"),VF=Symbol(\"_onread\"),ah=Symbol(\"_onwrite\"),ll=Symbol(\"_open\"),_a=Symbol(\"_path\"),qc=Symbol(\"_pos\"),ta=Symbol(\"_queue\"),Ah=Symbol(\"_read\"),IX=Symbol(\"_readSize\"),al=Symbol(\"_reading\"),c0=Symbol(\"_remain\"),yX=Symbol(\"_size\"),u0=Symbol(\"_write\"),oh=Symbol(\"_writing\"),g0=Symbol(\"_defaultFlag\"),ch=Symbol(\"_errored\"),h0=class extends CFe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!=\"string\")throw new TypeError(\"path must be a string\");this[ch]=!1,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[_a]=e,this[IX]=t.readSize||16*1024*1024,this[al]=!1,this[yX]=typeof t.size==\"number\"?t.size:1/0,this[c0]=this[yX],this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0,typeof this[rr]==\"number\"?this[Ah]():this[ll]()}get fd(){return this[rr]}get path(){return this[_a]}write(){throw new TypeError(\"this is a readable stream\")}end(){throw new TypeError(\"this is a readable stream\")}[ll](){Pn.open(this[_a],\"r\",(e,t)=>this[gh](e,t))}[gh](e,t){e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[Ah]())}[_F](){return Buffer.allocUnsafe(Math.min(this[IX],this[c0]))}[Ah](){if(!this[al]){this[al]=!0;let e=this[_F]();if(e.length===0)return process.nextTick(()=>this[VF](null,0,e));Pn.read(this[rr],e,0,e.length,null,(t,i,n)=>this[VF](t,i,n))}}[VF](e,t,i){this[al]=!1,e?this[lh](e):this[ZF](t,i)&&this[Ah]()}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}[lh](e){this[al]=!0,this[lo](),this.emit(\"error\",e)}[ZF](e,t){let i=!1;return this[c0]-=e,e>0&&(i=super.write(e<t.length?t.slice(0,e):t)),(e===0||this[c0]<=0)&&(i=!1,this[lo](),super.end()),i}emit(e,t){switch(e){case\"prefinish\":case\"finish\":break;case\"drain\":typeof this[rr]==\"number\"&&this[Ah]();break;case\"error\":return this[ch]?void 0:(this[ch]=!0,super.emit(e,t));default:return super.emit(e,t)}}},$F=class extends h0{[ll](){let e=!0;try{this[gh](null,Pn.openSync(this[_a],\"r\")),e=!1}finally{e&&this[lo]()}}[Ah](){let e=!0;try{if(!this[al]){this[al]=!0;do{let t=this[_F](),i=t.length===0?0:Pn.readSync(this[rr],t,0,t.length,null);if(!this[ZF](i,t))break}while(!0);this[al]=!1}e=!1}finally{e&&this[lo]()}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}},p0=class extends mFe{constructor(e,t){t=t||{},super(t),this.readable=!1,this.writable=!0,this[ch]=!1,this[oh]=!1,this[UC]=!1,this[l0]=!1,this[ta]=[],this[_a]=e,this[rr]=typeof t.fd==\"number\"?t.fd:null,this[f0]=t.mode===void 0?438:t.mode,this[qc]=typeof t.start==\"number\"?t.start:null,this[uh]=typeof t.autoClose==\"boolean\"?t.autoClose:!0;let i=this[qc]!==null?\"r+\":\"w\";this[g0]=t.flags===void 0,this[Al]=this[g0]?i:t.flags,this[rr]===null&&this[ll]()}emit(e,t){if(e===\"error\"){if(this[ch])return;this[ch]=!0}return super.emit(e,t)}get fd(){return this[rr]}get path(){return this[_a]}[lh](e){this[lo](),this[oh]=!0,this.emit(\"error\",e)}[ll](){Pn.open(this[_a],this[Al],this[f0],(e,t)=>this[gh](e,t))}[gh](e,t){this[g0]&&this[Al]===\"r+\"&&e&&e.code===\"ENOENT\"?(this[Al]=\"w\",this[ll]()):e?this[lh](e):(this[rr]=t,this.emit(\"open\",t),this[zF]())}end(e,t){return e&&this.write(e,t),this[UC]=!0,!this[oh]&&!this[ta].length&&typeof this[rr]==\"number\"&&this[ah](null,0),this}write(e,t){return typeof e==\"string\"&&(e=Buffer.from(e,t)),this[UC]?(this.emit(\"error\",new Error(\"write() after end()\")),!1):this[rr]===null||this[oh]||this[ta].length?(this[ta].push(e),this[l0]=!0,!1):(this[oh]=!0,this[u0](e),!0)}[u0](e){Pn.write(this[rr],e,0,e.length,this[qc],(t,i)=>this[ah](t,i))}[ah](e,t){e?this[lh](e):(this[qc]!==null&&(this[qc]+=t),this[ta].length?this[zF]():(this[oh]=!1,this[UC]&&!this[EX]?(this[EX]=!0,this[lo](),this.emit(\"finish\")):this[l0]&&(this[l0]=!1,this.emit(\"drain\"))))}[zF](){if(this[ta].length===0)this[UC]&&this[ah](null,0);else if(this[ta].length===1)this[u0](this[ta].pop());else{let e=this[ta];this[ta]=[],XF(this[rr],e,this[qc],(t,i)=>this[ah](t,i))}}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.close(e,t=>t?this.emit(\"error\",t):this.emit(\"close\"))}}},eN=class extends p0{[ll](){let e;if(this[g0]&&this[Al]===\"r+\")try{e=Pn.openSync(this[_a],this[Al],this[f0])}catch(t){if(t.code===\"ENOENT\")return this[Al]=\"w\",this[ll]();throw t}else e=Pn.openSync(this[_a],this[Al],this[f0]);this[gh](null,e)}[lo](){if(this[uh]&&typeof this[rr]==\"number\"){let e=this[rr];this[rr]=null,Pn.closeSync(e),this.emit(\"close\")}}[u0](e){let t=!0;try{this[ah](null,Pn.writeSync(this[rr],e,0,e.length,this[qc])),t=!1}finally{if(t)try{this[lo]()}catch{}}}};HC.ReadStream=h0;HC.ReadStreamSync=$F;HC.WriteStream=p0;HC.WriteStreamSync=eN});var w0=w((Xot,xX)=>{\"use strict\";var EFe=zB(),IFe=ih(),yFe=J(\"events\"),wFe=WI(),BFe=1024*1024,bFe=qB(),wX=WB(),QFe=dF(),tN=Buffer.from([31,139]),xs=Symbol(\"state\"),Jc=Symbol(\"writeEntry\"),$a=Symbol(\"readEntry\"),rN=Symbol(\"nextEntry\"),BX=Symbol(\"processEntry\"),Ps=Symbol(\"extendedHeader\"),GC=Symbol(\"globalExtendedHeader\"),cl=Symbol(\"meta\"),bX=Symbol(\"emitMeta\"),Er=Symbol(\"buffer\"),eA=Symbol(\"queue\"),Wc=Symbol(\"ended\"),QX=Symbol(\"emittedEnd\"),zc=Symbol(\"emit\"),Dn=Symbol(\"unzip\"),d0=Symbol(\"consumeChunk\"),C0=Symbol(\"consumeChunkSub\"),iN=Symbol(\"consumeBody\"),SX=Symbol(\"consumeMeta\"),vX=Symbol(\"consumeHeader\"),m0=Symbol(\"consuming\"),nN=Symbol(\"bufferConcat\"),sN=Symbol(\"maybeEnd\"),YC=Symbol(\"writing\"),ul=Symbol(\"aborted\"),E0=Symbol(\"onDone\"),Vc=Symbol(\"sawValidEntry\"),I0=Symbol(\"sawNullBlock\"),y0=Symbol(\"sawEOF\"),SFe=r=>!0;xX.exports=EFe(class extends yFe{constructor(e){e=e||{},super(e),this.file=e.file||\"\",this[Vc]=null,this.on(E0,t=>{(this[xs]===\"begin\"||this[Vc]===!1)&&this.warn(\"TAR_BAD_ARCHIVE\",\"Unrecognized archive format\")}),e.ondone?this.on(E0,e.ondone):this.on(E0,t=>{this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||BFe,this.filter=typeof e.filter==\"function\"?e.filter:SFe,this.writable=!0,this.readable=!1,this[eA]=new wFe,this[Er]=null,this[$a]=null,this[Jc]=null,this[xs]=\"begin\",this[cl]=\"\",this[Ps]=null,this[GC]=null,this[Wc]=!1,this[Dn]=null,this[ul]=!1,this[I0]=!1,this[y0]=!1,typeof e.onwarn==\"function\"&&this.on(\"warn\",e.onwarn),typeof e.onentry==\"function\"&&this.on(\"entry\",e.onentry)}[vX](e,t){this[Vc]===null&&(this[Vc]=!1);let i;try{i=new IFe(e,t,this[Ps],this[GC])}catch(n){return this.warn(\"TAR_ENTRY_INVALID\",n)}if(i.nullBlock)this[I0]?(this[y0]=!0,this[xs]===\"begin\"&&(this[xs]=\"header\"),this[zc](\"eof\")):(this[I0]=!0,this[zc](\"nullBlock\"));else if(this[I0]=!1,!i.cksumValid)this.warn(\"TAR_ENTRY_INVALID\",\"checksum failure\",{header:i});else if(!i.path)this.warn(\"TAR_ENTRY_INVALID\",\"path is required\",{header:i});else{let n=i.type;if(/^(Symbolic)?Link$/.test(n)&&!i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath required\",{header:i});else if(!/^(Symbolic)?Link$/.test(n)&&i.linkpath)this.warn(\"TAR_ENTRY_INVALID\",\"linkpath forbidden\",{header:i});else{let s=this[Jc]=new bFe(i,this[Ps],this[GC]);if(!this[Vc])if(s.remain){let o=()=>{s.invalid||(this[Vc]=!0)};s.on(\"end\",o)}else this[Vc]=!0;s.meta?s.size>this.maxMetaEntrySize?(s.ignore=!0,this[zc](\"ignoredEntry\",s),this[xs]=\"ignore\",s.resume()):s.size>0&&(this[cl]=\"\",s.on(\"data\",o=>this[cl]+=o),this[xs]=\"meta\"):(this[Ps]=null,s.ignore=s.ignore||!this.filter(s.path,s),s.ignore?(this[zc](\"ignoredEntry\",s),this[xs]=s.remain?\"ignore\":\"header\",s.resume()):(s.remain?this[xs]=\"body\":(this[xs]=\"header\",s.end()),this[$a]?this[eA].push(s):(this[eA].push(s),this[rN]())))}}}[BX](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[$a]=e,this.emit(\"entry\",e),e.emittedEnd||(e.on(\"end\",i=>this[rN]()),t=!1)):(this[$a]=null,t=!1),t}[rN](){do;while(this[BX](this[eA].shift()));if(!this[eA].length){let e=this[$a];!e||e.flowing||e.size===e.remain?this[YC]||this.emit(\"drain\"):e.once(\"drain\",i=>this.emit(\"drain\"))}}[iN](e,t){let i=this[Jc],n=i.blockRemain,s=n>=e.length&&t===0?e:e.slice(t,t+n);return i.write(s),i.blockRemain||(this[xs]=\"header\",this[Jc]=null,i.end()),s.length}[SX](e,t){let i=this[Jc],n=this[iN](e,t);return this[Jc]||this[bX](i),n}[zc](e,t,i){!this[eA].length&&!this[$a]?this.emit(e,t,i):this[eA].push([e,t,i])}[bX](e){switch(this[zc](\"meta\",this[cl]),e.type){case\"ExtendedHeader\":case\"OldExtendedHeader\":this[Ps]=wX.parse(this[cl],this[Ps],!1);break;case\"GlobalExtendedHeader\":this[GC]=wX.parse(this[cl],this[GC],!0);break;case\"NextFileHasLongPath\":case\"OldGnuLongPath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].path=this[cl].replace(/\\0.*/,\"\");break;case\"NextFileHasLongLinkpath\":this[Ps]=this[Ps]||Object.create(null),this[Ps].linkpath=this[cl].replace(/\\0.*/,\"\");break;default:throw new Error(\"unknown meta: \"+e.type)}}abort(e){this[ul]=!0,this.emit(\"abort\",e),this.warn(\"TAR_ABORT\",e,{recoverable:!1})}write(e){if(this[ul])return;if(this[Dn]===null&&e){if(this[Er]&&(e=Buffer.concat([this[Er],e]),this[Er]=null),e.length<tN.length)return this[Er]=e,!0;for(let i=0;this[Dn]===null&&i<tN.length;i++)e[i]!==tN[i]&&(this[Dn]=!1);if(this[Dn]===null){let i=this[Wc];this[Wc]=!1,this[Dn]=new QFe.Unzip,this[Dn].on(\"data\",s=>this[d0](s)),this[Dn].on(\"error\",s=>this.abort(s)),this[Dn].on(\"end\",s=>{this[Wc]=!0,this[d0]()}),this[YC]=!0;let n=this[Dn][i?\"end\":\"write\"](e);return this[YC]=!1,n}}this[YC]=!0,this[Dn]?this[Dn].write(e):this[d0](e),this[YC]=!1;let t=this[eA].length?!1:this[$a]?this[$a].flowing:!0;return!t&&!this[eA].length&&this[$a].once(\"drain\",i=>this.emit(\"drain\")),t}[nN](e){e&&!this[ul]&&(this[Er]=this[Er]?Buffer.concat([this[Er],e]):e)}[sN](){if(this[Wc]&&!this[QX]&&!this[ul]&&!this[m0]){this[QX]=!0;let e=this[Jc];if(e&&e.blockRemain){let t=this[Er]?this[Er].length:0;this.warn(\"TAR_BAD_ARCHIVE\",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Er]&&e.write(this[Er]),e.end()}this[zc](E0)}}[d0](e){if(this[m0])this[nN](e);else if(!e&&!this[Er])this[sN]();else{if(this[m0]=!0,this[Er]){this[nN](e);let t=this[Er];this[Er]=null,this[C0](t)}else this[C0](e);for(;this[Er]&&this[Er].length>=512&&!this[ul]&&!this[y0];){let t=this[Er];this[Er]=null,this[C0](t)}this[m0]=!1}(!this[Er]||this[Wc])&&this[sN]()}[C0](e){let t=0,i=e.length;for(;t+512<=i&&!this[ul]&&!this[y0];)switch(this[xs]){case\"begin\":case\"header\":this[vX](e,t),t+=512;break;case\"ignore\":case\"body\":t+=this[iN](e,t);break;case\"meta\":t+=this[SX](e,t);break;default:throw new Error(\"invalid state: \"+this[xs])}t<i&&(this[Er]?this[Er]=Buffer.concat([e.slice(t),this[Er]]):this[Er]=e.slice(t))}end(e){this[ul]||(this[Dn]?this[Dn].end(e):(this[Wc]=!0,this.write(e)))}})});var B0=w((Zot,RX)=>{\"use strict\";var vFe=Xf(),DX=w0(),hh=J(\"fs\"),xFe=fh(),PX=J(\"path\"),oN=nh();RX.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=vFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&DFe(i,e),i.noResume||PFe(i),i.file&&i.sync?kFe(i):i.file?RFe(i,t):kX(i)};var PFe=r=>{let e=r.onentry;r.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},DFe=(r,e)=>{let t=new Map(e.map(s=>[oN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||PX.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(PX.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(oN(s)):s=>n(oN(s))},kFe=r=>{let e=kX(r),t=r.file,i=!0,n;try{let s=hh.statSync(t),o=r.maxReadSize||16*1024*1024;if(s.size<o)e.end(hh.readFileSync(t));else{let a=0,l=Buffer.allocUnsafe(o);for(n=hh.openSync(t,\"r\");a<s.size;){let c=hh.readSync(n,l,0,o,a);a+=c,e.write(l.slice(0,c))}e.end()}i=!1}finally{if(i&&n)try{hh.closeSync(n)}catch{}}},RFe=(r,e)=>{let t=new DX(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"end\",o),hh.stat(n,(l,c)=>{if(l)a(l);else{let u=new xFe.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},kX=r=>new DX(r)});var OX=w((_ot,MX)=>{\"use strict\";var FFe=Xf(),b0=A0(),FX=fh(),NX=B0(),TX=J(\"path\");MX.exports=(r,e,t)=>{if(typeof e==\"function\"&&(t=e),Array.isArray(r)&&(e=r,r={}),!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");e=Array.from(e);let i=FFe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return i.file&&i.sync?NFe(i,e):i.file?TFe(i,e,t):i.sync?LFe(i,e):MFe(i,e)};var NFe=(r,e)=>{let t=new b0.Sync(r),i=new FX.WriteStreamSync(r.file,{mode:r.mode||438});t.pipe(i),LX(t,e)},TFe=(r,e,t)=>{let i=new b0(r),n=new FX.WriteStream(r.file,{mode:r.mode||438});i.pipe(n);let s=new Promise((o,a)=>{n.on(\"error\",a),n.on(\"close\",o),i.on(\"error\",a)});return aN(i,e),t?s.then(t,t):s},LX=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?NX({file:TX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},aN=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return NX({file:TX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>aN(r,e));r.add(t)}r.end()},LFe=(r,e)=>{let t=new b0.Sync(r);return LX(t,e),t},MFe=(r,e)=>{let t=new b0(r);return aN(t,e),t}});var AN=w(($ot,qX)=>{\"use strict\";var OFe=Xf(),KX=A0(),_n=J(\"fs\"),UX=fh(),HX=B0(),GX=J(\"path\"),YX=ih();qX.exports=(r,e,t)=>{let i=OFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),i.sync?KFe(i,e):HFe(i,e,t)};var KFe=(r,e)=>{let t=new KX.Sync(r),i=!0,n,s;try{try{n=_n.openSync(r.file,\"r+\")}catch(l){if(l.code===\"ENOENT\")n=_n.openSync(r.file,\"w+\");else throw l}let o=_n.fstatSync(n),a=Buffer.alloc(512);e:for(s=0;s<o.size;s+=512){for(let u=0,g=0;u<512;u+=g){if(g=_n.readSync(n,a,u,a.length-u,s+u),s===0&&a[0]===31&&a[1]===139)throw new Error(\"cannot append to compressed archives\");if(!g)break e}let l=new YX(a);if(!l.cksumValid)break;let c=512*Math.ceil(l.size/512);if(s+c+512>o.size)break;s+=c,r.mtimeCache&&r.mtimeCache.set(l.path,l.mtime)}i=!1,UFe(r,t,s,n,e)}finally{if(i)try{_n.closeSync(n)}catch{}}},UFe=(r,e,t,i,n)=>{let s=new UX.WriteStreamSync(r.file,{fd:i,start:t});e.pipe(s),GFe(e,n)},HFe=(r,e,t)=>{e=Array.from(e);let i=new KX(r),n=(o,a,l)=>{let c=(p,C)=>{p?_n.close(o,y=>l(p)):l(null,C)},u=0;if(a===0)return c(null,0);let g=0,f=Buffer.alloc(512),h=(p,C)=>{if(p)return c(p);if(g+=C,g<512&&C)return _n.read(o,f,g,f.length-g,u+g,h);if(u===0&&f[0]===31&&f[1]===139)return c(new Error(\"cannot append to compressed archives\"));if(g<512)return c(null,u);let y=new YX(f);if(!y.cksumValid)return c(null,u);let B=512*Math.ceil(y.size/512);if(u+B+512>a||(u+=B+512,u>=a))return c(null,u);r.mtimeCache&&r.mtimeCache.set(y.path,y.mtime),g=0,_n.read(o,f,0,512,u,h)};_n.read(o,f,0,512,u,h)},s=new Promise((o,a)=>{i.on(\"error\",a);let l=\"r+\",c=(u,g)=>{if(u&&u.code===\"ENOENT\"&&l===\"r+\")return l=\"w+\",_n.open(r.file,l,c);if(u)return a(u);_n.fstat(g,(f,h)=>{if(f)return _n.close(g,()=>a(f));n(g,h.size,(p,C)=>{if(p)return a(p);let y=new UX.WriteStream(r.file,{fd:g,start:C});i.pipe(y),y.on(\"error\",a),y.on(\"close\",o),jX(i,e)})})};_n.open(r.file,l,c)});return t?s.then(t,t):s},GFe=(r,e)=>{e.forEach(t=>{t.charAt(0)===\"@\"?HX({file:GX.resolve(r.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>r.add(i)}):r.add(t)}),r.end()},jX=(r,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)===\"@\")return HX({file:GX.resolve(r.cwd,t.substr(1)),noResume:!0,onentry:i=>r.add(i)}).then(i=>jX(r,e));r.add(t)}r.end()}});var WX=w((eat,JX)=>{\"use strict\";var YFe=Xf(),jFe=AN();JX.exports=(r,e,t)=>{let i=YFe(r);if(!i.file)throw new TypeError(\"file is required\");if(i.gzip)throw new TypeError(\"cannot append to compressed archives\");if(!e||!Array.isArray(e)||!e.length)throw new TypeError(\"no files or directories specified\");return e=Array.from(e),qFe(i),jFe(i,e,t)};var qFe=r=>{let e=r.filter;r.mtimeCache||(r.mtimeCache=new Map),r.filter=e?(t,i)=>e(t,i)&&!(r.mtimeCache.get(t)>i.mtime):(t,i)=>!(r.mtimeCache.get(t)>i.mtime)}});var XX=w((tat,VX)=>{var{promisify:zX}=J(\"util\"),gl=J(\"fs\"),JFe=r=>{if(!r)r={mode:511,fs:gl};else if(typeof r==\"object\")r={mode:511,fs:gl,...r};else if(typeof r==\"number\")r={mode:r,fs:gl};else if(typeof r==\"string\")r={mode:parseInt(r,8),fs:gl};else throw new TypeError(\"invalid options argument\");return r.mkdir=r.mkdir||r.fs.mkdir||gl.mkdir,r.mkdirAsync=zX(r.mkdir),r.stat=r.stat||r.fs.stat||gl.stat,r.statAsync=zX(r.stat),r.statSync=r.statSync||r.fs.statSync||gl.statSync,r.mkdirSync=r.mkdirSync||r.fs.mkdirSync||gl.mkdirSync,r};VX.exports=JFe});var _X=w((rat,ZX)=>{var WFe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:zFe,parse:VFe}=J(\"path\"),XFe=r=>{if(/\\0/.test(r))throw Object.assign(new TypeError(\"path must be a string without null bytes\"),{path:r,code:\"ERR_INVALID_ARG_VALUE\"});if(r=zFe(r),WFe===\"win32\"){let e=/[*|\"<>?:]/,{root:t}=VFe(r);if(e.test(r.substr(t.length)))throw Object.assign(new Error(\"Illegal characters in path.\"),{path:r,code:\"EINVAL\"})}return r};ZX.exports=XFe});var i7=w((iat,r7)=>{var{dirname:$X}=J(\"path\"),e7=(r,e,t=void 0)=>t===e?Promise.resolve():r.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code===\"ENOENT\"?e7(r,$X(e),e):void 0),t7=(r,e,t=void 0)=>{if(t!==e)try{return r.statSync(e).isDirectory()?t:void 0}catch(i){return i.code===\"ENOENT\"?t7(r,$X(e),e):void 0}};r7.exports={findMade:e7,findMadeSync:t7}});var uN=w((nat,s7)=>{var{dirname:n7}=J(\"path\"),lN=(r,e,t)=>{e.recursive=!1;let i=n7(r);return i===r?e.mkdirAsync(r,e).catch(n=>{if(n.code!==\"EISDIR\")throw n}):e.mkdirAsync(r,e).then(()=>t||r,n=>{if(n.code===\"ENOENT\")return lN(i,e).then(s=>lN(r,e,s));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;return e.statAsync(r).then(s=>{if(s.isDirectory())return t;throw n},()=>{throw n})})},cN=(r,e,t)=>{let i=n7(r);if(e.recursive=!1,i===r)try{return e.mkdirSync(r,e)}catch(n){if(n.code!==\"EISDIR\")throw n;return}try{return e.mkdirSync(r,e),t||r}catch(n){if(n.code===\"ENOENT\")return cN(r,e,cN(i,e,t));if(n.code!==\"EEXIST\"&&n.code!==\"EROFS\")throw n;try{if(!e.statSync(r).isDirectory())throw n}catch{throw n}}};s7.exports={mkdirpManual:lN,mkdirpManualSync:cN}});var A7=w((sat,a7)=>{var{dirname:o7}=J(\"path\"),{findMade:ZFe,findMadeSync:_Fe}=i7(),{mkdirpManual:$Fe,mkdirpManualSync:eNe}=uN(),tNe=(r,e)=>(e.recursive=!0,o7(r)===r?e.mkdirAsync(r,e):ZFe(e,r).then(i=>e.mkdirAsync(r,e).then(()=>i).catch(n=>{if(n.code===\"ENOENT\")return $Fe(r,e);throw n}))),rNe=(r,e)=>{if(e.recursive=!0,o7(r)===r)return e.mkdirSync(r,e);let i=_Fe(e,r);try{return e.mkdirSync(r,e),i}catch(n){if(n.code===\"ENOENT\")return eNe(r,e);throw n}};a7.exports={mkdirpNative:tNe,mkdirpNativeSync:rNe}});var g7=w((oat,u7)=>{var l7=J(\"fs\"),iNe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,gN=iNe.replace(/^v/,\"\").split(\".\"),c7=+gN[0]>10||+gN[0]==10&&+gN[1]>=12,nNe=c7?r=>r.mkdir===l7.mkdir:()=>!1,sNe=c7?r=>r.mkdirSync===l7.mkdirSync:()=>!1;u7.exports={useNative:nNe,useNativeSync:sNe}});var m7=w((aat,C7)=>{var ph=XX(),dh=_X(),{mkdirpNative:f7,mkdirpNativeSync:h7}=A7(),{mkdirpManual:p7,mkdirpManualSync:d7}=uN(),{useNative:oNe,useNativeSync:aNe}=g7(),Ch=(r,e)=>(r=dh(r),e=ph(e),oNe(e)?f7(r,e):p7(r,e)),ANe=(r,e)=>(r=dh(r),e=ph(e),aNe(e)?h7(r,e):d7(r,e));Ch.sync=ANe;Ch.native=(r,e)=>f7(dh(r),ph(e));Ch.manual=(r,e)=>p7(dh(r),ph(e));Ch.nativeSync=(r,e)=>h7(dh(r),ph(e));Ch.manualSync=(r,e)=>d7(dh(r),ph(e));C7.exports=Ch});var Q7=w((Aat,b7)=>{\"use strict\";var Ds=J(\"fs\"),Xc=J(\"path\"),lNe=Ds.lchown?\"lchown\":\"chown\",cNe=Ds.lchownSync?\"lchownSync\":\"chownSync\",I7=Ds.lchown&&!process.version.match(/v1[1-9]+\\./)&&!process.version.match(/v10\\.[6-9]/),E7=(r,e,t)=>{try{return Ds[cNe](r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},uNe=(r,e,t)=>{try{return Ds.chownSync(r,e,t)}catch(i){if(i.code!==\"ENOENT\")throw i}},gNe=I7?(r,e,t,i)=>n=>{!n||n.code!==\"EISDIR\"?i(n):Ds.chown(r,e,t,i)}:(r,e,t,i)=>i,fN=I7?(r,e,t)=>{try{return E7(r,e,t)}catch(i){if(i.code!==\"EISDIR\")throw i;uNe(r,e,t)}}:(r,e,t)=>E7(r,e,t),fNe=process.version,y7=(r,e,t)=>Ds.readdir(r,e,t),hNe=(r,e)=>Ds.readdirSync(r,e);/^v4\\./.test(fNe)&&(y7=(r,e,t)=>Ds.readdir(r,t));var Q0=(r,e,t,i)=>{Ds[lNe](r,e,t,gNe(r,e,t,n=>{i(n&&n.code!==\"ENOENT\"?n:null)}))},w7=(r,e,t,i,n)=>{if(typeof e==\"string\")return Ds.lstat(Xc.resolve(r,e),(s,o)=>{if(s)return n(s.code!==\"ENOENT\"?s:null);o.name=e,w7(r,o,t,i,n)});if(e.isDirectory())hN(Xc.resolve(r,e.name),t,i,s=>{if(s)return n(s);let o=Xc.resolve(r,e.name);Q0(o,t,i,n)});else{let s=Xc.resolve(r,e.name);Q0(s,t,i,n)}},hN=(r,e,t,i)=>{y7(r,{withFileTypes:!0},(n,s)=>{if(n){if(n.code===\"ENOENT\")return i();if(n.code!==\"ENOTDIR\"&&n.code!==\"ENOTSUP\")return i(n)}if(n||!s.length)return Q0(r,e,t,i);let o=s.length,a=null,l=c=>{if(!a){if(c)return i(a=c);if(--o===0)return Q0(r,e,t,i)}};s.forEach(c=>w7(r,c,e,t,l))})},pNe=(r,e,t,i)=>{if(typeof e==\"string\")try{let n=Ds.lstatSync(Xc.resolve(r,e));n.name=e,e=n}catch(n){if(n.code===\"ENOENT\")return;throw n}e.isDirectory()&&B7(Xc.resolve(r,e.name),t,i),fN(Xc.resolve(r,e.name),t,i)},B7=(r,e,t)=>{let i;try{i=hNe(r,{withFileTypes:!0})}catch(n){if(n.code===\"ENOENT\")return;if(n.code===\"ENOTDIR\"||n.code===\"ENOTSUP\")return fN(r,e,t);throw n}return i&&i.length&&i.forEach(n=>pNe(r,n,e,t)),fN(r,e,t)};b7.exports=hN;hN.sync=B7});var P7=w((lat,pN)=>{\"use strict\";var S7=m7(),ks=J(\"fs\"),S0=J(\"path\"),v7=Q7(),co=th(),v0=class extends Error{constructor(e,t){super(\"Cannot extract through symbolic link\"),this.path=t,this.symlink=e}get name(){return\"SylinkError\"}},x0=class extends Error{constructor(e,t){super(t+\": Cannot cd into '\"+e+\"'\"),this.path=e,this.code=t}get name(){return\"CwdError\"}},P0=(r,e)=>r.get(co(e)),jC=(r,e,t)=>r.set(co(e),t),dNe=(r,e)=>{ks.stat(r,(t,i)=>{(t||!i.isDirectory())&&(t=new x0(r,t&&t.code||\"ENOTDIR\")),e(t)})};pN.exports=(r,e,t)=>{r=co(r);let i=e.umask,n=e.mode|448,s=(n&i)!==0,o=e.uid,a=e.gid,l=typeof o==\"number\"&&typeof a==\"number\"&&(o!==e.processUid||a!==e.processGid),c=e.preserve,u=e.unlink,g=e.cache,f=co(e.cwd),h=(y,B)=>{y?t(y):(jC(g,r,!0),B&&l?v7(B,o,a,v=>h(v)):s?ks.chmod(r,n,t):t())};if(g&&P0(g,r)===!0)return h();if(r===f)return dNe(r,h);if(c)return S7(r,{mode:n}).then(y=>h(null,y),h);let C=co(S0.relative(f,r)).split(\"/\");D0(f,C,n,g,u,f,null,h)};var D0=(r,e,t,i,n,s,o,a)=>{if(!e.length)return a(null,o);let l=e.shift(),c=co(S0.resolve(r+\"/\"+l));if(P0(i,c))return D0(c,e,t,i,n,s,o,a);ks.mkdir(c,t,x7(c,e,t,i,n,s,o,a))},x7=(r,e,t,i,n,s,o,a)=>l=>{l?ks.lstat(r,(c,u)=>{if(c)c.path=c.path&&co(c.path),a(c);else if(u.isDirectory())D0(r,e,t,i,n,s,o,a);else if(n)ks.unlink(r,g=>{if(g)return a(g);ks.mkdir(r,t,x7(r,e,t,i,n,s,o,a))});else{if(u.isSymbolicLink())return a(new v0(r,r+\"/\"+e.join(\"/\")));a(l)}}):(o=o||r,D0(r,e,t,i,n,s,o,a))},CNe=r=>{let e=!1,t=\"ENOTDIR\";try{e=ks.statSync(r).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new x0(r,t)}};pN.exports.sync=(r,e)=>{r=co(r);let t=e.umask,i=e.mode|448,n=(i&t)!==0,s=e.uid,o=e.gid,a=typeof s==\"number\"&&typeof o==\"number\"&&(s!==e.processUid||o!==e.processGid),l=e.preserve,c=e.unlink,u=e.cache,g=co(e.cwd),f=y=>{jC(u,r,!0),y&&a&&v7.sync(y,s,o),n&&ks.chmodSync(r,i)};if(u&&P0(u,r)===!0)return f();if(r===g)return CNe(g),f();if(l)return f(S7.sync(r,i));let p=co(S0.relative(g,r)).split(\"/\"),C=null;for(let y=p.shift(),B=g;y&&(B+=\"/\"+y);y=p.shift())if(B=co(S0.resolve(B)),!P0(u,B))try{ks.mkdirSync(B,i),C=C||B,jC(u,B,!0)}catch{let D=ks.lstatSync(B);if(D.isDirectory()){jC(u,B,!0);continue}else if(c){ks.unlinkSync(B),ks.mkdirSync(B,i),C=C||B,jC(u,B,!0);continue}else if(D.isSymbolicLink())return new v0(B,B+\"/\"+p.join(\"/\"))}return f(C)}});var CN=w((cat,D7)=>{var dN=Object.create(null),{hasOwnProperty:mNe}=Object.prototype;D7.exports=r=>(mNe.call(dN,r)||(dN[r]=r.normalize(\"NFKD\")),dN[r])});var N7=w((uat,F7)=>{var k7=J(\"assert\"),ENe=CN(),INe=nh(),{join:R7}=J(\"path\"),yNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,wNe=yNe===\"win32\";F7.exports=()=>{let r=new Map,e=new Map,t=c=>c.split(\"/\").slice(0,-1).reduce((g,f)=>(g.length&&(f=R7(g[g.length-1],f)),g.push(f||\"/\"),g),[]),i=new Set,n=c=>{let u=e.get(c);if(!u)throw new Error(\"function does not have any path reservations\");return{paths:u.paths.map(g=>r.get(g)),dirs:[...u.dirs].map(g=>r.get(g))}},s=c=>{let{paths:u,dirs:g}=n(c);return u.every(f=>f[0]===c)&&g.every(f=>f[0]instanceof Set&&f[0].has(c))},o=c=>i.has(c)||!s(c)?!1:(i.add(c),c(()=>a(c)),!0),a=c=>{if(!i.has(c))return!1;let{paths:u,dirs:g}=e.get(c),f=new Set;return u.forEach(h=>{let p=r.get(h);k7.equal(p[0],c),p.length===1?r.delete(h):(p.shift(),typeof p[0]==\"function\"?f.add(p[0]):p[0].forEach(C=>f.add(C)))}),g.forEach(h=>{let p=r.get(h);k7(p[0]instanceof Set),p[0].size===1&&p.length===1?r.delete(h):p[0].size===1?(p.shift(),f.add(p[0])):p[0].delete(c)}),i.delete(c),f.forEach(h=>o(h)),!0};return{check:s,reserve:(c,u)=>{c=wNe?[\"win32 parallelization disabled\"]:c.map(f=>ENe(INe(R7(f))).toLowerCase());let g=new Set(c.map(f=>t(f)).reduce((f,h)=>f.concat(h)));return e.set(u,{dirs:g,paths:c}),c.forEach(f=>{let h=r.get(f);h?h.push(u):r.set(f,[u])}),g.forEach(f=>{let h=r.get(f);h?h[h.length-1]instanceof Set?h[h.length-1].add(u):h.push(new Set([u])):r.set(f,[new Set([u])])}),o(u)}}}});var M7=w((gat,L7)=>{var BNe=process.env.__FAKE_PLATFORM__||process.platform,bNe=BNe===\"win32\",QNe=global.__FAKE_TESTING_FS__||J(\"fs\"),{O_CREAT:SNe,O_TRUNC:vNe,O_WRONLY:xNe,UV_FS_O_FILEMAP:T7=0}=QNe.constants,PNe=bNe&&!!T7,DNe=512*1024,kNe=T7|vNe|SNe|xNe;L7.exports=PNe?r=>r<DNe?kNe:\"w\":()=>\"w\"});var SN=w((fat,Z7)=>{\"use strict\";var RNe=J(\"assert\"),FNe=w0(),jt=J(\"fs\"),NNe=fh(),tA=J(\"path\"),z7=P7(),O7=SF(),TNe=N7(),LNe=vF(),$n=th(),MNe=nh(),ONe=CN(),K7=Symbol(\"onEntry\"),IN=Symbol(\"checkFs\"),U7=Symbol(\"checkFs2\"),F0=Symbol(\"pruneCache\"),yN=Symbol(\"isReusable\"),Rs=Symbol(\"makeFs\"),wN=Symbol(\"file\"),BN=Symbol(\"directory\"),N0=Symbol(\"link\"),H7=Symbol(\"symlink\"),G7=Symbol(\"hardlink\"),Y7=Symbol(\"unsupported\"),j7=Symbol(\"checkPath\"),fl=Symbol(\"mkdir\"),Yi=Symbol(\"onError\"),k0=Symbol(\"pending\"),q7=Symbol(\"pend\"),mh=Symbol(\"unpend\"),mN=Symbol(\"ended\"),EN=Symbol(\"maybeClose\"),bN=Symbol(\"skip\"),qC=Symbol(\"doChown\"),JC=Symbol(\"uid\"),WC=Symbol(\"gid\"),zC=Symbol(\"checkedCwd\"),V7=J(\"crypto\"),X7=M7(),KNe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,VC=KNe===\"win32\",UNe=(r,e)=>{if(!VC)return jt.unlink(r,e);let t=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.rename(r,t,i=>{if(i)return e(i);jt.unlink(t,e)})},HNe=r=>{if(!VC)return jt.unlinkSync(r);let e=r+\".DELETE.\"+V7.randomBytes(16).toString(\"hex\");jt.renameSync(r,e),jt.unlinkSync(e)},J7=(r,e,t)=>r===r>>>0?r:e===e>>>0?e:t,W7=r=>ONe(MNe($n(r))).toLowerCase(),GNe=(r,e)=>{e=W7(e);for(let t of r.keys()){let i=W7(t);(i===e||i.indexOf(e+\"/\")===0)&&r.delete(t)}},YNe=r=>{for(let e of r.keys())r.delete(e)},XC=class extends FNe{constructor(e){if(e||(e={}),e.ondone=t=>{this[mN]=!0,this[EN]()},super(e),this[zC]=!1,this.reservations=TNe(),this.transform=typeof e.transform==\"function\"?e.transform:null,this.writable=!0,this.readable=!1,this[k0]=0,this[mN]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid==\"number\"||typeof e.gid==\"number\"){if(typeof e.uid!=\"number\"||typeof e.gid!=\"number\")throw new TypeError(\"cannot set owner without number uid and gid\");if(e.preserveOwner)throw new TypeError(\"cannot preserve owner in archive and also set owner explicitly\");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!=\"number\"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||VC,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=$n(tA.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask==\"number\"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on(\"entry\",t=>this[K7](t))}warn(e,t,i={}){return(e===\"TAR_BAD_ARCHIVE\"||e===\"TAR_ABORT\")&&(i.recoverable=!1),super.warn(e,t,i)}[EN](){this[mN]&&this[k0]===0&&(this.emit(\"prefinish\"),this.emit(\"finish\"),this.emit(\"end\"),this.emit(\"close\"))}[j7](e){if(this.strip){let t=$n(e.path).split(\"/\");if(t.length<this.strip)return!1;if(e.path=t.slice(this.strip).join(\"/\"),e.type===\"Link\"){let i=$n(e.linkpath).split(\"/\");if(i.length>=this.strip)e.linkpath=i.slice(this.strip).join(\"/\");else return!1}}if(!this.preservePaths){let t=$n(e.path),i=t.split(\"/\");if(i.includes(\"..\")||VC&&/^[a-z]:\\.\\.$/i.test(i[0]))return this.warn(\"TAR_ENTRY_ERROR\",\"path contains '..'\",{entry:e,path:t}),!1;let[n,s]=LNe(t);n&&(e.path=s,this.warn(\"TAR_ENTRY_INFO\",`stripping ${n} from absolute path`,{entry:e,path:t}))}if(tA.isAbsolute(e.path)?e.absolute=$n(tA.resolve(e.path)):e.absolute=$n(tA.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+\"/\")!==0&&e.absolute!==this.cwd)return this.warn(\"TAR_ENTRY_ERROR\",\"path escaped extraction target\",{entry:e,path:$n(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!==\"Directory\"&&e.type!==\"GNUDumpDir\")return!1;if(this.win32){let{root:t}=tA.win32.parse(e.absolute);e.absolute=t+O7.encode(e.absolute.substr(t.length));let{root:i}=tA.win32.parse(e.path);e.path=i+O7.encode(e.path.substr(i.length))}return!0}[K7](e){if(!this[j7](e))return e.resume();switch(RNe.equal(typeof e.absolute,\"string\"),e.type){case\"Directory\":case\"GNUDumpDir\":e.mode&&(e.mode=e.mode|448);case\"File\":case\"OldFile\":case\"ContiguousFile\":case\"Link\":case\"SymbolicLink\":return this[IN](e);case\"CharacterDevice\":case\"BlockDevice\":case\"FIFO\":default:return this[Y7](e)}}[Yi](e,t){e.name===\"CwdError\"?this.emit(\"error\",e):(this.warn(\"TAR_ENTRY_ERROR\",e,{entry:t}),this[mh](),t.resume())}[fl](e,t,i){z7($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[qC](e){return this.forceChown||this.preserveOwner&&(typeof e.uid==\"number\"&&e.uid!==this.processUid||typeof e.gid==\"number\"&&e.gid!==this.processGid)||typeof this.uid==\"number\"&&this.uid!==this.processUid||typeof this.gid==\"number\"&&this.gid!==this.processGid}[JC](e){return J7(this.uid,e.uid,this.processUid)}[WC](e){return J7(this.gid,e.gid,this.processGid)}[wN](e,t){let i=e.mode&4095||this.fmode,n=new NNe.WriteStream(e.absolute,{flags:X7(e.size),mode:i,autoClose:!1});n.on(\"error\",l=>{n.fd&&jt.close(n.fd,()=>{}),n.write=()=>!0,this[Yi](l,e),t()});let s=1,o=l=>{if(l){n.fd&&jt.close(n.fd,()=>{}),this[Yi](l,e),t();return}--s===0&&jt.close(n.fd,c=>{c?this[Yi](c,e):this[mh](),t()})};n.on(\"finish\",l=>{let c=e.absolute,u=n.fd;if(e.mtime&&!this.noMtime){s++;let g=e.atime||new Date,f=e.mtime;jt.futimes(u,g,f,h=>h?jt.utimes(c,g,f,p=>o(p&&h)):o())}if(this[qC](e)){s++;let g=this[JC](e),f=this[WC](e);jt.fchown(u,g,f,h=>h?jt.chown(c,g,f,p=>o(p&&h)):o())}o()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on(\"error\",l=>{this[Yi](l,e),t()}),e.pipe(a)),a.pipe(n)}[BN](e,t){let i=e.mode&4095||this.dmode;this[fl](e.absolute,i,n=>{if(n){this[Yi](n,e),t();return}let s=1,o=a=>{--s===0&&(t(),this[mh](),e.resume())};e.mtime&&!this.noMtime&&(s++,jt.utimes(e.absolute,e.atime||new Date,e.mtime,o)),this[qC](e)&&(s++,jt.chown(e.absolute,this[JC](e),this[WC](e),o)),o()})}[Y7](e){e.unsupported=!0,this.warn(\"TAR_ENTRY_UNSUPPORTED\",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[H7](e,t){this[N0](e,e.linkpath,\"symlink\",t)}[G7](e,t){let i=$n(tA.resolve(this.cwd,e.linkpath));this[N0](e,i,\"link\",t)}[q7](){this[k0]++}[mh](){this[k0]--,this[EN]()}[bN](e){this[mh](),e.resume()}[yN](e,t){return e.type===\"File\"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!VC}[IN](e){this[q7]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[U7](e,i))}[F0](e){e.type===\"SymbolicLink\"?YNe(this.dirCache):e.type!==\"Directory\"&&GNe(this.dirCache,e.absolute)}[U7](e,t){this[F0](e);let i=a=>{this[F0](e),t(a)},n=()=>{this[fl](this.cwd,this.dmode,a=>{if(a){this[Yi](a,e),i();return}this[zC]=!0,s()})},s=()=>{if(e.absolute!==this.cwd){let a=$n(tA.dirname(e.absolute));if(a!==this.cwd)return this[fl](a,this.dmode,l=>{if(l){this[Yi](l,e),i();return}o()})}o()},o=()=>{jt.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[bN](e),i();return}if(a||this[yN](e,l))return this[Rs](null,e,i);if(l.isDirectory()){if(e.type===\"Directory\"){let c=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,u=g=>this[Rs](g,e,i);return c?jt.chmod(e.absolute,e.mode,u):u()}if(e.absolute!==this.cwd)return jt.rmdir(e.absolute,c=>this[Rs](c,e,i))}if(e.absolute===this.cwd)return this[Rs](null,e,i);UNe(e.absolute,c=>this[Rs](c,e,i))})};this[zC]?s():n()}[Rs](e,t,i){if(e){this[Yi](e,t),i();return}switch(t.type){case\"File\":case\"OldFile\":case\"ContiguousFile\":return this[wN](t,i);case\"Link\":return this[G7](t,i);case\"SymbolicLink\":return this[H7](t,i);case\"Directory\":case\"GNUDumpDir\":return this[BN](t,i)}}[N0](e,t,i,n){jt[i](t,e.absolute,s=>{s?this[Yi](s,e):(this[mh](),e.resume()),n()})}},R0=r=>{try{return[null,r()]}catch(e){return[e,null]}},QN=class extends XC{[Rs](e,t){return super[Rs](e,t,()=>{})}[IN](e){if(this[F0](e),!this[zC]){let s=this[fl](this.cwd,this.dmode);if(s)return this[Yi](s,e);this[zC]=!0}if(e.absolute!==this.cwd){let s=$n(tA.dirname(e.absolute));if(s!==this.cwd){let o=this[fl](s,this.dmode);if(o)return this[Yi](o,e)}}let[t,i]=R0(()=>jt.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[bN](e);if(t||this[yN](e,i))return this[Rs](null,e);if(i.isDirectory()){if(e.type===\"Directory\"){let o=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=o?R0(()=>{jt.chmodSync(e.absolute,e.mode)}):[];return this[Rs](a,e)}let[s]=R0(()=>jt.rmdirSync(e.absolute));this[Rs](s,e)}let[n]=e.absolute===this.cwd?[]:R0(()=>HNe(e.absolute));this[Rs](n,e)}[wN](e,t){let i=e.mode&4095||this.fmode,n=a=>{let l;try{jt.closeSync(s)}catch(c){l=c}(a||l)&&this[Yi](a||l,e),t()},s;try{s=jt.openSync(e.absolute,X7(e.size),i)}catch(a){return n(a)}let o=this.transform&&this.transform(e)||e;o!==e&&(o.on(\"error\",a=>this[Yi](a,e)),e.pipe(o)),o.on(\"data\",a=>{try{jt.writeSync(s,a,0,a.length)}catch(l){n(l)}}),o.on(\"end\",a=>{let l=null;if(e.mtime&&!this.noMtime){let c=e.atime||new Date,u=e.mtime;try{jt.futimesSync(s,c,u)}catch(g){try{jt.utimesSync(e.absolute,c,u)}catch{l=g}}}if(this[qC](e)){let c=this[JC](e),u=this[WC](e);try{jt.fchownSync(s,c,u)}catch(g){try{jt.chownSync(e.absolute,c,u)}catch{l=l||g}}}n(l)})}[BN](e,t){let i=e.mode&4095||this.dmode,n=this[fl](e.absolute,i);if(n){this[Yi](n,e),t();return}if(e.mtime&&!this.noMtime)try{jt.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[qC](e))try{jt.chownSync(e.absolute,this[JC](e),this[WC](e))}catch{}t(),e.resume()}[fl](e,t){try{return z7.sync($n(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[N0](e,t,i,n){try{jt[i+\"Sync\"](t,e.absolute),n(),e.resume()}catch(s){return this[Yi](s,e)}}};XC.Sync=QN;Z7.exports=XC});var rZ=w((hat,tZ)=>{\"use strict\";var jNe=Xf(),T0=SN(),$7=J(\"fs\"),eZ=fh(),_7=J(\"path\"),vN=nh();tZ.exports=(r,e,t)=>{typeof r==\"function\"?(t=r,e=null,r={}):Array.isArray(r)&&(e=r,r={}),typeof e==\"function\"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=jNe(r);if(i.sync&&typeof t==\"function\")throw new TypeError(\"callback not supported for sync tar functions\");if(!i.file&&typeof t==\"function\")throw new TypeError(\"callback only supported with file option\");return e.length&&qNe(i,e),i.file&&i.sync?JNe(i):i.file?WNe(i,t):i.sync?zNe(i):VNe(i)};var qNe=(r,e)=>{let t=new Map(e.map(s=>[vN(s),!0])),i=r.filter,n=(s,o)=>{let a=o||_7.parse(s).root||\".\",l=s===a?!1:t.has(s)?t.get(s):n(_7.dirname(s),a);return t.set(s,l),l};r.filter=i?(s,o)=>i(s,o)&&n(vN(s)):s=>n(vN(s))},JNe=r=>{let e=new T0.Sync(r),t=r.file,i=$7.statSync(t),n=r.maxReadSize||16*1024*1024;new eZ.ReadStreamSync(t,{readSize:n,size:i.size}).pipe(e)},WNe=(r,e)=>{let t=new T0(r),i=r.maxReadSize||16*1024*1024,n=r.file,s=new Promise((o,a)=>{t.on(\"error\",a),t.on(\"close\",o),$7.stat(n,(l,c)=>{if(l)a(l);else{let u=new eZ.ReadStream(n,{readSize:i,size:c.size});u.on(\"error\",a),u.pipe(t)}})});return e?s.then(e,e):s},zNe=r=>new T0.Sync(r),VNe=r=>new T0(r)});var iZ=w(ci=>{\"use strict\";ci.c=ci.create=OX();ci.r=ci.replace=AN();ci.t=ci.list=B0();ci.u=ci.update=WX();ci.x=ci.extract=rZ();ci.Pack=A0();ci.Unpack=SN();ci.Parse=w0();ci.ReadEntry=qB();ci.WriteEntry=MF();ci.Header=ih();ci.Pax=WB();ci.types=EF()});var aZ=w((Cat,oZ)=>{var xN;oZ.exports.getContent=()=>(typeof xN>\"u\"&&(xN=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),xN)});var fZ=w((PN,gZ)=>{(function(r,e){typeof PN==\"object\"?gZ.exports=e():typeof define==\"function\"&&define.amd?define(e):r.treeify=e()})(PN,function(){function r(n,s){var o=s?\"\\u2514\":\"\\u251C\";return n?o+=\"\\u2500 \":o+=\"\\u2500\\u2500\\u2510\",o}function e(n,s){var o=[];for(var a in n)!n.hasOwnProperty(a)||s&&typeof n[a]==\"function\"||o.push(a);return o}function t(n,s,o,a,l,c,u){var g=\"\",f=0,h,p,C=a.slice(0);if(C.push([s,o])&&a.length>0&&(a.forEach(function(B,v){v>0&&(g+=(B[1]?\" \":\"\\u2502\")+\"  \"),!p&&B[0]===s&&(p=!0)}),g+=r(n,o)+n,l&&(typeof s!=\"object\"||s instanceof Date)&&(g+=\": \"+s),p&&(g+=\" (circular ref.)\"),u(g)),!p&&typeof s==\"object\"){var y=e(s,c);y.forEach(function(B){h=++f===y.length,t(B,s[B],h,C,l,c,u)})}}var i={};return i.asLines=function(n,s,o,a){var l=typeof o!=\"function\"?o:!1;t(\".\",n,!1,[],s,l,a||o)},i.asTree=function(n,s,o){var a=\"\";return t(\".\",n,!1,[],s,o,function(l){a+=l+`\n`}),a},i})});var K0=w((Uat,BZ)=>{var fTe=vs(),hTe=gC(),pTe=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,dTe=/^\\w*$/;function CTe(r,e){if(fTe(r))return!1;var t=typeof r;return t==\"number\"||t==\"symbol\"||t==\"boolean\"||r==null||hTe(r)?!0:dTe.test(r)||!pTe.test(r)||e!=null&&r in Object(e)}BZ.exports=CTe});var U0=w((Hat,bZ)=>{var mTe=Fc(),ETe=vn(),ITe=\"[object AsyncFunction]\",yTe=\"[object Function]\",wTe=\"[object GeneratorFunction]\",BTe=\"[object Proxy]\";function bTe(r){if(!ETe(r))return!1;var e=mTe(r);return e==yTe||e==wTe||e==ITe||e==BTe}bZ.exports=bTe});var SZ=w((Gat,QZ)=>{var QTe=ys(),STe=QTe[\"__core-js_shared__\"];QZ.exports=STe});var PZ=w((Yat,xZ)=>{var MN=SZ(),vZ=function(){var r=/[^.]+$/.exec(MN&&MN.keys&&MN.keys.IE_PROTO||\"\");return r?\"Symbol(src)_1.\"+r:\"\"}();function vTe(r){return!!vZ&&vZ in r}xZ.exports=vTe});var ON=w((jat,DZ)=>{var xTe=Function.prototype,PTe=xTe.toString;function DTe(r){if(r!=null){try{return PTe.call(r)}catch{}try{return r+\"\"}catch{}}return\"\"}DZ.exports=DTe});var RZ=w((qat,kZ)=>{var kTe=U0(),RTe=PZ(),FTe=vn(),NTe=ON(),TTe=/[\\\\^$.*+?()[\\]{}|]/g,LTe=/^\\[object .+?Constructor\\]$/,MTe=Function.prototype,OTe=Object.prototype,KTe=MTe.toString,UTe=OTe.hasOwnProperty,HTe=RegExp(\"^\"+KTe.call(UTe).replace(TTe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");function GTe(r){if(!FTe(r)||RTe(r))return!1;var e=kTe(r)?HTe:LTe;return e.test(NTe(r))}kZ.exports=GTe});var NZ=w((Jat,FZ)=>{function YTe(r,e){return r==null?void 0:r[e]}FZ.exports=YTe});var pl=w((Wat,TZ)=>{var jTe=RZ(),qTe=NZ();function JTe(r,e){var t=qTe(r,e);return jTe(t)?t:void 0}TZ.exports=JTe});var _C=w((zat,LZ)=>{var WTe=pl(),zTe=WTe(Object,\"create\");LZ.exports=zTe});var KZ=w((Vat,OZ)=>{var MZ=_C();function VTe(){this.__data__=MZ?MZ(null):{},this.size=0}OZ.exports=VTe});var HZ=w((Xat,UZ)=>{function XTe(r){var e=this.has(r)&&delete this.__data__[r];return this.size-=e?1:0,e}UZ.exports=XTe});var YZ=w((Zat,GZ)=>{var ZTe=_C(),_Te=\"__lodash_hash_undefined__\",$Te=Object.prototype,eLe=$Te.hasOwnProperty;function tLe(r){var e=this.__data__;if(ZTe){var t=e[r];return t===_Te?void 0:t}return eLe.call(e,r)?e[r]:void 0}GZ.exports=tLe});var qZ=w((_at,jZ)=>{var rLe=_C(),iLe=Object.prototype,nLe=iLe.hasOwnProperty;function sLe(r){var e=this.__data__;return rLe?e[r]!==void 0:nLe.call(e,r)}jZ.exports=sLe});var WZ=w(($at,JZ)=>{var oLe=_C(),aLe=\"__lodash_hash_undefined__\";function ALe(r,e){var t=this.__data__;return this.size+=this.has(r)?0:1,t[r]=oLe&&e===void 0?aLe:e,this}JZ.exports=ALe});var VZ=w((eAt,zZ)=>{var lLe=KZ(),cLe=HZ(),uLe=YZ(),gLe=qZ(),fLe=WZ();function Eh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}Eh.prototype.clear=lLe;Eh.prototype.delete=cLe;Eh.prototype.get=uLe;Eh.prototype.has=gLe;Eh.prototype.set=fLe;zZ.exports=Eh});var ZZ=w((tAt,XZ)=>{function hLe(){this.__data__=[],this.size=0}XZ.exports=hLe});var Ih=w((rAt,_Z)=>{function pLe(r,e){return r===e||r!==r&&e!==e}_Z.exports=pLe});var $C=w((iAt,$Z)=>{var dLe=Ih();function CLe(r,e){for(var t=r.length;t--;)if(dLe(r[t][0],e))return t;return-1}$Z.exports=CLe});var t_=w((nAt,e_)=>{var mLe=$C(),ELe=Array.prototype,ILe=ELe.splice;function yLe(r){var e=this.__data__,t=mLe(e,r);if(t<0)return!1;var i=e.length-1;return t==i?e.pop():ILe.call(e,t,1),--this.size,!0}e_.exports=yLe});var i_=w((sAt,r_)=>{var wLe=$C();function BLe(r){var e=this.__data__,t=wLe(e,r);return t<0?void 0:e[t][1]}r_.exports=BLe});var s_=w((oAt,n_)=>{var bLe=$C();function QLe(r){return bLe(this.__data__,r)>-1}n_.exports=QLe});var a_=w((aAt,o_)=>{var SLe=$C();function vLe(r,e){var t=this.__data__,i=SLe(t,r);return i<0?(++this.size,t.push([r,e])):t[i][1]=e,this}o_.exports=vLe});var em=w((AAt,A_)=>{var xLe=ZZ(),PLe=t_(),DLe=i_(),kLe=s_(),RLe=a_();function yh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}yh.prototype.clear=xLe;yh.prototype.delete=PLe;yh.prototype.get=DLe;yh.prototype.has=kLe;yh.prototype.set=RLe;A_.exports=yh});var H0=w((lAt,l_)=>{var FLe=pl(),NLe=ys(),TLe=FLe(NLe,\"Map\");l_.exports=TLe});var g_=w((cAt,u_)=>{var c_=VZ(),LLe=em(),MLe=H0();function OLe(){this.size=0,this.__data__={hash:new c_,map:new(MLe||LLe),string:new c_}}u_.exports=OLe});var h_=w((uAt,f_)=>{function KLe(r){var e=typeof r;return e==\"string\"||e==\"number\"||e==\"symbol\"||e==\"boolean\"?r!==\"__proto__\":r===null}f_.exports=KLe});var tm=w((gAt,p_)=>{var ULe=h_();function HLe(r,e){var t=r.__data__;return ULe(e)?t[typeof e==\"string\"?\"string\":\"hash\"]:t.map}p_.exports=HLe});var C_=w((fAt,d_)=>{var GLe=tm();function YLe(r){var e=GLe(this,r).delete(r);return this.size-=e?1:0,e}d_.exports=YLe});var E_=w((hAt,m_)=>{var jLe=tm();function qLe(r){return jLe(this,r).get(r)}m_.exports=qLe});var y_=w((pAt,I_)=>{var JLe=tm();function WLe(r){return JLe(this,r).has(r)}I_.exports=WLe});var B_=w((dAt,w_)=>{var zLe=tm();function VLe(r,e){var t=zLe(this,r),i=t.size;return t.set(r,e),this.size+=t.size==i?0:1,this}w_.exports=VLe});var G0=w((CAt,b_)=>{var XLe=g_(),ZLe=C_(),_Le=E_(),$Le=y_(),eMe=B_();function wh(r){var e=-1,t=r==null?0:r.length;for(this.clear();++e<t;){var i=r[e];this.set(i[0],i[1])}}wh.prototype.clear=XLe;wh.prototype.delete=ZLe;wh.prototype.get=_Le;wh.prototype.has=$Le;wh.prototype.set=eMe;b_.exports=wh});var v_=w((mAt,S_)=>{var Q_=G0(),tMe=\"Expected a function\";function KN(r,e){if(typeof r!=\"function\"||e!=null&&typeof e!=\"function\")throw new TypeError(tMe);var t=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=t.cache;if(s.has(n))return s.get(n);var o=r.apply(this,i);return t.cache=s.set(n,o)||s,o};return t.cache=new(KN.Cache||Q_),t}KN.Cache=Q_;S_.exports=KN});var P_=w((EAt,x_)=>{var rMe=v_(),iMe=500;function nMe(r){var e=rMe(r,function(i){return t.size===iMe&&t.clear(),i}),t=e.cache;return e}x_.exports=nMe});var k_=w((IAt,D_)=>{var sMe=P_(),oMe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,aMe=/\\\\(\\\\)?/g,AMe=sMe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(\"\"),r.replace(oMe,function(t,i,n,s){e.push(n?s.replace(aMe,\"$1\"):i||t)}),e});D_.exports=AMe});var Bh=w((yAt,R_)=>{var lMe=vs(),cMe=K0(),uMe=k_(),gMe=Vf();function fMe(r,e){return lMe(r)?r:cMe(r,e)?[r]:uMe(gMe(r))}R_.exports=fMe});var Zc=w((wAt,F_)=>{var hMe=gC(),pMe=1/0;function dMe(r){if(typeof r==\"string\"||hMe(r))return r;var e=r+\"\";return e==\"0\"&&1/r==-pMe?\"-0\":e}F_.exports=dMe});var rm=w((BAt,N_)=>{var CMe=Bh(),mMe=Zc();function EMe(r,e){e=CMe(e,r);for(var t=0,i=e.length;r!=null&&t<i;)r=r[mMe(e[t++])];return t&&t==i?r:void 0}N_.exports=EMe});var UN=w((bAt,T_)=>{var IMe=pl(),yMe=function(){try{var r=IMe(Object,\"defineProperty\");return r({},\"\",{}),r}catch{}}();T_.exports=yMe});var bh=w((QAt,M_)=>{var L_=UN();function wMe(r,e,t){e==\"__proto__\"&&L_?L_(r,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):r[e]=t}M_.exports=wMe});var Y0=w((SAt,O_)=>{var BMe=bh(),bMe=Ih(),QMe=Object.prototype,SMe=QMe.hasOwnProperty;function vMe(r,e,t){var i=r[e];(!(SMe.call(r,e)&&bMe(i,t))||t===void 0&&!(e in r))&&BMe(r,e,t)}O_.exports=vMe});var im=w((vAt,K_)=>{var xMe=9007199254740991,PMe=/^(?:0|[1-9]\\d*)$/;function DMe(r,e){var t=typeof r;return e=e==null?xMe:e,!!e&&(t==\"number\"||t!=\"symbol\"&&PMe.test(r))&&r>-1&&r%1==0&&r<e}K_.exports=DMe});var HN=w((xAt,H_)=>{var kMe=Y0(),RMe=Bh(),FMe=im(),U_=vn(),NMe=Zc();function TMe(r,e,t,i){if(!U_(r))return r;e=RMe(e,r);for(var n=-1,s=e.length,o=s-1,a=r;a!=null&&++n<s;){var l=NMe(e[n]),c=t;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return r;if(n!=o){var u=a[l];c=i?i(u,l,a):void 0,c===void 0&&(c=U_(u)?u:FMe(e[n+1])?[]:{})}kMe(a,l,c),a=a[l]}return r}H_.exports=TMe});var Y_=w((PAt,G_)=>{var LMe=rm(),MMe=HN(),OMe=Bh();function KMe(r,e,t){for(var i=-1,n=e.length,s={};++i<n;){var o=e[i],a=LMe(r,o);t(a,o)&&MMe(s,OMe(o,r),a)}return s}G_.exports=KMe});var q_=w((DAt,j_)=>{function UMe(r,e){return r!=null&&e in Object(r)}j_.exports=UMe});var W_=w((kAt,J_)=>{var HMe=Fc(),GMe=Wo(),YMe=\"[object Arguments]\";function jMe(r){return GMe(r)&&HMe(r)==YMe}J_.exports=jMe});var nm=w((RAt,X_)=>{var z_=W_(),qMe=Wo(),V_=Object.prototype,JMe=V_.hasOwnProperty,WMe=V_.propertyIsEnumerable,zMe=z_(function(){return arguments}())?z_:function(r){return qMe(r)&&JMe.call(r,\"callee\")&&!WMe.call(r,\"callee\")};X_.exports=zMe});var j0=w((FAt,Z_)=>{var VMe=9007199254740991;function XMe(r){return typeof r==\"number\"&&r>-1&&r%1==0&&r<=VMe}Z_.exports=XMe});var GN=w((NAt,__)=>{var ZMe=Bh(),_Me=nm(),$Me=vs(),eOe=im(),tOe=j0(),rOe=Zc();function iOe(r,e,t){e=ZMe(e,r);for(var i=-1,n=e.length,s=!1;++i<n;){var o=rOe(e[i]);if(!(s=r!=null&&t(r,o)))break;r=r[o]}return s||++i!=n?s:(n=r==null?0:r.length,!!n&&tOe(n)&&eOe(o,n)&&($Me(r)||_Me(r)))}__.exports=iOe});var YN=w((TAt,$_)=>{var nOe=q_(),sOe=GN();function oOe(r,e){return r!=null&&sOe(r,e,nOe)}$_.exports=oOe});var t$=w((LAt,e$)=>{var aOe=Y_(),AOe=YN();function lOe(r,e){return aOe(r,e,function(t,i){return AOe(r,i)})}e$.exports=lOe});var q0=w((MAt,r$)=>{function cOe(r,e){for(var t=-1,i=e.length,n=r.length;++t<i;)r[n+t]=e[t];return r}r$.exports=cOe});var o$=w((OAt,s$)=>{var i$=Rc(),uOe=nm(),gOe=vs(),n$=i$?i$.isConcatSpreadable:void 0;function fOe(r){return gOe(r)||uOe(r)||!!(n$&&r&&r[n$])}s$.exports=fOe});var l$=w((KAt,A$)=>{var hOe=q0(),pOe=o$();function a$(r,e,t,i,n){var s=-1,o=r.length;for(t||(t=pOe),n||(n=[]);++s<o;){var a=r[s];e>0&&t(a)?e>1?a$(a,e-1,t,i,n):hOe(n,a):i||(n[n.length]=a)}return n}A$.exports=a$});var u$=w((UAt,c$)=>{var dOe=l$();function COe(r){var e=r==null?0:r.length;return e?dOe(r,1):[]}c$.exports=COe});var f$=w((HAt,g$)=>{function mOe(r,e,t){switch(t.length){case 0:return r.call(e);case 1:return r.call(e,t[0]);case 2:return r.call(e,t[0],t[1]);case 3:return r.call(e,t[0],t[1],t[2])}return r.apply(e,t)}g$.exports=mOe});var jN=w((GAt,p$)=>{var EOe=f$(),h$=Math.max;function IOe(r,e,t){return e=h$(e===void 0?r.length-1:e,0),function(){for(var i=arguments,n=-1,s=h$(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=t(o),EOe(r,this,a)}}p$.exports=IOe});var C$=w((YAt,d$)=>{function yOe(r){return function(){return r}}d$.exports=yOe});var J0=w((jAt,m$)=>{function wOe(r){return r}m$.exports=wOe});var y$=w((qAt,I$)=>{var BOe=C$(),E$=UN(),bOe=J0(),QOe=E$?function(r,e){return E$(r,\"toString\",{configurable:!0,enumerable:!1,value:BOe(e),writable:!0})}:bOe;I$.exports=QOe});var B$=w((JAt,w$)=>{var SOe=800,vOe=16,xOe=Date.now;function POe(r){var e=0,t=0;return function(){var i=xOe(),n=vOe-(i-t);if(t=i,n>0){if(++e>=SOe)return arguments[0]}else e=0;return r.apply(void 0,arguments)}}w$.exports=POe});var qN=w((WAt,b$)=>{var DOe=y$(),kOe=B$(),ROe=kOe(DOe);b$.exports=ROe});var S$=w((zAt,Q$)=>{var FOe=u$(),NOe=jN(),TOe=qN();function LOe(r){return TOe(NOe(r,void 0,FOe),r+\"\")}Q$.exports=LOe});var x$=w((VAt,v$)=>{var MOe=t$(),OOe=S$(),KOe=OOe(function(r,e){return r==null?{}:MOe(r,e)});v$.exports=KOe});var K$=w((mct,O$)=>{\"use strict\";var _N;try{_N=Map}catch{}var $N;try{$N=Set}catch{}function L$(r,e,t){if(!r||typeof r!=\"object\"||typeof r==\"function\")return r;if(r.nodeType&&\"cloneNode\"in r)return r.cloneNode(!0);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r);if(Array.isArray(r))return r.map(M$);if(_N&&r instanceof _N)return new Map(Array.from(r.entries()));if($N&&r instanceof $N)return new Set(Array.from(r.values()));if(r instanceof Object){e.push(r);var i=Object.create(r);t.push(i);for(var n in r){var s=e.findIndex(function(o){return o===r[n]});i[n]=s>-1?t[s]:L$(r[n],e,t)}return i}return r}function M$(r){return L$(r,[],[])}O$.exports=M$});var om=w(eT=>{\"use strict\";Object.defineProperty(eT,\"__esModule\",{value:!0});eT.default=e1e;var zOe=Object.prototype.toString,VOe=Error.prototype.toString,XOe=RegExp.prototype.toString,ZOe=typeof Symbol<\"u\"?Symbol.prototype.toString:()=>\"\",_Oe=/^Symbol\\((.*)\\)(.*)$/;function $Oe(r){return r!=+r?\"NaN\":r===0&&1/r<0?\"-0\":\"\"+r}function U$(r,e=!1){if(r==null||r===!0||r===!1)return\"\"+r;let t=typeof r;if(t===\"number\")return $Oe(r);if(t===\"string\")return e?`\"${r}\"`:r;if(t===\"function\")return\"[Function \"+(r.name||\"anonymous\")+\"]\";if(t===\"symbol\")return ZOe.call(r).replace(_Oe,\"Symbol($1)\");let i=zOe.call(r).slice(8,-1);return i===\"Date\"?isNaN(r.getTime())?\"\"+r:r.toISOString(r):i===\"Error\"||r instanceof Error?\"[\"+VOe.call(r)+\"]\":i===\"RegExp\"?XOe.call(r):null}function e1e(r,e){let t=U$(r,e);return t!==null?t:JSON.stringify(r,function(i,n){let s=U$(this[i],e);return s!==null?s:n},2)}});var iA=w(Ei=>{\"use strict\";Object.defineProperty(Ei,\"__esModule\",{value:!0});Ei.default=Ei.array=Ei.object=Ei.boolean=Ei.date=Ei.number=Ei.string=Ei.mixed=void 0;var H$=t1e(om());function t1e(r){return r&&r.__esModule?r:{default:r}}var G$={default:\"${path} is invalid\",required:\"${path} is a required field\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:r,type:e,value:t,originalValue:i})=>{let n=i!=null&&i!==t,s=`${r} must be a \\`${e}\\` type, but the final value was: \\`${(0,H$.default)(t,!0)}\\``+(n?` (cast from the value \\`${(0,H$.default)(i,!0)}\\`).`:\".\");return t===null&&(s+='\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'),s},defined:\"${path} must be defined\"};Ei.mixed=G$;var Y$={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"};Ei.string=Y$;var j$={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"};Ei.number=j$;var q$={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"};Ei.date=q$;var J$={isValue:\"${path} field must be ${value}\"};Ei.boolean=J$;var W$={noUnknown:\"${path} field has unspecified keys: ${unknown}\"};Ei.object=W$;var z$={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must be have ${length} items\"};Ei.array=z$;var r1e=Object.assign(Object.create(null),{mixed:G$,string:Y$,number:j$,date:q$,object:W$,array:z$,boolean:J$});Ei.default=r1e});var X$=w((yct,V$)=>{var i1e=Object.prototype,n1e=i1e.hasOwnProperty;function s1e(r,e){return r!=null&&n1e.call(r,e)}V$.exports=s1e});var am=w((wct,Z$)=>{var o1e=X$(),a1e=GN();function A1e(r,e){return r!=null&&a1e(r,e,o1e)}Z$.exports=A1e});var xh=w(eb=>{\"use strict\";Object.defineProperty(eb,\"__esModule\",{value:!0});eb.default=void 0;var l1e=r=>r&&r.__isYupSchema__;eb.default=l1e});var $$=w(tb=>{\"use strict\";Object.defineProperty(tb,\"__esModule\",{value:!0});tb.default=void 0;var c1e=_$(am()),u1e=_$(xh());function _$(r){return r&&r.__esModule?r:{default:r}}var tT=class{constructor(e,t){if(this.refs=e,this.refs=e,typeof t==\"function\"){this.fn=t;return}if(!(0,c1e.default)(t,\"is\"))throw new TypeError(\"`is:` is required for `when()` conditions\");if(!t.then&&!t.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:i,then:n,otherwise:s}=t,o=typeof i==\"function\"?i:(...a)=>a.every(l=>l===i);this.fn=function(...a){let l=a.pop(),c=a.pop(),u=o(...a)?n:s;if(!!u)return typeof u==\"function\"?u(c):c.concat(u.resolve(l))}}resolve(e,t){let i=this.refs.map(s=>s.getValue(t==null?void 0:t.value,t==null?void 0:t.parent,t==null?void 0:t.context)),n=this.fn.apply(e,i.concat(e,t));if(n===void 0||n===e)return e;if(!(0,u1e.default)(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(t)}},g1e=tT;tb.default=g1e});var iT=w(rT=>{\"use strict\";Object.defineProperty(rT,\"__esModule\",{value:!0});rT.default=f1e;function f1e(r){return r==null?[]:[].concat(r)}});var _c=w(rb=>{\"use strict\";Object.defineProperty(rb,\"__esModule\",{value:!0});rb.default=void 0;var h1e=eee(om()),p1e=eee(iT());function eee(r){return r&&r.__esModule?r:{default:r}}function nT(){return nT=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},nT.apply(this,arguments)}var d1e=/\\$\\{\\s*(\\w+)\\s*\\}/g,Ph=class extends Error{static formatError(e,t){let i=t.label||t.path||\"this\";return i!==t.path&&(t=nT({},t,{path:i})),typeof e==\"string\"?e.replace(d1e,(n,s)=>(0,h1e.default)(t[s])):typeof e==\"function\"?e(t):e}static isError(e){return e&&e.name===\"ValidationError\"}constructor(e,t,i,n){super(),this.name=\"ValidationError\",this.value=t,this.path=i,this.type=n,this.errors=[],this.inner=[],(0,p1e.default)(e).forEach(s=>{Ph.isError(s)?(this.errors.push(...s.errors),this.inner=this.inner.concat(s.inner.length?s.inner:s)):this.errors.push(s)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,Ph)}};rb.default=Ph});var ib=w(oT=>{\"use strict\";Object.defineProperty(oT,\"__esModule\",{value:!0});oT.default=E1e;var sT=C1e(_c());function C1e(r){return r&&r.__esModule?r:{default:r}}var m1e=r=>{let e=!1;return(...t)=>{e||(e=!0,r(...t))}};function E1e(r,e){let{endEarly:t,tests:i,args:n,value:s,errors:o,sort:a,path:l}=r,c=m1e(e),u=i.length,g=[];if(o=o||[],!u)return o.length?c(new sT.default(o,s,l)):c(null,s);for(let f=0;f<i.length;f++){let h=i[f];h(n,function(C){if(C){if(!sT.default.isError(C))return c(C,s);if(t)return C.value=s,c(C,s);g.push(C)}if(--u<=0){if(g.length&&(a&&g.sort(a),o.length&&g.push(...o),o=g),o.length){c(new sT.default(o,s,l),s);return}c(null,s)}})}}});var ree=w((xct,tee)=>{function I1e(r){return function(e,t,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var l=o[r?a:++n];if(t(s[l],l,s)===!1)break}return e}}tee.exports=I1e});var aT=w((Pct,iee)=>{var y1e=ree(),w1e=y1e();iee.exports=w1e});var see=w((Dct,nee)=>{function B1e(r,e){for(var t=-1,i=Array(r);++t<r;)i[t]=e(t);return i}nee.exports=B1e});var aee=w((kct,oee)=>{function b1e(){return!1}oee.exports=b1e});var lm=w((Am,Dh)=>{var Q1e=ys(),S1e=aee(),cee=typeof Am==\"object\"&&Am&&!Am.nodeType&&Am,Aee=cee&&typeof Dh==\"object\"&&Dh&&!Dh.nodeType&&Dh,v1e=Aee&&Aee.exports===cee,lee=v1e?Q1e.Buffer:void 0,x1e=lee?lee.isBuffer:void 0,P1e=x1e||S1e;Dh.exports=P1e});var gee=w((Rct,uee)=>{var D1e=Fc(),k1e=j0(),R1e=Wo(),F1e=\"[object Arguments]\",N1e=\"[object Array]\",T1e=\"[object Boolean]\",L1e=\"[object Date]\",M1e=\"[object Error]\",O1e=\"[object Function]\",K1e=\"[object Map]\",U1e=\"[object Number]\",H1e=\"[object Object]\",G1e=\"[object RegExp]\",Y1e=\"[object Set]\",j1e=\"[object String]\",q1e=\"[object WeakMap]\",J1e=\"[object ArrayBuffer]\",W1e=\"[object DataView]\",z1e=\"[object Float32Array]\",V1e=\"[object Float64Array]\",X1e=\"[object Int8Array]\",Z1e=\"[object Int16Array]\",_1e=\"[object Int32Array]\",$1e=\"[object Uint8Array]\",eKe=\"[object Uint8ClampedArray]\",tKe=\"[object Uint16Array]\",rKe=\"[object Uint32Array]\",Ir={};Ir[z1e]=Ir[V1e]=Ir[X1e]=Ir[Z1e]=Ir[_1e]=Ir[$1e]=Ir[eKe]=Ir[tKe]=Ir[rKe]=!0;Ir[F1e]=Ir[N1e]=Ir[J1e]=Ir[T1e]=Ir[W1e]=Ir[L1e]=Ir[M1e]=Ir[O1e]=Ir[K1e]=Ir[U1e]=Ir[H1e]=Ir[G1e]=Ir[Y1e]=Ir[j1e]=Ir[q1e]=!1;function iKe(r){return R1e(r)&&k1e(r.length)&&!!Ir[D1e(r)]}uee.exports=iKe});var nb=w((Fct,fee)=>{function nKe(r){return function(e){return r(e)}}fee.exports=nKe});var sb=w((cm,kh)=>{var sKe=WD(),hee=typeof cm==\"object\"&&cm&&!cm.nodeType&&cm,um=hee&&typeof kh==\"object\"&&kh&&!kh.nodeType&&kh,oKe=um&&um.exports===hee,AT=oKe&&sKe.process,aKe=function(){try{var r=um&&um.require&&um.require(\"util\").types;return r||AT&&AT.binding&&AT.binding(\"util\")}catch{}}();kh.exports=aKe});var ob=w((Nct,Cee)=>{var AKe=gee(),lKe=nb(),pee=sb(),dee=pee&&pee.isTypedArray,cKe=dee?lKe(dee):AKe;Cee.exports=cKe});var lT=w((Tct,mee)=>{var uKe=see(),gKe=nm(),fKe=vs(),hKe=lm(),pKe=im(),dKe=ob(),CKe=Object.prototype,mKe=CKe.hasOwnProperty;function EKe(r,e){var t=fKe(r),i=!t&&gKe(r),n=!t&&!i&&hKe(r),s=!t&&!i&&!n&&dKe(r),o=t||i||n||s,a=o?uKe(r.length,String):[],l=a.length;for(var c in r)(e||mKe.call(r,c))&&!(o&&(c==\"length\"||n&&(c==\"offset\"||c==\"parent\")||s&&(c==\"buffer\"||c==\"byteLength\"||c==\"byteOffset\")||pKe(c,l)))&&a.push(c);return a}mee.exports=EKe});var ab=w((Lct,Eee)=>{var IKe=Object.prototype;function yKe(r){var e=r&&r.constructor,t=typeof e==\"function\"&&e.prototype||IKe;return r===t}Eee.exports=yKe});var cT=w((Mct,Iee)=>{function wKe(r,e){return function(t){return r(e(t))}}Iee.exports=wKe});var wee=w((Oct,yee)=>{var BKe=cT(),bKe=BKe(Object.keys,Object);yee.exports=bKe});var bee=w((Kct,Bee)=>{var QKe=ab(),SKe=wee(),vKe=Object.prototype,xKe=vKe.hasOwnProperty;function PKe(r){if(!QKe(r))return SKe(r);var e=[];for(var t in Object(r))xKe.call(r,t)&&t!=\"constructor\"&&e.push(t);return e}Bee.exports=PKe});var gm=w((Uct,Qee)=>{var DKe=U0(),kKe=j0();function RKe(r){return r!=null&&kKe(r.length)&&!DKe(r)}Qee.exports=RKe});var Rh=w((Hct,See)=>{var FKe=lT(),NKe=bee(),TKe=gm();function LKe(r){return TKe(r)?FKe(r):NKe(r)}See.exports=LKe});var uT=w((Gct,vee)=>{var MKe=aT(),OKe=Rh();function KKe(r,e){return r&&MKe(r,e,OKe)}vee.exports=KKe});var Pee=w((Yct,xee)=>{var UKe=em();function HKe(){this.__data__=new UKe,this.size=0}xee.exports=HKe});var kee=w((jct,Dee)=>{function GKe(r){var e=this.__data__,t=e.delete(r);return this.size=e.size,t}Dee.exports=GKe});var Fee=w((qct,Ree)=>{function YKe(r){return this.__data__.get(r)}Ree.exports=YKe});var Tee=w((Jct,Nee)=>{function jKe(r){return this.__data__.has(r)}Nee.exports=jKe});var Mee=w((Wct,Lee)=>{var qKe=em(),JKe=H0(),WKe=G0(),zKe=200;function VKe(r,e){var t=this.__data__;if(t instanceof qKe){var i=t.__data__;if(!JKe||i.length<zKe-1)return i.push([r,e]),this.size=++t.size,this;t=this.__data__=new WKe(i)}return t.set(r,e),this.size=t.size,this}Lee.exports=VKe});var fm=w((zct,Oee)=>{var XKe=em(),ZKe=Pee(),_Ke=kee(),$Ke=Fee(),eUe=Tee(),tUe=Mee();function Fh(r){var e=this.__data__=new XKe(r);this.size=e.size}Fh.prototype.clear=ZKe;Fh.prototype.delete=_Ke;Fh.prototype.get=$Ke;Fh.prototype.has=eUe;Fh.prototype.set=tUe;Oee.exports=Fh});var Uee=w((Vct,Kee)=>{var rUe=\"__lodash_hash_undefined__\";function iUe(r){return this.__data__.set(r,rUe),this}Kee.exports=iUe});var Gee=w((Xct,Hee)=>{function nUe(r){return this.__data__.has(r)}Hee.exports=nUe});var jee=w((Zct,Yee)=>{var sUe=G0(),oUe=Uee(),aUe=Gee();function Ab(r){var e=-1,t=r==null?0:r.length;for(this.__data__=new sUe;++e<t;)this.add(r[e])}Ab.prototype.add=Ab.prototype.push=oUe;Ab.prototype.has=aUe;Yee.exports=Ab});var Jee=w((_ct,qee)=>{function AUe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i;)if(e(r[t],t,r))return!0;return!1}qee.exports=AUe});var zee=w(($ct,Wee)=>{function lUe(r,e){return r.has(e)}Wee.exports=lUe});var gT=w((eut,Vee)=>{var cUe=jee(),uUe=Jee(),gUe=zee(),fUe=1,hUe=2;function pUe(r,e,t,i,n,s){var o=t&fUe,a=r.length,l=e.length;if(a!=l&&!(o&&l>a))return!1;var c=s.get(r),u=s.get(e);if(c&&u)return c==e&&u==r;var g=-1,f=!0,h=t&hUe?new cUe:void 0;for(s.set(r,e),s.set(e,r);++g<a;){var p=r[g],C=e[g];if(i)var y=o?i(C,p,g,e,r,s):i(p,C,g,r,e,s);if(y!==void 0){if(y)continue;f=!1;break}if(h){if(!uUe(e,function(B,v){if(!gUe(h,v)&&(p===B||n(p,B,t,i,s)))return h.push(v)})){f=!1;break}}else if(!(p===C||n(p,C,t,i,s))){f=!1;break}}return s.delete(r),s.delete(e),f}Vee.exports=pUe});var fT=w((tut,Xee)=>{var dUe=ys(),CUe=dUe.Uint8Array;Xee.exports=CUe});var _ee=w((rut,Zee)=>{function mUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i,n){t[++e]=[n,i]}),t}Zee.exports=mUe});var ete=w((iut,$ee)=>{function EUe(r){var e=-1,t=Array(r.size);return r.forEach(function(i){t[++e]=i}),t}$ee.exports=EUe});var ste=w((nut,nte)=>{var tte=Rc(),rte=fT(),IUe=Ih(),yUe=gT(),wUe=_ee(),BUe=ete(),bUe=1,QUe=2,SUe=\"[object Boolean]\",vUe=\"[object Date]\",xUe=\"[object Error]\",PUe=\"[object Map]\",DUe=\"[object Number]\",kUe=\"[object RegExp]\",RUe=\"[object Set]\",FUe=\"[object String]\",NUe=\"[object Symbol]\",TUe=\"[object ArrayBuffer]\",LUe=\"[object DataView]\",ite=tte?tte.prototype:void 0,hT=ite?ite.valueOf:void 0;function MUe(r,e,t,i,n,s,o){switch(t){case LUe:if(r.byteLength!=e.byteLength||r.byteOffset!=e.byteOffset)return!1;r=r.buffer,e=e.buffer;case TUe:return!(r.byteLength!=e.byteLength||!s(new rte(r),new rte(e)));case SUe:case vUe:case DUe:return IUe(+r,+e);case xUe:return r.name==e.name&&r.message==e.message;case kUe:case FUe:return r==e+\"\";case PUe:var a=wUe;case RUe:var l=i&bUe;if(a||(a=BUe),r.size!=e.size&&!l)return!1;var c=o.get(r);if(c)return c==e;i|=QUe,o.set(r,e);var u=yUe(a(r),a(e),i,n,s,o);return o.delete(r),u;case NUe:if(hT)return hT.call(r)==hT.call(e)}return!1}nte.exports=MUe});var pT=w((sut,ote)=>{var OUe=q0(),KUe=vs();function UUe(r,e,t){var i=e(r);return KUe(r)?i:OUe(i,t(r))}ote.exports=UUe});var Ate=w((out,ate)=>{function HUe(r,e){for(var t=-1,i=r==null?0:r.length,n=0,s=[];++t<i;){var o=r[t];e(o,t,r)&&(s[n++]=o)}return s}ate.exports=HUe});var dT=w((aut,lte)=>{function GUe(){return[]}lte.exports=GUe});var lb=w((Aut,ute)=>{var YUe=Ate(),jUe=dT(),qUe=Object.prototype,JUe=qUe.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,WUe=cte?function(r){return r==null?[]:(r=Object(r),YUe(cte(r),function(e){return JUe.call(r,e)}))}:jUe;ute.exports=WUe});var CT=w((lut,gte)=>{var zUe=pT(),VUe=lb(),XUe=Rh();function ZUe(r){return zUe(r,XUe,VUe)}gte.exports=ZUe});var pte=w((cut,hte)=>{var fte=CT(),_Ue=1,$Ue=Object.prototype,e2e=$Ue.hasOwnProperty;function t2e(r,e,t,i,n,s){var o=t&_Ue,a=fte(r),l=a.length,c=fte(e),u=c.length;if(l!=u&&!o)return!1;for(var g=l;g--;){var f=a[g];if(!(o?f in e:e2e.call(e,f)))return!1}var h=s.get(r),p=s.get(e);if(h&&p)return h==e&&p==r;var C=!0;s.set(r,e),s.set(e,r);for(var y=o;++g<l;){f=a[g];var B=r[f],v=e[f];if(i)var D=o?i(v,B,f,e,r,s):i(B,v,f,r,e,s);if(!(D===void 0?B===v||n(B,v,t,i,s):D)){C=!1;break}y||(y=f==\"constructor\")}if(C&&!y){var T=r.constructor,H=e.constructor;T!=H&&\"constructor\"in r&&\"constructor\"in e&&!(typeof T==\"function\"&&T instanceof T&&typeof H==\"function\"&&H instanceof H)&&(C=!1)}return s.delete(r),s.delete(e),C}hte.exports=t2e});var Cte=w((uut,dte)=>{var r2e=pl(),i2e=ys(),n2e=r2e(i2e,\"DataView\");dte.exports=n2e});var Ete=w((gut,mte)=>{var s2e=pl(),o2e=ys(),a2e=s2e(o2e,\"Promise\");mte.exports=a2e});var yte=w((fut,Ite)=>{var A2e=pl(),l2e=ys(),c2e=A2e(l2e,\"Set\");Ite.exports=c2e});var Bte=w((hut,wte)=>{var u2e=pl(),g2e=ys(),f2e=u2e(g2e,\"WeakMap\");wte.exports=f2e});var hm=w((put,Dte)=>{var mT=Cte(),ET=H0(),IT=Ete(),yT=yte(),wT=Bte(),Pte=Fc(),Nh=ON(),bte=\"[object Map]\",h2e=\"[object Object]\",Qte=\"[object Promise]\",Ste=\"[object Set]\",vte=\"[object WeakMap]\",xte=\"[object DataView]\",p2e=Nh(mT),d2e=Nh(ET),C2e=Nh(IT),m2e=Nh(yT),E2e=Nh(wT),$c=Pte;(mT&&$c(new mT(new ArrayBuffer(1)))!=xte||ET&&$c(new ET)!=bte||IT&&$c(IT.resolve())!=Qte||yT&&$c(new yT)!=Ste||wT&&$c(new wT)!=vte)&&($c=function(r){var e=Pte(r),t=e==h2e?r.constructor:void 0,i=t?Nh(t):\"\";if(i)switch(i){case p2e:return xte;case d2e:return bte;case C2e:return Qte;case m2e:return Ste;case E2e:return vte}return e});Dte.exports=$c});var Ote=w((dut,Mte)=>{var BT=fm(),I2e=gT(),y2e=ste(),w2e=pte(),kte=hm(),Rte=vs(),Fte=lm(),B2e=ob(),b2e=1,Nte=\"[object Arguments]\",Tte=\"[object Array]\",cb=\"[object Object]\",Q2e=Object.prototype,Lte=Q2e.hasOwnProperty;function S2e(r,e,t,i,n,s){var o=Rte(r),a=Rte(e),l=o?Tte:kte(r),c=a?Tte:kte(e);l=l==Nte?cb:l,c=c==Nte?cb:c;var u=l==cb,g=c==cb,f=l==c;if(f&&Fte(r)){if(!Fte(e))return!1;o=!0,u=!1}if(f&&!u)return s||(s=new BT),o||B2e(r)?I2e(r,e,t,i,n,s):y2e(r,e,l,t,i,n,s);if(!(t&b2e)){var h=u&&Lte.call(r,\"__wrapped__\"),p=g&&Lte.call(e,\"__wrapped__\");if(h||p){var C=h?r.value():r,y=p?e.value():e;return s||(s=new BT),n(C,y,t,i,s)}}return f?(s||(s=new BT),w2e(r,e,t,i,n,s)):!1}Mte.exports=S2e});var bT=w((Cut,Hte)=>{var v2e=Ote(),Kte=Wo();function Ute(r,e,t,i,n){return r===e?!0:r==null||e==null||!Kte(r)&&!Kte(e)?r!==r&&e!==e:v2e(r,e,t,i,Ute,n)}Hte.exports=Ute});var Yte=w((mut,Gte)=>{var x2e=fm(),P2e=bT(),D2e=1,k2e=2;function R2e(r,e,t,i){var n=t.length,s=n,o=!i;if(r==null)return!s;for(r=Object(r);n--;){var a=t[n];if(o&&a[2]?a[1]!==r[a[0]]:!(a[0]in r))return!1}for(;++n<s;){a=t[n];var l=a[0],c=r[l],u=a[1];if(o&&a[2]){if(c===void 0&&!(l in r))return!1}else{var g=new x2e;if(i)var f=i(c,u,l,r,e,g);if(!(f===void 0?P2e(u,c,D2e|k2e,i,g):f))return!1}}return!0}Gte.exports=R2e});var QT=w((Eut,jte)=>{var F2e=vn();function N2e(r){return r===r&&!F2e(r)}jte.exports=N2e});var Jte=w((Iut,qte)=>{var T2e=QT(),L2e=Rh();function M2e(r){for(var e=L2e(r),t=e.length;t--;){var i=e[t],n=r[i];e[t]=[i,n,T2e(n)]}return e}qte.exports=M2e});var ST=w((yut,Wte)=>{function O2e(r,e){return function(t){return t==null?!1:t[r]===e&&(e!==void 0||r in Object(t))}}Wte.exports=O2e});var Vte=w((wut,zte)=>{var K2e=Yte(),U2e=Jte(),H2e=ST();function G2e(r){var e=U2e(r);return e.length==1&&e[0][2]?H2e(e[0][0],e[0][1]):function(t){return t===r||K2e(t,r,e)}}zte.exports=G2e});var ub=w((But,Xte)=>{var Y2e=rm();function j2e(r,e,t){var i=r==null?void 0:Y2e(r,e);return i===void 0?t:i}Xte.exports=j2e});var _te=w((but,Zte)=>{var q2e=bT(),J2e=ub(),W2e=YN(),z2e=K0(),V2e=QT(),X2e=ST(),Z2e=Zc(),_2e=1,$2e=2;function eHe(r,e){return z2e(r)&&V2e(e)?X2e(Z2e(r),e):function(t){var i=J2e(t,r);return i===void 0&&i===e?W2e(t,r):q2e(e,i,_2e|$2e)}}Zte.exports=eHe});var ere=w((Qut,$te)=>{function tHe(r){return function(e){return e==null?void 0:e[r]}}$te.exports=tHe});var rre=w((Sut,tre)=>{var rHe=rm();function iHe(r){return function(e){return rHe(e,r)}}tre.exports=iHe});var nre=w((vut,ire)=>{var nHe=ere(),sHe=rre(),oHe=K0(),aHe=Zc();function AHe(r){return oHe(r)?nHe(aHe(r)):sHe(r)}ire.exports=AHe});var vT=w((xut,sre)=>{var lHe=Vte(),cHe=_te(),uHe=J0(),gHe=vs(),fHe=nre();function hHe(r){return typeof r==\"function\"?r:r==null?uHe:typeof r==\"object\"?gHe(r)?cHe(r[0],r[1]):lHe(r):fHe(r)}sre.exports=hHe});var xT=w((Put,ore)=>{var pHe=bh(),dHe=uT(),CHe=vT();function mHe(r,e){var t={};return e=CHe(e,3),dHe(r,function(i,n,s){pHe(t,n,e(i,n,s))}),t}ore.exports=mHe});var pm=w((Dut,ure)=>{\"use strict\";function eu(r){this._maxSize=r,this.clear()}eu.prototype.clear=function(){this._size=0,this._values=Object.create(null)};eu.prototype.get=function(r){return this._values[r]};eu.prototype.set=function(r,e){return this._size>=this._maxSize&&this.clear(),r in this._values||this._size++,this._values[r]=e};var EHe=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,cre=/^\\d+$/,IHe=/^\\d/,yHe=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,wHe=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,kT=512,are=new eu(kT),Are=new eu(kT),lre=new eu(kT);ure.exports={Cache:eu,split:DT,normalizePath:PT,setter:function(r){var e=PT(r);return Are.get(r)||Are.set(r,function(i,n){for(var s=0,o=e.length,a=i;s<o-1;){var l=e[s];if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return i;a=a[e[s++]]}a[e[s]]=n})},getter:function(r,e){var t=PT(r);return lre.get(r)||lre.set(r,function(n){for(var s=0,o=t.length;s<o;)if(n!=null||!e)n=n[t[s++]];else return;return n})},join:function(r){return r.reduce(function(e,t){return e+(RT(t)||cre.test(t)?\"[\"+t+\"]\":(e?\".\":\"\")+t)},\"\")},forEach:function(r,e,t){BHe(Array.isArray(r)?r:DT(r),e,t)}};function PT(r){return are.get(r)||are.set(r,DT(r).map(function(e){return e.replace(wHe,\"$2\")}))}function DT(r){return r.match(EHe)}function BHe(r,e,t){var i=r.length,n,s,o,a;for(s=0;s<i;s++)n=r[s],n&&(SHe(n)&&(n='\"'+n+'\"'),a=RT(n),o=!a&&/^\\d+$/.test(n),e.call(t,n,a,o,s,r))}function RT(r){return typeof r==\"string\"&&r&&[\"'\",'\"'].indexOf(r.charAt(0))!==-1}function bHe(r){return r.match(IHe)&&!r.match(cre)}function QHe(r){return yHe.test(r)}function SHe(r){return!RT(r)&&(bHe(r)||QHe(r))}});var tu=w(Cm=>{\"use strict\";Object.defineProperty(Cm,\"__esModule\",{value:!0});Cm.create=xHe;Cm.default=void 0;var vHe=pm(),gb={context:\"$\",value:\".\"};function xHe(r,e){return new dm(r,e)}var dm=class{constructor(e,t={}){if(typeof e!=\"string\")throw new TypeError(\"ref must be a string, got: \"+e);if(this.key=e.trim(),e===\"\")throw new TypeError(\"ref must be a non-empty string\");this.isContext=this.key[0]===gb.context,this.isValue=this.key[0]===gb.value,this.isSibling=!this.isContext&&!this.isValue;let i=this.isContext?gb.context:this.isValue?gb.value:\"\";this.path=this.key.slice(i.length),this.getter=this.path&&(0,vHe.getter)(this.path,!0),this.map=t.map}getValue(e,t,i){let n=this.isContext?i:this.isValue?e:t;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(e,t){return this.getValue(e,t==null?void 0:t.parent,t==null?void 0:t.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};Cm.default=dm;dm.prototype.__isYupRef=!0});var gre=w(NT=>{\"use strict\";Object.defineProperty(NT,\"__esModule\",{value:!0});NT.default=RHe;var PHe=FT(xT()),fb=FT(_c()),DHe=FT(tu());function FT(r){return r&&r.__esModule?r:{default:r}}function hb(){return hb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},hb.apply(this,arguments)}function kHe(r,e){if(r==null)return{};var t={},i=Object.keys(r),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(t[n]=r[n]);return t}function RHe(r){function e(t,i){let{value:n,path:s=\"\",label:o,options:a,originalValue:l,sync:c}=t,u=kHe(t,[\"value\",\"path\",\"label\",\"options\",\"originalValue\",\"sync\"]),{name:g,test:f,params:h,message:p}=r,{parent:C,context:y}=a;function B(j){return DHe.default.isRef(j)?j.getValue(n,C,y):j}function v(j={}){let $=(0,PHe.default)(hb({value:n,originalValue:l,label:o,path:j.path||s},h,j.params),B),V=new fb.default(fb.default.formatError(j.message||p,$),n,$.path,j.type||g);return V.params=$,V}let D=hb({path:s,parent:C,type:g,createError:v,resolve:B,options:a,originalValue:l},u);if(!c){try{Promise.resolve(f.call(D,n,D)).then(j=>{fb.default.isError(j)?i(j):j?i(null,j):i(v())})}catch(j){i(j)}return}let T;try{var H;if(T=f.call(D,n,D),typeof((H=T)==null?void 0:H.then)==\"function\")throw new Error(`Validation test of type: \"${D.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(j){i(j);return}fb.default.isError(T)?i(T):T?i(null,T):i(v())}return e.OPTIONS=r,e}});var TT=w(mm=>{\"use strict\";Object.defineProperty(mm,\"__esModule\",{value:!0});mm.getIn=fre;mm.default=void 0;var FHe=pm(),NHe=r=>r.substr(0,r.length-1).substr(1);function fre(r,e,t,i=t){let n,s,o;return e?((0,FHe.forEach)(e,(a,l,c)=>{let u=l?NHe(a):a;if(r=r.resolve({context:i,parent:n,value:t}),r.innerType){let g=c?parseInt(u,10):0;if(t&&g>=t.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${a}, in the path: ${e}. because there is no value at that index. `);n=t,t=t&&t[g],r=r.innerType}if(!c){if(!r.fields||!r.fields[u])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${o} which is a type: \"${r._type}\")`);n=t,t=t&&t[u],r=r.fields[u]}s=u,o=l?\"[\"+a+\"]\":\".\"+a}),{schema:r,parent:n,parentPath:s}):{parent:n,parentPath:e,schema:r}}var THe=(r,e,t,i)=>fre(r,e,t,i).schema,LHe=THe;mm.default=LHe});var pre=w(pb=>{\"use strict\";Object.defineProperty(pb,\"__esModule\",{value:!0});pb.default=void 0;var hre=MHe(tu());function MHe(r){return r&&r.__esModule?r:{default:r}}var Em=class{constructor(){this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let t of this.list)e.push(t);for(let[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}add(e){hre.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){hre.default.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}has(e,t){if(this.list.has(e))return!0;let i,n=this.refs.values();for(;i=n.next(),!i.done;)if(t(i.value)===e)return!0;return!1}clone(){let e=new Em;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){let i=this.clone();return e.list.forEach(n=>i.add(n)),e.refs.forEach(n=>i.add(n)),t.list.forEach(n=>i.delete(n)),t.refs.forEach(n=>i.delete(n)),i}};pb.default=Em});var sA=w(Cb=>{\"use strict\";Object.defineProperty(Cb,\"__esModule\",{value:!0});Cb.default=void 0;var dre=nA(K$()),Th=iA(),OHe=nA($$()),Cre=nA(ib()),db=nA(gre()),mre=nA(om()),KHe=nA(tu()),UHe=TT(),HHe=nA(iT()),Ere=nA(_c()),Ire=nA(pre());function nA(r){return r&&r.__esModule?r:{default:r}}function Fs(){return Fs=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Fs.apply(this,arguments)}var uo=class{constructor(e){this.deps=[],this.conditions=[],this._whitelist=new Ire.default,this._blacklist=new Ire.default,this.exclusiveTests=Object.create(null),this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Th.mixed.notType)}),this.type=(e==null?void 0:e.type)||\"mixed\",this.spec=Fs({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:\"optional\"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Fs({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=(0,dre.default)(Fs({},this.spec,e)),t}label(e){var t=this.clone();return t.spec.label=e,t}meta(...e){if(e.length===0)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let i=e(this);return this._mutate=t,i}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!==\"mixed\")throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);let t=this,i=e.clone(),n=Fs({},t.spec,i.spec);return i.spec=n,i._typeError||(i._typeError=t._typeError),i._whitelistError||(i._whitelistError=t._whitelistError),i._blacklistError||(i._blacklistError=t._blacklistError),i._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),i._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),i.tests=t.tests,i.exclusiveTests=t.exclusiveTests,i.withMutation(s=>{e.tests.forEach(o=>{s.test(o.OPTIONS)})}),i}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let i=t.conditions;t=t.clone(),t.conditions=[],t=i.reduce((n,s)=>s.resolve(n,e),t),t=t.resolve(e)}return t}cast(e,t={}){let i=this.resolve(Fs({value:e},t)),n=i._cast(e,t);if(e!==void 0&&t.assert!==!1&&i.isType(n)!==!0){let s=(0,mre.default)(e),o=(0,mre.default)(n);throw new TypeError(`The value of ${t.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${i._type}\". \n\nattempted value: ${s} \n`+(o!==s?`result of cast: ${o}`:\"\"))}return n}_cast(e,t){let i=e===void 0?e:this.transforms.reduce((n,s)=>s.call(this,n,e,this),e);return i===void 0&&(i=this.getDefault()),i}_validate(e,t={},i){let{sync:n,path:s,from:o=[],originalValue:a=e,strict:l=this.spec.strict,abortEarly:c=this.spec.abortEarly}=t,u=e;l||(u=this._cast(u,Fs({assert:!1},t)));let g={value:u,path:s,options:t,originalValue:a,schema:this,label:this.spec.label,sync:n,from:o},f=[];this._typeError&&f.push(this._typeError),this._whitelistError&&f.push(this._whitelistError),this._blacklistError&&f.push(this._blacklistError),(0,Cre.default)({args:g,value:u,path:s,sync:n,tests:f,endEarly:c},h=>{if(h)return void i(h,u);(0,Cre.default)({tests:this.tests,args:g,path:s,sync:n,value:u,endEarly:c},i)})}validate(e,t,i){let n=this.resolve(Fs({},t,{value:e}));return typeof i==\"function\"?n._validate(e,t,i):new Promise((s,o)=>n._validate(e,t,(a,l)=>{a?o(a):s(l)}))}validateSync(e,t){let i=this.resolve(Fs({},t,{value:e})),n;return i._validate(e,Fs({},t,{sync:!0}),(s,o)=>{if(s)throw s;n=o}),n}isValid(e,t){return this.validate(e,t).then(()=>!0,i=>{if(Ere.default.isError(i))return!1;throw i})}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(i){if(Ere.default.isError(i))return!1;throw i}}_getDefault(){let e=this.spec.default;return e==null?e:typeof e==\"function\"?e.call(this):(0,dre.default)(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return arguments.length===0?this._getDefault():this.clone({default:e})}strict(e=!0){var t=this.clone();return t.spec.strict=e,t}_isPresent(e){return e!=null}defined(e=Th.mixed.defined){return this.test({message:e,name:\"defined\",exclusive:!0,test(t){return t!==void 0}})}required(e=Th.mixed.required){return this.clone({presence:\"required\"}).withMutation(t=>t.test({message:e,name:\"required\",exclusive:!0,test(i){return this.schema._isPresent(i)}}))}notRequired(){var e=this.clone({presence:\"optional\"});return e.tests=e.tests.filter(t=>t.OPTIONS.name!==\"required\"),e}nullable(e=!0){var t=this.clone({nullable:e!==!1});return t}transform(e){var t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(e.length===1?typeof e[0]==\"function\"?t={test:e[0]}:t=e[0]:e.length===2?t={name:e[0],test:e[1]}:t={name:e[0],message:e[1],test:e[2]},t.message===void 0&&(t.message=Th.mixed.default),typeof t.test!=\"function\")throw new TypeError(\"`test` is a required parameters\");let i=this.clone(),n=(0,db.default)(t),s=t.exclusive||t.name&&i.exclusiveTests[t.name]===!0;if(t.exclusive&&!t.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return t.name&&(i.exclusiveTests[t.name]=!!t.exclusive),i.tests=i.tests.filter(o=>!(o.OPTIONS.name===t.name&&(s||o.OPTIONS.test===n.OPTIONS.test))),i.tests.push(n),i}when(e,t){!Array.isArray(e)&&typeof e!=\"string\"&&(t=e,e=\".\");let i=this.clone(),n=(0,HHe.default)(e).map(s=>new KHe.default(s));return n.forEach(s=>{s.isSibling&&i.deps.push(s.key)}),i.conditions.push(new OHe.default(n,t)),i}typeError(e){var t=this.clone();return t._typeError=(0,db.default)({message:e,name:\"typeError\",test(i){return i!==void 0&&!this.schema.isType(i)?this.createError({params:{type:this.schema._type}}):!0}}),t}oneOf(e,t=Th.mixed.oneOf){var i=this.clone();return e.forEach(n=>{i._whitelist.add(n),i._blacklist.delete(n)}),i._whitelistError=(0,db.default)({message:t,name:\"oneOf\",test(n){if(n===void 0)return!0;let s=this.schema._whitelist;return s.has(n,this.resolve)?!0:this.createError({params:{values:s.toArray().join(\", \")}})}}),i}notOneOf(e,t=Th.mixed.notOneOf){var i=this.clone();return e.forEach(n=>{i._blacklist.add(n),i._whitelist.delete(n)}),i._blacklistError=(0,db.default)({message:t,name:\"notOneOf\",test(n){let s=this.schema._blacklist;return s.has(n,this.resolve)?this.createError({params:{values:s.toArray().join(\", \")}}):!0}}),i}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){let e=this.clone(),{label:t,meta:i}=e.spec;return{meta:i,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map(s=>({name:s.OPTIONS.name,params:s.OPTIONS.params})).filter((s,o,a)=>a.findIndex(l=>l.name===s.name)===o)}}};Cb.default=uo;uo.prototype.__isYupSchema__=!0;for(let r of[\"validate\",\"validateSync\"])uo.prototype[`${r}At`]=function(e,t,i={}){let{parent:n,parentPath:s,schema:o}=(0,UHe.getIn)(this,e,t,i.context);return o[r](n&&n[s],Fs({},i,{parent:n,path:e}))};for(let r of[\"equals\",\"is\"])uo.prototype[r]=uo.prototype.oneOf;for(let r of[\"not\",\"nope\"])uo.prototype[r]=uo.prototype.notOneOf;uo.prototype.optional=uo.prototype.notRequired});var wre=w(Im=>{\"use strict\";Object.defineProperty(Im,\"__esModule\",{value:!0});Im.create=yre;Im.default=void 0;var GHe=YHe(sA());function YHe(r){return r&&r.__esModule?r:{default:r}}var LT=GHe.default,jHe=LT;Im.default=jHe;function yre(){return new LT}yre.prototype=LT.prototype});var Lh=w(mb=>{\"use strict\";Object.defineProperty(mb,\"__esModule\",{value:!0});mb.default=void 0;var qHe=r=>r==null;mb.default=qHe});var vre=w(wm=>{\"use strict\";Object.defineProperty(wm,\"__esModule\",{value:!0});wm.create=Sre;wm.default=void 0;var JHe=Qre(sA()),Bre=iA(),bre=Qre(Lh());function Qre(r){return r&&r.__esModule?r:{default:r}}function Sre(){return new ym}var ym=class extends JHe.default{constructor(){super({type:\"boolean\"}),this.withMutation(()=>{this.transform(function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(String(e)))return!0;if(/^(false|0)$/i.test(String(e)))return!1}return e})})}_typeCheck(e){return e instanceof Boolean&&(e=e.valueOf()),typeof e==\"boolean\"}isTrue(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"true\"},test(t){return(0,bre.default)(t)||t===!0}})}isFalse(e=Bre.boolean.isValue){return this.test({message:e,name:\"is-value\",exclusive:!0,params:{value:\"false\"},test(t){return(0,bre.default)(t)||t===!1}})}};wm.default=ym;Sre.prototype=ym.prototype});var Dre=w(bm=>{\"use strict\";Object.defineProperty(bm,\"__esModule\",{value:!0});bm.create=Pre;bm.default=void 0;var ia=iA(),oA=xre(Lh()),WHe=xre(sA());function xre(r){return r&&r.__esModule?r:{default:r}}var zHe=/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,VHe=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,XHe=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ZHe=r=>(0,oA.default)(r)||r===r.trim(),_He={}.toString();function Pre(){return new Bm}var Bm=class extends WHe.default{constructor(){super({type:\"string\"}),this.withMutation(()=>{this.transform(function(e){if(this.isType(e)||Array.isArray(e))return e;let t=e!=null&&e.toString?e.toString():e;return t===_He?e:t})})}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),typeof e==\"string\"}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=ia.string.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,oA.default)(i)||i.length===this.resolve(e)}})}min(e,t=ia.string.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,oA.default)(i)||i.length>=this.resolve(e)}})}max(e,t=ia.string.max){return this.test({name:\"max\",exclusive:!0,message:t,params:{max:e},test(i){return(0,oA.default)(i)||i.length<=this.resolve(e)}})}matches(e,t){let i=!1,n,s;return t&&(typeof t==\"object\"?{excludeEmptyString:i=!1,message:n,name:s}=t:n=t),this.test({name:s||\"matches\",message:n||ia.string.matches,params:{regex:e},test:o=>(0,oA.default)(o)||o===\"\"&&i||o.search(e)!==-1})}email(e=ia.string.email){return this.matches(zHe,{name:\"email\",message:e,excludeEmptyString:!0})}url(e=ia.string.url){return this.matches(VHe,{name:\"url\",message:e,excludeEmptyString:!0})}uuid(e=ia.string.uuid){return this.matches(XHe,{name:\"uuid\",message:e,excludeEmptyString:!1})}ensure(){return this.default(\"\").transform(e=>e===null?\"\":e)}trim(e=ia.string.trim){return this.transform(t=>t!=null?t.trim():t).test({message:e,name:\"trim\",test:ZHe})}lowercase(e=ia.string.lowercase){return this.transform(t=>(0,oA.default)(t)?t:t.toLowerCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toLowerCase()})}uppercase(e=ia.string.uppercase){return this.transform(t=>(0,oA.default)(t)?t:t.toUpperCase()).test({message:e,name:\"string_case\",exclusive:!0,test:t=>(0,oA.default)(t)||t===t.toUpperCase()})}};bm.default=Bm;Pre.prototype=Bm.prototype});var Fre=w(Sm=>{\"use strict\";Object.defineProperty(Sm,\"__esModule\",{value:!0});Sm.create=Rre;Sm.default=void 0;var ru=iA(),iu=kre(Lh()),$He=kre(sA());function kre(r){return r&&r.__esModule?r:{default:r}}var eGe=r=>r!=+r;function Rre(){return new Qm}var Qm=class extends $He.default{constructor(){super({type:\"number\"}),this.withMutation(()=>{this.transform(function(e){let t=e;if(typeof t==\"string\"){if(t=t.replace(/\\s/g,\"\"),t===\"\")return NaN;t=+t}return this.isType(t)?t:parseFloat(t)})})}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),typeof e==\"number\"&&!eGe(e)}min(e,t=ru.number.min){return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,iu.default)(i)||i>=this.resolve(e)}})}max(e,t=ru.number.max){return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,iu.default)(i)||i<=this.resolve(e)}})}lessThan(e,t=ru.number.lessThan){return this.test({message:t,name:\"max\",exclusive:!0,params:{less:e},test(i){return(0,iu.default)(i)||i<this.resolve(e)}})}moreThan(e,t=ru.number.moreThan){return this.test({message:t,name:\"min\",exclusive:!0,params:{more:e},test(i){return(0,iu.default)(i)||i>this.resolve(e)}})}positive(e=ru.number.positive){return this.moreThan(0,e)}negative(e=ru.number.negative){return this.lessThan(0,e)}integer(e=ru.number.integer){return this.test({name:\"integer\",message:e,test:t=>(0,iu.default)(t)||Number.isInteger(t)})}truncate(){return this.transform(e=>(0,iu.default)(e)?e:e|0)}round(e){var t,i=[\"ceil\",\"floor\",\"round\",\"trunc\"];if(e=((t=e)==null?void 0:t.toLowerCase())||\"round\",e===\"trunc\")return this.truncate();if(i.indexOf(e.toLowerCase())===-1)throw new TypeError(\"Only valid options for round() are: \"+i.join(\", \"));return this.transform(n=>(0,iu.default)(n)?n:Math[e](n))}};Sm.default=Qm;Rre.prototype=Qm.prototype});var Nre=w(MT=>{\"use strict\";Object.defineProperty(MT,\"__esModule\",{value:!0});MT.default=rGe;var tGe=/^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function rGe(r){var e=[1,4,5,6,7,10,11],t=0,i,n;if(n=tGe.exec(r)){for(var s=0,o;o=e[s];++s)n[o]=+n[o]||0;n[2]=(+n[2]||1)-1,n[3]=+n[3]||1,n[7]=n[7]?String(n[7]).substr(0,3):0,(n[8]===void 0||n[8]===\"\")&&(n[9]===void 0||n[9]===\"\")?i=+new Date(n[1],n[2],n[3],n[4],n[5],n[6],n[7]):(n[8]!==\"Z\"&&n[9]!==void 0&&(t=n[10]*60+n[11],n[9]===\"+\"&&(t=0-t)),i=Date.UTC(n[1],n[2],n[3],n[4],n[5]+t,n[6],n[7]))}else i=Date.parse?Date.parse(r):NaN;return i}});var Mre=w(vm=>{\"use strict\";Object.defineProperty(vm,\"__esModule\",{value:!0});vm.create=KT;vm.default=void 0;var iGe=Eb(Nre()),Tre=iA(),Lre=Eb(Lh()),nGe=Eb(tu()),sGe=Eb(sA());function Eb(r){return r&&r.__esModule?r:{default:r}}var OT=new Date(\"\"),oGe=r=>Object.prototype.toString.call(r)===\"[object Date]\";function KT(){return new Mh}var Mh=class extends sGe.default{constructor(){super({type:\"date\"}),this.withMutation(()=>{this.transform(function(e){return this.isType(e)?e:(e=(0,iGe.default)(e),isNaN(e)?OT:new Date(e))})})}_typeCheck(e){return oGe(e)&&!isNaN(e.getTime())}prepareParam(e,t){let i;if(nGe.default.isRef(e))i=e;else{let n=this.cast(e);if(!this._typeCheck(n))throw new TypeError(`\\`${t}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);i=n}return i}min(e,t=Tre.date.min){let i=this.prepareParam(e,\"min\");return this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(n){return(0,Lre.default)(n)||n>=this.resolve(i)}})}max(e,t=Tre.date.max){var i=this.prepareParam(e,\"max\");return this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(n){return(0,Lre.default)(n)||n<=this.resolve(i)}})}};vm.default=Mh;Mh.INVALID_DATE=OT;KT.prototype=Mh.prototype;KT.INVALID_DATE=OT});var Kre=w((Yut,Ore)=>{function aGe(r,e,t,i){var n=-1,s=r==null?0:r.length;for(i&&s&&(t=r[++n]);++n<s;)t=e(t,r[n],n,r);return t}Ore.exports=aGe});var Hre=w((jut,Ure)=>{function AGe(r){return function(e){return r==null?void 0:r[e]}}Ure.exports=AGe});var Yre=w((qut,Gre)=>{var lGe=Hre(),cGe={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},uGe=lGe(cGe);Gre.exports=uGe});var qre=w((Jut,jre)=>{var gGe=Yre(),fGe=Vf(),hGe=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,pGe=\"\\\\u0300-\\\\u036f\",dGe=\"\\\\ufe20-\\\\ufe2f\",CGe=\"\\\\u20d0-\\\\u20ff\",mGe=pGe+dGe+CGe,EGe=\"[\"+mGe+\"]\",IGe=RegExp(EGe,\"g\");function yGe(r){return r=fGe(r),r&&r.replace(hGe,gGe).replace(IGe,\"\")}jre.exports=yGe});var Wre=w((Wut,Jre)=>{var wGe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;function BGe(r){return r.match(wGe)||[]}Jre.exports=BGe});var Vre=w((zut,zre)=>{var bGe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function QGe(r){return bGe.test(r)}zre.exports=QGe});var hie=w((Vut,fie)=>{var eie=\"\\\\ud800-\\\\udfff\",SGe=\"\\\\u0300-\\\\u036f\",vGe=\"\\\\ufe20-\\\\ufe2f\",xGe=\"\\\\u20d0-\\\\u20ff\",PGe=SGe+vGe+xGe,tie=\"\\\\u2700-\\\\u27bf\",rie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",DGe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",kGe=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",RGe=\"\\\\u2000-\\\\u206f\",FGe=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",iie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",NGe=\"\\\\ufe0e\\\\ufe0f\",nie=DGe+kGe+RGe+FGe,sie=\"['\\u2019]\",Xre=\"[\"+nie+\"]\",TGe=\"[\"+PGe+\"]\",oie=\"\\\\d+\",LGe=\"[\"+tie+\"]\",aie=\"[\"+rie+\"]\",Aie=\"[^\"+eie+nie+oie+tie+rie+iie+\"]\",MGe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",OGe=\"(?:\"+TGe+\"|\"+MGe+\")\",KGe=\"[^\"+eie+\"]\",lie=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",cie=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Oh=\"[\"+iie+\"]\",UGe=\"\\\\u200d\",Zre=\"(?:\"+aie+\"|\"+Aie+\")\",HGe=\"(?:\"+Oh+\"|\"+Aie+\")\",_re=\"(?:\"+sie+\"(?:d|ll|m|re|s|t|ve))?\",$re=\"(?:\"+sie+\"(?:D|LL|M|RE|S|T|VE))?\",uie=OGe+\"?\",gie=\"[\"+NGe+\"]?\",GGe=\"(?:\"+UGe+\"(?:\"+[KGe,lie,cie].join(\"|\")+\")\"+gie+uie+\")*\",YGe=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jGe=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",qGe=gie+uie+GGe,JGe=\"(?:\"+[LGe,lie,cie].join(\"|\")+\")\"+qGe,WGe=RegExp([Oh+\"?\"+aie+\"+\"+_re+\"(?=\"+[Xre,Oh,\"$\"].join(\"|\")+\")\",HGe+\"+\"+$re+\"(?=\"+[Xre,Oh+Zre,\"$\"].join(\"|\")+\")\",Oh+\"?\"+Zre+\"+\"+_re,Oh+\"+\"+$re,jGe,YGe,oie,JGe].join(\"|\"),\"g\");function zGe(r){return r.match(WGe)||[]}fie.exports=zGe});var die=w((Xut,pie)=>{var VGe=Wre(),XGe=Vre(),ZGe=Vf(),_Ge=hie();function $Ge(r,e,t){return r=ZGe(r),e=t?void 0:e,e===void 0?XGe(r)?_Ge(r):VGe(r):r.match(e)||[]}pie.exports=$Ge});var UT=w((Zut,Cie)=>{var eYe=Kre(),tYe=qre(),rYe=die(),iYe=\"['\\u2019]\",nYe=RegExp(iYe,\"g\");function sYe(r){return function(e){return eYe(rYe(tYe(e).replace(nYe,\"\")),r,\"\")}}Cie.exports=sYe});var Eie=w((_ut,mie)=>{var oYe=UT(),aYe=oYe(function(r,e,t){return r+(t?\"_\":\"\")+e.toLowerCase()});mie.exports=aYe});var yie=w(($ut,Iie)=>{var AYe=PB(),lYe=UT(),cYe=lYe(function(r,e,t){return e=e.toLowerCase(),r+(t?AYe(e):e)});Iie.exports=cYe});var Bie=w((egt,wie)=>{var uYe=bh(),gYe=uT(),fYe=vT();function hYe(r,e){var t={};return e=fYe(e,3),gYe(r,function(i,n,s){uYe(t,e(i,n,s),i)}),t}wie.exports=hYe});var Qie=w((tgt,HT)=>{HT.exports=function(r){return bie(pYe(r),r)};HT.exports.array=bie;function bie(r,e){var t=r.length,i=new Array(t),n={},s=t,o=dYe(e),a=CYe(r);for(e.forEach(function(c){if(!a.has(c[0])||!a.has(c[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});s--;)n[s]||l(r[s],s,new Set);return i;function l(c,u,g){if(g.has(c)){var f;try{f=\", node was:\"+JSON.stringify(c)}catch{f=\"\"}throw new Error(\"Cyclic dependency\"+f)}if(!a.has(c))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(c));if(!n[u]){n[u]=!0;var h=o.get(c)||new Set;if(h=Array.from(h),u=h.length){g.add(c);do{var p=h[--u];l(p,a.get(p),g)}while(u);g.delete(c)}i[--t]=c}}}function pYe(r){for(var e=new Set,t=0,i=r.length;t<i;t++){var n=r[t];e.add(n[0]),e.add(n[1])}return Array.from(e)}function dYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++){var n=r[t];e.has(n[0])||e.set(n[0],new Set),e.has(n[1])||e.set(n[1],new Set),e.get(n[0]).add(n[1])}return e}function CYe(r){for(var e=new Map,t=0,i=r.length;t<i;t++)e.set(r[t],t);return e}});var Sie=w(GT=>{\"use strict\";Object.defineProperty(GT,\"__esModule\",{value:!0});GT.default=BYe;var mYe=Ib(am()),EYe=Ib(Qie()),IYe=pm(),yYe=Ib(tu()),wYe=Ib(xh());function Ib(r){return r&&r.__esModule?r:{default:r}}function BYe(r,e=[]){let t=[],i=[];function n(s,o){var a=(0,IYe.split)(s)[0];~i.indexOf(a)||i.push(a),~e.indexOf(`${o}-${a}`)||t.push([o,a])}for(let s in r)if((0,mYe.default)(r,s)){let o=r[s];~i.indexOf(s)||i.push(s),yYe.default.isRef(o)&&o.isSibling?n(o.path,s):(0,wYe.default)(o)&&\"deps\"in o&&o.deps.forEach(a=>n(a,s))}return EYe.default.array(i,t).reverse()}});var xie=w(YT=>{\"use strict\";Object.defineProperty(YT,\"__esModule\",{value:!0});YT.default=bYe;function vie(r,e){let t=1/0;return r.some((i,n)=>{var s;if(((s=e.path)==null?void 0:s.indexOf(i))!==-1)return t=n,!0}),t}function bYe(r){return(e,t)=>vie(r,e)-vie(r,t)}});var Tie=w(Pm=>{\"use strict\";Object.defineProperty(Pm,\"__esModule\",{value:!0});Pm.create=Nie;Pm.default=void 0;var Pie=na(am()),Die=na(Eie()),QYe=na(yie()),SYe=na(Bie()),vYe=na(xT()),xYe=pm(),kie=iA(),PYe=na(Sie()),Fie=na(xie()),DYe=na(ib()),kYe=na(_c()),jT=na(sA());function na(r){return r&&r.__esModule?r:{default:r}}function Kh(){return Kh=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},Kh.apply(this,arguments)}var Rie=r=>Object.prototype.toString.call(r)===\"[object Object]\";function RYe(r,e){let t=Object.keys(r.fields);return Object.keys(e).filter(i=>t.indexOf(i)===-1)}var FYe=(0,Fie.default)([]),xm=class extends jT.default{constructor(e){super({type:\"object\"}),this.fields=Object.create(null),this._sortErrors=FYe,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{this.transform(function(i){if(typeof i==\"string\")try{i=JSON.parse(i)}catch{i=null}return this.isType(i)?i:null}),e&&this.shape(e)})}_typeCheck(e){return Rie(e)||typeof e==\"function\"}_cast(e,t={}){var i;let n=super._cast(e,t);if(n===void 0)return this.getDefault();if(!this._typeCheck(n))return n;let s=this.fields,o=(i=t.stripUnknown)!=null?i:this.spec.noUnknown,a=this._nodes.concat(Object.keys(n).filter(g=>this._nodes.indexOf(g)===-1)),l={},c=Kh({},t,{parent:l,__validating:t.__validating||!1}),u=!1;for(let g of a){let f=s[g],h=(0,Pie.default)(n,g);if(f){let p,C=n[g];c.path=(t.path?`${t.path}.`:\"\")+g,f=f.resolve({value:C,context:t.context,parent:l});let y=\"spec\"in f?f.spec:void 0,B=y==null?void 0:y.strict;if(y!=null&&y.strip){u=u||g in n;continue}p=!t.__validating||!B?f.cast(n[g],c):n[g],p!==void 0&&(l[g]=p)}else h&&!o&&(l[g]=n[g]);l[g]!==n[g]&&(u=!0)}return u?l:n}_validate(e,t={},i){let n=[],{sync:s,from:o=[],originalValue:a=e,abortEarly:l=this.spec.abortEarly,recursive:c=this.spec.recursive}=t;o=[{schema:this,value:a},...o],t.__validating=!0,t.originalValue=a,t.from=o,super._validate(e,t,(u,g)=>{if(u){if(!kYe.default.isError(u)||l)return void i(u,g);n.push(u)}if(!c||!Rie(g)){i(n[0]||null,g);return}a=a||g;let f=this._nodes.map(h=>(p,C)=>{let y=h.indexOf(\".\")===-1?(t.path?`${t.path}.`:\"\")+h:`${t.path||\"\"}[\"${h}\"]`,B=this.fields[h];if(B&&\"validate\"in B){B.validate(g[h],Kh({},t,{path:y,from:o,strict:!0,parent:g,originalValue:a[h]}),C);return}C(null)});(0,DYe.default)({sync:s,tests:f,value:g,errors:n,endEarly:l,sort:this._sortErrors,path:t.path},i)})}clone(e){let t=super.clone(e);return t.fields=Kh({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),i=t.fields;for(let[n,s]of Object.entries(this.fields)){let o=i[n];o===void 0?i[n]=s:o instanceof jT.default&&s instanceof jT.default&&(i[n]=s.concat(o))}return t.withMutation(()=>t.shape(i))}getDefaultFromShape(){let e={};return this._nodes.forEach(t=>{let i=this.fields[t];e[t]=\"default\"in i?i.getDefault():void 0}),e}_getDefault(){if(\"default\"in this.spec)return super._getDefault();if(!!this._nodes.length)return this.getDefaultFromShape()}shape(e,t=[]){let i=this.clone(),n=Object.assign(i.fields,e);if(i.fields=n,i._sortErrors=(0,Fie.default)(Object.keys(n)),t.length){Array.isArray(t[0])||(t=[t]);let s=t.map(([o,a])=>`${o}-${a}`);i._excludedEdges=i._excludedEdges.concat(s)}return i._nodes=(0,PYe.default)(n,i._excludedEdges),i}pick(e){let t={};for(let i of e)this.fields[i]&&(t[i]=this.fields[i]);return this.clone().withMutation(i=>(i.fields={},i.shape(t)))}omit(e){let t=this.clone(),i=t.fields;t.fields={};for(let n of e)delete i[n];return t.withMutation(()=>t.shape(i))}from(e,t,i){let n=(0,xYe.getter)(e,!0);return this.transform(s=>{if(s==null)return s;let o=s;return(0,Pie.default)(s,e)&&(o=Kh({},s),i||delete o[e],o[t]=n(s)),o})}noUnknown(e=!0,t=kie.object.noUnknown){typeof e==\"string\"&&(t=e,e=!0);let i=this.test({name:\"noUnknown\",exclusive:!0,message:t,test(n){if(n==null)return!0;let s=RYe(this.schema,n);return!e||s.length===0||this.createError({params:{unknown:s.join(\", \")}})}});return i.spec.noUnknown=e,i}unknown(e=!0,t=kie.object.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform(t=>t&&(0,SYe.default)(t,(i,n)=>e(n)))}camelCase(){return this.transformKeys(QYe.default)}snakeCase(){return this.transformKeys(Die.default)}constantCase(){return this.transformKeys(e=>(0,Die.default)(e).toUpperCase())}describe(){let e=super.describe();return e.fields=(0,vYe.default)(this.fields,t=>t.describe()),e}};Pm.default=xm;function Nie(r){return new xm(r)}Nie.prototype=xm.prototype});var Mie=w(km=>{\"use strict\";Object.defineProperty(km,\"__esModule\",{value:!0});km.create=Lie;km.default=void 0;var qT=Uh(Lh()),NYe=Uh(xh()),TYe=Uh(om()),JT=iA(),LYe=Uh(ib()),MYe=Uh(_c()),OYe=Uh(sA());function Uh(r){return r&&r.__esModule?r:{default:r}}function yb(){return yb=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r},yb.apply(this,arguments)}function Lie(r){return new Dm(r)}var Dm=class extends OYe.default{constructor(e){super({type:\"array\"}),this.innerType=e,this.withMutation(()=>{this.transform(function(t){if(typeof t==\"string\")try{t=JSON.parse(t)}catch{t=null}return this.isType(t)?t:null})})}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){let i=super._cast(e,t);if(!this._typeCheck(i)||!this.innerType)return i;let n=!1,s=i.map((o,a)=>{let l=this.innerType.cast(o,yb({},t,{path:`${t.path||\"\"}[${a}]`}));return l!==o&&(n=!0),l});return n?s:i}_validate(e,t={},i){var n,s;let o=[],a=t.sync,l=t.path,c=this.innerType,u=(n=t.abortEarly)!=null?n:this.spec.abortEarly,g=(s=t.recursive)!=null?s:this.spec.recursive,f=t.originalValue!=null?t.originalValue:e;super._validate(e,t,(h,p)=>{if(h){if(!MYe.default.isError(h)||u)return void i(h,p);o.push(h)}if(!g||!c||!this._typeCheck(p)){i(o[0]||null,p);return}f=f||p;let C=new Array(p.length);for(let y=0;y<p.length;y++){let B=p[y],v=`${t.path||\"\"}[${y}]`,D=yb({},t,{path:v,strict:!0,parent:p,index:y,originalValue:f[y]});C[y]=(T,H)=>c.validate(B,D,H)}(0,LYe.default)({sync:a,path:l,value:p,errors:o,endEarly:u,tests:C},i)})}clone(e){let t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!(0,NYe.default)(e))throw new TypeError(\"`array.of()` sub-schema must be a valid yup schema not: \"+(0,TYe.default)(e));return t.innerType=e,t}length(e,t=JT.array.length){return this.test({message:t,name:\"length\",exclusive:!0,params:{length:e},test(i){return(0,qT.default)(i)||i.length===this.resolve(e)}})}min(e,t){return t=t||JT.array.min,this.test({message:t,name:\"min\",exclusive:!0,params:{min:e},test(i){return(0,qT.default)(i)||i.length>=this.resolve(e)}})}max(e,t){return t=t||JT.array.max,this.test({message:t,name:\"max\",exclusive:!0,params:{max:e},test(i){return(0,qT.default)(i)||i.length<=this.resolve(e)}})}ensure(){return this.default(()=>[]).transform((e,t)=>this._typeCheck(e)?e:t==null?[]:[].concat(t))}compact(e){let t=e?(i,n,s)=>!e(i,n,s):i=>!!i;return this.transform(i=>i!=null?i.filter(t):i)}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}};km.default=Dm;Lie.prototype=Dm.prototype});var Oie=w(Rm=>{\"use strict\";Object.defineProperty(Rm,\"__esModule\",{value:!0});Rm.create=HYe;Rm.default=void 0;var KYe=UYe(xh());function UYe(r){return r&&r.__esModule?r:{default:r}}function HYe(r){return new wb(r)}var wb=class{constructor(e){this.type=\"lazy\",this.__isYupSchema__=!0,this._resolve=(t,i={})=>{let n=this.builder(t,i);if(!(0,KYe.default)(n))throw new TypeError(\"lazy() functions must return a valid schema\");return n.resolve(i)},this.builder=e}resolve(e){return this._resolve(e.value,e)}cast(e,t){return this._resolve(e,t).cast(e,t)}validate(e,t,i){return this._resolve(e,t).validate(e,t,i)}validateSync(e,t){return this._resolve(e,t).validateSync(e,t)}validateAt(e,t,i){return this._resolve(t,i).validateAt(e,t,i)}validateSyncAt(e,t,i){return this._resolve(t,i).validateSyncAt(e,t,i)}describe(){return null}isValid(e,t){return this._resolve(e,t).isValid(e,t)}isValidSync(e,t){return this._resolve(e,t).isValidSync(e,t)}},GYe=wb;Rm.default=GYe});var Kie=w(WT=>{\"use strict\";Object.defineProperty(WT,\"__esModule\",{value:!0});WT.default=qYe;var YYe=jYe(iA());function jYe(r){return r&&r.__esModule?r:{default:r}}function qYe(r){Object.keys(r).forEach(e=>{Object.keys(r[e]).forEach(t=>{YYe.default[e][t]=r[e][t]})})}});var VT=w(yr=>{\"use strict\";Object.defineProperty(yr,\"__esModule\",{value:!0});yr.addMethod=_Ye;Object.defineProperty(yr,\"MixedSchema\",{enumerable:!0,get:function(){return Uie.default}});Object.defineProperty(yr,\"mixed\",{enumerable:!0,get:function(){return Uie.create}});Object.defineProperty(yr,\"BooleanSchema\",{enumerable:!0,get:function(){return zT.default}});Object.defineProperty(yr,\"bool\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"boolean\",{enumerable:!0,get:function(){return zT.create}});Object.defineProperty(yr,\"StringSchema\",{enumerable:!0,get:function(){return Hie.default}});Object.defineProperty(yr,\"string\",{enumerable:!0,get:function(){return Hie.create}});Object.defineProperty(yr,\"NumberSchema\",{enumerable:!0,get:function(){return Gie.default}});Object.defineProperty(yr,\"number\",{enumerable:!0,get:function(){return Gie.create}});Object.defineProperty(yr,\"DateSchema\",{enumerable:!0,get:function(){return Yie.default}});Object.defineProperty(yr,\"date\",{enumerable:!0,get:function(){return Yie.create}});Object.defineProperty(yr,\"ObjectSchema\",{enumerable:!0,get:function(){return jie.default}});Object.defineProperty(yr,\"object\",{enumerable:!0,get:function(){return jie.create}});Object.defineProperty(yr,\"ArraySchema\",{enumerable:!0,get:function(){return qie.default}});Object.defineProperty(yr,\"array\",{enumerable:!0,get:function(){return qie.create}});Object.defineProperty(yr,\"ref\",{enumerable:!0,get:function(){return JYe.create}});Object.defineProperty(yr,\"lazy\",{enumerable:!0,get:function(){return WYe.create}});Object.defineProperty(yr,\"ValidationError\",{enumerable:!0,get:function(){return zYe.default}});Object.defineProperty(yr,\"reach\",{enumerable:!0,get:function(){return VYe.default}});Object.defineProperty(yr,\"isSchema\",{enumerable:!0,get:function(){return Jie.default}});Object.defineProperty(yr,\"setLocale\",{enumerable:!0,get:function(){return XYe.default}});Object.defineProperty(yr,\"BaseSchema\",{enumerable:!0,get:function(){return ZYe.default}});var Uie=nu(wre()),zT=nu(vre()),Hie=nu(Dre()),Gie=nu(Fre()),Yie=nu(Mre()),jie=nu(Tie()),qie=nu(Mie()),JYe=tu(),WYe=Oie(),zYe=Fm(_c()),VYe=Fm(TT()),Jie=Fm(xh()),XYe=Fm(Kie()),ZYe=Fm(sA());function Fm(r){return r&&r.__esModule?r:{default:r}}function Wie(){if(typeof WeakMap!=\"function\")return null;var r=new WeakMap;return Wie=function(){return r},r}function nu(r){if(r&&r.__esModule)return r;if(r===null||typeof r!=\"object\"&&typeof r!=\"function\")return{default:r};var e=Wie();if(e&&e.has(r))return e.get(r);var t={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)){var s=i?Object.getOwnPropertyDescriptor(r,n):null;s&&(s.get||s.set)?Object.defineProperty(t,n,s):t[n]=r[n]}return t.default=r,e&&e.set(r,t),t}function _Ye(r,e,t){if(!r||!(0,Jie.default)(r.prototype))throw new TypeError(\"You must provide a yup schema constructor function\");if(typeof e!=\"string\")throw new TypeError(\"A Method name must be provided\");if(typeof t!=\"function\")throw new TypeError(\"Method function must be provided\");r.prototype[e]=t}});var _ie=w((ygt,Tm)=>{\"use strict\";var tje=process.env.TERM_PROGRAM===\"Hyper\",rje=process.platform===\"win32\",Vie=process.platform===\"linux\",XT={ballotDisabled:\"\\u2612\",ballotOff:\"\\u2610\",ballotOn:\"\\u2611\",bullet:\"\\u2022\",bulletWhite:\"\\u25E6\",fullBlock:\"\\u2588\",heart:\"\\u2764\",identicalTo:\"\\u2261\",line:\"\\u2500\",mark:\"\\u203B\",middot:\"\\xB7\",minus:\"\\uFF0D\",multiplication:\"\\xD7\",obelus:\"\\xF7\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",pencilUpRight:\"\\u2710\",percent:\"%\",pilcrow2:\"\\u2761\",pilcrow:\"\\xB6\",plusMinus:\"\\xB1\",section:\"\\xA7\",starsOff:\"\\u2606\",starsOn:\"\\u2605\",upDownArrow:\"\\u2195\"},Xie=Object.assign({},XT,{check:\"\\u221A\",cross:\"\\xD7\",ellipsisLarge:\"...\",ellipsis:\"...\",info:\"i\",question:\"?\",questionSmall:\"?\",pointer:\">\",pointerSmall:\"\\xBB\",radioOff:\"( )\",radioOn:\"(*)\",warning:\"\\u203C\"}),Zie=Object.assign({},XT,{ballotCross:\"\\u2718\",check:\"\\u2714\",cross:\"\\u2716\",ellipsisLarge:\"\\u22EF\",ellipsis:\"\\u2026\",info:\"\\u2139\",question:\"?\",questionFull:\"\\uFF1F\",questionSmall:\"\\uFE56\",pointer:Vie?\"\\u25B8\":\"\\u276F\",pointerSmall:Vie?\"\\u2023\":\"\\u203A\",radioOff:\"\\u25EF\",radioOn:\"\\u25C9\",warning:\"\\u26A0\"});Tm.exports=rje&&!tje?Xie:Zie;Reflect.defineProperty(Tm.exports,\"common\",{enumerable:!1,value:XT});Reflect.defineProperty(Tm.exports,\"windows\",{enumerable:!1,value:Xie});Reflect.defineProperty(Tm.exports,\"other\",{enumerable:!1,value:Zie})});var go=w((wgt,ZT)=>{\"use strict\";var ije=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r),nje=/[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,$ie=()=>{let r={enabled:!0,visible:!0,styles:{},keys:{}};\"FORCE_COLOR\"in process.env&&(r.enabled=process.env.FORCE_COLOR!==\"0\");let e=s=>{let o=s.open=`\\x1B[${s.codes[0]}m`,a=s.close=`\\x1B[${s.codes[1]}m`,l=s.regex=new RegExp(`\\\\u001b\\\\[${s.codes[1]}m`,\"g\");return s.wrap=(c,u)=>{c.includes(a)&&(c=c.replace(l,a+o));let g=o+c+a;return u?g.replace(/\\r*\\n/g,`${a}$&${o}`):g},s},t=(s,o,a)=>typeof s==\"function\"?s(o):s.wrap(o,a),i=(s,o)=>{if(s===\"\"||s==null)return\"\";if(r.enabled===!1)return s;if(r.visible===!1)return\"\";let a=\"\"+s,l=a.includes(`\n`),c=o.length;for(c>0&&o.includes(\"unstyle\")&&(o=[...new Set([\"unstyle\",...o])].reverse());c-- >0;)a=t(r.styles[o[c]],a,l);return a},n=(s,o,a)=>{r.styles[s]=e({name:s,codes:o}),(r.keys[a]||(r.keys[a]=[])).push(s),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(c){r.alias(s,c)},get(){let c=u=>i(u,c.stack);return Reflect.setPrototypeOf(c,r),c.stack=this.stack?this.stack.concat(s):[s],c}})};return n(\"reset\",[0,0],\"modifier\"),n(\"bold\",[1,22],\"modifier\"),n(\"dim\",[2,22],\"modifier\"),n(\"italic\",[3,23],\"modifier\"),n(\"underline\",[4,24],\"modifier\"),n(\"inverse\",[7,27],\"modifier\"),n(\"hidden\",[8,28],\"modifier\"),n(\"strikethrough\",[9,29],\"modifier\"),n(\"black\",[30,39],\"color\"),n(\"red\",[31,39],\"color\"),n(\"green\",[32,39],\"color\"),n(\"yellow\",[33,39],\"color\"),n(\"blue\",[34,39],\"color\"),n(\"magenta\",[35,39],\"color\"),n(\"cyan\",[36,39],\"color\"),n(\"white\",[37,39],\"color\"),n(\"gray\",[90,39],\"color\"),n(\"grey\",[90,39],\"color\"),n(\"bgBlack\",[40,49],\"bg\"),n(\"bgRed\",[41,49],\"bg\"),n(\"bgGreen\",[42,49],\"bg\"),n(\"bgYellow\",[43,49],\"bg\"),n(\"bgBlue\",[44,49],\"bg\"),n(\"bgMagenta\",[45,49],\"bg\"),n(\"bgCyan\",[46,49],\"bg\"),n(\"bgWhite\",[47,49],\"bg\"),n(\"blackBright\",[90,39],\"bright\"),n(\"redBright\",[91,39],\"bright\"),n(\"greenBright\",[92,39],\"bright\"),n(\"yellowBright\",[93,39],\"bright\"),n(\"blueBright\",[94,39],\"bright\"),n(\"magentaBright\",[95,39],\"bright\"),n(\"cyanBright\",[96,39],\"bright\"),n(\"whiteBright\",[97,39],\"bright\"),n(\"bgBlackBright\",[100,49],\"bgBright\"),n(\"bgRedBright\",[101,49],\"bgBright\"),n(\"bgGreenBright\",[102,49],\"bgBright\"),n(\"bgYellowBright\",[103,49],\"bgBright\"),n(\"bgBlueBright\",[104,49],\"bgBright\"),n(\"bgMagentaBright\",[105,49],\"bgBright\"),n(\"bgCyanBright\",[106,49],\"bgBright\"),n(\"bgWhiteBright\",[107,49],\"bgBright\"),r.ansiRegex=nje,r.hasColor=r.hasAnsi=s=>(r.ansiRegex.lastIndex=0,typeof s==\"string\"&&s!==\"\"&&r.ansiRegex.test(s)),r.alias=(s,o)=>{let a=typeof o==\"string\"?r[o]:o;if(typeof a!=\"function\")throw new TypeError(\"Expected alias to be the name of an existing color (string) or a function\");a.stack||(Reflect.defineProperty(a,\"name\",{value:s}),r.styles[s]=a,a.stack=[s]),Reflect.defineProperty(r,s,{configurable:!0,enumerable:!0,set(l){r.alias(s,l)},get(){let l=c=>i(c,l.stack);return Reflect.setPrototypeOf(l,r),l.stack=this.stack?this.stack.concat(a.stack):a.stack,l}})},r.theme=s=>{if(!ije(s))throw new TypeError(\"Expected theme to be an object\");for(let o of Object.keys(s))r.alias(o,s[o]);return r},r.alias(\"unstyle\",s=>typeof s==\"string\"&&s!==\"\"?(r.ansiRegex.lastIndex=0,s.replace(r.ansiRegex,\"\")):\"\"),r.alias(\"noop\",s=>s),r.none=r.clear=r.noop,r.stripColor=r.unstyle,r.symbols=_ie(),r.define=n,r};ZT.exports=$ie();ZT.exports.create=$ie});var ji=w(Tt=>{\"use strict\";var sje=Object.prototype.toString,Ns=go(),ene=!1,_T=[],tne={yellow:\"blue\",cyan:\"red\",green:\"magenta\",black:\"white\",blue:\"yellow\",red:\"cyan\",magenta:\"green\",white:\"black\"};Tt.longest=(r,e)=>r.reduce((t,i)=>Math.max(t,e?i[e].length:i.length),0);Tt.hasColor=r=>!!r&&Ns.hasColor(r);var bb=Tt.isObject=r=>r!==null&&typeof r==\"object\"&&!Array.isArray(r);Tt.nativeType=r=>sje.call(r).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");Tt.isAsyncFn=r=>Tt.nativeType(r)===\"asyncfunction\";Tt.isPrimitive=r=>r!=null&&typeof r!=\"object\"&&typeof r!=\"function\";Tt.resolve=(r,e,...t)=>typeof e==\"function\"?e.call(r,...t):e;Tt.scrollDown=(r=[])=>[...r.slice(1),r[0]];Tt.scrollUp=(r=[])=>[r.pop(),...r];Tt.reorder=(r=[])=>{let e=r.slice();return e.sort((t,i)=>t.index>i.index?1:t.index<i.index?-1:0),e};Tt.swap=(r,e,t)=>{let i=r.length,n=t===i?0:t<0?i-1:t,s=r[e];r[e]=r[n],r[n]=s};Tt.width=(r,e=80)=>{let t=r&&r.columns?r.columns:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[0]),process.platform===\"win32\"?t-1:t};Tt.height=(r,e=20)=>{let t=r&&r.rows?r.rows:e;return r&&typeof r.getWindowSize==\"function\"&&(t=r.getWindowSize()[1]),t};Tt.wordWrap=(r,e={})=>{if(!r)return r;typeof e==\"number\"&&(e={width:e});let{indent:t=\"\",newline:i=`\n`+t,width:n=80}=e,s=(i+t).match(/[^\\S\\n]/g)||[];n-=s.length;let o=`.{1,${n}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`,a=r.trim(),l=new RegExp(o,\"g\"),c=a.match(l)||[];return c=c.map(u=>u.replace(/\\n$/,\"\")),e.padEnd&&(c=c.map(u=>u.padEnd(n,\" \"))),e.padStart&&(c=c.map(u=>u.padStart(n,\" \"))),t+c.join(i)};Tt.unmute=r=>{let e=r.stack.find(i=>Ns.keys.color.includes(i));return e?Ns[e]:r.stack.find(i=>i.slice(2)===\"bg\")?Ns[e.slice(2)]:i=>i};Tt.pascal=r=>r?r[0].toUpperCase()+r.slice(1):\"\";Tt.inverse=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i));if(e){let i=Ns[\"bg\"+Tt.pascal(e)];return i?i.black:r}let t=r.stack.find(i=>i.slice(0,2)===\"bg\");return t?Ns[t.slice(2).toLowerCase()]||r:Ns.none};Tt.complement=r=>{if(!r||!r.stack)return r;let e=r.stack.find(i=>Ns.keys.color.includes(i)),t=r.stack.find(i=>i.slice(0,2)===\"bg\");if(e&&!t)return Ns[tne[e]||e];if(t){let i=t.slice(2).toLowerCase(),n=tne[i];return n&&Ns[\"bg\"+Tt.pascal(n)]||r}return Ns.none};Tt.meridiem=r=>{let e=r.getHours(),t=r.getMinutes(),i=e>=12?\"pm\":\"am\";e=e%12;let n=e===0?12:e,s=t<10?\"0\"+t:t;return n+\":\"+s+\" \"+i};Tt.set=(r={},e=\"\",t)=>e.split(\".\").reduce((i,n,s,o)=>{let a=o.length-1>s?i[n]||{}:t;return!Tt.isObject(a)&&s<o.length-1&&(a={}),i[n]=a},r);Tt.get=(r={},e=\"\",t)=>{let i=r[e]==null?e.split(\".\").reduce((n,s)=>n&&n[s],r):r[e];return i==null?t:i};Tt.mixin=(r,e)=>{if(!bb(r))return e;if(!bb(e))return r;for(let t of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,t);if(i.hasOwnProperty(\"value\"))if(r.hasOwnProperty(t)&&bb(i.value)){let n=Object.getOwnPropertyDescriptor(r,t);bb(n.value)?r[t]=Tt.merge({},r[t],e[t]):Reflect.defineProperty(r,t,i)}else Reflect.defineProperty(r,t,i);else Reflect.defineProperty(r,t,i)}return r};Tt.merge=(...r)=>{let e={};for(let t of r)Tt.mixin(e,t);return e};Tt.mixinEmitter=(r,e)=>{let t=e.constructor.prototype;for(let i of Object.keys(t)){let n=t[i];typeof n==\"function\"?Tt.define(r,i,n.bind(e)):Tt.define(r,i,n)}};Tt.onExit=r=>{let e=(t,i)=>{ene||(ene=!0,_T.forEach(n=>n()),t===!0&&process.exit(128+i))};_T.length===0&&(process.once(\"SIGTERM\",e.bind(null,!0,15)),process.once(\"SIGINT\",e.bind(null,!0,2)),process.once(\"exit\",e)),_T.push(r)};Tt.define=(r,e,t)=>{Reflect.defineProperty(r,e,{value:t})};Tt.defineExport=(r,e,t)=>{let i;Reflect.defineProperty(r,e,{enumerable:!0,configurable:!0,set(n){i=n},get(){return i?i():t()}})}});var rne=w(Gh=>{\"use strict\";Gh.ctrl={a:\"first\",b:\"backward\",c:\"cancel\",d:\"deleteForward\",e:\"last\",f:\"forward\",g:\"reset\",i:\"tab\",k:\"cutForward\",l:\"reset\",n:\"newItem\",m:\"cancel\",j:\"submit\",p:\"search\",r:\"remove\",s:\"save\",u:\"undo\",w:\"cutLeft\",x:\"toggleCursor\",v:\"paste\"};Gh.shift={up:\"shiftUp\",down:\"shiftDown\",left:\"shiftLeft\",right:\"shiftRight\",tab:\"prev\"};Gh.fn={up:\"pageUp\",down:\"pageDown\",left:\"pageLeft\",right:\"pageRight\",delete:\"deleteForward\"};Gh.option={b:\"backward\",f:\"forward\",d:\"cutRight\",left:\"cutLeft\",up:\"altUp\",down:\"altDown\"};Gh.keys={pageup:\"pageUp\",pagedown:\"pageDown\",home:\"home\",end:\"end\",cancel:\"cancel\",delete:\"deleteForward\",backspace:\"delete\",down:\"down\",enter:\"submit\",escape:\"cancel\",left:\"left\",space:\"space\",number:\"number\",return:\"submit\",right:\"right\",tab:\"next\",up:\"up\"}});var sne=w((Qgt,nne)=>{\"use strict\";var ine=J(\"readline\"),oje=rne(),aje=/^(?:\\x1b)([a-zA-Z0-9])$/,Aje=/^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/,lje={OP:\"f1\",OQ:\"f2\",OR:\"f3\",OS:\"f4\",\"[11~\":\"f1\",\"[12~\":\"f2\",\"[13~\":\"f3\",\"[14~\":\"f4\",\"[[A\":\"f1\",\"[[B\":\"f2\",\"[[C\":\"f3\",\"[[D\":\"f4\",\"[[E\":\"f5\",\"[15~\":\"f5\",\"[17~\":\"f6\",\"[18~\":\"f7\",\"[19~\":\"f8\",\"[20~\":\"f9\",\"[21~\":\"f10\",\"[23~\":\"f11\",\"[24~\":\"f12\",\"[A\":\"up\",\"[B\":\"down\",\"[C\":\"right\",\"[D\":\"left\",\"[E\":\"clear\",\"[F\":\"end\",\"[H\":\"home\",OA:\"up\",OB:\"down\",OC:\"right\",OD:\"left\",OE:\"clear\",OF:\"end\",OH:\"home\",\"[1~\":\"home\",\"[2~\":\"insert\",\"[3~\":\"delete\",\"[4~\":\"end\",\"[5~\":\"pageup\",\"[6~\":\"pagedown\",\"[[5~\":\"pageup\",\"[[6~\":\"pagedown\",\"[7~\":\"home\",\"[8~\":\"end\",\"[a\":\"up\",\"[b\":\"down\",\"[c\":\"right\",\"[d\":\"left\",\"[e\":\"clear\",\"[2$\":\"insert\",\"[3$\":\"delete\",\"[5$\":\"pageup\",\"[6$\":\"pagedown\",\"[7$\":\"home\",\"[8$\":\"end\",Oa:\"up\",Ob:\"down\",Oc:\"right\",Od:\"left\",Oe:\"clear\",\"[2^\":\"insert\",\"[3^\":\"delete\",\"[5^\":\"pageup\",\"[6^\":\"pagedown\",\"[7^\":\"home\",\"[8^\":\"end\",\"[Z\":\"tab\"};function cje(r){return[\"[a\",\"[b\",\"[c\",\"[d\",\"[e\",\"[2$\",\"[3$\",\"[5$\",\"[6$\",\"[7$\",\"[8$\",\"[Z\"].includes(r)}function uje(r){return[\"Oa\",\"Ob\",\"Oc\",\"Od\",\"Oe\",\"[2^\",\"[3^\",\"[5^\",\"[6^\",\"[7^\",\"[8^\"].includes(r)}var Qb=(r=\"\",e={})=>{let t,i={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:r,raw:r,...e};if(Buffer.isBuffer(r)?r[0]>127&&r[1]===void 0?(r[0]-=128,r=\"\\x1B\"+String(r)):r=String(r):r!==void 0&&typeof r!=\"string\"?r=String(r):r||(r=i.sequence||\"\"),i.sequence=i.sequence||r||i.name,r===\"\\r\")i.raw=void 0,i.name=\"return\";else if(r===`\n`)i.name=\"enter\";else if(r===\"\t\")i.name=\"tab\";else if(r===\"\\b\"||r===\"\\x7F\"||r===\"\\x1B\\x7F\"||r===\"\\x1B\\b\")i.name=\"backspace\",i.meta=r.charAt(0)===\"\\x1B\";else if(r===\"\\x1B\"||r===\"\\x1B\\x1B\")i.name=\"escape\",i.meta=r.length===2;else if(r===\" \"||r===\"\\x1B \")i.name=\"space\",i.meta=r.length===2;else if(r<=\"\u001a\")i.name=String.fromCharCode(r.charCodeAt(0)+\"a\".charCodeAt(0)-1),i.ctrl=!0;else if(r.length===1&&r>=\"0\"&&r<=\"9\")i.name=\"number\";else if(r.length===1&&r>=\"a\"&&r<=\"z\")i.name=r;else if(r.length===1&&r>=\"A\"&&r<=\"Z\")i.name=r.toLowerCase(),i.shift=!0;else if(t=aje.exec(r))i.meta=!0,i.shift=/^[A-Z]$/.test(t[1]);else if(t=Aje.exec(r)){let n=[...r];n[0]===\"\\x1B\"&&n[1]===\"\\x1B\"&&(i.option=!0);let s=[t[1],t[2],t[4],t[6]].filter(Boolean).join(\"\"),o=(t[3]||t[5]||1)-1;i.ctrl=!!(o&4),i.meta=!!(o&10),i.shift=!!(o&1),i.code=s,i.name=lje[s],i.shift=cje(s)||i.shift,i.ctrl=uje(s)||i.ctrl}return i};Qb.listen=(r={},e)=>{let{stdin:t}=r;if(!t||t!==process.stdin&&!t.isTTY)throw new Error(\"Invalid stream passed\");let i=ine.createInterface({terminal:!0,input:t});ine.emitKeypressEvents(t,i);let n=(a,l)=>e(a,Qb(a,l),i),s=t.isRaw;return t.isTTY&&t.setRawMode(!0),t.on(\"keypress\",n),i.resume(),()=>{t.isTTY&&t.setRawMode(s),t.removeListener(\"keypress\",n),i.pause(),i.close()}};Qb.action=(r,e,t)=>{let i={...oje,...t};return e.ctrl?(e.action=i.ctrl[e.name],e):e.option&&i.option?(e.action=i.option[e.name],e):e.shift?(e.action=i.shift[e.name],e):(e.action=i.keys[e.name],e)};nne.exports=Qb});var ane=w((Sgt,one)=>{\"use strict\";one.exports=r=>{r.timers=r.timers||{};let e=r.options.timers;if(!!e)for(let t of Object.keys(e)){let i=e[t];typeof i==\"number\"&&(i={interval:i}),gje(r,t,i)}};function gje(r,e,t={}){let i=r.timers[e]={name:e,start:Date.now(),ms:0,tick:0},n=t.interval||120;i.frames=t.frames||[],i.loading=!0;let s=setInterval(()=>{i.ms=Date.now()-i.start,i.tick++,r.render()},n);return i.stop=()=>{i.loading=!1,clearInterval(s)},Reflect.defineProperty(i,\"interval\",{value:s}),r.once(\"close\",()=>i.stop()),i.stop}});var lne=w((vgt,Ane)=>{\"use strict\";var{define:fje,width:hje}=ji(),$T=class{constructor(e){let t=e.options;fje(this,\"_prompt\",e),this.type=e.type,this.name=e.name,this.message=\"\",this.header=\"\",this.footer=\"\",this.error=\"\",this.hint=\"\",this.input=\"\",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt=\"\",this.buffer=\"\",this.width=hje(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return typeof t==\"function\"?t:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading==\"boolean\"?this._loading:this.loadingChoices?\"choices\":!1}get status(){return this.cancelled?\"cancelled\":this.submitted?\"submitted\":\"pending\"}};Ane.exports=$T});var une=w((xgt,cne)=>{\"use strict\";var eL=ji(),Di=go(),tL={default:Di.noop,noop:Di.noop,set inverse(r){this._inverse=r},get inverse(){return this._inverse||eL.inverse(this.primary)},set complement(r){this._complement=r},get complement(){return this._complement||eL.complement(this.primary)},primary:Di.cyan,success:Di.green,danger:Di.magenta,strong:Di.bold,warning:Di.yellow,muted:Di.dim,disabled:Di.gray,dark:Di.dim.gray,underline:Di.underline,set info(r){this._info=r},get info(){return this._info||this.primary},set em(r){this._em=r},get em(){return this._em||this.primary.underline},set heading(r){this._heading=r},get heading(){return this._heading||this.muted.underline},set pending(r){this._pending=r},get pending(){return this._pending||this.primary},set submitted(r){this._submitted=r},get submitted(){return this._submitted||this.success},set cancelled(r){this._cancelled=r},get cancelled(){return this._cancelled||this.danger},set typing(r){this._typing=r},get typing(){return this._typing||this.dim},set placeholder(r){this._placeholder=r},get placeholder(){return this._placeholder||this.primary.dim},set highlight(r){this._highlight=r},get highlight(){return this._highlight||this.inverse}};tL.merge=(r={})=>{r.styles&&typeof r.styles.enabled==\"boolean\"&&(Di.enabled=r.styles.enabled),r.styles&&typeof r.styles.visible==\"boolean\"&&(Di.visible=r.styles.visible);let e=eL.merge({},tL,r.styles);delete e.merge;for(let t of Object.keys(Di))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});for(let t of Object.keys(Di.styles))e.hasOwnProperty(t)||Reflect.defineProperty(e,t,{get:()=>Di[t]});return e};cne.exports=tL});var fne=w((Pgt,gne)=>{\"use strict\";var rL=process.platform===\"win32\",aA=go(),pje=ji(),iL={...aA.symbols,upDownDoubleArrow:\"\\u21D5\",upDownDoubleArrow2:\"\\u2B0D\",upDownArrow:\"\\u2195\",asterisk:\"*\",asterism:\"\\u2042\",bulletWhite:\"\\u25E6\",electricArrow:\"\\u2301\",ellipsisLarge:\"\\u22EF\",ellipsisSmall:\"\\u2026\",fullBlock:\"\\u2588\",identicalTo:\"\\u2261\",indicator:aA.symbols.check,leftAngle:\"\\u2039\",mark:\"\\u203B\",minus:\"\\u2212\",multiplication:\"\\xD7\",obelus:\"\\xF7\",percent:\"%\",pilcrow:\"\\xB6\",pilcrow2:\"\\u2761\",pencilUpRight:\"\\u2710\",pencilDownRight:\"\\u270E\",pencilRight:\"\\u270F\",plus:\"+\",plusMinus:\"\\xB1\",pointRight:\"\\u261E\",rightAngle:\"\\u203A\",section:\"\\xA7\",hexagon:{off:\"\\u2B21\",on:\"\\u2B22\",disabled:\"\\u2B22\"},ballot:{on:\"\\u2611\",off:\"\\u2610\",disabled:\"\\u2612\"},stars:{on:\"\\u2605\",off:\"\\u2606\",disabled:\"\\u2606\"},folder:{on:\"\\u25BC\",off:\"\\u25B6\",disabled:\"\\u25B6\"},prefix:{pending:aA.symbols.question,submitted:aA.symbols.check,cancelled:aA.symbols.cross},separator:{pending:aA.symbols.pointerSmall,submitted:aA.symbols.middot,cancelled:aA.symbols.middot},radio:{off:rL?\"( )\":\"\\u25EF\",on:rL?\"(*)\":\"\\u25C9\",disabled:rL?\"(|)\":\"\\u24BE\"},numbers:[\"\\u24EA\",\"\\u2460\",\"\\u2461\",\"\\u2462\",\"\\u2463\",\"\\u2464\",\"\\u2465\",\"\\u2466\",\"\\u2467\",\"\\u2468\",\"\\u2469\",\"\\u246A\",\"\\u246B\",\"\\u246C\",\"\\u246D\",\"\\u246E\",\"\\u246F\",\"\\u2470\",\"\\u2471\",\"\\u2472\",\"\\u2473\",\"\\u3251\",\"\\u3252\",\"\\u3253\",\"\\u3254\",\"\\u3255\",\"\\u3256\",\"\\u3257\",\"\\u3258\",\"\\u3259\",\"\\u325A\",\"\\u325B\",\"\\u325C\",\"\\u325D\",\"\\u325E\",\"\\u325F\",\"\\u32B1\",\"\\u32B2\",\"\\u32B3\",\"\\u32B4\",\"\\u32B5\",\"\\u32B6\",\"\\u32B7\",\"\\u32B8\",\"\\u32B9\",\"\\u32BA\",\"\\u32BB\",\"\\u32BC\",\"\\u32BD\",\"\\u32BE\",\"\\u32BF\"]};iL.merge=r=>{let e=pje.merge({},aA.symbols,iL,r.symbols);return delete e.merge,e};gne.exports=iL});var pne=w((Dgt,hne)=>{\"use strict\";var dje=une(),Cje=fne(),mje=ji();hne.exports=r=>{r.options=mje.merge({},r.options.theme,r.options),r.symbols=Cje.merge(r.options),r.styles=dje.merge(r.options)}});var Ine=w((mne,Ene)=>{\"use strict\";var dne=process.env.TERM_PROGRAM===\"Apple_Terminal\",Eje=go(),nL=ji(),fo=Ene.exports=mne,Dr=\"\\x1B[\",Cne=\"\\x07\",sL=!1,dl=fo.code={bell:Cne,beep:Cne,beginning:`${Dr}G`,down:`${Dr}J`,esc:Dr,getPosition:`${Dr}6n`,hide:`${Dr}?25l`,line:`${Dr}2K`,lineEnd:`${Dr}K`,lineStart:`${Dr}1K`,restorePosition:Dr+(dne?\"8\":\"u\"),savePosition:Dr+(dne?\"7\":\"s\"),screen:`${Dr}2J`,show:`${Dr}?25h`,up:`${Dr}1J`},su=fo.cursor={get hidden(){return sL},hide(){return sL=!0,dl.hide},show(){return sL=!1,dl.show},forward:(r=1)=>`${Dr}${r}C`,backward:(r=1)=>`${Dr}${r}D`,nextLine:(r=1)=>`${Dr}E`.repeat(r),prevLine:(r=1)=>`${Dr}F`.repeat(r),up:(r=1)=>r?`${Dr}${r}A`:\"\",down:(r=1)=>r?`${Dr}${r}B`:\"\",right:(r=1)=>r?`${Dr}${r}C`:\"\",left:(r=1)=>r?`${Dr}${r}D`:\"\",to(r,e){return e?`${Dr}${e+1};${r+1}H`:`${Dr}${r+1}G`},move(r=0,e=0){let t=\"\";return t+=r<0?su.left(-r):r>0?su.right(r):\"\",t+=e<0?su.up(-e):e>0?su.down(e):\"\",t},restore(r={}){let{after:e,cursor:t,initial:i,input:n,prompt:s,size:o,value:a}=r;if(i=nL.isPrimitive(i)?String(i):\"\",n=nL.isPrimitive(n)?String(n):\"\",a=nL.isPrimitive(a)?String(a):\"\",o){let l=fo.cursor.up(o)+fo.cursor.to(s.length),c=n.length-t;return c>0&&(l+=fo.cursor.left(c)),l}if(a||e){let l=!n&&!!i?-i.length:-n.length+t;return e&&(l-=e.length),n===\"\"&&i&&!s.includes(i)&&(l+=i.length),fo.cursor.move(l)}}},oL=fo.erase={screen:dl.screen,up:dl.up,down:dl.down,line:dl.line,lineEnd:dl.lineEnd,lineStart:dl.lineStart,lines(r){let e=\"\";for(let t=0;t<r;t++)e+=fo.erase.line+(t<r-1?fo.cursor.up(1):\"\");return r&&(e+=fo.code.beginning),e}};fo.clear=(r=\"\",e=process.stdout.columns)=>{if(!e)return oL.line+su.to(0);let t=s=>[...Eje.unstyle(s)].length,i=r.split(/\\r?\\n/),n=0;for(let s of i)n+=1+Math.floor(Math.max(t(s)-1,0)/e);return(oL.line+su.prevLine()).repeat(n-1)+oL.line+su.to(0)}});var Yh=w((kgt,wne)=>{\"use strict\";var Ije=J(\"events\"),yne=go(),aL=sne(),yje=ane(),wje=lne(),Bje=pne(),kn=ji(),ou=Ine(),Lm=class extends Ije{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,Bje(this),yje(this),this.state=new wje(this),this.initial=[e.initial,e.default].find(t=>t!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=Qje(this.options.margin),this.setMaxListeners(0),bje(this)}async keypress(e,t={}){this.keypressed=!0;let i=aL.action(e,aL(e,t),this.options.actions);this.state.keypress=i,this.emit(\"keypress\",e,i),this.emit(\"state\",this.state.clone());let n=this.options[i.action]||this[i.action]||this.dispatch;if(typeof n==\"function\")return await n.call(this,e,i);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit(\"alert\"):this.stdout.write(ou.code.beep)}cursorHide(){this.stdout.write(ou.cursor.hide()),kn.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(ou.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer=\"\",!(!t&&!e||this.options.show===!1)&&this.stdout.write(ou.cursor.down(e)+ou.clear(t,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:t,rest:i}=this.sections(),{cursor:n,initial:s=\"\",input:o=\"\",value:a=\"\"}=this,l=this.state.size=i.length,c={after:t,cursor:n,initial:s,input:o,prompt:e,size:l,value:a},u=ou.cursor.restore(c);u&&this.stdout.write(u)}sections(){let{buffer:e,input:t,prompt:i}=this.state;i=yne.unstyle(i);let n=yne.unstyle(e),s=n.indexOf(i),o=n.slice(0,s),l=n.slice(s).split(`\n`),c=l[0],u=l[l.length-1],f=(i+(t?\" \"+t:\"\")).length,h=f<c.length?c.slice(f+1):\"\";return{header:o,prompt:c,after:h,rest:l.slice(1),last:u}}async submit(){this.state.submitted=!0,this.state.validating=!0,this.options.onSubmit&&await this.options.onSubmit.call(this,this.name,this.value,this);let e=this.state.error||await this.validate(this.value,this.state);if(e!==!0){let t=`\n`+this.symbols.pointer+\" \";typeof e==\"string\"?t+=e.trim():t+=\"Invalid input\",this.state.error=`\n`+this.styles.danger(t),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit(\"submit\",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel==\"function\"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit(\"cancel\",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),t=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(ou.cursor.down(e.rest.length)),this.write(`\n`.repeat(t))}catch{}this.emit(\"close\")}start(){!this.stop&&this.options.show!==!1&&(this.stop=aL.listen(this,this.keypress.bind(this)),this.once(\"close\",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip==\"function\"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:t,result:i}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>i.call(this,this.value),typeof t.initial==\"function\"&&(this.initial=await t.initial.call(this,this)),typeof t.onRun==\"function\"&&await t.onRun.call(this,this),typeof t.onSubmit==\"function\"){let n=t.onSubmit.bind(this),s=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await n(this.name,this.value,this),s())}await this.start(),await this.render()}render(){throw new Error(\"expected prompt to have a custom render method\")}run(){return new Promise(async(e,t)=>{if(this.once(\"submit\",e),this.once(\"cancel\",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit(\"run\")})}async element(e,t,i){let{options:n,state:s,symbols:o,timers:a}=this,l=a&&a[e];s.timer=l;let c=n[e]||s[e]||o[e],u=t&&t[e]!=null?t[e]:await c;if(u===\"\")return u;let g=await this.resolve(u,s,t,i);return!g&&t&&t[e]?this.resolve(c,s,t,i):g}async prefix(){let e=await this.element(\"prefix\")||this.symbols,t=this.timers&&this.timers.prefix,i=this.state;return i.timer=t,kn.isObject(e)&&(e=e[i.status]||e.pending),kn.hasColor(e)?e:(this.styles[i.status]||this.styles.pending)(e)}async message(){let e=await this.element(\"message\");return kn.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element(\"separator\")||this.symbols,t=this.timers&&this.timers.separator,i=this.state;i.timer=t;let n=e[i.status]||e.pending||i.separator,s=await this.resolve(n,i);return kn.isObject(s)&&(s=s[i.status]||s.pending),kn.hasColor(s)?s:this.styles.muted(s)}async pointer(e,t){let i=await this.element(\"pointer\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=this.index===t,o=s?n.primary:c=>c,a=await this.resolve(i[s?\"on\":\"off\"]||i,this.state),l=kn.hasColor(a)?a:o(a);return s?l:\" \".repeat(a.length)}}async indicator(e,t){let i=await this.element(\"indicator\",e,t);if(typeof i==\"string\"&&kn.hasColor(i))return i;if(i){let n=this.styles,s=e.enabled===!0,o=s?n.success:n.dark,a=i[s?\"on\":\"off\"]||i;return kn.hasColor(a)?a:o(a)}return\"\"}body(){return null}footer(){if(this.state.status===\"pending\")return this.element(\"footer\")}header(){if(this.state.status===\"pending\")return this.element(\"header\")}async hint(){if(this.state.status===\"pending\"&&!this.isValue(this.state.input)){let e=await this.element(\"hint\");return kn.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?\"\":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==\"\"}resolve(e,...t){return kn.resolve(this,e,...t)}get base(){return Lm.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||kn.height(this.stdout,25)}get width(){return this.options.columns||kn.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,i=[t,e].find(this.isValue.bind(this));return this.isValue(i)?i:this.initial}static get prompt(){return e=>new this(e).run()}};function bje(r){let e=n=>r[n]===void 0||typeof r[n]==\"function\",t=[\"actions\",\"choices\",\"initial\",\"margin\",\"roles\",\"styles\",\"symbols\",\"theme\",\"timers\",\"value\"],i=[\"body\",\"footer\",\"error\",\"header\",\"hint\",\"indicator\",\"message\",\"prefix\",\"separator\",\"skip\"];for(let n of Object.keys(r.options)){if(t.includes(n)||/^on[A-Z]/.test(n))continue;let s=r.options[n];typeof s==\"function\"&&e(n)?i.includes(n)||(r[n]=s.bind(r)):typeof r[n]!=\"function\"&&(r[n]=s)}}function Qje(r){typeof r==\"number\"&&(r=[r,r,r,r]);let e=[].concat(r||[]),t=n=>n%2===0?`\n`:\" \",i=[];for(let n=0;n<4;n++){let s=t(n);e[n]?i.push(s.repeat(e[n])):i.push(\"\")}return i}wne.exports=Lm});var Qne=w((Rgt,bne)=>{\"use strict\";var Sje=ji(),Bne={default(r,e){return e},checkbox(r,e){throw new Error(\"checkbox role is not implemented yet\")},editable(r,e){throw new Error(\"editable role is not implemented yet\")},expandable(r,e){throw new Error(\"expandable role is not implemented yet\")},heading(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||\"\",e},input(r,e){throw new Error(\"input role is not implemented yet\")},option(r,e){return Bne.default(r,e)},radio(r,e){throw new Error(\"radio role is not implemented yet\")},separator(r,e){return e.disabled=\"\",e.indicator=[e.indicator,\" \"].find(t=>t!=null),e.message=e.message||r.symbols.line.repeat(5),e},spacer(r,e){return e}};bne.exports=(r,e={})=>{let t=Sje.merge({},Bne,e.roles);return t[r]||t.default}});var Mm=w((Fgt,xne)=>{\"use strict\";var vje=go(),xje=Yh(),Pje=Qne(),Sb=ji(),{reorder:AL,scrollUp:Dje,scrollDown:kje,isObject:Sne,swap:Rje}=Sb,lL=class extends xje{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=\"\"}async initialize(){typeof this.options.initial==\"function\"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:i,suggest:n}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(s=>s.enabled=!1),typeof n!=\"function\"&&this.selectable.length===0)throw new Error(\"At least one choice must be selectable\");Sne(t)&&(t=Object.keys(t)),Array.isArray(t)?(i!=null&&(this.index=this.findIndex(i)),t.forEach(s=>this.enable(this.find(s))),await this.render()):(i!=null&&(t=i),typeof t==\"string\"&&(t=this.findIndex(t)),typeof t==\"number\"&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let i=[],n=0,s=async(o,a)=>{typeof o==\"function\"&&(o=await o.call(this)),o instanceof Promise&&(o=await o);for(let l=0;l<o.length;l++){let c=o[l]=await this.toChoice(o[l],n++,a);i.push(c),c.choices&&await s(c.choices,c)}return i};return s(e,t).then(o=>(this.state.loadingChoices=!1,o))}async toChoice(e,t,i){if(typeof e==\"function\"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e==\"string\"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value;if(e=Pje(e.role,this.options)(this,e),typeof e.disabled==\"string\"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint=\"(disabled)\"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||\"\",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input=\"\",e.index=t,e.cursor=0,Sb.define(e,\"parent\",i),e.level=i?i.level+1:1,e.indent==null&&(e.indent=i?i.indent+\"  \":e.indent||\"\"),e.path=i?i.path+\".\"+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,vje.unstyle(e.message).length));let o={...e};return e.reset=(a=o.input,l=o.value)=>{for(let c of Object.keys(o))e[c]=o[c];e.input=a,e.value=l},n==null&&typeof e.initial==\"function\"&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit(\"choice\",e,t,this),typeof e.onChoice==\"function\"&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,i){let n=await this.toChoice(e,t,i);return this.choices.push(n),this.index=this.choices.length-1,this.limit=this.choices.length,n}async newItem(e,t,i){let n={name:\"New choice name?\",editable:!0,newChoice:!0,...e},s=await this.addChoice(n,t,i);return s.updateChoice=()=>{delete s.newChoice,s.name=s.message=s.input,s.input=\"\",s.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?\"  \".repeat(e.level-1):\"\":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return typeof t!=\"boolean\"&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelected<this.choices.length)return this.alert();let e=this.selectable.every(t=>t.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(t=>!!t.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof t!=\"boolean\"&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(n=>this.toggle(n,t));let i=e.parent;for(;i;){let n=i.choices.filter(s=>this.isDisabled(s));i.enabled=n.every(s=>s.enabled===!0),i=i.parent}return vne(this,this.choices),this.emit(\"toggle\",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=i=>{let n=Number(i);if(n>this.choices.length-1)return this.alert();let s=this.focused,o=this.choices.find(a=>n===a.index);if(!o.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(o)===-1){let a=AL(this.choices),l=a.indexOf(o);if(s.index>l){let c=a.slice(l,l+this.limit),u=a.filter(g=>!c.includes(g));this.choices=c.concat(u)}else{let c=l-this.limit+1;this.choices=a.slice(c).concat(a.slice(0,c))}}return this.index=this.choices.indexOf(o),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(i=>{let n=this.choices.length,s=this.num,o=(a=!1,l)=>{clearTimeout(this.numberTimeout),a&&(l=t(s)),this.num=\"\",i(l)};if(s===\"0\"||s.length===1&&Number(s+\"0\")>n)return o(!0);if(Number(s)>n)return o(!1,this.alert());this.numberTimeout=setTimeout(()=>o(!0),this.delay)})}home(){return this.choices=AL(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=AL(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===0?this.alert():e>t&&i===0?this.scrollUp():(this.index=(i-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,i=this.index;return this.options.scroll===!1&&i===t-1?this.alert():e>t&&i===t-1?this.scrollDown():(this.index=(i+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=Dje(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=kje(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Rje(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&[\"disabled\",\"collapsed\",\"hidden\",\"completing\",\"readonly\"].some(i=>e[i]===!0)?!0:e&&e.role===\"heading\"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(t=>this.isEnabled(t));if(e.choices){let t=e.choices.filter(i=>!this.isDisabled(i));return e.enabled&&t.every(i=>this.isEnabled(i))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t=\"value\"){return[].concat(e||[]).reduce((i,n)=>(i[n]=this.find(n,t),i),{})}filter(e,t){let n=typeof e==\"function\"?e:(a,l)=>[a.name,l].includes(e),o=(this.options.multiple?this.state._choices:this.choices).filter(n);return t?o.map(a=>a[t]):o}find(e,t){if(Sne(e))return t?e[t]:e;let n=typeof e==\"function\"?e:(o,a)=>[o.name,a].includes(e),s=this.choices.find(n);if(s)return t?s[t]:s}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(o=>o.newChoice))return this.alert();let{reorder:t,sort:i}=this.options,n=this.multiple===!0,s=this.selected;return s===void 0?this.alert():(Array.isArray(s)&&t!==!1&&i!==!0&&(s=Sb.reorder(s)),this.value=n?s.map(o=>o.name):s.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(i=>i.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let t=this.initial;if(typeof t==\"string\"||typeof t==\"number\"){let i=this.find(t);i&&(this.initial=i.index,this.focus(i,!0))}}}get choices(){return vne(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:i}=this,n=e.limit||this._limit||t.limit||i.length;return Math.min(n,this.height)}set value(e){super.value=e}get value(){return typeof super.value!=\"string\"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function vne(r,e){if(e instanceof Promise)return e;if(typeof e==\"function\"){if(Sb.isAsyncFn(e))return e;e=e.call(r,r)}for(let t of e){if(Array.isArray(t.choices)){let i=t.choices.filter(n=>!r.isDisabled(n));t.enabled=i.every(n=>n.enabled===!0)}r.isDisabled(t)===!0&&delete t.enabled}return e}xne.exports=lL});var Cl=w((Ngt,Pne)=>{\"use strict\";var Fje=Mm(),cL=ji(),uL=class extends Fje{constructor(e){super(e),this.emptyError=this.options.emptyError||\"No items were selected\"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):\"\"}indicator(e,t){return this.multiple?super.indicator(e,t):\"\"}choiceMessage(e,t){let i=this.resolve(e.message,this.state,e,t);return e.role===\"heading\"&&!cL.hasColor(i)&&(i=this.styles.strong(i)),this.resolve(i,this.state,e,t)}choiceSeparator(){return\":\"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await this.indicator(e,t)+(e.pad||\"\"),o=await this.resolve(e.hint,this.state,e,t);o&&!cL.hasColor(o)&&(o=this.styles.muted(o));let a=this.indent(e),l=await this.choiceMessage(e,t),c=()=>[this.margin[3],a+n+s,l,this.margin[1],o].filter(Boolean).join(\" \");return e.role===\"heading\"?c():e.disabled?(cL.hasColor(l)||(l=this.styles.disabled(l)),c()):(i&&(l=this.styles.em(l)),c())}async renderChoices(){if(this.state.loading===\"choices\")return this.styles.warning(\"Loading choices\");if(this.state.submitted)return\"\";let e=this.visible.map(async(s,o)=>await this.renderChoice(s,o)),t=await Promise.all(e);t.length||t.push(this.styles.danger(\"No matching choices\"));let i=this.margin[0]+t.join(`\n`),n;return this.options.choicesHeader&&(n=await this.resolve(this.options.choicesHeader,this.state)),[n,i].filter(Boolean).join(`\n`)}format(){return!this.state.submitted||this.state.cancelled?\"\":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(\", \"):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,i=\"\",n=await this.header(),s=await this.prefix(),o=await this.separator(),a=await this.message();this.options.promptLine!==!1&&(i=[s,a,o,\"\"].join(\" \"),this.state.prompt=i);let l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();l&&(i+=l),c&&!i.includes(c)&&(i+=\" \"+c),e&&!l&&!u.trim()&&this.multiple&&this.emptyError!=null&&(i+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,i,u,g].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Pne.exports=uL});var kne=w((Tgt,Dne)=>{\"use strict\";var Nje=Cl(),Tje=(r,e)=>{let t=r.toLowerCase();return i=>{let s=i.toLowerCase().indexOf(t),o=e(i.slice(s,s+t.length));return s>=0?i.slice(0,s)+o+i.slice(s+t.length):i}},gL=class extends Nje{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:i}=this.state;return this.input=i.slice(0,t)+e+i.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return t[e]===void 0?this.alert():(this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if(typeof this.options.suggest==\"function\")return this.options.suggest.call(this,e,t);let i=e.toLowerCase();return t.filter(n=>n.message.toLowerCase().includes(i))}pointer(){return\"\"}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(\", \");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!==\"pending\")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=Tje(this.input,e),i=this.choices;this.choices=i.map(n=>({...n,message:t(n.message)})),await super.render(),this.choices=i}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Dne.exports=gL});var hL=w((Lgt,Rne)=>{\"use strict\";var fL=ji();Rne.exports=(r,e={})=>{r.cursorHide();let{input:t=\"\",initial:i=\"\",pos:n,showCursor:s=!0,color:o}=e,a=o||r.styles.placeholder,l=fL.inverse(r.styles.primary),c=C=>l(r.styles.black(C)),u=t,g=\" \",f=c(g);if(r.blink&&r.blink.off===!0&&(c=C=>C,f=\"\"),s&&n===0&&i===\"\"&&t===\"\")return c(g);if(s&&n===0&&(t===i||t===\"\"))return c(i[0])+a(i.slice(1));i=fL.isPrimitive(i)?`${i}`:\"\",t=fL.isPrimitive(t)?`${t}`:\"\";let h=i&&i.startsWith(t)&&i!==t,p=h?c(i[t.length]):f;if(n!==t.length&&s===!0&&(u=t.slice(0,n)+c(t[n])+t.slice(n+1),p=\"\"),s===!1&&(p=\"\"),h){let C=r.styles.unstyle(u+p);return u+p+a(i.slice(C.length))}return u+p}});var vb=w((Mgt,Fne)=>{\"use strict\";var Lje=go(),Mje=Cl(),Oje=hL(),pL=class extends Mje{constructor(e){super({...e,multiple:!0}),this.type=\"form\",this.initial=this.options.initial,this.align=[this.options.align,\"right\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(t=>t.reset&&t.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:i,input:n}=t;return t.value=t.input=n.slice(0,i)+e+n.slice(i),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:i}=e;return e.value=e.input=i.slice(0,t-1)+i.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:i}=e;if(i[t]===void 0)return this.alert();let n=`${i}`.slice(0,t)+`${i}`.slice(t+1);return e.value=e.input=n,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:i}=e;return t&&t.startsWith(i)&&i!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input=\"\",e.cursor=0,this.render()):this.alert()}separator(){return\"\"}format(e){return this.state.submitted?\"\":super.format(e)}pointer(){return\"\"}indicator(e){return e.input?\"\\u29BF\":\"\\u2299\"}async choiceSeparator(e,t){let i=await this.resolve(e.separator,this.state,e,t)||\":\";return i?\" \"+this.styles.disabled(i):\"\"}async renderChoice(e,t){await this.onChoice(e,t);let{state:i,styles:n}=this,{cursor:s,initial:o=\"\",name:a,hint:l,input:c=\"\"}=e,{muted:u,submitted:g,primary:f,danger:h}=n,p=l,C=this.index===t,y=e.validate||(()=>!0),B=await this.choiceSeparator(e,t),v=e.message;this.align===\"right\"&&(v=v.padStart(this.longest+1,\" \")),this.align===\"left\"&&(v=v.padEnd(this.longest+1,\" \"));let D=this.values[a]=c||o,T=c?\"success\":\"dark\";await y.call(e,D,this.state)!==!0&&(T=\"danger\");let H=n[T],j=H(await this.indicator(e,t))+(e.pad||\"\"),$=this.indent(e),V=()=>[$,j,v+B,c,p].filter(Boolean).join(\" \");if(i.submitted)return v=Lje.unstyle(v),c=g(c),p=\"\",V();if(e.format)c=await e.format.call(this,c,e,t);else{let W=this.styles.muted;c=Oje(this,{input:c,initial:o,pos:s,showCursor:C,color:W})}return this.isValue(c)||(c=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,D,e,t)),C&&(v=f(v)),e.error?c+=(c?\" \":\"\")+h(e.error.trim()):e.hint&&(c+=(c?\" \":\"\")+u(e.hint.trim())),V()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Fne.exports=pL});var dL=w((Ogt,Tne)=>{\"use strict\";var Kje=vb(),Uje=()=>{throw new Error(\"expected prompt to have a custom authenticate method\")},Nne=(r=Uje)=>{class e extends Kje{constructor(i){super(i)}async submit(){this.value=await r.call(this,this.values,this.state),super.base.submit.call(this)}static create(i){return Nne(i)}}return e};Tne.exports=Nne()});var One=w((Kgt,Mne)=>{\"use strict\";var Hje=dL();function Gje(r,e){return r.username===this.options.username&&r.password===this.options.password}var Lne=(r=Gje)=>{let e=[{name:\"username\",message:\"username\"},{name:\"password\",message:\"password\",format(i){return this.options.showPassword?i:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(i.length))}}];class t extends Hje.create(r){constructor(n){super({...n,choices:e})}static create(n){return Lne(n)}}return t};Mne.exports=Lne()});var xb=w((Ugt,Kne)=>{\"use strict\";var Yje=Yh(),{isPrimitive:jje,hasColor:qje}=ji(),CL=class extends Yje{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:i}=this;return i.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return jje(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status===\"pending\"){let e=await this.element(\"hint\");return qje(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=this.styles.muted(this.default),a=[i,s,o,n].filter(Boolean).join(\" \");this.state.prompt=a;let l=await this.header(),c=this.value=this.cast(e),u=await this.format(c),g=await this.error()||await this.hint(),f=await this.footer();g&&!a.includes(g)&&(u+=\" \"+g),a+=\" \"+u,this.clear(t),this.write([l,a,f].filter(Boolean).join(`\n`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Kne.exports=CL});var Hne=w((Hgt,Une)=>{\"use strict\";var Jje=xb(),mL=class extends Jje{constructor(e){super(e),this.default=this.options.default||(this.initial?\"(Y/n)\":\"(y/N)\")}};Une.exports=mL});var Yne=w((Ggt,Gne)=>{\"use strict\";var Wje=Cl(),zje=vb(),jh=zje.prototype,EL=class extends Wje{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,\"left\"].find(t=>t!=null),this.emptyError=\"\",this.values={}}dispatch(e,t){let i=this.focused,n=i.parent||{};return!i.editable&&!n.editable&&(e===\"a\"||e===\"i\")?super[e]():jh.dispatch.call(this,e,t)}append(e,t){return jh.append.call(this,e,t)}delete(e,t){return jh.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?jh.next.call(this):super.next()}prev(){return this.focused.editable?jh.prev.call(this):super.prev()}async indicator(e,t){let i=e.indicator||\"\",n=e.editable?i:super.indicator(e,t);return await this.resolve(n,this.state,e,t)||\"\"}indent(e){return e.role===\"heading\"?\"\":e.editable?\" \":\"  \"}async renderChoice(e,t){return e.indent=\"\",e.editable?jh.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return\"\"}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if(typeof t.validate!=\"function\"||t.role===\"heading\")continue;let i=t.parent?this.value[t.parent.name]:this.value;if(t.editable?i=t.value===t.name?t.initial||\"\":t.value:this.isDisabled(t)||(i=t.enabled===!0),e=await t.validate(i,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e==\"string\"?e:\"Invalid Input\"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;if(e.role===\"heading\"){this.value[e.name]={};continue}e.editable?t[e.name]=e.value===e.name?e.initial||\"\":e.value:this.isDisabled(e)||(t[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Gne.exports=EL});var au=w((Ygt,jne)=>{\"use strict\";var Vje=Yh(),Xje=hL(),{isPrimitive:Zje}=ji(),IL=class extends Vje{constructor(e){super(e),this.initial=Zje(this.initial)?String(this.initial):\"\",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let i=this.state.prevKeypress;return this.state.prevKeypress=t,this.options.multiline===!0&&t.name===\"return\"&&(!i||i.name!==\"return\")?this.append(`\n`,t):super.keypress(e,t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value=\"\",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:i}=this.state;this.input=`${i}`.slice(0,t)+e+`${i}`.slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=`${t}`.slice(0,e-1)+`${t}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(t[e]===void 0)return this.alert();this.input=`${t}`.slice(0,e)+`${t}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let t=this.input.slice(0,e),i=this.input.slice(e),n=t.split(\" \");this.state.clipboard.push(n.pop()),this.input=n.join(\" \"),this.cursor=this.input.length,this.input+=i,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):\"\";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):Xje(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),i=await this.separator(),n=await this.message(),s=[t,n,i].filter(Boolean).join(\" \");this.state.prompt=s;let o=await this.header(),a=await this.format(),l=await this.error()||await this.hint(),c=await this.footer();l&&!a.includes(l)&&(a+=\" \"+l),s+=\" \"+a,this.clear(e),this.write([o,s,c].filter(Boolean).join(`\n`)),this.restore()}};jne.exports=IL});var Jne=w((jgt,qne)=>{\"use strict\";var _je=r=>r.filter((e,t)=>r.lastIndexOf(e)===t),Pb=r=>_je(r).filter(Boolean);qne.exports=(r,e={},t=\"\")=>{let{past:i=[],present:n=\"\"}=e,s,o;switch(r){case\"prev\":case\"undo\":return s=i.slice(0,i.length-1),o=i[i.length-1]||\"\",{past:Pb([t,...s]),present:o};case\"next\":case\"redo\":return s=i.slice(1),o=i[0]||\"\",{past:Pb([...s,t]),present:o};case\"save\":return{past:Pb([...i,t]),present:\"\"};case\"remove\":return o=Pb(i.filter(a=>a!==t)),n=\"\",o.length&&(n=o.pop()),{past:o,present:n};default:throw new Error(`Invalid action: \"${r}\"`)}}});var wL=w((qgt,zne)=>{\"use strict\";var $je=au(),Wne=Jne(),yL=class extends $je{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let i=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get(\"values\")||{past:[],present:i},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Wne(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion(\"prev\")}altDown(){return this.completion(\"next\")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Wne(\"save\",this.data,this.input),this.store.set(\"values\",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};zne.exports=yL});var Xne=w((Jgt,Vne)=>{\"use strict\";var eqe=au(),BL=class extends eqe{format(){return\"\"}};Vne.exports=BL});var _ne=w((Wgt,Zne)=>{\"use strict\";var tqe=au(),bL=class extends tqe{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||\"\"}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:t=>t;return this.list.map(e).join(\", \")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return t!==!0?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};Zne.exports=bL});var ese=w((zgt,$ne)=>{\"use strict\";var rqe=Cl(),QL=class extends rqe{constructor(e){super({...e,multiple:!0})}};$ne.exports=QL});var vL=w((Vgt,tse)=>{\"use strict\";var iqe=au(),SL=class extends iqe{constructor(e={}){super({style:\"number\",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:\"\",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e===\".\"&&this.input.includes(\".\")?this.alert(\"invalid number\"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,i=this.toNumber(this.input);return i>this.max+t?this.alert():(this.input=`${i+t}`,this.render())}down(e){let t=e||this.minor,i=this.toNumber(this.input);return i<this.min-t?this.alert():(this.input=`${i-t}`,this.render())}shiftDown(){return this.down(this.major)}shiftUp(){return this.up(this.major)}format(e=this.input){return typeof this.options.format==\"function\"?this.options.format.call(this,e):this.styles.info(e)}toNumber(e=\"\"){return this.float?+e:Math.round(+e)}isValue(e){return/^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(e)}submit(){let e=[this.input,this.initial].find(t=>this.isValue(t));return this.value=this.toNumber(e||0),super.submit()}};tse.exports=SL});var ise=w((Xgt,rse)=>{rse.exports=vL()});var sse=w((Zgt,nse)=>{\"use strict\";var nqe=au(),xL=class extends nqe{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):\"\"}};nse.exports=xL});var Ase=w((_gt,ase)=>{\"use strict\";var sqe=go(),oqe=Mm(),ose=ji(),PL=class extends oqe{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||\"left\"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||`\n   `;let t=e.startNumber||1;typeof this.scale==\"number\"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((i,n)=>({name:n+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let i=0;i<this.scale.length;i++)t.scale.push({index:i})}this.widths[0]=Math.min(this.widths[0],e+3)}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}heading(e,t,i){return this.styles.strong(e)}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIndex>=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return\"\"}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.index)).join(\", \"):\"\"}pointer(){return\"\"}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?\"\":[\"\",...this.scale.map(i=>`   ${i.name} - ${i.message}`)].map(i=>this.styles.muted(i)).join(`\n`)}renderScaleHeading(e){let t=this.scale.map(l=>l.name);typeof this.options.renderScaleHeading==\"function\"&&(t=this.options.renderScaleHeading.call(this,e));let i=this.scaleLength-t.join(\"\").length,n=Math.round(i/(t.length-1)),o=t.map(l=>this.styles.strong(l)).join(\" \".repeat(n)),a=\" \".repeat(this.widths[0]);return this.margin[3]+a+this.margin[1]+o}scaleIndicator(e,t,i){if(typeof this.options.scaleIndicator==\"function\")return this.options.scaleIndicator.call(this,e,t,i);let n=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):n?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let i=e.scale.map(s=>this.scaleIndicator(e,s,t)),n=this.term===\"Hyper\"?\"\":\" \";return i.join(n+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=await this.pointer(e,t),s=await e.hint;s&&!ose.hasColor(s)&&(s=this.styles.muted(s));let o=p=>this.margin[3]+p.replace(/\\s+$/,\"\").padEnd(this.widths[0],\" \"),a=this.newline,l=this.indent(e),c=await this.resolve(e.message,this.state,e,t),u=await this.renderScale(e,t),g=this.margin[1]+this.margin[3];this.scaleLength=sqe.unstyle(u).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-g.length);let h=ose.wordWrap(c,{width:this.widths[0],newline:a}).split(`\n`).map(p=>o(p)+this.margin[1]);return i&&(u=this.styles.info(u),h=h.map(p=>this.styles.info(p))),h[0]+=u,this.linebreak&&h.push(\"\"),[l+n,h.join(`\n`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return\"\";this.tableize();let e=this.visible.map(async(n,s)=>await this.renderChoice(n,s)),t=await Promise.all(e),i=await this.renderScaleHeading();return this.margin[0]+[i,...t.map(n=>n.join(\" \"))].join(`\n`)}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=\"\";this.options.promptLine!==!1&&(o=[i,s,n,\"\"].join(\" \"),this.state.prompt=o);let a=await this.header(),l=await this.format(),c=await this.renderScaleKey(),u=await this.error()||await this.hint(),g=await this.renderChoices(),f=await this.footer(),h=this.emptyError;l&&(o+=l),u&&!o.includes(u)&&(o+=\" \"+u),e&&!l&&!g.trim()&&this.multiple&&h!=null&&(o+=this.styles.danger(h)),this.clear(t),this.write([a,o,c,g,f].filter(Boolean).join(`\n`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};ase.exports=PL});var use=w(($gt,cse)=>{\"use strict\";var lse=go(),aqe=(r=\"\")=>typeof r==\"string\"?r.replace(/^['\"]|['\"]$/g,\"\"):\"\",kL=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=aqe(e.initial||this.field.initial||\"\"),this.message=e.message||this.name,this.cursor=0,this.input=\"\",this.lines=[]}},Aqe=async(r={},e={},t=i=>i)=>{let i=new Set,n=r.fields||[],s=r.template,o=[],a=[],l=[],c=1;typeof s==\"function\"&&(s=await s());let u=-1,g=()=>s[++u],f=()=>s[u+1],h=p=>{p.line=c,o.push(p)};for(h({type:\"bos\",value:\"\"});u<s.length-1;){let p=g();if(/^[^\\S\\n ]$/.test(p)){h({type:\"text\",value:p});continue}if(p===`\n`){h({type:\"newline\",value:p}),c++;continue}if(p===\"\\\\\"){p+=g(),h({type:\"text\",value:p});continue}if((p===\"$\"||p===\"#\"||p===\"{\")&&f()===\"{\"){let y=g();p+=y;let B={type:\"template\",open:p,inner:\"\",close:\"\",value:p},v;for(;v=g();){if(v===\"}\"){f()===\"}\"&&(v+=g()),B.value+=v,B.close=v;break}v===\":\"?(B.initial=\"\",B.key=B.inner):B.initial!==void 0&&(B.initial+=v),B.value+=v,B.inner+=v}B.template=B.open+(B.initial||B.inner)+B.close,B.key=B.key||B.inner,e.hasOwnProperty(B.key)&&(B.initial=e[B.key]),B=t(B),h(B),l.push(B.key),i.add(B.key);let D=a.find(T=>T.name===B.key);B.field=n.find(T=>T.name===B.key),D||(D=new kL(B),a.push(D)),D.lines.push(B.line-1);continue}let C=o[o.length-1];C.type===\"text\"&&C.line===c?C.value+=p:h({type:\"text\",value:p})}return h({type:\"eos\",value:\"\"}),{input:s,tabstops:o,unique:i,keys:l,items:a}};cse.exports=async r=>{let e=r.options,t=new Set(e.required===!0?[]:e.required||[]),i={...e.values,...e.initial},{tabstops:n,items:s,keys:o}=await Aqe(e,i),a=DL(\"result\",r,e),l=DL(\"format\",r,e),c=DL(\"validate\",r,e,!0),u=r.isValue.bind(r);return async(g={},f=!1)=>{let h=0;g.required=t,g.items=s,g.keys=o,g.output=\"\";let p=async(v,D,T,H)=>{let j=await c(v,D,T,H);return j===!1?\"Invalid field \"+T.name:j};for(let v of n){let D=v.value,T=v.key;if(v.type!==\"template\"){D&&(g.output+=D);continue}if(v.type===\"template\"){let H=s.find(_=>_.name===T);e.required===!0&&g.required.add(H.name);let j=[H.input,g.values[H.value],H.value,D].find(u),V=(H.field||{}).message||v.inner;if(f){let _=await p(g.values[T],g,H,h);if(_&&typeof _==\"string\"||_===!1){g.invalid.set(T,_);continue}g.invalid.delete(T);let A=await a(g.values[T],g,H,h);g.output+=lse.unstyle(A);continue}H.placeholder=!1;let W=D;D=await l(D,g,H,h),j!==D?(g.values[T]=j,D=r.styles.typing(j),g.missing.delete(V)):(g.values[T]=void 0,j=`<${V}>`,D=r.styles.primary(j),H.placeholder=!0,g.required.has(T)&&g.missing.add(V)),g.missing.has(V)&&g.validating&&(D=r.styles.warning(j)),g.invalid.has(T)&&g.validating&&(D=r.styles.danger(j)),h===g.index&&(W!==D?D=r.styles.underline(D):D=r.styles.heading(lse.unstyle(D))),h++}D&&(g.output+=D)}let C=g.output.split(`\n`).map(v=>\" \"+v),y=s.length,B=0;for(let v of s)g.invalid.has(v.name)&&v.lines.forEach(D=>{C[D][0]===\" \"&&(C[D]=g.styles.danger(g.symbols.bullet)+C[D].slice(1))}),r.isValue(g.values[v.name])&&B++;return g.completed=(B/y*100).toFixed(0),g.output=C.join(`\n`),g.output}};function DL(r,e,t,i){return(n,s,o,a)=>typeof o.field[r]==\"function\"?o.field[r].call(e,n,s,o,a):[i,n].find(l=>e.isValue(l))}});var fse=w((eft,gse)=>{\"use strict\";var lqe=go(),cqe=use(),uqe=Yh(),RL=class extends uqe{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await cqe(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){if(!t.code&&!t.ctrl&&e!=null&&this.getItem()){this.append(e,t);return}this.alert()}append(e,t){let i=this.getItem(),n=i.input.slice(0,this.cursor),s=i.input.slice(this.cursor);this.input=i.input=`${n}${e}${s}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),i=e.input.slice(0,this.cursor-1);this.input=e.input=`${i}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(t=this.styles.danger),t(`${this.state.completed}% completed`)}async render(){let{index:e,keys:t=[],submitted:i,size:n}=this.state,s=[this.options.newline,`\n`].find(v=>v!=null),o=await this.prefix(),a=await this.separator(),l=await this.message(),c=[o,l,a].filter(Boolean).join(\" \");this.state.prompt=c;let u=await this.header(),g=await this.error()||\"\",f=await this.hint()||\"\",h=i?\"\":await this.interpolate(this.state),p=this.state.key=t[e]||\"\",C=await this.format(p),y=await this.footer();C&&(c+=\" \"+C),f&&!C&&this.state.completed===0&&(c+=\" \"+f),this.clear(n);let B=[u,c,h,y,g.trim()];this.write(B.filter(Boolean).join(s)),this.restore()}getItem(e){let{items:t,keys:i,index:n}=this.state,s=t.find(o=>o.name===i[n]);return s&&s.input!=null&&(this.input=s.input,this.cursor=s.cursor),s}async submit(){typeof this.interpolate!=\"function\"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:i,values:n}=this.state;if(e.size){let a=\"\";for(let[l,c]of e)a+=`Invalid ${l}: ${c}\n`;return this.state.error=a,super.submit()}if(t.size)return this.state.error=\"Required: \"+[...t.keys()].join(\", \"),super.submit();let o=lqe.unstyle(i).split(`\n`).map(a=>a.slice(1)).join(`\n`);return this.value={values:n,result:o},super.submit()}};gse.exports=RL});var pse=w((tft,hse)=>{\"use strict\";var gqe=\"(Use <shift>+<up/down> to sort)\",fqe=Cl(),FL=class extends fqe{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,gqe].find(this.isValue.bind(this))}indicator(){return\"\"}async renderChoice(e,t){let i=await super.renderChoice(e,t),n=this.symbols.identicalTo+\" \",s=this.index===t&&this.sorting?this.styles.muted(n):\"  \";return this.options.drag===!1&&(s=\"\"),this.options.numbered===!0?s+`${t+1} - `+i:s+i}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};hse.exports=FL});var Cse=w((rft,dse)=>{\"use strict\";var hqe=Mm(),NL=class extends hqe{constructor(e={}){if(super(e),this.emptyError=e.emptyError||\"No items were selected\",this.term=process.env.TERM_PROGRAM,!this.options.header){let t=[\"\",\"4 - Strongly Agree\",\"3 - Agree\",\"2 - Neutral\",\"1 - Disagree\",\"0 - Strongly Disagree\",\"\"];t=t.map(i=>this.styles.muted(i)),this.state.header=t.join(`\n   `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let i of t)i.scale=pqe(5,this.options),i.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],i=t.selected;return e.scale.forEach(n=>n.selected=!1),t.selected=!i,this.render()}indicator(){return\"\"}pointer(){return\"\"}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return\"   \"}async renderChoice(e,t){await this.onChoice(e,t);let i=this.index===t,n=this.term===\"Hyper\",s=n?9:8,o=n?\"\":\" \",a=this.symbols.line.repeat(s),l=\" \".repeat(s+(n?0:1)),c=D=>(D?this.styles.success(\"\\u25C9\"):\"\\u25EF\")+o,u=t+1+\".\",g=i?this.styles.heading:this.styles.noop,f=await this.resolve(e.message,this.state,e,t),h=this.indent(e),p=h+e.scale.map((D,T)=>c(T===e.scaleIdx)).join(a),C=D=>D===e.scaleIdx?g(D):D,y=h+e.scale.map((D,T)=>C(T)).join(l),B=()=>[u,f].filter(Boolean).join(\" \"),v=()=>[B(),p,y,\" \"].filter(Boolean).join(`\n`);return i&&(p=this.styles.cyan(p),y=this.styles.cyan(y)),v()}async renderChoices(){if(this.state.submitted)return\"\";let e=this.visible.map(async(i,n)=>await this.renderChoice(i,n)),t=await Promise.all(e);return t.length||t.push(this.styles.danger(\"No matching choices\")),t.join(`\n`)}format(){return this.state.submitted?this.choices.map(t=>this.styles.info(t.scaleIdx)).join(\", \"):\"\"}async render(){let{submitted:e,size:t}=this.state,i=await this.prefix(),n=await this.separator(),s=await this.message(),o=[i,s,n].filter(Boolean).join(\" \");this.state.prompt=o;let a=await this.header(),l=await this.format(),c=await this.error()||await this.hint(),u=await this.renderChoices(),g=await this.footer();(l||!c)&&(o+=\" \"+l),c&&!o.includes(c)&&(o+=\" \"+c),e&&!l&&!u&&this.multiple&&this.type!==\"form\"&&(o+=this.styles.danger(this.emptyError)),this.clear(t),this.write([o,a,u,g].filter(Boolean).join(`\n`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function pqe(r,e={}){if(Array.isArray(e.scale))return e.scale.map(i=>({...i}));let t=[];for(let i=1;i<r+1;i++)t.push({i,selected:!1});return t}dse.exports=NL});var Ese=w((ift,mse)=>{mse.exports=wL()});var yse=w((nft,Ise)=>{\"use strict\";var dqe=xb(),TL=class extends dqe{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||\"no\",this.enabled=this.options.enabled||\"yes\",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e=\"\",t){switch(e.toLowerCase()){case\" \":return this.toggle();case\"1\":case\"y\":case\"t\":return this.enable();case\"0\":case\"n\":case\"f\":return this.disable();default:return this.alert()}}format(){let e=i=>this.styles.primary.underline(i);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(\" / \"))}async render(){let{size:e}=this.state,t=await this.header(),i=await this.prefix(),n=await this.separator(),s=await this.message(),o=await this.format(),a=await this.error()||await this.hint(),l=await this.footer(),c=[i,s,n,o].join(\" \");this.state.prompt=c,a&&!c.includes(a)&&(c+=\" \"+a),this.clear(e),this.write([t,c,l].filter(Boolean).join(`\n`)),this.write(this.margin[2]),this.restore()}};Ise.exports=TL});var Bse=w((sft,wse)=>{\"use strict\";var Cqe=Cl(),LL=class extends Cqe{constructor(e){if(super(e),typeof this.options.correctChoice!=\"number\"||this.options.correctChoice<0)throw new Error(\"Please specify the index of the correct answer from the list of choices\")}async toChoices(e,t){let i=await super.toChoices(e,t);if(i.length<2)throw new Error(\"Please give at least two choices to the user\");if(this.options.correctChoice>i.length)throw new Error(\"Please specify the index of the correct answer from the list of choices\");return i}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};wse.exports=LL});var Qse=w(ML=>{\"use strict\";var bse=ji(),ui=(r,e)=>{bse.defineExport(ML,r,e),bse.defineExport(ML,r.toLowerCase(),e)};ui(\"AutoComplete\",()=>kne());ui(\"BasicAuth\",()=>One());ui(\"Confirm\",()=>Hne());ui(\"Editable\",()=>Yne());ui(\"Form\",()=>vb());ui(\"Input\",()=>wL());ui(\"Invisible\",()=>Xne());ui(\"List\",()=>_ne());ui(\"MultiSelect\",()=>ese());ui(\"Numeral\",()=>ise());ui(\"Password\",()=>sse());ui(\"Scale\",()=>Ase());ui(\"Select\",()=>Cl());ui(\"Snippet\",()=>fse());ui(\"Sort\",()=>pse());ui(\"Survey\",()=>Cse());ui(\"Text\",()=>Ese());ui(\"Toggle\",()=>yse());ui(\"Quiz\",()=>Bse())});var vse=w((aft,Sse)=>{Sse.exports={ArrayPrompt:Mm(),AuthPrompt:dL(),BooleanPrompt:xb(),NumberPrompt:vL(),StringPrompt:au()}});var Km=w((Aft,Pse)=>{\"use strict\";var xse=J(\"assert\"),KL=J(\"events\"),ml=ji(),ho=class extends KL{constructor(e,t){super(),this.options=ml.merge({},e),this.answers={...t}}register(e,t){if(ml.isObject(e)){for(let n of Object.keys(e))this.register(n,e[n]);return this}xse.equal(typeof t,\"function\",\"expected a function\");let i=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[i]=t:this.prompts[i]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{typeof t==\"function\"&&(t=await t.call(this)),await this.ask(ml.merge({},this.options,t))}catch(i){return Promise.reject(i)}return this.answers}async ask(e){typeof e==\"function\"&&(e=await e.call(this));let t=ml.merge({},this.options,e),{type:i,name:n}=e,{set:s,get:o}=ml;if(typeof i==\"function\"&&(i=await i.call(this,e,this.answers)),!i)return this.answers[n];xse(this.prompts[i],`Prompt \"${i}\" is not registered`);let a=new this.prompts[i](t),l=o(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on(\"submit\",u=>{this.emit(\"answer\",n,u,a),s(this.answers,n,u)});let c=a.emit.bind(a);return a.emit=(...u)=>(this.emit.call(this,...u),c(...u)),this.emit(\"prompt\",a,this),t.autofill&&l!=null?(a.value=a.input=l,t.autofill===\"show\"&&await a.submit()):l=a.value=await a.run(),l}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||Yh()}static get prompts(){return Qse()}static get types(){return vse()}static get prompt(){let e=(t,...i)=>{let n=new this(...i),s=n.emit.bind(n);return n.emit=(...o)=>(e.emit(...o),s(...o)),n.prompt(t)};return ml.mixinEmitter(e,new KL),e}};ml.mixinEmitter(ho,new KL);var OL=ho.prompts;for(let r of Object.keys(OL)){let e=r.toLowerCase(),t=i=>new OL[r](i).run();ho.prompt[e]=t,ho[e]=t,ho[r]||Reflect.defineProperty(ho,r,{get:()=>OL[r]})}var Om=r=>{ml.defineExport(ho,r,()=>ho.types[r])};Om(\"ArrayPrompt\");Om(\"AuthPrompt\");Om(\"BooleanPrompt\");Om(\"NumberPrompt\");Om(\"StringPrompt\");Pse.exports=ho});var Kse=w((Vft,Ose)=>{function wqe(r,e){for(var t=-1,i=r==null?0:r.length;++t<i&&e(r[t],t,r)!==!1;);return r}Ose.exports=wqe});var Jh=w((Xft,Use)=>{var Bqe=Y0(),bqe=bh();function Qqe(r,e,t,i){var n=!t;t||(t={});for(var s=-1,o=e.length;++s<o;){var a=e[s],l=i?i(t[a],r[a],a,t,r):void 0;l===void 0&&(l=r[a]),n?bqe(t,a,l):Bqe(t,a,l)}return t}Use.exports=Qqe});var Gse=w((Zft,Hse)=>{var Sqe=Jh(),vqe=Rh();function xqe(r,e){return r&&Sqe(e,vqe(e),r)}Hse.exports=xqe});var jse=w((_ft,Yse)=>{function Pqe(r){var e=[];if(r!=null)for(var t in Object(r))e.push(t);return e}Yse.exports=Pqe});var Jse=w(($ft,qse)=>{var Dqe=vn(),kqe=ab(),Rqe=jse(),Fqe=Object.prototype,Nqe=Fqe.hasOwnProperty;function Tqe(r){if(!Dqe(r))return Rqe(r);var e=kqe(r),t=[];for(var i in r)i==\"constructor\"&&(e||!Nqe.call(r,i))||t.push(i);return t}qse.exports=Tqe});var Wh=w((eht,Wse)=>{var Lqe=lT(),Mqe=Jse(),Oqe=gm();function Kqe(r){return Oqe(r)?Lqe(r,!0):Mqe(r)}Wse.exports=Kqe});var Vse=w((tht,zse)=>{var Uqe=Jh(),Hqe=Wh();function Gqe(r,e){return r&&Uqe(e,Hqe(e),r)}zse.exports=Gqe});var qL=w((Ym,zh)=>{var Yqe=ys(),$se=typeof Ym==\"object\"&&Ym&&!Ym.nodeType&&Ym,Xse=$se&&typeof zh==\"object\"&&zh&&!zh.nodeType&&zh,jqe=Xse&&Xse.exports===$se,Zse=jqe?Yqe.Buffer:void 0,_se=Zse?Zse.allocUnsafe:void 0;function qqe(r,e){if(e)return r.slice();var t=r.length,i=_se?_se(t):new r.constructor(t);return r.copy(i),i}zh.exports=qqe});var JL=w((rht,eoe)=>{function Jqe(r,e){var t=-1,i=r.length;for(e||(e=Array(i));++t<i;)e[t]=r[t];return e}eoe.exports=Jqe});var roe=w((iht,toe)=>{var Wqe=Jh(),zqe=lb();function Vqe(r,e){return Wqe(r,zqe(r),e)}toe.exports=Vqe});var kb=w((nht,ioe)=>{var Xqe=cT(),Zqe=Xqe(Object.getPrototypeOf,Object);ioe.exports=Zqe});var WL=w((sht,noe)=>{var _qe=q0(),$qe=kb(),eJe=lb(),tJe=dT(),rJe=Object.getOwnPropertySymbols,iJe=rJe?function(r){for(var e=[];r;)_qe(e,eJe(r)),r=$qe(r);return e}:tJe;noe.exports=iJe});var ooe=w((oht,soe)=>{var nJe=Jh(),sJe=WL();function oJe(r,e){return nJe(r,sJe(r),e)}soe.exports=oJe});var Aoe=w((aht,aoe)=>{var aJe=pT(),AJe=WL(),lJe=Wh();function cJe(r){return aJe(r,lJe,AJe)}aoe.exports=cJe});var coe=w((Aht,loe)=>{var uJe=Object.prototype,gJe=uJe.hasOwnProperty;function fJe(r){var e=r.length,t=new r.constructor(e);return e&&typeof r[0]==\"string\"&&gJe.call(r,\"index\")&&(t.index=r.index,t.input=r.input),t}loe.exports=fJe});var Rb=w((lht,goe)=>{var uoe=fT();function hJe(r){var e=new r.constructor(r.byteLength);return new uoe(e).set(new uoe(r)),e}goe.exports=hJe});var hoe=w((cht,foe)=>{var pJe=Rb();function dJe(r,e){var t=e?pJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.byteLength)}foe.exports=dJe});var doe=w((uht,poe)=>{var CJe=/\\w*$/;function mJe(r){var e=new r.constructor(r.source,CJe.exec(r));return e.lastIndex=r.lastIndex,e}poe.exports=mJe});var yoe=w((ght,Ioe)=>{var Coe=Rc(),moe=Coe?Coe.prototype:void 0,Eoe=moe?moe.valueOf:void 0;function EJe(r){return Eoe?Object(Eoe.call(r)):{}}Ioe.exports=EJe});var zL=w((fht,woe)=>{var IJe=Rb();function yJe(r,e){var t=e?IJe(r.buffer):r.buffer;return new r.constructor(t,r.byteOffset,r.length)}woe.exports=yJe});var boe=w((hht,Boe)=>{var wJe=Rb(),BJe=hoe(),bJe=doe(),QJe=yoe(),SJe=zL(),vJe=\"[object Boolean]\",xJe=\"[object Date]\",PJe=\"[object Map]\",DJe=\"[object Number]\",kJe=\"[object RegExp]\",RJe=\"[object Set]\",FJe=\"[object String]\",NJe=\"[object Symbol]\",TJe=\"[object ArrayBuffer]\",LJe=\"[object DataView]\",MJe=\"[object Float32Array]\",OJe=\"[object Float64Array]\",KJe=\"[object Int8Array]\",UJe=\"[object Int16Array]\",HJe=\"[object Int32Array]\",GJe=\"[object Uint8Array]\",YJe=\"[object Uint8ClampedArray]\",jJe=\"[object Uint16Array]\",qJe=\"[object Uint32Array]\";function JJe(r,e,t){var i=r.constructor;switch(e){case TJe:return wJe(r);case vJe:case xJe:return new i(+r);case LJe:return BJe(r,t);case MJe:case OJe:case KJe:case UJe:case HJe:case GJe:case YJe:case jJe:case qJe:return SJe(r,t);case PJe:return new i;case DJe:case FJe:return new i(r);case kJe:return bJe(r);case RJe:return new i;case NJe:return QJe(r)}}Boe.exports=JJe});var voe=w((pht,Soe)=>{var WJe=vn(),Qoe=Object.create,zJe=function(){function r(){}return function(e){if(!WJe(e))return{};if(Qoe)return Qoe(e);r.prototype=e;var t=new r;return r.prototype=void 0,t}}();Soe.exports=zJe});var VL=w((dht,xoe)=>{var VJe=voe(),XJe=kb(),ZJe=ab();function _Je(r){return typeof r.constructor==\"function\"&&!ZJe(r)?VJe(XJe(r)):{}}xoe.exports=_Je});var Doe=w((Cht,Poe)=>{var $Je=hm(),eWe=Wo(),tWe=\"[object Map]\";function rWe(r){return eWe(r)&&$Je(r)==tWe}Poe.exports=rWe});var Noe=w((mht,Foe)=>{var iWe=Doe(),nWe=nb(),koe=sb(),Roe=koe&&koe.isMap,sWe=Roe?nWe(Roe):iWe;Foe.exports=sWe});var Loe=w((Eht,Toe)=>{var oWe=hm(),aWe=Wo(),AWe=\"[object Set]\";function lWe(r){return aWe(r)&&oWe(r)==AWe}Toe.exports=lWe});var Uoe=w((Iht,Koe)=>{var cWe=Loe(),uWe=nb(),Moe=sb(),Ooe=Moe&&Moe.isSet,gWe=Ooe?uWe(Ooe):cWe;Koe.exports=gWe});var qoe=w((yht,joe)=>{var fWe=fm(),hWe=Kse(),pWe=Y0(),dWe=Gse(),CWe=Vse(),mWe=qL(),EWe=JL(),IWe=roe(),yWe=ooe(),wWe=CT(),BWe=Aoe(),bWe=hm(),QWe=coe(),SWe=boe(),vWe=VL(),xWe=vs(),PWe=lm(),DWe=Noe(),kWe=vn(),RWe=Uoe(),FWe=Rh(),NWe=Wh(),TWe=1,LWe=2,MWe=4,Hoe=\"[object Arguments]\",OWe=\"[object Array]\",KWe=\"[object Boolean]\",UWe=\"[object Date]\",HWe=\"[object Error]\",Goe=\"[object Function]\",GWe=\"[object GeneratorFunction]\",YWe=\"[object Map]\",jWe=\"[object Number]\",Yoe=\"[object Object]\",qWe=\"[object RegExp]\",JWe=\"[object Set]\",WWe=\"[object String]\",zWe=\"[object Symbol]\",VWe=\"[object WeakMap]\",XWe=\"[object ArrayBuffer]\",ZWe=\"[object DataView]\",_We=\"[object Float32Array]\",$We=\"[object Float64Array]\",e3e=\"[object Int8Array]\",t3e=\"[object Int16Array]\",r3e=\"[object Int32Array]\",i3e=\"[object Uint8Array]\",n3e=\"[object Uint8ClampedArray]\",s3e=\"[object Uint16Array]\",o3e=\"[object Uint32Array]\",ur={};ur[Hoe]=ur[OWe]=ur[XWe]=ur[ZWe]=ur[KWe]=ur[UWe]=ur[_We]=ur[$We]=ur[e3e]=ur[t3e]=ur[r3e]=ur[YWe]=ur[jWe]=ur[Yoe]=ur[qWe]=ur[JWe]=ur[WWe]=ur[zWe]=ur[i3e]=ur[n3e]=ur[s3e]=ur[o3e]=!0;ur[HWe]=ur[Goe]=ur[VWe]=!1;function Fb(r,e,t,i,n,s){var o,a=e&TWe,l=e&LWe,c=e&MWe;if(t&&(o=n?t(r,i,n,s):t(r)),o!==void 0)return o;if(!kWe(r))return r;var u=xWe(r);if(u){if(o=QWe(r),!a)return EWe(r,o)}else{var g=bWe(r),f=g==Goe||g==GWe;if(PWe(r))return mWe(r,a);if(g==Yoe||g==Hoe||f&&!n){if(o=l||f?{}:vWe(r),!a)return l?yWe(r,CWe(o,r)):IWe(r,dWe(o,r))}else{if(!ur[g])return n?r:{};o=SWe(r,g,a)}}s||(s=new fWe);var h=s.get(r);if(h)return h;s.set(r,o),RWe(r)?r.forEach(function(y){o.add(Fb(y,e,t,y,r,s))}):DWe(r)&&r.forEach(function(y,B){o.set(B,Fb(y,e,t,B,r,s))});var p=c?l?BWe:wWe:l?NWe:FWe,C=u?void 0:p(r);return hWe(C||r,function(y,B){C&&(B=y,y=r[B]),pWe(o,B,Fb(y,e,t,B,r,s))}),o}joe.exports=Fb});var XL=w((wht,Joe)=>{var a3e=qoe(),A3e=1,l3e=4;function c3e(r){return a3e(r,A3e|l3e)}Joe.exports=c3e});var zoe=w((Bht,Woe)=>{var u3e=HN();function g3e(r,e,t){return r==null?r:u3e(r,e,t)}Woe.exports=g3e});var $oe=w((Pht,_oe)=>{function f3e(r){var e=r==null?0:r.length;return e?r[e-1]:void 0}_oe.exports=f3e});var tae=w((Dht,eae)=>{var h3e=rm(),p3e=HR();function d3e(r,e){return e.length<2?r:h3e(r,p3e(e,0,-1))}eae.exports=d3e});var iae=w((kht,rae)=>{var C3e=Bh(),m3e=$oe(),E3e=tae(),I3e=Zc();function y3e(r,e){return e=C3e(e,r),r=E3e(r,e),r==null||delete r[I3e(m3e(e))]}rae.exports=y3e});var sae=w((Rht,nae)=>{var w3e=iae();function B3e(r,e){return r==null?!0:w3e(r,e)}nae.exports=B3e});var cae=w((opt,S3e)=>{S3e.exports={name:\"@yarnpkg/cli\",version:\"3.6.3\",license:\"BSD-2-Clause\",main:\"./sources/index.ts\",dependencies:{\"@yarnpkg/core\":\"workspace:^\",\"@yarnpkg/fslib\":\"workspace:^\",\"@yarnpkg/libzip\":\"workspace:^\",\"@yarnpkg/parsers\":\"workspace:^\",\"@yarnpkg/plugin-compat\":\"workspace:^\",\"@yarnpkg/plugin-dlx\":\"workspace:^\",\"@yarnpkg/plugin-essentials\":\"workspace:^\",\"@yarnpkg/plugin-file\":\"workspace:^\",\"@yarnpkg/plugin-git\":\"workspace:^\",\"@yarnpkg/plugin-github\":\"workspace:^\",\"@yarnpkg/plugin-http\":\"workspace:^\",\"@yarnpkg/plugin-init\":\"workspace:^\",\"@yarnpkg/plugin-link\":\"workspace:^\",\"@yarnpkg/plugin-nm\":\"workspace:^\",\"@yarnpkg/plugin-npm\":\"workspace:^\",\"@yarnpkg/plugin-npm-cli\":\"workspace:^\",\"@yarnpkg/plugin-pack\":\"workspace:^\",\"@yarnpkg/plugin-patch\":\"workspace:^\",\"@yarnpkg/plugin-pnp\":\"workspace:^\",\"@yarnpkg/plugin-pnpm\":\"workspace:^\",\"@yarnpkg/shell\":\"workspace:^\",chalk:\"^3.0.0\",\"ci-info\":\"^3.2.0\",clipanion:\"3.2.0-rc.4\",semver:\"^7.1.2\",tslib:\"^1.13.0\",typanion:\"^3.3.0\",yup:\"^0.32.9\"},devDependencies:{\"@types/semver\":\"^7.1.0\",\"@types/yup\":\"^0\",\"@yarnpkg/builder\":\"workspace:^\",\"@yarnpkg/monorepo\":\"workspace:^\",\"@yarnpkg/pnpify\":\"workspace:^\",micromatch:\"^4.0.2\"},peerDependencies:{\"@yarnpkg/core\":\"workspace:^\"},scripts:{postpack:\"rm -rf lib\",prepack:'run build:compile \"$(pwd)\"',\"build:cli+hook\":\"run build:pnp:hook && builder build bundle\",\"build:cli\":\"builder build bundle\",\"run:cli\":\"builder run\",\"update-local\":\"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/\"},publishConfig:{main:\"./lib/index.js\",types:\"./lib/index.d.ts\",bin:null},files:[\"/lib/**/*\",\"!/lib/pluginConfiguration.*\",\"!/lib/cli.*\"],\"@yarnpkg/builder\":{bundles:{standard:[\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"]}},repository:{type:\"git\",url:\"ssh://git@github.com/yarnpkg/berry.git\",directory:\"packages/yarnpkg-cli\"},engines:{node:\">=12 <14 || 14.2 - 14.9 || >14.10.0\"}}});var oM=w((kmt,bae)=>{\"use strict\";bae.exports=function(e,t){t===!0&&(t=0);var i=\"\";if(typeof e==\"string\")try{i=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(i=e.protocol);var n=i.split(/\\:|\\+/).filter(Boolean);return typeof t==\"number\"?n[t]:n}});var Sae=w((Rmt,Qae)=>{\"use strict\";var q3e=oM();function J3e(r){var e={protocols:[],protocol:null,port:null,resource:\"\",host:\"\",user:\"\",password:\"\",pathname:\"\",hash:\"\",search:\"\",href:r,query:{},parse_failed:!1};try{var t=new URL(r);e.protocols=q3e(t),e.protocol=e.protocols[0],e.port=t.port,e.resource=t.hostname,e.host=t.host,e.user=t.username||\"\",e.password=t.password||\"\",e.pathname=t.pathname,e.hash=t.hash.slice(1),e.search=t.search.slice(1),e.href=t.href,e.query=Object.fromEntries(t.searchParams)}catch{e.protocols=[\"file\"],e.protocol=e.protocols[0],e.port=\"\",e.resource=\"\",e.user=\"\",e.pathname=\"\",e.hash=\"\",e.search=\"\",e.href=r,e.query={},e.parse_failed=!0}return e}Qae.exports=J3e});var Pae=w((Fmt,xae)=>{\"use strict\";var W3e=Sae();function z3e(r){return r&&typeof r==\"object\"&&\"default\"in r?r:{default:r}}var V3e=z3e(W3e),X3e=\"text/plain\",Z3e=\"us-ascii\",vae=(r,e)=>e.some(t=>t instanceof RegExp?t.test(r):t===r),_3e=(r,{stripHash:e})=>{let t=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(r);if(!t)throw new Error(`Invalid URL: ${r}`);let{type:i,data:n,hash:s}=t.groups,o=i.split(\";\");s=e?\"\":s;let a=!1;o[o.length-1]===\"base64\"&&(o.pop(),a=!0);let l=(o.shift()||\"\").toLowerCase(),u=[...o.map(g=>{let[f,h=\"\"]=g.split(\"=\").map(p=>p.trim());return f===\"charset\"&&(h=h.toLowerCase(),h===Z3e)?\"\":`${f}${h?`=${h}`:\"\"}`}).filter(Boolean)];return a&&u.push(\"base64\"),(u.length>0||l&&l!==X3e)&&u.unshift(l),`data:${u.join(\";\")},${a?n.trim():n}${s?`#${s}`:\"\"}`};function $3e(r,e){if(e={defaultProtocol:\"http:\",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},r=r.trim(),/^data:/i.test(r))return _3e(r,e);if(/^view-source:/i.test(r))throw new Error(\"`view-source:` is not supported as it is a non-standard protocol\");let t=r.startsWith(\"//\");!t&&/^\\.*\\//.test(r)||(r=r.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//,e.defaultProtocol));let n=new URL(r);if(e.forceHttp&&e.forceHttps)throw new Error(\"The `forceHttp` and `forceHttps` options cannot be used together\");if(e.forceHttp&&n.protocol===\"https:\"&&(n.protocol=\"http:\"),e.forceHttps&&n.protocol===\"http:\"&&(n.protocol=\"https:\"),e.stripAuthentication&&(n.username=\"\",n.password=\"\"),e.stripHash?n.hash=\"\":e.stripTextFragment&&(n.hash=n.hash.replace(/#?:~:text.*?$/i,\"\")),n.pathname){let o=/\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g,a=0,l=\"\";for(;;){let u=o.exec(n.pathname);if(!u)break;let g=u[0],f=u.index,h=n.pathname.slice(a,f);l+=h.replace(/\\/{2,}/g,\"/\"),l+=g,a=f+g.length}let c=n.pathname.slice(a,n.pathname.length);l+=c.replace(/\\/{2,}/g,\"/\"),n.pathname=l}if(n.pathname)try{n.pathname=decodeURI(n.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let o=n.pathname.split(\"/\"),a=o[o.length-1];vae(a,e.removeDirectoryIndex)&&(o=o.slice(0,-1),n.pathname=o.slice(1).join(\"/\")+\"/\")}if(n.hostname&&(n.hostname=n.hostname.replace(/\\.$/,\"\"),e.stripWWW&&/^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(n.hostname)&&(n.hostname=n.hostname.replace(/^www\\./,\"\"))),Array.isArray(e.removeQueryParameters))for(let o of[...n.searchParams.keys()])vae(o,e.removeQueryParameters)&&n.searchParams.delete(o);if(e.removeQueryParameters===!0&&(n.search=\"\"),e.sortQueryParameters){n.searchParams.sort();try{n.search=decodeURIComponent(n.search)}catch{}}e.removeTrailingSlash&&(n.pathname=n.pathname.replace(/\\/$/,\"\"));let s=r;return r=n.toString(),!e.removeSingleSlash&&n.pathname===\"/\"&&!s.endsWith(\"/\")&&n.hash===\"\"&&(r=r.replace(/\\/$/,\"\")),(e.removeTrailingSlash||n.pathname===\"/\")&&n.hash===\"\"&&e.removeSingleSlash&&(r=r.replace(/\\/$/,\"\")),t&&!e.normalizeProtocol&&(r=r.replace(/^http:\\/\\//,\"//\")),e.stripProtocol&&(r=r.replace(/^(?:https?:)?\\/\\//,\"\")),r}var aM=(r,e=!1)=>{let t=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/,i=s=>{let o=new Error(s);throw o.subject_url=r,o};(typeof r!=\"string\"||!r.trim())&&i(\"Invalid url.\"),r.length>aM.MAX_INPUT_LENGTH&&i(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\"),e&&(typeof e!=\"object\"&&(e={stripHash:!1}),r=$3e(r,e));let n=V3e.default(r);if(n.parse_failed){let s=n.href.match(t);s?(n.protocols=[\"ssh\"],n.protocol=\"ssh\",n.resource=s[2],n.host=s[2],n.user=s[1],n.pathname=`/${s[3]}`,n.parse_failed=!1):i(\"URL parsing failed.\")}return n};aM.MAX_INPUT_LENGTH=2048;xae.exports=aM});var Rae=w((Nmt,kae)=>{\"use strict\";var e4e=oM();function Dae(r){if(Array.isArray(r))return r.indexOf(\"ssh\")!==-1||r.indexOf(\"rsync\")!==-1;if(typeof r!=\"string\")return!1;var e=e4e(r);if(r=r.substring(r.indexOf(\"://\")+3),Dae(e))return!0;var t=new RegExp(\".([a-zA-Z\\\\d]+):(\\\\d+)/\");return!r.match(t)&&r.indexOf(\"@\")<r.indexOf(\":\")}kae.exports=Dae});var Tae=w((Tmt,Nae)=>{\"use strict\";var t4e=Pae(),Fae=Rae();function r4e(r){var e=t4e(r);return e.token=\"\",e.password===\"x-oauth-basic\"?e.token=e.user:e.user===\"x-token-auth\"&&(e.token=e.password),Fae(e.protocols)||e.protocols.length===0&&Fae(r)?e.protocol=\"ssh\":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol=\"file\",e.protocols=[\"file\"]),e.href=e.href.replace(/\\/$/,\"\"),e}Nae.exports=r4e});var Mae=w((Lmt,Lae)=>{\"use strict\";var i4e=Tae();function AM(r){if(typeof r!=\"string\")throw new Error(\"The url must be a string.\");var e=/^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;e.test(r)&&(r=\"https://github.com/\"+r);var t=i4e(r),i=t.resource.split(\".\"),n=null;switch(t.toString=function(y){return AM.stringify(this,y)},t.source=i.length>2?i.slice(1-i.length).join(\".\"):t.source=t.resource,t.git_suffix=/\\.git$/.test(t.pathname),t.name=decodeURIComponent((t.pathname||t.href).replace(/(^\\/)|(\\/$)/g,\"\").replace(/\\.git$/,\"\")),t.owner=decodeURIComponent(t.user),t.source){case\"git.cloudforge.com\":t.owner=t.user,t.organization=i[0],t.source=\"cloudforge.com\";break;case\"visualstudio.com\":if(t.resource===\"vs-ssh.visualstudio.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3],t.full_name=n[2]+\"/\"+n[3]);break}else{n=t.name.split(\"/\"),n.length===2?(t.owner=n[1],t.name=n[1],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name);break}case\"dev.azure.com\":case\"azure.com\":if(t.resource===\"ssh.dev.azure.com\"){n=t.name.split(\"/\"),n.length===4&&(t.organization=n[1],t.owner=n[2],t.name=n[3]);break}else{n=t.name.split(\"/\"),n.length===5?(t.organization=n[0],t.owner=n[1],t.name=n[4],t.full_name=\"_git/\"+t.name):n.length===3?(t.name=n[2],n[0]===\"DefaultCollection\"?(t.owner=n[2],t.organization=n[0],t.full_name=t.organization+\"/_git/\"+t.name):(t.owner=n[0],t.full_name=t.owner+\"/_git/\"+t.name)):n.length===4&&(t.organization=n[0],t.owner=n[1],t.name=n[3],t.full_name=t.organization+\"/\"+t.owner+\"/_git/\"+t.name),t.query&&t.query.path&&(t.filepath=t.query.path.replace(/^\\/+/g,\"\")),t.query&&t.query.version&&(t.ref=t.query.version.replace(/^GB/,\"\"));break}default:n=t.name.split(\"/\");var s=n.length-1;if(n.length>=2){var o=n.indexOf(\"-\",2),a=n.indexOf(\"blob\",2),l=n.indexOf(\"tree\",2),c=n.indexOf(\"commit\",2),u=n.indexOf(\"src\",2),g=n.indexOf(\"raw\",2),f=n.indexOf(\"edit\",2);s=o>0?o-1:a>0?a-1:l>0?l-1:c>0?c-1:u>0?u-1:g>0?g-1:f>0?f-1:s,t.owner=n.slice(0,s).join(\"/\"),t.name=n[s],c&&(t.commit=n[s+2])}t.ref=\"\",t.filepathtype=\"\",t.filepath=\"\";var h=n.length>s&&n[s+1]===\"-\"?s+1:s;n.length>h+2&&[\"raw\",\"src\",\"blob\",\"tree\",\"edit\"].indexOf(n[h+1])>=0&&(t.filepathtype=n[h+1],t.ref=n[h+2],n.length>h+3&&(t.filepath=n.slice(h+3).join(\"/\"))),t.organization=t.owner;break}t.full_name||(t.full_name=t.owner,t.name&&(t.full_name&&(t.full_name+=\"/\"),t.full_name+=t.name)),t.owner.startsWith(\"scm/\")&&(t.source=\"bitbucket-server\",t.owner=t.owner.replace(\"scm/\",\"\"),t.organization=t.owner,t.full_name=t.owner+\"/\"+t.name);var p=/(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/,C=p.exec(t.pathname);return C!=null&&(t.source=\"bitbucket-server\",C[1]===\"users\"?t.owner=\"~\"+C[2]:t.owner=C[2],t.organization=t.owner,t.name=C[3],n=C[4].split(\"/\"),n.length>1&&([\"raw\",\"browse\"].indexOf(n[1])>=0?(t.filepathtype=n[1],n.length>2&&(t.filepath=n.slice(2).join(\"/\"))):n[1]===\"commits\"&&n.length>2&&(t.commit=n[2])),t.full_name=t.owner+\"/\"+t.name,t.query.at?t.ref=t.query.at:t.ref=\"\"),t}AM.stringify=function(r,e){e=e||(r.protocols&&r.protocols.length?r.protocols.join(\"+\"):r.protocol);var t=r.port?\":\"+r.port:\"\",i=r.user||\"git\",n=r.git_suffix?\".git\":\"\";switch(e){case\"ssh\":return t?\"ssh://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n:i+\"@\"+r.resource+\":\"+r.full_name+n;case\"git+ssh\":case\"ssh+git\":case\"ftp\":case\"ftps\":return e+\"://\"+i+\"@\"+r.resource+t+\"/\"+r.full_name+n;case\"http\":case\"https\":var s=r.token?n4e(r):r.user&&(r.protocols.includes(\"http\")||r.protocols.includes(\"https\"))?r.user+\"@\":\"\";return e+\"://\"+s+r.resource+t+\"/\"+s4e(r)+n;default:return r.href}};function n4e(r){switch(r.source){case\"bitbucket.org\":return\"x-token-auth:\"+r.token+\"@\";default:return r.token+\"@\"}}function s4e(r){switch(r.source){case\"bitbucket-server\":return\"scm/\"+r.full_name;default:return\"\"+r.full_name}}Lae.exports=AM});var DM=w((Syt,iAe)=>{var S4e=bh(),v4e=Ih();function x4e(r,e,t){(t!==void 0&&!v4e(r[e],t)||t===void 0&&!(e in r))&&S4e(r,e,t)}iAe.exports=x4e});var sAe=w((vyt,nAe)=>{var P4e=gm(),D4e=Wo();function k4e(r){return D4e(r)&&P4e(r)}nAe.exports=k4e});var AAe=w((xyt,aAe)=>{var R4e=Fc(),F4e=kb(),N4e=Wo(),T4e=\"[object Object]\",L4e=Function.prototype,M4e=Object.prototype,oAe=L4e.toString,O4e=M4e.hasOwnProperty,K4e=oAe.call(Object);function U4e(r){if(!N4e(r)||R4e(r)!=T4e)return!1;var e=F4e(r);if(e===null)return!0;var t=O4e.call(e,\"constructor\")&&e.constructor;return typeof t==\"function\"&&t instanceof t&&oAe.call(t)==K4e}aAe.exports=U4e});var kM=w((Pyt,lAe)=>{function H4e(r,e){if(!(e===\"constructor\"&&typeof r[e]==\"function\")&&e!=\"__proto__\")return r[e]}lAe.exports=H4e});var uAe=w((Dyt,cAe)=>{var G4e=Jh(),Y4e=Wh();function j4e(r){return G4e(r,Y4e(r))}cAe.exports=j4e});var CAe=w((kyt,dAe)=>{var gAe=DM(),q4e=qL(),J4e=zL(),W4e=JL(),z4e=VL(),fAe=nm(),hAe=vs(),V4e=sAe(),X4e=lm(),Z4e=U0(),_4e=vn(),$4e=AAe(),e8e=ob(),pAe=kM(),t8e=uAe();function r8e(r,e,t,i,n,s,o){var a=pAe(r,t),l=pAe(e,t),c=o.get(l);if(c){gAe(r,t,c);return}var u=s?s(a,l,t+\"\",r,e,o):void 0,g=u===void 0;if(g){var f=hAe(l),h=!f&&X4e(l),p=!f&&!h&&e8e(l);u=l,f||h||p?hAe(a)?u=a:V4e(a)?u=W4e(a):h?(g=!1,u=q4e(l,!0)):p?(g=!1,u=J4e(l,!0)):u=[]:$4e(l)||fAe(l)?(u=a,fAe(a)?u=t8e(a):(!_4e(a)||Z4e(a))&&(u=z4e(l))):g=!1}g&&(o.set(l,u),n(u,l,i,s,o),o.delete(l)),gAe(r,t,u)}dAe.exports=r8e});var IAe=w((Ryt,EAe)=>{var i8e=fm(),n8e=DM(),s8e=aT(),o8e=CAe(),a8e=vn(),A8e=Wh(),l8e=kM();function mAe(r,e,t,i,n){r!==e&&s8e(e,function(s,o){if(n||(n=new i8e),a8e(s))o8e(r,e,o,t,mAe,i,n);else{var a=i?i(l8e(r,o),s,o+\"\",r,e,n):void 0;a===void 0&&(a=s),n8e(r,o,a)}},A8e)}EAe.exports=mAe});var wAe=w((Fyt,yAe)=>{var c8e=J0(),u8e=jN(),g8e=qN();function f8e(r,e){return g8e(u8e(r,e,c8e),r+\"\")}yAe.exports=f8e});var bAe=w((Nyt,BAe)=>{var h8e=Ih(),p8e=gm(),d8e=im(),C8e=vn();function m8e(r,e,t){if(!C8e(t))return!1;var i=typeof e;return(i==\"number\"?p8e(t)&&d8e(e,t.length):i==\"string\"&&e in t)?h8e(t[e],r):!1}BAe.exports=m8e});var SAe=w((Tyt,QAe)=>{var E8e=wAe(),I8e=bAe();function y8e(r){return E8e(function(e,t){var i=-1,n=t.length,s=n>1?t[n-1]:void 0,o=n>2?t[2]:void 0;for(s=r.length>3&&typeof s==\"function\"?(n--,s):void 0,o&&I8e(t[0],t[1],o)&&(s=n<3?void 0:s,n=1),e=Object(e);++i<n;){var a=t[i];a&&r(e,a,i,s)}return e})}QAe.exports=y8e});var xAe=w((Lyt,vAe)=>{var w8e=IAe(),B8e=SAe(),b8e=B8e(function(r,e,t){w8e(r,e,t)});vAe.exports=b8e});var GAe=w((Twt,HAe)=>{var HM;HAe.exports=()=>(typeof HM>\"u\"&&(HM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"W9rheIFxrIB/3Qnoz55s1X/YEmWILAV2tWvYmTaJks+s3FB2u4JIdxIJfq99W2srgqqqpiWVIS4pe9pSGGy76tWU4AFHiryjKNAhLkHpA+HUeUz10yGn4ZA9UFiF6dhnNHRZ1eLczWuZ2yq6XLQr4GmlAuJpqOAITL6vsyJwBy2HLDcGFvpIv7YZBTc2xGFs8mciLz+vZCGj+Tn+/YVvPPgJzoXl1bzn4SH6FRwiiaTWcx4udWRt9O70mcjRPOrwETRcGBn4BEV/vT/jJnX6F0mt6yVfA+i4/VUA4ggSk1KNGRjP6FzJpjiYi3nypf+Yqp6Fy+kJRkJ86uvDardQhu5eJ4ISqOlBDQ8lTUFggae/ULRav5JMdm9L33supzC/LfJXXGaEwFRZ6LLsOngEhlTe0MNQ0iqJ/+1Vv6/fi8arR8worbA6YpJXSvFkFQTG5kUFt1RYvzf3+z2bVfAG95BOYM6LnUz7wG9R/d///LWv/++fr/OcLal7jNPOHt6GKNP2c6HEOxuPWi6JmBYDlRMXugZTfV+nVfiTBSgGeTy2vJTSNkOpdZji+zatM1xO7PZkartuKY2XGBt7PJE+epJZ2DIwL/5beW1BiIA/B+BmqWn231S08/npdKVjaD9UjnPiGFyJ5AAMkPmA3qv27n+Z7t2W2pwJA7LJSaAPyCXNBJJO1zFdTzKW35iMBcDNlvb8JvJePC23CDITOuBiKfySkINg0XZzmsX8WX88vJ/7mc87SrKSGBJaxXhaeuuwU1kxkLZ0Nxg//oeT///8uPe+onra9HOt2QMZQohDRJv+xfQ40LwWDWk3Fp4of/N46A8RNR7fZDfJIquONtpww4CDIsY21UH9qLH98dDBraiPxzfLAIOCDUhFN8JcjAoVfyv5UXvn8dCDVFNrj29mZ5fhlwyEJHiLWBdEE5VUtFDZhlZjf7mbERgEBmEICW9I2rQ89Jaqx2tKu34MQe1sRMtQp28x5QwYPzLpG8NTlrM/Hn6axfn4WiMbfXDoYfPNsdXIGWob8bf25vEKJsysR9hGV9rQghEjNz8diD4TJvgJmqhq45ovbaQ7+KVLwW24A1OpdNmx/95My5N/v3swGNACNCfyjDXZANyTcTYIPd5/v3+h//89Yk8PcBiH3ZkBWAsMiLoxRB0B3PYA3NUMlieB5LLKyIF7VypQlpQ1hKGOIM+Q3N0zXBnjYmNsblyoUNFGMkGm8LJEpSRRkioJlGbG+pW/r153doUmez4AWPZ2VdY9EY2CmVkRwD15MiunX8PMopjM7xhOvR5BC8j78uTqel9NWx3uNOiUSrdu2kiCdMilq5J/w9vD/wg6JJoAeTeiQkq7+x6oDxDUEORZAnlKsXMKoWutzrXLyqOicmwa+9/3fmbvd5KAopWxfjCSZ6NQbBlj54p55T57n9WVz6QKSCQkAAV8+mhWfbKtOWuvc+6zCaZBsatQ1Qyy2P2Doox1Y83mzk4HiSwZsqWRsSMNhmP5//Wm1v804t40oBEpVVOq0mq1+nk/zkxAkCm13jfOj5sR58RelTfi3l9AmlVEZuK1CIDrl2jWKhJkG0kVcTNB3puE1AmI9ToBsbpBSdWPUptFqZ3ajN4v1bduaNxk/IwffeMmwz8Y6nu1vrf883H0qn/Oy/YuJRYgTrps9LGi5X13rFEFy//TX0x3z4U/YSIJv4kiskQwEW2bmscj0V26BN0eloyZh23994e5xt3BeDVjFKECioE2Jhg1YcWE1UNo7/4cYJvffzbRd+aPhTYVooSIaGNj5Jw9MxZ3P2ogN6uDCnuklJNKnAgeSoNJ8VIqVMADbWmIkCB6M1/wnQPVBqakgEw60GkGBgWPwD9d8O/rnZD/bxUVFYgKRJMhEAgEWdiCQCAQJ//N4v//f7/Xhj/66oWNrEGQgCUEKTFIkAgZxEfxDRIhSKEZ1KDEGtSgxB4cVb+5+H+QvU/IL64INCIiIpRQIiIiQomIiFjKUlZEhDJixEBHHDHiLjv4p9f7gHd3D4IgCIJgEATBIBgEQRAEQRAEg0G+q3z92rWdVuw+CfvJYMZEPxFGAWFk0EGQSSn9HU3OpZ5y2GaJeBXzbR2o0jqrcq9vMglJ5eb5Of0/uEghxLvSqjgYDpbKUhHHynBkoDSWoTvZH7/tC6DRc948tK3//7gCroK+9/4G9AQwRQ1DDllKhpQooX2vW+eco+5MR4CzTPk4uAb4p42cTnct+ZBLdEKDCTWlzXF30pfmOgCRD5kofvpLEtDivFIUBcXGZQjCSRtt/fXeQx5bB8bjTxiDz3wtpiVUC4sBkZLoNw0+HA8hX2JjlgYjuQhZSXnPR0AIOO0hmTcjaoasFBUND+QClQL06qXfU12vZWiUyUHQNXjokqIo0nuJUhXSL1CEG3QSP3nIwDUL9jZKDEsRrvqkOSF5lRQc3JgC+XUyK7oFokJn25vVdLur5dZWlTK8Ebd3eiWFLAKHj1XoX6MGZigp7lEK5PwbRxMCdc2q45QCLXlwrKq4CTl3yMbZAxL9frLj4MIL6Vd3jnXbDrTQnwn/lHTfci8759LeDm4dKOycJEwmb7sNAaYqkcuHPfYOFCVBkTL08/DLZSKzEGT1l2Q0x/9waxoCFMIUdkyc7DNfHd5JnguKJZQXZuXVHdeJ/bKB0sWSk1nf0m/MmfAaApXEZ8LdQQpogZnIGZVI8W/Nl8fYq9GzegOOl+RnMmhQ+GEmzIZg94B4EW1ySWk5dNZQUg5XgySOH07Dil3Oy4czZFRX1cciSgfUAhS+1np93aC8v0dWe8CXIzb4MzDnEGRLG7iuiqTRidVVvscBdlxDKpGPECG5hWSKVY3OmH9nI+Ji+QQ5lgdeqEsXV7krmD7cttXm2h6LXHHpk8pUuIXsHE6SBdTv+vY8WOj38bzAO33Py+hc2FvFJqKqdX2I8oVFkdbDDiVSqgNzCuTZ0QNvi1++0iCikmsN8ImhwuO+oael1jUevkUe52e6wIqY3iD89cTfS8JrXaynw/hXKrT8U5LKX7Q3+ZKNd0xdrpqIsKdDBxY5A/2YC0tr+IT0dAh0FEni2Se5RNqCRacxOGRa08Dt8+16ToPdrNz+7vZ3r2Snfbz4WkDQCW0gXCLuwUK5w/YXIPxtkMf9lAloC0bz4muNoDBSnIPhIXKRp6vB1VDgucr3ogb7GfFcZqlBVNjtvc+rFq5tHGMYS3xE+f0utvKwSvPQURxeADeQXn6HgxzOqy30Vawy/85rUO3blqbjBA4R5RGvuYcxeqznIPRa1ljmFeampQuHUWXOTdX1shnQQvOyz11hx6s+tH83NtYY65FcFHpZ5Swn+XkosiX7ILwHJ8baQTYRoESHwvKLTp/jo2jOH13UJbTuPPC3/hErrku5g0OhsIC1atlpwqw82KQcCRaVcbmrG9ujcY5798upibztZkSvmF/ev2LPJadwqRFCdRE4TbwPtWpn5adbfpPb1vQiLLV4Sgt/2TzfwfNUQABjgAIX/ZBQGYpHf94PwUtGN/vTbvOmp/J0nkKrCLh3e9Lt9Q9KpgzoBv6gjM6AbiAr2x1K6qoboirxARUuhyFzdQAI4WEImpf7jgYv+xF4LQCAP/YDKOxhg5MBG5f+gMbu+hF69cCR2LN+v6yOr4y9tug2f9VtW9OEexoF2ww39OtoTOS3NUbHzHe8ceBev9QcNZCXbzSvw8dLSUD6BMEyvFpexq/SS14lSMRNIiLT+S+9f+GsRY2k6x0YKuxacjv4wi7WRRabVyeFBhXg+RoOVO79gagP2SLDg7yS2m/rVISnveIAIkp/2mCm+bDk0NGEHoFpQLtGJm56D2eFJtp5sDCD/nL5as0Qg9ul/9gk2e+suGke1qM92PRg52mnAiyf1dXiT245avbvHZxOZdu5GdpWVc/nDqFoiXsP1J9DSHYo/PGNmzp1+R0JGIBK1PSzl7lJETbJAgvIA3wApS/ytWoKQheKyOAs9K8NK2BDOz0Osk0ll0DQNOk1LFLDGmgyv+iRdKidRYtsEtcHM7CILMMUHfthCciwppbjyvR6kziDp1lWPNMPqtk2nzUDkNT5vMjHYNIbBvSO+uXkVDhCognWfGwB1s0G3DNVGLaMvaYmuPTX8wI+wkP3RYdpIwOYdBUEJjaTqYPEik6LCGgnEWlSwgQkXo7gugl+DyoyihNr1TJqiehA1QxOCxZIK0rSwXiwlg+kFvy993PsWaaB79gPDeS/dmGbbuf/9zunF3MpyTj/r+h7tEBwx+CCs0HWR6m2tnApndivVKKpcEYX1ISPbOR/C/HaKoXyAqntilYIA61YJnxufmf2O7yPoxi33tjTQ4CNP4nhJWfUiaugir5/SCQ8uSAaRk7g+dmciwhmPC6hJWXYiBETMSYSPMNhtc8kyBb7lagzF8kXJ8LgmP1dp3aOdLo8lFfqrflNwbm9d8Zk7PKQDPEERhlxaYifDLmTkDJ5RINj4BEYvkG8R8wmE8R4fdoZgSYCFtFJhBpaouZx8EJKKGYPgtYxQzxpzmzRQGIWvka7NjCKaDhCOykjaG1C0GLbtrxAmN9TLWEXlTYNyqaJFVHnutbF5d60Yyeu6j+7cQz6cjSAI8d02Pr98E9cUo+tqMdKvwyhbMdBfgk0SFeOlG1lNUdjHvDsKspC7QNjqIueRry2QVUcLjnXEDdD1aNHc3wVLZ4uLPLg8BFuDGlqT68nDdOmFhYZKOqW8taWMmAY1gMhGxpuUJ6EIqeapSB8E17hhCA4IrwPH5RxPZIk8WYNKDVb/t7MiJhvzzvHhnUxxwvvaAwNxyXu5nKINggus0Q9XyFOPfMStW/gE5n1AdHcQTCeQfiFKnz7mvuWKbuMUVxG7jhOi4rbOBtP6K6Csj8K5UUYO39zZ2rjM1zWiEZTkFRN96QZASsMU25FQRIfZcZlEAVUUyru7icYPRMQRAcXLeOh7mbKIyIZfmcE+ITkCdDL7H51t227SmQGGtSthfTlSLUPSiA4JDHfGE3NmiAqUa2TsTJjRC4180l+8Y+a/jVroZzl0XTwnMau55yOWO+GXu4KjtOldHJeRpsvw5egQ0AX8Si+J9LkRl1M8ZppSgRe13KBuf+7BuGU3qsdCCEGfDuz2u6xHQlq9gHqsN5OwspqHQkRX9eweNQs8NsLn+N/56HiULUCn5kscJOIYwfg0ZGirZmtQULfSBwg7LJroDHyPtjJ1QcyU3YLDsIIyl25z5u33W5i6uyxVS8mBlTOmJJpvy2sbqDrcdWDe1tE5m/l78N1vV2mSQQbTOmsrSyt53jmbW8tvwWHDhY+ZM5rH+6jQpX9yC1Tj/3hyEr0133scnMWLk2qO4go7cK5KOOo+HjYgDJCNJbqaBVA9czovpISYhZYimHgGNsp2jgEMy9uTuxMywTwMWYNcesJIAobenNqGGw1tWUieH2cozrTWFwkMi74CGwF1kjfgcwHYXP7kmprRp7CRWxdWmYkNTh3/cZgAzHJ5L1Vc2WwcqNtnz2N+xhJS2p3os7kEVLc2BJ2vV4/+/bafOhXprz5IFvQuykZ2O3MXKgCxVwOUXGyfuMIqdKdrDe+TR6hdTqpfs8KSpf2qCw6lBmuCm2rYzakqxpqXRYcDM5s08eI3WFaabOhrwFrHy5wPHD2dvAMLJC4J8CAgBEWqUhWdtoJy1E8e4XlayDuQgsjAhV7JAdnjFLENSrIyCs8z/G4oIRjHOq7K56fFu7DiojQxv1yweSWn+4tSp3VC+eW1XTLyOkTfAj+ELBUp2wS3wdbyBsbj4OysiR+ZPVFgwi0o0CwImVd0Zc7nDINh+g1LLaG5yS1M+FWpESu5KqHkF6YgO2M3MXPTw8ceCoK/D9DhdcZg9iarNKwzqNlq588VqLiKghTRa8nDCnzouMV0uZcGhckIBprx/Qr/IbIGy2PwMdoIfVG6BKnWnA/WJ2lhfZJ7Phyecee4Nj6FAm3rez1Av+hcN9mClPKbVi22agwk5xIVyGd3em+RtospQbl6bJyBBaIbYXUdWVxQfNOLJH5TdnGIzeMEIBKGEsrP1z7qpfohlNXo4+1vs+dVne5qk4/sDVl5GtObn6u3t3D5OSEV0m99qTgdrG96yDd+C0Fg+8nPQT9BABEsmt6mJxrvx9D2AumnYZDNLzHEdIeA8lCpGSFXkjF4lw07n77ICwADeeRmRg9WUfoeM1IwskGqm6QnptcNhu9mYzUxHXcGSgZEBXEG3NcyY5TNcO2wuGXs7PFV3kqNkWC82FoOMNrmbUvdkyC8ulxjhM7umN8g9Vs69KmGvgFPd9v5aQiZ+kq2F+pc1iUVDMJlgbud5cInQJnvsQ0X8l4EJqDxvjwJeq1pn1TKyzkD4CuxwIdYVZ8KqFXR0POgL7gsd+gs7ZtpxJHSQmfnh1rYyF/AHZ6TfhLONcHXes43fQqs2YHKRBZnn1RmtRnbmHoSxh4+Sa5RPT4hKmXZjyA/AGAIuOVkmgZhVTTq+tSEQB9gQKsyaeHPgFbefGPdJngBZDHM4lPUMrvsgCXkEgl2dv1Gv4es0X8Aih/nwPyxiFZdPcoIHH8P1VO/c16BczSIUorbW7ewra7JKw0//Fu76z7/yRoeRVaeu59BCm5CzAxKX5wt0xxa2e70aTWBpMjAuXOM7WWEHVoi2YaaQWUQ2qjCRg/dZIAueFmAW+2EJ3B5qk8TdMsxXBEohFozgKgtj4cfsHSunIJRqdsUB9NpuN1/M9DS6V0CwV2959HL5eaUWE6Hjf/+ngLcGddotCjzuUEuSXtncbrlqs5/nc5zK0r9JYVFi1u1bc4qFnEn331velWoeamXyxdyj1praTScBWy72433pkHCsHY59Npa0Tc3XDXbBRTGwNXOA4yM7aElRMImOE8Sn6Mh0UAMOpscOLJFMsYsrh0xBC7KBDqVjqrDGp/EDN2OGw8VKE/rN5X6E0opITPcTnBX09foM8re89tt8go6JCn3MyGrPnxyjjW46IHe2aOjkwxzoqSLOuLsb4GRstXhOXCIEL0rd/+CIBuq6t0HorSbT/zUvfXaTuuBzNosOImMo1pHkmXGMjwzhSaB4ocsCfHK9o7wMMXeG2/1JSgkuMnXNHY7C2B9vkxe9pjrcZ0QsPANm1wJqLPouaG5yHlvnVZnQdVfelyZmhiKmHkS8VtO3I+nYlob+MegKKWBwA2hmxNv+WkLvI9hneB+VuFBAv3E8EGUyMVQi8Gb/adg/7gwfdmUaEljV0LDxsNMuTMI+13bfNj7beahpf9hFQYURwchYJAlVJJy/Ew0Es9P/nMzJ8oy/595YTngdLeLGKPF14WmFuDUq24GpQ798wedSYA2zrgPMU3jbGbvZYIxFrQCqkgUeh3zdUEHq02Ho4Mcqk+rrQEY+WlCS8KFzhgwFsnSAOJ3kJztp7PfbA/W1aKPyDOnU9EAEX7Az/sk408aadT/loFbrKoI1uTbe4SFX+CqxOAmKp+1pWcAx0FtaTFGsKFEHVRVLuKW9wd4HDqr/xsIpkdUSFiLUl1Ns4QzCxIwx4bSiGmU+6UKbXNoE7imrXDqAbc2RpBBoRasjYiniZ5tSkAYhSck3LhT+THPFbagfLGcYHjoLMoXp7lCHrbatPsHEXlQYyyvigsj64Tuq0uV3bXeR0jFlLNYB8bsXtMi4ULoTB3CQ1zc3ND3ZydDFbZfNVvvegPb6zG2xwq9+szuN7ChXlRnvbRFtPLimfvrSiSDwyn57lZMkoGqKbXYPthPMwSO1UJDTWFNsMrGHO5NIMkwu0O6WaJqEgqSkUlK+I9uARLgAyYY0LO9C6P2UDeFSnuL8dR3Nnnl3jx7LTfeiJ2W9F7e6qTkKEj7UAlAI7TDhrq0Et24WMi+97DUuNFpDT34prDYvt/f2Jvcgwg+DBqb7MKiG5yO6U6QL4i2QO0gmEatPeyefU1AWoOPPNND9ou4oRhD/aBxFtFNO3yngB4sDIugOR9shuhm4iJysyoM8IUO5NEORzEIDGWMbRMbWaFcDGvQCS668Nrx46otdG40mry3MSJcd7C7yKHdVuHiVxeAuh0rfbYqBqsQ99NbVpHziFX6mCCsMvz4cmQQVn/BEgoiSLIFSyaSRAj1ozh+sB8rADropX2myOAGzor/1ryMMVOHMx3c5iwgBAmPoi4GsiHgs8f57xgfPA9SdiAlowGfGDffZA9i0sLJCQG62UDecKPeHxtlDqb597IE9pfx3+Raq2f0vrHVVPOUF+i8CeXC3z9Xn/040ZIJhZ+3HL5+MONVOalssc4UOThfsAbGuqyCCoi33sVe3wLnde10/5kwXxDRZI2ogaj++8iyvXWEdi2LoUhI3M9SpVPOVBdFrFZ3j0QRDkc0KJer49rZ/Cbd7+B52O9jNuy1OOfPF6QAge+GOQWbEQ7rqCG84FuEcgE0s/7o7gv88MdpyOFjYnzV4SjAP8l8/hSTj+/F6SY676Msk8RgjOgAtmaJ/zwpLtI8EvzAgVp9VYiJce/QpMjSaAU0WURhVx96ZQLkmX2KFTYJSWrplWOc0Z65RSqy+R40ozzVWdG6Mp1mVKL6+FPj1omhCiTTdIgR19d5NSPIyJHS3DW1l7eBJLpbdt/Mq6pb2Cy3Nx5qmTJJcOrWPRDdu9L+7j9DWpycQmRcOC72q6bCkIgquZZxwuoibXKAngVqLsheRO87sfDdTsPXLqWbQAkwXg4ym75PGrZ1e3ODjHWzHeOHZTivuzT781kO8jnb4YerEv8ngsOJvHIQnpDIybHuuXbB1PBFJrXGnZHXnT/MR9bZ2t43dxjouTaBuUs1hx+tUQhAlUyh5X4TJCaPy2YQsgED7OdhDXPUrPo50kGRmEa1aToNDMkMOuewsIqwK+X3/0vJTbeXYcWmdPhEc7NVMn2yEAfR2x/t6AK0fochGTxKgtFX4y4V8oKS6t9G4qkxRaRDeimXjmq0BfsN959UUzbEOya3vy0rHiy4J/96dWpChPNuUrD+GyoPTuTrloib78TcB0U/u2yv2JOA7PJxpLyDtKTuNMMeZhnK2pCHhDpEXotZQFxPM4NZQqdFadZ0SL4py6T6ZoZWkou3vLpS4PASPnlqTf2S31N6AU+Q9Zbo3Q+UV4vZI+wgstSZGm7rrJdK5xBbiW+suXQLyVD9Nj2NpUs58ziuaEsp4n8e9SUy1h5cxogUm1XuuF0eMEtfdXr0j3cOrIxqePjjuDdd9yD6TKzjTuMAHqUpw/Iu48GktPB7wl38tor/CB465d3COuXtwdpj+H+Y5CxTmnoigJEpLDr4SRa7FeO52Z/Y09drpzPTGoyQ7IF0WOYXgfRx3tiZH7P6E8eje+Lu4rdR+79Q2b0K6h9fMMTzaMQ81EsWsjheBXKx2Xh6W04Pt1/BC5eQxXMrtL2BhOPLT/D8ipT25NmFPSvVnEkjqmG0DunmtRt4eks0sgPQWWN5LwLBQ41hJYw5pXFhkILw12ube08injzNuwWKnXO6898RGISjNqdrCoaRDTp+ezimOCTdhc+KERskkLhKpJt+tPyfkpN60xiAI3IBhx/kqap1htSQ565dIbBkojSlQ2jsU+Q1BiGu6l25Crmr3Eg/vf1wbBND/zaptCsxJLZeQV22yF2RYFRUJnd10uG66xcQZPBtaNNBxvdqwnS3qrwPXT3NqrfsUIM44KtIC3WKWYq5gipzDyOCmJOtGYx4MywWQgsQOJBYhoBYwKdSoI0xtPaGqukx/G5Qw8kXiVqYyzq6MgniRmFQgkFEwkP2bb9ivcZPcynIVq9MWoz/q2IHXVaVqX174V4ruPSLhy23xa162q71+8NKUGNd8duBGPQuSX6YJS9J2repdTOMN+zQWQcrSsyvx5E9b+zpnfaLnf47YBXOeyvtt3a/4/Aepa3NEcpdjZWdmxcYD3jpPi902sa6QZYkAblOCWjyBzxyTTIgYFRDG0RqoePs/JcRfO0eWg9KzXl8+jWyO4Ms1WRrPFDeZ0Md2dd2WvyuDzmuHDm53ncaJwYI/IijRnDFHAroACq5EK3ptxuGyNelj10HN0yuxqB6YVgzccGz4Biw9Jayrd7cATKjgZzG8ZNC47EsvdnMDOTZFT4LGzEjBGP1X7kx+MBQUXcgmLltMWKmtQyRYURChe/H1bMcQd6SkMvLXKnE/PuJTyIgXva4khdTgEvzu0hEr+Ng5psjfHdMIStA6YrEjtWshlztXV4j9q0rm6QYF6qYWPEgraqeo0JWsYYESEZQXkSQhvgMi0XgusKreGwfgMlb68quZtdooEgeKJlB2gZwXCJXIhBl8KnDs0OWD5GdAZAuj7qmUxdJF/uQFA8z8LIdITmEemo+5fVpt1/QQQ+VgJfXg8+LgJfCoGYTbZZ/o+cQJcyzcgB0/zCy1B2IEAx06B8eyUWi+BRBYMZYnKpksrOcLdggCFFG/AhcXyl7mFP58EnHyWPpgRmJBnbfOkY2m4JUi5oETA8ibDh0QWDGaKyqpPSznD3YIAhQaOWnDMJ8PsGUskg0CNJHgxnxNJpOFkirjtt8yW6G9EngikfdoGraHcTpV6g9DwBL5J3CK0xdBH+DwZiNmMo6uiMXizgfFkMhsw2QwR+mACxPlyekujbg4dnlhRG0HbcGbuLWnPc7t3A9dAxl21byVfUdhxeY0yAy5qqWgX5Oothg0pIRS0ldGXURlCpH5UOWIP6dnzY0mtDIkYQFzeD+IpmkDp2M4e/2AzEs80YWrlUm65hCltnl2WGJdfNBn+TAHdsGW/wtYiQjGgUYDYKJIZhLDJUgkL4nkGlx0sxzkYzgYw2Ar8XYKiPGA4E32pIHYaRjsWjT9I4WVgfzTRu29KGl90gnz7phXpRjHatiOCB2laX3HP13xYp+YUeTAsdD77g4VIJH7YVZUAEi6TpTrF6TIfJPMzDjq+0nU3LGCuvBIIh6Ep3cHmSwup1x9Eu2Wk4AgD2FYFOakaEIeBMgErj7bR8a7X4oyUzqFiv2Y9yOR5SZh0IKtn3pO5tz2CfpuObgtf3FhG9kY05jA06XsC3TIzDt5QKHaxG9XyZ0EoWcT54XAHOcpx5ihLza7ZDoD8oDSjvzb5qcSMk86OPpucIqSzFoU4IxFAkpEqZS5Y6cmXvZqjxoqg5uq12MVg4Ga3xSRfXAXsbQllfZIGlubYzMd6zC2jQMVwkizEjL2xVfNZqA7yzhc113FqiG3w/lq7Y0jVCYdtRDlUyNgsAwIsDXjnbwvdP2LryeXmfTLiI5DdyQaBTMD/7HaQAiKB4tMF3hj63H3BDRI51hAacG6GCPkAOsaaa6dCBAb8fErT5Mg5oFbBYoBHM4MPwctk9OVsZGH/Pd7I0IGAtHYqa8xeY9m4BeuyjwFACX788GXOZCL/A6YVZuYqdQMUE+b4CDYWQ40jLnjp3D2AcbdJ39cU6LPWKC04PLb9yg7FrPYV+8eMuXGbP7PdZdgu3RfCRhGaNDfXVjx0LRonoUV5PkPW2CKeeNutpcWDGm3+XysPHf/3Ht2LjvXaWdGOQRTyimNxsQn/45sFZwMa9zS/7Xf1hISS/j/T70Y52LvZdixnb0i1ggNU74LpwYoj9yamCzYfAqT+0Lp8Q6Bhw4BK7vPh54n1sMfNQdr2vrSLGz8YiIkyhdDEQNBdGshMOeQa97i9YYjVuZbYTDR0RG0ebdZO/gk1GU/uHEUHSHVMor/LrVhpOCqVu5xXjn9Cz8QxUrFA9++TFgduG0Zu+TrOBd7I80t9m1wtVC6tPsHFA4N86/+VVAM4PwTOxLxSdGFhAcDb6JY/wkzBNASY9PFAvGOTKCRR92bq8nKVsygy4d1pfgVNSvZDAJiDuo47ndzHMoQ2J/dQGYpW9tpSqt6dC16Bee6g9NzGpP/x6rq1zFw5UzzLMIGIupZjkZHhEbgvCvYzTrg46zwNUEB5Na920hHBds9WfUMaazN02p81eU2I+ki9+mhjh9EkT14uXbEblyT12fML5sYfosQvKXxdnFd6evMAq24ADr/sRsaatRI1Qzgz70ltTObRq6lB8ahJrOQBeh41/QHP13S02P8UzflM8+oCQ2gjKLnbShgrR1BqzLXtarPYwFA1Zun/vOYg1xFrJih8W1WbOamLprlOYIOwuwP/dMSPTIhnAyGyRZK8SBU5A2FAtznWbR7SYayZMdewE1Be49oOWjZ+wA9Uzf44sAy5qMMKKuMPH3PHEvqGPutOeGUkcNiap9mKebMtMdiqKdUqLNh7bUToFhQfiqbuDzyz4C0XpR1Gb4FzZYDhMeO5esH47DQ4/wvHhcoB6lCzI5Z2dUSGDJx81hk/YBnrpb0IUMOMgMxTKjR57rV3HaGA/onofHxyqhhXXhJi+jxmHmSplwDZWJK5HVWmWd3MmVDOCFmnh+j+HBr0AyBqurmqg9gLyq1eqJpltCDoWV08hyjacu00i0VHp3SPeGCIIsrgKkDF5wyWPZSic5UpEiPoHIbX/WhD4wkU6l2ml6U7IROEvYy2FOT2Odft9s2f4Stc2xGg5ovy58vawc7YHRfxh1zEChYJpIA1Ilb3tYon6uYRhusszKluLx90BapzbtQCz71+U7RM+D+M1XfyBva//uEAPeq3Qw2xkyP7BiKAPVaPk1K981ldniLnj4yWBeGdnV7FcXK4OUlIugRjfV4H30Y4lq+2sJWf21/GplHbHJ/63Yfjo8ffj7p8OYP1y4+5v4B+T9aXEUcZkD9tDukkDiS6wOOv+JL1p2PJy3LdN0eCUTAPjtMEntm/eGp9nvLRRUY0MnvzYL8oxp53MfYPweO7uG+0Sd1UQ24iXE/ujv5kCuluxhI4KsKfMd5ywK7zdvimcLOWTHUgeedMNAfNFNRB22j3HQsCXO3t1sQoghYPr/IDhT9wjd6IGLUK7sD8PriIkuqH4sEXZJGL3YFAaL4KWiQTFPVgCLyjnzizHsJJNwrCvpmXupITQE4FMsadOI73yLcUkvHFaYOMl7M36O0kvmrVp8ljw7gK31l41xzycUx8y7ZIkjI58S2To8z+44z/o+Pbo9IeztGp1OlUAuQ0iqpvYHa+Fe+4oZX7FK2pPl3AB3/M3oqR7fTrHgflTrqiut2CQKYqYsBVFfrfK61fcj9o9i4wBJQ+GwPZKGkgr+S6mVckH+3imZGo8GOUCCKAFhIeXk0Y0glvfvCKVqiPMROGF/Uy4XU+TNHtzDWIVPlv9qv0saiwHxr4eJvo/8pWLzzaPYUvsrCTAGbon26NDBN9GDo5AxJ2HLKvtSffwpmu+yONurAb8fl//FAdp+/hym5mtCPnnd4NXFRYoAavWy/2uW+g2M+0t/Xst8cD6TrAmtph+gwrkZ8Z9NOJRHdZLvGPH/GQVS8kzg0wFJhr23ndh+NEvw6U5Y62tlhThTSHG/3icnSEP592+pCwe9rP/NpPzNEAjD6qWCKizFs47nUqUWYTAmRN0kGuDfHK0FD40QZYsLUl1JE24f/dfJskE9w1Bqs6TbHWu0Ky1VEYFjJiukHYglvuU0bieCxzOiqAFnFIavcEF/6lV9tLbrc3CgUt74/J/B2TNp4VwHB8BW3itDdaaOAUNdwu3fvYIFop97Z/1LuqetvcJ224sNUe4eU+bM17sYQvsA6oAFTWlGKek/hTM5gLDVpPyGhsCQb3nBVJN9zK36C7JgHKPYW+typD2rpPrvT4IdZ9SvWV5x2p2BduZjP10lSGwbY/6H1x9oZe8yxQJvK11tvD6MIQ6V0Zy6I64ac5LUTWAeZTVAyGIe/O5DgeKP3YBPMRLf8dCxS5Y/MOCUb1UQcj7eLtaUutJL+3SGewoaTm4HOMIhq/lh3yM88PVmgQNYNmrgwysghrgcA3HljG6/maM+vIQ4V+Rdzv7gP+PgmNNM7SHxyAZyX9rC9vWIV1bPP2/e1D+yXMQ3agrEku26XffYK57J5hoWfhtDf0yR54VpGkUutvuXdSWKkICNGt7MstuMqQQ41UzeUd/JTwvGeo+9Udz9UdzG2wZ7FdY2c9lM0JI0qWdSfMf9RlBb7//vZeUP7hb8DHsF4AAdS+sk0EA0ZQQJic6WT0ESoC25VTc39LTvnXXInd9J4UeF9KAxZY4/dWCLwLnPyOx/G0oJx9cMRX0AtuyFBXBymKzA68n3VMjhS6uQlbulx9Xn4si9IAbqzX0VwO4p2PCYjrflddcNN86EOyuIX/mM+ipqlc32dINbmieRxbwalQ4QHm2GAFNdlP6CE7jCQmoD0O0JtQVD24ifs/t9BB0VyEI/Yv7g09YMox5FChl01SnVTdSpIzrqRTcgEYS7Mc/vhOFbtGvZHsKZ61nH4jxfSKQeD7pAr1TueBF9sn4EIrDEC2zL3BSlruvZtR9zoRgWJTtWt4U/sWHcuAeY9g8VU292URBp3Yw6N7dQO30H7K6SCVHKamXNLjHGG2do19liNwXWYTXG4Fhthwjldq+Ui9JFu1d/jl5/9W58X+C8a+U6IntFBazggOt9Vuagb8PtNsiGC7PvYohRoJO2+hZgikOJMWngUrPWsVLiHI8jBDEORNaosG+0bHj7N/iYRV7E6xkUwLAGdtYwp0fihkXFhv4eqMJPksTMvLvKZJ4G+he+xew8FPaLbjGmK6nDpbAXBQtlv2ym+i39IM7eY5yH6QfwuS6md5zz+FFRgyvdsrTmQKY3uT5PRBiZu6wl0X8OJGfxHgyXK9weAXsVJVhDBytwIelUwXPfDojQB0neLhawZ4Wq99ZQe+GAFxDH6qucjeFCaG9KGlEH06hvWmg+xraEoJ5p7dhIGcvTmhBxMeCDW0NcRTnv/NHXpFUOD0M83OkkNkWChdc9u+DvqSBc575YyHtAV4X79i4R2c7ZNY+WCjFR3abvLKlevxsrNTt0rqLATjs7MrlGybD49/XxtI/C1tnQQjnIOWk9QY8QSu1k6BGDLQQXfwz6ifUCG6THVk5EK7sdLvOCzo6RwxCGnNc6suRk0oDYtlJdGRLWV5sIQ8lZfUGPXJ04dOaycruoyN742o+6n5SrioDhd61ZDwlcV2aHX7ORq/K0a/Vp8GfZOLNXuhaCWMp83vn9k/9SRDJdgUPIg7q7bH6M2D/sJrOExDgUAv2Tfic8XwbT9SalqLQzIzn+gTDmhsYda/aeJZ0upQDQYvEp++Sv32NfF4lsyFA+OwAxin7UXlD3FCFLJEvFlUh6rJ0GDADCwXPym0txCyXcRn72e9aX05gKKsY3zLI5ZXsr9Oz686kLd+ygP+LYWX8Ca+AaLLNffgEPiwkcraq3toWLUIxMMQBPYVKLqddx3zAjmB3Rsti7fbsA5ZrrMSJFVjsrCFHY09mWPjuVD7UtCxYu06RC96CkcJTx7N7ohmX0pBh4v2UHL7a3alz66ey4W97SOPfqU9gvdTqeF4ES0q8q1PfrCtBvkX+0a9Sd9GYTpU2cLoPmAKF89bn5yR2z7t4GqKdUoCWFlrq8q92RuqicInnRb2704gskKOIX1lKK2FOSEJJ45nInV2JeMQTqRWr5iwXlJuFScfEtJTg7OId4UfomDmm3bp9ezsl9boNVJBW8aIsJJspCGTQDj3Z/lMgprZW6tyz6Wp3A4ABrtXb54D2iuKQn3YQs69+/iWi9kWOQU/tBH6PtVng0yRwF4HfJy24tQWd2Ieih++b9uHptOBTaEFA8B+sLPrgRD6GSPG8bK9guAWTK7x0jNs1nRg/39VfXnyVzzTTTOh2SmJ4VcF4ld+hg16/aGw7HuGASHzccnYjDY1rYx7Z3qJKCB/i4c0SFISquZrscwuFW7+Sqr8n+bynaSfBLXegZCFrLiq7j2DscGuCLPN5BJkE7Sd04Ejc4xZ/nX5OYR7ye8cGDXtwzOwXznL/W83D7tbfLbuXP8X92vOMb2+3y/q6vjGUJT3CRond1d/v52MP1+9lkrGchE+wcRramwD/AqVItw158WQOUQvB614W6+1LaEPszGwgviU/QBtLD0lVqc6jqNbG/fzyTnmnY7aIkxWI2NCsfBWziMkLTOhYPx9yfjdqtyQIVYEPf7psn3z0FDvimhtR9MLUFuPm21587qeuk4rw2qRU9DotMWRcgea8YrnN1PnIHpjJmfhAmh/3/XSMz5ftrmGNgXSJ9PtSlGnuf3ZihtKDJOXu+dY41/TrUlbnt+//s3jm66p6lNnwxirrzxxqfnRRq4s4HjWp+5/ImK3/tl47e/gdXrMrKisrN+IGFY9oIEB8WKiZ/iL78/c1DtDrSK2El86L/TGW5URwZmOJPk/SpqrrEG2QlM95DMZOKGQrZr5xZNYNFHqHXnEVNguchSlz7UjoLKIZ0ZRa7zZuz+7rMBmVjVPnXsvwSliSEbTA3Dnb0g1J6F+ydQ+RGxGtp1TcnpOoKrZEDokfiyi47vHEQB0tLadihxAKlsO52xKhnGjSdrnYPHsBNTLUHCpEAltFsPGYb6WxU1A3rfsJ8UcvEAISHSKRiem4Fl49RfVdputOZiMlYiegCX7e2mt2Q+9qcamVDW+1DWHzulKoBT7cNn5E4TupWHnp9toMd2Vvx+g2C2KAKf+2S3fsjM4O2IPHAOJj4/d6vVJpPURWC+7VPId8xXqXTGLBQb83WYMm4y4wIP6KQ5aiHnUVp489mt2RRUd43EIxFkM4OjhX2ktodyBTnWhy50kBbDFeHwe5I9Vz8tFGN5lg6VBE6YfsgNPvKIRp+GEd2a7Crhvfw797Gttvl6Z7g3FsFAiQ9Axnq80DKvcceqlORm1SJpPqTq4+U8DgdBq6kIKZfHBsUYeSiiwOP2RaxICtep8+jLz0JaLO8gDOqxs+52IK4T7LBn3jNOHvSnPdBkNtubikIlo+3bdP8rf2yR2Sn5msRepV4UKaDY/AwDRM5zCjXH7EDjw6jOO1O+YGW63mZ5Jugfcj4gcinlVaZQRdPzBn1de9f853g//55tRHNS0SH0IOc4jhjqNXQokPUMDVI8QdpJsk9FchRZJeZoeia+raMvDPzIGRDV0kcejx/Hq+5SvdlYsBVZDvzeCntEKyV7rBHTlEeOUZIMmvbCMyhWF27ULoxyJGQ7TP20IPc6WH2bb1OmtcsNdX2eHvHzwb8oWQpnkbdS7zuZDQxshWty8IGKuahhe30vFCjKJCqxuVU683qDddd7LdNhvEh+l+L8nPLR7WJ/8jBnLpBayLriKBNQyx3Klf4tk3DnwDAMHU8N2HCtu3YcC/n5AbpdsfIip+ebVUt9oT2/9gtp2AoYieQozaF9GAMOtmW7VI9ahV2frtpcSOfk6ZyFCb5+jwuvTSZbnzQ+rajRniEx31KD3qRf9f5x11iholD78jKmwI0tgr6R4Fzhc4jvAPtHgvUNV2NwTAxrh8x5I+s3rDWfB2olcMdkhHmDjNPEmGT/Q6+cji1+7x/Rv6OSMKZhoRnwGs3WYfHwXQ806MBCA0+0/1Zd+rLQ7VAsA2cSUYWXa20HdzjPaZSUjEssjEurnvJLIYKWRdpcKPLz9zcB6s1qjWaXLWmxmNUHa8pDnYrAT1nXhkrZlHMgf/hc9BnjOm15xhkYtYzxXlaIE94iFNFyMt0wz5B+bDSDEvawRxgpnfyhJ/hk+Z4lz+Dz/4/fv1AdMxWq3KIPY6zM9+0kcCTNriAgVtZItvoujoVXhOngFoKpFgoIxv12qZeFJ87SMgEQey3HpYdcLxA+zDMmWBJJs51ZyUfdBNv5rzN6lbnoyxyN941HtVR3LOsJ+VK5gzD88EX0FCNl654EhNLl54i51taeKczI7MsXS4bf+oGJ4xY3IsoHvAhHd4IDbvfV1+JdBv/zVrlPYZvnbfFXT389zaHqrB0rudaPWP7yC11Tv02LH9Z445iIPZBmnA/DU5vR6pjsj3uwUjMT4XxsNAo9X0yym2/h+UJSgGACeeisoogPdg2v3k7mEBd/qZpuAzSNDScM1BpzR+8po8cVR2HnTBkaK8c7aT1/gZngqozJ/Eye2p7AXWaG+yp+0L6937kdMlKnRfYqEsIxwhKTszMXVfv/kAQ7K5iDkKwQ41pzORw3LhadqnTIM33ulCAnCotbNdAhtMZMppp4I6zijJRMaDJ/AUP+CYWFK3gHwD3FNTD/P3nrB+87xjcuYQnVu8mOEYv4GujQeInPxlf0+RU7OP2N01LdvqXySdp4WUAFWNsEiL1SQ0GceA77pA5CjmhqsZ5kPUNBhdvMox7hYa5MktUxCxKmWNS3nEMMaGRC35wbTIhHMLAX4ixR9cRdUa4O5rMe1pvDUTr51RfxqAN5KGljXWcMM82Gyg0JJxwYnE6lY44TMjh9QOXZMtsH5c4m7NOro1BFwshhWz7xbtsHNghAmcCjiT6O0/7AMk5EJaYSGnDx2G2Vmv8VECKWs7V4fHZBq+tqW7rxhuZ+nO6g19D4KDohBDmp3tO5jjsGJd/6mHM0NNB8oZk/dHty2yE6HnXP6Okxbw5BE5GIqHnJFjjX07qzdLRDs/3f515vyBuFtPTMGSPHewemy4Ansz90nzlhxDWNiEX9A3nmFSEFDMrr5dJZEXt9+RV9q4wgbELcT5PAHxW8ARdLoCuzxr2utOogup3GthvPLa6zLqFJO7Iecck3ZI5VsFcBdGg4mlEEuKzLlLDQd+TfrA2+6BzKhpdDZUyYwm2vFUl+6BhUEJbTPl35wglJpgox3JPSphJmrRQW4UqGtZ3d2P/0bh54fMmDCjWwN2ar9U882fCE9f9lEfzm5WzDNYBTY4ym2CsZly0s3IfB1S02KkacYHgFFuVJ1irz8Gj4uXPVDeRLkb2hKAoQGgYI1lGwbs7HH18jy7K4GPogcfTQ+ir2Wq6GQAFbrk2iLpVUrMDHa/9Xqqn+DDNfL85PZScr/R8M5TKJKzZdPvYmz5Bzn44u+bbnw9iR5Jf0v+fHxG+FaHDQjY5bjVVO8LfHFdzVUfgkdfY5Xp0Je9vJI3p5qVmjrsAitQqUKlajU+2bOl2M4nh3yt0p9LM/c4gLjxq1YNgwkgqQ75iPyinrK+jbC+fNWtw946+YQAZgAczT4VQX64yHCwEgct7gYM21HpMqAkbhYfKgfV36I/PDXq9wjmxp9nJ8XviLmt55VGMerp36BHegvW9BDTzU3F2RENf+gwhvnjGoJXdHn8S9ZhAQHt9A2NmdPHMJTM66MLJs41OFELDYRNaWYEZ26BEoNe30xJ4csXXrpwmseXu/veFoM7S+1rx7sY2jRwKdaNOo/f0yU46aXaqGfztxG375GOv8haGm6dngnRswHrlXpxJTxcyepCeo+C8dHSXcKIB6RnYqXZojryvgnGpTz24jFLQwuiOLSMPDvFoLr9r6wHb/2dwdZe4pTxluXHkO5xtUQRC0WPu+GxhDX9QJZQ/VDNX3mcu/rz/5RdteUcyB8dAGoKAGCfdkBLr3U9sHIi4mvXt0Bis/5uBHLh1Iuyyo1r/vOPIoBJ3JMneSZLncHQ/3VxQOBmy/btaGLpJFx20VIF8uSUVUzG2JMsCMQzU9sWDNEFuG6qAxsPWpaOJqsIwRHm7VCOXgZqWkg4s995OJEnRhqW6gjr9zAwI9OH6c4Ynwv+HVQ3f+2H6LwJN2kEDPM44+aBgKPLKx/6OhJiscBaKUjiDZyAPlkpU5gD3GA7BFBvxkZ1rlKlZCpuoX2FkFO2VPYRLqYEnNYBDvXozhnCDIwXIJ/rIdwtMj8f7vcbdNAJg+LAod3imF7I2ngH06lO9b11D8nN/C7yRva+p21sXf7EiwP29yuO8V1EcSFRg6op0sbUyQPBavBQrAjF/AXuQD0I+dsVG+b4EVnrGQIhZeuYve8y8pF9qt3TaHU5xfCxTUCcN3fX/t0N1Jv7BMqum7fV/7Q700hYNjSbt288SmZI48cmyeNjNFVbtQMDQXFDcN/LHu4aK2A49ro7/el6EEpzMEJQdYgNSyt6jH0AE1fQizPjUAJUM+31O4ELwUzFUH89OlBUCay/tbQWY4YW3me6Dn79vtP1fEEQyq4qB6irAho7+UxtWQ00BZeL0+wIBHSjN08z2DHOp14bTtMBFAWW9GafurTSOQ8j9Km5A+0Omi8aCZbEOXOjTpBhn8KidvDMIo9Qnb+IG+MAoICaC7hpjOMx68hfaM0/h1ymiFbbHOaJBKRUti0eABE4uT+eRhzfZ+8ee9HeG4H31YN3JLBgzQ5YPAgFK3QAevF9tsTBT2JSzq7TEcekHkrvmsVYBZSaNRWApf5eWBoTEGjJZxdWyGNUCii+sxXbGIFLeFxtynPVcUy+TxUoAJC2l9+fSrPloiQmQECxx/eHKr3bFJhjoMJeMJVY2wS0sdPqi9t4WTCDNscEYKXtBTMvY7X/CgFwR/BcKgrCn59CA8zwmakymjUHwKyAwqkiIMhohKNgDkmYsOKu+P43TBb+07Wgbp0BwBwDpo/OhhX+0+HApO08ptRD1ThU4A2mBEDNlUOI/5OYAII59qLbw+Be4m/3/Rs8evQnhOIkf3SmRiMFhwqjRx3jBbpLZmswfNgbNhrOjgbBvPw0IrEfboOhoAqzg9H/jiIYxq3dg+QIHYLqhMaYyAqPGBQS84cbH3fUg7bXXDtEF7fPH43L41DtCwnE20NBJKzXbFbuHF3LEptwW881SBTYq80FIyGJ/Kxy1vxPsZE5b8OktKoeVSBMA+Z3MgBYAii5JAwR8yAIh0GMja3JY1NhqbvAC2NVCArGiQBD2WVbAJcBIYnqS7YANwCNv/5yLQAYEJjpUi2sXVLj7oU2vFPI2piWsa8Z97omNPHWQoGuCmoF3Eaus/Hti/NqzoOrlDYcKCGrngmBFRObSSDkAQnpnwmSK023q15NPI8d3lma60vreyIcWXHTshvMfF02OFvPm4VrJ36Qyvr8CcFsBM93m/8W/e4gkaV76460ekp10+3sMGrSy38Dfbwmi3ulfDQTThNUWqhMuH0nZ4ekBrqQQEHa+IHP+MqUpWfHfxRm7yGs5Qdb4AsldhgGBxhr4yHi758U4b3FVtE0TdJnBOm7Y0Mos1O64PhryWcJhmLHL2e2TE56xHq4CQlNzsEFL3SebO1AwaDUeBsi7q0Bcz4rru7DwZHssZxuyc5ZJ/6Jfm5QBeH0ZhMhZQFDBR7OkhwF1y8zmPPCkqTrwJJ49Lue56ois8CDrNe3JfgIEX1sJvjRSOrtlECBS1MHEnbrGhDVvI5iwUfoHcGnN+rizkhx1DmLgy27u3Z5tM0DoVjt9o2f1nGW1klDDK2RSVgvJgLDLN/UJI0LFpsy9ngkkGAnRBeRtZbs0uqpGiTkjrhMNuztqmzmSALOZ5TWWjSfSoLEKFoVv0UpFmCtVHAKARh9eq6803sSFSxvqk724n3g2pUaYgwGTkgLD84EIOgGL9CbUy4RE0qJ5b3vZgyO0/3h9ICCyhgYfad3bCVY6Vi6wTuZZnVriASjl4Mguj9nMfyKcZjR26Pe93I9Q8r8MWnbyl5KVvkbyHtXvnJVsiYJXO5KJ1T9VWg7fZBbAg55n+6h+xcI8vyD04n2CO/3smFywbugiVhcAnVF2Pt9KJRX2zfj0840E6Kr/2kiS1uk5NA+uDDizI0waJIA3lrGiGJTqw8SKHV9myI4KZoYwB2AvprLvfC8aUDzexKDV9wOw4wtyzW4+SvPBVxb1+iXo1i5NXzDYFqLPuHQblbBAxHwDAhWo6ZRE56HZT1D4DUOjxwTQpi4owvgmF2Y/cUwFFf7k2A2kIuapIAbn2KOfFmWL4LzAxIlXl46Fj9hLKPnTPZ3lyinQJ3u/hKLeDrwPbBB4L8DayxoeILnWVPN4oOvTqc10D8e0LIWrn70hX4ez6a/Zig+YdydMD1/WHw5wrimj/4dmPeFC4r9wxrDFnJNiU/N/+HI9pfJiRy+QZD3Xj9FwtMgesvfkQLE23crMpdZ/K6ecN0Jd1diFX8+YZ+XEa4X8kl3642uAVDP6mGGEZF7Ku4uhKEfMciftC6zhEQvW18qZiVu2DcSlj9pXeaJjJ1kzVb1wcGlfZlfPn9Idkg6SIZljvTQN6d54gqD2OeAjy3i2Mn5jx2JqN7B2oyQiCDjzh0CtF8VE5PLJUkk10VVWh/aufuUz5BmmikqGj4Y/XJyJSDzrbcapBYKYESY3cifp8cR6KiWmTK/Aw5vKM8nL76WQg5mV+zoPvmx1uPaRpVVvg5Dciyf/nRrmPPl7+O2x2czPgPPFa6sUPKd5htET5Altpmnntayus+hwvdlbNHwGT+HGjG9LITGAYYI3VH8IXS7EkHHlvHcmShPmYKAzI8L0LKfqwLhDP+aL3r2VkgSZULoFuBMBD8/P2xVtdDkK1QC8heY4GBigDj+LiTO086YsdJQ8kup1KuGIjNVLSABwC6y18+Zwy45bbG+rRlpHerQam/ohT6s0wtXQGsudyhmaN5+cc1XQ35gPh1POYyGov6DwXqlxKcXHn90DOYmR0n3g9BBFvUfS9YrpOCbsZRNr2TTiiZUopZWlU7xJHte6DJFQzLaoudwVqGun766voqWzXRlU4HpuBMj6F00QZoKAfPsuBhHWP/hcL0e4GJau5Sh+zcQLpx9u6gKwKGDRc+eLi+/gX59KQL/MpLcC5Fibe7D8fiRw/MzylETL9Px86S4lj/OV2WV90Cl3/sdxnREgqRsAFwQHFyuTI9t0uOcJZvWiPRPsjy4lHPtayMNsBe0MLay5phGr+tlqf7jRevfgrBudefV1N65NRteCP2+G+CNRM919qjVZTEEytilMYTfZLA1PQeJ6c/CriNu0S4Iicuk5CE6hN7iC/GjIFFBQ4ZMfmWd4oziEECieWBVJsjlwxlTEEcQHmlXy3OsrmU8zMXtecDB5viX46lPBoShoEwghF4o8uuHrKkwTbxYdiDDgIMvuiBLvRwFkQJFEmQdtOzyLGsqU2EvtjKeRM2lmVyrIxxYCu1Aqu3p9WnKW2Ia0+L1ss5ESRsph8H8pxfgKZcc8ByPvawzGRBhkVPAjyeXeIQE3hOBj68FHwOB90igXjup3qJxLW4xNmos4AKW7HpS9RYQOS7+1eUYgAlLwZpZqwASfzHARAAwtuA6XvUPPp4KAGijXKXXDStPB0F8i6cGY6UkJTAncExaHa1ekiB0bPYyLQKYACpWgVtNm4RoqNcoIARAYEyuTletWRSuCu0C1HEO0yvi5RUMFGmHRNVslkA8lsRCgPYxSQDuSkhB7qmfrfiMebZxcpjn09O1axdzHieXtuOo+jMJxbWOc7CByPriXnop/3GxD9xyCq7uXuXOz3b3mXcjoxu+0lmsIbIYdySu0a3/mlkc2ke6LfSutl0sl91YIzonBDvMykxEK5sNDpCcVFInoaOOP/lkk6fOUaaS14wEwikD+cwkVeG4pPjyfewkaSe+UFe4+U+TFeWzuKG+Wr2/cn1N+YCRElt5Ez+8F1JeW6XtKYceSeC2hOQT+bh9eIcCxe/cGLh8WJPizCdxNFrw8kEP3iaVGnIC324p6szYkhdtZqGkgP6NoPi2uvLeYHNpvSVcnuJPVxlqAEg6JIx+OcaqQffFwnRnX1KD91SojZjJYD7eh0oXn+3yyTKKD9gFfcH8NnLEwALoqUrbZ5s+Sdf0TnhmOAZOuOb9efhnpVciG/oM6ccuZzpV+PPMMtfhNOoAEzAg+iTzHB5henJO8/pbwLjb3XrA8xaRrcCDD6WKCxKQlVYxGyOfyL+LwNY8mIyvlNbNLhiqc4VMYVDtQzWsf8V0fy12b0g5+OuYfH6i/pWbPeNOqW8D1VrAOhBFCBfsJVDRZhkjWdRfKvDkw88zo44wfoCRJc0gOdkMNIuamWC9GVhmmvUWD4smAg9ztdyBIz7q0HytAgBDBQCEEijY22IpxcWZKJYlyDEQwJvdeKNezkFiJQoHhnSQ41t+LBrxEn+pskEkPySp+10LAJ5KAGjzwP+YZVYk8K8CgEge6H7XAoCnEvgy0Jzf+qXsXWNcrlE2SiM3iG+gq/iBZflBJB3VIXIFMgfybEjze90smnETbFRHvMYogOw2MPUZOkquQPEKhwAqvrXZtCjHGRNcxLDZ3iIXkzGsJvmrEfO5EepxvORUYgCv5wDpiT/6LB776pUR34klHg2lkO8/qT8TyYibk8DRVEhAfikbY6pfC8pwLAaATCEA2KsBx9DcJ8L1NpBI2izQOjYQKLIBqrbldxFaNPoC5IsVCEwewMTCmxvVy1ORqYhShq3Dlt9NqX55rxCpxSdMg5YCswqJIUjuGlXPS8Z0bPa64eaACkd4f6z69MRbaV2jS3+/oF9cNIaCpOaSHLY87uieXfXCAJ7JAgGp6GliNtYHnOBDPXc+Hkl//OgxgKO0nyqVBBnr9s7xP5D6tliByf7BHuQuZRtsYS1Z9gRWXxQ4/YT64kRJ2VYRZeXg+6cu8z8wq0QC06DjTT3C9whbsFHwfYOjgLgQCd4fTrsTVFme30kcWb5KvxKiFS+4LC9R7o+unJpsK5eIYFK1K67UF12mV0WRWo6kvMJnaadoG4mwGmwmo6daoYnzfSli0CyLLx2U9XQVtefPQbXghiMOGNn93Zv+nEBF1TMPXVUWxWkObrmip2OZrJjDHwwi7y1OTbrPAvunqUiymUl2MQIfIB4efHs5XqE+V5aT2cu0g1YjN5ugqm5v4ZJ9mH5k5Gf9yRsJMWR5iK+TTE9wU/WfQ1ZQaDULX9hq1ABhnW9vL+tLgxkwUgTAXQpEn3udwd0dn5nDBnWaGK4iJ/2VXFDArpXwde7KBru0jzMCUA+O6B53SEV7f8WvwZRWlnbKQFWTD/Wn0CU5LRknMplX5FvYCU+VmulDjweXsPcdj2MWwEI/ccFiDsM4ZiY3xNwcAH3CxSquoAOauJMBvp8Qrr6a2MPCosPtm5fA4m04ycrm85OtkyxUgAJk47SlyHsxFnmlMEVCyrSoz1n28DHbEfC9UotAbJA3L4qpFceIpLAwdzcofVGnBu88tOGyfYOdDfaTOy7TMl4jWffiOc0h9cHj0NIT6eZVBDDTH2NtmCvrB7njNz7NT7fZROAMFyUOnMMi5S04p9/0ULFJiXMZioTcFTyMgadaXB21FFLPxDdlX83Q63PABOD/DADz9uyWU/sAZrl/u0NjL80XkidYvOSk5RbHjLsy5s7UOLbXSnlzgwCoueQKqgX+7JeUmCdySrdcw2edEfeWci6iO/FlqDeEn+dsHIn53RLqrBmoPVKWqgapjsVr/JY0ni8CZQuy9TEKbBmXfCqMk4EjQSrnWiJrStFUX8C0tGl5BoU9v4oRwhIg/SLV0TjcLLwLH7IJIqFFAg5vHRnvidyTdINm53o2nt1r0pQ058hYjR777CgZjE7gcZkf9E84qNYyyB7+eA06D6fOeUlsXvxaK1nx+QX0Iv9RT73fJNEp9vUeSHSVEaADiiCK6bmPKQbvH89GW/G5eBSmq7zWH7B1xcAgVR/uiS/cLIbujmk8xU++Ai5zd+Y19qK0T7i60dorJqXP7j4w7bsQo/nHPYPBNTd/tI76P7RlnEv7nY3cfwUcMH05nnaT2Dm+txdYrDxUPl/Rtf/8cY358+3t+Nz/A/6Ds/2lmTV0bpih/CdGM93E+6HDR366HO7woLZgN95iNdykO5txY7A9DHz3yR6pm7MQOzjcNEs7D+3J9YdY6WtKvcdYh8ELM+e+BP1nvwS96x/H8idjZCg1Pzs0PmYAfinAvmVLHqGvfXzXBaO7imaiP5O0v959DfdgWlzp7KB540zjf+n4QhqA5P5Wtq1alCyg46U3rB0a+m6jfnkVgWUGHQ8CvN3rbB/maDy4prMzwmLX90yxV77FUHLlrdpsP1xE09Gb/87zwgiQM84XYKCNb+/m6HCx1GpzxnFY6FvIJ2pTw9CL1VknRxy4frhca1UOYx/uWjKVBbhTqFm7NXOlBRi7pg51rB7D9shfEV3E3DSB05CvFxin5e7EUGTsRoCrIAPj9pVdqwyTUEyPA8VkDhSsE+OvFsegqA6HZXjlUCyGxbHAOroym+RSdm53L/QwjgPBmRIs9GpBtB/7eTbf3WPJDtuttK0J6eqQUfeo+JnCe3utwA1NvQRGY7nV4SodzXDMam4KcTxCh96Gc+pMrjnMDDYZSq7YLnWUy4mVwAbLS03PhaZgWrx23XJI8m2thFNUwXetVmV2hKbD34uDXvbNDTNwsxEcNYICIVisedm6mmDlTVP+2ddp5EgF+qR4DooAU9VyJP2q/oIMFquWhfxHKhi90MU739RNCizwnYje0F49Zp3AS57mq5Fkhp3WfUV+PirtAchAOGSQVeQH4FlwScnBID6oCrjDVwDTdD9utvQ7bxLIPbrhN9qRdeA/1s6wrl+LjZFbxPLAES36qYH0u5ByJVcKEBvR36ZQz+b4zXj+sRn1H7ut8wDd37Ml7zT+m+U8CZvKJ6NZP/1xCG6bPl8sy47xAXp1ZR5oH5pHGVwgIVWOr4pszc5+CNnf3mlD4bS3cg1H/2F2VFDavVtv0Ok8tPfdGVNZQHvxa8gOBZBYHD+3hO/Fcxyd9ULUMqH8FiaA904JPfTu5Ba6TM5G4PuBVJGAz1mgb1buQn8tHwtZPcVttq+HPYmF9HlxL+G+QE6cE1Wv34vTTCEtNkbY6P9soR4AtIUlFvEcKYgDxlx14HCwNDsHD9dCxDd+dONBJ54YigjTNWGQUAzIOctatI8r+0IluXdKA2M2WtJ8SdqglZRrVFQtyu4OG16+oUqL9lsSPyFGhsUNle4ycJQJQ4Zk9acon05tgD56oVACgUIdnNN410iCLoEPoA1W5c8FeyGBJfo8aOicuwp+uUURzdqSMyCimrcDA8XNgbmO1B7bExBcSLLGCGNB54f97k6KfoTuFuaTLSyWmGJ1HaZBRg8SHzUgwoCPWjh+hjDv8fbCzu3tUkXO58NPqqOUV8Z3w5lnusX2eGYXjhKUdD6wSbgcLO6cwkWGdNf0kGVx5/7kxXvAPNzJVz959celEJO1igq7OAZBycv/+S5fd9Hi1qHtK0uSec3C2tWManfLG01UQzcG0tc5KLnKMEDM1uHPtzkpRt+Hfn4oVGoeMEoalPGxXTxisGjAT57XnaxB6RN94Jevv4IeWT++7WMdcByAMSiYERKAReP2cTMjTMiqn8UDqO+CrS8IPRh/CCp88+Fg6lNFP56RSR55CnrC+vtXbTPW1+icHiNZpGrW5xGL9WQS0Bc/iAdKiEx30AZ1Yp2pEzNCB0961EZDPFR1/pgaS76QTmJWbhSuGYFHH9tS5IQeqPkx8zSiKQBSJ94odIFeWaW8Mn2x1pERQoWdBTq+29jf72g18Jc4W+saniW1/SlIgLUeq8s9vjiMX0QwCoVRbB1vd0t+/J1fGtQ0y6Q7zCx79kA6DGxR5l8dzjkoqinM0FrWyj4T6rxhTsNF5N6PXosIezfMt4d7a/kUjBewMvyOwmDOI9U+KG/0n0GdRb5Q+jfNQdHYwuEjpUbC/ij23YKlK2WisgFKtuGuIuVMODmd/+yEy+rJePkabuy/najEkkciNX9uiLTc9WUIjsiB1bDbzp/kafPpmRInM0Dg7zoUPL6bIvuNl+zTT44LB8Rx7UXE2jagbDD4x3LYuX1okdKwIMm8xAmwsyDsl8BWmO5F/QOUFrIx2oBkG9hNzuXrqKtb+HvqTb/15PKeNC3wkWp9djiHna1Np4vNSsNJgP00moCXSEeSVvEmIsmqVBBK5ozfZIlz+mXHRPJFW9QQBWBUUqKKbKAPqusnfxxN4sw90WWR6TJWPHBeVCAsAKvhW35QLXiXr+rVkKYsM7hb8+/eRzigWgLJ9tYE7ovPM6J25PbzCIszMY473XILsLv6PKZOzvJ8ooPf9DvrCX4WNxu3CCy5giAetcAONN1quYMkoDaJLIQQHS8x0LieAkaxKL79H5HoJhi01/VcRcNeY1plg8nVPXLNl8W88QXn3JbMkc2hlbnytIIYkRhK5IR266P2ueBcziUeU6HlBQhMzs1dOEKUrJMozqrnSx5ahhzPAIDcDsp/vFllGEILFWYKyjAxBqJu4138uAxEV2C6L/S6zCGshnn+ESF8fgqCtsr+YWqjFmaYlBcEjW6v0MS57oMfcvgpQvSbX0WJokgexzsZs7U8L58n13JANFsaGquSCSLQcQOupzjSdP+9541t9JswHAJT9L3DboA3wsthjhuUHbWtIgH4pkyJDRnoEZ9bEQFFEiZJoNc3cSTnZebfmLQkWqyjg+EzB7KSQF84G6CovScYMlECR0bjZ1Z3UQ0m5h4qUKJVHmdLtpF5h2HPcRM+evqZ9zTk7oAE+yvcNFpwlwTNtqkgmnVTanwn8nXQ93x8uB8u/psW/pKYalPUtb2i+5bJJgTXyDZc7T6vuzFv1iF1oFJjz24t8UiodSPZYggv7ApOa5zOsHp+adoxF7Kmfl0fbbFkdYgnbz+G2f7TKm0NonY5n8CL8MWhAbK2iwY0URF0ckBqOJyNp+qLUBvelKgtZi8GKZoOE21oQw1cFhnP+dNOXLg47czFb2V9rlD4tAqXNe7xWFSEXnLXqNhO5L7zmkMp0G/0RpAVYMjdQHaXNwwC9afKrMd12HBo5Wn2vgHcQC84xNVjAItIEi7qHGOC/Amey2tANMYum7TvPFLpK39NCeoZ4iT9FXc8IsKBI9G8oJt/lIWhckMIzPo1pCaaywQhXACXKErd29ZLXP7HBYIgm+DuTmnj+U+HVdRtW3B+xev7Z40j4WPwhP+Y22y4xVO/PLQlSvX6gdFkJaSDup5Fyq27Cwr9ofyz+PAQLsAXBE4pKqe4jvsKbC8bK6D6ZYoiJgfSN5ICCNuDeQaUkwxG3LKIklMBJDuunupr82EL4Qgp4q0dDyT4NHL7qcGhjTIUhI2uozmoQ84Dv3VGGeYqo5qFhudJeeAJoSIdOBFkOBiCNYY69yb7a+ZZvjMR/ywZVNrcJ+1ScFm4PZmp5zWzfXEiLOZTIpVwYjm4mKsPaUB8q/nqLHI/9tDnM/vtWwJcauYR97y+iXtp4vehTKrd5Tb1lcaJuJ7Sj0jNO2RoaTNr7zfCqJ6zUvevuBDqQsrpeMqKE2aZaR9i6x95H8w8tanrIbWU7+e/ehg3yA/9wYQx6xYSN6WmW1nu2BgbDir/G33dGuwBPC/x2rMkeUu5cUz+/9oo53+NX9GZbO/roQ3+5JrnAPZlpcKUD3mwavH2SRqTPn8LuiZ94drGIDwcliMNkUaTokny399qNRt/GOh8pmimWEZ+6+zo55/u7mBRZYkuG7NHoY/QXec8Ayuo3VB4mG+7vwcsfV1VBEFyEAAQ/M8odHcAKvedlSKyOa2Ly3DK0SPw5wkQSiXm/4ELi4ZX5R3PDrwtigbQL4A/Atxg94z5o+y/XeYPTrI/zCuGvnYRugNOCSEVAMqyn9/RQUi/mzXgIvS8jnBqEYuoF/yUdLMuJ5Lv2knp2thMJj21QpFPOD0BIqBZKFXdpE0Ts361BNdykoobMqPc1EeMwGMel88xebM0Z1BOVV4I4vK72W23yRTQ7YbYM+km990dBSoBMgm9Hn05P2E+iCMqSCjGWnZwWNhQzIHC4Y5QuT1Nm+1x9glfja1uJK7xEQgBfKtsOueH7VoDlXPk9FdSS/rJaMH8XqfThUNjv7tvgcYfHWffqGP/iM6h+DaJveDda0VDxPh/d9FN3n5AQE1lprV5NT3Cz4zzjV0IzXjrJeUmWuNy3+5pgYs2i9+vhFqTYxnBi5bzMwVfhrsihZJc9mOO+vzJrdkxQzj0pRPFGPL6YlQLxrWIKqj1rr80ThlfMxckMiGlauQwtOP4qIRkCnc2jHY6Mi0hprc5Y3aA47mFIUqH32wijjN998Jg/YyL+ejyzVsHiO2E/U+0UdfqykrnF3oBV7oYsiyZpgl53Uu+aN5rw7lW6PIwiYjLbWL59x5murl0QG272QFx8ZYM9urtLgKlx4p+JL3HmW8dBAJgkZGGdncyNWXhD6HX/36S4iMA/CpUMAIOFmA8Zs7AUGMuwwsUw6PKItLHC0BUJ3ub8tn2vcqN9dCnA+wnt2BFW9wuQzfhKJh+OjJH61AeAJgxwtB9wDMrOSWRq9wznYWJeLBU/s0oVaekFSL0sEd88TtdTfXLOcbZwSvbZLbO4iw9NJYtvSWCbYxnkM1Ok8lKFPi9L3fjWRBeTvbir3uFzeCe+dQaRjuA29AmGhftHZtMLFhtQPJ9JdxSbIw0N5iZcejsTeTDc1Xwh4uq5uOjuvdQPvnOKdQS8TOzWwLZH5R0lxzPfbF7nhme5aGz4MbvVRW2dpzjYyG0U2CH+VmBl3HvyuCaLRCak4EtVUXQke67Ivx9k8GcMZ9xm/VJ7VD6uu5qE0F6bM4/UIq08/XN/kjxm4PWxS8yvXydscI/UE6EOkX3IiJjD8mykc2HUax43H7wYarJmeGwWxx8V7xHpTnPJQ8VKJKVbxQ1iHRU83wb/f80L0ek+cDRn6bD34PijmfAwyH8euY43iVI4dTTHOYYjHK+kXy0AP/jh93O35I8YpKDnt/57hZRQDsf1PykiUbKvLDxqRyyzxaOJu1uG18bf7ssxXwXosP89FclML7o9g+FxulUzZz8LV4wJoZ8I1wGKmNzEVpdvqCcm4SbOwaVZKD34nJJK60KbstaXT7UCRAJONHvHHiQvXC4ZHbsPIt1jFm6Sno9DWYrl8UrgS6/mQfbA0X/uEEcu9vAzMKH/QeGhfnz5zYmbTRh6a6fU/qXijQOlqJ0RcA3J7QxxVQeHe8MkXCDnjxBHcuUuoGuBvxC0BNCyqDT/azNVvqnB/BUaiiK2pJK3ksa2N+fEkrtpWwleBS2alSwhHaK0ujviQJLUbi7X+/r4A+KKoy1Am+LIIUH4fwVkNpH2g9W/vtSPh11IAFeYX8AC82RmCwdvyb856hgK2OMztO5A3mY/F2zN2DryyA9ze1Eqh89UyqWKm6BnWs9vh8xc5uMaSmmBzam06+QeRF3vf2UX6Y9yecQlk83qU+mfgXhFrkwckPLgtoUGoC4/XRQusjVdJCjwYrfl3dtuWGPzl7IeqPjbO1tC7yqH34d1vVM9rT2n2mKuG5nrHyWTcCqvLnnK6/CnvwNKkuKCo/v3D86vYLQxuLDu9CB9nMFWewJtG13L5BOLCiF5OqN/f7332sRR056foUvifXma/gVccJJBpQLHGeTPbg6ndAtbQUtBBVFeRKtv8vXkgI5ReGOLqA/a8BX/QD4ey7CfzXAX4bv8Hu23x2gFuqRByca5oeInbdSWB5y5Lpz35GT/jpfHLoK0e+5wtAg4Pf9kUTPQBb/vb7O8R8B1lvwfhJFZqJVE60a5eLNNZJ/y7oOm1zIW8VV40h6DYtW2AWOSqE0n53+k1D1YYANvHHtNOiG2xhTc4eoNwmbuBo2N2mEpQa2t+/3qYnIm7J5rt4Mao/kQUDwW37Qwx8/fEwSzan1O5lzxCjfwZLue3TAZn65xppq/774kmvzSTXMgxcyA6W5ptJrCgztqGftcCSCvUfx+wVRZ+C67n4QlsZBqAFCWzcIM/2gA4xgtWGMhKFBpq377abkuPhQXICTGemEarGAFQjJcQV8I1XDRVqNCsBnh13yk/y3tK2NFoAstK/b34/iQZe3Cn07UsLWD4itwQ7Epdb6xCRpDIybWrXlYDGhySFgm7V5oJnV+Q8zjTt8uJQXCgAOedAdYJpcdQDm9QP0zZ+GQS9L/TFCfhHaf0r8zO79hAb8ksEv2u6p2sLfNRyD6RCs0dL+a1hi5TO2Bx1CEwmQa3eIaTiYtmMQVcoYmofN1v4D6FoDJAcQ3QCOQeq4Ie6u5EZO3rm13is/fuXOo5B/qvKe2zTu5dt5cbv+ycsR1FdnITIxH2GI8RTdhLczDiumjGFue3v6dQU115iWDXmlr37S4L3202XV2xj4z/2Ra5DuVt9rVLzIVq1073kYnz15PynrbzlNxII6Pt7gwRPivwdjAKAvlFMHv3BYGuj5r+vJL+apAbw/DmU//fVhdNgtnLWqpxCgjpyky297F6sOed179CDWg/l2QjPM/GFpHw65Pfgtwb10aD/E5Gd2FDcAEIpw7wSNFXQSPbKWCIwL1e5ITs1Y0T1CdohYe+ZhiOGXeMTe/tbHNPb6IG4Rjchy73yIuVI4f1B+3Cg1Gvcw+iscLMCnVcJgdfBlCXxbMD8rGC2Y496cnrazmSBtF/hvteb3NX6Y6wyzJV3M1wOTfyFsZ3ZA9amUEYPiWPguNk/J9MN6m9jz1RoOgVwa86JSxZaSQXJKjbS9GXboQQWjQ6UQ47r6icGWJs6ciqUmjlzxv0WSDRbReKQNt0bSXKt0H9OX1KI3tiy39pxRG8Z4Z2Sa5shXD9XPJAS3pecqsGGjm2sW1EqJIZqFyhVOTXhKKj3FMqbk75g6zBWAzxVPe9F4w9a1Yu0o1gX3qSFXMSIYwSgIjf1Gd/NUcIhhQxhpABUrNmpjqPiOUHrTyhmKRym9OBKWhNgurr2JyUUQauy+rd/jtQ3sp6TGa8+D97EB7vlPnPiBDRMOI5AyqUYKiy3KUNCW+G/ClnA5LI5RToK2w7cylb6sECtBxox2ondlK1euEKs11pOgXcAssluNepx4A+dl60OIxYrNINgxfhCqY/A48RabUbBTrBB6VuywaxDgX1F2gp3jU6YXjfY4cYsZCHYhN8qUwQ04Wd9p1OFkh06jd5zss9OoxcmGTqM3WPbVadTAsu9Oo1dY9tNpdMLJxk5th5MdO41eYNmp0+gZlp07jWpYNnWKT6ajHnYq3/fCfJtw71NGg8x3ysCp6pG6stsLk3jkuinjFuFdzUgscrt7xh+P3G4vzB+L3G7K+KPMHzXjl0fu457xyyL3sRfml3KmyjDlIp2MBrQC55n9RFvjo6eDrgTnnnvLY5zVOs8tzpFz6AtPM1oU/7H7neApU2jNL9WM/mk6UY1k/5/p5l/KNWCF0P5jC1bS2XSr8I2NLJxArhEjUEGFM1aUI5pVLNwKWo6V4hYRihrihyvbf1LY/916SLrPNSgojhQRLHrs5gVElEwThZF80O0Djt4bTFAkoc4dFJ5wE8eRckSFX0Ghsfw0bXGZTVxD0aghASKexgqC0/34EdEJSK9iQbpfcaslsO/VyEDV4k5ih7gp6bNe+NoOrwX0zvenUOk6sI/Vb6R0+JV1Ron7ET/e6TUiBixzwMDC2SCQiOlAFosQ8vROrLFq4RAg96eeXrVqNMWWNJClxS3YtK/WsjyZGqF/9wokUFTEYXRmAizilAjMFEEKJIiw3AnsQJL26EkrKDT6BgzSkk4mEhGdMIs4RSF4JLjGAnOw9BtYBkXpUEM6K6yaGX2rPngavZETkI7NQhRyjQiFGNIP/4iUjpS60T1iUdFSHc2EGa7sr++w9VJbIc6BiFA429GKZeS1A6pFZvA+O0SzBkd009DrH5xFbBf1CrRMv/+SuK5nV/oC9tFfEIHKGSjaiORvOn9nycIJiHCQa0RXEFzru5+y83Ogotn6AgdA5VQBmZhwmkGMyJSGNK65JSZaZAcDyjtEYphNlL0IWcfA0RMLykeyUPezQdppLSTp9CuXrIYkDaYZuFsLdnQjPkpKkL1wf8DbyCYyVUHRjv7emof0syACo+kCbcI+4YW91iRuNyabFkab+YSnY9UeIFIsFzo21iVX4gPuFHsNHLvdcvrZQwuB+OsFo5PWcsAEZUSAcqzsiLGsJyus+z2t7+mdTccEhRbxn+DdT4Skxb71o3Vs7ZvsqbQN7SJ8h3YWZU5RiQfiOV9QKylRJSNIXx94z8dyI6hwMsCF9XoB0cKLG2JEsFRR5NZ+EsgWWq040YM44lkPPOumSC5+NTjZez2wkGZADlWelQSIuB7IWrCGNTlQAXZuK6/jbq1l2MPw6nCHAQpOFwuQkv3wMCKbNiyu10Q3T8iRnL6RTXlEGzSINru1RXDaJQTZaeFiOH2/SFdSdN84RHA34v7XPEpCOwEoPMUvx1vX+Ho66/547mRneE6Q73JR2mlbn6L8MGFWZMBEfOTCvbV8A95JSLs+ibFUo0pCyoKYm9LHDZb8dieCyL0gIxzezgYZpaZ5/yHMAjmjyJACChmFnCAboli7QrbX+9r0iGDV2IhJJIFUy+vxnJ2WdEJN6kYTVe3kCosYfV8CEbCB2BFTizMa8ZQiC7kCsc0xBFCEiIWVGmmqDinwCTp9Z2E/jdgvBDy0asD+KmDxQpzIYRpFhUKCBqkWS2JoXvLWIDZg5PDpeaIusU7rMmFnZzOcowYU6iMpYwUC2hCKFYJCoU2yq4XCTAjHQqXq9V0u/E8ZbfVlNcA/v1UdAJl8hgifKpD+WmUB23vchHXa5bVEmaVoG9Npppe6nS1ET6G+lRhVmuMo/br8E7NgkJ2eNXGjB1KoT2hO8iVtouw+KCyghMphD5xHlcnfCNW9a0lZJBWRbRGMAvQrTlPi7AEEdVKVgYdWqcbS0oxgIbr64zvfqiGBiCGDqUSc3GCBgs6nEQoy0+0DTBHRXhaX+GwKBUu5O6t0+8C7MVH1+U61X0yhOJkiAiuWsTLJKlCya1TuPTHSONREdObhjXDgkQ52kV/TmWO3kwB7q2iRlxQ5DSEUm9pdTgx9eG/GcJc17Z1Athc2A1jb3rkwix69g8KcMEkQNoARSpEEQyBLw3dFSMTXnLNY5GI0lQE85L0LknvGLDitgklI4I3E8tIJfh9Fz2Dd+xzqcoR5QEQqMJ0Rge4MmaPqWl4KmDaWMXOgQ7LWD2e/MZTT7wmM0B6U2q9FgOn11ku6ip2iV2ufTGBe5jRaOt4s3mPWDZtbKwvT/aWZ0Q4/5hylnQZUoJg4RQaFnskwuBWz4BW01cgmUi4EgGRGZv7qCDeMMpRMhROLvglht1k8TNrRY4y2auxbyDEIBlkrNbbEIaM2MYmWlKOBeCTh7cu2TRhLEp9RxAbV4Qd3VJdvoTiwwghNcVABXIjJjBGRWAYS8IxOFULfBeuvfPvQoCD6vfu6jtRQrkfi0n4x6R0X/P8y0iZBj1298ZKnr4tXbA24UoMw6JvBwP99vMEsNLVAo4FFH8cEBZF7uF+0RWV31qC9kdXOHTwxbqedBhtGNXhU3uyMMnU2oPn4xcB/ByMGWHbtq/4/xXj28fou1ZrwI7qs3AUWqKGEXQjMUAwebttFdy79A4U8SghxjatOARcWnqk3dazmAxYlmjEAlkQzBCy4SVWQx7p6vItoVl7n8NsAkZd5AIFuxYxX1ALs5wBBevynY8HOSOS/HYHjgUV55hFuK3zDqtfxRjh1+FXfU+slwAyeAbUaknQ2xSAWq4r5dPkKSmb1AkTSxJgIdUq5CMTPB3kvERtAPV2XiSaXUkVpLw/SdxI0lu36dREpR5KT1rIX2MRrAXjpyhynJvJjq6QZfGhhl8N5OYteqVphZJRYRUZSJJwsPWGP6AFHW2qfAi8sYf1rdJigMMKxG2pJT8RE/+Kb5yy7WRJQOklLQJy3zULcSU8txUIyKWskcWWeQtZyA0wkZ3E03AuqEEkuza0te9kYKiYBgkaEzxYLZH+fXKkRx6SFnvOlRZ3ayaqo8duxftn+bvSQbKH5xyu8BjWs2090NyanB9D+38nFOI/bEKIRKFrEQnhNqomlbFu5nPquOV2fP/hcCjpNFiYVT/w46gQKyYHl9QnBoLZb1+2vzWi9Hnmqf1o07WzOIoEvYVRQ64mCqoiC4lql8UVjTeJ+Z/0CEFHKFWlitC/cLZQNpQyoSoUimknaiq5kHsVkNFg4uczDkHzrWsMQFxxIflE2ReWRoZQC03d8qRoU/kp+AblU6mQbuMXyV7IzmstuU1i8G+uP4FDtH1eYwJvgDc7aVSmcKehg2XodadcEtPZ0QLjqNFIuLeZgRGg7um4fvO6/pOBw5Ytyq1FGg+vJY+XHUmRwvSzQvjgo2KW2vQXsikiJrmymq0qEb2dvDBcd6MilOhULKNY0jPih8TJNEh+exPUIMEC8kWEodmf1QTtCWwhAGZ6qCLYGZK0Wh74RBSBFF+HLRCqFtukNif+2GTWS5JDdm19wAT5l45UjMv4lGhMIP0QRWSZ4WzW8uAGFkMiqwHVyXKiCSSKJmFM+2SIvoXnL4EllNlpQTikCEXs6RUU7PgU3jmxaRUCsS7IQGY7/KgJty0tBiCyRBFFLcxixOril80AxPTGf0ND+nyXmlzGPVfedrpI3haRm5CS42K80uCT/gbqcOs520wYZFgqgdEXpDWGwbV6r62zxIwG1g6Zdz1B4ssmReM8Ppvw8IHJUuBuMHJex2NV0nsnW2A4pzZnIwjQNZOBYtKqPl45uqkPZx9aTdFktBJJNrx+pvrrg7YV4HxMYqWr/7rJbqmpw9Ix5vHdaSv0vKfZH4NirZ5zS+eXePbpbxA5dvVA60/a7xrCeAZeRZhW/Ert+zPqkSVsjzM+ZTP7kya3h6Qh++yChCFrYGVAoStV+6cSQNSJGe80WjGrBG8EcXqpQPPjSmDHLUqdo6QnVT53C8z7b8ZwrweDEylLeC7IzbS72D1rRcGzadd3Xu2mvQshaz7btSoI20jVsnIbfWZXTgSCp/5VLDDUbQObBh9CAT5VDWZT3HNqPPYX2sABlhbfZpRPclz/mPNCmsgiKwksVMnnTAIKdajWpy1OhFmGvrYGydrhSHKLEJN5bTnQByidZaxvCLdI2U8Oxvab59S7WbFIuCruSmIYns90g+hkHUzL9uDpUy60I9NKwXA4akV0cRGnPSX6ZPCPUalDCoW9uY7g/gZtTBhA8FmlMj5TivVs1NVhJFFsoxiTskuRuhKEKlJb18RZDBGMyT4xw9eQ8k2BeswbRHXqLYwtU52Ujb8fKCBY8hqzDYQC5v0CIy7qM1iJcyWJsl+7QXW1iXbcO0PZsaxsBPFAjJ4DdPYgGeZ0MVYkMP5mODaU4kr3HBLC795gAeAZ6RBzM2WAzcI/EAFobP1UWg8qbCEiWo3SuxVbLEE90TgPE7t4PDW7L2ihKgO62lcoYUpQieCgiqmYNIpolBNEe3DlclS2swWNLVcYxqKF77sXopq146k7RDh8UMQ0JEMdPJxG3R66jNAe4P+6P+2AyWU4GtZVxDo5fjbLH5dkOeAGfth+nUdHfR+mMzmCtzHCOO6aDtd6j7ODofuuv9pO1mpfiA4G5JBldVSKiv9ZC6VLDESxSB8ckkifaJRgdo9M0wlSkarCEt9PY/AysTYwEN0AtpbAbXSoziQfhomUb7GEngTQLNlXPaDTBgEmlXKMOEh5p6dVU1tZs7k9Iu/Mw6+dt59QT3xCJdkeAB+SknChCSxUFVFDbvC1TJQ0bUJqhiVazwMohkPxf86/DT12+qpUNgXr0fiOi6DpZnpDl8cfYcTcO2leywBOlWojGnhUDd0KPlOmbQ+9uej0XqyO/e6UzeaqEtLTp54Iqjg/R4KlYn5REKZMqsJIKja/19EwFVfvCJWheHqHCSQExw+MgaIbqo8M/AIYRWrtAPU3h6DK4L5Zrff/wWJUFvl0xABaJgZfHkYLVQvzculYsNokRg0KCqxrvqkoXEdncPmQtfNuOWKTtt/cpuXuvKM6XY8oVm2AIS1BrSUI+JoYFLs7wd2Oib5KOLuNrQHBVRA3E3O2kwJCY2whqWhhUdJkjK1z//tQbM2eQT6L7qbfxVA81q8ma033uUlB84l0lbl1umaDQYzO1CFbLM4gQHam7enF3NWvkBlpqFetxARHrUbq6NNqjEVyhOJ4JW3SLrltBcBOUdOMhFgKqUQvdgNaICE8vGi6Rar4idTvBEgRxta8UsT9BXxXB8dyI0ySvaYej0WJbhUlCu3HXhkRUQ0EtTnqTjV6iSSlJnZzPBD3vL0LFqokNTCqyaMpuwduAilWIQtHqOENgobEX3ISWmesj4DnSSAn91bnvDgEc5AwrFkJGDuOTRacJ1Ox1qi8nnp7liaWGqFfF51+KuHsntbg0osAQ+iXVWMCKTUJL3f4rqY8GcCMFmOJJlTKjCZwy1OVQfMFy+Tjs9kGsAzRqoGuRPY6eTeWPTwDwRWkIxyNVeKRlk5FPSC92rIwOTKIcy75lcNZFdyyNpjFjywibooXl7SsW0WBLdGFVtIhNseU52B38LHvSZPr2eHhNZ9Nkm1AiIhN3Lay4z0CUo6XFJUGdlToy1iTiScU2zmTAG7HyfHxdwZHwn+kCkFtAbrFW8CaCduz/7X9jWcVuO4MgG4JTOEDEgmoDCjJUdNzwpW9lZ4VPBsg3xwE+gSBfH1vIOXNo8rxeBAa1spY5ocARaFWWMhLmCcAOB4FriZFBEr/zQySB3tMKPJmUE5GfLDlvWaxmnNJSB6EAWs93EBxAk3DAAMBoJu3vwjQLr6YqtpSGOx3qzhhq/0QlGg5io+x/FpoKncSWqjxeZ62AIvvzpxW73oX7XLUfa3uViOjjb4TNCmyOiIwE+u2M6gYDiZm3imyi8NTEmigZaxC1Veei/m9zef4pd7sz1hTbnddXeI7ds2hM/gTkBUt9dd9sy6VNEonTVPvbq/Ymw/8nqn87Ai7aMWTQzb59vI6I75TmjObRlRTqgCbF1SlcYkAp8Lq/vP2SWs2oYZv2MJ5k07dhv5+RFn+nfz56eEeUTMY/oejEdREubpPT76MeAkMc+S0jKaRel16JCHo2lEBN7SeGz+771JIEBR7sAXq6RfXH8yPVMy830Q3uhps6K/VrmlYNuHLFl1tfHH1PF0/rdtX5jkTejgQlj3pBGSvIiiVB+tIUhWqPl36E0SFfCFZcNFOUAqbXAmBwVxDtcfcPcO3ykwsn2brzyzVmCJL29NIIAWrQ7W9/QL6vuv7lHWuEJDrpckIINLi1x10jBOQT0fcS+1Y7n64djW8RNV+BQuEpkauJ3WnmBI0nmBqLxFkXOl72ID1YkJtzDrmLQPlTDXE6prhnKP5BCafVT7BY2w0zQPxPYVJUUMQV2sqiFXRRV8Sg/IkV4XYAvcJyxARAexxkoTGaW+TFdfpkbCKdQ0D2cZACabF1UmAV1orznuhPlh5g1m1CGIlZYaDryEZ/9K6NDBimoMu2ARWbbRo7DvdrVIIQAJXzPrFG3XoGEY6f8S4hoORWglBU/FOuWajdH7hEG7ls5DSuhfVzWxdeCFGY1iY0NnQEoA19ECCJv4M/ufcdAhFcRlObI6ImeQaSyYo2dvknWA6LgIyYj9iEomYzi0HIrpgNB/Z1nQVD2W1vBBLmKD0RHspxhCJBHdCG48meyJJjD4Ao/8Q7QGSHOJk+CfrEe5PXTyEpcRKkWuUYs87wlVbwHQiHPqKhklmZKRgrY4uIOU/zBDfRud0vinMXAC4pZJfUx+p8AgsagXxCAgLYJTLFR75BmOar1LG2octv7fHfcEFGjKsgFQdin9zgS3gT271kAFGT+aBzmuv+RvBaChqSpNdnp/nckJisIttrRd49uzuEp1KqnLSFOaQDe7dOKHW8HYOYGuZL8g1CMlmNeyIThxrnynmEwCjYBAIcjjqCokrMw3tX7uwobRZtZYeGTi0wjkBlgmcywiPWvqyfkKY2EWeU117bBSjsIhCwAU7PdZACpoxr4N9BMWT5BmHbvEx10qOCUCz8tkvC1Ys1uummb7gMgubKrf84HMcW9efqJ4qSI1MWCKmjZIsitucRQucYmWVC3zEC5zNjrFKG5IqAE5L5aUS8huvSZdcACRVoZtnpaIBLcMuvD502UBEb2fit8lxYFnPcXjRUq9a0TCIF5Gws69oVqLAKxNxAIsSHUlyOr9ZkCotRqRwVyQUGuCUitHROm+OgO6MuqflL5Sw8W1N+OQEfuaICahlTRxNmAq5NELvZnFsaDzpXoOTwXaW8sga5rcAMXRRiVPxC9206rHbhy+KX9LQSCDeF+nldAPFLQRQtyEcddOX5GxgoFLCKri/++TkGSMrHtFxdcSWJ2rFyNNNaCTUPP7RYIpl3X+X4YRc7zfNoL+3/6LSyJA6iiDInMtUF7/zLVz/p+DTEl9yQkMQhDu2HfrtQL5eWNyxycivNsfLGIIBaUdqnPt3MhzFjf+Rmntnon2kOq7NpXwZTU5PbQmTqR2iEy+CV3/Y8UXs7j5QK6vhlwFUllFxxNfDx3uWi6bhDMMmgyIab0lRXFBXcAzWJc7ANwOvUAJ/dslhba2u72Gh29aL6rlJ8t6w8cgX1F06109fwFmP3RmwkifN2hJpM2bKBqWfr3eIkUs4Il8tBAJxtldcZgf7949SNrJfzgvKIijssmBzM2Q7hcUnjl3xsJqqNiijapQNQFvJ1ijm1nTmn1Lwc93e65L/Z7y62WLyRDGdlAoK3urn9UZPMgZ5WExyt14iJWUmVVtQaLawT/OZtLOywf41sXwjTiRaBW/zcr2gjJN8BTOcGECy3BJX7E+9osXNrBr6gOX1xybP83iwKaUPrJBRAytAx6oiQcH23Z5mEdsMMtiH/w1Vukha+ugPG/viLfUjBI2DKVMBKdhR8cSYkAFOoQIftTekMaWzv8imBGj+yfftUOVoCDZ4acwcMeaPK9j30bzF1NXPHV96ftBtzlJzhR923lbd90qayyxMLSMUbIKfhO1WIKNPyrhzkFs034U9aOEp1OiD1H/EsxSgfepbn4MvXSf86YKU8IbRg6nc/kmhRvnOf+xotNHIvR6b4ByIZCejfT1aTRHPyOVWH83HZ9FCpxeR1fDr+uZMknXMJkEjm7JLY4KIxDiu0kreCNZJC7gmsenC+uh3f3YoxiY8dQcpiqEjwo0sL6dmij/vWC0BIfhK6DwG8nBuXYzu3EyqdJzPpiJl8e1CiDnlVz0HLgQyPNKQ+gzjYwbIW6PprutNlTfapa1hWwmXeBBqNbtlpiCKrxgWu9dWqqSD9TXxacKcoq33Kz+L0c+a/lCQ6Q/6nBTCSkwKAKFD1qpfGH9ZCTIoGlxtaAU7aVKQW/Y2rqknaFQLaba4CTqtJ4szZDdsR4NmApq8WxX3fYs18OceD/jce4trAg3PkoWsTQuTMryQ0EChLoMAnpCyE17cygc6Bi17LeddmbjbtwSns/RcgkjPvV+b3kQMHfXTY/1ARlmscNADZQ0CuuliPw7SDjbDGw3Ds49MOmffv1hzrk5F7kOBAVMYVHZQ1BliaPikfjEyCa1nexzkdNxHz4PLzmV58ed1M/vLjcZCyAd41PcsOlHB5b+PmrtFFld0MgUKI0mlSWcNY3qMfa6UenEIxFNOkZYOcplywcqZA9CT5yuQHgafdZkm7NBkTqrV4T7JK+zNzXIhVuUNKEtQ7RxN1x5aLznBAvexjh2StXksgvM7Ox7l+Y4UEIgnbAnUDGIMX4bA2aKT5gfXD8h8hYQiRt/EEMA9BAtXJ1vXAYj9sDEqMRyJcRAzRKMXskWixCQjwEGhleDdUEYdHcvdXWoCQwaeR6sxuKTSLq4rcHaQWz6XXQTEQlhaasy6xP4h72gA7K9BMepMtu3VnlM8rS38kB7sLklWkBOHOS045UBKTOfzlckNWRPdJ4BoVsXZGl7xLKPcRQWtIktROdpZEfZMrhUDXOLQ/haDQk3LPDhNgBt115kV1poo/iWKf4vln2f0y5Hb5vrZBajeGqOjK8pgU2FijAlsXJxTlq6YdYwL9WuRLG07Dsp5fX1iDVXXNDtTmceK9tlK6IIxurUoYt1Ya/YSPQIspIMBjUYzXYGFahjSdOF254oGmLHqNo00XEwLbncCU7MYIzPSJUGPfXtt0cye/cEI7P2OSqYH9Ufs/lQj2OHYPDicxBVhMBZHrKcy8PiJK2gds4SI/AptNkDgf2PbuyN9CeDuLNoFJqTm77ZL4zLRqKNcRjwQCM8GaRCy8Vk6KboR/S5arId0oOY/5ortMu92vF8Af1uHypIjrSJDUQYdMmQEbzgojCF0VM60lcV1im/8wDnf4KqwVmwNPzFhris4Psfuk5QqeyO/HfR9XxA2UD2pjI+gmv6hQcLqqIpuWp6tStatCcEdLZntern9zLHwpopudvfUphR70SX5Wd/gOmcERCU3pbPWcAheLv4wW2Lkih2zcc940oGBNPU1gO08pl+l9jeGn1NTkuHn4enOwBAsg49+GivVcY4sDIR8jRko5LmkbVBDXMffcM2pjLj4cUcd6JTkdPUPfB/OPK5uw3AOgY5mFz0updplv4eqiIz3a9QmYHKy1brJcF+SXwdndihkLbSIcK7ikDrCf+iFPDIhzw+fUpSYBVT0qxs/6zAi9DpyWJh0Ngpfn37DMozgkji9kMTWGOTl6MPA0UY6AYmaJwoMsWmBvWH5PEkkIQg90drRH3Za4vc5TP1CKBXZ5SATLXVpzVTcW+V3R/cuABo0I9StAZh3kyifuCWDwkHYHeA/l1kN6B9DGrXrycUsP3dv5HJ0roW2IZFuCyyfdJsBgdNZke8yiggLxKIojFTKxDl+TQTDRIpPwM2vU3vOGl4tuhtcmsT3y5dS3iIec/859HCkKQbUBBJXLEe30AK7WC0AGoKOKqnR4QsAA/CKis9we6Bbot7iqVRDFuRw030d2zFgQ17YjpVNW1pQJmwSE72x5IVxYTclChJlxLB1QpC+UQyG8JCQmiE5QOteUpLVzM5DlQ6pPR/4dlkAoJEPyNEoVFjZT6KplZJW/K/e+kI2B/Z8OEdrn8kdzDyILqunYEv4yaCowaIDTLbKIBWFYgI+vyem5D6th/GahtAy/M3QlNqD2i6zkPiy+IL4AzcXHFPYCYK5bF8N7d4YQiyOSyl2oBGIt4YV6tP49QazSUqdNaq5BxDjC7BpS56k0jddXMmeam5iXfXBaU+KMN1TuezFhgUUu7eT/EoomBei2v6qMX1G32V11R9RvtYrPDDUaCe+fLM8J2Fz79xOvQiRB6kC93tbLPb6CgOtvO5vSeKaNkOqudvfL/PJY35EvYWNFyqRNOwU9G5EkMaTIiZx4K/m6GhkufFrLyHFyUpG0H+yz9dRukw0xGGg26SyYQkULrpcMrxt5MeWCCNiWwT1J6mgXhUD5JC0OFnZL4kq+oL1fSl73Hw6CYk0i6NX46Nfk7H+6PTewOTpZYXfNrtDe4CsCEV7+OFAit13ipFqQTFTTaA1LRd/2D6sHm2MIJUYzFmx1iw5Wd1XJZkZRYntJQGZelhsEpuVJSxQkIS0TMhWq8zrxKlwct8Ok20IYSyt32zcgFGjuXDSr9VNk58U+ZlCN5Sth2i6ZzNMhzg7afgjbx55h2XaQNRxBTXiHKR5rw2bSjeC8UqkIUHDKQPFt49E/xr6sYLTnWEtWNM/bvMl+31I254mpEjzhyfDzqzQX06mNKAiKwyNEwnNSA1JoKQsWC6hJMAWTf0Kv2hXqAm4f8Z5UWbXnpNBDVpUjb5Rcr91q6u2PtBQca+5HBzAvwsA6USUhFFXYel7zqjBQsR4abyYG7GsOCwHkDKs1QuME0gdrmNNtfzSzsA0i/AZgT9SYUq9027SCBvW3Haaqioj62UFWosMbHNUbxT4H4kugCdHzhSU+ojU+uFzptg4POt/f/FDRrOKGprNOxMDepjklUdv/VnOhhgiYCirOF8CiAqbzPXntlbe+SEVcpR59AIR+TnM6Q1ZKxi2AyKHJbr85kuNR3RXY3aJ1/b630B44d2lnVjrZqrwR5yg6KIC/eg/MS5XOGsP5LvwnChv/PoXn6Kbxqfpfr2yiTa8SDh3aJGgcI4SjOavNXZBxhLCHhAoh9gTXLloDUBC1d64Dbn6it4/Tc/0BC4XZ44DVItO2NkOkcz5WtnWYsVdCZsb8C9nFBne5I0ynfq821SKNtG5ElBEDlZqJ2zaVsf+rRYRKVzQ8S1umlBmK23/u7eV6olG4PWlPVmCXkTPl9GnvfiFHsgo/euLp6jnmUAp4Q3xsYvknvuI3tlJ8eku4oWO4OfOErLnPakweEZoaMZgELf5ciEoKEVk25d7zgAwTKhq0CDH7Qgab7F2Luj5bWZG6hmDKWRYlaLnzZVBZ9nIaNZGbvpjvVYKubvkTiG61jCSa3MEOZwDY2v4uYL0qjNZmC87WKnxH65rjZBy4su3KpL/pW6HyWJ318QN4Fr5MxsEDGRllhDGRGPe3iYw/nuxUlqNt3jpNXJp8FCt824Ev3VJ3agkpZ5rehlonFYjeNyesVw3izNlY+UVz5V0Fbhi4Z4N2XssONRhRiUczozk1IOZuIeJXADP9sfVYcb9DDgar3Y6I6o6cZy72JKT9KFIyzaqKpYuC6knGhbQnbQRq110tCmJ2ZmYbk3dnv1AYaZoM3rh7XSVbaYzvFzi9fvLFR8bbmaG4T1+UC5XM31T36yvczlkDN8nLJZnTz31IiP1apS9O4UYx1o0M9nWbbl/BJap5QGMpRdyGaodYNE46zpQaU6vePTQE6tuFppNWhWr1LtIkl5JLpu/4rPQibDePYy4gqbbzKmjool8AktZqRBZ1+MIqvaNf460BxrSCimRs1wHaMrrlsxeOqmUMy9e/cGyXMVvG8/LNy1guX/LCucMybdY6YqSaW9XomZxWWgmI5bqLj9GRCKb9AEENJFoiUw7fNMWgneXDC4fmdeSulq984ci+jh5tGbvlm5dRl2964fiwjMXyLS+cq5ZxvUx351jssfF0Pt4rG67q8TvkbIbvyh0U0Fzjj1XEC7d2w+krh7r3JlwFFtc281rGDspuUYvnHyZ5SYYIH6KIOMEqTJFdtQsUjHYfCY2e7/MaNr8IkkLEp8g1k2LMXlWnFUmIw8zKjEJJupQA63WjMh5FiYLyvqwWERigKZiwsZpBdA6kVPX8G+qOxwnTGWF9Zk7lhNed3yLOAGKBBt1cEaMBTh2kjDbh95PBFzs8v2DPpDIUs4UcUfnHGJLkO1JanjZQOd4RWzMrQ/lb6DGhMPH9Pd0Bllj5TngsfHHR+YTSIinV4+Xo+xW2CzANR8ui5nOuvl2MhZ2e37gjbEeQc5MKFD8Jl7+QmEOPnIkwUAlX7Nzhr/IdV0/RiYfAn+xaNy4puaTEVPfrfTVy2R/9YjQdP3xGPLwjzMPI9MPxtV5juLpr/SuYy6uYaHAjAar/ljacCo2I2o8GYXFeF6uElTMGeS6r6kNNNtnCNWgYsHX64uzQiyNRhxPIzfvKNbEISjmhTo5k0pTVAC3/9NRv2u1OXdzhS76oXmqV59ifcUDcnbcK54hGEK/mRKuOJTO0tziVL2/uHSE+sf35z9e3QpeT/Obb7wVx4W+P+NX0MBoxGI3qeLwf0b2VTULM61VpRNH1+1i86nE+gvm9p5urhMvd0sA2yEOkeNJzzWmuMtTfkHsyU54CDsmTu8ELuzS9dfL02lpycvDHnEklAs8mPdzViULn6j0i4Tk+rDF3OpiIQTqrVxjBrycIt5Vz1lDRVSIBOEgQoLVj5ggSdnRgmXtsymxI7QsUKq6WwT2VCevtmIDIsxf7FzUPVJxabbPR1poWF64QAdFmw14pnaVfm9Eng/4nyCkZSeaWgA4mKRUhtRYJJbCccNuH+4C5e5vMIaLs/AEvBLkvWwOqpLfaFsm6tXy+ZEE8LUItVyNPRS1jiudYCRiT2V9lwLZSi8MMhxZbIksJmN+SxNIDbzNKzQ7vhocybku+Ba7GoaRRdgogZMHSdK0mwyWSu3h3vY5oNLQlqP9Qf8TurG+nvgMOAm6wnldvl4t3ICo83ICmiGzzgTkgYkTSXs4v6Kn6l1Kp1PhK+vlOT/dlHTuLlCHi5lVXt3jkGzd95eVWmp0XZ9B3PjsOKawz+bNE2l05rIifXwz0387/6Otc3gU5+kmVZ2Z2cCPyubRr9ccI2PMgllTJAfc50QSrmijxQxpmTqNUqFjgh26/VKXfrKVpwVKJ6VBkak262Hvn/3BVvi7OqSKXIz+dTsMGWZfWLLPvrPiXbSMa0emVbA1yFuqo8Rz7f3TVyyIUyRZ7BqGYkDn+5qZIItAvSCdAvEFR1PqvmWWeUmiQiaNX8VXcIE2x5mUyxQ+AORLMCpOVkfEHwCZRAqnBuAI3slFo/Ypj2Tx2dIZ77A0JMl40qmlVkaHx47Ek9jXvXCoJ5eOY4oWIANnvpgonT6Gb8iAZ+IM8lBQ2HUiHCxXwmU1mcQ6RXBhTig6ud5IMtF97642u8gEuDys0mlgwn8RWlwVKd24fH9QGIFgh/VYGTw4iLUqwsLoTKjVmAWF1rsAX7jNWLSVXSpcX9IWfVla93cK/33QEDtZ0snGffI7H/HZJ1x55Mf6GlFRA+KOJuMWorBagaOnJPnJNxB3+h7ZMd63r7CzbGa5Lpc2R45gfIX8+Z1xlun/Dp2lO9Vh/9JVGTGQJnVj+uEWJj9hGRtjBNivdYIqhkuSnIA67C5UVUZVLP5xAkUUrtIM3zmoPkyHY0PLD0ZPPMlIzQqlE7XOu2vVqnuEyLIpbp5hhaHEd+3d1ClbQEKgjrloTaqD43V2tVIAcLqFTdpWojjggNwtAlpkCPwVJy0LXtCIG7MaqU13LsmsnmN5SdaX1iAvscP+e+AruQ4OKgkSpl4W+nQ2oSqiPllNDbLYM3X5BR5HkQrkN2tOYuOXkboxQhn4kUfzwhWrgM8N8YBVX82yK4x8y3TG3osQwvPb8YCqhsYowHPScU+SG2sgDH7KBXT7BhjGii+BwcT/M5gW60Mb6+konRKSggggpdSKWbTKNYi3Tmduc1/QyZ8X6poicKmA6txgmo2wfwJ6QNdoBBivuz25hOk91rkW80mOi2HM7Jp2YzZonTqmCG61UUhZpcSzru/Lw7JY5R0pt5KvfIOQhUb2zfxYP2HCp19DxW5OYkbBTktXX55FT0WKkEbwQB4481YST3SK6YzfjxfeiXkVWKnQcTuSqxLJmFZ5C4QFLpGNj/2QHQ21FW6kRdsYbYESNHOrTKu43XbpJic9FQfrRCEtWfDu4242KBqhZXUmrdwRmVsVAXDzZI3aH6M9mmkAcgSK78pTsmowj3KDQVQFrdd+lL2PN03XA5FXSqVdHe9jBqcZC8SXAhCr9EtyzcBIWX4VrsPg7Ls58o6sMS/g+Ia6VVtLYj6Px4wnhKtfUcl+sjUmeCkdW0W9XJ1zhenVKEtHH303uNCY4jp9f0ORPSnJCvitpHE+KPCGMorFvjNXY1DdqNWSDpwvDbn7zkUkMm8MZBC0ue/0eoTsrTRu8uhfwFyURl2Bvp5vCKLDbCRYOdocmctC52t3LyCbjDc9AJjdK24qxRJ8AVrjybwJMy3OHFTXhRh8g2Y+5Lybv3T1bJ1e8JAdAqI60S4IVC3WBGMoBFwBGuazOiE+B2NFiUVAxb3Uei7ZTg1V/LbddvZ3hbZATLGaKH6TfqJs7/8X4ti6nxgQeOFKmPNqOso5kyVqdA1S6AjEnnvdULLq1BMIdMh2piSL60MrNeR9xIMVeqRdIKezC3TkmvxrSxlGou7LCTSA5t5hPi2EOBE76HpHkxphvoOyVUnh92izKFxqLkgThu4ay9ONk6XGf8ffvaZtJm9J10Ha2idriIRBs4pupXLDrXM0sG1w7T6wXfXBy6NZCkgE0mbX+n7bI/fkfUU+aEeMdkQ/FzA0R7qJt8HNPSZjE0q8rxwxsqaJqen6KRUuZtsZ6Shvw8BkupNFQRJyrTfPvtyP8yz7P5sj8e15cbXqTBdLfbGTzLhYRy6hwvGRYcolvgS53Y1jQeiYD/zrjCWw8sOgg7pa4+PTgmvz00JHjHCvDwVNeOgrg5edPw8/HJtofTWNxbT/vW1dLeakRhWd3qLOnbD6C2f+Mz71MQL17+5XnaFYd3pyJV2X+3ckWqEcFDNMR6yhHLGfLXtsIfAmbn58PKGz95YgbZ3gLEjOGWvWChjCtMObLDVoheyD/jtQUYIWwgmmWjIt+LGcpB8OrvFbwk3sDG7sqdNAGZqMQfEWgChvUheXKq5vCdY8zncWI8DkqWv4XrE1fKvx1JQ0rNsMhoOGrtuo906G07BEAcI4G3HlSz6QxGSO3S2gNfoLxS72rbNNGfQ69xZRINlxI5fkazypO+gxeFMqItHB4U29TS9ziDWj9jEUjpZD1BJ+9Iev3EBuswkF+w5QfUYPqwNm3t+0x8XgmxzCWd0gB/FOSw/ua8fq1SJcbVS6MCb6krZKPsAHXrQZzpxXomIqwN+Ks9olfGblcB2v+DpyXDuTSRIDtHSThKCnhbR34x2QtXHbgHTkKf84xgU2+e+7XYtDsXHJYXa2N4er7Uq7Qcm5Iqn6dHL4cUu05hI59tqTpHOGiVTm1J72hQtb2uwYskjVCuST5X+0UvnxO3YCh3cFhgIsZZDUf7+N8sXmZZyMei9udMO78KIKKTBfI93eiacSbdLOmHqWiEGHTjLiRu0NtSxvuAxLQedHESBK1B4uST51i0zEOha7mxtvf6odwujdE2JCyuX5TH+suAvx7lbVNMboVGbHT521jP8EVMoR91ewcpMJC4OnEHM22foZfq42Dkyi9stNd26xjHm4xNHJKkbZ+9GFuYkRivYgwU/g1GpY6aYK+G2nBGe0p7SuSCCFr0akVw67ehuUFsnr3YqTatVJRgXruHkeAScWHsLi5Wk67qCnRRavLrBXhKEWPd970mTrlwBOxn8KW06uW9bWOJPhp4KS/3VS1SiRK4iS3tuu2ZP9CV6Yc/6S118CmZZpkUDLVIrH0qdALyZiyzsiW7/CUl4Qsifd0kfZfEFrabaLKLT6BeEqQUvkzkFnQLOuO7VToW8DWf4NPVTEBu1kPe3+BYmRUu95XPUY8abGhgR+tT1Qc1nbvlvKLoiwEYcA8MVwtMnJlsfE7Mp0I/J47G7js9Qy/YOIvYheHCqcGJDHz7m2pQJViT4vcA7NRdfMzupXU+IrRgHWqws7F54Au2sQDCG+JhK9yaoiM3Cs4oZI0aMeGt0zqQAPASrXXBe0Qw7UjFpvXjZimtfnilhbRZnzyA4dUwhP8XcVNrL3nX8hSXNETnXvzxS2WKR4Yx9Z32Hewd3Ap0WVSEgzfwWR5izE9jTSMtocgu0GYY7GbuK3DeYU69PaKWwmOQPohog2Zcz37us0M8RwGk5N7KYBkhdjH5ZJsDL14PJzOMhM4D4jxvF71M2tCjpkKbftDTpMZb3LG1EIufNwQASustluZh/nBB/cEiZuc4JpEcZo89sp7p5NpCt+sPJ5ugLu4AfGiJyeGQ83VUsIxRpBR68MYIRI3eXB/zIhzBBNTUYfUujzxFLmza+Y0FzKROQYDYjpQzmYyhAAY1YxFJRgBQ1Wr6iA9CfdXnXIkr2AvhxcLBCf4mpRc63mcQvm7SLaClLhUxTUNLdx8Ys/IiCPh3lm6W1CSzxaL05OVETIBXzVqv6DNygp5cSSuXbXO7mX+EsbsWMjqsxsY584bRLI80vaIWA/xRrRfiEytXE0MMPPPrzrCxAatxevjpPWuxfNPSmWGogLuTq4GA1YlFb/gOBG9NP9EynusQoN+4ELBX16kgfKsbZIE1cw4Ptkl9/hdWv5c4X3BUb+18h/O36NGCW1iv4j83siONrjSqTc3y/ZsprrxgirD5KlzcRolC3wnVtRdwp531ZTCKv6sSDB2Z2QbAE3JJC96HTuAqMqXdW15g2Wk6B8QeM04rUjzaVuH96lRaypTjrEwIr2bbsrAQCc5i9d1PYfOFkpuWxg/+MWXN3ZaNkO+yEJdZ1Sdoei9x8m4eq1fSb7E6VKNUckXAlHBVk9lbPRuGcIQ2SJ50Rjxz8g8gFNTj+J58kgSB8f8kHuks1zfLn0tLOmknVv5YkPlaEDfDpWySDYgdqTEihL+6xQJRY71qd1uW9zD43Rp6uT5cH3F9MxBst2MJvJDcu1fFHLUtKb11MVmbaMMQi2HvoUDaYbDVT8YBPYVBq4gvrp6PPII308/hcDKl7+1DHkiuhusU5YsgChTUwJB/QiI3jUh6PILQ2Q9XCkq4aa5JPbzdQ9AgqolXXiTd5g3yfubekiQRVEQ+9TK6K0KTeH30Xws0giPBx2fPT+N4Sct2KVHGoY5K6oBszcK3jZZNNOkZsr9zj9J18pJR0qMWknjInFQWZLscLltsipwDEk6+L7dAE68yPWJkTNhJm31GzC+lzwP8dMFShka18NPN4pEFwzmH+NvyGLv2mBjaHBUxiNx0MamCNV5BbYY8g0Hc4clGl6RmOqMx0P45yGrLp36z/Pr8N83vRq19ZWy4BEZFi1AfpMDwmEHXydErZpZEB1dMPJzHZ5927A1++9SaMykGuHdzyRSDw1Tlg1M3K1g3zjNCp5Q2DFTi+5eSuUn8idQv30uUIqs4tCtm5w3LFXogku0ifjnWBqL5yWRNBxXP8NGzmybKUgNXBBQhS1NvUgd+Rh2A6fiQj6CUudIHMWo1BYN5y8ekTcFDHXOpoXXWOdhVFIveZ7+uDXBPIUGJUXzRjOKGxaHJCnjBGIzB1fLdwtRuzxFslto7rJ2AVmC5weQ9fRhuLQioyCICwO0vqUHuD6+L4GBpuP0prZkuL7GAI24eAzrP8MIrG0SIyKq7o97BbXxt2Nl3kdARNnR3slmhzcSdBnpDbR+6j6+Vo+LF9b7dtlB7oFf5V1j29nbw5Un08I6bVefDt9/U2bdJ5PzMU4F7Ckp5K/gFiecPmbzhafhcDY4MlwBmgqagPpK6IWtOk6Ve8VjJBz5z30ldoOEV8erYPb8ZbDW3yPIFkt7mOM7TWN1uRx4oXObRa0atJUc2bOKlbAvy9IOn+BqZiJWWH1U0O8QEU4ksWannCEBzhtOqx/ni0iB9/E7yRSTeD/mLzDjBbz1lTg4A/slXT8rRtNT3PBFSmAszY8Y3sX3o4NLaJti/GSis+iO3ujk4F9IbpqXI5GsME4f87mL/Bx3dQjHa5Qi1Z6rCgDc/+BZNUudB85MJs/5oTjdXXB7kuEeqiVQpu6aeVgXki0L8H6J/Iv7tPzjEYUKI0ZBC1aqlPvOlCdY3W0zcjVi6pxTxbqWHhobnmi0mTh+SdjntjYUipbJhrv+4ReE6onSyv00eIrU0IUuv1rbBNNZ3z4aYc/YVZRSLbjlDnhCwPoiydddbXjqnkYzF0P6GBQo6OdUW/KglJnT496Ru2GNsBK+4clFJCJK+W5Xt59DfiAuh4d+XGXD7DbwN+RjqcJO2ypBwZqJuscDZ3whejjF3M7b/Lzsl3ooVj3lV6EnXlgHGBL+Z/oj5RZIYm39pcYG0Z8mBQeHWIjKUq1yEuZFWh2il+CUoBPIT2aMy9lcrmdoltkxtFguZ3+Lo5/Am7Q8fSl/LJ+9wMe1TNmlchF+0ErwBA3QI9nKASXHL9ZkrVJKeCxRIHC3UHpEdumQveVtwuECh9UtBHf2d2bwW9rNJc9+0d1nt7RrQNDvPdoe3SWX+A4K+qC6WFQIZt8QP860ngZGAjKV7cWDRdAXrsj7UDLhwfoc0Y8HJBHxXn9TRtaEJDlEOOdCSx5LUNONoFIjU8146y+nmws9P0B4i2SmMVHFjlAxfYIbJIjS6bcrO6oi+Qh7hMu1NyOqePCVftx+C0p5SMkSkiibzrUo1G8luSGtHdZMigUSJrOVxl5YbF9INAzq8tk/MIL5vbdj0POI2murPfGkDkic0VGZCixlqWwevCoaTM/WadW/q4c8W6H4v1NGqoBOcpGnKtwG6fyIwv0Df4HML7IrZ3cKqbSBnzWHS4xpvHDFZLmrQMh9KAqGq0vZ6tCp2BqsX7mBlYhCSAyB1bjWBBW+XSoJ08kleu0BrSy83CJNDVWo62TzZExQ9ZFeg91BBOTc3x7MVuQ0UsUzFAnyhXpN2jnNtUElg3TstmxrZ/PlPCiSYePOw5JwdcgvMQxf28FcNFEcCwz5fhA69rTvppSq0QYPqRkIZyr6fstAEE5XYOofmJlnDKwwKskIkJmh2vCHGM4Q+NVEDuE3miaASyit8Wo2yAn/fAnSfwZNAZa/2gQBMgiGQ6f5uPybfdb6yNQCheLBLb5WtwtR1xDkNKsrJGwhrpwp/eCcRUybwpf/2xgQRd8TbI3IHhYZSVBTlp5cpX49IbEeHWXVHD57MS55jwrdOsc6/ZHl+6EPpTEygvShzOhvEmm8hzmtnhxEInhpH8rUWSPlCht3Q65ZjiS0GHQNN8s1IbS6Xd3g/Jd5p/0Y/yqIlY1Ti/mm7i+vDvQTqIJq1TdC9q5Qtx5rbHxqwBMDJoy/OGl7BMy/6OxINN8JZezdPTsdaBHyQiRmCnzsJIn2UcrLrEAv2H62GiXb8igUP/oJGm3bPULsrx0t2ICsGaKNJ+HbJVNUSSlux5Clfzgmu46NQWpeEBA7NQ7oQ0fbM5bZeD5rOPqpv2T1p5gVzrhNz35/+l/EoHP0xShsDLIC4xtVNGlYNC6cF6oL0jL4XWedgI0NifApWfWrl/3vjY5DebuPLSFrQNowU0YDcPXYmCUqZd6OEbV5WXcuJKEMjb1MF6obgVDb6d60kPoUjAmV5klEtnMovMLYaknnWVQyvRz8VNJYZ5W5/57sKOaAjGVzGXNIwWGez+6nYFoPNnM/gymkURyrpTP1gvB5uR3WBEpVKCBqOMiaTmE8Axu1eI5SSyGSyiNcTwUVOo2Ze0OsgVZAendZ5R66WiwJ+fZuyjQUpRbBpXavXAV0WqMmbkVS8cJFs7FZNM5wbaIk9cfM14YPWQO6SCZzCTUwfX0zG9Ja+LXXuKdde0PQz4pL5RT5QklKDUPyNCjBSxNHGneKqRe89AGfM4H5O3EZeiA1rCw65A19w064EKWfkRCJ5fj1jZRm8/ecDLW2wS/8e5k4nAJDoCc0aTRlVRqBOOsFLowk7KiRsiPJ9yGokcck4zDOTZLi3G5oxlbm7v8QIz+OQdf9LGs5e8X+kUMGNFaw0Vnpnhk68CZUssSo1FreW5jJv/k6OdxF3saTHfLEw9oY/bDy7coPKoscrXf/OhJbPVbwxomey5R3I1aUq685Lfw+fQnvcAGxxyyQsDX3v5M9OjhyBvjFj6pv3p2FXhY+vWxUDHaMthYSF5vr+Qq/EiVfw+vnwswEsfCbXL59SfqT7/Czst3nraOtLROqYa63vN0oZECfvMaHFmIKy4wM1z9lGA2afXzDVdC/56e/REIYsuHPaC7ZbRaOvZjmrtoFmE8C4+Sd7s9kQhdbYVUWlpAg6IBtqb+HFF7XFRKntzPYQdZHH3i3h16XURop+AknpdUi6iB0dLQdTRRqAvINYb0rPcpjb6iqu4I8j2o+qsVpd2W0t1DJhBgXgJwGTIr+23km0rKH8xg9m86JG7ZKAUhSwWcjMCvTmKrP95Zaj73vPu6ODq90PxOJZjWJjY5sJbv3DK0mIidSh0goLL8Ub8IZ1pb6R9Legu8/zn/K4i8pxBlo4XIrw1d65ZyQDvqx0uxeGuGBMrgACRlH17ewYxFe4LVdNYbCMOmwychp3bi5a0iIz6lDbSAumXsm+Fy65IWFLS3L+BeslaExdKwBFAYXSXyEcMlOEYNRTbgGiWSiTrkae9vKQGiiCLRfMlvTZLRHZbz+SDD/oZa9CqUobUqlNPesURv0sZE1W3EkKlRa4E36zCn21PJp2h578Vmg4QqAAHCU8bqZXbhlbk5Dqu7aZSWRXPmG+U+2tVLEo3yT8IINJ5st1TZ4QX0pn25Bjatiy/5WaOcPucEXogOzzuHoUWzP5aoRZ4RfQ083Z6sk/Q+ka6OBh6yxOXn6MK6kjM+6x1p3dsRk+tQWx1ttBCQHzS307dllFEp3njhEeM9aLnX5Q2IA9zYDERgQtCMEWHmpwmxA6ZKXeuYBa5OAHQHzMd2APO3GV3TCkwcaVWJI49HEdr/RrhkkTroIO+6wgu6HIgA82nV3qcwnNLEzvpC3UJijzzYA5oAzlHXmXjnWDBjNhvri5xhG1GL3+jLcMz1Z313Bo/6nXwqksHdn4rQS+SCfl9abaGzl6jNiAo3xdm4CMw+T8YQWJbbClylDGtzyO9PwuoyEaEZ0lTEgyoEozBsnOhmfRxZtz4JkJaAvGfNPcHB4Greq9cnCZHuuBMnfNHhWyCBpivHmIeu0NKqzmVD0/P7zi+nB2KVhqZAyLkNiFwCLZGzd6ctAG5pybW3BtilY5bwUhgbPmVxSWNYo5oIudKbxHeDokAMrFzeSPVHesmD7ToHDX2dAAVqpkqT6BGB9Xi5CLq65mjh56sYsGc7hCjOa0+/tBtQ37px24JylVOEiJpyMlEGkXMrKhHNGJ2mtSUkZEexHNQXVBuaS2q/PGgbhAJgSyaI5FU7gDpEMmZ3lKsi14+JuYuSxBVMUINFSSSUV4xk3rugZibQKPonQdeawxNT92RLBWQU2wzmMdO4U8h7xNbFEcDFJBgBbtq3U7e7dxhwAqyBL3D655FRSV4oJbE/Ph6WCn5cxL8REmO22NSP7D91YHcbTfqzpuH/ht1ZSMX6lpaRo+SUp3VtJyJgskhTqljP9vjUCDmXle8rq/g2lAWuEsQmtntMoUACdrCq0RM1IDmjvhlwAOqSRoMYxTXqQx8Y40rU3joFcu3ofGDGmb2Ckphamf4jbMyXPAE95ciEPqxbfwLWCtSrTSHOH6AGtLMeuj6o8aASpFqcEW4cYpL2E64UQd8hAJ2r+j2YjNgUgMaU4jjQjNExIEMkgz5RgBqqW8Sg2pukTmjwnJr0J40tO7ykRzks2SkW9ANt5rYAjzAJ5GNhni5ULHVbJ2DyOKM2CufI+agBoXBZaOFTXM+XIk48yVZnx8nQIedrzhTptF4RF6dEkiY8xPL8dkq8o8Kw9cT1wP1Q2iEUAP14See+iHNo80l+G4e+uaVG/ABll5y1La7Tyqgz1yXtgO2heOINlcOMB42MRm/Pm33n3+Pd2nbyeSHRPVIyZYtAkUBsNUPtgHwwW8uDtn5TEyTRzy9drkevrchNpTGDkbde1YGDcAv2YwyTu0o7+gCddd9T4Rkhs6VAzbVwsbF4sc5AHtNY6xWz2Hyti9Ogyuz/Q7fjgFPPFnHbjjuCuTEo7gRzbGthfyJ8HbhCYFVCVOrg2lttko2diIZfYfeL/KFdgLsgbFCY9RMm4vcVOyQ3SsMBYWYLXqSVxA4gh0dSXadMcYdS3rADZxuMpBsa20PVahqynWueRlBAuXLczmhxl3PgTCmqNS8wk6JwW/f5SvfH3vVHrA8ASVOOzW187RSG4J04OBUbaUk0l+EPISs1CFH8kXBERnWngEnBDykXQghApVC+rFIsIbddJTQg1Qpw7AgVDstPpx6GovPJyiECtRnmGSFPcGB1p54znHnbzwElB7cI36JC+IWKOyAv3mdDHPK3eHHLL+jT3sZJe7/WscfP0TVYkSQpC8pBc9Q50TmNmGSz+WvZB4qqK3P1O4iFxE2LvO2PFUSNHf+/iIp680znF047jvM9fPzAHUrqFdIVV3/GMZqUFtC7pCN1Se7dHrxkFqrr9ZdYMEOJWvO/bmO8WzaIytMWo4S1nockvqp4K+Qolr2eP3kLSTMfEuMevYPIZQMmxJI71UZ8xHGZ+PsULmecXk2GhOkJf0H1gvB1C2W/gBlo9CDZDMittK21IQPKRe/Ey30hvhW66vsWQS0Hyun597BSgVNro9tAnRmtur1qrS1g7Dq+PUeEbLQPSKVJ9/Tc6Ir+bLIkx9xFKtBRi+5/V0FmpHoMMVT+B9gNbwmC0gd/2bhOXAiKnk1E2XmAVidLABI8XXw6P7a6qaBrEhu4g3HXe35xULLw6aJma8dx1yVho1HSMJk8VJGVJMcfffgyZIPhWUKFI/DyD1ZMSrLSc2hntdGKR7mpeaJccwoQeHA42RczAFEONla3bsptDGrQt16KXT0YlSht7zm9Zx3E9QrqLvUIeTH8QjIzziRpVGZS9PCazBsVq4Ag2NAZTYGyGmbe6/WYYFmGjOO+ZaCBclgJzY4wVtuGsoK1TjAKxi5vckT1dTVvNrL5Hlmr9lLhsQ1Su+lE6Ze7AVYKt3/t7qEmiaKysnaIGHi5c+ruqGEjJWIWRCSTyenLSbIpzr+XQj69a0qkC7x6fvEN61SfKRiek843JliRsD8/X4FHU93hQ+NV7JDJd1JHhS4nob9Tj3oizojYRkOaaHVjLoj7yMQJYeTFQtB9wiDKyEqA/Ug5cD1yXEzOp2gA3rgu04lasizTmNoKusLt0JCWagSJC+g6dQxhp2+1BMYU0WDc0jWMYPTFyQQyZpjtTVeHm1iFsBLPrCNgWNXFe3xHOQPoFRwOi3KIU/CIIrwaI/MaDsCAwCbewvMsgj35AINwcZY9eaFISLltjsSoGpfG3SCNsQHMoXjU+G1TzTpmHSuRVe399xmmMZs+JXzien9nCdUIWnLMYj1g7Zwyf1NNZG1dFEdmvjTi2y96Kb1948fiIO+dLOZtNBWgNWk9aHAYjWkdBNLYEInWa3qAx7MignWvmgria1ehR4mY0a6cEWAH72BmhRmVlGkyPRUSSuY9q78seGdq4KgvPYDYhOOix85U+HbZOxSyDfsr0ziHdQiahJZBO4xgy8/a3JS53xvSvVHjb78+LBNt+fuTKGd8iCkjY9N3jiyt3Sw4Pq9v5ivt3SsixPlSJiGyYcUGkxU8K/s1JJZEzpxR0o/wU5TwOzpj9XdJmMqPw++WN7EP2JZI5PHW41OpdUctiGsF/o5wDMF4LNfZHvkGXAWLEDAIlqpOKqOTFizR/ejEECnt+RPssHaosvRTc6CxIS5+VT9c0SZrpbLKGernTSqWvCRrpquujPa0u9aMikl/dSuEabAljpxrQFB0rY4XmShjtSEzv7fikLUpqhnMSBa4b6X0WENc6ezC1J28r23Vmc561TgKRuIkScgFTJ6wtOoV1RwIP2AqeqQi0aiXl/gXV9f5lff8aN97c1sMBxWgSYsX99XCcsrwOvSVA3VyAvAwSHJoeYZkbvdCa9lKPJI7bKGprSmpZu8PXECNiISj6zJVwTtySHnJF28PovEKQPGH3oGUPJvHGQf4d+AaI/kkzjnTQdrx59p5gfCo7tQg2k6JsKlOzELSio8M/2ASXkjoWhQ5GM502TIsx0fsSVecgEmTUMwq3lAh90r1n/zyRewNnSOUpNotCqecGPaCO/YhgjmvyyCUsIToJNPVKLkRR1IxFf1afRoZK25hVZT2XJtUjHFiqQksrMEK2/tzGjcDEERhNxIdBrbsWQBIkSD4TaTvGY72uG3myCKp8Cz8EGw3KY8ulTI3cgOjbRMcZARW7wKtbZwGhr1KHKHeqeE0ixB94uerCc+sE1zC0RJ6MFLgreBfMjafcDuVDYz1jG4rXBN0Vx84Krp+aVA8E64HwrUZL/IhR90WjEbxy8nbIDjlnBYY3s2zbXsnMQLZaVyfQ2z4OVWmAWqu0noEHpnhvfkz7GjUVg7mDR2K2fEh51ObmO1imUmTzZtqac9DsJTcRY83uG+ZAkxlE5us4MCG1QlfU8XVK8Pc+fzDWBv2hotMU6XhMMkGTFC9rAyKGG36LvCfcNr1wQkZ6BQkC7gjVkf6ic4IegTbqQ+NwEZbV3ZQzw9Hnxr96RAIBhAGjdyf7HL2lsVJb++qetBU/UVt4zcNfx4Og3Ve0/VLD7Kl2tu4eBGb9T1QmAKvzqRO1mdrk0Sfb4ZjvtHvVIHsmyBfBU+2u+5EGs/qKwZvMF3aYdgB3CupZf8kySfFBrnrq6Opeu5qGeeFpnGRwpb5ekXl/BG91oKeV15Fg+JzdHhz3E09a2i0xgPFEHpz2y5QMzdAN94qBXHQT905smSxDM5uTrSeD3faf1aPD6KmF9Sa54G2tIzvI8rREXTOEGwPgFt7RWBEePYl36mdluPQl245qS9c/re0Or06m33do40ZhBex91faoMPJXUoM1YMPkQbrgt+va72gfeQc6bSConEJ2VAF4IBz9dNlkkvzTOc7pRAnlbzrf3OF1q2ONekdaB057hC+cHrN3kI20Wh/3ekXzHMbP97YNgbsFx5Oe10nNX2E5aIu0AfzGV2clKuOCTuNHicHpKaKum7IipgW1bVc7mQofOSyLQ8fFcrkjrH1w/kZ3ndnukmw973AgmDnNqh32JHcGrzp0n2R2ZOXgyTunO4G4YFfvC7a6RQ2Cs4KX7cHtbjVUPtxCw14ZPVkq2Y6woAdHSPPzhIfKs8VTX/+GTta84sd7gVa0QO2h7a021nHTDHPoYMmkQ+CN/BlAoldCuTfe+7yvzsrSZXZn6aumfu2p/wGTYgEJMdxe4/p8fKe8J3IFI3jj4zLRPs/bCxcut87KdYoNamrpBM2pt5nJ3f5YV0E9fRfB/pZEMbmSnGNEn0DQmReZDSMk6+U7kJ+t6AVb0XpOjZG/+t4WO5QqlXMmWard/+a1gonGlum0BWxsKgYiKY42v3nygEvPnjMcjG1mPUZ4ioTjHh6bjIbXHiSkr+nvEMuzxw8BKPu5TgWFMnMXV4gnYQ8mblMyMV6h7+6NMjjnbISwpaXI4AYR7hTKF6hxSKuLcMZp1PYGsfyisue7O+zqlDmfZpB39TzoobsZkOd+yK2vD7+N5zt16e2ztMCeuIp9XGbJVGq+rffH/HxU/QJjTsYfpmgn5uODSZHKvJlIv3mNx7dQiXzDF+avsRhlvpnnfds6lq9TWG6Y/RKnHdMQiSThz/8+t64r0oSnWn7mhjeu+Haa+7a88Fp6w0d+s/USyfMx3b64dedWkVqXYMzYi9nLjmhDpolBuOeGbyeLURi625No5EL1TKJumR4ToyObkfFrutTZLRpFstusAn5+wY0r4CDFz4ncTVwz166dxgM9oQvPYidF9Orx6HbZBuxMW6IQK2fzso5U9stmY5S1O9NEwuoVQGwzZZXGxDitDkgmhcy00liBtiB96aHQHbW+JavCba1zyZDBicqUDgNl/YXzM1FLqRdR6Vkz9SkaC9SIDCw9GnZinrlGdAGX+k7eDgy50MZgrblhTyDGiYfMipCp9w84b1DoioUr1FFNTr4NKBLy5zkxHpH0uLOKEVepgaowKyRU9+nN+V5sJ3rfnU0aymBJI3Q74zJmgoKGhR2qqDNrU9PA41jQeE0FEWfeXjojzzxOjAzNtd9pvY4K7Y/albYbVLs3ED30Ud+bAtebGIPCFVf2xnAiQT9jtXaletFZNcQ0vGBO04tYIwEtxSBg0xvBf+/Jje1jBb5+4m+eChfApGWkAKPmF4TP/ZS+PBuMqGsXPyMdOXnEW4DsZt0tjyXy4nkCS2qjDBScYH5BB0c9C3OlMCbAFeQ7DKfVvEBPAuanfly0IQaA1n48ZBUFQ3pDBTLC2u5ZL0rpWiD25qhSb2SNMLwVXPdJoDhEtkGcDvVpA7yKmO5bYE6ogXwsepfnzjPemzLzUw5YY5qO77Vpi8aZFVGwHHGQPWv6xRXFszOEH0nlFUj/ohXIgUlLVV6tE0K6v81UTRDpmbD8lqJJJB3sAFU2oDM5iIZOX9xiuPrdpl2XkSF4mvHa/foQfaejJEvXO4wpKSVYWZhAlhGOFWgrlahkXuVskNUN5b+v0Oe5DJOjL70ugc37nuURdQgt2mx/Lj2HzNKAqV3WWwLg3PQYWyjlISt7bXrB4UCEuYmQBsqCnhfiGo22SKGNe1xynKO3s6IOIM3TfhZtlwUqzn4EQrr0DGZFigt8hdQJr8KQUaHYpT0aHhjR3loDdmKiJQkiga3dV3rQqhK4FZFwXFfNQ40RAGsNadMf8rMgxHeVnILxHM/OUHf2yNl0WIqv5FgJgp+8/lmv7bLQE+/GWeF3d7S+a0yQ1i1I6jdpKRkQ2yViqRlQrXOE8xYpMQJ9Fz7Cn1rdc7VdMHylnYXX0AiDdN6cYEDJ3wdev/a8u3ooCD7KLIsu+FBfd5g5iLpWxsJ0jCPBp2LUlb5LZRuC56gdrhq6rLo2xKIjg1c6ApLmCRYgNIInYv+2tSzBeAs0QdoGHCgQYFSQ+LAHzE5/8OhDd2Km7MMYAOooejxz8mGELFzfjXVyaqIGmh83kzLIsvlTehHSaiJ4R51MafmVE9u++2MmM+/TbwZW07kGIsptfiibe0sD+QnxkC20ZwdnntBM3zTJWDOU8e6KchTgXeJzZ0WpRW2uZE/e4yuUSEGqJFk9Hn/DEiqWVipkFJ1Y49XulG6uIzoxhOUW/WCamYPo2eygW9uCHg0N66jGfy/K+vhzpowlpQugz9B7Me7fR0gK3llgiORFebudbCz99GcSoe2UdByxer5GdffuxpYM34FCDRMGN8IVid6R1yJgGuUjTt69yHkDeNh0ggs+v0ZK3oDIeshr9RgypobZCV9b1naUMzt5eR3iOJbH/FZb0HhXuvXGEeNhNdEpP716rEmw9W788D+ekgbpReSTCokIoSHs6U1g6J856iF+gric93MUxWgkloBMKYHDNwwdmji86GsYynQaDt3Sr6Cd1cBuscojKiD8ggH2d+NxOJjJy2sP7kW8o8YMPWNhBJorw9hUIbWsD6/V3i2e36PwZbNZtG4bqCLIr30B3i3/6Ad/zOzfizss6EsRIlCWwr5ftwIzvOCxlb826KHuJfRCi/9p4aOQ+GZ8MQiX17H4IxlfHvGckTOQd99tKYP+oziL46J/kW8jJveaesSd8uykE4V5l2HAYP/sN0eBBWhvRkQsNbSbaclSSRrfQ9buJriAYPjj0WM757zsE43oDUozuuAneE5l4C1Qjti16/SrvLYOmQ2g2A5rNKRgXaFRdGQTNLtzl/LX8BiBTm+zIXRRB1NE729KmajiAnUS0df0SyHXJA3jX24dMdfXgvvP6Mdkggi+8R6S0L5YitIG9/WPbEKhhv8CE7ipsVA/mkLWKvEtuWYxGll+JjqHOyGxh8DeQ0+6PPBe8FPzz4D78/lsOxKMrUYidjfOyMNISFp1PQTZJe1l06Jb0ihdc3wevZyDnp/wWdpBzs3nP5IJEAtDGzt0RSaXl/JoYtkyzXU7JAe6wu0QCtjn/2IrUZj8rQl8Vw5rLJlU3YVSIgpZQj2HIf2n5f0Cvi36C5l9JdCuCKNYS2XWZY1V9aNXf4k/IdVFfWN0ej1ujFWIdjU8z5FpLAwYneUuzJUad4R5qfDKtXHqFBxg3ns2numqrYAXRf6U1fPeE3qtYjjU9HuZKREIx3Zz37LxApWN+VAjJHS8mC4tI3va9n/emk5P3OA/vit+u9ny/kNYX+/Z2vxMTNo8C2yBtuiEMo4ka23NSf7v1lydmm/XV8UOFgOY3WxuSKUY3sHTK0Ii8Rbu1ChTg3XpJs6iBG6cUP4738VOqNeidXv1GIXqwcyKvZbHRZmDYhdWD6tROfuOOitpzAaisxdF8uyRuKk1sjUb/8v6G7Ukf5XbRIyzdLL+iRzO2+n08UnQB6tTG47oc2FrAQNlU9rVOEt8Mh7X7K0ksqZmdatM8lrzDLZf0zFqnumSGANf7PhpJr31l+qbvWviPlHvaifgkPYYescuo0zVR07quKW7bgV1v6ZPd/l858TsYNbPnrnQWkXpFUum3etpUJDQOBelEybNh5e/GB9I9XQTX8QXgAynLJpwSsMvpqfCV6vv0qHB0j/Ik31FPTqoFnjk2/kaJZui2QLs1GfADVgejNff2tn7sD58JH9xhaw4UuokqSyjcC4IlsppI45UFrQ+9lWssYQeqn2yoZpbTj9391sEYG94rO1OnKCFVpX8VdeJ185CI+nU/8iTG6WbiL8MdpQO+vdsjreX9kOXtBaUNWTbeCAWmo18+zSgdx074oQgsu2Wa8JoiOt1ihc/9/C+IPpc5aaHAtjUF2Cs49DPn010Sw8ZbK9R94fm77obcLIRUIq8dc+yJdLWWvHoviKEK9m9m0tBwc7JbYYomo3jBgaPJs/qo4iOhQBJunvkrhhzNl1jbKQVA3Dco3NNw74cpomJAPRe24nF4Ztod/7vIkwttw5+bcoJIkDZrYXX5qnMHKbpymTTG0m6neWmQdIwmsCK/eFrlmx3XhtiNT9XeD3b51gx5rZ+fv3p9BjqeO0n4gPt/fvKDIr/Ftuzlzr/gUFxl+iHxEAoN9BVt3kNpnHDGzRWfKXmHVzu6+99vxyqgQz6eC6friZNly6sP3p+q92i9j34Q7EUR0esynCionDwERVQWITDiPTjypxuPUuWk0fy6K+aL2hQHp4LqokiMcLfp8RfKD8AQdc/36oPOnJdT0UHlcHeS7ZmRDBxodbxk51R0v01HzIahzGknE2MtXCtA7RKjemZqBiLuQg6P7FN2rfhCELxFkhT+EfYR93pgiVWekyYOlZLo18+SrJH7Yfo1qvlvJY4v7rtqVPebR9xA1ZFHU3b0/AnYbr0DBISKohEWIlH34gZYTD3DxomjoBCOahtxUem+eAyqhE87w+FlXHSb1yn61ZCMtJyefW7cUbZvGPE2j53QaEbTgJUcst2Ph6ROnPT11ygRkdqmPoc/lGrOST63FhgtTsshMLoulF8CB1W5CAz73XzmIbJ0Xs4uFJamYUcr7laH6Fh/jidTdv28eUIio57vAkp4xpo0H1tRsTCpg+3wrqlvT79K5orRYJgsG8JOQThTDMU+kGfDxxlTXZdnQ4TZ4JYAaGmzkhzpziPajOwIOCiss/a4pcqC69RNrePx8Hjk9/x8ELpEmjFcyHj3VoR0Ka63vnIJmkF+u517Hjg2HrW+RBQE8PGq4Q5Dt+FIQasGsLvvT0YyUBzPaIuY9mFSNO1lfcC4XP7BUE3RdjbuB1esKiSGVTJoznSrr23EsLXmg+jfE8OTWIIO4UttIpJJHdrPOMO7e7L4zIbDXjDWB7nN245ON7iZgwH+fD9Eh5E+AgocLFAeL3aXTw5/WlW+xfi2kAxHhCGLJoEUo/OTfIOQJxIzdz7qLn85Y9L1D6G2riEEYxLt/w/IkvTtoqmqMnhhTBTvhW8uO0f8IkxIzIrdnECVN0lGOkKhQ+8KARYXV2iTcM4xDK8BR2w75Yewk7RvsSru8rkDby8g2iA0wk25KK7Q13hHO4Jxo07AMtNMbP2jxYM+LNcANZVeVy8ha212DtZZEbtcbyJMoOXXGJftQARt/Wuca6/YdFNLwcHi+eZNNSXgzW53SzKeNRSLaEYAbGX5HVJ93SyO2/oZSe1SfQaGlCsTB8PYtSLnxDdg1Qe7OY0Zkg4DvGibTIXROmUfWABAkxyxu2txaFkt8uUFnvlhNmLWXK6To34lyxk0wswPuK1gpsUSH7OwcUw3litfmUVfq2xoaQAtc1ht2jKDvKep+LQUGZ2sLRvU5IBvKZZqQgRZXzAQL+KNIlKkj7E/6YrHK/v5VmA7mOWYgcTkj57sU1EQnIrpviG2DfnYOsip5iIMU/AZnSURtIP/uu08nD3bDKLf9UsLZpMhWfm5guu3Qv0crqG3AZ+6RbZfwuCrq5RbV/i1im/3a3PKpIIb42DRER/6mn8gyp4jGt8aoOlOdn+iYu2WXbZAe4VJ4RL0E0JiDzKie+vr+kCxvgdXVLuDdlDNnQ9OM7FVvQFcjZ+21RUq1zcAKy87OMY3+O9muHg3HtRHXeJI2rMAdtkTxm5zN5MZTWWXS/+cV1K5hO/Qm+JIETprBb2h2NB38yAX5Xv0b6mUILfYKmJqGnewkrUIvPzCBUeTaqfQYGClDlc8k7CHFVxpktCo1gruogFdqvBIf61bLFlNcbdhCtZam+QErwNdXIJfvcgyFUDXdv80FM+vyJFn6Ml692pEypUZHmIVMDjrZDgWvlRluI29E4d0nkhuq3aSst4svCtEPKeGDdOVILYTjw7NGRq6B5hfyRz2/P/wwlPCdGPmfTugzgi5IYIxQr81HRNXq6LxuLe3DaT5xUfSsdMoatdyPhXToUXg1/EeOZiLwZHXnsPlMFbF+Ynf7nk2GWaPOCTVKJpzZsMTEAeo7I4Xkc/ymZ/2rmulhAFvcjHlwnIty+BCoh2p9zX4f7md33o6swVN3GP8lGWaLs29blWL4fmJJ7zHnpb5z1dodDivNdXI+Bti5nS+ZnZyxq4FlJQak/o9zSJ3dUZrxBSZlDdcVlug4SV+ypS4Z9WelCT8T6pbL7jN7bNCVvIFk7PQ6Npjrj5iW27BYgdBue9MdeLETncaVZZMalS+cfu85gOfNYz9fPrpJ4sxeOL8YyZTNx4v7r5rquusTBWIwxuRcyCWL3Ss7uFsYYWH9x1Pc7taOJ/vXLNUU/EB8oz/FxJ9J/JSUIPir7r9gCvmOFfJwyXmsCo+F35FiMWs6RHKIz36oz1jq+jGVF6gDlxA5aHaMM3X6vq0kN8LO7WrLSBObbR0WumPd7dw+tb01/hU/LDLyeqOCI8G9OiR+D2sG+hXsQhA214tJesgdGWGI7bLDVbhen5em5CfvOLDzc91BQRKfN3OF6QYSk+113mfXvvpxj9r+AEBJEhumT8wy5DvCrjODoS5JSOV6DP/QsypKI4XY/+cf1hLxzD1C9+VNIDdVh4AAFgREB2hZjiHLeJV1+4IRQVoe8WNIgbdagRupkL+c7Bn9YU6p6F0H6wXmhtwhfovpbblXC0PoI1jg6C+oWtqo17vcfiHTt1Fe8e3nX+mm/9Bbsl0l/xiPf29o/KeE+5AO6EnYV77oLeva7HOiZsPg5OueCfY6enjjg5Ci9j3lnr5lCpvJf3KHYq/iK3Xv5sqHxWpHAw6pbx1obxxe4wZv85ps3+hxjgaZp72b20HYbWyFKaeVf4SSJsMzjFCnlcv4Q9V65mMWXr+05gM+cW2WwB9jxeXwdxmw6CHemhIyOLoKqCOAwm6DzJYm8pJ2NwKQ0L+F/QmCJIqS+awhx4qWDecCHD5299c+GwjrQp2ryVNTzGMGjitd6w+OEhKX9jDEZ9oSfm4jn0ZkalQafPeLB93OU5rmcTgeNsVILQWviYAcw5aYXce+2lHBHv1M593hXhpkOWjVForeXUvWLTPxwCzxn/aAyol/7MMlOpNkAdqDFp8I+MeG/T17SBv5F/z4SV9ozfxvUDp77i2iRSqMM4Jx/aq/FVd1hrdzbb8E7DoKovNY8tg9brrdFg1OzJM3zBCXDR/Ic7o/gH0pPTJoddiGX+DMxByxYZ3BXE3ZKM1ZoAyrboLB2WC5nuS/ugBr3rUlEaOoUT+TM6YlNrgZ2E+4R0zrD8kggGfO8rMMjSSAOLLGY84+cChrFsakOQA6GfHR32UOQMNXG/X2NyYCavMZ/hVIpWGLQcBB+ceFnOYwIYywmEgbjuQ2TQjftwH9QNGWqtN5zgRKMt9jVX/6JUrpbbtLDzENea4k4Ke6h4YNU81C8yF1elHwpvqrNiRmnaM/n6SWlOGGzXj2PA8A3XCGt9aTyeLWrhrAmCIDM5lRAE4VWUZkp3GZ5mhnKWlu7PU9NJSPZ8FyWJUNoF8C6ScbjGKPlpis0eIELGP4T6n6tgrsqR9XjDTWc3RXK84Kj+9ekLFFoqXqwXQ1Cm6dipLlzNu0Rl5dbJ7EnlndKFUzoWb2kpGAKyxs2QtHlHYP6MxZeVOcAwg4QrIkE7QJC0q1Gs47ejnk1mRWg3vcKkjojwNuVHFoNkOyxqGEtRGbdV+YkGiXZgJM3XfdcY2KiaavDUUrbzdgN7TN9AP96XBSuadnQgYlOubhWENcQwtjkPRyD1uVhivAIU7TxBQQ0qPRZcWZfjIkiex5zcfILvdV5vPDwUappZ8TNksxZmkaxRzMD5Yye7+l7oI0sULN1apdFz5Bgsg/jZE1C40GE5xeoZs7eqXzjcExIbLXGe6giK5nQ0gS9SI1F/ojt5Qx23odgB9H0fPUQy8gSNfvUYk3gSnHSRPXZl835KmAxIJp1L99ZItVQTgYIDJtT/9pi8F6OGjnaw/vtWONeVaVj8M8nCeoS8+r69JGqZvunUgTcxWoGeIxsKYWE/kidavwD1WiXsNOHHdeGCk74Wv+SBcvdgRwpUEbQ2lQg83fxvVWhmbGdFQqwY0AyuqNXcvh6D1azYeFK3XIR4BYwpR6QgqpObsGDhUusOuKEb7aS3ScuATlkYzjfChvjhmCm3EpSHQnDLINpIlFMCE2B0kzcgfomjMyXzH1T6GCzs+YlQOMIRpOoo2USg7+dCqTFhnJn1sPYDSupz42PVQYY6SExRRF00d0/2U784VN1lXQ+eO1cefPt1nHPoylTzoXadvws5pMmlzKcRzCANP26KO3B1DETnd2ncVO9EUb4czJ1ylQinrcncNBSTpcpbx1JqSbi8dEcm/+vQ/nYoyEQ32BRfwydw2FWfUrucHWI5mk87FRZ1TZ5oi1OMo9HJmV+1uNk8IYZZMwwLCBc6EuRU6kyBxpMXtirmP+aBUz3rR4xTtWAhLMKVwDdUBe1uFVz85kCK9B46yd/iPgVryH6Tx/4by/dfCPdSwj6Ak3O9rj13X5BdWP/Q8eLWcmTMEnL5F/GdQ4pAsiOY50j+VfYFec2/PO6QkIJ61IGb//nanfVJ6BrySVF3Fo9JiIN4jkkyha6Y/nMdJJI2ST3USeFRdG0DJqvovBBF8cqOt8ZnRLJX+F+/JYnSDV6lVdQl4JKaGuvnGMUbK0v97/4MZbTtK1LYteNL6DuW9vaMv+fF1dJML25ZzEwy2mL+bHRdz0ceruDzJDU5XYgMHssUHNVgq1arzk8eMUVd/JhQ7dQTfRuv62KbGqE3SGdpn75CcxqKbtNIK9/pbeHD3waxzPyYjARwaLS7GfuHVlbzWJ0ylsCpwJ+HI6ws6HIWM082/EqQ+Zk7Ti86Ll5QIdX6nPqlQ/hDAewdcBiCq4bJpQqfnx2g90Hf3Jt1wiFFoAeVFhHDSVOdfo7h3nLI1NwU6cPdVq196NW7daQL93QtR9E5xtblQMU3eZ2462SjuI7OHM28T7nCJJV6f0MWsWaUZjW7D7veQjgXrz/2Pu4lp+0wFoRtCskU2vfCoAqtJ5XCjvgpSlmmpIYWuwTbRg55gPjPObGhKenC91P88mumO/zE9Vqo9t/b97nd31zl7S6k+tLWIAOh197Qnib4jlbftEtSCfWqgygFH8uaAcy9AW4o01tiEO7x365C3YGOejxm6BbyK3BCTER01ZbHCW9PJTmQRdJzvRYPh2WB3NZ9Q5H2NZbWmjBFSnlRqkoy8Sf3cjdTXkWcwLdfPJeXWSlU2tErCUFrytqIepRlvVFIpEWdIqktA6kKvFJepot4wlxRkkpSpXELtP9yLQ/dr5+x6sifiITFh/rP24c2m+CoVZTqTLp4jsJUxXbGC+fZcm7HSrkCfcGlMI/iRW04xNaqoHaQk0kc78HtbNL3rDdYydC8PCId2nVffFa+I7z1NJS/kHgSsddRKLFAZucoqdUuPXrxpvbgysJ3fzZbIKMzJ8KSVveksGbOejhaiJ2/eX2abHP19EjZdmmvMx29+V4mzD6mAzDZeUXYt0fC3e/M5757wjIIQLBr3Wog2a/kJX3ztSaAyNTt95K3zixrK1pp2OSjgO+sIZHsPB4yz6A96/lTAWOGL3jeALCd7L8fh8eJd3+LZofuT9EAfVSLMozImDSh+/aWM3csu/0Ntef4XVJsLOD2ejAiAtDDpzv8ii6J1F9/TMGcJkAP0Xvb3LnSSY/tnrzuaH6rOKlzS/vJCI9DA8YNNa3oOV1vL4b7RSxePMTbX4v9GOGFFEqK+96Yh0IIIXPINl29CkgXuv3WhH16wFpiIGFfkRLDCs81CqkFunr1ddV1kHXq434aXsG8H0tMqYU9wGWly05FUaCLMNc0gF7X1YakjylNKLzCBVDwanDmRYKocWF2PmKfoQ4WZ7+2Jiuxv0303ruYGEEk5bm3a2r9IzsYQFL9ejvnbvnzNj6X5ALctQR12n14wAVLpaxXWL7tUoksWDgz2qkobsCR9CqudP3vVkiv3YZsfUJzFpNI/dmIs9AnbAin+QdoLBH+XoygN2UIF+Qh+DtfvDvYoUkXM6T5igHpxcojdHzewplSZFrZVVvzdJ/eirLNLq8oquSEwgGzD79GYu0Owhc6OhC7eRwR0dZ7O77B91yT2N+JGlZNOB+D4uf6jz07CIF3kmSF5jY+ah1Yy9hOlmM6nO3U9k1oW4/44D3o97uuvHtGH9CZwh5zAYY+TJ43XT25CYYjd1Jf1hT4xOhMlI5//a52G8FrKZlJiRh0/RMsWf8ZReFwTfPc9toqGvGeJ+t34piJimcSxAmS5jWwMP05muYRMiRhFG78yxMi+zI3RUzwBsmMa7rjOqvNmY5Lu4S6NmbdgcdDD61rN8Hi9uznyqYb0r2qhJes+2eSz0wDwQopfC8YOcLw9NLkDH2dgpXpCl6Mp3tUQ7wVvs5JQ3gf9D1rEeoP553LYYvoHIfZj09ZPLSSc+M3rfj5JOlDsFYvj0cypYbaub3QfsErkmjf7jJ+LvkrI5Z9+gZyYS14uQuy9Pvqajpuu+eoSCzaKx8i2WY2rnj7/cc9rHozPWL8ThGu1QwksbcDEMPIa3/opFIHqMR6LTraCuiSutw+JZixVFDU9SQg2s4Lxu4Od4DjM587g03W9mkKnNLWD7sdflulFILSFa0vtM5NgObT6/PGruwIss5cI2CZfiWF3A6UuTQuoLKKjrzIDRfdN+P4J3tBo4FSq+rbMHeqdC99It1eTyP2sus6FSxI6LUofLn+eGLuO8TuaFGSrpDToXSoGNTpKLQzcqsvuhMHNK3uP0Cy6mx0l/nO4mY7FcTpx2NxfnJvahrxehmEp5dXbb/DqlHJZxBdp4122rQWh+BaFG32coByrzS2s9ujBQ0DCjcrtefl3pxwaGw2zpkZytqZZVN5KVvIZX5r6vJh48yFFkjGdCHokeiwK+2cKBSQ0TJ05de0bFBwJCsNddsgxZdXR2+b6phAZzHUfFCXbu55xQY7M4X3kNbPYusgpc2bY6I/FiNczPAlunXxuasrJ26pse61AzpxG4HMvc2VoahLFbgB7nZeC9xOYe903XNHG2RzMKWKXRha2NVtHxrKP8kt6rP4a5JTCzbk7vPcuy6+tyDsh9mdUZEDq3oJ5JlK0OMfuxykgNTVViFngjEQUAk4Rpa4A3+gXA6JZliCwuMwMFcrxc5PyYNcgVTbzuyoLiMM36PmBQh10xzfRmGpWNS5D/eliM4Of6rFWHpgsGMLSSRAF1yqk5RyD3ypG0KM1CPbqlXRjtC4OI4Au3AgBk/kNPG+YeXZqECPPQj6rjFPntPW7ZNUwJohdurQoLBkW8UqgNy8ljMK4nliNhvCC9Us4ei4m1RYqFmqHWH7cQoXkmK2t4vKQNgkv6cWD869NbIF3/0LgJbnvWiPFxEKAOn1aDTegv1SW/pBKzn8lesonktw4usJ344FvxtKLzqpPV4D9iBDTPNvOzSORm60S/2uLQz/mG987kZwBaPW1bQcsjqZ7l9bo4ztPlqtJbrnwMT5pKm23WgA3SlcRYsDHc4ydolU2p39eXNENX7XshIpqjj7SUnqAV/m/UoQlpY2i6PCX7bfppvPjeSmiO8/JWYD1u6/PB750L0KVgvRM5N2bvzAEmOaAgLu877P3fcGgKBk9uU9KloBfe/JywOiEf7mc+EHbSyiYWBEceTByEiwyTyV7uJddTIPeYqu7un7eYUD8ff25d3pZ/CS9CFOg3Q5fwbgitZMLooUiadPr+oiZ3gcDCQcIsBb8LQGGfvXScTYyAAOBdUby29ZIPeXHBTfw5O02VrRvopfZUS69dmpOWoa0TEPt8qVBZmOzKv3LzpRmjTFA034kuaq2p+8PVMXUyZ6U4zy0vUfi/oTV4wBieqOP40HPZedbOWOXGZ+4ipQrbBJpi0JaFT0wn3z4jptIOTavb7y3YGP0A+w7f96r8EwgGlsccbNfwPu1XgBGkkLdvb9g5c87h1I0mYe5YAoqWYW8tAHnG9vAA68y++H3kNCbIok5YvnbkQDU+LM19H0vq+Q/SCtHClllMUsR5wN2Wz9gLpLiktlMmuYq5N5R/usChwHDfBMRTQTq5lNH8ZLuoYCbo0ODGTufUjmvmsJ46HbfdVa4ydwgCbwC+0+LutkgEzyaH9RG2JSlBsrgka1FEwYjTezfPtgWO2CkqD9+8sVgfNXPuW/A1Sp4HsO2QIFpBx+1MA1AMmFSpVrU72MEOCXpG+uFnIjWtAaBTDnZYOixn8DT6urjKTTX1576sBV2N6g7hcrgjWiASTtwX27SeKGCljdqcLICmkD3X+4rmzEIX9o7DriKosUrD1P3pLk0Mym2pOVF56/Q+ZAqcDkRuq3/VwkfXNja9YA1I4eFA7NJBzuh4PD9jSMCx4AE4rrTeR7PavleIgjNE6r4Gr5wkkwhbjw9jMbYlZyi4T983REH3geVEUmNIIN0ucIL7RF7lShBc2kM4SkTitJLYEXldetICs6Gv+kZrdC7SPNHQyELkvtCrkGgUnZpHiKQvkP/4w6rEHwGytcFu8suWla7cBN5Sr7AUv7n1O82x5g5hwDBE7iCRdskagJeKeMS04R9PD7kpzptVikVCZ/eLQvgKDCOyjcTgmpbpFaVzpSzwLCQaAdczCPG2IEOqAd40ni58M9msv1lcc1hnaA3FMlO4KRNExI6F/GbEBRFMsdWMN5E91rIB8mG7YE1SnPL2xlmeOEf5oaS4Yf9G0ciNLlIgjZqFFPyf/N67dFQg/m3CGMDTVpDOni9kxLCMhK/+ZM5Rs2xMZfXwE5ugyQS+NSqIKPlo/pnZglgWcZTgn9AvgTZadvKiJGsERK9DlygAQMrCeZtwvmXgFz0y7q97vuJTgDSKTMSVWrMCzAEwOwIgGk/eqk29HeQ4ixqUE+TbHH5e88QKSEsL3h/2EADd7ZNv7Q0J3J83tD1sb9BhDG4p7cyUjHpXBZAvSJTyVw9+nY6jujS3uosyKpoibT5j7BcQ4p/DiFrpc297wzAeDbJgub7EHUPHPHpmB//XQ0u6JAb0acJePikVd+uZjWv0fWlHrp6JNJoEij+u4tRRvBt9MqtxYx2iMiv1w5mUMvk9EC4TORdbuLo6mS7zzL7C9v96284+gDrvp1BCKg9DAL7mWpFNqBkoV6MUS/NKoiZVYO+u1yRrHJL6SAJ7q5zZWcKtIdgnW9VkZwNuVlBaku+NFec3kKmEpJmINHZmyeZBp/1i2NyW3hyuu1vCJjLEojgZBq5ArRYV3moicsB+dq1MaCEnWt4autlv4Gry5jH11md763eQ49Zwqat4zuIAT+Oh6pchiOkSeCEQoDUAljXNibXP+M1sdQP4B+2MCOwpVzBn6CB6Ia/QMoXYFRPVLhx4HhBPIrwWhf7HH9UxMTC4QMQkLhOf2WLblJ9UHEIZnQa+C6D+MZXbRmCRujRGnLlKvJPMW52Y5DrKhr0HbAQQYrpSlV8g/l+Wm6ErgcdYcDGJl7TWmz+s9LgP+XyGR57Cf4GD60o/GzOOAo/SFsfmjRjR3LiyPHJZU8IN1iMu1YOgmnAxEKktvMTutJ7NmXJrYeMbjHY2mI2A2LqkoKD5LjxFHpEirMVMQCuDnSmxCHb+ZGg5zpn2+ElzTUBbiZkF2lgkSSr0F1hCyE62rNMbHC03X/TjuIrRxkPj/iqv9wZCOPJBPpH7/BbcRtdPxNWkXld4knsa3+gttSkoYP4nN5ACGmuWt8bGAkuxds1Aa6OVPMVbl+3oCkc/AfDaXDcgcS3YEgP/hwYg8iJj1zatbf0R5hOszJKLbvJIl9fQoRTHAlTuc8IXswzKWTiE+l7lNZSPaRHwY7moEn7R7aHoYvmhA2WxHVaTUf9iLJzxqoSNqkDZT4S079SMOwY6K0e4NEDz6Uu99NChey1WGHas4bdqiDYjP+l6NtuKUR7RvcwjndFbmU2H4bkK2DdVjaJVs9mHYpqPFR/FWs15GpnzZiaySpyp3Eq/3al7eulKorfmGEoCBaJESu+if6yIzaX4kD30KMnADvglDCEZdWSflIj26nq4G45OAoxZuP3jOIyVwIk6vSz7q7c7x0g6oWOQ7i3BSwd/DwtFUR30PLXhj+hKx5W4SkRqr9VM2urS/h/YIgtYDO3daDmDiXwGWYpa/a2XvgBouLOpWiQg5Uv3VGr5vcyyL3+8ujHmabtVRT+/huBaUdpj4kaYbl5aTsijZWxFabCgTCNNVeQ2gLb/zhIFGL1yqf5uy9z0ae45lorS8hfUaeO7JcGIX5rHQBf643Bq0udXzDfcnE9UqZEZEEMHy1hl9aWITGfQhLDiGRBeSgdEwSiOV0ZstAzzhclSBLpzEAunTbz1FvWRJkA6n5HyOeJooPqOgEldilPrN0eAebHPG4jXzNhTQovWlI58F9L0GNh+qoD9CA5EEQbV3SCfV5TE8X7f2uczyGiAeBm/8iiD3E9d8XR9iSBt2GZxJgxypPLaQBKvDYjE+xttJiuqWgDBqeqo7P41j2i2jvfb7fjJtCKFA18yLbOSNm6lgRgkJsLJjpTPotZt15mh0aU94dUAK5ozCM1WyflsAMD9k77KZBRM9kzPYfpDuZMO89ZTvznJ2JdzwC0AZIIeIREaSWn0/UJBsyhirVDy2b0k0rdAN4NrshyH0jj+bV8fVkiA/2kbPE+syYg7ZP5+mskxGs0xXoVT3KSiLaeHI1XhOQErx5Gh2hpBB5m11USeVhTY3q2RIaq495IMGFN1QWJKQ59O6IeqI0EOlvlZghk8S6U2hO1cvXrYb7K358iXetWidAjt0QnstjDx6LPFzx6Yr79tCop0xrXX8IeUyzys9k3ObR33am33Bvx38g24XEq7qcUujP48pMhrbQHUACPSamy7lTFjaEUh9M3yNxbPWGvSfstGp6G9IyzDnmCr6pAuBWFaJwZMC57PJTcdI30MW114fqqaw97eV3G7/et/6b8Aesm3fd4n3AY5mUJuAxp4Ibb0GIIIo1d1EOj4/4CiBY9s6Hlq0gMxqsiPvZL8rIoZV/5y5k6kTa6ZOSxyH8q0FsDDX+VkI+SqdMfV/rg9y+Bm3cJZ/eYh8Nk5DCxjfUWau7siWAvZE1HJ0P6MleEdupI3dtihOn/yBjSJncvol4Fuh7J9NWfIdYsIbSm1N1NDutlpUGJNRLggnef8l0tz+on2fqeJleZ38cfwJ0QhOh16Lh4A5PENPNb3Ya9Jwc747jz4ulJyESDxuokK0yaXeDzzMOhybn5c9VwrLYGSYItGTwCgak78rr0MNDfwMBpzLMRpgd45vsFFxumkj+GPEcCqbeuK+jKIkXWUbepyj0rVAqYwfzVX0GR27HMlm7CewghIZXTCEjHSnvsTd5IVkzcaNyb7CBI92YOOUZparbq1/s1LphEEWyRrJyf9+j8DzyDpT7Ee8/Ak9n0zW24xC1fhVishx+Y8EhwetV+YwWmhcvrSluT+OdMP2Wd8JiN4HMjdRhO5uosWi+nT2pyFIU1iVlkejoM5qnPonli9lds4Xwj4BOV/hQSmJWh1voxfkZ9PPQzk5h1O8kylVRl7WUKiWearlujLABbIjHm+elwasPnvwhZ68o/oMzbToq48XGQOQPWOJrBUuh9XVag/rJHJ5Ej1hbKNndluNH8lS8baVc7lvQ6GuYXaScYRKN6gqGZ3NWg1vha9nym5lqWIk/Qofv4RjbULhz6tGAGFe3/wm74lzo10CXeuWQUK2aaCiPNEouFyhleo5fDBavcwJPVGk97uOAaJetRBiN4JG4LuG/0j/GQorhQHUbkbJcMiYLByIN49A/L50nsrtqagudLGIyDmmXRaST5nyr8t1VAltKq0gQS5lgb0nrzdCNMobGPeI/sQtEsnBQiKwV0T3yYLb2j2M1rXGCvUOkyG/z+2vdt8OSGJwXoCPB+xW6kF4mKqc681NYEOzAjIqxJdmx7Gzre0br27b6fiNuKA3sYvEbya5FfB7vVGJrKU5ROGZKDuh9RleVaslJ2+3e5ycQjUrPfKnZ43q5mGRTPd0eiFFx/4jJBg5wYLbZRMQ9wQPyuQih1MjLcPl9LuS/5ggc+g10/PQRBOW73mNXHN3H3N519ibAsZshQAfno0fRG9mU50Ve61lcO5tKMtx3LzDTgHO5I5eXoXH99DzdbR8BpKjHZDNin/42TQ9SaZ4YVqm/XIp8HZRTcLHZKrx7WFIykCr8VhLkYvGEbglOpBu3O4RJj5bnOaPDsZccVLtnuHCBZilRYVuhVvum/jjkeep5aWlTtoWDbDj47IK8FpYnNFSwGPxBeeJx6UAIWDOTtHLKOq9PeJvdXQbLq8+PwWEnL2W28VzJpuOwGjezvS4+BCqy3Pa9OYWpCzNFcrkHeWfyb8990wpX/Yc4MLk61GbXRebE0TrNGSkusZNM//qxaXGuWSCjW2+nw3KiLO1TqQOfW1K1INVHe1mn453pdH9Cytle9PZkgoDiUuvMg86IP9I33GLGl9y7DhvSUo4ZWmBCL4ZvvwIjPecU0V4BtlvExNiorVFpPQ8eqgvBh7glYRQl3dNVkfXD53TeI6hbYQStDWsgd6vptnPLSutWFrzWC4rD8brxE19uWVYddZtcJFNql4q8YM6ncUa4idPaSeQm5JQS+McO0vg2z2QfJoyKdMigemti/oyvMGTMafTeBvlIbTF5R/Cc9rgCKmr9pqnt9pcmzcws/cIxCyKJJmAJBSvk8ILnBcQeXj631yaSWJZpurnJ0Ivp3SpojFObtpd47kRLAiXgdQTLhJL6DyJVNc5DVUSuiizxwwaFtUYL319LndLR+TERk08pVXBBiHYdwMJJ4DP9wKTrTXRPKelQaOI4VPSzBL5L+NfxHmqxqZI6CyK3D6Q2ud1FhlthiQp4pp2dnjDnNmIB5m/W+wygXvYxc3oR7zepKHhOtSfDFmtvbv/8v/fVmoAi4W6n9K2n8ZF5ceTB+eCKp33P4j0/raFTkvwB+a3dTK8zA/oXnQuzd3phLdJJ173wShMkybDshTzYtowkuV1XVWCF6u57tBnFolJiVGEOOhjh6IdHh/3Un7Z+pV/jJbTTjmksRZmBJ9mr20dc1oo3FmsNZYXRo1z6Mt6vZPXEeJdEQeTqSoNhxQnshIdKh0bIaD75fOAyPWKXUg1/Xa0mtxOOvQaMQPU3syufcIJiTahIQbFD6mppAmsomnCxIv3EzGHwZRvtJcOXw+Yo0viKAOYp8hKoScEGrn9Br+VMbmNYmHLaVFM0BBC1Hs4HCaHBk8qZqV6hT6o9MqgkfXFIZ89+2hUe2G5KJ+92pCTs4h5GR1egEVsOD8y/XA15uKXxBorhknKi76gogV0xo1Oy0V760/DH3kIVAGAlXes78gLmqBODHZ8puJJbPmNToIWmt+s15mx/uVmqHzEvmgQF9Qrm6G43efY/vcvPC67LU60A8jVWWV+s0vyM+mMg17tV+2Q5Yog9crtZRfYpnn+W/bwMxU9QVYszogwPzPx7tVwjjfU+x22Wjq95N1n2WmfH11iKfIrrZ9nj8mTf5TUWz0S+lGEJeSnJp3j4LHv3iUs/i+cgO1HYTZy1RXwkS+FPcfksuy2Tf8qyuBfdUmJrjYql2E9x/iy7Lo9bpktrpR0eVGOKJ9mvWJj1HB5oXnbVCtvaHOVBIbrGWAn7aKjQ/YUJWZlyWorTi/1UqRmqa673H5zcTjOYI5qnUKsllhZwYIGrDUY5XWYvlYhx55QctBYdjNHcxFeoSTurzCeOukpO6reFsUrvrcRR7tpImpfjvMWneo4D1XxAN/EAYORCDfw+W5z2bnu25+0e+NwIcE7Ar6BVNcilvCVg0J0hVnRecY2c6EBEVHoMRR0Yzi2O3/KQyBUiJNZ/ubtf0N5t5JL6v0yyQ/ZO3wdwCv8y3uRY7/ErCxV7gHW+a93D/BfbRNdNhiidPPZAVbQp163J1mKzVbUqD78tFp3WU8Xx81N1WavkVHR1envJEx/4WlYoOE3PL/XUO1Pbr6FfeI9MkpitmM4tPAcLsxFNCbV/1rjB4iYs2xxyDavJknPXVNSgNaqsWuZN+WJlsdJclidfpDRtl6nsYltTFsufet66WIlbLJXThMDQCrSc2Y2i3WYNktIMAAPHd3fkPMMS6sviZQd2wu1G4v8U18+yx+XIxoNl13EEVssXy4z174BTR8NuZtZkCFpcSqp0Zzzjdk7d6uKZDUqjG+1RwITtYHOfTAwb2ZTXdrncpO1yHzDkPMyaoL1bpm0h/97aVHH54cveQhUAUA+rqYsan5P6ZmeZb9kjfleOobvpBiVrthxWWbEnhoRsaCT/0Y0l3Z0r4HXaYkNvdiON7a03VUEhPI/Bn527St2ULIU/xeWz7LYMvsLL1u2qbYZdtaYwesw8Tm0XtyIooATjGfwOddC8zJdQ75ac9y2qdq3z/wRPwbLrMrgSat1i2yVvCeEhTdr9shVKfK3w1ZRlN1T6dYI5wm4Q7ac4PsuOp0oAudNSb0kffPnzE1GZaxN6exPhDCXTvJClM2uCifbEoPDHNqGSWC1ZP2kx4wum8RGEmoGTCF5jSNz+LCa+qL6oUGMVjZtjCOQTXtJFxCFcDy8D7hTnwXRvufWXPhEi8dSSaiOHvOT1c7BibmVxwXVriqB2+o35CzBa/SAlqUP8A7/cAQsKvaPfFcaUj3wa0aa9BcJsKBCqOjs9mf4yyJYbWzCZJwdtBSRwl/+G/6XZuMfm7V9i+9xzSe9Dm6VqGa9q73vuxpRToXuXxvsTw5d8m8LLjK8QFvZ5dJ4xQJ5JJiXtiOLefn6KIp2Q6gQRSjNTEC+zgyU2btz3gQ7zBRPXY307hUQVxVmvYNQ8u+00AwaLx5hzgJjjTEh+xHuTcZhjmH2U0V//O46DPiiqNZkeuJyCskT0jtLtiTj/9dUiesZChBEEHcmo5KjdM3TMlhVspQIN7EuUB1r3HAiIt8rKi3rVmiKgYXadx3RKf5ASqdhnCfIThs8LhHiblnTykEgtQywAVAmpthAG+20vZJLja5NtrfW3Sm5gKNeD6Pzza3D9+8m3B5FzXlt5QmMx4amJXR6iWVoc+Rj+pBGrVb4YfeQVASbeBDA4QIUfWIuK3871kGDg7C/AAWB/HuJNNxfmayAVjiYVBDq7EiM6dhRVdEh2Yl1l0n7WNd/i3Hi6v0cMDUNXqE8e27viyzilN1EjVI2y4BFusJYk3VQFJSTZR/YeStjloL+Ju3D83/vNrxPo9FGpWcZz8EJ+A3WgVktxTOWIhD9HfMlaG8eATMei7lJYpflwQRM2aeY7ulTINVmKHFEFdICoF6EikFtkb/KOwNcH8xb2tjCjOEPTfL9AVlgyYljUQw84wLxpv4QO0paUumkA6WZTKSDgxdWxeGFy/eo27pp3OX3oYwG2Y2MSlmsvO6tbpWJbLbT/Z+nifd10tjsYITBFqI9TenJgPk5wUxvJKbi4bCEf1gvu40iFsVrm8ij2hzgB3wKw+uNKi0FvXtKjPUNp7t4gUtxVEPtjqGQuyvi5gsiEk0rxfFVA1k7KU4/Q6OrrM3ZibRFlmJxaM1xGKyXxtGr326xCaFfNtp43xB1CHWh81EQDw3RwRwsrXdHHbWEZLMJttjbagqaei7T4Y+5gVS27+VrBY9U8gDwZlNRUm/2XjG1S1bRG3C3kJgi5ovRnama8S0gla1FOkZfSNmVFbn2ZL/zhqrubde3PFufO+iv250Qjq9EJ4Uau8edFBSBWdsuv1vqcbJv4qfiGZjHscm7KHAPNCzvFLbrQRhRLV2G7VYHhce3h2V7ldN8qYl+2CfO+WA+/rLudS5AZi7X9I+C2ypbNiJ0GRtBq9gHxAViqHwx5ecIUADHeyB6fhIeRan/LbGaFq8/lu9dkCK+/S1wbVxRXor22RLAMg4mTy9vKalKJONUU3OCgxpoy5fPJ2t8a3zJKk7FCZwVy2Ldkhryga4Wlq36RolraC1xb/cA+4AHt/WakthItOyTSdu+mGjMPYhfwkUzZf1G/aPjSaH5Uo1364lufqkoCjuMxS1wJzs9hl5CdVTKBiAlGqYVEJLhTgSWy1V98gj85zGUISo0uHYa9Z1Tke9SUKhw/uiMIrNkvLe5LheoW/yc0l+iJ8irIP/JaLGegI8R+Zd20+GcbznN2M/X1AQ+dYtlQG68ZIB8KAWJK94qVPsGIIm9aE0G3nLBTG9m8VpRy3AqXj4WI0BOKr4OaN9H/eJXRdHuDXwMCKpVkzo8n1Iucrw3ddMrF5CQJIqCAJ0eStZS2rr2RoJEFhOozRDFtUuERUU5rpiKDoq0c+PtCrxRwCLkc8Z46Im1RM2RQPkExFC2+/6O+9WsswBdKH8RtgQ+HmOCV1PzhCJkG9r46E5eaovd9zhlsNZsXuTjHLQuLMiEHhLrS4+YLmnUPyfAipwOMvXEb+hWuzjLzg5moCKPZicKC/HRjeC1ypDSdLalJqglfg8o/D5Pdte7rWv8AQ6jDRqHthfU1MvgrPYoykTTkaI7rx7trIxwaNsLcpHQ/84j/nGrSatDa1vFzk68ukRM6pjZ1mvCFZ9WOKl01iuZwU0/kJoi5C6SmErHo8jrnpRmH/CQ6zw8fVo3hYoJkWVUZe4IGUQlMp/7cnwEeNYj/6bWMV0YF3CPnWy9jc9QB+GEKevpnFTazhCIueexW3ifKoI3pXaqKopllFMR/EYNqnitlbvJHXysGVDT6MQIwKt/S+oBoTBHR4gk6hjw1XpGk2xOn8lcXmNd453pOX/Sq9bI172Zn/en28oL//hiXEhLcr1yWeHY1No3aKA34zjT4FS38hvYx7oP/CDnvwec+xGHSiAqWNGh4UdyPgMg0kjSOi97BoGOen8CAIlwM8ouPKfQCJzC9IkIlhwZrt/r8BExzdlM3+GavQ+DjRkSP+TGYtndY1Rt9B/0kPMmmUjpPKKu001s5wWexbdku4ht2zpOud6WWNkSQbHjWiTIzWGzIDgsIhTEMbcoAMiHPdApjYLA06mk2ZZGhax7qXcNFkqc+kUKG0+jbtK2tnt2LNkHNmUEi4U0l1RQSg+O72neSoH1sJZV2gocv0dbUzlsyBJQ7/zYQQe07BAcNi2r9wJPJqXqRYgt+TvpciC/YxY8VP4JQXDWtpjX54vWkLujFb6TWjcX/A+rbAlCsT/K1coe9+WdJfJh2LDq+KiAy75qPUA3ufaMGMa+lOlc7D4qXXCmFbSx/s3CcXchlwCXpp6G4peeaLf+wkjWSYIDtXua3Cl4dRUlDEWq2BoU9Mi7oXJ79Ofve9nFkXsFlTTYI4eiA7xY+VE8MDiDJKx9F4PuowMrGuudWlI0BQ8kFgb1ijdtO75Dxgt6CpQcpOCcCZmGOFApbr85ASdlCwoxDIvaHaDVqa+h2bPR3WBZXAOyyTsmY5a/QEw4U74D4G9uTbCCWA580rRPHd7D1ikVHOZgMo8wUObwKoMkEh/q15h/+2miUvd8RHfUVL2Kxptrw3XavRQaFDyYL38GTUfYoBrm4YCaeZ6jp1gt5pxeUGOGqNFe7iXVIsp+rdVP3UNBHiomieIF5w23EEisO+k05gok11NCCWslismjXmDaQLQeKBzeQQPxMRXPOyJd9YvoauY7x3neCLegFnbFi9gTadqhWcgexXz9/nBStfbsUHN1rF5zM3Ny0MSpPJlh9oygJPhDs4W6Hi6UkQ16yd1UeSOqGbdmO63HyLHteTdEPrfCjP+ekNHX7kwR2pTx3Yw9AJxnLBdTmLLTowNvrYmuJYXe9DQeqEtvfI1Ep0EYB+thCfN4WAJHPUwgOIepP48RrMjfBc9rDAWF/bukKHWg2jK7gQubwJDPCFWPiG+MfMKDYGKYkGH8TsyH7qCzXCnicyDgF3CyE6ZfFzF3L1+r2KZ6ZWV2WHZJivUGWihQbg3BgajkN9AjAXxWSI4u/CXo8YMvSI6BngIAGpgpVUg82PhDajUDIocgWxoW9s40jXRwubXxBIsC/DeD4jzDhIVBN3EzEtyrImQ9/ZrdvkD9uDG8N3kO+wccrx1yETV9HxyJq7YYWWyLrTjaq3TLumT/AmSO1PunH8D8Aw7Oehe9XwAE7ZxZ4O4VALfgG41RG0UVw9caD+zaW/3tiiaIoCL9jXRvS///1Y+AZBByH0p/2igyIgLkCAxlQEPAM+JcwOjcXxTlUbtNZ6yK2MaLdDq7KYpbJ3XIa4A9f8+m15slIFrJ0VxQrYjaQ7iASHqW4zrElVstUxuG0nYFdZuD00klUQxhfQtYoHAMPbT13QcJKbEcx5sChIrE2wCGMr0dPauOAOoQnsTfPSHDSOHDKiuPVS5YWQpclEfb7bl4S497LyzGR/+gW8CXtsAfAl+fXQb5uHr/YoUBBni+ALcaRdyEuk1tZb1FLe7s9r58rcETf41s/FRmwiRh5XHQIdDwWf0ZMPdjr25goAxgInwbtBnG5AXm4GKIDNRL5iSboNNFETLx2hvM2DTH46JBU6NngypM4KwySzh+AFA+HggVfEgE040ppdxPQOCFZx7rKnoRZkyRYmH3h6RufFgIoJdZ9QYRNkygqJ+4avJ2bwFFX3nDl3hsKtyMeFDUWA+m7HcAwZi7HyzpX6waPXapvvPQnpn6v0DR89VkrYPGG4g3UDgtboxyWwSq298iM01abyJxu3S1XuCLabeN2NlXXJhEulrcamwDgQozT3YuD1Oz4OOAPdTFLrY7LHfIEbRm26sLdt3gD/c7PGetqDeqyzdNLkY5i6R1lKYqHJknSkZvFDSqtdrhmWCA2tGnmvtQAa5LBmiHLx8t7bHdGAdKY++ocETa2mEH+Wd6SCobErfX3vudhXP9Trbm2CTwPEzfrHYMYNaOG6nriYNU4dSOT6+4D5oLboWamifUrn+T3Cl3Vh3n2Ck58vlfPW/d3+LICqJ0KSp8b3Bor6UPI/hzpECtL5YHl1QI4rdBLxp9gKZfdaxl14jwwojvgHaiERKGTPCoxuJYPUcThDDcWghMFsqMOvnwZnUquZ+q/uuGl68mQCnwLskT48Ng1Mfd6C4B/1VhqCnG4+x8yMJlwIVHXpCdcCmifkYRnVho8FXbNdx4KUdaol0B6LcjW93OaHJjDxk6I+P/uNSOtuzxudoaaB5p6fd4PmtCOSS/elDk1PpDaZu63YC1U4ulkY6IJ7KaCVFmxxrEGFlImK4EhsMbAITWa1joIx0XxEu63wGvH+rlV+Ri96xND2SZcEJgILPVZLWbptdRWyiA9GGBSuvWg8BIKPhDXCGQB75W6gcEDRujCWmA5+2BeLuxdgWzdgw/iNYVo/O/xXH1/ebQ4rk2GOq2i3csFftuQ5Fs9Cg7zZ8O43o1TlrOq7IM+cME3fIsyMUKlHT+lJXPXnvFFuFdj55VW+N39RFwYxTVRxAh4e8jYqU0Jy59lRzgx9f9Zb1854LdjJAiHRDizhebboGkycxYu/d4IpbOPpEBqk88wA0SMAChh9jMEZPm7qBxVrjGP/TdKQqBhHmwg2BAYGTMw1bZVXlnlSmEdcsakmhfNK+Nk8vCwq5UCUzC4R+9DoRCec4iHzi3iVfe2rMcnUUFItheP0xcirEGzZEz4BYYw1BbE2zmAPxPlHijMXtaBrnW5+UzNyeVdddosBiYl/OY5CvSTLN4vpX1u4VuDQ78qPgCFV6lQ5ydtn7c990yXWj932YgGMXTNEhXAKkbkwCdpn9DhSxoFiqhdlOgl0QaM3yYSNGyuSguuDS7dOOF6Pa3qCZWOh5zlkspoHBSPzzuyz0ciOKkDRwrMjYO1j7zW8iOijstkDYjNDE/RG2asYaLpTuCqqNAJgdwexKok7IHfxTqSYIY2ikpSEe708UG1RapcOO9GjNhdr9VBnPEQ3irYEaoqL3QaDRrWFdK6QgwAT1fEa1WTIU6roB7zV4HJ3dQdjGthPnj2TBGVwkEafoOXtvpTKHiPOXoDPrPaL+mDLCsJV0H2lVVtPF5/3RvDnEXDriygqJaj1tKTG4DanUM7gtIZcstNcorMCbQAuAAwH6sw9cqzTKhC113JniyPeMKj9r2GXqRJrleJN6iwVOWVkvHiXCjUtS8apE/ulcBWD7dri9foNYGPoLs7ELwR0fK9pEb4+MSjDTmAfgMfBGV5lWs5GL5/SJspginnbOn2SvPolRtkIIK25m4sPG/H+vosCrZGzTAo0DAuX5ZiIVi27h+pC1uomh+V18ufr//T/1MSia+PtPHaTw93D4Xf2qCxLpi60CXw6LRWalpYlrv9vpz9MZeS7SW1TCuL3NsbdgEN0mUathbecc3lVnWi8SPPcXrfBAEsI9ZPpTVJkhoPLxr5TuMJGv6Ac1BzgSyFGsAYRfn5LEzU2EVPEriYbiIs3YaBTpC71IVyz9s6a5V8PmSL58AFBF/8RtBQJAsxHZNHPm4Klk43C8X4TF4/qhXEwjrkMsHq1WNK2z+uP+JA3NbooSNP/Z7+nmB65eMy1R8EDMufzH6VXrttzXj0DADwXEBnhCoPZaRUxeiRG8npLsE+ut0T+2Rxu8pHXS9RlR+aICKnSxtVdC6lQNfISTqra1ajWceegWkWSXXqbnp2uOcij1vUalWl+jA+yUvOZ/Biqud6vvda0g+pcLEngbwPtQqyrNzmftDk00tkfxELbFrGlwVXD1GWfbaAWtiM13Edy/0HLEtrR2J1Gz/oJ35h4Cg7VSsr/O0auYWt2MC8C5TGk+Zb/U1BSTzF2h/piJq3wlBXD+fLZk9XfzyKO8l1NOkAagwiQ83ruQr6OFLlVj/tIS8qlAK51R80QNdxztUj59kWwZHJu4TduB+Md5a6yKA4Y/hq4AMn33n5zcOwoDmjjwEWYe3l0KUWJpsF8PZ8dkImjnfSUiXNGrdl0/9V4zQS5AABM7o4gBU8Vv3M5xYf9PxU9Yc7X6RIB4UZ2thlhPcL4zYdqogFOnTopYoTgeaN0LfSHxKJkULBhrjA5AYEsKv7fxWyrfj+qU1n64mjIXBHe3xnOWJ7LwptlzVFrnN45F7SKYednQW9Ux3xk+UzBMdVTr5IucnVA9a/qKY74zryCvvSZklHaqTBUlFk5uR4eklWFyYTIyAardS3jU3E4xGWnSd+9rlmliBytRd3JImVDWDHyji00pDYh2iCCphfrgqTWfPmkQpCeULWvoPH60u7nT5AFM7r0J7J7+1w/M/GzYXn9mt8V/+g/03rC6G0brffByWbmGLHn/DmkL+G+l8rRHZUMGaleQvGivEMLOtAvTpYf0mH0UqlGAnbX9SxAhM3N3dJGCTvs2Tczd0xuz2HDN5w94b4nohmifWI8b2kg+5/Ww5LzH9PSYkk9dFqHN6a/qn1jHpW7gPzoefsEZxPV8IEFSvVtPbVG7Y+f5BU7UbcccCNWgVfYCPn7i3WikIL7YELQfT1dOKQuslJc7pfJ3b1CfQ/p0r9bMA+YtGGR64z2awwG8OH2zOqmPTWExiTN8heaftaRB/X0ROSy1s/qOolU3u2cyvPPBXj2s9KGv2Cb7IpjezMTjqzchdaCOIQlvrs4S2U03yi/6R9D8SJnvCHteCOAE9O9QlYYhtCUzN0Y12RgIpFrY1eqakiZnty0kUw+zJT8FSJluAx4r306dgoTuny5gtD8OqMsTfH2wyP3HT0cWF4/jCCH16VMCpFi+F4cOH7pP32JHg/ZdOr7JUb0/V4hAWUI4GNb0T7zME3TfW3aPjpvMEC8K5L/HcvUcVqiUGAOAbofFyb0RnwAJxWNm5hgSjZE0AmvKdbGS9u1QWFmaXP8WoLVCrl/jHflpNXlV2dmVLezmkQekxlFcyBfNsecjyk8KYj8HRDDd4budrUGzUb0RZRVUwL58JyvHfIKQc6KnnN7d12nOUB4efimgPplOXqMZAYmwEQ6YguJ05wiEcjHzP6cBKtSKYJoBUJkfW9nz6hm4oMz0Xu9jNz02iEfeyU/vHLQOmrPUQtTbxz024/FoUN3Zwx7+MnctlXD/gSB/HK00LBA0RcDC5cqdT7iBxPIzuvApsK9CBhS6HcyTATTMp4aqKF5t3rmo1Y2gE1jC8yb300XuoXfqod+B187FktyUaBol5wKzc602itigM54vde4QxJeRLhFm/oq1szgnjLf2yMKX21OCrlJ/PFt3l9Df7e7/G++Vu9M2O+/sYa4+n8N2IwaXTNW9+DgpFhmjE34oKPoaWUKBIBDfgKTg+56F/4+36BMIdTG0lGyU9+nbGJTYFPZUrO0tlXeXGU9KH4LlV/mehSmvzIqQSM35ibKb+dm17uP3P8+AOnO8yNqs8fJV1K3JGr3Uq+pexdyrnhzP1QkwVQZNBa6KXw92oUIXkuwWDvDt+d2qySm58QlR/NLpn8jZHziXlTP04xEb3Aywqys/mDgp5D8IW8LB8JKf4ZXxuv4Eqgu9mytipn5kZfMZAH1viM7v6+gItL8fpkm8ceCzTx13xImrcwJy1y03I1PYob6GYFbJaRPA5PRDDGZX47PmoQBui2PBuArZhQh2TMDO6Zm60KqQ3NlHjxTGhDKbO6saUw1iXRpGP3pMwFmbbeeSztr8AGyBENL4Y9NLURbkLqpXGx9ZOx+9anCqvpsRmjtYjHDy/XVBbhTm0tBTDY89x00U5kh/3IvUE24bxKjvlmqAoB3Zo00J+wKEzcC92vZD9a0HzMWSkK7e7vcXCqx7V1K2k3EJV7orZwbKVDX2pbArOAP+oxSln9FzXCsguxQEBXRyxgQ5jznX43BqeQAr8gsdj4erQoCE7OyJEqbeX5x1evvjvCig9+ounhYH76KG/AVc9OxEMOwhPDkuA8PxP5KfdEBBfv1dJIs1GLnIIcVDT/bgKH6+5vBwm2tHGkJdZ2HLAUB/VyZm0/+gpWZ++iQPiB4ZOMctX65M3iksn9K6U7ayROGeNTqKKtR2I3ZunPoHIQF670CvKaYi5uu3RMqc+WxeV77VJT7wnRAx/xbYQWdU8kv723eWoikDK3zdGeEGqzxCeaU9uVlLhUcBk2ksJeB1JYqGvHXxK3vv2yr1R0Up999IY76iLnhEvJdRxJR3HWS2lbNV/4iWN+GHeBHvv1D85gCurbqAcvAVPuTQOi4MkiotuQ/g7QEt9CrWC96q3ktTvROuNvc74o8qUfi7+yrfKK67afE80s1QMJXy5M/TGgrObF3019outNnTDb03KDFL08AigeaZBAnekIEVh7ZEFGfq0a4/Af5alGLrGkjyyhG1XudKslj8TJI1yJAj82xDWbhqnn05ATtQGGeJwMzpH1Yo1RDIGXd3RdaomaNny/LBpOA7/RnPNcDX6nJ/3LYiybBJtyZ2zCpAtRCqKgoJnjH8DB9TYS5ofxrAgbzzaohV9BZL/vR6iKQBiVqRiS/SPLqlk7gQwgpMa7z3nKwXOM8GD+4eicCJBmiuzFA++4KZl/CtYP3PL3uwOd3J73T6oqmqP+8XGIu0Evf4xD3GLqZI1ZPOCi24HrMCXnEuL2PeJUaPBNzNGNFuMQzIVPGMsmYRxe9nYs1tvlZ50sEZhpAtK1yeBcvR3EzfOH6ktxL3QkoiCa9pM0urva9Wi/uQnW8u6qHbYVWPoz6Bt/hSMBrYfqZWdZA7KD7aeCErh3tPhHSxXvThTGZaDxC5VoGChMqo4mJ9scxnxXqaLuhkdIly2Xt9KVpyqrdOc7pslXV2E4Ml0fJeMR8XxYBZ7ueDSGqx7sCfJ2qtovwCm89lKtHzulJp2Mln4xqzmCo2x6+Ykwt/N/WanoX6SvZTmkiFlRx2uwPGPMD05dJ4aaOiF+xjJyYmi6lOxeWHnV5RJ72622hQwRIgQHSfdxDjnG6cYcXgwajtnTTrAi9ZNZ0aU7hY/2XzyW0rtH1w3t4tJURcacxNzr0j5+8iCRkRj+AWc1kEP4lz6yKH58xzzwW+0zTe8TZgeFyptHcsI/k1JQ4AlBfcjfqw/Gyf9YpNYDJG0gnbVq+hQNy4cuY5PTAe+MfXmSyuGWdRwET5Jmr1qW4IyE43/aGYFSA/9IiibSAa8f1ujpyQkkCQ8HmDBsoU0qqkAarJJZgZtw7W69aKQnmUWDlaVzPgh2zwkDFLhNoTtInNhRRJhX1aLRx1d/0zOJr9sQfVbaAV9PzEmneQNE5wGBjL71N5zuvCMh6wYv6pqjBwrbJEn1uDDUTmSeeR97FQsEQqz9ldaNvxFB6Hfv6gfl0mF/mJ3coxWnWjQg3DfbVWGG13JZJT824Vg4McXX5WK1q5ne1XiTcPt7MaAooF1uesE99M6/Bpk9v355emireNFeDkgfBAc/UkzHcSVgBGLBrz5EuJOhjpgfjaASXo5XssNEmutJoLj0xBX9x4d9zE6/Dit90PbhHnSCzdzq9uryazhOhHHqTY0QadgNff+IaN+km7JVB8UMGJpD02GsilUnjLG2OASulvZvNB0efvrGNhyaHsvvzaBnQqV7MndMUrw+M9gePmRwJ6+9d6gNo11blX6n6AXmHvagb8srXDMDLizlm9m5tn4FFmIxt5pV/6FQaRniJthverGDtpVbdu52JgjqvnQPzl7Zw5P8j/HRFfkpqwHsXdQKrqtU2cjLv7SBYtjxj6hwN+IqavhOn4rKvBM3GK69EdoY4rq9TtvKVCnz2kvv8m0xdwWw5wntDzXmFySiro4t2heHx8pbBK7XzbuLtygfKqN9Og/+DySNO5NR5Y6utxUJ4E8pbtNrO0Wcp0s1Ou41SvUk8Zxonz3eWzxR5N/Wug3QPHmqp+rpTAO6aA5rP7mN6KKebN24Dd/1k5MFRIKpPu28QurY82OTw1LeguYqBek3M910P0rlBDMzXz+VHM5WcM80Ug/F+HNsnXPWQu1Bw68dqLFLHbmBKPbTcuUsq/5Y1ZYbhFtwrWX7nShFxn5cOb+zp2BbSvSSuAKJzyCsDm/aBgHvIFgmOcLgfXYhIApzrgxJPNzWvWyeisAmQTWSAac2UdWMPUnoLlx3JZFaMbY5Y3W71Azuq2kUFSfsdHMvAmXJsUF7NNAXQiFLrifULOEGLKXot9zYtSEd/2/5Yds9J6/MC5KFbNdAskU7eklTl+7CzE00h4TMEVroIz0HR6k/f0Dd1KzJaH3DesOz+TA+J88vspDRFlyc/I/sit0QPxvcB7u3zAMTAe1pR1LkgbcPzW9HOw5utLnQoRX3+PtNgWe5haTSeMi+JBqfPtyrbdwvfwuqkAraiCgqfXF+MVXRJ1cDLFCOGIlSYennwyvk25AYDp7TTxM/NTLyLIxFM5GKWdD7axiOhhRhC1S7r1eYtCK2N/ZjixTJd5Mt4trLMhv5ywq/ldfyUni5vBHDelaaN1OfBsJIf92RaOdWhrrXBrTL+cd3E/8l33ZDIfMIaJdiIDa8sdjHVBhdfbzjqSJd7/mu29z8pfiGLTY3+vvFYnW7+gMShga7EjPmz2D3VoHoMqpL2Zc2k/BsVlXJDK7gt6CX5DD6OYOsFu+mDHQUqch1LQRWRnBrE3b8gHQHdIR+I9jVStTBzeqb5vowrBKghIXaY0jVhySUAzBbogRwaPRJ2iHvQMLxnchvDNVk5PyQ7brOSaIp2PGzn8sJkXDHBYJ/1Ct42kyN7w6407vcjEFjv391RTBg7m8BIC1TIN/iLbM5Iw+uSyQYUXA8HtRIDVfy8opADhth3nj2xidUGtSeU0aX4eQobr0iX05FSFCICXDzOZgju583ZBR1cW7jsveVVO8QjPVT0UImQrX9zy5ti8qUMuo0IeSQtVdf2Rk/4eQahTEEWlgF/oSEtziaqNhnnqmz16H39b0gBXJyLqprxOv3iqQaFkgfwrKAeApryTX+IlZW28mhxgvkEkx2ZVVum25lgUXqt0QXiP5j0Lr2k1LeIGjBbv4OZiGRTTmmHEcT74IL234y+uRn6j8Lt46VIxPuyNXNqhshTGkYWqzowHyE7HHKG9HPo+3a+TySTL90ZdJwp1YTqfHH2F96KaMaiOcJL/Y14PL7R4yhHIzW4kNgNm5NPh4Lizj+scekSLEvswbIUOe6uD/Wd4q2eIAQpdgKEiNhQtTVi2lHEKl8ow+knxYjgYlQtJvlUH/maJEA0G4jeztwE8SEtYr2bUn35UC5XRp0+vKIgqlAf9WNwLgfmMbEaUEYNdB+AwnbMyjvizriF5WAbYw1aWZm2cL4znnV5TXA8W1VmV98oDcdRzLzzOcTlMXUjm0IdhaJnxRg6vMNQNh658yRs6Zbm7wi2y7PhDF39vGMfCwM+ZJr40iM2A03KJQHwSOtSQw+a59NsZrpkrCVC0nqS8TgPxeHht0cx407/56HqxA5XC+PHNHQ8JHo/jlVTaosXZcZetzztS7XZ5O6BXQ0UMXnh3lkBV++P5ueWiF8gzc7fl61d7pq0Ij12VRWWVKcbKyYtc8tt8RDBIYR3TxCrc59OVEunXSmkPfS7kO+eXT73hr4MTKfP34A6auDDxB3WvUl+z9PMtKEkRgMjjqq/+EG1o38Y4xT89OV6DVUXTwF33a/nYGt8Dc9avgZxGqF46T3C9HJD/CEjkfDLtxLj/X1QbnvYSchZRwy7zOlDIQs/2cg1xSgWzwmKUkipERrW4vP6X9mOdEwtNHOLctoeCguWDlgRjjrd2xycKNUhtJnN213whNKUFK++6P/LR382zUeDhjp5zU48+UpFPQH0l0vWQbh7UaN0HUQiiszIfV1kQu3iSc2LAU/e+a4SsbYAtm+31p/RyiNUZv5GexGlSsqxtz6UEnM10uU5621q690AgONv23rQak1geL2HeHSERe/tv8FIoVAv0MU9dZSy5PGwZ6KYVvg/5jrR43zALfea1nf6uh0I4+Ls4Qm4IIf/XKUw4192RTfXz8Fa+AgV3WvGdLP/5/i1hbSrfOnPP+DxLYcciPVcLAwR4FnkqdqLje3GGpxQVpLi8/cE/3cc/+ABH286O6N/Vonk4W0Ikw2mdnPzgJtgjRXCAI4nmVHNBzKg1jSu1A0j5i+vhpqDYu65eEqIoXQKUzGA+3P/vlhWUT0LWjHcuCHeR0vEGTY4mCDo3YBhmayHGQKoJgin+TwXxZ2jnar+Bw7Ya5y+1/tcLRKU/sL/sXhbGiBufO2vpRZwqSYVpQzyv8/IVgvw6kKP55OgZpgyDrffv0qSuxcAXPIl/tJ3BkG9pbeQyzLIiA6LSqunPmrhdpBGuZzVHGgZeZTZsgDf3HJhbQm+qrT5bDr6eSXPwhdVJWyCS6v+1aQkQdEPP3fjskN7APxEfOiKLlRQt0UEQ50A8iyRCByBNEvT6TJ6ToGO3XIFC9JbxmKhBYb5dBgvm4GAa62jZhtoMUr47D/HQuzWtc1YuNxroDh5O5JwpxKXenL2Hs/7bwHR6tbkcc2orEldyBcw6B7t48LDr423EILxtTAjOzssRQYx1MSZGExzYN66zz3KNjfifc7+czzf7CgP3f7xKeV7KP8KQtxwng2PZ9ByFQh//KNp9996PTn6zdiIjTcaHtoWucOL6P7XQzsg7/I1sA6H2HKg5bqIsTbCFLouwdrT01REw485jwPWhHLig/W16DUt5RN81TfQqEtaVVzpkXV4mRa/OiNHHou0LgP2gpJ9Yf2+t5HNgh+Vr5cOeUb/p9CxGVCpzX9lfAF65t6WX1a70deACagH9UP5zF/2pgCUcpUVxWtMNOjGiMjowRZGc+1g7It2GMNd0+15Q4DpTVIITEuTIMmkiUJT1NY1d5T+jKNAbYRSvEFKYhG7xiwax7ECJ/pj/SFDtnJ4EKQ+GJ6P3BpQdHL20cobFqa7zKA+5+5SZ3ydBFoHN9sAeL0AMvr1fhN/F9ed9dqW4ykC5aS6sCI17slq0tVL+gHGg9K0qhPloNi1vhJV5ROY7i8lWAxTNESb9FaAVLy6jGtTV8lhdYu4YB+k24RodWucVXnxxtCp2NKt0ufVMJX4e138T85+mkcOHT/+wbRq57OeSzvIe7y1bqz96HVa8IyWXZOMjDB2PDxRXDiRFymCtV0WnATeajGUhDrTjdC92QFKfrSNl29728N8TDV6Sbt0saVnH6Du76UAqZfr0Hs3X/dNWU/pY3AlQNrMlcGersTW65n8mmHBxfT8fIYUBHUuiQWqaBkTPpS5sWk9q66+GrwZ3rTgsSyM/cwzIUYwgkCFh4Oswb2KSKJpkTuaahMQBWml/PdoWkQmEMishV0Nnw7HXM48PJLUv1geoqUMDy/b2gFjxeX7Fbwc5XM2goqgsQWMDeiGLjUoOiccFKAsVYM/oLq19x8IJR5OdVj7ZXoAWgcDnoj7MFnvxq/dRrP34UduB52NQKKvpJv0vvxC5J93GM8sFaltHs+jypawa8EvU/2socH/1873Fbx6jmqfl1NF8LJVZIsx8/K/WilO6fW9aok4e5IFTyb3JI9ZI8JqhGl6td8/GKD6m6Tx/oq+45FcTJ1pSEUWRCm02v/u6oW4ojb4DAS3Ht1HneOSfCTKBk9Ktqyv5ZeqYr7sIqWX/F36R8R1VFf740OlUaoOr6TeK3azd+MP+tk1tcJ/qNJQlEJfPEsP/kO/GDCrBaHSBG1FoDIpVsKKJ2OOY6Gl7FCpkgRteDP2XS+RYQi4vgWQI0aKBKHir71oVqlIldvz3eontgRqpoxGoBI1XHTULNP6BbYwbnEpT1GQ/i2xYNt1q+PQ2rcC1Ds+aITKHXGC8Z8WluV00CdB86P88jNATZUF1kSh8Gh2eQYnabDuXuU9nveqEd7Fg/ff2CtvmQx9/Wjqw50+nrZ7PfBJTPa1vtaX5e0H31DQ+ySlWzK47gUsNeOAY3/BkUi8RNMxK+qoY7m7A9+LYq6lrGBWiodT/eNTqwLGNR9awPq4Oo0VsnWtkj2isbIT/7/V0SdMLWxqBQ6sV8C0iv0C3EUT2BylRywdImN3C8jwjJs+BtvtGtdS11uOM7o8VH1fQbvvpEGL6C11oI/swulUsM0a01VuQ+ldgeQP3jNGUaaouh71XG914/s7uuR29Fwt7kYwkoroR2UtqiBZCsDvVK3uAUAwXSWK0wDsI+y+5egFf6bB714RMTvpylk766dlcSIrRvbl7dhOClCVpAEVn4qYyOoQ7vF7BcvLGykFDMIQfdLqPpIepWB7f+mxRDCurnOY4usSBDF1wxGymKMcC2neRPC+trRbipZbL7vmaW7qdk6ZztHKXSVFVUiF2iIAieONreDTQv4X0FYb9WADUOtcZraCiNgu0NUZZORoLg8eOUoRbFCQhlwGmr1y04OY6kq5KaLchTeSNW80l/W4uH32Ms00NaCdaoSFxb49qhNozOW13zxfswmPb0cED0lNcSC/cOLSV0LW7X3kIanHArVL58D5ULW+L1OlKJqdoKyZ2wmFZAaZDb802xvZXZnt1B1T6gx/otE49P4U34jyBLpMrfA5XuxrOIcPI6OWk/0ASVelMRGnVmvSOa6Uecae+NbMU27QH8eybXMTnLwuiJiGWFCz2elGzoQa0nStrncVXOcJqAdhW6vOsi77eqfki7zIFrDYG0wU6EUVONsnMALqWCotAWlo2NyyXwo41geLSJ9xgcn2IELHwuEtuBpmNa5KiSn6RQJgaAt7wNsFokRk+Pb4Yk0CNVLX+6in7FSXZ5MmrVQRjhZTrae+qX7U8N54Y7ejaMh58Gkt438tSOkhjMQ3ia6uCZq3rL94QTo0RkNcTD437Xqvbx9v9xJ4XwWCJfPZWkC2lpsBanV/stVgRQshZB/P0CHcZDJ6p14t2R3tGYkgWfZsVwTwptDQv9mpamAy6Txi2E6B21S8IipKzptR0vthfA6tUVT828y+Hq3c4ejzaPbIf2g5YJVymA4cy70Fb15IX9N9SYCGiHcAJNu3y5u1GzcYycySx48r08QsAD/JqQNnje7SpL8Cbjq54YcKahDWn+A7T5eIVMFSetT1j6B4bbjKU/cW9Djvb4ZKPF7v6mVXo0+VDkAt7Eg3zkoOmUx5stSxLnqhQsnJ8RrKOOBo6W/YdK5n71hs5HBelznJJWff+1IO4XjoMdVPQWiAVhYK5oNNKKsCeHCMJxfQujpbKGTCD4Xy+SX2BgeL0LrXwsdRYRAA7MFnm0jLPF0/Plz7Z3OXh/rcDc3I4wZMwbfZ0IF+p2f1qDpGAUIPp/j3PN0nGCDoT44+yCmwPSqC8UdJpDnXMWqhmM1KlWFr8EpTW4pldK1j+lvcKMwrv/FZ/DaQU19fyHtjHSof22ROzcKN8SSSKFyNZgRjn6oXqQQWcHpMvM0cmQFuU601ZlDwIznCNa00sfKmRoBZCcBXwdcL+EZ87pHI/yvsXhivoGawiDJ93vtAkQ18vGVUgvc4IbdcBt0SJSqzjeskaTLHyQdQJceeNkPuu2Y7FfewWWkU9UumOYFVyPRpEKe3+IydE5h6AZxHRQo2nSWEfazn/EKTvSl8bWWx41zoqKVcJgaJOUJh7WIZrSY7Z4C/Lz/1Ft1G/LT+asbfUDC/5JgwJ7tqrCwPYkz8C6bG4O3Ba9FchHWLq5EEhKt+Gz1Fkn1TUEU3Ka45mChA20WioQKFKufz25rOmAxNz5am+QHKme1gw+dVWmheR35IP/ZU3yenbxuF4lYGXuw6OIhDLpueQhdjcjwUZBiwk7vsYAxT1ef3OWEoiObrNOsGtYU5RMldITKu8AiYBy5q3xo4d0PZWXIGDfuWnbaoa6tAQGJQ997DbVypGnWqoy+yIwLao7HLMsoLNjPmOQQ4R9DFa0VnC36Cs71q4sFMIbHKIATLI9aaK5EzOLC+jIhcNv0MYAs2O1RTvKwOIP6Ie6Z3EUrDKNmyROpRzp7v8Z2NoRZqoraXXBSC5yZa0fHjUsYcueLADyxm5Ez72AAEv+6cv2DZdrCqo+KeoRUPKMCPua3Vo0YfmP87AQYRn+kUa8AE0fa/G+Ti70hYmEewFTVn7sFMHC5jY/OT3a+GJ6BLtYlkqyzyLMgoHHD7JRTuuPtGFDvdIImi5gNfkiSvQWXg8mEhsdqLs0lPuLRuaPrfrTXCaqXTJAqeKpLaY2cMldptOIr+AL83FGp/ENwZwvYKipu8BuOcn0ymHtU4TlPB9XraU+NkNx6E5qB3ksFg17EmJ+g1ypBgg4LJTYZIfrZLI0K5Tf67BuDgx+jkT1MMMpPlKx1r1kZYMB1MCfFhtQUViKqmST3u9vs3zBwgz4W8nglDJ+d+ijIPabwoqmtEukcv75KRveBsOre7+lCcphP6DTBQQG2CwuOK0H6AHCGfPPe9JRcuS1iaSExSLCI5Vax8nKQtTrcN/Ox4MsOJ5WeiYNlnETOyXgdYoUEtZzeK3V25DKzUyoKyk+CUg8bkrRM+Pcy0Lj8MQAOA0PUjiOQtsjNdMk+5qIhJ6ZJL+pvtrz02AFa9Rh1fG4B98nj1yUMRLLDvg+vfzYgJhV4NHcwyz7LxUJWVIUQI/tgShGCgyamy31vfKP25PactfBRGUkuHIkrEPeBzarHFdjpcEUb1uBb530OJHtE/eJ0qUObR+/HEKee6PUePn/BNpJ7YmMMDv3qX44ALAOxJSyiQs6j6C+IdrSmxgRXEBTyLPjpxMWA6jbCfTzR4ySIDp3JzbkmudkqlLmSettm+vhjzPHUA/7iDgq9CPBjrtizK+N0kojVPyCKIkVJYUd9dkkilBn2JIP0D4DIGol//g+z+HhSi345MF8uauhlYK63L9dP0CD7K/kNC6Yw4tolImsguVXnhc+/75hFjoA5+7MRkKsMNhpIAbStd1iNGbnux1efKrcmjDpZJBTqnP0OfINmIZu/Gp6iAE9Uvm31rQRCG2+k5phA2VoTBRMjKuufdMwM6MnKkIm84bMmh8Bojx+snxSYMbe6S+CMYAiEpAy+0go3xC9kYN4y49ocmdsJePJbRPufUDqIKxlKzrRP/zM+9ryVfsWE2S2ekYhSsNoSUvY8It4uPLXRmRlZz2C4NVtE0FGEX/IDaKec6fcVafrrZeSvP5Rka8H1ZeLz3ZGXl7gk/EiIrfDWgQGsuqr8S/RNiNwvaUffgayCv0a67O//vsMSjap14nUK64J9CK+of4ElizxqFyBcyKneYTQxpDDA4HNCHKBFZPZM93rRxTLV8Dj6DRhEEC5puW5GaReBj5biuZoxg1kd7ABVilQ3zv10330jbemoyt+uHFFVCkwUpU/OTnov7V9e4QVtmTdzwplsyo0W/CIWr+lOZXYxNfNy5a+ELMWwYmqe7q3MSdgZz76glXLO2gR0+i7OiEAHhX2d0a9QQ8/GdAODXOFPs2hCTPUU0SNehzc7pNdNPz0g+M0UzRDFBi/jZ5qGoDl8G5fwwyqaEXEDSmFC03/6CUF/ZHbxSlX8dMAp5WGu4PU4VqjeDbq5SYHaa+6UcLNBIPSmt2XG8pB5Tq/ktLdcKfmhHj/IJwhea/QEXdnFqlkRxhSaknBGxNJO5v2v4Pf4Dpoi8O9oSpd3r0lM2dTo4FdBfGdhRZbMCC7Lr6NoNjHXfMmCXH3tfgPLLa6UWX/4zSufEC7gR7Lsb9NiSv6obN3xU6FMtUidyThFdPjmLlQYkib/u3iQ7xo+OUsFhwnqtn5yurg/tJ5FK56C/pUKjKRgbvw5GzdLru84y2PzJJ7o+5yJ66axCFHQLH4keJGA/Azzs6QulqEmb8zt4XxFF8hPIPduy2W8xwhGoEjUt1/3PjQIc/qcsUGrKYCRYunKfZzzhqhS4IsfUEmWd3FpdDcQixEl3+V43OFVezFer9si7SeXDNqr6bc3c5D30xpSFCw129G1wMy5+QVW0jB9JY3aozEyBCpkMEuDUtzjNUlrD8ajt0I3Z2ctzkBXtxk7LPwsli3Wl1I7a57h8cJVhN/0ktvgPV11B0wr24rS0Sy2djftsEw5z9E1ofcjE5G51SE5Kcjas9+0eCSmpauglaaCDEBo3uD0/FAKD3UvY5e+s349Fb+IX3LL6FhoTOc6S/IEN1vnLu/yguL2ZBgfWLAK02OY1MBuQgeeStm6/Py63MwbZXoJX4XUU/QmeA5jYYTX4nxjUNH+QY1F8hNXpyi69V3Q5bl1WYJDKxb7tdhDVMDjj3GPxSzdTV3LhaYNP7hcFijolq+KVMB7x/br1t7I/LAAOrlfez8zTxs1hnoTQN7TEdNbn9PiJ8CVRIuOZMZwiXoTwMWDfReJiHzQPMkJrQGIChDBpfCIavO2HXvvKrVwIyKdK9lb2paB4JacBPWFlbp6x4WOLB4zMT7k3pTaBuf0EwQcVvnex8DN6r3iNRsMiVzzgS/TutPq60XQSJJuXicgE22n2CoMs33t1wjcd4J7pdQKJ0u+2ie0zv7yg5jw14XsSUTnPJec5KkyZyj1szitegdGyo9E9xjOXjKCZ8DhHgK1etmlQSHsZxcU6Dic9QEjMqJvefU5tdNom4BkcLlLEfd5FqnTzsnTR5pAqV6G4jopzseeP5sSvuKwXNzYVhdcyRHtA+HzIOTy9apHSdj+uP7E/wuM/v9d7hrL8LShBgD9Bz8sp8F6UOG84NF5ukjMUnHTj0xq2gqNR+fwzjJvKm3BTJy2XNRVIVs5Udf/OFf/H+aKmXKvT8myMOgKQj2LwtYaNK2JHSA5/7HWHEMAIbq4dnaPDaUcJ/D1uMIyI686Dgp+d9BDmESj1J6gXPTTulkRiXVaoFE2eYyWcVYptr5DOdFX1ulL3swKYklPGq5Z2Tlpdn9MfpAFie6cxrg9qqVAmML2shH7gH4ez3+VGJJhDI+0jV52EWQjRVhy8ti1L6MrNE0sugZnRU88d9usmZLogt5sdizuN5GFjovtfoL7PvqN2r8iLFuKJuGhci1a+hMxJP88tFZsxfI/0WSMurh5TskIBEEzZe0XtLFwPAVrkvRwpmTR07cdCzKtgbUXrc6y/orDFOLiAC2uTlSJ9U+MGg8U5130nXu1zQ/Znva0W0paGCa2RR5rg6Gi7pFTCzdq5EWBycUo8TR4AYo8NNFGdVV4KqyjprXCayKwcAIoRc/LiitCnVU7aIR7oL7OgwUqZZuPAP4Y/YP0ZwRdo594USrqQtWiSa3T4GvlPaOtnrubFX9M/6fhnLZzyQdoUYqYqfQMJrHluSFf7Fw/t7b43MKa8taGWeH9CQUQL9Il8vFi6pdJ2nlkizSg23hqhnUxisR+SiTcfkguRI0M/qBrvC+Ez0EoQD8FIFsRywhxtnsfnYMqP34ZnjaqodjwxrTXFZbgq7nHpI1jSvXeWSnf37KI85qK7TwMsjVA4T2xbZU63QLihN2/1dBu7HvtyAEhtqHqM1n/7TOT40EYuMJ7dYt/WfnCaWMcRfDdwwyXJaXgggSVCismTpcMjLhutUps1l6lmB5FOLImuMQQ55U0FpnjUbDoamUMUkqpimulj1WklSDksyM0pg7JPpDmaO03505eAICVpJYde1H/RH/vwk3gwJTJRczwxS0fkkL1CHxCAO4UEjgp5KHMbZ6GneLu326GuD69y88LrstTs+vvoxEK6ZxzC4P99NRkjJb5yyG3a++p8NyAMZC5krg+p3UFDUufdlltSMDSrWMhJ2rP/lL70Wq8Tc0C0wXVfLYtGXTwDUuvEXUvbRWXDe5mBU1zb4qymqjVkSltQn0bca/KckcsIvSx3bENuQxya5cOLQ2a31vcx6JlC7rYW960Pb0WhL7VHaxc//eD2ePDavrxiOOvdR0o+MOjoW6+z9xyR8RvNFDHQpTfkOfG3XY3PpD1IN3BSy9Yc2edZxvIU4qC5XtpS0nuKZ8vDIeE8uWYaYsXsa+tSvshIO90fjfWOSIMC59V99W9ra2kviT2/ummP2PNBe3Sj44NjuD2AFshOMyPo2/RBAspNZGt3NSfBGQ59RwZzyn45nspFwoxbmJy6/8ZghGPF9pp180i/w1oUotpwz63zq2ca9nGVO/ja3wP/Xxa18Ery6ZQzLE4DPzDiuelsH0kvBF7VhluKJ2PKgbBDSvgDbdW8t2rS43dVC0zylRxU+on4KSo2g2lOLiW24Q/e7h45283L60PgjSdk4hIMaTzOpcTB2SphyTPdOBCV67dxkiXF2hnt0B91/FMSUvEa4oo3STyofdvvWWAzcciEbCXwT+NEfv7f1LWEQ8pBslvohraVH8/VPTx1xvT+6fvbRwGvr6Bg1w3JS0XM14pbHNx0/WsVYAtnmdeAVSnvAuOZKzJcQ8AAh5W3f2kLgy9nnObVV591KNKE/dlz7LZRhnaZEk9Eftj2yhNYH++3dqyfSfVxgojyrwkcN65s2QAC2F5hej3UxDsxYjx6nzKiCQQ/zu9TxYZ+WTig1CMJhfDgZzTmxKzBENP/NqAPtFqwD8PJyLgbiczJ9vPkxowCWsu1GkXuefAaIQ1RWUbxnY87fHSfuXnhK882P741pEjMXSBlVbsx8Rm8DC8/L0fC2UtZL68LLCQ8YJ5zXvok4lkVPJIAoUtRnTXxWpj9aM6++Bf3m0jvlc7AUg+Px7gkOZEJDEUVnlOStQt9rgYZw1dIw8mVQ+F+wkz8d/rMviYI54ATUYa2dEYACYf2CEHjpCbtXIpQwwjDs7e/IjHXsKgsyRamdIzRW4jxXOnmEuj8nOMRy2Za0LYvzxC5IhyR2n+ZZ+yf3cJkhT1YYHQHEPtd4hFPt3t055wpnBXwKd9HkZHcEqNj6sCVpkTVpj43fsGhQGVZOU6LbYIR1lJOaUX6KMOo5+DybGOzBeoPXOMswY/y+QLL4nLBRDCiSPbsRgBKDaEaHVmp8bXnbJvJ7zdTKAvTMlZLyIZVomPDdIPCfPR/7E47ZPK7b6a2yo5xjefzDJ/xEK9q0dFLeO1pIgrPbyHUQxU7szcLAXaNK2dJw5oVbcozUE9jJUZDcVMkO/NK2CgjOFwXGNxBvRwixPixxV2VJYUvO/Ksf148uUz7hw5IbJeLumviAESIRNwdIZD4QyTz74wOwZul6lbMkNQ+AvhTM9in80YM3o7ls3cPAZapw3AiUxblRbTPjy/HQ3IyVT9n0AF5PYb80iOyH3mqIv/i6gAKmshn8zj5858nYtsEwrvKRolkdLxX3n6L0W3PZbSxPSHSIf6dUPN5XNOxLac19idV5l0Qfki6SUDcbCiDImA6rr7h8INCtKYVq8aU7fKNEKHYoIq+Ige1/4Oqmttch/M1bhZZNN4dzsPPClJTf+StoJUz7gpFIbXdq9TYCuARbD45zIspJc9IIMAJcl1ps3XfN6GCF+4p4rz9Vt2RHVXxA+uTd+SqCzE/TWkp4j1vWn3rUu/ydg9dF+e61D174CjmuBbuF8GNWFaPvEpbIrvNITquIYJWy+kTcUMWl9j6WGuujU6BMu8stB4eJGDX+WyF+YpIjtVd6uziRtM2191iWavLWPl1Y9M5w0+p2ZtScwbWL7xagbbVh7RzVyVNbrHZtDE8Z00ryoNYC1PcUbC/hg0tAd3y494CpGgY8/z7gIbn+T4gwubqK32rUujZQaC8xfa5nXfUUZCa0ruRPX1odQavnT3hdIV+3iyB6wEBMCo5kMpIYFlRQrYVBZCK1HfhM3OTIepvLL+gzUcyxlOPp21QiSu+jM8ZsO/GSxAHnr/tGfpGpNnu+ET3X1MQr4yvS/JeUaf+vRWLH6HHEvJzimjYblc0PX6nq0ijcrG2FrixKe01Wy4KFhU6n3XcWA6NJp/EdKl1Drm0WZSXIxbFxRe4cFD29F8Qrx/QuXDsXXpvudTVd5j7zh6xWnxoB6Fsd14E81obxt3D9r9HZ8J/LW8EQXIrqEVx54kqYWvGp2iPsXSHYUOhZRjMrPiOch1v/BjT+XCddWm6gAR/J1puiUefean8e5BS+xO2tXzpgJa3b/wIZ9jRk2uzfUrTwXGJKk4pHb9/XGRVMkecsrb0yTDkL576kUTSXHNAU2eAs0/qknkx7ov2gopU1MGS4lpQxmSZ0IA2VBiOIoenTrquH1WNhHoKT653nBAS2hYZ+lqDtzfohVukfoJ7T+wIC9jSHF0AVEislQoe4Dnkz5FyhZesoxAcPcsngtIlYUsnmnnlnwCr1jyeEXh1bSOk42GIMBbEK7fiOWTWX1gwV5yCI+TZnqww0wBYtFda1e/zg/ekj5V7Ac1TsIVfF+A8dYU78jdwxLz4xiPp+K+09rNfxTOIr4S5rRFvEZbc6szv9/c9DqJZGWTuyIK86C1Xyfklmb/wvd9fxp3XAs/Z+R72ntC8RCDql5tdpkdWqQM5YJBGOFm98UjYMr52C5QSPf7tvKn5CfP+1/8j41ZPhLTe7bkIhr5Mo2BI9akG4x5v4jU+SDqq7F7gOHLqI97rEXrKJfyIB4mrGvrkZrGsT8/NMfI14iGc6uWQPQ5GrVCcOsNmwKBPQPaBZk3gawjAt26nA98Cyv+1HzmfO4DqK8iopcOmCyI5N1hCJM9n7sXGdV2BfTxdC91RC+Xog3spKtVe0qcV9ZLCZ12hhu2r8tK5j7Xw8VM/WQu8IqVqxeD03sP6e7Uc2BxbIomyLums7Sm1cIBzxz1WFYLnfWkSZvRvUxnVO27hxSl2XApduOstsQug0QnALgKsa+XmQChFb5drjyVYf5haw3VOE8OfHIuczna+MuqME8hrA6/efwZUlexfphkEqnJ1ePawKJT7vDM9tJYaFxvNJuqsagLno4UxqlQvXH1Ol5nYtWQHFl2Ltk/4jXKYBqWN9l0j/yfXP4bSHfP2sZ+trZQlonw2+WM+eFYzY7GfI2iM/EnLvqVywKpWxfachMHA3GXSP6TKiVNtO4gJWpgIFHcHAiwidxkcS/CofXHAODHzqGPOTlLpeUiYx813ON6d5udQ6MT/KGmn0zNJMO0K/Jh7I3OfpOfzQOnux5CUmO9tWE/+ywuz4s6LhU8xHCbiPUFadZUXEmzmbJJH6vNKl0BvZoD+N7sr1bAJoAH92QNYfynYw6KKCE4tMaLQOOwYaGSO6vR1L1HozAyhI+zq4D/xz90f0IErSs+NI0wPrrnY6RYgZMUqMRM86FMmEMKD56RXTwKoDbAhrfT+V0M4UunKIhJsLsA8oBb7vD+Yx+i2FxwdpytWxpvBvSISNjeSVHeagCCrUtob2E8Y7//w0Pi+5ZDdtrocbjNgZiY8uGQ7C3yC4cfuna2VV3gED5dUCjGzHxtnN06ObfqxNUuLRmzemFphk5qpMSLnXf1pnZJaewSOyHCtkZAMuB3MlvIWi/MIEiTrzvgAsFCNKfwnWwaT7D7yd9PcBaH9VsPHjZQ2lVta5Z8UUWRubTA+CHGEwemwkxrDiJzwopyQIcL8YncpMMZHiXTKGzlrA/icp0he6ApOqCyaeCH4rQKUUGcr2nDhfSy2FEiv2tlubDWEVE774ssvDnCxPZbw8W7zf7zFWHUVsTS+sQAtyMQxVq49AlI/hxB5qaQVoPcS5S3FtJrXtTuGhVe2q438wll6nrwHHfic9tLaM3HryH+76uaD/vgMc/5QhEZIHojvOuprqEELTnaF6vXHEpj2PMX4GA/CMkxcLJ3OHi/+5X7kjbA3VC1aFq6MFrgXxa7z6LhWfjVNUKpcareFcqP3pz6plHHkG8DF1DOX/mdHt/b2GiVKmrKE0ksx+TPdqp3aoQcXaEZ8d3Til9YqxHnmlmQD5rDv/BbD7JomMY2A1suieOmCP070lHOW2mM/cqL+uRGn3AoOSaHJ8uiHRsd+tx2F0Gp4UVXDHQkW3RdLKS6mxDBcMJx7Pqc7yDm905wzOpeL2s0riuwMEucJgZSSjL0CW0+QAVvUrDllYhr1Hy0Acnu+or0NSDypD5D7N+Li/NYfivosuTSDZki8chI1X8sGv/Pi19T79PBWAuTcZP7JmCn1UB2fLQBrTRoKVc1zgdCysiBrwwMonuFRRiorINBcTl3dUi/Y/UxT184ysia/sjPot9MlCpH6HPhI/e5EUCNwT2Pw8oP+LsPtZr1ZhJpdLcSjGbTcnw8msfoZpNpOA/6KCzdTgFth6B4P77hL25PFWaz1ZmpK/J1fKgB+UWyYbLWHPCVQfgLkpFWHZWdtY1k48XxpjXPU4FSM1ctNDi0QrljzIFLZg4qXQNp/eHO7nXUU6ikCIKm+jY/TeJ4BFW1ehFcEbbGm55Oj8HB+GZPbq8ymy1NxSr0Tj2QDdNgvtOcQ5/luo6dcX3CjbI4Hj0AMmSODafg+RBa26qN9B2NkI63k+kkaDDzOLwlHus7MboPp54k+1SYz3jZFCX988dP+CPzOLXcz5dvi8H0eK/YT7mVA2Av9j15GWAvRZZsb6rdpynBlHIor8f/k40h//tM88fzWYrTzb/w2Zc3Ij8n80awVcWFP9x46byaKzVJnNZXQlHyXk72ugmCblNK0yCtwnEjy54IC8lTeUJWfupDRfCoF5H0LTbs2J1f1OWVY0JA9qONRm5EFiPZLV+aS4ARzDjNNUciueCg+YlY25UXVo30wZIsjU5NmVok07k26FVEOLRtO8ie1e+lxARm1u6FzcZatlr7jLdSghcsPiRmHKRL8o2dkKfebtzDZwrmc8/uYbebPRVbvbv8gF/ZGLdC9uqJTPVBQM/NfBwVLllj62QPnM0BoL3JcRFwH368QjEI2R0u5wzJQT2IjLxUfaft/1TyLRuML/QQfihFS589Bq8jVTSpiiTzIA2Vm9dYEY0oYGosT+0tzat5RZUDXVoev1ZNRRpxRebY+qI+af7qzDcl//ZJ7xDNsvoek5f+/qC4KqLL4I411FbKqK3ErTSKu5CiIRPdKSwskB1OjYp9Y5ZbdjkTpZmcF0cYN51j/+dbqDfNrBQu4aJ9YU90DgKNgKM2+14OdCBNQtOOVQpnTe7BitC8HetemZEiNLLJuhs/SUWfxVihpj17QOrbhD6ssPEdJt74KsgBSXNovILPRgDLLrQHWBfejvuFRzVLau6wyGpn0UcXx2v0diFJQNlhcFmU7txGBKlbPc0H8FSy5hQEDPlZMnvKnBN3+3zTuTwLdhkvfofxQNurP0H8+wljSjnmwVGV6CF714N3K4BVgTgI4/cdQaRhShHR5zSXTZz66twOb4I69q/thviSBby1LWMxuNwF/BKLkgtVVnjIsP7y23fH3K4LxVFZWhjizb+mocLg7czvWoG2mOsOMYAdGX4zM1dSsCnDBT3hnlKKx6SY4saqdyoJlIiQJ15GxxJBSB0C6TI/jl5B/DNHo0jlu66wm9w21ql/a2BlUaGSmiCi5DdQvwDq+oEjs2ylWhsvuM1U0FSP2Utt66fXPYLkcSWeG/D3EXlqIoJcRYMCT6EpVmZUbTMj3w+52dyjAPDMgssL19KtOU15vBE3U8s0hbo+Qf59PT8ehbULtK3KvBqqetnEj9hc6sN6ke8jtXFldMVlrxkv5jMXmlPRZpeLz2x81JmpImYjerUm5W8IsODVNKpf16l+bS6oiEITuc9sEn19KbJH0WDBplP1WbSnSIQ/II2zx16mkCgG+RfW1U32BpLMintxMxTNX6dNuaj2qLCdRaRNIbJ8OmpYh/pwhFneT0mQWVI14WIhI0NSmwgoyBpEfHH58aW69nCS7OobZHQiErcbm+XaHs+05bZa6i8wJ8rcZ7X4P9JkgADBT130dNcxwjC4U/0mo8yz3GVBZyc6VAdBEkQqBc1K+ey7MMY2hlPmnlowOvKSxJJScs/R91s070LfTEc4Xn/en2wyShCpRNkCNcvImvNhccCJ1eojDAJlJELHdbwAY6YrV5EWerE28xyCrVPS/BTIBqjHpFbUcxnmXfO4Y90GDd/9YoKvKWxcce+fZ79Fmh0Q9sxfaIXQIA+bfAcHCN6KENWoxF0Lv4xjbIxxjIOmlEncWdyxG0IAM7lsZ8KwEkzmcmVI3j4925LLlJcGI2ELSBb2vmT0dWvEtMEnfx149yeLQbyIRM6pC3PRdl9UdWyVaqq3EpaIpbSImayuDlWrz5RUm+SsIjsfauyjTp+vDr0yaUNUbhPLa0JG9/go1ak2vagfX5/Kh2d2f/xd3edqlE7qwzgN7jJu8eEIHjKNZis7ej8g7goViHxqUse4FoMsK771wbUx98BLNOXWXqVjR4rKWq+TbOgWLK7DZqF040z8gBG45q1TMze4ezdA44t3Rq+6zt5FvxM9Fred20D8e9WAhqLkyrj7iaOfkqLGDmAPot1T31X00jtvztJLq9Jcjy6SaCXXV+K51Fg+6zWK+mZKHVF4HPIRAnIkANWjuafunWpd0Q4yqYi4O/JXsss5quDh18rp9XOQ8Xehfwxkf9uThPxoSLPukmWeLngEQyG8ooq1oj45wjcfjI15vQzKie4CdgNWRIBrMZkO0W/W/OoBjy2Sz+g8uLc2tXtFQ7JRvKTpuaTdes9r9ZtM2F+akTPfv+Yh6jges9szi+ZepOSear8QTbDjW7X33bo+n/aNhh3lF5z4l3rR3uCnJLn5hvvDunUwrppM7Vwu0X4WU1OY8wJQd7aZD5E2oJ6+skLNI1u09aTIMBVjXdf2V3mMk8U2l534EKrAY1eNtmpZMRtTiPqsOAmu82g36RD9vmwu56Wth0Zu5r8Ag+rqxIYndIHIsWrQpkpSEnFeRdYoXgQuo0Fi2YDiF1ahVHytOiuK0s5nKbN55nOGrCnS0ExNH2N1nQXJG2A9y0qAk9gOrqnXYsQz5l0Xz2TTq5CeWfFCIofMTdSAOiQkEFrHSSxb9sM2oZqBG0gsq0ONnfEyAR8EfuUtmp+sYvYsrG5/KuhTjus3cM4LR2/7/hImj9JCQVS4+DoBb38no0orpPgcwvyuB6q0O5BMfcdzZgdE+WXf5mIqGN2W/6zAKuDJ9aIPVcvXDNXDFPOWbhdwxf1GPimQWzXnLG1nPaFnsujB6DENSlgliCRaSY7buER7toUKeIHy3tgV41o8uXm6rLbqT+G++aDMco+hKTQWa81uvWSSqdUzCmDqasJsFNp63c9EmjjJQZYA0eSMB3aq+z4N2ycPCwhT54DW0Y+C8Zcnoe7NoBuS7iuwyW0RgMJC/f9SHj3xLzNynToH71i7R+bLk34A5BKaNSnc4fket+e102CkuVUUGhaK9HYM+vrMH4cKujzMQpV5T2qKJC0d9tLg4mvZE/seRsyrHiQouns9YxtWet2C5OU69emEwaUC6WerKDeTY8ezQ7y72EBnJxK+p728zwCaFc3ilR9e7bC9WGf4eK4Bg61dKW+Yk8Pyuy7qLj3iMWQkjPrN7l0tJJ8s6NGN9FKBgVd+T3W3hHe9Q0W4IveX6P47ufXFlyJ90YtbPie24Pl9qgr/BBtMIjJRUAwFAa8yvMcUKvd3senCBxtAFDF74G7Qk7hZwSX+X2FaFHSF4EFeOyGhj8pA9FA6P6JvWgMZO1d5UuB6ARwzw90lyVEHbaiExhkBoEJUsWLFirWhilkMkpiCYXqLIyMyelJXK8t7S7yHumuf05Eb/n5/AfSVWq0EWpLQRmttpYHPPvZNW1qDLmZ1a82xteAG9dLmAJYAcMTQudMAR5x2EmNxi29JhTPwfYBt11CHLVhsqiJtSTjCzKNCbF/avkvnI5/VYpAqNItGViJ/lIAGjHmxGKPY8VdAK9wkRHJbYYIrUiM6w2kUcWtZHwvK3ISUbGO2pq2pbotxA7XUCrfQJltEm0pT1kAfuwBPF0IV0aTixv7vle9OiXgs2YL5cG4xXZBwqUmUbe7joiHRWJClT5ULRzLf1/DPXgssG0uUK3210aquK9gqbYawipUsiozNrIQTqFIjP0JwFbRqzarMpXTbixpDb2yBL9/2hBLWZIUtyf4FELDz8gsLgH/xxx3VGKq/MoOVT0GwkRzSTtSJ/TfSoEIJwe9td9RTPL58B4mtRKjg/bagIzx9Z3zqobojaTGvJFBFDVznbhns4cx0A2Js5eI4Yelz7KyFSwnMXX3aRERjkI2NWA+Sh+vbuxkv7YEGFB58NRlORIJMgcvSPf30tD6OJ6GJEvw/ZvJN7xWw75BqxQPXTvghkk3jI32kEpPgjxsVP3WCNtj5F1n8bIUQopzzg7g/dgGeBox/SOcUFALZCMPI56cUMsf89pjH8Y++O8qE3WsSX8/Pcjhx4uvvECXegx2F96X9fgbqoclP1Yif0lJ+MQGeFEySZESu2oE84JNziqvNlPzpn76nSD3HimvvOzsXEdbeCUUh0ssTArcfeMygRgwnEcrVnTh4dQ/winTGgCgtFltqdYinwYdILZ7p/F/bzOkV9slU23t1rciDaB7Wi0T0PVl16Fb58fP34YImP5F0z4cjd4e2z6b2mzezmBwAbv+QmG1q8DHEdUavqi4jjUuW2XSNNKGxjXuavGWZSZJWS0tpvYbvAOA7qS9EiLUObMDQycacHpfHNpI5BcCh9rQq32Y32yrpXf9DG3knC4k3o6rvINmmHT0rdp9hhZEt+pEe7h5FfGbCbVHc0XqvyD/RTiUlYivkeHRJMZylNXaaK0OZz6HnDkXRQqnEo/6ZNZETV7naVlZJkno7WQhM4vykOXsT8G+emQimaH9MRhtdC/WuDamO0HafXFz2ume3cNMJLKfGzxAMdpRghewI72Yc4Dmlfx1J/FX6DxPbj5viO5Ol2a/u6HD/P88vYSYkfyBx0PDHr5F2cIhVJ4f+MVThx6sb294w84DFxQCivAkE1RfNw+QIODHd4ETx7+xXPE/fGyirTWnz025qP7PaEIG8/0GouZs67N+4HVY9uZM4WGzdCljOHV/xwCTEsdhbozBHgk2vkSzDF34OYIAaJK6PyQJeSlcBOMfnBlKl0v6TDg3RCm177YibE5TkiSQvK/cnTykqYf0u7ce7L0ocPVoQ5WJ3ozdcD+TqD1zyWNGBsur+cBJ2xTOXtvxoIKH2TF6O3BAPHt4cI3kwVCUUv0lE0c0Gn20yYfhiCi3w55g6ZIiOqJvYw3b75FdrX/TJKWTRaxiDlB6f9zDfWiN0YOhXxeUgNjSlYPaYlJIZ3HsY98TvmQKiiaCoZCeXnt7Vu+mQ3aRW8Jzo/pOxsFXjfkqDwNduGuU/6HW5VTS7sltze3xxFS4Ge0XZVCG71GBsEzifBxj0AyzdiQPUwILfcyWO0d4cWLkzWgUU3StYN6VL2rATcFGHDjZiSPhOwg6cOkrCfWVVIXGO7shLHufSddyS13cMV4cYL3pO4irdM53mD0hrpk4tZxwAxhgTb51skUMsiDC/2kpmNg/ehZVJjAtZJviwIvuQ9yP4CCwVFmCEkHQ6SI7XZ9bzGLB/Zfj6VqwHpMG/0ZTLwGjtosKUBGbtYMXwMS2AZMZ5OFT0qpUulX0lSKOqdawfIB+/o0Z2QvjiTBiF6WFsVvgHRH4bEf3ULHFX7Zlzf/2dhBVJYauRGLPdvSc4A4WWF5YgpfuSfO04+fHe2M09ngkAPuES7F3nqZ1MKoNhQ/IYg1pt3xU5OTf1k/PBzuFZVSOM4KYjTqKNJ22p/DlW6jYbdcuZ4QqP77jd9ht9WmA3pqMssxX4IvW6ra/uEf3hhBsl03lwIvM6l/hlO0Ul11wXxXuY+il6PSKsPMXhuVpa4pitY36zI24xRdrYoa8U2UoXr0SGVDwX7iuE3JAepUA7iB6zk+8V8m9w0cEc0XmxzyhpgVwwhkDM8cY3KsnQXBu92u35/fGa7J8CJwpSqpKyjBfxGa9FeHw0mUVlgbexCHd8yDKNdgv0KWPcPzWp1XWpSVRLoYzBRKiRTjq0Im3x/8hywqgUkcKZ2lUAWiVa99cUDRoeIyeM4p02acxQTtqqskxq17itb8Bugd6+fmDEz7I007DSalKyV8J6Uhzpbohf0kKeVCl8/e7J8W0wVxWYZUJBWELPzGooC9Ngw22DFN1hNcBIU2UzVEh5Lr392ssN3C0iajoS60nurBRrHjBnkRWW9FWCWcm0n5GKVBp2sJnJYDxLu192vFncvJE6j2IRaqobpS+ORVZEa4MmNxA6MS6zBaTgt65z7CS+5A1bAZNkD1YNg58n4q30l3JEjDPBXl75nJiXPtdB8rJ3FvvMPQKmm5fbmWIyapm5RmP4xvDasso/awUyynqCIOptm9HdAE733xQ2DF73hXShfoPmg9LduKTRLrVnvOO6N7ctS1tXzx2xjXzUBN33W5YCfceBahUix5xuZ8kjYTcbi1r5jw8HcgmqsRyQnULTAPIwDozqvLrCTVKyTqIuGjj6eG42omjqUf2rYh6h4OQuLJnGq8ZctbLqsXpsCKvrl4OvAWn9Dulnm4G9y8NmllwfVP5fwER+jWEP030oMI+FZLyOVzGrzU3r/PS5i2fR2P1wepYOgo1KpkGwasFw0dWWlC627+8mv2wlwWTaJTVFs7eSnUKqlSq6/kkbw5Pn5+3/C8q1DaoCTQ5roBxoaV1tx99HcjcHVx5MUJFjIGex1biC9WQo70Z5AnGaRruV4bIM3cc3dqbfaB9dOLCj++jQ3tz1cHB2b3a0Ida68DEovjUl89Tqwan6llHAqbZlTZKm/jx0jjlpv+zGsKYdnlN3JsXbks9DTyE67/sdhRVGvZRwhkjaHrpVfzWMBAXGp++0X7S7tRVoRH/0GkC2hLMNCg6ko2GC83AqFdDqKsbPzlGr2Lb/EVJbntfQ5CAKLu3I2/HVS7IgTUUxXXbiah/nKKqNEzdnQjj/oi5x04BjSIWamozw7Gi8fBA+JwvMvebX4NrKqE0aRoMHgnhLflMpv19BKcwFjs2MqAGjptVDJ/zojpvu6ZzFCpyRhfBIU1Cd60BX/rJX3V0Tpb9d4Z59mlq/DR2lWSw9HLfSwOZJGE9q691KPkRLtqR4PflY5ZLeF0nMfxX/+IF5A+kiylE7rgI8S8ydH8HZWiCOJ/sF6eTPSUdnMhGQ9VcYtBjYywhP3Z86q/nG6fyN9YnGK47ScEmHL3A2QQrr4PoGQv2XPdLwCBbIVO0YFMZ4OvsqNK2iG2lBGWrK4tz+aDPvqzf6upkKMWQMH9krAbuk6sW6sDvVXtzhYafNIxPOId/dtsVvslwIJDSPTlp9hXRQimzp0Jn+Ye9KfHpMkOKe67tEoHZ8PZfAXKoP1Ew09ed5B1cL3XyzCBE1S8i3l1CRfttSNVHpGeqOeHH80kmtTQqLKIsunBReXJzKJFurkZaGAQfUKJD5DTEFbhJ72Wm/djWT/RRuLgr3U2stZsxaiRPDNAZKDfbTIcTb4fz6DawJJxri+bYCwamnfHWorEM6oWa4m273nRnmErFRMEKEc49rYEg6J2wwnHNBqakBsAdS3beBLYy7XeO/sfKCcHnQ+CzJooN76DXMhq2LHim403BkaklvJyaiFxxzlF8vVZNRU3z2FPe7AW8Q9SJIS82Q1t/n+h1umpoIy351b/EuDbNg8qJZd9ek5vHlcrWug62OEdmegnTV1JyDf4c0i9TK7ZWQHYYINIJjcJsdOt/TQzTnOgeupLOsNDVx5Dh3abEwNZbFziAn6j2bneFZ3kUlf0uNoxzA50ALVzvtazFn3/DTRRwJaYRjuzRLxmr67gvbDqmc0PZFdq7EoqcifxSLt58WKeGS0tF1zJ2ven3shbCbXaxuk1tZVfRanuO3y/pXkrZ864/fjADSZoP+fpSc6e+c4G77fNisVINpZCHWm/vfdZiUW2/bwjY2Tcg/p6Jjn/6fcbcUx1/cYI1JlKL4g5n8qsKuEsVHv2GnDXZvgpUTHBrEhxR8px0OY8K3JQztsR8icSKGk8/03ml/xPFCofWJeJUbfGfG+z6x+0XHF99xYxU7EUdqspeyiCNCAwbo0Og3RcXfc4LoWAaQfx2sRJ5kvmVEY5WW8vQm3p27DZv5/H9iwKVqmXavNrx/jlDqbz6VGUP3v14Oeh/knZvK/XLfCf3dl3fJLzsv7jaRLwx1u/S1LTp79kMH1xGOoZEeTpEpXuE6NOANbkTzHHCGwnHDA6XiGz5HBfzENag8GG7AipA4j634wYUYiCAK88KQFrWTFBLxlFaQGR9UQFZsvSg8o42yhVfslF7gOyLQG/xI5KVDNByc7JGATumAlOMe9IXU4N7LiDSQGZ2RPLnSf6SQHvaKLOidDGmNR6N7Ukel9Eg6UcMuSQMwXqfYeAiNDliGFe4Lq4ewcMaKkB7+Yy288DHKAdxCgo3ij4UZewIo60LV4AY+oOV4U/uTVKFAowt2jh83j66YjHfjR4oQ4c2MbviE69EmQP0cXMNNAbepDS8luNePGhoYvB5ruMCQhr6GvXP6v3Ml4YerQm32blN9cX2G8zRsa5AQPsyVKfyPDpX7vnVhqlzB6HXDdQH//8P/yq9Orrryxvaz4ys3FC4df8pyXVeY8gNwu4183t2g1OgYux1uz+mC4aOcD+7i5dGOahunLzv6WCjv7X8dol154DBuM17LaRVzSKyPAAAgazz/g01ocSQOeV2joE7uLOROZdPS+phZ2BOZFaYq9uvMw1r1vqhccoUrTkFKLdagH8LlMHXEmKzn/Ty4CDhIjnO+6E/R2c2TJZyicfZeXBo2l4wA/DIPJRi2fbktLT5c20OguCVDXAKIdJo0xrEb6IJx/TRn0j75IBu4A5NTUEWRMDJu2dW3XDYxw18RVR1UObwt1AEr3HTroF5GBtpab8vph8ekqxx8TCQC8fitfX1uNr8y/Gq3oEz4fFO7lPad51O1Xxh0lJigrBVxkp2bjKGTE/pXN6MpjYjvAcY776qLURZOacSY1FPeSAbCud4WfW/9FY1M7HY5klnbg6dzZVlUTqSiPNib472JWxy4AtQ2F1+ZjBB2i4cbpz5Y75flGOSK93GGAayNmSJJbSwsP8xspk47gpQReYfBEYsEyKEgOvdkEg/ZbJ40CS1G0n9kGki5fI2Me7M003Eh5dh0kaeHFDpEXnjE3gEd+lOu+qvlEu48D83E2qQg7B190ycjSfr5Be6e/gox+q/Heo6EBWlEoT0ey4bOC99d7RuCT3MjopEHzfEyhUxJCdS5JD4rfpDgWkHJfGbtM9v2ix8T9d+XDbnNcZRZYBn9XpKGN4bxjNr4wMJbYeYg3acal2SLv+cqXnsV8YZuMrnn1Pr4fQv6gCeWz53Lgn/0ScDHdTBNQ/bnuVvg1Hzd2VgZtIuQFdQhsdEotEKheh5C8+ZF8Sp6AliChXiBPa0nn7VZNi/695DDXFPq8KsuhtneuSlpVzVsytR6TikXqhEq8FCkLITj5K71FImYwk8PqSqkDMERifYBjLv9LlwJpOUN74TnnAZwoJ7ve8H5ey9iOCGexOp6+EyBgZba19ATS9R/KAS+KXm7KVxR6wlJp0/r5q4qSHeYiPDk3AYiXmMgibwITmHfiUmHKFItJIZfRjwBWZAZByLr0mJOt8Z7+S9AsKn1xrgwPsaUOfLCxUbp9F8ihjlGXkewcCTyG8YN0h53O+DfDNI1ZxSgcyZXhXhPuZ94fhjqMP3yXwL8igVZYW41T2YbJC59QLMh9zYq5KI1Y4aJOG8HQlHeMGzD9iM+MIlMjAkjvaFBALiKUJJ+KaUEc472PQhLOez0X0C3y0wieKQFTXEn2OiX4fQloodEoy5ZJPi4KJ3MbjwIataTTjFzsEINVGlCr/ukYxBI70kQ2zmbYlizNeSpmDDs8axAcsdj4ImXzitYRInJmi4yqghaXvawblBGFtGZp2lz147NkAhf+vv+W9+UINEZtI+hXkEyeGRbo+9k565jeQbS9NfNglQmQCB989mzNrWwrkKdnhHPuKop+y5hbV9GyTMRCTSE2kwS009NsnjDyNEnzPqK4nSHYRiGZQ33SJtJQYzD9HXvEN7oHdzaReskm6Mxl8dBtDllT3/CRD6npBEWSPzoGcKe1z6z16w3Au47hJ8PqpiU0hUOVRM4Ow1o86HlznMqug3L6tJbfzr9Oj7TphgXj2fDKZEwJdkcLkfA5TzUXTe3sYzjepKl9wBpCnRKr+LH3Vw6TxgrI5yxp3F3bU7iar23vCVseYZse1EVu3qQ6PeW27aPcEngtORyvZEh9ArGLLJPx2tVdKZ1zME5hZ77TSHcBuKewI+FUakI3Yf02TEDfZT6beR5KO8yR66sDNDCVA5A/mqR3MyWwXF0G0bLAn62TeMUagGe1W61e4uO/2zo2Ig+Oj+ujHdEUpw+pUuy6OdMsoSjwJH8gvAEZ03POWD3g4oL3xq0frQ9UUXcQUS9a6iM8RYeL8ducnbARGoBIKKhiJBXGx6LZkc2hijjQ0RDyCUwjblb8cnQvbekauvAHRYwov7kKsUzmoBDgatbgU4jVrHEduhFB8wKvhkmSOjtrNzBKJ6iK6VUZ9ZDxMEggej3VWCxFdAkTjbWz2zA/Nl2QBj2inRs0jmbV6tzXVHb7Rg8Y97E0Ha0IAUApEXTSkcqn7pPqBnM2ck5F4K1VhGo/fU90jI9UX3QKcSNigYSm/zwqwKfGwVqVXZgH2l+1EeYy8ZfT+VOcxvcuoCnWbV4eMdbz7ZOnK4Ce6B2xnUJAl2SMGXltit9PpjmyWM9s8sL4/4xnckSh/jkhsQ4cZ24dIGMTz7pCSmeDje2ipPf7KY5sZhf8LpMVos69Jzm4lL5PyiMUQzh1eeUfnUpMwwgNFxyhcbbEJyTbIQOhRY8tLlIm3BMW6AwajVH0lGE1Pl6M9W1KVBxIndlpM9G/jaRjMf9t71KYZq3BKOY3q0SVgkIOmUNS4VgAvtLyKkjBaEjRSrcamirhFRuyzPTolLrpZEibk81ekPEZ9tRBaLLR777lvB0tGup3Uz1MVNYq12Pyj4H5Qay6auS1uJf+QnyaYmPZ8dOBgtIA6VESaplApExcBw2fsnep8cGkCACDLCasGY397PM82ifRUVUJ78Ed4R65ikPi90F+w3e1sEsTdASHyn4LXSBx17xMJH1ZHjq1+/Y+Hb6SUVmfreLsY026WEDPFxeH/ylyaTHiGjiX1vaWDBG9b06o4fGFe0Un6T43QKdwX5Fpiov1ws6SMZIpG0C8YZyaVBeQ9AeOsH6ZdUgQr+t7DP02egMHHeO9isPVVZFa9BRPZLkQ+bM2rLRmP7p1CaZkHV26I0yCgBOSI62N+tTkFaYNmZp6kz8Bh/AVZN9ADbWM/+U8EElShDOz+gcUdvN6iNAudC+yr5VaFK6uLx/5ldrDeoBu1mnVdVgGIZhTGTnmIgMWsZM7yHhUK1RWeDmfk/2qxVIaN3UZvPWFR7CtmjBhpco5iv5Dp13ANxFDXA74ZjlnJuFduFHLzRjkoVaxVmoKgml1ly4kbdH198rTyooe05gl+wIztxZofrAA/EeFYhkOlzJ9WXDEcWFEj3jAVuX6Pcm8iuXEAFW8v0+1hUK71ddtcgZ476FIgcH5DBPskeFePh3DBiFjtiyMieanvkCeegFZrIhMRUPDD/pg9PgIabbN06IFXzLwaNjWDFgVWvsJX+1Gv2gyRfgTkGPeeGUbqqSRqyNQfE6qOKWGt2X3Z14SosFze56SJaF80GzT1d3hfaIc+mL+1GQrLDrOZKlK3Lxb/LtomifcUCL3YdFpLiFuBSiHI5DDFVGwCdTvX4ThY+hNjloapU9pkqNypl7bWFcAix2qSKZ65Z+sivjJ3ovWA5MDjDhR7uHewS8aNaonhE1sGWbKycDd9JTYR6Z0/Y726CQ18T043WK+ztyh6sxunSBV0wqmh9dKiIhhF6A1QF04mUqaqBkVz51qLJAeCe8GmuJJH7aZa+Q3RSTyvSAM24hDM3gCsYBswXc2A63T16glL1y8oHUv6FUcAYcALccxlyZoeHyMYBokVu/eljrUoEZAvcoL1alZihsNBGWn+k4vS3hJqYq77Fjk1r4Zm5EV7kHnDHG5GYloUVdN+QBvNg5jQVgFsf3TRk9A/inzpcViHy8D5awTORDNbiFR/OmH0ntNmTldzrQ+52Frl2f7QQJF1m1Pxdr0y+tu6CKHyNIrOwYgzrLZEB7Eoh9cq9K4mWGF4DQr4xtgg2l/9QeEShWjN1bChxnhpbfrdP1FvZ1bYIQiCQijCFhgV5nY3X1l1mVASDkBxcloc+kXUOdDKNVqJv0l/DSHZNItsJ7npC0xx4dGrKa20G8bS2muBVW7sfuMkAtD8RHMI/qJ9Tdnr3DyEhGbYRjzQHfL3wIjYMoKSRYmdk02vzhoNhTu1RRs0K5gv6LHdk1Xj5PclM6beb7IThz4My4AW4JvufA4ZyGK6lmTf7ME9O4nUGq1j+i08I34ZvR7uVbBe09JqqxNbBZE3FghYacjBLhCdEp2EgjPWmotjKDj9TeKWsPeyvMQawsue0e+JWNsuc0pOnNMAhdHvTv0impuvH3gyfNlT3ywrvI+WND4+e3kjUFSUBIbCXzsR62G+9g2xRfHbd8jTtt93it2klV1nV5r7Lur3bkBDS+G3JIivyuP3A3iBQJ42hwfABdC2cFNP5zvq3dbphacCS+N90pKA/G30E6dWJ29Ez9Eg3lzds8+uvlSbPjoekNo0g/pKaDybP22Ihg79S/eKkY8gnqToJqAKa4y7WKdvA01Q5gGIZhpHC+9U7/MdNGbgAsjFWcLNSPMjEUFeldzQcMxtFb032xGyiljvzmjii2feT40sHIO9Eku5WvpMEmbNk+UulYCnnC0OJFVCkHmGVsF3Tlke96z2o5hQylmIMpp0izkIFzdINE8FDyJBxwPpmk/dXL965cj1rdzvHSYYxy1TTA/mlNRHWWpIez9ewOo1S/zG8d/XlrUq07SpzEFq9Hu5TkdoogjN/LaADs76MWA60kwfI3DC2ToEETMmCXG5axpW52yvDqEWo2g1MzH64q7E5vLwZ8zo7lOisZ2O0ZUIItSKVgjSz6vgiScQWa+rfMUlDT1/w0jqN5Peg4NNAqGw8nonomNtH058qURmmjSzJuH5oEPNFruyXINUkIiWFI0Mw18V7EspWmlzZDtkmFvhLPzyk3jYyvfAfqFXIqJWV1/IPqL9K9xW+WWUk0Fr1P6bS9XZUHIfAFAim/pK/OwgGaLwdbHCZC3gt4Vs1SePbJDvNia7qcrVTEoO6GZITwGbCYLCRzpsVS7B/gkmHna6HbuLrzsmBjoERryvtuU1l+oLgOdHlzuVMRT7DDFVx9XFD/FCV2+8bwNPach1UpJvivsZEbfzHbF5EGeWLF7uZZN2F02Ee+jQUeDAVsnKweKbBO39v8Nt8ccxRFmL0CuDmnJjyRrcQo3em66ajtiXmDPMf5jE95DHMWCIQ6lKoPzDmBTJpRaul9JnxdaRbCKkyvIr3uBULJieF8aPrljfiN5xJgxifsk5+ebRv4XPsNXi2RuQtJApng1oIh9gYS3kETUXotElJCq3Rsn1g0HX+s/qtdTN9w5TEYFiy1MR3ETRaJiEYHXBuAeFzpkrqFHneCNIPgpj5ruD/FDgcuBB1pr29mzgQmuDpHiZE6Ssk/h+jlulPoKPnYFiiTjlXxbdqR6Xbq5HEk0JwIaA8NlWOjzJ+VEvzN1upKUkWWEFYU9lcOzrB1wM6tkuAOmIJmYyOH03s2DhOvDbiRdrHeakEtHZW5sYsnCUkM+F6jRtyKInvhZjlZKlUQpjr4BSHIWCqKuA4OkLyaLLILU0CC0XTd63tPX6+JIocoFsUOchb82nuUcts8EBVz4CnVosDGLn2d8JDLKfTqKmEWy14uIsz3Lb3P1g2aNCGIJ/sxmiaxyHKVG+y1kVi86aga1YnHQ8oTpGZ6hcQng+0g9PcAVhPFMCcGo9jL+Xy31HL+IvLYhZxOysjZ3qWSB7n1vyaeFo8u199r/fi52mNN5i5/lupGYsBtKvB0CFXmQBY+vQL3Z61vOrWH+iI9dqATdXj57I82x7LMFOJ791bQYC4vdh3uqdinyuvheAGUjSDANA1R6crE9HzybvGyFyT5OFFOIqINwzAMi7IfF5EN3urqoAb5IueFkxbSDvXA2K9+VKVq1PPnpRjzXFya38DVUI20nnbMhPjcCRzxj8bJ5mRxDpRToTxfdsh2pqFuCy+CTrgHuZLOPagjtMStG4L10G1oS3xf85jEdMiIngEjHa+WdfxVT8CEr5086YHUi21HlskxKGwhWPMT3lUQyTAR5GGZyrfoHx43RZ01XRlqEBHMAu2MDvjMesLZtSQ3L/JXZsdtj4xxtgcGxXUsxwXcoPZGC3Tk5amhvS7aMMTPLN1GB53ETdrT9uBwtwWFAogxnbA7C2yN0bB5pMSO6SXenH6Hc68qR9+1UiaZ8LhPJJQbmU66DyOoIDlMeb7s2nuK/t2wy2xFLomdkyGnC9Q34I2E3gcG2si/TLEZe4DGZlr6S7AmtgWzBiE5CaL1VBxytZ4S+GEz5HRp9j2SSBNTn0+oSWH86ZHGCsqZLCSbpoeeOrBfsRwPc5aEvV4D5QIua6eupKWSEyrRN870YDIg9PsA2jXSAPklYUOcoWwt5MOUpkcalqqhRMjaZRfChO++EurDt086yLxmvXsh9e9MsVZCJg6DBEfQY+NjXnTcmtWIacisjdFhY4FSH5XddkwXWF7lOU4KkQ5WPfZucwtPT0f9JnmYYbICHGxFiik5TC5RjjredDc9PijWd8ds8oqO+Zu5pt9J5h2vqBt4kAl/XopR6rI3XXvoflMJzdXNmsckxnYhLnafPIc3Sg7ZMvCZ9TiRjduCM6TN4YYK4pDGaNhcO1V11Iw9QJ7MabYnN/IvkwbpuUk0GcuykcL5946HOYtX9uQzeDp5ucy+BjAOMq9ZSsPaZ084igDWfYG4SFaAg3BPf8YRvNnLUkp+3ffJc7g2CqoelJ8zlWVUiBTg6eSlpyuIRzemRm83156G2ZgaPQhCNfF1YoH8JtV16ItXf9FSluP4D5G+Xn+n5l3GnNaaYOo783iMEo9IDip4pVGiKwxEtQPFq7+AY4d0jbugaFWLA1mE56zBlYyd7xMOJCX0iCYuOT2HZ+ePBFSmMtr6mVHP4dkKzslW4sEQG1XkFAtERiz8Mae15tKwqnXJw7suXk9yS9W9fr1HOMfM2vzu87lz9CdJEK0HVOl3ztSXB9jUyGJeTY5FX53h6njeh1y3kl7KJdYo0ZWDPLI+aZOQv1ZgOfhnpykJApJ2ZZG4g7QR5QYtLszeVWZhQhdusYoZWI71PVs5q5PsJGyOetEo+z5+lfR1QdGqIWWaoQJfc0iCIvz9bPnvCmiCnI9QPg4aNPQYJHKEptpPuw5NC0jLNzgPWoiMgPhE/MpCGmC/Cn9Dj0QVeCApoR9u6+1tmbEHp03UPuqOfvc1zytEGzVxLf0gjsQghmEYRnKP1/EVJFmUXQ9tPpU+kZVhlBbCKNoqyYek6KX6tGt699lPFbjApbtsCCmu4wwo48xwwE8JXk8IeWI/2zsULwjtVHlZjJZ5P6loduiIC4YD9KySQFY7GH4ivlUzTsLbdHq4VdKZEziv1TyuDJ/LMq7pI2e/wPHB+gsXa14jQdU0Y37jfiVVSdGJtUTkl7CkibBtB6fsqvn52ZurYxwi1za40gycd0Y9SznzdOYPb0ZgjTbuN/cUqs4qhSWhtdvn3ztC8nHBTyjLUIYEz/XbP5pQ3mfPVFkV4YGpGpOt6ts+rFZBCDWbq8r//civ/Sh0BrOrVe5BFiUUTtBuoSh5tNlq7OrB5/wfIiOwU7yrE3aNZPL7yaydvTQkhSGFgi1GYCr5DfnMFq0Y5fdpbsXGw3BBHBtBewGTppeA6P/2jYxDr1+kJ+wUCIRXKeLXuoLx1nmp3ypUXwucOgwcl19MehxLJ463MBPqcRUFgDC/iSWMjS16Rqry7YP0UO+k5whG11xbaYaPtc55oQXx7cCk0rW8nTYDyrdST6vtH51o0IBlAGTT/DW/Gq8niXpMn+px3g6JRkjcJ+B2c5fG5aJ/NE73yeDpRcm5J8SyymYGp3/bqucpyFdFcVVILEB+8ozfNgDeKHfTsTPEn/EjGLrBFgRYN5clr/cWXWzTytHyL34Sjm7SBo3LY+LnctcPa2sShm33dg9+QlObgqGnIQwKXjwHWFnl0dlc5llELtlGLRAYqiy9SqTV4eA3f/JWcV8nWbJM3MgIMlFCbbPcnFPRg225eZB6pGbphxR2wxRoPiUMqzXNJ/odgXeDqsEBLZe0EUSvBUIhAHIr7iNImod7U1FEXhR91hVGie+tt9/ase5VhfqF0B2ACOU5IEpah09on7c1FciL6C+hZJoUEnTMrn+4e63P5jytKs5aCjTq5Yv73tPoCuLwbRvWAS5gfDFbdFFTrmZgrtWcT+wt34I6+wwHH8hiLVTakPzYT0QLqH2w3HUzmoerIePNySyPudaBs7SgS554cDbO4mtgzDN3PPG8PTOV5yoXmVda/WQ7x+jjIMks6ZENNwBfrrH4JZx9vOXq0VsZOMSBgzWS42IbvxdlvOlpkfj4rSq3NopQKwwY9qb8T8xgRO2mAscDulWxgIoDewXC+Y71NOw+9gv0BNGEz4suWKkvoHPZjU8hEQco4JXTQjtzoXPzOfQXjiKEPl+UZ5A3pxlCaXFtJNjHrcRxBaA8LRoG95zuZNlUUNdvi98hBWkfG62Sc57InxHclkTzWe2AXKY1HwUOuQoUJjNc0ayLdcvhQ0JGIIxW5ztmZCzW4w6Ro6GaYKlYcoZxGfEurlZTygJ+vOWrNvxjGIZhGJnL+oJvTfdihgyInELdzEf6UfrOKjB1NKEtLoElwBLG0wLZP0jclokRVmDLuTueMn0ywIY2d5DGwa9su8+0oEyJG6MsEyoqt3gje0OuP9chXXA7vd2OUkqa5TEs9PHvx9roZFPu4WWTIJvG4AZU1DoB2DO9uHdW1ZYELkCYH+SNlVAH/N3qsGAEB3a4DfmXzRNSyxzUw6+e7ahO6qeVCDfoLMO3We682TvJ5ghvSAKCocbh8el+Biyf4MilKt3jwEVrTxQz+cmA2sH5zzM7P3i6hStJxcpSpRMG6g22SncWjdwr+TdTiZAsdrO+eiwUNPf7ysO46KLL9K/q9pjL+oJ9I6tGixdP91kvDHxEh19QlKNoa6gTU7EKw+kp1stcVDKtnwNN804T1QbdKfHElJqLOS3hV43X/OZb+t3wcXPEk8e40CIUBpz4Baz8mpGRlEsrSornYoQKl9UGZkbaXT9tn7sBmHjXnk78+oTiuJ51kEoejSFJx5DrjEmT6Zm1rghDuLilHry05a0iXAVglYCvJTOz7osbOgxIgmah9Kpb4j75s0Mh49+p0HQ+6xTQzxUYO5JNzquSzcEuQw79NxPZ0HjUOUQjyh4zFG5GHzA4I+i37YJZSrRU957JMLoUnBCPJqDpNL0QKdI8+QjRffDdQqsPPp5oMRqBU0fQ1nQvBrPL9wS09wPIviDiFO9/X2zVABLd4yUVP1xeTLaiJq/vL5xjbFLTqvCCG1qSFx3QB6JCFAi4dnPZtyz80aBrYZT9udBRAyPyq0A4kLZ6yQTuIxF5yYGUFJy7LfY5/hhrVKhD42uQE2wvf92xcGlmZEc71jXCRvs0JugBBL9yxOKIT66+jJH7p/LnAWDfXBV1RKGkVXc0CiulXpjQPcLIYSBmtqYXGJB0h8Ae8mtKtlsZ310M7IOA9MlOZZBGVIxvzHnVX6BSeabNpCwJrPqMZfQZVmjbNwthWvew8jIWp7kTvdZTUf0zRvI9Bl2oZcNlSuhL0tOhQAZ6d4vZh3PIgMhR2ROUK0+DlGsAhkVKs8lef3Eqevvo6Ru1+k1jRPVt1Ng8E+eHP5iAZyUwT+2kh7eqjijrWrmRn9p0226dIKrpc4YHU3LfoG28gHaHTFqjokcH6SiCDYKXaMrbWXCDr0OnqAm/A4y881NTfhmUeP4nemKQpX37Fom15GHRICt2cs3GccRIrBNrEPsqkfh+nVitUaswXGdOPN6uoZKa1W/jdpMBHPcqh2G5RagNSQ3AzcLirzxFmBSYbd29VuVZuB+kO5JUVYijVcCJ6WaX6yby/D6eFMgjGOxk5/Q0jEj4py5XGyox2fp0k+FD+ry3SWinDhWYYoHRSGb32kCkwzAMw2G3VI5bMyvdq8E7QNjJWsYmTT5GF+4x/Svhr8Pf3FlIFFJ8bL3vih3gR5KZYI9usv9lZ19iJo0acNsLYupIYVUTWvAA9+LMr8vtdvui6M38pFpeCRgumpb/CvxW1+isUeYU3Ca0CQ8FsCKBVCz7gGZeZst2dl5StEephlpdeO222876iYdmIRV8LAUDcbRjSVNMipTRhvOD9eg4YuXYLrWL+ntzGoDtwytq/BqQuBynHdWkBEyGLBsTECUws5kd0ERlxEEh6pRHu7QqhGjQi0DkBQNloENmReETNJjETEHHX6D+/F312Pai+lvBRd9p9x04x2MpwfbsYWsVwq5yUWxohWjAiBfKQc/Upa59Uc7tbPu0jQGA+qlb9jCbViSawtQnma1QWpuwKHhC9Pvc56rELCYYTL51/SH5Emr33wPZy2y9mVG2rFGsSN41vuDekx1TEAg45JQ69Zhn5ntYl1eaZxMymuY9JJUUvNL1TXk9Uj/OMErt0Ny5A4LVNH9M9GPx08pOg0eBHTf5kYVArsQGvN3IhoubmwlMVAEQ4KrXpJBclzIG01vOJFc+zCw/nn6rPgdWCDgxhmSKOBzuNsEVEGbLQCEgGVviXUP/cBFCf/DXBhpuhTbN0FeXqBmhd7IRmQAVsYrKAPoDqDjUEi41TGGIOcndwAT1xTqvkeGEWHA8QiEuBzLxgMCTwpFCKtGXtVCi/nh9xVHO6hdlIVMyGEQZPxJ9CEeKiHiBWDFKbV7qy6/EbA9BOf1tynOYwTJHBJWcFaFh1QkQ9oflp8z5162YO67Nfs9NM9JDWdm+6lGssnekBzoykw3itNZVFLevrfUjHqdANAJBT9Wqmb2DSJclkFhlByV4je75/jSTFcwbTPjlwgh5CulPeyt9bVTLk8CZrZw5nqTrNjeOfGcZfT8yi2gIlPdJyDGjL8eqNW2xpdUAWmGJy1N1W6qKgxTQtuvEYrGD6y7cWHZ28k4pnMgLK8i6vd+kVlBTHhL+q1xUMg41vfvT6rpi9cmpSTa5RSVjjwrO1Ec+5lQ9rqOj66RGZYrGdJT7Pp0ZeICzRDinuCRPSjF4twTvyn6/PMgJQf3yfFy11PSwCxyZKdSndL76ClTesnAVCHNTdPOT62slzcsO3gZS8cIsVrHsZojTPLYT36vGFKzF0F7bo2mSFubx1jUy/dtWwCRmG55p1pJIXh1hqlym7zX2Cx6HEp7AdskFjXqdCheupUoE/4fM8YYW1rHP3BI+bH0k+KzNQMM54VQFyMInet++br6kk7gVADLLnC6Bla76/hUMKqvIz5H305gZphcf+eFhlUMrgGefV+ShKwLmfBBV7nr8ns2lId7AiXQf29HERPbeFOLc4B+7YBnmxFIUL95yO1TQ4F5bDkWFdlqqyGS9k2edMtJOGJVoV4t1nXjfJZWSSknNU3erPuDhIu0DPkwfPyQqtvwhcVnp5I1rdrWz2RvXafBiNgoj/k+kPM7/ed6Ldt60z/hhA0E7D/0Wb4Q56D252S0/JIZVe/s+8Tuei0+buy/RP65hsp61lCOW1+Wn76NTkRyyOxwbY9XAfVyRv7g0tKSnUdhqIGFvDpI2G8ix2kiSbiVJ23PQfd6Hbx8vR9B3LXqDTxTsHFa+Quilcrarzdjyngc3vqGrb2w5cYU7pNxIWkbxjxSbf+cuRufucvJsROPHsRVRCFxobNdxyjBahHEEWVSBuHhW2IRct3IeR5NHJwSKW5Eq3Lqk47CrXZR4cfwttQ57Iz+OqYju0ItVvOErwz+7MI4siz6gXHyjtgm0ja7IOIo86mEoLgWq8OWQjjtyOphk/dTgWKYm901quCWWInoAHNGSOFfVXlpVfUtEWfQM5uJbpU2o9CvJOLo8uiBRvBOrwh+3dNzfCwsqKCerdgtMDC4qfA5W2sIGoLIq/Gcosn8K6USoxRwK3eocrXnKiWg4e7YJ0RlhHR5Isuy7iJ8IwoXfLkX0T2UzEXbRZ1PtSh+lXmU4UeXZH6kwERyFg1EWvQpVEzG57L1TGt2jbcIGv3qXfeKv3E3kw+HTLo9+5dYTkVF2b+ajPVQVrtiK7EItnQj4DADykt2D8jRFGMIRcInHrcRYZChpWNIQuEfWwUDMK0h5RBmDaB1fmT9+zjGX34w3V309Ij20NxRMy0Uer8RwdkRRYy0Nol7WaOD5kHhcLFGuEELvcG3v4XR5ucQBb/yYI33MdB7HWc7L+/O8Pu+TVsfgMdqv2nA+f7nf9vb6N9U96mjC/d59ba9Nstg5K/7EfhG34z8m2C5MMPMzz6dpz///miMK+V2wrtUJS4hU1rAQa7YXmMubts+dhte5Rfm4L60W+yW3OM5i/SXZJ5+k+8BZeXDPC4F/G/qHab5/iv2MsBVhcT2B5xb/pOsG+ZHiVYQgvx39XbtrzA+JYXECQG12n443JekjSVLjfOFANrVLN4wPLRIrgD1U7e14RQ3aJhvrfzMsXXD8++Ima9jjSHN6PpPGIb5i5wy0zN45Jwpy450qc7dJxT5zdPmnP/C7VxV3B1QEGDT01Y83uKdF8bWp3CLIXRsTHe52g2eMHoc6PGq42A2Ew8/7wn1XDzd/dU6qaKhs6btNNY6xMVJji7XRSUk/cE+r6cVEU/YGeAWn5BNc8OJ2WmB7nUaLD7QdrXFGjLTOBeF0ytv8eAIi36WpvswciczB3/zghgOXc7+7fPCeI9EuH/pNY3H9Jz6mfiE7T9FkevXXyBNEAFc0ltIQNSjDOhzkzs8c/P++QXeqkS8QYnBRLTdXG6IxqBnWCe7lEDEH5M8QD6AS8gwRC64uWASiUqhWa/M7Z5LPEXOCfAfRm3r0l8gPEKXCZUA2iDRgRqynGOKG2SMXiKXR8PYb+StEcLh2WloqR9QONWJ9h2CDc0Y+Qjya2ikgnwohyV6fnkVu0oZoEuoT6wH34iPmEzILsVJUiSwjYuK6EyziiGqAWmF9wVObZJinyLtCrFWvfkL+YkQ5wGWCDEOk32FeYD3HEG8x75F7EwF96/+Rb0aEDq5Zi0twRN1B7bH+g+AI5xp5b4iNq53myFdDyAwuvdCmc0Qzg/qG9RgPchgx35G3hnhw1BXyNyPid3At3LCAqCLqRmuz3CiHAvOAPCiiT7rTBfKoiDLi8oQ0EKljCtaZUcQ7zCXyRhHLpG/9BvlJibCD660WlzgQ9Q7qDetoBJ/hPEc+KOIx6U4R+awIaXVVus/NhSOaFnWE9dMM4hPMF+SqiNWAqpBTifiE61/BUkJUE6g11r2Z21GGeY58r4j1oK5+i/yoRDmByylyp4j0FcxLrN9CEc+Yv5F9Yylzpm/9PfLkRMhwrbW4lI6oM9Qz1jcjOMA5IIcjNp3u1CBfHCEjXO41bdQRzQh1hvXIGOWQMf8hf3bEQ4daIM9OxL/hOtVYRBFVD/VHl3iUr4x5jHzniH6mj/4a+cERZQ+Xd2RzRDrBbLCeGUV8h/mIXByxnLHn7Rn5qxOhgOtGpKV2RF1AfWD9MIKf4HyNfHTE48yRE8gnhGDP/BJpaRzRgHKsrob4gGnIRKwiCmRBRLhuBYsYojKoDutOPcrXiDlD3iHWUR/9DfIXiNLgckAGRCqYCWuhDHHFbJF7PJdXB/rWvyPfIILCda7FJSiiVqgd1r9KMOAckfcQm53aKSFfIcThstS0aTdE41AF1qnyIIcec0TeQjzsUBn5G0Tc4HqisbAhqoS61dr83U3ymTE/kQdD9K0++gXyaIgy4fKCVIiUmCXWE2WI95gr5I0hlq09bwH5yYgwwPVOS0vcEPUA9RfrfyX4Hc4XyAdDPLa6U4V8NoR0DAotN9kRTQc1xfql7sULzD1yNcRqgqqR04h4hOt/wVIqoppBbbC+qqc2zTC/Id8bYj3Rqz9HfjSinMHlHLkzRPoO5hXWXy4mP2DeIFGdGHZW7g5QPAG35SShk6lhfhs6Od4blZtT03ypr7sXFDF2RGek6v5RbdXx1nQmyswD038u6ZLOaLnzj88g7+t4zxZ9gSvn1dTD8c4s03NTx7y5xfH+vPNcN9e6Xrm+hp+CF86jsF/H++AVXXN3P/sXgofhQMrES+uCpgo1atIaQWsiqr0qHkVjCFoHchVMWqoYKVoSEm8VR1FW7+4JAg/ASAXe3xPqPE4UD6LcsdUpaKhgzTO9MFKtqSF4AjpSdjHaL1hfYYuG1BBcy0bUxF4JpIAYchDXbHiA6gS4onlztPhBBFADdxdcc41lWAEB67QAkJEbwWCG7SMDoOaaYU3CsGnL/sqoeaPtWQ68eVrYxUUk/NsiFDCP021Obb+LYJVLgCljLJeQ9HYagu1NElu62Yq2K7aG9e7wu7VYjQ3v79s25Ddj06bGVrHGxUsnBUg6V6no5imLhlfTUxCjEj63kQumbe23doN1XDqKLcCD0902dn3sww1/ff2AJW/l/2VUX1/+2S+ts6jkXQIJZutyMHTt3levQpX/ObW2FNjlT1JmvF4SeFh9a29zX/ZjKIf/vvDnWTTOXpHweJ0M/6r+fLUuvQjXb8lxOS6bw6IHu3Zjkpf97jF9vluYmO2/plqSPOu4zw/eCtnBTq4aN9r4Jhmekn/dPkMCRuXiYK/e/Obd9tU7yILBybBtrUB/ksPqUFGVp4szAGUc7ptmdEiHKxE8Drwhvuk2MGK6Zn9LL+6eoWE3luOSJ0cArm+0w/HI3DPtEL6ENCvc5s9WRo/hkL5iSRrxQsQRe5fbWq/piHNy9TJZJAiQuVKFt/nQcL3viGJN9by5Jrc2KduMz9Ve+1hiNg04uiiHCIr2lZlzqCwpzOmQ//HEeIcq0AgBlMDoi5fmLraU1TjneaRUhF5g7rUNTuH5jk2mIGBo2uMIGs6CHvbS+oKbNE/Brw/Fj15dcLqzX230NdqCNS8BGuKJb/2UHUpLRs69N87kerRx0jdOVxZ43cOOJhUClMwBjBzu3nGiHTnS6P9vnM8na5EbcWVF4V77AvwwgBTGiipPUPVlpHgoVT4mJ74PJC3z9EiHXglHmmG25fZ7I23I2ib/juBsDMofpJbKWk04YFfC77u/7N9WVD7rI0CvJvOilpZl+s/FRqixjnTSjpUnY9mEgvtwo5xfHxwXsORL8Oj2xjoJVM7mWoz3sxbGK3N3Z9jj8tanYW41Zv+3YfTrNF26hEolVlmRRRi9xLKAXjYhEIuahKeX3O90b48TvGz0Swhemz444ZWQ7qUYxsPqjNFOLJ1GnqWx1nK6g88+3CRXG8uXASaTYdEgJGKgnxE33KtoNk3rk4ND3CG+5RUIRAxB1L0rYvn4xtzD3amtitXmoA890TW1tG7VPGFZwXxdLvyJmlXd2y9LztfmMQT/fuuJH0K+eGt3E/AUjoxW8zATUVXAnnUgu4UeUszSe5gyppS0OinkkyDJUQ4OKchKUulmMRifBrgcS0/dFFIyR4aUgFAVgcm9Bq+GPK3pKRjAGDg10GPHDWnngfSsDGO7QmmziIeuZtzkek2K05ZD5IyRkSOh/BX+dSlQ8sysiTSlyRJ0UmTVu0QPmXnpOML0v+FcidtguxjWxKKEKUsludKbRw2I5tgMMRDD4zaLNGrrT0NgwgEpeSxb3qghVncwr2VhA73tyi9WLz4GaEQvCnDAU7UMNG2l/cK1pemtxkCT2RNrRU8wliuAilY/fEvKRsJ+2RseByme5NlMU7Q2CAm1DT411M6JjLo3B3MQ2SQ6jZksZREanQM8bWgodrq55Xv+fKohb6PqjH2eZ2cac+zRPAL6OKh7KzYWmckV4DqnXOE2Dws49IhIif2oEMii3+/1uitJV5oLzootASTD1BWiTt07/sZUs/obYOyxs3XmrMJ5dwC1hyBFPzYmo77F5rD05JtLL5A2YUxINRYRzRVq0kBNSNKgRqrA0vArpZH10z1sIZQ8E7z1FQGCqfvVMDROkbOo2TzTVPgctnk3irwh2Fporqj708dbShq7ZrQz3L0Lsl6fm0QD3MD+HwPBm87LhXpFXWfcwMonL1IQhqyRzWhHIOvaJ8Sp7hcOc1llLybNF176Cr2FxTawwC+cz3upzDatpol6ho8G+QJP5ygcJd3VmW9EHfSK12EEWdnkc25Nhh/8KErDf7myLK4OLIc9rF67bmQAxlGwEr3HuuYL/Pu4ecFzUFxDTSUD+nS2qRayi6dM+wonfG4D6Jc0ICxXkEZEfWFLBK71lJPYNBKBbTcvtx57EftSJhdifNm9Dw1xo66VdwhJyzb79SK2AwPt8su//r7RtcQ44VGZp6ZkO695oAPya6AIePimngmeeP3vokqVV4F6TEDMtwRRbw2BDQXW3lqSbSZp+8Ce9BxO+VUaoajMc1ipCWfz/BYJk2aKCL0mu0KeXAC4V1L3gazpcmDono0lnjLTCkEgaWaHsCY1zBiidtcz1shQ1n5v+vpsbEPl/lAEAo8kMzA6gzJ3H/AF1oJbrpQWVu+blrL6f047oEFhynUtZFI/+tAK5pMLUICUqReW3SNIKudNzl7pL3wTtXYmhinV6XPsS9JtyXisY0bybxoi3zILZb2Ex6lDtN+Ep0IzS2rPiXkKqbtIYxQf4fCN1RAriKFujko6BI2IECtj+2H+EGQ17OZ0X5S7L/CrOLWDpVOQSNcG2kLXcw8Z+wvqJSAqQabn8xmjWMCpAcuZLs0v7si+JU4Opr8sylqaRA+xi67ydiMTTMgDnPegP3PiBHe12FPwonMRkqS6AzvfLUoXWAJOB9kceu7vqltunEa/nfUyC8kyGlgILSE/8i96X8M0dqrJl9GM/dRhmRL8HBQ+FfQmmaSvruZ0HcgbKgUELHLRpRTpq6TZJ2EJsDWZdQa4Ee2+e2AmIu9Lwq6s6fROHRMRnbnEMxWdXyDUBr5JZqh/CVzfFjdUGXukZ78bWBrrOI3yXFC+2bErce9EiGTRCLzMZpt7bX/6ppqMjN0ICGxkCjR6Aow/oe1sj80WxL0s1w/doZGvgdHjXi5kZ1kkcvTa/m/2u27J1oaqBm7O+2QeWj/YirWrkFkJ8Uip+yVEHjdhm9hosKTnsytdYDDbohFbookFq0GdBN2+psNENilJImse1C72JMMqhUlc5xne8Ixm6312Y9gM0mxf43JQo8dv2V6qawDaD7cKliGWYO4hNxIOsQLxD9kyDP5pOGujIUKwQPejmEyZhta4Q3FdGhYZW7xQwiZkhdB3Om2oVggZs2bs1O5senbyBIA4KIYNmCipztp+l+0NikeFLt7S9zwP6ln2nzeK8WFy6FzP8EkCwj2mzrUAs9Py+z4oBshlRPoiOvZn90KtVN54/WT/J0WYnCDggoK0EJ7nG961mhUwLn/i1qGETfA4ca1m4BxmmLT2EZVAYuK/+k86Rxm1r4haRNwMNHq2Pxvvk8+EOZaHwAUpEIe//OfGVg4EeiFr45mJKXR4H6qRlGUxHTEKK9ZCUmKsC7TsFATQTZ7fM5VItUCXhfhawvmaJ09DE6O2+Vbs5gMA6FSsAzvbkG9KVUYle106ru8etLlSvX0ft7+4gyMR5mfwhgSY9yJbkILJ+55BdWetaUg8lbyDA9kO5rv8529um0A/f7kAYjSYO4o0W/f/oOv/R0i9xqw9Tgtcy1z+N6f8O8AkBuMMpVodTL/26doqSRBnMjlp8qYQGHVaiARPXDYI6b65E3ZxzrEa/N0NNhLGMew3gkhDLN36weVV7uv5nbVo2QaunWQxFrmbHG6QmgaUae+PJU1SDaUBk9ULbaPxoeOkQqfaxKTzWV6knq/zRoT/RafrnrcIsj64+N/81yyBdG0R8F1YiqDfBPiWi+oMHQ6aC/3ZTxq2aglSrVYQS49x1sXDbIJJTP8XGdukqaJzvoA0/glbv9+HAwFIuS0404kfxwMnskXihTkYW3LWnm3spx1O3oCbfVkxuYHXmItYDZ4mNqUZQKuBl3sSE0awa9aou94dVYlcaOpwQ+zJil3ndXOo8hYUXW5wLLpSlQdRXPsPMB2PukE35HltOUO4D9PtQ9bS3HAR7fKz/GX1oCbflHUXXCrBNdvp2rBmaA0hALWz9NyTQyGASgoEWx/ZR1VGQ97OPRsNcFeTZ7JD4lhP21iHUEREpc7VzogwKnCRW3G1GJMOXd0Upd3KvEzQcPO+p7MvROjQofX85sN9ZM2wPUpDdRESRUvpJxoeOffR0PF8i3noUIFtLStnjVo+Ntm+9fnmo6MXoP1aHh6daJ7PlzQyqmb+Ct1n8omM3dJPQ68HfpKpQ+87lh1ved19DjciNAbgCOVD6IjH5Zmz8+FieoIqzmbzPgL3qP1vEvjJaMQsvDZ2C6Jk1iZFKSdsT1BkFxS30htIoBiY6K7vA6Zohje8q5DxT/iaiIGso5UuL1XQMTGKHsBF2SNmKCrTpK/A+DxyA3nIECCxM7pG9yM+2n3jW+3hUDyBUKe92iQ+NgKL0sQS+CNjLYyDPYF0PgMhzbW0FkwmOgql3RXIGJt2yMgPJePxBbJfvTgDjg1PNjDCQ4we6NkDe3kfwylHsTrTYDW7xIvkfgg+Io/2VQOk5FzyAYHG18vWyn7ppC0YYgteqcSdKh6JL8bjHjjSGq5R61gfaYBsVOoopm+WzTsivoexehRz/kD0Z+nwFFsoOy2XteNyKZq7su2AnvQA8rwkDiuFkMWfCqJXppvMER8UXdohbtS3AhjJ5Qs/q/x5wpLKXnN2Q9s2spjk/FqZn3HSFnBWjKRECN1xbI2Trmfrn1vhqreXG9ERGP0kWJUArKKsYdLdzNeX7cXVrGaVOQtvyGDFcon7or0Q21Gb4m5SA9w9LkF9l6224PC/eDQUW2wYy4mEvxXFE4GVGbid910kERFOTYCIc7ksftuejODDdR8YULx0yVtahxs/nkuU217Fm59BtJKzCaOT6dXhjnd4VvVGTsblMxbVMzrPrWTcloOJfJd8bU7o3gciIavkGA7UgXRaUunyQrEfoVXasjTqyCDaPcrkd51QclkQFygXzJk1yKHpEXKiZr+0aQK4lLme7aYKz0jb7J5YL5oDNpl8vAp8zsjf29yvPB5dBka9juseikHoqgt8W920O1eE2Vrjyq3azxv5HkDz1PAkq+QK3KgtlIKTmfbZRF9McSapuN+3FDmeATfDGGCn7jP5hcDpAi4IxouDHk91uetHiOEC+X1VZ9uogWogkXcWRcUJNG28CqbSD6oIyC0aux9YI5OT95FL8sH5xcZXQZBvX7x0xxRQkDpPPQn4Op9ZS2CAZLRQpTpRwEF7pff/CpfBfj5x68G2Npbbwk6sVR1q/R1lfEsHh9/N1Tra6mMOrALg3A8spj6MgbW7aMMmRi8xqJXlBCdioc7IpciouUHHyP2jL1IR/k34HOWxClhHMxiuz4O6umASg2NBIy1ug47uSD3Uy26QhIBLuIH4mTJnhJv+snVlLELSRR5zVabaubsV7smUVu55KpTCWEijuuk3t/afZ/8EVqkMEdnRWagapFP9x5Xwb92D0l8acvCzom14BaeJvHCwYHz2tSlOQ0NsOqghZmRMmrNNeKDpu6BXJtpd+ftm5t+YGOn9wzlXBzQR90cISMYfLHLQqD1me1yO3+NftFHhgOLRtl5fpzrDw84OhjhYs9Cn9/Z2OKuh5mY8p3XXHQxcMtTfatn+UGbusYLhCa3uGqHKPquQsBVvKrrSasazv3i/fEWt4+1pH/YIaq4w6ZcwzLq9y1UfVkIJq/03EyFudVOrFDpWn1jFDFCtWfvk0J2WF7IJQ1+DjkopWcQBwdkws+7bYS+SkK+g2f2ycPQ9t61rB6GCUn8N1YvhbDimKhSvR74LkXQmfD0saJkoFD+RE7/mU4Laki9VJmyUGH1MizgNfHYLVFJ27I73r5TdF8K48vVLlHDgDwn0FoWRrom/lxQSEmMMnme03+Uy5VdE5qThRWYJ2we50lnY3+iyE036jRuV90CZQDLobpoCLTJQmWWFYUX2ebfqLrc+QLEi0JnuUPEhjOZD7MhFfD/F8mF22hg+QH4XYEdk4UMYzUIythFFGC3G28PnlT72CSDKHL07AvfPf/sxkdZkyYcIRQyYqGkasxk6vaDVZxqu07SG+NBRWUlyQMkJ7rZV4oIm4DDGk+GIqcLW3isMFkvFtzlLEja0DOivfFfBFxLoKCfRLAKZDu4Xwx0T9bnXnOIfvHLG1wq5d+ozuqae5v2nDc8XzL4L3g4fsF2Hu0xeqKuboaGwFwIuT+b1hUrsrQEJcNiDRJwUqUdOED5JVR5dogi2aGE1sHWKE8Ig0gPboQ1ULDwwXJJc0p2pRv6O2Rgu1pomBECEAE3pLFLblSBR7SdFgEkgODeod2MP4JcUwlFQXvik2sE2p6JsMzY6beWCNLcNcJt3tnz2TmjWJVuVVbERSQenm0y5Tsdn9W5DkTAxfPbDkqyOa3qaRPmRWxdNCQepWHyv07BvsbeaZDw5RPL1KKXIbdgeV31HrTJC3dumioQ/cP8WFBFjPVtVuSsp8bR6PeBZ//1Aacye9QDNHAr7H8Js/E9goFxoZ6EEOoN09WCKt4052Kek6t9KkRoSnR/AvU0eMthzSxq4Tx/hgmg3DXBmbfDFgVRULrcAwqKbTGoR+RMOss73RnVb050pOujrV2x5K+mHIceIum6m9+6a6hMUV9UwxhTJ8CeUHbmujF+WWDszqezGQYwzkK/NjPOmSy0bLXXJESYwQUVartmEt9Yoaf4Fef0gpiGAsblkGCk7cea9xctGNzOKFM7lv+OSW3u0Ozm07JRQuJ//SJBHD4+DBvx5HBxFAWlU7AcC6entpLlyBSsKBAZHnEzWWl7sgQIgOOlAkAln5Y50BkZh44DxM64xIptebLuwiiKeOOQAkn7HDl7qk2L4tPr36tKlkhBbuYLFpvCbOwSlKbXB+peN3auGNkMMYswXDUC56kHuAqKRIDWXjkwHghrJiIeKCa7uHCG5zuxigJxfmYJHwDmmPcdYndaJSq3mvRfxQEMsoe9OmeYuPWj1ptO28ljvpDeyADBGiFO7DB0VV2r7hMP9Pyiw7qgCj+oM0KUbVkswZsyDhN7LuxwKp4LCcVse/XNlTRewNLy470EdLr/wjVpD/B6Fj/+Myj/41xUCQk7vuhDRhPKpeUpg1KCCSd8H8JsCURINRRYh7v2AUWEgZjoZ7S3OCYCwqM7QWI82UIg4FWzO03EpgipMgg9BaBWyqjMBpCuUUyjmxEr5PZ4khPH+sb4euamyz2VC43zZ3TlPfu3XHObf9D2//BOJL+bBUU9QTeeD9bBsNrJDZgiBQfAMDze0Kt/loyO3poG5LlKl9IWAcbpL17NRCJbr8zU4BrSRNmKLiRhd2SiOhFE6XYPFcWuyU5XIUagWGTZ5nt609tAkFOXT3uqFX90aqk+mfqNKTfdkCIjfgHT++SzjBk8Tvg9FMWre8rvO8KAVh9Uv/WKiKyu5EFe5A83jo6CN8Kqz+avSVUu6Ru0ejaCfItRtlYq2DXRZxIGq5Tmu3JKUf7v/38buJ1tPqlAbhxXkdgMRIZNDECXTdoBp43OWBqsUuhWukUgwNEmsC0d/pOy0WzYzgB5tquzRFS/12EpKy5JVDBRE1QOtz2juTIUoKbK8IU6xh+PJg2J4lGnyFzZ9L95Z24Dw29bPMkSxJhqfekokO/HgsDKYRXxqWxzLJoRbRejUEwCU6LLQ0wNoDnnxxzV6q+ehDqlueHXW5siT7nih2txWD5aRrt7QoidR+8tLVw/08mwioeAQfFl/dEc9gm2beSRN1cQxlU7gVtTmAx1xjSEqLMV/K5Xp+AIRo65+ZhIpj5cadx3wdrGr7+PVTGQZwo6kF4GJ/lizZ+kNdLtacOKhVHdibrZp+m1I3F3BFkbwIfY4CDkUsTUpyI39cVkGGdOhrboi0fcfr5XTLwCEgWY2okEV+RVUQT/9iLmOmHNq9o1pyKb7aw1NMrwgo9KG+Jem1/t2RHfQusWFh9tQV+smJ9UUgLm3r49vJMFhQLQcfaYz7F85BUQEKIYLDdiNCtbzFKNjdlr+tgxBQq1RshAW1m6CVn64kXykNMifHTb4ZrQNtb2Hj/HWMY/bU0cEw7rJbodMHBtxN3TluwxkGfREw9YbZfRNKfVYM8r2fifeJCOSWs4U4pKXBUbxLkVcHxRHCOkF7qP300jWyV3tQiM2Kp95t7O3SZhfONi2j2e2kjeG4wpbU3eJpr8dZJ+p9vb1ALaG7Pp4S5YWzXHwYMR23zUDlUQB/MvB1vshAd8tYAHRSYB832Xjx/qaiCZyGmzcQBJ+nLuAyCED5JVSe4kGCnflXB8LVYLpEWcU6RcufiYBn/BkNAvTyXLfEbSMOkm8yaWblPC1GDy4QZXt9WVokcoTptDN32pZ7c1Ttnchj5y52JpUpSwWAsHB6DjSrjdHl87QLrvcSiyIpmZ3FX20k6CtwReSNdiqVXDQJUG4iLutxdLevpAyLgSrQZfr0iSV+6L147M4Fal4L3x6UDNVc55ufBVxZRR/exeGQlbvC2NRVdgcYoi/rFRQblodryYGUhmjepdXfExEtc6ZyIRFqXiVNx1l1Bo0ajQENconSabzjCiWdBFMLicHGIJXz8U0lanyw0gPGClsEyQEqzFKaRxNJCYETKV2lflVbt/l/bHolkJHmTGgGKqoVl3KHAJtKaoYhbeiXArbRmsN1tVx6JZdTtXxuHP77Kv1iUUNHSUZdtv2oFoabm7KofIM2pItSm80kXm8AtdFq9xNMgMiypK+fAb6EJMrAnWJXtHgWALqKie17l8eZ0gycbl3GfU+PoTGX3O33OpB2RpKYWKqQtynHWRbrWt7UTv4jCFiuSvjZlXnUAKjxJ15dBuXEhOAc4qXXjfPNqSawBIq8oSjYMqOdXJKmHeNdSTZDs5TmOQvjDJE1Cp2F3LREZ2njf9OmM1TS/qunEOdoZ3gnDgWUUDSkpayQTbmUpI7t1owOoloko2u2gPRr9BbFqsG74HHi5Ns5Z1IzjrOiqrQOi3eTx4K6klbl0QpMgKBT2Y5T6bU3opawgZSJ5QEl76uER0JMItMiEwJvsQNauNDGujpXEJAVd0ewR7DNNbu8whIuiCCvF6aqiDF5YCg0DF9DGkqZCg1RKcbvhxcoPtCa8XNoMj1xA4H+LhZ7sBMkb70ZHKbnbh17w9QnvsFEXxTve8FIwI7c6//w/afcusUenlnqprpq9WFmgN3+y25zvX2um7ewY0QXMx3fbFMy+xI4Y6WXbEgUKM9IE7gwHpJnOPsqf4cuNuDoI4T6X8K45ho+PmXPowkL25lSMM+BhhCb8G6oHdWurej33LEoZ3h1kLQE2v/i/nA6gNbWg18HmqYeYIlAdg93DrAUszvHsKpVB2GgYoDzLliPDZ9AGUN9XZnR/HYMaCVOwuY966Vpm1X4ryCRXTNT4rYzeDW7kWTFrUHDLSk7FoRNqrPFn9m9iDryWgZaJeheDzQa2YpsP0ntW6n+5LDszi00uqEc1qjBmq4Rv5sot9GLSTnYvfAtdWsr9Yi1yUzhYpTW3UTt7uEgofhuO0dH3tb5dylIKdmmoTgECWJi5thQoACZGChRshlZGtn6x6l2zlhtzm/2Yd2YUombUcjW8YcZoztD08iiaCNHbzW2lb912MF2s4MiuGt4AZX632MVnwUJ2t975t1i/WjUZQUgjveVnYaPLaqNgCM2e1kjGX6YmHlcRRW+PP4uRFTKG2LWxRNnKUteItPGP8HoujZSNnW/aP/PfuOR3QCuIYlCI+dI1XZnwT+UfalU72mcMxLWWhxMGUI+KtHICoIU0mfwNKPOPDjYaPjAizUMzK+kA6tAuk+SwT2k+ygHJyPG//1by2JupEKFJUFVsTyisnbx9XPMsD6xxBObUgeHwzozovBcbC/Y9GgBlcMAuzvVMu1zAoFW3SVf2HpPnFuYQ8vIVjKR89dst4UtLhXHdjMUPBMmd6JcM7Zlj07Tts+k2P+wR7dwYWB8CCzaJuTyG6m6rDaOuGNTVb+g0ty+onZLdPakvLtGjRBBGzfJXCZJxFw+SErWBv7ZfhTzcv4KIdA4nyCuGwD8v+SzFa5nGG8aetmPD4fAuCGc3NIs3ACTEh3ePYEg9OD+gldGbGcwSPnDHPAUSHof++cchqfe4F0aaeOAQJSArqmusrp54KwemKUctH8rKoGuQUPppefUKTsJgeXF3WjNHaDsPpFKKD4B/TjS1FWX4fHZ8gBwq6hA6BJPu50XDddCHjvA+wgtsgAyHVX0/Ut3fhMoeUusFgGtu0CWCS7O6nsIIkwDYlPl7QgZ2PJg0OKs+l2iqNg0cPX3jDNRYd5OiGB3nkxV7+z0mJ3dq67AbCey/OCSrEwc81C/bN9Vt/u4wk92BzsuhVa/5yfj+8+mkzdOwbxyYBg8JqF9VKkq1obA1cAnZ3dBuU4/3XEVDQOqCqRFqXAC2v0WNhLnOUorLv1M9SuM7mu8HEU4+UNSzNV6is1p65Jjv8pZTHKm76i0rMhE9eWXZtDxvGXZqxC3Pi1pOGxHs0XNgrQxL1+Jbr65YfaO1t0GzyOX2zLSV+tT7um4EkzbZktbUNPJm0etXnk+EIWXeJXugTLveBq4X6ZlCw/BMIf+hbs6NqDfLZTDp+Isq3UeYOuePQZCasvZeR2Hcwx+pA602Z4JkNUfrY2cNBY3QiBYZaeO2NwPkK4ysEPd0sSIPXrHzbuvuRmd6eYWLeBuzIYEdUGetyl1MHqSXLsjoLC4Kd+3XviuJPqMcZDBZi7RQnmIZ4LghTs1j4Kan4aywptGuTU4g6p8CIEsceq1GfahV1h4+t5buOc5vFu5DN4RX4/4Rl8yWfgS34I1CBAs/5FUBV9EASobyjPmWM/W6hUtq+B5MQWUa+lEOCyFGFq4tNg2iE3vMT6F5bSQUFjoR5qsPeT0T9ngGCfRcX4rxfJTuIh8iL4I9kbhsSEmM4h4kyG8IMKDTn6lND+WRJ/uWpmrakGIs5kAE/8a8DRJ6ZdZqLvHifOzvqiY1lZvAmzOX0bfMoULD/7dwq8xJ4QOo3LwtEnpfuvbfewBk0LIAsNTA1X24BOpCaYknWRFruqIB4/wf3F5MZnEMYKKDcTjF4fDDTGT+V4afT4tOPVxz6T9CzxJzd5EEb/fU/uD/TP+b2RvvIi3VEVSj83TCe7DJan0pUGblzq6KwEUCxyz9BAscdBFGce8vik2N0wMMaQOe/bZSdTnOTDOTlsc4QgNRi704egn8/tWhELCjA+HssvKm1vJSjB8OTqeuIgUpZkFUEArE46ZgPq+wOQjtVGT7MnG+ZmXB/UHxoPjYcYd+cYDulndC7QKwyG2pkX85k5xyysIb3L6tODAFEagp9inAahFevNp1c5o2GiXLtqYBw+THC/E8CRnmVvpRJkLJy9yHwnVy9dS/ULXsWYv9A1T65n1lqEU7a7q8keW7xAvoVCCSdO3PcEaIQQeoGUqjCwOpihatd/R2bz6rLrtegmX8dV/F+9+ammYgeBwd3r9V5bwaUIi8gIy/WtqNLHe2Ys9aYr9aonuldUN4yJKdMXaiwm11c4oB8f9zbc02q5x0MIrT40fSkZC1NlrPmqtd0yJEKdHeYS6REbxiIDIdILhq3uoK0bzz9Sfqh92/h8Q5bO98pgvfeN5S7/7FZ+04z4v3TARaKJDCeye575ekL8iFA+EFd9fDosDr6CeaKhPcqCrcN2yOapx+GH1hyeSZukq61769CbS5Juei4wDtSDRLlJLWpi//3szwzEevk6iH/HRI0kl0bSSUH40QmUbXNgXWwhHKbiJ/HlkauEu7jeKQf2VBm43VPvElPffOciZgHWHm8WmSc/ad9NR05/QWceP28YZ/BHbYoXWPuCfncqPbNCiaKCwvlpPtJFG2mBGPXK6cAvfhGz/Bxmyfbdr79HpyDtEYYXB7p5G7FvW05P0KP/JefATNYX6vW89EOyTP8QDdGXaltPoGMvizfyeinr3Yh13/CmLXj9sfiItZkv1fwD2DIl8ORwuqH8eL/xd8JBgdPHGQRazMHN3OUGBCHMqSmqwsbTJofbKvVa/+bjfje3+fJ8W1PNik/NC7hUQeNc7JO7KNtRkwZmh+iQz0fxJoI5wDwrm56xFOypMAjHuv4xmLHzLGrwWJSQ7gntRzijPsY846z1u0W4eoSqoDtOylyYm6RtnGhHUtsS+EVJOhPptuYoq0L8H/VFwgN0zzfcPk1q4oJz+opAIoqLA7hCmLZWGF7cD1Ng4TqSZOOyV7xzzFJVP9a1tspH3ByRbdc1kPlgZEBARJ1nmTXtWLyr0uezCdQJ8I5WRXmXMpKwfRZvPRfH5Qo2LEgJI+KkGxlAXt9lDjrvpiadxHmjlpQgZBi4B9DXAsPVCQXJQ/Fvcy8Xny8m1pHmAhc7sguaH62UFOwfgyAZniP48N16UUecoE5K424YFi11Kyx4YelUCdK2EzMhPbWxBFAOixGxYwSdhxnhZmSiUEO2uhh+7INdvW9oKJJGXmNjwM/8GHoxJXqUfr6hs8BlVQUiZsOKzEcAIqXmRA85GFSgSG+KeQbNSGVsqRe8W8lRtNLO5xjDBmNAmZwj5fjAtsIXI8KnSkqH2hYFED1ItF+y8ktM/3suo475vcYCJdXPPgCLpYrgvPW7QNKiksT18tPxSyiGFlyRq9rWadsYbCUaZXnniRDtxMadT9sdekcyvFkS3CpzZ1eE3NBtiTDw+8VdYJaMRauGbBV2jLq7s8DNkyF14Jxjd7PLluhtnAraXcj3f554ozpsppOl8Q1fmgb8lTdywAfck8P+jC0BxDNpp0e+XaWNwN8gi3T57oqeAfireKxGCCIQe4XNRMCfqFsd/p3esMksPYt2yR0k9ZA3wngOJ1BqMTHsJWDB76CU2xS4rxOWW0TSQlo8uT1DpzcmwYaK3sOCLnvPMVxRtWEFT6l0XSri4wfj+ImySa4yiWYMiw/kVm2kZ6+F9w46akLPC59tdZXfQRzU/Tl8L7nD5a9vjcdJ23jm1IsoF0DEuqBQLXCQtfcDvd3Fk6mPPN1QE5Hp6i+OR1lR5lrMcc00cJZs2g89Ona3V+8rdNAWcTqbrftDM332so+/wYjxss+3ubHAqIY9+kEUfv87c32nrDT9cDAwqjv6UOI0oiI5dj7P9C1YdvLCjnM5i0YKCUAjQizAGX9pJ/DhjBl8GvIqmiDQKdS1JcjFM718B/BtkLcSxJBEcz7ItS6eKtk7u30/uE09qRrttwSRu0Z0nc8EA1Ub20YGaV56xH6r1qrgHXdCdxModpmIaYWudP+iezLkyEAmys9f9ECnbBs29waHJfMA9PtVaJldesiKGn96PLgS7eS4UCJez1UyjBBd73RjPH6OBcW1bmXSVeoe4hyjUDT+f+P3cMAyKUotGyOxGtWNINkSdlG8buXB5WChQlXUM4DveCcwChIHwv8T1ZuYUfeiZ11I4zD4flliNOjSF9kc2S6yR/J/qV3oH7u9YUqf6kaNLDzVX01Y7bnnDMJiKr9XJhDF8RMhlpy1EaXTb4FtqcaB5ymlr7kUX3kw8e1ZZjSi1951C5eT/g+z4SzwWl2MgLjRflCBf/iDfGbe7GtVRZvxYG31vr3r3HuEp0m0FWclcgXhTyfOQqfcsyqYfHj7EmZg6nfruc9H9YaWJeyKpU5rHg7jH1FXgPk4CxbU8YOkBMbfwKLMy2E+LrrPJjEsn4vvCll0d7ZNOkuMPdhjEdZC+aFVdaQS6zDaAoWYUB407c2nEonI/MKDqtD0cSt5O4E0jGosuGbiLgMm+FD77Bv5Mu55+NT121Q9QA44FP5EHKpZqb0LmMUM4RjuwKlw0R+BPjugk+n8DpVCg9WIcZ5yukn/UHU/VDk2egC3iqi20c7wOyosYVm/+1ODJL3YNpnSsgG4vhI/MyfQslMo2XHBELzOy5mSmhjWHAw5xpos2extU67oupyjaBAw0GjTU3Yrs+PTExrdpTuOAYC4nDZObMGBOMZbsYUsnaqobhwZg8N9gGkyBoLsRyunXdwSK5QFBXM5CtZRmd7RmsQWsuQfxnKSVp1bod5xItjS1fxvxw4b5n/dBstsi1cqh+pV2X+ebNuH65G+qsOdMYCIumAtfdy/kyZB2CefKG9HsH4BrKKg0K+6wgtYbXuoxp3RZBcpBi602vL+IjcKsEbKl7biXbqrJoJWkjHBvPYEXRnIZLrfxM+IF9afVFVC1bJQyT6Wu471Sj+IP4hyuwa6zJSYbc7NYHdjxFL9hhPBoh1UtTlpZ+A+Sg2MKAf+6Ui0ilGvq50/mnSkmWsoUd+ioFfbjPdjQtM31ckoaowJxva+bK/2uD4S0QT36hsk3gWw+vbuNBiHGiU1zG/FVpae5WVcRjDd6tPWJ3bre9mKFkhBLjbBfZP2EehmvtuKqwfy2VNnh14xs8eu3XWLaJqVgGIuaPmtJGw+P0TLniA6iOn39gdeR0YM9oALEbuBLaKomw1rClrpA4cU1YZu1HQ9um6GyNxWeN6AJ+TLn3ADquMAN33QaUJ9MuJYyvEAyaVeFpJKgjIKczV1NpfvUP5W2WQbRTq1tLiB5xStxv7Rcc4cFK9v/2wYg6AwV+0rj7hVK4cE7oJ9wwQwNKGhTrRlziApEgteb3GzY112FMlibNCOrlFgYtgbz8NTh3iR5+OvVzBmtzqKyczqAAad6afj32gyO5zES0cqaA3wcJJoTt6aXW8Dieg2uXduR30aI4Ex2BHv+ltYm4C5Igi1c8ziam6rYD9BXT/uIVelfigijjYrKg5Bly7nfho05EJ4kkqeDgXRBFGjLGKgn+XNNg451GXksFFv6ONGwAwk5yleQZXO/6oL1QbWVVE9iFsAF0+Z5g9+rNrbEXFPmi2n8NqSeN/rtE85MseNrl5vWrjCu7d9yG1kMT9gnUAL5kEj3tGredRJ8Snbnc/i8T0qdFvHGx9UCc/c2ye+Uu9X37NHXZbRIOMNawylUwVTiIJO3DiYwhZaWoX1sHOar5UpUGSdqb/Zu/U/bjuLQWBGoegLaabzk8FUnZGz0FK7N3SZOw2Hw5jPOQbxIzKOSLCYAVbFVIASUVKrbQZNv+SmcQ3DvuqBv4yrIAYtglCSGEZPAxtVoIfPhOno2egF73Zrh7F3YKHk0QjkgGFJ5Dya8JJWDabjcW84pysWP0zfF0+CIDyORzG55cSDvEHMqB/5LJ39XTcc2gIJ0cIJTAz+g9qdDRj4GYJYJfcNfT/ekjeTwoJq2Jnwb7vFBbVfbOFILrIJV0lv6fLN0xCphlkjTIVa+oRu5am3OBDoI148+x+t3EQEw9mKOQGctfPla8qBQg/NqzB5l0Rd1zBY56r0XKbVHzGbrWjxBh+zEl5GRQSa/t6XnTRY25PYcDfbkGheiAj1CixGrZsYKLogrJMsWOt2pfCNGQxy8+lW6wsZRPFDl6UgnwLSMqzD9XDSGZ8pffLNafFGsjHSaua+NUUIw1FDc8o99ol+W+NQJhujL9zWr/l4TZz+CgYRMphFRuKHVm0xn1rqYpBeJr64bZB2/vyw82qH09Qp8ONn9dHkf1aH02CXvc3KB+ZjW77Ph/n7I5PAuAeO5IWo+/5a95ipuUZl5mteO9HARB6xTXVhNQzLZK46iEXE1DUESNfmZmW4xSkG9v2l0rBlPZx/YlmYXqHGTWhy1WFome+rVT+jiHJrfszQZiG6yO7KX89SbasnPR7AAuAfEAEL4X+QAGrSLJmuNOLxTLqh1L1fB1nR9/+qUjGk927Vxc4M+satM7MJoN3jBJjs+LtHgZyMiNE7ge+T9XGeWPEQfSEhWZCf1oUayPrDISivUZBmhXLlm1rvDjTQbqgdHq8bUjiGrtwLhx68W48Y8HOC+pC/NZ3iU0uB32ybEcif36YtGN8OwhqonWF1572q/0TQ5+CnrwgUR3HQIe97cBpuRHrLNsi9zwU66h4+FIMOupO3+0Bfy2wYKc/4bAhSBzxRBxN8X2d9uBlq9zIYzIlauR7Wn8R/qEgEgZisY3AixPxY/K7dAycYk2ERNDg70tiMmyINmEzJ4YGXLSUw56hygRaCD2z6H/+cP2nDF5GrFm4pDPWN+EJft39UwnLbGM8wrN8zY3+JyKUfeeFRR3aHg+rHcvF58Jv3ZaHa0DZPoCzE9DmxVYfDOvm38oetyTkGVHF1HH3PL/Kzkp/z71K0lwZFBnQ2FZPKNSqjIxK4LqBamtNwEvTHZXedN2ot5VpHqn56vUXCd5R0JczhZ1Bwk8q0lqm8LMwvsJozxdNwzUx+jMNcqj3/JQRs/CVkKonYl86fdNl2vF3O4BqGorH50FTfrggaf1SEGu3i51QQMMJTUk13iTManxVmPKn+1T03SBvVj6/3pSA80GxAYegF3Py8/0tYcPgaEVb59+DnQ534rN4sAlYJ3jri4TQYVXV9HABP+Hk1FH8+YuK7nc+9qbsWKtESsVRJMvY7c4IJIQJQ6vJSk7n3G27v6xzU792g6UQIkVCQ/VYmo0QmExbubzuE8ZDjd3T5bhvmneJULnlTz5rDMiR1QRtJ0C5rusXkHXSpBPwaRUBihChMa1ul3hgX5kq6pxkJbMRtTp2jrGU8g92EuFEcYwTbqhoX4R563mGZhsMZpwUboJSJwxNnoBMclRuA9ug13N6BPeg76N8tPhBQ7pBn4PMHu1iZMJBj58iR2PYFa/h3jvArn0fmXFoHXS49FPlhw71UGKWvN+P4z0z0arhNHix/HqgTiE6n+o260SqCp7uTKW8BlpaXygCgQzx+tlCJhyBiAIhfpZsvoXX1MHKIyRDcj6FVDEmuio/PdZKgOnrjv7v6WdBLUi/aWuKpdmFehu0gteX/+MGNjABry09F/8K55+FVHwrnR7X6kpSXSpahQA/tIiV4Ivq0AK3y8XqRnxFZxjmhyDrZlyRsLdQ24Ht4MCvlOHD6miPCFoPOeG1J3P+K4j960Nay3c1LIZKXO3DMygn+N5HKQFjWcCSY1s1E9ggjnq4maTj+7Dym8yH0gtQof4c+6gWTTvMkYOk6DXZZvwGwuLrhbl5E8+TxRiydQZodthQdgzOZrV8/9c33uAcfS8vS5y8zbSOIZxjfB9lJ0JZImFlZOvcpR2xBuV/nvmlIE5f3YJGQNypTikbrPpbfmwrcxtaqSIN0IWBR/H6BgJv7YGgGX6EMHD/OLXnh8NDIW3i3NS1KhREjdJe718Kl2vO0ZHAA0wWEw+O/rc1KJRMQDUbQfjYB+DIqGlYJBv2b2kq1M8Kv48KssRR3D5RxseEdwmNv/eLG9WbyHGYjyHuEZLyWFo2lxqulWAJx0MzIVbpMt68L0Op88f+sLAVpwzcLSrnQc2QLjFg1UyuThs/Ch0CZemnGjWsDs8+gVDLDSN/FICFTvRVoZFiY/vvG6Q+fALm6eomhW5tlomNOZZEOQhga02GVU8btJTZpLy4266iP9YyuOA40eWMzo4hds0KNbvHQnKs44tKRglfHqEa3A75CrWNfR/2O3eCx6qilMKoRQyxq/y0mO0L03ACmHTO9fRTAXn9U9NHLGp25C+eaiRHA53iBl8KzvEPiMtloneR7Yj+m+uATirVTFdJqJPdqGoizxxe/I0SE3HOmoA6htjEFCvWwrrjpQ54bcVg/miU+yqd/eP4ougUWP/cb+/MFNkCx92W06mng2/Y3YOZz7yaGbDtVXvTkR2cL34pD7/P25LzRWX/WaScOGj29FM2kySn4KUZLvhJT61qJnBp0cEH9hC3oMWDpikDfi5/qOztOZ3Hl95wwdw8CY6ouwCbynifFE+zw3mwjZIl99uXV+xPN+Elh6MlJcdMH3p98bMl3ok16ymUhLUTMCAvbZtHOYM3aJlPSaJ5cmHia1C3nEx15v3l2ifk4NBKbTC7joNqbl3ibinBuJ5EN4bTYtvoOAvd0ZiTTEvn3mPUBZ/wMO9aoqes147mBI0DzdyLow1Dwn2/sJDRMabJ4sqLcvoieg1Lw9EzObD1ZE1TOObFcy195vjQL8P0ulD0BnPC383hhCFj+CKDHRU8EamnV9lmT77kbNPpF02lQq+Q+5aHwSO2ZjdF74jle209Cw2xtrpaurUmxN19/vOwlPpze+5YKibrBW5/wCDTbymR8A/vdGDn1WMvk0Y0k5Qp2zUjSccjZfzTdzZ8M/G3rMHLI1jE/ztPA1412buBDw2Sna67enwyaUoO3RAoZvE4rDPjybQiA9ZLPORe+u1w26VpvbOX0r3ss1YxKq7wZFaDtyhEqhqCF/aXxFht3d6HbmuXkUSLN54vepOPwo12fVU5/O0eO2iLj5Xz8uTTkJMHVPR5CohbbouTpVvjYmYCLtzJWQ8wGBizEC2xtWZ0PKNhH1BJOZJuc2On88VI2wbB7cAftPmTBPAPEy/+thc6MjmoHTFCYVb4ICQlb4CDWNJGnsmBUhmnmB+1P5dENjK6iWGYHVUTSOFxI1KSb3gm50j5h3xgUEElL03MJU/YhzjonEvkyByeW2CtqKzHs2+kD5mAp9rB3XRmsohEpPeZkBmQAroDIbE3jN8j6QOTb0fddpa7n+cXwzCGPw1cz/OhZZryCNqEyhwgnIu10qDbDDFI0Jnz9A3jIcRzpvw8KuCCAH7x3f2k4vtaB6VKr0A2O1uZRC7uyzh2csKFzqfEpbKIHVioBcAfsM7VGeV2wMQKwTgHPJ0aJsBryjG++jy6yRXcosnZYEvu3bX6Ygsd8O6uHCOzsM58w2wbJibWZbKxacroarcHbF236qSO/djnC3XtmJwJoMDK/zZuyyjPeHMrH8t0O67csqLQh9tAT83kJao9B1xCh5TIoorHjBZQFmmfAW97NK2cA3oIoQOnFvVnqmQNBVf5zNLyFwQ3IOwSOLNdUpuAm/U0jMNM81x4LxUDExZibc669l8GdjNFgfDyLvTsDTcVVImng1kahW6lRILKYyBtr81lVCmOeHU/jDRdcgLjObZM3KG4vZ2fiB303eUkqYvxGEIDVSGgJjqCPOR2DZFZ+YDbEnDQVlszFPdGCzzWqMySsDENag0Bl9g+CwZAHhgx91ILq/s7sdrtjHRMS45rYMV8TQ9yMmcpc1JPFvj/Pgnm/YIAnSFaNWPtanyKIsM+NikbfEWhYrT2v0/qfAYqN2LEKKjxTlwtrD8VdRrvL07wKbeg+XavbVUCLOmfxXL2tRN970xiQsAlVwinWDrWTMEiIlTsM2uGOZloWpPlHUVbDaE+n7ZhI62YBRqI1HwButmIb3BuIfXf3T/Xa4ffKp9GCPqLF4gy/tD5kqcmz5B+Of+s0DEJEJbGh72jIFLskSovW7yzJyJBHta9S04Sev8hywPAkPcGHs0L889PcxLq8Dh62m+gZuzTU6/RBQqPNHVjovDteVl8/p016OoNKBjet55pJ67SuHyr7uVkHmj6vTNCV6/I61pXqtE7rZuugi+vm66BL66Cr182PyTrC4i5Vvrt++NV+Zu5a8VzFsp9vAKIFAf51U/pedpXLizfitn3e0H2qeDGYRyJblm9Jxa/7rk9XNVbTFNe656QEL7w8pZunKYaZwZboKTRyqsXhHzRqy3kigigNeZvNqU9qV2+KoMZb8cWSAGcTzFkPIUzfk9Oeg0EPNvak5k4XjH7tG/wd3hx+1bO2L1goji0CSKXz+oMaZfxjk1s40TzFGOPTFQWTaNWYRAgPzJiIIqA5PhtTFtEmnoURI1OtB1Vmkz7AFoGvOtJFuAZ3xbiyLHwq7oTRfkDqTosqN00b8KG6qcGRAPKso6CWvMHndYg+Lw15JDx0r1cJZdWX0xSRaoGREdYks4t1qEPZJQSIyD7+0FAdRW/XUWoq2Zq1BSeGG9iXiim7Qhh32eqnfSGLViuY74WM6OhUL4CCj7X8qfGJVwD6Sg2af9yVdViZdkty3K0W080KQ/doSSccJynKcevGQTZ1TjTHvwcU4jBKtvfpyyi3wHste0jM9W5HS74ZhxU4Nmkznl/NO23LCMq+VE9RUQbAjf7k+6twJ8ZjYR/pSoF9ezgY+TYLKi5o8PTYahqXZtEEoDvZENwTX9P9I0jKE8Ww5IMNOVLHXCo1NyUQw68FKPw+BSKUM7ixQRx69Ek9zqFwPjijpHoYMbEvrIqyiXypLIs/Pk2qBcwswEq/D+s6FE3NAzwI/5gMatgPpKwNe8RwPTEGgb88/4XQO8KEscAIuh8+P8AxkTxlY9SAhc+OB0F/H2jhF/TqIDM7UZUi2ZwnQ1GQ7p9MVH53bI926oyzIz/ICSz/5XhntDguIBh0WhJaneKAUWTIKoDav3RDQW2lPe/2vmUUVSZ+7VotP3wjFIeSKrCtmBgI3471eQ33T3Ti28X4NYGjdpznQXef4SGyPmC/H5d9FlBkfbbLdkJOKzLbnSHNij9WITFk+oDyA0kh7DGDZVf2LTJp7hi+ijv7Wsq5KR8zs7dTftfaP2DvAS4YS8iVMg8PskYjLg0ASOsQSv4yhquUBGTNvpXsxuvowRD+KrUHVn4cwWP9zPbL4aPT9LwPqYuuCSBm3hQDbv1+Pum79zA9RxPerYrwJJq9sSXswJbPt9vkKflb7QZgQpTd3bNbXutvPWWbLw3PaSIP3R60GRAH9WSX24ACVw07m/FoH2K9A3BJC3Ihs7ew+LdL95RSQOFVc8ezlMx522LwEkSv+aa6zOY01i+VHY8y6t5RTO19spIPWSd/gMNPCZjQNn2P61bImN9c9ZeOMDwJw99F7ok2fXVZgUw24lpw30WxbMqh9MEhPdENyErPLNqy+bCNx4Q3NiACc95phIDIjdN7WB/TSOX0WUCrM3PW1T3ixw+OB3m2PJr0NQlW9SW68rXyzv9+JW8JWi9eyo178cozctv9eSfoNwmxcKgPWx/K7w1/8TPyFrLDpbr9sQ/IWs/eInMa3eoXDyXI65RzoTHtuwZWvMPNEeUBaHnZiwY2IBEJHCtCTgYlPkC8SHnhX9oZAf1hRqNHH/GP/nUn1lQ/CInYW2VpPA04lF1sS5T/5mCiN3MLb264oks/fSpEs9XHXhCWXscen1RL05in23Kguki5OTactmgZK19olCgu7pMPlzE4EzFnrJeIzL8rFG7tfpuHTfoTY7dRvDuBaRiGvytmRkFxD8EGscpkoylHwpgIgHFeHv3l3vB53ZisKfl1dW07einzHKtU8KhdcPRSKTPQTgG8lIzMBGLgeSvODMU0pAgg53eXgbZcaE5sL65O7e5CGVzdYTzAMYvA1q1PzB8whpm+K0DjGS/eB88/XmFY6hqVp7UYY1Tvwr1FlAdbD/D7KMH41bvObsHbTLeoPZVll+Y4iTlwNv7pbUChsy3v0z7d39b4VDrTT7keIlnd9k7XEcYhr8L7ZhqKiMwqpaaORN3cutyHOFu8/wo7pNHsSHRMvjhztfxjXsn+UYb0+v/L9F8F00L32wuSvAiQuM3zk6xtycE2er676JKjIPy4euvFF2ji1nwm2lEa/gtlwRXW71ugHRN8F/otYqc7zHyMxT30ft9S+nCy8PtU2cpXVn8xG3w6/ddnEwkBWcWIHqY+dOlfafXy1SBfyedZbXl4WtehC6wwLrX1EEHoldhpk6Ko4cbmcudV+EHV/v0iEBtt4PgYfyASTN3AuIJn40L28CRo/0qDu0DBsGOwFu3ECWekFA8dIVNuNJCGFbXjVZeQe0EPZKwbhC4VEecBVdQNS/WujH16ZKlmfuRK0eNIt6LF2kOon1927itD1tnjsXF27jh0PoOCXvnXXTSLbwGHFeVb2l1/nbtQy3u606SGMWHjdlw79A78Nk7ph6dQUVxivp082RuhNpGj48Sgmdxw0vliTvUE9zambDaDMszCDxP50U43YMylFvq+OIEcjwYQvrlynoJT96MAzv1LPCR6o4/e1QkWXK6nwvn7jPi3oW5nuQ261ZND+s/1lVhkqKvfE1J0PJr43sdyiNBaMbpDeGuApkXcxnTiwtDv4t8fATGN1Gj/xA5cx38Ss+9HdiFt2XVvJv/QD/d/fT+19Q9Js9fY+FmCIhqPyZHuRr7/+/vh/tg34xctmMUZD2PPxIk9+X50qi9OzcqRwYTJCdHC8EuKlBad1s/3jgFmEddI9JC1Z4buh8r498ZzuyL3fbgJQny596IA48ECu3+pcg2tmZ+nWWtmlA8uZkhhw+5L/Avsy02/UZA2DjPrKRClYpd3Fz7yZTpwgs6fkcJZld9fOP70Ne0VM5jkdFz+4t95Rv8jP3vUAw8eWMV5c5CUpbs8beQfSJMK1Sv0Agbg8RoRIXyiEEqeqXMz5LkqiZMcXxe/iGLHTeDAJl85I5OOyHCCKZZWDloU/BH6p+ff+X/d2Pl2NAUHRwx/uC0Kmsvi78OFo9UbXiGRTMRoIMAgAubfot9Z3/7Isz7w5I/4A4eIRLiECTHp/3nsBbEs8iMmc3HlvUxWLymX717+NntbY53kkjUsSAgbKmo0bNM9gGdUwFEb6vg47pEyLuIRI2QdKHuBMp42wFjCmh17L2WA0FEfpl72gJ2cU3j6h4EAG0ICrpHQbDjF7o0/VTgGWGIdsAxtrOyLRnQh0CwhvURPXTG83YLn67HHk0v24qV76FUY+s0zTKQhkJDUnYPjxRu+rQ1C9xteSk+RytmHwdCg3mbVaRfsB3SvMVowcRlIBxrtb5jeF11Eiy9Fpi/wveGyQY6/dV9d4gOgNjx6q+ktDo8TFWNPr1MC2OE9VS5Dvby+LP6SJV4+v6/KvV/71iId378/QWGnYKKaYAVu+SscwinkkBN+D9OpvQElEiwZyeOjUTsdd/0Plk3v2d/7tIMuHcbcpX/uDQpYuISVWbT03BDed63ev0R51OrT4vqtw9DbFPOiqbZtU2HZKqOGhAiF7WqpKtci36/PeyUUsFRK6uoAqZgiMFRfckFeYQds9vbbx9y1/CIM1i9z5dhqywhA+XpnUzzd4jFzNV41/kx7HRdm0Yh11VEJtK9t4Gi6gVb+GxUnXut+KBprVj7mfwd0qTU6j6tLoqK+bAjMvh9Nt5j2r3dBmNZlS63Fd0eKkp0Xtfc0b8kIHPGbdNjfgBoxBUL52uB5DGJDR4xdiORrOherA6OV6grVcS/2+feMP7wF93q2+7rGXClDG71NNjA0hcg420Eq0JLrOARKcN/+SXh+oOvRf5FSJstizpYiJmYUicbwZvPJNRw/0Qy/1GQnYyEuWmX4mgZujPNFC/lnH35r92vtHtb+wRqbsthfujcE4fnh2CHahJSmhJry0GpT4BJiT44q77+fSIQ1sxH9uO61GR7KlmKNS4TqTuyMHejkJZ+W5x5ntdv37L64y3iKXXHakmON7oZJLxoAYoeOD49dKHaQuNV/YNE8Iq+dzHfkGJ51pw856r3icQck+t4IJVGgYC7naWCPib3NZJBjtmDnOWIMUCwDbm62ak6QRWjt+xKa9dd16GD7o+Na3s2QD64+mM73w3RwCMhqZhDCexBzXtUY4eva9//IC/XFP7Z/qTjqcc0qEKvKKKX4MtsjXSW/eetVWA7xhylsHc0rGQtVBsToORgTs0r3xlX+UE6s9j9hg1++Kjc++ewHIrlT0f6wMynH3UfvB94FazoWXAF7o6LjjkY4lx7rydi0Egy2tmVVHQa5bhn/Q1TzW0RkAUi0ZxXUAlf3M8g4tBBhN+v9jV8f7IfQdZ2heOuVFy0Lj0ZCH6aAf7sV/ZHcH1i+HeicxLOW/uCGoVPu1JS/AYC7mcp2WvE0IWJRFU4BKex4ckNbtSvMdjD/067RdfB0MRo6HMrlK9z9k41s5d453PxWLETCt/ByRm9p+qKysOm/tatxvb5UCtsW+xQirta2F7bH2DrsDmYuiMTVMc0FXcHTlGCSszbRNtAEx4pNPP5iIt20VlG22UK5aHIPdxhGwAUNlmV8YsqUX5IGhJ3YQp8P/9JftoMgqJJUYxFi7hQ5t86VPfa6vv/mmW2+nP59tfO/u5zwwM0s6QXVE0Ub1/1DGL/AC6J5HroxOmFi1kFFsEqTroUmseW5SXcLAtOAa9s0jUbLv6oPR7XNMrqGZ6vw8S03trqesv1PERDhByrfgF6BLvvtA5rTa3ATrOlLQ5/TXNnvjoNsjELEMGlxagLoXHCbmVxYm5dW92LedKK8EpymOr5tnSIudi/BB+RUj5W+Tk78S+Fcw4t8w1sCi/6CLp05eR/G84EfHw50/8hXHCI2j1i94v4CAzwwgegCLKH3qwIFw2Pio0UesyKm/+D8i0Ruu+pkpEZ9S9awGO/NZFA8itNdc7b5RjfbYEjnW8sh7w/gpaAaAGT7dfFvdj9shKjSstqMgV+ONH/W28psMBzjccVlnmae0VFsuitxEDFUmYVgybpEsr4rKlu1KhurutFgOQBcXT0A+goAZC9Qf3w/pRGldHBAb1eL6Ep9WnPR80tt1DvjqJFBJuMXgASRuLh38ar3udlWAlKA0mxgDa36o4arzd6erP9yfVur3rkQ5EydM6gKDiBPMm1NWJc6i2fqn3lf/bmYoqlFdOpbcgepWVak0HjvH41sPqf3P49UUc+zqDerUUxoEK1zk4dn0JaHJSGxZOiBomsGpZQGb5M4H7p2fhgGtZ0Us/AM/val+V8YEJsWLz6PrJbky6nlg835B2ZYcBd9aRxlARuL/nVJ5VLAouoegISFjWb7LmJU+8UxP0+3bNmHU7kQ4OCsIBH4Y37yp1nA9I+Ep4uvtPs6ADXwbL+EscPGbNZYQTzGcHqjFvTaCXrs0Y9MGHtiwXEGNWI8KZEBipmIleCoXm5nK7L/dxLr3XxNs8euHQZFZFP6g4cMPBCNb+Z5hY7ExpqcPjHy785Fv6jSxouFWrowgjfNhxdtcwJcZWo+EwmGU9fS1Fo0JwfhJA5nlYW0dAv6qnd+n4H20mB/WYG20TsMVOfO7zZwPu0LDoiAUuniFfoBuMhJtWdAqPw1dX0B9NTMLCBAo4cxCxDQsBq7cADz+vJDXIA70Zj5CGyur+9rro+uEvjzgAUJI0SRCL4hNPAnlqPUK4fgd1zDJ4EK/s5eHvo9/5ugn39OUEQTKiNoErUfiLb46hx2mN8S9t9yoVXzpf4EYDArzNX8SnKymg+HRKPwV8Vgx8YKWBULsUgdrYqD+KiPVsUv+HpzulKBen8g56sStZfuSQJyFEgATNHYm+yS48Sf7Nq7oqW990YZaqqUSBVabY1mgFsBK9DfaAoXHFDb4CXXWRlqmsxCEEJxMyYrj16paNS2Dk4MzdnsZBfFntVx2nHWvzW13WnRi2f0HGQ9b3l/8b7e0T0RSOrFC06hFRZgCGV6Seh/8WhIuYiK5u7RrdDSAu765MyxSUjPlX7GxIv2ZKnhzCktP5uY4T9suKcqtBX+cTO188icScjBFFYlj0ZXN12dtUDdGoy5AVfa8y7BdsdetSu0EwW8ZmoFteNtMzZoOZ5s2VmKQO0Wgo1CTx9I6aKbvXMzF1zFsNceu4EHvCKy8sFLzDOP6F6CnX3Sf8qGvax49gJi1kUTTwSzbwRg51EXbe3dK1jsfqDF7/1zJ1IiUxVgsiCBM+7Y5aIk1ViuQUCVocYtNWiuRo6UZskja36pISUIisiyr6yYpdYocNpY4zfNpPIMZo3Tv6DB1bYUUfCSAx42lFQ0hovKGVSJu1kGYFKWyEz9W9sNByyFqbr6bzYehPFCbiZRv6DRuh0As6mEmZniTeRUryuaVvoxVozEStD5NfSEeUjNZkbaUgHs6FaxBmhcr05+DAwDlBzQMqW53VbyGs4JOLlEv9IvLic3Is0gu/ZcvZJEZdABTLIPVnDOxoeFHe4d3K/dElV/FPyrU/xfHZAXE0kflsagPITRb4esg/j0FzWLKAIAGLryFfi9G87mYo8QizEpp0uYp/k8AHkKrD5AGXEEsDhSp0BRvwGLtswVedDegNQFYTxZ22KF3PT7OCuYKBiG/zD3TQITtGplkm3rLYXYXTpk1VEgLJj0C+GFJoCyDTOUt6/16nY1koX3vvFDba0nLKxaWs/5eqt56P9/E5iDWMcewUBjibWRWT0EfPTFmxmLJEBVNGIwGWDhj44YT6sQY+mn12C1OKyYNZR+vBnMxJ+i6BsL9y6QquLmIF0D+0UnRSWsoXTFCB0PT6XoSj/O9uglhHmlIgaTAeITmEZglbaG0gGRJMVD0cLQFOtMhwVPdoE0FTWG0jUL2frnCly96ZTbrDIfVMwYSj7lf3siaasUnalaYcBjdFJxV2/6ycDaE3YikJWI6k8PuJ6Vo1Mp+tJP8SVr0UmlrLFxaKz/W4iXE/mUrggy+w6oqzAGx4F3DZqGqqqiM11DkjcPwapCDtIVJH/0NEhZMVdvemgdUfRAvxQU/eMp+PkSE8Cqi85xAvDWDhG7kyrhGRwrCzxiukCsZEz/OOmEJUulIkbHiA79EUFaaWss/fiipEhYNTGUCkdzpx9ca5AgVjVmRr+/axk4i1Ec9B3tE1TemMHCNOQaPUNF5uqGvPekoRZGU4PcD6az5r0+xfezMpufeShLQ0mSBRMTDXoCyxk7N5HTy3B4VS9jpQrAS1BajoCkyC/8WbHdNIaBZFs4sCroJSajmYuLo3R47tgu8xwqphWQlV4dAgEPYYQqm2ThHG3kNmiyAHGiheLl7NYCVctJVfhxTytd21u70OoyvDckuFzxiKqNbRtxfRSOrgc2QNG0WNllsvf7kgp8gg/J8RnsiaUtHIa3q/lSpD3nd9qm9Y47W4SOd/o9AM31cglMup7fKJCcdyxClATbu4wPZ7aDZWI7QcmlB2v62MZnkdTy1Toe5bTwFyJ+yuInLxmGRBT8X0yWakRjPi7UmhJD+GcLDXTq/wgUVXyEHFV+hJIni750j0EvNAMqDXwNmtDYInpZB55BA5/opI+jawtAbk7d9V/ptusUz9h3nTLpwldnLaoOI1YT9og2WsdOfBNTtDZRbVPTKcED1Ojukdph8KLbeJ8LamNPLPIEPTdhXAYrUFMKNMWfePh2mirMwtSETX7TvcBX2mO9axK66U2DtSs6SE0zFtIkoxqY6ZB2CK2/2kbj4DjbxXIQ4a1i7Og6Ux7R4OEG7cDcEyBqjWTakaZzUjzzkcRi3F2jEkMo38sFdNExm/La5y2VKVr3TAIB+i+LIlowzgNZPtE3tWK0LlFbdBfj9AitXXl/ht0jt//7fUK3dFF0mlbgAJuZ/x8px3W/XwkaoN3v7Oefh8zg2ARKcjxOKJpxxXpDRqy8TR3rIQsit1OkHAMLggiGGUpmGv9WwG3H1sMrEHAXcDI+C1t7mQJayUaWBBq6S7YqAgKXGSiE7M7nAlTd0wibYd/vAaz1+kYVzXBQIfNKr5c4kVVSTiNBpgqb8dBK0YNmWBxnydx6oaOKZjiBKuXOSjGvgMYpJUx1ki2eOAvWYFNanQxtgNdQhMp/ZkpVAY1Qg3MHUd5OlFy91mfhSjYB1tU1OYQwQfrBP7GEQowtTAJuhVkWeDtO28H8GSmnxYC9pFZHNTU6Mo3yB6p7TN+l3kDNJx9o5DGDuosoI+GTGP5bBiQGXYZz/1ezmfQS8LAmsm0rTLWjNYNnHiEYfSzeN7zJXyd4QOMmQX7P/zL7uzXzdhw9heFGfQb9fBYGflwDTOdLPA2yRs0j/vai7qfJIvNa/LOwQo3oEmgt5pAfhhzcgJXcgZBEhrrAw/AY4JBRhv7NQNxJa1J7AlIY64P0bTuzw4PubqA/3xlQuTDTbKsuzw2Zyx3h3pIlf51buheocD60nZykDSqA8Qz3K+atDuIsxoDhLdr4NjlzMafyzUstIS5duHIYG1r6mYfCnBEb0NtW2GeERSQoxAQcCIhgBxmNCEr9EQHuGNDDIPwWxkwPIzY75mSXw/3OKpRPexL9UCxtcGn/r7VLzXRn+tW5/M+9EKw2/ni3zbst28qm7DDvDOR2KzOO/xEbU3kXbWLU1q25VJ+vMgLznXiBNW5JjrjwbOderbCfr/AZbCV+w/9zwawESgTjukjeLmtW1+rLQ8Ozk0ALy3xmoTPJJ7OKAS1gN7nIcQoTUl9ovlEnmYMLXxTdPIE8BtuE3pM8/6Y+abM7PBFcCQor7M0+/ZlKpbzuLBJlM82qqIA8DAMPfCoKA2mRkD0WV8x+w0kFaa95+MwcuANrg/YzREN8AKFnEy5SX+RvgvYv4jh4M7bPXK9si+PGjHMOGvCfQzCH8qI83H4Vd8j4iuCHcQctcwpRjuhf7xpBAfBizjSwoGMvI+ewSeBfG2nvUPtFIfCTIRqotin9P7COiGlYF8ZTfmys/z8mQIba8n3r+bnuLcKi2Uhb/wqyhAQ2t2AOyn2mJNe+y9sC5n3AcqbFq+I7emO1zvgJ4935yf6EmJKJBAjKwqzuFZzBvzD6dX+mPc1LqnbM7Jm5fC6lVJz0tvK9IJjFMzw5OjNADPD4PgZi+k42OjfqgI8fk1UjWIM5BoF/hCDsSTllEKy2fLvuvkn2bY7cwflUxDCgHoY9XYrR+mZj5xMQQNJiVGDkr4E3vkUGVcylHN4MDqn3hnnNXjLqblb+CN9J3bg700aNOOmpERohsXH+952S9W3ITZ0b/tmn/uqL6W9gudq2i3PPDMn+RxV03OYha8FTSAVv0A2xteibQV54Rw3zHnoNJaJI3ZXFgWitBVPQEBhWy3DMF3QYMd3YZUV+hfT1AWlrUxF40LWmihkplm2e73dEeC4qizkZJQg/NN4aLKyk4T/KKelbjIxwOflAgt8TNUvsbvgpeHAD/pNRwvcDRnjYUF6RdfDleRdiQGcrlgBODIjfrm7hnPr/jY+XKuE6w/Do+JhRPzy1hir0BqPOwgFVtm9Ms+Rh2FW24R77WCpcz+/RVsHndxCbZf58j7sopFxoMWpKkA+ZhG7C5Lo9eGzsGMX/v+eIEUx+1pP39vE9Ds0sQ5qyA7GknoECFZkXu+NzLAJkrpAI9uOJdIv8u7BWjOfuY7b10XFbASzO1NtYHIFZ5rE4TOBZ+fmdVW9uGSYY+pCRarYrhL/5g4bLdpNFleWLUnp42+0G/KUQ5KfeYV0lvwirR6sxzE1ZQS8AwpbtQ2b9p1VJ6UMx9W5OfLhA/oaTdt2RapFZ9YEWv0Spj7J4Zt+GgclF3xtajL3mpSFluxTcD0yUIdcYfm14C0jc8iKyerK7stQtPvlCog8NhgN8D+sBHdCWwksKwVHAVanFAERHWisg4GPkHbkulZYjYzhMZ/ZwyR+VptZEPNwhc0e9YE5vOD8IHUeBzlBEOT7Ix474cwMKS0gcJ3EAdT4HCrGWWbxxZfbqnjPMN7vtEpXa11c9a6D0Ce/QsJYLao5qj8/jZIv9vvFq/F678Zi1R8nPtiKqyagRkdAyx2KRdyodNjNQcQlQX5gDIKI70Esn189S1PUftyY/eyZENREJUdu0WuqcSPConGkLZerdTx65iX3Df9XmNVbvLQ+x0Zz0WehGqtVudRzM4bOf8KgjOzjBv5PozW9seaV/Zee/n8qU3sprwBezLecVK4tE6RQmPUg0DWinnJregn9vbXw/iU8SEnvV32mZPjOOw9BZ6WxHy1CEcIEPaie+3JA2zAp+gBSJrC3JYwNCabNCxq7FJkqSARoKULUCjWvphBfA7Sg7CNz5eT5rTMH1lfpDyknQMpveO9xIqAg3YsrdiEc9beYn1kTs4bbD1+IDUrQm1YpqE3RHFTfPVhbs/e9MINbid417FxkCSGujR9KO/KDhodWeEpGtnPe08KFByDoDly+vIvt+PWZS0/9aTQiuHUIIYVhuXhduaXI8GCZrsrzhxyaz+osfInyrtFIOryRb52tbDuxKp8ONW55MGezBk9FCj96o30iiWZsOjrKyURhqX5N+XlnNQPR7xXhepN3SYBR6LBWNb0xkkDi0DYXqb+cd/GUJpsqwAmMN5e1fljTH62DU+o+02uvPdsdqwM5zWQCtwK/r5Ovr/emSPhp0ripFU9f1v2HSu2ojqszBwZNS3w29ewdunmy9FYCAHSA0bw31GacJ+5cWEMphCUTCIv6O28Wzlm16SqCz7RNbFyqar+wwcgj2GjZdKqBo2jYsQM594xkB+o/9VBJ3T886qRpW4EdEx2tPtl5m40u1/QugIVdGSQdRmxJKZKj7qRIcW7OLr67yE6q2aQU6luBuMtcjXsvSJWr+O24Oezp54xjKBJRHJhWH1CRqToRL5fvkzcbOtp6ZNiDatJf1IbAi/pkLRdL0mJlE4mT8gpSZRpSVVOUClckcx5fAJAIyuHCiusv+qF7mDlV3cj1bO3ED4RevZZyMo4Ir7448pTaOdb0gkk/nHKvtW27+2NEw4vwvnLqvNPUuDNF5/EFnb3h6PEfIAOBNKoGEItcUDQ2igaDrN0QA5B2B0xJ9BoBuRO8a2lTFYOKNnbuagTdGFzHr3P4YasKyBWYajqZS+UC+iVkcD2Cto0cr+rxAOnWFBWtEAGvX0CXlWuCSTwx9MK7bMHgW8KUhLFZ7/27j2wylcbYMblTmYE4VKLqxqKt9qXMp7TMDc9a7EENflH3snX38Wq3VWV84OZq/dd1JN51fhwrEJ+wXdqGo4AvnPJSbcr+yBnTk16+m7GRX5E3EsCf6+fU7rN3NBCtCL0i+81irWnsrsR28LLPakc85ZnHL4jOUcx1jsdNvcHpP9EVFqSBM0nYmOyonvoiA6wbjKmPL9c+mgO/O9xt0G92BpiOyhtN7MaqT1/xdutG55aafV35JXrXo0PryEp3OB8BfdenDpvDWk1zGkfumggMqdeHSSW+TOMCKoqsvvT6Ny4FsAAGoKnIbiWBq2vJb758sdZ8yw54urRYRSmcDeBvdv/Hx0iXkjgyh4cnqb2Us9y2CD1ujVGJxoiBK3ZIzHQcVqpV2gIPBzz+k779fODRi4AccpDK0WbUhSqWRzUCZdFTRxUOpyjt62TMrd0rbss+dtJ1978FJj7ktt4t/HrML+tN9cOc7/REa5yjR7fdO4z4Xfh5QPdHnzjLN9GgbM2dBh50kJ0QH2d8GegylSnFAAwt/jLY5owdKrmmv9pG07MfXV6ujuSIJ1MunLtJ90IqN/8vQNlP0PVGMHuYF1EPuWQz7aTxbwtJJkN3SCvMiKtO1JqAQB/Ff/x2i39pKlGhaVkX1zul0C2I+5dTsPhKrR+G8KP7N5xLUO/PnCYRCBwIcApGANVaPsGo7Jm2s2xDkpDMER/wdh8uBNOUqpJVVyPgDv+KvY5t72YONNsWycIWb+hcvq4znNz44/e34mS2BV3vrCFVBGeFZwwJZE0z8DLoJVjzn6mA4/XHrMKzrtaWhiy4jh4sZkx2mqbUhPMn9zI9pMRlj+xjHWGF4IW0lWKONmwqMMsOm9b6+RaPX/6kk8WXZWqxZ2ZEzfm0GAFsJkLANjN0ddra8vT1Fyn18oW4JQM3U/AB6YScMI/pPwz69TOIHWC6Bg9Xrx0S9e4PyZHs3uK3sWIr5DazBxl+IK3qYOrxiuwCQ9ilxyUqHHxuSHTNAKaTgrjDGZNudWHtyb6SMvdRqD4WhajVZ6bM4RDl7L8JPj1mKMT+C3Cbt2IX+sk9aYhGM/k+FYpdeS9dzXdlesVQgAwOowzN5MHQ0h+V8nC3xIkxe4lRfxEjhNzTH6YaM4TJYFAzk27DjCwl7B3nvrwEM0wETTwXIZHyVrjhUTQCCCJzG4Pk940/fWk99vmw8TLvLKPOXGZnnIPMbikPyYuao5TLX9lWMmciYNMSXV3Pd3sqdxszwsyJAm+rVItycmk4Q1Ayql3DjnPkCZxhtIWA+4M8Nx6p/QwhLKoaVQcCJbrGHR4lIFrCIbauQOvTbGQ2mRjXkQFDQmlGJquvsQOSfdKjgGNRwPVxx8JPOFJSMo6i30GinUJROrLtr+1+8Or95/j4uFSijohfC33PNFDP8XJx4q+LmrxwCPnoOBf+Ah+4EHETqgI0Pr9bTCLAHi/F7UinhcZiJprcQwt4oh0HxpdWsa0TuRNOGpVbxWj8BAbQ9Wn9v14ewvwDH4rxFn1QmAj1XGPFm93Y4dpSx9/fGM1E3j/dvNdsaVslZoQ377KxfsVjXLcYVuBCZRNEyMv7xz2sEYJKz6ZA9xYwIoT2sCL+eRPENSZNRfaMsGRUm80xhG6x32nkP8cdZO9hSClL4HP86ZlQQ95P3yc+l+m25d8KnqUP2c1t2xmmqWOHk//jby4eVomB11vSBM3YU5pDvCo4nLa6Wal1nwKQYeWOEZR3VF7SRR2iHN1kzVchFUnOIUFLlssoQfgS3g0I2V/QAkDKf9JEV5gyWruCO0oblXSLv/r2u/nAmzg9wX4LMpC8/P2p45t0Y18Z/NRmIMIHjxMPxTdC9MU7QiRkdYXswH8WYtHF/jPNT4md7MH8X1sL3jtlklzgxDfVfHMlk2TEV7+uG4Bo0F1cuFWdE4e/8W3lf3At+NGyZjwXEgwA+Kufuc2+Sng5vmcT9CAMuQEp1azQA1zw6Hxq6eMeBA8Nqe+RtTQcxbEmThPsVZy0euKfDAJ1z6MllYpd96VaiV6Xo70uZlgzTd7E4Pprz6IEDwjVp9U05yHyI0oAgBEPHArTw20UmEYUYI893bA4mrvIEmic8x4eD/z8kmqboCD14E2TnJDAFfRg9uXebxYXHLTh6ThEfPL6QidMQkNIol1pUrVQxGxyXGYEKCryvMuujIJ/rL1+23nHXie9H/b0PHPS1QBokrdFk5SLm1J8vABAKZK0orjqzDeVLdtRQJWZThgT2lWrDQTveEBaEPeoL4RpfhcDyDV9ho6uo2V/D2BhKVcDmcnTmgSQcpvCTtsgS5EW/fcRHim8rClPHoH1J5HlBnEXl+Maic1vI+Yg+oLl6oji4qALkj4q/OW95YjSxfcw/+MDBz9zqZVo19mqOb99cBkQ7YTV71K3jBsKS5hYr/qC44a/952bkhKYnEJr6jvx2c+Vryba+Yb2tlwb5LZ1y3mHjLQNW2YyWbV5IwM3PongXCRZVmRp/6XLdc3HxbTDj/O0gQrARTphO/jllikvkYWQ684mojKjEtmoq1wSZyNPr86vLLs+XH2/KS2n0fc1awst2+hrtw2wk3uD9hyDkP1RFJJTU4vk7NtTeeEl48cdsG7qOB/hnRlte40k2mCEMpyDtiUIdhNiEuOzz5w6A3vxjVzVRaWlThaTs7GnD8urnCqEmQxocaznE6aWcucWwF8NEieUj6WcYqLHthBJwNu5dZzGtLy2m9pqz0GAjmA817Pqd2VEVhmQxYWWbSDqYaTqQVjAeyGBt2GqrF+vt7CE/oOVBNL9zwc0rw1g+JhmKFvpmdqBQUf52KFxnLyDzKqnwTz2KAOG1h/IUKhpdzvj1Tz4RYDe4QByMA5kS4FCqoMLAO6cd4H6EiKt1j2DkpX7hOlFstkOtEku+YFBImEHruUqxRRpw0n43EpvsT3VOXD7d/p4tDEX57wnIcxsjp6WsCUK+GyX3356Wt60M9rsWYHGPBGUUmYJhS/Wk+SK/C3ginUnchFNQO77ntDwLgUiD4A0JdvmdiuisW3jQmu42E3RzP3AgvX6fKjOr7AEdsJZ1ADNlvCeg/P9pOjqAMX95Wj5Os32I3ZyjC5VQCZVWKVV/OkD4TpkinM2rlCvLePNGNlcpQeYlwO15HL1pICFQbHWO5KifzLdISi6q11/UxsihGn+vOZ1+G4SSIBCrDUh22IDlPnoY5HIB4pP+UJLr6EaQqGiBzSO0QC5HUKzZ37L4f5p3IucXv/3sbxCdCXcUF+cfVG3dOOiWW4f0RMoEVx43EK2WQjQAGvgWiRoh+aYkC9jjmLCOOf3/gs5lwX5DiyMLWEtjb8/RY8XszsOAh/yL7FhgMCZzgJTYoQf7HGICciSBuC73hYQIdSkjOmswb7CClYQvBocnDSjxRgYCs/tPlKQi2iY6kGA1gUHTDgHOBlEED2g1Al5E7rOtcufMskpDAh6T9hcnYYQ6q/+blcUwKi0/TW3cxXNwZzGTKit8XwfN82blBnrKrm4sJh5ea/5E8vcWuYCF5dlUJT1LAQ4MfCgc6iAbr7AI/p0Flt4QjxRzOZaKhd7SXwBKNzUVLS66CBFyZx5qAsVMqX6sUvtVtrAEgLhuLoJK3bhaJfaPnPlWBebKtnf1FN3dSBq+QjDbliu7ePBECGaZPBUI6IGKrqUDKxK524vemKdI9MayTlbniTjsxlIMVmFQlTw8BP5gQwoswPfnRrADD70RQxVdIigm1fL1ZD9Tl67kkYKX8L0l7PM7lWVNX7WTR7odZ+UAdYOR9novlBsHVHFm5T+RYzQFnMjVrAjXBX0hdqYK6m3Z3dH0FCzLobbBCDfXZQzI+WAeQb662ILbtmsbyV3dOIR2FJJCcUozeAV/BtT5xRkw1f6zox4M7asyjRWd3noCP+nvAnBNoOqaaNFHJ70Fx+SkjeqCi2uc1UE0oQ9TGRcR3FqOcxo0kacD82F+p9bouvz7JaA52zwALZmzgUVjlCCx7jNwzfSRl/3FCXEFSDVZEMWYSg+aYK5Epbd8uisBMrsYpu+v5cjaIMMrfFn8/xvrwR7x5vjy/xWpvtPEvsJXtmEEsi1zcFj2Oc0O7PNhfYYAF5bM+3qOfWr9BLjvOcOsaJMsrksHQ+5OEABAH5GeWRRKt2/IElwtq3MY9HCAI9BjmY3bkZItESmFz6Ygbmg0gPvFaKHLRQKqodF59r/8YB2fmvQmnMB5Cs3CH472DN2AuJAKbYVs7hiHZ8pJTLeI66KqNq8VLuuXk3hqosnYd98SsDQDdd75yNYfCoCGmKQZBjyHqQbj/mrsyQaLjo1fzUSrfYSPNziMzhMQRtKlCxibbFrDlYoiaExRI3U81VJZhac5chAFgnmmDpoU+Cp5ImUMRG1dtgOmghF1zPotLlTzOmWY7M6qAWw00RExPILge4yTLe8lisNslOW+QbiQ0QGRG34uVko7ryku9YznqR58Lyh13Cm6s2NdKQsUposDgWvSuYBAj0Q4VfJH2PrA66pPzqO25hxxmGogJuWnGB1YhldZR727AN1Ks91uDl+Tlxqsj6JJxu6O0c8MRi9vzq9AF9WOG+Pb9XL/kUScLla3Mr/I89gwEQE4XrD2lve4mRhu7S/yiyWqQOXlqyOgrfTBo6FwJ8EMhohSxYxKkuYuGv4ZKRfnvFw6wP2ey1UVefWF0u4GAYkBZ3kHJRzLtFCHGRP4Dhb4Et2VNOA9+E2Azq8TC88AiD4wr33bP7f4QV8agp2hmAaaDDgOPDLShEucjOwJmkPkeQAbfvB9bTktd9YTQN/Z1Njx33IQELOf5J2d7NAwPM7wtfMRTnsRIULnNMVLIWV2wSPWK5Ua1auOsqk2D0l1ckyd/mISafL7JMBobCq1TjZuoFdd1XlOAVBTdruOd3h0x7OjomkiGKJnZZ/69e2ajqtUuOv3fLAq05UiG0a2zWH0mndxIrn7/PnsnXAApk6qtmYQUaMdawHNVckGc1SuhcxwNMvpzsx0mtA5cz8cSJMuYi3ip2bO891l651XZKTygg4t3eiSNnZVH7+erf/xj5QXGlilhlz+yhNKwtUREkbRd5mrJOsLmSehgbN88/WA9IYIG+ASWO3mOQX3M4DwzBwvQHBPLFbQVJuPoKGIJNi1KxtseXVqYfZ9FkvD0oFD6cqOA+mJHmwqhUwR33QR3Zj9hMsU2B1tVtFfixK+rxJeVs/4SelIlWNZbG97OuVmYZ7KyyXj41JomOLrMKD5hIHroSEwBoWsZ0ySVwZwXFGEyVN8hFqFUDzw+LuP/r3l/nb3N/fMGGh3rlFBMWJeYV8/znA/D+x27psLtyYld+0ubW/OEOYEpIKB1uJ4woJ/XKVV+0XVJ1fy4GdJ3+Cbn0gB0UHkoGMm+ihrlHI681HHcRn3k4YgGDxsCSNLHeHZQU3FiKOYMY1i7A3ogaOJfU11LsjdNEBSBIPovYj4+nCnIpVSBY4Td3blY39X3DkwdQ/AfMqOW6KQjBUx9ieGuQQvKsA2jn8ioDqfwhcoTs/q9YYeH4LBVOLr7PQN9Khw0KqlneDluQb0zxOAQUMCHU71DGoPxL92Lqh03pIA4kG4iLKGxsL6gnXbB5nuwEpZqwb17k2tZ68gORn1YIYmiX2pN91OfeHuPZ4C8FVdYJTw754M0xMt6vDphUjnJehlPSaQvE6+mjkNL9Q5NDeEWazHL7bBH1RaTvT+46U8p+6n0lJ1VcSuuoWlS6Iqf8nqGsbSIaOisutaLiBXVcxGJGrGYR7GHGA51+EjeMaGbgNh5irdS1IF4arEqlfqAEAPj2MFulck55EKFLdkh8gbpzynSX1SN7Y9u9btbAjRmHmtv6QAT0fPJcSnrRY6E89JqGlCzfphxDRm+AsNyQsjAHHXe6wvbJ6+nLT6ywyQ+Y7XJQ66oA2y88EJq355QJ0dHt1RQHcjORbncRHsiTLj/RvTJQtohguv8YtrHQtA26LmzAFRMDrRTispwkd4OEX4DROJOkgJ/Hby3xQUy/As2Y6oySJa+wwUX0PRDjsvL0eUcvPkRmpxoWQUfRmZzsC8xwvHA5CxYWOastsKb4qD3sYrdC/BFSOZMaxd3bQ4pWhqTGfI/2/6Um+Hq7JTV1L+YtbsA/rd21qypCPp64povFTdXbiqR3ZmmgXRQe35TpMaiRgHeU6PUWVbYDQZWqwwXQOVveK+UmBNMg6sHODy7a4LDZpBk3l/3wDtnukK+lKyWgZjiDRcXo5tX8yDzx8d9cQFGTRUqJNVbzHFJTEfxpq4EDoqPqMVxArBpxX1lwxrOPhEefVanR3F+FVYQCeX5JJpLbkmzzqQsqyseXkrO+5OF/r58YOusEmjSDuhnaLyhrABQNOV4sa6NFZZovuVAyp1OkpMr70IqNxdnTITu9wIn7S8VIC82FWk/rLSiqpLOkS1VsOYoryUx/XxH9BNV6U0M5C83HOZavqsclSdV7EGylqquiXTUJ1h6jOthnpcPazOA0qXefWQfyQhUd5iyV4BPjdTO12lcVSKo25cnWb6oLM+PrHyGZxflLXaT1aH+9rDNgt6VbXAEF0NeK6qFgxqpfDb43rtCkMZxTP79xkL8P7buCR0AKeWZwI7vevQ3qIP1VX1Q6nkFXYZUf696DFohAUAZJVGNf3G8DQ90Pdo6x9iyqOs/SoY7dUVqzcplNtxmCEgJq+Q6pxgXq+4QfVgaWArKj6E5nMt+sIUbH3L+EGXwQhqJcH6eIo8flBd8R3wnxCxlWyLF2/0dk1Pzl7WLutimZchKA+qK7kMYX6I1wJDV6KSXM1j3marFKIk6IoHu/Y0uBE+LxlHHrZK/LUVbOPBpxaVoCRUdJ/Ps0mnx3FaQv8Q3ZVTAN7NaIYHCfZHlnNpRRRNIFwZ05R4aIaHPXmkFSEiBceqPtzFbHNrK4cvBIXwQA+Wc+YaUI8fwrYi4wrLyAB5XgqgKPsLO4MjDhtXVnN/GkYOiD3v6OnBNUv9hvDsKKWvMKAFcO2ciogn5OqgF76zlGVj7Bb4336GmhDnweXsGl62fX1X7g4pADsLsHsFTiHvXfUdwK7aiaQFI3R930P6Yr7IDOsZASMiD4WzcfiEOor834oaNCyK3w/9eJOHfSXLfsl1van6sh39JBTwjvhI7GQLRotGxtGOQ7doDwu7D/1Ba7MBLdDD/EcHArUCqWF1u29qSJ1rCTG8SjzWVXXe70klLpQqHUwsGxHw5N7QsnHEZ5vP/qwtj30s3mq0tdg5keocFFxzIDvgP3uC5yxOWSUWFXZVAY4RzTzVlvqHfeZSmBt5CqmJhOiNcn7DVqiNdayHMCXdfAq0lDPsEysfvRiD3nXcmwo/8SedLzZ9NKdLwE3AKdRQu4Y7iAQvDMZCJK6g8nswJOmAoPFjXInOWmP9VKTQCMIeRX3KFdrOBRi7TMKIkCXqN29VIOgFYZUgTnkY4nGhAFw3qmH1N3I97bll0MCB/PLCwjHLZFft4oDmFi66NOlmnprU8X8Q69Hz3eIQFNExF77L/SEYrRGZ+LZlfRA0HkNZak3WOsgyuJoxALo27S6n6AGjjpp5bZxJ8JdklZWSHENNGLbTBgVZCoraVIA0NKLjAOwnzHgpi2Bu4FHNCS4sjQCGYo31kMco8nF1xsANcZqrO2xBlQzFkNA+FhoAkfzQyy2njDLcxM/4OfDSgH2DijEVfFNLSKc87+E0Sz6zCG3WgLCvzEZbRJR4hYSsk10NcO8bhnyKamQJkma+j9HJ9Ca+luj6RnRnKPG2KRunP5GcJ448sHQy4WT5s3EyyWHYtk6QMHYoS89YptZ0CiPkaXZT8HshEee7BTsnHHCxwjNH9phcneINJhJJADbcsTN0zpCZkW/EllhYd8MWAhAcU3Z2ySbed6TTTq1ojW22VuXXzPDzpnXYPLJBbF2FzUJfD4wrpRFBXOoIdzqksIXsa5rLmm+eHvn0p1dDrykplHku6zA/OqaSgHgXlggCYrYw4HQcvhIfZRoPkixEC2YdeiHwIQ34ExXSAgZDdGQqAicHo6QfORB6eixOj9ZRWh2YRKxE2iQlVDbkwMTr5Ehqost44fXFo8nkjm7TYwCH6TG1TfWfYoubekqezyUp/MwVaTKJrRNQiIDmPgBiV0rrXhlaVPKIk5BTe20p54Q/JnROQeBRdKIagF1bTLyt5Ms8dcjeTRDxpDCAL1+VHvko2QedWi16+djQREIOSjNJGxEna/N91vaKGTpTgxVgeDEQuNU2FnUm6vw8r9X8MEO+XsSEid/vIlUXDc/f3pwegN+ybbv/rowU+vD/lfC68tVhUPVP8A4F/PS/A/4vxzvQP4NCdr4DRjN6nsM6+cy1CFoDp1HBZekNF16RG52RkXp2zPOMW3Mzi3bgiAdNuuCnjNfPD4D04p0LejoV/EigSVNfyw7t+XGhNnf2SL9TsHO0wl3f4SsyzW2+eK0K0DGF81IHcYaAwLzVzK1PKTp1T6RhTmKNUJuNH/f1kDRHqEwyXEAcYEjdw/yIydPzUM0EcpgBvLSDYU84SmhMTY4AFgN1IB79Dbp3HtxbGovpaZAjboFme6TPn74NFVN+vuSKdgJy45YkTOghqciAIJ1DdEteeJ24kNoarynuUDRletMR8JfrR09gfbs48gFLKg+mG5g7bPt4fLO/BGbmFSKhYcvu5OcdrBaZGb1YMP/e7bohzFI0hDsDE1p3vaVoPYaPOm6CVFS2Eu6WgELTivXHFjdOEqDEBXg4/p7MxKvT1vnyPc2U2TXntCzGKwoc7p4okoPLnZ0Wt+9cqgvgbrSwOKTAl0CLoCZIhFK81xvxTh+GREaDvQ+1ncE3C8q8jKzQcpVjl4w7GxUGF4g0LlhaY7ghTBySlcqXCgfeGIph4/qSvlQTQDLJBwwvX99jzahwrmizlmvexQwJZu001qMSseW7jvcCvk+uGyrNzatGb7dmLahE0ChT/hCzMH66td/dCO7V7Kk49UZHRt7SEqtBvNYCmyozUlnrC0vTozXlAA8yHkemL9ZM8JrRJpvrm2P5Vy7kubDCmoWs4xBI64gxpOSTXAKTTcanmUR4JTrpuTEY+h286GWCEK4zZwKZhT0Wg0eCwe5GvFNcM7huZeoXTOITq9pPH56o7E72n9cent6Gsp2UzGt2vgvAmelVP8vC5/kNmglgDzsVgaS9QdZTbh4MWwAin0Q73Q05LzZ0I87H9hv/+ZTlL1FGByCGXTaIvk6JxipgbyoDN2tDMAxdxc0OsoDcGuzt5tFGab12dwpueCQ2/vauXZGjcIrF+t327b9KOBovaCdGuWq2vgY2X8dTcHOWgwOZE9spO5bV2Whj7pvFcu0g1gqE1JGe6GfKFcGRDS4jzLEkXgF7w9QTa43sa3U3L7Idr05wReLucfQu3XVg/MLw3/NbZ++k4+lwNz13N36/iH9KIOSbclNQ2faDYdGbrGImBUFW/m5Y+5A/1GP2fgocLoepMUbJLjegE9zc3Cwcr/mzxd3C8cnSPR+dzoKUmBDSCKnagthtYVWGwRnxTAAij+l5iyOIcEmModbmSMFMAHQT49okDE/lxo8z2C9YW97rzEdcsLulGcNWE4XwkMCMJ0tycY5Oot8JmHTJOJGPfr+K8nbAto9jvCsL5AIPxXL339lzYZ2J8dq8/d8JW39RLSCpK2Lp9plHm6PtICBOGDd3R7Z03yvvC2iqcYiHoJxRYAJQ58HPr+Pj4wPy/dQJSEOpqyTCdWbilcI9pZTw4r4w1tgyrqQI6Bk57zVtmlgBI2WzzE3FLZkI1OosO3oUm0FQXO2C1Ys2C38mQIY+/tN1CLigvzIoQ/HFi/xGGDoHBvCaupX/P8ppcKNQqPC6is/knEx57SujYQpNT5Lpg2lv+OCod41zaWUZV+ByuTWy7cl1hU36IktKHeoaCQzhGQCQU6jthkCEptoqd2aUq+qmZ5tT8H3TkLxHSib4yNgmd6kN7s1Ndz8H66ovHCHS/tSN9pSxla3kjnFGY7aK04maqg9V7uQ8OKxmlK8DLAICFEz0xthRPbcUmhI4G95ubX8ODLHaLyycJZ62CcMNVhLb98pfAwJKzxIOdFcihAc1lz1mhhYbk6wakfljZI+5c4jdEDFTPHYwU799nghpJN7gNs37Ja2Dk+zx0Br5ArWm7PQGmyEIvxwZrqVPaHd5ZoEb9EliZnPdd7WfQFxRXBGAjcqVfXncZF4ML4TNFN6QTV1if+tyjXQ3l+/AphKKMLvK+G49hIHAf32TXxwmS0uOZ04+HvU2W44N6nw+tNXluxGdLkwf+3lzYdkV3e20M70Np9F0Loh5EYK/yOUbFsDuhSqMAFy7GCTnwybHOtk8DzZmYgz9ntfk3WBIaMYbtNmWRoFhgMfNnIZ23HiuJ9uNSwRdCEGZjBZaDWBehQiZ2R0iJkeI2SIZvquJZvmK3A9ZojJtMHO+3RNmEcoVlKnW3JqGkg358zLDng09I2DpCz0VZYecwNizB9+MLp+B1QznLXK+GL5KTUZfyRxAC5ltfp1A4Rhp7QmhfUPPaEF2N8ZxvMXE08S39+d8cnc8svZtgRvOSdaLawxtTTFol9xecZrElpwWLzEwsFKugobIyUXdtoRrmeCi5jrShSp2QNOrbYQWnbUoeGyMSj8FgBXtfB3pzAzgYph/zq+0cxjjIg5AscPiupILBTj8MRpgeSAaldw2ccjL2NdA1kvkTpg/9FZCZDGG4mOcI/ETQ/DZ8mpbQKMcyLyiph627Fb9tBXw9BZecucwZHJcnRkuqaGatmc26RnT2MxSf4IgTIYTBVwxsoWwfjXU3XOhMpsYaQniMf69q6PCQ/G7+tzBFb4zJjnyMPNtUacTNsNmv+woO2UAVKMDm1Dn4OMJcfUk7FODvr0aeszibZ2k4Tx60BZ8awT+4BtMZYpEo2fTq0fVmgbzqqTeyCa2L5groLtPUSoktLm5CoM2b+p7Zk6NT7Z3zZ1hz5phJvekdV34PsqQNmDPZlxr5F3gZUwgOhRulC8+wnpWZ2RsR7el2VP1qkRfxDm4hqpqlTPw0i4u6XVv5g0tBi5qtTlP2eGON25SUY0NLJEa6BoKN6jUHZ/cwKRgBrR+xzXOqPLvSn72jk84UqLilpPpZW2GunPkeM2yh+rhpjIelGcPRxVMDbr2SB5ELhmpr/5CQK/96YLGSNnFOnRSu7D7O63RCqnBjZwj6ybQHsgFD7hmgBB5MGGbIjUF1cbFt+mJrEfWarofZDd+NFH6aPce539gjiGGQtIZwnA5PohxSX0E9W/7CQpFLAiDOrMjx1GrxXZyWnjqk9zcUEafOFAISvUMQdmFajfF0RyrPD8RIoCrwx/yR1udRJrGMI3HEQSlT1RV5/MtNjoWuMznYns+IrK3vrvEP5dAJJaM68Q6NDc4tjWuUFceihUym8vQWCGkkC51KRxWJ/WlMQQminWS5CL7yHa3f54M2HYxIichtsw520Dv4+TgGZi/iguqnqiURKdGqYtVXIdkUtLYUQNM2d/Gtv6mVgDI4p0EzPuGKpRrwlNWUUWAKhv1AKKTnjT3XVIWAP151gDQSbBm24oE0G42dbIVyG5tGwi6k44ZL4AoNNLAT/M7/WvrSHwxS5hb/WHddRQKJjWy7Tki4u4YRLZsJXCFfdX4Mw0QWXR+tg48B0Z+IfsCgO1eoXd7jt2HZb0wWG6lrweml6l0clkYtvocbom2uz0e/4zKfINaVWdXObhiQNWgFHgMUEkGkiIgUvO1UTs19qxjdFDXfrRDSrVwStwRxJR7WyMbQJlhxtD0vvE87BRtryR61DDR4+H0qGX3Rxfj0k+bZzJyKjMYvb1UkwKnWE+Jt6sWiroTg9Re7wXBhWjvhf/jdR1e4xK4F1Ivsynva8nUzfuwoVMiK8iFZwLFxbfHWcPwwVBP03gk5LNHtf6ljQCmqNLBR+ztek/iukvyNj2e8SpylECJkbXcPIZeKyiFeKsSi5/huT9WH5xi56g6WIo/uvWmFaRFknqFJZ/BHW7r87+w1HRwXALo9ABwAuWhwse4nRYF0Y22zmpMc6ZeTabPiaJv/8qXPQ95EAzrgdXJ/FnjjU5ZmavCSgapD263mtUDt/KDcw6MEKi3k1Km6FBTOuRBEOz1WwhuJizJp7Dn2vpKBn89vytgTdlvvJtJYg05G0oPacKJoiXkM2irEgh1rtXtANL6GtkNfbcDrraYG3DJ5WAGP/r1Rm2NAMJUejesHTOqSJlSsiOE5Ec19HbI6Lpnej01Ywm0h+Opo0KxddNhI2vVVousy0d27SabKhYKVBJP+g6JPndd+oL4DnIARk8LA3ZO3enDPh6mSkRxnfqjYMCfz9MFG7NYThmR8x1R220yz/ywhXWdcI7cJjavPF3lO/D23YXnXXAynQldEUXaS4kodIfV1E+ZENVs1Ftf4E3vYMISCTMUNrlyXB5o0JFPq/pV14BqpSqooArVRRNOa8D0r94zx30qJPfnve9mjB1oNg0mQPnvCwrYOtoqRHOScw3lp5Pf8RtqpyKxSDq674RL3uu0+mHiNI/CkzSWJbRLayXrhm7YN3icxDZyCBPpSJPuh17jgzOVQ9Cw4/4dSy+nW6WsQ/e5HUPvp7I4UTgKZ3IP/ONX05d8fjcCSJBfGAcD3kbL9uWta3B+ZiM5mccTfHT9/F8dZi3i5Oa07VcOB84ngDQJfaUOX5JNT/E8a5VrUV4VnenZouk4U93RkUOTM7jzMx2lgQoc6f5jXcoIr2GO/x4dprkMmYJ+PPHZ+ahyvY5zOsDVCfYlOhjCuVrOEz59KOFs+l9MBY9Hw+Wc45laj1LOBMlSbKYA0BirafTcmV527lGkqZdWoigpYhpN8OrnVyEJuP8II0TXBGoHxo65nxfLK4Ihb/61wiVJYdBMZRT/QhInTCsTMvkvE/g7dGN5J5P5mst0SyjcsW2+HZJY1lGLCdG48y+KAkO8taqKsKDd870IVYW0AsuRsv8chbtTFiHFf7UE6CxFZVmXEECziUOV66EsReiWnkxN1zADmu5XT/8J6hpUVHR/DcbIDXFJxZSt0FGy7T7+eDIo7lqn8O0XT///CtD8ZppbdyPQULABdTcbrpl0W2/0ITudjXbKhPCBpEwKL08YvSo+xQT5aqXKQSpFfmwyAgGDtTCmtCcq3irJgUKiXK2afWW7fCYzafwR55+ZlhI21Jn6+o8tX/GFQJPhQ93ph3xl102ydJlLb4gRbTWTdRMB2OQVtqkTdHrvntCsstJWhQaZSJTFw400f5JI7DPOj/zdh+aY86GVZuHlzxkXj7u+Sy87/a37JeTamCIdr7gsXRF2+Lod0TsSUstZ7oFIZSBAm+RCSsuxB470GDd+w8YMJy9TXmW1zomudCTWmg9btKyp8r9Ni+fIvfr8Zzy3Qcy4/ouALVxa609P/xfJ4P86w0Ups6/++EPA2XWacaFavIIulM7WXdxzEk2KkPMPmckJHszpWAOEKcAlgnGPTv2N4ynR+XQM/GBG7mDPHHc392Q7Wz0BgM3usyFZBNSHh4dZG0xLq7Kq14aZgvtDXVCNzXp7Fp0c/XsPNRUlola6AX8ZQZ5w1MukKsPlxdch+XRY+Cm08QIDNqPnIXDvB5J31pSj++ELWV+8tiG9J4Zph1CIW8LmkRTrX3qqyGAvMUziTDP6vp/Qg9AjVHaV4vLHbxFZVI4a2W5noUUlmwqsET5T3rS8w82qIoMZc5Jmst483dRwrr20fPW1p16FoMXBISkMo0b28XAb8OnS0dEhbN72I7DAQJh8QFuvHQJq52StfCyUWpFCD2mGqi6O0gwzXfFCWdVLaapBXTKnYzBw97DFrRvcg2pTz/dFRB/5Q21j9dQg6RlM9/Rf7eFTZj/L3YfVJdQ9MfbfUhTYOqa+a6h8QQPBfcSzqHs1FoppAweq8UCBqjsw+u/TGGhGgzG+77214tZUykW0M28YGc6emU9gNxI7TBTSenicBlrJm2tA4pXMo6YcSLZHoF/FUb4QKC4HydgJYUZYB+OmVypTyrl167SQTa7MPsED2QOOSTVvp+JQRZB6o60NsTp2L36o3tJ9AblRNnJzNedrU+O1RnpZ6h22pPL3nUVzdYG3HEOY7d2ff+dakllBhO2pijUlsKGH4H/uFLgEFKQsVTCSwlk8iIMfHZPXHY7DBENI7aFKVE5nUOR6W8VSXQBVyJgKZwjyGJjSW+mskfNz9SXqrZiNjf5LetM9WWdzkvvU3taRPGz1vWH9re6Cvr01jVazSKj9RnQKSVgEsAOR526zwyD14NAQYnpavGBWS+BCcn2z0ILLleHjCbijwrg2UbBwEUlbiH9ore4AVFiOyrmdS4TxQDrmja/YIdc119R9G5o4zq3J3NqML0+y27kRLddZWFJUiIE8is/75Fc7TgIGlQgHbSxuFYHzz4LGIYr2ck/h2k8u6E4ZT07bVHM90cNvIGM8YcJXFWdalT7fHvDy6b37JP6Jqg+Qj24Hajd5tBDkcS/eEnW9pUH/06AfW53JUQb3SNTqNriLRSNxH2V+HaMyqcTxhH/7WPNfBVVrPulkxuGq/esUVDENmWsMdxqaX/5Y8vat87t3zsbpT8UhO+999G4XbT2BZpD1X+4otvnatVEbvq+C6syNrWg57VKWYvM76/L+k8/Mz42lpYHOepbeBPyGnHybrwAMSohbPc9K2Lr2MeXimhdwKt8vpPMp7OmyOhMuJ8T2qH0HYpGPXDggjDSS/wsPkKxhJqMEwnrFLT3pjy8jiYRqX6gQj88EBtFTJkuuUahLkylNSBYKrXTbf47zKwGYFA26GL0kub8OrWrxeoEvnmicXnLkl4Rh4Qffem14hB76Tk8IVvfwBj5yWdFTw2DKtIS+k1hmmFE9MF/DugnnPvKApmx/ykAuTC/ge5dZnU5MUll096sa92pK8SFpG/T+hHovgWiA7JwijqbI4cngcCL3v3SnBZibDShcjsgW1/ovc9U5WOfdNcKWDp6N7hG5weRI6aX71s/ujwzzz3nBU5eOwxO4QVvtFjEXy/MNnXmDX9IzQmbFap61c4Ns4J6RxGDpEclbVbUDXRDz63TAw2LwweUkOW1bmc9m6NoN53PvGK/Yt5WtuLrRXg9PLsZWXOhLeOhl34Zu9uaQ6pXeMhVP5LI4Q1NAQsmq0/Y3YSMvBACmkG5uOpLrF8jFuQ5aXa1UgEKFhQOYpohI6+J9fDuy2JT3dTHsYCdFzuzanNuCGZAd2PCWUa6BQ1rVBvhMkvRloEzrEp7D2yCkOqdfk1dw0iuRvJ+SUTZhdPleLzEVXeXAmnAUaSIU6WKvp6KiHUC+QWhypUov2Dwexvo5WGkLvgbGJikHVJkqrwiwYhy78fpAavOSK6WHUErOPQO91w0dgdBrNAyhvJB7P/SagjIPufBMAmIwA6H5Z/RU4H4PBiDRS6q9jYvwm7QjXyc4xHlmP7fINXVFStyxsY5AAW63yFRqnSXmpi7KFFGVwQn0lQo0BgmRZM9/VrWYLUulKl8tkzmzh1saqFhbCE0Cx5JrEnaZlrqk6n/QgxYN/ZzTdJYDY/Jfi8Alub360i9qValQzBqD9j6Us7IySQIJHfRCsPhGPQPLhsMunj88wBwKYlsLSZk6eZJwohvdvUffY/PC6UpcXaTZlZyTutVkVPUfFeC2ihBwQfBC8Wm3XghL4MFzaPdGUfZ6YNty4/IzUDneGqoe7xhZdY+br2b5ljKi8gx+mlQCc81X5v7DEHiAbj6VxDlrdWCkqL7z5DwzXVv30iANkfBxkbimitwtuX7YuDeidU/9sOf2q2sk2gYLc53r+SQzKNnbcYqcly8EFM1DpKrpIILS5/Ew3c2k2BjvmyZBYv8MnBF1k/gmUxqlI60G0J9q9bLYLqCfrGHXPrB3vZ2x7oWJmWPs3D0KwudCqIOD7R+ZvG5qX2zZPq9vhaHe1oCAvOlF2wx8XX8PLAWddCHNYjH5Y67kPlCC2azBGaGtdvHiSuWgUpt+rizFqRd0aLEIO/KUVj8li1qE0H4LIQ3cOBnFwukbXeSsF89Exz0X4m8b8GhAmFAeDBlQ9dLqMNfi1TCv/e1USgwP1bOuRfC1GwZryqML4o932dQ1P+lBbCmFr3cf2JDwOWMRP3MQA5084POxKvIBcvM7Ca6+OqeNxxEqg+BKQDFRvQNbM5NBRDSWxNdZqXcKvHCD5wHCaGcWV5Oi8Q18Vqy7wwQkuVMHycITPYlCwIjn4iHGS524jp+rPgMATvTCxteueTZcVyuW7gjdr0sVlVVsgTCCU2LeUle6XXIwTOPGB8MbiF85YMZBAQx56UMS9UCOdiYexixDHLUJaaqmiFk1d/kWQ3+q5yWTX8j9L5xTX6NxKLuqmZrPMqprnV/o/IqBumZDKebqi6yUYXlfAijAPpY4vQnLezHmU96fi3uO6BDT8Xn39xTZkpHADgQ3WXMpzmX4qlfkQOkR0tUhNgfuWTexKxkue9SFb6CnFbn49B8PgWTU3bC6eucL8Kuq3uTsui7MToIeaqfb8kugOTkqeg+LeShcFu1/ehSofIaejuu/Zq0kNdnSy67I8EYiDCR5nQWQ0uM9VdkH9qePG+NCUGXG/seMoQn/hJ1FBXSOm+wr0xR3TUJkMULnhmi2aqqej9u49Q6oO6w/C0lco8nZcWrAW3IrcUr3Wf8mwDtGYhGbQWw1Vfdin8LblizsfR7Ax6zY6t24SeA+QSTOW55UUbF2OeKKqKEX6nDnGRy3l6s9btlj2HILxHTkllJkNMi5QSrWwf5SJpWZ61sI7kfjnDVuChYHm5Glk3OyYuj6ZMx+tZI+PMEKOM8yA0uq8cIXsuA6cPkjDK77p1GRZx05atg2iYr5fLri+16Shh69ywQ7bD8rRQOP53RLe4HDZQClUD8TQOnW8RwJmG31oT01SyyRYgHV7ORtoo5RRwjO0iJFZU5ramgQbgiJxnuw7SbpYVabGresWqQTtUP2Nd5BLzXowLwT4hBmUlTgIvaXJSJci8I2BB+SCaVamjdj4TGMhS3nAe33hG5nBC0ArcjJX+BNHNIfz0s+AhxPho3tRbLTK/i2SJLn6lAf4V/3Mxq6K1YVx20ZwGUe0+nZH50wRgEVrB0CdVr4pSuYXbBj/Yy4Gr9Pt8jiL/5cyHIb72UT4B5DqqKs5eLdxjaPV8g6Pxvo35qamNgYECBKHCpwSgvyDkMQwkPrEuzXWZAPDNgbuR44hUyMRfKz5Arfa0YpVfjaqYGWnVKw6nXht00w35JfA7pFvANUTI+mcvWSt/Rttj+tzuWI8nX/usl2SZ8FsBAZ8lJrOYr9Idq5e/8ew+MJ5AdmuLOBm7S485JH/8adcvHvyMfdFzfmeCJrl5Qcq6q9mu3+VrUZOu7nm0wEm5lJHPh1HzFI8aXK+ZXcb8MpDxv2tCz9Db33M2D+itaJqIgIahPj5Uf9XHH69QBY77odDSWdfHxdq88Au5GBLXhEW8R0n8kVmckdfi/XWcKbsU3L4IjuNBW96jXVFo8StclU7gQD\",\"base64\")).toString()),HM)});var lle=w((sBt,Ale)=>{var XM=Symbol(\"arg flag\"),Rn=class extends Error{constructor(e,t){super(e),this.name=\"ArgError\",this.code=t,Object.setPrototypeOf(this,Rn.prototype)}};function uE(r,{argv:e=process.argv.slice(2),permissive:t=!1,stopAtPositional:i=!1}={}){if(!r)throw new Rn(\"argument specification object is required\",\"ARG_CONFIG_NO_SPEC\");let n={_:[]},s={},o={};for(let a of Object.keys(r)){if(!a)throw new Rn(\"argument key cannot be an empty string\",\"ARG_CONFIG_EMPTY_KEY\");if(a[0]!==\"-\")throw new Rn(`argument key must start with '-' but found: '${a}'`,\"ARG_CONFIG_NONOPT_KEY\");if(a.length===1)throw new Rn(`argument key must have a name; singular '-' keys are not allowed: ${a}`,\"ARG_CONFIG_NONAME_KEY\");if(typeof r[a]==\"string\"){s[a]=r[a];continue}let l=r[a],c=!1;if(Array.isArray(l)&&l.length===1&&typeof l[0]==\"function\"){let[u]=l;l=(g,f,h=[])=>(h.push(u(g,f,h[h.length-1])),h),c=u===Boolean||u[XM]===!0}else if(typeof l==\"function\")c=l===Boolean||l[XM]===!0;else throw new Rn(`type missing or not a function or valid array type: ${a}`,\"ARG_CONFIG_VAD_TYPE\");if(a[1]!==\"-\"&&a.length>2)throw new Rn(`short argument keys (with a single hyphen) must have only one character: ${a}`,\"ARG_CONFIG_SHORTOPT_TOOLONG\");o[a]=[l,c]}for(let a=0,l=e.length;a<l;a++){let c=e[a];if(i&&n._.length>0){n._=n._.concat(e.slice(a));break}if(c===\"--\"){n._=n._.concat(e.slice(a+1));break}if(c.length>1&&c[0]===\"-\"){let u=c[1]===\"-\"||c.length===2?[c]:c.slice(1).split(\"\").map(g=>`-${g}`);for(let g=0;g<u.length;g++){let f=u[g],[h,p]=f[1]===\"-\"?f.split(/=(.*)/,2):[f,void 0],C=h;for(;C in s;)C=s[C];if(!(C in o))if(t){n._.push(f);continue}else throw new Rn(`unknown or unexpected option: ${h}`,\"ARG_UNKNOWN_OPTION\");let[y,B]=o[C];if(!B&&g+1<u.length)throw new Rn(`option requires argument (but was followed by another short argument): ${h}`,\"ARG_MISSING_REQUIRED_SHORTARG\");if(B)n[C]=y(!0,C,n[C]);else if(p===void 0){if(e.length<a+2||e[a+1].length>1&&e[a+1][0]===\"-\"&&!(e[a+1].match(/^-?\\d*(\\.(?=\\d))?\\d*$/)&&(y===Number||typeof BigInt<\"u\"&&y===BigInt))){let v=h===C?\"\":` (alias for ${C})`;throw new Rn(`option requires argument: ${h}${v}`,\"ARG_MISSING_REQUIRED_LONGARG\")}n[C]=y(e[a+1],C,n[C]),++a}else n[C]=y(p,C,n[C])}}else n._.push(c)}return n}uE.flag=r=>(r[XM]=!0,r);uE.COUNT=uE.flag((r,e,t)=>(t||0)+1);uE.ArgError=Rn;Ale.exports=uE});var Ile=w((LBt,Ele)=>{var eO;Ele.exports=()=>(typeof eO>\"u\"&&(eO=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),eO)});var vle=w((oO,aO)=>{(function(r){oO&&typeof oO==\"object\"&&typeof aO<\"u\"?aO.exports=r():typeof define==\"function\"&&define.amd?define([],r):typeof window<\"u\"?window.isWindows=r():typeof global<\"u\"?global.isWindows=r():typeof self<\"u\"?self.isWindows=r():this.isWindows=r()})(function(){\"use strict\";return function(){return process&&(process.platform===\"win32\"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var kle=w((T0t,Dle)=>{\"use strict\";AO.ifExists=wze;var np=J(\"util\"),Ts=J(\"path\"),xle=vle(),Eze=/^#!\\s*(?:\\/usr\\/bin\\/env)?\\s*([^ \\t]+)(.*)$/,Ize={createPwshFile:!0,createCmdFile:xle(),fs:J(\"fs\")},yze=new Map([[\".js\",\"node\"],[\".cjs\",\"node\"],[\".mjs\",\"node\"],[\".cmd\",\"cmd\"],[\".bat\",\"cmd\"],[\".ps1\",\"pwsh\"],[\".sh\",\"sh\"]]);function Ple(r){let e={...Ize,...r},t=e.fs;return e.fs_={chmod:t.chmod?np.promisify(t.chmod):async()=>{},mkdir:np.promisify(t.mkdir),readFile:np.promisify(t.readFile),stat:np.promisify(t.stat),unlink:np.promisify(t.unlink),writeFile:np.promisify(t.writeFile)},e}async function AO(r,e,t){let i=Ple(t);await i.fs_.stat(r),await bze(r,e,i)}function wze(r,e,t){return AO(r,e,t).catch(()=>{})}function Bze(r,e){return e.fs_.unlink(r).catch(()=>{})}async function bze(r,e,t){let i=await Pze(r,t);return await Qze(e,t),Sze(r,e,i,t)}function Qze(r,e){return e.fs_.mkdir(Ts.dirname(r),{recursive:!0})}function Sze(r,e,t,i){let n=Ple(i),s=[{generator:Rze,extension:\"\"}];return n.createCmdFile&&s.push({generator:kze,extension:\".cmd\"}),n.createPwshFile&&s.push({generator:Fze,extension:\".ps1\"}),Promise.all(s.map(o=>Dze(r,e+o.extension,t,o.generator,n)))}function vze(r,e){return Bze(r,e)}function xze(r,e){return Nze(r,e)}async function Pze(r,e){let n=(await e.fs_.readFile(r,\"utf8\")).trim().split(/\\r*\\n/)[0].match(Eze);if(!n){let s=Ts.extname(r).toLowerCase();return{program:yze.get(s)||null,additionalArgs:\"\"}}return{program:n[1],additionalArgs:n[2]}}async function Dze(r,e,t,i,n){let s=n.preserveSymlinks?\"--preserve-symlinks\":\"\",o=[t.additionalArgs,s].filter(a=>a).join(\" \");return n=Object.assign({},n,{prog:t.program,args:o}),await vze(e,n),await n.fs_.writeFile(e,i(r,e,n),\"utf8\"),xze(e,n)}function kze(r,e,t){let n=Ts.relative(Ts.dirname(e),r).split(\"/\").join(\"\\\\\"),s=Ts.isAbsolute(n)?`\"${n}\"`:`\"%~dp0\\\\${n}\"`,o,a=t.prog,l=t.args||\"\",c=lO(t.nodePath).win32;a?(o=`\"%~dp0\\\\${a}.exe\"`,n=s):(a=s,l=\"\",n=\"\");let u=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",g=c?`@SET NODE_PATH=${c}\\r\n`:\"\";return o?g+=`@IF EXIST ${o} (\\r\n  ${o} ${l} ${n} ${u}%*\\r\n) ELSE (\\r\n  @SETLOCAL\\r\n  @SET PATHEXT=%PATHEXT:;.JS;=;%\\r\n  ${a} ${l} ${n} ${u}%*\\r\n)\\r\n`:g+=`@${a} ${l} ${n} ${u}%*\\r\n`,g}function Rze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s;i=i.split(\"\\\\\").join(\"/\");let o=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,a=t.args||\"\",l=lO(t.nodePath).posix;n?(s=`\"$basedir/${t.prog}\"`,i=o):(n=o,a=\"\",i=\"\");let c=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",u=`#!/bin/sh\nbasedir=$(dirname \"$(echo \"$0\" | sed -e 's,\\\\\\\\,/,g')\")\n\ncase \\`uname\\` in\n    *CYGWIN*) basedir=\\`cygpath -w \"$basedir\"\\`;;\nesac\n\n`,g=t.nodePath?`export NODE_PATH=\"${l}\"\n`:\"\";return s?u+=`${g}if [ -x ${s} ]; then\n  exec ${s} ${a} ${i} ${c}\"$@\"\nelse\n  exec ${n} ${a} ${i} ${c}\"$@\"\nfi\n`:u+=`${g}${n} ${a} ${i} ${c}\"$@\"\nexit $?\n`,u}function Fze(r,e,t){let i=Ts.relative(Ts.dirname(e),r),n=t.prog&&t.prog.split(\"\\\\\").join(\"/\"),s=n&&`\"${n}$exe\"`,o;i=i.split(\"\\\\\").join(\"/\");let a=Ts.isAbsolute(i)?`\"${i}\"`:`\"$basedir/${i}\"`,l=t.args||\"\",c=lO(t.nodePath),u=c.win32,g=c.posix;s?(o=`\"$basedir/${t.prog}$exe\"`,i=a):(s=a,l=\"\",i=\"\");let f=t.progArgs?`${t.progArgs.join(\" \")} `:\"\",h=`#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=\"\"\n${t.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH=\"${u}\"\n`:\"\"}if ($PSVersionTable.PSVersion -lt \"6.0\" -or $IsWindows) {\n  # Fix case when both the Windows and Linux builds of Node\n  # are installed in the same directory\n  $exe=\".exe\"\n}`;return t.nodePath&&(h+=` else {\n  $env:NODE_PATH=\"${g}\"\n}`),o?h+=`\n$ret=0\nif (Test-Path ${o}) {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${o} ${l} ${i} ${f}$args\n  } else {\n    & ${o} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n} else {\n  # Support pipeline input\n  if ($MyInvocation.ExpectingInput) {\n    $input | & ${s} ${l} ${i} ${f}$args\n  } else {\n    & ${s} ${l} ${i} ${f}$args\n  }\n  $ret=$LASTEXITCODE\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $ret\n`:h+=`\n# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n  $input | & ${s} ${l} ${i} ${f}$args\n} else {\n  & ${s} ${l} ${i} ${f}$args\n}\n${t.nodePath?`$env:NODE_PATH=$env_node_path\n`:\"\"}exit $LASTEXITCODE\n`,h}function Nze(r,e){return e.fs_.chmod(r,493)}function lO(r){if(!r)return{win32:\"\",posix:\"\"};let e=typeof r==\"string\"?r.split(Ts.delimiter):Array.from(r),t={};for(let i=0;i<e.length;i++){let n=e[i].split(\"/\").join(\"\\\\\"),s=xle()?e[i].split(\"\\\\\").join(\"/\").replace(/^([^:\\\\/]*):/,(o,a)=>`/mnt/${a.toLowerCase()}`):e[i];t.win32=t.win32?`${t.win32};${n}`:n,t.posix=t.posix?`${t.posix}:${s}`:s,t[i]={win32:n,posix:s}}return t}Dle.exports=AO});var yO=w(($bt,Zle)=>{Zle.exports=J(\"stream\")});var tce=w((eQt,ece)=>{\"use strict\";function _le(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function e5e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_le(Object(t),!0).forEach(function(i){t5e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_le(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function t5e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function r5e(r,e){if(!(r instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function $le(r,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(r,i.key,i)}}function i5e(r,e,t){return e&&$le(r.prototype,e),t&&$le(r,t),r}var n5e=J(\"buffer\"),pQ=n5e.Buffer,s5e=J(\"util\"),wO=s5e.inspect,o5e=wO&&wO.custom||\"inspect\";function a5e(r,e,t){pQ.prototype.copy.call(r,e,t)}ece.exports=function(){function r(){r5e(this,r),this.head=null,this.tail=null,this.length=0}return i5e(r,[{key:\"push\",value:function(t){var i={data:t,next:null};this.length>0?this.tail.next=i:this.head=i,this.tail=i,++this.length}},{key:\"unshift\",value:function(t){var i={data:t,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var i=this.head,n=\"\"+i.data;i=i.next;)n+=t+i.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return pQ.alloc(0);for(var i=pQ.allocUnsafe(t>>>0),n=this.head,s=0;n;)a5e(n.data,i,s),s+=n.data.length,n=n.next;return i}},{key:\"consume\",value:function(t,i){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=i?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var i=this.head,n=1,s=i.data;for(t-=s.length;i=i.next;){var o=i.data,a=t>o.length?o.length:t;if(a===o.length?s+=o:s+=o.slice(0,t),t-=a,t===0){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,s}},{key:\"_getBuffer\",value:function(t){var i=pQ.allocUnsafe(t),n=this.head,s=1;for(n.data.copy(i),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(i,i.length-t,0,a),t-=a,t===0){a===o.length?(++s,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(a));break}++s}return this.length-=s,i}},{key:o5e,value:function(t,i){return wO(this,e5e({},i,{depth:0,customInspect:!1}))}}]),r}()});var bO=w((tQt,ice)=>{\"use strict\";function A5e(r,e){var t=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(r):r&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(BO,this,r)):process.nextTick(BO,this,r)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(r||null,function(s){!e&&s?t._writableState?t._writableState.errorEmitted?process.nextTick(dQ,t):(t._writableState.errorEmitted=!0,process.nextTick(rce,t,s)):process.nextTick(rce,t,s):e?(process.nextTick(dQ,t),e(s)):process.nextTick(dQ,t)}),this)}function rce(r,e){BO(r,e),dQ(r)}function dQ(r){r._writableState&&!r._writableState.emitClose||r._readableState&&!r._readableState.emitClose||r.emit(\"close\")}function l5e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function BO(r,e){r.emit(\"error\",e)}function c5e(r,e){var t=r._readableState,i=r._writableState;t&&t.autoDestroy||i&&i.autoDestroy?r.destroy(e):r.emit(\"error\",e)}ice.exports={destroy:A5e,undestroy:l5e,errorOrDestroy:c5e}});var Sl=w((rQt,oce)=>{\"use strict\";var sce={};function Ms(r,e,t){t||(t=Error);function i(s,o,a){return typeof e==\"string\"?e:e(s,o,a)}class n extends t{constructor(o,a,l){super(i(o,a,l))}}n.prototype.name=t.name,n.prototype.code=r,sce[r]=n}function nce(r,e){if(Array.isArray(r)){let t=r.length;return r=r.map(i=>String(i)),t>2?`one of ${e} ${r.slice(0,t-1).join(\", \")}, or `+r[t-1]:t===2?`one of ${e} ${r[0]} or ${r[1]}`:`of ${e} ${r[0]}`}else return`of ${e} ${String(r)}`}function u5e(r,e,t){return r.substr(!t||t<0?0:+t,e.length)===e}function g5e(r,e,t){return(t===void 0||t>r.length)&&(t=r.length),r.substring(t-e.length,t)===e}function f5e(r,e,t){return typeof t!=\"number\"&&(t=0),t+e.length>r.length?!1:r.indexOf(e,t)!==-1}Ms(\"ERR_INVALID_OPT_VALUE\",function(r,e){return'The value \"'+e+'\" is invalid for option \"'+r+'\"'},TypeError);Ms(\"ERR_INVALID_ARG_TYPE\",function(r,e,t){let i;typeof e==\"string\"&&u5e(e,\"not \")?(i=\"must not be\",e=e.replace(/^not /,\"\")):i=\"must be\";let n;if(g5e(r,\" argument\"))n=`The ${r} ${i} ${nce(e,\"type\")}`;else{let s=f5e(r,\".\")?\"property\":\"argument\";n=`The \"${r}\" ${s} ${i} ${nce(e,\"type\")}`}return n+=`. Received type ${typeof t}`,n},TypeError);Ms(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");Ms(\"ERR_METHOD_NOT_IMPLEMENTED\",function(r){return\"The \"+r+\" method is not implemented\"});Ms(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");Ms(\"ERR_STREAM_DESTROYED\",function(r){return\"Cannot call \"+r+\" after a stream was destroyed\"});Ms(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");Ms(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");Ms(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");Ms(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);Ms(\"ERR_UNKNOWN_ENCODING\",function(r){return\"Unknown encoding: \"+r},TypeError);Ms(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");oce.exports.codes=sce});var QO=w((iQt,ace)=>{\"use strict\";var h5e=Sl().codes.ERR_INVALID_OPT_VALUE;function p5e(r,e,t){return r.highWaterMark!=null?r.highWaterMark:e?r[t]:null}function d5e(r,e,t,i){var n=p5e(e,i,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var s=i?t:\"highWaterMark\";throw new h5e(s,n)}return Math.floor(n)}return r.objectMode?16:16*1024}ace.exports={getHighWaterMark:d5e}});var Ace=w((nQt,SO)=>{typeof Object.create==\"function\"?SO.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:SO.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var vl=w((sQt,xO)=>{try{if(vO=J(\"util\"),typeof vO.inherits!=\"function\")throw\"\";xO.exports=vO.inherits}catch{xO.exports=Ace()}var vO});var cce=w((oQt,lce)=>{lce.exports=J(\"util\").deprecate});var kO=w((aQt,dce)=>{\"use strict\";dce.exports=Lr;function gce(r){var e=this;this.next=null,this.entry=null,this.finish=function(){Y5e(e,r)}}var ap;Lr.WritableState=dE;var C5e={deprecate:cce()},fce=yO(),mQ=J(\"buffer\").Buffer,m5e=global.Uint8Array||function(){};function E5e(r){return mQ.from(r)}function I5e(r){return mQ.isBuffer(r)||r instanceof m5e}var DO=bO(),y5e=QO(),w5e=y5e.getHighWaterMark,xl=Sl().codes,B5e=xl.ERR_INVALID_ARG_TYPE,b5e=xl.ERR_METHOD_NOT_IMPLEMENTED,Q5e=xl.ERR_MULTIPLE_CALLBACK,S5e=xl.ERR_STREAM_CANNOT_PIPE,v5e=xl.ERR_STREAM_DESTROYED,x5e=xl.ERR_STREAM_NULL_VALUES,P5e=xl.ERR_STREAM_WRITE_AFTER_END,D5e=xl.ERR_UNKNOWN_ENCODING,Ap=DO.errorOrDestroy;vl()(Lr,fce);function k5e(){}function dE(r,e,t){ap=ap||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof ap),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.writableObjectMode),this.highWaterMark=w5e(this,r,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=r.decodeStrings===!1;this.decodeStrings=!i,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){O5e(e,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new gce(this)}dE.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t};(function(){try{Object.defineProperty(dE.prototype,\"buffer\",{get:C5e.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch{}})();var CQ;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(CQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Lr,Symbol.hasInstance,{value:function(e){return CQ.call(this,e)?!0:this!==Lr?!1:e&&e._writableState instanceof dE}})):CQ=function(e){return e instanceof this};function Lr(r){ap=ap||qu();var e=this instanceof ap;if(!e&&!CQ.call(Lr,this))return new Lr(r);this._writableState=new dE(r,this,e),this.writable=!0,r&&(typeof r.write==\"function\"&&(this._write=r.write),typeof r.writev==\"function\"&&(this._writev=r.writev),typeof r.destroy==\"function\"&&(this._destroy=r.destroy),typeof r.final==\"function\"&&(this._final=r.final)),fce.call(this)}Lr.prototype.pipe=function(){Ap(this,new S5e)};function R5e(r,e){var t=new P5e;Ap(r,t),process.nextTick(e,t)}function F5e(r,e,t,i){var n;return t===null?n=new x5e:typeof t!=\"string\"&&!e.objectMode&&(n=new B5e(\"chunk\",[\"string\",\"Buffer\"],t)),n?(Ap(r,n),process.nextTick(i,n),!1):!0}Lr.prototype.write=function(r,e,t){var i=this._writableState,n=!1,s=!i.objectMode&&I5e(r);return s&&!mQ.isBuffer(r)&&(r=E5e(r)),typeof e==\"function\"&&(t=e,e=null),s?e=\"buffer\":e||(e=i.defaultEncoding),typeof t!=\"function\"&&(t=k5e),i.ending?R5e(this,t):(s||F5e(this,i,r,t))&&(i.pendingcb++,n=T5e(this,i,s,r,e,t)),n};Lr.prototype.cork=function(){this._writableState.corked++};Lr.prototype.uncork=function(){var r=this._writableState;r.corked&&(r.corked--,!r.writing&&!r.corked&&!r.bufferProcessing&&r.bufferedRequest&&hce(this,r))};Lr.prototype.setDefaultEncoding=function(e){if(typeof e==\"string\"&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new D5e(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Lr.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function N5e(r,e,t){return!r.objectMode&&r.decodeStrings!==!1&&typeof e==\"string\"&&(e=mQ.from(e,t)),e}Object.defineProperty(Lr.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function T5e(r,e,t,i,n,s){if(!t){var o=N5e(e,i,n);i!==o&&(t=!0,n=\"buffer\",i=o)}var a=e.objectMode?1:i.length;e.length+=a;var l=e.length<e.highWaterMark;if(l||(e.needDrain=!0),e.writing||e.corked){var c=e.lastBufferedRequest;e.lastBufferedRequest={chunk:i,encoding:n,isBuf:t,callback:s,next:null},c?c.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else PO(r,e,!1,a,i,n,s);return l}function PO(r,e,t,i,n,s,o){e.writelen=i,e.writecb=o,e.writing=!0,e.sync=!0,e.destroyed?e.onwrite(new v5e(\"write\")):t?r._writev(n,e.onwrite):r._write(n,s,e.onwrite),e.sync=!1}function L5e(r,e,t,i,n){--e.pendingcb,t?(process.nextTick(n,i),process.nextTick(pE,r,e),r._writableState.errorEmitted=!0,Ap(r,i)):(n(i),r._writableState.errorEmitted=!0,Ap(r,i),pE(r,e))}function M5e(r){r.writing=!1,r.writecb=null,r.length-=r.writelen,r.writelen=0}function O5e(r,e){var t=r._writableState,i=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new Q5e;if(M5e(t),e)L5e(r,t,i,e,n);else{var s=pce(t)||r.destroyed;!s&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&hce(r,t),i?process.nextTick(uce,r,t,s,n):uce(r,t,s,n)}}function uce(r,e,t,i){t||K5e(r,e),e.pendingcb--,i(),pE(r,e)}function K5e(r,e){e.length===0&&e.needDrain&&(e.needDrain=!1,r.emit(\"drain\"))}function hce(r,e){e.bufferProcessing=!0;var t=e.bufferedRequest;if(r._writev&&t&&t.next){var i=e.bufferedRequestCount,n=new Array(i),s=e.corkedRequestsFree;s.entry=t;for(var o=0,a=!0;t;)n[o]=t,t.isBuf||(a=!1),t=t.next,o+=1;n.allBuffers=a,PO(r,e,!0,e.length,n,\"\",s.finish),e.pendingcb++,e.lastBufferedRequest=null,s.next?(e.corkedRequestsFree=s.next,s.next=null):e.corkedRequestsFree=new gce(e),e.bufferedRequestCount=0}else{for(;t;){var l=t.chunk,c=t.encoding,u=t.callback,g=e.objectMode?1:l.length;if(PO(r,e,!1,g,l,c,u),t=t.next,e.bufferedRequestCount--,e.writing)break}t===null&&(e.lastBufferedRequest=null)}e.bufferedRequest=t,e.bufferProcessing=!1}Lr.prototype._write=function(r,e,t){t(new b5e(\"_write()\"))};Lr.prototype._writev=null;Lr.prototype.end=function(r,e,t){var i=this._writableState;return typeof r==\"function\"?(t=r,r=null,e=null):typeof e==\"function\"&&(t=e,e=null),r!=null&&this.write(r,e),i.corked&&(i.corked=1,this.uncork()),i.ending||G5e(this,i,t),this};Object.defineProperty(Lr.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function pce(r){return r.ending&&r.length===0&&r.bufferedRequest===null&&!r.finished&&!r.writing}function U5e(r,e){r._final(function(t){e.pendingcb--,t&&Ap(r,t),e.prefinished=!0,r.emit(\"prefinish\"),pE(r,e)})}function H5e(r,e){!e.prefinished&&!e.finalCalled&&(typeof r._final==\"function\"&&!e.destroyed?(e.pendingcb++,e.finalCalled=!0,process.nextTick(U5e,r,e)):(e.prefinished=!0,r.emit(\"prefinish\")))}function pE(r,e){var t=pce(e);if(t&&(H5e(r,e),e.pendingcb===0&&(e.finished=!0,r.emit(\"finish\"),e.autoDestroy))){var i=r._readableState;(!i||i.autoDestroy&&i.endEmitted)&&r.destroy()}return t}function G5e(r,e,t){e.ending=!0,pE(r,e),t&&(e.finished?process.nextTick(t):r.once(\"finish\",t)),e.ended=!0,r.writable=!1}function Y5e(r,e,t){var i=r.entry;for(r.entry=null;i;){var n=i.callback;e.pendingcb--,n(t),i=i.next}e.corkedRequestsFree.next=r}Object.defineProperty(Lr.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){!this._writableState||(this._writableState.destroyed=e)}});Lr.prototype.destroy=DO.destroy;Lr.prototype._undestroy=DO.undestroy;Lr.prototype._destroy=function(r,e){e(r)}});var qu=w((AQt,mce)=>{\"use strict\";var j5e=Object.keys||function(r){var e=[];for(var t in r)e.push(t);return e};mce.exports=Aa;var Cce=NO(),FO=kO();vl()(Aa,Cce);for(RO=j5e(FO.prototype),EQ=0;EQ<RO.length;EQ++)IQ=RO[EQ],Aa.prototype[IQ]||(Aa.prototype[IQ]=FO.prototype[IQ]);var RO,IQ,EQ;function Aa(r){if(!(this instanceof Aa))return new Aa(r);Cce.call(this,r),FO.call(this,r),this.allowHalfOpen=!0,r&&(r.readable===!1&&(this.readable=!1),r.writable===!1&&(this.writable=!1),r.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",q5e)))}Object.defineProperty(Aa.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Aa.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Aa.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function q5e(){this._writableState.ended||process.nextTick(J5e,this)}function J5e(r){r.end()}Object.defineProperty(Aa.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}})});var yce=w((TO,Ice)=>{var yQ=J(\"buffer\"),fA=yQ.Buffer;function Ece(r,e){for(var t in r)e[t]=r[t]}fA.from&&fA.alloc&&fA.allocUnsafe&&fA.allocUnsafeSlow?Ice.exports=yQ:(Ece(yQ,TO),TO.Buffer=lp);function lp(r,e,t){return fA(r,e,t)}Ece(fA,lp);lp.from=function(r,e,t){if(typeof r==\"number\")throw new TypeError(\"Argument must not be a number\");return fA(r,e,t)};lp.alloc=function(r,e,t){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");var i=fA(r);return e!==void 0?typeof t==\"string\"?i.fill(e,t):i.fill(e):i.fill(0),i};lp.allocUnsafe=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return fA(r)};lp.allocUnsafeSlow=function(r){if(typeof r!=\"number\")throw new TypeError(\"Argument must be a number\");return yQ.SlowBuffer(r)}});var OO=w(Bce=>{\"use strict\";var MO=yce().Buffer,wce=MO.isEncoding||function(r){switch(r=\"\"+r,r&&r.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function W5e(r){if(!r)return\"utf8\";for(var e;;)switch(r){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return r;default:if(e)return;r=(\"\"+r).toLowerCase(),e=!0}}function z5e(r){var e=W5e(r);if(typeof e!=\"string\"&&(MO.isEncoding===wce||!wce(r)))throw new Error(\"Unknown encoding: \"+r);return e||r}Bce.StringDecoder=CE;function CE(r){this.encoding=z5e(r);var e;switch(this.encoding){case\"utf16le\":this.text=e6e,this.end=t6e,e=4;break;case\"utf8\":this.fillLast=Z5e,e=4;break;case\"base64\":this.text=r6e,this.end=i6e,e=3;break;default:this.write=n6e,this.end=s6e;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=MO.allocUnsafe(e)}CE.prototype.write=function(r){if(r.length===0)return\"\";var e,t;if(this.lastNeed){if(e=this.fillLast(r),e===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<r.length?e?e+this.text(r,t):this.text(r,t):e||\"\"};CE.prototype.end=$5e;CE.prototype.text=_5e;CE.prototype.fillLast=function(r){if(this.lastNeed<=r.length)return r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,this.lastTotal-this.lastNeed,0,r.length),this.lastNeed-=r.length};function LO(r){return r<=127?0:r>>5===6?2:r>>4===14?3:r>>3===30?4:r>>6===2?-1:-2}function V5e(r,e,t){var i=e.length-1;if(i<t)return 0;var n=LO(e[i]);return n>=0?(n>0&&(r.lastNeed=n-1),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(r.lastNeed=n-2),n):--i<t||n===-2?0:(n=LO(e[i]),n>=0?(n>0&&(n===2?n=0:r.lastNeed=n-3),n):0))}function X5e(r,e,t){if((e[0]&192)!==128)return r.lastNeed=0,\"\\uFFFD\";if(r.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return r.lastNeed=1,\"\\uFFFD\";if(r.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return r.lastNeed=2,\"\\uFFFD\"}}function Z5e(r){var e=this.lastTotal-this.lastNeed,t=X5e(this,r,e);if(t!==void 0)return t;if(this.lastNeed<=r.length)return r.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);r.copy(this.lastChar,e,0,r.length),this.lastNeed-=r.length}function _5e(r,e){var t=V5e(this,r,e);if(!this.lastNeed)return r.toString(\"utf8\",e);this.lastTotal=t;var i=r.length-(t-this.lastNeed);return r.copy(this.lastChar,0,i),r.toString(\"utf8\",e,i)}function $5e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+\"\\uFFFD\":e}function e6e(r,e){if((r.length-e)%2===0){var t=r.toString(\"utf16le\",e);if(t){var i=t.charCodeAt(t.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=r[r.length-1],r.toString(\"utf16le\",e,r.length-1)}function t6e(r){var e=r&&r.length?this.write(r):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,t)}return e}function r6e(r,e){var t=(r.length-e)%3;return t===0?r.toString(\"base64\",e):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=r[r.length-1]:(this.lastChar[0]=r[r.length-2],this.lastChar[1]=r[r.length-1]),r.toString(\"base64\",e,r.length-t))}function i6e(r){var e=r&&r.length?this.write(r):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function n6e(r){return r.toString(this.encoding)}function s6e(r){return r&&r.length?this.write(r):\"\"}});var wQ=w((cQt,Sce)=>{\"use strict\";var bce=Sl().codes.ERR_STREAM_PREMATURE_CLOSE;function o6e(r){var e=!1;return function(){if(!e){e=!0;for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];r.apply(this,i)}}}function a6e(){}function A6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Qce(r,e,t){if(typeof e==\"function\")return Qce(r,null,e);e||(e={}),t=o6e(t||a6e);var i=e.readable||e.readable!==!1&&r.readable,n=e.writable||e.writable!==!1&&r.writable,s=function(){r.writable||a()},o=r._writableState&&r._writableState.finished,a=function(){n=!1,o=!0,i||t.call(r)},l=r._readableState&&r._readableState.endEmitted,c=function(){i=!1,l=!0,n||t.call(r)},u=function(p){t.call(r,p)},g=function(){var p;if(i&&!l)return(!r._readableState||!r._readableState.ended)&&(p=new bce),t.call(r,p);if(n&&!o)return(!r._writableState||!r._writableState.ended)&&(p=new bce),t.call(r,p)},f=function(){r.req.on(\"finish\",a)};return A6e(r)?(r.on(\"complete\",a),r.on(\"abort\",g),r.req?f():r.on(\"request\",f)):n&&!r._writableState&&(r.on(\"end\",s),r.on(\"close\",s)),r.on(\"end\",c),r.on(\"finish\",a),e.error!==!1&&r.on(\"error\",u),r.on(\"close\",g),function(){r.removeListener(\"complete\",a),r.removeListener(\"abort\",g),r.removeListener(\"request\",f),r.req&&r.req.removeListener(\"finish\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",s),r.removeListener(\"finish\",a),r.removeListener(\"end\",c),r.removeListener(\"error\",u),r.removeListener(\"close\",g)}}Sce.exports=Qce});var xce=w((uQt,vce)=>{\"use strict\";var BQ;function Pl(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l6e=wQ(),Dl=Symbol(\"lastResolve\"),Ju=Symbol(\"lastReject\"),mE=Symbol(\"error\"),bQ=Symbol(\"ended\"),Wu=Symbol(\"lastPromise\"),KO=Symbol(\"handlePromise\"),zu=Symbol(\"stream\");function kl(r,e){return{value:r,done:e}}function c6e(r){var e=r[Dl];if(e!==null){var t=r[zu].read();t!==null&&(r[Wu]=null,r[Dl]=null,r[Ju]=null,e(kl(t,!1)))}}function u6e(r){process.nextTick(c6e,r)}function g6e(r,e){return function(t,i){r.then(function(){if(e[bQ]){t(kl(void 0,!0));return}e[KO](t,i)},i)}}var f6e=Object.getPrototypeOf(function(){}),h6e=Object.setPrototypeOf((BQ={get stream(){return this[zu]},next:function(){var e=this,t=this[mE];if(t!==null)return Promise.reject(t);if(this[bQ])return Promise.resolve(kl(void 0,!0));if(this[zu].destroyed)return new Promise(function(o,a){process.nextTick(function(){e[mE]?a(e[mE]):o(kl(void 0,!0))})});var i=this[Wu],n;if(i)n=new Promise(g6e(i,this));else{var s=this[zu].read();if(s!==null)return Promise.resolve(kl(s,!1));n=new Promise(this[KO])}return this[Wu]=n,n}},Pl(BQ,Symbol.asyncIterator,function(){return this}),Pl(BQ,\"return\",function(){var e=this;return new Promise(function(t,i){e[zu].destroy(null,function(n){if(n){i(n);return}t(kl(void 0,!0))})})}),BQ),f6e),p6e=function(e){var t,i=Object.create(h6e,(t={},Pl(t,zu,{value:e,writable:!0}),Pl(t,Dl,{value:null,writable:!0}),Pl(t,Ju,{value:null,writable:!0}),Pl(t,mE,{value:null,writable:!0}),Pl(t,bQ,{value:e._readableState.endEmitted,writable:!0}),Pl(t,KO,{value:function(s,o){var a=i[zu].read();a?(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(kl(a,!1))):(i[Dl]=s,i[Ju]=o)},writable:!0}),t));return i[Wu]=null,l6e(e,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var s=i[Ju];s!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,s(n)),i[mE]=n;return}var o=i[Dl];o!==null&&(i[Wu]=null,i[Dl]=null,i[Ju]=null,o(kl(void 0,!0))),i[bQ]=!0}),e.on(\"readable\",u6e.bind(null,i)),i};vce.exports=p6e});var Rce=w((gQt,kce)=>{\"use strict\";function Pce(r,e,t,i,n,s,o){try{var a=r[s](o),l=a.value}catch(c){t(c);return}a.done?e(l):Promise.resolve(l).then(i,n)}function d6e(r){return function(){var e=this,t=arguments;return new Promise(function(i,n){var s=r.apply(e,t);function o(l){Pce(s,i,n,o,a,\"next\",l)}function a(l){Pce(s,i,n,o,a,\"throw\",l)}o(void 0)})}}function Dce(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),t.push.apply(t,i)}return t}function C6e(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Dce(Object(t),!0).forEach(function(i){m6e(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):Dce(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function m6e(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var E6e=Sl().codes.ERR_INVALID_ARG_TYPE;function I6e(r,e,t){var i;if(e&&typeof e.next==\"function\")i=e;else if(e&&e[Symbol.asyncIterator])i=e[Symbol.asyncIterator]();else if(e&&e[Symbol.iterator])i=e[Symbol.iterator]();else throw new E6e(\"iterable\",[\"Iterable\"],e);var n=new r(C6e({objectMode:!0},t)),s=!1;n._read=function(){s||(s=!0,o())};function o(){return a.apply(this,arguments)}function a(){return a=d6e(function*(){try{var l=yield i.next(),c=l.value,u=l.done;u?n.push(null):n.push(yield c)?o():s=!1}catch(g){n.destroy(g)}}),a.apply(this,arguments)}return n}kce.exports=I6e});var NO=w((hQt,Gce)=>{\"use strict\";Gce.exports=Ut;var cp;Ut.ReadableState=Lce;var fQt=J(\"events\").EventEmitter,Tce=function(e,t){return e.listeners(t).length},IE=yO(),QQ=J(\"buffer\").Buffer,y6e=global.Uint8Array||function(){};function w6e(r){return QQ.from(r)}function B6e(r){return QQ.isBuffer(r)||r instanceof y6e}var UO=J(\"util\"),Dt;UO&&UO.debuglog?Dt=UO.debuglog(\"stream\"):Dt=function(){};var b6e=tce(),WO=bO(),Q6e=QO(),S6e=Q6e.getHighWaterMark,SQ=Sl().codes,v6e=SQ.ERR_INVALID_ARG_TYPE,x6e=SQ.ERR_STREAM_PUSH_AFTER_EOF,P6e=SQ.ERR_METHOD_NOT_IMPLEMENTED,D6e=SQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,up,HO,GO;vl()(Ut,IE);var EE=WO.errorOrDestroy,YO=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k6e(r,e,t){if(typeof r.prependListener==\"function\")return r.prependListener(e,t);!r._events||!r._events[e]?r.on(e,t):Array.isArray(r._events[e])?r._events[e].unshift(t):r._events[e]=[t,r._events[e]]}function Lce(r,e,t){cp=cp||qu(),r=r||{},typeof t!=\"boolean\"&&(t=e instanceof cp),this.objectMode=!!r.objectMode,t&&(this.objectMode=this.objectMode||!!r.readableObjectMode),this.highWaterMark=S6e(this,r,\"readableHighWaterMark\",t),this.buffer=new b6e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=r.emitClose!==!1,this.autoDestroy=!!r.autoDestroy,this.destroyed=!1,this.defaultEncoding=r.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,r.encoding&&(up||(up=OO().StringDecoder),this.decoder=new up(r.encoding),this.encoding=r.encoding)}function Ut(r){if(cp=cp||qu(),!(this instanceof Ut))return new Ut(r);var e=this instanceof cp;this._readableState=new Lce(r,this,e),this.readable=!0,r&&(typeof r.read==\"function\"&&(this._read=r.read),typeof r.destroy==\"function\"&&(this._destroy=r.destroy)),IE.call(this)}Object.defineProperty(Ut.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});Ut.prototype.destroy=WO.destroy;Ut.prototype._undestroy=WO.undestroy;Ut.prototype._destroy=function(r,e){e(r)};Ut.prototype.push=function(r,e){var t=this._readableState,i;return t.objectMode?i=!0:typeof r==\"string\"&&(e=e||t.defaultEncoding,e!==t.encoding&&(r=QQ.from(r,e),e=\"\"),i=!0),Mce(this,r,e,!1,i)};Ut.prototype.unshift=function(r){return Mce(this,r,null,!0,!1)};function Mce(r,e,t,i,n){Dt(\"readableAddChunk\",e);var s=r._readableState;if(e===null)s.reading=!1,N6e(r,s);else{var o;if(n||(o=R6e(s,e)),o)EE(r,o);else if(s.objectMode||e&&e.length>0)if(typeof e!=\"string\"&&!s.objectMode&&Object.getPrototypeOf(e)!==QQ.prototype&&(e=w6e(e)),i)s.endEmitted?EE(r,new D6e):jO(r,s,e,!0);else if(s.ended)EE(r,new x6e);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!t?(e=s.decoder.write(e),s.objectMode||e.length!==0?jO(r,s,e,!1):JO(r,s)):jO(r,s,e,!1)}else i||(s.reading=!1,JO(r,s))}return!s.ended&&(s.length<s.highWaterMark||s.length===0)}function jO(r,e,t,i){e.flowing&&e.length===0&&!e.sync?(e.awaitDrain=0,r.emit(\"data\",t)):(e.length+=e.objectMode?1:t.length,i?e.buffer.unshift(t):e.buffer.push(t),e.needReadable&&vQ(r)),JO(r,e)}function R6e(r,e){var t;return!B6e(e)&&typeof e!=\"string\"&&e!==void 0&&!r.objectMode&&(t=new v6e(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e)),t}Ut.prototype.isPaused=function(){return this._readableState.flowing===!1};Ut.prototype.setEncoding=function(r){up||(up=OO().StringDecoder);var e=new up(r);this._readableState.decoder=e,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,i=\"\";t!==null;)i+=e.write(t.data),t=t.next;return this._readableState.buffer.clear(),i!==\"\"&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};var Fce=1073741824;function F6e(r){return r>=Fce?r=Fce:(r--,r|=r>>>1,r|=r>>>2,r|=r>>>4,r|=r>>>8,r|=r>>>16,r++),r}function Nce(r,e){return r<=0||e.length===0&&e.ended?0:e.objectMode?1:r!==r?e.flowing&&e.length?e.buffer.head.data.length:e.length:(r>e.highWaterMark&&(e.highWaterMark=F6e(r)),r<=e.length?r:e.ended?e.length:(e.needReadable=!0,0))}Ut.prototype.read=function(r){Dt(\"read\",r),r=parseInt(r,10);var e=this._readableState,t=r;if(r!==0&&(e.emittedReadable=!1),r===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return Dt(\"read: emitReadable\",e.length,e.ended),e.length===0&&e.ended?qO(this):vQ(this),null;if(r=Nce(r,e),r===0&&e.ended)return e.length===0&&qO(this),null;var i=e.needReadable;Dt(\"need readable\",i),(e.length===0||e.length-r<e.highWaterMark)&&(i=!0,Dt(\"length less than watermark\",i)),e.ended||e.reading?(i=!1,Dt(\"reading or ended\",i)):i&&(Dt(\"do read\"),e.reading=!0,e.sync=!0,e.length===0&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(r=Nce(t,e)));var n;return r>0?n=Uce(r,e):n=null,n===null?(e.needReadable=e.length<=e.highWaterMark,r=0):(e.length-=r,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),t!==r&&e.ended&&qO(this)),n!==null&&this.emit(\"data\",n),n};function N6e(r,e){if(Dt(\"onEofChunk\"),!e.ended){if(e.decoder){var t=e.decoder.end();t&&t.length&&(e.buffer.push(t),e.length+=e.objectMode?1:t.length)}e.ended=!0,e.sync?vQ(r):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,Oce(r)))}}function vQ(r){var e=r._readableState;Dt(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(Dt(\"emitReadable\",e.flowing),e.emittedReadable=!0,process.nextTick(Oce,r))}function Oce(r){var e=r._readableState;Dt(\"emitReadable_\",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(r.emit(\"readable\"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,zO(r)}function JO(r,e){e.readingMore||(e.readingMore=!0,process.nextTick(T6e,r,e))}function T6e(r,e){for(;!e.reading&&!e.ended&&(e.length<e.highWaterMark||e.flowing&&e.length===0);){var t=e.length;if(Dt(\"maybeReadMore read 0\"),r.read(0),t===e.length)break}e.readingMore=!1}Ut.prototype._read=function(r){EE(this,new P6e(\"_read()\"))};Ut.prototype.pipe=function(r,e){var t=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=r;break;case 1:i.pipes=[i.pipes,r];break;default:i.pipes.push(r);break}i.pipesCount+=1,Dt(\"pipe count=%d opts=%j\",i.pipesCount,e);var n=(!e||e.end!==!1)&&r!==process.stdout&&r!==process.stderr,s=n?a:C;i.endEmitted?process.nextTick(s):t.once(\"end\",s),r.on(\"unpipe\",o);function o(y,B){Dt(\"onunpipe\"),y===t&&B&&B.hasUnpiped===!1&&(B.hasUnpiped=!0,u())}function a(){Dt(\"onend\"),r.end()}var l=L6e(t);r.on(\"drain\",l);var c=!1;function u(){Dt(\"cleanup\"),r.removeListener(\"close\",h),r.removeListener(\"finish\",p),r.removeListener(\"drain\",l),r.removeListener(\"error\",f),r.removeListener(\"unpipe\",o),t.removeListener(\"end\",a),t.removeListener(\"end\",C),t.removeListener(\"data\",g),c=!0,i.awaitDrain&&(!r._writableState||r._writableState.needDrain)&&l()}t.on(\"data\",g);function g(y){Dt(\"ondata\");var B=r.write(y);Dt(\"dest.write\",B),B===!1&&((i.pipesCount===1&&i.pipes===r||i.pipesCount>1&&Hce(i.pipes,r)!==-1)&&!c&&(Dt(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),t.pause())}function f(y){Dt(\"onerror\",y),C(),r.removeListener(\"error\",f),Tce(r,\"error\")===0&&EE(r,y)}k6e(r,\"error\",f);function h(){r.removeListener(\"finish\",p),C()}r.once(\"close\",h);function p(){Dt(\"onfinish\"),r.removeListener(\"close\",h),C()}r.once(\"finish\",p);function C(){Dt(\"unpipe\"),t.unpipe(r)}return r.emit(\"pipe\",t),i.flowing||(Dt(\"pipe resume\"),t.resume()),r};function L6e(r){return function(){var t=r._readableState;Dt(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Tce(r,\"data\")&&(t.flowing=!0,zO(r))}}Ut.prototype.unpipe=function(r){var e=this._readableState,t={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return r&&r!==e.pipes?this:(r||(r=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,r&&r.emit(\"unpipe\",this,t),this);if(!r){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s<n;s++)i[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Hce(e.pipes,r);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,e.pipesCount===1&&(e.pipes=e.pipes[0]),r.emit(\"unpipe\",this,t),this)};Ut.prototype.on=function(r,e){var t=IE.prototype.on.call(this,r,e),i=this._readableState;return r===\"data\"?(i.readableListening=this.listenerCount(\"readable\")>0,i.flowing!==!1&&this.resume()):r===\"readable\"&&!i.endEmitted&&!i.readableListening&&(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,Dt(\"on readable\",i.length,i.reading),i.length?vQ(this):i.reading||process.nextTick(M6e,this)),t};Ut.prototype.addListener=Ut.prototype.on;Ut.prototype.removeListener=function(r,e){var t=IE.prototype.removeListener.call(this,r,e);return r===\"readable\"&&process.nextTick(Kce,this),t};Ut.prototype.removeAllListeners=function(r){var e=IE.prototype.removeAllListeners.apply(this,arguments);return(r===\"readable\"||r===void 0)&&process.nextTick(Kce,this),e};function Kce(r){var e=r._readableState;e.readableListening=r.listenerCount(\"readable\")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:r.listenerCount(\"data\")>0&&r.resume()}function M6e(r){Dt(\"readable nexttick read 0\"),r.read(0)}Ut.prototype.resume=function(){var r=this._readableState;return r.flowing||(Dt(\"resume\"),r.flowing=!r.readableListening,O6e(this,r)),r.paused=!1,this};function O6e(r,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(K6e,r,e))}function K6e(r,e){Dt(\"resume\",e.reading),e.reading||r.read(0),e.resumeScheduled=!1,r.emit(\"resume\"),zO(r),e.flowing&&!e.reading&&r.read(0)}Ut.prototype.pause=function(){return Dt(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(Dt(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function zO(r){var e=r._readableState;for(Dt(\"flow\",e.flowing);e.flowing&&r.read()!==null;);}Ut.prototype.wrap=function(r){var e=this,t=this._readableState,i=!1;r.on(\"end\",function(){if(Dt(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&e.push(o)}e.push(null)}),r.on(\"data\",function(o){if(Dt(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var a=e.push(o);a||(i=!0,r.pause())}});for(var n in r)this[n]===void 0&&typeof r[n]==\"function\"&&(this[n]=function(a){return function(){return r[a].apply(r,arguments)}}(n));for(var s=0;s<YO.length;s++)r.on(YO[s],this.emit.bind(this,YO[s]));return this._read=function(o){Dt(\"wrapped _read\",o),i&&(i=!1,r.resume())},this};typeof Symbol==\"function\"&&(Ut.prototype[Symbol.asyncIterator]=function(){return HO===void 0&&(HO=xce()),HO(this)});Object.defineProperty(Ut.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Ut.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Ut.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}});Ut._fromList=Uce;Object.defineProperty(Ut.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Uce(r,e){if(e.length===0)return null;var t;return e.objectMode?t=e.buffer.shift():!r||r>=e.length?(e.decoder?t=e.buffer.join(\"\"):e.buffer.length===1?t=e.buffer.first():t=e.buffer.concat(e.length),e.buffer.clear()):t=e.buffer.consume(r,e.decoder),t}function qO(r){var e=r._readableState;Dt(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(U6e,e,r))}function U6e(r,e){if(Dt(\"endReadableNT\",r.endEmitted,r.length),!r.endEmitted&&r.length===0&&(r.endEmitted=!0,e.readable=!1,e.emit(\"end\"),r.autoDestroy)){var t=e._writableState;(!t||t.autoDestroy&&t.finished)&&e.destroy()}}typeof Symbol==\"function\"&&(Ut.from=function(r,e){return GO===void 0&&(GO=Rce()),GO(Ut,r,e)});function Hce(r,e){for(var t=0,i=r.length;t<i;t++)if(r[t]===e)return t;return-1}});var VO=w((pQt,jce)=>{\"use strict\";jce.exports=hA;var xQ=Sl().codes,H6e=xQ.ERR_METHOD_NOT_IMPLEMENTED,G6e=xQ.ERR_MULTIPLE_CALLBACK,Y6e=xQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,j6e=xQ.ERR_TRANSFORM_WITH_LENGTH_0,PQ=qu();vl()(hA,PQ);function q6e(r,e){var t=this._transformState;t.transforming=!1;var i=t.writecb;if(i===null)return this.emit(\"error\",new G6e);t.writechunk=null,t.writecb=null,e!=null&&this.push(e),i(r);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function hA(r){if(!(this instanceof hA))return new hA(r);PQ.call(this,r),this._transformState={afterTransform:q6e.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,r&&(typeof r.transform==\"function\"&&(this._transform=r.transform),typeof r.flush==\"function\"&&(this._flush=r.flush)),this.on(\"prefinish\",J6e)}function J6e(){var r=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(e,t){Yce(r,e,t)}):Yce(this,null,null)}hA.prototype.push=function(r,e){return this._transformState.needTransform=!1,PQ.prototype.push.call(this,r,e)};hA.prototype._transform=function(r,e,t){t(new H6e(\"_transform()\"))};hA.prototype._write=function(r,e,t){var i=this._transformState;if(i.writecb=t,i.writechunk=r,i.writeencoding=e,!i.transforming){var n=this._readableState;(i.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};hA.prototype._read=function(r){var e=this._transformState;e.writechunk!==null&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0};hA.prototype._destroy=function(r,e){PQ.prototype._destroy.call(this,r,function(t){e(t)})};function Yce(r,e,t){if(e)return r.emit(\"error\",e);if(t!=null&&r.push(t),r._writableState.length)throw new j6e;if(r._transformState.transforming)throw new Y6e;return r.push(null)}});var Wce=w((dQt,Jce)=>{\"use strict\";Jce.exports=yE;var qce=VO();vl()(yE,qce);function yE(r){if(!(this instanceof yE))return new yE(r);qce.call(this,r)}yE.prototype._transform=function(r,e,t){t(null,r)}});var _ce=w((CQt,Zce)=>{\"use strict\";var XO;function W6e(r){var e=!1;return function(){e||(e=!0,r.apply(void 0,arguments))}}var Xce=Sl().codes,z6e=Xce.ERR_MISSING_ARGS,V6e=Xce.ERR_STREAM_DESTROYED;function zce(r){if(r)throw r}function X6e(r){return r.setHeader&&typeof r.abort==\"function\"}function Z6e(r,e,t,i){i=W6e(i);var n=!1;r.on(\"close\",function(){n=!0}),XO===void 0&&(XO=wQ()),XO(r,{readable:e,writable:t},function(o){if(o)return i(o);n=!0,i()});var s=!1;return function(o){if(!n&&!s){if(s=!0,X6e(r))return r.abort();if(typeof r.destroy==\"function\")return r.destroy();i(o||new V6e(\"pipe\"))}}}function Vce(r){r()}function _6e(r,e){return r.pipe(e)}function $6e(r){return!r.length||typeof r[r.length-1]!=\"function\"?zce:r.pop()}function eVe(){for(var r=arguments.length,e=new Array(r),t=0;t<r;t++)e[t]=arguments[t];var i=$6e(e);if(Array.isArray(e[0])&&(e=e[0]),e.length<2)throw new z6e(\"streams\");var n,s=e.map(function(o,a){var l=a<e.length-1,c=a>0;return Z6e(o,l,c,function(u){n||(n=u),u&&s.forEach(Vce),!l&&(s.forEach(Vce),i(n))})});return e.reduce(_6e)}Zce.exports=eVe});var gp=w((Os,BE)=>{var wE=J(\"stream\");process.env.READABLE_STREAM===\"disable\"&&wE?(BE.exports=wE.Readable,Object.assign(BE.exports,wE),BE.exports.Stream=wE):(Os=BE.exports=NO(),Os.Stream=wE||Os,Os.Readable=Os,Os.Writable=kO(),Os.Duplex=qu(),Os.Transform=VO(),Os.PassThrough=Wce(),Os.finished=wQ(),Os.pipeline=_ce())});var tue=w((mQt,eue)=>{\"use strict\";var{Buffer:Io}=J(\"buffer\"),$ce=Symbol.for(\"BufferList\");function fr(r){if(!(this instanceof fr))return new fr(r);fr._init.call(this,r)}fr._init=function(e){Object.defineProperty(this,$ce,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fr.prototype._new=function(e){return new fr(e)};fr.prototype._offset=function(e){if(e===0)return[0,0];let t=0;for(let i=0;i<this._bufs.length;i++){let n=t+this._bufs[i].length;if(e<n||i===this._bufs.length-1)return[i,e-t];t=n}};fr.prototype._reverseOffset=function(r){let e=r[0],t=r[1];for(let i=0;i<e;i++)t+=this._bufs[i].length;return t};fr.prototype.get=function(e){if(e>this.length||e<0)return;let t=this._offset(e);return this._bufs[t[0]][t[1]]};fr.prototype.slice=function(e,t){return typeof e==\"number\"&&e<0&&(e+=this.length),typeof t==\"number\"&&t<0&&(t+=this.length),this.copy(null,0,e,t)};fr.prototype.copy=function(e,t,i,n){if((typeof i!=\"number\"||i<0)&&(i=0),(typeof n!=\"number\"||n>this.length)&&(n=this.length),i>=this.length||n<=0)return e||Io.alloc(0);let s=!!e,o=this._offset(i),a=n-i,l=a,c=s&&t||0,u=o[1];if(i===0&&n===this.length){if(!s)return this._bufs.length===1?this._bufs[0]:Io.concat(this._bufs,this.length);for(let g=0;g<this._bufs.length;g++)this._bufs[g].copy(e,c),c+=this._bufs[g].length;return e}if(l<=this._bufs[o[0]].length-u)return s?this._bufs[o[0]].copy(e,t,u,u+l):this._bufs[o[0]].slice(u,u+l);s||(e=Io.allocUnsafe(a));for(let g=o[0];g<this._bufs.length;g++){let f=this._bufs[g].length-u;if(l>f)this._bufs[g].copy(e,c,u),c+=f;else{this._bufs[g].copy(e,c,u,u+l),c+=f;break}l-=f,u&&(u=0)}return e.length>c?e.slice(0,c):e};fr.prototype.shallowSlice=function(e,t){if(e=e||0,t=typeof t!=\"number\"?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return this._new();let i=this._offset(e),n=this._offset(t),s=this._bufs.slice(i[0],n[0]+1);return n[1]===0?s.pop():s[s.length-1]=s[s.length-1].slice(0,n[1]),i[1]!==0&&(s[0]=s[0].slice(i[1])),this._new(s)};fr.prototype.toString=function(e,t,i){return this.slice(t,i).toString(e)};fr.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};fr.prototype.duplicate=function(){let e=this._new();for(let t=0;t<this._bufs.length;t++)e.append(this._bufs[t]);return e};fr.prototype.append=function(e){if(e==null)return this;if(e.buffer)this._appendBuffer(Io.from(e.buffer,e.byteOffset,e.byteLength));else if(Array.isArray(e))for(let t=0;t<e.length;t++)this.append(e[t]);else if(this._isBufferList(e))for(let t=0;t<e._bufs.length;t++)this.append(e._bufs[t]);else typeof e==\"number\"&&(e=e.toString()),this._appendBuffer(Io.from(e));return this};fr.prototype._appendBuffer=function(e){this._bufs.push(e),this.length+=e.length};fr.prototype.indexOf=function(r,e,t){if(t===void 0&&typeof e==\"string\"&&(t=e,e=void 0),typeof r==\"function\"||Array.isArray(r))throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.');if(typeof r==\"number\"?r=Io.from([r]):typeof r==\"string\"?r=Io.from(r,t):this._isBufferList(r)?r=r.slice():Array.isArray(r.buffer)?r=Io.from(r.buffer,r.byteOffset,r.byteLength):Io.isBuffer(r)||(r=Io.from(r)),e=Number(e||0),isNaN(e)&&(e=0),e<0&&(e=this.length+e),e<0&&(e=0),r.length===0)return e>this.length?this.length:e;let i=this._offset(e),n=i[0],s=i[1];for(;n<this._bufs.length;n++){let o=this._bufs[n];for(;s<o.length;)if(o.length-s>=r.length){let l=o.indexOf(r,s);if(l!==-1)return this._reverseOffset([n,l]);s=o.length-r.length+1}else{let l=this._reverseOffset([n,s]);if(this._match(l,r))return l;s++}s=0}return-1};fr.prototype._match=function(r,e){if(this.length-r<e.length)return!1;for(let t=0;t<e.length;t++)if(this.get(r+t)!==e[t])return!1;return!0};(function(){let r={readDoubleBE:8,readDoubleLE:8,readFloatBE:4,readFloatLE:4,readInt32BE:4,readInt32LE:4,readUInt32BE:4,readUInt32LE:4,readInt16BE:2,readInt16LE:2,readUInt16BE:2,readUInt16LE:2,readInt8:1,readUInt8:1,readIntBE:null,readIntLE:null,readUIntBE:null,readUIntLE:null};for(let e in r)(function(t){r[t]===null?fr.prototype[t]=function(i,n){return this.slice(i,i+n)[t](0,n)}:fr.prototype[t]=function(i=0){return this.slice(i,i+r[t])[t](0)}})(e)})();fr.prototype._isBufferList=function(e){return e instanceof fr||fr.isBufferList(e)};fr.isBufferList=function(e){return e!=null&&e[$ce]};eue.exports=fr});var rue=w((EQt,DQ)=>{\"use strict\";var ZO=gp().Duplex,tVe=vl(),bE=tue();function Wi(r){if(!(this instanceof Wi))return new Wi(r);if(typeof r==\"function\"){this._callback=r;let e=function(i){this._callback&&(this._callback(i),this._callback=null)}.bind(this);this.on(\"pipe\",function(i){i.on(\"error\",e)}),this.on(\"unpipe\",function(i){i.removeListener(\"error\",e)}),r=null}bE._init.call(this,r),ZO.call(this)}tVe(Wi,ZO);Object.assign(Wi.prototype,bE.prototype);Wi.prototype._new=function(e){return new Wi(e)};Wi.prototype._write=function(e,t,i){this._appendBuffer(e),typeof i==\"function\"&&i()};Wi.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Wi.prototype.end=function(e){ZO.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Wi.prototype._destroy=function(e,t){this._bufs.length=0,this.length=0,t(e)};Wi.prototype._isBufferList=function(e){return e instanceof Wi||e instanceof bE||Wi.isBufferList(e)};Wi.isBufferList=bE.isBufferList;DQ.exports=Wi;DQ.exports.BufferListStream=Wi;DQ.exports.BufferList=bE});var e1=w(hp=>{var rVe=Buffer.alloc,iVe=\"0000000000000000000\",nVe=\"7777777777777777777\",iue=\"0\".charCodeAt(0),nue=Buffer.from(\"ustar\\0\",\"binary\"),sVe=Buffer.from(\"00\",\"binary\"),oVe=Buffer.from(\"ustar \",\"binary\"),aVe=Buffer.from(\" \\0\",\"binary\"),AVe=parseInt(\"7777\",8),QE=257,$O=263,lVe=function(r,e,t){return typeof r!=\"number\"?t:(r=~~r,r>=e?e:r>=0||(r+=e,r>=0)?r:0)},cVe=function(r){switch(r){case 0:return\"file\";case 1:return\"link\";case 2:return\"symlink\";case 3:return\"character-device\";case 4:return\"block-device\";case 5:return\"directory\";case 6:return\"fifo\";case 7:return\"contiguous-file\";case 72:return\"pax-header\";case 55:return\"pax-global-header\";case 27:return\"gnu-long-link-path\";case 28:case 30:return\"gnu-long-path\"}return null},uVe=function(r){switch(r){case\"file\":return 0;case\"link\":return 1;case\"symlink\":return 2;case\"character-device\":return 3;case\"block-device\":return 4;case\"directory\":return 5;case\"fifo\":return 6;case\"contiguous-file\":return 7;case\"pax-header\":return 72}return 0},sue=function(r,e,t,i){for(;t<i;t++)if(r[t]===e)return t;return i},oue=function(r){for(var e=256,t=0;t<148;t++)e+=r[t];for(var i=156;i<512;i++)e+=r[i];return e},Rl=function(r,e){return r=r.toString(8),r.length>e?nVe.slice(0,e)+\" \":iVe.slice(0,e-r.length)+r+\" \"};function gVe(r){var e;if(r[0]===128)e=!0;else if(r[0]===255)e=!1;else return null;for(var t=[],i=r.length-1;i>0;i--){var n=r[i];e?t.push(n):t.push(255-n)}var s=0,o=t.length;for(i=0;i<o;i++)s+=t[i]*Math.pow(256,i);return e?s:-1*s}var Fl=function(r,e,t){if(r=r.slice(e,e+t),e=0,r[e]&128)return gVe(r);for(;e<r.length&&r[e]===32;)e++;for(var i=lVe(sue(r,32,e,r.length),r.length,r.length);e<i&&r[e]===0;)e++;return i===e?0:parseInt(r.slice(e,i).toString(),8)},fp=function(r,e,t,i){return r.slice(e,sue(r,0,e,e+t)).toString(i)},_O=function(r){var e=Buffer.byteLength(r),t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,e+t+r};hp.decodeLongPath=function(r,e){return fp(r,0,r.length,e)};hp.encodePax=function(r){var e=\"\";r.name&&(e+=_O(\" path=\"+r.name+`\n`)),r.linkname&&(e+=_O(\" linkpath=\"+r.linkname+`\n`));var t=r.pax;if(t)for(var i in t)e+=_O(\" \"+i+\"=\"+t[i]+`\n`);return Buffer.from(e)};hp.decodePax=function(r){for(var e={};r.length;){for(var t=0;t<r.length&&r[t]!==32;)t++;var i=parseInt(r.slice(0,t).toString(),10);if(!i)return e;var n=r.slice(t+1,i-1).toString(),s=n.indexOf(\"=\");if(s===-1)return e;e[n.slice(0,s)]=n.slice(s+1),r=r.slice(i)}return e};hp.encode=function(r){var e=rVe(512),t=r.name,i=\"\";if(r.typeflag===5&&t[t.length-1]!==\"/\"&&(t+=\"/\"),Buffer.byteLength(t)!==t.length)return null;for(;Buffer.byteLength(t)>100;){var n=t.indexOf(\"/\");if(n===-1)return null;i+=i?\"/\"+t.slice(0,n):t.slice(0,n),t=t.slice(n+1)}return Buffer.byteLength(t)>100||Buffer.byteLength(i)>155||r.linkname&&Buffer.byteLength(r.linkname)>100?null:(e.write(t),e.write(Rl(r.mode&AVe,6),100),e.write(Rl(r.uid,6),108),e.write(Rl(r.gid,6),116),e.write(Rl(r.size,11),124),e.write(Rl(r.mtime.getTime()/1e3|0,11),136),e[156]=iue+uVe(r.type),r.linkname&&e.write(r.linkname,157),nue.copy(e,QE),sVe.copy(e,$O),r.uname&&e.write(r.uname,265),r.gname&&e.write(r.gname,297),e.write(Rl(r.devmajor||0,6),329),e.write(Rl(r.devminor||0,6),337),i&&e.write(i,345),e.write(Rl(oue(e),6),148),e)};hp.decode=function(r,e,t){var i=r[156]===0?0:r[156]-iue,n=fp(r,0,100,e),s=Fl(r,100,8),o=Fl(r,108,8),a=Fl(r,116,8),l=Fl(r,124,12),c=Fl(r,136,12),u=cVe(i),g=r[157]===0?null:fp(r,157,100,e),f=fp(r,265,32),h=fp(r,297,32),p=Fl(r,329,8),C=Fl(r,337,8),y=oue(r);if(y===8*32)return null;if(y!==Fl(r,148,8))throw new Error(\"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?\");if(nue.compare(r,QE,QE+6)===0)r[345]&&(n=fp(r,345,155,e)+\"/\"+n);else if(!(oVe.compare(r,QE,QE+6)===0&&aVe.compare(r,$O,$O+2)===0)){if(!t)throw new Error(\"Invalid tar header: unknown format.\")}return i===0&&n&&n[n.length-1]===\"/\"&&(i=5),{name:n,mode:s,uid:o,gid:a,size:l,mtime:new Date(1e3*c),type:u,linkname:g,uname:f,gname:h,devmajor:p,devminor:C}}});var fue=w((yQt,gue)=>{var Aue=J(\"util\"),fVe=rue(),SE=e1(),lue=gp().Writable,cue=gp().PassThrough,uue=function(){},aue=function(r){return r&=511,r&&512-r},hVe=function(r,e){var t=new kQ(r,e);return t.end(),t},pVe=function(r,e){return e.path&&(r.name=e.path),e.linkpath&&(r.linkname=e.linkpath),e.size&&(r.size=parseInt(e.size,10)),r.pax=e,r},kQ=function(r,e){this._parent=r,this.offset=e,cue.call(this,{autoDestroy:!1})};Aue.inherits(kQ,cue);kQ.prototype.destroy=function(r){this._parent.destroy(r)};var pA=function(r){if(!(this instanceof pA))return new pA(r);lue.call(this,r),r=r||{},this._offset=0,this._buffer=fVe(),this._missing=0,this._partial=!1,this._onparse=uue,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,t=e._buffer,i=function(){e._continue()},n=function(f){if(e._locked=!1,f)return e.destroy(f);e._stream||i()},s=function(){e._stream=null;var f=aue(e._header.size);f?e._parse(f,o):e._parse(512,g),e._locked||i()},o=function(){e._buffer.consume(aue(e._header.size)),e._parse(512,g),i()},a=function(){var f=e._header.size;e._paxGlobal=SE.decodePax(t.slice(0,f)),t.consume(f),s()},l=function(){var f=e._header.size;e._pax=SE.decodePax(t.slice(0,f)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),t.consume(f),s()},c=function(){var f=e._header.size;this._gnuLongPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},u=function(){var f=e._header.size;this._gnuLongLinkPath=SE.decodeLongPath(t.slice(0,f),r.filenameEncoding),t.consume(f),s()},g=function(){var f=e._offset,h;try{h=e._header=SE.decode(t.slice(0,512),r.filenameEncoding,r.allowUnknownFormat)}catch(p){e.emit(\"error\",p)}if(t.consume(512),!h){e._parse(512,g),i();return}if(h.type===\"gnu-long-path\"){e._parse(h.size,c),i();return}if(h.type===\"gnu-long-link-path\"){e._parse(h.size,u),i();return}if(h.type===\"pax-global-header\"){e._parse(h.size,a),i();return}if(h.type===\"pax-header\"){e._parse(h.size,l),i();return}if(e._gnuLongPath&&(h.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(h.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=h=pVe(h,e._pax),e._pax=null),e._locked=!0,!h.size||h.type===\"directory\"){e._parse(512,g),e.emit(\"entry\",h,hVe(e,f),n);return}e._stream=new kQ(e,f),e.emit(\"entry\",h,e._stream,n),e._parse(h.size,s),i()};this._onheader=g,this._parse(512,g)};Aue.inherits(pA,lue);pA.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.emit(\"close\"))};pA.prototype._parse=function(r,e){this._destroyed||(this._offset+=r,this._missing=r,e===this._onheader&&(this._partial=!1),this._onparse=e)};pA.prototype._continue=function(){if(!this._destroyed){var r=this._cb;this._cb=uue,this._overflow?this._write(this._overflow,void 0,r):r()}};pA.prototype._write=function(r,e,t){if(!this._destroyed){var i=this._stream,n=this._buffer,s=this._missing;if(r.length&&(this._partial=!0),r.length<s)return this._missing-=r.length,this._overflow=null,i?i.write(r,t):(n.append(r),t());this._cb=t,this._missing=0;var o=null;r.length>s&&(o=r.slice(s),r=r.slice(0,s)),i?i.end(r):n.append(r),this._overflow=o,this._onparse()}};pA.prototype._final=function(r){if(this._partial)return this.destroy(new Error(\"Unexpected end of data\"));r()};gue.exports=pA});var pue=w((wQt,hue)=>{hue.exports=J(\"fs\").constants||J(\"constants\")});var Iue=w((BQt,Eue)=>{var pp=pue(),due=Pk(),FQ=vl(),dVe=Buffer.alloc,Cue=gp().Readable,dp=gp().Writable,CVe=J(\"string_decoder\").StringDecoder,RQ=e1(),mVe=parseInt(\"755\",8),EVe=parseInt(\"644\",8),mue=dVe(1024),r1=function(){},t1=function(r,e){e&=511,e&&r.push(mue.slice(0,512-e))};function IVe(r){switch(r&pp.S_IFMT){case pp.S_IFBLK:return\"block-device\";case pp.S_IFCHR:return\"character-device\";case pp.S_IFDIR:return\"directory\";case pp.S_IFIFO:return\"fifo\";case pp.S_IFLNK:return\"symlink\"}return\"file\"}var NQ=function(r){dp.call(this),this.written=0,this._to=r,this._destroyed=!1};FQ(NQ,dp);NQ.prototype._write=function(r,e,t){if(this.written+=r.length,this._to.push(r))return t();this._to._drain=t};NQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var TQ=function(){dp.call(this),this.linkname=\"\",this._decoder=new CVe(\"utf-8\"),this._destroyed=!1};FQ(TQ,dp);TQ.prototype._write=function(r,e,t){this.linkname+=this._decoder.write(r),t()};TQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var vE=function(){dp.call(this),this._destroyed=!1};FQ(vE,dp);vE.prototype._write=function(r,e,t){t(new Error(\"No body allowed for this entry\"))};vE.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit(\"close\"))};var la=function(r){if(!(this instanceof la))return new la(r);Cue.call(this,r),this._drain=r1,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};FQ(la,Cue);la.prototype.entry=function(r,e,t){if(this._stream)throw new Error(\"already piping an entry\");if(!(this._finalized||this._destroyed)){typeof e==\"function\"&&(t=e,e=null),t||(t=r1);var i=this;if((!r.size||r.type===\"symlink\")&&(r.size=0),r.type||(r.type=IVe(r.mode)),r.mode||(r.mode=r.type===\"directory\"?mVe:EVe),r.uid||(r.uid=0),r.gid||(r.gid=0),r.mtime||(r.mtime=new Date),typeof e==\"string\"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){r.size=e.length,this._encode(r);var n=this.push(e);return t1(i,r.size),n?process.nextTick(t):this._drain=t,new vE}if(r.type===\"symlink\"&&!r.linkname){var s=new TQ;return due(s,function(a){if(a)return i.destroy(),t(a);r.linkname=s.linkname,i._encode(r),t()}),s}if(this._encode(r),r.type!==\"file\"&&r.type!==\"contiguous-file\")return process.nextTick(t),new vE;var o=new NQ(this);return this._stream=o,due(o,function(a){if(i._stream=null,a)return i.destroy(),t(a);if(o.written!==r.size)return i.destroy(),t(new Error(\"size mismatch\"));t1(i,r.size),i._finalizing&&i.finalize(),t()}),o}};la.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(mue),this.push(null))};la.prototype.destroy=function(r){this._destroyed||(this._destroyed=!0,r&&this.emit(\"error\",r),this.emit(\"close\"),this._stream&&this._stream.destroy&&this._stream.destroy())};la.prototype._encode=function(r){if(!r.pax){var e=RQ.encode(r);if(e){this.push(e);return}}this._encodePax(r)};la.prototype._encodePax=function(r){var e=RQ.encodePax({name:r.name,linkname:r.linkname,pax:r.pax}),t={name:\"PaxHeader\",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:\"pax-header\",linkname:r.linkname&&\"PaxHeader\",uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};this.push(RQ.encode(t)),this.push(e),t1(this,e.length),t.size=r.size,t.type=r.type,this.push(RQ.encode(t))};la.prototype._read=function(r){var e=this._drain;this._drain=r1,e()};Eue.exports=la});var yue=w(i1=>{i1.extract=fue();i1.pack=Iue()});var Fue=w((qQt,Rue)=>{\"use strict\";var Xu=class{constructor(e,t,i){this.__specs=e||{},Object.keys(this.__specs).forEach(n=>{if(typeof this.__specs[n]==\"string\"){let s=this.__specs[n],o=this.__specs[s];if(o){let a=o.aliases||[];a.push(n,s),o.aliases=[...new Set(a)],this.__specs[n]=o}else throw new Error(`Alias refers to invalid key: ${s} -> ${n}`)}}),this.__opts=t||{},this.__providers=Due(i.filter(n=>n!=null&&typeof n==\"object\")),this.__isFiggyPudding=!0}get(e){return l1(this,e,!0)}get[Symbol.toStringTag](){return\"FiggyPudding\"}forEach(e,t=this){for(let[i,n]of this.entries())e.call(t,n,i,this)}toJSON(){let e={};return this.forEach((t,i)=>{e[i]=t}),e}*entries(e){for(let i of Object.keys(this.__specs))yield[i,this.get(i)];let t=e||this.__opts.other;if(t){let i=new Set;for(let n of this.__providers){let s=n.entries?n.entries(t):TVe(n);for(let[o,a]of s)t(o)&&!i.has(o)&&(i.add(o),yield[o,a])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Xu(this.__specs,this.__opts,Due(this.__providers).concat(e)),kue)}};try{let r=J(\"util\");Xu.prototype[r.inspect.custom]=function(e,t){return this[Symbol.toStringTag]+\" \"+r.inspect(this.toJSON(),t)}}catch{}function FVe(r){throw Object.assign(new Error(`invalid config key requested: ${r}`),{code:\"EBADKEY\"})}function l1(r,e,t){let i=r.__specs[e];if(t&&!i&&(!r.__opts.other||!r.__opts.other(e)))FVe(e);else{i||(i={});let n;for(let s of r.__providers){if(n=Pue(e,s),n===void 0&&i.aliases&&i.aliases.length){for(let o of i.aliases)if(o!==e&&(n=Pue(o,s),n!==void 0))break}if(n!==void 0)break}return n===void 0&&i.default!==void 0?typeof i.default==\"function\"?i.default(r):i.default:n}}function Pue(r,e){let t;return e.__isFiggyPudding?t=l1(e,r,!1):typeof e.get==\"function\"?t=e.get(r):t=e[r],t}var kue={has(r,e){return e in r.__specs&&l1(r,e,!1)!==void 0},ownKeys(r){return Object.keys(r.__specs)},get(r,e){return typeof e==\"symbol\"||e.slice(0,2)===\"__\"||e in Xu.prototype?r[e]:r.get(e)},set(r,e,t){if(typeof e==\"symbol\"||e.slice(0,2)===\"__\")return r[e]=t,!0;throw new Error(\"figgyPudding options cannot be modified. Use .concat() instead.\")},deleteProperty(){throw new Error(\"figgyPudding options cannot be deleted. Use .concat() and shadow them instead.\")}};Rue.exports=NVe;function NVe(r,e){function t(...i){return new Proxy(new Xu(r,e,i),kue)}return t}function Due(r){let e=[];return r.forEach(t=>e.unshift(t)),e}function TVe(r){return Object.keys(r).map(e=>[e,r[e]])}});var Lue=w((JQt,ga)=>{\"use strict\";var PE=J(\"crypto\"),LVe=Fue(),MVe=J(\"stream\").Transform,Nue=[\"sha256\",\"sha384\",\"sha512\"],OVe=/^[a-z0-9+/]+(?:=?=?)$/i,KVe=/^([^-]+)-([^?]+)([?\\S*]*)$/,UVe=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\\?[\\x21-\\x7E]*)*$/,HVe=/^[\\x21-\\x7E]+$/,An=LVe({algorithms:{default:[\"sha512\"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>VVe},Promise:{default:()=>Promise},sep:{default:\" \"},single:{default:!1},size:{},strict:{default:!1}}),Nl=class{get isHash(){return!0}constructor(e,t){t=An(t);let i=!!t.strict;this.source=e.trim();let n=this.source.match(i?UVe:KVe);if(!n||i&&!Nue.some(o=>o===n[1]))return;this.algorithm=n[1],this.digest=n[2];let s=n[3];this.options=s?s.slice(1).split(\"?\"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,\"base64\").toString(\"hex\")}toJSON(){return this.toString()}toString(e){if(e=An(e),e.strict&&!(Nue.some(i=>i===this.algorithm)&&this.digest.match(OVe)&&(this.options||[]).every(i=>i.match(HVe))))return\"\";let t=this.options&&this.options.length?`?${this.options.join(\"?\")}`:\"\";return`${this.algorithm}-${this.digest}${t}`}},Zu=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=An(e);let t=e.sep||\" \";return e.strict&&(t=t.replace(/\\S+/g,\" \")),Object.keys(this).map(i=>this[i].map(n=>Nl.prototype.toString.call(n,e)).filter(n=>n.length).join(t)).filter(i=>i.length).join(t)}concat(e,t){t=An(t);let i=typeof e==\"string\"?e:xE(e,t);return ua(`${this.toString(t)} ${i}`,t)}hexDigest(){return ua(this,{single:!0}).hexDigest()}match(e,t){t=An(t);let i=ua(e,t),n=i.pickAlgorithm(t);return this[n]&&i[n]&&this[n].find(s=>i[n].find(o=>s.digest===o.digest))||!1}pickAlgorithm(e){e=An(e);let t=e.pickAlgorithm,i=Object.keys(this);if(!i.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return i.reduce((n,s)=>t(n,s)||n)}};ga.exports.parse=ua;function ua(r,e){if(e=An(e),typeof r==\"string\")return c1(r,e);if(r.algorithm&&r.digest){let t=new Zu;return t[r.algorithm]=[r],c1(xE(t,e),e)}else return c1(xE(r,e),e)}function c1(r,e){return e.single?new Nl(r,e):r.trim().split(/\\s+/).reduce((t,i)=>{let n=new Nl(i,e);if(n.algorithm&&n.digest){let s=n.algorithm;t[s]||(t[s]=[]),t[s].push(n)}return t},new Zu)}ga.exports.stringify=xE;function xE(r,e){return e=An(e),r.algorithm&&r.digest?Nl.prototype.toString.call(r,e):typeof r==\"string\"?xE(ua(r,e),e):Zu.prototype.toString.call(r,e)}ga.exports.fromHex=GVe;function GVe(r,e,t){t=An(t);let i=t.options&&t.options.length?`?${t.options.join(\"?\")}`:\"\";return ua(`${e}-${Buffer.from(r,\"hex\").toString(\"base64\")}${i}`,t)}ga.exports.fromData=YVe;function YVe(r,e){e=An(e);let t=e.algorithms,i=e.options&&e.options.length?`?${e.options.join(\"?\")}`:\"\";return t.reduce((n,s)=>{let o=PE.createHash(s).update(r).digest(\"base64\"),a=new Nl(`${s}-${o}${i}`,e);if(a.algorithm&&a.digest){let l=a.algorithm;n[l]||(n[l]=[]),n[l].push(a)}return n},new Zu)}ga.exports.fromStream=jVe;function jVe(r,e){e=An(e);let t=e.Promise||Promise,i=u1(e);return new t((n,s)=>{r.pipe(i),r.on(\"error\",s),i.on(\"error\",s);let o;i.on(\"integrity\",a=>{o=a}),i.on(\"end\",()=>n(o)),i.on(\"data\",()=>{})})}ga.exports.checkData=qVe;function qVe(r,e,t){if(t=An(t),e=ua(e,t),!Object.keys(e).length){if(t.error)throw Object.assign(new Error(\"No valid integrity hashes to check against\"),{code:\"EINTEGRITY\"});return!1}let i=e.pickAlgorithm(t),n=PE.createHash(i).update(r).digest(\"base64\"),s=ua({algorithm:i,digest:n}),o=s.match(e,t);if(o||!t.error)return o;if(typeof t.size==\"number\"&&r.length!==t.size){let a=new Error(`data size mismatch when checking ${e}.\n  Wanted: ${t.size}\n  Found: ${r.length}`);throw a.code=\"EBADSIZE\",a.found=r.length,a.expected=t.size,a.sri=e,a}else{let a=new Error(`Integrity checksum failed when using ${i}: Wanted ${e}, but got ${s}. (${r.length} bytes)`);throw a.code=\"EINTEGRITY\",a.found=s,a.expected=e,a.algorithm=i,a.sri=e,a}}ga.exports.checkStream=JVe;function JVe(r,e,t){t=An(t);let i=t.Promise||Promise,n=u1(t.concat({integrity:e}));return new i((s,o)=>{r.pipe(n),r.on(\"error\",o),n.on(\"error\",o);let a;n.on(\"verified\",l=>{a=l}),n.on(\"end\",()=>s(a)),n.on(\"data\",()=>{})})}ga.exports.integrityStream=u1;function u1(r){r=An(r);let e=r.integrity&&ua(r.integrity,r),t=e&&Object.keys(e).length,i=t&&e.pickAlgorithm(r),n=t&&e[i],s=Array.from(new Set(r.algorithms.concat(i?[i]:[]))),o=s.map(PE.createHash),a=0,l=new MVe({transform(c,u,g){a+=c.length,o.forEach(f=>f.update(c,u)),g(null,c,u)}}).on(\"end\",()=>{let c=r.options&&r.options.length?`?${r.options.join(\"?\")}`:\"\",u=ua(o.map((f,h)=>`${s[h]}-${f.digest(\"base64\")}${c}`).join(\" \"),r),g=t&&u.match(e,r);if(typeof r.size==\"number\"&&a!==r.size){let f=new Error(`stream size mismatch when checking ${e}.\n  Wanted: ${r.size}\n  Found: ${a}`);f.code=\"EBADSIZE\",f.found=a,f.expected=r.size,f.sri=e,l.emit(\"error\",f)}else if(r.integrity&&!g){let f=new Error(`${e} integrity checksum failed when using ${i}: wanted ${n} but got ${u}. (${a} bytes)`);f.code=\"EINTEGRITY\",f.found=u,f.expected=n,f.algorithm=i,f.sri=e,l.emit(\"error\",f)}else l.emit(\"size\",a),l.emit(\"integrity\",u),g&&l.emit(\"verified\",g)});return l}ga.exports.create=WVe;function WVe(r){r=An(r);let e=r.algorithms,t=r.options.length?`?${r.options.join(\"?\")}`:\"\",i=e.map(PE.createHash);return{update:function(n,s){return i.forEach(o=>o.update(n,s)),this},digest:function(n){return e.reduce((o,a)=>{let l=i.shift().digest(\"base64\"),c=new Nl(`${a}-${l}${t}`,r);if(c.algorithm&&c.digest){let u=c.algorithm;o[u]||(o[u]=[]),o[u].push(c)}return o},new Zu)}}}var zVe=new Set(PE.getHashes()),Tue=[\"md5\",\"whirlpool\",\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"sha3\",\"sha3-256\",\"sha3-384\",\"sha3-512\",\"sha3_256\",\"sha3_384\",\"sha3_512\"].filter(r=>zVe.has(r));function VVe(r,e){return Tue.indexOf(r.toLowerCase())>=Tue.indexOf(e.toLowerCase())?r:e}});var sm={};ut(sm,{BuildType:()=>M0,Cache:()=>Rt,Configuration:()=>ye,DEFAULT_LOCK_FILENAME:()=>ok,DEFAULT_RC_FILENAME:()=>sk,FormatType:()=>xi,InstallMode:()=>ts,LightReport:()=>ra,LinkType:()=>Ef,Manifest:()=>ot,MessageName:()=>Ct,MultiFetcher:()=>Df,PackageExtensionStatus:()=>Xx,PackageExtensionType:()=>Vx,Project:()=>je,ProjectLookup:()=>ck,Report:()=>vi,ReportError:()=>at,SettingsType:()=>ak,StreamReport:()=>Ge,TAG_REGEXP:()=>Rf,TelemetryManager:()=>Sh,ThrowReport:()=>ti,VirtualFetcher:()=>Ff,Workspace:()=>Qh,WorkspaceFetcher:()=>Tf,WorkspaceResolver:()=>Yr,YarnVersion:()=>Tr,execUtils:()=>Cr,folderUtils:()=>Tw,formatUtils:()=>ee,hashUtils:()=>li,httpUtils:()=>Xt,miscUtils:()=>Ie,nodeUtils:()=>ws,parseMessageName:()=>LI,scriptUtils:()=>Wt,semverUtils:()=>vt,stringifyMessageName:()=>FA,structUtils:()=>P,tgzUtils:()=>mi,treeUtils:()=>es});var Cr={};ut(Cr,{EndStrategy:()=>hk,ExecError:()=>Yw,PipeError:()=>dC,execvp:()=>tk,pipevp:()=>oo});var Wp={};ut(Wp,{AliasFS:()=>So,CustomDir:()=>Hp,CwdFS:()=>qt,DEFAULT_COMPRESSION_LEVEL:()=>Xl,FakeFS:()=>ya,Filename:()=>xt,JailFS:()=>vo,LazyFS:()=>Sg,LinkStrategy:()=>CS,NoFS:()=>jp,NodeFS:()=>$t,PortablePath:()=>Me,PosixFS:()=>vg,ProxiedFS:()=>pi,VirtualFS:()=>Br,ZipFS:()=>Wr,ZipOpenFS:()=>Kn,constants:()=>xr,extendFs:()=>AI,normalizeLineEndings:()=>Vl,npath:()=>K,opendir:()=>tI,patchFs:()=>bS,ppath:()=>x,statUtils:()=>Mp,toFilename:()=>Jr,xfs:()=>O});var xr={};ut(xr,{SAFE_TIME:()=>sK,S_IFDIR:()=>Jl,S_IFLNK:()=>zl,S_IFMT:()=>qs,S_IFREG:()=>Wl});var qs=61440,Jl=16384,Wl=32768,zl=40960,sK=456789e3;var Mp={};ut(Mp,{BigIntStatsEntry:()=>Bg,DEFAULT_MODE:()=>Tp,DirEntry:()=>cS,StatEntry:()=>Ia,areStatsEqual:()=>gS,clearStats:()=>WE,convertToBigIntStats:()=>zE,makeDefaultStats:()=>Lp,makeEmptyStats:()=>Mge});var uS=Pe(J(\"util\"));var Tp=33188,cS=class{constructor(){this.name=\"\";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Ia=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=Tp;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},Bg=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(Tp);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}};function Lp(){return new Ia}function Mge(){return WE(Lp())}function WE(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e)){let t=r[e];typeof t==\"number\"?r[e]=0:typeof t==\"bigint\"?r[e]=BigInt(0):uS.types.isDate(t)&&(r[e]=new Date(0))}return r}function zE(r){let e=new Bg;for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)){let i=r[t];typeof i==\"number\"?e[t]=BigInt(i):uS.types.isDate(i)&&(e[t]=new Date(i))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function gS(r,e){if(r.atimeMs!==e.atimeMs||r.birthtimeMs!==e.birthtimeMs||r.blksize!==e.blksize||r.blocks!==e.blocks||r.ctimeMs!==e.ctimeMs||r.dev!==e.dev||r.gid!==e.gid||r.ino!==e.ino||r.isBlockDevice()!==e.isBlockDevice()||r.isCharacterDevice()!==e.isCharacterDevice()||r.isDirectory()!==e.isDirectory()||r.isFIFO()!==e.isFIFO()||r.isFile()!==e.isFile()||r.isSocket()!==e.isSocket()||r.isSymbolicLink()!==e.isSymbolicLink()||r.mode!==e.mode||r.mtimeMs!==e.mtimeMs||r.nlink!==e.nlink||r.rdev!==e.rdev||r.size!==e.size||r.uid!==e.uid)return!1;let t=r,i=e;return!(t.atimeNs!==i.atimeNs||t.mtimeNs!==i.mtimeNs||t.ctimeNs!==i.ctimeNs||t.birthtimeNs!==i.birthtimeNs)}var XE=Pe(J(\"fs\"));var Op=Pe(J(\"path\"));var Me={root:\"/\",dot:\".\",parent:\"..\"},xt={nodeModules:\"node_modules\",manifest:\"package.json\",lockfile:\"yarn.lock\",virtual:\"__virtual__\",pnpJs:\".pnp.js\",pnpCjs:\".pnp.cjs\",rc:\".yarnrc.yml\"},K=Object.create(Op.default),x=Object.create(Op.default.posix);K.cwd=()=>process.cwd();x.cwd=()=>fS(process.cwd());x.resolve=(...r)=>r.length>0&&x.isAbsolute(r[0])?Op.default.posix.resolve(...r):Op.default.posix.resolve(x.cwd(),...r);var oK=function(r,e,t){return e=r.normalize(e),t=r.normalize(t),e===t?\".\":(e.endsWith(r.sep)||(e=e+r.sep),t.startsWith(e)?t.slice(e.length):null)};K.fromPortablePath=aK;K.toPortablePath=fS;K.contains=(r,e)=>oK(K,r,e);x.contains=(r,e)=>oK(x,r,e);var Oge=/^([a-zA-Z]:.*)$/,Kge=/^\\/\\/(\\.\\/)?(.*)$/,Uge=/^\\/([a-zA-Z]:.*)$/,Hge=/^\\/unc\\/(\\.dot\\/)?(.*)$/;function aK(r){if(process.platform!==\"win32\")return r;let e,t;if(e=r.match(Uge))r=e[1];else if(t=r.match(Hge))r=`\\\\\\\\${t[1]?\".\\\\\":\"\"}${t[2]}`;else return r;return r.replace(/\\//g,\"\\\\\")}function fS(r){if(process.platform!==\"win32\")return r;r=r.replace(/\\\\/g,\"/\");let e,t;return(e=r.match(Oge))?r=`/${e[1]}`:(t=r.match(Kge))&&(r=`/unc/${t[1]?\".dot/\":\"\"}${t[2]}`),r}function VE(r,e){return r===K?aK(e):fS(e)}function Jr(r){if(K.parse(r).dir!==\"\"||x.parse(r).dir!==\"\")throw new Error(`Invalid filename: \"${r}\"`);return r}var ZE=new Date(456789e3*1e3),CS=(t=>(t.Allow=\"allow\",t.ReadOnly=\"readOnly\",t))(CS||{});async function AK(r,e,t,i,n){let s=r.pathUtils.normalize(e),o=t.pathUtils.normalize(i),a=[],l=[],{atime:c,mtime:u}=n.stableTime?{atime:ZE,mtime:ZE}:await t.lstatPromise(o);await r.mkdirpPromise(r.pathUtils.dirname(e),{utimes:[c,u]});let g=typeof r.lutimesPromise==\"function\"?r.lutimesPromise.bind(r):r.utimesPromise.bind(r);await pS(a,l,g,r,s,t,o,{...n,didParentExist:!0});for(let f of a)await f();await Promise.all(l.map(f=>f()))}async function pS(r,e,t,i,n,s,o,a){var h,p;let l=a.didParentExist?await Gge(i,n):null,c=await s.lstatPromise(o),{atime:u,mtime:g}=a.stableTime?{atime:ZE,mtime:ZE}:c,f;switch(!0){case c.isDirectory():f=await Yge(r,e,t,i,n,l,s,o,c,a);break;case c.isFile():f=await qge(r,e,t,i,n,l,s,o,c,a);break;case c.isSymbolicLink():f=await Jge(r,e,t,i,n,l,s,o,c,a);break;default:throw new Error(`Unsupported file type (${c.mode})`)}return(f||((h=l==null?void 0:l.mtime)==null?void 0:h.getTime())!==g.getTime()||((p=l==null?void 0:l.atime)==null?void 0:p.getTime())!==u.getTime())&&(e.push(()=>t(n,u,g)),f=!0),(l===null||(l.mode&511)!==(c.mode&511))&&(e.push(()=>i.chmodPromise(n,c.mode&511)),f=!0),f}async function Gge(r,e){try{return await r.lstatPromise(e)}catch{return null}}async function Yge(r,e,t,i,n,s,o,a,l,c){if(s!==null&&!s.isDirectory())if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=!1;s===null&&(r.push(async()=>{try{await i.mkdirPromise(n,{mode:l.mode})}catch(h){if(h.code!==\"EEXIST\")throw h}}),u=!0);let g=await o.readdirPromise(a),f=c.didParentExist&&!s?{...c,didParentExist:!1}:c;if(c.stableSort)for(let h of g.sort())await pS(r,e,t,i,i.pathUtils.join(n,h),o,o.pathUtils.join(a,h),f)&&(u=!0);else(await Promise.all(g.map(async p=>{await pS(r,e,t,i,i.pathUtils.join(n,p),o,o.pathUtils.join(a,p),f)}))).some(p=>p)&&(u=!0);return u}var hS=new WeakMap;function dS(r,e,t,i,n){return async()=>{await r.linkPromise(t,e),n===\"readOnly\"&&(i.mode&=-147,await r.chmodPromise(e,i.mode))}}function jge(r,e,t,i,n){let s=hS.get(r);return typeof s>\"u\"?async()=>{try{await r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE),hS.set(r,!0)}catch(o){if(o.code===\"ENOSYS\"||o.code===\"ENOTSUP\")hS.set(r,!1),await dS(r,e,t,i,n)();else throw o}}:s?async()=>r.copyFilePromise(t,e,XE.default.constants.COPYFILE_FICLONE_FORCE):dS(r,e,t,i,n)}async function qge(r,e,t,i,n,s,o,a,l,c){var f;if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;let u=(f=c.linkStrategy)!=null?f:null,g=i===o?u!==null?jge(i,n,a,l,u):async()=>i.copyFilePromise(a,n,XE.default.constants.COPYFILE_FICLONE):u!==null?dS(i,n,a,l,u):async()=>i.writeFilePromise(n,await o.readFilePromise(a));return r.push(async()=>g()),!0}async function Jge(r,e,t,i,n,s,o,a,l,c){if(s!==null)if(c.overwrite)r.push(async()=>i.removePromise(n)),s=null;else return!1;return r.push(async()=>{await i.symlinkPromise(VE(i.pathUtils,await o.readlinkPromise(a)),n)}),!0}function As(r,e){return Object.assign(new Error(`${r}: ${e}`),{code:r})}function $E(r){return As(\"EBUSY\",r)}function Kp(r,e){return As(\"ENOSYS\",`${r}, ${e}`)}function vA(r){return As(\"EINVAL\",`invalid argument, ${r}`)}function Ur(r){return As(\"EBADF\",`bad file descriptor, ${r}`)}function Js(r){return As(\"ENOENT\",`no such file or directory, ${r}`)}function Qo(r){return As(\"ENOTDIR\",`not a directory, ${r}`)}function Up(r){return As(\"EISDIR\",`illegal operation on a directory, ${r}`)}function eI(r){return As(\"EEXIST\",`file already exists, ${r}`)}function un(r){return As(\"EROFS\",`read-only filesystem, ${r}`)}function lK(r){return As(\"ENOTEMPTY\",`directory not empty, ${r}`)}function cK(r){return As(\"EOPNOTSUPP\",`operation not supported, ${r}`)}function uK(){return As(\"ERR_DIR_CLOSED\",\"Directory handle was closed\")}var _E=class extends Error{constructor(t,i){super(t);this.name=\"Libzip Error\",this.code=i}};var Hp=class{constructor(e,t,i={}){this.path=e;this.nextDirent=t;this.opts=i;this.closed=!1}throwIfClosed(){if(this.closed)throw uK()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let t=this.readSync();return typeof e<\"u\"?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<\"u\"?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),(t=(e=this.opts).onClose)==null||t.call(e),this.closed=!0}};function tI(r,e,t,i){let n=()=>{let s=t.shift();return typeof s>\"u\"?null:Object.assign(r.statSync(r.pathUtils.join(e,s)),{name:s})};return new Hp(e,n,i)}var gK=J(\"os\");var ya=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){let i=[e];for(;i.length>0;){let n=i.shift();if((await this.lstatPromise(n)).isDirectory()){let o=await this.readdirPromise(n);if(t)for(let a of o.sort())i.push(this.pathUtils.join(n,a));else throw new Error(\"Not supported\")}else yield n}}async removePromise(e,{recursive:t=!0,maxRetries:i=5}={}){let n;try{n=await this.lstatPromise(e)}catch(s){if(s.code===\"ENOENT\")return;throw s}if(n.isDirectory()){if(t){let s=await this.readdirPromise(e);await Promise.all(s.map(o=>this.removePromise(this.pathUtils.resolve(e,o))))}for(let s=0;s<=i;s++)try{await this.rmdirPromise(e);break}catch(o){if(o.code!==\"EBUSY\"&&o.code!==\"ENOTEMPTY\")throw o;s<i&&await new Promise(a=>setTimeout(a,s*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:t=!0}={}){let i;try{i=this.lstatSync(e)}catch(n){if(n.code===\"ENOENT\")return;throw n}if(i.isDirectory()){if(t)for(let n of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,n));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{await this.mkdirPromise(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&await this.chmodPromise(a,t),i!=null)await this.utimesPromise(a,i[0],i[1]);else{let l=await this.statPromise(this.pathUtils.dirname(a));await this.utimesPromise(a,l.atime,l.mtime)}}}return s}mkdirpSync(e,{chmod:t,utimes:i}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let n=e.split(this.pathUtils.sep),s;for(let o=2;o<=n.length;++o){let a=n.slice(0,o).join(this.pathUtils.sep);if(!this.existsSync(a)){try{this.mkdirSync(a)}catch(l){if(l.code===\"EEXIST\")continue;throw l}if(s!=null||(s=a),t!=null&&this.chmodSync(a,t),i!=null)this.utimesSync(a,i[0],i[1]);else{let l=this.statSync(this.pathUtils.dirname(a));this.utimesSync(a,l.atime,l.mtime)}}}return s}async copyPromise(e,t,{baseFs:i=this,overwrite:n=!0,stableSort:s=!1,stableTime:o=!1,linkStrategy:a=null}={}){return await AK(this,e,i,t,{overwrite:n,stableSort:s,stableTime:o,linkStrategy:a})}copySync(e,t,{baseFs:i=this,overwrite:n=!0}={}){let s=i.lstatSync(t),o=this.existsSync(e);if(s.isDirectory()){this.mkdirpSync(e);let l=i.readdirSync(t);for(let c of l)this.copySync(this.pathUtils.join(e,c),i.pathUtils.join(t,c),{baseFs:i,overwrite:n})}else if(s.isFile()){if(!o||n){o&&this.removeSync(e);let l=i.readFileSync(t);this.writeFileSync(e,l)}}else if(s.isSymbolicLink()){if(!o||n){o&&this.removeSync(e);let l=i.readlinkSync(t);this.symlinkSync(VE(this.pathUtils,l),e)}}else throw new Error(`Unsupported file type (file: ${t}, mode: 0o${s.mode.toString(8).padStart(6,\"0\")})`);let a=s.mode&511;this.chmodSync(e,a)}async changeFilePromise(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t,i):this.changeFileTextPromise(e,t,i)}async changeFileBufferPromise(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=await this.readFilePromise(e)}catch{}Buffer.compare(n,t)!==0&&await this.writeFilePromise(e,t,{mode:i})}async changeFileTextPromise(e,t,{automaticNewlines:i,mode:n}={}){let s=\"\";try{s=await this.readFilePromise(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&await this.writeFilePromise(e,o,{mode:n})}changeFileSync(e,t,i={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t,i):this.changeFileTextSync(e,t,i)}changeFileBufferSync(e,t,{mode:i}={}){let n=Buffer.alloc(0);try{n=this.readFileSync(e)}catch{}Buffer.compare(n,t)!==0&&this.writeFileSync(e,t,{mode:i})}changeFileTextSync(e,t,{automaticNewlines:i=!1,mode:n}={}){let s=\"\";try{s=this.readFileSync(e,\"utf8\")}catch{}let o=i?Vl(s,t):t;s!==o&&this.writeFileSync(e,o,{mode:n})}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(i){if(i.code===\"EXDEV\")await this.copyPromise(t,e),await this.removePromise(e);else throw i}}moveSync(e,t){try{this.renameSync(e,t)}catch(i){if(i.code===\"EXDEV\")this.copySync(t,e),this.removeSync(e);else throw i}}async lockPromise(e,t){let i=`${e}.flock`,n=1e3/60,s=Date.now(),o=null,a=async()=>{let l;try{[l]=await this.readJsonPromise(i)}catch{return Date.now()-s<500}try{return process.kill(l,0),!0}catch{return!1}};for(;o===null;)try{o=await this.openPromise(i,\"wx\")}catch(l){if(l.code===\"EEXIST\"){if(!await a())try{await this.unlinkPromise(i);continue}catch{}if(Date.now()-s<60*1e3)await new Promise(c=>setTimeout(c,n));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${i})`)}else throw l}await this.writePromise(o,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(o),await this.unlinkPromise(i)}catch{}}}async readJsonPromise(e){let t=await this.readFilePromise(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}readJsonSync(e){let t=this.readFileSync(e,\"utf8\");try{return JSON.parse(t)}catch(i){throw i.message+=` (in ${e})`,i}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,`${JSON.stringify(t,null,2)}\n`)}writeJsonSync(e,t){return this.writeFileSync(e,`${JSON.stringify(t,null,2)}\n`)}async preserveTimePromise(e,t){let i=await this.lstatPromise(e),n=await t();typeof n<\"u\"&&(e=n),this.lutimesPromise?await this.lutimesPromise(e,i.atime,i.mtime):i.isSymbolicLink()||await this.utimesPromise(e,i.atime,i.mtime)}async preserveTimeSync(e,t){let i=this.lstatSync(e),n=t();typeof n<\"u\"&&(e=n),this.lutimesSync?this.lutimesSync(e,i.atime,i.mtime):i.isSymbolicLink()||this.utimesSync(e,i.atime,i.mtime)}},xA=class extends ya{constructor(){super(x)}};function Wge(r){let e=r.match(/\\r?\\n/g);if(e===null)return gK.EOL;let t=e.filter(n=>n===`\\r\n`).length,i=e.length-t;return t>i?`\\r\n`:`\n`}function Vl(r,e){return e.replace(/\\r?\\n/g,Wge(r))}var Qg=J(\"fs\"),IS=J(\"stream\"),dK=J(\"util\"),yS=Pe(J(\"zlib\"));var fK=Pe(J(\"fs\"));var $t=class extends xA{constructor(t=fK.default){super();this.realFs=t,typeof this.realFs.lutimes<\"u\"&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return Me.root}resolve(t){return x.resolve(t)}async openPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.open(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}openSync(t,i,n){return this.realFs.openSync(K.fromPortablePath(t),i,n)}async opendirPromise(t,i){return await new Promise((n,s)=>{typeof i<\"u\"?this.realFs.opendir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.opendir(K.fromPortablePath(t),this.makeCallback(n,s))}).then(n=>Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0}))}opendirSync(t,i){let n=typeof i<\"u\"?this.realFs.opendirSync(K.fromPortablePath(t),i):this.realFs.opendirSync(K.fromPortablePath(t));return Object.defineProperty(n,\"path\",{value:t,configurable:!0,writable:!0})}async readPromise(t,i,n=0,s=0,o=-1){return await new Promise((a,l)=>{this.realFs.read(t,i,n,s,o,(c,u)=>{c?l(c):a(u)})})}readSync(t,i,n,s,o){return this.realFs.readSync(t,i,n,s,o)}async writePromise(t,i,n,s,o){return await new Promise((a,l)=>typeof i==\"string\"?this.realFs.write(t,i,n,this.makeCallback(a,l)):this.realFs.write(t,i,n,s,o,this.makeCallback(a,l)))}writeSync(t,i,n,s,o){return typeof i==\"string\"?this.realFs.writeSync(t,i,n):this.realFs.writeSync(t,i,n,s,o)}async closePromise(t){await new Promise((i,n)=>{this.realFs.close(t,this.makeCallback(i,n))})}closeSync(t){this.realFs.closeSync(t)}createReadStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createReadStream(n,i)}createWriteStream(t,i){let n=t!==null?K.fromPortablePath(t):t;return this.realFs.createWriteStream(n,i)}async realpathPromise(t){return await new Promise((i,n)=>{this.realFs.realpath(K.fromPortablePath(t),{},this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}realpathSync(t){return K.toPortablePath(this.realFs.realpathSync(K.fromPortablePath(t),{}))}async existsPromise(t){return await new Promise(i=>{this.realFs.exists(K.fromPortablePath(t),i)})}accessSync(t,i){return this.realFs.accessSync(K.fromPortablePath(t),i)}async accessPromise(t,i){return await new Promise((n,s)=>{this.realFs.access(K.fromPortablePath(t),i,this.makeCallback(n,s))})}existsSync(t){return this.realFs.existsSync(K.fromPortablePath(t))}async statPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.stat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.stat(K.fromPortablePath(t),this.makeCallback(n,s))})}statSync(t,i){return i?this.realFs.statSync(K.fromPortablePath(t),i):this.realFs.statSync(K.fromPortablePath(t))}async fstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.fstat(t,i,this.makeCallback(n,s)):this.realFs.fstat(t,this.makeCallback(n,s))})}fstatSync(t,i){return i?this.realFs.fstatSync(t,i):this.realFs.fstatSync(t)}async lstatPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.lstat(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.lstat(K.fromPortablePath(t),this.makeCallback(n,s))})}lstatSync(t,i){return i?this.realFs.lstatSync(K.fromPortablePath(t),i):this.realFs.lstatSync(K.fromPortablePath(t))}async fchmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.fchmod(t,i,this.makeCallback(n,s))})}fchmodSync(t,i){return this.realFs.fchmodSync(t,i)}async chmodPromise(t,i){return await new Promise((n,s)=>{this.realFs.chmod(K.fromPortablePath(t),i,this.makeCallback(n,s))})}chmodSync(t,i){return this.realFs.chmodSync(K.fromPortablePath(t),i)}async fchownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.fchown(t,i,n,this.makeCallback(s,o))})}fchownSync(t,i,n){return this.realFs.fchownSync(t,i,n)}async chownPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.chown(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}chownSync(t,i,n){return this.realFs.chownSync(K.fromPortablePath(t),i,n)}async renamePromise(t,i){return await new Promise((n,s)=>{this.realFs.rename(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}renameSync(t,i){return this.realFs.renameSync(K.fromPortablePath(t),K.fromPortablePath(i))}async copyFilePromise(t,i,n=0){return await new Promise((s,o)=>{this.realFs.copyFile(K.fromPortablePath(t),K.fromPortablePath(i),n,this.makeCallback(s,o))})}copyFileSync(t,i,n=0){return this.realFs.copyFileSync(K.fromPortablePath(t),K.fromPortablePath(i),n)}async appendFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFile(a,i,n,this.makeCallback(s,o)):this.realFs.appendFile(a,i,this.makeCallback(s,o))})}appendFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.appendFileSync(s,i,n):this.realFs.appendFileSync(s,i)}async writeFilePromise(t,i,n){return await new Promise((s,o)=>{let a=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFile(a,i,n,this.makeCallback(s,o)):this.realFs.writeFile(a,i,this.makeCallback(s,o))})}writeFileSync(t,i,n){let s=typeof t==\"string\"?K.fromPortablePath(t):t;n?this.realFs.writeFileSync(s,i,n):this.realFs.writeFileSync(s,i)}async unlinkPromise(t){return await new Promise((i,n)=>{this.realFs.unlink(K.fromPortablePath(t),this.makeCallback(i,n))})}unlinkSync(t){return this.realFs.unlinkSync(K.fromPortablePath(t))}async utimesPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.utimes(K.fromPortablePath(t),i,n,this.makeCallback(s,o))})}utimesSync(t,i,n){this.realFs.utimesSync(K.fromPortablePath(t),i,n)}async lutimesPromiseImpl(t,i,n){let s=this.realFs.lutimes;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);return await new Promise((o,a)=>{s.call(this.realFs,K.fromPortablePath(t),i,n,this.makeCallback(o,a))})}lutimesSyncImpl(t,i,n){let s=this.realFs.lutimesSync;if(typeof s>\"u\")throw Kp(\"unavailable Node binding\",`lutimes '${t}'`);s.call(this.realFs,K.fromPortablePath(t),i,n)}async mkdirPromise(t,i){return await new Promise((n,s)=>{this.realFs.mkdir(K.fromPortablePath(t),i,this.makeCallback(n,s))})}mkdirSync(t,i){return this.realFs.mkdirSync(K.fromPortablePath(t),i)}async rmdirPromise(t,i){return await new Promise((n,s)=>{i?this.realFs.rmdir(K.fromPortablePath(t),i,this.makeCallback(n,s)):this.realFs.rmdir(K.fromPortablePath(t),this.makeCallback(n,s))})}rmdirSync(t,i){return this.realFs.rmdirSync(K.fromPortablePath(t),i)}async linkPromise(t,i){return await new Promise((n,s)=>{this.realFs.link(K.fromPortablePath(t),K.fromPortablePath(i),this.makeCallback(n,s))})}linkSync(t,i){return this.realFs.linkSync(K.fromPortablePath(t),K.fromPortablePath(i))}async symlinkPromise(t,i,n){return await new Promise((s,o)=>{this.realFs.symlink(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n,this.makeCallback(s,o))})}symlinkSync(t,i,n){return this.realFs.symlinkSync(K.fromPortablePath(t.replace(/\\/+$/,\"\")),K.fromPortablePath(i),n)}async readFilePromise(t,i){return await new Promise((n,s)=>{let o=typeof t==\"string\"?K.fromPortablePath(t):t;this.realFs.readFile(o,i,this.makeCallback(n,s))})}readFileSync(t,i){let n=typeof t==\"string\"?K.fromPortablePath(t):t;return this.realFs.readFileSync(n,i)}async readdirPromise(t,i){return await new Promise((n,s)=>{i!=null&&i.withFileTypes?this.realFs.readdir(K.fromPortablePath(t),{withFileTypes:!0},this.makeCallback(n,s)):this.realFs.readdir(K.fromPortablePath(t),this.makeCallback(o=>n(o),s))})}readdirSync(t,i){return i!=null&&i.withFileTypes?this.realFs.readdirSync(K.fromPortablePath(t),{withFileTypes:!0}):this.realFs.readdirSync(K.fromPortablePath(t))}async readlinkPromise(t){return await new Promise((i,n)=>{this.realFs.readlink(K.fromPortablePath(t),this.makeCallback(i,n))}).then(i=>K.toPortablePath(i))}readlinkSync(t){return K.toPortablePath(this.realFs.readlinkSync(K.fromPortablePath(t)))}async truncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.truncate(K.fromPortablePath(t),i,this.makeCallback(n,s))})}truncateSync(t,i){return this.realFs.truncateSync(K.fromPortablePath(t),i)}async ftruncatePromise(t,i){return await new Promise((n,s)=>{this.realFs.ftruncate(t,i,this.makeCallback(n,s))})}ftruncateSync(t,i){return this.realFs.ftruncateSync(t,i)}watch(t,i,n){return this.realFs.watch(K.fromPortablePath(t),i,n)}watchFile(t,i,n){return this.realFs.watchFile(K.fromPortablePath(t),i,n)}unwatchFile(t,i){return this.realFs.unwatchFile(K.fromPortablePath(t),i)}makeCallback(t,i){return(n,s)=>{n?i(n):t(s)}}};var pK=J(\"events\");function hK(r,e){if(r!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${r}'`)}var bg=class extends pK.EventEmitter{constructor(t,i,{bigint:n=!1}={}){super();this.status=\"ready\";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=t,this.path=i,this.bigint=n,this.lastStats=this.stat()}static create(t,i,n){let s=new bg(t,i,n);return s.start(),s}start(){hK(this.status,\"ready\"),this.status=\"running\",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(\"change\",this.lastStats,this.lastStats)},3)}stop(){hK(this.status,\"running\"),this.status=\"stopped\",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(\"stop\")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let i=this.bigint?new Bg:new Ia;return WE(i)}}makeInterval(t){let i=setInterval(()=>{let n=this.stat(),s=this.lastStats;gS(n,s)||(this.lastStats=n,this.emit(\"change\",n,s))},t.interval);return t.persistent?i:i.unref()}registerChangeListener(t,i){this.addListener(\"change\",t),this.changeListeners.set(t,this.makeInterval(i))}unregisterChangeListener(t){this.removeListener(\"change\",t);let i=this.changeListeners.get(t);typeof i<\"u\"&&clearInterval(i),this.changeListeners.delete(t)}unregisterAllChangeListeners(){for(let t of this.changeListeners.keys())this.unregisterChangeListener(t)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let t of this.changeListeners.values())t.ref();return this}unref(){for(let t of this.changeListeners.values())t.unref();return this}};var rI=new WeakMap;function iI(r,e,t,i){let n,s,o,a;switch(typeof t){case\"function\":n=!1,s=!0,o=5007,a=t;break;default:({bigint:n=!1,persistent:s=!0,interval:o=5007}=t),a=i;break}let l=rI.get(r);typeof l>\"u\"&&rI.set(r,l=new Map);let c=l.get(e);return typeof c>\"u\"&&(c=bg.create(r,e,{bigint:n}),l.set(e,c)),c.registerChangeListener(a,{persistent:s,interval:o}),c}function Gp(r,e,t){let i=rI.get(r);if(typeof i>\"u\")return;let n=i.get(e);typeof n>\"u\"||(typeof t>\"u\"?n.unregisterAllChangeListeners():n.unregisterChangeListener(t),n.hasChangeListeners()||(n.stop(),i.delete(e)))}function Yp(r){let e=rI.get(r);if(!(typeof e>\"u\"))for(let t of e.keys())Gp(r,t)}var Xl=\"mixed\";function zge(r){if(typeof r==\"string\"&&String(+r)===r)return+r;if(typeof r==\"number\"&&Number.isFinite(r))return r<0?Date.now()/1e3:r;if(dK.types.isDate(r))return r.getTime()/1e3;throw new Error(\"Invalid time\")}function ES(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var Wr=class extends xA{constructor(t,i){super();this.lzSource=null;this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;this.libzip=i.libzip;let n=i;if(this.level=typeof n.level<\"u\"?n.level:Xl,t!=null||(t=ES()),typeof t==\"string\"){let{baseFs:a=new $t}=n;this.baseFs=a,this.path=t}else this.path=null,this.baseFs=null;if(i.stats)this.stats=i.stats;else if(typeof t==\"string\")try{this.stats=this.baseFs.statSync(t)}catch(a){if(a.code===\"ENOENT\"&&n.create)this.stats=Lp();else throw a}else this.stats=Lp();let s=this.libzip.malloc(4);try{let a=0;if(typeof t==\"string\"&&n.create&&(a|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),i.readOnly&&(a|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof t==\"string\")this.zip=this.libzip.open(K.fromPortablePath(t),a,s);else{let l=this.allocateUnattachedSource(t);try{this.zip=this.libzip.openFromSource(l,a,s),this.lzSource=l}catch(c){throw this.libzip.source.free(l),c}}if(this.zip===0){let l=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(l,this.libzip.getValue(s,\"i32\")),this.makeLibzipError(l)}}finally{this.libzip.free(s)}this.listings.set(Me.root,new Set);let o=this.libzip.getNumEntries(this.zip,0);for(let a=0;a<o;++a){let l=this.libzip.getName(this.zip,a,0);if(x.isAbsolute(l))continue;let c=x.resolve(Me.root,l);this.registerEntry(c,a),l.endsWith(\"/\")&&this.registerListing(c)}if(this.symlinkCount=this.libzip.ext.countSymlinks(this.zip),this.symlinkCount===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.ready=!0}makeLibzipError(t){let i=this.libzip.struct.errorCodeZip(t),n=this.libzip.error.strerror(t),s=new _E(n,this.libzip.errors[i]);if(i===this.libzip.errors.ZIP_ER_CHANGED)throw new Error(`Assertion failed: Unexpected libzip error: ${s.message}`);return s}getExtractHint(t){for(let i of this.entries.keys()){let n=this.pathUtils.extname(i);if(t.relevantExtensions.has(n))return!0}return!1}getAllFiles(){return Array.from(this.entries.keys())}getRealPath(){if(!this.path)throw new Error(\"ZipFS don't have real paths when loaded from a buffer\");return this.path}getBufferAndClose(){if(this.prepareClose(),!this.lzSource)throw new Error(\"ZipFS was not created from a Buffer\");if(this.entries.size===0)return this.discardAndClose(),ES();try{if(this.libzip.source.keep(this.lzSource),this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.source.open(this.lzSource)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_END)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let t=this.libzip.source.tell(this.lzSource);if(t===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(this.libzip.source.seek(this.lzSource,0,0,this.libzip.SEEK_SET)===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));let i=this.libzip.malloc(t);if(!i)throw new Error(\"Couldn't allocate enough memory\");try{let n=this.libzip.source.read(this.lzSource,i,t);if(n===-1)throw this.makeLibzipError(this.libzip.source.error(this.lzSource));if(n<t)throw new Error(\"Incomplete read\");if(n>t)throw new Error(\"Overread\");let s=this.libzip.HEAPU8.subarray(i,i+t);return Buffer.from(s)}finally{this.libzip.free(i)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw $E(\"archive closed, close\");Yp(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error(\"ZipFS cannot be saved and must be discarded when loaded from a buffer\");if(this.prepareClose(),this.readOnly){this.discardAndClose();return}let t=this.baseFs.existsSync(this.path)||this.stats.mode===Tp?void 0:this.stats.mode;if(this.entries.size===0)this.discardAndClose(),this.baseFs.writeFileSync(this.path,ES(),{mode:t});else{if(this.libzip.close(this.zip)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));typeof t<\"u\"&&this.baseFs.chmodSync(this.path,t)}this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(t){return x.resolve(Me.root,t)}async openPromise(t,i,n){return this.openSync(t,i,n)}openSync(t,i,n){let s=this.nextFd++;return this.fds.set(s,{cursor:0,p:t}),s}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(t,i){return this.opendirSync(t,i)}opendirSync(t,i={}){let n=this.resolveFilename(`opendir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`opendir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`opendir '${t}'`);let o=[...s],a=this.openSync(n,\"r\");return tI(this,n,o,{onClose:()=>{this.closeSync(a)}})}async readPromise(t,i,n,s,o){return this.readSync(t,i,n,s,o)}readSync(t,i,n=0,s=i.byteLength,o=-1){let a=this.fds.get(t);if(typeof a>\"u\")throw Ur(\"read\");let l=o===-1||o===null?a.cursor:o,c=this.readFileSync(a.p);c.copy(i,n,l,l+s);let u=Math.max(0,Math.min(c.length-l,s));return(o===-1||o===null)&&(a.cursor+=u),u}async writePromise(t,i,n,s,o){return typeof i==\"string\"?this.writeSync(t,i,o):this.writeSync(t,i,n,s,o)}writeSync(t,i,n,s,o){throw typeof this.fds.get(t)>\"u\"?Ur(\"read\"):new Error(\"Unimplemented\")}async closePromise(t){return this.closeSync(t)}closeSync(t){if(typeof this.fds.get(t)>\"u\")throw Ur(\"read\");this.fds.delete(t)}createReadStream(t,{encoding:i}={}){if(t===null)throw new Error(\"Unimplemented\");let n=this.openSync(t,\"r\"),s=Object.assign(new IS.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(a,l)=>{clearImmediate(o),this.closeSync(n),l(a)}}),{close(){s.destroy()},bytesRead:0,path:t}),o=setImmediate(async()=>{try{let a=await this.readFilePromise(t,i);s.bytesRead=a.length,s.end(a)}catch(a){s.destroy(a)}});return s}createWriteStream(t,{encoding:i}={}){if(this.readOnly)throw un(`open '${t}'`);if(t===null)throw new Error(\"Unimplemented\");let n=[],s=this.openSync(t,\"w\"),o=Object.assign(new IS.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(a,l)=>{try{a?l(a):(this.writeFileSync(t,Buffer.concat(n),i),l(null))}catch(c){l(c)}finally{this.closeSync(s)}}}),{bytesWritten:0,path:t,close(){o.destroy()}});return o.on(\"data\",a=>{let l=Buffer.from(a);o.bytesWritten+=l.length,n.push(l)}),o}async realpathPromise(t){return this.realpathSync(t)}realpathSync(t){let i=this.resolveFilename(`lstat '${t}'`,t);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`lstat '${t}'`);return i}async existsPromise(t){return this.existsSync(t)}existsSync(t){if(!this.ready)throw $E(`archive closed, existsSync '${t}'`);if(this.symlinkCount===0){let n=x.resolve(Me.root,t);return this.entries.has(n)||this.listings.has(n)}let i;try{i=this.resolveFilename(`stat '${t}'`,t,void 0,!1)}catch{return!1}return i===void 0?!1:this.entries.has(i)||this.listings.has(i)}async accessPromise(t,i){return this.accessSync(t,i)}accessSync(t,i=Qg.constants.F_OK){let n=this.resolveFilename(`access '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`access '${t}'`);if(this.readOnly&&i&Qg.constants.W_OK)throw un(`access '${t}'`)}async statPromise(t,i={bigint:!1}){return i.bigint?this.statSync(t,{bigint:!0}):this.statSync(t)}statSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`stat '${t}'`,t,void 0,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`stat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`stat '${t}'`);return this.statImpl(`stat '${t}'`,n,i)}}async fstatPromise(t,i){return this.fstatSync(t,i)}fstatSync(t,i){let n=this.fds.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let{p:s}=n,o=this.resolveFilename(`stat '${s}'`,s);if(!this.entries.has(o)&&!this.listings.has(o))throw Js(`stat '${s}'`);if(s[s.length-1]===\"/\"&&!this.listings.has(o))throw Qo(`stat '${s}'`);return this.statImpl(`fstat '${s}'`,o,i)}async lstatPromise(t,i={bigint:!1}){return i.bigint?this.lstatSync(t,{bigint:!0}):this.lstatSync(t)}lstatSync(t,i={bigint:!1,throwIfNoEntry:!0}){let n=this.resolveFilename(`lstat '${t}'`,t,!1,i.throwIfNoEntry);if(n!==void 0){if(!this.entries.has(n)&&!this.listings.has(n)){if(i.throwIfNoEntry===!1)return;throw Js(`lstat '${t}'`)}if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`lstat '${t}'`);return this.statImpl(`lstat '${t}'`,n,i)}}statImpl(t,i,n={}){let s=this.entries.get(i);if(typeof s<\"u\"){let o=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,s,0,0,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let l=this.stats.uid,c=this.stats.gid,u=this.libzip.struct.statSize(o)>>>0,g=512,f=Math.ceil(u/g),h=(this.libzip.struct.statMtime(o)>>>0)*1e3,p=h,C=h,y=h,B=new Date(p),v=new Date(C),D=new Date(y),T=new Date(h),H=this.listings.has(i)?16384:this.isSymbolicLink(s)?40960:32768,j=H===16384?493:420,$=H|this.getUnixMode(s,j)&511,V=this.libzip.struct.statCrc(o),W=Object.assign(new Ia,{uid:l,gid:c,size:u,blksize:g,blocks:f,atime:B,birthtime:v,ctime:D,mtime:T,atimeMs:p,birthtimeMs:C,ctimeMs:y,mtimeMs:h,mode:$,crc:V});return n.bigint===!0?zE(W):W}if(this.listings.has(i)){let o=this.stats.uid,a=this.stats.gid,l=0,c=512,u=0,g=this.stats.mtimeMs,f=this.stats.mtimeMs,h=this.stats.mtimeMs,p=this.stats.mtimeMs,C=new Date(g),y=new Date(f),B=new Date(h),v=new Date(p),D=16877,T=0,H=Object.assign(new Ia,{uid:o,gid:a,size:l,blksize:c,blocks:u,atime:C,birthtime:y,ctime:B,mtime:v,atimeMs:g,birthtimeMs:f,ctimeMs:h,mtimeMs:p,mode:D,crc:T});return n.bigint===!0?zE(H):H}throw new Error(\"Unreachable\")}getUnixMode(t,i){if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?i:this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16}registerListing(t){let i=this.listings.get(t);if(i)return i;this.registerListing(x.dirname(t)).add(x.basename(t));let s=new Set;return this.listings.set(t,s),s}registerEntry(t,i){this.registerListing(x.dirname(t)).add(x.basename(t)),this.entries.set(t,i)}unregisterListing(t){this.listings.delete(t);let i=this.listings.get(x.dirname(t));i==null||i.delete(x.basename(t))}unregisterEntry(t){this.unregisterListing(t);let i=this.entries.get(t);this.entries.delete(t),!(typeof i>\"u\")&&(this.fileSources.delete(i),this.isSymbolicLink(i)&&this.symlinkCount--)}deleteEntry(t,i){if(this.unregisterEntry(t),this.libzip.delete(this.zip,i)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(t,i,n=!0,s=!0){if(!this.ready)throw $E(`archive closed, ${t}`);let o=x.resolve(Me.root,i);if(o===\"/\")return Me.root;let a=this.entries.get(o);if(n&&a!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(a)){let l=this.getFileSource(a).toString();return this.resolveFilename(t,x.resolve(x.dirname(o),l),!0,s)}else return o;for(;;){let l=this.resolveFilename(t,x.dirname(o),!0,s);if(l===void 0)return l;let c=this.listings.has(l),u=this.entries.has(l);if(!c&&!u){if(s===!1)return;throw Js(t)}if(!c)throw Qo(t);if(o=x.resolve(l,x.basename(o)),!n||this.symlinkCount===0)break;let g=this.libzip.name.locate(this.zip,o.slice(1),0);if(g===-1)break;if(this.isSymbolicLink(g)){let f=this.getFileSource(g).toString();o=x.resolve(x.dirname(o),f)}else break}return o}allocateBuffer(t){Buffer.isBuffer(t)||(t=Buffer.from(t));let i=this.libzip.malloc(t.byteLength);if(!i)throw new Error(\"Couldn't allocate enough memory\");return new Uint8Array(this.libzip.HEAPU8.buffer,i,t.byteLength).set(t),{buffer:i,byteLength:t.byteLength}}allocateUnattachedSource(t){let i=this.libzip.struct.errorS(),{buffer:n,byteLength:s}=this.allocateBuffer(t),o=this.libzip.source.fromUnattachedBuffer(n,s,0,1,i);if(o===0)throw this.libzip.free(i),this.makeLibzipError(i);return o}allocateSource(t){let{buffer:i,byteLength:n}=this.allocateBuffer(t),s=this.libzip.source.fromBuffer(this.zip,i,n,0,1);if(s===0)throw this.libzip.free(i),this.makeLibzipError(this.libzip.getError(this.zip));return s}setFileSource(t,i){let n=Buffer.isBuffer(i)?i:Buffer.from(i),s=x.relative(Me.root,t),o=this.allocateSource(i);try{let a=this.libzip.file.add(this.zip,s,o,this.libzip.ZIP_FL_OVERWRITE);if(a===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!==\"mixed\"){let l=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,a,0,l,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(a,n),a}catch(a){throw this.libzip.source.free(o),a}}isSymbolicLink(t){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,t,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,\"i8\")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,\"i32\")>>>16&61440)===40960}getFileSource(t,i={asyncDecompress:!1}){let n=this.fileSources.get(t);if(typeof n<\"u\")return n;let s=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,t,0,0,s)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let a=this.libzip.struct.statCompSize(s),l=this.libzip.struct.statCompMethod(s),c=this.libzip.malloc(a);try{let u=this.libzip.fopenIndex(this.zip,t,0,this.libzip.ZIP_FL_COMPRESSED);if(u===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let g=this.libzip.fread(u,c,a,0);if(g===-1)throw this.makeLibzipError(this.libzip.file.getError(u));if(g<a)throw new Error(\"Incomplete read\");if(g>a)throw new Error(\"Overread\");let f=this.libzip.HEAPU8.subarray(c,c+a),h=Buffer.from(f);if(l===0)return this.fileSources.set(t,h),h;if(i.asyncDecompress)return new Promise((p,C)=>{yS.default.inflateRaw(h,(y,B)=>{y?C(y):(this.fileSources.set(t,B),p(B))})});{let p=yS.default.inflateRawSync(h);return this.fileSources.set(t,p),p}}finally{this.libzip.fclose(u)}}finally{this.libzip.free(c)}}async fchmodPromise(t,i){return this.chmodPromise(this.fdToPath(t,\"fchmod\"),i)}fchmodSync(t,i){return this.chmodSync(this.fdToPath(t,\"fchmodSync\"),i)}async chmodPromise(t,i){return this.chmodSync(t,i)}chmodSync(t,i){if(this.readOnly)throw un(`chmod '${t}'`);i&=493;let n=this.resolveFilename(`chmod '${t}'`,t,!1),s=this.entries.get(n);if(typeof s>\"u\")throw new Error(`Assertion failed: The entry should have been registered (${n})`);let a=this.getUnixMode(s,32768)&-512|i;if(this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,a<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(t,i,n){return this.chownPromise(this.fdToPath(t,\"fchown\"),i,n)}fchownSync(t,i,n){return this.chownSync(this.fdToPath(t,\"fchownSync\"),i,n)}async chownPromise(t,i,n){return this.chownSync(t,i,n)}chownSync(t,i,n){throw new Error(\"Unimplemented\")}async renamePromise(t,i){return this.renameSync(t,i)}renameSync(t,i){throw new Error(\"Unimplemented\")}async copyFilePromise(t,i,n){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=await this.getFileSource(s,{asyncDecompress:!0}),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}copyFileSync(t,i,n=0){let{indexSource:s,indexDest:o,resolvedDestP:a}=this.prepareCopyFile(t,i,n),l=this.getFileSource(s),c=this.setFileSource(a,l);c!==o&&this.registerEntry(a,c)}prepareCopyFile(t,i,n=0){if(this.readOnly)throw un(`copyfile '${t} -> '${i}'`);if((n&Qg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Kp(\"unsupported clone operation\",`copyfile '${t}' -> ${i}'`);let s=this.resolveFilename(`copyfile '${t} -> ${i}'`,t),o=this.entries.get(s);if(typeof o>\"u\")throw vA(`copyfile '${t}' -> '${i}'`);let a=this.resolveFilename(`copyfile '${t}' -> ${i}'`,i),l=this.entries.get(a);if((n&(Qg.constants.COPYFILE_EXCL|Qg.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof l<\"u\")throw eI(`copyfile '${t}' -> '${i}'`);return{indexSource:o,resolvedDestP:a,indexDest:l}}async appendFilePromise(t,i,n){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFilePromise(t,i,n)}appendFileSync(t,i,n={}){if(this.readOnly)throw un(`open '${t}'`);return typeof n>\"u\"?n={flag:\"a\"}:typeof n==\"string\"?n={flag:\"a\",encoding:n}:typeof n.flag>\"u\"&&(n={flag:\"a\",...n}),this.writeFileSync(t,i,n)}fdToPath(t,i){var s;let n=(s=this.fds.get(t))==null?void 0:s.p;if(typeof n>\"u\")throw Ur(i);return n}async writeFilePromise(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([await this.getFileSource(a,{asyncDecompress:!0}),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&await this.chmodPromise(l,o)}writeFileSync(t,i,n){let{encoding:s,mode:o,index:a,resolvedP:l}=this.prepareWriteFile(t,n);a!==void 0&&typeof n==\"object\"&&n.flag&&n.flag.includes(\"a\")&&(i=Buffer.concat([this.getFileSource(a),Buffer.from(i)])),s!==null&&(i=i.toString(s));let c=this.setFileSource(l,i);c!==a&&this.registerEntry(l,c),o!==null&&this.chmodSync(l,o)}prepareWriteFile(t,i){if(typeof t==\"number\"&&(t=this.fdToPath(t,\"read\")),this.readOnly)throw un(`open '${t}'`);let n=this.resolveFilename(`open '${t}'`,t);if(this.listings.has(n))throw Up(`open '${t}'`);let s=null,o=null;typeof i==\"string\"?s=i:typeof i==\"object\"&&({encoding:s=null,mode:o=null}=i);let a=this.entries.get(n);return{encoding:s,mode:o,resolvedP:n,index:a}}async unlinkPromise(t){return this.unlinkSync(t)}unlinkSync(t){if(this.readOnly)throw un(`unlink '${t}'`);let i=this.resolveFilename(`unlink '${t}'`,t);if(this.listings.has(i))throw Up(`unlink '${t}'`);let n=this.entries.get(i);if(typeof n>\"u\")throw vA(`unlink '${t}'`);this.deleteEntry(i,n)}async utimesPromise(t,i,n){return this.utimesSync(t,i,n)}utimesSync(t,i,n){if(this.readOnly)throw un(`utimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t);this.utimesImpl(s,n)}async lutimesPromise(t,i,n){return this.lutimesSync(t,i,n)}lutimesSync(t,i,n){if(this.readOnly)throw un(`lutimes '${t}'`);let s=this.resolveFilename(`utimes '${t}'`,t,!1);this.utimesImpl(s,n)}utimesImpl(t,i){this.listings.has(t)&&(this.entries.has(t)||this.hydrateDirectory(t));let n=this.entries.get(t);if(n===void 0)throw new Error(\"Unreachable\");if(this.libzip.file.setMtime(this.zip,n,0,zge(i),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(t,i){return this.mkdirSync(t,i)}mkdirSync(t,{mode:i=493,recursive:n=!1}={}){if(n)return this.mkdirpSync(t,{chmod:i});if(this.readOnly)throw un(`mkdir '${t}'`);let s=this.resolveFilename(`mkdir '${t}'`,t);if(this.entries.has(s)||this.listings.has(s))throw eI(`mkdir '${t}'`);this.hydrateDirectory(s),this.chmodSync(s,i)}async rmdirPromise(t,i){return this.rmdirSync(t,i)}rmdirSync(t,{recursive:i=!1}={}){if(this.readOnly)throw un(`rmdir '${t}'`);if(i){this.removeSync(t);return}let n=this.resolveFilename(`rmdir '${t}'`,t),s=this.listings.get(n);if(!s)throw Qo(`rmdir '${t}'`);if(s.size>0)throw lK(`rmdir '${t}'`);let o=this.entries.get(n);if(typeof o>\"u\")throw vA(`rmdir '${t}'`);this.deleteEntry(t,o)}hydrateDirectory(t){let i=this.libzip.dir.add(this.zip,x.relative(Me.root,t));if(i===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(t),this.registerEntry(t,i),i}async linkPromise(t,i){return this.linkSync(t,i)}linkSync(t,i){throw cK(`link '${t}' -> '${i}'`)}async symlinkPromise(t,i){return this.symlinkSync(t,i)}symlinkSync(t,i){if(this.readOnly)throw un(`symlink '${t}' -> '${i}'`);let n=this.resolveFilename(`symlink '${t}' -> '${i}'`,i);if(this.listings.has(n))throw Up(`symlink '${t}' -> '${i}'`);if(this.entries.has(n))throw eI(`symlink '${t}' -> '${i}'`);let s=this.setFileSource(n,t);if(this.registerEntry(n,s),this.libzip.file.setExternalAttributes(this.zip,s,0,0,this.libzip.ZIP_OPSYS_UNIX,41471<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=await this.readFileBuffer(t,{asyncDecompress:!0});return i?n.toString(i):n}readFileSync(t,i){typeof i==\"object\"&&(i=i?i.encoding:void 0);let n=this.readFileBuffer(t);return i?n.toString(i):n}readFileBuffer(t,i={asyncDecompress:!1}){typeof t==\"number\"&&(t=this.fdToPath(t,\"read\"));let n=this.resolveFilename(`open '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`open '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(n))throw Qo(`open '${t}'`);if(this.listings.has(n))throw Up(\"read\");let s=this.entries.get(n);if(s===void 0)throw new Error(\"Unreachable\");return this.getFileSource(s,i)}async readdirPromise(t,i){return this.readdirSync(t,i)}readdirSync(t,i){let n=this.resolveFilename(`scandir '${t}'`,t);if(!this.entries.has(n)&&!this.listings.has(n))throw Js(`scandir '${t}'`);let s=this.listings.get(n);if(!s)throw Qo(`scandir '${t}'`);let o=[...s];return i!=null&&i.withFileTypes?o.map(a=>Object.assign(this.statImpl(\"lstat\",x.join(t,a)),{name:a})):o}async readlinkPromise(t){let i=this.prepareReadlink(t);return(await this.getFileSource(i,{asyncDecompress:!0})).toString()}readlinkSync(t){let i=this.prepareReadlink(t);return this.getFileSource(i).toString()}prepareReadlink(t){let i=this.resolveFilename(`readlink '${t}'`,t,!1);if(!this.entries.has(i)&&!this.listings.has(i))throw Js(`readlink '${t}'`);if(t[t.length-1]===\"/\"&&!this.listings.has(i))throw Qo(`open '${t}'`);if(this.listings.has(i))throw vA(`readlink '${t}'`);let n=this.entries.get(i);if(n===void 0)throw new Error(\"Unreachable\");if(!this.isSymbolicLink(n))throw vA(`readlink '${t}'`);return n}async truncatePromise(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=await this.getFileSource(s,{asyncDecompress:!0}),a=Buffer.alloc(i,0);return o.copy(a),await this.writeFilePromise(t,a)}truncateSync(t,i=0){let n=this.resolveFilename(`open '${t}'`,t),s=this.entries.get(n);if(typeof s>\"u\")throw vA(`open '${t}'`);let o=this.getFileSource(s),a=Buffer.alloc(i,0);return o.copy(a),this.writeFileSync(t,a)}async ftruncatePromise(t,i){return this.truncatePromise(this.fdToPath(t,\"ftruncate\"),i)}ftruncateSync(t,i){return this.truncateSync(this.fdToPath(t,\"ftruncateSync\"),i)}watch(t,i,n){let s;switch(typeof i){case\"function\":case\"string\":case\"undefined\":s=!0;break;default:({persistent:s=!0}=i);break}if(!s)return{on:()=>{},close:()=>{}};let o=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(o)}}}watchFile(t,i,n){let s=x.resolve(Me.root,t);return iI(this,s,i,n)}unwatchFile(t,i){let n=x.resolve(Me.root,t);return Gp(this,n,i)}};var pi=class extends ya{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,i){return this.baseFs.openPromise(this.mapToBase(e),t,i)}openSync(e,t,i){return this.baseFs.openSync(this.mapToBase(e),t,i)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,i,n,s){return await this.baseFs.readPromise(e,t,i,n,s)}readSync(e,t,i,n,s){return this.baseFs.readSync(e,t,i,n,s)}async writePromise(e,t,i,n,s){return typeof t==\"string\"?await this.baseFs.writePromise(e,t,i):await this.baseFs.writePromise(e,t,i,n,s)}writeSync(e,t,i,n,s){return typeof t==\"string\"?this.baseFs.writeSync(e,t,i):this.baseFs.writeSync(e,t,i,n,s)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e,t){return this.baseFs.statPromise(this.mapToBase(e),t)}statSync(e,t){return this.baseFs.statSync(this.mapToBase(e),t)}async fstatPromise(e,t){return this.baseFs.fstatPromise(e,t)}fstatSync(e,t){return this.baseFs.fstatSync(e,t)}lstatPromise(e,t){return this.baseFs.lstatPromise(this.mapToBase(e),t)}lstatSync(e,t){return this.baseFs.lstatSync(this.mapToBase(e),t)}async fchmodPromise(e,t){return this.baseFs.fchmodPromise(e,t)}fchmodSync(e,t){return this.baseFs.fchmodSync(e,t)}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async fchownPromise(e,t,i){return this.baseFs.fchownPromise(e,t,i)}fchownSync(e,t,i){return this.baseFs.fchownSync(e,t,i)}async chownPromise(e,t,i){return this.baseFs.chownPromise(this.mapToBase(e),t,i)}chownSync(e,t,i){return this.baseFs.chownSync(this.mapToBase(e),t,i)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,i=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),i)}copyFileSync(e,t,i=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),i)}async appendFilePromise(e,t,i){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,i)}appendFileSync(e,t,i){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,i)}async writeFilePromise(e,t,i){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,i)}writeFileSync(e,t,i){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,i)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,i){return this.baseFs.utimesPromise(this.mapToBase(e),t,i)}utimesSync(e,t,i){return this.baseFs.utimesSync(this.mapToBase(e),t,i)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkPromise(o,n,i)}symlinkSync(e,t,i){let n=this.mapToBase(t);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),n,i);let s=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(t),e)),o=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(n),s);return this.baseFs.symlinkSync(o,n,i)}async readFilePromise(e,t){return t===\"utf8\"?this.baseFs.readFilePromise(this.fsMapToBase(e),t):this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return t===\"utf8\"?this.baseFs.readFileSync(this.fsMapToBase(e),t):this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,t){return this.baseFs.readdirPromise(this.mapToBase(e),t)}readdirSync(e,t){return this.baseFs.readdirSync(this.mapToBase(e),t)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}async ftruncatePromise(e,t){return this.baseFs.ftruncatePromise(e,t)}ftruncateSync(e,t){return this.baseFs.ftruncateSync(e,t)}watch(e,t,i){return this.baseFs.watch(this.mapToBase(e),t,i)}watchFile(e,t,i){return this.baseFs.watchFile(this.mapToBase(e),t,i)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return typeof e==\"number\"?e:this.mapToBase(e)}};var So=class extends pi{constructor(t,{baseFs:i,pathUtils:n}){super(n);this.target=t,this.baseFs=i}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(t){return t}mapToBase(t){return t}};var qt=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.normalize(t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(t){return this.pathUtils.isAbsolute(t)?x.normalize(t):this.baseFs.resolve(x.join(this.target,t))}mapFromBase(t){return t}mapToBase(t){return this.pathUtils.isAbsolute(t)?t:this.pathUtils.join(this.target,t)}};var CK=Me.root,vo=class extends pi{constructor(t,{baseFs:i=new $t}={}){super(x);this.target=this.pathUtils.resolve(Me.root,t),this.baseFs=i}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Me.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(t){let i=this.pathUtils.normalize(t);if(this.pathUtils.isAbsolute(t))return this.pathUtils.resolve(this.target,this.pathUtils.relative(CK,t));if(i.match(/^\\.\\.\\/?/))throw new Error(`Resolving this path (${t}) would escape the jail`);return this.pathUtils.resolve(this.target,t)}mapFromBase(t){return this.pathUtils.resolve(CK,this.pathUtils.relative(this.target,t))}};var Sg=class extends pi{constructor(t,i){super(i);this.instance=null;this.factory=t}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(t){this.instance=t}mapFromBase(t){return t}mapToBase(t){return t}};var Ze=()=>Object.assign(new Error(\"ENOSYS: unsupported filesystem access\"),{code:\"ENOSYS\"}),wS=class extends ya{constructor(){super(x)}getExtractHint(){throw Ze()}getRealPath(){throw Ze()}resolve(){throw Ze()}async openPromise(){throw Ze()}openSync(){throw Ze()}async opendirPromise(){throw Ze()}opendirSync(){throw Ze()}async readPromise(){throw Ze()}readSync(){throw Ze()}async writePromise(){throw Ze()}writeSync(){throw Ze()}async closePromise(){throw Ze()}closeSync(){throw Ze()}createWriteStream(){throw Ze()}createReadStream(){throw Ze()}async realpathPromise(){throw Ze()}realpathSync(){throw Ze()}async readdirPromise(){throw Ze()}readdirSync(){throw Ze()}async existsPromise(e){throw Ze()}existsSync(e){throw Ze()}async accessPromise(){throw Ze()}accessSync(){throw Ze()}async statPromise(){throw Ze()}statSync(){throw Ze()}async fstatPromise(e){throw Ze()}fstatSync(e){throw Ze()}async lstatPromise(e){throw Ze()}lstatSync(e){throw Ze()}async fchmodPromise(){throw Ze()}fchmodSync(){throw Ze()}async chmodPromise(){throw Ze()}chmodSync(){throw Ze()}async fchownPromise(){throw Ze()}fchownSync(){throw Ze()}async chownPromise(){throw Ze()}chownSync(){throw Ze()}async mkdirPromise(){throw Ze()}mkdirSync(){throw Ze()}async rmdirPromise(){throw Ze()}rmdirSync(){throw Ze()}async linkPromise(){throw Ze()}linkSync(){throw Ze()}async symlinkPromise(){throw Ze()}symlinkSync(){throw Ze()}async renamePromise(){throw Ze()}renameSync(){throw Ze()}async copyFilePromise(){throw Ze()}copyFileSync(){throw Ze()}async appendFilePromise(){throw Ze()}appendFileSync(){throw Ze()}async writeFilePromise(){throw Ze()}writeFileSync(){throw Ze()}async unlinkPromise(){throw Ze()}unlinkSync(){throw Ze()}async utimesPromise(){throw Ze()}utimesSync(){throw Ze()}async readFilePromise(){throw Ze()}readFileSync(){throw Ze()}async readlinkPromise(){throw Ze()}readlinkSync(){throw Ze()}async truncatePromise(){throw Ze()}truncateSync(){throw Ze()}async ftruncatePromise(e,t){throw Ze()}ftruncateSync(e,t){throw Ze()}watch(){throw Ze()}watchFile(){throw Ze()}unwatchFile(){throw Ze()}},jp=wS;jp.instance=new wS;var vg=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return K.fromPortablePath(t)}mapToBase(t){return K.toPortablePath(t)}};var Vge=/^[0-9]+$/,BS=/^(\\/(?:[^/]+\\/)*?(?:\\$\\$virtual|__virtual__))((?:\\/((?:[^/]+-)?[a-f0-9]+)(?:\\/([^/]+))?)?((?:\\/.*)?))$/,Xge=/^([^/]+-)?[a-f0-9]+$/,Br=class extends pi{constructor({baseFs:t=new $t}={}){super(x);this.baseFs=t}static makeVirtualPath(t,i,n){if(x.basename(t)!==\"__virtual__\")throw new Error('Assertion failed: Virtual folders must be named \"__virtual__\"');if(!x.basename(i).match(Xge))throw new Error(\"Assertion failed: Virtual components must be ended by an hexadecimal hash\");let o=x.relative(x.dirname(t),n).split(\"/\"),a=0;for(;a<o.length&&o[a]===\"..\";)a+=1;let l=o.slice(a);return x.join(t,i,String(a),...l)}static resolveVirtual(t){let i=t.match(BS);if(!i||!i[3]&&i[5])return t;let n=x.dirname(i[1]);if(!i[3]||!i[4])return n;if(!Vge.test(i[4]))return t;let o=Number(i[4]),a=\"../\".repeat(o),l=i[5]||\".\";return Br.resolveVirtual(x.join(n,a,l))}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}realpathSync(t){let i=t.match(BS);if(!i)return this.baseFs.realpathSync(t);if(!i[5])return t;let n=this.baseFs.realpathSync(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}async realpathPromise(t){let i=t.match(BS);if(!i)return await this.baseFs.realpathPromise(t);if(!i[5])return t;let n=await this.baseFs.realpathPromise(this.mapToBase(t));return Br.makeVirtualPath(i[1],i[3],n)}mapToBase(t){if(t===\"\")return t;if(this.pathUtils.isAbsolute(t))return Br.resolveVirtual(t);let i=Br.resolveVirtual(this.baseFs.resolve(Me.dot)),n=Br.resolveVirtual(this.baseFs.resolve(t));return x.relative(i,n)||Me.dot}mapFromBase(t){return t}};var qp=J(\"fs\");var gn=4278190080,Vi=704643072,mK=(r,e)=>{let t=r.indexOf(e);if(t<=0)return null;let i=t;for(;t>=0&&(i=t+e.length,r[i]!==x.sep);){if(r[t-1]===x.sep)return null;t=r.indexOf(e,i)}return r.length>i&&r[i]!==x.sep?null:r.slice(0,i)},Kn=class extends xA{constructor({libzip:t,baseFs:i=new $t,filter:n=null,maxOpenFiles:s=1/0,readOnlyArchives:o=!1,useCache:a=!0,maxAge:l=5e3,fileExtensions:c=null}){super();this.fdMap=new Map;this.nextFd=3;this.isZip=new Set;this.notZip=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.libzipFactory=typeof t!=\"function\"?()=>t:t,this.baseFs=i,this.zipInstances=a?new Map:null,this.filter=n,this.maxOpenFiles=s,this.readOnlyArchives=o,this.maxAge=l,this.fileExtensions=c}static async openPromise(t,i){let n=new Kn(i);try{return await t(n)}finally{n.saveAndClose()}}get libzip(){return typeof this.libzipInstance>\"u\"&&(this.libzipInstance=this.libzipFactory()),this.libzipInstance}getExtractHint(t){return this.baseFs.getExtractHint(t)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.saveAndClose(),this.zipInstances.delete(t)}discardAndClose(){if(Yp(this),this.zipInstances)for(let[t,{zipFs:i}]of this.zipInstances.entries())i.discardAndClose(),this.zipInstances.delete(t)}resolve(t){return this.baseFs.resolve(t)}remapFd(t,i){let n=this.nextFd++|Vi;return this.fdMap.set(n,[t,i]),n}async openPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.openPromise(t,i,n),async(s,{subPath:o})=>this.remapFd(s,await s.openPromise(o,i,n)))}openSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.openSync(t,i,n),(s,{subPath:o})=>this.remapFd(s,s.openSync(o,i,n)))}async opendirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.opendirPromise(t,i),async(n,{subPath:s})=>await n.opendirPromise(s,i),{requireSubpath:!1})}opendirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.opendirSync(t,i),(n,{subPath:s})=>n.opendirSync(s,i),{requireSubpath:!1})}async readPromise(t,i,n,s,o){if((t&gn)!==Vi)return await this.baseFs.readPromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"read\");let[l,c]=a;return await l.readPromise(c,i,n,s,o)}readSync(t,i,n,s,o){if((t&gn)!==Vi)return this.baseFs.readSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"readSync\");let[l,c]=a;return l.readSync(c,i,n,s,o)}async writePromise(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?await this.baseFs.writePromise(t,i,n):await this.baseFs.writePromise(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"write\");let[l,c]=a;return typeof i==\"string\"?await l.writePromise(c,i,n):await l.writePromise(c,i,n,s,o)}writeSync(t,i,n,s,o){if((t&gn)!==Vi)return typeof i==\"string\"?this.baseFs.writeSync(t,i,n):this.baseFs.writeSync(t,i,n,s,o);let a=this.fdMap.get(t);if(typeof a>\"u\")throw Ur(\"writeSync\");let[l,c]=a;return typeof i==\"string\"?l.writeSync(c,i,n):l.writeSync(c,i,n,s,o)}async closePromise(t){if((t&gn)!==Vi)return await this.baseFs.closePromise(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"close\");this.fdMap.delete(t);let[n,s]=i;return await n.closePromise(s)}closeSync(t){if((t&gn)!==Vi)return this.baseFs.closeSync(t);let i=this.fdMap.get(t);if(typeof i>\"u\")throw Ur(\"closeSync\");this.fdMap.delete(t);let[n,s]=i;return n.closeSync(s)}createReadStream(t,i){return t===null?this.baseFs.createReadStream(t,i):this.makeCallSync(t,()=>this.baseFs.createReadStream(t,i),(n,{archivePath:s,subPath:o})=>{let a=n.createReadStream(o,i);return a.path=K.fromPortablePath(this.pathUtils.join(s,o)),a})}createWriteStream(t,i){return t===null?this.baseFs.createWriteStream(t,i):this.makeCallSync(t,()=>this.baseFs.createWriteStream(t,i),(n,{subPath:s})=>n.createWriteStream(s,i))}async realpathPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.realpathPromise(t),async(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=await this.baseFs.realpathPromise(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,await i.realpathPromise(s)))})}realpathSync(t){return this.makeCallSync(t,()=>this.baseFs.realpathSync(t),(i,{archivePath:n,subPath:s})=>{let o=this.realPaths.get(n);return typeof o>\"u\"&&(o=this.baseFs.realpathSync(n),this.realPaths.set(n,o)),this.pathUtils.join(o,this.pathUtils.relative(Me.root,i.realpathSync(s)))})}async existsPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.existsPromise(t),async(i,{subPath:n})=>await i.existsPromise(n))}existsSync(t){return this.makeCallSync(t,()=>this.baseFs.existsSync(t),(i,{subPath:n})=>i.existsSync(n))}async accessPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.accessPromise(t,i),async(n,{subPath:s})=>await n.accessPromise(s,i))}accessSync(t,i){return this.makeCallSync(t,()=>this.baseFs.accessSync(t,i),(n,{subPath:s})=>n.accessSync(s,i))}async statPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.statPromise(t,i),async(n,{subPath:s})=>await n.statPromise(s,i))}statSync(t,i){return this.makeCallSync(t,()=>this.baseFs.statSync(t,i),(n,{subPath:s})=>n.statSync(s,i))}async fstatPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fstatPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstat\");let[s,o]=n;return s.fstatPromise(o,i)}fstatSync(t,i){if((t&gn)!==Vi)return this.baseFs.fstatSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fstatSync\");let[s,o]=n;return s.fstatSync(o,i)}async lstatPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.lstatPromise(t,i),async(n,{subPath:s})=>await n.lstatPromise(s,i))}lstatSync(t,i){return this.makeCallSync(t,()=>this.baseFs.lstatSync(t,i),(n,{subPath:s})=>n.lstatSync(s,i))}async fchmodPromise(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodPromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmod\");let[s,o]=n;return s.fchmodPromise(o,i)}fchmodSync(t,i){if((t&gn)!==Vi)return this.baseFs.fchmodSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"fchmodSync\");let[s,o]=n;return s.fchmodSync(o,i)}async chmodPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.chmodPromise(t,i),async(n,{subPath:s})=>await n.chmodPromise(s,i))}chmodSync(t,i){return this.makeCallSync(t,()=>this.baseFs.chmodSync(t,i),(n,{subPath:s})=>n.chmodSync(s,i))}async fchownPromise(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownPromise(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchown\");let[o,a]=s;return o.fchownPromise(a,i,n)}fchownSync(t,i,n){if((t&gn)!==Vi)return this.baseFs.fchownSync(t,i,n);let s=this.fdMap.get(t);if(typeof s>\"u\")throw Ur(\"fchownSync\");let[o,a]=s;return o.fchownSync(a,i,n)}async chownPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.chownPromise(t,i,n),async(s,{subPath:o})=>await s.chownPromise(o,i,n))}chownSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.chownSync(t,i,n),(s,{subPath:o})=>s.chownSync(o,i,n))}async renamePromise(t,i){return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.renamePromise(t,i),async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),async(n,{subPath:s})=>await this.makeCallPromise(i,async()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},async(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return await n.renamePromise(s,a)}))}renameSync(t,i){return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.renameSync(t,i),()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})}),(n,{subPath:s})=>this.makeCallSync(i,()=>{throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"})},(o,{subPath:a})=>{if(n!==o)throw Object.assign(new Error(\"EEXDEV: cross-device link not permitted\"),{code:\"EEXDEV\"});return n.renameSync(s,a)}))}async copyFilePromise(t,i,n=0){let s=async(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&await this.existsPromise(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=await o.readFilePromise(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}await l.writeFilePromise(c,u)};return await this.makeCallPromise(t,async()=>await this.makeCallPromise(i,async()=>await this.baseFs.copyFilePromise(t,i,n),async(o,{subPath:a})=>await s(this.baseFs,t,o,a)),async(o,{subPath:a})=>await this.makeCallPromise(i,async()=>await s(o,a,this.baseFs,i),async(l,{subPath:c})=>o!==l?await s(o,a,l,c):await o.copyFilePromise(a,c,n)))}copyFileSync(t,i,n=0){let s=(o,a,l,c)=>{if((n&qp.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${a}' -> ${c}'`),{code:\"EXDEV\"});if(n&qp.constants.COPYFILE_EXCL&&this.existsSync(a))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${a}' -> '${c}'`),{code:\"EEXIST\"});let u;try{u=o.readFileSync(a)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${a}' -> '${c}'`),{code:\"EINVAL\"})}l.writeFileSync(c,u)};return this.makeCallSync(t,()=>this.makeCallSync(i,()=>this.baseFs.copyFileSync(t,i,n),(o,{subPath:a})=>s(this.baseFs,t,o,a)),(o,{subPath:a})=>this.makeCallSync(i,()=>s(o,a,this.baseFs,i),(l,{subPath:c})=>o!==l?s(o,a,l,c):o.copyFileSync(a,c,n)))}async appendFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.appendFilePromise(t,i,n),async(s,{subPath:o})=>await s.appendFilePromise(o,i,n))}appendFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.appendFileSync(t,i,n),(s,{subPath:o})=>s.appendFileSync(o,i,n))}async writeFilePromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.writeFilePromise(t,i,n),async(s,{subPath:o})=>await s.writeFilePromise(o,i,n))}writeFileSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.writeFileSync(t,i,n),(s,{subPath:o})=>s.writeFileSync(o,i,n))}async unlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.unlinkPromise(t),async(i,{subPath:n})=>await i.unlinkPromise(n))}unlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.unlinkSync(t),(i,{subPath:n})=>i.unlinkSync(n))}async utimesPromise(t,i,n){return await this.makeCallPromise(t,async()=>await this.baseFs.utimesPromise(t,i,n),async(s,{subPath:o})=>await s.utimesPromise(o,i,n))}utimesSync(t,i,n){return this.makeCallSync(t,()=>this.baseFs.utimesSync(t,i,n),(s,{subPath:o})=>s.utimesSync(o,i,n))}async mkdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.mkdirPromise(t,i),async(n,{subPath:s})=>await n.mkdirPromise(s,i))}mkdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.mkdirSync(t,i),(n,{subPath:s})=>n.mkdirSync(s,i))}async rmdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.rmdirPromise(t,i),async(n,{subPath:s})=>await n.rmdirPromise(s,i))}rmdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.rmdirSync(t,i),(n,{subPath:s})=>n.rmdirSync(s,i))}async linkPromise(t,i){return await this.makeCallPromise(i,async()=>await this.baseFs.linkPromise(t,i),async(n,{subPath:s})=>await n.linkPromise(t,s))}linkSync(t,i){return this.makeCallSync(i,()=>this.baseFs.linkSync(t,i),(n,{subPath:s})=>n.linkSync(t,s))}async symlinkPromise(t,i,n){return await this.makeCallPromise(i,async()=>await this.baseFs.symlinkPromise(t,i,n),async(s,{subPath:o})=>await s.symlinkPromise(t,o))}symlinkSync(t,i,n){return this.makeCallSync(i,()=>this.baseFs.symlinkSync(t,i,n),(s,{subPath:o})=>s.symlinkSync(t,o))}async readFilePromise(t,i){return this.makeCallPromise(t,async()=>{switch(i){case\"utf8\":return await this.baseFs.readFilePromise(t,i);default:return await this.baseFs.readFilePromise(t,i)}},async(n,{subPath:s})=>await n.readFilePromise(s,i))}readFileSync(t,i){return this.makeCallSync(t,()=>{switch(i){case\"utf8\":return this.baseFs.readFileSync(t,i);default:return this.baseFs.readFileSync(t,i)}},(n,{subPath:s})=>n.readFileSync(s,i))}async readdirPromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.readdirPromise(t,i),async(n,{subPath:s})=>await n.readdirPromise(s,i),{requireSubpath:!1})}readdirSync(t,i){return this.makeCallSync(t,()=>this.baseFs.readdirSync(t,i),(n,{subPath:s})=>n.readdirSync(s,i),{requireSubpath:!1})}async readlinkPromise(t){return await this.makeCallPromise(t,async()=>await this.baseFs.readlinkPromise(t),async(i,{subPath:n})=>await i.readlinkPromise(n))}readlinkSync(t){return this.makeCallSync(t,()=>this.baseFs.readlinkSync(t),(i,{subPath:n})=>i.readlinkSync(n))}async truncatePromise(t,i){return await this.makeCallPromise(t,async()=>await this.baseFs.truncatePromise(t,i),async(n,{subPath:s})=>await n.truncatePromise(s,i))}truncateSync(t,i){return this.makeCallSync(t,()=>this.baseFs.truncateSync(t,i),(n,{subPath:s})=>n.truncateSync(s,i))}async ftruncatePromise(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncatePromise(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncate\");let[s,o]=n;return s.ftruncatePromise(o,i)}ftruncateSync(t,i){if((t&gn)!==Vi)return this.baseFs.ftruncateSync(t,i);let n=this.fdMap.get(t);if(typeof n>\"u\")throw Ur(\"ftruncateSync\");let[s,o]=n;return s.ftruncateSync(o,i)}watch(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watch(t,i,n),(s,{subPath:o})=>s.watch(o,i,n))}watchFile(t,i,n){return this.makeCallSync(t,()=>this.baseFs.watchFile(t,i,n),()=>iI(this,t,i,n))}unwatchFile(t,i){return this.makeCallSync(t,()=>this.baseFs.unwatchFile(t,i),()=>Gp(this,t,i))}async makeCallPromise(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return await i();let o=this.resolve(t),a=this.findZip(o);return a?s&&a.subPath===\"/\"?await i():await this.getZipPromise(a.archivePath,async l=>await n(l,a)):await i()}makeCallSync(t,i,n,{requireSubpath:s=!0}={}){if(typeof t!=\"string\")return i();let o=this.resolve(t),a=this.findZip(o);return!a||s&&a.subPath===\"/\"?i():this.getZipSync(a.archivePath,l=>n(l,a))}findZip(t){if(this.filter&&!this.filter.test(t))return null;let i=\"\";for(;;){let n=t.substring(i.length),s;if(!this.fileExtensions)s=mK(n,\".zip\");else for(let o of this.fileExtensions)if(s=mK(n,o),s)break;if(!s)return null;if(i=this.pathUtils.join(i,s),this.isZip.has(i)===!1){if(this.notZip.has(i))continue;try{if(!this.baseFs.lstatSync(i).isFile()){this.notZip.add(i);continue}}catch{return null}this.isZip.add(i)}return{archivePath:i,subPath:this.pathUtils.join(Me.root,t.substring(i.length))}}}limitOpenFiles(t){if(this.zipInstances===null)return;let i=Date.now(),n=i+this.maxAge,s=t===null?0:this.zipInstances.size-t;for(let[o,{zipFs:a,expiresAt:l,refCount:c}]of this.zipInstances.entries())if(!(c!==0||a.hasOpenFileHandles())){if(i>=l){a.saveAndClose(),this.zipInstances.delete(o),s-=1;continue}else if(t===null||s<=0){n=l;break}a.saveAndClose(),this.zipInstances.delete(o),s-=1}this.limitOpenFilesTimeout===null&&(t===null&&this.zipInstances.size>0||t!==null)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},n-i).unref())}async getZipPromise(t,i){let n=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(t)});if(this.zipInstances){let s=this.zipInstances.get(t);if(!s){let o=await n();s=this.zipInstances.get(t),s||(s={zipFs:new Wr(t,o),expiresAt:0,refCount:0})}this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,s.refCount+=1;try{return await i(s.zipFs)}finally{s.refCount-=1}}else{let s=new Wr(t,await n());try{return await i(s)}finally{s.saveAndClose()}}}getZipSync(t,i){let n=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(t)});if(this.zipInstances){let s=this.zipInstances.get(t);return s||(s={zipFs:new Wr(t,n()),expiresAt:0,refCount:0}),this.zipInstances.delete(t),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(t,s),s.expiresAt=Date.now()+this.maxAge,i(s.zipFs)}else{let s=new Wr(t,n());try{return i(s)}finally{s.saveAndClose()}}}};var Pg=J(\"util\");var sI=J(\"url\"),EK=J(\"util\");var nI=class extends pi{constructor(t){super(K);this.baseFs=t}mapFromBase(t){return t}mapToBase(t){if(typeof t==\"string\")return t;if(t instanceof sI.URL)return(0,sI.fileURLToPath)(t);if(Buffer.isBuffer(t)){let i=t.toString();if(Buffer.byteLength(i)!==t.byteLength)throw new Error(\"Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942\");return i}throw new Error(`Unsupported path type: ${(0,EK.inspect)(t)}`)}};var IK=J(\"readline\"),Fi=Symbol(\"kBaseFs\"),wa=Symbol(\"kFd\"),PA=Symbol(\"kClosePromise\"),oI=Symbol(\"kCloseResolve\"),aI=Symbol(\"kCloseReject\"),xg=Symbol(\"kRefs\"),Ws=Symbol(\"kRef\"),zs=Symbol(\"kUnref\"),Zge,_ge,$ge,efe,Jp=class{constructor(e,t){this[Zge]=1;this[_ge]=void 0;this[$ge]=void 0;this[efe]=void 0;this[Fi]=t,this[wa]=e}get fd(){return this[wa]}async appendFile(e,t){var i;try{this[Ws](this.appendFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;return await this[Fi].appendFilePromise(this.fd,e,n?{encoding:n}:void 0)}finally{this[zs]()}}async chown(e,t){try{return this[Ws](this.chown),await this[Fi].fchownPromise(this.fd,e,t)}finally{this[zs]()}}async chmod(e){try{return this[Ws](this.chmod),await this[Fi].fchmodPromise(this.fd,e)}finally{this[zs]()}}createReadStream(e){return this[Fi].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Fi].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error(\"Method not implemented.\")}sync(){throw new Error(\"Method not implemented.\")}async read(e,t,i,n){var s,o,a;try{this[Ws](this.read);let l;return Buffer.isBuffer(e)?l=e:(e!=null||(e={}),l=(s=e.buffer)!=null?s:Buffer.alloc(16384),t=e.offset||0,i=(o=e.length)!=null?o:l.byteLength,n=(a=e.position)!=null?a:null),t!=null||(t=0),i!=null||(i=0),i===0?{bytesRead:i,buffer:l}:{bytesRead:await this[Fi].readPromise(this.fd,l,t,i,n),buffer:l}}finally{this[zs]()}}async readFile(e){var t;try{this[Ws](this.readFile);let i=(t=typeof e==\"string\"?e:e==null?void 0:e.encoding)!=null?t:void 0;return await this[Fi].readFilePromise(this.fd,i)}finally{this[zs]()}}readLines(e){return(0,IK.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Ws](this.stat),await this[Fi].fstatPromise(this.fd,e)}finally{this[zs]()}}async truncate(e){try{return this[Ws](this.truncate),await this[Fi].ftruncatePromise(this.fd,e)}finally{this[zs]()}}utimes(e,t){throw new Error(\"Method not implemented.\")}async writeFile(e,t){var i;try{this[Ws](this.writeFile);let n=(i=typeof t==\"string\"?t:t==null?void 0:t.encoding)!=null?i:void 0;await this[Fi].writeFilePromise(this.fd,e,n)}finally{this[zs]()}}async write(...e){try{if(this[Ws](this.write),ArrayBuffer.isView(e[0])){let[t,i,n,s]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i!=null?i:void 0,n!=null?n:void 0,s!=null?s:void 0),buffer:t}}else{let[t,i,n]=e;return{bytesWritten:await this[Fi].writePromise(this.fd,t,i,n),buffer:t}}}finally{this[zs]()}}async writev(e,t){try{this[Ws](this.writev);let i=0;if(typeof t<\"u\")for(let n of e){let s=await this.write(n,void 0,void 0,t);i+=s.bytesWritten,t+=s.bytesWritten}else for(let n of e){let s=await this.write(n);i+=s.bytesWritten}return{buffers:e,bytesWritten:i}}finally{this[zs]()}}readv(e,t){throw new Error(\"Method not implemented.\")}close(){if(this[wa]===-1)return Promise.resolve();if(this[PA])return this[PA];if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[PA]=this[Fi].closePromise(e).finally(()=>{this[PA]=void 0})}else this[PA]=new Promise((e,t)=>{this[oI]=e,this[aI]=t}).finally(()=>{this[PA]=void 0,this[aI]=void 0,this[oI]=void 0});return this[PA]}[(Fi,wa,Zge=xg,_ge=PA,$ge=oI,efe=aI,Ws)](e){if(this[wa]===-1){let t=new Error(\"file closed\");throw t.code=\"EBADF\",t.syscall=e.name,t}this[xg]++}[zs](){if(this[xg]--,this[xg]===0){let e=this[wa];this[wa]=-1,this[Fi].closePromise(e).then(this[oI],this[aI])}}};var tfe=new Set([\"accessSync\",\"appendFileSync\",\"createReadStream\",\"createWriteStream\",\"chmodSync\",\"fchmodSync\",\"chownSync\",\"fchownSync\",\"closeSync\",\"copyFileSync\",\"linkSync\",\"lstatSync\",\"fstatSync\",\"lutimesSync\",\"mkdirSync\",\"openSync\",\"opendirSync\",\"readlinkSync\",\"readFileSync\",\"readdirSync\",\"readlinkSync\",\"realpathSync\",\"renameSync\",\"rmdirSync\",\"statSync\",\"symlinkSync\",\"truncateSync\",\"ftruncateSync\",\"unlinkSync\",\"unwatchFile\",\"utimesSync\",\"watch\",\"watchFile\",\"writeFileSync\",\"writeSync\"]),yK=new Set([\"accessPromise\",\"appendFilePromise\",\"fchmodPromise\",\"chmodPromise\",\"fchownPromise\",\"chownPromise\",\"closePromise\",\"copyFilePromise\",\"linkPromise\",\"fstatPromise\",\"lstatPromise\",\"lutimesPromise\",\"mkdirPromise\",\"openPromise\",\"opendirPromise\",\"readdirPromise\",\"realpathPromise\",\"readFilePromise\",\"readdirPromise\",\"readlinkPromise\",\"renamePromise\",\"rmdirPromise\",\"statPromise\",\"symlinkPromise\",\"truncatePromise\",\"ftruncatePromise\",\"unlinkPromise\",\"utimesPromise\",\"writeFilePromise\",\"writeSync\"]);function bS(r,e){e=new nI(e);let t=(i,n,s)=>{let o=i[n];i[n]=s,typeof(o==null?void 0:o[Pg.promisify.custom])<\"u\"&&(s[Pg.promisify.custom]=o[Pg.promisify.custom])};{t(r,\"exists\",(i,...n)=>{let o=typeof n[n.length-1]==\"function\"?n.pop():()=>{};process.nextTick(()=>{e.existsPromise(i).then(a=>{o(a)},()=>{o(!1)})})}),t(r,\"read\",(...i)=>{let[n,s,o,a,l,c]=i;if(i.length<=3){let u={};i.length<3?c=i[1]:(u=i[1],c=i[2]),{buffer:s=Buffer.alloc(16384),offset:o=0,length:a=s.byteLength,position:l}=u}if(o==null&&(o=0),a|=0,a===0){process.nextTick(()=>{c(null,0,s)});return}l==null&&(l=-1),process.nextTick(()=>{e.readPromise(n,s,o,a,l).then(u=>{c(null,u,s)},u=>{c(u,0,s)})})});for(let i of yK){let n=i.replace(/Promise$/,\"\");if(typeof r[n]>\"u\")continue;let s=e[i];if(typeof s>\"u\")continue;t(r,n,(...a)=>{let c=typeof a[a.length-1]==\"function\"?a.pop():()=>{};process.nextTick(()=>{s.apply(e,a).then(u=>{c(null,u)},u=>{c(u)})})})}r.realpath.native=r.realpath}{t(r,\"existsSync\",i=>{try{return e.existsSync(i)}catch{return!1}}),t(r,\"readSync\",(...i)=>{let[n,s,o,a,l]=i;return i.length<=3&&({offset:o=0,length:a=s.byteLength,position:l}=i[2]||{}),o==null&&(o=0),a|=0,a===0?0:(l==null&&(l=-1),e.readSync(n,s,o,a,l))});for(let i of tfe){let n=i;if(typeof r[n]>\"u\")continue;let s=e[i];typeof s>\"u\"||t(r,n,s.bind(e))}r.realpathSync.native=r.realpathSync}{let i=process.emitWarning;process.emitWarning=()=>{};let n;try{n=r.promises}finally{process.emitWarning=i}if(typeof n<\"u\"){for(let s of yK){let o=s.replace(/Promise$/,\"\");if(typeof n[o]>\"u\")continue;let a=e[s];typeof a>\"u\"||s!==\"open\"&&t(n,o,(l,...c)=>l instanceof Jp?l[o].apply(l,c):a.call(e,l,...c))}t(n,\"open\",async(...s)=>{let o=await e.openPromise(...s);return new Jp(o,e)})}}r.read[Pg.promisify.custom]=async(i,n,...s)=>({bytesRead:await e.readPromise(i,n,...s),buffer:n}),r.write[Pg.promisify.custom]=async(i,n,...s)=>({bytesWritten:await e.writePromise(i,n,...s),buffer:n})}function AI(r,e){let t=Object.create(r);return bS(t,e),t}var bK=Pe(J(\"os\"));function wK(r){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,\"0\");return`${r}${e}`}var Vs=new Set,QS=null;function BK(){if(QS)return QS;let r=K.toPortablePath(bK.default.tmpdir()),e=O.realpathSync(r);return process.once(\"exit\",()=>{O.rmtempSync()}),QS={tmpdir:r,realTmpdir:e}}var O=Object.assign(new $t,{detachTemp(r){Vs.delete(r)},mktempSync(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{this.mkdirSync(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{this.removeSync(n)}catch{}}}}},async mktempPromise(r){let{tmpdir:e,realTmpdir:t}=BK();for(;;){let i=wK(\"xfs-\");try{await this.mkdirPromise(x.join(e,i))}catch(s){if(s.code===\"EEXIST\")continue;throw s}let n=x.join(t,i);if(Vs.add(n),typeof r>\"u\")return n;try{return await r(n)}finally{if(Vs.has(n)){Vs.delete(n);try{await this.removePromise(n)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Vs.values()).map(async r=>{try{await O.removePromise(r,{maxRetries:0}),Vs.delete(r)}catch{}}))},rmtempSync(){for(let r of Vs)try{O.removeSync(r),Vs.delete(r)}catch{}}});var fk=Pe(TS());var td={};ut(td,{parseResolution:()=>hI,parseShell:()=>uI,parseSyml:()=>yi,stringifyArgument:()=>KS,stringifyArgumentSegment:()=>US,stringifyArithmeticExpression:()=>fI,stringifyCommand:()=>OS,stringifyCommandChain:()=>Fg,stringifyCommandChainThen:()=>MS,stringifyCommandLine:()=>gI,stringifyCommandLineThen:()=>LS,stringifyEnvSegment:()=>cI,stringifyRedirectArgument:()=>zp,stringifyResolution:()=>pI,stringifyShell:()=>Rg,stringifyShellLine:()=>Rg,stringifySyml:()=>ba,stringifyValueArgument:()=>_l});var hU=Pe(fU());function uI(r,e={isGlobPattern:()=>!1}){try{return(0,hU.parse)(r,e)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function Rg(r,{endSemicolon:e=!1}={}){return r.map(({command:t,type:i},n)=>`${gI(t)}${i===\";\"?n!==r.length-1||e?\";\":\"\":\" &\"}`).join(\" \")}function gI(r){return`${Fg(r.chain)}${r.then?` ${LS(r.then)}`:\"\"}`}function LS(r){return`${r.type} ${gI(r.line)}`}function Fg(r){return`${OS(r)}${r.then?` ${MS(r.then)}`:\"\"}`}function MS(r){return`${r.type} ${Fg(r.chain)}`}function OS(r){switch(r.type){case\"command\":return`${r.envs.length>0?`${r.envs.map(e=>cI(e)).join(\" \")} `:\"\"}${r.args.map(e=>KS(e)).join(\" \")}`;case\"subshell\":return`(${Rg(r.subshell)})${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"group\":return`{ ${Rg(r.group,{endSemicolon:!0})} }${r.args.length>0?` ${r.args.map(e=>zp(e)).join(\" \")}`:\"\"}`;case\"envs\":return r.envs.map(e=>cI(e)).join(\" \");default:throw new Error(`Unsupported command type:  \"${r.type}\"`)}}function cI(r){return`${r.name}=${r.args[0]?_l(r.args[0]):\"\"}`}function KS(r){switch(r.type){case\"redirection\":return zp(r);case\"argument\":return _l(r);default:throw new Error(`Unsupported argument type: \"${r.type}\"`)}}function zp(r){return`${r.subtype} ${r.args.map(e=>_l(e)).join(\" \")}`}function _l(r){return r.segments.map(e=>US(e)).join(\"\")}function US(r){let e=(i,n)=>n?`\"${i}\"`:i,t=i=>i===\"\"?'\"\"':i.match(/[(){}<>$|&; \\t\"']/)?`$'${i.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\")}'`:i;switch(r.type){case\"text\":return t(r.text);case\"glob\":return r.pattern;case\"shell\":return e(`\\${${Rg(r.shell)}}`,r.quoted);case\"variable\":return e(typeof r.defaultValue>\"u\"?typeof r.alternativeValue>\"u\"?`\\${${r.name}}`:r.alternativeValue.length===0?`\\${${r.name}:+}`:`\\${${r.name}:+${r.alternativeValue.map(i=>_l(i)).join(\" \")}}`:r.defaultValue.length===0?`\\${${r.name}:-}`:`\\${${r.name}:-${r.defaultValue.map(i=>_l(i)).join(\" \")}}`,r.quoted);case\"arithmetic\":return`$(( ${fI(r.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: \"${r.type}\"`)}}function fI(r){let e=n=>{switch(n){case\"addition\":return\"+\";case\"subtraction\":return\"-\";case\"multiplication\":return\"*\";case\"division\":return\"/\";default:throw new Error(`Can't extract operator from arithmetic expression of type \"${n}\"`)}},t=(n,s)=>s?`( ${n} )`:n,i=n=>t(fI(n),![\"number\",\"variable\"].includes(n.type));switch(r.type){case\"number\":return String(r.value);case\"variable\":return r.name;default:return`${i(r.left)} ${e(r.type)} ${i(r.right)}`}}var CU=Pe(dU());function hI(r){let e=r.match(/^\\*{1,2}\\/(.*)/);if(e)throw new Error(`The override for '${r}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${e[1]}' instead.`);try{return(0,CU.parse)(r)}catch(t){throw t.location&&(t.message=t.message.replace(/(\\.)?$/,` (line ${t.location.start.line}, column ${t.location.start.column})$1`)),t}}function pI(r){let e=\"\";return r.from&&(e+=r.from.fullName,r.from.description&&(e+=`@${r.from.description}`),e+=\"/\"),e+=r.descriptor.fullName,r.descriptor.description&&(e+=`@${r.descriptor.description}`),e}var vI=Pe(aH()),gH=Pe(lH()),cde=/^(?![-?:,\\][{}#&*!|>'\"%@` \\t\\r\\n]).([ \\t]*(?![,\\][{}:# \\t\\r\\n]).)*$/,cH=[\"__metadata\",\"version\",\"resolution\",\"dependencies\",\"peerDependencies\",\"dependenciesMeta\",\"peerDependenciesMeta\",\"binaries\"],SI=class{constructor(e){this.data=e}};function uH(r){return r.match(cde)?r:JSON.stringify(r)}function fH(r){return typeof r>\"u\"?!0:typeof r==\"object\"&&r!==null?Object.keys(r).every(e=>fH(r[e])):!1}function $S(r,e,t){if(r===null)return`null\n`;if(typeof r==\"number\"||typeof r==\"boolean\")return`${r.toString()}\n`;if(typeof r==\"string\")return`${uH(r)}\n`;if(Array.isArray(r)){if(r.length===0)return`[]\n`;let i=\"  \".repeat(e);return`\n${r.map(s=>`${i}- ${$S(s,e+1,!1)}`).join(\"\")}`}if(typeof r==\"object\"&&r){let i,n;r instanceof SI?(i=r.data,n=!1):(i=r,n=!0);let s=\"  \".repeat(e),o=Object.keys(i);n&&o.sort((l,c)=>{let u=cH.indexOf(l),g=cH.indexOf(c);return u===-1&&g===-1?l<c?-1:l>c?1:0:u!==-1&&g===-1?-1:u===-1&&g!==-1?1:u-g});let a=o.filter(l=>!fH(i[l])).map((l,c)=>{let u=i[l],g=uH(l),f=$S(u,e+1,!0),h=c>0||t?s:\"\",p=g.length>1024?`? ${g}\n${h}:`:`${g}:`,C=f.startsWith(`\n`)?f:` ${f}`;return`${h}${p}${C}`}).join(e===0?`\n`:\"\")||`\n`;return t?`\n${a}`:`${a}`}throw new Error(`Unsupported value type (${r})`)}function ba(r){try{let e=$S(r,0,!1);return e!==`\n`?e:\"\"}catch(e){throw e.location&&(e.message=e.message.replace(/(\\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}ba.PreserveOrdering=SI;function ude(r){return r.endsWith(`\n`)||(r+=`\n`),(0,gH.parse)(r)}var gde=/^(#.*(\\r?\\n))*?#\\s+yarn\\s+lockfile\\s+v1\\r?\\n/i;function fde(r){if(gde.test(r))return ude(r);let e=(0,vI.safeLoad)(r,{schema:vI.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!=\"object\")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error(\"Expected an indexed object, got an array instead. Does your file follow Yaml's rules?\");return e}function yi(r){return fde(r)}var mz=Pe(pH()),Kw=Pe(Ac());var ud={};ut(ud,{Builtins:()=>hv,Cli:()=>Gn,Command:()=>ve,Option:()=>z,UsageError:()=>Qe,formatMarkdownish:()=>Ti});var tv=\"\u0001\",wi=\"\\0\";var rv=/^(-h|--help)(?:=([0-9]+))?$/,xI=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,EH=/^-[a-zA-Z]{2,}$/,iv=/^([^=]+)=([\\s\\S]*)$/,nv=process.env.DEBUG_CLI===\"1\";var Qe=class extends Error{constructor(e){super(e),this.clipanion={type:\"usage\"},this.name=\"UsageError\"}},Hg=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:\"none\"},this.name=\"UnknownSyntaxError\",this.candidates.length===0)this.message=\"Command not found, but we're not sure what's the alternative.\";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i}\n\n${this.candidates.map(({usage:n})=>`$ ${n}`).join(`\n`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${i}\n${sv(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},PI=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:\"none\"},this.name=\"AmbiguousSyntaxError\",this.message=`Cannot find which to pick amongst the following alternatives:\n\n${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(`\n`)}\n\n${sv(e)}`}},sv=r=>`While running ${r.filter(e=>e!==wi).map(e=>{let t=JSON.stringify(e);return e.match(/\\s/)||e.length===0||t!==`\"${e}\"`?t:e}).join(\" \")}`;var rd=Symbol(\"clipanion/isOption\");function Xi(r){return{...r,[rd]:!0}}function Do(r,e){return typeof r>\"u\"?[r,e]:typeof r==\"object\"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function DI(r,e=!1){let t=r.replace(/^\\.: /,\"\");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function id(r,e){return e.length===1?new Qe(`${r}: ${DI(e[0],!0)}`):new Qe(`${r}:\n${e.map(t=>`\n- ${DI(t)}`).join(\"\")}`)}function nd(r,e,t){if(typeof t>\"u\")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw id(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}var ve=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(()=>(ls(),hn)),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw id(\"Invalid option schema\",l);for(let[,g]of c)g()}else if(t!=null)throw new Error(\"Invalid command schema\");let i=await this.execute();return typeof i<\"u\"?i:0}};ve.isOption=rd;ve.Default=[];var Av=Array(80).fill(\"\\u2501\");for(let r=0;r<=24;++r)Av[Av.length-r]=`\\x1B[38;5;${232+r}m\\u2501`;var lv={header:r=>`\\x1B[1m\\u2501\\u2501\\u2501 ${r}${r.length<80-5?` ${Av.slice(r.length+5).join(\"\")}`:\":\"}\\x1B[0m`,bold:r=>`\\x1B[1m${r}\\x1B[22m`,error:r=>`\\x1B[31m\\x1B[1m${r}\\x1B[22m\\x1B[39m`,code:r=>`\\x1B[36m${r}\\x1B[39m`},PH={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function Xde(r){let e=r.split(`\n`),t=e.filter(n=>n.match(/\\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(`\n`)}function Ti(r,{format:e,paragraphs:t}){return r=r.replace(/\\r\\n?/g,`\n`),r=Xde(r),r=r.replace(/^\\n+|\\n+$/g,\"\"),r=r.replace(/^(\\s*)-([^\\n]*?)\\n+/gm,`$1-$2\n\n`),r=r.replace(/\\n(\\n)?\\n*/g,\"$1\"),t&&(r=r.split(/\\n/).map(i=>{let n=i.match(/^\\s*[*-][\\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(`\n`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,\"g\")).map((o,a)=>\" \".repeat(s)+(a===0?\"- \":\"  \")+o).join(`\n`)}).join(`\n\n`)),r=r.replace(/(`+)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\\*\\*)((?:.|[\\n])*?)\\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r}\n`:\"\"}var fv=Pe(J(\"tty\"),1);function pn(r){nv&&console.log(r)}var DH={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function kH(){return{nodes:[_i(),_i(),_i()]}}function Zde(r){let e=kH(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s<n.nodes.length;++s)NH(s)||e.nodes.push(oCe(n.nodes[s],i));i+=n.nodes.length-2}for(let n of t)Gg(e,0,n);return e}function Xs(r,e){return r.nodes.push(e),r.nodes.length-1}function _de(r){let e=new Set,t=i=>{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(0)}function $de(r,{prefix:e=\"\"}={}){if(nv){pn(`${e}Nodes are:`);for(let t=0;t<r.nodes.length;++t)pn(`${e}  ${t}: ${JSON.stringify(r.nodes[t])}`)}}function RH(r,e,t=!1){pn(`Running a vm on ${JSON.stringify(e)}`);let i=[{node:0,state:{candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];$de(r,{prefix:\"  \"});let n=[tv,...e];for(let s=0;s<n.length;++s){let o=n[s];pn(`  Processing ${JSON.stringify(o)}`);let a=[];for(let{node:l,state:c}of i){pn(`    Current node is ${l}`);let u=r.nodes[l];if(l===2){a.push({node:l,state:c});continue}console.assert(u.shortcuts.length===0,\"Shortcuts should have been eliminated by now\");let g=Object.prototype.hasOwnProperty.call(u.statics,o);if(!t||s<n.length-1||g)if(g){let f=u.statics[o];for(let{to:h,reducer:p}of f)a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Static transition to ${h} found`)}else pn(\"      No static transition found\");else{let f=!1;for(let h of Object.keys(u.statics))if(!!h.startsWith(o)){if(o===h)for(let{to:p,reducer:C}of u.statics[h])a.push({node:p,state:typeof C<\"u\"?RI(uv,C,c,o):c}),pn(`      Static transition to ${p} found`);else for(let{to:p}of u.statics[h])a.push({node:p,state:{...c,remainder:h.slice(o.length)}}),pn(`      Static transition to ${p} found (partial match)`);f=!0}f||pn(\"      No partial static transition found\")}if(o!==wi)for(let[f,{to:h,reducer:p}]of u.dynamics)RI(NI,f,c,o)&&(a.push({node:h,state:typeof p<\"u\"?RI(uv,p,c,o):c}),pn(`      Dynamic transition to ${h} found (via ${f})`))}if(a.length===0&&o===wi&&e.length===1)return[{node:0,state:DH}];if(a.length===0)throw new Hg(e,i.filter(({node:l})=>l!==2).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===2))throw new Hg(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=iCe(a)}if(i.length>0){pn(\"  Results:\");for(let s of i)pn(`    - ${s.node} -> ${JSON.stringify(s.state)}`)}else pn(\"  No results\");return i}function eCe(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,wi)){for(let{to:t}of r.statics[wi])if(t===1)return!0}return!1}function tCe(r,e,t){let i=t&&e.length>0?[\"\"]:[],n=RH(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],y=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=y[0];for(let{to:D,reducer:T}of C.statics[v])T===\"pushPath\"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=eCe(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==wi||!f.startsWith(\"-\")&&h.some(({reducer:p})=>p===\"pushPath\"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===2)continue;let p=aCe(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function rCe(r,e){let t=RH(r,[...e,wi]);return nCe(e,t.map(({state:i})=>i))}function iCe(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function nCe(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new Hg(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=sCe(c);if(u.length>1)throw new PI(r,u.map(g=>g.candidateUsage));return u[0]}function sCe(r){let e=[],t=[];for(let i of r)i.selectedIndex===-1?t.push(i):e.push(i);return t.length>0&&e.push({...DH,path:FH(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function FH(r,e,...t){return e===void 0?Array.from(r):FH(r.filter((i,n)=>i===e[n]),...t)}function _i(){return{dynamics:[],shortcuts:[],statics:{}}}function NH(r){return r===1||r===2}function cv(r,e=0){return{to:NH(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function oCe(r,e=0){let t=_i();for(let[i,n]of r.dynamics)t.dynamics.push([i,cv(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(cv(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>cv(s,e));return t}function Bi(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Gg(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function Qa(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function RI(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function aCe(r,e){let t=Array.isArray(r)?NI[r[0]]:NI[r];if(typeof t.suggest>\"u\")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var NI={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!==\"-\"&&e.startsWith(\"-\"),isNotOptionLike:(r,e)=>r.ignoreOptions||e===\"-\"||!e.startsWith(\"-\"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&&EH.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(iv);return!r.ignoreOptions&&!!n&&xI.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&&rv.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith(\"-\")&&xI.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith(\"-\")&&!xI.test(e)};NI.isOption.suggest=(r,e,t=!0)=>t?null:[e];var uv={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(iv);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Hn})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(rv);return typeof i<\"u\"?{...r,options:[{name:\"-c\",value:String(t)},{name:\"-i\",value:i}]}:{...r,options:[{name:\"-c\",value:String(t)}]}},setError:(r,e,t)=>e===wi?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} (\"${e}\").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Hn=Symbol(),gv=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e=\"arg\",required:t=!0}={}){if(!t&&this.arity.extra===Hn)throw new Error(\"Optional parameters cannot be declared when using .rest() or .proxy()\");if(!t&&this.arity.trailing.length>0)throw new Error(\"Optional parameters cannot be declared after the required trailing positional arguments\");!t&&this.arity.extra!==Hn?this.arity.extra.push(e):this.arity.extra!==Hn&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e=\"arg\",required:t=0}={}){if(this.arity.extra===Hn)throw new Error(\"Infinite lists cannot be declared multiple times in the same command\");if(this.arity.trailing.length>0)throw new Error(\"Infinite lists cannot be declared after the required trailing positional arguments\");for(let i=0;i<t;++i)this.addPositional({name:e});this.arity.extra=Hn}addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}addOption({names:e,description:t,arity:i=0,hidden:n=!1,required:s=!1,allowBinding:o=!0}){if(!o&&i>1)throw new Error(\"The arity cannot be higher than 1 when the option only supports the --arg=value syntax\");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h<a;++h)g.push(` #${h}`);let f=`${o.join(\",\")}${g.join(\"\")}`;!t&&c?n.push({definition:f,description:c,required:u}):i.push(u?`<${f}>`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Hn?i.push(\"...\"):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(\" \"),options:n}}compile(){if(typeof this.context>\"u\")throw new Error(\"Assertion failed: No context attached\");let e=kH(),t=0,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=Xs(e,_i()),Qa(e,0,tv,t,[\"setCandidateState\",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?\"always\":\"isNotOptionLike\",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=Xs(e,_i());Gg(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f<a.length;++f){let h=Xs(e,_i());Qa(e,l,a[f],h,\"pushPath\"),l=h}if(this.arity.leading.length>0||!this.arity.proxy){let f=Xs(e,_i());Bi(e,l,\"isHelp\",f,[\"useHelp\",this.cliIndex]),Qa(e,f,wi,1,[\"setSelectedIndex\",-1]),this.registerOptions(e,l)}this.arity.leading.length>0&&Qa(e,l,wi,2,[\"setError\",\"Not enough positional arguments\"]);let c=l;for(let f=0;f<this.arity.leading.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),(this.arity.trailing.length>0||f+1!==this.arity.leading.length)&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,c,\"isNotOptionLike\",h,\"pushPositional\"),c=h}let u=c;if(this.arity.extra===Hn||this.arity.extra.length>0){let f=Xs(e,_i());if(Gg(e,c,f),this.arity.extra===Hn){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),Bi(e,c,s,h,\"pushExtraNoLimits\"),Bi(e,h,s,h,\"pushExtraNoLimits\"),Gg(e,h,f)}else for(let h=0;h<this.arity.extra.length;++h){let p=Xs(e,_i());this.arity.proxy||this.registerOptions(e,p),Bi(e,u,s,p,\"pushExtra\"),Gg(e,p,f),u=p}u=f}this.arity.trailing.length>0&&Qa(e,u,wi,2,[\"setError\",\"Not enough positional arguments\"]);let g=u;for(let f=0;f<this.arity.trailing.length;++f){let h=Xs(e,_i());this.arity.proxy||this.registerOptions(e,h),f+1<this.arity.trailing.length&&Qa(e,h,wi,2,[\"setError\",\"Not enough positional arguments\"]),Bi(e,g,\"isNotOptionLike\",h,\"pushPositional\"),g=h}Bi(e,g,s,2,[\"setError\",\"Extraneous positional argument\"]),Qa(e,g,wi,1,[\"setSelectedIndex\",this.cliIndex])}return{machine:e,context:this.context}}registerOptions(e,t){Bi(e,t,[\"isOption\",\"--\"],t,\"inhibateOptions\"),Bi(e,t,[\"isBatchOption\",this.allOptionNames],t,\"pushBatch\"),Bi(e,t,[\"isBoundOption\",this.allOptionNames,this.options],t,\"pushBound\"),Bi(e,t,[\"isUnsupportedOption\",this.allOptionNames],2,[\"setError\",\"Unsupported option name\"]),Bi(e,t,[\"isInvalidOption\"],2,[\"setError\",\"Invalid option name\"]);for(let i of this.options){let n=i.names.reduce((s,o)=>o.length>s.length?o:s,\"\");if(i.arity===0)for(let s of i.names)Bi(e,t,[\"isOption\",s,i.hidden||s!==n],t,\"pushTrue\"),s.startsWith(\"--\")&&!s.startsWith(\"--no-\")&&Bi(e,t,[\"isNegatedOption\",s],t,[\"pushFalse\",s]);else{let s=Xs(e,_i());for(let o of i.names)Bi(e,t,[\"isOption\",o,i.hidden||o!==n],s,\"pushUndefined\");for(let o=0;o<i.arity;++o){let a=Xs(e,_i());Qa(e,s,wi,2,\"setOptionArityError\"),Bi(e,s,\"isOptionLike\",2,\"setOptionArityError\");let l=i.arity===1?\"setStringValue\":\"pushStringValue\";Bi(e,s,\"isNotOptionLike\",a,l),s=a}Gg(e,s,t)}}}},jg=class{constructor({binaryName:e=\"...\"}={}){this.builders=[],this.opts={binaryName:e}}static build(e,t={}){return new jg(t).commands(e).compile()}getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(`Assertion failed: Out-of-bound command index (${e})`);return this.builders[e]}commands(e){for(let t of e)t(this.command());return this}command(){let e=new gv(this.builders.length,this.opts);return this.builders.push(e),e}compile(){let e=[],t=[];for(let n of this.builders){let{machine:s,context:o}=n.compile();e.push(s),t.push(o)}let i=Zde(e);return _de(i),{machine:i,contexts:t,process:n=>rCe(i,n),suggest:(n,s)=>tCe(i,n,s)}}};var qg=class extends ve{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new qg(t);i.path=e.path;for(let n of e.options)switch(n.name){case\"-c\":i.commands.push(Number(n.value));break;case\"-i\":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<\"u\"&&this.index>=0&&this.index<e.length&&(e=[e[this.index]]),e.length===0)this.context.stdout.write(this.cli.usage());else if(e.length===1)this.context.stdout.write(this.cli.usage(this.contexts[e[0]].commandClass,{detailed:!0}));else if(e.length>1){this.context.stdout.write(`Multiple commands match your selection:\n`),this.context.stdout.write(`\n`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(`\n`),this.context.stdout.write(`Run again with -h=<index> to see the longer details of any of those commands.\n`)}}};var TH=Symbol(\"clipanion/errorCommand\");function ACe(){return process.env.FORCE_COLOR===\"0\"?1:process.env.FORCE_COLOR===\"1\"||typeof process.stdout<\"u\"&&process.stdout.isTTY?8:1}var Gn=class{constructor({binaryLabel:e,binaryName:t=\"...\",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new jg({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new Gn(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c==\"object\"&&c!==null&&c[ve.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<\"u\")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case-1:return qg.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>\"u\")throw new Error(\"Assertion failed: Expected the command class to have been registered.\");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[TH]=a,l}}break}}async run(e,t){var i;let n,s={...Gn.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?lCe(s):MH,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>\"u\")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<\"u\"?Ti(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<\"u\"?Ti(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<\"u\"?Ti(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<\"u\"?i.usage.examples.map(([f,h])=>[Ti(f,{format:this.format(e),paragraphs:!1}),h.replace(/\\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n=\"$ \"}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<\"u\";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof ve?e.constructor:e,a=\"\";if(o)if(i){let{description:l=\"\",details:c=\"\",examples:u=[]}=o.usage||{};l!==\"\"&&(a+=Ti(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=`\n`),(c!==\"\"||u.length>0)&&(a+=`${this.format(t).header(\"Usage\")}\n`,a+=`\n`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g}\n`,f.length>0){a+=`\n`,a+=`${lv.header(\"Options\")}\n`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=`\n`;for(let{definition:p,description:C}of f)a+=`  ${this.format(t).bold(p.padEnd(h))}    ${Ti(C,{format:this.format(t),paragraphs:!1})}`}if(c!==\"\"&&(a+=`\n`,a+=`${this.format(t).header(\"Details\")}\n`,a+=`\n`,a+=Ti(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=`\n`,a+=`${this.format(t).header(\"Examples\")}\n`;for(let[h,p]of u)a+=`\n`,a+=Ti(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,`  ${this.format(t).bold(n)}`).replace(/\\$0/g,this.binaryName)}\n`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l}\n`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>\"u\")continue;let p=typeof f.usage.category<\"u\"?Ti(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>\"u\"&&l.set(p,C=[]);let{usage:y}=this.getUsageByIndex(h);C.push({commandClass:f,usage:y})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),u=typeof this.binaryLabel<\"u\",g=typeof this.binaryVersion<\"u\";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)}\n\n`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)}\n`:a+=`${this.format(t).header(`${this.binaryVersion}`)}\n`,a+=`  ${this.format(t).bold(n)}${this.binaryName} <command>\n`):a+=`${this.format(t).bold(n)}${this.binaryName} <command>\n`;for(let f of c){let h=l.get(f).slice().sort((C,y)=>C.usage.localeCompare(y.usage,\"en\",{usage:\"sort\",caseFirst:\"upper\"})),p=f!==null?f.trim():\"General commands\";a+=`\n`,a+=`${this.format(t).header(`${p}`)}\n`;for(let{commandClass:C,usage:y}of h){let B=C.usage.description||\"undocumented\";a+=`\n`,a+=`  ${this.format(t).bold(y)}\n`,a+=`    ${Ti(B,{format:this.format(t),paragraphs:!1})}`}}a+=`\n`,a+=Ti(\"You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.\",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[TH])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o=\"\",a=e.name.replace(/([a-z])([A-Z])/g,\"$1 $2\");a===\"Error\"&&(a=\"Internal Error\"),o+=`${this.format(n).error(a)}: ${e.message}\n`;let l=e.clipanion;return typeof l<\"u\"?l.type===\"usage\"&&(o+=`\n`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\\n/,\"\")}\n`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:Gn.defaultContext.colorDepth>1)?lv:PH}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>\"u\")throw new Error(\"Assertion failed: Unregistered command\");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};Gn.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:\"getColorDepth\"in fv.default.WriteStream.prototype?fv.default.WriteStream.prototype.getColorDepth():ACe()};var LH;function lCe(r){let e=LH;if(typeof e>\"u\"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return MH;let{AsyncLocalStorage:t}=J(\"async_hooks\");e=LH=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>\"u\"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function MH(r){return r()}var hv={};ut(hv,{DefinitionsCommand:()=>Ad,HelpCommand:()=>ld,VersionCommand:()=>cd});var Ad=class extends ve{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)}\n`)}};Ad.paths=[[\"--clipanion=definitions\"]];var ld=class extends ve{async execute(){this.context.stdout.write(this.cli.usage())}};ld.paths=[[\"-h\"],[\"--help\"]];var cd=class extends ve{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:\"<unknown>\"}\n`)}};cd.paths=[[\"-v\"],[\"--version\"]];var z={};ut(z,{Array:()=>OH,Boolean:()=>KH,Counter:()=>UH,Proxy:()=>HH,Rest:()=>GH,String:()=>YH,applyValidator:()=>nd,cleanValidationError:()=>DI,formatError:()=>id,isOptionSymbol:()=>rd,makeCommandOption:()=>Xi,rerouteArguments:()=>Do});function OH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<\"u\"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}function KH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}function UH(r,e,t){let[i,n]=Do(e,t!=null?t:{}),s=r.split(\",\"),o=new Set(s);return Xi({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}function HH(r={}){return Xi({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}function GH(r={}){return Xi({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Hn||a.extra===!1&&o<e.arity.leading.length},s=0;for(;s<i.positionals.length&&n(s);)s+=1;return i.positionals.splice(0,s).map(({value:o})=>o)}})}function cCe(r,e,t){let[i,n]=Do(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(\",\"),a=new Set(o);return Xi({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f==\"string\"?nd(g!=null?g:c,f,n.validator):f}})}function uCe(r={}){let{required:e=!0}=r;return Xi({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o<n.positionals.length;++o){if(n.positionals[o].extra===Hn||e&&n.positionals[o].extra===!0||!e&&n.positionals[o].extra===!1)continue;let[a]=n.positionals.splice(o,1);return nd((s=r.name)!==null&&s!==void 0?s:i,a.value,r.validator)}}})}function YH(r,...e){return typeof r==\"string\"?cCe(r,...e):uCe(r)}var Ez=Pe(Jg()),nk=J(\"stream\");var Ct=(se=>(se[se.UNNAMED=0]=\"UNNAMED\",se[se.EXCEPTION=1]=\"EXCEPTION\",se[se.MISSING_PEER_DEPENDENCY=2]=\"MISSING_PEER_DEPENDENCY\",se[se.CYCLIC_DEPENDENCIES=3]=\"CYCLIC_DEPENDENCIES\",se[se.DISABLED_BUILD_SCRIPTS=4]=\"DISABLED_BUILD_SCRIPTS\",se[se.BUILD_DISABLED=5]=\"BUILD_DISABLED\",se[se.SOFT_LINK_BUILD=6]=\"SOFT_LINK_BUILD\",se[se.MUST_BUILD=7]=\"MUST_BUILD\",se[se.MUST_REBUILD=8]=\"MUST_REBUILD\",se[se.BUILD_FAILED=9]=\"BUILD_FAILED\",se[se.RESOLVER_NOT_FOUND=10]=\"RESOLVER_NOT_FOUND\",se[se.FETCHER_NOT_FOUND=11]=\"FETCHER_NOT_FOUND\",se[se.LINKER_NOT_FOUND=12]=\"LINKER_NOT_FOUND\",se[se.FETCH_NOT_CACHED=13]=\"FETCH_NOT_CACHED\",se[se.YARN_IMPORT_FAILED=14]=\"YARN_IMPORT_FAILED\",se[se.REMOTE_INVALID=15]=\"REMOTE_INVALID\",se[se.REMOTE_NOT_FOUND=16]=\"REMOTE_NOT_FOUND\",se[se.RESOLUTION_PACK=17]=\"RESOLUTION_PACK\",se[se.CACHE_CHECKSUM_MISMATCH=18]=\"CACHE_CHECKSUM_MISMATCH\",se[se.UNUSED_CACHE_ENTRY=19]=\"UNUSED_CACHE_ENTRY\",se[se.MISSING_LOCKFILE_ENTRY=20]=\"MISSING_LOCKFILE_ENTRY\",se[se.WORKSPACE_NOT_FOUND=21]=\"WORKSPACE_NOT_FOUND\",se[se.TOO_MANY_MATCHING_WORKSPACES=22]=\"TOO_MANY_MATCHING_WORKSPACES\",se[se.CONSTRAINTS_MISSING_DEPENDENCY=23]=\"CONSTRAINTS_MISSING_DEPENDENCY\",se[se.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]=\"CONSTRAINTS_INCOMPATIBLE_DEPENDENCY\",se[se.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]=\"CONSTRAINTS_EXTRANEOUS_DEPENDENCY\",se[se.CONSTRAINTS_INVALID_DEPENDENCY=26]=\"CONSTRAINTS_INVALID_DEPENDENCY\",se[se.CANT_SUGGEST_RESOLUTIONS=27]=\"CANT_SUGGEST_RESOLUTIONS\",se[se.FROZEN_LOCKFILE_EXCEPTION=28]=\"FROZEN_LOCKFILE_EXCEPTION\",se[se.CROSS_DRIVE_VIRTUAL_LOCAL=29]=\"CROSS_DRIVE_VIRTUAL_LOCAL\",se[se.FETCH_FAILED=30]=\"FETCH_FAILED\",se[se.DANGEROUS_NODE_MODULES=31]=\"DANGEROUS_NODE_MODULES\",se[se.NODE_GYP_INJECTED=32]=\"NODE_GYP_INJECTED\",se[se.AUTHENTICATION_NOT_FOUND=33]=\"AUTHENTICATION_NOT_FOUND\",se[se.INVALID_CONFIGURATION_KEY=34]=\"INVALID_CONFIGURATION_KEY\",se[se.NETWORK_ERROR=35]=\"NETWORK_ERROR\",se[se.LIFECYCLE_SCRIPT=36]=\"LIFECYCLE_SCRIPT\",se[se.CONSTRAINTS_MISSING_FIELD=37]=\"CONSTRAINTS_MISSING_FIELD\",se[se.CONSTRAINTS_INCOMPATIBLE_FIELD=38]=\"CONSTRAINTS_INCOMPATIBLE_FIELD\",se[se.CONSTRAINTS_EXTRANEOUS_FIELD=39]=\"CONSTRAINTS_EXTRANEOUS_FIELD\",se[se.CONSTRAINTS_INVALID_FIELD=40]=\"CONSTRAINTS_INVALID_FIELD\",se[se.AUTHENTICATION_INVALID=41]=\"AUTHENTICATION_INVALID\",se[se.PROLOG_UNKNOWN_ERROR=42]=\"PROLOG_UNKNOWN_ERROR\",se[se.PROLOG_SYNTAX_ERROR=43]=\"PROLOG_SYNTAX_ERROR\",se[se.PROLOG_EXISTENCE_ERROR=44]=\"PROLOG_EXISTENCE_ERROR\",se[se.STACK_OVERFLOW_RESOLUTION=45]=\"STACK_OVERFLOW_RESOLUTION\",se[se.AUTOMERGE_FAILED_TO_PARSE=46]=\"AUTOMERGE_FAILED_TO_PARSE\",se[se.AUTOMERGE_IMMUTABLE=47]=\"AUTOMERGE_IMMUTABLE\",se[se.AUTOMERGE_SUCCESS=48]=\"AUTOMERGE_SUCCESS\",se[se.AUTOMERGE_REQUIRED=49]=\"AUTOMERGE_REQUIRED\",se[se.DEPRECATED_CLI_SETTINGS=50]=\"DEPRECATED_CLI_SETTINGS\",se[se.PLUGIN_NAME_NOT_FOUND=51]=\"PLUGIN_NAME_NOT_FOUND\",se[se.INVALID_PLUGIN_REFERENCE=52]=\"INVALID_PLUGIN_REFERENCE\",se[se.CONSTRAINTS_AMBIGUITY=53]=\"CONSTRAINTS_AMBIGUITY\",se[se.CACHE_OUTSIDE_PROJECT=54]=\"CACHE_OUTSIDE_PROJECT\",se[se.IMMUTABLE_INSTALL=55]=\"IMMUTABLE_INSTALL\",se[se.IMMUTABLE_CACHE=56]=\"IMMUTABLE_CACHE\",se[se.INVALID_MANIFEST=57]=\"INVALID_MANIFEST\",se[se.PACKAGE_PREPARATION_FAILED=58]=\"PACKAGE_PREPARATION_FAILED\",se[se.INVALID_RANGE_PEER_DEPENDENCY=59]=\"INVALID_RANGE_PEER_DEPENDENCY\",se[se.INCOMPATIBLE_PEER_DEPENDENCY=60]=\"INCOMPATIBLE_PEER_DEPENDENCY\",se[se.DEPRECATED_PACKAGE=61]=\"DEPRECATED_PACKAGE\",se[se.INCOMPATIBLE_OS=62]=\"INCOMPATIBLE_OS\",se[se.INCOMPATIBLE_CPU=63]=\"INCOMPATIBLE_CPU\",se[se.FROZEN_ARTIFACT_EXCEPTION=64]=\"FROZEN_ARTIFACT_EXCEPTION\",se[se.TELEMETRY_NOTICE=65]=\"TELEMETRY_NOTICE\",se[se.PATCH_HUNK_FAILED=66]=\"PATCH_HUNK_FAILED\",se[se.INVALID_CONFIGURATION_VALUE=67]=\"INVALID_CONFIGURATION_VALUE\",se[se.UNUSED_PACKAGE_EXTENSION=68]=\"UNUSED_PACKAGE_EXTENSION\",se[se.REDUNDANT_PACKAGE_EXTENSION=69]=\"REDUNDANT_PACKAGE_EXTENSION\",se[se.AUTO_NM_SUCCESS=70]=\"AUTO_NM_SUCCESS\",se[se.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]=\"NM_CANT_INSTALL_EXTERNAL_SOFT_LINK\",se[se.NM_PRESERVE_SYMLINKS_REQUIRED=72]=\"NM_PRESERVE_SYMLINKS_REQUIRED\",se[se.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]=\"UPDATE_LOCKFILE_ONLY_SKIP_LINK\",se[se.NM_HARDLINKS_MODE_DOWNGRADED=74]=\"NM_HARDLINKS_MODE_DOWNGRADED\",se[se.PROLOG_INSTANTIATION_ERROR=75]=\"PROLOG_INSTANTIATION_ERROR\",se[se.INCOMPATIBLE_ARCHITECTURE=76]=\"INCOMPATIBLE_ARCHITECTURE\",se[se.GHOST_ARCHITECTURE=77]=\"GHOST_ARCHITECTURE\",se[se.PROLOG_LIMIT_EXCEEDED=79]=\"PROLOG_LIMIT_EXCEEDED\",se))(Ct||{});function FA(r){return`YN${r.toString(10).padStart(4,\"0\")}`}function LI(r){let e=Number(r.slice(2));if(typeof Ct[e]>\"u\")throw new Error(`Unknown message name: \"${r}\"`);return e}var P={};ut(P,{areDescriptorsEqual:()=>S8,areIdentsEqual:()=>sC,areLocatorsEqual:()=>oC,areVirtualPackagesEquivalent:()=>LSe,bindDescriptor:()=>NSe,bindLocator:()=>TSe,convertDescriptorToLocator:()=>Sw,convertLocatorToDescriptor:()=>HD,convertPackageToLocator:()=>FSe,convertToIdent:()=>RSe,convertToManifestRange:()=>KSe,copyPackage:()=>rC,devirtualizeDescriptor:()=>iC,devirtualizeLocator:()=>nC,getIdentVendorPath:()=>qD,isPackageCompatible:()=>kw,isVirtualDescriptor:()=>JA,isVirtualLocator:()=>qo,makeDescriptor:()=>_t,makeIdent:()=>Jo,makeLocator:()=>nn,makeRange:()=>xw,parseDescriptor:()=>WA,parseFileStyleRange:()=>MSe,parseIdent:()=>tn,parseLocator:()=>Dc,parseRange:()=>vf,prettyDependent:()=>nP,prettyDescriptor:()=>tr,prettyIdent:()=>Ai,prettyLocator:()=>mt,prettyLocatorNoColors:()=>jD,prettyRange:()=>Dw,prettyReference:()=>AC,prettyResolution:()=>iP,prettyWorkspace:()=>lC,renamePackage:()=>tC,slugifyIdent:()=>UD,slugifyLocator:()=>xf,sortDescriptors:()=>Pf,stringifyDescriptor:()=>Sn,stringifyIdent:()=>Mt,stringifyLocator:()=>Es,tryParseDescriptor:()=>aC,tryParseIdent:()=>v8,tryParseLocator:()=>vw,virtualizeDescriptor:()=>GD,virtualizePackage:()=>YD});var Sf=Pe(J(\"querystring\")),B8=Pe(Xr()),b8=Pe(mJ());var ee={};ut(ee,{LogLevel:()=>Xy,Style:()=>_x,Type:()=>Ue,addLogFilterSupport:()=>Xd,applyColor:()=>Qn,applyHyperlink:()=>If,applyStyle:()=>Vy,json:()=>Bc,jsonOrPretty:()=>h0e,mark:()=>rP,pretty:()=>$e,prettyField:()=>Go,prettyList:()=>tP,supportsColor:()=>zy,supportsHyperlinks:()=>eP,tuple:()=>no});var Vd=Pe(wx()),zd=Pe(Ac());var p3=Pe(Bn()),d3=Pe(n3());var Ie={};ut(Ie,{AsyncActions:()=>Gx,BufferStream:()=>Hx,CachingStrategy:()=>f3,DefaultStream:()=>Yx,allSettledSafe:()=>io,assertNever:()=>qx,bufferStream:()=>Cf,buildIgnorePattern:()=>c0e,convertMapsToIndexableObjects:()=>Jy,dynamicRequire:()=>mf,escapeRegExp:()=>n0e,getArrayWithDefault:()=>hf,getFactoryWithDefault:()=>Ta,getMapWithDefault:()=>pf,getSetWithDefault:()=>wc,isIndexableObject:()=>Ux,isPathLike:()=>u0e,isTaggedYarnVersion:()=>i0e,mapAndFilter:()=>Ho,mapAndFind:()=>Jd,overrideType:()=>s0e,parseBoolean:()=>Wd,parseOptionalBoolean:()=>h3,prettifyAsyncErrors:()=>df,prettifySyncErrors:()=>Jx,releaseAfterUseAsync:()=>a0e,replaceEnvVariables:()=>Wx,sortMap:()=>bn,tryParseOptionalBoolean:()=>zx,validateEnum:()=>o0e});var o3=Pe(Bn()),a3=Pe(Jg()),A3=Pe(Xr()),jx=J(\"stream\");function i0e(r){return!!(A3.default.valid(r)&&r.match(/^[^-]+(-rc\\.[0-9]+)?$/))}function n0e(r){return r.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function s0e(r){}function qx(r){throw new Error(`Assertion failed: Unexpected object '${r}'`)}function o0e(r,e){let t=Object.values(r);if(!t.includes(e))throw new Qe(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${t.map(i=>JSON.stringify(i)).join(\", \")})`);return e}function Ho(r,e){let t=[];for(let i of r){let n=e(i);n!==l3&&t.push(n)}return t}var l3=Symbol();Ho.skip=l3;function Jd(r,e){for(let t of r){let i=e(t);if(i!==c3)return i}}var c3=Symbol();Jd.skip=c3;function Ux(r){return typeof r==\"object\"&&r!==null}async function io(r){let e=await Promise.allSettled(r),t=[];for(let i of e){if(i.status===\"rejected\")throw i.reason;t.push(i.value)}return t}function Jy(r){if(r instanceof Map&&(r=Object.fromEntries(r)),Ux(r))for(let e of Object.keys(r)){let t=r[e];Ux(t)&&(r[e]=Jy(t))}return r}function Ta(r,e,t){let i=r.get(e);return typeof i>\"u\"&&r.set(e,i=t()),i}function hf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=[]),t}function wc(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Set),t}function pf(r,e){let t=r.get(e);return typeof t>\"u\"&&r.set(e,t=new Map),t}async function a0e(r,e){if(e==null)return await r();try{return await r()}finally{await e()}}async function df(r,e){try{return await r()}catch(t){throw t.message=e(t.message),t}}function Jx(r,e){try{return r()}catch(t){throw t.message=e(t.message),t}}async function Cf(r){return await new Promise((e,t)=>{let i=[];r.on(\"error\",n=>{t(n)}),r.on(\"data\",n=>{i.push(n)}),r.on(\"end\",()=>{e(Buffer.concat(i))})})}var Hx=class extends jx.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: BufferStream only accept buffers\");this.chunks.push(t),n(null,null)}_flush(t){t(null,Buffer.concat(this.chunks))}};function A0e(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var Gx=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,a3.default)(e)}set(e,t){let i=this.deferred.get(e);typeof i>\"u\"&&this.deferred.set(e,i=A0e());let n=this.limit(()=>t());return this.promises.set(e,n),n.then(()=>{this.promises.get(e)===n&&i.resolve()},s=>{this.promises.get(e)===n&&i.reject(s)}),i.promise}reduce(e,t){var n;let i=(n=this.promises.get(e))!=null?n:Promise.resolve();this.set(e,()=>t(i))}async wait(){await Promise.all(this.promises.values())}},Yx=class extends jx.Transform{constructor(t=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=t}_transform(t,i,n){if(i!==\"buffer\"||!Buffer.isBuffer(t))throw new Error(\"Assertion failed: DefaultStream only accept buffers\");this.active=!1,n(null,t)}_flush(t){this.active&&this.ifEmpty.length>0?t(null,this.ifEmpty):t(null)}},qd=eval(\"require\");function u3(r){return qd(K.fromPortablePath(r))}function g3(path){let physicalPath=K.fromPortablePath(path),currentCacheEntry=qd.cache[physicalPath];delete qd.cache[physicalPath];let result;try{result=u3(physicalPath);let freshCacheEntry=qd.cache[physicalPath],dynamicModule=eval(\"module\"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{qd.cache[physicalPath]=currentCacheEntry}return result}var s3=new Map;function l0e(r){let e=s3.get(r),t=O.statSync(r);if((e==null?void 0:e.mtime)===t.mtimeMs)return e.instance;let i=g3(r);return s3.set(r,{mtime:t.mtimeMs,instance:i}),i}var f3=(i=>(i[i.NoCache=0]=\"NoCache\",i[i.FsTime=1]=\"FsTime\",i[i.Node=2]=\"Node\",i))(f3||{});function mf(r,{cachingStrategy:e=2}={}){switch(e){case 0:return g3(r);case 1:return l0e(r);case 2:return u3(r);default:throw new Error(\"Unsupported caching strategy\")}}function bn(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function c0e(r){return r.length===0?null:r.map(e=>`(${o3.default.makeRe(e,{windows:!1,dot:!0}).source})`).join(\"|\")}function Wx(r,{env:e}){let t=/\\${(?<variableName>[\\d\\w_]+)(?<colon>:)?(?:-(?<fallback>[^}]*))?}/g;return r.replace(t,(...i)=>{let{variableName:n,colon:s,fallback:o}=i[i.length-1],a=Object.prototype.hasOwnProperty.call(e,n),l=e[n];if(l||a&&!s)return l;if(o!=null)return o;throw new Qe(`Environment variable not found (${n})`)})}function Wd(r){switch(r){case\"true\":case\"1\":case 1:case!0:return!0;case\"false\":case\"0\":case 0:case!1:return!1;default:throw new Error(`Couldn't parse \"${r}\" as a boolean`)}}function h3(r){return typeof r>\"u\"?r:Wd(r)}function zx(r){try{return h3(r)}catch{return null}}function u0e(r){return!!(K.isAbsolute(r)||r.match(/^(\\.{1,2}|~)\\//))}var Ef=(t=>(t.HARD=\"HARD\",t.SOFT=\"SOFT\",t))(Ef||{}),Vx=(i=>(i.Dependency=\"Dependency\",i.PeerDependency=\"PeerDependency\",i.PeerDependencyMeta=\"PeerDependencyMeta\",i))(Vx||{}),Xx=(i=>(i.Inactive=\"inactive\",i.Redundant=\"redundant\",i.Active=\"active\",i))(Xx||{});var Ue={NO_HINT:\"NO_HINT\",NULL:\"NULL\",SCOPE:\"SCOPE\",NAME:\"NAME\",RANGE:\"RANGE\",REFERENCE:\"REFERENCE\",NUMBER:\"NUMBER\",PATH:\"PATH\",URL:\"URL\",ADDED:\"ADDED\",REMOVED:\"REMOVED\",CODE:\"CODE\",DURATION:\"DURATION\",SIZE:\"SIZE\",IDENT:\"IDENT\",DESCRIPTOR:\"DESCRIPTOR\",LOCATOR:\"LOCATOR\",RESOLUTION:\"RESOLUTION\",DEPENDENT:\"DEPENDENT\",PACKAGE_EXTENSION:\"PACKAGE_EXTENSION\",SETTING:\"SETTING\",MARKDOWN:\"MARKDOWN\"},_x=(e=>(e[e.BOLD=2]=\"BOLD\",e))(_x||{}),$x=zd.default.GITHUB_ACTIONS?{level:2}:Vd.default.supportsColor?{level:Vd.default.supportsColor.level}:{level:0},zy=$x.level!==0,eP=zy&&!zd.default.GITHUB_ACTIONS&&!zd.default.CIRCLE&&!zd.default.GITLAB,Zx=new Vd.default.Instance($x),g0e=new Map([[Ue.NO_HINT,null],[Ue.NULL,[\"#a853b5\",129]],[Ue.SCOPE,[\"#d75f00\",166]],[Ue.NAME,[\"#d7875f\",173]],[Ue.RANGE,[\"#00afaf\",37]],[Ue.REFERENCE,[\"#87afff\",111]],[Ue.NUMBER,[\"#ffd700\",220]],[Ue.PATH,[\"#d75fd7\",170]],[Ue.URL,[\"#d75fd7\",170]],[Ue.ADDED,[\"#5faf00\",70]],[Ue.REMOVED,[\"#d70000\",160]],[Ue.CODE,[\"#87afff\",111]],[Ue.SIZE,[\"#ffd700\",220]]]),ms=r=>r,Wy={[Ue.NUMBER]:ms({pretty:(r,e)=>Qn(r,`${e}`,Ue.NUMBER),json:r=>r}),[Ue.IDENT]:ms({pretty:(r,e)=>Ai(r,e),json:r=>Mt(r)}),[Ue.LOCATOR]:ms({pretty:(r,e)=>mt(r,e),json:r=>Es(r)}),[Ue.DESCRIPTOR]:ms({pretty:(r,e)=>tr(r,e),json:r=>Sn(r)}),[Ue.RESOLUTION]:ms({pretty:(r,{descriptor:e,locator:t})=>iP(r,e,t),json:({descriptor:r,locator:e})=>({descriptor:Sn(r),locator:e!==null?Es(e):null})}),[Ue.DEPENDENT]:ms({pretty:(r,{locator:e,descriptor:t})=>nP(r,e,t),json:({locator:r,descriptor:e})=>({locator:Es(r),descriptor:Sn(e)})}),[Ue.PACKAGE_EXTENSION]:ms({pretty:(r,e)=>{switch(e.type){case\"Dependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"dependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependency\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependencies\",Ue.CODE)} \\u27A4 ${Ai(r,e.descriptor)}`;case\"PeerDependencyMeta\":return`${Ai(r,e.parentDescriptor)} \\u27A4 ${Qn(r,\"peerDependenciesMeta\",Ue.CODE)} \\u27A4 ${Ai(r,tn(e.selector))} \\u27A4 ${Qn(r,e.key,Ue.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:r=>{switch(r.type){case\"Dependency\":return`${Mt(r.parentDescriptor)} > ${Mt(r.descriptor)}`;case\"PeerDependency\":return`${Mt(r.parentDescriptor)} >> ${Mt(r.descriptor)}`;case\"PeerDependencyMeta\":return`${Mt(r.parentDescriptor)} >> ${r.selector} / ${r.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${r.type}`)}}}),[Ue.SETTING]:ms({pretty:(r,e)=>(r.get(e),If(r,Qn(r,e,Ue.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:r=>r}),[Ue.DURATION]:ms({pretty:(r,e)=>{if(e>1e3*60){let t=Math.floor(e/1e3/60),i=Math.ceil((e-t*60*1e3)/1e3);return i===0?`${t}m`:`${t}m ${i}s`}else{let t=Math.floor(e/1e3),i=e-t*1e3;return i===0?`${t}s`:`${t}s ${i}ms`}},json:r=>r}),[Ue.SIZE]:ms({pretty:(r,e)=>{let t=[\"KB\",\"MB\",\"GB\",\"TB\"],i=t.length;for(;i>1&&e<1024**i;)i-=1;let n=1024**i,s=Math.floor(e*100/n)/100;return Qn(r,`${s} ${t[i-1]}`,Ue.NUMBER)},json:r=>r}),[Ue.PATH]:ms({pretty:(r,e)=>Qn(r,K.fromPortablePath(e),Ue.PATH),json:r=>K.fromPortablePath(r)}),[Ue.MARKDOWN]:ms({pretty:(r,{text:e,format:t,paragraphs:i})=>Ti(e,{format:t,paragraphs:i}),json:({text:r})=>r})};function no(r,e){return[e,r]}function Vy(r,e,t){return r.get(\"enableColors\")&&t&2&&(e=Vd.default.bold(e)),e}function Qn(r,e,t){if(!r.get(\"enableColors\"))return e;let i=g0e.get(t);if(i===null)return e;let n=typeof i>\"u\"?t:$x.level>=3?i[0]:i[1],s=typeof n==\"number\"?Zx.ansi256(n):n.startsWith(\"#\")?Zx.hex(n):Zx[n];if(typeof s!=\"function\")throw new Error(`Invalid format type ${n}`);return s(e)}var f0e=!!process.env.KONSOLE_VERSION;function If(r,e,t){return r.get(\"enableHyperlinks\")?f0e?`\\x1B]8;;${t}\\x1B\\\\${e}\\x1B]8;;\\x1B\\\\`:`\\x1B]8;;${t}\\x07${e}\\x1B]8;;\\x07`:e}function $e(r,e,t){if(e===null)return Qn(r,\"null\",Ue.NULL);if(Object.prototype.hasOwnProperty.call(Wy,t))return Wy[t].pretty(r,e);if(typeof e!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Qn(r,e,t)}function tP(r,e,t,{separator:i=\", \"}={}){return[...e].map(n=>$e(r,n,t)).join(i)}function Bc(r,e){if(r===null)return null;if(Object.prototype.hasOwnProperty.call(Wy,e))return Wy[e].json(r);if(typeof r!=\"string\")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof r}`);return r}function h0e(r,e,[t,i]){return r?Bc(t,i):$e(e,t,i)}function rP(r){return{Check:Qn(r,\"\\u2713\",\"green\"),Cross:Qn(r,\"\\u2718\",\"red\"),Question:Qn(r,\"?\",\"cyan\")}}function Go(r,{label:e,value:[t,i]}){return`${$e(r,e,Ue.CODE)}: ${$e(r,t,i)}`}var Xy=(n=>(n.Error=\"error\",n.Warning=\"warning\",n.Info=\"info\",n.Discard=\"discard\",n))(Xy||{});function Xd(r,{configuration:e}){let t=e.get(\"logFilters\"),i=new Map,n=new Map,s=[];for(let g of t){let f=g.get(\"level\");if(typeof f>\"u\")continue;let h=g.get(\"code\");typeof h<\"u\"&&i.set(h,f);let p=g.get(\"text\");typeof p<\"u\"&&n.set(p,f);let C=g.get(\"pattern\");typeof C<\"u\"&&s.push([p3.default.matcher(C,{contains:!0}),f])}s.reverse();let o=(g,f,h)=>{if(g===null||g===0)return h;let p=n.size>0||s.length>0?(0,d3.default)(f):f;if(n.size>0){let C=n.get(p);if(typeof C<\"u\")return C!=null?C:h}if(s.length>0){for(let[C,y]of s)if(C(p))return y!=null?y:h}if(i.size>0){let C=i.get(FA(g));if(typeof C<\"u\")return C!=null?C:h}return h},a=r.reportInfo,l=r.reportWarning,c=r.reportError,u=function(g,f,h,p){switch(o(f,h,p)){case\"info\":a.call(g,f,h);break;case\"warning\":l.call(g,f!=null?f:0,h);break;case\"error\":c.call(g,f!=null?f:0,h);break}};r.reportInfo=function(...g){return u(this,...g,\"info\")},r.reportWarning=function(...g){return u(this,...g,\"warning\")},r.reportError=function(...g){return u(this,...g,\"error\")}}var li={};ut(li,{checksumFile:()=>bw,checksumPattern:()=>Qw,makeHash:()=>rn});var Bw=J(\"crypto\"),KD=Pe(OD());function rn(...r){let e=(0,Bw.createHash)(\"sha512\"),t=\"\";for(let i of r)typeof i==\"string\"?t+=i:i&&(t&&(e.update(t),t=\"\"),e.update(i));return t&&e.update(t),e.digest(\"hex\")}async function bw(r,{baseFs:e,algorithm:t}={baseFs:O,algorithm:\"sha512\"}){let i=await e.openPromise(r,\"r\");try{let s=Buffer.allocUnsafeSlow(65536),o=(0,Bw.createHash)(t),a=0;for(;(a=await e.readPromise(i,s,0,65536))!==0;)o.update(a===65536?s:s.slice(0,a));return o.digest(\"hex\")}finally{await e.closePromise(i)}}async function Qw(r,{cwd:e}){let i=(await(0,KD.default)(r,{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(a=>`${a}/**/*`),n=await(0,KD.default)([r,...i],{cwd:K.fromPortablePath(e),expandDirectories:!1,onlyFiles:!1,unique:!0});n.sort();let s=await Promise.all(n.map(async a=>{let l=[Buffer.from(a)],c=K.toPortablePath(a),u=await O.lstatPromise(c);return u.isSymbolicLink()?l.push(Buffer.from(await O.readlinkPromise(c))):u.isFile()&&l.push(await O.readFilePromise(c)),l.join(\"\\0\")})),o=(0,Bw.createHash)(\"sha512\");for(let a of s)o.update(a);return o.digest(\"hex\")}var eC=\"virtual:\",DSe=5,Q8=/(os|cpu|libc)=([a-z0-9_-]+)/,kSe=(0,b8.makeParser)(Q8);function Jo(r,e){if(r!=null&&r.startsWith(\"@\"))throw new Error(\"Invalid scope: don't prefix it with '@'\");return{identHash:rn(r,e),scope:r,name:e}}function _t(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:rn(r.identHash,e),range:e}}function nn(r,e){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:rn(r.identHash,e),reference:e}}function RSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name}}function Sw(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.descriptorHash,reference:r.range}}function HD(r){return{identHash:r.identHash,scope:r.scope,name:r.name,descriptorHash:r.locatorHash,range:r.reference}}function FSe(r){return{identHash:r.identHash,scope:r.scope,name:r.name,locatorHash:r.locatorHash,reference:r.reference}}function tC(r,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:r.version,languageName:r.languageName,linkType:r.linkType,conditions:r.conditions,dependencies:new Map(r.dependencies),peerDependencies:new Map(r.peerDependencies),dependenciesMeta:new Map(r.dependenciesMeta),peerDependenciesMeta:new Map(r.peerDependenciesMeta),bin:new Map(r.bin)}}function rC(r){return tC(r,r)}function GD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return _t(r,`virtual:${e}#${r.range}`)}function YD(r,e){if(e.includes(\"#\"))throw new Error(\"Invalid entropy\");return tC(r,nn(r,`virtual:${e}#${r.reference}`))}function JA(r){return r.range.startsWith(eC)}function qo(r){return r.reference.startsWith(eC)}function iC(r){if(!JA(r))throw new Error(\"Not a virtual descriptor\");return _t(r,r.range.replace(/^[^#]*#/,\"\"))}function nC(r){if(!qo(r))throw new Error(\"Not a virtual descriptor\");return nn(r,r.reference.replace(/^[^#]*#/,\"\"))}function NSe(r,e){return r.range.includes(\"::\")?r:_t(r,`${r.range}::${Sf.default.stringify(e)}`)}function TSe(r,e){return r.reference.includes(\"::\")?r:nn(r,`${r.reference}::${Sf.default.stringify(e)}`)}function sC(r,e){return r.identHash===e.identHash}function S8(r,e){return r.descriptorHash===e.descriptorHash}function oC(r,e){return r.locatorHash===e.locatorHash}function LSe(r,e){if(!qo(r))throw new Error(\"Invalid package type\");if(!qo(e))throw new Error(\"Invalid package type\");if(!sC(r,e)||r.dependencies.size!==e.dependencies.size)return!1;for(let t of r.dependencies.values()){let i=e.dependencies.get(t.identHash);if(!i||!S8(t,i))return!1}return!0}function tn(r){let e=v8(r);if(!e)throw new Error(`Invalid ident (${r})`);return e}function v8(r){let e=r.match(/^(?:@([^/]+?)\\/)?([^/]+)$/);if(!e)return null;let[,t,i]=e;return Jo(typeof t<\"u\"?t:null,i)}function WA(r,e=!1){let t=aC(r,e);if(!t)throw new Error(`Invalid descriptor (${r})`);return t}function aC(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid range (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return _t(Jo(o,n),a)}function Dc(r,e=!1){let t=vw(r,e);if(!t)throw new Error(`Invalid locator (${r})`);return t}function vw(r,e=!1){let t=e?r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))$/):r.match(/^(?:@([^/]+?)\\/)?([^/]+?)(?:@(.+))?$/);if(!t)return null;let[,i,n,s]=t;if(s===\"unknown\")throw new Error(`Invalid reference (${r})`);let o=typeof i<\"u\"?i:null,a=typeof s<\"u\"?s:\"unknown\";return nn(Jo(o,n),a)}function vf(r,e){let t=r.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(t===null)throw new Error(`Invalid range (${r})`);let i=typeof t[1]<\"u\"?t[1]:null;if(typeof(e==null?void 0:e.requireProtocol)==\"string\"&&i!==e.requireProtocol)throw new Error(`Invalid protocol (${i})`);if((e==null?void 0:e.requireProtocol)&&i===null)throw new Error(`Missing protocol (${i})`);let n=typeof t[3]<\"u\"?decodeURIComponent(t[2]):null;if((e==null?void 0:e.requireSource)&&n===null)throw new Error(`Missing source (${r})`);let s=typeof t[3]<\"u\"?decodeURIComponent(t[3]):decodeURIComponent(t[2]),o=e!=null&&e.parseSelector?Sf.default.parse(s):s,a=typeof t[4]<\"u\"?Sf.default.parse(t[4]):null;return{protocol:i,source:n,selector:o,params:a}}function MSe(r,{protocol:e}){let{selector:t,params:i}=vf(r,{requireProtocol:e,requireBindings:!0});if(typeof i.locator!=\"string\")throw new Error(`Assertion failed: Invalid bindings for ${r}`);return{parentLocator:Dc(i.locator,!0),path:t}}function w8(r){return r=r.replace(/%/g,\"%25\"),r=r.replace(/:/g,\"%3A\"),r=r.replace(/#/g,\"%23\"),r}function OSe(r){return r===null?!1:Object.entries(r).length>0}function xw({protocol:r,source:e,selector:t,params:i}){let n=\"\";return r!==null&&(n+=`${r}`),e!==null&&(n+=`${w8(e)}#`),n+=w8(t),OSe(i)&&(n+=`::${Sf.default.stringify(i)}`),n}function KSe(r){let{params:e,protocol:t,source:i,selector:n}=vf(r);for(let s in e)s.startsWith(\"__\")&&delete e[s];return xw({protocol:t,source:i,params:e,selector:n})}function Mt(r){return r.scope?`@${r.scope}/${r.name}`:`${r.name}`}function Sn(r){return r.scope?`@${r.scope}/${r.name}@${r.range}`:`${r.name}@${r.range}`}function Es(r){return r.scope?`@${r.scope}/${r.name}@${r.reference}`:`${r.name}@${r.reference}`}function UD(r){return r.scope!==null?`@${r.scope}-${r.name}`:r.name}function xf(r){let{protocol:e,selector:t}=vf(r.reference),i=e!==null?e.replace(/:$/,\"\"):\"exotic\",n=B8.default.valid(t),s=n!==null?`${i}-${n}`:`${i}`,o=10,a=r.scope?`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`:`${UD(r)}-${s}-${r.locatorHash.slice(0,o)}`;return Jr(a)}function Ai(r,e){return e.scope?`${$e(r,`@${e.scope}/`,Ue.SCOPE)}${$e(r,e.name,Ue.NAME)}`:`${$e(r,e.name,Ue.NAME)}`}function Pw(r){if(r.startsWith(eC)){let e=Pw(r.substring(r.indexOf(\"#\")+1)),t=r.substring(eC.length,eC.length+DSe);return`${e} [${t}]`}else return r.replace(/\\?.*/,\"?[...]\")}function Dw(r,e){return`${$e(r,Pw(e),Ue.RANGE)}`}function tr(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.RANGE)}${Dw(r,e.range)}`}function AC(r,e){return`${$e(r,Pw(e),Ue.REFERENCE)}`}function mt(r,e){return`${Ai(r,e)}${$e(r,\"@\",Ue.REFERENCE)}${AC(r,e.reference)}`}function jD(r){return`${Mt(r)}@${Pw(r.reference)}`}function Pf(r){return bn(r,[e=>Mt(e),e=>e.range])}function lC(r,e){return Ai(r,e.locator)}function iP(r,e,t){let i=JA(e)?iC(e):e;return t===null?`${tr(r,i)} \\u2192 ${rP(r).Cross}`:i.identHash===t.identHash?`${tr(r,i)} \\u2192 ${AC(r,t.reference)}`:`${tr(r,i)} \\u2192 ${mt(r,t)}`}function nP(r,e,t){return t===null?`${mt(r,e)}`:`${mt(r,e)} (via ${Dw(r,t.range)})`}function qD(r){return`node_modules/${Mt(r)}`}function kw(r,e){return r.conditions?kSe(r.conditions,t=>{let[,i,n]=t.match(Q8),s=e[i];return s?s.includes(n):!0}):!0}var x8={hooks:{reduceDependency:(r,e,t,i,{resolver:n,resolveOptions:s})=>{for(let{pattern:o,reference:a}of e.topLevelWorkspace.manifest.resolutions){if(o.from&&o.from.fullName!==Mt(t)||o.from&&o.from.description&&o.from.description!==t.reference||o.descriptor.fullName!==Mt(r)||o.descriptor.description&&o.descriptor.description!==r.range)continue;return n.bindDescriptor(_t(r,a),e.topLevelWorkspace.anchoredLocator,s)}return r},validateProject:async(r,e)=>{for(let t of r.workspaces){let i=lC(r.configuration,t);await r.configuration.triggerHook(n=>n.validateWorkspace,t,{reportWarning:(n,s)=>e.reportWarning(n,`${i}: ${s}`),reportError:(n,s)=>e.reportError(n,`${i}: ${s}`)})}},validateWorkspace:async(r,e)=>{let{manifest:t}=r;t.resolutions.length&&r.cwd!==r.project.cwd&&t.errors.push(new Error(\"Resolutions field will be ignored\"));for(let i of t.errors)e.reportWarning(57,i.message)}}};var T8=Pe(Xr());var cC=class{supportsDescriptor(e,t){return!!(e.range.startsWith(cC.protocol)||t.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,t){return!!e.reference.startsWith(cC.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[i.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.getWorkspaceByCwd(e.reference.slice(cC.protocol.length));return{...e,version:i.manifest.version||\"0.0.0\",languageName:\"unknown\",linkType:\"SOFT\",conditions:null,dependencies:new Map([...i.manifest.dependencies,...i.manifest.devDependencies]),peerDependencies:new Map([...i.manifest.peerDependencies]),dependenciesMeta:i.manifest.dependenciesMeta,peerDependenciesMeta:i.manifest.peerDependenciesMeta,bin:i.manifest.bin}}},Yr=cC;Yr.protocol=\"workspace:\";var vt={};ut(vt,{SemVer:()=>k8.SemVer,clean:()=>HSe,satisfiesWithPrereleases:()=>kc,validRange:()=>so});var Rw=Pe(Xr()),k8=Pe(Xr()),P8=new Map;function kc(r,e,t=!1){if(!r)return!1;let i=`${e}${t}`,n=P8.get(i);if(typeof n>\"u\")try{n=new Rw.default.Range(e,{includePrerelease:!0,loose:t})}catch{return!1}finally{P8.set(i,n||null)}else if(n===null)return!1;let s;try{s=new Rw.default.SemVer(r,n)}catch{return!1}return n.test(s)?!0:(s.prerelease&&(s.prerelease=[]),n.set.some(o=>{for(let a of o)a.semver.prerelease&&(a.semver.prerelease=[]);return o.every(a=>a.test(s))}))}var D8=new Map;function so(r){if(r.indexOf(\":\")!==-1)return null;let e=D8.get(r);if(typeof e<\"u\")return e;try{e=new Rw.default.Range(r)}catch{e=null}return D8.set(r,e),e}var USe=/^(?:[\\sv=]*?)((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(?:\\s*)$/;function HSe(r){let e=USe.exec(r);return e?e[1]:null}var zA=class{constructor(){this.indent=\"  \";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:t=new $t}={}){let i=x.join(e,\"package.json\");try{return await zA.fromFile(i,{baseFs:t})}catch(n){if(n.code===\"ENOENT\")return null;throw n}}static async find(e,{baseFs:t}={}){let i=await zA.tryFind(e,{baseFs:t});if(i===null)throw new Error(\"Manifest not found\");return i}static async fromFile(e,{baseFs:t=new $t}={}){let i=new zA;return await i.loadFile(e,{baseFs:t}),i}static fromText(e){let t=new zA;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(e===null)return!0;let i=!0,n=!1;for(let s of e)if(s[0]===\"!\"){if(n=!0,t===s.slice(1))return!1}else if(i=!1,s===t)return!0;return n&&i}loadFromText(e){let t;try{t=JSON.parse(F8(e)||\"{}\")}catch(i){throw i.message+=` (when parsing ${e})`,i}this.load(t),this.indent=R8(e)}async loadFile(e,{baseFs:t=new $t}){let i=await t.readFilePromise(e,\"utf8\"),n;try{n=JSON.parse(F8(i)||\"{}\")}catch(s){throw s.message+=` (when parsing ${e})`,s}this.load(n),this.indent=R8(i)}load(e,{yamlCompatibilityMode:t=!1}={}){if(typeof e!=\"object\"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let i=[];if(this.name=null,typeof e.name==\"string\")try{this.name=tn(e.name)}catch{i.push(new Error(\"Parsing failed for the 'name' field\"))}if(typeof e.version==\"string\"?this.version=e.version:this.version=null,Array.isArray(e.os)){let s=[];this.os=s;for(let o of e.os)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'os' field\")):s.push(o)}else this.os=null;if(Array.isArray(e.cpu)){let s=[];this.cpu=s;for(let o of e.cpu)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'cpu' field\")):s.push(o)}else this.cpu=null;if(Array.isArray(e.libc)){let s=[];this.libc=s;for(let o of e.libc)typeof o!=\"string\"?i.push(new Error(\"Parsing failed for the 'libc' field\")):s.push(o)}else this.libc=null;if(typeof e.type==\"string\"?this.type=e.type:this.type=null,typeof e.packageManager==\"string\"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private==\"boolean\"?this.private=e.private:this.private=!1,typeof e.license==\"string\"?this.license=e.license:this.license=null,typeof e.languageName==\"string\"?this.languageName=e.languageName:this.languageName=null,typeof e.main==\"string\"?this.main=sn(e.main):this.main=null,typeof e.module==\"string\"?this.module=sn(e.module):this.module=null,e.browser!=null)if(typeof e.browser==\"string\")this.browser=sn(e.browser);else{this.browser=new Map;for(let[s,o]of Object.entries(e.browser))this.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}else this.browser=null;if(this.bin=new Map,typeof e.bin==\"string\")this.name!==null?this.bin.set(this.name.name,sn(e.bin)):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.bin==\"object\"&&e.bin!==null)for(let[s,o]of Object.entries(e.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}let a=tn(s);this.bin.set(a.name,sn(o))}if(this.scripts=new Map,typeof e.scripts==\"object\"&&e.scripts!==null)for(let[s,o]of Object.entries(e.scripts)){if(typeof o!=\"string\"){i.push(new Error(`Invalid script definition for '${s}'`));continue}this.scripts.set(s,o)}if(this.dependencies=new Map,typeof e.dependencies==\"object\"&&e.dependencies!==null)for(let[s,o]of Object.entries(e.dependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l)}if(this.devDependencies=new Map,typeof e.devDependencies==\"object\"&&e.devDependencies!==null)for(let[s,o]of Object.entries(e.devDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.devDependencies.set(l.identHash,l)}if(this.peerDependencies=new Map,typeof e.peerDependencies==\"object\"&&e.peerDependencies!==null)for(let[s,o]of Object.entries(e.peerDependencies)){let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}(typeof o!=\"string\"||!o.startsWith(Yr.protocol)&&!so(o))&&(i.push(new Error(`Invalid dependency range for '${s}'`)),o=\"*\");let l=_t(a,o);this.peerDependencies.set(l.identHash,l)}typeof e.workspaces==\"object\"&&e.workspaces!==null&&e.workspaces.nohoist&&i.push(new Error(\"'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead\"));let n=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces==\"object\"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let s of n){if(typeof s!=\"string\"){i.push(new Error(`Invalid workspace definition for '${s}'`));continue}this.workspaceDefinitions.push({pattern:s})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta==\"object\"&&e.dependenciesMeta!==null)for(let[s,o]of Object.entries(e.dependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}`));continue}let a=WA(s),l=this.ensureDependencyMeta(a),c=Fw(o.built,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid built meta field for '${s}'`));continue}let u=Fw(o.optional,{yamlCompatibilityMode:t});if(u===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}let g=Fw(o.unplugged,{yamlCompatibilityMode:t});if(g===null){i.push(new Error(`Invalid unplugged meta field for '${s}'`));continue}Object.assign(l,{built:c,optional:u,unplugged:g})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta==\"object\"&&e.peerDependenciesMeta!==null)for(let[s,o]of Object.entries(e.peerDependenciesMeta)){if(typeof o!=\"object\"||o===null){i.push(new Error(`Invalid meta field for '${s}'`));continue}let a=WA(s),l=this.ensurePeerDependencyMeta(a),c=Fw(o.optional,{yamlCompatibilityMode:t});if(c===null){i.push(new Error(`Invalid optional meta field for '${s}'`));continue}Object.assign(l,{optional:c})}if(this.resolutions=[],typeof e.resolutions==\"object\"&&e.resolutions!==null)for(let[s,o]of Object.entries(e.resolutions)){if(typeof o!=\"string\"){i.push(new Error(`Invalid resolution entry for '${s}'`));continue}try{this.resolutions.push({pattern:hI(s),reference:o})}catch(a){i.push(a);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let s of e.files){if(typeof s!=\"string\"){i.push(new Error(`Invalid files entry for '${s}'`));continue}this.files.add(s)}}else this.files=null;if(typeof e.publishConfig==\"object\"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access==\"string\"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main==\"string\"&&(this.publishConfig.main=sn(e.publishConfig.main)),typeof e.publishConfig.module==\"string\"&&(this.publishConfig.module=sn(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser==\"string\")this.publishConfig.browser=sn(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[s,o]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(sn(s),typeof o==\"string\"?sn(o):o)}if(typeof e.publishConfig.registry==\"string\"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin==\"string\")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,sn(e.publishConfig.bin)]]):i.push(new Error(\"String bin field, but no attached package name\"));else if(typeof e.publishConfig.bin==\"object\"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[s,o]of Object.entries(e.publishConfig.bin)){if(typeof o!=\"string\"){i.push(new Error(`Invalid bin definition for '${s}'`));continue}this.publishConfig.bin.set(s,sn(o))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let s of e.publishConfig.executableFiles){if(typeof s!=\"string\"){i.push(new Error(\"Invalid executable file definition\"));continue}this.publishConfig.executableFiles.add(sn(s))}}}else this.publishConfig=null;if(typeof e.installConfig==\"object\"&&e.installConfig!==null){this.installConfig={};for(let s of Object.keys(e.installConfig))s===\"hoistingLimits\"?typeof e.installConfig.hoistingLimits==\"string\"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:i.push(new Error(\"Invalid hoisting limits definition\")):s==\"selfReferences\"?typeof e.installConfig.selfReferences==\"boolean\"?this.installConfig.selfReferences=e.installConfig.selfReferences:i.push(new Error(\"Invalid selfReferences definition, must be a boolean value\")):i.push(new Error(`Unrecognized installConfig key: ${s}`))}else this.installConfig=null;if(typeof e.optionalDependencies==\"object\"&&e.optionalDependencies!==null)for(let[s,o]of Object.entries(e.optionalDependencies)){if(typeof o!=\"string\"){i.push(new Error(`Invalid dependency range for '${s}'`));continue}let a;try{a=tn(s)}catch{i.push(new Error(`Parsing failed for the dependency name '${s}'`));continue}let l=_t(a,o);this.dependencies.set(l.identHash,l);let c=_t(a,\"unknown\"),u=this.ensureDependencyMeta(c);Object.assign(u,{optional:!0})}typeof e.preferUnplugged==\"boolean\"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=i}getForScope(e){switch(e){case\"dependencies\":return this.dependencies;case\"devDependencies\":return this.devDependencies;case\"peerDependencies\":return this.peerDependencies;default:throw new Error(`Unsupported value (\"${e}\")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(JD(\"os\",this.os)),this.cpu&&this.cpu.length>0&&e.push(JD(\"cpu\",this.cpu)),this.libc&&this.libc.length>0&&e.push(JD(\"libc\",this.libc)),e.length>0?e.join(\" & \"):null}isCompatibleWithOS(e){return zA.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return zA.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if(e.range!==\"unknown\"&&!T8.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=e.range!==\"unknown\"?e.range:null,n=this.dependenciesMeta.get(t);n||this.dependenciesMeta.set(t,n=new Map);let s=n.get(i);return s||n.set(i,s={}),s}ensurePeerDependencyMeta(e){if(e.range!==\"unknown\")throw new Error(`Invalid meta field range for '${Sn(e)}'`);let t=Mt(e),i=this.peerDependenciesMeta.get(t);return i||this.peerDependenciesMeta.set(t,i={}),i}setRawField(e,t,{after:i=[]}={}){let n=new Set(i.filter(s=>Object.prototype.hasOwnProperty.call(this.raw,s)));if(n.size===0||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{let s=this.raw,o=this.raw={},a=!1;for(let l of Object.keys(s))o[l]=s[l],a||(n.delete(l),n.size===0&&(o[e]=t,a=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){var s;if(Object.assign(e,this.raw),this.name!==null?e.name=Mt(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let o=this.browser;typeof o==\"string\"?e.browser=o:o instanceof Map&&(e.browser=Object.assign({},...Array.from(o.keys()).sort().map(a=>({[a]:o.get(a)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(o=>({[o]:this.bin.get(o)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:o})=>o)}:e.workspaces=this.workspaceDefinitions.map(({pattern:o})=>o):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let i=[],n=[];for(let o of this.dependencies.values()){let a=this.dependenciesMeta.get(Mt(o)),l=!1;if(t&&a){let c=a.get(null);c&&c.optional&&(l=!0)}l?n.push(o):i.push(o)}i.length>0?e.dependencies=Object.assign({},...Pf(i).map(o=>({[Mt(o)]:o.range}))):delete e.dependencies,n.length>0?e.optionalDependencies=Object.assign({},...Pf(n).map(o=>({[Mt(o)]:o.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...Pf(this.devDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...Pf(this.peerDependencies.values()).map(o=>({[Mt(o)]:o.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[o,a]of bn(this.dependenciesMeta.entries(),([l,c])=>l))for(let[l,c]of bn(a.entries(),([u,g])=>u!==null?`0${u}`:\"1\")){let u=l!==null?Sn(_t(tn(o),l)):o,g={...c};t&&l===null&&delete g.optional,Object.keys(g).length!==0&&(e.dependenciesMeta[u]=g)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...bn(this.peerDependenciesMeta.entries(),([o,a])=>o).map(([o,a])=>({[o]:a}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:o,reference:a})=>({[pI(o)]:a}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){(s=e.scripts)!=null||(e.scripts={});for(let o of Object.keys(e.scripts))this.scripts.has(o)||delete e.scripts[o];for(let[o,a]of this.scripts.entries())e.scripts[o]=a}else delete e.scripts;return e}},ot=zA;ot.fileName=\"package.json\",ot.allDependencies=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],ot.hardDependencies=[\"dependencies\",\"devDependencies\"];function R8(r){let e=r.match(/^[ \\t]+/m);return e?e[0]:\"  \"}function F8(r){return r.charCodeAt(0)===65279?r.slice(1):r}function sn(r){return r.replace(/\\\\/g,\"/\")}function Fw(r,{yamlCompatibilityMode:e}){return e?zx(r):typeof r>\"u\"||typeof r==\"boolean\"?r:null}function N8(r,e){let t=e.search(/[^!]/);if(t===-1)return\"invalid\";let i=t%2===0?\"\":\"!\",n=e.slice(t);return`${i}${r}=${n}`}function JD(r,e){return e.length===1?N8(r,e[0]):`(${e.map(t=>N8(r,t)).join(\" | \")})`}var gz=Pe(uz()),fz=J(\"stream\"),hz=J(\"string_decoder\");var Nve=15,at=class extends Error{constructor(t,i,n){super(i);this.reportExtra=n;this.reportCode=t}};function Tve(r){return typeof r.reportCode<\"u\"}var vi=class{constructor(){this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}static progressViaCounter(e){let t=0,i,n=new Promise(l=>{i=l}),s=l=>{let c=i;n=new Promise(u=>{i=u}),t=l,c()},o=(l=0)=>{s(t+1)},a=async function*(){for(;t<e;)await n,yield{progress:t/e}}();return{[Symbol.asyncIterator](){return a},hasProgress:!0,hasTitle:!1,set:s,tick:o}}static progressViaTitle(){let e,t,i=new Promise(o=>{t=o}),n=(0,gz.default)(o=>{let a=t;i=new Promise(l=>{t=l}),e=o,a()},1e3/Nve),s=async function*(){for(;;)await i,yield{title:e}}();return{[Symbol.asyncIterator](){return s},hasProgress:!1,hasTitle:!0,setTitle:n}}async startProgressPromise(e,t){let i=this.reportProgress(e);try{return await t(e)}finally{i.stop()}}startProgressSync(e,t){let i=this.reportProgress(e);try{return t(e)}finally{i.stop()}}reportInfoOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedInfos.has(n)||(this.reportedInfos.add(n),this.reportInfo(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportWarningOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedWarnings.has(n)||(this.reportedWarnings.add(n),this.reportWarning(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportErrorOnce(e,t,i){var s;let n=i&&i.key?i.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),(s=i==null?void 0:i.reportExtra)==null||s.call(i,this))}reportExceptionOnce(e){Tve(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let t=new fz.PassThrough,i=new hz.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",e!==null?this.reportInfo(null,`${e} ${l}`):this.reportInfo(null,l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&(e!==null?this.reportInfo(null,`${e} ${s}`):this.reportInfo(null,s))}),t}};var Df=class{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){return await this.getFetcher(e,t).fetch(e,t)}tryFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));return i||null}getFetcher(e,t){let i=this.fetchers.find(n=>n.supports(e,t));if(!i)throw new at(11,`${mt(t.project.configuration,e)} isn't supported by any available fetcher`);return i}};var kf=class{constructor(e){this.resolvers=e.filter(t=>t)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.getResolverByDescriptor(e,i).bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,i){return await this.getResolverByDescriptor(e,i).getCandidates(e,t,i)}async getSatisfying(e,t,i){return this.getResolverByDescriptor(e,i).getSatisfying(e,t,i)}async resolve(e,t){return await this.getResolverByLocator(e,t).resolve(e,t)}tryResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));return i||null}getResolverByDescriptor(e,t){let i=this.resolvers.find(n=>n.supportsDescriptor(e,t));if(!i)throw new Error(`${tr(t.project.configuration,e)} isn't supported by any available resolver`);return i}tryResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));return i||null}getResolverByLocator(e,t){let i=this.resolvers.find(n=>n.supportsLocator(e,t));if(!i)throw new Error(`${mt(t.project.configuration,e)} isn't supported by any available resolver`);return i}};var pz=Pe(Xr());var Rf=/^(?!v)[a-z0-9._-]+$/i,Nw=class{supportsDescriptor(e,t){return!!(so(e.range)||Rf.test(e.range))}supportsLocator(e,t){return!!(pz.default.valid(e.reference)||Rf.test(e.reference))}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,i){return i.resolver.bindDescriptor(this.forwardDescriptor(e,i),t,i)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,i){return await i.resolver.getCandidates(this.forwardDescriptor(e,i),t,i)}async getSatisfying(e,t,i){return await i.resolver.getSatisfying(this.forwardDescriptor(e,i),t,i)}async resolve(e,t){let i=await t.resolver.resolve(this.forwardLocator(e,t),t);return tC(i,e)}forwardDescriptor(e,t){return _t(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.range}`)}forwardLocator(e,t){return nn(e,`${t.project.configuration.get(\"defaultProtocol\")}${e.reference}`)}};var Ff=class{supports(e){return!!e.reference.startsWith(\"virtual:\")}getLocalPath(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n);return t.fetcher.getLocalPath(s,t)}async fetch(e,t){let i=e.reference.indexOf(\"#\");if(i===-1)throw new Error(\"Invalid virtual package reference\");let n=e.reference.slice(i+1),s=nn(e,n),o=await t.fetcher.fetch(s,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return xf(e)}async ensureVirtualLink(e,t,i){let n=t.packageFs.getRealPath(),s=i.project.configuration.get(\"virtualFolder\"),o=this.getLocatorFilename(e),a=Br.makeVirtualPath(s,o,n),l=new So(a,{baseFs:t.packageFs,pathUtils:x});return{...t,packageFs:l}}};var Nf=class{static isVirtualDescriptor(e){return!!e.range.startsWith(Nf.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(Nf.protocol)}supportsDescriptor(e,t){return Nf.isVirtualDescriptor(e)}supportsLocator(e,t){return Nf.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){throw new Error('Assertion failed: calling \"bindDescriptor\" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling \"getResolutionDependencies\" on a virtual descriptor is unsupported')}async getCandidates(e,t,i){throw new Error('Assertion failed: calling \"getCandidates\" on a virtual descriptor is unsupported')}async getSatisfying(e,t,i){throw new Error('Assertion failed: calling \"getSatisfying\" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling \"resolve\" on a virtual locator is unsupported')}},fC=Nf;fC.protocol=\"virtual:\";var Tf=class{supports(e){return!!e.reference.startsWith(Yr.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){let i=this.getWorkspace(e,t).cwd;return{packageFs:new qt(i),prefixPath:Me.dot,localPath:i}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(Yr.protocol.length))}};var Tw={};ut(Tw,{getDefaultGlobalFolder:()=>XD,getHomeFolder:()=>hC,isFolderInside:()=>ZD});var VD=J(\"os\");function XD(){if(process.platform===\"win32\"){let r=K.toPortablePath(process.env.LOCALAPPDATA||K.join((0,VD.homedir)(),\"AppData\",\"Local\"));return x.resolve(r,\"Yarn/Berry\")}if(process.env.XDG_DATA_HOME){let r=K.toPortablePath(process.env.XDG_DATA_HOME);return x.resolve(r,\"yarn/berry\")}return x.resolve(hC(),\".yarn/berry\")}function hC(){return K.toPortablePath((0,VD.homedir)()||\"/usr/local/share\")}function ZD(r,e){let t=x.relative(e,r);return t&&!t.startsWith(\"..\")&&!x.isAbsolute(t)}var ws={};ut(ws,{availableParallelism:()=>ek,builtinModules:()=>_D,getArchitecture:()=>pC,getArchitectureName:()=>Ove,getArchitectureSet:()=>$D,openUrl:()=>Lve});var Cz=Pe(J(\"module\")),Ow=Pe(J(\"os\"));var dz=new Map([[\"darwin\",\"open\"],[\"linux\",\"xdg-open\"],[\"win32\",\"explorer.exe\"]]).get(process.platform),Lve=typeof dz<\"u\"?async r=>{try{return await tk(dz,[r],{cwd:x.cwd()}),!0}catch{return!1}}:void 0;function _D(){return new Set(Cz.default.builtinModules||Object.keys(process.binding(\"natives\")))}function Mve(){var i,n,s,o;if(process.platform===\"win32\")return null;let e=(s=((n=(i=process.report)==null?void 0:i.getReport())!=null?n:{}).sharedObjects)!=null?s:[],t=/\\/(?:(ld-linux-|[^/]+-linux-gnu\\/)|(libc.musl-|ld-musl-))/;return(o=Jd(e,a=>{let l=a.match(t);if(!l)return Jd.skip;if(l[1])return\"glibc\";if(l[2])return\"musl\";throw new Error(\"Assertion failed: Expected the libc variant to have been detected\")}))!=null?o:null}var Lw,Mw;function pC(){return Lw=Lw!=null?Lw:{os:process.platform,cpu:process.arch,libc:Mve()}}function Ove(r=pC()){return r.libc?`${r.os}-${r.cpu}-${r.libc}`:`${r.os}-${r.cpu}`}function $D(){let r=pC();return Mw=Mw!=null?Mw:{os:[r.os],cpu:[r.cpu],libc:r.libc?[r.libc]:[]}}function ek(){return\"availableParallelism\"in Ow.default?Ow.default.availableParallelism():Math.max(1,Ow.default.cpus().length)}var Kve=new Set([\"isTestEnv\",\"injectNpmUser\",\"injectNpmPassword\",\"injectNpm2FaToken\",\"binFolder\",\"version\",\"flags\",\"profile\",\"gpg\",\"ignoreNode\",\"wrapOutput\",\"home\",\"confDir\",\"registry\"]),Gw=\"yarn_\",sk=\".yarnrc.yml\",ok=\"yarn.lock\",Uve=\"********\",ak=(u=>(u.ANY=\"ANY\",u.BOOLEAN=\"BOOLEAN\",u.ABSOLUTE_PATH=\"ABSOLUTE_PATH\",u.LOCATOR=\"LOCATOR\",u.LOCATOR_LOOSE=\"LOCATOR_LOOSE\",u.NUMBER=\"NUMBER\",u.STRING=\"STRING\",u.SECRET=\"SECRET\",u.SHAPE=\"SHAPE\",u.MAP=\"MAP\",u))(ak||{}),xi=Ue,rk={lastUpdateCheck:{description:\"Last timestamp we checked whether new Yarn versions were available\",type:\"STRING\",default:null},yarnPath:{description:\"Path to the local executable that must be used over the global one\",type:\"ABSOLUTE_PATH\",default:null},ignorePath:{description:\"If true, the local executable will be ignored when using the global one\",type:\"BOOLEAN\",default:!1},ignoreCwd:{description:\"If true, the `--cwd` flag will be ignored\",type:\"BOOLEAN\",default:!1},cacheKeyOverride:{description:\"A global cache key override; used only for test purposes\",type:\"STRING\",default:null},globalFolder:{description:\"Folder where all system-global files are stored\",type:\"ABSOLUTE_PATH\",default:XD()},cacheFolder:{description:\"Folder where the cache files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/cache\"},compressionLevel:{description:\"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)\",type:\"NUMBER\",values:[\"mixed\",0,1,2,3,4,5,6,7,8,9],default:Xl},virtualFolder:{description:\"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/__virtual__\"},lockfileFilename:{description:\"Name of the files where the Yarn dependency tree entries must be stored\",type:\"STRING\",default:ok},installStatePath:{description:\"Path of the file where the install state will be persisted\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/install-state.gz\"},immutablePatterns:{description:\"Array of glob patterns; files matching them won't be allowed to change during immutable installs\",type:\"STRING\",default:[],isArray:!0},rcFilename:{description:\"Name of the files where the configuration can be found\",type:\"STRING\",default:Hw()},enableGlobalCache:{description:\"If true, the system-wide cache folder will be used regardless of `cache-folder`\",type:\"BOOLEAN\",default:!1},enableColors:{description:\"If true, the CLI is allowed to use colors in its output\",type:\"BOOLEAN\",default:zy,defaultText:\"<dynamic>\"},enableHyperlinks:{description:\"If true, the CLI is allowed to use hyperlinks in its output\",type:\"BOOLEAN\",default:eP,defaultText:\"<dynamic>\"},enableInlineBuilds:{description:\"If true, the CLI will print the build output on the command line\",type:\"BOOLEAN\",default:Kw.isCI,defaultText:\"<dynamic>\"},enableMessageNames:{description:\"If true, the CLI will prefix most messages with codes suitable for search engines\",type:\"BOOLEAN\",default:!0},enableProgressBars:{description:\"If true, the CLI is allowed to show a progress bar for long-running events\",type:\"BOOLEAN\",default:!Kw.isCI,defaultText:\"<dynamic>\"},enableTimers:{description:\"If true, the CLI is allowed to print the time spent executing commands\",type:\"BOOLEAN\",default:!0},preferAggregateCacheInfo:{description:\"If true, the CLI will only print a one-line report of any cache changes\",type:\"BOOLEAN\",default:Kw.isCI},preferInteractive:{description:\"If true, the CLI will automatically use the interactive mode when called from a TTY\",type:\"BOOLEAN\",default:!1},preferTruncatedLines:{description:\"If true, the CLI will truncate lines that would go beyond the size of the terminal\",type:\"BOOLEAN\",default:!1},progressBarStyle:{description:\"Which style of progress bar should be used (only when progress bars are enabled)\",type:\"STRING\",default:void 0,defaultText:\"<dynamic>\"},defaultLanguageName:{description:\"Default language mode that should be used when a package doesn't offer any insight\",type:\"STRING\",default:\"node\"},defaultProtocol:{description:\"Default resolution protocol used when resolving pure semver and tag ranges\",type:\"STRING\",default:\"npm:\"},enableTransparentWorkspaces:{description:\"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol\",type:\"BOOLEAN\",default:!0},supportedArchitectures:{description:\"Architectures that Yarn will fetch and inject into the resolver\",type:\"SHAPE\",properties:{os:{description:\"Array of supported process.platform strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},cpu:{description:\"Array of supported process.arch strings, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]},libc:{description:\"Array of supported libc libraries, or null to target them all\",type:\"STRING\",isArray:!0,isNullable:!0,default:[\"current\"]}}},enableMirror:{description:\"If true, the downloaded packages will be retrieved and stored in both the local and global folders\",type:\"BOOLEAN\",default:!0},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:!0},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},unsafeHttpWhitelist:{description:\"List of the hostnames for which http queries are allowed (glob patterns are supported)\",type:\"STRING\",default:[],isArray:!0},httpTimeout:{description:\"Timeout of each http request in milliseconds\",type:\"NUMBER\",default:6e4},httpRetry:{description:\"Retry times on http failure\",type:\"NUMBER\",default:3},networkConcurrency:{description:\"Maximal number of concurrent requests\",type:\"NUMBER\",default:50},networkSettings:{description:\"Network settings per hostname (glob patterns are supported)\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{caFilePath:{description:\"Path to file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},enableNetwork:{description:\"If false, the package manager will refuse to use the network if required to\",type:\"BOOLEAN\",default:null},httpProxy:{description:\"URL of the http proxy that must be used for outgoing http requests\",type:\"STRING\",default:null},httpsProxy:{description:\"URL of the http proxy that must be used for outgoing https requests\",type:\"STRING\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null}}}},caFilePath:{description:\"A path to a file containing one or multiple Certificate Authority signing certificates\",type:\"ABSOLUTE_PATH\",default:null},httpsKeyFilePath:{description:\"Path to file containing private key in PEM format\",type:\"ABSOLUTE_PATH\",default:null},httpsCertFilePath:{description:\"Path to file containing certificate chain in PEM format\",type:\"ABSOLUTE_PATH\",default:null},enableStrictSsl:{description:\"If false, SSL certificate errors will be ignored\",type:\"BOOLEAN\",default:!0},logFilters:{description:\"Overrides for log levels\",type:\"SHAPE\",isArray:!0,concatenateValues:!0,properties:{code:{description:\"Code of the messages covered by this override\",type:\"STRING\",default:void 0},text:{description:\"Code of the texts covered by this override\",type:\"STRING\",default:void 0},pattern:{description:\"Code of the patterns covered by this override\",type:\"STRING\",default:void 0},level:{description:\"Log level override, set to null to remove override\",type:\"STRING\",values:Object.values(Xy),isNullable:!0,default:void 0}}},enableTelemetry:{description:\"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry\",type:\"BOOLEAN\",default:!0},telemetryInterval:{description:\"Minimal amount of time between two telemetry uploads, in days\",type:\"NUMBER\",default:7},telemetryUserId:{description:\"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.\",type:\"STRING\",default:null},enableScripts:{description:\"If true, packages are allowed to have install scripts by default\",type:\"BOOLEAN\",default:!0},enableStrictSettings:{description:\"If true, unknown settings will cause Yarn to abort\",type:\"BOOLEAN\",default:!0},enableImmutableCache:{description:\"If true, the cache is reputed immutable and actions that would modify it will throw\",type:\"BOOLEAN\",default:!1},checksumBehavior:{description:\"Enumeration defining what to do when a checksum doesn't match expectations\",type:\"STRING\",default:\"throw\"},packageExtensions:{description:\"Map of package corrections to apply on the dependency tree\",type:\"MAP\",valueDefinition:{description:\"The extension that will be applied to any package whose version matches the specified range\",type:\"SHAPE\",properties:{dependencies:{description:\"The set of dependencies that must be made available to the current package in order for it to work properly\",type:\"MAP\",valueDefinition:{description:\"A range\",type:\"STRING\"}},peerDependencies:{description:\"Inherited dependencies - the consumer of the package will be tasked to provide them\",type:\"MAP\",valueDefinition:{description:\"A semver range\",type:\"STRING\"}},peerDependenciesMeta:{description:\"Extra information related to the dependencies listed in the peerDependencies field\",type:\"MAP\",valueDefinition:{description:\"The peerDependency meta\",type:\"SHAPE\",properties:{optional:{description:\"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error\",type:\"BOOLEAN\",default:!1}}}}}}}};function Ak(r,e,t,i,n){if(i.isArray||i.type===\"ANY\"&&Array.isArray(t))return Array.isArray(t)?t.map((s,o)=>ik(r,`${e}[${o}]`,s,i,n)):String(t).split(/,/).map(s=>ik(r,e,s,i,n));if(Array.isArray(t))throw new Error(`Non-array configuration settings \"${e}\" cannot be an array`);return ik(r,e,t,i,n)}function ik(r,e,t,i,n){var a;switch(i.type){case\"ANY\":return t;case\"SHAPE\":return Hve(r,e,t,i,n);case\"MAP\":return Gve(r,e,t,i,n)}if(t===null&&!i.isNullable&&i.default!==null)throw new Error(`Non-nullable configuration settings \"${e}\" cannot be set to null`);if((a=i.values)!=null&&a.includes(t))return t;let o=(()=>{if(i.type===\"BOOLEAN\"&&typeof t!=\"string\")return Wd(t);if(typeof t!=\"string\")throw new Error(`Expected configuration setting \"${e}\" to be a string, got ${typeof t}`);let l=Wx(t,{env:process.env});switch(i.type){case\"ABSOLUTE_PATH\":return x.resolve(n,K.toPortablePath(l));case\"LOCATOR_LOOSE\":return Dc(l,!1);case\"NUMBER\":return parseInt(l);case\"LOCATOR\":return Dc(l);case\"BOOLEAN\":return Wd(l);default:return l}})();if(i.values&&!i.values.includes(o))throw new Error(`Invalid value, expected one of ${i.values.join(\", \")}`);return o}function Hve(r,e,t,i,n){if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Object configuration settings \"${e}\" must be an object`);let s=lk(r,i,{ignoreArrays:!0});if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=`${e}.${o}`;if(!i.properties[o])throw new Qe(`Unrecognized configuration settings found: ${e}.${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);s.set(o,Ak(r,l,a,i.properties[o],n))}return s}function Gve(r,e,t,i,n){let s=new Map;if(typeof t!=\"object\"||Array.isArray(t))throw new Qe(`Map configuration settings \"${e}\" must be an object`);if(t===null)return s;for(let[o,a]of Object.entries(t)){let l=i.normalizeKeys?i.normalizeKeys(o):o,c=`${e}['${l}']`,u=i.valueDefinition;s.set(l,Ak(r,c,a,u,n))}return s}function lk(r,e,{ignoreArrays:t=!1}={}){switch(e.type){case\"SHAPE\":{if(e.isArray&&!t)return[];let i=new Map;for(let[n,s]of Object.entries(e.properties))i.set(n,lk(r,s));return i}break;case\"MAP\":return e.isArray&&!t?[]:new Map;case\"ABSOLUTE_PATH\":return e.default===null?null:r.projectCwd===null?x.isAbsolute(e.default)?x.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(i=>x.resolve(r.projectCwd,i)):x.resolve(r.projectCwd,e.default);default:return e.default}}function Uw(r,e,t){if(e.type===\"SECRET\"&&typeof r==\"string\"&&t.hideSecrets)return Uve;if(e.type===\"ABSOLUTE_PATH\"&&typeof r==\"string\"&&t.getNativePaths)return K.fromPortablePath(r);if(e.isArray&&Array.isArray(r)){let i=[];for(let n of r)i.push(Uw(n,e,t));return i}if(e.type===\"MAP\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries())i.set(n,Uw(s,e.valueDefinition,t));return i}if(e.type===\"SHAPE\"&&r instanceof Map){let i=new Map;for(let[n,s]of r.entries()){let o=e.properties[n];i.set(n,Uw(s,o,t))}return i}return r}function Yve(){let r={};for(let[e,t]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(Gw)&&(e=(0,mz.default)(e.slice(Gw.length)),r[e]=t);return r}function Hw(){let r=`${Gw}rc_filename`;for(let[e,t]of Object.entries(process.env))if(e.toLowerCase()===r&&typeof t==\"string\")return t;return sk}var ck=(i=>(i[i.LOCKFILE=0]=\"LOCKFILE\",i[i.MANIFEST=1]=\"MANIFEST\",i[i.NONE=2]=\"NONE\",i))(ck||{}),Ha=class{constructor(e){this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.packageExtensions=new Map;this.limits=new Map;this.startingCwd=e}static create(e,t,i){let n=new Ha(e);typeof t<\"u\"&&!(t instanceof Map)&&(n.projectCwd=t),n.importSettings(rk);let s=typeof i<\"u\"?i:t instanceof Map?t:new Map;for(let[o,a]of s)n.activatePlugin(o,a);return n}static async find(e,t,{lookup:i=0,strict:n=!0,usePath:s=!1,useRc:o=!0}={}){let a=Yve();delete a.rcFilename;let l=await Ha.findRcFiles(e),c=await Ha.findHomeRcFile();if(c){let B=l.find(v=>v.path===c.path);B?B.strict=!1:l.push({...c,strict:!1})}let u=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T})=>({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T}),g=({ignoreCwd:B,yarnPath:v,ignorePath:D,lockfileFilename:T,...H})=>H,f=new Ha(e);f.importSettings(u(rk)),f.useWithSource(\"<environment>\",u(a),e,{strict:!1});for(let{path:B,cwd:v,data:D}of l)f.useWithSource(B,u(D),v,{strict:!1});if(s){let B=f.get(\"yarnPath\"),v=f.get(\"ignorePath\");if(B!==null&&!v)return f}let h=f.get(\"lockfileFilename\"),p;switch(i){case 0:p=await Ha.findProjectCwd(e,h);break;case 1:p=await Ha.findProjectCwd(e,null);break;case 2:O.existsSync(x.join(e,\"package.json\"))?p=x.resolve(e):p=null;break}f.startingCwd=e,f.projectCwd=p,f.importSettings(g(rk));let C=new Map([[\"@@core\",x8]]),y=B=>\"default\"in B?B.default:B;if(t!==null){for(let T of t.plugins.keys())C.set(T,y(t.modules.get(T)));let B=new Map;for(let T of _D())B.set(T,()=>mf(T));for(let[T,H]of t.modules)B.set(T,()=>H);let v=new Set,D=async(T,H)=>{let{factory:j,name:$}=mf(T);if(v.has($))return;let V=new Map(B),W=A=>{if(V.has(A))return V.get(A)();throw new Qe(`This plugin cannot access the package referenced via ${A} which is neither a builtin, nor an exposed entry`)},_=await df(async()=>y(await j(W)),A=>`${A} (when initializing ${$}, defined in ${H})`);B.set($,()=>_),v.add($),C.set($,_)};if(a.plugins)for(let T of a.plugins.split(\";\")){let H=x.resolve(e,K.toPortablePath(T));await D(H,\"<environment>\")}for(let{path:T,cwd:H,data:j}of l)if(!!o&&!!Array.isArray(j.plugins))for(let $ of j.plugins){let V=typeof $!=\"string\"?$.path:$,W=x.resolve(H,K.toPortablePath(V));await D(W,T)}}for(let[B,v]of C)f.activatePlugin(B,v);f.useWithSource(\"<environment>\",g(a),e,{strict:n});for(let{path:B,cwd:v,data:D,strict:T}of l)f.useWithSource(B,g(D),v,{strict:T!=null?T:n});return f.get(\"enableGlobalCache\")&&(f.values.set(\"cacheFolder\",`${f.get(\"globalFolder\")}/cache`),f.sources.set(\"cacheFolder\",\"<internal>\")),await f.refreshPackageExtensions(),f}static async findRcFiles(e){let t=Hw(),i=[],n=e,s=null;for(;n!==s;){s=n;let o=x.join(s,t);if(O.existsSync(o)){let a=await O.readFilePromise(o,\"utf8\"),l;try{l=yi(a)}catch{let u=\"\";throw a.match(/^\\s+(?!-)[^:]+\\s+\\S+/m)&&(u=\" (in particular, make sure you list the colons after each key name)\"),new Qe(`Parse error when loading ${o}; please check it's proper Yaml${u}`)}i.push({path:o,cwd:s,data:l})}n=x.dirname(s)}return i}static async findHomeRcFile(){let e=Hw(),t=hC(),i=x.join(t,e);if(O.existsSync(i)){let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);return{path:i,cwd:t,data:s}}return null}static async findProjectCwd(e,t){let i=null,n=e,s=null;for(;n!==s;){if(s=n,O.existsSync(x.join(s,\"package.json\"))&&(i=s),t!==null){if(O.existsSync(x.join(s,t))){i=s;break}}else if(i!==null)break;n=x.dirname(s)}return i}static async updateConfiguration(e,t){let i=Hw(),n=x.join(e,i),s=O.existsSync(n)?yi(await O.readFilePromise(n,\"utf8\")):{},o=!1,a;if(typeof t==\"function\"){try{a=t(s)}catch{a=t({})}if(a===s)return}else{a=s;for(let l of Object.keys(t)){let c=s[l],u=t[l],g;if(typeof u==\"function\")try{g=u(c)}catch{g=u(void 0)}else g=u;c!==g&&(a[l]=g,o=!0)}if(!o)return}await O.changeFilePromise(n,ba(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){let t=hC();return await Ha.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),typeof t.configuration<\"u\"&&this.importSettings(t.configuration)}importSettings(e){for(let[t,i]of Object.entries(e))if(i!=null){if(this.settings.has(t))throw new Error(`Cannot redefine settings \"${t}\"`);this.settings.set(t,i),this.values.set(t,lk(this,i))}}useWithSource(e,t,i,n){try{this.use(e,t,i,n)}catch(s){throw s.message+=` (in ${$e(this,e,Ue.PATH)})`,s}}use(e,t,i,{strict:n=!0,overwrite:s=!1}={}){n=n&&this.get(\"enableStrictSettings\");for(let o of[\"enableStrictSettings\",...Object.keys(t)]){if(typeof t[o]>\"u\"||o===\"plugins\"||e===\"<environment>\"&&Kve.has(o))continue;if(o===\"rcFilename\")throw new Qe(`The rcFilename settings can only be set via ${`${Gw}RC_FILENAME`.toUpperCase()}, not via a rc file`);let l=this.settings.get(o);if(!l){if(n)throw new Qe(`Unrecognized or legacy configuration settings found: ${o} - run \"yarn config -v\" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(s||l.type===\"MAP\"||l.isArray&&l.concatenateValues))continue;let c;try{c=Ak(this,o,t[o],l,i)}catch(u){throw u.message+=` in ${$e(this,e,Ue.PATH)}`,u}if(o===\"enableStrictSettings\"&&e!==\"<environment>\"){n=c;continue}if(l.type===\"MAP\"){let u=this.values.get(o);this.values.set(o,new Map(s?[...u,...c]:[...c,...u])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(l.isArray&&l.concatenateValues){let u=this.values.get(o);this.values.set(o,s?[...u,...c]:[...c,...u]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,c),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key \"${e}\"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:i=!1}){let n=this.get(e),s=this.settings.get(e);if(typeof s>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${e}\"`);return Uw(n,s,{hideSecrets:t,getNativePaths:i})}getSubprocessStreams(e,{header:t,prefix:i,report:n}){let s,o,a=O.createWriteStream(e);if(this.get(\"enableInlineBuilds\")){let l=n.createStreamReporter(`${i} ${$e(this,\"STDOUT\",\"green\")}`),c=n.createStreamReporter(`${i} ${$e(this,\"STDERR\",\"red\")}`);s=new nk.PassThrough,s.pipe(l),s.pipe(a),o=new nk.PassThrough,o.pipe(c),o.pipe(a)}else s=a,o=a,typeof t<\"u\"&&s.write(`${t}\n`);return{stdout:s,stderr:o}}makeResolver(){let e=[];for(let t of this.plugins.values())for(let i of t.resolvers||[])e.push(new i);return new kf([new fC,new Yr,new Nw,...e])}makeFetcher(){let e=[];for(let t of this.plugins.values())for(let i of t.fetchers||[])e.push(new i);return new Df([new Ff,new Tf,...e])}getLinkers(){let e=[];for(let t of this.plugins.values())for(let i of t.linkers||[])e.push(new i);return e}getSupportedArchitectures(){let e=pC(),t=this.get(\"supportedArchitectures\"),i=t.get(\"os\");i!==null&&(i=i.map(o=>o===\"current\"?e.os:o));let n=t.get(\"cpu\");n!==null&&(n=n.map(o=>o===\"current\"?e.cpu:o));let s=t.get(\"libc\");return s!==null&&(s=Ho(s,o=>{var a;return o===\"current\"?(a=e.libc)!=null?a:Ho.skip:o})),{os:i,cpu:n,libc:s}}async refreshPackageExtensions(){this.packageExtensions=new Map;let e=this.packageExtensions,t=(i,n,{userProvided:s=!1}={})=>{if(!so(i.range))throw new Error(\"Only semver ranges are allowed as keys for the packageExtensions setting\");let o=new ot;o.load(n,{yamlCompatibilityMode:!0});let a=hf(e,i.identHash),l=[];a.push([i.range,l]);let c={status:\"inactive\",userProvided:s,parentDescriptor:i};for(let u of o.dependencies.values())l.push({...c,type:\"Dependency\",descriptor:u});for(let u of o.peerDependencies.values())l.push({...c,type:\"PeerDependency\",descriptor:u});for(let[u,g]of o.peerDependenciesMeta)for(let[f,h]of Object.entries(g))l.push({...c,type:\"PeerDependencyMeta\",selector:u,key:f,value:h})};await this.triggerHook(i=>i.registerPackageExtensions,this,t);for(let[i,n]of this.get(\"packageExtensions\"))t(WA(i,!0),Jy(n),{userProvided:!0})}normalizePackage(e){let t=rC(e);if(this.packageExtensions==null)throw new Error(\"refreshPackageExtensions has to be called before normalizing packages\");let i=this.packageExtensions.get(e.identHash);if(typeof i<\"u\"){let s=e.version;if(s!==null){for(let[o,a]of i)if(!!kc(s,o))for(let l of a)switch(l.status===\"inactive\"&&(l.status=\"redundant\"),l.type){case\"Dependency\":typeof t.dependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.dependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependency\":typeof t.peerDependencies.get(l.descriptor.identHash)>\"u\"&&(l.status=\"active\",t.peerDependencies.set(l.descriptor.identHash,l.descriptor));break;case\"PeerDependencyMeta\":{let c=t.peerDependenciesMeta.get(l.selector);(typeof c>\"u\"||!Object.prototype.hasOwnProperty.call(c,l.key)||c[l.key]!==l.value)&&(l.status=\"active\",Ta(t.peerDependenciesMeta,l.selector,()=>({}))[l.key]=l.value)}break;default:qx(l);break}}}let n=s=>s.scope?`${s.scope}__${s.name}`:`${s.name}`;for(let s of t.peerDependenciesMeta.keys()){let o=tn(s);t.peerDependencies.has(o.identHash)||t.peerDependencies.set(o.identHash,_t(o,\"*\"))}for(let s of t.peerDependencies.values()){if(s.scope===\"types\")continue;let o=n(s),a=Jo(\"types\",o),l=Mt(a);t.peerDependencies.has(a.identHash)||t.peerDependenciesMeta.has(l)||(t.peerDependencies.set(a.identHash,_t(a,\"*\")),t.peerDependenciesMeta.set(l,{optional:!0}))}return t.dependencies=new Map(bn(t.dependencies,([,s])=>Sn(s))),t.peerDependencies=new Map(bn(t.peerDependencies,([,s])=>Sn(s))),t}getLimit(e){return Ta(this.limits,e,()=>(0,Ez.default)(this.get(e)))}async triggerHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);!s||await s(...t)}}async triggerMultipleHooks(e,t){for(let i of t)await this.triggerHook(e,...i)}async reduceHook(e,t,...i){let n=t;for(let s of this.plugins.values()){let o=s.hooks;if(!o)continue;let a=e(o);!a||(n=await a(n,...i))}return n}async firstHook(e,...t){for(let i of this.plugins.values()){let n=i.hooks;if(!n)continue;let s=e(n);if(!s)continue;let o=await s(...t);if(typeof o<\"u\")return o}return null}},ye=Ha;ye.telemetry=null;var hk=(i=>(i[i.Never=0]=\"Never\",i[i.ErrorCode=1]=\"ErrorCode\",i[i.Always=2]=\"Always\",i))(hk||{}),dC=class extends at{constructor({fileName:t,code:i,signal:n}){let s=ye.create(x.cwd()),o=$e(s,t,Ue.PATH);super(1,`Child ${o} reported an error`,a=>{qve(i,n,{configuration:s,report:a})});this.code=pk(i,n)}},Yw=class extends dC{constructor({fileName:t,code:i,signal:n,stdout:s,stderr:o}){super({fileName:t,code:i,signal:n});this.stdout=s,this.stderr=o}};function Nc(r){return r!==null&&typeof r.fd==\"number\"}var Tc=new Set;function uk(){}function gk(){for(let r of Tc)r.kill()}async function oo(r,e,{cwd:t,env:i=process.env,strict:n=!1,stdin:s=null,stdout:o,stderr:a,end:l=2}){let c=[\"pipe\",\"pipe\",\"pipe\"];s===null?c[0]=\"ignore\":Nc(s)&&(c[0]=s),Nc(o)&&(c[1]=o),Nc(a)&&(c[2]=a);let u=(0,fk.default)(r,e,{cwd:K.fromPortablePath(t),env:{...i,PWD:K.fromPortablePath(t)},stdio:c});Tc.add(u),Tc.size===1&&(process.on(\"SIGINT\",uk),process.on(\"SIGTERM\",gk)),!Nc(s)&&s!==null&&s.pipe(u.stdin),Nc(o)||u.stdout.pipe(o,{end:!1}),Nc(a)||u.stderr.pipe(a,{end:!1});let g=()=>{for(let f of new Set([o,a]))Nc(f)||f.end()};return new Promise((f,h)=>{u.on(\"error\",p=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1)&&g(),h(p)}),u.on(\"close\",(p,C)=>{Tc.delete(u),Tc.size===0&&(process.off(\"SIGINT\",uk),process.off(\"SIGTERM\",gk)),(l===2||l===1&&p>0)&&g(),p===0||!n?f({code:pk(p,C)}):h(new dC({fileName:r,code:p,signal:C}))})})}async function tk(r,e,{cwd:t,env:i=process.env,encoding:n=\"utf8\",strict:s=!1}){let o=[\"ignore\",\"pipe\",\"pipe\"],a=[],l=[],c=K.fromPortablePath(t);typeof i.PWD<\"u\"&&(i={...i,PWD:c});let u=(0,fk.default)(r,e,{cwd:c,env:i,stdio:o});return u.stdout.on(\"data\",g=>{a.push(g)}),u.stderr.on(\"data\",g=>{l.push(g)}),await new Promise((g,f)=>{u.on(\"error\",h=>{let p=ye.create(t),C=$e(p,r,Ue.PATH);f(new at(1,`Process ${C} failed to spawn`,y=>{y.reportError(1,`  ${Go(p,{label:\"Thrown Error\",value:no(Ue.NO_HINT,h.message)})}`)}))}),u.on(\"close\",(h,p)=>{let C=n===\"buffer\"?Buffer.concat(a):Buffer.concat(a).toString(n),y=n===\"buffer\"?Buffer.concat(l):Buffer.concat(l).toString(n);h===0||!s?g({code:pk(h,p),stdout:C,stderr:y}):f(new Yw({fileName:r,code:h,signal:p,stdout:C,stderr:y}))})})}var jve=new Map([[\"SIGINT\",2],[\"SIGQUIT\",3],[\"SIGKILL\",9],[\"SIGTERM\",15]]);function pk(r,e){let t=jve.get(e);return typeof t<\"u\"?128+t:r!=null?r:1}function qve(r,e,{configuration:t,report:i}){i.reportError(1,`  ${Go(t,r!==null?{label:\"Exit Code\",value:no(Ue.NUMBER,r)}:{label:\"Exit Signal\",value:no(Ue.CODE,e)})}`)}var Xt={};ut(Xt,{Method:()=>eV,RequestError:()=>tV.RequestError,del:()=>nke,get:()=>rke,getNetworkSettings:()=>$6,post:()=>kR,put:()=>ike,request:()=>vC});var X6=Pe(CB()),Z6=J(\"https\"),_6=J(\"http\"),DR=Pe(Bn()),PR=Pe(J6()),mB=J(\"url\");var tV=Pe(CB()),W6=new Map,z6=new Map,$De=new _6.Agent({keepAlive:!0}),eke=new Z6.Agent({keepAlive:!0});function V6(r){let e=new mB.URL(r),t={host:e.hostname,headers:{}};return e.port&&(t.port=Number(e.port)),{proxy:t}}async function xR(r){return Ta(z6,r,()=>O.readFilePromise(r).then(e=>(z6.set(r,e),e)))}function tke({statusCode:r,statusMessage:e},t){let i=$e(t,r,Ue.NUMBER),n=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${r}`;return If(t,`${i}${e?` (${e})`:\"\"}`,n)}async function EB(r,{configuration:e,customErrorMessage:t}){var i,n;try{return await r}catch(s){if(s.name!==\"HTTPError\")throw s;let o=(n=t==null?void 0:t(s))!=null?n:(i=s.response.body)==null?void 0:i.error;o==null&&(s.message.startsWith(\"Response code\")?o=\"The remote server failed to provide the requested resource\":o=s.message),s instanceof X6.TimeoutError&&s.event===\"socket\"&&(o+=`(can be increased via ${$e(e,\"httpTimeout\",Ue.SETTING)})`);let a=new at(35,o,l=>{s.response&&l.reportError(35,`  ${Go(e,{label:\"Response Code\",value:no(Ue.NO_HINT,tke(s.response,e))})}`),s.request&&(l.reportError(35,`  ${Go(e,{label:\"Request Method\",value:no(Ue.NO_HINT,s.request.options.method)})}`),l.reportError(35,`  ${Go(e,{label:\"Request URL\",value:no(Ue.URL,s.request.requestUrl)})}`)),s.request.redirects.length>0&&l.reportError(35,`  ${Go(e,{label:\"Request Redirects\",value:no(Ue.NO_HINT,tP(e,s.request.redirects,Ue.URL))})}`),s.request.retryCount===s.request.options.retry.limit&&l.reportError(35,`  ${Go(e,{label:\"Request Retry Count\",value:no(Ue.NO_HINT,`${$e(e,s.request.retryCount,Ue.NUMBER)} (can be increased via ${$e(e,\"httpRetry\",Ue.SETTING)})`)})}`)});throw a.originalError=s,a}}function $6(r,e){let t=[...e.configuration.get(\"networkSettings\")].sort(([o],[a])=>a.length-o.length),i={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},n=Object.keys(i),s=typeof r==\"string\"?new mB.URL(r):r;for(let[o,a]of t)if(DR.default.isMatch(s.hostname,o))for(let l of n){let c=a.get(l);c!==null&&typeof i[l]>\"u\"&&(i[l]=c)}for(let o of n)typeof i[o]>\"u\"&&(i[o]=e.configuration.get(o));return i}var eV=(n=>(n.GET=\"GET\",n.PUT=\"PUT\",n.POST=\"POST\",n.DELETE=\"DELETE\",n))(eV||{});async function vC(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=async()=>await ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o});return await(await t.reduceHook(c=>c.wrapNetworkRequest,a,{target:r,body:e,configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o}))()}async function rke(r,{configuration:e,jsonResponse:t,...i}){let n=Ta(W6,r,()=>EB(vC(r,null,{configuration:e,...i}),{configuration:e}).then(s=>(W6.set(r,s.body),s.body)));return Buffer.isBuffer(n)===!1&&(n=await n),t?JSON.parse(n.toString()):n}async function ike(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"PUT\"}),i)).body}async function kR(r,e,{customErrorMessage:t,...i}){return(await EB(vC(r,e,{...i,method:\"POST\"}),i)).body}async function nke(r,{customErrorMessage:e,...t}){return(await EB(vC(r,null,{...t,method:\"DELETE\"}),t)).body}async function ske(r,e,{configuration:t,headers:i,jsonRequest:n,jsonResponse:s,method:o=\"GET\"}){let a=typeof r==\"string\"?new mB.URL(r):r,l=$6(a,{configuration:t});if(l.enableNetwork===!1)throw new Error(`Request to '${a.href}' has been blocked because of your configuration settings`);if(a.protocol===\"http:\"&&!DR.default.isMatch(a.hostname,t.get(\"unsafeHttpWhitelist\")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${a.hostname})`);let u={agent:{http:l.httpProxy?PR.default.httpOverHttp(V6(l.httpProxy)):$De,https:l.httpsProxy?PR.default.httpsOverHttp(V6(l.httpsProxy)):eke},headers:i,method:o};u.responseType=s?\"json\":\"buffer\",e!==null&&(Buffer.isBuffer(e)||!n&&typeof e==\"string\"?u.body=e:u.json=e);let g=t.get(\"httpTimeout\"),f=t.get(\"httpRetry\"),h=t.get(\"enableStrictSsl\"),p=l.caFilePath,C=l.httpsCertFilePath,y=l.httpsKeyFilePath,{default:B}=await Promise.resolve().then(()=>Pe(CB())),v=p?await xR(p):void 0,D=C?await xR(C):void 0,T=y?await xR(y):void 0,H=B.extend({timeout:{socket:g},retry:f,https:{rejectUnauthorized:h,certificateAuthority:v,certificate:D,key:T},...u});return t.getLimit(\"networkConcurrency\")(()=>H(a))}var Wt={};ut(Wt,{PackageManager:()=>f9,detectPackageManager:()=>h9,executePackageAccessibleBinary:()=>E9,executePackageScript:()=>TB,executePackageShellcode:()=>JR,executeWorkspaceAccessibleBinary:()=>bRe,executeWorkspaceLifecycleScript:()=>C9,executeWorkspaceScript:()=>d9,getPackageAccessibleBinaries:()=>LB,getWorkspaceAccessibleBinaries:()=>m9,hasPackageScript:()=>yRe,hasWorkspaceScript:()=>WR,isNodeScript:()=>zR,makeScriptEnv:()=>FC,maybeExecuteWorkspaceLifecycleScript:()=>BRe,prepareExternalProject:()=>IRe});var xC={};ut(xC,{getLibzipPromise:()=>an,getLibzipSync:()=>aV});var oV=Pe(iV());var Ja=[\"number\",\"number\"],nV=(F=>(F[F.ZIP_ER_OK=0]=\"ZIP_ER_OK\",F[F.ZIP_ER_MULTIDISK=1]=\"ZIP_ER_MULTIDISK\",F[F.ZIP_ER_RENAME=2]=\"ZIP_ER_RENAME\",F[F.ZIP_ER_CLOSE=3]=\"ZIP_ER_CLOSE\",F[F.ZIP_ER_SEEK=4]=\"ZIP_ER_SEEK\",F[F.ZIP_ER_READ=5]=\"ZIP_ER_READ\",F[F.ZIP_ER_WRITE=6]=\"ZIP_ER_WRITE\",F[F.ZIP_ER_CRC=7]=\"ZIP_ER_CRC\",F[F.ZIP_ER_ZIPCLOSED=8]=\"ZIP_ER_ZIPCLOSED\",F[F.ZIP_ER_NOENT=9]=\"ZIP_ER_NOENT\",F[F.ZIP_ER_EXISTS=10]=\"ZIP_ER_EXISTS\",F[F.ZIP_ER_OPEN=11]=\"ZIP_ER_OPEN\",F[F.ZIP_ER_TMPOPEN=12]=\"ZIP_ER_TMPOPEN\",F[F.ZIP_ER_ZLIB=13]=\"ZIP_ER_ZLIB\",F[F.ZIP_ER_MEMORY=14]=\"ZIP_ER_MEMORY\",F[F.ZIP_ER_CHANGED=15]=\"ZIP_ER_CHANGED\",F[F.ZIP_ER_COMPNOTSUPP=16]=\"ZIP_ER_COMPNOTSUPP\",F[F.ZIP_ER_EOF=17]=\"ZIP_ER_EOF\",F[F.ZIP_ER_INVAL=18]=\"ZIP_ER_INVAL\",F[F.ZIP_ER_NOZIP=19]=\"ZIP_ER_NOZIP\",F[F.ZIP_ER_INTERNAL=20]=\"ZIP_ER_INTERNAL\",F[F.ZIP_ER_INCONS=21]=\"ZIP_ER_INCONS\",F[F.ZIP_ER_REMOVE=22]=\"ZIP_ER_REMOVE\",F[F.ZIP_ER_DELETED=23]=\"ZIP_ER_DELETED\",F[F.ZIP_ER_ENCRNOTSUPP=24]=\"ZIP_ER_ENCRNOTSUPP\",F[F.ZIP_ER_RDONLY=25]=\"ZIP_ER_RDONLY\",F[F.ZIP_ER_NOPASSWD=26]=\"ZIP_ER_NOPASSWD\",F[F.ZIP_ER_WRONGPASSWD=27]=\"ZIP_ER_WRONGPASSWD\",F[F.ZIP_ER_OPNOTSUPP=28]=\"ZIP_ER_OPNOTSUPP\",F[F.ZIP_ER_INUSE=29]=\"ZIP_ER_INUSE\",F[F.ZIP_ER_TELL=30]=\"ZIP_ER_TELL\",F[F.ZIP_ER_COMPRESSED_DATA=31]=\"ZIP_ER_COMPRESSED_DATA\",F))(nV||{}),sV=r=>({get HEAP8(){return r.HEAP8},get HEAPU8(){return r.HEAPU8},errors:nV,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:r._malloc(1),uint16S:r._malloc(2),uint32S:r._malloc(4),uint64S:r._malloc(8),malloc:r._malloc,free:r._free,getValue:r.getValue,open:r.cwrap(\"zip_open\",\"number\",[\"string\",\"number\",\"number\"]),openFromSource:r.cwrap(\"zip_open_from_source\",\"number\",[\"number\",\"number\",\"number\"]),close:r.cwrap(\"zip_close\",\"number\",[\"number\"]),discard:r.cwrap(\"zip_discard\",null,[\"number\"]),getError:r.cwrap(\"zip_get_error\",\"number\",[\"number\"]),getName:r.cwrap(\"zip_get_name\",\"string\",[\"number\",\"number\",\"number\"]),getNumEntries:r.cwrap(\"zip_get_num_entries\",\"number\",[\"number\",\"number\"]),delete:r.cwrap(\"zip_delete\",\"number\",[\"number\",\"number\"]),stat:r.cwrap(\"zip_stat\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),statIndex:r.cwrap(\"zip_stat_index\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fopen:r.cwrap(\"zip_fopen\",\"number\",[\"number\",\"string\",\"number\"]),fopenIndex:r.cwrap(\"zip_fopen_index\",\"number\",[\"number\",...Ja,\"number\"]),fread:r.cwrap(\"zip_fread\",\"number\",[\"number\",\"number\",\"number\",\"number\"]),fclose:r.cwrap(\"zip_fclose\",\"number\",[\"number\"]),dir:{add:r.cwrap(\"zip_dir_add\",\"number\",[\"number\",\"string\"])},file:{add:r.cwrap(\"zip_file_add\",\"number\",[\"number\",\"string\",\"number\",\"number\"]),getError:r.cwrap(\"zip_file_get_error\",\"number\",[\"number\"]),getExternalAttributes:r.cwrap(\"zip_file_get_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setExternalAttributes:r.cwrap(\"zip_file_set_external_attributes\",\"number\",[\"number\",...Ja,\"number\",\"number\",\"number\"]),setMtime:r.cwrap(\"zip_file_set_mtime\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),setCompression:r.cwrap(\"zip_set_file_compression\",\"number\",[\"number\",...Ja,\"number\",\"number\"])},ext:{countSymlinks:r.cwrap(\"zip_ext_count_symlinks\",\"number\",[\"number\"])},error:{initWithCode:r.cwrap(\"zip_error_init_with_code\",null,[\"number\",\"number\"]),strerror:r.cwrap(\"zip_error_strerror\",\"string\",[\"number\"])},name:{locate:r.cwrap(\"zip_name_locate\",\"number\",[\"number\",\"string\",\"number\"])},source:{fromUnattachedBuffer:r.cwrap(\"zip_source_buffer_create\",\"number\",[\"number\",...Ja,\"number\",\"number\"]),fromBuffer:r.cwrap(\"zip_source_buffer\",\"number\",[\"number\",\"number\",...Ja,\"number\"]),free:r.cwrap(\"zip_source_free\",null,[\"number\"]),keep:r.cwrap(\"zip_source_keep\",null,[\"number\"]),open:r.cwrap(\"zip_source_open\",\"number\",[\"number\"]),close:r.cwrap(\"zip_source_close\",\"number\",[\"number\"]),seek:r.cwrap(\"zip_source_seek\",\"number\",[\"number\",...Ja,\"number\"]),tell:r.cwrap(\"zip_source_tell\",\"number\",[\"number\"]),read:r.cwrap(\"zip_source_read\",\"number\",[\"number\",\"number\",\"number\"]),error:r.cwrap(\"zip_source_error\",\"number\",[\"number\"]),setMtime:r.cwrap(\"zip_source_set_mtime\",\"number\",[\"number\",\"number\"])},struct:{stat:r.cwrap(\"zipstruct_stat\",\"number\",[]),statS:r.cwrap(\"zipstruct_statS\",\"number\",[]),statName:r.cwrap(\"zipstruct_stat_name\",\"string\",[\"number\"]),statIndex:r.cwrap(\"zipstruct_stat_index\",\"number\",[\"number\"]),statSize:r.cwrap(\"zipstruct_stat_size\",\"number\",[\"number\"]),statCompSize:r.cwrap(\"zipstruct_stat_comp_size\",\"number\",[\"number\"]),statCompMethod:r.cwrap(\"zipstruct_stat_comp_method\",\"number\",[\"number\"]),statMtime:r.cwrap(\"zipstruct_stat_mtime\",\"number\",[\"number\"]),statCrc:r.cwrap(\"zipstruct_stat_crc\",\"number\",[\"number\"]),error:r.cwrap(\"zipstruct_error\",\"number\",[]),errorS:r.cwrap(\"zipstruct_errorS\",\"number\",[]),errorCodeZip:r.cwrap(\"zipstruct_error_code_zip\",\"number\",[\"number\"])}});var NR=null;function aV(){return NR===null&&(NR=sV((0,oV.default)())),NR}async function an(){return aV()}var RC={};ut(RC,{ShellError:()=>zn,execute:()=>xB,globUtils:()=>BB});var yV=Pe(wx()),wV=J(\"os\"),Vn=J(\"stream\"),BV=J(\"util\");var zn=class extends Error{constructor(e){super(e),this.name=\"ShellError\"}};var BB={};ut(BB,{fastGlobOptions:()=>cV,isBraceExpansion:()=>TR,isGlobPattern:()=>oke,match:()=>ake,micromatchOptions:()=>wB});var AV=Pe(dw()),lV=Pe(J(\"fs\")),yB=Pe(Bn()),wB={strictBrackets:!0},cV={onlyDirectories:!1,onlyFiles:!1};function oke(r){if(!yB.default.scan(r,wB).isGlob)return!1;try{yB.default.parse(r,wB)}catch{return!1}return!0}function ake(r,{cwd:e,baseFs:t}){return(0,AV.default)(r,{...cV,cwd:K.fromPortablePath(e),fs:AI(lV.default,new vg(t))})}function TR(r){return yB.default.scan(r,wB).isBrace}var gV=Pe(TS()),Vo=J(\"stream\"),fV=J(\"string_decoder\");var Oc=new Set;function LR(){}function MR(){for(let r of Oc)r.kill()}function hV(r,e,t,i){return n=>{let s=n[0]instanceof Vo.Transform?\"pipe\":n[0],o=n[1]instanceof Vo.Transform?\"pipe\":n[1],a=n[2]instanceof Vo.Transform?\"pipe\":n[2],l=(0,gV.default)(r,e,{...i,stdio:[s,o,a]});return Oc.add(l),Oc.size===1&&(process.on(\"SIGINT\",LR),process.on(\"SIGTERM\",MR)),n[0]instanceof Vo.Transform&&n[0].pipe(l.stdin),n[1]instanceof Vo.Transform&&l.stdout.pipe(n[1],{end:!1}),n[2]instanceof Vo.Transform&&l.stderr.pipe(n[2],{end:!1}),{stdin:l.stdin,promise:new Promise(c=>{l.on(\"error\",u=>{switch(Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),u.code){case\"ENOENT\":n[2].write(`command not found: ${r}\n`),c(127);break;case\"EACCES\":n[2].write(`permission denied: ${r}\n`),c(128);break;default:n[2].write(`uncaught error: ${u.message}\n`),c(1);break}}),l.on(\"close\",u=>{Oc.delete(l),Oc.size===0&&(process.off(\"SIGINT\",LR),process.off(\"SIGTERM\",MR)),c(u!==null?u:129)})})}}}function pV(r){return e=>{let t=e[0]===\"pipe\"?new Vo.PassThrough:e[0];return{stdin:t,promise:Promise.resolve().then(()=>r({stdin:t,stdout:e[1],stderr:e[2]}))}}}var Ss=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},OR=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error(\"Assertion failed: No stream attached\");return this.stream}},zf=class{constructor(e,t){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:i,stderr:n}){let s=new zf(null,e);return s.stdin=t,s.stdout=i,s.stderr=n,s}pipeTo(e,t=1){let i=new zf(this,e),n=new OR;return i.pipe=n,i.stdout=this.stdout,i.stderr=this.stderr,(t&1)===1?this.stdout=n:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(t&2)===2?this.stderr=n:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),i}async exec(){let e=[\"ignore\",\"ignore\",\"ignore\"];if(this.pipe)e[0]=\"pipe\";else{if(this.stdin===null)throw new Error(\"Assertion failed: No input stream registered\");e[0]=this.stdin.get()}let t;if(this.stdout===null)throw new Error(\"Assertion failed: No output stream registered\");t=this.stdout,e[1]=t.get();let i;if(this.stderr===null)throw new Error(\"Assertion failed: No error stream registered\");i=this.stderr,e[2]=i.get();let n=this.implementation(e);return this.pipe&&this.pipe.attach(n.stdin),await n.promise.then(s=>(t.close(),i.close(),s))}async run(){let e=[];for(let i=this;i;i=i.ancestor)e.push(i.exec());return(await Promise.all(e))[0]}};function bB(r,e){return zf.start(r,e)}function uV(r,e=null){let t=new Vo.PassThrough,i=new fV.StringDecoder,n=\"\";return t.on(\"data\",s=>{let o=i.write(s),a;do if(a=o.indexOf(`\n`),a!==-1){let l=n+o.substring(0,a);o=o.substring(a+1),n=\"\",r(e!==null?`${e} ${l}`:l)}while(a!==-1);n+=o}),t.on(\"end\",()=>{let s=i.end();s!==\"\"&&r(e!==null?`${e} ${s}`:s)}),t}function dV(r,{prefix:e}){return{stdout:uV(t=>r.stdout.write(`${t}\n`),r.stdout.isTTY?e:null),stderr:uV(t=>r.stderr.write(`${t}\n`),r.stderr.isTTY?e:null)}}var Ake=(0,BV.promisify)(setTimeout);function CV(r,e,t){let i=new Vn.PassThrough({autoDestroy:!0});switch(r){case 0:(e&1)===1&&t.stdin.pipe(i,{end:!1}),(e&2)===2&&t.stdin instanceof Vn.Writable&&i.pipe(t.stdin,{end:!1});break;case 1:(e&1)===1&&t.stdout.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stdout,{end:!1});break;case 2:(e&1)===1&&t.stderr.pipe(i,{end:!1}),(e&2)===2&&i.pipe(t.stderr,{end:!1});break;default:throw new zn(`Bad file descriptor: \"${r}\"`)}return i}function SB(r,e={}){let t={...r,...e};return t.environment={...r.environment,...e.environment},t.variables={...r.variables,...e.variables},t}var lke=new Map([[\"cd\",async([r=(0,wV.homedir)(),...e],t,i)=>{let n=x.resolve(i.cwd,K.toPortablePath(r));if(!(await t.baseFs.statPromise(n).catch(o=>{throw o.code===\"ENOENT\"?new zn(`cd: no such file or directory: ${r}`):o})).isDirectory())throw new zn(`cd: not a directory: ${r}`);return i.cwd=n,0}],[\"pwd\",async(r,e,t)=>(t.stdout.write(`${K.fromPortablePath(t.cwd)}\n`),0)],[\":\",async(r,e,t)=>0],[\"true\",async(r,e,t)=>0],[\"false\",async(r,e,t)=>1],[\"exit\",async([r,...e],t,i)=>i.exitCode=parseInt(r!=null?r:i.variables[\"?\"],10)],[\"echo\",async(r,e,t)=>(t.stdout.write(`${r.join(\" \")}\n`),0)],[\"sleep\",async([r],e,t)=>{if(typeof r>\"u\")throw new zn(\"sleep: missing operand\");let i=Number(r);if(Number.isNaN(i))throw new zn(`sleep: invalid time interval '${r}'`);return await Ake(1e3*i,0)}],[\"__ysh_run_procedure\",async(r,e,t)=>{let i=t.procedures[r[0]];return await bB(i,{stdin:new Ss(t.stdin),stdout:new Ss(t.stdout),stderr:new Ss(t.stderr)}).run()}],[\"__ysh_set_redirects\",async(r,e,t)=>{let i=t.stdin,n=t.stdout,s=t.stderr,o=[],a=[],l=[],c=0;for(;r[c]!==\"--\";){let g=r[c++],{type:f,fd:h}=JSON.parse(g),p=v=>{switch(h){case null:case 0:o.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},C=v=>{switch(h){case null:case 1:a.push(v);break;case 2:l.push(v);break;default:throw new Error(`Unsupported file descriptor: \"${h}\"`)}},y=Number(r[c++]),B=c+y;for(let v=c;v<B;++c,++v)switch(f){case\"<\":p(()=>e.baseFs.createReadStream(x.resolve(t.cwd,K.toPortablePath(r[v]))));break;case\"<<<\":p(()=>{let D=new Vn.PassThrough;return process.nextTick(()=>{D.write(`${r[v]}\n`),D.end()}),D});break;case\"<&\":p(()=>CV(Number(r[v]),1,t));break;case\">\":case\">>\":{let D=x.resolve(t.cwd,K.toPortablePath(r[v]));C(D===\"/dev/null\"?new Vn.Writable({autoDestroy:!0,emitClose:!0,write(T,H,j){setImmediate(j)}}):e.baseFs.createWriteStream(D,f===\">>\"?{flags:\"a\"}:void 0))}break;case\">&\":C(CV(Number(r[v]),2,t));break;default:throw new Error(`Assertion failed: Unsupported redirection type: \"${f}\"`)}}if(o.length>0){let g=new Vn.PassThrough;i=g;let f=h=>{if(h===o.length)g.end();else{let p=o[h]();p.pipe(g,{end:!1}),p.on(\"end\",()=>{f(h+1)})}};f(0)}if(a.length>0){let g=new Vn.PassThrough;n=g;for(let f of a)g.pipe(f)}if(l.length>0){let g=new Vn.PassThrough;s=g;for(let f of l)g.pipe(f)}let u=await bB(DC(r.slice(c+1),e,t),{stdin:new Ss(i),stdout:new Ss(n),stderr:new Ss(s)}).run();return await Promise.all(a.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),await Promise.all(l.map(g=>new Promise((f,h)=>{g.on(\"error\",p=>{h(p)}),g.on(\"close\",()=>{f()}),g.end()}))),u}]]);async function cke(r,e,t){let i=[],n=new Vn.PassThrough;return n.on(\"data\",s=>i.push(s)),await vB(r,e,SB(t,{stdout:n})),Buffer.concat(i).toString().replace(/[\\r\\n]+$/,\"\")}async function mV(r,e,t){let i=r.map(async s=>{let o=await Kc(s.args,e,t);return{name:s.name,value:o.join(\" \")}});return(await Promise.all(i)).reduce((s,o)=>(s[o.name]=o.value,s),{})}function QB(r){return r.match(/[^ \\r\\n\\t]+/g)||[]}async function bV(r,e,t,i,n=i){switch(r.name){case\"$\":i(String(process.pid));break;case\"#\":i(String(e.args.length));break;case\"@\":if(r.quoted)for(let s of e.args)n(s);else for(let s of e.args){let o=QB(s);for(let a=0;a<o.length-1;++a)n(o[a]);i(o[o.length-1])}break;case\"*\":{let s=e.args.join(\" \");if(r.quoted)i(s);else for(let o of QB(s))n(o)}break;case\"PPID\":i(String(process.ppid));break;case\"RANDOM\":i(String(Math.floor(Math.random()*32768)));break;default:{let s=parseInt(r.name,10),o,a=Number.isFinite(s);if(a?s>=0&&s<e.args.length&&(o=e.args[s]):Object.prototype.hasOwnProperty.call(t.variables,r.name)?o=t.variables[r.name]:Object.prototype.hasOwnProperty.call(t.environment,r.name)&&(o=t.environment[r.name]),typeof o<\"u\"&&r.alternativeValue?o=(await Kc(r.alternativeValue,e,t)).join(\" \"):typeof o>\"u\"&&(r.defaultValue?o=(await Kc(r.defaultValue,e,t)).join(\" \"):r.alternativeValue&&(o=\"\")),typeof o>\"u\")throw a?new zn(`Unbound argument #${s}`):new zn(`Unbound variable \"${r.name}\"`);if(r.quoted)i(o);else{let l=QB(o);for(let u=0;u<l.length-1;++u)n(l[u]);let c=l[l.length-1];typeof c<\"u\"&&i(c)}}break}}var uke={addition:(r,e)=>r+e,subtraction:(r,e)=>r-e,multiplication:(r,e)=>r*e,division:(r,e)=>Math.trunc(r/e)};async function PC(r,e,t){if(r.type===\"number\"){if(Number.isInteger(r.value))return r.value;throw new Error(`Invalid number: \"${r.value}\", only integers are allowed`)}else if(r.type===\"variable\"){let i=[];await bV({...r,quoted:!0},e,t,s=>i.push(s));let n=Number(i.join(\" \"));return Number.isNaN(n)?PC({type:\"variable\",name:i.join(\" \")},e,t):PC({type:\"number\",value:n},e,t)}else return uke[r.type](await PC(r.left,e,t),await PC(r.right,e,t))}async function Kc(r,e,t){let i=new Map,n=[],s=[],o=u=>{s.push(u)},a=()=>{s.length>0&&n.push(s.join(\"\")),s=[]},l=u=>{o(u),a()},c=(u,g,f)=>{let h=JSON.stringify({type:u,fd:g}),p=i.get(h);typeof p>\"u\"&&i.set(h,p=[]),p.push(f)};for(let u of r){let g=!1;switch(u.type){case\"redirection\":{let f=await Kc(u.args,e,t);for(let h of f)c(u.subtype,u.fd,h)}break;case\"argument\":for(let f of u.segments)switch(f.type){case\"text\":o(f.text);break;case\"glob\":o(f.pattern),g=!0;break;case\"shell\":{let h=await cke(f.shell,e,t);if(f.quoted)o(h);else{let p=QB(h);for(let C=0;C<p.length-1;++C)l(p[C]);o(p[p.length-1])}}break;case\"variable\":await bV(f,e,t,o,l);break;case\"arithmetic\":o(String(await PC(f.arithmetic,e,t)));break}break}if(a(),g){let f=n.pop();if(typeof f>\"u\")throw new Error(\"Assertion failed: Expected a glob pattern to have been set\");let h=await e.glob.match(f,{cwd:t.cwd,baseFs:e.baseFs});if(h.length===0){let p=TR(f)?\". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22\":\"\";throw new zn(`No matches found: \"${f}\"${p}`)}for(let p of h.sort())l(p)}}if(i.size>0){let u=[];for(let[g,f]of i.entries())u.splice(u.length,0,g,String(f.length),...f);n.splice(0,0,\"__ysh_set_redirects\",...u,\"--\")}return n}function DC(r,e,t){e.builtins.has(r[0])||(r=[\"command\",...r]);let i=K.fromPortablePath(t.cwd),n=t.environment;typeof n.PWD<\"u\"&&(n={...n,PWD:i});let[s,...o]=r;if(s===\"command\")return hV(o[0],o.slice(1),e,{cwd:i,env:n});let a=e.builtins.get(s);if(typeof a>\"u\")throw new Error(`Assertion failed: A builtin should exist for \"${s}\"`);return pV(async({stdin:l,stdout:c,stderr:u})=>{let{stdin:g,stdout:f,stderr:h}=t;t.stdin=l,t.stdout=c,t.stderr=u;try{return await a(o,e,t)}finally{t.stdin=g,t.stdout=f,t.stderr=h}})}function gke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,SB(t,{stdin:n}));return{stdin:n,promise:s}}}function fke(r,e,t){return i=>{let n=new Vn.PassThrough,s=vB(r,e,t);return{stdin:n,promise:s}}}function EV(r,e,t,i){if(e.length===0)return r;{let n;do n=String(Math.random());while(Object.prototype.hasOwnProperty.call(i.procedures,n));return i.procedures={...i.procedures},i.procedures[n]=r,DC([...e,\"__ysh_run_procedure\",n],t,i)}}async function IV(r,e,t){let i=r,n=null,s=null;for(;i;){let o=i.then?{...t}:t,a;switch(i.type){case\"command\":{let l=await Kc(i.args,e,t),c=await mV(i.envs,e,t);a=i.envs.length?DC(l,e,SB(o,{environment:c})):DC(l,e,o)}break;case\"subshell\":{let l=await Kc(i.args,e,t),c=gke(i.subshell,e,o);a=EV(c,l,e,o)}break;case\"group\":{let l=await Kc(i.args,e,t),c=fke(i.group,e,o);a=EV(c,l,e,o)}break;case\"envs\":{let l=await mV(i.envs,e,t);o.environment={...o.environment,...l},a=DC([\"true\"],e,o)}break}if(typeof a>\"u\")throw new Error(\"Assertion failed: An action should have been generated\");if(n===null)s=bB(a,{stdin:new Ss(o.stdin),stdout:new Ss(o.stdout),stderr:new Ss(o.stderr)});else{if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");switch(n){case\"|\":s=s.pipeTo(a,1);break;case\"|&\":s=s.pipeTo(a,3);break}}i.then?(n=i.then.type,i=i.then.chain):i=null}if(s===null)throw new Error(\"Assertion failed: The execution pipeline should have been setup\");return await s.run()}async function hke(r,e,t,{background:i=!1}={}){function n(s){let o=[\"#2E86AB\",\"#A23B72\",\"#F18F01\",\"#C73E1D\",\"#CCE2A3\"],a=o[s%o.length];return yV.default.hex(a)}if(i){let s=t.nextBackgroundJobIndex++,o=n(s),a=`[${s}]`,l=o(a),{stdout:c,stderr:u}=dV(t,{prefix:l});return t.backgroundJobs.push(IV(r,e,SB(t,{stdout:c,stderr:u})).catch(g=>u.write(`${g.message}\n`)).finally(()=>{t.stdout.isTTY&&t.stdout.write(`Job ${l}, '${o(Fg(r))}' has ended\n`)})),0}return await IV(r,e,t)}async function pke(r,e,t,{background:i=!1}={}){let n,s=a=>{n=a,t.variables[\"?\"]=String(a)},o=async a=>{try{return await hke(a.chain,e,t,{background:i&&typeof a.then>\"u\"})}catch(l){if(!(l instanceof zn))throw l;return t.stderr.write(`${l.message}\n`),1}};for(s(await o(r));r.then;){if(t.exitCode!==null)return t.exitCode;switch(r.then.type){case\"&&\":n===0&&s(await o(r.then.line));break;case\"||\":n!==0&&s(await o(r.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: \"${r.then.type}\"`)}r=r.then.line}return n}async function vB(r,e,t){let i=t.backgroundJobs;t.backgroundJobs=[];let n=0;for(let{command:s,type:o}of r){if(n=await pke(s,e,t,{background:o===\"&\"}),t.exitCode!==null)return t.exitCode;t.variables[\"?\"]=String(n)}return await Promise.all(t.backgroundJobs),t.backgroundJobs=i,n}function QV(r){switch(r.type){case\"variable\":return r.name===\"@\"||r.name===\"#\"||r.name===\"*\"||Number.isFinite(parseInt(r.name,10))||\"defaultValue\"in r&&!!r.defaultValue&&r.defaultValue.some(e=>kC(e))||\"alternativeValue\"in r&&!!r.alternativeValue&&r.alternativeValue.some(e=>kC(e));case\"arithmetic\":return KR(r.arithmetic);case\"shell\":return UR(r.shell);default:return!1}}function kC(r){switch(r.type){case\"redirection\":return r.args.some(e=>kC(e));case\"argument\":return r.segments.some(e=>QV(e));default:throw new Error(`Assertion failed: Unsupported argument type: \"${r.type}\"`)}}function KR(r){switch(r.type){case\"variable\":return QV(r);case\"number\":return!1;default:return KR(r.left)||KR(r.right)}}function UR(r){return r.some(({command:e})=>{for(;e;){let t=e.chain;for(;t;){let i;switch(t.type){case\"subshell\":i=UR(t.subshell);break;case\"command\":i=t.envs.some(n=>n.args.some(s=>kC(s)))||t.args.some(n=>kC(n));break}if(i)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function xB(r,e=[],{baseFs:t=new $t,builtins:i={},cwd:n=K.toPortablePath(process.cwd()),env:s=process.env,stdin:o=process.stdin,stdout:a=process.stdout,stderr:l=process.stderr,variables:c={},glob:u=BB}={}){let g={};for(let[p,C]of Object.entries(s))typeof C<\"u\"&&(g[p]=C);let f=new Map(lke);for(let[p,C]of Object.entries(i))f.set(p,C);o===null&&(o=new Vn.PassThrough,o.end());let h=uI(r,u);if(!UR(h)&&h.length>0&&e.length>0){let{command:p}=h[h.length-1];for(;p.then;)p=p.then.line;let C=p.chain;for(;C.then;)C=C.then.chain;C.type===\"command\"&&(C.args=C.args.concat(e.map(y=>({type:\"argument\",segments:[{type:\"text\",text:y}]}))))}return await vB(h,{args:e,baseFs:t,builtins:f,initialStdin:o,initialStdout:a,initialStderr:l,glob:u},{cwd:n,environment:g,exitCode:null,procedures:{},stdin:o,stdout:a,stderr:l,variables:Object.assign({},c,{[\"?\"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var u9=Pe(PB()),g9=Pe(Jg()),tl=J(\"stream\");var l9=Pe(s9()),FB=Pe(Ac());var o9=[\"\\u280B\",\"\\u2819\",\"\\u2839\",\"\\u2838\",\"\\u283C\",\"\\u2834\",\"\\u2826\",\"\\u2827\",\"\\u2807\",\"\\u280F\"],a9=80,fRe=new Set([13,19]),hRe=5,RB=FB.default.GITHUB_ACTIONS?{start:r=>`::group::${r}\n`,end:r=>`::endgroup::\n`}:FB.default.TRAVIS?{start:r=>`travis_fold:start:${r}\n`,end:r=>`travis_fold:end:${r}\n`}:FB.default.GITLAB?{start:r=>`section_start:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}[collapsed=true]\\r\\x1B[0K${r}\n`,end:r=>`section_end:${Math.floor(Date.now()/1e3)}:${r.toLowerCase().replace(/\\W+/g,\"_\")}\\r\\x1B[0K`}:null,A9=new Date,pRe=[\"iTerm.app\",\"Apple_Terminal\",\"WarpTerminal\",\"vscode\"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,dRe=r=>r,NB=dRe({patrick:{date:[17,3],chars:[\"\\u{1F340}\",\"\\u{1F331}\"],size:40},simba:{date:[19,7],chars:[\"\\u{1F981}\",\"\\u{1F334}\"],size:40},jack:{date:[31,10],chars:[\"\\u{1F383}\",\"\\u{1F987}\"],size:40},hogsfather:{date:[31,12],chars:[\"\\u{1F389}\",\"\\u{1F384}\"],size:40},default:{chars:[\"=\",\"-\"],size:80}}),CRe=pRe&&Object.keys(NB).find(r=>{let e=NB[r];return!(e.date&&(e.date[0]!==A9.getDate()||e.date[1]!==A9.getMonth()+1))})||\"default\";function c9(r,{configuration:e,json:t}){if(!e.get(\"enableMessageNames\"))return\"\";let n=FA(r===null?0:r);return!t&&r===null?$e(e,n,\"grey\"):n}function qR(r,{configuration:e,json:t}){let i=c9(r,{configuration:e,json:t});if(!i||r===null||r===0)return i;let n=Ct[r],s=`https://yarnpkg.com/advanced/error-codes#${i}---${n}`.toLowerCase();return If(e,i,s)}var Ge=class extends vi{constructor({configuration:t,stdout:i,json:n=!1,includePrefix:s=!0,includeFooter:o=!0,includeLogs:a=!n,includeInfos:l=a,includeWarnings:c=a,forgettableBufferSize:u=hRe,forgettableNames:g=new Set}){super();this.uncommitted=new Set;this.cacheHitCount=0;this.cacheMissCount=0;this.lastCacheMiss=null;this.warningCount=0;this.errors=[];this.startTime=Date.now();this.indent=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;this.forgettableLines=[];if(Xd(this,{configuration:t}),this.configuration=t,this.forgettableBufferSize=u,this.forgettableNames=new Set([...g,...fRe]),this.includePrefix=s,this.includeFooter=o,this.includeInfos=l,this.includeWarnings=c,this.json=n,this.stdout=i,t.get(\"enableProgressBars\")&&!n&&i.isTTY&&i.columns>22){let f=t.get(\"progressBarStyle\")||CRe;if(!Object.prototype.hasOwnProperty.call(NB,f))throw new Error(\"Assertion failed: Invalid progress bar style\");this.progressStyle=NB[f];let h=12,p=Math.max(0,Math.min(i.columns-h,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*p/80)}}static async start(t,i){let n=new this(t),s=process.emitWarning;process.emitWarning=(o,a)=>{if(typeof o!=\"string\"){let c=o;o=c.message,a=a!=null?a:c.name}let l=typeof a<\"u\"?`${a}: ${o}`:o;n.reportWarning(0,l)};try{await i(n)}catch(o){n.reportExceptionOnce(o)}finally{await n.finalize(),process.emitWarning=s}return n}hasErrors(){return this.errors.length>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){this.cacheHitCount+=1}reportCacheMiss(t,i){this.lastCacheMiss=t,this.cacheMissCount+=1,typeof i<\"u\"&&!this.configuration.get(\"preferAggregateCacheInfo\")&&this.reportInfo(13,i)}startSectionSync({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}async startSectionPromise({reportHeader:t,reportFooter:i,skipIfEmpty:n},s){let o={committed:!1,action:()=>{t==null||t()}};n?this.uncommitted.add(o):(o.action(),o.committed=!0);let a=Date.now();try{return await s()}catch(l){throw this.reportExceptionOnce(l),l}finally{let l=Date.now();this.uncommitted.delete(o),o.committed&&(i==null||i(l-a))}}startTimerImpl(t,i,n){return{cb:typeof i==\"function\"?i:n,reportHeader:()=>{this.reportInfo(null,`\\u250C ${t}`),this.indent+=1,RB!==null&&!this.json&&this.includeInfos&&this.stdout.write(RB.start(t))},reportFooter:a=>{if(this.indent-=1,RB!==null&&!this.json&&this.includeInfos){this.stdout.write(RB.end(t));for(let[l,c]of this.errors)this.reportErrorImpl(l,c)}this.configuration.get(\"enableTimers\")&&a>200?this.reportInfo(null,`\\u2514 Completed in ${$e(this.configuration,a,Ue.DURATION)}`):this.reportInfo(null,\"\\u2514 Completed\")},skipIfEmpty:(typeof i==\"function\"?{}:i).skipIfEmpty}}startTimerSync(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionSync(o,s)}async startTimerPromise(t,i,n){let{cb:s,...o}=this.startTimerImpl(t,i,n);return this.startSectionPromise(o,s)}async startCacheReport(t){let i=this.configuration.get(\"preferAggregateCacheInfo\")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await t()}catch(n){throw this.reportExceptionOnce(n),n}finally{i!==null&&this.reportCacheChanges(i)}}reportSeparator(){this.indent===0?this.writeLineWithForgettableReset(\"\"):this.reportInfo(null,\"\")}reportInfo(t,i){if(!this.includeInfos)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\",o=`${this.formatPrefix(s,\"blueBright\")}${i}`;if(this.json)this.reportJson({type:\"info\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i});else if(this.forgettableNames.has(t))if(this.forgettableLines.push(o),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(o,{truncate:!0});else this.writeLineWithForgettableReset(o)}reportWarning(t,i){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"warning\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"yellowBright\")}${i}`)}reportError(t,i){this.errors.push([t,i]),this.reportErrorImpl(t,i)}reportErrorImpl(t,i){this.commit();let n=this.formatNameWithHyperlink(t),s=n?`${n}: `:\"\";this.json?this.reportJson({type:\"error\",name:t,displayName:this.formatName(t),indent:this.formatIndent(),data:i}):this.writeLineWithForgettableReset(`${this.formatPrefix(s,\"redBright\")}${i}`,{truncate:!1})}reportProgress(t){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(t.hasProgress&&t.hasTitle)throw new Error(\"Unimplemented: Progress bars can't have both progress and titles.\");let i=!1,n=Promise.resolve().then(async()=>{let o={progress:t.hasProgress?0:void 0,title:t.hasTitle?\"\":void 0};this.progress.set(t,{definition:o,lastScaledSize:t.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:a,title:l}of t)i||o.progress===a&&o.title===l||(o.progress=a,o.title=l,this.refreshProgress());s()}),s=()=>{i||(i=!0,this.progress.delete(t),this.refreshProgress({delta:1}))};return{...n,stop:s}}reportJson(t){this.json&&this.writeLineWithForgettableReset(`${JSON.stringify(t)}`)}async finalize(){if(!this.includeFooter)return;let t=\"\";this.errors.length>0?t=\"Failed with errors\":this.warningCount>0?t=\"Done with warnings\":t=\"Done\";let i=$e(this.configuration,Date.now()-this.startTime,Ue.DURATION),n=this.configuration.get(\"enableTimers\")?`${t} in ${i}`:t;this.errors.length>0?this.reportError(0,n):this.warningCount>0?this.reportWarning(0,n):this.reportInfo(0,n)}writeLine(t,{truncate:i}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(t,{truncate:i})}\n`),this.writeProgress()}writeLineWithForgettableReset(t,{truncate:i}={}){this.forgettableLines=[],this.writeLine(t,{truncate:i})}writeLines(t,{truncate:i}={}){this.clearProgress({delta:t.length});for(let n of t)this.stdout.write(`${this.truncate(n,{truncate:i})}\n`);this.writeProgress()}reportCacheChanges({cacheHitCount:t,cacheMissCount:i}){let n=this.cacheHitCount-t,s=this.cacheMissCount-i;if(n===0&&s===0)return;let o=\"\";this.cacheHitCount>1?o+=`${this.cacheHitCount} packages were already cached`:this.cacheHitCount===1?o+=\" - one package was already cached\":o+=\"No packages were cached\",this.cacheHitCount>0?this.cacheMissCount>1?o+=`, ${this.cacheMissCount} had to be fetched`:this.cacheMissCount===1&&(o+=`, one had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`):this.cacheMissCount>1?o+=` - ${this.cacheMissCount} packages had to be fetched`:this.cacheMissCount===1&&(o+=` - one package had to be fetched (${mt(this.configuration,this.lastCacheMiss)})`),this.reportInfo(13,o)}commit(){let t=this.uncommitted;this.uncommitted=new Set;for(let i of t)i.committed=!0,i.action()}clearProgress({delta:t=0,clear:i=!1}){this.progressStyle!==null&&this.progress.size+t>0&&(this.stdout.write(`\\x1B[${this.progress.size+t}A`),(t>0||i)&&this.stdout.write(\"\\x1B[0J\"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let t=Date.now();t-this.progressTime>a9&&(this.progressFrame=(this.progressFrame+1)%o9.length,this.progressTime=t);let i=o9[this.progressFrame];for(let n of this.progress.values()){let s=\"\";if(typeof n.lastScaledSize<\"u\"){let c=this.progressStyle.chars[0].repeat(n.lastScaledSize),u=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-n.lastScaledSize);s=` ${c}${u}`}let o=this.formatName(null),a=o?`${o}: `:\"\",l=n.definition.title?` ${n.definition.title}`:\"\";this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"blueBright\")} ${a}${i}${s}${l}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},a9)}refreshProgress({delta:t=0,force:i=!1}={}){let n=!1,s=!1;if(i||this.progress.size===0)n=!0;else for(let o of this.progress.values()){let a=typeof o.definition.progress<\"u\"?Math.trunc(this.progressMaxScaledSize*o.definition.progress):void 0,l=o.lastScaledSize;o.lastScaledSize=a;let c=o.lastTitle;if(o.lastTitle=o.definition.title,a!==l||(s=c!==o.definition.title)){n=!0;break}}n&&(this.clearProgress({delta:t,clear:s}),this.writeProgress())}truncate(t,{truncate:i}={}){return this.progressStyle===null&&(i=!1),typeof i>\"u\"&&(i=this.configuration.get(\"preferTruncatedLines\")),i&&(t=(0,l9.default)(t,0,this.stdout.columns-1)),t}formatName(t){return c9(t,{configuration:this.configuration,json:this.json})}formatPrefix(t,i){return this.includePrefix?`${$e(this.configuration,\"\\u27A4\",i)} ${t}${this.formatIndent()}`:\"\"}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:this.json})}formatIndent(){return\"\\u2502 \".repeat(this.indent)}};var Tr=\"3.6.3\";var f9=(n=>(n.Yarn1=\"Yarn Classic\",n.Yarn2=\"Yarn\",n.Npm=\"npm\",n.Pnpm=\"pnpm\",n))(f9||{});async function el(r,e,t,i=[]){if(process.platform===\"win32\"){let n=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @\"${t}\" ${i.map(s=>`\"${s.replace('\"','\"\"')}\"`).join(\" \")} %*`;await O.writeFilePromise(x.format({dir:r,name:e,ext:\".cmd\"}),n)}await O.writeFilePromise(x.join(r,e),`#!/bin/sh\nexec \"${t}\" ${i.map(n=>`'${n.replace(/'/g,`'\"'\"'`)}'`).join(\" \")} \"$@\"\n`,{mode:493})}async function h9(r){let e=await ot.tryFind(r);if(e!=null&&e.packageManager){let i=vw(e.packageManager);if(i!=null&&i.name){let n=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[s]=i.reference.split(\".\");switch(i.name){case\"yarn\":return{packageManagerField:!0,packageManager:Number(s)===1?\"Yarn Classic\":\"Yarn\",reason:n};case\"npm\":return{packageManagerField:!0,packageManager:\"npm\",reason:n};case\"pnpm\":return{packageManagerField:!0,packageManager:\"pnpm\",reason:n}}}}let t;try{t=await O.readFilePromise(x.join(r,xt.lockfile),\"utf8\")}catch{}return t!==void 0?t.match(/^__metadata:$/m)?{packageManager:\"Yarn\",reason:'\"__metadata\" key found in yarn.lock'}:{packageManager:\"Yarn Classic\",reason:'\"__metadata\" key not found in yarn.lock, must be a Yarn classic lockfile'}:O.existsSync(x.join(r,\"package-lock.json\"))?{packageManager:\"npm\",reason:`found npm's \"package-lock.json\" lockfile`}:O.existsSync(x.join(r,\"pnpm-lock.yaml\"))?{packageManager:\"pnpm\",reason:`found pnpm's \"pnpm-lock.yaml\" lockfile`}:null}async function FC({project:r,locator:e,binFolder:t,ignoreCorepack:i,lifecycleScript:n}){var c,u;let s={};for(let[g,f]of Object.entries(process.env))typeof f<\"u\"&&(s[g.toLowerCase()!==\"path\"?g:\"PATH\"]=f);let o=K.fromPortablePath(t);s.BERRY_BIN_FOLDER=K.fromPortablePath(o);let a=process.env.COREPACK_ROOT&&!i?K.join(process.env.COREPACK_ROOT,\"dist/yarn.js\"):process.argv[1];if(await Promise.all([el(t,\"node\",process.execPath),...Tr!==null?[el(t,\"run\",process.execPath,[a,\"run\"]),el(t,\"yarn\",process.execPath,[a]),el(t,\"yarnpkg\",process.execPath,[a]),el(t,\"node-gyp\",process.execPath,[a,\"run\",\"--top-level\",\"node-gyp\"])]:[]]),r&&(s.INIT_CWD=K.fromPortablePath(r.configuration.startingCwd),s.PROJECT_CWD=K.fromPortablePath(r.cwd)),s.PATH=s.PATH?`${o}${K.delimiter}${s.PATH}`:`${o}`,s.npm_execpath=`${o}${K.sep}yarn`,s.npm_node_execpath=`${o}${K.sep}node`,e){if(!r)throw new Error(\"Assertion failed: Missing project\");let g=r.tryWorkspaceByLocator(e),f=g?(c=g.manifest.version)!=null?c:\"\":(u=r.storedPackages.get(e.locatorHash).version)!=null?u:\"\";s.npm_package_name=Mt(e),s.npm_package_version=f;let h;if(g)h=g.cwd;else{let p=r.storedPackages.get(e.locatorHash);if(!p)throw new Error(`Package for ${mt(r.configuration,e)} not found in the project`);let C=r.configuration.getLinkers(),y={project:r,report:new Ge({stdout:new tl.PassThrough,configuration:r.configuration})},B=C.find(v=>v.supportsPackage(p,y));if(!B)throw new Error(`The package ${mt(r.configuration,p)} isn't supported by any of the available linkers`);h=await B.findPackageLocation(p,y)}s.npm_package_json=K.fromPortablePath(x.join(h,xt.manifest))}let l=Tr!==null?`yarn/${Tr}`:`yarn/${mf(\"@yarnpkg/core\").version}-core`;return s.npm_config_user_agent=`${l} npm/? node/${process.version} ${process.platform} ${process.arch}`,n&&(s.npm_lifecycle_event=n),r&&await r.configuration.triggerHook(g=>g.setupScriptEnvironment,r,s,async(g,f,h)=>await el(t,Jr(g),f,h)),s}var mRe=2,ERe=(0,g9.default)(mRe);async function IRe(r,e,{configuration:t,report:i,workspace:n=null,locator:s=null}){await ERe(async()=>{await O.mktempPromise(async o=>{let a=x.join(o,\"pack.log\"),l=null,{stdout:c,stderr:u}=t.getSubprocessStreams(a,{prefix:K.fromPortablePath(r),report:i}),g=s&&qo(s)?nC(s):s,f=g?Es(g):\"an external project\";c.write(`Packing ${f} from sources\n`);let h=await h9(r),p;h!==null?(c.write(`Using ${h.packageManager} for bootstrap. Reason: ${h.reason}\n\n`),p=h.packageManager):(c.write(`No package manager configuration detected; defaulting to Yarn\n\n`),p=\"Yarn\");let C=p===\"Yarn\"&&!(h!=null&&h.packageManagerField);await O.mktempPromise(async y=>{let B=await FC({binFolder:y,ignoreCorepack:C}),D=new Map([[\"Yarn Classic\",async()=>{let H=n!==null?[\"workspace\",n]:[],j=x.join(r,xt.manifest),$=await O.readFilePromise(j),V=await oo(process.execPath,[process.argv[1],\"set\",\"version\",\"classic\",\"--only-if-needed\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(V.code!==0)return V.code;await O.writeFilePromise(j,$),await O.appendFilePromise(x.join(r,\".npmignore\"),`/.yarn\n`),c.write(`\n`),delete B.NODE_ENV;let W=await oo(\"yarn\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(W.code!==0)return W.code;c.write(`\n`);let _=await oo(\"yarn\",[...H,\"pack\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return _.code!==0?_.code:0}],[\"Yarn\",async()=>{let H=n!==null?[\"workspace\",n]:[];B.YARN_ENABLE_INLINE_BUILDS=\"1\";let j=x.join(r,xt.lockfile);await O.existsPromise(j)||await O.writeFilePromise(j,\"\");let $=await oo(\"yarn\",[...H,\"pack\",\"--install-if-needed\",\"--filename\",K.fromPortablePath(e)],{cwd:r,env:B,stdin:l,stdout:c,stderr:u});return $.code!==0?$.code:0}],[\"npm\",async()=>{if(n!==null){let Ae=new tl.PassThrough,ge=Cf(Ae);Ae.pipe(c,{end:!1});let re=await oo(\"npm\",[\"--version\"],{cwd:r,env:B,stdin:l,stdout:Ae,stderr:u,end:0});if(Ae.end(),re.code!==0)return c.end(),u.end(),re.code;let M=(await ge).toString().trim();if(!kc(M,\">=7.x\")){let F=Jo(null,\"npm\"),ue=_t(F,M),pe=_t(F,\">=7.x\");throw new Error(`Workspaces aren't supported by ${tr(t,ue)}; please upgrade to ${tr(t,pe)} (npm has been detected as the primary package manager for ${$e(t,r,Ue.PATH)})`)}}let H=n!==null?[\"--workspace\",n]:[];delete B.npm_config_user_agent,delete B.npm_config_production,delete B.NPM_CONFIG_PRODUCTION,delete B.NODE_ENV;let j=await oo(\"npm\",[\"install\"],{cwd:r,env:B,stdin:l,stdout:c,stderr:u,end:1});if(j.code!==0)return j.code;let $=new tl.PassThrough,V=Cf($);$.pipe(c);let W=await oo(\"npm\",[\"pack\",\"--silent\",...H],{cwd:r,env:B,stdin:l,stdout:$,stderr:u});if(W.code!==0)return W.code;let _=(await V).toString().trim().replace(/^.*\\n/s,\"\"),A=x.resolve(r,K.toPortablePath(_));return await O.renamePromise(A,e),0}]]).get(p);if(typeof D>\"u\")throw new Error(\"Assertion failed: Unsupported workflow\");let T=await D();if(!(T===0||typeof T>\"u\"))throw O.detachTemp(o),new at(58,`Packing the package failed (exit code ${T}, logs can be found here: ${$e(t,a,Ue.PATH)})`)})})})}async function yRe(r,e,{project:t}){let i=t.tryWorkspaceByLocator(r);if(i!==null)return WR(i,e);let n=t.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t.configuration,r)} not found in the project`);return await Kn.openPromise(async s=>{let o=t.configuration,a=t.configuration.getLinkers(),l={project:t,report:new Ge({stdout:new tl.PassThrough,configuration:o})},c=a.find(h=>h.supportsPackage(n,l));if(!c)throw new Error(`The package ${mt(t.configuration,n)} isn't supported by any of the available linkers`);let u=await c.findPackageLocation(n,l),g=new qt(u,{baseFs:s});return(await ot.find(Me.dot,{baseFs:g})).scripts.has(e)},{libzip:await an()})}async function TB(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{manifest:c,env:u,cwd:g}=await p9(r,{project:n,binFolder:l,cwd:i,lifecycleScript:e}),f=c.scripts.get(e);if(typeof f>\"u\")return 1;let h=async()=>await xB(f,t,{cwd:g,env:u,stdin:s,stdout:o,stderr:a});return await(await n.configuration.reduceHook(C=>C.wrapScriptExecution,h,n,r,e,{script:f,args:t,cwd:g,env:u,stdin:s,stdout:o,stderr:a}))()})}async function JR(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a}){return await O.mktempPromise(async l=>{let{env:c,cwd:u}=await p9(r,{project:n,binFolder:l,cwd:i});return await xB(e,t,{cwd:u,env:c,stdin:s,stdout:o,stderr:a})})}async function wRe(r,{binFolder:e,cwd:t,lifecycleScript:i}){let n=await FC({project:r.project,locator:r.anchoredLocator,binFolder:e,lifecycleScript:i});return await VR(e,await m9(r)),typeof t>\"u\"&&(t=x.dirname(await O.realpathPromise(x.join(r.cwd,\"package.json\")))),{manifest:r.manifest,binFolder:e,env:n,cwd:t}}async function p9(r,{project:e,binFolder:t,cwd:i,lifecycleScript:n}){let s=e.tryWorkspaceByLocator(r);if(s!==null)return wRe(s,{binFolder:t,cwd:i,lifecycleScript:n});let o=e.storedPackages.get(r.locatorHash);if(!o)throw new Error(`Package for ${mt(e.configuration,r)} not found in the project`);return await Kn.openPromise(async a=>{let l=e.configuration,c=e.configuration.getLinkers(),u={project:e,report:new Ge({stdout:new tl.PassThrough,configuration:l})},g=c.find(y=>y.supportsPackage(o,u));if(!g)throw new Error(`The package ${mt(e.configuration,o)} isn't supported by any of the available linkers`);let f=await FC({project:e,locator:r,binFolder:t,lifecycleScript:n});await VR(t,await LB(r,{project:e}));let h=await g.findPackageLocation(o,u),p=new qt(h,{baseFs:a}),C=await ot.find(Me.dot,{baseFs:p});return typeof i>\"u\"&&(i=h),{manifest:C,binFolder:t,env:f,cwd:i}},{libzip:await an()})}async function d9(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o}){return await TB(r.anchoredLocator,e,t,{cwd:i,project:r.project,stdin:n,stdout:s,stderr:o})}function WR(r,e){return r.manifest.scripts.has(e)}async function C9(r,e,{cwd:t,report:i}){let{configuration:n}=r.project,s=null;await O.mktempPromise(async o=>{let a=x.join(o,`${e}.log`),l=`# This file contains the result of Yarn calling the \"${e}\" lifecycle script inside a workspace (\"${K.fromPortablePath(r.cwd)}\")\n`,{stdout:c,stderr:u}=n.getSubprocessStreams(a,{report:i,prefix:mt(n,r.anchoredLocator),header:l});i.reportInfo(36,`Calling the \"${e}\" lifecycle script`);let g=await d9(r,e,[],{cwd:t,stdin:s,stdout:c,stderr:u});if(c.end(),u.end(),g!==0)throw O.detachTemp(o),new at(36,`${(0,u9.default)(e)} script failed (exit code ${$e(n,g,Ue.NUMBER)}, logs can be found here: ${$e(n,a,Ue.PATH)}); run ${$e(n,`yarn ${e}`,Ue.CODE)} to investigate`)})}async function BRe(r,e,t){WR(r,e)&&await C9(r,e,t)}function zR(r){let e=x.extname(r);if(e.match(/\\.[cm]?[jt]sx?$/))return!0;if(e===\".exe\"||e===\".bin\")return!1;let t=Buffer.alloc(4),i;try{i=O.openSync(r,\"r\")}catch{return!0}try{O.readSync(i,t,0,t.length,0)}finally{O.closeSync(i)}let n=t.readUint32BE();return!(n===3405691582||n===3489328638||n===2135247942||(n&4294901760)===1297743872)}async function LB(r,{project:e}){let t=e.configuration,i=new Map,n=e.storedPackages.get(r.locatorHash);if(!n)throw new Error(`Package for ${mt(t,r)} not found in the project`);let s=new tl.Writable,o=t.getLinkers(),a={project:e,report:new Ge({configuration:t,stdout:s})},l=new Set([r.locatorHash]);for(let u of n.dependencies.values()){let g=e.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(`Assertion failed: The resolution (${tr(t,u)}) should have been registered`);l.add(g)}let c=await Promise.all(Array.from(l,async u=>{let g=e.storedPackages.get(u);if(!g)throw new Error(`Assertion failed: The package (${u}) should have been registered`);if(g.bin.size===0)return Ho.skip;let f=o.find(p=>p.supportsPackage(g,a));if(!f)return Ho.skip;let h=null;try{h=await f.findPackageLocation(g,a)}catch(p){if(p.code===\"LOCATOR_NOT_INSTALLED\")return Ho.skip;throw p}return{dependency:g,packageLocation:h}}));for(let u of c){if(u===Ho.skip)continue;let{dependency:g,packageLocation:f}=u;for(let[h,p]of g.bin){let C=x.resolve(f,p);i.set(h,[g,K.fromPortablePath(C),zR(C)])}}return i}async function m9(r){return await LB(r.anchoredLocator,{project:r.project})}async function VR(r,e){await Promise.all(Array.from(e,([t,[,i,n]])=>n?el(r,Jr(t),process.execPath,[i]):el(r,Jr(t),i,[])))}async function E9(r,e,t,{cwd:i,project:n,stdin:s,stdout:o,stderr:a,nodeArgs:l=[],packageAccessibleBinaries:c}){c!=null||(c=await LB(r,{project:n}));let u=c.get(e);if(!u)throw new Error(`Binary not found (${e}) for ${mt(n.configuration,r)}`);return await O.mktempPromise(async g=>{let[,f]=u,h=await FC({project:n,locator:r,binFolder:g});await VR(h.BERRY_BIN_FOLDER,c);let p=zR(K.toPortablePath(f))?oo(process.execPath,[...l,f,...t],{cwd:i,env:h,stdin:s,stdout:o,stderr:a}):oo(f,t,{cwd:i,env:h,stdin:s,stdout:o,stderr:a}),C;try{C=await p}finally{await O.removePromise(h.BERRY_BIN_FOLDER)}return C.code})}async function bRe(r,e,t,{cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a}){return await E9(r.anchoredLocator,e,t,{project:r.project,cwd:i,stdin:n,stdout:s,stderr:o,packageAccessibleBinaries:a})}var mi={};ut(mi,{convertToZip:()=>ZNe,extractArchiveTo:()=>$Ne,makeArchiveFromDirectory:()=>XNe});var lZ=J(\"stream\"),cZ=Pe(iZ());var nZ=Pe(Jg()),sZ=J(\"worker_threads\");var hl=Symbol(\"kTaskInfo\"),L0=class{constructor(e){this.source=e;this.workers=[];this.limit=(0,nZ.default)(ek());this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let t=this.workers.pop();t?t.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new sZ.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,\"--unhandled-rejections=strict\"]});return e.on(\"message\",t=>{if(!e[hl])throw new Error(\"Assertion failed: Worker sent a result without having a task assigned\");e[hl].resolve(t),e[hl]=null,e.unref(),this.workers.push(e)}),e.on(\"error\",t=>{var i;(i=e[hl])==null||i.reject(t),e[hl]=null}),e.on(\"exit\",t=>{var i;t!==0&&((i=e[hl])==null||i.reject(new Error(`Worker exited with code ${t}`))),e[hl]=null}),e}run(e){return this.limit(()=>{var i;let t=(i=this.workers.pop())!=null?i:this.createWorker();return t.ref(),new Promise((n,s)=>{t[hl]={resolve:n,reject:s},t.postMessage(e)})})}};var uZ=Pe(aZ());async function XNe(r,{baseFs:e=new $t,prefixPath:t=Me.root,compressionLevel:i,inMemory:n=!1}={}){let s=await an(),o;if(n)o=new Wr(null,{libzip:s,level:i});else{let l=await O.mktempPromise(),c=x.join(l,\"archive.zip\");o=new Wr(c,{create:!0,libzip:s,level:i})}let a=x.resolve(Me.root,t);return await o.copyPromise(a,r,{baseFs:e,stableTime:!0,stableSort:!0}),o}var AZ;async function ZNe(r,e){let t=await O.mktempPromise(),i=x.join(t,\"archive.zip\");return AZ||(AZ=new L0((0,uZ.getContent)())),await AZ.run({tmpFile:i,tgz:r,opts:e}),new Wr(i,{libzip:await an(),level:e.compressionLevel})}async function*_Ne(r){let e=new cZ.default.Parse,t=new lZ.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on(\"entry\",i=>{t.write(i)}),e.on(\"error\",i=>{t.destroy(i)}),e.on(\"close\",()=>{t.destroyed||t.end()}),e.end(r);for await(let i of t){let n=i;yield n,n.resume()}}async function $Ne(r,e,{stripComponents:t=0,prefixPath:i=Me.dot}={}){var s,o;function n(a){if(a.path[0]===\"/\")return!0;let l=a.path.split(/\\//g);return!!(l.some(c=>c===\"..\")||l.length<=t)}for await(let a of _Ne(r)){if(n(a))continue;let l=x.normalize(K.toPortablePath(a.path)).replace(/\\/$/,\"\").split(/\\//g);if(l.length<=t)continue;let c=l.slice(t).join(\"/\"),u=x.join(i,c),g=420;switch((a.type===\"Directory\"||(((s=a.mode)!=null?s:0)&73)!==0)&&(g|=73),a.type){case\"Directory\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.mkdirSync(u,{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"OldFile\":case\"File\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.writeFileSync(u,await Cf(a),{mode:g}),e.utimesSync(u,xr.SAFE_TIME,xr.SAFE_TIME);break;case\"SymbolicLink\":e.mkdirpSync(x.dirname(u),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),e.symlinkSync(a.linkpath,u),(o=e.lutimesSync)==null||o.call(e,u,xr.SAFE_TIME,xr.SAFE_TIME);break}}return e}var es={};ut(es,{emitList:()=>eTe,emitTree:()=>CZ,treeNodeToJson:()=>dZ,treeNodeToTreeify:()=>pZ});var hZ=Pe(fZ());function pZ(r,{configuration:e}){let t={},i=(n,s)=>{let o=Array.isArray(n)?n.entries():Object.entries(n);for(let[a,{label:l,value:c,children:u}]of o){let g=[];typeof l<\"u\"&&g.push(Vy(e,l,2)),typeof c<\"u\"&&g.push($e(e,c[0],c[1])),g.length===0&&g.push(Vy(e,`${a}`,2));let f=g.join(\": \"),h=s[f]={};typeof u<\"u\"&&i(u,h)}};if(typeof r.children>\"u\")throw new Error(\"The root node must only contain children\");return i(r.children,t),t}function dZ(r){let e=t=>{var s;if(typeof t.children>\"u\"){if(typeof t.value>\"u\")throw new Error(\"Assertion failed: Expected a value to be set if the children are missing\");return Bc(t.value[0],t.value[1])}let i=Array.isArray(t.children)?t.children.entries():Object.entries((s=t.children)!=null?s:{}),n=Array.isArray(t.children)?[]:{};for(let[o,a]of i)n[o]=e(a);return typeof t.value>\"u\"?n:{value:Bc(t.value[0],t.value[1]),children:n}};return e(r)}function eTe(r,{configuration:e,stdout:t,json:i}){let n=r.map(s=>({value:s}));CZ({children:n},{configuration:e,stdout:t,json:i})}function CZ(r,{configuration:e,stdout:t,json:i,separators:n=0}){var o;if(i){let a=Array.isArray(r.children)?r.children.values():Object.values((o=r.children)!=null?o:{});for(let l of a)t.write(`${JSON.stringify(dZ(l))}\n`);return}let s=(0,hZ.asTree)(pZ(r,{configuration:e}),!1,!1);if(n>=1&&(s=s.replace(/^([├└]─)/gm,`\\u2502\n$1`).replace(/^│\\n/,\"\")),n>=2)for(let a=0;a<2;++a)s=s.replace(/^([│ ].{2}[├│ ].{2}[^\\n]+\\n)(([│ ]).{2}[├└].{2}[^\\n]*\\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3  \\u2502\n$2`).replace(/^│\\n/,\"\");if(n>=3)throw new Error(\"Only the first two levels are accepted by treeUtils.emitTree\");t.write(s)}var mZ=J(\"crypto\"),kN=Pe(J(\"fs\"));var tTe=8,Rt=class{constructor(e,{configuration:t,immutable:i=t.get(\"enableImmutableCache\"),check:n=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,mZ.randomBytes)(8).toString(\"hex\")}.tmp`;this.configuration=t,this.cwd=e,this.immutable=i,this.check=n;let s=t.get(\"cacheKeyOverride\");if(s!==null)this.cacheKey=`${s}`;else{let o=t.get(\"compressionLevel\"),a=o!==Xl?`c${o}`:\"\";this.cacheKey=[tTe,a].join(\"\")}}static async find(e,{immutable:t,check:i}={}){let n=new Rt(e.get(\"cacheFolder\"),{configuration:e,immutable:t,check:i});return await n.setup(),n}get mirrorCwd(){if(!this.configuration.get(\"enableMirror\"))return null;let e=`${this.configuration.get(\"globalFolder\")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${xf(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){let n=rTe(t).slice(0,10);return`${xf(e)}-${n}.zip`}getLocatorPath(e,t,i={}){var s;return this.mirrorCwd===null||((s=i.unstablePackages)==null?void 0:s.has(e.locatorHash))?x.resolve(this.cwd,this.getVersionFilename(e)):t===null||DN(t)!==this.cacheKey?null:x.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){let t=this.mirrorCwd;return t!==null?x.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get(\"enableGlobalCache\"))if(this.immutable){if(!await O.existsPromise(this.cwd))throw new at(56,\"Cache path does not exist.\")}else{await O.mkdirPromise(this.cwd,{recursive:!0});let e=x.resolve(this.cwd,\".gitignore\");await O.changeFilePromise(e,`/.gitignore\n*.flock\n*.tmp\n`)}(this.mirrorCwd||!this.immutable)&&await O.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,t,{onHit:i,onMiss:n,loader:s,...o}){var W;let a=this.getLocatorMirrorPath(e),l=new $t,c=()=>{let _=new Wr(null,{libzip:D}),A=x.join(Me.root,qD(e));return _.mkdirSync(A,{recursive:!0}),_.writeJsonSync(x.join(A,xt.manifest),{name:Mt(e),mocked:!0}),_},u=async(_,A=null)=>{var ge;if(A===null&&((ge=o.unstablePackages)==null?void 0:ge.has(e.locatorHash)))return{isValid:!0,hash:null};let Ae=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(_)}`:t;if(A!==null){let re=!o.skipIntegrityCheck||!t?`${this.cacheKey}/${await bw(A)}`:t;if(Ae!==re)throw new at(18,\"The remote archive doesn't match the local checksum - has the local cache been corrupted?\")}if(t!==null&&Ae!==t){let re;switch(this.check?re=\"throw\":DN(t)!==DN(Ae)?re=\"update\":re=this.configuration.get(\"checksumBehavior\"),re){case\"ignore\":return{isValid:!0,hash:t};case\"update\":return{isValid:!0,hash:Ae};case\"reset\":return{isValid:!1,hash:t};default:case\"throw\":throw new at(18,\"The remote archive doesn't match the expected checksum\")}}return{isValid:!0,hash:Ae}},g=async _=>{if(!s)throw new Error(`Cache check required but no loader configured for ${mt(this.configuration,e)}`);let A=await s(),Ae=A.getRealPath();A.saveAndClose(),await O.chmodPromise(Ae,420);let ge=await u(_,Ae);if(!ge.isValid)throw new Error(\"Assertion failed: Expected a valid checksum\");return ge.hash},f=async()=>{if(a===null||!await O.existsPromise(a)){let _=await s(),A=_.getRealPath();return _.saveAndClose(),{source:\"loader\",path:A}}return{source:\"mirror\",path:a}},h=async()=>{if(!s)throw new Error(`Cache entry required but missing for ${mt(this.configuration,e)}`);if(this.immutable)throw new at(56,`Cache entry required but missing for ${mt(this.configuration,e)}`);let{path:_,source:A}=await f(),Ae=(await u(_)).hash,ge=this.getLocatorPath(e,Ae,o);if(!ge)throw new Error(\"Assertion failed: Expected the cache path to be available\");let re=[];A!==\"mirror\"&&a!==null&&re.push(async()=>{let F=`${a}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,a)}),(!o.mirrorWriteOnly||a===null)&&re.push(async()=>{let F=`${ge}${this.cacheId}`;await O.copyFilePromise(_,F,kN.default.constants.COPYFILE_FICLONE),await O.chmodPromise(F,420),await O.renamePromise(F,ge)});let M=o.mirrorWriteOnly&&a!=null?a:ge;return await Promise.all(re.map(F=>F())),[!1,M,Ae]},p=async()=>{let A=(async()=>{var ue;let Ae=this.getLocatorPath(e,t,o),ge=Ae!==null?await l.existsPromise(Ae):!1,re=!!((ue=o.mockedPackages)!=null&&ue.has(e.locatorHash))&&(!this.check||!ge),M=re||ge,F=M?i:n;if(F&&F(),M){let pe=null,ke=Ae;if(!re)if(this.check)pe=await g(ke);else{let Fe=await u(ke);if(Fe.isValid)pe=Fe.hash;else return h()}return[re,ke,pe]}else return h()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}};for(let _;_=this.mutexes.get(e.locatorHash);)await _;let[C,y,B]=await p();this.markedFiles.add(y);let v,D=await an(),T=C?()=>c():()=>new Wr(y,{baseFs:l,libzip:D,readOnly:!0}),H=new Sg(()=>Jx(()=>v=T(),_=>`Failed to open the cache entry for ${mt(this.configuration,e)}: ${_}`),x),j=new So(y,{baseFs:H,pathUtils:x}),$=()=>{v==null||v.discardAndClose()},V=(W=o.unstablePackages)!=null&&W.has(e.locatorHash)?null:B;return[j,$,V]}};function DN(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(0,e):null}function rTe(r){let e=r.indexOf(\"/\");return e!==-1?r.slice(e+1):r}var M0=(t=>(t[t.SCRIPT=0]=\"SCRIPT\",t[t.SHELLCODE=1]=\"SHELLCODE\",t))(M0||{});var ra=class extends vi{constructor({configuration:t,stdout:i,suggestInstall:n=!0}){super();this.errorCount=0;Xd(this,{configuration:t}),this.configuration=t,this.stdout=i,this.suggestInstall=n}static async start(t,i){let n=new this(t);try{await i(n)}catch(s){n.reportExceptionOnce(s)}finally{await n.finalize()}return n}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(t){}reportCacheMiss(t){}startSectionSync(t,i){return i()}async startSectionPromise(t,i){return await i()}startTimerSync(t,i,n){return(typeof i==\"function\"?i:n)()}async startTimerPromise(t,i,n){return await(typeof i==\"function\"?i:n)()}async startCacheReport(t){return await t()}reportSeparator(){}reportInfo(t,i){}reportWarning(t,i){}reportError(t,i){this.errorCount+=1,this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} ${this.formatNameWithHyperlink(t)}: ${i}\n`)}reportProgress(t){return{...Promise.resolve().then(async()=>{for await(let{}of t);}),stop:()=>{}}}reportJson(t){}async finalize(){this.errorCount>0&&(this.stdout.write(`\n`),this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} Errors happened when preparing the environment required to run this command.\n`),this.suggestInstall&&this.stdout.write(`${$e(this.configuration,\"\\u27A4\",\"redBright\")} This might be caused by packages being missing from the lockfile, in which case running \"yarn install\" might help.\n`))}formatNameWithHyperlink(t){return qR(t,{configuration:this.configuration,json:!1})}};var X0=J(\"crypto\");function rA(){}rA.prototype={diff:function(e,t){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=i.callback;typeof i==\"function\"&&(n=i,i={}),this.options=i;var s=this;function o(C){return n?(setTimeout(function(){n(void 0,C)},0),!0):C}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e)),t=this.removeEmpty(this.tokenize(t));var a=t.length,l=e.length,c=1,u=a+l;i.maxEditLength&&(u=Math.min(u,i.maxEditLength));var g=[{newPos:-1,components:[]}],f=this.extractCommon(g[0],t,e,0);if(g[0].newPos+1>=a&&f+1>=l)return o([{value:this.join(t),count:t.length}]);function h(){for(var C=-1*c;C<=c;C+=2){var y=void 0,B=g[C-1],v=g[C+1],D=(v?v.newPos:0)-C;B&&(g[C-1]=void 0);var T=B&&B.newPos+1<a,H=v&&0<=D&&D<l;if(!T&&!H){g[C]=void 0;continue}if(!T||H&&B.newPos<v.newPos?(y=nTe(v),s.pushComponent(y.components,void 0,!0)):(y=B,y.newPos++,s.pushComponent(y.components,!0,void 0)),D=s.extractCommon(y,t,e,C),y.newPos+1>=a&&D+1>=l)return o(iTe(s,y.components,t,e,s.useLongestToken));g[C]=y}c++}if(n)(function C(){setTimeout(function(){if(c>u)return n();h()||C()},0)})();else for(;c<=u;){var p=h();if(p)return p}},pushComponent:function(e,t,i){var n=e[e.length-1];n&&n.added===t&&n.removed===i?e[e.length-1]={count:n.count+1,added:t,removed:i}:e.push({count:1,added:t,removed:i})},extractCommon:function(e,t,i,n){for(var s=t.length,o=i.length,a=e.newPos,l=a-n,c=0;a+1<s&&l+1<o&&this.equals(t[a+1],i[l+1]);)a++,l++,c++;return c&&e.components.push({count:c}),e.newPos=a,l},equals:function(e,t){return this.options.comparator?this.options.comparator(e,t):e===t||this.options.ignoreCase&&e.toLowerCase()===t.toLowerCase()},removeEmpty:function(e){for(var t=[],i=0;i<e.length;i++)e[i]&&t.push(e[i]);return t},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function iTe(r,e,t,i,n){for(var s=0,o=e.length,a=0,l=0;s<o;s++){var c=e[s];if(c.removed){if(c.value=r.join(i.slice(l,l+c.count)),l+=c.count,s&&e[s-1].added){var g=e[s-1];e[s-1]=e[s],e[s]=g}}else{if(!c.added&&n){var u=t.slice(a,a+c.count);u=u.map(function(h,p){var C=i[l+p];return C.length>h.length?C:h}),c.value=r.join(u)}else c.value=r.join(t.slice(a,a+c.count));a+=c.count,c.added||(l+=c.count)}}var f=e[o-1];return o>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&r.equals(\"\",f.value)&&(e[o-2].value+=f.value,e.pop()),e}function nTe(r){return{newPos:r.newPos,components:r.components.slice(0)}}var Oat=new rA;var EZ=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,IZ=/\\S/,yZ=new rA;yZ.equals=function(r,e){return this.options.ignoreCase&&(r=r.toLowerCase(),e=e.toLowerCase()),r===e||this.options.ignoreWhitespace&&!IZ.test(r)&&!IZ.test(e)};yZ.tokenize=function(r){for(var e=r.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),t=0;t<e.length-1;t++)!e[t+1]&&e[t+2]&&EZ.test(e[t])&&EZ.test(e[t+2])&&(e[t]+=e[t+2],e.splice(t+1,2),t--);return e};var LN=new rA;LN.tokenize=function(r){var e=[],t=r.split(/(\\n|\\r\\n)/);t[t.length-1]||t.pop();for(var i=0;i<t.length;i++){var n=t[i];i%2&&!this.options.newlineIsToken?e[e.length-1]+=n:(this.options.ignoreWhitespace&&(n=n.trim()),e.push(n))}return e};function sTe(r,e,t){return LN.diff(r,e,t)}var oTe=new rA;oTe.tokenize=function(r){return r.split(/(\\S.+?[.!?])(?=\\s+|$)/)};var aTe=new rA;aTe.tokenize=function(r){return r.split(/([{}:;,]|\\s+)/)};function O0(r){return typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?O0=function(e){return typeof e}:O0=function(e){return e&&typeof Symbol==\"function\"&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O0(r)}function RN(r){return ATe(r)||lTe(r)||cTe(r)||uTe()}function ATe(r){if(Array.isArray(r))return FN(r)}function lTe(r){if(typeof Symbol<\"u\"&&Symbol.iterator in Object(r))return Array.from(r)}function cTe(r,e){if(!!r){if(typeof r==\"string\")return FN(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t===\"Object\"&&r.constructor&&(t=r.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(r);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return FN(r,e)}}function FN(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=new Array(e);t<e;t++)i[t]=r[t];return i}function uTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var gTe=Object.prototype.toString,ZC=new rA;ZC.useLongestToken=!0;ZC.tokenize=LN.tokenize;ZC.castInput=function(r){var e=this.options,t=e.undefinedReplacement,i=e.stringifyReplacer,n=i===void 0?function(s,o){return typeof o>\"u\"?t:o}:i;return typeof r==\"string\"?r:JSON.stringify(NN(r,null,null,n),n,\"  \")};ZC.equals=function(r,e){return rA.prototype.equals.call(ZC,r.replace(/,([\\r\\n])/g,\"$1\"),e.replace(/,([\\r\\n])/g,\"$1\"))};function NN(r,e,t,i,n){e=e||[],t=t||[],i&&(r=i(n,r));var s;for(s=0;s<e.length;s+=1)if(e[s]===r)return t[s];var o;if(gTe.call(r)===\"[object Array]\"){for(e.push(r),o=new Array(r.length),t.push(o),s=0;s<r.length;s+=1)o[s]=NN(r[s],e,t,i,n);return e.pop(),t.pop(),o}if(r&&r.toJSON&&(r=r.toJSON()),O0(r)===\"object\"&&r!==null){e.push(r),o={},t.push(o);var a=[],l;for(l in r)r.hasOwnProperty(l)&&a.push(l);for(a.sort(),s=0;s<a.length;s+=1)l=a[s],o[l]=NN(r[l],e,t,i,l);e.pop(),t.pop()}else o=r;return o}var TN=new rA;TN.tokenize=function(r){return r.slice()};TN.join=TN.removeEmpty=function(r){return r};function wZ(r,e,t,i,n,s,o){o||(o={}),typeof o.context>\"u\"&&(o.context=4);var a=sTe(t,i,o);if(!a)return;a.push({value:\"\",lines:[]});function l(B){return B.map(function(v){return\" \"+v})}for(var c=[],u=0,g=0,f=[],h=1,p=1,C=function(v){var D=a[v],T=D.lines||D.value.replace(/\\n$/,\"\").split(`\n`);if(D.lines=T,D.added||D.removed){var H;if(!u){var j=a[v-1];u=h,g=p,j&&(f=o.context>0?l(j.lines.slice(-o.context)):[],u-=f.length,g-=f.length)}(H=f).push.apply(H,RN(T.map(function(re){return(D.added?\"+\":\"-\")+re}))),D.added?p+=T.length:h+=T.length}else{if(u)if(T.length<=o.context*2&&v<a.length-2){var $;($=f).push.apply($,RN(l(T)))}else{var V,W=Math.min(T.length,o.context);(V=f).push.apply(V,RN(l(T.slice(0,W))));var _={oldStart:u,oldLines:h-u+W,newStart:g,newLines:p-g+W,lines:f};if(v>=a.length-2&&T.length<=o.context){var A=/\\n$/.test(t),Ae=/\\n$/.test(i),ge=T.length==0&&f.length>_.oldLines;!A&&ge&&t.length>0&&f.splice(_.oldLines,0,\"\\\\ No newline at end of file\"),(!A&&!ge||!Ae)&&f.push(\"\\\\ No newline at end of file\")}c.push(_),u=0,g=0,f=[]}h+=T.length,p+=T.length}},y=0;y<a.length;y++)C(y);return{oldFileName:r,newFileName:e,oldHeader:n,newHeader:s,hunks:c}}var Z0=Pe(x$()),_0=Pe(Jg()),F$=Pe(Xr()),zN=J(\"util\"),WN=Pe(J(\"v8\")),VN=Pe(J(\"zlib\"));var UOe=[[/^(git(?:\\+(?:https|ssh))?:\\/\\/.*(?:\\.git)?)#(.*)$/,(r,e,t,i)=>`${t}#commit=${i}`],[/^https:\\/\\/((?:[^/]+?)@)?codeload\\.github\\.com\\/([^/]+\\/[^/]+)\\/tar\\.gz\\/([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https:\\/\\/((?:[^/]+?)@)?github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?#([0-9a-f]+)$/,(r,e,t=\"\",i,n)=>`https://${t}github.com/${i}.git#commit=${n}`],[/^https?:\\/\\/[^/]+\\/(?:[^/]+\\/)*(?:@.+(?:\\/|(?:%2f)))?([^/]+)\\/(?:-|download)\\/\\1-[^/]+\\.tgz(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.pkg\\.github\\.com\\/download\\/(?:@[^/]+)\\/(?:[^/]+)\\/(?:[^/]+)\\/(?:[0-9a-f]+)(?:#|$)/,r=>`npm:${r}`],[/^https:\\/\\/npm\\.fontawesome\\.com\\/(?:@[^/]+)\\/([^/]+)\\/-\\/([^/]+)\\/\\1-\\2.tgz(?:#|$)/,r=>`npm:${r}`],[/^https?:\\/\\/[^/]+\\/.*\\/(@[^/]+)\\/([^/]+)\\/-\\/\\1\\/\\2-(?:[.\\d\\w-]+)\\.tgz(?:#|$)/,(r,e)=>xw({protocol:\"npm:\",source:null,selector:r,params:{__archiveUrl:e}})],[/^[^/]+\\.tgz#[0-9a-f]+$/,r=>`npm:${r}`]],W0=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:t}){let i=x.join(e.cwd,e.configuration.get(\"lockfileFilename\"));if(!O.existsSync(i))return;let n=await O.readFilePromise(i,\"utf8\"),s=yi(n);if(Object.prototype.hasOwnProperty.call(s,\"__metadata\"))return;let o=this.resolutions=new Map;for(let a of Object.keys(s)){let l=aC(a);if(!l){t.reportWarning(14,`Failed to parse the string \"${a}\" into a proper descriptor`);continue}let c=so(l.range)?_t(l,`npm:${l.range}`):l,{version:u,resolved:g}=s[a];if(!g)continue;let f;for(let[p,C]of UOe){let y=g.match(p);if(y){f=C(u,...y);break}}if(!f){t.reportWarning(14,`${tr(e.configuration,c)}: Only some patterns can be imported from legacy lockfiles (not \"${g}\")`);continue}let h=c;try{let p=vf(c.range),C=aC(p.selector,!0);C&&(h=C)}catch{}o.set(c.descriptorHash,nn(h,f))}}supportsDescriptor(e,t){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!this.resolutions)throw new Error(\"Assertion failed: The resolution store should have been setup\");let n=this.resolutions.get(e.descriptorHash);if(!n)throw new Error(\"Assertion failed: The resolution should have been registered\");return await this.resolver.getCandidates(HD(n),t,i)}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Assertion failed: This resolver doesn't support resolving locators to packages\")}};var z0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return!!(t.project.storedResolutions.get(e.descriptorHash)||t.project.originalPackages.has(Sw(e).locatorHash))}supportsLocator(e,t){return!!(t.project.originalPackages.has(e.locatorHash)&&!t.project.lockfileNeedsRefresh)}shouldPersistResolution(e,t){throw new Error(\"The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){let n=i.project.originalPackages.get(Sw(e).locatorHash);if(n)return[n];let s=i.project.storedResolutions.get(e.descriptorHash);if(!s)throw new Error(\"Expected the resolution to have been successful - resolution not found\");if(n=i.project.originalPackages.get(s),!n)throw new Error(\"Expected the resolution to have been successful - package not found\");return[n]}async getSatisfying(e,t,i){return null}async resolve(e,t){let i=t.project.originalPackages.get(e.locatorHash);if(!i)throw new Error(\"The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache\");return i}};var V0=class{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,i){return this.resolver.bindDescriptor(e,t,i)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async getSatisfying(e,t,i){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}async resolve(e,t){throw new at(20,`This package doesn't seem to be present in your lockfile; run \"yarn install\" to update the lockfile`)}};var ti=class extends vi{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,t){return t()}async startSectionPromise(e,t){return await t()}startTimerSync(e,t,i){return(typeof t==\"function\"?t:i)()}async startTimerPromise(e,t,i){return await(typeof t==\"function\"?t:i)()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}};var P$=Pe(OD());var Qh=class{constructor(e,{project:t}){this.workspacesCwds=new Set;this.dependencies=new Map;this.project=t,this.cwd=e}async setup(){var s;this.manifest=(s=await ot.tryFind(this.cwd))!=null?s:new ot,this.relativeCwd=x.relative(this.project.cwd,this.cwd)||Me.dot;let e=this.manifest.name?this.manifest.name:Jo(null,`${this.computeCandidateName()}-${rn(this.relativeCwd).substring(0,6)}`),t=this.manifest.version?this.manifest.version:\"0.0.0\";this.locator=nn(e,t),this.anchoredDescriptor=_t(this.locator,`${Yr.protocol}${this.relativeCwd}`),this.anchoredLocator=nn(this.locator,`${Yr.protocol}${this.relativeCwd}`);let i=this.manifest.workspaceDefinitions.map(({pattern:o})=>o);if(i.length===0)return;let n=await(0,P$.default)(i,{cwd:K.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:[\"**/node_modules\",\"**/.git\",\"**/.yarn\"]});n.sort(),await n.reduce(async(o,a)=>{let l=x.resolve(this.cwd,K.toPortablePath(a)),c=await O.existsPromise(x.join(l,\"package.json\"));await o,c&&this.workspacesCwds.add(l)},Promise.resolve())}accepts(e){var o;let t=e.indexOf(\":\"),i=t!==-1?e.slice(0,t+1):null,n=t!==-1?e.slice(t+1):e;if(i===Yr.protocol&&x.normalize(n)===this.relativeCwd||i===Yr.protocol&&(n===\"*\"||n===\"^\"||n===\"~\"))return!0;let s=so(n);return s?i===Yr.protocol?s.test((o=this.manifest.version)!=null?o:\"0.0.0\"):this.project.configuration.get(\"enableTransparentWorkspaces\")&&this.manifest.version!==null?s.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?\"root-workspace\":`${x.basename(this.cwd)}`||\"unnamed-workspace\"}getRecursiveWorkspaceDependencies({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of e)for(let o of n.manifest[s].values()){let a=this.project.tryWorkspaceByDescriptor(o);a===null||t.has(a)||(t.add(a),i(a))}};return i(this),t}getRecursiveWorkspaceDependents({dependencies:e=ot.hardDependencies}={}){let t=new Set,i=n=>{for(let s of this.project.workspaces)e.some(a=>[...s.manifest[a].values()].some(l=>{let c=this.project.tryWorkspaceByDescriptor(l);return c!==null&&oC(c.anchoredLocator,n.anchoredLocator)}))&&!t.has(s)&&(t.add(s),i(s))};return i(this),t}getRecursiveWorkspaceChildren(){let e=[];for(let t of this.workspacesCwds){let i=this.project.workspacesByCwd.get(t);i&&e.push(i,...i.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let t=x.join(this.cwd,ot.fileName),i=`${JSON.stringify(e,null,this.manifest.indent)}\n`;await O.changeFilePromise(t,i,{automaticNewlines:!0}),this.manifest.raw=e}};var D$=6,HOe=1,GOe=/ *, */g,k$=/\\/$/,YOe=32,jOe=(0,zN.promisify)(VN.default.gzip),qOe=(0,zN.promisify)(VN.default.gunzip),ts=(t=>(t.UpdateLockfile=\"update-lockfile\",t.SkipBuild=\"skip-build\",t))(ts||{}),JN={restoreInstallersCustomData:[\"installersCustomData\"],restoreResolutions:[\"accessibleLocators\",\"conditionalLocators\",\"disabledLocators\",\"optionalBuilds\",\"storedDescriptors\",\"storedResolutions\",\"storedPackages\",\"lockFileChecksum\"],restoreBuildState:[\"storedBuildState\"]},R$=r=>rn(`${HOe}`,r),je=class{constructor(e,{configuration:t}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.installersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=t,this.cwd=e}static async find(e,t){var p,C,y;if(!e.projectCwd)throw new Qe(`No project found in ${t}`);let i=e.projectCwd,n=t,s=null;for(;s!==e.projectCwd;){if(s=n,O.existsSync(x.join(s,xt.manifest))){i=s;break}n=x.dirname(s)}let o=new je(e.projectCwd,{configuration:e});(p=ye.telemetry)==null||p.reportProject(o.cwd),await o.setupResolutions(),await o.setupWorkspaces(),(C=ye.telemetry)==null||C.reportWorkspaceCount(o.workspaces.length),(y=ye.telemetry)==null||y.reportDependencyCount(o.workspaces.reduce((B,v)=>B+v.manifest.dependencies.size+v.manifest.devDependencies.size,0));let a=o.tryWorkspaceByCwd(i);if(a)return{project:o,workspace:a,locator:a.anchoredLocator};let l=await o.findLocatorForLocation(`${i}/`,{strict:!0});if(l)return{project:o,locator:l,workspace:null};let c=$e(e,o.cwd,Ue.PATH),u=$e(e,x.relative(o.cwd,i),Ue.PATH),g=`- If ${c} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,f=`- If ${c} is intended to be a project, it might be that you forgot to list ${u} in its workspace configuration.`,h=`- Finally, if ${c} is fine and you intend ${u} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new Qe(`The nearest package directory (${$e(e,i,Ue.PATH)}) doesn't seem to be part of the project declared in ${$e(e,o.cwd,Ue.PATH)}.\n\n${[g,f,h].join(`\n`)}`)}async setupResolutions(){var i;this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=this.configuration.get(\"defaultLanguageName\");if(O.existsSync(e)){let n=await O.readFilePromise(e,\"utf8\");this.lockFileChecksum=R$(n);let s=yi(n);if(s.__metadata){let o=s.__metadata.version,a=s.__metadata.cacheKey;this.lockfileNeedsRefresh=o<D$;for(let l of Object.keys(s)){if(l===\"__metadata\")continue;let c=s[l];if(typeof c.resolution>\"u\")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${l})`);let u=Dc(c.resolution,!0),g=new ot;g.load(c,{yamlCompatibilityMode:!0});let f=g.version,h=g.languageName||t,p=c.linkType.toUpperCase(),C=(i=c.conditions)!=null?i:null,y=g.dependencies,B=g.peerDependencies,v=g.dependenciesMeta,D=g.peerDependenciesMeta,T=g.bin;if(c.checksum!=null){let j=typeof a<\"u\"&&!c.checksum.includes(\"/\")?`${a}/${c.checksum}`:c.checksum;this.storedChecksums.set(u.locatorHash,j)}let H={...u,version:f,languageName:h,linkType:p,conditions:C,dependencies:y,peerDependencies:B,dependenciesMeta:v,peerDependenciesMeta:D,bin:T};this.originalPackages.set(H.locatorHash,H);for(let j of l.split(GOe)){let $=WA(j);this.storedDescriptors.set($.descriptorHash,$),this.storedResolutions.set($.descriptorHash,u.locatorHash)}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,t=(0,_0.default)(4),i=async(n,s)=>{if(e.has(s))return n;e.add(s);let o=new Qh(s,{project:this});await t(()=>o.setup());let a=n.then(()=>{this.addWorkspace(o);let l=this.storedPackages.get(o.anchoredLocator.locatorHash);l&&(o.dependencies=l.dependencies)});return Array.from(o.workspacesCwds).reduce(i,a)};await i(Promise.resolve(),this.cwd)}addWorkspace(e){let t=this.workspacesByIdent.get(e.locator.identHash);if(typeof t<\"u\")throw new Error(`Duplicate workspace name ${Ai(this.configuration,e.locator)}: ${K.fromPortablePath(e.cwd)} conflicts with ${K.fromPortablePath(t.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.locator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){x.isAbsolute(e)||(e=x.resolve(this.cwd,e)),e=x.normalize(e).replace(/\\/+$/,\"\");let t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){let t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(let i of this.workspaces)x.relative(i.cwd,e).startsWith(\"../\")||t&&t.cwd.length>=i.cwd.length||(t=i);return t||null}getWorkspaceByFilePath(e){let t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){let t=this.workspacesByIdent.get(e.identHash);return typeof t>\"u\"?null:t}getWorkspaceByIdent(e){let t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${Ai(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){let t=this.tryWorkspaceByIdent(e);return t===null||(JA(e)&&(e=iC(e)),!t.accepts(e.range))?null:t}getWorkspaceByDescriptor(e){let t=this.tryWorkspaceByDescriptor(e);if(t===null)throw new Error(`Workspace not found (${tr(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){let t=this.tryWorkspaceByIdent(e);return t===null||(qo(e)&&(e=nC(e)),t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash)?null:t}getWorkspaceByLocator(e){let t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${mt(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(let e of this.workspaces){let t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error(`Assertion failed: Expected workspace ${lC(this.configuration,e)} (${$e(this.configuration,x.join(e.cwd,xt.manifest),Ue.PATH)}) to have been resolved. Run \"yarn install\" to update the lockfile`);e.dependencies=new Map(t.dependencies)}}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if(\"descriptorHash\"in e){let t=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let i=new Set(this.storedResolutions.values());typeof t<\"u\"&&!i.has(t)&&this.deleteLocator(t)}if(\"locatorHash\"in e){this.deleteLocator(e.locatorHash);for(let[t,i]of this.storedResolutions)i===e.locatorHash&&this.deleteDescriptor(t)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),t=new Map;for(let[i,n]of this.storedResolutions.entries()){let s=t.get(n);s||t.set(n,s=new Set),s.add(i)}for(let i of this.originalPackages.values()){let n;try{n=e.shouldPersistResolution(i,{project:this,resolver:e})}catch{n=!1}if(!n){this.deleteLocator(i.locatorHash);let s=t.get(i.locatorHash);if(s){t.delete(i.locatorHash);for(let o of s)this.deleteDescriptor(o)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[t,i]of e.dependencies)JA(i)&&e.dependencies.set(t,iC(i))}getDependencyMeta(e,t){let i={},s=this.topLevelWorkspace.manifest.dependenciesMeta.get(Mt(e));if(!s)return i;let o=s.get(null);if(o&&Object.assign(i,o),t===null||!F$.default.valid(t))return i;for(let[a,l]of s)a!==null&&a===t&&Object.assign(i,l);return i}async findLocatorForLocation(e,{strict:t=!1}={}){let i=new ti,n=this.configuration.getLinkers(),s={project:this,report:i};for(let o of n){let a=await o.findPackageLocator(e,s);if(a){if(t&&(await o.findPackageLocation(a,s)).replace(k$,\"\")!==e.replace(k$,\"\"))continue;return a}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error(\"Workspaces must have been setup before calling this function\");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();let t=e.resolver||this.configuration.makeResolver(),i=new W0(t);await i.setup(this,{report:e.report});let n=e.lockfileOnly?[new V0(t)]:[i,t],s=new kf([new z0(t),...n]),o=this.configuration.makeFetcher(),a=e.lockfileOnly?{project:this,report:e.report,resolver:s}:{project:this,report:e.report,resolver:s,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:o,cacheOptions:{mirrorWriteOnly:!0}}},l=new Map,c=new Map,u=new Map,g=new Map,f=new Map,h=new Map,p=this.topLevelWorkspace.anchoredLocator,C=new Set,y=[],B=$D(),v=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(vi.progressViaTitle(),async W=>{let _=async M=>{let F=await df(async()=>await s.resolve(M,a),ke=>`${mt(this.configuration,M)}: ${ke}`);if(!oC(M,F))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${mt(this.configuration,M)} to ${mt(this.configuration,F)})`);g.set(F.locatorHash,F);let ue=this.configuration.normalizePackage(F);for(let[ke,Fe]of ue.dependencies){let Ne=await this.configuration.reduceHook(le=>le.reduceDependency,Fe,this,ue,Fe,{resolver:s,resolveOptions:a});if(!sC(Fe,Ne))throw new Error(\"Assertion failed: The descriptor ident cannot be changed through aliases\");let oe=s.bindDescriptor(Ne,M,a);ue.dependencies.set(ke,oe)}let pe=io([...ue.dependencies.values()].map(ke=>re(ke)));return y.push(pe),pe.catch(()=>{}),c.set(ue.locatorHash,ue),ue},A=async M=>{let F=f.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=Promise.resolve().then(()=>_(M));return f.set(M.locatorHash,ue),ue},Ae=async(M,F)=>{let ue=await re(F);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,ue.locatorHash),ue},ge=async M=>{W.setTitle(tr(this.configuration,M));let F=this.resolutionAliases.get(M.descriptorHash);if(typeof F<\"u\")return Ae(M,this.storedDescriptors.get(F));let ue=s.getResolutionDependencies(M,a),pe=new Map(await io(ue.map(async Ne=>{let oe=s.bindDescriptor(Ne,p,a),le=await re(oe);return C.add(le.locatorHash),[Ne.descriptorHash,le]}))),Fe=(await df(async()=>await s.getCandidates(M,pe,a),Ne=>`${tr(this.configuration,M)}: ${Ne}`))[0];if(typeof Fe>\"u\")throw new Error(`${tr(this.configuration,M)}: No candidates found`);return l.set(M.descriptorHash,M),u.set(M.descriptorHash,Fe.locatorHash),A(Fe)},re=M=>{let F=h.get(M.descriptorHash);if(typeof F<\"u\")return F;l.set(M.descriptorHash,M);let ue=Promise.resolve().then(()=>ge(M));return h.set(M.descriptorHash,ue),ue};for(let M of this.workspaces){let F=M.anchoredDescriptor;y.push(re(F))}for(;y.length>0;){let M=[...y];y.length=0,await io(M)}});let D=new Set(this.resolutionAliases.values()),T=new Set(c.keys()),H=new Set,j=new Map;JOe({project:this,report:e.report,accessibleLocators:H,volatileDescriptors:D,optionalBuilds:T,peerRequirements:j,allDescriptors:l,allResolutions:u,allPackages:c});for(let W of C)T.delete(W);for(let W of D)l.delete(W),u.delete(W);let $=new Set,V=new Set;for(let W of c.values())W.conditions!=null&&(!T.has(W.locatorHash)||(kw(W,v)||(kw(W,B)&&e.report.reportWarningOnce(77,`${mt(this.configuration,W)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${$e(this.configuration,\"supportedArchitectures\",xi.SETTING)} setting`),V.add(W.locatorHash)),$.add(W.locatorHash)));this.storedResolutions=u,this.storedDescriptors=l,this.storedPackages=c,this.accessibleLocators=H,this.conditionalLocators=$,this.disabledLocators=V,this.originalPackages=g,this.optionalBuilds=T,this.peerRequirements=j,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:i,mode:n}){let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,cacheOptions:s},l=Array.from(new Set(bn(this.storedResolutions.values(),[f=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");return Es(h)}])));n===\"update-lockfile\"&&(l=l.filter(f=>!this.storedChecksums.has(f)));let c=!1,u=vi.progressViaCounter(l.length);await t.reportProgress(u);let g=(0,_0.default)(YOe);if(await t.startCacheReport(async()=>{await io(l.map(f=>g(async()=>{let h=this.storedPackages.get(f);if(!h)throw new Error(\"Assertion failed: The locator should have been registered\");if(qo(h))return;let p;try{p=await o.fetch(h,a)}catch(C){C.message=`${mt(this.configuration,h)}: ${C.message}`,t.reportExceptionOnce(C),c=C;return}p.checksum!=null?this.storedChecksums.set(h.locatorHash,p.checksum):this.storedChecksums.delete(h.locatorHash),p.releaseFs&&p.releaseFs()}).finally(()=>{u.tick()})))}),c)throw c}async linkEverything({cache:e,report:t,fetcher:i,mode:n}){var Ae,ge,re;let s={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},o=i||this.configuration.makeFetcher(),a={checksums:this.storedChecksums,project:this,cache:e,fetcher:o,report:t,skipIntegrityCheck:!0,cacheOptions:s},l=this.configuration.getLinkers(),c={project:this,report:t},u=new Map(l.map(M=>{let F=M.makeInstaller(c),ue=F.getCustomDataKey(),pe=this.installersCustomData.get(ue);return typeof pe<\"u\"&&F.attachCustomData(pe),[M,F]})),g=new Map,f=new Map,h=new Map,p=new Map(await io([...this.accessibleLocators].map(async M=>{let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");return[M,await o.fetch(F,a)]}))),C=[];for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(typeof F>\"u\")throw new Error(\"Assertion failed: The locator should have been registered\");let ue=p.get(F.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The fetch result should have been registered\");let pe=[],ke=Ne=>{pe.push(Ne)},Fe=this.tryWorkspaceByLocator(F);if(Fe!==null){let Ne=[],{scripts:oe}=Fe.manifest;for(let Be of[\"preinstall\",\"install\",\"postinstall\"])oe.has(Be)&&Ne.push([0,Be]);try{for(let[Be,fe]of u)if(Be.supportsPackage(F,c)&&(await fe.installPackage(F,ue,{holdFetchResult:ke})).buildDirective!==null)throw new Error(\"Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core\")}finally{pe.length===0?(Ae=ue.releaseFs)==null||Ae.call(ue):C.push(io(pe).catch(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}let le=x.join(ue.packageFs.getRealPath(),ue.prefixPath);f.set(F.locatorHash,le),!qo(F)&&Ne.length>0&&h.set(F.locatorHash,{directives:Ne,buildLocations:[le]})}else{let Ne=l.find(Be=>Be.supportsPackage(F,c));if(!Ne)throw new at(12,`${mt(this.configuration,F)} isn't supported by any available linker`);let oe=u.get(Ne);if(!oe)throw new Error(\"Assertion failed: The installer should have been registered\");let le;try{le=await oe.installPackage(F,ue,{holdFetchResult:ke})}finally{pe.length===0?(ge=ue.releaseFs)==null||ge.call(ue):C.push(io(pe).then(()=>{}).then(()=>{var Be;(Be=ue.releaseFs)==null||Be.call(ue)}))}g.set(F.locatorHash,Ne),f.set(F.locatorHash,le.packageLocation),le.buildDirective&&le.buildDirective.length>0&&le.packageLocation&&h.set(F.locatorHash,{directives:le.buildDirective,buildLocations:[le.packageLocation]})}}let y=new Map;for(let M of this.accessibleLocators){let F=this.storedPackages.get(M);if(!F)throw new Error(\"Assertion failed: The locator should have been registered\");let ue=this.tryWorkspaceByLocator(F)!==null,pe=async(ke,Fe)=>{let Ne=f.get(F.locatorHash);if(typeof Ne>\"u\")throw new Error(`Assertion failed: The package (${mt(this.configuration,F)}) should have been registered`);let oe=[];for(let le of F.dependencies.values()){let Be=this.storedResolutions.get(le.descriptorHash);if(typeof Be>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,le)}, from ${mt(this.configuration,F)})should have been registered`);let fe=this.storedPackages.get(Be);if(typeof fe>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);let ae=this.tryWorkspaceByLocator(fe)===null?g.get(Be):null;if(typeof ae>\"u\")throw new Error(`Assertion failed: The package (${Be}, resolved from ${tr(this.configuration,le)}) should have been registered`);ae===ke||ae===null?f.get(fe.locatorHash)!==null&&oe.push([le,fe]):!ue&&Ne!==null&&hf(y,Be).push(Ne)}Ne!==null&&await Fe.attachInternalDependencies(F,oe)};if(ue)for(let[ke,Fe]of u)ke.supportsPackage(F,c)&&await pe(ke,Fe);else{let ke=g.get(F.locatorHash);if(!ke)throw new Error(\"Assertion failed: The linker should have been found\");let Fe=u.get(ke);if(!Fe)throw new Error(\"Assertion failed: The installer should have been registered\");await pe(ke,Fe)}}for(let[M,F]of y){let ue=this.storedPackages.get(M);if(!ue)throw new Error(\"Assertion failed: The package should have been registered\");let pe=g.get(ue.locatorHash);if(!pe)throw new Error(\"Assertion failed: The linker should have been found\");let ke=u.get(pe);if(!ke)throw new Error(\"Assertion failed: The installer should have been registered\");await ke.attachExternalDependents(ue,F)}let B=new Map;for(let M of u.values()){let F=await M.finalizeInstall();for(let ue of(re=F==null?void 0:F.records)!=null?re:[])h.set(ue.locatorHash,{directives:ue.buildDirective,buildLocations:ue.buildLocations});typeof(F==null?void 0:F.customData)<\"u\"&&B.set(M.getCustomDataKey(),F.customData)}if(this.installersCustomData=B,await io(C),n===\"skip-build\")return;let v=new Set(this.storedPackages.keys()),D=new Set(h.keys());for(let M of D)v.delete(M);let T=(0,X0.createHash)(\"sha512\");T.update(process.versions.node),await this.configuration.triggerHook(M=>M.globalHashGeneration,this,M=>{T.update(\"\\0\"),T.update(M)});let H=T.digest(\"hex\"),j=new Map,$=M=>{let F=j.get(M.locatorHash);if(typeof F<\"u\")return F;let ue=this.storedPackages.get(M.locatorHash);if(typeof ue>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");let pe=(0,X0.createHash)(\"sha512\");pe.update(M.locatorHash),j.set(M.locatorHash,\"<recursive>\");for(let ke of ue.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(typeof Fe>\"u\")throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);let Ne=this.storedPackages.get(Fe);if(typeof Ne>\"u\")throw new Error(\"Assertion failed: The package should have been registered\");pe.update($(Ne))}return F=pe.digest(\"hex\"),j.set(M.locatorHash,F),F},V=(M,F)=>{let ue=(0,X0.createHash)(\"sha512\");ue.update(H),ue.update($(M));for(let pe of F)ue.update(pe);return ue.digest(\"hex\")},W=new Map,_=!1,A=M=>{let F=new Set([M.locatorHash]);for(let ue of F){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");for(let ke of pe.dependencies.values()){let Fe=this.storedResolutions.get(ke.descriptorHash);if(!Fe)throw new Error(`Assertion failed: The resolution (${tr(this.configuration,ke)}) should have been registered`);if(Fe!==M.locatorHash&&D.has(Fe))return!1;let Ne=this.storedPackages.get(Fe);if(!Ne)throw new Error(\"Assertion failed: The package should have been registered\");let oe=this.tryWorkspaceByLocator(Ne);if(oe){if(oe.anchoredLocator.locatorHash!==M.locatorHash&&D.has(oe.anchoredLocator.locatorHash))return!1;F.add(oe.anchoredLocator.locatorHash)}F.add(Fe)}}return!0};for(;D.size>0;){let M=D.size,F=[];for(let ue of D){let pe=this.storedPackages.get(ue);if(!pe)throw new Error(\"Assertion failed: The package should have been registered\");if(!A(pe))continue;let ke=h.get(pe.locatorHash);if(!ke)throw new Error(\"Assertion failed: The build directive should have been registered\");let Fe=V(pe,ke.buildLocations);if(this.storedBuildState.get(pe.locatorHash)===Fe){W.set(pe.locatorHash,Fe),D.delete(ue);continue}_||(await this.persistInstallStateFile(),_=!0),this.storedBuildState.has(pe.locatorHash)?t.reportInfo(8,`${mt(this.configuration,pe)} must be rebuilt because its dependency tree changed`):t.reportInfo(7,`${mt(this.configuration,pe)} must be built because it never has been before or the last one failed`);let Ne=ke.buildLocations.map(async oe=>{if(!x.isAbsolute(oe))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${oe})`);for(let[le,Be]of ke.directives){let fe=`# This file contains the result of Yarn building a package (${Es(pe)})\n`;switch(le){case 0:fe+=`# Script name: ${Be}\n`;break;case 1:fe+=`# Script code: ${Be}\n`;break}let ae=null;if(!await O.mktempPromise(async ne=>{let Y=x.join(ne,\"build.log\"),{stdout:he,stderr:ie}=this.configuration.getSubprocessStreams(Y,{header:fe,prefix:mt(this.configuration,pe),report:t}),de;try{switch(le){case 0:de=await TB(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break;case 1:de=await JR(pe,Be,[],{cwd:oe,project:this,stdin:ae,stdout:he,stderr:ie});break}}catch(Pt){ie.write(Pt.stack),de=1}if(he.end(),ie.end(),de===0)return!0;O.detachTemp(ne);let _e=`${mt(this.configuration,pe)} couldn't be built successfully (exit code ${$e(this.configuration,de,Ue.NUMBER)}, logs can be found here: ${$e(this.configuration,Y,Ue.PATH)})`;return this.optionalBuilds.has(pe.locatorHash)?(t.reportInfo(9,_e),!0):(t.reportError(9,_e),!1)}))return!1}return!0});F.push(...Ne,Promise.allSettled(Ne).then(oe=>{D.delete(ue),oe.every(le=>le.status===\"fulfilled\"&&le.value===!0)&&W.set(pe.locatorHash,Fe)}))}if(await io(F),M===D.size){let ue=Array.from(D).map(pe=>{let ke=this.storedPackages.get(pe);if(!ke)throw new Error(\"Assertion failed: The package should have been registered\");return mt(this.configuration,ke)}).join(\", \");t.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ue})`);break}}this.storedBuildState=W}async install(e){var a,l;let t=this.configuration.get(\"nodeLinker\");(a=ye.telemetry)==null||a.reportInstall(t),await e.report.startTimerPromise(\"Project validation\",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(c=>c.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.status=\"inactive\";let i=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),n=null;if(e.immutable)try{n=await O.readFilePromise(i,\"utf8\")}catch(c){throw c.code===\"ENOENT\"?new at(28,\"The lockfile would have been created by this install, which is explicitly forbidden.\"):c}await e.report.startTimerPromise(\"Resolution step\",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise(\"Post-resolution validation\",{skipIfEmpty:!0},async()=>{for(let[,c]of this.configuration.packageExtensions)for(let[,u]of c)for(let g of u)if(g.userProvided){let f=$e(this.configuration,g,Ue.PACKAGE_EXTENSION);switch(g.status){case\"inactive\":e.report.reportWarning(68,`${f}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case\"redundant\":e.report.reportWarning(69,`${f}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(n!==null){let c=Vl(n,this.generateLockfile());if(c!==n){let u=wZ(i,i,n,c,void 0,void 0,{maxEditLength:100});if(u){e.report.reportSeparator();for(let g of u.hunks){e.report.reportInfo(null,`@@ -${g.oldStart},${g.oldLines} +${g.newStart},${g.newLines} @@`);for(let f of g.lines)f.startsWith(\"+\")?e.report.reportError(28,$e(this.configuration,f,Ue.ADDED)):f.startsWith(\"-\")?e.report.reportError(28,$e(this.configuration,f,Ue.REMOVED)):e.report.reportInfo(null,$e(this.configuration,f,\"grey\"))}e.report.reportSeparator()}throw new at(28,\"The lockfile would have been modified by this install, which is explicitly forbidden.\")}}});for(let c of this.configuration.packageExtensions.values())for(let[,u]of c)for(let g of u)g.userProvided&&g.status===\"active\"&&((l=ye.telemetry)==null||l.reportPackageExtension(Bc(g,Ue.PACKAGE_EXTENSION)));await e.report.startTimerPromise(\"Fetch step\",async()=>{await this.fetchEverything(e),(typeof e.persistProject>\"u\"||e.persistProject)&&e.mode!==\"update-lockfile\"&&await this.cacheCleanup(e)});let s=e.immutable?[...new Set(this.configuration.get(\"immutablePatterns\"))].sort():[],o=await Promise.all(s.map(async c=>Qw(c,{cwd:this.cwd})));(typeof e.persistProject>\"u\"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise(\"Link step\",async()=>{if(e.mode===\"update-lockfile\"){e.report.reportWarning(73,`Skipped due to ${$e(this.configuration,\"mode=update-lockfile\",Ue.CODE)}`);return}await this.linkEverything(e);let c=await Promise.all(s.map(async u=>Qw(u,{cwd:this.cwd})));for(let u=0;u<s.length;++u)o[u]!==c[u]&&e.report.reportError(64,`The checksum for ${s[u]} has been modified by this install, which is explicitly forbidden.`)}),await this.persistInstallStateFile(),await this.configuration.triggerHook(c=>c.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,s]of this.storedResolutions.entries()){let o=e.get(s);o||e.set(s,o=new Set),o.add(n)}let t={};t.__metadata={version:D$,cacheKey:void 0};for(let[n,s]of e.entries()){let o=this.originalPackages.get(n);if(!o)continue;let a=[];for(let f of s){let h=this.storedDescriptors.get(f);if(!h)throw new Error(\"Assertion failed: The descriptor should have been registered\");a.push(h)}let l=a.map(f=>Sn(f)).sort().join(\", \"),c=new ot;c.version=o.linkType===\"HARD\"?o.version:\"0.0.0-use.local\",c.languageName=o.languageName,c.dependencies=new Map(o.dependencies),c.peerDependencies=new Map(o.peerDependencies),c.dependenciesMeta=new Map(o.dependenciesMeta),c.peerDependenciesMeta=new Map(o.peerDependenciesMeta),c.bin=new Map(o.bin);let u,g=this.storedChecksums.get(o.locatorHash);if(typeof g<\"u\"){let f=g.indexOf(\"/\");if(f===-1)throw new Error(\"Assertion failed: Expected the checksum to reference its cache key\");let h=g.slice(0,f),p=g.slice(f+1);typeof t.__metadata.cacheKey>\"u\"&&(t.__metadata.cacheKey=h),h===t.__metadata.cacheKey?u=p:u=g}t[l]={...c.exportTo({},{compatibilityMode:!1}),linkType:o.linkType.toLowerCase(),resolution:Es(o),checksum:u,conditions:o.conditions||void 0}}return`${[`# This file is generated by running \"yarn install\" inside your project.\n`,`# Manual changes might be lost - proceed with caution!\n`].join(\"\")}\n`+ba(t)}async persistLockfile(){let e=x.join(this.cwd,this.configuration.get(\"lockfileFilename\")),t=\"\";try{t=await O.readFilePromise(e,\"utf8\")}catch{}let i=this.generateLockfile(),n=Vl(t,i);n!==t&&(await O.writeFilePromise(e,n),this.lockFileChecksum=R$(n),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let o of Object.values(JN))e.push(...o);let t=(0,Z0.default)(this,e),i=WN.default.serialize(t),n=rn(i);if(this.installStateChecksum===n)return;let s=this.configuration.get(\"installStatePath\");await O.mkdirPromise(x.dirname(s),{recursive:!0}),await O.writeFilePromise(s,await jOe(i)),this.installStateChecksum=n}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0,restoreBuildState:i=!0}={}){let n=this.configuration.get(\"installStatePath\"),s;try{let o=await qOe(await O.readFilePromise(n));s=WN.default.deserialize(o),this.installStateChecksum=rn(o)}catch{t&&await this.applyLightResolution();return}e&&typeof s.installersCustomData<\"u\"&&(this.installersCustomData=s.installersCustomData),i&&Object.assign(this,(0,Z0.default)(s,JN.restoreBuildState)),t&&(s.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,(0,Z0.default)(s,JN.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new ti}),await this.persistInstallStateFile()}async persist(){let e=(0,_0.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(t=>e(()=>t.persistManifest()))])}async cacheCleanup({cache:e,report:t}){if(this.configuration.get(\"enableGlobalCache\"))return;let i=new Set([\".gitignore\"]);if(!ZD(e.cwd,this.cwd)||!await O.existsPromise(e.cwd))return;let n=this.configuration.get(\"preferAggregateCacheInfo\"),s=0,o=null;for(let a of await O.readdirPromise(e.cwd)){if(i.has(a))continue;let l=x.resolve(e.cwd,a);e.markedFiles.has(l)||(o=a,e.immutable?t.reportError(56,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused and would be marked for deletion, but the cache is immutable`):(n?s+=1:t.reportInfo(19,`${$e(this.configuration,x.basename(l),\"magenta\")} appears to be unused - removing`),await O.removePromise(l)))}n&&s!==0&&t.reportInfo(19,s>1?`${s} packages appeared to be unused and were removed`:`${o} appeared to be unused and was removed`),e.markedFiles.clear()}};function JOe({project:r,allDescriptors:e,allResolutions:t,allPackages:i,accessibleLocators:n=new Set,optionalBuilds:s=new Set,peerRequirements:o=new Map,volatileDescriptors:a=new Set,report:l}){var V;let c=new Map,u=[],g=new Map,f=new Map,h=new Map,p=new Map,C=new Map,y=new Map(r.workspaces.map(W=>{let _=W.anchoredLocator.locatorHash,A=i.get(_);if(typeof A>\"u\")throw new Error(\"Assertion failed: The workspace should have an associated package\");return[_,rC(A)]})),B=()=>{let W=O.mktempSync(),_=x.join(W,\"stacktrace.log\"),A=String(u.length+1).length,Ae=u.map((ge,re)=>`${`${re+1}.`.padStart(A,\" \")} ${Es(ge)}\n`).join(\"\");throw O.writeFileSync(_,Ae),O.detachTemp(W),new at(45,`Encountered a stack overflow when resolving peer dependencies; cf ${K.fromPortablePath(_)}`)},v=W=>{let _=t.get(W.descriptorHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: The resolution should have been registered\");let A=i.get(_);if(!A)throw new Error(\"Assertion failed: The package could not be found\");return A},D=(W,_,A,{top:Ae,optional:ge})=>{u.length>1e3&&B(),u.push(_);let re=T(W,_,A,{top:Ae,optional:ge});return u.pop(),re},T=(W,_,A,{top:Ae,optional:ge})=>{if(n.has(_.locatorHash))return;n.add(_.locatorHash),ge||s.delete(_.locatorHash);let re=i.get(_.locatorHash);if(!re)throw new Error(`Assertion failed: The package (${mt(r.configuration,_)}) should have been registered`);let M=[],F=[],ue=[],pe=[],ke=[];for(let Ne of Array.from(re.dependencies.values())){if(re.peerDependencies.has(Ne.identHash)&&re.locatorHash!==Ae)continue;if(JA(Ne))throw new Error(\"Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch\");a.delete(Ne.descriptorHash);let oe=ge;if(!oe){let Y=re.dependenciesMeta.get(Mt(Ne));if(typeof Y<\"u\"){let he=Y.get(null);typeof he<\"u\"&&he.optional&&(oe=!0)}}let le=t.get(Ne.descriptorHash);if(!le)throw new Error(`Assertion failed: The resolution (${tr(r.configuration,Ne)}) should have been registered`);let Be=y.get(le)||i.get(le);if(!Be)throw new Error(`Assertion failed: The package (${le}, resolved from ${tr(r.configuration,Ne)}) should have been registered`);if(Be.peerDependencies.size===0){D(Ne,Be,new Map,{top:Ae,optional:oe});continue}let fe,ae,qe=new Set,ne;F.push(()=>{fe=GD(Ne,_.locatorHash),ae=YD(Be,_.locatorHash),re.dependencies.delete(Ne.identHash),re.dependencies.set(fe.identHash,fe),t.set(fe.descriptorHash,ae.locatorHash),e.set(fe.descriptorHash,fe),i.set(ae.locatorHash,ae),M.push([Be,fe,ae])}),ue.push(()=>{var Y;ne=new Map;for(let he of ae.peerDependencies.values()){let ie=re.dependencies.get(he.identHash);if(!ie&&sC(_,he)&&(W.identHash===_.identHash?ie=W:(ie=_t(_,W.range),e.set(ie.descriptorHash,ie),t.set(ie.descriptorHash,_.locatorHash),a.delete(ie.descriptorHash))),(!ie||ie.range===\"missing:\")&&ae.dependencies.has(he.identHash)){ae.peerDependencies.delete(he.identHash);continue}ie||(ie=_t(he,\"missing:\")),ae.dependencies.set(ie.identHash,ie),JA(ie)&&wc(h,ie.descriptorHash).add(ae.locatorHash),g.set(ie.identHash,ie),ie.range===\"missing:\"&&qe.add(ie.identHash),ne.set(he.identHash,(Y=A.get(he.identHash))!=null?Y:ae.locatorHash)}ae.dependencies=new Map(bn(ae.dependencies,([he,ie])=>Mt(ie)))}),pe.push(()=>{if(!i.has(ae.locatorHash))return;let Y=c.get(Be.locatorHash);typeof Y==\"number\"&&Y>=2&&B();let he=c.get(Be.locatorHash),ie=typeof he<\"u\"?he+1:1;c.set(Be.locatorHash,ie),D(fe,ae,ne,{top:Ae,optional:oe}),c.set(Be.locatorHash,ie-1)}),ke.push(()=>{let Y=re.dependencies.get(Ne.identHash);if(typeof Y>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to have been turned into a dependency\");let he=t.get(Y.descriptorHash);if(typeof he>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");if(wc(C,he).add(_.locatorHash),!!i.has(ae.locatorHash)){for(let ie of ae.peerDependencies.values()){let de=ne.get(ie.identHash);if(typeof de>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency ident to be registered\");hf(pf(p,de),Mt(ie)).push(ae.locatorHash)}for(let ie of qe)ae.dependencies.delete(ie)}})}for(let Ne of[...F,...ue])Ne();let Fe;do{Fe=!0;for(let[Ne,oe,le]of M){let Be=pf(f,Ne.locatorHash),fe=rn(...[...le.dependencies.values()].map(Y=>{let he=Y.range!==\"missing:\"?t.get(Y.descriptorHash):\"missing:\";if(typeof he>\"u\")throw new Error(`Assertion failed: Expected the resolution for ${tr(r.configuration,Y)} to have been registered`);return he===Ae?`${he} (top)`:he}),oe.identHash),ae=Be.get(fe);if(typeof ae>\"u\"){Be.set(fe,oe);continue}if(ae===oe)continue;i.delete(le.locatorHash),e.delete(oe.descriptorHash),t.delete(oe.descriptorHash),n.delete(le.locatorHash);let qe=h.get(oe.descriptorHash)||[],ne=[re.locatorHash,...qe];h.delete(oe.descriptorHash);for(let Y of ne){let he=i.get(Y);typeof he>\"u\"||(he.dependencies.get(oe.identHash).descriptorHash!==ae.descriptorHash&&(Fe=!1),he.dependencies.set(oe.identHash,ae))}}}while(!Fe);for(let Ne of[...pe,...ke])Ne()};for(let W of r.workspaces){let _=W.anchoredLocator;a.delete(W.anchoredDescriptor.descriptorHash),D(W.anchoredDescriptor,_,new Map,{top:_.locatorHash,optional:!1})}let H;(A=>(A[A.NotProvided=0]=\"NotProvided\",A[A.NotCompatible=1]=\"NotCompatible\"))(H||(H={}));let j=[];for(let[W,_]of C){let A=i.get(W);if(typeof A>\"u\")throw new Error(\"Assertion failed: Expected the root to be registered\");let Ae=p.get(W);if(!(typeof Ae>\"u\"))for(let ge of _){let re=i.get(ge);if(!(typeof re>\"u\"))for(let[M,F]of Ae){let ue=tn(M);if(re.peerDependencies.has(ue.identHash))continue;let pe=`p${rn(ge,M,W).slice(0,5)}`;o.set(pe,{subject:ge,requested:ue,rootRequester:W,allRequesters:F});let ke=A.dependencies.get(ue.identHash);if(typeof ke<\"u\"){let Fe=v(ke),Ne=(V=Fe.version)!=null?V:\"0.0.0\",oe=new Set;for(let Be of F){let fe=i.get(Be);if(typeof fe>\"u\")throw new Error(\"Assertion failed: Expected the link to be registered\");let ae=fe.peerDependencies.get(ue.identHash);if(typeof ae>\"u\")throw new Error(\"Assertion failed: Expected the ident to be registered\");oe.add(ae.range)}[...oe].every(Be=>{if(Be.startsWith(Yr.protocol)){if(!r.tryWorkspaceByLocator(Fe))return!1;Be=Be.slice(Yr.protocol.length),(Be===\"^\"||Be===\"~\")&&(Be=\"*\")}return kc(Ne,Be)})||j.push({type:1,subject:re,requested:ue,requester:A,version:Ne,hash:pe,requirementCount:F.length})}else{let Fe=A.peerDependenciesMeta.get(M);Fe!=null&&Fe.optional||j.push({type:0,subject:re,requested:ue,requester:A,hash:pe})}}}}let $=[W=>jD(W.subject),W=>Mt(W.requested),W=>`${W.type}`];l==null||l.startSectionSync({reportFooter:()=>{l.reportWarning(0,`Some peer dependencies are incorrectly met; run ${$e(r.configuration,\"yarn explain peer-requirements <hash>\",Ue.CODE)} for details, where ${$e(r.configuration,\"<hash>\",Ue.CODE)} is the six-letter p-prefixed code`)},skipIfEmpty:!0},()=>{for(let W of bn(j,$))switch(W.type){case 0:l.reportWarning(2,`${mt(r.configuration,W.subject)} doesn't provide ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}), requested by ${Ai(r.configuration,W.requester)}`);break;case 1:{let _=W.requirementCount>1?\"and some of its descendants request\":\"requests\";l.reportWarning(60,`${mt(r.configuration,W.subject)} provides ${Ai(r.configuration,W.requested)} (${$e(r.configuration,W.hash,Ue.CODE)}) with version ${AC(r.configuration,W.version)}, which doesn't satisfy what ${Ai(r.configuration,W.requester)} ${_}`)}break}})}var Sh=class{constructor(e,t){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.configuration=e;let i=this.getRegistryPath();this.isNew=!O.existsSync(i),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(\"version\",e.replace(/-git\\..*/,\"-git\"))}reportCommandName(e){this.reportValue(\"commandName\",e||\"<none>\")}reportPluginName(e){this.reportValue(\"pluginName\",e)}reportProject(e){this.reportEnumerator(\"projectCount\",e)}reportInstall(e){this.reportHit(\"installCount\",e)}reportPackageExtension(e){this.reportValue(\"packageExtension\",e)}reportWorkspaceCount(e){this.reportValue(\"workspaceCount\",String(e))}reportDependencyCount(e){this.reportValue(\"dependencyCount\",String(e))}reportValue(e,t){wc(this.values,e).add(t)}reportEnumerator(e,t){wc(this.enumerators,e).add(rn(t))}reportHit(e,t=\"*\"){let i=pf(this.hits,e),n=Ta(i,t,()=>0);i.set(t,n+1)}getRegistryPath(){let e=this.configuration.get(\"globalFolder\");return x.join(e,\"telemetry.json\")}sendReport(e){var u,g,f;let t=this.getRegistryPath(),i;try{i=O.readJsonSync(t)}catch{i={}}let n=Date.now(),s=this.configuration.get(\"telemetryInterval\")*24*60*60*1e3,a=((u=i.lastUpdate)!=null?u:n+s+Math.floor(s*Math.random()))+s;if(a>n&&i.lastUpdate!=null)return;try{O.mkdirSync(x.dirname(t),{recursive:!0}),O.writeJsonSync(t,{lastUpdate:n})}catch{return}if(a>n||!i.blocks)return;let l=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,c=h=>kR(l,h,{configuration:this.configuration}).catch(()=>{});for(let[h,p]of Object.entries((g=i.blocks)!=null?g:{})){if(Object.keys(p).length===0)continue;let C=p;C.userId=h,C.reportType=\"primary\";for(let v of Object.keys((f=C.enumerators)!=null?f:{}))C.enumerators[v]=C.enumerators[v].length;c(C);let y=new Map,B=20;for(let[v,D]of Object.entries(C.values))D.length>0&&y.set(v,D.slice(0,B));for(;y.size>0;){let v={};v.userId=h,v.reportType=\"secondary\",v.metrics={};for(let[D,T]of y)v.metrics[D]=T.shift(),T.length===0&&y.delete(D);c(v)}}}applyChanges(){var o,a,l,c,u,g,f,h,p;let e=this.getRegistryPath(),t;try{t=O.readJsonSync(e)}catch{t={}}let i=(o=this.configuration.get(\"telemetryUserId\"))!=null?o:\"*\",n=t.blocks=(a=t.blocks)!=null?a:{},s=n[i]=(l=n[i])!=null?l:{};for(let C of this.hits.keys()){let y=s.hits=(c=s.hits)!=null?c:{},B=y[C]=(u=y[C])!=null?u:{};for(let[v,D]of this.hits.get(C))B[v]=((g=B[v])!=null?g:0)+D}for(let C of[\"values\",\"enumerators\"])for(let y of this[C].keys()){let B=s[C]=(f=s[C])!=null?f:{};B[y]=[...new Set([...(h=B[y])!=null?h:[],...(p=this[C].get(y))!=null?p:[]])]}O.mkdirSync(x.dirname(e),{recursive:!0}),O.writeJsonSync(e,t)}startBuffer(){process.on(\"exit\",()=>{try{this.applyChanges()}catch{}})}};var XN=J(\"child_process\"),N$=Pe(Ac());var ZN=J(\"fs\");var vh=new Map([[\"constraints\",[[\"constraints\",\"query\"],[\"constraints\",\"source\"],[\"constraints\"]]],[\"exec\",[]],[\"interactive-tools\",[[\"search\"],[\"upgrade-interactive\"]]],[\"stage\",[[\"stage\"]]],[\"typescript\",[]],[\"version\",[[\"version\",\"apply\"],[\"version\",\"check\"],[\"version\"]]],[\"workspace-tools\",[[\"workspaces\",\"focus\"],[\"workspaces\",\"foreach\"]]]]);function WOe(r){let e=K.fromPortablePath(r);process.on(\"SIGINT\",()=>{}),e?(0,XN.execFileSync)(process.execPath,[e,...process.argv.slice(2)],{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}}):(0,XN.execFileSync)(e,process.argv.slice(2),{stdio:\"inherit\",env:{...process.env,YARN_IGNORE_PATH:\"1\",YARN_IGNORE_CWD:\"1\"}})}async function $0({binaryVersion:r,pluginConfiguration:e}){async function t(){let n=new Gn({binaryLabel:\"Yarn Package Manager\",binaryName:\"yarn\",binaryVersion:r});try{await i(n)}catch(s){process.stdout.write(n.error(s)),process.exitCode=1}}async function i(n){var C,y,B,v,D;let s=process.versions.node,o=\">=12 <14 || 14.2 - 14.9 || >14.10.0\";if(!Ie.parseOptionalBoolean(process.env.YARN_IGNORE_NODE)&&!vt.satisfiesWithPrereleases(s,o))throw new Qe(`This tool requires a Node version compatible with ${o} (got ${s}). Upgrade Node, or set \\`YARN_IGNORE_NODE=1\\` in your environment.`);let l=await ye.find(K.toPortablePath(process.cwd()),e,{usePath:!0,strict:!1}),c=l.get(\"yarnPath\"),u=l.get(\"ignorePath\"),g=l.get(\"ignoreCwd\"),f=K.toPortablePath(K.resolve(process.argv[1])),h=T=>O.readFilePromise(T).catch(()=>Buffer.of());if(!u&&!g&&await(async()=>c===f||Buffer.compare(...await Promise.all([h(c),h(f)]))===0)()){process.env.YARN_IGNORE_PATH=\"1\",process.env.YARN_IGNORE_CWD=\"1\",await i(n);return}else if(c!==null&&!u)if(!O.existsSync(c))process.stdout.write(n.error(new Error(`The \"yarn-path\" option has been set (in ${l.sources.get(\"yarnPath\")}), but the specified location doesn't exist (${c}).`))),process.exitCode=1;else try{WOe(c)}catch(T){process.exitCode=T.code||1}else{u&&delete process.env.YARN_IGNORE_PATH,l.get(\"enableTelemetry\")&&!N$.isCI&&process.stdout.isTTY&&(ye.telemetry=new Sh(l,\"puba9cdc10ec5790a2cf4969dd413a47270\")),(C=ye.telemetry)==null||C.reportVersion(r);for(let[$,V]of l.plugins.entries()){vh.has((B=(y=$.match(/^@yarnpkg\\/plugin-(.*)$/))==null?void 0:y[1])!=null?B:\"\")&&((v=ye.telemetry)==null||v.reportPluginName($));for(let W of V.commands||[])n.register(W)}let H=n.process(process.argv.slice(2));H.help||(D=ye.telemetry)==null||D.reportCommandName(H.path.join(\" \"));let j=H.cwd;if(typeof j<\"u\"&&!g){let $=(0,ZN.realpathSync)(process.cwd()),V=(0,ZN.realpathSync)(j);if($!==V){process.chdir(j),await t();return}}await n.runExit(H,{cwd:K.toPortablePath(process.cwd()),plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}}return t().catch(n=>{process.stdout.write(n.stack||n.message),process.exitCode=1}).finally(()=>O.rmtempPromise())}function T$(r){r.Command.Path=(...e)=>t=>{t.paths=t.paths||[],t.paths.push(e)};for(let e of[\"Array\",\"Boolean\",\"String\",\"Proxy\",\"Rest\",\"Counter\"])r.Command[e]=(...t)=>(i,n)=>{let s=r.Option[e](...t);Object.defineProperty(i,`__${n}`,{configurable:!1,enumerable:!0,get(){return s},set(o){this[n]=o}})};return r}var Nm={};ut(Nm,{BaseCommand:()=>De,WorkspaceRequiredError:()=>ct,getDynamicLibs:()=>zie,getPluginConfiguration:()=>Bb,main:()=>$0,openWorkspace:()=>Hh,pluginCommands:()=>vh});var De=class extends ve{constructor(){super(...arguments);this.cwd=z.String(\"--cwd\",{hidden:!0})}};var ct=class extends Qe{constructor(e,t){let i=x.relative(e,t),n=x.join(e,ot.fileName);super(`This command can only be run from within a workspace of your project (${i} isn't a workspace of ${n}).`)}};var $Ye=Pe(Xr());ls();var eje=Pe(VT()),zie=()=>new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",ud],[\"semver\",$Ye],[\"typanion\",hn],[\"yup\",eje]]);async function Hh(r,e){let{project:t,workspace:i}=await je.find(r,e);if(!i)throw new ct(t.cwd,e);return i}var P9e=Pe(Xr());ls();var D9e=Pe(VT());var CM={};ut(CM,{dedupeUtils:()=>Nb,default:()=>g4e,suggestUtils:()=>qh});var Wae=Pe(Ac());var Lse=Pe(Km());ls();var qh={};ut(qh,{Modifier:()=>HL,Strategy:()=>Db,Target:()=>Um,WorkspaceModifier:()=>Dse,applyModifier:()=>Rse,extractDescriptorFromPath:()=>GL,extractRangeModifier:()=>kse,fetchDescriptorFrom:()=>YL,findProjectDescriptors:()=>Tse,getModifier:()=>Hm,getSuggestedDescriptors:()=>Gm,makeWorkspaceDescriptor:()=>Nse,toWorkspaceModifier:()=>Fse});var UL=Pe(Xr()),mqe=\"workspace:\",Um=(i=>(i.REGULAR=\"dependencies\",i.DEVELOPMENT=\"devDependencies\",i.PEER=\"peerDependencies\",i))(Um||{}),HL=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"\",i))(HL||{}),Dse=(i=>(i.CARET=\"^\",i.TILDE=\"~\",i.EXACT=\"*\",i))(Dse||{}),Db=(s=>(s.KEEP=\"keep\",s.REUSE=\"reuse\",s.PROJECT=\"project\",s.LATEST=\"latest\",s.CACHE=\"cache\",s))(Db||{});function Hm(r,e){return r.exact?\"\":r.caret?\"^\":r.tilde?\"~\":e.configuration.get(\"defaultSemverRangePrefix\")}var Eqe=/^([\\^~]?)[0-9]+(?:\\.[0-9]+){0,2}(?:-\\S+)?$/;function kse(r,{project:e}){let t=r.match(Eqe);return t?t[1]:e.configuration.get(\"defaultSemverRangePrefix\")}function Rse(r,e){let{protocol:t,source:i,params:n,selector:s}=P.parseRange(r.range);return UL.default.valid(s)&&(s=`${e}${r.range}`),P.makeDescriptor(r,P.makeRange({protocol:t,source:i,params:n,selector:s}))}function Fse(r){switch(r){case\"^\":return\"^\";case\"~\":return\"~\";case\"\":return\"*\";default:throw new Error(`Assertion failed: Unknown modifier: \"${r}\"`)}}function Nse(r,e){return P.makeDescriptor(r.anchoredDescriptor,`${mqe}${Fse(e)}`)}async function Tse(r,{project:e,target:t}){let i=new Map,n=s=>{let o=i.get(s.descriptorHash);return o||i.set(s.descriptorHash,o={descriptor:s,locators:[]}),o};for(let s of e.workspaces)if(t===\"peerDependencies\"){let o=s.manifest.peerDependencies.get(r.identHash);o!==void 0&&n(o).locators.push(s.anchoredLocator)}else{let o=s.manifest.dependencies.get(r.identHash),a=s.manifest.devDependencies.get(r.identHash);t===\"devDependencies\"?a!==void 0?n(a).locators.push(s.anchoredLocator):o!==void 0&&n(o).locators.push(s.anchoredLocator):o!==void 0?n(o).locators.push(s.anchoredLocator):a!==void 0&&n(a).locators.push(s.anchoredLocator)}return i}async function GL(r,{cwd:e,workspace:t}){return await Iqe(async i=>{x.isAbsolute(r)||(r=x.relative(t.cwd,x.resolve(e,r)),r.match(/^\\.{0,2}\\//)||(r=`./${r}`));let{project:n}=t,s=await YL(P.makeIdent(null,\"archive\"),r,{project:t.project,cache:i,workspace:t});if(!s)throw new Error(\"Assertion failed: The descriptor should have been found\");let o=new ti,a=n.configuration.makeResolver(),l=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:i,fetcher:l,report:o,resolver:a},u=a.bindDescriptor(s,t.anchoredLocator,c),g=P.convertDescriptorToLocator(u),f=await l.fetch(g,c),h=await ot.find(f.prefixPath,{baseFs:f.packageFs});if(!h.name)throw new Error(\"Target path doesn't have a name\");return P.makeDescriptor(h.name,r)})}async function Gm(r,{project:e,workspace:t,cache:i,target:n,modifier:s,strategies:o,maxResults:a=1/0}){if(!(a>=0))throw new Error(`Invalid maxResults (${a})`);if(r.range!==\"unknown\")return{suggestions:[{descriptor:r,name:`Use ${P.prettyDescriptor(e.configuration,r)}`,reason:\"(unambiguous explicit request)\"}],rejections:[]};let l=typeof t<\"u\"&&t!==null&&t.manifest[n].get(r.identHash)||null,c=[],u=[],g=async f=>{try{await f()}catch(h){u.push(h)}};for(let f of o){if(c.length>=a)break;switch(f){case\"keep\":await g(async()=>{l&&c.push({descriptor:l,name:`Keep ${P.prettyDescriptor(e.configuration,l)}`,reason:\"(no changes)\"})});break;case\"reuse\":await g(async()=>{for(let{descriptor:h,locators:p}of(await Tse(r,{project:e,target:n})).values()){if(p.length===1&&p[0].locatorHash===t.anchoredLocator.locatorHash&&o.includes(\"keep\"))continue;let C=`(originally used by ${P.prettyLocator(e.configuration,p[0])}`;C+=p.length>1?` and ${p.length-1} other${p.length>2?\"s\":\"\"})`:\")\",c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:C})}});break;case\"cache\":await g(async()=>{for(let h of e.storedDescriptors.values())h.identHash===r.identHash&&c.push({descriptor:h,name:`Reuse ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(already used somewhere in the lockfile)\"})});break;case\"project\":await g(async()=>{if(t.manifest.name!==null&&r.identHash===t.manifest.name.identHash)return;let h=e.tryWorkspaceByIdent(r);if(h===null)return;let p=Nse(h,s);c.push({descriptor:p,name:`Attach ${P.prettyDescriptor(e.configuration,p)}`,reason:`(local workspace at ${ee.pretty(e.configuration,h.relativeCwd,ee.Type.PATH)})`})});break;case\"latest\":await g(async()=>{if(r.range!==\"unknown\")c.push({descriptor:r,name:`Use ${P.prettyRange(e.configuration,r.range)}`,reason:\"(explicit range requested)\"});else if(n===\"peerDependencies\")c.push({descriptor:P.makeDescriptor(r,\"*\"),name:\"Use *\",reason:\"(catch-all peer dependency pattern)\"});else if(!e.configuration.get(\"enableNetwork\"))c.push({descriptor:null,name:\"Resolve from latest\",reason:ee.pretty(e.configuration,\"(unavailable because enableNetwork is toggled off)\",\"grey\")});else{let h=await YL(r,\"latest\",{project:e,cache:i,workspace:t,preserveModifier:!1});h&&(h=Rse(h,s),c.push({descriptor:h,name:`Use ${P.prettyDescriptor(e.configuration,h)}`,reason:\"(resolved from latest)\"}))}});break}}return{suggestions:c.slice(0,a),rejections:u.slice(0,a)}}async function YL(r,e,{project:t,cache:i,workspace:n,preserveModifier:s=!0}){let o=P.makeDescriptor(r,e),a=new ti,l=t.configuration.makeFetcher(),c=t.configuration.makeResolver(),u={project:t,fetcher:l,cache:i,checksums:t.storedChecksums,report:a,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},g={...u,resolver:c,fetchOptions:u},f=c.bindDescriptor(o,n.anchoredLocator,g),h=await c.getCandidates(f,new Map,g);if(h.length===0)return null;let p=h[0],{protocol:C,source:y,params:B,selector:v}=P.parseRange(P.convertToManifestRange(p.reference));if(C===t.configuration.get(\"defaultProtocol\")&&(C=null),UL.default.valid(v)&&s!==!1){let D=typeof s==\"string\"?s:o.range;v=kse(D,{project:t})+v}return P.makeDescriptor(p,P.makeRange({protocol:C,source:y,params:B,selector:v}))}async function Iqe(r){return await O.mktempPromise(async e=>{let t=ye.create(e);return t.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await r(new Rt(e,{configuration:t,check:!1,immutable:!1}))})}var Au=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.dev=z.Boolean(\"-D,--dev\",!1,{description:\"Add a package as a dev dependency\"});this.peer=z.Boolean(\"-P,--peer\",!1,{description:\"Add a package as a peer dependency\"});this.optional=z.Boolean(\"-O,--optional\",!1,{description:\"Add / upgrade a package to an optional regular / peer dependency\"});this.preferDev=z.Boolean(\"--prefer-dev\",!1,{description:\"Add / upgrade a package to a dev dependency\"});this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Reuse the specified package from other workspaces in the project\"});this.cached=z.Boolean(\"--cached\",!1,{description:\"Reuse the highest version already used somewhere within the project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.packages=z.Rest()}async execute(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=[...o?[\"reuse\"]:[],\"project\",...this.cached?[\"cache\"]:[],\"latest\"],c=o?1/0:1,u=await Promise.all(this.packages.map(async B=>{let v=B.match(/^\\.{0,2}\\//)?await GL(B,{cwd:this.context.cwd,workspace:n}):P.tryParseDescriptor(B),D=B.match(/^(https?:|git@github)/);if(D)throw new Qe(`It seems you are trying to add a package using a ${ee.pretty(t,`${D[0]}...`,xi.RANGE)} url; we now require package names to be explicitly specified.\nTry running the command again with the package name prefixed: ${ee.pretty(t,\"yarn add\",xi.CODE)} ${ee.pretty(t,P.makeDescriptor(P.makeIdent(null,\"my-package\"),`${D[0]}...`),xi.DESCRIPTOR)}`);if(!v)throw new Qe(`The ${ee.pretty(t,B,xi.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let T=yqe(n,v,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(T.map(async j=>{let $=await Gm(v,{project:i,workspace:n,cache:s,target:j,modifier:a,strategies:l,maxResults:c});return{request:v,suggestedDescriptors:$,target:j}}))})).then(B=>B.flat()),g=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let{request:v,suggestedDescriptors:{suggestions:D,rejections:T}}of u)if(D.filter(j=>j.descriptor!==null).length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),B.reportSeparator(),B.reportExceptionOnce(j)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[],p=[];for(let{suggestedDescriptors:{suggestions:B},target:v}of u){let D,T=B.filter(V=>V.descriptor!==null),H=T[0].descriptor,j=T.every(V=>P.areDescriptorsEqual(V.descriptor,H));T.length===1||j?D=H:(f=!0,{answer:D}=await(0,Lse.prompt)({type:\"select\",name:\"answer\",message:\"Which range do you want to use?\",choices:B.map(({descriptor:V,name:W,reason:_})=>V?{name:W,hint:_,descriptor:V}:{name:W,hint:_,disabled:!0}),onCancel:()=>process.exit(130),result(V){return this.find(V,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let $=n.manifest[v].get(D.identHash);(typeof $>\"u\"||$.descriptorHash!==D.descriptorHash)&&(n.manifest[v].set(D.identHash,D),this.optional&&(v===\"dependencies\"?n.manifest.ensureDependencyMeta({...D,range:\"unknown\"}).optional=!0:v===\"peerDependencies\"&&(n.manifest.ensurePeerDependencyMeta({...D,range:\"unknown\"}).optional=!0)),typeof $>\"u\"?h.push([n,v,D,l]):p.push([n,v,$,D]))}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyAddition,h),await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),f&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};Au.paths=[[\"add\"]],Au.usage=ve.Usage({description:\"add dependencies to the project\",details:\"\\n      This command adds a package to the package.json for the nearest workspace.\\n\\n      - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\\n\\n      - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\\n\\n      - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\\n\\n      - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\\\"peerDependenciesMeta\\\": { \\\"<package>\\\": { \\\"optional\\\": true } }`\\n\\n      - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\\n\\n      - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\\n\\n      If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\\n\\n      If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\\n    \",examples:[[\"Add a regular package to the current workspace\",\"$0 add lodash\"],[\"Add a specific version for a package to the current workspace\",\"$0 add lodash@1.2.3\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using a URL\",\"$0 add lodash@https://github.com/lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol\",\"$0 add lodash@github:lodash/lodash\"],[\"Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash@lodash/lodash\"],[\"Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)\",\"$0 add lodash-es@lodash/lodash#es\"]]});function yqe(r,e,{dev:t,peer:i,preferDev:n,optional:s}){let o=r.manifest[\"dependencies\"].has(e.identHash),a=r.manifest[\"devDependencies\"].has(e.identHash),l=r.manifest[\"peerDependencies\"].has(e.identHash);if((t||i)&&o)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!t&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(s&&a)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(s&&!i&&l)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((t||n)&&s)throw new Qe(`Package \"${P.prettyIdent(r.project.configuration,e)}\" cannot simultaneously be a dev dependency and an optional dependency`);let c=[];return i&&c.push(\"peerDependencies\"),(t||n)&&c.push(\"devDependencies\"),s&&c.push(\"dependencies\"),c.length>0?c:a?[\"devDependencies\"]:l?[\"peerDependencies\"]:[\"dependencies\"]}var lu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print both the binary name and the locator of the package that provides the binary\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.name=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);if(await i.restoreInstallState(),this.name){let a=(await Wt.getPackageAccessibleBinaries(n,{project:i})).get(this.name);if(!a)throw new Qe(`Couldn't find a binary named \"${this.name}\" for package \"${P.prettyLocator(t,n)}\"`);let[,l]=a;return this.context.stdout.write(`${l}\n`),0}return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async o=>{let a=await Wt.getPackageAccessibleBinaries(n,{project:i}),c=Array.from(a.keys()).reduce((u,g)=>Math.max(u,g.length),0);for(let[u,[g,f]]of a)o.reportJson({name:u,source:P.stringifyIdent(g),path:f});if(this.verbose)for(let[u,[g]]of a)o.reportInfo(null,`${u.padEnd(c,\" \")}   ${P.prettyLocator(t,g)}`);else for(let u of a.keys())o.reportInfo(null,u)})).exitCode()}};lu.paths=[[\"bin\"]],lu.usage=ve.Usage({description:\"get the path to a binary script\",details:`\n      When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \\`-v,--verbose\\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n      When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n    `,examples:[[\"List all the available binaries\",\"$0 bin\"],[\"Print the path to a specific binary\",\"$0 bin eslint\"]]});var cu=class extends De{constructor(){super(...arguments);this.mirror=z.Boolean(\"--mirror\",!1,{description:\"Remove the global cache files instead of the local cache files\"});this.all=z.Boolean(\"--all\",!1,{description:\"Remove both the global cache files and the local cache files of the current project\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await Rt.find(t);return(await Ge.start({configuration:t,stdout:this.context.stdout},async()=>{let s=(this.all||this.mirror)&&i.mirrorCwd!==null,o=!this.mirror;s&&(await O.removePromise(i.mirrorCwd),await t.triggerHook(a=>a.cleanGlobalArtifacts,t)),o&&await O.removePromise(i.cwd)})).exitCode()}};cu.paths=[[\"cache\",\"clean\"],[\"cache\",\"clear\"]],cu.usage=ve.Usage({description:\"remove the shared cache files\",details:`\n      This command will remove all the files from the cache.\n    `,examples:[[\"Remove all the local archives\",\"$0 cache clean\"],[\"Remove all the archives stored in the ~/.yarn directory\",\"$0 cache clean --mirror\"]]});var Mse=Pe(ub()),jL=J(\"util\"),uu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.unsafe=z.Boolean(\"--no-redacted\",!1,{description:\"Don't redact secrets (such as tokens) from the output\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=this.name.replace(/[.[].*$/,\"\"),n=this.name.replace(/^[^.[]*/,\"\");if(typeof t.settings.get(i)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${i}\"`);let o=t.getSpecial(i,{hideSecrets:!this.unsafe,getNativePaths:!0}),a=Ie.convertMapsToIndexableObjects(o),l=n?(0,Mse.default)(a,n):a,c=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async u=>{u.reportJson(l)});if(!this.json){if(typeof l==\"string\")return this.context.stdout.write(`${l}\n`),c.exitCode();jL.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,jL.inspect)(l,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}\n`)}return c.exitCode()}};uu.paths=[[\"config\",\"get\"]],uu.usage=ve.Usage({description:\"read a configuration settings\",details:`\n      This command will print a configuration setting.\n\n      Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \\`--no-redacted\\` to get the untransformed value.\n    `,examples:[[\"Print a simple configuration setting\",\"yarn config get yarnPath\"],[\"Print a complex configuration setting\",\"yarn config get packageExtensions\"],[\"Print a nested field from the configuration\",`yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'`],[\"Print a token from the configuration\",\"yarn config get npmAuthToken --no-redacted\"],[\"Print a configuration setting as JSON\",\"yarn config get packageExtensions --json\"]]});var Voe=Pe(XL()),Xoe=Pe(ub()),Zoe=Pe(zoe()),ZL=J(\"util\"),gu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Set complex configuration settings to JSON values\"});this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String();this.value=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);if(n===\"enableStrictSettings\")throw new Qe(\"This setting only affects the file it's in, and thus cannot be set from the CLI\");let a=this.json?JSON.parse(this.value):this.value;await(this.home?p=>ye.updateHomeConfiguration(p):p=>ye.updateConfiguration(i(),p))(p=>{if(s){let C=(0,Voe.default)(p);return(0,Zoe.default)(C,this.name,a),C}else return{...p,[n]:a}});let u=(await ye.find(this.context.cwd,this.context.plugins)).getSpecial(n,{hideSecrets:!0,getNativePaths:!0}),g=Ie.convertMapsToIndexableObjects(u),f=s?(0,Xoe.default)(g,s):g;return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async p=>{ZL.inspect.styles.name=\"cyan\",p.reportInfo(0,`Successfully set ${this.name} to ${(0,ZL.inspect)(f,{depth:1/0,colors:t.get(\"enableColors\"),compact:!1})}`)})).exitCode()}};gu.paths=[[\"config\",\"set\"]],gu.usage=ve.Usage({description:\"change a configuration settings\",details:`\n      This command will set a configuration setting.\n\n      When used without the \\`--json\\` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n      When used with the \\`--json\\` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n    `,examples:[[\"Set a simple configuration setting (a string, a number, or a boolean)\",\"yarn config set initScope myScope\"],[\"Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag\",'yarn config set initScope --json \\\\\"myScope\\\\\"'],[\"Set a complex configuration setting (an Array) using the `--json` flag\",`yarn config set unsafeHttpWhitelist --json '[\"*.example.com\", \"example.com\"]'`],[\"Set a complex configuration setting (an Object) using the `--json` flag\",`yarn config set packageExtensions --json '{ \"@babel/parser@*\": { \"dependencies\": { \"@babel/types\": \"*\" } } }'`],[\"Set a nested configuration setting\",'yarn config set npmScopes.company.npmRegistryServer \"https://npm.example.com\"'],[\"Set a nested configuration setting using indexed access for non-simple keys\",`yarn config set 'npmRegistries[\"//npm.example.com\"].npmAuthToken' \"ffffffff-ffff-ffff-ffff-ffffffffffff\"`]]});var oae=Pe(XL()),aae=Pe(am()),Aae=Pe(sae()),fu=class extends De{constructor(){super(...arguments);this.home=z.Boolean(\"-H,--home\",!1,{description:\"Update the home configuration instead of the project configuration\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=()=>{if(!t.projectCwd)throw new Qe(\"This command must be run from within a project folder\");return t.projectCwd},n=this.name.replace(/[.[].*$/,\"\"),s=this.name.replace(/^[^.[]*\\.?/,\"\");if(typeof t.settings.get(n)>\"u\")throw new Qe(`Couldn't find a configuration settings named \"${n}\"`);let a=this.home?c=>ye.updateHomeConfiguration(c):c=>ye.updateConfiguration(i(),c);return(await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout},async c=>{let u=!1;await a(g=>{if(!(0,aae.default)(g,this.name))return c.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),u=!0,g;let f=s?(0,oae.default)(g):{...g};return(0,Aae.default)(f,this.name),f}),u||c.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};fu.paths=[[\"config\",\"unset\"]],fu.usage=ve.Usage({description:\"unset a configuration setting\",details:`\n      This command will unset a configuration setting.\n    `,examples:[[\"Unset a simple configuration setting\",\"yarn config unset initScope\"],[\"Unset a complex configuration setting\",\"yarn config unset packageExtensions\"],[\"Unset a nested configuration setting\",\"yarn config unset npmScopes.company.npmRegistryServer\"]]});var _L=J(\"util\"),hu=class extends De{constructor(){super(...arguments);this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Print the setting description on top of the regular key/value information\"});this.why=z.Boolean(\"--why\",!1,{description:\"Print the reason why a setting is set a particular way\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins,{strict:!1});return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{if(t.invalid.size>0&&!this.json){for(let[s,o]of t.invalid)n.reportError(34,`Invalid configuration key \"${s}\" in ${o}`);n.reportSeparator()}if(this.json){let s=Ie.sortMap(t.settings.keys(),o=>o);for(let o of s){let a=t.settings.get(o),l=t.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),c=t.sources.get(o);this.verbose?n.reportJson({key:o,effective:l,source:c}):n.reportJson({key:o,effective:l,source:c,...a})}}else{let s=Ie.sortMap(t.settings.keys(),l=>l),o=s.reduce((l,c)=>Math.max(l,c.length),0),a={breakLength:1/0,colors:t.get(\"enableColors\"),maxArrayLength:2};if(this.why||this.verbose){let l=s.map(u=>{let g=t.settings.get(u);if(!g)throw new Error(`Assertion failed: This settings (\"${u}\") should have been registered`);let f=this.why?t.sources.get(u)||\"<default>\":g.description;return[u,f]}),c=l.reduce((u,[,g])=>Math.max(u,g.length),0);for(let[u,g]of l)n.reportInfo(null,`${u.padEnd(o,\" \")}   ${g.padEnd(c,\" \")}   ${(0,_L.inspect)(t.getSpecial(u,{hideSecrets:!0,getNativePaths:!0}),a)}`)}else for(let l of s)n.reportInfo(null,`${l.padEnd(o,\" \")}   ${(0,_L.inspect)(t.getSpecial(l,{hideSecrets:!0,getNativePaths:!0}),a)}`)}})).exitCode()}};hu.paths=[[\"config\"]],hu.usage=ve.Usage({description:\"display the current configuration\",details:`\n      This command prints the current active configuration settings.\n    `,examples:[[\"Print the active configuration settings\",\"$0 config\"]]});ls();var Nb={};ut(Nb,{Strategy:()=>jm,acceptedStrategies:()=>b3e,dedupe:()=>$L});var lae=Pe(Bn()),jm=(e=>(e.HIGHEST=\"highest\",e))(jm||{}),b3e=new Set(Object.values(jm)),Q3e={highest:async(r,e,{resolver:t,fetcher:i,resolveOptions:n,fetchOptions:s})=>{let o=new Map;for(let[a,l]of r.storedResolutions){let c=r.storedDescriptors.get(a);if(typeof c>\"u\")throw new Error(`Assertion failed: The descriptor (${a}) should have been registered`);Ie.getSetWithDefault(o,c.identHash).add(l)}return Array.from(r.storedDescriptors.values(),async a=>{if(e.length&&!lae.default.isMatch(P.stringifyIdent(a),e))return null;let l=r.storedResolutions.get(a.descriptorHash);if(typeof l>\"u\")throw new Error(`Assertion failed: The resolution (${a.descriptorHash}) should have been registered`);let c=r.originalPackages.get(l);if(typeof c>\"u\"||!t.shouldPersistResolution(c,n))return null;let u=o.get(a.identHash);if(typeof u>\"u\")throw new Error(`Assertion failed: The resolutions (${a.identHash}) should have been registered`);if(u.size===1)return null;let g=[...u].map(y=>{let B=r.originalPackages.get(y);if(typeof B>\"u\")throw new Error(`Assertion failed: The package (${y}) should have been registered`);return B.reference}),f=await t.getSatisfying(a,g,n),h=f==null?void 0:f[0];if(typeof h>\"u\")return null;let p=h.locatorHash,C=r.originalPackages.get(p);if(typeof C>\"u\")throw new Error(`Assertion failed: The package (${p}) should have been registered`);return p===l?null:{descriptor:a,currentPackage:c,updatedPackage:C}})}};async function $L(r,{strategy:e,patterns:t,cache:i,report:n}){let{configuration:s}=r,o=new ti,a=s.makeResolver(),l=s.makeFetcher(),c={cache:i,checksums:r.storedChecksums,fetcher:l,project:r,report:o,skipIntegrityCheck:!0,cacheOptions:{skipIntegrityCheck:!0}},u={project:r,resolver:a,report:o,fetchOptions:c};return await n.startTimerPromise(\"Deduplication step\",async()=>{let g=Q3e[e],f=await g(r,t,{resolver:a,resolveOptions:u,fetcher:l,fetchOptions:c}),h=vi.progressViaCounter(f.length);await n.reportProgress(h);let p=0;await Promise.all(f.map(B=>B.then(v=>{if(v===null)return;p++;let{descriptor:D,currentPackage:T,updatedPackage:H}=v;n.reportInfo(0,`${P.prettyDescriptor(s,D)} can be deduped from ${P.prettyLocator(s,T)} to ${P.prettyLocator(s,H)}`),n.reportJson({descriptor:P.stringifyDescriptor(D),currentResolution:P.stringifyLocator(T),updatedResolution:P.stringifyLocator(H)}),r.storedResolutions.set(D.descriptorHash,H.locatorHash)}).finally(()=>h.tick())));let C;switch(p){case 0:C=\"No packages\";break;case 1:C=\"One package\";break;default:C=`${p} packages`}let y=ee.pretty(s,e,ee.Type.CODE);return n.reportInfo(0,`${C} can be deduped using the ${y} strategy`),p})}var pu=class extends De{constructor(){super(...arguments);this.strategy=z.String(\"-s,--strategy\",\"highest\",{description:\"The strategy to use when deduping dependencies\",validator:Zi(jm)});this.check=z.Boolean(\"-c,--check\",!1,{description:\"Exit with exit code 1 when duplicates are found, without persisting the dependency tree\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=await Rt.find(t);await i.restoreInstallState({restoreResolutions:!1});let s=0,o=await Ge.start({configuration:t,includeFooter:!1,stdout:this.context.stdout,json:this.json},async a=>{s=await $L(i,{strategy:this.strategy,patterns:this.patterns,cache:n,report:a})});return o.hasErrors()?o.exitCode():this.check?s?1:0:(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async l=>{await i.install({cache:n,report:l,mode:this.mode})})).exitCode()}};pu.paths=[[\"dedupe\"]],pu.usage=ve.Usage({description:\"deduplicate dependencies with overlapping ranges\",details:\"\\n      Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\\n\\n      This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\\n\\n      - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\\n\\n      **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\\n\\n      If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      ### In-depth explanation:\\n\\n      Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\\n\\n      Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\\n\\n      **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\\n    \",examples:[[\"Dedupe all packages\",\"$0 dedupe\"],[\"Dedupe all packages using a specific strategy\",\"$0 dedupe --strategy highest\"],[\"Dedupe a specific package\",\"$0 dedupe lodash\"],[\"Dedupe all packages with the `@babel/*` scope\",\"$0 dedupe '@babel/*'\"],[\"Check for duplicates (can be used as a CI step)\",\"$0 dedupe --check\"]]});var Vh=class extends De{async execute(){let{plugins:e}=await ye.find(this.context.cwd,this.context.plugins),t=[];for(let o of e){let{commands:a}=o[1];if(a){let c=Gn.from(a).definitions();t.push([o[0],c])}}let i=this.cli.definitions(),n=(o,a)=>o.split(\" \").slice(1).join()===a.split(\" \").slice(1).join(),s=cae()[\"@yarnpkg/builder\"].bundles.standard;for(let o of t){let a=o[1];for(let l of a)i.find(c=>n(c.path,l.path)).plugin={name:o[0],isDefault:s.includes(o[0])}}this.context.stdout.write(`${JSON.stringify(i,null,2)}\n`)}};Vh.paths=[[\"--clipanion=definitions\"]];var Xh=class extends De{async execute(){this.context.stdout.write(this.cli.usage(null))}};Xh.paths=[[\"help\"],[\"--help\"],[\"-h\"]];var qm=class extends De{constructor(){super(...arguments);this.leadingArgument=z.String();this.args=z.Proxy()}async execute(){if(this.leadingArgument.match(/[\\\\/]/)&&!P.tryParseIdent(this.leadingArgument)){let t=x.resolve(this.context.cwd,K.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:t})}else return await this.cli.run([\"run\",this.leadingArgument,...this.args])}};var Zh=class extends De{async execute(){this.context.stdout.write(`${Tr||\"<unknown>\"}\n`)}};Zh.paths=[[\"-v\"],[\"--version\"]];var du=class extends De{constructor(){super(...arguments);this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,locator:n}=await je.find(t,this.context.cwd);return await i.restoreInstallState(),await Wt.executePackageShellcode(n,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:i})}};du.paths=[[\"exec\"]],du.usage=ve.Usage({description:\"execute a shell script\",details:`\n      This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell.\n\n      It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n    `,examples:[[\"Execute a single shell command\",\"$0 exec echo Hello World\"],[\"Execute a shell script\",'$0 exec \"tsc & babel src --out-dir lib\"']]});ls();var Cu=class extends De{constructor(){super(...arguments);this.hash=z.String({required:!1,validator:od(sd(),[ad(/^p[0-9a-f]{5}$/)])})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return await i.restoreInstallState({restoreResolutions:!1}),await i.applyLightResolution(),typeof this.hash<\"u\"?await v3e(this.hash,i,{stdout:this.context.stdout}):(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{var a;let o=[([,l])=>P.stringifyLocator(i.storedPackages.get(l.subject)),([,l])=>P.stringifyIdent(l.requested)];for(let[l,c]of Ie.sortMap(i.peerRequirements,o)){let u=i.storedPackages.get(c.subject);if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let g=i.storedPackages.get(c.rootRequester);if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let f=(a=u.dependencies.get(c.requested.identHash))!=null?a:null,h=ee.pretty(t,l,ee.Type.CODE),p=P.prettyLocator(t,u),C=P.prettyIdent(t,c.requested),y=P.prettyIdent(t,g),B=c.allRequesters.length-1,v=`descendant${B===1?\"\":\"s\"}`,D=B>0?` and ${B} ${v}`:\"\",T=f!==null?\"provides\":\"doesn't provide\";s.reportInfo(null,`${h} \\u2192 ${p} ${T} ${C} to ${y}${D}`)}})).exitCode()}};Cu.paths=[[\"explain\",\"peer-requirements\"]],Cu.usage=ve.Usage({description:\"explain a set of peer requirements\",details:`\n      A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n      When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n      When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n      **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\\`yarn explain peer-requirements\\`).\n    `,examples:[[\"Explain the corresponding set of peer requirements for a hash\",\"$0 explain peer-requirements p1a4ed\"],[\"List all sets of peer requirements\",\"$0 explain peer-requirements\"]]});async function v3e(r,e,t){let{configuration:i}=e,n=e.peerRequirements.get(r);if(typeof n>\"u\")throw new Error(`No peerDependency requirements found for hash: \"${r}\"`);return(await Ge.start({configuration:i,stdout:t.stdout,includeFooter:!1},async o=>{var B,v;let a=e.storedPackages.get(n.subject);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the subject package to have been registered\");let l=e.storedPackages.get(n.rootRequester);if(typeof l>\"u\")throw new Error(\"Assertion failed: Expected the root package to have been registered\");let c=(B=a.dependencies.get(n.requested.identHash))!=null?B:null,u=c!==null?e.storedResolutions.get(c.descriptorHash):null;if(typeof u>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let g=u!==null?e.storedPackages.get(u):null;if(typeof g>\"u\")throw new Error(\"Assertion failed: Expected the provided package to have been registered\");let f=[...n.allRequesters.values()].map(D=>{let T=e.storedPackages.get(D);if(typeof T>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let H=P.devirtualizeLocator(T),j=e.storedPackages.get(H.locatorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let $=j.peerDependencies.get(n.requested.identHash);if(typeof $>\"u\")throw new Error(\"Assertion failed: Expected the peer dependency to be registered\");return{pkg:T,peerDependency:$}});if(g!==null){let D=f.every(({peerDependency:T})=>vt.satisfiesWithPrereleases(g.version,T.range));o.reportInfo(0,`${P.prettyLocator(i,a)} provides ${P.prettyLocator(i,g)} with version ${P.prettyReference(i,(v=g.version)!=null?v:\"<missing>\")}, which ${D?\"satisfies\":\"doesn't satisfy\"} the following requirements:`)}else o.reportInfo(0,`${P.prettyLocator(i,a)} doesn't provide ${P.prettyIdent(i,n.requested)}, breaking the following requirements:`);o.reportSeparator();let h=ee.mark(i),p=[];for(let{pkg:D,peerDependency:T}of Ie.sortMap(f,H=>P.stringifyLocator(H.pkg))){let j=(g!==null?vt.satisfiesWithPrereleases(g.version,T.range):!1)?h.Check:h.Cross;p.push({stringifiedLocator:P.stringifyLocator(D),prettyLocator:P.prettyLocator(i,D),prettyRange:P.prettyRange(i,T.range),mark:j})}let C=Math.max(...p.map(({stringifiedLocator:D})=>D.length)),y=Math.max(...p.map(({prettyRange:D})=>D.length));for(let{stringifiedLocator:D,prettyLocator:T,prettyRange:H,mark:j}of Ie.sortMap(p,({stringifiedLocator:$})=>$))o.reportInfo(null,`${T.padEnd(C+(T.length-D.length),\" \")} \\u2192 ${H.padEnd(y,\" \")} ${j}`);p.length>1&&(o.reportSeparator(),o.reportInfo(0,`Note: these requirements start with ${P.prettyLocator(e.configuration,l)}`))})).exitCode()}ls();var uae=Pe(Xr()),mu=class extends De{constructor(){super(...arguments);this.onlyIfNeeded=z.Boolean(\"--only-if-needed\",!1,{description:\"Only lock the Yarn version if it isn't already locked\"});this.version=z.String()}async execute(){var o;let t=await ye.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&t.get(\"yarnPath\")){let a=t.sources.get(\"yarnPath\");if(!a)throw new Error(\"Assertion failed: Expected 'yarnPath' to have a source\");let l=(o=t.projectCwd)!=null?o:t.startingCwd;if(x.contains(l,a))return 0}let i=()=>{if(typeof Tr>\"u\")throw new Qe(\"The --install flag can only be used without explicit version specifier from the Yarn CLI\");return`file://${process.argv[1]}`},n;if(this.version===\"self\")n=i();else if(this.version===\"latest\"||this.version===\"berry\"||this.version===\"stable\")n=`https://repo.yarnpkg.com/${await Jm(t,\"stable\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"canary\")n=`https://repo.yarnpkg.com/${await Jm(t,\"canary\")}/packages/yarnpkg-cli/bin/yarn.js`;else if(this.version===\"classic\")n=\"https://classic.yarnpkg.com/latest.js\";else if(this.version.match(/^https?:/))n=this.version;else if(this.version.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.version))n=`file://${K.resolve(this.version)}`;else if(vt.satisfiesWithPrereleases(this.version,\">=2.0.0\"))n=`https://repo.yarnpkg.com/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else if(vt.satisfiesWithPrereleases(this.version,\"^0.x || ^1.x\"))n=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`;else if(vt.validRange(this.version))n=`https://repo.yarnpkg.com/${await x3e(t,this.version)}/packages/yarnpkg-cli/bin/yarn.js`;else throw new Qe(`Invalid version descriptor \"${this.version}\"`);return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{let l=\"file://\",c;n.startsWith(l)?(a.reportInfo(0,`Downloading ${ee.pretty(t,n,xi.URL)}`),c=await O.readFilePromise(K.toPortablePath(n.slice(l.length)))):(a.reportInfo(0,`Retrieving ${ee.pretty(t,n,xi.PATH)}`),c=await Xt.get(n,{configuration:t})),await eM(t,null,c,{report:a})})).exitCode()}};mu.paths=[[\"set\",\"version\"]],mu.usage=ve.Usage({description:\"lock the Yarn version used by the project\",details:\"\\n      This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\\n\\n      A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\\n\\n      The version specifier can be:\\n\\n      - a tag:\\n        - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\\n        - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\\n        - `classic` -> the most recent classic (`^0.x || ^1.x`) release\\n\\n      - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\\n\\n      - a semver version (e.g. `2.4.1`, `1.22.1`)\\n\\n      - a local file referenced through either a relative or absolute path\\n\\n      - `self` -> the version used to invoke the command\\n    \",examples:[[\"Download the latest release from the Yarn repository\",\"$0 set version latest\"],[\"Download the latest canary release from the Yarn repository\",\"$0 set version canary\"],[\"Download the latest classic release from the Yarn repository\",\"$0 set version classic\"],[\"Download the most recent Yarn 3 build\",\"$0 set version 3.x\"],[\"Download a specific Yarn 2 build\",\"$0 set version 2.0.0-rc.30\"],[\"Switch back to a specific Yarn 1 release\",\"$0 set version 1.22.1\"],[\"Use a release from the local filesystem\",\"$0 set version ./yarn.cjs\"],[\"Use a release from a URL\",\"$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js\"],[\"Download the version used to invoke the command\",\"$0 set version self\"]]});async function x3e(r,e){let i=(await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0})).tags.filter(n=>vt.satisfiesWithPrereleases(n,e));if(i.length===0)throw new Qe(`No matching release found for range ${ee.pretty(r,e,ee.Type.RANGE)}.`);return i[0]}async function Jm(r,e){let t=await Xt.get(\"https://repo.yarnpkg.com/tags\",{configuration:r,jsonResponse:!0});if(!t.latest[e])throw new Qe(`Tag ${ee.pretty(r,e,ee.Type.RANGE)} not found`);return t.latest[e]}async function eM(r,e,t,{report:i}){var h;e===null&&await O.mktempPromise(async p=>{let C=x.join(p,\"yarn.cjs\");await O.writeFilePromise(C,t);let{stdout:y}=await Cr.execvp(process.execPath,[K.fromPortablePath(C),\"--version\"],{cwd:p,env:{...process.env,YARN_IGNORE_PATH:\"1\"}});if(e=y.trim(),!uae.default.valid(e))throw new Error(`Invalid semver version. ${ee.pretty(r,\"yarn --version\",ee.Type.CODE)} returned:\n${e}`)});let n=(h=r.projectCwd)!=null?h:r.startingCwd,s=x.resolve(n,\".yarn/releases\"),o=x.resolve(s,`yarn-${e}.cjs`),a=x.relative(r.startingCwd,o),l=x.relative(n,o);i.reportInfo(0,`Saving the new release in ${ee.pretty(r,a,\"magenta\")}`),await O.removePromise(x.dirname(o)),await O.mkdirPromise(x.dirname(o),{recursive:!0}),await O.writeFilePromise(o,t,{mode:493}),await ye.updateConfiguration(n,{yarnPath:l});let c=await ot.tryFind(n)||new ot;c.packageManager=`yarn@${e&&Ie.isTaggedYarnVersion(e)?e:await Jm(r,\"stable\")}`;let u={};c.exportTo(u);let g=x.join(n,ot.fileName),f=`${JSON.stringify(u,null,c.indent)}\n`;await O.changeFilePromise(g,f,{automaticNewlines:!0})}function gae(r){return Ct[LI(r)]}var P3e=/## (?<code>YN[0-9]{4}) - `(?<name>[A-Z_]+)`\\n\\n(?<details>(?:.(?!##))+)/gs;async function D3e(r){let t=`https://repo.yarnpkg.com/${Ie.isTaggedYarnVersion(Tr)?Tr:await Jm(r,\"canary\")}/packages/gatsby/content/advanced/error-codes.md`,i=await Xt.get(t,{configuration:r});return new Map(Array.from(i.toString().matchAll(P3e),({groups:n})=>{if(!n)throw new Error(\"Assertion failed: Expected the match to have been successful\");let s=gae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected \"${n.name}\" to be named \"${s}\"`);return[n.code,n.details]}))}var Eu=class extends De{constructor(){super(...arguments);this.code=z.String({required:!1,validator:od(sd(),[ad(/^YN[0-9]{4}$/)])});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);if(typeof this.code<\"u\"){let i=gae(this.code),n=ee.pretty(t,i,ee.Type.CODE),s=this.cli.format().header(`${this.code} - ${n}`),a=(await D3e(t)).get(this.code),l=typeof a<\"u\"?ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.MARKDOWN,{text:a,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.\n\nYou can help us by editing this page on GitHub \\u{1F642}:\n${ee.jsonOrPretty(this.json,t,ee.tuple(ee.Type.URL,\"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md\"))}\n`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:i,details:l})}\n`):this.context.stdout.write(`${s}\n\n${l}\n`)}else{let i={children:Ie.mapAndFilter(Object.entries(Ct),([n,s])=>Number.isNaN(Number(n))?Ie.mapAndFilter.skip:{label:FA(Number(n)),value:ee.tuple(ee.Type.CODE,s)})};es.emitTree(i,{configuration:t,stdout:this.context.stdout,json:this.json})}}};Eu.paths=[[\"explain\"]],Eu.usage=ve.Usage({description:\"explain an error code\",details:`\n      When the code argument is specified, this command prints its name and its details.\n\n      When used without arguments, this command lists all error codes and their names.\n    `,examples:[[\"Explain an error code\",\"$0 explain YN0006\"],[\"List all error codes\",\"$0 explain\"]]});var fae=Pe(Bn()),Iu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Print versions of a package from the whole project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Print information for all packages, including transitive dependencies\"});this.extra=z.Array(\"-X,--extra\",[],{description:\"An array of requests of extra data provided by plugins\"});this.cache=z.Boolean(\"--cache\",!1,{description:\"Print information about the cache entry of a package (path, size, checksum)\"});this.dependents=z.Boolean(\"--dependents\",!1,{description:\"Print all dependents for each matching package\"});this.manifest=z.Boolean(\"--manifest\",!1,{description:\"Print data obtained by looking at the package archive (license, homepage, ...)\"});this.nameOnly=z.Boolean(\"--name-only\",!1,{description:\"Only print the name for the matching packages\"});this.virtuals=z.Boolean(\"--virtuals\",!1,{description:\"Print each instance of the virtual packages\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n&&!this.all)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=new Set(this.extra);this.cache&&o.add(\"cache\"),this.dependents&&o.add(\"dependents\"),this.manifest&&o.add(\"manifest\");let a=(T,{recursive:H})=>{let j=T.anchoredLocator.locatorHash,$=new Map,V=[j];for(;V.length>0;){let W=V.shift();if($.has(W))continue;let _=i.storedPackages.get(W);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");if($.set(W,_),P.isVirtualLocator(_)&&V.push(P.devirtualizeLocator(_).locatorHash),!(!H&&W!==j))for(let A of _.dependencies.values()){let Ae=i.storedResolutions.get(A.descriptorHash);if(typeof Ae>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");V.push(Ae)}}return $.values()},l=({recursive:T})=>{let H=new Map;for(let j of i.workspaces)for(let $ of a(j,{recursive:T}))H.set($.locatorHash,$);return H.values()},c=({all:T,recursive:H})=>T&&H?i.storedPackages.values():T?l({recursive:H}):a(n,{recursive:H}),u=({all:T,recursive:H})=>{let j=c({all:T,recursive:H}),$=this.patterns.map(_=>{let A=P.parseLocator(_),Ae=fae.default.makeRe(P.stringifyIdent(A)),ge=P.isVirtualLocator(A),re=ge?P.devirtualizeLocator(A):A;return M=>{let F=P.stringifyIdent(M);if(!Ae.test(F))return!1;if(A.reference===\"unknown\")return!0;let ue=P.isVirtualLocator(M),pe=ue?P.devirtualizeLocator(M):M;return!(ge&&ue&&A.reference!==M.reference||re.reference!==pe.reference)}}),V=Ie.sortMap([...j],_=>P.stringifyLocator(_));return{selection:V.filter(_=>$.length===0||$.some(A=>A(_))),sortedLookup:V}},{selection:g,sortedLookup:f}=u({all:this.all,recursive:this.recursive});if(g.length===0)throw new Qe(\"No package matched your request\");let h=new Map;if(this.dependents)for(let T of f)for(let H of T.dependencies.values()){let j=i.storedResolutions.get(H.descriptorHash);if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected the resolution to be registered\");Ie.getArrayWithDefault(h,j).push(T)}let p=new Map;for(let T of f){if(!P.isVirtualLocator(T))continue;let H=P.devirtualizeLocator(T);Ie.getArrayWithDefault(p,H.locatorHash).push(T)}let C={},y={children:C},B=t.makeFetcher(),v={project:i,fetcher:B,cache:s,checksums:i.storedChecksums,report:new ti,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},D=[async(T,H,j)=>{var W,_;if(!H.has(\"manifest\"))return;let $=await B.fetch(T,v),V;try{V=await ot.find($.prefixPath,{baseFs:$.packageFs})}finally{(W=$.releaseFs)==null||W.call($)}j(\"Manifest\",{License:ee.tuple(ee.Type.NO_HINT,V.license),Homepage:ee.tuple(ee.Type.URL,(_=V.raw.homepage)!=null?_:null)})},async(T,H,j)=>{var Ae;if(!H.has(\"cache\"))return;let $={mockedPackages:i.disabledLocators,unstablePackages:i.conditionalLocators},V=(Ae=i.storedChecksums.get(T.locatorHash))!=null?Ae:null,W=s.getLocatorPath(T,V,$),_;if(W!==null)try{_=O.statSync(W)}catch{}let A=typeof _<\"u\"?[_.size,ee.Type.SIZE]:void 0;j(\"Cache\",{Checksum:ee.tuple(ee.Type.NO_HINT,V),Path:ee.tuple(ee.Type.PATH,W),Size:A})}];for(let T of g){let H=P.isVirtualLocator(T);if(!this.virtuals&&H)continue;let j={},$={value:[T,ee.Type.LOCATOR],children:j};if(C[P.stringifyLocator(T)]=$,this.nameOnly){delete $.children;continue}let V=p.get(T.locatorHash);typeof V<\"u\"&&(j.Instances={label:\"Instances\",value:ee.tuple(ee.Type.NUMBER,V.length)}),j.Version={label:\"Version\",value:ee.tuple(ee.Type.NO_HINT,T.version)};let W=(A,Ae)=>{let ge={};if(j[A]=ge,Array.isArray(Ae))ge.children=Ae.map(re=>({value:re}));else{let re={};ge.children=re;for(let[M,F]of Object.entries(Ae))typeof F>\"u\"||(re[M]={label:M,value:F})}};if(!H){for(let A of D)await A(T,o,W);await t.triggerHook(A=>A.fetchPackageInfo,T,o,W)}T.bin.size>0&&!H&&W(\"Exported Binaries\",[...T.bin.keys()].map(A=>ee.tuple(ee.Type.PATH,A)));let _=h.get(T.locatorHash);typeof _<\"u\"&&_.length>0&&W(\"Dependents\",_.map(A=>ee.tuple(ee.Type.LOCATOR,A))),T.dependencies.size>0&&!H&&W(\"Dependencies\",[...T.dependencies.values()].map(A=>{var re;let Ae=i.storedResolutions.get(A.descriptorHash),ge=typeof Ae<\"u\"&&(re=i.storedPackages.get(Ae))!=null?re:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:ge})})),T.peerDependencies.size>0&&H&&W(\"Peer dependencies\",[...T.peerDependencies.values()].map(A=>{var M,F;let Ae=T.dependencies.get(A.identHash),ge=typeof Ae<\"u\"&&(M=i.storedResolutions.get(Ae.descriptorHash))!=null?M:null,re=ge!==null&&(F=i.storedPackages.get(ge))!=null?F:null;return ee.tuple(ee.Type.RESOLUTION,{descriptor:A,locator:re})}))}es.emitTree(y,{configuration:t,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Iu.paths=[[\"info\"]],Iu.usage=ve.Usage({description:\"see information related to packages\",details:\"\\n      This command prints various information related to the specified packages, accepting glob patterns.\\n\\n      By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\\n\\n      Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\\n\\n      Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\\n    \",examples:[[\"Show information about Lodash\",\"$0 info lodash\"]]});var Tb=Pe(Ac());ls();var yu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.immutable=z.Boolean(\"--immutable\",{description:\"Abort with an error exit code if the lockfile was to be modified\"});this.immutableCache=z.Boolean(\"--immutable-cache\",{description:\"Abort with an error exit code if the cache folder was to be modified\"});this.checkCache=z.Boolean(\"--check-cache\",!1,{description:\"Always refetch the packages and ensure that their checksums are consistent\"});this.inlineBuilds=z.Boolean(\"--inline-builds\",{description:\"Verbosely print the output of the build steps of dependencies\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.cacheFolder=z.String(\"--cache-folder\",{hidden:!0});this.frozenLockfile=z.Boolean(\"--frozen-lockfile\",{hidden:!0});this.ignoreEngines=z.Boolean(\"--ignore-engines\",{hidden:!0});this.nonInteractive=z.Boolean(\"--non-interactive\",{hidden:!0});this.preferOffline=z.Boolean(\"--prefer-offline\",{hidden:!0});this.production=z.Boolean(\"--production\",{hidden:!0});this.registry=z.String(\"--registry\",{hidden:!0});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.networkTimeout=z.String(\"--network-timeout\",{hidden:!0})}async execute(){var f;let t=await ye.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<\"u\"&&t.useWithSource(\"<cli>\",{enableInlineBuilds:this.inlineBuilds},t.startingCwd,{overwrite:!0});let i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,n=async(h,{error:p})=>{let C=await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async y=>{p?y.reportError(50,h):y.reportWarning(50,h)});return C.hasErrors()?C.exitCode():null};if(typeof this.ignoreEngines<\"u\"){let h=await n(\"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.registry<\"u\"){let h=await n(\"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file\",{error:!1});if(h!==null)return h}if(typeof this.preferOffline<\"u\"){let h=await n(\"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead\",{error:!Tb.default.VERCEL});if(h!==null)return h}if(typeof this.production<\"u\"){let h=await n(\"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead\",{error:!0});if(h!==null)return h}if(typeof this.nonInteractive<\"u\"){let h=await n(\"The --non-interactive option is deprecated\",{error:!i});if(h!==null)return h}if(typeof this.frozenLockfile<\"u\"&&(await n(\"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead\",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder<\"u\"){let h=await n(\"The cache-folder option has been deprecated; use rc settings instead\",{error:!Tb.default.NETLIFY});if(h!==null)return h}let s=this.mode===\"update-lockfile\";if(s&&(this.immutable||this.immutableCache))throw new Qe(`${ee.pretty(t,\"--immutable\",ee.Type.CODE)} and ${ee.pretty(t,\"--immutable-cache\",ee.Type.CODE)} cannot be used with ${ee.pretty(t,\"--mode=update-lockfile\",ee.Type.CODE)}`);let o=((f=this.immutable)!=null?f:t.get(\"enableImmutableInstalls\"))&&!s,a=this.immutableCache&&!s;if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{await N3e(t,o)&&(p.reportInfo(48,\"Automatically fixed merge conflicts \\u{1F44D}\"),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}if(t.projectCwd!==null&&typeof t.sources.get(\"nodeLinker\")>\"u\"){let h=t.projectCwd,p;try{p=await O.readFilePromise(x.join(h,xt.lockfile),\"utf8\")}catch{}if(p!=null&&p.includes(\"yarn lockfile v1\")){let C=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async y=>{y.reportInfo(70,\"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \\u{1F44D}\"),y.reportSeparator(),t.use(\"<compat>\",{nodeLinker:\"node-modules\"},h,{overwrite:!0}),await ye.updateConfiguration(h,{nodeLinker:\"node-modules\"})});if(C.hasErrors())return C.exitCode()}}if(t.projectCwd!==null){let h=await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeFooter:!1},async p=>{var C;(C=ye.telemetry)!=null&&C.isNew&&(p.reportInfo(65,\"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry\"),p.reportInfo(65,`Run ${ee.pretty(t,\"yarn config set --home enableTelemetry 0\",ee.Type.CODE)} to disable`),p.reportSeparator())});if(h.hasErrors())return h.exitCode()}let{project:l,workspace:c}=await je.find(t,this.context.cwd),u=await Rt.find(t,{immutable:a,check:this.checkCache});if(!c)throw new ct(l.cwd,this.context.cwd);return await l.restoreInstallState({restoreResolutions:!1}),(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async h=>{await l.install({cache:u,report:h,immutable:o,mode:this.mode})})).exitCode()}};yu.paths=[[\"install\"],ve.Default],yu.usage=ve.Usage({description:\"install the project dependencies\",details:`\n      This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n      - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n      - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \\`cacheFolder\\` in \\`yarn config\\` to see where the cache files are stored).\n\n      - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n      - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n      Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n      If the \\`--immutable\\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \\`immutablePatterns\\` configuration setting). For backward compatibility we offer an alias under the name of \\`--frozen-lockfile\\`, but it will be removed in a later release.\n\n      If the \\`--immutable-cache\\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n      If the \\`--check-cache\\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n      If the \\`--inline-builds\\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n    `,examples:[[\"Install the project\",\"$0 install\"],[\"Validate a project when using Zero-Installs\",\"$0 install --immutable --immutable-cache\"],[\"Validate a project when using Zero-Installs (slightly safer if you accept external PRs)\",\"$0 install --immutable --immutable-cache --check-cache\"]]});var k3e=\"|||||||\",R3e=\">>>>>>>\",F3e=\"=======\",hae=\"<<<<<<<\";async function N3e(r,e){if(!r.projectCwd)return!1;let t=x.join(r.projectCwd,r.get(\"lockfileFilename\"));if(!await O.existsPromise(t))return!1;let i=await O.readFilePromise(t,\"utf8\");if(!i.includes(hae))return!1;if(e)throw new at(47,\"Cannot autofix a lockfile when running an immutable install\");let[n,s]=T3e(i),o,a;try{o=yi(n),a=yi(s)}catch{throw new at(46,\"The individual variants of the lockfile failed to parse\")}let l={...o,...a};for(let[c,u]of Object.entries(l))typeof u==\"string\"&&delete l[c];return await O.changeFilePromise(t,ba(l),{automaticNewlines:!0}),!0}function T3e(r){let e=[[],[]],t=r.split(/\\r?\\n/g),i=!1;for(;t.length>0;){let n=t.shift();if(typeof n>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(n.startsWith(hae)){for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s===F3e){i=!1;break}else if(i||s.startsWith(k3e)){i=!0;continue}else e[0].push(s)}for(;t.length>0;){let s=t.shift();if(typeof s>\"u\")throw new Error(\"Assertion failed: Some lines should remain\");if(s.startsWith(R3e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`\n`),e[1].join(`\n`)]}var wu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Link all workspaces belonging to the target project to the current one\"});this.private=z.Boolean(\"-p,--private\",!1,{description:\"Also link private workspaces belonging to the target project to the current one\"});this.relative=z.Boolean(\"-r,--relative\",!1,{description:\"Link workspaces using relative paths instead of absolute paths\"});this.destination=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=x.resolve(this.context.cwd,K.toPortablePath(this.destination)),a=await ye.find(o,this.context.plugins,{useRc:!1,strict:!1}),{project:l,workspace:c}=await je.find(a,o);if(i.cwd===l.cwd)throw new Qe(\"Invalid destination; Can't link the project to itself\");if(!c)throw new ct(l.cwd,o);let u=i.topLevelWorkspace,g=[];if(this.all){for(let h of l.workspaces)h.manifest.name&&(!h.manifest.private||this.private)&&g.push(h);if(g.length===0)throw new Qe(\"No workspace found to be linked in the target project\")}else{if(!c.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be linked\");if(c.manifest.private&&!this.private)throw new Qe(\"The target workspace is marked private - use the --private flag to link it anyway\");g.push(c)}for(let h of g){let p=P.stringifyIdent(h.locator),C=this.relative?x.relative(i.cwd,h.cwd):h.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:p}},reference:`portal:${C}`})}return(await Ge.start({configuration:t,stdout:this.context.stdout},async h=>{await i.install({cache:s,report:h})})).exitCode()}};wu.paths=[[\"link\"]],wu.usage=ve.Usage({description:\"connect the local project to another one\",details:\"\\n      This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\\n    \",examples:[[\"Register a remote workspace for use in the current project\",\"$0 link ~/ts-loader\"],[\"Register all workspaces from a remote project for use in the current project\",\"$0 link ~/jest --all\"]]});var Bu=class extends De{constructor(){super(...arguments);this.args=z.Proxy()}async execute(){return this.cli.run([\"exec\",\"node\",...this.args])}};Bu.paths=[[\"node\"]],Bu.usage=ve.Usage({description:\"run node with the hook already setup\",details:`\n      This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n      The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n    `,examples:[[\"Run a Node script\",\"$0 node ./my-script.js\"]]});var Iae=J(\"os\");var pae=J(\"os\");var L3e=\"https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml\";async function Qu(r){let e=await Xt.get(L3e,{configuration:r});return yi(e.toString())}var bu=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{let s=await Qu(t);for(let[o,{experimental:a,...l}]of Object.entries(s)){let c=o;a&&(c+=\" [experimental]\"),n.reportJson({name:o,experimental:a,...l}),n.reportInfo(null,c)}})).exitCode()}};bu.paths=[[\"plugin\",\"list\"]],bu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the available official plugins\",details:\"\\n      This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\\n    \",examples:[[\"List the official plugins\",\"$0 plugin list\"]]});var M3e=/^[0-9]+$/;function dae(r){return M3e.test(r)?`pull/${r}/head`:r}var O3e=({repository:r,branch:e},t)=>[[\"git\",\"init\",K.fromPortablePath(t)],[\"git\",\"remote\",\"add\",\"origin\",r],[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(e)],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"]],K3e=({branch:r})=>[[\"git\",\"fetch\",\"origin\",\"--depth=1\",dae(r),\"--force\"],[\"git\",\"reset\",\"--hard\",\"FETCH_HEAD\"],[\"git\",\"clean\",\"-dfx\"]],U3e=({plugins:r,noMinify:e},t)=>[[\"yarn\",\"build:cli\",...new Array().concat(...r.map(i=>[\"--plugin\",x.resolve(t,i)])),...e?[\"--no-minify\"]:[],\"|\"]],Su=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.plugins=z.Array(\"--plugin\",[],{description:\"An array of additional plugins that should be included in the bundle\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a bundle for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.skipPlugins=z.Boolean(\"--skip-plugins\",!1,{description:\"Skip updating the contrib plugins\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,pae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async o=>{await tM(this,{configuration:t,report:o,target:n}),o.reportSeparator(),o.reportInfo(0,\"Building a fresh bundle\"),o.reportSeparator(),await Wm(U3e(this,n),{configuration:t,context:this.context,target:n}),o.reportSeparator();let a=x.resolve(n,\"packages/yarnpkg-cli/bundles/yarn.js\"),l=await O.readFilePromise(a);await eM(t,\"sources\",l,{report:o}),this.skipPlugins||await H3e(this,{project:i,report:o,target:n})})).exitCode()}};Su.paths=[[\"set\",\"version\",\"from\",\"sources\"]],Su.usage=ve.Usage({description:\"build Yarn from master\",details:`\n      This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n\n      By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \\`--skip-plugins\\` flag.\n    `,examples:[[\"Build Yarn from master\",\"$0 set version from sources\"]]});async function Wm(r,{configuration:e,context:t,target:i}){for(let[n,...s]of r){let o=s[s.length-1]===\"|\";if(o&&s.pop(),o)await Cr.pipevp(n,s,{cwd:i,stdin:t.stdin,stdout:t.stdout,stderr:t.stderr,strict:!0});else{t.stdout.write(`${ee.pretty(e,`  $ ${[n,...s].join(\" \")}`,\"grey\")}\n`);try{await Cr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw t.stdout.write(a.stdout||a.stack),a}}}}async function tM(r,{configuration:e,report:t,target:i}){let n=!1;if(!r.force&&O.existsSync(x.join(i,\".git\"))){t.reportInfo(0,\"Fetching the latest commits\"),t.reportSeparator();try{await Wm(K3e(r),{configuration:e,context:r.context,target:i}),n=!0}catch{t.reportSeparator(),t.reportWarning(0,\"Repository update failed; we'll try to regenerate it\")}}n||(t.reportInfo(0,\"Cloning the remote repository\"),t.reportSeparator(),await O.removePromise(i),await O.mkdirPromise(i,{recursive:!0}),await Wm(O3e(r,i),{configuration:e,context:r.context,target:i}))}async function H3e(r,{project:e,report:t,target:i}){let n=await Qu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await rM(o,r,{project:e,report:t,target:i})}var Cae=Pe(Xr()),mae=J(\"url\"),Eae=J(\"vm\");var vu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,stdout:this.context.stdout},async n=>{let{project:s}=await je.find(t,this.context.cwd),o,a;if(this.name.match(/^\\.{0,2}[\\\\/]/)||K.isAbsolute(this.name)){let l=x.resolve(this.context.cwd,K.toPortablePath(this.name));n.reportInfo(0,`Reading ${ee.pretty(t,l,ee.Type.PATH)}`),o=x.relative(s.cwd,l),a=await O.readFilePromise(l)}else{let l;if(this.name.match(/^https?:/)){try{new mae.URL(this.name)}catch{throw new at(52,`Plugin specifier \"${this.name}\" is neither a plugin name nor a valid url`)}o=this.name,l=this.name}else{let c=P.parseLocator(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\"));if(c.reference!==\"unknown\"&&!Cae.default.valid(c.reference))throw new at(0,\"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.\");let u=P.stringifyIdent(c),g=await Qu(t);if(!Object.prototype.hasOwnProperty.call(g,u))throw new at(51,`Couldn't find a plugin named \"${u}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);o=u,l=g[u].url,c.reference!==\"unknown\"?l=l.replace(/\\/master\\//,`/${u}/${c.reference}/`):Tr!==null&&(l=l.replace(/\\/master\\//,`/@yarnpkg/cli/${Tr}/`))}n.reportInfo(0,`Downloading ${ee.pretty(t,l,\"green\")}`),a=await Xt.get(l,{configuration:t})}await iM(o,a,{project:s,report:n})})).exitCode()}};vu.paths=[[\"plugin\",\"import\"]],vu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"download a plugin\",details:`\n      This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n      Three types of plugin references are accepted:\n\n      - If the plugin is stored within the Yarn repository, it can be referenced by name.\n      - Third-party plugins can be referenced directly through their public urls.\n      - Local plugins can be referenced by their path on the disk.\n\n      Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \\`@yarnpkg/builder\\` package).\n    `,examples:[['Download and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import @yarnpkg/plugin-exec\"],['Download and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import exec\"],[\"Download and activate a community plugin\",\"$0 plugin import https://example.org/path/to/plugin.js\"],[\"Activate a local plugin\",\"$0 plugin import ./path/to/plugin.js\"]]});async function iM(r,e,{project:t,report:i}){let{configuration:n}=t,s={},o={exports:s};(0,Eae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(t.cwd,l);i.reportInfo(0,`Saving the new plugin in ${ee.pretty(n,l,\"magenta\")}`),await O.mkdirPromise(x.dirname(c),{recursive:!0}),await O.writeFilePromise(c,e);let u={path:l,spec:r};await ye.updateConfiguration(t.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let C=typeof p!=\"string\"?p.path:p,y=x.resolve(t.cwd,K.toPortablePath(C)),{name:B}=Ie.dynamicRequire(y);B!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),{...g,plugins:f}})}var G3e=({pluginName:r,noMinify:e},t)=>[[\"yarn\",`build:${r}`,...e?[\"--no-minify\"]:[],\"|\"]],xu=class extends De{constructor(){super(...arguments);this.installPath=z.String(\"--path\",{description:\"The path where the repository should be cloned to\"});this.repository=z.String(\"--repository\",\"https://github.com/yarnpkg/berry.git\",{description:\"The repository that should be cloned\"});this.branch=z.String(\"--branch\",\"master\",{description:\"The branch of the repository that should be cloned\"});this.noMinify=z.Boolean(\"--no-minify\",!1,{description:\"Build a plugin for development (debugging) - non-minified and non-mangled\"});this.force=z.Boolean(\"-f,--force\",!1,{description:\"Always clone the repository instead of trying to fetch the latest commits\"});this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.installPath<\"u\"?x.resolve(this.context.cwd,K.toPortablePath(this.installPath)):x.resolve(K.toPortablePath((0,Iae.tmpdir)()),\"yarnpkg-sources\",li.makeHash(this.repository).slice(0,6));return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let{project:o}=await je.find(t,this.context.cwd),a=P.parseIdent(this.name.replace(/^((@yarnpkg\\/)?plugin-)?/,\"@yarnpkg/plugin-\")),l=P.stringifyIdent(a),c=await Qu(t);if(!Object.prototype.hasOwnProperty.call(c,l))throw new at(51,`Couldn't find a plugin named \"${l}\" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let u=l;await tM(this,{configuration:t,report:s,target:i}),await rM(u,this,{project:o,report:s,target:i})})).exitCode()}};xu.paths=[[\"plugin\",\"import\",\"from\",\"sources\"]],xu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"build a plugin from sources\",details:`\n      This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n      The plugins can be referenced by their short name if sourced from the official Yarn repository.\n    `,examples:[['Build and activate the \"@yarnpkg/plugin-exec\" plugin',\"$0 plugin import from sources @yarnpkg/plugin-exec\"],['Build and activate the \"@yarnpkg/plugin-exec\" plugin (shorthand)',\"$0 plugin import from sources exec\"]]});async function rM(r,{context:e,noMinify:t},{project:i,report:n,target:s}){let o=r.replace(/@yarnpkg\\//,\"\"),{configuration:a}=i;n.reportSeparator(),n.reportInfo(0,`Building a fresh ${o}`),n.reportSeparator(),await Wm(G3e({pluginName:o,noMinify:t},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${r}.js`),c=await O.readFilePromise(l);await iM(r,c,{project:i,report:n})}var Pu=class extends De{constructor(){super(...arguments);this.name=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{let o=this.name,a=P.parseIdent(o);if(!t.plugins.has(o))throw new Qe(`${P.prettyIdent(t,a)} isn't referenced by the current configuration`);let l=`.yarn/plugins/${o}.cjs`,c=x.resolve(i.cwd,l);O.existsSync(c)&&(s.reportInfo(0,`Removing ${ee.pretty(t,l,ee.Type.PATH)}...`),await O.removePromise(c)),s.reportInfo(0,\"Updating the configuration...\"),await ye.updateConfiguration(i.cwd,u=>{if(!Array.isArray(u.plugins))return u;let g=u.plugins.filter(f=>f.path!==l);return u.plugins.length===g.length?u:{...u,plugins:g}})})).exitCode()}};Pu.paths=[[\"plugin\",\"remove\"]],Pu.usage=ve.Usage({category:\"Plugin-related commands\",description:\"remove a plugin\",details:`\n      This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n      **Note:** The plugins have to be referenced by their name property, which can be obtained using the \\`yarn plugin runtime\\` command. Shorthands are not allowed.\n   `,examples:[[\"Remove a plugin imported from the Yarn repository\",\"$0 plugin remove @yarnpkg/plugin-typescript\"],[\"Remove a plugin imported from a local file\",\"$0 plugin remove my-local-plugin\"]]});var Du=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async n=>{for(let s of t.plugins.keys()){let o=this.context.plugins.plugins.has(s),a=s;o&&(a+=\" [builtin]\"),n.reportJson({name:s,builtin:o}),n.reportInfo(null,`${a}`)}})).exitCode()}};Du.paths=[[\"plugin\",\"runtime\"]],Du.usage=ve.Usage({category:\"Plugin-related commands\",description:\"list the active plugins\",details:`\n      This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n    `,examples:[[\"List the currently active plugins\",\"$0 plugin runtime\"]]});var ku=class extends De{constructor(){super(...arguments);this.idents=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=new Set;for(let l of this.idents)o.add(P.parseIdent(l).identHash);if(await i.restoreInstallState({restoreResolutions:!1}),await i.resolveEverything({cache:s,report:new ti}),o.size>0)for(let l of i.storedPackages.values())o.has(l.identHash)&&i.storedBuildState.delete(l.locatorHash);else i.storedBuildState.clear();return(await Ge.start({configuration:t,stdout:this.context.stdout,includeLogs:!this.context.quiet},async l=>{await i.install({cache:s,report:l})})).exitCode()}};ku.paths=[[\"rebuild\"]],ku.usage=ve.Usage({description:\"rebuild the project's native packages\",details:`\n      This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n      Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n      By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n    `,examples:[[\"Rebuild all packages\",\"$0 rebuild\"],[\"Rebuild fsevents only\",\"$0 rebuild fsevents\"]]});var nM=Pe(Bn());ls();var Ru=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Apply the operation to all workspaces from the current project\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=this.all?i.workspaces:[n],a=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],l=[],c=!1,u=[];for(let p of this.patterns){let C=!1,y=P.parseIdent(p);for(let B of o){let v=[...B.manifest.peerDependenciesMeta.keys()];for(let D of(0,nM.default)(v,p))B.manifest.peerDependenciesMeta.delete(D),c=!0,C=!0;for(let D of a){let T=B.manifest.getForScope(D),H=[...T.values()].map(j=>P.stringifyIdent(j));for(let j of(0,nM.default)(H,P.stringifyIdent(y))){let{identHash:$}=P.parseIdent(j),V=T.get($);if(typeof V>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");B.manifest[D].delete($),u.push([B,D,V]),c=!0,C=!0}}}C||l.push(p)}let g=l.length>1?\"Patterns\":\"Pattern\",f=l.length>1?\"don't\":\"doesn't\",h=this.all?\"any\":\"this\";if(l.length>0)throw new Qe(`${g} ${ee.prettyList(t,l,xi.CODE)} ${f} match any packages referenced by ${h} workspace`);return c?(await t.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,u),(await Ge.start({configuration:t,stdout:this.context.stdout},async C=>{await i.install({cache:s,report:C,mode:this.mode})})).exitCode()):0}};Ru.paths=[[\"remove\"]],Ru.usage=ve.Usage({description:\"remove dependencies from the project\",details:`\n      This command will remove the packages matching the specified patterns from the current workspace.\n\n      If the \\`--mode=<mode>\\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n      - \\`skip-build\\` will not run the build scripts at all. Note that this is different from setting \\`enableScripts\\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n      - \\`update-lockfile\\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n      This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n    `,examples:[[\"Remove a dependency from the current project\",\"$0 remove lodash\"],[\"Remove a dependency from all workspaces at once\",\"$0 remove lodash --all\"],[\"Remove all dependencies starting with `eslint-`\",\"$0 remove 'eslint-*'\"],[\"Remove all dependencies with the `@babel` scope\",\"$0 remove '@babel/*'\"],[\"Remove all dependencies matching `react-dom` or `react-helmet`\",\"$0 remove 'react-{dom,helmet}'\"]]});var yae=J(\"util\"),_h=class extends De{async execute(){let e=await ye.find(this.context.cwd,this.context.plugins),{project:t,workspace:i}=await je.find(e,this.context.cwd);if(!i)throw new ct(t.cwd,this.context.cwd);return(await Ge.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=Ie.sortMap(o.keys(),u=>u),l={breakLength:1/0,colors:e.get(\"enableColors\"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c,\" \")}   ${(0,yae.inspect)(g,l)}`)})).exitCode()}};_h.paths=[[\"run\"]];var Fu=class extends De{constructor(){super(...arguments);this.inspect=z.String(\"--inspect\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.inspectBrk=z.String(\"--inspect-brk\",!1,{tolerateBoolean:!0,description:\"Forwarded to the underlying Node process when executing a binary\"});this.topLevel=z.Boolean(\"-T,--top-level\",!1,{description:\"Check the root workspace for scripts and/or binaries instead of the current one\"});this.binariesOnly=z.Boolean(\"-B,--binaries-only\",!1,{description:\"Ignore any user defined scripts and only check for binaries\"});this.silent=z.Boolean(\"--silent\",{hidden:!0});this.scriptName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n,locator:s}=await je.find(t,this.context.cwd);await i.restoreInstallState();let o=this.topLevel?i.topLevelWorkspace.anchoredLocator:s;if(!this.binariesOnly&&await Wt.hasPackageScript(o,this.scriptName,{project:i}))return await Wt.executePackageScript(o,this.scriptName,this.args,{project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let a=await Wt.getPackageAccessibleBinaries(o,{project:i});if(a.get(this.scriptName)){let c=[];return this.inspect&&(typeof this.inspect==\"string\"?c.push(`--inspect=${this.inspect}`):c.push(\"--inspect\")),this.inspectBrk&&(typeof this.inspectBrk==\"string\"?c.push(`--inspect-brk=${this.inspectBrk}`):c.push(\"--inspect-brk\")),await Wt.executePackageAccessibleBinary(o,this.scriptName,this.args,{cwd:this.context.cwd,project:i,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:c,packageAccessibleBinaries:a})}if(!this.topLevel&&!this.binariesOnly&&n&&this.scriptName.includes(\":\")){let u=(await Promise.all(i.workspaces.map(async g=>g.manifest.scripts.has(this.scriptName)?g:null))).filter(g=>g!==null);if(u.length===1)return await Wt.executeWorkspaceScript(u[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName===\"node-gyp\"?new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}). This typically happens because some package depends on \"node-gyp\" to build itself, but didn't list it in their dependencies. To fix that, please run \"yarn add node-gyp\" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Qe(`Couldn't find a script name \"${this.scriptName}\" in the top-level (used by ${P.prettyLocator(t,s)}).`);{if(this.scriptName===\"global\")throw new Qe(\"The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead\");let c=[this.scriptName].concat(this.args);for(let[u,g]of vh)for(let f of g)if(c.length>=f.length&&JSON.stringify(c.slice(0,f.length))===JSON.stringify(f))throw new Qe(`Couldn't find a script named \"${this.scriptName}\", but a matching command can be found in the ${u} plugin. You can install it with \"yarn plugin import ${u}\".`);throw new Qe(`Couldn't find a script named \"${this.scriptName}\".`)}}};Fu.paths=[[\"run\"]],Fu.usage=ve.Usage({description:\"run a script defined in the package.json\",details:`\n      This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n      - If the \\`scripts\\` field from your local package.json contains a matching script name, its definition will get executed.\n\n      - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n      - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n      Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n    `,examples:[[\"Run the tests from the local workspace\",\"$0 run test\"],['Same thing, but without the \"run\" keyword',\"$0 test\"],[\"Inspect Webpack while running\",\"$0 run --inspect-brk webpack\"]]});var Nu=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Persist the resolution inside the top-level manifest\"});this.descriptor=z.String();this.resolution=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(await i.restoreInstallState({restoreResolutions:!1}),!n)throw new ct(i.cwd,this.context.cwd);let o=P.parseDescriptor(this.descriptor,!0),a=P.makeDescriptor(o,this.resolution);return i.storedDescriptors.set(o.descriptorHash,o),i.storedDescriptors.set(a.descriptorHash,a),i.resolutionAliases.set(o.descriptorHash,a.descriptorHash),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Nu.paths=[[\"set\",\"resolution\"]],Nu.usage=ve.Usage({description:\"enforce a package resolution\",details:'\\n      This command updates the resolution table so that `descriptor` is resolved by `resolution`.\\n\\n      Note that by default this command only affect the current resolution table - meaning that this \"manual override\" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\\n\\n      Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\\n    ',examples:[[\"Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0\",\"$0 set resolution lodash@npm:^1.2.3 1.5.0\"]]});var wae=Pe(Bn()),Tu=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unlink all workspaces belonging to the target project from the current one\"});this.leadingArguments=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);let o=i.topLevelWorkspace,a=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:c,reference:u}of o.manifest.resolutions)u.startsWith(\"portal:\")&&a.add(c.descriptor.fullName);if(this.leadingArguments.length>0)for(let c of this.leadingArguments){let u=x.resolve(this.context.cwd,K.toPortablePath(c));if(Ie.isPathLike(c)){let g=await ye.find(u,this.context.plugins,{useRc:!1,strict:!1}),{project:f,workspace:h}=await je.find(g,u);if(!h)throw new ct(f.cwd,u);if(this.all){for(let p of f.workspaces)p.manifest.name&&a.add(P.stringifyIdent(p.locator));if(a.size===0)throw new Qe(\"No workspace found to be unlinked in the target project\")}else{if(!h.manifest.name)throw new Qe(\"The target workspace doesn't have a name and thus cannot be unlinked\");a.add(P.stringifyIdent(h.locator))}}else{let g=[...o.manifest.resolutions.map(({pattern:f})=>f.descriptor.fullName)];for(let f of(0,wae.default)(g,c))a.add(f)}}return o.manifest.resolutions=o.manifest.resolutions.filter(({pattern:c})=>!a.has(c.descriptor.fullName)),(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{await i.install({cache:s,report:c})})).exitCode()}};Tu.paths=[[\"unlink\"]],Tu.usage=ve.Usage({description:\"disconnect the local project from another one\",details:`\n      This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.\n    `,examples:[[\"Unregister a remote workspace in the current project\",\"$0 unlink ~/ts-loader\"],[\"Unregister all workspaces from a remote project in the current project\",\"$0 unlink ~/jest --all\"],[\"Unregister all previously linked workspaces\",\"$0 unlink --all\"],[\"Unregister all workspaces matching a glob\",\"$0 unlink '@babel/*' 'pkg-{a,b}'\"]]});var Bae=Pe(Km()),sM=Pe(Bn());ls();var El=class extends De{constructor(){super(...arguments);this.interactive=z.Boolean(\"-i,--interactive\",{description:\"Offer various choices, depending on the detected upgrade paths\"});this.exact=z.Boolean(\"-E,--exact\",!1,{description:\"Don't use any semver modifier on the resolved range\"});this.tilde=z.Boolean(\"-T,--tilde\",!1,{description:\"Use the `~` semver modifier on the resolved range\"});this.caret=z.Boolean(\"-C,--caret\",!1,{description:\"Use the `^` semver modifier on the resolved range\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Resolve again ALL resolutions for those packages\"});this.mode=z.String(\"--mode\",{description:\"Change what artifacts installs generate\",validator:Zi(ts)});this.patterns=z.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=[...i.storedDescriptors.values()],a=o.map(g=>P.stringifyIdent(g)),l=new Set;for(let g of this.patterns){if(P.parseDescriptor(g).range!==\"unknown\")throw new Qe(\"Ranges aren't allowed when using --recursive\");for(let f of(0,sM.default)(a,g)){let h=P.parseIdent(f);l.add(h.identHash)}}let c=o.filter(g=>l.has(g.identHash));for(let g of c)i.storedDescriptors.delete(g.descriptorHash),i.storedResolutions.delete(g.descriptorHash);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{await i.install({cache:s,report:g})})).exitCode()}async executeUpClassic(){var y;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState({restoreResolutions:!1});let o=(y=this.interactive)!=null?y:t.get(\"preferInteractive\"),a=Hm(this,i),l=o?[\"keep\",\"reuse\",\"project\",\"latest\"]:[\"project\",\"latest\"],c=[],u=[];for(let B of this.patterns){let v=!1,D=P.parseDescriptor(B);for(let T of i.workspaces)for(let H of[\"dependencies\",\"devDependencies\"]){let $=[...T.manifest.getForScope(H).values()].map(V=>P.stringifyIdent(V));for(let V of(0,sM.default)($,P.stringifyIdent(D))){let W=P.parseIdent(V),_=T.manifest[H].get(W.identHash);if(typeof _>\"u\")throw new Error(\"Assertion failed: Expected the descriptor to be registered\");let A=P.makeDescriptor(W,D.range);c.push(Promise.resolve().then(async()=>[T,H,_,await Gm(A,{project:i,workspace:T,cache:s,target:H,modifier:a,strategies:l})])),v=!0}}v||u.push(B)}if(u.length>1)throw new Qe(`Patterns ${ee.prettyList(t,u,xi.CODE)} don't match any packages referenced by any workspace`);if(u.length>0)throw new Qe(`Pattern ${ee.prettyList(t,u,xi.CODE)} doesn't match any packages referenced by any workspace`);let g=await Promise.all(c),f=await ra.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async B=>{for(let[,,v,{suggestions:D,rejections:T}]of g){let H=D.filter(j=>j.descriptor!==null);if(H.length===0){let[j]=T;if(typeof j>\"u\")throw new Error(\"Assertion failed: Expected an error to have been set\");let $=this.cli.error(j);i.configuration.get(\"enableNetwork\")?B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range\n\n${$}`):B.reportError(27,`${P.prettyDescriptor(t,v)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${$}`)}else H.length>1&&!o&&B.reportError(27,`${P.prettyDescriptor(t,v)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(f.hasErrors())return f.exitCode();let h=!1,p=[];for(let[B,v,,{suggestions:D}]of g){let T,H=D.filter(W=>W.descriptor!==null),j=H[0].descriptor,$=H.every(W=>P.areDescriptorsEqual(W.descriptor,j));H.length===1||$?T=j:(h=!0,{answer:T}=await(0,Bae.prompt)({type:\"select\",name:\"answer\",message:`Which range to you want to use in ${P.prettyWorkspace(t,B)} \\u276F ${v}?`,choices:D.map(({descriptor:W,name:_,reason:A})=>W?{name:_,hint:A,descriptor:W}:{name:_,hint:A,disabled:!0}),onCancel:()=>process.exit(130),result(W){return this.find(W,\"descriptor\")},stdin:this.context.stdin,stdout:this.context.stdout}));let V=B.manifest[v].get(T.identHash);if(typeof V>\"u\")throw new Error(\"Assertion failed: This descriptor should have a matching entry\");if(V.descriptorHash!==T.descriptorHash)B.manifest[v].set(T.identHash,T),p.push([B,v,V,T]);else{let W=t.makeResolver(),_={project:i,resolver:W},A=W.bindDescriptor(V,B.anchoredLocator,_);i.forgetResolution(A)}}return await t.triggerMultipleHooks(B=>B.afterWorkspaceDependencyReplacement,p),h&&this.context.stdout.write(`\n`),(await Ge.start({configuration:t,stdout:this.context.stdout},async B=>{await i.install({cache:s,report:B,mode:this.mode})})).exitCode()}};El.paths=[[\"up\"]],El.usage=ve.Usage({description:\"upgrade dependencies across the project\",details:\"\\n      This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\\n\\n      If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\\n\\n      If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\\n\\n      The, `-C,--caret`, `-E,--exact` and  `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\\n\\n      If the `--mode=<mode>` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\\n\\n      - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\\n\\n      - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\\n\\n      Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\\n\\n      This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\\n\\n      **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\\n    \",examples:[[\"Upgrade all instances of lodash to the latest release\",\"$0 up lodash\"],[\"Upgrade all instances of lodash to the latest release, but ask confirmation for each\",\"$0 up lodash -i\"],[\"Upgrade all instances of lodash to 1.2.3\",\"$0 up lodash@1.2.3\"],[\"Upgrade all instances of packages with the `@babel` scope to the latest release\",\"$0 up '@babel/*'\"],[\"Upgrade all instances of packages containing the word `jest` to the latest release\",\"$0 up '*jest*'\"],[\"Upgrade all instances of packages with the `@babel` scope to 7.0.0\",\"$0 up '@babel/*@7.0.0'\"]]}),El.schema=[av(\"recursive\",lc.Forbids,[\"interactive\",\"exact\",\"tilde\",\"caret\"],{ignore:[void 0,!1]})];var Lu=class extends De{constructor(){super(...arguments);this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"List, for each workspace, what are all the paths that lead to the dependency\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.peers=z.Boolean(\"--peers\",!1,{description:\"Also print the peer dependencies that match the specified name\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=P.parseIdent(this.package).identHash,o=this.recursive?j3e(i,s,{configuration:t,peers:this.peers}):Y3e(i,s,{configuration:t,peers:this.peers});es.emitTree(o,{configuration:t,stdout:this.context.stdout,json:this.json,separators:1})}};Lu.paths=[[\"why\"]],Lu.usage=ve.Usage({description:\"display the reason why a package is needed\",details:`\n      This command prints the exact reasons why a package appears in the dependency tree.\n\n      If \\`-R,--recursive\\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named \"Foo\" when looking for \"Bar\", it means that \"Foo\" already got printed higher in the tree.\n    `,examples:[[\"Explain why lodash is used in your project\",\"$0 why lodash\"]]});function Y3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={};for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=r.storedResolutions.get(u.descriptorHash);if(!g)throw new Error(\"Assertion failed: The resolution should have been registered\");let f=r.storedPackages.get(g);if(!f)throw new Error(\"Assertion failed: The package should have been registered\");if(f.identHash!==e)continue;{let p=P.stringifyLocator(a);s[p]={value:[a,ee.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},ee.Type.DEPENDENT]}}}return o}function j3e(r,e,{configuration:t,peers:i}){let n=Ie.sortMap(r.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let C=r.storedResolutions.get(p.descriptorHash);if(!C)throw new Error(\"Assertion failed: The resolution should have been registered\");let y=r.storedPackages.get(C);if(!y)throw new Error(\"Assertion failed: The package should have been registered\");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let C=p!==null?ee.tuple(ee.Type.DEPENDENT,{locator:f,descriptor:p}):ee.tuple(ee.Type.LOCATOR,f),y={},B={value:C,children:y},v=P.stringifyLocator(f);if(h[v]=B,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&r.tryWorkspaceByLocator(f))))for(let D of f.dependencies.values()){if(!i&&f.peerDependencies.has(D.identHash))continue;let T=r.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=r.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");g(H,y,D)}};for(let f of n){let h=r.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error(\"Assertion failed: The package should have been registered\");g(h,c,null)}return u}var dM={};ut(dM,{default:()=>c4e,gitUtils:()=>AA});var AA={};ut(AA,{TreeishProtocols:()=>Lb,clone:()=>pM,fetchBase:()=>qae,fetchChangedFiles:()=>Jae,fetchChangedWorkspaces:()=>A4e,fetchRoot:()=>jae,isGitUrl:()=>ep,lsRemote:()=>Yae,normalizeLocator:()=>fM,normalizeRepoUrl:()=>Vm,resolveUrl:()=>hM,splitRepoUrl:()=>zm});var gM=Pe(Mae()),Hae=Pe(PB()),$h=Pe(J(\"querystring\")),cM=Pe(Xr());var Kae=J(\"url\");function lM(r,e,t){let i=r.indexOf(t);return r.lastIndexOf(e,i>-1?i:1/0)}function Oae(r){try{return new Kae.URL(r)}catch{return}}function o4e(r){let e=lM(r,\"@\",\"#\"),t=lM(r,\":\",\"#\");return t>e&&(r=`${r.slice(0,t)}/${r.slice(t+1)}`),lM(r,\":\",\"#\")===-1&&r.indexOf(\"//\")===-1&&(r=`ssh://${r}`),r}function Uae(r){return Oae(r)||Oae(o4e(r))}function Gae(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||\"ssh\"} -o BatchMode=yes`}}var a4e=[/^ssh:/,/^git(?:\\+[^:]+)?:/,/^(?:git\\+)?https?:[^#]+\\/[^#]+(?:\\.git)(?:#.*)?$/,/^git@[^#]+\\/[^#]+\\.git(?:#.*)?$/,/^(?:github:|https:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z._0-9-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\\.git)?(?:#.*)?$/,/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/],Lb=(n=>(n.Commit=\"commit\",n.Head=\"head\",n.Tag=\"tag\",n.Semver=\"semver\",n))(Lb||{});function ep(r){return r?a4e.some(e=>!!r.match(e)):!1}function zm(r){r=Vm(r);let e=r.indexOf(\"#\");if(e===-1)return{repo:r,treeish:{protocol:\"head\",request:\"HEAD\"},extra:{}};let t=r.slice(0,e),i=r.slice(e+1);if(i.match(/^[a-z]+=/)){let n=$h.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!=\"string\")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(Lb).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s<\"u\"?(o=s,a=n[s]):(o=\"head\",a=\"HEAD\");for(let l of Object.values(Lb))delete n[l];return{repo:t,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(\":\"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:t,treeish:{protocol:s,request:o},extra:{}}}}function Vm(r,{git:e=!1}={}){if(r=r.replace(/^git\\+https:/,\"https:\"),r=r.replace(/^(?:github:|https:\\/\\/github\\.com\\/|git:\\/\\/github\\.com\\/)?(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\\.git)?(#.*)?$/,\"https://github.com/$1/$2.git$3\"),r=r.replace(/^https:\\/\\/github\\.com\\/(?!\\.{1,2}\\/)([a-zA-Z0-9._-]+)\\/(?!\\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\\/tarball\\/(.+)?$/,\"https://github.com/$1/$2.git#$3\"),e){let t=Uae(r);t&&(r=t.href),r=r.replace(/^git\\+([^:]+):/,\"$1:\")}return r}function fM(r){return P.makeLocator(r,Vm(r.reference))}async function Yae(r,e){let t=Vm(r,{git:!0});if(!Xt.getNetworkSettings(`https://${(0,gM.default)(t).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${t}' has been blocked because of your configuration settings`);let n=await uM(\"listing refs\",[\"ls-remote\",t],{cwd:e.startingCwd,env:Gae()},{configuration:e,normalizedRepoUrl:t}),s=new Map,o=/^([a-f0-9]{40})\\t([^\\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function hM(r,e){let{repo:t,treeish:{protocol:i,request:n},extra:s}=zm(r),o=await Yae(t,e),a=(c,u)=>{switch(c){case\"commit\":{if(!u.match(/^[a-f0-9]{40}$/))throw new Error(\"Invalid commit hash\");return $h.default.stringify({...s,commit:u})}case\"head\":{let g=o.get(u===\"HEAD\"?u:`refs/heads/${u}`);if(typeof g>\"u\")throw new Error(`Unknown head (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"tag\":{let g=o.get(`refs/tags/${u}`);if(typeof g>\"u\")throw new Error(`Unknown tag (\"${u}\")`);return $h.default.stringify({...s,commit:g})}case\"semver\":{let g=vt.validRange(u);if(!g)throw new Error(`Invalid range (\"${u}\")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith(\"refs/tags/\")).map(([p,C])=>[cM.default.parse(p.slice(10)),C]).filter(p=>p[0]!==null)),h=cM.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range (\"${u}\")`);return $h.default.stringify({...s,commit:f.get(h)})}case null:{let g;if((g=l(\"commit\",u))!==null||(g=l(\"tag\",u))!==null||(g=l(\"head\",u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve \"${u}\" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol (\"${c}\")`)}},l=(c,u)=>{try{return a(c,u)}catch{return null}};return`${t}#${a(i,n)}`}async function pM(r,e){return await e.getLimit(\"cloneConcurrency\")(async()=>{let{repo:t,treeish:{protocol:i,request:n}}=zm(r);if(i!==\"commit\")throw new Error(\"Invalid treeish protocol when cloning\");let s=Vm(t,{git:!0});if(Xt.getNetworkSettings(`https://${(0,gM.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await O.mktempPromise(),a={cwd:o,env:Gae()};return await uM(\"cloning the repository\",[\"clone\",\"-c core.autocrlf=false\",s,K.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await uM(\"switching branch\",[\"checkout\",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function jae(r){let e=null,t,i=r;do t=i,await O.existsPromise(x.join(t,\".git\"))&&(e=t),i=x.dirname(t);while(e===null&&i!==t);return e}async function qae(r,{baseRefs:e}){if(e.length===0)throw new Qe(\"Can't run this command with zero base refs specified.\");let t=[];for(let a of e){let{code:l}=await Cr.execvp(\"git\",[\"merge-base\",a,\"HEAD\"],{cwd:r});l===0&&t.push(a)}if(t.length===0)throw new Qe(`No ancestor could be found between any of HEAD and ${e.join(\", \")}`);let{stdout:i}=await Cr.execvp(\"git\",[\"merge-base\",\"HEAD\",...t],{cwd:r,strict:!0}),n=i.trim(),{stdout:s}=await Cr.execvp(\"git\",[\"show\",\"--quiet\",\"--pretty=format:%s\",n],{cwd:r,strict:!0}),o=s.trim();return{hash:n,title:o}}async function Jae(r,{base:e,project:t}){let i=Ie.buildIgnorePattern(t.configuration.get(\"changesetIgnorePatterns\")),{stdout:n}=await Cr.execvp(\"git\",[\"diff\",\"--name-only\",`${e}`],{cwd:r,strict:!0}),s=n.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),{stdout:o}=await Cr.execvp(\"git\",[\"ls-files\",\"--others\",\"--exclude-standard\"],{cwd:r,strict:!0}),a=o.split(/\\r\\n|\\r|\\n/).filter(c=>c.length>0).map(c=>x.resolve(r,K.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(t.cwd,c).match(i)):l}async function A4e({ref:r,project:e}){if(e.configuration.projectCwd===null)throw new Qe(\"This command can only be run from within a Yarn project\");let t=[x.resolve(e.cwd,e.configuration.get(\"cacheFolder\")),x.resolve(e.cwd,e.configuration.get(\"installStatePath\")),x.resolve(e.cwd,e.configuration.get(\"lockfileFilename\")),x.resolve(e.cwd,e.configuration.get(\"virtualFolder\"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&t.push(o)});let i=await jae(e.configuration.projectCwd);if(i==null)throw new Qe(\"This command can only be run on Git repositories\");let n=await qae(i,{baseRefs:typeof r==\"string\"?[r]:e.configuration.get(\"changesetBaseRefs\")}),s=await Jae(i,{base:n.hash,project:e});return new Set(Ie.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?Ie.mapAndFilter.skip:t.some(l=>o.startsWith(l))?Ie.mapAndFilter.skip:a}))}async function uM(r,e,t,{configuration:i,normalizedRepoUrl:n}){try{return await Cr.execvp(\"git\",e,{...t,strict:!0})}catch(s){if(!(s instanceof Cr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new at(1,`Failed ${r}`,l=>{l.reportError(1,`  ${ee.prettyField(i,{label:\"Repository URL\",value:ee.tuple(ee.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u===\"error\"?\"Error\":`${(0,Hae.default)(u)} Error`;l.reportError(1,`  ${ee.prettyField(i,{label:f,value:ee.tuple(ee.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var Mb=class{supports(e,t){return ep(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,n=fM(e),s=new Map(t.checksums);s.set(n.locatorHash,i);let o={...t,checksums:s},a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,t){return t.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){let i=await pM(e.reference,t.project.configuration),n=zm(e.reference),s=x.join(i,\"package.tgz\");await Wt.prepareExternalProject(i,s,{configuration:t.project.configuration,report:t.report,workspace:n.extra.workspace,locator:e});let o=await O.readFilePromise(s);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(o,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var Ob=class{supportsDescriptor(e,t){return ep(e.range)}supportsLocator(e,t){return ep(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=await hM(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var l4e={configuration:{changesetBaseRefs:{description:\"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.\",type:\"STRING\",isArray:!0,isNullable:!1,default:[\"master\",\"origin/master\",\"upstream/master\",\"main\",\"origin/main\",\"upstream/main\"]},changesetIgnorePatterns:{description:\"Array of glob patterns; files matching them will be ignored when fetching the changed files\",type:\"STRING\",default:[],isArray:!0},cloneConcurrency:{description:\"Maximal number of concurrent clones\",type:\"NUMBER\",default:2}},fetchers:[Mb],resolvers:[Ob]};var c4e=l4e;var Mu=class extends De{constructor(){super(...arguments);this.since=z.String(\"--since\",{description:\"Only include workspaces that have been changed since the specified ref.\",tolerateBoolean:!0});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Find packages via dependencies/devDependencies instead of using the workspaces field\"});this.noPrivate=z.Boolean(\"--no-private\",{description:\"Exclude workspaces that have the private field set to true\"});this.verbose=z.Boolean(\"-v,--verbose\",!1,{description:\"Also return the cross-dependencies between workspaces\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd);return(await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async s=>{let o=this.since?await AA.fetchChangedWorkspaces({ref:this.since,project:i}):i.workspaces,a=new Set(o);if(this.recursive)for(let l of[...o].map(c=>c.getRecursiveWorkspaceDependents()))for(let c of l)a.add(c);for(let l of a){let{manifest:c}=l;if(c.private&&this.noPrivate)continue;let u;if(this.verbose){let g=new Set,f=new Set;for(let h of ot.hardDependencies)for(let[p,C]of c.getForScope(h)){let y=i.tryWorkspaceByDescriptor(C);y===null?i.workspacesByIdent.has(p)&&f.add(C):g.add(y)}u={workspaceDependencies:Array.from(g).map(h=>h.relativeCwd),mismatchedWorkspaceDependencies:Array.from(f).map(h=>P.stringifyDescriptor(h))}}s.reportInfo(null,`${l.relativeCwd}`),s.reportJson({location:l.relativeCwd,name:c.name?P.stringifyIdent(c.name):null,...u})}})).exitCode()}};Mu.paths=[[\"workspaces\",\"list\"]],Mu.usage=ve.Usage({category:\"Workspace-related commands\",description:\"list all available workspaces\",details:\"\\n      This command will print the list of all workspaces in the project.\\n\\n      - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\\n\\n      - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\\n\\n      - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\\n\\n      - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\\n    \"});var Ou=class extends De{constructor(){super(...arguments);this.workspaceName=z.String();this.commandName=z.String();this.args=z.Proxy()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=i.workspaces,o=new Map(s.map(l=>[P.stringifyIdent(l.locator),l])),a=o.get(this.workspaceName);if(a===void 0){let l=Array.from(o.keys()).sort();throw new Qe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n  - ${l.join(`\n  - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:a.cwd})}};Ou.paths=[[\"workspace\"]],Ou.usage=ve.Usage({category:\"Workspace-related commands\",description:\"run a command within the specified workspace\",details:`\n      This command will run a given sub-command on a single workspace.\n    `,examples:[[\"Add a package to a single workspace\",\"yarn workspace components add -D react\"],[\"Run build script on a single workspace\",\"yarn workspace components run build\"]]});var u4e={configuration:{enableImmutableInstalls:{description:\"If true (the default on CI), prevents the install command from modifying the lockfile\",type:\"BOOLEAN\",default:Wae.isCI},defaultSemverRangePrefix:{description:\"The default save prefix: '^', '~' or ''\",type:\"STRING\",values:[\"^\",\"~\",\"\"],default:\"^\"}},commands:[cu,uu,gu,fu,Nu,Su,mu,Mu,Vh,Xh,qm,Zh,Au,lu,hu,pu,du,Cu,Eu,Iu,yu,wu,Tu,Bu,xu,vu,Pu,bu,Du,ku,Ru,_h,Fu,El,Lu,Ou]},g4e=u4e;var wM={};ut(wM,{default:()=>h4e});var Te={optional:!0},mM=[[\"@tailwindcss/aspect-ratio@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@tailwindcss/line-clamp@<0.2.1\",{peerDependencies:{tailwindcss:\"^2.0.2\"}}],[\"@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0\",{peerDependencies:{postcss:\"^8.0.0\"}}],[\"@samverschueren/stream-to-observable@<0.3.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"any-observable@<0.5.1\",{peerDependenciesMeta:{rxjs:Te,zenObservable:Te}}],[\"@pm2/agent@<1.0.4\",{dependencies:{debug:\"*\"}}],[\"debug@<4.2.0\",{peerDependenciesMeta:{[\"supports-color\"]:Te}}],[\"got@<11\",{dependencies:{[\"@types/responselike\"]:\"^1.0.0\",[\"@types/keyv\"]:\"^3.1.1\"}}],[\"cacheable-lookup@<4.1.2\",{dependencies:{[\"@types/keyv\"]:\"^3.1.1\"}}],[\"http-link-dataloader@*\",{peerDependencies:{graphql:\"^0.13.1 || ^14.0.0\"}}],[\"typescript-language-server@*\",{dependencies:{[\"vscode-jsonrpc\"]:\"^5.0.1\",[\"vscode-languageserver-protocol\"]:\"^3.15.0\"}}],[\"postcss-syntax@*\",{peerDependenciesMeta:{[\"postcss-html\"]:Te,[\"postcss-jsx\"]:Te,[\"postcss-less\"]:Te,[\"postcss-markdown\"]:Te,[\"postcss-scss\"]:Te}}],[\"jss-plugin-rule-value-function@<=10.1.1\",{dependencies:{[\"tiny-warning\"]:\"^1.0.2\"}}],[\"ink-select-input@<4.1.0\",{peerDependencies:{react:\"^16.8.2\"}}],[\"license-webpack-plugin@<2.3.18\",{peerDependenciesMeta:{webpack:Te}}],[\"snowpack@>=3.3.0\",{dependencies:{[\"node-gyp\"]:\"^7.1.0\"}}],[\"promise-inflight@*\",{peerDependenciesMeta:{bluebird:Te}}],[\"reactcss@*\",{peerDependencies:{react:\"*\"}}],[\"react-color@<=2.19.0\",{peerDependencies:{react:\"*\"}}],[\"gatsby-plugin-i18n@*\",{dependencies:{ramda:\"^0.24.1\"}}],[\"useragent@^2.0.0\",{dependencies:{request:\"^2.88.0\",yamlparser:\"0.0.x\",semver:\"5.5.x\"}}],[\"@apollographql/apollo-tools@<=0.5.2\",{peerDependencies:{graphql:\"^14.2.1 || ^15.0.0\"}}],[\"material-table@^2.0.0\",{dependencies:{\"@babel/runtime\":\"^7.11.2\"}}],[\"@babel/parser@*\",{dependencies:{\"@babel/types\":\"^7.8.3\"}}],[\"fork-ts-checker-webpack-plugin@<=6.3.4\",{peerDependencies:{eslint:\">= 6\",typescript:\">= 2.7\",webpack:\">= 4\",\"vue-template-compiler\":\"*\"},peerDependenciesMeta:{eslint:Te,\"vue-template-compiler\":Te}}],[\"rc-animate@<=3.1.1\",{peerDependencies:{react:\">=16.9.0\",\"react-dom\":\">=16.9.0\"}}],[\"react-bootstrap-table2-paginator@*\",{dependencies:{classnames:\"^2.2.6\"}}],[\"react-draggable@<=4.4.3\",{peerDependencies:{react:\">= 16.3.0\",\"react-dom\":\">= 16.3.0\"}}],[\"apollo-upload-client@<14\",{peerDependencies:{graphql:\"14 - 15\"}}],[\"react-instantsearch-core@<=6.7.0\",{peerDependencies:{algoliasearch:\">= 3.1 < 5\"}}],[\"react-instantsearch-dom@<=6.7.0\",{dependencies:{\"react-fast-compare\":\"^3.0.0\"}}],[\"ws@<7.2.1\",{peerDependencies:{bufferutil:\"^4.0.1\",\"utf-8-validate\":\"^5.0.2\"},peerDependenciesMeta:{bufferutil:Te,\"utf-8-validate\":Te}}],[\"react-portal@<4.2.2\",{peerDependencies:{\"react-dom\":\"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0\"}}],[\"react-scripts@<=4.0.1\",{peerDependencies:{react:\"*\"}}],[\"testcafe@<=1.10.1\",{dependencies:{\"@babel/plugin-transform-for-of\":\"^7.12.1\",\"@babel/runtime\":\"^7.12.5\"}}],[\"testcafe-legacy-api@<=4.2.0\",{dependencies:{\"testcafe-hammerhead\":\"^17.0.1\",\"read-file-relative\":\"^1.2.0\"}}],[\"@google-cloud/firestore@<=4.9.3\",{dependencies:{protobufjs:\"^6.8.6\"}}],[\"gatsby-source-apiserver@*\",{dependencies:{[\"babel-polyfill\"]:\"^6.26.0\"}}],[\"@webpack-cli/package-utils@<=1.0.1-alpha.4\",{dependencies:{[\"cross-spawn\"]:\"^7.0.3\"}}],[\"gatsby-remark-prismjs@<3.3.28\",{dependencies:{lodash:\"^4\"}}],[\"gatsby-plugin-favicon@*\",{peerDependencies:{webpack:\"*\"}}],[\"gatsby-plugin-sharp@<=4.6.0-next.3\",{dependencies:{debug:\"^4.3.1\"}}],[\"gatsby-react-router-scroll@<=5.6.0-next.0\",{dependencies:{[\"prop-types\"]:\"^15.7.2\"}}],[\"@rebass/forms@*\",{dependencies:{[\"@styled-system/should-forward-prop\"]:\"^5.0.0\"},peerDependencies:{react:\"^16.8.6\"}}],[\"rebass@*\",{peerDependencies:{react:\"^16.8.6\"}}],[\"@ant-design/react-slick@<=0.28.3\",{peerDependencies:{react:\">=16.0.0\"}}],[\"mqtt@<4.2.7\",{dependencies:{duplexify:\"^4.1.1\"}}],[\"vue-cli-plugin-vuetify@<=2.0.3\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te,\"vuetify-loader\":Te}}],[\"vue-cli-plugin-vuetify@<=2.0.4\",{dependencies:{\"null-loader\":\"^3.0.0\"}}],[\"vue-cli-plugin-vuetify@>=2.4.3\",{peerDependencies:{vue:\"*\"}}],[\"@vuetify/cli-plugin-utils@<=0.0.4\",{dependencies:{semver:\"^6.3.0\"},peerDependenciesMeta:{\"sass-loader\":Te}}],[\"@vue/cli-plugin-typescript@<=5.0.0-alpha.0\",{dependencies:{\"babel-loader\":\"^8.1.0\"}}],[\"@vue/cli-plugin-typescript@<=5.0.0-beta.0\",{dependencies:{\"@babel/core\":\"^7.12.16\"},peerDependencies:{\"vue-template-compiler\":\"^2.0.0\"},peerDependenciesMeta:{\"vue-template-compiler\":Te}}],[\"cordova-ios@<=6.3.0\",{dependencies:{underscore:\"^1.9.2\"}}],[\"cordova-lib@<=10.0.1\",{dependencies:{underscore:\"^1.9.2\"}}],[\"git-node-fs@*\",{peerDependencies:{\"js-git\":\"^0.7.8\"},peerDependenciesMeta:{\"js-git\":Te}}],[\"consolidate@<0.16.0\",{peerDependencies:{mustache:\"^3.0.0\"},peerDependenciesMeta:{mustache:Te}}],[\"consolidate@<=0.16.0\",{peerDependencies:{velocityjs:\"^2.0.1\",tinyliquid:\"^0.2.34\",\"liquid-node\":\"^3.0.1\",jade:\"^1.11.0\",\"then-jade\":\"*\",dust:\"^0.3.0\",\"dustjs-helpers\":\"^1.7.4\",\"dustjs-linkedin\":\"^2.7.5\",swig:\"^1.4.2\",\"swig-templates\":\"^2.0.3\",\"razor-tmpl\":\"^1.3.1\",atpl:\">=0.7.6\",liquor:\"^0.0.5\",twig:\"^1.15.2\",ejs:\"^3.1.5\",eco:\"^1.1.0-rc-3\",jazz:\"^0.0.18\",jqtpl:\"~1.1.0\",hamljs:\"^0.6.2\",hamlet:\"^0.3.3\",whiskers:\"^0.4.0\",\"haml-coffee\":\"^1.14.1\",\"hogan.js\":\"^3.0.2\",templayed:\">=0.2.3\",handlebars:\"^4.7.6\",underscore:\"^1.11.0\",lodash:\"^4.17.20\",pug:\"^3.0.0\",\"then-pug\":\"*\",qejs:\"^3.0.5\",walrus:\"^0.10.1\",mustache:\"^4.0.1\",just:\"^0.1.8\",ect:\"^0.5.9\",mote:\"^0.2.0\",toffee:\"^0.3.6\",dot:\"^1.1.3\",\"bracket-template\":\"^1.1.5\",ractive:\"^1.3.12\",nunjucks:\"^3.2.2\",htmling:\"^0.0.8\",\"babel-core\":\"^6.26.3\",plates:\"~0.4.11\",\"react-dom\":\"^16.13.1\",react:\"^16.13.1\",\"arc-templates\":\"^0.5.3\",vash:\"^0.13.0\",slm:\"^2.0.0\",marko:\"^3.14.4\",teacup:\"^2.0.0\",\"coffee-script\":\"^1.12.7\",squirrelly:\"^5.1.0\",twing:\"^5.0.2\"},peerDependenciesMeta:{velocityjs:Te,tinyliquid:Te,\"liquid-node\":Te,jade:Te,\"then-jade\":Te,dust:Te,\"dustjs-helpers\":Te,\"dustjs-linkedin\":Te,swig:Te,\"swig-templates\":Te,\"razor-tmpl\":Te,atpl:Te,liquor:Te,twig:Te,ejs:Te,eco:Te,jazz:Te,jqtpl:Te,hamljs:Te,hamlet:Te,whiskers:Te,\"haml-coffee\":Te,\"hogan.js\":Te,templayed:Te,handlebars:Te,underscore:Te,lodash:Te,pug:Te,\"then-pug\":Te,qejs:Te,walrus:Te,mustache:Te,just:Te,ect:Te,mote:Te,toffee:Te,dot:Te,\"bracket-template\":Te,ractive:Te,nunjucks:Te,htmling:Te,\"babel-core\":Te,plates:Te,\"react-dom\":Te,react:Te,\"arc-templates\":Te,vash:Te,slm:Te,marko:Te,teacup:Te,\"coffee-script\":Te,squirrelly:Te,twing:Te}}],[\"vue-loader@<=16.3.3\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",webpack:\"^4.1.0 || ^5.0.0-0\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te}}],[\"vue-loader@^16.7.0\",{peerDependencies:{\"@vue/compiler-sfc\":\"^3.0.8\",vue:\"^3.2.13\"},peerDependenciesMeta:{\"@vue/compiler-sfc\":Te,vue:Te}}],[\"scss-parser@<=1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"query-ast@<1.0.5\",{dependencies:{lodash:\"^4.17.21\"}}],[\"redux-thunk@<=2.3.0\",{peerDependencies:{redux:\"^4.0.0\"}}],[\"skypack@<=0.3.2\",{dependencies:{tar:\"^6.1.0\"}}],[\"@npmcli/metavuln-calculator@<2.0.0\",{dependencies:{\"json-parse-even-better-errors\":\"^2.3.1\"}}],[\"bin-links@<2.3.0\",{dependencies:{\"mkdirp-infer-owner\":\"^1.0.2\"}}],[\"rollup-plugin-polyfill-node@<=0.8.0\",{peerDependencies:{rollup:\"^1.20.0 || ^2.0.0\"}}],[\"snowpack@<3.8.6\",{dependencies:{\"magic-string\":\"^0.25.7\"}}],[\"elm-webpack-loader@*\",{dependencies:{temp:\"^0.9.4\"}}],[\"winston-transport@<=4.4.0\",{dependencies:{logform:\"^2.2.0\"}}],[\"jest-vue-preprocessor@*\",{dependencies:{\"@babel/core\":\"7.8.7\",\"@babel/template\":\"7.8.6\"},peerDependencies:{pug:\"^2.0.4\"},peerDependenciesMeta:{pug:Te}}],[\"redux-persist@*\",{peerDependencies:{react:\">=16\"},peerDependenciesMeta:{react:Te}}],[\"sodium@>=3\",{dependencies:{\"node-gyp\":\"^3.8.0\"}}],[\"babel-plugin-graphql-tag@<=3.1.0\",{peerDependencies:{graphql:\"^14.0.0 || ^15.0.0\"}}],[\"@playwright/test@<=1.14.1\",{dependencies:{\"jest-matcher-utils\":\"^26.4.2\"}}],...[\"babel-plugin-remove-graphql-queries@<3.14.0-next.1\",\"babel-preset-gatsby-package@<1.14.0-next.1\",\"create-gatsby@<1.14.0-next.1\",\"gatsby-admin@<0.24.0-next.1\",\"gatsby-cli@<3.14.0-next.1\",\"gatsby-core-utils@<2.14.0-next.1\",\"gatsby-design-tokens@<3.14.0-next.1\",\"gatsby-legacy-polyfills@<1.14.0-next.1\",\"gatsby-plugin-benchmark-reporting@<1.14.0-next.1\",\"gatsby-plugin-graphql-config@<0.23.0-next.1\",\"gatsby-plugin-image@<1.14.0-next.1\",\"gatsby-plugin-mdx@<2.14.0-next.1\",\"gatsby-plugin-netlify-cms@<5.14.0-next.1\",\"gatsby-plugin-no-sourcemaps@<3.14.0-next.1\",\"gatsby-plugin-page-creator@<3.14.0-next.1\",\"gatsby-plugin-preact@<5.14.0-next.1\",\"gatsby-plugin-preload-fonts@<2.14.0-next.1\",\"gatsby-plugin-schema-snapshot@<2.14.0-next.1\",\"gatsby-plugin-styletron@<6.14.0-next.1\",\"gatsby-plugin-subfont@<3.14.0-next.1\",\"gatsby-plugin-utils@<1.14.0-next.1\",\"gatsby-recipes@<0.25.0-next.1\",\"gatsby-source-shopify@<5.6.0-next.1\",\"gatsby-source-wikipedia@<3.14.0-next.1\",\"gatsby-transformer-screenshot@<3.14.0-next.1\",\"gatsby-worker@<0.5.0-next.1\"].map(r=>[r,{dependencies:{\"@babel/runtime\":\"^7.14.8\"}}]),[\"gatsby-core-utils@<2.14.0-next.1\",{dependencies:{got:\"8.3.2\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.1.0-next.0\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"gatsby-plugin-gatsby-cloud@<=3.2.0-next.1\",{peerDependencies:{webpack:\"*\"}}],[\"babel-plugin-remove-graphql-queries@<=3.14.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.8.0-next.1\"}}],[\"gatsby-plugin-netlify@3.13.0-next.1\",{dependencies:{\"gatsby-core-utils\":\"^2.13.0-next.0\"}}],[\"clipanion-v3-codemod@<=0.2.0\",{peerDependencies:{jscodeshift:\"^0.11.0\"}}],[\"react-live@*\",{peerDependencies:{\"react-dom\":\"*\",react:\"*\"}}],[\"webpack@<4.44.1\",{peerDependenciesMeta:{\"webpack-cli\":Te,\"webpack-command\":Te}}],[\"webpack@<5.0.0-beta.23\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"webpack-dev-server@<3.10.2\",{peerDependenciesMeta:{\"webpack-cli\":Te}}],[\"@docusaurus/responsive-loader@<1.5.0\",{peerDependenciesMeta:{sharp:Te,jimp:Te}}],[\"eslint-module-utils@*\",{peerDependenciesMeta:{\"eslint-import-resolver-node\":Te,\"eslint-import-resolver-typescript\":Te,\"eslint-import-resolver-webpack\":Te,\"@typescript-eslint/parser\":Te}}],[\"eslint-plugin-import@*\",{peerDependenciesMeta:{\"@typescript-eslint/parser\":Te}}],[\"critters-webpack-plugin@<3.0.2\",{peerDependenciesMeta:{\"html-webpack-plugin\":Te}}],[\"terser@<=5.10.0\",{dependencies:{acorn:\"^8.5.0\"}}],[\"babel-preset-react-app@10.0.x\",{dependencies:{\"@babel/plugin-proposal-private-property-in-object\":\"^7.16.0\"}}],[\"eslint-config-react-app@*\",{peerDependenciesMeta:{typescript:Te}}],[\"@vue/eslint-config-typescript@<11.0.0\",{peerDependenciesMeta:{typescript:Te}}],[\"unplugin-vue2-script-setup@<0.9.1\",{peerDependencies:{\"@vue/composition-api\":\"^1.4.3\",\"@vue/runtime-dom\":\"^3.2.26\"}}],[\"@cypress/snapshot@*\",{dependencies:{debug:\"^3.2.7\"}}],[\"auto-relay@<=0.14.0\",{peerDependencies:{\"reflect-metadata\":\"^0.1.13\"}}],[\"vue-template-babel-compiler@<1.2.0\",{peerDependencies:{[\"vue-template-compiler\"]:\"^2.6.0\"}}],[\"@parcel/transformer-image@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"@parcel/transformer-js@<2.5.0\",{peerDependencies:{[\"@parcel/core\"]:\"*\"}}],[\"parcel@*\",{peerDependenciesMeta:{[\"@parcel/core\"]:Te}}],[\"react-scripts@*\",{peerDependencies:{eslint:\"*\"}}],[\"focus-trap-react@^8.0.0\",{dependencies:{tabbable:\"^5.3.2\"}}],[\"react-rnd@<10.3.7\",{peerDependencies:{react:\">=16.3.0\",\"react-dom\":\">=16.3.0\"}}],[\"connect-mongo@*\",{peerDependencies:{\"express-session\":\"^1.17.1\"}}],[\"vue-i18n@<9\",{peerDependencies:{vue:\"^2\"}}],[\"vue-router@<4\",{peerDependencies:{vue:\"^2\"}}],[\"unified@<10\",{dependencies:{\"@types/unist\":\"^2.0.0\"}}],[\"react-github-btn@<=1.3.0\",{peerDependencies:{react:\">=16.3.0\"}}],[\"react-dev-utils@*\",{peerDependencies:{typescript:\">=2.7\",webpack:\">=4\"},peerDependenciesMeta:{typescript:Te}}],[\"@asyncapi/react-component@<=1.0.0-next.39\",{peerDependencies:{react:\">=16.8.0\",\"react-dom\":\">=16.8.0\"}}],[\"xo@*\",{peerDependencies:{webpack:\">=1.11.0\"},peerDependenciesMeta:{webpack:Te}}],[\"babel-plugin-remove-graphql-queries@<=4.20.0-next.0\",{dependencies:{\"@babel/types\":\"^7.15.4\"}}],[\"gatsby-plugin-page-creator@<=4.20.0-next.1\",{dependencies:{\"fs-extra\":\"^10.1.0\"}}],[\"gatsby-plugin-utils@<=3.14.0-next.1\",{dependencies:{fastq:\"^1.13.0\"},peerDependencies:{graphql:\"^15.0.0\"}}],[\"gatsby-plugin-mdx@<3.1.0-next.1\",{dependencies:{mkdirp:\"^1.0.4\"}}],[\"gatsby-plugin-mdx@^2\",{peerDependencies:{gatsby:\"^3.0.0-next\"}}],[\"fdir@<=5.2.0\",{peerDependencies:{picomatch:\"2.x\"},peerDependenciesMeta:{picomatch:Te}}],[\"babel-plugin-transform-typescript-metadata@<=0.3.2\",{peerDependencies:{\"@babel/core\":\"^7\",\"@babel/traverse\":\"^7\"},peerDependenciesMeta:{\"@babel/traverse\":Te}}],[\"graphql-compose@>=9.0.10\",{peerDependencies:{graphql:\"^14.2.0 || ^15.0.0 || ^16.0.0\"}}]];var EM;function zae(){return typeof EM>\"u\"&&(EM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==\",\"base64\")).toString()),EM}var IM;function Vae(){return typeof IM>\"u\"&&(IM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=\",\"base64\")).toString()),IM}var yM;function Xae(){return typeof yM>\"u\"&&(yM=J(\"zlib\").brotliDecompressSync(Buffer.from(\"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\",\"base64\")).toString()),yM}var Zae=new Map([[P.makeIdent(null,\"fsevents\").identHash,zae],[P.makeIdent(null,\"resolve\").identHash,Vae],[P.makeIdent(null,\"typescript\").identHash,Xae]]),f4e={hooks:{registerPackageExtensions:async(r,e)=>{for(let[t,i]of mM)e(P.parseDescriptor(t,!0),i)},getBuiltinPatch:async(r,e)=>{var s;let t=\"compat/\";if(!e.startsWith(t))return;let i=P.parseIdent(e.slice(t.length)),n=(s=Zae.get(i.identHash))==null?void 0:s();return typeof n<\"u\"?n:null},reduceDependency:async(r,e,t,i)=>typeof Zae.get(r.identHash)>\"u\"?r:P.makeDescriptor(r,P.makeRange({protocol:\"patch:\",source:P.stringifyDescriptor(r),selector:`~builtin<compat/${P.stringifyIdent(r)}>`,params:null}))}},h4e=f4e;var BM={};ut(BM,{default:()=>d4e});var tp=class extends De{constructor(){super(...arguments);this.pkg=z.String(\"-p,--package\",{description:\"The package to run the provided command from\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){let t=[];this.pkg&&t.push(\"--package\",this.pkg),this.quiet&&t.push(\"--quiet\");let i=P.parseDescriptor(this.command),n;i.scope?n=P.makeIdent(i.scope,`create-${i.name}`):i.name.startsWith(\"@\")?n=P.makeIdent(i.name.substring(1),\"create\"):n=P.makeIdent(null,`create-${i.name}`);let s=P.stringifyIdent(n);return i.range!==\"unknown\"&&(s+=`@${i.range}`),this.cli.run([\"dlx\",...t,s,...this.args])}};tp.paths=[[\"create\"]];var Ku=class extends De{constructor(){super(...arguments);this.packages=z.Array(\"-p,--package\",{description:\"The package(s) to install before running the command\"});this.quiet=z.Boolean(\"-q,--quiet\",!1,{description:\"Only report critical errors instead of printing the full install logs\"});this.command=z.String();this.args=z.Proxy()}async execute(){return ye.telemetry=null,await O.mktempPromise(async t=>{var C;let i=x.join(t,`dlx-${process.pid}`);await O.mkdirPromise(i),await O.writeFilePromise(x.join(i,\"package.json\"),`{}\n`),await O.writeFilePromise(x.join(i,\"yarn.lock\"),\"\");let n=x.join(i,\".yarnrc.yml\"),s=await ye.findProjectCwd(this.context.cwd,xt.lockfile),o=!(await ye.find(this.context.cwd,null,{strict:!1})).get(\"enableGlobalCache\"),a=s!==null?x.join(s,\".yarnrc.yml\"):null;a!==null&&O.existsSync(a)?(await O.copyFilePromise(a,n),await ye.updateConfiguration(i,y=>{let B={...y,enableGlobalCache:o,enableTelemetry:!1};return Array.isArray(y.plugins)&&(B.plugins=y.plugins.map(v=>{let D=typeof v==\"string\"?v:v.path,T=K.isAbsolute(D)?D:K.resolve(K.fromPortablePath(s),D);return typeof v==\"string\"?T:{path:T,spec:v.spec}})),B})):await O.writeFilePromise(n,`enableGlobalCache: ${o}\nenableTelemetry: false\n`);let l=(C=this.packages)!=null?C:[this.command],c=P.parseDescriptor(this.command).name,u=await this.cli.run([\"add\",\"--\",...l],{cwd:i,quiet:this.quiet});if(u!==0)return u;this.quiet||this.context.stdout.write(`\n`);let g=await ye.find(i,this.context.plugins),{project:f,workspace:h}=await je.find(g,i);if(h===null)throw new ct(f.cwd,i);await f.restoreInstallState();let p=await Wt.getWorkspaceAccessibleBinaries(h);return p.has(c)===!1&&p.size===1&&typeof this.packages>\"u\"&&(c=Array.from(p)[0][0]),await Wt.executeWorkspaceAccessibleBinary(h,c,this.args,{packageAccessibleBinaries:p,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Ku.paths=[[\"dlx\"]],Ku.usage=ve.Usage({description:\"run a package in a temporary environment\",details:\"\\n      This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\\n\\n      By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\\n\\n      Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\\n    \",examples:[[\"Use create-react-app to create a new React app\",\"yarn dlx create-react-app ./my-app\"],[\"Install multiple packages for a single command\",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e \"console.log('hello!')\"`]]});var p4e={commands:[tp,Ku]},d4e=p4e;var vM={};ut(vM,{default:()=>E4e,fileUtils:()=>Zm});var rp=/^(?:[a-zA-Z]:[\\\\/]|\\.{0,2}\\/)/,Xm=/^[^?]*\\.(?:tar\\.gz|tgz)(?:::.*)?$/,jr=\"file:\";var Zm={};ut(Zm,{makeArchiveFromLocator:()=>Kb,makeBufferFromLocator:()=>SM,makeLocator:()=>QM,makeSpec:()=>_ae,parseSpec:()=>bM});function bM(r){let{params:e,selector:t}=P.parseRange(r),i=K.toPortablePath(t);return{parentLocator:e&&typeof e.locator==\"string\"?P.parseLocator(e.locator):null,path:i}}function _ae({parentLocator:r,path:e,folderHash:t,protocol:i}){let n=r!==null?{locator:P.stringifyLocator(r)}:{},s=typeof t<\"u\"?{hash:t}:{};return P.makeRange({protocol:i,source:e,selector:e,params:{...s,...n}})}function QM(r,{parentLocator:e,path:t,folderHash:i,protocol:n}){return P.makeLocator(r,_ae({parentLocator:e,path:t,folderHash:i,protocol:n}))}async function Kb(r,{protocol:e,fetchOptions:t,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(r.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(n,t),a=o.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await Ie.releaseAfterUseAsync(async()=>await mi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(r),compressionLevel:t.project.configuration.get(\"compressionLevel\"),inMemory:i}),a.releaseFs)}async function SM(r,{protocol:e,fetchOptions:t}){return(await Kb(r,{protocol:e,fetchOptions:t,inMemory:!0})).getBufferAndClose()}var Ub=class{supports(e,t){return!!e.reference.startsWith(jr)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async fetchFromDisk(e,t){return Kb(e,{protocol:jr,fetchOptions:t})}};var C4e=2,Hb=class{supportsDescriptor(e,t){return e.range.match(rp)?!0:!!e.range.startsWith(jr)}supportsLocator(e,t){return!!e.reference.startsWith(jr)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{path:n,parentLocator:s}=bM(e.range);if(s===null)throw new Error(\"Assertion failed: The descriptor should have been bound\");let o=await SM(P.makeLocator(e,P.makeRange({protocol:jr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:jr,fetchOptions:i.fetchOptions}),a=li.makeHash(`${C4e}`,o).slice(0,6);return[QM(e,{parentLocator:s,path:n,folderHash:a,protocol:jr})]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Gb=class{supports(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:jr}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await Ie.releaseAfterUseAsync(async()=>await mi.convertToZip(c,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var Yb=class{supportsDescriptor(e,t){return Xm.test(e.range)?!!(e.range.startsWith(jr)||rp.test(e.range)):!1}supportsLocator(e,t){return Xm.test(e.reference)?!!e.reference.startsWith(jr):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return rp.test(e.range)&&(e=P.makeDescriptor(e,`${jr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range;return n.startsWith(jr)&&(n=n.slice(jr.length)),[P.makeLocator(e,`${jr}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var m4e={fetchers:[Gb,Ub],resolvers:[Yb,Hb]},E4e=m4e;var xM={};ut(xM,{default:()=>B4e});var $ae=Pe(J(\"querystring\")),eAe=[/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+)\\/tarball\\/([^/#]+)(?:#(.*))?$/,/^https?:\\/\\/(?:([^/]+?)@)?github.com\\/([^/#]+)\\/([^/#]+?)(?:\\.git)?(?:#(.*))?$/];function tAe(r){return r?eAe.some(e=>!!r.match(e)):!1}function rAe(r){let e;for(let a of eAe)if(e=r.match(a),e)break;if(!e)throw new Error(I4e(r));let[,t,i,n,s=\"master\"]=e,{commit:o}=$ae.default.parse(s);return s=o||s.replace(/[^:]*:/,\"\"),{auth:t,username:i,reponame:n,treeish:s}}function I4e(r){return`Input cannot be parsed as a valid GitHub URL ('${r}').`}var jb=class{supports(e,t){return!!tAe(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await O.mktempPromise(async n=>{let s=new qt(n);await mi.extractArchiveTo(i,s,{stripComponents:1});let o=AA.splitRepoUrl(e.reference),a=x.join(n,\"package.tgz\");await Wt.prepareExternalProject(n,a,{configuration:t.project.configuration,report:t.report,workspace:o.extra.workspace,locator:e});let l=await O.readFilePromise(a);return await mi.convertToZip(l,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){let{auth:i,username:n,reponame:s,treeish:o}=rAe(e.reference);return`https://${i?`${i}@`:\"\"}github.com/${n}/${s}/archive/${o}.tar.gz`}};var w4e={hooks:{async fetchHostedRepository(r,e,t){if(r!==null)return r;let i=new jb;if(!i.supports(e,t))return null;try{return await i.fetch(e,t)}catch{return null}}}},B4e=w4e;var PM={};ut(PM,{default:()=>Q4e});var _m=/^[^?]*\\.(?:tar\\.gz|tgz)(?:\\?.*)?$/,$m=/^https?:/;var qb=class{supports(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i=await Xt.get(e.reference,{configuration:t.project.configuration});return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var Jb=class{supportsDescriptor(e,t){return _m.test(e.range)?!!$m.test(e.range):!1}supportsLocator(e,t){return _m.test(e.reference)?!!$m.test(e.reference):!1}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"HARD\",conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var b4e={fetchers:[qb],resolvers:[Jb]},Q4e=b4e;var FM={};ut(FM,{default:()=>S8e});var PAe=Pe(xAe()),RM=J(\"util\"),Uu=class extends De{constructor(){super(...arguments);this.private=z.Boolean(\"-p,--private\",!1,{description:\"Initialize a private package\"});this.workspace=z.Boolean(\"-w,--workspace\",!1,{description:\"Initialize a workspace root with a `packages/` directory\"});this.install=z.String(\"-i,--install\",!1,{tolerateBoolean:!0,description:\"Initialize a package with a specific bundle that will be locked in the project\"});this.usev2=z.Boolean(\"-2\",!1,{hidden:!0});this.yes=z.Boolean(\"-y,--yes\",{hidden:!0});this.assumeFreshProject=z.Boolean(\"--assume-fresh-project\",!1,{hidden:!0})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=typeof this.install==\"string\"?this.install:this.usev2||this.install===!0?\"latest\":null;return i!==null?await this.executeProxy(t,i):await this.executeRegular(t)}async executeProxy(t,i){if(t.projectCwd!==null&&t.projectCwd!==this.context.cwd)throw new Qe(\"Cannot use the --install flag from within a project subdirectory\");O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=x.join(this.context.cwd,t.get(\"lockfileFilename\"));O.existsSync(n)||await O.writeFilePromise(n,\"\");let s=await this.cli.run([\"set\",\"version\",i],{quiet:!0});if(s!==0)return s;let o=[];return this.private&&o.push(\"-p\"),this.workspace&&o.push(\"-w\"),this.yes&&o.push(\"-y\"),await O.mktempPromise(async a=>{let{code:l}=await Cr.pipevp(\"yarn\",[\"init\",...o],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Wt.makeScriptEnv({binFolder:a})});return l})}async executeRegular(t){var c;let i=null;try{i=(await je.find(t,this.context.cwd)).project}catch{i=null}O.existsSync(this.context.cwd)||await O.mkdirPromise(this.context.cwd,{recursive:!0});let n=await ot.tryFind(this.context.cwd)||new ot,s=Object.fromEntries(t.get(\"initFields\").entries());n.load(s),n.name=(c=n.name)!=null?c:P.makeIdent(t.get(\"initScope\"),x.basename(this.context.cwd)),n.packageManager=Tr&&Ie.isTaggedYarnVersion(Tr)?`yarn@${Tr}`:null,typeof n.raw.private>\"u\"&&(this.private||this.workspace&&n.workspaceDefinitions.length===0)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await O.mkdirPromise(x.join(this.context.cwd,\"packages\"),{recursive:!0}),n.workspaceDefinitions=[{pattern:\"packages/*\"}]);let o={};n.exportTo(o),RM.inspect.styles.name=\"cyan\",this.context.stdout.write(`${(0,RM.inspect)(o,{depth:1/0,colors:!0,compact:!1})}\n`);let a=x.join(this.context.cwd,ot.fileName);await O.changeFilePromise(a,`${JSON.stringify(o,null,2)}\n`,{automaticNewlines:!0});let l=x.join(this.context.cwd,\"README.md\");if(O.existsSync(l)||await O.writeFilePromise(l,`# ${P.stringifyIdent(n.name)}\n`),!i||i.cwd===this.context.cwd){let u=x.join(this.context.cwd,xt.lockfile);O.existsSync(u)||await O.writeFilePromise(u,\"\");let f=[\".yarn/*\",\"!.yarn/patches\",\"!.yarn/plugins\",\"!.yarn/releases\",\"!.yarn/sdks\",\"!.yarn/versions\",\"\",\"# Swap the comments on the following lines if you don't wish to use zero-installs\",\"# Documentation here: https://yarnpkg.com/features/zero-installs\",\"!.yarn/cache\",\"#.pnp.*\"].map(T=>`${T}\n`).join(\"\"),h=x.join(this.context.cwd,\".gitignore\");O.existsSync(h)||await O.writeFilePromise(h,f);let C=[\"/.yarn/**            linguist-vendored\",\"/.yarn/releases/*    binary\",\"/.yarn/plugins/**/*  binary\",\"/.pnp.*              binary linguist-generated\"].map(T=>`${T}\n`).join(\"\"),y=x.join(this.context.cwd,\".gitattributes\");O.existsSync(y)||await O.writeFilePromise(y,C);let B={[\"*\"]:{endOfLine:\"lf\",insertFinalNewline:!0},[\"*.{js,json,yml}\"]:{charset:\"utf-8\",indentStyle:\"space\",indentSize:2}};(0,PAe.default)(B,t.get(\"initEditorConfig\"));let v=`root = true\n`;for(let[T,H]of Object.entries(B)){v+=`\n[${T}]\n`;for(let[j,$]of Object.entries(H)){let V=j.replace(/[A-Z]/g,W=>`_${W.toLowerCase()}`);v+=`${V} = ${$}\n`}}let D=x.join(this.context.cwd,\".editorconfig\");O.existsSync(D)||await O.writeFilePromise(D,v),O.existsSync(x.join(this.context.cwd,\".git\"))||await Cr.execvp(\"git\",[\"init\"],{cwd:this.context.cwd})}}};Uu.paths=[[\"init\"]],Uu.usage=ve.Usage({description:\"create a new package\",details:\"\\n      This command will setup a new package in your local directory.\\n\\n      If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\\n\\n      If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\\n\\n      If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\\n\\n      The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\\n    \",examples:[[\"Create a new package in the local directory\",\"yarn init\"],[\"Create a new private package in the local directory\",\"yarn init -p\"],[\"Create a new package and store the Yarn release inside\",\"yarn init -i=latest\"],[\"Create a new private package and defines it as a workspace root\",\"yarn init -w\"]]});var Q8e={configuration:{initScope:{description:\"Scope used when creating packages via the init command\",type:\"STRING\",default:null},initFields:{description:\"Additional fields to set when creating packages via the init command\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}},initEditorConfig:{description:\"Extra rules to define in the generator editorconfig\",type:\"MAP\",valueDefinition:{description:\"\",type:\"ANY\"}}},commands:[Uu]},S8e=Q8e;var NM={};ut(NM,{default:()=>x8e});var lA=\"portal:\",cA=\"link:\";var Wb=class{supports(e,t){return!!e.reference.startsWith(lA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:lA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot}}};var zb=class{supportsDescriptor(e,t){return!!e.range.startsWith(lA)}supportsLocator(e,t){return!!e.reference.startsWith(lA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(lA.length);return[P.makeLocator(e,`${lA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let i=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),n=await Ie.releaseAfterUseAsync(async()=>await ot.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return{...e,version:n.version||\"0.0.0\",languageName:n.languageName||t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin}}};var Vb=class{supports(e,t){return!!e.reference.startsWith(cA)}getLocalPath(e,t){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA});if(x.isAbsolute(n))return n;let s=t.fetcher.getLocalPath(i,t);return s===null?null:x.resolve(s,n)}async fetch(e,t){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:cA}),s=x.isAbsolute(n)?{packageFs:new qt(Me.root),prefixPath:Me.dot,localPath:Me.root}:await t.fetcher.fetch(i,t),o=s.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,s.localPath),localPath:Me.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new qt(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0,localPath:l}:{packageFs:new vo(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Me.dot,discardFromLookup:!0}}};var Xb=class{supportsDescriptor(e,t){return!!e.range.startsWith(cA)}supportsLocator(e,t){return!!e.reference.startsWith(cA)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(cA.length);return[P.makeLocator(e,`${cA}${K.toPortablePath(n)}`)]}async getSatisfying(e,t,i){return null}async resolve(e,t){return{...e,version:\"0.0.0\",languageName:t.project.configuration.get(\"defaultLanguageName\"),linkType:\"SOFT\",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};var v8e={fetchers:[Vb,Wb],resolvers:[Xb,zb]},x8e=v8e;var dO={};ut(dO,{default:()=>qze});var LM=(r,e)=>`${r}@${e}`,DAe=(r,e)=>{let t=e.indexOf(\"#\"),i=t>=0?e.substring(t+1):e;return LM(r,i)};var FAe=(r,e={})=>{let t=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||t>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:t,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=T8e(r,s),l=!1,c=0;do l=MM(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=eE(a);if(MM(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:\n${u}, next tree:\n${eE(a)}`);let f=NAe(a);if(f)throw new Error(`${f}, after hoisting finished:\n${eE(a)}`)}return s.debugLevel>=2&&console.log(eE(a)),L8e(a)},P8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())t.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),t},D8e=r=>{let e=r[r.length-1],t=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of r)u=g.dependencies.get(c.name),u&&t.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),t},kAe=(r,e)=>{if(e.decoupled)return e;let{name:t,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:C}=e,y={name:t,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(C)},B=y.dependencies.get(t);return B&&B.ident==y.ident&&y.dependencies.set(t,y),r.dependencies.set(y.name,y),y},k8e=(r,e)=>{let t=new Map([[r.name,[r.ident]]]);for(let n of r.dependencies.values())r.peerNames.has(n.name)||t.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf(\"@\",1)),o=n.substring(s.length+1);if(!r.peerNames.has(s)){let a=t.get(s);a||(a=[],t.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return t},TM=r=>{let e=new Set,t=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!r.peerNames.has(s)){let o=r.dependencies.get(s);o&&!e.has(o)&&t(o,n)}e.add(i)}};for(let i of r.dependencies.values())r.peerNames.has(i.name)||t(i);return e},MM=(r,e,t,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=M8e(o),l=k8e(o,a),c=r==o?new Map:n.fastLookupPossible?P8e(e):D8e(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([C,y])=>[C,y[0]])),p=new Map;do{let C=N8e(r,e,t,c,h,l,i,p,n);C.isGraphChanged&&(f=!0),C.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,B]of l)B.length>1&&!o.dependencies.has(y)&&(h.delete(y),B.shift(),h.set(y,B[0]),u=!0)}while(u);for(let C of o.dependencies.values())if(!o.peerNames.has(C.name)&&!t.has(C.locator)){t.add(C.locator);let y=MM(r,[...e,C],t,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),t.delete(C.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},R8e=r=>{for(let[e,t]of r.dependencies)if(!r.peerNames.has(e)&&t.ident!==r.ident)return!0;return!1},F8e=(r,e,t,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>ki(y)).join(\"\\u2192\")}`);let h=t[t.length-1],C=!(i.ident===h.ident);if(l&&!C&&(g=\"- self-reference\"),C&&(C=i.dependencyKind!==1,l&&!C&&(g=\"- workspace\")),C&&i.dependencyKind===2&&(C=!R8e(i),l&&!C&&(g=\"- external soft link with unhoisted dependencies\")),C&&(C=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!C&&(g=h.reasons.get(i.name))),C&&(C=!r.peerNames.has(i.name),l&&!C&&(g=`- cannot shadow peer: ${ki(r.originalDependencies.get(i.name).locator)} at ${u}`)),C){let y=!1,B=n.get(i.name);if(y=!B||B.ident===i.ident,l&&!y&&(g=`- filled by: ${ki(B.locator)} at ${u}`),y)for(let v=t.length-1;v>=1;v--){let T=t[v].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let H=a.get(h);H||(H=new Set,a.set(h,H)),H.add(i.name),l&&(g=`- filled by ${ki(T.locator)} at ${t.slice(0,v).map(j=>ki(j.locator)).join(\"\\u2192\")}`);break}}C=y}if(C&&(C=s.get(i.name)===i.ident,l&&!C&&(g=`- filled by: ${ki(o.get(i.name)[0])} at ${u}`)),C){let y=!0,B=new Set(i.peerNames);for(let v=t.length-1;v>=1;v--){let D=t[v];for(let T of B){if(D.peerNames.has(T)&&D.originalDependencies.has(T))continue;let H=D.dependencies.get(T);H&&r.dependencies.get(T)!==H&&(v===t.length-1?f.add(H):(f=null,y=!1,l&&(g=`- peer dependency ${ki(H.locator)} from parent ${ki(D.locator)} was not hoisted to ${u}`))),B.delete(T)}if(!y)break}C=y}if(C&&!c)for(let y of i.hoistedDependencies.values()){let B=n.get(y.name)||r.dependencies.get(y.name);if(!B||y.ident!==B.ident){C=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${ki(y.locator)}, available: ${ki(B==null?void 0:B.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:C?0:1,reason:g}},Zb=r=>`${r.name}@${r.locator}`,N8e=(r,e,t,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(B,v,D,T,H)=>{if(u.has(T))return;let j=[...v,Zb(T)],$=[...D,Zb(T)],V=new Map,W=new Map;for(let re of TM(T)){let M=F8e(c,t,[c,...B,T],re,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(W.set(re,M),M.isHoistable===2)for(let F of M.dependsOn){let ue=V.get(F.name)||new Set;ue.add(re.name),V.set(F.name,ue)}}let _=new Set,A=(re,M,F)=>{if(!_.has(re)){_.add(re),W.set(re,{isHoistable:1,reason:F});for(let ue of V.get(re.name)||[])A(T.dependencies.get(ue),M,l.debugLevel>=2?`- peer dependency ${ki(re.locator)} from parent ${ki(T.locator)} was not hoisted`:\"\")}};for(let[re,M]of W)M.isHoistable===1&&A(re,M,M.reason);let Ae=!1;for(let re of W.keys())if(!_.has(re)){f=!0;let M=o.get(T);M&&M.has(re.name)&&(g=!0),Ae=!0,T.dependencies.delete(re.name),T.hoistedDependencies.set(re.name,re),T.reasons.delete(re.name);let F=c.dependencies.get(re.name);if(l.debugLevel>=2){let ue=Array.from(v).concat([T.locator]).map(ke=>ki(ke)).join(\"\\u2192\"),pe=c.hoistedFrom.get(re.name);pe||(pe=[],c.hoistedFrom.set(re.name,pe)),pe.push(ue),T.hoistedTo.set(re.name,Array.from(e).map(ke=>ki(ke.locator)).join(\"\\u2192\"))}if(!F)c.ident!==re.ident&&(c.dependencies.set(re.name,re),H.add(re));else for(let ue of re.references)F.references.add(ue)}if(T.dependencyKind===2&&Ae&&(g=!0),l.check){let re=NAe(r);if(re)throw new Error(`${re}, after hoisting dependencies of ${[c,...B,T].map(M=>ki(M.locator)).join(\"\\u2192\")}:\n${eE(r)}`)}let ge=TM(T);for(let re of ge)if(_.has(re)){let M=W.get(re);if((n.get(re.name)===re.ident||!T.reasons.has(re.name))&&M.isHoistable!==0&&T.reasons.set(re.name,M.reason),!re.isHoistBorder&&$.indexOf(Zb(re))<0){u.add(T);let ue=kAe(T,re);h([...B,T],j,$,ue,C),u.delete(T)}}},p,C=new Set(TM(c)),y=Array.from(e).map(B=>Zb(B));do{p=C,C=new Set;for(let B of p){if(B.locator===c.locator||B.isHoistBorder)continue;let v=kAe(c,B);h([],Array.from(t),y,v,C)}}while(C.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},NAe=r=>{let e=[],t=new Set,i=new Set,n=(s,o,a)=>{if(t.has(s)||(t.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>ki(f.locator)).join(\"\\u2192\")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(\", \")}`:\"\"}`,C=`${h?` hoisted to ${h}`:\"\"}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${C}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${C} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(r,r.dependencies,r),e.join(`\n`)},T8e=(r,e)=>{let{identName:t,name:i,reference:n,peerNames:s}=r,o={name:i,references:new Set([n]),locator:LM(t,n),ident:DAe(t,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[r,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:C,peerNames:y,hoistPriority:B,dependencyKind:v}=c,D=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([C]),locator:LM(p,C),ident:DAe(p,C),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:D?D.has(h):!1,hoistPriority:B||0,dependencyKind:v||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=C=>{if(!h.has(C)){h.add(C),C.decoupled=!1;for(let y of C.dependencies.values())C.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of r.dependencies)l(c,o);return o},OM=r=>r.substring(0,r.indexOf(\"@\",1)),L8e=r=>{let e={name:r.name,identName:OM(r.locator),references:new Set(r.references),dependencies:new Set},t=new Set([r]),i=(n,s,o)=>{let a=t.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:OM(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){t.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);t.delete(n)}};for(let n of r.dependencies.values())i(n,r,e);return e},M8e=r=>{let e=new Map,t=new Set([r]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!t.has(a);if(n(a).dependents.add(o.ident),!l){t.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of r.dependencies.values())r.peerNames.has(o.name)||s(r,o);return e},ki=r=>{if(!r)return\"none\";let e=r.indexOf(\"@\",1),t=r.substring(0,e);t.endsWith(\"$wsroot$\")&&(t=`wh:${t.replace(\"$wsroot$\",\"\")}`);let i=r.substring(e+1);if(i===\"workspace:.\")return\".\";if(i){let n=(i.indexOf(\"#\")>0?i.split(\"#\")[1]:i).replace(\"npm:\",\"\");return i.startsWith(\"virtual\")&&(t=`v:${t}`),n.startsWith(\"workspace\")&&(t=`w:${t}`,n=\"\"),`${t}${n?`@${n}`:\"\"}`}else return`${t}`},RAe=5e4,eE=r=>{let e=0,t=(n,s,o=\"\")=>{if(e>RAe||s.has(n))return\"\";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l=\"\";s.add(n);for(let c=0;c<a.length;c++){let u=a[c];if(!n.peerNames.has(u.name)&&u!==n){let g=n.reasons.get(u.name),f=OM(u.locator);l+=`${o}${c<a.length-1?\"\\u251C\\u2500\":\"\\u2514\\u2500\"}${(s.has(u)?\">\":\"\")+(f!==u.name?`a:${u.name}:`:\"\")+ki(u.locator)+(g?` ${g}`:\"\")}\n`,l+=t(u,s,`${o}${c<a.length-1?\"\\u2502 \":\"  \"}`)}}return s.delete(n),l};return t(r,new Set)+(e>RAe?`\nTree is too large, part of the tree has been dunped\n`:\"\")};var tE=(i=>(i.WORKSPACES=\"workspaces\",i.DEPENDENCIES=\"dependencies\",i.NONE=\"none\",i))(tE||{}),TAe=\"node_modules\",Hu=\"$wsroot$\";var rE=(r,e)=>{let{packageTree:t,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=K8e(r,e),o=null;if(n.length===0){let a=FAe(t,{hoistingLimits:i});o=H8e(r,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},sa=r=>`${r.name}@${r.reference}`,UM=r=>{let e=new Map;for(let[t,i]of r.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(t)}for(let t of e.values())t.locations=t.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},LAe=(r,e)=>{let t=P.isVirtualLocator(r)?P.devirtualizeLocator(r):r,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(t,i)},KM=(r,e,t,i)=>{if(r.linkType!==\"SOFT\")return!1;let n=K.toPortablePath(t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation);return x.contains(i,n)===null},O8e=r=>{let e=r.getPackageInformation(r.topLevel);if(e===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");if(r.findPackageLocator(e.packageLocation)===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let i=K.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=r.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=sa(f);if(l.has(p))return;l.add(p);let C=r.getPackageInformation(f);if(C){let y=h?sa(h):\"\";if(sa(f)!==y&&C.linkType===\"SOFT\"&&!KM(C,f,r,i)){let B=MAe(C,f,r);(!a.get(B)||f.reference.startsWith(\"workspace:\"))&&a.set(B,f)}for(let[B,v]of C.packageDependencies)v!==null&&(C.packagePeers.has(B)||c(r.getLocator(B,v),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=r.getPackageInformation(f),C=K.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let B of C){let v=y.children.get(B);v||(v={children:new Map},y.children.set(B,v)),y=v}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=sa(h),C=n.get(p);C||(C=new Set,n.set(p,C)),C.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},K8e=(r,e)=>{let t=[],i=!1,n=new Map,s=O8e(r),o=r.getPackageInformation(r.topLevel);if(o===null)throw new Error(\"Assertion failed: Expected the top-level package to have been registered\");let a=r.findPackageLocator(o.packageLocation);if(a===null)throw new Error(\"Assertion failed: Expected the top-level package to have a physical locator\");let l=K.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:1},u=new Map,g=(h,p)=>`${sa(p)}:${h}`,f=(h,p,C,y,B,v,D,T)=>{var re,M;let H=g(h,C),j=u.get(H),$=!!j;!$&&C.name===a.name&&C.reference===a.reference&&(j=c,u.set(H,c));let V=KM(p,C,r,l);if(!j){let F=0;V?F=2:p.linkType===\"SOFT\"&&C.name.endsWith(Hu)&&(F=1),j={name:h,identName:C.name,reference:C.reference,dependencies:new Set,peerNames:F===1?new Set:p.packagePeers,dependencyKind:F},u.set(H,j)}let W;if(V?W=2:B.linkType===\"SOFT\"?W=1:W=0,j.hoistPriority=Math.max(j.hoistPriority||0,W),T&&!V){let F=sa({name:y.identName,reference:y.reference}),ue=n.get(F)||new Set;n.set(F,ue),ue.add(j.name)}let _=new Map(p.packageDependencies);if(e.project){let F=e.project.workspacesByCwd.get(K.toPortablePath(p.packageLocation.slice(0,-1)));if(F){let ue=new Set([...Array.from(F.manifest.peerDependencies.values(),pe=>P.stringifyIdent(pe)),...Array.from(F.manifest.peerDependenciesMeta.keys())]);for(let pe of ue)_.has(pe)||(_.set(pe,v.get(pe)||null),j.peerNames.add(pe))}}let A=sa({name:C.name.replace(Hu,\"\"),reference:C.reference}),Ae=s.get(A);if(Ae)for(let F of Ae)_.set(`${F.name}${Hu}`,F.reference);(p!==B||p.linkType!==\"SOFT\"||!V&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(D)))&&y.dependencies.add(j);let ge=C!==a&&p.linkType===\"SOFT\"&&!C.name.endsWith(Hu)&&!V;if(!$&&!ge){let F=new Map;for(let[ue,pe]of _)if(pe!==null){let ke=r.getLocator(ue,pe),Fe=r.getLocator(ue.replace(Hu,\"\"),pe),Ne=r.getPackageInformation(Fe);if(Ne===null)throw new Error(\"Assertion failed: Expected the package to have been registered\");let oe=KM(Ne,ke,r,l);if(e.validateExternalSoftLinks&&e.project&&oe){Ne.packageDependencies.size>0&&(i=!0);for(let[qe,ne]of Ne.packageDependencies)if(ne!==null){let Y=P.parseLocator(Array.isArray(ne)?`${ne[0]}@${ne[1]}`:`${qe}@${ne}`);if(sa(Y)!==sa(ke)){let he=_.get(qe);if(he){let ie=P.parseLocator(Array.isArray(he)?`${he[0]}@${he[1]}`:`${qe}@${he}`);LAe(ie,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ie)}`})}else{let ie=F.get(qe);if(ie){let de=ie.target,_e=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${qe}@${de}`);LAe(_e,Y)||t.push({messageName:71,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(ke.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${C.name}@${C.reference}`))} dependency ${P.prettyLocator(e.project.configuration,Y)} conflicts with dependency ${P.prettyLocator(e.project.configuration,_e)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ie.portal.name))}`})}else F.set(qe,{target:Y.reference,portal:ke})}}}}let le=(re=e.hoistingLimitsByCwd)==null?void 0:re.get(D),Be=oe?D:x.relative(l,K.toPortablePath(Ne.packageLocation))||Me.dot,fe=(M=e.hoistingLimitsByCwd)==null?void 0:M.get(Be);f(ue,Ne,ke,j,p,_,Be,le===\"dependencies\"||fe===\"dependencies\"||fe===\"workspaces\")}}};return f(a.name,o,a,c,o,o.packageDependencies,Me.dot,!1),{packageTree:c,hoistingLimits:n,errors:t,preserveSymlinksRequired:i}};function MAe(r,e,t){let i=t.resolveVirtual&&e.reference&&e.reference.startsWith(\"virtual:\")?t.resolveVirtual(r.packageLocation):r.packageLocation;return K.toPortablePath(i||r.packageLocation)}function U8e(r,e,t){let i=e.getLocator(r.name.replace(Hu,\"\"),r.reference),n=e.getPackageInformation(i);if(n===null)throw new Error(\"Assertion failed: Expected the package to be registered\");let s,o;return t.pnpifyFs?(o=K.toPortablePath(n.packageLocation),s=\"SOFT\"):(o=MAe(n,r,e),s=n.linkType),{linkType:s,target:o}}var H8e=(r,e,t)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=U8e(u,r,t);return{locator:sa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split(\"/\");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(o.has(u))return;o.add(u);let h=Array.from(u.references).sort().join(\"#\");for(let p of u.dependencies){let C=Array.from(p.references).sort().join(\"#\");if(p.identName===u.identName&&C===h)continue;let y=Array.from(p.references).sort(),B={name:p.identName,reference:y[0]},{name:v,scope:D}=s(p.name),T=D?[D,v]:[v],H=x.join(g,TAe),j=x.join(H,...T),$=`${f}/${B.name}`,V=n(B,f,y.slice(1)),W=!1;if(V.linkType===\"SOFT\"&&t.project){let A=t.project.workspacesByCwd.get(V.target.slice(0,-1));W=!!(A&&!A.manifest.name)}let _=V.linkType===\"SOFT\"&&j.startsWith(V.target);if(!p.name.endsWith(Hu)&&!W&&!_){let A=i.get(j);if(A){if(A.dirList)throw new Error(`Assertion failed: ${j} cannot merge dir node with leaf node`);{let M=P.parseLocator(A.locator),F=P.parseLocator(V.locator);if(A.linkType!==V.linkType)throw new Error(`Assertion failed: ${j} cannot merge nodes with different link types ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/${P.stringifyLocator(F)}`);if(M.identHash!==F.identHash)throw new Error(`Assertion failed: ${j} cannot merge nodes with different idents ${A.nodePath}/${P.stringifyLocator(M)} and ${f}/s${P.stringifyLocator(F)}`);V.aliases=[...V.aliases,...A.aliases,P.parseLocator(A.locator).reference]}}i.set(j,V);let Ae=j.split(\"/\"),ge=Ae.indexOf(TAe),re=Ae.length-1;for(;ge>=0&&re>ge;){let M=K.toPortablePath(Ae.slice(0,re).join(x.sep)),F=Jr(Ae[re]),ue=i.get(M);if(!ue)i.set(M,{dirList:new Set([F])});else if(ue.dirList){if(ue.dirList.has(F))break;ue.dirList.add(F)}re--}}a(p,V.linkType===\"SOFT\"?V.target:j,$)}},l=n({name:e.name,reference:Array.from(e.references)[0]},\"\",[]),c=l.target;return i.set(c,l),a(e,c,\"\"),i};var sO={};ut(sO,{PnpInstaller:()=>Yu,PnpLinker:()=>wl,default:()=>mze,getPnpPath:()=>Bl,jsInstallUtils:()=>Co,pnpUtils:()=>hE,quotePathIfNeeded:()=>Sle});var ble=Pe(Xr()),Qle=J(\"url\");var OAe={[\"DEFAULT\"]:{collapsed:!1,next:{[\"*\"]:\"DEFAULT\"}},[\"TOP_LEVEL\"]:{collapsed:!1,next:{fallbackExclusionList:\"FALLBACK_EXCLUSION_LIST\",packageRegistryData:\"PACKAGE_REGISTRY_DATA\",[\"*\"]:\"DEFAULT\"}},[\"FALLBACK_EXCLUSION_LIST\"]:{collapsed:!1,next:{[\"*\"]:\"FALLBACK_EXCLUSION_ENTRIES\"}},[\"FALLBACK_EXCLUSION_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"FALLBACK_EXCLUSION_DATA\"}},[\"FALLBACK_EXCLUSION_DATA\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_REGISTRY_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_REGISTRY_ENTRIES\"}},[\"PACKAGE_REGISTRY_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_STORE_DATA\"}},[\"PACKAGE_STORE_DATA\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_STORE_ENTRIES\"}},[\"PACKAGE_STORE_ENTRIES\"]:{collapsed:!0,next:{[\"*\"]:\"PACKAGE_INFORMATION_DATA\"}},[\"PACKAGE_INFORMATION_DATA\"]:{collapsed:!1,next:{packageDependencies:\"PACKAGE_DEPENDENCIES\",[\"*\"]:\"DEFAULT\"}},[\"PACKAGE_DEPENDENCIES\"]:{collapsed:!1,next:{[\"*\"]:\"PACKAGE_DEPENDENCY\"}},[\"PACKAGE_DEPENDENCY\"]:{collapsed:!0,next:{[\"*\"]:\"DEFAULT\"}}};function G8e(r,e,t){let i=\"\";i+=\"[\";for(let n=0,s=r.length;n<s;++n)i+=_b(String(n),r[n],e,t).replace(/^ +/g,\"\"),n+1<s&&(i+=\", \");return i+=\"]\",i}function Y8e(r,e,t){let i=`${t}  `,n=\"\";n+=t,n+=`[\n`;for(let s=0,o=r.length;s<o;++s)n+=i+_b(String(s),r[s],e,i).replace(/^ +/,\"\"),s+1<o&&(n+=\",\"),n+=`\n`;return n+=t,n+=\"]\",n}function j8e(r,e,t){let i=Object.keys(r),n=\"\";n+=\"{\";for(let s=0,o=i.length,a=0;s<o;++s){let l=i[s],c=r[l];typeof c>\"u\"||(a!==0&&(n+=\", \"),n+=JSON.stringify(l),n+=\": \",n+=_b(l,c,e,t).replace(/^ +/g,\"\"),a+=1)}return n+=\"}\",n}function q8e(r,e,t){let i=Object.keys(r),n=`${t}  `,s=\"\";s+=t,s+=`{\n`;let o=0;for(let a=0,l=i.length;a<l;++a){let c=i[a],u=r[c];typeof u>\"u\"||(o!==0&&(s+=\",\",s+=`\n`),s+=n,s+=JSON.stringify(c),s+=\": \",s+=_b(c,u,e,n).replace(/^ +/g,\"\"),o+=1)}return o!==0&&(s+=`\n`),s+=t,s+=\"}\",s}function _b(r,e,t,i){let{next:n}=OAe[t],s=n[r]||n[\"*\"];return KAe(e,s,i)}function KAe(r,e,t){let{collapsed:i}=OAe[e];return Array.isArray(r)?i?G8e(r,e,t):Y8e(r,e,t):typeof r==\"object\"&&r!==null?i?j8e(r,e,t):q8e(r,e,t):JSON.stringify(r)}function UAe(r){return KAe(r,\"TOP_LEVEL\",\"\")}function iE(r,e){let t=Array.from(r);Array.isArray(e)||(e=[e]);let i=[];for(let s of e)i.push(t.map(o=>s(o)));let n=t.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]<a[o]?-1:a[s]>a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>t[s])}function J8e(r){let e=new Map,t=iE(r.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of t){let s=e.get(i);typeof s>\"u\"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function W8e(r){return iE(r.fallbackPool||[],([e])=>e)}function z8e(r){let e=[];for(let[t,i]of iE(r.packageRegistry,([n])=>n===null?\"0\":`1${n}`)){let n=[];e.push([t,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of iE(i,([g])=>g===null?\"0\":`1${g}`)){let g=[];t!==null&&s!==null&&!a.has(t)&&g.push([t,s]);for(let[p,C]of iE(a.entries(),([y])=>y))g.push([p,C]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function nE(r){return{__info:[\"This file is automatically generated. Do not touch it, or risk\",\"your modifications being lost. We also recommend you not to read\",\"it either without using the @yarnpkg/pnp package, as the data layout\",\"is entirely unspecified and WILL change from a version to another.\"],dependencyTreeRoots:r.dependencyTreeRoots,enableTopLevelFallback:r.enableTopLevelFallback||!1,ignorePatternData:r.ignorePattern||null,fallbackExclusionList:J8e(r),fallbackPool:W8e(r),packageRegistryData:z8e(r)}}var YAe=Pe(GAe());function jAe(r,e){return[r?`${r}\n`:\"\",`/* eslint-disable */\n`,`\"use strict\";\n`,`\n`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n`,e.replace(/^/gm,\"  \"),`}\n`,`\n`,(0,YAe.default)()].join(\"\")}function V8e(r){return JSON.stringify(r,null,2)}function X8e(r){return`'${r.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(/\\n/g,`\\\\\n`)}'`}function Z8e(r){return[`return hydrateRuntimeState(JSON.parse(${X8e(UAe(r))}), {basePath: basePath || __dirname});\n`].join(\"\")}function _8e(r){return[`var path = require('path');\n`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(r)});\n`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n`].join(\"\")}function qAe(r){let e=nE(r),t=Z8e(e);return jAe(r.shebang,t)}function JAe(r){let e=nE(r),t=_8e(r.dataLocation),i=jAe(r.shebang,t);return{dataFile:V8e(e),loaderFile:i}}var dle=J(\"fs\");var Cle=J(\"util\");function GM(r,{basePath:e}){let t=K.toPortablePath(e),i=x.resolve(t),n=r.ignorePatternData!==null?new RegExp(r.ignorePatternData):null,s=new Map,o=new Map(r.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var D;if(g===null!=(h===null))throw new Error(\"Assertion failed: The name and reference should be null, or neither should\");let C=(D=p.discardFromLookup)!=null?D:!1,y={name:g,reference:h},B=s.get(p.packageLocation);B?(B.discardFromLookup=B.discardFromLookup&&C,C||(B.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:C});let v=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:C,get packageLocation(){return v||(v=x.join(i,p.packageLocation))}}]}))])),a=new Map(r.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(r.fallbackPool),c=r.dependencyTreeRoots,u=r.enableTopLevelFallback;return{basePath:t,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var gE=J(\"module\"),uA=J(\"url\"),_M=J(\"util\");var qi=J(\"url\");var XAe=Pe(J(\"assert\"));var YM=Array.isArray,sE=JSON.stringify,oE=Object.getOwnPropertyNames,Gu=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),jM=(r,e)=>RegExp.prototype.exec.call(r,e),qM=(r,...e)=>RegExp.prototype[Symbol.replace].apply(r,e),Il=(r,...e)=>String.prototype.endsWith.apply(r,e),JM=(r,...e)=>String.prototype.includes.apply(r,e),WM=(r,...e)=>String.prototype.lastIndexOf.apply(r,e),aE=(r,...e)=>String.prototype.indexOf.apply(r,e),WAe=(r,...e)=>String.prototype.replace.apply(r,e),yl=(r,...e)=>String.prototype.slice.apply(r,e),oa=(r,...e)=>String.prototype.startsWith.apply(r,e),zAe=Map,VAe=JSON.parse;function AE(r,e,t){return class extends t{constructor(...i){super(e(...i)),this.code=r,this.name=`${t.name} [${r}]`}}}var ZAe=AE(\"ERR_PACKAGE_IMPORT_NOT_DEFINED\",(r,e,t)=>`Package import specifier \"${r}\" is not defined${e?` in package ${e}package.json`:\"\"} imported from ${t}`,TypeError),zM=AE(\"ERR_INVALID_MODULE_SPECIFIER\",(r,e,t=void 0)=>`Invalid module \"${r}\" ${e}${t?` imported from ${t}`:\"\"}`,TypeError),_Ae=AE(\"ERR_INVALID_PACKAGE_TARGET\",(r,e,t,i=!1,n=void 0)=>{let s=typeof t==\"string\"&&!i&&t.length&&!oa(t,\"./\");return e===\".\"?((0,XAe.default)(i===!1),`Invalid \"exports\" main target ${sE(t)} defined in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`):`Invalid \"${i?\"imports\":\"exports\"}\" target ${sE(t)} defined for '${e}' in the package config ${r}package.json${n?` imported from ${n}`:\"\"}${s?'; targets must start with \"./\"':\"\"}`},Error),lE=AE(\"ERR_INVALID_PACKAGE_CONFIG\",(r,e,t)=>`Invalid package config ${r}${e?` while importing ${e}`:\"\"}${t?`. ${t}`:\"\"}`,Error),$Ae=AE(\"ERR_PACKAGE_PATH_NOT_EXPORTED\",(r,e,t=void 0)=>e===\".\"?`No \"exports\" main defined in ${r}package.json${t?` imported from ${t}`:\"\"}`:`Package subpath '${e}' is not defined by \"exports\" in ${r}package.json${t?` imported from ${t}`:\"\"}`,Error);var eQ=J(\"url\");function ele(r,e){let t=Object.create(null);for(let i=0;i<e.length;i++){let n=e[i];Gu(r,n)&&(t[n]=r[n])}return t}var $b=new zAe;function $8e(r,e,t,i){let n=$b.get(r);if(n!==void 0)return n;let s=i(r);if(s===void 0){let h={pjsonPath:r,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(r,h),h}let o;try{o=VAe(s)}catch(h){throw new lE(r,(t?`\"${e}\" from `:\"\")+(0,eQ.fileURLToPath)(t||e),h.message)}let{imports:a,main:l,name:c,type:u}=ele(o,[\"imports\",\"main\",\"name\",\"type\"]),g=Gu(o,\"exports\")?o.exports:void 0;(typeof a!=\"object\"||a===null)&&(a=void 0),typeof l!=\"string\"&&(l=void 0),typeof c!=\"string\"&&(c=void 0),u!==\"module\"&&u!==\"commonjs\"&&(u=\"none\");let f={pjsonPath:r,exists:!0,main:l,name:c,type:u,exports:g,imports:a};return $b.set(r,f),f}function tle(r,e){let t=new URL(\"./package.json\",r);for(;;){let s=t.pathname;if(Il(s,\"node_modules/package.json\"))break;let o=$8e((0,eQ.fileURLToPath)(t),r,void 0,e);if(o.exists)return o;let a=t;if(t=new URL(\"../package.json\",t),t.pathname===a.pathname)break}let i=(0,eQ.fileURLToPath)(t),n={pjsonPath:i,exists:!1,main:void 0,name:void 0,type:\"none\",exports:void 0,imports:void 0};return $b.set(i,n),n}function eze(r,e,t){throw new ZAe(r,e&&(0,qi.fileURLToPath)(new URL(\".\",e)),(0,qi.fileURLToPath)(t))}function tze(r,e,t,i){let n=`request is not a valid subpath for the \"${t?\"imports\":\"exports\"}\" resolution of ${(0,qi.fileURLToPath)(e)}`;throw new zM(r,n,i&&(0,qi.fileURLToPath)(i))}function cE(r,e,t,i,n){throw typeof e==\"object\"&&e!==null?e=sE(e,null,\"\"):e=`${e}`,new _Ae((0,qi.fileURLToPath)(new URL(\".\",t)),r,e,i,n&&(0,qi.fileURLToPath)(n))}var rle=/(^|\\\\|\\/)((\\.|%2e)(\\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\\\|\\/|$)/i,ile=/\\*/g;function rze(r,e,t,i,n,s,o,a){if(e!==\"\"&&!s&&r[r.length-1]!==\"/\"&&cE(t,r,i,o,n),!oa(r,\"./\")){if(o&&!oa(r,\"../\")&&!oa(r,\"/\")){let g=!1;try{new URL(r),g=!0}catch{}if(!g)return s?qM(ile,r,()=>e):r+e}cE(t,r,i,o,n)}jM(rle,yl(r,2))!==null&&cE(t,r,i,o,n);let l=new URL(r,i),c=l.pathname,u=new URL(\".\",i).pathname;if(oa(c,u)||cE(t,r,i,o,n),e===\"\")return l;if(jM(rle,e)!==null){let g=s?WAe(t,\"*\",()=>e):t+e;tze(g,i,o,n)}return s?new URL(qM(ile,l.href,()=>e)):new URL(e,l)}function ize(r){let e=+r;return`${e}`!==r?!1:e>=0&&e<4294967295}function ip(r,e,t,i,n,s,o,a){if(typeof e==\"string\")return rze(e,t,i,r,n,s,o,a);if(YM(e)){if(e.length===0)return null;let l;for(let c=0;c<e.length;c++){let u=e[c],g;try{g=ip(r,u,t,i,n,s,o,a)}catch(f){if(l=f,f.code===\"ERR_INVALID_PACKAGE_TARGET\")continue;throw f}if(g!==void 0){if(g===null){l=null;continue}return g}}if(l==null)return l;throw l}else if(typeof e==\"object\"&&e!==null){let l=oE(e);for(let c=0;c<l.length;c++){let u=l[c];if(ize(u))throw new lE((0,qi.fileURLToPath)(r),n,'\"exports\" cannot contain numeric property keys.')}for(let c=0;c<l.length;c++){let u=l[c];if(u===\"default\"||a.has(u)){let g=e[u],f=ip(r,g,t,i,n,s,o,a);if(f===void 0)continue;return f}}return}else if(e===null)return null;cE(i,e,r,o,n)}function sle(r,e){let t=aE(r,\"*\"),i=aE(e,\"*\"),n=t===-1?r.length:t+1,s=i===-1?e.length:i+1;return n>s?-1:s>n||t===-1?1:i===-1||r.length>e.length?-1:e.length>r.length?1:0}function nze(r,e,t){if(typeof r==\"string\"||YM(r))return!0;if(typeof r!=\"object\"||r===null)return!1;let i=oE(r),n=!1,s=0;for(let o=0;o<i.length;o++){let a=i[o],l=a===\"\"||a[0]!==\".\";if(s++===0)n=l;else if(n!==l)throw new lE((0,qi.fileURLToPath)(e),t,`\"exports\" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`)}return n}function VM(r,e,t){throw new $Ae((0,qi.fileURLToPath)(new URL(\".\",e)),r,t&&(0,qi.fileURLToPath)(t))}var nle=new Set;function sze(r,e,t){let i=(0,qi.fileURLToPath)(e);nle.has(i+\"|\"+r)||(nle.add(i+\"|\"+r),process.emitWarning(`Use of deprecated trailing slash pattern mapping \"${r}\" in the \"exports\" field module resolution of the package at ${i}${t?` imported from ${(0,qi.fileURLToPath)(t)}`:\"\"}. Mapping specifiers ending in \"/\" is no longer supported.`,\"DeprecationWarning\",\"DEP0155\"))}function ole({packageJSONUrl:r,packageSubpath:e,exports:t,base:i,conditions:n}){if(nze(t,r,i)&&(t={\".\":t}),Gu(t,e)&&!JM(e,\"*\")&&!Il(e,\"/\")){let l=t[e],c=ip(r,l,\"\",e,i,!1,!1,n);return c==null&&VM(e,r,i),c}let s=\"\",o,a=oE(t);for(let l=0;l<a.length;l++){let c=a[l],u=aE(c,\"*\");if(u!==-1&&oa(e,yl(c,0,u))){Il(e,\"/\")&&sze(e,r,i);let g=yl(c,u+1);e.length>=c.length&&Il(e,g)&&sle(s,c)===1&&WM(c,\"*\")===u&&(s=c,o=yl(e,u,e.length-g.length))}}if(s){let l=t[s],c=ip(r,l,o,s,i,!0,!1,n);return c==null&&VM(e,r,i),c}VM(e,r,i)}function ale({name:r,base:e,conditions:t,readFileSyncFn:i}){if(r===\"#\"||oa(r,\"#/\")||Il(r,\"/\")){let o=\"is not a valid internal imports specifier name\";throw new zM(r,o,(0,qi.fileURLToPath)(e))}let n,s=tle(e,i);if(s.exists){n=(0,qi.pathToFileURL)(s.pjsonPath);let o=s.imports;if(o)if(Gu(o,r)&&!JM(r,\"*\")){let a=ip(n,o[r],\"\",r,e,!1,!0,t);if(a!=null)return a}else{let a=\"\",l,c=oE(o);for(let u=0;u<c.length;u++){let g=c[u],f=aE(g,\"*\");if(f!==-1&&oa(r,yl(g,0,f))){let h=yl(g,f+1);r.length>=g.length&&Il(r,h)&&sle(a,g)===1&&WM(g,\"*\")===f&&(a=g,l=yl(r,f,r.length-h.length))}}if(a){let u=o[a],g=ip(n,u,l,a,e,!0,!0,t);if(g!=null)return g}}}eze(r,n,e)}var oze=new Set([\"BUILTIN_NODE_RESOLUTION_FAILED\",\"MISSING_DEPENDENCY\",\"MISSING_PEER_DEPENDENCY\",\"QUALIFIED_PATH_RESOLUTION_FAILED\",\"UNDECLARED_DEPENDENCY\"]);function ri(r,e,t={},i){i!=null||(i=oze.has(r)?\"MODULE_NOT_FOUND\":r);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...n,value:i},pnpCode:{...n,value:r},data:{...n,value:t}})}function po(r){return K.normalize(K.fromPortablePath(r))}var ule=Pe(lle());function gle(r){return aze(),ZM[r]}var ZM;function aze(){ZM||(ZM={\"--conditions\":[],...cle(Aze()),...cle(process.execArgv)})}function cle(r){return(0,ule.default)({\"--conditions\":[String],\"-C\":\"--conditions\"},{argv:r,permissive:!0})}function Aze(){let r=[],e=lze(process.env.NODE_OPTIONS||\"\",r);return r.length,e}function lze(r,e){let t=[],i=!1,n=!0;for(let s=0;s<r.length;++s){let o=r[s];if(o===\"\\\\\"&&i){if(s+1===r.length)return e.push(`invalid value for NODE_OPTIONS (invalid escape)\n`),t;o=r[++s]}else if(o===\" \"&&!i){n=!0;continue}else if(o==='\"'){i=!i;continue}n?(t.push(o),n=!1):t[t.length-1]+=o}return i&&e.push(`invalid value for NODE_OPTIONS (unterminated string)\n`),t}var hle=J(\"module\");var[Ji,aa]=process.versions.node.split(\".\").map(r=>parseInt(r,10)),aBt=Ji>16||Ji===16&&aa>=12,ABt=Ji>17||Ji===17&&aa>=5||Ji===16&&aa>=15,lBt=Ji>17||Ji===17&&aa>=1||Ji===16&&aa>14,fle=Ji>19||Ji===19&&aa>=2||Ji===18&&aa>=13,cBt=Ji>19||Ji===19&&aa>=3,uBt=Ji>18||Ji===18&&aa>=1||Ji===16&&aa>=17;var cze=new Set(hle.Module.builtinModules||Object.keys(process.binding(\"natives\"))),tQ=r=>r.startsWith(\"node:\")||cze.has(r);function ple(r){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(r=r.map(e=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(e)))),fle)process.send({\"watch:require\":r});else for(let e of r)process.send({\"watch:require\":e})}function $M(r,e){let t=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\\\/]|\\\\\\\\|\\.{0,2}(?:\\/|$))((?:node:)?(?:@[^/]+\\/)?[^/]+)\\/*(.*|)$/,s=/^(\\/|\\.{1,2}(\\/|$))/,o=/\\/$/,a=/^\\.{0,2}\\//,l={name:null,reference:null},c=[],u=new Set;if(r.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let oe of[\"react-scripts\",\"gatsby\"]){let le=r.packageRegistry.get(oe);if(le)for(let Be of le.keys()){if(Be===null)throw new Error(\"Assertion failed: This reference shouldn't be null\");c.push({name:oe,reference:Be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=r;function p(oe,le){return{fn:oe,args:le,error:null,result:null}}function C(oe){var qe,ne,Y,he,ie,de;let le=(Y=(ne=(qe=process.stderr)==null?void 0:qe.hasColors)==null?void 0:ne.call(qe))!=null?Y:process.stdout.isTTY,Be=(_e,Pt)=>`\\x1B[${_e}m${Pt}\\x1B[0m`,fe=oe.error;console.error(fe?Be(\"31;1\",`\\u2716 ${(he=oe.error)==null?void 0:he.message.replace(/\\n.*/s,\"\")}`):Be(\"33;1\",\"\\u203C Resolution\")),oe.args.length>0&&console.error();for(let _e of oe.args)console.error(`  ${Be(\"37;1\",\"In \\u2190\")} ${(0,_M.inspect)(_e,{colors:le,compact:!0})}`);oe.result&&(console.error(),console.error(`  ${Be(\"37;1\",\"Out \\u2192\")} ${(0,_M.inspect)(oe.result,{colors:le,compact:!0})}`));let ae=(de=(ie=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:ie.slice(2))!=null?de:[];if(ae.length>0){console.error();for(let _e of ae)console.error(`  ${Be(\"38;5;244\",_e)}`)}console.error()}function y(oe,le){if(e.allowDebug===!1)return le;if(Number.isFinite(i)){if(i>=2)return(...Be)=>{let fe=p(oe,Be);try{return fe.result=le(...Be)}catch(ae){throw fe.error=ae}finally{C(fe)}};if(i>=1)return(...Be)=>{try{return le(...Be)}catch(fe){let ae=p(oe,Be);throw ae.error=fe,C(ae),fe}}}return le}function B(oe){let le=A(oe);if(!le)throw ri(\"INTERNAL\",\"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)\");return le}function v(oe){if(oe.name===null)return!0;for(let le of r.dependencyTreeRoots)if(le.name===oe.name&&le.reference===oe.reference)return!0;return!1}let D=new Set([\"node\",\"require\",...gle(\"--conditions\")]);function T(oe,le=D,Be){let fe=re(x.join(oe,\"internal.js\"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(fe===null)throw ri(\"INTERNAL\",`The locator that owns the \"${oe}\" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:ae}=B(fe),qe=x.join(ae,xt.manifest);if(!e.fakeFs.existsSync(qe))return null;let ne=JSON.parse(e.fakeFs.readFileSync(qe,\"utf8\"));if(ne.exports==null)return null;let Y=x.contains(ae,oe);if(Y===null)throw ri(\"INTERNAL\",\"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)\");Y!==\".\"&&!a.test(Y)&&(Y=`./${Y}`);try{let he=ole({packageJSONUrl:(0,uA.pathToFileURL)(K.fromPortablePath(qe)),packageSubpath:Y,exports:ne.exports,base:Be?(0,uA.pathToFileURL)(K.fromPortablePath(Be)):null,conditions:le});return K.toPortablePath((0,uA.fileURLToPath)(he))}catch(he){throw ri(\"EXPORTS_RESOLUTION_FAILED\",he.message,{unqualifiedPath:po(oe),locator:fe,pkgJson:ne,subpath:po(Y),conditions:le},he.code)}}function H(oe,le,{extensions:Be}){let fe;try{le.push(oe),fe=e.fakeFs.statSync(oe)}catch{}if(fe&&!fe.isDirectory())return e.fakeFs.realpathSync(oe);if(fe&&fe.isDirectory()){let ae;try{ae=JSON.parse(e.fakeFs.readFileSync(x.join(oe,xt.manifest),\"utf8\"))}catch{}let qe;if(ae&&ae.main&&(qe=x.resolve(oe,ae.main)),qe&&qe!==oe){let ne=H(qe,le,{extensions:Be});if(ne!==null)return ne}}for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=`${oe}${Be[ae]}`;if(le.push(ne),e.fakeFs.existsSync(ne))return ne}if(fe&&fe.isDirectory())for(let ae=0,qe=Be.length;ae<qe;ae++){let ne=x.format({dir:oe,name:\"index\",ext:Be[ae]});if(le.push(ne),e.fakeFs.existsSync(ne))return ne}return null}function j(oe){let le=new gE.Module(oe,null);return le.filename=oe,le.paths=gE.Module._nodeModulePaths(oe),le}function $(oe,le){return le.endsWith(\"/\")&&(le=x.join(le,\"internal.js\")),gE.Module._resolveFilename(K.fromPortablePath(oe),j(K.fromPortablePath(le)),!1,{plugnplay:!1})}function V(oe){if(g===null)return!1;let le=x.contains(r.basePath,oe);return le===null?!1:!!g.test(le.replace(/\\/$/,\"\"))}let W={std:3,resolveVirtual:1,getAllLocators:1},_=l;function A({name:oe,reference:le}){let Be=f.get(oe);if(!Be)return null;let fe=Be.get(le);return fe||null}function Ae({name:oe,reference:le}){let Be=[];for(let[fe,ae]of f)if(fe!==null)for(let[qe,ne]of ae)qe===null||ne.packageDependencies.get(oe)!==le||fe===oe&&qe===le||Be.push({name:fe,reference:qe});return Be}function ge(oe,le){let Be=new Map,fe=new Set,ae=ne=>{let Y=JSON.stringify(ne.name);if(fe.has(Y))return;fe.add(Y);let he=Ae(ne);for(let ie of he)if(B(ie).packagePeers.has(oe))ae(ie);else{let _e=Be.get(ie.name);typeof _e>\"u\"&&Be.set(ie.name,_e=new Set),_e.add(ie.reference)}};ae(le);let qe=[];for(let ne of[...Be.keys()].sort())for(let Y of[...Be.get(ne)].sort())qe.push({name:ne,reference:Y});return qe}function re(oe,{resolveIgnored:le=!1,includeDiscardFromLookup:Be=!1}={}){if(V(oe)&&!le)return null;let fe=x.relative(r.basePath,oe);fe.match(s)||(fe=`./${fe}`),fe.endsWith(\"/\")||(fe=`${fe}/`);do{let ae=h.get(fe);if(typeof ae>\"u\"||ae.discardFromLookup&&!Be){fe=fe.substring(0,fe.lastIndexOf(\"/\",fe.length-2)+1);continue}return ae.locator}while(fe!==\"\");return null}function M(oe){try{return e.fakeFs.readFileSync(K.toPortablePath(oe),\"utf8\")}catch(le){if(le.code===\"ENOENT\")return;throw le}}function F(oe,le,{considerBuiltins:Be=!0}={}){if(oe.startsWith(\"#\"))throw new Error(\"resolveToUnqualified can not handle private import mappings\");if(oe===\"pnpapi\")return K.toPortablePath(e.pnpapiResolution);if(Be&&tQ(oe))return null;let fe=po(oe),ae=le&&po(le);if(le&&V(le)&&(!x.isAbsolute(oe)||re(oe)===null)){let Y=$(oe,le);if(Y===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(Y)}let qe,ne=oe.match(n);if(ne){if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let[,Y,he]=ne,ie=re(le);if(!ie){let hr=$(oe,le);if(hr===!1)throw ri(\"BUILTIN_NODE_RESOLUTION_FAILED\",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: \"${fe}\"\nRequired by: ${ae}\n`,{request:fe,issuer:ae});return K.toPortablePath(hr)}let _e=B(ie).packageDependencies.get(Y),Pt=null;if(_e==null&&ie.name!==null){let hr=r.fallbackExclusionList.get(ie.name);if(!hr||!hr.has(ie.reference)){for(let ni=0,Ks=c.length;ni<Ks;++ni){let Ii=B(c[ni]).packageDependencies.get(Y);if(Ii!=null){t?Pt=Ii:_e=Ii;break}}if(r.enableTopLevelFallback&&_e==null&&Pt===null){let ni=r.fallbackPool.get(Y);ni!=null&&(Pt=ni)}}}let It=null;if(_e===null)if(v(ie))It=ri(\"MISSING_PEER_DEPENDENCY\",`Your application tried to access ${Y} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y});else{let hr=ge(Y,ie);hr.every(fi=>v(fi))?It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr}):It=ri(\"MISSING_PEER_DEPENDENCY\",`${ie.name} tried to access ${Y} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n\n${hr.map(fi=>`Ancestor breaking the chain: ${fi.name}@${fi.reference}\n`).join(\"\")}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y,brokenAncestors:hr})}else _e===void 0&&(!Be&&tQ(oe)?v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Y} isn't otherwise declared in ${ie.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}):v(ie)?It=ri(\"UNDECLARED_DEPENDENCY\",`Your application tried to access ${Y}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ae}\n`,{request:fe,issuer:ae,dependencyName:Y}):It=ri(\"UNDECLARED_DEPENDENCY\",`${ie.name} tried to access ${Y}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${Y}${Y!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,issuerLocator:Object.assign({},ie),dependencyName:Y}));if(_e==null){if(Pt===null||It===null)throw It||new Error(\"Assertion failed: Expected an error to have been set\");_e=Pt;let hr=It.message.replace(/\\n.*/g,\"\");It.message=hr,!u.has(hr)&&i!==0&&(u.add(hr),process.emitWarning(It))}let Mr=Array.isArray(_e)?{name:_e[0],reference:_e[1]}:{name:Y,reference:_e},ii=B(Mr);if(!ii.packageLocation)throw ri(\"MISSING_DEPENDENCY\",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${Mr.name}@${Mr.reference}${Mr.name!==fe?` (via \"${fe}\")`:\"\"}\nRequired by: ${ie.name}@${ie.reference} (via ${ae})\n`,{request:fe,issuer:ae,dependencyLocator:Object.assign({},Mr)});let gi=ii.packageLocation;he?qe=x.join(gi,he):qe=gi}else if(x.isAbsolute(oe))qe=x.normalize(oe);else{if(!le)throw ri(\"API_ERROR\",\"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute\",{request:fe,issuer:ae});let Y=x.resolve(le);le.match(o)?qe=x.normalize(x.join(Y,oe)):qe=x.normalize(x.join(x.dirname(Y),oe))}return x.normalize(qe)}function ue(oe,le,Be=D,fe){if(s.test(oe))return le;let ae=T(le,Be,fe);return ae?x.normalize(ae):le}function pe(oe,{extensions:le=Object.keys(gE.Module._extensions)}={}){var ae,qe;let Be=[],fe=H(oe,Be,{extensions:le});if(fe)return x.normalize(fe);{ple(Be.map(he=>K.fromPortablePath(he)));let ne=po(oe),Y=re(oe);if(Y){let{packageLocation:he}=B(Y),ie=!0;try{e.fakeFs.accessSync(he)}catch(de){if((de==null?void 0:de.code)===\"ENOENT\")ie=!1;else{let _e=((qe=(ae=de==null?void 0:de.message)!=null?ae:de)!=null?qe:\"empty exception thrown\").replace(/^[A-Z]/,Pt=>Pt.toLowerCase());throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Required package exists but could not be accessed (${_e}).\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}if(!ie){let de=he.includes(\"/unplugged/\")?\"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).\":\"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.\";throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`${de}\n\nMissing package: ${Y.name}@${Y.reference}\nExpected package location: ${po(he)}\n`,{unqualifiedPath:ne,extensions:le})}}throw ri(\"QUALIFIED_PATH_RESOLUTION_FAILED\",`Qualified path resolution failed: we looked for the following paths, but none could be accessed.\n\nSource path: ${ne}\n${Be.map(he=>`Not found: ${po(he)}\n`).join(\"\")}`,{unqualifiedPath:ne,extensions:le})}}function ke(oe,le,Be){var ae;if(!le)throw new Error(\"Assertion failed: An issuer is required to resolve private import mappings\");let fe=ale({name:oe,base:(0,uA.pathToFileURL)(K.fromPortablePath(le)),conditions:(ae=Be.conditions)!=null?ae:D,readFileSyncFn:M});if(fe instanceof uA.URL)return pe(K.toPortablePath((0,uA.fileURLToPath)(fe)),{extensions:Be.extensions});if(fe.startsWith(\"#\"))throw new Error(\"Mapping from one private import to another isn't allowed\");return Fe(fe,le,Be)}function Fe(oe,le,Be={}){try{if(oe.startsWith(\"#\"))return ke(oe,le,Be);let{considerBuiltins:fe,extensions:ae,conditions:qe}=Be,ne=F(oe,le,{considerBuiltins:fe});if(oe===\"pnpapi\")return ne;if(ne===null)return null;let Y=()=>le!==null?V(le):!1,he=(!fe||!tQ(oe))&&!Y()?ue(oe,ne,qe,le):ne;return pe(he,{extensions:ae})}catch(fe){throw Object.prototype.hasOwnProperty.call(fe,\"pnpCode\")&&Object.assign(fe.data,{request:po(oe),issuer:le&&po(le)}),fe}}function Ne(oe){let le=x.normalize(oe),Be=Br.resolveVirtual(le);return Be!==le?Be:null}return{VERSIONS:W,topLevel:_,getLocator:(oe,le)=>Array.isArray(le)?{name:le[0],reference:le[1]}:{name:oe,reference:le},getDependencyTreeRoots:()=>[...r.dependencyTreeRoots],getAllLocators(){let oe=[];for(let[le,Be]of f)for(let fe of Be.keys())le!==null&&fe!==null&&oe.push({name:le,reference:fe});return oe},getPackageInformation:oe=>{let le=A(oe);if(le===null)return null;let Be=K.fromPortablePath(le.packageLocation);return{...le,packageLocation:Be}},findPackageLocator:oe=>re(K.toPortablePath(oe)),resolveToUnqualified:y(\"resolveToUnqualified\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=F(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveUnqualified:y(\"resolveUnqualified\",(oe,le)=>K.fromPortablePath(pe(K.toPortablePath(oe),le))),resolveRequest:y(\"resolveRequest\",(oe,le,Be)=>{let fe=le!==null?K.toPortablePath(le):null,ae=Fe(K.toPortablePath(oe),fe,Be);return ae===null?null:K.fromPortablePath(ae)}),resolveVirtual:y(\"resolveVirtual\",oe=>{let le=Ne(K.toPortablePath(oe));return le!==null?K.fromPortablePath(le):null})}}var xBt=(0,Cle.promisify)(dle.readFile);var mle=(r,e,t)=>{let i=nE(r),n=GM(i,{basePath:e}),s=K.join(e,xt.pnpCjs);return $M(n,{fakeFs:t,pnpapiResolution:s})};var tO=Pe(Ile());var Co={};ut(Co,{checkAndReportManifestCompatibility:()=>wle,checkManifestCompatibility:()=>yle,extractBuildScripts:()=>rQ,getExtractHint:()=>rO,hasBindingGyp:()=>iO});function yle(r){return P.isPackageCompatible(r,ws.getArchitectureSet())}function wle(r,e,{configuration:t,report:i}){return yle(r)?!0:(i==null||i.reportWarningOnce(76,`${P.prettyLocator(t,r)} The ${ws.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function rQ(r,e,t,{configuration:i,report:n}){let s=[];for(let a of[\"preinstall\",\"install\",\"postinstall\"])e.manifest.scripts.has(a)&&s.push([0,a]);return!e.manifest.scripts.has(\"install\")&&e.misc.hasBindingGyp&&s.push([1,\"node-gyp rebuild\"]),s.length===0?[]:r.linkType!==\"HARD\"?(n==null||n.reportWarningOnce(6,`${P.prettyLocator(i,r)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):t&&t.built===!1?(n==null||n.reportInfoOnce(5,`${P.prettyLocator(i,r)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get(\"enableScripts\")&&!t.built?(n==null||n.reportWarningOnce(4,`${P.prettyLocator(i,r)} lists build scripts, but all build scripts have been disabled.`),[]):wle(r,\"build\",{configuration:i,report:n})?s:[]}var gze=new Set([\".exe\",\".bin\",\".h\",\".hh\",\".hpp\",\".c\",\".cc\",\".cpp\",\".java\",\".jar\",\".node\"]);function rO(r){return r.packageFs.getExtractHint({relevantExtensions:gze})}function iO(r){let e=x.join(r.prefixPath,\"binding.gyp\");return r.packageFs.existsSync(e)}var hE={};ut(hE,{getUnpluggedPath:()=>fE});function fE(r,{configuration:e}){return x.resolve(e.get(\"pnpUnpluggedFolder\"),P.slugifyLocator(r))}var fze=new Set([P.makeIdent(null,\"open\").identHash,P.makeIdent(null,\"opn\").identHash]),wl=class{constructor(){this.mode=\"strict\";this.pnpCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the PnP linker to be enabled\");let i=Bl(t.project).cjs;if(!O.existsSync(i))throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return K.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=Bl(t.project).cjs;if(!O.existsSync(i))return null;let s=Ie.getFactoryWithDefault(this.pnpCache,i,()=>Ie.dynamicRequire(i,{cachingStrategy:Ie.CachingStrategy.FsTime})).findPackageLocator(K.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new Yu(e)}isEnabled(e){return!(e.project.configuration.get(\"nodeLinker\")!==\"pnp\"||e.project.configuration.get(\"pnpMode\")!==this.mode)}},Yu=class{constructor(e){this.opts=e;this.mode=\"strict\";this.asyncActions=new Ie.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:\"PnpInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==\"SOFT\",g,f;if(c||u){let D=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(D.locatorHash),typeof g>\"u\"&&(g=await hze(t),e.linkType===\"HARD\"&&this.customData.store.set(D.locatorHash,g)),g.manifest.type===\"module\"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(D,e.version)}let h=c?rQ(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,t,f,i):t.packageFs;if(x.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);let C=x.resolve(p.getRealPath(),t.prefixPath),y=nO(this.opts.project.cwd,C),B=new Map,v=new Set;if(a){for(let D of e.peerDependencies.values())B.set(P.stringifyIdent(D),null),v.add(P.stringifyIdent(D));if(!o){let D=P.devirtualizeLocator(e);this.virtualTemplates.set(D.locatorHash,{location:nO(this.opts.project.cwd,Br.resolveVirtual(C)),locator:D})}}return Ie.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:B,packagePeers:v,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:C,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,t){let i=this.getPackageInformation(e);for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){for(let i of t)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get(\"pnpMode\")!==this.mode)return;let e=Bl(this.opts.project);if(O.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning(0,`Removing the old ${ee.pretty(this.opts.project.configuration,xt.pnpJs,ee.Type.PATH)} file. You might need to manually update existing references to reference the new ${ee.pretty(this.opts.project.configuration,xt.pnpCjs,ee.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${ee.pretty(this.opts.project.configuration,\"yarn sdks\",ee.Type.CODE)}.`),await O.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await O.removePromise(e.esmLoader),this.opts.project.configuration.get(\"nodeLinker\")!==\"pnp\"){await O.removePromise(e.cjs),await O.removePromise(this.opts.project.configuration.get(\"pnpDataPath\")),await O.removePromise(e.esmLoader),await O.removePromise(this.opts.project.configuration.get(\"pnpUnpluggedFolder\"));return}for(let{locator:u,location:g}of this.virtualTemplates.values())Ie.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let t=this.opts.project.configuration.get(\"pnpFallbackMode\"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=t!==\"none\",s=[],o=new Map,a=Ie.buildIgnorePattern([\".yarn/sdks/**\",...this.opts.project.configuration.get(\"pnpIgnorePatterns\")]),l=this.packageRegistry,c=this.opts.project.configuration.get(\"pnpShebang\");if(t===\"dependencies-only\")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has(\"pnpEnableEsmLoader\"))return this.opts.project.configuration.get(\"pnpEnableEsmLoader\");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type===\"module\")return!0;return!1}async finalizeInstallWithPnp(e){let t=Bl(this.opts.project),i=this.opts.project.configuration.get(\"pnpDataPath\"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning(31,\"One or more node_modules have been detected and will be removed. This operation may take some time.\");for(let o of n)await O.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get(\"pnpEnableInlining\")){let o=qAe(e);await O.changeFilePromise(t.cjs,o,{automaticNewlines:!0,mode:493}),await O.removePromise(i)}else{let o=x.relative(x.dirname(t.cjs),i),{dataFile:a,loaderFile:l}=JAe({...e,dataLocation:o});await O.changeFilePromise(t.cjs,l,{automaticNewlines:!0,mode:493}),await O.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,\"ESM support for PnP uses the experimental loader API and is therefore experimental\"),await O.changeFilePromise(t.esmLoader,(0,tO.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get(\"pnpUnpluggedFolder\");if(this.unpluggedPaths.size===0)await O.removePromise(s);else for(let o of await O.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await O.removePromise(a)}}async locateNodeModules(e){let t=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,\"node_modules\");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!O.existsSync(s))continue;let o=await O.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===\".bin\"||!l.name.startsWith(\".\"));if(a.length===o.length)t.push(s);else for(let l of a)t.push(x.join(s,l.name))}return t}async unplugPackageIfNeeded(e,t,i,n,s){return this.shouldBeUnplugged(e,t,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,t,i){return typeof i.unplugged<\"u\"?i.unplugged:fze.has(e.identHash)||e.conditions!=null?!0:t.manifest.preferUnplugged!==null?t.manifest.preferUnplugged:!!(rQ(e,t,i,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint)}async unplugPackage(e,t,i){let n=fE(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new So(n,{baseFs:t.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,t.prefixPath,\".ready\");await O.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,Me.dot,{baseFs:t.packageFs,overwrite:!1}),await O.writeFilePromise(s,\"\"))})),new qt(n))}getPackageInformation(e){let t=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(t);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let t=Ie.getMapWithDefault(this.packageRegistry,\"@@disk\"),i=nO(this.opts.project.cwd,e);return Ie.getFactoryWithDefault(t,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:\"SOFT\",discardFromLookup:!1}))}};function nO(r,e){let t=x.relative(r,e);return t.match(/^\\.{0,2}\\//)||(t=`./${t}`),t.replace(/\\/?$/,\"/\")}async function hze(r){var i;let e=(i=await ot.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?i:new ot,t=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let n of e.scripts.keys())t.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:rO(r),hasBindingGyp:iO(r)}}}var Ble=Pe(Bn());var ju=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Unplug direct dependencies from the entire project\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Unplug both direct and transitive dependencies\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.patterns=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);if(t.get(\"nodeLinker\")!==\"pnp\")throw new Qe(\"This command can only be used if the `nodeLinker` option is set to `pnp`\");await i.restoreInstallState();let o=new Set(this.patterns),a=this.patterns.map(h=>{let p=P.parseDescriptor(h),C=p.range!==\"unknown\"?p:P.makeDescriptor(p,\"*\");if(!vt.validRange(C.range))throw new Qe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(t,C)})`);return y=>{let B=P.stringifyIdent(y);return!Ble.default.isMatch(B,P.stringifyIdent(C))||y.version&&!vt.satisfiesWithPrereleases(y.version,C.range)?!1:(o.delete(h),!0)}}),l=()=>{let h=[];for(let p of i.storedPackages.values())!i.tryWorkspaceByLocator(p)&&!P.isVirtualLocator(p)&&a.some(C=>C(p))&&h.push(p);return h},c=h=>{let p=new Set,C=[],y=(B,v)=>{if(!p.has(B.locatorHash)&&(p.add(B.locatorHash),!i.tryWorkspaceByLocator(B)&&a.some(D=>D(B))&&C.push(B),!(v>0&&!this.recursive)))for(let D of B.dependencies.values()){let T=i.storedResolutions.get(D.descriptorHash);if(!T)throw new Error(\"Assertion failed: The resolution should have been registered\");let H=i.storedPackages.get(T);if(!H)throw new Error(\"Assertion failed: The package should have been registered\");y(H,v+1)}};for(let B of h){let v=i.storedPackages.get(B.anchoredLocator.locatorHash);if(!v)throw new Error(\"Assertion failed: The package should have been registered\");y(v,0)}return C},u,g;if(this.all&&this.recursive?(u=l(),g=\"the project\"):this.all?(u=c(i.workspaces),g=\"any workspace\"):(u=c([n]),g=\"this workspace\"),o.size>1)throw new Qe(`Patterns ${ee.prettyList(t,o,ee.Type.CODE)} don't match any packages referenced by ${g}`);if(o.size>0)throw new Qe(`Pattern ${ee.prettyList(t,o,ee.Type.CODE)} doesn't match any packages referenced by ${g}`);return u=Ie.sortMap(u,h=>P.stringifyLocator(h)),(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async h=>{var p;for(let C of u){let y=(p=C.version)!=null?p:\"unknown\",B=i.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(C,y));B.unplugged=!0,h.reportInfo(0,`Will unpack ${P.prettyLocator(t,C)} to ${ee.pretty(t,fE(C,{configuration:t}),ee.Type.PATH)}`),h.reportJson({locator:P.stringifyLocator(C),version:y})}await i.topLevelWorkspace.persistManifest(),h.reportSeparator(),await i.install({cache:s,report:h})})).exitCode()}};ju.paths=[[\"unplug\"]],ju.usage=ve.Usage({description:\"force the unpacking of a list of packages\",details:\"\\n      This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\\n\\n      A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\\n\\n      Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\\n\\n      By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\\n\\n      This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\\n    \",examples:[[\"Unplug the lodash dependency from the active workspace\",\"yarn unplug lodash\"],[\"Unplug all instances of lodash referenced by any workspace\",\"yarn unplug lodash -A\"],[\"Unplug all instances of lodash referenced by the active workspace and its dependencies\",\"yarn unplug lodash -R\"],[\"Unplug all instances of lodash, anywhere\",\"yarn unplug lodash -AR\"],[\"Unplug one specific version of lodash\",\"yarn unplug lodash@1.2.3\"],[\"Unplug all packages with the `@babel` scope\",\"yarn unplug '@babel/*'\"],[\"Unplug all packages (only for testing, not recommended)\",\"yarn unplug -R '*'\"]]});var Bl=r=>({cjs:x.join(r.cwd,xt.pnpCjs),cjsLegacy:x.join(r.cwd,xt.pnpJs),esmLoader:x.join(r.cwd,\".pnp.loader.mjs\")}),Sle=r=>/\\s/.test(r)?JSON.stringify(r):r;async function pze(r,e,t){let i=Bl(r),n=`--require ${Sle(K.fromPortablePath(i.cjs))}`;if(O.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Qle.pathToFileURL)(K.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(\" \")&&ble.default.lt(process.versions.node,\"12.0.0\"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(O.existsSync(i.cjs)){let s=e.NODE_OPTIONS||\"\",o=/\\s*--require\\s+\\S*\\.pnp\\.c?js\\s*/g,a=/\\s*--experimental-loader\\s+\\S*\\.pnp\\.loader\\.mjs\\s*/;s=s.replace(o,\" \").replace(a,\" \").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function dze(r,e){let t=Bl(r);e(t.cjs),e(t.esmLoader),e(r.configuration.get(\"pnpDataPath\")),e(r.configuration.get(\"pnpUnpluggedFolder\"))}var Cze={hooks:{populateYarnPaths:dze,setupScriptEnvironment:pze},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: \"pnp\", \"node-modules\"',type:\"STRING\",default:\"pnp\"},pnpMode:{description:\"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.\",type:\"STRING\",default:\"strict\"},pnpShebang:{description:\"String to prepend to the generated PnP script\",type:\"STRING\",default:\"#!/usr/bin/env node\"},pnpIgnorePatterns:{description:\"Array of glob patterns; files matching them will use the classic resolution\",type:\"STRING\",default:[],isArray:!0},pnpEnableEsmLoader:{description:\"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.\",type:\"BOOLEAN\",default:!1},pnpEnableInlining:{description:\"If true, the PnP data will be inlined along with the generated loader\",type:\"BOOLEAN\",default:!0},pnpFallbackMode:{description:\"If true, the generated PnP loader will follow the top-level fallback rule\",type:\"STRING\",default:\"dependencies-only\"},pnpUnpluggedFolder:{description:\"Folder where the unplugged packages must be stored\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/unplugged\"},pnpDataPath:{description:\"Path of the file where the PnP data (used by the loader) must be written\",type:\"ABSOLUTE_PATH\",default:\"./.pnp.data.json\"}},linkers:[wl],commands:[ju]},mze=Cze;var Nle=Pe(kle());var gO=Pe(J(\"crypto\")),Tle=Pe(J(\"fs\")),Lle=1,kr=\"node_modules\",iQ=\".bin\",Mle=\".yarn-state.yml\",Tze=1e3;var nQ=class{constructor(){this.installStateCache=new Map}supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the node-modules linker to be enabled\");let i=t.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(n===null)throw new Qe(\"Couldn't find the node_modules state file - running an install might help (findPackageLocation)\");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let l=new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw l.code=\"LOCATOR_NOT_INSTALLED\",l}let o=s.locations.sort((l,c)=>l.split(x.sep).length-c.split(x.sep).length),a=x.join(t.project.configuration.startingCwd,kr);return o.find(l=>x.contains(a,l))||s.locations[0]}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=await Ie.getFactoryWithDefault(this.installStateCache,t.project.cwd,async()=>await uO(t.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=sQ(x.resolve(e),{skipPrefix:t.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new cO(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"node-modules\"}},cO=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:\"NodeModulesInstaller\",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,t){var u;let i=x.resolve(t.packageFs.getRealPath(),t.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n>\"u\"&&(n=await Lze(e,t),e.linkType===\"HARD\"&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${K.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=t.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=t.checksum?t.checksum.substring(t.checksum.indexOf(\"/\")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,t){let i=this.localStore.get(e.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected information object to have been registered\");for(let[n,s]of t){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the node-modules linker\")}async finalizeInstall(){if(this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\")return;let e=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),t=await uO(this.opts.project),i=this.opts.project.configuration.get(\"nmMode\");(t===null||i!==t.nmMode)&&(this.opts.project.storedBuildState.clear(),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmHoistingLimits\");try{h=Ie.validateEnum(tE,(C=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?C:h)}catch{let B=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning(57,`${B}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(tE).join(\", \")}, using default: \"${h}\"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,C;let h=this.opts.project.configuration.get(\"nmSelfReferences\");return h=(C=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?C:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the package reference to have been registered\");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(K.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error(\"Assertion failed: Unimplemented\")},resolveToUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveUnqualified:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveRequest:()=>{throw new Error(\"Assertion failed: Unimplemented\")},resolveVirtual:f=>K.fromPortablePath(Br.resolveVirtual(K.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=rE(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=UM(a);await Gze(t,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(Hle(f))continue;let p=P.parseLocator(f),C=this.localStore.get(p.locatorHash);if(typeof C>\"u\")throw new Error(\"Assertion failed: Expected the slot to exist\");if(this.opts.project.tryWorkspaceByLocator(C.pkg))continue;let y=Co.extractBuildScripts(C.pkg,C.customPackageData,C.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${ee.pretty(this.opts.project.configuration,\"--preserve-symlinks\",ee.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function Lze(r,e){var n;let t=(n=await ot.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new ot,i=new Set([\"preinstall\",\"install\",\"postinstall\"]);for(let s of t.scripts.keys())i.has(s)||t.scripts.delete(s);return{manifest:{bin:t.bin,scripts:t.scripts},misc:{extractHint:Co.getExtractHint(e),hasBindingGyp:Co.hasBindingGyp(e)}}}async function Mze(r,e,t,i,{installChangedByUser:n}){let s=\"\";s+=`# Warning: This file is automatically generated. Removing it is fine, but will\n`,s+=`# cause your node_modules installation to become invalidated.\n`,s+=`\n`,s+=`__metadata:\n`,s+=`  version: ${Lle}\n`,s+=`  nmMode: ${i.value}\n`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(r.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`\n`,s+=`${JSON.stringify(u)}:\n`,s+=`  locations:\n`;for(let f of g.locations){let h=x.contains(r.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    - ${JSON.stringify(h)}\n`}if(g.aliases.length>0){s+=`  aliases:\n`;for(let f of g.aliases)s+=`    - ${JSON.stringify(f)}\n`}if(u===a&&t.size>0){s+=`  bin:\n`;for(let[f,h]of t){let p=x.contains(r.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=`    ${JSON.stringify(p)}:\n`;for(let[C,y]of h){let B=x.relative(x.join(f,kr),y);s+=`      ${JSON.stringify(C)}: ${JSON.stringify(B)}\n`}}}}let l=r.cwd,c=x.join(l,kr,Mle);n&&await O.removePromise(c),await O.changeFilePromise(c,s,{automaticNewlines:!0})}async function uO(r,{unrollAliases:e=!1}={}){let t=r.cwd,i=x.join(t,kr,Mle),n;try{n=await O.statPromise(i)}catch{}if(!n)return null;let s=yi(await O.readFilePromise(i,\"utf8\"));if(s.__metadata.version>Lle)return null;let o=s.__metadata.nmMode||\"classic\",a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(t,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let C=x.join(t,K.toPortablePath(h)),y=Ie.getMapWithDefault(l,C);for(let[B,v]of Object.entries(p))y.set(Jr(B),K.toPortablePath([C,kr,v].join(x.sep)))}if(a.set(c,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:C}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,C),h),B=P.stringifyLocator(y);a.set(B,{target:Me.dot,linkType:\"HARD\",locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:Ole(a,{skipPrefix:r.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var sp=async(r,e)=>{if(r.split(x.sep).indexOf(kr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${r}`);try{if(!e.innerLoop){let i=e.allowSymlink?await O.statPromise(r):await O.lstatPromise(r);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await O.unlinkPromise(r);return}}let t=await O.readdirPromise(r,{withFileTypes:!0});for(let i of t){let n=x.join(r,Jr(i.name));i.isDirectory()?(i.name!==kr||e&&e.innerLoop)&&await sp(n,{innerLoop:!0,contentsOnly:!1}):await O.unlinkPromise(n)}e.contentsOnly||await O.rmdirPromise(r)}catch(t){if(t.code!==\"ENOENT\"&&t.code!==\"ENOTEMPTY\")throw t}},Rle=4,sQ=(r,{skipPrefix:e})=>{let t=x.contains(e,r);if(t===null)throw new Error(`Assertion failed: Writing attempt prevented to ${r} which is outside project root: ${e}`);let i=t.split(x.sep).filter(l=>l!==\"\"),n=i.indexOf(kr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},Ole=(r,{skipPrefix:e})=>{let t=new Map;if(r===null)return t;let i=()=>({children:new Map,linkType:\"HARD\"});for(let[n,s]of r.entries()){if(s.linkType===\"SOFT\"&&x.contains(e,s.target)!==null){let a=Ie.getFactoryWithDefault(t,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=sQ(o,{skipPrefix:e}),c=Ie.getFactoryWithDefault(t,a,i);for(let u=0;u<l.length;++u){let g=l[u];if(g!==\".\"){let f=Ie.getFactoryWithDefault(c.children,g,i);c.children.set(g,f),c=f}u===l.length-1&&(c.locator=n,c.linkType=s.linkType)}}}return t},fO=async(r,e)=>{let t;try{process.platform===\"win32\"&&(t=await O.lstatPromise(r))}catch{}process.platform==\"win32\"&&(!t||t.isDirectory())?await O.symlinkPromise(r,e,\"junction\"):await O.symlinkPromise(x.relative(x.dirname(e),r),e)};async function Kle(r,e,t){let i=x.join(r,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));try{await O.writeFilePromise(i,t);try{await O.linkPromise(i,e)}catch{}}finally{await O.unlinkPromise(i)}}async function Oze({srcPath:r,dstPath:e,entry:t,globalHardlinksStore:i,baseFs:n,nmMode:s}){if(t.kind===Ule.FILE){if(s.value===\"hardlinks-global\"&&i&&t.digest){let a=x.join(i,t.digest.substring(0,2),`${t.digest.substring(2)}.dat`),l;try{let c=await O.statPromise(a);if(c&&(!t.mtimeMs||c.mtimeMs>t.mtimeMs||c.mtimeMs<t.mtimeMs-Tze))if(await li.checksumFile(a,{baseFs:O,algorithm:\"sha1\"})!==t.digest){let g=x.join(i,Jr(`${gO.default.randomBytes(16).toString(\"hex\")}.tmp`));await O.renamePromise(a,g);let f=await n.readFilePromise(r);await O.writeFilePromise(g,f);try{await O.linkPromise(g,a),t.mtimeMs=new Date().getTime(),await O.unlinkPromise(g)}catch{}}else t.mtimeMs||(t.mtimeMs=Math.ceil(c.mtimeMs));await O.linkPromise(a,e),l=!0}catch{l=!1}if(!l){let c=await n.readFilePromise(r);await Kle(i,a,c),t.mtimeMs=new Date().getTime();try{await O.linkPromise(a,e)}catch(u){u&&u.code&&u.code==\"EXDEV\"&&(s.value=\"hardlinks-local\",await n.copyFilePromise(r,e))}}}else await n.copyFilePromise(r,e);let o=t.mode&511;o!==420&&await O.chmodPromise(e,o)}}var Ule=(i=>(i.FILE=\"file\",i.DIRECTORY=\"directory\",i.SYMLINK=\"symlink\",i))(Ule||{}),Kze=async(r,e,{baseFs:t,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await O.mkdirPromise(r,{recursive:!0});let o=async(c=Me.dot)=>{let u=x.join(e,c),g=await t.readdirPromise(u,{withFileTypes:!0}),f=new Map;for(let h of g){let p=x.join(c,h.name),C,y=x.join(u,h.name);if(h.isFile()){if(C={kind:\"file\",mode:(await t.lstatPromise(y)).mode},n.value===\"hardlinks-global\"){let B=await li.checksumFile(y,{baseFs:t,algorithm:\"sha1\"});C.digest=B}}else if(h.isDirectory())C={kind:\"directory\"};else if(h.isSymbolicLink())C={kind:\"symlink\",symlinkTo:await t.readlinkPromise(y)};else throw new Error(`Unsupported file type (file: ${y}, mode: 0o${await t.statSync(y).mode.toString(8).padStart(6,\"0\")})`);if(f.set(p,C),h.isDirectory()&&p!==kr){let B=await o(p);for(let[v,D]of B)f.set(v,D)}}return f},a;if(n.value===\"hardlinks-global\"&&i&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await O.readFilePromise(c,\"utf8\"))))}catch{a=await o()}}else a=await o();let l=!1;for(let[c,u]of a){let g=x.join(e,c),f=x.join(r,c);if(u.kind===\"directory\")await O.mkdirPromise(f,{recursive:!0});else if(u.kind===\"file\"){let h=u.mtimeMs;await Oze({srcPath:g,dstPath:f,entry:u,nmMode:n,baseFs:t,globalHardlinksStore:i}),u.mtimeMs!==h&&(l=!0)}else u.kind===\"symlink\"&&await fO(x.resolve(x.dirname(f),u.symlinkTo),f)}if(n.value===\"hardlinks-global\"&&i&&l&&s){let c=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);await O.removePromise(c),await Kle(i,c,Buffer.from(JSON.stringify(Object.fromEntries(a))))}};function Uze(r,e,t,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,C=x.join(c,u),y=new Set;if(u===kr||u.startsWith(\"@\")){let v;try{v=O.statSync(C)}catch{}p=!!v,v?v.mtimeMs>t?(a=!0,y=new Set(O.readdirSync(C))):y=new Set(g.children.get(u).children.keys()):a=!0;let D=e.get(c);if(D){let T=x.join(c,kr,iQ),H;try{H=O.statSync(T)}catch{}if(!H)a=!0;else if(H.mtimeMs>t){a=!0;let j=new Set(O.readdirSync(T)),$=new Map;s.set(c,$);for(let[V,W]of D)j.has(V)&&$.set(V,W)}else s.set(c,D)}}else p=h.has(u);let B=g.children.get(u);if(p){let{linkType:v,locator:D}=B,T={children:new Map,linkType:v,locator:D};if(f.children.set(u,T),D){let H=Ie.getSetWithDefault(o,D);H.add(C),o.set(D,H)}for(let H of B.children.keys())l(C,H,B,T,y)}else B.locator&&i.storedBuildState.delete(P.parseLocator(B.locator).locatorHash)};for(let[c,u]of r){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=Ie.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(kr)&&l(c,kr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function Hle(r){let e=P.parseDescriptor(r);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith(\"link:\")}async function Hze(r,e,t,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of r){let c=Hle(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==\"\"&&O.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(t,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let C=x.join(a,K.toPortablePath(p));u.set(Jr(h),C)}for(let[h,p]of c.children){let C=x.join(a,h),y=o(C,C,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[C,y]of p)u.set(C,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var Fle=(r,e)=>{if(!r||!e)return r===e;let t=P.parseLocator(r);P.isVirtualLocator(t)&&(t=P.devirtualizeLocator(t));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(t,i)};function hO(r){return x.join(r.get(\"globalFolder\"),\"store\")}async function Gze(r,e,{baseFs:t,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,kr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=Uze(r.locationTree,r.binSymlinks,r.mtimeMs,i),f=Ole(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:V,dstDir:W,linkType:_,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})=>{let re=(async()=>{try{_===\"SOFT\"?(await O.mkdirPromise(x.dirname(W),{recursive:!0}),await fO(x.resolve(V),W)):await Kze(W,V,{baseFs:t,globalHardlinksStore:A,nmMode:Ae,packageChecksum:ge})}catch(M){throw M.message=`While persisting ${V} -> ${W} ${M.message}`,M}finally{T.tick()}})().then(()=>h.splice(h.indexOf(re),1));h.push(re),h.length>Rle&&await Promise.race(h)},C=async(V,W,_)=>{let A=(async()=>{let Ae=async(ge,re,M)=>{try{M.innerLoop||await O.mkdirPromise(re,{recursive:!0});let F=await O.readdirPromise(ge,{withFileTypes:!0});for(let ue of F){if(!M.innerLoop&&ue.name===iQ)continue;let pe=x.join(ge,ue.name),ke=x.join(re,ue.name);ue.isDirectory()?(ue.name!==kr||M&&M.innerLoop)&&(await O.mkdirPromise(ke,{recursive:!0}),await Ae(pe,ke,{...M,innerLoop:!0})):$.value===\"hardlinks-local\"||$.value===\"hardlinks-global\"?await O.linkPromise(pe,ke):await O.copyFilePromise(pe,ke,Tle.default.constants.COPYFILE_FICLONE)}}catch(F){throw M.innerLoop||(F.message=`While cloning ${ge} -> ${re} ${F.message}`),F}finally{M.innerLoop||T.tick()}};await Ae(V,W,_)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>Rle&&await Promise.race(h)},y=async(V,W,_)=>{if(_)for(let[A,Ae]of W.children){let ge=_.children.get(A);await y(x.join(V,A),Ae,ge)}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!1});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:V===a,allowSymlink:A})}};for(let[V,W]of l){let _=f.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A),re=x.join(V,A);await y(re,Ae,ge)}}let B=async(V,W,_)=>{if(_){Fle(W.locator,_.locator)||await sp(V,{contentsOnly:W.linkType===\"HARD\"});for(let[A,Ae]of W.children){let ge=_.children.get(A);await B(x.join(V,A),Ae,ge)}}else{W.children.has(kr)&&await sp(x.join(V,kr),{contentsOnly:!0});let A=x.basename(V)===kr&&f.has(x.join(x.dirname(V),x.sep));await sp(V,{contentsOnly:W.linkType===\"HARD\",allowSymlink:A})}};for(let[V,W]of f){let _=l.get(V);for(let[A,Ae]of W.children){if(A===\".\")continue;let ge=_&&_.children.get(A);await B(x.join(V,A),Ae,ge)}}let v=new Map,D=[];for(let[V,W]of u)for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=f.get(A),re=A;if(ge){for(let M of Ae)if(re=x.join(re,M),ge=ge.children.get(M),!ge)break;if(ge){let M=Fle(ge.locator,V),F=e.get(ge.locator),ue=F.target,pe=re,ke=F.linkType;if(M)v.has(ue)||v.set(ue,pe);else if(ue!==pe){let Fe=P.parseLocator(ge.locator);P.isVirtualLocator(Fe)&&(Fe=P.devirtualizeLocator(Fe)),D.push({srcDir:ue,dstDir:pe,linkType:ke,realLocatorHash:Fe.locatorHash})}}}}for(let[V,{locations:W}]of e.entries())for(let _ of W){let{locationRoot:A,segments:Ae}=sQ(_,{skipPrefix:i.cwd}),ge=l.get(A),re=f.get(A),M=A,F=e.get(V),ue=P.parseLocator(V);P.isVirtualLocator(ue)&&(ue=P.devirtualizeLocator(ue));let pe=ue.locatorHash,ke=F.target,Fe=_;if(ke===Fe)continue;let Ne=F.linkType;for(let oe of Ae)re=re.children.get(oe);if(!ge)D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});else for(let oe of Ae)if(M=x.join(M,oe),ge=ge.children.get(oe),!ge){D.push({srcDir:ke,dstDir:Fe,linkType:Ne,realLocatorHash:pe});break}}let T=vi.progressViaCounter(D.length),H=n.reportProgress(T),j=i.configuration.get(\"nmMode\"),$={value:j};try{let V=$.value===\"hardlinks-global\"?`${hO(i.configuration)}/v1`:null;if(V&&!await O.existsPromise(V)){await O.mkdirpPromise(V);for(let _=0;_<256;_++)await O.mkdirPromise(x.join(V,_.toString(16).padStart(2,\"0\")))}for(let _ of D)(_.linkType===\"SOFT\"||!v.has(_.srcDir))&&(v.set(_.srcDir,_.dstDir),await p({..._,globalHardlinksStore:V,nmMode:$,packageChecksum:o.get(_.realLocatorHash)||null}));await Promise.all(h),h.length=0;for(let _ of D){let A=v.get(_.srcDir);_.linkType!==\"SOFT\"&&_.dstDir!==A&&await C(A,_.dstDir,{nmMode:$})}await Promise.all(h),await O.mkdirPromise(a,{recursive:!0});let W=await Hze(e,f,i.cwd,{loadManifest:s});await Yze(c,W,i.cwd),await Mze(i,e,W,$,{installChangedByUser:g}),j==\"hardlinks-global\"&&$.value==\"hardlinks-local\"&&n.reportWarningOnce(74,\"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices\")}finally{H.stop()}}async function Yze(r,e,t){for(let i of r.keys()){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,kr,iQ);await O.removePromise(n)}}for(let[i,n]of e){if(x.contains(t,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,kr,iQ),o=r.get(i)||new Map;await O.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await O.removePromise(x.join(s,a)),process.platform===\"win32\"&&await O.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform===\"win32\"?await(0,Nle.default)(K.fromPortablePath(l),K.fromPortablePath(u),{createPwshFile:!1}):(await O.removePromise(u),await fO(l,u),x.contains(t,await O.realpathPromise(l))!==null&&await O.chmodPromise(l,493)))}}}var oQ=class extends wl{constructor(){super(...arguments);this.mode=\"loose\"}makeInstaller(t){return new pO(t)}},pO=class extends Yu{constructor(){super(...arguments);this.mode=\"loose\"}async transformPnpSettings(t){let i=new Br({baseFs:new Kn({libzip:await an(),maxOpenFiles:80,readOnlyArchives:!0})}),n=mle(t,this.opts.project.cwd,i),{tree:s,errors:o}=rE(n,{pnpifyFs:!1,project:this.opts.project});if(!s){for(let{messageName:g,text:f}of o)this.opts.report.reportError(g,f);return}let a=new Map;t.fallbackPool=a;let l=(g,f)=>{let h=P.parseLocator(f.locator),p=P.stringifyIdent(h);p===g?a.set(g,h.reference):a.set(g,[p,h.reference])},c=x.join(this.opts.project.cwd,xt.nodeModules),u=s.get(c);if(!(typeof u>\"u\")){if(\"target\"in u)throw new Error(\"Assertion failed: Expected the root junction point to be a directory\");for(let g of u.dirList){let f=x.join(c,g),h=s.get(f);if(typeof h>\"u\")throw new Error(\"Assertion failed: Expected the child to have been registered\");if(\"target\"in h)l(g,h);else for(let p of h.dirList){let C=x.join(f,p),y=s.get(C);if(typeof y>\"u\")throw new Error(\"Assertion failed: Expected the subchild to have been registered\");if(\"target\"in y)l(`${g}/${p}`,y);else throw new Error(\"Assertion failed: Expected the leaf junction to be a package\")}}}}};var jze={hooks:{cleanGlobalArtifacts:async r=>{let e=hO(r);await O.removePromise(e)}},configuration:{nmHoistingLimits:{description:\"Prevent packages to be hoisted past specific levels\",type:\"STRING\",values:[\"workspaces\",\"dependencies\",\"none\"],default:\"none\"},nmMode:{description:'If set to \"hardlinks-local\" Yarn will utilize hardlinks to reduce disk space consumption inside \"node_modules\" directories. With \"hardlinks-global\" Yarn will use global content addressable storage to reduce \"node_modules\" size across all the projects using this option.',type:\"STRING\",values:[\"classic\",\"hardlinks-local\",\"hardlinks-global\"],default:\"classic\"},nmSelfReferences:{description:\"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created\",type:\"BOOLEAN\",default:!0}},linkers:[nQ,oQ]},qze=jze;var f1={};ut(f1,{default:()=>$Ve,npmConfigUtils:()=>or,npmHttpUtils:()=>Ot,npmPublishUtils:()=>Cp});var Wle=Pe(Xr());var gr=\"npm:\";var Ot={};ut(Ot,{AuthType:()=>Jle,customPackageError:()=>Wze,del:()=>Xze,get:()=>Eo,getIdentUrl:()=>Ql,handleInvalidAuthenticationError:()=>bl,post:()=>zze,put:()=>Vze});var EO=Pe(Km()),qle=J(\"url\");var or={};ut(or,{RegistryType:()=>Gle,getAuditRegistry:()=>Jze,getAuthConfiguration:()=>mO,getDefaultRegistry:()=>aQ,getPublishRegistry:()=>Yle,getRegistryConfiguration:()=>jle,getScopeConfiguration:()=>CO,getScopeRegistry:()=>gA,normalizeRegistry:()=>mo});var Gle=(i=>(i.AUDIT_REGISTRY=\"npmAuditRegistry\",i.FETCH_REGISTRY=\"npmRegistryServer\",i.PUBLISH_REGISTRY=\"npmPublishRegistry\",i))(Gle||{});function mo(r){return r.replace(/\\/$/,\"\")}function Jze(r,{configuration:e}){let t=e.get(\"npmAuditRegistry\");return t!==null?mo(t):Yle(r,{configuration:e})}function Yle(r,{configuration:e}){var t;return(t=r.publishConfig)!=null&&t.registry?mo(r.publishConfig.registry):r.name?gA(r.name.scope,{configuration:e,type:\"npmPublishRegistry\"}):aQ({configuration:e,type:\"npmPublishRegistry\"})}function gA(r,{configuration:e,type:t=\"npmRegistryServer\"}){let i=CO(r,{configuration:e});if(i===null)return aQ({configuration:e,type:t});let n=i.get(t);return n===null?aQ({configuration:e,type:t}):mo(n)}function aQ({configuration:r,type:e=\"npmRegistryServer\"}){let t=r.get(e);return mo(t!==null?t:r.get(\"npmRegistryServer\"))}function jle(r,{configuration:e}){let t=e.get(\"npmRegistries\"),i=mo(r),n=t.get(i);if(typeof n<\"u\")return n;let s=t.get(i.replace(/^[a-z]+:/,\"\"));return typeof s<\"u\"?s:null}function CO(r,{configuration:e}){if(r===null)return null;let i=e.get(\"npmScopes\").get(r);return i||null}function mO(r,{configuration:e,ident:t}){let i=t&&CO(t.scope,{configuration:e});return(i==null?void 0:i.get(\"npmAuthIdent\"))||(i==null?void 0:i.get(\"npmAuthToken\"))?i:jle(r,{configuration:e})||e}var Jle=(n=>(n[n.NO_AUTH=0]=\"NO_AUTH\",n[n.BEST_EFFORT=1]=\"BEST_EFFORT\",n[n.CONFIGURATION=2]=\"CONFIGURATION\",n[n.ALWAYS_AUTH=3]=\"ALWAYS_AUTH\",n))(Jle||{});async function bl(r,{attemptedAs:e,registry:t,headers:i,configuration:n}){var s,o;if(lQ(r))throw new at(41,\"Invalid OTP token\");if(((s=r.originalError)==null?void 0:s.name)===\"HTTPError\"&&((o=r.originalError)==null?void 0:o.response.statusCode)===401)throw new at(41,`Invalid authentication (${typeof e!=\"string\"?`as ${await _ze(t,i,{configuration:n})}`:`attempted as ${e}`})`)}function Wze(r){var e;return((e=r.response)==null?void 0:e.statusCode)===404?\"Package not found\":null}function Ql(r){return r.scope?`/@${r.scope}%2f${r.name}`:`/${r.name}`}async function Eo(r,{configuration:e,headers:t,ident:i,authType:n,registry:s,...o}){if(i&&typeof s>\"u\"&&(s=gA(i.scope,{configuration:e})),i&&i.scope&&typeof n>\"u\"&&(n=1),typeof s!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let a=await AQ(s,{authType:n,configuration:e,ident:i});a&&(t={...t,authorization:a});try{return await Xt.get(r.charAt(0)===\"/\"?`${s}${r}`:r,{configuration:e,headers:t,...o})}catch(l){throw await bl(l,{registry:s,configuration:e,headers:t}),l}}async function zze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.post(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g)||l)throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.post(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Vze(r,e,{attemptedAs:t,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l,...c}){if(s&&typeof a>\"u\"&&(a=gA(s.scope,{configuration:i})),typeof a!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let u=await AQ(a,{authType:o,configuration:i,ident:s});u&&(n={...n,authorization:u}),l&&(n={...n,...op(l)});try{return await Xt.put(a+r,e,{configuration:i,headers:n,...c})}catch(g){if(!lQ(g))throw await bl(g,{attemptedAs:t,registry:a,configuration:i,headers:n}),g;l=await IO(g,{configuration:i});let f={...n,...op(l)};try{return await Xt.put(`${a}${r}`,e,{configuration:i,headers:f,...c})}catch(h){throw await bl(h,{attemptedAs:t,registry:a,configuration:i,headers:n}),h}}}async function Xze(r,{attemptedAs:e,configuration:t,headers:i,ident:n,authType:s=3,registry:o,otp:a,...l}){if(n&&typeof o>\"u\"&&(o=gA(n.scope,{configuration:t})),typeof o!=\"string\")throw new Error(\"Assertion failed: The registry should be a string\");let c=await AQ(o,{authType:s,configuration:t,ident:n});c&&(i={...i,authorization:c}),a&&(i={...i,...op(a)});try{return await Xt.del(o+r,{configuration:t,headers:i,...l})}catch(u){if(!lQ(u)||a)throw await bl(u,{attemptedAs:e,registry:o,configuration:t,headers:i}),u;a=await IO(u,{configuration:t});let g={...i,...op(a)};try{return await Xt.del(`${o}${r}`,{configuration:t,headers:g,...l})}catch(f){throw await bl(f,{attemptedAs:e,registry:o,configuration:t,headers:i}),f}}}async function AQ(r,{authType:e=2,configuration:t,ident:i}){let n=mO(r,{configuration:t,ident:i}),s=Zze(n,e);if(!s)return null;let o=await t.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,r,{configuration:t,ident:i});if(o)return o;if(n.get(\"npmAuthToken\"))return`Bearer ${n.get(\"npmAuthToken\")}`;if(n.get(\"npmAuthIdent\")){let a=n.get(\"npmAuthIdent\");return a.includes(\":\")?`Basic ${Buffer.from(a).toString(\"base64\")}`:`Basic ${a}`}if(s&&e!==1)throw new at(33,\"No authentication configured for request\");return null}function Zze(r,e){switch(e){case 2:return r.get(\"npmAlwaysAuth\");case 1:case 3:return!0;case 0:return!1;default:throw new Error(\"Unreachable\")}}async function _ze(r,e,{configuration:t}){var i;if(typeof e>\"u\"||typeof e.authorization>\"u\")return\"an anonymous user\";try{return(i=(await Xt.get(new qle.URL(`${r}/-/whoami`).href,{configuration:t,headers:e,jsonResponse:!0})).username)!=null?i:\"an unknown user\"}catch{return\"an unknown user\"}}async function IO(r,{configuration:e}){var n;let t=(n=r.originalError)==null?void 0:n.response.headers[\"npm-notice\"];if(t&&(await Ge.start({configuration:e,stdout:process.stdout,includeFooter:!1},async s=>{if(s.reportInfo(0,t.replace(/(https?:\\/\\/\\S+)/g,ee.pretty(e,\"$1\",ee.Type.URL))),!process.env.YARN_IS_TEST_ENV){let o=t.match(/open (https?:\\/\\/\\S+)/i);if(o&&ws.openUrl){let{openNow:a}=await(0,EO.prompt)({type:\"confirm\",name:\"openNow\",message:\"Do you want to try to open this url now?\",required:!0,initial:!0,onCancel:()=>process.exit(130)});a&&(await ws.openUrl(o[1])||(s.reportSeparator(),s.reportWarning(0,\"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.\")))}}}),process.stdout.write(`\n`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||\"\";let{otp:i}=await(0,EO.prompt)({type:\"password\",name:\"otp\",message:\"One-time password:\",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`\n`),i}function lQ(r){var e,t;if(((e=r.originalError)==null?void 0:e.name)!==\"HTTPError\")return!1;try{return((t=r.originalError)==null?void 0:t.response.headers[\"www-authenticate\"].split(/,\\s*/).map(n=>n.toLowerCase())).includes(\"otp\")}catch{return!1}}function op(r){return{[\"npm-otp\"]:r}}var cQ=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!Wle.default.valid(i)||n===null||typeof n.__archiveUrl!=\"string\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!=\"string\")throw new Error(\"Assertion failed: The archiveUrl querystring parameter should have been available\");let n=await Eo(i.__archiveUrl,{configuration:t.project.configuration,ident:e});return await mi.convertToZip(n,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var uQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!P.tryParseDescriptor(e.range.slice(gr.length),!0))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){let i=P.parseDescriptor(e.range.slice(gr.length),!0);return t.resolver.getResolutionDependencies(i,t)}async getCandidates(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return await i.resolver.getCandidates(n,t,i)}async getSatisfying(e,t,i){let n=P.parseDescriptor(e.range.slice(gr.length),!0);return i.resolver.getSatisfying(n,t,i)}resolve(e,t){throw new Error(\"Unreachable\")}};var zle=Pe(Xr()),Vle=J(\"url\");var Ls=class{supports(e,t){if(!e.reference.startsWith(gr))return!1;let i=new Vle.URL(e.reference);return!(!zle.default.valid(i.pathname)||i.searchParams.has(\"__archiveUrl\"))}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let i;try{i=await Eo(Ls.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch{i=await Eo(Ls.getLocatorUrl(e).replace(/%2f/g,\"/\"),{configuration:t.project.configuration,ident:e})}return await mi.convertToZip(i,{compressionLevel:t.project.configuration.get(\"compressionLevel\"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:i}){let n=gA(e.scope,{configuration:i}),s=Ls.getLocatorUrl(e);return t=t.replace(/^https?:(\\/\\/(?:[^/]+\\.)?npmjs.org(?:$|\\/))/,\"https:$1\"),n=n.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t=t.replace(/^https:\\/\\/registry\\.npmjs\\.org($|\\/)/,\"https://registry.yarnpkg.com$1\"),t===n+s||t===n+s.replace(/%2f/g,\"/\")}static getLocatorUrl(e){let t=vt.clean(e.reference.slice(gr.length));if(t===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");return`${Ql(e)}/-/${e.name}-${t}.tgz`}};var Xle=Pe(Xr());var gQ=P.makeIdent(null,\"node-gyp\"),$ze=/\\b(node-gyp|prebuild-install)\\b/,fQ=class{supportsDescriptor(e,t){return e.range.startsWith(gr)?!!vt.validRange(e.range.slice(gr.length)):!1}supportsLocator(e,t){if(!e.reference.startsWith(gr))return!1;let{selector:i}=P.parseRange(e.reference);return!!Xle.default.valid(i)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);let s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=Ie.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new vt.SemVer(c);if(n.test(u))return u}catch{}return Ie.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${gr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return Ls.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,t,i){let n=vt.validRange(e.range.slice(gr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(gr.length)}`);return Ie.mapAndFilter(t,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:gr}),a=new vt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return Ie.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,t){let{selector:i}=P.parseRange(e.reference),n=vt.clean(i);if(n===null)throw new at(10,\"The npm semver resolver got selected, but the version isn't semver\");let s=await Eo(Ql(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new at(16,`Registry failed to return reference \"${n}\"`);let o=new ot;if(o.load(s.versions[n]),!o.dependencies.has(gQ.identHash)&&!o.peerDependencies.has(gQ.identHash)){for(let a of o.scripts.values())if(a.match($ze)){o.dependencies.set(gQ.identHash,P.makeDescriptor(gQ,\"latest\")),t.report.reportWarningOnce(32,`${P.prettyLocator(t.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated==\"string\"&&o.raw.deprecated!==\"\"){let a=P.prettyLocator(t.project.configuration,e),l=o.raw.deprecated.match(/\\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;t.report.reportWarningOnce(61,l)}return{...e,version:n,languageName:\"node\",linkType:\"HARD\",conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}};var hQ=class{supportsDescriptor(e,t){return!(!e.range.startsWith(gr)||!Rf.test(e.range.slice(gr.length)))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error(\"Unreachable\")}bindDescriptor(e,t,i){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,i){let n=e.range.slice(gr.length),s=await Eo(Ql(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,\"dist-tags\"))throw new at(15,'Registry returned invalid data - missing \"dist-tags\" field');let o=s[\"dist-tags\"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new at(16,`Registry failed to return tag \"${n}\"`);let a=o[n],l=P.makeLocator(e,`${gr}${a}`),c=s.versions[a].dist.tarball;return Ls.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){throw new Error(\"Unreachable\")}};var Cp={};ut(Cp,{getGitHead:()=>ZVe,getPublishAccess:()=>Uue,getReadmeContent:()=>Hue,makePublishBody:()=>XVe});var A1={};ut(A1,{default:()=>RVe,packUtils:()=>ca});var ca={};ut(ca,{genPackList:()=>MQ,genPackStream:()=>a1,genPackageManifest:()=>vue,hasPackScripts:()=>s1,prepareForPack:()=>o1});var n1=Pe(Bn()),Que=Pe(yue()),Sue=J(\"zlib\"),yVe=[\"/package.json\",\"/readme\",\"/readme.*\",\"/license\",\"/license.*\",\"/licence\",\"/licence.*\",\"/changelog\",\"/changelog.*\"],wVe=[\"/package.tgz\",\".github\",\".git\",\".hg\",\"node_modules\",\".npmignore\",\".gitignore\",\".#*\",\".DS_Store\"];async function s1(r){return!!(Wt.hasWorkspaceScript(r,\"prepack\")||Wt.hasWorkspaceScript(r,\"postpack\"))}async function o1(r,{report:e},t){await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"prepack\",{report:e});try{let i=x.join(r.cwd,ot.fileName);await O.existsPromise(i)&&await r.manifest.loadFile(i,{baseFs:O}),await t()}finally{await Wt.maybeExecuteWorkspaceLifecycleScript(r,\"postpack\",{report:e})}}async function a1(r,e){var s,o;typeof e>\"u\"&&(e=await MQ(r));let t=new Set;for(let a of(o=(s=r.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)t.add(x.normalize(a));for(let a of r.manifest.bin.values())t.add(x.normalize(a));let i=Que.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(r.cwd,l),u=x.join(\"package\",l),g=await O.lstatPromise(c),f={name:u,mtime:new Date(xr.SAFE_TIME*1e3)},h=t.has(l)?493:420,p,C,y=new Promise((v,D)=>{p=v,C=D}),B=v=>{v?C(v):p()};if(g.isFile()){let v;l===\"package.json\"?v=Buffer.from(JSON.stringify(await vue(r),null,2)):v=await O.readFilePromise(c),i.entry({...f,mode:h,type:\"file\"},v,B)}else g.isSymbolicLink()?i.entry({...f,mode:h,type:\"symlink\",linkname:await O.readlinkPromise(c)},B):B(new Error(`Unsupported file type ${g.mode} for ${K.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Sue.createGzip)();return i.pipe(n),n}async function vue(r){let e=JSON.parse(JSON.stringify(r.manifest.raw));return await r.project.configuration.triggerHook(t=>t.beforeWorkspacePacking,r,e),e}async function MQ(r){var g,f,h,p,C,y,B,v;let e=r.project,t=e.configuration,i={accept:[],reject:[]};for(let D of wVe)i.reject.push(D);for(let D of yVe)i.accept.push(D);i.reject.push(t.get(\"rcFilename\"));let n=D=>{if(D===null||!D.startsWith(`${r.cwd}/`))return;let T=x.relative(r.cwd,D),H=x.resolve(Me.root,T);i.reject.push(H)};n(x.resolve(e.cwd,t.get(\"lockfileFilename\"))),n(t.get(\"cacheFolder\")),n(t.get(\"globalFolder\")),n(t.get(\"installStatePath\")),n(t.get(\"virtualFolder\")),n(t.get(\"yarnPath\")),await t.triggerHook(D=>D.populateYarnPaths,e,D=>{n(D)});for(let D of e.workspaces){let T=x.relative(r.cwd,D.cwd);T!==\"\"&&!T.match(/^(\\.\\.)?\\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=r.manifest.publishConfig)==null?void 0:g.main)!=null?f:r.manifest.main,a=(p=(h=r.manifest.publishConfig)==null?void 0:h.module)!=null?p:r.manifest.module,l=(y=(C=r.manifest.publishConfig)==null?void 0:C.browser)!=null?y:r.manifest.browser,c=(v=(B=r.manifest.publishConfig)==null?void 0:B.bin)!=null?v:r.manifest.bin;o!=null&&s.accept.push(x.resolve(Me.root,o)),a!=null&&s.accept.push(x.resolve(Me.root,a)),typeof l==\"string\"&&s.accept.push(x.resolve(Me.root,l));for(let D of c.values())s.accept.push(x.resolve(Me.root,D));if(l instanceof Map)for(let[D,T]of l.entries())s.accept.push(x.resolve(Me.root,D)),typeof T==\"string\"&&s.accept.push(x.resolve(Me.root,T));let u=r.manifest.files!==null;if(u){s.reject.push(\"/*\");for(let D of r.manifest.files)xue(s.accept,D,{cwd:Me.root})}return await BVe(r.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function BVe(r,{hasExplicitFileList:e,globalList:t,ignoreList:i}){let n=[],s=new vo(r),o=[[Me.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Bue(a,{globalList:t,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Me.root)for(let C of u)g=g||C===\".gitignore\",f=f||C===\".npmignore\";let h=f?await wue(s,a,\".npmignore\"):g?await wue(s,a,\".gitignore\"):null,p=h!==null?[h].concat(l):l;Bue(a,{globalList:t,ignoreLists:l})&&(p=[...l,{accept:[],reject:[\"**/*\"]}]);for(let C of u)o.push([x.resolve(a,C),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Me.root,a))}return n.sort()}async function wue(r,e,t){let i={accept:[],reject:[]},n=await r.readFilePromise(x.join(e,t),\"utf8\");for(let s of n.split(/\\n/g))xue(i.reject,s,{cwd:e});return i}function bVe(r,{cwd:e}){let t=r[0]===\"!\";return t&&(r=r.slice(1)),r.match(/\\.{0,1}\\//)&&(r=x.resolve(e,r)),t&&(r=`!${r}`),r}function xue(r,e,{cwd:t}){let i=e.trim();i===\"\"||i[0]===\"#\"||r.push(bVe(i,{cwd:t}))}function Bue(r,{globalList:e,ignoreLists:t}){let i=LQ(r,e.accept);if(i!==0)return i===2;let n=LQ(r,e.reject);if(n!==0)return n===1;if(t!==null)for(let s of t){let o=LQ(r,s.accept);if(o!==0)return o===2;let a=LQ(r,s.reject);if(a!==0)return a===1}return!1}function LQ(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n][0]!==\"!\"?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n].slice(1)));return bue(r,i)?2:bue(r,t)?1:0}function bue(r,e){let t=e,i=[];for(let n=0;n<e.length;++n)e[n].includes(\"/\")?t!==e&&t.push(e[n]):(t===e&&(t=e.slice(0,n)),i.push(e[n]));return!!(n1.default.isMatch(r,t,{dot:!0,nocase:!0})||n1.default.isMatch(r,i,{dot:!0,basename:!0,nocase:!0}))}var Vu=class extends De{constructor(){super(...arguments);this.installIfNeeded=z.Boolean(\"--install-if-needed\",!1,{description:\"Run a preliminary `yarn install` if the package contains build scripts\"});this.dryRun=z.Boolean(\"-n,--dry-run\",!1,{description:\"Print the file paths without actually generating the package archive\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.out=z.String(\"-o,--out\",{description:\"Create the archive at the specified path\"});this.filename=z.String(\"--filename\",{hidden:!0})}async execute(){var l;let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await s1(n)&&(this.installIfNeeded?await i.install({cache:await Rt.find(t),report:new ti}):await i.restoreInstallState());let s=(l=this.out)!=null?l:this.filename,o=typeof s<\"u\"?x.resolve(this.context.cwd,QVe(s,{workspace:n})):x.resolve(n.cwd,\"package.tgz\");return(await Ge.start({configuration:t,stdout:this.context.stdout,json:this.json},async c=>{await o1(n,{report:c},async()=>{c.reportJson({base:K.fromPortablePath(n.cwd)});let u=await MQ(n);for(let g of u)c.reportInfo(null,K.fromPortablePath(g)),c.reportJson({location:K.fromPortablePath(g)});if(!this.dryRun){let g=await a1(n,u),f=O.createWriteStream(o);g.pipe(f),await new Promise(h=>{f.on(\"finish\",h)})}}),this.dryRun||(c.reportInfo(0,`Package archive generated in ${ee.pretty(t,o,ee.Type.PATH)}`),c.reportJson({output:K.fromPortablePath(o)}))})).exitCode()}};Vu.paths=[[\"pack\"]],Vu.usage=ve.Usage({description:\"generate a tarball from the active workspace\",details:\"\\n      This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\\n\\n      If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\\n    \",examples:[[\"Create an archive from the active workspace\",\"yarn pack\"],[\"List the files that would be made part of the workspace's archive\",\"yarn pack --dry-run\"],[\"Name and output the archive in a dedicated folder\",\"yarn pack --out /artifacts/%s-%v.tgz\"]]});function QVe(r,{workspace:e}){let t=r.replace(\"%s\",SVe(e)).replace(\"%v\",vVe(e));return K.toPortablePath(t)}function SVe(r){return r.manifest.name!==null?P.slugifyIdent(r.manifest.name):\"package\"}function vVe(r){return r.manifest.version!==null?r.manifest.version:\"unknown\"}var xVe=[\"dependencies\",\"devDependencies\",\"peerDependencies\"],PVe=\"workspace:\",DVe=(r,e)=>{var i,n;e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let t=r.project;for(let s of xVe)for(let o of r.manifest.getForScope(s).values()){let a=t.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===PVe)if(a===null){if(t.tryWorkspaceByIdent(o)===null)throw new at(21,`${P.prettyDescriptor(t.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector===\"*\"?c=(i=a.manifest.version)!=null?i:\"0.0.0\":l.selector===\"~\"||l.selector===\"^\"?c=`${l.selector}${(n=a.manifest.version)!=null?n:\"0.0.0\"}`:c=l.selector;let u=s===\"dependencies\"?P.makeDescriptor(o,\"unknown\"):null,g=u!==null&&r.manifest.ensureDependencyMeta(u).optional?\"optionalDependencies\":s;e[g][P.stringifyIdent(o)]=c}}},kVe={hooks:{beforeWorkspacePacking:DVe},commands:[Vu]},RVe=kVe;var Mue=J(\"crypto\"),Oue=Pe(Lue()),Kue=J(\"url\");async function XVe(r,e,{access:t,tag:i,registry:n,gitHead:s}){let o=r.manifest.name,a=r.manifest.version,l=P.stringifyIdent(o),c=(0,Mue.createHash)(\"sha1\").update(e).digest(\"hex\"),u=Oue.default.fromData(e).toString(),g=t!=null?t:Uue(r,o),f=await Hue(r),h=await ca.genPackageManifest(r),p=`${l}-${a}.tgz`,C=new Kue.URL(`${mo(n)}/${l}/-/${p}`);return{_id:l,_attachments:{[p]:{content_type:\"application/octet-stream\",data:e.toString(\"base64\"),length:e.length}},name:l,access:g,[\"dist-tags\"]:{[i]:a},versions:{[a]:{...h,_id:`${l}@${a}`,name:l,version:a,gitHead:s,dist:{shasum:c,integrity:u,tarball:C.toString()}}},readme:f}}async function ZVe(r){try{let{stdout:e}=await Cr.execvp(\"git\",[\"rev-parse\",\"--revs-only\",\"HEAD\"],{cwd:r});return e.trim()===\"\"?void 0:e.trim()}catch{return}}function Uue(r,e){let t=r.project.configuration;return r.manifest.publishConfig&&typeof r.manifest.publishConfig.access==\"string\"?r.manifest.publishConfig.access:t.get(\"npmPublishAccess\")!==null?t.get(\"npmPublishAccess\"):e.scope?\"restricted\":\"public\"}async function Hue(r){let e=K.toPortablePath(`${r.cwd}/README.md`),t=r.manifest.name,n=`# ${P.stringifyIdent(t)}\n`;try{n=await O.readFilePromise(e,\"utf8\")}catch(s){if(s.code===\"ENOENT\")return n;throw s}return n}var g1={npmAlwaysAuth:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"BOOLEAN\",default:!1},npmAuthIdent:{description:\"Authentication identity for the npm registry (_auth in npm and yarn v1)\",type:\"SECRET\",default:null},npmAuthToken:{description:\"Authentication token for the npm registry (_authToken in npm and yarn v1)\",type:\"SECRET\",default:null}},Gue={npmAuditRegistry:{description:\"Registry to query for audit reports\",type:\"STRING\",default:null},npmPublishRegistry:{description:\"Registry to push packages to\",type:\"STRING\",default:null},npmRegistryServer:{description:\"URL of the selected npm registry (note: npm enterprise isn't supported)\",type:\"STRING\",default:\"https://registry.yarnpkg.com\"}},_Ve={configuration:{...g1,...Gue,npmScopes:{description:\"Settings per package scope\",type:\"MAP\",valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1,...Gue}}},npmRegistries:{description:\"Settings per registry\",type:\"MAP\",normalizeKeys:mo,valueDefinition:{description:\"\",type:\"SHAPE\",properties:{...g1}}}},fetchers:[cQ,Ls],resolvers:[uQ,fQ,hQ]},$Ve=_Ve;var C1={};ut(C1,{default:()=>l9e});var kE=Pe(Bn());ls();var OQ=(i=>(i.All=\"all\",i.Production=\"production\",i.Development=\"development\",i))(OQ||{}),KQ=(s=>(s.Info=\"info\",s.Low=\"low\",s.Moderate=\"moderate\",s.High=\"high\",s.Critical=\"critical\",s))(KQ||{});var DE=[\"info\",\"low\",\"moderate\",\"high\",\"critical\"];function jue(r,e){let t=[],i=new Set,n=o=>{i.has(o)||(i.add(o),t.push(o))};for(let o of e)n(o);let s=new Set;for(;t.length>0;){let o=t.shift(),a=r.storedResolutions.get(o);if(typeof a>\"u\")throw new Error(\"Assertion failed: Expected the resolution to have been registered\");let l=r.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function e9e(r,e){return new Set([...r].filter(t=>!e.has(t)))}function t9e(r,e,{all:t}){let i=t?r.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=jue(r,l),g=jue(r,c);return e9e(g,u)}function que(r){let e={};for(let t of r)e[P.stringifyIdent(t)]=P.parseRange(t.range).selector;return e}function Jue(r){if(typeof r>\"u\")return new Set(DE);let e=DE.indexOf(r),t=DE.slice(e);return new Set(t)}function r9e(r,e){let t=Jue(e),i={};for(let n of t)i[n]=r[n];return i}function Wue(r,e){var i;let t=r9e(r,e);for(let n of Object.keys(t))if((i=t[n])!=null?i:0>0)return!0;return!1}function zue(r,e){var s;let t={},i={children:t},n=Object.values(r.advisories);if(e!=null){let o=Jue(e);n=n.filter(a=>o.has(a.severity))}for(let o of Ie.sortMap(n,a=>a.module_name))t[o.module_name]={label:o.module_name,value:ee.tuple(ee.Type.RANGE,o.findings.map(a=>a.version).join(\", \")),children:{ID:{label:\"ID\",value:ee.tuple(ee.Type.NUMBER,o.id)},Issue:{label:\"Issue\",value:ee.tuple(ee.Type.NO_HINT,o.title)},URL:{label:\"URL\",value:ee.tuple(ee.Type.URL,o.url)},Severity:{label:\"Severity\",value:ee.tuple(ee.Type.NO_HINT,o.severity)},[\"Vulnerable Versions\"]:{label:\"Vulnerable Versions\",value:ee.tuple(ee.Type.RANGE,o.vulnerable_versions)},[\"Patched Versions\"]:{label:\"Patched Versions\",value:ee.tuple(ee.Type.RANGE,o.patched_versions)},Via:{label:\"Via\",value:ee.tuple(ee.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(\">\")[0]))).join(\", \"))},Recommendation:{label:\"Recommendation\",value:ee.tuple(ee.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\\n/g,\" \"))}}};return i}function Vue(r,e,{all:t,environment:i}){let n=t?r.workspaces:[e],s=[\"all\",\"production\"].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[\"all\",\"development\"].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return que([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function Xue(r,e,{all:t}){var s;let i=t9e(r,e,{all:t}),n={};for(let o of r.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:\"0.0.0\",integrity:o.identHash,requires:que(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var _u=class extends De{constructor(){super(...arguments);this.all=z.Boolean(\"-A,--all\",!1,{description:\"Audit dependencies from all workspaces\"});this.recursive=z.Boolean(\"-R,--recursive\",!1,{description:\"Audit transitive dependencies as well\"});this.environment=z.String(\"--environment\",\"all\",{description:\"Which environments to cover\",validator:Zi(OQ)});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.severity=z.String(\"--severity\",\"info\",{description:\"Minimal severity requested for packages to be displayed\",validator:Zi(KQ)});this.excludes=z.Array(\"--exclude\",[],{description:\"Array of glob patterns of packages to exclude from audit\"});this.ignores=z.Array(\"--ignore\",[],{description:\"Array of glob patterns of advisory ID's to ignore in the audit report\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=Vue(i,n,{all:this.all,environment:this.environment}),o=Xue(i,n,{all:this.all});if(!this.recursive)for(let C of Object.keys(o))Object.prototype.hasOwnProperty.call(s,C)?o[C].requires={}:delete o[C];let a=Array.from(new Set([...t.get(\"npmAuditExcludePackages\"),...this.excludes]));if(a){for(let C of Object.keys(s))kE.default.isMatch(C,a)&&delete s[C];for(let C of Object.keys(o))kE.default.isMatch(C,a)&&delete o[C];for(let C of Object.keys(o))for(let y of Object.keys(o[C].requires))kE.default.isMatch(y,a)&&delete o[C].requires[y]}let l={requires:s,dependencies:o},c=or.getAuditRegistry(n.manifest,{configuration:t}),u,g=await ra.start({configuration:t,stdout:this.context.stdout},async()=>{u=await Ot.post(\"/-/npm/v1/security/audits/quick\",l,{authType:Ot.AuthType.BEST_EFFORT,configuration:t,jsonResponse:!0,registry:c})});if(g.hasErrors())return g.exitCode();let f=Array.from(new Set([...t.get(\"npmAuditIgnoreAdvisories\"),...this.ignores]));if(f){for(let C of Object.keys(u.advisories))if(kE.default.isMatch(C,f)){let y=u.advisories[C],B=0;y.findings.forEach(v=>B+=v.paths.length),u.metadata.vulnerabilities[y.severity]-=B,delete u.advisories[C]}}let h=Wue(u.metadata.vulnerabilities,this.severity);return!this.json&&h?(es.emitTree(zue(u,this.severity),{configuration:t,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(u),h||C.reportInfo(1,\"No audit suggestions\")})).exitCode()}};_u.paths=[[\"npm\",\"audit\"]],_u.usage=ve.Usage({description:\"perform a vulnerability audit against the installed packages\",details:`\n      This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n      For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \\`-A,--all\\`. To extend this search to both direct and transitive dependencies, use \\`-R,--recursive\\`.\n\n      Applying the \\`--severity\\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${DE.map(t=>`\\`${t}\\``).join(\", \")}.\n\n      If the \\`--json\\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n      If certain packages produce false positives for a particular environment, the \\`--exclude\\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \\`npmAuditExcludePackages\\` option.\n\n      If particular advisories are needed to be ignored, the \\`--ignore\\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \\`npmAuditIgnoreAdvisories\\` option.\n\n      To understand the dependency tree requiring vulnerable packages, check the raw report with the \\`--json\\` flag or use \\`yarn why <package>\\` to get more information as to who depends on them.\n    `,examples:[[\"Checks for known security issues with the installed packages. The output is a list of known issues.\",\"yarn npm audit\"],[\"Audit dependencies in all workspaces\",\"yarn npm audit --all\"],[\"Limit auditing to `dependencies` (excludes `devDependencies`)\",\"yarn npm audit --environment production\"],[\"Show audit report as valid JSON\",\"yarn npm audit --json\"],[\"Audit all direct and transitive dependencies\",\"yarn npm audit --recursive\"],[\"Output moderate (or more severe) vulnerabilities\",\"yarn npm audit --severity moderate\"],[\"Exclude certain packages\",\"yarn npm audit --exclude package1 --exclude package2\"],[\"Ignore specific advisories\",\"yarn npm audit --ignore 1234567 --ignore 7654321\"]]});var h1=Pe(Xr()),p1=J(\"util\"),$u=class extends De{constructor(){super(...arguments);this.fields=z.String(\"-f,--fields\",{description:\"A comma-separated list of manifest fields that should be displayed\"});this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.packages=z.Rest()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i}=await je.find(t,this.context.cwd),n=typeof this.fields<\"u\"?new Set([\"name\",...this.fields.split(/\\s*,\\s*/)]):null,s=[],o=!1,a=await Ge.start({configuration:t,includeFooter:!1,json:this.json,stdout:this.context.stdout},async l=>{for(let c of this.packages){let u;if(c===\".\"){let T=i.topLevelWorkspace;if(!T.manifest.name)throw new Qe(`Missing ${ee.pretty(t,\"name\",ee.Type.CODE)} field in ${K.fromPortablePath(x.join(T.cwd,xt.manifest))}`);u=P.makeDescriptor(T.manifest.name,\"unknown\")}else u=P.parseDescriptor(c);let g=Ot.getIdentUrl(u),f=d1(await Ot.get(g,{configuration:t,ident:u,jsonResponse:!0,customErrorMessage:Ot.customPackageError})),h=Object.keys(f.versions).sort(h1.default.compareLoose),C=f[\"dist-tags\"].latest||h[h.length-1],y=vt.validRange(u.range);if(y){let T=h1.default.maxSatisfying(h,y);T!==null?C=T:(l.reportWarning(0,`Unmet range ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0)}else Object.prototype.hasOwnProperty.call(f[\"dist-tags\"],u.range)?C=f[\"dist-tags\"][u.range]:u.range!==\"unknown\"&&(l.reportWarning(0,`Unknown tag ${P.prettyRange(t,u.range)}; falling back to the latest version`),o=!0);let B=f.versions[C],v={...f,...B,version:C,versions:h},D;if(n!==null){D={};for(let T of n){let H=v[T];if(typeof H<\"u\")D[T]=H;else{l.reportWarning(1,`The ${ee.pretty(t,T,ee.Type.CODE)} field doesn't exist inside ${P.prettyIdent(t,u)}'s information`),o=!0;continue}}}else this.json||(delete v.dist,delete v.readme,delete v.users),D=v;l.reportJson(D),this.json||s.push(D)}});p1.inspect.styles.name=\"cyan\";for(let l of s)(l!==s[0]||o)&&this.context.stdout.write(`\n`),this.context.stdout.write(`${(0,p1.inspect)(l,{depth:1/0,colors:!0,compact:!1})}\n`);return a.exitCode()}};$u.paths=[[\"npm\",\"info\"]],$u.usage=ve.Usage({category:\"Npm-related commands\",description:\"show information about a package\",details:\"\\n      This command fetches information about a package from the npm registry and prints it in a tree format.\\n\\n      The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\\n\\n      Append `@<range>` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\\n\\n      If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\\n\\n      By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\\n    \",examples:[[\"Show all available information about react (except the `dist`, `readme`, and `users` fields)\",\"yarn npm info react\"],[\"Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)\",\"yarn npm info react --json\"],[\"Show all available information about react@16.12.0\",\"yarn npm info react@16.12.0\"],[\"Show all available information about react@next\",\"yarn npm info react@next\"],[\"Show the description of react\",\"yarn npm info react --fields description\"],[\"Show all available versions of react\",\"yarn npm info react --fields versions\"],[\"Show the readme of react\",\"yarn npm info react --fields readme\"],[\"Show a few fields of react\",\"yarn npm info react --fields homepage,repository\"]]});function d1(r){if(Array.isArray(r)){let e=[];for(let t of r)t=d1(t),t&&e.push(t);return e}else if(typeof r==\"object\"&&r!==null){let e={};for(let t of Object.keys(r)){if(t.startsWith(\"_\"))continue;let i=d1(r[t]);i&&(e[t]=i)}return e}else return r||null}var Zue=Pe(Km()),eg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Login to the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Login to the publish registry\"});this.alwaysAuth=z.Boolean(\"--always-auth\",{description:\"Set the npmAlwaysAuth configuration\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Ge.start({configuration:t,stdout:this.context.stdout,includeFooter:!1},async s=>{let o=await s9e({configuration:t,registry:i,report:s,stdin:this.context.stdin,stdout:this.context.stdout}),a=`/-/user/org.couchdb.user:${encodeURIComponent(o.name)}`,l=await Ot.put(a,o,{attemptedAs:o.name,configuration:t,registry:i,jsonResponse:!0,authType:Ot.AuthType.NO_AUTH});return await n9e(i,l.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),s.reportInfo(0,\"Successfully logged in\")})).exitCode()}};eg.paths=[[\"npm\",\"login\"]],eg.usage=ve.Usage({category:\"Npm-related commands\",description:\"store new login info to access the npm registry\",details:\"\\n      This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\\n\\n      Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n    \",examples:[[\"Login to the default registry\",\"yarn npm login\"],[\"Login to the registry linked to the @my-scope registry\",\"yarn npm login --scope my-scope\"],[\"Login to the publish registry for the current package\",\"yarn npm login --publish\"]]});async function UQ({scope:r,publish:e,configuration:t,cwd:i}){return r&&e?or.getScopeRegistry(r,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):r?or.getScopeRegistry(r,{configuration:t}):e?or.getPublishRegistry((await Hh(t,i)).manifest,{configuration:t}):or.getDefaultRegistry({configuration:t})}async function n9e(r,e,{alwaysAuth:t,scope:i}){let n=o=>a=>{let l=Ie.isIndexableObject(a)?a:{},c=l[o],u=Ie.isIndexableObject(c)?c:{};return{...l,[o]:{...u,...t!==void 0?{npmAlwaysAuth:t}:{},npmAuthToken:e}}},s=i?{npmScopes:n(i)}:{npmRegistries:n(r)};return await ye.updateHomeConfiguration(s)}async function s9e({configuration:r,registry:e,report:t,stdin:i,stdout:n}){t.reportInfo(0,`Logging in to ${ee.pretty(r,e,ee.Type.URL)}`);let s=!1;if(e.match(/^https:\\/\\/npm\\.pkg\\.github\\.com(\\/|$)/)&&(t.reportInfo(0,\"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions.\"),s=!0),t.reportSeparator(),process.env.YARN_IS_TEST_ENV)return{name:process.env.YARN_INJECT_NPM_USER||\"\",password:process.env.YARN_INJECT_NPM_PASSWORD||\"\"};let{username:o,password:a}=await(0,Zue.prompt)([{type:\"input\",name:\"username\",message:\"Username:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n},{type:\"password\",name:\"password\",message:s?\"Token:\":\"Password:\",required:!0,onCancel:()=>process.exit(130),stdin:i,stdout:n}]);return t.reportSeparator(),{name:o,password:a}}var mp=new Set([\"npmAuthIdent\",\"npmAuthToken\"]),tg=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Logout of the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Logout of the publish registry\"});this.all=z.Boolean(\"-A,--all\",!1,{description:\"Logout of all registries\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i=async()=>{var c;let s=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),o=await ye.find(this.context.cwd,this.context.plugins),a=P.makeIdent((c=this.scope)!=null?c:null,\"pkg\");return!or.getAuthConfiguration(s,{configuration:o,ident:a}).get(\"npmAuthToken\")};return(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{if(this.all&&(await a9e(),s.reportInfo(0,\"Successfully logged out from everything\")),this.scope){await _ue(\"npmScopes\",this.scope),await i()?s.reportInfo(0,`Successfully logged out from ${this.scope}`):s.reportWarning(0,\"Scope authentication settings removed, but some other ones settings still apply to it\");return}let o=await UQ({configuration:t,cwd:this.context.cwd,publish:this.publish});await _ue(\"npmRegistries\",o),await i()?s.reportInfo(0,`Successfully logged out from ${o}`):s.reportWarning(0,\"Registry authentication settings removed, but some other ones settings still apply to it\")})).exitCode()}};tg.paths=[[\"npm\",\"logout\"]],tg.usage=ve.Usage({category:\"Npm-related commands\",description:\"logout of the npm registry\",details:\"\\n      This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\\n\\n      Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\\n\\n      Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\\n\\n      Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\\n    \",examples:[[\"Logout of the default registry\",\"yarn npm logout\"],[\"Logout of the @my-scope scope\",\"yarn npm logout --scope my-scope\"],[\"Logout of the publish registry for the current package\",\"yarn npm logout --publish\"],[\"Logout of all registries\",\"yarn npm logout --all\"]]});function o9e(r,e){let t=r[e];if(!Ie.isIndexableObject(t))return!1;let i=new Set(Object.keys(t));if([...mp].every(s=>!i.has(s)))return!1;for(let s of mp)i.delete(s);if(i.size===0)return r[e]=void 0,!0;let n={...t};for(let s of mp)delete n[s];return r[e]=n,!0}async function a9e(){let r=e=>{let t=!1,i=Ie.isIndexableObject(e)?{...e}:{};i.npmAuthToken&&(delete i.npmAuthToken,t=!0);for(let n of Object.keys(i))o9e(i,n)&&(t=!0);if(Object.keys(i).length!==0)return t?i:e};return await ye.updateHomeConfiguration({npmRegistries:r,npmScopes:r})}async function _ue(r,e){return await ye.updateHomeConfiguration({[r]:t=>{let i=Ie.isIndexableObject(t)?t:{};if(!Object.prototype.hasOwnProperty.call(i,e))return t;let n=i[e],s=Ie.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...mp].every(l=>!o.has(l)))return t;for(let l of mp)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:{...i,[e]:void 0};let a={};for(let l of mp)a[l]=void 0;return{...i,[e]:{...s,...a}}}})}var rg=class extends De{constructor(){super(...arguments);this.access=z.String(\"--access\",{description:\"The access for the published package (public or restricted)\"});this.tag=z.String(\"--tag\",\"latest\",{description:\"The tag on the registry that the package should be attached to\"});this.tolerateRepublish=z.Boolean(\"--tolerate-republish\",!1,{description:\"Warn and exit when republishing an already existing version of a package\"});this.otp=z.String(\"--otp\",{description:\"The OTP token to use with the command\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);if(n.manifest.private)throw new Qe(\"Private workspaces cannot be published\");if(n.manifest.name===null||n.manifest.version===null)throw new Qe(\"Workspaces must have valid names and versions to be published on an external registry\");await i.restoreInstallState();let s=n.manifest.name,o=n.manifest.version,a=or.getPublishRegistry(n.manifest,{configuration:t});return(await Ge.start({configuration:t,stdout:this.context.stdout},async c=>{var u,g;if(this.tolerateRepublish)try{let f=await Ot.get(Ot.getIdentUrl(s),{configuration:t,registry:a,ident:s,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(f,\"versions\"))throw new at(15,'Registry returned invalid data for - missing \"versions\" field');if(Object.prototype.hasOwnProperty.call(f.versions,o)){c.reportWarning(0,`Registry already knows about version ${o}; skipping.`);return}}catch(f){if(((g=(u=f.originalError)==null?void 0:u.response)==null?void 0:g.statusCode)!==404)throw f}await Wt.maybeExecuteWorkspaceLifecycleScript(n,\"prepublish\",{report:c}),await ca.prepareForPack(n,{report:c},async()=>{let f=await ca.genPackList(n);for(let B of f)c.reportInfo(null,B);let h=await ca.genPackStream(n,f),p=await Ie.bufferStream(h),C=await Cp.getGitHead(n.cwd),y=await Cp.makePublishBody(n,p,{access:this.access,tag:this.tag,registry:a,gitHead:C});await Ot.put(Ot.getIdentUrl(s),y,{configuration:t,registry:a,ident:s,otp:this.otp,jsonResponse:!0})}),c.reportInfo(0,\"Package archive published\")})).exitCode()}};rg.paths=[[\"npm\",\"publish\"]],rg.usage=ve.Usage({category:\"Npm-related commands\",description:\"publish the active workspace to the npm registry\",details:'\\n      This command will pack the active workspace into a fresh archive and upload it to the npm registry.\\n\\n      The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\\n\\n      Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka \"private packages\"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\\n    ',examples:[[\"Publish the active workspace\",\"yarn npm publish\"]]});var $ue=Pe(Xr());var ig=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String({required:!1})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s;if(typeof this.package<\"u\")s=P.parseIdent(this.package);else{if(!n)throw new ct(i.cwd,this.context.cwd);if(!n.manifest.name)throw new Qe(`Missing 'name' field in ${K.fromPortablePath(x.join(n.cwd,xt.manifest))}`);s=n.manifest.name}let o=await RE(s,t),l={children:Ie.sortMap(Object.entries(o),([c])=>c).map(([c,u])=>({value:ee.tuple(ee.Type.RESOLUTION,{descriptor:P.makeDescriptor(s,c),locator:P.makeLocator(s,u)})}))};return es.emitTree(l,{configuration:t,json:this.json,stdout:this.context.stdout})}};ig.paths=[[\"npm\",\"tag\",\"list\"]],ig.usage=ve.Usage({category:\"Npm-related commands\",description:\"list all dist-tags of a package\",details:`\n      This command will list all tags of a package from the npm registry.\n\n      If the package is not specified, Yarn will default to the current workspace.\n    `,examples:[[\"List all tags of package `my-pkg`\",\"yarn npm tag list my-pkg\"]]});async function RE(r,e){let t=`/-/package${Ot.getIdentUrl(r)}/dist-tags`;return Ot.get(t,{configuration:e,ident:r,jsonResponse:!0,customErrorMessage:Ot.customPackageError})}var ng=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseDescriptor(this.package,!0),o=s.range;if(!$ue.default.valid(o))throw new Qe(`The range ${ee.pretty(t,s.range,ee.Type.RANGE)} must be a valid semver version`);let a=or.getPublishRegistry(n.manifest,{configuration:t}),l=ee.pretty(t,s,ee.Type.IDENT),c=ee.pretty(t,o,ee.Type.RANGE),u=ee.pretty(t,this.tag,ee.Type.CODE);return(await Ge.start({configuration:t,stdout:this.context.stdout},async f=>{let h=await RE(s,t);Object.prototype.hasOwnProperty.call(h,this.tag)&&h[this.tag]===o&&f.reportWarning(0,`Tag ${u} is already set to version ${c}`);let p=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.put(p,o,{configuration:t,registry:a,ident:s,jsonRequest:!0,jsonResponse:!0}),f.reportInfo(0,`Tag ${u} added to version ${c} of package ${l}`)})).exitCode()}};ng.paths=[[\"npm\",\"tag\",\"add\"]],ng.usage=ve.Usage({category:\"Npm-related commands\",description:\"add a tag for a specific version of a package\",details:`\n      This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n    `,examples:[[\"Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`\",\"yarn npm tag add my-pkg@2.3.4-beta.4 beta\"]]});var sg=class extends De{constructor(){super(...arguments);this.package=z.String();this.tag=z.String()}async execute(){if(this.tag===\"latest\")throw new Qe(\"The 'latest' tag cannot be removed.\");let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);let s=P.parseIdent(this.package),o=or.getPublishRegistry(n.manifest,{configuration:t}),a=ee.pretty(t,this.tag,ee.Type.CODE),l=ee.pretty(t,s,ee.Type.IDENT),c=await RE(s,t);if(!Object.prototype.hasOwnProperty.call(c,this.tag))throw new Qe(`${a} is not a tag of package ${l}`);return(await Ge.start({configuration:t,stdout:this.context.stdout},async g=>{let f=`/-/package${Ot.getIdentUrl(s)}/dist-tags/${encodeURIComponent(this.tag)}`;await Ot.del(f,{configuration:t,registry:o,ident:s,jsonResponse:!0}),g.reportInfo(0,`Tag ${a} removed from package ${l}`)})).exitCode()}};sg.paths=[[\"npm\",\"tag\",\"remove\"]],sg.usage=ve.Usage({category:\"Npm-related commands\",description:\"remove a tag from a package\",details:`\n      This command will remove a tag from a package from the npm registry.\n    `,examples:[[\"Remove the `beta` tag from package `my-pkg`\",\"yarn npm tag remove my-pkg beta\"]]});var og=class extends De{constructor(){super(...arguments);this.scope=z.String(\"-s,--scope\",{description:\"Print username for the registry configured for a given scope\"});this.publish=z.Boolean(\"--publish\",!1,{description:\"Print username for the publish registry\"})}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),i;return this.scope&&this.publish?i=or.getScopeRegistry(this.scope,{configuration:t,type:or.RegistryType.PUBLISH_REGISTRY}):this.scope?i=or.getScopeRegistry(this.scope,{configuration:t}):this.publish?i=or.getPublishRegistry((await Hh(t,this.context.cwd)).manifest,{configuration:t}):i=or.getDefaultRegistry({configuration:t}),(await Ge.start({configuration:t,stdout:this.context.stdout},async s=>{var a,l;let o;try{o=await Ot.get(\"/-/whoami\",{configuration:t,registry:i,authType:Ot.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,\"\"):void 0})}catch(c){if(((a=c.response)==null?void 0:a.statusCode)===401||((l=c.response)==null?void 0:l.statusCode)===403){s.reportError(41,\"Authentication failed - your credentials may have expired\");return}else throw c}s.reportInfo(0,o.username)})).exitCode()}};og.paths=[[\"npm\",\"whoami\"]],og.usage=ve.Usage({category:\"Npm-related commands\",description:\"display the name of the authenticated user\",details:\"\\n      Print the username associated with the current authentication settings to the standard output.\\n\\n      When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\\n\\n      When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\\n    \",examples:[[\"Print username for the default registry\",\"yarn npm whoami\"],[\"Print username for the registry on a given scope\",\"yarn npm whoami --scope company\"]]});var A9e={configuration:{npmPublishAccess:{description:\"Default access of the published packages\",type:\"STRING\",default:null},npmAuditExcludePackages:{description:\"Array of glob patterns of packages to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:\"Array of glob patterns of advisory IDs to exclude from npm audit\",type:\"STRING\",default:[],isArray:!0}},commands:[_u,$u,eg,tg,rg,ng,ig,sg,og]},l9e=A9e;var S1={};ut(S1,{default:()=>Q9e,patchUtils:()=>ag});var ag={};ut(ag,{applyPatchFile:()=>GQ,diffFolders:()=>b1,ensureUnpatchedDescriptor:()=>E1,extractPackageToDisk:()=>B1,extractPatchFlags:()=>oge,isParentRequired:()=>w1,loadPatchFiles:()=>LE,makeDescriptor:()=>I1,makeLocator:()=>y1,makePatchHash:()=>Q1,parseDescriptor:()=>NE,parseLocator:()=>TE,parsePatchFile:()=>FE});var c9e=/^@@ -(\\d+)(,(\\d+))? \\+(\\d+)(,(\\d+))? @@.*/;function Ep(r){return x.relative(Me.root,x.resolve(Me.root,K.toPortablePath(r)))}function u9e(r){let e=r.trim().match(c9e);if(!e)throw new Error(`Bad header line: '${r}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var g9e=420,f9e=493;var ege=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),h9e=r=>({header:u9e(r),parts:[]}),p9e={[\"@\"]:\"header\",[\"-\"]:\"deletion\",[\"+\"]:\"insertion\",[\" \"]:\"context\",[\"\\\\\"]:\"pragma\",undefined:\"context\"};function d9e(r){let e=[],t=ege(),i=\"parsing header\",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),t.hunks.push(n),n=null)}function a(){o(),e.push(t),t=ege()}for(let l=0;l<r.length;l++){let c=r[l];if(i===\"parsing header\")if(c.startsWith(\"@@\"))i=\"parsing hunks\",t.hunks=[],l-=1;else if(c.startsWith(\"diff --git \")){t&&t.diffLineFromPath&&a();let u=c.match(/^diff --git a\\/(.*?) b\\/(.*?)\\s*$/);if(!u)throw new Error(`Bad diff line: ${c}`);t.diffLineFromPath=u[1],t.diffLineToPath=u[2]}else if(c.startsWith(\"old mode \"))t.oldMode=c.slice(9).trim();else if(c.startsWith(\"new mode \"))t.newMode=c.slice(9).trim();else if(c.startsWith(\"deleted file mode \"))t.deletedFileMode=c.slice(18).trim();else if(c.startsWith(\"new file mode \"))t.newFileMode=c.slice(14).trim();else if(c.startsWith(\"rename from \"))t.renameFrom=c.slice(12).trim();else if(c.startsWith(\"rename to \"))t.renameTo=c.slice(10).trim();else if(c.startsWith(\"index \")){let u=c.match(/(\\w+)\\.\\.(\\w+)/);if(!u)continue;t.beforeHash=u[1],t.afterHash=u[2]}else c.startsWith(\"semver exclusivity \")?t.semverExclusivity=c.slice(19).trim():c.startsWith(\"--- \")?t.fromPath=c.slice(6).trim():c.startsWith(\"+++ \")&&(t.toPath=c.slice(6).trim());else{let u=p9e[c[0]]||null;switch(u){case\"header\":o(),n=h9e(c);break;case null:i=\"parsing header\",a(),l-=1;break;case\"pragma\":{if(!c.startsWith(\"\\\\ No newline at end of file\"))throw new Error(`Unrecognized pragma in patch file: ${c}`);if(!s)throw new Error(\"Bad parser state: No newline at EOF pragma encountered without context\");s.noNewlineAtEndOfFile=!0}break;case\"context\":case\"deletion\":case\"insertion\":{if(!n)throw new Error(\"Bad parser state: Hunk lines encountered before hunk header\");s&&s.type!==u&&(n.parts.push(s),s=null),s||(s={type:u,lines:[],noNewlineAtEndOfFile:!1}),s.lines.push(c.slice(1))}break;default:Ie.assertNever(u);break}}}a();for(let{hunks:l}of e)if(l)for(let c of l)m9e(c);return e}function C9e(r){let e=[];for(let t of r){let{semverExclusivity:i,diffLineFromPath:n,diffLineToPath:s,oldMode:o,newMode:a,deletedFileMode:l,newFileMode:c,renameFrom:u,renameTo:g,beforeHash:f,afterHash:h,fromPath:p,toPath:C,hunks:y}=t,B=u?\"rename\":l?\"file deletion\":c?\"file creation\":y&&y.length>0?\"patch\":\"mode change\",v=null;switch(B){case\"rename\":{if(!u||!g)throw new Error(\"Bad parser state: rename from & to not given\");e.push({type:\"rename\",semverExclusivity:i,fromPath:Ep(u),toPath:Ep(g)}),v=g}break;case\"file deletion\":{let D=n||p;if(!D)throw new Error(\"Bad parse state: no path given for file deletion\");e.push({type:\"file deletion\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(l),hash:f})}break;case\"file creation\":{let D=s||C;if(!D)throw new Error(\"Bad parse state: no path given for file creation\");e.push({type:\"file creation\",semverExclusivity:i,hunk:y&&y[0]||null,path:Ep(D),mode:HQ(c),hash:h})}break;case\"patch\":case\"mode change\":v=C||s;break;default:Ie.assertNever(B);break}v&&o&&a&&o!==a&&e.push({type:\"mode change\",semverExclusivity:i,path:Ep(v),oldMode:HQ(o),newMode:HQ(a)}),v&&y&&y.length&&e.push({type:\"patch\",semverExclusivity:i,path:Ep(v),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error(\"Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string\");return e}function HQ(r){let e=parseInt(r,8)&511;if(e!==g9e&&e!==f9e)throw new Error(`Unexpected file mode string: ${r}`);return e}function FE(r){let e=r.split(/\\n/g);return e[e.length-1]===\"\"&&e.pop(),C9e(d9e(e))}function m9e(r){let e=0,t=0;for(let{type:i,lines:n}of r.parts)switch(i){case\"context\":t+=n.length,e+=n.length;break;case\"deletion\":e+=n.length;break;case\"insertion\":t+=n.length;break;default:Ie.assertNever(i);break}if(e!==r.header.original.length||t!==r.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(r.header.original.length)} ${i(r.header.patched.length)} @@, got @@ ${i(e)} ${i(t)} @@)`)}}var Ip=class extends Error{constructor(t,i){super(`Cannot apply hunk #${t+1}`);this.hunk=i}};async function yp(r,e,t){let i=await r.lstatPromise(e),n=await t();if(typeof n<\"u\"&&(e=n),r.lutimesPromise)await r.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await r.utimesPromise(e,i.atime,i.mtime);else throw new Error(\"Cannot preserve the time values of a symlink\")}async function GQ(r,{baseFs:e=new $t,dryRun:t=!1,version:i=null}={}){for(let n of r)if(!(n.semverExclusivity!==null&&i!==null&&!vt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case\"file deletion\":if(t){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await yp(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case\"rename\":if(t){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await yp(e,x.dirname(n.fromPath),async()=>{await yp(e,x.dirname(n.toPath),async()=>{await yp(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case\"file creation\":if(t){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`\n`)+(n.hunk.parts[0].noNewlineAtEndOfFile?\"\":`\n`):\"\";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[xr.SAFE_TIME,xr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,xr.SAFE_TIME,xr.SAFE_TIME)}break;case\"patch\":await yp(e,n.path,async()=>{await y9e(n,{baseFs:e,dryRun:t})});break;case\"mode change\":{let o=(await e.statPromise(n.path)).mode;if(tge(n.newMode)!==tge(o))continue;await yp(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:Ie.assertNever(n);break}}function tge(r){return(r&64)>0}function rge(r){return r.replace(/\\s+$/,\"\")}function I9e(r,e){return rge(r)===rge(e)}async function y9e({hunks:r,path:e},{baseFs:t,dryRun:i=!1}){let n=await t.statSync(e).mode,o=(await t.readFileSync(e,\"utf8\")).split(/\\n/),a=[],l=0,c=0;for(let g of r){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),C=Math.max(h,p),y=0,B=0,v=null;for(;y<=C;){if(y<=h&&(B=f-y,v=ige(g,o,B),v!==null)){y=-y;break}if(y<=p&&(B=f+y,v=ige(g,o,B),v!==null))break;y+=1}if(v===null)throw new Ip(r.indexOf(g),g);a.push(v),l+=y,c=B+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case\"splice\":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case\"pop\":o.pop();break;case\"push\":o.push(f.line);break;default:Ie.assertNever(f);break}await t.writeFilePromise(e,o.join(`\n`),{mode:n})}function ige(r,e,t){let i=[];for(let n of r.parts)switch(n.type){case\"context\":case\"deletion\":{for(let s of n.lines){let o=e[t];if(o==null||!I9e(o,s))return null;t+=1}n.type===\"deletion\"&&(i.push({type:\"splice\",index:t-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:\"push\",line:\"\"}))}break;case\"insertion\":i.push({type:\"splice\",index:t,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:\"pop\"});break;default:Ie.assertNever(n.type);break}return i}var B9e=/^builtin<([^>]+)>$/;function m1(r,e){let{source:t,selector:i,params:n}=P.parseRange(r);if(t===null)throw new Error(\"Patch locators must explicitly define their source\");let s=i?i.split(/&/).map(c=>K.toPortablePath(c)):[],o=n&&typeof n.locator==\"string\"?P.parseLocator(n.locator):null,a=n&&typeof n.version==\"string\"?n.version:null,l=e(t);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function NE(r){let{sourceItem:e,...t}=m1(r.range,P.parseDescriptor);return{...t,sourceDescriptor:e}}function TE(r){let{sourceItem:e,...t}=m1(r.reference,P.parseLocator);return{...t,sourceLocator:e}}function E1(r){if(!r.range.startsWith(\"patch:\"))return r;let{sourceItem:e}=m1(r.range,P.parseDescriptor);return e}function nge({parentLocator:r,sourceItem:e,patchPaths:t,sourceVersion:i,patchHash:n},s){let o=r!==null?{locator:P.stringifyLocator(r)}:{},a=typeof i<\"u\"?{version:i}:{},l=typeof n<\"u\"?{hash:n}:{};return P.makeRange({protocol:\"patch:\",source:s(e),selector:t.join(\"&\"),params:{...a,...l,...o}})}function I1(r,{parentLocator:e,sourceDescriptor:t,patchPaths:i}){return P.makeDescriptor(r,nge({parentLocator:e,sourceItem:t,patchPaths:i},P.stringifyDescriptor))}function y1(r,{parentLocator:e,sourcePackage:t,patchPaths:i,patchHash:n}){return P.makeLocator(r,nge({parentLocator:e,sourceItem:t,sourceVersion:t.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function sge({onAbsolute:r,onRelative:e,onBuiltin:t},i){i.startsWith(\"~\")&&(i=i.slice(1));let s=i.match(B9e);return s!==null?t(s[1]):x.isAbsolute(i)?r(i):e(i)}function oge(r){let e=r.startsWith(\"~\");return e&&(r=r.slice(1)),{optional:e}}function w1(r){return sge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},r)}async function LE(r,e,t){let i=r!==null?await t.fetcher.fetch(r,t):null,n=i&&i.localPath?{packageFs:new qt(Me.root),prefixPath:x.relative(Me.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await Ie.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=oge(o),l=await sge({onAbsolute:async()=>await O.readFilePromise(o,\"utf8\"),onRelative:async()=>{if(n===null)throw new Error(\"Assertion failed: The parent locator should have been fetched\");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),\"utf8\")},onBuiltin:async c=>await t.project.configuration.firstHook(u=>u.getBuiltinPatch,t.project,c)},o);return{...a,source:l}})));for(let o of s)typeof o.source==\"string\"&&(o.source=o.source.replace(/\\r\\n?/g,`\n`));return s}async function B1(r,{cache:e,project:t}){let i=t.storedPackages.get(r.locatorHash);if(typeof i>\"u\")throw new Error(\"Assertion failed: Expected the package to be registered\");let n=t.storedChecksums,s=new ti,o=t.configuration.makeFetcher(),a=await o.fetch(r,{cache:e,project:t,fetcher:o,checksums:n,report:s}),l=await O.mktempPromise(),c=x.join(l,\"source\"),u=x.join(l,\"user\"),g=x.join(l,\".yarn-patch.json\");return await Promise.all([O.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),O.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),O.writeJsonPromise(g,{locator:P.stringifyLocator(r),version:i.version})]),O.detachTemp(l),u}async function b1(r,e){let t=K.fromPortablePath(r).replace(/\\\\/g,\"/\"),i=K.fromPortablePath(e).replace(/\\\\/g,\"/\"),{stdout:n,stderr:s}=await Cr.execvp(\"git\",[\"-c\",\"core.safecrlf=false\",\"diff\",\"--src-prefix=a/\",\"--dst-prefix=b/\",\"--ignore-cr-at-eol\",\"--full-index\",\"--no-index\",\"--no-renames\",\"--text\",t,i],{cwd:K.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:\"1\",HOME:\"\",XDG_CONFIG_HOME:\"\",USERPROFILE:\"\"}});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.\nThe following error was reported by 'git':\n${s}`);let o=t.startsWith(\"/\")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${Ie.escapeRegExp(`/${o(t)}/`)})`,\"g\"),\"$1/\").replace(new RegExp(`(a|b)${Ie.escapeRegExp(`/${o(i)}/`)}`,\"g\"),\"$1/\").replace(new RegExp(Ie.escapeRegExp(`${t}/`),\"g\"),\"\").replace(new RegExp(Ie.escapeRegExp(`${i}/`),\"g\"),\"\")}function Q1(r,e){let t=[];for(let{source:i}of r){if(i===null)continue;let n=FE(i);for(let s of n){let{semverExclusivity:o,...a}=s;o!==null&&e!==null&&!vt.satisfiesWithPrereleases(e,o)||t.push(JSON.stringify(a))}}return li.makeHash(`${3}`,...t).slice(0,6)}function age(r,{configuration:e,report:t}){for(let i of r.parts)for(let n of i.lines)switch(i.type){case\"context\":t.reportInfo(null,`  ${ee.pretty(e,n,\"grey\")}`);break;case\"deletion\":t.reportError(28,`- ${ee.pretty(e,n,ee.Type.REMOVED)}`);break;case\"insertion\":t.reportError(28,`+ ${ee.pretty(e,n,ee.Type.ADDED)}`);break;default:Ie.assertNever(i.type)}}var YQ=class{supports(e,t){return!!e.reference.startsWith(\"patch:\")}getLocalPath(e,t){return null}async fetch(e,t){let i=t.checksums.get(e.locatorHash)||null,[n,s,o]=await t.cache.fetchPackageFromCache(e,i,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,`${P.prettyLocator(t.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck,...t.cacheOptions});return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=TE(e),a=await LE(i,o,t),l=await O.mktempPromise(),c=x.join(l,\"current.zip\"),u=await t.fetcher.fetch(n,t),g=P.getIdentVendorPath(e),f=await an(),h=new Wr(c,{libzip:f,create:!0,level:t.project.configuration.get(\"compressionLevel\")});await Ie.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:C}of a){if(p===null)continue;let y=new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")}),B=new qt(x.resolve(Me.root,g),{baseFs:y});try{await GQ(FE(p),{baseFs:B,version:s})}catch(v){if(!(v instanceof Ip))throw v;let D=t.project.configuration.get(\"enableInlineHunks\"),T=!D&&!C?\" (set enableInlineHunks for details)\":\"\",H=`${P.prettyLocator(t.project.configuration,e)}: ${v.message}${T}`,j=$=>{!D||age(v.hunk,{configuration:t.project.configuration,report:$})};if(y.discardAndClose(),C){t.report.reportWarningOnce(66,H,{reportExtra:j});continue}else throw new at(66,H,j)}y.saveAndClose()}return new Wr(c,{libzip:f,level:t.project.configuration.get(\"compressionLevel\")})}};var jQ=class{supportsDescriptor(e,t){return!!e.range.startsWith(\"patch:\")}supportsLocator(e,t){return!!e.reference.startsWith(\"patch:\")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,i){let{patchPaths:n}=NE(e);return n.every(s=>!w1(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(t)})}getResolutionDependencies(e,t){let{sourceDescriptor:i}=NE(e);return[i]}async getCandidates(e,t,i){if(!i.fetchOptions)throw new Error(\"Assertion failed: This resolver cannot be used unless a fetcher is configured\");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=NE(e),a=await LE(n,o,i.fetchOptions),l=t.get(s.descriptorHash);if(typeof l>\"u\")throw new Error(\"Assertion failed: The dependency should have been resolved\");let c=Q1(a,l.version);return[y1(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,t,i){return null}async resolve(e,t){let{sourceLocator:i}=TE(e);return{...await t.resolver.resolve(i,t),...e}}};var Ag=class extends De{constructor(){super(...arguments);this.save=z.Boolean(\"-s,--save\",!1,{description:\"Add the patch to your resolution entries\"});this.patchFolder=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let s=x.resolve(this.context.cwd,K.toPortablePath(this.patchFolder)),o=x.join(s,\"../source\"),a=x.join(s,\"../.yarn-patch.json\");if(!O.existsSync(o))throw new Qe(\"The argument folder didn't get created by 'yarn patch'\");let l=await b1(o,s),c=await O.readJsonPromise(a),u=P.parseLocator(c.locator,!0);if(!i.storedPackages.has(u.locatorHash))throw new Qe(\"No package found in the project for the given locator\");if(!this.save){this.context.stdout.write(l);return}let g=t.get(\"patchFolder\"),f=x.join(g,`${P.slugifyLocator(u)}.patch`);await O.mkdirPromise(g,{recursive:!0}),await O.writeFilePromise(f,l);let h=new Map;for(let p of i.storedPackages.values()){if(P.isVirtualLocator(p))continue;let C=p.dependencies.get(u.identHash);if(!C)continue;let y=P.isVirtualDescriptor(C)?P.devirtualizeDescriptor(C):C,B=E1(y),v=i.storedResolutions.get(B.descriptorHash);if(!v)throw new Error(\"Assertion failed: Expected the resolution to have been registered\");if(!i.storedPackages.get(v))throw new Error(\"Assertion failed: Expected the package to have been registered\");let T=i.originalPackages.get(p.locatorHash);if(!T)throw new Error(\"Assertion failed: Expected the original package to have been registered\");let H=T.dependencies.get(C.identHash);if(!H)throw new Error(\"Assertion failed: Expected the original dependency to have been registered\");h.set(H.descriptorHash,H)}for(let p of h.values()){let C=I1(p,{parentLocator:null,sourceDescriptor:P.convertLocatorToDescriptor(u),sourceVersion:null,patchPaths:[`./${x.relative(i.cwd,f)}`]});i.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(C),description:p.range}},reference:C.range})}await i.persist()}};Ag.paths=[[\"patch-commit\"]],Ag.usage=ve.Usage({description:\"generate a patch out of a directory\",details:\"\\n      By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\\n\\n      With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\\n\\n      Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\\n    \"});var lg=class extends De{constructor(){super(...arguments);this.json=z.Boolean(\"--json\",!1,{description:\"Format the output as an NDJSON stream\"});this.package=z.String()}async execute(){let t=await ye.find(this.context.cwd,this.context.plugins),{project:i,workspace:n}=await je.find(t,this.context.cwd),s=await Rt.find(t);if(!n)throw new ct(i.cwd,this.context.cwd);await i.restoreInstallState();let o=P.parseLocator(this.package);if(o.reference===\"unknown\"){let a=Ie.mapAndFilter([...i.storedPackages.values()],l=>l.identHash!==o.identHash?Ie.mapAndFilter.skip:P.isVirtualLocator(l)?Ie.mapAndFilter.skip:l);if(a.length===0)throw new Qe(\"No package found in the project for the given locator\");if(a.length>1)throw new Qe(`Multiple candidate packages found; explicitly choose one of them (use \\`yarn why <package>\\` to get more information as to who depends on them):\n${a.map(l=>`\n- ${P.prettyLocator(t,l)}`).join(\"\")}`);o=a[0]}if(!i.storedPackages.has(o.locatorHash))throw new Qe(\"No package found in the project for the given locator\");await Ge.start({configuration:t,json:this.json,stdout:this.context.stdout},async a=>{let l=await B1(o,{cache:s,project:i});a.reportJson({locator:P.stringifyLocator(o),path:K.fromPortablePath(l)}),a.reportInfo(0,`Package ${P.prettyLocator(t,o)} got extracted with success!`),a.reportInfo(0,`You can now edit the following folder: ${ee.pretty(t,K.fromPortablePath(l),\"magenta\")}`),a.reportInfo(0,`Once you are done run ${ee.pretty(t,`yarn patch-commit -s ${process.platform===\"win32\"?'\"':\"\"}${K.fromPortablePath(l)}${process.platform===\"win32\"?'\"':\"\"}`,\"cyan\")} and Yarn will store a patchfile based on your changes.`)})}};lg.paths=[[\"patch\"]],lg.usage=ve.Usage({description:\"prepare a package for patching\",details:\"\\n      This command will cause a package to be extracted in a temporary directory intended to be editable at will.\\n      \\n      Once you're done with your changes, run `yarn patch-commit -s <path>` (with `<path>` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\\n    \"});var b9e={configuration:{enableInlineHunks:{description:\"If true, the installs will print unmatched patch hunks\",type:\"BOOLEAN\",default:!1},patchFolder:{description:\"Folder where the patch files must be written\",type:\"ABSOLUTE_PATH\",default:\"./.yarn/patches\"}},commands:[Ag,lg],fetchers:[YQ],resolvers:[jQ]},Q9e=b9e;var D1={};ut(D1,{default:()=>x9e});var qQ=class{supportsPackage(e,t){return this.isEnabled(t)}async findPackageLocation(e,t){if(!this.isEnabled(t))throw new Error(\"Assertion failed: Expected the pnpm linker to be enabled\");let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s>\"u\")throw new Qe(`Couldn't find ${P.prettyLocator(t.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,t){if(!this.isEnabled(t))return null;let i=x1(),n=t.project.installersCustomData.get(i);if(!n)throw new Qe(`The project in ${ee.pretty(t.project.configuration,`${t.project.cwd}/package.json`,ee.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\\/node_modules\\/(@[^/]*\\/)?[^/]+)(\\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new v1(e)}isEnabled(e){return e.project.configuration.get(\"nodeLinker\")===\"pnpm\"}},v1=class{constructor(e){this.opts=e;this.asyncActions=new Ie.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return x1()}attachCustomData(e){}async installPackage(e,t,i){switch(e.linkType){case\"SOFT\":return this.installPackageSoft(e,t,i);case\"HARD\":return this.installPackageHard(e,t,i)}throw new Error(\"Assertion failed: Unsupported package link type\")}async installPackageSoft(e,t,i){let n=x.resolve(t.packageFs.getRealPath(),t.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,t,i){var u;let n=S9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await O.mkdirPromise(n,{recursive:!0}),await O.copyPromise(n,t.prefixPath,{baseFs:t.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await ot.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?u:new ot,misc:{hasBindingGyp:Co.hasBindingGyp(t)}},l=this.opts.project.getDependencyMeta(o,e.version),c=Co.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,t){this.opts.project.configuration.get(\"nodeLinker\")===\"pnpm\"&&(!Age(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,xt.nodeModules),o=[],a=await lge(s);for(let[l,c]of t){let u=c;Age(c,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,\"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies\"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g>\"u\")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),C=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(C){if(C.isSymbolicLink()&&await O.readlinkPromise(h)===p)return;await O.removePromise(h)}await O.mkdirpPromise(x.dirname(h)),process.platform==\"win32\"?await O.symlinkPromise(g,h,\"junction\"):await O.symlinkPromise(p,h)}))}o.push(cge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,t){throw new Error(\"External dependencies haven't been implemented for the pnpm linker\")}async finalizeInstall(){let e=gge(this.opts.project);if(this.opts.project.configuration.get(\"nodeLinker\")!==\"pnpm\")await O.removePromise(e);else{let t=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);t.push(O.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===xt.nodeModules){let h=await lge(f);return h.delete(l.join(x.sep)),cge(f,h)}else return O.removePromise(f)}))).catch(u=>{if(u.code!==\"ENOENT\")throw u}))}}let n;try{n=await O.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||t.push(O.removePromise(x.join(e,s)));await Promise.all(t)}return await this.asyncActions.wait(),await P1(e),this.opts.project.configuration.get(\"nodeLinker\")!==\"node-modules\"&&await P1(uge(this.opts.project)),{customData:this.customData}}};function x1(){return JSON.stringify({name:\"PnpmInstaller\",version:2})}function uge(r){return x.join(r.cwd,xt.nodeModules)}function gge(r){return x.join(uge(r),\".store\")}function S9e(r,{project:e}){let t=P.slugifyLocator(r),i=P.getIdentVendorPath(r);return x.join(gge(e),t,i)}function Age(r,{project:e}){return!P.isVirtualLocator(r)||!e.tryWorkspaceByLocator(r)}async function lge(r){let e=new Map,t=[];try{t=await O.readdirPromise(r,{withFileTypes:!0})}catch(i){if(i.code!==\"ENOENT\")throw i}try{for(let i of t)if(!i.name.startsWith(\".\"))if(i.name.startsWith(\"@\")){let n=await O.readdirPromise(x.join(r,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!==\"ENOENT\")throw i}return e}async function cge(r,e){var n;let t=[],i=new Set;for(let s of e.keys()){t.push(O.removePromise(x.join(r,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(t).then(()=>Promise.all([...i].map(s=>P1(x.join(r,s)))))}async function P1(r){try{await O.rmdirPromise(r)}catch(e){if(e.code!==\"ENOENT\"&&e.code!==\"ENOTEMPTY\")throw e}}var v9e={linkers:[qQ]},x9e=v9e;var Bb=()=>({modules:new Map([[\"@yarnpkg/cli\",Nm],[\"@yarnpkg/core\",sm],[\"@yarnpkg/fslib\",Wp],[\"@yarnpkg/libzip\",xC],[\"@yarnpkg/parsers\",td],[\"@yarnpkg/shell\",RC],[\"clipanion\",T$(ud)],[\"semver\",P9e],[\"typanion\",hn],[\"yup\",D9e],[\"@yarnpkg/plugin-essentials\",CM],[\"@yarnpkg/plugin-compat\",wM],[\"@yarnpkg/plugin-dlx\",BM],[\"@yarnpkg/plugin-file\",vM],[\"@yarnpkg/plugin-git\",dM],[\"@yarnpkg/plugin-github\",xM],[\"@yarnpkg/plugin-http\",PM],[\"@yarnpkg/plugin-init\",FM],[\"@yarnpkg/plugin-link\",NM],[\"@yarnpkg/plugin-nm\",dO],[\"@yarnpkg/plugin-npm\",f1],[\"@yarnpkg/plugin-npm-cli\",C1],[\"@yarnpkg/plugin-pack\",A1],[\"@yarnpkg/plugin-patch\",S1],[\"@yarnpkg/plugin-pnp\",sO],[\"@yarnpkg/plugin-pnpm\",D1]]),plugins:new Set([\"@yarnpkg/plugin-essentials\",\"@yarnpkg/plugin-compat\",\"@yarnpkg/plugin-dlx\",\"@yarnpkg/plugin-file\",\"@yarnpkg/plugin-git\",\"@yarnpkg/plugin-github\",\"@yarnpkg/plugin-http\",\"@yarnpkg/plugin-init\",\"@yarnpkg/plugin-link\",\"@yarnpkg/plugin-nm\",\"@yarnpkg/plugin-npm\",\"@yarnpkg/plugin-npm-cli\",\"@yarnpkg/plugin-pack\",\"@yarnpkg/plugin-patch\",\"@yarnpkg/plugin-pnp\",\"@yarnpkg/plugin-pnpm\"])});$0({binaryVersion:Tr||\"<unknown>\",pluginConfiguration:Bb()});})();\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\n/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * is-windows <https://github.com/jonschlinkert/is-windows>\n *\n * Copyright © 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n/**\n  @license\n  Copyright (c) 2015, Rebecca Turner\n\n  Permission to use, copy, modify, and/or distribute this software for any\n  purpose with or without fee is hereby granted, provided that the above\n  copyright notice and this permission notice appear in all copies.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n  PERFORMANCE OF THIS SOFTWARE.\n */\n/**\n  @license\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to permit\n  persons to whom the Software is furnished to do so, subject to the\n  following conditions:\n\n  The above copyright notice and this permission notice shall be included\n  in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n  NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n  USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/**\n  @license\n  Copyright Node.js contributors. All rights reserved.\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to\n  deal in the Software without restriction, including without limitation the\n  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n  sell copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n  IN THE SOFTWARE.\n*/\n/**\n  @license\n  The MIT License (MIT)\n\n  Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n  THE SOFTWARE.\n*/\n"
  },
  {
    "path": "circuits-circom/tasks/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n\nyarnPath: .yarn/releases/yarn-3.6.3.cjs\n"
  },
  {
    "path": "circuits-circom/tasks/package.json",
    "content": "{\n    \"name\": \"@zkp2p/circuits-circom-tasks\",\n    \"version\": \"0.0.1\",\n    \"packageManager\": \"yarn@3.6.3\",\n    \"description\": \"Circom circuit tasks for ZKP2P\",\n    \"contributors\": [\n        \"0xSachinK\",\n        \"richardliang\"\n    ],\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@zk-email/helpers\": \"^3.0.2\",\n        \"circomlib\": \"^2.0.5\"\n    },\n    \"scripts\": {\n        \"test\": \"jest\",\n        \"build\": \"tsc\",\n        \"pubkey_fetch_and_hash\": \"npx tsx ./pubkey_hash.ts 1\",\n        \"pubkey_hash\": \"npx tsx ./pubkey_hash.ts 0\"\n    },\n    \"devDependencies\": {\n        \"@babel/preset-env\": \"^7.22.2\",\n        \"@babel/preset-react\": \"^7.22.0\",\n        \"@babel/preset-typescript\": \"^7.21.5\",\n        \"@esbuild-plugins/node-globals-polyfill\": \"^0.2.3\",\n        \"@esbuild-plugins/node-modules-polyfill\": \"^0.2.2\",\n        \"@openzeppelin/contracts\": \"^4.9.1\",\n        \"@types/atob\": \"^2.1.2\",\n        \"@types/jest\": \"^29.5.1\",\n        \"@types/mocha\": \"^10.0.1\",\n        \"@types/node\": \"^18.0.6\",\n        \"@types/node-forge\": \"^1.3.2\",\n        \"@types/tar-stream\": \"^2.2.2\",\n        \"babel-preset-jest\": \"^29.5.0\",\n        \"browserify-fs\": \"^1.0.0\",\n        \"browserstack-local\": \"^1.5.1\",\n        \"browserstack-node-sdk\": \"^1.6.1\",\n        \"chai\": \"^4.3.7\",\n        \"circom_tester\": \"^0.0.19\",\n        \"circomlibjs\": \"^0.1.7\",\n        \"ganache\": \"^7.3.0\",\n        \"husky\": \"^8.0.3\",\n        \"jest\": \"^29.5.0\",\n        \"jest-environment-jsdom\": \"^29.5.0\",\n        \"jest-fetch-mock\": \"^3.0.3\",\n        \"jest-junit\": \"^15.0.0\",\n        \"madge\": \"^6.0.0\",\n        \"mocha\": \"^10.2.0\",\n        \"msw\": \"^1.0.1\",\n        \"node-forge\": \"^1.3.1\",\n        \"nodemon\": \"^2.0.19\",\n        \"process\": \"^0.11.10\",\n        \"puppeteer\": \"18.1\",\n        \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n        \"selenium-webdriver\": \"^4.8.1\",\n        \"ts-jest\": \"^29.1.0\",\n        \"ts-node\": \"^10.9.1\",\n        \"ts-node-dev\": \"^2.0.0\",\n        \"typescript\": \"^5.1.6\",\n        \"util\": \"^0.12.5\",\n        \"vite-plugin-commonjs\": \"^0.7.1\",\n        \"vite-plugin-ngmi-polyfill\": \"^0.0.2\",\n        \"vite-plugin-node-polyfills\": \"^0.8.2\"\n    },\n    \"jest\": {\n        \"transform\": {\n            \"^.+\\\\.tsx?$\": \"ts-jest\"\n        },\n        \"moduleFileExtensions\": [\n            \"ts\",\n            \"tsx\",\n            \"js\",\n            \"jsx\",\n            \"json\"\n        ],\n        \"testEnvironment\": \"node\",\n        \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.tsx?$\",\n        \"transformIgnorePatterns\": [\n            \"node_modules/(?!(@zk-email)/)\"\n        ]\n    },\n    \"yarnPath\": \".yarn/releases/yarn-3.6.3.cjs\"\n}\n"
  },
  {
    "path": "circuits-circom/tasks/pubkey_hash.ts",
    "content": "import { resolveTxt } from 'dns';\nimport { promisify } from 'util';\nimport { buildMimcSponge } from \"circomlibjs\";\nimport {\n    toCircomBigIntBytes,\n} from \"@zk-email/helpers/src/binaryFormat\";\nimport forge from 'node-forge';\n\n\nlet mimcHasher: any;\nexport async function initializeMimcHasher() {\n    if (!mimcHasher) {\n        mimcHasher = await buildMimcSponge();\n    }\n}\n\n\nconst resolveTxtAsync = promisify(resolveTxt);\n\n// Fetches the DKIM public key from DNS\nexport async function fetchDnsTxtRecord(domain: string, selector: string): Promise<string[]> {\n    const queryDomain = `${selector}._domainkey.${domain}`;\n    try {\n        const records = await resolveTxtAsync(queryDomain);\n        return records.flat();\n    } catch (error) {\n        console.error(`Error fetching DNS TXT record for ${queryDomain}:`, error);\n        throw error;\n    }\n}\n\n// Extract modulus from DKIM public key\nexport const extractModulus = (publicKey: string): string[] => {\n    const certMatch = publicKey.match(/p=([0-9A-Za-z/+]+=*)/);\n\n    if (!certMatch) {\n        throw new Error('Failed to extract modulus from DKIM public key');\n    }\n\n    // Decode base64 encoded cert\n    const decodedCert = Buffer.from(certMatch[1], 'base64').toString('binary');\n\n    // Parse the ASN.1 structure\n    const asn1 = forge.asn1.fromDer(decodedCert);\n    const rsaPublicKey = forge.pki.publicKeyFromAsn1(asn1);\n\n    // Extract modulus as a BigInt\n    const modulusBigInt = BigInt(`0x${rsaPublicKey.n.toString(16)}`);\n    console.log('Modulus:', modulusBigInt.toString());\n\n    // Convert to the desired format\n    const modulusInt = toCircomBigIntBytes(modulusBigInt);\n    return modulusInt;\n}\n\nexport const mimcSponge = (arr: (number | bigint | string)[]): string =>\n    mimcHasher.F.toString(mimcHasher.multiHash(arr, \"123\", \"1\"));\n\n\n\n// If file called directly with `npx tsx pubkey_hash.ts`\nif (typeof require !== \"undefined\" && require.main === module) {\n    const fetch = process.argv[2]\n    let domainKey;\n\n    initializeMimcHasher().then(() => {\n        if (fetch == '1') {\n            const domain = process.argv[3]\n            const selector = process.argv[4]\n\n            console.log(\"Fetching domain key:\", domain, selector)\n            fetchDnsTxtRecord(domain, selector)\n                .then(_domainKey => {\n                    domainKey = _domainKey[0];\n                    console.log(\"Fetched domain key:\", domainKey);\n\n                    const modulus = extractModulus(domainKey);\n                    console.log(\"Modulus:\", modulus);\n                    console.log(\"Modulus Hash:\", mimcSponge(modulus));\n                })\n                .catch(error => console.error('Failed to fetch domain key:', error));\n        } else {\n            console.log(\"Using domain key:\", process.argv[3]);\n            domainKey = process.argv[3];\n\n            const modulus = extractModulus(domainKey);\n            console.log(\"Modulus:\", modulus);\n            console.log(\"Modulus Hash:\", mimcSponge(modulus));\n        }\n    }).catch((err) => {\n        console.log('Failed to initialize hasher', err);\n    });\n}"
  },
  {
    "path": "client/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n"
  },
  {
    "path": "client/config/env.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst paths = require('./paths');\n\n// Make sure that including paths.js after env.js will read .env variables.\ndelete require.cache[require.resolve('./paths')];\n\nconst NODE_ENV = process.env.NODE_ENV;\nif (!NODE_ENV) {\n  throw new Error(\n    'The NODE_ENV environment variable is required but was not specified.'\n  );\n}\n\n// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use\nconst dotenvFiles = [\n  `${paths.dotenv}.${NODE_ENV}.local`,\n  // Don't include `.env.local` for `test` environment\n  // since normally you expect tests to produce the same\n  // results for everyone\n  NODE_ENV !== 'test' && `${paths.dotenv}.local`,\n  `${paths.dotenv}.${NODE_ENV}`,\n  paths.dotenv,\n].filter(Boolean);\n\n// Load environment variables from .env* files. Suppress warnings using silent\n// if this file is missing. dotenv will never modify any environment variables\n// that have already been set.  Variable expansion is supported in .env files.\n// https://github.com/motdotla/dotenv\n// https://github.com/motdotla/dotenv-expand\ndotenvFiles.forEach(dotenvFile => {\n  if (fs.existsSync(dotenvFile)) {\n    require('dotenv-expand')(\n      require('dotenv').config({\n        path: dotenvFile,\n      })\n    );\n  }\n});\n\n// We support resolving modules according to `NODE_PATH`.\n// This lets you use absolute paths in imports inside large monorepos:\n// https://github.com/facebook/create-react-app/issues/253.\n// It works similar to `NODE_PATH` in Node itself:\n// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders\n// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.\n// Otherwise, we risk importing Node.js core modules into an app instead of webpack shims.\n// https://github.com/facebook/create-react-app/issues/1023#issuecomment-265344421\n// We also resolve them to make sure all tools using them work consistently.\nconst appDirectory = fs.realpathSync(process.cwd());\nprocess.env.NODE_PATH = (process.env.NODE_PATH || '')\n  .split(path.delimiter)\n  .filter(folder => folder && !path.isAbsolute(folder))\n  .map(folder => path.resolve(appDirectory, folder))\n  .join(path.delimiter);\n\n// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be\n// injected into the application via DefinePlugin in webpack configuration.\nconst REACT_APP = /^REACT_APP_/i;\n\nfunction getClientEnvironment(publicUrl) {\n  const raw = Object.keys(process.env)\n    .filter(key => REACT_APP.test(key))\n    .reduce(\n      (env, key) => {\n        env[key] = process.env[key];\n        return env;\n      },\n      {\n        // Useful for determining whether we’re running in production mode.\n        // Most importantly, it switches React into the correct mode.\n        NODE_ENV: process.env.NODE_ENV || 'development',\n        // Useful for resolving the correct path to static assets in `public`.\n        // For example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />.\n        // This should only be used as an escape hatch. Normally you would put\n        // images into the `src` and `import` them in code to get their paths.\n        PUBLIC_URL: publicUrl,\n        // We support configuring the sockjs pathname during development.\n        // These settings let a developer run multiple simultaneous projects.\n        // They are used as the connection `hostname`, `pathname` and `port`\n        // in webpackHotDevClient. They are used as the `sockHost`, `sockPath`\n        // and `sockPort` options in webpack-dev-server.\n        WDS_SOCKET_HOST: process.env.WDS_SOCKET_HOST,\n        WDS_SOCKET_PATH: process.env.WDS_SOCKET_PATH,\n        WDS_SOCKET_PORT: process.env.WDS_SOCKET_PORT,\n        // Whether or not react-refresh is enabled.\n        // It is defined here so it is available in the webpackHotDevClient.\n        FAST_REFRESH: process.env.FAST_REFRESH !== 'false',\n      }\n    );\n  // Stringify all values so we can feed into webpack DefinePlugin\n  const stringified = {\n    'process.env': Object.keys(raw).reduce((env, key) => {\n      env[key] = JSON.stringify(raw[key]);\n      return env;\n    }, {}),\n  };\n\n  return { raw, stringified };\n}\n\nmodule.exports = getClientEnvironment;\n"
  },
  {
    "path": "client/config/getHttpsConfig.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst crypto = require('crypto');\nconst chalk = require('react-dev-utils/chalk');\nconst paths = require('./paths');\n\n// Ensure the certificate and key provided are valid and if not\n// throw an easy to debug error\nfunction validateKeyAndCerts({ cert, key, keyFile, crtFile }) {\n  let encrypted;\n  try {\n    // publicEncrypt will throw an error with an invalid cert\n    encrypted = crypto.publicEncrypt(cert, Buffer.from('test'));\n  } catch (err) {\n    throw new Error(\n      `The certificate \"${chalk.yellow(crtFile)}\" is invalid.\\n${err.message}`\n    );\n  }\n\n  try {\n    // privateDecrypt will throw an error with an invalid key\n    crypto.privateDecrypt(key, encrypted);\n  } catch (err) {\n    throw new Error(\n      `The certificate key \"${chalk.yellow(keyFile)}\" is invalid.\\n${\n        err.message\n      }`\n    );\n  }\n}\n\n// Read file and throw an error if it doesn't exist\nfunction readEnvFile(file, type) {\n  if (!fs.existsSync(file)) {\n    throw new Error(\n      `You specified ${chalk.cyan(\n        type\n      )} in your env, but the file \"${chalk.yellow(file)}\" can't be found.`\n    );\n  }\n  return fs.readFileSync(file);\n}\n\n// Get the https config\n// Return cert files if provided in env, otherwise just true or false\nfunction getHttpsConfig() {\n  const { SSL_CRT_FILE, SSL_KEY_FILE, HTTPS } = process.env;\n  const isHttps = HTTPS === 'true';\n\n  if (isHttps && SSL_CRT_FILE && SSL_KEY_FILE) {\n    const crtFile = path.resolve(paths.appPath, SSL_CRT_FILE);\n    const keyFile = path.resolve(paths.appPath, SSL_KEY_FILE);\n    const config = {\n      cert: readEnvFile(crtFile, 'SSL_CRT_FILE'),\n      key: readEnvFile(keyFile, 'SSL_KEY_FILE'),\n    };\n\n    validateKeyAndCerts({ ...config, keyFile, crtFile });\n    return config;\n  }\n  return isHttps;\n}\n\nmodule.exports = getHttpsConfig;\n"
  },
  {
    "path": "client/config/jest/babelTransform.js",
    "content": "'use strict';\n\nconst babelJest = require('babel-jest').default;\n\nconst hasJsxRuntime = (() => {\n  if (process.env.DISABLE_NEW_JSX_TRANSFORM === 'true') {\n    return false;\n  }\n\n  try {\n    require.resolve('react/jsx-runtime');\n    return true;\n  } catch (e) {\n    return false;\n  }\n})();\n\nmodule.exports = babelJest.createTransformer({\n  presets: [\n    [\n      require.resolve('babel-preset-react-app'),\n      {\n        runtime: hasJsxRuntime ? 'automatic' : 'classic',\n      },\n    ],\n  ],\n  babelrc: false,\n  configFile: false,\n});\n"
  },
  {
    "path": "client/config/jest/cssTransform.js",
    "content": "'use strict';\n\n// This is a custom Jest transformer turning style imports into empty objects.\n// http://facebook.github.io/jest/docs/en/webpack.html\n\nmodule.exports = {\n  process() {\n    return 'module.exports = {};';\n  },\n  getCacheKey() {\n    // The output is always the same.\n    return 'cssTransform';\n  },\n};\n"
  },
  {
    "path": "client/config/jest/fileTransform.js",
    "content": "'use strict';\n\nconst path = require('path');\nconst camelcase = require('camelcase');\n\n// This is a custom Jest transformer turning file imports into filenames.\n// http://facebook.github.io/jest/docs/en/webpack.html\n\nmodule.exports = {\n  process(src, filename) {\n    const assetFilename = JSON.stringify(path.basename(filename));\n\n    if (filename.match(/\\.svg$/)) {\n      // Based on how SVGR generates a component name:\n      // https://github.com/smooth-code/svgr/blob/01b194cf967347d43d4cbe6b434404731b87cf27/packages/core/src/state.js#L6\n      const pascalCaseFilename = camelcase(path.parse(filename).name, {\n        pascalCase: true,\n      });\n      const componentName = `Svg${pascalCaseFilename}`;\n      return `const React = require('react');\n      module.exports = {\n        __esModule: true,\n        default: ${assetFilename},\n        ReactComponent: React.forwardRef(function ${componentName}(props, ref) {\n          return {\n            $$typeof: Symbol.for('react.element'),\n            type: 'svg',\n            ref: ref,\n            key: null,\n            props: Object.assign({}, props, {\n              children: ${assetFilename}\n            })\n          };\n        }),\n      };`;\n    }\n\n    return `module.exports = ${assetFilename};`;\n  },\n};\n"
  },
  {
    "path": "client/config/modules.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst paths = require('./paths');\nconst chalk = require('react-dev-utils/chalk');\nconst resolve = require('resolve');\n\n/**\n * Get additional module paths based on the baseUrl of a compilerOptions object.\n *\n * @param {Object} options\n */\nfunction getAdditionalModulePaths(options = {}) {\n  const baseUrl = options.baseUrl;\n\n  if (!baseUrl) {\n    return '';\n  }\n\n  const baseUrlResolved = path.resolve(paths.appPath, baseUrl);\n\n  // We don't need to do anything if `baseUrl` is set to `node_modules`. This is\n  // the default behavior.\n  if (path.relative(paths.appNodeModules, baseUrlResolved) === '') {\n    return null;\n  }\n\n  // Allow the user set the `baseUrl` to `appSrc`.\n  if (path.relative(paths.appSrc, baseUrlResolved) === '') {\n    return [paths.appSrc];\n  }\n\n  // If the path is equal to the root directory we ignore it here.\n  // We don't want to allow importing from the root directly as source files are\n  // not transpiled outside of `src`. We do allow importing them with the\n  // absolute path (e.g. `src/Components/Button.js`) but we set that up with\n  // an alias.\n  if (path.relative(paths.appPath, baseUrlResolved) === '') {\n    return null;\n  }\n\n  // Otherwise, throw an error.\n  throw new Error(\n    chalk.red.bold(\n      \"Your project's `baseUrl` can only be set to `src` or `node_modules`.\" +\n        ' Create React App does not support other values at this time.'\n    )\n  );\n}\n\n/**\n * Get webpack aliases based on the baseUrl of a compilerOptions object.\n *\n * @param {*} options\n */\nfunction getWebpackAliases(options = {}) {\n  const baseUrl = options.baseUrl;\n\n  if (!baseUrl) {\n    return {};\n  }\n\n  const baseUrlResolved = path.resolve(paths.appPath, baseUrl);\n\n  if (path.relative(paths.appPath, baseUrlResolved) === '') {\n    return {\n      src: paths.appSrc,\n    };\n  }\n}\n\n/**\n * Get jest aliases based on the baseUrl of a compilerOptions object.\n *\n * @param {*} options\n */\nfunction getJestAliases(options = {}) {\n  const baseUrl = options.baseUrl;\n\n  if (!baseUrl) {\n    return {};\n  }\n\n  const baseUrlResolved = path.resolve(paths.appPath, baseUrl);\n\n  if (path.relative(paths.appPath, baseUrlResolved) === '') {\n    return {\n      '^src/(.*)$': '<rootDir>/src/$1',\n    };\n  }\n}\n\nfunction getModules() {\n  // Check if TypeScript is setup\n  const hasTsConfig = fs.existsSync(paths.appTsConfig);\n  const hasJsConfig = fs.existsSync(paths.appJsConfig);\n\n  if (hasTsConfig && hasJsConfig) {\n    throw new Error(\n      'You have both a tsconfig.json and a jsconfig.json. If you are using TypeScript please remove your jsconfig.json file.'\n    );\n  }\n\n  let config;\n\n  // If there's a tsconfig.json we assume it's a\n  // TypeScript project and set up the config\n  // based on tsconfig.json\n  if (hasTsConfig) {\n    const ts = require(resolve.sync('typescript', {\n      basedir: paths.appNodeModules,\n    }));\n    config = ts.readConfigFile(paths.appTsConfig, ts.sys.readFile).config;\n    // Otherwise we'll check if there is jsconfig.json\n    // for non TS projects.\n  } else if (hasJsConfig) {\n    config = require(paths.appJsConfig);\n  }\n\n  config = config || {};\n  const options = config.compilerOptions || {};\n\n  const additionalModulePaths = getAdditionalModulePaths(options);\n\n  return {\n    additionalModulePaths: additionalModulePaths,\n    webpackAliases: getWebpackAliases(options),\n    jestAliases: getJestAliases(options),\n    hasTsConfig,\n  };\n}\n\nmodule.exports = getModules();\n"
  },
  {
    "path": "client/config/paths.js",
    "content": "'use strict';\n\nconst path = require('path');\nconst fs = require('fs');\nconst getPublicUrlOrPath = require('react-dev-utils/getPublicUrlOrPath');\n\n// Make sure any symlinks in the project folder are resolved:\n// https://github.com/facebook/create-react-app/issues/637\nconst appDirectory = fs.realpathSync(process.cwd());\nconst resolveApp = relativePath => path.resolve(appDirectory, relativePath);\n\n// We use `PUBLIC_URL` environment variable or \"homepage\" field to infer\n// \"public path\" at which the app is served.\n// webpack needs to know it to put the right <script> hrefs into HTML even in\n// single-page apps that may serve index.html for nested URLs like /todos/42.\n// We can't use a relative path in HTML because we don't want to load something\n// like /todos/42/static/js/bundle.7289d.js. We have to know the root.\nconst publicUrlOrPath = getPublicUrlOrPath(\n  process.env.NODE_ENV === 'development',\n  require(resolveApp('package.json')).homepage,\n  process.env.PUBLIC_URL\n);\n\nconst buildPath = process.env.BUILD_PATH || 'build';\n\nconst moduleFileExtensions = [\n  'web.mjs',\n  'mjs',\n  'web.js',\n  'js',\n  'web.ts',\n  'ts',\n  'web.tsx',\n  'tsx',\n  'json',\n  'web.jsx',\n  'jsx',\n];\n\n// Resolve file paths in the same order as webpack\nconst resolveModule = (resolveFn, filePath) => {\n  const extension = moduleFileExtensions.find(extension =>\n    fs.existsSync(resolveFn(`${filePath}.${extension}`))\n  );\n\n  if (extension) {\n    return resolveFn(`${filePath}.${extension}`);\n  }\n\n  return resolveFn(`${filePath}.js`);\n};\n\n// config after eject: we're in ./config/\nmodule.exports = {\n  dotenv: resolveApp('.env'),\n  appPath: resolveApp('.'),\n  appBuild: resolveApp(buildPath),\n  appPublic: resolveApp('public'),\n  appHtml: resolveApp('public/index.html'),\n  appIndexJs: resolveModule(resolveApp, 'src/index'),\n  appPackageJson: resolveApp('package.json'),\n  appSrc: resolveApp('src'),\n  appTsConfig: resolveApp('tsconfig.json'),\n  appJsConfig: resolveApp('jsconfig.json'),\n  yarnLockFile: resolveApp('yarn.lock'),\n  testsSetup: resolveModule(resolveApp, 'src/setupTests'),\n  proxySetup: resolveApp('src/setupProxy.js'),\n  appNodeModules: resolveApp('node_modules'),\n  appWebpackCache: resolveApp('node_modules/.cache'),\n  appTsBuildInfoFile: resolveApp('node_modules/.cache/tsconfig.tsbuildinfo'),\n  swSrc: resolveModule(resolveApp, 'src/service-worker'),\n  publicUrlOrPath,\n};\n\n\n\nmodule.exports.moduleFileExtensions = moduleFileExtensions;\n"
  },
  {
    "path": "client/config/webpack/persistentCache/createEnvironmentHash.js",
    "content": "'use strict';\nconst { createHash } = require('crypto');\n\nmodule.exports = env => {\n  const hash = createHash('md5');\n  hash.update(JSON.stringify(env));\n\n  return hash.digest('hex');\n};\n"
  },
  {
    "path": "client/config/webpack.config.js",
    "content": "'use strict';\n\nrequire('dotenv').config();\n\nconst fs = require('fs');\nconst path = require('path');\nconst WebWorkerPlugin = require('worker-plugin')\nconst webpack = require('webpack');\nconst resolve = require('resolve');\nconst HtmlWebpackPlugin = require('html-webpack-plugin');\nconst CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');\nconst InlineChunkHtmlPlugin = require('react-dev-utils/InlineChunkHtmlPlugin');\nconst TerserPlugin = require('terser-webpack-plugin');\nconst MiniCssExtractPlugin = require('mini-css-extract-plugin');\nconst CssMinimizerPlugin = require('css-minimizer-webpack-plugin');\nconst { WebpackManifestPlugin } = require('webpack-manifest-plugin');\nconst InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin');\nconst WorkboxWebpackPlugin = require('workbox-webpack-plugin');\nconst ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');\nconst getCSSModuleLocalIdent = require('react-dev-utils/getCSSModuleLocalIdent');\nconst ESLintPlugin = require('eslint-webpack-plugin');\nconst paths = require('./paths');\nconst modules = require('./modules');\nconst getClientEnvironment = require('./env');\nconst ModuleNotFoundPlugin = require('react-dev-utils/ModuleNotFoundPlugin');\nconst ForkTsCheckerWebpackPlugin =\n  process.env.TSC_COMPILE_ON_ERROR === 'true'\n    ? require('react-dev-utils/ForkTsCheckerWarningWebpackPlugin')\n    : require('react-dev-utils/ForkTsCheckerWebpackPlugin');\nconst ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');\n\nconst createEnvironmentHash = require('./webpack/persistentCache/createEnvironmentHash');\n\n// Source maps are resource heavy and can cause out of memory issue for large source files.\nconst shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false';\n\nconst reactRefreshRuntimeEntry = require.resolve('react-refresh/runtime');\nconst reactRefreshWebpackPluginRuntimeEntry = require.resolve(\n  '@pmmmwh/react-refresh-webpack-plugin'\n);\nconst babelRuntimeEntry = require.resolve('babel-preset-react-app');\nconst babelRuntimeEntryHelpers = require.resolve(\n  '@babel/runtime/helpers/esm/assertThisInitialized',\n  { paths: [babelRuntimeEntry] }\n);\nconst babelRuntimeRegenerator = require.resolve('@babel/runtime/regenerator', {\n  paths: [babelRuntimeEntry],\n});\n\n// Some apps do not need the benefits of saving a web request, so not inlining the chunk\n// makes for a smoother build process.\nconst shouldInlineRuntimeChunk = process.env.INLINE_RUNTIME_CHUNK !== 'false';\n\nconst emitErrorsAsWarnings = process.env.ESLINT_NO_DEV_ERRORS === 'true';\nconst disableESLintPlugin = process.env.DISABLE_ESLINT_PLUGIN === 'true';\n\nconst imageInlineSizeLimit = parseInt(\n  process.env.IMAGE_INLINE_SIZE_LIMIT || '10000'\n);\n\n// Check if TypeScript is setup\nconst useTypeScript = fs.existsSync(paths.appTsConfig);\n\n// Check if Tailwind config exists\nconst useTailwind = fs.existsSync(\n  path.join(paths.appPath, 'tailwind.config.js')\n);\n\n// Get the path to the uncompiled service worker (if it exists).\nconst swSrc = paths.swSrc;\n\n// style files regexes\nconst cssRegex = /\\.css$/;\nconst cssModuleRegex = /\\.module\\.css$/;\nconst sassRegex = /\\.(scss|sass)$/;\nconst sassModuleRegex = /\\.module\\.(scss|sass)$/;\n\nconst hasJsxRuntime = (() => {\n  if (process.env.DISABLE_NEW_JSX_TRANSFORM === 'true') {\n    return false;\n  }\n\n  try {\n    require.resolve('react/jsx-runtime');\n    return true;\n  } catch (e) {\n    return false;\n  }\n})();\n\n// This is the production and development configuration.\n// It is focused on developer experience, fast rebuilds, and a minimal bundle.\nmodule.exports = function (webpackEnv) {\n  const isEnvDevelopment = webpackEnv === 'development';\n  const isEnvProduction = webpackEnv === 'production';\n\n  // Variable used for enabling profiling in Production\n  // passed into alias object. Uses a flag if passed into the build command\n  const isEnvProductionProfile =\n    isEnvProduction && process.argv.includes('--profile');\n\n  // We will provide `paths.publicUrlOrPath` to our app\n  // as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript.\n  // Omit trailing slash as %PUBLIC_URL%/xyz looks better than %PUBLIC_URL%xyz.\n  // Get environment variables to inject into our app.\n  const env = getClientEnvironment(paths.publicUrlOrPath.slice(0, -1));\n\n  const shouldUseReactRefresh = env.raw.FAST_REFRESH;\n\n  // common function to get style loaders\n  const getStyleLoaders = (cssOptions, preProcessor) => {\n    const loaders = [\n      isEnvDevelopment && require.resolve('style-loader'),\n      isEnvProduction && {\n        loader: MiniCssExtractPlugin.loader,\n        // css is located in `static/css`, use '../../' to locate index.html folder\n        // in production `paths.publicUrlOrPath` can be a relative path\n        options: paths.publicUrlOrPath.startsWith('.')\n          ? { publicPath: '../../' }\n          : {},\n      },\n      {\n        loader: require.resolve('css-loader'),\n        options: cssOptions,\n      },\n      {\n        // Options for PostCSS as we reference these options twice\n        // Adds vendor prefixing based on your specified browser support in\n        // package.json\n        loader: require.resolve('postcss-loader'),\n        options: {\n          postcssOptions: {\n            // Necessary for external CSS imports to work\n            // https://github.com/facebook/create-react-app/issues/2677\n            ident: 'postcss',\n            config: false,\n            plugins: !useTailwind\n              ? [\n                  'postcss-flexbugs-fixes',\n                  [\n                    'postcss-preset-env',\n                    {\n                      autoprefixer: {\n                        flexbox: 'no-2009',\n                      },\n                      stage: 3,\n                    },\n                  ],\n                  // Adds PostCSS Normalize as the reset css with default options,\n                  // so that it honors browserslist config in package.json\n                  // which in turn let's users customize the target behavior as per their needs.\n                  'postcss-normalize',\n                ]\n              : [\n                  'tailwindcss',\n                  'postcss-flexbugs-fixes',\n                  [\n                    'postcss-preset-env',\n                    {\n                      autoprefixer: {\n                        flexbox: 'no-2009',\n                      },\n                      stage: 3,\n                    },\n                  ],\n                ],\n          },\n          sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment,\n        },\n      },\n    ].filter(Boolean);\n    if (preProcessor) {\n      loaders.push(\n        {\n          loader: require.resolve('resolve-url-loader'),\n          options: {\n            sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment,\n            root: paths.appSrc,\n          },\n        },\n        {\n          loader: require.resolve(preProcessor),\n          options: {\n            sourceMap: true,\n          },\n        }\n      );\n    }\n    return loaders;\n  };\n\n  return {\n    target: ['browserslist'],\n    // Webpack noise constrained to errors and warnings\n    stats: 'errors-warnings',\n    mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development',\n    // Stop compilation early in production\n    bail: isEnvProduction,\n    devtool: isEnvProduction\n      ? shouldUseSourceMap\n        ? 'source-map'\n        : false\n      : isEnvDevelopment && 'cheap-module-source-map',\n    // These are the \"entry points\" to our application.\n    // This means they will be the \"root\" imports that are included in JS bundle.\n    entry: paths.appIndexJs,\n    output: {\n      // The build folder.\n      path: paths.appBuild,\n      // Add /* filename */ comments to generated require()s in the output.\n      pathinfo: isEnvDevelopment,\n      // There will be one main bundle, and one file per asynchronous chunk.\n      // In development, it does not produce real files.\n      filename: isEnvProduction\n        ? 'static/js/[name].[contenthash:8].js'\n        : isEnvDevelopment && 'static/js/bundle.js',\n      // There are also additional JS chunk files if you use code splitting.\n      chunkFilename: isEnvProduction\n        ? 'static/js/[name].[contenthash:8].chunk.js'\n        : isEnvDevelopment && 'static/js/[name].chunk.js',\n      assetModuleFilename: 'static/media/[name].[hash][ext]',\n      // webpack uses `publicPath` to determine where the app is being served from.\n      // It requires a trailing slash, or the file assets will get an incorrect path.\n      // We inferred the \"public path\" (such as / or /my-project) from homepage.\n      publicPath: paths.publicUrlOrPath,\n      // Point sourcemap entries to original disk location (format as URL on Windows)\n      devtoolModuleFilenameTemplate: isEnvProduction\n        ? info =>\n            path\n              .relative(paths.appSrc, info.absoluteResourcePath)\n              .replace(/\\\\/g, '/')\n        : isEnvDevelopment &&\n          (info => path.resolve(info.absoluteResourcePath).replace(/\\\\/g, '/')),\n    },\n    cache: {\n      type: 'filesystem',\n      version: createEnvironmentHash(env.raw),\n      cacheDirectory: paths.appWebpackCache,\n      store: 'pack',\n      buildDependencies: {\n        defaultWebpack: ['webpack/lib/'],\n        config: [__filename],\n        tsconfig: [paths.appTsConfig, paths.appJsConfig].filter(f =>\n          fs.existsSync(f)\n        ),\n      },\n    },\n    infrastructureLogging: {\n      level: 'none',\n    },\n    optimization: {\n      minimize: isEnvProduction,\n      minimizer: [\n        // This is only used in production mode\n        new TerserPlugin({\n          terserOptions: {\n            parse: {\n              // We want terser to parse ecma 8 code. However, we don't want it\n              // to apply any minification steps that turns valid ecma 5 code\n              // into invalid ecma 5 code. This is why the 'compress' and 'output'\n              // sections only apply transformations that are ecma 5 safe\n              // https://github.com/facebook/create-react-app/pull/4234\n              ecma: 8,\n            },\n            compress: {\n              ecma: 5,\n              warnings: false,\n              // Disabled because of an issue with Uglify breaking seemingly valid code:\n              // https://github.com/facebook/create-react-app/issues/2376\n              // Pending further investigation:\n              // https://github.com/mishoo/UglifyJS2/issues/2011\n              comparisons: false,\n              // Disabled because of an issue with Terser breaking valid code:\n              // https://github.com/facebook/create-react-app/issues/5250\n              // Pending further investigation:\n              // https://github.com/terser-js/terser/issues/120\n              inline: 2,\n            },\n            mangle: {\n              safari10: true,\n            },\n            // Added for profiling in devtools\n            keep_classnames: isEnvProductionProfile,\n            keep_fnames: isEnvProductionProfile,\n            output: {\n              ecma: 5,\n              comments: false,\n              // Turned on because emoji and regex is not minified properly using default\n              // https://github.com/facebook/create-react-app/issues/2488\n              ascii_only: true,\n            },\n          },\n        }),\n        // This is only used in production mode\n        new CssMinimizerPlugin(),\n      ],\n    },\n    resolve: {\n      fallback: {\n        \"assert\": require.resolve(\"assert\"),\n        \"buffer\": require.resolve(\"buffer\"),\n        \"process/browser\": require.resolve(\"process/browser\"),\n        \"stream\": require.resolve(\"stream-browserify\"),\n        \"url\": require.resolve(\"url\"),\n        \"os\": false,\n        \"fs\": false,\n        \"dns\": false,\n        \"timers\": false,\n        \"tls\": false,\n        \"net\": false,\n        \"path\": false,\n        \"zlib\": false,\n        \"http\": false,\n        \"https\": false,\n        \"crypto\": require.resolve(\"crypto-browserify\"),\n      },\n      // This allows you to set a fallback for where webpack should look for modules.\n      // We placed these paths second because we want `node_modules` to \"win\"\n      // if there are any conflicts. This matches Node resolution mechanism.\n      // https://github.com/facebook/create-react-app/issues/253\n      modules: ['node_modules', paths.appNodeModules].concat(\n        modules.additionalModulePaths || []\n      ),\n      // These are the reasonable defaults supported by the Node ecosystem.\n      // We also include JSX as a common component filename extension to support\n      // some tools, although we do not recommend using it, see:\n      // https://github.com/facebook/create-react-app/issues/290\n      // `web` extension prefixes have been added for better support\n      // for React Native Web.\n      extensions: paths.moduleFileExtensions\n        .map(ext => `.${ext}`)\n        .filter(ext => useTypeScript || !ext.includes('ts')),\n      alias: {\n        // Support React Native Web\n        // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/\n        'react-native': 'react-native-web',\n        // Allows for better profiling with ReactDevTools\n        ...(isEnvProductionProfile && {\n          'react-dom$': 'react-dom/profiling',\n          'scheduler/tracing': 'scheduler/tracing-profiling',\n        }),\n        ...(modules.webpackAliases || {}),\n        '@hooks': path.resolve(__dirname, '../src/hooks/'),\n        '@helpers': path.resolve(__dirname, '../src/helpers/'),\n        '@components': path.resolve(__dirname, '../src/components/'),\n        '@theme': path.resolve(__dirname, '../src/theme/'),\n      },\n      plugins: [\n        // Prevents users from importing files from outside of src/ (or node_modules/).\n        // This often causes confusion because we only process files within src/ with babel.\n        // To fix this, we prevent you from importing files out of src/ -- if you'd like to,\n        // please link the files into your node_modules/ and let module-resolution kick in.\n        // Make sure your source files are compiled, as they will not be processed in any way.\n        new ModuleScopePlugin(paths.appSrc, paths.appNodeModules, [\n          paths.appPackageJson,\n          reactRefreshRuntimeEntry,\n          reactRefreshWebpackPluginRuntimeEntry,\n          babelRuntimeEntry,\n          babelRuntimeEntryHelpers,\n          babelRuntimeRegenerator,\n        ]),\n      ],\n    },\n    module: {\n      strictExportPresence: true,\n      rules: [\n        // Handle node_modules packages that contain sourcemaps\n        shouldUseSourceMap && {\n          enforce: 'pre',\n          exclude: /@babel(?:\\/|\\\\{1,2})runtime/,\n          test: /\\.(js|mjs|jsx|ts|tsx|css)$/,\n          loader: require.resolve('source-map-loader'),\n        },\n        {\n          // \"oneOf\" will traverse all following loaders until one will\n          // match the requirements. When no loader matches it will fall\n          // back to the \"file\" loader at the end of the loader list.\n          oneOf: [\n            // TODO: Merge this config once `image/avif` is in the mime-db\n            // https://github.com/jshttp/mime-db\n            {\n              test: [/\\.avif$/],\n              type: 'asset',\n              mimetype: 'image/avif',\n              parser: {\n                dataUrlCondition: {\n                  maxSize: imageInlineSizeLimit,\n                },\n              },\n            },\n            // \"url\" loader works like \"file\" loader except that it embeds assets\n            // smaller than specified limit in bytes as data URLs to avoid requests.\n            // A missing `test` is equivalent to a match.\n            {\n              test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/],\n              type: 'asset',\n              parser: {\n                dataUrlCondition: {\n                  maxSize: imageInlineSizeLimit,\n                },\n              },\n            },\n            {\n              test: /\\.svg$/,\n              use: [\n                {\n                  loader: require.resolve('@svgr/webpack'),\n                  options: {\n                    prettier: false,\n                    svgo: false,\n                    svgoConfig: {\n                      plugins: [{ removeViewBox: false }],\n                    },\n                    titleProp: true,\n                    ref: true,\n                  },\n                },\n                {\n                  loader: require.resolve('file-loader'),\n                  options: {\n                    name: 'static/media/[name].[hash].[ext]',\n                  },\n                },\n              ],\n              issuer: {\n                and: [/\\.(ts|tsx|js|jsx|md|mdx)$/],\n              },\n            },\n            // Process application JS with Babel.\n            // The preset includes JSX, Flow, TypeScript, and some ESnext features.\n            {\n              test: /\\.(js|mjs|jsx|ts|tsx)$/,\n              include: paths.appSrc,\n              loader: require.resolve('babel-loader'),\n              options: {\n                customize: require.resolve(\n                  'babel-preset-react-app/webpack-overrides'\n                ),\n                presets: [\n                  [\n                    require.resolve('babel-preset-react-app'),\n                    {\n                      runtime: hasJsxRuntime ? 'automatic' : 'classic',\n                    },\n                  ],\n                ],\n                \n                plugins: [\n                  isEnvDevelopment &&\n                    shouldUseReactRefresh &&\n                    require.resolve('react-refresh/babel'),\n                ].filter(Boolean),\n                // This is a feature of `babel-loader` for webpack (not Babel itself).\n                // It enables caching results in ./node_modules/.cache/babel-loader/\n                // directory for faster rebuilds.\n                cacheDirectory: true,\n                // See #6846 for context on why cacheCompression is disabled\n                cacheCompression: false,\n                compact: isEnvProduction,\n              },\n            },\n            // Process any JS outside of the app with Babel.\n            // Unlike the application JS, we only compile the standard ES features.\n            {\n              test: /\\.(js|mjs|ts)$/,\n              exclude: /@babel(?:\\/|\\\\{1,2})runtime/,\n              loader: require.resolve('babel-loader'),\n              options: {\n                babelrc: false,\n                configFile: false,\n                compact: false,\n                presets: [\n                  [require.resolve('@babel/preset-env')],\n                  [require.resolve('@babel/preset-typescript')],\n                  [\n                    require.resolve('babel-preset-react-app/dependencies'),\n                    { helpers: true },\n                  ],\n                ],\n                plugins: [\n                  '@babel/plugin-proposal-class-properties',\n                  '@babel/plugin-proposal-optional-chaining',\n                  '@babel/plugin-proposal-nullish-coalescing-operator',\n                  '@babel/plugin-transform-private-methods'\n                ],\n                cacheDirectory: true,\n                // See #6846 for context on why cacheCompression is disabled\n                cacheCompression: false,\n                \n                // Babel sourcemaps are needed for debugging into node_modules\n                // code.  Without the options below, debuggers like VSCode\n                // show incorrect code and set breakpoints on the wrong lines.\n                sourceMaps: shouldUseSourceMap,\n                inputSourceMap: shouldUseSourceMap,\n              },\n            },\n            // \"postcss\" loader applies autoprefixer to our CSS.\n            // \"css\" loader resolves paths in CSS and adds assets as dependencies.\n            // \"style\" loader turns CSS into JS modules that inject <style> tags.\n            // In production, we use MiniCSSExtractPlugin to extract that CSS\n            // to a file, but in development \"style\" loader enables hot editing\n            // of CSS.\n            // By default we support CSS Modules with the extension .module.css\n            {\n              test: cssRegex,\n              exclude: cssModuleRegex,\n              use: getStyleLoaders({\n                importLoaders: 1,\n                sourceMap: isEnvProduction\n                  ? shouldUseSourceMap\n                  : isEnvDevelopment,\n                modules: {\n                  mode: 'icss',\n                },\n              }),\n              // Don't consider CSS imports dead code even if the\n              // containing package claims to have no side effects.\n              // Remove this when webpack adds a warning or an error for this.\n              // See https://github.com/webpack/webpack/issues/6571\n              sideEffects: true,\n            },\n            // Adds support for CSS Modules (https://github.com/css-modules/css-modules)\n            // using the extension .module.css\n            {\n              test: cssModuleRegex,\n              use: getStyleLoaders({\n                importLoaders: 1,\n                sourceMap: isEnvProduction\n                  ? shouldUseSourceMap\n                  : isEnvDevelopment,\n                modules: {\n                  mode: 'local',\n                  getLocalIdent: getCSSModuleLocalIdent,\n                },\n              }),\n            },\n            // Opt-in support for SASS (using .scss or .sass extensions).\n            // By default we support SASS Modules with the\n            // extensions .module.scss or .module.sass\n            {\n              test: sassRegex,\n              exclude: sassModuleRegex,\n              use: getStyleLoaders(\n                {\n                  importLoaders: 3,\n                  sourceMap: isEnvProduction\n                    ? shouldUseSourceMap\n                    : isEnvDevelopment,\n                  modules: {\n                    mode: 'icss',\n                  },\n                },\n                'sass-loader'\n              ),\n              // Don't consider CSS imports dead code even if the\n              // containing package claims to have no side effects.\n              // Remove this when webpack adds a warning or an error for this.\n              // See https://github.com/webpack/webpack/issues/6571\n              sideEffects: true,\n            },\n            // Adds support for CSS Modules, but using SASS\n            // using the extension .module.scss or .module.sass\n            {\n              test: sassModuleRegex,\n              use: getStyleLoaders(\n                {\n                  importLoaders: 3,\n                  sourceMap: isEnvProduction\n                    ? shouldUseSourceMap\n                    : isEnvDevelopment,\n                  modules: {\n                    mode: 'local',\n                    getLocalIdent: getCSSModuleLocalIdent,\n                  },\n                },\n                'sass-loader'\n              ),\n            },\n            // \"file\" loader makes sure those assets get served by WebpackDevServer.\n            // When you `import` an asset, you get its (virtual) filename.\n            // In production, they would get copied to the `build` folder.\n            // This loader doesn't use a \"test\" so it will catch all modules\n            // that fall through the other loaders.\n            {\n              // Exclude `js` files to keep \"css\" loader working as it injects\n              // its runtime that would otherwise be processed through \"file\" loader.\n              // Also exclude `html` and `json` extensions so they get processed\n              // by webpacks internal loaders.\n              exclude: [/^$/, /\\.(js|mjs|jsx|ts|tsx)$/, /\\.html$/, /\\.json$/],\n              type: 'asset/resource',\n            },\n            // ** STOP ** Are you adding a new loader?\n            // Make sure to add the new loader(s) before the \"file\" loader.\n          ],\n        },\n      ].filter(Boolean),\n    },\n    ignoreWarnings: [/Failed to parse source map/],\n    plugins: [\n      new webpack.ProvidePlugin({\n        process: \"process/browser\",\n        Buffer: [\"buffer\", \"Buffer\"],\n      }),\n      new WebWorkerPlugin(),\n      // Generates an `index.html` file with the <script> injected.\n      new HtmlWebpackPlugin(\n        Object.assign(\n          {},\n          {\n            inject: true,\n            template: paths.appHtml,\n          },\n          isEnvProduction\n            ? {\n                minify: {\n                  removeComments: true,\n                  collapseWhitespace: true,\n                  removeRedundantAttributes: true,\n                  useShortDoctype: true,\n                  removeEmptyAttributes: true,\n                  removeStyleLinkTypeAttributes: true,\n                  keepClosingSlash: true,\n                  minifyJS: true,\n                  minifyCSS: true,\n                  minifyURLs: true,\n                },\n              }\n            : undefined\n        )\n      ),\n      // Inlines the webpack runtime script. This script is too small to warrant\n      // a network request.\n      // https://github.com/facebook/create-react-app/issues/5358\n      isEnvProduction &&\n        shouldInlineRuntimeChunk &&\n        new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/runtime-.+[.]js/]),\n      // Makes some environment variables available in index.html.\n      // The public URL is available as %PUBLIC_URL% in index.html, e.g.:\n      // <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\">\n      // It will be an empty string unless you specify \"homepage\"\n      // in `package.json`, in which case it will be the pathname of that URL.\n      new InterpolateHtmlPlugin(HtmlWebpackPlugin, env.raw),\n      // This gives some necessary context to module not found errors, such as\n      // the requesting resource.\n      new ModuleNotFoundPlugin(paths.appPath),\n      // Makes some environment variables available to the JS code, for example:\n      // if (process.env.NODE_ENV === 'production') { ... }. See `./env.js`.\n      // It is absolutely essential that NODE_ENV is set to production\n      // during a production build.\n      // Otherwise React will be compiled in the very slow development mode.\n      new webpack.DefinePlugin({\n        'process.env.ALCHEMY_API_KEY': JSON.stringify(process.env.ALCHEMY_API_KEY),\n        'process.env.WALLET_CONNECT_PROJECT_ID': JSON.stringify(process.env.WALLET_CONNECT_PROJECT_ID),\n        'process.env.PUBLIC_URL': JSON.stringify(process.env.PUBLIC_URL),\n        'process.env.GOOGLE_CLIENT_ID': JSON.stringify(process.env.GOOGLE_CLIENT_ID),\n        'process.env.DEPLOYMENT_ENVIRONMENT': JSON.stringify(process.env.DEPLOYMENT_ENVIRONMENT),\n        'process.env.PRIVY_APP_ID': JSON.stringify(process.env.PRIVY_APP_ID),\n        'process.env.ZERODEV_APP_ID': JSON.stringify(process.env.ZERODEV_APP_ID),\n        'process.env.SOCKET_API_KEY': JSON.stringify(process.env.SOCKET_API_KEY),\n        'process.env.ALCHEMY_SOLANA_API_KEY': JSON.stringify(process.env.ALCHEMY_SOLANA_API_KEY),\n\n        'process.env.REMOTE_PROOF_API_URL': JSON.stringify(process.env.REMOTE_PROOF_API_URL),\n        'process.env.VENMO_DOMAIN_KEYS': JSON.stringify(process.env.VENMO_DOMAIN_KEYS),\n        'process.env.VENMO_DENY_LIST_URL': JSON.stringify(process.env.VENMO_DENY_LIST_URL),\n\n        'process.env.REMOTE_PROOF_UPI_API_URL': JSON.stringify(process.env.REMOTE_PROOF_UPI_API_URL),\n        'process.env.HDFC_DOMAIN_KEYS': JSON.stringify(process.env.HDFC_DOMAIN_KEYS),\n        'process.env.HDFC_DENY_LIST_URL': JSON.stringify(process.env.HDFC_DENY_LIST_URL),\n\n        'process.env.REMOTE_PROOF_GARANTI_API_URL': JSON.stringify(process.env.REMOTE_PROOF_GARANTI_API_URL),\n        'process.env.GARANTI_DOMAIN_KEYS': JSON.stringify(process.env.GARANTI_DOMAIN_KEYS),\n        'process.env.GARANTI_DENY_LIST_URL': JSON.stringify(process.env.GARANTI_DENY_LIST_URL),\n        'process.env.USE_GARANTI': JSON.stringify(process.env.USE_GARANTI),\n\n        'process.env.REMOTE_NOTARY_VERIFICATION_URL': JSON.stringify(process.env.REMOTE_NOTARY_VERIFICATION_URL),\n        'process.env.NOTARY_VERIFICATION_SIGNING_KEY': JSON.stringify(process.env.NOTARY_VERIFICATION_SIGNING_KEY),\n        'process.env.NOTARY_PUBKEY': JSON.stringify(process.env.NOTARY_PUBKEY),\n        'process.env.NOTARY_PUBKEY_HASH': JSON.stringify(process.env.NOTARY_PUBKEY_HASH),\n      }),\n      // Experimental hot reloading for React .\n      // https://github.com/facebook/react/tree/main/packages/react-refresh\n      isEnvDevelopment &&\n        shouldUseReactRefresh &&\n        new ReactRefreshWebpackPlugin({\n          overlay: false,\n        }),\n      // Watcher doesn't work well if you mistype casing in a path so we use\n      // a plugin that prints an error when you attempt to do this.\n      // See https://github.com/facebook/create-react-app/issues/240\n      isEnvDevelopment && new CaseSensitivePathsPlugin(),\n      isEnvProduction &&\n        new MiniCssExtractPlugin({\n          // Options similar to the same options in webpackOptions.output\n          // both options are optional\n          filename: 'static/css/[name].[contenthash:8].css',\n          chunkFilename: 'static/css/[name].[contenthash:8].chunk.css',\n        }),\n      // Generate an asset manifest file with the following content:\n      // - \"files\" key: Mapping of all asset filenames to their corresponding\n      //   output file so that tools can pick it up without having to parse\n      //   `index.html`\n      // - \"entrypoints\" key: Array of files which are included in `index.html`,\n      //   can be used to reconstruct the HTML if necessary\n      new WebpackManifestPlugin({\n        fileName: 'asset-manifest.json',\n        publicPath: paths.publicUrlOrPath,\n        generate: (seed, files, entrypoints) => {\n          const manifestFiles = files.reduce((manifest, file) => {\n            manifest[file.name] = file.path;\n            return manifest;\n          }, seed);\n          const entrypointFiles = entrypoints.main.filter(\n            fileName => !fileName.endsWith('.map')\n          );\n\n          return {\n            files: manifestFiles,\n            entrypoints: entrypointFiles,\n          };\n        },\n      }),\n      // Moment.js is an extremely popular library that bundles large locale files\n      // by default due to how webpack interprets its code. This is a practical\n      // solution that requires the user to opt into importing specific locales.\n      // https://github.com/jmblog/how-to-optimize-momentjs-with-webpack\n      // You can remove this if you don't use Moment.js:\n      new webpack.IgnorePlugin({\n        resourceRegExp: /^\\.\\/locale$/,\n        contextRegExp: /moment$/,\n      }),\n      // Generate a service worker script that will precache, and keep up to date,\n      // the HTML & assets that are part of the webpack build.\n      isEnvProduction &&\n        fs.existsSync(swSrc) &&\n        new WorkboxWebpackPlugin.InjectManifest({\n          swSrc,\n          dontCacheBustURLsMatching: /\\.[0-9a-f]{8}\\./,\n          exclude: [/\\.map$/, /asset-manifest\\.json$/, /LICENSE/],\n          // Bump up the default maximum size (2mb) that's precached,\n          // to make lazy-loading failure scenarios less likely.\n          // See https://github.com/cra-template/pwa/issues/13#issuecomment-722667270\n          maximumFileSizeToCacheInBytes: 5 * 1024 * 1024,\n        }),\n      // TypeScript type checking\n      useTypeScript &&\n        new ForkTsCheckerWebpackPlugin({\n          async: isEnvDevelopment,\n          typescript: {\n            typescriptPath: resolve.sync('typescript', {\n              basedir: paths.appNodeModules,\n            }),\n            configOverwrite: {\n              compilerOptions: {\n                sourceMap: isEnvProduction\n                  ? shouldUseSourceMap\n                  : isEnvDevelopment,\n                skipLibCheck: true,\n                inlineSourceMap: false,\n                declarationMap: false,\n                noEmit: true,\n                incremental: true,\n                tsBuildInfoFile: paths.appTsBuildInfoFile,\n              },\n            },\n            context: paths.appPath,\n            diagnosticOptions: {\n              syntactic: true,\n            },\n            mode: 'write-references',\n            // profile: true,\n          },\n          issue: {\n            // This one is specifically to match during CI tests,\n            // as micromatch doesn't match\n            // '../cra-template-typescript/template/src/App.tsx'\n            // otherwise.\n            include: [\n              { file: '../**/src/**/*.{ts,tsx}' },\n              { file: '**/src/**/*.{ts,tsx}' },\n            ],\n            exclude: [\n              { file: '**/src/**/__tests__/**' },\n              { file: '**/src/**/?(*.){spec|test}.*' },\n              { file: '**/src/setupProxy.*' },\n              { file: '**/src/setupTests.*' },\n            ],\n          },\n          logger: {\n            infrastructure: 'silent',\n          },\n        }),\n      !disableESLintPlugin &&\n        new ESLintPlugin({\n          // Plugin options\n          extensions: ['js', 'mjs', 'jsx', 'ts', 'tsx'],\n          formatter: require.resolve('react-dev-utils/eslintFormatter'),\n          eslintPath: require.resolve('eslint'),\n          failOnError: !(isEnvDevelopment && emitErrorsAsWarnings),\n          context: paths.appSrc,\n          cache: true,\n          cacheLocation: path.resolve(\n            paths.appNodeModules,\n            '.cache/.eslintcache'\n          ),\n          // ESLint class options\n          cwd: paths.appPath,\n          resolvePluginsRelativeTo: __dirname,\n          baseConfig: {\n            extends: [require.resolve('eslint-config-react-app/base')],\n            rules: {\n              ...(!hasJsxRuntime && {\n                'react/react-in-jsx-scope': 'error',\n              }),\n            },\n          },\n        }),\n    ].filter(Boolean),\n    // Turn off performance processing because we utilize\n    // our own hints via the FileSizeReporter\n    performance: false,\n  };\n};\n"
  },
  {
    "path": "client/config/webpackDevServer.config.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst evalSourceMapMiddleware = require('react-dev-utils/evalSourceMapMiddleware');\nconst noopServiceWorkerMiddleware = require('react-dev-utils/noopServiceWorkerMiddleware');\nconst ignoredFiles = require('react-dev-utils/ignoredFiles');\nconst redirectServedPath = require('react-dev-utils/redirectServedPathMiddleware');\nconst paths = require('./paths');\nconst getHttpsConfig = require('./getHttpsConfig');\n\nconst host = process.env.HOST || '0.0.0.0';\nconst sockHost = process.env.WDS_SOCKET_HOST;\nconst sockPath = process.env.WDS_SOCKET_PATH; // default: '/ws'\nconst sockPort = process.env.WDS_SOCKET_PORT;\n\nmodule.exports = function (proxy, allowedHost) {\n  const disableFirewall =\n    !proxy || process.env.DANGEROUSLY_DISABLE_HOST_CHECK === 'true';\n  return {\n    // WebpackDevServer 2.4.3 introduced a security fix that prevents remote\n    // websites from potentially accessing local content through DNS rebinding:\n    // https://github.com/webpack/webpack-dev-server/issues/887\n    // https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a\n    // However, it made several existing use cases such as development in cloud\n    // environment or subdomains in development significantly more complicated:\n    // https://github.com/facebook/create-react-app/issues/2271\n    // https://github.com/facebook/create-react-app/issues/2233\n    // While we're investigating better solutions, for now we will take a\n    // compromise. Since our WDS configuration only serves files in the `public`\n    // folder we won't consider accessing them a vulnerability. However, if you\n    // use the `proxy` feature, it gets more dangerous because it can expose\n    // remote code execution vulnerabilities in backends like Django and Rails.\n    // So we will disable the host check normally, but enable it if you have\n    // specified the `proxy` setting. Finally, we let you override it if you\n    // really know what you're doing with a special environment variable.\n    // Note: [\"localhost\", \".localhost\"] will support subdomains - but we might\n    // want to allow setting the allowedHosts manually for more complex setups\n    allowedHosts: disableFirewall ? 'all' : [allowedHost],\n    headers: {\n      'Access-Control-Allow-Origin': '*',\n      'Access-Control-Allow-Methods': '*',\n      'Access-Control-Allow-Headers': '*',\n    },\n    // Enable gzip compression of generated files.\n    compress: true,\n    static: {\n      // By default WebpackDevServer serves physical files from current directory\n      // in addition to all the virtual build products that it serves from memory.\n      // This is confusing because those files won’t automatically be available in\n      // production build folder unless we copy them. However, copying the whole\n      // project directory is dangerous because we may expose sensitive files.\n      // Instead, we establish a convention that only files in `public` directory\n      // get served. Our build script will copy `public` into the `build` folder.\n      // In `index.html`, you can get URL of `public` folder with %PUBLIC_URL%:\n      // <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\">\n      // In JavaScript code, you can access it with `process.env.PUBLIC_URL`.\n      // Note that we only recommend to use `public` folder as an escape hatch\n      // for files like `favicon.ico`, `manifest.json`, and libraries that are\n      // for some reason broken when imported through webpack. If you just want to\n      // use an image, put it in `src` and `import` it from JavaScript instead.\n      directory: paths.appPublic,\n      publicPath: [paths.publicUrlOrPath],\n      // By default files from `contentBase` will not trigger a page reload.\n      watch: {\n        // Reportedly, this avoids CPU overload on some systems.\n        // https://github.com/facebook/create-react-app/issues/293\n        // src/node_modules is not ignored to support absolute imports\n        // https://github.com/facebook/create-react-app/issues/1065\n        ignored: ignoredFiles(paths.appSrc),\n      },\n    },\n    client: {\n      webSocketURL: {\n        // Enable custom sockjs pathname for websocket connection to hot reloading server.\n        // Enable custom sockjs hostname, pathname and port for websocket connection\n        // to hot reloading server.\n        hostname: sockHost,\n        pathname: sockPath,\n        port: sockPort,\n      },\n      overlay: {\n        errors: true,\n        warnings: false,\n      },\n    },\n    devMiddleware: {\n      // It is important to tell WebpackDevServer to use the same \"publicPath\" path as\n      // we specified in the webpack config. When homepage is '.', default to serving\n      // from the root.\n      // remove last slash so user can land on `/test` instead of `/test/`\n      publicPath: paths.publicUrlOrPath.slice(0, -1),\n    },\n\n    https: getHttpsConfig(),\n    host,\n    historyApiFallback: {\n      // Paths with dots should still use the history fallback.\n      // See https://github.com/facebook/create-react-app/issues/387.\n      disableDotRule: true,\n      index: paths.publicUrlOrPath,\n    },\n    // `proxy` is run between `before` and `after` `webpack-dev-server` hooks\n    proxy,\n    onBeforeSetupMiddleware(devServer) {\n      // Keep `evalSourceMapMiddleware`\n      // middlewares before `redirectServedPath` otherwise will not have any effect\n      // This lets us fetch source contents from webpack for the error overlay\n      devServer.app.use(evalSourceMapMiddleware(devServer));\n\n      if (fs.existsSync(paths.proxySetup)) {\n        // This registers user provided middleware for proxy reasons\n        require(paths.proxySetup)(devServer.app);\n      }\n    },\n    onAfterSetupMiddleware(devServer) {\n      // Redirect to `PUBLIC_URL` or `homepage` from `package.json` if url not match\n      devServer.app.use(redirectServedPath(paths.publicUrlOrPath));\n\n      // This service worker file is effectively a 'no-op' that will reset any\n      // previous service worker registered for the same host:port combination.\n      // We do this in development to avoid hitting the production cache if\n      // it used the same host and port.\n      // https://github.com/facebook/create-react-app/issues/2272#issuecomment-302832432\n      devServer.app.use(noopServiceWorkerMiddleware(paths.publicUrlOrPath));\n    },\n  };\n};\n"
  },
  {
    "path": "client/package.json",
    "content": "{\n  \"name\": \"double-blind\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@bonfida/spl-name-service\": \"^2.3.7\",\n    \"@emotion/react\": \"^11.11.1\",\n    \"@emotion/styled\": \"^11.11.0\",\n    \"@mui/joy\": \"^5.0.0-beta.15\",\n    \"@mui/material\": \"^5.14.3\",\n    \"@openzeppelin/contracts\": \"^4.7.1\",\n    \"@pmmmwh/react-refresh-webpack-plugin\": \"^0.5.3\",\n    \"@privy-io/react-auth\": \"^1.67.0\",\n    \"@privy-io/wagmi-connector\": \"0.1.12\",\n    \"@rainbow-me/rainbowkit\": \"1.3.5\",\n    \"@reach/portal\": \"^0.10.3\",\n    \"@react-oauth/google\": \"^0.11.1\",\n    \"@solana/web3.js\": \"^1.90.0\",\n    \"@svgr/webpack\": \"^5.5.0\",\n    \"@types/lodash\": \"^4.14.181\",\n    \"@types/pako\": \"^2.0.0\",\n    \"@types/rebass\": \"^4.0.10\",\n    \"@types/styled-components\": \"^5.1.24\",\n    \"@typescript-eslint/eslint-plugin\": \"^4.5.0\",\n    \"@typescript-eslint/parser\": \"^4.5.0\",\n    \"@uidotdev/usehooks\": \"^2.4.1\",\n    \"@zerodev/privy\": \"^1.4.4\",\n    \"@zerodev/wagmi\": \"4.6.5\",\n    \"@zkp2p/circuits-circom-helpers\": \"^0.2.3-rc3\",\n    \"addressparser\": \"^1.0.1\",\n    \"atob\": \"^2.1.2\",\n    \"babel-eslint\": \"^10.1.0\",\n    \"babel-jest\": \"^27.4.2\",\n    \"babel-loader\": \"^8.2.3\",\n    \"babel-plugin-named-asset-import\": \"^0.3.8\",\n    \"babel-preset-react-app\": \"^10.0.1\",\n    \"base64-sol\": \"^1.1.0\",\n    \"bfj\": \"^7.0.2\",\n    \"bignumber.js\": \"^9.1.2\",\n    \"browserslist\": \"^4.18.1\",\n    \"camelcase\": \"^6.2.1\",\n    \"case-sensitive-paths-webpack-plugin\": \"^2.4.0\",\n    \"circomlib\": \"^2.0.3\",\n    \"circomlibjs\": \"^0.1.2\",\n    \"comlink\": \"^4.4.1\",\n    \"cryo\": \"^0.0.6\",\n    \"crypto\": \"^1.0.1\",\n    \"css-loader\": \"^6.5.1\",\n    \"css-minimizer-webpack-plugin\": \"^3.2.0\",\n    \"dotenv\": \"^10.0.0\",\n    \"dotenv-expand\": \"^5.1.0\",\n    \"eslint\": \"^8.3.0\",\n    \"eslint-config-react-app\": \"^7.0.1\",\n    \"eslint-plugin-flowtype\": \"^5.2.0\",\n    \"eslint-plugin-import\": \"^2.22.1\",\n    \"eslint-plugin-jest\": \"^24.1.0\",\n    \"eslint-plugin-jsx-a11y\": \"^6.3.1\",\n    \"eslint-plugin-react\": \"^7.21.5\",\n    \"eslint-plugin-react-hooks\": \"^4.2.0\",\n    \"eslint-plugin-testing-library\": \"^3.9.2\",\n    \"eslint-webpack-plugin\": \"^3.1.1\",\n    \"eth-crypto\": \"^2.6.0\",\n    \"ethereumjs-abi\": \"^0.6.8\",\n    \"ethers\": \"^5.7.1\",\n    \"file-loader\": \"^6.2.0\",\n    \"forge-std\": \"^1.1.2\",\n    \"fs-extra\": \"^10.0.0\",\n    \"html-webpack-plugin\": \"^5.5.0\",\n    \"identity-obj-proxy\": \"^3.0.0\",\n    \"jest\": \"^27.4.3\",\n    \"jest-circus\": \"26.6.0\",\n    \"jest-resolve\": \"^27.4.2\",\n    \"jest-watch-typeahead\": \"^1.0.0\",\n    \"libmime\": \"^5.1.0\",\n    \"localforage\": \"^1.10.0\",\n    \"lodash\": \"^4.17.21\",\n    \"lodash.merge\": \"^4.6.2\",\n    \"mini-css-extract-plugin\": \"^2.4.5\",\n    \"next\": \"^12.3.1\",\n    \"optimize-css-assets-webpack-plugin\": \"5.0.4\",\n    \"pako\": \"^2.1.0\",\n    \"pnp-webpack-plugin\": \"1.6.4\",\n    \"postcss\": \"^8.4.4\",\n    \"postcss-flexbugs-fixes\": \"^5.0.2\",\n    \"postcss-loader\": \"^6.2.1\",\n    \"postcss-normalize\": \"^10.0.1\",\n    \"postcss-preset-env\": \"^7.0.1\",\n    \"postcss-safe-parser\": \"5.0.2\",\n    \"prettier\": \"^2.7.1\",\n    \"prettier-plugin-solidity\": \"^1.0.0-beta.24\",\n    \"prompts\": \"^2.4.2\",\n    \"react\": \"^18.2.0\",\n    \"react-app-polyfill\": \"^3.0.0\",\n    \"react-circular-progressbar\": \"^2.1.0\",\n    \"react-confetti\": \"^6.1.0\",\n    \"react-dev-utils\": \"^12.0.1\",\n    \"react-device-detect\": \"^2.2.3\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-dropzone\": \"^12.0.4\",\n    \"react-ens-name\": \"^0.2.5\",\n    \"react-error-overlay\": \"6.0.9\",\n    \"react-feather\": \"^2.0.10\",\n    \"react-json-view\": \"^1.21.3\",\n    \"react-popper\": \"^2.3.0\",\n    \"react-qr-code\": \"^2.0.12\",\n    \"react-refresh\": \"^0.11.0\",\n    \"react-router\": \"^6.2.2\",\n    \"react-router-dom\": \"^6.2.2\",\n    \"react-text-transition\": \"^3.1.0\",\n    \"react-use\": \"^17.3.2\",\n    \"readline\": \"^1.3.0\",\n    \"rebass\": \"^4.0.7\",\n    \"resolve\": \"^1.20.0\",\n    \"resolve-url-loader\": \"^4.0.0\",\n    \"sass-loader\": \"^12.3.0\",\n    \"semver\": \"^7.3.5\",\n    \"serve\": \"^14.0.1\",\n    \"snarkjs\": \"https://github.com/sampritipanda/snarkjs.git#fef81fc51d17a734637555c6edbd585ecda02d9e\",\n    \"source-map-loader\": \"^3.0.0\",\n    \"sshpk\": \"^1.17.0\",\n    \"style-loader\": \"^3.3.1\",\n    \"styled-components\": \"^5.3.5\",\n    \"tailwindcss\": \"^3.0.2\",\n    \"terser-webpack-plugin\": \"^5.2.5\",\n    \"ts-node\": \"^10.9.1\",\n    \"ts-pnp\": \"1.2.0\",\n    \"typescript\": \"^5.3.3\",\n    \"url-loader\": \"4.1.1\",\n    \"wagmi\": \"^1.4.11\",\n    \"web-vitals\": \"^2.1.4\",\n    \"webpack\": \"^5.64.4\",\n    \"webpack-dev-server\": \"^4.6.0\",\n    \"webpack-manifest-plugin\": \"^4.0.2\",\n    \"workbox-webpack-plugin\": \"^6.4.1\",\n    \"worker-plugin\": \"^5.0.1\"\n  },\n  \"resolutions\": {\n    \"react-error-overlay\": \"6.0.9\"\n  },\n  \"scripts\": {\n    \"start\": \"node scripts/start.js\",\n    \"build\": \"node scripts/build.js\",\n    \"both-build\": \"node scripts/build.js && next build\",\n    \"next-build\": \"next build\",\n    \"test\": \"node scripts/test.js --runInBand --testPathIgnorePatterns='e2e|src/contracts/lib' --reporters=default --reporters=jest-junit\",\n    \"test:browserstack\": \"browserstack-node-sdk jest src/ --runInBand --testPathIgnorePatterns='e2e|src/contracts/lib' --reporters=default --reporters=jest-junit\",\n    \"start-e2e-test-server\": \"serve -s build -p 3000\",\n    \"test:e2e-ui\": \"CI=true node scripts/test.js --runInBand --testPathPattern='e2e-ui' --reporters=default --reporters=jest-junit\",\n    \"test:e2e-zkp\": \"CI=true node scripts/test.js --runInBand --testPathPattern='e2e-dl-zkp' --reporters=default --reporters=jest-junit\",\n    \"compile\": \"node circuits/scripts/compile.js\",\n    \"gen-input\": \"npx tsx src/scripts/generate_input.ts\",\n    \"compile-all\": \"yarn gen-input && yarn compile email true\"\n  },\n  \"eslintConfig\": {\n    \"extends\": [\n      \"react-app\",\n      \"react-app/jest\"\n    ]\n  },\n  \"browserslist\": {\n    \"production\": [\n      \"chrome >= 67\",\n      \"edge >= 79\",\n      \"firefox >= 68\",\n      \"opera >= 54\",\n      \"safari >= 14\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"7.12.3\",\n    \"@babel/plugin-proposal-class-properties\": \"^7.18.6\",\n    \"@babel/plugin-proposal-nullish-coalescing-operator\": \"^7.18.6\",\n    \"@babel/plugin-proposal-optional-chaining\": \"^7.21.0\",\n    \"@babel/plugin-proposal-private-property-in-object\": \"^7.21.11\",\n    \"@babel/plugin-transform-private-methods\": \"^7.23.3\",\n    \"@babel/preset-env\": \"^7.22.10\",\n    \"@babel/preset-typescript\": \"^7.22.11\",\n    \"@types/atob\": \"^2.1.2\",\n    \"@types/jest\": \"^29.5.11\",\n    \"@types/node\": \"^18.15.11\",\n    \"@types/tar-stream\": \"^2.2.2\",\n    \"assert\": \"^2.1.0\",\n    \"browserstack-local\": \"^1.5.1\",\n    \"browserstack-node-sdk\": \"^1.6.1\",\n    \"buffer\": \"^6.0.3\",\n    \"crypto-browserify\": \"^3.12.0\",\n    \"jest-junit\": \"^15.0.0\",\n    \"msw\": \"^1.0.1\",\n    \"nodemon\": \"^2.0.19\",\n    \"process\": \"^0.11.10\",\n    \"puppeteer\": \"18.1\",\n    \"react-app-rewired\": \"^2.2.1\",\n    \"selenium-webdriver\": \"^4.8.1\",\n    \"stream-browserify\": \"^3.0.0\",\n    \"ts-node-dev\": \"^2.0.0\",\n    \"url\": \"^0.11.3\"\n  },\n  \"jest\": {\n    \"roots\": [\n      \"<rootDir>/src\"\n    ],\n    \"collectCoverageFrom\": [\n      \"src/**/*.{js,jsx,ts,tsx}\",\n      \"!src/**/*.d.ts\"\n    ],\n    \"setupFiles\": [\n      \"react-app-polyfill/jsdom\"\n    ],\n    \"setupFilesAfterEnv\": [],\n    \"testMatch\": [\n      \"<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}\",\n      \"<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}\"\n    ],\n    \"testEnvironment\": \"jsdom\",\n    \"transform\": {\n      \"^.+\\\\.(js|jsx|mjs|cjs|ts|tsx)$\": \"<rootDir>/config/jest/babelTransform.js\",\n      \"^.+\\\\.css$\": \"<rootDir>/config/jest/cssTransform.js\",\n      \"^(?!.*\\\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)\": \"<rootDir>/config/jest/fileTransform.js\"\n    },\n    \"transformIgnorePatterns\": [\n      \"node_modules/(?!@rainbow-me/rainbowkit)\"\n    ],\n    \"modulePaths\": [],\n    \"moduleNameMapper\": {\n      \"^react-native$\": \"react-native-web\",\n      \"^.+\\\\.module\\\\.(css|sass|scss)$\": \"identity-obj-proxy\"\n    },\n    \"moduleFileExtensions\": [\n      \"web.js\",\n      \"js\",\n      \"web.ts\",\n      \"ts\",\n      \"web.tsx\",\n      \"tsx\",\n      \"json\",\n      \"web.jsx\",\n      \"jsx\",\n      \"node\"\n    ],\n    \"watchPlugins\": [\n      \"jest-watch-typeahead/filename\",\n      \"jest-watch-typeahead/testname\"\n    ],\n    \"resetMocks\": true\n  },\n  \"packageManager\": \"yarn@3.2.3\",\n  \"babel\": {\n    \"presets\": [\n      \"react-app\"\n    ]\n  }\n}\n"
  },
  {
    "path": "client/public/_redirects",
    "content": "/*    /index.html   200\n"
  },
  {
    "path": "client/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#171717\" />\n    <meta\n      name=\"description\"\n      content=\"ZKP2P is a P2P fiat-to-crypto onramp\"\n    />\n\n    <!-- Open Graph tags -->\n    <meta property=\"og:title\" content=\"ZKP2P Ramp\" />\n    <meta property=\"og:description\" content=\"ZKP2P is a P2P fiat-to-crypto onramp\" />\n    <meta property=\"og:image\" content=\"%PUBLIC_URL%/banner.png\" />\n    <meta property=\"og:image:width\" content=\"1200\" />\n    <meta property=\"og:image:height\" content=\"630\" />\n\n    <!-- Twitter Card tags -->\n    <meta property=\"twitter:card\" content=\"summary_large_image\" />\n    <meta property=\"twitter:site\" content=\"https://zkp2p.xyz\" />\n    <meta property=\"twitter:title\" content=\"ZKP2P Ramp\" />\n    <meta property=\"twitter:creator\" content=\"@zkp2p\" />\n    <meta property=\"twitter:description\" content=\"P2P fiat-to-crypto onramp\" />\n    <meta property=\"twitter:image\" content=\"https://zkp2p-assets.s3.amazonaws.com/ramp_background.png\" />\n\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/app192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>Ramp</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <div id=\"modals\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "client/public/manifest.json",
    "content": "{\n  \"short_name\": \"ZKP2P\",\n  \"name\": \"Trustless fiat-to-crypto P2P onramp powered by ZK proofs\",\n  \"icons\": [\n    {\n      \"src\": \"/static/logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    }\n  ],\n  \"start_url\": \"./\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#171717\",\n  \"background_color\": \"#171717\"\n}"
  },
  {
    "path": "client/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "client/scripts/build.js",
    "content": "'use strict';\n\n// Do this as the first thing so that any code reading it knows the right env.\nprocess.env.BABEL_ENV = 'production';\nprocess.env.NODE_ENV = 'production';\n\n// Makes the script crash on unhandled rejections instead of silently\n// ignoring them. In the future, promise rejections that are not handled will\n// terminate the Node.js process with a non-zero exit code.\nprocess.on('unhandledRejection', err => {\n  throw err;\n});\n\n// Ensure environment variables are read.\nrequire('../config/env');\n\nconst path = require('path');\nconst chalk = require('react-dev-utils/chalk');\nconst fs = require('fs-extra');\nconst bfj = require('bfj');\nconst webpack = require('webpack');\nconst configFactory = require('../config/webpack.config');\nconst paths = require('../config/paths');\nconst checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');\nconst formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');\nconst printHostingInstructions = require('react-dev-utils/printHostingInstructions');\nconst FileSizeReporter = require('react-dev-utils/FileSizeReporter');\nconst printBuildError = require('react-dev-utils/printBuildError');\n\nconst measureFileSizesBeforeBuild =\n  FileSizeReporter.measureFileSizesBeforeBuild;\nconst printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild;\nconst useYarn = fs.existsSync(paths.yarnLockFile);\n\n// These sizes are pretty large. We'll warn for bundles exceeding them.\nconst WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024;\nconst WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;\n\nconst isInteractive = process.stdout.isTTY;\n\n// Warn and crash if required files are missing\nif (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {\n  process.exit(1);\n}\n\nconst argv = process.argv.slice(2);\nconst writeStatsJson = argv.indexOf('--stats') !== -1;\n\n// Generate configuration\nconst config = configFactory('production');\n\n// We require that you explicitly set browsers and do not fall back to\n// browserslist defaults.\nconst { checkBrowsers } = require('react-dev-utils/browsersHelper');\ncheckBrowsers(paths.appPath, isInteractive)\n  .then(() => {\n    // First, read the current file sizes in build directory.\n    // This lets us display how much they changed later.\n    return measureFileSizesBeforeBuild(paths.appBuild);\n  })\n  .then(previousFileSizes => {\n    // Remove all content but keep the directory so that\n    // if you're in it, you don't end up in Trash\n    fs.emptyDirSync(paths.appBuild);\n    // Merge with the public folder\n    copyPublicFolder();\n    // Start the webpack build\n    return build(previousFileSizes);\n  })\n  .then(\n    ({ stats, previousFileSizes, warnings }) => {\n      if (warnings.length) {\n        console.log(chalk.yellow('Compiled with warnings.\\n'));\n        console.log(warnings.join('\\n\\n'));\n        console.log(\n          '\\nSearch for the ' +\n            chalk.underline(chalk.yellow('keywords')) +\n            ' to learn more about each warning.'\n        );\n        console.log(\n          'To ignore, add ' +\n            chalk.cyan('// eslint-disable-next-line') +\n            ' to the line before.\\n'\n        );\n      } else {\n        console.log(chalk.green('Compiled successfully.\\n'));\n      }\n\n      console.log('File sizes after gzip:\\n');\n      printFileSizesAfterBuild(\n        stats,\n        previousFileSizes,\n        paths.appBuild,\n        WARN_AFTER_BUNDLE_GZIP_SIZE,\n        WARN_AFTER_CHUNK_GZIP_SIZE\n      );\n      console.log();\n\n      const appPackage = require(paths.appPackageJson);\n      const publicUrl = paths.publicUrlOrPath;\n      const publicPath = config.output.publicPath;\n      const buildFolder = path.relative(process.cwd(), paths.appBuild);\n      printHostingInstructions(\n        appPackage,\n        publicUrl,\n        publicPath,\n        buildFolder,\n        useYarn\n      );\n    },\n    err => {\n      const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true';\n      if (tscCompileOnError) {\n        console.log(\n          chalk.yellow(\n            'Compiled with the following type errors (you may want to check these before deploying your app):\\n'\n          )\n        );\n        printBuildError(err);\n      } else {\n        console.log(chalk.red('Failed to compile.\\n'));\n        printBuildError(err);\n        process.exit(1);\n      }\n    }\n  )\n  .catch(err => {\n    if (err && err.message) {\n      if (process.env.NODE_ENV === 'production') {\n        // Generic error message in production\n        console.log('An error occurred during the build process.');\n      } else {\n        // Detailed error messages in development\n        console.log(err.message);\n      }\n    }\n    process.exit(1);\n  });\n\n// Create the production build and print the deployment instructions.\nfunction build(previousFileSizes) {\n  console.log('Creating an optimized production build...');\n\n  const compiler = webpack(config);\n  return new Promise((resolve, reject) => {\n    compiler.run((err, stats) => {\n      let messages;\n      if (err) {\n        if (!err.message) {\n          return reject(err);\n        }\n\n        let errMessage = err.message;\n\n        // Add additional information for postcss errors\n        if (Object.prototype.hasOwnProperty.call(err, 'postcssNode')) {\n          errMessage +=\n            '\\nCompileError: Begins at CSS selector ' +\n            err['postcssNode'].selector;\n        }\n\n        messages = formatWebpackMessages({\n          errors: [errMessage],\n          warnings: [],\n        });\n      } else {\n        messages = formatWebpackMessages(\n          stats.toJson({ all: false, warnings: true, errors: true })\n        );\n      }\n      if (messages.errors.length) {\n        // Only keep the first error. Others are often indicative\n        // of the same problem, but confuse the reader with noise.\n        if (messages.errors.length > 1) {\n          messages.errors.length = 1;\n        }\n        return reject(new Error(messages.errors.join('\\n\\n')));\n      }\n      if (\n        process.env.CI &&\n        (typeof process.env.CI !== 'string' ||\n          process.env.CI.toLowerCase() !== 'false') &&\n        messages.warnings.length\n      ) {\n        // Ignore sourcemap warnings in CI builds. See #8227 for more info.\n        const filteredWarnings = messages.warnings.filter(\n          w => !/Failed to parse source map/.test(w)\n        );\n        if (filteredWarnings.length) {\n          console.log(\n            chalk.yellow(\n              '\\nTreating warnings as errors because process.env.CI = true.\\n' +\n                'Most CI servers set it automatically.\\n'\n            )\n          );\n          return reject(new Error(filteredWarnings.join('\\n\\n')));\n        }\n      }\n\n      const resolveArgs = {\n        stats,\n        previousFileSizes,\n        warnings: messages.warnings,\n      };\n\n      if (writeStatsJson) {\n        return bfj\n          .write(paths.appBuild + '/bundle-stats.json', stats.toJson())\n          .then(() => resolve(resolveArgs))\n          .catch(error => reject(new Error(error)));\n      }\n\n      return resolve(resolveArgs);\n    });\n  });\n}\n\nfunction copyPublicFolder() {\n  fs.copySync(paths.appPublic, paths.appBuild, {\n    dereference: true,\n    filter: file => file !== paths.appHtml,\n  });\n}\n"
  },
  {
    "path": "client/scripts/start.js",
    "content": "'use strict';\n\n// Do this as the first thing so that any code reading it knows the right env.\nprocess.env.BABEL_ENV = 'development';\nprocess.env.NODE_ENV = 'development';\n\n// Makes the script crash on unhandled rejections instead of silently\n// ignoring them. In the future, promise rejections that are not handled will\n// terminate the Node.js process with a non-zero exit code.\nprocess.on('unhandledRejection', err => {\n  throw err;\n});\n\n// Ensure environment variables are read.\nrequire('../config/env');\n\nconst fs = require('fs');\nconst chalk = require('react-dev-utils/chalk');\nconst webpack = require('webpack');\nconst WebpackDevServer = require('webpack-dev-server');\nconst clearConsole = require('react-dev-utils/clearConsole');\nconst checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');\nconst {\n  choosePort,\n  createCompiler,\n  prepareProxy,\n  prepareUrls,\n} = require('react-dev-utils/WebpackDevServerUtils');\nconst openBrowser = require('react-dev-utils/openBrowser');\nconst semver = require('semver');\nconst paths = require('../config/paths');\nconst configFactory = require('../config/webpack.config');\nconst createDevServerConfig = require('../config/webpackDevServer.config');\nconst getClientEnvironment = require('../config/env');\nconst react = require(require.resolve('react', { paths: [paths.appPath] }));\n\nconst env = getClientEnvironment(paths.publicUrlOrPath.slice(0, -1));\nconst useYarn = fs.existsSync(paths.yarnLockFile);\nconst isInteractive = process.stdout.isTTY;\n\n// Warn and crash if required files are missing\nif (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {\n  process.exit(1);\n}\n\n// Tools like Cloud9 rely on this.\nconst DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;\nconst HOST = process.env.HOST || '0.0.0.0';\n\nif (process.env.HOST) {\n  console.log(\n    chalk.cyan(\n      `Attempting to bind to HOST environment variable: ${chalk.yellow(\n        chalk.bold(process.env.HOST)\n      )}`\n    )\n  );\n  console.log(\n    `If this was unintentional, check that you haven't mistakenly set it in your shell.`\n  );\n  console.log(\n    `Learn more here: ${chalk.yellow('https://cra.link/advanced-config')}`\n  );\n  console.log();\n}\n\n// We require that you explicitly set browsers and do not fall back to\n// browserslist defaults.\nconst { checkBrowsers } = require('react-dev-utils/browsersHelper');\ncheckBrowsers(paths.appPath, isInteractive)\n  .then(() => {\n    // We attempt to use the default port but if it is busy, we offer the user to\n    // run on a different port. `choosePort()` Promise resolves to the next free port.\n    return choosePort(HOST, DEFAULT_PORT);\n  })\n  .then(port => {\n    if (port == null) {\n      // We have not found a port.\n      return;\n    }\n\n    const config = configFactory('development');\n    const protocol = process.env.HTTPS === 'true' ? 'https' : 'http';\n    const appName = require(paths.appPackageJson).name;\n\n    const useTypeScript = fs.existsSync(paths.appTsConfig);\n    const urls = prepareUrls(\n      protocol,\n      HOST,\n      port,\n      paths.publicUrlOrPath.slice(0, -1)\n    );\n    // Create a webpack compiler that is configured with custom messages.\n    const compiler = createCompiler({\n      appName,\n      config,\n      urls,\n      useYarn,\n      useTypeScript,\n      webpack,\n    });\n    // Load proxy config\n    const proxySetting = require(paths.appPackageJson).proxy;\n    const proxyConfig = prepareProxy(\n      proxySetting,\n      paths.appPublic,\n      paths.publicUrlOrPath\n    );\n    // Serve webpack assets generated by the compiler over a web server.\n    const serverConfig = {\n      ...createDevServerConfig(proxyConfig, urls.lanUrlForConfig),\n      host: HOST,\n      port,\n    };\n    const devServer = new WebpackDevServer(serverConfig, compiler);\n    // Launch WebpackDevServer.\n    devServer.startCallback(() => {\n      if (isInteractive) {\n        clearConsole();\n      }\n\n      if (env.raw.FAST_REFRESH && semver.lt(react.version, '16.10.0')) {\n        console.log(\n          chalk.yellow(\n            `Fast Refresh requires React 16.10 or higher. You are using React ${react.version}.`\n          )\n        );\n      }\n\n      console.log(chalk.cyan('Starting the development server...\\n'));\n      openBrowser(urls.localUrlForBrowser);\n    });\n\n    ['SIGINT', 'SIGTERM'].forEach(function (sig) {\n      process.on(sig, function () {\n        devServer.close();\n        process.exit();\n      });\n    });\n\n    if (process.env.CI !== 'true') {\n      // Gracefully exit when stdin ends\n      process.stdin.on('end', function () {\n        devServer.close();\n        process.exit();\n      });\n    }\n  })\n  .catch(err => {\n    if (err && err.message) {\n      if (process.env.NODE_ENV === 'development') {\n        // Detailed error messages in development\n        console.log(err.message);\n      } else {\n        // Generic error message in production\n        console.log('An error occurred. Please try again later.');\n      }\n    }\n    process.exit(1);\n  });\n"
  },
  {
    "path": "client/src/App.css",
    "content": ".app-container {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n};\n\n.app-content {\n  flex-grow: 1;\n};"
  },
  {
    "path": "client/src/App.tsx",
    "content": "import React, { ReactNode } from 'react';\nimport {\n  BrowserRouter as Router,\n  Route,\n  Routes\n} from \"react-router-dom\";\nimport { GoogleOAuthProvider } from '@react-oauth/google';\n\nimport useMediaQuery from '@hooks/useMediaQuery';\n\nimport { TopNav } from \"@components/layouts/TopNav\";\nimport { BottomNav } from \"@components/layouts/BottomNav\";\nimport { EnvironmentBanner } from '@components/layouts/EnvironmentBanner';\n\nimport { Landing } from \"./pages/Landing\";\nimport { Permissions } from \"./pages/Permissions\";\nimport { Withdraw } from \"./pages/Withdraw\";\nimport { Registration } from \"./pages/Registration\";\nimport { Swap } from \"./pages/Swap\";\nimport { Liquidity } from \"./pages/Liquidity\";\nimport { Deposit } from \"./pages/Deposit\";\nimport { Send } from \"./pages/Send\";\nimport { Privacy } from \"./pages/Privacy\";\nimport { Tos } from \"./pages/Tos\";\nimport Modals from \"./pages/Modals\";\n\n// Common Contexts\nimport AccountProvider from \"./contexts/common/Account/AccountProvider\";\nimport BalancesProvider from \"./contexts/common/Balances/BalancesProvider\";\nimport GoogleAuthProvider from './contexts/common/GoogleAuth/GoogleAuthProvider';\nimport PlatformSettingsProvider from './contexts/common/PlatformSettings/PlatformSettingsProvider';\nimport ProofGenSettingsProvider from \"./contexts/common/ProofGenSettings/ProofGenSettingsProvider\";\nimport SendSettingsProvider from './contexts/common/SendSettings/SendSettingsProvider';\nimport SmartContractsProvider from './contexts/common/SmartContracts/SmartContractsProvider';\nimport SwapQuoteProvider from './contexts/common/SwapQuote/SwapQuoteProvider';\nimport DenyListProvider from './contexts/common/DenyList/DenyListProvider';\nimport ExtensionNotarizationsProvider from './contexts/common/ExtensionNotarizations/ExtensionNotarizationsProvider';\nimport NotarySettingsProvider from './contexts/common/NotarySettings/NotarySettingsProvider';\nimport { ModalSettingsProvider } from 'contexts/common/ModalSettings';\n\n// Legacy Contexts\nimport LegacyDepositsProvider  from './contexts/legacy/Deposits/DepositsProvider';\n\n// Venmo Contexts\nimport VenmoDepositsProvider  from './contexts/venmo/Deposits/DepositsProvider';\nimport VenmoLiquidityProvider from './contexts/venmo/Liquidity/LiquidityProvider';\nimport VenmoOnRamperIntentsProvider  from './contexts/venmo/OnRamperIntents/OnRamperIntentsProvider';\nimport VenmoPermissionsProvider from './contexts/venmo/Permissions/PermissionsProvider';\nimport VenmoRegistrationProvider from './contexts/venmo/Registration/RegistrationProvider';\nimport VenmoRampProvider  from './contexts/venmo/Ramp/RampProvider';\n\n// HDFC Contexts\n// import HdfcDepositsProvider from './contexts/hdfc/Deposits/DepositsProvider';\n// import HdfcLiquidityProvider from './contexts/hdfc/Liquidity/LiquidityProvider';\n// import HdfcOnRamperIntentsProvider  from './contexts/hdfc/OnRamperIntents/OnRamperIntentsProvider';\n// import HdfcRegistrationProvider from './contexts/hdfc/Registration/RegistrationProvider';\n// import HdfcRampProvider  from './contexts/hdfc/Ramp/RampProvider';\n\n// Garanti Contexts\nimport GarantiDepositsProvider  from './contexts/garanti/Deposits/DepositsProvider';\nimport GarantiLiquidityProvider from './contexts/garanti/Liquidity/LiquidityProvider';\nimport GarantiOnRamperIntentsProvider  from './contexts/garanti/OnRamperIntents/OnRamperIntentsProvider';\nimport GarantiRampProvider from './contexts/garanti/Ramp/RampProvider';\nimport GarantiRegistrationProvider from './contexts/garanti/Registration/RegistrationProvider';\n\n// Revolut Contexts\nimport RevolutDepositsProvider  from './contexts/revolut/Deposits/DepositsProvider';\nimport RevolutLiquidityProvider from './contexts/revolut/Liquidity/LiquidityProvider';\nimport RevolutOnRamperIntentsProvider  from './contexts/revolut/OnRamperIntents/OnRamperIntentsProvider';\nimport RevolutRampProvider from './contexts/revolut/Ramp/RampProvider';\nimport RevolutRegistrationProvider from './contexts/revolut/Registration/RegistrationProvider';\n\nimport \"./App.css\";\nimport \"./styles.css\";\n\nconst App = () => {\n  /*\n   * Context\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  /*\n   * Component\n   */\n\n  return (\n    <Router>\n      <Providers>\n        <div className=\"app-container\">\n          <EnvironmentBanner />\n          <TopNav />\n          <Modals />\n          <div className=\"app-content\">\n            <Routes>\n              <Route path=\"/\" element={<Landing />} />\n              <Route path=\"/swap\" element={<Swap />} />\n              <Route path=\"/liquidity\" element={<Liquidity />} />\n              <Route path=\"/deposits\" element={<Deposit />} />\n              <Route path=\"/register\" element={<Registration />} />\n              <Route path=\"/permissions\" element={<Permissions />} />\n              <Route path=\"/withdraw\" element={<Withdraw />} />\n              <Route path=\"/send\" element={<Send />} />\n              <Route path=\"/pp\" element={<Privacy />} />\n              <Route path=\"/tos\" element={<Tos />} />\n              <Route element={<>Not found</>} />\n            </Routes>\n          </div>\n\n          {( currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile') &&\n            <BottomNav />\n          }\n        </div>\n      </Providers>\n    </Router>\n  );\n};\n\ntype ProvidersType = [React.ElementType, Record<string, unknown>];\ntype ChildrenType = {\n  children: Array<React.ElementType>;\n};\n\nexport const buildProvidersTree = (\n  componentsWithProps: Array<ProvidersType>,\n) => {\n  const initialComponent = ({children}: ChildrenType) => <>{children}</>;\n  return componentsWithProps.reduce(\n    (\n      AccumulatedComponents: React.ElementType,\n      [Provider, props = {}]: ProvidersType,\n    ) => {\n      return ({children}: ChildrenType) => {\n        return (\n          <AccumulatedComponents>\n            <Provider {...props}>{children}</Provider>\n          </AccumulatedComponents>\n        );\n      };\n    },\n    initialComponent,\n  );\n};\n\nconst providersWithProps: ProvidersType[] = [\n  [AccountProvider, {}],\n  [SmartContractsProvider, {}],\n  [PlatformSettingsProvider, {}],\n  [SendSettingsProvider, {}],\n  [BalancesProvider, {}],\n  [NotarySettingsProvider, {}],\n\n  [VenmoRampProvider, {}],\n  // [HdfcRampProvider, {}],\n  [GarantiRampProvider, {}],\n  [RevolutRampProvider, {}],\n\n  [VenmoRegistrationProvider, {}],\n  // [HdfcRegistrationProvider, {}],\n  [GarantiRegistrationProvider, {}],\n  [RevolutRegistrationProvider, {}],\n\n  [VenmoDepositsProvider, {}],\n  [LegacyDepositsProvider, {}],\n  // [HdfcDepositsProvider, {}],\n  [GarantiDepositsProvider, {}],\n  [RevolutDepositsProvider, {}],\n\n  [ExtensionNotarizationsProvider, {}],\n\n  [VenmoPermissionsProvider, {}],\n  [DenyListProvider, {}],\n\n  [VenmoLiquidityProvider, {}],\n  // [HdfcLiquidityProvider, {}],\n  [GarantiLiquidityProvider, {}],\n  [RevolutLiquidityProvider, {}],\n\n  [VenmoOnRamperIntentsProvider, {}],\n  // [HdfcOnRamperIntentsProvider, {}],\n  [GarantiOnRamperIntentsProvider, {}],\n  [RevolutOnRamperIntentsProvider, {}],\n\n  [SwapQuoteProvider, {}],\n  [ProofGenSettingsProvider, {}],\n  [ModalSettingsProvider, {}],\n  [GoogleOAuthProvider, { clientId: process.env.GOOGLE_CLIENT_ID || \"\" }],\n  [GoogleAuthProvider, {}],\n];\n\nconst ProviderTree = buildProvidersTree(providersWithProps);\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst Providers: React.FC<ProvidersProps> = ({ children }) => {\n  return <ProviderTree>{children}</ProviderTree>;\n}\n\nexport default App;\n"
  },
  {
    "path": "client/src/ErrorBoundary.tsx",
    "content": "import React, { Component, ErrorInfo, ReactNode } from 'react';\nimport styled from \"styled-components\";\n\nimport { ThemedText } from './theme/text';\n\n\ninterface Props {\n  children: ReactNode;\n};\n\ninterface State {\n  hasError: boolean;\n  error: Error | null;\n};\n\nclass ErrorBoundary extends Component<Props, State> {\n  constructor(props: Props) {\n    super(props);\n    this.state = { hasError: false, error: null };\n  };\n\n  static getDerivedStateFromError(error: Error): State {\n    return { hasError: true, error };\n  };\n\n  componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n    if (process.env.NODE_ENV === 'development') {\n      console.error(\"Uncaught error:\", error, errorInfo);\n    }\n  };\n\n  render() {\n    if (this.state.hasError) {\n      return (\n        <Container>\n          <ThemedText.LargeHeader>\n            Something went wrong.\n          </ThemedText.LargeHeader>\n        </Container>\n      );\n    }\n\n    return this.props.children; \n  }\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  height: 100vh;\n  width: 100vw;\n`;\n\nexport default ErrorBoundary;\n"
  },
  {
    "path": "client/src/__fixtures__/compressed-files/uncompressed-value.txt",
    "content": "not compressed 👍"
  },
  {
    "path": "client/src/components/Account/AccountDropdown.tsx",
    "content": "import React, { useEffect, forwardRef } from 'react';\nimport { ArrowDownCircle, ArrowUpCircle, Repeat, LogOut, Key, UserCheck, Zap } from 'react-feather';\nimport styled from \"styled-components\";\nimport Link from '@mui/material/Link';\nimport { ENSName } from 'react-ens-name';\n\nimport { Overlay } from '@components/modals/Overlay';\nimport { EthereumAvatar } from \"@components/Account/Avatar\";\nimport { CopyButton } from \"@components/common/CopyButton\";\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport useSmartContracts from \"@hooks/useSmartContracts\";\nimport useModal from '@hooks/useModal';\nimport useQuery from '@hooks/useQuery';\nimport { formatAddress } from '@helpers/addressFormat';\nimport { CALLER_ACCOUNT } from '@helpers/constants';\nimport { toUsdcString, toEthString } from \"@helpers/units\";\nimport { colors } from '@theme/colors';\nimport { LoginStatus } from '@helpers/types';\nimport { MODALS } from '@helpers/types';\nimport { alchemyMainnetEthersProvider } from \"index\";\n\nimport usdcSvg from '../../assets/images/tokens/usdc.svg';\n\n\ninterface AccountDropdownProps {\n  onOptionSelect: () => void;\n}\n\nexport const AccountDropdown = forwardRef<HTMLDivElement, AccountDropdownProps>(({ onOptionSelect }, ref) => {\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * Contexts\n   */\n\n  const {\n    usdcBalance,\n    ethBalance,\n    refetchUsdcBalance,\n    refetchEthBalance,\n    shouldFetchUsdcBalance,\n    shouldFetchEthBalance\n  } = useBalances();\n  const {\n    accountDisplay,\n    authenticatedLogout,\n    loggedInEthereumAddress,\n    isLoggedIn,\n    loginStatus,\n    exportAuthenticatedWallet\n  } = useAccount();\n  const { blockscanUrl } = useSmartContracts();\n  const { openModal } = useModal();\n\n  /*\n   * Handler\n   */\n\n  const handleReceiveClick = () => {\n    openModal(MODALS.RECEIVE);\n\n    onOptionSelect();\n  };\n\n  const handleSendClick = () => {\n    navigateWithQuery('/send');\n\n    onOptionSelect();\n  };\n\n  const handleRegistrationClick = () => {\n    navigateWithQuery('/register');\n\n    onOptionSelect();\n  };\n\n  const handleLogout = async () => {\n    try {\n      await authenticatedLogout?.();\n    } catch (error) {\n      console.error(\"Failed to logout\");\n    }\n\n    onOptionSelect();\n  };\n\n  const handleExportWallet = () => {\n    exportAuthenticatedWallet?.();\n\n    onOptionSelect();\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchUsdcBalance) {\n      refetchUsdcBalance?.();\n    }\n\n    if(shouldFetchEthBalance) {\n      refetchEthBalance?.();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  /*\n   * Helpers\n   */\n\n  const userEtherscanLink = `${blockscanUrl}/address/${loggedInEthereumAddress}`;\n\n  const ethBalanceDisplay = ethBalance ? `${toEthString(ethBalance)} ETH` : '0 ETH';\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper>\n      <Overlay />\n\n      <NavDropdown ref={ref}>\n        <AccountAndUserIconContainer>\n          <EthereumAvatar address={loggedInEthereumAddress ?? CALLER_ACCOUNT} size={42} />\n          <AccountTypeLabel>\n            {isLoggedIn && loginStatus === LoginStatus.AUTHENTICATED ? accountDisplay : 'Connected'}\n          </AccountTypeLabel>\n          <AccountAddressAndENSContainer>\n            <AccountAddress>\n              <Link href={userEtherscanLink} target=\"_blank\">\n                <ENSName\n                  provider={alchemyMainnetEthersProvider}\n                  address={loggedInEthereumAddress || ''}\n                  customDisplay={(address) => formatAddress(address)}\n                />\n              </Link>\n            </AccountAddress>\n            <CopyButton textToCopy={loggedInEthereumAddress || ''} size={'sm'}/>\n          </AccountAddressAndENSContainer>\n        </AccountAndUserIconContainer>\n\n        <BalancesAndLogoContainer>\n          <UsdcSvg src={usdcSvg} />\n\n          <BalanceContainer>\n            <BalanceLabel>\n              {`USDC`}\n            </BalanceLabel>\n\n            <BalanceValue>\n              {usdcBalance ? toUsdcString(usdcBalance, true) : \"0\"}\n            </BalanceValue>\n          </BalanceContainer>\n        </BalancesAndLogoContainer>\n        \n        <NavDropdownItemsContainer>\n          <ItemAndIconContainer onClick={handleRegistrationClick}>\n            <StyledUserCheck />\n\n            <NavDropdownItem>\n              Registration\n            </NavDropdownItem>\n          </ItemAndIconContainer>\n\n          <ItemAndIconContainer onClick={handleReceiveClick}>\n            <StyledArrowDownCircle />\n\n            <NavDropdownItem>\n              Receive\n            </NavDropdownItem>\n          </ItemAndIconContainer>\n          \n          <ItemAndIconContainer onClick={handleSendClick}>\n            <StyledArrowUpCircle />\n\n            <NavDropdownItem>\n              Send\n            </NavDropdownItem>\n          </ItemAndIconContainer>\n\n          {loginStatus === LoginStatus.EOA && (\n            <ItemAndIconContainer onClick={() => window.open(\"https://bridge.base.org/deposit\", \"_blank\")}>\n              <StyledRepeat />\n              <BridgeLinkAndBalance>\n                <BridgeLink>\n                  Bridge ↗\n                </BridgeLink>\n\n                <EthBalance>\n                  {ethBalanceDisplay}\n                </EthBalance>\n              </BridgeLinkAndBalance>\n            </ItemAndIconContainer>\n          )}\n\n          {loginStatus === LoginStatus.AUTHENTICATED && (\n            <ItemAndIconContainer onClick={handleExportWallet}>\n              <StyledKey />\n\n              <NavDropdownItem>\n                Export Wallet\n              </NavDropdownItem>\n            </ItemAndIconContainer>\n          )}\n\n          <ItemAndIconContainer onClick={handleLogout}>\n            <StyledLogOut />\n            <LogoutContainer>\n              Logout\n            </LogoutContainer>\n          </ItemAndIconContainer>\n        </NavDropdownItemsContainer>\n      </NavDropdown>\n    </Wrapper>\n  );\n});\n\nconst Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  align-items: flex-start;\n`;\n\nconst NavDropdown = styled.div`\n  display: flex;\n  flex-direction: column;\n  border-radius: 12px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background: #1B1B1B;\n  position: absolute;\n  width: 248px;\n\n  top: calc(100% + 20px);\n  right: 0;\n\n  z-index: 20;\n  color: #FFFFFF;\n`;\n\nconst AccountAndUserIconContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.75rem;\n  white-space: nowrap;\n  align-items: center;\n  padding: 1.5rem;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst AccountTypeLabel = styled.div`\n  font-weight: 700;\n`;\n\nconst AccountAddressAndENSContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  gap: 0.5rem;\n`;\n\nconst AccountAddress = styled.div`\n`;\n\nconst StyledUserCheck = styled(UserCheck)`\n  color: #FFF;\n  height: 20px;\n  width: 20px;\n`;\n\nconst StyledArrowUpCircle = styled(ArrowUpCircle)`\n  color: #FFF;\n  height: 20px;\n  width: 20px;\n`;\n\nconst StyledArrowDownCircle = styled(ArrowDownCircle)`\n  color: #FFF;\n  height: 20px;\n  width: 20px;\n`;\n\nconst StyledZap = styled(Zap)`\n  color: #FFF;\n  height: 18px;\n  width: 18px;\n`;\n\nconst StyledRepeat = styled(Repeat)`\n  color: #FFF;\n  height: 18px;\n  width: 18px;\n`;\n\nconst StyledKey = styled(Key)`\n  color: #FFF;\n  height: 18px;\n  width: 18px;\n`;\n\nconst StyledLogOut = styled(LogOut)`\n  color: #E96069;\n  height: 20px;\n  width: 20px;\n`;\n\nconst BalancesAndLogoContainer = styled.div`\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  padding: 20px 24px;\n  gap: 20px;\n\n  font-family: 'Graphik';\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst UsdcSvg = styled.img`\n  width: 32px;\n  height: 32px;\n`;\n\nconst BalanceContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 8px;\n  justify-content: flex-start;\n`;\n\nconst BalanceValue = styled.div`\n  color: #FFFFFF;\n  font-size: 24px;\n`;\n\nconst BalanceLabel = styled.div`\n  color: #9ca3af;\n  font-size: 16px;\n`;\n\nconst NavDropdownItemsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  white-space: nowrap;\n  text-align: left;\n  font-size: 16px;\n  font-weight: 600;\n  text-decoration: none;\n  cursor: pointer;\n  padding: 8px 0px;\n  line-height: 1;\n`;\n\nconst LogoutContainer = styled.div`\n  cursor: pointer;\n  text-decoration: none;\n  color: #E96069;\n  padding-top: 2px;\n`;\n\nconst ItemAndIconContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n  flex-direction: flex-start;\n  padding: 16px 24px;\n\n  &:hover {\n    color: #6C757D;\n    box-shadow: none;\n\n    ${StyledKey},\n    ${StyledUserCheck},\n    ${StyledArrowUpCircle},\n    ${StyledArrowDownCircle},\n    ${StyledRepeat},\n    ${StyledZap} {\n      color: #6C757D;\n    }\n\n    ${StyledLogOut} {\n      color: #CA2221;\n    }\n\n    ${LogoutContainer} {\n      color: #CA2221;\n    }\n  }\n`;\n\nconst NavDropdownItem = styled.div`\n  color: inherit;\n  text-decoration: none;\n  padding-top: 2px;\n`;\n\nconst BridgeLinkAndBalance = styled.div`\n  display: flex;  \n  flex-direction: row;\n  justify-content: space-between;\n  align-items: flex-end;\n  flex-grow: 1;\n`;\n\nconst BridgeLink = styled.a`\n  color: inherit;\n  text-decoration: none;\n  background-color: #1B1B1B;\n`;\n\nconst EthBalance = styled.a`\n  color: #9ca3af;\n  font-size: 16px;\n  font-weight: 500;\n  padding-top: 2.5px;\n`;\n"
  },
  {
    "path": "client/src/components/Account/AccountLogin.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\nimport { X, User, Unlock } from 'react-feather';\nimport { useLogin, useConnectWallet } from '@privy-io/react-auth';\n\nimport { LoginTypeButton } from \"@components/Account/LoginTypeButton\";\nimport { Overlay } from '@components/modals/Overlay';\nimport { ThemedText } from '@theme/text'\nimport { colors } from '@theme/colors';\nimport { commonStrings } from '@helpers/strings';\nimport QuestionHelper from '@components/common/QuestionHelper';\n\n\ninterface AccountLoginProps {\n  onBackClick: () => void\n}\n\nexport const AccountLogin: React.FC<AccountLoginProps> = ({\n    onBackClick\n  }) => {\n  /*\n   * Contexts\n   */\n\n  const { login } = useLogin({\n    onComplete: () => {\n      onBackClick();\n    }\n  });\n  \n  const { connectWallet } = useConnectWallet({\n    onSuccess: () => {\n      onBackClick();\n    }\n  });\n  \n  /*\n  * Handlers\n  */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  }\n\n  const handleLogin = async () => {\n    try {\n      await login();\n    } catch (error) {\n      console.error(\"Failed to login\");\n    }\n  };\n\n  const handleConnectWallet = async () => {\n    try {\n      await connectWallet();\n    } catch (error) {\n      console.error(\"Failed to connect wallet\");\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay onClick={handleOverlayClick} />\n\n      <ModalContainer>\n        <TitleCenteredRow>\n          <div style={{ flex: 0.25 }}>\n            <button\n              onClick={handleOverlayClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n\n              <StyledX/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            {'Log In'}\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.25 }}/>\n        </TitleCenteredRow>\n        \n        <Logo size={80}>\n          <img src={`${process.env.PUBLIC_URL}/logo512.png`} alt=\"logo\" />\n        </Logo>\n\n        <InputsContainer>\n          <LoginTypeButton\n            onClick={handleLogin}\n            label=\"Use Email or Google\"\n            icon={<StyledUser/>}\n            value={\"Sign in with Social\"}\n          />\n\n          <HorizontalDivider/>\n\n          <LoginTypeButton\n            onClick={handleConnectWallet}\n            label=\"Connect using wallet\"\n            icon={<StyledUnlock/>}\n            value={\"Sign in with Ethereum\"}\n          />\n        </InputsContainer>\n        <TextAndHelperContainer>\n          <ThemedText.BodySmall>\n            {'What is the difference? '}\n          </ThemedText.BodySmall> \n          <QuestionHelper\n            text={commonStrings.get('LOGIN_MODAL_TOOLTIP')}\n          />\n        </TextAndHelperContainer>\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: 30;\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 320px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  align-items: center;\n  z-index: 40;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TitleCenteredRow = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  color: #FFF;\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst StyledUser = styled(User)`\n  color: #FFF;\n  height: 18px;\n  width: 18px;\n`;\n\nconst StyledUnlock = styled(Unlock)`\n  color: #FFF;\n  height: 18px;\n  width: 18px;\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst Logo = styled.div<{ size?: number }>`\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  color: #ffffff;\n  text-decoration: none;\n  font-size: 1.2rem;\n  padding: 1.75rem 0rem;\n\n  img {\n    width: ${({ size }) => size || 32}px;\n    height: ${({ size }) => size || 32}px;\n    object-fit: cover;\n  }\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n  margin: 1rem 0;\n`;\n\nconst TextAndHelperContainer = styled.div`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  justify-content: center;\n  padding-top: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/Account/Avatar.tsx",
    "content": "import React from 'react';\n\n\nconst ethereumAddressToGradient = (ethereumAddress: string): string => {\n  if (!ethereumAddress.startsWith('0x') || ethereumAddress.length !== 42) {\n    console.error('Invalid Ethereum address');\n    return '';\n  }\n\n  const color1 = `#${ethereumAddress.substring(2, 8)}`;\n  const color2 = `#${ethereumAddress.substring(34, 40)}`;\n\n  return `linear-gradient(135deg, ${color1}, ${color2})`;\n};\n\ninterface EthereumAvatarProps {\n  address: string;\n  size?: number;\n}\n\nexport const EthereumAvatar: React.FC<EthereumAvatarProps> = ({ address, size = 24 }) => {\n  const gradient = ethereumAddressToGradient(address);\n\n  return (\n    <div\n      style={{\n        width: `${size}px`, // Use the size prop for width\n        height: `${size}px`, // Use the size prop for height\n        borderRadius: '50%',\n        background: gradient,\n        display: 'inline-block',\n      }}\n    />\n  );\n};"
  },
  {
    "path": "client/src/components/Account/LoginTypeButton.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\nimport { ArrowRight } from 'react-feather';\n\nimport { colors } from '@theme/colors';\n\n\ninterface LoginTypeButtonProps {\n  label: string;\n  value?: string;\n  icon?: React.ReactNode;\n  onClick?: () => void;\n}\n\nexport const LoginTypeButton: React.FC<LoginTypeButtonProps> = ({\n  label,\n  value,\n  icon,\n  onClick,\n}: LoginTypeButtonProps) => {\n  LoginTypeButton.displayName = \"Input\";\n\n  return (\n    <Container onClick={onClick}>\n      <IconContainer>\n        {icon && (\n          <StyledIcon>\n            <IconBorder>{icon}</IconBorder>\n          </StyledIcon>\n        )}\n      </IconContainer>\n\n      <LabelContainer>\n        <TitleLabel>\n          {value}\n        </TitleLabel>\n        <DescriptionLabel>\n          {label}\n        </DescriptionLabel>\n      </LabelContainer>\n\n      <ArrowRightContainer>\n        <StyledArrowRight />\n      </ArrowRightContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.button`\n  display: flex;\n  flex-direction: row;\n  gap: 1.5rem;\n  padding: 12px 16px 12px 20px;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  background-color: #131A2A;\n\n  &:hover {\n    background-color: #1A2236;\n    border-color: #CED4DA;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n  }\n\n  &:focus-within {\n    border-color: #CED4DA;\n    border-width: 1px;\n  }\n  \n  font-family: 'Graphik';\n  cursor: pointer;\n  transition: background 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\n  align-items: center;\n`;\n\nconst IconContainer = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nconst StyledIcon = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst IconBorder = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 8px;\n  border-radius: 50%;\n  border: 1px solid #FFF;\n`;\n\nconst LabelContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.4rem;\n  padding-top: 4px;\n  min-width: 165px;\n  color: #CED4DA;\n`;\n\nconst TitleLabel = styled.label`\n  display: flex;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n`;\n\nconst DescriptionLabel = styled.label`\n  display: flex;\n  font-size: 13px;\n  cursor: pointer;\n`;\n\nconst StyledArrowRight = styled(ArrowRight)`\n  color: #FFF;\n  height: 20px;\n  width: 20px;\n`;\n\nconst ArrowRightContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n"
  },
  {
    "path": "client/src/components/Account/ReceiveModal.tsx",
    "content": "import React, { Suspense } from 'react';\nimport styled from 'styled-components/macro';\nimport QRCode from \"react-qr-code\";\nimport Link from '@mui/material/Link';\nimport { X } from 'react-feather';\nimport { ENSName, AddressDisplayEnum } from 'react-ens-name';\n\nimport { Overlay } from '@components/modals/Overlay';\nimport { CopyButton } from '@components/common/CopyButton';\nimport { ThemedText } from '@theme/text'\nimport { colors } from '@theme/colors';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useModal from '@hooks/useModal';\nimport { commonStrings } from '@helpers/strings';\nimport { alchemyMainnetEthersProvider } from \"index\";\nimport { Z_INDEX } from '@theme/zIndex';\n\nimport baseSvg from '../../assets/images/base.svg';\nimport sepoliaSvg from '../../assets/images/sepolia.svg';\n\n\nexport default function ReceiveModal() {\n  /*\n   * Contexts\n   */\n\n  const { closeModal } = useModal();\n  const { loggedInEthereumAddress, network } = useAccount();\n  const { blockscanUrl, usdcAddress } = useSmartContracts();\n\n  /*\n   * Handlers\n   */\n\n  const handleCloseModal = () => {\n    closeModal();\n  };\n\n  /*\n   * Helpers\n   */\n\n  const usdcEtherscanLink = `${blockscanUrl}/address/${usdcAddress}`;\n\n  const networkName = (): string => {\n    if (network === 'sepolia') {\n      return 'Sepolia';\n    } else {\n      return 'Base';\n    }\n  };\n\n  const networkSvg = (): string => {\n    if (network === 'sepolia') {\n      return sepoliaSvg;\n    } else {\n      return baseSvg;\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay onClick={handleCloseModal} />\n\n      <Suspense>\n        <ModalContainer>\n          <TitleCenteredRow>\n            <div style={{ flex: 0.25 }}>\n              <button\n                onClick={handleCloseModal}\n                style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n                >\n\n                <StyledX/>\n              </button>\n            </div>\n\n            <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n              {'Receive'}\n            </ThemedText.HeadlineSmall>\n\n            <div style={{ flex: 0.25 }}/>\n          </TitleCenteredRow>\n\n          <QRContainer>\n            <QRCode\n              value={`ethereum:${loggedInEthereumAddress}`}\n              size={192}/>\n          </QRContainer>\n\n          <AccountAddressContainer>\n            <AddressAndEnsNameContainer>\n              <ThemedText.LabelSmall style={{ textAlign: 'left', color: '#FFF' }}>\n                {networkName()} Address (Ethereum)\n              </ThemedText.LabelSmall>\n\n              <AddressLabel>\n                <ENSName\n                  provider={alchemyMainnetEthersProvider}\n                  address={loggedInEthereumAddress || ''}\n                  displayType={AddressDisplayEnum.FULL}\n                />\n              </AddressLabel>\n            </AddressAndEnsNameContainer>\n\n            <CopyButton textToCopy={loggedInEthereumAddress || ''} />\n          </AccountAddressContainer>\n\n          <InstructionsContainer>\n            <NetworkSvg src={networkSvg()} />\n\n            <InstructionsLabel>\n              { commonStrings.get('RECEIVE_FUNDS_INSTRUCTIONS_1') }\n              <Link href={usdcEtherscanLink} target=\"_blank\">\n                Native USDC\n              </Link> from {networkName()}.\n              { commonStrings.get('RECEIVE_FUNDS_INSTRUCTIONS_2') }\n            </InstructionsLabel>\n          </InstructionsContainer>\n        </ModalContainer>\n      </Suspense>\n    </ModalAndOverlayContainer>\n  );\n}\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 440px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  align-items: center;\n  z-index: ${Z_INDEX.receive_modal};\n  gap: 1.5rem;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TitleCenteredRow = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 1.5rem;\n  color: #FFF;\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst QRContainer = styled.div`\n  padding: 1.25rem 1.25rem 1rem 1.25rem;\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 16px;\n  background: #131A2A;\n`;\n\nconst AccountAddressContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 0.25rem 1.5rem;\n  text-align: left;\n`;\n\nconst AddressAndEnsNameContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  text-align: left;\n  color: #9ca3af;\n  gap: 1rem;\n`;\n\nconst AddressLabel = styled.div`\n  max-width: calc(100% - 32px);\n  word-break: break-all;\n  line-height: 1.4;\n`;\n\nconst NetworkSvg = styled.img`\n  width: 32px;\n  height: 32px;\n`;\n\nconst InstructionsContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 16px;\n  align-items: center;\n  gap: 1.5rem;\n  padding: 1rem 1.5rem;\n  color: #FFF;\n`;\n\nconst InstructionsLabel = styled.div`\n  font-size: 15px;\n  line-height: 1.5;\n  text-align: left;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/CurrencySelector.tsx",
    "content": "import React, { useReducer, useRef } from \"react\";\nimport styled from 'styled-components';\nimport { X, ChevronDown } from 'react-feather';\nimport Link from '@mui/material/Link';\n\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Overlay } from '@components/modals/Overlay';\nimport { CurrencyRow } from '@components/modals/CurrencyRow';\nimport { CurrencyIndexType, paymentPlatformInfo, PaymentPlatformType } from '@helpers/types';\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport { ZKP2P_SURVEY_FORM_LINK } from \"../../helpers/docUrls\";\nimport usePlatformSettings from \"@hooks/usePlatformSettings\";\nimport { Z_INDEX } from '@theme/zIndex';\n\n\nexport const CurrencySelector: React.FC = () => {\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  const ref = useRef<HTMLDivElement>(null)\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined)\n\n  /*\n   * Contexts\n   */\n\n  const { paymentPlatform, currencyIndex, setCurrencyIndex } = usePlatformSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    toggleOpen();\n  };\n\n  const handleSelectCurrency = (currencyIndex: CurrencyIndexType) => {\n    if (setCurrencyIndex) {\n      setCurrencyIndex(currencyIndex);\n\n      toggleOpen();\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <CurrencyAndChevronContainer onClick={toggleOpen}>\n        <CurrencySvg src={paymentPlatformInfo[paymentPlatform as PaymentPlatformType].flagSvgs[currencyIndex]} />\n        <CurrencyLabel>\n          {paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies[currencyIndex]}\n        </CurrencyLabel>\n        <StyledChevronDown/>\n      </CurrencyAndChevronContainer>\n\n      {isOpen && (\n        <ModalAndOverlayContainer>\n          <Overlay onClick={handleOverlayClick}/>\n\n          <ModalContainer>\n            <TableHeader>\n              <ThemedText.SubHeader style={{ textAlign: 'left' }}>\n                Select a currency\n              </ThemedText.SubHeader>\n\n              <button\n                onClick={handleOverlayClick}\n                style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n                <StyledX/>\n              </button>\n            </TableHeader>\n\n            <HorizontalDivider/>\n\n            <Table>\n              { paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies.map((currency, currIndex) => (\n                <CurrencyRow\n                  key={currIndex}\n                  platformCurrency={currency}\n                  flagSvg={paymentPlatformInfo[paymentPlatform as PaymentPlatformType].flagSvgs[currIndex]}\n                  isSelected={currencyIndex === currIndex}\n                  onRowClick={() => handleSelectCurrency(currIndex)}\n                />\n              ))}\n            </Table>\n\n            <HorizontalDivider/>\n\n            <TableFooter>\n              Let us know which currencies you are interested in seeing ZKP2P add support\n              for. <Link href={ ZKP2P_SURVEY_FORM_LINK } target=\"_blank\">\n                Give feedback ↗\n              </Link>\n            </TableFooter>\n          </ModalContainer>\n        </ModalAndOverlayContainer>\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst CurrencyAndChevronContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  border-radius: 24px;\n  background: ${colors.selectorColor};\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 4px 8px 4px 4px;\n  gap: 6px;\n  cursor: pointer;\n\n  &:hover {\n    background-color: ${colors.selectorHover};\n    border: 1px solid ${colors.selectorHoverBorder};\n  }\n`;\n\nconst CurrencyLabel = styled.div`\n  color: #FFF;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  padding: 1px 5px 0px 5px;\n`;\n\nconst CurrencySvg = styled.img`\n  border-radius: 18px;\n  width: 24px;\n  height: 24px;\n`;\n\nconst StyledChevronDown = styled(ChevronDown)`\n  width: 20px;\n  height: 20px;\n  color: #FFF;\n`;\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TableHeader = styled.div`\n  box-sizing: border-box;\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px 16px 16px 20px;\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  color: #616161;\n  height: 284px;\n\n  overflow-y: auto;\n  scrollbar-width: thin;\n`;\n\nconst TableFooter = styled.div`\n  padding: 20px;\n  font-size: 14px;\n  text-align: left;\n  line-height: 1.5;\n`;"
  },
  {
    "path": "client/src/components/Deposit/DepositRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport { AccessoryButton } from '@components/common/AccessoryButton';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface PositionRowProps {\n  availableDepositAmount: string;\n  totalDepositAmount: string;\n  outstandingIntentAmount: string;\n  intentCount: string;\n  conversionRate: string;\n  conversionCurrency: string;\n  rowIndex: number;\n  isCancelDepositLoading: boolean;\n  handleWithdrawClick: () => void;\n}\n\nexport const PositionRow: React.FC<PositionRowProps> = ({\n  availableDepositAmount,\n  totalDepositAmount,\n  outstandingIntentAmount,\n  intentCount,\n  conversionRate,\n  conversionCurrency,\n  rowIndex,\n  isCancelDepositLoading,\n  handleWithdrawClick\n}: PositionRowProps) => {\n  PositionRow.displayName = \"PositionRow\";\n\n  const depositRemainingLabel = `${availableDepositAmount} USDC`;\n  const intentAmountLabel = `${intentCount} (${outstandingIntentAmount} USDC)`;\n  const originalAmountLabel = `${totalDepositAmount} USDC`;\n  const isMobile = useMediaQuery() === 'mobile';\n\n  return (\n    <Container>\n      <IntentDetailsContainer isMobile={isMobile}>\n        <PositionDetailsContainer>\n          <SummaryLabelsAndIconContainer>\n            {!isMobile &&\n              <SVGIconThemed\n                icon={'usdc'}\n                width={'24'}\n                height={'24'}\n              />\n            }\n\n            <SummaryLabelsContainer>\n              <SummaryLabel>\n                <SummaryLabelTitle>{!isMobile ? 'Available USDC' : 'Available'}:&nbsp;</SummaryLabelTitle>\n                <SummaryLabelValue>{depositRemainingLabel}</SummaryLabelValue>\n              </SummaryLabel>\n\n              <SummaryLabel>\n                <SummaryLabelTitle>{!isMobile ? 'Outstanding Orders' : 'Orders'}:&nbsp;</SummaryLabelTitle>\n                <SummaryLabelValue>{intentAmountLabel}</SummaryLabelValue>\n              </SummaryLabel>\n\n              <PercentageLabel>\n                <Label>Conversion Rate:</Label>\n                <Value>{conversionRate}</Value>\n              </PercentageLabel>\n\n              <SummaryLabel>\n                <SummaryLabelTitle>Deposit Amount:&nbsp;</SummaryLabelTitle>\n                <SummaryLabelValue>{originalAmountLabel}</SummaryLabelValue>\n              </SummaryLabel>\n            </SummaryLabelsContainer>\n          </SummaryLabelsAndIconContainer>\n        </PositionDetailsContainer>\n\n        <ActionsContainer>\n          <AccessoryButton\n            onClick={handleWithdrawClick}\n            height={36}\n            loading={isCancelDepositLoading}\n            title={'Withdraw'}\n            icon={isMobile ? undefined : 'logout'}\n          />\n        </ActionsContainer>\n      </IntentDetailsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n`;\n\nconst IntentDetailsContainer = styled.div<{isMobile?: boolean}>`\n  width: 100%; \n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  padding: 1.5rem;\n  line-height: 24px;\n`;\n\nconst PositionDetailsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n`;\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: flex-end;\n  flex-grow: 1;\n`;\n\nconst SummaryLabelsAndIconContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n`;\n\nconst SummaryLabelsContainer = styled.div`\n  width: 100%; \n  display: flex;\n  gap: 2px;\n  flex-direction: column;\n  line-height: 24px;\n`;\n\nconst SummaryLabel = styled.label`\n  display: flex;\n  font-size: 15px;\n  color: #FFFFFF;\n  align-items: center;\n`;\n\nconst SummaryLabelTitle = styled.span`\n  font-size: 15px;\n  color: #6C757D;\n`;\n\nconst SummaryLabelValue = styled.span`\n  font-size: 15px;\n  color: #FFFFFF;\n`;\n\nconst PercentageLabel = styled.div`\n  display: flex;\n`;\n\nconst Label = styled.span`\n  color: #6C757D;\n  font-size: 15px;\n`;\n\nconst Value = styled.span`\n  color: #FFFFFF;\n  font-size: 15px;\n  margin-left: 4px;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/DepositTable.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport { Inbox, FileText } from 'react-feather';\nimport styled, { css } from 'styled-components/macro';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from '@components/common/Button';\nimport { RowBetween } from '@components/layouts/Row';\nimport { PositionRow } from \"@components/Deposit/DepositRow\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { PlatformSelector } from '@components/modals/PlatformSelector';\nimport { keccak256 } from '@helpers/keccack';\nimport { Abi, CurrencyCode, ReceiveCurrencyId, DepositWithAvailableLiquidity, paymentPlatformInfo } from '@helpers/types';\nimport { toUsdcString, conversionRateToMultiplierString } from '@helpers/units';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\n\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport useQuery from '@hooks/useQuery';\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport useDeposits from '@hooks/venmo/useDeposits';\nimport useHdfcDeposits from '@hooks/hdfc/useDeposits';\nimport useGarantiDeposits from '@hooks/garanti/useDeposits';\nimport useRevolutDeposits from '@hooks/revolut/useDeposits';\n\nimport useRegistration from '@hooks/venmo/useRegistration';\nimport useHdfcRegistration from '@hooks/hdfc/useRegistration';\nimport useGarantiRegistration from '@hooks/garanti/useRegistration';\nimport useRevolutRegistration from '@hooks/revolut/useRegistration';\n\n\nexport interface DepositPrime {\n  depositor: string;\n  availableDepositAmount: string;\n  totalDepositAmount: string;\n  outstandingIntentAmount: string;\n  intentCount: string;\n  conversionRate: string;\n  conversionCurrency: string;\n}\n\ninterface PositionTableProps {\n  handleNewPositionClick: () => void;\n}\n\nexport const PositionTable: React.FC<PositionTableProps> = ({\n  handleNewPositionClick\n}) => {\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn } = useAccount();\n  const {\n    venmoRampAddress,\n    venmoRampAbi,\n    hdfcRampAddress,\n    hdfcRampAbi,\n    garantiRampAddress,\n    garantiRampAbi,\n    revolutRampAddress,\n    revolutRampAbi\n  } = useSmartContracts();\n  const { refetchUsdcBalance } = useBalances();\n  const { PaymentPlatform, paymentPlatform } = usePlatformSettings();\n\n  const {\n    isRegistered: isVenmoRegistered\n  } = useRegistration();\n\n  const {\n    isRegistered: isHdfcRegistered\n  } = useHdfcRegistration();\n\n  const {\n    isRegistered: isGarantiRegistered\n  } = useGarantiRegistration();\n\n  const {\n    isRegistered: isRevolutRegistered\n  } = useRevolutRegistration();\n\n  const {\n    deposits: venmoDeposits,\n    refetchDeposits: refetchVenmoDeposits\n  } = useDeposits();\n\n  const {\n    deposits: hdfcDeposits,\n    refetchDeposits: refetchHdfcDeposits\n  } = useHdfcDeposits();\n\n  const {\n    deposits: garantiDeposits,\n    refetchDeposits: refetchGarantiDeposits\n  } = useGarantiDeposits();\n\n  const {\n    deposits: revolutDeposits,\n    refetchDeposits: refetchRevolutDeposits\n  } = useRevolutDeposits();\n\n  /*\n   * State\n   */\n\n  const [positionsRowData, setPositionsRowData] = useState<DepositPrime[]>([]);\n\n  const [isRegistered, setIsRegistered] = useState<boolean>(false);\n\n  const [selectedDepositIdToWithdraw, setSelectedDepositIdToWithdraw] = useState<bigint>(0n);\n  const [selectedRowIndexToWithdraw, setSelectedRowIndexToWithdraw] = useState<number>(0);\n\n  const [withdrawRampAddress, setWithdrawRampAddress] = useState<string>(venmoRampAddress as any);\n  const [withdrawRampAbi, setWithdrawRampAbi] = useState<Abi>(venmoRampAbi as any);\n\n  const [shouldConfigureWithdrawWrite, setShouldConfigureWithdrawWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // withdrawDeposit(uint256[] memory _depositIds)\n  //\n  const { config: writeWithdrawConfig } = usePrepareContractWrite({\n    address: withdrawRampAddress,\n    abi: withdrawRampAbi,\n    functionName: 'withdrawDeposit',\n    args: [\n      [selectedDepositIdToWithdraw],\n    ],\n    enabled: shouldConfigureWithdrawWrite\n  });\n\n  const {\n    data: submitWithdrawResult,\n    isLoading: isSubmitWithdrawLoading,\n    status: submitWithdrawStatus,\n    writeAsync: writeSubmitWithdrawAsync,\n  } = useContractWrite(writeWithdrawConfig);\n\n  const {\n    isLoading: isSubmitWithdrawMining\n  } = useWaitForTransaction({\n    hash: submitWithdrawResult ? submitWithdrawResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitWithdrawAsync successful: ', data);\n      \n      switch (paymentPlatform) {\n        case PaymentPlatform.VENMO:\n          refetchVenmoDeposits?.();\n          break;\n\n        case PaymentPlatform.HDFC:\n          refetchHdfcDeposits?.();\n          break;\n        \n        case PaymentPlatform.GARANTI:\n          refetchGarantiDeposits?.();\n          break;\n\n        case PaymentPlatform.REVOLUT:\n          refetchRevolutDeposits?.();\n          break;\n\n        default:\n          throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n      }\n\n      refetchUsdcBalance?.();\n\n      setShouldConfigureWithdrawWrite(false);\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (paymentPlatform) {\n      switch (paymentPlatform) {\n        case PaymentPlatform.VENMO:\n          setIsRegistered(isVenmoRegistered);\n          break;\n\n        case PaymentPlatform.HDFC:\n          setIsRegistered(isHdfcRegistered);\n          break;\n        \n        case PaymentPlatform.GARANTI:\n          setIsRegistered(isGarantiRegistered);\n          break;\n\n        case PaymentPlatform.REVOLUT:\n          setIsRegistered(isRevolutRegistered);\n          break;\n\n        default:\n          throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n      }\n    } else {\n      setIsRegistered(false);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [paymentPlatform, isVenmoRegistered, isHdfcRegistered, isGarantiRegistered, isRevolutRegistered]);\n\n  useEffect(() => {\n    let depositsToDisplay: DepositWithAvailableLiquidity[] | null = [];\n    let conversionCurrenciesToDisplay: string[] = [];\n    if (paymentPlatform) {\n      switch (paymentPlatform) {\n        case PaymentPlatform.VENMO:\n          depositsToDisplay = venmoDeposits ?? [];\n          conversionCurrenciesToDisplay = depositsToDisplay.map(() => CurrencyCode.USD)\n          break;\n\n        case PaymentPlatform.HDFC:\n          depositsToDisplay = hdfcDeposits ?? [];\n          conversionCurrenciesToDisplay = depositsToDisplay.map(() => CurrencyCode.INR)\n          break;\n\n        case PaymentPlatform.GARANTI:\n          depositsToDisplay = garantiDeposits ?? [];\n          conversionCurrenciesToDisplay = depositsToDisplay.map(() => CurrencyCode.TRY)\n          break;\n\n        case PaymentPlatform.REVOLUT:\n          depositsToDisplay = revolutDeposits ?? [];\n\n          conversionCurrenciesToDisplay = depositsToDisplay.map(depositToDisplay => (\n            paymentPlatformInfo[PaymentPlatform.REVOLUT].platformCurrencies.find(\n              currency => keccak256(currency) === depositToDisplay.deposit.receiveCurrencyId\n            ) ?? ReceiveCurrencyId.EUR\n          ))\n          break;\n\n        default:\n          throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n      }\n    }\n\n    if (!depositsToDisplay) {\n      setPositionsRowData([]);  \n    } else {\n      var sanitizedPositions: DepositPrime[] = [];\n      sanitizedPositions = depositsToDisplay.map((depositWithLiquidity: DepositWithAvailableLiquidity, index: number) => {\n        const deposit = depositWithLiquidity.deposit\n\n        const depositor = deposit.depositor;\n        const availableDepositAmount = toUsdcString(depositWithLiquidity.availableLiquidity, true);\n        const totalDepositAmount = toUsdcString(deposit.depositAmount, true);\n        const intentCount = deposit.intentHashes.length.toString();\n        const outstandingIntentAmount = toUsdcString(deposit.outstandingIntentAmount, true);\n        const conversionRate = conversionRateToMultiplierString(deposit.conversionRate);\n        const conversionCurrency = conversionCurrenciesToDisplay[index];\n\n        return {\n          depositor,\n          availableDepositAmount,\n          totalDepositAmount,\n          outstandingIntentAmount,\n          intentCount,\n          conversionRate,\n          conversionCurrency\n        };\n      });\n\n      setPositionsRowData(sanitizedPositions);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [venmoDeposits, hdfcDeposits, garantiDeposits, revolutDeposits, paymentPlatform]);\n\n  useEffect(() => {\n    const executeWithdrawDeposit = async () => {\n      const requiredStatusForExecution = submitWithdrawStatus === 'idle' || submitWithdrawStatus === 'error';\n\n      if (shouldConfigureWithdrawWrite && writeSubmitWithdrawAsync && requiredStatusForExecution) {\n        try {\n          await writeSubmitWithdrawAsync();\n        } catch (error) {\n          console.log('writeSubmitWithdrawAsync failed: ', error);\n\n          setShouldConfigureWithdrawWrite(false);\n        }\n      }\n    };\n  \n    executeWithdrawDeposit();\n  }, [\n    shouldConfigureWithdrawWrite,\n    writeSubmitWithdrawAsync,\n    submitWithdrawStatus,\n  ]);\n\n  /*\n   * Handlers\n   */\n\n  const navigateToRegistrationHandler = () => {\n    navigateWithQuery('/register');\n  };\n\n  const handleWithdrawClick = async (rowIndex: number) => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        if (venmoDeposits) {\n          const selectedDeposit = venmoDeposits[rowIndex];\n          setSelectedDepositIdToWithdraw(selectedDeposit.depositId);\n\n          setSelectedRowIndexToWithdraw(rowIndex);\n\n          setWithdrawRampAddress(venmoRampAddress as any);\n          setWithdrawRampAbi(venmoRampAbi as any);\n\n          setShouldConfigureWithdrawWrite(true);\n        }\n        break;\n\n      case PaymentPlatform.HDFC:\n        if (hdfcDeposits) {\n          const selectedDeposit = hdfcDeposits[rowIndex];\n          setSelectedDepositIdToWithdraw(selectedDeposit.depositId);\n\n          setSelectedRowIndexToWithdraw(rowIndex);\n          \n          setWithdrawRampAddress(hdfcRampAddress as any);\n          setWithdrawRampAbi(hdfcRampAbi as any);\n\n          setShouldConfigureWithdrawWrite(true);\n        }\n        break;\n        \n      case PaymentPlatform.GARANTI:\n        if (garantiDeposits) {\n          const selectedDeposit = garantiDeposits[rowIndex];\n          setSelectedDepositIdToWithdraw(selectedDeposit.depositId);\n\n          setSelectedRowIndexToWithdraw(rowIndex);\n          \n          setWithdrawRampAddress(garantiRampAddress as any);\n          setWithdrawRampAbi(garantiRampAbi as any);\n\n          setShouldConfigureWithdrawWrite(true);\n        }\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        if (revolutDeposits) {\n          const selectedDeposit = revolutDeposits[rowIndex];\n          setSelectedDepositIdToWithdraw(selectedDeposit.depositId);\n\n          setSelectedRowIndexToWithdraw(rowIndex);\n          \n          setWithdrawRampAddress(revolutRampAddress as any);\n          setWithdrawRampAbi(revolutRampAbi as any);\n\n          setShouldConfigureWithdrawWrite(true);\n        }\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n  };\n  \n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleRow>\n        <ThemedText.HeadlineMedium>\n          Deposits\n        </ThemedText.HeadlineMedium>\n        {isLoggedIn && isRegistered ? (\n          <Button onClick={handleNewPositionClick} height={40}>\n              + New Deposit\n          </Button>\n        ) : null}\n      </TitleRow>\n\n      <Content>\n        {!isLoggedIn ? (\n          <ErrorContainer>\n            <ThemedText.DeprecatedBody textAlign=\"center\">\n              <InboxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n              <div>\n                Your active deposits will appear here.\n              </div>\n            </ThemedText.DeprecatedBody>\n            <CustomConnectButton width={152} />\n          </ErrorContainer>\n        ) : !isRegistered ? (\n          <ErrorContainer>\n            <PlatformSelectorContainer>\n              <PlatformSelector usePillSelector={true} />\n            </PlatformSelectorContainer>\n\n            <ThemedText.DeprecatedBody textAlign=\"center\">\n              <FileTextIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n              <div>\n                You must register to create a deposit.\n              </div>\n            </ThemedText.DeprecatedBody>\n            <Button\n              onClick={navigateToRegistrationHandler}\n            >\n              Complete Registration\n            </Button>\n          </ErrorContainer>\n        ) : positionsRowData.length === 0 ? (\n            <ErrorContainer>\n              <PlatformSelectorContainer>\n                <PlatformSelector usePillSelector={true}/>\n              </PlatformSelectorContainer>\n\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <InboxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  You have no active deposits.\n                </div>\n              </ThemedText.DeprecatedBody>\n            </ErrorContainer>\n        ) : (\n          <PositionsContainer>\n            <PlatformSelectorContainer>\n              <PlatformSelector usePillSelector={true}/>\n            </PlatformSelectorContainer>\n            \n            <PositionCountTitle>\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Your active deposits ({positionsRowData.length})\n              </ThemedText.LabelSmall>\n\n              <PlatformSelectorContainer>\n                <PlatformSelector usePillSelector={true}/>\n              </PlatformSelectorContainer>\n            </PositionCountTitle>\n\n            <Table>\n              {positionsRowData.map((positionRow, rowIndex) => (\n                <PositionRowStyled key={rowIndex}>\n                  <PositionRow\n                    availableDepositAmount={positionRow.availableDepositAmount}\n                    totalDepositAmount={positionRow.totalDepositAmount}\n                    outstandingIntentAmount={positionRow.outstandingIntentAmount}\n                    intentCount={positionRow.intentCount}\n                    conversionRate={positionRow.conversionRate}\n                    conversionCurrency={positionRow.conversionCurrency}\n                    rowIndex={rowIndex}\n                    isCancelDepositLoading={rowIndex === selectedRowIndexToWithdraw && (isSubmitWithdrawLoading || isSubmitWithdrawMining)}\n                    handleWithdrawClick={() => {\n                      handleWithdrawClick(rowIndex)\n                    }}\n                  />\n                </PositionRowStyled>\n              ))}\n            </Table>\n          </PositionsContainer>\n        )}\n      </Content>\n    </Container>\n  )\n};\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`;\n\nconst TitleRow = styled(RowBetween)`\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    flex-wrap: wrap;\n    gap: 12px;\n    width: 100%;\n    padding: 0 1.75rem;\n  };\n`;\n\nconst Content = styled.main`\n  display: flex;\n  background-color: ${colors.container};\n  flex-direction: column;\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n  overflow: hidden;\n  position: relative;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`;\n\nconst PlatformSelectorContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 1.5rem;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst InboxIcon = styled(Inbox)`\n  ${IconStyle}\n`;\n\nconst FileTextIcon = styled(FileText)`\n  ${IconStyle}\n`;\n\nconst PositionsContainer = styled.div`\n  display: flex;\n  align-items: flex-start;\n  flex-direction: column;\n  justify-content: flex-start;\n  width: 100%;\n`;\n\nconst PositionCountTitle = styled.div`\n  width: 100%;\n  justify-content: space-between;\n  text-align: left;\n  padding-top: 2rem;\n  padding-bottom: 1.75rem;\n  padding-left: 1.5rem;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  border-radius: 8px;\n  border-top-left-radius: 16px;\n  border-top-right-radius: 16px;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  font-size: 16px;\n  color: #616161;\n\n  & > * {\n    border-bottom: 1px solid ${colors.defaultBorderColor};\n  }\n\n  & > *:last-child {\n    border-bottom: none;\n  }\n`;\n\nconst PositionRowStyled = styled.div`\n  &:last-child {\n    border-bottom-left-radius: 16px;\n    border-bottom-right-radius: 16px;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/Input.tsx",
    "content": "import React, { ChangeEvent } from \"react\";\nimport styled from 'styled-components';\n\nimport QuestionHelper from '@components/common/QuestionHelper';\nimport { CurrencySelector } from \"@components/Deposit/CurrencySelector\";\nimport { colors } from '@theme/colors';\n\n\ninterface InputProps {\n  label: string;\n  name: string;\n  value?: string;\n  type?: string;\n  onChange: (event: ChangeEvent<HTMLInputElement>) => void;\n  onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n  placeholder?: string;\n  inputLabel?: string;\n  readOnly?: boolean;\n  accessoryLabel?: string;\n  hasSelector?: boolean;\n  helperText?: string;\n  enableMax?: boolean\n  valueFontSize?: string;\n  maxButtonOnClick?: () => void;\n}\n\nexport const Input: React.FC<InputProps> = ({\n  label,\n  name,\n  value,\n  onChange,\n  onFocus,\n  onKeyDown,\n  placeholder,\n  inputLabel,\n  type = \"text\",\n  readOnly = false,\n  accessoryLabel=\"\",\n  hasSelector = false,\n  helperText=\"\",\n  valueFontSize=\"24px\",\n  enableMax=false,\n  maxButtonOnClick=() => {}\n}: InputProps) => {\n  Input.displayName = \"Input\";\n\n  return (\n      <Container>\n        <LabelAndInputContainer>\n          <LabelAndTooltipContainer>\n            <Label htmlFor={name}>\n                {label}\n            </Label>\n\n            { \n              helperText && (\n                <QuestionHelper\n                  text={helperText}\n                />\n              )\n            }\n          </LabelAndTooltipContainer>\n\n          <InputWrapper>\n            <StyledInput\n              type={type}\n              name={name}\n              id={name}\n              placeholder={placeholder}\n              value={value}\n              onChange={onChange}\n              onFocus={onFocus}\n              onKeyDown={onKeyDown}\n              readOnly={readOnly}\n              valueFontSize={valueFontSize}\n            />\n          </InputWrapper>\n        </LabelAndInputContainer>\n          <AccessoryAndInputLabelWrapper>\n            <AccessoryLabelAndMax>\n              <AccessoryLabel>\n                {accessoryLabel}\n              </AccessoryLabel>\n\n              {enableMax && accessoryLabel && (\n                <MaxButton onClick={maxButtonOnClick}>\n                  Max\n                </MaxButton>\n              )}\n            </AccessoryLabelAndMax>\n\n            {inputLabel ? (\n              <InputLabel>\n                <span>{inputLabel}</span>\n              </InputLabel>\n            ) : null}\n\n            {hasSelector && (\n              <SelectorAccessory>\n                <CurrencySelector/>\n              </SelectorAccessory>\n            )}\n          </AccessoryAndInputLabelWrapper>\n      </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  padding: 16px;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  background-color: #131A2A;\n\n  &:focus-within {\n    border-color: #CED4DA;\n    border-width: 1px;\n  }\n`;\n\nconst LabelAndInputContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  flex: 1;\n`;\n\nconst LabelAndTooltipContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  gap: 0.25rem;\n  margin-top: 4px;\n  align-items: center;\n  color: #CED4DA;\n`;\n\nconst Label = styled.label`\n  display: flex;\n  font-size: 14px;\n  font-weight: 550;\n`;\n\nconst InputWrapper = styled.div`\n  width: 100%;  \n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: stretch;\n  margin-top: 8px;\n`;\n\ninterface StyledInputProps {\n  readOnly?: boolean;\n  valueFontSize?: string;\n}\n\nconst StyledInput = styled.input<StyledInputProps>`\n  width: 100%;\n  flex-grow: 1;\n  border: 0;\n  padding: 0;\n  color: #FFFFFF;\n  background-color: #131A2A;\n  font-size: ${({ valueFontSize }) => valueFontSize ? valueFontSize : '24px'};\n\n  &:focus {\n    box-shadow: none;\n    outline: none;\n  }\n\n  &:placeholder {\n    color: #6C757D;\n  }\n\n  &[type='number'] {\n    -moz-appearance: textfield;\n    &::-webkit-inner-spin-button,\n    &::-webkit-outer-spin-button {\n      -webkit-appearance: none;\n      margin: 0;\n    }\n  }\n\n  ${({ readOnly }) => \n    readOnly && `\n      pointer-events: none;\n    `\n  }\n`;\n\nconst SelectorAccessory = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: flex-end;\n  color: #CED4DA;\n  padding-top: 8px;\n  padding-right: -8px;\n`;\n\nconst AccessoryAndInputLabelWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  color: #CED4DA;\n  margin: 9px 0px 2px 0px;\n`;\n\nconst AccessoryLabelAndMax = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 6px;\n`;\n\nconst MaxButton = styled.div`\n  color: #FFFFFF;\n  font-size: 14px;\n  font-weight: 600;\n  padding-bottom: 1px;\n  cursor: pointer;\n`;\n\nconst AccessoryLabel = styled.div`\n  font-size: 14px;\n  text-align: right;\n  font-weight: 550;\n`;\n\nconst InputLabel = styled.div`\n  pointer-events: none;\n  color: #9ca3af;\n  font-size: 20px;\n  text-align: right;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/OffRamperIntentRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components/macro'\nimport Link from '@mui/material/Link';\nimport { ENSName, AddressDisplayEnum } from 'react-ens-name';\n\nimport usePlatformSettings from \"@hooks/usePlatformSettings\";\nimport useSmartContracts from \"@hooks/useSmartContracts\";\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport { alchemyMainnetEthersProvider } from \"index\";\nimport { AccessoryButton } from '@components/common/AccessoryButton';\nimport { PaymentPlatformType, paymentPlatformInfo } from \"@helpers/types\";\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface IntentRowProps {\n  handleReleaseClick?: () => void;\n  paymentPlatform: PaymentPlatformType | undefined;\n  onRamper: string;\n  amountUSDToReceive: string;\n  amountUSDCToSend: string;\n  expirationTimestamp: string;\n}\n\nexport type IntentRowData = IntentRowProps;\n\nexport const IntentRow: React.FC<IntentRowProps> = ({\n  handleReleaseClick,\n  paymentPlatform,\n  onRamper,\n  amountUSDToReceive,\n  amountUSDCToSend,\n  expirationTimestamp,\n}: IntentRowProps) => {\n  IntentRow.displayName = \"IntentRow\";\n\n  /*\n   * Context\n   */\n\n  const { blockscanUrl } = useSmartContracts();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  const {\n    PaymentPlatform,\n    currencyIndex\n  } = usePlatformSettings();\n\n  /*\n   * Helpers\n   */\n\n  const requestedAmountLabel = `${amountUSDCToSend} USDC`;\n  const onRamperEtherscanLink = `${blockscanUrl}/address/${onRamper}`;\n  const orderExpirationLabel = `${expirationTimestamp}`;\n\n  function getPlatformVariables(paymentPlatform: PaymentPlatformType | undefined) {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return {\n          onRamperLinkLabel: ` on Venmo`,\n          onRamperHashLabel: `$${amountUSDToReceive} from `\n        };\n\n      case PaymentPlatform.HDFC:\n        return {\n          onRamperLinkLabel: ` on HDFC`,\n          onRamperHashLabel: `₹${amountUSDToReceive} from `\n        };\n\n      case PaymentPlatform.GARANTI:\n        return {\n          onRamperLinkLabel: ` on Garanti`,\n          onRamperHashLabel: `₺${amountUSDToReceive} from `\n        };\n\n      case PaymentPlatform.REVOLUT:\n        return {\n          onRamperLinkLabel: ` on Revolut`,\n          onRamperHashLabel: `${amountUSDToReceive} ${paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies[currencyIndex]} from `\n        };\n\n      default:\n        return {\n          currencySymbol: '$',\n          paymentPlatformName: 'Venmo',\n          onRamperLinkLabel: ` on Venmo`,\n          onRamperHashLabel: `$${amountUSDToReceive} from `\n        };\n    }\n  }\n\n  const {\n    onRamperLinkLabel,\n    onRamperHashLabel\n  } = getPlatformVariables(paymentPlatform);\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <IntentDetailsContainer isMobile={isMobile}>\n        {\n          !isMobile && <SVGIconThemed icon={'usdc'} width={'24'} height={'24'}/>\n        }\n        <AmountLabelsContainer>\n          <AmountContainer>\n            <Label>Requesting:&nbsp;</Label>\n            <Value>{requestedAmountLabel}</Value>\n          </AmountContainer>\n\n          <AmountContainer>\n            <Label>Receive:&nbsp;</Label>\n            <Value>\n              {onRamperHashLabel}\n              <Link href={onRamperEtherscanLink} target=\"_blank\">\n                <ENSName\n                  provider={alchemyMainnetEthersProvider}\n                  address={onRamper}\n                  displayType={AddressDisplayEnum.FIRST6}\n                />\n              </Link>\n              {onRamperLinkLabel}\n            </Value>\n          </AmountContainer>\n\n          <AmountContainer>\n            <Label>Expires:&nbsp;</Label>\n            <Value>{orderExpirationLabel}</Value>\n          </AmountContainer>\n        </AmountLabelsContainer>\n\n        <ActionsContainer>\n          <AccessoryButton\n            onClick={handleReleaseClick}\n            height={36}\n            loading={false}\n            title={'Release'}\n            icon={isMobile ? undefined : 'unlock'}\n          />\n        </ActionsContainer>\n      </IntentDetailsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n`;\n\nconst IntentDetailsContainer = styled.div<{isMobile?: boolean}>`\n  width: 100%; \n  display: flex;\n  flex-direction: ${({ isMobile }) => isMobile ? 'column' : 'row'};\n  align-items: center;\n  padding: 1.25rem 1.5rem;\n  gap: 1.25rem;\n  line-height: 24px;\n`;\n\nconst AmountLabelsContainer = styled.div`\n  width: 100%; \n  display: flex;\n  gap: 2px;\n  flex-direction: column;\n  line-height: 24px;\n`;\n\nconst AmountContainer = styled.div`\n  display: flex;\n`;\n\nconst Label = styled.label`\n  font-size: 15px;\n  color: #6C757D;\n`;\n\nconst Value = styled.label`\n  font-size: 15px;\n  color: #FFFFFF;\n`;\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: flex-end;\n  flex-grow: 1;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/OffRamperIntentTable.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\n\nimport { IntentRow, IntentRowData } from \"@components/Deposit/OffRamperIntentRow\";\nimport { toUsdString, toUsdcString } from '@helpers/units';\nimport { SECONDS_IN_DAY  } from '@helpers/constants';\nimport { ThemedText } from '@theme/text'\nimport { colors } from '@theme/colors';\nimport { DepositIntent } from '@helpers/types';\nimport { ConfirmRelease } from '@components/modals/ConfirmRelease';\nimport useVenmoDeposits from '@hooks/venmo/useDeposits';\nimport useHdfcDeposits from '@hooks/hdfc/useDeposits';\nimport useGarantiDeposits from '@hooks/garanti/useDeposits';\nimport useRevolutDeposits from '@hooks/revolut/useDeposits';\nimport useLiquidity from '@hooks/venmo/useLiquidity';\n\n\ninterface OffRamperIntentTableProps {\n  selectedRow?: number;\n  rowsPerPage?: number;\n}\n\nexport const OffRamperIntentTable: React.FC<OffRamperIntentTableProps> = ({\n  selectedRow,\n  rowsPerPage = 10\n}) => {\n  /*\n   * Contexts\n   */\n\n  const {\n    depositIntents: venmoDepositIntents\n  } = useVenmoDeposits();\n\n  const {\n    depositIntents: hdfcDepositIntents\n  } = useHdfcDeposits();\n\n  const {\n    depositIntents: garantiDepositIntents\n  } = useGarantiDeposits();\n\n  const {\n    depositIntents: revolutDepositIntents\n  } = useRevolutDeposits();\n\n  const { calculateUsdFromRequestedUSDC } = useLiquidity();\n\n  /*\n   * State\n   */\n\n  const [shouldShowReleaseModal, setShouldShowReleaseModal] = useState<boolean>(false);\n  const [selectedReleaseIntentHash, setSelectedReleaseIntentHash] = useState<string>(\"\");\n  const [selectedReleaseIntentAmount, setSelectedReleaseIntentAmount] = useState<string>(\"\");\n \n  const [intentsRowData, setIntentsRowData] = useState<IntentRowData[]>([]);\n\n  const [depositIntents, setDepositIntents] = useState<DepositIntent[]>([]);\n\n  /*\n   * Handlers\n   */\n\n  const onReleaseIntentClick = (intentHash: string, amountUSDCToSend: string) => {\n    setSelectedReleaseIntentHash(intentHash);\n\n    setSelectedReleaseIntentAmount(amountUSDCToSend);\n\n    setShouldShowReleaseModal(true);\n  };\n\n  const onCloseReleaseModal = () => {\n    setShouldShowReleaseModal(false);\n\n    setSelectedReleaseIntentHash(\"\");\n\n    setSelectedReleaseIntentAmount(\"\");\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    let combinedDepositIntents: DepositIntent[] = [];\n\n    if (venmoDepositIntents) {\n      combinedDepositIntents = combinedDepositIntents.concat(venmoDepositIntents);\n    }\n\n    if (hdfcDepositIntents) {\n      combinedDepositIntents = combinedDepositIntents.concat(hdfcDepositIntents);\n    }\n\n    if (garantiDepositIntents) {\n      combinedDepositIntents = combinedDepositIntents.concat(garantiDepositIntents);\n    }\n\n    if (revolutDepositIntents) {\n      combinedDepositIntents = combinedDepositIntents.concat(revolutDepositIntents);\n    }\n\n    setDepositIntents(combinedDepositIntents);\n  }, [venmoDepositIntents, hdfcDepositIntents, garantiDepositIntents, revolutDepositIntents]);\n\n  useEffect(() => {\n    if (depositIntents) {\n      var sanitizedIntents: IntentRowData[] = [];\n      sanitizedIntents = depositIntents.map((depositIntent: DepositIntent, index: number) => {\n        const intent = depositIntent.intent;\n        const deposit = depositIntent.deposit;\n        const intentHash = depositIntent.intentHash;\n\n        const amountUSDC = intent.amount\n        const usdToSend = calculateUsdFromRequestedUSDC(BigInt(amountUSDC), BigInt(deposit.conversionRate));\n        const onRamper = intent.onRamper;\n        const amountUSDToReceive = toUsdString(usdToSend);\n        const amountUSDCToSend = toUsdcString(amountUSDC, true);\n        const expirationTimestamp = formatExpiration(intent.timestamp);\n\n        const sanitizedIntent: IntentRowData = {\n          paymentPlatform: deposit.platformType,\n          onRamper,\n          amountUSDToReceive,\n          amountUSDCToSend,\n          expirationTimestamp,\n          handleReleaseClick: () => {\n            if (onReleaseIntentClick) {\n              onReleaseIntentClick(intentHash, amountUSDCToSend);\n            }\n          }\n        }\n\n        return sanitizedIntent;\n      });\n\n      setIntentsRowData(sanitizedIntents);\n    } else {\n      setIntentsRowData([]);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [depositIntents]);\n\n  /*\n   * Helpers\n   */\n\n  function calculateExpiration(unixTimestamp: bigint, timePeriod: bigint): bigint {\n    return unixTimestamp + timePeriod;\n  }\n  \n  function formatExpiration(unixTimestamp: bigint): string {\n    const unixTimestampPlusOneDay = calculateExpiration(unixTimestamp, SECONDS_IN_DAY);\n    \n    const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));\n    if (currentTimestamp > unixTimestampPlusOneDay) {\n      return \"Expired\";\n    } else {\n      const date = new Date(Number(unixTimestampPlusOneDay) * 1000);\n      const formattedTime = date.toLocaleTimeString();\n      const formattedDate = date.toLocaleDateString(undefined, { year: 'numeric', month: 'numeric', day: 'numeric' }).split('/').slice(0, 2).join('/');\n\n      return `${formattedTime} on ${formattedDate}`;\n    }\n  }\n\n  return (\n    <Container>\n      {\n        shouldShowReleaseModal && (\n          <ConfirmRelease\n            onBackClick={onCloseReleaseModal}\n            intentHash={selectedReleaseIntentHash}\n            amountUSDCToSend={selectedReleaseIntentAmount}\n          />\n        )\n      }\n\n      <TitleAndTableContainer>\n        <IntentCountTitle>\n          <ThemedText.LabelSmall textAlign=\"left\">\n            Orders on your deposits\n          </ThemedText.LabelSmall>\n        </IntentCountTitle>\n\n        <Table>\n          {intentsRowData.map((intentsRow, rowIndex) => (\n            <IntentRow\n              key={rowIndex}\n              paymentPlatform={intentsRow.paymentPlatform}\n              amountUSDToReceive={intentsRow.amountUSDToReceive}\n              amountUSDCToSend={intentsRow.amountUSDCToSend}\n              expirationTimestamp={intentsRow.expirationTimestamp}\n              onRamper={intentsRow.onRamper}\n              handleReleaseClick={intentsRow.handleReleaseClick}\n            />\n          ))}\n        </Table>\n      </TitleAndTableContainer>\n    </Container>\n  )\n}\n\nconst Container = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  align-self: flex-start;\n  justify-content: center;\n  gap: 1rem;\n\n  background-color: ${colors.container};\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border: 1px solid ${colors.defaultBorderColor};\n    border-radius: 16px;\n  }\n`;\n\nconst TitleAndTableContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst IntentCountTitle = styled.div`\n  width: 100%;\n  padding-top: 1.25rem;\n  padding-bottom: 1rem;\n  padding-left: 1.5rem;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  border-radius: 8px;\n  border-top-left-radius: 16px;\n  border-top-right-radius: 16px;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  font-size: 16px;\n  color: #616161;\n\n  & > * {\n    border-bottom: 1px solid ${colors.defaultBorderColor};\n  }\n\n  & > *:last-child {\n    border-bottom: none;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/garanti/NewPosition.tsx",
    "content": "import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowLeft } from 'react-feather';\nimport styled from 'styled-components';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { Input } from \"@components/Deposit/Input\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { calculateConversionRate, toBigInt, toUsdcString } from '@helpers/units';\nimport { LoginStatus, NewDepositTransactionStatus } from '@helpers/types';\nimport { ZERO } from '@helpers/constants';\nimport { garantiStrings } from '@helpers/strings';\nimport { MODALS } from '@helpers/types';\nimport { colors } from '@theme/colors';\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport useGarantiRampState from '@hooks/garanti/useRampState';\nimport useGarantiDeposits from '@hooks/garanti/useDeposits';\nimport useGarantiRegistration from '@hooks/garanti/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useModal from '@hooks/useModal';\n\n\ninterface NewPositionProps {\n  handleBackClick: () => void;\n}\n \nexport const NewPosition: React.FC<NewPositionProps> = ({\n  handleBackClick\n}) => {\n  const latestIbanInputRef = useRef(\"\");\n\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loginStatus } = useAccount();\n  const { garantiRampAddress, garantiRampAbi, usdcAddress, usdcAbi } = useSmartContracts();\n  const { minimumDepositAmount } = useGarantiRampState();\n  const { usdcApprovalToGarantiRamp, usdcBalance, refetchUsdcApprovalToGarantiRamp, refetchUsdcBalance } = useBalances();\n  const { refetchDeposits } = useGarantiDeposits();\n  const { storedGarantiId, registrationHash, setStoredGarantiId } = useGarantiRegistration();\n  const { openModal } = useModal();\n\n  /*\n   * State\n   */\n\n  const [depositState, setDepositState] = useState(NewDepositTransactionStatus.DEFAULT);\n  const [garantiIbanInput, setGarantiIdInput] = useState<string>('');\n  const [garantiNameInput, setGarantiNameInput] = useState<string>('');\n  const [depositAmountInput, setDepositAmountInput] = useState<string>('');\n  const [receiveAmountInput, setReceiveAmountInput] = useState<string>('');\n\n  const [isGarantiIdInputValid, setIsGarantiIbanInputValid] = useState<boolean>(false);\n  const [amountToApprove, setAmountToApprove] = useState<bigint>(ZERO);\n\n  const [shouldConfigureNewDepositWrite, setShouldConfigureNewDepositWrite] = useState<boolean>(false);\n  const [shouldConfigureApprovalWrite, setShouldConfigureApprovalWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // offRamp(string _garantiIban, uint256 _depositAmount, uint256 _receiveAmount)\n  //\n  const { config: writeDepositConfig } = usePrepareContractWrite({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'offRamp',\n    args: [\n      garantiIbanInput,\n      garantiNameInput,\n      toBigInt(depositAmountInput.toString()),\n      toBigInt(receiveAmountInput.toString()),\n    ],\n    enabled: shouldConfigureNewDepositWrite\n  });\n\n  const {\n    data: submitDepositResult,\n    status: signDepositTransactionStatus,\n    writeAsync: writeSubmitDepositAsync,\n  } = useContractWrite(writeDepositConfig);\n\n  const {\n    status: mineDepositTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitDepositResult ? submitDepositResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitDepositAsync successful: ', data);\n      \n      refetchDeposits?.();\n\n      refetchUsdcBalance?.();\n\n      refetchUsdcApprovalToGarantiRamp?.();\n    },\n  });\n\n  //\n  // approve(address spender, uint256 value)\n  //\n  const { config: writeApproveConfig } = usePrepareContractWrite({\n    address: usdcAddress,\n    abi: usdcAbi,\n    functionName: \"approve\",\n    args: [\n      garantiRampAddress,\n      amountToApprove\n    ],\n    enabled: shouldConfigureApprovalWrite\n  });\n\n  const {\n    data: submitApproveResult,\n    status: signApproveTransactionStatus,\n    writeAsync: writeSubmitApproveAsync\n  } = useContractWrite(writeApproveConfig);\n\n  const {\n    status: mineApproveTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitApproveResult ? submitApproveResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitApproveAsync successful: ', data);\n      \n      refetchUsdcApprovalToGarantiRamp?.();\n\n      refetchUsdcBalance?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const updateDepositState = async () => {\n      const successfulDepositTransaction = mineDepositTransactionStatus === 'success';\n\n      if (successfulDepositTransaction) {\n        setDepositState(NewDepositTransactionStatus.TRANSACTION_SUCCEEDED);\n      } else {\n        if(!registrationHash) {\n          setDepositState(NewDepositTransactionStatus.MISSING_REGISTRATION);\n        } else {\n          if (!garantiIbanInput) { \n            setDepositState(NewDepositTransactionStatus.DEFAULT);\n          } else {\n            if (!isGarantiIdInputValid) {\n              setDepositState(NewDepositTransactionStatus.INVALID_DEPOSITOR_ID);\n            } else {\n              const usdcBalanceLoaded = usdcBalance !== null;\n              const usdcApprovalToRampLoaded = usdcApprovalToGarantiRamp !== null;\n              const minimumDepositAmountLoaded = minimumDepositAmount !== null;\n  \n              if (depositAmountInput && usdcBalanceLoaded && usdcApprovalToRampLoaded && minimumDepositAmountLoaded) {\n                const depositAmountBI = toBigInt(depositAmountInput);\n                const isDepositAmountGreaterThanBalance = depositAmountBI > usdcBalance;\n                const isDepositAmountLessThanMinDepositSize = depositAmountBI < minimumDepositAmount;\n                const isDepositAmountGreaterThanApprovedBalance = depositAmountBI > usdcApprovalToGarantiRamp;\n          \n                const signingApproveTransaction = signApproveTransactionStatus === 'loading';\n                const miningApproveTransaction = mineApproveTransactionStatus === 'loading';\n                const successfulApproveTransaction = mineApproveTransactionStatus === 'success';\n\n                if (isDepositAmountGreaterThanBalance) {\n                  setDepositState(NewDepositTransactionStatus.INSUFFICIENT_BALANCE);\n                } else if (isDepositAmountLessThanMinDepositSize) {\n                  setDepositState(NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET);\n                } else if (isDepositAmountGreaterThanApprovedBalance && !successfulApproveTransaction) {\n                  if (signingApproveTransaction) {\n                    setDepositState(NewDepositTransactionStatus.TRANSACTION_SIGNING);\n                  } else if (miningApproveTransaction) {\n                    setDepositState(NewDepositTransactionStatus.TRANSACTION_MINING);\n                  } else {\n                    setDepositState(NewDepositTransactionStatus.APPROVAL_REQUIRED);\n                  }\n                } else {\n                  if (receiveAmountInput) {\n                    const signingDepositTransaction = signDepositTransactionStatus === 'loading';\n                    const miningDepositTransaction = mineDepositTransactionStatus === 'loading';\n\n                    if (signingDepositTransaction) {\n                      setDepositState(NewDepositTransactionStatus.TRANSACTION_SIGNING);\n                    } else if (miningDepositTransaction){\n                      setDepositState(NewDepositTransactionStatus.TRANSACTION_MINING);\n                    } else {\n                      setDepositState(NewDepositTransactionStatus.VALID);\n                    }\n                  } else {\n                    setDepositState(NewDepositTransactionStatus.MISSING_AMOUNTS);\n                  }\n                }\n              } else {\n                setDepositState(NewDepositTransactionStatus.MISSING_AMOUNTS);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    updateDepositState();\n  }, [\n      garantiIbanInput,\n      registrationHash,\n      depositAmountInput,\n      receiveAmountInput,\n      minimumDepositAmount,\n      usdcBalance,\n      usdcApprovalToGarantiRamp,\n      isGarantiIdInputValid,\n      signApproveTransactionStatus,\n      mineApproveTransactionStatus,\n      signDepositTransactionStatus,\n      mineDepositTransactionStatus,\n    ]\n  );\n\n  useEffect(() => {\n    const isApprovalRequired = depositState === NewDepositTransactionStatus.APPROVAL_REQUIRED;\n    setShouldConfigureApprovalWrite(isApprovalRequired);\n    \n    setShouldConfigureNewDepositWrite(depositState === NewDepositTransactionStatus.VALID);\n  }, [depositState]);\n\n  useEffect(() => {\n    const usdcApprovalToRampLoaded = usdcApprovalToGarantiRamp !== null && usdcApprovalToGarantiRamp !== undefined;\n\n    if (!depositAmountInput || !usdcApprovalToRampLoaded) {\n      setAmountToApprove(ZERO);\n    } else {\n      const depositAmountBI = toBigInt(depositAmountInput.toString());\n      const approvalDifference = depositAmountBI - usdcApprovalToGarantiRamp;\n      if (approvalDifference > ZERO) {\n        setAmountToApprove(depositAmountBI);\n      } else {\n        setAmountToApprove(ZERO);\n      }\n    }\n    \n  }, [depositAmountInput, usdcApprovalToGarantiRamp]);\n\n  useEffect(() => {\n    if (storedGarantiId) {\n      setGarantiIdInput(storedGarantiId);\n    } else {\n      setGarantiIdInput('');\n    }\n  }, [storedGarantiId]);\n  \n  useEffect(() => {\n    const validIbanInput = isValidGarantiIbanRegex(garantiIbanInput);\n\n    setIsGarantiIbanInputValid(validIbanInput);\n\n    if (validIbanInput && setStoredGarantiId) {\n      setStoredGarantiId(garantiIbanInput);\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [garantiIbanInput, setStoredGarantiId]);\n\n  /*\n   * Helpers\n   */\n\n  function isValidGarantiIbanRegex(value: string) {\n    const ibanRegex = /^TR\\d{2}\\s\\d{4}\\s\\d{4}\\s\\d{4}\\s\\d{4}\\s\\d{4}\\s\\d{2}$/;\n\n    return ibanRegex.test(value);\n  }\n\n  function isValidInput(value: string) {\n    const isValid = /^-?\\d*(\\.\\d{0,6})?$/.test(value);\n    \n    return parseFloat(value) >= 0 && isValid;\n  }\n\n  const ctaDisabled = (): boolean => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.DEFAULT:\n      case NewDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n      case NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n      case NewDepositTransactionStatus.CONVENIENCE_FEE_INVALID:\n      case NewDepositTransactionStatus.MAX_INTENTS_REACHED:\n      case NewDepositTransactionStatus.MISSING_REGISTRATION:\n      case NewDepositTransactionStatus.MISSING_AMOUNTS:\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return true;\n\n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n      case NewDepositTransactionStatus.VALID:\n      default:\n        return false;\n    }\n  }\n\n  const ctaLoading = (): boolean => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return loginStatus === LoginStatus.AUTHENTICATED;\n\n      default:\n        return false;\n    }\n  };\n\n  const ctaText = (): string => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.MISSING_REGISTRATION:\n        return 'Missing registration';\n\n      case NewDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n        return 'Invalid IBAN address';\n\n      case NewDepositTransactionStatus.MISSING_AMOUNTS:\n        return 'Input deposit and receive amounts';\n      \n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        return `Insufficient balance — Deposit USDC`;\n      \n      case NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n        const minimumDepositAmountString = minimumDepositAmount ? toUsdcString(minimumDepositAmount, true) : '0';\n        return `Minimum deposit amount is ${minimumDepositAmountString}`;\n\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n        return 'Signing Transaction';\n\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return 'Mining Transaction';\n\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n        const usdcApprovalToRampString = usdcApprovalToGarantiRamp ? toUsdcString(usdcApprovalToGarantiRamp, true) : '0';\n        return `Insufficient USDC transfer approval: ${usdcApprovalToRampString}`;\n\n      case NewDepositTransactionStatus.VALID:\n        return 'Create Deposit';\n\n      case NewDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        return 'Go to Deposits';\n\n      case NewDepositTransactionStatus.DEFAULT:\n      default:\n        return 'Input valid IBAN address';\n\n    }\n  }\n\n  const ctaOnClick = async () => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n        try {\n          await writeSubmitApproveAsync?.();\n        } catch (error) {\n          console.log('writeSubmitApproveAsync failed: ', error);\n        }\n        break;\n\n      case NewDepositTransactionStatus.VALID:\n        try {\n          await writeSubmitDepositAsync?.();\n        } catch (error) {\n          console.log('writeSubmitDepositAsync failed: ', error);\n        }\n        break;\n\n      case NewDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        handleBackClick();\n        break;\n\n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        openModal(MODALS.RECEIVE);\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  const usdcBalanceLabel = useMemo(() => {\n    if (isLoggedIn && usdcBalance !== null) {\n      return `Balance: ${toUsdcString(usdcBalance, true)}`\n    } else {\n      return '';\n    }\n  }, [usdcBalance, isLoggedIn]);\n\n  const conversionRateLabel =  useMemo(() => {\n    if (isLoggedIn && depositAmountInput && receiveAmountInput) {\n      // Using USDC as the base currency\n      return `Rate: ${calculateConversionRate(receiveAmountInput, depositAmountInput)} TRY / USDC`\n    } else {\n      return '';\n    }\n  }, [depositAmountInput, receiveAmountInput, isLoggedIn]);\n\n  /*\n   * Handlers\n   */\n\n  const handleInputChange = (value: string, setInputFunction: React.Dispatch<React.SetStateAction<string>>) => {\n    if (value === \"\") {\n      setInputFunction('');\n    } else if (value === \".\") {\n      setInputFunction('0.');\n    } else if (isValidInput(value)) {\n      setInputFunction(value);\n    }\n  };\n\n  return (\n    <Container>\n      <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n        <div style={{ flex: 0.5 }}>\n          <button\n            onClick={handleBackClick}\n            style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n          >\n            <StyledArrowLeft/>\n          </button>\n        </div>\n\n        <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n          New Deposit\n        </ThemedText.HeadlineSmall>\n\n        <div style={{ flex: 0.5 }}/>\n      </RowBetween>\n\n      <Body>\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            { garantiStrings.get('NEW_DEPOSIT_INSTRUCTIONS') }\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n        <InputsContainer>\n          <Input\n            label=\"IBAN\"\n            name={`garantiIban`}\n            value={garantiIbanInput}\n            onChange={(e) => {\n              setGarantiIdInput(e.currentTarget.value)\n              latestIbanInputRef.current = e.currentTarget.value\n            }}\n            type=\"text\"\n            placeholder=\"TR12 3456 7890 1234 5678 9012 34\"\n            helperText={garantiStrings.get('NEW_DEPOSIT_ID_TOOLTIP')}\n          />\n\n          <Input\n            label=\"IBAN Account Name\"\n            name={`garantiName`}\n            value={garantiNameInput}\n            onChange={(e) => {\n              setGarantiNameInput(e.currentTarget.value)\n              latestIbanInputRef.current = e.currentTarget.value\n            }}\n            type=\"text\"\n            placeholder=\"John Doe\"\n            helperText={garantiStrings.get('NEW_DEPOSIT_NAME_TOOLTIP')}\n          />\n\n          <Input\n            label=\"Deposit Amount\"\n            name={`depositAmount`}\n            value={depositAmountInput}\n            onChange={(e) => handleInputChange(e.currentTarget.value, setDepositAmountInput)}\n            type=\"number\"\n            inputLabel=\"USDC\"\n            placeholder=\"1000\"\n            accessoryLabel={usdcBalanceLabel}\n            helperText={garantiStrings.get('NEW_DEPOSIT_AMOUNT_TOOLTIP')}\n            enableMax={true}\n            maxButtonOnClick={() => {\n              if (usdcBalance) {\n                setDepositAmountInput(toUsdcString(usdcBalance, false));\n              }\n            }}\n          />\n\n          <Input\n            label=\"Receive Amount\"\n            name={`receiveAmount`}\n            value={receiveAmountInput}\n            onChange={(e) => handleInputChange(e.currentTarget.value, setReceiveAmountInput)}\n            type=\"number\"\n            inputLabel=\"TRY\"\n            placeholder=\"31006\"\n            accessoryLabel={conversionRateLabel}\n            helperText={garantiStrings.get('NEW_DEPOSIT_RECEIVE_TOOLTIP')}\n          />\n\n          <ButtonContainer>\n            <Button\n              fullWidth={true}\n              disabled={ctaDisabled()}\n              loading={ctaLoading()}\n              onClick={async () => {\n                ctaOnClick();\n              }}>\n              { ctaText() }\n            </Button>\n          </ButtonContainer>\n        </InputsContainer>\n      </Body>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  background-color: ${colors.container};\n  padding: 1.5rem;\n\n  @media (min-width: 600px) {\n    max-width: 552px;\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  background-color: ${colors.container};\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/hdfc/NewPosition.tsx",
    "content": "import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowLeft } from 'react-feather';\nimport styled from 'styled-components';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { Input } from \"@components/Deposit/Input\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { calculatePackedUPIId } from '@helpers/poseidonHash';\nimport { calculateConversionRate, toBigInt, toUsdcString } from '@helpers/units';\nimport { LoginStatus, NewDepositTransactionStatus } from '@helpers/types';\nimport { ZERO } from '@helpers/constants';\nimport { hdfcStrings } from '@helpers/strings';\nimport { MODALS } from '@helpers/types';\nimport { colors } from '@theme/colors';\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport useHdfcRampState from '@hooks/hdfc/useRampState';\nimport useHdfcDeposits from '@hooks/hdfc/useDeposits';\nimport useHdfcRegistration from '@hooks/hdfc/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useModal from '@hooks/useModal';\n\n\ninterface NewPositionProps {\n  handleBackClick: () => void;\n}\n \nexport const NewPosition: React.FC<NewPositionProps> = ({\n  handleBackClick\n}) => {\n  const latestUpiInputRef = useRef(\"\");\n\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loginStatus } = useAccount();\n  const { hdfcRampAddress, hdfcRampAbi, usdcAddress, usdcAbi } = useSmartContracts();\n  const { minimumDepositAmount } = useHdfcRampState();\n  const { usdcApprovalToHdfcRamp, usdcBalance, refetchUsdcApprovalToHdfcRamp, refetchUsdcBalance } = useBalances();\n  const { refetchDeposits } = useHdfcDeposits();\n  const { storedUpiId, registrationHash, setStoredUpiId } = useHdfcRegistration();\n  const { openModal } = useModal();\n\n  /*\n   * State\n   */\n\n  const [depositState, setDepositState] = useState(NewDepositTransactionStatus.DEFAULT);\n  const [upiIdInput, setUpiIdInput] = useState<string>('');\n  const [depositAmountInput, setDepositAmountInput] = useState<string>('');\n  const [receiveAmountInput, setReceiveAmountInput] = useState<string>('');\n\n  const [isUpiIdInputValid, setIsUpiInputValid] = useState<boolean>(false);\n  const [amountToApprove, setAmountToApprove] = useState<bigint>(ZERO);\n\n  const [shouldConfigureNewDepositWrite, setShouldConfigureNewDepositWrite] = useState<boolean>(false);\n  const [shouldConfigureApprovalWrite, setShouldConfigureApprovalWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // offRamp(bytes32 _upiId, uint256 _depositAmount, uint256 _receiveAmount)\n  //\n  const { config: writeDepositConfig } = usePrepareContractWrite({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'offRamp',\n    args: [\n      calculatePackedUPIId(upiIdInput),\n      toBigInt(depositAmountInput.toString()),\n      toBigInt(receiveAmountInput.toString()),\n    ],\n    enabled: shouldConfigureNewDepositWrite\n  });\n\n  const {\n    data: submitDepositResult,\n    status: signDepositTransactionStatus,\n    writeAsync: writeSubmitDepositAsync,\n  } = useContractWrite(writeDepositConfig);\n\n  const {\n    status: mineDepositTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitDepositResult ? submitDepositResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitDepositAsync successful: ', data);\n      \n      refetchDeposits?.();\n\n      refetchUsdcBalance?.();\n\n      refetchUsdcApprovalToHdfcRamp?.();\n    },\n  });\n\n  //\n  // approve(address spender, uint256 value)\n  //\n  const { config: writeApproveConfig } = usePrepareContractWrite({\n    address: usdcAddress,\n    abi: usdcAbi,\n    functionName: \"approve\",\n    args: [\n      hdfcRampAddress,\n      amountToApprove\n    ],\n    enabled: shouldConfigureApprovalWrite\n  });\n\n  const {\n    data: submitApproveResult,\n    status: signApproveTransactionStatus,\n    writeAsync: writeSubmitApproveAsync\n  } = useContractWrite(writeApproveConfig);\n\n  const {\n    status: mineApproveTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitApproveResult ? submitApproveResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitApproveAsync successful: ', data);\n      \n      refetchUsdcApprovalToHdfcRamp?.();\n\n      refetchUsdcBalance?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const updateDepositState = async () => {\n      const successfulDepositTransaction = mineDepositTransactionStatus === 'success';\n\n      if (successfulDepositTransaction) {\n        setDepositState(NewDepositTransactionStatus.TRANSACTION_SUCCEEDED);\n      } else {\n        if(!registrationHash) {\n          setDepositState(NewDepositTransactionStatus.MISSING_REGISTRATION);\n        } else {\n          if (!upiIdInput) { \n            setDepositState(NewDepositTransactionStatus.DEFAULT);\n          } else {\n            if (!isUpiIdInputValid) {\n              setDepositState(NewDepositTransactionStatus.INVALID_DEPOSITOR_ID);\n            } else {\n              const usdcBalanceLoaded = usdcBalance !== null;\n              const usdcApprovalToRampLoaded = usdcApprovalToHdfcRamp !== null;\n              const minimumDepositAmountLoaded = minimumDepositAmount !== null;\n  \n              if (depositAmountInput && usdcBalanceLoaded && usdcApprovalToRampLoaded && minimumDepositAmountLoaded) {\n                const depositAmountBI = toBigInt(depositAmountInput);\n                const isDepositAmountGreaterThanBalance = depositAmountBI > usdcBalance;\n                const isDepositAmountLessThanMinDepositSize = depositAmountBI < minimumDepositAmount;\n                const isDepositAmountGreaterThanApprovedBalance = depositAmountBI > usdcApprovalToHdfcRamp;\n          \n                const signingApproveTransaction = signApproveTransactionStatus === 'loading';\n                const miningApproveTransaction = mineApproveTransactionStatus === 'loading';\n                const successfulApproveTransaction = mineApproveTransactionStatus === 'success';\n\n                if (isDepositAmountGreaterThanBalance) {\n                  setDepositState(NewDepositTransactionStatus.INSUFFICIENT_BALANCE);\n                } else if (isDepositAmountLessThanMinDepositSize) {\n                  setDepositState(NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET);\n                } else if (isDepositAmountGreaterThanApprovedBalance && !successfulApproveTransaction) {\n                  if (signingApproveTransaction) {\n                    setDepositState(NewDepositTransactionStatus.TRANSACTION_SIGNING);\n                  } else if (miningApproveTransaction) {\n                    setDepositState(NewDepositTransactionStatus.TRANSACTION_MINING);\n                  } else {\n                    setDepositState(NewDepositTransactionStatus.APPROVAL_REQUIRED);\n                  }\n                } else {\n                  if (receiveAmountInput) {\n                    const signingDepositTransaction = signDepositTransactionStatus === 'loading';\n                    const miningDepositTransaction = mineDepositTransactionStatus === 'loading';\n\n                    if (signingDepositTransaction) {\n                      setDepositState(NewDepositTransactionStatus.TRANSACTION_SIGNING);\n                    } else if (miningDepositTransaction){\n                      setDepositState(NewDepositTransactionStatus.TRANSACTION_MINING);\n                    } else {\n                      setDepositState(NewDepositTransactionStatus.VALID);\n                    }\n                  } else {\n                    setDepositState(NewDepositTransactionStatus.MISSING_AMOUNTS);\n                  }\n                }\n              } else {\n                setDepositState(NewDepositTransactionStatus.MISSING_AMOUNTS);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    updateDepositState();\n  }, [\n      upiIdInput,\n      registrationHash,\n      depositAmountInput,\n      receiveAmountInput,\n      minimumDepositAmount,\n      usdcBalance,\n      usdcApprovalToHdfcRamp,\n      isUpiIdInputValid,\n      signApproveTransactionStatus,\n      mineApproveTransactionStatus,\n      signDepositTransactionStatus,\n      mineDepositTransactionStatus,\n    ]\n  );\n\n  useEffect(() => {\n    const isApprovalRequired = depositState === NewDepositTransactionStatus.APPROVAL_REQUIRED;\n    setShouldConfigureApprovalWrite(isApprovalRequired);\n    \n    setShouldConfigureNewDepositWrite(depositState === NewDepositTransactionStatus.VALID);\n  }, [depositState]);\n\n  useEffect(() => {\n    const usdcApprovalToRampLoaded = usdcApprovalToHdfcRamp !== null && usdcApprovalToHdfcRamp !== undefined;\n\n    if (!depositAmountInput || !usdcApprovalToRampLoaded) {\n      setAmountToApprove(ZERO);\n    } else {\n      const depositAmountBI = toBigInt(depositAmountInput.toString());\n      const approvalDifference = depositAmountBI - usdcApprovalToHdfcRamp;\n      if (approvalDifference > ZERO) {\n        setAmountToApprove(depositAmountBI);\n      } else {\n        setAmountToApprove(ZERO);\n      }\n    }\n    \n  }, [depositAmountInput, usdcApprovalToHdfcRamp]);\n\n  useEffect(() => {\n    if (storedUpiId) {\n      setUpiIdInput(storedUpiId);\n    } else {\n      setUpiIdInput('');\n    }\n  }, [storedUpiId]);\n  \n  useEffect(() => {\n    const validUpiInput = isValidUpiRegex(upiIdInput);\n\n    setIsUpiInputValid(validUpiInput);\n\n    if (validUpiInput && setStoredUpiId) {\n      setStoredUpiId(upiIdInput);\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [upiIdInput, setStoredUpiId]);\n\n  /*\n   * Helpers\n   */\n\n  function isValidUpiRegex(value: string) {\n    const upiRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9]+$/;\n\n    return upiRegex.test(value);\n  }\n\n  function isValidInput(value: string) {\n    const isValid = /^-?\\d*(\\.\\d{0,6})?$/.test(value);\n    \n    return parseFloat(value) >= 0 && isValid;\n  }\n\n  const ctaDisabled = (): boolean => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.DEFAULT:\n      case NewDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n      case NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n      case NewDepositTransactionStatus.CONVENIENCE_FEE_INVALID:\n      case NewDepositTransactionStatus.MAX_INTENTS_REACHED:\n      case NewDepositTransactionStatus.MISSING_REGISTRATION:\n      case NewDepositTransactionStatus.MISSING_AMOUNTS:\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return true;\n\n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n      case NewDepositTransactionStatus.VALID:\n      default:\n        return false;\n    }\n  }\n\n  const ctaLoading = (): boolean => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return loginStatus === LoginStatus.AUTHENTICATED;\n\n      default:\n        return false;\n    }\n  };\n\n  const ctaText = (): string => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.MISSING_REGISTRATION:\n        return 'Missing registration';\n\n      case NewDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n        return 'Invalid UPI id';\n\n      case NewDepositTransactionStatus.MISSING_AMOUNTS:\n        return 'Input deposit and receive amounts';\n      \n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        return `Insufficient balance — Deposit USDC`;\n      \n      case NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n        const minimumDepositAmountString = minimumDepositAmount ? toUsdcString(minimumDepositAmount, true) : '0';\n        return `Minimum deposit amount is ${minimumDepositAmountString}`;\n\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n        return 'Signing Transaction';\n\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return 'Mining Transaction';\n\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n        const usdcApprovalToRampString = usdcApprovalToHdfcRamp ? toUsdcString(usdcApprovalToHdfcRamp, true) : '0';\n        return `Insufficient USDC transfer approval: ${usdcApprovalToRampString}`;\n\n      case NewDepositTransactionStatus.VALID:\n        return 'Create Deposit';\n\n      case NewDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        return 'Go to Deposits';\n\n      case NewDepositTransactionStatus.DEFAULT:\n      default:\n        return 'Input valid UPI Id';\n\n    }\n  }\n\n  const ctaOnClick = async () => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n        try {\n          await writeSubmitApproveAsync?.();\n        } catch (error) {\n          console.log('writeSubmitApproveAsync failed: ', error);\n        }\n        break;\n\n      case NewDepositTransactionStatus.VALID:\n        try {\n          await writeSubmitDepositAsync?.();\n        } catch (error) {\n          console.log('writeSubmitDepositAsync failed: ', error);\n        }\n        break;\n\n      case NewDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        handleBackClick();\n        break;\n\n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        openModal(MODALS.RECEIVE);\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  const usdcBalanceLabel = useMemo(() => {\n    if (isLoggedIn && usdcBalance !== null) {\n      return `Balance: ${toUsdcString(usdcBalance, true)}`\n    } else {\n      return '';\n    }\n  }, [usdcBalance, isLoggedIn]);\n\n  const conversionRateLabel =  useMemo(() => {\n    if (isLoggedIn && depositAmountInput && receiveAmountInput) {\n      // Using USDC as the base currency\n      return `Rate: ${calculateConversionRate(depositAmountInput, receiveAmountInput)} USDC / INR`\n    } else {\n      return '';\n    }\n  }, [depositAmountInput, receiveAmountInput, isLoggedIn]);\n\n  /*\n   * Handlers\n   */\n\n  const handleInputChange = (value: string, setInputFunction: React.Dispatch<React.SetStateAction<string>>) => {\n    if (value === \"\") {\n      setInputFunction('');\n    } else if (value === \".\") {\n      setInputFunction('0.');\n    } else if (isValidInput(value)) {\n      setInputFunction(value);\n    }\n  };\n\n  return (\n    <Container>\n      <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n        <div style={{ flex: 0.5 }}>\n          <button\n            onClick={handleBackClick}\n            style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n          >\n            <StyledArrowLeft/>\n          </button>\n        </div>\n\n        <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n          New Deposit\n        </ThemedText.HeadlineSmall>\n\n        <div style={{ flex: 0.5 }}/>\n      </RowBetween>\n\n      <Body>\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            { hdfcStrings.get('NEW_DEPOSIT_INSTRUCTIONS') }\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n        <InputsContainer>\n          <Input\n            label=\"UPI ID\"\n            name={`upiId`}\n            value={upiIdInput}\n            onChange={(e) => {\n              setUpiIdInput(e.currentTarget.value)\n              latestUpiInputRef.current = e.currentTarget.value\n            }}\n            type=\"text\"\n            placeholder=\"0xsachink@okhdfcbank\"\n            helperText={hdfcStrings.get('NEW_DEPOSIT_ID_TOOLTIP')}\n          />\n\n          <Input\n            label=\"Deposit Amount\"\n            name={`depositAmount`}\n            value={depositAmountInput}\n            onChange={(e) => handleInputChange(e.currentTarget.value, setDepositAmountInput)}\n            type=\"number\"\n            inputLabel=\"USDC\"\n            placeholder=\"1000\"\n            accessoryLabel={usdcBalanceLabel}\n            helperText={hdfcStrings.get('NEW_DEPOSIT_AMOUNT_TOOLTIP')}\n            enableMax={true}\n            maxButtonOnClick={() => {\n              if (usdcBalance) {\n                setDepositAmountInput(toUsdcString(usdcBalance, false));\n              }\n            }}\n          />\n\n          <Input\n            label=\"Receive Amount\"\n            name={`receiveAmount`}\n            value={receiveAmountInput}\n            onChange={(e) => handleInputChange(e.currentTarget.value, setReceiveAmountInput)}\n            type=\"number\"\n            inputLabel=\"INR\"\n            placeholder=\"82800\"\n            accessoryLabel={conversionRateLabel}\n            helperText={hdfcStrings.get('NEW_DEPOSIT_RECEIVE_TOOLTIP')}\n          />\n\n          <ButtonContainer>\n            <Button\n              fullWidth={true}\n              disabled={ctaDisabled()}\n              loading={ctaLoading()}\n              onClick={async () => {\n                ctaOnClick();\n              }}>\n              { ctaText() }\n            </Button>\n          </ButtonContainer>\n        </InputsContainer>\n      </Body>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  background-color: ${colors.container};\n  padding: 1.5rem;\n  \n  @media (min-width: 600px) {\n    max-width: 552px;\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  background-color: ${colors.container};\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/index.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\n\nimport { AutoColumn } from '@components/layouts/Column';\nimport { NewPosition as VenmoNewPosition } from '@components/Deposit/venmo/NewPosition';\nimport { NewPosition as HdfcNewPosition } from '@components/Deposit/hdfc/NewPosition';\nimport { NewPosition as GarantiNewPosition } from '@components/Deposit/garanti/NewPosition';\nimport { NewPosition as RevolutNewPosition } from '@components/Deposit/revolut/NewPosition';\nimport { PositionTable } from '@components/Deposit/DepositTable';\nimport { OffRamperIntentTable } from '@components/Deposit/OffRamperIntentTable';\nimport { DepositIntent } from '@helpers/types';\nimport { DEPOSIT_REFETCH_INTERVAL } from '@helpers/constants';\nimport { colors } from '@theme/colors';\nimport useDeposits from '@hooks/venmo/useDeposits';\nimport useHdfcDeposits from '@hooks/hdfc/useDeposits';\nimport useGarantiDeposits from '@hooks/garanti/useDeposits';\nimport useRevolutDeposits from '@hooks/revolut/useDeposits';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\n\n\nexport default function Deposit() {\n  /*\n   * Contexts\n   */\n\n  const {\n    refetchDeposits: refetchVenmoDeposits,\n    shouldFetchDeposits: shouldFetchVenmoDeposits,\n    depositIntents: venmoDepositIntents,\n    shouldFetchDepositIntents: shouldFetchVenmoDepositIntents,\n    refetchDepositIntents: refetchVenmoDepositIntents,\n  } = useDeposits();\n\n  const {\n    refetchDeposits: refetchHdfcDeposits,\n    shouldFetchDeposits: shouldFetchHdfcDeposits,\n    depositIntents: hdfcDepositIntents,\n    shouldFetchDepositIntents: shouldFetchHdfcDepositIntents,\n    refetchDepositIntents: refetchHdfcDepositIntents,\n  } = useHdfcDeposits();\n\n  const {\n    refetchDeposits: refetchGarantiDeposits,\n    shouldFetchDeposits: shouldFetchGarantiDeposits,\n    depositIntents: garantiDepositIntents,\n    shouldFetchDepositIntents: shouldFetchGarantiDepositIntents,\n    refetchDepositIntents: refetchGarantiDepositIntents,\n  } = useGarantiDeposits();\n\n  const {\n    refetchDeposits: refetchRevolutDeposits,\n    shouldFetchDeposits: shouldFetchRevolutDeposits,\n    depositIntents: revolutDepositIntents,\n    shouldFetchDepositIntents: shouldFetchRevolutDepositIntents,\n    refetchDepositIntents: refetchRevolutDepositIntents,\n  } = useRevolutDeposits();\n\n  const { PaymentPlatform, paymentPlatform } = usePlatformSettings();\n\n  /*\n   * State\n   */\n\n  const [isAddPosition, setIsAddPosition] = useState<boolean>(false);\n\n  const [depositIntents, setDepositIntents] = useState<DepositIntent[]>([]);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchVenmoDeposits) {\n      const intervalId = setInterval(() => {\n        refetchVenmoDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchVenmoDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchHdfcDeposits) {\n      const intervalId = setInterval(() => {\n        refetchHdfcDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchHdfcDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchGarantiDeposits) {\n      const intervalId = setInterval(() => {\n        refetchGarantiDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchGarantiDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchRevolutDeposits) {\n      const intervalId = setInterval(() => {\n        refetchRevolutDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchRevolutDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchVenmoDepositIntents) {\n      const intervalId = setInterval(() => {\n        refetchVenmoDepositIntents?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchVenmoDepositIntents]);\n\n  useEffect(() => {\n    if (shouldFetchHdfcDepositIntents) {\n      const intervalId = setInterval(() => {\n        refetchHdfcDepositIntents?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchHdfcDepositIntents]);\n\n  useEffect(() => {\n    if (shouldFetchGarantiDepositIntents) {\n      const intervalId = setInterval(() => {\n        refetchGarantiDepositIntents?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchGarantiDepositIntents]);\n\n  useEffect(() => {\n    if (shouldFetchRevolutDepositIntents) {\n      const intervalId = setInterval(() => {\n        refetchRevolutDepositIntents?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchRevolutDepositIntents]);\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        if (venmoDepositIntents) {\n          setDepositIntents(venmoDepositIntents);\n        }\n        break;\n\n      case PaymentPlatform.HDFC:\n        if (hdfcDepositIntents) {\n          setDepositIntents(hdfcDepositIntents);\n        }\n        break;\n\n      case PaymentPlatform.GARANTI:\n        if (garantiDepositIntents) {\n          setDepositIntents(garantiDepositIntents);\n        }\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        if (revolutDepositIntents) {\n          setDepositIntents(revolutDepositIntents);\n        }\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      venmoDepositIntents,\n      hdfcDepositIntents,\n      garantiDepositIntents,\n      revolutDepositIntents\n    ]\n  );\n\n  /*\n   * Handlers\n   */\n\n  const handleUpdateClick = () => {\n    setIsAddPosition(true);\n  }\n\n  const handleBackClickOnNewDeposit = () => {\n    setIsAddPosition(false);\n  }\n\n  /*\n   * Component\n   */\n\n  function renderContent() {\n    if (isAddPosition) {\n      switch (paymentPlatform) {\n        case PaymentPlatform.VENMO:\n          return (\n            <VenmoNewPosition\n              handleBackClick={handleBackClickOnNewDeposit}\n            />\n          );\n\n        case PaymentPlatform.HDFC:\n          return (\n            <HdfcNewPosition\n              handleBackClick={handleBackClickOnNewDeposit}\n            />\n          );\n\n        case PaymentPlatform.GARANTI:\n          return (\n            <GarantiNewPosition\n              handleBackClick={handleBackClickOnNewDeposit}\n            />\n          );\n\n        case PaymentPlatform.REVOLUT:\n          return (\n            <RevolutNewPosition\n              handleBackClick={handleBackClickOnNewDeposit}\n            />\n          );\n      }\n    }\n  \n    return (\n      <DepositAndIntentContainer>\n        <PositionTable\n          handleNewPositionClick={handleUpdateClick}\n        />\n\n        {depositIntents.length > 0 ? (\n          <>\n            <VerticalDivider />\n            <OffRamperIntentTable/>\n          </>\n        ) : null}\n      </DepositAndIntentContainer>\n    );\n  }\n\n  return (\n    <Wrapper>\n      <Content>\n        {renderContent()}\n      </Content>\n    </Wrapper>\n  )\n}\n\nconst Wrapper = styled(AutoColumn)`\n  max-width: 660px;\n  width: 100%;\n`;\n\nconst DepositAndIntentContainer = styled.div`\n  display: grid;\n  border-radius: 16px;\n`;\n\nconst Content = styled.main`\n  gap: 1rem;\n`;\n\nconst VerticalDivider = styled.div`\n  height: 24px;\n  border-left: 1px solid ${colors.defaultBorderColor};\n  margin: 0 auto;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/revolut/NewPosition.tsx",
    "content": "import React, { useEffect, useMemo, useState } from 'react';\nimport { ArrowLeft } from 'react-feather';\nimport styled from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { ethers } from \"ethers\";\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Input } from \"@components/Deposit/Input\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { LoginStatus, NewRevolutDepositTransactionStatus } from '@helpers/types';\nimport { calculateConversionRate, toBigInt, toUsdcString } from '@helpers/units';\nimport { ZERO } from '@helpers/constants';\nimport { revolutStrings } from '@helpers/strings';\nimport { keccak256, calculateRevolutTagHash } from '@helpers/keccack';\nimport { MODALS } from '@helpers/types';\nimport { NOTARY_VERIFICATION_SIGNING_KEY } from '@helpers/notary';\nimport { PaymentPlatform, paymentPlatformInfo, PaymentPlatformType } from '@helpers/types';\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport useDeposits from '@hooks/revolut/useDeposits';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport useRampState from '@hooks/revolut/useRampState';\nimport useRegistration from '@hooks/revolut/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useModal from '@hooks/useModal';\n\n\nconst NOTARY_PUBKEY_HASH = process.env.NOTARY_PUBKEY_HASH;\nif (!NOTARY_PUBKEY_HASH) {\n    throw new Error(\"NOTARY_PUBKEY_HASH environment variable is not defined.\");\n};\n\ninterface NewPositionProps {\n  handleBackClick: () => void;\n}\n \nexport const NewPosition: React.FC<NewPositionProps> = ({\n  handleBackClick\n}) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loginStatus } = useAccount();\n  const { revolutRampAddress, revolutRampAbi, usdcAddress, usdcAbi } = useSmartContracts();\n  const { minimumDepositAmount } = useRampState();\n  const { usdcApprovalToRevolutRamp, usdcBalance, refetchUsdcApprovalToRevolutRamp, refetchUsdcBalance } = useBalances();\n  const { refetchDeposits } = useDeposits();\n  const { paymentPlatform, currencyIndex } = usePlatformSettings();\n  const {\n    extractedRevolutProfileId,\n    registrationHash,\n    setExtractedRevolutProfileId,\n  } = useRegistration();\n  const { openModal } = useModal();\n\n  /*\n   * State\n   */\n  \n  const [depositState, setDepositState] = useState(NewRevolutDepositTransactionStatus.DEFAULT);\n  const [revTagInput, setRevolutTagInput] = useState<string>('');\n  const [depositAmountInput, setDepositAmountInput] = useState<string>('');\n  const [receiveAmountInput, setReceiveAmountInput] = useState<string>('');\n\n  const [isRevolutTagInputValid, setIsRevolutTagInputValid] = useState<boolean>(false);\n  const [amountToApprove, setAmountToApprove] = useState<bigint>(ZERO);\n\n  const [shouldConfigureNewDepositWrite, setShouldConfigureNewDepositWrite] = useState<boolean>(false);\n  const [shouldConfigureApprovalWrite, setShouldConfigureApprovalWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // offRamp(string calldata _revTag, bytes32 _receiveCurrencyId, uint256 _depositAmount, uint256 _receiveAmount, ITLSData.TLSParams calldata _tlsParams)\n  //\n  const { config: writeDepositConfig } = usePrepareContractWrite({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'offRamp',\n    args: [\n      revTagInput,\n      keccak256(paymentPlatformInfo[PaymentPlatform.REVOLUT].platformCurrencies[currencyIndex]),\n      toBigInt(depositAmountInput.toString()),\n      toBigInt(receiveAmountInput.toString()),\n      NOTARY_VERIFICATION_SIGNING_KEY,\n      ethers.utils.hexZeroPad(ethers.utils.hexlify(BigInt(NOTARY_PUBKEY_HASH)), 32)\n    ],\n    enabled: shouldConfigureNewDepositWrite\n  });\n\n  const {\n    data: submitDepositResult,\n    status: signDepositTransactionStatus,\n    writeAsync: writeSubmitDepositAsync,\n  } = useContractWrite(writeDepositConfig);\n\n  const {\n    status: mineDepositTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitDepositResult ? submitDepositResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitDepositAsync successful: ', data);\n      \n      refetchDeposits?.();\n\n      refetchUsdcApprovalToRevolutRamp?.();\n\n      refetchUsdcBalance?.();\n\n      setDepositState(NewRevolutDepositTransactionStatus.TRANSACTION_SUCCEEDED);\n    },\n  });\n\n  //\n  // approve(address spender, uint256 value)\n  //\n  const { config: writeApproveConfig } = usePrepareContractWrite({\n    address: usdcAddress,\n    abi: usdcAbi,\n    functionName: \"approve\",\n    args: [\n      revolutRampAddress,\n      amountToApprove\n    ],\n    enabled: shouldConfigureApprovalWrite\n  });\n\n  const {\n    data: submitApproveResult,\n    status: signApproveTransactionStatus,\n    writeAsync: writeSubmitApproveAsync\n  } = useContractWrite(writeApproveConfig);\n\n  const {\n    status: mineApproveTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitApproveResult ? submitApproveResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitApproveAsync successful: ', data);\n      \n      refetchUsdcApprovalToRevolutRamp?.();\n\n      refetchUsdcBalance?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const updateDepositState = async () => {\n      const successfulDepositTransaction = mineDepositTransactionStatus === 'success';\n\n      if (successfulDepositTransaction) {\n        setDepositState(NewRevolutDepositTransactionStatus.TRANSACTION_SUCCEEDED);\n      } else {\n        if (!registrationHash) {\n          setDepositState(NewRevolutDepositTransactionStatus.MISSING_REGISTRATION);\n        } else {\n          if (!revTagInput) { \n            setDepositState(NewRevolutDepositTransactionStatus.DEFAULT);\n          } else {\n            if (!isRevolutTagInputValid) {\n              setDepositState(NewRevolutDepositTransactionStatus.INVALID_DEPOSITOR_ID);\n            } else {\n              const usdcBalanceLoaded = usdcBalance !== null;\n              const usdcApprovalToRevolutRampLoaded = usdcApprovalToRevolutRamp !== null;\n              const minimumDepositAmountLoaded = minimumDepositAmount !== null;\n  \n              if (depositAmountInput && usdcBalanceLoaded && usdcApprovalToRevolutRampLoaded && minimumDepositAmountLoaded) {\n                const depositAmountBI = toBigInt(depositAmountInput);\n                const isDepositAmountGreaterThanBalance = depositAmountBI > usdcBalance;\n                const isDepositAmountLessThanMinDepositSize = depositAmountBI < minimumDepositAmount;\n                const isDepositAmountGreaterThanApprovedBalance = depositAmountBI > usdcApprovalToRevolutRamp;\n          \n                const signingApproveTransaction = signApproveTransactionStatus === 'loading';\n                const miningApproveTransaction = mineApproveTransactionStatus === 'loading';\n                const successfulApproveTransaction = mineApproveTransactionStatus === 'success';\n\n                if (isDepositAmountGreaterThanBalance) {\n                  setDepositState(NewRevolutDepositTransactionStatus.INSUFFICIENT_BALANCE);\n                } else if (isDepositAmountLessThanMinDepositSize) {\n                  setDepositState(NewRevolutDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET);\n                } else if (isDepositAmountGreaterThanApprovedBalance && !successfulApproveTransaction) {\n                  if (signingApproveTransaction) {\n                    setDepositState(NewRevolutDepositTransactionStatus.TRANSACTION_SIGNING);\n                  } else if (miningApproveTransaction) {\n                    setDepositState(NewRevolutDepositTransactionStatus.TRANSACTION_MINING);\n                  } else {\n                    setDepositState(NewRevolutDepositTransactionStatus.APPROVAL_REQUIRED);\n                  }\n                } else {\n                  if (receiveAmountInput) {\n                    const signingDepositTransaction = signDepositTransactionStatus === 'loading';\n                    const miningDepositTransaction = mineDepositTransactionStatus === 'loading';\n\n                    if (signingDepositTransaction) {\n                      setDepositState(NewRevolutDepositTransactionStatus.TRANSACTION_SIGNING);\n                    } else if (miningDepositTransaction){\n                      setDepositState(NewRevolutDepositTransactionStatus.TRANSACTION_MINING);\n                    } else {\n                      setDepositState(NewRevolutDepositTransactionStatus.VALID);\n                    }\n                  } else {\n                    setDepositState(NewRevolutDepositTransactionStatus.MISSING_AMOUNTS);\n                  }\n                }\n              } else {\n                setDepositState(NewRevolutDepositTransactionStatus.MISSING_AMOUNTS);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    updateDepositState();\n  }, [\n      revTagInput,\n      registrationHash,\n      depositAmountInput,\n      receiveAmountInput,\n      minimumDepositAmount,\n      usdcBalance,\n      usdcApprovalToRevolutRamp,\n      isRevolutTagInputValid,\n      signApproveTransactionStatus,\n      mineApproveTransactionStatus,\n      signDepositTransactionStatus,\n      mineDepositTransactionStatus,\n    ]\n  );\n\n  useEffect(() => {\n    const isApprovalRequired = depositState === NewRevolutDepositTransactionStatus.APPROVAL_REQUIRED;\n    setShouldConfigureApprovalWrite(isApprovalRequired);\n    \n    setShouldConfigureNewDepositWrite(depositState === NewRevolutDepositTransactionStatus.VALID);\n  }, [depositState]);\n\n  useEffect(() => {\n    const usdcApprovalToRevolutRampLoaded = usdcApprovalToRevolutRamp !== null && usdcApprovalToRevolutRamp !== undefined;\n\n    if (!depositAmountInput || !usdcApprovalToRevolutRampLoaded) {\n      setAmountToApprove(ZERO);\n    } else {\n      const depositAmountBI = toBigInt(depositAmountInput.toString());\n      const approvalDifference = depositAmountBI - usdcApprovalToRevolutRamp;\n      if (approvalDifference > ZERO) {\n        setAmountToApprove(depositAmountBI);\n      } else {\n        setAmountToApprove(ZERO);\n      }\n    }\n    \n  }, [depositAmountInput, usdcApprovalToRevolutRamp]);\n\n  useEffect(() => {\n    if (extractedRevolutProfileId) {\n      setRevolutTagInput(extractedRevolutProfileId);\n    } else {\n      setRevolutTagInput('');\n    }\n  }, [extractedRevolutProfileId]);\n\n  useEffect(() => {\n    const verifyRevolutTagInput = async () => {\n      if (revTagInput.length < 6) {\n        setIsRevolutTagInputValid(false);\n      } else {\n        if (registrationHash) {\n          const revTagHash = calculateRevolutTagHash(revTagInput);\n          const validRevolutTagInput = revTagHash === registrationHash;\n          setIsRevolutTagInputValid(validRevolutTagInput);\n\n          if (validRevolutTagInput && setExtractedRevolutProfileId) {\n            setExtractedRevolutProfileId(revTagInput);\n          };\n        } else {\n          setIsRevolutTagInputValid(false);\n        }\n      }\n    };\n\n    verifyRevolutTagInput();\n  }, [revTagInput, registrationHash, setExtractedRevolutProfileId]);\n\n  /*\n   * Helpers\n   */\n\n  function isValidInput(value: string) {\n    const isValid = /^-?\\d*(\\.\\d{0,6})?$/.test(value);\n    \n    return parseFloat(value) >= 0 && isValid;\n  }\n\n  const ctaDisabled = (): boolean => {\n    switch (depositState) {\n      case NewRevolutDepositTransactionStatus.DEFAULT:\n      case NewRevolutDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n      case NewRevolutDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n      case NewRevolutDepositTransactionStatus.CONVENIENCE_FEE_INVALID:\n      case NewRevolutDepositTransactionStatus.MAX_INTENTS_REACHED:\n      case NewRevolutDepositTransactionStatus.MISSING_REGISTRATION:\n      case NewRevolutDepositTransactionStatus.MISSING_AMOUNTS:\n      case NewRevolutDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewRevolutDepositTransactionStatus.TRANSACTION_MINING:\n        return true;\n\n      case NewRevolutDepositTransactionStatus.INSUFFICIENT_BALANCE:\n      case NewRevolutDepositTransactionStatus.APPROVAL_REQUIRED:\n      case NewRevolutDepositTransactionStatus.VALID:\n      default:\n        return false;\n    }\n  }\n\n  const ctaLoading = (): boolean => {\n    switch (depositState) {\n      case NewRevolutDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewRevolutDepositTransactionStatus.TRANSACTION_MINING:\n        return loginStatus === LoginStatus.AUTHENTICATED;\n\n      default:\n        return false;\n    }\n  };\n\n  const ctaText = (): string => {\n    switch (depositState) {\n      case NewRevolutDepositTransactionStatus.MISSING_REGISTRATION:\n        return 'Missing registration';\n\n      case NewRevolutDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n        return 'Revtag does not match registration';\n\n      case NewRevolutDepositTransactionStatus.MISSING_AMOUNTS:\n        return 'Input deposit and receive amounts';\n      \n      case NewRevolutDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        return `Insufficient balance — Deposit USDC`;\n      \n      case NewRevolutDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n        const minimumDepositAmountString = minimumDepositAmount ? toUsdcString(minimumDepositAmount, true) : '0';\n        return `Minimum deposit amount is ${minimumDepositAmountString}`;\n\n      case NewRevolutDepositTransactionStatus.TRANSACTION_SIGNING:\n        return 'Signing Transaction';\n\n      case NewRevolutDepositTransactionStatus.TRANSACTION_MINING:\n        return 'Mining Transaction';\n\n      case NewRevolutDepositTransactionStatus.APPROVAL_REQUIRED:\n        const usdcApprovalToRevolutRampString = usdcApprovalToRevolutRamp ? toUsdcString(usdcApprovalToRevolutRamp, true) : '0';\n        return `Insufficient USDC transfer approval: ${usdcApprovalToRevolutRampString}`;\n\n      case NewRevolutDepositTransactionStatus.VALID:\n        return 'Create Deposit';\n\n      case NewRevolutDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        return 'Go to Deposits';\n\n      case NewRevolutDepositTransactionStatus.DEFAULT:\n      default:\n        return 'Input valid Revtag';\n    }\n  }\n\n  const ctaOnClick = async () => {\n    switch (depositState) {\n      case NewRevolutDepositTransactionStatus.APPROVAL_REQUIRED:\n        try {\n          await writeSubmitApproveAsync?.();\n        } catch (error) {\n          console.log('writeSubmitApproveAsync failed: ', error);\n        }\n        break;\n\n      case NewRevolutDepositTransactionStatus.VALID:\n        try {\n          await writeSubmitDepositAsync?.();\n        } catch (error) {\n          console.log('writeSubmitDepositAsync failed: ', error);\n        }\n        break;\n\n      case NewRevolutDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        handleBackClick();\n        break;\n\n      case NewRevolutDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        openModal(MODALS.RECEIVE);\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  const usdcBalanceLabel = useMemo(() => {\n    if (isLoggedIn && usdcBalance !== null) {\n      return `Balance: ${toUsdcString(usdcBalance, true)}`\n    } else {\n      return '';\n    }\n  }, [usdcBalance, isLoggedIn]);\n\n  const conversionRateLabel =  useMemo(() => {\n    if (isLoggedIn && depositAmountInput && receiveAmountInput) {\n      // Flipping conversion rate (i.e. relative to Venmo) b/c EUR/USD is quoted with USD as the base currency\n      return `Rate: ${calculateConversionRate(receiveAmountInput, depositAmountInput)} ${paymentPlatformInfo[PaymentPlatform.REVOLUT].platformCurrencies[currencyIndex]} / USDC`;\n    } else {\n      return '';\n    }\n  }, [depositAmountInput, receiveAmountInput, isLoggedIn, currencyIndex]);\n\n  const selectedCurrency = useMemo(() => {\n    const currentSelectedCurrency = paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies[currencyIndex];\n    return `You will receive ${currentSelectedCurrency} from users who claim your deposit. `;\n  }, [paymentPlatform, currencyIndex]);\n\n  /*\n   * Handlers\n   */\n\n  const handleInputChange = (value: string, setInputFunction: React.Dispatch<React.SetStateAction<string>>) => {\n    if (value === \"\") {\n      setInputFunction('');\n    } else if (value === \".\") {\n      setInputFunction('0.');\n    } else if (isValidInput(value)) {\n      setInputFunction(value);\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  function renderContent() {\n    return (\n      <NewPositionContainer>\n        <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            New Deposit\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <Body>\n          <InstructionsAndTogglesContainer>\n            <NumberedStep>\n              {`${revolutStrings.get('PROOF_FORM_TITLE_SEND_INSTRUCTIONS')} ${selectedCurrency}`}\n              <Link href=\"https://docs.zkp2p.xyz/onramp-guides/off-ramping/fetch-your-revtag\" target=\"_blank\">\n                Fetch your Revtag ↗\n              </Link>\n            </NumberedStep>\n          </InstructionsAndTogglesContainer>\n          <InputsContainer>\n            <Input\n              label=\"Revtag\"\n              name={`revTag`}\n              value={revTagInput}\n              onChange={(e) => {setRevolutTagInput(e.currentTarget.value)}}\n              type=\"string\"\n              placeholder=\"zkp2p7gy\"\n              helperText={revolutStrings.get('NEW_DEPOSIT_ID_TOOLTIP')}\n              valueFontSize=\"20px\"\n            />\n\n            <Input\n              label=\"Deposit Amount\"\n              name={`depositAmount`}\n              value={depositAmountInput}\n              onChange={(e) => handleInputChange(e.currentTarget.value, setDepositAmountInput)}\n              type=\"number\"\n              inputLabel=\"USDC\"\n              placeholder=\"1000\"\n              accessoryLabel={usdcBalanceLabel}\n              helperText={revolutStrings.get('NEW_DEPOSIT_AMOUNT_TOOLTIP')}\n              enableMax={true}\n              maxButtonOnClick={() => {\n                if (usdcBalance) {\n                  setDepositAmountInput(toUsdcString(usdcBalance, false));\n                }\n              }}\n            />\n\n            <Input\n              label=\"Receive Amount\"\n              name={`receiveAmount`}\n              value={receiveAmountInput}\n              onChange={(e) => handleInputChange(e.currentTarget.value, setReceiveAmountInput)}\n              type=\"number\"\n              hasSelector={true}\n              placeholder=\"940\"\n              accessoryLabel={conversionRateLabel}\n              helperText={revolutStrings.get('NEW_DEPOSIT_RECEIVE_TOOLTIP')}\n            />\n\n            <ButtonContainer>\n              <Button\n                fullWidth={true}\n                disabled={ctaDisabled()}\n                loading={ctaLoading()}\n                onClick={async () => {\n                  ctaOnClick();\n                }}>\n                { ctaText() }\n              </Button>\n            </ButtonContainer>\n          </InputsContainer>\n        </Body>\n      </NewPositionContainer>\n    );\n  }\n\n  return (\n    <NewPositionOrAccountRegistrationContainer>\n      {renderContent()}\n    </NewPositionOrAccountRegistrationContainer>\n  );\n};\n\nconst NewPositionOrAccountRegistrationContainer = styled.div`\n  max-width: 552px;\n`;\n\nconst NewPositionContainer = styled.div`\n  display: grid;\n  padding: 1.5rem;\n  background-color: ${colors.container};\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  background-color: ${colors.container};\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/Deposit/venmo/NewPosition.tsx",
    "content": "import React, { useEffect, useMemo, useState } from 'react';\nimport { ArrowLeft } from 'react-feather';\nimport styled from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { Input } from \"@components/Deposit/Input\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { calculatePackedVenmoId, isProvidedIdEqualToRegistration } from '@helpers/poseidonHash';\nimport { LoginStatus, NewDepositTransactionStatus } from '@helpers/types';\nimport { calculateConversionRate, toBigInt, toUsdcString } from '@helpers/units';\nimport { ZERO } from '@helpers/constants';\nimport { venmoStrings } from '@helpers/strings';\nimport { MODALS } from '@helpers/types';\nimport { colors } from '@theme/colors';\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport useDeposits from '@hooks/venmo/useDeposits';\nimport useRampState from '@hooks/venmo/useRampState';\nimport useRegistration from '@hooks/venmo/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useModal from '@hooks/useModal';\n\n\ninterface NewPositionProps {\n  handleBackClick: () => void;\n}\n \nexport const NewPosition: React.FC<NewPositionProps> = ({\n  handleBackClick\n}) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loginStatus } = useAccount();\n  const { venmoRampAddress, venmoRampAbi, usdcAddress, usdcAbi } = useSmartContracts();\n  const { minimumDepositAmount } = useRampState();\n  const { usdcApprovalToRamp, usdcBalance, refetchUsdcApprovalToRamp, refetchUsdcBalance } = useBalances();\n  const { refetchDeposits } = useDeposits();\n  const { extractedVenmoId, registrationHash, setExtractedVenmoId } = useRegistration();\n  const { openModal } = useModal();\n\n  /*\n   * State\n   */\n  \n  const [depositState, setDepositState] = useState(NewDepositTransactionStatus.DEFAULT);\n  const [venmoIdInput, setVenmoIdInput] = useState<string>('');\n  const [depositAmountInput, setDepositAmountInput] = useState<string>('');\n  const [receiveAmountInput, setReceiveAmountInput] = useState<string>('');\n\n  const [isVenmoIdInputValid, setIsVenmoIdInputValid] = useState<boolean>(false);\n  const [amountToApprove, setAmountToApprove] = useState<bigint>(ZERO);\n\n  const [shouldConfigureNewDepositWrite, setShouldConfigureNewDepositWrite] = useState<boolean>(false);\n  const [shouldConfigureApprovalWrite, setShouldConfigureApprovalWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // offRamp(bytes32 _venmoId, uint256 _depositAmount, uint256 _receiveAmount)\n  //\n  const { config: writeDepositConfig } = usePrepareContractWrite({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'offRamp',\n    args: [\n      calculatePackedVenmoId(venmoIdInput),\n      toBigInt(depositAmountInput.toString()),\n      toBigInt(receiveAmountInput.toString()),\n    ],\n    enabled: shouldConfigureNewDepositWrite\n  });\n\n  const {\n    data: submitDepositResult,\n    status: signDepositTransactionStatus,\n    writeAsync: writeSubmitDepositAsync,\n  } = useContractWrite(writeDepositConfig);\n\n  const {\n    status: mineDepositTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitDepositResult ? submitDepositResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitDepositAsync successful: ', data);\n      \n      refetchDeposits?.();\n\n      refetchUsdcApprovalToRamp?.();\n\n      refetchUsdcBalance?.();\n\n      setDepositState(NewDepositTransactionStatus.TRANSACTION_SUCCEEDED);\n    },\n  });\n\n  //\n  // approve(address spender, uint256 value)\n  //\n  const { config: writeApproveConfig } = usePrepareContractWrite({\n    address: usdcAddress,\n    abi: usdcAbi,\n    functionName: \"approve\",\n    args: [\n      venmoRampAddress,\n      amountToApprove\n    ],\n    enabled: shouldConfigureApprovalWrite\n  });\n\n  const {\n    data: submitApproveResult,\n    status: signApproveTransactionStatus,\n    writeAsync: writeSubmitApproveAsync\n  } = useContractWrite(writeApproveConfig);\n\n  const {\n    status: mineApproveTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitApproveResult ? submitApproveResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitApproveAsync successful: ', data);\n      \n      refetchUsdcApprovalToRamp?.();\n\n      refetchUsdcBalance?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const updateDepositState = async () => {\n      const successfulDepositTransaction = mineDepositTransactionStatus === 'success';\n\n      if (successfulDepositTransaction) {\n        setDepositState(NewDepositTransactionStatus.TRANSACTION_SUCCEEDED);\n      } else {\n        if(!registrationHash) {\n          setDepositState(NewDepositTransactionStatus.MISSING_REGISTRATION);\n        } else {\n          if (!venmoIdInput) { \n            setDepositState(NewDepositTransactionStatus.DEFAULT);\n          } else {\n            if (!isVenmoIdInputValid) {\n              setDepositState(NewDepositTransactionStatus.INVALID_DEPOSITOR_ID);\n            } else {\n              const usdcBalanceLoaded = usdcBalance !== null;\n              const usdcApprovalToRampLoaded = usdcApprovalToRamp !== null;\n              const minimumDepositAmountLoaded = minimumDepositAmount !== null;\n  \n              if (depositAmountInput && usdcBalanceLoaded && usdcApprovalToRampLoaded && minimumDepositAmountLoaded) {\n                const depositAmountBI = toBigInt(depositAmountInput);\n                const isDepositAmountGreaterThanBalance = depositAmountBI > usdcBalance;\n                const isDepositAmountLessThanMinDepositSize = depositAmountBI < minimumDepositAmount;\n                const isDepositAmountGreaterThanApprovedBalance = depositAmountBI > usdcApprovalToRamp;\n          \n                const signingApproveTransaction = signApproveTransactionStatus === 'loading';\n                const miningApproveTransaction = mineApproveTransactionStatus === 'loading';\n                const successfulApproveTransaction = mineApproveTransactionStatus === 'success';\n\n                if (isDepositAmountGreaterThanBalance) {\n                  setDepositState(NewDepositTransactionStatus.INSUFFICIENT_BALANCE);\n                } else if (isDepositAmountLessThanMinDepositSize) {\n                  setDepositState(NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET);\n                } else if (isDepositAmountGreaterThanApprovedBalance && !successfulApproveTransaction) {\n                  if (signingApproveTransaction) {\n                    setDepositState(NewDepositTransactionStatus.TRANSACTION_SIGNING);\n                  } else if (miningApproveTransaction) {\n                    setDepositState(NewDepositTransactionStatus.TRANSACTION_MINING);\n                  } else {\n                    setDepositState(NewDepositTransactionStatus.APPROVAL_REQUIRED);\n                  }\n                } else {\n                  if (receiveAmountInput) {\n                    const signingDepositTransaction = signDepositTransactionStatus === 'loading';\n                    const miningDepositTransaction = mineDepositTransactionStatus === 'loading';\n\n                    if (signingDepositTransaction) {\n                      setDepositState(NewDepositTransactionStatus.TRANSACTION_SIGNING);\n                    } else if (miningDepositTransaction){\n                      setDepositState(NewDepositTransactionStatus.TRANSACTION_MINING);\n                    } else {\n                      setDepositState(NewDepositTransactionStatus.VALID);\n                    }\n                  } else {\n                    setDepositState(NewDepositTransactionStatus.MISSING_AMOUNTS);\n                  }\n                }\n              } else {\n                setDepositState(NewDepositTransactionStatus.MISSING_AMOUNTS);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    updateDepositState();\n  }, [\n      venmoIdInput,\n      registrationHash,\n      depositAmountInput,\n      receiveAmountInput,\n      minimumDepositAmount,\n      usdcBalance,\n      usdcApprovalToRamp,\n      isVenmoIdInputValid,\n      signApproveTransactionStatus,\n      mineApproveTransactionStatus,\n      signDepositTransactionStatus,\n      mineDepositTransactionStatus,\n    ]\n  );\n\n  useEffect(() => {\n    const isApprovalRequired = depositState === NewDepositTransactionStatus.APPROVAL_REQUIRED;\n    setShouldConfigureApprovalWrite(isApprovalRequired);\n    \n    setShouldConfigureNewDepositWrite(depositState === NewDepositTransactionStatus.VALID);\n  }, [depositState]);\n\n  useEffect(() => {\n    const usdcApprovalToRampLoaded = usdcApprovalToRamp !== null && usdcApprovalToRamp !== undefined;\n\n    if (!depositAmountInput || !usdcApprovalToRampLoaded) {\n      setAmountToApprove(ZERO);\n    } else {\n      const depositAmountBI = toBigInt(depositAmountInput.toString());\n      const approvalDifference = depositAmountBI - usdcApprovalToRamp;\n      if (approvalDifference > ZERO) {\n        setAmountToApprove(depositAmountBI);\n      } else {\n        setAmountToApprove(ZERO);\n      }\n    }\n    \n  }, [depositAmountInput, usdcApprovalToRamp]);\n\n  useEffect(() => {\n    if (extractedVenmoId) {\n      setVenmoIdInput(extractedVenmoId);\n    } else {\n      setVenmoIdInput('');\n    }\n  }, [extractedVenmoId]);\n\n  useEffect(() => {\n    const verifyVenmoIdInput = async () => {\n      if (venmoIdInput.length < 18) {\n        setIsVenmoIdInputValid(false);\n      } else {\n        if (registrationHash) {\n          const validVenmoInput = await isProvidedIdEqualToRegistration(venmoIdInput, registrationHash);\n\n          setIsVenmoIdInputValid(validVenmoInput);\n\n          if (validVenmoInput && setExtractedVenmoId) {\n            setExtractedVenmoId(venmoIdInput);\n          };\n        } else {\n          setIsVenmoIdInputValid(false);\n        }\n      }\n    };\n\n    verifyVenmoIdInput();\n  }, [venmoIdInput, registrationHash, setExtractedVenmoId]);\n\n  /*\n   * Helpers\n   */\n\n  function isValidInput(value: string) {\n    const isValid = /^-?\\d*(\\.\\d{0,6})?$/.test(value);\n    \n    return parseFloat(value) >= 0 && isValid;\n  }\n\n  const ctaDisabled = (): boolean => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.DEFAULT:\n      case NewDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n      case NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n      case NewDepositTransactionStatus.CONVENIENCE_FEE_INVALID:\n      case NewDepositTransactionStatus.MAX_INTENTS_REACHED:\n      case NewDepositTransactionStatus.MISSING_REGISTRATION:\n      case NewDepositTransactionStatus.MISSING_AMOUNTS:\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return true;\n\n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n      case NewDepositTransactionStatus.VALID:\n      default:\n        return false;\n    }\n  }\n\n  const ctaLoading = (): boolean => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return loginStatus === LoginStatus.AUTHENTICATED;\n\n      default:\n        return false;\n    }\n  };\n\n  const ctaText = (): string => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.MISSING_REGISTRATION:\n        return 'Missing registration';\n\n      case NewDepositTransactionStatus.INVALID_DEPOSITOR_ID:\n        return 'Venmo id does not match registration';\n\n      case NewDepositTransactionStatus.MISSING_AMOUNTS:\n        return 'Input deposit and receive amounts';\n      \n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        return `Insufficient balance — Deposit USDC`;\n      \n      case NewDepositTransactionStatus.MIN_DEPOSIT_THRESHOLD_NOT_MET:\n        const minimumDepositAmountString = minimumDepositAmount ? toUsdcString(minimumDepositAmount, true) : '0';\n        return `Minimum deposit amount is ${minimumDepositAmountString}`;\n\n      case NewDepositTransactionStatus.TRANSACTION_SIGNING:\n        return 'Signing Transaction';\n\n      case NewDepositTransactionStatus.TRANSACTION_MINING:\n        return 'Mining Transaction';\n\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n        const usdcApprovalToRampString = usdcApprovalToRamp ? toUsdcString(usdcApprovalToRamp, true) : '0';\n        return `Insufficient USDC transfer approval: ${usdcApprovalToRampString}`;\n\n      case NewDepositTransactionStatus.VALID:\n        return 'Create Deposit';\n\n      case NewDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        return 'Go to Deposits';\n\n      case NewDepositTransactionStatus.DEFAULT:\n      default:\n        return 'Input valid Venmo Id';\n    }\n  }\n\n  const ctaOnClick = async () => {\n    switch (depositState) {\n      case NewDepositTransactionStatus.APPROVAL_REQUIRED:\n        try {\n          await writeSubmitApproveAsync?.();\n        } catch (error) {\n          console.log('writeSubmitApproveAsync failed: ', error);\n        }\n        break;\n\n      case NewDepositTransactionStatus.VALID:\n        try {\n          await writeSubmitDepositAsync?.();\n        } catch (error) {\n          console.log('writeSubmitDepositAsync failed: ', error);\n        }\n        break;\n\n      case NewDepositTransactionStatus.TRANSACTION_SUCCEEDED:\n        handleBackClick();\n        break;\n\n      case NewDepositTransactionStatus.INSUFFICIENT_BALANCE:\n        openModal(MODALS.RECEIVE);\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  const usdcBalanceLabel = useMemo(() => {\n    if (isLoggedIn && usdcBalance !== null) {\n      return `Balance: ${toUsdcString(usdcBalance, true)}`\n    } else {\n      return '';\n    }\n  }, [usdcBalance, isLoggedIn]);\n\n  const conversionRateLabel =  useMemo(() => {\n    if (isLoggedIn && depositAmountInput && receiveAmountInput) {\n      // Using USD as the base currency\n      return `Rate: ${calculateConversionRate(depositAmountInput, receiveAmountInput)} USDC / USD`\n    } else {\n      return '';\n    }\n  }, [depositAmountInput, receiveAmountInput, isLoggedIn]);\n\n  /*\n   * Handlers\n   */\n\n  const handleInputChange = (value: string, setInputFunction: React.Dispatch<React.SetStateAction<string>>) => {\n    if (value === \"\") {\n      setInputFunction('');\n    } else if (value === \".\") {\n      setInputFunction('0.');\n    } else if (isValidInput(value)) {\n      setInputFunction(value);\n    }\n  };\n\n  return (\n    <Container>\n      <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n        <div style={{ flex: 0.5 }}>\n          <button\n            onClick={handleBackClick}\n            style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n          >\n            <StyledArrowLeft/>\n          </button>\n        </div>\n\n        <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n          New Deposit\n        </ThemedText.HeadlineSmall>\n\n        <div style={{ flex: 0.5 }}/>\n      </RowBetween>\n\n      <Body>\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            { venmoStrings.get('NEW_DEPOSIT_INSTRUCTIONS') }\n            <Link href=\"https://docs.zkp2p.xyz/onramp-guides/off-ramping/fetch-your-venmo-id\" target=\"_blank\">\n              Fetch your Venmo ID ↗\n            </Link>\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n        <InputsContainer>\n          <Input\n            label=\"Venmo ID\"\n            name={`venmoId`}\n            value={venmoIdInput}\n            onChange={(e) => {setVenmoIdInput(e.currentTarget.value)}}\n            type=\"number\"\n            placeholder=\"215524379021315184\"\n            helperText={venmoStrings.get('NEW_DEPOSIT_ID_TOOLTIP')}\n          />\n\n          <Input\n            label=\"Deposit Amount\"\n            name={`depositAmount`}\n            value={depositAmountInput}\n            onChange={(e) => handleInputChange(e.currentTarget.value, setDepositAmountInput)}\n            type=\"number\"\n            inputLabel=\"USDC\"\n            placeholder=\"1000\"\n            accessoryLabel={usdcBalanceLabel}\n            helperText={venmoStrings.get('NEW_DEPOSIT_AMOUNT_TOOLTIP')}\n            enableMax={true}\n            maxButtonOnClick={() => {\n              if (usdcBalance) {\n                setDepositAmountInput(toUsdcString(usdcBalance, false));\n              }\n            }}\n          />\n\n          <Input\n            label=\"Receive Amount\"\n            name={`receiveAmount`}\n            value={receiveAmountInput}\n            onChange={(e) => handleInputChange(e.currentTarget.value, setReceiveAmountInput)}\n            type=\"number\"\n            inputLabel=\"USD\"\n            placeholder=\"1050\"\n            accessoryLabel={conversionRateLabel}\n            helperText={venmoStrings.get('NEW_DEPOSIT_RECEIVE_TOOLTIP')}\n          />\n\n          <ButtonContainer>\n            <Button\n              fullWidth={true}\n              disabled={ctaDisabled()}\n              loading={ctaLoading()}\n              onClick={async () => {\n                ctaOnClick();\n              }}>\n              { ctaText() }\n            </Button>\n          </ButtonContainer>\n        </InputsContainer>\n      </Body>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  background-color: ${colors.container};\n  padding: 1.5rem;\n\n  @media (min-width: 600px) {\n    max-width: 552px;\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/Landing/SwapPreview.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\nimport { Input } from \"@components/Swap/Input\";\nimport { AutoColumn } from '@components/layouts/Column';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\n\n\nexport type SwapQuote = {\n  requestedUSDC: string;\n  fiatToSend: string;\n  depositId: bigint;\n};\n\n\nconst SwapPreview: React.FC = () => {\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper>\n      <SwapModalContainer>\n        <TitleContainer>\n          <ThemedText.HeadlineMedium>\n            Swap\n          </ThemedText.HeadlineMedium>\n        </TitleContainer>\n\n        <MainContentWrapper>\n          <Input\n            label=\"Requesting\"\n            name={`requestedUSDC`}\n            value={undefined}\n            onChange={() => {}}\n            type=\"number\"\n            placeholder=\"0\"\n            readOnly\n          />\n          <Input\n            label=\"You send\"\n            name={`fiatToSend`}\n            value={undefined}\n            onChange={() => {}}\n            onKeyDown={() => {}}\n            type=\"number\"\n            inputLabel=\"$\"\n            placeholder=\"0.00\"\n            readOnly\n          />\n        </MainContentWrapper>\n      </SwapModalContainer>\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  margin-top: 50px;\n  flex-direction: column;\n  align-items: center;\n  gap: 1rem;\n\n  &::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    background: linear-gradient(to bottom, rgba(0, 0, 0, 0), #171717FF);\n    pointer-events: none;\n  }\n`;\n\nconst SwapModalContainer = styled(AutoColumn)`\n  border-radius: 16px;\n  border: 1px solid #DEE2E6;\n  padding: 1rem;\n  gap: 1rem;\n  background-color: ${colors.container};\n  border: 1px solid ${colors.defaultBorderColor};\n  box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.25);\n\n  &:hover {\n    border: 1px solid #DF2E2D;\n    transform: translateY(-5px);\n  }\n`;\n\nconst TitleContainer = styled.div`\n  display: flex;\n  margin-left: 0.75rem;\n`;\n\nconst MainContentWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  align-self: center;\n  border-radius: 4px;\n  justify-content: center;\n`;\n\nexport default SwapPreview;\n"
  },
  {
    "path": "client/src/components/Liquidity/DepositsRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { ENSName, AddressDisplayEnum } from 'react-ens-name';\n\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport useSmartContracts from \"@hooks/useSmartContracts\";\nimport { alchemyMainnetEthersProvider } from \"index\";\nimport { PaymentPlatformType, paymentPlatformInfo } from \"@helpers/types\";\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface DepositsRowProps {\n  paymentPlatform: PaymentPlatformType;\n  availableDepositAmount: string;\n  conversionRate: string;\n  conversionCurrency: string;\n  rowIndex: number;\n  depositorAddress: string;\n}\n\nexport const DepositsRow: React.FC<DepositsRowProps> = ({\n  paymentPlatform,\n  availableDepositAmount,\n  conversionRate,\n  conversionCurrency,\n  rowIndex,\n  depositorAddress,\n}: DepositsRowProps) => {\n  DepositsRow.displayName = \"DepositsRow\";\n\n  /*\n   * Context\n   */\n\n  const { blockscanUrl } = useSmartContracts();\n\n  /*\n   * Helpers\n   */\n\n  const depositRemainingLabel = `${availableDepositAmount}`;\n  const depositorEtherscanLink = `${blockscanUrl}/address/${depositorAddress}`;\n  const isMobile = useMediaQuery() === 'mobile';\n  const svgSize = isMobile ? '20' : '28';\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <div style={{ flex: 0.1, fontSize: isMobile ? '12px' : '16px' }}>\n        {rowIndex + 1}\n      </div>\n\n      {!isMobile &&\n        <IconAndTokenNameContainer>\n          <SVGIconThemed icon={'usdc'} width={svgSize} height={svgSize} />\n          USD Coin\n        </IconAndTokenNameContainer>\n      }\n\n      {!isMobile &&\n        <TitleAndValueContainer>\n          <Value>{paymentPlatformInfo[paymentPlatform].platformName}</Value>\n        </TitleAndValueContainer>\n      }\n\n      <TitleAndValueContainer>\n        <Value>\n          <Link href={depositorEtherscanLink} target=\"_blank\">\n            <ENSNameWrapper>\n              <ENSName\n                provider={alchemyMainnetEthersProvider}\n                address={depositorAddress}\n                displayType={AddressDisplayEnum.FIRST6}\n              />\n            </ENSNameWrapper>\n          </Link>\n        </Value>\n      </TitleAndValueContainer>\n\n      <TitleAndValueContainer>\n        <Value>{depositRemainingLabel} USDC</Value>\n      </TitleAndValueContainer>\n\n      <PercentageLabel>\n        <Value>{`${conversionRate} ${conversionCurrency}`}</Value>\n      </PercentageLabel>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  height: 100%;\n  display: grid;\n  grid-template-columns: .1fr 0.75fr 1.1fr 1fr;\n  gap: 8px;\n  flex-direction: row;\n  align-items: center;\n  padding: 1.25rem 1.5rem;\n  justify-content: space-between;\n  text-align: left;\n\n  @media (min-width: 600px) {\n    grid-template-columns: .2fr .9fr .6fr 1.1fr repeat(2, minmax(0,1fr));\n    padding: 1.25rem 1.75rem;\n  }\n`;\n\nconst IconAndTokenNameContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  color: #FFFFFF;\n\n  @media (max-width: 600px) {\n    font-size: 13px;\n  };\n`;\n\nconst TitleAndValueContainer = styled.label`\n  display: flex;\n  font-size: 15px;\n  color: #FFFFFF;\n  align-items: center;\n`;\n\nconst PercentageLabel = styled.div`\n  display: flex;\n`;\n\nconst Value = styled.span`\n  color: #FFFFFF;\n  font-size: 15px;\n\n  @media (max-width: 600px) {\n    font-size: 14px;\n  };\n`;\n\nconst ENSNameWrapper = styled.div`\n  max-width: 144px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n`;\n"
  },
  {
    "path": "client/src/components/Liquidity/DepositsTable.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport { Link } from 'react-feather';\nimport styled, { css } from 'styled-components/macro';\n\nimport { DepositsRow } from \"@components/Liquidity/DepositsRow\";\nimport { PlatformSelector } from '@components/modals/PlatformSelector';\nimport { keccak256 } from '@helpers/keccack';\nimport { CurrencyCode, PaymentPlatformType, PaymentPlatform, DepositWithAvailableLiquidity, paymentPlatformInfo } from '@helpers/types';\nimport { toUsdcString, conversionRateToMultiplierString } from '@helpers/units';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport useMediaQuery from '@hooks/useMediaQuery';\n\nimport useVenmoLiquidity from '@hooks/venmo/useLiquidity';\nimport useHdfcLiquidity from '@hooks/hdfc/useLiquidity';\nimport useGarantiLiquidity from '@hooks/garanti/useLiquidity';\nimport useRevolutLiquidity from '@hooks/revolut/useLiquidity';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\n\n\nconst ROWS_PER_PAGE = 10;\n\nexport interface DepositPrime {\n  platformType: PaymentPlatformType,\n  depositor: string;\n  availableDepositAmount: string;\n  totalDepositAmount: string;\n  conversionRate: string;\n  conversionCurrency: string;\n}\n\nexport const DepositsTable: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  const {\n    depositStore: venmoDepositStore,\n  } = useVenmoLiquidity();\n\n  const {\n    depositStore: hdfcDepositStore,\n  } = useHdfcLiquidity();\n\n  const {\n    depositStore: garantiDepositStore,\n  } = useGarantiLiquidity();\n\n  const {\n    depositStore: revolutDepositStore,\n  } = useRevolutLiquidity();\n\n  const {\n    paymentPlatform,\n    currencyIndex\n  } = usePlatformSettings();\n\n  /*\n   * State\n   */\n\n  const [positionsRowData, setPositionsRowData] = useState<DepositPrime[]>([]);\n\n  const [currentPage, setCurrentPage] = useState(0);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    let depositStoreToDisplay: DepositWithAvailableLiquidity[] = [];\n    let conversionCurrenciesToDisplay: string[] = [];\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        depositStoreToDisplay = venmoDepositStore ?? [];\n        conversionCurrenciesToDisplay = depositStoreToDisplay.map(() => CurrencyCode.USD)\n        break;\n\n      case PaymentPlatform.HDFC:\n        depositStoreToDisplay = hdfcDepositStore ?? [];\n        conversionCurrenciesToDisplay = depositStoreToDisplay.map(() => CurrencyCode.INR)\n        break;\n\n      case PaymentPlatform.GARANTI:\n        depositStoreToDisplay = garantiDepositStore ?? [];\n        conversionCurrenciesToDisplay = depositStoreToDisplay.map(() => CurrencyCode.TRY)\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        depositStoreToDisplay = revolutDepositStore ?? [];\n        conversionCurrenciesToDisplay = depositStoreToDisplay.map(depositToDisplay => (\n          paymentPlatformInfo[PaymentPlatform.REVOLUT].platformCurrencies.find(\n            currency => keccak256(currency) === depositToDisplay.deposit.receiveCurrencyId\n          ) ?? CurrencyCode.EUR\n        ))\n        break;\n\n      default:\n        break;\n    }\n\n    if (depositStoreToDisplay.length === 0) {\n      setPositionsRowData([]);  \n    } else {\n      var sanitizedDeposits: DepositPrime[] = [];\n      sanitizedDeposits = depositStoreToDisplay.map((depositWithLiquidity: DepositWithAvailableLiquidity, index: number) => {\n        const deposit = depositWithLiquidity.deposit\n        const platformType = deposit.platformType\n        const depositor = deposit.depositor;\n        const availableDepositAmount = toUsdcString(depositWithLiquidity.availableLiquidity, true);\n        const totalDepositAmount = toUsdcString(deposit.depositAmount, true);\n        const conversionRate = conversionRateToMultiplierString(deposit.conversionRate);\n        const conversionCurrency = conversionCurrenciesToDisplay[index];\n\n        return {\n          depositor,\n          platformType,\n          availableDepositAmount,\n          totalDepositAmount,\n          conversionRate,\n          conversionCurrency,\n        };\n      });\n\n      setPositionsRowData(sanitizedDeposits);\n    }\n  }, [\n    venmoDepositStore,\n    hdfcDepositStore,\n    garantiDepositStore,\n    paymentPlatform,\n    currencyIndex,\n    revolutDepositStore\n  ]);\n\n  useEffect(() => {\n    setCurrentPage(0);\n  }, [positionsRowData.length]);\n\n  /*\n   * Handlers\n   */\n\n  const handleChangePage = (newPage: number) => {\n    setCurrentPage(newPage);\n  };\n\n  /*\n   * Helpers\n   */\n\n  const totalPages = Math.ceil(positionsRowData.length / ROWS_PER_PAGE);\n\n  const paginatedData = positionsRowData.slice(currentPage * ROWS_PER_PAGE, (currentPage + 1) * ROWS_PER_PAGE);\n  \n  /*\n   * Component\n   */\n\n  return (\n    <>\n      <TitleRow>\n        <ThemedText.HeadlineMedium>\n          Liquidity\n        </ThemedText.HeadlineMedium>\n        \n        <PlatformSelector usePillSelector={true}/>\n      </TitleRow>\n\n      <Content>\n        {positionsRowData.length === 0 ? (\n          <ErrorContainer>\n            <ThemedText.DeprecatedBody textAlign=\"center\">\n              <ChainLinkIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n              <div>\n                Fetching all active deposits.\n              </div>\n            </ThemedText.DeprecatedBody>\n          </ErrorContainer>\n        ) : (\n          <TableContainer>\n            <TableHeaderRow>\n              <ColumnHeader>#</ColumnHeader>\n\n              {currentDeviceSize === 'tablet' || currentDeviceSize === 'laptop' ? (\n                <ColumnHeader>Token</ColumnHeader>\n              ) : null}\n\n              {currentDeviceSize === 'tablet' || currentDeviceSize === 'laptop' ? (\n                <ColumnHeader>Platform</ColumnHeader>\n              ) : null}\n\n              <ColumnHeader>Depositor</ColumnHeader>\n\n              <ColumnHeader>Available Amount</ColumnHeader>\n\n              <ColumnHeader>Conversion Rate</ColumnHeader>\n            </TableHeaderRow>\n            <Table>\n              {paginatedData.map((positionRow, rowIndex) => (\n                <PositionRowStyled key={rowIndex}>\n                  <DepositsRow\n                    paymentPlatform={positionRow.platformType}\n                    availableDepositAmount={positionRow.availableDepositAmount}\n                    conversionRate={positionRow.conversionRate}\n                    conversionCurrency={positionRow.conversionCurrency}\n                    depositorAddress={positionRow.depositor}\n                    rowIndex={rowIndex}\n                  />\n                </PositionRowStyled>\n              ))}\n            </Table>\n          </TableContainer>\n        )}\n      </Content>\n\n      {positionsRowData.length > ROWS_PER_PAGE && (\n        <PaginationContainer>\n          <PaginationButton disabled={currentPage === 0} onClick={() => handleChangePage(currentPage - 1)}>\n            &#8249;\n          </PaginationButton>\n          <PageInfo>\n            {totalPages === 0 ? '0 of 0' : `${currentPage + 1} of ${totalPages}`}\n          </PageInfo>\n          <PaginationButton\n            disabled={currentPage === totalPages - 1 || totalPages === 0}\n            onClick={() => handleChangePage(currentPage + 1)}>  \n            &#8250;\n          </PaginationButton>\n        </PaginationContainer>\n      )}\n    </>\n  )\n};\n\nconst TitleRow = styled.div`\n  display: flex;\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  justify-content: space-between;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    padding: 0 1.75rem;\n  }\n`;\n\nconst Content = styled.main`\n  background-color: ${colors.container};\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n\n  @media (min-width: 600px) {\n    border: 1px solid ${colors.defaultBorderColor};\n    border-radius: 16px;\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst ChainLinkIcon = styled(Link)`\n  ${IconStyle}\n`;\n\nconst TableContainer = styled.div`\n  display: block;\n`;\n\nconst TableHeaderRow = styled.div`\n  display: grid;\n  grid-template-columns: .1fr 0.75fr 1.1fr 1fr;\n  padding: 1.3rem 1.5rem 1rem 1.5rem;\n  gap: 8px;\n  text-align: left;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n\n  @media (min-width: 600px) {\n    grid-template-columns: .2fr .9fr .6fr 1.1fr repeat(2, minmax(0,1fr));\n    padding: 1.3rem 1.75rem 1rem 1.75rem;\n  }\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  border-radius: 8px;\n  border-top-left-radius: 16px;\n  border-top-right-radius: 16px;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  font-size: 16px;\n  color: #616161;\n\n  @media (max-width: 600px) {\n    font-size: 12px;\n  };\n\n  & > * {\n    border-bottom: 1px solid ${colors.defaultBorderColor};\n  }\n\n  & > *:last-child {\n    border-bottom: none;\n  }\n`;\n\n\nconst ColumnHeader = styled.div`\n  text-align: left;\n  font-size: 14px;\n  opacity: 0.7;\n  \n  @media (max-width: 600px) {\n    font-size: 13px;\n  };\n`;\n\nconst PaginationContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: 16px;\n`;\n\nconst PaginationButton = styled.button`\n  background-color: rgba(0, 0, 0, 0.5);\n  color: white;\n  padding: 8px 16px;\n  margin: 0 16px;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  transition: background-color 0.3s;\n\n  &:hover {\n    background-color: rgba(0, 0, 0, 0.8);\n  }\n\n  &:disabled {\n    background-color: rgba(0, 0, 0, 0.2);\n    cursor: not-allowed;\n  }\n`;\n\nconst PageInfo = styled.span`\n  color: rgba(255, 255, 255, 0.8);\n  word-spacing: 2px;\n  font-size: 16px;\n`;\n\nconst PositionRowStyled = styled.div`\n  &:last-child {\n    border-bottom-left-radius: 16px;\n    border-bottom-right-radius: 16px;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/Liquidity/index.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from 'styled-components/macro';\n\nimport { AutoColumn } from '@components/layouts/Column';\nimport { DepositsTable } from '@components/Liquidity/DepositsTable';\nimport { DEPOSIT_REFETCH_INTERVAL } from '@helpers/constants';\nimport useVenmoLiquidity from '@hooks/venmo/useLiquidity';\nimport useVenmoRampState from '@hooks/venmo/useRampState';\nimport useHdfcRampState from '@hooks/hdfc/useRampState';\nimport useHdfcLiquidity from '@hooks/hdfc/useLiquidity';\nimport useGarantiRampState from '@hooks/garanti/useRampState';\nimport useGarantiLiquidity from '@hooks/garanti/useLiquidity';\nimport useRevolutRampState from '@hooks/revolut/useRampState';\nimport useRevolutLiquidity from '@hooks/revolut/useLiquidity';\n\n\nexport default function Deposit() {\n  /*\n   * Contexts\n   */\n\n  const {\n    refetchDepositCounter: refetchVenmoDepositCounter,\n    shouldFetchRampState: shouldFetchVenmoRampState\n  } = useVenmoRampState();\n  const {\n    refetchDeposits: refetchVenmoDeposits,\n    shouldFetchDeposits: shouldFetchVenmoDeposits\n  } = useVenmoLiquidity();\n\n  const {\n    refetchDepositCounter: refetchHdfcDepositCounter,\n    shouldFetchRampState: shouldFetchHdfcRampState\n  } = useHdfcRampState();\n  const {\n    refetchDeposits: refetchHdfcDeposits,\n    shouldFetchDeposits: shouldFetchHdfcDeposits\n  } = useHdfcLiquidity();\n\n  const {\n    refetchDepositCounter: refetchGarantiDepositCounter,\n    shouldFetchRampState: shouldFetchGarantiRampState\n  } = useGarantiRampState();\n  const {\n    refetchDeposits: refetchGarantiDeposits,\n    shouldFetchDeposits: shouldFetchGarantiDeposits\n  } = useGarantiLiquidity();\n\n  const {\n    refetchDepositCounter: refetchRevolutDepositCounter,\n    shouldFetchRampState: shouldFetchRevolutRampState\n  } = useRevolutRampState();\n  const {\n    refetchDeposits: refetchRevolutDeposits,\n    shouldFetchDeposits: shouldFetchRevolutDeposits\n  } = useRevolutLiquidity();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchVenmoDeposits) {\n      const intervalId = setInterval(() => {\n        refetchVenmoDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchVenmoDeposits, refetchVenmoDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchVenmoRampState) {\n      const intervalId = setInterval(() => {\n        refetchVenmoDepositCounter?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchVenmoRampState, refetchVenmoDepositCounter]);\n\n  useEffect(() => {\n    if (shouldFetchHdfcDeposits) {\n      const intervalId = setInterval(() => {\n        refetchHdfcDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchHdfcDeposits, refetchHdfcDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchHdfcRampState) {\n      const intervalId = setInterval(() => {\n        refetchHdfcDepositCounter?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchHdfcRampState, refetchHdfcDepositCounter]);\n\n  useEffect(() => {\n    if (shouldFetchGarantiDeposits) {\n      const intervalId = setInterval(() => {\n        refetchGarantiDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchGarantiDeposits, refetchGarantiDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchGarantiRampState) {\n      const intervalId = setInterval(() => {\n        refetchGarantiDepositCounter?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchGarantiRampState, refetchGarantiDepositCounter]);\n\n  useEffect(() => {\n    if (shouldFetchRevolutDeposits) {\n      const intervalId = setInterval(() => {\n        refetchRevolutDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchRevolutDeposits, refetchRevolutDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchRevolutRampState) {\n      const intervalId = setInterval(() => {\n        refetchRevolutDepositCounter?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchRevolutRampState, refetchRevolutDepositCounter]);\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper>\n      <DepositsTable/>\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled(AutoColumn)`\n  max-width: 920px;\n  width: 100%;\n`;\n"
  },
  {
    "path": "client/src/components/MobileLandingPage.tsx",
    "content": "import React from 'react';\nimport styled from \"styled-components\";\n\nimport { Overlay } from '@components/modals/Overlay';\nimport { Button } from '@components/common/Button';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Z_INDEX } from '@theme/zIndex';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\n\n\nexport const MobileLandingPage: React.FC = () => {\n  /*\n   * Context\n   */\n\n  const {\n    PaymentPlatform,\n    setPaymentPlatform,\n  } = usePlatformSettings();\n\n  /*\n   * Helpers\n   */\n\n  const handleResetPlatform = () => {\n    setPaymentPlatform?.(PaymentPlatform.VENMO);\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <Overlay onClick={() => {}} />\n\n      <ModalContainer>\n        <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n          Sorry!\n        </ThemedText.HeadlineSmall>\n\n        <ThemedText.SubHeader style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n          ZKP2P does not support Revolut on mobile. Please proceed on desktop to create or complete an order on Revolut.\n        </ThemedText.SubHeader>\n\n        <Button\n          onClick={handleResetPlatform}\n          fullWidth={true}\n        >\n          Go back\n        </Button>\n      </ModalContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 65%;\n  max-width: 360px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 2rem;\n  background-color: ${colors.container};\n  align-items: center;\n  gap: 1.5rem;\n  justify-content: center;\n  position: absolute;\n  top: 200px;\n  z-index: ${Z_INDEX.mobile_landing_page};\n`;\n"
  },
  {
    "path": "client/src/components/Notary/NotarizationRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components/macro';\n\nimport { colors } from '@theme/colors';\n\n\ninterface NotarizationRowProps {\n  subjectText: string;\n  dateText: string;\n  isSelected: boolean;\n  isLastRow: boolean;\n  onRowClick: () => void;\n  rowIndex: number;\n}\n\nexport const NotarizationRow: React.FC<NotarizationRowProps> = ({\n  subjectText,\n  dateText,\n  isSelected,\n  isLastRow,\n  onRowClick,\n  rowIndex\n}: NotarizationRowProps) => {\n  NotarizationRow.displayName = \"NotarizationRow\";\n\n  const subjectLabel = `${subjectText}`;\n  const dateLabel = `${dateText}`;\n\n  return (\n    <Container\n      onClick={onRowClick}\n      selected={isSelected}\n      isLastRow={isLastRow}\n    >\n      <IndexLabel> {rowIndex} </IndexLabel>\n      <SubjectLabel> {subjectLabel} </SubjectLabel>\n      <DateLabel> {dateLabel} </DateLabel>\n    </Container>\n  );\n};\n\nconst Container = styled.div<{ selected: boolean; isLastRow: boolean}>`\n  display: grid;\n  grid-template-columns: 0.2fr 1fr 0.2fr;\n  grid-gap: 1px;\n  padding: 1.5rem 1.5rem 1.25rem 1.5rem;\n  font-size: 14px;\n  color: #FFFFFF;\n  border-radius: ${({ isLastRow }) => isLastRow ? \"0 0 8px 8px\" : \"0\"};\n  border-bottom: ${({ isLastRow }) => !isLastRow && `1px solid ${colors.defaultBorderColor}`};\n\n  ${({ selected }) => selected && `\n    background-color: #191D28;\n    box-shadow: none;\n  `}\n\n  ${({ selected, isLastRow }) => !selected && `\n    &:hover {\n      background-color: #191D28;\n      border-radius: ${isLastRow ? \"0 0 8px 8px\" : \"0\"};\n      box-shadow: none;\n    }\n  `}\n`;\n\nconst IndexLabel = styled.label`\n  text-align: left;\n`;\n\nconst SubjectLabel = styled.label`\n  text-align: left;\n`;\n\nconst DateLabel = styled.label`\n  text-align: right;\n`;\n"
  },
  {
    "path": "client/src/components/Notary/NotarizationTable.tsx",
    "content": "import React, { useEffect, useMemo, useState } from 'react';\nimport styled, { css } from 'styled-components/macro';\nimport { AlertTriangle, Sidebar, UserX, UserCheck, CheckCircle, Slash, Circle, WifiOff } from 'react-feather';\nimport Link from '@mui/material/Link';\nimport { browserName } from 'react-device-detect';\n\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Button } from '@components/common/Button';\nimport { AccessoryButton } from '@components/common/AccessoryButton';\nimport { NotarizationRow } from '@components/Notary/NotarizationRow';\nimport QuestionHelper from '@components/common/QuestionHelper';\nimport { ExtensionNotaryProofRequest } from '@hooks/useBrowserExtension';\nimport {\n  NotaryProofInputStatus,\n  NotaryVerificationCircuitType,\n  NotaryVerificationCircuit,\n  PaymentPlatformType,\n  NotaryConnectionStatusType,\n  NotaryConnectionStatus\n} from '@helpers/types';\nimport { EXTENSION_DOCS_URL } from '@helpers/docUrls';\nimport { commonStrings, platformStrings } from \"@helpers/strings\";\nimport useExtensionNotarizations from '@hooks/useExtensionNotarizations';\nimport useOnramperIntents from '@hooks/revolut/useOnRamperIntents';\nimport useNotarySettings from '@hooks/useNotarySettings';\n\nimport chromeSvg from '../../assets/images/browsers/chrome.svg';\nimport braveSvg from '../../assets/images/browsers/brave.svg';\n\n\nconst ROWS_PER_PAGE = 3;\nconst NOTARY_PROOF_FETCH_INTERVAL = 5000;\nconst CHROME_EXTENSION_URL = 'https://chromewebstore.google.com/detail/zkp2p-extension/ijpgccednehjpeclfcllnjjcmiohdjih';\n\n\ntype ExtensionNotaryProofRow = {\n  proof: string;\n  metadata: string;\n  subject: string;\n  date: string;\n};\n\ninterface NotarizationTableProps {\n  paymentPlatform: PaymentPlatformType;\n  circuitType: NotaryVerificationCircuitType;\n  setNotaryProof: (notarization: string) => void;\n  setNotaryProofMetadata: (metadata: string) => void;\n  handleVerifyNotaryProofClicked: () => void;\n  notaryProofSelectionStatus: string;\n  isProofModalOpen: boolean;\n};\n\nexport const NotarizationTable: React.FC<NotarizationTableProps> = ({\n  paymentPlatform,\n  circuitType,\n  setNotaryProof,\n  setNotaryProofMetadata,\n  handleVerifyNotaryProofClicked,\n  notaryProofSelectionStatus,\n  isProofModalOpen\n}) => {\n  /*\n   * Context\n   */\n\n  const {\n    openSidebarRegistration,\n    openSidebarOnramp,\n    refetchExtensionVersion,\n    refetchProfileRequests,\n    refetchTransferRequests,\n    isSidebarInstalled,\n    profileProofs,\n    transferProofs\n  } = useExtensionNotarizations();\n\n  const { currentIntent } = useOnramperIntents();\n\n  const {\n    connectionStatus\n  } = useNotarySettings();\n\n  /*\n   * State\n   */\n\n  const [isNotSupportedBrowser, setIsNotSupportedBrowser] = useState<boolean>(false);\n\n  const [loadedNotaryProofs, setLoadedNotaryProofs] = useState<ExtensionNotaryProofRow[]>([]);\n\n  const [selectedIndex, setSelectedIndex] = useState<number | null>(null);\n\n  const [ctaButtonTitle, setCtaButtonTitle] = useState<string>(\"\");\n\n  const [isShowingTable, setIsShowingTable] = useState<boolean>(false);\n\n  const [didPressProceed, setDidPressProceed] = useState<boolean>(false);\n  \n  const [isInstallExtensionClicked, setIsInstallExtensionClicked] = useState<boolean>(false);\n  \n  const [currentPage, setCurrentPage] = useState(0);\n\n  const totalPages = Math.ceil(loadedNotaryProofs.length / ROWS_PER_PAGE);\n  const paginatedData = loadedNotaryProofs.slice(currentPage * ROWS_PER_PAGE, (currentPage + 1) * ROWS_PER_PAGE);\n\n  /*\n   * Handlers\n   */\n\n  const handleJoinTelegramClicked = () => {\n    window.open('https://t.me/+XDj9FNnW-xs5ODNl', '_blank');\n  };\n\n  const handleOpenSidebarPressed = () => {\n    switch (circuitType) {\n      case NotaryVerificationCircuit.REGISTRATION_TAG:\n        openSidebarRegistration();\n        break;\n\n      case NotaryVerificationCircuit.TRANSFER:\n        openSidebarOnramp();\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  const handleProceedPressed = () => {\n    setDidPressProceed(true);\n  };\n\n  const handleInstallExtensionClicked = () => {\n    window.open(CHROME_EXTENSION_URL, '_blank');\n    setIsInstallExtensionClicked(true)\n  };\n\n  const handleRowClick = (index: number) => {\n    const globalIndex = index + currentPage * ROWS_PER_PAGE;\n    setSelectedIndex(globalIndex);\n  };\n\n  const handleToggleNotarizationTablePressed = () => {\n    setIsShowingTable(!isShowingTable);\n  };\n\n  const handleChangePage = (newPage: number) => {\n    setCurrentPage(newPage);\n  };\n\n  /*\n   * Helpers\n   */\n\n  const tableTitleLabelForCircuitType = () => {\n    switch (circuitType) {\n      case NotaryVerificationCircuit.REGISTRATION_TAG:\n        return 'Registration Proofs';\n\n      case NotaryVerificationCircuit.TRANSFER:\n        return 'Payment Proofs';\n\n      default:\n        return '';\n    }\n  };\n\n  function parseTimestamp(timestamp: string): string {\n    const date = new Date(timestamp);\n    const now = new Date();\n\n    const isToday = date.getDate() === now.getDate() &&\n                    date.getMonth() === now.getMonth() &&\n                    date.getFullYear() === now.getFullYear();\n\n    if (isToday) {\n      return 'at ' + date.toLocaleTimeString('en-US', {\n        hour: 'numeric',\n        minute: '2-digit',\n        hour12: true\n      });\n    } else {\n      return 'on ' + date.toLocaleDateString('en-US', {\n        month: 'numeric',\n        day: 'numeric'\n      });\n    }\n  };\n\n  const detectedNotarizationCopy = useMemo(() => {\n    if (selectedIndex !== null && loadedNotaryProofs[selectedIndex]) {\n      const selectedRequest: ExtensionNotaryProofRow = loadedNotaryProofs[selectedIndex];\n      \n      switch (circuitType) {\n        case NotaryVerificationCircuit.REGISTRATION_TAG:\n          return {\n            detected_copy: 'Proof detected from your browser assistant for account with Revtag',\n            metadata_copy: selectedRequest.metadata,\n            metadata_type_copy: 'tag',\n            transaction_type_copy: 'registration'\n          };\n  \n        case NotaryVerificationCircuit.TRANSFER:\n          return {\n            detected_copy: 'Proof detected from your browser assistant for the following payment',\n            metadata_copy: `${selectedRequest.subject} ${selectedRequest.date}`, // Hacky, timestamp parsing handles article in front of date \"at\" or \"on\"\n            metadata_type_copy: 'transaction',\n            transaction_type_copy: 'order'\n          };\n  \n        default:\n          return {\n            detected_copy: '',\n            metadata_copy: '',\n            metadata_type_copy: '',\n            transaction_type_copy: ''\n          };\n      }\n    } else {\n      return {\n        detected_copy: '',\n        metadata_copy: '',\n        metadata_type_copy: '',\n        transaction_type_copy: ''\n      };\n    }\n  }, [circuitType, loadedNotaryProofs, selectedIndex]);\n\n  const notarizationContainerSettings = useMemo(() => {\n    switch (circuitType) {\n      case NotaryVerificationCircuit.REGISTRATION_TAG:\n        return {\n          proofFoundIcon: <StyledUserCheck />,\n          errorIcon: <StyledUserX />,\n          errorText: platformStrings.getForPlatform(paymentPlatform, 'NO_NOTARIZATIONS_ERROR')\n        };\n\n      case NotaryVerificationCircuit.TRANSFER:\n        return {\n          proofFoundIcon: <StyledCheckCircle />,\n          errorIcon: <StyledSlash />,\n          errorText: platformStrings.getForPlatform(paymentPlatform, 'NO_TRANSFER_NOTARIZATIONS_ERROR')\n        };\n\n      default:\n        return {\n          proofFoundIcon: <StyledCheckCircle />,\n          errorIcon: <StyledSlash />,\n          errorText: ''\n        };\n    }\n  }, [circuitType, paymentPlatform]);\n\n  const shouldShowConnectionWarning = () => {\n    const isConnectionStatusPoor = connectionStatus !== NotaryConnectionStatus.GREEN;\n    const userHasNotPressedProceed = !didPressProceed;\n    const userDoesNotHaveValidProof = selectedIndex === null;\n\n    return userDoesNotHaveValidProof && isConnectionStatusPoor && userHasNotPressedProceed;\n  };\n\n  const notarizationToggleCta = () => {\n    if (isShowingTable) {\n      return 'Go back';\n    } else {\n      return 'See all proofs';\n    }\n  };\n\n  const browserSvg = () => {\n    switch (browserName) {\n      case 'Brave':\n        return braveSvg;\n\n      case 'Chrome':\n      default:\n        return chromeSvg;\n    }\n  };\n\n  const addToBrowserCopy = () => {\n    switch (browserName) {\n      case 'Brave':\n        return 'Add to Brave';\n\n      case 'Chrome':\n        return 'Add to Chrome';\n\n      default:\n        return 'Add to browser';\n    }\n  };\n\n  async function fetchData() {\n    switch (circuitType) {\n      case NotaryVerificationCircuit.REGISTRATION_TAG:\n        refetchProfileRequests();\n        break;\n\n      case NotaryVerificationCircuit.TRANSFER:\n        refetchTransferRequests();\n        break;\n\n      default:\n        break;\n    }\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (loadedNotaryProofs.length > 0 && selectedIndex !== null) {\n      const selectedNotarization = loadedNotaryProofs[selectedIndex];\n\n      setNotaryProof(selectedNotarization.proof);\n      setNotaryProofMetadata(selectedNotarization.metadata);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [loadedNotaryProofs, selectedIndex]);\n\n  useEffect(() => {\n    const supportedBrowsers = ['Chrome', 'Brave'];\n    setIsNotSupportedBrowser(supportedBrowsers.indexOf(browserName) === -1);\n\n    // Moot to run this on an interval because the content script needs to be injected\n    refetchExtensionVersion();\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (!isSidebarInstalled) {\n      return;\n    }\n  \n    let intervalId: NodeJS.Timeout | null = null;\n  \n    const setupInterval = (callback: () => void) => {\n      callback();\n  \n      if (intervalId) {\n        clearInterval(intervalId);\n      };\n      \n      intervalId = setInterval(callback, NOTARY_PROOF_FETCH_INTERVAL);\n    };\n  \n    switch (circuitType) {\n      case NotaryVerificationCircuit.REGISTRATION_TAG:\n        setupInterval(refetchProfileRequests);\n        break;\n  \n      case NotaryVerificationCircuit.TRANSFER:\n        setupInterval(refetchTransferRequests);\n        break;\n  \n      default:\n        break;\n    }\n  \n    return () => {\n      if (intervalId) clearInterval(intervalId);\n    };\n  \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [circuitType, isSidebarInstalled]);\n  \n  useEffect(() => {\n    if (!isInstallExtensionClicked) {\n      return;\n    }\n  \n    let intervalId: NodeJS.Timeout | null = null;\n  \n    const setupInterval = (callback: () => void) => {\n      callback();\n  \n      if (intervalId) {\n        clearInterval(intervalId);\n      };\n      \n      intervalId = setInterval(callback, NOTARY_PROOF_FETCH_INTERVAL);\n    };\n  \n    if (!isSidebarInstalled) {\n      setupInterval(refetchExtensionVersion);\n    }\n  \n    return () => {\n      if (intervalId) clearInterval(intervalId);\n    };\n  \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [circuitType, isInstallExtensionClicked, isSidebarInstalled]);\n\n  useEffect(() => {\n    switch (circuitType) {\n      case NotaryVerificationCircuit.REGISTRATION_TAG:\n        let defaultDepositorProof: (ExtensionNotaryProofRow | null) = null;\n\n        let allAccountProofRows = defaultDepositorProof ? [defaultDepositorProof] : [];\n        if (profileProofs && profileProofs.length > 0) {\n          const fetchedProfileProofRows = profileProofs.map((request: ExtensionNotaryProofRequest) => {\n            const revTag = request.metadata[1];\n            const subject = `Proof for Revtag: ${revTag}`;\n\n            return {\n              proof: JSON.stringify(request.proof),\n              subject: subject,\n              metadata: revTag,\n              date: parseTimestamp(request.metadata[0])\n            } as ExtensionNotaryProofRow;\n          });\n    \n          setLoadedNotaryProofs(fetchedProfileProofRows.concat(allAccountProofRows));\n        } else {\n          setLoadedNotaryProofs(allAccountProofRows);\n        }\n        break;\n\n      case NotaryVerificationCircuit.TRANSFER:\n        if (transferProofs && transferProofs.length > 0 && currentIntent) {\n\n          // Filter transfer proofs for payment timestamps after intent if intent exists\n          const filteredTransferProofs = transferProofs.filter((request: ExtensionNotaryProofRequest) => {\n            const [ , , , , paymentTimestamp] = request.metadata;\n\n            const paymentTimestampAdjusted = BigInt(paymentTimestamp) / 1000n;\n            const intentTimestamp = BigInt(currentIntent.intent.timestamp);\n\n            return paymentTimestampAdjusted >= intentTimestamp;\n          });\n\n          const transferProofRows = filteredTransferProofs.map((request: ExtensionNotaryProofRequest) => {\n            const [timestamp, amount, currency] = request.metadata;\n\n            const formattedAmount = (Math.abs(amount) / 100).toFixed(2);\n            const subject = `Proof for payment: ${formattedAmount} ${currency}`;\n\n            return {\n              proof: JSON.stringify(request.proof),\n              subject: subject,\n              metadata: formattedAmount,\n              date: parseTimestamp(timestamp)\n            } as ExtensionNotaryProofRow;\n          });\n    \n          setLoadedNotaryProofs(transferProofRows);\n        } else {\n          setLoadedNotaryProofs([]);\n        }\n        break;\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [circuitType, profileProofs, transferProofs, currentIntent]);\n\n  useEffect(() => {\n    if (loadedNotaryProofs.length > 0) {\n      if (selectedIndex === null) {\n\n        setSelectedIndex(0);\n      }\n    } else {\n      setSelectedIndex(null);\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [loadedNotaryProofs]);\n\n  useEffect(() => {\n    const notarizationMetadataCTA = defaultCTAForInputStatus();\n\n    switch (notaryProofSelectionStatus) {\n      case NotaryProofInputStatus.DEFAULT:\n        setCtaButtonTitle(`Select ${notarizationMetadataCTA}`);\n        break;\n\n      case NotaryProofInputStatus.VALID:\n      default:\n        if (!isProofModalOpen) {\n          setCtaButtonTitle(`Verify ${notarizationMetadataCTA}`);\n        } else {\n          setCtaButtonTitle(`Verifying ${notarizationMetadataCTA}`);\n        }\n        break;\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [notaryProofSelectionStatus, paymentPlatform, isProofModalOpen]);\n\n  const defaultCTAForInputStatus = () => {\n    switch (circuitType) {\n      case NotaryVerificationCircuit.REGISTRATION_TAG:\n        return 'Account';\n\n      case NotaryVerificationCircuit.TRANSFER:\n        return 'Payment';\n\n      default:\n        throw new Error('Invalid circuit type');\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      {isNotSupportedBrowser ? (\n        <UnsupportedBrowserContainer>\n          <IconAndCopyContainer>\n            <StyledAlertTriangle />\n\n            <ThemedText.DeprecatedBody textAlign=\"center\">\n              <div>\n                { commonStrings.get('BROWSER_NOT_SUPPORTED_INSTRUCTIONS') }\n                <Link\n                  href={EXTENSION_DOCS_URL}\n                  target=\"_blank\"\n                >\n                  Learn More ↗\n                </Link>\n              </div>\n            </ThemedText.DeprecatedBody>\n          </IconAndCopyContainer>\n\n          <Button\n            onClick={handleJoinTelegramClicked}\n            width={216}\n          >\n            Join our Telegram\n          </Button>\n        </UnsupportedBrowserContainer>\n      ) : (\n        !isSidebarInstalled ? (\n          <InstallExtensionContainer>\n            <IconAndCopyContainer>\n              <SidebarIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <div>\n                  { commonStrings.get('EXTENSION_DOWNLOAD_INSTRUCTIONS') }\n                  <Link\n                    href={EXTENSION_DOCS_URL}\n                    target=\"_blank\"\n                  >\n                    Learn More ↗\n                  </Link>\n                </div>\n              </ThemedText.DeprecatedBody>\n            </IconAndCopyContainer>\n\n            <Button\n              onClick={handleInstallExtensionClicked}\n              height={48}\n              width={216}\n              leftAccessorySvg={browserSvg()}\n              loading={isInstallExtensionClicked}\n              disabled={isInstallExtensionClicked}\n            >\n              { addToBrowserCopy() }\n            </Button>\n\n            { isInstallExtensionClicked && (\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Waiting for installation...\n              </ThemedText.LabelSmall>\n            )}\n          </InstallExtensionContainer>\n        ) : (\n          <ExtensionDetectedContainer>\n            <NotaryTableTitleContainer>\n              {tableTitleLabelForCircuitType()}\n              <ConnectionTitleContainer>\n                <ConnectionAndTooltip>\n                  Connection\n                  {connectionStatus !== NotaryConnectionStatus.GREEN ? (\n                    <QuestionHelper\n                      text={commonStrings.get('NOTARY_CONNECTION_TOOLTIP')}/>\n                    ) : null}\n                </ConnectionAndTooltip>\n\n                <StyledCircle\n                  connection={connectionStatus}/>\n              </ConnectionTitleContainer>\n            </NotaryTableTitleContainer>\n\n            {isShowingTable ? (\n              <TitleAndTableContainer>\n                <TitleAndOAuthContainer>\n                  <NotarizationsTitleContainer>\n                    <TitleLabel>Browser Assistant</TitleLabel>\n                  </NotarizationsTitleContainer>\n\n                  <AccessoryButton\n                    onClick={fetchData}\n                    height={36}\n                    title={'Refresh'}\n                    icon={'refresh'}\n                  />\n                </TitleAndOAuthContainer>\n\n                {loadedNotaryProofs.length === 0 ? (\n                  <EmptyNotarizationsContainer>\n                    { notarizationContainerSettings.errorIcon }\n\n                    <ThemedText.SubHeaderSmall textAlign=\"center\" lineHeight={1.3}>\n                      { notarizationContainerSettings.errorText }\n                    </ThemedText.SubHeaderSmall>\n                  </EmptyNotarizationsContainer>\n                ) : (\n                  <Table>\n                    {paginatedData.map((notarization, index) => (\n                      <NotarizationRow\n                        key={index}\n                        subjectText={notarization.subject}\n                        dateText={notarization.date}\n                        isSelected={selectedIndex === (index + currentPage * ROWS_PER_PAGE)}\n                        onRowClick={() => handleRowClick(index)}\n                        rowIndex={index + 1 + currentPage * ROWS_PER_PAGE}\n                        isLastRow={index === paginatedData.length - 1 && paginatedData.length < ROWS_PER_PAGE}\n                      />\n                    ))}\n                  </Table>\n                )}\n\n                {loadedNotaryProofs.length > ROWS_PER_PAGE && (\n                  <PaginationContainer>\n                    <PaginationButton disabled={currentPage === 0} onClick={() => handleChangePage(currentPage - 1)}>\n                      &#8249;\n                    </PaginationButton>\n                    <PageInfo>\n                      {totalPages === 0 ? '0 of 0' : `${currentPage + 1} of ${totalPages}`}\n                    </PageInfo>\n                    <PaginationButton\n                      disabled={currentPage === totalPages - 1 || totalPages === 0}\n                      onClick={() => handleChangePage(currentPage + 1)}>  \n                      &#8250;\n                    </PaginationButton>\n                  </PaginationContainer>\n                )}\n              </TitleAndTableContainer>\n            ) : (\n              selectedIndex !== null ? (\n                <IconAndMessageContainer>\n                  <TagDetectionIconAndCopyContainer>\n                    { notarizationContainerSettings.proofFoundIcon }\n\n                    <ThemedText.SubHeaderSmall textAlign=\"center\" lineHeight={1.3}>\n                      {detectedNotarizationCopy.detected_copy}:&nbsp;<strong>{detectedNotarizationCopy.metadata_copy}</strong>. \n                      Verify and submit this {detectedNotarizationCopy.metadata_type_copy} to complete {detectedNotarizationCopy.transaction_type_copy}\n                    </ThemedText.SubHeaderSmall>\n                  </TagDetectionIconAndCopyContainer>\n                </IconAndMessageContainer>\n              ) : (\n                shouldShowConnectionWarning() ? (\n                  <IconAndMessageContainer>\n                    <EmptyNotarizationsContainer>\n                      <StyledWifiOff />\n        \n                      <ThemedText.SubHeaderSmall textAlign=\"center\" lineHeight={1.3}>\n                        { \"Your internet connection may be too slow to successfully complete the verification process.\" }\n                      </ThemedText.SubHeaderSmall>\n                    </EmptyNotarizationsContainer>\n                  </IconAndMessageContainer>\n                ) : (\n                  <IconAndMessageContainer>\n                    <TagDetectionIconAndCopyContainer>\n                      { notarizationContainerSettings.errorIcon }\n      \n                      <ThemedText.SubHeaderSmall textAlign=\"center\" lineHeight={1.3}>\n                        { notarizationContainerSettings.errorText }\n                      </ThemedText.SubHeaderSmall>\n                    </TagDetectionIconAndCopyContainer>\n                  </IconAndMessageContainer>\n                )\n              )\n            )}\n\n            {shouldShowConnectionWarning() ? (\n              <ButtonContainer>\n                <Button\n                  onClick={handleProceedPressed}\n                >\n                  {'Proceed Anyway'}\n                </Button>\n              </ButtonContainer>\n            ) : (\n              loadedNotaryProofs.length === 0 ? (\n                <ButtonContainer>\n                  <Button\n                    onClick={handleOpenSidebarPressed}\n                  >\n                    {'Open Sidebar'}\n                  </Button>\n                </ButtonContainer>\n              ) : (\n                <ButtonContainer>\n                  <Button\n                    disabled={notaryProofSelectionStatus === NotaryProofInputStatus.DEFAULT || isProofModalOpen}\n                    onClick={handleVerifyNotaryProofClicked}\n                  >\n                    {ctaButtonTitle}\n                  </Button>\n                </ButtonContainer>\n              )\n            )}\n\n            {loadedNotaryProofs.length > 0 && (\n              <TableToggleLink onClick={handleToggleNotarizationTablePressed}>\n                {notarizationToggleCta()}\n              </TableToggleLink>\n            )}\n          </ExtensionDetectedContainer>\n        )\n      )}\n    </Container>\n  )\n};\n\nconst Container = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  align-self: flex-start;\n  justify-content: center;\n\n  background-color: ${colors.container};\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 16px;\n  overflow: hidden;\n`;\n\nconst UnsupportedBrowserContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 50vh;\n  min-height: 25vh;\n  line-height: 1.3;\n  gap: 36px;\n`;\n\nconst StyledAlertTriangle = styled(AlertTriangle)`\n  color: #FFF;\n  width: 48px;\n  height: 48px;\n`;\n\nconst InstallExtensionContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 50vh;\n  min-height: 25vh;\n  line-height: 1.3;\n  gap: 36px;\n`;\n\nconst IconAndCopyContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 18px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst SidebarIcon = styled(Sidebar)`\n  ${IconStyle}\n  transform: rotate(180deg);\n`;\n\nconst ExtensionDetectedContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  padding: 1.5rem;\n`;\n\nconst NotaryTableTitleContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0 0.5rem;\n  font-weight: 700;\n`;\n\nconst ConnectionTitleContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 8px;\n`;\n\nconst ConnectionAndTooltip = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 4px;\n`;\n\nconst EmptyNotarizationsContainer = styled.div`\n  display: flex;\n  width: 100%;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 1.9rem 0rem;\n  max-width: 75%;\n  margin: auto;\n  gap: 1rem;\n`;\n\ninterface StyledCircleProps {\n  connection: NotaryConnectionStatusType | null;\n}\n\nconst StyledCircle = styled(Circle)<StyledCircleProps>`\n  height: 8px;\n  width: 8px;\n\n  fill: ${({ connection }) => {\n    switch (connection) {\n      case NotaryConnectionStatus.GREEN:\n        return colors.connectionStatusGreen;\n      default:\n        return colors.connectionStatusRed;\n    }\n  }};\n\n  color: ${({ connection }) => {\n    switch (connection) {\n      case NotaryConnectionStatus.GREEN:\n        return colors.connectionStatusGreen;\n      default:\n        return colors.connectionStatusRed;\n    }\n  }};\n`;\n\nconst TitleAndTableContainer = styled.div`\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 8px;\n  background-color: #090D14;\n`;\n\nconst TitleAndOAuthContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n  padding: 1rem 1.5rem;\n`;\n\nconst NotarizationsTitleContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nconst TitleLabel = styled.label`\n  display: flex;\n  font-size: 14px;\n  color: #6C757D;\n  align-items: center;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  color: #616161;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n  padding-top: 1rem;\n`;\n\nconst StyledUserX = styled(UserX)`\n  color: ${colors.connectionStatusRed};\n  width: 28px;\n  height: 28px;\n`;\n\nconst StyledWifiOff = styled(WifiOff)`\n  color: #FFF;\n  width: 28px;\n  height: 28px;\n`;\n\nconst StyledUserCheck = styled(UserCheck)`\n  color: ${colors.connectionStatusGreen};\n  width: 28px;\n  height: 28px;\n`;\n\nconst StyledCheckCircle = styled(CheckCircle)`\n  color: ${colors.connectionStatusGreen};\n  width: 28px;\n  height: 28px;\n`;\n\nconst StyledSlash = styled(Slash)`\n  color: ${colors.connectionStatusRed};\n  width: 28px;\n  height: 28px;\n`;\n\nconst TableToggleLink = styled.button`\n  width: 100%;\n  font-size: 15px;\n  font-family: 'Graphik';\n  color: #FFFFFF;\n  opacity: 0.3;\n  text-align: center;\n  background: none;\n  border: none;\n  cursor: pointer;\n  text-decoration: underline;\n  display: inline;\n`;\n\nconst PaginationContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: 12px;\n`;\n\nconst PaginationButton = styled.button`\n  background-color: rgba(0, 0, 0, 0.5);\n  color: white;\n  padding: 8px 16px;\n  margin: 0 16px;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  transition: background-color 0.3s;\n\n  &:hover {\n    background-color: rgba(0, 0, 0, 0.8);\n  }\n\n  &:disabled {\n    background-color: rgba(0, 0, 0, 0.2);\n    cursor: not-allowed;\n  }\n`;\n\nconst PageInfo = styled.span`\n  color: rgba(255, 255, 255, 0.8);\n  word-spacing: 2px;\n  font-size: 16px;\n`;\n\nconst IconAndMessageContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  background-color: #0A0D14;\n\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 8px;\n`;\n\nconst TagDetectionIconAndCopyContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 1.9rem 4rem;\n  gap: 1rem;\n\n  border-radius: 8px;\n`;\n"
  },
  {
    "path": "client/src/components/Notary/VerificationStepRow.tsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport styled from 'styled-components/macro';\nimport { Cpu, Check, Circle, Play, Upload } from 'react-feather';\nimport { CircularProgressbarWithChildren } from 'react-circular-progressbar';\nimport 'react-circular-progressbar/dist/styles.css';\n\nimport Spinner from \"@components/common/Spinner\";\nimport { commonStrings } from \"@helpers/strings\";\nimport { NotaryVerificationCircuit } from '@helpers/types';\n\n\nexport const VerificationStepType = {\n  UPLOAD: \"upload\",\n  PROVE: \"prove\",\n  SUBMIT: \"submit\",\n};\n\nexport const VerificationState = {\n  DEFAULT: 'default',\n  LOADING: 'loading',\n  COMPLETE: 'complete',\n};\n\ninterface VerificationStepRowProps {\n  type: string;\n  progress: string;\n  circuitType: string;\n};\n\nexport type VerificationStepRowData = VerificationStepRowProps;\n\nexport const VerificationStepRow: React.FC<VerificationStepRowProps> = ({\n  type,\n  progress,\n  circuitType\n}: VerificationStepRowProps) => {\n  VerificationStepRow.displayName = \"VerificationStepRow\";\n\n  /*\n   * State\n   */\n\n  const [progressPercentage, setProgressPercentage] = useState(0);\n  const [progressTimer, setProgressTimer] = useState(0);\n  \n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (progress === VerificationState.LOADING) {\n      const interval = getUpdateIntervalMs();\n      const totalTime = getEstimatedTimesMs();\n      const steps = totalTime / interval;\n      const increment = 100 / steps;\n\n      let timeout: NodeJS.Timeout;\n      let currentPercentage = 0;\n\n      const updateProgressCircle = () => {\n        if (currentPercentage < 100) {\n          setProgressPercentage(currentPercentage);\n\n          const tick = Math.round(increment);\n          currentPercentage += tick;\n\n          setProgressTimer(currentPercentage / tick);\n\n          timeout = setTimeout(updateProgressCircle, interval);\n        } else {\n          setProgressPercentage(100);\n        }\n      };\n\n      updateProgressCircle();\n\n      return () => clearTimeout(timeout);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [progress]);\n\n  /*\n   * Helpers\n   */\n\n  const shouldShowProgressCircle = (percentage: number) => {\n    return percentage < 100 && type !== VerificationStepType.SUBMIT;\n  }\n\n  const getEstimatedTimesMs = () => {\n    switch (type) {\n      case VerificationStepType.UPLOAD:\n        return 1000;\n      case VerificationStepType.PROVE:\n        return 90000;\n      default:\n        return 0;\n    }\n  };\n\n  const getUpdateIntervalMs = () => {\n    switch (type) {\n      case VerificationStepType.UPLOAD:\n        return 10;\n      case VerificationStepType.PROVE:\n        return 1000;\n      default:\n        return 0;\n    }\n  };\n\n  const getLeftIcon = () => {\n    switch (type) {\n      case VerificationStepType.UPLOAD:\n        return <StyledUpload progress={progress} />;\n      case VerificationStepType.PROVE:\n        return <StyledCpu progress={progress} />;\n      case VerificationStepType.SUBMIT:\n        return <StyledPlay progress={progress} />;\n      default:\n        return null;\n    }\n  };\n\n  const getRightIcon = () => {\n    switch (progress) {\n      case VerificationState.DEFAULT:\n        return <StyledCircle progress={progress} />;\n\n      case VerificationState.LOADING:\n        return shouldShowProgressCircle(progressPercentage) ? (\n          <CircularProgressbarWithChildren\n            maxValue={99}\n            styles={{\n              root: {\n                height: 32,\n                width: 32,\n              },\n              text: {\n                fontSize: 32,\n                fill: '#4BB543',\n              },\n              path: {\n                stroke: '#4BB543',\n                transition: 'none',\n              }\n            }}\n            value={progressPercentage}\n          >\n            <Percentage>{`${progressTimer}`}</Percentage>\n          </CircularProgressbarWithChildren>\n        ) : (\n          <Spinner size={24} />\n        );\n\n      case VerificationState.COMPLETE:\n        return <StyledCheck progress={progress} />;\n\n      default:\n        return null;\n    }\n  };\n\n  const getTitle = () => {\n    switch (type) {\n      case VerificationStepType.UPLOAD:\n        return commonStrings.get('VERIFICATION_MODAL_UPLOAD_TITLE');\n\n      case VerificationStepType.PROVE:\n        switch (circuitType) {\n          case NotaryVerificationCircuit.REGISTRATION_TAG:\n            return commonStrings.get('VERIFICATION_MODAL_PROVE_REGISTRATION_TITLE');\n\n          case NotaryVerificationCircuit.TRANSFER:\n          default:\n            return commonStrings.get('VERIFICATION_MODAL_PROVE_TITLE');\n        }\n\n      case VerificationStepType.SUBMIT:\n        switch (circuitType) {\n          case NotaryVerificationCircuit.REGISTRATION_TAG:\n            return commonStrings.get('VERIFICATION_MODAL_REGISTRATION_SUBMIT_TITLE');\n\n          case NotaryVerificationCircuit.TRANSFER:\n          default:\n            return commonStrings.get('VERIFICATION_MODAL_SUBMIT_TITLE');\n        }\n\n      default:\n        return null;\n    }\n  };\n\n  const getSubTitle = () => {\n    switch (type) {\n      case VerificationStepType.UPLOAD:\n        return commonStrings.get('VERIFICATION_MODAL_UPLOAD_SUBTITLE');\n\n      case VerificationStepType.PROVE:\n        switch (circuitType) {\n          case NotaryVerificationCircuit.REGISTRATION_TAG:\n            return commonStrings.get('VERIFICATION_MODAL_PROVE_REGISTRATION_SUBTITLE_FAST');\n\n          case NotaryVerificationCircuit.TRANSFER:\n          default:\n            return commonStrings.get('VERIFICATION_MODAL_PROVE_SUBTITLE_FAST');\n        }\n\n      case VerificationStepType.SUBMIT:\n        switch (circuitType) {\n          case NotaryVerificationCircuit.REGISTRATION_TAG:\n            return commonStrings.get('VERIFICATION_MODAL_REGISTRATION_SUBMIT_SUBTITLE');\n\n          case NotaryVerificationCircuit.TRANSFER:\n          default:\n            return commonStrings.get('VERIFICATION_MODAL_SUBMIT_SUBTITLE');\n        }\n\n      default:\n        return null;\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      {getLeftIcon()}\n\n      <TitleAndSubtitleContainer>\n        <Label progress={progress}>\n          {getTitle()}\n        </Label>\n\n        <Subtitle progress={progress}>\n          {getSubTitle()}\n        </Subtitle>\n      </TitleAndSubtitleContainer>\n\n      <ActionsContainer>\n        {getRightIcon()}\n      </ActionsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  padding: 1rem;\n  margin-top: 4px;\n  gap: 1.25rem;\n`;\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  margin-left: auto;\n`;\n\nconst TitleAndSubtitleContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n`;\n\nconst Label = styled.span<{ progress: string }>`\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#FFFFFF')};\n  font-size: 16px;\n`;\n\nconst Subtitle = styled.span<{ progress: string }>`\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#ADB5BD')};\n  font-size: 12px;\n`;\n\nconst IconBase = styled.div<{ progress: string }>`\n  width: 24px;\n  height: 24px;\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#FFFFFF')};\n`;\n\nconst Percentage = styled.div`\n  font-size: 12px;\n  color: #4BB543;\n  margin-top: 1px;\n`;\n\nconst StyledCpu = styled(IconBase).attrs({ as: Cpu })``;\nconst StyledUpload = styled(IconBase).attrs({ as: Upload })``;\nconst StyledPlay = styled(IconBase).attrs({ as: Play })``;\nconst StyledCheck = styled(IconBase).attrs({ as: Check })`\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#4BB543')};\n`;\nconst StyledCircle = styled(IconBase).attrs({ as: Circle })``;\n"
  },
  {
    "path": "client/src/components/Notary/VerifyNotarizationForm.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport crypto from 'crypto';\n\nimport { Col } from \"@components/legacy/Layout\";\nimport { VerifyNotarizationModal } from '@components/Notary/VerifyNotarizationModal';\nimport { NotarizationTable } from '@components/Notary/NotarizationTable';\nimport {\n  PaymentPlatformType,\n  PaymentPlatform,\n  NotaryProofInputStatus,\n  NotaryVerificationStatus,\n  NotaryVerificationCircuit,\n  NotaryVerificationCircuitType,\n} from  \"@helpers/types\";\nimport useLocalStorage from '@hooks/useLocalStorage';\nimport useRegistration from '@hooks/revolut/useRegistration';\nimport useAccount from '@hooks/useAccount';\nimport useRemoteNotaryVerification from '@hooks/useRemoteNotaryVerification';\nimport { colors } from '@theme/colors';\n\n\ninterface VerifyNotarizationFormProps {\n  paymentPlatformType: PaymentPlatformType;\n  circuitType: NotaryVerificationCircuitType;\n  verifierProof: string;\n  publicSignals: string;\n  setVerifierProof: (verifierProof: string) => void;\n  setPublicSignals: (publicSignals: string) => void;\n  submitTransactionStatus: string;\n  isSubmitMining: boolean;\n  isSubmitSuccessful: boolean;\n  handleSubmitVerificationClick?: () => void;\n  onVerifyNotarizationCompletion?: () => void;\n  transactionAddress?: string | null;\n  selectedUIntIntentHash?: string;\n}\n\nexport const VerifyNotarizationForm: React.FC<VerifyNotarizationFormProps> = ({\n  paymentPlatformType,\n  circuitType,\n  verifierProof,\n  publicSignals,\n  setVerifierProof,\n  setPublicSignals,\n  submitTransactionStatus,\n  isSubmitMining,\n  isSubmitSuccessful,\n  handleSubmitVerificationClick,\n  onVerifyNotarizationCompletion,\n  transactionAddress,\n  selectedUIntIntentHash\n}) => {\n\n  /*\n   * Context\n   */\n\n  const { setExtractedRevolutProfileId } = useRegistration();\n  const { loggedInEthereumAddress } = useAccount();\n\n  /*\n   * State\n   */\n\n  const [notarization, setNotarization] = useState<string>(\"\");\n  const [notarizationProofMetadata, setNotarizationProofMetadata] = useState<any | null>(null);\n  const [notarizationHash, setNotarizationHash] = useState<string>(\"\");\n\n  const [storedProofValue, setStoredProofValue] = useLocalStorage<string>(`${notarizationHash}_PROOF`, '');\n  const [storedSignalsValue, setStoredSignalsValue] = useLocalStorage<string>(`${notarizationHash}_SIGNALS`, '');\n\n  const [shouldShowVerificationModal, setShouldShowVerificationModal] = useState<boolean>(false);\n\n  const [notaryProofSelectionStatus, setNotaryProofSelectionStatus] = useState<string>(NotaryProofInputStatus.DEFAULT);\n  const [proofGenStatus, setProofGenStatus] = useState(NotaryVerificationStatus.NOT_STARTED);\n\n  const [verificationFailureErrorCode, setVerificationFailureErrorCode] = useState<number | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  const {\n    data: remoteNotaryVerificationResponse,\n    // loading: isRemoteGenerateProofLoading,\n    error: remoteGenerateProofError,\n    fetchData: remoteGenerateProof\n  } = useRemoteNotaryVerification({\n    paymentType: paymentPlatformType,\n    circuitType: circuitType,\n    notarization: notarization,\n    intentHash: selectedUIntIntentHash ?? '',\n    userAddress: loggedInEthereumAddress ?? ''\n  });\n\n  useEffect(() => {    \n    if (remoteNotaryVerificationResponse) {\n      processRemoteProofGenerationResponse(remoteNotaryVerificationResponse);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [remoteNotaryVerificationResponse]);\n\n  useEffect(() => {\n    switch (paymentPlatformType) {\n      case PaymentPlatform.REVOLUT:\n        if (storedProofValue && storedSignalsValue) {\n          setProofGenStatus(NotaryVerificationStatus.TRANSACTION_CONFIGURED);\n        }\n        break;\n      \n      default:\n        throw new Error('Invalid platform invoking VerifyNotarizationForm');\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [storedProofValue, storedSignalsValue]);\n\n  useEffect(() => {\n    if (remoteGenerateProofError) {\n      setVerificationFailureErrorCode(remoteGenerateProofError.code);\n\n      setProofGenStatus(NotaryVerificationStatus.ERROR_FAILED_TO_PROVE);\n    }\n  }, [remoteGenerateProofError]);\n\n  useEffect(() => {\n    async function locallyVerifyNotarization() {\n      if (notarization) {\n        const hash = crypto.createHash('sha256');\n        hash.update(notarization);\n        const hashedNotarization = hash.digest('hex');\n        setNotarizationHash(hashedNotarization);\n\n        setNotaryProofSelectionStatus(NotaryProofInputStatus.VALID);\n      } else {\n        setNotarizationHash(\"\");\n        setNotaryProofSelectionStatus(NotaryProofInputStatus.DEFAULT);\n      }\n    }\n  \n    locallyVerifyNotarization();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [notarization]);\n\n  useEffect(() => {\n    if (storedProofValue && storedSignalsValue) {\n      setVerifierProof(storedProofValue);\n      setPublicSignals(storedSignalsValue);\n    }\n  }, [storedProofValue, storedSignalsValue, setVerifierProof, setPublicSignals]);\n\n  /*\n   * Handlers\n   */\n\n  const handleVerifyNotaryProofClicked = async () => {\n    setShouldShowVerificationModal(true);\n\n    if (storedProofValue && storedSignalsValue) {\n      setVerifierProof(storedProofValue);\n      setPublicSignals(storedSignalsValue);\n\n      setProofGenStatus(NotaryVerificationStatus.TRANSACTION_CONFIGURED);\n    } else {\n      await generateFastProof(remoteGenerateProof);\n    }\n\n    const isCircuitTypeRegistration = circuitType === NotaryVerificationCircuit.REGISTRATION_TAG;\n    if (isCircuitTypeRegistration) {\n      if (setExtractedRevolutProfileId) {\n        setExtractedRevolutProfileId(notarizationProofMetadata);\n      };\n    }\n  };\n\n  const handleModalBackClicked = () => {\n    setShouldShowVerificationModal(false);\n  };\n\n  /*\n   * Helpers\n   */\n\n  const getModalCtaTitle = () => {\n    return circuitType === NotaryVerificationCircuit.REGISTRATION_TAG ?\n      'Complete Registration':\n      'Complete Order';\n  };\n\n  /*\n   * Proof Generation\n   */\n\n  const generateFastProof = async (callback: any) => {\n    setProofGenStatus(NotaryVerificationStatus.UPLOADING_PROOF_FILES)\n\n    await new Promise(resolve => setTimeout(resolve, 250));\n\n    setProofGenStatus(NotaryVerificationStatus.GENERATING_PROOF);\n\n    console.time(\"remote-proof-gen\");\n    await callback();\n    console.timeEnd(\"remote-proof-gen\");\n  };\n\n  const processRemoteProofGenerationResponse = (response: any, isBodyHashProof: boolean = false) => {\n    setAndStoreProvingState(response.proof, response.public_values)\n  };\n\n  const setAndStoreProvingState = (\n    proofString: string,\n    publicSignalsString: string,\n  ) => {\n    // Generate notarization hash to cache proof and signals\n    const hash = crypto.createHash('sha256');\n    hash.update(notarization);\n    const hashedNotarization = hash.digest('hex');\n    setNotarizationHash(hashedNotarization);\n\n    // Set proof and public signals\n    setVerifierProof(proofString);\n    setStoredProofValue(proofString);\n\n    setPublicSignals(publicSignalsString);\n    setStoredSignalsValue(publicSignalsString);\n  };\n\n  /*\n   * Components\n   */\n\n  return (\n    <Container>\n      {shouldShowVerificationModal && (\n        <VerifyNotarizationModal\n          title={\"Verify Proof\"}\n          verifierProof={verifierProof}\n          publicSignals={publicSignals}\n          onBackClick={handleModalBackClicked}\n          onVerifyNotarizationCompletion={onVerifyNotarizationCompletion}\n          status={proofGenStatus}\n          circuitType={circuitType}\n          buttonTitle={getModalCtaTitle()}\n          submitTransactionStatus={submitTransactionStatus}\n          isSubmitMining={isSubmitMining}\n          isSubmitSuccessful={isSubmitSuccessful}\n          setProofGenStatus={setProofGenStatus}\n          handleSubmitVerificationClick={handleSubmitVerificationClick}\n          transactionAddress={transactionAddress}\n          verificationFailureErrorCode={verificationFailureErrorCode}\n        />\n      )}\n\n      <VerticalDivider/>\n\n      <NotarizationTable\n        paymentPlatform={paymentPlatformType}\n        circuitType={circuitType}\n        setNotaryProof={setNotarization}\n        setNotaryProofMetadata={setNotarizationProofMetadata}\n        handleVerifyNotaryProofClicked={handleVerifyNotaryProofClicked}\n        notaryProofSelectionStatus={notaryProofSelectionStatus}\n        isProofModalOpen={shouldShowVerificationModal}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled(Col)`\n`;\n\nconst VerticalDivider = styled.div`\n  height: 24px;\n  border-left: 1px solid ${colors.defaultBorderColor};\n  margin: 0 auto;\n`;\n"
  },
  {
    "path": "client/src/components/Notary/VerifyNotarizationModal.tsx",
    "content": "import React, { useEffect, useMemo, useState } from \"react\";\nimport styled from 'styled-components';\nimport { ArrowLeft } from 'react-feather';\nimport Confetti from 'react-confetti';\nimport { useWindowSize } from '@uidotdev/usehooks';\n\nimport { Button } from \"@components/common/Button\";\nimport { LabeledSwitch } from \"@components/common/LabeledSwitch\";\nimport { Overlay } from '@components/modals/Overlay';\nimport { TitleCenteredRow } from '@components/layouts/Row';\nimport { LabeledTextArea } from '@components/legacy/LabeledTextArea';\nimport { VerificationStepRow, VerificationState, VerificationStepType } from \"@components/Notary/VerificationStepRow\";\nimport { commonStrings } from \"@helpers/strings\";\nimport { LoginStatus, NotaryVerificationStatus, NotaryVerificationCircuitType, NotaryVerificationCircuit } from  \"@helpers/types\";\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from \"@hooks/useSmartContracts\";\nimport { Z_INDEX } from '@theme/zIndex';\n\n\ninterface VerifyNotarizationModalProps {\n  title: string;\n  verifierProof: string;\n  publicSignals: string;\n  onBackClick: () => void\n  status: string;\n  circuitType: NotaryVerificationCircuitType;\n  buttonTitle: string;\n  submitTransactionStatus: string;\n  isSubmitMining: boolean;\n  isSubmitSuccessful: boolean;\n  handleSubmitVerificationClick?: () => void;\n  setProofGenStatus?: (status: string) => void;\n  onVerifyNotarizationCompletion?: () => void;\n  transactionAddress?: string | null;\n  verificationFailureErrorCode: number | null;\n}\n\nexport const VerifyNotarizationModal: React.FC<VerifyNotarizationModalProps> = ({\n  title,\n  verifierProof,\n  publicSignals,\n  onBackClick,\n  status,\n  circuitType,\n  buttonTitle,\n  submitTransactionStatus,\n  isSubmitMining,\n  isSubmitSuccessful,\n  transactionAddress,\n  setProofGenStatus,\n  handleSubmitVerificationClick = () => {},\n  onVerifyNotarizationCompletion,\n  verificationFailureErrorCode,\n}) => {\n  /*\n   * Context\n   */\n\n  const { loginStatus } = useAccount();\n  const size = useWindowSize();\n  const { blockscanUrl } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [shouldShowProofAndSignals, setShouldShowProofAndSignals] = useState<boolean>(false);\n\n  const [ctaButtonTitle, setCtaButtonTitle] = useState<string>(\"\");\n  const [showConfetti, setShowConfetti] = useState<boolean>(false);\n  const [isSubmitProcessing, setIsSubmitProcessing] = useState<boolean>(false);\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  }\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (setProofGenStatus) {\n      switch (submitTransactionStatus) {\n        case \"error\":\n          setProofGenStatus(NotaryVerificationStatus.TRANSACTION_CONFIGURED);\n          setIsSubmitProcessing(false);\n          break;\n\n        case \"loading\":\n          setProofGenStatus(NotaryVerificationStatus.TRANSACTION_LOADING);\n          setIsSubmitProcessing(true);\n          break;\n\n        default:\n          setIsSubmitProcessing(false);\n          break;\n      }\n    }\n  }, [submitTransactionStatus, setProofGenStatus]);\n\n  useEffect(() => {\n    if (isSubmitMining && setProofGenStatus) {\n      setProofGenStatus(NotaryVerificationStatus.TRANSACTION_MINING);\n    }\n  }, [isSubmitMining, setProofGenStatus]);\n\n  useEffect(() => {\n    if (isSubmitSuccessful && setProofGenStatus) {\n      setShowConfetti(true);\n      \n      setTimeout(() => {\n        setShowConfetti(false);\n      }, 5000);\n      setProofGenStatus(NotaryVerificationStatus.DONE);\n    }\n  }, [isSubmitSuccessful, setProofGenStatus])\n\n  useEffect(() => {\n    switch (status) {\n      case NotaryVerificationStatus.TRANSACTION_CONFIGURED:\n        setCtaButtonTitle(buttonTitle);\n        break;\n\n      case NotaryVerificationStatus.TRANSACTION_LOADING:\n        setCtaButtonTitle(\"Signing Transaction\");\n        break;\n\n      case NotaryVerificationStatus.TRANSACTION_MINING:\n        setCtaButtonTitle(\"Mining Transaction\");\n        break;\n\n      case NotaryVerificationStatus.ERROR_FAILED_TO_PROVE:\n        switch (verificationFailureErrorCode) {\n          case 1:\n            setCtaButtonTitle(\"Validation Failed: Invalid Type\");\n            break;\n\n          default:\n            setCtaButtonTitle(\"Validation Failed: Try Again Shortly\");\n            break;\n        }\n        break;\n\n      case NotaryVerificationStatus.DONE:\n        switch (circuitType) {\n          case NotaryVerificationCircuit.TRANSFER:\n            setCtaButtonTitle('Go to Send');\n            break;\n    \n          case NotaryVerificationCircuit.REGISTRATION_TAG:\n            setCtaButtonTitle('Go to Registration');\n            break;\n\n          default:\n            throw new Error(`Unknown circuit type: ${circuitType}`);\n        };\n        break;\n\n      default:\n        setCtaButtonTitle(buttonTitle);\n        break;\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [status, buttonTitle]);\n\n  /*\n   * Helpers\n   */\n\n  const isSubmitVerificationButtonDisabled = useMemo(() => {\n    switch (status) {\n      case \"transaction-configured\":\n      case \"done\":\n        return false;\n\n      default:\n        return true;\n    }\n  }, [status]);\n\n  const isSubmitVerificationButtonLoading = (): boolean => {\n    switch (status) {\n      case \"transaction-configured\":\n      case \"done\":\n        return false;\n        \n      default:\n        return loginStatus === LoginStatus.AUTHENTICATED;\n    }\n  };\n\n  const getButtonHandler = () => {\n    switch (status) {\n      case \"done\":\n        return onVerifyNotarizationCompletion?.();\n\n      default:\n        return handleSubmitVerificationClick();\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  const renderVerificationSteps = () => {\n    let uploadStepState = VerificationState.DEFAULT;\n    let proveStepState = VerificationState.DEFAULT;\n    let submitStepState = VerificationState.DEFAULT;\n\n    switch (status) {\n      case \"not-started\":\n      case \"generating-input\":\n        break;\n\n      case \"uploading-proof-files\":\n        uploadStepState = VerificationState.LOADING;\n        break;\n\n      case \"generating-proof\":\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.LOADING;\n        break;\n\n      case \"error-failed-to-prove\":\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.DEFAULT;\n        break;\n\n      case \"transaction-configured\":\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.COMPLETE;\n        break;\n\n      case \"transaction-loading\":\n      case \"transaction-mining\":\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.COMPLETE;\n        submitStepState = VerificationState.LOADING;\n        break;\n\n      case \"done\":\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.COMPLETE;\n        submitStepState = VerificationState.COMPLETE;\n        break;\n    }\n\n    const verificationStepRows = [];\n\n    verificationStepRows.push(\n      <VerificationStepRow\n        key={VerificationStepType.UPLOAD}\n        type={VerificationStepType.UPLOAD}\n        progress={uploadStepState}\n        circuitType={circuitType}\n      />\n    );\n\n    verificationStepRows.push(\n      <VerificationStepRow\n        key={VerificationStepType.PROVE}\n        type={VerificationStepType.PROVE}\n        progress={proveStepState}\n        circuitType={circuitType}\n      />\n    );\n\n    verificationStepRows.push(\n      <VerificationStepRow\n        key={VerificationStepType.SUBMIT}\n        type={VerificationStepType.SUBMIT}\n        progress={submitStepState}\n        circuitType={circuitType}\n      />\n    );\n\n    return verificationStepRows;\n  };\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay />\n\n      {showConfetti ? (\n        <ConfettiContainer>\n          <Confetti\n            recycle={false}\n            numberOfPieces={500}\n            width={size.width ?? undefined}\n            height={document.documentElement.scrollHeight}\n          />\n        </ConfettiContainer>\n      ) : null}\n      <ModalContainer>\n        <TitleCenteredRow>\n          <button\n            onClick={handleOverlayClick}\n            style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n\n            <StyledArrowLeft/>\n          </button>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            {title}\n          </ThemedText.HeadlineSmall>\n\n          <LabeledSwitch\n            switchChecked={shouldShowProofAndSignals}\n            checkedLabel={\"Hide\"}\n            uncheckedLabel={\"Show\"}\n            helperText={commonStrings.get('PROOF_TOOLTIP')}\n            onSwitchChange={(checked: boolean) => setShouldShowProofAndSignals(checked)}/>\n        </TitleCenteredRow>\n\n        <VerificationStepsContainer>\n          {renderVerificationSteps()}\n        </VerificationStepsContainer>\n\n        { shouldShowProofAndSignals && (\n          <ProofAndSignalsContainer>\n            <LabeledTextArea\n              label=\"Proof Output\"\n              value={verifierProof}\n              disabled={true}\n              height={\"12vh\"} />\n\n            <LabeledTextArea\n              label=\"Public Signals\"\n              value={publicSignals}\n              disabled={true}\n              height={\"12vh\"}\n              secret />\n          </ProofAndSignalsContainer>\n          )\n        }\n\n        { transactionAddress?.length ? (\n          <Link\n            href={`${blockscanUrl}/tx/${transactionAddress}`}\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n              <ThemedText.LabelSmall textAlign=\"left\" paddingBottom={\"0.75rem\"}>\n                View on Explorer ↗\n              </ThemedText.LabelSmall>\n          </Link>\n        ) : null}\n\n        <Button\n          loading={isSubmitVerificationButtonLoading()}\n          disabled={isSubmitVerificationButtonDisabled || isSubmitProcessing}\n          onClick={getButtonHandler}\n          fullWidth={true}\n        >\n          {ctaButtonTitle}\n        </Button>\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 472px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  align-items: center;\n  z-index: 20;\n  gap: 1.3rem;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst VerificationStepsContainer = styled.div`\n  width: 100%;\n`;\n\nconst ProofAndSignalsContainer = styled.div`\n  width: 100%;\n  background: #eeeee;\n  display: flex;\n  flex-direction: column;\n  gap: 1.25rem;\n`;\n\nconst Link = styled.a`\n  white-space: pre;\n  display: inline-block;\n  color: #1F95E2;\n  text-decoration: none;\n\n  &:hover {\n    text-decoration: underline;\n  }\n`;\n\nconst ConfettiContainer = styled.div`\n  z-index: 20;\n`;\n"
  },
  {
    "path": "client/src/components/Permissions/NewPermission.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport { ArrowLeft } from 'react-feather';\nimport styled from 'styled-components';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { SingleLineInput } from \"@components/common/SingleLineInput\";\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport usePermissions from '@hooks/usePermissions';\n\n\ninterface NewPermissionProps {\n  handleBackClick: () => void;\n}\n \nexport const NewPermission: React.FC<NewPermissionProps> = ({\n  handleBackClick\n}) => {\n  /*\n    Contexts\n  */\n\n  const { venmoRampAddress, venmoRampAbi } = useSmartContracts();\n  const { refetchDeniedUsers } = usePermissions();\n  \n  /*\n   * State\n   */\n  \n  const [userHashInput, setUserHashInput] = useState<string>('');\n\n  const [shouldConfigurePermissionWrite, setShouldConfigurePermissionWrite] = useState<boolean>(false); \n\n  /*\n    Contract Writes\n  */\n\n  //\n  // addAccountToDenylist(bytes32 _deniedUser)\n  //\n  const { config: writePermissionConfig } = usePrepareContractWrite({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'addAccountToDenylist',\n    args: [\n      userHashInput,\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigurePermissionWrite\n  });\n\n  const {\n    data: submitPermissionResult,\n    isLoading: isSubmitPermissionLoading,\n    writeAsync: writeSubmitPermissionAsync\n  } = useContractWrite(writePermissionConfig);\n\n  const {\n    isLoading: isSubmitPermissionMining\n  } = useWaitForTransaction({\n    hash: submitPermissionResult ? submitPermissionResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitPermissionAsync successful: ', data);\n      \n      refetchDeniedUsers?.();\n    },\n  });\n\n  /*\n    Hooks\n  */\n\n  useEffect(() => {\n    if (userHashInput) {\n      const isValidBytes32 = userHashInput.length === 66;\n      setShouldConfigurePermissionWrite(isValidBytes32);\n    } else {\n      setShouldConfigurePermissionWrite(false);\n    }\n  }, [userHashInput]);\n\n  return (\n    <Container>\n      <Column>\n        <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n          \n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            New Permission\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <Body>\n          <NumberedStep>\n            Add a new user hash to your deny list to prevent them from submitting orders on your deposits.\n          </NumberedStep>\n          <SingleLineInput\n            label=\"Venmo Hash\"\n            value={userHashInput}\n            placeholder={'0x12345678910'}\n            onChange={(e) => {\n              setUserHashInput(e.currentTarget.value);\n            }}\n          />\n          <ButtonContainer>\n            <Button\n              disabled={isSubmitPermissionLoading}\n              loading={isSubmitPermissionLoading || isSubmitPermissionMining}\n              onClick={async () => {\n                try {\n                  await writeSubmitPermissionAsync?.();\n                } catch (error) {\n                  console.log('writeSubmitPermissionAsync failed: ', error);\n                }\n              }}\n            >\n              Submit\n            </Button>\n          </ButtonContainer>\n        </Body>\n      </Column>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`;\n\nconst Column = styled.div`\n  gap: 1rem;\n  align-self: flex-start;\n  border-radius: 16px;\n  justify-content: center;\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 2rem;\n  background-color: ${colors.container};\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`\n"
  },
  {
    "path": "client/src/components/Permissions/PermissionRow.tsx",
    "content": "import React from \"react\";\nimport { UserX } from 'react-feather';\nimport styled, { css } from 'styled-components/macro';\n\n\ninterface PermissionRowProps {\n  address: string;\n  rowIndex: number;\n}\n\nexport const PermissionRow: React.FC<PermissionRowProps> = ({\n  address,\n  rowIndex,\n}: PermissionRowProps) => {\n  PermissionRow.displayName = \"PermissionRow\";\n\n  const outstandingAndRemainingLabel = `${address}`;\n\n  return (\n    <Container>\n      <AddressContainer>\n        <UserXIcon strokeWidth={1.5} />\n        <AddressLabel> {outstandingAndRemainingLabel} </AddressLabel>\n      </AddressContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  padding: 1.5rem 1.5rem;\n\n\n  &:focus-within {\n    border-color: #CED4DA;\n    border-width: 1px;\n  }\n`;\n\nconst IconStyle = css`\n  width: 24px;\n  height: 24px;\n  color: #6C757D;\n`\n\nconst UserXIcon = styled(UserX)`\n  ${IconStyle}\n`\n\nconst AddressContainer = styled.div`\n  width: 100%; \n  display: flex;\n  flex-direction: row;\n  gap: 1rem;\n  line-height: 24px;\n`;\n\nconst AddressLabel = styled.label`\n  display: flex;\n  font-size: 15px;\n  color: #FFFFFF;\n  align-items: center;\n`;\n"
  },
  {
    "path": "client/src/components/Permissions/PermissionTable.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport { Filter, FileText } from 'react-feather';\nimport styled, { css } from 'styled-components/macro';\n\nimport { Button } from '@components/common/Button';\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { PermissionRow } from \"@components/Permissions/PermissionRow\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport useAccount from '@hooks/useAccount';\nimport useRegistration from '@hooks/venmo/useRegistration';\nimport usePermissions from '@hooks/usePermissions';\nimport useQuery from '@hooks/useQuery';\n\n\ninterface Permission {\n  address: string;\n}\n\ninterface PermissionTableProps {\n  handleNewPositionClick: () => void;\n}\n\nexport const PermissionTable: React.FC<PermissionTableProps> = ({\n  handleNewPositionClick\n}) => {\n  const { navigateWithQuery } = useQuery();\n  \n  /*\n   * Contexts\n   */\n  const { isRegistered } = useRegistration()\n  const { isLoggedIn } = useAccount()\n  const { deniedUsers } = usePermissions()\n\n  /*\n   * State\n   */\n  const [permissionsRowData, setPermissionsRowData] = useState<Permission[]>([]);\n\n  /*\n   * Hooks\n   */\n  useEffect(() => {\n    if (deniedUsers) {\n      const transformedData = deniedUsers.map(hash => ({ address: hash }));\n      setPermissionsRowData(transformedData);\n    }\n  }, [isLoggedIn, deniedUsers]);\n\n  /*\n   * Deny list functions:\n   * addAccountToDenylist(bytes32 _deniedUser)\n   * removeAccountFromDenylist(bytes32 _approvedUser)\n   */\n\n  /*\n    Handlers\n  */\n\n  const navigateToRegistrationHandler = () => {\n    navigateWithQuery('/register');\n  };\n\n  return (\n    <Container>\n      <Column>\n        <TitleRow>\n          <ThemedText.HeadlineMedium>\n            Permissions\n          </ThemedText.HeadlineMedium>\n          {isLoggedIn ? (\n            <Button onClick={handleNewPositionClick} height={40}>\n                + New Entry\n            </Button>\n          ) : null}\n        </TitleRow>\n\n        <Content>\n          {!isLoggedIn ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <FilterIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  Your denied users list will appear here.\n                </div>\n              </ThemedText.DeprecatedBody>\n              <CustomConnectButton width={152} />\n            </ErrorContainer>\n          ) : !isRegistered ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <FileTextIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  You must register to create a deposit.\n                </div>\n              </ThemedText.DeprecatedBody>\n              <Button\n                onClick={navigateToRegistrationHandler}\n              >\n                Complete Registration\n              </Button>\n            </ErrorContainer>\n          ) : permissionsRowData.length === 0 ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n              <FilterIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  You have no restricions set.\n                </div>\n              </ThemedText.DeprecatedBody>\n            </ErrorContainer>\n          ) : (\n            <PermissionsContainer>\n              <PermissionCountTitle>\n                <ThemedText.LabelSmall textAlign=\"left\">\n                  Your restricted users ({permissionsRowData.length})\n                </ThemedText.LabelSmall>\n              </PermissionCountTitle>\n              <Table>\n                {permissionsRowData.map((permission, rowIndex) => (\n                  <PermissionRowStyled key={rowIndex}>\n                    <PermissionRow\n                      address={permission.address}\n                      rowIndex={rowIndex}\n                    />\n                  </PermissionRowStyled>\n                ))}\n              </Table>\n            </PermissionsContainer>\n          )}\n        </Content>\n      </Column>\n    </Container>\n  )\n}\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`\n\nconst Column = styled.div`\n  gap: 1rem;\n  align-self: flex-start;\n  border-radius: 16px;\n  justify-content: center;\n`;\n\nconst TitleRow = styled(RowBetween)`\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    flex-wrap: wrap;\n    gap: 12px;\n    width: 100%;\n  };\n`;\n\nconst Content = styled.main`\n  display: flex;\n  background-color: ${colors.container};\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 16px;\n  flex-direction: column;\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n  overflow: hidden;\n`;\n\nconst ErrorContainer = styled.div`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`\n\nconst FilterIcon = styled(Filter)`\n  ${IconStyle}\n`\n\nconst FileTextIcon = styled(FileText)`\n  ${IconStyle}\n`\n\nconst PermissionsContainer = styled.div`\n  display: flex;\n  align-items: flex-start;\n  flex-direction: column;\n  justify-content: flex-start;\n  width: 100%;\n`\n\nconst PermissionCountTitle = styled.div`\n  width: 100%;\n  text-align: left;\n  padding-top: 1.25rem;\n  padding-bottom: 1rem;\n  padding-left: 1.5rem;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n`\n\nconst Table = styled.div`\n  width: 100%;\n  border-radius: 8px;\n  border-top-left-radius: 16px;\n  border-top-right-radius: 16px;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  font-size: 16px;\n  color: #616161;\n\n  & > * {\n    border-bottom: 1px solid ${colors.defaultBorderColor};\n  }\n\n  & > *:last-child {\n    border-bottom: none;\n  }\n`;\n\nconst PermissionRowStyled = styled.div`\n  &:hover {\n    border: 1px solid rgba(255, 255, 255, 0.8);\n    box-shadow: none;\n  }    \n\n  &:last-child {\n    border-bottom-left-radius: 16px;\n    border-bottom-right-radius: 16px;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/Permissions/index.tsx",
    "content": "import React, { useState } from 'react';\nimport styled from 'styled-components/macro';\n\nimport { AutoColumn } from '@components/layouts/Column';\nimport { NewPermission } from '@components/Permissions/NewPermission';\nimport { PermissionTable } from '@components/Permissions/PermissionTable';\nimport { colors } from '@theme/colors';\n\n\nexport default function PermissionsForm() {\n  /*\n   * State\n   */\n\n  const [isAddPosition, setIsAddPosition] = useState<boolean>(false);\n\n  /*\n   * Handlers\n   */\n\n  const handleUpdateClick = () => {\n    setIsAddPosition(true);\n  };\n\n  const handleBackClick = () => {\n    setIsAddPosition(false);\n  };\n\n  return (\n    <Wrapper>\n      <Column>\n        <Content>\n          {!isAddPosition ? (\n            <PermissionTable\n              handleNewPositionClick={handleUpdateClick}\n            />\n          ) : (\n            <NewPositionContainer>\n              <Column>\n                <NewPermission\n                  handleBackClick={handleBackClick}\n                />\n              </Column>\n            </NewPositionContainer>\n          )}\n        </Content>\n      </Column>\n    </Wrapper>\n  )\n};\n\nconst Wrapper = styled(AutoColumn)`\n  max-width: 660px;\n  width: 100%;\n`;\n\nconst Column = styled.div`\n  gap: 1rem;\n  align-self: flex-start;\n  border-radius: 16px;\n  justify-content: center;\n`;\n\nconst Content = styled.main`\n  gap: 1rem;\n  align-self: flex-start;\n`;\n\nconst NewPositionContainer = styled.div`\n  display: grid;\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n`;\n"
  },
  {
    "path": "client/src/components/ProofGen/MailRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components/macro';\n\nimport { colors } from '@theme/colors';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface MailRowProps {\n  platformText: string;\n  subjectText: string;\n  dateText: string;\n  isSelected: boolean;\n  isLastRow: boolean;\n  onRowClick: () => void;\n}\n\nexport const MailRow: React.FC<MailRowProps> = ({\n  platformText,\n  subjectText,\n  dateText,\n  isSelected,\n  isLastRow,\n  onRowClick,\n}: MailRowProps) => {\n  const isMobile = useMediaQuery() === 'mobile';\n\n  MailRow.displayName = \"MailRow\";\n\n  const subjectLabel = `${subjectText}`;\n  const dateLabel = `${dateText}`;\n\n  const isPlatformTextLong = subjectText.length > 40;\n\n  return (\n    <Container\n      onClick={onRowClick}\n      selected={isSelected}\n      isLastRow={isLastRow}\n      isMobile={isMobile}\n      isPlatformTextLong={isPlatformTextLong}\n    >\n      {!isMobile && <PlatformLabel> {platformText} </PlatformLabel>}\n\n      <SubjectLabel> {subjectLabel} </SubjectLabel>\n\n      <DateLabel> {dateLabel} </DateLabel>\n    </Container>\n  );\n};\n\nconst Container = styled.div<{ selected: boolean; isLastRow: boolean, isPlatformTextLong: boolean, isMobile: boolean}>`\n  display: grid;\n  grid-template-columns: ${({ isMobile, isPlatformTextLong }) => \n    isMobile ?  (isPlatformTextLong ? '7fr 1.25fr' : '3fr 1fr') : (isPlatformTextLong ? '1.5fr 7fr 1.25fr' : '1.5fr 3fr 1fr')\n  };\n  grid-gap: 1px;\n  padding: 0.99rem 1.49rem;\n  font-size: 14px;\n  color: #FFFFFF;\n  border-radius: ${({ isLastRow }) => isLastRow ? \"0 0 8px 8px\" : \"0\"};\n  border-bottom: ${({ isLastRow }) => !isLastRow && `1px solid ${colors.defaultBorderColor}`};\n\n  ${({ selected }) => selected && `\n    background-color: #191D28;\n    box-shadow: none;\n  `}\n\n  ${({ selected, isLastRow }) => !selected && `\n    &:hover {\n      background-color: #191D28;\n      border-radius: ${isLastRow ? \"0 0 8px 8px\" : \"0\"};\n      box-shadow: none;\n    }\n  `}\n`;\n\nconst PlatformLabel = styled.label`\n  text-align: left;\n`;\n\nconst SubjectLabel = styled.label`\n  text-align: left;\n`;\n\nconst DateLabel = styled.label`\n  text-align: right;\n`;"
  },
  {
    "path": "client/src/components/ProofGen/MailTable.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components/macro';\nimport { Inbox, Mail } from 'react-feather';\nimport Link from '@mui/material/Link';\n\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Button } from '@components/common/Button';\nimport { AccessoryButton } from '@components/common/AccessoryButton';\nimport { TextButton } from '@components/common/TextButton';\nimport { MailRow } from '@components/ProofGen/MailRow';\nimport { fetchEmailsRaw, fetchEmailList, RawEmailResponse } from '@hooks/useGmailClient';\nimport useGoogleAuth from '@hooks/useGoogleAuth';\nimport useProofGenSettings from '@hooks/useProofGenSettings';\nimport { EmailInputStatus, PaymentPlatformType, PaymentPlatform } from '@helpers/types';\nimport { platformStrings } from \"@helpers/strings\";\nimport { VENMO_EMAIL_FILTER, HDFC_EMAIL_FULTER, GARANTI_EMAIL_FULTER } from '@helpers/constants';\nimport googleButtonSvg from '../../assets/images/google_dark_button.svg';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface MailTableProps {\n  paymentPlatform: PaymentPlatformType;\n  setEmailFull: (emailFull: string) => void;\n  handleVerifyEmailClicked: () => void;\n  emailInputStatus: string;\n  isProofModalOpen: boolean;\n};\n\nexport const MailTable: React.FC<MailTableProps> = ({\n  paymentPlatform,\n  setEmailFull,\n  handleVerifyEmailClicked,\n  emailInputStatus,\n  isProofModalOpen\n}) => {\n  /*\n   * Context\n   */\n\n  const {\n    googleAuthToken,\n    isGoogleAuthed,\n    loggedInGmail,\n    scopesApproved,\n    googleLogIn,\n    googleLogOut,\n  } = useGoogleAuth();\n\n  const { setIsEmailModeAuth } = useProofGenSettings();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * State\n   */\n\n  const [fetchedEmails, setFetchedEmails] = useState<RawEmailResponse[]>([]);\n\n  const [selectedIndex, setSelectedIndex] = useState<number | null>(null);\n\n  const [ctaButtonTitle, setCtaButtonTitle] = useState<string>(\"\");\n\n  /*\n   * Handlers\n   */\n\n  const handleRowClick = (index: number) => {\n    setSelectedIndex(index);\n\n    const email = fetchedEmails[index];\n    setEmailFull(email.decodedContents);\n  };\n\n  const handleEmailModeChanged = (checked: boolean) => {\n    if (setIsEmailModeAuth) {\n      setIsEmailModeAuth(checked);\n    }\n  };\n\n  const handleLogoutPressed = () => {\n    if (googleLogOut) {\n      googleLogOut();\n    }\n\n    setFetchedEmails([]);\n  }\n\n  /*\n   * Helpers\n   */\n\n  function formatDateTime(unixTimestamp: string): string {\n    const date = new Date(Number(unixTimestamp));\n    const now = new Date();\n\n    const isToday = date.getDate() === now.getDate() &&\n                    date.getMonth() === now.getMonth() &&\n                    date.getFullYear() === now.getFullYear();\n\n    if (isToday) {\n      return date.toLocaleTimeString('en-US', {\n        hour: 'numeric',\n        minute: '2-digit',\n        hour12: true\n      });\n    } else {\n      switch (paymentPlatform) {\n        case PaymentPlatform.VENMO:\n          return date.toLocaleDateString('en-US', {\n            month: 'numeric',\n            day: 'numeric'\n          });\n\n        case PaymentPlatform.HDFC:\n          return date.toLocaleDateString('en-IN', {\n            month: 'numeric',\n            day: 'numeric'\n          });\n\n        case PaymentPlatform.GARANTI:\n          return date.toLocaleDateString('en-TR', {\n            month: 'numeric',\n            day: 'numeric'\n          });\n\n        default:\n          throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n      }\n    }\n  };\n\n  const rowPlatformText = () => {\n   switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return 'Venmo';\n\n      case PaymentPlatform.HDFC:\n        return 'HDFC';\n      \n      case PaymentPlatform.GARANTI:\n        return 'Garanti';\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n  };\n\n  const rowSubjectText = (rawEmail: RawEmailResponse) => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return rawEmail.subject;\n\n      case PaymentPlatform.HDFC:\n        const parsedAmountRegex = /Rs\\.(\\d+\\.\\d+)/;\n        const parsedRecipientRegex = /to VPA (\\S+?@\\S+?) /;\n\n        const parsedAmountMatch = rawEmail.decodedContents.match(parsedAmountRegex);\n        const parsedRecipientMatch = rawEmail.decodedContents.match(parsedRecipientRegex);\n\n        const parsedAmount = parsedAmountMatch ? parsedAmountMatch[1] : \"Amount not found\";\n        const parsedRecipient = parsedRecipientMatch ? parsedRecipientMatch[1] : \"Recipient not found\";\n\n        return `You have done a UPI txn (${parsedRecipient}: ₹${parsedAmount})`;\n      \n      case PaymentPlatform.GARANTI:\n        return rawEmail.subject;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n  };\n\n  async function fetchData() {\n    let filter = '';\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        filter = VENMO_EMAIL_FILTER;\n        break;\n\n      case PaymentPlatform.HDFC:\n        filter = HDFC_EMAIL_FULTER;\n        break;\n\n      case PaymentPlatform.GARANTI:\n        filter = GARANTI_EMAIL_FULTER;\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    try {\n      const emailListResponse = await fetchEmailList(googleAuthToken.access_token, {\n        'q': filter\n      });\n\n      const emailResponseMessages = emailListResponse.messages;\n      if (emailResponseMessages?.length > 0) {\n        const emailIds = emailResponseMessages.map(message => message.id);\n        const emails = await fetchEmailsRaw(googleAuthToken.access_token, emailIds);\n\n        setFetchedEmails(emails);\n      } else {\n        setFetchedEmails([]);\n      }\n    } catch (error) {\n      console.error('Error in fetching data:', error);\n    }\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (googleAuthToken && scopesApproved) {\n      fetchData();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [googleAuthToken, scopesApproved]);\n\n  useEffect(() => {\n    setSelectedIndex(null);\n    setEmailFull('');\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [fetchedEmails]);\n\n  useEffect(() => {\n    switch (emailInputStatus) {\n      case EmailInputStatus.DEFAULT:\n        setCtaButtonTitle(\"Select Email\");\n        break;\n      \n      case EmailInputStatus.INVALID_SIGNATURE:\n        switch (paymentPlatform) {\n          case PaymentPlatform.VENMO:\n            setCtaButtonTitle(\"Invalid email: must be from Venmo\");\n            break;\n\n          case PaymentPlatform.HDFC:\n            setCtaButtonTitle(\"Invalid email: must be from HDFC\");\n            break;\n\n          case PaymentPlatform.GARANTI:\n            setCtaButtonTitle(\"Invalid email: must be from Garanti\");\n            break;\n\n          default:\n            throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n        }\n      break;\n\n    case EmailInputStatus.INVALID_SUBJECT:\n      switch (paymentPlatform) {\n        case PaymentPlatform.VENMO:\n          setCtaButtonTitle(\"Invalid email: must contain 'You Paid'\");\n          break;\n\n        case PaymentPlatform.HDFC:\n          setCtaButtonTitle(\"Invalid email: must be contain 'You have done a UPI txn'\");\n          break;\n\n        case PaymentPlatform.GARANTI:\n          setCtaButtonTitle(\"Invalid email: must contain 'Para Transferi Bilgilendirmesi'\");\n          break;\n\n        default:\n          throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n      }\n      break;\n\n    case EmailInputStatus.INVALID_DOMAIN_KEY:\n      setCtaButtonTitle(\"Invalid email: must be from 2024\");\n      break;\n\n    case EmailInputStatus.VALID:\n      default:\n        if (!isProofModalOpen) {\n          setCtaButtonTitle(\"Validate Email\");\n        } else {\n          setCtaButtonTitle(\"Validating Email\");\n        }\n        break;\n    }\n\n  }, [emailInputStatus, paymentPlatform, isProofModalOpen]);\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      {!isGoogleAuthed ? (\n        <ErrorContainer>\n          <ThemedText.DeprecatedBody textAlign=\"center\">\n            <MailIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n\n            <div>\n             { platformStrings.getForPlatform(paymentPlatform, 'SIGN_IN_WITH_GOOGLE_INSTRUCTIONS') }\n              <Link\n                href=\"https://docs.zkp2p.xyz/onramp-guides/on-ramping/privacy-and-safety\"\n                target=\"_blank\"\n              >\n                Privacy and Safety ↗\n              </Link>\n            </div>\n          </ThemedText.DeprecatedBody>\n\n          <LoginOrUploadButtonContainer>\n            <Button\n              onClick={googleLogIn}\n              height={48}\n              svg={googleButtonSvg}\n            >\n              Sign in with Google\n            </Button>\n\n            {\n              !isMobile &&\n              <TextButton\n                onClick={() => handleEmailModeChanged(false)}\n                height={24}\n                title={'Or Upload'}\n              />\n            }\n\n          </LoginOrUploadButtonContainer>\n        </ErrorContainer>\n      ) : (\n        <LoggedInContainer>\n          <TitleContainer>\n            <ThemedText.SubHeader textAlign=\"left\">\n              Google Mail\n            </ThemedText.SubHeader>\n\n            <AccessoryButton\n              onClick={handleLogoutPressed}\n              height={36}\n              title={'Logout'}\n              icon={isMobile ? undefined : 'logout'}\n            />\n          </TitleContainer>\n\n          <TitleAndTableContainer>\n            <TitleAndOAuthContainer>\n              <EmailAddressTitle>\n                <EmailLabel>\n                  {!isMobile && (\n                    <EmailLabelTitle>Logged in as:&nbsp;</EmailLabelTitle>\n                  )}\n\n                  <EmailLabelValue>{loggedInGmail}</EmailLabelValue>\n                </EmailLabel>\n              </EmailAddressTitle>\n\n              <AccessoryButton\n                onClick={fetchData}\n                height={36}\n                title={'Refresh'}\n                icon={isMobile ? undefined : 'refresh'}\n              />\n            </TitleAndOAuthContainer>\n\n            {fetchedEmails.length === 0 ? (\n              <EmptyMailContainer>\n                <StyledInbox />\n                <ThemedText.SubHeaderSmall textAlign=\"center\" lineHeight={1.3}>\n                  { platformStrings.getForPlatform(paymentPlatform, 'NO_EMAILS_ERROR') }\n                </ThemedText.SubHeaderSmall>\n              </EmptyMailContainer>\n            ) : (\n              <Table>\n                {fetchedEmails.map((email, index) => (\n                  <MailRow\n                    key={index}\n                    platformText={rowPlatformText()}\n                    subjectText={rowSubjectText(email)}\n                    dateText={formatDateTime(email.internalDate)}\n                    isSelected={index === selectedIndex}\n                    isLastRow={index === fetchedEmails.length - 1}\n                    onRowClick={() => handleRowClick(index)}\n                  />\n                ))}\n              </Table>\n            )}\n          </TitleAndTableContainer>\n\n          <ButtonContainer>\n            <Button\n              disabled={emailInputStatus !== EmailInputStatus.VALID || isProofModalOpen}\n              onClick={handleVerifyEmailClicked}\n            >\n              {ctaButtonTitle}\n            </Button>\n          </ButtonContainer>\n        </LoggedInContainer>\n      )}\n    </Container>\n  )\n};\n\nconst EmptyMailContainer = styled.div`\n  display: flex;\n  width: 100%;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 1.9rem 0rem;\n  max-width: 75%;\n  margin: auto;\n  gap: 1rem;\n`;\n\nconst Container = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  align-self: flex-start;\n  justify-content: center;\n\n  background-color: ${colors.container};\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 50vh;\n  min-height: 25vh;\n  line-height: 1.3;\n  gap: 36px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst MailIcon = styled(Mail)`\n  ${IconStyle}\n`;\n\nconst LoggedInContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  padding: 1.5rem;\n`;\n\nconst TitleContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: flex-end;\n  padding: 0px 1rem;\n`;\n\nconst TitleAndTableContainer = styled.div`\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 8px;\n  background-color: #090D14;\n`;\n\nconst TitleAndOAuthContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n  padding: 1rem 1.5rem;\n`;\n\nconst EmailAddressTitle = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nconst EmailLabel = styled.label`\n  display: flex;\n  font-size: 14px;\n  color: #FFFFFF;\n  align-items: center;\n`;\n\nconst EmailLabelTitle = styled.span`\n  font-size: 14px;\n  color: #6C757D;\n`;\n\nconst EmailLabelValue = styled.span`\n  font-size: 14px;\n  color: #FFFFFF;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  color: #616161;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n  padding-top: 1rem;\n`;\n\nconst LoginOrUploadButtonContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  margin: auto;\n  gap: 1rem;\n`;\n\nconst StyledInbox = styled(Inbox)`\n  color: #FFF;\n  width: 28px;\n  height: 28px;\n`;\n"
  },
  {
    "path": "client/src/components/ProofGen/ProofForm.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport {\n  CircuitType,\n  generate_inputs,\n  insert13Before10,\n  ICircuitInputs\n} from '@zkp2p/circuits-circom-helpers/generate_input';\n// import { wrap } from 'comlink';\nimport crypto from 'crypto';\n\nimport { Col } from \"@components/legacy/Layout\";\nimport { EmailInputStatus, ProofGenerationStatus } from  \"@helpers/types\";\nimport { ValidateEmail } from '@components/modals/ValidateEmail';\nimport { MailTable } from '@components/ProofGen/MailTable';\nimport { UploadEmail } from '@components/ProofGen/UploadEmail';\n// import { HOSTED_FILES_PATH } from \"@helpers/constants\";\n// import { downloadProofFiles } from \"@helpers/zkp\";\nimport { PaymentPlatformType, PaymentPlatform } from '@helpers/types';\nimport {\n  validateAndSanitizeEmailSubject,\n  validateEmailDomainKey,\n  validateDKIMSignature as validateVenmoDKIMSignature\n} from '@components/ProofGen/validation/venmo';\nimport {\n  validateDKIMSignature as validateHdfcDKIMSignature,\n  sanitizeAndProcessHdfcEmailSubject\n} from '@components/ProofGen/validation/hdfc';\nimport {\n  validateDKIMSignature as validateGarantiDKIMSignature,\n  sanitizeAndProcessGarantiEmailSubject\n} from '@components/ProofGen/validation/garanti';\nimport useLocalStorage from '@hooks/useLocalStorage';\nimport useProofGenSettings from '@hooks/useProofGenSettings';\nimport useRegistration from '@hooks/venmo/useRegistration';\nimport useRemoteProofGen from '@hooks/useRemoteProofGen';\nimport { colors } from '@theme/colors';\n\n\ninterface ProofGenerationFormProps {\n  paymentPlatformType: PaymentPlatformType;\n  circuitType: CircuitType;\n  circuitRemoteFilePath: string;\n  circuitInputs: string;\n  remoteProofGenEmailType: string;\n  proof: string;\n  publicSignals: string;\n  setProof: (proof: string) => void;\n  setPublicSignals: (publicSignals: string) => void;\n  bodyHashProof: string;\n  bodyHashPublicSignals: string;\n  setBodyHashProof: (proof: string) => void;\n  setBodyHashPublicSignals: (publicSignals: string) => void;\n  submitTransactionStatus: string;\n  isSubmitMining: boolean;\n  isSubmitSuccessful: boolean;\n  handleSubmitVerificationClick?: () => void;\n  onVerifyEmailCompletion?: () => void;\n  transactionAddress?: string | null;\n}\n\nexport const ProofGenerationForm: React.FC<ProofGenerationFormProps> = ({\n  paymentPlatformType,\n  circuitType,\n  circuitRemoteFilePath,\n  circuitInputs,\n  remoteProofGenEmailType,\n  proof,\n  publicSignals,\n  setProof,\n  setPublicSignals,\n  bodyHashProof,\n  bodyHashPublicSignals,\n  setBodyHashProof,\n  setBodyHashPublicSignals,\n  submitTransactionStatus,\n  isSubmitMining,\n  isSubmitSuccessful,\n  handleSubmitVerificationClick,\n  onVerifyEmailCompletion,\n  transactionAddress,\n}) => {\n  var Buffer = require(\"buffer/\").Buffer; // note: the trailing slash is important!\n\n  /*\n   * Context\n   */\n  const {\n    isProvingTypeFast,\n    setIsInputModeDrag,\n    isEmailModeAuth,\n  } = useProofGenSettings();\n  const { setExtractedVenmoId } = useRegistration();\n\n  /*\n   * State\n   */\n\n  const [emailFull, setEmailFull] = useState<string>(\"\");\n\n  const [emailHash, setEmailHash] = useState<string>(\"\");\n  const [storedProofValue, setStoredProofValue] = useLocalStorage<string>(`${emailHash}_PROOF`, '');\n  const [storedSignalsValue, setStoredSignalsValue] = useLocalStorage<string>(`${emailHash}_SIGNALS`, '');\n  const [storedBodyHashProofValue, setStoredBodyHashProofValue] = useLocalStorage<string>(`${emailHash}_BODY_PROOF`, '');\n  const [storedBodyHashSignalsValue, setStoredBodyHashSignalsValue] = useLocalStorage<string>(`${emailHash}_BODY_SIGNALS`, '');\n\n  const [shouldShowVerificationModal, setShouldShowVerificationModal] = useState<boolean>(false);\n\n  const [emailInputStatus, setEmailInputStatus] = useState<string>(EmailInputStatus.DEFAULT);\n  const [proofGenStatus, setProofGenStatus] = useState(ProofGenerationStatus.NOT_STARTED);\n\n  const [provingFailureErrorCode, setProvingFailureErrorCode] = useState<number | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  const {\n    data: remoteGenerateProofResponse,\n    // loading: isRemoteGenerateProofLoading,\n    error: remoteGenerateProofError,\n    fetchData: remoteGenerateProof\n  } = useRemoteProofGen({\n    paymentType: paymentPlatformType,\n    circuitType: remoteProofGenEmailType,\n    emailBody: emailFull,\n    intentHash: circuitInputs,\n  });\n\n  const {\n    data: remoteBodyHashProofResponse,\n    // loading: isRemoteGenerateBodyHashProofLoading,\n    error: remoteBodyHashProofError,\n    fetchData: remoteGenerateBodyHashProof\n  } = useRemoteProofGen({\n    paymentType: paymentPlatformType,\n    circuitType: \"body_suffix_hasher\",\n    emailBody: emailFull,\n    intentHash: circuitInputs,\n  });\n\n  useEffect(() => {\n    console.log(\"remoteGenerateProofResponse\", remoteGenerateProofResponse);\n    if (remoteGenerateProofResponse) {\n      processRemoteProofGenerationResponse(remoteGenerateProofResponse);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [remoteGenerateProofResponse]);\n\n  useEffect(() => {\n    console.log(\"remoteBodyHashProofResponse\", remoteBodyHashProofResponse);\n    if (remoteBodyHashProofResponse) {\n      processRemoteProofGenerationResponse(remoteBodyHashProofResponse, true);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [remoteBodyHashProofResponse]);\n\n  useEffect(() => {\n    console.log(\"Status Check\", storedBodyHashProofValue, storedBodyHashSignalsValue, storedProofValue, storedSignalsValue);\n\n    switch (paymentPlatformType) {\n      case PaymentPlatform.VENMO:\n        if (storedProofValue && storedSignalsValue) {\n          console.log(\"Update Proof Gen Status\");\n          setProofGenStatus(ProofGenerationStatus.TRANSACTION_CONFIGURED);\n        }\n        break;\n\n      case PaymentPlatform.HDFC:\n        if (storedProofValue && storedSignalsValue) {\n          console.log(\"Update Proof Gen Status\");\n          setProofGenStatus(ProofGenerationStatus.TRANSACTION_CONFIGURED);\n        }\n        break;\n\n      case PaymentPlatform.GARANTI:\n        if (storedBodyHashProofValue && storedBodyHashSignalsValue && storedProofValue && storedSignalsValue) {\n          console.log(\"Update Proof Gen Status\");\n          setProofGenStatus(ProofGenerationStatus.TRANSACTION_CONFIGURED);\n        }\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatformType}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [storedBodyHashProofValue, storedBodyHashSignalsValue, storedProofValue, storedSignalsValue]);\n\n  useEffect(() => {\n    if (remoteGenerateProofError) {\n      setProvingFailureErrorCode(remoteGenerateProofError.code);\n\n      setProofGenStatus(ProofGenerationStatus.ERROR_FAILED_TO_PROVE);\n    }\n  }, [remoteGenerateProofError, remoteBodyHashProofError]);\n\n  useEffect(() => {\n    async function verifyEmail() {\n      if (emailFull) {\n        switch (paymentPlatformType) {\n          case PaymentPlatform.VENMO:\n            // validateAndSanitizeEmailSubject\n            try {\n              const { sanitizedEmail, didSanitize } = validateAndSanitizeEmailSubject(emailFull);\n    \n              if (didSanitize) {\n                setEmailFull(sanitizedEmail);\n                return;\n              };\n            } catch (e) {\n              setEmailInputStatus(EmailInputStatus.INVALID_SUBJECT);\n              return;\n            }\n    \n            // validateEmailDomainKey\n            try {\n              const emailReceivedYear = validateEmailDomainKey(emailFull);\n    \n              if (emailReceivedYear.emailRaw !== \"2024\" && emailReceivedYear.emailRaw !== \"2023\") {\n                setEmailInputStatus(EmailInputStatus.INVALID_DOMAIN_KEY);\n                return;\n              }\n            } catch (e) {\n              setEmailInputStatus(EmailInputStatus.INVALID_SIGNATURE);\n              return;\n            }\n    \n            // validateVenmoDKIMSignature\n            try {\n              await validateVenmoDKIMSignature(emailFull);\n            } catch (e) {\n              setEmailInputStatus(EmailInputStatus.INVALID_SIGNATURE);\n              return;\n            }\n            break;\n\n          case PaymentPlatform.HDFC:\n            // sanitizeAndProcessHdfcEmailSubject\n            try {\n              const { processedEmail, didSanitize } = sanitizeAndProcessHdfcEmailSubject(emailFull);\n    \n              if (didSanitize) {\n                setEmailFull(processedEmail);\n                return;\n              };\n            } catch (e) {\n              setEmailInputStatus(EmailInputStatus.INVALID_SUBJECT);\n              return;\n            }\n\n            // validateHdfcDKIMSignature\n            try {\n              await validateHdfcDKIMSignature(emailFull);\n            } catch (e) {\n              setEmailInputStatus(EmailInputStatus.INVALID_SIGNATURE);\n              return;\n            }\n            break;\n\n          case PaymentPlatform.GARANTI:\n            try {\n              const { processedEmail, didSanitize } = sanitizeAndProcessGarantiEmailSubject(emailFull);\n              if (didSanitize) {\n                setEmailFull(processedEmail);\n                return;\n              };\n            } catch (e) {\n              setEmailInputStatus(EmailInputStatus.INVALID_SUBJECT);\n              return;\n            }\n\n            try {\n              await validateGarantiDKIMSignature(emailFull);\n            } catch (e) {\n              console.log(e);\n              setEmailInputStatus(EmailInputStatus.INVALID_SIGNATURE);\n              return;\n            }\n            break;\n\n          default:\n            throw new Error(`Unknown payment platform: ${paymentPlatformType}`);\n        }\n  \n        const hash = crypto.createHash('sha256');\n        hash.update(emailFull);\n        const hashedEmail = hash.digest('hex');\n        setEmailHash(hashedEmail);\n\n        setEmailInputStatus(EmailInputStatus.VALID);\n      } else {\n        setEmailHash(\"\");\n        setEmailInputStatus(EmailInputStatus.DEFAULT);\n      }\n    }\n  \n    verifyEmail();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [emailFull]);\n\n  useEffect(() => {\n    if (storedProofValue && storedSignalsValue) {\n      setProof(storedProofValue);\n      setPublicSignals(storedSignalsValue);\n    }\n  }, [storedProofValue, storedSignalsValue, setProof, setPublicSignals]);\n\n  /*\n   * Handlers\n   */\n\n  const handleVerifyEmailClicked = async () => {\n    setShouldShowVerificationModal(true);\n\n    if (storedProofValue && storedSignalsValue && storedBodyHashProofValue && storedBodyHashSignalsValue) {\n      setProof(storedProofValue);\n      setPublicSignals(storedSignalsValue);\n      setBodyHashProof(storedBodyHashProofValue);\n      setBodyHashPublicSignals(storedBodyHashSignalsValue);\n\n      setProofGenStatus(ProofGenerationStatus.TRANSACTION_CONFIGURED);\n    } else {\n      if (isProvingTypeFast) {\n        if (paymentPlatformType === PaymentPlatform.GARANTI) {\n          await Promise.all([\n            generateFastProof(remoteGenerateProof),\n            generateFastProof(remoteGenerateBodyHashProof),\n          ]);\n        } else {\n          await generateFastProof(remoteGenerateProof);\n        }\n      } else {\n        await generatePrivateProof();\n      }\n    }\n\n    const isCircuitTypeRegistration = circuitType === CircuitType.EMAIL_VENMO_REGISTRATION;\n    if (isCircuitTypeRegistration) {\n      extractAndRecordVenmoId(emailFull);\n    }\n  };\n\n  const handleModalBackClicked = () => {\n    setShouldShowVerificationModal(false);\n  };\n\n  /*\n   * Helpers\n   */\n\n  const getModalCtaTitle = () => {\n    switch (circuitType) {\n      case (CircuitType.EMAIL_VENMO_REGISTRATION):\n        return 'Complete Registration';\n\n      case (CircuitType.EMAIL_VENMO_SEND):\n      default:\n        return 'Complete Order';\n    }\n  };\n\n  const extractAndRecordVenmoId = (email: string) => {\n    let actorId: string | null = null;\n\n    const regex = /actor_id=3D(\\d{17,})/;\n    const match = email.match(regex);\n\n    if (setExtractedVenmoId && match && match[1]) {\n        actorId = match[1];\n\n        setExtractedVenmoId(actorId);\n    } else {\n        console.log(\"No actor ID found.\");\n    }\n  };\n\n  const setEmailAndToggleInputMode = (email: string) => {\n    setEmailFull(email);\n\n    if (setIsInputModeDrag) {\n      setIsInputModeDrag(false);\n    }\n  };\n\n  /*\n   * Proof Generation\n   */\n\n  const generateFastProof = async (callback: any) => {\n    setProofGenStatus(ProofGenerationStatus.UPLOADING_PROOF_FILES)\n\n    await new Promise(resolve => setTimeout(resolve, 500))\n\n    setProofGenStatus(ProofGenerationStatus.GENERATING_PROOF);\n\n    console.time(\"remote-proof-gen\");\n    await callback();\n    console.timeEnd(\"remote-proof-gen\");\n  }\n\n  const processRemoteProofGenerationResponse = (response: any, isBodyHashProof: boolean = false) => {\n    setAndStoreProvingState(response.proof, response.public_values, isBodyHashProof)\n  }\n\n  const generatePrivateProof = async () => {\n    setProofGenStatus(ProofGenerationStatus.GENERATING_INPUT);\n\n    let input: ICircuitInputs | undefined;\n    input = await generateCircuitInputs();\n    if (!input) {\n      setProofGenStatus(ProofGenerationStatus.ERROR_BAD_INPUT);\n      return;\n    }\n\n    setProofGenStatus(ProofGenerationStatus.DOWNLOADING_PROOF_FILES);\n    await downloadProvingKeys();\n\n    setProofGenStatus(ProofGenerationStatus.GENERATING_PROOF);\n    const { proof, publicSignals } = await generateProofWithInputs(input);\n    if (!proof || !publicSignals) {\n      setProofGenStatus(ProofGenerationStatus.ERROR_FAILED_TO_PROVE);\n      return;\n    }\n\n    const stringifiedProof = JSON.stringify(proof);\n    const stringifiedSignals = JSON.stringify(publicSignals);\n    setAndStoreProvingState(stringifiedProof, stringifiedSignals);\n\n    setProofGenStatus(ProofGenerationStatus.TRANSACTION_CONFIGURED);\n  }\n\n  const generateCircuitInputs = async () => {\n    const formattedArray = await insert13Before10(Uint8Array.from(Buffer.from(emailFull)));\n\n    // Due to a quirk in carriage return parsing in JS, we need to manually edit carriage returns to match DKIM parsing\n    // console.log(\"formattedArray\", formattedArray)\n    // console.log(\"circuitType\", circuitType)\n    // console.log(\"circuitInputs\", circuitInputs)\n\n    let input: ICircuitInputs;\n    try {\n      input = await generate_inputs(\n        Buffer.from(formattedArray.buffer),\n        circuitType,\n        circuitInputs,\n        \"1\", // Nonce, used for server side proving\n      );\n    } catch (e) {\n      console.log(\"Error generating input\", e);\n      return undefined;\n    }\n\n    console.log(\"Generated input:\", JSON.stringify(input));\n\n    return input;\n  }\n\n  const downloadProvingKeys = async () => {\n    console.time(\"download-keys\");\n    // await downloadProofFiles(HOSTED_FILES_PATH, circuitRemoteFilePath, () => {});\n    console.timeEnd(\"download-keys\");\n  }\n\n  const generateProofWithInputs = async (input: ICircuitInputs) => {\n    console.time(\"client-proof-gen\");\n\n    // Create worker and run async\n    // const worker = new Worker('./ProvingWorker', { name: 'runGenerateProofWorker', type: 'module' })\n    // const { generateProof } = wrap<import('./ProvingWorker').RunGenerateProofWorker>(worker)\n    // const { proof, publicSignals } = await generateProof(input, circuitRemoteFilePath);\n\n    console.timeEnd(\"client-proof-gen\");\n\n    return { proof, publicSignals }\n  }\n\n  const setAndStoreProvingState = (\n    proofString: string,\n    publicSignalsString: string,\n    isBodyHashProof: boolean = false\n  ) => {\n    // Generate email hash to cache proof and signals\n    const hash = crypto.createHash('sha256');\n    hash.update(emailFull);\n    const hashedEmail = hash.digest('hex');\n    setEmailHash(hashedEmail);\n\n    // Set proof and public signals\n    if (isBodyHashProof) {\n      setBodyHashProof(proofString);\n      setStoredBodyHashProofValue(proofString);\n\n      setBodyHashPublicSignals(publicSignalsString);\n      setStoredBodyHashSignalsValue(publicSignalsString);\n    } else {\n      setProof(proofString);\n      setStoredProofValue(proofString);\n\n      setPublicSignals(publicSignalsString);\n      setStoredSignalsValue(publicSignalsString);\n    }\n  }\n\n  /*\n   * Components\n   */\n\n  return (\n    <Container>\n      {shouldShowVerificationModal && (\n        <ValidateEmail\n          title={\"Verify Email\"}\n          proof={proof}\n          publicSignals={publicSignals}\n          onBackClick={handleModalBackClicked}\n          onVerifyEmailCompletion={onVerifyEmailCompletion}\n          status={proofGenStatus}\n          circuitType={circuitType}\n          buttonTitle={getModalCtaTitle()}\n          submitTransactionStatus={submitTransactionStatus}\n          isSubmitMining={isSubmitMining}\n          isSubmitSuccessful={isSubmitSuccessful}\n          setProofGenStatus={setProofGenStatus}\n          handleSubmitVerificationClick={handleSubmitVerificationClick}\n          transactionAddress={transactionAddress}\n          provingFailureErrorCode={provingFailureErrorCode}\n        />\n      )}\n\n      <VerticalDivider/>\n\n      {isEmailModeAuth ? (\n        <MailTable\n          paymentPlatform={paymentPlatformType}\n          setEmailFull={setEmailAndToggleInputMode}\n          handleVerifyEmailClicked={handleVerifyEmailClicked}\n          emailInputStatus={emailInputStatus}\n          isProofModalOpen={shouldShowVerificationModal}\n        />\n      ) : (\n        <UploadEmail\n          paymentPlatform={paymentPlatformType}\n          email={emailFull}\n          setEmail={setEmailFull}\n          handleVerifyEmailClicked={handleVerifyEmailClicked}\n          emailInputStatus={emailInputStatus}\n          isProofModalOpen={shouldShowVerificationModal}\n        />\n      )}\n    </Container>\n  );\n};\n\nconst Container = styled(Col)`\n`;\n\nconst VerticalDivider = styled.div`\n  height: 24px;\n  border-left: 1px solid ${colors.defaultBorderColor};\n  margin: 0 auto;\n`;\n"
  },
  {
    "path": "client/src/components/ProofGen/ProofSettings.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components/macro';\n\nimport { LabeledSwitch } from \"@components/common/LabeledSwitch\";\nimport { commonStrings } from \"@helpers/strings\";\nimport useProofGenSettings from '@hooks/useProofGenSettings';\n\n \nexport const ProofSettings: React.FC = () => {\n  /*\n   * Context\n   */\n\n  const {\n    isProvingTypeFast,\n    setIsProvingTypeFast,\n  } = useProofGenSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleProvingTypeChanged = (checked: boolean) => {\n    if (setIsProvingTypeFast) {\n      setIsProvingTypeFast(checked);\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TogglesContainer>\n        <ToggleWrapper>\n          <LabeledSwitch\n            switchChecked={isProvingTypeFast ?? true}\n            onSwitchChange={handleProvingTypeChanged}\n            checkedLabel={\"Fast\"}\n            uncheckedLabel={\"Private\"}\n            helperText={commonStrings.get('PROVING_TYPE_TOOLTIP')}\n          />\n        </ToggleWrapper>\n      </TogglesContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst TogglesContainer = styled.div`\n  display: grid;\n  grid-template-columns: 1fr;\n  align-items: center;\n  justify-items: flex-end\n`;\n\nconst ToggleWrapper = styled.div`\n  margin-right: calc(50% - 57px);\n`;\n"
  },
  {
    "path": "client/src/components/ProofGen/UploadEmail.tsx",
    "content": "import React, { useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { Paperclip } from 'react-feather';\n\nimport { Button } from \"@components/common/Button\";\nimport { Col } from \"@components/legacy/Layout\";\nimport { LabeledTextArea } from '@components/legacy/LabeledTextArea';\nimport { DragAndDropTextBox } from \"@components/common/DragAndDropTextBox\";\nimport { LabeledSwitch } from \"@components/common/LabeledSwitch\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { TextButton } from '@components/common/TextButton';\nimport { EmailInputStatus } from  \"@helpers/types/proofGeneration\";\nimport { PaymentPlatformType, PaymentPlatform } from '@helpers/types';\nimport { commonStrings } from \"@helpers/strings\";\nimport { PLACEHOLDER_EMAIL_BODY } from \"@helpers/placeholderEmailBody\";\nimport {\n  DOWNLOAD_AND_UPLOAD_EMAIL_INSTRUCTIONS_DOCS_LINK, \n  COPY_AND_PASTE_EMAIL_INSTRUCTIONS_DOCS_LINK \n} from \"@helpers/docUrls\";\nimport useProofGenSettings from '@hooks/useProofGenSettings';\nimport { useFileBrowser } from '@hooks/useFileBrowser';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\n\n\ninterface UploadEmailProps {\n  paymentPlatform: PaymentPlatformType;\n  email: string;\n  setEmail: (email: string) => void;\n  handleVerifyEmailClicked: () => void;\n  emailInputStatus: string;\n  isProofModalOpen: boolean;\n};\n\nexport const UploadEmail: React.FC<UploadEmailProps> = ({\n  paymentPlatform,\n  email,\n  setEmail,\n  handleVerifyEmailClicked,\n  emailInputStatus,\n  isProofModalOpen,\n}) => {\n  const fileInputRef = useRef<HTMLInputElement>(null);\n\n  /*\n   * Context\n   */\n\n  const {\n    isInputModeDrag,\n    setIsInputModeDrag,\n    setIsEmailModeAuth,\n  } = useProofGenSettings();\n\n  const { openFileDialog } = useFileBrowser();\n\n  /*\n   * State\n   */\n\n  const [ctaButtonTitle, setCtaButtonTitle] = useState<string>(\"\");\n\n  /*\n   * Handlers\n   */\n\n  const handleEmailInputTypeChanged = (checked: boolean) => {\n    if (setIsInputModeDrag) {\n      setIsInputModeDrag(checked);\n    }\n  };\n\n  const handleEmailModeChanged = (checked: boolean) => {\n    if (setIsEmailModeAuth) {\n      setIsEmailModeAuth(checked);\n    }\n  };\n\n  const handleFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {\n    const file = event.target.files?.[0];\n    if (file) {\n      if (file.name.endsWith(\".eml\")) {\n        const content = await file.text();\n        \n        setEmailAndToggleInputMode(content);\n      } else {\n        alert(\"Only .eml files are allowed.\");\n      }\n    }\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    switch (emailInputStatus) {\n      case EmailInputStatus.DEFAULT:\n        setCtaButtonTitle(\"Input email\");\n        break;\n      \n      case EmailInputStatus.INVALID_SIGNATURE:\n        switch (paymentPlatform) {\n          case PaymentPlatform.VENMO:\n            setCtaButtonTitle(\"Invalid email: must be from Venmo\");\n            break;\n\n          case PaymentPlatform.HDFC:\n            setCtaButtonTitle(\"Invalid email: must be from HDFC\");\n            break;\n\n          case PaymentPlatform.GARANTI:\n            setCtaButtonTitle(\"Invalid email: must be from Garanti\");\n            break;\n\n          default:\n            throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n        }\n        break;\n\n      case EmailInputStatus.INVALID_SUBJECT:\n        switch (paymentPlatform) {\n          case PaymentPlatform.VENMO:\n            setCtaButtonTitle(\"Invalid email: must contain 'You Paid'\");\n            break;\n\n          case PaymentPlatform.HDFC:\n            setCtaButtonTitle(\"Invalid email: must be contain 'You have done a UPI txn'\");\n            break;\n\n          case PaymentPlatform.GARANTI:\n            setCtaButtonTitle(\"Invalid email: must contain 'Para Transferi Bilgilendirmesi'\");\n            break;\n\n          default:\n            throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n        }\n        break;\n\n      case EmailInputStatus.INVALID_DOMAIN_KEY:\n        setCtaButtonTitle(\"Invalid email: must be from 2024\");\n        break;\n\n      case EmailInputStatus.VALID:\n      default:\n        if (!isProofModalOpen) {\n          setCtaButtonTitle(\"Validate Email\");\n        } else {\n          setCtaButtonTitle(\"Validating Email\");\n        }\n        break;\n    }\n\n  }, [emailInputStatus, paymentPlatform, isProofModalOpen]);\n\n  /*\n   * Helpers\n   */\n\n  const onFileDrop = async (file: File) => {\n    if (file.name.endsWith(\".eml\")) {\n      const content = await file.text();\n\n      setEmailAndToggleInputMode(content);\n    } else {\n      alert(\"Only .eml files are allowed.\");\n    }\n  };\n\n  const setEmailAndToggleInputMode = (email: string) => {\n    setEmail(email);\n\n    if (setIsInputModeDrag) {\n      setIsInputModeDrag(false);\n    }\n  };\n\n  /*\n   * Components\n   */\n\n  return (\n    <Container>\n      <EmailTitleRowAndTextAreaContainer>\n        <TitleAndEmailSwitchRowContainer>\n          <ThemedText.SubHeader textAlign=\"left\">\n            Upload Email\n          </ThemedText.SubHeader>\n\n          <LabeledSwitch\n            switchChecked={isInputModeDrag ?? true}\n            onSwitchChange={handleEmailInputTypeChanged}\n            checkedLabel={\"Drag\"}\n            uncheckedLabel={\"Paste\"}\n            helperText={commonStrings.get('INPUT_MODE_TOOLTIP')}\n          />\n        </TitleAndEmailSwitchRowContainer>\n\n        <UploadInstructionAndBrowseContainer>\n          <UploadInstruction>\n            <NumberedStep>\n              {isInputModeDrag ?\n                commonStrings.get('PROOF_FORM_UPLOAD_EMAIL_INSTRUCTIONS') :\n                commonStrings.get('PROOF_FORM_PASTE_EMAIL_INSTRUCTIONS')\n              }\n              <Link\n                href={isInputModeDrag \n                  ? DOWNLOAD_AND_UPLOAD_EMAIL_INSTRUCTIONS_DOCS_LINK\n                  : COPY_AND_PASTE_EMAIL_INSTRUCTIONS_DOCS_LINK\n                }\n                target=\"_blank\">\n                  Guide ↗\n              </Link>\n            </NumberedStep>\n          </UploadInstruction>\n\n          <BrowseButton onClick={() => openFileDialog(fileInputRef)}>\n            <StyledPaperclick />\n          </BrowseButton>\n          <input\n            type=\"file\"\n            ref={fileInputRef}\n            onChange={handleFileChange}\n            style={{ display: 'none' }}\n            accept=\".eml\"\n          />\n        </UploadInstructionAndBrowseContainer>\n\n        {isInputModeDrag ? (\n          <DragAndDropTextBox\n            onFileDrop={onFileDrop}\n          />\n        ) : (\n          <LabeledTextArea\n            label=\"\"\n            value={email}\n            placeholder={PLACEHOLDER_EMAIL_BODY}\n            onChange={(e) => {\n              setEmail(e.currentTarget.value);\n            }}\n            height={\"28vh\"}\n          />\n        )}\n      </EmailTitleRowAndTextAreaContainer>\n\n      <ButtonContainer>\n        <Button\n          disabled={emailInputStatus !== EmailInputStatus.VALID || isProofModalOpen}\n          onClick={handleVerifyEmailClicked}\n        >\n          {ctaButtonTitle}\n        </Button>\n\n      </ButtonContainer>\n      <LoginOrUploadButtonContainer>\n        <TextButton\n          onClick={() => handleEmailModeChanged(true)}\n          height={24}\n          title={'Or Sign in with Google'}\n        />\n      </LoginOrUploadButtonContainer>\n    </Container>\n  );\n};\n\nconst Container = styled(Col)`\n  gap: 1rem;\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n`;\n\nconst EmailTitleRowAndTextAreaContainer = styled(Col)`\n  gap: 1.5rem;\n`;\n\nconst TitleAndEmailSwitchRowContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding-left: 1rem;\n  margin-bottom: -16px;\n`;\n\nconst UploadInstructionAndBrowseContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 16px;\n`;\n\nconst UploadInstruction = styled.div`\n  flex-grow: 1;\n`;\n\nconst BrowseButton = styled.div`\n  background: rgba(255, 255, 255, 0.05);\n  border: none;\n  cursor: pointer;\n  border-radius: 12px;\n  width: 53px;\n  height: 53px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst StyledPaperclick = styled(Paperclip)`\n  width: 18px;\n  height: 18px;\n  color: #FFF;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n  padding-top: 1rem;\n`;\n\nconst LoginOrUploadButtonContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  margin: auto;\n  gap: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/ProofGen/validation/garanti.tsx",
    "content": "import { dkimVerify } from '@helpers/dkim';\n\n\nconst GARANTI_DOMAIN_KEYS = process.env.GARANTI_DOMAIN_KEYS;\nif (!GARANTI_DOMAIN_KEYS) {\n  throw new Error(\"GARANTI_DOMAIN_KEYS environment variable is not defined.\");\n}\n\nexport const validateDKIMSignature = async (raw_email: string) => {\n  var email: Buffer;\n  if (typeof raw_email === \"string\") {\n    email = Buffer.from(raw_email);\n  } else email = raw_email;\n\n  const keys = GARANTI_DOMAIN_KEYS.split(',');\n  let lastError: Error | null = null;\n\n  for (const key of keys) {\n    try {\n      const result = await dkimVerify(email, { key: key });\n\n      if (!result.results[0]) {\n        throw new Error(`No result found on dkim output ${result}`);\n      }\n\n      if (!result.results[0].publicKey) {\n        if (result.results[0].status.message) {\n          throw new Error(result.results[0].status.message);\n        } else {\n          throw new Error(`No public key found on generate_inputs result ${JSON.stringify(result)}`);\n        }\n      }\n\n      const { status } = result.results[0];\n      if (status.result === \"pass\") {\n        return result;\n      }\n\n      lastError = new Error(`DKIM verification failed with message: ${status.comment}`);\n    } catch (error: any) {\n      lastError = error;\n    }\n  }\n\n  if (lastError) {\n    throw lastError;\n  }\n};\n\nexport function sanitizeAndProcessGarantiEmailSubject(emailContent: string): { processedEmail: string, didSanitize: boolean } {\n  const subjectLinePattern = /^(Subject: ).*$/m;\n  const subjectLineMatch = emailContent.match(subjectLinePattern);\n\n  if (!subjectLineMatch) {\n    throw new Error('No subject line found in the email content.');\n  }\n\n  const subjectLine = subjectLineMatch[0];\n\n  const validationPattern = /^Subject: Para Transferi Bilgilendirmesi$/;\n  const sanitizePattern = /[ÅŸ|Åž|ÄŸ|Äž|Ä±|Ä°|Ã¼|Ãœ|Ã¶|Ã–|Ã§|Ã‡|Å|Å|Ã|Ä|Ä]/;\n\n  const isValid = validationPattern.test(subjectLine);\n  const needsSanitization = sanitizePattern.test(emailContent);\n\n  let processedEmail = emailContent;\n  if (needsSanitization) {\n    processedEmail = sanitizeGarantiAuthEmail(emailContent);\n  } else if (!isValid) {\n    throw new Error('The subject line is invalid and could not be sanitized.');\n  }\n\n  const didSanitize = processedEmail !== emailContent;\n  return {\n    processedEmail,\n    didSanitize\n  };\n};\n\nfunction sanitizeGarantiAuthEmail(emailContent: string): string {\n  // Special turkish characters: ç, ğ, ı, ö, ş, ü (and )\n  const mappings: { [key: string]: string } = {\n    'ÅŸ': 'ş',\n    'Åž': 'Ş',\n    'ÄŸ': 'ğ',\n    'Äž': 'Ğ',\n    'Ä±': 'ı',\n    'Ä°': 'İ',\n    'Ã¼': 'ü',\n    'Ãœ': 'Ü',\n    'Ã¶': 'ö',\n    'Ã–': 'Ö',\n    'Ã§': 'ç',\n    'Ã‡': 'Ç',\n    'Å': 'Ş',\n    'Å': 'ş',\n    'Ã': 'Ö',\n    'Ä': 'Ğ',\n    'Ä': 'ğ',\n  };\n\n  return Object.keys(mappings).reduce((acc, key) => {\n      const re = new RegExp(key, 'g');\n\n      return acc.replace(re, mappings[key]);\n  }, emailContent);\n};\n"
  },
  {
    "path": "client/src/components/ProofGen/validation/hdfc.tsx",
    "content": "import { dkimVerify } from '@helpers/dkim';\nimport { hdfcReplaceMessageIdWithXGoogleOriginalMessageId } from '@zkp2p/circuits-circom-helpers/preprocess';\n\n\nconst HDFC_DOMAIN_KEYS = process.env.HDFC_DOMAIN_KEYS;\nif (!HDFC_DOMAIN_KEYS) {\n  throw new Error(\"HDFC_DOMAIN_KEYS environment variable is not defined.\");\n}\n\nexport const validateDKIMSignature = async (raw_email: string) => {\n  var email: Buffer;\n  if (typeof raw_email === \"string\") {\n    email = Buffer.from(raw_email);\n  } else email = raw_email;\n\n  const keys = HDFC_DOMAIN_KEYS.split(',');\n  let lastError: Error | null = null;\n\n  for (const key of keys) {\n    try {\n      const result = await dkimVerify(email, { key: key });\n\n      if (!result.results[0]) {\n        throw new Error(`No result found on dkim output ${result}`);\n      }\n\n      if (!result.results[0].publicKey) {\n        if (result.results[0].status.message) {\n          throw new Error(result.results[0].status.message);\n        } else {\n          throw new Error(`No public key found on generate_inputs result ${JSON.stringify(result)}`);\n        }\n      }\n\n      const { status } = result.results[0];\n      if (status.result === \"pass\") {\n        return result;\n      }\n\n      lastError = new Error(`DKIM verification failed with message: ${status.comment}`);\n    } catch (error: any) {\n      lastError = error;\n    }\n  }\n\n  if (lastError) {\n    throw lastError;\n  }\n};\n\nexport function sanitizeAndProcessHdfcEmailSubject(emailContent: string): { processedEmail: string, didSanitize: boolean } {\n  const subjectLinePattern = /^(Subject: ).*$/m;\n  const subjectLineMatch = emailContent.match(subjectLinePattern);\n  \n  if (!subjectLineMatch) {\n    throw new Error('No subject line found in the email content.');\n  }\n  \n  const subjectLine = subjectLineMatch[0];\n\n  const validationPattern = /^Subject: =\\?UTF-8\\?q\\?=E2=9D=97_You_have_done_a_UPI_txn\\._Check_details!\\?=/;\n  const sanitizePattern = /^Subject: ❗ You have done a UPI txn. Check details!$/;\n\n  const isValid = validationPattern.test(subjectLine);\n  const needsSanitization = sanitizePattern.test(subjectLine);\n\n  let processedEmail = emailContent;\n  if (needsSanitization) {\n    processedEmail = sanitizeHdfcPasteEmail(emailContent);\n  } else if (!isValid) {\n    throw new Error('The subject line is invalid and could not be sanitized.');\n  }\n\n  // Update Google Original Message ID\n  const preProcessedEmail = hdfcReplaceMessageIdWithXGoogleOriginalMessageId(processedEmail);\n\n  const didSanitize = preProcessedEmail !== emailContent;\n\n  return {\n    processedEmail: preProcessedEmail,\n    didSanitize\n  };\n};\n\nfunction sanitizeHdfcPasteEmail(emailContent: string): string {\n  // Update Subject Line\n  const subjectLinePattern = /^(Subject: ).*$/m;\n  const subjectSanitizedEmail = emailContent.replace(subjectLinePattern, '$1=?UTF-8?q?=E2=9D=97_You_have_done_a_UPI_txn._Check_details!?=');\n\n  // Update to email address; If before the @ is caps, make it all caps\n  const toEmailPattern = /^(To: )([^@]+)@(.+)$/m;\n  const toEmailMatch = subjectSanitizedEmail.match(toEmailPattern);\n  if (!toEmailMatch) {\n      throw new Error('No to email address found in the email content.');\n  }\n  // Extract the relevant parts\n  const prefix = toEmailMatch[1];  // 'To: '\n  const localPart = toEmailMatch[2]; // Part before '@'\n  const domainPart = toEmailMatch[3]; // Part after '@'\n\n  const sanitizedToEmail = localPart === localPart.toUpperCase() ? `${prefix}${localPart}@${domainPart}`.toUpperCase() : `${prefix}${localPart}@${domainPart}`;\n  const toEmailSanitizedEmail = subjectSanitizedEmail.replace(toEmailPattern, sanitizedToEmail);  \n\n  // Update First Tab encoding occurrence\n  const firstTabEncodedPattern = `=09=09=09  <tr>`;\n  const tabEncodedSanitizedEmail = toEmailSanitizedEmail.replace(firstTabEncodedPattern,'\\t\\t\\t  <tr>');\n\n  // Update Second Tab encoding occurrence\n  const secondTabEncodedPattern = /=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09<tr>/g; // multiple occurrences\n  const secondTabEncodedSanitizedEmail = tabEncodedSanitizedEmail.replace(secondTabEncodedPattern, '\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr>');\n\n  // Update Third Tab encoding occurrence\n  const thirdTabEncodedPattern = `=09=09=09=09=09=09=09=09=09=09=09=09=09=09=09`;\n  const thirdTabEncodedSanitizedEmail = secondTabEncodedSanitizedEmail.replace(thirdTabEncodedPattern, '\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t=09');\n\n  // Update Fourth Tab encoding occurrence\n  const fourthTabEncodingPattern = `=09=09=09 =20`;\n  const fourthTabEncodedSanitizedEmail = thirdTabEncodedSanitizedEmail.replace(fourthTabEncodingPattern, '\\t\\t\\t =20');\n\n  // Update Fifth Tab encoding occurrence\n  const fifthTabEncodingPattern = `=09=09=09=09=09=09=09=09=09=09=09=09=09=09`;\n  const fifthTabEncodedSanitizedEmail = fourthTabEncodedSanitizedEmail.replace(fifthTabEncodingPattern, '\\t\\t\\t\\t\\t\\t\\t\\t=09');\n\n  return fifthTabEncodedSanitizedEmail;\n};\n"
  },
  {
    "path": "client/src/components/ProofGen/validation/venmo.tsx",
    "content": "import { dkimVerify } from '@helpers/dkim';\n\n\nconst VENMO_DOMAIN_KEYS = process.env.VENMO_DOMAIN_KEYS;\nif (!VENMO_DOMAIN_KEYS) {\n  throw new Error(\"VENMO_DOMAIN_KEYS environment variable is not defined.\");\n}\n\nexport const validateDKIMSignature = async (raw_email: string) => {\n  var email: Buffer;\n  if (typeof raw_email === \"string\") {\n    email = Buffer.from(raw_email);\n  } else email = raw_email;\n\n  const keys = VENMO_DOMAIN_KEYS.split(',');\n  let lastError: Error | null = null;\n\n  for (const key of keys) {\n    try {\n      const result = await dkimVerify(email, { key: key });\n\n      if (!result.results[0]) {\n        throw new Error(`No result found on dkim output ${result}`);\n      }\n\n      if (!result.results[0].publicKey) {\n        if (result.results[0].status.message) {\n          throw new Error(result.results[0].status.message);\n        } else {\n          throw new Error(`No public key found on generate_inputs result ${JSON.stringify(result)}`);\n        }\n      }\n\n      const { status } = result.results[0];\n      if (status.result === \"pass\") {\n        return result;\n      }\n\n      lastError = new Error(`DKIM verification failed with message: ${status.comment}`);\n    } catch (error: any) {\n      lastError = error;\n    }\n  }\n\n  if (lastError) {\n    throw lastError;\n  }\n};\n\nexport function validateEmailDomainKey(emailContent: string) {\n  const regexPattern = /Date:.*\\d{1,2}\\s+\\w{3}\\s+(\\d{4})\\s+/;\n\n  const match = emailContent.match(regexPattern);\n  if (!match) {\n    throw new Error(\"Year not found in the email content.\");\n  }\n\n  const year = match[1];\n  return { emailRaw: year };\n};\n\nexport function validateAndSanitizeEmailSubject(emailContent: string): { sanitizedEmail: string, didSanitize: boolean } {\n  const subjectLinePattern = /^Subject:.*$/m;\n  const subjectLineMatch = emailContent.match(subjectLinePattern);\n  \n  if (!subjectLineMatch) {\n    throw new Error('No subject line found in the email content.');\n  }\n  \n  const subjectLine = subjectLineMatch[0];\n\n  const validationPattern = /^Subject:\\s*You paid.*\\$\\d{1,3}(,\\d{3})*(\\.\\d{0,2})?$/;\n  const sanitizePattern = /^(Subject:)\\s*(.*?)(You paid.*\\$\\d{1,3}(,\\d{3})*(\\.\\d{0,2})?)$/;\n\n  const isValid = validationPattern.test(subjectLine);\n  const needsSanitization = sanitizePattern.test(subjectLine);\n\n  let sanitizedEmail = emailContent;\n  if (needsSanitization) {\n    sanitizedEmail = emailContent.replace(subjectLinePattern, subjectLine.replace(sanitizePattern, '$1 $3'));\n  } else if (!isValid) {\n    throw new Error('The subject line is invalid and could not be sanitized.');\n  }\n\n  const didSanitize = sanitizedEmail !== emailContent;\n\n  return {\n    sanitizedEmail,\n    didSanitize\n  };\n};\n"
  },
  {
    "path": "client/src/components/Registration/ReadOnlyInput.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\nimport QuestionHelper from '@components/common/QuestionHelper';\nimport { colors } from '@theme/colors';\n\n\ninterface ReadOnlyInputProps {\n  label: string;\n  name: string;\n  value?: string;\n  type?: string;\n  onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n  placeholder?: string;\n  inputLabel?: string;\n  accessoryLabel?: string;\n  helperText?: string;\n}\n\nexport const ReadOnlyInput: React.FC<ReadOnlyInputProps> = ({\n  label,\n  name,\n  value,\n  onFocus,\n  onKeyDown,\n  placeholder,\n  inputLabel,\n  type = \"text\",\n  accessoryLabel=\"\",\n  helperText=\"\",\n}: ReadOnlyInputProps) => {\n  ReadOnlyInput.displayName = \"Input\";\n\n  return (\n    <Container>\n      <LabelAndInputContainer>\n        <LabelAndTooltipContainer>\n          <Label htmlFor={name}>\n            {label}\n          </Label>\n\n          { helperText && (\n            <QuestionHelper\n              text={helperText}\n            />\n            )}\n        </LabelAndTooltipContainer>\n\n        <InputWrapper>\n          <StyledInput\n            type={type}\n            name={name}\n            id={name}\n            placeholder={placeholder}\n            value={value}\n            onChange={() => {}}\n            onFocus={onFocus}\n            onKeyDown={onKeyDown}\n            readOnly={true}\n          />\n        </InputWrapper>\n      </LabelAndInputContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  padding: 16px;\n  border-radius: 16px;\n  border: 1px solid ${colors.readOnlyBorderColor};\n    background-color: ${colors.readOnlyInputColor};\n\n  &:focus-within {\n    border-color: #CED4DA;\n    border-width: 1px;\n  }\n`;\n\nconst LabelAndInputContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n`;\n\nconst LabelAndTooltipContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  gap: 0.25rem;\n  margin-top: 4px;\n  align-items: center;\n  color: #CED4DA;\n`;\n\nconst Label = styled.label`\n  display: flex;\n  font-size: 14px;\n  font-weight: 550;\n`;\n\nconst InputWrapper = styled.div`\n  width: 100%;  \n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: stretch;\n  margin-top: 8px;\n`;\n\ninterface StyledInputProps {\n  readOnly?: boolean;\n}\n\nconst StyledInput = styled.input<StyledInputProps>`\n  width: 100%;\n  flex-grow: 1;\n  border: 0;\n  padding: 0;\n  color: #FFFFFF;\n  background-color: #131A2A;\n  font-size: 16px;\n\n  &:focus {\n    box-shadow: none;\n    outline: none;\n  }\n\n  &:placeholder {\n    color: #6C757D;\n  }\n\n  &[type='number'] {\n    -moz-appearance: textfield;\n    &::-webkit-inner-spin-button,\n    &::-webkit-outer-spin-button {\n      -webkit-appearance: none;\n      margin: 0;\n    }\n  }\n\n  ${({ readOnly }) => \n    readOnly && `\n      pointer-events: none;\n    `\n  }\n`;\n"
  },
  {
    "path": "client/src/components/Registration/garanti/ExistingRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { CheckCircle, Box } from 'react-feather';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { Col } from \"@components/legacy/Layout\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { ReadOnlyInput } from \"@components/Registration/ReadOnlyInput\";\nimport QuestionHelper from '@components/common/QuestionHelper';\nimport { PlatformSelector } from '@components/modals/PlatformSelector';\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { garantiStrings, commonStrings } from '@helpers/strings';\nimport useAccount from '@hooks/useAccount';\nimport useRegistration from '@hooks/garanti/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\n\n\ninterface ExistingRegistrationProps {\n  handleNewRegistrationClick: () => void;\n}\n \nexport const ExistingRegistration: React.FC<ExistingRegistrationProps> = ({\n  handleNewRegistrationClick\n}) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn } = useAccount();\n  const { registrationHash, isRegistered, garantiNftUri, garantiNftId, refetchGarantiNftId } = useRegistration();\n  const { garantiNftAddress, nftAbi } = useSmartContracts();\n\n  const [shouldConfigureMintSbtWrite, setShouldConfigureMintSbtWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // mintSBT()\n  //\n  const { config: writeSubmitSbtConfig } = usePrepareContractWrite({\n    address: garantiNftAddress,\n    abi: nftAbi,\n    functionName: 'mintSBT',\n    enabled: shouldConfigureMintSbtWrite\n  });\n\n  const {\n    data: submitMintSbtResult,\n    isLoading: isSubmitMintSbtLoading,\n    writeAsync: writeSubmitMintSbtAsync,\n  } = useContractWrite(writeSubmitSbtConfig);\n\n  const {\n    isLoading: isSubmitMintSbtMining\n  } = useWaitForTransaction({\n    hash: submitMintSbtResult ? submitMintSbtResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitMintSbtAsync successful: ', data);\n\n      refetchGarantiNftId?.();\n    },\n  });\n\n  /*\n   * Handlers\n   */\n\n  const handleMintSbtSubmit = async () => {\n    try {\n      await writeSubmitMintSbtAsync?.();\n    } catch (error) {\n      console.log('writeSubmitMintSbtAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Helpers\n   */\n\n  const openSeaNftLink = () => {\n    return \"https://opensea.io/assets/base/\" + garantiNftAddress + \"/\" + garantiNftId;\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (isRegistered && !garantiNftUri) {\n      setShouldConfigureMintSbtWrite(true);\n    } else {\n      setShouldConfigureMintSbtWrite(false);\n    }\n  }, [isRegistered, garantiNftUri])\n\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <Column>\n        <TitleRow>\n          <ThemedText.HeadlineMedium>\n            Registration\n          </ThemedText.HeadlineMedium>\n          \n          {isLoggedIn && !isRegistered ? (\n            <Button onClick={handleNewRegistrationClick} height={40}>\n                + Register\n            </Button>\n          ) : null}\n        </TitleRow>\n\n        <Content>\n          {!isLoggedIn ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <CheckCircleIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  Your platform registrations will appear here.\n                </div>\n              </ThemedText.DeprecatedBody>\n              <CustomConnectButton />\n            </ErrorContainer>\n          ) : (\n            <Body>\n              <PlatformSelectorContainer>\n                <PlatformSelector usePillSelector={true}/>\n              </PlatformSelectorContainer>\n\n              { !isRegistered && (\n                <NumberedInputContainer>\n                  <NumberedStep>\n                    { garantiStrings.get('REGISTRATION_INSTRUCTIONS') }\n                    <Link\n                      href=\"https://docs.zkp2p.xyz/onramp-guides/registration\"\n                      target=\"_blank\"\n                    >\n                      Learn more ↗\n                    </Link>\n                  </NumberedStep>\n                </NumberedInputContainer>\n              )}\n              \n              { (shouldConfigureMintSbtWrite || garantiNftUri) && (\n                <RegistrationNftContainer>\n                  {garantiNftUri && (\n                    <NftAndLinkContainer>\n                      <div dangerouslySetInnerHTML={{ __html: garantiNftUri }} />\n                      <Link href={ openSeaNftLink() } target=\"_blank\"> View on Opensea ↗</Link>\n                    </NftAndLinkContainer>\n                  )}\n\n                  {shouldConfigureMintSbtWrite && (\n                    <MintNftContainer>\n                      <ThemedText.DeprecatedBody textAlign=\"center\">\n                        <BoxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                        <DescriptionAndHelperContainer>\n                          Your ZKP2P Proof of Registration NFT will appear here&nbsp;\n                          <QuestionHelper text={commonStrings.get('REGISTRATION_NFT_TOOLTIP')} />\n                        </DescriptionAndHelperContainer>\n                      </ThemedText.DeprecatedBody>\n\n                      <Button\n                        loading={isSubmitMintSbtMining || isSubmitMintSbtLoading}\n                        height={40}\n                        onClick={handleMintSbtSubmit}\n                        fullWidth={true}\n                      >\n                        Mint\n                      </Button>\n                    </MintNftContainer>\n                  )}\n                </RegistrationNftContainer>\n              )}\n\n              <InputsContainer>\n                <ReadOnlyInput\n                  label=\"Status\"\n                  name={`registrationStatus`}\n                  value={isRegistered ? \"Registered\" : \"Not Registered\"}\n                />\n                \n                {\n                  isRegistered && <ReadOnlyInput\n                    label=\"Garanti Identifier\"\n                    name={`garantiProfile`}\n                    value={registrationHash ? registrationHash : \"\"}\n                  />\n                }\n              </InputsContainer>\n            </Body>\n          )}\n        </Content>\n      </Column>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`;\n\nconst Column = styled.div`\n  align-self: flex-start;\n  justify-content: center;\n  border-radius: 16px;\n  gap: 1rem;\n`;\n\nconst TitleRow = styled(RowBetween)`\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    flex-wrap: wrap;\n    gap: 12px;\n    width: 100%;\n    padding: 0 1.75rem;\n  };\n`;\n\nconst Content = styled.main`\n  display: flex;\n  background-color: ${colors.container};\n  flex-direction: column;\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst CheckCircleIcon = styled(CheckCircle)`\n  ${IconStyle}\n`;\n\nconst BoxIcon = styled(Box)`\n  ${IconStyle}\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  border-radius: 16px;\n`;\n\nconst PlatformSelectorContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst NumberedInputContainer = styled(Col)`\n  gap: 1rem;\n`;\n\nconst RegistrationNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst NftAndLinkContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  font-size: 15px;\n  padding-bottom: 4px;\n`;\n\nconst MintNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  border-radius: 16px;\n  border: 3px dotted ${colors.defaultBorderColor};\n  width: 244px;\n  height: 414px;\n  padding: 0px 20px;\n  background-color: #131A2A;\n  gap: 36px;\n`;\n\nconst DescriptionAndHelperContainer = styled.div`\n  vertical-align: middle;\n  line-height: 1.3;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/garanti/NewRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro'\nimport { ArrowLeft } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport Link from '@mui/material/Link';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { ProofGenerationForm } from \"@components/ProofGen/ProofForm\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { PaymentPlatform, LoginStatus } from '@helpers/types';\nimport { REGISTRATION_KEY_FILE_NAME, RemoteProofGenEmailTypes } from \"@helpers/constants\";\nimport { garantiStrings, commonStrings } from \"@helpers/strings\";\nimport { reformatMultiProofAndSignalsForChain } from \"@helpers/submitProof\";\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/garanti/useRegistration';\nimport useAccount from '@hooks/useAccount';\n\n\ninterface NewRegistrationProps {\n  handleBackClick: () => void;\n}\n\nexport const NewRegistration: React.FC<NewRegistrationProps> = ({\n  handleBackClick\n}) => {\n  /*\n   * Context\n   */\n\n  const { garantiRampAddress, garantiRampAbi } = useSmartContracts();\n  const { refetchRampAccount } = useRegistration();\n  const { loginStatus } = useAccount();\n\n  // ----- transaction state -----\n  const [proof, setProof] = useState<string>('');\n  const [bodyHashProof, setBodyHashProof] = useState<string>('');\n  const [submitRegistrationTransactionHash, setSubmitRegistrationTransactionHash] = useState<string | null>(null);\n  // const [proof, setProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  const [bodyHashPublicSignals, setBodyHashPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRegistrationWrite, setShouldConfigureRegistrationWrite] = useState<boolean>(false);\n\n  /*\n    Contract Writes\n  */\n\n  //\n  // register(uint256[2] memory _a, uint256[2][2] memory _b, uint256[2] memory _c, uint256[msgLen] memory _signals)\n  //\n  const formattedProofAndSignals = reformatMultiProofAndSignalsForChain(\n    proof,\n    publicSignals,\n    bodyHashProof,\n    bodyHashPublicSignals\n  );\n  const {\n    config: writeSubmitRegistrationConfig\n  } = usePrepareContractWrite({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'register',\n    args: [\n      formattedProofAndSignals[0],\n      formattedProofAndSignals[1]\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRegistrationWrite\n  });\n\n  const {\n    data: submitRegistrationResult,\n    status: submitRegistrationStatus,\n    writeAsync: writeSubmitRegistrationAsync\n  } = useContractWrite(writeSubmitRegistrationConfig);\n\n  const {\n    isLoading: isSubmitRegistrationMining,\n    isSuccess: isSubmitRegistrationSuccessful\n  } = useWaitForTransaction({\n    hash: submitRegistrationResult ? submitRegistrationResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitRegistrationAsync successful: ', data);\n      \n      refetchRampAccount?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    console.log(\"proof and publicSignals updated\");\n    if (proof && bodyHashProof && publicSignals && bodyHashPublicSignals) {\n      // TODO: perform local verification\n\n      setShouldConfigureRegistrationWrite(true);\n    } else {\n      setShouldConfigureRegistrationWrite(false);\n    }\n  }, [proof, publicSignals, bodyHashProof, bodyHashPublicSignals]);\n\n  useEffect(() => {\n    if (submitRegistrationResult?.hash) {\n      setSubmitRegistrationTransactionHash(submitRegistrationResult.hash);\n    }\n  }, [submitRegistrationResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleRegistrationSubmit = async () => {\n    try {\n      await writeSubmitRegistrationAsync?.();\n    } catch (error) {\n      console.log('writeSubmitRegistrationAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            New Registration\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {garantiStrings.get('PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS')}\n            {loginStatus === LoginStatus.EOA && (\n              <>\n                {commonStrings.get('NEW_REGISTRATION_ETH_REQUIRED')}\n                <Link\n                  href={\"https://bridge.base.org/deposit\"}\n                  target=\"_blank\">\n                    Base Bridge ↗\n                </Link>\n              </>\n            )}\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <ProofGenerationForm\n        paymentPlatformType={PaymentPlatform.GARANTI}\n        circuitType={CircuitType.EMAIL_VENMO_REGISTRATION}\n        circuitRemoteFilePath={REGISTRATION_KEY_FILE_NAME}\n        circuitInputs={\"1\"} // Arbitrary value, unused for registration\n        remoteProofGenEmailType={RemoteProofGenEmailTypes.REGISTRATION}\n        proof={proof}\n        publicSignals={publicSignals}\n        setProof={setProof}\n        setPublicSignals={setPublicSignals}\n        bodyHashProof={bodyHashProof}\n        bodyHashPublicSignals={bodyHashPublicSignals}\n        setBodyHashProof={setBodyHashProof}\n        setBodyHashPublicSignals={setBodyHashPublicSignals}\n        submitTransactionStatus={submitRegistrationStatus}\n        isSubmitMining={isSubmitRegistrationMining}\n        isSubmitSuccessful={isSubmitRegistrationSuccessful}\n        handleSubmitVerificationClick={handleRegistrationSubmit}\n        onVerifyEmailCompletion={handleBackClick}\n        transactionAddress={submitRegistrationTransactionHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/hdfc/ExistingRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { CheckCircle, Box } from 'react-feather';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { Col } from \"@components/legacy/Layout\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { ReadOnlyInput } from \"@components/Registration/ReadOnlyInput\";\nimport QuestionHelper from '@components/common/QuestionHelper';\nimport { PlatformSelector } from '@components/modals/PlatformSelector';\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { hdfcStrings, commonStrings } from '@helpers/strings';\nimport useAccount from '@hooks/useAccount';\nimport useRegistration from '@hooks/hdfc/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\n\n\ninterface ExistingRegistrationProps {\n  handleNewRegistrationClick: () => void;\n}\n \nexport const ExistingRegistration: React.FC<ExistingRegistrationProps> = ({\n  handleNewRegistrationClick\n}) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn } = useAccount();\n  const { registrationHash, isRegistered, hdfcNftUri, hdfcNftId, refetchHdfcNftId } = useRegistration();\n  const { hdfcNftAddress, nftAbi } = useSmartContracts();\n\n  const [shouldConfigureMintSbtWrite, setShouldConfigureMintSbtWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // mintSBT()\n  //\n  const { config: writeSubmitSbtConfig } = usePrepareContractWrite({\n    address: hdfcNftAddress,\n    abi: nftAbi,\n    functionName: 'mintSBT',\n    enabled: shouldConfigureMintSbtWrite\n  });\n\n  const {\n    data: submitMintSbtResult,\n    isLoading: isSubmitMintSbtLoading,\n    writeAsync: writeSubmitMintSbtAsync,\n  } = useContractWrite(writeSubmitSbtConfig);\n\n  const {\n    isLoading: isSubmitMintSbtMining\n  } = useWaitForTransaction({\n    hash: submitMintSbtResult ? submitMintSbtResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitMintSbtAsync successful: ', data);\n\n      refetchHdfcNftId?.();\n    },\n  });\n\n  /*\n   * Handlers\n   */\n\n  const handleMintSbtSubmit = async () => {\n    try {\n      await writeSubmitMintSbtAsync?.();\n    } catch (error) {\n      console.log('writeSubmitMintSbtAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Helpers\n   */\n\n  const openSeaNftLink = () => {\n    return \"https://opensea.io/assets/base/\" + hdfcNftAddress + \"/\" + hdfcNftId;\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (isRegistered && !hdfcNftUri) {\n      setShouldConfigureMintSbtWrite(true);\n    } else {\n      setShouldConfigureMintSbtWrite(false);\n    }\n  }, [isRegistered, hdfcNftUri])\n\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <Column>\n        <TitleRow>\n          <ThemedText.HeadlineMedium>\n            Registration\n          </ThemedText.HeadlineMedium>\n          \n          {isLoggedIn && !isRegistered ? (\n            <Button onClick={handleNewRegistrationClick} height={40}>\n                + Register\n            </Button>\n          ) : null}\n        </TitleRow>\n\n        <Content>\n          {!isLoggedIn ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <CheckCircleIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  Your platform registrations will appear here.\n                </div>\n              </ThemedText.DeprecatedBody>\n              <CustomConnectButton width={152} />\n            </ErrorContainer>\n          ) : (\n            <Body>\n              <PlatformSelectorContainer>\n                <PlatformSelector usePillSelector={true}/>\n              </PlatformSelectorContainer>\n\n              { !isRegistered && (\n                <NumberedInputContainer>\n                  <NumberedStep>\n                    { hdfcStrings.get('REGISTRATION_INSTRUCTIONS') }\n                    <Link\n                      href=\"https://docs.zkp2p.xyz/onramp-guides/registration\"\n                      target=\"_blank\"\n                    >\n                      Learn more ↗\n                    </Link>\n                  </NumberedStep>\n                </NumberedInputContainer>\n              )}\n              \n              { (shouldConfigureMintSbtWrite || hdfcNftUri) && (\n                <RegistrationNftContainer>\n                  {hdfcNftUri && (\n                    <NftAndLinkContainer>\n                      <div dangerouslySetInnerHTML={{ __html: hdfcNftUri }} />\n                      <Link href={ openSeaNftLink() } target=\"_blank\"> View on Opensea ↗</Link>\n                    </NftAndLinkContainer>\n                  )}\n\n                  {shouldConfigureMintSbtWrite && (\n                    <MintNftContainer>\n                      <ThemedText.DeprecatedBody textAlign=\"center\">\n                        <BoxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                        <DescriptionAndHelperContainer>\n                          Your ZKP2P Proof of Registration NFT will appear here&nbsp;\n                          <QuestionHelper text={commonStrings.get('REGISTRATION_NFT_TOOLTIP')} />\n                        </DescriptionAndHelperContainer>\n                      </ThemedText.DeprecatedBody>\n\n                      <Button\n                        loading={isSubmitMintSbtMining || isSubmitMintSbtLoading}\n                        height={40}\n                        onClick={handleMintSbtSubmit}\n                        fullWidth={true}\n                      >\n                        Mint\n                      </Button>\n                    </MintNftContainer>\n                  )}\n                </RegistrationNftContainer>\n              )}\n\n              <InputsContainer>\n                <ReadOnlyInput\n                  label=\"Status\"\n                  name={`registrationStatus`}\n                  value={isRegistered ? \"Registered\" : \"Not Registered\"}\n                />\n                \n                {\n                  isRegistered && <ReadOnlyInput\n                    label=\"HDFC Identifier\"\n                    name={`hdfcProfile`}\n                    value={registrationHash ? registrationHash : \"\"}\n                  />\n                }\n              </InputsContainer>\n            </Body>\n          )}\n        </Content>\n      </Column>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`;\n\nconst Column = styled.div`\n  align-self: flex-start;\n  justify-content: center;\n  border-radius: 16px;\n  gap: 1rem;\n`;\n\nconst TitleRow = styled(RowBetween)`\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    flex-wrap: wrap;\n    gap: 12px;\n    width: 100%;\n    padding: 0 1.75rem;\n  };\n`;\n\nconst Content = styled.main`\n  display: flex;\n  background-color: ${colors.container};\n  flex-direction: column;\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst CheckCircleIcon = styled(CheckCircle)`\n  ${IconStyle}\n`;\n\nconst BoxIcon = styled(Box)`\n  ${IconStyle}\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  border-radius: 16px;\n`;\n\nconst PlatformSelectorContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst NumberedInputContainer = styled(Col)`\n  gap: 1rem;\n`;\n\nconst RegistrationNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst NftAndLinkContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  font-size: 15px;\n  padding-bottom: 4px;\n`;\n\nconst MintNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  border-radius: 16px;\n  border: 3px dotted ${colors.defaultBorderColor};\n  width: 244px;\n  height: 414px;\n  padding: 0px 20px;\n  background-color: #131A2A;\n  gap: 36px;\n`;\n\nconst DescriptionAndHelperContainer = styled.div`\n  vertical-align: middle;\n  line-height: 1.3;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/hdfc/NewRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro'\nimport { ArrowLeft } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport Link from '@mui/material/Link';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { ProofGenerationForm } from \"@components/ProofGen/ProofForm\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { PaymentPlatform, LoginStatus } from '@helpers/types';\nimport { REGISTRATION_KEY_FILE_NAME, RemoteProofGenEmailTypes } from \"@helpers/constants\";\nimport { hdfcStrings, commonStrings } from \"@helpers/strings\";\nimport { reformatProofForChain } from \"@helpers/submitProof\";\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/hdfc/useRegistration';\nimport useAccount from '@hooks/useAccount';\n\n\ninterface NewRegistrationProps {\n  handleBackClick: () => void;\n}\n\nexport const NewRegistration: React.FC<NewRegistrationProps> = ({\n  handleBackClick\n}) => {\n  /*\n   * Context\n   */\n\n  const { hdfcRampAddress, hdfcRampAbi } = useSmartContracts();\n  const { refetchRampAccount } = useRegistration();\n  const { loginStatus } = useAccount();\n\n  // ----- transaction state -----\n  const [proof, setProof] = useState<string>('');\n  const [bodyHashProof, setBodyHashProof] = useState<string>('');\n  const [submitRegistrationTransactionHash, setSubmitRegistrationTransactionHash] = useState<string | null>(null);\n  // const [proof, setProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  const [bodyHashPublicSignals, setBodyHashPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRegistrationWrite, setShouldConfigureRegistrationWrite] = useState<boolean>(false);\n\n  /*\n    Contract Writes\n  */\n\n  //\n  // register(uint256[2] memory _a, uint256[2][2] memory _b, uint256[2] memory _c, uint256[msgLen] memory _signals)\n  //\n  const {\n    config: writeSubmitRegistrationConfig\n  } = usePrepareContractWrite({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'register',\n    args: [\n      ...reformatProofForChain(proof),\n      publicSignals ? JSON.parse(publicSignals) : null,\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRegistrationWrite\n  });\n\n  const {\n    data: submitRegistrationResult,\n    status: submitRegistrationStatus,\n    writeAsync: writeSubmitRegistrationAsync\n  } = useContractWrite(writeSubmitRegistrationConfig);\n\n  const {\n    isLoading: isSubmitRegistrationMining,\n    isSuccess: isSubmitRegistrationSuccessful\n  } = useWaitForTransaction({\n    hash: submitRegistrationResult ? submitRegistrationResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitRegistrationAsync successful: ', data);\n      \n      refetchRampAccount?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (proof && publicSignals) {\n      // TODO: perform local verification\n\n      setShouldConfigureRegistrationWrite(true);\n    } else {\n      setShouldConfigureRegistrationWrite(false);\n    }\n  }, [proof, publicSignals]);\n\n  useEffect(() => {\n    if (submitRegistrationResult?.hash) {\n      setSubmitRegistrationTransactionHash(submitRegistrationResult.hash);\n    }\n  }, [submitRegistrationResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleRegistrationSubmit = async () => {\n    try {\n      await writeSubmitRegistrationAsync?.();\n    } catch (error) {\n      console.log('writeSubmitRegistrationAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            New Registration\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {hdfcStrings.get('PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS')}\n            {loginStatus === LoginStatus.EOA && (\n              <>\n                {commonStrings.get('NEW_REGISTRATION_ETH_REQUIRED')}\n                <Link\n                  href={\"https://bridge.base.org/deposit\"}\n                  target=\"_blank\">\n                    Base Bridge ↗\n                </Link>\n              </>\n            )}\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <ProofGenerationForm\n        paymentPlatformType={PaymentPlatform.HDFC}\n        circuitType={CircuitType.EMAIL_VENMO_REGISTRATION}\n        circuitRemoteFilePath={REGISTRATION_KEY_FILE_NAME}\n        circuitInputs={\"1\"} // Arbitrary value, unused for registration\n        remoteProofGenEmailType={RemoteProofGenEmailTypes.REGISTRATION}\n        proof={proof}\n        publicSignals={publicSignals}\n        setProof={setProof}\n        setPublicSignals={setPublicSignals}\n        bodyHashProof={bodyHashProof}\n        bodyHashPublicSignals={bodyHashPublicSignals}\n        setBodyHashProof={setBodyHashProof}\n        setBodyHashPublicSignals={setBodyHashPublicSignals}\n        submitTransactionStatus={submitRegistrationStatus}\n        isSubmitMining={isSubmitRegistrationMining}\n        isSubmitSuccessful={isSubmitRegistrationSuccessful}\n        handleSubmitVerificationClick={handleRegistrationSubmit}\n        onVerifyEmailCompletion={handleBackClick}\n        transactionAddress={submitRegistrationTransactionHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/index.tsx",
    "content": "import React, { useState } from 'react';\nimport styled from 'styled-components/macro'\n\nimport { ExistingRegistration as VenmoExistingRegistration } from \"@components/Registration/venmo/ExistingRegistration\";\nimport { ExistingRegistration as HdfcExistingRegistration } from '@components/Registration/hdfc/ExistingRegistration';\nimport { ExistingRegistration as GarantiExistingRegistration } from '@components/Registration/garanti/ExistingRegistration';\nimport { ExistingRegistration as RevolutExistingRegistration } from '@components/Registration/revolut/ExistingRegistration';\n\nimport { NewRegistration as VenmoNewRegistration } from \"@components/Registration/venmo/NewRegistration\";\nimport { NewRegistration as HdfcNewRegistration } from '@components/Registration/hdfc/NewRegistration';\nimport { NewRegistration as GarantiNewRegistration } from '@components/Registration/garanti/NewRegistration';\nimport { NewRegistration as RevolutNewRegistration } from '@components/Registration/revolut/NewRegistration';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\n\n \nexport const RegistrationForm: React.FC = () => {\n  /*\n   * Context\n   */\n\n  const { PaymentPlatform, paymentPlatform } = usePlatformSettings();\n\n  /*\n   * State\n   */\n\n  const [isNewRegistration, setIsNewRegistration] = useState<boolean>(false);\n\n  /*\n   * Handlers\n   */\n\n  const handleUpdateClick = () => {\n    setIsNewRegistration(true);\n  };\n\n  const handleBackClick = () => {\n    setIsNewRegistration(false);\n  };\n\n  /*\n   * Component\n   */\n\n  const existingRegistrationComponent = () => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return <VenmoExistingRegistration handleNewRegistrationClick={handleUpdateClick} />;\n\n      case PaymentPlatform.HDFC:\n        return <HdfcExistingRegistration handleNewRegistrationClick={handleUpdateClick} />;\n      \n      case PaymentPlatform.GARANTI:\n        return <GarantiExistingRegistration handleNewRegistrationClick={handleUpdateClick} />;\n\n      case PaymentPlatform.REVOLUT:\n        return <RevolutExistingRegistration handleNewRegistrationClick={handleUpdateClick} />;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n  };\n\n  const newRegistrationComponent = () => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return <VenmoNewRegistration handleBackClick={handleBackClick} />;\n\n      case PaymentPlatform.HDFC:\n        return <HdfcNewRegistration handleBackClick={handleBackClick} />;\n\n      case PaymentPlatform.GARANTI:\n        return <GarantiNewRegistration handleBackClick={handleBackClick} />;\n\n      case PaymentPlatform.REVOLUT:\n        return <RevolutNewRegistration handleBackClick={handleBackClick} />;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n  };\n\n  return (\n    <Wrapper>\n      {!isNewRegistration ? (\n        existingRegistrationComponent()\n      ) : (\n        newRegistrationComponent()\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  max-width: 660px;\n  width: 100%;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/revolut/ExistingRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { CheckCircle, Box } from 'react-feather';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { Col } from \"@components/legacy/Layout\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { ReadOnlyInput } from \"@components/Registration/ReadOnlyInput\";\nimport QuestionHelper from '@components/common/QuestionHelper';\nimport { PlatformSelector } from '@components/modals/PlatformSelector';\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { revolutStrings, commonStrings } from '@helpers/strings';\nimport useAccount from '@hooks/useAccount';\nimport useRegistration from '@hooks/revolut/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\n\n\ninterface ExistingRegistrationProps {\n  handleNewRegistrationClick: () => void;\n}\n \nexport const ExistingRegistration: React.FC<ExistingRegistrationProps> = ({\n  handleNewRegistrationClick\n}) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn } = useAccount();\n  const { registrationHash, isRegistered, venmoNftUri, venmoNftId, refetchVenmoNftId } = useRegistration();\n  const { revolutNftAddress, nftAbi } = useSmartContracts();\n\n  const [shouldConfigureMintSbtWrite, setShouldConfigureMintSbtWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // mintSBT()\n  //\n  const { config: writeSubmitSbtConfig } = usePrepareContractWrite({\n    address: revolutNftAddress,\n    abi: nftAbi,\n    functionName: 'mintSBT',\n    enabled: shouldConfigureMintSbtWrite\n  });\n\n  const {\n    data: submitMintSbtResult,\n    isLoading: isSubmitMintSbtLoading,\n    writeAsync: writeSubmitMintSbtAsync,\n  } = useContractWrite(writeSubmitSbtConfig);\n\n  const {\n    isLoading: isSubmitMintSbtMining\n  } = useWaitForTransaction({\n    hash: submitMintSbtResult ? submitMintSbtResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitMintSbtAsync successful: ', data);\n\n      refetchVenmoNftId?.();\n    },\n  });\n\n  /*\n   * Handlers\n   */\n\n  const handleMintSbtSubmit = async () => {\n    try {\n      await writeSubmitMintSbtAsync?.();\n    } catch (error) {\n      console.log('writeSubmitMintSbtAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Helpers\n   */\n\n  const openSeaNftLink = () => {\n    return \"https://opensea.io/assets/base/\" + revolutNftAddress + \"/\" + venmoNftId;\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (isRegistered && !venmoNftUri) {\n      setShouldConfigureMintSbtWrite(true);\n    } else {\n      setShouldConfigureMintSbtWrite(false);\n    }\n  }, [isRegistered, venmoNftUri])\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <Column>\n        <TitleRow>\n          <ThemedText.HeadlineMedium>\n            Registration\n          </ThemedText.HeadlineMedium>\n          \n          {isLoggedIn && !isRegistered ? (\n            <Button onClick={handleNewRegistrationClick} height={40}>\n                + Register\n            </Button>\n          ) : null}\n        </TitleRow>\n\n        <Content>\n          {!isLoggedIn ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <CheckCircleIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  Your platform registrations will appear here.\n                </div>\n              </ThemedText.DeprecatedBody>\n              <CustomConnectButton width={152} />\n            </ErrorContainer>\n          ) : (\n            <Body>\n              <PlatformSelectorContainer>\n                <PlatformSelector usePillSelector={true}/>\n              </PlatformSelectorContainer>\n\n              { !isRegistered && (\n                <NumberedInputContainer>\n                  <NumberedStep>\n                    { revolutStrings.get('REGISTRATION_INSTRUCTIONS') }\n                    <Link\n                      href=\"https://docs.zkp2p.xyz/onramp-guides/registration\"\n                      target=\"_blank\"\n                    >\n                      Learn more ↗\n                    </Link>\n                  </NumberedStep>\n                </NumberedInputContainer>\n              )}\n              \n              { (shouldConfigureMintSbtWrite || venmoNftUri) && (\n                <RegistrationNftContainer>\n                  {venmoNftUri && (\n                    <NftAndLinkContainer>\n                      <div dangerouslySetInnerHTML={{ __html: venmoNftUri }} />\n                      <Link href={ openSeaNftLink() } target=\"_blank\"> View on Opensea ↗</Link>\n                    </NftAndLinkContainer>\n                  )}\n\n                  {shouldConfigureMintSbtWrite && (\n                    <MintNftContainer>\n                      <ThemedText.DeprecatedBody textAlign=\"center\">\n                        <BoxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                        <DescriptionAndHelperContainer>\n                          Your ZKP2P Proof of Registration NFT will appear here&nbsp;\n                          <QuestionHelper text={commonStrings.get('REGISTRATION_NFT_TOOLTIP')} />\n                        </DescriptionAndHelperContainer>\n                      </ThemedText.DeprecatedBody>\n\n                      <Button\n                        loading={isSubmitMintSbtMining || isSubmitMintSbtLoading}\n                        height={40}\n                        onClick={handleMintSbtSubmit}\n                        fullWidth={true}\n                      >\n                        Mint\n                      </Button>\n                    </MintNftContainer>\n                  )}\n                </RegistrationNftContainer>\n              )}\n\n              <InputsContainer>\n                <ReadOnlyInput\n                  label=\"Status\"\n                  name={`depositAmount`}\n                  value={isRegistered ? \"Registered\" : \"Not Registered\"}\n                />\n                \n                {\n                  isRegistered && <ReadOnlyInput\n                    label=\"Revolut Identifier\"\n                    name={`revTag`}\n                    value={registrationHash ? registrationHash : \"\"}\n                  />\n                }\n              </InputsContainer>\n            </Body>\n          )}\n        </Content>\n      </Column>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`;\n\nconst Column = styled.div`\n  align-self: flex-start;\n  justify-content: center;\n  border-radius: 16px;\n  gap: 1rem;\n`;\n\nconst TitleRow = styled(RowBetween)`\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    flex-wrap: wrap;\n    gap: 12px;\n    width: 100%;\n    padding: 0 1.75rem;\n  };\n`;\n\nconst Content = styled.main`\n  display: flex;\n  background-color: ${colors.container};\n  flex-direction: column;\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst CheckCircleIcon = styled(CheckCircle)`\n  ${IconStyle}\n`;\n\nconst BoxIcon = styled(Box)`\n  ${IconStyle}\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  border-radius: 16px;\n`;\n\nconst PlatformSelectorContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst NumberedInputContainer = styled(Col)`\n  gap: 1rem;\n`;\n\nconst RegistrationNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst NftAndLinkContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  font-size: 15px;\n  padding-bottom: 4px;\n`;\n\nconst MintNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  border-radius: 16px;\n  border: 3px dotted ${colors.defaultBorderColor};\n  width: 244px;\n  height: 414px;\n  padding: 0px 20px;\n  background-color: #131A2A;\n  gap: 36px;\n`;\n\nconst DescriptionAndHelperContainer = styled.div`\n  vertical-align: middle;\n  line-height: 1.3;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/revolut/NewRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro'\nimport { ArrowLeft } from 'react-feather';\nimport Link from '@mui/material/Link';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { RowBetween } from '@components/layouts/Row';\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { VerifyNotarizationForm } from '@components/Notary/VerifyNotarizationForm';\nimport { revolutStrings, commonStrings } from \"@helpers/strings\";\nimport { PaymentPlatform, NotaryVerificationCircuit, LoginStatus } from '@helpers/types';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/revolut/useRegistration';\nimport useAccount from '@hooks/useAccount';\n\n\ninterface NewRegistrationProps {\n  handleBackClick: () => void;\n};\n\nexport const NewRegistration: React.FC<NewRegistrationProps> = ({\n  handleBackClick\n}) => {\n  /*\n   * Context\n   */\n\n  const { revolutAccountRegistryAddress, revolutAccountRegistryAbi } = useSmartContracts();\n  const { refetchRampAccount } = useRegistration();\n  const { loginStatus } = useAccount();\n\n  // ----- transaction state -----\n  const [verifierProof, setVerifierProof] = useState<string>('');\n  const [submitRegistrationTransactionHash, setSubmitRegistrationTransactionHash] = useState<string | null>(null);\n  // const [proof, setProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRegistrationWrite, setShouldConfigureRegistrationWrite] = useState<boolean>(false);\n\n  /*\n    Contract Writes\n  */\n\n  //\n  // register(uint256[2] memory _a, uint256[2][2] memory _b, uint256[2] memory _c, uint256[msgLen] memory _signals)\n  //\n  const {\n    config: writeSubmitRegistrationConfig\n  } = usePrepareContractWrite({\n    address: revolutAccountRegistryAddress,\n    abi: revolutAccountRegistryAbi,\n    functionName: 'register',\n    args: [\n      [\n        publicSignals,\n        verifierProof\n      ]\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRegistrationWrite\n  });\n\n  const {\n    data: submitRegistrationResult,\n    status: submitRegistrationStatus,\n    writeAsync: writeSubmitRegistrationAsync\n  } = useContractWrite(writeSubmitRegistrationConfig);\n\n  const {\n    isLoading: isSubmitRegistrationMining,\n    isSuccess: isSubmitRegistrationSuccessful\n  } = useWaitForTransaction({\n    hash: submitRegistrationResult ? submitRegistrationResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitRegistrationAsync successful: ', data);\n      \n      refetchRampAccount?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (verifierProof && publicSignals) {\n      // TODO: perform local verification\n\n      setShouldConfigureRegistrationWrite(true);\n    } else {\n      setShouldConfigureRegistrationWrite(false);\n    }\n  }, [verifierProof, publicSignals]);\n\n  useEffect(() => {\n    if (submitRegistrationResult?.hash) {\n      setSubmitRegistrationTransactionHash(submitRegistrationResult.hash);\n    }\n  }, [submitRegistrationResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleRegistrationSubmit = async () => {\n    try {\n      await writeSubmitRegistrationAsync?.();\n    } catch (error) {\n      console.log('writeSubmitRegistrationAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            New Registration\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {revolutStrings.get('PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS')}\n            {loginStatus === LoginStatus.EOA && (\n              <>\n                {commonStrings.get('NEW_REGISTRATION_ETH_REQUIRED')}\n                <Link\n                  href={\"https://bridge.base.org/deposit\"}\n                  target=\"_blank\">\n                    Base Bridge ↗\n                </Link>\n              </>\n            )}\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <VerifyNotarizationForm\n        paymentPlatformType={PaymentPlatform.REVOLUT}\n        circuitType={NotaryVerificationCircuit.REGISTRATION_TAG}\n        verifierProof={verifierProof}\n        publicSignals={publicSignals}\n        setVerifierProof={setVerifierProof}\n        setPublicSignals={setPublicSignals}\n        submitTransactionStatus={submitRegistrationStatus}\n        isSubmitMining={isSubmitRegistrationMining}\n        isSubmitSuccessful={isSubmitRegistrationSuccessful}\n        handleSubmitVerificationClick={handleRegistrationSubmit}\n        onVerifyNotarizationCompletion={handleBackClick}\n        transactionAddress={submitRegistrationTransactionHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  \n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/venmo/ExistingRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Link from '@mui/material/Link';\nimport { CheckCircle, Box } from 'react-feather';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Button } from \"@components/common/Button\";\nimport { Col } from \"@components/legacy/Layout\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { ReadOnlyInput } from \"@components/Registration/ReadOnlyInput\";\nimport QuestionHelper from '@components/common/QuestionHelper';\nimport { PlatformSelector } from '@components/modals/PlatformSelector';\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { venmoStrings, commonStrings } from '@helpers/strings';\nimport useAccount from '@hooks/useAccount';\nimport useRegistration from '@hooks/venmo/useRegistration';\nimport useSmartContracts from '@hooks/useSmartContracts';\n\n\ninterface ExistingRegistrationProps {\n  handleNewRegistrationClick: () => void;\n}\n \nexport const ExistingRegistration: React.FC<ExistingRegistrationProps> = ({\n  handleNewRegistrationClick\n}) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { registrationHash, isRegistered, venmoNftUri, venmoNftId, refetchVenmoNftId } = useRegistration();\n  const { venmoNftAddress, nftAbi } = useSmartContracts();\n\n  const [shouldConfigureMintSbtWrite, setShouldConfigureMintSbtWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // mintSBT()\n  //\n  const { config: writeSubmitSbtConfig } = usePrepareContractWrite({\n    address: venmoNftAddress,\n    abi: nftAbi,\n    functionName: 'mintSBT',\n    enabled: shouldConfigureMintSbtWrite\n  });\n\n  const {\n    data: submitMintSbtResult,\n    isLoading: isSubmitMintSbtLoading,\n    writeAsync: writeSubmitMintSbtAsync,\n  } = useContractWrite(writeSubmitSbtConfig);\n\n  const {\n    isLoading: isSubmitMintSbtMining\n  } = useWaitForTransaction({\n    hash: submitMintSbtResult ? submitMintSbtResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitMintSbtAsync successful: ', data);\n\n      refetchVenmoNftId?.();\n    },\n  });\n\n  /*\n   * Handlers\n   */\n\n  const handleMintSbtSubmit = async () => {\n    try {\n      await writeSubmitMintSbtAsync?.();\n    } catch (error) {\n      console.log('writeSubmitMintSbtAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Helpers\n   */\n\n  const openSeaNftLink = () => {\n    return \"https://opensea.io/assets/base/\" + venmoNftAddress + \"/\" + venmoNftId;\n  };\n\n  const openSeaLegacyNftLink = () => {\n    const url = \"https://opensea.io/collection/proof-of-p2p-v1-1?search[owner][address]=\" + loggedInEthereumAddress ;\n    window.open(url, '_blank');\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (isRegistered && !venmoNftUri) {\n      setShouldConfigureMintSbtWrite(true);\n    } else {\n      setShouldConfigureMintSbtWrite(false);\n    }\n  }, [isRegistered, venmoNftUri])\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <Column>\n        <TitleRow>\n          <ThemedText.HeadlineMedium>\n            Registration\n          </ThemedText.HeadlineMedium>\n          \n          {isLoggedIn && !isRegistered ? (\n            <Button onClick={handleNewRegistrationClick} height={40}>\n                + Register\n            </Button>\n          ) : null}\n        </TitleRow>\n\n        <Content>\n          {!isLoggedIn ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <CheckCircleIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  Your platform registrations will appear here.\n                </div>\n              </ThemedText.DeprecatedBody>\n              <CustomConnectButton width={152} />\n            </ErrorContainer>\n          ) : (\n            <Body>\n              <PlatformSelectorContainer>\n                <PlatformSelector usePillSelector={true}/>\n              </PlatformSelectorContainer>\n\n              { !isRegistered && (\n                <NumberedInputContainer>\n                  <NumberedStep>\n                    { venmoStrings.get('REGISTRATION_INSTRUCTIONS') }\n                    <Link\n                      href=\"https://docs.zkp2p.xyz/onramp-guides/registration\"\n                      target=\"_blank\"\n                    >\n                      Learn more ↗\n                    </Link>\n                  </NumberedStep>\n                </NumberedInputContainer>\n              )}\n              \n              { (shouldConfigureMintSbtWrite || venmoNftUri) && (\n                <RegistrationNftContainer>\n                  {venmoNftUri && (\n                    <NftAndLinkContainer>\n                      <div dangerouslySetInnerHTML={{ __html: venmoNftUri }} />\n                      <Link href={ openSeaNftLink() } target=\"_blank\"> View on Opensea ↗</Link>\n                    </NftAndLinkContainer>\n                  )}\n\n                  {shouldConfigureMintSbtWrite && (\n                    <MintNftContainer>\n                      <ThemedText.DeprecatedBody textAlign=\"center\">\n                        <BoxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                        <DescriptionAndHelperContainer>\n                          Your ZKP2P Proof of Registration NFT will appear here&nbsp;\n                          <QuestionHelper text={commonStrings.get('REGISTRATION_NFT_TOOLTIP')} />\n                        </DescriptionAndHelperContainer>\n                      </ThemedText.DeprecatedBody>\n\n                      <Button\n                        loading={isSubmitMintSbtMining || isSubmitMintSbtLoading}\n                        height={40}\n                        onClick={handleMintSbtSubmit}\n                        fullWidth={true}\n                      >\n                        Mint\n                      </Button>\n                    </MintNftContainer>\n                  )}\n                </RegistrationNftContainer>\n              )}\n\n              <InputsContainer>\n                <ReadOnlyInput\n                  label=\"Status\"\n                  name={`registrationStatus`}\n                  value={isRegistered ? \"Registered\" : \"Not Registered\"}\n                />\n                \n                {\n                  isRegistered && <ReadOnlyInput\n                    label=\"Venmo Identifier\"\n                    name={`venmoProfile`}\n                    value={registrationHash ? registrationHash : \"\"}\n                  />\n                }\n              </InputsContainer>\n            </Body>\n          )}\n        </Content>\n      </Column>\n\n      {isLoggedIn ? (\n        <LiquidityLink onClick={openSeaLegacyNftLink}>\n          Looking for your V1 Registration NFT?\n        </LiquidityLink>\n      ) : null}\n\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`;\n\nconst Column = styled.div`\n  align-self: flex-start;\n  justify-content: center;\n  border-radius: 16px;\n  gap: 1rem;\n`;\n\nconst TitleRow = styled(RowBetween)`\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    flex-wrap: wrap;\n    gap: 12px;\n    width: 100%;\n    padding: 0 1.75rem;\n  };\n`;\n\nconst Content = styled.main`\n  display: flex;\n  background-color: ${colors.container};\n  flex-direction: column;\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst CheckCircleIcon = styled(CheckCircle)`\n  ${IconStyle}\n`;\n\nconst BoxIcon = styled(Box)`\n  ${IconStyle}\n`;\n\nconst Body = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  padding: 1.5rem 1.25rem;\n  background-color: ${colors.container};\n  border-radius: 16px;\n\n  @media (min-width: 600px) {\n    padding: 1.5rem;\n  }\n`;\n\nconst PlatformSelectorContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n`;\n\nconst InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n`;\n\nconst NumberedInputContainer = styled(Col)`\n  gap: 1rem;\n`;\n\nconst RegistrationNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst NftAndLinkContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  font-size: 15px;\n  padding-bottom: 4px;\n`;\n\nconst MintNftContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  border-radius: 16px;\n  border: 3px dotted ${colors.defaultBorderColor};\n  width: 244px;\n  height: 414px;\n  padding: 0px 20px;\n  background-color: #131A2A;\n  gap: 36px;\n`;\n\nconst DescriptionAndHelperContainer = styled.div`\n  vertical-align: middle;\n  line-height: 1.3;\n`;\n\nconst LiquidityLink = styled.button`\n  width: 100%;\n  font-size: 15px;\n  font-family: 'Graphik';\n  color: #FFFFFF;\n  opacity: 0.3;\n  text-align: center;\n  padding: 20px 0px;\n  background: none;\n  border: none;\n  cursor: pointer;\n  text-decoration: underline;\n  display: inline;\n`;\n"
  },
  {
    "path": "client/src/components/Registration/venmo/NewRegistration.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro'\nimport { ArrowLeft } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport Link from '@mui/material/Link';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { ProofGenerationForm } from \"@components/ProofGen/ProofForm\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { REGISTRATION_KEY_FILE_NAME, RemoteProofGenEmailTypes } from \"@helpers/constants\";\nimport { venmoStrings, commonStrings } from \"@helpers/strings\";\nimport { reformatProofForChain } from \"@helpers/submitProof\";\nimport { PaymentPlatform, LoginStatus } from '@helpers/types';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/venmo/useRegistration';\nimport useAccount from '@hooks/useAccount';\n\n\ninterface NewRegistrationProps {\n  handleBackClick: () => void;\n}\n\nexport const NewRegistration: React.FC<NewRegistrationProps> = ({\n  handleBackClick\n}) => {\n  /*\n   * Context\n   */\n\n  const { venmoRampAddress, venmoRampAbi } = useSmartContracts();\n  const { refetchRampAccount } = useRegistration();\n  const { loginStatus } = useAccount();\n\n  // ----- transaction state -----\n  const [proof, setProof] = useState<string>('');\n  const [bodyHashProof, setBodyHashProof] = useState<string>('');\n  const [submitRegistrationTransactionHash, setSubmitRegistrationTransactionHash] = useState<string | null>(null);\n  // const [proof, setProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  const [bodyHashPublicSignals, setBodyHashPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRegistrationWrite, setShouldConfigureRegistrationWrite] = useState<boolean>(false);\n\n  /*\n    Contract Writes\n  */\n\n  //\n  // register(uint256[2] memory _a, uint256[2][2] memory _b, uint256[2] memory _c, uint256[msgLen] memory _signals)\n  //\n  const {\n    config: writeSubmitRegistrationConfig\n  } = usePrepareContractWrite({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'register',\n    args: [\n      ...reformatProofForChain(proof),\n      publicSignals ? JSON.parse(publicSignals) : null,\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRegistrationWrite\n  });\n\n  const {\n    data: submitRegistrationResult,\n    status: submitRegistrationStatus,\n    writeAsync: writeSubmitRegistrationAsync\n  } = useContractWrite(writeSubmitRegistrationConfig);\n\n  const {\n    isLoading: isSubmitRegistrationMining,\n    isSuccess: isSubmitRegistrationSuccessful\n  } = useWaitForTransaction({\n    hash: submitRegistrationResult ? submitRegistrationResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitRegistrationAsync successful: ', data);\n      \n      refetchRampAccount?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (proof && publicSignals) {\n      // TODO: perform local verification\n\n      setShouldConfigureRegistrationWrite(true);\n    } else {\n      setShouldConfigureRegistrationWrite(false);\n    }\n  }, [proof, publicSignals]);\n\n  useEffect(() => {\n    if (submitRegistrationResult?.hash) {\n      setSubmitRegistrationTransactionHash(submitRegistrationResult.hash);\n    }\n  }, [submitRegistrationResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleRegistrationSubmit = async () => {\n    try {\n      await writeSubmitRegistrationAsync?.();\n    } catch (error) {\n      console.log('writeSubmitRegistrationAsync failed: ', error);\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ padding: '0.25rem 0rem 1.5rem 0rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            New Registration\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {venmoStrings.get('PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS')}\n            {loginStatus === LoginStatus.EOA && (\n              <>\n                {commonStrings.get('NEW_REGISTRATION_ETH_REQUIRED')}\n                <Link\n                  href={\"https://bridge.base.org/deposit\"}\n                  target=\"_blank\">\n                    Base Bridge ↗\n                </Link>\n              </>\n            )}\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <ProofGenerationForm\n        paymentPlatformType={PaymentPlatform.VENMO}\n        circuitType={CircuitType.EMAIL_VENMO_REGISTRATION}\n        circuitRemoteFilePath={REGISTRATION_KEY_FILE_NAME}\n        circuitInputs={\"1\"} // Arbitrary value, unused for registration\n        remoteProofGenEmailType={RemoteProofGenEmailTypes.REGISTRATION}\n        proof={proof}\n        publicSignals={publicSignals}\n        setProof={setProof}\n        setPublicSignals={setPublicSignals}\n        bodyHashProof={bodyHashProof}\n        bodyHashPublicSignals={bodyHashPublicSignals}\n        setBodyHashProof={setBodyHashProof}\n        setBodyHashPublicSignals={setBodyHashPublicSignals}\n        submitTransactionStatus={submitRegistrationStatus}\n        isSubmitMining={isSubmitRegistrationMining}\n        isSubmitSuccessful={isSubmitRegistrationSuccessful}\n        handleSubmitVerificationClick={handleRegistrationSubmit}\n        onVerifyEmailCompletion={handleBackClick}\n        transactionAddress={submitRegistrationTransactionHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  \n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/SVGIcon/SVGIcon.css",
    "content": ".svg {\n    outline: none;\n    fill: currentColor;\n}"
  },
  {
    "path": "client/src/components/SVGIcon/SVGIcon.tsx",
    "content": "import React from 'react';\n\nimport { ReactComponent as DefaultTokenLogo } from '../../icons/svg/ethereum-token-logo.svg';\nimport { ReactComponent as DarkGithubLogo } from '../../icons/svg/dark-github.svg';\nimport { ReactComponent as DarkTwitterLogo } from '../../icons/svg/dark-twitter.svg';\nimport { ReactComponent as DarkUsdcLogo } from '../../icons/svg/dark-usdc.svg';\nimport { ReactComponent as DarkTelegramLogo } from '../../icons/svg/dark-telegram.svg';\nimport { ReactComponent as LightningIcon } from '../../icons/svg/dark-lightning.svg';\nimport { ReactComponent as CashIcon } from '../../icons/svg/dark-cash.svg';\nimport { ReactComponent as PadlockIcon } from '../../icons/svg/dark-padlock.svg';\nimport { ReactComponent as DownArrowIcon } from '../../icons/svg/dark-arrow-down.svg';\n\nimport './SVGIcon.css';\n\n\ninterface SVGIconProps {\n  iconName: string\n  width?: string,\n  height?: string,\n};\n\nexport const SVGIcon: React.FC<SVGIconProps> = ({\n  iconName = 'ethereum-logo',\n  width,\n  height\n}) => {\n  let Icon;\n  switch (iconName) {\n    case 'dark-telegram':\n      Icon = DarkTelegramLogo;\n      break;\n\n    case 'dark-github':\n      Icon = DarkGithubLogo;\n      break;\n\n    case 'dark-usdc':\n      Icon = DarkUsdcLogo;\n      break;\n\n    case 'dark-twitter':\n      Icon = DarkTwitterLogo;\n      break;\n\n    case 'ethereum-logo':\n      Icon = DefaultTokenLogo;\n      break;\n\n    case 'dark-lightning':\n      Icon = LightningIcon;\n      break;\n\n    case 'dark-cash':\n      Icon = CashIcon;\n      break;\n\n    case 'dark-padlock':\n      Icon = PadlockIcon;\n      break;\n\n    case 'dark-arrow-down':\n      Icon = DownArrowIcon;\n      break;\n\n    default:\n      Icon = DefaultTokenLogo;\n  }\n\n  return <Icon className=\"svg\" width={width} height={height} />;\n};\n"
  },
  {
    "path": "client/src/components/SVGIcon/SVGIconThemed.css",
    "content": ".svg-icon-xs {\n  width: 40px;\n  height: 40px;\n}\n\n.svg-icon-lg {\n  width: 20px;\n  height: 20px;\n}\n\n.svg-icon-sm {\n  width: 16px;\n  height: 16px;\n}\n"
  },
  {
    "path": "client/src/components/SVGIcon/SVGIconThemed.tsx",
    "content": "import React, { CSSProperties } from 'react';\n\nimport { SVGIcon } from './SVGIcon';\nimport './SVGIcon.css';\n\ninterface SVGIconThemedProps {\n    iconName?: string,\n    icon?: string,\n    size?: string,\n    lightOpacity?: number,\n    darkOpacity?: number,\n    width?: string,\n    height?: string,\n    themeMode?: string,\n    onClick?: () => void,\n    className?: string\n  };\n\nexport const SVGIconThemed: React.FC<SVGIconThemedProps> = ({\n    iconName = 'ethereum-logo',\n    icon,\n    lightOpacity = 0.4,\n    darkOpacity = 0.4,\n    size,\n    width,\n    height,\n    themeMode = 'dark',\n    onClick,\n    className\n}) => {\n  const styles: CSSProperties = {\n    display: 'flex'\n  };\n\n  const showedIconName = typeof icon === 'string'\n    ? `${themeMode}-${icon}`\n    : iconName;\n\n  const isLightMode = themeMode === 'light';\n\n  const color = isLightMode\n    ? `rgba(51, 51, 51, ${lightOpacity})`\n    : `rgba(23, 23, 23, ${darkOpacity})`;\n  styles.backgroundColor = color;\n\n  const showedClass = `svg-icon-${size} ${className}`;\n\n  return (\n    <div\n      style={styles}\n      onClick={onClick}\n      className={showedClass}\n    >\n        <SVGIcon iconName={showedIconName} width={width} height={height} />\n    </div>\n  );\n};\n"
  },
  {
    "path": "client/src/components/Send/Input.tsx",
    "content": "import React, { ChangeEvent } from \"react\";\nimport styled from 'styled-components';\n\nimport { TokenSelector } from '@components/Send/TokenSelector';\nimport { colors } from '@theme/colors';\n\n\ninterface InputProps {\n  label: string;\n  name: string;\n  value?: string;\n  type?: string;\n  onChange: (event: ChangeEvent<HTMLInputElement>) => void;\n  onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n  onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n  placeholder?: string;\n  inputLabel?: string;\n  readOnly?: boolean;\n  accessoryLabel?: string;\n  hasSelector?: boolean;\n  selectorDisabled?: boolean;\n  enableMax?: boolean\n  maxButtonOnClick?: () => void;\n  fontSize?: number;\n}\n\nexport const Input: React.FC<InputProps> = ({\n  label,\n  name,\n  value,\n  onChange,\n  onFocus,\n  onBlur,\n  onKeyDown,\n  placeholder,\n  inputLabel,\n  type = \"text\",\n  readOnly = false,\n  accessoryLabel=\"\",\n  hasSelector=false,\n  selectorDisabled=false,\n  enableMax=false,\n  maxButtonOnClick=() => {},\n  fontSize = 28\n}: InputProps) => {\n  Input.displayName = \"Input\";\n\n  /*\n   * Helper\n   */\n\n  const dynamicFontSize = value && value.length > 0 \n      ? Math.max(fontSize - Math.floor(value.length / 18) * 3.5, 12)\n      : fontSize;\n\n  return (\n    <Container readOnly={readOnly}>\n      <LabelAndInputContainer>\n        <LabelAndTooltipContainer>\n          <Label htmlFor={name}>\n              {label}\n          </Label>\n        </LabelAndTooltipContainer>\n\n        <InputWrapper>\n          <StyledInput\n            type={type}\n            name={name}\n            id={name}\n            placeholder={placeholder}\n            value={value}\n            onChange={onChange}\n            onFocus={onFocus}\n            onBlur={onBlur}\n            onKeyDown={onKeyDown}\n            readOnly={readOnly}\n            fontSize={dynamicFontSize}\n            spellCheck={false}\n            autoComplete={\"off\"}\n          />\n        </InputWrapper>\n      </LabelAndInputContainer>\n\n      {hasSelector ? (\n        <SelectorAccessory>\n          <TokenSelector\n            disabled={selectorDisabled}\n          />\n        </SelectorAccessory>\n      ) : (\n        <AccessoryAndInputLabelWrapper>\n          <AccessoryLabelAndMax>\n            <AccessoryLabel>\n              {accessoryLabel}\n            </AccessoryLabel>\n\n            {enableMax && accessoryLabel && (\n              <MaxButton onClick={maxButtonOnClick}>\n                Max\n              </MaxButton>\n            )}\n          </AccessoryLabelAndMax>\n\n          {inputLabel ? (\n            <InputLabel>\n              <span>{inputLabel}</span>\n            </InputLabel>\n          ) : null}\n        </AccessoryAndInputLabelWrapper>\n      )}\n    </Container>\n  );\n};\n\n\ninterface ContainerProps {\n  readOnly?: boolean;\n};\n\nconst Container = styled.div<ContainerProps>`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  padding: 16px;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  background-color: ${colors.defaultInputColor};\n\n  &:focus-within {\n    border-color: #CED4DA;\n    border-width: 1px;\n  }\n\n  ${({ readOnly }) => \n    readOnly && `\n      border: 1px solid ${colors.readOnlyBorderColor};\n      background-color: ${colors.readOnlyInputColor};\n    `\n  }\n`;\n\nconst LabelAndInputContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  flex: 1;\n`;\n\nconst LabelAndTooltipContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  gap: 0.25rem;\n  margin-top: 4px;\n  align-items: center;\n  color: #CED4DA;\n`;\n\nconst Label = styled.label`\n  display: flex;\n  font-size: 14px;\n  font-weight: 550;\n`;\n\nconst InputWrapper = styled.div`\n  width: 100%;  \n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: stretch;\n  margin-top: 8px;\n`;\n\ninterface StyledInputProps {\n  readOnly?: boolean;\n}\n\nconst StyledInput = styled.input<StyledInputProps & { fontSize?: number }>`\n  width: 100%;\n  height: 27.5px;\n  border: 0;\n  padding: 0;\n  color: #FFFFFF;\n  background-color: #131A2A;\n  font-size: ${({ fontSize }) => fontSize || '28'}px;\n\n\n  &:focus {\n    box-shadow: none;\n    outline: none;\n  }\n\n  &:placeholder {\n    color: #6C757D;\n  }\n\n  &[type='number'] {\n    -moz-appearance: textfield;\n    &::-webkit-inner-spin-button,\n    &::-webkit-outer-spin-button {\n      -webkit-appearance: none;\n      margin: 0;\n    }\n  }\n\n  ${({ readOnly }) => \n    readOnly && `\n      pointer-events: none;\n      color: #6C757D;\n    `\n  }\n`;\n\nconst SelectorAccessory = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  color: #CED4DA;\n  padding-top: 8px;\n`;\n\nconst AccessoryAndInputLabelWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  color: #CED4DA;\n  margin: 9px 0px 2px 0px;\n`;\n\nconst AccessoryLabelAndMax = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 6px;\n`;\n\nconst MaxButton = styled.div`\n  color: #FFFFFF;\n  font-size: 14px;\n  font-weight: 600;\n  padding-bottom: 1px;\n  cursor: pointer;\n`;\n\nconst AccessoryLabel = styled.div`\n  font-size: 14px;\n  text-align: right;\n  font-weight: 550;\n`;\n\nconst InputLabel = styled.div`\n  pointer-events: none;\n  color: #9ca3af;\n  font-size: 20px;\n  text-align: right;\n`;\n"
  },
  {
    "path": "client/src/components/Send/NetworkRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\n\ninterface NetworkRowProps {\n  platformName: string;\n  isSelected: boolean;\n  flagSvg: string;\n  onRowClick: () => void;\n}\n\nexport const NetworkRow: React.FC<NetworkRowProps> = ({\n  platformName,\n  isSelected,\n  flagSvg,\n  onRowClick,\n}: NetworkRowProps) => {\n  NetworkRow.displayName = \"NetworkRow\";\n\n  return (\n    <Container\n      onClick={onRowClick}\n      selected={isSelected}\n    >\n      <DetailsContainer>\n        <FlagSvg src={flagSvg} />\n        <PlatformAndCurrencyLabel>\n          <PlatformLabel>{platformName}</PlatformLabel>\n        </PlatformAndCurrencyLabel>\n      </DetailsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div<{ selected: boolean }>`\n  display: flex;\n  flex-direction: row;\n  height: 54px;\n  padding: 6px 24px 6px 20px;\n\n  ${({ selected }) => selected && `\n    background-color: #191D28;\n    box-shadow: none;\n  `}\n\n  ${({ selected }) => !selected && `\n    &:hover {\n      background-color: #191D28;\n      box-shadow: none;\n    }\n  `}\n`;\n\nconst DetailsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  flex: 1;\n`;\n\nconst PlatformAndCurrencyLabel = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-grow: 1;\n`;\n\nconst PlatformLabel = styled.div`\n  display: flex;\n  flex-direction: row;\n  padding-top: 2px;\n  color: #FFFFFF;\n`;\n\nconst FlagSvg = styled.img`\n  border-radius: 18px;\n  width: 36px;\n  height: 36px;\n`;\n"
  },
  {
    "path": "client/src/components/Send/NetworkSelector.tsx",
    "content": "import React, { useReducer, useRef } from 'react';\nimport styled from 'styled-components';\nimport { X, ChevronDown } from 'react-feather';\nimport Link from '@mui/material/Link';\n\nimport { Overlay } from '@components/modals/Overlay';\nimport { NetworkRow } from '@components/Send/NetworkRow';\nimport { networksInfo, ReceiveNetworkType } from '@helpers/types';\nimport { ZKP2P_SURVEY_FORM_LINK } from '@helpers/docUrls';\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport useAccount from '@hooks/useAccount';\nimport useSendSettings from '@hooks/useSendSettings';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Z_INDEX } from '@theme/zIndex';\n\nimport baseSvg from '../../assets/images/base.svg';\nimport sepoliaSvg from '../../assets/images/sepolia.svg';\n\n\ninterface NetworkSelectorProps {\n  disabled?: boolean;\n}\n\nexport const NetworkSelector: React.FC<NetworkSelectorProps> = ({\n  disabled\n}) => {\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  const ref = useRef<HTMLDivElement>(null)\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined)\n\n  /*\n   * Contexts\n   */\n\n  const { network } = useAccount();\n  const { receiveNetwork, setReceiveNetwork, receiveNetworks } = useSendSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    toggleOpen();\n  };\n\n  const handleNetworkContainerClick = () => {\n    if (!disabled) {\n      toggleOpen();\n    }\n  };\n\n  const handleSelectPlatform = (network: ReceiveNetworkType) => {\n    if (setReceiveNetwork) {\n      setReceiveNetwork(network);\n\n      toggleOpen();\n    }\n  };\n\n  /*\n   * Helpers\n   */\n\n  const networkSvg = (): string => {\n    if (network === 'sepolia') {\n      return sepoliaSvg;\n    } else {\n      if (receiveNetwork) {\n        return networksInfo[receiveNetwork].networkSvg;\n      } else {\n        return baseSvg;\n      }\n    }\n  };\n\n  const networkName = (): string => {\n    if (network === 'sepolia') {\n      return 'Sepolia';\n    } else {\n      if (receiveNetwork) {\n        return networksInfo[receiveNetwork].networkName;\n      } else {\n        return 'Loading';\n      }\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <NetworkContainer onClick={handleNetworkContainerClick}>\n        <NetworkLogoAndNameContainer>\n          <NetworkSvg src={networkSvg()} />\n\n          <NetworkNameContainer>\n            <NetworkHeader>\n              {'To'}\n            </NetworkHeader>\n            <NetworkNameLabel>\n              {networkName()}\n            </NetworkNameLabel>\n          </NetworkNameContainer>\n        </NetworkLogoAndNameContainer>\n\n        <StyledChevronDown/>\n      </NetworkContainer>\n\n      {isOpen && (\n        <ModalAndOverlayContainer>\n          <Overlay onClick={handleOverlayClick}/>\n\n          <ModalContainer>\n            <TableHeader>\n              <ThemedText.SubHeader style={{ textAlign: 'left' }}>\n                Select a network\n              </ThemedText.SubHeader>\n\n              <button\n                onClick={handleOverlayClick}\n                style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n                <StyledX/>\n              </button>\n            </TableHeader>\n\n            <HorizontalDivider/>\n\n            <Table>\n              {receiveNetworks.map((network, index) => (\n                <NetworkRow\n                  key={index}\n                  platformName={networksInfo[network].networkName}\n                  flagSvg={networksInfo[network].networkSvg}\n                  isSelected={receiveNetwork === network}\n                  onRowClick={() => handleSelectPlatform(network)}\n                />\n              ))}\n            </Table>\n\n            <HorizontalDivider/>\n\n            <TableFooter>\n              Let us know which networks you are interested in seeing ZKP2P add support\n              for. <Link href={ ZKP2P_SURVEY_FORM_LINK } target='_blank'>\n                Give feedback ↗\n              </Link>\n            </TableFooter>\n          </ModalContainer>\n        </ModalAndOverlayContainer>\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst NetworkContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  justify-content: space-between;\n  align-items: center;\n  background: ${colors.selectorColor};\n  padding: 1.1rem 1rem;\n  cursor: pointer;\n\n  &:hover {\n    background-color: ${colors.selectorHover};\n    border: 1px solid ${colors.selectorHoverBorder};\n  }\n`;\n\nconst NetworkLogoAndNameContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 1rem;\n  justify-content: flex-start;\n`;\n\nconst NetworkNameContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.4rem;\n  justify-content: center;\n  text-align: left;\n`;\n\nconst NetworkHeader = styled.div`\n  font-size: 14px;\n  color: #CED4DA;\n`;\n\nconst NetworkNameLabel = styled.div`\n  font-size: 16px;\n  color: #FFF;\n`;\n\nconst NetworkSvg = styled.img`\n  border-radius: 18px;\n  width: 32px;\n  height: 32px;\n`;\n\nconst StyledChevronDown = styled(ChevronDown)`\n  width: 20px;\n  height: 20px;\n  color: #FFF;\n`;\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80%;\n  max-width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TableHeader = styled.div`\n  box-sizing: border-box;\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px 16px 16px 20px;\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  color: #616161;\n  height: 284px;\n\n  overflow-y: auto;\n  scrollbar-width: thin;\n`;\n\nconst TableFooter = styled.div`\n  padding: 20px;\n  font-size: 14px;\n  text-align: left;\n  line-height: 1.5;\n`;\n"
  },
  {
    "path": "client/src/components/Send/QuoteDrawer.tsx",
    "content": "import React, { useEffect, useState, useRef } from \"react\";\nimport styled from 'styled-components';\nimport { ChevronDown } from 'react-feather';\n\nimport { QuoteStep } from \"@components/Send/QuoteStep\";\nimport { toEthStringLong } from \"@helpers/units\";\nimport { colors } from '@theme/colors';\n\n\nconst PROTOCOL_MAP: { [key: string]: string } = {\n  'across': 'Across',\n  'hop': 'Hop',\n  'zerox': '0x',\n  'cctp': 'CCTP'\n};\n\ninterface QuoteDrawerProps {\n  isLoading: boolean;\n  isManagedWallet: boolean;\n  totalGasFeeUsd?: string;\n  totalGasFeeWei?: bigint;\n  serviceTimeSeconds?: number;\n  bridgeName?: string;\n}\n\nexport const QuoteDrawer: React.FC<QuoteDrawerProps> = ({\n  isLoading,\n  isManagedWallet,\n  totalGasFeeUsd,\n  totalGasFeeWei,\n  serviceTimeSeconds,\n  bridgeName,\n}) => {\n  const ref = useRef<HTMLDivElement>(null);\n\n  /*\n   * State\n   */\n\n  const [isOpen, setIsOpen] = useState(false);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (isLoading) {\n      setIsOpen(false);\n    }\n  }, [isLoading]);\n\n  /*\n   * Helpers\n   */\n\n  const feeWeiString = () => {\n    if (isLoading) {\n      return '';\n    };\n\n    if (!totalGasFeeWei) {\n      return 'Loading...';\n    }\n\n    return `${toEthStringLong(totalGasFeeWei)} ETH`\n  };\n  \n  const gasFeeLabel = isLoading ? 'Fetching quote...' : 'Network fee';\n  \n  const gasFeeValue = () => {\n    if (isLoading) {\n      return '';\n    };\n    \n    if (isManagedWallet) {\n      return '$0';\n    };\n\n    return `$${parseFloat(totalGasFeeUsd || '0').toFixed(2)}`\n  };\n  \n  const bridgeNameString = () => {\n    if (!bridgeName) {\n      return 'Unknown';\n    };\n\n    const cachedBridgeName = PROTOCOL_MAP[bridgeName];\n    if (cachedBridgeName) {\n      return cachedBridgeName;\n    } else {\n      return bridgeName.charAt(0).toUpperCase() + bridgeName.slice(1);\n    }\n  };\n  \n  const serviceTimeString = serviceTimeSeconds ? formattedServiceTime(serviceTimeSeconds) : `0 sec`;\n  function formattedServiceTime(seconds: number): string {\n    const minutes = Math.floor(seconds / 60);\n    const remainingSeconds = seconds % 60;\n    let formattedTime = \"\";\n  \n    if (minutes > 0) {\n      if (remainingSeconds > 0) {\n        formattedTime += `${minutes}m ${remainingSeconds}s`;\n      } else {\n        formattedTime += `${minutes} min`;\n      }\n    } else if (remainingSeconds > 0) {\n      formattedTime += `${remainingSeconds} sec`;\n    };\n  \n    return formattedTime;\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <TitleLabelAndDropdownIconContainer>\n        <GasFeeLabel>\n          {\"Arrival time\"}\n        </GasFeeLabel>\n\n        <GasFeeValueAndChevronContainer>\n          <GasFeeValue>\n            {serviceTimeString}\n          </GasFeeValue>  \n\n          <StyledChevronDown\n            onClick={() => setIsOpen(!isOpen)}\n            $isOpen={isOpen}\n          />\n        </GasFeeValueAndChevronContainer>\n      </TitleLabelAndDropdownIconContainer>\n\n      <QuoteStepDropdown $isOpen={isOpen}>\n        <HorizontalDivider/>\n        <RequirementListContainer>\n          {!isManagedWallet ? (\n            <QuoteStep\n              label={\"Fee amount\"}\n              value={feeWeiString()}\n            />\n          ) : null}\n\n          <QuoteStep\n            label={gasFeeLabel}\n            value={gasFeeValue()}\n          />\n\n          <QuoteStep \n            label={\"Route\"}\n            value={bridgeNameString()}\n          />\n\n          <QuoteStep\n            label={\"ZKP2P fee\"}\n            value={\"$0\"}\n          />\n        </RequirementListContainer>\n      </QuoteStepDropdown>\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 0px 20px;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  background: #141A2A;\n`;\n\nconst TitleLabelAndDropdownIconContainer = styled.div`\n  width: 100%;\n  height: 24px;\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  padding: 12px 0px 10px;\n`;\n\nconst GasFeeLabel = styled.div`\n  font-size: 14px;\n`;\n\nconst GasFeeValueAndChevronContainer = styled.div`\n  display: flex;\n  align-items: center;\n  font-size: 14px;\n  justify-content: space-between;\n  gap: 8px;\n`;\n\nconst GasFeeValue = styled.div`\n  font-size: 14px;\n`;\n\ninterface StyledChevronDownProps {\n  $isOpen?: boolean;\n}\n\nconst StyledChevronDown = styled(ChevronDown)<StyledChevronDownProps>`\n  width: 20px;\n  height: 20px;\n  color: #CED4DA;\n\n  transition: transform 0.4s;\n  transform: ${({ $isOpen }) => $isOpen ? 'rotate(180deg)' : 'rotate(0deg)'};\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\ninterface QuoteStepDropdownProps {\n  $isOpen?: boolean;\n}\n\nconst QuoteStepDropdown = styled.div<QuoteStepDropdownProps>`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  background: #141A2A;\n  color: #FFF;\n  align-items: center;\n  gap: 16px;\n  overflow: hidden;\n\n  max-height: ${({ $isOpen }) => $isOpen ? '500px' : '0px'};\n  transition: max-height 0.4s ease-out;\n`;\n\nconst RequirementListContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  padding-bottom: 16px;\n`;\n"
  },
  {
    "path": "client/src/components/Send/QuoteStep.tsx",
    "content": "import styled from \"styled-components\";\n\nimport { Row } from \"@components/legacy/Layout\";\n\n\ninterface QuoteStepProps {\n  label: string;\n  value: string;\n};\n\nexport const QuoteStep: React.FC<QuoteStepProps> = ({\n  label,\n  value,\n}) => {\n  return (\n    <Container>\n      <Label>{label}</Label>\n      <Value>{value}</Value>\n    </Container>\n  );\n};\n\nconst Container = styled(Row)`\n  border-radius: 12px;\n  font-size: 14px;\n  justify-content: space-between;\n`;\n\nconst Label = styled.div`\n  color: #CED4DA;\n`;\n\nconst Value = styled.div`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Send/TokenRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\n\ninterface TokenRowProps {\n  receiveTokenName: string;\n  receiveTokenSymbol: string;\n  isSelected: boolean;\n  tokenSvg: string;\n  onRowClick: () => void;\n}\n\nexport const TokenRow: React.FC<TokenRowProps> = ({\n  receiveTokenName,\n  receiveTokenSymbol,\n  isSelected,\n  tokenSvg,\n  onRowClick,\n}: TokenRowProps) => {\n  TokenRow.displayName = \"TokenRow\";\n\n  return (\n    <Container\n      onClick={onRowClick}\n      selected={isSelected}\n    >\n      <DetailsContainer>\n        <TokenSvg src={tokenSvg} />\n        <TokenNameAndSymbolContainer>\n          <TokenNameLabel>{receiveTokenName}</TokenNameLabel>\n          <TokenSymbolLabel>{receiveTokenSymbol}</TokenSymbolLabel>\n        </TokenNameAndSymbolContainer>\n      </DetailsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div<{ selected: boolean }>`\n  display: flex;\n  flex-direction: row;\n  height: 100%;\n  padding: 16px 24px 16px 20px;\n\n  ${({ selected }) => selected && `\n    background-color: #191D28;\n    box-shadow: none;\n  `}\n\n  ${({ selected }) => !selected && `\n    &:hover {\n      background-color: #191D28;\n      box-shadow: none;\n    }\n  `}\n`;\n\nconst DetailsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  flex: 1;\n`;\n\nconst TokenNameAndSymbolContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-grow: 1;\n`;\n\nconst TokenNameLabel = styled.div`\n  display: flex;\n  flex-direction: row;\n  padding-top: 2px;\n  color: #FFFFFF;\n`;\n\nconst TokenSymbolLabel = styled.div`\n  padding-top: 4px;\n  color: #FFFFFF;\n`;\n\nconst TokenSvg = styled.img`\n  border-radius: 18px;\n  width: 36px;\n  height: 36px;\n`;\n"
  },
  {
    "path": "client/src/components/Send/TokenSelector.tsx",
    "content": "import React, { useReducer, useRef } from 'react';\nimport styled from 'styled-components';\nimport { X, ChevronDown } from 'react-feather';\nimport Link from '@mui/material/Link';\n\nimport { Overlay } from '@components/modals/Overlay';\nimport { TokenRow } from '@components/Send/TokenRow';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Z_INDEX } from '@theme/zIndex';\nimport {\n  baseUSDCTokenData,\n  receiveTokenData,\n  networkSupportedTokens,\n  ReceiveTokenType,\n  ReceiveTokenData,\n} from '@helpers/types';\nimport { ZKP2P_SURVEY_FORM_LINK } from '@helpers/docUrls';\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport useSendSettings from '@hooks/useSendSettings';\n\n\ninterface TokenSelectorProps {\n  disabled?: boolean;\n}\n\nexport const TokenSelector: React.FC<TokenSelectorProps> = ({\n  disabled\n}) => {\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  const ref = useRef<HTMLDivElement>(null)\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined)\n\n  /*\n   * Contexts\n   */\n\n  const { receiveNetwork, ReceiveNetwork, receiveToken, setReceiveToken } = useSendSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    toggleOpen();\n  };\n\n  const handleLogoAndTokenLabelClick = () => {\n    if (!disabled) {\n      toggleOpen();\n    }\n  };\n\n  const handleSelectToken = (receiveToken: ReceiveTokenType) => {\n    if (setReceiveToken) {\n      setReceiveToken(receiveToken);\n\n      toggleOpen();\n    }\n  };\n\n  /*\n   * Helpers\n   */\n\n  const selectedReceiveToken = (): ReceiveTokenData => {\n    if (receiveTokenData && receiveToken && receiveNetwork) {\n      const selectedReceiveTokenData = receiveTokenData[receiveNetwork][receiveToken];\n\n      if (!selectedReceiveTokenData) {\n        return baseUSDCTokenData;\n      } else {\n        return selectedReceiveTokenData;\n      }\n    } else {\n      return baseUSDCTokenData;\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <LogoAndTokenLabel onClick={handleLogoAndTokenLabelClick}>\n        <NetworkSvg src={selectedReceiveToken().logoURI} />\n\n        <TokenLabel>\n          {selectedReceiveToken().symbol}\n        </TokenLabel>\n        \n        <StyledChevronDown/>\n      </LogoAndTokenLabel>\n\n      {isOpen && (\n        <ModalAndOverlayContainer>\n          <Overlay onClick={handleOverlayClick}/>\n\n          <ModalContainer>\n            <TableHeader>\n              <ThemedText.SubHeader style={{ textAlign: 'left' }}>\n                Select a token\n              </ThemedText.SubHeader>\n\n              <button\n                onClick={handleOverlayClick}\n                style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n                <StyledX/>\n              </button>\n            </TableHeader>\n\n            <HorizontalDivider/>\n\n            <Table>\n              {networkSupportedTokens[receiveNetwork ?? ReceiveNetwork.ETHEREUM].map((tokenType, index) => {\n                const tokenData = receiveTokenData[receiveNetwork ?? ReceiveNetwork.ETHEREUM][tokenType];\n\n                const receiveTokenName = tokenData?.name ?? 'USD Coin';\n                const receiveTokenSymbol = tokenData?.symbol ?? 'USDC';\n                const tokenSvg = tokenData?.logoURI ?? '';\n                const isSelected = receiveToken === tokenType;\n\n                return (\n                  <TokenRow\n                    key={index}\n                    receiveTokenName={receiveTokenName}\n                    receiveTokenSymbol={receiveTokenSymbol}\n                    tokenSvg={tokenSvg}\n                    isSelected={isSelected}\n                    onRowClick={() => handleSelectToken(tokenType)}\n                  />\n                );\n              })}\n            </Table>\n\n            <HorizontalDivider/>\n\n            <TableFooter>\n              Let us know which platforms you are interested in seeing ZKP2P add support\n              for. <Link href={ ZKP2P_SURVEY_FORM_LINK } target='_blank'>\n                Give feedback ↗\n              </Link>\n            </TableFooter>\n          </ModalContainer>\n        </ModalAndOverlayContainer>\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst LogoAndTokenLabel = styled.div`\n  width: 98px;\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: space-between;\n  border-radius: 24px;\n  background: ${colors.selectorColor};\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 4px 8px 4px 4px;\n  gap: 6px;\n  cursor: pointer;\n\n  &:hover {\n    background-color: ${colors.selectorHover};\n    border: 1px solid ${colors.selectorHoverBorder};\n  }\n`;\n\nconst NetworkSvg = styled.img`\n  border-radius: 18px;\n  width: 24px;\n  height: 24px;\n`;\n\nconst TokenLabel = styled.div`\n  display: flex;\n  align-items: center;\n  font-size: 16px;\n  font-weight: 600;\n  color: #FFF;\n  padding-top: 2px;\n`;\n\nconst StyledChevronDown = styled(ChevronDown)`\n  width: 20px;\n  height: 20px;\n  color: #FFF;\n`;\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TableHeader = styled.div`\n  box-sizing: border-box;\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px 16px 16px 20px;\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  color: #616161;\n`;\n\nconst TableFooter = styled.div`\n  padding: 20px;\n  font-size: 14px;\n  text-align: left;\n  line-height: 1.5;\n`;\n"
  },
  {
    "path": "client/src/components/Send/index.tsx",
    "content": "import React, { Suspense, useCallback, useEffect, useMemo, useState, ChangeEvent } from 'react';\nimport styled from 'styled-components/macro';\nimport { PublicKey } from \"@solana/web3.js\";\nimport { getDomainKeySync, NameRegistryState } from \"@bonfida/spl-name-service\";\nimport {\n  useContractWrite,\n  usePrepareContractWrite,\n  useWaitForTransaction,\n  usePrepareSendTransaction,\n  useSendTransaction\n} from 'wagmi';\nimport debounce from 'lodash/debounce';\nimport { usePrepareContractBatchWrite, useContractBatchWrite  } from \"@zerodev/wagmi\";\n\nimport { Button } from \"@components/common/Button\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { AutoColumn } from '@components/layouts/Column';\nimport { NetworkSelector } from '@components/Send/NetworkSelector';\nimport { QuoteDrawer } from '@components/Send/QuoteDrawer';\nimport { Input } from '@components/Send/Input';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { ZERO, SOCKET_QUOTE_DEFAULT_ADDRESS, SOCKET_DEFAULT_SOL_ADDRESS, QUOTE_FETCHING_DEBOUNCE_MS } from '@helpers/constants';\nimport { toBigInt, toUsdcString, toTokenString } from '@helpers/units';\nimport {\n  LoginStatus,\n  ReceiveNetwork,\n  SendTransactionStatus,\n  FetchQuoteStatus,\n  ReceiveToken,\n  receiveTokenData,\n  networksInfo,\n  baseUSDCTokenData\n} from '@helpers/types';\nimport { resolveEnsName } from '@helpers/ens';\nimport { alchemySolanaConnection } from \"index\";\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useSocketBridge from '@hooks/useSocketBridge';\nimport useSendSettings from '@hooks/useSendSettings';\nimport useQuery from '@hooks/useQuery';\n\nimport baseSvg from '../../assets/images/base.svg';\nimport sepoliaSvg from '../../assets/images/sepolia.svg';\n\n\ntype RecipientAddress = {\n  input: string;\n  ensName: string;\n  rawAddress: string;\n  displayAddress: string;\n  addressType: string;\n};\n\nconst EMPTY_RECIPIENT_ADDRESS: RecipientAddress = {\n  input: '',\n  ensName: '',\n  rawAddress: '',\n  displayAddress: '',\n  addressType: ''\n};\n\nexport type SendQuote = {\n  sendAmountInput: string;\n  receiveAmountQuote: SocketReceiveQuote | null;\n};\n\nconst ZERO_QUOTE: SendQuote = {\n  sendAmountInput: '',\n  receiveAmountQuote: null\n};\n\nexport type SocketReceiveQuote = {\n  fromAmount?: bigint;\n  toAmount: bigint;\n  totalGasFeesInUsd?: string;\n  serviceTimeSeconds?: number;\n  bridgeName?: string;\n  decimals?: number;\n  totalGasFeesWei?: bigint;\n  routeData?: any;\n};\n\nexport default function SendForm() {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, network, loginStatus, loggedInEthereumAddress } = useAccount();\n  const { usdcBalance, refetchUsdcBalance, usdcApprovalToSocketBridge, refetchUsdcApprovalToSocketBridge } = useBalances();\n  const { blockscanUrl, usdcAddress, usdcAbi, socketBridgeAddress } = useSmartContracts();\n  const { getSocketQuote, getSocketTransactionData, getSocketTransactionStatus } = useSocketBridge();\n  const { receiveNetwork, receiveToken } = useSendSettings();\n\n  const { queryParams } = useQuery();\n  const amountFromQuery = queryParams.AMOUNT_USDC;\n  const recipientAddressFromQuery = queryParams.RECIPIENT_ADDRESS;\n\n  /*\n   * State\n   */\n\n  const [transactionHash, setTransactionHash] = useState<string>('');\n  const [receiveBridgeTransactionLink, setReceiveBridgeTransactionLink] = useState<string>('');\n\n  const [sendState, setSendState] = useState(SendTransactionStatus.DEFAULT);\n  const [currentQuote, setCurrentQuote] = useState<SendQuote>(ZERO_QUOTE);\n\n  const [quoteFetchingStatus, setQuoteFetchingStatus] = useState<string>(FetchQuoteStatus.DEFAULT);\n\n  const [recipientAddressInput, setRecipientAddressInput] = useState<RecipientAddress>(EMPTY_RECIPIENT_ADDRESS);\n\n  const [isRecipientInputFocused, setIsRecipientInputFocused] = useState(false);\n\n  const [isValidRecipientAddress, setIsValidRecipientAddress] = useState<boolean>(false);\n  const [amountToApprove, setAmountToApprove] = useState<bigint>(ZERO);\n\n  const [socketSendTransactionData, setSocketSendTransactionData] = useState<string>('');\n\n  const [shouldConfigureApprovalWrite, setShouldConfigureApprovalWrite] = useState<boolean>(false);\n  const [shouldConfigureTransferWrite, setShouldConfigureTransferWrite] = useState<boolean>(false);\n  const [shouldConfigureBridgeWrite, setShouldConfigureBridgeWrite] = useState<boolean>(false);\n  const [shouldConfigureBatchBridgeWrite, setShouldConfigureBatchBridgeWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  const { config: batchWriteApproveAndBridgeConfig } = usePrepareContractBatchWrite({\n    calls: [\n      {\n        address: usdcAddress as `0x${string}`,\n        abi: usdcAbi,\n        functionName: \"approve\",\n        args: [\n          socketBridgeAddress,\n          amountToApprove\n        ]\n      },\n      {\n        to: socketBridgeAddress as `0x${string}`,\n        data: socketSendTransactionData as `0x${string}`,\n      }\n    ],\n    enabled: shouldConfigureBatchBridgeWrite\n  });\n\n  const {\n    data: batchWriteApproveAndBridgeResult,\n    status: batchWriteApproveAndBridgeStatus,\n    sendUserOperationAsync: batchWriteApproveAndBridgeAsync,\n  } = useContractBatchWrite(batchWriteApproveAndBridgeConfig);\n\n  const {\n    status: mineBatchApproveAndBridgeStatus,\n  } = useWaitForTransaction({\n    hash: batchWriteApproveAndBridgeResult ? batchWriteApproveAndBridgeResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('batchWriteApproveAndBridgeAsync successful: ', data);\n\n      resetStateOnSuccessfulTransaction();\n    },\n  });\n\n  //\n  // transfer(address spender, uint256 value)\n  //\n  const { config: writeTransferConfig } = usePrepareContractWrite({\n    address: usdcAddress,\n    abi: usdcAbi,\n    functionName: \"transfer\",\n    args: [\n      recipientAddressInput.rawAddress,\n      toBigInt(currentQuote.sendAmountInput.toString()),\n    ],\n    enabled: shouldConfigureTransferWrite\n  });\n\n  const {\n    data: submitTransferResult,\n    status: signTransferTransactionStatus,\n    writeAsync: writeSubmitTransferAsync\n  } = useContractWrite(writeTransferConfig);\n\n  const {\n    status: mineTransferTransactionStatus,\n  } = useWaitForTransaction({\n    hash: submitTransferResult ? submitTransferResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitTransferAsync successful: ', data);\n\n      resetStateOnSuccessfulTransaction();\n    },\n  });\n\n  //\n  // approve(address spender, uint256 value)\n  //\n  const { config: writeApproveConfig } = usePrepareContractWrite({\n    address: usdcAddress,\n    abi: usdcAbi,\n    functionName: \"approve\",\n    args: [\n      socketBridgeAddress,\n      amountToApprove\n    ],\n    enabled: shouldConfigureApprovalWrite\n  });\n\n  const {\n    data: submitApproveResult,\n    status: signApproveTransactionStatus,\n    writeAsync: writeSubmitApproveAsync\n  } = useContractWrite(writeApproveConfig);\n\n  const {\n    status: mineApproveTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitApproveResult ? submitApproveResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitApproveAsync successful: ', data);\n      \n      refetchUsdcApprovalToSocketBridge?.();\n\n      refetchUsdcBalance?.();\n    },\n  });\n\n  //\n  // Bridge useContractWrite non-4337\n  //\n\n  const { config: writeBridgeConfig } = usePrepareSendTransaction({\n    to: socketBridgeAddress,\n    data: socketSendTransactionData,\n    value: ZERO,\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureBridgeWrite\n  });\n\n  const {\n    data: submitBridgeResult,\n    status: signBridgeTransactionStatus,\n    sendTransactionAsync: writeSubmitBridgeAsync\n  } = useSendTransaction({...writeBridgeConfig, gas: 650_000});\n\n  const {\n    status: mineBridgeTransactionStatus\n  } = useWaitForTransaction({\n    hash: submitBridgeResult ? submitBridgeResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitBridgeAsync successful: ', data);\n      \n      resetStateOnSuccessfulTransaction();\n    },\n  });\n\n  /*\n   * Handlers\n   */\n\n  const handleSendAmountInputChange = async (event: ChangeEvent<HTMLInputElement>, field: keyof SendQuote) => {\n    validateAndSetQuote(event.target.value, recipientAddressInput.rawAddress);\n  };\n\n  const handleRecipientInputChange = async (value: string) => {\n    validateAndSetAddress(value);\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const updateSendState = async () => {\n      const sendAmountInput = currentQuote.sendAmountInput;\n      \n      // Send Amount Input\n      if (!sendAmountInput) { \n        // console.log('MISSING_AMOUNTS');\n\n        setSendState(SendTransactionStatus.MISSING_AMOUNTS);\n      } else {\n        // Receive Quote\n        const receiveAmount = currentQuote.receiveAmountQuote;\n        const isQuoteLoading = quoteFetchingStatus === FetchQuoteStatus.LOADING;\n        const isReceiveAmountNull = !receiveAmount?.toAmount;\n\n        if (isQuoteLoading) {\n          // console.log('FETCHING_QUOTE');\n\n          setSendState(SendTransactionStatus.FETCHING_QUOTE);\n        } else if (isReceiveAmountNull && !isQuoteLoading) {\n          // console.log('INVALID_ROUTES');\n\n          setSendState(SendTransactionStatus.INVALID_ROUTES);\n        } else {\n          const usdcBalanceLoaded = usdcBalance !== null;\n          \n          if (usdcBalanceLoaded) {\n            const sendAmountBI = toBigInt(sendAmountInput);\n            const isSendAmountGreaterThanBalance = sendAmountBI > usdcBalance;\n\n            if (isSendAmountGreaterThanBalance) {\n              // console.log('INSUFFICIENT_BALANCE');\n\n              setSendState(SendTransactionStatus.INSUFFICIENT_BALANCE);\n            } else {\n              const isNetworkNative = receiveNetwork === ReceiveNetwork.BASE;\n              const isTokenUsdc = receiveToken === ReceiveToken.USDC;\n              const isNativeTransferTransaction = isNetworkNative && isTokenUsdc;\n              \n              // Native Base USDC Transfer\n              if (isNativeTransferTransaction) {\n                if (!recipientAddressInput.input) {\n                  // console.log('DEFAULT');\n\n                  setSendState(SendTransactionStatus.DEFAULT);\n                } else if (!isValidRecipientAddress) {\n                  // console.log('INVALID_RECIPIENT_ADDRESS');\n\n                  setSendState(SendTransactionStatus.INVALID_RECIPIENT_ADDRESS);\n                } else {\n                  const signingSendTransaction = signTransferTransactionStatus === 'loading';\n                  const miningSendTransaction = mineTransferTransactionStatus === 'loading';\n    \n                  if (signingSendTransaction) {\n                    // console.log('TRANSACTION_SIGNING');\n\n                    setSendState(SendTransactionStatus.TRANSACTION_SIGNING);\n                  } else if (miningSendTransaction) {\n                    // console.log('TRANSACTION_MINING');\n\n                    setSendState(SendTransactionStatus.TRANSACTION_MINING);\n                  } else {\n                    // console.log('VALID_FOR_NATIVE_TRANSFER');\n\n                    setSendState(SendTransactionStatus.VALID_FOR_NATIVE_TRANSFER);\n                  }\n                }\n              } else {\n                // Approval Potentially Required\n                const usdcApprovalToSocketBridgeLoaded = usdcApprovalToSocketBridge !== null;\n\n                if (usdcApprovalToSocketBridgeLoaded) {\n                  const sendAmountBi = toBigInt(currentQuote.sendAmountInput);\n                  const isSendAmountGreaterThanApprovedBalance = sendAmountBi > usdcApprovalToSocketBridge;\n                  const loginStatusRequiresApproval = loginStatus === LoginStatus.EOA;\n\n                  const signingApproveTransaction = signApproveTransactionStatus === 'loading';\n                  const miningApproveTransaction = mineApproveTransactionStatus === 'loading';\n                  const successfulApproveTransaction = mineApproveTransactionStatus === 'success';\n\n                  // Approval Required\n                  if (isSendAmountGreaterThanApprovedBalance && !successfulApproveTransaction && loginStatusRequiresApproval) {\n                    if (signingApproveTransaction) {\n                      // console.log('TRANSACTION_SIGNING');\n\n                      setSendState(SendTransactionStatus.TRANSACTION_SIGNING);\n                    } else if (miningApproveTransaction) {\n                      // console.log('TRANSACTION_MINING');\n\n                      setSendState(SendTransactionStatus.TRANSACTION_MINING);\n                    } else {\n                      // console.log('APPROVAL_REQUIRED');\n\n                      setSendState(SendTransactionStatus.APPROVAL_REQUIRED);\n                    }\n                  } else {\n                    // Approval Not Required, Recipient Address Fork (see below)\n                    if (!recipientAddressInput.input) {\n                      // console.log('DEFAULT');\n\n                      setSendState(SendTransactionStatus.DEFAULT);\n                    } else if (!isValidRecipientAddress) {\n                      // console.log('INVALID_RECIPIENT_ADDRESS');\n\n                      setSendState(SendTransactionStatus.INVALID_RECIPIENT_ADDRESS);\n                    } else {\n                      const signingBatchWriteApproveAndBridge = batchWriteApproveAndBridgeStatus === 'loading';\n                      const miningBatchApproveAndBridge = mineBatchApproveAndBridgeStatus === 'loading';\n                      const signingBridgeTransaction = signBridgeTransactionStatus === 'loading';\n                      const miningBridgeTransaction = mineBridgeTransactionStatus === 'loading';\n        \n                      if (signingBridgeTransaction || signingBatchWriteApproveAndBridge) {\n                        // console.log('TRANSACTION_SIGNING');\n\n                        setSendState(SendTransactionStatus.TRANSACTION_SIGNING);\n                      } else if (miningBridgeTransaction || miningBatchApproveAndBridge) {\n                        // console.log('TRANSACTION_MINING');\n\n                        setSendState(SendTransactionStatus.TRANSACTION_MINING);\n                      } else {\n                        if (shouldConfigureBridgeWrite || shouldConfigureBatchBridgeWrite) {\n                          if (isSendAmountGreaterThanApprovedBalance) {\n                            // console.log('VALID_FOR_BATCH_TRANSFER_BRIDGE');\n\n                            setSendState(SendTransactionStatus.VALID_FOR_BATCH_TRANSFER_BRIDGE);\n                          } else {\n                            // console.log('VALID_FOR_BRIDGE');\n\n                            setSendState(SendTransactionStatus.VALID_FOR_BRIDGE);\n                          }\n                        } else {\n                          // console.log('INVALID_FOR_BRIDGE')\n                        }\n                      }\n                    }\n                  }\n                } else {\n                  // console.log('MISSING_AMOUNTS');\n\n                  setSendState(SendTransactionStatus.MISSING_AMOUNTS);\n                }\n              }\n            }\n          } else {\n            // console.log('MISSING_AMOUNTS: USDC Balance');\n\n            setSendState(SendTransactionStatus.MISSING_AMOUNTS);    \n          }\n        }\n      }\n    }\n\n    updateSendState();\n  }, [\n      recipientAddressInput.input,\n      currentQuote,\n      quoteFetchingStatus,\n      receiveToken,\n      receiveNetwork,\n      usdcBalance,\n      isValidRecipientAddress,\n      signApproveTransactionStatus,\n      mineApproveTransactionStatus,\n      signTransferTransactionStatus,\n      mineTransferTransactionStatus,\n      usdcApprovalToSocketBridge,\n      signBridgeTransactionStatus,\n      mineBridgeTransactionStatus,\n      shouldConfigureBridgeWrite,\n      loginStatus,\n      batchWriteApproveAndBridgeStatus,\n      mineBatchApproveAndBridgeStatus,\n      shouldConfigureBatchBridgeWrite\n    ]\n  );\n\n  useEffect(() => {\n    if (socketSendTransactionData) {\n      if (amountToApprove > ZERO) {\n        setShouldConfigureBatchBridgeWrite(true);\n      } else {\n        setShouldConfigureBridgeWrite(true);\n\n        setShouldConfigureBatchBridgeWrite(false);\n      }\n    } else {\n      setShouldConfigureBridgeWrite(false);\n\n      setShouldConfigureBatchBridgeWrite(false);\n    };\n\n  }, [socketSendTransactionData, amountToApprove]);\n\n  useEffect(() => {\n    if (loginStatus === LoginStatus.LOGGED_OUT) {\n      resetStateOnSuccessfulTransaction();\n\n      if (transactionHash) {\n        setTransactionHash('');\n      };\n\n      if (receiveBridgeTransactionLink) {\n        setReceiveBridgeTransactionLink('');\n      };\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [loginStatus]);\n\n  useEffect(() => {\n    const isApprovalRequired = sendState === SendTransactionStatus.APPROVAL_REQUIRED;\n    setShouldConfigureApprovalWrite(isApprovalRequired);\n    \n    setShouldConfigureTransferWrite(sendState === SendTransactionStatus.VALID_FOR_NATIVE_TRANSFER);\n  }, [sendState]);\n\n  useEffect(() => {\n    if (submitTransferResult?.hash) {\n      setTransactionHash(submitTransferResult.hash);\n    };\n  }, [submitTransferResult])\n\n  useEffect(() => {\n    if (submitBridgeResult?.hash) {\n      setTransactionHash(submitBridgeResult.hash);\n    };\n\n    let intervalId: any;\n    const fetchSocketTransactionStatus = async () => {\n      if (receiveNetwork && submitBridgeResult) {\n        const transferOutTxnHash = submitBridgeResult.hash;\n        const networkChainId = networksInfo[receiveNetwork].networkChainId;\n        const response = await getSocketTransactionStatus(transferOutTxnHash, networkChainId)\n\n        if (response.result?.destinationTransactionHash) {\n          const destinationTransactionHash = response.result.destinationTransactionHash;\n          const link = `${networksInfo[receiveNetwork].blockExplorer}/tx/${destinationTransactionHash}`;\n          setReceiveBridgeTransactionLink(link);\n\n          clearInterval(intervalId);\n        };\n      };\n    };\n\n    if (submitBridgeResult?.hash) {\n      intervalId = setInterval(fetchSocketTransactionStatus, 5000);\n    }\n  \n    return () => {\n      if (intervalId) {\n        clearInterval(intervalId);\n      }\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [submitBridgeResult])\n\n  useEffect(() => {\n    if (batchWriteApproveAndBridgeResult?.hash) {\n      setTransactionHash(batchWriteApproveAndBridgeResult.hash);\n    };\n\n    let intervalId: any;\n    const fetchSocketTransactionStatus = async () => {\n      if (receiveNetwork && batchWriteApproveAndBridgeResult) {\n        const transferOutTxnHash = batchWriteApproveAndBridgeResult.hash;\n        const networkChainId = networksInfo[receiveNetwork].networkChainId;\n        const response = await getSocketTransactionStatus(transferOutTxnHash, networkChainId)\n\n        if (response.result?.destinationTransactionHash) {\n          const destinationTransactionHash = response.result.destinationTransactionHash;\n          const link = `${networksInfo[receiveNetwork].blockExplorer}/tx/${destinationTransactionHash}`;\n          setReceiveBridgeTransactionLink(link);\n\n          clearInterval(intervalId);\n        };\n      };\n    };\n\n    if (batchWriteApproveAndBridgeResult?.hash) {\n      intervalId = setInterval(fetchSocketTransactionStatus, 5000);\n    }\n  \n    return () => {\n      if (intervalId) {\n        clearInterval(intervalId);\n      }\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [batchWriteApproveAndBridgeResult])\n\n  useEffect(() => {\n    const usdcApprovalToSocketBridgeLoaded = usdcApprovalToSocketBridge !== null && usdcApprovalToSocketBridge !== undefined;\n    const sendAmountInput = currentQuote.sendAmountInput;\n\n    if (!sendAmountInput || !usdcApprovalToSocketBridgeLoaded) {\n      setAmountToApprove(ZERO);\n    } else {\n      const sendAmountBI = toBigInt(sendAmountInput.toString());\n      const approvalDifference = BigInt(sendAmountBI) - BigInt(usdcApprovalToSocketBridge);\n\n      if (approvalDifference > ZERO) {\n        setAmountToApprove(sendAmountBI);\n      } else {\n        setAmountToApprove(ZERO);\n      }\n    }\n  }, [currentQuote.sendAmountInput, usdcApprovalToSocketBridge]);\n\n  useEffect(() => {\n    let recipientAddressForUpdatedQuote = recipientAddressInput.rawAddress;\n    \n    const receiveNetworkAddressTypeForRecipient = receiveNetwork === ReceiveNetwork.SOLANA ? 'sol' : 'eth';\n    if (receiveNetworkAddressTypeForRecipient !== recipientAddressInput.addressType) {\n      recipientAddressForUpdatedQuote = '';\n\n      setRecipientAddressInput(EMPTY_RECIPIENT_ADDRESS);\n    };\n\n    updateQuoteOnInputChange(currentQuote.sendAmountInput, recipientAddressForUpdatedQuote);\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [receiveNetwork, receiveToken, usdcApprovalToSocketBridge]);\n\n  useEffect(() => {\n    if (recipientAddressFromQuery && amountFromQuery) {\n      validateAndSetQuote(amountFromQuery, recipientAddressFromQuery);\n      validateAndSetAddress(recipientAddressFromQuery);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [recipientAddressFromQuery, amountFromQuery]);\n  \n  /*\n   * Helpers\n   */\n\n  const updateQuoteOnInputChange = async (inputAmount?: string, recipientAddress?: string) => {\n    setSocketSendTransactionData('');\n\n    const sendInputValue = inputAmount;\n    if (!sendInputValue) {\n      return;\n    };\n\n    // Each of these triggers different intermediate UI renders\n    setCurrentQuote({\n      ...ZERO_QUOTE,\n      sendAmountInput: inputAmount\n    });\n\n    // setCurrentQuote(prevQuote => ({\n    //   ...prevQuote,\n    //   sendAmountInput: inputAmount\n    // }));\n\n    const isReceiveNetworkBase = receiveNetwork === ReceiveNetwork.BASE;\n    const isReceiveTokenUsdc = receiveToken === ReceiveToken.USDC;\n    const isValidRecipientAddressPresent = recipientAddress;\n\n    if (isReceiveNetworkBase && isReceiveTokenUsdc) {               // Base USDC to Base USDC\n      setQuoteFetchingStatus(FetchQuoteStatus.DEFAULT);\n\n      const baseUsdcToBaseUsdcQuote = {\n        toAmount: toBigInt(sendInputValue),\n        decimals: 6\n      } as SocketReceiveQuote;\n\n      setCurrentQuote({\n        sendAmountInput: sendInputValue,\n        receiveAmountQuote: baseUsdcToBaseUsdcQuote\n      });\n    } else if (isValidRecipientAddressPresent) {                    // Recipient Address exists, fetch txn data\n      setQuoteFetchingStatus(FetchQuoteStatus.LOADING);\n\n      debouncedFetchFirmQuote(sendInputValue, recipientAddress);\n    } else {                                                        // Fetch indicative quote\n      setQuoteFetchingStatus(FetchQuoteStatus.LOADING);\n      \n      debouncedFetchIndicativeQuote(sendInputValue);\n    }\n  };\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const debouncedFetchIndicativeQuote = useCallback(\n    debounce(async (sendAmount, recipient?) => {\n      const receiveAmountQuote = await fetchSocketQuote(sendAmount, recipient);\n      \n      console.log('fetchedIndicativeQuote:', receiveAmountQuote);\n\n      if (receiveAmountQuote) {\n        setCurrentQuote({\n          sendAmountInput: sendAmount,\n          receiveAmountQuote\n        });\n\n        setQuoteFetchingStatus(FetchQuoteStatus.LOADED)\n      }\n    }, QUOTE_FETCHING_DEBOUNCE_MS\n  ), [receiveNetwork, receiveToken] );\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const debouncedFetchFirmQuote = useCallback(\n    debounce(async (sendAmount, recipient) => {\n      await fetchFirmQuoteAndTxnData(sendAmount, recipient);\n    }, QUOTE_FETCHING_DEBOUNCE_MS\n  ), [receiveNetwork, receiveToken]);\n\n  /*\n   * Indicative Quote\n   */\n\n  const cancelDebounceFetchIndicativeQuote = () => {\n    setQuoteFetchingStatus(FetchQuoteStatus.DEFAULT);\n\n    debouncedFetchIndicativeQuote.cancel();\n  };\n\n  const fetchSocketQuote = async (sendAmount: string, recipient?: string): Promise<SocketReceiveQuote | null> => {\n    if (!receiveNetwork || !receiveToken || !receiveTokenData) {\n      return null;\n    };\n\n    let selectedReceiveTokenData = receiveTokenData[receiveNetwork][receiveToken];\n    if (!selectedReceiveTokenData) {\n      selectedReceiveTokenData = baseUSDCTokenData;\n    };\n\n    const defaultAddressForQuote = receiveNetwork === ReceiveNetwork.SOLANA ? SOCKET_DEFAULT_SOL_ADDRESS : SOCKET_QUOTE_DEFAULT_ADDRESS;\n    const getSocketQuoteParams = {\n      fromAmount: toBigInt(sendAmount).toString(),\n      userAddress: loggedInEthereumAddress ?? defaultAddressForQuote,\n      toChainId: networksInfo[receiveNetwork].networkChainId,\n      toTokenAddress: selectedReceiveTokenData.address,\n      recipient: recipient ?? defaultAddressForQuote\n    };\n\n    console.log('getSocketQuote params: ', getSocketQuoteParams);\n\n    const quote = await getSocketQuote(getSocketQuoteParams);\n    if (!quote.success || quote.result?.routes?.length === 0) {\n      setQuoteFetchingStatus(FetchQuoteStatus.DEFAULT);\n\n      return null;\n    };\n\n    console.log('getSocketQuote response:', quote);\n\n    const bestRoute = quote.result.routes[0];\n    const fromAmount = BigInt(bestRoute.fromAmount);\n    const toAmount = BigInt(bestRoute.toAmount);\n    const totalGasFeesInUsd = bestRoute.totalGasFeesInUsd;\n    const serviceTimeSeconds = bestRoute.serviceTime as number;\n\n    const usedBridgeNames = bestRoute.usedBridgeNames;\n    const usedDexName = bestRoute.usedDexName;\n    const bridgeName = usedBridgeNames ? usedBridgeNames[0] : usedDexName;\n\n    const userTxns = bestRoute.userTxs;\n    const totalGasFees = userTxns.reduce((cumulativeFees: bigint, txn: any) => {\n      return cumulativeFees + BigInt(txn.gasFees.gasAmount)\n    }, ZERO);\n    \n    return {\n      fromAmount: fromAmount,\n      toAmount: toAmount,\n      totalGasFeesInUsd: totalGasFeesInUsd,\n      serviceTimeSeconds,\n      decimals: selectedReceiveTokenData.decimals,\n      bridgeName: bridgeName,\n      totalGasFeesWei: totalGasFees,\n      routeData: bestRoute\n    } as SocketReceiveQuote;\n  };\n\n  /*\n   * Firm Quote\n   */\n\n  const cancelDebounceFetchFirmQuote = () => {\n    setQuoteFetchingStatus(FetchQuoteStatus.DEFAULT);\n\n    debouncedFetchFirmQuote.cancel();\n  };\n\n  const fetchFirmQuoteAndTxnData = async (inputAmount: string, recipientAddress: string) => {\n    const updatedQuote = await fetchSocketQuote(inputAmount, recipientAddress);\n\n    console.log('fetchedFirmQuote:', updatedQuote);\n\n    // todo: perform check if updated quote price range moved too much\n    if (!updatedQuote) {\n      return;\n    };\n\n    const socketTransactionData = await getSocketTransactionData(updatedQuote.routeData);\n    if (!socketTransactionData) {\n      return;\n    };\n\n    setCurrentQuote({\n      sendAmountInput: inputAmount,\n      receiveAmountQuote: updatedQuote\n    });\n\n    setQuoteFetchingStatus(FetchQuoteStatus.LOADED)\n\n    setSocketSendTransactionData(socketTransactionData.result.txData);\n  };\n\n  function resetStateOnInputChanges() {\n    if (transactionHash) {\n      setTransactionHash('');\n    };\n\n    if (receiveBridgeTransactionLink) {\n      setReceiveBridgeTransactionLink('');\n    };\n\n    if (socketSendTransactionData) {\n      setSocketSendTransactionData('');\n    };\n\n    if (sendState === SendTransactionStatus.TRANSACTION_SUCCEEDED) {\n      setSendState(SendTransactionStatus.DEFAULT);\n    };\n  };\n\n  function resetStateOnSuccessfulTransaction() {\n    setSocketSendTransactionData('');\n\n    setQuoteFetchingStatus(FetchQuoteStatus.DEFAULT);\n\n    setCurrentQuote(ZERO_QUOTE);\n    setRecipientAddressInput(EMPTY_RECIPIENT_ADDRESS);\n\n    refetchUsdcBalance?.();\n\n    refetchUsdcApprovalToSocketBridge?.();\n  };\n\n  const validateAndSetQuote = async (value: string, recipientAddress: string) => {\n    resetStateOnInputChanges();\n    \n    if (value === \"\") {\n      cancelDebounceFetchIndicativeQuote();\n\n      cancelDebounceFetchFirmQuote();\n\n      setCurrentQuote(ZERO_QUOTE);\n    } else if (value === \"0\") {\n      setCurrentQuote({\n        ...ZERO_QUOTE,\n        sendAmountInput: \"0\"\n      });\n    } else if (value === \".\") {\n      setCurrentQuote({\n        ...ZERO_QUOTE,\n        sendAmountInput: \"0.\"\n      });\n    } else if (isValidSendAmountInput(value)) {\n      updateQuoteOnInputChange(value, recipientAddress);\n    } else {\n      cancelDebounceFetchIndicativeQuote();\n\n      cancelDebounceFetchFirmQuote();\n\n      setCurrentQuote({\n        sendAmountInput: value,\n        receiveAmountQuote: {\n          toAmount: ZERO,\n          decimals: 6\n        }\n      });\n    }\n  }\n\n  const validateAndSetAddress = async (recipientAddress: string) => {\n    resetStateOnInputChanges();\n\n    let rawAddress = '';\n    let ensName = '';\n    let displayAddress = '';\n    let isValidAddress = false;\n\n    const isNetworkSolana = receiveNetwork === ReceiveNetwork.SOLANA;\n\n    setRecipientAddressInput({\n      input: recipientAddress,\n      ensName,\n      rawAddress,\n      displayAddress,\n      addressType: isNetworkSolana ? 'sol' : 'eth'\n    });\n  \n    if (isNetworkSolana) {\n      if (recipientAddress.endsWith('.sol')) {\n        const { pubkey: recordKey } = getDomainKeySync(recipientAddress);\n        const { registry } = await NameRegistryState.retrieve(alchemySolanaConnection, recordKey);\n        const { owner } = registry;\n\n        if (owner) {\n          rawAddress = owner.toString();\n          displayAddress = recipientAddress;\n    \n          updateQuoteOnInputChange(currentQuote.sendAmountInput, owner.toString());\n          isValidAddress = true;\n        }\n      } else if (recipientAddress.length >= 32 && recipientAddress.length <= 44 && /^[1-9A-HJ-NP-Za-km-z]+$/.test(recipientAddress)) {\n        try {\n          const publicKey = new PublicKey(recipientAddress);\n          const validSolanaAddress = await PublicKey.isOnCurve(publicKey);\n          if (validSolanaAddress) {\n            rawAddress = recipientAddress;\n            displayAddress = recipientAddress;\n      \n            updateQuoteOnInputChange(currentQuote.sendAmountInput, recipientAddress);\n            isValidAddress = true;\n          }\n        } catch {\n          console.log('Invalid Solana address provided');\n        }\n      }\n    } else {\n      if (recipientAddress.endsWith('.eth') || recipientAddress.endsWith('.xyz')) {\n        ensName = recipientAddress;\n        const resolvedAddress = await resolveEnsName(recipientAddress);\n        if (resolvedAddress) {\n          rawAddress = resolvedAddress;\n          displayAddress = resolvedAddress;\n  \n          updateQuoteOnInputChange(currentQuote.sendAmountInput, resolvedAddress);\n          isValidAddress = true;\n        }\n      } else if (recipientAddress.startsWith('0x') && recipientAddress.length === 42) {\n        rawAddress = recipientAddress;\n        displayAddress = recipientAddress;\n  \n        updateQuoteOnInputChange(currentQuote.sendAmountInput, recipientAddress);\n        isValidAddress = true;\n      };\n    }\n\n    setRecipientAddressInput(prevState => ({\n      ...prevState,\n      ensName: ensName,\n      rawAddress: rawAddress,\n      displayAddress: displayAddress,\n    }));\n\n    setIsValidRecipientAddress(isValidAddress);\n  }\n\n  /*\n   * Other Helpers\n   */\n\n  const recipientPlaceholderLabel = useMemo(() => {\n    if (receiveNetwork === ReceiveNetwork.SOLANA) {\n      return \"Wallet address or SNS name\";\n    } else {\n      return \"Wallet address or ENS name\";\n    }\n  }, [receiveNetwork]);\n\n  function isValidSendAmountInput(value: string) {\n    const isValid = /^-?\\d*(\\.\\d{0,6})?$/.test(value);\n    \n    return parseFloat(value) >= 0 && isValid;\n  };\n\n  const usdcBalanceLabel = useMemo(() => {\n    if (isLoggedIn && usdcBalance !== null) {\n      return `Balance: ${toUsdcString(usdcBalance, true)}`\n    } else {\n      return '';\n    }\n  }, [usdcBalance, isLoggedIn]);\n\n  const ctaOnClick = async () => {\n    switch (sendState) {\n      case SendTransactionStatus.APPROVAL_REQUIRED:\n        try {\n          await writeSubmitApproveAsync?.();\n        } catch (error) {\n          console.log('writeSubmitApproveAsync failed: ', error);\n        }\n        break;\n\n      case SendTransactionStatus.VALID_FOR_NATIVE_TRANSFER:\n        try {\n          await writeSubmitTransferAsync?.();\n        } catch (error) {\n          console.log('writeSubmitTransferAsync failed: ', error);\n        }\n        break;\n\n      case SendTransactionStatus.VALID_FOR_BATCH_TRANSFER_BRIDGE:\n        try {\n          await batchWriteApproveAndBridgeAsync?.();\n        } catch (error) {\n          console.log('batchWriteApproveAndBridgeAsync failed: ', error);\n        }\n        break;\n\n      case SendTransactionStatus.VALID_FOR_BRIDGE:\n        try {\n          await writeSubmitBridgeAsync?.();\n        } catch (error) {\n          console.log('writeSubmitBridgeAsync failed: ', error);\n        }\n        break;\n\n      default:\n        break;\n    }\n  };\n\n  const ctaDisabled = (): boolean => {\n    switch (sendState) {\n      case SendTransactionStatus.DEFAULT:\n      case SendTransactionStatus.INSUFFICIENT_BALANCE:\n      case SendTransactionStatus.INVALID_RECIPIENT_ADDRESS:\n      case SendTransactionStatus.INVALID_ROUTES:\n      case SendTransactionStatus.MISSING_AMOUNTS:\n      case SendTransactionStatus.TRANSACTION_SIGNING:\n      case SendTransactionStatus.TRANSACTION_MINING:\n      case SendTransactionStatus.FETCHING_QUOTE:\n        return true;\n\n      case SendTransactionStatus.APPROVAL_REQUIRED:\n      case SendTransactionStatus.VALID_FOR_NATIVE_TRANSFER:\n      case SendTransactionStatus.VALID_FOR_BRIDGE:\n      case SendTransactionStatus.VALID_FOR_BATCH_TRANSFER_BRIDGE:\n      case SendTransactionStatus.TRANSACTION_SUCCEEDED:\n      default:\n        return false;\n    }\n  };\n\n  const ctaLoading = (): boolean => {\n    switch (sendState) {\n      case SendTransactionStatus.TRANSACTION_SIGNING:\n      case SendTransactionStatus.TRANSACTION_MINING:\n        return loginStatus === LoginStatus.AUTHENTICATED;\n\n      default:\n        return false;\n    }\n  };\n\n  const ctaText = (): string => {\n    switch (sendState) {\n      case SendTransactionStatus.FETCHING_QUOTE:\n        return 'Fetching quote';\n      \n      case SendTransactionStatus.INVALID_RECIPIENT_ADDRESS:\n        return 'Invalid recipient address';\n\n      case SendTransactionStatus.MISSING_AMOUNTS:\n        return 'Input send amount';\n\n      case SendTransactionStatus.INVALID_ROUTES:\n        return 'Insufficient amount for bridge';\n      \n      case SendTransactionStatus.INSUFFICIENT_BALANCE:\n        const humanReadableUsdcBalance = usdcBalance ? toUsdcString(usdcBalance) : '0';\n        return `Insufficient USDC balance: ${humanReadableUsdcBalance}`;\n\n      case SendTransactionStatus.TRANSACTION_SIGNING:\n        return 'Signing Transaction';\n\n      case SendTransactionStatus.TRANSACTION_MINING:\n        return 'Mining Transaction';\n\n      case SendTransactionStatus.VALID_FOR_NATIVE_TRANSFER:\n        return 'Send';\n\n      case SendTransactionStatus.VALID_FOR_BATCH_TRANSFER_BRIDGE:\n      case SendTransactionStatus.VALID_FOR_BRIDGE:\n        const bridgeText = receiveNetwork === ReceiveNetwork.BASE ? 'Send' : 'Bridge';\n        return bridgeText;\n\n      case SendTransactionStatus.TRANSACTION_SUCCEEDED:\n        return 'Send';\n\n      case SendTransactionStatus.APPROVAL_REQUIRED:\n        const usdcApprovalToSocketBridgeString = usdcApprovalToSocketBridge ? toUsdcString(usdcApprovalToSocketBridge) : '0';\n        return `Insufficient USDC transfer approval: ${usdcApprovalToSocketBridgeString}`;\n\n      case SendTransactionStatus.DEFAULT:\n      default:\n        return 'Input recipient address';\n    }\n  };\n\n  const selectorsDisabled = (): boolean => {\n    return sendState === SendTransactionStatus.TRANSACTION_SIGNING || sendState === SendTransactionStatus.TRANSACTION_MINING;\n  };\n\n  const recipientInputText = (): string => {\n    if (isRecipientInputFocused) {\n      return recipientAddressInput.input;\n    } else {\n      if (recipientAddressInput.ensName) {\n        return recipientAddressInput.ensName;\n      } else if (recipientAddressInput.displayAddress) {\n        return recipientAddressInput.displayAddress;\n      } else {\n        return recipientAddressInput.input;\n      }\n    }\n  };\n\n  const networkSvg = (): string => {\n    if (network === 'sepolia') {\n      return sepoliaSvg;\n    } else {\n      return baseSvg;\n    }\n  };\n\n  const networkName = (): string => {\n    if (network === 'sepolia') {\n      return 'Sepolia';\n    } else {\n      return 'Base';\n    }\n  };\n\n  function receiveAmountInputValue() {\n    if (currentQuote.receiveAmountQuote && \n        currentQuote.receiveAmountQuote.toAmount !== undefined && \n        currentQuote.receiveAmountQuote.decimals !== undefined) {\n\n      return toTokenString(currentQuote.receiveAmountQuote.toAmount, currentQuote.receiveAmountQuote.decimals);\n    }\n\n    return \"0\";\n  };\n\n  const shouldDisplayReceiveLink = (): boolean => {\n    const isBaseToBaseUSDCTransfer = receiveNetwork === ReceiveNetwork.BASE && receiveToken === ReceiveToken.USDC;\n\n    return !isBaseToBaseUSDCTransfer;\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Suspense>\n      <Wrapper>\n        <SendFormContainer>\n          <TitleContainer>\n            <ThemedText.HeadlineMedium>\n              Send\n            </ThemedText.HeadlineMedium>\n          </TitleContainer>\n\n          <MainContentWrapper>\n            <NetworkFromAndToContainer>\n              <NetworkFromAndToInnerContainer>\n                <FromNetworkContainer>\n                  <NetworkLogoAndNameContainer>\n                    <NetworkSvg src={networkSvg()} />\n\n                    <NetworkNameContainer>\n                      <NetworkHeader>\n                        {'From'}\n                      </NetworkHeader>\n\n                      <NetworkNameLabel>\n                        {networkName()}\n                      </NetworkNameLabel>\n                    </NetworkNameContainer>\n                  </NetworkLogoAndNameContainer>\n                </FromNetworkContainer>\n\n                <NetworkSelector\n                  disabled={selectorsDisabled()}\n                />\n              </NetworkFromAndToInnerContainer>\n            </NetworkFromAndToContainer>\n\n            <Input\n              label=\"Amount\"\n              name={`SendAmount`}\n              value={currentQuote.sendAmountInput}\n              onChange={event => handleSendAmountInputChange(event, 'sendAmountInput')}\n              type=\"number\"\n              inputLabel=\"USDC\"\n              placeholder=\"0\"\n              accessoryLabel={usdcBalanceLabel}\n              enableMax={true}\n              maxButtonOnClick={() => {\n                if (usdcBalance) {\n                  const simulatedEvent = {\n                    target: {\n                      value: toUsdcString(usdcBalance, false),\n                      name: 'sendAmountInput'\n                    }\n                  } as ChangeEvent<HTMLInputElement>;\n              \n                  handleSendAmountInputChange(simulatedEvent, 'sendAmountInput');\n                }\n              }}\n            />\n\n            <Input\n              label=\"Receive\"\n              name={`ReceiveAmount`}\n              value={receiveAmountInputValue()}\n              hasSelector={true}\n              selectorDisabled={selectorsDisabled()}\n              onChange={() => {}} // no-op\n              readOnly={true}\n              type=\"number\"\n              inputLabel=\"USDC\"\n              placeholder=\"0\"\n              accessoryLabel={usdcBalanceLabel}\n            />\n\n            <Input\n              label=\"To\"\n              name={`to`}\n              value={recipientInputText()}\n              onChange={(e) => {handleRecipientInputChange(e.currentTarget.value)}}\n              onFocus={() => setIsRecipientInputFocused(true)}\n              onBlur={() => setIsRecipientInputFocused(false)}\n              type=\"string\"\n              placeholder={recipientPlaceholderLabel}\n              fontSize={24}\n            />\n\n            { quoteFetchingStatus === FetchQuoteStatus.LOADED ? (\n              <QuoteDrawer\n                isLoading={quoteFetchingStatus === FetchQuoteStatus.LOADING}\n                isManagedWallet={loginStatus === LoginStatus.AUTHENTICATED}\n                totalGasFeeUsd={currentQuote.receiveAmountQuote?.totalGasFeesInUsd}\n                totalGasFeeWei={currentQuote.receiveAmountQuote?.totalGasFeesWei}\n                serviceTimeSeconds={currentQuote.receiveAmountQuote?.serviceTimeSeconds}\n                bridgeName={currentQuote.receiveAmountQuote?.bridgeName}\n              />\n            ) : null}\n\n            <ButtonContainer>\n              {!isLoggedIn ? (\n                <CustomConnectButton\n                  fullWidth={true}\n                />\n              ) : (\n                <Button\n                  fullWidth={true}\n                  disabled={ctaDisabled()}\n                  loading={ctaLoading()}\n                  onClick={async () => {\n                    ctaOnClick();\n                  }}>\n                  { ctaText() }\n                </Button>\n               )}\n            </ButtonContainer>\n\n            {transactionHash?.length ? (\n              <LinkContainer>\n                <Link\n                  disabled={!transactionHash}\n                  href={`${blockscanUrl}/tx/${transactionHash}`}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\">\n                    <ThemedText.LabelSmall textAlign=\"center\">\n                      {shouldDisplayReceiveLink() ? 'Send Receipt ↗' : 'View on Explorer ↗'}\n                    </ThemedText.LabelSmall>\n                </Link>\n\n                {shouldDisplayReceiveLink() ? (\n                  <Link\n                    disabled={!receiveBridgeTransactionLink}\n                    href={`${receiveBridgeTransactionLink}`}\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\">\n                      <ThemedText.LabelSmall textAlign=\"center\">\n                        Receive Receipt ↗\n                      </ThemedText.LabelSmall>\n                  </Link>\n                ) : null}\n              </LinkContainer>\n            ) : null}\n          </MainContentWrapper>\n        </SendFormContainer>\n      </Wrapper>\n    </Suspense>\n  );\n};\n\nconst Wrapper = styled.div`\n  width: 100%;\n  max-width: 484px;\n  display: flex;\n  flex-direction: column;\n\n  @media (min-width: 600px) {\n    padding-top: 32px;\n  }\n`;\n\nconst SendFormContainer = styled(AutoColumn)`\n  padding: 1rem;\n  gap: 1rem;\n  background-color: ${colors.container};\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst TitleContainer = styled.div`\n  display: flex;\n  margin: 0rem 0.75rem;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nconst MainContentWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  align-self: center;\n  border-radius: 4px;\n  justify-content: center;\n`;\n\nconst NetworkFromAndToContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n`;\n\nconst NetworkFromAndToInnerContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  align-items: center;\n  justify-content: space-between;\n\n  @media (min-width: 600px) {\n    flex-direction: row;\n  }\n`;\n\nconst FromNetworkContainer = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst NetworkLogoAndNameContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  gap: 1rem;\n  align-items: center;\n  justify-content: flex-start;\n  background: ${colors.selectorColor};\n  padding: 1.1rem 1rem;\n`;\n\nconst NetworkNameContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.4rem;\n  justify-content: center;\n  align-items: center;\n  text-align: left;\n`;\n\nconst NetworkHeader = styled.div`\n  font-size: 14px;\n  color: #CED4DA;\n`;\n\nconst NetworkNameLabel = styled.div`\n  font-size: 16px;\n  color: #6C757D;\n`;\n\nconst NetworkSvg = styled.img`\n  width: 32px;\n  height: 32px;\n`;\n\nconst LinkContainer = styled.div`\n  display: flex;\n  justify-content: space-evenly;\n  padding: 0 2.25rem;\n`;\n\ninterface LinkProps {\n  disabled?: boolean;\n}\n\nconst Link = styled.a<LinkProps>`\n  white-space: pre;\n  display: inline-block;\n  color: #1F95E2;\n  text-decoration: none;\n  padding: 0.75rem 1rem 0.5rem 1rem;\n  justify-content: center;\n  align-items: center;\n  flex: 1;\n\n  &:hover {\n    text-decoration: ${({ disabled }) => disabled ? 'none' : 'underline'};\n  }\n\n  ${({ disabled }) => \n    disabled && `\n      color: gray;\n      pointer-events: none;\n      cursor: default;\n  `}\n`;\n\nconst ButtonContainer = styled.div`\n  width: 100%;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/CurrencySelector.tsx",
    "content": "import React, { useReducer, useRef } from 'react';\nimport styled from 'styled-components';\nimport { X, ChevronDown } from 'react-feather';\nimport Link from '@mui/material/Link';\n\nimport { Overlay } from '@components/modals/Overlay';\nimport { CurrencyRow } from '@components/modals/CurrencyRow';\nimport { CurrencyIndexType, paymentPlatformInfo, PaymentPlatformType } from '@helpers/types';\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport { ZKP2P_SURVEY_FORM_LINK } from '@helpers/docUrls';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Z_INDEX } from '@theme/zIndex';\n\n\nexport const CurrencySelector: React.FC = () => {\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  const ref = useRef<HTMLDivElement>(null)\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined)\n\n  /*\n   * Contexts\n   */\n\n  const { paymentPlatform, currencyIndex, setCurrencyIndex } = usePlatformSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    toggleOpen();\n  };\n\n  const handleSelectCurrency = (currencyIndex: CurrencyIndexType) => {\n    if (setCurrencyIndex) {\n      setCurrencyIndex(currencyIndex);\n\n      toggleOpen();\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <CurrencyContainer onClick={toggleOpen}>\n        <CurrencyLogoAndNameContainer>\n          <CurrencySvg src={paymentPlatformInfo[paymentPlatform as PaymentPlatformType].flagSvgs[currencyIndex]} />\n\n          <CurrencyNameContainer>\n            <CurrencyHeader>\n              {'Currency'}\n            </CurrencyHeader>\n            <CurrencyNameLabel>\n              {paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies[currencyIndex]}\n            </CurrencyNameLabel>\n          </CurrencyNameContainer>\n        </CurrencyLogoAndNameContainer>\n\n        <StyledChevronDown/>\n      </CurrencyContainer>\n\n      {isOpen && (\n        <ModalAndOverlayContainer>\n          <Overlay onClick={handleOverlayClick}/>\n\n          <ModalContainer>\n            <TableHeader>\n              <ThemedText.SubHeader style={{ textAlign: 'left' }}>\n                Select a Currency\n              </ThemedText.SubHeader>\n\n              <button\n                onClick={handleOverlayClick}\n                style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n                <StyledX/>\n              </button>\n            </TableHeader>\n\n            <HorizontalDivider/>\n\n            <Table>\n              { paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies.map((currency, currIndex) => (\n                <CurrencyRow\n                  key={currIndex}\n                  platformCurrency={currency}\n                  flagSvg={paymentPlatformInfo[paymentPlatform as PaymentPlatformType].flagSvgs[currIndex]}\n                  isSelected={currencyIndex === currIndex}\n                  onRowClick={() => handleSelectCurrency(currIndex)}\n                />\n              ))}\n            </Table>\n\n            <HorizontalDivider/>\n\n            <TableFooter>\n              Let us know which currencies you are interested in seeing ZKP2P add support\n              for. <Link href={ ZKP2P_SURVEY_FORM_LINK } target='_blank'>\n                Give feedback ↗\n              </Link>\n            </TableFooter>\n          </ModalContainer>\n        </ModalAndOverlayContainer>\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst CurrencyContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  justify-content: space-between;\n  align-items: center;\n  background: ${colors.selectorColor};\n  padding: 1.1rem 1rem;\n  cursor: pointer;\n\n  &:hover {\n    background-color: ${colors.selectorHover};\n    border: 1px solid ${colors.selectorHoverBorder};\n  }\n`;\n\nconst CurrencyLogoAndNameContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 1rem;\n  justify-content: flex-start;\n`;\n\nconst CurrencyNameContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.4rem;\n  justify-content: center;\n  text-align: left;\n`;\n\nconst CurrencyHeader = styled.div`\n  font-size: 14px;\n  color: #CED4DA;\n`;\n\nconst CurrencyNameLabel = styled.div`\n  font-size: 16px;\n  color: #FFF;\n`;\n\nconst CurrencySvg = styled.img`\n  border-radius: 18px;\n  width: 32px;\n  height: 32px;\n`;\n\nconst StyledChevronDown = styled(ChevronDown)`\n  width: 20px;\n  height: 20px;\n  color: #FFF;\n`;\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TableHeader = styled.div`\n  box-sizing: border-box;\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px 16px 16px 20px;\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  color: #616161;\n  height: 284px;\n\n  overflow-y: auto;\n  scrollbar-width: thin;\n`;\n\nconst TableFooter = styled.div`\n  padding: 20px;\n  font-size: 14px;\n  text-align: left;\n  line-height: 1.5;\n`;"
  },
  {
    "path": "client/src/components/Swap/Input.tsx",
    "content": "import React, { ChangeEvent } from \"react\";\nimport styled from 'styled-components';\n\nimport { colors } from '@theme/colors';\n\n\ninterface InputProps {\n  label: string;\n  name: string;\n  value?: string;\n  type?: string;\n  onChange: (event: ChangeEvent<HTMLInputElement>) => void;\n  onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n  placeholder?: string;\n  inputLabel?: string;\n  readOnly?: boolean;\n  accessoryLabel?: string;\n  enableMax?: boolean\n  maxButtonOnClick?: () => void;\n}\n\nexport const Input: React.FC<InputProps> = ({\n  label,\n  name,\n  value,\n  onChange,\n  onFocus,\n  onKeyDown,\n  placeholder,\n  inputLabel,\n  type = \"text\",\n  readOnly = false,\n  accessoryLabel=\"\",\n  enableMax = false,\n  maxButtonOnClick = () => {},\n}: InputProps) => {\n  Input.displayName = \"Input\";\n\n  return (\n    <Container readOnly={readOnly}>\n      <LabelAndInputContainer>\n        <LabelAndTooltipContainer>\n          <Label htmlFor={name}>\n              {label}\n          </Label>\n        </LabelAndTooltipContainer>\n        <InputWrapper>\n          <StyledInput\n            type={type}\n            name={name}\n            id={name}\n            placeholder={placeholder}\n            value={value}\n            onChange={onChange}\n            onFocus={onFocus}\n            onKeyDown={onKeyDown}\n            readOnly={readOnly}\n          />\n        </InputWrapper>\n      </LabelAndInputContainer>\n\n      <AccessoryAndInputLabelWrapper>\n        <AccessoryLabelAndMax>\n          <AccessoryLabel>\n            {accessoryLabel}\n          </AccessoryLabel>\n\n          {enableMax && accessoryLabel && (\n            <MaxButton onClick={maxButtonOnClick}>\n              Max\n            </MaxButton>\n          )}\n        </AccessoryLabelAndMax>\n\n        {inputLabel ? (\n          <InputLabel>\n            <span>{inputLabel}</span>\n          </InputLabel>\n        ) : null}\n      </AccessoryAndInputLabelWrapper>\n    </Container>\n  );\n};\n\ninterface ContainerProps {\n  readOnly?: boolean;\n};\n\nconst Container = styled.div<ContainerProps>`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  padding: 16px;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  background-color: ${colors.defaultInputColor};\n\n  &:focus-within {\n    border-color: #CED4DA;\n    border-width: 1px;\n  }\n\n  ${({ readOnly }) => \n    readOnly && `\n      border: 1px solid ${colors.readOnlyBorderColor};\n      background-color: ${colors.readOnlyInputColor};\n    `\n  }\n`;\n\nconst LabelAndInputContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  flex: 1;\n`;\n\nconst LabelAndTooltipContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  gap: 0.25rem;\n  margin-top: 4px;\n  align-items: center;\n  color: #CED4DA;\n`;\n\nconst Label = styled.label`\n  display: flex;\n  font-size: 14px;\n  font-weight: 550;\n`;\n\nconst InputWrapper = styled.div`\n  width: 100%;  \n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: stretch;\n  margin-top: 8px;\n`;\n\ninterface StyledInputProps {\n  readOnly?: boolean;\n}\n\nconst StyledInput = styled.input<StyledInputProps & { fontSize?: number }>`\n  width: 100%;\n  height: 27.5px;\n  border: 0;\n  padding: 0;\n  color: #FFFFFF;\n  background-color: #131A2A;\n  font-size: ${({ fontSize }) => fontSize || '28'}px;\n\n\n  &:focus {\n    box-shadow: none;\n    outline: none;\n  }\n\n  &:placeholder {\n    color: #6C757D;\n  }\n\n  &[type='number'] {\n    -moz-appearance: textfield;\n    &::-webkit-inner-spin-button,\n    &::-webkit-outer-spin-button {\n      -webkit-appearance: none;\n      margin: 0;\n    }\n  }\n\n  ${({ readOnly }) => \n    readOnly && `\n      pointer-events: none;\n      color: #6C757D;\n    `\n  }\n`;\n\nconst AccessoryAndInputLabelWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  color: #CED4DA;\n  margin: 9px 0px 2px 0px;\n`;\n\nconst AccessoryLabelAndMax = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 6px;\n`;\n\nconst MaxButton = styled.div`\n  color: #FFFFFF;\n  font-size: 14px;\n  font-weight: 600;\n  padding-bottom: 1px;\n  cursor: pointer;\n`;\n\nconst AccessoryLabel = styled.div`\n  font-size: 14px;\n  text-align: right;\n  font-weight: 550;\n`;\n\nconst InputLabel = styled.div`\n  pointer-events: none;\n  color: #9ca3af;\n  font-size: 20px;\n  text-align: right;\n`;"
  },
  {
    "path": "client/src/components/Swap/InstructionDrawer.tsx",
    "content": "import React, { useReducer, useRef } from \"react\";\nimport styled from 'styled-components';\nimport { ChevronDown } from 'react-feather';\n\nimport { InstructionStep } from \"@components/Swap/InstructionStep\";\nimport { Input } from \"@components/common/Input\";\nimport { platformStrings } from \"@helpers/strings\";\nimport useQuery from '@hooks/useQuery';\nimport { PaymentPlatformType } from '@helpers/types';\nimport { colors } from '@theme/colors';\n\n\ninterface InstructionDrawerProps {\n  recipientAddress?: string;\n  setRecipientAddress: (address: string) => void;\n  isLoggedIn: boolean;\n  paymentPlatform: PaymentPlatformType\n}\n\nexport const InstructionDrawer: React.FC<InstructionDrawerProps> = ({\n  recipientAddress,\n  setRecipientAddress,\n  isLoggedIn,\n  paymentPlatform,\n}) => {\n  const ref = useRef<HTMLDivElement>(null);\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * State\n   */\n\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  /*\n   * Handlers\n   */\n\n  const navigateToDepositsHandler = () => {\n    navigateWithQuery('/deposits');\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <TitleLabelAndDropdownIconContainer>\n        <TokenLabel>\n          Instructions\n        </TokenLabel>\n        \n        <StyledChevronDown\n          onClick={toggleOpen}\n          $isOpen={isOpen}\n        />\n      </TitleLabelAndDropdownIconContainer>\n\n      <InstructionsDropdown $isOpen={isOpen}>\n        <HorizontalDivider/>\n        <InstructionListContainer>\n          <InstructionStep step={1}>\n            { platformStrings.getForPlatform(paymentPlatform, 'INSTRUCTION_DRAWER_STEP_ONE') }\n          </InstructionStep>\n\n          <InstructionStep step={2}>\n            { platformStrings.getForPlatform(paymentPlatform, 'INSTRUCTION_DRAWER_STEP_TWO') }\n          </InstructionStep>\n\n          <InputWrapper>\n            <Input\n              label=\"Recipient\"\n              name=\"recipientAddress\"\n              value={recipientAddress}\n              onChange={(e) => setRecipientAddress(e.target.value)}\n              placeholder={!isLoggedIn ? 'Wallet disconnected' : 'Recipient address'}\n              readOnly={!isLoggedIn}\n            />\n          </InputWrapper>\n\n          <InstructionStep step={3}>\n            { platformStrings.getForPlatform(paymentPlatform, 'INSTRUCTION_DRAWER_STEP_THREE') }\n          </InstructionStep>\n\n          <InstructionStep step={4}>\n            { platformStrings.getForPlatform(paymentPlatform, 'INSTRUCTION_DRAWER_STEP_FOUR') }\n          </InstructionStep>\n        </InstructionListContainer>\n\n        <LiquidityLink onClick={navigateToDepositsHandler}>\n          Interested in providing liquidity?\n        </LiquidityLink>\n      </InstructionsDropdown>\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 0px 20px;\n  background-color: ${colors.container};\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst TitleLabelAndDropdownIconContainer = styled.div`\n  width: 100%;\n  height: 24px;\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  padding: 14px 0px 12px;\n`;\n\nconst TokenLabel = styled.div`\n  display: flex;\n  align-items: center;\n  font-size: 14px;\n`;\n\ninterface StyledChevronDownProps {\n  $isOpen?: boolean;\n}\n\nconst StyledChevronDown = styled(ChevronDown)<StyledChevronDownProps>`\n  width: 20px;\n  height: 20px;\n  color: #CED4DA;\n\n  transition: transform 0.4s;\n  transform: ${({ $isOpen }) => $isOpen ? 'rotate(180deg)' : 'rotate(0deg)'};\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\ninterface InstructionsDropdownProps {\n  $isOpen?: boolean;\n}\n\nconst InstructionsDropdown = styled.div<InstructionsDropdownProps>`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  gap: 16px;\n  overflow: hidden;\n\n  max-height: ${({ $isOpen }) => $isOpen ? '500px' : '0px'};\n  transition: max-height 0.4s ease-out;\n`;\n\nconst InstructionListContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n`;\n\nconst InputWrapper = styled.div`\n  padding: 0 20px;\n`;\n\nconst LiquidityLink = styled.button`\n  font-size: 14px;\n  font-family: 'Graphik';\n  color: #FFFFFF;\n  opacity: 0.3;\n  text-align: center;\n  padding-bottom: 20px;\n  background: none;\n  border: none;\n  cursor: pointer;\n  text-decoration: underline;\n  display: inline;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/InstructionStep.tsx",
    "content": "import styled from \"styled-components\";\n\nimport { CenterAllDiv, Row } from \"@components/legacy/Layout\";\n\n\nexport const InstructionStep: React.FC<{\n  step?: number;\n  children: React.ReactNode;\n}> = ({ step, children }) => {\n  return (\n    <Container>\n      {step !== undefined && (\n        <Label>\n          <span>{step}.</span>\n        </Label>\n      )}\n      <InstructionStepText>{children}</InstructionStepText>\n    </Container>\n  );\n};\n\nconst Container = styled(Row)`\n  gap: 0.75rem;\n  border-radius: 12px;\n  color: #CED4DA;\n  line-height: 1.35;\n`;\n\nconst Label = styled(CenterAllDiv)`\n  border-radius: 4px;\n  width: 12px;\n  height: 12px;\n  font-size: 14px;\n`;\n\nconst InstructionStepText = styled.span`\n  font-size: 14px;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/OnRamperIntentRow.tsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport styled from 'styled-components/macro'\nimport Link from '@mui/material/Link';\nimport { ENSName, AddressDisplayEnum } from 'react-ens-name';\n\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport { AccessoryButton } from '@components/common/AccessoryButton';\nimport { SwapModal } from '@components/Swap/SwapModal';\nimport { SwapModalMobile } from '@components/Swap/SwapModalMobile';\nimport { ReviewRequirements } from '@components/modals/ReviewRequirements';\nimport usePlatformSettings from \"@hooks/usePlatformSettings\";\nimport useSmartContracts from \"@hooks/useSmartContracts\";\nimport { alchemyMainnetEthersProvider } from \"index\";\nimport { PaymentPlatformType, ReceiveCurrencyId, ReceiveCurrencyIdType } from \"@helpers/types\";\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface IntentRowProps {\n  paymentPlatform: PaymentPlatformType | undefined;\n  amountUSDCToReceive: string;\n  amountUSDToSend: string;\n  expirationTimestamp: string;\n  depositorVenmoId: string;\n  depositorName?: string;\n  depositorAddress: string;\n  recipientAddress: string;\n  receiveCurrencyId?: ReceiveCurrencyIdType;\n  handleCompleteOrderClick: () => void;\n  shouldAutoSelectIntent: boolean;\n  resetShouldAutoSelectIntent: () => void;\n}\n\nexport type IntentRowData = IntentRowProps;\n\nexport const IntentRow: React.FC<IntentRowProps> = ({\n  paymentPlatform,\n  amountUSDCToReceive,\n  amountUSDToSend,\n  expirationTimestamp,\n  depositorVenmoId,\n  depositorAddress,\n  depositorName,\n  recipientAddress,\n  receiveCurrencyId,\n  handleCompleteOrderClick,\n  shouldAutoSelectIntent,\n  resetShouldAutoSelectIntent,\n}: IntentRowProps) => {\n  IntentRow.displayName = \"IntentRow\";\n\n  /*\n   * Context\n   */\n\n  const { blockscanUrl } = useSmartContracts();\n  const {\n    PaymentPlatform,\n    reviewedRequirementsForPlatform,\n    markPlatformRequirementsAsReviewed\n  } = usePlatformSettings();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * State\n   */\n\n  const [shouldShowRequirementsModal, setShouldShowRequirementsModal] = useState<boolean>(false);\n\n  const [shouldShowSwapModal, setShouldShowSwapModal] = useState<boolean>(false);\n\n  /*\n   * Helpers\n   */\n\n  const requestedAmountLabel = `${amountUSDCToReceive} USDC`;\n  const depositorEtherscanLink = `${blockscanUrl}/address/${depositorAddress}`;\n  const orderExpirationLabel = `${expirationTimestamp}`;\n\n  function getPlatformVariables(paymentPlatform: PaymentPlatformType | undefined) {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return {\n          qrLink: `https://venmo.com/code?user_id=${depositorVenmoId}`,\n          currencySymbol: '$',\n          paymentPlatformName: 'Venmo',\n        };\n\n      case PaymentPlatform.HDFC:\n        return {\n          qrLink: `upi://pay?pa=${depositorVenmoId.replace(/\\0/g, '')}&am=${amountUSDToSend}&cu=INR`,\n          currencySymbol: '₹',\n          paymentPlatformName: 'HDFC',\n        };\n\n      case PaymentPlatform.GARANTI:\n        return {\n          qrLink: ``,\n          currencySymbol: '₺',\n          paymentPlatformName: 'Garanti',\n        };\n\n      case PaymentPlatform.REVOLUT:\n        let currencySymbol = '';\n        switch (receiveCurrencyId) {\n          case ReceiveCurrencyId.EUR:\n            currencySymbol = '€';\n            break;\n          case ReceiveCurrencyId.GBP:\n            currencySymbol = '£';\n            break;\n          case ReceiveCurrencyId.SGD:\n            currencySymbol = 'SGD$';\n            break;\n          case ReceiveCurrencyId.USD:\n            currencySymbol = '$';\n            break;\n        }\n        return {\n          qrLink: `https://revolut.me/${depositorVenmoId}`,\n          currencySymbol,\n          paymentPlatformName: 'Revolut',\n        };\n\n      default:\n        return {\n          qrLink: `https://venmo.com/code?user_id=${depositorVenmoId}`,\n          currencySymbol: '$',\n          paymentPlatformName: 'Venmo',\n        };\n    }\n  }\n\n  const {\n    paymentPlatformName,\n    currencySymbol,\n    qrLink\n  } = getPlatformVariables(paymentPlatform);\n\n  /*\n   * Handlers\n   */\n\n  const handleSendClick = () => {\n    if (reviewedRequirementsForPlatform()) {\n      setShouldShowSwapModal(true);\n    } else {\n      setShouldShowRequirementsModal(true);\n    }\n  };\n\n  const handleModalBackClicked = () => {\n    setShouldShowRequirementsModal(false);\n\n    setShouldShowSwapModal(false);\n  };\n\n  const handleRequirementsModalCtaClick = () => {\n    markPlatformRequirementsAsReviewed();\n\n    setShouldShowRequirementsModal(false);\n\n    setShouldShowSwapModal(true);\n  };\n  \n  /*\n   * Effects\n   */\n\n  useEffect(() => {\n    if (shouldAutoSelectIntent) {\n      handleSendClick();\n\n      resetShouldAutoSelectIntent();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldAutoSelectIntent]);\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      {\n        shouldShowRequirementsModal && (\n          <ReviewRequirements\n            onBackClick={handleModalBackClicked}\n            paymentPlatform={paymentPlatform || PaymentPlatform.VENMO}\n            onCtaClick={handleRequirementsModalCtaClick}\n          />\n        )\n      }\n\n      {shouldShowSwapModal && (\n        isMobile ? (\n          <SwapModalMobile\n            isVenmo={paymentPlatform === PaymentPlatform.VENMO}\n            venmoId={depositorVenmoId}\n            depositorName={depositorName}\n            link={qrLink}\n            amount={amountUSDToSend}\n            onBackClick={handleModalBackClicked}\n            onCompleteClick={handleCompleteOrderClick}\n            paymentPlatform={paymentPlatform || PaymentPlatform.VENMO}\n          />\n        ) : (\n          <SwapModal\n            isVenmo={paymentPlatform === PaymentPlatform.VENMO}\n            venmoId={depositorVenmoId}\n            depositorName={depositorName}\n            link={qrLink}\n            amount={amountUSDToSend}\n            onBackClick={handleModalBackClicked}\n            onCompleteClick={handleCompleteOrderClick}\n            paymentPlatform={paymentPlatform || PaymentPlatform.VENMO}\n            receiveCurrencyId={receiveCurrencyId}\n          />\n        )\n      )}\n\n      <IntentDetailsContainer isMobile={isMobile}>\n        {\n          !isMobile && <SVGIconThemed icon={'usdc'} width={'24'} height={'24'}/>\n        }\n        <DetailsContainer>\n          <LabelContainer>\n            <Label>Depositor:&nbsp;</Label>\n            <Value>\n              <Link href={depositorEtherscanLink} target=\"_blank\">\n                <ENSName\n                  provider={alchemyMainnetEthersProvider}\n                  address={depositorAddress}\n                  displayType={AddressDisplayEnum.FIRST6}\n                />\n              </Link>\n            </Value>\n          </LabelContainer>\n\n          <LabelContainer>\n            <Label>Requested:&nbsp;</Label>\n            <Value>{requestedAmountLabel}</Value>\n          </LabelContainer>\n\n          <LabelContainer>\n            <Label>Send:&nbsp;</Label>\n            <Value>{currencySymbol}{amountUSDToSend} on {paymentPlatformName}</Value>\n          </LabelContainer>\n\n          <LabelContainer>\n            <Label>Expires:&nbsp;</Label>\n            <Value>{orderExpirationLabel}</Value>\n          </LabelContainer>\n\n          <LabelContainer>\n            <Label>Recipient:&nbsp;</Label>\n            <Value>\n              <Link href={depositorEtherscanLink} target=\"_blank\">\n                <ENSName\n                  provider={alchemyMainnetEthersProvider}\n                  address={recipientAddress}\n                  displayType={AddressDisplayEnum.FIRST6}\n                />\n              </Link>\n            </Value>\n          </LabelContainer>\n        </DetailsContainer>\n      </IntentDetailsContainer>\n\n      <ActionsContainer>\n        <AccessoryButton\n          onClick={handleSendClick}\n          height={36}\n          title={'Complete'}\n          icon={isMobile ? undefined : 'send'}\n        />\n      </ActionsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n`;\n\nconst IntentDetailsContainer = styled.div<{isMobile?: boolean}>`\n  width: 100%;\n  display: flex;\n  flex-direction: ${({ isMobile }) => isMobile ? 'column' : 'row'};\n  align-items: center;\n  padding: 1.25rem 1.5rem;\n  gap: 1.25rem;\n  line-height: 24px;\n`;\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  justify-content: center;\n  padding: 1.5rem 1.5rem 1.65rem 0rem;\n  gap: 1rem;\n`;\n\nconst DetailsContainer = styled.div`\n  width: 100%;\n  display: flex;\n  gap: 2px;\n  flex-direction: column;\n  line-height: 24px;\n`;\n\nconst LabelContainer = styled.div`\n  display: flex;\n`;\n\nconst Label = styled.span`\n  color: #6C757D;\n  font-size: 15px;\n`;\n\nconst Value = styled.span`\n  color: #FFFFFF;\n  font-size: 15px;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/OnRamperIntentTable.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { IntentRow, IntentRowData } from \"@components/Swap/OnRamperIntentRow\";\nimport { AccessoryButton } from '@components/common/AccessoryButton';\nimport { toUsdcString, toUsdString } from '@helpers/units';\nimport { SECONDS_IN_DAY  } from '@helpers/constants';\nimport { OnRamperIntent, StoredDeposit } from '@helpers/types';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n// Venmo\nimport useVenmoOnRamperIntents from '@hooks/venmo/useOnRamperIntents';\nimport useVenmoLiquidity from '@hooks/venmo/useLiquidity';\n\n// Hdfc\nimport useHdfcOnRamperIntents from '@hooks/hdfc/useOnRamperIntents';\nimport useHdfcLiquidity from '@hooks/hdfc/useLiquidity';\n\n// Garanti\nimport useGarantiOnRamperIntents from '@hooks/garanti/useOnRamperIntents';\nimport useGarantiLiquidity from '@hooks/garanti/useLiquidity';\n\n// Revolut\nimport useRevolutOnRamperIntents from '@hooks/revolut/useOnRamperIntents';\nimport useRevolutLiquidity from '@hooks/revolut/useLiquidity';\n\n\ninterface OnRamperIntentTableProps {\n  onIntentRowClick?: () => void;\n  shouldAutoSelectIntent: boolean;\n  resetShouldAutoSelectIntent: () => void;\n}\n\nexport const OnRamperIntentTable: React.FC<OnRamperIntentTableProps> = ({\n  onIntentRowClick,\n  shouldAutoSelectIntent,\n  resetShouldAutoSelectIntent,\n}) => {\n  /*\n   * Contexts\n   */\n\n  const isMobile = useMediaQuery() === 'mobile';\n\n const {\n    currentIntentHash: currentVenmoIntentHash,\n    currentIntent: currentVenmoIntent,\n    refetchIntentHash: refetchVenmoIntentHash\n  } = useVenmoOnRamperIntents();\n  const {\n    calculateUsdFromRequestedUSDC,\n    depositStore: venmoDepositStore\n  } = useVenmoLiquidity();\n\n const {\n    currentIntentHash: currentHdfcIntentHash,\n    currentIntent: currentHdfcIntent,\n    refetchIntentHash: refetchHdfcIntentHash\n  } = useHdfcOnRamperIntents();\n const {\n    depositStore: hdfcDepositStore\n  } = useHdfcLiquidity();\n\n  const {\n    currentIntentHash: currentGarantiIntentHash,\n    currentIntent: currentGarantiIntent,\n    refetchIntentHash: refetchGarantiIntentHash\n  } = useGarantiOnRamperIntents();\n  const {\n    depositStore: garantiDepositStore\n  } = useGarantiLiquidity();\n\n  const {\n    currentIntentHash: currentRevolutIntentHash,\n    currentIntent: currentRevolutIntent,\n    refetchIntentHash: refetchRevolutIntentHash,\n    refetchIntentHashAsUint: refetchRevolutIntentHashAsUint\n  } = useRevolutOnRamperIntents();\n  const {\n    depositStore: revolutDepositStore\n  } = useRevolutLiquidity();\n\n const { PaymentPlatform, paymentPlatform } = usePlatformSettings();\n \n const {\n  venmoRampAddress,\n  venmoRampAbi,\n  hdfcRampAddress,\n  hdfcRampAbi,\n  garantiRampAddress,\n  garantiRampAbi,\n  revolutRampAddress,\n  revolutRampAbi,\n  } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [currentIntentHash, setCurrentIntentHash] = useState<string | null>(null);\n  const [currentIntent, setCurrentIntent] = useState<OnRamperIntent | null>(null);\n  const [depositStore, setDepositStore] = useState<StoredDeposit[] | null>(null);\n  const [refetchIntentHash, setRefetchIntentHash] = useState<(() => void) | null>(null);\n  const [refetchIntentHashAsUint, setRefetchIntentHashAsUint] = useState<(() => void) | null>(null);\n\n  const [intentsRowData, setIntentsRowData] = useState<IntentRowData[]>([]);\n\n  const [rampAddress, setRampAddress] = useState<string | null>(null);\n  const [rampAbi, setRampAbi] = useState<string | null>(null);\n  const [shouldConfigureCancelIntentWrite, setShouldConfigureCancelIntentWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // cancelIntent(bytes32 _intentHash)\n  //\n  const { config: writeCancelIntentConfig } = usePrepareContractWrite({\n    address: rampAddress,\n    abi: rampAbi,\n    functionName: 'cancelIntent',\n    args: [\n      currentIntentHash,\n    ],\n    enabled: shouldConfigureCancelIntentWrite\n  });\n\n  const {\n    data: submitCancelIntentResult,\n    isLoading: isSubmitCancelIntentLoading,\n    status: submitCancelStatus,\n    writeAsync: writeSubmitCancelIntentAsync\n  } = useContractWrite(writeCancelIntentConfig);\n\n  const {\n    isLoading: isSubmitCancelIntentMining,\n  } = useWaitForTransaction({\n    hash: submitCancelIntentResult ? submitCancelIntentResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitCancelIntentAsync successful: ', data);\n      \n      refetchIntentHash?.();\n      refetchIntentHashAsUint?.();\n    },\n  });\n\n  /*\n   * Handlers\n   */\n\n  const handleCancelClick = async () => {\n    setShouldConfigureCancelIntentWrite(true);\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRampAddress(venmoRampAddress);\n        setRampAbi(venmoRampAbi as any);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setRampAddress(hdfcRampAddress);\n        setRampAbi(hdfcRampAbi as any);\n        break;\n      \n      case PaymentPlatform.GARANTI:\n        setRampAddress(garantiRampAddress);\n        setRampAbi(garantiRampAbi as any);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRampAddress(revolutRampAddress);\n        setRampAbi(revolutRampAbi as any);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [paymentPlatform, venmoRampAddress, hdfcRampAddress, garantiRampAddress, revolutRampAddress]);\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setCurrentIntentHash(currentVenmoIntentHash);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setCurrentIntentHash(currentHdfcIntentHash);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setCurrentIntentHash(currentGarantiIntentHash);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setCurrentIntentHash(currentRevolutIntentHash);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    paymentPlatform,\n    currentVenmoIntentHash,\n    currentHdfcIntentHash,\n    currentGarantiIntentHash,\n    currentRevolutIntentHash\n  ]);\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setDepositStore(venmoDepositStore);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setDepositStore(hdfcDepositStore);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setDepositStore(garantiDepositStore);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setDepositStore(revolutDepositStore);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    paymentPlatform,\n    venmoDepositStore,\n    hdfcDepositStore,\n    garantiDepositStore,\n    revolutDepositStore\n  ]);\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setCurrentIntent(currentVenmoIntent);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setCurrentIntent(currentHdfcIntent);\n        break;\n      \n      case PaymentPlatform.GARANTI:\n        setCurrentIntent(currentGarantiIntent);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setCurrentIntent(currentRevolutIntent);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    paymentPlatform,\n    currentVenmoIntent,\n    currentHdfcIntent,\n    currentGarantiIntent,\n    currentRevolutIntent\n  ]);\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRefetchIntentHash(() => refetchVenmoIntentHash);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setRefetchIntentHash(() => refetchHdfcIntentHash);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setRefetchIntentHash(() => refetchGarantiIntentHash);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRefetchIntentHash(() => refetchRevolutIntentHash);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    paymentPlatform,\n    refetchVenmoIntentHash,\n    refetchHdfcIntentHash,\n    refetchGarantiIntentHash,\n    refetchRevolutIntentHash\n  ]);\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n      case PaymentPlatform.HDFC:\n      case PaymentPlatform.GARANTI:\n        setRefetchIntentHashAsUint(() => {});\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRefetchIntentHashAsUint(() => refetchRevolutIntentHashAsUint);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [paymentPlatform, refetchRevolutIntentHashAsUint]);\n \n  useEffect(() => {\n    if (currentIntent && depositStore) {\n      const storedDeposit = depositStore.find((storedDeposit) => {\n        return storedDeposit.depositId === currentIntent.intent.deposit;\n      });\n\n      if (storedDeposit !== undefined) {\n        const amountUSDC = currentIntent.intent.amount\n        const conversionRate = storedDeposit.deposit.conversionRate;\n\n        const usdToSend = calculateUsdFromRequestedUSDC(amountUSDC, conversionRate);\n        const amountUSDToSend = toUsdString(usdToSend);\n\n        const amountUSDCToReceive = toUsdcString(currentIntent.intent.amount, true);\n        const expirationTimestamp = formatExpiration(currentIntent.intent.timestamp);\n        const venmoIdString = currentIntent.depositorVenmoId.toString();\n        const depositorAddress = storedDeposit.deposit.depositor;\n        const recipientAddress = currentIntent.intent.to;\n        const receiveCurrencyId = storedDeposit.deposit.receiveCurrencyId;\n\n        const sanitizedIntent: IntentRowData = {\n          paymentPlatform,\n          amountUSDCToReceive,\n          amountUSDToSend,\n          expirationTimestamp,\n          depositorName: storedDeposit.deposit.offRamperName,\n          depositorVenmoId: venmoIdString,\n          depositorAddress,\n          recipientAddress,\n          receiveCurrencyId,\n          handleCompleteOrderClick: () => {\n            if (onIntentRowClick) {\n              onIntentRowClick();\n            }\n          },\n          shouldAutoSelectIntent,\n          resetShouldAutoSelectIntent,\n        };\n\n        setIntentsRowData([sanitizedIntent]);\n      } else {\n        setIntentsRowData([]);  \n      }\n    } else {\n      setIntentsRowData([]);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [currentIntent, depositStore]);\n\n  useEffect(() => {\n    const executeCancelIntent = async () => {\n      const statusForExecution = submitCancelStatus === 'idle' || submitCancelStatus === 'error';\n\n      if (shouldConfigureCancelIntentWrite && writeSubmitCancelIntentAsync && statusForExecution) {\n        try {\n          await writeSubmitCancelIntentAsync();\n        } catch (error) {\n          console.error('writeSubmitCancelIntentAsync failed: ', error);\n\n          setShouldConfigureCancelIntentWrite(false);\n        }\n      }\n    };\n  \n    executeCancelIntent();\n  }, [\n    shouldConfigureCancelIntentWrite,\n    writeSubmitCancelIntentAsync,\n    submitCancelStatus,\n  ]);\n\n  /*\n   * Helpers\n   */\n\n  function calculateExpiration(unixTimestamp: bigint, timePeriod: bigint): bigint {\n    return unixTimestamp + timePeriod;\n  }\n  \n  function formatExpiration(unixTimestamp: bigint): string {\n    const unixTimestampPlusOneDay = calculateExpiration(unixTimestamp, SECONDS_IN_DAY);\n    \n    const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));\n    if (currentTimestamp > unixTimestampPlusOneDay) {\n      return \"Expired\";\n    } else {\n      const date = new Date(Number(unixTimestampPlusOneDay) * 1000);\n      const formattedTime = date.toLocaleTimeString();\n      const formattedDate = date.toLocaleDateString(undefined, { year: 'numeric', month: 'numeric', day: 'numeric' }).split('/').slice(0, 2).join('/');\n\n      return `${formattedTime} on ${formattedDate}`;\n    }\n  }\n\n  return (\n    <Container>\n      <TitleAndTableContainer>\n        <IntentCountTitle>\n          <TitleAndTooltip>\n            <ThemedText.LabelSmall textAlign=\"left\">\n              Current Order\n            </ThemedText.LabelSmall>\n          </TitleAndTooltip>\n\n          <AccessoryButton\n            onClick={handleCancelClick}\n            height={36}\n            loading={isSubmitCancelIntentLoading || isSubmitCancelIntentMining}\n            title={'Cancel'}\n            icon={isMobile ? undefined : 'trash'}\n          />\n        </IntentCountTitle>\n        \n        <Table>\n          {intentsRowData.map((intentsRow, rowIndex) => (\n            <IntentRow\n              paymentPlatform={intentsRow.paymentPlatform}\n              key={rowIndex}\n              amountUSDCToReceive={intentsRow.amountUSDCToReceive}\n              amountUSDToSend={intentsRow.amountUSDToSend}\n              expirationTimestamp={intentsRow.expirationTimestamp}\n              depositorVenmoId={intentsRow.depositorVenmoId}\n              depositorAddress={intentsRow.depositorAddress}\n              depositorName={intentsRow.depositorName}\n              recipientAddress={intentsRow.recipientAddress}\n              receiveCurrencyId={intentsRow.receiveCurrencyId}\n              handleCompleteOrderClick={intentsRow.handleCompleteOrderClick}\n              shouldAutoSelectIntent={intentsRow.shouldAutoSelectIntent}\n              resetShouldAutoSelectIntent={intentsRow.resetShouldAutoSelectIntent}\n            />\n          ))}\n        </Table>\n      </TitleAndTableContainer>\n    </Container>\n  )\n}\n\nconst Container = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  align-self: flex-start;\n  justify-content: center;\n  gap: 1rem;\n  \n  background-color: ${colors.container};\n  overflow: hidden;\n\n  @media (min-width: 600px) {\n    border: 1px solid ${colors.defaultBorderColor};\n    border-radius: 16px;\n  }\n`;\n\nconst TitleAndTableContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`\n\nconst IntentCountTitle = styled.div`\n  display: flex;\n  justify-content: space-between;\n  padding: 1rem 1.5rem 0.75rem 1.5rem;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n  align-items: center;\n`;\n\nconst TitleAndTooltip = styled.div`\n  display: flex;\n  gap: 0.25rem;\n  align-items: center;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  border-radius: 8px;\n  border-top-left-radius: 16px;\n  border-top-right-radius: 16px;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  font-size: 16px;\n  color: #616161;\n\n  & > * {\n    border-bottom: 1px solid ${colors.defaultBorderColor};\n  }\n\n  & > *:last-child {\n    border-bottom: none;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/Swap/PaymentRequirementDrawer.tsx",
    "content": "import React, { useReducer, useRef } from \"react\";\nimport styled from 'styled-components';\nimport { ChevronDown } from 'react-feather';\n\nimport { InstructionStep } from \"@components/Swap/InstructionStep\";\nimport { platformStrings } from \"@helpers/strings\";\nimport { PaymentPlatformType } from '@helpers/types';\nimport { colors } from '@theme/colors';\n\n\ninterface PaymentRequirementDrawerProps {\n  paymentPlatform: PaymentPlatformType\n}\n\nexport const PaymentRequirementDrawer: React.FC<PaymentRequirementDrawerProps> = ({\n  paymentPlatform\n}) => {\n  const ref = useRef<HTMLDivElement>(null);\n\n  /*\n   * State\n   */\n\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  /*\n   * Component\n   */\n\n  const optionalPlatformRequirement = () => {\n    const requirementCopy = platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_FOUR');\n    return requirementCopy ? (\n      <InstructionStep step={4}>\n        {requirementCopy}\n      </InstructionStep>\n    ) : null;\n  };\n\n  return (\n    <Wrapper ref={ref}>\n      <TitleLabelAndDropdownIconContainer>\n        <TokenLabel>\n          Review Requirements\n        </TokenLabel>\n        \n        <StyledChevronDown\n          onClick={toggleOpen}\n          $isOpen={isOpen}\n        />\n      </TitleLabelAndDropdownIconContainer>\n\n      <InstructionsDropdown $isOpen={isOpen}>\n        <HorizontalDivider/>\n        <RequirementListContainer>\n          <InstructionStep step={1}>\n            { platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_ONE') }\n          </InstructionStep>\n\n          <InstructionStep step={2}>\n            <span style={paymentPlatform === \"garanti\" ? { textDecoration: 'underline', fontWeight: 'bold' } : undefined}>\n              { platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_TWO') }\n            </span>\n          </InstructionStep>\n\n          <InstructionStep step={3}>\n            <span style={paymentPlatform === \"garanti\" ? { textDecoration: 'underline', fontWeight: 'bold' } : undefined}>\n              { platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_THREE') }\n            </span>\n          </InstructionStep>\n\n          {optionalPlatformRequirement()}\n        </RequirementListContainer>\n\n        <DisclaimerLabel>\n          Not meeting requirements will lead to lost funds\n        </DisclaimerLabel>\n      </InstructionsDropdown>\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 0px 20px;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  background-color: ${colors.container};\n`;\n\nconst TitleLabelAndDropdownIconContainer = styled.div`\n  width: 100%;\n  height: 24px;\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  padding: 14px 0px 12px;\n`;\n\nconst TokenLabel = styled.div`\n  display: flex;\n  align-items: center;\n  font-size: 14px;\n`;\n\ninterface StyledChevronDownProps {\n  $isOpen?: boolean;\n}\n\nconst StyledChevronDown = styled(ChevronDown)<StyledChevronDownProps>`\n  width: 20px;\n  height: 20px;\n  color: #CED4DA;\n\n  transition: transform 0.4s;\n  transform: ${({ $isOpen }) => $isOpen ? 'rotate(180deg)' : 'rotate(0deg)'};\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\ninterface InstructionsDropdownProps {\n  $isOpen?: boolean;\n}\n\nconst InstructionsDropdown = styled.div<InstructionsDropdownProps>`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  gap: 16px;\n  overflow: hidden;\n\n  max-height: ${({ $isOpen }) => $isOpen ? '500px' : '0px'};\n  transition: max-height 0.4s ease-out;\n`;\n\nconst RequirementListContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n`;\n\nconst DisclaimerLabel = styled.button`\n  font-size: 14px;\n  font-family: 'Graphik';\n  color: #df2e2d;\n  font-weight: 600;\n  line-height: 1.3;\n  text-align: center;\n  padding-bottom: 20px;\n  background: none;\n  border: none;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/SettingsDropdown.tsx",
    "content": "import { useRef, useReducer } from 'react';\nimport { Settings } from 'react-feather';\nimport styled from \"styled-components\";\n\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport { Input } from \"@components/common/Input\";\nimport { colors } from '@theme/colors';\n\n\ninterface SettingsDropdownProps {\n  recipientAddress?: string;\n  setRecipientAddress: (address: string) => void;\n  isLoggedIn: boolean;\n}\n\nexport const SettingsDropdown: React.FC<SettingsDropdownProps>= ({\n  recipientAddress,\n  setRecipientAddress,\n  isLoggedIn,\n}) => {\n  /*\n   * State\n   */\n\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false);\n\n  const ref = useRef<HTMLDivElement>(null);\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined);\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <SettingsButton onClick={toggleOpen}>\n        <StyledSettings />\n      </SettingsButton>\n\n      {isOpen && (\n        <Dropdown>\n          <DropdownItems>\n            <RecipientAddressContainer>\n              Custom recipient address\n            </RecipientAddressContainer>\n\n            <RecipientInputContainer>\n              <Input\n                label=\"Recipient\"\n                name=\"recipientAddress\"\n                value={recipientAddress}\n                onChange={(e) => setRecipientAddress(e.target.value)}\n                placeholder={!isLoggedIn ? 'Wallet disconnected' : 'Recipient address'}\n                readOnly={!isLoggedIn}\n              />\n            </RecipientInputContainer>\n          </DropdownItems>\n        </Dropdown>\n      )}\n    </Wrapper>\n  )\n};\n\nconst Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  align-items: flex-start;\n`;\n\nconst StyledSettings = styled(Settings)`\n  color: #FFF;\n  width: 20px;\n  height: 20px;\n`;\n\nconst SettingsButton = styled.div`\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst Dropdown = styled.div`\n  display: flex;\n  width: 70vw;\n  max-width: 392px;\n  flex-direction: column;\n  border-radius: 12px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  position: absolute;\n  top: calc(100% + 20px);\n  right: -10px;\n  z-index: 20;\n  color: #CED4DA;\n`;\n\nconst DropdownItems = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst RecipientAddressContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  font-size: 14px;\n  padding-bottom: 1rem;\n`;\n\nconst RecipientInputContainer = styled.div`\n`;\n"
  },
  {
    "path": "client/src/components/Swap/SwapInstructionTitle.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components';\n\nimport { colors } from '@theme/colors';\nimport { ThemedText } from '@theme/text';\n\n\ninterface InstructionTitleProps {\n  number: number,\n  title: string,\n  description: string,\n}\n\nexport const InstructionTitle: React.FC<InstructionTitleProps> = ({\n  number,\n  title,\n  description,\n}: InstructionTitleProps) => {\n  InstructionTitle.displayName = 'InstructionTitle';\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <NumberContainer>\n        { number }\n      </NumberContainer>\n\n      <TitleAndDescriptionContainer>\n        <ThemedText.LabelSmall style={{ flex: '1', textAlign: 'left' }}>\n          { title }\n        </ThemedText.LabelSmall>\n\n        <ThemedText.SubHeaderSmall style={{ flex: '1', textAlign: 'left' }}>\n          { description }\n        </ThemedText.SubHeaderSmall>\n      </TitleAndDescriptionContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-items: center;\n  padding: 0rem 0.75rem;\n  gap: 1.25rem;\n`;\n\nconst NumberContainer = styled.div`\n  font-size: 16px;\n  font-weight: 600;\n`;\n\nconst TitleAndDescriptionContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  padding: 0rem 0.25rem;\n  gap: 0.25rem;\n  line-height: 1.3;\n\n  color: ${colors.white};\n  font-size: 14px;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/SwapModal.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components';\nimport { ArrowLeft } from 'react-feather';\nimport QRCode from 'react-qr-code';\nimport Link from '@mui/material/Link';\n\nimport { Button } from '@components/common/Button';\nimport { Overlay } from '@components/modals/Overlay';\nimport { PaymentRequirementDrawer } from '@components/Swap/PaymentRequirementDrawer';\nimport { PaymentPlatformType, ReceiveCurrencyId } from '@helpers/types';\nimport { commonStrings } from '@helpers/strings';\nimport { ZKP2P_TG_INDIA_CHAT_LINK, ZKP2P_TG_TURKEY_CHAT_LINK, REVOLUT_DOWNLOAD_LINK } from '@helpers/docUrls';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Z_INDEX } from '@theme/zIndex';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\n\n\ninterface SwapModalProps {\n  isVenmo: boolean;\n  venmoId: string;\n  link: string;\n  depositorName?: string;\n  amount: string;\n  onBackClick: () => void\n  onCompleteClick: () => void\n  paymentPlatform: PaymentPlatformType;\n  receiveCurrencyId?: string;\n}\n\nexport const SwapModal: React.FC<SwapModalProps> = ({\n  isVenmo,\n  venmoId,\n  depositorName,\n  link,\n  amount,\n  onBackClick,\n  onCompleteClick,\n  paymentPlatform,\n  receiveCurrencyId\n}) => {\n\n  /*\n   * Context\n   */\n\n  const {\n    PaymentPlatform,\n  } = usePlatformSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  };\n\n  const handleCompleteClick = () => {\n    onCompleteClick();\n  };\n\n  /*\n   * Helpers\n   */\n\n  function getPlatformVariables(paymentPlatform: PaymentPlatformType | undefined) {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return {\n          troubleScanningQRCodeLink: link,\n          currencySymbol: '$',\n          paymentPlatformName: 'Venmo',\n          instructionsText: `Scan and send $${amount}`,\n        };\n\n      case PaymentPlatform.HDFC:\n        return {\n          troubleScanningQRCodeLink: ZKP2P_TG_INDIA_CHAT_LINK,\n          currencySymbol: '₹',\n          paymentPlatformName: 'HDFC',\n          instructionsText: `Scan and send ₹${amount} <br />to ${venmoId}`,\n        };\n\n      case PaymentPlatform.GARANTI:\n        return {\n          troubleScanningQRCodeLink: ZKP2P_TG_TURKEY_CHAT_LINK,\n          currencySymbol: 'TRY',\n          paymentPlatformName: 'Garanti',\n          instructionsText: `Using your Garanti app, send ₺${amount} <br />to the above IBAN account number and name`,\n        };\n\n      case PaymentPlatform.REVOLUT:\n        let currencySymbol = '';\n        switch (receiveCurrencyId) {\n          case ReceiveCurrencyId.EUR:\n            currencySymbol = '€';\n            break;\n\n          case ReceiveCurrencyId.GBP:\n            currencySymbol = '£';\n            break;\n\n          case ReceiveCurrencyId.SGD:\n            currencySymbol = 'SGD$';\n            break;\n\n          case ReceiveCurrencyId.USD:\n            currencySymbol = '$';\n            break;\n        }\n\n        return {\n          troubleScanningQRCodeLink: REVOLUT_DOWNLOAD_LINK,\n          currencySymbol: '€',\n          paymentPlatformName: 'Revolut',\n          instructionsText: `Scan and send ${currencySymbol}${amount} <br />to ${venmoId}`,\n        };\n\n      default:\n        return {\n          troubleScanningQRCodeLink: link,\n          currencySymbol: '$',\n          paymentPlatformName: 'Venmo',\n          instructionsText: `Scan and send $${amount} <br />to ${venmoId}`\n        };\n    }\n  };\n\n  const {\n    paymentPlatformName,\n    troubleScanningQRCodeLink,\n    instructionsText\n  } = getPlatformVariables(paymentPlatform);\n\n  /*\n   * Component\n   */\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay onClick={handleOverlayClick}/>\n\n      <ModalContainer $isVenmo={isVenmo}>\n        <RowBetween>\n          <div style={{ flex: 0.25 }}>\n            <button\n              onClick={handleOverlayClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            Send {paymentPlatformName} Payment\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.25 }}/>\n        </RowBetween>\n\n        {paymentPlatform !== PaymentPlatform.GARANTI ? (\n          <div>\n            <>\n              <QRContainer>\n                <QRCode\n                  value={link}\n                  size={192}/>\n              </QRContainer>\n              <QRLabel>\n                <Link href={troubleScanningQRCodeLink} target='_blank'>  \n                  {paymentPlatform === PaymentPlatform.REVOLUT ? `Send via Revolut.com ↗` : 'Trouble scanning QR?'}\n                </Link>\n              </QRLabel>\n            </>\n          </div>\n        ) : (\n          <GarantiInformationContainer>\n            <IBANTitle\n              dangerouslySetInnerHTML={{ __html: `${venmoId}`}}\n            />\n            <IBANTitle\n              dangerouslySetInnerHTML={{ __html: `${depositorName ? depositorName : ''}`}}\n            />\n          </GarantiInformationContainer>\n        )}\n\n        <InstructionsContainer>\n          <InstructionsTitle\n            dangerouslySetInnerHTML={{ __html: instructionsText }}\n          />\n\n          <InstructionsLabel>\n            { commonStrings.get('PAY_MODAL_INSTRUCTIONS') }\n            <Link href='https://docs.zkp2p.xyz/onramp-guides/on-ramping' target='_blank'>\n              Learn more ↗\n            </Link>\n          </InstructionsLabel>\n        </InstructionsContainer>\n\n        <PaymentRequirementDrawer\n          paymentPlatform={paymentPlatform}\n        />\n\n        <ButtonContainer>\n          <Button\n            onClick={async () => {\n              handleCompleteClick();\n            }}\n            bgColor={'#df2e2d'}\n          >\n            I have completed payment\n          </Button>\n        </ButtonContainer>\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst ModalContainer = styled.div<{$isVenmo?: boolean}>`\n  width: 80vw;\n  max-width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 2rem 1rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  gap: 1.5rem;\n  height: ${({ $isVenmo }) => $isVenmo ? '588px' : '612px'};\n  overflow-y: auto;\n\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst QRContainer = styled.div`\n  padding: 1.25rem 1.25rem 1rem 1.25rem;\n  border: 1px solid ${colors.defaultBorderColor};\n  border-radius: 16px;\n  background: #131A2A;\n`;\n\nconst InstructionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  align-items: center;\n  padding: 0 1.75rem;\n`;\n\nconst IBANTitle = styled.div`\n  line-height: 1.5;\n  font-size: 20px;\n  font-weight: 700;\n  text-align: center;\n`;\n\nconst InstructionsTitle = styled.div`\n  line-height: 1.3;\n  font-size: 18px;\n  font-weight: 700;\n  text-align: center;\n`;\n\nconst InstructionsLabel = styled.div`\n  font-size: 14px;\n  text-align: center;\n  line-height: 1.5;\n`;\n\nconst RowBetween = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 1.5rem;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n`;\n\nconst QRLabel = styled.div`\n  font-size: 14px;\n  text-align: center;\n  padding-top: 10px;\n  line-height: 1.5;\n`;\n\nconst GarantiInformationContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  gap: 1.5rem;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/SwapModalMobile.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components';\nimport { ArrowLeft } from 'react-feather';\n\nimport { Button } from '@components/common/Button';\nimport { Overlay } from '@components/modals/Overlay';\nimport { PaymentRequirementDrawer } from '@components/Swap/PaymentRequirementDrawer';\nimport { InstructionTitle } from '@components/Swap/SwapInstructionTitle';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport { PaymentPlatformType } from '@helpers/types';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Z_INDEX } from '@theme/zIndex';\n\n\ninterface SwapModalMobileProps {\n  isVenmo: boolean;\n  venmoId: string;\n  link: string;\n  depositorName?: string;\n  amount: string;\n  onBackClick: () => void\n  onCompleteClick: () => void\n  paymentPlatform: PaymentPlatformType;\n}\n\nexport const SwapModalMobile: React.FC<SwapModalMobileProps> = ({\n  isVenmo,\n  venmoId,\n  depositorName,\n  link,\n  amount,\n  onBackClick,\n  onCompleteClick,\n  paymentPlatform,\n}) => {\n\n  /*\n   * Context\n   */\n\n  const {\n    PaymentPlatform,\n  } = usePlatformSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  };\n\n  const handleCompleteClick = () => {\n    onCompleteClick();\n  };\n\n  /*\n   * Helpers\n   */\n\n  function getPlatformVariables(paymentPlatform: PaymentPlatformType | undefined, amount: string, venmoId: string) {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return {\n          paymentPlatformName: 'Venmo',\n          instructionsText: `Send $${amount} to the matched peer in the Venmo app`,\n        };\n\n      case PaymentPlatform.HDFC:\n        return {\n          paymentPlatformName: 'HDFC',\n          instructionsText: `Send ₹${amount} to ${venmoId}`,\n        };\n\n      case PaymentPlatform.GARANTI:\n        return {\n          paymentPlatformName: 'Garanti',\n          instructionsText: `Using your Garanti app, send ₺${amount} to the IBAN account number and name below`,\n        };\n\n      default:\n        return {\n          paymentPlatformName: 'Venmo',\n          instructionsText: `Send $${amount} to ${venmoId}`,\n        };\n    }\n  };\n\n  const {\n    paymentPlatformName,\n    instructionsText\n  } = getPlatformVariables(paymentPlatform, amount, venmoId);\n\n  /*\n   * Component\n   */\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay onClick={handleOverlayClick}/>\n\n      <ModalContainer $isVenmo={isVenmo}>\n        <RowBetween>\n          <div style={{ flex: 0.25 }}>\n            <button\n              onClick={handleOverlayClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            Complete Order\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.25 }}/>\n        </RowBetween>\n\n        <StepContainer>\n          <InstructionTitle\n            number={1}\n            title={`Make Payment`}\n            description={instructionsText}\n          />\n\n          {paymentPlatform !== PaymentPlatform.GARANTI ? (\n            <ButtonContainer>\n              <Button\n                height={44}\n                fontSize={15}\n                onClick={() => {\n                  window.open(link, '_blank', 'noopener,noreferrer');\n                }}\n              >\n                {`Open ${paymentPlatformName}`}\n              </Button> \n            </ButtonContainer>\n          ) : (\n            <GarantiInformationContainer>\n              <IBANTitle\n                dangerouslySetInnerHTML={{ __html: `${venmoId}`}}\n              />\n\n              <IBANTitle\n                dangerouslySetInnerHTML={{ __html: `${depositorName ? depositorName : ''}`}}\n              />\n            </GarantiInformationContainer>\n          )}\n        </StepContainer>\n\n        <StepContainer>\n          <InstructionTitle\n            number={2}\n            title={'Process Payment Receipt'}\n            description={'Verify payment with email to complete order and receive USDC'}\n          />\n          <ButtonContainer>\n            <Button\n              height={44}\n              fontSize={15}\n              onClick={async () => {\n                handleCompleteClick();\n              }}\n              bgColor={ '#df2e2d' }\n            >\n              Process payment\n            </Button>\n          </ButtonContainer>\n        </StepContainer>\n\n        <InstructionsContainer>\n          <PaymentRequirementDrawer\n            paymentPlatform={paymentPlatform}\n          />\n        </InstructionsContainer>\n\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst ModalContainer = styled.div<{$isVenmo?: boolean}>`\n  width: 80vw;\n  max-width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 2rem 1rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  gap: 2rem;\n  overflow-y: auto;\n\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst InstructionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  align-items: center;\n`;\n\nconst IBANTitle = styled.div`\n  line-height: 1.3;\n  font-size: 20px;\n  font-weight: 700;\n  text-align: center;\n`;\n\nconst RowBetween = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 1.5rem;\n`;\n\nconst StepContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  gap: 0.75rem;\n`;\n\nconst ButtonContainer = styled.div`\n  display: grid;\n  padding: 0 3.75rem;\n`;\n\nconst GarantiInformationContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  padding-top: 0.5rem;\n  gap: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/TokenSelector.tsx",
    "content": "import React, { useReducer, useRef } from 'react';\nimport styled from 'styled-components';\nimport { X, ChevronDown } from 'react-feather';\nimport Link from '@mui/material/Link';\n\nimport { Overlay } from '@components/modals/Overlay';\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport { ZKP2P_SURVEY_FORM_LINK } from '@helpers/docUrls';\nimport { colors } from '@theme/colors';\nimport { ThemedText } from '@theme/text'\nimport { Z_INDEX } from '@theme/zIndex';\n\n\nexport const TokenSelector: React.FC = () => {\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  const ref = useRef<HTMLDivElement>(null)\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined)\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    toggleOpen();\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      <TokenNameAndChevronContainer onClick={toggleOpen}>\n        <SVGIconThemed icon={'usdc'} width={'24'} height={'24'}/>\n        \n        <TokenLabel>\n          USDC\n        </TokenLabel>\n\n        <StyledChevronDown/>\n      </TokenNameAndChevronContainer>\n\n      {isOpen && (\n        <ModalAndOverlayContainer>\n          <Overlay onClick={handleOverlayClick}/>\n\n          <ModalContainer>\n            <RowBetween>\n              <ThemedText.SubHeader style={{ textAlign: 'left' }}>\n                Select a token\n              </ThemedText.SubHeader>\n\n              <button\n                onClick={handleOverlayClick}\n                style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n                <StyledX/>\n              </button>\n            </RowBetween>\n\n            <InstructionsLabel>\n              We currently only support USDC, but will be adding support for other tokens. Please let us know which tokens\n              you are interested in seeing ZKP2P add support for. <Link href={ ZKP2P_SURVEY_FORM_LINK } target='_blank'>\n                Give feedback ↗\n              </Link>\n            </InstructionsLabel>\n          </ModalContainer>\n        </ModalAndOverlayContainer>\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst TokenNameAndChevronContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  border-radius: 24px;\n  background: ${colors.selectorColor};\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 4px 6px 4px 4px;\n  gap: 6px;\n  cursor: pointer;\n\n  &:hover {\n    background-color: ${colors.selectorHover};\n    border: 1px solid ${colors.selectorHoverBorder};\n  }\n`;\n\nconst TokenLabel = styled.div`\n  display: flex;\n  align-items: center;\n  font-size: 16px;\n  font-weight: 600;\n  color: #FFF;\n  padding-top: 2px;\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst StyledChevronDown = styled(ChevronDown)`\n  width: 20px;\n  height: 20px;\n  color: #FFF;\n`;\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 20px;\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  gap: 1.5rem;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst RowBetween = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 1.5rem;\n`;\n\nconst InstructionsLabel = styled.div`\n  font-size: 14px;\n  text-align: left;\n  line-height: 1.5;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/garanti/OnRamp.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\nimport Link from '@mui/material/Link';\nimport { ArrowLeft } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport { useContractRead, useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { ProofGenerationForm } from \"@components/ProofGen/ProofForm\";\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { SEND_KEY_FILE_NAME, RemoteProofGenEmailTypes  } from \"@helpers/constants\";\nimport { garantiStrings } from \"@helpers/strings\";\nimport { reformatMultiProofAndSignalsForChain } from \"@helpers/submitProof\";\nimport { PaymentPlatform } from '@helpers/types';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport useBalances from '@hooks/useBalance';\nimport useOnRamperIntents from '@hooks/garanti/useOnRamperIntents';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\nimport useQuery from '@hooks/useQuery';\n\n\ninterface OnRampProps {\n  handleBackClick: () => void;\n  selectedIntentHash: string;\n}\n\nexport const OnRamp: React.FC<OnRampProps> = ({\n  handleBackClick,\n  selectedIntentHash\n}) => {\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * Context\n   */\n\n  const {\n    garantiRampAddress,\n    garantiRampAbi,\n    garantiSendProcessorAddress,\n    garantiSendProcessorAbi\n  } = useSmartContracts();\n  const { refetchIntentHash } = useOnRamperIntents();\n  const { refetchUsdcBalance } = useBalances();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRampWrite, setShouldConfigureRampWrite] = useState<boolean>(false);\n  const [shouldFetchVerifyProof, setShouldFetchVerifyProof] = useState<boolean>(false);\n  const [submitOnRampTransactionHash, setSubmitOnRampTransactionHash] = useState<string | null>(null);\n\n  // ----- transaction state -----\n  const [proof, setProof] = useState<string>('');\n  const [bodyHashProof, setBodyHashProof] = useState<string>('');\n  // const [proof, setProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  const [bodyHashPublicSignals, setBodyHashPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * Contract Reads\n   */\n  const formattedProofAndSignals = reformatMultiProofAndSignalsForChain(\n    proof,\n    publicSignals,\n    bodyHashProof,\n    bodyHashPublicSignals\n  );\n\n  const {\n    data: verifyProofRaw,\n  } = useContractRead({\n    address: garantiSendProcessorAddress,\n    abi: garantiSendProcessorAbi,\n    functionName: \"verifyProof\",\n    args: [\n      formattedProofAndSignals[0].a,\n      formattedProofAndSignals[0].b,\n      formattedProofAndSignals[0].c,\n      formattedProofAndSignals[0].signals,\n    ],\n    enabled: shouldFetchVerifyProof,\n  });\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // onRamp(uint256[2] memory _a, uint256[2][2] memory _b, uint256[2] memory _c, uint256[10] memory _signals)\n  //\n  const { config: writeSubmitOnRampConfig } = usePrepareContractWrite({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'onRamp',\n    args: [\n      formattedProofAndSignals[0],\n      formattedProofAndSignals[1]\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRampWrite\n  });\n\n  const {\n    data: submitOnRampResult,\n    status: submitOnRampStatus,\n    writeAsync: writeSubmitOnRampAsync\n  } = useContractWrite(writeSubmitOnRampConfig);\n\n  const {\n    isLoading: isSubmitOnRampMining,\n    isSuccess: isSubmitOnRampSuccessful\n  } = useWaitForTransaction({\n    hash: submitOnRampResult ? submitOnRampResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitOnRampAsync successful: ', data);\n\n      refetchUsdcBalance?.();\n      \n      refetchIntentHash?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (proof && bodyHashProof && publicSignals && bodyHashPublicSignals) {\n      // console.log(\"proof\", proof);\n      // console.log(\"public signals\", publicSignals);\n      // console.log(\"vkey\", vkey);\n\n      // const proofVerified = await snarkjs.groth16.verify(vkey, JSON.parse(publicSignals), JSON.parse(proof));\n      // console.log(\"proofVerified\", proofVerified);\n      console.log(\"Garanti on-ramp\")\n      setShouldFetchVerifyProof(true);\n    } else {\n      setShouldFetchVerifyProof(false);\n    }\n  }, [proof, publicSignals, bodyHashProof, bodyHashPublicSignals]);\n\n  useEffect(() => {\n    if (verifyProofRaw) {\n      setShouldConfigureRampWrite(true);\n    } else {\n      setShouldConfigureRampWrite(false);\n    }\n  }, [verifyProofRaw]);\n\n  useEffect(() => {\n    if (submitOnRampResult?.hash) {\n      setSubmitOnRampTransactionHash(submitOnRampResult.hash);\n    }\n  }, [submitOnRampResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleWriteSubmitOnRampClick = async () => {\n    try {\n      await writeSubmitOnRampAsync?.();\n    } catch (error) {\n      console.log('writeSubmitDepositAsync failed: ', error);\n    }\n  };\n\n  const handleVerificationCompleteClick = () => {\n    navigateWithQuery('/send');\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ paddingBottom: '1.5rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center', fontSize: isMobile ? '16px': '' }}>\n            Complete On-Ramp\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {garantiStrings.get('PROOF_FORM_TITLE_SEND_INSTRUCTIONS')}\n            <Link href=\"https://docs.zkp2p.xyz/onramp-guides/on-ramping\" target=\"_blank\">\n              Learn more ↗\n            </Link>\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <ProofGenerationForm\n        paymentPlatformType={PaymentPlatform.GARANTI}\n        circuitType={CircuitType.EMAIL_VENMO_SEND}\n        circuitRemoteFilePath={SEND_KEY_FILE_NAME}\n        circuitInputs={selectedIntentHash}\n        remoteProofGenEmailType={RemoteProofGenEmailTypes.SEND}\n        proof={proof}\n        publicSignals={publicSignals}\n        setProof={setProof}\n        setPublicSignals={setPublicSignals}\n        bodyHashProof={bodyHashProof}\n        bodyHashPublicSignals={bodyHashPublicSignals}\n        setBodyHashProof={setBodyHashProof}\n        setBodyHashPublicSignals={setBodyHashPublicSignals}\n        onVerifyEmailCompletion={handleVerificationCompleteClick}\n        submitTransactionStatus={submitOnRampStatus}\n        isSubmitMining={isSubmitOnRampMining}\n        isSubmitSuccessful={isSubmitOnRampSuccessful}\n        handleSubmitVerificationClick={handleWriteSubmitOnRampClick}\n        transactionAddress={submitOnRampTransactionHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 2rem;\n  padding-bottom: 4rem;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  \n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid rgba(255, 255, 255, 0.2);\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/hdfc/OnRamp.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\nimport Link from '@mui/material/Link';\nimport { ArrowLeft } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport { useContractRead, useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { ProofGenerationForm } from \"@components/ProofGen/ProofForm\";\nimport { NumberedStep } from '@components/common/NumberedStep';\nimport { SEND_KEY_FILE_NAME, RemoteProofGenEmailTypes  } from '@helpers/constants';\nimport { hdfcStrings } from '@helpers/strings';\nimport { reformatProofForChain } from '@helpers/submitProof';\nimport { PaymentPlatform } from '@helpers/types';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport useBalances from '@hooks/useBalance';\nimport useOnRamperIntents from '@hooks/hdfc/useOnRamperIntents';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useMediaQuery from '@hooks/useMediaQuery';\nimport useQuery from '@hooks/useQuery';\n\n\ninterface OnRampProps {\n  handleBackClick: () => void;\n  selectedIntentHash: string;\n}\n\nexport const OnRamp: React.FC<OnRampProps> = ({\n  handleBackClick,\n  selectedIntentHash\n}) => {\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * Context\n   */\n\n  const {\n    hdfcRampAddress,\n    hdfcRampAbi,\n    hdfcSendProcessorAddress,\n    hdfcSendProcessorAbi\n  } = useSmartContracts();\n  const { refetchIntentHash } = useOnRamperIntents();\n  const { refetchUsdcBalance } = useBalances();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRampWrite, setShouldConfigureRampWrite] = useState<boolean>(false);\n  const [shouldFetchVerifyProof, setShouldFetchVerifyProof] = useState<boolean>(false);\n  const [submitOnRampTransactionHash, setSubmitOnRampTransactionHash] = useState<string | null>(null);\n\n  // ----- transaction state -----\n  const [proof, setProof] = useState<string>('');\n  const [bodyHashProof, setBodyHashProof] = useState<string>('');\n  // const [proof, setProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  const [bodyHashPublicSignals, setBodyHashPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * Contract Reads\n   */\n\n  const {\n    data: verifyProofRaw,\n  } = useContractRead({\n    address: hdfcSendProcessorAddress,\n    abi: hdfcSendProcessorAbi,\n    functionName: \"verifyProof\",\n    args: [\n      ...reformatProofForChain(proof),\n      publicSignals ? JSON.parse(publicSignals) : null,\n    ],\n    enabled: shouldFetchVerifyProof,\n  });\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // onRamp(uint256[2] memory _a, uint256[2][2] memory _b, uint256[2] memory _c, uint256[10] memory _signals)\n  //\n  const { config: writeSubmitOnRampConfig } = usePrepareContractWrite({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'onRamp',\n    args: [\n      ...reformatProofForChain(proof),\n      publicSignals ? JSON.parse(publicSignals) : null,\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRampWrite\n  });\n\n  const {\n    data: submitOnRampResult,\n    status: submitOnRampStatus,\n    writeAsync: writeSubmitOnRampAsync\n  } = useContractWrite(writeSubmitOnRampConfig);\n\n  const {\n    isLoading: isSubmitOnRampMining,\n    isSuccess: isSubmitOnRampSuccessful\n  } = useWaitForTransaction({\n    hash: submitOnRampResult ? submitOnRampResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitOnRampAsync successful: ', data);\n\n      refetchUsdcBalance?.();\n      \n      refetchIntentHash?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (proof && publicSignals) {\n      // console.log(\"proof\", proof);\n      // console.log(\"public signals\", publicSignals);\n      // console.log(\"vkey\", vkey);\n\n      // const proofVerified = await snarkjs.groth16.verify(vkey, JSON.parse(publicSignals), JSON.parse(proof));\n      // console.log(\"proofVerified\", proofVerified);\n\n      setShouldFetchVerifyProof(true);\n    } else {\n      setShouldFetchVerifyProof(false);\n    }\n  }, [proof, publicSignals]);\n\n  useEffect(() => {\n    if (verifyProofRaw) {\n      setShouldConfigureRampWrite(true);\n    } else {\n      setShouldConfigureRampWrite(false);\n    }\n  }, [verifyProofRaw]);\n\n  useEffect(() => {\n    if (submitOnRampResult?.hash) {\n      setSubmitOnRampTransactionHash(submitOnRampResult.hash);\n    }\n  }, [submitOnRampResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleWriteSubmitOnRampClick = async () => {\n    try {\n      await writeSubmitOnRampAsync?.();\n    } catch (error) {\n      console.log('writeSubmitDepositAsync failed: ', error);\n    }\n  };\n\n  const handleVerificationCompleteClick = () => {\n    navigateWithQuery('/send');\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ paddingBottom: '1.5rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center', fontSize: isMobile ? '16px': ''}}>\n            Complete On-Ramp\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {hdfcStrings.get('PROOF_FORM_TITLE_SEND_INSTRUCTIONS')}\n            <Link href=\"https://docs.zkp2p.xyz/onramp-guides/on-ramping\" target=\"_blank\">\n              Learn more ↗\n            </Link>\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <ProofGenerationForm\n        paymentPlatformType={PaymentPlatform.HDFC}\n        circuitType={CircuitType.EMAIL_VENMO_SEND}\n        circuitRemoteFilePath={SEND_KEY_FILE_NAME}\n        circuitInputs={selectedIntentHash}\n        remoteProofGenEmailType={RemoteProofGenEmailTypes.SEND}\n        proof={proof}\n        publicSignals={publicSignals}\n        setProof={setProof}\n        setPublicSignals={setPublicSignals}\n        bodyHashProof={bodyHashProof}\n        bodyHashPublicSignals={bodyHashPublicSignals}\n        setBodyHashProof={setBodyHashProof}\n        setBodyHashPublicSignals={setBodyHashPublicSignals}\n        onVerifyEmailCompletion={handleVerificationCompleteClick}\n        submitTransactionStatus={submitOnRampStatus}\n        isSubmitMining={isSubmitOnRampMining}\n        isSubmitSuccessful={isSubmitOnRampSuccessful}\n        handleSubmitVerificationClick={handleWriteSubmitOnRampClick}\n        transactionAddress={submitOnRampTransactionHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 2rem;\n  padding-bottom: 4rem;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  \n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid rgba(255, 255, 255, 0.2);\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/index.tsx",
    "content": "import React, { useEffect, useMemo, useState, ChangeEvent } from \"react\";\nimport styled from 'styled-components';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { Input } from \"@components/Swap/Input\";\nimport { OnRamperIntentTable } from '@components/Swap/OnRamperIntentTable';\nimport { AutoColumn } from '@components/layouts/Column';\nimport { Button } from '@components/common/Button';\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { IndicativeQuote, paymentPlatformInfo, PaymentPlatformType, ReceiveNetwork, ReceiveToken } from '@helpers/types';\nimport { InstructionDrawer } from '@components/Swap/InstructionDrawer';\nimport { CurrencySelector } from '@components/Swap/CurrencySelector';\nimport { PlatformSelector } from '@components/modals/PlatformSelector';\nimport { Integration } from '@components/modals/Integration';\nimport { SettingsDropdown } from './SettingsDropdown';\nimport { DEPOSIT_REFETCH_INTERVAL, EMPTY_STRING, ZERO } from \"@helpers/constants\";\nimport { toBigInt, toUsdcString, conversionRateToMultiplierString } from '@helpers/units'\nimport useAccount from '@hooks/useAccount';\nimport useBalances from '@hooks/useBalance';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useSwapQuote from '@hooks/useSwapQuote';\nimport usePlatformSettings from \"@hooks/usePlatformSettings\";\nimport useQuery from '@hooks/useQuery';\n\nexport type SwapQuote = {\n  requestedUSDC: string;\n  fiatToSend: string;\n  depositId: bigint;\n  conversionRate: bigint;\n};\n\nconst ZERO_QUOTE: SwapQuote = {\n  requestedUSDC: '',\n  fiatToSend: '',\n  depositId: ZERO,\n  conversionRate: ZERO\n};\n\nconst QuoteState = {\n  DEFAULT: 'default',\n  EXCEEDS_ORDER_COUNT: 'exceeds-order-count',\n  EXCEEDS_MAX_SIZE: 'exceeds-max-size',\n  INSUFFICIENT_LIQUIDITY: 'insufficient-liquidity',\n  AMOUNT_BELOW_TRANSFER_MIN: 'insufficient-transfer-amount',\n  INVALID_RECIPIENT_ADDRESS: 'invalid-recipient-address',\n  ORDER_COOLDOWN_PERIOD: 'order-cooldown-period',\n  BLOCKED_BY_DEPOSITOR: 'blocked-by-depositor',\n  MAINTENANCE: 'maintenance',\n  SUCCESS: 'success',\n}\n\ninterface SwapFormProps {\n  onIntentTableRowClick?: () => void;\n}\n\nconst SwapForm: React.FC<SwapFormProps> = ({\n  onIntentTableRowClick,\n}: SwapFormProps) => {\n  const { navigateWithQuery, queryParams } = useQuery();\n  const appIdFromQuery = queryParams.APP_ID;\n  const recipientAddressFromQuery = queryParams.RECIPIENT_ADDRESS;\n  const amountFromQuery = queryParams.AMOUNT_USDC;\n  const networkFromQuery = queryParams.NETWORK;\n  const tokenFromQuery = queryParams.TO_TOKEN;\n\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { usdcBalance } = useBalances();\n  const {\n    venmoRampAddress,\n    venmoRampAbi,\n    hdfcRampAddress,\n    hdfcRampAbi,\n    garantiRampAddress,\n    garantiRampAbi,\n    revolutRampAddress,\n    revolutRampAbi\n  } = useSmartContracts();\n  const { paymentPlatform, PaymentPlatform, currencyIndex } = usePlatformSettings();\n  \n  const { \n    isRegistered,\n    registrationHash,\n    refetchDeposits,\n    getBestDepositForAmount,\n    getDepositForMaxAvailableTransferSize,\n    shouldFetchDeposits,\n    refetchDepositCounter,\n    shouldFetchRampState,\n    onRampCooldownPeriod,\n    currentIntentHash,\n    refetchIntentHash,\n    refetchIntentHashAsUint,\n    shouldFetchIntentHash,\n    lastOnRampTimestamp,\n    refetchLastOnRampTimestamp,\n    maximumOnRampAmount\n  } = useSwapQuote();\n\n  /*\n   * State\n   */\n\n  const [quoteState, setQuoteState] = useState(QuoteState.DEFAULT);\n  const [currentQuote, setCurrentQuote] = useState<SwapQuote>(ZERO_QUOTE);\n\n  const [recipientAddress, setRecipientAddress] = useState<string>('');\n\n  const [rampAddress, setRampAddress] = useState<string | null>(null);\n  const [rampAbi, setRampAbi] = useState<string | null>(null);\n  const [shouldConfigureSignalIntentWrite, setShouldConfigureSignalIntentWrite] = useState<boolean>(false);\n\n  const [onRampTimeRemainingLabel, setOnRampTimeRemainingLabel] = useState('');\n\n  const [shouldAutoSelectIntent, setShouldAutoSelectIntent] = useState<boolean>(false);\n\n  const [shouldShowIntegrationModal, setShouldShowIntegrationModal] = useState<boolean>(false);\n\n  /*\n   * Event Handlers\n   */\n\n  const handleInputChange = (event: ChangeEvent<HTMLInputElement>, field: keyof SwapQuote) => {\n    const value = event.target.value;\n    const quoteCopy = {...currentQuote}\n  \n    if (field === 'requestedUSDC') {\n      setShouldConfigureSignalIntentWrite(false);\n  \n      if (value === \"\" || value === \"0\" || value === \".\") {\n        const zeroQuoteCopy = ZERO_QUOTE;\n        zeroQuoteCopy[field] = value;\n\n        setCurrentQuote(zeroQuoteCopy);\n      } else if (isValidInput(value)) {\n        quoteCopy[field] = value;\n\n        setCurrentQuote(quoteCopy);\n      }\n    } else if (field === 'depositId' || field === 'conversionRate') {\n      quoteCopy[field] = BigInt(value);\n\n      setCurrentQuote(quoteCopy);\n    } else {\n      quoteCopy[field] = value;\n      \n      setCurrentQuote(quoteCopy);\n    }\n  };\n\n  const handleEnterPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === 'Enter') {\n      // Prevent the default action\n      event.preventDefault();\n\n      // Call the handleAdd function\n      handleAdd(event as any);\n    }\n  };\n\n  const handleAdd = (event: React.FormEvent<HTMLButtonElement>) => {\n    // Prevent the default form submit action\n    event.preventDefault();\n\n    // Reset form fields\n    setCurrentQuote(ZERO_QUOTE);\n  };\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // function signalIntent(uint256 _depositId, uint256 _amount, address _to)\n  //\n  const { config: writeIntentConfig } = usePrepareContractWrite({\n    address: rampAddress,\n    abi: rampAbi,\n    functionName: 'signalIntent',\n    args: [\n      currentQuote.depositId,\n      toBigInt(currentQuote.requestedUSDC),\n      recipientAddress\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureSignalIntentWrite\n  });\n\n  const {\n    data: submitIntentResult,\n    isLoading: isSubmitIntentLoading,\n    writeAsync: writeSubmitIntentAsync\n  } = useContractWrite(writeIntentConfig);\n\n  const {\n    isLoading: isSubmitIntentMining\n  } = useWaitForTransaction({\n    hash: submitIntentResult ? submitIntentResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitIntentAsync successful: ', data);\n\n      setShouldConfigureSignalIntentWrite(false);\n      setCurrentQuote(ZERO_QUOTE);\n\n      refetchIntentHash?.();\n      refetchIntentHashAsUint?.();\n      refetchLastOnRampTimestamp?.();\n\n      setShouldAutoSelectIntent(true);\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRampAddress(venmoRampAddress);\n        setRampAbi(venmoRampAbi as any);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setRampAddress(hdfcRampAddress);\n        setRampAbi(hdfcRampAbi as any);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setRampAddress(garantiRampAddress);\n        setRampAbi(garantiRampAbi as any);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRampAddress(revolutRampAddress);\n        setRampAbi(revolutRampAbi as any);\n        break;\n\n      default:\n        break;\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [paymentPlatform, venmoRampAddress, hdfcRampAddress, garantiRampAddress]);\n\n  useEffect(() => {\n    if (shouldFetchIntentHash) {\n      const intervalId = setInterval(() => {\n        refetchIntentHash?.();\n        refetchIntentHashAsUint?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchIntentHash, refetchIntentHash, refetchIntentHashAsUint]);\n\n  useEffect(() => {\n    if (shouldFetchDeposits) {\n      const intervalId = setInterval(() => {\n        refetchDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchDeposits, refetchDeposits]);\n\n  useEffect(() => {\n    if (shouldFetchRampState) {\n      const intervalId = setInterval(() => {\n        refetchDepositCounter?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n\n      return () => clearInterval(intervalId);\n    }\n  }, [shouldFetchRampState, refetchDepositCounter]);\n\n  useEffect(() => {\n    const fetchUsdAmountToSendAndVerifyOrder = async () => {\n      const requestedUsdcAmount = currentQuote.requestedUSDC;\n      const isRequestedUsdcAmountPositive = requestedUsdcAmount !== '0';\n      const isValidRequestedUsdcAmount = getBestDepositForAmount && requestedUsdcAmount && isRequestedUsdcAmountPositive;\n      const isRegisteredAndLoggedIn = isRegistered && isLoggedIn;\n      const registrationHashForQuote = isRegisteredAndLoggedIn && registrationHash ? registrationHash : EMPTY_STRING; // exception for Revolut\n\n      if (isValidRequestedUsdcAmount) {\n        const indicativeQuote: IndicativeQuote = await getBestDepositForAmount(currentQuote.requestedUSDC, registrationHashForQuote);\n        \n        const usdAmountToSend = indicativeQuote.usdAmountToSend;\n        const depositId = indicativeQuote.depositId;\n        const conversionRate = indicativeQuote.conversionRate;\n\n        const isAmountToSendValid = usdAmountToSend !== undefined; \n        const isSendAmountAboveMin = paymentPlatform === PaymentPlatform.REVOLUT ? Number(usdAmountToSend) >= 1 : true ;\n        const isDepositIdValid = depositId !== undefined;\n        const isConversionRateValid = conversionRate !== undefined;\n\n        if (isAmountToSendValid && isDepositIdValid && isConversionRateValid) {\n          setCurrentQuote(prevState => ({\n            ...prevState,\n            fiatToSend: usdAmountToSend,\n            depositId,\n            conversionRate,\n          }));\n\n          const doesNotHaveOpenIntent = currentIntentHash === null;\n          if (!isSendAmountAboveMin) { \n            updateQuoteErrorState(QuoteState.AMOUNT_BELOW_TRANSFER_MIN);\n            return;\n          }\n          if (doesNotHaveOpenIntent ) {\n            const lastOnRampTimestampLoaded = lastOnRampTimestamp !== null;\n            const onRampCooldownPeriodLoaded = onRampCooldownPeriod !== null;\n            if (lastOnRampTimestampLoaded && onRampCooldownPeriodLoaded) {\n              const onRampCooldownEnd = (BigInt(lastOnRampTimestamp) + BigInt(onRampCooldownPeriod)) * 1000n;\n              const onRampCooldownElapsed = Date.now() >= onRampCooldownEnd;\n              if (!onRampCooldownElapsed) {\n                updateQuoteErrorState(QuoteState.ORDER_COOLDOWN_PERIOD);\n              } else if (maximumOnRampAmount && (toBigInt(requestedUsdcAmount) > maximumOnRampAmount)) {\n                updateQuoteErrorState(QuoteState.EXCEEDS_MAX_SIZE);\n              } else {\n                const isValidRecipientAddress = isValidAddress(recipientAddress);\n                if (isValidRecipientAddress) {\n                  const isVenmoMaintenance = paymentPlatform === PaymentPlatform.VENMO;\n                  const isRevolutMaintenance = paymentPlatform === PaymentPlatform.REVOLUT;\n                  if (isVenmoMaintenance || isRevolutMaintenance) {\n                    setQuoteState(QuoteState.MAINTENANCE);\n                  } else {\n                    setQuoteState(QuoteState.SUCCESS);\n\n                    setShouldConfigureSignalIntentWrite(true);\n                  }\n                } else {\n                  updateQuoteErrorState(QuoteState.INVALID_RECIPIENT_ADDRESS);\n                }\n              }\n            }\n          } else {\n            updateQuoteErrorState(QuoteState.EXCEEDS_ORDER_COUNT);\n          }\n        } else {\n          updateQuoteErrorState(QuoteState.INSUFFICIENT_LIQUIDITY);\n          setCurrentQuote(prevState => ({\n            ...prevState,\n            conversionRate: ZERO,\n            fiatToSend: '',\n          }));\n        }\n      } else {\n        updateQuoteErrorState(QuoteState.DEFAULT);\n        setCurrentQuote(prevState => ({\n          ...prevState,\n          conversionRate: ZERO,\n          fiatToSend: '',\n        }));\n      }\n    };\n\n    fetchUsdAmountToSendAndVerifyOrder();\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      currentQuote.requestedUSDC,\n      getBestDepositForAmount,\n      currentIntentHash,\n      lastOnRampTimestamp,\n      onRampCooldownPeriod,\n      recipientAddress,\n      registrationHash,\n      isLoggedIn,\n      isRegistered,\n      maximumOnRampAmount,\n      paymentPlatform\n    ]\n  );\n\n  useEffect(() => {\n    const updateCooldownTime = () => {\n      if (lastOnRampTimestamp && onRampCooldownPeriod) {\n        const cooldownEnd = (BigInt(lastOnRampTimestamp) + BigInt(onRampCooldownPeriod)) * 1000n;\n        const now = BigInt(Date.now());\n        const timeRemaining = cooldownEnd - now;\n\n        if (timeRemaining > 0) {\n          const timeRemainingInMinutes = Number(timeRemaining / 60000n);\n          const hours = Math.floor(timeRemainingInMinutes / 60);\n          const minutes = timeRemainingInMinutes % 60;\n\n          setOnRampTimeRemainingLabel(`${hours}h ${minutes}m`);\n        } else {\n          setOnRampTimeRemainingLabel('Cooldown complete');\n        }\n      } else {\n        setOnRampTimeRemainingLabel('Calculating...');\n      }\n    };\n\n    updateCooldownTime();\n\n    const intervalId = setInterval(updateCooldownTime, 60000);\n\n    return () => clearInterval(intervalId);\n  }, [lastOnRampTimestamp, onRampCooldownPeriod]);\n\n  useEffect(() => {\n    // Onramp directly to custom recipient address if user is specifically requesting USDC on Base using redirect flow\n    if (recipientAddressFromQuery &&\n        networkFromQuery &&\n        networkFromQuery === ReceiveNetwork.BASE &&\n        tokenFromQuery &&\n        tokenFromQuery === ReceiveToken.USDC) {\n      setRecipientAddress(recipientAddressFromQuery);\n    } else if (loggedInEthereumAddress) {\n      setRecipientAddress(loggedInEthereumAddress);\n    } else {\n      setRecipientAddress('');\n    }\n  }, [\n    loggedInEthereumAddress,\n    recipientAddressFromQuery,\n    networkFromQuery,\n    tokenFromQuery\n  ]);\n\n  useEffect(() => {\n    if (amountFromQuery && isValidInput(amountFromQuery)) {\n      setCurrentQuote(prevQuote => ({\n        ...prevQuote,\n        requestedUSDC: amountFromQuery\n      }));\n    }\n  }, [amountFromQuery]);\n\n  useEffect(() => {\n    if (appIdFromQuery || recipientAddressFromQuery) {\n      setShouldShowIntegrationModal(true);\n    } else {\n      setShouldShowIntegrationModal(false);\n    }\n  }, [appIdFromQuery, recipientAddressFromQuery]);\n\n  /*\n   * Handlers\n   */\n\n  const navigateToRegistrationHandler = () => {\n    navigateWithQuery('/register');\n  };\n\n  const setInputToMax = () => {\n    let maxQuote: IndicativeQuote;\n    if (getDepositForMaxAvailableTransferSize) {\n      const registrationHashForQuote = EMPTY_STRING;\n      maxQuote = getDepositForMaxAvailableTransferSize(registrationHashForQuote);\n    } else {\n      maxQuote = { error: 'No deposits available' } as IndicativeQuote;\n    }\n\n    const usdcAmount = maxQuote.maxUSDCAmountAvailable;\n    if (usdcAmount !== undefined) {\n      setCurrentQuote(prevState => ({\n        ...prevState,\n        requestedUSDC: usdcAmount,\n      }));\n    }\n  };\n\n  /*\n   * Helpers\n   */\n\n  const updateQuoteErrorState = (error: any) => {\n    console.log('updateQuoteErrorState: ', error)\n\n    setQuoteState(error);\n\n    setShouldConfigureSignalIntentWrite(false);\n  }\n\n  function isValidInput(value: any) {\n    const isValid = /^-?\\d*(\\.\\d{0,6})?$/.test(value);\n    return !isNaN(value) && parseFloat(value) >= 0 && isValid;\n  }\n\n  function isValidAddress(address: string) {\n    return /^0x[a-fA-F0-9]{40}$/.test(address);\n  }\n\n  const usdcBalanceLabel = useMemo(() => {\n    if (isLoggedIn && usdcBalance !== null) {\n      return `Balance: ${toUsdcString(usdcBalance, true)}`\n    } else {\n      return '';\n    }\n  }, [usdcBalance, isLoggedIn]);\n\n  const bestAvailableRateLabel = useMemo(() => {\n    if (currentQuote.conversionRate !== ZERO) {\n      const conversionRate = conversionRateToMultiplierString(currentQuote.conversionRate);\n      return `Best available rate: ${conversionRate}`\n    } else {\n      return '';\n    }\n  }, [currentQuote.conversionRate]);\n\n  const getButtonText = () => {\n    switch (quoteState) {\n      case QuoteState.ORDER_COOLDOWN_PERIOD:\n        return 'Order cooldown not elapsed: ' + onRampTimeRemainingLabel;\n\n      case QuoteState.EXCEEDS_ORDER_COUNT:\n        return 'Max one open order';\n\n      case QuoteState.INVALID_RECIPIENT_ADDRESS:\n        return 'Invalid recipient address';\n      \n      case QuoteState.EXCEEDS_MAX_SIZE:\n        const maximumOnRampAmountString = toUsdcString(maximumOnRampAmount ? maximumOnRampAmount : ZERO, true);\n        return `Exceeded USDC transfer limit of ${maximumOnRampAmountString}`;\n\n      case QuoteState.MAINTENANCE:\n        return 'Under maintenance';\n\n      case QuoteState.INSUFFICIENT_LIQUIDITY:\n        return 'Insufficient liquidity';\n\n      case QuoteState.AMOUNT_BELOW_TRANSFER_MIN:\n        return `Send amount less than minimum: 1.00 ${paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies[currencyIndex]}`;\n\n      case QuoteState.DEFAULT:\n        return 'Input USDC amount'\n\n      case QuoteState.SUCCESS:\n      default:\n        return 'Start Order';\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper>\n      <SwapFormContainer>\n        <TitleContainer>\n          <ThemedText.HeadlineMedium>\n            Swap\n          </ThemedText.HeadlineMedium>\n\n          {isLoggedIn && (\n            <SettingsDropdown\n              recipientAddress={recipientAddress}\n              setRecipientAddress={setRecipientAddress}\n              isLoggedIn={isLoggedIn}\n            />\n          )}\n        </TitleContainer>\n\n        <MainContentWrapper>\n          <PlatformCurrencyContainer>\n            <PlatformSelector usePillSelector={false} />\n            <CurrencySelector />\n          </PlatformCurrencyContainer>\n\n          <Input\n            label=\"Requesting\"\n            name={`requestedUSDC`}\n            value={currentQuote.requestedUSDC}\n            onChange={event => handleInputChange(event, 'requestedUSDC')}\n            type=\"number\"\n            inputLabel=\"USDC\"\n            accessoryLabel={usdcBalanceLabel}\n            enableMax={true}\n            maxButtonOnClick={setInputToMax}\n            placeholder=\"0\"\n          />\n\n          <Input\n            label=\"You send\"\n            name={`fiatToSend`}\n            value={currentQuote.fiatToSend}\n            onChange={event => handleInputChange(event, 'fiatToSend')}\n            onKeyDown={handleEnterPress}\n            type=\"number\"\n            accessoryLabel={bestAvailableRateLabel}\n            inputLabel={paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformCurrencies[currencyIndex]}\n            placeholder=\"0.00\"\n            readOnly={true}\n          />\n\n          {!isLoggedIn ? (\n            <CustomConnectButton\n              fullWidth={true}\n            />\n          ) : (!isRegistered && currentQuote.requestedUSDC) ? (\n            <Button\n              onClick={navigateToRegistrationHandler}\n            >\n              Complete Registration\n            </Button>\n          ) : (\n            <CTAButton\n              disabled={quoteState !== 'success'}\n              loading={isSubmitIntentLoading || isSubmitIntentMining}\n              onClick={async () => {\n                try {\n                  await writeSubmitIntentAsync?.();\n                } catch (error) {\n                  console.log('writeSubmitIntentAsync failed: ', error);\n                }\n              }}\n            >\n              {getButtonText()}\n            </CTAButton>\n          )}\n        </MainContentWrapper>\n      </SwapFormContainer>\n\n      <>\n        <VerticalDivider />\n        \n        <InstructionDrawer\n          paymentPlatform={paymentPlatform || PaymentPlatform.VENMO}\n          recipientAddress={recipientAddress}\n          setRecipientAddress={setRecipientAddress}\n          isLoggedIn={isLoggedIn}\n        />\n      </>\n\n      {currentIntentHash && (\n        <>\n          <VerticalDivider />\n          <OnRamperIntentTable\n            onIntentRowClick={onIntentTableRowClick}\n            shouldAutoSelectIntent={shouldAutoSelectIntent}\n            resetShouldAutoSelectIntent={() => setShouldAutoSelectIntent(false)}\n          />\n        </>\n      )}\n\n      { shouldShowIntegrationModal && (\n        <Integration\n          onBackClick={() => setShouldShowIntegrationModal(false)}\n        />\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  width: 100%;\n  max-width: 484px;\n  display: flex;\n  flex-direction: column;\n\n  @media (min-width: 600px) {\n    padding-top: 32px;\n  }\n`;\n\nconst SwapFormContainer = styled(AutoColumn)`\n  padding: 1rem;\n  gap: 1rem;\n  background-color: ${colors.container};\n  box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.25);\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst TitleContainer = styled.div`\n  display: flex;\n  margin: 0rem 0.75rem;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nconst MainContentWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  align-self: center;\n  border-radius: 4px;\n  justify-content: center;\n`;\n\nconst PlatformCurrencyContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  align-items: center;\n  justify-content: space-between;\n\n  @media (min-width: 600px) {\n    flex-direction: row;\n  }\n`;\n\nconst CTAButton = styled(Button)`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 16px !important;\n  padding: 1rem;\n  font-size: 20px;\n  font-weight: 550;\n  transition: all 75ms;\n`;\n\nconst VerticalDivider = styled.div`\n  height: 24px;\n  border-left: 1px solid ${colors.defaultBorderColor};\n  margin: 0 auto;\n`;\n\nexport default SwapForm;\n"
  },
  {
    "path": "client/src/components/Swap/revolut/OnRamp.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\nimport Link from '@mui/material/Link';\nimport { ArrowLeft } from 'react-feather';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { VerifyNotarizationForm } from '@components/Notary/VerifyNotarizationForm';\nimport { NumberedStep } from \"@components/common/NumberedStep\";\nimport { revolutStrings } from '@helpers/strings';\nimport { PaymentPlatform, NotaryVerificationCircuit } from '@helpers/types';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport useBalances from '@hooks/useBalance';\nimport useOnRamperIntents from '@hooks/revolut/useOnRamperIntents';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useMediaQuery from '@hooks/useMediaQuery';\nimport useQuery from '@hooks/useQuery';\n\n\ninterface OnRampProps {\n  handleBackClick: () => void;\n  selectedUIntIntentHash: string;\n}\n\nexport const OnRamp: React.FC<OnRampProps> = ({\n  handleBackClick,\n  selectedUIntIntentHash\n}) => {\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * Context\n   */\n\n  const { revolutRampAddress, revolutRampAbi } = useSmartContracts();\n  const { refetchIntentHash, refetchIntentHashAsUint } = useOnRamperIntents();\n  const { refetchUsdcBalance } = useBalances();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRampWrite, setShouldConfigureRampWrite] = useState<boolean>(false);\n  const [submitOnRampTransactionHash, setSubmitOnRampTransactionHash] = useState<string | null>(null);\n\n  // ----- transaction state -----\n  const [verifierProof, setVerifierProof] = useState<string>('');\n  // const [verifierProof, setVerifierProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // onRamp(bytes32 _intentHash, IRevolutSendProcessor.SendData calldata _sendData, bytes calldata _verifierSignature)\n  //\n  const { config: writeSubmitOnRampConfig } = usePrepareContractWrite({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'onRamp',\n    args: [\n      publicSignals,\n      verifierProof\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRampWrite\n  });\n\n  const {\n    data: submitOnRampResult,\n    status: submitOnRampStatus,\n    writeAsync: writeSubmitOnRampAsync\n  } = useContractWrite(writeSubmitOnRampConfig);\n\n  const {\n    isLoading: isSubmitOnRampMining,\n    isSuccess: isSubmitOnRampSuccessful\n  } = useWaitForTransaction({\n    hash: submitOnRampResult ? submitOnRampResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitOnRampAsync successful: ', data);\n\n      refetchUsdcBalance?.();\n      \n      refetchIntentHash?.();\n\n      refetchIntentHashAsUint?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (verifierProof && publicSignals) {\n      setShouldConfigureRampWrite(true);\n    } else {\n      setShouldConfigureRampWrite(false);\n    }\n  }, [verifierProof, publicSignals]);\n\n  useEffect(() => {\n    if (submitOnRampResult?.hash) {\n      setSubmitOnRampTransactionHash(submitOnRampResult.hash);\n    }\n  }, [submitOnRampResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleWriteSubmitOnRampClick = async () => {\n    try {\n      await writeSubmitOnRampAsync?.();\n    } catch (error) {\n      console.log('writeSubmitDepositAsync failed: ', error);\n    }\n  };\n\n  const handleVerificationCompleteClick = () => {\n    navigateWithQuery('/send');\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ paddingBottom: '1.5rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center', fontSize: isMobile ? '16px': ''}}>\n            Complete On-Ramp\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {revolutStrings.get('PROOF_FORM_TITLE_SEND_INSTRUCTIONS')}\n            <Link href=\"https://docs.zkp2p.xyz/onramp-guides/on-ramping\" target=\"_blank\">\n              Learn more ↗\n            </Link>\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <VerifyNotarizationForm\n        paymentPlatformType={PaymentPlatform.REVOLUT}\n        circuitType={NotaryVerificationCircuit.TRANSFER}\n        verifierProof={verifierProof}\n        publicSignals={publicSignals}\n        setVerifierProof={setVerifierProof}\n        setPublicSignals={setPublicSignals}\n        submitTransactionStatus={submitOnRampStatus}\n        isSubmitMining={isSubmitOnRampMining}\n        isSubmitSuccessful={isSubmitOnRampSuccessful}\n        handleSubmitVerificationClick={handleWriteSubmitOnRampClick}\n        onVerifyNotarizationCompletion={handleVerificationCompleteClick}\n        transactionAddress={submitOnRampTransactionHash}\n        selectedUIntIntentHash={selectedUIntIntentHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  padding-bottom: 4rem;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n  \n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid rgba(255, 255, 255, 0.2);\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Swap/venmo/OnRamp.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\nimport Link from '@mui/material/Link';\nimport { ArrowLeft } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport { useContractRead, useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { ProofGenerationForm } from '@components/ProofGen/ProofForm';\nimport { NumberedStep } from '@components/common/NumberedStep';\nimport { SEND_KEY_FILE_NAME, RemoteProofGenEmailTypes  } from '@helpers/constants';\nimport { venmoStrings } from '@helpers/strings';\nimport { reformatProofForChain } from '@helpers/submitProof';\nimport { PaymentPlatform } from '@helpers/types';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport useBalances from '@hooks/useBalance';\nimport useOnRamperIntents from '@hooks/venmo/useOnRamperIntents';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useMediaQuery from '@hooks/useMediaQuery';\nimport useQuery from '@hooks/useQuery';\n\n\ninterface OnRampProps {\n  handleBackClick: () => void;\n  selectedIntentHash: string;\n}\n\nexport const OnRamp: React.FC<OnRampProps> = ({\n  handleBackClick,\n  selectedIntentHash\n}) => {\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * Context\n   */\n\n  const {\n    venmoRampAddress,\n    venmoRampAbi,\n    venmoSendProcessorAbi,\n    venmoSendProcessorAddress,\n  } = useSmartContracts();\n  const { refetchIntentHash } = useOnRamperIntents();\n  const { refetchUsdcBalance } = useBalances();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * State\n   */\n\n  const [shouldConfigureRampWrite, setShouldConfigureRampWrite] = useState<boolean>(false);\n  const [shouldFetchVerifyProof, setShouldFetchVerifyProof] = useState<boolean>(false);\n  const [submitOnRampTransactionHash, setSubmitOnRampTransactionHash] = useState<string | null>(null);\n\n  // ----- transaction state -----\n  const [proof, setProof] = useState<string>('');\n  const [bodyHashProof, setBodyHashProof] = useState<string>('');\n  // const [proof, setProof] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  const [publicSignals, setPublicSignals] = useState<string>('');\n  const [bodyHashPublicSignals, setBodyHashPublicSignals] = useState<string>('');\n  // const [publicSignals, setPublicSignals] = useState<string>(\n  //   JSON.stringify()\n  // );\n\n  /*\n   * Contract Reads\n   */\n\n  const {\n    data: verifyProofRaw,\n  } = useContractRead({\n    address: venmoSendProcessorAddress,\n    abi: venmoSendProcessorAbi,\n    functionName: \"verifyProof\",\n    args: [\n      ...reformatProofForChain(proof),\n      publicSignals ? JSON.parse(publicSignals) : null,\n    ],\n    enabled: shouldFetchVerifyProof,\n  });\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // onRamp(uint256[2] memory _a, uint256[2][2] memory _b, uint256[2] memory _c, uint256[10] memory _signals)\n  //\n  const { config: writeSubmitOnRampConfig } = usePrepareContractWrite({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'onRamp',\n    args: [\n      ...reformatProofForChain(proof),\n      publicSignals ? JSON.parse(publicSignals) : null,\n    ],\n    onError: (error: { message: any }) => {\n      console.error(error.message);\n    },\n    enabled: shouldConfigureRampWrite\n  });\n\n  const {\n    data: submitOnRampResult,\n    status: submitOnRampStatus,\n    writeAsync: writeSubmitOnRampAsync\n  } = useContractWrite(writeSubmitOnRampConfig);\n\n  const {\n    isLoading: isSubmitOnRampMining,\n    isSuccess: isSubmitOnRampSuccessful\n  } = useWaitForTransaction({\n    hash: submitOnRampResult ? submitOnRampResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitOnRampAsync successful: ', data);\n\n      refetchUsdcBalance?.();\n      \n      refetchIntentHash?.();\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (proof && publicSignals) {\n      // console.log(\"proof\", proof);\n      // console.log(\"public signals\", publicSignals);\n      // console.log(\"vkey\", vkey);\n\n      // const proofVerified = await snarkjs.groth16.verify(vkey, JSON.parse(publicSignals), JSON.parse(proof));\n      // console.log(\"proofVerified\", proofVerified);\n\n      setShouldFetchVerifyProof(true);\n    } else {\n      setShouldFetchVerifyProof(false);\n    }\n  }, [proof, publicSignals]);\n\n  useEffect(() => {\n    if (verifyProofRaw) {\n      setShouldConfigureRampWrite(true);\n    } else {\n      setShouldConfigureRampWrite(false);\n    }\n  }, [verifyProofRaw]);\n\n  useEffect(() => {\n    if (submitOnRampResult?.hash) {\n      setSubmitOnRampTransactionHash(submitOnRampResult.hash);\n    }\n  }, [submitOnRampResult])\n\n  /*\n   * Handlers\n   */\n\n  const handleWriteSubmitOnRampClick = async () => {\n    try {\n      await writeSubmitOnRampAsync?.();\n    } catch (error) {\n      console.log('writeSubmitDepositAsync failed: ', error);\n    }\n  };\n\n  const handleVerificationCompleteClick = () => {\n    navigateWithQuery('/send');\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <TitleContainer>\n        <RowBetween style={{ paddingBottom: '1.5rem' }}>\n          <div style={{ flex: 0.5 }}>\n            <button\n              onClick={handleBackClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center', fontSize: isMobile ? '16px': '' }}>\n            Complete On-Ramp\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.5 }}/>\n        </RowBetween>\n\n        <InstructionsAndTogglesContainer>\n          <NumberedStep>\n            {venmoStrings.get('PROOF_FORM_TITLE_SEND_INSTRUCTIONS')}\n            <Link href=\"https://docs.zkp2p.xyz/onramp-guides/on-ramping\" target=\"_blank\">\n              Learn more ↗\n            </Link>\n          </NumberedStep>\n        </InstructionsAndTogglesContainer>\n      </TitleContainer>\n\n      <ProofGenerationForm\n        paymentPlatformType={PaymentPlatform.VENMO}\n        circuitType={CircuitType.EMAIL_VENMO_SEND}\n        circuitRemoteFilePath={SEND_KEY_FILE_NAME}\n        circuitInputs={selectedIntentHash}\n        remoteProofGenEmailType={RemoteProofGenEmailTypes.SEND}\n        proof={proof}\n        publicSignals={publicSignals}\n        setProof={setProof}\n        setPublicSignals={setPublicSignals}\n        bodyHashProof={bodyHashProof}\n        bodyHashPublicSignals={bodyHashPublicSignals}\n        setBodyHashProof={setBodyHashProof}\n        setBodyHashPublicSignals={setBodyHashPublicSignals}\n        onVerifyEmailCompletion={handleVerificationCompleteClick}\n        submitTransactionStatus={submitOnRampStatus}\n        isSubmitMining={isSubmitOnRampMining}\n        isSubmitSuccessful={isSubmitOnRampSuccessful}\n        handleSubmitVerificationClick={handleWriteSubmitOnRampClick}\n        transactionAddress={submitOnRampTransactionHash}\n      />\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  padding-bottom: 4rem;\n`;\n\nconst TitleContainer = styled.div`\n  padding: 1.5rem;\n  background-color: ${colors.container};\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid rgba(255, 255, 255, 0.2);\n  }\n`;\n\nconst InstructionsAndTogglesContainer = styled.div`\n  display: grid;\n  flex-direction: column;\n  gap: 1rem;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n"
  },
  {
    "path": "client/src/components/Toggle.tsx",
    "content": "import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { colors } from '@theme/colors';\n\n\ninterface ToggleProps {\n  isSwapTab: boolean;\n  handleToggle: (target: string) => void;\n}\n\ninterface ToggleButtonProps {\n  isSwapTab: boolean;\n}\n\nexport const Toggle: React.FC<ToggleProps> = ({\n  handleToggle,\n  isSwapTab\n}) => {\n  return (\n    <ToggleContainer>\n      <ToggleButton\n        onClick={() => handleToggle('Swap')}\n        isSwapTab={isSwapTab}\n      >\n        Swap\n      </ToggleButton>\n      <ToggleButton\n        onClick={() => handleToggle('Deposit')}\n        isSwapTab={!isSwapTab}\n      >\n        Deposit\n      </ToggleButton>\n    </ToggleContainer>\n  );\n};\n\nconst ToggleContainer = styled.div`\n  width: 229px;\n  height: 40px;\n  border-radius: 40px;\n  background-color: ${colors.container};\n`;\n\nconst ToggleButton = styled.span<ToggleButtonProps>`\n  display: inline-block;\n  width: 50%;\n  text-align: center;\n  font-weight: 700;\n  font-size: 16px;\n  height: 100%;\n  line-height: 40px;\n  border-radius: 40px;\n  cursor: pointer;\n\n  ${({ isSwapTab }) => isSwapTab && css`\n    background: #df2e2d;\n    color: #ffffff;\n    box-shadow: inset 0px -6px 0px rgba(0, 0, 0, 0.16);\n  `}\n`;"
  },
  {
    "path": "client/src/components/Withdraw/LegacyDepositRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport { AccessoryButton } from '@components/common/AccessoryButton';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface LegacyDepositRowProps {\n  availableDepositAmount: string;\n  totalDepositAmount: string;\n  outstandingIntentAmount: string;\n  intentCount: string;\n  conversionRate: string;\n  rowIndex: number;\n  isWithdrawDepositLoading: boolean;\n  handleWithdrawClick: () => void;\n}\n\nexport const LegacyDepositRow: React.FC<LegacyDepositRowProps> = ({\n  availableDepositAmount,\n  totalDepositAmount,\n  outstandingIntentAmount,\n  intentCount,\n  conversionRate,\n  rowIndex,\n  isWithdrawDepositLoading,\n  handleWithdrawClick\n}: LegacyDepositRowProps) => {\n  LegacyDepositRow.displayName = \"LegacyDepositRow\";\n\n  const isMobile = useMediaQuery() === 'mobile';\n\n  const depositRemainingLabel = `${availableDepositAmount} USDC`;\n  const intentAmountLabel = `${intentCount} (${outstandingIntentAmount} USDC)`;\n  const originalAmountLabel = `${totalDepositAmount} USDC`\n\n  return (\n    <Container>\n      <DepositDetailsContainer>\n        <SummaryLabelsAndIconContainer>\n          <SVGIconThemed icon={'usdc'} width={'24'} height={'24'}/>\n          <SummaryLabelsContainer>\n            <SummaryLabel>\n              <SummaryLabelTitle>Available USDC:&nbsp;</SummaryLabelTitle>\n              <SummaryLabelValue>{depositRemainingLabel}</SummaryLabelValue>\n            </SummaryLabel>\n            \n            <SummaryLabel>\n              <SummaryLabelTitle>Outstanding Orders:&nbsp;</SummaryLabelTitle>\n              <SummaryLabelValue>{intentAmountLabel}</SummaryLabelValue>\n            </SummaryLabel>\n\n            <PercentageLabel>\n              <Label>Conversion Rate:</Label>\n              <Value>{conversionRate}</Value>\n            </PercentageLabel>\n\n            <SummaryLabel>\n              <SummaryLabelTitle>Deposit Amount:&nbsp;</SummaryLabelTitle>\n              <SummaryLabelValue>{originalAmountLabel}</SummaryLabelValue>\n            </SummaryLabel>\n          </SummaryLabelsContainer>\n        </SummaryLabelsAndIconContainer>\n      </DepositDetailsContainer>\n\n      <ActionsContainer>\n        <AccessoryButton\n          onClick={handleWithdrawClick}\n          height={36}\n          loading={isWithdrawDepositLoading}\n          title={'Withdraw'}\n          icon={isMobile ? undefined : 'logout'}\n        />\n      </ActionsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n  height: 100%;\n`;\n\nconst DepositDetailsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  padding: 1.5rem;\n`;\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: flex-end;\n  padding-right 1.5rem;\n  flex-grow: 1;\n`;\n\nconst SummaryLabelsAndIconContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n`;\n\nconst SummaryLabelsContainer = styled.div`\n  width: 100%; \n  display: flex;\n  gap: 2px;\n  flex-direction: column;\n  line-height: 24px;\n`;\n\nconst SummaryLabel = styled.label`\n  display: flex;\n  font-size: 15px;\n  color: #FFFFFF;\n  align-items: center;\n`;\n\nconst SummaryLabelTitle = styled.span`\n  font-size: 15px;\n  color: #6C757D;\n`;\n\nconst SummaryLabelValue = styled.span`\n  font-size: 15px;\n  color: #FFFFFF;\n`;\n\nconst PercentageLabel = styled.div`\n  display: flex;\n`;\n\nconst Label = styled.span`\n  color: #6C757D;\n  font-size: 15px;\n`;\n\nconst Value = styled.span`\n  color: #FFFFFF;\n  font-size: 15px;\n  margin-left: 4px;\n`;\n"
  },
  {
    "path": "client/src/components/Withdraw/LegacyDepositTable.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport { Inbox } from 'react-feather';\nimport styled, { css } from 'styled-components/macro';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { RowBetween } from '@components/layouts/Row';\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { DepositWithAvailableLiquidity } from '@helpers/types';\nimport { LegacyDepositRow } from \"@components/Withdraw/LegacyDepositRow\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport { toUsdcString, conversionRateToMultiplierString } from '@helpers/units';\nimport useAccount from '@hooks/useAccount';\nimport useLegacyDeposits from '@hooks/useLegacyDeposits';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useBalances from '@hooks/useBalance';\n\n\nexport interface DepositPrime {\n  depositor: string;\n  availableDepositAmount: string;\n  totalDepositAmount: string;\n  outstandingIntentAmount: string;\n  intentCount: string;\n  conversionRate: string;\n}\n\nexport const LegacyDepositTable: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn } = useAccount();\n  const { legacyRampAddress, legacyRampAbi } = useSmartContracts();\n  const { refetchUsdcBalance } = useBalances();\n\n  const {\n    deposits: legacyVenmoDeposits,\n    refetchDeposits: refetchLegacyVenmoDeposits\n  } = useLegacyDeposits();\n\n  /*\n   * State\n   */\n\n  const [positionsRowData, setPositionsRowData] = useState<DepositPrime[]>([]);\n\n  const [selectedDepositIdToWithdraw, setSelectedDepositIdToWithdraw] = useState<bigint>(0n);\n  const [selectedRowIndexToWithdraw, setSelectedRowIndexToWithdraw] = useState<number>(0);\n\n  const [shouldConfigureWithdrawWrite, setShouldConfigureWithdrawWrite] = useState<boolean>(false);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // withdrawDeposit(uint256[] memory _depositIds)\n  //\n  const { config: writeWithdrawConfig } = usePrepareContractWrite({\n    address: legacyRampAddress,\n    abi: legacyRampAbi,\n    functionName: 'withdrawDeposit',\n    args: [\n      [selectedDepositIdToWithdraw],\n    ],\n    enabled: shouldConfigureWithdrawWrite\n  });\n\n  const {\n    data: submitWithdrawResult,\n    isLoading: isSubmitWithdrawLoading,\n    status: submitWithdrawStatus,\n    writeAsync: writeSubmitWithdrawAsync,\n  } = useContractWrite(writeWithdrawConfig);\n\n  const {\n    isLoading: isSubmitWithdrawMining\n  } = useWaitForTransaction({\n    hash: submitWithdrawResult ? submitWithdrawResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitWithdrawAsync successful: ', data);\n\n      refetchUsdcBalance?.();\n\n      refetchLegacyVenmoDeposits?.();\n\n      setShouldConfigureWithdrawWrite(false);\n    },\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (!legacyVenmoDeposits) {\n      setPositionsRowData([]);  \n    } else {\n      var sanitizedPositions: DepositPrime[] = [];\n      sanitizedPositions = legacyVenmoDeposits.map((depositWithLiquidity: DepositWithAvailableLiquidity) => {\n        const deposit = depositWithLiquidity.deposit\n\n        const depositor = deposit.depositor;\n        const availableDepositAmount = toUsdcString(depositWithLiquidity.availableLiquidity, true);\n        const totalDepositAmount = toUsdcString(deposit.depositAmount, true);\n        const intentCount = deposit.intentHashes.length.toString();\n        const outstandingIntentAmount = toUsdcString(deposit.outstandingIntentAmount, true);\n        const conversionRate = conversionRateToMultiplierString(deposit.conversionRate);\n\n        return {\n          depositor,\n          availableDepositAmount,\n          totalDepositAmount,\n          outstandingIntentAmount,\n          intentCount,\n          conversionRate\n        };\n      });\n\n      setPositionsRowData(sanitizedPositions);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [legacyVenmoDeposits]);\n\n  useEffect(() => {\n    const executeWithdrawDeposit = async () => {\n      const requiredStatusForExecution = submitWithdrawStatus === 'idle' || submitWithdrawStatus === 'error';\n\n      if (shouldConfigureWithdrawWrite && writeSubmitWithdrawAsync && requiredStatusForExecution) {\n        try {\n          await writeSubmitWithdrawAsync();\n        } catch (error) {\n          console.log('writeSubmitWithdrawAsync failed: ', error);\n\n          setShouldConfigureWithdrawWrite(false);\n        }\n      }\n    };\n  \n    executeWithdrawDeposit();\n  }, [shouldConfigureWithdrawWrite, writeSubmitWithdrawAsync, submitWithdrawStatus]);\n\n  /*\n   * Handlers\n   */\n\n  const handleWithdrawClick = async (rowIndex: number) => {\n    if (legacyVenmoDeposits) {\n      const selectedDeposit = legacyVenmoDeposits[rowIndex];\n      setSelectedDepositIdToWithdraw(selectedDeposit.depositId);\n\n      setSelectedRowIndexToWithdraw(rowIndex);\n\n      setShouldConfigureWithdrawWrite(true);\n    }\n  };\n  \n  /*\n   * Component\n   */\n\n  return (\n    <Container>\n      <Column>\n        <TitleRow>\n          <ThemedText.HeadlineMedium>\n            Withdraw\n          </ThemedText.HeadlineMedium>\n        </TitleRow>\n\n        <Content>\n          {!isLoggedIn ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <InboxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  Your legacy deposits will appear here.\n                </div>\n              </ThemedText.DeprecatedBody>\n              <CustomConnectButton width={152} />\n            </ErrorContainer>\n          ) : positionsRowData.length === 0 ? (\n            <ErrorContainer>\n              <ThemedText.DeprecatedBody textAlign=\"center\">\n                <InboxIcon strokeWidth={1} style={{ marginTop: '2em' }} />\n                <div>\n                  You have no legacy deposits.\n                </div>\n              </ThemedText.DeprecatedBody>\n            </ErrorContainer>\n          ) : (\n            <DepositsContainer>\n              <DepositsCountTitle>\n                <ThemedText.LabelSmall textAlign=\"left\">\n                  Your legacy deposits ({positionsRowData.length})\n                </ThemedText.LabelSmall>\n              </DepositsCountTitle>\n              <Table>\n                {positionsRowData.map((positionRow, rowIndex) => (\n                  <DepositRowStyled key={rowIndex}>\n                    <LegacyDepositRow\n                      availableDepositAmount={positionRow.availableDepositAmount}\n                      totalDepositAmount={positionRow.totalDepositAmount}\n                      outstandingIntentAmount={positionRow.outstandingIntentAmount}\n                      intentCount={positionRow.intentCount}\n                      conversionRate={positionRow.conversionRate}\n                      rowIndex={rowIndex}\n                      isWithdrawDepositLoading={rowIndex === selectedRowIndexToWithdraw && (isSubmitWithdrawLoading || isSubmitWithdrawMining)}\n                      handleWithdrawClick={() => {\n                        handleWithdrawClick(rowIndex)\n                      }}\n                    />\n                  </DepositRowStyled>\n                ))}\n              </Table>\n            </DepositsContainer>\n          )}\n        </Content>\n      </Column>\n    </Container>\n  )\n};\n\nconst Container = styled.div`\n  width: 100%;\n  gap: 1rem;\n`;\n\nconst Column = styled.div`\n  gap: 1rem;\n  align-self: flex-start;\n  border-radius: 16px;\n  justify-content: center;\n`;\n\nconst TitleRow = styled(RowBetween)`\n  margin-bottom: 20px;\n  height: 50px;\n  align-items: flex-end;\n  color: #FFF;\n  padding: 0 1rem;\n\n  @media (max-width: 600px) {\n    flex-wrap: wrap;\n    gap: 12px;\n    width: 100%;\n    padding: 0 1.75rem;\n  };\n`;\n\nconst Content = styled.main`\n  display: flex;\n  background-color: ${colors.container};\n  flex-direction: column;\n  box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n    0px 24px 32px rgba(0, 0, 0, 0.01);\n  overflow: hidden;\n  position: relative;\n\n  @media (min-width: 600px) {\n    border-radius: 16px;\n    border: 1px solid ${colors.defaultBorderColor};\n  }\n`;\n\nconst ErrorContainer = styled.div`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  margin: auto;\n  padding: 36px;\n  max-width: 340px;\n  min-height: 25vh;\n  gap: 36px;\n`;\n\nconst IconStyle = css`\n  width: 48px;\n  height: 48px;\n  margin-bottom: 0.5rem;\n`;\n\nconst InboxIcon = styled(Inbox)`\n  ${IconStyle}\n`;\n\nconst DepositsContainer = styled.div`\n  display: flex;\n  align-items: flex-start;\n  flex-direction: column;\n  justify-content: flex-start;\n  width: 100%;\n`;\n\nconst DepositsCountTitle = styled.div`\n  width: 100%;\n  justify-content: space-between;\n  text-align: left;\n  padding-top: 2rem;\n  padding-bottom: 1.75rem;\n  padding-left: 1.5rem;\n  border-bottom: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  border-radius: 8px;\n  border-top-left-radius: 16px;\n  border-top-right-radius: 16px;\n  box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.25);\n  font-size: 16px;\n  color: #616161;\n\n  & > * {\n    border-bottom: 1px solid ${colors.defaultBorderColor};\n  }\n\n  & > *:last-child {\n    border-bottom: none;\n  }\n`;\n\nconst DepositRowStyled = styled.div`\n  &:last-child {\n    border-bottom-left-radius: 16px;\n    border-bottom-right-radius: 16px;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/Withdraw/index.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from 'styled-components/macro';\n\nimport { AutoColumn } from '@components/layouts/Column';\nimport { LegacyDepositTable } from '@components/Withdraw/LegacyDepositTable';\nimport { DEPOSIT_REFETCH_INTERVAL } from '@helpers/constants';\nimport useLegacyDeposits from '@hooks/useLegacyDeposits';\n\n\nexport default function Withdraw() {\n  /*\n   * Contexts\n   */\n\n  const { refetchDeposits, shouldFetchDeposits } = useLegacyDeposits();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchDeposits) {\n      const intervalId = setInterval(() => {\n        refetchDeposits?.();\n      }, DEPOSIT_REFETCH_INTERVAL);\n  \n      return () => clearInterval(intervalId);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldFetchDeposits]);\n\n  /*\n   * Component\n   */\n\n  function renderContent() {\n    return (\n      <DepositAndIntentContainer>\n        <LegacyDepositTable/>\n      </DepositAndIntentContainer>\n    );\n  }\n\n  return (\n    <Wrapper>\n      <Content>\n        {renderContent()}\n      </Content>\n    </Wrapper>\n  )\n}\n\nconst Wrapper = styled(AutoColumn)`\n  max-width: 660px;\n  width: 100%;\n`;\n\nconst DepositAndIntentContainer = styled.div`\n  display: grid;\n  border-radius: 16px;\n`;\n\nconst Content = styled.main`\n  gap: 1rem;\n`;\n"
  },
  {
    "path": "client/src/components/common/AccessoryButton.tsx",
    "content": "import React, { useState, useRef, useEffect } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n  ChevronRight,\n  LogOut,\n  RefreshCw,\n  Send,\n  Trash2,\n  UserX,\n  Unlock\n} from 'react-feather';\n\nimport Spinner from \"@components/common/Spinner\";\n\n\ntype iconType = \n  \"send\" |\n  \"chevronRight\" |\n  \"trash\" |\n  \"userX\" |\n  \"logout\" |\n  \"refresh\" |\n  \"unlock\";\n\ninterface AccessoryButtonProps {\n  fullWidth?: boolean;\n  title?: string;\n  height?: number;\n  disabled?: boolean;\n  loading?: boolean;\n  onClick?: () => void;\n  children?: React.ReactNode;\n  icon?: iconType;\n  borderColor?: string;\n  backgroundColor?: string;\n  backgroundHoverColor?: string;\n  activeBackgroundColor?: string;\n  hoverColor?: string;\n  borderHoverColor?: string;\n  spinnerColor?: string;\n}\n\nconst primaryColors = {\n  backgroundColor: '#DF2E2D',\n  borderColor: '#DF2E2D',\n  borderHoverColor: '#DF2E2D',\n  backgroundHoverColor: '#ca2221',\n  activeBackgroundColor: '#bc3035',\n  hoverColor: 'white',\n  textColor: 'white',\n  spinnerColor: '#DF2E2D'\n\n}\n\nconst secondaryColors = {\n  backgroundColor: 'transparent',\n  borderColor: '#adb5bd',\n  borderHoverColor: '#495057',\n  backgroundHoverColor: 'transparent',\n  activeBackgroundColor: 'background: rgba(206, 212, 218, 0.1);',\n  hoverColor: '#495057',\n  textColor: '#adb5bd',\n  spinnerColor: '#adb5bd'\n}\n\nexport const AccessoryButton: React.FC<AccessoryButtonProps> = ({\n  fullWidth = false,\n  title = '',\n  height = 48,\n  disabled = false,\n  loading = false,\n  onClick,\n  children,\n  icon\n}) => {\n  const buttonRef = useRef<HTMLButtonElement>(null);\n\n  /*\n   * State\n   */\n\n  const [buttonWidth, setButtonWidth] = useState<number | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (buttonRef.current && !loading) {\n      setButtonWidth(buttonRef.current.offsetWidth);\n    }\n  }, [loading, children, title]);\n\n  const containerStyle: React.CSSProperties = {};\n  if (loading && buttonWidth) {\n    containerStyle.width = `${buttonWidth}px`;\n  }\n\n  /*\n   * Helpers\n   */\n\n  const getIcon = (iconName: iconType) => {\n    switch (iconName) {\n      case \"send\":\n        return <StyledSend />;\n\n      case \"chevronRight\":\n        return <StyledChevronRight />;\n\n      case \"logout\":\n        return <StyledLogOut />;\n\n      case \"refresh\":\n        return <StyledRefresh />;\n\n      case \"trash\":\n        return <StyledTrash />;\n\n      case \"userX\":\n        return <StyledUserX />;\n\n      case \"unlock\":\n        return <StyledUnlock />;\n\n      default:\n        return null;\n    }\n  };\n\n  const shouldUsePrimaryColors = icon === 'send';\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container\n      ref={buttonRef}\n      style={containerStyle}\n      fullWidth={fullWidth}\n      height={height}\n      disabled={disabled || loading}\n      $loading={loading}\n      backgroundColor={shouldUsePrimaryColors ? primaryColors.backgroundColor : secondaryColors.backgroundColor}\n      borderColor={shouldUsePrimaryColors ? primaryColors.borderColor : secondaryColors.borderColor}\n      hoverColor={shouldUsePrimaryColors ? primaryColors.hoverColor : secondaryColors.hoverColor}\n      borderHoverColor={shouldUsePrimaryColors ? primaryColors.borderHoverColor : secondaryColors.borderHoverColor}\n      backgroundHoverColor={shouldUsePrimaryColors ? primaryColors.backgroundHoverColor : secondaryColors.backgroundHoverColor}\n      activeBackgroundColor={shouldUsePrimaryColors ? primaryColors.activeBackgroundColor : secondaryColors.activeBackgroundColor}\n      spinnerColor={shouldUsePrimaryColors ? primaryColors.spinnerColor : secondaryColors.spinnerColor}\n      onClick={onClick}\n    >\n      <ButtonAndLabelContainer\n        color={shouldUsePrimaryColors ? primaryColors.textColor : secondaryColors.textColor}\n        $loading={loading}\n      >\n        {\n          loading ? (\n            <Spinner color={shouldUsePrimaryColors ? primaryColors.spinnerColor : secondaryColors.spinnerColor}/>\n          ) : (\n            <>\n              {title && <span>{title}</span>}\n              {icon && getIcon(icon)}\n              {children}\n            </>\n          )\n        }\n      </ButtonAndLabelContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.button<AccessoryButtonProps & { $loading: boolean }>`\n  width: ${({ fullWidth }) => (fullWidth ? '100%' : 'auto')};\n  height: ${({ height }) => height}px;\n  border-radius: 18px;\n  background: ${({ backgroundColor }) => backgroundColor || 'transparent'};\n  box-shadow: inset -3px -6px 4px rgba(0, 0, 0, 0.16);\n  border: 1px solid ${({ borderColor }) => borderColor};\n  padding: 1px 14px 0px 14px;\n  color: white;\n  cursor: pointer;\n  transition: background 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\n\n  &:hover:not([disabled]) {\n    border: 1px solid ${({ borderHoverColor }) => borderHoverColor};\n    color: ${({ hoverColor }) => hoverColor};\n    background: ${({ backgroundHoverColor }) => backgroundHoverColor};\n\n    * {\n      color: ${({ hoverColor }) => hoverColor};\n    }\n  }\n\n  &:active:not([disabled]) {\n    background: ${({ activeBackgroundColor }) => activeBackgroundColor};\n    box-shadow: inset 0px -8px 0px rgba(0, 0, 0, 0.16);\n  }\n\n  ${({ $loading }) =>\n    $loading && css`\n      cursor: wait;\n    `\n  }\n`;\n\nconst ButtonAndLabelContainer = styled.div<{ color: string, $loading: boolean  }>`\n  width: 100%;  \n  display: flex;\n  align-items: center;\n  justify-content: ${({ $loading }) => $loading ? 'center' : 'flex-start'};\n  font-size: 13px;\n  font-family: 'Graphik';\n  font-weight: 600;\n  text-align: center;\n  color: ${({ color }) => color}};\n  gap: 8px;\n`;\n\nconst StyledSend = styled(Send)`\n  width: 12px;\n  height: 12px;\n  color: white;\n`;\n\nconst StyledChevronRight = styled(ChevronRight)`\n  width: 18px;\n  height: 18px;\n  color: #adb5bd;\n  margin-right: -4px;\n`;\n\nconst StyledLogOut = styled(LogOut)`\n  width: 15px;\n  height: 15px;\n  color: #adb5bd;\n`;\n\nconst StyledRefresh = styled(RefreshCw)`\n  width: 15px;\n  height: 15px;\n  color: #adb5bd;\n`;\n\nconst StyledTrash = styled(Trash2)`\n  width: 13px;\n  height: 13px;\n  color: #adb5bd;\n`;\n\nconst StyledUnlock = styled(Unlock)`\n  width: 14px;\n  height: 14px;\n  color: #adb5bd;\n`;\n\nconst StyledUserX = styled(UserX)`\n  width: 15px;\n  height: 15px;\n  color: #adb5bd;\n`;\n"
  },
  {
    "path": "client/src/components/common/Button.tsx",
    "content": "import React, { useState } from \"react\";\nimport styled, { css } from 'styled-components';\n\nimport Spinner from \"@components/common/Spinner\";\n\n\ninterface ButtonProps {\n  fullWidth?: boolean;\n  width?: number;\n  height?: number;\n  fontSize?: number;\n  bgColor?: string;\n  disabled?: boolean;\n  loading?: boolean;\n  leftAccessorySvg?: string;\n  svg?: string;\n  onClick?: () => void;\n  children?: React.ReactNode;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n  fullWidth = false,\n  width,\n  height = 48,\n  fontSize = 16,\n  bgColor = \"#df2e2d\",\n  disabled = false,\n  loading = false,\n  leftAccessorySvg,\n  svg,\n  onClick,\n  children\n}) => {\n  const [svgLoaded, setSvgLoaded] = useState(!svg);\n  \n  return (\n    <BaseButton\n      fullWidth={fullWidth}\n      width={width}\n      height={height}\n      fontSize={fontSize}\n      bgColor={bgColor}\n      disabled={disabled}\n      $disabled={disabled}\n      $loading={loading}\n      $svgLoaded={!svg && svgLoaded}\n      onClick={onClick}\n    >\n      {loading ? (\n        <Spinner />\n      ) : (\n        <ContentContainer>\n          {leftAccessorySvg && <LeftAccessory src={leftAccessorySvg} alt=\"\" />}\n          {children}\n        </ContentContainer>\n      )}\n\n      {svg &&\n        <SVGOverlay \n          src={svg} \n          onLoad={() => setSvgLoaded(true)} \n          onError={() => setSvgLoaded(true)}\n        />\n      }\n    </BaseButton>\n  );\n};\n\nconst ContentContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n`;\n\nconst LeftAccessory = styled.img`\n  margin-top: -2px;\n  height: 28px;\n  width: 28px;\n`;\n\ninterface BaseButtonProps {\n  fullWidth?: boolean;\n  width?: number;\n  height?: number;\n  fontSize?: number;\n  bgColor?: string;\n  $disabled?: boolean;\n  $loading?: boolean;\n  onClick?: () => void;\n  children?: React.ReactNode;\n}\n\nconst BaseButton = styled.button<BaseButtonProps & { $svgLoaded: boolean }>`\n  width: ${({ fullWidth, width }) => fullWidth ? '100%' : width ? `${width}px` : 'auto'};\n  height: ${({ height }) => height}px;\n  background: ${({ bgColor }) => bgColor || '#df2e2d'};\n  box-shadow: inset -3px -6px 4px rgba(0, 0, 0, 0.16);\n  border-radius: 24px;\n  padding: 8px ${({ fullWidth }) => (fullWidth ? '0' : '24px')};\n  text-align: center;\n  color: white;\n  font-weight: 700;\n  font-size: ${({ fontSize }) => fontSize}px;\n  font-family: 'Graphik';\n  cursor: pointer;\n  display: inline-block;\n  transition: background 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\n  border: none;\n  position: relative;\n\n  &:hover:not([disabled]) {\n    background: #ca2221;\n  }\n\n  &:active:not([disabled]) {\n    background: #bc3035;\n    box-shadow: inset 0px -8px 0px rgba(0, 0, 0, 0.16);\n  }\n\n  ${({ $disabled }) => \n    $disabled && css`\n      opacity: 0.5;\n      cursor: not-allowed;\n      color: #6C757D;\n      background: #131A2A;\n    `\n  }\n\n  ${({ $loading }) => \n    $loading && css`\n      cursor: wait;\n      background: #df2e2d;\n    `\n  }\n\n  ${({ $svgLoaded }) => \n    !$svgLoaded && css`\n      background: transparent;\n    `\n  }\n`;\n\nconst SVGOverlay = styled.img`\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  height: 100%;\n  pointer-events: none;\n`;\n"
  },
  {
    "path": "client/src/components/common/Card.tsx",
    "content": "import styled from 'styled-components';\n\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport { colors } from '@theme/colors';\nimport useQuery from '@hooks/useQuery';\n\n\nconst StyledCard = styled.div<{ cursor: string }>`\n\tdisplay: flex;\n\tbackground-color: ${colors.container};\n\tbackground-size: auto 100%;\n\tbackground-position: right;\n\tbackground-repeat: no-repeat;\n\tbackground-origin: border-box;\n\n\tflex-direction: column;\n\tjustify-content: space-between;\n\ttext-decoration: none;\n\tcolor: ${({ theme }) => theme.neutral1};\n\tpadding: 32px;\n\theight: 228px;\n\tborder-radius: 24px;\n\tborder: 1px solid ${colors.defaultBorderColor};\n  cursor: ${({ cursor }) => cursor}};\n`\n\nconst TitleRow = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n`\n\nconst CardTitle = styled.div`\n  font-size: 28px;\n  line-height: 36px;\n  font-weight: 535;\n  color: ${colors.buttonRed};\n`\n\nconst CardDescription = styled.div`\n  display: flex;\n  flex-direction: column;\n  font-size: 20px;\n  line-height: 28px;\n  color: white;\n  padding: 0 40px 0 0;\n  max-width: 480px;\n`\n\nconst CardCTA = styled.div`\n  color: ${colors.buttonRed};\n  font-weight: 535;\n  font-size: 20px;\n  line-height: 28px;\n  margin: 24px 0px 0px;\n  transition: opacity 250ms ease 0s;\n  &:hover {\n    opacity: 0.6;\n  }\n`\n\nconst Icon = styled(SVGIconThemed)`\n  width: 20px;\n  height: 20px;\n`;\n\nconst Card = ({\n  title,\n  description,\n  icon,\n  cta,\n  navigateTo,\n}: {\n  title: string\n  description: string\n  icon?: string\n  cta?: string\n  navigateTo?: string\n}) => {\n  const { navigateWithQuery } = useQuery()\n\n  return (\n\t\t<StyledCard\n      cursor={navigateTo ? 'pointer' : 'normal'}\n      onClick={() =>\n        navigateTo\n          ? (navigateTo.startsWith('http') ? window.open(navigateTo, '_blank') : navigateWithQuery(navigateTo))\n          : null\n      }\n    >\n\t\t\t<TitleRow>\n\t\t\t\t<CardTitle>{title}</CardTitle>\n\t\t\t\t{icon ? <Icon icon={icon} /> : null}\n\t\t\t</TitleRow>\n\t\t\t<CardDescription>\n\t\t\t\t{description}\n\t\t\t</CardDescription>\n      <CardCTA>\n        {cta || ''}\n      </CardCTA>\n\t\t</StyledCard>\n  )\n}\n\nexport default Card\n"
  },
  {
    "path": "client/src/components/common/Checkbox.tsx",
    "content": "import React from 'react';\nimport Checkbox from \"@mui/joy/Checkbox\";\n\n\ninterface CustomCheckboxProps {\n  checked: boolean;\n  onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const CustomCheckbox: React.FC<CustomCheckboxProps> = ({\n  checked,\n  onChange,\n}) => {\n  return (\n    <Checkbox\n      size=\"sm\"\n      color=\"primary\"\n      variant=\"plain\"\n      checked={checked}\n      onChange={onChange}\n    />\n  );\n};\n"
  },
  {
    "path": "client/src/components/common/ConnectButton.tsx",
    "content": "import React, { useReducer, useRef } from \"react\";\nimport styled from 'styled-components';\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\nimport { ENSName } from 'react-ens-name';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport { EthereumAvatar } from \"@components/Account/Avatar\";\nimport { Button } from '@components/common/Button';\nimport { AccountDropdown } from \"@components/Account/AccountDropdown\";\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport useMediaQuery from '@hooks/useMediaQuery';\nimport useAccount from '@hooks/useAccount';\nimport { formatAddress } from '@helpers/addressFormat';\nimport { alchemyMainnetEthersProvider } from \"index\";\n\n\ninterface CustomConnectButtonProps {\n  fullWidth?: boolean;\n  height?: number;\n  width?: number;\n}\n\nexport const CustomConnectButton: React.FC<CustomConnectButtonProps> = ({\n  fullWidth = false,\n  height = 48,\n  width = 112\n}) => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n  const isMobile = currentDeviceSize === 'mobile';\n\n  const {\n    accountDisplay,\n    authenticatedLogin,\n    isLoggedIn,\n    loggedInEthereumAddress,\n    authenticatedLogout\n  } = useAccount();\n\n  const { authenticated } = usePrivy();\n\n  /*\n   * State\n   */\n\n  const [isDropdownOppen, toggleDropdown] = useReducer((s) => !s, false)\n\n  const accountDropdownRef = useRef<HTMLDivElement>(null)\n  useOnClickOutside(accountDropdownRef, isDropdownOppen ? toggleDropdown : undefined)\n\n  /*\n   * Handlers\n   */\n\n  const onAccountLoginClick = () => {\n    if (authenticated) {\n      if (authenticatedLogout) {\n        authenticatedLogout();\n      };\n    } else {\n      if (authenticatedLogin) {\n        authenticatedLogin();\n      };\n    }\n  };\n\n  const onWrongNetworkLogout = () => {\n    if (authenticatedLogout) {\n      authenticatedLogout();\n    }\n  };\n\n  return (\n    <ConnectButton.Custom>\n      {({\n        chain,\n        authenticationStatus,\n        mounted,\n      }) => {\n        // Note: If your app doesn't use authentication, you\n        // can remove all 'authenticationStatus' checks\n        const ready = mounted && authenticationStatus !== 'loading';\n\n        return (\n          <div\n            {...(!ready && {\n              'style': {\n                width: '100%',\n                opacity: 0,\n                pointerEvents: 'none',\n                userSelect: 'none',\n              },\n            })}\n          >\n            {(() => {\n              if (!isLoggedIn) {\n                return (\n                  <Button\n                    fullWidth={fullWidth}\n                    width={width}\n                    onClick={onAccountLoginClick}\n                    height={height}\n                  >\n                    {isMobile ? 'Log In' : 'Log In'}\n                  </Button>\n                );\n              }\n\n              if (chain && chain.unsupported) {\n                return (\n                  <Button\n                    fullWidth={fullWidth}\n                    onClick={onWrongNetworkLogout}\n                    height={height}\n                  >\n                    Wrong Network\n                  </Button>\n                );\n              }\n\n              return (\n                <div style={{ display: 'flex', height: '36px' }}>\n                  <AccountContainer>\n                    {!isMobile && (\n                      <NetworkAndBridgeContainer>\n                        <NetworkSelector\n                          style={{ display: 'flex', alignItems: 'center' }}\n                        >\n                          {chain && chain.hasIcon && (\n                            <div\n                              style={{\n                                background: chain.iconBackground,\n                                width: 24,\n                                height: 24,\n                                borderRadius: 999,\n                                overflow: 'hidden',\n                              }}\n                            >\n                              {chain.iconUrl && (\n                                <img\n                                  alt={chain.name ?? 'Chain icon'}\n                                  src={chain.iconUrl}\n                                  style={{ width: 24, height: 24 }}\n                                />\n                              )}\n                            </div>\n                          )}\n                        </NetworkSelector>\n                      </NetworkAndBridgeContainer>\n                    )}\n\n                    <LoggedInBalanceAndAccount onClick={toggleDropdown}>\n                      <LoggedInButton>\n                        <EthereumAvatar address={loggedInEthereumAddress || ''} />\n                        <AccountDisplay>\n                          {isLoggedIn ? (\n                            accountDisplay\n                          ) : (\n                            <ENSName\n                              provider={alchemyMainnetEthersProvider}\n                              address={loggedInEthereumAddress || ''}\n                              customDisplay={(address) => formatAddress(address)}\n                            />\n                          )}\n                        </AccountDisplay>\n                      </LoggedInButton>\n                    </LoggedInBalanceAndAccount>\n                  </AccountContainer>\n\n                  {isDropdownOppen && (\n                    <AccountDropdown\n                      ref={accountDropdownRef}\n                      onOptionSelect={toggleDropdown}\n                     />\n                  )}\n                </div>\n              );\n            })()}\n          </div>\n        );\n      }}\n    </ConnectButton.Custom>\n  );\n};\n\nconst NetworkAndBridgeContainer = styled.div`\n  display: flex;\n  border-radius: 24px;\n  background: #1A1B1F;\n`;\n\nconst NetworkSelector = styled.button`\n  border: none;\n  background: #1A1B1F;\n  color: #ffffff;\n  padding: 6px 10px 6px 16px;\n  border-radius: 24px;\n\n  font-family: 'Graphik';\n  font-weight: 700;\n  color: #ffffff;\n  font-size: 16px;\n`;\n\nconst AccountContainer = styled.div`\n  display: flex;\n  border-radius: 24px;\n  background: #1A1B1F;\n`;\n\nconst LoggedInBalanceAndAccount = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst LoggedInButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: none;\n  background: #3A3B3F;\n  border-radius: 24px;\n  gap: 10px;\n  \n  letter-spacing: 0.75px;\n  color: #ffffff;\n  font-family: 'Graphik';\n  font-weight: 600;\n  font-size: 14px;\n  align-self: stretch;\n  padding: 0px 18px 0px 14px;\n  cursor: pointer;\n\n  &:hover:not([disabled]) {\n    background: #4A4B4F;\n  }\n\n  &:active:not([disabled]) {\n    background: #202124;\n    box-shadow: inset 0px -8px 0px rgba(0, 0, 0, 0.16);\n  }\n`;\n\nconst AccountDisplay = styled.div`\n  padding-top: 2px;\n`;\n"
  },
  {
    "path": "client/src/components/common/CopyButton.tsx",
    "content": "import React, { useState } from 'react';\nimport styled, { css } from 'styled-components/macro';\nimport { Check, Copy } from 'react-feather';\n\n\ninterface CopyButtonProps {\n  textToCopy: string;\n  size?: 'sm' | 'default';\n};\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({\n  textToCopy,\n  size = 'default'\n}) => {\n  /*\n   * State\n   */\n\n  const [copied, setCopied] = useState<boolean>(false);\n\n  /*\n   * Handlers\n   */\n\n  const copyToClipboard = (text: string) => {\n    navigator.clipboard.writeText(text).then(() => {\n      setCopied(true);\n\n      setTimeout(() => setCopied(false), 2000);\n    });\n  };\n\n  const handleCopyClick = () => {\n    if (!copied) {\n      copyToClipboard(textToCopy);\n    }\n  };\n\n  const iconSize = size === 'sm' ? 14 : 18;\n\n  return (\n    <IconBorder onClick={handleCopyClick} size={size}>\n      {copied ? <StyledCheck size={iconSize}/> : <StyledCopy size={iconSize}/>}\n    </IconBorder>\n  );\n};\n\nconst StyledCopy = styled(Copy)<{ size: number }>`\n  color: #FFF;\n  cursor: pointer;\n  ${({ size }) => `\n    height: ${size}px;\n    width: ${size}px;\n  `}\n`;\n\nconst StyledCheck = styled(Check)<{ size: number }>`\n  color: #FFF;\n  cursor: pointer;\n  ${({ size }) => `\n    height: ${size}px;\n    width: ${size}px;\n  `}\n`;\n\nconst IconBorder = styled.div<{ size: 'sm' | 'default' }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 50%;\n  ${({ size }) => css`\n    padding: ${size === 'sm' ? '0px' : '10px'};\n    ${size !== 'sm' && `\n      background-color: #3A3D44;\n      &:hover {\n        background-color: #4A4D54;\n      }\n    `}\n  `}\n`;\n"
  },
  {
    "path": "client/src/components/common/DragAndDropTextBox.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\nimport { useDragAndDrop } from '@hooks/useDragAndDrop';\nimport { Col } from \"@components/legacy/Layout\";\n\n\ntype Props = {\n\tonFileDrop: (file: File) => void;\n};\n\nexport const DragAndDropTextBox: React.FC<Props> = ({onFileDrop}) => {\n    const {\n\t\tdragging,\n\t\thandleDragEnter,\n\t\thandleDragLeave,\n\t\thandleDragOver,\n\t\thandleDrop,\n\t\thandleDragEnd,\n\t} = useDragAndDrop();\n\n\treturn (\n\t\t<DragAndDropTextBoxWrapper\n\t\t\tonDragEnter={handleDragEnter}\n\t\t\tonDragLeave={handleDragLeave}\n\t\t\tonDragOver={handleDragOver}\n\t\t\tonDragEnd={handleDragEnd}\n\t\t\tonDrop={(e) => handleDrop(e, onFileDrop)}\n\t\t>\n\t\t\t{dragging ? (\n\t\t\t\t<div>Drop here</div>\n\t\t\t) : (\n\t\t\t\t<div>Drop .eml file here</div>\n\t\t\t)}\n\t\t</DragAndDropTextBoxWrapper>\n\t);\n};\n\nconst DragAndDropTextBoxWrapper = styled(Col)`\n\theight: 28vh;\n\tborder-radius: 4px;\n\talign-items: center;\n\tjustify-content: center;\n\tborder: 2px dashed #ccc;\n\tbox-sizing: border-box;\n\tpadding: 2px;\n`;\n"
  },
  {
    "path": "client/src/components/common/Input.tsx",
    "content": "import React, { ChangeEvent } from \"react\";\nimport styled from 'styled-components';\n\nimport { colors } from '@theme/colors';\n\n\ninterface InputProps {\n  label: string;\n  name: string;\n  value?: string;\n  type?: string;\n  onChange: (event: ChangeEvent<HTMLInputElement>) => void;\n  onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n  placeholder?: string;\n  readOnly?: boolean;\n}\n\nexport const Input: React.FC<InputProps> = ({\n  label,\n  name,\n  value,\n  onChange,\n  onFocus,\n  onKeyDown,\n  placeholder,\n  type = \"text\",\n  readOnly = false,\n}: InputProps) => {\n  Input.displayName = \"Input\";\n\n  return (\n    <Container>\n      <LabelAndInputContainer>\n        <InputWrapper>\n          <StyledInput\n            type={type}\n            id={name}\n            placeholder={placeholder}\n            value={value}\n            onChange={onChange}\n            onFocus={onFocus}\n            onKeyDown={onKeyDown}\n            readOnly={readOnly}\n          />\n        </InputWrapper>\n      </LabelAndInputContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  padding: 12px 16px;\n  border-radius: 8px;\n  border: 1px solid ${colors.defaultBorderColor};\n  background-color: #131A2A;\n  gap: 8px;\n\n  &:focus-within {\n    border-color: #CED4DA;\n    border-width: 1px;\n  }\n`;\n\nconst LabelAndInputContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst InputWrapper = styled.div`\n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: stretch;\n`;\n\ninterface StyledInputProps {\n  readOnly?: boolean;\n}\n\nconst StyledInput = styled.input<StyledInputProps>`\n  width: 100%;\n  flex-grow: 1;\n  border: 0;\n  padding: 0;\n  color: #FFFFFF;\n  background-color: #131A2A;\n  font-size: 14px;\n  text-align: left;\n\n  &:focus {\n    box-shadow: none;\n    outline: none;\n  }\n\n  &:placeholder {\n    color: #6C757D;\n  }\n\n  &[type='number'] {\n    -moz-appearance: textfield;\n    &::-webkit-inner-spin-button,\n    &::-webkit-outer-spin-button {\n      -webkit-appearance: none;\n      margin: 0;\n    }\n  }\n\n  ${({ readOnly }) => \n    readOnly && `\n      pointer-events: none;\n    `\n  }\n`;\n"
  },
  {
    "path": "client/src/components/common/LabeledSwitch.tsx",
    "content": "import React from 'react';\nimport { Switch } from '@mui/material';\nimport styled from 'styled-components';\n\nimport QuestionHelper from '@components/common/QuestionHelper';\n\n\ninterface LabeledSwitchProps {\n  switchChecked: boolean;\n  onSwitchChange: (checked: boolean) => void;\n  checkedLabel?: string;\n  uncheckedLabel?: string;\n  helperText?: string;\n}\n\nexport const LabeledSwitch: React.FC<LabeledSwitchProps> = ({\n  switchChecked = true,\n  onSwitchChange,\n  checkedLabel = 'Checked Label',\n  uncheckedLabel = 'Unchecked Label',\n  helperText = 'Fill me out'\n}) => {\n  const handleSwitchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    onSwitchChange(event.target.checked);\n  };\n\n  return (\n    <Container>\n      <SwitchLabel>\n        {switchChecked ? checkedLabel : uncheckedLabel}\n      </SwitchLabel>\n      \n      <HelperContainer>\n        <QuestionHelper\n          text={helperText}\n        />\n      </HelperContainer>\n\n      <Switch\n        checked={switchChecked}\n        onChange={handleSwitchChange}\n        color={switchChecked ? 'primary' : 'secondary'}\n      />\n    </Container>\n  )\n};\n\nconst Container = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n`;\n\nconst SwitchLabel = styled.span`\n  color: '#888888';\n  padding-right: 4px;\n`;\n\nconst HelperContainer = styled.div`\n  padding-top: 4px;\n`;\n"
  },
  {
    "path": "client/src/components/common/NumberedStep.tsx",
    "content": "import styled from \"styled-components\";\n\nimport { CenterAllDiv, Row } from \"@components/legacy/Layout\";\n\n\nexport const NumberedStep: React.FC<{\n  step?: number;\n  children: React.ReactNode;\n}> = ({ step, children }) => {\n  return (\n    <Container>\n      {step !== undefined && (\n        <Label>\n          <span>{step}</span>\n        </Label>\n      )}\n      <NumberedStepText>{children}</NumberedStepText>\n    </Container>\n  );\n};\n\nconst Container = styled(Row)`\n  background: rgba(255, 255, 255, 0.05);\n  gap: 1rem;\n  border-radius: 12px;\n  padding: 12px 16px;\n  color: #fff;\n  line-height: 1.4;\n  font-size: 15px;\n`;\n\nconst Label = styled(CenterAllDiv)`\n  background: rgba(255, 255, 255, 0.2);\n  border-radius: 4px;\n  width: 24px;\n  height: 24px;\n  min-width: 24px;\n  border: 1px solid rgba(255, 255, 255, 0.3);\n`;\n\nconst NumberedStepText = styled.span`\n  margin: 4px;\n`;\n"
  },
  {
    "path": "client/src/components/common/Popover.tsx",
    "content": "import { Options, Placement } from '@popperjs/core';\nimport Portal from '@reach/portal';\nimport React, { CSSProperties, useCallback, useMemo, useState } from 'react';\nimport { usePopper } from 'react-popper';\nimport styled from 'styled-components/macro';\n\nimport { Z_INDEX } from '@theme/zIndex';\nimport useInterval from '@hooks/useInterval';\n\n\nconst PopoverContainer = styled.div<{ show: boolean }>`\n  z-index: ${Z_INDEX.popover};\n  pointer-events: none;\n  visibility: ${(props) => (props.show ? 'visible' : 'hidden')};\n  opacity: ${(props) => (props.show ? 1 : 0)};\n  transition: visibility 150ms linear, opacity 150ms linear;\n  color: ${({ theme }) => theme.textSecondary};\n`\n\nconst ReferenceElement = styled.div`\n  display: inline-block;\n  height: inherit;\n`\n\nconst Arrow = styled.div`\n  width: 8px;\n  height: 8px;\n  z-index: 9998;\n\n  ::before {\n    position: absolute;\n    width: 8px;\n    height: 8px;\n    box-sizing: border-box;\n    z-index: 9998;\n\n    content: '';\n    border: 1px solid ${({ theme }) => theme.backgroundInteractive};\n    transform: rotate(45deg);\n    background: ${({ theme }) => theme.backgroundSurface};\n  }\n\n  &.arrow-top {\n    bottom: -4px;\n    ::before {\n      border-top: none;\n      border-left: none;\n    }\n  }\n\n  &.arrow-bottom {\n    top: -4px;\n    ::before {\n      border-bottom: none;\n      border-right: none;\n    }\n  }\n\n  &.arrow-left {\n    right: -4px;\n\n    ::before {\n      border-bottom: none;\n      border-left: none;\n    }\n  }\n\n  &.arrow-right {\n    left: -4px;\n    ::before {\n      border-right: none;\n      border-top: none;\n    }\n  }\n`\n\nexport interface PopoverProps {\n  content: React.ReactNode\n  show: boolean\n  children?: React.ReactNode\n  placement?: Placement\n  offsetX?: number\n  offsetY?: number\n  hideArrow?: boolean\n  showInline?: boolean\n  style?: CSSProperties\n}\n\nexport default function Popover({\n  content,\n  show,\n  children,\n  placement = 'auto',\n  offsetX = 8,\n  offsetY = 8,\n  hideArrow = false,\n  showInline = false,\n  style,\n}: PopoverProps) {\n  const [referenceElement, setReferenceElement] = useState<HTMLDivElement | null>(null)\n  const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null)\n  const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null)\n\n  const options: Options = useMemo(\n    () => ({\n      placement,\n      strategy: 'fixed',\n      modifiers: [\n        { name: 'offset', options: { offset: [offsetX, offsetY] } },\n        { name: 'arrow', options: { element: arrowElement } },\n        { name: 'preventOverflow', options: { padding: 8 } },\n      ],\n    }),\n    [placement, offsetX, offsetY, arrowElement]\n  )\n\n  const { styles, update, attributes } = usePopper(referenceElement, popperElement, options)\n\n  const updateCallback = useCallback(() => {\n    update && update()\n  }, [update])\n  useInterval(updateCallback, show ? 100 : null)\n\n  return showInline ? (\n    <PopoverContainer show={show}>{content}</PopoverContainer>\n  ) : (\n    <>\n      <ReferenceElement style={style} ref={setReferenceElement as any}>\n        {children}\n      </ReferenceElement>\n      <Portal>\n        <PopoverContainer show={show} ref={setPopperElement as any} style={styles.popper} {...attributes.popper}>\n          {content}\n          {!hideArrow && (\n            <Arrow\n              className={`arrow-${attributes.popper?.['data-popper-placement'] ?? ''}`}\n              ref={setArrowElement as any}\n              style={styles.arrow}\n              {...attributes.arrow}\n            />\n          )}\n        </PopoverContainer>\n      </Portal>\n    </>\n  )\n}\n"
  },
  {
    "path": "client/src/components/common/QuestionHelper.tsx",
    "content": "import { ReactNode, useCallback, useState } from 'react';\nimport { HelpCircle } from 'react-feather';\nimport styled from 'styled-components/macro';\n\nimport Tooltip from '@components/common/Tooltip';\n\n\nexport default function QuestionHelper({ text, size = 'sm' }: { text: ReactNode; size?: 'sm' | 'medium' }) {\n  const [show, setShow] = useState<boolean>(false)\n\n  const open = useCallback(() => setShow(true), [setShow])\n  const close = useCallback(() => setShow(false), [setShow])\n  return (\n    <Tooltip text={text} show={show}>\n      <QuestionWrapper onClick={open} onMouseEnter={open} onMouseLeave={close} size={size}>\n        <QuestionMark size={size}>\n          <HelpCircle size={size === 'sm' ? 16 : 22} />\n        </QuestionMark>\n      </QuestionWrapper>\n    </Tooltip>\n  )\n}\n\nconst QuestionWrapper = styled.div<{ size: 'sm' | 'medium' }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0px;\n  width: ${({ size }) => (size === 'sm' ? '18px' : '24px')};\n  height: ${({ size }) => (size === 'sm' ? '18px' : '24px')};\n  border: none;\n  background: none;\n  outline: none;\n  cursor: default;\n  border-radius: ${({ size }) => (size === 'sm' ? '36px' : '42px')};\n  font-size: ${({ size }) => (size === 'sm' ? '12px' : '16px')};\n\n  :hover,\n  :focus {\n    opacity: 0.7;\n  }\n`;\n\nconst QuestionMark = styled.span<{ size: 'sm' | 'medium' }>`\n  display: flex;\n  font-size: ${({ size }) => (size === 'sm' ? '14px' : '16px')};\n  align-items: center;\n  justify-content: center;\n  color: ${({ theme }) => theme.textSecondary};\n`;\n"
  },
  {
    "path": "client/src/components/common/ReadOnlyInput.tsx",
    "content": "import styled from \"styled-components\";\n\nimport { Col } from \"@components/legacy/Layout\";\n\n\nexport const ReadOnlyInput: React.FC<{\n  label: string;\n  value: any;\n}> = ({ label, value }) => {\n  return (\n    <InputContainer>\n      <label>\n        {label}\n      </label>\n      <Input value={value} placeholder={label} readOnly={true} />\n    </InputContainer>\n  );\n};\n\nconst InputContainer = styled(Col)`\n  gap: 12px;\n  margin: 4px;\n`;\n\nconst Input = styled.input`\n  border: 1px solid rgba(255, 255, 255, 0.4);\n  background: rgba(0, 0, 0, 0.3);\n  border-radius: 4px;\n  padding: 8px 12px;\n  height: 32px;\n  display: flex;\n  align-items: center;\n  color: #fff;\n  font-size: 16px;\n  user-select: none;\n  -webkit-user-select: none;\n  pointer-events: none;\n  opacity: 0.6;\n`;\n"
  },
  {
    "path": "client/src/components/common/SingleLineInput.tsx",
    "content": "import styled from \"styled-components\";\n\nimport { Col } from \"@components/legacy/Layout\";\n\n\nexport const SingleLineInput: React.FC<{\n  label: string;\n  value: any;\n  placeholder: string;\n  onChange: (e: any) => void;\n  readOnly?: boolean;\n  error?: string | null;\n}> = ({\n  label,\n  value,\n  placeholder,\n  onChange,\n  readOnly = false,\n  error = null,\n}) => {\n  return (\n    <InputContainer>\n      <label\n        style={{\n          color: \"rgba(255, 255, 255, 0.8)\",\n        }}\n      >\n        {label}\n      </label>\n      <Input\n        onChange={onChange}\n        value={value}\n        placeholder={placeholder}\n        readOnly={readOnly}\n        hasError={!!error}\n      />\n      { error &&\n        <ErrorMessage>\n          {error}\n        </ErrorMessage>\n      }\n    </InputContainer>\n  );\n};\n\nconst InputContainer = styled(Col)`\n  gap: 8px;\n`;\n\nconst Input = styled.input<{ hasError: boolean }>`\n  border: 1px solid ${props => props.hasError ? 'red' : 'rgba(255, 255, 255, 0.4)'};\n  background: rgba(0, 0, 0, 0.3);\n  border-radius: 4px;\n  padding: 8px 12px;\n  height: 32px;\n  display: flex;\n  align-items: center;\n  color: #fff;\n  font-size: 16px;\n  transition: all 0.2s ease-in-out;\n\n  &:hover {\n    border: 1px solid rgba(255, 255, 255, 0.8);\n  }\n`;\n\nconst ErrorMessage = styled.div`\n  color: red;\n  font-size: 12px;\n  margin-top: 4px;\n`;\n"
  },
  {
    "path": "client/src/components/common/Spinner.tsx",
    "content": "import React from \"react\";\nimport styled, { css, keyframes } from 'styled-components/macro';\n\n\ninterface SpinnerProps extends React.ComponentPropsWithoutRef<'svg'> {\n  color?: string;\n  size?: number;\n}\n\nconst Spinner: React.FC<SpinnerProps> = ({ color = '#FFFFFF', size = 24, ...props }) => (\n  <SpinnerSVG color={color} width={size} height={size} viewBox=\"0 0 24 24\" {...props}>\n    <path d=\"M10.72,19.9a8,8,0,0,1-6.5-9.79A7.77,7.77,0,0,1,10.4,4.16a8,8,0,0,1,9.49,6.52A1.54,1.54,0,0,0,21.38,12h.13a1.37,1.37,0,0,0,1.38-1.54,11,11,0,1,0-12.7,12.39A1.54,1.54,0,0,0,12,21.34h0A1.47,1.47,0,0,0,10.72,19.9Z\"></path>\n  </SpinnerSVG>\n);\n\nconst rotate = keyframes`\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n`;\n\nconst SpinnerCss = css`\n  animation: 0.7s ${rotate} linear infinite;\n`;\n\nexport const SpinnerSVG = styled.svg`\n  ${SpinnerCss}\n\n  path {\n    fill: ${({ color }) => color};\n  }\n`;\n\nexport default Spinner\n"
  },
  {
    "path": "client/src/components/common/TextButton.tsx",
    "content": "import React from \"react\";\nimport styled, { css } from 'styled-components';\n\nimport Spinner from \"@components/common/Spinner\";\n\n\ntype iconType = \"send\" | \"chevronRight\" | \"trash\" | \"userX\" | \"logout\" | \"refresh\";\n\ninterface TextButtonProps {\n  fullWidth?: boolean;\n  title?: string;\n  height?: number;\n  disabled?: boolean;\n  loading?: boolean;\n  onClick?: () => void;\n  children?: React.ReactNode;\n  icon?: iconType;\n}\n\nexport const TextButton: React.FC<TextButtonProps> = ({\n  fullWidth = false,\n  title = '',\n  height = 48,\n  disabled = false,\n  loading = false,\n  onClick,\n  children,\n  icon\n}) => {\n  \n  /*\n   * Component\n   */\n\n  return (\n    <Container\n      fullWidth={fullWidth}\n      height={height}\n      disabled={disabled || loading}\n      onClick={onClick}\n    >\n      <ButtonAndLabelContainer>\n        {loading ? <Spinner /> : (\n          <>\n            {title && <span>{title}</span>}\n            {children}\n          </>\n        )}\n      </ButtonAndLabelContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.button<TextButtonProps>`\n  width: ${({ fullWidth }) => (fullWidth ? '100%' : 'auto')};\n  height: ${({ height }) => height}px;\n  background: transparent;\n  border: none;\n  padding: 1px 14px 0px 14px;\n  color: white;\n  cursor: pointer;\n  transition: color 0.2s ease-in-out;\n  text-decoration: underline;\n\n  &:hover:not([disabled]) {\n    color: #adb5bd;\n  }\n\n  &:active:not([disabled]) {\n    color: #343a40;\n  }\n\n  ${({ disabled }) => \n    disabled && css`\n      opacity: 0.5;\n      cursor: not-allowed;\n      &:hover, &:active {\n        color: white;\n        text-decoration: none;\n      }\n    `\n  }\n\n  ${({ loading }) => \n    loading && css`\n      cursor: wait;\n    `\n  }\n`;\n\nconst ButtonAndLabelContainer = styled.div`\n  display: flex;\n  align-items: center;\n  font-size: 16px;\n  font-family: 'Arial', sans-serif;\n  font-weight: 400;\n  text-align: center;\n  color: inherit;\n  gap: 8px;\n`;"
  },
  {
    "path": "client/src/components/common/Tooltip.tsx",
    "content": "import { PropsWithChildren, ReactNode, useEffect, useState } from 'react';\nimport styled from 'styled-components/macro';\n\nimport noop from '@helpers/noop';\nimport Popover, { PopoverProps } from '@components/common/Popover';\nimport { colors } from '@theme/colors';\n\n\nexport enum TooltipSize {\n  Small = '256px',\n  Large = '400px',\n}\n\nconst getPaddingForSize = (size: TooltipSize) => {\n  switch (size) {\n    case TooltipSize.Small:\n      return '12px'\n    case TooltipSize.Large:\n      return '16px 20px'\n  }\n}\n\nconst TooltipContainer = styled.div<{ size: TooltipSize }>`\n  max-width: ${({ size }) => size};\n  width: calc(100vw - 16px);\n  cursor: default;\n  padding: ${({ size }) => getPaddingForSize(size)};\n  pointer-events: auto;\n\n  color: ${({ theme }) => theme.textPrimary};\n  font-weight: 400;\n  font-size: 12px;\n  line-height: 16px;\n  word-break: break-word;\n\n  background-color: ${colors.container};\n  border-radius: 12px;\n  border: 1px solid ${colors.defaultBorderColor};\n`\n  \n  // box-shadow: 0 4px 8px 0 ${({ theme }) => transparentize(0.9, theme.shadow1)};\n\ntype TooltipProps = Omit<PopoverProps, 'content'> & {\n  text: ReactNode\n  open?: () => void\n  close?: () => void\n  size?: TooltipSize\n  disabled?: boolean\n  timeout?: number\n}\n\n// TODO(WEB-2024)\n// Migrate to MouseoverTooltip and move this component inline to MouseoverTooltip\nexport default function Tooltip({ text, open, close, disabled, size = TooltipSize.Small, ...rest }: TooltipProps) {\n  return (\n    <Popover\n      content={\n        text && (\n          <TooltipContainer size={size} onMouseEnter={disabled ? noop : open} onMouseLeave={disabled ? noop : close}>\n            {text}\n          </TooltipContainer>\n        )\n      }\n      {...rest}\n    />\n  )\n}\n\n// TODO(WEB-2024)\n// Do not pass through PopoverProps. Prefer higher-level interface to control MouseoverTooltip.\ntype MouseoverTooltipProps = Omit<PopoverProps, 'content' | 'show'> &\n  PropsWithChildren<{\n    text: ReactNode\n    size?: TooltipSize\n    disabled?: boolean\n    timeout?: number\n    placement?: PopoverProps['placement']\n    onOpen?: () => void\n  }>\n\nexport function MouseoverTooltip({ text, disabled, children, onOpen, timeout, ...rest }: MouseoverTooltipProps) {\n  const [show, setShow] = useState(false)\n  const open = () => {\n    setShow(true)\n    onOpen?.()\n  }\n  const close = () => setShow(false)\n\n  useEffect(() => {\n    if (show && timeout) {\n      const tooltipTimer = setTimeout(() => {\n        setShow(false)\n      }, timeout)\n\n      return () => {\n        clearTimeout(tooltipTimer)\n      }\n    }\n    return\n  }, [timeout, show])\n\n  return (\n    <Tooltip {...rest} open={open} close={close} disabled={disabled} show={show} text={disabled ? null : text}>\n      <div onMouseEnter={disabled ? noop : open} onMouseLeave={disabled || timeout ? noop : close}>\n        {children}\n      </div>\n    </Tooltip>\n  )\n}\n"
  },
  {
    "path": "client/src/components/common/TransactionButton.tsx",
    "content": "import React, { useState, useEffect } from \"react\";\n\nimport { Button } from \"@components/common/Button\";\nimport { TransactionStatus, TransactionStatusType } from \"@helpers/types/transactionStatus\";\n\n\ninterface TransactionButtonProps {\n  fullWidth?: boolean;\n  disabled?: boolean;\n  signTransactionStatus?: string;\n  mineTransactionStatus?: string;\n  defaultLabel?: string;\n  minedLabel: string;\n  defaultOnClick?: () => void;\n  minedOnClick?: () => void;\n}\n\nexport const TransactionButton: React.FC<TransactionButtonProps> = ({\n  fullWidth,\n  disabled,\n  signTransactionStatus,\n  mineTransactionStatus,\n  defaultLabel = \"Submit Transaction\",\n  minedLabel,\n  defaultOnClick,\n  minedOnClick,\n}) => {\n  /*\n   * State\n   */\n\n  const [ctaButtonTitle, setCtaButtonTitle] = useState(\"Submit\");\n\n  const [transactionStatus, setSubmitTransactionStatus] = useState<TransactionStatusType>(TransactionStatus.TRANSACTION_CONFIGURED);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    switch (signTransactionStatus) {\n      case 'idle':\n      case 'error':\n        setSubmitTransactionStatus(TransactionStatus.TRANSACTION_CONFIGURED);\n        break;\n\n      case 'loading':\n        setSubmitTransactionStatus(TransactionStatus.TRANSACTION_LOADING);\n        break;\n\n      case 'success':\n        // no-op\n        break;\n    }\n\n  }, [signTransactionStatus]);\n\n  useEffect(() => {\n    switch (mineTransactionStatus) {\n      case 'idle':\n      case 'error':\n        setSubmitTransactionStatus(TransactionStatus.TRANSACTION_CONFIGURED);\n        break;\n\n      case 'loading':\n        setSubmitTransactionStatus(TransactionStatus.TRANSACTION_MINING);\n        break;\n        \n      case 'success':\n        setSubmitTransactionStatus(TransactionStatus.TRANSACTION_MINED);\n        break;\n    }\n\n  }, [mineTransactionStatus]);\n\n  useEffect(() => {\n    switch (transactionStatus) {\n      case TransactionStatus.TRANSACTION_CONFIGURED:\n        setCtaButtonTitle(defaultLabel);\n        break;\n\n      case TransactionStatus.TRANSACTION_LOADING:\n        setCtaButtonTitle(\"Signing Transaction\");\n        break;\n\n      case TransactionStatus.TRANSACTION_MINING:\n        setCtaButtonTitle(\"Mining Transaction\");\n        break;\n        \n      case TransactionStatus.TRANSACTION_MINED:\n      default:\n        setCtaButtonTitle(minedLabel);\n        break;\n    }\n  }, [transactionStatus, defaultLabel, minedLabel]);\n\n  /*\n   * Helpers\n   */\n\n  const isDisabled = () => {\n    const disabledTransactionStatuses = [\n      TransactionStatus.TRANSACTION_LOADING,\n      TransactionStatus.TRANSACTION_MINING,\n    ];\n\n    return disabled || disabledTransactionStatuses.includes(transactionStatus);\n  };\n\n  const handleClick = () => {\n    if (transactionStatus === TransactionStatus.TRANSACTION_MINED && minedOnClick) {\n      minedOnClick();\n    } else if (defaultOnClick) {\n      defaultOnClick();\n    }\n  };\n\n  return (\n    <Button\n      fullWidth={fullWidth}\n      disabled={isDisabled()}\n      onClick={handleClick}\n    >\n      {ctaButtonTitle}\n    </Button>\n  );\n};\n"
  },
  {
    "path": "client/src/components/layouts/BottomNav/index.tsx",
    "content": "import React, { useState, useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { NavItem } from '../TopNav/NavItem';\nimport { Z_INDEX } from '@theme/zIndex';\n\n\nexport const BottomNav: React.FC<{ withoutLinks?: boolean }> = ({ withoutLinks }) => {\n  /*\n   * State\n   */\n\n  const location = useLocation();\n  const [selectedItem, setSelectedItem] = useState<string>('Landing');\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const routeName = location.pathname.split('/')[1];\n    setSelectedItem(routeName || 'Landing');\n  }, [location]);\n\n  return (\n    <Wrapper>\n      <NavItemWrapper>\n        <NavItem selectedItem={selectedItem} setSelectedItem={setSelectedItem} />\n      </NavItemWrapper>\n    </Wrapper>\n  )\n}\n\nconst Wrapper = styled.div`\n  display: flex;\n  width: 100%;\n  justify-content: center;\n  z-index: ${Z_INDEX.bottom_nav};\n  padding-bottom: 1.25rem;\n  position: fixed;\n  bottom: 0;\n`;\n\nconst NavItemWrapper = styled.div`\n  background: #0D111C;\n  border-radius: 16px;\n  border: 1px solid #98a1c03d;\n  padding: 16px 24px;\n`;"
  },
  {
    "path": "client/src/components/layouts/Column/index.tsx",
    "content": "import styled from 'styled-components/macro';\n\n\nexport const Column = styled.div<{\n  gap?: string\n}>`\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  gap: ${({ gap, theme }) => gap && theme.grids[gap]};\n`\nexport const ColumnCenter = styled(Column)`\n  width: 100%;\n  align-items: center;\n`\n\nexport const AutoColumn = styled.div<{\n  gap?: string\n  justify?: 'stretch' | 'center' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'space-between'\n  grow?: true\n}>`\n  display: grid;\n  grid-auto-rows: auto;\n  grid-row-gap: ${({ gap, theme }) => (gap && theme.grids) || gap};\n  justify-items: ${({ justify }) => justify && justify};\n  flex-grow: ${({ grow }) => grow && 1};\n`\n\nexport default Column\n"
  },
  {
    "path": "client/src/components/layouts/EnvironmentBanner.tsx",
    "content": "import React, { useState } from 'react';\nimport styled from \"styled-components\";\nimport Link from '@mui/material/Link';\nimport { X } from 'react-feather';\n\nimport { commonStrings } from '@helpers/strings';\n\n\nexport const EnvironmentBanner: React.FC = () => {\n  /*\n   * State\n   */\n\n  const storedBannerSettings = localStorage.getItem('dismissedEnvironmentBanner');\n\n  const [isEnvironmentBannerDismissed, setIsEnvironmentBannerDismissed] = useState<boolean>(\n    storedBannerSettings === 'true'\n  );\n  \n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    setIsEnvironmentBannerDismissed(true);\n\n    localStorage.setItem('dismissedEnvironmentBanner', 'true');\n  };\n  \n  /* \n   * Helpers\n   */\n\n  const bannerCopyForEnv = (env: string) => {\n    switch (env) {\n      case 'PRODUCTION':\n        return commonStrings.get('PRODUCTION_ENV_BANNER');\n  \n      case 'STAGING_TESTNET':\n        return commonStrings.get('STAGING_TESTNET_ENV_BANNER');\n  \n      case 'STAGING':\n        return commonStrings.get('STAGING_ENV_BANNER');\n      \n      default:\n        return commonStrings.get('LOCAL_ENV_BANNER');\n    }\n  };\n\n  const env = process.env.DEPLOYMENT_ENVIRONMENT || 'LOCAL';\n\n  const isEnvProduction = env === 'PRODUCTION';\n\n  /* \n   * Component\n   */\n\n  if (isEnvironmentBannerDismissed) {\n    return null;\n  }\n\n  return (\n    <Container>\n      <div style={{ flex: 0.1 }}/>\n\n      <StyledLabel style={{ flex: '1', margin: 'auto'}}>\n        {bannerCopyForEnv(env)}\n        {isEnvProduction && (\n          <Link href=\"https://docs.zkp2p.xyz/developer/security#risks\" color=\"inherit\" target=\"_blank\">\n            Review Risks\n          </Link>\n        )}\n      </StyledLabel>\n\n      <StyledButton onClick={handleOverlayClick}>\n        <StyledX/>\n      </StyledButton>\n    </Container>\n  );\n}\n\nconst Container = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  position: relative;\n  align-items: center;\n  text-align: center;\n  padding: 10px 0px;\n  background-color: #df2e2d;\n`;\n\nconst StyledLabel = styled.span`\n  flex-grow: 1;\n  color: #ffffff;\n  font-size: 14px;\n  color: #FFFFFF;\n  font-weight: 600;\n`;\n\nconst StyledButton = styled.button`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  background: none;\n  border: none;\n  cursor: pointer;\n  padding: 0;\n  flex: 0.1;\n`;\n\nconst StyledX = styled(X)`\n  color: #FFFFFF;\n  width: 16px;\n  height: 16px;\n`;\n"
  },
  {
    "path": "client/src/components/layouts/MenuDropdown/index.tsx",
    "content": "import { useRef, useReducer } from 'react';\nimport { MoreHorizontal } from 'react-feather';\nimport { Link, useLocation } from 'react-router-dom';\nimport styled from \"styled-components\";\n\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport { CLIENT_VERSION } from '@helpers/constants';\nimport { ThemedText } from '@theme/text';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\nexport const MenuDropdown = () => {\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  const ref = useRef<HTMLDivElement>(null)\n  const location = useLocation();\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined)\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * Handler\n   */\n\n  const jumpToMedia = (url: string) => {\n    window.open(url, '_blank');\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper isMobile={isMobile} ref={ref}>\n      <NavButton onClick={toggleOpen}>\n        <StyledMoreHorizontal />\n      </NavButton>\n\n      {isOpen && (\n        <NavDropdown isMobile={isMobile}>\n          <NavDropdownItemContainer>\n            {isMobile && (\n              <NavDropdownItem as={Link} to=\"/deposits\" onClick={toggleOpen}>\n                <ThemedText.LabelSmall textAlign=\"left\">\n                  Deposit\n                </ThemedText.LabelSmall>\n              </NavDropdownItem>\n            )}\n\n            <NavDropdownItem as={Link} to={\"/withdraw\" + location.search} onClick={toggleOpen}>\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Withdraw\n              </ThemedText.LabelSmall>\n            </NavDropdownItem>\n\n            <NavDropdownItem as={Link} to={\"/tos\" + location.search} onClick={toggleOpen}>\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Terms of Service\n              </ThemedText.LabelSmall>\n            </NavDropdownItem>\n\n            <NavDropdownItem as={Link} to={\"/pp\" + location.search} onClick={toggleOpen}>\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Privacy Policy\n              </ThemedText.LabelSmall>\n            </NavDropdownItem>\n          </NavDropdownItemContainer>\n\n          <NavDropdownItem\n            href=\"https://dune.com/zkp2p/zkp2p\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Analytics ↗\n              </ThemedText.LabelSmall>\n          </NavDropdownItem>\n\n          <NavDropdownItem\n            href=\"https://docs.zkp2p.xyz/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Documentation ↗\n              </ThemedText.LabelSmall>\n          </NavDropdownItem>\n          \n          <NavDropdownItem\n            href=\"https://chromewebstore.google.com/detail/zkp2p-extension/ijpgccednehjpeclfcllnjjcmiohdjih\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Browser Extension ↗\n              </ThemedText.LabelSmall>\n          </NavDropdownItem>\n\n          <NavDropdownItem\n              href=\"https://v1.zkp2p.xyz/\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\">\n                <ThemedText.LabelSmall textAlign=\"left\">\n                  ZKP2P V1 PoC ↗\n                </ThemedText.LabelSmall>\n            </NavDropdownItem>\n\n          <IconRow>\n            <Icon\n              icon={'twitter'}\n              onClick={() => jumpToMedia('https://twitter.com/zkp2p')}\n            />\n\n            <Icon\n              icon={'github'}\n              onClick={() => jumpToMedia('https://github.com/zkp2p')}\n            />\n\n            <Icon\n              icon={'telegram'}\n              onClick={() => jumpToMedia('https://t.me/+XDj9FNnW-xs5ODNl')}\n            />\n\n            <VersionLabel>\n              v{CLIENT_VERSION}\n            </VersionLabel>\n          </IconRow>\n        </NavDropdown>\n      )}\n    </Wrapper>\n  )\n};\n\nconst Wrapper = styled.div<{isMobile?: boolean}>`\n  display: flex;\n  ${({ isMobile }) => isMobile ? '' : 'flex-direction: column'};\n  ${({ isMobile }) => isMobile ? '' : 'align-items: flex-start'};\n  position: relative;\n`;\n\nconst StyledMoreHorizontal = styled(MoreHorizontal)`\n  color: #FFF;\n  width: 24px;\n  height: 24px;\n`;\n\nconst NavButton = styled.div`\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 10;\n  padding-right: 8px;\n`;\n\nconst NavDropdown = styled.div<{isMobile?: boolean}>`\n  display: flex;\n  flex-direction: column;\n  width: 176px;\n  border-radius: 12px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.75rem 1.5rem;\n  background: #1B1B1B;\n  z-index: 20;\n  gap: 0.75rem;\n  color: #FFFFFF;\n\n  position: absolute;\n  ${({ isMobile }) => isMobile ? `\n    bottom: calc(100% + 28px);\n    top: auto;\n    right: -20px;\n  ` : `\n    top: calc(100% + 20px);\n    right: 0;\n  `}\n`;\n\nconst NavDropdownItemContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.75rem;\n  white-space: nowrap;\n`;\n\nconst NavDropdownItem = styled.a`\n  color: inherit;\n  text-decoration: none;\n  cursor: pointer;\n\n  &:hover {\n    text-decoration: underline;\n  }\n`;\n\nconst IconRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  gap: 1rem;\n  margin-top: 0.5rem;\n  align-items: center;\n`;\n\nconst Icon = styled(SVGIconThemed)`\n  width: 20px;\n  height: 20px;\n  cursor: pointer;\n  transition: opacity 0.2s ease-in-out;\n\n  &:hover {\n    opacity: 0.6;\n  }\n`;\n\nconst VersionLabel = styled.div`\n  font-size: 14px;\n  color: #FFFFFF;\n  opacity: 0.3;\n  text-align: left;\n`;\n"
  },
  {
    "path": "client/src/components/layouts/Row/index.tsx",
    "content": "import { Box } from 'rebass/styled-components';\nimport styled from 'styled-components/macro';\n\nconst Row = styled(Box)<{\n  width?: string\n  align?: string\n  justify?: string\n  padding?: string\n  border?: string\n  borderRadius?: string\n  gap?: string\n}>`\n  width: ${({ width }) => width ?? '100%'};\n  display: flex;\n  padding: 0;\n  align-items: ${({ align }) => align ?? 'center'};\n  justify-content: ${({ justify }) => justify ?? 'flex-start'};\n  padding: ${({ padding }) => padding};\n  border: ${({ border }) => border};\n  border-radius: ${({ borderRadius }) => borderRadius};\n  gap: ${({ gap }) => gap};\n`;\n\nexport const RowBetween = styled(Row)`\n  justify-content: space-between;\n`;\n\nexport const TitleCenteredRow = styled(Row)`\n  justify-content: space-between;\n\n  & > * {\n    flex: 1;\n    display: flex;\n    align-items: center;\n  }\n\n  & > *:first-child {\n    justify-content: flex-start;\n  }\n\n  & > *:last-child {\n    justify-content: flex-end;\n  }\n`;\n\nexport const RowFlat = styled.div`\n  display: flex;\n  align-items: flex-end;\n`;\n\nexport const AutoRow = styled(Row)<{ gap?: string; justify?: string }>`\n  flex-wrap: wrap;\n  margin: ${({ gap }) => gap && `-${gap}`};\n  justify-content: ${({ justify }) => justify && justify};\n\n  & > * {\n    margin: ${({ gap }) => gap} !important;\n  }\n`;\n\nexport const RowFixed = styled(Row)<{ gap?: string; justify?: string }>`\n  width: fit-content;\n  margin: ${({ gap }) => gap && `-${gap}`};\n`;\n\nexport default Row;\n"
  },
  {
    "path": "client/src/components/layouts/TopNav/NavItem.tsx",
    "content": "import { Link, useLocation } from \"react-router-dom\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { MenuDropdown } from \"@components/layouts/MenuDropdown\";\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\ninterface NavItemProps {\n  vertical?: boolean;\n  selectedItem: string;\n  setSelectedItem: (item: string) => void;\n}\n\nexport const NavItem: React.FC<NavItemProps> = ({ \n  vertical = false,\n  selectedItem,\n  setSelectedItem\n}) => {\n  const currentDeviceSize = useMediaQuery();\n  const location = useLocation();\n  const searchParams = location.search;\n\n  const mobileNavigationItems = [\n    {\n      name: 'Swap',\n      routeName: 'swap',\n      href: '/swap',\n    },\n    {\n      name: 'Send',\n      routeName: 'send',\n      href: '/send',\n    },\n    {\n      name: 'Liquidity',\n      routeName: 'liquidity',\n      href: '/liquidity',\n    },\n  ];\n\n  const desktopNavigationItems = [\n    ...mobileNavigationItems,\n    {\n      name: 'Deposit',\n      routeName: 'deposits',\n      href: '/deposits',\n    },\n  ];\n\n  const navigationItems = currentDeviceSize === 'mobile' ? mobileNavigationItems : desktopNavigationItems;\n\n  return (\n    <HeaderLinksBox vertical={vertical}>\n      {navigationItems.map((item) => (\n        <StyledLink\n          key={item.name}\n          to={item.href + searchParams}\n          onClick={() => setSelectedItem(item.name)}\n          selected={selectedItem === item.routeName}\n        >\n          {item.name}\n        </StyledLink>\n      ))}\n\n      <MenuDropdown />\n    </HeaderLinksBox>\n  );\n};\n\nconst HeaderLinksBox = styled.div<{ vertical: boolean }>`\n  display: flex;\n  font-weight: 700;\n  font-size: 16px;\n  line-height: 24px;\n  flex-direction: ${props => props.vertical ? 'column' : 'row'};\n`;\n\nconst StyledLink = styled(Link)<{ selected: boolean }>`\n  position: relative;\n  display: inline-flex;\n  margin-right: 24px;\n  margin-bottom: 4px;\n  text-decoration: none;\n  color: inherit;\n  cursor: pointer;\n\n  &:last-child {\n    margin-right: 0;\n  }\n\n  ${props => props.selected && css`\n    &::after {\n      content: '';\n      position: absolute;\n      width: 32px;\n      height: 4px;\n      background: white;\n      bottom: calc(50% - 22px);\n      left: calc(50% - 16px);\n      border-radius: 8px;\n    }\n  `}\n\n  @media (max-width: 425px) {\n    &.nav-item-sub {\n      position: relative;\n      display: inline-flex;\n      line-height: 24px;\n      margin-bottom: 12px;\n      padding-bottom: 16px;\n\n      ${props => props.selected && css`\n        &::after {\n          content: '';\n          position: absolute;\n          width: 40px;\n          height: 6px;\n          background: white;\n          bottom: 0px;\n          left: calc(50% - 20px);\n          border-radius: 11px;\n        }\n      `}\n    }\n  }\n`;\n"
  },
  {
    "path": "client/src/components/layouts/TopNav/index.tsx",
    "content": "import React, { useState, useEffect } from 'react';\nimport { Link, useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport { NavItem } from \"@components/layouts/TopNav/NavItem\";\nimport { CustomConnectButton } from \"@components/common/ConnectButton\";\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\nexport const TopNav: React.FC<{ withoutLinks?: boolean }> = ({ withoutLinks }) => {\n  /*\n   * Context\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  /*\n   * State\n   */\n\n  const location = useLocation();\n  const [selectedItem, setSelectedItem] = useState<string>('Landing');\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const routeName = location.pathname.split('/')[1];\n    setSelectedItem(routeName || 'Landing');\n  }, [location]);\n\n  /*\n   * Component\n   */\n\n  if (currentDeviceSize === 'mobile') {\n    return (\n      <NavBar>\n        {withoutLinks ? (\n          <NavBarCentered>\n            <Logo size={48} to=\"/\" onClick={() => setSelectedItem('Landing')}>\n              <img src={`${process.env.PUBLIC_URL}/logo512.png`} alt=\"logo\" />\n            </Logo>\n          </NavBarCentered>\n        ) : (\n          <LogoAndNavItems>\n            <Logo to=\"/\" onClick={() => setSelectedItem('Landing')}>\n              <img src={`${process.env.PUBLIC_URL}/logo512.png`} alt=\"logo\" />\n            </Logo>\n          </LogoAndNavItems>\n        )}\n        \n        <LoginMenuContainer>\n          <CustomConnectButton height={40}/>\n        </LoginMenuContainer>\n      </NavBar>\n    );\n  } else {\n    return (\n      <NavBar>\n        {withoutLinks ? (\n          <NavBarCentered>\n            <Logo size={48} to=\"/\" onClick={() => setSelectedItem('Landing')}>\n              <img src={`${process.env.PUBLIC_URL}/logo512.png`} alt=\"logo\" />\n            </Logo>\n          </NavBarCentered>\n        ) : (\n          <LogoAndNavItems>\n            <Logo to=\"/\" onClick={() => setSelectedItem('Landing')}>\n              <img src={`${process.env.PUBLIC_URL}/logo512.png`} alt=\"logo\" />\n            </Logo>\n\n            { currentDeviceSize === 'laptop' && (\n              <NavItem selectedItem={selectedItem} setSelectedItem={setSelectedItem} />\n            )}\n          </LogoAndNavItems>\n        )}\n\n        {!withoutLinks && <CustomConnectButton height={40} />}\n      </NavBar>\n    );\n  }\n};\n\nconst NavBarCentered = styled.div`\n  display: flex;\n  width: 100vw;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst NavBar = styled.nav`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1.5rem 1.75rem 1.75rem 1.5rem; \n\n  @media (min-width: 600px) {\n    padding: 28px;\n  }\n`;\n\nconst Logo = styled(Link)<{ size?: number }>`\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  color: #ffffff;\n  text-decoration: none;\n  font-size: 1.2rem;\n\n  img {\n    width: ${({ size }) => size || 32}px;\n    height: ${({ size }) => size || 32}px;\n    object-fit: cover;\n  }\n`;\n\nconst LoginMenuContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  gap: 1rem;\n`;\n\nconst LogoAndNavItems = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 2rem;\n`;\n"
  },
  {
    "path": "client/src/components/legacy/LabeledTextArea.tsx",
    "content": "import _ from \"lodash\";\nimport React, { CSSProperties } from \"react\";\nimport styled from \"styled-components\";\n\nimport { Col } from \"@components/legacy/Layout\";\n\n\nexport const LabeledTextArea: React.FC<{\n  style?: CSSProperties;\n  className?: string;\n  label: string;\n  value: string;\n  warning?: string;\n  warningColor?: string;\n  disabled?: boolean;\n  disabledReason?: string;\n  secret?: boolean;\n  placeholder?: string;\n  height?: string;\n  onChange?: React.ChangeEventHandler<HTMLTextAreaElement>;\n}> = ({\n  style,\n  warning,\n  warningColor,\n  disabled,\n  disabledReason,\n  label,\n  value,\n  onChange,\n  className,\n  secret,\n  placeholder,\n  height = '16vh'\n}) => {\n  return (\n    <LabeledTextAreaContainer\n      className={_.compact([\"labeledTextAreaContainer\", className]).join(\" \")}\n      height={height}\n    >\n      <Label isEmpty={!label}>{label}</Label>\n      {warning && (\n        <span className=\"warning\" style={{ color: warningColor }}>\n          {warning}\n        </span>\n      )}\n      <TextArea\n        style={style}\n        aria-label={label} \n        title={disabled ? disabledReason : \"\"}\n        placeholder={placeholder}\n        disabled={disabled}\n        value={value}\n        onChange={onChange}\n      />\n\n      {secret && (\n        <div className=\"secret\">Hover to reveal public info sent to chain</div>\n      )}\n    </LabeledTextAreaContainer>\n  );\n};\n\nconst Label = styled.label<{ isEmpty: boolean }>`\n  color: rgba(255, 255, 255, 0.8);\n  padding-bottom: ${(props) => (props.isEmpty ? '0' : '10px')};\n  padding-left: 8px;\n`;\n\nconst LabeledTextAreaContainer = styled(Col)<{ height: string }>`\n  height: ${(props) => props.height};\n  border-radius: 4px;\n  position: relative;\n\n  & .warning {\n    color: #bd3333;\n    font-size: 80%;\n  }\n\n  .secret {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    background: #171717;\n    border: 1px dashed rgba(255, 255, 255, 0.5);\n    color: rgba(255, 255, 255, 0.8);\n    user-select: none;\n    pointer-events: none;\n    opacity: 0.95;\n    justify-content: center;\n    display: flex;\n    align-items: center;\n    transition: opacity 0.3s ease-in-out;\n  }\n\n  &:hover .secret,\n  & :focus + .secret {\n    opacity: 0;\n  }\n`;\n\nconst TextArea = styled.textarea`\n  border: 1px solid rgba(255, 255, 255, 0.3);\n  background: rgba(0, 0, 0, 0.3);\n  border-radius: 4px;\n  height: 480px;\n\tpadding: 16px;\n\ttransition: all 0.2s ease-in-out;\n\tresize: none;\n\n  &:hover {\n\t\tborder: 1px solid rgba(255, 255, 255, 0.8);\n  }\n`;\n"
  },
  {
    "path": "client/src/components/legacy/Layout.tsx",
    "content": "import styled from \"styled-components\";\n\n\nexport const Row = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nexport const Col = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nexport const RowSpaceBetween = styled(Row)`\n  justify-content: space-between;\n`;\n\nexport const CenterAllDiv = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nexport const Header = styled.h2`\n  font-weight: 600;\n  color: #fff;\n  font-size: 2.25rem;\n  line-height: 2.5rem;\n  letter-spacing: -0.02em;\n  margin-top: 0;\n`;\n\nexport const SubHeader = styled(Header)`\n  font-size: 1.7em;\n  color: rgba(255, 255, 255, 0.9);\n`;\n\nexport const H3 = styled(SubHeader)`\n  font-size: 1.4em;\n  margin-bottom: -8px;\n`;\n"
  },
  {
    "path": "client/src/components/legacy/StyledLink.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components';\n\n\ninterface StyledLinkProps {\n  urlHyperlink: string;\n  label: string;\n}\n\nexport const StyledLink: React.FC<StyledLinkProps> = ({ \n  urlHyperlink,\n  label\n}) => {\n  return (\n    <ParentContainer>\n      <Link href={urlHyperlink} target=\"_blank\" rel=\"noopener noreferrer\">\n        {label}\n      </Link>\n    </ParentContainer>\n  );\n};\n\nconst ParentContainer = styled.div`\n  display: inline-block;\n`;\n\nconst Link = styled.a`\n  white-space: pre;\n  display: inline-block;\n  color: #1F95E2;\n  text-decoration: none;\n\n  &:hover {\n    text-decoration: underline;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/modals/ConfirmRelease.tsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport styled from 'styled-components';\nimport { ArrowLeft, Unlock } from 'react-feather';\nimport { useContractWrite, usePrepareContractWrite, useWaitForTransaction } from 'wagmi';\n\nimport { TransactionButton } from \"@components/common/TransactionButton\";\nimport { Overlay } from '@components/modals/Overlay';\nimport { commonStrings } from '@helpers/strings';\nimport { Abi } from '@helpers/types';\nimport { ThemedText } from '@theme/text'\nimport { colors } from '@theme/colors';\nimport useDeposits from '@hooks/venmo/useDeposits';\nimport useHdfcDeposits from '@hooks/hdfc/useDeposits';\nimport useGarantiDeposits from '@hooks/garanti/useDeposits';\nimport useRevolutDeposits from '@hooks/revolut/useDeposits';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useBalances from '@hooks/useBalance';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport { Z_INDEX } from '@theme/zIndex';\n\n\ninterface ConfirmReleaseProps {\n  onBackClick: () => void\n  intentHash: string;\n  amountUSDCToSend: string;\n}\n\nexport const ConfirmRelease: React.FC<ConfirmReleaseProps> = ({\n  onBackClick,\n  intentHash,\n  amountUSDCToSend,\n}) => {\n  /*\n   * Contexts\n   */\n\n  const {\n    venmoRampAddress,\n    venmoRampAbi,\n    hdfcRampAddress,\n    hdfcRampAbi,\n    garantiRampAddress,\n    garantiRampAbi,\n    revolutRampAddress,\n    revolutRampAbi,\n    blockscanUrl \n} = useSmartContracts();\n  const { refetchUsdcBalance } = useBalances();\n  const { PaymentPlatform, paymentPlatform } = usePlatformSettings();\n\n  const {\n    refetchDeposits: refetchVenmoDeposits\n  } = useDeposits();\n\n  const {\n    refetchDeposits: refetchHdfcDeposits\n  } = useHdfcDeposits();\n\n  const {\n    refetchDeposits: refetchGarantiDeposits\n  } = useGarantiDeposits();\n\n  const {\n    refetchDeposits: refetchRevolutDeposits\n  } = useRevolutDeposits();\n\n  /*\n   * State\n   */\n\n  const [transactionAddress, setTransactionAddress] = useState<string>(\"\");\n\n  const [releaseRampAddress, setReleaseRampAddress] = useState<string>(venmoRampAddress as any);\n  const [releaseRampAbi, setReleaseRampAbi] = useState<Abi>(venmoRampAbi as any);\n\n  /*\n   * Contract Writes\n   */\n\n  //\n  // releaseFundsToOnramper(bytes32 _intentHash)\n  //\n  const { config: writeReleaseConfig } = usePrepareContractWrite({\n    address: releaseRampAddress,\n    abi: releaseRampAbi,\n    functionName: 'releaseFundsToOnramper',\n    args: [\n      intentHash,\n    ],\n  });\n\n  const {\n    data: submitReleaseResult,\n    status: signReleaseTransactionStatus,\n    writeAsync: writeSubmitReleaseAsync,\n  } = useContractWrite(writeReleaseConfig);\n\n  const {\n    status: mineReleaseTransactionStatus,\n  } = useWaitForTransaction({\n    hash: submitReleaseResult ? submitReleaseResult.hash : undefined,\n    onSuccess(data: any) {\n      console.log('writeSubmitReleaseAsync successful: ', data);\n      \n      switch (paymentPlatform) {\n        case PaymentPlatform.VENMO:\n          refetchVenmoDeposits?.();\n          break;\n\n        case PaymentPlatform.HDFC:\n          refetchHdfcDeposits?.();\n          break;\n\n        case PaymentPlatform.GARANTI:\n          refetchGarantiDeposits?.();\n          break;\n\n        case PaymentPlatform.REVOLUT:\n          refetchRevolutDeposits?.();\n          break;\n\n        default:\n          throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n      }\n\n      refetchUsdcBalance?.();\n    },\n  });\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  }\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        if (venmoRampAddress && venmoRampAbi) {\n          setReleaseRampAddress(venmoRampAddress);\n          setReleaseRampAbi(venmoRampAbi);\n        }\n        break;\n\n      case PaymentPlatform.HDFC:\n        if (hdfcRampAddress && hdfcRampAbi) {\n          setReleaseRampAddress(hdfcRampAddress);\n          setReleaseRampAbi(hdfcRampAbi);\n        }\n        break;\n\n      case PaymentPlatform.GARANTI:\n        if (garantiRampAddress && garantiRampAbi) {\n          setReleaseRampAddress(garantiRampAddress);\n          setReleaseRampAbi(garantiRampAbi);\n        }\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        if (revolutRampAddress && revolutRampAbi) {\n          setReleaseRampAddress(revolutRampAddress);\n          setReleaseRampAbi(revolutRampAbi);\n        }\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    paymentPlatform,\n    venmoRampAddress,\n    venmoRampAbi,\n    hdfcRampAddress,\n    hdfcRampAbi,\n    garantiRampAddress,\n    garantiRampAbi,\n    revolutRampAddress,\n    revolutRampAbi\n  ]);\n\n  useEffect(() => {\n    if (submitReleaseResult?.hash) {\n      setTransactionAddress(submitReleaseResult.hash);\n    }\n  }, [submitReleaseResult])\n\n  /*\n   * Helpers\n   */\n\n  const ctaOnClick = async () => {\n    try {\n      await writeSubmitReleaseAsync?.();\n    } catch (error) {\n      console.log('writeSubmitReleaseAsync failed: ', error);\n    }\n  }\n\n  /*\n   * Component\n   */\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay />\n\n      <ModalContainer>\n        <TitleCenteredRow>\n          <div style={{ flex: 0.25 }}>\n            <button\n              onClick={handleOverlayClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            {'Release Funds'}\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.25 }}/>\n        </TitleCenteredRow>\n\n        <StyledUnlock />\n\n        <InstructionsContainer>\n          <InstructionsLabel>\n            { commonStrings.get('RELEASE_FUNDS_WARNING_ONE') }\n            { `${amountUSDCToSend} USDC` }\n            { commonStrings.get('RELEASE_FUNDS_WARNING_TWO') }\n          </InstructionsLabel>\n        </InstructionsContainer>\n\n        { transactionAddress?.length ? (\n          <Link\n            href={`${blockscanUrl}/tx/${transactionAddress}`}\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n              <ThemedText.LabelSmall textAlign=\"left\" paddingBottom={\"0.75rem\"}>\n                View on Explorer ↗\n              </ThemedText.LabelSmall>\n          </Link>\n        ) : null}\n\n        <TransactionButton\n          signTransactionStatus={signReleaseTransactionStatus}\n          mineTransactionStatus={mineReleaseTransactionStatus}\n          defaultLabel={\"Submit Transaction\"}\n          minedLabel={\"Go to Deposits\"}\n          defaultOnClick={ctaOnClick}\n          fullWidth={true}\n          minedOnClick={onBackClick}\n        />\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 472px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  align-items: center;\n  z-index: 20;\n  gap: 1.3rem;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TitleCenteredRow = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 1.5rem;\n  color: #FFF;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst StyledUnlock = styled(Unlock)`\n  width: 56px;\n  height: 56px;\n  color: #FFF;\n  padding: 0.5rem 0;\n`;\n\nconst InstructionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n  align-items: center;\n  padding: 0 1.75rem;\n  color: #FFF;\n`;\n\nconst InstructionsLabel = styled.div`\n  font-size: 16px;\n  text-align: center;\n  line-height: 1.5;\n`;\n\nconst Link = styled.a`\n  white-space: pre;\n  display: inline-block;\n  color: #1F95E2;\n  text-decoration: none;\n\n  &:hover {\n    text-decoration: underline;\n  }\n`;\n"
  },
  {
    "path": "client/src/components/modals/CurrencyRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\n\ninterface CurrencyRowProps {\n  platformCurrency: string;\n  isSelected: boolean;\n  flagSvg: string;\n  onRowClick: () => void;\n}\n\nexport const CurrencyRow: React.FC<CurrencyRowProps> = ({\n  platformCurrency,\n  isSelected,\n  flagSvg,\n  onRowClick,\n}: CurrencyRowProps) => {\n  CurrencyRow.displayName = \"CurrencyRow\";\n\n  return (\n    <Container\n      onClick={onRowClick}\n      selected={isSelected}\n    >\n      <DetailsContainer>\n        <FlagSvg src={flagSvg} />\n        <PlatformAndCurrencyLabel>\n          <PlatformLabel>{platformCurrency}</PlatformLabel>\n        </PlatformAndCurrencyLabel>\n      </DetailsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div<{ selected: boolean }>`\n  display: flex;\n  flex-direction: row;\n  height: 54px;\n  padding: 12px 24px 12px 20px;\n\n  ${({ selected }) => selected && `\n    background-color: #191D28;\n    box-shadow: none;\n  `}\n\n  ${({ selected }) => !selected && `\n    &:hover {\n      background-color: #191D28;\n      box-shadow: none;\n    }\n  `}\n`;\n\nconst DetailsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  flex: 1;\n`;\n\nconst PlatformAndCurrencyLabel = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-grow: 1;\n`;\n\nconst PlatformLabel = styled.div`\n  display: flex;\n  flex-direction: row;\n  padding-top: 2px;\n  color: #FFFFFF;\n`;\n\nconst FlagSvg = styled.img`\n  width: 36px;\n  height: 36px;\n  border-radius: 18px;\n`;"
  },
  {
    "path": "client/src/components/modals/Integration.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components';\nimport { X } from 'react-feather';\nimport { ENSName, AddressDisplayEnum } from 'react-ens-name';\n\nimport { Button } from '@components/common/Button';\nimport { Overlay } from '@components/modals/Overlay';\nimport { CopyButton } from '@components/common/CopyButton';\nimport { ThemedText } from '@theme/text';\nimport { ReceiveNetwork, ReceiveNetworkType, networksInfo } from '@helpers/types';\nimport { colors } from '@theme/colors';\nimport useQuery from '@hooks/useQuery';\nimport { alchemyMainnetEthersProvider } from 'index';\n\n\ninterface IntegrationProps {\n  onBackClick: () => void\n}\n\nexport const Integration: React.FC<IntegrationProps> = ({\n  onBackClick,\n}) => {\n  /*\n   * Contexts\n   */\n\n  const { queryParams } = useQuery();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  }\n\n  /*\n   * Helpers\n   */\n\n  const networkName = (): string => {\n    const networkFromQuery = queryParams.NETWORK;\n    const isValidNetworkFromQuery = Object.values(ReceiveNetwork).includes(networkFromQuery as ReceiveNetworkType);\n    if (!isValidNetworkFromQuery) {\n      return 'Invalid Network';\n    };\n\n    const receiveNetwork = networksInfo[networkFromQuery as ReceiveNetworkType];\n    const vmString = receiveNetwork.networkId === ReceiveNetwork.SOLANA ? '' : ' (Ethereum)';\n    return `${receiveNetwork.networkName} Address ${vmString}`;\n  };\n\n  const instructionCopy = (): string => {\n    const appIdFromQuery = queryParams.APP_ID;\n    const appCopy = appIdFromQuery ? `You've arrived from ${appIdFromQuery}. ` : '';\n\n    const toTokenFromQuery = queryParams.TO_TOKEN;\n    const networkFromQuery = queryParams.NETWORK;\n    const isToTokenUsdc = toTokenFromQuery === 'USDC'\n    const isNetworkBase = networkFromQuery === 'base';\n    const flowCopy = (isNetworkBase && isToTokenUsdc) ? 'Swap flow' : 'Swap and Send flows';\n\n    const amountUsdcFromQuery = queryParams.AMOUNT_USDC;\n    let amountCopy = `${toTokenFromQuery}`;\n    if (amountUsdcFromQuery && isToTokenUsdc) {\n      amountCopy = `${amountUsdcFromQuery} ${toTokenFromQuery}`;\n    }\n\n    return `${appCopy}Complete the ${flowCopy} to receive ${amountCopy} directly to the following wallet address:`\n  };\n  \n  /*\n   * Component\n   */\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay />\n\n      <ModalContainer>\n        <TitleCenteredRow>\n          <div style={{ flex: 0.25 }}>\n            <button\n              onClick={handleOverlayClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            Welcome to ZKP2P\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.25 }}/>\n        </TitleCenteredRow>\n\n        <Logo size={92}>\n          <img src={`${process.env.PUBLIC_URL}/logo512.png`} alt=\"logo\" />\n        </Logo>\n\n        <InstructionAndAddressContainer>\n          <InstructionsContainer>\n            <ThemedText.SubHeader style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n              { instructionCopy()}\n            </ThemedText.SubHeader>\n          </InstructionsContainer>\n\n          <AccountAddressContainer>\n            <AddressAndEnsNameContainer>\n              <ThemedText.LabelSmall style={{ textAlign: 'left', color: '#FFF' }}>\n                {networkName()}\n              </ThemedText.LabelSmall>\n\n              <AddressLabel>\n                {queryParams.NETWORK === 'solana' ? (\n                  <SolanaAddressLabel>\n                    { queryParams.RECIPIENT_ADDRESS }\n                  </SolanaAddressLabel>\n                ) : (\n                  <ENSName\n                    provider={alchemyMainnetEthersProvider}\n                    address={queryParams.RECIPIENT_ADDRESS || ''}\n                    displayType={AddressDisplayEnum.FULL}\n                  />\n                )}\n              </AddressLabel>\n            </AddressAndEnsNameContainer>\n\n            <CopyButton textToCopy={queryParams.RECIPIENT_ADDRESS || ''} />\n          </AccountAddressContainer>\n\n          <Button\n            onClick={onBackClick}\n            width={164}\n          >\n            Continue\n          </Button>\n        </InstructionAndAddressContainer>\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: 10;\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 392px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  align-items: center;\n  z-index: 20;\n  gap: 1.75rem;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TitleCenteredRow = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 1.5rem;\n  color: #FFF;\n`;\n\nconst StyledArrowLeft = styled(X)`\n  color: #FFF;\n`;\n\nconst Logo = styled.div<{ size?: number }>`\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  color: #ffffff;\n  text-decoration: none;\n\n  img {\n    width: ${({ size }) => size || 32}px;\n    height: ${({ size }) => size || 32}px;\n    object-fit: cover;\n  }\n`;\n\nconst InstructionAndAddressContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  align-items: center;\n  color: #FFF;\n`;\n\nconst InstructionsContainer = styled.div`\n  padding: 0 1.25rem;\n`;\n\nconst AccountAddressContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 1.25rem 1.5rem;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  text-align: left;\n`;\n\nconst AddressAndEnsNameContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  text-align: left;\n  color: #9ca3af;\n  gap: 1rem;\n`;\n\nconst SolanaAddressLabel = styled.div`\n  max-width: calc(100% - 16px);\n  font-size: 16px;\n  word-break: break-all;\n  line-height: 1.4;\n`;\n\nconst AddressLabel = styled.div`\n  max-width: calc(100% - 16px);\n  font-size: 16px;\n  word-break: break-all;\n  line-height: 1.4;\n`;\n"
  },
  {
    "path": "client/src/components/modals/Overlay.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from 'styled-components';\n\nimport { colors } from '@theme/colors';\nimport { Z_INDEX } from '@theme/zIndex';\n\n\ninterface OverlayProps {\n  onClick?: () => void\n}\n\nexport const Overlay: React.FC<OverlayProps> = ({\n  onClick \n}) => {\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    document.body.style.overflow = 'hidden';\n\n    return () => {\n      document.body.style.overflow = 'unset';\n    };\n  }, []);\n\n  /*\n   * Component\n   */\n\n  return (\n    <OverlayContainer onClick={onClick} />\n  );\n};\n\nconst OverlayContainer = styled.div`\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  position: fixed;\n  display: block;\n  background-color: ${colors.container};\n  opacity: 0.75;\n  overflow: hidden;\n  z-index: ${Z_INDEX.overlay};\n`;\n"
  },
  {
    "path": "client/src/components/modals/PlatformIconHelper.tsx",
    "content": "import { useCallback, useState } from 'react';\nimport { Mail, Globe } from 'react-feather';\nimport styled from 'styled-components/macro';\n\nimport Tooltip from '@components/common/Tooltip';\nimport { commonStrings } from '@helpers/strings';\n\n\nexport default function PlatformIconHelper({ keyType }: { keyType: 'mail' | 'browser'; }) {\n  /*\n   * State\n   */\n\n  const [show, setShow] = useState<boolean>(false)\n\n  /*\n   * Handlers\n   */\n\n  const open = useCallback(() => setShow(true), [setShow])\n  const close = useCallback(() => setShow(false), [setShow])\n\n  /*\n   * Helpers\n   */\n\n  const getTextForType = (key: 'mail' | 'browser'): string => {\n    switch (key) {\n      case 'mail':\n        return commonStrings.get('PLATFORM_INSTRUCTIONS_MAIL_TOOLTIP');\n\n      case 'browser':\n        return commonStrings.get('PLATFORM_INSTRUCTIONS_BROWSER_TOOLTIP');\n\n      default:\n        return 'Invalid platform type';\n    }\n  };\n\n  const getIconForType = (key: 'mail' | 'browser'): JSX.Element => {\n    switch (key) {\n      case 'mail':\n        return <Mail size={22} />;\n      case 'browser':\n        return <Globe size={22} />;\n      default:\n        return <div>Invalid Icon</div>;\n    }\n  };\n  \n  return (\n    <Tooltip text={getTextForType(keyType)} show={show}>\n      <QuestionWrapper onClick={open} onMouseEnter={open} onMouseLeave={close}>\n        <QuestionMark>\n          {getIconForType(keyType)}\n        </QuestionMark>\n      </QuestionWrapper>\n    </Tooltip>\n  );\n};\n\nconst QuestionWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0px;\n  width: 36px;\n  height: 36px;\n  border: none;\n  background: none;\n  outline: none;\n  cursor: default;\n  border-radius: 36px;\n  font-size: 16px;\n\n  :hover,\n  :focus {\n    opacity: 0.7;\n  }\n`;\n\nconst QuestionMark = styled.span`\n  display: flex;\n  font-size: 16px;\n  align-items: center;\n  justify-content: center;\n  color: ${({ theme }) => theme.textSecondary};\n`;\n"
  },
  {
    "path": "client/src/components/modals/PlatformRow.tsx",
    "content": "import React from \"react\";\nimport styled from 'styled-components';\n\nimport { colors } from \"@theme/colors\";\nimport PlatformIconHelper from '@components/modals/PlatformIconHelper';\n\n\ninterface PlatformRowProps {\n  platformName: string;\n  platformCurrencies: string[];\n  isSelected: boolean;\n  onRowClick: () => void;\n}\n\nexport const PlatformRow: React.FC<PlatformRowProps> = ({\n  platformName,\n  platformCurrencies,\n  isSelected,\n  onRowClick,\n}: PlatformRowProps) => {\n  PlatformRow.displayName = \"PlatformRow\";\n\n  const platformIconHelperToRender = (platformName: string) => {\n    switch (platformName) {\n      case 'Revolut':\n        return <PlatformIconHelper keyType={'browser'} />;\n\n      case 'mail':\n      default:\n        return <PlatformIconHelper keyType={'mail'} />;\n    }\n  };\n\n  return (\n    <Container\n      onClick={onRowClick}\n      selected={isSelected}\n    >\n      <DetailsContainer>\n        {platformIconHelperToRender(platformName)}\n        <PlatformAndCurrencyLabel>\n          <PlatformLabel>{platformName}</PlatformLabel>\n          <CurrencyLabel>{platformCurrencies.map((currency) => currency).join(', ')}</CurrencyLabel>\n        </PlatformAndCurrencyLabel>\n      </DetailsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div<{ selected: boolean }>`\n  display: flex;\n  flex-direction: row;\n  min-height: 54px;\n  padding: 12px 24px 12px 20px;\n\n  ${({ selected }) => selected && `\n    background-color: #191D28;\n    box-shadow: none;\n  `}\n\n  ${({ selected }) => !selected && `\n    &:hover {\n      background-color: #191D28;\n      box-shadow: none;\n    }\n  `}\n`;\n\nconst DetailsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  flex: 1;\n`;\n\nconst PlatformAndCurrencyLabel = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-grow: 1;\n  flex-wrap: wrap;\n`;\n\nconst PlatformLabel = styled.div`\n  display: flex;\n  flex-direction: row;\n  padding-top: 2px;\n  color: #FFFFFF;\n`;\n\nconst CurrencyLabel = styled.div`\n  padding-top: 4px;\n  color: ${colors.offWhite};\n\n  @media (max-width: 600px) {\n    white-space: normal;\n    overflow: hidden;\n    text-align: right;\n    min-width: 0;\n    flex: 1 1 auto;\n    max-width: 100px;\n  }\n`;"
  },
  {
    "path": "client/src/components/modals/PlatformSelector.tsx",
    "content": "import React, { useReducer, useRef } from \"react\";\nimport styled from 'styled-components';\nimport { X, ChevronDown } from 'react-feather';\nimport Link from '@mui/material/Link';\n\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Overlay } from '@components/modals/Overlay';\nimport { PlatformRow } from '@components/modals/PlatformRow';\nimport { CurrencyIndex, paymentPlatforms, paymentPlatformInfo, PaymentPlatformType } from '@helpers/types';\nimport { useOnClickOutside } from '@hooks/useOnClickOutside';\nimport { ZKP2P_SURVEY_FORM_LINK } from \"../../helpers/docUrls\";\nimport { Z_INDEX } from '@theme/zIndex';\nimport usePlatformSettings from \"@hooks/usePlatformSettings\";\n\n\nexport const PlatformSelector: React.FC<{ usePillSelector: boolean }> = ({ usePillSelector }) => {\n  const [isOpen, toggleOpen] = useReducer((s) => !s, false)\n\n  const ref = useRef<HTMLDivElement>(null)\n  useOnClickOutside(ref, isOpen ? toggleOpen : undefined)\n\n  /*\n   * Contexts\n   */\n\n  const { paymentPlatform, setPaymentPlatform, setCurrencyIndex } = usePlatformSettings();\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    toggleOpen();\n  };\n\n  const handleSelectPlatform = (platform: PaymentPlatformType) => {\n    if (setPaymentPlatform && setCurrencyIndex) {\n      setPaymentPlatform(platform);\n      setCurrencyIndex(CurrencyIndex.DEFAULT);\n\n      toggleOpen();\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Wrapper ref={ref}>\n      {usePillSelector ? (\n        <PlatformNameAndChevronContainer onClick={toggleOpen}>\n          <PlatformLabel>\n            {paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformName}\n          </PlatformLabel>\n          <StyledChevronDown/>\n        </PlatformNameAndChevronContainer>\n      ) : (\n        <CurrencyContainer onClick={toggleOpen}>\n          <CurrencyLogoAndNameContainer>\n            <CurrencyNameContainer>\n              <CurrencyHeader>\n                {'Platform'}\n              </CurrencyHeader>\n              <CurrencyNameLabel>\n                {paymentPlatformInfo[paymentPlatform as PaymentPlatformType].platformName}\n              </CurrencyNameLabel>\n            </CurrencyNameContainer>\n          </CurrencyLogoAndNameContainer>\n          <StyledChevronDown/>\n        </CurrencyContainer>\n      )}\n\n      {isOpen && (\n        <ModalAndOverlayContainer>\n          <Overlay onClick={handleOverlayClick}/>\n\n          <ModalContainer>\n            <TableHeader>\n              <ThemedText.SubHeader style={{ textAlign: 'left' }}>\n                Select a platform\n              </ThemedText.SubHeader>\n\n              <button\n                onClick={handleOverlayClick}\n                style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n                <StyledX/>\n              </button>\n            </TableHeader>\n\n            <HorizontalDivider/>\n\n            <Table>\n              {paymentPlatforms.map((platform, index) => (\n                <PlatformRow\n                  key={index}\n                  platformName={paymentPlatformInfo[platform].platformName}\n                  platformCurrencies={paymentPlatformInfo[platform].platformCurrencies}\n                  isSelected={paymentPlatform === platform}\n                  onRowClick={() => handleSelectPlatform(platform)}\n                />\n              ))}\n            </Table>\n\n            <HorizontalDivider/>\n\n            <TableFooter>\n              Let us know which platforms you are interested in seeing ZKP2P add support\n              for. <Link href={ ZKP2P_SURVEY_FORM_LINK } target=\"_blank\">\n                Give feedback ↗\n              </Link>\n            </TableFooter>\n          </ModalContainer>\n        </ModalAndOverlayContainer>\n      )}\n    </Wrapper>\n  );\n};\n\nconst Wrapper = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n`;\n\nconst PlatformNameAndChevronContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  border-radius: 24px;\n  background: ${colors.selectorColor};\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 6px 8px 6px 14px;\n  gap: 4px;\n  cursor: pointer;\n\n  &:hover {\n    background-color: ${colors.selectorHover};\n    border: 1px solid ${colors.selectorHoverBorder};\n  }\n`;\n\nconst PlatformLabel = styled.div`\n  color: #FFF;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  padding: 1px 5px 0px 5px;\n`;\n\nconst CurrencyContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n  border-radius: 16px;\n  border: 1px solid ${colors.defaultBorderColor};\n  justify-content: space-between;\n  align-items: center;\n  background: ${colors.selectorColor};\n  padding: 1.1rem 1rem;\n  cursor: pointer;\n\n  &:hover {\n    background-color: ${colors.selectorHover};\n    border: 1px solid ${colors.selectorHoverBorder};\n  }\n`;\n\nconst CurrencyLogoAndNameContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 1rem;\n  justify-content: flex-start;\n`;\n\nconst CurrencyNameContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 0.4rem;\n  justify-content: center;\n  text-align: left;\n`;\n\nconst CurrencyHeader = styled.div`\n  font-size: 14px;\n  color: #CED4DA;\n`;\n\nconst CurrencyNameLabel = styled.div`\n  font-size: 16px;\n  color: #FFF;\n`;\n\nconst StyledChevronDown = styled(ChevronDown)`\n  width: 20px;\n  height: 20px;\n  color: #FFF;\n`;\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 400px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background-color: ${colors.container};\n  color: #FFF;\n  align-items: center;\n  z-index: 20;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TableHeader = styled.div`\n  box-sizing: border-box;\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 20px 16px 16px 20px;\n`;\n\nconst HorizontalDivider = styled.div`\n  width: 100%;\n  border-top: 1px solid ${colors.defaultBorderColor};\n`;\n\nconst StyledX = styled(X)`\n  color: #FFF;\n`;\n\nconst Table = styled.div`\n  width: 100%;\n  color: #616161;\n  height: 284px;\n  overflow-y: auto;\n  scrollbar-width: thin;\n`;\n\nconst TableFooter = styled.div`\n  padding: 20px;\n  font-size: 14px;\n  text-align: left;\n  line-height: 1.5;\n`;\n"
  },
  {
    "path": "client/src/components/modals/RequirementStepRow.tsx",
    "content": "import styled from \"styled-components\";\n\nimport { CenterAllDiv, Row } from \"@components/legacy/Layout\";\n\n\nexport const RequirementStepRow: React.FC<{\n  step?: number;\n  children: React.ReactNode;\n}> = ({ step, children }) => {\n  return (\n    <Container>\n      {step !== undefined && (\n        <Label>\n          <span>{step}.</span>\n        </Label>\n      )}\n      <RequirementStepText>{children}</RequirementStepText>\n    </Container>\n  );\n};\n\nconst Container = styled(Row)`\n  gap: 0.75rem;\n  border-radius: 12px;\n  color: #FFF;\n  line-height: 1.35;\n  padding: 0rem 0.5rem;\n`;\n\nconst Label = styled(CenterAllDiv)`\n  border-radius: 4px;\n  width: 12px;\n  height: 12px;\n  font-size: 16px;\n`;\n\nconst RequirementStepText = styled.span`\n  font-size: 15px;\n`;\n"
  },
  {
    "path": "client/src/components/modals/ReviewRequirements.tsx",
    "content": "import React, { useState } from \"react\";\nimport styled from 'styled-components';\nimport { ArrowLeft, AlertTriangle } from 'react-feather';\n\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport { Overlay } from '@components/modals/Overlay';\nimport { platformStrings } from '@helpers/strings';\nimport { Button } from \"@components/common/Button\";\nimport { RequirementStepRow } from \"@components/modals/RequirementStepRow\";\nimport { CustomCheckbox } from \"@components/common/Checkbox\";\nimport { PaymentPlatformType } from '@helpers/types';\nimport useMediaQuery from \"@hooks/useMediaQuery\";\nimport { Z_INDEX } from '@theme/zIndex';\n\n\ninterface ReviewRequirementsProps {\n  onBackClick: () => void\n  paymentPlatform: PaymentPlatformType\n  onCtaClick: () => void\n}\n\nexport const ReviewRequirements: React.FC<ReviewRequirementsProps> = ({\n  onBackClick,\n  paymentPlatform,\n  onCtaClick\n}) => {\n  const isMobile = useMediaQuery() === 'mobile';\n  \n  /*\n   * State\n   */\n\n  const [isReviewRequirementsChecked, setIsReviewRequirementsChecked] = useState(false);\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  };\n\n  const onCheckboxChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    setIsReviewRequirementsChecked(event.target.checked);\n  };\n\n  /*\n   * Component\n   */\n\n  const optionalPlatformRequirement = () => {\n    const requirementCopy = platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_FOUR');\n    return requirementCopy ? (\n      <RequirementStepRow step={4}>\n        {requirementCopy}\n      </RequirementStepRow>\n    ) : null;\n  };\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay />\n\n      <ModalContainer>\n        <TitleCenteredRow>\n          <div style={{ flex: 0.25 }}>\n            <button\n              onClick={handleOverlayClick}\n              style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n              >\n\n              <StyledArrowLeft/>\n            </button>\n          </div>\n\n          <ThemedText.HeadlineSmall style={{ flex: '1', margin: 'auto', textAlign: 'center' }}>\n            {isMobile ? 'Requirements' : 'Review Requirements'}\n          </ThemedText.HeadlineSmall>\n\n          <div style={{ flex: 0.25 }}/>\n        </TitleCenteredRow>\n\n        <StyledAlertTriangle />\n\n        <RequirementListContainer>\n          <RequirementStepRow step={1}>\n            { platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_ONE') }\n          </RequirementStepRow>\n\n          <RequirementStepRow step={2}>\n            <span style={paymentPlatform === \"garanti\" ? { textDecoration: 'underline', fontWeight: 'bold' } : undefined}>\n              { platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_TWO') }\n            </span>\n          </RequirementStepRow>\n\n          <RequirementStepRow step={3}>\n            <span style={paymentPlatform === \"garanti\" ? { textDecoration: 'underline', fontWeight: 'bold' } : undefined}>\n              {platformStrings.getForPlatform(paymentPlatform, 'PAYMENT_REQUIREMENT_STEP_THREE')}\n            </span>\n          </RequirementStepRow>\n\n          {optionalPlatformRequirement()}\n        </RequirementListContainer>\n\n        <DisclaimerLabel>\n          Not meeting requirements will lead to lost funds\n        </DisclaimerLabel>\n\n        <CheckboxContainer>\n          <CustomCheckbox\n            checked={isReviewRequirementsChecked}\n            onChange={onCheckboxChange}\n          />\n          <CheckboxInstructionsLabel>\n            I have reviewed the requirements\n          </CheckboxInstructionsLabel>\n        </CheckboxContainer>\n\n        <Button\n          disabled={!isReviewRequirementsChecked}\n          onClick={onCtaClick}\n          fullWidth={true}\n        >\n          {'Continue'}\n        </Button>\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 472px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  align-items: center;\n  z-index: 20;\n  gap: 1.3rem;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TitleCenteredRow = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 1.5rem;\n  color: #FFF;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst StyledAlertTriangle = styled(AlertTriangle)`\n  width: 56px;\n  height: 56px;\n  color: #FFF;\n  padding: 0.5rem 0;\n`;\n\nconst RequirementListContainer = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n`;\n\nconst DisclaimerLabel = styled.button`\n  font-size: 14px;\n  font-family: 'Graphik';\n  color: #df2e2d;\n  font-weight: 600;\n  line-height: 1.3;\n  text-align: center;\n  background: none;\n  border: none;\n`;\n\nconst CheckboxContainer = styled.div`\n  display: flex;\n  align-items: center;\n  margin: auto;\n  gap: 0.75rem;\n`;\n\nconst CheckboxInstructionsLabel = styled.div`\n  padding-top: 2px;\n  font-size: 15px;\n  color: #6C757D;\n`;\n"
  },
  {
    "path": "client/src/components/modals/ValidateEmail.tsx",
    "content": "import React, { useEffect, useMemo, useState } from \"react\";\nimport styled from 'styled-components';\nimport { ArrowLeft } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport Confetti from 'react-confetti';\nimport { useWindowSize } from '@uidotdev/usehooks';\n\nimport { Button } from \"@components/common/Button\";\nimport { LabeledSwitch } from \"@components/common/LabeledSwitch\";\nimport { Overlay } from '@components/modals/Overlay';\nimport { LabeledTextArea } from '@components/legacy/LabeledTextArea';\nimport { VerificationStepRow, VerificationState, VerificationStepType } from \"@components/modals/VerificationStepRow\";\nimport { commonStrings } from \"@helpers/strings\";\nimport { LoginStatus, ProofGenerationStatus } from  \"@helpers/types\";\nimport { ThemedText } from '@theme/text';\nimport { colors } from '@theme/colors';\nimport useAccount from '@hooks/useAccount';\nimport useProofGenSettings from \"@hooks/useProofGenSettings\";\nimport useSmartContracts from \"@hooks/useSmartContracts\";\nimport useMediaQuery from \"@hooks/useMediaQuery\";\nimport { Z_INDEX } from '@theme/zIndex';\n\n\ninterface ValidateEmailProps {\n  title: string;\n  proof: string;\n  publicSignals: string;\n  onBackClick: () => void\n  status: string;\n  circuitType: CircuitType;\n  buttonTitle: string;\n  submitTransactionStatus: string;\n  isSubmitMining: boolean;\n  isSubmitSuccessful: boolean;\n  handleSubmitVerificationClick?: () => void;\n  setProofGenStatus?: (status: string) => void;\n  onVerifyEmailCompletion?: () => void;\n  transactionAddress?: string | null;\n  provingFailureErrorCode: number | null;\n}\n\nexport const ValidateEmail: React.FC<ValidateEmailProps> = ({\n  title,\n  proof,\n  publicSignals,\n  onBackClick,\n  status,\n  circuitType,\n  buttonTitle,\n  submitTransactionStatus,\n  isSubmitMining,\n  isSubmitSuccessful,\n  transactionAddress,\n  setProofGenStatus,\n  handleSubmitVerificationClick = () => {},\n  onVerifyEmailCompletion,\n  provingFailureErrorCode,\n}) => {\n  /*\n   * Context\n   */\n\n  const { loginStatus } = useAccount();\n  const { isProvingTypeFast } = useProofGenSettings();\n  const size = useWindowSize();\n  const { blockscanUrl } = useSmartContracts();\n  const isMobile = useMediaQuery() === 'mobile';\n\n  /*\n   * State\n   */\n\n  const [shouldShowProofAndSignals, setShouldShowProofAndSignals] = useState<boolean>(false);\n\n  const [ctaButtonTitle, setCtaButtonTitle] = useState<string>(\"\");\n  const [showConfetti, setShowConfetti] = useState<boolean>(false);\n  const [isSubmitProcessing, setIsSubmitProcessing] = useState<boolean>(false);\n\n  /*\n   * Handlers\n   */\n\n  const handleOverlayClick = () => {\n    onBackClick();\n  }\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (setProofGenStatus) {\n      switch (submitTransactionStatus) {\n        case \"error\":\n          setProofGenStatus(ProofGenerationStatus.TRANSACTION_CONFIGURED);\n          setIsSubmitProcessing(false);\n          break;\n\n        case \"loading\":\n          setProofGenStatus(ProofGenerationStatus.TRANSACTION_LOADING);\n          setIsSubmitProcessing(true);\n          break;\n\n        default:\n          setIsSubmitProcessing(false);\n          break;\n      }\n    }\n  }, [submitTransactionStatus, setProofGenStatus]);\n\n  useEffect(() => {\n    if (isSubmitMining && setProofGenStatus) {\n      setProofGenStatus(ProofGenerationStatus.TRANSACTION_MINING);\n    }\n  }, [isSubmitMining, setProofGenStatus]);\n\n  useEffect(() => {\n    if (isSubmitSuccessful && setProofGenStatus) {\n      setShowConfetti(true);\n      \n      setTimeout(() => {\n        setShowConfetti(false);\n      }, 5000);\n      \n      setProofGenStatus(ProofGenerationStatus.DONE);\n    }\n  }, [isSubmitSuccessful, setProofGenStatus])\n\n  useEffect(() => {\n    switch (status) {\n      case ProofGenerationStatus.TRANSACTION_CONFIGURED:\n        setCtaButtonTitle(buttonTitle);\n        break;\n\n      case ProofGenerationStatus.TRANSACTION_LOADING:\n        setCtaButtonTitle(\"Signing Transaction\");\n        break;\n\n      case ProofGenerationStatus.TRANSACTION_MINING:\n        setCtaButtonTitle(\"Mining Transaction\");\n        break;\n\n      case ProofGenerationStatus.ERROR_FAILED_TO_PROVE:\n        switch (provingFailureErrorCode) {\n          case 1: // INVALID_EMAIL_TYPE\n            setCtaButtonTitle(\"Validation Failed: Invalid Type\");\n            break;\n          \n            case 2: // NOT_SEND_EMAIL\n            setCtaButtonTitle(\"Validation Failed: Invalid Email\");\n            break;\n          \n            case 3: // INVALID_DOMAIN_KEY\n            setCtaButtonTitle(\"Validation Failed: Invalid Key\");\n            break;\n            \n          case 4: // DKIM_VALIDATION_FAILED\n            setCtaButtonTitle(\"Validation Failed: Invalid Signature\");\n            break;\n\n          case 5: // NOT_FROM_VENMO\n            setCtaButtonTitle(\"Validation Failed: Invalid Sender\");\n            break;\n\n          case 6: // INVALID_TEMPLATE\n            setCtaButtonTitle(\"Validation Failed: Invalid Template\");\n            break;\n\n          case 7: // PROOF_GEN_FAILED\n            setCtaButtonTitle(\"Validation Failed: Proving Errored\");\n            break;\n\n          case 8: // MERCHANT_SEND_EMAIL\n            setCtaButtonTitle(\"Validation Failed: Invalid Payment\");\n            break;\n\n          default:\n            setCtaButtonTitle(\"Validation Failed: Try Again Shortly\");\n            break;\n        }\n        break;\n\n      case ProofGenerationStatus.DONE:\n        switch (circuitType) {\n          case CircuitType.EMAIL_VENMO_SEND:\n            setCtaButtonTitle('Go to Send');\n            break;\n    \n          case CircuitType.EMAIL_VENMO_REGISTRATION:\n          default:\n            setCtaButtonTitle('Go to Registration');\n        };\n        break;\n\n      default:\n        setCtaButtonTitle(buttonTitle);\n        break;\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [status, buttonTitle]);\n\n  /*\n   * Helpers\n   */\n\n  const isSubmitVerificationButtonDisabled = useMemo(() => {\n    switch (status) {\n      case \"transaction-configured\":\n      case \"done\":\n        return false;\n\n      default:\n        return true;\n    }\n  }, [status]);\n\n  const isSubmitVerificationButtonLoading = (): boolean => {\n    switch (status) {\n      case \"transaction-configured\":\n      case \"done\":\n        return false;\n        \n      default:\n        return loginStatus === LoginStatus.AUTHENTICATED;\n    }\n  };\n\n  const getButtonHandler = () => {\n    switch (status) {\n      case \"done\":\n        switch (circuitType) {\n          case CircuitType.EMAIL_VENMO_SEND:\n            return onVerifyEmailCompletion?.();\n\n          case CircuitType.EMAIL_VENMO_REGISTRATION:\n          default:\n            return onVerifyEmailCompletion?.();\n        }\n\n      default:\n        return handleSubmitVerificationClick();\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  const renderVerificationSteps = () => {\n    let downloadStepState = VerificationState.DEFAULT;\n    let uploadStepState = VerificationState.DEFAULT;\n    let proveStepState = VerificationState.DEFAULT;\n    let submitStepState = VerificationState.DEFAULT;\n\n    switch (status) {\n      case \"not-started\":\n      case \"generating-input\":\n      case \"downloading-proof-files\":\n        downloadStepState = VerificationState.LOADING;\n        break;\n\n      case \"uploading-proof-files\":\n        downloadStepState = VerificationState.COMPLETE;\n        uploadStepState = VerificationState.LOADING;\n        break;\n\n      case \"generating-proof\":\n        downloadStepState = VerificationState.COMPLETE;\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.LOADING;\n        break;\n\n      case \"error-failed-to-prove\":\n        downloadStepState = VerificationState.COMPLETE;\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.DEFAULT;\n        break;\n\n      case \"transaction-configured\":\n        downloadStepState = VerificationState.COMPLETE;\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.COMPLETE;\n        break;\n\n      case \"transaction-loading\":\n      case \"transaction-mining\":\n        downloadStepState = VerificationState.COMPLETE;\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.COMPLETE;\n        submitStepState = VerificationState.LOADING;\n        break;\n\n      case \"done\":\n        downloadStepState = VerificationState.COMPLETE;\n        uploadStepState = VerificationState.COMPLETE;\n        proveStepState = VerificationState.COMPLETE;\n        submitStepState = VerificationState.COMPLETE;\n        break;\n    }\n\n    const verificationStepRows = [];\n\n    if (!isProvingTypeFast) {\n      verificationStepRows.push(\n        <VerificationStepRow\n          key={VerificationStepType.DOWNLOAD}\n          type={VerificationStepType.DOWNLOAD}\n          progress={downloadStepState}\n          circuitType={circuitType}\n        />\n      );\n    }\n\n    if (isProvingTypeFast) {\n      verificationStepRows.push(\n        <VerificationStepRow\n          key={VerificationStepType.UPLOAD}\n          type={VerificationStepType.UPLOAD}\n          progress={uploadStepState}\n          circuitType={circuitType}\n        />\n      );\n    }\n\n    verificationStepRows.push(\n      <VerificationStepRow\n        key={VerificationStepType.PROVE}\n        type={VerificationStepType.PROVE}\n        progress={proveStepState}\n        circuitType={circuitType}\n      />\n    );\n\n    verificationStepRows.push(\n      <VerificationStepRow\n        key={VerificationStepType.SUBMIT}\n        type={VerificationStepType.SUBMIT}\n        progress={submitStepState}\n        circuitType={circuitType}\n      />\n    );\n\n    return verificationStepRows;\n  };\n\n  return (\n    <ModalAndOverlayContainer>\n      <Overlay />\n\n      {showConfetti ? (\n        <ConfettiContainer>\n          <Confetti\n            recycle={false}\n            numberOfPieces={500}\n            width={size.width ?? undefined}\n            height={document.documentElement.scrollHeight}\n          />\n        </ConfettiContainer>\n      ) : null}\n      <ModalContainer>\n        <TitleRowContainer>\n          <button\n            onClick={handleOverlayClick}\n            style={{ background: 'none', border: 'none', cursor: 'pointer' }}\n            >\n\n            <StyledArrowLeft/>\n          </button>\n\n          <Title>\n            <ThemedText.HeadlineSmall style={{ flex: '0', textAlign: 'right' }}>\n              {!isMobile ? title : 'Verify'}\n            </ThemedText.HeadlineSmall>\n          </Title>\n\n          {!isMobile ? (\n            <LabeledSwitch\n              switchChecked={shouldShowProofAndSignals}\n              checkedLabel={\"Hide\"}\n              uncheckedLabel={\"Show\"}\n              helperText={commonStrings.get('PROOF_TOOLTIP')}\n              onSwitchChange={(checked: boolean) => setShouldShowProofAndSignals(checked)}\n            />\n          ) : (\n            <div></div> // Leave empty div in so title remains centered\n          )}\n        </TitleRowContainer>\n\n        <VerificationStepsContainer>\n          {renderVerificationSteps()}\n        </VerificationStepsContainer>\n\n        { shouldShowProofAndSignals && (\n          <ProofAndSignalsContainer>\n            <LabeledTextArea\n              label=\"Proof Output\"\n              value={proof}\n              disabled={true}\n              height={\"12vh\"} />\n\n            <LabeledTextArea\n              label=\"Public Signals\"\n              value={publicSignals}\n              disabled={true}\n              height={\"12vh\"}\n              secret />\n          </ProofAndSignalsContainer>\n          )\n        }\n\n        { transactionAddress?.length ? (\n          <Link\n            href={`${blockscanUrl}/tx/${transactionAddress}`}\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n              <ThemedText.LabelSmall textAlign=\"left\" paddingBottom={\"0.75rem\"}>\n                View on Explorer ↗\n              </ThemedText.LabelSmall>\n          </Link>\n        ) : null}\n\n        <Button\n          loading={isSubmitVerificationButtonLoading()}\n          disabled={isSubmitVerificationButtonDisabled || isSubmitProcessing}\n          onClick={getButtonHandler}\n          fullWidth={true}\n        >\n          {ctaButtonTitle}\n        </Button>\n      </ModalContainer>\n    </ModalAndOverlayContainer>\n  );\n};\n\nconst ModalAndOverlayContainer = styled.div`\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  position: fixed;\n  align-items: flex-start;\n  top: 0;\n  left: 0;\n  z-index: ${Z_INDEX.overlay};\n`;\n\nconst ModalContainer = styled.div`\n  width: 80vw;\n  max-width: 412px;\n  display: flex;\n  flex-direction: column;\n  border-radius: 16px;\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  padding: 1.25rem;\n  background-color: ${colors.container};\n  justify-content: space-between;\n  align-items: center;\n  z-index: 20;\n  gap: 1.3rem;\n  \n  position: fixed;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n`;\n\nconst TitleRowContainer = styled.div`\n  width: 100%;\n  display: grid;\n  grid-template-columns: 0.3fr 1.1fr 0.85fr;\n  align-items: center;\n  justify-content: space-between;\n`;\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n  color: #FFF;\n`;\n\nconst Title = styled.div`\n  flex-grow: 1;\n  white-space: nowrap;\n  overflow: hidden;\n`;\n\nconst VerificationStepsContainer = styled.div`\n  width: 100%;\n`;\n\nconst ProofAndSignalsContainer = styled.div`\n  width: 100%;\n  background: #eeeee;\n  display: flex;\n  flex-direction: column;\n  gap: 1.25rem;\n`;\n\nconst Link = styled.a`\n  white-space: pre;\n  display: inline-block;\n  color: #1F95E2;\n  text-decoration: none;\n\n  &:hover {\n    text-decoration: underline;\n  }\n`;\n\nconst ConfettiContainer = styled.div`\n  z-index: 20;\n`;\n"
  },
  {
    "path": "client/src/components/modals/VerificationStepRow.tsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport styled from 'styled-components/macro';\nimport { Download, Cpu, Check, Circle, Play, Upload } from 'react-feather';\nimport { CircuitType } from '@zkp2p/circuits-circom-helpers/generate_input';\nimport { CircularProgressbarWithChildren } from 'react-circular-progressbar';\nimport 'react-circular-progressbar/dist/styles.css';\n\nimport Spinner from \"@components/common/Spinner\";\nimport { commonStrings } from \"@helpers/strings\";\nimport useProofGenSettings from \"@hooks/useProofGenSettings\";\nimport useMediaQuery from \"@hooks/useMediaQuery\";\n\n\nexport const VerificationStepType = {\n  DOWNLOAD: \"download\",\n  UPLOAD: \"upload\",\n  PROVE: \"prove\",\n  SUBMIT: \"submit\",\n};\n\nexport const VerificationState = {\n  DEFAULT: 'default',\n  LOADING: 'loading',\n  COMPLETE: 'complete',\n};\n\ninterface VerificationStepRowProps {\n  type: string;\n  progress: string;\n  circuitType: CircuitType;\n}\n\nexport type VerificationStepRowData = VerificationStepRowProps;\n\nexport const VerificationStepRow: React.FC<VerificationStepRowProps> = ({\n  type,\n  progress,\n  circuitType\n}: VerificationStepRowProps) => {\n  VerificationStepRow.displayName = \"VerificationStepRow\";\n\n  /*\n   * Context\n   */\n\n  const isMobile = useMediaQuery() === 'mobile';\n\n  const { isProvingTypeFast } = useProofGenSettings();\n\n  /*\n   * State\n   */\n\n  const [progressPercentage, setProgressPercentage] = useState(0);\n  const [progressTimer, setProgressTimer] = useState(0);\n  \n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (progress === VerificationState.LOADING) {\n      const interval = getUpdateIntervalMs();\n      const totalTime = getEstimatedTimesMs();\n      const steps = totalTime / interval;\n      const increment = 100 / steps;\n\n      let timeout: NodeJS.Timeout;\n      let currentPercentage = 0;\n\n      const updateProgressCircle = () => {\n        if (currentPercentage < 100) {\n          setProgressPercentage(currentPercentage);\n\n          const tick = Math.round(increment);\n          currentPercentage += tick;\n\n          setProgressTimer(currentPercentage / tick);\n\n          timeout = setTimeout(updateProgressCircle, interval);\n        } else {\n          setProgressPercentage(100);\n        }\n      };\n\n      updateProgressCircle();\n\n      return () => clearTimeout(timeout);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [progress]);\n\n  /*\n   * Helpers\n   */\n\n  const shouldShowProgressCircle = (percentage: number) => {\n    return percentage < 100 && type !== VerificationStepType.SUBMIT;\n  }\n\n  const getEstimatedTimesMs = () => {\n    switch (type) {\n      case VerificationStepType.DOWNLOAD:\n        return 240000;\n      case VerificationStepType.UPLOAD:\n        return 500;\n      case VerificationStepType.PROVE:\n        return isProvingTypeFast ? 60000 : 600000;\n      default:\n        return 0;\n    }\n  };\n\n  const getUpdateIntervalMs = () => {\n    switch (type) {\n      case VerificationStepType.DOWNLOAD:\n        return 1000;\n      case VerificationStepType.UPLOAD:\n        return 10;\n      case VerificationStepType.PROVE:\n        return 1000;\n      default:\n        return 0;\n    }\n  };\n\n  const getLeftIcon = () => {\n    switch (type) {\n      case VerificationStepType.DOWNLOAD:\n        return <StyledDownload progress={progress} />;\n      case VerificationStepType.UPLOAD:\n        return <StyledUpload progress={progress} />;\n      case VerificationStepType.PROVE:\n        return <StyledCpu progress={progress} />;\n      case VerificationStepType.SUBMIT:\n        return <StyledPlay progress={progress} />;\n      default:\n        return null;\n    }\n  };\n\n  const getRightIcon = () => {\n    switch (progress) {\n      case VerificationState.DEFAULT:\n        return <StyledCircle progress={progress} />;\n\n      case VerificationState.LOADING:\n        return shouldShowProgressCircle(progressPercentage) ? (\n          <CircularProgressbarWithChildren\n            maxValue={99}\n            styles={{\n              root: {\n                height: 32,\n                width: 32,\n              },\n              text: {\n                fontSize: 32,\n                fill: '#4BB543',\n              },\n              path: {\n                stroke: '#4BB543',\n                transition: 'none',\n              }\n            }}\n            value={progressPercentage}\n          >\n            <Percentage>{`${progressTimer}`}</Percentage>\n          </CircularProgressbarWithChildren>\n        ) : (\n          <Spinner size={24} />\n        );\n\n      case VerificationState.COMPLETE:\n        return <StyledCheck progress={progress} />;\n\n      default:\n        return null;\n    }\n  };\n\n  const getTitle = () => {\n    switch (type) {\n      case VerificationStepType.DOWNLOAD:\n        return commonStrings.get('PROOF_MODAL_DOWNLOAD_TITLE');\n\n      case VerificationStepType.UPLOAD:\n        return commonStrings.get('PROOF_MODAL_UPLOAD_TITLE');\n\n      case VerificationStepType.PROVE:\n        switch (circuitType) {\n          case CircuitType.EMAIL_VENMO_REGISTRATION:\n            return commonStrings.get('PROOF_MODAL_PROVE_REGISTRATION_TITLE');\n\n          case CircuitType.EMAIL_VENMO_SEND:\n          default:\n            return commonStrings.get('PROOF_MODAL_PROVE_TITLE');\n        }\n\n      case VerificationStepType.SUBMIT:\n        switch (circuitType) {\n          case CircuitType.EMAIL_VENMO_REGISTRATION:\n            return commonStrings.get('PROOF_MODAL_REGISTRATION_SUBMIT_TITLE');\n\n          case CircuitType.EMAIL_VENMO_SEND:\n          default:\n            return commonStrings.get('PROOF_MODAL_SUBMIT_TITLE');\n        }\n\n      default:\n        return null;\n    }\n  };\n\n  const getSubTitle = () => {\n    switch (type) {\n      case VerificationStepType.DOWNLOAD:\n        return commonStrings.get('PROOF_MODAL_DOWNLOAD_SUBTITLE');\n\n      case VerificationStepType.UPLOAD:\n        return commonStrings.get('PROOF_MODAL_UPLOAD_SUBTITLE');\n\n      case VerificationStepType.PROVE:\n        if (isProvingTypeFast) {\n          switch (circuitType) {\n            case CircuitType.EMAIL_VENMO_REGISTRATION:\n              return commonStrings.get('PROOF_MODAL_PROVE_REGISTRATION_SUBTITLE_FAST');\n\n            case CircuitType.EMAIL_VENMO_SEND:\n            default:\n              return commonStrings.get('PROOF_MODAL_PROVE_SUBTITLE_FAST');\n          }\n        } else {\n          return commonStrings.get('PROOF_MODAL_PROVE_SUBTITLE_PRIVATE');\n        }\n\n      case VerificationStepType.SUBMIT:\n        switch (circuitType) {\n          case CircuitType.EMAIL_VENMO_REGISTRATION:\n            return commonStrings.get('PROOF_MODAL_REGISTRATION_SUBMIT_SUBTITLE');\n\n          case CircuitType.EMAIL_VENMO_SEND:\n          default:\n            return commonStrings.get('PROOF_MODAL_SUBMIT_SUBTITLE');\n        }\n\n      default:\n        return null;\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  return (\n    <Container isMobile={isMobile}>\n      {getLeftIcon()}\n\n      <TitleAndSubtitleContainer>\n        <Label progress={progress}>\n          {getTitle()}\n        </Label>\n\n        <Subtitle progress={progress}>\n          {getSubTitle()}\n        </Subtitle>\n      </TitleAndSubtitleContainer>\n\n      <ActionsContainer>\n        {getRightIcon()}\n      </ActionsContainer>\n    </Container>\n  );\n};\n\nconst Container = styled.div<{ isMobile?: boolean }>`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  margin-top: 4px;\n  gap: 1.25rem;\n\n  padding: ${({ isMobile }) => isMobile ? '0.5rem' : '1rem'};\n`;\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  margin-left: auto;\n`;\n\nconst TitleAndSubtitleContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n`;\n\nconst Label = styled.span<{ progress: string }>`\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#FFFFFF')};\n  font-size: 16px;\n`;\n\nconst Subtitle = styled.span<{ progress: string }>`\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#ADB5BD')};\n  font-size: 12px;\n`;\n\nconst IconBase = styled.div<{ progress: string }>`\n  width: 24px;\n  height: 24px;\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#FFFFFF')};\n`;\n\nconst Percentage = styled.div`\n  font-size: 12px;\n  color: #4BB543;\n  margin-top: 1px;\n`;\n\nconst StyledDownload = styled(IconBase).attrs({ as: Download })``;\nconst StyledCpu = styled(IconBase).attrs({ as: Cpu })``;\nconst StyledUpload = styled(IconBase).attrs({ as: Upload })``;\nconst StyledPlay = styled(IconBase).attrs({ as: Play })``;\nconst StyledCheck = styled(IconBase).attrs({ as: Check })`\n  color: ${props => (props.progress === VerificationState.DEFAULT ? '#6C757D' : '#4BB543')};\n`;\nconst StyledCircle = styled(IconBase).attrs({ as: Circle })``;\n"
  },
  {
    "path": "client/src/contexts/common/Account/AccountContext.ts",
    "content": "import { createContext } from 'react';\n\n\ninterface AccountValues {\n  isLoggedIn: boolean;\n  loggedInEthereumAddress: string | null;\n  loginStatus: string | null;\n  authenticatedLogout: (() => void) | null;\n  authenticatedLogin: (() => void) | null;\n  accountDisplay: string | null;\n  network: string | null;\n  connectStatus: string | null;\n  exportAuthenticatedWallet: (() => void) | null;\n};\n\nconst defaultValues: AccountValues = {\n  isLoggedIn: false,\n  loggedInEthereumAddress: null,\n  loginStatus: null,\n  authenticatedLogout: null,\n  authenticatedLogin: null,\n  accountDisplay: null,\n  network: null,\n  connectStatus: null,\n  exportAuthenticatedWallet: null\n};\n\nconst AccountContext = createContext<AccountValues>(defaultValues);\n\nexport default AccountContext;\n"
  },
  {
    "path": "client/src/contexts/common/Account/AccountProvider.tsx",
    "content": "import { useEffect, useState, ReactNode } from 'react';\nimport { useAccount, useConnect, useDisconnect, useNetwork } from 'wagmi';\nimport { useWallets } from '@privy-io/react-auth';\nimport { usePrivyWagmi } from '@privy-io/wagmi-connector';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport { esl } from '@helpers/constants';\nimport { LoginStatus, LoginStatusType } from '@helpers/types';\nimport { formatAddress } from '@helpers/addressFormat';\n\nimport AccountContext from './AccountContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst AccountProvider = ({ children }: ProvidersProps) => {\n  const { address } = useAccount();\n  const { chain } = useNetwork();\n  const { disconnect } = useDisconnect();\n  const { status: connectStatus } = useConnect();\n  \n  const { wallets } = useWallets();\n  const { wallet: activeWallet, setActiveWallet } = usePrivyWagmi();\n  const {\n    authenticated,\n    logout: authenticatedLogout,\n    user,\n    login: authenticatedLogin,\n    exportWallet: exportAuthenticatedWallet\n  } = usePrivy();\n\n  /*\n   * State\n   */\n\n  const [isLoggedIn, setIsLoggedIn] = useState<boolean>(false);\n  const [loginStatus, setLoginStatus] = useState<LoginStatusType>(LoginStatus.LOGGED_OUT);\n  const [loggedInEthereumAddress, setLoggedInEthereumAddress] = useState<string | null>(null);\n  const [accountDisplay, setAccountDisplay] = useState<string | null>(null);\n  const [network, setNetwork] = useState<string | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('activeWallet_1');\n    esl && console.log('checking wallets: ', wallets);\n    esl && console.log('checking activeWallet: ', activeWallet);\n\n    if (wallets[0] && !activeWallet) {\n      esl && console.log('activeWallet_2');\n      setActiveWallet(wallets[0]);\n    }\n  }, [activeWallet, wallets, setActiveWallet]);\n\n  useEffect(() => {\n    esl && console.log('loginStatus_1');\n    esl && console.log('user: ', user);\n\n    if (authenticated && user?.wallet?.connectorType) {\n      const connectorType = user.wallet.connectorType;\n      if (connectorType === 'embedded') {\n        esl && console.log('loginStatus_2');\n\n        setLoginStatus(LoginStatus.AUTHENTICATED);\n      } else if (\n          connectorType === 'injected' ||\n          connectorType === 'coinbase_wallet' ||\n          connectorType === 'wallet_connect' ||\n          connectorType === 'wallet_connect_v2'\n        ) {\n        esl && console.log('loginStatus_3');\n\n        setLoginStatus(LoginStatus.EOA);\n      } else {\n        esl && console.log('loginStatus_4');\n\n        setLoginStatus(LoginStatus.LOGGED_OUT);\n      }\n    } else {\n      esl && console.log('loginStatus_5');\n\n      setLoginStatus(LoginStatus.LOGGED_OUT);\n    }\n  }, [authenticated, user]);\n\n  useEffect(() => {\n    esl && console.log('isLoggedIn_1');\n    esl && console.log('checking loginStatus: ', loginStatus);\n    esl && console.log('user: ', user);\n    esl && console.log('address: ', address);\n    \n    switch (loginStatus) {\n      case LoginStatus.AUTHENTICATED:\n        if (address && user) {\n          esl && console.log('isLoggedIn_2');\n\n          if (user.email && user.email.address) {\n            setAccountDisplay(user.email.address);\n          } else if (user.google && user.google.email) {\n            setAccountDisplay(user.google.email);\n          } else if (user.twitter && user.twitter.username) {\n            setAccountDisplay(user.twitter.username);\n          } else if (user.farcaster && user.farcaster.displayName) {\n            setAccountDisplay(user.farcaster.displayName);\n          } else {\n            setAccountDisplay('Account');\n          }\n\n          setIsLoggedIn(true);\n          setLoggedInEthereumAddress(address);\n        }\n        break;\n\n      case LoginStatus.EOA:\n        if (address) {\n          esl && console.log('isLoggedIn_3');\n\n          const formattedAddress = formatAddress(address);\n\n          setAccountDisplay(formattedAddress);\n          setIsLoggedIn(true);\n          setLoggedInEthereumAddress(address);\n        }\n        break;\n      \n      case LoginStatus.LOGGED_OUT:\n      default:\n        esl && console.log('isLoggedIn_4');\n\n        setAccountDisplay(null);\n        setIsLoggedIn(false);\n        setLoggedInEthereumAddress(null);\n    }\n  }, [user, address, loginStatus, disconnect]);\n\n  useEffect(() => {\n    esl && console.log('networkRaw_1');\n    esl && console.log('checking chain: ', chain);\n\n    if (chain) {\n      esl && console.log('networkRaw_2');\n\n      setNetwork(chain.network);\n    } else {\n      esl && console.log('networkRaw_3');\n\n      setNetwork(null);\n    }\n  }, [chain]);\n\n  return (\n    <AccountContext.Provider\n      value={{\n        isLoggedIn,\n        loggedInEthereumAddress,\n        loginStatus,\n        authenticatedLogin,\n        authenticatedLogout,\n        accountDisplay,\n        network,\n        connectStatus,\n        exportAuthenticatedWallet\n      }}\n    >\n      {children}\n    </AccountContext.Provider>\n  );\n};\n\nexport default AccountProvider;\n"
  },
  {
    "path": "client/src/contexts/common/Account/index.ts",
    "content": "export { default as AccountContext } from './AccountContext'\nexport { default as AccountProvider } from './AccountProvider'\n"
  },
  {
    "path": "client/src/contexts/common/Balances/BalancesContext.ts",
    "content": "import { createContext } from 'react'\n\ninterface BalancesValues {\n  ethBalance: bigint | null\n  refetchEthBalance: (() => void) | null\n  shouldFetchEthBalance: boolean | null\n  usdcBalance: bigint | null\n  refetchUsdcBalance: (() => void) | null\n  shouldFetchUsdcBalance: boolean | null\n  usdcApprovalToRamp: bigint | null\n  refetchUsdcApprovalToRamp: (() => void) | null\n  usdcApprovalToHdfcRamp: bigint | null\n  refetchUsdcApprovalToHdfcRamp: (() => void) | null\n  usdcApprovalToGarantiRamp: bigint | null\n  refetchUsdcApprovalToGarantiRamp: (() => void) | null\n  usdcApprovalToRevolutRamp: bigint | null\n  refetchUsdcApprovalToRevolutRamp: (() => void) | null\n  usdcApprovalToSocketBridge: bigint | null\n  refetchUsdcApprovalToSocketBridge: (() => void) | null\n  usdcApprovalToLifiBridge: bigint | null\n  refetchUsdcApprovalToLifiBridge: (() => void) | null\n}\n\nconst defaultValues: BalancesValues = {\n  ethBalance: null,\n  refetchEthBalance: null,\n  shouldFetchEthBalance: null,\n  usdcBalance: null,\n  refetchUsdcBalance: null,\n  shouldFetchUsdcBalance: null,\n  usdcApprovalToRamp: null,\n  refetchUsdcApprovalToRamp: null,\n  usdcApprovalToHdfcRamp: null,\n  refetchUsdcApprovalToHdfcRamp: null,\n  usdcApprovalToGarantiRamp: null,\n  refetchUsdcApprovalToGarantiRamp: null,\n  usdcApprovalToRevolutRamp: null,\n  refetchUsdcApprovalToRevolutRamp: null,\n  usdcApprovalToSocketBridge: null,\n  refetchUsdcApprovalToSocketBridge: null,\n  usdcApprovalToLifiBridge: null,\n  refetchUsdcApprovalToLifiBridge: null,\n};\n\nconst BalancesContext = createContext<BalancesValues>(defaultValues)\n\nexport default BalancesContext\n"
  },
  {
    "path": "client/src/contexts/common/Balances/BalancesProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { erc20ABI, useBalance, useContractRead } from 'wagmi'\n\nimport { esl, ZERO, ZERO_ADDRESS } from '@helpers/constants'\nimport useAccount from '@hooks/useAccount'\nimport useSmartContracts from '@hooks/useSmartContracts'\n\nimport BalancesContext from './BalancesContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst BalancesProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const {\n    venmoRampAddress,\n    hdfcRampAddress,\n    garantiRampAddress,\n    revolutRampAddress,\n    usdcAddress,\n    socketBridgeAddress,\n    lifiBridgeAddress\n  } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [ethBalance, setEthBalance] = useState<bigint | null>(null);\n  const [usdcBalance, setUsdcBalance] = useState<bigint | null>(null);\n  const [usdcApprovalToRamp, setUsdcApprovalToRamp] = useState<bigint | null>(null);\n  const [usdcApprovalToHdfcRamp, setUsdcApprovalToHdfcRamp] = useState<bigint | null>(null);\n  const [usdcApprovalToGarantiRamp, setUsdcApprovalToGarantiRamp] = useState<bigint | null>(null);\n  const [usdcApprovalToRevolutRamp, setUsdcApprovalToRevolutRamp] = useState<bigint | null>(null);\n\n  const [usdcApprovalToSocketBridge, setUsdcApprovalToSocketBridge] = useState<bigint | null>(null);\n  const [usdcApprovalToLifiBridge, setUsdcApprovalToLifiBridge] = useState<bigint | null>(null);\n\n  const [shouldFetchEthBalance, setShouldFetchEthBalance] = useState<boolean>(false);\n  const [shouldFetchUsdcBalance, setShouldFetchUsdcBalance] = useState<boolean>(false);\n  const [shouldFetchUsdcApprovalToRamp, setShouldFetchUsdcApprovalToRamp] = useState<boolean>(false);\n  const [shouldFetchUsdcApprovalToSocketBridge, setShouldFetchUsdcApprovalToSocketBridge] = useState<boolean>(false);\n  const [shouldFetchUsdcApprovalToLifiBridge, setShouldFetchUsdcApprovalToLifiBridge] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  const {\n    data: ethBalanceRaw,\n    refetch: refetchEthBalance,\n  } = useBalance({\n    address: loggedInEthereumAddress ?? ZERO_ADDRESS,\n    enabled: shouldFetchEthBalance,\n  });\n\n  const {\n    data: usdcBalanceRaw,\n    refetch: refetchUsdcBalance,\n  } = useBalance({\n    address: loggedInEthereumAddress ?? ZERO_ADDRESS,\n    token: usdcAddress,\n    enabled: shouldFetchUsdcBalance,\n  })\n\n  const {\n    data: usdcApprovalToRampRaw,\n    refetch: refetchUsdcApprovalToRamp,\n  } = useContractRead({\n    address: usdcAddress,\n    abi: erc20ABI,\n    functionName: \"allowance\",\n    args: [\n      loggedInEthereumAddress ?? ZERO_ADDRESS,\n      venmoRampAddress\n    ],\n    enabled: shouldFetchUsdcApprovalToRamp,\n  });\n\n  const {\n    data: usdcApprovalToHdfcRampRaw,\n    refetch: refetchUsdcApprovalToHdfcRamp,\n  } = useContractRead({\n    address: usdcAddress,\n    abi: erc20ABI,\n    functionName: \"allowance\",\n    args: [\n      loggedInEthereumAddress ?? ZERO_ADDRESS,\n      hdfcRampAddress\n    ],\n    enabled: shouldFetchUsdcApprovalToRamp,\n  });\n\n  const {\n    data: usdcApprovalToGarantiRampRaw,\n    refetch: refetchUsdcApprovalToGarantiRamp,\n  } = useContractRead({\n    address: usdcAddress,\n    abi: erc20ABI,\n    functionName: \"allowance\",\n    args: [\n      loggedInEthereumAddress ?? ZERO_ADDRESS,\n      garantiRampAddress\n    ],\n    enabled: shouldFetchUsdcApprovalToRamp,\n  });\n\n  const {\n    data: usdcApprovalToRevolutRampRaw,\n    refetch: refetchUsdcApprovalToRevolutRamp,\n  } = useContractRead({\n    address: usdcAddress,\n    abi: erc20ABI,\n    functionName: \"allowance\",\n    args: [\n      loggedInEthereumAddress ?? ZERO_ADDRESS,\n      revolutRampAddress\n    ],\n    enabled: shouldFetchUsdcApprovalToRamp,\n  });\n\n  const {\n    data: usdcApprovalToSocketBridgeRaw,\n    refetch: refetchUsdcApprovalToSocketBridge,\n  } = useContractRead({\n    address: usdcAddress,\n    abi: erc20ABI,\n    functionName: \"allowance\",\n    args: [\n      loggedInEthereumAddress ?? ZERO_ADDRESS,\n        socketBridgeAddress\n    ],\n    enabled: shouldFetchUsdcApprovalToSocketBridge,\n  });\n\n  const {\n    data: usdcApprovalToLifiBridgeRaw,\n    refetch: refetchUsdcApprovalToLifiBridge,\n  } = useContractRead({\n    address: usdcAddress,\n    abi: erc20ABI,\n    functionName: \"allowance\",\n    args: [\n      loggedInEthereumAddress ?? ZERO_ADDRESS,\n      lifiBridgeAddress\n    ],\n    enabled: shouldFetchUsdcApprovalToLifiBridge,\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('shouldFetchEthBalance_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n\n    if (isLoggedIn && loggedInEthereumAddress) {\n      esl && console.log('shouldFetchEthBalance_2');\n\n      setShouldFetchEthBalance(true);\n    } else {\n      esl && console.log('shouldFetchEthBalance_3');\n\n      setShouldFetchEthBalance(false);\n\n      setEthBalance(null);\n      setUsdcBalance(null);\n      setUsdcApprovalToRamp(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress]);\n\n  useEffect(() => {\n    esl && console.log('shouldFetchUsdcBalanceAndApproval_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking venmoRampAddress: ', venmoRampAddress);\n    esl && console.log('checking usdcAddress: ', usdcAddress);\n\n    if (isLoggedIn && loggedInEthereumAddress && venmoRampAddress && usdcAddress) {\n      esl && console.log('shouldFetchUsdcBalanceAndApproval_2');\n\n      setShouldFetchUsdcBalance(true);\n      setShouldFetchUsdcApprovalToRamp(true);\n      setShouldFetchUsdcApprovalToSocketBridge(true);\n      setShouldFetchUsdcApprovalToLifiBridge(true);\n    } else {\n      esl && console.log('shouldFetchUsdcBalanceAndApproval_3');\n\n      setShouldFetchUsdcBalance(false);\n      setShouldFetchUsdcApprovalToRamp(false);\n      setShouldFetchUsdcApprovalToSocketBridge(false);\n      setShouldFetchUsdcApprovalToLifiBridge(false);\n\n      setEthBalance(null);\n      setUsdcBalance(null);\n      setUsdcApprovalToRamp(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, venmoRampAddress, usdcAddress]);\n  \n  useEffect(() => {\n    esl && console.log('ethBalanceRaw_1');\n    esl && console.log('checking ethBalanceRaw: ', ethBalanceRaw);\n  \n    if (ethBalanceRaw) {\n      esl && console.log('ethBalanceRaw_2');\n\n      const ethBalanceProcessed = ethBalanceRaw.value;\n\n      setEthBalance(ethBalanceProcessed);\n    } else {\n      esl && console.log('ethBalanceRaw_3');\n\n      setEthBalance(null);\n    }\n  }, [ethBalanceRaw]);\n\n  useEffect(() => {\n    esl && console.log('usdcBalanceRaw_1');\n    esl && console.log('checking usdcBalanceRaw: ', usdcBalanceRaw);\n  \n    if (usdcBalanceRaw) {\n      esl && console.log('usdcBalanceRaw_2');\n\n      const usdcBalanceRawProcessed = usdcBalanceRaw.value;\n\n      setUsdcBalance(usdcBalanceRawProcessed);\n    } else {\n      esl && console.log('usdcBalanceRaw_3');\n\n      setUsdcBalance(null);\n    }\n  }, [usdcBalanceRaw]);\n\n  useEffect(() => {\n    esl && console.log('usdcApprovalToRampRaw_1');\n    esl && console.log('checking usdcApprovalToRampRaw: ', usdcApprovalToRampRaw);\n  \n    if (usdcApprovalToRampRaw || usdcApprovalToRampRaw === ZERO) { // BigInt(0) is falsy\n      esl && console.log('usdcApprovalToRampRaw_2');\n\n      setUsdcApprovalToRamp(usdcApprovalToRampRaw);\n    } else {\n      esl && console.log('usdcApprovalToRampRaw_3');\n      \n      setUsdcApprovalToRamp(null);\n    }\n  }, [usdcApprovalToRampRaw]);\n\n  useEffect(() => {\n    esl && console.log('usdcApprovalToHdfcRampRaw_1');\n    esl && console.log('checking usdcApprovalToHdfcRampRaw: ', usdcApprovalToHdfcRampRaw);\n  \n    if (usdcApprovalToHdfcRampRaw || usdcApprovalToHdfcRampRaw === ZERO) { // BigInt(0) is falsy\n      esl && console.log('usdcApprovalToHdfcRampRaw_2');\n\n      setUsdcApprovalToHdfcRamp(usdcApprovalToHdfcRampRaw);\n    } else {\n      esl && console.log('usdcApprovalToHdfcRampRaw_3');\n      \n      setUsdcApprovalToHdfcRamp(null);\n    }\n  }, [usdcApprovalToHdfcRampRaw]);\n\n  useEffect(() => {\n    esl && console.log('usdcApprovalToGarantiRampRaw_1');\n    esl && console.log('checking usdcApprovalToGarantiRampRaw: ', usdcApprovalToGarantiRampRaw);\n  \n    if (usdcApprovalToGarantiRampRaw || usdcApprovalToGarantiRampRaw === ZERO) { // BigInt(0) is falsy\n      esl && console.log('usdcApprovalToGarantiRampRaw_2');\n\n      setUsdcApprovalToGarantiRamp(usdcApprovalToGarantiRampRaw);\n    } else {\n      esl && console.log('usdcApprovalToGarantiRampRaw_3');\n      \n      setUsdcApprovalToGarantiRamp(null);\n    }\n  }, [usdcApprovalToGarantiRampRaw]);\n\n  useEffect(() => {\n    esl && console.log('usdcApprovalToRevolutRampRaw_1');\n    esl && console.log('checking usdcApprovalToRevolutRampRaw: ', usdcApprovalToRevolutRampRaw);\n  \n    if (usdcApprovalToRevolutRampRaw || usdcApprovalToRevolutRampRaw === ZERO) { // BigInt(0) is falsy\n      esl && console.log('usdcApprovalToRevolutRampRaw_2');\n\n      setUsdcApprovalToRevolutRamp(usdcApprovalToRevolutRampRaw);\n    } else {\n      esl && console.log('usdcApprovalToRevolutRampRaw_3');\n      \n      setUsdcApprovalToRevolutRamp(null);\n    }\n  }, [usdcApprovalToRevolutRampRaw]);\n\n  useEffect(() => {\n    esl && console.log('usdcApprovalToSocketBridgeRaw_1');\n    esl && console.log('checking usdcApprovalToSocketBridgeRaw: ', usdcApprovalToSocketBridgeRaw);\n  \n    if (usdcApprovalToSocketBridgeRaw || usdcApprovalToSocketBridgeRaw === ZERO) { // BigInt(0) is falsy\n      esl && console.log('usdcApprovalToSocketBridgeRaw_2');\n\n      setUsdcApprovalToSocketBridge(usdcApprovalToSocketBridgeRaw);\n    } else {\n      esl && console.log('usdcApprovalToSocketBridgeRaw_3');\n      \n      setUsdcApprovalToSocketBridge(null);\n    }\n  }, [usdcApprovalToSocketBridgeRaw]);\n\n  useEffect(() => {\n    esl && console.log('usdcApprovalToLifiBridgeRaw_1');\n    esl && console.log('checking usdcApprovalToLifiBridgeRaw: ', usdcApprovalToLifiBridgeRaw);\n  \n    if (usdcApprovalToLifiBridgeRaw || usdcApprovalToLifiBridgeRaw === ZERO) { // BigInt(0) is falsy\n      esl && console.log('usdcApprovalToLifiBridgeRaw_2');\n\n      setUsdcApprovalToLifiBridge(usdcApprovalToLifiBridgeRaw);\n    } else {\n      esl && console.log('usdcApprovalToLifiBridgeRaw_3');\n      \n      setUsdcApprovalToLifiBridge(null);\n    }\n  }, [usdcApprovalToLifiBridgeRaw]);\n\n  return (\n    <BalancesContext.Provider\n      value={{\n        ethBalance,\n        refetchEthBalance,\n        shouldFetchEthBalance,\n        usdcBalance,\n        refetchUsdcBalance,\n        shouldFetchUsdcBalance,\n        usdcApprovalToRamp,\n        refetchUsdcApprovalToRamp,\n        usdcApprovalToHdfcRamp,\n        refetchUsdcApprovalToHdfcRamp,\n        usdcApprovalToGarantiRamp,\n        refetchUsdcApprovalToGarantiRamp,\n        usdcApprovalToRevolutRamp,\n        refetchUsdcApprovalToRevolutRamp,\n        usdcApprovalToSocketBridge,\n        refetchUsdcApprovalToSocketBridge,\n        usdcApprovalToLifiBridge,\n        refetchUsdcApprovalToLifiBridge\n      }}\n    >\n      {children}\n    </BalancesContext.Provider>\n  );\n};\n\nexport default BalancesProvider\n"
  },
  {
    "path": "client/src/contexts/common/Balances/index.ts",
    "content": "export { default as BalancesContext } from './BalancesContext'\nexport { default as BalancesProvider } from './BalancesProvider'\n"
  },
  {
    "path": "client/src/contexts/common/DenyList/DenyListContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface DenyListValues {\n  venmoDepositorDenyList: string[] | null;\n  fetchVenmoDepositorDenyList: () => Promise<string[] | null>;\n  hdfcDepositorDenyList: string[] | null;\n  fetchHdfcDepositoryDenyList: () => Promise<string[] | null>;\n  garantiDepositorDenyList: string[] | null;\n  fetchGarantiDepositoryDenyList: () => Promise<string[] | null>;\n};\n\nconst defaultValues: DenyListValues = {\n  venmoDepositorDenyList: null,\n  fetchVenmoDepositorDenyList: async () => null,\n  hdfcDepositorDenyList: null,\n  fetchHdfcDepositoryDenyList: async () => null,\n  garantiDepositorDenyList: null,\n  fetchGarantiDepositoryDenyList: async () => null\n};\n\nconst DenyListContext = createContext<DenyListValues>(defaultValues);\n\nexport default DenyListContext;\n"
  },
  {
    "path": "client/src/contexts/common/DenyList/DenyListProvider.tsx",
    "content": "import React, { useCallback, useState, ReactNode } from 'react';\n\nimport useGithubClient from '@hooks/useGithubClient';\n\n\nimport DenyListContext from './DenyListContext';\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst DenyListProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Context\n   */\n\n  const { fetchData } = useGithubClient();\n\n  /*\n   * State\n   */\n\n  const [venmoDepositorDenyList, setVenmoDepositorDenyList] = useState<string[] | null>(null);\n  const [hdfcDepositorDenyList, setHdfcDepositorDenyList] = useState<string[] | null>(null);\n  const [garantiDepositorDenyList, setGarantiDepositorDenyList] = useState<string[] | null>(null);\n\n  const fetchDenyList = useCallback(async (url: string, storageKey: string, setter: any) => {\n    const cachedData = localStorage.getItem(storageKey);\n    const now = new Date();\n\n    if (cachedData) {\n      const { data: storedData, timestamp } = JSON.parse(cachedData);\n\n      if (now.getTime() - timestamp < 60000) { // 1 min\n        setter(storedData);\n\n        return storedData;\n      }\n    }\n\n    const fetchedData = await fetchData(url);\n    if (fetchedData && fetchedData.denyList) {\n      setter(fetchedData.denyList);\n\n      localStorage.setItem(storageKey, JSON.stringify({\n        data: fetchedData.denyList,\n        timestamp: now.getTime()\n      }));\n\n      return fetchedData.denyList;\n    }\n    return null;\n  }, [fetchData]);\n\n  const fetchHdfcDepositoryDenyList = useCallback(async () => {\n    const HDFC_DENY_LIST_URL = process.env.HDFC_DENY_LIST_URL;\n    if (!HDFC_DENY_LIST_URL) {\n      throw new Error(\"HDFC_DENY_LIST_URL environment variable is not defined.\");\n    }\n\n    const denyList = await fetchDenyList(HDFC_DENY_LIST_URL, 'hdfcDepositorDenyList', setHdfcDepositorDenyList);\n\n    return denyList;\n  }, [fetchDenyList]);\n\n  const fetchGarantiDepositoryDenyList = useCallback(async () => {\n    const GARANTI_DENY_LIST_URL = process.env.GARANTI_DENY_LIST_URL;\n    if (!GARANTI_DENY_LIST_URL) {\n      throw new Error(\"GARANTI_DENY_LIST_URL environment variable is not defined.\");\n    }\n\n    const denyList = await fetchDenyList(GARANTI_DENY_LIST_URL, 'garantiDepositorDenyList', setGarantiDepositorDenyList);\n    \n    return denyList;\n  }, [fetchDenyList]);\n\n  const fetchVenmoDepositorDenyList = useCallback(async () => {\n    const VENMO_DENY_LIST_URL = process.env.VENMO_DENY_LIST_URL;\n    if (!VENMO_DENY_LIST_URL) {\n      throw new Error(\"VENMO_DENY_LIST_URL environment variable is not defined.\");\n    }\n\n    const denyList = await fetchDenyList(VENMO_DENY_LIST_URL, 'venmoDepositorDenyList', setVenmoDepositorDenyList);\n\n    return denyList;\n  }, [fetchDenyList]);\n\n  return (\n    <DenyListContext.Provider value={{\n      venmoDepositorDenyList,\n      fetchVenmoDepositorDenyList,\n      hdfcDepositorDenyList,\n      fetchHdfcDepositoryDenyList,\n      garantiDepositorDenyList,\n      fetchGarantiDepositoryDenyList\n    }}>\n      {children}\n    </DenyListContext.Provider>\n  );\n};\n\nexport default DenyListProvider;\n"
  },
  {
    "path": "client/src/contexts/common/DenyList/index.ts",
    "content": "export { default as DenyListContext } from './DenyListContext'\nexport { default as DenyListProvider } from './DenyListProvider'\n"
  },
  {
    "path": "client/src/contexts/common/ExtensionNotarizations/ExtensionNotarizationsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { ExtensionNotaryProofRequest } from '@hooks/useBrowserExtension';\n\n\ninterface ExtensionNotarizationsValues {\n  isSidebarInstalled: boolean;\n  sideBarVersion: string | null;\n  postOnramperIntent: (paymentPlatform: string, onramperIntent: string, fiatToSend: string) => void;\n  openSidebarRegistration: () => void;\n  openSidebarOnramp: () => void;\n  refetchExtensionVersion: () => void;\n  refetchProfileRequests: () => void;\n  refetchTransferRequests: () => void;\n  profileProofs: ExtensionNotaryProofRequest[] | null;\n  transferProofs: ExtensionNotaryProofRequest[] | null;\n};\n\nconst defaultValues: ExtensionNotarizationsValues = {\n  isSidebarInstalled: false,\n  sideBarVersion: null,\n  postOnramperIntent: () => {},\n  openSidebarRegistration: () => {},\n  openSidebarOnramp: () => {},\n  refetchExtensionVersion: () => {},\n  refetchProfileRequests: () => {},\n  refetchTransferRequests: () => {},\n  profileProofs: null,\n  transferProofs: null,\n};\n\nconst ExtensionNotarizationsContext = createContext<ExtensionNotarizationsValues>(defaultValues);\n\nexport default ExtensionNotarizationsContext;\n"
  },
  {
    "path": "client/src/contexts/common/ExtensionNotarizations/ExtensionNotarizationsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\n\n// import { esl } from '@helpers/constants';\nimport { PaymentPlatformType } from '@helpers/types';\nimport {\n  ExtensionEventMessage,\n  ExtensionNotaryProofRequest,\n  ExtensionEventVersionMessage,\n  ExtensionPostMessage,\n  ExtensionReceiveMessage,\n} from '@hooks/useBrowserExtension';\n\nimport ExtensionNotarizationsContext from './ExtensionNotarizationsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n};\n\nconst ExtensionNotarizationsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  // no-op\n\n  /*\n   * State\n   */\n\n  const [isSidebarInstalled, setIsSidebarInstalled] = useState<boolean>(false);\n  const [sideBarVersion, setSideBarVersion] = useState<string | null>(null);\n\n  const [profileProofs, setProfileProofs] = useState<ExtensionNotaryProofRequest[] | null>(null);\n  const [transferProofs, setTransferProofs] = useState<ExtensionNotaryProofRequest[] | null>(null);\n\n  /*\n   * Extension Storage Reads\n   */\n\n  const refetchExtensionVersion = () => {\n    window.postMessage({ type: ExtensionPostMessage.FETCH_EXTENSION_VERSION }, '*');\n\n    // console.log('Posted Message: ', ExtensionPostMessage.FETCH_EXTENSION_VERSION);\n  };\n\n  const refetchProfileRequests = () => {\n    window.postMessage({ type: ExtensionPostMessage.FETCH_PROFILE_REQUEST_HISTORY }, '*');\n\n    // console.log('Posted Message: ', ExtensionPostMessage.FETCH_PROFILE_REQUEST_HISTORY);\n  };\n\n  const refetchTransferRequests = () => {\n    window.postMessage({ type: ExtensionPostMessage.FETCH_TRANSFER_REQUEST_HISTORY }, '*');\n\n    // console.log('Posted Message: ', ExtensionPostMessage.FETCH_TRANSFER_REQUEST_HISTORY);\n  };\n\n  const openSidebarRegistration = () => {\n    window.postMessage({ type: ExtensionPostMessage.OPEN_SIDEBAR_REGISTRATION }, '*');\n\n    // console.log('Posted Message: ', ExtensionPostMessage.OPEN_SIDEBAR_REGISTRATION);\n  };\n\n  const openSidebarOnramp = () => {\n    window.postMessage({ type: ExtensionPostMessage.OPEN_SIDEBAR_ONRAMP }, '*');\n\n    // console.log('Posted Message: ', ExtensionPostMessage.OPEN_OPEN_SIDEBAR_ONRAMP);\n  };\n\n  const postOnramperIntent = (platform: PaymentPlatformType, onramperIntent: string, fiatToSend: string) => {\n    window.postMessage({ type: ExtensionPostMessage.POST_ONRAMPER_INTENT, platform, onramperIntent, fiatToSend }, '*');\n\n    // console.log('Posted Message: ', ExtensionPostMessage.POST_ONRAMPER_INTENT);\n  };\n\n  /*\n   * Handlers\n   */\n\n  const handleExtensionMessage = function(event: any) {\n    if (event.origin !== window.location.origin) {\n      return;\n    };\n\n    if (event.data.type && event.data.type === ExtensionReceiveMessage.EXTENSION_VERSION_RESPONSE) {\n      handleExtensionVersionMessageReceived(event);\n    };\n\n    if (event.data.type && event.data.type === ExtensionReceiveMessage.PROFILE_REQUEST_HISTORY_RESPONSE) {\n      handleExtensionProfileHistoryMessageReceived(event);\n    };\n\n    if (event.data.type && event.data.type === ExtensionReceiveMessage.TRANSFER_REQUEST_HISTORY_RESPONSE) {\n      handleExtensionTransferHistoryMessageReceived(event);\n    };\n  };\n\n  const handleExtensionVersionMessageReceived = function(event: ExtensionEventVersionMessage) {\n    // console.log('Client received EXTENSION_VERSION_RESPONSE message');\n\n    const version = event.data.version;\n\n    // console.log('Extension Version: ', version);\n\n    setSideBarVersion(version);\n    setIsSidebarInstalled(true);\n  };\n\n  const handleExtensionProfileHistoryMessageReceived = function(event: ExtensionEventMessage) {\n    // console.log('Client received REQUEST_PROFILE_HISTORY_RESPONSE message');\n\n    if (event.data.requestHistory && event.data.requestHistory.notaryRequests) {\n      const requestHistory = event.data.requestHistory.notaryRequests;\n\n      setProfileProofs(requestHistory);\n    } else {\n      // console.log('REQUEST_HISTORY_RESPONSE was blank');\n\n      setProfileProofs(null);\n    }\n  };\n\n  const handleExtensionTransferHistoryMessageReceived = function(event: ExtensionEventMessage) {\n    // console.log('Client received REQUEST_TRANSFER_RESPONSE message');\n\n    if (event.data.requestHistory && event.data.requestHistory.notaryRequests) {\n      const requestHistory = event.data.requestHistory.notaryRequests;\n\n      setTransferProofs(requestHistory);\n    } else {\n      // console.log('REQUEST_TRANSFER_RESPONSE was blank');\n\n      setTransferProofs(null);\n    }\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    refetchExtensionVersion();\n  }, []);\n\n  useEffect(() => {\n    window.addEventListener(\"message\", handleExtensionMessage);\n  \n    return () => {\n      window.removeEventListener(\"message\", handleExtensionMessage);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <ExtensionNotarizationsContext.Provider\n      value={{\n        isSidebarInstalled,\n        sideBarVersion,\n        postOnramperIntent,\n        openSidebarRegistration,\n        openSidebarOnramp,\n        refetchExtensionVersion,\n        refetchProfileRequests,\n        refetchTransferRequests,\n        profileProofs,\n        transferProofs,\n      }}\n    >\n      {children}\n    </ExtensionNotarizationsContext.Provider>\n  );\n};\n\nexport default ExtensionNotarizationsProvider;\n"
  },
  {
    "path": "client/src/contexts/common/ExtensionNotarizations/index.ts",
    "content": "export { default as ExtensionNotarizationsContext } from './ExtensionNotarizationsContext';\nexport { default as ExtensionNotarizationsProvider } from './ExtensionNotarizationsProvider';\n"
  },
  {
    "path": "client/src/contexts/common/GoogleAuth/GoogleAuthContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface GoogleAuthValues {\n  googleAuthToken: any | null;\n  isGoogleAuthed: boolean;\n  loggedInGmail: string | null;\n  scopesApproved: boolean;\n  googleLogIn: () => void;\n  googleLogOut: () => void;\n}\n\nconst defaultValues: GoogleAuthValues = {\n  googleAuthToken: null,\n  isGoogleAuthed: false,\n  loggedInGmail: null,\n  scopesApproved: false,\n  googleLogIn: () => {},\n  googleLogOut: () => {},\n};\n\nconst GoogleAuthContext = createContext<GoogleAuthValues>(defaultValues)\n\nexport default GoogleAuthContext\n"
  },
  {
    "path": "client/src/contexts/common/GoogleAuth/GoogleAuthProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport {\n  hasGrantedAllScopesGoogle,\n  useGoogleLogin,\n  googleLogout,\n} from '@react-oauth/google';\n\nimport { esl } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport { fetchProfile } from '@hooks/useGmailClient';\n\nimport GoogleAuthContext from './GoogleAuthContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst GoogleAuthProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { loggedInEthereumAddress } = useAccount()\n\n  /*\n   * State Keys\n   */\n\n  const getGoogleAuthTokenKey = () => {\n    return `googleAuthToken_${loggedInEthereumAddress}`;\n  }\n\n  /*\n   * State\n   */\n\n  const [googleAuthToken, setGoogleAuthToken] = useState<any | null>(\n    () => {\n      const cachedToken = localStorage.getItem(getGoogleAuthTokenKey());\n      return cachedToken ? JSON.parse(cachedToken) : null;\n    }\n  );\n\n  const [isGoogleAuthed, setIsGoogleAuthed] = useState<boolean>(false);\n  const [isScopesApproved, setIsScopesApproved] = useState<boolean>(false);\n  const [loggedInGmail, setLoggedInGmail] = useState<string | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('logoOutGoogleAuth');\n    esl && console.log('checking loggedInEthereumAddress', loggedInEthereumAddress);\n\n    if (!loggedInEthereumAddress) {\n      esl && console.log('logoOutGoogleAuth_1');\n\n      googleLogOut();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [loggedInEthereumAddress]);\n\n  useEffect(() => {\n    esl && console.log('googleAuthScopes_1');\n    esl && console.log('checking googleAuthToken', googleAuthToken);\n\n    if (googleAuthToken) {\n      esl && console.log('googleAuthScopes_2');\n\n      const allScope = hasGrantedAllScopesGoogle(\n        googleAuthToken,\n        'email',\n        'profile',\n        'https://www.googleapis.com/auth/gmail.readonly',\n      );\n      \n      setIsScopesApproved(allScope);\n    }\n  }, [googleAuthToken]);\n\n  useEffect(() => {\n    esl && console.log('googleProfile_1');\n    esl && console.log('checking googleAuthToken', googleAuthToken);\n\n    if (googleAuthToken) {\n      esl && console.log('googleProfile_2');\n\n      const fetchData = async () => {\n        try {\n          const email = await fetchProfile(googleAuthToken.access_token);\n\n          if (email) {\n            setLoggedInGmail(email);\n\n            localStorage.setItem('loggedInEmail', email);\n          }\n        } catch (error) {\n          console.error('Error in fetching profile data:', error);\n        }\n      };\n    \n      fetchData();\n    };\n  }, [googleAuthToken]);\n\n  /*\n   * Helpers\n   */\n\n  const googleLogIn = useGoogleLogin({\n    onSuccess: tokenResponse => {\n      setGoogleAuthToken(tokenResponse);\n      setIsGoogleAuthed(true);\n\n      localStorage.setItem(getGoogleAuthTokenKey(), JSON.stringify(tokenResponse));\n    },\n    scope: 'email profile https://www.googleapis.com/auth/gmail.readonly',\n  });\n\n  const googleLogOut = () => {\n    setIsScopesApproved(false);\n\n    setGoogleAuthToken(null);\n    localStorage.removeItem(getGoogleAuthTokenKey());\n  \n    setIsGoogleAuthed(false);\n    localStorage.removeItem('isGoogleAuthed');\n  \n    setLoggedInGmail(null);\n    localStorage.removeItem('loggedInGmail');\n  \n    googleLogout();\n  };\n\n  return (\n    <GoogleAuthContext.Provider\n      value={{\n        googleAuthToken,\n        isGoogleAuthed,\n        loggedInGmail,\n        scopesApproved: isScopesApproved,\n        googleLogIn,\n        googleLogOut,\n      }}\n    >\n      {children}\n    </GoogleAuthContext.Provider>\n  );\n};\n\nexport default GoogleAuthProvider\n"
  },
  {
    "path": "client/src/contexts/common/GoogleAuth/index.ts",
    "content": "export { default as GoogleAuthContext } from './GoogleAuthContext'\nexport { default as GoogleAuthProvider } from './GoogleAuthProvider'\n"
  },
  {
    "path": "client/src/contexts/common/ModalSettings/ModalSettingsContext.ts",
    "content": "import { createContext } from 'react';\n\n\ninterface ModalSettingsValues {\n  currentModal: string | null;\n  openModal: (modalId: string) => void;\n  closeModal: () => void;\n};\n\nconst ModalSettingsContext = createContext<ModalSettingsValues>({\n  currentModal: null as string | null,\n  openModal: (modalId: string) => {},\n  closeModal: () => {},\n});\n\nexport default ModalSettingsContext;\n"
  },
  {
    "path": "client/src/contexts/common/ModalSettings/ModalSettingsProvider.tsx",
    "content": "import React, { useCallback, useEffect, useState, ReactNode } from 'react'\nimport { isMobile } from 'react-device-detect';\n\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport { MODALS } from '@helpers/types';\n\nimport ModalSettingsContext from './ModalSettingsContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst ModalSettingsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Context\n   */\n\n  const {\n    PaymentPlatform,\n    paymentPlatform\n  } = usePlatformSettings();\n\n  /*\n   * State\n   */\n\n  const [currentModal, setCurrentModal] = useState<string | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (isMobile && paymentPlatform === PaymentPlatform.REVOLUT) {\n      setCurrentModal(MODALS.NOT_SUPPORTED_PLATFORM_DEVICE);\n    } else {\n      setCurrentModal(null);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isMobile, paymentPlatform]);\n  \n  /*\n   * Handlers\n   */\n\n  const openModal = useCallback((modalId: string) => {\n    setCurrentModal(modalId);\n  }, []);\n\n  const closeModal = useCallback(() => {\n    setCurrentModal(null);\n  }, []);\n\n  return (\n    <ModalSettingsContext.Provider\n      value={{\n        currentModal,\n        openModal,\n        closeModal\n      }}\n    >\n      {children}\n    </ModalSettingsContext.Provider>\n  );\n};\n\nexport default ModalSettingsProvider;\n"
  },
  {
    "path": "client/src/contexts/common/ModalSettings/index.ts",
    "content": "export { default as ModalSettingsContext } from './ModalSettingsContext';\nexport { default as ModalSettingsProvider } from './ModalSettingsProvider';"
  },
  {
    "path": "client/src/contexts/common/NotarySettings/NotarySettingsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport {\n  NotaryConnectionStatusType,\n  NotaryConnectionStatus,\n  NotaryConfiguration\n} from '@helpers/types';\n\n\ninterface NotarySettingsValues {\n  configuration: NotaryConfiguration | null;\n  connectionStatus: NotaryConnectionStatusType;\n  determineFastestNotary: (notaries: NotaryConfiguration[]) => Promise<NotaryConfiguration | null>;\n  uploadTimeForNotary: number | null;\n};\n\nconst defaultValues: NotarySettingsValues = {\n  configuration: null,\n  connectionStatus: NotaryConnectionStatus.DEFAULT,\n  determineFastestNotary: async () => null,\n  uploadTimeForNotary: null,\n};\n\nconst NotarySettingsContext = createContext<NotarySettingsValues>(defaultValues);\n\nexport default NotarySettingsContext;\n"
  },
  {
    "path": "client/src/contexts/common/NotarySettings/NotarySettingsProvider.tsx",
    "content": "import { useEffect, useState, ReactNode } from 'react';\n\nimport useRemoteNotaryUploadTest from '@hooks/useRemoteNotaryUploadTest';\n// import { esl } from '@helpers/constants';\nimport {\n  NotaryConnectionStatusType,\n  NotaryConnectionStatus,\n  NotaryConfiguration,\n  defaultNotaryConfigurations\n} from '@helpers/types';\nimport useGithubClient from '@hooks/useFetchNotaryList';\n\nimport NotarySettingsContext from './NotarySettingsContext';\n\n\nexport const UPLOAD_TIME_THRESHOLD = 5;\n\ninterface ProvidersProps {\n  children: ReactNode;\n};\n\nconst NotarySettingsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Context\n   */\n\n  const { fetchData } = useGithubClient();\n\n  /*\n   * State\n   */\n\n  const [notaryList, setNotaryList] = useState<NotaryConfiguration[] | null>(null);\n\n  const [connectionStatus, setConnectionStatus] = useState<NotaryConnectionStatusType>(NotaryConnectionStatus.DEFAULT);\n  const [configuration, setConfiguration] = useState<NotaryConfiguration | null>(null);\n\n  const {\n    uploadTime,\n    uploadFile\n  } = useRemoteNotaryUploadTest({\n    notaryUrl: configuration?.notary ?? '',\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (configuration) {\n      uploadFile();\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [configuration]);\n\n  useEffect(() => {\n    if (notaryList) {\n      determineFastestNotary(notaryList);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [notaryList]);\n\n  useEffect(() => {\n    const fetchNotaryList = async () => {\n      try {\n        const fetchNotaryListResponse = await fetchData();\n        \n        if (fetchNotaryListResponse && fetchNotaryListResponse.notaryList) {\n          setNotaryList(fetchNotaryListResponse.notaryList);\n        } else {\n          setNotaryList(defaultNotaryConfigurations);\n        }\n      } catch (error) {\n        setNotaryList(defaultNotaryConfigurations);\n      }\n    };\n\n    fetchNotaryList();\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (uploadTime) {\n      if (uploadTime < UPLOAD_TIME_THRESHOLD) {\n        setConnectionStatus(NotaryConnectionStatus.GREEN);\n      } else {\n        setConnectionStatus(NotaryConnectionStatus.RED);\n      }\n    } else {\n      setConnectionStatus(NotaryConnectionStatus.DEFAULT);\n    };\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [uploadTime]);\n\n  /*\n   * Helpers\n   */\n\n  const measureLatency = async (url: string): Promise<number> => {\n    const startTime = performance.now();\n    try {\n      const response = await fetch(`${url}/info`);\n      if (!response.ok) {\n        throw new Error('Network response was not ok');\n      }\n      const endTime = performance.now();\n\n      return endTime - startTime;\n    } catch (error) {\n      console.error(`Failed to measure latency for ${url}: ${error}`);\n\n      return Infinity;\n    }\n  };\n\n  const determineFastestNotary = async (notaries: NotaryConfiguration[]) => {\n    const latencies = await Promise.all(\n      notaries.map(notary => measureLatency(notary.notary))\n    );\n\n    const bestIndex = latencies.reduce((lowestIdx, currentLatency, idx, array) => \n      currentLatency !== Infinity && currentLatency > array[lowestIdx] ? idx : lowestIdx, 0);\n\n    const bestNotary = notaries[bestIndex];\n\n    if (latencies[bestIndex] !== Infinity) {\n      setConfiguration(bestNotary);\n\n      return bestNotary;\n    } else {\n      return null;\n    }\n  };\n\n  /*\n   * Provider\n   */\n\n  return (\n    <NotarySettingsContext.Provider\n      value={{\n        uploadTimeForNotary: uploadTime,\n        configuration,\n        connectionStatus,\n        determineFastestNotary,\n      }}\n    >\n      {children}\n    </NotarySettingsContext.Provider>\n  );\n};\n\nexport default NotarySettingsProvider;\n"
  },
  {
    "path": "client/src/contexts/common/NotarySettings/index.ts",
    "content": "export { default as NotarySettingsContext } from './NotarySettingsContext';\nexport { default as NotarySettingsProvider } from './NotarySettingsProvider';"
  },
  {
    "path": "client/src/contexts/common/PlatformSettings/PlatformSettingsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { CurrencyIndexType, PaymentPlatformType, PaymentPlatform, paymentPlatforms } from '@helpers/types';\n\n\ninterface PlatformSettingsValues {\n  paymentPlatform?: PaymentPlatformType;\n  setPaymentPlatform?: React.Dispatch<React.SetStateAction<PaymentPlatformType>>;\n  currencyIndex: CurrencyIndexType;\n  setCurrencyIndex: React.Dispatch<React.SetStateAction<CurrencyIndexType>>;\n  PaymentPlatform: typeof PaymentPlatform;\n  paymentPlatforms: PaymentPlatformType[];\n  reviewedRequirementsForPlatform: () => boolean;\n  markPlatformRequirementsAsReviewed: () => void;\n};\n\nconst defaultValues: PlatformSettingsValues = {\n  paymentPlatforms: paymentPlatforms,\n  PaymentPlatform,\n  reviewedRequirementsForPlatform: () => false,\n  markPlatformRequirementsAsReviewed: () => {},\n  currencyIndex: 0,\n  setCurrencyIndex: () => {},\n};\n\nconst PlatformSettingsContext = createContext<PlatformSettingsValues>(defaultValues);\n\nexport default PlatformSettingsContext;\n"
  },
  {
    "path": "client/src/contexts/common/PlatformSettings/PlatformSettingsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\n\nimport { CurrencyIndex, PaymentPlatform, PaymentPlatformType, paymentPlatforms } from '@helpers/types';\nimport useQuery from '@hooks/useQuery';\n\nimport PlatformSettingsContext from './PlatformSettingsContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n};\n\nconst PlatformSettingsProvider = ({ children }: ProvidersProps) => {\n  const { queryParams } = useQuery();\n  const platformFromQuery = queryParams.PLATFORM;\n  const currencyIndexFromQuery = queryParams.CURRENCY_INDEX;\n\n  /*\n   * State\n   */\n\n  const [paymentPlatform, setPaymentPlatform] = useState<PaymentPlatformType>(PaymentPlatform.VENMO);\n  const [currencyIndex, setCurrencyIndex] = useState<number>(CurrencyIndex.USD);\n\n  const [didUserReviewRequirementsForPlatform, setDidUserReviewRequirementsForPlatform] = useState<boolean>(false);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const storedSelectedPaymentPlatform = localStorage.getItem('storedSelectedPaymentPlatform');\n\n    if (storedSelectedPaymentPlatform) {\n      setPaymentPlatform(JSON.parse(storedSelectedPaymentPlatform));\n      setCurrencyIndex(Number(0));\n    }\n\n    if (platformFromQuery && currencyIndexFromQuery) {\n      const isValidPlatformFromQuery = Object.values(PaymentPlatform).includes(platformFromQuery);\n      const isValidCurrencyIndexFromQuery = Object.values(CurrencyIndex).includes(parseInt(currencyIndexFromQuery));\n\n      if (isValidPlatformFromQuery && isValidCurrencyIndexFromQuery) {\n        setPaymentPlatform(platformFromQuery as PaymentPlatformType);\n        setCurrencyIndex(parseInt(currencyIndexFromQuery));\n      }\n    }\n  }, [platformFromQuery, currencyIndexFromQuery]);\n\n  useEffect(() => {\n    if (paymentPlatform) {\n      localStorage.setItem('storedSelectedPaymentPlatform', JSON.stringify(paymentPlatform));\n      localStorage.setItem('storedSelectedCurrencyIndex', JSON.stringify(currencyIndex));\n    }\n  }, [paymentPlatform, currencyIndex]);\n\n  useEffect(() => {\n    const reviewStatusKey = getReviewStatusKey(paymentPlatform);\n    const storedReviewStatus = localStorage.getItem(reviewStatusKey);\n    \n    if (storedReviewStatus) {\n      setDidUserReviewRequirementsForPlatform(JSON.parse(storedReviewStatus));\n    }\n  }, [paymentPlatform]);\n\n  useEffect(() => {\n    const reviewStatusKey = getReviewStatusKey(paymentPlatform);\n\n    localStorage.setItem(reviewStatusKey, JSON.stringify(didUserReviewRequirementsForPlatform));\n  }, [didUserReviewRequirementsForPlatform, paymentPlatform]);\n\n  /*\n   * Public\n   */\n\n  const reviewedRequirementsForPlatform = () => {\n    const reviewStatusKey = getReviewStatusKey(paymentPlatform);\n    const storedReviewStatus = localStorage.getItem(reviewStatusKey);\n    \n    return storedReviewStatus ? JSON.parse(storedReviewStatus) : false;\n  };\n\n  const markPlatformRequirementsAsReviewed = () => {\n    setDidUserReviewRequirementsForPlatform(true);\n  };\n\n  /*\n   * Helpers\n   */\n\n  const getReviewStatusKey = (platform: PaymentPlatformType) => `storedReviewStatus_${platform}`;\n\n  return (\n    <PlatformSettingsContext.Provider\n      value={{\n        paymentPlatform,\n        setPaymentPlatform,\n        currencyIndex,\n        setCurrencyIndex,\n        PaymentPlatform,\n        paymentPlatforms,\n        reviewedRequirementsForPlatform,\n        markPlatformRequirementsAsReviewed\n      }}\n    >\n      {children}\n    </PlatformSettingsContext.Provider>\n  );\n};\n\nexport default PlatformSettingsProvider;\n"
  },
  {
    "path": "client/src/contexts/common/PlatformSettings/index.ts",
    "content": "export { default as PlatformSettingsContext } from './PlatformSettingsContext'\nexport { default as PlatformSettingsProvider } from './PlatformSettingsProvider'"
  },
  {
    "path": "client/src/contexts/common/ProofGenSettings/ProofGenSettingsContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface ProofGenSettingsValues {\n  isEmailModeAuth?: boolean;\n  isProvingTypeFast?: boolean;\n  isInputModeDrag?: boolean;\n  setIsEmailModeAuth?: React.Dispatch<React.SetStateAction<boolean>>;\n  setIsProvingTypeFast?: React.Dispatch<React.SetStateAction<boolean>>;\n  setIsInputModeDrag?: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst ProofGenSettingsContext = createContext<ProofGenSettingsValues>({})\n\nexport default ProofGenSettingsContext\n"
  },
  {
    "path": "client/src/contexts/common/ProofGenSettings/ProofGenSettingsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\n\nimport ProofGenSettingsContext from './ProofGenSettingsContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\n/*\n * Example with loading: https://github.com/upmostly/react-context-example/blob/master/src/Contexts/PostProvider.js\n */\n\nconst ProofGenSettingsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * State\n   */\n\n  const storedProvingTypeSetting = localStorage.getItem('isProvingTypeRemote');\n  const storedEmailInputSetting = localStorage.getItem('isEmailInputPreferenceDrag');\n  const storedEmailModeSetting = localStorage.getItem('isEmailModeAuth');\n\n  const [isProvingTypeRemote, setIsProvingTypeRemote] = useState<boolean>(\n    storedProvingTypeSetting !== null ? JSON.parse(storedProvingTypeSetting) : true\n  );\n\n  const [isEmailInputSettingDrag, setIsEmailInputSettingDrag] = useState<boolean>(\n    storedEmailInputSetting !== null ? JSON.parse(storedEmailInputSetting) : true\n  );\n\n  const [isEmailModeAuth, setIsEmailModeAuth] = useState<boolean>(\n    storedEmailModeSetting !== null ? JSON.parse(storedEmailModeSetting) : true\n  );\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    localStorage.setItem('isProvingTypeRemote', JSON.stringify(isProvingTypeRemote));\n  }, [isProvingTypeRemote]);\n\n  useEffect(() => {\n    localStorage.setItem('isEmailInputPreferenceDrag', JSON.stringify(isEmailInputSettingDrag));\n  }, [isEmailInputSettingDrag]);\n\n  useEffect(() => {\n    localStorage.setItem('isEmailModeAuth', JSON.stringify(isEmailModeAuth));\n  }, [isEmailModeAuth]);\n\n  return (\n    <ProofGenSettingsContext.Provider\n      value={{\n        isEmailModeAuth,\n        isProvingTypeFast: isProvingTypeRemote,\n        isInputModeDrag: isEmailInputSettingDrag,\n        setIsEmailModeAuth,\n        setIsProvingTypeFast: setIsProvingTypeRemote,\n        setIsInputModeDrag: setIsEmailInputSettingDrag,\n      }}\n    >\n      {children}\n    </ProofGenSettingsContext.Provider>\n  );\n};\n\nexport default ProofGenSettingsProvider\n"
  },
  {
    "path": "client/src/contexts/common/ProofGenSettings/index.ts",
    "content": "export { default as ProofGenSettingsContext } from './ProofGenSettingsContext'\nexport { default as ProofGenSettingsProvider } from './ProofGenSettingsProvider'"
  },
  {
    "path": "client/src/contexts/common/SendSettings/SendSettingsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport {\n  ReceiveNetworkType,\n  ReceiveNetwork,\n  receiveNetworks,\n  ReceiveTokenType,\n} from '@helpers/types';\n\n\ninterface SendSettingsValues {\n  receiveNetwork?: ReceiveNetworkType;\n  setReceiveNetwork?: React.Dispatch<React.SetStateAction<ReceiveNetworkType>>;\n  ReceiveNetwork: typeof ReceiveNetwork;\n  receiveNetworks: ReceiveNetworkType[];\n  receiveToken?: ReceiveTokenType;\n  setReceiveToken?: React.Dispatch<React.SetStateAction<ReceiveTokenType>>;\n};\n\nconst defaultValues: SendSettingsValues = {\n  receiveNetworks,\n  ReceiveNetwork,\n};\n\nconst SendSettingsContext = createContext<SendSettingsValues>(defaultValues);\n\nexport default SendSettingsContext;\n"
  },
  {
    "path": "client/src/contexts/common/SendSettings/SendSettingsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\n\nimport {\n  ReceiveNetworkType,\n  ReceiveNetwork,\n  receiveNetworks,\n  ReceiveTokenType,\n  ReceiveToken,\n  networkSupportedTokens\n} from '@helpers/types';\nimport useQuery from '@hooks/useQuery';\n\nimport SendSettingsContext from './SendSettingsContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n};\n\nconst SendSettingsProvider = ({ children }: ProvidersProps) => {\n  const { queryParams } = useQuery();\n  const networkFromQuery = queryParams.NETWORK;\n  const tokenFromQuery = queryParams.TO_TOKEN;\n\n  /*\n   * State\n   */\n\n  const [receiveNetwork, setReceiveNetwork] = useState<ReceiveNetworkType>(ReceiveNetwork.ZKSYNC);\n\n  const [receiveToken, setReceiveToken] = useState<ReceiveTokenType>(ReceiveToken.USDC);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const storedSelectedReceiveNetwork = localStorage.getItem('storedSelectedReceiveNetwork');\n    \n    if (storedSelectedReceiveNetwork) {\n      setReceiveNetwork(JSON.parse(storedSelectedReceiveNetwork));\n    }\n\n    if (networkFromQuery) {\n      const isValidNetworkFromQuery = Object.values(ReceiveNetwork).includes(networkFromQuery as ReceiveNetworkType);\n\n      if (isValidNetworkFromQuery) {\n        setReceiveNetwork(networkFromQuery as ReceiveNetworkType);\n      }\n    }\n  }, [networkFromQuery]);\n\n  useEffect(() => {\n    if (receiveNetwork) {\n      localStorage.setItem('storedSelectedReceiveNetwork', JSON.stringify(receiveNetwork));\n\n      const newReceiveToken = networkSupportedTokens[receiveNetwork][0];\n      setReceiveToken(newReceiveToken);\n\n      if (tokenFromQuery) {\n        const isValidTokenFromQuery = networkSupportedTokens[receiveNetwork].includes(tokenFromQuery as ReceiveTokenType);\n  \n        if (isValidTokenFromQuery) {\n          setReceiveToken(tokenFromQuery as ReceiveTokenType);\n        }\n      }\n    }\n  }, [receiveNetwork, tokenFromQuery]);\n\n  useEffect(() => {\n    const storedSelectedReceiveToken = localStorage.getItem('storedSelectedReceiveToken');\n    \n    if (storedSelectedReceiveToken) {\n      setReceiveToken(JSON.parse(storedSelectedReceiveToken));\n    }\n  }, []);\n\n  useEffect(() => {\n    if (receiveToken) {\n      localStorage.setItem('storedSelectedReceiveToken', JSON.stringify(receiveToken));\n    }\n  }, [receiveToken]);\n\n  return (\n    <SendSettingsContext.Provider\n      value={{\n        receiveNetwork,\n        setReceiveNetwork,\n        ReceiveNetwork,\n        receiveNetworks,\n        receiveToken,\n        setReceiveToken\n      }}\n    >\n      {children}\n    </SendSettingsContext.Provider>\n  );\n};\n\nexport default SendSettingsProvider;\n"
  },
  {
    "path": "client/src/contexts/common/SendSettings/index.ts",
    "content": "export { default as SendSettingsContext } from './SendSettingsContext'\nexport { default as SendSettingsProvider } from './SendSettingsProvider'"
  },
  {
    "path": "client/src/contexts/common/SmartContracts/SmartContractsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { Abi } from '@helpers/types';\n\n\ninterface SmartContractsValues {\n  blockscanUrl?: string | null;\n  usdcAddress: string | null;\n  usdcAbi?: Abi | null;\n  \n  // legacy\n  legacyRampAddress: string | null;\n  legacyRampAbi: Abi | null;\n  legacyNftAddress: string | null;\n\n  // venmo\n  venmoRampAddress: string | null;\n  venmoRampAbi: Abi | null;\n  venmoRegistrationProcessorAddress: string | null;\n  venmoSendProcessorAddress: string | null;\n  venmoSendProcessorAbi: Abi | null;\n  \n  // hdfc\n  hdfcRampAddress: string | null;\n  hdfcRampAbi: Abi | null;\n  hdfcSendProcessorAddress: string | null;\n  hdfcSendProcessorAbi: Abi | null;\n\n  // garanti\n  garantiRampAddress: string | null;\n  garantiRampAbi: Abi | null;\n  garantiSendProcessorAddress: string | null;\n  garantiSendProcessorAbi: Abi | null;\n\n  // revolut\n  revolutRampAddress: string | null;\n  revolutRampAbi: Abi | null;\n  revolutSendProcessorAddress: string | null;\n  revolutSendProcessorAbi: Abi | null;\n  revolutAccountRegistryAddress: string | null;\n  revolutAccountRegistryAbi: Abi | null;\n\n  // nft\n  nftAbi: Abi | null;\n  venmoNftAddress: string | null;\n  hdfcNftAddress: string | null;\n  garantiNftAddress: string | null;\n  revolutNftAddress: string | null;\n\n  // Socket\n  socketBridgeAddress: string | null;\n  \n  // Lifi\n  lifiBridgeAddress: string | null;\n}\n\nconst defaultValues: SmartContractsValues = {\n  blockscanUrl: null,\n  usdcAddress: null,\n  usdcAbi: null,\n\n  // legacy\n  legacyRampAddress: null,\n  legacyRampAbi: null,\n  legacyNftAddress: null,\n  \n  // venmo\n  venmoRampAddress: null,\n  venmoRampAbi: null,\n  venmoRegistrationProcessorAddress: null,\n  venmoSendProcessorAddress: null,\n  venmoSendProcessorAbi: null,\n  \n  // hdfc\n  hdfcRampAddress: null,\n  hdfcRampAbi: null,\n  hdfcSendProcessorAddress: null,\n  hdfcSendProcessorAbi: null,\n\n  // garanti\n  garantiRampAddress: null,\n  garantiRampAbi: null,\n  garantiSendProcessorAddress: null,\n  garantiSendProcessorAbi: null,\n\n  // revolut\n  revolutRampAddress: null,\n  revolutRampAbi: null,\n  revolutSendProcessorAddress: null,\n  revolutSendProcessorAbi: null,\n  revolutAccountRegistryAddress: null,\n  revolutAccountRegistryAbi: null,\n  \n  // nft\n  nftAbi: null,\n  venmoNftAddress: null,\n  hdfcNftAddress: null,\n  garantiNftAddress: null,\n  revolutNftAddress: null,\n\n  // Socket\n  socketBridgeAddress: null,\n  \n  // Lifi\n  lifiBridgeAddress: null,\n};\n\nconst SmartContractsContext = createContext<SmartContractsValues>(defaultValues)\n\nexport default SmartContractsContext\n"
  },
  {
    "path": "client/src/contexts/common/SmartContracts/SmartContractsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { erc20ABI } from 'wagmi';\n\nimport { abi as legacyRampAbi } from \"@helpers/abi/legacy/ramp.abi\";\nimport { abi as nftAbi } from \"@helpers/abi/legacy/nft.abi\";\n\nimport { abi as venmoRampAbi } from \"@helpers/abi/venmo/ramp.abi\";\nimport { abi as sendProcessorAbi } from \"@helpers/abi/venmo/send.abi\";\n\nimport { abi as hdfcRampAbi } from \"@helpers/abi/hdfc/ramp.abi\";\nimport { abi as hdfcSendProcessorAbi } from \"@helpers/abi/hdfc/send.abi\";\n\nimport { abi as garantiRampAbi } from \"@helpers/abi/garanti/ramp.abi\";\nimport { abi as garantiSendProcessorAbi } from \"@helpers/abi/garanti/send.abi\";\n\nimport { abi as revolutRampAbi } from \"@helpers/abi/revolut/ramp.abi\";\nimport { abi as revolutSendProcessorAbi } from \"@helpers/abi/revolut/send.abi\";\nimport { abi as revolutAccountRegistryAbi } from \"@helpers/abi/revolut/accountRegistry.abi\";\n\nimport { contractAddresses, blockExplorerUrls } from \"@helpers/deployed_addresses\";\nimport { esl, DEFAULT_NETWORK } from '@helpers/constants';\nimport { Abi } from '@helpers/types';\nimport useAccount from '@hooks/useAccount'\n\nimport SmartContractsContext from './SmartContractsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst SmartContractsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Context\n   */\n\n  const { network, isLoggedIn } = useAccount();\n\n  /*\n   * State\n   */\n\n  const [usdcAddress, setUsdcAddress] = useState<string | null>(null);\n  const [blockscanUrl, setBlockscanUrl] = useState<string>(blockExplorerUrls[DEFAULT_NETWORK]);\n\n  // Legacy\n  const [legacyRampAddress, setLegacyRampAddress] = useState<string | null>(null);\n  const [legacyNftAddress, setLegacyNftAddress] = useState<string | null>(null);\n\n  // Venmo\n  const [venmoRampAddress, setVenmoRampAddress] = useState<string | null>(null);\n  const [venmoSendProcessorAddress, setVenmoSendProcessorAddress] = useState<string | null>(null);\n  const [venmoRegistrationProcessorAddress, setVenmoRegistrationProcessorAddress] = useState<string | null>(null);\n\n  // HDFC\n  const [hdfcRampAddress, setHdfcRampAddress] = useState<string | null>(null);\n  const [hdfcSendProcessorAddress, setHdfcSendProcessorAddress] = useState<string | null>(null);\n\n  // Garanti\n  const [garantiRampAddress, setGarantiRampAddress] = useState<string | null>(null);\n  const [garantiSendProcessorAddress, setGarantiSendProcessorAddress] = useState<string | null>(null);\n\n  // Revolut\n  const [revolutRampAddress, setRevolutRampAddress] = useState<string | null>(null);\n  const [revolutSendProcessorAddress, setRevolutSendProcessorAddress] = useState<string | null>(null);\n  const [revolutAccountRegistryAddress, setRevolutAccountRegistryAddress] = useState<string | null>(null);\n\n  // NFT\n  const [venmoNftAddress, setVenmoNftAddress] = useState<string | null>(null);\n  const [hdfcNftAddress, setHdfcNftAddress] = useState<string | null>(null);\n  const [garantiNftAddress, setGarantiNftAddress] = useState<string | null>(null);\n  const [revolutNftAddress, setRevolutNftAddress] = useState<string | null>(null);\n\n  // Socket\n  const [socketBridgeAddress, setSocketBridgeAddress] = useState<string | null>(null);\n  \n  // Socket\n  const [lifiBridgeAddress, setLifiBridgeAddress] = useState<string | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('smartContracts_1');\n    esl && console.log('checking network: ', network);\n    esl && console.log('isLoggedIn: ', isLoggedIn);\n\n    const deploymentEnvironment = process.env.DEPLOYMENT_ENVIRONMENT || 'LOCAL';\n\n    let networkToUse = null;\n    if (isLoggedIn) {\n      networkToUse = network;\n    } else {\n      switch (deploymentEnvironment) {\n        case 'PRODUCTION':\n        case 'STAGING':\n          networkToUse = 'base';\n          break;\n\n        default:\n          networkToUse = 'sepolia';\n      }\n    }\n\n    if (networkToUse) {\n      switch (deploymentEnvironment) {\n        case 'PRODUCTION':\n          setAddressWithNetworkEnvKey(networkToUse, 'base_production');\n          break;\n  \n        default:\n          switch (networkToUse) {\n            case 'base':\n              setAddressWithNetworkEnvKey(networkToUse, 'base_staging');\n              break;\n  \n            case 'sepolia':\n              setAddressWithNetworkEnvKey(networkToUse, 'sepolia_staging');\n              break;\n  \n            case 'hardhat':\n            default:\n              setAddressWithNetworkEnvKey(networkToUse, 'localhardhat');\n              break;\n          }\n        }\n    } else {\n      setEmptyAddresses();\n    }\n  }, [network, isLoggedIn]);\n\n  /*\n   * Helpers\n   */\n\n  const setEmptyAddresses = () => {\n    setBlockscanUrl(blockExplorerUrls['base']);\n    setUsdcAddress(null);\n\n    // Legacy\n    setLegacyRampAddress(null);\n    setLegacyNftAddress(null);\n\n    // Venmo\n    setVenmoRampAddress(null);\n    setVenmoSendProcessorAddress(null);\n    setVenmoRegistrationProcessorAddress(null);\n    \n    // Hdfc\n    setHdfcRampAddress(null); \n    setHdfcSendProcessorAddress(null);\n\n    // Garanti\n    setGarantiRampAddress(null); \n    setGarantiSendProcessorAddress(null);\n\n    // Revolut\n    setRevolutRampAddress(null); \n    setRevolutSendProcessorAddress(null);\n    setRevolutAccountRegistryAddress(null);\n    \n    // NFT\n    setVenmoNftAddress(null);\n    setHdfcNftAddress(null);\n    setGarantiNftAddress(null);\n    setRevolutNftAddress(null);\n    \n    // Socket\n    setSocketBridgeAddress(null);\n\n    // Lifi\n    setLifiBridgeAddress(null);\n\n    esl && console.log('Set venmoRampAddress: null');\n  };\n\n  const setAddressWithNetworkEnvKey = (network: string, networkEnvKey: string) => {\n    const contractsForNetwork = contractAddresses[networkEnvKey];\n\n    setBlockscanUrl(blockExplorerUrls[network]);\n    setUsdcAddress(contractsForNetwork.usdc);\n\n    // Legacy\n    setLegacyRampAddress(contractsForNetwork.legacyRamp);\n    setLegacyNftAddress(contractsForNetwork.legacyNft);\n\n    // Venmo\n    setVenmoRampAddress(contractsForNetwork.venmoRamp);\n    setVenmoSendProcessorAddress(contractsForNetwork.venmoSendProcessor);\n    setVenmoRegistrationProcessorAddress(contractsForNetwork.venmoRegistrationProcessor);\n    \n    // Hdfc\n    setHdfcRampAddress(contractsForNetwork.hdfcRamp);\n    setHdfcSendProcessorAddress(contractsForNetwork.hdfcSendProcessor);\n\n    // Garanti\n    setGarantiRampAddress(contractsForNetwork.garantiRamp);\n    setGarantiSendProcessorAddress(contractsForNetwork.garantiSendProcessor);\n\n    // Revolut\n    setRevolutRampAddress(contractsForNetwork.revolutRamp);\n    setRevolutSendProcessorAddress(contractsForNetwork.revolutSendProcessor);\n    setRevolutAccountRegistryAddress(contractsForNetwork.revolutAccountRegistry);\n\n    // NFT\n    setVenmoNftAddress(contractsForNetwork.venmoNft);\n    setHdfcNftAddress(contractsForNetwork.hdfcNft);\n    setGarantiNftAddress(contractsForNetwork.garantiNft);\n    setRevolutNftAddress(contractsForNetwork.revolutNft);\n\n    // Socket\n    setSocketBridgeAddress(contractsForNetwork.socketBridge);\n    \n    // Lifi\n    setLifiBridgeAddress(contractsForNetwork.lifiBridge);\n  };\n\n  return (\n    <SmartContractsContext.Provider\n      value={{\n        usdcAddress,\n        usdcAbi: erc20ABI as any,\n        blockscanUrl: blockscanUrl,\n\n        // Legacy\n        legacyRampAddress,\n        legacyRampAbi: legacyRampAbi as Abi,\n        legacyNftAddress,\n\n        // Venmo\n        venmoRampAddress,\n        venmoRampAbi: venmoRampAbi as Abi,\n        venmoSendProcessorAddress,\n        venmoSendProcessorAbi: sendProcessorAbi as Abi,\n        venmoRegistrationProcessorAddress,\n\n        // Hdfc\n        hdfcRampAddress,\n        hdfcRampAbi: hdfcRampAbi as Abi,\n        hdfcSendProcessorAddress,\n        hdfcSendProcessorAbi: hdfcSendProcessorAbi as Abi,\n\n        // Garanti\n        garantiRampAddress,\n        garantiRampAbi: garantiRampAbi as Abi,\n        garantiSendProcessorAddress,\n        garantiSendProcessorAbi: garantiSendProcessorAbi as Abi,\n\n        // Revolut\n        revolutRampAddress,\n        revolutRampAbi: revolutRampAbi as Abi,\n        revolutSendProcessorAddress,\n        revolutSendProcessorAbi: revolutSendProcessorAbi as Abi,\n        revolutAccountRegistryAddress,\n        revolutAccountRegistryAbi: revolutAccountRegistryAbi as Abi,\n\n        // NFT\n        nftAbi: nftAbi as Abi,\n        venmoNftAddress,\n        hdfcNftAddress,\n        garantiNftAddress,\n        revolutNftAddress,\n\n        // Socket\n        socketBridgeAddress,\n\n        // Lifi\n        lifiBridgeAddress\n      }}\n    >\n      {children}\n    </SmartContractsContext.Provider>\n  );\n};\n\nexport default SmartContractsProvider;\n"
  },
  {
    "path": "client/src/contexts/common/SmartContracts/index.ts",
    "content": "export { default as SmartContractsContext } from './SmartContractsContext'\nexport { default as SmartContractsProvider } from './SmartContractsProvider'\n"
  },
  {
    "path": "client/src/contexts/common/SwapQuote/SwapQuoteContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { IndicativeQuote } from '@helpers/types';\n\n\ninterface SwapQuoteValues {\n  isRegistered: boolean;\n  registrationHash: string | null;\n  refetchDeposits: (() => void) | null;\n  getBestDepositForAmount: ((requestedOnRampInputAmount: string, onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  getDepositForMaxAvailableTransferSize: ((onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  shouldFetchDeposits: boolean;\n  refetchDepositCounter: (() => void) | null;\n  shouldFetchRampState: boolean;\n  onRampCooldownPeriod: bigint | null;\n  currentIntentHash: string | null;\n  refetchIntentHash: (() => void) | null;\n  refetchIntentHashAsUint: (() => void) | null;\n  shouldFetchIntentHash: boolean;\n  lastOnRampTimestamp: bigint | null;\n  refetchLastOnRampTimestamp: (() => void) | null;\n  maximumOnRampAmount: bigint | null;\n};\n\nconst defaultValues: SwapQuoteValues = {\n  isRegistered: false,\n  registrationHash: null,\n  refetchDeposits: null,\n  getBestDepositForAmount: null,\n  getDepositForMaxAvailableTransferSize: null,\n  shouldFetchDeposits: false,\n  refetchDepositCounter: null,\n  refetchIntentHashAsUint: null,\n  shouldFetchRampState: false,\n  onRampCooldownPeriod: null,\n  currentIntentHash: null,\n  refetchIntentHash: null,\n  shouldFetchIntentHash: false,\n  lastOnRampTimestamp: null,\n  refetchLastOnRampTimestamp: null,\n  maximumOnRampAmount: null,\n};\n\nconst SwapQuoteContext = createContext<SwapQuoteValues>(defaultValues);\n\nexport default SwapQuoteContext;\n"
  },
  {
    "path": "client/src/contexts/common/SwapQuote/SwapQuoteProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\n\nimport { IndicativeQuote } from '@helpers/types';\nimport { esl } from '@helpers/constants';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\n\n// Venmo\nimport useLiquidity from '@hooks/venmo/useLiquidity';\nimport useOnRamperIntents from '@hooks/venmo/useOnRamperIntents';\nimport useRampState from \"@hooks/venmo/useRampState\";\nimport useVenmoRegistration from \"@hooks/venmo/useRegistration\";\n\n// Hdfc\nimport useHdfcLiquidity from '@hooks/hdfc/useLiquidity';\nimport useHdfcOnRamperIntents from '@hooks/hdfc/useOnRamperIntents';\nimport useHdfcRampState from \"@hooks/hdfc/useRampState\";\nimport useHdfcRegistration from '@hooks/hdfc/useRegistration';\n\n// Garanti\nimport useGarantiLiquidity from '@hooks/garanti/useLiquidity';\nimport useGarantiOnRamperIntents from '@hooks/garanti/useOnRamperIntents';\nimport useGarantiRampState from \"@hooks/garanti/useRampState\";\nimport useGarantiRegistration from '@hooks/garanti/useRegistration';\n\n// Revolut\nimport useRevolutLiquidity from '@hooks/revolut/useLiquidity';\nimport useRevolutOnRamperIntents from '@hooks/revolut/useOnRamperIntents';\nimport useRevolutRampState from \"@hooks/revolut/useRampState\";\nimport useRevolutRegistration from '@hooks/revolut/useRegistration';\n\nimport SwapQuoteContext from './SwapQuoteContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst SwapQuoteProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { PaymentPlatform, paymentPlatform } = usePlatformSettings();\n\n  // Venmo\n  const {\n    isRegistered: isRegisteredOnVenmo,\n    registrationHash: venmoRegistrationHash\n  } = useVenmoRegistration();\n  const {\n    refetchDeposits: refetchVenmoDeposits,\n    getBestDepositForAmount: getBestVenmoDepositForAmount,\n    getDepositForMaxAvailableTransferSize: getVenmoDepositForMaxAvailableTransferSize,\n    shouldFetchDeposits: shouldFetchVenmoDeposits\n  } = useLiquidity();\n  const {\n    maximumOnRampAmount: venmoMaximumOnRampAmount,\n    refetchDepositCounter: refetchVenmoDepositCounter,\n    shouldFetchRampState: shouldFetchVenmoRampState,\n    onRampCooldownPeriod: venmoOnRampCooldownPeriod\n  } = useRampState();\n  const {\n    currentIntentHash: currentVenmoIntentHash,\n    refetchIntentHash: refetchVenmoIntentHash,\n    shouldFetchIntentHash: shouldFetchVenmoIntentHash,\n    lastOnRampTimestamp: lastVenmoOnRampTimestamp,\n    refetchLastOnRampTimestamp: refetchVenmoLastOnRampTimestamp\n  } = useOnRamperIntents();\n\n  // Hdfc\n  const {\n    isRegistered: isRegisteredOnHdfc,\n    registrationHash: hdfcRegistrationHash\n  } = useHdfcRegistration();\n  const {\n    refetchDeposits: refetchHdfcDeposits,\n    getBestDepositForAmount: getBestHdfcDepositForAmount,\n    getDepositForMaxAvailableTransferSize: getHdfcDepositForMaxAvailableTransferSize,\n    shouldFetchDeposits: shouldFetchHdfcDeposits\n  } = useHdfcLiquidity();\n  const {\n    maximumOnRampAmount: hdfcMaximumOnRampAmount,\n    refetchDepositCounter: refetchHdfcDepositCounter,\n    shouldFetchRampState: shouldFetchHdfcRampState,\n    onRampCooldownPeriod: hdfcOnRampCooldownPeriod\n  } = useHdfcRampState();\n  const {\n    currentIntentHash: currentHdfcIntentHash,\n    refetchIntentHash: refetchHdfcIntentHash,\n    shouldFetchIntentHash: shouldFetchHdfcIntentHash,\n    lastOnRampTimestamp: lastHdfcOnRampTimestamp,\n    refetchLastOnRampTimestamp: refetchHdfcLastOnRampTimestamp\n  } = useHdfcOnRamperIntents();\n\n  // Garanti\n  const {\n    isRegistered: isRegisteredOnGaranti,\n    registrationHash: garantiRegistrationHash\n  } = useGarantiRegistration();\n  const {\n    refetchDeposits: refetchGarantiDeposits,\n    getBestDepositForAmount: getBestGarantiDepositForAmount,\n    getDepositForMaxAvailableTransferSize: getGarantiDepositForMaxAvailableTransferSize,\n    shouldFetchDeposits: shouldFetchGarantiDeposits\n  } = useGarantiLiquidity();\n  const {\n    maximumOnRampAmount: garantiMaximumOnRampAmount,\n    refetchDepositCounter: refetchGarantiDepositCounter,\n    shouldFetchRampState: shouldFetchGarantiRampState,\n    onRampCooldownPeriod: garantiOnRampCooldownPeriod\n  } = useGarantiRampState();\n  const {\n    currentIntentHash: currentGarantiIntentHash,\n    refetchIntentHash: refetchGarantiIntentHash,\n    shouldFetchIntentHash: shouldFetchGarantiIntentHash,\n    lastOnRampTimestamp: lastGarantiOnRampTimestamp,\n    refetchLastOnRampTimestamp: refetchGarantiLastOnRampTimestamp\n  } = useGarantiOnRamperIntents();\n\n  // Revolut\n  const {\n    isRegistered: isRegisteredOnRevolut,\n    registrationHash: revolutRegistrationHash\n  } = useRevolutRegistration();\n  const {\n    refetchDeposits: refetchRevolutDeposits,\n    getBestDepositForAmount: getBestRevolutDepositForAmount,\n    getDepositForMaxAvailableTransferSize: getRevolutDepositForMaxAvailableTransferSize,\n    shouldFetchDeposits: shouldFetchRevolutDeposits\n  } = useRevolutLiquidity();\n  const {\n    maximumOnRampAmount: revolutMaximumOnRampAmount,\n    refetchDepositCounter: refetchRevolutDepositCounter,\n    shouldFetchRampState: shouldFetchRevolutRampState,\n    onRampCooldownPeriod: revolutOnRampCooldownPeriod\n  } = useRevolutRampState();\n  const {\n    currentIntentHash: currentRevolutIntentHash,\n    refetchIntentHash: refetchRevolutIntentHash,\n    refetchIntentHashAsUint: refetchRevolutIntentHashAsUint,\n    shouldFetchIntentHash: shouldFetchRevolutIntentHash,\n    lastOnRampTimestamp: lastRevolutOnRampTimestamp,\n    refetchLastOnRampTimestamp: refetchRevolutLastOnRampTimestamp\n  } = useRevolutOnRamperIntents();\n\n  /*\n   * State\n   */\n\n  const [isRegistered, setIsRegistered] = useState<boolean>(false);\n  const [registrationHash, setRegistrationHash] = useState<string | null>(null);\n\n  const [refetchDeposits, setRefetchDeposits] = useState<(() => void) | null>(null);\n  const [getBestDepositForAmount, setGetBestDepositForAmount] = useState<((requestedOnRampInputAmount: string) => IndicativeQuote) | null>(null);\n  const [getDepositForMaxAvailableTransferSize, setGetDepositForMaxAvailableTransferSize] = useState<(() => IndicativeQuote) | null>(null);\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n\n  const [refetchDepositCounter, setRefetchDepositCounter] = useState<(() => void) | null>(null);\n  const [shouldFetchRampState, setShouldFetchRampState] = useState<boolean>(false);\n  const [onRampCooldownPeriod, setOnRampCooldownPeriod] = useState<bigint | null>(null);\n  const [maximumOnRampAmount, setMaximumOnRampAmount] = useState<bigint | null>(null);\n  \n  const [currentIntentHash, setCurrentIntentHash] = useState<string | null>(null);\n  const [refetchIntentHash, setRefetchIntentHash] = useState<(() => void) | null>(null);\n  const [refetchIntentHashAsUint, setRefetchIntentHashAsUint] = useState<(() => void) | null>(null);\n  const [shouldFetchIntentHash, setShouldFetchIntentHash] = useState<boolean>(false);\n  const [lastOnRampTimestamp, setLastOnRampTimestamp] = useState<bigint | null>(null);\n  const [refetchLastOnRampTimestamp, setRefetchLastOnRampTimestamp] = useState<(() => void) | null>(null);\n\n  /*\n   * Registration\n   */\n\n  useEffect(() => {\n    esl && console.log('isRegisteredOnVenmo: ', isRegisteredOnVenmo);\n    esl && console.log('isRegisteredOnHdfc: ', isRegisteredOnHdfc);\n    esl && console.log('isRegisteredOnGaranti: ', isRegisteredOnGaranti);\n    esl && console.log('isRegisteredOnRevolut: ', isRegisteredOnRevolut);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setIsRegistered(isRegisteredOnVenmo);\n\n        break;\n\n      case PaymentPlatform.HDFC:\n        setIsRegistered(isRegisteredOnHdfc);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setIsRegistered(isRegisteredOnGaranti);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setIsRegistered(isRegisteredOnRevolut);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [paymentPlatform, isRegisteredOnVenmo, isRegisteredOnHdfc, isRegisteredOnGaranti, isRegisteredOnRevolut]);\n\n  useEffect(() => {\n    esl && console.log('venmoRegistrationHash: ', venmoRegistrationHash);\n    esl && console.log('hdfcRegistrationHash: ', hdfcRegistrationHash);\n    esl && console.log('garantiRegistrationHash: ', garantiRegistrationHash);\n    esl && console.log('revolutRegistrationHash: ', revolutRegistrationHash);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRegistrationHash(venmoRegistrationHash);\n        \n        break;\n\n      case PaymentPlatform.HDFC:\n        setRegistrationHash(hdfcRegistrationHash);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setRegistrationHash(garantiRegistrationHash);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRegistrationHash(revolutRegistrationHash);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      hdfcRegistrationHash,\n      venmoRegistrationHash,\n      garantiRegistrationHash,\n      revolutRegistrationHash\n    ]\n  );\n\n  /*\n   * Liquidity\n   */\n\n  useEffect(() => {\n    esl && console.log('refetchVenmoDeposits: ', refetchVenmoDeposits);\n    esl && console.log('refetchHdfcDeposits: ', refetchHdfcDeposits);\n    esl && console.log('refetchGarantiDeposits: ', refetchGarantiDeposits);\n    esl && console.log('refetchRevolutDeposits: ', refetchRevolutDeposits);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRefetchDeposits(() => refetchVenmoDeposits);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setRefetchDeposits(() => refetchHdfcDeposits);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setRefetchDeposits(() => refetchGarantiDeposits);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRefetchDeposits(() => refetchRevolutDeposits);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [paymentPlatform, refetchVenmoDeposits, refetchHdfcDeposits, refetchGarantiDeposits, refetchRevolutDeposits]);\n\n  useEffect(() => {\n    esl && console.log('getBestVenmoDepositForAmount: ', getBestVenmoDepositForAmount);\n    esl && console.log('getBestHdfcDepositForAmount: ', getBestHdfcDepositForAmount);\n    esl && console.log('getBestGarantiDepositForAmount: ', getBestGarantiDepositForAmount);\n    esl && console.log('getBestRevolutDepositForAmount: ', getBestRevolutDepositForAmount);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setGetBestDepositForAmount(() => getBestVenmoDepositForAmount as any);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setGetBestDepositForAmount(() => getBestHdfcDepositForAmount as any);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setGetBestDepositForAmount(() => getBestGarantiDepositForAmount as any);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setGetBestDepositForAmount(() => getBestRevolutDepositForAmount as any);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      getBestVenmoDepositForAmount,\n      getBestHdfcDepositForAmount,\n      getBestGarantiDepositForAmount,\n      getBestRevolutDepositForAmount\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('getVenmoDepositForMaxAvailableTransferSize: ', getVenmoDepositForMaxAvailableTransferSize);\n    esl && console.log('getHdfcDepositForMaxAvailableTransferSize: ', getHdfcDepositForMaxAvailableTransferSize);\n    esl && console.log('getGarantiDepositForMaxAvailableTransferSize: ', getGarantiDepositForMaxAvailableTransferSize);\n    esl && console.log('getRevolutDepositForMaxAvailableTransferSize: ', getRevolutDepositForMaxAvailableTransferSize);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setGetDepositForMaxAvailableTransferSize(() => getVenmoDepositForMaxAvailableTransferSize as any);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setGetDepositForMaxAvailableTransferSize(() => getHdfcDepositForMaxAvailableTransferSize as any);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setGetDepositForMaxAvailableTransferSize(() => getGarantiDepositForMaxAvailableTransferSize as any);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setGetDepositForMaxAvailableTransferSize(() => getRevolutDepositForMaxAvailableTransferSize as any);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      getVenmoDepositForMaxAvailableTransferSize,\n      getHdfcDepositForMaxAvailableTransferSize,\n      getGarantiDepositForMaxAvailableTransferSize,\n      getRevolutDepositForMaxAvailableTransferSize\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('shouldFetchVenmoDeposits: ', shouldFetchVenmoDeposits);\n    esl && console.log('shouldFetchHdfcDeposits: ', shouldFetchHdfcDeposits);\n    esl && console.log('shouldFetchGarantiDeposits: ', shouldFetchGarantiDeposits);\n    esl && console.log('shouldFetchRevolutDeposits: ', shouldFetchRevolutDeposits);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setShouldFetchDeposits(shouldFetchVenmoDeposits);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setShouldFetchDeposits(shouldFetchHdfcDeposits);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setShouldFetchDeposits(shouldFetchGarantiDeposits);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setShouldFetchDeposits(shouldFetchRevolutDeposits);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      shouldFetchVenmoDeposits,\n      shouldFetchHdfcDeposits,\n      shouldFetchGarantiDeposits,\n      shouldFetchRevolutDeposits\n    ]\n  );\n  \n\n  /*\n   * On Ramper Intents\n   */\n\n  useEffect(() => {\n    esl && console.log('currentVenmoIntentHash: ', currentVenmoIntentHash);\n    esl && console.log('currentHdfcIntentHash: ', currentHdfcIntentHash);\n    esl && console.log('currentGarantiIntentHash: ', currentGarantiIntentHash);\n    esl && console.log('currentRevolutIntentHash: ', currentRevolutIntentHash);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setCurrentIntentHash(currentVenmoIntentHash);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setCurrentIntentHash(currentHdfcIntentHash);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setCurrentIntentHash(currentGarantiIntentHash);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setCurrentIntentHash(currentRevolutIntentHash);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      currentVenmoIntentHash,\n      currentHdfcIntentHash,\n      currentGarantiIntentHash,\n      currentRevolutIntentHash\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('refetchVenmoIntentHash: ', refetchVenmoIntentHash);\n    esl && console.log('refetchHdfcIntentHash: ', refetchHdfcIntentHash);\n    esl && console.log('refetchGarantiIntentHash: ', refetchGarantiIntentHash);\n    esl && console.log('refetchRevolutIntentHash: ', refetchRevolutIntentHash);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRefetchIntentHash(() => refetchVenmoIntentHash);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setRefetchIntentHash(() =>  refetchHdfcIntentHash);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setRefetchIntentHash(() =>  refetchGarantiIntentHash);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRefetchIntentHash(() =>  refetchRevolutIntentHash);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      refetchVenmoIntentHash,\n      refetchHdfcIntentHash,\n      refetchGarantiIntentHash,\n      refetchRevolutIntentHash\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('refetchRevolutIntentHashAsUint: ', refetchRevolutIntentHashAsUint);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n      case PaymentPlatform.HDFC:\n      case PaymentPlatform.GARANTI:\n        setRefetchIntentHashAsUint(() => {});\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRefetchIntentHashAsUint(() =>  refetchRevolutIntentHashAsUint);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      refetchRevolutIntentHashAsUint\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('shouldFetchVenmoIntentHash: ', shouldFetchVenmoIntentHash);\n    esl && console.log('shouldFetchHdfcIntentHash: ', shouldFetchHdfcIntentHash);\n    esl && console.log('shouldFetchGarantiIntentHash: ', shouldFetchGarantiIntentHash);\n    esl && console.log('shouldFetchRevolutIntentHash: ', shouldFetchRevolutIntentHash);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setShouldFetchIntentHash(shouldFetchVenmoIntentHash);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setShouldFetchIntentHash(shouldFetchHdfcIntentHash);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setShouldFetchIntentHash(shouldFetchGarantiIntentHash);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setShouldFetchIntentHash(shouldFetchRevolutIntentHash);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      shouldFetchVenmoIntentHash,\n      shouldFetchHdfcIntentHash,\n      shouldFetchGarantiIntentHash,\n      shouldFetchRevolutIntentHash\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('lastVenmoOnRampTimestamp: ', lastVenmoOnRampTimestamp);\n    esl && console.log('lastHdfcOnRampTimestamp: ', lastHdfcOnRampTimestamp);\n    esl && console.log('lastGarantiOnRampTimestamp: ', lastGarantiOnRampTimestamp);\n    esl && console.log('lastRevolutOnRampTimestamp: ', lastRevolutOnRampTimestamp);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setLastOnRampTimestamp(lastVenmoOnRampTimestamp);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setLastOnRampTimestamp(lastHdfcOnRampTimestamp);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setLastOnRampTimestamp(lastGarantiOnRampTimestamp);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setLastOnRampTimestamp(lastRevolutOnRampTimestamp);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      lastVenmoOnRampTimestamp,\n      lastHdfcOnRampTimestamp,\n      lastGarantiOnRampTimestamp,\n      lastRevolutOnRampTimestamp\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('refetchVenmoLastOnRampTimestamp: ', refetchVenmoLastOnRampTimestamp);\n    esl && console.log('refetchHdfcLastOnRampTimestamp: ', refetchHdfcLastOnRampTimestamp);\n    esl && console.log('refetchGarantiLastOnRampTimestamp: ', refetchGarantiLastOnRampTimestamp);\n    esl && console.log('refetchRevolutLastOnRampTimestamp: ', refetchRevolutLastOnRampTimestamp);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRefetchLastOnRampTimestamp(() => refetchVenmoLastOnRampTimestamp);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setRefetchLastOnRampTimestamp(() => refetchHdfcLastOnRampTimestamp);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setRefetchLastOnRampTimestamp(() => refetchGarantiLastOnRampTimestamp);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRefetchLastOnRampTimestamp(() => refetchRevolutLastOnRampTimestamp);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      refetchVenmoLastOnRampTimestamp,\n      refetchHdfcLastOnRampTimestamp,\n      refetchGarantiLastOnRampTimestamp,\n      refetchRevolutLastOnRampTimestamp\n    ]\n  );\n\n  /*\n   * Ramp State\n   */\n\n  useEffect(() => {\n    esl && console.log('refetchVenmoDepositCounter: ', refetchVenmoDepositCounter);\n    esl && console.log('refetchHdfcDepositCounter: ', refetchHdfcDepositCounter);\n    esl && console.log('refetchGarantiDepositCounter: ', refetchGarantiDepositCounter);\n    esl && console.log('refetchRevolutDepositCounter: ', refetchRevolutDepositCounter);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setRefetchDepositCounter(() => refetchVenmoDepositCounter);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setRefetchDepositCounter(() => refetchHdfcDepositCounter);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setRefetchDepositCounter(() => refetchGarantiDepositCounter);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setRefetchDepositCounter(() => refetchRevolutDepositCounter);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      refetchVenmoDepositCounter,\n      refetchHdfcDepositCounter,\n      refetchGarantiDepositCounter,\n      refetchRevolutDepositCounter\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('shouldFetchVenmoRampState: ', shouldFetchVenmoRampState);\n    esl && console.log('shouldFetchHdfcRampState: ', shouldFetchHdfcRampState);\n    esl && console.log('shouldFetchGarantiRampState: ', shouldFetchGarantiRampState);\n    esl && console.log('shouldFetchRevolutRampState: ', shouldFetchRevolutRampState);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setShouldFetchRampState(shouldFetchVenmoRampState);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setShouldFetchRampState(shouldFetchHdfcRampState);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setShouldFetchRampState(shouldFetchGarantiRampState);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setShouldFetchRampState(shouldFetchRevolutRampState);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      shouldFetchVenmoRampState,\n      shouldFetchHdfcRampState,\n      shouldFetchGarantiRampState,\n      shouldFetchRevolutRampState\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('venmoOnRampCooldownPeriod: ', venmoOnRampCooldownPeriod);\n    esl && console.log('hdfcOnRampCooldownPeriod: ', hdfcOnRampCooldownPeriod);\n    esl && console.log('garantiOnRampCooldownPeriod: ', garantiOnRampCooldownPeriod);\n    esl && console.log('revolutOnRampCooldownPeriod: ', revolutOnRampCooldownPeriod);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setOnRampCooldownPeriod(venmoOnRampCooldownPeriod);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setOnRampCooldownPeriod(hdfcOnRampCooldownPeriod);\n        break;\n      \n      case PaymentPlatform.GARANTI:\n        setOnRampCooldownPeriod(garantiOnRampCooldownPeriod);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setOnRampCooldownPeriod(revolutOnRampCooldownPeriod);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      venmoOnRampCooldownPeriod,\n      hdfcOnRampCooldownPeriod,\n      garantiOnRampCooldownPeriod,\n      revolutOnRampCooldownPeriod\n    ]\n  );\n\n  useEffect(() => {\n    esl && console.log('venmoMaximumOnRampAmount: ', venmoMaximumOnRampAmount);\n    esl && console.log('hdfcMaximumOnRampAmount: ', hdfcMaximumOnRampAmount);\n    esl && console.log('garantiMaximumOnRampAmount: ', garantiMaximumOnRampAmount);\n    esl && console.log('revolutMaximumOnRampAmount: ', revolutMaximumOnRampAmount);\n\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setMaximumOnRampAmount(venmoMaximumOnRampAmount);\n        break;\n\n      case PaymentPlatform.HDFC:\n        setMaximumOnRampAmount(hdfcMaximumOnRampAmount);\n        break;\n      \n      case PaymentPlatform.GARANTI:\n        setMaximumOnRampAmount(garantiMaximumOnRampAmount);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setMaximumOnRampAmount(revolutMaximumOnRampAmount);\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n      paymentPlatform,\n      venmoMaximumOnRampAmount,\n      hdfcMaximumOnRampAmount,\n      garantiMaximumOnRampAmount,\n      revolutMaximumOnRampAmount\n    ]\n  );\n\n  return (\n    <SwapQuoteContext.Provider\n      value={{\n        isRegistered,\n        registrationHash,\n        refetchDeposits,\n        getBestDepositForAmount,\n        getDepositForMaxAvailableTransferSize,\n        shouldFetchDeposits,\n        currentIntentHash,\n        refetchIntentHash,\n        refetchIntentHashAsUint,\n        shouldFetchIntentHash,\n        lastOnRampTimestamp,\n        refetchLastOnRampTimestamp,\n        refetchDepositCounter,\n        shouldFetchRampState,\n        onRampCooldownPeriod,\n        maximumOnRampAmount\n      }}\n    >\n      {children}\n    </SwapQuoteContext.Provider>\n  );\n};\n\nexport default SwapQuoteProvider;\n"
  },
  {
    "path": "client/src/contexts/common/SwapQuote/index.ts",
    "content": "export { default as SwapQuoteContext } from './SwapQuoteContext';\nexport { default as SwapQuoteProvider } from './SwapQuoteProvider';\n"
  },
  {
    "path": "client/src/contexts/garanti/Deposits/DepositsContext.ts",
    "content": "import { createContext } from 'react'\n\nimport { DepositWithAvailableLiquidity, DepositIntent } from '../../../helpers/types/deposit'\n\n\ninterface DepositsValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositIntents: DepositIntent[] | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  refetchDepositIntents: (() => void) | null;\n  shouldFetchDepositIntents: boolean;\n}\n\nconst defaultValues: DepositsValues = {\n  deposits: null,\n  depositIntents: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  refetchDepositIntents: null,\n  shouldFetchDepositIntents: false\n};\n\nconst DepositsContext = createContext<DepositsValues>(defaultValues)\n\nexport default DepositsContext\n"
  },
  {
    "path": "client/src/contexts/garanti/Deposits/DepositsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\nimport { useContractRead } from 'wagmi';\n\nimport {\n  Deposit,\n  DepositIntent,\n  DepositWithAvailableLiquidity,\n  Intent,\n  PaymentPlatform\n} from '@helpers/types';\nimport { esl } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/garanti/useRegistration';\n\nimport DepositsContext from './DepositsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst DepositsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { garantiRampAddress, garantiRampAbi } = useSmartContracts();\n  const { isRegistered } = useRegistration();\n\n  /*\n   * State\n   */\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositIntents, setDepositIntents] = useState<DepositIntent[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n  const [uniqueIntentHashes, setUniqueIntentHashes] = useState<string[]>([]);\n  const [intentIndexDepositMap, setIntentIndexDepositMap] = useState<Map<number, Deposit>>(new Map<number, Deposit>())\n  const [shouldFetchDepositIntents, setShouldFetchDepositIntents] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // function getAccountDeposits(address _account)\n  const {\n    data: depositsRaw,\n    refetch: refetchDeposits,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'getAccountDeposits',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchDeposits,\n  })\n      \n  // getIntentsWithOnRamperId(bytes32[] calldata _intentHashes)\n  const {\n    data: depositIntentsRaw,\n    refetch: refetchDepositIntents,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'getIntentsWithOnRamperId',\n    args: [\n      uniqueIntentHashes\n    ],\n    enabled: shouldFetchDepositIntents,\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('garanti_shouldFetchDeposits_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking garantiRampAddress: ', garantiRampAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && garantiRampAddress && isRegistered) {\n      esl && console.log('garanti_shouldFetchDeposits_2');\n\n      setShouldFetchDeposits(true);\n    } else {\n      esl && console.log('garanti_shouldFetchDeposits_3');\n\n      setShouldFetchDeposits(false);\n\n      setDeposits(null);\n      setDepositIntents(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, garantiRampAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('garanti_shouldFetchDepositIntents_1');\n    esl && console.log('checking uniqueIntentHashes: ', uniqueIntentHashes);\n\n    if (uniqueIntentHashes.length > 0) {\n      esl && console.log('garanti_shouldFetchDepositIntents_2');\n\n      setShouldFetchDepositIntents(true);\n    } else {\n      esl && console.log('garanti_shouldFetchDepositIntents_3');\n\n      setShouldFetchDepositIntents(false);\n\n      setDepositIntents(null);\n    }\n  }, [uniqueIntentHashes]);\n\n  useEffect(() => {\n    esl && console.log('garanti_depositsRaw_1');\n    esl && console.log('checking depositsRaw: ', depositsRaw);\n\n    if (depositsRaw) {\n      esl && console.log('garanti_depositsRaw_2');\n\n      const depositsArrayRaw = depositsRaw as any[];\n\n      const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n      const depositIntentHashes: string[][] = [];\n      const intentHashToDepositMap = new Map<string, Deposit>();\n\n      for (let i = depositsArrayRaw.length - 1; i >= 0; i--) {\n        const depositWithAvailableLiquidityData = depositsArrayRaw[i];\n\n        const depositData = depositWithAvailableLiquidityData.deposit;\n        const deposit: Deposit = {\n          platformType: PaymentPlatform.GARANTI,\n          depositor: depositData.depositor.toString(),\n          venmoId: depositData.garantiId,\n          depositAmount: depositData.depositAmount,\n          remainingDepositAmount: depositData.remainingDeposits,\n          outstandingIntentAmount: depositData.outstandingIntentAmount,\n          conversionRate: depositData.conversionRate,\n          intentHashes: depositData.intentHashes,\n        };\n\n        const depositWithLiquidity: DepositWithAvailableLiquidity = {\n          deposit,\n          availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n          depositId: depositWithAvailableLiquidityData.depositId,\n          depositorIdHash: depositWithAvailableLiquidityData.depositorIdHash,\n        }\n\n        sanitizedDeposits.push(depositWithLiquidity);\n        depositIntentHashes.push(depositData.intentHashes);\n\n        for (let j = 0; j < depositData.intentHashes.length; j++) {\n          const intentHash = depositData.intentHashes[j];\n          intentHashToDepositMap.set(intentHash, deposit);\n        }\n      }\n          \n      setDeposits(sanitizedDeposits);\n      \n      const flattenedDepositIntentHashes = depositIntentHashes.flat();\n      setUniqueIntentHashes(flattenedDepositIntentHashes);\n\n      const intentIndexDepositMap = new Map<number, Deposit>();\n      for (let i = 0; i < flattenedDepositIntentHashes.length; i++) {\n        const intentHash = flattenedDepositIntentHashes[i];\n        const deposit = intentHashToDepositMap.get(intentHash);\n\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent hash: ' + intentHash);\n        } else {\n          intentIndexDepositMap.set(i, deposit);\n        }\n      }\n      setIntentIndexDepositMap(intentIndexDepositMap);\n    } else {\n      esl && console.log('garanti_depositsRaw_3');\n\n      setDeposits(null);\n      setUniqueIntentHashes([]);\n    }\n  }, [depositsRaw]);\n\n  useEffect(() => {\n    esl && console.log('garanti_depositsIntentsRaw_1');\n    esl && console.log('checking depositIntentsRaw: ', depositIntentsRaw);\n\n    if (depositIntentsRaw && depositIntentsRaw.length > 0) {\n      esl && console.log('garanti_depositsIntentsRaw_2');\n\n      const depositIntentsArray = depositIntentsRaw as any[];\n\n      const sanitizedIntents: DepositIntent[] = [];\n      for (let i = depositIntentsArray.length - 1; i >= 0; i--) {\n        const intentWithOnRamperId = depositIntentsArray[i];\n        \n        const intentData = intentWithOnRamperId.intent;\n        const intent: Intent = {\n          onRamper: intentData.onRamper,\n          to: intentData.to,\n          deposit: intentData.deposit,\n          amount: intentData.amount,\n          timestamp: intentData.intentTimestamp,\n        };\n\n        const deposit = intentIndexDepositMap.get(i);\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent index: ' + i);\n        }\n\n        const onRamperVenmoHash = intentWithOnRamperId.onRamperIdHash;\n        const intentHash = intentWithOnRamperId.intentHash;\n        const depositIntent: DepositIntent = {\n          intent,\n          onRamperVenmoHash,\n          deposit,\n          intentHash\n        }\n\n        sanitizedIntents.push(depositIntent);\n      }\n\n      setDepositIntents(sanitizedIntents);\n    } else {\n      esl && console.log('garanti_depositsIntentsRaw_3');\n      \n      setDepositIntents([]);\n    }\n  }, [depositIntentsRaw, intentIndexDepositMap]);\n\n  return (\n    <DepositsContext.Provider\n      value={{\n        deposits,\n        depositIntents,\n        refetchDeposits,\n        shouldFetchDeposits,\n        refetchDepositIntents,\n        shouldFetchDepositIntents,\n      }}\n    >\n      {children}\n    </DepositsContext.Provider>\n  );\n};\n\nexport default DepositsProvider;\n"
  },
  {
    "path": "client/src/contexts/garanti/Deposits/index.ts",
    "content": "export { default as DepositsContext } from './DepositsContext'\nexport { default as DepositsProvider } from './DepositsProvider'\n"
  },
  {
    "path": "client/src/contexts/garanti/Liquidity/LiquidityContext.ts",
    "content": "import { createContext } from 'react';\n\nimport {\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  StoredDeposit\n} from '@helpers/types';\n\nimport {\n  calculateUsdFromRequestedUSDC\n} from '../../venmo/Liquidity/helper';\n\n\ninterface LiquidityValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositStore: StoredDeposit[] | null;\n  getBestDepositForAmount: ((requestedOnRampInputAmount: string, onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  getDepositForMaxAvailableTransferSize: ((onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  calculateUsdFromRequestedUSDC: (requestedOnRampInputAmount: bigint, conversionRate: bigint) => bigint;\n}\n\nconst defaultValues: LiquidityValues = {\n  deposits: null,\n  depositStore: null,\n  getBestDepositForAmount: null,\n  getDepositForMaxAvailableTransferSize: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  calculateUsdFromRequestedUSDC,\n};\n\nconst LiquidityContext = createContext<LiquidityValues>(defaultValues);\n\nexport default LiquidityContext;\n"
  },
  {
    "path": "client/src/contexts/garanti/Liquidity/LiquidityProvider.tsx",
    "content": "import React, {\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  ReactNode,\n} from 'react';\nimport { readContract } from '@wagmi/core';\n\nimport {\n  Abi,\n  Deposit,\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  PaymentPlatform,\n  StoredDeposit\n} from '@helpers/types';\nimport {\n  calculateUsdFromRequestedUSDC,\n  createDepositsStore,\n  fetchBestDepositForAmount,\n  fetchDepositForMaxAvailableTransferSize\n } from '../../venmo/Liquidity/helper';\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useGarantiRampState from '@hooks/garanti/useRampState';\nimport useDenyList from '@hooks/useDenyList';\n\nimport LiquidityContext from './LiquidityContext';\n\n\nconst BATCH_SIZE = 30;\nconst PRUNED_DEPOSITS_PREFIX = 'prunedGarantiDepositIds_';\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst LiquidityProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { garantiRampAddress, garantiRampAbi } = useSmartContracts();\n  const { depositCounter, maximumOnRampAmount } = useGarantiRampState();\n  const { fetchGarantiDepositoryDenyList } = useDenyList();\n\n  /*\n   * State\n   */\n\n  const currentRampAddressRef = useRef(garantiRampAddress);\n\n  const [fetchDepositsTrigger, setFetchDepositsTrigger] = useState(0);\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositStore, setDepositStore] = useState<StoredDeposit[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  const fetchAndPruneDeposits = async (depositCounter: bigint, rampAddress: string) => {\n    const existingPrunedIds = fetchStoredPrunedDepositIds(rampAddress);\n    const depositIdsToFetch = initializeDepositIdsToFetch(depositCounter, existingPrunedIds);\n    const garantiDenyList = await fetchGarantiDepositoryDenyList();\n\n    const batchedDeposits: DepositWithAvailableLiquidity[] = [];\n    const depositIdsToPrune: bigint[] = [];\n    \n    for (let i = 0; i < depositIdsToFetch.length; i += BATCH_SIZE) {\n      const depositIdBatch = depositIdsToFetch.slice(i, i + BATCH_SIZE);\n      const rawDepositsData = await fetchDepositBatch(depositIdBatch);\n      \n      const deposits = sanitizeRawDeposits(rawDepositsData as any);\n      for (let j = 0; j < deposits.length; j++) {\n        const deposit = deposits[j];\n\n        const orderHasNoAvailableLiquidity = deposit.availableLiquidity < 1000000;\n        const orderHasNoOustandingIntent = deposit.deposit.outstandingIntentAmount === ZERO;\n        const orderIsFilled = orderHasNoAvailableLiquidity && orderHasNoOustandingIntent;\n\n        if (orderIsFilled) {\n          depositIdsToPrune.push(deposit.depositId);\n        } else {\n          batchedDeposits.push(deposit);\n        }\n      }\n    }\n\n    if (currentRampAddressRef.current === rampAddress) {\n      const newPrunedDepositIds = [...existingPrunedIds, ...depositIdsToPrune];\n      updateStoredPrunedIds(rampAddress, newPrunedDepositIds);\n  \n      const garantiDenyListSet = new Set(garantiDenyList);\n      const filteredDeposits = batchedDeposits.filter(deposit => !garantiDenyListSet.has(deposit.deposit.venmoId));\n      setDeposits(filteredDeposits);\n    }\n  };\n\n  const initializeDepositIdsToFetch = (currentDepositCounter: bigint, storedDepositIdsToPrune: bigint[]): bigint[] => {\n    if (currentDepositCounter) {\n      const prunedIdsSet = new Set(storedDepositIdsToPrune.map(id => id.toString()));\n      const depositIds = [];\n\n      for (let i = 0; i < currentDepositCounter; i++) {\n        const depositId = BigInt(i).toString();\n        if (!prunedIdsSet.has(depositId)) {\n          depositIds.push(BigInt(depositId));\n        }\n      }\n  \n      return depositIds;\n    } else {\n      return [];\n    }\n  };\n\n  const fetchDepositBatch = async (depositIdBatch: bigint[]) => {\n    try {\n      // function getDepositFromIds(uint256[] memory _depositIds) external view returns (Deposit[] memory depositArray)\n      const data = await readContract({\n        address: garantiRampAddress as `0x${string}`,\n        abi: garantiRampAbi as Abi,\n        functionName: 'getDepositFromIds',\n        args: [depositIdBatch],\n        account: CALLER_ACCOUNT,\n      });\n\n      return data;\n    } catch (error) {\n      console.error('Error fetching deposits batch:', error);\n      \n      return [];\n    }\n  };\n\n  const sanitizeRawDeposits = (rawDepositsData: any[]) => {\n    const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n\n    for (let i = rawDepositsData.length - 1; i >= 0; i--) {\n      const depositWithAvailableLiquidityData = rawDepositsData[i];\n      \n      const depositData = depositWithAvailableLiquidityData.deposit;\n      const deposit: Deposit = {\n        platformType: PaymentPlatform.GARANTI,\n        depositor: depositData.depositor.toString(),\n        venmoId: depositData.garantiIban,\n        offRamperName: depositData.garantiName,\n        depositAmount: depositData.depositAmount,\n        remainingDepositAmount: depositData.remainingDeposits,\n        outstandingIntentAmount: depositData.outstandingIntentAmount,\n        conversionRate: depositData.conversionRate,\n        intentHashes: depositData.intentHashes,\n      };\n\n      const depositWithLiquidity: DepositWithAvailableLiquidity = {\n        deposit,\n        availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n        depositId: depositWithAvailableLiquidityData.depositId,\n        depositorIdHash: depositWithAvailableLiquidityData.depositorIdHash,\n      }\n\n      sanitizedDeposits.push(depositWithLiquidity);\n    }\n\n    return sanitizedDeposits;\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    currentRampAddressRef.current = garantiRampAddress;\n  }, [garantiRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchDeposits_1');\n    esl && console.log('checking depositCounter: ', depositCounter);\n    esl && console.log('checking garantiRampAddress: ', garantiRampAddress);\n\n    const fetchData = async () => {\n      if (depositCounter && garantiRampAddress) {\n        esl && console.log('venmo_shouldFetchDeposits_2');\n  \n        setShouldFetchDeposits(true);\n\n        await fetchAndPruneDeposits(depositCounter, garantiRampAddress);\n      } else {\n        esl && console.log('venmo_shouldFetchDeposits_3');\n  \n        setShouldFetchDeposits(false);\n  \n        setDeposits(null);\n        setDepositStore(null);\n      }\n    };\n  \n    fetchData();\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [depositCounter, garantiRampAddress, fetchDepositsTrigger]);\n\n  useEffect(() => {\n    esl && console.log('venmo_depositStore_1');\n    esl && console.log('checking deposits: ', deposits);\n\n    if (deposits && deposits.length > 0) {\n      esl && console.log('venmo_depositStore_2');\n\n      const newStore = createDepositsStore(deposits);\n\n      setDepositStore(newStore);\n    } else {\n      esl && console.log('venmo_depositStore_3');\n\n      setDepositStore(null);\n    }\n  }, [deposits]);\n\n  /*\n   * Public\n   */\n\n  const refetchDeposits = () => {\n    setFetchDepositsTrigger(prev => prev + 1);\n  };\n\n  const getBestDepositForAmount = useCallback((requestedOnRampInputAmount: string, onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore) {\n      return fetchBestDepositForAmount(\n        requestedOnRampInputAmount,\n        depositStore,\n        onRamperRegistrationHash\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore]);\n\n  const getDepositForMaxAvailableTransferSize = useCallback((onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore && maximumOnRampAmount) {\n      return fetchDepositForMaxAvailableTransferSize(\n        maximumOnRampAmount,\n        depositStore,\n        onRamperRegistrationHash\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore, maximumOnRampAmount]);\n\n  /*\n   * Helpers\n   */\n\n  const fetchStoredPrunedDepositIds = (contractAddress: string) => {\n    const prunedIdsStorageKey = `${PRUNED_DEPOSITS_PREFIX}${contractAddress}`;\n    const prunedIdsFromStorage = localStorage.getItem(prunedIdsStorageKey);\n    const prunedIdsFromStorageParsed = prunedIdsFromStorage ? JSON.parse(prunedIdsFromStorage).map(BigInt) : [];\n\n    return prunedIdsFromStorageParsed;\n  };\n\n  const updateStoredPrunedIds = (rampAddress: string, prunedDepositIdsToStore: bigint[]) => {\n    esl && console.log('updateStoredPrunedIds_1: ', rampAddress);\n\n    const storageKey = `${PRUNED_DEPOSITS_PREFIX}${rampAddress}`;\n    const prunedDepositIdsForStorage = prunedDepositIdsToStore.map(id => id.toString());\n    localStorage.setItem(storageKey, JSON.stringify(prunedDepositIdsForStorage));\n  };\n\n  return (\n    <LiquidityContext.Provider\n      value={{\n        deposits,\n        depositStore,\n        getBestDepositForAmount,\n        getDepositForMaxAvailableTransferSize,\n        refetchDeposits,\n        shouldFetchDeposits,\n        calculateUsdFromRequestedUSDC\n      }}\n    >\n      {children}\n    </LiquidityContext.Provider>\n  );\n};\n\nexport default LiquidityProvider;\n"
  },
  {
    "path": "client/src/contexts/garanti/Liquidity/index.ts",
    "content": "export { default as LiquidityContext } from './LiquidityContext'\nexport { default as LiquidityProvider } from './LiquidityProvider'\n"
  },
  {
    "path": "client/src/contexts/garanti/OnRamperIntents/OnRamperIntentsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { OnRamperIntent } from '@helpers/types';\n\n\ninterface OnRamperIntentsValues {\n  currentIntent: OnRamperIntent | null;\n  currentIntentHash: string | null;\n  refetchIntentHash: (() => void) | null;\n  lastOnRampTimestamp: bigint | null;\n  refetchLastOnRampTimestamp: (() => void) | null;\n  shouldFetchIntentHash: boolean;\n};\n\nconst defaultValues: OnRamperIntentsValues = {\n  currentIntent: null,\n  currentIntentHash: null,\n  refetchIntentHash: null,\n  lastOnRampTimestamp: null,\n  refetchLastOnRampTimestamp: null,\n  shouldFetchIntentHash: false\n};\n\nconst OnRamperIntentsContext = createContext<OnRamperIntentsValues>(defaultValues);\n\nexport default OnRamperIntentsContext;\n"
  },
  {
    "path": "client/src/contexts/garanti/OnRamperIntents/OnRamperIntentsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\nimport { useContractRead } from 'wagmi';\n\nimport { Intent, OnRamperIntent, StoredDeposit } from '@helpers/types';\nimport { esl, ZERO, ZERO_ADDRESS } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useLiquidity from '@hooks/garanti/useLiquidity';\nimport useRegistration from '@hooks/garanti/useRegistration';\n\nimport OnRamperIntentsContext from './OnRamperIntentsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst OnRamperIntentsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { isRegistered } = useRegistration();\n  const { garantiRampAddress, garantiRampAbi } = useSmartContracts();\n  const { depositStore } = useLiquidity();\n\n  /*\n   * State\n   */\n\n  const [currentIntentHash, setCurrentIntentHash] = useState<string | null>(null);\n  const [currentIntent, setCurrentIntent] = useState<OnRamperIntent | null>(null);\n  const [lastOnRampTimestamp, setLastOnRampTimestamp] = useState<bigint | null>(null);\n\n  const [shouldFetchIntentHash, setShouldFetchIntentHash] = useState<boolean>(false);\n  const [shouldFetchIntent, setShouldFetchIntent] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // getIdCurrentIntentHash(address _account) external view returns (bytes32)\n  const {\n    data: intentHashRaw,\n    refetch: refetchIntentHash,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'getIdCurrentIntentHash',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  })\n\n  // function getLastOnRampTimestamp(address _account) external view returns (uint256)\n  const {\n    data: lastOnRampTimeStampRaw,\n    refetch: refetchLastOnRampTimestamp,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'getLastOnRampTimestamp',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  })\n\n  // mapping(bytes32 => Intent) public intents;\n  const {\n    data: intentRaw,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'intents',\n    args: [\n      currentIntentHash\n    ],\n    enabled: shouldFetchIntent,\n  })\n\n  /*\n   * Helpers\n   */\n\n  function getVenmoIdByDepositId(storedDeposits: StoredDeposit[], depositId: bigint): string | null {\n    // Find the StoredDeposit object with the matching depositId\n    const matchingDeposit = storedDeposits.find(storedDeposit => storedDeposit.depositId === depositId);\n    \n    // esl && console.log('garanti_matchingDeposit: ', matchingDeposit);\n\n    // If a matching deposit is found, return the venmoId, otherwise return null\n    return matchingDeposit ? matchingDeposit.deposit.venmoId : null;\n  }\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('garanti_shouldFetchIntentHash_garanti_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && isRegistered) {\n      esl && console.log('garanti_shouldFetchIntentHash_garanti_2');\n\n      setShouldFetchIntentHash(true);\n    } else {\n      esl && console.log('garanti_shouldFetchIntentHash_garanti_3');\n\n      setShouldFetchIntentHash(false);\n\n      setCurrentIntentHash(null);\n      setCurrentIntent(null)\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('garanti_shouldFetchIntent_garanti_1');\n    esl && console.log('checking currentIntentHash: ', currentIntentHash);\n    \n    if (currentIntentHash) {\n      esl && console.log('garanti_shouldFetchIntent_garanti_2');\n\n      setShouldFetchIntent(true);\n    } else {\n      esl && console.log('garanti_shouldFetchIntent_garanti_3');\n\n      setShouldFetchIntent(false);\n      \n      setCurrentIntent(null);\n    }\n  }, [currentIntentHash]);\n\n  useEffect(() => {\n    esl && console.log('garanti_intentHashRaw_garanti_1');\n    esl && console.log('checking intentHashRaw: ', intentHashRaw);\n  \n    if (intentHashRaw !== ZERO_ADDRESS) {\n      esl && console.log('garanti_intentHashRaw_garanti_2');\n      \n      const intentHashProcessed = intentHashRaw as string;\n\n      setCurrentIntentHash(intentHashProcessed);\n    } else {\n      esl && console.log('garanti_intentHashRaw_garanti_3');\n\n      setCurrentIntentHash(null);\n    }\n  }, [intentHashRaw]);\n\n  useEffect(() => {\n    esl && console.log('garanti_lastOnRampTimeStampRaw_garanti_1');\n    esl && console.log('checking lastOnRampTimeStampRaw: ', lastOnRampTimeStampRaw);\n  \n    if (lastOnRampTimeStampRaw || lastOnRampTimeStampRaw === ZERO) {\n      esl && console.log('garanti_lastOnRampTimeStampRaw_garanti_2');\n\n      setLastOnRampTimestamp(lastOnRampTimeStampRaw as bigint);\n    } else {\n      esl && console.log('garanti_lastOnRampTimeStampRaw_garanti_3');\n\n      setLastOnRampTimestamp(null);\n    }\n  }, [lastOnRampTimeStampRaw]);\n\n  useEffect(() => {\n    esl && console.log('garanti_intentRaw_garanti_1');\n    esl && console.log('checking intentRaw: ', intentRaw);\n    esl && console.log('checking depositStore: ', depositStore);\n  \n    if (intentRaw && depositStore && depositStore.length > 0) {\n      esl && console.log('garanti_intentRaw_garanti_2');\n\n      const intentData = intentRaw as any;\n      const intentProcessed: Intent = {\n        onRamper: intentData[0],\n        to: intentData[1],\n        deposit: intentData[2],\n        amount: intentData[3],\n        timestamp: intentData[4],\n      };\n\n      const depositorVenmoId = getVenmoIdByDepositId(depositStore, intentProcessed.deposit);\n      if (depositorVenmoId) {\n        const onRampIntentProcessed: OnRamperIntent = {\n          intent: intentProcessed,\n          depositorVenmoId: depositorVenmoId\n        };\n  \n        setCurrentIntent(onRampIntentProcessed);\n      } else {\n        esl && console.log('garanti_intentRaw_garanti_3');\n\n        setCurrentIntent(null);\n      }\n    } else {\n      esl && console.log('garanti_intentRaw_garanti_3');\n\n      setCurrentIntent(null);\n    }\n  }, [intentRaw, depositStore]);\n\n  return (\n    <OnRamperIntentsContext.Provider\n      value={{\n        currentIntentHash,\n        currentIntent,\n        refetchIntentHash,\n        lastOnRampTimestamp,\n        refetchLastOnRampTimestamp,\n        shouldFetchIntentHash\n      }}\n    >\n      {children}\n    </OnRamperIntentsContext.Provider>\n  );\n};\n\nexport default OnRamperIntentsProvider;\n"
  },
  {
    "path": "client/src/contexts/garanti/OnRamperIntents/index.ts",
    "content": "export { default as OnRamperIntentsContext } from './OnRamperIntentsContext';\nexport { default as OnRamperIntentsProvider } from './OnRamperIntentsProvider';\n"
  },
  {
    "path": "client/src/contexts/garanti/Ramp/RampContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RampValues {\n  minimumDepositAmount: bigint | null;\n  maximumOnRampAmount: bigint | null;\n  depositCounter: bigint | null;\n  refetchDepositCounter: (() => void) | null;\n  shouldFetchRampState: boolean;\n  onRampCooldownPeriod: bigint | null;\n}\n\nconst defaultValues: RampValues = {\n  minimumDepositAmount: null,\n  maximumOnRampAmount: null,\n  depositCounter: null,\n  refetchDepositCounter: null,\n  shouldFetchRampState: false,\n  onRampCooldownPeriod: null\n};\n\nconst RampContext = createContext<RampValues>(defaultValues)\n\nexport default RampContext\n"
  },
  {
    "path": "client/src/contexts/garanti/Ramp/RampProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RampContext from './RampContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RampProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { garantiRampAddress, garantiRampAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [minimumDepositAmount, setMinimumDepositAmount] = useState<bigint | null>(null);\n  const [maximumOnRampAmount, setMaximumOnRampAmount] = useState<bigint | null>(null);\n  const [depositCounter, setDepositCounter] = useState<bigint | null>(null);\n  const [onRampCooldownPeriod, setOnRampCooldownPeriod] = useState<bigint | null>(null);\n\n  const [shouldFetchRampState, setShouldFetchRampState] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // uint256 public minDepositAmount;\n  const {\n    data: minimumDepositAmountRaw,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'minDepositAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public maxOnRampAmount;\n  const {\n    data: maximumOnRampAmountRaw,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'maxOnRampAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public depositCounter;\n  const {\n    data: depositCounterRaw,\n    refetch: refetchDepositCounter,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'depositCounter',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public onRampCooldownPeriod;\n  const {\n    data: onRampCooldownPeriodRaw,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'onRampCooldownPeriod',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('garanti_shouldFetchRampState_1');\n    esl && console.log('checking garantiRampAddress: ', garantiRampAddress);\n\n    if (garantiRampAddress) {\n      esl && console.log('garanti_shouldFetchRampState_2');\n\n      setShouldFetchRampState(true);\n    } else {\n      esl && console.log('garanti_shouldFetchRampState_3');\n\n      setShouldFetchRampState(false);\n\n      setMinimumDepositAmount(null);\n      setDepositCounter(null);\n    }\n  }, [garantiRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('garanti_minDepositAmountRaw_1');\n    esl && console.log('checking minimumDepositAmountRaw: ', minimumDepositAmountRaw);\n  \n    if (minimumDepositAmountRaw) {\n      esl && console.log('garanti_minDepositAmountRaw_2');\n\n      const minimumDepositAmountProcessed = (minimumDepositAmountRaw as bigint);\n      \n      setMinimumDepositAmount(minimumDepositAmountProcessed);\n    } else {\n      esl && console.log('garanti_minDepositAmountRaw_3');\n\n      setMinimumDepositAmount(null);\n    }\n  }, [minimumDepositAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_maxOnRampAmountRaw_1');\n    esl && console.log('checking maximumOnRampAmountRaw: ', maximumOnRampAmountRaw);\n  \n    if (maximumOnRampAmountRaw) {\n      esl && console.log('revolut_maxOnRampAmountRaw_2');\n\n      const maximumOnRampAmountProcessed = (maximumOnRampAmountRaw as bigint);\n      \n      setMaximumOnRampAmount(maximumOnRampAmountProcessed);\n    } else {\n      esl && console.log('revolut_maxOnRampAmountRaw_3');\n\n      setMaximumOnRampAmount(null);\n    }\n  }, [maximumOnRampAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('garanti_depositCounterRaw_1');\n    esl && console.log('checking depositCounterRaw: ', depositCounterRaw);\n  \n    if (depositCounterRaw || depositCounterRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('garanti_depositCounterRaw_2');\n      \n      setDepositCounter(depositCounterRaw as bigint);\n    } else {\n      esl && console.log('garanti_depositCounterRaw_3');\n      \n      setDepositCounter(null);\n    }\n  }, [depositCounterRaw]);\n\n  useEffect(() => {\n    esl && console.log('garanti_onRampCooldownPeriodRaw_1');\n    esl && console.log('checking onRampCooldownPeriodRaw: ', onRampCooldownPeriodRaw);\n  \n    if (onRampCooldownPeriodRaw || onRampCooldownPeriodRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('garanti_onRampCooldownPeriodRaw_2');\n      \n      setOnRampCooldownPeriod(onRampCooldownPeriodRaw as bigint);\n    } else {\n      esl && console.log('garanti_onRampCooldownPeriodRaw_3');\n      \n      setOnRampCooldownPeriod(null);\n    }\n  }, [onRampCooldownPeriodRaw]);\n\n  return (\n    <RampContext.Provider\n      value={{\n        minimumDepositAmount,\n        maximumOnRampAmount,\n        depositCounter,\n        onRampCooldownPeriod,\n        refetchDepositCounter,\n        shouldFetchRampState\n      }}\n    >\n      {children}\n    </RampContext.Provider>\n  );\n};\n\nexport default RampProvider\n"
  },
  {
    "path": "client/src/contexts/garanti/Ramp/index.ts",
    "content": "export { default as RampContext } from './RampContext';\nexport { default as RampProvider } from './RampProvider';\n"
  },
  {
    "path": "client/src/contexts/garanti/Registration/RegistrationContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RegistrationValues {\n  isRegistered: boolean;\n  registrationHash: string | null;\n  storedGarantiId: string | null;\n  shouldFetchGarantiNftId: boolean;\n  garantiNftId: bigint | null;\n  garantiNftUri: string | null;\n  refetchGarantiNftId: (() => void) | null;\n  setStoredGarantiId: ((upiId: string) => void) | null;\n  refetchRampAccount: (() => void) | null;\n  shouldFetchRegistration: boolean;\n}\n\nconst defaultValues: RegistrationValues = {\n  isRegistered: false,\n  registrationHash: null,\n  storedGarantiId: null,\n  shouldFetchGarantiNftId: false,\n  garantiNftId: null,\n  garantiNftUri: null,\n  refetchGarantiNftId: null,\n  setStoredGarantiId: null,\n  refetchRampAccount: null,\n  shouldFetchRegistration: false\n};\n\nconst RegistrationContext = createContext<RegistrationValues>(defaultValues)\n\nexport default RegistrationContext\n"
  },
  {
    "path": "client/src/contexts/garanti/Registration/RegistrationProvider.tsx",
    "content": "import React, { useEffect, useCallback, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, ZERO_ADDRESS } from '@helpers/constants'\nimport useAccount from '@hooks/useAccount'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RegistrationContext from './RegistrationContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RegistrationProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { garantiRampAddress, garantiRampAbi, garantiNftAddress, nftAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [registrationHash, setRegistrationHash] = useState<string | null>(null);\n\n  const [storedGarantiStorageKey, setStoredGarantiIdStorageKey] = useState<string | null>(null);\n  const [storedGarantiId, _setStoredGarantiId] = useState<string | null>(() => {\n    if (storedGarantiStorageKey) {\n      return localStorage.getItem(storedGarantiStorageKey) || null;\n    }\n    return null;\n  });\n\n  const [garantiNftId, setGarantiNftId] = useState<bigint | null>(null);\n  const [garantiNftUri, setGarantiNftUri] = useState<string | null>(null);\n\n  const [shouldFetchGarantiRegistration, setShouldFetchGarantiRegistration] = useState<boolean>(false);\n  const [shouldFetchGarantiNftId, setShouldFetchGarantiNftId] = useState<boolean>(false);\n  const [shouldFetchGarantiNftUri, setShouldFetchGarantiNftUri] = useState<boolean>(false);\n\n  /*\n   * Overridden Setters\n   */\n\n  const setStoredGarantiId = useCallback((value: string | null) => {\n    if (storedGarantiStorageKey) {\n      localStorage.setItem(storedGarantiStorageKey, value || '');\n      _setStoredGarantiId(value);\n    }\n  }, [storedGarantiStorageKey]);\n\n  /*\n   * Helpers\n   */\n\n  // The !! operator will convert any truthy value to true and any falsy value to false.\n  const isRegistered = !!(registrationHash && registrationHash !== ZERO_ADDRESS);\n\n  /*\n   * Contract Reads\n   */\n\n  // getAccountInfo(address _account) external view returns (bytes32)\n  const {\n    data: garantiRampAccountRaw,\n    refetch: refetchGarantiRampAccount,\n  } = useContractRead({\n    address: garantiRampAddress,\n    abi: garantiRampAbi,\n    functionName: 'getAccountInfo',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchGarantiRegistration,\n  });\n\n  // getTokenId(address owner) public view returns (uint256)\n  const {\n    data: garantiNftIdRaw,\n    refetch: refetchGarantiNftId,\n  } = useContractRead({\n    address: garantiNftAddress,\n    abi: nftAbi,\n    functionName: 'getTokenId',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchGarantiNftId,\n  });\n\n  // tokenURI(uint256 tokenId) public view override returns (string memory)\n  const {\n    data: garantiNftUriRaw,\n  } = useContractRead({\n    address: garantiNftAddress,\n    abi: nftAbi,\n    functionName: 'tokenURI',\n    args: [\n      garantiNftId\n    ],\n    enabled: shouldFetchGarantiNftUri,\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('garanti_shouldFetchGarantiRegistration_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking garantiRampAddress: ', garantiRampAddress);\n    \n    if (isLoggedIn && loggedInEthereumAddress && garantiRampAddress) {\n      esl && console.log('garanti_shouldFetchGarantiRegistration_2');\n\n      setShouldFetchGarantiRegistration(true);\n    } else {\n      esl && console.log('garanti_shouldFetchGarantiRegistration_3');\n      \n      setShouldFetchGarantiRegistration(false);\n      setShouldFetchGarantiNftId(false);\n      setShouldFetchGarantiNftUri(false);\n\n      setRegistrationHash(null);\n      setStoredGarantiId(null);\n      setGarantiNftId(null);\n      setGarantiNftUri(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, garantiRampAddress, setStoredGarantiId]);\n\n  useEffect(() => {\n    esl && console.log('garanti_garantiRampAccountRaw_1');\n    esl && console.log('checking garantiRampAccountRaw: ', garantiRampAccountRaw);\n  \n    if (garantiRampAccountRaw) {\n      esl && console.log('garanti_garantiRampAccountRaw_2');\n\n      const rampAccountData = garantiRampAccountRaw as any;\n      const rampAccountProcessed = rampAccountData.idHash;\n\n      if (rampAccountProcessed !== ZERO_ADDRESS) {\n        esl && console.log('garanti_rampAccountRaw_3');\n\n        setRegistrationHash(rampAccountProcessed);\n\n        setShouldFetchGarantiNftId(true);\n      } else {\n        esl && console.log('garanti_rampAccountRaw_4');\n\n        setRegistrationHash(null);\n\n        setShouldFetchGarantiNftId(false);\n      }\n    } else {\n      esl && console.log('garanti_garantiRampAccountRaw_5');\n      \n      setRegistrationHash(null);\n\n      setShouldFetchGarantiNftId(false);\n    }\n  }, [garantiRampAccountRaw]);\n\n  useEffect(() => {\n    esl && console.log('garanti_storedGarantiStorageKey_1');\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n\n    if (loggedInEthereumAddress) {\n      esl && console.log('garanti_storedGarantiStorageKey_2');\n\n      setStoredGarantiIdStorageKey(`StoredGarantiId_${loggedInEthereumAddress}`);\n    } else {\n      esl && console.log('garanti_storedGarantiStorageKey_3');\n\n      setStoredGarantiIdStorageKey(null);\n    }\n  }, [loggedInEthereumAddress]);\n\n  useEffect(() => {\n    esl && console.log('garanti_StoredGarantiId_1');\n    esl && console.log('checking storedGarantiStorageKey: ', storedGarantiStorageKey);\n\n    if (storedGarantiStorageKey) {\n      esl && console.log('garanti_StoredGarantiId_2');\n\n      const storedValue = localStorage.getItem(storedGarantiStorageKey);\n      if (storedValue !== null) {\n        _setStoredGarantiId(storedValue);\n      } else {\n        _setStoredGarantiId(null);\n      }\n    } else {\n      esl && console.log('garanti_StoredGarantiId_3');\n\n      _setStoredGarantiId(null);\n    }\n  }, [storedGarantiStorageKey]);\n\n  useEffect(() => {\n    esl && console.log('garanti_garantiNftIdRaw_1');\n    esl && console.log('checking garantiNftIdRaw: ', garantiNftIdRaw);\n  \n    if (garantiNftIdRaw) { // we want ZERO to be falsy\n      esl && console.log('garanti_garantiNftIdRaw_2');\n\n      const garantiNftIdProcessed = (garantiNftIdRaw as bigint);\n      \n      setGarantiNftId(garantiNftIdProcessed);\n\n      setShouldFetchGarantiNftUri(true);\n    } else {\n      esl && console.log('garanti_garantiNftIdRaw_3');\n      \n      setGarantiNftId(null);\n\n      setShouldFetchGarantiNftUri(false);\n    }\n  }, [garantiNftIdRaw]);\n\n  useEffect(() => {\n    esl && console.log('garanti_garantiNftUriRaw_1');\n    esl && console.log('checking garantiNftUriRaw: ', garantiNftUriRaw);\n  \n    if (garantiNftUriRaw) {\n      esl && console.log('garanti_garantiNftUriRaw_2');\n\n      const garantiNftUriProcessed = (garantiNftUriRaw as string);\n      const svgString = extractSvg(garantiNftUriProcessed);\n      \n      setGarantiNftUri(svgString);\n    } else {\n      esl && console.log('garanti_garantiNftUriRaw_3');\n      \n      setGarantiNftUri(null);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [garantiNftUriRaw]);\n\n  /*\n   * Helpers\n   */\n\n  function decodeBase64Utf8(base64Str: string) {\n    const binaryString = window.atob(base64Str);\n\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n\n    const decoder = new TextDecoder('utf-8');\n    return decoder.decode(bytes);\n  };\n\n  function extractSvg(jsonDataString: string): any {\n    const uriPrefix = \"data:application/json;base64,\";\n\n    let base64String = jsonDataString;\n    if (jsonDataString.startsWith(uriPrefix)) {\n      base64String = jsonDataString.substring(uriPrefix.length);\n    }\n\n    const decodedString = atob(base64String);\n    const nftData = JSON.parse(decodedString);\n    const svgData = nftData.image;\n\n    const imagePrefix = \"data:image/svg+xml;base64,\";\n\n    let svgBase64String = svgData;\n    if (svgData.startsWith(imagePrefix)) {\n      svgBase64String = svgData.substring(imagePrefix.length);\n    }\n\n    const svgString = decodeBase64Utf8(svgBase64String);\n\n    return svgString;\n  };\n\n  /*\n   * Provider\n   */\n\n  return (\n    <RegistrationContext.Provider\n      value={{\n        isRegistered,\n        registrationHash,\n        storedGarantiId,\n        shouldFetchGarantiNftId,\n        garantiNftId,\n        garantiNftUri,\n        refetchGarantiNftId,\n        setStoredGarantiId,\n        refetchRampAccount: refetchGarantiRampAccount,\n        shouldFetchRegistration: shouldFetchGarantiRegistration,\n      }}\n    >\n      {children}\n    </RegistrationContext.Provider>\n  );\n};\n\nexport default RegistrationProvider\n"
  },
  {
    "path": "client/src/contexts/garanti/Registration/index.ts",
    "content": "export { default as RegistrationContext } from './RegistrationContext'\nexport { default as RegistrationProvider } from './RegistrationProvider'\n\n"
  },
  {
    "path": "client/src/contexts/hdfc/Deposits/DepositsContext.ts",
    "content": "import { createContext } from 'react'\n\nimport { DepositWithAvailableLiquidity, DepositIntent } from '../../../helpers/types/deposit'\n\n\ninterface DepositsValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositIntents: DepositIntent[] | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  refetchDepositIntents: (() => void) | null;\n  shouldFetchDepositIntents: boolean;\n}\n\nconst defaultValues: DepositsValues = {\n  deposits: null,\n  depositIntents: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  refetchDepositIntents: null,\n  shouldFetchDepositIntents: false\n};\n\nconst DepositsContext = createContext<DepositsValues>(defaultValues)\n\nexport default DepositsContext\n"
  },
  {
    "path": "client/src/contexts/hdfc/Deposits/DepositsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\nimport { useContractRead } from 'wagmi';\n\nimport {\n  Deposit,\n  DepositIntent,\n  DepositWithAvailableLiquidity,\n  Intent,\n  PaymentPlatform\n} from '@helpers/types';\nimport { esl } from '@helpers/constants';\nimport { unpackPackedVenmoId } from '@helpers/poseidonHash';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/hdfc/useRegistration';\n\nimport DepositsContext from './DepositsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst DepositsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { hdfcRampAddress, hdfcRampAbi } = useSmartContracts();\n  const { isRegistered } = useRegistration();\n\n  /*\n   * State\n   */\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositIntents, setDepositIntents] = useState<DepositIntent[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n  const [uniqueIntentHashes, setUniqueIntentHashes] = useState<string[]>([]);\n  const [intentIndexDepositMap, setIntentIndexDepositMap] = useState<Map<number, Deposit>>(new Map<number, Deposit>())\n  const [shouldFetchDepositIntents, setShouldFetchDepositIntents] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // function getAccountDeposits(address _account)\n  const {\n    data: depositsRaw,\n    refetch: refetchDeposits,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'getAccountDeposits',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchDeposits,\n  })\n      \n  // getIntentsWithOnRamperId(bytes32[] calldata _intentHashes)\n  const {\n    data: depositIntentsRaw,\n    refetch: refetchDepositIntents,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'getIntentsWithOnRamperId',\n    args: [\n      uniqueIntentHashes\n    ],\n    enabled: shouldFetchDepositIntents,\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('hdfc_shouldFetchDeposits_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking hdfcRampAddress: ', hdfcRampAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && hdfcRampAddress && isRegistered) {\n      esl && console.log('hdfc_shouldFetchDeposits_2');\n\n      setShouldFetchDeposits(true);\n    } else {\n      esl && console.log('hdfc_shouldFetchDeposits_3');\n\n      setShouldFetchDeposits(false);\n\n      setDeposits(null);\n      setDepositIntents(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, hdfcRampAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_shouldFetchDepositIntents_1');\n    esl && console.log('checking uniqueIntentHashes: ', uniqueIntentHashes);\n\n    if (uniqueIntentHashes.length > 0) {\n      esl && console.log('hdfc_shouldFetchDepositIntents_2');\n\n      setShouldFetchDepositIntents(true);\n    } else {\n      esl && console.log('hdfc_shouldFetchDepositIntents_3');\n\n      setShouldFetchDepositIntents(false);\n\n      setDepositIntents(null);\n    }\n  }, [uniqueIntentHashes]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_depositsRaw_1');\n    esl && console.log('checking depositsRaw: ', depositsRaw);\n\n    if (depositsRaw) {\n      esl && console.log('hdfc_depositsRaw_2');\n\n      const depositsArrayRaw = depositsRaw as any[];\n\n      const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n      const depositIntentHashes: string[][] = [];\n      const intentHashToDepositMap = new Map<string, Deposit>();\n\n      for (let i = depositsArrayRaw.length - 1; i >= 0; i--) {\n        const depositWithAvailableLiquidityData = depositsArrayRaw[i];\n\n        const depositData = depositWithAvailableLiquidityData.deposit;\n        const deposit: Deposit = {\n          platformType: PaymentPlatform.HDFC,\n          depositor: depositData.depositor.toString(),\n          venmoId: unpackPackedVenmoId(depositData.upiId),\n          depositAmount: depositData.depositAmount,\n          remainingDepositAmount: depositData.remainingDeposits,\n          outstandingIntentAmount: depositData.outstandingIntentAmount,\n          conversionRate: depositData.conversionRate,\n          intentHashes: depositData.intentHashes,\n        };\n\n        const depositWithLiquidity: DepositWithAvailableLiquidity = {\n          deposit,\n          availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n          depositId: depositWithAvailableLiquidityData.depositId,\n          depositorIdHash: depositWithAvailableLiquidityData.depositorIdHash,\n        }\n\n        sanitizedDeposits.push(depositWithLiquidity);\n        depositIntentHashes.push(depositData.intentHashes);\n\n        for (let j = 0; j < depositData.intentHashes.length; j++) {\n          const intentHash = depositData.intentHashes[j];\n          intentHashToDepositMap.set(intentHash, deposit);\n        }\n      }\n          \n      setDeposits(sanitizedDeposits);\n      \n      const flattenedDepositIntentHashes = depositIntentHashes.flat();\n      setUniqueIntentHashes(flattenedDepositIntentHashes);\n\n      const intentIndexDepositMap = new Map<number, Deposit>();\n      for (let i = 0; i < flattenedDepositIntentHashes.length; i++) {\n        const intentHash = flattenedDepositIntentHashes[i];\n        const deposit = intentHashToDepositMap.get(intentHash);\n\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent hash: ' + intentHash);\n        } else {\n          intentIndexDepositMap.set(i, deposit);\n        }\n      }\n      setIntentIndexDepositMap(intentIndexDepositMap);\n    } else {\n      esl && console.log('hdfc_depositsRaw_3');\n\n      setDeposits(null);\n      setUniqueIntentHashes([]);\n    }\n  }, [depositsRaw]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_depositsIntentsRaw_1');\n    esl && console.log('checking depositIntentsRaw: ', depositIntentsRaw);\n\n    if (depositIntentsRaw && depositIntentsRaw.length > 0) {\n      esl && console.log('hdfc_depositsIntentsRaw_2');\n\n      const depositIntentsArray = depositIntentsRaw as any[];\n\n      const sanitizedIntents: DepositIntent[] = [];\n      for (let i = depositIntentsArray.length - 1; i >= 0; i--) {\n        const intentWithOnRamperId = depositIntentsArray[i];\n        \n        const intentData = intentWithOnRamperId.intent;\n        const intent: Intent = {\n          onRamper: intentData.onRamper,\n          to: intentData.to,\n          deposit: intentData.deposit,\n          amount: intentData.amount,\n          timestamp: intentData.intentTimestamp,\n        };\n\n        const deposit = intentIndexDepositMap.get(i);\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent index: ' + i);\n        }\n\n        const onRamperVenmoHash = intentWithOnRamperId.onRamperIdHash;\n        const intentHash = intentWithOnRamperId.intentHash;\n        const depositIntent: DepositIntent = {\n          intent,\n          onRamperVenmoHash,\n          deposit,\n          intentHash\n        }\n\n        sanitizedIntents.push(depositIntent);\n      }\n\n      setDepositIntents(sanitizedIntents);\n    } else {\n      esl && console.log('hdfc_depositsIntentsRaw_3');\n      \n      setDepositIntents([]);\n    }\n  }, [depositIntentsRaw, intentIndexDepositMap]);\n\n  return (\n    <DepositsContext.Provider\n      value={{\n        deposits,\n        depositIntents,\n        refetchDeposits,\n        shouldFetchDeposits,\n        refetchDepositIntents,\n        shouldFetchDepositIntents,\n      }}\n    >\n      {children}\n    </DepositsContext.Provider>\n  );\n};\n\nexport default DepositsProvider;\n"
  },
  {
    "path": "client/src/contexts/hdfc/Deposits/index.ts",
    "content": "export { default as DepositsContext } from './DepositsContext'\nexport { default as DepositsProvider } from './DepositsProvider'\n"
  },
  {
    "path": "client/src/contexts/hdfc/Liquidity/LiquidityContext.ts",
    "content": "import { createContext } from 'react';\n\nimport {\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  StoredDeposit\n} from '@helpers/types';\n\nimport {\n  calculateUsdFromRequestedUSDC\n} from '../../venmo/Liquidity/helper';\n\n\ninterface LiquidityValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositStore: StoredDeposit[] | null;\n  getBestDepositForAmount: ((requestedOnRampInputAmount: string, onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  getDepositForMaxAvailableTransferSize: ((onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  calculateUsdFromRequestedUSDC: (requestedOnRampInputAmount: bigint, conversionRate: bigint) => bigint;\n}\n\nconst defaultValues: LiquidityValues = {\n  deposits: null,\n  depositStore: null,\n  getBestDepositForAmount: null,\n  getDepositForMaxAvailableTransferSize: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  calculateUsdFromRequestedUSDC,\n};\n\nconst LiquidityContext = createContext<LiquidityValues>(defaultValues);\n\nexport default LiquidityContext;\n"
  },
  {
    "path": "client/src/contexts/hdfc/Liquidity/LiquidityProvider.tsx",
    "content": "import React, {\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  ReactNode,\n} from 'react';\nimport { readContract } from '@wagmi/core';\n\nimport {\n  Abi,\n  Deposit,\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  PaymentPlatform,\n  StoredDeposit\n} from '@helpers/types';\nimport {\n  calculateUsdFromRequestedUSDC,\n  createDepositsStore,\n  fetchBestDepositForAmount,\n  fetchDepositForMaxAvailableTransferSize\n } from '../../venmo/Liquidity/helper';\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants';\nimport { unpackPackedUpiId } from '@helpers/poseidonHash';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useHdfcRampState from '@hooks/hdfc/useRampState';\nimport useDenyList from '@hooks/useDenyList';\n\nimport LiquidityContext from './LiquidityContext';\n\n\nconst BATCH_SIZE = 30;\nconst PRUNED_DEPOSITS_PREFIX = 'prunedHdfcDepositIds_';\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst LiquidityProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { hdfcRampAddress, hdfcRampAbi } = useSmartContracts();\n  const { depositCounter, maximumOnRampAmount } = useHdfcRampState();\n  const { fetchHdfcDepositoryDenyList } = useDenyList();\n\n  /*\n   * State\n   */\n\n  const currentRampAddressRef = useRef(hdfcRampAddress);\n\n  const [fetchDepositsTrigger, setFetchDepositsTrigger] = useState(0);\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositStore, setDepositStore] = useState<StoredDeposit[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  const fetchAndPruneDeposits = async (depositCounter: bigint, rampAddress: string) => {\n    const existingPrunedIds = fetchStoredPrunedDepositIds(rampAddress);\n    const depositIdsToFetch = initializeDepositIdsToFetch(depositCounter, existingPrunedIds);\n    const hdfcDenyList = await fetchHdfcDepositoryDenyList();\n\n    const batchedDeposits: DepositWithAvailableLiquidity[] = [];\n    const depositIdsToPrune: bigint[] = [];\n    \n    for (let i = 0; i < depositIdsToFetch.length; i += BATCH_SIZE) {\n      const depositIdBatch = depositIdsToFetch.slice(i, i + BATCH_SIZE);\n      const rawDepositsData = await fetchDepositBatch(depositIdBatch);\n      \n      const deposits = sanitizeRawDeposits(rawDepositsData as any);\n      for (let j = 0; j < deposits.length; j++) {\n        const deposit = deposits[j];\n\n        const orderHasNoAvailableLiquidity = deposit.availableLiquidity < 1000000;\n        const orderHasNoOustandingIntent = deposit.deposit.outstandingIntentAmount === ZERO;\n        const orderIsFilled = orderHasNoAvailableLiquidity && orderHasNoOustandingIntent;\n\n        if (orderIsFilled) {\n          depositIdsToPrune.push(deposit.depositId);\n        } else {\n          batchedDeposits.push(deposit);\n        }\n      }\n    }\n\n    if (currentRampAddressRef.current === rampAddress) {\n      const newPrunedDepositIds = [...existingPrunedIds, ...depositIdsToPrune];\n      updateStoredPrunedIds(rampAddress, newPrunedDepositIds);\n  \n      const hdfcDenyListSet = new Set(hdfcDenyList);\n      const filteredDeposits = batchedDeposits.filter(deposit => !hdfcDenyListSet.has(deposit.deposit.venmoId));\n      setDeposits(filteredDeposits);\n    }\n  };\n\n  const initializeDepositIdsToFetch = (currentDepositCounter: bigint, storedDepositIdsToPrune: bigint[]): bigint[] => {\n    if (currentDepositCounter) {\n      const prunedIdsSet = new Set(storedDepositIdsToPrune.map(id => id.toString()));\n      const depositIds = [];\n\n      for (let i = 0; i < currentDepositCounter; i++) {\n        const depositId = BigInt(i).toString();\n        if (!prunedIdsSet.has(depositId)) {\n          depositIds.push(BigInt(depositId));\n        }\n      }\n  \n      return depositIds;\n    } else {\n      return [];\n    }\n  };\n\n  const fetchDepositBatch = async (depositIdBatch: bigint[]) => {\n    try {\n      // function getDepositFromIds(uint256[] memory _depositIds) external view returns (Deposit[] memory depositArray)\n      const data = await readContract({\n        address: hdfcRampAddress as `0x${string}`,\n        abi: hdfcRampAbi as Abi,\n        functionName: 'getDepositFromIds',\n        args: [depositIdBatch],\n        account: CALLER_ACCOUNT,\n      });\n\n      return data;\n    } catch (error) {\n      console.error('Error fetching deposits batch:', error);\n      \n      return [];\n    }\n  };\n\n  const sanitizeRawDeposits = (rawDepositsData: any[]) => {\n    const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n\n    for (let i = rawDepositsData.length - 1; i >= 0; i--) {\n      const depositWithAvailableLiquidityData = rawDepositsData[i];\n      \n      const depositData = depositWithAvailableLiquidityData.deposit;\n      const deposit: Deposit = {\n        platformType: PaymentPlatform.HDFC,\n        depositor: depositData.depositor.toString(),\n        venmoId: unpackPackedUpiId(depositData.upiId),\n        depositAmount: depositData.depositAmount,\n        remainingDepositAmount: depositData.remainingDeposits,\n        outstandingIntentAmount: depositData.outstandingIntentAmount,\n        conversionRate: depositData.conversionRate,\n        intentHashes: depositData.intentHashes,\n      };\n\n      const depositWithLiquidity: DepositWithAvailableLiquidity = {\n        deposit,\n        availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n        depositId: depositWithAvailableLiquidityData.depositId,\n        depositorIdHash: depositWithAvailableLiquidityData.depositorIdHash,\n      }\n\n      sanitizedDeposits.push(depositWithLiquidity);\n    }\n\n    return sanitizedDeposits;\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    currentRampAddressRef.current = hdfcRampAddress;\n  }, [hdfcRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchDeposits_1');\n    esl && console.log('checking depositCounter: ', depositCounter);\n    esl && console.log('checking hdfcRampAddress: ', hdfcRampAddress);\n\n    const fetchData = async () => {\n      if (depositCounter && hdfcRampAddress) {\n        esl && console.log('venmo_shouldFetchDeposits_2');\n  \n        setShouldFetchDeposits(true);\n\n        await fetchAndPruneDeposits(depositCounter, hdfcRampAddress);\n      } else {\n        esl && console.log('venmo_shouldFetchDeposits_3');\n  \n        setShouldFetchDeposits(false);\n  \n        setDeposits(null);\n        setDepositStore(null);\n      }\n    };\n  \n    fetchData();\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [depositCounter, hdfcRampAddress, fetchDepositsTrigger]);\n\n  useEffect(() => {\n    esl && console.log('venmo_depositStore_1');\n    esl && console.log('checking deposits: ', deposits);\n\n    if (deposits && deposits.length > 0) {\n      esl && console.log('venmo_depositStore_2');\n\n      const newStore = createDepositsStore(deposits);\n\n      setDepositStore(newStore);\n    } else {\n      esl && console.log('venmo_depositStore_3');\n\n      setDepositStore(null);\n    }\n  }, [deposits]);\n\n  /*\n   * Public\n   */\n\n  const refetchDeposits = () => {\n    setFetchDepositsTrigger(prev => prev + 1);\n  };\n\n  const getBestDepositForAmount = useCallback((requestedOnRampInputAmount: string, onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore) {\n      return fetchBestDepositForAmount(\n        requestedOnRampInputAmount,\n        depositStore,\n        onRamperRegistrationHash\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore]);\n\n  const getDepositForMaxAvailableTransferSize = useCallback((onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore && maximumOnRampAmount) {\n      return fetchDepositForMaxAvailableTransferSize(\n        maximumOnRampAmount,\n        depositStore,\n        onRamperRegistrationHash\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore, maximumOnRampAmount]);\n\n  /*\n   * Helpers\n   */\n\n  const fetchStoredPrunedDepositIds = (contractAddress: string) => {\n    const prunedIdsStorageKey = `${PRUNED_DEPOSITS_PREFIX}${contractAddress}`;\n    const prunedIdsFromStorage = localStorage.getItem(prunedIdsStorageKey);\n    const prunedIdsFromStorageParsed = prunedIdsFromStorage ? JSON.parse(prunedIdsFromStorage).map(BigInt) : [];\n\n    return prunedIdsFromStorageParsed;\n  };\n\n  const updateStoredPrunedIds = (rampAddress: string, prunedDepositIdsToStore: bigint[]) => {\n    esl && console.log('updateStoredPrunedIds_1: ', rampAddress);\n\n    const storageKey = `${PRUNED_DEPOSITS_PREFIX}${rampAddress}`;\n    const prunedDepositIdsForStorage = prunedDepositIdsToStore.map(id => id.toString());\n    localStorage.setItem(storageKey, JSON.stringify(prunedDepositIdsForStorage));\n  };\n\n  return (\n    <LiquidityContext.Provider\n      value={{\n        deposits,\n        depositStore,\n        getBestDepositForAmount,\n        getDepositForMaxAvailableTransferSize,\n        refetchDeposits,\n        shouldFetchDeposits,\n        calculateUsdFromRequestedUSDC\n      }}\n    >\n      {children}\n    </LiquidityContext.Provider>\n  );\n};\n\nexport default LiquidityProvider;\n"
  },
  {
    "path": "client/src/contexts/hdfc/Liquidity/index.ts",
    "content": "export { default as LiquidityContext } from './LiquidityContext'\nexport { default as LiquidityProvider } from './LiquidityProvider'\n"
  },
  {
    "path": "client/src/contexts/hdfc/OnRamperIntents/OnRamperIntentsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { OnRamperIntent } from '@helpers/types';\n\n\ninterface OnRamperIntentsValues {\n  currentIntent: OnRamperIntent | null;\n  currentIntentHash: string | null;\n  refetchIntentHash: (() => void) | null;\n  lastOnRampTimestamp: bigint | null;\n  refetchLastOnRampTimestamp: (() => void) | null;\n  shouldFetchIntentHash: boolean;\n};\n\nconst defaultValues: OnRamperIntentsValues = {\n  currentIntent: null,\n  currentIntentHash: null,\n  refetchIntentHash: null,\n  lastOnRampTimestamp: null,\n  refetchLastOnRampTimestamp: null,\n  shouldFetchIntentHash: false\n};\n\nconst OnRamperIntentsContext = createContext<OnRamperIntentsValues>(defaultValues);\n\nexport default OnRamperIntentsContext;\n"
  },
  {
    "path": "client/src/contexts/hdfc/OnRamperIntents/OnRamperIntentsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\nimport { useContractRead } from 'wagmi';\n\nimport { Intent, OnRamperIntent, StoredDeposit } from '@helpers/types';\nimport { esl, ZERO, ZERO_ADDRESS } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useLiquidity from '@hooks/hdfc/useLiquidity';\nimport useRegistration from '@hooks/hdfc/useRegistration';\n\nimport OnRamperIntentsContext from './OnRamperIntentsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst OnRamperIntentsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { isRegistered } = useRegistration();\n  const { hdfcRampAddress, hdfcRampAbi } = useSmartContracts();\n  const { depositStore } = useLiquidity();\n\n  /*\n   * State\n   */\n\n  const [currentIntentHash, setCurrentIntentHash] = useState<string | null>(null);\n  const [currentIntent, setCurrentIntent] = useState<OnRamperIntent | null>(null);\n  const [lastOnRampTimestamp, setLastOnRampTimestamp] = useState<bigint | null>(null);\n\n  const [shouldFetchIntentHash, setShouldFetchIntentHash] = useState<boolean>(false);\n  const [shouldFetchIntent, setShouldFetchIntent] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // getIdCurrentIntentHash(address _account) external view returns (bytes32)\n  const {\n    data: intentHashRaw,\n    refetch: refetchIntentHash,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'getIdCurrentIntentHash',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  })\n\n  // function getLastOnRampTimestamp(address _account) external view returns (uint256)\n  const {\n    data: lastOnRampTimeStampRaw,\n    refetch: refetchLastOnRampTimestamp,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'getLastOnRampTimestamp',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  })\n\n  // mapping(bytes32 => Intent) public intents;\n  const {\n    data: intentRaw,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'intents',\n    args: [\n      currentIntentHash\n    ],\n    enabled: shouldFetchIntent,\n  })\n\n  /*\n   * Helpers\n   */\n\n  function getVenmoIdByDepositId(storedDeposits: StoredDeposit[], depositId: bigint): string | null {\n    // Find the StoredDeposit object with the matching depositId\n    const matchingDeposit = storedDeposits.find(storedDeposit => storedDeposit.depositId === depositId);\n    \n    // esl && console.log('hdfc_matchingDeposit: ', matchingDeposit);\n\n    // If a matching deposit is found, return the venmoId, otherwise return null\n    return matchingDeposit ? matchingDeposit.deposit.venmoId : null;\n  }\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('hdfc_shouldFetchIntentHash_hdfc_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && isRegistered) {\n      esl && console.log('hdfc_shouldFetchIntentHash_hdfc_2');\n\n      setShouldFetchIntentHash(true);\n    } else {\n      esl && console.log('hdfc_shouldFetchIntentHash_hdfc_3');\n\n      setShouldFetchIntentHash(false);\n\n      setCurrentIntentHash(null);\n      setCurrentIntent(null)\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_shouldFetchIntent_hdfc_1');\n    esl && console.log('checking currentIntentHash: ', currentIntentHash);\n    \n    if (currentIntentHash) {\n      esl && console.log('hdfc_shouldFetchIntent_hdfc_2');\n\n      setShouldFetchIntent(true);\n    } else {\n      esl && console.log('hdfc_shouldFetchIntent_hdfc_3');\n\n      setShouldFetchIntent(false);\n      \n      setCurrentIntent(null);\n    }\n  }, [currentIntentHash]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_intentHashRaw_hdfc_1');\n    esl && console.log('checking intentHashRaw: ', intentHashRaw);\n  \n    if (intentHashRaw !== ZERO_ADDRESS) {\n      esl && console.log('hdfc_intentHashRaw_hdfc_2');\n      \n      const intentHashProcessed = intentHashRaw as string;\n\n      setCurrentIntentHash(intentHashProcessed);\n    } else {\n      esl && console.log('hdfc_intentHashRaw_hdfc_3');\n\n      setCurrentIntentHash(null);\n    }\n  }, [intentHashRaw]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_lastOnRampTimeStampRaw_hdfc_1');\n    esl && console.log('checking lastOnRampTimeStampRaw: ', lastOnRampTimeStampRaw);\n  \n    if (lastOnRampTimeStampRaw || lastOnRampTimeStampRaw === ZERO) {\n      esl && console.log('hdfc_lastOnRampTimeStampRaw_hdfc_2');\n\n      setLastOnRampTimestamp(lastOnRampTimeStampRaw as bigint);\n    } else {\n      esl && console.log('hdfc_lastOnRampTimeStampRaw_hdfc_3');\n\n      setLastOnRampTimestamp(null);\n    }\n  }, [lastOnRampTimeStampRaw]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_intentRaw_hdfc_1');\n    esl && console.log('checking intentRaw: ', intentRaw);\n    esl && console.log('checking depositStore: ', depositStore);\n  \n    if (intentRaw && depositStore && depositStore.length > 0) {\n      esl && console.log('hdfc_intentRaw_hdfc_2');\n\n      const intentData = intentRaw as any;\n      const intentProcessed: Intent = {\n        onRamper: intentData[0],\n        to: intentData[1],\n        deposit: intentData[2],\n        amount: intentData[3],\n        timestamp: intentData[4],\n      };\n\n      const depositorVenmoId = getVenmoIdByDepositId(depositStore, intentProcessed.deposit);\n      if (depositorVenmoId) {\n        const onRampIntentProcessed: OnRamperIntent = {\n          intent: intentProcessed,\n          depositorVenmoId: depositorVenmoId\n        };\n  \n        setCurrentIntent(onRampIntentProcessed);\n      } else {\n        esl && console.log('hdfc_intentRaw_hdfc_3');\n\n        setCurrentIntent(null);\n      }\n    } else {\n      esl && console.log('hdfc_intentRaw_hdfc_3');\n\n      setCurrentIntent(null);\n    }\n  }, [intentRaw, depositStore]);\n\n  return (\n    <OnRamperIntentsContext.Provider\n      value={{\n        currentIntentHash,\n        currentIntent,\n        refetchIntentHash,\n        lastOnRampTimestamp,\n        refetchLastOnRampTimestamp,\n        shouldFetchIntentHash\n      }}\n    >\n      {children}\n    </OnRamperIntentsContext.Provider>\n  );\n};\n\nexport default OnRamperIntentsProvider;\n"
  },
  {
    "path": "client/src/contexts/hdfc/OnRamperIntents/index.ts",
    "content": "export { default as OnRamperIntentsContext } from './OnRamperIntentsContext';\nexport { default as OnRamperIntentsProvider } from './OnRamperIntentsProvider';\n"
  },
  {
    "path": "client/src/contexts/hdfc/Ramp/RampContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RampValues {\n  minimumDepositAmount: bigint | null;\n  maximumOnRampAmount: bigint | null;\n  depositCounter: bigint | null;\n  refetchDepositCounter: (() => void) | null;\n  shouldFetchRampState: boolean;\n  onRampCooldownPeriod: bigint | null;\n}\n\nconst defaultValues: RampValues = {\n  minimumDepositAmount: null,\n  maximumOnRampAmount: null,\n  depositCounter: null,\n  refetchDepositCounter: null,\n  shouldFetchRampState: false,\n  onRampCooldownPeriod: null\n};\n\nconst RampContext = createContext<RampValues>(defaultValues)\n\nexport default RampContext\n"
  },
  {
    "path": "client/src/contexts/hdfc/Ramp/RampProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RampContext from './RampContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RampProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { hdfcRampAddress, hdfcRampAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [minimumDepositAmount, setMinimumDepositAmount] = useState<bigint | null>(null);\n  const [maximumOnRampAmount, setMaximumOnRampAmount] = useState<bigint | null>(null);\n  const [depositCounter, setDepositCounter] = useState<bigint | null>(null);\n  const [onRampCooldownPeriod, setOnRampCooldownPeriod] = useState<bigint | null>(null);\n\n  const [shouldFetchRampState, setShouldFetchRampState] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // uint256 public minDepositAmount;\n  const {\n    data: minimumDepositAmountRaw,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'minDepositAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public maxOnRampAmount;\n  const {\n    data: maximumOnRampAmountRaw,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'maxOnRampAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public depositCounter;\n  const {\n    data: depositCounterRaw,\n    refetch: refetchDepositCounter,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'depositCounter',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public onRampCooldownPeriod;\n  const {\n    data: onRampCooldownPeriodRaw,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'onRampCooldownPeriod',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('hdfc_shouldFetchRampState_1');\n    esl && console.log('checking hdfcRampAddress: ', hdfcRampAddress);\n\n    if (hdfcRampAddress) {\n      esl && console.log('hdfc_shouldFetchRampState_2');\n\n      setShouldFetchRampState(true);\n    } else {\n      esl && console.log('hdfc_shouldFetchRampState_3');\n\n      setShouldFetchRampState(false);\n\n      setMinimumDepositAmount(null);\n      setDepositCounter(null);\n    }\n  }, [hdfcRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_minDepositAmountRaw_1');\n    esl && console.log('checking minimumDepositAmountRaw: ', minimumDepositAmountRaw);\n  \n    if (minimumDepositAmountRaw) {\n      esl && console.log('hdfc_minDepositAmountRaw_2');\n\n      const minimumDepositAmountProcessed = (minimumDepositAmountRaw as bigint);\n      \n      setMinimumDepositAmount(minimumDepositAmountProcessed);\n    } else {\n      esl && console.log('hdfc_minDepositAmountRaw_3');\n\n      setMinimumDepositAmount(null);\n    }\n  }, [minimumDepositAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_maxOnRampAmountRaw_1');\n    esl && console.log('checking maximumOnRampAmountRaw: ', maximumOnRampAmountRaw);\n  \n    if (maximumOnRampAmountRaw) {\n      esl && console.log('revolut_maxOnRampAmountRaw_2');\n\n      const maximumOnRampAmountProcessed = (maximumOnRampAmountRaw as bigint);\n      \n      setMaximumOnRampAmount(maximumOnRampAmountProcessed);\n    } else {\n      esl && console.log('revolut_maxOnRampAmountRaw_3');\n\n      setMaximumOnRampAmount(null);\n    }\n  }, [maximumOnRampAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_depositCounterRaw_1');\n    esl && console.log('checking depositCounterRaw: ', depositCounterRaw);\n  \n    if (depositCounterRaw || depositCounterRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('hdfc_depositCounterRaw_2');\n      \n      setDepositCounter(depositCounterRaw as bigint);\n    } else {\n      esl && console.log('hdfc_depositCounterRaw_3');\n      \n      setDepositCounter(null);\n    }\n  }, [depositCounterRaw]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_onRampCooldownPeriodRaw_1');\n    esl && console.log('checking onRampCooldownPeriodRaw: ', onRampCooldownPeriodRaw);\n  \n    if (onRampCooldownPeriodRaw || onRampCooldownPeriodRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('hdfc_onRampCooldownPeriodRaw_2');\n      \n      setOnRampCooldownPeriod(onRampCooldownPeriodRaw as bigint);\n    } else {\n      esl && console.log('hdfc_onRampCooldownPeriodRaw_3');\n      \n      setOnRampCooldownPeriod(null);\n    }\n  }, [onRampCooldownPeriodRaw]);\n\n  return (\n    <RampContext.Provider\n      value={{\n        minimumDepositAmount,\n        maximumOnRampAmount,\n        depositCounter,\n        onRampCooldownPeriod,\n        refetchDepositCounter,\n        shouldFetchRampState\n      }}\n    >\n      {children}\n    </RampContext.Provider>\n  );\n};\n\nexport default RampProvider\n"
  },
  {
    "path": "client/src/contexts/hdfc/Ramp/index.ts",
    "content": "export { default as RampContext } from './RampContext';\nexport { default as RampProvider } from './RampProvider';\n"
  },
  {
    "path": "client/src/contexts/hdfc/Registration/RegistrationContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RegistrationValues {\n  isRegistered: boolean;\n  registrationHash: string | null;\n  storedUpiId: string | null;\n  shouldFetchHdfcNftId: boolean;\n  hdfcNftId: bigint | null;\n  hdfcNftUri: string | null;\n  refetchHdfcNftId: (() => void) | null;\n  setStoredUpiId: ((upiId: string) => void) | null;\n  refetchRampAccount: (() => void) | null;\n  shouldFetchRegistration: boolean;\n}\n\nconst defaultValues: RegistrationValues = {\n  isRegistered: false,\n  registrationHash: null,\n  storedUpiId: null,\n  shouldFetchHdfcNftId: false,\n  hdfcNftId: null,\n  hdfcNftUri: null,\n  refetchHdfcNftId: null,\n  setStoredUpiId: null,\n  refetchRampAccount: null,\n  shouldFetchRegistration: false\n};\n\nconst RegistrationContext = createContext<RegistrationValues>(defaultValues)\n\nexport default RegistrationContext\n"
  },
  {
    "path": "client/src/contexts/hdfc/Registration/RegistrationProvider.tsx",
    "content": "import React, { useEffect, useCallback, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, ZERO_ADDRESS } from '@helpers/constants'\nimport useAccount from '@hooks/useAccount'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RegistrationContext from './RegistrationContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RegistrationProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { hdfcRampAddress, hdfcRampAbi, hdfcNftAddress, nftAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [registrationHash, setRegistrationHash] = useState<string | null>(null);\n\n  const [storedUpiStorageKey, setStoredUpiIdStorageKey] = useState<string | null>(null);\n  const [storedUpiId, _setStoredUpiId] = useState<string | null>(() => {\n    if (storedUpiStorageKey) {\n      return localStorage.getItem(storedUpiStorageKey) || null;\n    }\n    return null;\n  });\n\n  const [hdfcNftId, setHdfcNftId] = useState<bigint | null>(null);\n  const [hdfcNftUri, setHdfcNftUri] = useState<string | null>(null);\n\n  const [shouldFetchHdfcRegistration, setShouldFetchHdfcRegistration] = useState<boolean>(false);\n  const [shouldFetchHdfcNftId, setShouldFetchHdfcNftId] = useState<boolean>(false);\n  const [shouldFetchHdfcNftUri, setShouldFetchHdfcNftUri] = useState<boolean>(false);\n\n  /*\n   * Overridden Setters\n   */\n\n  const setStoredUpiId = useCallback((value: string | null) => {\n    if (storedUpiStorageKey) {\n      localStorage.setItem(storedUpiStorageKey, value || '');\n      _setStoredUpiId(value);\n    }\n  }, [storedUpiStorageKey]);\n\n  /*\n   * Helpers\n   */\n\n  // The !! operator will convert any truthy value to true and any falsy value to false.\n  const isRegistered = !!(registrationHash && registrationHash !== ZERO_ADDRESS);\n\n  /*\n   * Contract Reads\n   */\n\n  // getAccountInfo(address _account) external view returns (bytes32)\n  const {\n    data: hdfcRampAccountRaw,\n    refetch: refetchHdfcRampAccount,\n  } = useContractRead({\n    address: hdfcRampAddress,\n    abi: hdfcRampAbi,\n    functionName: 'getAccountInfo',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchHdfcRegistration,\n  });\n\n  // getTokenId(address owner) public view returns (uint256)\n  const {\n    data: hdfcNftIdRaw,\n    refetch: refetchHdfcNftId,\n  } = useContractRead({\n    address: hdfcNftAddress,\n    abi: nftAbi,\n    functionName: 'getTokenId',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchHdfcNftId,\n  });\n\n  // tokenURI(uint256 tokenId) public view override returns (string memory)\n  const {\n    data: hdfcNftUriRaw,\n  } = useContractRead({\n    address: hdfcNftAddress,\n    abi: nftAbi,\n    functionName: 'tokenURI',\n    args: [\n      hdfcNftId\n    ],\n    enabled: shouldFetchHdfcNftUri,\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('hdfc_shouldFetchHdfcRegistration_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking hdfcRampAddress: ', hdfcRampAddress);\n    \n    if (isLoggedIn && loggedInEthereumAddress && hdfcRampAddress) {\n      esl && console.log('hdfc_shouldFetchHdfcRegistration_2');\n\n      setShouldFetchHdfcRegistration(true);\n    } else {\n      esl && console.log('hdfc_shouldFetchHdfcRegistration_3');\n      \n      setShouldFetchHdfcRegistration(false);\n      setShouldFetchHdfcNftId(false);\n      setShouldFetchHdfcNftUri(false);\n\n      setRegistrationHash(null);\n      setStoredUpiId(null);\n      setHdfcNftId(null);\n      setHdfcNftUri(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, hdfcRampAddress, setStoredUpiId]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_hdfcRampAccountRaw_1');\n    esl && console.log('checking hdfcRampAccountRaw: ', hdfcRampAccountRaw);\n  \n    if (hdfcRampAccountRaw) {\n      esl && console.log('hdfc_hdfcRampAccountRaw_2');\n\n      const rampAccountData = hdfcRampAccountRaw as any;\n      const rampAccountProcessed = rampAccountData.idHash;\n\n      if (rampAccountProcessed !== ZERO_ADDRESS) {\n        esl && console.log('hdfc_rampAccountRaw_3');\n\n        setRegistrationHash(rampAccountProcessed);\n\n        setShouldFetchHdfcNftId(true);\n      } else {\n        esl && console.log('hdfc_rampAccountRaw_4');\n\n        setRegistrationHash(null);\n\n        setShouldFetchHdfcNftId(false);\n      }\n    } else {\n      esl && console.log('hdfc_hdfcRampAccountRaw_5');\n      \n      setRegistrationHash(null);\n\n      setShouldFetchHdfcNftId(false);\n    }\n  }, [hdfcRampAccountRaw]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_storedUpiStorageKey_1');\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n\n    if (loggedInEthereumAddress) {\n      esl && console.log('hdfc_storedUpiStorageKey_2');\n\n      setStoredUpiIdStorageKey(`StoredUpiId_${loggedInEthereumAddress}`);\n    } else {\n      esl && console.log('hdfc_storedUpiStorageKey_3');\n\n      setStoredUpiIdStorageKey(null);\n    }\n  }, [loggedInEthereumAddress]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_StoredUpiId_1');\n    esl && console.log('checking storedUpiStorageKey: ', storedUpiStorageKey);\n\n    if (storedUpiStorageKey) {\n      esl && console.log('hdfc_StoredUpiId_2');\n\n      const storedValue = localStorage.getItem(storedUpiStorageKey);\n      if (storedValue !== null) {\n        _setStoredUpiId(storedValue);\n      } else {\n        _setStoredUpiId(null);\n      }\n    } else {\n      esl && console.log('hdfc_StoredUpiId_3');\n\n      _setStoredUpiId(null);\n    }\n  }, [storedUpiStorageKey]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_hdfcNftIdRaw_1');\n    esl && console.log('checking hdfcNftIdRaw: ', hdfcNftIdRaw);\n  \n    if (hdfcNftIdRaw) { // we want ZERO to be falsy\n      esl && console.log('hdfc_hdfcNftIdRaw_2');\n\n      const hdfcNftIdProcessed = (hdfcNftIdRaw as bigint);\n      \n      setHdfcNftId(hdfcNftIdProcessed);\n\n      setShouldFetchHdfcNftUri(true);\n    } else {\n      esl && console.log('hdfc_hdfcNftIdRaw_3');\n      \n      setHdfcNftId(null);\n\n      setShouldFetchHdfcNftUri(false);\n    }\n  }, [hdfcNftIdRaw]);\n\n  useEffect(() => {\n    esl && console.log('hdfc_hdfcNftUriRaw_1');\n    esl && console.log('checking hdfcNftUriRaw: ', hdfcNftUriRaw);\n  \n    if (hdfcNftUriRaw) {\n      esl && console.log('hdfc_hdfcNftUriRaw_2');\n\n      const hdfcNftUriProcessed = (hdfcNftUriRaw as string);\n      const svgString = extractSvg(hdfcNftUriProcessed);\n      \n      setHdfcNftUri(svgString);\n    } else {\n      esl && console.log('hdfc_hdfcNftUriRaw_3');\n      \n      setHdfcNftUri(null);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [hdfcNftUriRaw]);\n\n  /*\n   * Helpers\n   */\n\n  function decodeBase64Utf8(base64Str: string) {\n    const binaryString = window.atob(base64Str);\n\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n\n    const decoder = new TextDecoder('utf-8');\n    return decoder.decode(bytes);\n  };\n\n  function extractSvg(jsonDataString: string): any {\n    const uriPrefix = \"data:application/json;base64,\";\n\n    let base64String = jsonDataString;\n    if (jsonDataString.startsWith(uriPrefix)) {\n      base64String = jsonDataString.substring(uriPrefix.length);\n    }\n\n    const decodedString = atob(base64String);\n    const nftData = JSON.parse(decodedString);\n    const svgData = nftData.image;\n\n    const imagePrefix = \"data:image/svg+xml;base64,\";\n\n    let svgBase64String = svgData;\n    if (svgData.startsWith(imagePrefix)) {\n      svgBase64String = svgData.substring(imagePrefix.length);\n    }\n\n    const svgString = decodeBase64Utf8(svgBase64String);\n\n    return svgString;\n  };\n\n  /*\n   * Provider\n   */\n\n  return (\n    <RegistrationContext.Provider\n      value={{\n        isRegistered,\n        registrationHash,\n        storedUpiId,\n        shouldFetchHdfcNftId,\n        hdfcNftId,\n        hdfcNftUri,\n        refetchHdfcNftId,\n        setStoredUpiId,\n        refetchRampAccount: refetchHdfcRampAccount,\n        shouldFetchRegistration: shouldFetchHdfcRegistration,\n      }}\n    >\n      {children}\n    </RegistrationContext.Provider>\n  );\n};\n\nexport default RegistrationProvider\n"
  },
  {
    "path": "client/src/contexts/hdfc/Registration/index.ts",
    "content": "export { default as RegistrationContext } from './RegistrationContext'\nexport { default as RegistrationProvider } from './RegistrationProvider'\n\n"
  },
  {
    "path": "client/src/contexts/legacy/Deposits/DepositsContext.ts",
    "content": "import { createContext } from 'react'\n\nimport { DepositWithAvailableLiquidity } from '../../../helpers/types/deposit';\n\n\ninterface DepositsValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n}\n\nconst defaultValues: DepositsValues = {\n  deposits: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n};\n\nconst DepositsContext = createContext<DepositsValues>(defaultValues);\n\nexport default DepositsContext;\n"
  },
  {
    "path": "client/src/contexts/legacy/Deposits/DepositsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\nimport { useContractRead } from 'wagmi';\n\nimport { Deposit, DepositWithAvailableLiquidity } from '../../../helpers/types/deposit';\nimport { PaymentPlatform } from '../../../helpers/types/paymentPlatform';\nimport { esl } from '@helpers/constants';\nimport { unpackPackedVenmoId } from '@helpers/poseidonHash';\nimport { EMPTY_STRING } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport DepositsContext from './DepositsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst DepositsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { legacyRampAddress, legacyRampAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // function getAccountDeposits(address _account)\n  const {\n    data: depositsRaw,\n    refetch: refetchDeposits,\n  } = useContractRead({\n    address: legacyRampAddress,\n    abi: legacyRampAbi,\n    functionName: 'getAccountDeposits',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchDeposits,\n  })\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchDeposits_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking legacyRampAddress: ', legacyRampAddress);\n\n    if (isLoggedIn && loggedInEthereumAddress && legacyRampAddress) {\n      esl && console.log('venmo_shouldFetchDeposits_2');\n\n      setShouldFetchDeposits(true);\n    } else {\n      esl && console.log('venmo_shouldFetchDeposits_3');\n\n      setShouldFetchDeposits(false);\n\n      setDeposits(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, legacyRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('venmo_depositsRaw_1');\n    esl && console.log('checking depositsRaw: ', depositsRaw);\n\n    if (depositsRaw) {\n      esl && console.log('venmo_depositsRaw_2');\n\n      const depositsArrayRaw = depositsRaw as any[];\n\n      const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n      for (let i = depositsArrayRaw.length - 1; i >= 0; i--) {\n        const depositWithAvailableLiquidityData = depositsArrayRaw[i];\n\n        const depositData = depositWithAvailableLiquidityData.deposit;\n        const deposit: Deposit = {\n          platformType: PaymentPlatform.VENMO,\n          depositor: depositData.depositor.toString(),\n          venmoId: unpackPackedVenmoId(depositData.packedVenmoId),\n          depositAmount: depositData.depositAmount,\n          remainingDepositAmount: depositData.remainingDeposits,\n          outstandingIntentAmount: depositData.outstandingIntentAmount,\n          conversionRate: depositData.conversionRate,\n          intentHashes: depositData.intentHashes,\n        };\n\n        const depositWithLiquidity: DepositWithAvailableLiquidity = {\n          deposit,\n          availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n          depositId: depositWithAvailableLiquidityData.depositId,\n          depositorIdHash: EMPTY_STRING,\n        }\n\n        sanitizedDeposits.push(depositWithLiquidity);\n      }\n          \n      setDeposits(sanitizedDeposits);\n    } else {\n      esl && console.log('venmo_depositsRaw_3');\n\n      setDeposits(null);\n    }\n  }, [depositsRaw]);\n\n  return (\n    <DepositsContext.Provider\n      value={{\n        deposits,\n        refetchDeposits,\n        shouldFetchDeposits,\n      }}\n    >\n      {children}\n    </DepositsContext.Provider>\n  );\n};\n\nexport default DepositsProvider;\n"
  },
  {
    "path": "client/src/contexts/legacy/Deposits/index.ts",
    "content": "export { default as DepositsContext } from './DepositsContext'\nexport { default as DepositsProvider } from './DepositsProvider'\n"
  },
  {
    "path": "client/src/contexts/revolut/Deposits/DepositsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { DepositWithAvailableLiquidity, DepositIntent } from '@helpers/types';\n\n\ninterface DepositsValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositIntents: DepositIntent[] | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  refetchDepositIntents: (() => void) | null;\n  shouldFetchDepositIntents: boolean;\n}\n\nconst defaultValues: DepositsValues = {\n  deposits: null,\n  depositIntents: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  refetchDepositIntents: null,\n  shouldFetchDepositIntents: false\n};\n\nconst DepositsContext = createContext<DepositsValues>(defaultValues)\n\nexport default DepositsContext\n"
  },
  {
    "path": "client/src/contexts/revolut/Deposits/DepositsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\nimport { useContractRead } from 'wagmi';\n\nimport {\n  Deposit,\n  DepositIntent,\n  DepositWithAvailableLiquidity,\n  Intent,\n  PaymentPlatform\n} from '@helpers/types';\nimport { esl } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/revolut/useRegistration';\n\nimport DepositsContext from './DepositsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst DepositsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { revolutRampAddress, revolutRampAbi } = useSmartContracts();\n  const { isRegistered } = useRegistration();\n\n  /*\n   * State\n   */\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositIntents, setDepositIntents] = useState<DepositIntent[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n  const [uniqueIntentHashes, setUniqueIntentHashes] = useState<string[]>([]);\n  const [intentIndexDepositMap, setIntentIndexDepositMap] = useState<Map<number, Deposit>>(new Map<number, Deposit>())\n  const [shouldFetchDepositIntents, setShouldFetchDepositIntents] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // function getAccountDeposits(address _account)\n  const {\n    data: depositsRaw,\n    refetch: refetchDeposits,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'getAccountDeposits',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchDeposits,\n  })\n      \n  // getIntentsWithOnRamperId(bytes32[] calldata _intentHashes)\n  const {\n    data: depositIntentsRaw,\n    refetch: refetchDepositIntents,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'getIntentsWithOnRamperId',\n    args: [\n      uniqueIntentHashes\n    ],\n    enabled: shouldFetchDepositIntents,\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchDeposits_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking revolutRampAddress: ', revolutRampAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && revolutRampAddress && isRegistered) {\n      esl && console.log('revolut_shouldFetchDeposits_2');\n\n      setShouldFetchDeposits(true);\n    } else {\n      esl && console.log('revolut_shouldFetchDeposits_3');\n\n      setShouldFetchDeposits(false);\n\n      setDeposits(null);\n      setDepositIntents(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, revolutRampAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchDepositIntents_1');\n    esl && console.log('checking uniqueIntentHashes: ', uniqueIntentHashes);\n\n    if (uniqueIntentHashes.length > 0) {\n      esl && console.log('revolut_shouldFetchDepositIntents_2');\n\n      setShouldFetchDepositIntents(true);\n    } else {\n      esl && console.log('revolut_shouldFetchDepositIntents_3');\n\n      setShouldFetchDepositIntents(false);\n\n      setDepositIntents(null);\n    }\n  }, [uniqueIntentHashes]);\n\n  useEffect(() => {\n    esl && console.log('revolut_depositsRaw_1');\n    esl && console.log('checking depositsRaw: ', depositsRaw);\n\n    if (depositsRaw) {\n      esl && console.log('revolut_depositsRaw_2');\n\n      const depositsArrayRaw = depositsRaw as any[];\n\n      const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n      const depositIntentHashes: string[][] = [];\n      const intentHashToDepositMap = new Map<string, Deposit>();\n\n      for (let i = depositsArrayRaw.length - 1; i >= 0; i--) {\n        const depositWithAvailableLiquidityData = depositsArrayRaw[i];\n\n        const depositData = depositWithAvailableLiquidityData.deposit;\n        const deposit: Deposit = {\n          platformType: PaymentPlatform.REVOLUT,\n          depositor: depositData.depositor.toString(),\n          venmoId: depositData.revolutTag,\n          depositAmount: depositData.depositAmount,\n          remainingDepositAmount: depositData.remainingDeposits,\n          outstandingIntentAmount: depositData.outstandingIntentAmount,\n          conversionRate: depositData.conversionRate,\n          intentHashes: depositData.intentHashes,\n          receiveCurrencyId: depositData.receiveCurrencyId,\n        };\n\n        const depositWithLiquidity: DepositWithAvailableLiquidity = {\n          deposit,\n          availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n          depositId: depositWithAvailableLiquidityData.depositId,\n          depositorIdHash: depositWithAvailableLiquidityData.depositorIdHash,\n        }\n\n        sanitizedDeposits.push(depositWithLiquidity);\n        depositIntentHashes.push(depositData.intentHashes);\n\n        for (let j = 0; j < depositData.intentHashes.length; j++) {\n          const intentHash = depositData.intentHashes[j];\n          intentHashToDepositMap.set(intentHash, deposit);\n        }\n      }\n          \n      setDeposits(sanitizedDeposits);\n      \n      const flattenedDepositIntentHashes = depositIntentHashes.flat();\n      setUniqueIntentHashes(flattenedDepositIntentHashes);\n\n      const intentIndexDepositMap = new Map<number, Deposit>();\n      for (let i = 0; i < flattenedDepositIntentHashes.length; i++) {\n        const intentHash = flattenedDepositIntentHashes[i];\n        const deposit = intentHashToDepositMap.get(intentHash);\n\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent hash: ' + intentHash);\n        } else {\n          intentIndexDepositMap.set(i, deposit);\n        }\n      }\n      setIntentIndexDepositMap(intentIndexDepositMap);\n    } else {\n      esl && console.log('revolut_depositsRaw_3');\n\n      setDeposits(null);\n      setUniqueIntentHashes([]);\n    }\n  }, [depositsRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_depositsIntentsRaw_1');\n    esl && console.log('checking depositIntentsRaw: ', depositIntentsRaw);\n\n    if (depositIntentsRaw && depositIntentsRaw.length > 0) {\n      esl && console.log('revolut_depositsIntentsRaw_2');\n\n      const depositIntentsArray = depositIntentsRaw as any[];\n\n      const sanitizedIntents: DepositIntent[] = [];\n      for (let i = depositIntentsArray.length - 1; i >= 0; i--) {\n        const intentWithOnRamperId = depositIntentsArray[i];\n        \n        const intentData = intentWithOnRamperId.intent;\n        const intent: Intent = {\n          onRamper: intentData.onRamper,\n          to: intentData.to,\n          deposit: intentData.deposit,\n          amount: intentData.amount,\n          timestamp: intentData.intentTimestamp,\n        };\n\n        const deposit = intentIndexDepositMap.get(i);\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent index: ' + i);\n        }\n\n        const onRamperVenmoHash = intentWithOnRamperId.onRamperIdHash;\n        const intentHash = intentWithOnRamperId.intentHash;\n        const depositIntent: DepositIntent = {\n          intent,\n          onRamperVenmoHash,\n          deposit,\n          intentHash\n        }\n\n        sanitizedIntents.push(depositIntent);\n      }\n\n      setDepositIntents(sanitizedIntents);\n    } else {\n      esl && console.log('revolut_depositsIntentsRaw_3');\n      \n      setDepositIntents([]);\n    }\n  }, [depositIntentsRaw, intentIndexDepositMap]);\n\n  return (\n    <DepositsContext.Provider\n      value={{\n        deposits,\n        depositIntents,\n        refetchDeposits,\n        shouldFetchDeposits,\n        refetchDepositIntents,\n        shouldFetchDepositIntents,\n      }}\n    >\n      {children}\n    </DepositsContext.Provider>\n  );\n};\n\nexport default DepositsProvider;\n"
  },
  {
    "path": "client/src/contexts/revolut/Deposits/index.ts",
    "content": "export { default as DepositsContext } from './DepositsContext'\nexport { default as DepositsProvider } from './DepositsProvider'\n"
  },
  {
    "path": "client/src/contexts/revolut/Liquidity/LiquidityContext.ts",
    "content": "import { createContext } from 'react'\n\nimport {\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  StoredDeposit\n} from '@helpers/types';\n\nimport {\n  calculateUsdFromRequestedUSDC\n} from './helper'\n\n\ninterface LiquidityValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositStore: StoredDeposit[] | null;\n  getBestDepositForAmount: ((requestedOnRampInputAmount: string, onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  getDepositForMaxAvailableTransferSize: ((onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  calculateUsdFromRequestedUSDC: (requestedOnRampInputAmount: bigint, conversionRate: bigint) => bigint;\n}\n\nconst defaultValues: LiquidityValues = {\n  deposits: null,\n  depositStore: null,\n  getBestDepositForAmount: null,\n  getDepositForMaxAvailableTransferSize: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  calculateUsdFromRequestedUSDC,\n};\n\nconst LiquidityContext = createContext<LiquidityValues>(defaultValues)\n\nexport default LiquidityContext\n"
  },
  {
    "path": "client/src/contexts/revolut/Liquidity/LiquidityProvider.tsx",
    "content": "import React, {\n  useEffect,\n  useCallback,\n  useRef,\n  useState,\n  ReactNode,\n} from 'react';\nimport { readContract } from '@wagmi/core';\nimport { ethers } from \"ethers\";\n\nimport {\n  Abi,\n  Deposit,\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  PaymentPlatform,\n  StoredDeposit,\n  paymentPlatformInfo\n} from '@helpers/types';\nimport {\n  calculateUsdFromRequestedUSDC,\n  createDepositsStore,\n  fetchBestDepositForAmount,\n  fetchDepositForMaxAvailableTransferSize\n} from './helper';\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants';\nimport { keccak256 } from '@helpers/keccack';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRampState from '@hooks/revolut/useRampState';\nimport useDenyList from '@hooks/useDenyList';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\n\nimport LiquidityContext from './LiquidityContext';\n\n\nconst BATCH_SIZE = 30;\nconst PRUNED_DEPOSITS_PREFIX = 'prunedRevolutDepositIds_';\n\nconst NOTARY_PUBKEY_HASH = process.env.NOTARY_PUBKEY_HASH;\nif (!NOTARY_PUBKEY_HASH) {\n    throw new Error(\"NOTARY_PUBKEY_HASH environment variable is not defined.\");\n};\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst LiquidityProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { currencyIndex } = usePlatformSettings();\n  const { revolutRampAddress, revolutRampAbi } = useSmartContracts();\n  const { depositCounter, maximumOnRampAmount } = useRampState();\n  const { fetchVenmoDepositorDenyList } = useDenyList();\n\n  /*\n   * State\n   */\n\n  const currentRampAddressRef = useRef(revolutRampAddress);\n\n  const [fetchDepositsTrigger, setFetchDepositsTrigger] = useState(0);\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositStore, setDepositStore] = useState<StoredDeposit[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  const fetchAndPruneDeposits = async (depositCounter: bigint, rampAddress: string) => {\n    const existingPrunedIds = fetchStoredPrunedDepositIds(rampAddress);\n    const depositIdsToFetch = initializeDepositIdsToFetch(depositCounter, existingPrunedIds);\n    const venmoDenyList = await fetchVenmoDepositorDenyList();\n\n    const batchedDeposits: DepositWithAvailableLiquidity[] = [];\n    const depositIdsToPrune: bigint[] = [];\n    \n    for (let i = 0; i < depositIdsToFetch.length; i += BATCH_SIZE) {\n      const depositIdBatch = depositIdsToFetch.slice(i, i + BATCH_SIZE);\n      const rawDepositsData = await fetchDepositBatch(depositIdBatch);\n      \n      const deposits = sanitizeRawDeposits(rawDepositsData as any);\n      for (let j = 0; j < deposits.length; j++) {\n        const deposit = deposits[j];\n\n        const pubkeyHashHex = ethers.utils.hexZeroPad(ethers.utils.hexlify(BigInt(NOTARY_PUBKEY_HASH)), 32);\n        const isInvalidNotaryKeyHash = deposit.deposit.notaryKeyHash !== pubkeyHashHex;\n        if (isInvalidNotaryKeyHash) {\n          depositIdsToPrune.push(deposit.depositId);\n        } else {\n          const orderHasNoAvailableLiquidity = deposit.availableLiquidity < 1000000;\n          const orderHasNoOustandingIntent = deposit.deposit.outstandingIntentAmount === ZERO;\n          const orderIsFilled = orderHasNoAvailableLiquidity && orderHasNoOustandingIntent;\n\n          if (orderIsFilled) {\n            depositIdsToPrune.push(deposit.depositId);\n          } else {\n            batchedDeposits.push(deposit);\n          }\n        }\n      }\n    }\n\n    if (currentRampAddressRef.current === rampAddress) {\n      const newPrunedDepositIds = [...existingPrunedIds, ...depositIdsToPrune];\n      updateStoredPrunedIds(rampAddress, newPrunedDepositIds);\n\n      const venmoDenyListSet = new Set(venmoDenyList);\n      const filteredDeposits = batchedDeposits.filter(deposit => !venmoDenyListSet.has(deposit.deposit.venmoId.replace(/\\0+$/, '')));\n      setDeposits(filteredDeposits);\n    }\n  };\n\n  const initializeDepositIdsToFetch = (currentDepositCounter: bigint, storedDepositIdsToPrune: bigint[]): bigint[] => {\n    if (currentDepositCounter) {\n      const prunedIdsSet = new Set(storedDepositIdsToPrune.map(id => id.toString()));\n      const depositIds = [];\n\n      for (let i = 0; i < currentDepositCounter; i++) {\n        const depositId = BigInt(i).toString();\n        if (!prunedIdsSet.has(depositId)) {\n          depositIds.push(BigInt(depositId));\n        }\n      }\n  \n      return depositIds;\n    } else {\n      return [];\n    }\n  };\n\n  const fetchDepositBatch = async (depositIdBatch: bigint[]) => {\n    try {\n      // function getDepositFromIds(uint256[] memory _depositIds) external view returns (Deposit[] memory depositArray)\n      const data = await readContract({\n        address: revolutRampAddress as `0x${string}`,\n        abi: revolutRampAbi as Abi,\n        functionName: 'getDepositFromIds',\n        args: [depositIdBatch],\n        account: CALLER_ACCOUNT,\n      });\n\n      return data;\n    } catch (error) {\n      console.error('Error fetching deposits batch:', error);\n      \n      return [];\n    }\n  };\n\n  const sanitizeRawDeposits = (rawDepositsData: any[]) => {\n    const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n\n    for (let i = rawDepositsData.length - 1; i >= 0; i--) {\n      const depositWithAvailableLiquidityData = rawDepositsData[i];\n\n      const depositData = depositWithAvailableLiquidityData.deposit;\n      const deposit: Deposit = {\n        platformType: PaymentPlatform.REVOLUT,\n        depositor: depositData.depositor.toString(),\n        venmoId: depositData.revolutTag,\n        depositAmount: depositData.depositAmount,\n        remainingDepositAmount: depositData.remainingDeposits,\n        outstandingIntentAmount: depositData.outstandingIntentAmount,\n        conversionRate: depositData.conversionRate,\n        intentHashes: depositData.intentHashes,\n        notaryKeyHash: depositData.notaryKeyHash,\n        receiveCurrencyId: depositData.receiveCurrencyId,\n      };\n\n      const depositWithLiquidity: DepositWithAvailableLiquidity = {\n        deposit,\n        availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n        depositId: depositWithAvailableLiquidityData.depositId,\n        depositorIdHash: depositWithAvailableLiquidityData.depositorId,\n      }\n\n      sanitizedDeposits.push(depositWithLiquidity);\n    }\n\n    return sanitizedDeposits;\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    currentRampAddressRef.current = revolutRampAddress;\n  }, [revolutRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchDeposits_1');\n    esl && console.log('checking depositCounter: ', depositCounter);\n    esl && console.log('checking revolutRampAddress: ', revolutRampAddress);\n\n    const fetchData = async () => {\n      if (depositCounter && revolutRampAddress) {\n        esl && console.log('revolut_shouldFetchDeposits_2');\n  \n        setShouldFetchDeposits(true);\n\n        await fetchAndPruneDeposits(depositCounter, revolutRampAddress);\n      } else {\n        esl && console.log('revolut_shouldFetchDeposits_3');\n  \n        setShouldFetchDeposits(false);\n  \n        setDeposits(null);\n        setDepositStore(null);\n\n      }\n    };\n  \n    fetchData();\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [depositCounter, revolutRampAddress, fetchDepositsTrigger]);\n\n  useEffect(() => {\n    esl && console.log('revolut_depositStore_1');\n    esl && console.log('checking deposits: ', deposits);\n\n    if (deposits && deposits.length > 0) {\n      esl && console.log('revolut_depositStore_2');\n\n      const newStore = createDepositsStore(deposits);\n\n      setDepositStore(newStore);\n    } else {\n      esl && console.log('revolut_depositStore_3');\n\n      setDepositStore(null);\n    }\n  }, [deposits]);\n\n  /*\n   * Public\n   */\n\n  const refetchDeposits = () => {\n    setFetchDepositsTrigger(prev => prev + 1);\n  };\n\n  const getBestDepositForAmount = useCallback((requestedOnRampInputAmount: string, onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore) {\n      return fetchBestDepositForAmount(\n        requestedOnRampInputAmount,\n        depositStore,\n        onRamperRegistrationHash,\n        keccak256(paymentPlatformInfo[PaymentPlatform.REVOLUT].platformCurrencies[currencyIndex])\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore, currencyIndex]);\n\n  const getDepositForMaxAvailableTransferSize = useCallback((onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore && maximumOnRampAmount) {\n      return fetchDepositForMaxAvailableTransferSize(\n        maximumOnRampAmount,\n        depositStore,\n        onRamperRegistrationHash\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore, maximumOnRampAmount]);\n\n  /*\n   * Helpers\n   */\n\n  const fetchStoredPrunedDepositIds = (contractAddress: string) => {\n    const prunedIdsStorageKey = `${PRUNED_DEPOSITS_PREFIX}${contractAddress}`;\n    const prunedIdsFromStorage = localStorage.getItem(prunedIdsStorageKey);\n    const prunedIdsFromStorageParsed = prunedIdsFromStorage ? JSON.parse(prunedIdsFromStorage).map(BigInt) : [];\n\n    return prunedIdsFromStorageParsed;\n  };\n\n  const updateStoredPrunedIds = (rampAddress: string, prunedDepositIdsToStore: bigint[]) => {\n    esl && console.log('updateStoredPrunedIds_1: ', rampAddress);\n\n    const storageKey = `${PRUNED_DEPOSITS_PREFIX}${rampAddress}`;\n    const prunedDepositIdsForStorage = prunedDepositIdsToStore.map(id => id.toString());\n    localStorage.setItem(storageKey, JSON.stringify(prunedDepositIdsForStorage));\n  };\n\n  return (\n    <LiquidityContext.Provider\n      value={{\n        deposits,\n        depositStore,\n        getBestDepositForAmount,\n        getDepositForMaxAvailableTransferSize,\n        refetchDeposits,\n        shouldFetchDeposits,\n        calculateUsdFromRequestedUSDC,\n      }}\n    >\n      {children}\n    </LiquidityContext.Provider>\n  );\n};\n\nexport default LiquidityProvider;\n"
  },
  {
    "path": "client/src/contexts/revolut/Liquidity/helper.ts",
    "content": "import {\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  ReceiveCurrencyIdType,\n  StoredDeposit\n} from '@helpers/types';\nimport { PENNY_IN_USDC_UNITS, PRECISION } from \"@helpers/constants\";\nimport { toBigInt, toUsdString, toUsdcString } from \"@helpers/units\";\n\n\nexport const createDepositsStore = (deposits: DepositWithAvailableLiquidity[]): StoredDeposit[] => {\n  const sortedDeposits = deposits.sort((a, b) => {\n    // Sort by ascending order of conversion rate\n    if (a.deposit.conversionRate > b.deposit.conversionRate) {\n      return -1;\n    }\n    if (a.deposit.conversionRate < b.deposit.conversionRate) {\n      return 1;\n    }\n    \n    // Sort by descending order of remaining available liquidity\n    if (b.availableLiquidity > a.availableLiquidity) {\n      return 1;\n    }\n    if (b.availableLiquidity < a.availableLiquidity) {\n      return -1;\n    }\n\n    return 0;\n  });\n\n  return sortedDeposits;\n};\n\nexport const calculateUsdFromRequestedUSDC = (requestedOnRampInputAmount: bigint, conversionRate: bigint): bigint => {\n  const rawAmount = requestedOnRampInputAmount * PRECISION / conversionRate;\n  const remainder = rawAmount % PENNY_IN_USDC_UNITS;\n\n  if (remainder > 0) {\n    return rawAmount - remainder + PENNY_IN_USDC_UNITS;\n  } else {\n    return rawAmount;\n  }\n};\n\nexport const fetchBestDepositForAmount = (\n  requestedOnRampInputAmount: string,\n  depositStore: StoredDeposit[],\n  userCurrentIdHash: string = '',\n  receiveCurrencyId: ReceiveCurrencyIdType\n): IndicativeQuote => {\n  const requestedAmountBI = toBigInt(requestedOnRampInputAmount);\n\n  let depositsToSearch: StoredDeposit[] = depositStore;\n  for (const deposit of depositsToSearch) {\n    const isUserDepositor = deposit.depositorIdHash === userCurrentIdHash;\n\n    const isSufficientLiquidity = deposit.availableLiquidity >= requestedAmountBI;\n    const isCurrencyMatch = deposit.deposit.receiveCurrencyId === receiveCurrencyId;\n\n    if (isSufficientLiquidity && !isUserDepositor && isCurrencyMatch) {\n      const conversionRate = deposit.deposit.conversionRate;\n      \n      const usdToSend = calculateUsdFromRequestedUSDC(requestedAmountBI, conversionRate);\n      const usdAmountToSend = toUsdString(usdToSend);\n\n      return {\n        depositId: deposit.depositId,\n        usdAmountToSend,\n        conversionRate,\n      } as IndicativeQuote;\n    }\n  }\n\n  return {\n    error: \"No deposits available to fulfill requested amount\"\n  } as IndicativeQuote;\n};\n\nexport const fetchDepositForMaxAvailableTransferSize = (\n  maxAmount: bigint,\n  depositStore: StoredDeposit[],\n  userCurrentIdHash: string = ''\n): IndicativeQuote => {\n  let largestAvailableDeposit: StoredDeposit | null = null;\n  let largestAmount: bigint = BigInt(0);\n\n  for (const deposit of depositStore) {\n    const isUserDepositor = deposit.depositorIdHash === userCurrentIdHash;\n    const isSufficientLiquidity = deposit.availableLiquidity >= maxAmount;\n\n    if (!isUserDepositor) {\n      if (isSufficientLiquidity) {\n        const conversionRate = deposit.deposit.conversionRate;\n        const usdToSend = calculateUsdFromRequestedUSDC(maxAmount, conversionRate);\n        const usdAmountToSend = toUsdString(usdToSend);\n        const maxAmountString = toUsdcString(maxAmount);\n\n        return {\n          depositId: deposit.depositId,\n          maxUSDCAmountAvailable: maxAmountString,\n          usdAmountToSend,\n          conversionRate,\n        } as IndicativeQuote;\n      } else if (deposit.availableLiquidity > largestAmount) {\n        largestAvailableDeposit = deposit;\n        largestAmount = deposit.availableLiquidity;\n      }\n    }\n  }\n\n  if (largestAvailableDeposit) {\n    const conversionRate = largestAvailableDeposit.deposit.conversionRate;\n    const usdToSend = calculateUsdFromRequestedUSDC(largestAmount, conversionRate);\n    const usdAmountToSend = toUsdString(usdToSend);\n    const largestAmountString = toUsdcString(largestAmount);\n\n    return {\n      depositId: largestAvailableDeposit.depositId,\n      maxUSDCAmountAvailable: largestAmountString,\n      usdAmountToSend,\n      conversionRate,\n    } as IndicativeQuote;\n  }\n\n  return {\n    error: \"No deposits available to fulfill requested amount\"\n  } as IndicativeQuote;\n};\n"
  },
  {
    "path": "client/src/contexts/revolut/Liquidity/index.ts",
    "content": "export { default as LiquidityContext } from './LiquidityContext'\nexport { default as LiquidityProvider } from './LiquidityProvider'\n"
  },
  {
    "path": "client/src/contexts/revolut/OnRamperIntents/OnRamperIntentsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { OnRamperIntent } from '@helpers/types';\n\n\ninterface OnRamperIntentsValues {\n  currentIntent: OnRamperIntent | null;\n  currentIntentHash: string | null;\n  refetchIntentHash: (() => void) | null;\n  currentIntentHashAsUint: string | null;\n  refetchIntentHashAsUint: (() => void) | null;\n  lastOnRampTimestamp: bigint | null;\n  refetchLastOnRampTimestamp: (() => void) | null;\n  shouldFetchIntentHash: boolean;\n};\n\nconst defaultValues: OnRamperIntentsValues = {\n  currentIntent: null,\n  currentIntentHash: null,\n  refetchIntentHash: null,\n  currentIntentHashAsUint: null,\n  refetchIntentHashAsUint: null,\n  lastOnRampTimestamp: null,\n  refetchLastOnRampTimestamp: null,\n  shouldFetchIntentHash: false\n};\n\nconst OnRamperIntentsContext = createContext<OnRamperIntentsValues>(defaultValues);\n\nexport default OnRamperIntentsContext;\n"
  },
  {
    "path": "client/src/contexts/revolut/OnRamperIntents/OnRamperIntentsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { Deposit, Intent, OnRamperIntent, PaymentPlatform, StoredDeposit } from '@helpers/types';\nimport { esl, ZERO, ZERO_ADDRESS } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useLiquidity from '@hooks/revolut/useLiquidity';\nimport useRegistration from '@hooks/revolut/useRegistration';\nimport useExtensionNotarizations from '@hooks/useExtensionNotarizations';\n\nimport OnRamperIntentsContext from './OnRamperIntentsContext'\nimport { toUsdcString } from '@helpers/units';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst OnRamperIntentsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { postOnramperIntent } = useExtensionNotarizations();\n  const { isRegistered } = useRegistration();\n  const { revolutRampAddress, revolutRampAbi } = useSmartContracts();\n  const { depositStore, calculateUsdFromRequestedUSDC } = useLiquidity();\n\n  /*\n   * State\n   */\n\n  const [currentIntentHash, setCurrentIntentHash] = useState<string | null>(null);\n  const [currentIntentHashAsUint, setCurrentIntentHashAsUint] = useState<string | null>(null);\n  const [currentIntent, setCurrentIntent] = useState<OnRamperIntent | null>(null);\n  const [lastOnRampTimestamp, setLastOnRampTimestamp] = useState<bigint | null>(null);\n\n  const [shouldFetchIntentHash, setShouldFetchIntentHash] = useState<boolean>(false);\n  const [shouldFetchIntent, setShouldFetchIntent] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // getIdCurrentIntentHashAsUint(address _account) external view returns (bytes32)\n  const {\n    data: intentHashAsUintRaw,\n    refetch: refetchIntentHashAsUint,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'getIdCurrentIntentHashAsUint',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  });\n\n    // getIdCurrentIntentHash(address _account) external view returns (bytes32)\n    const {\n      data: intentHashRaw,\n      refetch: refetchIntentHash,\n    } = useContractRead({\n      address: revolutRampAddress,\n      abi: revolutRampAbi,\n      functionName: 'getIdCurrentIntentHash',\n      args: [\n        loggedInEthereumAddress\n      ],\n      enabled: shouldFetchIntentHash,\n    })\n\n  // function getLastOnRampTimestamp(address _account) external view returns (uint256)\n  const {\n    data: lastOnRampTimeStampRaw,\n    refetch: refetchLastOnRampTimestamp,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'getLastOnRampTimestamp',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  })\n\n  // mapping(bytes32 => Intent) public intents;\n  const {\n    data: intentRaw,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'intents',\n    args: [\n      currentIntentHash\n    ],\n    enabled: shouldFetchIntent,\n  })\n\n  /*\n   * Helpers\n   */\n\n  function getDepositByDepositId(storedDeposits: StoredDeposit[], depositId: bigint): Deposit | null {\n    // Find the StoredDeposit object with the matching depositId\n    const matchingDeposit = storedDeposits.find(storedDeposit => storedDeposit.depositId === depositId);\n    \n    // esl && console.log('revolut_matchingDeposit: ', matchingDeposit);\n\n    // If a matching deposit is found, return the deposit, otherwise return null\n    return matchingDeposit ? matchingDeposit.deposit : null;\n  }\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchIntentHash_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && isRegistered) {\n      esl && console.log('revolut_shouldFetchIntentHash_2');\n\n      setShouldFetchIntentHash(true);\n    } else {\n      esl && console.log('revolut_shouldFetchIntentHash_3');\n\n      setShouldFetchIntentHash(false);\n\n      setCurrentIntentHash(null);\n      setCurrentIntent(null)\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchIntent_1');\n    esl && console.log('checking currentIntentHash: ', currentIntentHash);\n    \n    if (currentIntentHash) {\n      esl && console.log('revolut_shouldFetchIntent_2');\n\n      setShouldFetchIntent(true);\n    } else {\n      esl && console.log('revolut_shouldFetchIntent_3');\n\n      setShouldFetchIntent(false);\n      \n      setCurrentIntent(null);\n    }\n  }, [currentIntentHash]);\n\n  useEffect(() => {\n    esl && console.log('revolut_intentHashRaw_1');\n    esl && console.log('checking intentHashRaw: ', intentHashRaw);\n  \n    if (intentHashRaw !== ZERO_ADDRESS) {\n      esl && console.log('revolut_intentHashRaw_2');\n      \n      const intentHashProcessed = intentHashRaw as string;\n\n      setCurrentIntentHash(intentHashProcessed);\n    } else {\n      esl && console.log('revolut_intentHashRaw_3');\n\n      setCurrentIntentHash(null);\n    }\n  }, [intentHashRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_intentHashAsUintRaw_1');\n    esl && console.log('checking intentHashAsUintRaw: ', intentHashAsUintRaw);\n  \n    if (intentHashAsUintRaw !== ZERO_ADDRESS) {\n      esl && console.log('revolut_intentHashAsUintRaw_2');\n      \n      const intentHashAsUintProcessed = intentHashAsUintRaw as string;\n\n      setCurrentIntentHashAsUint(intentHashAsUintProcessed);\n    } else {\n      esl && console.log('revolut_intentHashAsUintRaw_3');\n\n      setCurrentIntentHashAsUint(null);\n    }\n  }, [intentHashAsUintRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_lastOnRampTimeStampRaw_1');\n    esl && console.log('checking lastOnRampTimeStampRaw: ', lastOnRampTimeStampRaw);\n  \n    if (lastOnRampTimeStampRaw || lastOnRampTimeStampRaw === ZERO) {\n      esl && console.log('revolut_lastOnRampTimeStampRaw_2');\n\n      setLastOnRampTimestamp(lastOnRampTimeStampRaw as bigint);\n    } else {\n      esl && console.log('revolut_lastOnRampTimeStampRaw_3');\n\n      setLastOnRampTimestamp(null);\n    }\n  }, [lastOnRampTimeStampRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_intentRaw_1');\n    esl && console.log('checking intentRaw: ', intentRaw);\n    esl && console.log('checking depositStore: ', depositStore);\n  \n    if (intentRaw && depositStore && depositStore.length > 0) {\n      esl && console.log('revolut_intentRaw_2');\n\n      const intentData = intentRaw as any;\n      const intentProcessed: Intent = {\n        onRamper: intentData[0],\n        to: intentData[1],\n        deposit: intentData[2],\n        amount: intentData[3],\n        timestamp: intentData[4],\n      };\n\n      const deposit = getDepositByDepositId(depositStore, intentProcessed.deposit);\n      if (deposit) {\n        const onRampIntentProcessed: OnRamperIntent = {\n          intent: intentProcessed,\n          depositorVenmoId: deposit.venmoId\n        };\n  \n        setCurrentIntent(onRampIntentProcessed);\n      } else {\n        esl && console.log('revolut_intentRaw_3');\n\n        setCurrentIntent(null);\n      }\n    } else {\n      esl && console.log('revolut_intentRaw_4');\n\n      setCurrentIntent(null);\n    }\n  }, [intentRaw, depositStore, postOnramperIntent]);\n\n  useEffect(() => {\n    esl && console.log('revolut_postOnramperIntent_1');\n  \n    if (currentIntent && depositStore) {\n      esl && console.log('revolut_postOnramperIntent_2');\n      const deposit = getDepositByDepositId(depositStore, currentIntent.intent.deposit);\n\n      if (deposit) {\n        const fiatToSendBigInt = calculateUsdFromRequestedUSDC(currentIntent.intent.amount, deposit.conversionRate);\n        const fiatToSend = toUsdcString(fiatToSendBigInt);\n        postOnramperIntent(\n          PaymentPlatform.REVOLUT,\n          JSON.stringify(currentIntent),\n          fiatToSend\n        );\n      }\n    }\n  }, [currentIntent, depositStore, postOnramperIntent, calculateUsdFromRequestedUSDC]);\n\n  return (\n    <OnRamperIntentsContext.Provider\n      value={{\n        currentIntentHash,\n        currentIntent,\n        refetchIntentHash,\n        currentIntentHashAsUint,\n        refetchIntentHashAsUint,\n        lastOnRampTimestamp,\n        refetchLastOnRampTimestamp,\n        shouldFetchIntentHash\n      }}\n    >\n      {children}\n    </OnRamperIntentsContext.Provider>\n  );\n};\n\nexport default OnRamperIntentsProvider\n"
  },
  {
    "path": "client/src/contexts/revolut/OnRamperIntents/index.ts",
    "content": "export { default as OnRamperIntentsContext } from './OnRamperIntentsContext'\nexport { default as OnRamperIntentsProvider } from './OnRamperIntentsProvider'\n"
  },
  {
    "path": "client/src/contexts/revolut/Permissions/PermissionsContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface PermissionsValues {\n  deniedUsers: string[] | null;\n  refetchDeniedUsers: (() => void) | null;\n  shouldFetchDeniedUsers: boolean;\n}\n\nconst defaultValues: PermissionsValues = {\n  deniedUsers: null,\n  refetchDeniedUsers: null,\n  shouldFetchDeniedUsers: false\n};\n\nconst PermissionsContext = createContext<PermissionsValues>(defaultValues)\n\nexport default PermissionsContext\n"
  },
  {
    "path": "client/src/contexts/revolut/Permissions/PermissionsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi';\n\nimport { esl } from '@helpers/constants'\nimport useAccount from '@hooks/useAccount'\nimport useSmartContracts from '@hooks/useSmartContracts'\nimport useRegistration from '@hooks/revolut/useRegistration';\n\nimport PermissionsContext from './PermissionsContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst PermissionsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { revolutRampAddress, revolutRampAbi } = useSmartContracts();\n  const { isRegistered } = useRegistration();\n\n  /*\n   * State\n   */\n\n  const [deniedUsers, setDeniedUsers] = useState<string[] | null>(null);\n\n  const [shouldFetchDeniedUsers, setShouldFetchDeniedUsers] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  /*\n   * getDeniedUsers(address _account) external view returns (bytes32[] memory)\n   */\n  const {\n    data: deniedUsersRaw,\n    refetch: refetchDeniedUsers,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: \"getDeniedUsers\",\n    args: [\n      loggedInEthereumAddress\n    ],\n    // cacheTime: 20_000,\n    enabled: shouldFetchDeniedUsers\n  });\n\n  /*\n   * Other deny list functions:\n   * isDeniedUser(address _account, bytes32 _deniedUser)\n   */\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchDeniedUsers_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && isRegistered) {\n      esl && console.log('revolut_shouldFetchDeniedUsers_2');\n\n      setShouldFetchDeniedUsers(true);\n    } else {\n      esl && console.log('revolut_shouldFetchDeniedUsers_3');\n\n      setShouldFetchDeniedUsers(false);\n\n      setDeniedUsers(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('revolut_deniedUsersRaw_1');\n    esl && console.log('checking deniedUsersRaw: ', deniedUsersRaw);\n  \n    if (deniedUsersRaw && deniedUsersRaw.length > 0) {\n      esl && console.log('revolut_deniedUsersRaw_2');\n\n      const deniedUsersProcessed = deniedUsersRaw as string[];\n\n      setDeniedUsers(deniedUsersProcessed);\n    } else {\n      esl && console.log('revolut_deniedUsersRaw_3');\n      \n      setDeniedUsers(null);\n    }\n  }, [deniedUsersRaw]);\n\n  return (\n    <PermissionsContext.Provider\n      value={{\n        deniedUsers,\n        refetchDeniedUsers,\n        shouldFetchDeniedUsers,\n      }}\n    >\n      {children}\n    </PermissionsContext.Provider>\n  );\n};\n\nexport default PermissionsProvider;\n"
  },
  {
    "path": "client/src/contexts/revolut/Permissions/index.ts",
    "content": "export { default as PermissionsContext } from './PermissionsContext'\nexport { default as PermissionsProvider } from './PermissionsProvider'\n"
  },
  {
    "path": "client/src/contexts/revolut/Ramp/RampContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RampValues {\n  minimumDepositAmount: bigint | null;\n  maximumOnRampAmount: bigint | null;\n  depositCounter: bigint | null;\n  refetchDepositCounter: (() => void) | null;\n  shouldFetchRampState: boolean;\n  onRampCooldownPeriod: bigint | null;\n}\n\nconst defaultValues: RampValues = {\n  minimumDepositAmount: null,\n  maximumOnRampAmount: null,\n  depositCounter: null,\n  refetchDepositCounter: null,\n  shouldFetchRampState: false,\n  onRampCooldownPeriod: null\n};\n\nconst RampContext = createContext<RampValues>(defaultValues)\n\nexport default RampContext\n"
  },
  {
    "path": "client/src/contexts/revolut/Ramp/RampProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RampContext from './RampContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RampProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { revolutRampAddress, revolutRampAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [minimumDepositAmount, setMinimumDepositAmount] = useState<bigint | null>(null);\n  const [maximumOnRampAmount, setMaximumOnRampAmount] = useState<bigint | null>(null);\n  const [depositCounter, setDepositCounter] = useState<bigint | null>(null);\n  const [onRampCooldownPeriod, setOnRampCooldownPeriod] = useState<bigint | null>(null);\n\n  const [shouldFetchRampState, setShouldFetchRampState] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // uint256 public minDepositAmount;\n  const {\n    data: minimumDepositAmountRaw,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'minDepositAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public maxOnRampAmount;\n  const {\n    data: maximumOnRampAmountRaw,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'maxOnRampAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public depositCounter;\n  const {\n    data: depositCounterRaw,\n    refetch: refetchDepositCounter,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'depositCounter',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public onRampCooldownPeriod;\n  const {\n    data: onRampCooldownPeriodRaw,\n  } = useContractRead({\n    address: revolutRampAddress,\n    abi: revolutRampAbi,\n    functionName: 'onRampCooldownPeriod',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchRampState_1');\n    esl && console.log('checking revolutRampAddress: ', revolutRampAddress);\n\n    if (revolutRampAddress) {\n      esl && console.log('revolut_shouldFetchRampState_2');\n\n      setShouldFetchRampState(true);\n    } else {\n      esl && console.log('revolut_shouldFetchRampState_3');\n\n      setShouldFetchRampState(false);\n\n      setMinimumDepositAmount(null);\n      setDepositCounter(null);\n    }\n  }, [revolutRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('revolut_minDepositAmountRaw_1');\n    esl && console.log('checking minimumDepositAmountRaw: ', minimumDepositAmountRaw);\n  \n    if (minimumDepositAmountRaw) {\n      esl && console.log('revolut_minDepositAmountRaw_2');\n\n      const minimumDepositAmountProcessed = (minimumDepositAmountRaw as bigint);\n      \n      setMinimumDepositAmount(minimumDepositAmountProcessed);\n    } else {\n      esl && console.log('revolut_minDepositAmountRaw_3');\n\n      setMinimumDepositAmount(null);\n    }\n  }, [minimumDepositAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_maxOnRampAmountRaw_1');\n    esl && console.log('checking maximumOnRampAmountRaw: ', maximumOnRampAmountRaw);\n  \n    if (maximumOnRampAmountRaw) {\n      esl && console.log('revolut_maxOnRampAmountRaw_2');\n\n      const maximumOnRampAmountProcessed = (maximumOnRampAmountRaw as bigint);\n      \n      setMaximumOnRampAmount(maximumOnRampAmountProcessed);\n    } else {\n      esl && console.log('revolut_maxOnRampAmountRaw_3');\n\n      setMaximumOnRampAmount(null);\n    }\n  }, [maximumOnRampAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_depositCounterRaw_1');\n    esl && console.log('checking depositCounterRaw: ', depositCounterRaw);\n  \n    if (depositCounterRaw || depositCounterRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('revolut_depositCounterRaw_2');\n      \n      setDepositCounter(depositCounterRaw as bigint);\n    } else {\n      esl && console.log('revolut_depositCounterRaw_3');\n      \n      setDepositCounter(null);\n    }\n  }, [depositCounterRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_onRampCooldownPeriodRaw_1');\n    esl && console.log('checking onRampCooldownPeriodRaw: ', onRampCooldownPeriodRaw);\n  \n    if (onRampCooldownPeriodRaw || onRampCooldownPeriodRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('revolut_onRampCooldownPeriodRaw_2');\n      \n      setOnRampCooldownPeriod(onRampCooldownPeriodRaw as bigint);\n    } else {\n      esl && console.log('revolut_onRampCooldownPeriodRaw_3');\n      \n      setOnRampCooldownPeriod(null);\n    }\n  }, [onRampCooldownPeriodRaw]);\n\n  return (\n    <RampContext.Provider\n      value={{\n        minimumDepositAmount,\n        maximumOnRampAmount,\n        depositCounter,\n        onRampCooldownPeriod,\n        refetchDepositCounter,\n        shouldFetchRampState\n      }}\n    >\n      {children}\n    </RampContext.Provider>\n  );\n};\n\nexport default RampProvider\n"
  },
  {
    "path": "client/src/contexts/revolut/Ramp/index.ts",
    "content": "export { default as RampContext } from './RampContext'\nexport { default as RampProvider } from './RampProvider'\n"
  },
  {
    "path": "client/src/contexts/revolut/Registration/RegistrationContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RegistrationValues {\n  isRegistered: boolean;\n  registrationHash: string | null; // revTagHash\n  extractedRevolutProfileId: string | null;\n  shouldFetchVenmoNftId: boolean;\n  venmoNftId: bigint | null;\n  venmoNftUri: string | null;\n  refetchVenmoNftId: (() => void) | null;\n  setExtractedRevolutProfileId: ((venmoId: string) => void) | null;\n  refetchRampAccount: (() => void) | null;\n  shouldFetchRegistration: boolean;\n}\n\nconst defaultValues: RegistrationValues = {\n  isRegistered: false,\n  registrationHash: null,\n  extractedRevolutProfileId: null,\n  shouldFetchVenmoNftId: false,\n  venmoNftId: null,\n  venmoNftUri: null,\n  refetchVenmoNftId: null,\n  setExtractedRevolutProfileId: null,\n  refetchRampAccount: null,\n  shouldFetchRegistration: false\n};\n\nconst RegistrationContext = createContext<RegistrationValues>(defaultValues)\n\nexport default RegistrationContext\n"
  },
  {
    "path": "client/src/contexts/revolut/Registration/RegistrationProvider.tsx",
    "content": "import React, { useCallback, useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, ZERO_ADDRESS } from '@helpers/constants'\nimport useAccount from '@hooks/useAccount'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RegistrationContext from './RegistrationContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RegistrationProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { revolutAccountRegistryAddress, revolutAccountRegistryAbi, revolutNftAddress, nftAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [registrationHash, setRegistrationHash] = useState<string | null>(null);\n\n  const [extractedProfileIdStorageKey, setExtractedProfileIdStorageKey] = useState<string | null>(null);\n  const [extractedRevolutProfileId, setExtractedRevolutProfileId] = useState<string | null>(() => {\n    if (extractedProfileIdStorageKey) {\n      return localStorage.getItem(extractedProfileIdStorageKey) || null;\n    }\n    return null;\n  });\n\n  const [venmoNftId, setVenmoNftId] = useState<bigint | null>(null);\n  const [venmoNftUri, setVenmoNftUri] = useState<string | null>(null);\n\n  const [shouldFetchRegistration, setShouldFetchRegistration] = useState<boolean>(false);\n  const [shouldFetchVenmoNftId, setShouldFetchVenmoNftId] = useState<boolean>(false);\n  const [shouldFetchVenmoNftUri, setShouldFetchVenmoNftUri] = useState<boolean>(false);\n\n  /*\n   * Overridden Setters\n   */\n\n  const setextractedRevolutProfileId = useCallback((value: string | null) => {\n    if (extractedProfileIdStorageKey) {\n      localStorage.setItem(extractedProfileIdStorageKey, value || '');\n      setExtractedRevolutProfileId(value);\n    }\n  }, [extractedProfileIdStorageKey]);\n\n  /*\n   * Helpers\n   */\n\n  // The !! operator will convert any truthy value to true and any falsy value to false.\n  const isRegistered = !!(registrationHash && registrationHash !== ZERO_ADDRESS);\n\n  /*\n   * Contract Reads (migrate to: https://wagmi.sh/react/hooks/useContractReads)\n   */\n\n  // getAccountInfo(address _account) external view returns (bytes32)\n  const {\n    data: rampAccountRaw,\n    refetch: refetchRampAccount,\n  } = useContractRead({\n    address: revolutAccountRegistryAddress,\n    abi: revolutAccountRegistryAbi,\n    functionName: 'getAccountId',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchRegistration,\n  })\n\n  // getTokenId(address owner) public view returns (uint256)\n  const {\n    data: venmoNftIdRaw,\n    refetch: refetchVenmoNftId,\n  } = useContractRead({\n    address: revolutNftAddress,\n    abi: nftAbi,\n    functionName: 'getTokenId',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchVenmoNftId,\n  })\n\n  // tokenURI(uint256 tokenId) public view override returns (string memory)\n  const {\n    data: venmoNftUriRaw,\n  } = useContractRead({\n    address: revolutNftAddress,\n    abi: nftAbi,\n    functionName: 'tokenURI',\n    args: [\n      venmoNftId\n    ],\n    enabled: shouldFetchVenmoNftUri,\n  })\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('revolut_shouldFetchRegistration_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking revolutAccountRegistryAddress: ', revolutAccountRegistryAddress);\n    \n    if (isLoggedIn && loggedInEthereumAddress && revolutAccountRegistryAddress) {\n      esl && console.log('revolut_shouldFetchRegistration_2');\n\n      setShouldFetchRegistration(true);\n    } else {\n      esl && console.log('revolut_shouldFetchRegistration_3');\n      \n      setShouldFetchRegistration(false);\n      setShouldFetchVenmoNftId(false);\n      setShouldFetchVenmoNftUri(false);\n\n      setRegistrationHash(null);\n      setextractedRevolutProfileId(null);\n      setVenmoNftUri(null);\n      setVenmoNftId(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, revolutAccountRegistryAddress, setextractedRevolutProfileId]);\n\n  useEffect(() => {\n    esl && console.log('revolut_rampAccountRaw_1');\n    esl && console.log('checking rampAccountRaw: ', rampAccountRaw);\n  \n    if (rampAccountRaw) {\n      esl && console.log('revolut_rampAccountRaw_2');\n\n      const revTagHashProcessed = rampAccountRaw as any;\n      \n      if (revTagHashProcessed !== ZERO_ADDRESS) {\n        esl && console.log('revolut_rampAccountRaw_3');\n\n        setRegistrationHash(revTagHashProcessed);\n        setShouldFetchVenmoNftId(true);\n      }\n    } else {\n      esl && console.log('revolut_rampAccountRaw_4');\n      \n      setRegistrationHash(null);\n      setShouldFetchVenmoNftId(false);\n    }\n  }, [rampAccountRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_extractedProfileIdStorageKey_1');\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n\n    if (loggedInEthereumAddress) {\n      esl && console.log('revolut_extractedProfileIdStorageKey_2');\n\n      setExtractedProfileIdStorageKey(`extractedRevolutProfileId_${loggedInEthereumAddress}`);\n    } else {\n      esl && console.log('revolut_extractedProfileIdStorageKey_3');\n\n      setExtractedProfileIdStorageKey(null);\n    }\n  }, [loggedInEthereumAddress]);\n\n  useEffect(() => {\n    esl && console.log('revolut_extractedRevolutProfileId_1');\n    esl && console.log('checking extractedProfileIdStorageKey: ', extractedProfileIdStorageKey);\n\n    if (extractedProfileIdStorageKey) {\n      esl && console.log('revolut_extractedRevolutProfileId_2');\n\n      const storedValue = localStorage.getItem(extractedProfileIdStorageKey);\n      if (storedValue !== null) {\n        setExtractedRevolutProfileId(storedValue);\n      } else {\n        setExtractedRevolutProfileId(null);\n      }\n    } else {\n      esl && console.log('revolut_extractedRevolutProfileId_3');\n\n      setExtractedRevolutProfileId(null);\n    }\n  }, [extractedProfileIdStorageKey]);\n\n  useEffect(() => {\n    esl && console.log('revolut_venmoNftIdRaw_1');\n    esl && console.log('checking venmoNftIdRaw: ', venmoNftIdRaw);\n  \n    if (venmoNftIdRaw) { // we want ZERO to be falsy\n      esl && console.log('revolut_venmoNftIdRaw_2');\n\n      const venmoNftIdProcessed = (venmoNftIdRaw as bigint);\n      \n      setVenmoNftId(venmoNftIdProcessed);\n\n      setShouldFetchVenmoNftUri(true);\n    } else {\n      esl && console.log('revolut_venmoNftIdRaw_3');\n      \n      setVenmoNftId(null);\n\n      setShouldFetchVenmoNftUri(false);\n    }\n  }, [venmoNftIdRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_venmoNftUriRaw_1');\n    esl && console.log('checking venmoNftUriRaw: ', venmoNftUriRaw);\n  \n    if (venmoNftUriRaw) {\n      esl && console.log('revolut_venmoNftUriRaw_2');\n\n      const venmoNftUriProcessed = (venmoNftUriRaw as string);\n      const svgString = extractSvg(venmoNftUriProcessed);\n      \n      setVenmoNftUri(svgString);\n    } else {\n      esl && console.log('revolut_venmoNftUriRaw_3');\n      \n      setVenmoNftUri(null);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [venmoNftUriRaw]);\n\n  /*\n   * Helpers\n   */\n\n  function decodeBase64Utf8(base64Str: string) {\n    const binaryString = window.atob(base64Str);\n\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n\n    const decoder = new TextDecoder('utf-8');\n    return decoder.decode(bytes);\n  };\n\n  function extractSvg(jsonDataString: string): any {\n    const uriPrefix = \"data:application/json;base64,\";\n\n    let base64String = jsonDataString;\n    if (jsonDataString.startsWith(uriPrefix)) {\n      base64String = jsonDataString.substring(uriPrefix.length);\n    }\n\n    const decodedString = atob(base64String);\n    const nftData = JSON.parse(decodedString);\n    const svgData = nftData.image;\n\n    const imagePrefix = \"data:image/svg+xml;base64,\";\n\n    let svgBase64String = svgData;\n    if (svgData.startsWith(imagePrefix)) {\n      svgBase64String = svgData.substring(imagePrefix.length);\n    }\n\n    const svgString = decodeBase64Utf8(svgBase64String);\n\n    return svgString;\n  };\n\n  /*\n   * Provider\n   */\n\n  return (\n    <RegistrationContext.Provider\n      value={{\n        isRegistered,\n        registrationHash,\n        extractedRevolutProfileId,\n        shouldFetchVenmoNftId,\n        venmoNftId,\n        venmoNftUri,\n        refetchVenmoNftId,\n        setExtractedRevolutProfileId,\n        refetchRampAccount,\n        shouldFetchRegistration,\n      }}\n    >\n      {children}\n    </RegistrationContext.Provider>\n  );\n};\n\nexport default RegistrationProvider;\n"
  },
  {
    "path": "client/src/contexts/revolut/Registration/index.ts",
    "content": "export { default as RegistrationContext } from './RegistrationContext'\nexport { default as RegistrationProvider } from './RegistrationProvider'\n"
  },
  {
    "path": "client/src/contexts/venmo/Deposits/DepositsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { DepositWithAvailableLiquidity, DepositIntent } from '@helpers/types';\n\n\ninterface DepositsValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositIntents: DepositIntent[] | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  refetchDepositIntents: (() => void) | null;\n  shouldFetchDepositIntents: boolean;\n}\n\nconst defaultValues: DepositsValues = {\n  deposits: null,\n  depositIntents: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  refetchDepositIntents: null,\n  shouldFetchDepositIntents: false\n};\n\nconst DepositsContext = createContext<DepositsValues>(defaultValues)\n\nexport default DepositsContext\n"
  },
  {
    "path": "client/src/contexts/venmo/Deposits/DepositsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react';\nimport { useContractRead } from 'wagmi';\n\nimport {\n  Deposit,\n  DepositIntent,\n  DepositWithAvailableLiquidity,\n  Intent,\n  PaymentPlatform\n} from '@helpers/types';\nimport { esl } from '@helpers/constants';\nimport { unpackPackedVenmoId } from '@helpers/poseidonHash';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRegistration from '@hooks/venmo/useRegistration';\n\nimport DepositsContext from './DepositsContext';\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst DepositsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { venmoRampAddress, venmoRampAbi } = useSmartContracts();\n  const { isRegistered } = useRegistration();\n\n  /*\n   * State\n   */\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositIntents, setDepositIntents] = useState<DepositIntent[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n  const [uniqueIntentHashes, setUniqueIntentHashes] = useState<string[]>([]);\n  const [intentIndexDepositMap, setIntentIndexDepositMap] = useState<Map<number, Deposit>>(new Map<number, Deposit>())\n  const [shouldFetchDepositIntents, setShouldFetchDepositIntents] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // function getAccountDeposits(address _account)\n  const {\n    data: depositsRaw,\n    refetch: refetchDeposits,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'getAccountDeposits',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchDeposits,\n  })\n      \n  // getIntentsWithOnRamperId(bytes32[] calldata _intentHashes)\n  const {\n    data: depositIntentsRaw,\n    refetch: refetchDepositIntents,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'getIntentsWithOnRamperId',\n    args: [\n      uniqueIntentHashes\n    ],\n    enabled: shouldFetchDepositIntents,\n  });\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchDeposits_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking venmoRampAddress: ', venmoRampAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && venmoRampAddress && isRegistered) {\n      esl && console.log('venmo_shouldFetchDeposits_2');\n\n      setShouldFetchDeposits(true);\n    } else {\n      esl && console.log('venmo_shouldFetchDeposits_3');\n\n      setShouldFetchDeposits(false);\n\n      setDeposits(null);\n      setDepositIntents(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, venmoRampAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchDepositIntents_1');\n    esl && console.log('checking uniqueIntentHashes: ', uniqueIntentHashes);\n\n    if (uniqueIntentHashes.length > 0) {\n      esl && console.log('venmo_shouldFetchDepositIntents_2');\n\n      setShouldFetchDepositIntents(true);\n    } else {\n      esl && console.log('venmo_shouldFetchDepositIntents_3');\n\n      setShouldFetchDepositIntents(false);\n\n      setDepositIntents(null);\n    }\n  }, [uniqueIntentHashes]);\n\n  useEffect(() => {\n    esl && console.log('venmo_depositsRaw_1');\n    esl && console.log('checking depositsRaw: ', depositsRaw);\n\n    if (depositsRaw) {\n      esl && console.log('venmo_depositsRaw_2');\n\n      const depositsArrayRaw = depositsRaw as any[];\n\n      const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n      const depositIntentHashes: string[][] = [];\n      const intentHashToDepositMap = new Map<string, Deposit>();\n\n      for (let i = depositsArrayRaw.length - 1; i >= 0; i--) {\n        const depositWithAvailableLiquidityData = depositsArrayRaw[i];\n\n        const depositData = depositWithAvailableLiquidityData.deposit;\n        const deposit: Deposit = {\n          platformType: PaymentPlatform.VENMO,\n          depositor: depositData.depositor.toString(),\n          venmoId: unpackPackedVenmoId(depositData.packedVenmoId),\n          depositAmount: depositData.depositAmount,\n          remainingDepositAmount: depositData.remainingDeposits,\n          outstandingIntentAmount: depositData.outstandingIntentAmount,\n          conversionRate: depositData.conversionRate,\n          intentHashes: depositData.intentHashes,\n        };\n\n        const depositWithLiquidity: DepositWithAvailableLiquidity = {\n          deposit,\n          availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n          depositId: depositWithAvailableLiquidityData.depositId,\n          depositorIdHash: depositWithAvailableLiquidityData.depositorIdHash,\n        }\n\n        sanitizedDeposits.push(depositWithLiquidity);\n        depositIntentHashes.push(depositData.intentHashes);\n\n        for (let j = 0; j < depositData.intentHashes.length; j++) {\n          const intentHash = depositData.intentHashes[j];\n          intentHashToDepositMap.set(intentHash, deposit);\n        }\n      }\n          \n      setDeposits(sanitizedDeposits);\n      \n      const flattenedDepositIntentHashes = depositIntentHashes.flat();\n      setUniqueIntentHashes(flattenedDepositIntentHashes);\n\n      const intentIndexDepositMap = new Map<number, Deposit>();\n      for (let i = 0; i < flattenedDepositIntentHashes.length; i++) {\n        const intentHash = flattenedDepositIntentHashes[i];\n        const deposit = intentHashToDepositMap.get(intentHash);\n\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent hash: ' + intentHash);\n        } else {\n          intentIndexDepositMap.set(i, deposit);\n        }\n      }\n      setIntentIndexDepositMap(intentIndexDepositMap);\n    } else {\n      esl && console.log('venmo_depositsRaw_3');\n\n      setDeposits(null);\n      setUniqueIntentHashes([]);\n    }\n  }, [depositsRaw]);\n\n  useEffect(() => {\n    esl && console.log('venmo_depositsIntentsRaw_1');\n    esl && console.log('checking depositIntentsRaw: ', depositIntentsRaw);\n\n    if (depositIntentsRaw && depositIntentsRaw.length > 0) {\n      esl && console.log('venmo_depositsIntentsRaw_2');\n\n      const depositIntentsArray = depositIntentsRaw as any[];\n\n      const sanitizedIntents: DepositIntent[] = [];\n      for (let i = depositIntentsArray.length - 1; i >= 0; i--) {\n        const intentWithOnRamperId = depositIntentsArray[i];\n        \n        const intentData = intentWithOnRamperId.intent;\n        const intent: Intent = {\n          onRamper: intentData.onRamper,\n          to: intentData.to,\n          deposit: intentData.deposit,\n          amount: intentData.amount,\n          timestamp: intentData.intentTimestamp,\n        };\n\n        const deposit = intentIndexDepositMap.get(i);\n        if (deposit === undefined) {\n          throw new Error('Deposit not found for intent index: ' + i);\n        }\n\n        const onRamperVenmoHash = intentWithOnRamperId.onRamperIdHash;\n        const intentHash = intentWithOnRamperId.intentHash;\n        const depositIntent: DepositIntent = {\n          intent,\n          onRamperVenmoHash,\n          deposit,\n          intentHash\n        }\n\n        sanitizedIntents.push(depositIntent);\n      }\n\n      setDepositIntents(sanitizedIntents);\n    } else {\n      esl && console.log('venmo_depositsIntentsRaw_3');\n      \n      setDepositIntents([]);\n    }\n  }, [depositIntentsRaw, intentIndexDepositMap]);\n\n  return (\n    <DepositsContext.Provider\n      value={{\n        deposits,\n        depositIntents,\n        refetchDeposits,\n        shouldFetchDeposits,\n        refetchDepositIntents,\n        shouldFetchDepositIntents,\n      }}\n    >\n      {children}\n    </DepositsContext.Provider>\n  );\n};\n\nexport default DepositsProvider;\n"
  },
  {
    "path": "client/src/contexts/venmo/Deposits/index.ts",
    "content": "export { default as DepositsContext } from './DepositsContext'\nexport { default as DepositsProvider } from './DepositsProvider'\n"
  },
  {
    "path": "client/src/contexts/venmo/Liquidity/LiquidityContext.ts",
    "content": "import { createContext } from 'react'\n\nimport {\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  StoredDeposit\n} from '@helpers/types';\n\nimport {\n  calculateUsdFromRequestedUSDC\n} from './helper'\n\n\ninterface LiquidityValues {\n  deposits: DepositWithAvailableLiquidity[] | null;\n  depositStore: StoredDeposit[] | null;\n  getBestDepositForAmount: ((requestedOnRampInputAmount: string, onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  getDepositForMaxAvailableTransferSize: ((onRamperRegistrationHash: string) => IndicativeQuote) | null;\n  refetchDeposits: (() => void) | null;\n  shouldFetchDeposits: boolean;\n  calculateUsdFromRequestedUSDC: (requestedOnRampInputAmount: bigint, conversionRate: bigint) => bigint;\n}\n\nconst defaultValues: LiquidityValues = {\n  deposits: null,\n  depositStore: null,\n  getBestDepositForAmount: null,\n  getDepositForMaxAvailableTransferSize: null,\n  refetchDeposits: null,\n  shouldFetchDeposits: false,\n  calculateUsdFromRequestedUSDC,\n};\n\nconst LiquidityContext = createContext<LiquidityValues>(defaultValues)\n\nexport default LiquidityContext\n"
  },
  {
    "path": "client/src/contexts/venmo/Liquidity/LiquidityProvider.tsx",
    "content": "import React, {\n  useEffect,\n  useCallback,\n  useRef,\n  useState,\n  ReactNode,\n} from 'react';\nimport { readContract } from '@wagmi/core';\n\nimport {\n  Abi,\n  Deposit,\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  PaymentPlatform,\n  StoredDeposit,\n} from '@helpers/types';\nimport {\n  calculateUsdFromRequestedUSDC,\n  createDepositsStore,\n  fetchBestDepositForAmount,\n  fetchDepositForMaxAvailableTransferSize\n } from './helper';\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants';\nimport { unpackPackedVenmoId } from '@helpers/poseidonHash';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useRampState from '@hooks/venmo/useRampState';\nimport useDenyList from '@hooks/useDenyList';\n\nimport LiquidityContext from './LiquidityContext';\n\n\nconst BATCH_SIZE = 30;\nconst PRUNED_DEPOSITS_PREFIX = 'prunedDepositIds_';\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst LiquidityProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { venmoRampAddress, venmoRampAbi } = useSmartContracts();\n  const { depositCounter, maximumOnRampAmount } = useRampState();\n  const { fetchVenmoDepositorDenyList } = useDenyList();\n\n  /*\n   * State\n   */\n\n  const currentRampAddressRef = useRef(venmoRampAddress);\n\n  const [fetchDepositsTrigger, setFetchDepositsTrigger] = useState(0);\n\n  const [deposits, setDeposits] = useState<DepositWithAvailableLiquidity[] | null>(null);\n  const [depositStore, setDepositStore] = useState<StoredDeposit[] | null>(null);\n\n  const [shouldFetchDeposits, setShouldFetchDeposits] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  const fetchAndPruneDeposits = async (depositCounter: bigint, rampAddress: string) => {\n    const existingPrunedIds = fetchStoredPrunedDepositIds(rampAddress);\n    const depositIdsToFetch = initializeDepositIdsToFetch(depositCounter, existingPrunedIds);\n    const venmoDenyList = await fetchVenmoDepositorDenyList();\n\n    const batchedDeposits: DepositWithAvailableLiquidity[] = [];\n    const depositIdsToPrune: bigint[] = [];\n    \n    for (let i = 0; i < depositIdsToFetch.length; i += BATCH_SIZE) {\n      const depositIdBatch = depositIdsToFetch.slice(i, i + BATCH_SIZE);\n      const rawDepositsData = await fetchDepositBatch(depositIdBatch);\n      \n      const deposits = sanitizeRawDeposits(rawDepositsData as any);\n      for (let j = 0; j < deposits.length; j++) {\n        const deposit = deposits[j];\n\n        const orderHasNoAvailableLiquidity = deposit.availableLiquidity < 1000000;\n        const orderHasNoOustandingIntent = deposit.deposit.outstandingIntentAmount === ZERO;\n        const orderIsFilled = orderHasNoAvailableLiquidity && orderHasNoOustandingIntent;\n\n        if (orderIsFilled) {\n          depositIdsToPrune.push(deposit.depositId);\n        } else {\n          batchedDeposits.push(deposit);\n        }\n      }\n    }\n\n    if (currentRampAddressRef.current === rampAddress) {\n      const newPrunedDepositIds = [...existingPrunedIds, ...depositIdsToPrune];\n      updateStoredPrunedIds(rampAddress, newPrunedDepositIds);\n\n      const venmoDenyListSet = new Set(venmoDenyList);\n      const filteredDeposits = batchedDeposits.filter(deposit => !venmoDenyListSet.has(deposit.deposit.venmoId.replace(/\\0+$/, '')));\n      setDeposits(filteredDeposits);\n    }\n  };\n\n  const initializeDepositIdsToFetch = (currentDepositCounter: bigint, storedDepositIdsToPrune: bigint[]): bigint[] => {\n    if (currentDepositCounter) {\n      const prunedIdsSet = new Set(storedDepositIdsToPrune.map(id => id.toString()));\n      const depositIds = [];\n\n      for (let i = 0; i < currentDepositCounter; i++) {\n        const depositId = BigInt(i).toString();\n        if (!prunedIdsSet.has(depositId)) {\n          depositIds.push(BigInt(depositId));\n        }\n      }\n  \n      return depositIds;\n    } else {\n      return [];\n    }\n  };\n\n  const fetchDepositBatch = async (depositIdBatch: bigint[]) => {\n    try {\n      // function getDepositFromIds(uint256[] memory _depositIds) external view returns (Deposit[] memory depositArray)\n      const data = await readContract({\n        address: venmoRampAddress as `0x${string}`,\n        abi: venmoRampAbi as Abi,\n        functionName: 'getDepositFromIds',\n        args: [depositIdBatch],\n        account: CALLER_ACCOUNT,\n      });\n\n      return data;\n    } catch (error) {\n      console.error('Error fetching deposits batch:', error);\n      \n      return [];\n    }\n  };\n\n  const sanitizeRawDeposits = (rawDepositsData: any[]) => {\n    const sanitizedDeposits: DepositWithAvailableLiquidity[] = [];\n\n    for (let i = rawDepositsData.length - 1; i >= 0; i--) {\n      const depositWithAvailableLiquidityData = rawDepositsData[i];\n      \n      const depositData = depositWithAvailableLiquidityData.deposit;\n      const deposit: Deposit = {\n        platformType: PaymentPlatform.VENMO,\n        depositor: depositData.depositor.toString(),\n        venmoId: unpackPackedVenmoId(depositData.packedVenmoId),\n        depositAmount: depositData.depositAmount,\n        remainingDepositAmount: depositData.remainingDeposits,\n        outstandingIntentAmount: depositData.outstandingIntentAmount,\n        conversionRate: depositData.conversionRate,\n        intentHashes: depositData.intentHashes,\n      };\n\n      const depositWithLiquidity: DepositWithAvailableLiquidity = {\n        deposit,\n        availableLiquidity: depositWithAvailableLiquidityData.availableLiquidity,\n        depositId: depositWithAvailableLiquidityData.depositId,\n        depositorIdHash: depositWithAvailableLiquidityData.depositorIdHash,\n      }\n\n      sanitizedDeposits.push(depositWithLiquidity);\n    }\n\n    return sanitizedDeposits;\n  };\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    currentRampAddressRef.current = venmoRampAddress;\n  }, [venmoRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchDeposits_1');\n    esl && console.log('checking depositCounter: ', depositCounter);\n    esl && console.log('checking venmoRampAddress: ', venmoRampAddress);\n\n    const fetchData = async () => {\n      if (depositCounter && venmoRampAddress) {\n        esl && console.log('venmo_shouldFetchDeposits_2');\n  \n        setShouldFetchDeposits(true);\n\n        await fetchAndPruneDeposits(depositCounter, venmoRampAddress);\n      } else {\n        esl && console.log('venmo_shouldFetchDeposits_3');\n  \n        setShouldFetchDeposits(false);\n  \n        setDeposits(null);\n        setDepositStore(null);\n\n      }\n    };\n  \n    fetchData();\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [depositCounter, venmoRampAddress, fetchDepositsTrigger]);\n\n  useEffect(() => {\n    esl && console.log('venmo_depositStore_1');\n    esl && console.log('checking deposits: ', deposits);\n\n    if (deposits && deposits.length > 0) {\n      esl && console.log('venmo_depositStore_2');\n\n      const newStore = createDepositsStore(deposits);\n\n      setDepositStore(newStore);\n    } else {\n      esl && console.log('venmo_depositStore_3');\n\n      setDepositStore(null);\n    }\n  }, [deposits]);\n\n  /*\n   * Public\n   */\n\n  const refetchDeposits = () => {\n    setFetchDepositsTrigger(prev => prev + 1);\n  };\n\n  const getBestDepositForAmount = useCallback((requestedOnRampInputAmount: string, onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore) {\n      return fetchBestDepositForAmount(\n        requestedOnRampInputAmount,\n        depositStore,\n        onRamperRegistrationHash\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore]);\n\n  const getDepositForMaxAvailableTransferSize = useCallback((onRamperRegistrationHash: string): IndicativeQuote => {\n    if (depositStore && maximumOnRampAmount) {\n      return fetchDepositForMaxAvailableTransferSize(\n        maximumOnRampAmount,\n        depositStore,\n        onRamperRegistrationHash\n      );\n    } else {\n      return {\n        error: 'No deposits available'\n      } as IndicativeQuote;\n    }\n  }, [depositStore, maximumOnRampAmount]);\n\n  /*\n   * Helpers\n   */\n\n  const fetchStoredPrunedDepositIds = (contractAddress: string) => {\n    const prunedIdsStorageKey = `${PRUNED_DEPOSITS_PREFIX}${contractAddress}`;\n    const prunedIdsFromStorage = localStorage.getItem(prunedIdsStorageKey);\n    const prunedIdsFromStorageParsed = prunedIdsFromStorage ? JSON.parse(prunedIdsFromStorage).map(BigInt) : [];\n\n    return prunedIdsFromStorageParsed;\n  };\n\n  const updateStoredPrunedIds = (rampAddress: string, prunedDepositIdsToStore: bigint[]) => {\n    esl && console.log('updateStoredPrunedIds_1: ', rampAddress);\n\n    const storageKey = `${PRUNED_DEPOSITS_PREFIX}${rampAddress}`;\n    const prunedDepositIdsForStorage = prunedDepositIdsToStore.map(id => id.toString());\n    localStorage.setItem(storageKey, JSON.stringify(prunedDepositIdsForStorage));\n  };\n\n  return (\n    <LiquidityContext.Provider\n      value={{\n        deposits,\n        depositStore,\n        getBestDepositForAmount,\n        getDepositForMaxAvailableTransferSize,\n        refetchDeposits,\n        shouldFetchDeposits,\n        calculateUsdFromRequestedUSDC,\n      }}\n    >\n      {children}\n    </LiquidityContext.Provider>\n  );\n};\n\nexport default LiquidityProvider;\n"
  },
  {
    "path": "client/src/contexts/venmo/Liquidity/helper.ts",
    "content": "import {\n  DepositWithAvailableLiquidity,\n  IndicativeQuote,\n  StoredDeposit\n} from '@helpers/types';\nimport { PENNY_IN_USDC_UNITS, PRECISION } from \"@helpers/constants\";\nimport { toBigInt, toUsdString, toUsdcString } from \"@helpers/units\";\n\n\nexport const createDepositsStore = (deposits: DepositWithAvailableLiquidity[]): StoredDeposit[] => {\n  const sortedDeposits = deposits.sort((a, b) => {\n    // Sort by ascending order of conversion rate\n    if (a.deposit.conversionRate > b.deposit.conversionRate) {\n      return -1;\n    }\n    if (a.deposit.conversionRate < b.deposit.conversionRate) {\n      return 1;\n    }\n    \n    // Sort by descending order of remaining available liquidity\n    if (b.availableLiquidity > a.availableLiquidity) {\n      return 1;\n    }\n    if (b.availableLiquidity < a.availableLiquidity) {\n      return -1;\n    }\n\n    return 0;\n  });\n\n  return sortedDeposits;\n};\n\nexport const calculateUsdFromRequestedUSDC = (requestedOnRampInputAmount: bigint, conversionRate: bigint): bigint => {\n  const rawAmount = requestedOnRampInputAmount * PRECISION / conversionRate;\n  const remainder = rawAmount % PENNY_IN_USDC_UNITS;\n\n  if (remainder > 0) {\n    return rawAmount - remainder + PENNY_IN_USDC_UNITS;\n  } else {\n    return rawAmount;\n  }\n};\n\nexport const fetchBestDepositForAmount = (\n  requestedOnRampInputAmount: string,\n  depositStore: StoredDeposit[],\n  userCurrentIdHash: string = ''\n): IndicativeQuote => {\n  const requestedAmountBI = toBigInt(requestedOnRampInputAmount);\n\n  let depositsToSearch: StoredDeposit[] = depositStore;\n  for (const deposit of depositsToSearch) {\n    const isUserDepositor = deposit.depositorIdHash === userCurrentIdHash;\n\n    const isSufficientLiquidity = deposit.availableLiquidity >= requestedAmountBI;\n\n    if (isSufficientLiquidity && !isUserDepositor) {\n      const conversionRate = deposit.deposit.conversionRate;\n      \n      const usdToSend = calculateUsdFromRequestedUSDC(requestedAmountBI, conversionRate);\n      const usdAmountToSend = toUsdString(usdToSend);\n\n      return {\n        depositId: deposit.depositId,\n        usdAmountToSend,\n        conversionRate,\n      } as IndicativeQuote;\n    }\n  }\n\n  return {\n    error: \"No deposits available to fulfill requested amount\"\n  } as IndicativeQuote;\n};\n\nexport const fetchDepositForMaxAvailableTransferSize = (\n  maxAmount: bigint,\n  depositStore: StoredDeposit[],\n  userCurrentIdHash: string = ''\n): IndicativeQuote => {\n  let largestAvailableDeposit: StoredDeposit | null = null;\n  let largestAmount: bigint = BigInt(0);\n\n  for (const deposit of depositStore) {\n    const isUserDepositor = deposit.depositorIdHash === userCurrentIdHash;\n    const isSufficientLiquidity = deposit.availableLiquidity >= maxAmount;\n\n    if (!isUserDepositor) {\n      if (isSufficientLiquidity) {\n        const conversionRate = deposit.deposit.conversionRate;\n        const usdToSend = calculateUsdFromRequestedUSDC(maxAmount, conversionRate);\n        const usdAmountToSend = toUsdString(usdToSend);\n        const maxAmountString = toUsdcString(maxAmount);\n\n        return {\n          depositId: deposit.depositId,\n          maxUSDCAmountAvailable: maxAmountString,\n          usdAmountToSend,\n          conversionRate,\n        } as IndicativeQuote;\n      } else if (deposit.availableLiquidity > largestAmount) {\n        largestAvailableDeposit = deposit;\n        largestAmount = deposit.availableLiquidity;\n      }\n    }\n  }\n\n  if (largestAvailableDeposit) {\n    const conversionRate = largestAvailableDeposit.deposit.conversionRate;\n    const usdToSend = calculateUsdFromRequestedUSDC(largestAmount, conversionRate);\n    const usdAmountToSend = toUsdString(usdToSend);\n    const largestAmountString = toUsdcString(largestAmount);\n\n    return {\n      depositId: largestAvailableDeposit.depositId,\n      maxUSDCAmountAvailable: largestAmountString,\n      usdAmountToSend,\n      conversionRate,\n    } as IndicativeQuote;\n  }\n\n  return {\n    error: \"No deposits available to fulfill requested amount\"\n  } as IndicativeQuote;\n};\n"
  },
  {
    "path": "client/src/contexts/venmo/Liquidity/index.ts",
    "content": "export { default as LiquidityContext } from './LiquidityContext'\nexport { default as LiquidityProvider } from './LiquidityProvider'\n"
  },
  {
    "path": "client/src/contexts/venmo/OnRamperIntents/OnRamperIntentsContext.ts",
    "content": "import { createContext } from 'react';\n\nimport { OnRamperIntent } from '@helpers/types';\n\n\ninterface OnRamperIntentsValues {\n  currentIntent: OnRamperIntent | null;\n  currentIntentHash: string | null;\n  refetchIntentHash: (() => void) | null;\n  lastOnRampTimestamp: bigint | null;\n  refetchLastOnRampTimestamp: (() => void) | null;\n  shouldFetchIntentHash: boolean;\n};\n\nconst defaultValues: OnRamperIntentsValues = {\n  currentIntent: null,\n  currentIntentHash: null,\n  refetchIntentHash: null,\n  lastOnRampTimestamp: null,\n  refetchLastOnRampTimestamp: null,\n  shouldFetchIntentHash: false\n};\n\nconst OnRamperIntentsContext = createContext<OnRamperIntentsValues>(defaultValues);\n\nexport default OnRamperIntentsContext;\n"
  },
  {
    "path": "client/src/contexts/venmo/OnRamperIntents/OnRamperIntentsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { Intent, OnRamperIntent, StoredDeposit } from '@helpers/types';\nimport { esl, ZERO, ZERO_ADDRESS } from '@helpers/constants';\nimport useAccount from '@hooks/useAccount';\nimport useSmartContracts from '@hooks/useSmartContracts';\nimport useLiquidity from '@hooks/venmo/useLiquidity';\nimport useRegistration from '@hooks/venmo/useRegistration';\n\nimport OnRamperIntentsContext from './OnRamperIntentsContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst OnRamperIntentsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { isRegistered } = useRegistration();\n  const { venmoRampAddress, venmoRampAbi } = useSmartContracts();\n  const { depositStore } = useLiquidity();\n\n  /*\n   * State\n   */\n\n  const [currentIntentHash, setCurrentIntentHash] = useState<string | null>(null);\n  const [currentIntent, setCurrentIntent] = useState<OnRamperIntent | null>(null);\n  const [lastOnRampTimestamp, setLastOnRampTimestamp] = useState<bigint | null>(null);\n\n  const [shouldFetchIntentHash, setShouldFetchIntentHash] = useState<boolean>(false);\n  const [shouldFetchIntent, setShouldFetchIntent] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32)\n  const {\n    data: intentHashRaw,\n    refetch: refetchIntentHash,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'getVenmoIdCurrentIntentHash',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  })\n\n  // function getLastOnRampTimestamp(address _account) external view returns (uint256)\n  const {\n    data: lastOnRampTimeStampRaw,\n    refetch: refetchLastOnRampTimestamp,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'getLastOnRampTimestamp',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchIntentHash,\n  })\n\n  // mapping(bytes32 => Intent) public intents;\n  const {\n    data: intentRaw,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'intents',\n    args: [\n      currentIntentHash\n    ],\n    enabled: shouldFetchIntent,\n  })\n\n  /*\n   * Helpers\n   */\n\n  function getVenmoIdByDepositId(storedDeposits: StoredDeposit[], depositId: bigint): string | null {\n    // Find the StoredDeposit object with the matching depositId\n    const matchingDeposit = storedDeposits.find(storedDeposit => storedDeposit.depositId === depositId);\n    \n    // esl && console.log('venmo_matchingDeposit: ', matchingDeposit);\n\n    // If a matching deposit is found, return the venmoId, otherwise return null\n    return matchingDeposit ? matchingDeposit.deposit.venmoId : null;\n  }\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchIntentHash_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && isRegistered) {\n      esl && console.log('venmo_shouldFetchIntentHash_2');\n\n      setShouldFetchIntentHash(true);\n    } else {\n      esl && console.log('venmo_shouldFetchIntentHash_3');\n\n      setShouldFetchIntentHash(false);\n\n      setCurrentIntentHash(null);\n      setCurrentIntent(null)\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchIntent_1');\n    esl && console.log('checking currentIntentHash: ', currentIntentHash);\n    \n    if (currentIntentHash) {\n      esl && console.log('venmo_shouldFetchIntent_2');\n\n      setShouldFetchIntent(true);\n    } else {\n      esl && console.log('venmo_shouldFetchIntent_3');\n\n      setShouldFetchIntent(false);\n      \n      setCurrentIntent(null);\n    }\n  }, [currentIntentHash]);\n\n  useEffect(() => {\n    esl && console.log('venmo_intentHashRaw_1');\n    esl && console.log('checking intentHashRaw: ', intentHashRaw);\n  \n    if (intentHashRaw !== ZERO_ADDRESS) {\n      esl && console.log('venmo_intentHashRaw_2');\n      \n      const intentHashProcessed = intentHashRaw as string;\n\n      setCurrentIntentHash(intentHashProcessed);\n    } else {\n      esl && console.log('venmo_intentHashRaw_3');\n\n      setCurrentIntentHash(null);\n    }\n  }, [intentHashRaw]);\n\n  useEffect(() => {\n    esl && console.log('venmo_lastOnRampTimeStampRaw_1');\n    esl && console.log('checking lastOnRampTimeStampRaw: ', lastOnRampTimeStampRaw);\n  \n    if (lastOnRampTimeStampRaw || lastOnRampTimeStampRaw === ZERO) {\n      esl && console.log('venmo_lastOnRampTimeStampRaw_2');\n\n      setLastOnRampTimestamp(lastOnRampTimeStampRaw as bigint);\n    } else {\n      esl && console.log('venmo_lastOnRampTimeStampRaw_3');\n\n      setLastOnRampTimestamp(null);\n    }\n  }, [lastOnRampTimeStampRaw]);\n\n  useEffect(() => {\n    esl && console.log('venmo_intentRaw_1');\n    esl && console.log('checking intentRaw: ', intentRaw);\n    esl && console.log('checking depositStore: ', depositStore);\n  \n    if (intentRaw && depositStore && depositStore.length > 0) {\n      esl && console.log('venmo_intentRaw_2');\n\n      const intentData = intentRaw as any;\n      const intentProcessed: Intent = {\n        onRamper: intentData[0],\n        to: intentData[1],\n        deposit: intentData[2],\n        amount: intentData[3],\n        timestamp: intentData[4],\n      };\n\n      const depositorVenmoId = getVenmoIdByDepositId(depositStore, intentProcessed.deposit);\n      if (depositorVenmoId) {\n        const onRampIntentProcessed: OnRamperIntent = {\n          intent: intentProcessed,\n          depositorVenmoId: depositorVenmoId\n        };\n  \n        setCurrentIntent(onRampIntentProcessed);\n      } else {\n        esl && console.log('venmo_intentRaw_3');\n\n        setCurrentIntent(null);\n      }\n    } else {\n      esl && console.log('venmo_intentRaw_4');\n\n      setCurrentIntent(null);\n    }\n  }, [intentRaw, depositStore]);\n\n  return (\n    <OnRamperIntentsContext.Provider\n      value={{\n        currentIntentHash,\n        currentIntent,\n        refetchIntentHash,\n        lastOnRampTimestamp,\n        refetchLastOnRampTimestamp,\n        shouldFetchIntentHash\n      }}\n    >\n      {children}\n    </OnRamperIntentsContext.Provider>\n  );\n};\n\nexport default OnRamperIntentsProvider\n"
  },
  {
    "path": "client/src/contexts/venmo/OnRamperIntents/index.ts",
    "content": "export { default as OnRamperIntentsContext } from './OnRamperIntentsContext'\nexport { default as OnRamperIntentsProvider } from './OnRamperIntentsProvider'\n"
  },
  {
    "path": "client/src/contexts/venmo/Permissions/PermissionsContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface PermissionsValues {\n  deniedUsers: string[] | null;\n  refetchDeniedUsers: (() => void) | null;\n  shouldFetchDeniedUsers: boolean;\n}\n\nconst defaultValues: PermissionsValues = {\n  deniedUsers: null,\n  refetchDeniedUsers: null,\n  shouldFetchDeniedUsers: false\n};\n\nconst PermissionsContext = createContext<PermissionsValues>(defaultValues)\n\nexport default PermissionsContext\n"
  },
  {
    "path": "client/src/contexts/venmo/Permissions/PermissionsProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi';\n\nimport { esl } from '@helpers/constants'\nimport useAccount from '@hooks/useAccount'\nimport useSmartContracts from '@hooks/useSmartContracts'\nimport useRegistration from '@hooks/venmo/useRegistration';\n\nimport PermissionsContext from './PermissionsContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst PermissionsProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount();\n  const { venmoRampAddress, venmoRampAbi } = useSmartContracts();\n  const { isRegistered } = useRegistration();\n\n  /*\n   * State\n   */\n\n  const [deniedUsers, setDeniedUsers] = useState<string[] | null>(null);\n\n  const [shouldFetchDeniedUsers, setShouldFetchDeniedUsers] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  /*\n   * getDeniedUsers(address _account) external view returns (bytes32[] memory)\n   */\n  const {\n    data: deniedUsersRaw,\n    refetch: refetchDeniedUsers,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: \"getDeniedUsers\",\n    args: [\n      loggedInEthereumAddress\n    ],\n    // cacheTime: 20_000,\n    enabled: shouldFetchDeniedUsers\n  });\n\n  /*\n   * Other deny list functions:\n   * isDeniedUser(address _account, bytes32 _deniedUser)\n   */\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchDeniedUsers_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking isRegistered: ', isRegistered);\n\n    if (isLoggedIn && loggedInEthereumAddress && isRegistered) {\n      esl && console.log('venmo_shouldFetchDeniedUsers_2');\n\n      setShouldFetchDeniedUsers(true);\n    } else {\n      esl && console.log('venmo_shouldFetchDeniedUsers_3');\n\n      setShouldFetchDeniedUsers(false);\n\n      setDeniedUsers(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, isRegistered]);\n\n  useEffect(() => {\n    esl && console.log('venmo_deniedUsersRaw_1');\n    esl && console.log('checking deniedUsersRaw: ', deniedUsersRaw);\n  \n    if (deniedUsersRaw && deniedUsersRaw.length > 0) {\n      esl && console.log('venmo_deniedUsersRaw_2');\n\n      const deniedUsersProcessed = deniedUsersRaw as string[];\n\n      setDeniedUsers(deniedUsersProcessed);\n    } else {\n      esl && console.log('venmo_deniedUsersRaw_3');\n      \n      setDeniedUsers(null);\n    }\n  }, [deniedUsersRaw]);\n\n  return (\n    <PermissionsContext.Provider\n      value={{\n        deniedUsers,\n        refetchDeniedUsers,\n        shouldFetchDeniedUsers,\n      }}\n    >\n      {children}\n    </PermissionsContext.Provider>\n  );\n};\n\nexport default PermissionsProvider;\n"
  },
  {
    "path": "client/src/contexts/venmo/Permissions/index.ts",
    "content": "export { default as PermissionsContext } from './PermissionsContext'\nexport { default as PermissionsProvider } from './PermissionsProvider'\n"
  },
  {
    "path": "client/src/contexts/venmo/Ramp/RampContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RampValues {\n  minimumDepositAmount: bigint | null;\n  maximumOnRampAmount: bigint | null;\n  depositCounter: bigint | null;\n  refetchDepositCounter: (() => void) | null;\n  shouldFetchRampState: boolean;\n  onRampCooldownPeriod: bigint | null;\n}\n\nconst defaultValues: RampValues = {\n  minimumDepositAmount: null,\n  maximumOnRampAmount: null,\n  depositCounter: null,\n  refetchDepositCounter: null,\n  shouldFetchRampState: false,\n  onRampCooldownPeriod: null\n};\n\nconst RampContext = createContext<RampValues>(defaultValues)\n\nexport default RampContext\n"
  },
  {
    "path": "client/src/contexts/venmo/Ramp/RampProvider.tsx",
    "content": "import React, { useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, CALLER_ACCOUNT, ZERO } from '@helpers/constants'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RampContext from './RampContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RampProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { venmoRampAddress, venmoRampAbi } = useSmartContracts();\n\n  /*\n   * State\n   */\n\n  const [minimumDepositAmount, setMinimumDepositAmount] = useState<bigint | null>(null);\n  const [maximumOnRampAmount, setMaximumOnRampAmount] = useState<bigint | null>(null);\n  const [depositCounter, setDepositCounter] = useState<bigint | null>(null);\n  const [onRampCooldownPeriod, setOnRampCooldownPeriod] = useState<bigint | null>(null);\n\n  const [shouldFetchRampState, setShouldFetchRampState] = useState<boolean>(false);\n\n  /*\n   * Contract Reads\n   */\n\n  // uint256 public minDepositAmount;\n  const {\n    data: minimumDepositAmountRaw,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'minDepositAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public maxOnRampAmount;\n  const {\n    data: maximumOnRampAmountRaw,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'maxOnRampAmount',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n\n\n  // uint256 public depositCounter;\n  const {\n    data: depositCounterRaw,\n    refetch: refetchDepositCounter,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'depositCounter',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  // uint256 public onRampCooldownPeriod;\n  const {\n    data: onRampCooldownPeriodRaw,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'onRampCooldownPeriod',\n    enabled: shouldFetchRampState,\n    account: CALLER_ACCOUNT\n  })\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchRampState_1');\n    esl && console.log('checking venmoRampAddress: ', venmoRampAddress);\n\n    if (venmoRampAddress) {\n      esl && console.log('venmo_shouldFetchRampState_2');\n\n      setShouldFetchRampState(true);\n    } else {\n      esl && console.log('venmo_shouldFetchRampState_3');\n\n      setShouldFetchRampState(false);\n\n      setMinimumDepositAmount(null);\n      setDepositCounter(null);\n    }\n  }, [venmoRampAddress]);\n\n  useEffect(() => {\n    esl && console.log('venmo_minDepositAmountRaw_1');\n    esl && console.log('checking minimumDepositAmountRaw: ', minimumDepositAmountRaw);\n  \n    if (minimumDepositAmountRaw) {\n      esl && console.log('venmo_minDepositAmountRaw_2');\n\n      const minimumDepositAmountProcessed = (minimumDepositAmountRaw as bigint);\n      \n      setMinimumDepositAmount(minimumDepositAmountProcessed);\n    } else {\n      esl && console.log('venmo_minDepositAmountRaw_3');\n\n      setMinimumDepositAmount(null);\n    }\n  }, [minimumDepositAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('revolut_maxOnRampAmountRaw_1');\n    esl && console.log('checking maximumOnRampAmountRaw: ', maximumOnRampAmountRaw);\n  \n    if (maximumOnRampAmountRaw) {\n      esl && console.log('revolut_maxOnRampAmountRaw_2');\n\n      const maximumOnRampAmountProcessed = (maximumOnRampAmountRaw as bigint);\n      \n      setMaximumOnRampAmount(maximumOnRampAmountProcessed);\n    } else {\n      esl && console.log('revolut_maxOnRampAmountRaw_3');\n\n      setMaximumOnRampAmount(null);\n    }\n  }, [maximumOnRampAmountRaw]);\n\n  useEffect(() => {\n    esl && console.log('venmo_depositCounterRaw_1');\n    esl && console.log('checking depositCounterRaw: ', depositCounterRaw);\n  \n    if (depositCounterRaw || depositCounterRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('venmo_depositCounterRaw_2');\n      \n      setDepositCounter(depositCounterRaw as bigint);\n    } else {\n      esl && console.log('venmo_depositCounterRaw_3');\n      \n      setDepositCounter(null);\n    }\n  }, [depositCounterRaw]);\n\n  useEffect(() => {\n    esl && console.log('venmo_onRampCooldownPeriodRaw_1');\n    esl && console.log('checking onRampCooldownPeriodRaw: ', onRampCooldownPeriodRaw);\n  \n    if (onRampCooldownPeriodRaw || onRampCooldownPeriodRaw === ZERO) { // BigInt(0) is falsy)\n      esl && console.log('venmo_onRampCooldownPeriodRaw_2');\n      \n      setOnRampCooldownPeriod(onRampCooldownPeriodRaw as bigint);\n    } else {\n      esl && console.log('venmo_onRampCooldownPeriodRaw_3');\n      \n      setOnRampCooldownPeriod(null);\n    }\n  }, [onRampCooldownPeriodRaw]);\n\n  return (\n    <RampContext.Provider\n      value={{\n        minimumDepositAmount,\n        maximumOnRampAmount,\n        depositCounter,\n        onRampCooldownPeriod,\n        refetchDepositCounter,\n        shouldFetchRampState\n      }}\n    >\n      {children}\n    </RampContext.Provider>\n  );\n};\n\nexport default RampProvider\n"
  },
  {
    "path": "client/src/contexts/venmo/Ramp/index.ts",
    "content": "export { default as RampContext } from './RampContext'\nexport { default as RampProvider } from './RampProvider'\n"
  },
  {
    "path": "client/src/contexts/venmo/Registration/RegistrationContext.ts",
    "content": "import { createContext } from 'react'\n\n\ninterface RegistrationValues {\n  isRegistered: boolean;\n  registrationHash: string | null;\n  extractedVenmoId: string | null;\n  shouldFetchVenmoNftId: boolean;\n  venmoNftId: bigint | null;\n  venmoNftUri: string | null;\n  refetchVenmoNftId: (() => void) | null;\n  setExtractedVenmoId: ((venmoId: string) => void) | null;\n  refetchRampAccount: (() => void) | null;\n  shouldFetchRegistration: boolean;\n}\n\nconst defaultValues: RegistrationValues = {\n  isRegistered: false,\n  registrationHash: null,\n  extractedVenmoId: null,\n  shouldFetchVenmoNftId: false,\n  venmoNftId: null,\n  venmoNftUri: null,\n  refetchVenmoNftId: null,\n  setExtractedVenmoId: null,\n  refetchRampAccount: null,\n  shouldFetchRegistration: false\n};\n\nconst RegistrationContext = createContext<RegistrationValues>(defaultValues)\n\nexport default RegistrationContext\n"
  },
  {
    "path": "client/src/contexts/venmo/Registration/RegistrationProvider.tsx",
    "content": "import React, { useCallback, useEffect, useState, ReactNode } from 'react'\nimport { useContractRead } from 'wagmi'\n\nimport { esl, ZERO_ADDRESS } from '@helpers/constants'\nimport useAccount from '@hooks/useAccount'\nimport useSmartContracts from '@hooks/useSmartContracts';\n\nimport RegistrationContext from './RegistrationContext'\n\n\ninterface ProvidersProps {\n  children: ReactNode;\n}\n\nconst RegistrationProvider = ({ children }: ProvidersProps) => {\n  /*\n   * Contexts\n   */\n\n  const { isLoggedIn, loggedInEthereumAddress } = useAccount()\n  const { venmoRampAddress, venmoRampAbi, venmoNftAddress, nftAbi } = useSmartContracts()\n\n  /*\n   * State\n   */\n\n  const [registrationHash, setRegistrationHash] = useState<string | null>(null);\n\n  const [extractedVenmoIdStorageKey, setExtractedVenmoIdStorageKey] = useState<string | null>(null);\n  const [extractedVenmoId, _setExtractedVenmoId] = useState<string | null>(() => {\n    if (extractedVenmoIdStorageKey) {\n      return localStorage.getItem(extractedVenmoIdStorageKey) || null;\n    }\n    return null;\n  });\n\n  const [venmoNftId, setVenmoNftId] = useState<bigint | null>(null);\n  const [venmoNftUri, setVenmoNftUri] = useState<string | null>(null);\n\n  const [shouldFetchRegistration, setShouldFetchRegistration] = useState<boolean>(false);\n  const [shouldFetchVenmoNftId, setShouldFetchVenmoNftId] = useState<boolean>(false);\n  const [shouldFetchVenmoNftUri, setShouldFetchVenmoNftUri] = useState<boolean>(false);\n\n  /*\n   * Overridden Setters\n   */\n\n  const setExtractedVenmoId = useCallback((value: string | null) => {\n    if (extractedVenmoIdStorageKey) {\n      localStorage.setItem(extractedVenmoIdStorageKey, value || '');\n      _setExtractedVenmoId(value);\n    }\n  }, [extractedVenmoIdStorageKey]);\n\n  /*\n   * Helpers\n   */\n\n  // The !! operator will convert any truthy value to true and any falsy value to false.\n  const isRegistered = !!(registrationHash && registrationHash !== ZERO_ADDRESS);\n\n  /*\n   * Contract Reads (migrate to: https://wagmi.sh/react/hooks/useContractReads)\n   */\n\n  // getAccountInfo(address _account) external view returns (bytes32)\n  const {\n    data: rampAccountRaw,\n    refetch: refetchRampAccount,\n  } = useContractRead({\n    address: venmoRampAddress,\n    abi: venmoRampAbi,\n    functionName: 'getAccountInfo',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchRegistration,\n  })\n\n  // getTokenId(address owner) public view returns (uint256)\n  const {\n    data: venmoNftIdRaw,\n    refetch: refetchVenmoNftId,\n  } = useContractRead({\n    address: venmoNftAddress,\n    abi: nftAbi,\n    functionName: 'getTokenId',\n    args: [\n      loggedInEthereumAddress\n    ],\n    enabled: shouldFetchVenmoNftId,\n  })\n\n  // tokenURI(uint256 tokenId) public view override returns (string memory)\n  const {\n    data: venmoNftUriRaw,\n  } = useContractRead({\n    address: venmoNftAddress,\n    abi: nftAbi,\n    functionName: 'tokenURI',\n    args: [\n      venmoNftId\n    ],\n    enabled: shouldFetchVenmoNftUri,\n  })\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    esl && console.log('venmo_shouldFetchRegistration_1');\n    esl && console.log('checking isLoggedIn: ', isLoggedIn);\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n    esl && console.log('checking venmoRampAddress: ', venmoRampAddress);\n    \n    if (isLoggedIn && loggedInEthereumAddress && venmoRampAddress) {\n      esl && console.log('venmo_shouldFetchRegistration_2');\n\n      setShouldFetchRegistration(true);\n    } else {\n      esl && console.log('venmo_shouldFetchRegistration_3');\n      \n      setShouldFetchRegistration(false);\n      setShouldFetchVenmoNftId(false);\n      setShouldFetchVenmoNftUri(false);\n\n      setRegistrationHash(null);\n      setExtractedVenmoId(null);\n      setVenmoNftUri(null);\n      setVenmoNftId(null);\n    }\n  }, [isLoggedIn, loggedInEthereumAddress, venmoRampAddress, setExtractedVenmoId]);\n\n  useEffect(() => {\n    esl && console.log('venmo_rampAccountRaw_1');\n    esl && console.log('checking rampAccountRaw: ', rampAccountRaw);\n  \n    if (rampAccountRaw) {\n      esl && console.log('venmo_rampAccountRaw_2');\n\n      const rampAccountData = rampAccountRaw as any;\n      const rampAccountProcessed = rampAccountData.venmoIdHash;\n      \n      if (rampAccountProcessed !== ZERO_ADDRESS) {\n        esl && console.log('venmo_rampAccountRaw_3');\n\n        setRegistrationHash(rampAccountProcessed);\n\n        setShouldFetchVenmoNftId(true); \n      } else {\n        esl && console.log('venmo_rampAccountRaw_4');\n\n        setRegistrationHash(null);\n\n        setShouldFetchVenmoNftId(false);\n      }\n    } else {\n      esl && console.log('venmo_rampAccountRaw_5');\n      \n      setRegistrationHash(null);\n\n      setShouldFetchVenmoNftId(false);\n    }\n  }, [rampAccountRaw]);\n\n  useEffect(() => {\n    esl && console.log('venmo_extractedVenmoIdStorageKey_1');\n    esl && console.log('checking loggedInEthereumAddress: ', loggedInEthereumAddress);\n\n    if (loggedInEthereumAddress) {\n      esl && console.log('venmo_extractedVenmoIdStorageKey_2');\n\n      setExtractedVenmoIdStorageKey(`extractedVenmoId_${loggedInEthereumAddress}`);\n    } else {\n      esl && console.log('venmo_extractedVenmoIdStorageKey_3');\n\n      setExtractedVenmoIdStorageKey(null);\n    }\n  }, [loggedInEthereumAddress]);\n\n  useEffect(() => {\n    esl && console.log('venmo_extractedVenmoId_1');\n    esl && console.log('checking extractedVenmoIdStorageKey: ', extractedVenmoIdStorageKey);\n\n    if (extractedVenmoIdStorageKey) {\n      esl && console.log('venmo_extractedVenmoId_2');\n\n      const storedValue = localStorage.getItem(extractedVenmoIdStorageKey);\n      if (storedValue !== null) {\n        _setExtractedVenmoId(storedValue);\n      } else {\n        _setExtractedVenmoId(null);\n      }\n    } else {\n      esl && console.log('venmo_extractedVenmoId_3');\n\n      _setExtractedVenmoId(null);\n    }\n  }, [extractedVenmoIdStorageKey]);\n\n  useEffect(() => {\n    esl && console.log('venmo_venmoNftIdRaw_1');\n    esl && console.log('checking venmoNftIdRaw: ', venmoNftIdRaw);\n  \n    if (venmoNftIdRaw) { // we want ZERO to be falsy\n      esl && console.log('venmo_venmoNftIdRaw_2');\n\n      const venmoNftIdProcessed = (venmoNftIdRaw as bigint);\n      \n      setVenmoNftId(venmoNftIdProcessed);\n\n      setShouldFetchVenmoNftUri(true);\n    } else {\n      esl && console.log('venmo_venmoNftIdRaw_3');\n      \n      setVenmoNftId(null);\n\n      setShouldFetchVenmoNftUri(false);\n    }\n  }, [venmoNftIdRaw]);\n\n  useEffect(() => {\n    esl && console.log('venmo_venmoNftUriRaw_1');\n    esl && console.log('checking venmoNftUriRaw: ', venmoNftUriRaw);\n  \n    if (venmoNftUriRaw) {\n      esl && console.log('venmo_venmoNftUriRaw_2');\n\n      const venmoNftUriProcessed = (venmoNftUriRaw as string);\n      const svgString = extractSvg(venmoNftUriProcessed);\n      \n      setVenmoNftUri(svgString);\n    } else {\n      esl && console.log('venmo_venmoNftUriRaw_3');\n      \n      setVenmoNftUri(null);\n    }\n    \n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [venmoNftUriRaw]);\n\n  /*\n   * Helpers\n   */\n\n  function decodeBase64Utf8(base64Str: string) {\n    const binaryString = window.atob(base64Str);\n\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n\n    const decoder = new TextDecoder('utf-8');\n    return decoder.decode(bytes);\n  };\n\n  function extractSvg(jsonDataString: string): any {\n    const uriPrefix = \"data:application/json;base64,\";\n\n    let base64String = jsonDataString;\n    if (jsonDataString.startsWith(uriPrefix)) {\n      base64String = jsonDataString.substring(uriPrefix.length);\n    }\n\n    const decodedString = atob(base64String);\n    const nftData = JSON.parse(decodedString);\n    const svgData = nftData.image;\n\n    const imagePrefix = \"data:image/svg+xml;base64,\";\n\n    let svgBase64String = svgData;\n    if (svgData.startsWith(imagePrefix)) {\n      svgBase64String = svgData.substring(imagePrefix.length);\n    }\n\n    const svgString = decodeBase64Utf8(svgBase64String);\n\n    return svgString;\n  };\n\n  /*\n   * Provider\n   */\n\n  return (\n    <RegistrationContext.Provider\n      value={{\n        isRegistered,\n        registrationHash,\n        extractedVenmoId,\n        shouldFetchVenmoNftId,\n        venmoNftId,\n        venmoNftUri,\n        refetchVenmoNftId,\n        setExtractedVenmoId,\n        refetchRampAccount,\n        shouldFetchRegistration,\n      }}\n    >\n      {children}\n    </RegistrationContext.Provider>\n  );\n};\n\nexport default RegistrationProvider;\n"
  },
  {
    "path": "client/src/contexts/venmo/Registration/index.ts",
    "content": "export { default as RegistrationContext } from './RegistrationContext'\nexport { default as RegistrationProvider } from './RegistrationProvider'\n"
  },
  {
    "path": "client/src/helpers/abi/fusdc.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_mintAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"name\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"symbol\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint8\",\n        \"name\": \"\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"subtractedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"decreaseAllowance\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"addedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"increaseAllowance\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];"
  },
  {
    "path": "client/src/helpers/abi/garanti/ramp.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"_usdc\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_sustainabilityFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_sustainabilityFeeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"accountOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"idHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"AccountRegistered\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"DepositClosed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"idHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositReceived\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositWithdrawn\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentExpirationPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"feeAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentFulfilled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentPruned\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"idHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentSignaled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MaxOnRampAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MinDepositAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"receiveProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewReceiveProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewRegistrationProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewSendProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OnRampCooldownPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeRecipientUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserAddedToDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserRemovedFromDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"addAccountToDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"cancelIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"depositCounter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"deposits\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"garantiIban\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"garantiName\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"remainingDeposits\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"outstandingIntentAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountDeposits\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"garantiIban\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"garantiName\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct GarantiRamp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"accountDeposits\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountInfo\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"idHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"deposits\",\n            \"type\": \"uint256[]\"\n          }\n        ],\n        \"internalType\": \"struct GarantiRamp.AccountInfo\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getDeniedUsers\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"getDeposit\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"depositor\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"garantiIban\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"garantiName\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"remainingDeposits\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"outstandingIntentAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"conversionRate\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32[]\",\n            \"name\": \"intentHashes\",\n            \"type\": \"bytes32[]\"\n          }\n        ],\n        \"internalType\": \"struct GarantiRamp.Deposit\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"getDepositFromIds\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"garantiIban\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"garantiName\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct GarantiRamp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"depositArray\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getIdCurrentIntentHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"_intentHashes\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"name\": \"getIntentsWithOnRamperId\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"intentHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"onRamper\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"to\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"deposit\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"amount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"intentTimestamp\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct GarantiRamp.Intent\",\n            \"name\": \"intent\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"onRamperIdHash\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"internalType\": \"struct GarantiRamp.IntentWithOnRamperId[]\",\n        \"name\": \"\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getLastOnRampTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IGarantiRegistrationProcessor\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IGarantiSendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"intentExpirationPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"intents\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"deposit\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"intentTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isDeniedUser\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"isInitialized\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_iban\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"isValidIban\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"pure\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"maxOnRampAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"minDepositAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_garantiIban\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_garantiName\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_receiveAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"offRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[28]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[28]\"\n          }\n        ],\n        \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n        \"name\": \"_proof\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[4]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[4]\"\n          }\n        ],\n        \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n        \"name\": \"_bodyHashProof\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"onRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"onRampCooldownPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[11]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[11]\"\n          }\n        ],\n        \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n        \"name\": \"_proof\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[4]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[4]\"\n          }\n        ],\n        \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n        \"name\": \"_bodyHashProof\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"register\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"registrationProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IGarantiRegistrationProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"releaseFundsToOnramper\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"removeAccountFromDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sendProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IGarantiSendProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setIntentExpirationPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMaxOnRampAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMinDepositAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setOnRampCooldownPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IGarantiRegistrationProcessor\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setRegistrationProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IGarantiSendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSendProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setSustainabilityFee\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSustainabilityFeeRecipient\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_to\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"signalIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFee\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFeeRecipient\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"usdc\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawDeposit\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/garanti/send.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_ramp\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"_garantiMailserverKeyHashAdapter\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"_nullifierRegistry\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"name\": \"_bodyHashVerifier\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_emailFromAddress\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_timestampBuffer\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"bodyHashVerifier\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"emailFromAddress\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"getEmailFromAddress\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_keyHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isMailServerKeyHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"mailServerKeyHashAdapter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"nullifierRegistry\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[28]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[28]\"\n          }\n        ],\n        \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n        \"name\": \"_proof\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[4]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[4]\"\n          }\n        ],\n        \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n        \"name\": \"_bodyHashProof\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"processProof\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"offRamperNameHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"offRamperIdHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"onRamperIdHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ramp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_emailFromAddress\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"setEmailFromAddress\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"_mailServerKeyHashAdapter\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setMailserverKeyHashAdapter\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_timestampBuffer\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setTimestampBuffer\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"timestampBuffer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_pA\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_pB\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_pC\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[28]\",\n        \"name\": \"_pubSignals\",\n        \"type\": \"uint256[28]\"\n      }\n    ],\n    \"name\": \"verifyProof\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/hdfc/ramp.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"_usdc\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IPoseidon3\",\n        \"name\": \"_poseidon3\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IPoseidon6\",\n        \"name\": \"_poseidon6\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_sustainabilityFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_sustainabilityFeeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"accountOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"idHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"AccountRegistered\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"DepositClosed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"idHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositReceived\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositWithdrawn\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentExpirationPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"feeAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentFulfilled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentPruned\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"idHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentSignaled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MaxOnRampAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MinDepositAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"receiveProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewReceiveProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewRegistrationProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewSendProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OnRampCooldownPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeRecipientUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserAddedToDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserRemovedFromDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"addAccountToDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"cancelIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"depositCounter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"deposits\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"remainingDeposits\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"outstandingIntentAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountDeposits\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256[8]\",\n                \"name\": \"upiId\",\n                \"type\": \"uint256[8]\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct HDFCRamp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"accountDeposits\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountInfo\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"idHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"deposits\",\n            \"type\": \"uint256[]\"\n          }\n        ],\n        \"internalType\": \"struct HDFCRamp.AccountInfo\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getDeniedUsers\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"getDeposit\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"depositor\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256[8]\",\n            \"name\": \"upiId\",\n            \"type\": \"uint256[8]\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"remainingDeposits\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"outstandingIntentAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"conversionRate\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32[]\",\n            \"name\": \"intentHashes\",\n            \"type\": \"bytes32[]\"\n          }\n        ],\n        \"internalType\": \"struct HDFCRamp.Deposit\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"getDepositFromIds\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256[8]\",\n                \"name\": \"upiId\",\n                \"type\": \"uint256[8]\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct HDFCRamp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"depositArray\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getIdCurrentIntentHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"_intentHashes\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"name\": \"getIntentsWithOnRamperId\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"intentHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"onRamper\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"to\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"deposit\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"amount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"intentTimestamp\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct HDFCRamp.Intent\",\n            \"name\": \"intent\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"onRamperIdHash\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"internalType\": \"struct HDFCRamp.IntentWithOnRamperId[]\",\n        \"name\": \"\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getLastOnRampTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessor\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IHDFCSendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"intentExpirationPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"intents\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"deposit\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"intentTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isDeniedUser\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"isInitialized\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"maxOnRampAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"minDepositAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[8]\",\n        \"name\": \"_upiId\",\n        \"type\": \"uint256[8]\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_receiveAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"offRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_a\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_b\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_c\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[15]\",\n        \"name\": \"_signals\",\n        \"type\": \"uint256[15]\"\n      }\n    ],\n    \"name\": \"onRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"onRampCooldownPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"poseidon3\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IPoseidon3\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"poseidon6\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IPoseidon6\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_a\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_b\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_c\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[5]\",\n        \"name\": \"_signals\",\n        \"type\": \"uint256[5]\"\n      }\n    ],\n    \"name\": \"register\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"registrationProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"releaseFundsToOnramper\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"removeAccountFromDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sendProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IHDFCSendProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setIntentExpirationPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMaxOnRampAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMinDepositAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setOnRampCooldownPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessor\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setRegistrationProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IHDFCSendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSendProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setSustainabilityFee\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSustainabilityFeeRecipient\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_to\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"signalIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFee\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFeeRecipient\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"usdc\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawDeposit\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/hdfc/send.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_ramp\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"_hdfcMailserverKeyHashAdapter\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"_nullifierRegistry\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_emailFromAddress\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_timestampBuffer\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"emailFromAddress\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"getEmailFromAddress\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_keyHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isMailServerKeyHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"mailServerKeyHashAdapter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"nullifierRegistry\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[15]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[15]\"\n          }\n        ],\n        \"internalType\": \"struct IHDFCSendProcessor.SendProof\",\n        \"name\": \"_proof\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"processProof\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"offRamperIdHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"onRamperIdHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ramp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_emailFromAddress\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"setEmailFromAddress\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"_mailServerKeyHashAdapter\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setMailserverKeyHashAdapter\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_timestampBuffer\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setTimestampBuffer\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"timestampBuffer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_pA\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_pB\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_pC\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[15]\",\n        \"name\": \"_pubSignals\",\n        \"type\": \"uint256[15]\"\n      }\n    ],\n    \"name\": \"verifyProof\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/legacy/nft.abi.ts",
    "content": "export const abi = [\n  {\n    \"type\": \"constructor\",\n    \"inputs\": [\n      {\n        \"name\": \"_ramp\",\n        \"type\": \"address\",\n        \"internalType\": \"contract IRamp\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"approve\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"balanceOf\",\n    \"inputs\": [\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"currentTokenId\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getApproved\",\n    \"inputs\": [\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getTokenId\",\n    \"inputs\": [\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isApprovedForAll\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"mintSBT\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"name\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"ownerOf\",\n    \"inputs\": [\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"ramp\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"contract IRamp\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"safeTransferFrom\",\n    \"inputs\": [\n      {\n        \"name\": \"from\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"to\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"safeTransferFrom\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"bytes\",\n        \"internalType\": \"bytes\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setApprovalForAll\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"supportsInterface\",\n    \"inputs\": [\n      {\n        \"name\": \"interfaceId\",\n        \"type\": \"bytes4\",\n        \"internalType\": \"bytes4\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"symbol\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"tokenURI\",\n    \"inputs\": [\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"transferFrom\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Approval\",\n    \"inputs\": [\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"approved\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ApprovalForAll\",\n    \"inputs\": [\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"operator\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"approved\",\n        \"type\": \"bool\",\n        \"indexed\": false,\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Transfer\",\n    \"inputs\": [\n      {\n        \"name\": \"from\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"to\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721IncorrectOwner\",\n    \"inputs\": [\n      {\n        \"name\": \"sender\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721InsufficientApproval\",\n    \"inputs\": [\n      {\n        \"name\": \"operator\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721InvalidApprover\",\n    \"inputs\": [\n      {\n        \"name\": \"approver\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721InvalidOperator\",\n    \"inputs\": [\n      {\n        \"name\": \"operator\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721InvalidOwner\",\n    \"inputs\": [\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721InvalidReceiver\",\n    \"inputs\": [\n      {\n        \"name\": \"receiver\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721InvalidSender\",\n    \"inputs\": [\n      {\n        \"name\": \"sender\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ]\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC721NonexistentToken\",\n    \"inputs\": [\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ]\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/legacy/ramp.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"_usdc\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IPoseidon\",\n        \"name\": \"_poseidon\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_sustainabilityFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_sustainabilityFeeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"accountOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"venmoIdHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"AccountRegistered\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"DepositClosed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"venmoId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositReceived\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositWithdrawn\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentExpirationPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"feeAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentFulfilled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentPruned\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"venmoId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentSignaled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MaxOnRampAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MinDepositAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"receiveProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewReceiveProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewRegistrationProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewSendProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OnRampCooldownPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeRecipientUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserAddedToDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserRemovedFromDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"addAccountToDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"cancelIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"depositCounter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"deposits\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"remainingDeposits\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"outstandingIntentAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountDeposits\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256[3]\",\n                \"name\": \"packedVenmoId\",\n                \"type\": \"uint256[3]\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct Ramp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"accountDeposits\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountInfo\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"venmoIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"deposits\",\n            \"type\": \"uint256[]\"\n          }\n        ],\n        \"internalType\": \"struct Ramp.AccountInfo\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getDeniedUsers\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"getDeposit\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"depositor\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256[3]\",\n            \"name\": \"packedVenmoId\",\n            \"type\": \"uint256[3]\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"remainingDeposits\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"outstandingIntentAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"conversionRate\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32[]\",\n            \"name\": \"intentHashes\",\n            \"type\": \"bytes32[]\"\n          }\n        ],\n        \"internalType\": \"struct Ramp.Deposit\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"getDepositFromIds\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256[3]\",\n                \"name\": \"packedVenmoId\",\n                \"type\": \"uint256[3]\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct Ramp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"depositArray\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"_intentHashes\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"name\": \"getIntentsWithOnRamperId\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"onRamper\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"to\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"deposit\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"amount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"intentTimestamp\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct Ramp.Intent\",\n            \"name\": \"intent\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"onRamperIdHash\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n        \"name\": \"\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getLastOnRampTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getVenmoIdCurrentIntentHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessor\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract ISendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"intentExpirationPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"intents\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"deposit\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"intentTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isDeniedUser\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"maxOnRampAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"minDepositAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[3]\",\n        \"name\": \"_packedVenmoId\",\n        \"type\": \"uint256[3]\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_receiveAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"offRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_a\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_b\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_c\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[12]\",\n        \"name\": \"_signals\",\n        \"type\": \"uint256[12]\"\n      }\n    ],\n    \"name\": \"onRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"onRampCooldownPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"poseidon\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IPoseidon\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_a\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_b\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_c\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[5]\",\n        \"name\": \"_signals\",\n        \"type\": \"uint256[5]\"\n      }\n    ],\n    \"name\": \"register\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"registrationProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"removeAccountFromDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sendProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract ISendProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setIntentExpirationPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMaxOnRampAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMinDepositAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setOnRampCooldownPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessor\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setRegistrationProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract ISendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSendProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setSustainabilityFee\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSustainabilityFeeRecipient\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_to\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"signalIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFee\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFeeRecipient\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"usdc\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawDeposit\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/revolut/accountRegistry.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"accountOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"accountId\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"AccountRegistered\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"AllowlistEnabled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewAccountRegistrationProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"allowedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserAddedToAllowlist\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserAddedToDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"allowedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserRemovedFromAllowlist\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserRemovedFromDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"accountRegistrationProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"addAccountToDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"_allowedUsers\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"name\": \"addAccountsToAllowlist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"enableAllowlist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountId\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAllowedUsers\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getDeniedUsers\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n        \"name\": \"_accountRegistrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_allowedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isAllowedUser\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"isAllowlistEnabled\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isDeniedUser\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"isInitialized\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"isRegisteredUser\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"string\",\n                \"name\": \"endpoint\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"host\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"profileId\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"userAddress\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"notaryKeyHash\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n            \"name\": \"public_values\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"proof\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n        \"name\": \"_proof\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"register\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"removeAccountFromDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"_disallowedUsers\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"name\": \"removeAccountsFromAllowlist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setAccountRegistrationProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/revolut/ramp.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"_usdc\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_sustainabilityFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_sustainabilityFeeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"DepositClosed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"offRampId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"currencyId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositReceived\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositWithdrawn\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentExpirationPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"feeAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentFulfilled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentPruned\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"accountId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentSignaled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MaxOnRampAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MinDepositAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewSendProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OnRampCooldownPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeRecipientUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"accountRegistry\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRevolutAccountRegistry\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"cancelIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"depositCounter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"deposits\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"revolutTag\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"verifierSigningKey\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"notaryKeyHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"receiveCurrencyId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"remainingDeposits\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"outstandingIntentAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountDeposits\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorId\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"revolutTag\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"verifierSigningKey\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"bytes32\",\n                \"name\": \"notaryKeyHash\",\n                \"type\": \"bytes32\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32\",\n                \"name\": \"receiveCurrencyId\",\n                \"type\": \"bytes32\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct RevolutRamp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"accountDeposits\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"getDeposit\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"depositor\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"revolutTag\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"verifierSigningKey\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"notaryKeyHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"receiveCurrencyId\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"remainingDeposits\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"outstandingIntentAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"conversionRate\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32[]\",\n            \"name\": \"intentHashes\",\n            \"type\": \"bytes32[]\"\n          }\n        ],\n        \"internalType\": \"struct RevolutRamp.Deposit\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"getDepositFromIds\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorId\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"revolutTag\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"verifierSigningKey\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"bytes32\",\n                \"name\": \"notaryKeyHash\",\n                \"type\": \"bytes32\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32\",\n                \"name\": \"receiveCurrencyId\",\n                \"type\": \"bytes32\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct RevolutRamp.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n        \"name\": \"depositArray\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getIdCurrentIntentHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getIdCurrentIntentHashAsUint\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"_intentHashes\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"name\": \"getIntentsWithOnRamperId\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"intentHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"onRamper\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"to\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"deposit\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"amount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"intentTimestamp\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct RevolutRamp.Intent\",\n            \"name\": \"intent\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"onRamperId\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"internalType\": \"struct RevolutRamp.IntentWithOnRamperId[]\",\n        \"name\": \"\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getLastOnRampTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRevolutAccountRegistry\",\n        \"name\": \"_accountRegistry\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IRevolutSendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"intentExpirationPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"intents\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"deposit\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"intentTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"isInitialized\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"maxOnRampAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"minDepositAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_revolutTag\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_receiveCurrencyId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_receiveAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_verifierSigningKey\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_notaryKeyHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"offRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"string\",\n            \"name\": \"endpoint\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"host\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"transferId\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"recipientId\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"amount\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"currencyId\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"status\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"timestamp\",\n            \"type\": \"string\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"intentHash\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"notaryKeyHash\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n        \"name\": \"_sendData\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_verifierSignature\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"onRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"onRampCooldownPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"releaseFundsToOnramper\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sendProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRevolutSendProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setIntentExpirationPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMaxOnRampAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMinDepositAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setOnRampCooldownPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRevolutSendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSendProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setSustainabilityFee\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSustainabilityFeeRecipient\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_to\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"signalIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFee\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFeeRecipient\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"usdc\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawDeposit\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/revolut/send.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_ramp\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"_nullifierRegistry\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_timestampBuffer\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_endpoint\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_host\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"PAYMENT_STATUS\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"endpoint\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"host\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"nullifierRegistry\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"string\",\n                \"name\": \"endpoint\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"host\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"transferId\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"recipientId\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"amount\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"currencyId\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"status\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"string\",\n                \"name\": \"timestamp\",\n                \"type\": \"string\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"intentHash\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n            \"name\": \"public_values\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"proof\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct IRevolutSendProcessor.SendProof\",\n        \"name\": \"_proof\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_verifierSigningKey\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"processProof\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"offRamperId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"currencyId\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ramp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_timestampBuffer\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setTimestampBuffer\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"timestampBuffer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/venmo/ramp.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IRamp\",\n        \"name\": \"_ramp\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"_usdc\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IPoseidon\",\n        \"name\": \"_poseidon\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_sustainabilityFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_sustainabilityFeeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"accountOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"venmoIdHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"AccountRegistered\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"DepositClosed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"venmoId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositReceived\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositWithdrawn\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentExpirationPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"feeAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentFulfilled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentPruned\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"venmoId\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"IntentSignaled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MaxOnRampAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"MinDepositAmountSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"receiveProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewReceiveProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewRegistrationProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewSendProcessorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OnRampCooldownPeriodSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeRecipientUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"SustainabilityFeeUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserAddedToDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"listOwner\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UserRemovedFromDenylist\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"addAccountToDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"cancelIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"depositCounter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"deposits\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"depositor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"remainingDeposits\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"outstandingIntentAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"conversionRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountDeposits\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256[3]\",\n                \"name\": \"packedVenmoId\",\n                \"type\": \"uint256[3]\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct VenmoRampV2.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n        \"name\": \"accountDeposits\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountInfo\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"venmoIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256[]\",\n            \"name\": \"deposits\",\n            \"type\": \"uint256[]\"\n          }\n        ],\n        \"internalType\": \"struct VenmoRampV2.AccountInfo\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getAccountVenmoIdHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getDeniedUsers\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"getDeposit\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"depositor\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256[3]\",\n            \"name\": \"packedVenmoId\",\n            \"type\": \"uint256[3]\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"remainingDeposits\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"outstandingIntentAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"conversionRate\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32[]\",\n            \"name\": \"intentHashes\",\n            \"type\": \"bytes32[]\"\n          }\n        ],\n        \"internalType\": \"struct VenmoRampV2.Deposit\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"getDepositFromIds\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"depositId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"depositorIdHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"depositor\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256[3]\",\n                \"name\": \"packedVenmoId\",\n                \"type\": \"uint256[3]\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"remainingDeposits\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"outstandingIntentAmount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"conversionRate\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"bytes32[]\",\n                \"name\": \"intentHashes\",\n                \"type\": \"bytes32[]\"\n              }\n            ],\n            \"internalType\": \"struct VenmoRampV2.Deposit\",\n            \"name\": \"deposit\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"availableLiquidity\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n        \"name\": \"depositArray\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32[]\",\n        \"name\": \"_intentHashes\",\n        \"type\": \"bytes32[]\"\n      }\n    ],\n    \"name\": \"getIntentsWithOnRamperId\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"intentHash\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"address\",\n                \"name\": \"onRamper\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"address\",\n                \"name\": \"to\",\n                \"type\": \"address\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"deposit\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"amount\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"intentTimestamp\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct VenmoRampV2.Intent\",\n            \"name\": \"intent\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"onRamperIdHash\",\n            \"type\": \"bytes32\"\n          }\n        ],\n        \"internalType\": \"struct VenmoRampV2.IntentWithOnRamperId[]\",\n        \"name\": \"\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getLastOnRampTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getVenmoIdCurrentIntentHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessorV2\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract ISendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"intentExpirationPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"intents\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"onRamper\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"deposit\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"intentTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_account\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_deniedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isDeniedUser\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"isInitialized\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"maxOnRampAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"minDepositAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[3]\",\n        \"name\": \"_packedVenmoId\",\n        \"type\": \"uint256[3]\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_receiveAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"offRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_a\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_b\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_c\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[12]\",\n        \"name\": \"_signals\",\n        \"type\": \"uint256[12]\"\n      }\n    ],\n    \"name\": \"onRamp\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"onRampCooldownPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"poseidon\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IPoseidon\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ramp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRamp\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_a\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_b\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_c\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[5]\",\n        \"name\": \"_signals\",\n        \"type\": \"uint256[5]\"\n      }\n    ],\n    \"name\": \"register\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"registrationProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessorV2\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"releaseFundsToOnramper\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_approvedUser\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"removeAccountFromDenylist\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sendProcessor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract ISendProcessor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_intentExpirationPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setIntentExpirationPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maxOnRampAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMaxOnRampAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_minDepositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setMinDepositAmount\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_onRampCooldownPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setOnRampCooldownPeriod\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IRegistrationProcessorV2\",\n        \"name\": \"_registrationProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setRegistrationProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract ISendProcessor\",\n        \"name\": \"_sendProcessor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSendProcessor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setSustainabilityFee\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_feeRecipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setSustainabilityFeeRecipient\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_depositId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_to\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"signalIntent\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFee\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sustainabilityFeeRecipient\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"usdc\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_depositIds\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawDeposit\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/abi/venmo/send.abi.ts",
    "content": "export const abi = [\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_ramp\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"_venmoMailserverKeyHashAdapter\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"_nullifierRegistry\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_emailFromAddress\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"PACK_SIZE\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"emailFromAddress\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"getEmailFromAddress\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_keyHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isMailServerKeyHash\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"mailServerKeyHashAdapter\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"nullifierRegistry\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract INullifierRegistry\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"a\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[2][2]\",\n            \"name\": \"b\",\n            \"type\": \"uint256[2][2]\"\n          },\n          {\n            \"internalType\": \"uint256[2]\",\n            \"name\": \"c\",\n            \"type\": \"uint256[2]\"\n          },\n          {\n            \"internalType\": \"uint256[12]\",\n            \"name\": \"signals\",\n            \"type\": \"uint256[12]\"\n          }\n        ],\n        \"internalType\": \"struct ISendProcessor.SendProof\",\n        \"name\": \"_proof\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"processProof\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"offRamperIdHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"onRamperIdHash\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"intentHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ramp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"_emailFromAddress\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"setEmailFromAddress\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IKeyHashAdapterV2\",\n        \"name\": \"_mailServerKeyHashAdapter\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setMailserverKeyHashAdapter\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_pA\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[2][2]\",\n        \"name\": \"_pB\",\n        \"type\": \"uint256[2][2]\"\n      },\n      {\n        \"internalType\": \"uint256[2]\",\n        \"name\": \"_pC\",\n        \"type\": \"uint256[2]\"\n      },\n      {\n        \"internalType\": \"uint256[12]\",\n        \"name\": \"_pubSignals\",\n        \"type\": \"uint256[12]\"\n      }\n    ],\n    \"name\": \"verifyProof\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n];\n"
  },
  {
    "path": "client/src/helpers/addressFormat.ts",
    "content": "export const formatAddress = (address: string | undefined): string => {\n  if (!address || address.length < 9) {\n    return address || '';\n  }\n  return `${address.substring(0, 6)}...${address.substring(address.length - 4)}`;\n};\n\nexport const formatAddressShort = (address: string | undefined): string => {\n  if (!address || address.length < 6) {\n    return address || '';\n  }\n  return `${address.substring(0, 6)}...`;\n};\n\nexport const formatAddressLong = (address: string | undefined): string => {\n  if (!address || address.length < 9) {\n    return address || '';\n  }\n  return `${address.substring(0, 12)}...${address.substring(address.length - 10)}`;\n};"
  },
  {
    "path": "client/src/helpers/binaryFormat.ts",
    "content": "import { CIRCOM_BIGINT_N, CIRCOM_BIGINT_K } from \"./constants\";\n\nexport function bytesToString(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\nexport function stringToBytes(str: string) {\n  // const encodedText = new TextEncoder().encode(str);\n  const toReturn = Uint8Array.from(str, (x) => x.charCodeAt(0));\n  // const buf = Buffer.from(str, \"utf8\");\n  return toReturn;\n  // TODO: Check encoding mismatch if the proof doesnt work\n  // Note that our custom encoding function maps (239, 191, 189) -> (253)\n  // Note that our custom encoding function maps (207, 181) -> (245)\n  // throw Error(\n  //   \"TextEncoder does not match string2bytes function\" +\n  //     \"\\n\" +\n  //     str +\n  //     \"\\n\" +\n  //     buf +\n  //     \"\\n\" +\n  //     Uint8Array.from(buf) +\n  //     \"\\n\" +\n  //     JSON.stringify(encodedText) +\n  //     \"\\n\" +\n  //     JSON.stringify(toReturn)\n  // );\n}\n\nexport function bufferToUint8Array(buf: Buffer): Uint8Array {\n  const ab = new ArrayBuffer(buf.length);\n  const view = new Uint8Array(ab);\n  for (let i = 0; i < buf.length; ++i) {\n    view[i] = buf[i];\n  }\n  return Uint8Array.from(view);\n}\n\nexport function bufferToHex(buf: Buffer): String {\n  return buf.toString(\"hex\");\n}\n\nexport async function Uint8ArrayToCharArray(a: Uint8Array): Promise<string[]> {\n  return Array.from(a).map((x) => x.toString());\n}\n\nexport async function Uint8ArrayToString(a: Uint8Array): Promise<string> {\n  return Array.from(a)\n    .map((x) => x.toString())\n    .join(\";\");\n}\n\nexport async function Uint8ArrayToHex(a: Uint8Array): Promise<string> {\n  return Buffer.from(a).toString(\"hex\");\n}\n\nexport function bufferToString(buf: Buffer): String {\n  let intermediate = bufferToUint8Array(buf);\n  return bytesToString(intermediate);\n}\n\nexport function bytesToBigInt(bytes: Uint8Array) {\n  let res = 0n;\n  for (let i = 0; i < bytes.length; ++i) {\n    res = (res << 8n) + BigInt(bytes[i]);\n  }\n  return res;\n}\n\nexport function toCircomBigIntBytes(num: BigInt | bigint) {\n  const res = [];\n  const bigintNum: bigint = typeof num == \"bigint\" ? num : num.valueOf();\n  const msk = (1n << BigInt(CIRCOM_BIGINT_N)) - 1n;\n  for (let i = 0; i < CIRCOM_BIGINT_K; ++i) {\n    res.push(((bigintNum >> BigInt(i * CIRCOM_BIGINT_N)) & msk).toString());\n  }\n  return res;\n}\n\n// https://stackoverflow.com/a/69585881\nconst HEX_STRINGS = \"0123456789abcdef\";\nconst MAP_HEX = {\n  0: 0,\n  1: 1,\n  2: 2,\n  3: 3,\n  4: 4,\n  5: 5,\n  6: 6,\n  7: 7,\n  8: 8,\n  9: 9,\n  a: 10,\n  b: 11,\n  c: 12,\n  d: 13,\n  e: 14,\n  f: 15,\n  A: 10,\n  B: 11,\n  C: 12,\n  D: 13,\n  E: 14,\n  F: 15,\n} as const;\n\n// Fast Uint8Array to hex\nexport function toHex(bytes: Uint8Array): string {\n  return Array.from(bytes || [])\n    .map((b) => HEX_STRINGS[b >> 4] + HEX_STRINGS[b & 15])\n    .join(\"\");\n}\n\n// Mimics Buffer.from(x, 'hex') logic\n// Stops on first non-hex string and returns\n// https://github.com/nodejs/node/blob/v14.18.1/src/string_bytes.cc#L246-L261\nexport function fromHex(hexString: string): Uint8Array {\n  let hexStringTrimmed: string = hexString;\n  if (hexString[0] === \"0\" && hexString[1] === \"x\") {\n    hexStringTrimmed = hexString.slice(2);\n  }\n  const bytes = new Uint8Array(Math.floor((hexStringTrimmed || \"\").length / 2));\n  let i;\n  for (i = 0; i < bytes.length; i++) {\n    const a = MAP_HEX[hexStringTrimmed[i * 2] as keyof typeof MAP_HEX];\n    const b = MAP_HEX[hexStringTrimmed[i * 2 + 1] as keyof typeof MAP_HEX];\n    if (a === undefined || b === undefined) {\n      break;\n    }\n    bytes[i] = (a << 4) | b;\n  }\n  return i === bytes.length ? bytes : bytes.slice(0, i);\n}\n\n// Works only on 32 bit sha text lengths\nexport function int64toBytes(num: number): Uint8Array {\n  let arr = new ArrayBuffer(8); // an Int32 takes 4 bytes\n  let view = new DataView(arr);\n  view.setInt32(4, num, false); // byteOffset = 0; litteEndian = false\n  return new Uint8Array(arr);\n}\n\n// Works only on 32 bit sha text lengths\nexport function int8toBytes(num: number): Uint8Array {\n  let arr = new ArrayBuffer(1); // an Int8 takes 4 bytes\n  let view = new DataView(arr);\n  view.setUint8(0, num); // byteOffset = 0; litteEndian = false\n  return new Uint8Array(arr);\n}\n\nexport function bitsToUint8(bits: string[]): Uint8Array {\n  let bytes = new Uint8Array(bits.length);\n  for (let i = 0; i < bits.length; i += 1) {\n    bytes[i] = parseInt(bits[i], 2);\n  }\n  return bytes;\n}\n\nexport function uint8ToBits(uint8: Uint8Array): string {\n  return uint8.reduce((acc, byte) => acc + byte.toString(2).padStart(8, \"0\"), \"\");\n}\n\nexport function mergeUInt8Arrays(a1: Uint8Array, a2: Uint8Array): Uint8Array {\n  // sum of individual array lengths\n  var mergedArray = new Uint8Array(a1.length + a2.length);\n  mergedArray.set(a1);\n  mergedArray.set(a2, a1.length);\n  return mergedArray;\n}\n\nexport function assert(cond: boolean, errorMessage: string) {\n  if (!cond) {\n    throw new Error(errorMessage);\n  }\n}\n\nexport function packedNBytesToString(packedBytes: bigint[], n: number = 7): string {\n  let chars: number[] = [];\n  for (let i = 0; i < packedBytes.length; i++) {\n    for (var k = 0n; k < n; k++) {\n      chars.push(Number((packedBytes[i] >> (k * 8n)) % 256n));\n    }\n  }\n  return bytesToString(Uint8Array.from(chars));\n}\n\nexport function packBytesIntoNBytes(messagePaddedRaw: Uint8Array | string, n = 7): Array<bigint> {\n  const messagePadded: Uint8Array = typeof messagePaddedRaw === \"string\" ? stringToBytes(messagePaddedRaw) : messagePaddedRaw;\n  let output: Array<bigint> = [];\n  for (let i = 0; i < messagePadded.length; i++) {\n    if (i % n === 0) {\n      output.push(0n);\n    }\n    const j = (i / n) | 0;\n    console.assert(j === output.length - 1, \"Not editing the index of the last element -- packing loop invariants bug!\");\n    output[j] += BigInt(messagePadded[i]) << BigInt((i % n) * 8);\n  }\n  return output;\n}\n// Usage: let in_padded_n_bytes = packBytesIntoNBytes(messagePadded, 7).map((x) => x.toString()); // Packed into 7 byte signals\n\n// console.log(packedNBytesToString([30680772461461504n, 129074054722665n, 30794022159122432n, 30803244232763745n]));\n"
  },
  {
    "path": "client/src/helpers/cards.ts",
    "content": "export const MAIN_CARDS = [\n\t{\n\t\ttitle: 'Get Started',\n\t\tdescription: 'Receive USDC on-chain using Venmo and UPI. Entirely peer-to-peer.',\n\t\tcta: 'Go to the App',\n\t\tnavigateTo: '/swap',\n\t},\n\t{\n\t\ttitle: 'Documentation',\n\t\tdescription: 'Interested in learning more about how the protocol works?',\n\t\tcta: 'Go to Docs',\n\t\tnavigateTo: 'https://docs.zkp2p.xyz/',\n\t},\n];\n\nexport const SECONDARY_CARDS = [\n\t{\n\t\ttitle: 'Fast',\n\t\tdescription: 'Get your fiat on-chain fast using the magic of zero knowledge proofs',\n\t\ticon: 'lightning',\n\t},\n\t{\n\t\ttitle: 'Cheap',\n\t\tdescription: 'Transact entirely peer-to-peer and avoid paying high fees',\n\t\ticon: 'cash',\n\t},\n\t{\n\t\ttitle: 'Open',\n\t\tdescription: 'Available to anyone with an account on integrated payment networks',\n\t\ticon: 'padlock',\n\t},\n];\n"
  },
  {
    "path": "client/src/helpers/constants.ts",
    "content": "// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt\nexport const ZERO = BigInt(0);\nexport const SECONDS_IN_DAY = BigInt(86400);\n\nexport const DEPOSIT_REFETCH_INTERVAL = 20000; // 0.3 minutes\nexport const STATE_REFETCH_INTERVAL = 60000; // 1 minute\n// export const DEPOSIT_REFETCH_INTERVAL = 2000000; // 30 minutes\n// export const STATE_REFETCH_INTERVAL = 6000000; // 100 minute\n\nexport const VENMO_EMAIL_FILTER = `from:venmo@venmo.com subject:\"You paid\" after:2024/01/10`;\nexport const HDFC_EMAIL_FULTER = `from:alerts@hdfcbank.net subject:\"❗ You have done a UPI txn. Check details!\" after:2023/09/01`;\nexport const GARANTI_EMAIL_FULTER = `from:garanti@info.garantibbva.com.tr subject:\"Para Transferi Bilgilendirmesi\" after:2023/09/01`;\n\nexport const PRECISION = BigInt(1_000_000_000_000_000_000); // 18\nexport const USDC_UNITS = BigInt(1_000_000); // 6\nexport const PENNY_IN_USDC_UNITS = BigInt(10_000); // 6\n\nexport const EMPTY_STRING = '';\n\nexport const SOCKET_QUOTE_DEFAULT_ADDRESS = '0x18Cc6F90512C6D95ACA0d57F98C727D61873c06a';\nexport const SOCKET_DEFAULT_SOL_ADDRESS = '8pHKRNF3u8tndkUJ4euAddNWM9EAMWbUiK5GVmtaGY5U';\nexport const QUOTE_FETCHING_DEBOUNCE_MS = 750;\n\n// the numeric form of the payload1 passed into the primitive\n// corresponds to the openssh signature produced by the following command:\n// echo \"E PLURIBUS UNUM; DO NOT SHARE\" | ssh-keygen -Y sign -n double-blind.xyz -f ~/.ssh/id_rsa | pbcopy\nexport const MAGIC_DOUBLE_BLIND_BASE_MESSAGE =\n    14447023197094784173331616578829287000074783130802912942914027114823662617007553911501158244718575362051758829289159984830457466395841150324770159971462582912755545324694933673046215187947905307019469n;\n// Length in bits\nexport const MAGIC_DOUBLE_BLIND_BASE_MESSAGE_LEN = 672;\n\nexport const CIRCOM_FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\nexport const MAX_HEADER_PADDED_BYTES = 1024; // NOTE: this must be the same as the first arg in the email in main args circom\nexport const MAX_BODY_PADDED_BYTES = 6400; // NOTE: this must be the same as the arg to sha the remainder number of bytes in the email in main args circom\n\n\nexport const CLIENT_VERSION = '0.4.4';\n\n// circom constants from main.circom / https://zkrepl.dev/?gist=30d21c7a7285b1b14f608325f172417b\n// template RSAGroupSigVerify(n, k, levels) {\n// component main { public [ modulus ] } = RSAVerify(121, 17);\n// component main { public [ root, payload1 ] } = RSAGroupSigVerify(121, 17, 30);\nexport const CIRCOM_BIGINT_N = 121;\nexport const CIRCOM_BIGINT_K = 17;\nexport const CIRCOM_LEVELS = 30;\n\n\n// This is the string that comes right before the target string in the email. Ideally as close to the end of the email as possible.\nexport const STRING_PRESELECTOR = \"<!-- recipient name -->\";\n\n\n// Misc smart contract values\nexport const UINT256_MAX = \"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\nexport const CALLER_ACCOUNT = \"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\";\nexport const DEFAULT_NETWORK = \"base\";\n\n\n// Proving key paths\nexport const HOSTED_FILES_PATH = \"https://s3.amazonaws.com/zk-p2p/v2/v0.0.10/\";\nexport const REGISTRATION_KEY_FILE_NAME = \"venmo_registration/venmo_registration\";\nexport const SEND_KEY_FILE_NAME = \"venmo_send/venmo_send\";\n\nexport const RemoteProofGenEmailTypes = {\n    REGISTRATION: \"registration\",\n    SEND: \"send\",\n};\n\nconst ENABLE_STATE_LOGGING = false;\nexport const esl = ENABLE_STATE_LOGGING;\n"
  },
  {
    "path": "client/src/helpers/deployed_addresses.ts",
    "content": "type Contracts = {\n  [network: string]: {\n    [contract: string]: string;\n  };\n};\n\nexport const contractAddresses: Contracts = {\n  'base_production': {\n    'legacyRamp': '0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f',\n    'legacyNft': '0xaB6b0b5666DC2C8357fdcD8A1E96973932dd1545',\n    'usdc': '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n    'venmoRamp': '0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D',\n    'venmoSendProcessor': '0x170Cfa26a1fC6868dC45B251e7a482188A84A1d4',\n    'venmoRegistrationProcessor': '0x209E0fa47FAbdb656B8b4bb8fBA01322e9d5cf00',\n    'venmoNft': '0x4281cee3ae43d19a2cf9a6002cb7ea90869ad4d5',\n    'hdfcRamp': '0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a',\n    'hdfcSendProcessor': '0x03eB0ba3f7A4451C41278Af74E8384079Ae40170',\n    'hdfcRegistrationProcessor': '0xD2B4CcA64Fc4B7588D6546780fEdb4c71A4b75D6',\n    'hdfcNft': '0x94874b3a294becc3dea2c320c300d2d2a4b25451',\n    'garantiRamp': '0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d',\n    'garantiSendProcessor': '0x29666c1dB00852c5378d4299ae24B6CB8081057f',\n    'garantiRegistrationProcessor': '0x4893d6b0A9dc0B11f373f673bC2bCfAE74c0a1f9',\n    'garantiNft': '0xB4739590a00b47AF7461AbBC013b9047f66Dd678',\n    'revolutRamp': '0xeb33C544dBd9a487de0522fE886fc38D66887533',\n    'revolutAccountRegistry': '0x969FD0eD23A44756678af779FD0206aE123261B2',\n    'revolutSendProcessor': '0xaD7cC2A3a83Fb13F3A82D6cC31928d3E91fF25cc',\n    'revolutAccountRegistrationProcessor': '0x7699Fce34011688a67cC44af4C76d1B38BA1a3a8',\n    'revolutNft': '0x547bfffc91603ceff30edc308b5a16a178dae8d3',\n    'socketBridge': '0x3a23f943181408eac424116af7b7790c94cb97a5',\n    'lifiBridge': '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE'\n  },\n  'base_staging': {\n    'legacyRamp': '0xa08d9952196ABECB2BaCD14188093314053f6335',\n    'legacyNft': '0x516Aba305CD1fd36c540D9EDc679e165EAB89e9F',\n    'usdc': '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n    'venmoRamp': '0x80e5aB2921e23192B2454f6a386Fd7032dad932E',\n    'venmoSendProcessor': '0xd654400e33c54E4E811b979b8D14F9fc9543683C',\n    'venmoRegistrationProcessor': '0x050F07A4E7C0F4Ee6Cc8E8EdC5B694F9Fdd1e769',\n    'venmoNft': '0xc0c2ad120c63b3c7d7e9c555352e42c2fc8bb50b',\n    'hdfcRamp': '0xc137d22fa93316Df55b5F896F5180c722D02b01D',\n    'hdfcSendProcessor': '0x3bCC71916d9d2BB5F52Fdb386814bd84C9312A04',\n    'hdfcRegistrationProcessor': '0xC8d7C6a5a8B2158012FB679DB1c3d7fbC1cC2980',\n    'hdfcNft': '0x6b64BC61cd03cdD7Ac3aF6Ad6A02977265d21ecB',\n    'garantiRamp': '0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171',\n    'garantiSendProcessor': '0x1048dd39f95aBE7712291752B63f61BD397c695E',\n    'garantiRegistrationProcessor': '0x6E6eAc7e8995fb6d44aE5E559874B8C969010293',\n    'garantiNft': '',\n    'revolutRamp': '0x84268621B45C24A7A2A3fb700156B0D5Ac75Ee0b',\n    'revolutAccountRegistry': '0x44115b15Ff0Db10702DFC72Cb2fd3179215623df',\n    'revolutSendProcessor': '0xC2039e46f59cAC1ddC9a045563946A08D58d6f6A',\n    'revolutAccountRegistrationProcessor': '0x96fa6C854F35665c0B5C6365c64a9EECa5793411',\n    'revolutNft': '0x7f846bbf546dd56ed262969bc7b02254a0b15463',\n    'socketBridge': '0x3a23f943181408eac424116af7b7790c94cb97a5',\n    'lifiBridge': '0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE'\n  },\n  'sepolia_staging': {\n    'legacyRamp': '0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6',\n    'legacyNft': '',\n    'usdc': '0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86',\n    'venmoRamp': '0x38637CD256d70994f2d5533BEAfe52eEfC2a96Ab',\n    'venmoSendProcessor': '0x84ac07EfC0c7093416aCd6189a600AD479CFA045',\n    'venmoRegistrationProcessor': '0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8',\n    'venmoNft': '0x73ca27fd61afa3823046f9f9101b17a0cfa5c1ad',\n    'hdfcRamp': '0xb4A7486b0EFa264D5FC6A8181bfc7A150cD57849',\n    'hdfcSendProcessor': '0x668109Fb6c6D2a563F9b7FB3dA3367CCb726B4af',\n    'hdfcRegistrationProcessor': '0xE5e50A9F071DF9185183c6523c9a4162eB278583',\n    'hdfcNft': '0x1bb5f399a50050d76ebffb52ae8a526493ef8916',\n    'garantiRamp': '0xEfBDf422FA81071A04D2f89A70A0D938FEFA0795',\n    'garantiSendProcessor': '0xd30087458186424C12BEAEbf1167142284E33437',\n    'garantiRegistrationProcessor': '0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D',\n    'garantiNft': '0x64940a0906d4386e2089a40153D856EEA070Ad88',\n    'revolutRamp': '0x11E267C4861BBF3AA3368Bb78dE2Cdb380c9000D',\n    'revolutAccountRegistry': '0x4b6db2939E09A642afb90cEd37126213aBbA0f4F',\n    'revolutSendProcessor': '0xB3017240379888Ba2022351Ab6fd4fB0b8FF5e23',\n    'revolutAccountRegistrationProcessor': '0x57068ef4f64734Ef4f84705E38A00176E53f0000',\n    'revolutNft': '0x3380881753f741FFf10833EeD3addaa859f81786',\n    'socketBridge': '',\n    'lifiBridge': '',\n  },\n  'localhardhat': {\n    'legacyRamp': '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0',\n    'legacyNft': '',\n    'usdc': '0x5FbDB2315678afecb367f032d93F642f64180aa3',\n    'venmoRamp': '0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f',\n    'venmoSendProcessor': '0x09635F643e140090A9A8Dcd712eD6285858ceBef',\n    'venmoRegistrationProcessor': '0x7a2088a1bFc9d81c55368AE168C2C02570cB814F',\n    'venmoNft': '',\n    'hdfcRamp': '0x0B306BF915C4d645ff596e518fAf3F9669b97016',\n    'hdfcSendProcessor': '0x68B1D87F95878fE05B998F19b66F4baba5De1aed',\n    'hdfcRegistrationProcessor': '0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE',\n    'hdfcNft': '',\n    'garantiRamp': '0x9E545E3C0baAB3E08CdfD552C960A1050f373042',\n    'garantiSendProcessor': '0xf5059a5D33d5853360D16C683c16e67980206f36',\n    'garantiRegistrationProcessor': '0x851356ae760d987E095750cCeb3bC6014560891C',\n    'garantiNft': '',\n    'revolutRamp': '0x0E801D84Fa97b50751Dbf25036d067dCf18858bF',\n    'revolutAccountRegistry': '0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf',\n    'revolutSendProcessor': '0x5eb3Bc0a489C5A8288765d2336659EbCA68FCd00',\n    'revolutAccountRegistrationProcessor': '0x9d4454B023096f34B160D6B654540c56A1F81688',\n    'revolutNft': '',\n    'socketBridge': '',\n    'lifiBridge': '',\n  },\n};\n\nexport const blockExplorerUrls: { [network: string]: string } = {\n  'hardhat': 'https://etherscan.io',\n  'sepolia': 'https://sepolia.etherscan.io/',\n  'base': 'https://basescan.org'\n};\n"
  },
  {
    "path": "client/src/helpers/dkim/body/index.js",
    "content": "let { SimpleHash } = require('./simple');\nlet { RelaxedHash } = require('./relaxed');\n\nconst dkimBody = (canonicalization, ...options) => {\n    canonicalization = (canonicalization || 'simple/simple').toString().split('/').pop().toLowerCase().trim();\n    switch (canonicalization) {\n        case 'simple':\n            return new SimpleHash(...options);\n        case 'relaxed':\n            return new RelaxedHash(...options);\n        default:\n            throw new Error('Unknown body canonicalization');\n    }\n};\n\nmodule.exports = { dkimBody };\n"
  },
  {
    "path": "client/src/helpers/dkim/body/relaxed.js",
    "content": "/* eslint no-control-regex: 0 */\n\nconst crypto = require('crypto');\n\nconst CHAR_CR = 0x0d;\nconst CHAR_LF = 0x0a;\nconst CHAR_SPACE = 0x20;\nconst CHAR_TAB = 0x09;\n\n/**\n * Class for calculating body hash of an email message body stream\n * using the \"relaxed\" canonicalization\n *\n * @class\n */\nclass RelaxedHash {\n    /**\n     * @param {String} [algorithm] Hashing algo, either \"sha1\" or \"sha256\"\n     * @param {Number} [maxBodyLength] Allowed body length count, the value from the l= parameter\n     */\n    constructor(algorithm, maxBodyLength) {\n        algorithm = (algorithm || 'sha256').split('-').pop().toLowerCase();\n\n        this.bodyHash = crypto.createHash(algorithm);\n\n        this.remainder = false;\n        this.byteLength = 0;\n\n        this.bodyHashedBytes = 0;\n        this.maxBodyLength = maxBodyLength;\n\n        this.maxSizeReached = false;\n\n        this.emptyLinesQueue = [];\n\n        this.fullBody = Buffer.alloc(0);\n    }\n\n    _updateBodyHash(chunk) {\n        if (this.maxSizeReached) {\n            return;\n        }\n\n        // the following is needed for the l= option\n        if (\n            typeof this.maxBodyLength === 'number' &&\n            !isNaN(this.maxBodyLength) &&\n            this.maxBodyLength >= 0 &&\n            this.bodyHashedBytes + chunk.length > this.maxBodyLength\n        ) {\n            this.maxSizeReached = true;\n            if (this.bodyHashedBytes >= this.maxBodyLength) {\n                // nothing to do here, skip entire chunk\n                return;\n            }\n\n            // only use allowed size of bytes\n            chunk = chunk.subarray(0, this.maxBodyLength - this.bodyHashedBytes);\n        }\n\n        this.bodyHashedBytes += chunk.length;\n        this.bodyHash.update(chunk);\n        this.fullBody = Buffer.concat([this.fullBody, Buffer.from(chunk)]);\n\n        //process.stdout.write(chunk);\n    }\n\n    _drainPendingEmptyLines() {\n        if (this.emptyLinesQueue.length) {\n            for (let emptyLine of this.emptyLinesQueue) {\n                this._updateBodyHash(emptyLine);\n            }\n            this.emptyLinesQueue = [];\n        }\n    }\n\n    _pushBodyHash(chunk) {\n        if (!chunk || !chunk.length) {\n            return;\n        }\n\n        // remove line endings\n        let foundNonLn = false;\n\n        // buffer line endings and empty lines\n        for (let i = chunk.length - 1; i >= 0; i--) {\n            if (chunk[i] !== CHAR_LF && chunk[i] !== CHAR_CR) {\n                this._drainPendingEmptyLines();\n                if (i < chunk.length - 1) {\n                    this.emptyLinesQueue.push(chunk.subarray(i + 1));\n                    chunk = chunk.subarray(0, i + 1);\n                }\n                foundNonLn = true;\n                break;\n            }\n        }\n\n        if (!foundNonLn) {\n            this.emptyLinesQueue.push(chunk);\n            return;\n        }\n\n        this._updateBodyHash(chunk);\n    }\n\n    fixLineBuffer(line) {\n        let resultLine = [];\n\n        let nonWspFound = false;\n        let prevWsp = false;\n\n        for (let i = line.length - 1; i >= 0; i--) {\n            if (line[i] === CHAR_LF) {\n                resultLine.unshift(line[i]);\n                if (i === 0 || line[i - 1] !== CHAR_CR) {\n                    // add missing carriage return\n                    resultLine.unshift(CHAR_CR);\n                }\n                continue;\n            }\n\n            if (line[i] === CHAR_CR) {\n                resultLine.unshift(line[i]);\n                continue;\n            }\n\n            if (line[i] === CHAR_SPACE || line[i] === CHAR_TAB) {\n                if (nonWspFound) {\n                    prevWsp = true;\n                }\n                continue;\n            }\n\n            if (prevWsp) {\n                resultLine.unshift(CHAR_SPACE);\n                prevWsp = false;\n            }\n\n            nonWspFound = true;\n            resultLine.unshift(line[i]);\n        }\n\n        if (prevWsp && nonWspFound) {\n            resultLine.unshift(CHAR_SPACE);\n        }\n\n        return Buffer.from(resultLine);\n    }\n\n    update(chunk, final) {\n        this.byteLength += (chunk && chunk.length) || 0;\n        if (this.maxSizeReached) {\n            return;\n        }\n\n        // Canonicalize content by applying a and b in order:\n        // a.1. Ignore all whitespace at the end of lines.\n        // a.2. Reduce all sequences of WSP within a line to a single SP character.\n\n        // b.1. Ignore all empty lines at the end of the message body.\n        // b.2. If the body is non-empty but does not end with a CRLF, a CRLF is added.\n\n        let lineEndPos = -1;\n        let lineNeedsFixing = false;\n        let cursorPos = 0;\n\n        if (this.remainder && this.remainder.length) {\n            if (chunk) {\n                // concatting chunks might be bad for performance :S\n                chunk = Buffer.concat([this.remainder, chunk]);\n            } else {\n                chunk = this.remainder;\n            }\n            this.remainder = false;\n        }\n\n        if (chunk && chunk.length) {\n            for (let pos = 0; pos < chunk.length; pos++) {\n                switch (chunk[pos]) {\n                    case CHAR_LF:\n                        if (\n                            !lineNeedsFixing &&\n                            // previous character is not <CR>\n                            ((pos >= 1 && chunk[pos - 1] !== CHAR_CR) ||\n                                // LF is the first byte on the line\n                                pos === 0 ||\n                                // there's a space before line break\n                                (pos >= 2 && chunk[pos - 1] === CHAR_CR && chunk[pos - 2] === CHAR_SPACE))\n                        ) {\n                            lineNeedsFixing = true;\n                        }\n\n                        // line break\n                        if (lineNeedsFixing) {\n                            // emit pending bytes up to the last line break before current line\n                            if (lineEndPos >= 0 && lineEndPos >= cursorPos) {\n                                let chunkPart = chunk.subarray(cursorPos, lineEndPos + 1);\n                                this._pushBodyHash(chunkPart);\n                            }\n\n                            let line = chunk.subarray(lineEndPos + 1, pos + 1);\n                            this._pushBodyHash(this.fixLineBuffer(line));\n\n                            lineNeedsFixing = false;\n\n                            // move cursor to the start of next line\n                            cursorPos = pos + 1;\n                        }\n\n                        lineEndPos = pos;\n\n                        break;\n\n                    case CHAR_SPACE:\n                        if (!lineNeedsFixing && pos && chunk[pos - 1] === CHAR_SPACE) {\n                            lineNeedsFixing = true;\n                        }\n                        break;\n\n                    case CHAR_TAB:\n                        // non-space WSP always needs replacing\n                        lineNeedsFixing = true;\n                        break;\n\n                    default:\n                }\n            }\n        }\n\n        if (chunk && cursorPos < chunk.length && cursorPos !== lineEndPos) {\n            // emit data from chunk\n\n            let chunkPart = chunk.subarray(cursorPos, lineEndPos + 1);\n\n            if (chunkPart.length) {\n                this._pushBodyHash(lineNeedsFixing ? this.fixLineBuffer(chunkPart) : chunkPart);\n                lineNeedsFixing = false;\n            }\n\n            cursorPos = lineEndPos + 1;\n        }\n\n        if (chunk && !final && cursorPos < chunk.length) {\n            this.remainder = chunk.subarray(cursorPos);\n        }\n\n        if (final) {\n            let chunkPart = (cursorPos && chunk && chunk.subarray(cursorPos)) || chunk;\n            if (chunkPart && chunkPart.length) {\n                this._pushBodyHash(lineNeedsFixing ? this.fixLineBuffer(chunkPart) : chunkPart);\n                lineNeedsFixing = false;\n            }\n\n            if (this.bodyHashedBytes) {\n                // terminating line break for non-empty messages\n                this._updateBodyHash(Buffer.from([CHAR_CR, CHAR_LF]));\n            }\n        }\n    }\n\n    digest(encoding) {\n        this.update(null, true);\n\n        // finalize\n        return this.bodyHash.digest(encoding);\n    }\n}\n\nmodule.exports = { RelaxedHash };\n\n/*\nlet fs = require('fs');\n\nconst getBody = message => {\n    message = message.toString('binary');\n    let match = message.match(/\\r?\\n\\r?\\n/);\n    if (match) {\n        message = message.substr(match.index + match[0].length);\n    }\n    return Buffer.from(message, 'binary');\n};\n\nlet s = fs.readFileSync(process.argv[2]);\n\nlet k = new RelaxedHash('rsa-sha256', -1);\n\nfor (let byte of getBody(s)) {\n    k.update(Buffer.from([byte]));\n}\n\nconsole.error(k.digest('base64'));\nconsole.error(k.byteLength, k.bodyHashedBytes);\n*/\n"
  },
  {
    "path": "client/src/helpers/dkim/body/simple.js",
    "content": "const crypto = require('crypto');\n\n/**\n * Class for calculating body hash of an email message body stream\n * using the \"simple\" canonicalization\n *\n * @class\n */\nclass SimpleHash {\n    /**\n     * @param {String} [algorithm] Hashing algo, either \"sha1\" or \"sha256\"\n     * @param {Number} [maxBodyLength] Allowed body length count, the value from the l= parameter\n     */\n    constructor(algorithm, maxBodyLength) {\n        algorithm = (algorithm || 'sha256').split('-').pop();\n        this.bodyHash = crypto.createHash(algorithm);\n\n        this.remainder = [];\n        this.byteLength = 0;\n\n        this.bodyHashedBytes = 0;\n        this.maxBodyLength = maxBodyLength;\n\n        this.lastNewline = false;\n\n        this.fullBody = Buffer.alloc(0);\n    }\n\n    _updateBodyHash(chunk) {\n        // the following is needed for l= option\n        if (\n            typeof this.maxBodyLength === 'number' &&\n            !isNaN(this.maxBodyLength) &&\n            this.maxBodyLength >= 0 &&\n            this.bodyHashedBytes + chunk.length > this.maxBodyLength\n        ) {\n            if (this.bodyHashedBytes >= this.maxBodyLength) {\n                // nothing to do here, skip entire chunk\n                return;\n            }\n            // only use allowed size of bytes\n            chunk = chunk.slice(0, this.maxBodyLength - this.bodyHashedBytes);\n        }\n\n        this.bodyHashedBytes += chunk.length;\n        this.bodyHash.update(chunk);\n        this.fullBody = Buffer.concat([this.fullBody, chunk]);\n\n        //process.stdout.write(chunk);\n    }\n\n    update(chunk) {\n        if (this.remainder.length) {\n            // see if we can release the last remainder\n            for (let i = 0; i < chunk.length; i++) {\n                let c = chunk[i];\n                if (c !== 0x0a && c !== 0x0d) {\n                    // found non-line terminator byte, can release previous chunk\n                    for (let remainderChunk of this.remainder) {\n                        this._updateBodyHash(remainderChunk);\n                    }\n                    this.remainder = [];\n                }\n            }\n        }\n\n        // find line terminators from the end of chunk\n        let matchStart = false;\n        for (let i = chunk.length - 1; i >= 0; i--) {\n            let c = chunk[i];\n            if (c === 0x0a || c === 0x0d) {\n                // stop looking\n                matchStart = i;\n            } else {\n                break;\n            }\n        }\n\n        if (matchStart === 0) {\n            // nothing but newlines in this chunk\n            this.remainder.push(chunk);\n            return;\n        } else if (matchStart !== false) {\n            this.remainder.push(chunk.slice(matchStart));\n            chunk = chunk.slice(0, matchStart);\n        }\n\n        this._updateBodyHash(chunk);\n        this.lastNewline = chunk[chunk.length - 1] === 0x0a;\n    }\n\n    digest(encoding) {\n        if (!this.lastNewline || !this.bodyHashedBytes) {\n            // emit empty line buffer to keep the stream flowing\n            this._updateBodyHash(Buffer.from('\\r\\n'));\n        }\n\n        return this.bodyHash.digest(encoding);\n    }\n}\n\nmodule.exports = { SimpleHash };\n"
  },
  {
    "path": "client/src/helpers/dkim/dkim-verifier.js",
    "content": "var isNode = false;    \nif (typeof process === 'object') {\n  if (typeof process.versions === 'object') {\n    if (typeof process.versions.node !== 'undefined') {\n      isNode = true;\n    }\n  }\n}\nconst LOCAL = isNode;\n\nconst { getSigningHeaderLines, getPublicKey, parseDkimHeaders, formatAuthHeaderRow, getAlignment } = require(\"./tools\");\nconst { MessageParser } = require(\"./message-parser\");\nconst { dkimBody } = require(\"./body\");\nconst { generateCanonicalizedHeader } = require(\"./header\");\nconst addressparser = require(\"addressparser\");\nconst crypto = require(\"crypto\");\n\nclass DkimVerifier extends MessageParser {\n  constructor(options) {\n    super();\n\n    this.options = options || {};\n    this.resolver = this.options.resolver;\n    this.minBitLength = this.options.minBitLength;\n\n    this.results = [];\n\n    this.signatureHeaders = [];\n    this.bodyHashes = new Map();\n\n    this.headerFrom = [];\n    this.envelopeFrom = false;\n\n    // ARC verification info\n    this.arc = { chain: false };\n\n    // should we also seal this message using ARC\n    this.seal = this.options.seal;\n\n    if (this.seal) {\n      // calculate body hash for the seal\n      let bodyCanon = \"relaxed\";\n      let hashAlgo = \"sha256\";\n      this.sealBodyHashKey = `${bodyCanon}:${hashAlgo}:`;\n      this.bodyHashes.set(this.sealBodyHashKey, dkimBody(bodyCanon, hashAlgo, false));\n    }\n  }\n\n  async messageHeaders(headers) {\n    this.headers = headers;\n\n    this.signatureHeaders = headers.parsed\n      .filter((h) => h.key === \"dkim-signature\")\n      .map((h) => {\n        const value = parseDkimHeaders(h.line);\n        value.type = \"DKIM\";\n        return value;\n      });\n\n    let fromHeaders = headers?.parsed?.filter((h) => h.key === \"from\");\n    for (let fromHeader of fromHeaders) {\n      fromHeader = fromHeader.line.toString();\n      let splitterPos = fromHeader.indexOf(\":\");\n      if (splitterPos >= 0) {\n        fromHeader = fromHeader.substr(splitterPos + 1);\n      }\n      let from = addressparser(fromHeader.trim());\n      for (let addr of from) {\n        if (addr && addr.address) {\n          this.headerFrom.push(addr.address);\n        }\n      }\n    }\n\n    if (this.options.sender) {\n      let returnPath = addressparser(this.options.sender);\n      this.envelopeFrom = returnPath.length && returnPath[0].address ? returnPath[0].address : false;\n    } else {\n      let returnPathHeader = headers.parsed.filter((h) => h.key === \"return-path\").pop();\n      if (returnPathHeader) {\n        returnPathHeader = returnPathHeader.line.toString();\n        let splitterPos = returnPathHeader.indexOf(\":\");\n        if (splitterPos >= 0) {\n          returnPathHeader = returnPathHeader.substr(splitterPos + 1);\n        }\n        let returnPath = addressparser(returnPathHeader.trim());\n        this.envelopeFrom = returnPath.length && returnPath[0].address ? returnPath[0].address : false;\n      }\n    }\n\n    for (let signatureHeader of this.signatureHeaders) {\n      signatureHeader.algorithm = signatureHeader.parsed?.a?.value || \"\";\n      signatureHeader.signAlgo = signatureHeader.algorithm.split(\"-\").shift().toLowerCase().trim();\n      signatureHeader.hashAlgo = signatureHeader.algorithm.split(\"-\").pop().toLowerCase().trim();\n\n      signatureHeader.canonicalization = signatureHeader.parsed?.c?.value || \"\";\n      signatureHeader.headerCanon = signatureHeader.canonicalization.split(\"/\").shift().toLowerCase().trim() || \"simple\";\n      // if body canonicalization is not set, then defaults to 'simple'\n      signatureHeader.bodyCanon = (signatureHeader.canonicalization.split(\"/\")[1] || \"simple\").toLowerCase().trim();\n\n      signatureHeader.signingDomain = signatureHeader.parsed?.d?.value || \"\";\n      signatureHeader.selector = signatureHeader.parsed?.s?.value || \"\";\n\n      signatureHeader.maxBodyLength = signatureHeader.parsed?.l?.value && !isNaN(signatureHeader.parsed?.l?.value) ? signatureHeader.parsed?.l?.value : \"\";\n\n      const validSignAlgo = [\"rsa\", \"ed25519\"];\n      const validHeaderAlgo = signatureHeader.type === \"DKIM\" ? [\"sha256\", \"sha1\"] : [\"sha256\"];\n      const validHeaderCanon = signatureHeader.type !== \"AS\" ? [\"relaxed\", \"simple\"] : [\"relaxed\"];\n      const validBodyCanon = signatureHeader.type !== \"AS\" ? [\"relaxed\", \"simple\"] : [\"relaxed\"];\n\n      if (\n        !validSignAlgo.includes(signatureHeader.signAlgo) ||\n        !validHeaderAlgo.includes(signatureHeader.hashAlgo) ||\n        !validHeaderCanon.includes(signatureHeader.headerCanon) ||\n        !validBodyCanon.includes(signatureHeader.bodyCanon) ||\n        !signatureHeader.signingDomain ||\n        !signatureHeader.selector\n      ) {\n        signatureHeader.skip = true;\n        continue;\n      }\n\n      signatureHeader.bodyHashKey = [signatureHeader.bodyCanon, signatureHeader.hashAlgo, signatureHeader.maxBodyLength].join(\":\");\n      if (!this.bodyHashes.has(signatureHeader.bodyHashKey)) {\n        this.bodyHashes.set(signatureHeader.bodyHashKey, dkimBody(signatureHeader.bodyCanon, signatureHeader.hashAlgo, signatureHeader.maxBodyLength));\n      }\n    }\n  }\n\n  async nextChunk(chunk) {\n    for (let bodyHash of this.bodyHashes.values()) {\n      bodyHash.update(chunk);\n    }\n  }\n\n  async finalChunk() {\n    try {\n      if (!this.headers || !this.bodyHashes.size) {\n        return;\n      }\n\n      // convert bodyHashes from hash objects to base64 strings\n      for (let [key, bodyHash] of this.bodyHashes.entries()) {\n        this.bodyHashes.get(key).hash = bodyHash.digest(\"base64\");\n      }\n\n      for (let signatureHeader of this.signatureHeaders) {\n        if (signatureHeader.skip) {\n          // TODO: add failing header line?\n          continue;\n        }\n\n        let signingHeaderLines = getSigningHeaderLines(this.headers.parsed, signatureHeader.parsed?.h?.value, true);\n\n        let { canonicalizedHeader } = generateCanonicalizedHeader(signatureHeader.type, signingHeaderLines, {\n          signatureHeaderLine: signatureHeader.original,\n          canonicalization: signatureHeader.canonicalization,\n          instance: [\"ARC\", \"AS\"].includes(signatureHeader.type) ? signatureHeader.parsed?.i?.value : false,\n        });\n\n        let signingHeaders = {\n          keys: signingHeaderLines.keys,\n          headers: signingHeaderLines.headers.map((l) => l.line.toString()),\n        };\n\n        let publicKey, rr, modulusLength;\n        let status = {\n          result: \"neutral\",\n          comment: false,\n          // ptype properties\n          header: {\n            // signing domain\n            i: signatureHeader.signingDomain ? `@${signatureHeader.signingDomain}` : false,\n            // dkim selector\n            s: signatureHeader.selector,\n            // algo\n            a: signatureHeader.parsed?.a?.value,\n            // signature value\n            b: signatureHeader.parsed?.b?.value ? `${signatureHeader.parsed?.b?.value.substr(0, 8)}` : false,\n          },\n        };\n\n        if (signatureHeader.type === \"DKIM\" && this.headerFrom?.length) {\n          status.aligned = this.headerFrom?.length ? getAlignment(this.headerFrom[0].split(\"@\").pop(), [signatureHeader.signingDomain]) : false;\n        }\n\n        let bodyHashObj = this.bodyHashes.get(signatureHeader.bodyHashKey);\n        let bodyHash = bodyHashObj?.hash;\n        if (signatureHeader.parsed?.bh?.value !== bodyHash) {\n          status.result = \"neutral\";\n          status.comment = `body hash did not verify`;\n        } else {\n          try {\n            // let res = {\n            //   \"Status\": 0,\n            //   \"TC\": false,\n            //   \"RD\": true,\n            //   \"RA\": true,\n            //   \"AD\": false,\n            //   \"CD\": false,\n            //   \"Question\": [\n            //       {\n            //           \"name\": \"yzlavq3ml4jl4lt6dltbgmnoftxftkly._domainkey.venmo.com.\",\n            //           \"type\": 16\n            //       }\n            //   ],\n            //   \"Answer\": [\n            //       {\n            //           \"name\": \"yzlavq3ml4jl4lt6dltbgmnoftxftkly._domainkey.venmo.com.\",\n            //           \"type\": 5,\n            //           \"TTL\": 269,\n            //           \"data\": \"yzlavq3ml4jl4lt6dltbgmnoftxftkly.dkim.amazonses.com.\"\n            //       },\n            //       {\n            //           \"name\": \"yzlavq3ml4jl4lt6dltbgmnoftxftkly.dkim.amazonses.com.\",\n            //           \"type\": 16,\n            //           \"TTL\": 2277,\n            //           \"data\": \"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoecgrbF4KMhqGMZK02Dv2vZgGnSAo9CDpYEZCpNDRBLXkfp/0Yzp3rgngm4nuiQWbhHO457vQ37nvc88I9ANuJKa3LIodD+QtOLCjwlzH+li2A81duY4fKLHcHYO3XKw+uYXKWd+bABQqps3AQP5KxoOgQ/P1EssOnvtQYBHjWQIDAQAB\"\n            //       }\n            //   ]\n            // }\n\n            let res = await getPublicKey(\n              signatureHeader.type,\n              this.options.key,\n              this.minBitLength,\n              this.resolver\n            );\n\n            publicKey = res?.publicKey;\n            rr = res?.rr;\n            modulusLength = res?.modulusLength;\n\n            try {\n              let ver_result = false;\n              if (LOCAL) {\n                ver_result = crypto.verify(\n                  signatureHeader.signAlgo === \"rsa\" ? signatureHeader.algorithm : null,\n                  canonicalizedHeader,\n                  publicKey,\n                  Buffer.from(signatureHeader.parsed?.b?.value, \"base64\")\n                );\n              } else {\n                let ver = crypto.createVerify(\"RSA-SHA256\");\n                ver.update(canonicalizedHeader);\n                ver_result = ver.verify({ key: publicKey.toString(), format: \"pem\" }, Buffer.from(signatureHeader.parsed?.b?.value, \"base64\"));\n              }\n\n              status.signature_header = canonicalizedHeader;\n              status.signature_value = signatureHeader.parsed?.b?.value;\n              status.result = ver_result ? \"pass\" : \"fail\";\n\n              if (status === \"fail\") {\n                status.comment = \"bad signature\";\n              }\n            } catch (err) {\n              status.result = \"neutral\";\n              status.comment = err.message;\n            }\n          } catch (err) {\n            console.log(\"err\", err);\n            if (err.rr) {\n              rr = err.rr;\n            }\n\n            switch (err.code) {\n              case \"ENOTFOUND\":\n              case \"ENODATA\":\n                status.result = \"neutral\";\n                status.comment = `no key`;\n                break;\n\n              case \"EINVALIDVER\":\n                status.result = \"neutral\";\n                status.comment = `unknown key version`;\n                break;\n\n              case \"EINVALIDTYPE\":\n                status.result = \"neutral\";\n                status.comment = `unknown key type`;\n                break;\n\n              case \"EINVALIDVAL\":\n                status.result = \"neutral\";\n                status.comment = `invalid public key`;\n                break;\n\n              case \"ESHORTKEY\":\n                status.result = \"policy\";\n                if (!status.policy) {\n                  status.policy = {};\n                }\n                status.policy[\"dkim-rules\"] = `weak-key`;\n                break;\n\n              default:\n                status.result = \"temperror\";\n                status.comment = `DNS failure: ${err.code || err.message}`;\n            }\n          }\n        }\n\n        signatureHeader.bodyHashedBytes = this.bodyHashes.get(signatureHeader.bodyHashKey)?.bodyHashedBytes;\n\n        if (typeof signatureHeader.maxBodyLength === \"number\" && signatureHeader.maxBodyLength !== signatureHeader.bodyHashedBytes) {\n          status.result = \"fail\";\n          status.comment = `invalid body length ${signatureHeader.bodyHashedBytes}`;\n        }\n\n        let result = {\n          signingDomain: signatureHeader.signingDomain,\n          selector: signatureHeader.selector,\n          signature: signatureHeader.parsed?.b?.value,\n          algo: signatureHeader.parsed?.a?.value,\n          format: signatureHeader.parsed?.c?.value,\n          bodyHash,\n          bodyHashExpecting: signatureHeader.parsed?.bh?.value,\n          body: bodyHashObj?.fullBody,\n          signingHeaders,\n          status,\n        };\n\n        if (typeof signatureHeader.bodyHashedBytes === \"number\") {\n          result.canonBodyLength = signatureHeader.bodyHashedBytes;\n        }\n\n        if (typeof signatureHeader.maxBodyLength === \"number\") {\n          result.bodyLengthCount = signatureHeader.maxBodyLength;\n        }\n\n        if (publicKey) {\n          result.publicKey = publicKey.toString();\n        }\n\n        if (modulusLength) {\n          result.modulusLength = modulusLength;\n        }\n\n        if (rr) {\n          result.rr = rr;\n        }\n\n        if (typeof result.status.comment === \"boolean\") {\n          delete result.status.comment;\n        }\n\n        switch (signatureHeader.type) {\n          case \"ARC\":\n            throw Error(\"ARC not possible\");\n          case \"DKIM\":\n          default:\n            this.results.push(result);\n            break;\n        }\n      }\n    } finally {\n      if (!this.results.length) {\n        this.results.push({\n          status: {\n            result: \"none\",\n            comment: \"message not signed\",\n          },\n        });\n      }\n\n      this.results.forEach((result) => {\n        result.info = formatAuthHeaderRow(\"dkim\", result.status);\n      });\n    }\n\n    if (this.seal && this.bodyHashes.has(this.sealBodyHashKey) && typeof this.bodyHashes.get(this.sealBodyHashKey)?.hash === \"string\") {\n      this.seal.bodyHash = this.bodyHashes.get(this.sealBodyHashKey).hash;\n    }\n  }\n}\n\nmodule.exports = { DkimVerifier };\n"
  },
  {
    "path": "client/src/helpers/dkim/header/index.js",
    "content": "let { relaxedHeaders } = require('./relaxed');\nlet { simpleHeaders } = require('./simple');\n\nconst generateCanonicalizedHeader = (type, signingHeaderLines, options) => {\n    options = options || {};\n    let canonicalization = (options.canonicalization || 'simple/simple').toString().split('/').shift().toLowerCase().trim();\n    switch (canonicalization) {\n        case 'simple':\n            return simpleHeaders(type, signingHeaderLines, options);\n        case 'relaxed':\n            return relaxedHeaders(type, signingHeaderLines, options);\n        default:\n            throw new Error('Unknown header canonicalization');\n    }\n};\n\nmodule.exports = { generateCanonicalizedHeader };\n"
  },
  {
    "path": "client/src/helpers/dkim/header/relaxed.js",
    "content": "const { formatSignatureHeaderLine, formatRelaxedLine } = require('../tools');\n\n// generate headers for signing\nconst relaxedHeaders = (type, signingHeaderLines, options) => {\n    let { signatureHeaderLine, signingDomain, selector, algorithm, canonicalization, bodyHash, signTime, signature, instance, bodyHashedBytes } = options || {};\n    let chunks = [];\n\n    for (let signedHeaderLine of signingHeaderLines.headers) {\n        chunks.push(formatRelaxedLine(signedHeaderLine.line, '\\r\\n'));\n    }\n\n    let opts = false;\n\n    if (!signatureHeaderLine) {\n        opts = {\n            a: algorithm,\n            c: canonicalization,\n            s: selector,\n            d: signingDomain,\n            h: signingHeaderLines.keys,\n            bh: bodyHash\n        };\n\n        if (typeof bodyHashedBytes === 'number') {\n            opts.l = bodyHashedBytes;\n        }\n\n        if (instance) {\n            // ARC only\n            opts.i = instance;\n        }\n\n        if (signTime) {\n            if (typeof signTime === 'string' || typeof signTime === 'number') {\n                signTime = new Date(signTime);\n            }\n\n            if (Object.prototype.toString.call(signTime) === '[object Date]' && signTime.toString() !== 'Invalid Date') {\n                // we need a unix timestamp value\n                signTime = Math.round(signTime.getTime() / 1000);\n                opts.t = signTime;\n            }\n        }\n\n        signatureHeaderLine = formatSignatureHeaderLine(\n            type,\n            Object.assign(\n                {\n                    // make sure that b= always has a value, otherwise folding would be different\n                    b: signature || 'a'.repeat(73)\n                },\n                opts\n            ),\n            true\n        );\n    }\n\n    chunks.push(\n        Buffer.from(\n            formatRelaxedLine(signatureHeaderLine)\n                .toString('binary')\n                // remove value from b= key\n                .replace(/([;:\\s]+b=)[^;]+/, '$1'),\n            'binary'\n        )\n    );\n\n    return { canonicalizedHeader: Buffer.concat(chunks), signatureHeaderLine, dkimHeaderOpts: opts };\n};\n\nmodule.exports = { relaxedHeaders };\n"
  },
  {
    "path": "client/src/helpers/dkim/header/simple.js",
    "content": "const { formatSignatureHeaderLine } = require('../tools');\n\nconst formatSimpleLine = (line, suffix) => Buffer.from(line.toString('binary') + (suffix ? suffix : ''), 'binary');\n\n// generate headers for signing\nconst simpleHeaders = (type, signingHeaderLines, options) => {\n    let { signatureHeaderLine, signingDomain, selector, algorithm, canonicalization, bodyHash, signTime, signature, instance, bodyHashedBytes } = options || {};\n    let chunks = [];\n\n    for (let signedHeaderLine of signingHeaderLines.headers) {\n        chunks.push(formatSimpleLine(signedHeaderLine.line, '\\r\\n'));\n    }\n\n    let opts = false;\n\n    if (!signatureHeaderLine) {\n        opts = {\n            a: algorithm,\n            c: canonicalization,\n            s: selector,\n            d: signingDomain,\n            h: signingHeaderLines.keys,\n            bh: bodyHash\n        };\n\n        if (typeof bodyHashedBytes === 'number') {\n            opts.l = bodyHashedBytes;\n        }\n\n        if (instance) {\n            // ARC only (should never happen thoug as simple algo is not allowed)\n            opts.i = instance;\n        }\n\n        if (signTime) {\n            if (typeof signTime === 'string' || typeof signTime === 'number') {\n                signTime = new Date(signTime);\n            }\n\n            if (Object.prototype.toString.call(signTime) === '[object Date]' && signTime.toString() !== 'Invalid Date') {\n                // we need a unix timestamp value\n                signTime = Math.round(signTime.getTime() / 1000);\n                opts.t = signTime;\n            }\n        }\n\n        signatureHeaderLine = formatSignatureHeaderLine(\n            type,\n            Object.assign(\n                {\n                    // make sure that b= has a value, otherwise folding would be different\n                    b: signature || 'a'.repeat(73)\n                },\n                opts\n            ),\n            true\n        );\n    }\n\n    chunks.push(\n        Buffer.from(\n            formatSimpleLine(signatureHeaderLine)\n                .toString('binary')\n                // remove value from b= key\n                .replace(/([;:\\s]+b=)[^;]+/, '$1'),\n            'binary'\n        )\n    );\n\n    return { canonicalizedHeader: Buffer.concat(chunks), signatureHeaderLine, dkimHeaderOpts: opts };\n};\n\nmodule.exports = { simpleHeaders };\n"
  },
  {
    "path": "client/src/helpers/dkim/index.js",
    "content": "const { writeToStream } = require(\"./tools\");\nconst { DkimVerifier } = require(\"./dkim-verifier\");\n\nconst dkimVerify = async (input, options) => {\n  let dkimVerifier = new DkimVerifier(options);\n  await writeToStream(dkimVerifier, input);\n\n  const result = {\n    //headers: dkimVerifier.headers,\n    headerFrom: dkimVerifier.headerFrom,\n    envelopeFrom: dkimVerifier.envelopeFrom,\n    results: dkimVerifier.results,\n  };\n\n  if (dkimVerifier.headers) {\n    Object.defineProperty(result, \"headers\", {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: dkimVerifier.headers,\n    });\n  }\n\n  return result;\n};\n\nmodule.exports = {\n  dkimVerify,\n};\n"
  },
  {
    "path": "client/src/helpers/dkim/message-parser.js",
    "content": "// Calculates relaxed body hash for a message body stream\n\nconst { parseHeaders } = require('./tools');\nconst Writable = require('stream').Writable;\n\n/**\n * Class for separating header from body\n *\n * @class\n * @extends Writable\n */\nclass MessageParser extends Writable {\n    constructor(options) {\n        super(options);\n\n        this.byteLength = 0;\n\n        this.state = 'header';\n        this.stateBytes = [];\n\n        this.headers = false;\n        this.headerChunks = [];\n    }\n\n    async nextChunk(/* chunk */) {\n        // Override in child class\n    }\n\n    async finalChunk() {\n        // Override in child class\n    }\n\n    async messageHeaders() {\n        // Override in child class\n    }\n\n    async processChunk(chunk) {\n        if (!chunk || !chunk.length) {\n            return;\n        }\n\n        if (this.state === 'header') {\n            // wait until we have found body part\n            for (let i = 0; i < chunk.length; i++) {\n                let c = chunk[i];\n                this.stateBytes.push(c);\n                if (this.stateBytes.length > 4) {\n                    this.stateBytes = this.stateBytes.slice(-4);\n                }\n\n                let b0 = this.stateBytes[this.stateBytes.length - 1];\n                let b1 = this.stateBytes.length > 1 && this.stateBytes[this.stateBytes.length - 2];\n                let b2 = this.stateBytes.length > 2 && this.stateBytes[this.stateBytes.length - 3];\n\n                if (b0 === 0x0a && (b1 === 0x0a || (b1 === 0x0d && b2 === 0x0a))) {\n                    // found header ending\n                    this.state = 'body';\n                    if (i === chunk.length - 1) {\n                        //end of chunk\n                        this.headerChunks.push(chunk);\n                        this.headers = parseHeaders(Buffer.concat(this.headerChunks));\n                        await this.messageHeaders(this.headers);\n                        return;\n                    }\n                    this.headerChunks.push(chunk.slice(0, i + 1));\n                    this.headers = parseHeaders(Buffer.concat(this.headerChunks));\n                    await this.messageHeaders(this.headers);\n                    chunk = chunk.slice(i + 1);\n                    break;\n                }\n            }\n        }\n\n        if (this.state !== 'body') {\n            this.headerChunks.push(chunk);\n            return;\n        }\n\n        await this.nextChunk(chunk);\n    }\n\n    *ensureLinebreaks(input) {\n        let pos = 0;\n        for (let i = 0; i < input.length; i++) {\n            let c = input[i];\n            if (c !== 0x0a) {\n                this.lastByte = c;\n            } else if (this.lastByte !== 0x0d) {\n                // emit line break\n                let buf;\n                if (i === 0 || pos === i) {\n                    buf = Buffer.from('\\r\\n');\n                } else {\n                    buf = Buffer.concat([input.slice(pos, i), Buffer.from('\\r\\n')]);\n                }\n                yield buf;\n\n                pos = i + 1;\n            }\n        }\n        if (pos === 0) {\n            yield input;\n        } else if (pos < input.length) {\n            let buf = input.slice(pos);\n            yield buf;\n        }\n    }\n\n    async writeAsync(chunk, encoding) {\n        if (!chunk || !chunk.length) {\n            return;\n        }\n\n        if (typeof chunk === 'string') {\n            chunk = Buffer.from(chunk, encoding);\n        }\n\n        for (let partialChunk of this.ensureLinebreaks(chunk)) {\n            // separate chunk is emitted for every line that uses \\n instead of \\r\\n\n            await this.processChunk(partialChunk);\n            this.byteLength += partialChunk.length;\n        }\n    }\n\n    _write(chunk, encoding, callback) {\n        this.writeAsync(chunk, encoding)\n            .then(() => callback())\n            .catch(err => callback(err));\n    }\n\n    async finish() {\n        // generate final hash and emit it\n        await this.finalChunk();\n\n        if (!this.headers && this.headerChunks.length) {\n            this.headers = parseHeaders(Buffer.concat(this.headerChunks));\n            await this.messageHeaders(this.headers);\n        }\n    }\n\n    _final(callback) {\n        this.finish()\n            .then(() => callback())\n            .catch(err => callback(err));\n    }\n}\n\nmodule.exports = { MessageParser };\n"
  },
  {
    "path": "client/src/helpers/dkim/parse-dkim-headers.js",
    "content": "// NB! fails to properly parse nested comments (should be rare enough though)\n\nconst valueParser = str => {\n    let line = str.replace(/\\s+/g, ' ').trim();\n\n    let parts = [];\n    let lastState = false;\n\n    const createPart = () => {\n        let part = {\n            key: '',\n            value: ''\n        };\n        parts.push(part);\n        return part;\n    };\n\n    const parse = () => {\n        let state = 'key';\n        let escaped;\n        let quote;\n\n        let curPart = createPart();\n\n        for (let i = 0; i < line.length; i++) {\n            let c = line.charAt(i);\n\n            switch (state) {\n                case 'key':\n                    if (c === '=') {\n                        state = 'value';\n                        break;\n                    }\n                // falls through\n\n                case 'value': {\n                    if (escaped === true) {\n                        curPart[state] += c;\n                        break;\n                    }\n\n                    switch (c) {\n                        case ' ':\n                            // start new part\n                            curPart = createPart();\n                            state = 'key';\n                            break;\n\n                        case '\\\\':\n                            escaped = true;\n                            break;\n\n                        case '\"':\n                        case \"'\":\n                            lastState = state;\n                            state = 'quoted';\n                            quote = c;\n                            break;\n\n                        default:\n                            curPart[state] += c;\n                            break;\n                    }\n\n                    break;\n                }\n\n                case 'quoted':\n                    if (escaped === true) {\n                        curPart[lastState] += c;\n                        break;\n                    }\n\n                    switch (c) {\n                        case '\\\\':\n                            escaped = true;\n                            break;\n\n                        case quote:\n                            state = lastState;\n                            break;\n\n                        default:\n                            curPart[lastState] += c;\n                            break;\n                    }\n\n                    break;\n\n                default:\n                    throw Error(\"Unknown state in value '\" + state + \"'\");\n            }\n        }\n\n        let result = {\n            value: parts[0].key\n        };\n        parts.slice(1).forEach(part => {\n            if (part.key || part.value) {\n                let path = part.key.split('.');\n                let curRes = result;\n                let final = path.pop();\n                for (let p of path) {\n                    if (typeof curRes[p] !== 'object' || !curRes[p]) {\n                        curRes[p] = {};\n                    }\n                    curRes = curRes[p];\n                }\n                curRes[final] = part.value;\n            }\n        });\n\n        return result;\n    };\n\n    return parse();\n};\n\nconst headerParser = buf => {\n    let line = (buf || '').toString().trim();\n    let splitterPos = line.indexOf(':');\n    let headerKey;\n    if (splitterPos >= 0) {\n        headerKey = line.substr(0, splitterPos).trim().toLowerCase();\n        line = line.substr(splitterPos + 1).trim();\n    }\n\n    let parts = [];\n    let lastState = false;\n\n    const createPart = () => {\n        let part = {\n            key: '',\n            value: '',\n            comment: '',\n            hasValue: false\n        };\n        parts.push(part);\n        return part;\n    };\n\n    const parse = () => {\n        let state = 'key';\n        let escaped;\n        let quote;\n\n        let curPart = createPart();\n\n        for (let i = 0; i < line.length; i++) {\n            let c = line.charAt(i);\n\n            switch (state) {\n                case 'key':\n                    if (c === '=') {\n                        state = 'value';\n                        curPart.hasValue = true;\n                        break;\n                    }\n                // falls through\n\n                case 'value': {\n                    if (escaped === true) {\n                        curPart[state] += c;\n                    }\n\n                    switch (c) {\n                        case ';':\n                            // start new part\n                            curPart = createPart();\n                            state = 'key';\n                            break;\n\n                        case '\\\\':\n                            escaped = true;\n                            break;\n\n                        case '(':\n                            lastState = state;\n                            state = 'comment';\n                            break;\n\n                        case '\"':\n                        case \"'\":\n                            lastState = state;\n                            curPart[state] += c;\n                            state = 'quoted';\n                            quote = c;\n                            break;\n\n                        default:\n                            curPart[state] += c;\n                            break;\n                    }\n\n                    break;\n                }\n\n                case 'comment':\n                    switch (c) {\n                        case '\\\\':\n                            escaped = true;\n                            break;\n\n                        case ')':\n                            state = lastState;\n                            break;\n\n                        default:\n                            curPart[state] += c;\n                            break;\n                    }\n\n                    break;\n\n                case 'quoted':\n                    switch (c) {\n                        case '\\\\':\n                            escaped = true;\n                            break;\n\n                        case quote:\n                            state = lastState;\n                        // falls through\n\n                        default:\n                            curPart[lastState] += c;\n                            break;\n                    }\n\n                    break;\n\n                default:\n                    throw Error(\"Unknown state in header '\" + state + \"'\");\n            }\n        }\n\n        for (let i = parts.length - 1; i >= 0; i--) {\n            for (let key of Object.keys(parts[i])) {\n                if (typeof parts[i][key] === 'string') {\n                    parts[i][key] = parts[i][key].replace(/\\s+/g, ' ').trim();\n                }\n            }\n\n            parts[i].key = parts[i].key.toLowerCase();\n\n            if (!parts[i].key) {\n                // remove empty value\n                parts.splice(i, 1);\n            } else if (['bh', 'b', 'p', 'h'].includes(parts[i].key)) {\n                // remove unneeded whitespace\n                parts[i].value = parts[i].value.replace(/\\s+/g, '');\n            } else if (['l', 'v', 't'].includes(parts[i].key) && !isNaN(parts[i].value)) {\n                parts[i].value = Number(parts[i].value);\n            } else if (parts[i].key === 'i' && /^arc-/i.test(headerKey)) {\n                parts[i].value = Number(parts[i].value);\n            }\n        }\n\n        let result = {\n            header: headerKey\n        };\n\n        for (let i = 0; i < parts.length; i++) {\n            // find the first entry with key only and use it as the default value\n            if (parts[i].key && !parts[i].hasValue) {\n                result.value = parts[i].key;\n                parts.splice(i, 1);\n                break;\n            }\n        }\n\n        parts.forEach(part => {\n            let entry = {\n                value: part.value\n            };\n\n            if (['arc-authentication-results', 'authentication-results'].includes(headerKey) && typeof part.value === 'string') {\n                // parse value into subparts as well\n                entry = Object.assign(entry, valueParser(entry.value));\n            }\n\n            if (part.comment) {\n                entry.comment = part.comment;\n            }\n\n            if (['arc-authentication-results', 'authentication-results'].includes(headerKey) && part.key === 'dkim') {\n                if (!result[part.key]) {\n                    result[part.key] = [];\n                }\n                result[part.key].push(entry);\n            } else {\n                result[part.key] = entry;\n            }\n        });\n\n        return result;\n    };\n\n    return { parsed: parse(), original: buf };\n};\n\nmodule.exports = headerParser;\n"
  },
  {
    "path": "client/src/helpers/dkim/tools.js",
    "content": "/* eslint no-control-regex: 0 */\n\nvar isNode = false;\nif (typeof process === \"object\") {\n  if (typeof process.versions === \"object\") {\n    if (typeof process.versions.node !== \"undefined\") {\n      isNode = true;\n    }\n  }\n}\nconst LOCAL = isNode;\n\nconst punycode = require(\"punycode/\");\nconst libmime = require(\"libmime\");\nlet dns;\nif (LOCAL) {\n  dns = require(\"dns\").promises;\n}\nconst crypto = require(\"crypto\");\nconst parseDkimHeaders = require(\"./parse-dkim-headers\");\nconst psl = require(\"psl\");\nconst pki = require(\"node-forge\").pki;\n\nconst defaultDKIMFieldNames =\n  \"From:Sender:Reply-To:Subject:Date:Message-ID:To:\" +\n  \"Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:\" +\n  \"Content-Description:Resent-Date:Resent-From:Resent-Sender:\" +\n  \"Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:\" +\n  \"List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:\" +\n  \"List-Owner:List-Archive:BIMI-Selector\";\n\nconst keyOrderingDKIM = [\"v\", \"a\", \"c\", \"d\", \"h\", \"i\", \"l\", \"q\", \"s\", \"t\", \"x\", \"z\", \"bh\", \"b\"];\n\nconst writeToStream = async (stream, input, chunkSize) => {\n  chunkSize = chunkSize || 64 * 1024;\n\n  if (typeof input === \"string\") {\n    input = Buffer.from(input);\n  }\n\n  return new Promise((resolve, reject) => {\n    if (typeof input.on === \"function\") {\n      // pipe as stream\n      input.pipe(stream);\n      input.on(\"error\", reject);\n    } else {\n      let pos = 0;\n      let writeChunk = () => {\n        if (pos >= input.length) {\n          return stream.end();\n        }\n\n        let chunk;\n        if (pos + chunkSize >= input.length) {\n          chunk = input.slice(pos);\n        } else {\n          chunk = input.slice(pos, pos + chunkSize);\n        }\n        pos += chunk.length;\n\n        if (stream.write(chunk) === false) {\n          stream.once(\"drain\", () => writeChunk());\n          return;\n        }\n        if (isNode) {\n          setImmediate(writeChunk);\n        } else {\n          setTimeout(writeChunk, 0);\n        }\n      };\n      if (isNode) {\n        setImmediate(writeChunk);\n      } else {\n        setTimeout(writeChunk, 0);\n      }\n    }\n\n    stream.on(\"end\", resolve);\n    stream.on(\"finish\", resolve);\n    stream.on(\"error\", reject);\n  });\n};\n\nconst parseHeaders = (buf) => {\n  let rows = buf\n    .toString(\"binary\")\n    .replace(/[\\r\\n]+$/, \"\")\n    .split(/\\r?\\n/)\n    .map((row) => [row]);\n  for (let i = rows.length - 1; i >= 0; i--) {\n    if (i > 0 && /^\\s/.test(rows[i][0])) {\n      rows[i - 1] = rows[i - 1].concat(rows[i]);\n      rows.splice(i, 1);\n    }\n  }\n\n  rows = rows.map((row) => {\n    row = row.join(\"\\r\\n\");\n    let key = row.match(/^[^:]+/);\n    let casedKey;\n    if (key) {\n      casedKey = key[0].trim();\n      key = casedKey.toLowerCase();\n    }\n\n    return { key, casedKey, line: Buffer.from(row, \"binary\") };\n  });\n\n  return { parsed: rows, original: buf };\n};\n\nconst getSigningHeaderLines = (parsedHeaders, fieldNames, verify) => {\n  fieldNames = (typeof fieldNames === \"string\" ? fieldNames : defaultDKIMFieldNames)\n    .split(\":\")\n    .map((key) => key.trim().toLowerCase())\n    .filter((key) => key);\n\n  let signingList = [];\n\n  if (verify) {\n    let parsedList = [].concat(parsedHeaders);\n    for (let fieldName of fieldNames) {\n      for (let i = parsedList.length - 1; i >= 0; i--) {\n        let header = parsedList[i];\n        if (fieldName === header.key) {\n          signingList.push(header);\n          parsedList.splice(i, 1);\n          break;\n        }\n      }\n    }\n  } else {\n    for (let i = parsedHeaders.length - 1; i >= 0; i--) {\n      let header = parsedHeaders[i];\n      if (fieldNames.includes(header.key)) {\n        signingList.push(header);\n      }\n    }\n  }\n\n  return {\n    keys: signingList.map((entry) => entry.casedKey).join(\": \"),\n    headers: signingList,\n  };\n};\n\n/**\n * Generates `DKIM-Signature: ...` header for selected values\n * @param {Object} values\n */\nconst formatSignatureHeaderLine = (type, values, folded) => {\n  type = (type || \"\").toString().toUpperCase();\n\n  let keyOrdering, headerKey;\n  switch (type) {\n    case \"DKIM\":\n      headerKey = \"DKIM-Signature\";\n      keyOrdering = keyOrderingDKIM;\n      values = Object.assign(\n        {\n          v: 1,\n          t: Math.round(Date.now() / 1000),\n          q: \"dns/txt\",\n        },\n        values\n      );\n      break;\n\n    case \"ARC\":\n      throw Error(\"err\");\n\n    case \"AS\":\n      throw Error(\"err\");\n\n    default:\n      throw new Error(\"Unknown Signature type\");\n  }\n\n  const header =\n    `${headerKey}: ` +\n    Object.keys(values)\n      .filter((key) => values[key] !== false && typeof values[key] !== \"undefined\" && values.key !== null && keyOrdering.includes(key))\n      .sort((a, b) => keyOrdering.indexOf(a) - keyOrdering.indexOf(b))\n      .map((key) => {\n        let val = values[key] || \"\";\n        if (key === \"b\" && folded && val) {\n          // fold signature value\n          return `${key}=${val}`.replace(/.{75}/g, \"$& \").trim();\n        }\n\n        if ([\"d\", \"s\"].includes(key)) {\n          try {\n            // convert to A-label if needed\n            val = punycode.toASCII(val);\n          } catch (err) {\n            // ignore\n          }\n        }\n\n        if (key === \"i\" && type === \"DKIM\") {\n          let atPos = val.indexOf(\"@\");\n          if (atPos >= 0) {\n            let domainPart = val.substr(atPos + 1);\n            try {\n              // convert to A-label if needed\n              domainPart = punycode.toASCII(domainPart);\n            } catch (err) {\n              // ignore\n            }\n            val = val.substr(0, atPos + 1) + domainPart;\n          }\n        }\n\n        return `${key}=${val}`;\n      })\n      .join(\"; \");\n\n  if (folded) {\n    return libmime.foldLines(header);\n  }\n\n  return header;\n};\n\nasync function resolveDNSHTTP(name, type) {\n  const resp = await fetch(\n    \"https://dns.google/resolve?\" +\n      new URLSearchParams({\n        name: name,\n        type: type,\n      })\n  );\n  const out = await resp.json();\n  return [out.Answer[out.Answer.length - 1].data];\n}\n\n// from https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String\nfunction str2ab(str) {\n  const buf = new ArrayBuffer(str.length);\n  const bufView = new Uint8Array(buf);\n  for (let i = 0, strLen = str.length; i < strLen; i++) {\n    bufView[i] = str.charCodeAt(i);\n  }\n  return buf;\n}\n\nfunction importRsaKey(pem) {\n  // fetch the part of the PEM string between header and footer\n  const pemHeader = \"-----BEGIN PUBLIC KEY-----\";\n  const pemFooter = \"-----END PUBLIC KEY-----\";\n  const pemContents = pem.substring(pemHeader.length, pem.length - pemFooter.length);\n  // base64 decode the string to get the binary data\n  const binaryDerString = window.atob(pemContents);\n  // convert from a binary string to an ArrayBuffer\n  const binaryDer = str2ab(binaryDerString);\n\n  return window.crypto.subtle.importKey(\n    \"spki\",\n    binaryDer,\n    {\n      name: \"RSA-OAEP\",\n      hash: \"SHA-256\",\n    },\n    true,\n    [\"encrypt\"]\n  );\n}\n\nconst getPublicKey = async (type, nameOrKey, minBitLength, resolver) => {\n  minBitLength = minBitLength || 1024;\n  if (LOCAL) {\n    resolver = resolver || dns.resolve;\n  } else {\n    resolver = resolveDNSHTTP;\n  }\n\n  // let list = await resolver(name, \"TXT\");\n  let list = [nameOrKey];\n\n  let rr =\n    list &&\n    []\n      .concat(list[0] || [])\n      .join(\"\")\n      .replaceAll(/\\s+/g, \"\")\n      .replaceAll('\"', \"\");\n\n  if (rr) {\n    // prefix value for parsing as there is no default value\n    let entry = parseDkimHeaders(\"DNS: TXT;\" + rr);\n\n    const publicKeyValue = entry?.parsed?.p?.value;\n    if (!publicKeyValue) {\n      let err = new Error(\"Missing key value\");\n      err.code = \"EINVALIDVAL\";\n      err.rr = rr;\n      throw err;\n    }\n\n    /*\n    let validation = base64Schema.validate(publicKeyValue);\n    if (validation.error) {\n        let err = new Error('Invalid base64 format for public key');\n        err.code = 'EINVALIDVAL';\n        err.rr = rr;\n        err.details = validation.error;\n        throw err;\n    }\n    */\n\n    if (type === \"DKIM\" && entry?.parsed?.v && (entry?.parsed?.v?.value || \"\").toString().toLowerCase().trim() !== \"dkim1\") {\n      let err = new Error(\"Unknown key version\");\n      err.code = \"EINVALIDVER\";\n      err.rr = rr;\n      throw err;\n    }\n\n    let paddingNeeded = publicKeyValue.length % 4 ? 4 - (publicKeyValue.length % 4) : 0;\n\n    const publicKeyPem = Buffer.from(`-----BEGIN PUBLIC KEY-----\\n${(publicKeyValue + \"=\".repeat(paddingNeeded)).replace(/.{64}/g, \"$&\\n\")}\\n-----END PUBLIC KEY-----`);\n    let publicKeyObj;\n    if (LOCAL) {\n      publicKeyObj = crypto.createPublicKey({\n        key: publicKeyPem,\n        format: \"pem\",\n      });\n    } else {\n      publicKeyObj = await importRsaKey(publicKeyPem.toString());\n    }\n\n    let keyType;\n    if (LOCAL) {\n      keyType = publicKeyObj.asymmetricKeyType;\n    } else {\n      keyType = publicKeyObj.algorithm.name.split(\"-\")[0].toLowerCase();\n    }\n\n    if (![\"rsa\", \"ed25519\"].includes(keyType) || (entry?.parsed?.k && entry?.parsed?.k?.value?.toLowerCase() !== keyType)) {\n      let err = new Error(\"Unknown key type (\" + keyType + \")\");\n      err.code = \"EINVALIDTYPE\";\n      err.rr = rr;\n      throw err;\n    }\n\n    let modulusLength;\n    if (publicKeyObj.algorithm) {\n      modulusLength = publicKeyObj.algorithm.modulusLength;\n    } else {\n      // fall back to node-forge\n      const pubKeyData = pki.publicKeyFromPem(publicKeyPem.toString());\n      modulusLength = pubKeyData.n.bitLength();\n    }\n\n    if (keyType === \"rsa\" && modulusLength < 1024) {\n      let err = new Error(\"RSA key too short\");\n      err.code = \"ESHORTKEY\";\n      err.rr = rr;\n      throw err;\n    }\n\n    return {\n      publicKey: publicKeyPem,\n      rr,\n      modulusLength,\n    };\n  }\n\n  let err = new Error(\"Missing key value\");\n  err.code = \"EINVALIDVAL\";\n  throw err;\n};\n\nconst escapePropValue = (value) => {\n  value = (value || \"\")\n    .toString()\n    .replace(/[\\x00-\\x1F]+/g, \" \")\n    .replace(/\\s+/g, \" \")\n    .trim();\n\n  if (!/[\\s\\x00-\\x1F\\x7F-\\uFFFF()<>,;:\\\\\"/[\\]?=]/.test(value)) {\n    // return token value\n    return value;\n  }\n\n  // return quoted string with escaped quotes\n  return `\"${value.replace(/[\"\\\\]/g, (c) => `\\\\${c}`)}\"`;\n};\n\nconst escapeCommentValue = (value) => {\n  value = (value || \"\")\n    .toString()\n    .replace(/[\\x00-\\x1F]+/g, \" \")\n    .replace(/\\s+/g, \" \")\n    .trim();\n\n  return `${value.replace(/[\\\\)]/g, (c) => `\\\\${c}`)}`;\n};\n\nconst formatAuthHeaderRow = (method, status) => {\n  status = status || {};\n  let parts = [];\n\n  parts.push(`${method}=${status.result || \"none\"}`);\n\n  if (status.comment) {\n    parts.push(`(${escapeCommentValue(status.comment)})`);\n  }\n\n  for (let ptype of [\"policy\", \"smtp\", \"body\", \"header\"]) {\n    if (!status[ptype] || typeof status[ptype] !== \"object\") {\n      continue;\n    }\n\n    for (let prop of Object.keys(status[ptype])) {\n      if (status[ptype][prop]) {\n        parts.push(`${ptype}.${prop}=${escapePropValue(status[ptype][prop])}`);\n      }\n    }\n  }\n\n  return parts.join(\" \");\n};\n\nconst formatRelaxedLine = (line, suffix) => {\n  let result =\n    line\n      ?.toString(\"binary\")\n      // unfold\n      .replace(/\\r?\\n/g, \"\")\n      // key to lowercase, trim around :\n      .replace(/^([^:]*):\\s*/, (m, k) => k.toLowerCase().trim() + \":\")\n      // single WSP\n      .replace(/\\s+/g, \" \")\n      .trim() + (suffix ? suffix : \"\");\n\n  return Buffer.from(result, \"binary\");\n};\n\nconst formatDomain = (domain) => {\n  domain = domain.toLowerCase().trim();\n  try {\n    domain = punycode.toASCII(domain).toLowerCase().trim();\n  } catch (err) {\n    // ignore punycode errors\n  }\n  return domain;\n};\n\nconst getAlignment = (fromDomain, domainList, strict) => {\n  domainList = [].concat(domainList || []);\n  if (strict) {\n    fromDomain = formatDomain(fromDomain);\n    for (let domain of domainList) {\n      domain = formatDomain(psl.get(domain) || domain);\n      if (formatDomain(domain) === fromDomain) {\n        return domain;\n      }\n    }\n  }\n\n  // match org domains\n  fromDomain = formatDomain(psl.get(fromDomain) || fromDomain);\n  for (let domain of domainList) {\n    domain = formatDomain(psl.get(domain) || domain);\n    if (domain === fromDomain) {\n      return domain;\n    }\n  }\n\n  return false;\n};\n\nconst validateAlgorithm = (algorithm, strict) => {\n  try {\n    if (!algorithm || !/^[^-]+-[^-]+$/.test(algorithm)) {\n      throw new Error(\"Invalid algorithm format\");\n    }\n\n    let [signAlgo, hashAlgo] = algorithm.toLowerCase().split(\"-\");\n\n    if (![\"rsa\", \"ed25519\"].includes(signAlgo)) {\n      throw new Error(\"Unknown signing algorithm: \" + signAlgo);\n    }\n\n    if (![\"sha256\"].concat(!strict ? \"sha1\" : []).includes(hashAlgo)) {\n      throw new Error(\"Unknown hashing algorithm: \" + hashAlgo);\n    }\n  } catch (err) {\n    err.code = \"EINVALIDALGO\";\n    throw err;\n  }\n};\n\nmodule.exports = {\n  writeToStream,\n  parseHeaders,\n\n  defaultDKIMFieldNames,\n\n  getSigningHeaderLines,\n  formatSignatureHeaderLine,\n  parseDkimHeaders,\n  getPublicKey,\n  formatAuthHeaderRow,\n  escapeCommentValue,\n\n  validateAlgorithm,\n\n  getAlignment,\n\n  formatRelaxedLine,\n  formatDomain,\n};\n"
  },
  {
    "path": "client/src/helpers/docUrls.ts",
    "content": "\n/*\n * Doc Links\n */\n\nexport const DOWNLOAD_AND_UPLOAD_EMAIL_INSTRUCTIONS_DOCS_LINK = 'https://docs.zkp2p.xyz/onramp-guides/on-ramping/manual-email-input#download-and-upload-email';\nexport const COPY_AND_PASTE_EMAIL_INSTRUCTIONS_DOCS_LINK = 'https://docs.zkp2p.xyz/onramp-guides/on-ramping/manual-email-input#copy-and-paste-email';\nexport const EXTENSION_DOCS_URL = 'https://docs.zkp2p.xyz/onramp-guides/zkp2p-extension';\n\nexport const ZKP2P_SURVEY_FORM_LINK = 'https://forms.gle/NYGNHQmh91TMViSu9';\n\nexport const REVOLUT_DOWNLOAD_LINK = 'https://www.revolut.com/en-IN/qr-code-link/';\n\n/*\n * TG Links\n */\n\nexport const ZKP2P_TG_LINK = 'https://t.me/zk_p2p';\nexport const ZKP2P_TG_SUPPORT_CHAT_LINK = 'https://t.me/zk_p2p/588';\nexport const ZKP2P_TG_INDIA_CHAT_LINK = 'https://t.me/zk_p2p/754';\nexport const ZKP2P_TG_TURKEY_CHAT_LINK = 'https://t.me/zk_p2p/1707';\n\n\n"
  },
  {
    "path": "client/src/helpers/ens.ts",
    "content": "import { alchemyMainnetEthersProvider } from \"index\";\n\n\nexport async function resolveEnsName(ensName: string): Promise<string | null> {\n  try {\n    const address = await alchemyMainnetEthersProvider.resolveName(ensName);\n    if (address === null) {\n      return null;\n    }\n    return address;\n  } catch (error) {\n    return null;\n  }\n};\n"
  },
  {
    "path": "client/src/helpers/fast-sha256.ts",
    "content": "// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n//   sha256(message) -> hash\n//   sha256.hmac(key, message) -> mac\n//   sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n//  Classes:\n//\n//   new sha256.Hash()\n//   new sha256.HMAC(key)\n//\nexport const digestLength: number = 32;\nexport const blockSize: number = 64;\n\n// SHA-256 constants\nconst K = new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe,\n  0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n  0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nfunction hashBlocks(w: Int32Array, v: Int32Array, p: Uint8Array, pos: number, len: number): number {\n  let a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, u: number, i: number, j: number, t1: number, t2: number;\n  while (len >= 64) {\n    a = v[0];\n    b = v[1];\n    c = v[2];\n    d = v[3];\n    e = v[4];\n    f = v[5];\n    g = v[6];\n    h = v[7];\n\n    for (i = 0; i < 16; i++) {\n      j = pos + i * 4;\n      w[i] = ((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) | ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff);\n    }\n\n    for (i = 16; i < 64; i++) {\n      u = w[i - 2];\n      t1 = ((u >>> 17) | (u << (32 - 17))) ^ ((u >>> 19) | (u << (32 - 19))) ^ (u >>> 10);\n\n      u = w[i - 15];\n      t2 = ((u >>> 7) | (u << (32 - 7))) ^ ((u >>> 18) | (u << (32 - 18))) ^ (u >>> 3);\n\n      w[i] = ((t1 + w[i - 7]) | 0) + ((t2 + w[i - 16]) | 0);\n    }\n\n    for (i = 0; i < 64; i++) {\n      t1 =\n        ((((((e >>> 6) | (e << (32 - 6))) ^ ((e >>> 11) | (e << (32 - 11))) ^ ((e >>> 25) | (e << (32 - 25)))) + ((e & f) ^ (~e & g))) | 0) + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n\n      t2 = ((((a >>> 2) | (a << (32 - 2))) ^ ((a >>> 13) | (a << (32 - 13))) ^ ((a >>> 22) | (a << (32 - 22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n\n      h = g;\n      g = f;\n      f = e;\n      e = (d + t1) | 0;\n      d = c;\n      c = b;\n      b = a;\n      a = (t1 + t2) | 0;\n    }\n\n    v[0] += a;\n    v[1] += b;\n    v[2] += c;\n    v[3] += d;\n    v[4] += e;\n    v[5] += f;\n    v[6] += g;\n    v[7] += h;\n\n    pos += 64;\n    len -= 64;\n  }\n  return pos;\n}\n\n// Hash implements SHA256 hash algorithm.\nexport class Hash {\n  digestLength: number = digestLength;\n  blockSize: number = blockSize;\n\n  // Note: Int32Array is used instead of Uint32Array for performance reasons.\n  private state: Int32Array = new Int32Array(8); // hash state\n  private temp: Int32Array = new Int32Array(64); // temporary state\n  private buffer: Uint8Array = new Uint8Array(128); // buffer for data to hash\n  private bufferLength: number = 0; // number of bytes in buffer\n  private bytesHashed: number = 0; // number of total bytes hashed\n\n  finished: boolean = false; // indicates whether the hash was finalized\n\n  constructor() {\n    this.reset();\n  }\n\n  // Resets hash state making it possible\n  // to re-use this instance to hash other data.\n  reset(): this {\n    this.state[0] = 0x6a09e667;\n    this.state[1] = 0xbb67ae85;\n    this.state[2] = 0x3c6ef372;\n    this.state[3] = 0xa54ff53a;\n    this.state[4] = 0x510e527f;\n    this.state[5] = 0x9b05688c;\n    this.state[6] = 0x1f83d9ab;\n    this.state[7] = 0x5be0cd19;\n    this.bufferLength = 0;\n    this.bytesHashed = 0;\n    this.finished = false;\n    return this;\n  }\n\n  // Cleans internal buffers and re-initializes hash state.\n  clean() {\n    for (let i = 0; i < this.buffer.length; i++) {\n      this.buffer[i] = 0;\n    }\n    for (let i = 0; i < this.temp.length; i++) {\n      this.temp[i] = 0;\n    }\n    this.reset();\n  }\n\n  // Updates hash state with the given data.\n  //\n  // Optionally, length of the data can be specified to hash\n  // fewer bytes than data.length.\n  //\n  // Throws error when trying to update already finalized hash:\n  // instance must be reset to use it again.\n  update(data: Uint8Array, dataLength: number = data.length): this {\n    if (this.finished) {\n      throw new Error(\"SHA256: can't update because hash was finished.\");\n    }\n    let dataPos = 0;\n    this.bytesHashed += dataLength;\n    if (this.bufferLength > 0) {\n      while (this.bufferLength < 64 && dataLength > 0) {\n        this.buffer[this.bufferLength++] = data[dataPos++];\n        dataLength--;\n      }\n      if (this.bufferLength === 64) {\n        hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n        this.bufferLength = 0;\n      }\n    }\n    if (dataLength >= 64) {\n      dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n      dataLength %= 64;\n    }\n    while (dataLength > 0) {\n      this.buffer[this.bufferLength++] = data[dataPos++];\n      dataLength--;\n    }\n    return this;\n  }\n\n  // Finalizes hash state and puts hash into out.\n  //\n  // If hash was already finalized, puts the same value.\n  finish(out: Uint8Array): this {\n    if (!this.finished) {\n      const bytesHashed = this.bytesHashed;\n      const left = this.bufferLength;\n      const bitLenHi = (bytesHashed / 0x20000000) | 0;\n      const bitLenLo = bytesHashed << 3;\n      const padLength = bytesHashed % 64 < 56 ? 64 : 128;\n\n      this.buffer[left] = 0x80;\n      for (let i = left + 1; i < padLength - 8; i++) {\n        this.buffer[i] = 0;\n      }\n      this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n      this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n      this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n      this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n      this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n      this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n      this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n      this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n\n      hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n\n      this.finished = true;\n    }\n\n    for (let i = 0; i < 8; i++) {\n      out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n      out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n      out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n      out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n    }\n\n    return this;\n  }\n\n  // Returns the final hash digest.\n  digest(): Uint8Array {\n    const out = new Uint8Array(this.digestLength);\n    this.finish(out);\n    return out;\n  }\n\n  // Returns the current hash state.\n  cacheState(): Uint8Array {\n    const out32 = new Uint32Array(this.state.length);\n    this._saveState(out32);\n    const out = new Uint8Array(this.state.length * 4);\n    for (let i = 0; i < 8; i++) {\n      out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n      out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n      out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n      out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n    }\n    return out;\n  }\n\n  // Internal function for use in HMAC for optimization.\n  _saveState(out: Uint32Array) {\n    for (let i = 0; i < this.state.length; i++) {\n      out[i] = this.state[i];\n    }\n  }\n\n  // Internal function for use in HMAC for optimization.\n  _restoreState(from: Uint32Array, bytesHashed: number) {\n    for (let i = 0; i < this.state.length; i++) {\n      this.state[i] = from[i];\n    }\n    this.bytesHashed = bytesHashed;\n    this.finished = false;\n    this.bufferLength = 0;\n  }\n}\n\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nexport class HMAC {\n  private inner: Hash = new Hash();\n  private outer: Hash = new Hash();\n\n  blockSize: number = this.inner.blockSize;\n  digestLength: number = this.inner.digestLength;\n\n  // Copies of hash states after keying.\n  // Need for quick reset without hashing they key again.\n  private istate: Uint32Array;\n  private ostate: Uint32Array;\n\n  constructor(key: Uint8Array) {\n    const pad = new Uint8Array(this.blockSize);\n    if (key.length > this.blockSize) {\n      new Hash().update(key).finish(pad).clean();\n    } else {\n      for (let i = 0; i < key.length; i++) {\n        pad[i] = key[i];\n      }\n    }\n    for (let i = 0; i < pad.length; i++) {\n      pad[i] ^= 0x36;\n    }\n    this.inner.update(pad);\n\n    for (let i = 0; i < pad.length; i++) {\n      pad[i] ^= 0x36 ^ 0x5c;\n    }\n    this.outer.update(pad);\n\n    this.istate = new Uint32Array(8);\n    this.ostate = new Uint32Array(8);\n\n    this.inner._saveState(this.istate);\n    this.outer._saveState(this.ostate);\n\n    for (let i = 0; i < pad.length; i++) {\n      pad[i] = 0;\n    }\n  }\n\n  // Returns HMAC state to the state initialized with key\n  // to make it possible to run HMAC over the other data with the same\n  // key without creating a new instance.\n  reset(): this {\n    this.inner._restoreState(this.istate, this.inner.blockSize);\n    this.outer._restoreState(this.ostate, this.outer.blockSize);\n    return this;\n  }\n\n  // Cleans HMAC state.\n  clean() {\n    for (let i = 0; i < this.istate.length; i++) {\n      this.ostate[i] = this.istate[i] = 0;\n    }\n    this.inner.clean();\n    this.outer.clean();\n  }\n\n  // Updates state with provided data.\n  update(data: Uint8Array): this {\n    this.inner.update(data);\n    return this;\n  }\n\n  // Finalizes HMAC and puts the result in out.\n  finish(out: Uint8Array): this {\n    if (this.outer.finished) {\n      this.outer.finish(out);\n    } else {\n      this.inner.finish(out);\n      this.outer.update(out, this.digestLength).finish(out);\n    }\n    return this;\n  }\n\n  // Returns message authentication code.\n  digest(): Uint8Array {\n    const out = new Uint8Array(this.digestLength);\n    this.finish(out);\n    return out;\n  }\n}\n\n// Returns SHA256 hash of data.\nexport function hash(data: Uint8Array): Uint8Array {\n  const h = new Hash().update(data);\n  const digest = h.digest();\n  h.clean();\n  return digest;\n}\n\n// Function hash is both available as module.hash and as default export.\nexport default hash;\n\n// Returns HMAC-SHA256 of data under the key.\nexport function hmac(key: Uint8Array, data: Uint8Array) {\n  const h = new HMAC(key).update(data);\n  const digest = h.digest();\n  h.clean();\n  return digest;\n}\n\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer: Uint8Array, hmac: HMAC, info: Uint8Array | undefined, counter: Uint8Array) {\n  // Counter is a byte value: check if it overflowed.\n  const num = counter[0];\n\n  if (num === 0) {\n    throw new Error(\"hkdf: cannot expand more\");\n  }\n\n  // Prepare HMAC instance for new data with old key.\n  hmac.reset();\n\n  // Hash in previous output if it was generated\n  // (i.e. counter is greater than 1).\n  if (num > 1) {\n    hmac.update(buffer);\n  }\n\n  // Hash in info if it exists.\n  if (info) {\n    hmac.update(info);\n  }\n\n  // Hash in the counter.\n  hmac.update(counter);\n\n  // Output result to buffer and clean HMAC instance.\n  hmac.finish(buffer);\n\n  // Increment counter inside typed array, this works properly.\n  counter[0]++;\n}\n\nconst hkdfSalt = new Uint8Array(digestLength); // Filled with zeroes.\nexport function hkdf(key: Uint8Array, salt: Uint8Array = hkdfSalt, info?: Uint8Array, length: number = 32) {\n  const counter = new Uint8Array([1]);\n\n  // HKDF-Extract uses salt as HMAC key, and key as data.\n  const okm = hmac(salt, key);\n\n  // Initialize HMAC for expanding with extracted key.\n  // Ensure no collisions with `hmac` function.\n  const hmac_ = new HMAC(okm);\n\n  // Allocate buffer.\n  const buffer = new Uint8Array(hmac_.digestLength);\n  let bufpos = buffer.length;\n\n  const out = new Uint8Array(length);\n  for (let i = 0; i < length; i++) {\n    if (bufpos === buffer.length) {\n      fillBuffer(buffer, hmac_, info, counter);\n      bufpos = 0;\n    }\n    out[i] = buffer[bufpos++];\n  }\n\n  hmac_.clean();\n  buffer.fill(0);\n  counter.fill(0);\n  return out;\n}\n\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nexport function pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, dkLen: number) {\n  const prf = new HMAC(password);\n  const len = prf.digestLength;\n  const ctr = new Uint8Array(4);\n  const t = new Uint8Array(len);\n  const u = new Uint8Array(len);\n  const dk = new Uint8Array(dkLen);\n\n  for (let i = 0; i * len < dkLen; i++) {\n    let c = i + 1;\n    ctr[0] = (c >>> 24) & 0xff;\n    ctr[1] = (c >>> 16) & 0xff;\n    ctr[2] = (c >>> 8) & 0xff;\n    ctr[3] = (c >>> 0) & 0xff;\n    prf.reset();\n    prf.update(salt);\n    prf.update(ctr);\n    prf.finish(u);\n    for (let j = 0; j < len; j++) {\n      t[j] = u[j];\n    }\n    for (let j = 2; j <= iterations; j++) {\n      prf.reset();\n      prf.update(u).finish(u);\n      for (let k = 0; k < len; k++) {\n        t[k] ^= u[k];\n      }\n    }\n    for (let j = 0; j < len && i * len + j < dkLen; j++) {\n      dk[i * len + j] = t[j];\n    }\n  }\n  for (let i = 0; i < len; i++) {\n    t[i] = u[i] = 0;\n  }\n  for (let i = 0; i < 4; i++) {\n    ctr[i] = 0;\n  }\n  prf.clean();\n  return dk;\n}\n"
  },
  {
    "path": "client/src/helpers/inputBuffer.ts",
    "content": "export const inputBuffer = {\n  \"in_padded\":[\n      \"102\",\n      \"114\",\n      \"111\",\n      \"109\",\n      \"58\",\n      \"86\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"32\",\n      \"60\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"64\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"114\",\n      \"101\",\n      \"112\",\n      \"108\",\n      \"121\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"58\",\n      \"86\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"32\",\n      \"78\",\n      \"111\",\n      \"45\",\n      \"114\",\n      \"101\",\n      \"112\",\n      \"108\",\n      \"121\",\n      \"32\",\n      \"60\",\n      \"110\",\n      \"111\",\n      \"45\",\n      \"114\",\n      \"101\",\n      \"112\",\n      \"108\",\n      \"121\",\n      \"64\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"116\",\n      \"111\",\n      \"58\",\n      \"114\",\n      \"105\",\n      \"99\",\n      \"104\",\n      \"97\",\n      \"114\",\n      \"100\",\n      \"108\",\n      \"105\",\n      \"97\",\n      \"110\",\n      \"103\",\n      \"50\",\n      \"48\",\n      \"49\",\n      \"53\",\n      \"64\",\n      \"117\",\n      \"46\",\n      \"110\",\n      \"111\",\n      \"114\",\n      \"116\",\n      \"104\",\n      \"119\",\n      \"101\",\n      \"115\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"110\",\n      \"46\",\n      \"101\",\n      \"100\",\n      \"117\",\n      \"13\",\n      \"10\",\n      \"115\",\n      \"117\",\n      \"98\",\n      \"106\",\n      \"101\",\n      \"99\",\n      \"116\",\n      \"58\",\n      \"89\",\n      \"111\",\n      \"117\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"112\",\n      \"108\",\n      \"101\",\n      \"116\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"65\",\n      \"108\",\n      \"101\",\n      \"120\",\n      \"32\",\n      \"83\",\n      \"111\",\n      \"111\",\n      \"110\",\n      \"103\",\n      \"39\",\n      \"115\",\n      \"32\",\n      \"36\",\n      \"49\",\n      \"46\",\n      \"48\",\n      \"48\",\n      \"32\",\n      \"99\",\n      \"104\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"101\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"113\",\n      \"117\",\n      \"101\",\n      \"115\",\n      \"116\",\n      \"13\",\n      \"10\",\n      \"109\",\n      \"105\",\n      \"109\",\n      \"101\",\n      \"45\",\n      \"118\",\n      \"101\",\n      \"114\",\n      \"115\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"49\",\n      \"46\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"99\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"116\",\n      \"121\",\n      \"112\",\n      \"101\",\n      \"58\",\n      \"109\",\n      \"117\",\n      \"108\",\n      \"116\",\n      \"105\",\n      \"112\",\n      \"97\",\n      \"114\",\n      \"116\",\n      \"47\",\n      \"97\",\n      \"108\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"110\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"118\",\n      \"101\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"100\",\n      \"97\",\n      \"114\",\n      \"121\",\n      \"61\",\n      \"34\",\n      \"45\",\n      \"45\",\n      \"45\",\n      \"45\",\n      \"61\",\n      \"95\",\n      \"80\",\n      \"97\",\n      \"114\",\n      \"116\",\n      \"95\",\n      \"50\",\n      \"54\",\n      \"53\",\n      \"55\",\n      \"48\",\n      \"54\",\n      \"56\",\n      \"95\",\n      \"49\",\n      \"52\",\n      \"48\",\n      \"55\",\n      \"55\",\n      \"49\",\n      \"57\",\n      \"51\",\n      \"50\",\n      \"54\",\n      \"46\",\n      \"49\",\n      \"54\",\n      \"56\",\n      \"48\",\n      \"51\",\n      \"55\",\n      \"52\",\n      \"50\",\n      \"48\",\n      \"49\",\n      \"49\",\n      \"56\",\n      \"53\",\n      \"34\",\n      \"13\",\n      \"10\",\n      \"109\",\n      \"101\",\n      \"115\",\n      \"115\",\n      \"97\",\n      \"103\",\n      \"101\",\n      \"45\",\n      \"105\",\n      \"100\",\n      \"58\",\n      \"60\",\n      \"48\",\n      \"49\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"49\",\n      \"56\",\n      \"55\",\n      \"51\",\n      \"101\",\n      \"49\",\n      \"98\",\n      \"55\",\n      \"98\",\n      \"53\",\n      \"100\",\n      \"45\",\n      \"102\",\n      \"100\",\n      \"101\",\n      \"98\",\n      \"55\",\n      \"51\",\n      \"102\",\n      \"101\",\n      \"45\",\n      \"50\",\n      \"49\",\n      \"57\",\n      \"98\",\n      \"45\",\n      \"52\",\n      \"53\",\n      \"97\",\n      \"53\",\n      \"45\",\n      \"57\",\n      \"52\",\n      \"50\",\n      \"56\",\n      \"45\",\n      \"102\",\n      \"100\",\n      \"101\",\n      \"102\",\n      \"53\",\n      \"50\",\n      \"50\",\n      \"54\",\n      \"54\",\n      \"99\",\n      \"57\",\n      \"52\",\n      \"45\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"64\",\n      \"101\",\n      \"109\",\n      \"97\",\n      \"105\",\n      \"108\",\n      \"46\",\n      \"97\",\n      \"109\",\n      \"97\",\n      \"122\",\n      \"111\",\n      \"110\",\n      \"115\",\n      \"101\",\n      \"115\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"100\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"58\",\n      \"83\",\n      \"97\",\n      \"116\",\n      \"44\",\n      \"32\",\n      \"49\",\n      \"32\",\n      \"65\",\n      \"112\",\n      \"114\",\n      \"32\",\n      \"50\",\n      \"48\",\n      \"50\",\n      \"51\",\n      \"32\",\n      \"49\",\n      \"56\",\n      \"58\",\n      \"51\",\n      \"54\",\n      \"58\",\n      \"52\",\n      \"49\",\n      \"32\",\n      \"43\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"100\",\n      \"107\",\n      \"105\",\n      \"109\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"97\",\n      \"116\",\n      \"117\",\n      \"114\",\n      \"101\",\n      \"58\",\n      \"118\",\n      \"61\",\n      \"49\",\n      \"59\",\n      \"32\",\n      \"97\",\n      \"61\",\n      \"114\",\n      \"115\",\n      \"97\",\n      \"45\",\n      \"115\",\n      \"104\",\n      \"97\",\n      \"50\",\n      \"53\",\n      \"54\",\n      \"59\",\n      \"32\",\n      \"113\",\n      \"61\",\n      \"100\",\n      \"110\",\n      \"115\",\n      \"47\",\n      \"116\",\n      \"120\",\n      \"116\",\n      \"59\",\n      \"32\",\n      \"99\",\n      \"61\",\n      \"114\",\n      \"101\",\n      \"108\",\n      \"97\",\n      \"120\",\n      \"101\",\n      \"100\",\n      \"47\",\n      \"115\",\n      \"105\",\n      \"109\",\n      \"112\",\n      \"108\",\n      \"101\",\n      \"59\",\n      \"32\",\n      \"115\",\n      \"61\",\n      \"121\",\n      \"122\",\n      \"108\",\n      \"97\",\n      \"118\",\n      \"113\",\n      \"51\",\n      \"109\",\n      \"108\",\n      \"52\",\n      \"106\",\n      \"108\",\n      \"52\",\n      \"108\",\n      \"116\",\n      \"54\",\n      \"100\",\n      \"108\",\n      \"116\",\n      \"98\",\n      \"103\",\n      \"109\",\n      \"110\",\n      \"111\",\n      \"102\",\n      \"116\",\n      \"120\",\n      \"102\",\n      \"116\",\n      \"107\",\n      \"108\",\n      \"121\",\n      \"59\",\n      \"32\",\n      \"100\",\n      \"61\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"61\",\n      \"49\",\n      \"54\",\n      \"56\",\n      \"48\",\n      \"51\",\n      \"55\",\n      \"52\",\n      \"50\",\n      \"48\",\n      \"49\",\n      \"59\",\n      \"32\",\n      \"104\",\n      \"61\",\n      \"70\",\n      \"114\",\n      \"111\",\n      \"109\",\n      \"58\",\n      \"82\",\n      \"101\",\n      \"112\",\n      \"108\",\n      \"121\",\n      \"45\",\n      \"84\",\n      \"111\",\n      \"58\",\n      \"84\",\n      \"111\",\n      \"58\",\n      \"83\",\n      \"117\",\n      \"98\",\n      \"106\",\n      \"101\",\n      \"99\",\n      \"116\",\n      \"58\",\n      \"77\",\n      \"73\",\n      \"77\",\n      \"69\",\n      \"45\",\n      \"86\",\n      \"101\",\n      \"114\",\n      \"115\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"67\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"84\",\n      \"121\",\n      \"112\",\n      \"101\",\n      \"58\",\n      \"77\",\n      \"101\",\n      \"115\",\n      \"115\",\n      \"97\",\n      \"103\",\n      \"101\",\n      \"45\",\n      \"73\",\n      \"68\",\n      \"58\",\n      \"68\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"104\",\n      \"61\",\n      \"82\",\n      \"104\",\n      \"43\",\n      \"56\",\n      \"86\",\n      \"50\",\n      \"84\",\n      \"100\",\n      \"79\",\n      \"43\",\n      \"102\",\n      \"65\",\n      \"118\",\n      \"76\",\n      \"118\",\n      \"99\",\n      \"84\",\n      \"107\",\n      \"99\",\n      \"70\",\n      \"82\",\n      \"90\",\n      \"70\",\n      \"122\",\n      \"83\",\n      \"109\",\n      \"84\",\n      \"74\",\n      \"97\",\n      \"56\",\n      \"74\",\n      \"121\",\n      \"85\",\n      \"111\",\n      \"89\",\n      \"48\",\n      \"86\",\n      \"116\",\n      \"113\",\n      \"120\",\n      \"48\",\n      \"88\",\n      \"48\",\n      \"61\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"61\",\n      \"128\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"20\",\n      \"176\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\"\n  ],\n  \"modulus\":[\n      \"683441457792668103047675496834917209\",\n      \"1011953822609495209329257792734700899\",\n      \"1263501452160533074361275552572837806\",\n      \"2083482795601873989011209904125056704\",\n      \"642486996853901942772546774764252018\",\n      \"1463330014555221455251438998802111943\",\n      \"2411895850618892594706497264082911185\",\n      \"520305634984671803945830034917965905\",\n      \"47421696716332554\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\"\n  ],\n  \"signature\":[\n      \"1267577788236740082217339412588774567\",\n      \"2437130502136956571482115812614274825\",\n      \"2498179615826250561207908571825152062\",\n      \"1210165745768524060318433895963473295\",\n      \"1747887311958608858936884743725752614\",\n      \"587087532306996456191055826982967480\",\n      \"765381988032181976452419558049935905\",\n      \"1506974244634433930383840670728497148\",\n      \"44501204514172246\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\"\n  ],\n  \"in_len_padded_bytes\":\"704\",\n  \"precomputed_sha\":[\n      \"164\",\n      \"42\",\n      \"47\",\n      \"49\",\n      \"157\",\n      \"47\",\n      \"210\",\n      \"88\",\n      \"230\",\n      \"156\",\n      \"108\",\n      \"89\",\n      \"233\",\n      \"192\",\n      \"28\",\n      \"45\",\n      \"40\",\n      \"101\",\n      \"99\",\n      \"186\",\n      \"154\",\n      \"181\",\n      \"95\",\n      \"136\",\n      \"172\",\n      \"171\",\n      \"55\",\n      \"158\",\n      \"26\",\n      \"19\",\n      \"135\",\n      \"214\"\n  ],\n  \"in_body_padded\":[\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"33\",\n      \"45\",\n      \"45\",\n      \"32\",\n      \"97\",\n      \"99\",\n      \"116\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"110\",\n      \"97\",\n      \"109\",\n      \"101\",\n      \"32\",\n      \"45\",\n      \"45\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"34\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"99\",\n      \"111\",\n      \"100\",\n      \"101\",\n      \"63\",\n      \"117\",\n      \"115\",\n      \"101\",\n      \"114\",\n      \"95\",\n      \"105\",\n      \"100\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"54\",\n      \"52\",\n      \"53\",\n      \"55\",\n      \"49\",\n      \"54\",\n      \"52\",\n      \"55\",\n      \"51\",\n      \"48\",\n      \"50\",\n      \"48\",\n      \"52\",\n      \"49\",\n      \"54\",\n      \"49\",\n      \"56\",\n      \"54\",\n      \"38\",\n      \"97\",\n      \"99\",\n      \"116\",\n      \"111\",\n      \"114\",\n      \"95\",\n      \"105\",\n      \"100\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"49\",\n      \"49\",\n      \"54\",\n      \"56\",\n      \"56\",\n      \"54\",\n      \"57\",\n      \"54\",\n      \"49\",\n      \"49\",\n      \"55\",\n      \"57\",\n      \"56\",\n      \"53\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"50\",\n      \"56\",\n      \"57\",\n      \"54\",\n      \"54\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"65\",\n      \"108\",\n      \"101\",\n      \"120\",\n      \"32\",\n      \"83\",\n      \"111\",\n      \"111\",\n      \"110\",\n      \"103\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"33\",\n      \"45\",\n      \"45\",\n      \"32\",\n      \"97\",\n      \"99\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"32\",\n      \"45\",\n      \"45\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"99\",\n      \"104\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"101\",\n      \"100\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"33\",\n      \"45\",\n      \"45\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"99\",\n      \"105\",\n      \"112\",\n      \"105\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"110\",\n      \"97\",\n      \"109\",\n      \"101\",\n      \"32\",\n      \"45\",\n      \"45\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"34\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"99\",\n      \"111\",\n      \"100\",\n      \"101\",\n      \"63\",\n      \"117\",\n      \"115\",\n      \"101\",\n      \"114\",\n      \"95\",\n      \"105\",\n      \"100\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"49\",\n      \"49\",\n      \"54\",\n      \"56\",\n      \"56\",\n      \"54\",\n      \"57\",\n      \"54\",\n      \"49\",\n      \"49\",\n      \"55\",\n      \"57\",\n      \"56\",\n      \"53\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"50\",\n      \"56\",\n      \"57\",\n      \"54\",\n      \"54\",\n      \"38\",\n      \"97\",\n      \"99\",\n      \"116\",\n      \"111\",\n      \"114\",\n      \"95\",\n      \"105\",\n      \"100\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"49\",\n      \"49\",\n      \"54\",\n      \"56\",\n      \"56\",\n      \"54\",\n      \"57\",\n      \"54\",\n      \"49\",\n      \"49\",\n      \"55\",\n      \"57\",\n      \"56\",\n      \"53\",\n      \"50\",\n      \"56\",\n      \"57\",\n      \"54\",\n      \"54\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"89\",\n      \"111\",\n      \"117\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"33\",\n      \"45\",\n      \"45\",\n      \"32\",\n      \"110\",\n      \"111\",\n      \"116\",\n      \"101\",\n      \"32\",\n      \"45\",\n      \"45\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"112\",\n      \"62\",\n      \"52\",\n      \"50\",\n      \"60\",\n      \"47\",\n      \"112\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"52\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"45\",\n      \"108\",\n      \"101\",\n      \"102\",\n      \"116\",\n      \"58\",\n      \"50\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"50\",\n      \"70\",\n      \"51\",\n      \"48\",\n      \"51\",\n      \"51\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"84\",\n      \"114\",\n      \"97\",\n      \"110\",\n      \"115\",\n      \"102\",\n      \"101\",\n      \"114\",\n      \"32\",\n      \"68\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"32\",\n      \"97\",\n      \"110\",\n      \"100\",\n      \"32\",\n      \"65\",\n      \"109\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"116\",\n      \"58\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"52\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"45\",\n      \"108\",\n      \"101\",\n      \"102\",\n      \"116\",\n      \"58\",\n      \"50\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"50\",\n      \"70\",\n      \"51\",\n      \"48\",\n      \"51\",\n      \"51\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"33\",\n      \"45\",\n      \"45\",\n      \"32\",\n      \"100\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"44\",\n      \"32\",\n      \"97\",\n      \"117\",\n      \"100\",\n      \"105\",\n      \"101\",\n      \"110\",\n      \"99\",\n      \"101\",\n      \"44\",\n      \"32\",\n      \"97\",\n      \"110\",\n      \"100\",\n      \"32\",\n      \"97\",\n      \"109\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"45\",\n      \"45\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"62\",\n      \"65\",\n      \"112\",\n      \"114\",\n      \"32\",\n      \"48\",\n      \"49\",\n      \"44\",\n      \"32\",\n      \"50\",\n      \"48\",\n      \"50\",\n      \"51\",\n      \"32\",\n      \"80\",\n      \"68\",\n      \"84\",\n      \"60\",\n      \"47\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"62\",\n      \"32\",\n      \"61\",\n      \"67\",\n      \"50\",\n      \"61\",\n      \"66\",\n      \"55\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"105\",\n      \"109\",\n      \"103\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"118\",\n      \"101\",\n      \"114\",\n      \"116\",\n      \"105\",\n      \"99\",\n      \"97\",\n      \"108\",\n      \"45\",\n      \"97\",\n      \"108\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"58\",\n      \"32\",\n      \"45\",\n      \"49\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"119\",\n      \"105\",\n      \"100\",\n      \"116\",\n      \"104\",\n      \"58\",\n      \"32\",\n      \"49\",\n      \"50\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"104\",\n      \"101\",\n      \"105\",\n      \"103\",\n      \"104\",\n      \"116\",\n      \"58\",\n      \"32\",\n      \"49\",\n      \"50\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"115\",\n      \"114\",\n      \"99\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"115\",\n      \"51\",\n      \"46\",\n      \"97\",\n      \"109\",\n      \"97\",\n      \"122\",\n      \"111\",\n      \"110\",\n      \"97\",\n      \"119\",\n      \"115\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"47\",\n      \"97\",\n      \"117\",\n      \"100\",\n      \"105\",\n      \"101\",\n      \"110\",\n      \"99\",\n      \"101\",\n      \"47\",\n      \"112\",\n      \"114\",\n      \"105\",\n      \"118\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"95\",\n      \"118\",\n      \"50\",\n      \"46\",\n      \"112\",\n      \"110\",\n      \"103\",\n      \"34\",\n      \"32\",\n      \"97\",\n      \"108\",\n      \"116\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"112\",\n      \"114\",\n      \"105\",\n      \"118\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"34\",\n      \"47\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"33\",\n      \"45\",\n      \"45\",\n      \"32\",\n      \"97\",\n      \"109\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"45\",\n      \"45\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"102\",\n      \"108\",\n      \"111\",\n      \"97\",\n      \"116\",\n      \"58\",\n      \"114\",\n      \"105\",\n      \"103\",\n      \"104\",\n      \"116\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"45\",\n      \"32\",\n      \"36\",\n      \"49\",\n      \"46\",\n      \"48\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"115\",\n      \"112\",\n      \"97\",\n      \"110\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"97\",\n      \"98\",\n      \"108\",\n      \"101\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"119\",\n      \"105\",\n      \"100\",\n      \"116\",\n      \"104\",\n      \"58\",\n      \"49\",\n      \"55\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"97\",\n      \"98\",\n      \"108\",\n      \"101\",\n      \"45\",\n      \"108\",\n      \"97\",\n      \"121\",\n      \"111\",\n      \"117\",\n      \"116\",\n      \"58\",\n      \"102\",\n      \"105\",\n      \"120\",\n      \"101\",\n      \"100\",\n      \"59\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"52\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"98\",\n      \"111\",\n      \"100\",\n      \"121\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"58\",\n      \"53\",\n      \"112\",\n      \"120\",\n      \"32\",\n      \"48\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"97\",\n      \"108\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"58\",\n      \"99\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"111\",\n      \"114\",\n      \"100\",\n      \"101\",\n      \"114\",\n      \"45\",\n      \"114\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"97\",\n      \"100\",\n      \"105\",\n      \"117\",\n      \"115\",\n      \"58\",\n      \"53\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"97\",\n      \"99\",\n      \"107\",\n      \"103\",\n      \"114\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"100\",\n      \"45\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"59\",\n      \"34\",\n      \"32\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"115\",\n      \"116\",\n      \"111\",\n      \"114\",\n      \"121\",\n      \"47\",\n      \"51\",\n      \"55\",\n      \"55\",\n      \"49\",\n      \"53\",\n      \"55\",\n      \"48\",\n      \"49\",\n      \"55\",\n      \"49\",\n      \"51\",\n      \"51\",\n      \"56\",\n      \"55\",\n      \"51\",\n      \"56\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"48\",\n      \"51\",\n      \"56\",\n      \"63\",\n      \"107\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"100\",\n      \"56\",\n      \"50\",\n      \"51\",\n      \"57\",\n      \"50\",\n      \"55\",\n      \"56\",\n      \"45\",\n      \"57\",\n      \"49\",\n      \"100\",\n      \"101\",\n      \"45\",\n      \"52\",\n      \"100\",\n      \"52\",\n      \"54\",\n      \"45\",\n      \"56\",\n      \"101\",\n      \"97\",\n      \"101\",\n      \"45\",\n      \"102\",\n      \"54\",\n      \"49\",\n      \"53\",\n      \"52\",\n      \"55\",\n      \"98\",\n      \"101\",\n      \"53\",\n      \"97\",\n      \"51\",\n      \"51\",\n      \"34\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"59\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"32\",\n      \"35\",\n      \"102\",\n      \"102\",\n      \"102\",\n      \"59\",\n      \"100\",\n      \"105\",\n      \"115\",\n      \"112\",\n      \"108\",\n      \"97\",\n      \"121\",\n      \"58\",\n      \"98\",\n      \"108\",\n      \"111\",\n      \"99\",\n      \"107\",\n      \"59\",\n      \"119\",\n      \"105\",\n      \"100\",\n      \"116\",\n      \"104\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"48\",\n      \"37\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"76\",\n      \"105\",\n      \"107\",\n      \"101\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"116\",\n      \"100\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"58\",\n      \"53\",\n      \"112\",\n      \"120\",\n      \"32\",\n      \"48\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"111\",\n      \"114\",\n      \"100\",\n      \"101\",\n      \"114\",\n      \"45\",\n      \"114\",\n      \"97\",\n      \"100\",\n      \"105\",\n      \"117\",\n      \"115\",\n      \"58\",\n      \"53\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"97\",\n      \"108\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"58\",\n      \"99\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"59\",\n      \"98\",\n      \"97\",\n      \"99\",\n      \"107\",\n      \"103\",\n      \"114\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"100\",\n      \"45\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"59\",\n      \"34\",\n      \"32\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"115\",\n      \"116\",\n      \"111\",\n      \"114\",\n      \"121\",\n      \"47\",\n      \"51\",\n      \"55\",\n      \"55\",\n      \"49\",\n      \"53\",\n      \"55\",\n      \"48\",\n      \"49\",\n      \"55\",\n      \"49\",\n      \"51\",\n      \"51\",\n      \"56\",\n      \"55\",\n      \"51\",\n      \"56\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"48\",\n      \"51\",\n      \"56\",\n      \"63\",\n      \"108\",\n      \"111\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"49\",\n      \"34\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"59\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"32\",\n      \"35\",\n      \"102\",\n      \"102\",\n      \"102\",\n      \"59\",\n      \"100\",\n      \"105\",\n      \"115\",\n      \"112\",\n      \"108\",\n      \"97\",\n      \"121\",\n      \"58\",\n      \"98\",\n      \"108\",\n      \"111\",\n      \"99\",\n      \"107\",\n      \"59\",\n      \"119\",\n      \"105\",\n      \"100\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"116\",\n      \"104\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"48\",\n      \"37\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"67\",\n      \"111\",\n      \"109\",\n      \"109\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"98\",\n      \"111\",\n      \"100\",\n      \"121\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"97\",\n      \"98\",\n      \"108\",\n      \"101\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"100\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"114\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"98\",\n      \"111\",\n      \"100\",\n      \"121\",\n      \"62\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"116\",\n      \"97\",\n      \"98\",\n      \"108\",\n      \"101\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"54\",\n      \"66\",\n      \"54\",\n      \"69\",\n      \"55\",\n      \"54\",\n      \"59\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"50\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"111\",\n      \"114\",\n      \"100\",\n      \"101\",\n      \"114\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"32\",\n      \"49\",\n      \"112\",\n      \"120\",\n      \"32\",\n      \"100\",\n      \"111\",\n      \"116\",\n      \"116\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"35\",\n      \"99\",\n      \"99\",\n      \"99\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"67\",\n      \"111\",\n      \"109\",\n      \"112\",\n      \"108\",\n      \"101\",\n      \"116\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"118\",\n      \"105\",\n      \"97\",\n      \"32\",\n      \"121\",\n      \"111\",\n      \"117\",\n      \"114\",\n      \"32\",\n      \"86\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"32\",\n      \"98\",\n      \"97\",\n      \"108\",\n      \"97\",\n      \"110\",\n      \"99\",\n      \"101\",\n      \"46\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"98\",\n      \"114\",\n      \"32\",\n      \"47\",\n      \"62\",\n      \"60\",\n      \"98\",\n      \"114\",\n      \"32\",\n      \"47\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"80\",\n      \"97\",\n      \"121\",\n      \"109\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"73\",\n      \"68\",\n      \"58\",\n      \"32\",\n      \"51\",\n      \"55\",\n      \"55\",\n      \"49\",\n      \"53\",\n      \"55\",\n      \"48\",\n      \"49\",\n      \"55\",\n      \"48\",\n      \"53\",\n      \"51\",\n      \"51\",\n      \"49\",\n      \"56\",\n      \"55\",\n      \"55\",\n      \"52\",\n      \"54\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"54\",\n      \"66\",\n      \"54\",\n      \"69\",\n      \"55\",\n      \"54\",\n      \"59\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"50\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"111\",\n      \"114\",\n      \"100\",\n      \"101\",\n      \"114\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"32\",\n      \"49\",\n      \"112\",\n      \"120\",\n      \"32\",\n      \"100\",\n      \"111\",\n      \"116\",\n      \"116\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"35\",\n      \"99\",\n      \"99\",\n      \"99\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"119\",\n      \"105\",\n      \"100\",\n      \"116\",\n      \"104\",\n      \"58\",\n      \"53\",\n      \"48\",\n      \"37\",\n      \"59\",\n      \"32\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"58\",\n      \"53\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"97\",\n      \"108\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"58\",\n      \"99\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"111\",\n      \"114\",\n      \"100\",\n      \"101\",\n      \"114\",\n      \"45\",\n      \"114\",\n      \"97\",\n      \"100\",\n      \"105\",\n      \"117\",\n      \"115\",\n      \"58\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"53\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"97\",\n      \"99\",\n      \"107\",\n      \"103\",\n      \"114\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"100\",\n      \"45\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"101\",\n      \"114\",\n      \"114\",\n      \"97\",\n      \"108\",\n      \"47\",\n      \"105\",\n      \"110\",\n      \"118\",\n      \"105\",\n      \"116\",\n      \"101\",\n      \"63\",\n      \"99\",\n      \"97\",\n      \"109\",\n      \"112\",\n      \"97\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"95\",\n      \"115\",\n      \"101\",\n      \"114\",\n      \"118\",\n      \"105\",\n      \"99\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"101\",\n      \"109\",\n      \"97\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"105\",\n      \"108\",\n      \"38\",\n      \"99\",\n      \"97\",\n      \"109\",\n      \"112\",\n      \"97\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"95\",\n      \"116\",\n      \"101\",\n      \"109\",\n      \"112\",\n      \"108\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"112\",\n      \"97\",\n      \"121\",\n      \"109\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"46\",\n      \"115\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"34\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"59\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"32\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"48\",\n      \"59\",\n      \"32\",\n      \"100\",\n      \"105\",\n      \"115\",\n      \"112\",\n      \"108\",\n      \"97\",\n      \"121\",\n      \"58\",\n      \"98\",\n      \"108\",\n      \"111\",\n      \"99\",\n      \"107\",\n      \"59\",\n      \"32\",\n      \"119\",\n      \"105\",\n      \"100\",\n      \"116\",\n      \"104\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"48\",\n      \"37\",\n      \"59\",\n      \"32\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"50\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"52\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"102\",\n      \"102\",\n      \"102\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"73\",\n      \"110\",\n      \"118\",\n      \"105\",\n      \"116\",\n      \"101\",\n      \"32\",\n      \"70\",\n      \"114\",\n      \"105\",\n      \"101\",\n      \"110\",\n      \"100\",\n      \"115\",\n      \"33\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"98\",\n      \"111\",\n      \"116\",\n      \"116\",\n      \"111\",\n      \"109\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"105\",\n      \"100\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"95\",\n      \"114\",\n      \"101\",\n      \"99\",\n      \"101\",\n      \"105\",\n      \"112\",\n      \"116\",\n      \"95\",\n      \"100\",\n      \"105\",\n      \"115\",\n      \"99\",\n      \"108\",\n      \"111\",\n      \"115\",\n      \"117\",\n      \"114\",\n      \"101\",\n      \"115\",\n      \"34\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"49\",\n      \"49\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"120\",\n      \"59\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"98\",\n      \"111\",\n      \"114\",\n      \"100\",\n      \"101\",\n      \"114\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"32\",\n      \"49\",\n      \"112\",\n      \"120\",\n      \"32\",\n      \"100\",\n      \"111\",\n      \"116\",\n      \"116\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"35\",\n      \"99\",\n      \"99\",\n      \"99\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"70\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"97\",\n      \"110\",\n      \"121\",\n      \"32\",\n      \"105\",\n      \"115\",\n      \"115\",\n      \"117\",\n      \"101\",\n      \"115\",\n      \"44\",\n      \"32\",\n      \"105\",\n      \"110\",\n      \"99\",\n      \"108\",\n      \"117\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"32\",\n      \"116\",\n      \"104\",\n      \"101\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"99\",\n      \"105\",\n      \"112\",\n      \"105\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"110\",\n      \"111\",\n      \"116\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"99\",\n      \"101\",\n      \"105\",\n      \"118\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"32\",\n      \"102\",\n      \"117\",\n      \"110\",\n      \"100\",\n      \"115\",\n      \"44\",\n      \"32\",\n      \"112\",\n      \"108\",\n      \"101\",\n      \"97\",\n      \"115\",\n      \"101\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"97\",\n      \"99\",\n      \"116\",\n      \"32\",\n      \"117\",\n      \"115\",\n      \"32\",\n      \"97\",\n      \"116\",\n      \"32\",\n      \"115\",\n      \"117\",\n      \"112\",\n      \"112\",\n      \"111\",\n      \"114\",\n      \"116\",\n      \"64\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"32\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"99\",\n      \"97\",\n      \"108\",\n      \"108\",\n      \"32\",\n      \"49\",\n      \"45\",\n      \"56\",\n      \"53\",\n      \"53\",\n      \"45\",\n      \"56\",\n      \"49\",\n      \"50\",\n      \"45\",\n      \"52\",\n      \"52\",\n      \"51\",\n      \"48\",\n      \"46\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"83\",\n      \"101\",\n      \"101\",\n      \"32\",\n      \"111\",\n      \"117\",\n      \"114\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"59\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"34\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"108\",\n      \"101\",\n      \"103\",\n      \"97\",\n      \"108\",\n      \"47\",\n      \"114\",\n      \"101\",\n      \"103\",\n      \"117\",\n      \"108\",\n      \"97\",\n      \"116\",\n      \"111\",\n      \"114\",\n      \"121\",\n      \"45\",\n      \"97\",\n      \"103\",\n      \"101\",\n      \"110\",\n      \"99\",\n      \"121\",\n      \"45\",\n      \"99\",\n      \"97\",\n      \"108\",\n      \"105\",\n      \"102\",\n      \"111\",\n      \"114\",\n      \"110\",\n      \"105\",\n      \"97\",\n      \"34\",\n      \"62\",\n      \"100\",\n      \"105\",\n      \"115\",\n      \"99\",\n      \"108\",\n      \"111\",\n      \"115\",\n      \"117\",\n      \"114\",\n      \"101\",\n      \"115\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"32\",\n      \"102\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"109\",\n      \"111\",\n      \"114\",\n      \"101\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"105\",\n      \"110\",\n      \"102\",\n      \"111\",\n      \"114\",\n      \"109\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"46\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"80\",\n      \"108\",\n      \"101\",\n      \"97\",\n      \"115\",\n      \"101\",\n      \"32\",\n      \"100\",\n      \"111\",\n      \"32\",\n      \"110\",\n      \"111\",\n      \"116\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"112\",\n      \"108\",\n      \"121\",\n      \"32\",\n      \"100\",\n      \"105\",\n      \"114\",\n      \"101\",\n      \"99\",\n      \"116\",\n      \"108\",\n      \"121\",\n      \"32\",\n      \"116\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"111\",\n      \"32\",\n      \"116\",\n      \"104\",\n      \"105\",\n      \"115\",\n      \"32\",\n      \"101\",\n      \"109\",\n      \"97\",\n      \"105\",\n      \"108\",\n      \"46\",\n      \"32\",\n      \"70\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"109\",\n      \"111\",\n      \"114\",\n      \"101\",\n      \"32\",\n      \"97\",\n      \"115\",\n      \"115\",\n      \"105\",\n      \"115\",\n      \"116\",\n      \"97\",\n      \"110\",\n      \"99\",\n      \"101\",\n      \"44\",\n      \"32\",\n      \"118\",\n      \"105\",\n      \"115\",\n      \"105\",\n      \"116\",\n      \"32\",\n      \"111\",\n      \"117\",\n      \"114\",\n      \"32\",\n      \"72\",\n      \"101\",\n      \"108\",\n      \"112\",\n      \"32\",\n      \"67\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"32\",\n      \"97\",\n      \"116\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"59\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"34\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"104\",\n      \"101\",\n      \"108\",\n      \"112\",\n      \"46\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"34\",\n      \"62\",\n      \"104\",\n      \"101\",\n      \"108\",\n      \"112\",\n      \"46\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"46\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"84\",\n      \"104\",\n      \"105\",\n      \"115\",\n      \"32\",\n      \"112\",\n      \"97\",\n      \"121\",\n      \"109\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"119\",\n      \"105\",\n      \"108\",\n      \"108\",\n      \"32\",\n      \"98\",\n      \"101\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"118\",\n      \"105\",\n      \"101\",\n      \"119\",\n      \"101\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"100\",\n      \"32\",\n      \"102\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"112\",\n      \"108\",\n      \"105\",\n      \"97\",\n      \"110\",\n      \"99\",\n      \"101\",\n      \"32\",\n      \"119\",\n      \"105\",\n      \"116\",\n      \"104\",\n      \"32\",\n      \"111\",\n      \"117\",\n      \"114\",\n      \"32\",\n      \"85\",\n      \"115\",\n      \"101\",\n      \"114\",\n      \"32\",\n      \"65\",\n      \"103\",\n      \"114\",\n      \"101\",\n      \"101\",\n      \"109\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"97\",\n      \"110\",\n      \"100\",\n      \"32\",\n      \"105\",\n      \"102\",\n      \"32\",\n      \"119\",\n      \"101\",\n      \"32\",\n      \"100\",\n      \"101\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"109\",\n      \"105\",\n      \"110\",\n      \"101\",\n      \"32\",\n      \"116\",\n      \"104\",\n      \"97\",\n      \"116\",\n      \"32\",\n      \"116\",\n      \"104\",\n      \"101\",\n      \"114\",\n      \"101\",\n      \"32\",\n      \"105\",\n      \"115\",\n      \"32\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"97\",\n      \"32\",\n      \"118\",\n      \"105\",\n      \"111\",\n      \"108\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"32\",\n      \"98\",\n      \"121\",\n      \"32\",\n      \"101\",\n      \"105\",\n      \"116\",\n      \"104\",\n      \"101\",\n      \"114\",\n      \"32\",\n      \"112\",\n      \"97\",\n      \"114\",\n      \"116\",\n      \"121\",\n      \"44\",\n      \"32\",\n      \"105\",\n      \"116\",\n      \"32\",\n      \"109\",\n      \"97\",\n      \"121\",\n      \"32\",\n      \"98\",\n      \"101\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"118\",\n      \"101\",\n      \"114\",\n      \"115\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"121\",\n      \"111\",\n      \"117\",\n      \"114\",\n      \"32\",\n      \"97\",\n      \"98\",\n      \"105\",\n      \"108\",\n      \"105\",\n      \"116\",\n      \"121\",\n      \"32\",\n      \"116\",\n      \"111\",\n      \"32\",\n      \"116\",\n      \"114\",\n      \"97\",\n      \"110\",\n      \"115\",\n      \"102\",\n      \"101\",\n      \"114\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"116\",\n      \"111\",\n      \"32\",\n      \"121\",\n      \"111\",\n      \"117\",\n      \"114\",\n      \"32\",\n      \"98\",\n      \"97\",\n      \"110\",\n      \"107\",\n      \"32\",\n      \"97\",\n      \"99\",\n      \"99\",\n      \"111\",\n      \"117\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"109\",\n      \"97\",\n      \"121\",\n      \"32\",\n      \"98\",\n      \"101\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"115\",\n      \"116\",\n      \"114\",\n      \"105\",\n      \"99\",\n      \"116\",\n      \"101\",\n      \"100\",\n      \"46\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"112\",\n      \"97\",\n      \"100\",\n      \"100\",\n      \"105\",\n      \"110\",\n      \"103\",\n      \"58\",\n      \"49\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"32\",\n      \"49\",\n      \"53\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"32\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"32\",\n      \"35\",\n      \"54\",\n      \"66\",\n      \"54\",\n      \"69\",\n      \"55\",\n      \"54\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"97\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"108\",\n      \"105\",\n      \"103\",\n      \"110\",\n      \"58\",\n      \"32\",\n      \"99\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"101\",\n      \"114\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"32\",\n      \"35\",\n      \"54\",\n      \"66\",\n      \"54\",\n      \"69\",\n      \"55\",\n      \"54\",\n      \"59\",\n      \"32\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"32\",\n      \"53\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"86\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"32\",\n      \"105\",\n      \"115\",\n      \"32\",\n      \"97\",\n      \"32\",\n      \"115\",\n      \"101\",\n      \"114\",\n      \"118\",\n      \"105\",\n      \"99\",\n      \"101\",\n      \"32\",\n      \"111\",\n      \"102\",\n      \"32\",\n      \"80\",\n      \"97\",\n      \"121\",\n      \"80\",\n      \"97\",\n      \"108\",\n      \"44\",\n      \"32\",\n      \"73\",\n      \"110\",\n      \"99\",\n      \"46\",\n      \"44\",\n      \"32\",\n      \"97\",\n      \"32\",\n      \"108\",\n      \"105\",\n      \"99\",\n      \"101\",\n      \"110\",\n      \"115\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"112\",\n      \"114\",\n      \"111\",\n      \"118\",\n      \"105\",\n      \"100\",\n      \"101\",\n      \"114\",\n      \"32\",\n      \"111\",\n      \"102\",\n      \"32\",\n      \"109\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"121\",\n      \"32\",\n      \"116\",\n      \"114\",\n      \"97\",\n      \"110\",\n      \"115\",\n      \"102\",\n      \"101\",\n      \"114\",\n      \"32\",\n      \"115\",\n      \"101\",\n      \"114\",\n      \"118\",\n      \"105\",\n      \"99\",\n      \"101\",\n      \"115\",\n      \"46\",\n      \"32\",\n      \"65\",\n      \"108\",\n      \"108\",\n      \"32\",\n      \"109\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"121\",\n      \"32\",\n      \"116\",\n      \"114\",\n      \"97\",\n      \"110\",\n      \"115\",\n      \"109\",\n      \"105\",\n      \"115\",\n      \"115\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"32\",\n      \"105\",\n      \"115\",\n      \"32\",\n      \"112\",\n      \"114\",\n      \"111\",\n      \"118\",\n      \"105\",\n      \"100\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"98\",\n      \"121\",\n      \"32\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"80\",\n      \"97\",\n      \"121\",\n      \"80\",\n      \"97\",\n      \"108\",\n      \"44\",\n      \"32\",\n      \"73\",\n      \"110\",\n      \"99\",\n      \"46\",\n      \"32\",\n      \"112\",\n      \"117\",\n      \"114\",\n      \"115\",\n      \"117\",\n      \"97\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"116\",\n      \"111\",\n      \"32\",\n      \"60\",\n      \"97\",\n      \"32\",\n      \"104\",\n      \"114\",\n      \"101\",\n      \"102\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"104\",\n      \"116\",\n      \"116\",\n      \"112\",\n      \"115\",\n      \"58\",\n      \"47\",\n      \"47\",\n      \"118\",\n      \"101\",\n      \"110\",\n      \"109\",\n      \"111\",\n      \"46\",\n      \"99\",\n      \"111\",\n      \"109\",\n      \"47\",\n      \"108\",\n      \"101\",\n      \"103\",\n      \"97\",\n      \"108\",\n      \"47\",\n      \"117\",\n      \"115\",\n      \"45\",\n      \"108\",\n      \"105\",\n      \"99\",\n      \"101\",\n      \"110\",\n      \"115\",\n      \"101\",\n      \"115\",\n      \"47\",\n      \"34\",\n      \"32\",\n      \"115\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"35\",\n      \"48\",\n      \"48\",\n      \"55\",\n      \"52\",\n      \"68\",\n      \"69\",\n      \"59\",\n      \"32\",\n      \"116\",\n      \"101\",\n      \"120\",\n      \"116\",\n      \"45\",\n      \"100\",\n      \"101\",\n      \"99\",\n      \"111\",\n      \"114\",\n      \"97\",\n      \"116\",\n      \"105\",\n      \"111\",\n      \"110\",\n      \"58\",\n      \"110\",\n      \"111\",\n      \"110\",\n      \"101\",\n      \"34\",\n      \"62\",\n      \"80\",\n      \"97\",\n      \"121\",\n      \"80\",\n      \"97\",\n      \"108\",\n      \"44\",\n      \"32\",\n      \"73\",\n      \"110\",\n      \"99\",\n      \"46\",\n      \"61\",\n      \"69\",\n      \"50\",\n      \"61\",\n      \"56\",\n      \"48\",\n      \"61\",\n      \"57\",\n      \"57\",\n      \"115\",\n      \"32\",\n      \"108\",\n      \"105\",\n      \"99\",\n      \"101\",\n      \"110\",\n      \"115\",\n      \"101\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"115\",\n      \"60\",\n      \"47\",\n      \"97\",\n      \"62\",\n      \"46\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"112\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"32\",\n      \"35\",\n      \"54\",\n      \"66\",\n      \"54\",\n      \"69\",\n      \"55\",\n      \"54\",\n      \"59\",\n      \"32\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"32\",\n      \"49\",\n      \"52\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"80\",\n      \"97\",\n      \"121\",\n      \"80\",\n      \"97\",\n      \"108\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"105\",\n      \"115\",\n      \"32\",\n      \"108\",\n      \"111\",\n      \"99\",\n      \"97\",\n      \"116\",\n      \"101\",\n      \"100\",\n      \"32\",\n      \"97\",\n      \"116\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"112\",\n      \"62\",\n      \"60\",\n      \"112\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"99\",\n      \"111\",\n      \"108\",\n      \"111\",\n      \"114\",\n      \"58\",\n      \"32\",\n      \"35\",\n      \"54\",\n      \"66\",\n      \"54\",\n      \"69\",\n      \"55\",\n      \"54\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"50\",\n      \"50\",\n      \"49\",\n      \"49\",\n      \"32\",\n      \"78\",\n      \"111\",\n      \"114\",\n      \"116\",\n      \"104\",\n      \"32\",\n      \"70\",\n      \"105\",\n      \"114\",\n      \"115\",\n      \"116\",\n      \"32\",\n      \"83\",\n      \"116\",\n      \"114\",\n      \"101\",\n      \"101\",\n      \"116\",\n      \"44\",\n      \"32\",\n      \"83\",\n      \"97\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"110\",\n      \"32\",\n      \"74\",\n      \"111\",\n      \"115\",\n      \"101\",\n      \"44\",\n      \"32\",\n      \"67\",\n      \"65\",\n      \"32\",\n      \"57\",\n      \"53\",\n      \"49\",\n      \"51\",\n      \"49\",\n      \"60\",\n      \"47\",\n      \"112\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"112\",\n      \"58\",\n      \"32\",\n      \"53\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"32\",\n      \"115\",\n      \"116\",\n      \"121\",\n      \"108\",\n      \"101\",\n      \"61\",\n      \"51\",\n      \"68\",\n      \"34\",\n      \"102\",\n      \"111\",\n      \"110\",\n      \"116\",\n      \"45\",\n      \"115\",\n      \"105\",\n      \"122\",\n      \"101\",\n      \"58\",\n      \"32\",\n      \"115\",\n      \"109\",\n      \"97\",\n      \"108\",\n      \"108\",\n      \"101\",\n      \"114\",\n      \"59\",\n      \"32\",\n      \"109\",\n      \"97\",\n      \"114\",\n      \"103\",\n      \"105\",\n      \"110\",\n      \"45\",\n      \"116\",\n      \"111\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"112\",\n      \"58\",\n      \"32\",\n      \"50\",\n      \"48\",\n      \"112\",\n      \"120\",\n      \"59\",\n      \"34\",\n      \"62\",\n      \"70\",\n      \"111\",\n      \"114\",\n      \"32\",\n      \"115\",\n      \"101\",\n      \"99\",\n      \"117\",\n      \"114\",\n      \"105\",\n      \"116\",\n      \"121\",\n      \"32\",\n      \"114\",\n      \"101\",\n      \"97\",\n      \"115\",\n      \"111\",\n      \"110\",\n      \"115\",\n      \"44\",\n      \"32\",\n      \"121\",\n      \"111\",\n      \"117\",\n      \"32\",\n      \"99\",\n      \"97\",\n      \"110\",\n      \"110\",\n      \"111\",\n      \"116\",\n      \"32\",\n      \"117\",\n      \"110\",\n      \"115\",\n      \"117\",\n      \"98\",\n      \"115\",\n      \"99\",\n      \"114\",\n      \"105\",\n      \"98\",\n      \"101\",\n      \"32\",\n      \"102\",\n      \"114\",\n      \"111\",\n      \"109\",\n      \"32\",\n      \"112\",\n      \"97\",\n      \"121\",\n      \"109\",\n      \"101\",\n      \"110\",\n      \"116\",\n      \"32\",\n      \"101\",\n      \"109\",\n      \"97\",\n      \"105\",\n      \"108\",\n      \"115\",\n      \"46\",\n      \"61\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"61\",\n      \"50\",\n      \"48\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"100\",\n      \"105\",\n      \"118\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"32\",\n      \"60\",\n      \"47\",\n      \"98\",\n      \"111\",\n      \"100\",\n      \"121\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"60\",\n      \"47\",\n      \"104\",\n      \"116\",\n      \"109\",\n      \"108\",\n      \"62\",\n      \"13\",\n      \"10\",\n      \"13\",\n      \"10\",\n      \"45\",\n      \"45\",\n      \"45\",\n      \"45\",\n      \"45\",\n      \"45\",\n      \"61\",\n      \"95\",\n      \"80\",\n      \"97\",\n      \"114\",\n      \"116\",\n      \"95\",\n      \"50\",\n      \"54\",\n      \"53\",\n      \"55\",\n      \"48\",\n      \"54\",\n      \"56\",\n      \"95\",\n      \"49\",\n      \"52\",\n      \"48\",\n      \"55\",\n      \"55\",\n      \"49\",\n      \"57\",\n      \"51\",\n      \"50\",\n      \"54\",\n      \"46\",\n      \"49\",\n      \"54\",\n      \"56\",\n      \"48\",\n      \"51\",\n      \"55\",\n      \"52\",\n      \"50\",\n      \"48\",\n      \"49\",\n      \"49\",\n      \"56\",\n      \"53\",\n      \"45\",\n      \"45\",\n      \"13\",\n      \"10\",\n      \"128\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"1\",\n      \"6\",\n      \"48\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\",\n      \"0\"\n  ],\n  \"in_body_len_padded_bytes\":\"6400\",\n  \"venmo_user_id_idx\":\"605\",\n  \"venmo_mm_id_idx\":\"139\",\n  \"venmo_message_idx\":\"804\",\n  \"body_hash_idx\":\"614\"\n}"
  },
  {
    "path": "client/src/helpers/keccack.ts",
    "content": "import { BigNumber, ethers } from \"ethers\";\n\n\nconst abiCoder = new ethers.utils.AbiCoder();\n\nexport const keccak256 = (inputString: string): string => {\n  return ethers.utils.solidityKeccak256([\"string\"], [inputString]);\n};\n\nexport const sha256 = (inputString: string): string => {\n  return ethers.utils.soliditySha256([\"string\"], [inputString]);\n};\n\nexport const calculateRevolutTagHash = (revTag: string): string => {\n  return BigNumber.from(ethers.utils.keccak256(abiCoder.encode([\"string\"], [revTag]))).toHexString();\n};\n"
  },
  {
    "path": "client/src/helpers/merkle.ts",
    "content": "import _ from \"lodash\";\nimport { poseidon } from \"./poseidonHash\";\nimport { CIRCOM_LEVELS } from \"./constants\";\n\nexport function buildMerkleTree(leaves: string[]): string[] {\n  const SIZE = leaves.length;\n  const res = _.times(2 * SIZE, () => \"0\");\n  for (let i = 0; i < SIZE; ++i) {\n    res[SIZE + i] = leaves[i];\n  }\n  for (let i = SIZE - 1; i > 0; --i) {\n    res[i] = poseidon([res[2 * i], res[2 * i + 1]]);\n  }\n  return res;\n}\n\nexport async function getMerkleProof(merkleTree: string[], leaf: string) {\n  const pathElements = [];\n  const pathIndices = [];\n  for (let idx = merkleTree.indexOf(leaf); idx > 1; idx = idx >> 1) {\n    pathElements.push(merkleTree[idx ^ 1]);\n    pathIndices.push(idx & 1);\n  }\n  while (pathElements.length < CIRCOM_LEVELS) {\n    pathElements.push(0);\n    pathIndices.push(0);\n  }\n  const root = merkleTree[1];\n  return {\n    leaf,\n    pathElements,\n    pathIndices,\n    root,\n  };\n}\n"
  },
  {
    "path": "client/src/helpers/messagEncryption.ts",
    "content": "import * as crypto from 'crypto';\nimport EthCrypto from 'eth-crypto';\n\n\nexport const generateAccountFromSignature = (signature: string): string => {\n  const hash = crypto.createHash('sha512');\n  hash.update(signature);\n\n  // console.log('Generated account hash from signature:');\n  // console.log(hash.digest('hex'));\n\n  return hash.digest('hex');\n}\n\nexport const getPublicKeyFromAccount = (account: string): string => {\n  const entropy = Buffer.from(account, 'utf-8');\n  const identity = EthCrypto.createIdentity(entropy);\n\n  // console.log('Generated identity:');\n  // console.log(identity);\n\n  return identity.publicKey;\n}\n\nexport async function encryptMessage(message: string, publicKey: string) {\n  const encrypted = await EthCrypto.encryptWithPublicKey(publicKey, message);\n  const encryptedString = EthCrypto.cipher.stringify(encrypted);\n\n  // console.log('Encrypted message:');\n  // console.log(encrypted);\n\n  return encryptedString;\n}\n\nexport async function decryptMessageWithAccount(encrypted: string, account: string) {\n  const entropy = Buffer.from(account, 'utf-8');\n  const privateKey = EthCrypto.createIdentity(entropy).privateKey;\n\n  const encryptedObject = EthCrypto.cipher.parse(encrypted);\n  const decrypted = EthCrypto.decryptWithPrivateKey(privateKey, encryptedObject);\n\n  // console.log('Decrypted message:');\n  // console.log(decrypted);\n\n  return decrypted;\n}\n"
  },
  {
    "path": "client/src/helpers/noop.ts",
    "content": "/** No-op function. Returns `null` to satisfy most React typings. */\nexport default function noop() {\n  return null\n}\n"
  },
  {
    "path": "client/src/helpers/notary.ts",
    "content": "export const NOTARY_VERIFICATION_SIGNING_KEY = process.env.NOTARY_VERIFICATION_SIGNING_KEY;\nif (!NOTARY_VERIFICATION_SIGNING_KEY) {\n    throw new Error(\"NOTARY_VERIFICATION_SIGNING_KEY environment variable is not defined.\");\n};\n"
  },
  {
    "path": "client/src/helpers/placeholderEmailBody.ts",
    "content": "// Placeholder in proof gen text area for example\nexport const PLACEHOLDER_EMAIL_BODY = `Delivered-To: vitalik.buterin@gmail.com\nReceived: by 2002:a05:6022:216:b0:44:1edc:81b1 with SMTP id 12345678910111;\n        Fri, 11 Aug 2023 10:25:07 -0700 (PDT)\nX-Google-Smtp-Source: AGHT+IHU6bYBYrCGfzu3O7JGwBE62vEKhcTt0xCSLiQib0n3lAqEgZga4AOf9YuzVNeAXVNHxdof\nX-Received: by 2002:ac8:5810:0:b0:403:b6d2:8dc4 with SMTP id g16-20020ac85810000000b00403b6d28dc4mr3292363qtg.34.1691774707601;\n        Fri, 11 Aug 2023 10:25:07 -0700 (PDT)\nARC-Seal: i=1; a=rsa-sha256; t=1691774707; cv=none;\n        d=google.com; s=arc-20160816;\n        b=iEWRb+U9GM+KvxCa1LqDhC1N65i/ZDmSB1A9vcDF6AWkMT33DAyYGh5Hk/gsWPHS0K\n         5XbPQ91lPHr8dVAknFGTfs/PTSAtFjO2yeTA7VnvLQB5fOTEJVz+6WOsqF2P+3wxAmno\n         uKlWNN5eU0vIrRHXQbBV7xXDpFqdbUPcACQZnQSwle52rXRBXgPTUNUgYYeyco7gI2Lq\n         iUpmcKoNbvzXraRsMQKhIZn3Z1hTCLtckshXJHqu4eVTGWBkaazF190+kaYJWuI0OtIj\n         +Y1APRSfG+c9FlqbIcNtJE1y2uuyDdXNS5LW1DG/r4fgtI0YqoGIJ3++JtiwvSQalmbi\n         KHOg==\nARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;\n        h=feedback-id:date:message-id:mime-version:subject:to:reply-to:from\n         :dkim-signature:dkim-signature;\n        bh=hgc1kKeOZgX+VHTOQy0FTyl/Q4TxfqC9YggInKgO62o=;\n        fh=F7aunlR3RVQ/hJTG8Jnp7C1WxWcrOKVS350ODhKBoSA=;\n        b=I6sllcsb+L3n8b6U+tOW/v50CkPW4t0RvJ9efyxvV1e51skRxGm6NAL5Ub+kIafuhC\n         KBQGjrNPd1PYK/Gqv0nphTRgbXl9WYZT52mSMbzfbxrHf4WS8LK6xg+wfn/EVyvQMJZ2\n         uMdcO2SL8TZSM92PFkf11234567891011121bkjU2K8/3x3F5l+jrmqgugQidkueOjN6\n         7hAbmQtNzzXC0+NdF8GfX1imz3J/ULtknWb1r/Z/lw/ddNYuSdD1mr3avYTuYgAo3pzm\n         Ni2/lwJPpKqQMfOakkqOFNVIbTgfp0nbu7G4XmGBzqk+/eUVk4XZJRmWb0Ehv5YIMPP7\n         2hJA==\n`;\n"
  },
  {
    "path": "client/src/helpers/poseidonHash.ts",
    "content": "// @ts-ignore\nimport { buildPoseidon } from \"circomlibjs\";\nimport { BigNumber } from \"ethers\";\n\nimport { ZERO } from '@helpers/constants'\n\n\nlet poseidonHasher: any;\nexport async function initializePoseidon() {\n  if (!poseidonHasher) {\n    poseidonHasher = await buildPoseidon();\n  }\n}\nexport const poseidon = (arr: (number | bigint | string)[]): string =>\n  poseidonHasher.F.toString(poseidonHasher(arr));\n\nexport const poseidonK = (ar: (number | bigint | string)[]): string => {\n  let cur: (number | bigint | string)[] = [];\n  for (const elt of ar) {\n    cur.push(elt);\n    if (cur.length === 16) {\n      cur = [poseidon(cur)];\n    }\n  }\n  if (cur.length === 1) return `${cur[0]}`;\n  while (cur.length < 16) cur.push(0);\n  return poseidon(cur);\n};\n\nexport const isProvidedIdEqualToRegistration = async (input: string, registrationHash: string): Promise<boolean> => {\n  const venmoHashFromInput = await calculateVenmoIdHash(input);\n  const venmoHashFromInputNumber = BigNumber.from(venmoHashFromInput);\n\n  const existingRegistrationNumber = BigNumber.from(registrationHash);\n\n  return existingRegistrationNumber.eq(venmoHashFromInputNumber);\n}\n\nexport const calculateVenmoIdHash = async (venmoId: string): Promise<string> => {\n  const poseidon = await buildPoseidon();\n\n  const packedVenmoId = calculatePackedVenmoId(venmoId);\n\n  const bigIntResult = BigInt(poseidon.F.toString(poseidon(packedVenmoId)));\n  return \"0x\" + bigIntResult.toString(16);\n}\n\nexport const calculatePackedVenmoId = (venmoId: string): [bigint, bigint, bigint] => {\n  const venmoIdArray: number[] = venmoId.split('').map(char => char.charCodeAt(0));\n\n  // Pad with zeros until length is 21\n  while (venmoIdArray.length < 21) {\n    venmoIdArray.push(0);\n  }\n\n  return Bytes2Packed(7, venmoIdArray);\n};\n\nexport const calculatePackedUPIId = (venmoId: string): [bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint] => {\n  const venmoIdArray: number[] = venmoId.split('').map(char => char.charCodeAt(0));\n\n  // Pad with zeros until length is 21\n  while (venmoIdArray.length < 56) {\n    venmoIdArray.push(0);\n  }\n\n  return Bytes2Packed8(7, venmoIdArray);\n};\n\nfunction Bytes2Packed(n: number, inArr: number[]) {\n  let index = 0;\n  const out: [bigint, bigint, bigint] = [ZERO, ZERO, ZERO];\n\n  for (let i = 0; i < inArr.length; i += n) {\n    let packedValue = BigInt(0);\n    for (let k = 0; k < n; k++) {\n      if (i + k < inArr.length) {\n        packedValue += BigInt(inArr[i + k]) * (BigInt(2) ** BigInt(k * 8));\n      }\n    }\n\n    out[index] = BigInt(packedValue);\n    index++\n  }\n\n  return out;\n}\nfunction Bytes2Packed8(n: number, inArr: number[]) {\n  let index = 0;\n  const out: [bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint] = [ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO];\n\n  for (let i = 0; i < inArr.length; i += n) {\n    let packedValue = BigInt(0);\n    for (let k = 0; k < n; k++) {\n      if (i + k < inArr.length) {\n        packedValue += BigInt(inArr[i + k]) * (BigInt(2) ** BigInt(k * 8));\n      }\n    }\n\n    out[index] = BigInt(packedValue);\n    index++\n  }\n\n  return out;\n}\n\nexport const unpackPackedVenmoId = (packedVenmoId: [bigint, bigint, bigint, bigint, bigint]): string => {\n  const n = 7;\n  let venmoIdArray: number[] = [];\n\n  for (const packedValue of packedVenmoId) {\n    let bigIntValue = BigInt(packedValue.toString());\n\n    for (let k = 0; k < n; k++) {\n      venmoIdArray.push(Number(bigIntValue & BigInt(0xFF)));\n      bigIntValue >>= BigInt(8);\n    }\n  }\n\n  // Remove padding zeros and convert back to string\n  venmoIdArray = venmoIdArray.reverse();\n  while (venmoIdArray[venmoIdArray.length - 1] === 0) {\n    venmoIdArray.pop();\n  }\n  venmoIdArray = venmoIdArray.reverse();\n\n  return String.fromCharCode(...venmoIdArray);\n};\n\nexport const unpackPackedUpiId = (packedUpiId: [bigint, bigint, bigint, bigint, bigint]): string => {\n  const n = 7;\n  let upiIdArray: number[] = [];\n\n  for (const packedValue of packedUpiId) {\n    let bigIntValue = BigInt(packedValue.toString());\n\n    for (let k = 0; k < n; k++) {\n      upiIdArray.push(Number(bigIntValue & BigInt(0xFF)));\n      bigIntValue >>= BigInt(8);\n    }\n  }\n\n  // Remove padding zeros and convert back to string\n  const firstNonZeroIndex = upiIdArray.reverse().findIndex(value => value !== 0);\n  if (firstNonZeroIndex !== -1) {\n    upiIdArray = upiIdArray.slice(firstNonZeroIndex).reverse();\n  }\n\n  return String.fromCharCode(...upiIdArray);\n};\n"
  },
  {
    "path": "client/src/helpers/rsa.ts",
    "content": "\nfunction modExp(a: bigint, b: number, c: bigint): bigint {\n  let res = 1n;\n  for (let i = 0; i < 30; ++i) {\n    if ((b >> i) & 1) res = (res * a) % c;\n    a = (a * a) % c;\n  }\n  return res;\n}\n\n\nexport function verifyRSA(sig: bigint, modulus: bigint): bigint {\n  return modExp(sig, 65537, modulus);\n}"
  },
  {
    "path": "client/src/helpers/shaHash.ts",
    "content": "import { createHash } from \"crypto\";\nimport { assert, int64toBytes, int8toBytes, mergeUInt8Arrays } from \"./binaryFormat\";\n// const { webcrypto, KeyObject } = await import('crypto');\n// const { subtle } = webcrypto;\nimport { Hash } from \"./fast-sha256\";\n\nexport async function shaHash(str: Uint8Array) {\n  return createHash(\"sha256\").update(str).digest();\n}\n\nexport async function partialSha(msg: Uint8Array, msgLen: number): Promise<Uint8Array> {\n  const shaGadget = new Hash();\n  return await shaGadget.update(msg, msgLen).cacheState();\n}\n\n// Puts an end selector, a bunch of 0s, then the length, then fill the rest with 0s.\nexport async function sha256Pad(prehash_prepad_m: Uint8Array, maxShaBytes: number): Promise<[Uint8Array, number]> {\n  let length_bits = prehash_prepad_m.length * 8; // bytes to bits\n  let length_in_bytes = int64toBytes(length_bits);\n  prehash_prepad_m = mergeUInt8Arrays(prehash_prepad_m, int8toBytes(2 ** 7)); // Add the 1 on the end, length 505\n  // while ((prehash_prepad_m.length * 8 + length_in_bytes.length * 8) % 512 !== 0) {\n  while ((prehash_prepad_m.length * 8 + length_in_bytes.length * 8) % 512 !== 0) {\n    prehash_prepad_m = mergeUInt8Arrays(prehash_prepad_m, int8toBytes(0));\n  }\n  prehash_prepad_m = mergeUInt8Arrays(prehash_prepad_m, length_in_bytes);\n  assert((prehash_prepad_m.length * 8) % 512 === 0, \"Padding did not complete properly!\");\n  let messageLen = prehash_prepad_m.length;\n  while (prehash_prepad_m.length < maxShaBytes) {\n    prehash_prepad_m = mergeUInt8Arrays(prehash_prepad_m, int64toBytes(0));\n  }\n  assert(\n    prehash_prepad_m.length === maxShaBytes,\n    `Padding to max length did not complete properly! Your padded message is ${prehash_prepad_m.length} long but max is ${maxShaBytes}!`\n  );\n  return [prehash_prepad_m, messageLen];\n}\n"
  },
  {
    "path": "client/src/helpers/sshFormat.ts",
    "content": "import { stringToBytes } from \"./binaryFormat\";\nimport atob from \"atob\";\n\nfunction bytesToInt(bytes: Uint8Array) {\n  return bytes[3] + 256 * (bytes[2] + 256 * (bytes[1] + 256 * bytes[0]));\n}\n\nfunction unpackSshBytes(bytes: Uint8Array, numStrings: number) {\n  const result = [];\n  let offset = 0;\n  for (let i = 0; i < numStrings; ++i) {\n    const lenBytes = bytes.slice(offset, offset + 4);\n    // first 4 bytes is length in big endian\n    const len = bytesToInt(lenBytes);\n    const str = bytes.slice(offset + 4, offset + 4 + len);\n    result.push(str);\n    offset += 4 + len;\n  }\n  if (offset !== bytes.length) {\n    throw new Error(\"Error unpacking; offset is not at end of bytes\");\n  }\n  return result;\n}\n\nexport function getRawSignature(signature: string) {\n  // 0. strip out \"armor\" headers (lines that start with -----)\n  // 1. base64 -d\n  // 2. skipping first 10 bytes (for MAGIC_PREAMBLE and SIG_VERSION), unpack into 5 strings: publickey, namespace, reserved, hash_algorithm, signature\n  // 3. convert public key and signature to bignum\n\n  // #define MAGIC_PREAMBLE \"SSHSIG\"\n  // byte[6]   MAGIC_PREAMBLE\n  // string    namespace\n  // string    reserved\n  // string    hash_algorithm\n  // string    H(payload1)\n\n  const encodedPart = signature\n    .split(\"\\n\")\n    .filter((line) => !line.includes(\"SSH SIGNATURE\"))\n    .join(\"\");\n  const bytes = stringToBytes(atob(encodedPart));\n  const strings = unpackSshBytes(bytes.slice(10), 5);\n  const [pubKeyEncoded, namespace, , hash_algorithm, rawSignatureEncoded] = strings;\n\n  // decrypt pub key https://github.dev/openssh/openssh-portable/blob/4bbe815ba974b4fd89cc3fc3e3ef1be847a0befe/sshsig.c#L203-L204\n  // https://github.dev/openssh/openssh-portable/blob/4bbe815ba974b4fd89cc3fc3e3ef1be847a0befe/sshkey.c#L828-L829\n  const pubKeyParts = unpackSshBytes(pubKeyEncoded, 3);\n  const pubSSHKeyStr = Array.prototype.map\n    .call(pubKeyEncoded, function (ch) {\n      return String.fromCharCode(ch);\n    })\n    .join(\"\");\n  // decrypt signature https://github.dev/openssh/openssh-portable/blob/4bbe815ba974b4fd89cc3fc3e3ef1be847a0befe/ssh-rsa.c#L223-L224\n  const rawSigParts = unpackSshBytes(rawSignatureEncoded, 2);\n  const rawSignature = rawSigParts[1];\n  return {\n    rawSignature,\n    namespace,\n    hash_algorithm,\n    pubKeyEncoded,\n    pubKeyParts,\n    pubSSHKeyStr,\n  } as const;\n}\n\nexport function sshSignatureToPubKey(signature: string) {\n  try {\n    const encodedPart = signature\n      .split(\"\\n\")\n      .filter((line) => !line.includes(\"SSH SIGNATURE\"))\n      .join(\"\");\n    const bytes = stringToBytes(atob(encodedPart));\n    const strings = unpackSshBytes(bytes.slice(10), 5);\n    const [\n      pubKeyEncoded,\n      // namespace,\n      // reserved,\n      // hash_algorithm,\n      // rawSignatureEncoded,\n    ] = strings;\n\n    const pubKeyParts = unpackSshBytes(pubKeyEncoded, 3);\n\n    const pubSSHKeyStr: string = Array.prototype.map\n      .call(pubKeyEncoded, function (ch) {\n        return String.fromCharCode(ch);\n      })\n      .join(\"\");\n    const keytype = new TextDecoder().decode(pubKeyParts[0]);\n    if (keytype !== \"ssh-rsa\") {\n      return \"ERROR GRR\";\n    }\n    return keytype + \" \" + btoa(pubSSHKeyStr);\n  } catch (e) {\n    return \"\";\n  }\n}\n"
  },
  {
    "path": "client/src/helpers/strings/common.ts",
    "content": "export interface CommonStrings {\n  // Environment Banner\n  LOCAL_ENV_BANNER: string,\n  STAGING_TESTNET_ENV_BANNER: string,\n  STAGING_ENV_BANNER: string,\n  PRODUCTION_ENV_BANNER: string,\n\n  // Registration NFT Tooltip\n  REGISTRATION_NFT_TOOLTIP: string,\n\n  // Platform Selector Tooltips\n  PLATFORM_INSTRUCTIONS_MAIL_TOOLTIP: string,\n  PLATFORM_INSTRUCTIONS_BROWSER_TOOLTIP: string,\n\n  // Mail Input\n  INPUT_MODE_TOOLTIP: string,\n  EMAIL_TOOLTIP: string,\n  PROVING_TYPE_TOOLTIP: string,\n  UPLOAD_TYPE_TOOLTIP: string,\n  PROOF_TOOLTIP: string,\n  PROOF_FORM_UPLOAD_EMAIL_INSTRUCTIONS: string,\n  PROOF_FORM_PASTE_EMAIL_INSTRUCTIONS: string,\n\n  // Registraiton ETH Required\n  NEW_REGISTRATION_ETH_REQUIRED: string,\n\n  // Release Funds Modal\n  RELEASE_FUNDS_WARNING_ONE: string,\n  RELEASE_FUNDS_WARNING_TWO: string,\n\n  // Login Modal\n  LOGIN_MODAL_TOOLTIP: string,\n\n  // Send Modal\n  SEND_MODAL_TOOLTIP: string,\n\n  // Receive Modal\n  RECEIVE_FUNDS_INSTRUCTIONS_1: string\n  RECEIVE_FUNDS_INSTRUCTIONS_2: string\n\n  // Pay Modal\n  PAY_MODAL_INSTRUCTIONS: string,\n  PAY_MODAL_MOBILE_INSTRUCTIONS: string,\n\n  // Proof Modal Steps\n  PROOF_MODAL_DOWNLOAD_TITLE: string,\n  PROOF_MODAL_DOWNLOAD_SUBTITLE: string,\n  PROOF_MODAL_UPLOAD_TITLE: string,\n  PROOF_MODAL_UPLOAD_SUBTITLE: string,\n  PROOF_MODAL_PROVE_TITLE: string,\n  PROOF_MODAL_PROVE_REGISTRATION_TITLE: string,\n  PROOF_MODAL_PROVE_SUBTITLE_PRIVATE: string,\n  PROOF_MODAL_PROVE_SUBTITLE_FAST: string,\n  PROOF_MODAL_PROVE_REGISTRATION_SUBTITLE_FAST: string,\n  PROOF_MODAL_VERIFY_TITLE: string,\n  PROOF_MODAL_VERIFY_SUBTITLE: string,\n  PROOF_MODAL_SUBMIT_TITLE: string,\n  PROOF_MODAL_REGISTRATION_SUBMIT_TITLE: string,\n  PROOF_MODAL_SUBMIT_SUBTITLE: string,\n  PROOF_MODAL_REGISTRATION_SUBMIT_SUBTITLE: string,\n\n  // Extension Instructions\n  BROWSER_NOT_SUPPORTED_INSTRUCTIONS: string,\n  EXTENSION_DOWNLOAD_INSTRUCTIONS: string,\n\n  // Notary Connection Tooltip\n  NOTARY_CONNECTION_TOOLTIP: string,\n\n  // Notary Verification Modal Steps\n  VERIFICATION_MODAL_UPLOAD_TITLE: string,\n  VERIFICATION_MODAL_UPLOAD_SUBTITLE: string,\n  VERIFICATION_MODAL_PROVE_TITLE: string,\n  VERIFICATION_MODAL_PROVE_REGISTRATION_TITLE: string,\n  VERIFICATION_MODAL_PROVE_SUBTITLE_FAST: string,\n  VERIFICATION_MODAL_PROVE_REGISTRATION_SUBTITLE_FAST: string,\n  VERIFICATION_MODAL_VERIFY_TITLE: string,\n  VERIFICATION_MODAL_VERIFY_SUBTITLE: string,\n  VERIFICATION_MODAL_SUBMIT_TITLE: string,\n  VERIFICATION_MODAL_REGISTRATION_SUBMIT_TITLE: string,\n  VERIFICATION_MODAL_SUBMIT_SUBTITLE: string,\n  VERIFICATION_MODAL_REGISTRATION_SUBMIT_SUBTITLE: string,\n};\n\nconst strings: CommonStrings = {\n  // Environment Banner\n  LOCAL_ENV_BANNER: `\n    You are currently viewing the application on localhost\n  `,\n  STAGING_TESTNET_ENV_BANNER: `\n    You are currently viewing the staging-testnet application\n  `,\n  STAGING_ENV_BANNER: `\n    You are currently viewing the staging application\n  `,\n  PRODUCTION_ENV_BANNER: `\n    Venmo and Revolut onramping is currently under maintenance | ZKP2P's Alpha Launch —\n  `,\n\n  // Registration NFT Tooltip\n  REGISTRATION_NFT_TOOLTIP: `\n    Mint a Soulbound NFT that proves you successfully registered passing the on chain verifier. The\n    NFT has no value and cannot be transferred. This is optional and does not affect protocol usage.\n  `,\n\n  // Platform Selector Tooltips\n  PLATFORM_INSTRUCTIONS_MAIL_TOOLTIP: `\n    This platform requires an email address receiving receipts from the platform to complete.\n  `,\n\n  PLATFORM_INSTRUCTIONS_BROWSER_TOOLTIP: `\n    This platform requires a browser with access to your Revolut account to complete.\n  `,\n\n  // Mail Input\n  INPUT_MODE_TOOLTIP: `\n    Drag the .eml file into the box to automatically load the contents.\n    You can also Paste the contents directly.\n  `,\n  EMAIL_TOOLTIP: `\n    Open any Venmo transaction email and select 'Show original' to view the full contents.\n  `,\n  PROVING_TYPE_TOOLTIP: `\n    Fast verification sends your email to our servers for processing (30 to 60 seconds).\n    Private verification processes locally in your browser (10 minutes).\n  `,\n  UPLOAD_TYPE_TOOLTIP: `\n    Login uses Google authentication to pull in your past Venmo transaction emails.\n    Data is NEVER stored.\n    Upload requires you to manually input the .eml file.\n  `,\n  PROOF_TOOLTIP: `\n    The proof is a cryptographic signature that shows you sent the email using contents\n    and signatures that exist in the email.\n  `,\n  PROOF_FORM_UPLOAD_EMAIL_INSTRUCTIONS: `\n    Follow this guide to download and input the email.\n  `,\n  PROOF_FORM_PASTE_EMAIL_INSTRUCTIONS: `\n    Follow this guide to copy and paste the email.\n  `,\n\n  // Registration ETH Required\n  NEW_REGISTRATION_ETH_REQUIRED: `\n    Base ETH is required to submit a registration transaction.\n  `,\n\n  // Release Funds Modal\n  RELEASE_FUNDS_WARNING_ONE: `\n    Submit this transaction to release\n  `,\n  RELEASE_FUNDS_WARNING_TWO: `\n    to the requester. This bypasses requiring the user to submit proof of the transaction\n    and may result in loss of funds.\n  `,\n\n  // Login Modal\n  LOGIN_MODAL_TOOLTIP: `\n    Use a social account if you do not already have funds on the blockchain, \n    or use an Ethereum wallet if you already have one.\n  `,\n\n  SEND_MODAL_TOOLTIP: `\n    Coming soon: transfer to wallets on any chain including Solana, Polygon, Arbitrum, zkSync, and others.\n  `,\n\n  // Receive Modal\n  RECEIVE_FUNDS_INSTRUCTIONS_1: `\n    This address can ONLY receive\n  `,\n  RECEIVE_FUNDS_INSTRUCTIONS_2: `\n    Sending invalid USDC or tokens from other networks will result in lost funds.\n  `,\n\n  // Pay Modal\n  PAY_MODAL_INSTRUCTIONS: `\n    All transactions are peer-to-peer. Review all of the requirements below before sending a payment\n    to prevent loss of funds.\n  `,\n  PAY_MODAL_MOBILE_INSTRUCTIONS: `\n    Review requirements to prevent loss of funds.\n  `,\n\n  // Proof Modal\n  PROOF_MODAL_DOWNLOAD_TITLE: `\n    Downloading Verification Keys\n  `,\n  PROOF_MODAL_DOWNLOAD_SUBTITLE: `\n    Keys download (1.7GB) will complete in 3 minutes\n  `,\n  PROOF_MODAL_UPLOAD_TITLE: `\n    Uploading Emails\n  `,\n  PROOF_MODAL_UPLOAD_SUBTITLE: `\n    Email is sent to remote server for proving\n  `,\n  PROOF_MODAL_PROVE_TITLE: `\n    Validating Payment\n  `,\n  PROOF_MODAL_PROVE_REGISTRATION_TITLE: `\n    Validating Email\n  `,\n  PROOF_MODAL_PROVE_SUBTITLE_PRIVATE: `\n    Private validation will take approximately 10 minutes\n  `,\n  PROOF_MODAL_PROVE_SUBTITLE_FAST: `\n    Payment validation can take up to 60 seconds\n  `,\n  PROOF_MODAL_PROVE_REGISTRATION_SUBTITLE_FAST: `\n    Email validation can take up to 60 seconds\n  `,\n  PROOF_MODAL_VERIFY_TITLE: `\n    Local Proof Verification\n  `,\n  PROOF_MODAL_VERIFY_SUBTITLE: `\n    Constructing and verifying transaction\n  `,\n  PROOF_MODAL_SUBMIT_TITLE: `\n    Complete Order\n  `,\n  PROOF_MODAL_REGISTRATION_SUBMIT_TITLE: `\n    Complete Registration\n  `,\n  PROOF_MODAL_SUBMIT_SUBTITLE: `\n    Submit transaction to complete the on ramp\n  `,\n  PROOF_MODAL_REGISTRATION_SUBMIT_SUBTITLE: `\n    Submit transaction to complete registration\n  `,\n\n  // Extension Instructions\n  BROWSER_NOT_SUPPORTED_INSTRUCTIONS: `\n    Your browser is not currently supported. Switch to a browser with Sidebar support and\n    join our Telegram for updates on supported browsers.\n  `,\n  EXTENSION_DOWNLOAD_INSTRUCTIONS: `\n    ZKP2P's browser sidebar is your browsing assistant that allows\n    you to prove ownership of your Revolut account and transactions.\n  `,\n\n  // Notary Connection Tooltip\n  NOTARY_CONNECTION_TOOLTIP: `\n    Your internet connection may be insufficient for verifying new information.\n    Please check your connection and try again or join our Telegram for support.\n  `,\n\n  // Notary Verification Modal Steps\n  VERIFICATION_MODAL_UPLOAD_TITLE: `\n    Uploading Proof\n  `,\n\n  VERIFICATION_MODAL_UPLOAD_SUBTITLE: `\n    Proof is sent to remote server for verification\n  `,\n\n  VERIFICATION_MODAL_PROVE_TITLE: `\n    Validating Payment\n  `,\n\n  VERIFICATION_MODAL_PROVE_REGISTRATION_TITLE: `\n    Validating Account\n  `,\n\n  VERIFICATION_MODAL_PROVE_SUBTITLE_FAST: `\n    Payment validation will take up to 10 seconds\n  `,\n\n  VERIFICATION_MODAL_PROVE_REGISTRATION_SUBTITLE_FAST: `\n    Account proof validation will take up to 10 seconds\n  `,\n\n  VERIFICATION_MODAL_VERIFY_TITLE: `\n    Local Proof Verification\n  `,\n\n  VERIFICATION_MODAL_VERIFY_SUBTITLE: `\n    Constructing and verifying transaction\n  `,\n\n  VERIFICATION_MODAL_SUBMIT_TITLE: `\n    Complete Order\n  `,\n\n  VERIFICATION_MODAL_REGISTRATION_SUBMIT_TITLE: `\n    Complete Registration\n  `,\n\n  VERIFICATION_MODAL_SUBMIT_SUBTITLE: `\n    Submit transaction to complete the on ramp\n  `,\n\n  VERIFICATION_MODAL_REGISTRATION_SUBMIT_SUBTITLE: `\n    Submit transaction to complete registration\n  `,\n\n};\n\nexport class CommonStringProvider {\n  private strings: CommonStrings;\n\n  constructor() {\n    this.strings = strings;\n  }\n\n  get(key: keyof CommonStrings): string {\n    return this.strings[key];\n  }\n};\n"
  },
  {
    "path": "client/src/helpers/strings/garanti.ts",
    "content": "import { PlatformStrings } from './platform';\n\nconst strings: PlatformStrings = {\n  // Proof Form\n  PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS: `\n    Provide a historical transaction email sent from Garanti BBVA containing \"Para Transferi Bilgilendirmesi\" in\n    the subject received after 01 September 2023 to complete registration.\n  `,\n\n  // Mail Instructions\n  SIGN_IN_WITH_GOOGLE_INSTRUCTIONS: `\n    Sign in with Google to pull in your Garanti transaction emails. The emails are not stored and never\n    leave your browser. Read more:\n  `,\n  NO_EMAILS_ERROR: `\n    No emails found.\n    Please ensure you are using an email attached to a Garanti account with a receipt after 01 Sep.\n  `,\n\n  // Notarizations Instructions\n  NO_NOTARIZATIONS_ERROR: `\n    no-op\n  `,\n  NO_TRANSFER_NOTARIZATIONS_ERROR: `\n    Lorem ipsum\n  `,\n\n  // New Registration\n  REGISTRATION_INSTRUCTIONS: `\n    You must register in order to use ZKP2P. Registration requires a confirmation email from Garanti\n    with subject \"Para Transferi Bilgilendirmesi\", which is used to prove you own a Garanti account. Your Garanti ID is\n    hashed to conceal your identity.\n  `,\n\n  // On Ramp Instructions\n  PROOF_FORM_TITLE_SEND_INSTRUCTIONS: `\n    Provide the transaction alert email you received from Garanti containing \"Para Transferi Bilgilendirmesi\"\n    to complete the order. You can sign in with Google to pull the email or manually upload/paste\n    the email.\n  `,\n\n  // New Deposit\n  NEW_DEPOSIT_INSTRUCTIONS: `\n    Creating a new deposit requires you to submit your Garanti IBAN, the USDC liquidity to deposit, and\n    desired USDC/TRY conversion rate. You will receive TRY payments from users who claim your deposit.\n    Your Garanti IBAN will be made public on-chain.\n  `,\n  NEW_DEPOSIT_ADDITIONAL_REGISTRATION_TOOLTIP: `\n    no-op\n  `,\n  NEW_DEPOSIT_ID_TOOLTIP: `\n    This is a valid IBAN where users will send payments.\n    This connects your Garanti IBAN to your wallet address on chain.\n    This must match the IBAN associated with your Garanti account.\n  `,\n  NEW_DEPOSIT_NAME_TOOLTIP:`\n    This must be the name associated with your Garanti account. If it does not match\n    payments will not go through and you will not be able to off-ramp\n  `,\n  NEW_DEPOSIT_AMOUNT_TOOLTIP: `\n    This is the amount of USDC you will deposit for users to claim by sending you Garanti payments.\n    You can withdraw unclaimed USDC or USDC not locked for orders at any time.\n  `,\n  NEW_DEPOSIT_RECEIVE_TOOLTIP: `\n    This is the amount of TRY you will receive if your entire deposit is claimed.\n  `,\n\n  // Instruction Drawer\n  INSTRUCTION_DRAWER_STEP_ONE: `\n    Enter USDC amount to receive to get a quote. You are assigned the best available rate for the requested amount\n  `,\n  INSTRUCTION_DRAWER_STEP_TWO: `\n    Submit transaction to start your order. Optionally, provide a recipient address below to receive funds in another wallet\n  `,\n  INSTRUCTION_DRAWER_STEP_THREE: `\n    Click 'Send' and complete the payment using your Garanti bank account. Ensure you have email notifications from Garanti BBVA enabled\n  `,\n  INSTRUCTION_DRAWER_STEP_FOUR: `\n    Continue through to validate email proof of transaction. Submit proof to receive the requested USDC\n  `,\n\n  // Payment Requirements\n  PAYMENT_REQUIREMENT_STEP_ONE: `\n    Send payment from your Garanti bank account. Do not send payment from any other bank accounts\n  `,\n  PAYMENT_REQUIREMENT_STEP_TWO: `\n    Ensure email notifications are enabled AND you have set the alert minimum to 10 TRY\n  `,\n  PAYMENT_REQUIREMENT_STEP_THREE: `\n    Wait 24 hours after updating email notifications to send payment.\n  `,\n  PAYMENT_REQUIREMENT_STEP_FOUR: `Send the exact TRY amount including decimals as displayed on the payment screen`,\n};\n\nexport default strings;\n"
  },
  {
    "path": "client/src/helpers/strings/hdfc.ts",
    "content": "import { PlatformStrings } from './platform';\n\nconst strings: PlatformStrings = {\n  // Proof Form\n  PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS: `\n    Provide a historical transaction email sent from HDFC InstaAlerts containing \"You have done a UPI txn\" in\n    the subject received after 01 September 2023 to complete registration.\n  `,\n\n  // Mail Instructions\n  SIGN_IN_WITH_GOOGLE_INSTRUCTIONS: `\n    Sign in with Google to pull in your HDFC transaction emails. The emails are not stored and never\n    leave your browser. Read more:\n  `,\n  NO_EMAILS_ERROR: `\n    No emails found.\n    Please ensure you are using an email attached to a HDFC account with a receipt after 01 Sep.\n  `,\n\n  // Notarizations Instructions\n  NO_NOTARIZATIONS_ERROR: `\n    no-op\n  `,\n  NO_TRANSFER_NOTARIZATIONS_ERROR: `\n    Lorem ipsum\n  `,\n\n  // New Registration\n  REGISTRATION_INSTRUCTIONS: `\n    You must register in order to use ZKP2P. Registration requires a confirmation email from HDFC\n    with subject \"You have done a UPI txn\", which is used to prove you own a HDFC account. Your HDFC ID is\n    hashed to conceal your identity.\n  `,\n\n  // On Ramp Instructions\n  PROOF_FORM_TITLE_SEND_INSTRUCTIONS: `\n    Provide the transaction alert email you received from HDFC containing \"You have done a UPI txn\"\n    to complete the order. You can sign in with Google to pull the email or manually upload/paste\n    the email.\n  `,\n\n  // New Deposit\n  NEW_DEPOSIT_INSTRUCTIONS: `\n    Creating a new deposit requires you to submit your UPI ID, the USDC liquidity to deposit and\n    desired USDC/INR conversion rate. You will receive INR payments from users who claim your deposit.\n    Your UPI ID is made public on-chain hence do not use your phone number UPI ID.\n  `,\n  NEW_DEPOSIT_ADDITIONAL_REGISTRATION_TOOLTIP: `\n    no-op\n  `,\n  NEW_DEPOSIT_ID_TOOLTIP: `\n    This is a valid UPI ID where users will send payments.\n    This connects your UPI account to your wallet address on chain.\n    This must match the HDFC account you used to register.\n  `,\n  NEW_DEPOSIT_NAME_TOOLTIP:`\n    no-op\n  `,\n  NEW_DEPOSIT_AMOUNT_TOOLTIP: `\n    This is the amount of USDC you will deposit for users to claim by sending you HDFC payments.\n    You can withdraw unclaimed USDC or USDC not locked for orders at any time.\n  `,\n  NEW_DEPOSIT_RECEIVE_TOOLTIP: `\n    This is the amount of INR you will receive if your entire deposit is claimed.\n  `,\n\n  // Instruction Drawer\n  INSTRUCTION_DRAWER_STEP_ONE: `\n    Enter USDC amount to receive to get a quote. You are assigned the best available rate for the requested amount\n  `,\n  INSTRUCTION_DRAWER_STEP_TWO: `\n    Submit transaction to start your order. Optionally, provide a recipient address below to receive funds in another wallet\n  `,\n  INSTRUCTION_DRAWER_STEP_THREE: `\n    Click 'Send' and complete the payment on any UPI ID linked to your HDFC bank account. Ensure you have email notifications from HDFC InstaAlerts enabled\n  `,\n  INSTRUCTION_DRAWER_STEP_FOUR: `\n    Continue through to validate email proof of transaction. Submit proof to receive the requested USDC\n  `,\n\n  // Payment Requirements\n  PAYMENT_REQUIREMENT_STEP_ONE: `\n    Send payment from your UPI ID linked to your HDFC bank account. Do not send payment from UPI Lite or other bank accounts\n  `,\n  PAYMENT_REQUIREMENT_STEP_TWO: `\n    HDFC InstaAlert email notifications are enabled for your account\n  `,\n  PAYMENT_REQUIREMENT_STEP_THREE: `\n    Send the exact INR amount including decimals as displayed on the payment screen\n  `,\n  PAYMENT_REQUIREMENT_STEP_FOUR: ``,\n};\n\nexport default strings;\n"
  },
  {
    "path": "client/src/helpers/strings/index.ts",
    "content": "import { PaymentPlatform } from '@helpers/types';\n\nimport { PlatformStringProvider }  from './platform';\nimport { CommonStringProvider } from './common';\n\nexport { PlatformStringProvider as platformStrings } from './platform';\n\nexport const venmoStrings = new PlatformStringProvider(PaymentPlatform.VENMO);\nexport const hdfcStrings = new PlatformStringProvider(PaymentPlatform.HDFC);\nexport const garantiStrings = new PlatformStringProvider(PaymentPlatform.GARANTI);\nexport const revolutStrings = new PlatformStringProvider(PaymentPlatform.REVOLUT);\nexport const commonStrings = new CommonStringProvider();\n"
  },
  {
    "path": "client/src/helpers/strings/platform.ts",
    "content": "import { PaymentPlatform, PaymentPlatformType } from '@helpers/types';\n\nimport venmoCopy from './venmo';\nimport hdfcCopy from './hdfc';\nimport garantiCopy from './garanti';\nimport revolutCopy from './revolut';\n\n\n// Platform strings\nexport interface PlatformStrings {\n  // Proof Form\n  PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS: string,\n\n  // Mail Instructions\n  SIGN_IN_WITH_GOOGLE_INSTRUCTIONS: string,\n  NO_EMAILS_ERROR: string\n\n  // Notarizations Instructions\n  NO_NOTARIZATIONS_ERROR: string,\n  NO_TRANSFER_NOTARIZATIONS_ERROR: string,\n\n  // New Registration\n  REGISTRATION_INSTRUCTIONS: string,\n\n  // On Ramp Instructions\n  PROOF_FORM_TITLE_SEND_INSTRUCTIONS: string,\n\n  // New Deposit\n  NEW_DEPOSIT_INSTRUCTIONS: string,\n  NEW_DEPOSIT_ADDITIONAL_REGISTRATION_TOOLTIP: string,\n  NEW_DEPOSIT_ID_TOOLTIP: string,\n  NEW_DEPOSIT_NAME_TOOLTIP: string,\n  NEW_DEPOSIT_AMOUNT_TOOLTIP: string,\n  NEW_DEPOSIT_RECEIVE_TOOLTIP: string,\n\n  // Instruction Drawer\n  INSTRUCTION_DRAWER_STEP_ONE: string,\n  INSTRUCTION_DRAWER_STEP_TWO: string,\n  INSTRUCTION_DRAWER_STEP_THREE: string,\n  INSTRUCTION_DRAWER_STEP_FOUR: string,\n\n  // Payment Requirements\n  PAYMENT_REQUIREMENT_STEP_ONE: string,\n  PAYMENT_REQUIREMENT_STEP_TWO: string,\n  PAYMENT_REQUIREMENT_STEP_THREE: string,\n  PAYMENT_REQUIREMENT_STEP_FOUR: string,\n}\n\nexport class PlatformStringProvider {\n  private strings: PlatformStrings;\n\n  constructor(platformType: PaymentPlatformType) {\n    if (platformType === PaymentPlatform.VENMO) {\n      this.strings = venmoCopy;\n    } else if (platformType === PaymentPlatform.HDFC) {\n      this.strings = hdfcCopy;\n    } else if (platformType === PaymentPlatform.GARANTI) {\n      this.strings = garantiCopy;\n    } else if (platformType === PaymentPlatform.REVOLUT) {\n      this.strings = revolutCopy;\n    } else {\n      throw new Error('Invalid platform type');\n    }\n  }\n\n  get(key: keyof PlatformStrings): string {\n    if (!this.strings[key]) throw new Error(`Invalid key: ${key}`);\n    return this.strings[key] ?? '';\n  }\n\n  static getForPlatform(platformType: PaymentPlatformType, key: keyof PlatformStrings): string {\n    let strings: PlatformStrings;\n    if (platformType === PaymentPlatform.VENMO) {\n      strings = venmoCopy;\n    } else if (platformType === PaymentPlatform.HDFC) {\n      strings = hdfcCopy;\n    } else if (platformType === PaymentPlatform.GARANTI) {\n      strings = garantiCopy;\n    } else if (platformType === PaymentPlatform.REVOLUT) {\n      strings = revolutCopy;\n    } else {\n      throw new Error('Invalid platform type');\n    }\n    return strings[key] ?? '';\n  }\n};\n"
  },
  {
    "path": "client/src/helpers/strings/revolut.ts",
    "content": "import { PlatformStrings } from './platform';\n\nconst strings: PlatformStrings = {\n  // Proof Form\n  PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS: `\n    Use the ZKP2P browser assistant to generate proof a valid Revolut account. Submit the proof to complete registration.\n  `,\n\n  // Mail Instructions\n  SIGN_IN_WITH_GOOGLE_INSTRUCTIONS: `\n    no-op\n  `,\n  NO_EMAILS_ERROR: `\n    no-op\n  `,\n\n  // Notarizations Instructions\n  NO_NOTARIZATIONS_ERROR: `\n    No Revolut account proofs found.\n    Please follow instructions in the browser sidebar to generate proof of an existing Revtag.\n  `,\n  NO_TRANSFER_NOTARIZATIONS_ERROR: `\n    No Revolut transfer proofs detected.\n    Please follow instructions in the browser sidebar to generate proof of payment from Revolut for the correct transaction.\n  `,\n\n  // New Registration\n  REGISTRATION_INSTRUCTIONS: `\n    You must register with a valid Revolut account to use ZKP2P. Your account details are hashed to conceal your identity.\n  `,\n\n  // On Ramp Instructions\n  PROOF_FORM_TITLE_SEND_INSTRUCTIONS: `\n    Prove a successful Revolut payment using the browser assistant to complete the order and receive USDC.\n  `,\n\n  // New Deposit\n  NEW_DEPOSIT_INSTRUCTIONS: `\n    Creating a new deposit requires you to submit a valid Revolut Revtag, the USDC liquidity to deposit, and\n    desired fiat conversion rate. Your Revtag must match the registered Revtag. \n  `,\n  NEW_DEPOSIT_ADDITIONAL_REGISTRATION_TOOLTIP: `\n    This is a second registration step required only for depositors to connect a Revolut depositor ID\n    to your account.\n  `,\n  NEW_DEPOSIT_ID_TOOLTIP: `\n    This is a valid Revtag where users will send payments.\n    This connects your Revtag to your address on chain.\n    This Revtag must be from the account you registered with.\n  `,\n  NEW_DEPOSIT_NAME_TOOLTIP: `\n    no-op\n  `,\n  NEW_DEPOSIT_AMOUNT_TOOLTIP: `\n    This is the amount of USDC you will deposit for users to claim by sending you Revolut payments.\n    You can withdraw unclaimed USDC or USDC not locked for orders at any time.\n  `,\n  NEW_DEPOSIT_RECEIVE_TOOLTIP: `\n    This is the amount of fiat currency you will receive if your entire deposit is claimed.\n  `,\n\n  // Instruction Drawer\n  INSTRUCTION_DRAWER_STEP_ONE: `\n    Enter USDC amount to receive to get a quote. You are assigned the best available rate for the requested amount\n  `,\n  INSTRUCTION_DRAWER_STEP_TWO: `\n    Submit transaction to start your order. Optionally, provide a recipient address below to receive funds in another wallet\n  `,\n  INSTRUCTION_DRAWER_STEP_THREE: `\n    Click 'Send' and complete the payment on Revolut. Ensure you have access to a desktop to prove the payment later\n  `,\n  INSTRUCTION_DRAWER_STEP_FOUR: `\n    Continue through to generate and validate proof of payment. Submit proof to receive the requested USDC\n  `,\n\n  // Payment Requirements\n  PAYMENT_REQUIREMENT_STEP_ONE: `\n    Send payment from your ZKP2P registered Revolut account\n  `,\n  PAYMENT_REQUIREMENT_STEP_TWO: `\n    Choose a send currency and ensure the receive currency is set to the same requested currency above when making the payment.\n  `,\n  PAYMENT_REQUIREMENT_STEP_THREE: `\n    Send the exact amount including decimals as displayed above\n  `,\n  PAYMENT_REQUIREMENT_STEP_FOUR: ``,\n};\n\nexport default strings;\n"
  },
  {
    "path": "client/src/helpers/strings/venmo.ts",
    "content": "import { PlatformStrings } from './platform';\n\nconst strings: PlatformStrings = {\n  // Proof Form\n  PROOF_FORM_TITLE_REGISTRATION_INSTRUCTIONS: `\n    Provide a historical transaction email sent from Venmo containing \"You paid\" in the subject received after\n    January 10th, 2024 to complete registration.\n  `,\n\n  // Mail Instructions\n  SIGN_IN_WITH_GOOGLE_INSTRUCTIONS: `\n    Sign in with Google to pull in your Venmo transaction emails. The emails are not stored and never\n    leave your browser. Read more:\n  `,\n  NO_EMAILS_ERROR: `\n    No emails found.\n    Please ensure you are using an email attached to a Venmo account with a receipt after 1/10/24.\n  `,\n\n  // Notarizations Instructions\n  NO_NOTARIZATIONS_ERROR: `\n    no-op\n  `,\n  NO_TRANSFER_NOTARIZATIONS_ERROR: `\n    Lorem ipsum\n  `,\n\n  // New Registration\n  REGISTRATION_INSTRUCTIONS: `\n    You must register in order to use ZKP2P. Registration requires a confirmation email from Venmo\n    with subject \"You paid\", which is used to prove you own a Venmo account. Your Venmo ID is\n    hashed to conceal your identity.\n  `,\n\n  // On Ramp Instructions\n  PROOF_FORM_TITLE_SEND_INSTRUCTIONS: `\n    Provide the transaction email containing \"You paid\" to complete the order. You can sign in with\n    Google to pull the emails or paste the contents directly.\n  `,\n\n  // New Deposit\n  NEW_DEPOSIT_INSTRUCTIONS: `\n    Creating a new deposit requires you to submit your Venmo ID, the USDC liquidity to deposit and\n    desired USD conversion rate. Your Venmo ID must match the ID you registered with. Instructions\n    on how to fetch your Venmo ID can be found here.\n  `,\n  NEW_DEPOSIT_ADDITIONAL_REGISTRATION_TOOLTIP: `\n    no-op\n  `,\n  NEW_DEPOSIT_ID_TOOLTIP: `\n    This is a valid 18-19 digit Venmo ID where users will send payments.\n    This connects your Venmo account to your wallet address on chain.\n    This must match the Venmo account you used to register.\n  `,\n  NEW_DEPOSIT_NAME_TOOLTIP: `\n    no-op\n  `,\n  NEW_DEPOSIT_AMOUNT_TOOLTIP: `\n    This is the amount of USDC you will deposit for users to claim by sending you Venmo payments.\n    You can withdraw unclaimed USDC or USDC not locked for orders at any time.\n  `,\n  NEW_DEPOSIT_RECEIVE_TOOLTIP: `\n    This is the amount of USD you will receive if your entire deposit is claimed.\n  `,\n\n  // Instruction Drawer\n  INSTRUCTION_DRAWER_STEP_ONE: `\n    Enter USDC amount to receive to get a quote. You are assigned the best available rate for the requested amount\n  `,\n  INSTRUCTION_DRAWER_STEP_TWO: `\n    Submit transaction to start your order. Optionally, provide a recipient address below to receive funds in another wallet\n  `,\n  INSTRUCTION_DRAWER_STEP_THREE: `\n    Click 'Send' and complete the payment on Venmo. Ensure you have email notifications from Venmo enabled\n  `,\n  INSTRUCTION_DRAWER_STEP_FOUR: `\n    Continue through to validate email proof of transaction. Submit proof to receive the requested USDC\n  `,\n\n  // Payment Requirements\n  PAYMENT_REQUIREMENT_STEP_ONE: `\n    Email notifications are enabled in your Venmo notifications settings\n  `,\n  PAYMENT_REQUIREMENT_STEP_TWO: `\n    Amount USD sent, which may differ from the requested USDC amount, is correct\n  `,\n  PAYMENT_REQUIREMENT_STEP_THREE: `\n    Payment note does not contain emojis\n  `,\n  PAYMENT_REQUIREMENT_STEP_FOUR: `\n    'Turn on for purchases' at the payment screen is toggled off\n  `,\n};\n\nexport default strings;\n"
  },
  {
    "path": "client/src/helpers/submitProof.ts",
    "content": "export const reformatProofForChain = (proof: string) => {\n  if (!proof) return \"\";\n  const parsedProof = JSON.parse(proof);\n\n  const pi_a = parsedProof[\"pi_a\"].slice(0, 2);\n  const pi_b = parsedProof[\"pi_b\"].slice(0, 2).map((g2point: any[]) => g2point.reverse());\n  const pi_c = parsedProof[\"pi_c\"].slice(0, 2);\n\n  // console.log(\"pi_a\", pi_a);\n  // console.log(\"pi_b\", pi_b);\n  // console.log(\"pi_c\", pi_c);\n\n  return [\n    pi_a,\n    pi_b,\n    pi_c,\n  ];\n};\n\nexport const reformatMultiProofAndSignalsForChain = (\n  proof: string,\n  signals: string,\n  bodyHashProof: string,\n  bodyHashPublicSignals: string,\n) => {\n  if (!(proof && bodyHashProof)) return [{ a: [], b: [], c: [], signals: []}, { a: [], b: [], c: [], signals: []}];\n\n  const parsedProof = JSON.parse(proof);\n  const parsedBodyHashProof = JSON.parse(bodyHashProof);\n\n  const proofAndSignals = {\n    a: parsedProof[\"pi_a\"].slice(0, 2),\n    b: parsedProof[\"pi_b\"].slice(0, 2).map((g2point: any[]) => g2point.reverse()),\n    c: parsedProof[\"pi_c\"].slice(0, 2),\n    signals: JSON.parse(signals),\n  }\n  const bodyHashProofAndSignals = {\n    a: parsedBodyHashProof[\"pi_a\"].slice(0, 2),\n    b: parsedBodyHashProof[\"pi_b\"].slice(0, 2).map((g2point: any[]) => g2point.reverse()),\n    c: parsedBodyHashProof[\"pi_c\"].slice(0, 2),\n    signals: JSON.parse(bodyHashPublicSignals),\n  }\n  return [proofAndSignals, bodyHashProofAndSignals];\n}\n"
  },
  {
    "path": "client/src/helpers/tableFormatters.ts",
    "content": "export const formatAmountsForUSDC = (tokenAmount: number) => {\n  const adjustedAmount = tokenAmount / (10 ** 6);\n  return adjustedAmount;\n};\n"
  },
  {
    "path": "client/src/helpers/tokens.ts",
    "content": "export type Tokens = {\n  [chainId: string]: Token[]\n};\n\nexport type Token = {\n  address: string;\n  symbol: string;\n  decimals: number;\n  name: string;\n  logoURI: string;\n};\n\nexport const tokens: Tokens = {\n  // Ethereum mainnet\n  'ethereum': [\n    {\n      \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"name\": \"USD Coin\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    {\n      \"address\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n      \"symbol\": \"USDT\",\n      \"decimals\": 6,\n      \"name\": \"USDT\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n    },\n    {\n      \"address\": \"0x0000000000000000000000000000000000000000\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"name\": \"ETH\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  ],\n\n  // Base\n  'base': [\n    {\n      \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n      \"decimals\": 6,\n      \"name\": \"USD Coin\",\n      \"symbol\": \"USDC\",\n      \"logoURI\": \"https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png\"\n    },\n    {\n      \"address\": \"0x0000000000000000000000000000000000000000\",\n      \"decimals\": 18,\n      \"name\": \"ETH\",\n      \"symbol\": \"ETH\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  ],\n\n  // Polygon\n  'polygon': [\n    {\n      \"address\": \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n      \"decimals\": 6,\n      \"name\": \"USD Coin (Polygon)\",\n      \"symbol\": \"USDC.e\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    {\n      \"address\": \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n      \"decimals\": 6,\n      \"name\": \"USDT\",\n      \"symbol\": \"USDT\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n    }\n  ],\n\n  // Arbitrum\n  'arbitrum': [\n    {\n      \"address\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n      \"decimals\": 6,\n      \"name\": \"USD Coin\",\n      \"symbol\": \"USDC\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    {\n      \"address\": \"0x0000000000000000000000000000000000000000\",\n      \"decimals\": 18,\n      \"name\": \"ETH\",\n      \"symbol\": \"ETH\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    },\n  ],\n\n  // Optimism\n  'optimism': [\n    {\n      \"address\": \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n      \"symbol\": \"USDC.e\",\n      \"decimals\": 6,\n      \"name\": \"Bridged USD Coin\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    {\n      \"address\": \"0x0000000000000000000000000000000000000000\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"name\": \"ETH\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  ],\n\n  // Binance Smart Chain\n  'bsc': [\n    {\n      \"address\": \"0x55d398326f99059fF775485246999027B3197955\",\n      \"symbol\": \"USDT\",\n      \"decimals\": 18,\n      \"name\": \"USDT\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n    }\n  ],\n\n  // ZKSync\n  'zksync': [\n    {\n      \"address\": \"0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"name\": \"USD Coin\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    {\n      \"address\": \"0x0000000000000000000000000000000000000000\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"name\": \"ETH\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  ],\n\n  // Avalanche\n  'avax': [\n    {\n      \"address\": \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"name\": \"USD Coin\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    {\n      \"address\": \"0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7\",\n      \"symbol\": \"USDt\",\n      \"decimals\": 6,\n      \"name\": \"TetherToken\",\n      \"logoURI\": \"https://static.debank.com/image/coin/logo_url/usdt/23af7472292cb41dc39b3f1146ead0fe.png\",\n    }\n  ],\n  \n  // Solana\n  'solana': [\n    {\n      \"address\": \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n      \"symbol\": \"USDT\",\n      \"decimals\": 6,\n      \"name\": \"USDT\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n    },\n    {\n      \"address\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"name\": \"USD Coin\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    }\n  ]\n};\n"
  },
  {
    "path": "client/src/helpers/types/deposit.ts",
    "content": "import { PaymentPlatformType } from '@helpers/types';\n\nexport const ReceiveCurrencyId = {\n  EUR: \"0xfff16d60be267153303bbfa66e593fb8d06e24ea5ef24b6acca5224c2ca6b907\", // keccak256(\"EUR\")\n  GBP: \"0x90832e2dc3221e4d56977c1aa8f6a6706b9ad6542fbbdaac13097d0fa5e42e67\", // keccak256(\"GBP\")\n  SGD: \"0xc241cc1f9752d2d53d1ab67189223a3f330e48b75f73ebf86f50b2c78fe8df88\", // keccak256(\"SGD\")\n  USD: \"0xc4ae21aac0c6549d71dd96035b7e0bdb6c79ebdba8891b666115bc976d16a29e\", // keccak256(\"USD\")\n};\nexport type ReceiveCurrencyIdType = typeof ReceiveCurrencyId[keyof typeof ReceiveCurrencyId];\n\n// struct Deposit {\n//   address depositor;\n//   uint256[5] packedVenmoId;\n//   uint256 depositAmount;\n//   uint256 remainingDeposits;          // Amount of remaining deposited liquidity\n//   uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\n//   uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\n//   bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\n//   bytes32 receiveCurrencyId; // Id of the currency to be received off-chain (bytes32(Wise currency code))\n// }\nexport interface Deposit {\n  platformType: PaymentPlatformType;\n  depositor: string;\n  venmoId: string;\n  offRamperName?: string;\n  depositAmount: bigint;\n  remainingDepositAmount: bigint;\n  outstandingIntentAmount: bigint;\n  conversionRate: bigint;\n  intentHashes: string[];\n  notaryKeyHash?: string;\n  receiveCurrencyId?: ReceiveCurrencyIdType;\n}\n\n// struct DepositWithAvailableLiquidity {\n//    deposit: Deposit;\n//    uint256: availableLiquidity;\n//    bytes32: depositorIdHash;\n//    uint256: depositId;\n// }\nexport interface DepositWithAvailableLiquidity {\n  depositId: bigint;\n  deposit: Deposit;\n  availableLiquidity: bigint;\n  depositorIdHash: string;\n} // DepositsProvider.getAccountDeposits, LiquidityProvider.getDepositFromIds\n\nexport interface StoredDeposit extends DepositWithAvailableLiquidity {\n  depositId: bigint;\n}\n\nexport interface IndicativeQuote {\n  depositId?: bigint;\n  usdAmountToSend?: string;\n  error?: string;\n  maxUSDCAmountAvailable?: string;\n  conversionRate?: bigint;\n}\n\n// struct Intent {\n//   address onramper;\n//   uint256 deposit;\n//   uint256 amount;\n//   uint256 intentTimestamp;\n//   address to;\n// }\nexport interface Intent {\n  onRamper: string;\n  deposit: bigint;\n  amount: bigint;\n  timestamp: bigint;\n  to: string;\n}\n\nexport interface DepositIntent {\n  onRamperVenmoHash: string;\n  deposit: Deposit;\n  intent: Intent;\n  intentHash: string;\n}\n\nexport interface OnRamperIntent {\n  depositorVenmoId: string;\n  intent: Intent;\n}\n"
  },
  {
    "path": "client/src/helpers/types/googleMailApi.ts",
    "content": "export type RawEmailResponse = {\n  subject: string;\n  internalDate: string;\n  decodedContents: string;\n};\n\n"
  },
  {
    "path": "client/src/helpers/types/index.ts",
    "content": "export { ProofGenerationStatus, EmailInputStatus } from './proofGeneration';\n\nexport { NotaryVerificationStatus, NotaryProofInputStatus, NotaryVerificationCircuit } from './notaryVerification';\nexport type { NotaryVerificationCircuitType } from './notaryVerification';\n\nexport { TransactionStatus } from './transactionStatus';\nexport type { TransactionStatusType } from './transactionStatus';\n\nexport { NewDepositTransactionStatus, NewRevolutDepositTransactionStatus } from './newDepositStatus';\nexport type { NewDepositTransactionStatusType, NewRevolutDepositTransactionStatusType } from './newDepositStatus';\n\nexport { SendTransactionStatus, FetchQuoteStatus } from './sendStatus';\nexport type { SendTransactionStatusType, FetchQuoteStatusType } from './sendStatus';\n\nexport { LoginStatus } from './loginStatus';\nexport type { LoginStatusType } from './loginStatus';\n\nexport type { RawEmailResponse } from './googleMailApi';\n\nexport { CurrencyCode, CurrencyIndex, PaymentPlatform, paymentPlatforms, paymentPlatformInfo } from './paymentPlatform';\nexport type { CurrencyCodeType, CurrencyIndexType, PaymentPlatformType  } from './paymentPlatform';\n\nexport { ReceiveNetwork, receiveNetworks, networksInfo } from './receiveNetworks';\nexport type { ReceiveNetworkType } from './receiveNetworks';\n\nexport { ReceiveToken, receiveTokens, receiveTokenData, networkSupportedTokens, baseUSDCTokenData } from './receiveTokens';\nexport type { ReceiveTokenData, ReceiveTokenType } from './receiveTokens';\n\nexport { NotaryConnectionStatus, defaultNotaryConfigurations } from './notarySettings';\nexport type { NotaryConnectionStatusType, NotaryConfiguration } from './notarySettings';\n\nexport type { Abi, AbiEntry } from './smartContracts';\n\nexport { ReceiveCurrencyId } from './deposit';\nexport type {\n  Deposit,\n  DepositWithAvailableLiquidity,\n  StoredDeposit,\n  IndicativeQuote,\n  Intent,\n  DepositIntent,\n  OnRamperIntent,\n  ReceiveCurrencyIdType,\n} from './deposit';\n\nexport type {\n  AccountInfo\n} from './registration';\n\nexport { MODALS } from './modals';\n"
  },
  {
    "path": "client/src/helpers/types/loginStatus.ts",
    "content": "export const LoginStatus = {\n  LOGGED_OUT: 'logged_out',\n  AUTHENTICATED: 'authenticated',\n  EOA: 'eoa'\n};\n\nexport type LoginStatusType = typeof LoginStatus[keyof typeof LoginStatus];\n"
  },
  {
    "path": "client/src/helpers/types/modals.ts",
    "content": "export const MODALS = {\n  RECEIVE: 'receive',\n  SEND: 'send',\n  NOT_SUPPORTED_PLATFORM_DEVICE: 'not_supported_platform_device',\n};\n"
  },
  {
    "path": "client/src/helpers/types/newDepositStatus.ts",
    "content": "export const NewDepositTransactionStatus = {\n  MISSING_REGISTRATION: 'missing_registration',\n  DEFAULT: 'default',\n  INVALID_DEPOSITOR_ID: 'invalid_depositor_id',\n  MISSING_AMOUNTS: 'missing_amounts',\n  INSUFFICIENT_BALANCE: 'insufficient_balance',\n  APPROVAL_REQUIRED: 'approval_required',\n  TRANSACTION_SIGNING: 'transaction_signing',\n  TRANSACTION_MINING: 'transaction_mining',\n  CONVENIENCE_FEE_INVALID: 'convenience_fee_invalid',\n  MAX_INTENTS_REACHED: 'max_intents_reached',\n  MIN_DEPOSIT_THRESHOLD_NOT_MET: 'min_deposit_threshold_not_met',\n  VALID: 'valid',\n  TRANSACTION_SUCCEEDED: 'transaction_succeeded'\n};\n\nexport type NewDepositTransactionStatusType = typeof NewDepositTransactionStatus[keyof typeof NewDepositTransactionStatus];\n\nexport const NewRevolutDepositTransactionStatus = {\n  ...NewDepositTransactionStatus,\n};\n\nexport type NewRevolutDepositTransactionStatusType = typeof NewRevolutDepositTransactionStatus[keyof typeof NewRevolutDepositTransactionStatus];"
  },
  {
    "path": "client/src/helpers/types/notarySettings.ts",
    "content": "export type NotaryConfiguration = {\n  name: string;\n  notary: string;\n  proxy: string;\n};\n\nexport const defaultNotaryConfigurations: NotaryConfiguration[] = [\n  {\n    name: 'North California',\n    notary: 'https://notary-us-west-1.zkp2p.xyz',\n    proxy: 'wss://notary-us-west-1.zkp2p.xyz/proxy',\n  },\n  {\n    name: 'Tokyo',\n    notary: 'https://notary-ap-northeast-1.zkp2p.xyz',\n    proxy: 'wss://notary-ap-northeast-1.zkp2p.xyz/proxy',\n  }\n];\n\nexport const NotaryConnectionStatus = {\n  GREEN: \"green\",\n  YELLOW: \"yellow\",\n  RED: \"red\",\n  DEFAULT: \"default\",\n};\n\nexport type NotaryConnectionStatusType = typeof NotaryConnectionStatus[keyof typeof NotaryConnectionStatus];\n"
  },
  {
    "path": "client/src/helpers/types/notaryVerification.ts",
    "content": "export const NotaryVerificationStatus = {\n  NOT_STARTED: \"not-started\",\n  GENERATING_INPUT: \"generating-input\",\n  UPLOADING_PROOF_FILES: \"uploading-proof-files\",\n  DOWNLOADING_PROOF_FILES: \"downloading-proof-files\",\n  GENERATING_PROOF: \"generating-proof\",\n  TRANSACTION_CONFIGURED: \"transaction-configured\",\n  TRANSACTION_LOADING: \"transaction-loading\",\n  TRANSACTION_MINING: \"transaction-mining\",\n  ERROR_BAD_INPUT: \"error-bad-input\",\n  ERROR_DOWNLOAD_FAILED: \"error-failed-to-download\",\n  ERROR_FAILED_TO_PROVE: \"error-failed-to-prove\",\n  DONE: \"done\"\n};\n\nexport const NotaryProofInputStatus = {\n  DEFAULT: \"default\",\n  INVALID_SIGNATURE: \"invalid-signature\",\n  INVALID_DOMAIN_KEY: \"invalid-domain-key\",\n  INVALID_SUBJECT: \"invalid-subject\",\n  VALID: \"valid\"\n};\n\nexport const NotaryVerificationCircuit = {\n  TRANSFER: 'transfer',\n  REGISTRATION_TAG: 'registration',\n};\n\nexport type NotaryVerificationCircuitType = typeof NotaryVerificationCircuit[keyof typeof NotaryVerificationCircuit];"
  },
  {
    "path": "client/src/helpers/types/paymentPlatform.ts",
    "content": "import americaFlagSvg from '../../assets/images/america-flag.svg';\nimport indiaFlagSvg from '../../assets/images/india-flag.svg';\nimport turkeyFlagSvg from '../../assets/images/turkey-flag.svg';\nimport europeFlagSvg from '../../assets/images/europe-flag.svg';\nimport ukFlagSvg from '../../assets/images/uk-flag.svg';\nimport singaporeFlagSvg from '../../assets/images/singapore-flag.svg';\n\n\nexport const PaymentPlatform = {\n  VENMO: \"venmo\",\n  HDFC: \"hdfc\",\n  GARANTI: \"garanti\",\n  REVOLUT: \"revolut\"\n};\n\nexport const CurrencyCode = {\n  USD: \"USD\",\n  INR: \"INR\",\n  TRY: \"TRY\",\n  EUR: \"EUR\",\n  GBP: \"GBP\",\n  SGD: \"SGD\",\n};\n\nexport const CurrencyIndex = {\n  DEFAULT: 0,\n  USD: 0,\n  INR: 0,\n  TRY: 0,\n  EUR: 0,\n  GBP: 1,\n  SGD: 2,\n  USD_REVOLUT: 3\n};\n\nfunction getPaymentPlatforms(): string[] {\n  let platforms = [\n    PaymentPlatform.VENMO,\n    // PaymentPlatform.HDFC,\n    PaymentPlatform.GARANTI,\n    PaymentPlatform.REVOLUT\n  ];\n\n  return platforms;\n};\n\nfunction getRevolutPlatformCurrencies(): CurrencyCodeType[] {\n  let currencies = [\n    CurrencyCode.EUR,\n    CurrencyCode.GBP,\n    CurrencyCode.SGD,\n    CurrencyCode.USD\n  ];\n\n  return currencies;\n};\n\nexport const paymentPlatforms = getPaymentPlatforms();\nexport type PaymentPlatformType = typeof PaymentPlatform[keyof typeof PaymentPlatform];\nexport type CurrencyCodeType = typeof CurrencyCode[keyof typeof CurrencyCode];\nexport type CurrencyIndexType = typeof CurrencyIndex[keyof typeof CurrencyIndex];\n\ninterface PaymentPlatformData {\n  platformId: PaymentPlatformType;\n  platformName: string;\n  platformCurrencies: CurrencyCodeType[];\n  flagSvgs: string[];\n}\n\nexport const paymentPlatformInfo: Record<PaymentPlatformType, PaymentPlatformData> = {\n  [PaymentPlatform.VENMO]: {\n    platformId: PaymentPlatform.VENMO,\n    platformName: 'Venmo',\n    platformCurrencies: [CurrencyCode.USD],\n    flagSvgs: [americaFlagSvg],\n  },\n  [PaymentPlatform.HDFC]: {\n    platformId: PaymentPlatform.HDFC,\n    platformName: 'HDFC',\n    platformCurrencies: [CurrencyCode.INR],\n    flagSvgs: [indiaFlagSvg],\n  },\n  [PaymentPlatform.GARANTI]: {\n    platformId: PaymentPlatform.GARANTI,\n    platformName: 'Garanti',\n    platformCurrencies: [CurrencyCode.TRY],\n    flagSvgs: [turkeyFlagSvg]\n  },\n  [PaymentPlatform.REVOLUT]: {\n    platformId: PaymentPlatform.REVOLUT,\n    platformName: 'Revolut',\n    platformCurrencies: getRevolutPlatformCurrencies(),\n    flagSvgs: [europeFlagSvg, ukFlagSvg, singaporeFlagSvg, americaFlagSvg]\n  }\n};\n"
  },
  {
    "path": "client/src/helpers/types/proofGeneration.ts",
    "content": "export const ProofGenerationStatus = {\n  NOT_STARTED: \"not-started\",\n  GENERATING_INPUT: \"generating-input\",\n  UPLOADING_PROOF_FILES: \"uploading-proof-files\",\n  DOWNLOADING_PROOF_FILES: \"downloading-proof-files\",\n  GENERATING_PROOF: \"generating-proof\",\n  TRANSACTION_CONFIGURED: \"transaction-configured\",\n  TRANSACTION_LOADING: \"transaction-loading\",\n  TRANSACTION_MINING: \"transaction-mining\",\n  ERROR_BAD_INPUT: \"error-bad-input\",\n  ERROR_DOWNLOAD_FAILED: \"error-failed-to-download\",\n  ERROR_FAILED_TO_PROVE: \"error-failed-to-prove\",\n  DONE: \"done\"\n};\n\nexport const EmailInputStatus = {\n  DEFAULT: \"default\",\n  INVALID_SIGNATURE: \"invalid-signature\",\n  INVALID_DOMAIN_KEY: \"invalid-domain-key\",\n  INVALID_SUBJECT: \"invalid-subject\",\n  VALID: \"valid\"\n};"
  },
  {
    "path": "client/src/helpers/types/receiveNetworks.ts",
    "content": "import arbitrumSvg from '../../assets/images/arbitrum.svg';\nimport avalancheSvg from '../../assets/images/avalanche.svg';\nimport baseSvg from '../../assets/images/base.svg';\nimport binanceSvg from '../../assets/images/bsc.svg';\nimport ethereumSvg from '../../assets/images/eth.svg';\nimport optimismSvg from '../../assets/images/optimism.svg';\nimport polygonSvg from '../../assets/images/polygon.svg';\nimport solanaSvg from '../../assets/images/solana.svg';\nimport zksyncSvg from '../../assets/images/zksync-era.svg';\n\n\n\nexport const ReceiveNetwork = {\n  ARBITRUM: \"arbitrum\",\n  AVALANCHE: \"avalanche\",\n  BASE: \"base\",\n  BINANCE: \"binance\",\n  ETHEREUM: \"ethereum\",\n  OPTIMISM: \"optimism\",\n  POLYGON: \"polygon\",\n  SOLANA: \"solana\",\n  ZKSYNC: \"zksync\",\n} as const;\n\nexport const receiveNetworks = [\n  ReceiveNetwork.BASE,\n  ReceiveNetwork.ZKSYNC,\n  // ReceiveNetwork.SOLANA, // not supported by socket\n  ReceiveNetwork.POLYGON,\n  ReceiveNetwork.ARBITRUM,\n  ReceiveNetwork.AVALANCHE,\n  ReceiveNetwork.BINANCE,\n  ReceiveNetwork.OPTIMISM,\n  ReceiveNetwork.ETHEREUM,\n];\n\nexport type ReceiveNetworkType = typeof ReceiveNetwork[keyof typeof ReceiveNetwork];\n\ninterface NetworksData {\n  networkId: ReceiveNetworkType;\n  networkName: string;\n  networkSvg: string;\n  networkChainId: string;\n  blockExplorer: string;\n}\n\nexport const networksInfo: Record<ReceiveNetworkType, NetworksData> = {\n  [ReceiveNetwork.ARBITRUM]: {\n    networkId: ReceiveNetwork.ARBITRUM,\n    networkName: 'Arbitrum',\n    networkSvg: arbitrumSvg,\n    networkChainId: '42161',\n    blockExplorer: 'https://arbiscan.io'\n  },\n  [ReceiveNetwork.AVALANCHE]: {\n    networkId: ReceiveNetwork.AVALANCHE,\n    networkName: 'Avalanche',\n    networkSvg: avalancheSvg,\n    networkChainId: '43114',\n    blockExplorer: 'https://snowtrace.io'\n  },\n  [ReceiveNetwork.BASE]: {\n    networkId: ReceiveNetwork.BASE,\n    networkName: 'Base',\n    networkSvg: baseSvg,\n    networkChainId: '8453',\n    blockExplorer: 'https://basescan.org'\n  },\n  [ReceiveNetwork.BINANCE]: {\n    networkId: ReceiveNetwork.BINANCE,\n    networkName: 'Binance',\n    networkSvg: binanceSvg,\n    networkChainId: '56',\n    blockExplorer: 'https://bscscan.com'\n  },\n  [ReceiveNetwork.ETHEREUM]: {\n    networkId: ReceiveNetwork.ETHEREUM,\n    networkName: 'Ethereum',\n    networkSvg: ethereumSvg,\n    networkChainId: '1',\n    blockExplorer: 'https://etherscan.io'\n  },\n  [ReceiveNetwork.OPTIMISM]: {\n    networkId: ReceiveNetwork.OPTIMISM,\n    networkName: 'Optimism',\n    networkSvg: optimismSvg,\n    networkChainId: '10',\n    blockExplorer: 'https://optimistic.etherscan.io'\n  },\n  [ReceiveNetwork.SOLANA]: {\n    networkId: ReceiveNetwork.SOLANA,\n    networkName: 'Solana',\n    networkSvg: solanaSvg,\n    networkChainId: '1151111081099710',\n    blockExplorer: 'https://solscan.io'\n  },\n  [ReceiveNetwork.POLYGON]: {\n    networkId: ReceiveNetwork.POLYGON,\n    networkName: 'Polygon',\n    networkSvg: polygonSvg,\n    networkChainId: '137',\n    blockExplorer: 'https://polygonscan.com'\n  },\n  [ReceiveNetwork.ZKSYNC]: {\n    networkId: ReceiveNetwork.ZKSYNC,\n    networkName: 'zkSync',\n    networkSvg: zksyncSvg,\n    networkChainId: '324',\n    blockExplorer: 'https://explorer.zksync.io'\n  },\n};\n"
  },
  {
    "path": "client/src/helpers/types/receiveTokens.ts",
    "content": "import { ReceiveNetworkType, ReceiveNetwork } from \"./\";\n\n\nexport const ReceiveToken = {\n  USDC: \"USDC\",\n  USDT: \"USDT\",\n  ETH: \"ETH\",\n} as const;\n\nexport const receiveTokens = [\n  ReceiveToken.USDC,\n  ReceiveToken.USDT,\n  ReceiveToken.ETH\n];\n\nexport type ReceiveTokenType = keyof typeof ReceiveToken;\n\nexport const networkSupportedTokens: Record<ReceiveNetworkType, ReceiveTokenType[]> = {\n  [ReceiveNetwork.ARBITRUM]: [\n    ReceiveToken.USDC,\n    ReceiveToken.ETH\n  ],\n  [ReceiveNetwork.AVALANCHE]: [\n    ReceiveToken.USDC,\n    ReceiveToken.USDT\n  ],\n  [ReceiveNetwork.BASE]: [\n    ReceiveToken.USDC,\n    ReceiveToken.ETH\n  ],\n  [ReceiveNetwork.BINANCE]: [\n    ReceiveToken.USDT\n  ],\n  [ReceiveNetwork.ETHEREUM]: [\n    ReceiveToken.USDC,\n    ReceiveToken.USDT,\n    ReceiveToken.ETH\n  ],\n  [ReceiveNetwork.SOLANA]: [\n    ReceiveToken.USDC,\n  ],\n  [ReceiveNetwork.OPTIMISM]: [\n    ReceiveToken.USDC,\n    ReceiveToken.ETH\n  ],\n  [ReceiveNetwork.POLYGON]: [\n    ReceiveToken.USDC,\n    ReceiveToken.USDT\n  ],\n  [ReceiveNetwork.ZKSYNC]: [\n    ReceiveToken.USDC,\n    ReceiveToken.ETH\n  ],\n};\n\nexport type ReceiveTokenData = {\n  address: string;\n  symbol: string;\n  decimals: number;\n  name: string;\n  logoURI: string;\n};\n\nexport type ReceiveTokensMap = {\n  [key in ReceiveNetworkType]: { [key in ReceiveTokenType]?: ReceiveTokenData };\n};\n\nexport const baseUSDCTokenData: ReceiveTokenData = {\n  \"name\": \"USD Coin\",\n  \"symbol\": \"USDC\",\n  \"decimals\": 6,\n  \"address\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n  \"logoURI\": \"https://static.debank.com/image/coin/logo_url/usdc/e87790bfe0b3f2ea855dc29069b38818.png\"\n};\n\nexport const receiveTokenData: ReceiveTokensMap = {\n  // Ethereum mainnet\n  [ReceiveNetwork.ETHEREUM]: {\n    USDC: {\n      \"name\": \"USD Coin\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    USDT: {\n      \"name\": \"Tether\",\n      \"symbol\": \"USDT\",\n      \"decimals\": 6,\n      \"address\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n    },\n    ETH: {\n      \"name\": \"Ethereum\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"address\": \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  },\n\n  // Base\n  [ReceiveNetwork.BASE]: {\n    USDC: baseUSDCTokenData,\n    ETH: {\n      \"name\": \"Ethereum\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"address\": \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  },\n\n  // Solana\n  [ReceiveNetwork.SOLANA]: {\n    USDC: {\n      \"name\": \"USD Coin\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"address\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    }\n  },\n\n  // Polygon\n  [ReceiveNetwork.POLYGON]: {\n    USDC: {\n      \"name\": \"Bridged USD Coin\",\n      \"symbol\": \"USDC\", // \"USDC.e\"\n      \"decimals\": 6,\n      \"address\": \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    USDT: {\n      \"name\": \"Tether\",\n      \"symbol\": \"USDT\",\n      \"decimals\": 6,\n      \"address\": \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n    }\n  },\n\n  // Arbitrum\n  [ReceiveNetwork.ARBITRUM]: {\n    USDC: {\n      \"name\": \"USD Coin\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"address\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    ETH: {\n      \"name\": \"Ethereum\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"address\": \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    },\n  },\n\n  // Optimism\n  [ReceiveNetwork.OPTIMISM]: {\n    USDC: {\n      \"name\": \"Bridged USD Coin\",\n      \"symbol\": \"USDC\", // \"USDC.e\"\n      \"decimals\": 6,\n      \"address\": \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    ETH: {\n      \"name\": \"Ethereum\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"address\": \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  },\n\n  // Binance Smart Chains\n  [ReceiveNetwork.BINANCE]: {\n    USDT: {\n      \"name\": \"Tether\",\n      \"symbol\": \"USDT\",\n      \"decimals\": 18,\n      \"address\": \"0x55d398326f99059fF775485246999027B3197955\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n    }\n  },\n\n  // ZKSync\n  [ReceiveNetwork.ZKSYNC]: {\n    USDC: {\n      \"name\": \"USD Coin\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"address\": \"0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    ETH: {\n      \"name\": \"Ethereum\",\n      \"symbol\": \"ETH\",\n      \"decimals\": 18,\n      \"address\": \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\",\n    }\n  },\n\n  // Avalanche\n  [ReceiveNetwork.AVALANCHE]: {\n    USDC: {\n      \"name\": \"USD Coin\",\n      \"symbol\": \"USDC\",\n      \"decimals\": 6,\n      \"address\": \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n      \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n    },\n    USDT: {\n      \"name\": \"Tether\",\n      \"symbol\": \"USDT\",\n      \"decimals\": 6,\n      \"address\": \"0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7\",\n      \"logoURI\": \"https://static.debank.com/image/coin/logo_url/usdt/23af7472292cb41dc39b3f1146ead0fe.png\",\n    }\n  },\n  \n  // Solana\n  // 'solana': {\n  //   {\n  //     \"address\": \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n  //     \"symbol\": \"USDT\",\n  //     \"decimals\": 6,\n  //     \"name\": \"USDT\",\n  //     \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\",\n  //   },\n  //   {\n  //     \"address\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  //     \"symbol\": \"USDC\",\n  //     \"decimals\": 6,\n  //     \"name\": \"USD Coin\",\n  //     \"logoURI\": \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\",\n  //   }\n  // }\n};\n"
  },
  {
    "path": "client/src/helpers/types/registration.ts",
    "content": "import { Deposit } from \"@helpers/types\";\n\n\n// struct AccountInfo {\n//   bytes32 venmoIdHash;\n//   uint256[] deposits;\n// }\nexport interface AccountInfo {\n  venmoIdHash: string;\n  deposits: Deposit[];\n}\n"
  },
  {
    "path": "client/src/helpers/types/sendStatus.ts",
    "content": "export const SendTransactionStatus = {\n  DEFAULT: 'default',\n  FETCHING_QUOTE: 'fetching_quote',\n  APPROVAL_REQUIRED: 'approval_required',\n  INVALID_ROUTES: 'invalid_routes',\n  INVALID_RECIPIENT_ADDRESS: 'invalid_recipient_address',\n  MISSING_AMOUNTS: 'missing_amounts',\n  INSUFFICIENT_BALANCE: 'insufficient_balance',\n  TRANSACTION_SIGNING: 'transaction_signing',\n  TRANSACTION_MINING: 'transaction_mining',\n  VALID_FOR_NATIVE_TRANSFER: 'valid_for_native_transfer',\n  VALID_FOR_BRIDGE: 'valid_for_bridge',\n  VALID_FOR_BATCH_TRANSFER_BRIDGE: 'valid_for_batch_transfer_bridge',\n  TRANSACTION_SUCCEEDED: 'transaction_succeeded'\n};\n\nexport type SendTransactionStatusType = typeof SendTransactionStatus[keyof typeof SendTransactionStatus];\n\n\nexport const FetchQuoteStatus = {\n  DEFAULT: 'default',\n  LOADING: 'loading',\n  LOADED: 'loaded',\n};\n\nexport type FetchQuoteStatusType = typeof FetchQuoteStatus[keyof typeof FetchQuoteStatus];\n"
  },
  {
    "path": "client/src/helpers/types/smartContracts.ts",
    "content": "export type AbiEntry = {\n  constant?: boolean;\n  payable?: boolean;\n  anonymous?: boolean;\n  inputs?: Array<{\n    name?: string;\n    type: string;\n    indexed?: boolean;\n    internalType?: string;\n  }>;\n  outputs?: Array<{\n    name?: string;\n    type: string;\n    internalType?: string;\n  }>;\n  name?: string;\n  type: string;\n  stateMutability?: \"nonpayable\" | \"payable\" | \"view\" | \"pure\";\n  events?: Record<string, AbiEntry>;\n};\n\nexport type Abi = AbiEntry[];\n"
  },
  {
    "path": "client/src/helpers/types/transactionStatus.ts",
    "content": "export const TransactionStatus = {\n  TRANSACTION_CONFIGURED: \"transaction-configured\",\n  TRANSACTION_LOADING: \"transaction-loading\",\n  TRANSACTION_MINING: \"transaction-mining\",\n  TRANSACTION_MINED: \"transaction-mined\",\n};\n\nexport type TransactionStatusType = typeof TransactionStatus[keyof typeof TransactionStatus];"
  },
  {
    "path": "client/src/helpers/uncompress.test.ts",
    "content": "import { StringDecoder } from \"string_decoder\";\nimport { uncompressGz as uncompress } from \"./uncompress\";\nimport fs from 'fs';\n\nconst getCompressedTestFile = (): ArrayBuffer => {\n  const buffer = fs.readFileSync(`${__dirname}/../__fixtures__/compressed-files/compressed.txt.gz`);\n  return buffer;\n}\n\nconst getUncompressedTestFile = (): ArrayBuffer => {\n  const buffer = fs.readFileSync(`${__dirname}/../__fixtures__/compressed-files/uncompressed-value.txt`);\n  return buffer;\n}\n\ndescribe('Uncompress GZ file', () => {\n  test('Uncompresss a GZ file', async () => {\n    const decoder = new StringDecoder('utf8');\n    const compressedArrayBuffer: ArrayBuffer = getCompressedTestFile();\n    const expectedArrayBuffer: ArrayBuffer = getUncompressedTestFile();\n    const expectedString = decoder.write(Buffer.from(expectedArrayBuffer));\n    const uncompressedArrayBuffer = await uncompress(compressedArrayBuffer);\n    const uncompressedString = decoder.write(Buffer.from(uncompressedArrayBuffer));\n    expect(uncompressedString).toBe(expectedString);\n  });\n});"
  },
  {
    "path": "client/src/helpers/uncompress.ts",
    "content": "import pako from 'pako';\n\n// uncompresses single .gz file.\n// returns the contents as an ArrayBuffer\nexport const uncompressGz =  async (arrayBuffer: ArrayBuffer): Promise<ArrayBuffer> => {\n  const output = pako.ungzip(arrayBuffer);\n  const buff = output.buffer;\n  return buff;\n}\n"
  },
  {
    "path": "client/src/helpers/units.ts",
    "content": "import { PRECISION } from \"@helpers/constants\";\n\n\nexport const toBigInt = (amount: string): bigint => {\n  const [whole, fraction = ''] = amount.split('.');\n  const paddedFraction = (fraction + '000000').slice(0, 6);  // Pad or truncate fraction to 6 decimal places\n  const integerRepresentation = whole + paddedFraction;\n  return BigInt(integerRepresentation);\n};\n\nexport const toUsdcString = (amount: bigint, includeCommas: boolean = false): string => {\n  let amountString = amount.toString();\n  // Pad with leading zeros if necessary\n  amountString = amountString.padStart(7, '0');\n\n  // Insert decimal point 6 places from the right\n  const wholePart = amountString.slice(0, -6);\n  let fractionalPart = amountString.slice(-6);\n\n  // Trim trailing zeros from the fractional part\n  fractionalPart = fractionalPart.replace(/0+$/, '');\n\n  // If all digits were zeros, ensure at least one zero remains\n  if (fractionalPart.length === 0) {\n    fractionalPart = '0';\n  }\n\n  if (includeCommas) {\n    const formattedWholePart = new Intl.NumberFormat().format(parseInt(wholePart, 10));\n    if (fractionalPart === '0') {\n      return formattedWholePart;\n    }\n\n    let result = `${formattedWholePart}.${fractionalPart}`;\n    result = result.replace(/^,/, '');\n\n    return result;\n  } else {\n    let result = `${wholePart}.${fractionalPart}`;\n\n    return parseFloat(result).toString();\n  }\n};\n\nexport const toUsdString = (amount: bigint): string => {\n  const usdcString = toUsdcString(amount);\n  const parts = usdcString.split('.');\n\n  let wholePart = parts[0];\n  let decimalPart = parts.length > 1 ? parts[1].substring(0, 2) : '00';\n\n  // Check if we need to round up\n  if (parts.length > 1 && parts[1].length > 2 && parts[1][2] >= '5') {\n    const decimalAsNumber = parseInt(decimalPart, 10) + 1;\n\n    // Check if rounding up caused a carry-over\n    if (decimalAsNumber === 100) {\n      decimalPart = '00';\n      wholePart = (parseInt(wholePart, 10) + 1).toString();\n    } else {\n      decimalPart = decimalAsNumber.toString().padStart(2, '0');\n    }\n  }\n\n  return `${wholePart}.${decimalPart}`;\n};\n\nexport function conversionRateToPercentageString(rate: bigint, premiumForOffRamper: boolean = false): string {\n  const scaledValue = rate * PRECISION;\n  const reciprocal = (PRECISION * (10000n * PRECISION)) / scaledValue;\n\n  const adjustedRate = Number(reciprocal - 10000n);\n  const percentage = Math.abs(adjustedRate / 100);\n\n  let percentageSign;\n  if (premiumForOffRamper) {\n    percentageSign = adjustedRate >= 0 ? \"+\" : \"–\";\n  } else {\n    percentageSign = adjustedRate >= 0 ? \"–\" : \"+\";\n  }\n\n  let percentageString = percentageSign + percentage.toFixed(2);\n  percentageString = percentageString.replace(/\\.00$|0$/, '');\n\n  return percentageString + '%';\n};\n\nexport function conversionRateToMultiplierString(rate: bigint): string {\n  const scaledValue = BigInt(rate) * PRECISION;\n  const reciprocal = (PRECISION * (10000n * PRECISION)) / scaledValue;\n\n  const adjustedRate = Number(reciprocal - 10000n);\n  const percentage = adjustedRate / 10000;\n\n  const conversionRatio = 1 + percentage;\n\n  let ratioString = conversionRatio.toFixed(3);\n  ratioString = ratioString.replace(/(\\.\\d*?[1-9])0+$|\\.0+$/, '$1');\n\n  return ratioString;\n};\n\nexport function calculateConversionRate(depositAmount: string, receiveAmount: string): string {\n  const deposit = toBigInt(depositAmount);\n  const receive = toBigInt(receiveAmount);\n\n  if (deposit === 0n || receive === 0n) {\n    return '0';\n  }\n\n  return conversionRateToMultiplierString((PRECISION * deposit) / receive);\n}\n\nexport function toEthString(value: bigint): string {\n  if (typeof value !== 'bigint') {\n    return '0';\n  }\n\n  const reducedValue = value / BigInt(1e15);  \n  const ethValue = Number(reducedValue) / 1e3;\n\n  return ethValue.toFixed(3);\n};\n\nexport function toEthStringLong(value: bigint): string {\n  if (typeof value !== 'bigint') {\n    return '0';\n  }\n\n  const valueStr = value.toString();\n  const decimals = 18;\n  const precision = 9;\n\n  const paddedValue = valueStr.padStart(decimals + 1, '0');\n  const splitPosition = paddedValue.length - decimals;\n\n  const integerPart = paddedValue.substring(0, splitPosition) || '0';\n  const fractionalPart = paddedValue.substring(splitPosition).padEnd(decimals, '0');\n  const ethValue = `${integerPart}.${fractionalPart.substring(0, precision)}`;\n\n  const formattedEthValue = parseFloat(ethValue).toFixed(precision).replace(/\\.?0+$/, '');\n\n  return formattedEthValue;\n};\n\nexport function toTokenString(value: bigint, decimals: number): string {\n  if (decimals === 18) {\n    return toEthStringLong(value);\n  } else {\n    return toUsdcString(value);\n  }\n};\n"
  },
  {
    "path": "client/src/helpers/verifiers/registration_vkey.ts",
    "content": "export const vkey = {\n  \"protocol\": \"groth16\",\n  \"curve\": \"bn128\",\n  \"nPublic\": 5,\n  \"vk_alpha_1\": [\n   \"20491192805390485299153009773594534940189261866228447918068658471970481763042\",\n   \"9383485363053290200918347156157836566562967994039712273449902621266178545958\",\n   \"1\"\n  ],\n  \"vk_beta_2\": [\n   [\n    \"6375614351688725206403948262868962793625744043794305715222011528459656738731\",\n    \"4252822878758300859123897981450591353533073413197771768651442665752259397132\"\n   ],\n   [\n    \"10505242626370262277552901082094356697409835680220590971873171140371331206856\",\n    \"21847035105528745403288232691147584728191162732299865338377159692350059136679\"\n   ],\n   [\n    \"1\",\n    \"0\"\n   ]\n  ],\n  \"vk_gamma_2\": [\n   [\n    \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n    \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n   ],\n   [\n    \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n    \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n   ],\n   [\n    \"1\",\n    \"0\"\n   ]\n  ],\n  \"vk_delta_2\": [\n   [\n    \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n    \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n   ],\n   [\n    \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n    \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n   ],\n   [\n    \"1\",\n    \"0\"\n   ]\n  ],\n  \"vk_alphabeta_12\": [\n   [\n    [\n     \"2029413683389138792403550203267699914886160938906632433982220835551125967885\",\n     \"21072700047562757817161031222997517981543347628379360635925549008442030252106\"\n    ],\n    [\n     \"5940354580057074848093997050200682056184807770593307860589430076672439820312\",\n     \"12156638873931618554171829126792193045421052652279363021382169897324752428276\"\n    ],\n    [\n     \"7898200236362823042373859371574133993780991612861777490112507062703164551277\",\n     \"7074218545237549455313236346927434013100842096812539264420499035217050630853\"\n    ]\n   ],\n   [\n    [\n     \"7077479683546002997211712695946002074877511277312570035766170199895071832130\",\n     \"10093483419865920389913245021038182291233451549023025229112148274109565435465\"\n    ],\n    [\n     \"4595479056700221319381530156280926371456704509942304414423590385166031118820\",\n     \"19831328484489333784475432780421641293929726139240675179672856274388269393268\"\n    ],\n    [\n     \"11934129596455521040620786944827826205713621633706285934057045369193958244500\",\n     \"8037395052364110730298837004334506829870972346962140206007064471173334027475\"\n    ]\n   ]\n  ],\n  \"IC\": [\n   [\n    \"3638055976240676950045914605184426186597004615745986686038953406245495055165\",\n    \"16580564302397884894686747371614621505423818050264105408618492724162463600258\",\n    \"1\"\n   ],\n   [\n    \"13671799550941101337898911366005654157020554619411235724918392849720960126453\",\n    \"9063600987533983624206648551897772287475948902669090658947862707506221067536\",\n    \"1\"\n   ],\n   [\n    \"10717460343505877625375213399740772334181119576331451830359099103494342280998\",\n    \"21392639189263189008410083767410230716792241451084607416269790595121148311396\",\n    \"1\"\n   ],\n   [\n    \"4424627419458254518939352063068558728162230397785436024066659393088990984847\",\n    \"17495470518296234486945548814862132872393269764961428069427993893495233443459\",\n    \"1\"\n   ],\n   [\n    \"20819625066663493543415726212141879670533970698639812938463547784617922895791\",\n    \"12155160903133221011449346469637692449020342959468404811727829377687555417180\",\n    \"1\"\n   ],\n   [\n    \"909148778728537069800451405495423362225514068773347186404420088866799591084\",\n    \"8254929490013229888848574330702196604654492185521547568824138621285335703831\",\n    \"1\"\n   ]\n  ]\n };\n "
  },
  {
    "path": "client/src/helpers/verifiers/send_vkey.ts",
    "content": "export const vkey = {\n  \"protocol\": \"groth16\",\n  \"curve\": \"bn128\",\n  \"nPublic\": 10,\n  \"vk_alpha_1\": [\n   \"20491192805390485299153009773594534940189261866228447918068658471970481763042\",\n   \"9383485363053290200918347156157836566562967994039712273449902621266178545958\",\n   \"1\"\n  ],\n  \"vk_beta_2\": [\n   [\n    \"6375614351688725206403948262868962793625744043794305715222011528459656738731\",\n    \"4252822878758300859123897981450591353533073413197771768651442665752259397132\"\n   ],\n   [\n    \"10505242626370262277552901082094356697409835680220590971873171140371331206856\",\n    \"21847035105528745403288232691147584728191162732299865338377159692350059136679\"\n   ],\n   [\n    \"1\",\n    \"0\"\n   ]\n  ],\n  \"vk_gamma_2\": [\n   [\n    \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n    \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n   ],\n   [\n    \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n    \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n   ],\n   [\n    \"1\",\n    \"0\"\n   ]\n  ],\n  \"vk_delta_2\": [\n   [\n    \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n    \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n   ],\n   [\n    \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n    \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n   ],\n   [\n    \"1\",\n    \"0\"\n   ]\n  ],\n  \"vk_alphabeta_12\": [\n   [\n    [\n     \"2029413683389138792403550203267699914886160938906632433982220835551125967885\",\n     \"21072700047562757817161031222997517981543347628379360635925549008442030252106\"\n    ],\n    [\n     \"5940354580057074848093997050200682056184807770593307860589430076672439820312\",\n     \"12156638873931618554171829126792193045421052652279363021382169897324752428276\"\n    ],\n    [\n     \"7898200236362823042373859371574133993780991612861777490112507062703164551277\",\n     \"7074218545237549455313236346927434013100842096812539264420499035217050630853\"\n    ]\n   ],\n   [\n    [\n     \"7077479683546002997211712695946002074877511277312570035766170199895071832130\",\n     \"10093483419865920389913245021038182291233451549023025229112148274109565435465\"\n    ],\n    [\n     \"4595479056700221319381530156280926371456704509942304414423590385166031118820\",\n     \"19831328484489333784475432780421641293929726139240675179672856274388269393268\"\n    ],\n    [\n     \"11934129596455521040620786944827826205713621633706285934057045369193958244500\",\n     \"8037395052364110730298837004334506829870972346962140206007064471173334027475\"\n    ]\n   ]\n  ],\n  \"IC\": [\n   [\n    \"5253565342273198592883897010320130582847516807731630949558916452692574831217\",\n    \"9662322202070248628213725915817479757570062267514896029379486038336369929233\",\n    \"1\"\n   ],\n   [\n    \"21698866184277031621793740117837253040456393749773762188162546274869786069864\",\n    \"5187138742468722685128672611961368023418558888401698543487693126541304393676\",\n    \"1\"\n   ],\n   [\n    \"12753288914010911036918268717867698157960192904293862522762135152271065437412\",\n    \"16721436319168409689932533872234980619515097317190763083505777888444171936073\",\n    \"1\"\n   ],\n   [\n    \"20844780833153347465501410407587748645067767399246884156186156356505404547420\",\n    \"4179888423477334488134092046921383865686183896272435474253976436725039347861\",\n    \"1\"\n   ],\n   [\n    \"8740820822901849117277579595955759924566093227561988642503491844674763453328\",\n    \"1419347962894269139497613263726715789708033059967614143311781818735095971368\",\n    \"1\"\n   ],\n   [\n    \"14850818706781981842294122727739017505456137841658056100020237006026576080277\",\n    \"7440111411683722231975351364348053501250216974156752728042829353731317122357\",\n    \"1\"\n   ],\n   [\n    \"10392959522715085960429506171746219298280155010169025671574975948047369517938\",\n    \"9427913884521098205021380028834311206518142250038733528217666552228391884656\",\n    \"1\"\n   ],\n   [\n    \"18176351483636079227216569428150507502179399901366010587347513740646448474102\",\n    \"5035595222405910894229259092909024127683934701873402387973042552718635096934\",\n    \"1\"\n   ],\n   [\n    \"5901643112378580547255961564763945918950839587811019165578030635674449830434\",\n    \"7371818062150288322598341713424125891159053618617631138472591678845714118470\",\n    \"1\"\n   ],\n   [\n    \"20286789177253888335044432842039693807640974783023344368779084850963089342103\",\n    \"13711976627769946952216324205179456239846467270080081050292212510571569474774\",\n    \"1\"\n   ],\n   [\n    \"7329442995273785010671533581965386367698796421098341665913955720449703260549\",\n    \"18900760962884614285066622591546223052323667430440329182440003040714923375353\",\n    \"1\"\n   ]\n  ]\n };\n"
  },
  {
    "path": "client/src/hooks/garanti/useDeposits.ts",
    "content": "import { useContext } from 'react';\n\nimport { DepositsContext } from '../../contexts/garanti/Deposits';\n\nconst useDeposits = () => {\n  return { ...useContext(DepositsContext) };\n}\n\nexport default useDeposits;\n"
  },
  {
    "path": "client/src/hooks/garanti/useLiquidity.ts",
    "content": "import { useContext } from 'react';\n\nimport { LiquidityContext } from '../../contexts/garanti/Liquidity';\n\nconst useLiquidity = () => {\n  return { ...useContext(LiquidityContext) }\n};\n\nexport default useLiquidity;\n"
  },
  {
    "path": "client/src/hooks/garanti/useOnRamperIntents.ts",
    "content": "import { useContext } from 'react';\n\nimport { OnRamperIntentsContext } from '../../contexts/garanti/OnRamperIntents';\n\nconst useOnRamperIntents = () => {\n  return { ...useContext(OnRamperIntentsContext) }\n}\n\nexport default useOnRamperIntents;\n"
  },
  {
    "path": "client/src/hooks/garanti/useRampState.ts",
    "content": "import { useContext } from 'react';\n\nimport { RampContext } from '../../contexts/garanti/Ramp';\n\nconst useRampState = () => {\n  return { ...useContext(RampContext) }\n}\n\nexport default useRampState;\n"
  },
  {
    "path": "client/src/hooks/garanti/useRegistration.ts",
    "content": "import { useContext } from 'react';\n\nimport { RegistrationContext } from '../../contexts/garanti/Registration';\n\nconst useRegistration = () => {\n  return { ...useContext(RegistrationContext) }\n};\n\nexport default useRegistration;\n"
  },
  {
    "path": "client/src/hooks/hdfc/useDeposits.ts",
    "content": "import { useContext } from 'react';\n\nimport { DepositsContext } from '../../contexts/hdfc/Deposits';\n\nconst useDeposits = () => {\n  return { ...useContext(DepositsContext) };\n}\n\nexport default useDeposits;\n"
  },
  {
    "path": "client/src/hooks/hdfc/useLiquidity.ts",
    "content": "import { useContext } from 'react';\n\nimport { LiquidityContext } from '../../contexts/hdfc/Liquidity';\n\nconst useLiquidity = () => {\n  return { ...useContext(LiquidityContext) }\n};\n\nexport default useLiquidity;\n"
  },
  {
    "path": "client/src/hooks/hdfc/useOnRamperIntents.ts",
    "content": "import { useContext } from 'react';\n\nimport { OnRamperIntentsContext } from '../../contexts/hdfc/OnRamperIntents';\n\nconst useOnRamperIntents = () => {\n  return { ...useContext(OnRamperIntentsContext) }\n}\n\nexport default useOnRamperIntents;\n"
  },
  {
    "path": "client/src/hooks/hdfc/useRampState.ts",
    "content": "import { useContext } from 'react';\n\nimport { RampContext } from '../../contexts/hdfc/Ramp';\n\nconst useRampState = () => {\n  return { ...useContext(RampContext) }\n}\n\nexport default useRampState;\n"
  },
  {
    "path": "client/src/hooks/hdfc/useRegistration.ts",
    "content": "import { useContext } from 'react';\n\nimport { RegistrationContext } from '../../contexts/hdfc/Registration';\n\nconst useRegistration = () => {\n  return { ...useContext(RegistrationContext) }\n};\n\nexport default useRegistration;\n"
  },
  {
    "path": "client/src/hooks/revolut/useDeposits.ts",
    "content": "import { useContext } from 'react';\n\nimport { DepositsContext } from '../../contexts/revolut/Deposits';\n\nconst useDeposits = () => {\n  return { ...useContext(DepositsContext) };\n};\n\nexport default useDeposits;\n"
  },
  {
    "path": "client/src/hooks/revolut/useLiquidity.ts",
    "content": "import { useContext } from 'react';\n\nimport { LiquidityContext } from '../../contexts/revolut/Liquidity';\n\nconst useLiquidity = () => {\n  return { ...useContext(LiquidityContext) }\n};\n\nexport default useLiquidity;\n"
  },
  {
    "path": "client/src/hooks/revolut/useOnRamperIntents.ts",
    "content": "import { useContext } from 'react';\n\nimport { OnRamperIntentsContext } from '../../contexts/revolut/OnRamperIntents';\n\nconst useOnRamperIntents = () => {\n  return { ...useContext(OnRamperIntentsContext) }\n};\n\nexport default useOnRamperIntents;\n"
  },
  {
    "path": "client/src/hooks/revolut/useRampState.ts",
    "content": "import { useContext } from 'react';\n\nimport { RampContext } from '../../contexts/revolut/Ramp';\n\nconst useRampState = () => {\n  return { ...useContext(RampContext) }\n};\n\nexport default useRampState;\n"
  },
  {
    "path": "client/src/hooks/revolut/useRegistration.ts",
    "content": "import { useContext } from 'react';\n\nimport { RegistrationContext } from '../../contexts/revolut/Registration';\n\nconst useRegistration = () => {\n  return { ...useContext(RegistrationContext) }\n};\n\nexport default useRegistration;\n"
  },
  {
    "path": "client/src/hooks/useAccount.ts",
    "content": "import { useContext } from 'react'\n\nimport { AccountContext } from '../contexts/common/Account'\n\nconst useAccount = () => {\n  return { ...useContext(AccountContext) }\n}\n\nexport default useAccount\n"
  },
  {
    "path": "client/src/hooks/useBalance.ts",
    "content": "import { useContext } from 'react'\n\nimport { BalancesContext } from '../contexts/common/Balances'\n\nconst useBalances = () => {\n  return { ...useContext(BalancesContext) }\n}\n\nexport default useBalances\n"
  },
  {
    "path": "client/src/hooks/useBrowserExtension.ts",
    "content": "export type ExtensionEventMessage = {\n  origin: string;\n  data: {\n    type: string;\n    status: string;\n    requestHistory: {\n      notaryRequests: ExtensionNotaryProofRequest[];\n    };\n  }\n};\n\nexport type ExtensionEventVersionMessage = {\n  origin: string;\n  data: {\n    type: string;\n    status: string;\n    version: string;\n  }\n};\n\nexport type ExtensionNotaryProofRequest = {\n  body: string,\n  headers: string,\n  id: string,\n  maxTranscriptSize: number,\n  method: string,\n  notaryUrl: string,\n  proof: any,                 // returned as an object\n  secretHeaders: string[],\n  secretResps: string[],\n  status: string,\n  url: string,\n  verification: any,          // returned as an object\n  metadata: any,              // different depending on the notarization\n  websocketProxyUrl: string,\n};\n\nexport const ExtensionPostMessage = {\n  FETCH_EXTENSION_VERSION: \"fetch_extension_version\",\n  FETCH_PROFILE_REQUEST_HISTORY: \"fetch_profile_request_history\",\n  FETCH_TRANSFER_REQUEST_HISTORY: \"fetch_transfer_request_history\",\n  POST_ONRAMPER_INTENT: \"post_onramper_intent\",\n  OPEN_SIDEBAR_REGISTRATION: \"open_sidebar_registration\",\n  OPEN_SIDEBAR_ONRAMP: \"open_sidebar_onramp\",\n};\n\nexport const ExtensionReceiveMessage = {\n  EXTENSION_VERSION_RESPONSE: \"extension_version_response\",\n  PROFILE_REQUEST_HISTORY_RESPONSE: \"profile_request_history_response\",\n  TRANSFER_REQUEST_HISTORY_RESPONSE: \"transfer_request_history_response\",\n};\n"
  },
  {
    "path": "client/src/hooks/useDenyList.ts",
    "content": "import { useContext } from 'react'\n\nimport { DenyListContext } from '../contexts/common/DenyList'\n\nconst useDenyList = () => {\n  return { ...useContext(DenyListContext) }\n}\n\nexport default useDenyList;\n"
  },
  {
    "path": "client/src/hooks/useDevice.ts",
    "content": "export const useDevice = () => {\n  const isMobile = () => {\n    const userAgent = typeof window.navigator === \"undefined\" ? \"\" : navigator.userAgent;\n    return /Android|iPhone|iPad|iPod|BlackBerry|Windows Phone/i.test(userAgent);\n  };\n\n  return {\n    isMobile,\n  };\n}"
  },
  {
    "path": "client/src/hooks/useDragAndDrop.ts",
    "content": "import React, { useCallback, useState } from \"react\";\n\n\nexport const useDragAndDrop = () => {\n  const [dragging, setDragging] = useState(false);\n\n  const handleDragEnter = useCallback((e: React.DragEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    setDragging(true);\n  }, []);\n\n  const handleDragLeave = useCallback((e: React.DragEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    setDragging(false);\n  }, []);\n\n  const handleDragOver = useCallback((e: React.DragEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n  }, []);\n\n  const handleDrop = useCallback(\n    (e: React.DragEvent, onDrop: (file: File) => void) => {\n      e.preventDefault();\n      e.stopPropagation();\n      setDragging(false);\n\n      const files = e.dataTransfer.files;\n\n      if (files.length > 0) {\n        onDrop(files[0]);\n      }\n    },\n    []\n  );\n\n  const handleDragEnd = useCallback((e: React.DragEvent) => {\n\t\te.preventDefault();\n\t\tsetDragging(false);\n  }, []);\n\n  return {\n    dragging,\n    handleDragEnter,\n    handleDragLeave,\n    handleDragOver,\n    handleDrop,\n    handleDragEnd,\n  };\n};\n"
  },
  {
    "path": "client/src/hooks/useExtensionNotarizations.ts",
    "content": "import { useContext } from 'react';\n\nimport { ExtensionNotarizationsContext } from '../contexts/common/ExtensionNotarizations';\n\nconst useExtensionNotarizations = () => {\n  return { ...useContext(ExtensionNotarizationsContext) };\n};\n\nexport default useExtensionNotarizations;\n"
  },
  {
    "path": "client/src/hooks/useFetchNotaryList.ts",
    "content": "import { useState } from 'react';\n\n\nconst NOTARY_LIST_URL = 'https://raw.githubusercontent.com/zkp2p/notary-list/main/notaries.json';\n\nexport type NotaryConfiguration = {\n  name: string;\n  notary: string;\n  proxy: string;\n};\n\ntype FetchNotaryListResponse = {\n  notaryList: NotaryConfiguration[];\n};\n\ntype FetchNotaryListError = {\n  code: number;\n};\n\nexport default function useGithubClient() {\n  const [loading, setLoading] = useState<boolean>(false);\n  const [error, setError] = useState<FetchNotaryListError | null>(null);\n\n\n  const fetchData = async (): Promise<FetchNotaryListResponse | null> => {\n    setLoading(true);\n    setError(null);\n\n    const urlWithParams = new URL(NOTARY_LIST_URL);\n\n    try {\n      const response = await fetch(urlWithParams.toString(), {\n        method: 'GET',\n      });\n\n      if (response.ok) {\n        const result = await response.json();\n\n        const notaryList = result['notaries'];\n\n        setLoading(false);\n        return { notaryList };\n      } else {\n        setError({ code: response.status });\n\n        setLoading(false);\n\n        return null;\n      }\n    } catch (err) {\n      setError({code: 0});\n\n      setLoading(false);\n\n      return null;\n    }\n  };\n\n  return { loading, error, fetchData };\n};\n"
  },
  {
    "path": "client/src/hooks/useFileBrowser.ts",
    "content": "import React, { useCallback } from \"react\";\n\n\nexport const useFileBrowser = () => {\n  const openFileDialog = useCallback((fileInputRef: React.RefObject<HTMLInputElement>) => {\n    fileInputRef.current?.click();\n  }, []);\n\n  return { openFileDialog };\n};\n"
  },
  {
    "path": "client/src/hooks/useGithubClient.ts",
    "content": "import { useState } from 'react';\nimport crypto from 'crypto';\n\ntype FetchDenyListResponse = {\n  denyList: string[];\n};\n\ntype FetchDenyListError = {\n  code: number;\n};\n\nexport default function useGithubClient() {\n  const [loading, setLoading] = useState<boolean>(false);\n  const [error, setError] = useState<FetchDenyListError | null>(null);\n\n  const generateNonce = () => {\n    return crypto.randomBytes(16).toString('hex');\n  }\n\n  const fetchData = async (url: string): Promise<FetchDenyListResponse | null> => {\n    setLoading(true);\n    setError(null);\n\n    const nonce = generateNonce();\n\n    const urlWithParams = new URL(url);\n    urlWithParams.searchParams.append(\"nonce\", nonce);\n\n    try {\n      const response = await fetch(urlWithParams.toString(), {\n        method: 'GET',\n      });\n\n      if (response.ok) {\n        const result = await response.json();\n\n        const denyList = result['depositors'];\n\n        setLoading(false);\n        return { denyList };\n      } else {\n        setError({ code: response.status });\n\n        setLoading(false);\n\n        return null;\n      }\n    } catch (err) {\n      setError({code: 0});\n\n      setLoading(false);\n\n      return null;\n    }\n  };\n\n  return { loading, error, fetchData };\n};\n"
  },
  {
    "path": "client/src/hooks/useGmailClient.ts",
    "content": "/*\n * users.getProfile\n */\n\nexport async function fetchProfile(\n  accessToken: string, \n): Promise<string> {\n  const url = `https://www.googleapis.com/gmail/v1/users/me/profile`;\n\n  const response = await fetch(url, {\n    headers: {\n      'Authorization': `Bearer ${accessToken}`,\n    },\n  });\n\n  if (response.ok) {\n    const data = await response.json();\n\n    return data.emailAddress;\n  } else {\n    console.error('Failed to fetch emails:', response);\n\n    throw new Error('Failed to fetch emails');\n  }\n}\n\n/*\n * messages.list\n */\n\nexport type GmailMessagesListResponse = {\n  messages: Array<{\n    id: string;\n    threadId: string;\n  }>;\n  nextPageToken?: string;\n  resultSizeEstimate?: number;\n};\n\nexport async function fetchEmailList(\n  accessToken: string, \n  queryParams: any\n): Promise<GmailMessagesListResponse> {\n  const defaultParams = {\n    maxResults: 3,\n    pageToken: 0,\n  };\n\n  const finalQueryParams = { ...defaultParams, ...queryParams };\n  const queryString = new URLSearchParams(finalQueryParams).toString();\n  const url = `https://www.googleapis.com/gmail/v1/users/me/messages?${queryString}`;\n\n  const response = await fetch(url, {\n    headers: {\n      'Authorization': `Bearer ${accessToken}`,\n    },\n  });\n\n  if (response.ok) {\n    const data: GmailMessagesListResponse = await response.json();\n\n    return data;\n  } else {\n    console.error('Failed to fetch emails:', response);\n    throw new Error('Failed to fetch emails');\n  }\n}\n\n/*\n * messages.get\n */\n\nexport type RawEmailResponse = {\n  subject: string;\n  internalDate: string;\n  decodedContents: string;\n};\n\nexport async function fetchEmailsRaw(\n  accessToken: string,\n  messageIds: string[]\n): Promise<RawEmailResponse[]> {\n  try {\n    const fetchPromises = messageIds.map(messageId => {\n      const url = `https://www.googleapis.com/gmail/v1/users/me/messages/${messageId}?format=raw`;\n\n      return fetch(url, {\n        headers: {\n          'Authorization': `Bearer ${accessToken}`,\n        },\n      })\n      .then(response => {\n        if (!response.ok) {\n          throw new Error(`Failed to fetch email with ID: ${messageId}`);\n        }\n\n        return response.json();\n      })\n      .then(data => {\n        let rawBase64 = data.raw\n          .replace(/-/g, '+')\n          .replace(/_/g, '/');\n\n        while (rawBase64.length % 4) {\n          rawBase64 += '=';\n        }\n\n        const decodedContents = atob(rawBase64);\n\n        const subject = decodedContents.match(/Subject: (.*)/)?.[1] || 'No Subject';\n\n        return {\n          subject,\n          internalDate: data.internalDate,\n          decodedContents\n        };\n      }) as Promise<RawEmailResponse>;\n    });\n\n    const results = await Promise.all(fetchPromises);\n\n    return results;\n  } catch (error) {\n    console.error('Error fetching emails:', error);\n    \n    throw new Error('Error fetching emails');\n  }\n};\n"
  },
  {
    "path": "client/src/hooks/useGoogleAuth.ts",
    "content": "import { useContext } from 'react'\n\nimport { GoogleAuthContext } from '../contexts/common/GoogleAuth'\n\nconst useGoogleAuth = () => {\n  return { ...useContext(GoogleAuthContext) }\n}\n\nexport default useGoogleAuth\n"
  },
  {
    "path": "client/src/hooks/useInterval.ts",
    "content": "import { useEffect } from 'react'\n\n/**\n * Invokes callback repeatedly over an interval defined by the delay\n *\n * @param callback\n * @param delay if null, the callback will not be invoked\n * @param leading by default, the callback will be invoked immediately (on the leading edge);\n *                if false, the callback will not be invoked until a first delay\n */\nexport default function useInterval(callback: () => void | Promise<void>, delay: null | number, leading = true) {\n  useEffect(() => {\n    if (delay === null) {\n      return\n    }\n\n    let timeout: ReturnType<typeof setTimeout>\n    tick(delay, /* skip= */ !leading)\n    return () => {\n      if (timeout) {\n        clearInterval(timeout)\n      }\n    }\n\n    async function tick(delay: number, skip = false) {\n      if (!skip) {\n        const promise = callback()\n\n        // Defer the next interval until the current callback has resolved.\n        if (promise) await promise\n      }\n\n      timeout = setTimeout(() => tick(delay), delay)\n    }\n  }, [callback, delay, leading])\n}\n"
  },
  {
    "path": "client/src/hooks/useLegacyDeposits.ts",
    "content": "import { useContext } from 'react';\n\nimport { DepositsContext } from '../contexts/legacy/Deposits';\n\nconst useLegacyDeposits = () => {\n  return { ...useContext(DepositsContext) }\n}\n\nexport default useLegacyDeposits;\n"
  },
  {
    "path": "client/src/hooks/useLifiBridge.ts",
    "content": "type LifiRouteRequestParams = {\n  toChain: string,\n  toToken: string,\n  fromAmount: string,\n  fromAddress: string,\n  toAddress?: string,\n}\n\nexport default function useLifiBridge() {\n\n  const getLifiQuote = async ({ fromAmount, fromAddress, toChain, toToken, toAddress }: LifiRouteRequestParams) => {\n    const quotesRequest = {\n      fromChain: '8453',                                       // Always will be from Base\n      toChain,\n      fromToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // Will always be USDC on Base\n      fromAmount,\n      toToken,\n      fromAddress,\n      allowDestinationCall: 'false',                           // This is to toggle allowing a swap AFTER bridging to the new chain\n      slippage: '0.005',                                       // 0.5% slippage\n      integrator: 'ZKP2P',\n      fee: '0',                                                // 0 fees\n    } as any;\n\n    if (toAddress) {\n      quotesRequest.toAddress = toAddress;\n    }\n\n    const apiUrl = 'https://li.quest/v1/quote';\n    const queryParams = new URLSearchParams(quotesRequest).toString();\n    const urlWithParams = `${apiUrl}?${queryParams}`;\n\n    const response = await fetch(urlWithParams, {\n      method: 'GET',\n    });\n\n    if (response.ok) {\n      const data = await response.json();\n\n      return data;\n    } else {\n      console.error('Failed to fetch quote:', response);\n\n      // Lifi throws error if there is no valid route\n      return null;\n    }\n  }\n\n  const getLifiTransactionHistory = async (walletAddress: string) => {\n    const date = new Date();\n    date.setFullYear(date.getFullYear() - 10);\n    \n    const apiUrl = `https://li.quest/v1/analytics/wallets/${walletAddress}`;\n    const queryParams = new URLSearchParams({\n      fromTimestamp: (date.getTime() / 1000).toString(),\n      toTimestamp: (Date.now() / 1000).toString(),\n      integrator: 'ZKP2P',\n    }).toString();\n    const urlWithParams = `${apiUrl}?${queryParams}`;\n\n    const response = await fetch(urlWithParams, {\n      method: 'GET',\n    });\n\n    if (response.ok) {\n      const data = await response.json();\n\n      return data;\n    } else {\n      console.error('Failed to fetch transaction history:', response);\n\n      throw new Error('Failed to fetch transaction history');\n    }\n  }\n  \n  const getLifiTransactionStatus = async (txHash: string) => {\n    const apiUrl = `https://li.quest/v1/status`;\n    const urlWithParams = `${apiUrl}?txHash=${txHash}`;\n\n    const response = await fetch(urlWithParams, {\n      method: 'GET',\n    });\n\n    if (response.ok) {\n      const data = await response.json();\n\n      return data;\n    } else {\n      console.error('Failed to fetch status:', response);\n\n      throw new Error('Failed to fetch status');\n    }\n  }\n\n  return { getLifiQuote, getLifiTransactionHistory, getLifiTransactionStatus };\n};\n"
  },
  {
    "path": "client/src/hooks/useLocalStorage.ts",
    "content": "import { useCallback, useState } from 'react'\n\nexport default function useLocalStorage<T>(key: string, initialValue: T) {\n  // State to store our value\n  // Pass initial state function to useState so logic is only executed once\n  const [storedValue, setStoredValue] = useState<T>(() => {\n    try {\n      // Get from local storage by key\n      const item = window.localStorage.getItem(key)\n      // Parse stored json or if none return initialValue\n      return item ? JSON.parse(item) : initialValue\n    } catch (error) {\n      // If error also return initialValue\n      console.log(error)\n      return initialValue\n    }\n  })\n\n  // Return a wrapped version of useState's setter function that ...\n  // ... persists the new value to localStorage.\n  const setValue = useCallback(\n    (value: T | ((value: T) => T)) => {\n      try {\n        // Allow value to be a function so we have same API as useState\n        const valueToStore =\n          value instanceof Function ? value(storedValue) : value\n        // Save state\n        setStoredValue(valueToStore)\n        // Save to local storage\n        window.localStorage.setItem(key, JSON.stringify(valueToStore))\n      } catch (error) {\n        // A more advanced implementation would handle the error case\n        console.log(error)\n      }\n    },\n    [key, storedValue]\n  )\n\n  return [storedValue, setValue] as [T, (value: T | ((value: T) => T)) => void]\n}\n"
  },
  {
    "path": "client/src/hooks/useMediaQuery.ts",
    "content": "import { useState, useEffect } from 'react';\nimport { MediaSizeKey, MEDIA_SIZE } from 'theme/media';\n\nconst useMediaQuery = () => {\n  const [deviceSize, setDeviceSize] = useState<string | null>(null);\n\n  useEffect(() => {\n    const handleResize = () => {\n      const sizesInDescending = Object.keys(MEDIA_SIZE).reverse();\n      const newSize = sizesInDescending.find(size =>\n        window.matchMedia(`(min-width: ${MEDIA_SIZE[size as MediaSizeKey]})`\n      ).matches) as string || 'mobile';\n      setDeviceSize(newSize);\n    };\n\n    handleResize();\n\n    window.addEventListener('resize', handleResize);\n\n    return () => {\n      window.removeEventListener('resize', handleResize);\n    };\n  }, []);\n\n  return deviceSize;\n};\n\nexport default useMediaQuery;\n"
  },
  {
    "path": "client/src/hooks/useModal.ts",
    "content": "import { useContext } from 'react';\n\nimport { ModalSettingsContext } from '../contexts/common/ModalSettings';\n\n\nconst useModal = () => {\n  return { ...useContext(ModalSettingsContext) };\n};\n\nexport default useModal;\n"
  },
  {
    "path": "client/src/hooks/useNotarySettings.ts",
    "content": "import { useContext } from 'react';\n\nimport { NotarySettingsContext } from '../contexts/common/NotarySettings';\n\nconst useNotarySettings = () => {\n  return { ...useContext(NotarySettingsContext) }\n};\n\nexport default useNotarySettings;\n"
  },
  {
    "path": "client/src/hooks/useOnClickOutside.ts",
    "content": "import { RefObject, useEffect, useRef } from 'react'\n\nexport function useOnClickOutside<T extends HTMLElement>(\n  node: RefObject<T | undefined>,\n  handler: undefined | (() => void),\n  ignoredNodes: Array<RefObject<T | undefined>> = []\n) {\n  const handlerRef = useRef<undefined | (() => void)>(handler)\n\n  useEffect(() => {\n    handlerRef.current = handler\n  }, [handler])\n\n  useEffect(() => {\n    const handleClickOutside = (e: MouseEvent) => {\n      const nodeClicked = node.current?.contains(e.target as Node)\n      const ignoredNodeClicked = ignoredNodes.reduce(\n        (reducer, val) => reducer || !!val.current?.contains(e.target as Node),\n        false\n      )\n\n      if ((nodeClicked || ignoredNodeClicked) ?? false) {\n        return\n      }\n\n      if (handlerRef.current) handlerRef.current()\n    }\n\n    document.addEventListener('mousedown', handleClickOutside)\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside)\n    }\n  }, [node, ignoredNodes])\n};\n"
  },
  {
    "path": "client/src/hooks/usePermissions.ts",
    "content": "import { useContext } from 'react'\n\nimport { PermissionsContext } from '../contexts/venmo/Permissions'\n\nconst usePermissions = () => {\n  return { ...useContext(PermissionsContext) }\n}\n\nexport default usePermissions\n"
  },
  {
    "path": "client/src/hooks/usePlatformSettings.ts",
    "content": "import { useContext } from 'react'\n\nimport { PlatformSettingsContext } from '../contexts/common/PlatformSettings'\n\nconst usePlatformSettings = () => {\n  return { ...useContext(PlatformSettingsContext) }\n}\n\nexport default usePlatformSettings\n"
  },
  {
    "path": "client/src/hooks/useProofGenSettings.ts",
    "content": "import { useContext } from 'react'\n\nimport { ProofGenSettingsContext } from '../contexts/common/ProofGenSettings'\n\nconst useProofGenSettings = () => {\n  return { ...useContext(ProofGenSettingsContext) }\n}\n\nexport default useProofGenSettings\n"
  },
  {
    "path": "client/src/hooks/useQuery.ts",
    "content": "import { useMemo } from 'react';\nimport { useNavigate, useLocation, To, NavigateOptions } from 'react-router-dom';\n\n\nconst PARAM_KEY_MAP = {\n  'AMOUNT_USDC': 'amountUsdc',\n  'RECIPIENT_ADDRESS': 'recipientAddress',\n  'NETWORK': 'network',\n  'TO_TOKEN': 'toToken',\n  'APP_ID': 'appId',\n  'PLATFORM': 'platform',\n  'CURRENCY_INDEX': 'currencyIndex'\n};\n\nexport default function useQuery() {\n  const navigate = useNavigate();\n  const location = useLocation();\n\n  const navigateWithQuery = (to: To, options: NavigateOptions = {}) => {\n    const path = typeof to === 'string' ? to + location.search : {\n        ...to,\n        pathname: to.pathname + location.search\n    };\n\n    navigate(path, options);\n  };\n\n  const queryParams = useMemo(() => {\n    const params: Record<string, string | null> = {};\n    const searchParams = new URLSearchParams(location.search);\n\n    Object.entries(PARAM_KEY_MAP).forEach(([standardizedKey, originalKey]) => {\n      params[standardizedKey] = searchParams.get(originalKey) || null;\n    });\n\n    return params;\n  }, [location.search]);\n\n  return {\n    navigateWithQuery,  \n    queryParams\n  }\n}"
  },
  {
    "path": "client/src/hooks/useRemoteNotaryUploadTest.ts",
    "content": "import { useState } from 'react';\n\n\nconst UPLOAD_SIZE_BYTES = 4.9 * 1024 * 1024;\n\ntype UploadParams = {\n  notaryUrl: string;\n};\n\nexport default function useRemoteNotaryUploadTest({\n  notaryUrl,\n}: UploadParams) {\n  const [uploadTime, setUploadTime] = useState<number | null>(null);\n  const [loading, setLoading] = useState<boolean>(false);\n  const [error, setError] = useState<string | null>(null);\n\n  const generateDummyFile = (): Blob => {\n    const size = UPLOAD_SIZE_BYTES;\n    const bytes = new Uint8Array(size);\n    for (let i = 0; i < size; i++) {\n      bytes[i] = 0;\n    }\n\n    return new Blob([bytes], { type: 'application/octet-stream' });\n  };\n\n  const uploadFile = async () => {\n    const file = generateDummyFile();\n    const formData = new FormData();\n    formData.append('file', file);\n\n    setLoading(true);\n    const startTime = performance.now();\n\n    try {\n      const response = await fetch(`${notaryUrl}/api/upload`, {\n        method: 'POST',\n        body: formData,\n        headers: {\n          'Connection': 'close',\n          'Cache-Control': 'no-cache',\n        }\n      });\n\n      if (response.ok) {\n        const endTime = performance.now();\n        const durationSeconds = (endTime - startTime) / 1000;\n\n        setUploadTime(durationSeconds);\n      } else {\n        setError(`Failed to upload file. Status: ${response.status}`);\n      }\n    } catch (err) {\n      if (typeof err === 'string') {\n        setError(err);\n      } else if (err instanceof Error) {\n        setError(err.message);\n      } else {\n        setError('An unknown error occurred.');\n      }\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return { uploadTime, loading, error, uploadFile };\n};\n"
  },
  {
    "path": "client/src/hooks/useRemoteNotaryVerification.ts",
    "content": "import { useState } from 'react';\nimport crypto from 'crypto';\n\nimport { PaymentPlatformType, PaymentPlatform } from '@helpers/types';\n\n\nconst NOTARY_PUBKEY = process.env.NOTARY_PUBKEY;\nif (!NOTARY_PUBKEY) {\n    throw new Error(\"NOTARY_PUBKEY environment variable is not defined.\");\n};\n\nconst REMOTE_NOTARY_VERIFICATION_URL = process.env.REMOTE_NOTARY_VERIFICATION_URL;\nif (!REMOTE_NOTARY_VERIFICATION_URL) {\n    throw new Error(\"REMOTE_NOTARY_VERIFICATION_URL environment variable is not defined.\");\n};\n\ntype VerificationParams = {\n  paymentType: PaymentPlatformType;\n  circuitType: string;\n  notarization: string;\n  intentHash: string;\n  userAddress: string;\n}\n\ntype RemoteNotaryVerificationResponse = {\n  proof: any;\n  public_values: any;\n};\n\ntype RemoteNotaryVerificationError = {\n  code: number;\n  message: string;\n};\n\nexport default function useRemoteNotaryVerification({\n  paymentType,\n  circuitType,\n  notarization,\n  intentHash,\n  userAddress\n}: VerificationParams) {\n  const [data, setData] = useState<RemoteNotaryVerificationResponse | null>(null);\n  const [loading, setLoading] = useState<boolean>(false);\n  const [error, setError] = useState<RemoteNotaryVerificationError | null>(null);\n\n  const generateNonce = () => {\n    return crypto.randomBytes(16).toString('hex');\n  }\n\n  const fetchData = async () => {\n    setLoading(true);\n    const nonce = generateNonce();\n\n    let apiUrl;\n    switch (paymentType) {\n      case PaymentPlatform.REVOLUT:\n        apiUrl = REMOTE_NOTARY_VERIFICATION_URL;\n        break\n\n      default:\n        throw new Error(\"Invalid payment type.\");\n    }\n\n    if (!apiUrl) {\n      throw new Error(\"Invalid verification url.\");\n    }\n\n    try {\n      const response = await fetch(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({\n          \"payment_type\": paymentType,\n          \"circuit_type\": circuitType,\n          \"proof\": notarization,\n          \"notary_pubkey\": NOTARY_PUBKEY,\n          \"intent_hash\": intentHash,\n          \"user_address\": userAddress,\n          \"nonce\": nonce,\n        })\n      });\n\n      if (response.ok) {\n        const result = await response.json();\n        setData(result);\n      } else if (response.status >= 400 && response.status < 500) {\n        const errorResponse = await response.json();\n        if (errorResponse && errorResponse.detail) {\n          setError({\n            code: errorResponse.detail.code,\n            message: errorResponse.detail.message\n          });\n        } else {\n          setError({\n            code: response.status,\n            message: 'An error occurred, but no additional details were provided.'\n          });\n        }\n      } else {\n        setError({\n          code: response.status,\n          message: `HTTP error! Status: ${response.status}`\n        });\n      }\n    } catch (err) {\n      // If there's an error in fetching or parsing the response, handle it here\n      if (typeof err === 'string') {\n        setError({\n          code: 0,\n          message: err\n        });\n      } else if (err instanceof Error) {\n        setError({\n          code: 0,\n          message: err.message\n        });\n      } else {\n        setError(err as any);\n      }\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return { data, loading, error, fetchData };\n};\n"
  },
  {
    "path": "client/src/hooks/useRemoteProofGen.ts",
    "content": "import { useState } from 'react';\nimport crypto from 'crypto';\n\nimport { PaymentPlatformType, PaymentPlatform } from '@helpers/types';\n\n\nconst REMOTE_PROOF_API_URL = process.env.REMOTE_PROOF_API_URL;\nif (!REMOTE_PROOF_API_URL) {\n    throw new Error(\"REMOTE_PROOF_API_URL environment variable is not defined.\");\n}\n\nconst REMOTE_PROOF_UPI_API_URL = process.env.REMOTE_PROOF_UPI_API_URL;\nif (!REMOTE_PROOF_UPI_API_URL) {\n    throw new Error(\"REMOTE_PROOF_UPI_API_URL environment variable is not defined.\");\n}\n\nconst REMOTE_PROOF_GARANTI_API_URL = process.env.REMOTE_PROOF_GARANTI_API_URL;\nif (!REMOTE_PROOF_GARANTI_API_URL) {\n    throw new Error(\"REMOTE_PROOF_UPI_API_URL environment variable is not defined.\");\n}\n\ntype ProofGenParams = {\n  paymentType: PaymentPlatformType;\n  circuitType: string;\n  emailBody: string;\n  intentHash: string;\n}\n\ntype RemoteProofResponse = {\n  proof: any;\n  public_values: any;\n};\n\ntype RemoteProofError = {\n  code: number;\n  message: string;\n};\n\nexport default function useRemoteProofGen({ paymentType, circuitType, emailBody, intentHash }: ProofGenParams) {\n  const [data, setData] = useState<RemoteProofResponse | null>(null);\n  const [loading, setLoading] = useState<boolean>(false);\n  const [error, setError] = useState<RemoteProofError | null>(null);\n\n  const generateNonce = () => {\n    return crypto.randomBytes(16).toString('hex');\n  }\n\n  const fetchData = async () => {\n    setLoading(true);\n    const nonce = generateNonce();\n\n    let apiUrl;\n    switch (paymentType) {\n      case PaymentPlatform.VENMO:\n        apiUrl = REMOTE_PROOF_API_URL;\n        break\n        \n      case PaymentPlatform.HDFC:\n        apiUrl = REMOTE_PROOF_UPI_API_URL;\n        break;\n      \n      case PaymentPlatform.GARANTI:\n        apiUrl = REMOTE_PROOF_GARANTI_API_URL;\n        break;\n    }\n    if (!apiUrl) {\n      throw new Error(\"Invalid proving url.\");\n    }\n\n    try {\n      const response = await fetch(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({\n          \"payment_type\": paymentType,\n          \"email_type\": circuitType, // legacy_parameter\n          \"circuit_type\": circuitType,\n          \"email\": emailBody,\n          \"intent_hash\": intentHash,\n          \"nonce\": nonce,\n        })\n      });\n\n      if (response.ok) {\n        const result = await response.json();\n        setData(result);\n      } else if (response.status >= 400 && response.status < 500) {\n        const errorResponse = await response.json();\n        if (errorResponse && errorResponse.detail) {\n          setError({\n            code: errorResponse.detail.code,\n            message: errorResponse.detail.message\n          });\n        } else {\n          setError({\n            code: response.status,\n            message: 'An error occurred, but no additional details were provided.'\n          });\n        }\n      } else {\n        setError({\n          code: response.status,\n          message: `HTTP error! Status: ${response.status}`\n        });\n      }\n    } catch (err) {\n      // If there's an error in fetching or parsing the response, handle it here\n      if (typeof err === 'string') {\n        setError({\n          code: 0,\n          message: err\n        });\n      } else if (err instanceof Error) {\n        setError({\n          code: 0,\n          message: err.message\n        });\n      } else {\n        setError(err as any);\n      }\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return { data, loading, error, fetchData };\n};\n"
  },
  {
    "path": "client/src/hooks/useSendSettings.ts",
    "content": "import { useContext } from 'react';\n\nimport { SendSettingsContext } from '../contexts/common/SendSettings';\n\nconst useSendSettings = () => {\n  return { ...useContext(SendSettingsContext) }\n};\n\nexport default useSendSettings;\n"
  },
  {
    "path": "client/src/hooks/useSmartContracts.ts",
    "content": "import { useContext } from 'react'\n\nimport { SmartContractsContext } from '../contexts/common/SmartContracts'\n\nconst useSmartContracts = () => {\n  return { ...useContext(SmartContractsContext) }\n}\n\nexport default useSmartContracts\n"
  },
  {
    "path": "client/src/hooks/useSocketBridge.ts",
    "content": "type SocketQuoteRequestParams = {\n  toChainId: string,\n  toTokenAddress: string,\n  fromAmount: string,\n  userAddress: string\n  recipient?: string,\n}\n\nconst API_KEY = process.env.SOCKET_API_KEY || \"\";\n  \nexport default function useSocketBridge() {\n  const getSocketQuote = async ({ fromAmount, recipient, toChainId, toTokenAddress, userAddress }: SocketQuoteRequestParams) => {\n    const quotesRequest = {\n      fromChainId: '8453',                                            // Always will be from Base\n      toChainId,\n      fromTokenAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // Will always be USDC on Base\n      fromAmount,\n      toTokenAddress,\n      userAddress,                                                    // 0x18Cc6F90512C6D95ACA0d57F98C727D61873c06a\n      singleTxOnly: 'true',                                           // This is to toggle not allowing a swap AFTER bridging to the new chain\n      sort: 'output',\n      uniqueRoutesPerBridge: 'true'\n    } as any;\n\n    // defaultSwapSlippage - default?\n    // defaultBridgeSlippage - default?\n\n    if (recipient) {\n      quotesRequest.recipient = recipient;\n    }\n\n    const apiUrl = 'https://api.socket.tech/v2/quote';\n    const queryParams = new URLSearchParams(quotesRequest).toString();\n    const urlWithParams = `${apiUrl}?${queryParams}`;\n\n    console.log(urlWithParams)\n\n    const response = await fetch(urlWithParams, {\n      method: 'GET',\n      headers: {\n        'API-KEY': API_KEY,\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      }\n    });\n\n    if (response.ok) {\n      const data = await response.json();\n\n      return data;\n    } else {\n      console.error('Failed to fetch quote:', response);\n\n      throw new Error('Failed to fetch quote');\n    }\n  };\n\n  const getSocketTransactionData = async (route: any) => {\n    const apiUrl = 'https://api.socket.tech/v2/build-tx';\n\n    const response = await fetch(apiUrl, {\n      method: 'POST',\n      headers: {\n        'API-KEY': API_KEY,\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ \"route\": route })\n    });\n\n    if (response.ok) {\n      const data = await response.json();\n\n      return data;\n    } else {\n      console.error('Failed to fetch txn data:', response);\n\n      throw new Error('Failed to fetch txn data');\n    }\n  };\n  \n  const getSocketTransactionStatus = async (transactionHash: string, toChainId: string) => {\n    const apiUrl = `https://api.socket.tech/v2/bridge-status`;\n    \n    const urlWithParams = `${apiUrl}?transactionHash=${transactionHash}&toChainId=${toChainId}&fromChainId=8453`;\n\n    const response = await fetch(urlWithParams, {\n      method: 'GET',\n      headers: {\n        'API-KEY': API_KEY,\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      }\n    });\n\n    if (response.ok) {\n      const data = await response.json();\n\n      return data;\n    } else {\n      console.error('Failed to fetch status:', response);\n\n      throw new Error('Failed to fetch status');\n    }\n  }\n\n  return { getSocketQuote, getSocketTransactionData, getSocketTransactionStatus };\n};\n"
  },
  {
    "path": "client/src/hooks/useSwapQuote.ts",
    "content": "import { useContext } from 'react';\n\nimport { SwapQuoteContext } from '../contexts/common/SwapQuote';\n\nconst useSmartContracts = () => {\n  return { ...useContext(SwapQuoteContext) }\n};\n\nexport default useSmartContracts;\n"
  },
  {
    "path": "client/src/hooks/venmo/useDeposits.ts",
    "content": "import { useContext } from 'react';\n\nimport { DepositsContext } from '../../contexts/venmo/Deposits';\n\nconst useDeposits = () => {\n  return { ...useContext(DepositsContext) };\n};\n\nexport default useDeposits;\n"
  },
  {
    "path": "client/src/hooks/venmo/useLiquidity.ts",
    "content": "import { useContext } from 'react'\n\nimport { LiquidityContext } from '../../contexts/venmo/Liquidity'\n\nconst useLiquidity = () => {\n  return { ...useContext(LiquidityContext) }\n}\n\nexport default useLiquidity\n"
  },
  {
    "path": "client/src/hooks/venmo/useOnRamperIntents.ts",
    "content": "import { useContext } from 'react'\n\nimport { OnRamperIntentsContext } from '../../contexts/venmo/OnRamperIntents'\n\nconst useOnRamperIntents = () => {\n  return { ...useContext(OnRamperIntentsContext) }\n}\n\nexport default useOnRamperIntents\n"
  },
  {
    "path": "client/src/hooks/venmo/useRampState.ts",
    "content": "import { useContext } from 'react'\n\nimport { RampContext } from '../../contexts/venmo/Ramp'\n\nconst useRampState = () => {\n  return { ...useContext(RampContext) }\n}\n\nexport default useRampState\n"
  },
  {
    "path": "client/src/hooks/venmo/useRegistration.ts",
    "content": "import { useContext } from 'react'\n\nimport { RegistrationContext } from '../../contexts/venmo/Registration'\n\nconst useRegistration = () => {\n  return { ...useContext(RegistrationContext) }\n}\n\nexport default useRegistration\n"
  },
  {
    "path": "client/src/index.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@font-face {\n  font-family: 'Graphik';\n  src: url('./assets/fonts/Graphik-Regular.otf') format('opentype');\n  font-weight: 300;\n  font-style: normal;\n  font-display: swap;\n}\n\nbody {\n  margin: 0;\n  padding: 0;\n  font-family: 'Graphik', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n    monospace;\n}\n"
  },
  {
    "path": "client/src/index.js",
    "content": "import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport merge from 'lodash.merge';\nimport { ethers } from 'ethers';\nimport { Connection } from \"@solana/web3.js\";\nimport { PrivyProvider } from '@privy-io/react-auth';\nimport { ZeroDevPrivyWagmiProvider } from '@zerodev/wagmi/privy';\nimport {\n  WagmiConfig,\n  createConfig,\n  configureChains,\n} from \"wagmi\";\nimport { alchemyProvider } from 'wagmi/providers/alchemy'\nimport { publicProvider } from \"wagmi/providers/public\";\nimport { hardhat, sepolia, base } from 'wagmi/chains'\nimport {\n  RainbowKitProvider,\n  darkTheme,\n  getDefaultWallets,\n} from \"@rainbow-me/rainbowkit\";\nimport \"@rainbow-me/rainbowkit/styles.css\";\n\nimport \"./index.css\";\nimport ErrorBoundary from './ErrorBoundary';\nimport App from \"./App\";\n\n\nconst getDefaultChain = (env) => {\n  if (env === 'STAGING' || env === 'PRODUCTION') {\n    return base;\n  } else {\n    return sepolia;\n  }\n};\n\nconst getChainsForEnvironment = (env) => {\n  if (env === 'STAGING' || env === 'PRODUCTION') {\n    return [base];\n  } else {\n    return [sepolia, base, hardhat];\n  }\n};\n\nconst env = process.env.DEPLOYMENT_ENVIRONMENT;\nconst chains = getChainsForEnvironment(env);\nconst configureChainsConfig = configureChains(\n  chains,\n  [\n    alchemyProvider({ apiKey: process.env.ALCHEMY_API_KEY }),\n    publicProvider()\n  ]\n);\n\nexport const alchemyMainnetEthersProvider =\n  new ethers.providers.AlchemyProvider('mainnet', process.env.ALCHEMY_API_KEY);\n\nconst alchemySolanaEndpoint = `https://solana-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_SOLANA_API_KEY}`;\nexport const alchemySolanaConnection = new Connection(alchemySolanaEndpoint, 'confirmed');\n\nconst { connectors } = getDefaultWallets({\n  appName: 'ZK P2P On-Ramp',\n  projectId: process.env.WALLET_CONNECT_PROJECT_ID,\n  chains\n});\n\nconst config = createConfig({\n  autoConnect: false,\n  connectors,\n  publicClient: configureChainsConfig.publicClient\n})\n\nconst zkp2pTheme = merge(darkTheme(), {\n  colors: {\n    accentColor: '#df2e2d',\n  },\n  radii: {\n    connectButton: '20px',\n  },\n  fonts: {\n    body: 'Graphik',\n  },\n  shadows: {\n    connectButton: 'inset 0px -4px 0px rgba(0, 0, 0, 0.16)',\n  }\n});\n\nconst zeroDevOptions = {\n  projectIds: [process.env.ZERODEV_APP_ID],\n  projectId: process.env.ZERODEV_APP_ID,\n  useSmartWalletForExternalEOA: false, // Only sponsor gas for embedded wallets\n}\n\nReactDOM.render(\n  <React.StrictMode>\n    <ErrorBoundary>\n      <WagmiConfig config={config}>\n        <RainbowKitProvider chains={chains} theme={zkp2pTheme}>\n          <PrivyProvider\n            appId={process.env.PRIVY_APP_ID}\n            config={{\n              embeddedWallets: {\n                createOnLogin: 'users-without-wallets',\n                noPromptOnSignature: true\n              },\n              loginMethodsAndOrder: {\n                primary: ['email', 'google', 'coinbase_wallet'],\n                overflow: ['metamask', 'rainbow', 'wallet_connect', 'detected_wallets'] \n              },\n              appearance: {\n                theme: \"#0E111C\",\n                accentColor: \"#df2e2d\",\n              },\n              externalWallets: { \n                coinbaseWallet: {\n                  connectionOptions: 'smartWalletOnly', \n                }, \n              }, \n              defaultChain: getDefaultChain(env),\n              supportedChains: [sepolia, base]\n            }}\n          >\n            <ZeroDevPrivyWagmiProvider wagmiChainsConfig={configureChainsConfig} options={zeroDevOptions}>\n              <App />\n            </ZeroDevPrivyWagmiProvider>\n          </PrivyProvider>\n        </RainbowKitProvider>\n      </WagmiConfig>\n    </ErrorBoundary>\n  </React.StrictMode>,\n  document.getElementById(\"root\")\n);\n"
  },
  {
    "path": "client/src/mocks/handlers.js",
    "content": "// src/mocks/handlers.js\nimport { rest } from 'msw'\nimport { loadURL } from '../helpers/zkp'\nimport fs from 'fs';\n\nconst getCompressedTestFile = () => {\n  const buffer = fs.readFileSync(`${__dirname}/../__fixtures__/compressed-files/compressed.txt.gz`);\n  return buffer;\n}\n\nconst zkeyGzHandler = async (_, res, ctx) => {\n    const mockGzArrayBuffer = getCompressedTestFile();\n    return res(\n      ctx.set('Content-Length', mockGzArrayBuffer.byteLength.toString()),\n      ctx.set('Content-Type', 'application/x-gzip'),\n      // Respond with the \"ArrayBuffer\".\n      ctx.body(mockGzArrayBuffer),\n    )\n};\n\nexport const handlers = [\n  // Handles a .gz request\n  rest.get(loadURL + \"email.zkeyb.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyc.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyd.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeye.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyf.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyg.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyh.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyi.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyj.gz\", zkeyGzHandler),\n  rest.get(loadURL + \"email.zkeyk.gz\", zkeyGzHandler),\n];\n"
  },
  {
    "path": "client/src/mocks/server.js",
    "content": "// src/mocks/server.js\nimport { setupServer } from 'msw/node'\nimport { handlers } from './handlers'\n\n// This configures a request mocking server with the given request handlers.\nexport const server = setupServer(...handlers)"
  },
  {
    "path": "client/src/pages/Deposit.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from \"styled-components\";\n\nimport DepositTable from \"@components/Deposit\";\nimport useVenmoDeposits from '@hooks/venmo/useDeposits';\nimport useHdfcDeposits from '@hooks/hdfc/useDeposits';\nimport useGarantiDeposits from '@hooks/garanti/useDeposits';\nimport useRevolutDeposits from '@hooks/revolut/useDeposits';\n\nimport useVenmoRegistration from '@hooks/venmo/useRegistration';\nimport useHdfcRegistration from '@hooks/hdfc/useRegistration';\nimport useGarantiRegistration from '@hooks/garanti/useRegistration';\nimport useRevolutRegistration from '@hooks/revolut/useRegistration';\n\nimport useBalances from '@hooks/useBalance';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Deposit: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  const {\n    isRegistered: isRegisteredOnVenmo\n  } = useVenmoRegistration();\n\n  const {\n    isRegistered: isRegisteredOnHdfc\n  } = useHdfcRegistration();\n\n  const {\n    isRegistered: isRegisteredOnGaranti\n  } = useGarantiRegistration();\n\n  const {\n    isRegistered: isRegisteredOnRevolut\n  } = useRevolutRegistration();\n\n  const {\n    refetchDeposits: refetchVenmoDeposits,\n    shouldFetchDeposits: shouldFetchVenmoDeposits,\n    refetchDepositIntents: refetchVenmoDepositIntents,\n    shouldFetchDepositIntents: shouldFetchVenmoDepositIntents,\n  } = useVenmoDeposits();\n\n  const { refetchUsdcBalance, shouldFetchUsdcBalance } = useBalances();\n\n  const {\n    refetchDeposits: refetchHdfcDeposits,\n    shouldFetchDeposits: shouldFetchHdfcDeposits,\n    refetchDepositIntents: refetchHdfcDepositIntents,\n    shouldFetchDepositIntents: shouldFetchHdfcDepositIntents,\n  } = useHdfcDeposits();\n\n  const {\n    refetchDeposits: refetchGarantiDeposits,\n    shouldFetchDeposits: shouldFetchGarantiDeposits,\n    refetchDepositIntents: refetchGarantiDepositIntents,\n    shouldFetchDepositIntents: shouldFetchGarantiDepositIntents,\n  } = useGarantiDeposits();\n\n  const {\n    refetchDeposits: refetchRevolutDeposits,\n    shouldFetchDeposits: shouldFetchRevolutDeposits,\n    refetchDepositIntents: refetchRevolutDepositIntents,\n    shouldFetchDepositIntents: shouldFetchRevolutDepositIntents,\n  } = useRevolutDeposits();\n\n  const {\n    PaymentPlatform,\n    paymentPlatform\n  } = usePlatformSettings();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        if (shouldFetchVenmoDeposits) {\n          refetchVenmoDeposits?.();\n        }\n\n        if (shouldFetchVenmoDepositIntents) {\n          refetchVenmoDepositIntents?.();\n        }\n\n        if (shouldFetchUsdcBalance && isRegisteredOnVenmo) {\n          refetchUsdcBalance?.();\n        }\n        break;\n      \n      case PaymentPlatform.HDFC:\n        if (shouldFetchHdfcDeposits) {\n          refetchHdfcDeposits?.();\n        }\n\n        if (shouldFetchHdfcDepositIntents) {\n          refetchHdfcDepositIntents?.();\n        }\n\n        if (shouldFetchUsdcBalance && isRegisteredOnHdfc) {\n          refetchUsdcBalance?.();\n        }\n        break;\n\n      case PaymentPlatform.GARANTI:\n        if (shouldFetchGarantiDeposits) {\n          refetchGarantiDeposits?.();\n        }\n\n        if (shouldFetchGarantiDepositIntents) {\n          refetchGarantiDepositIntents?.();\n        }\n\n        if (shouldFetchUsdcBalance && isRegisteredOnGaranti) {\n          refetchUsdcBalance?.();\n        }\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        if (shouldFetchRevolutDeposits) {\n          refetchRevolutDeposits?.();\n        }\n\n        if (shouldFetchRevolutDepositIntents) {\n          refetchRevolutDepositIntents?.();\n        }\n\n        if (shouldFetchUsdcBalance && isRegisteredOnRevolut) {\n          refetchUsdcBalance?.();\n        }\n        break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <Main>\n        <DepositTable />\n      </Main>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  padding-bottom: 7rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 3rem;\n  }\n`;\n\nconst Main = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n\n"
  },
  {
    "path": "client/src/pages/Landing.tsx",
    "content": "import { useRef, useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Link } from 'react-router-dom';\nimport TextTransition, { presets } from 'react-text-transition';\n\nimport { Button } from '@components/common/Button';\nimport Card from '@components/common/Card';\nimport { SVGIconThemed } from '@components/SVGIcon/SVGIconThemed';\nimport SwapPreview from '@components/Landing/SwapPreview';\nimport { MAIN_CARDS, SECONDARY_CARDS } from '@helpers/cards';\nimport { Z_INDEX } from '@theme/zIndex';\nimport useMediaQuery from '@hooks/useMediaQuery';\nimport useQuery from '@hooks/useQuery';\nimport { ThemedText } from '@theme/text';\n\n\nconst CURRENCIES = ['USD', 'INR', 'TRY', 'EUR', 'GBP', 'SGD'];\n\nexport const Landing: React.FC = () => {\n  /*\n   * Contexts\n   */\n  \n  const currentDeviceSize = useMediaQuery();\n\n  const cardsRef = useRef<HTMLDivElement>(null);\n  const { navigateWithQuery } = useQuery();\n\n  /*\n   * State\n   */\n\n  const [index, setIndex] = useState(0);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    const intervalId = setInterval(\n      () => setIndex((index) => index + 1),\n      3000,\n    );\n    return () => clearTimeout(intervalId);\n  }, []);\n\n  /*\n   * Handlers\n   */\n\n  const navigateToSwapHandler = () => {\n    navigateWithQuery('/swap');\n  };\n\n  const jumpToMedia = (url: string) => {\n    window.open(url, '_blank');\n  };\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <Container>\n        <HeroContainer style={{ padding: currentDeviceSize === 'mobile' ? '0 1.6rem' : '0', width: currentDeviceSize === 'mobile' ? 'auto' : '50%' }}> \n          <SwapPreviewContainer onClick={() => navigateWithQuery('/swap')}>\n            <SwapPreview />\n          </SwapPreviewContainer>\n\n          <HeroTextContainer>\n            <ThemedText.Hero>\n              <div style={{ display: 'flex', justifyContent: 'center', fontSize: currentDeviceSize === 'mobile' ? 44 : 60, fontWeight: 600 }}>\n                <span>Onramp&nbsp;</span>\n                <TextTransitionContainer>\n                  <TextTransition \n                    springConfig={presets.stiff}\n                    direction=\"down\"\n                    inline={true}\n                    style={{\n                      width: currentDeviceSize === 'mobile' ? '88px' : '128px',\n                      height: currentDeviceSize === 'mobile' ? '48.5px' : '70.5px',\n                      minWidth: currentDeviceSize === 'mobile' ? '88px' : '128px',\n                      maxHeight: currentDeviceSize === 'mobile' ? '48.5px' : '70.5px',\n                    }} \n                  >\n                    {CURRENCIES[index % CURRENCIES.length]}\n                  </TextTransition>\n                </TextTransitionContainer>\n              </div>\n              \n              <div style={{ width: '100%', textAlign: 'center', fontSize: currentDeviceSize === 'mobile' ? 44 : 60, fontWeight: 600 }}>in 90 seconds</div>\n            </ThemedText.Hero>\n          </HeroTextContainer>\n\n          <SubHeaderContainer>\n            <ThemedText.SubHeaderLarge style={{ textAlign: 'center', lineHeight: '1.3', fontSize: currentDeviceSize === 'mobile' ? 20 : 24 }}>\n              Completely peer-to-peer leveraging everyday payment networks\n            </ThemedText.SubHeaderLarge>\n          </SubHeaderContainer>\n\n          <ButtonContainer>\n            <Button\n              onClick={navigateToSwapHandler}\n            >\n              Get Started\n            </Button>\n          </ButtonContainer>\n\n          <LearnMoreContainer\n            onClick={() => {\n              cardsRef?.current?.scrollIntoView({ behavior: 'smooth' })\n            }}\n          >\n            Learn more\n            <Icon icon=\"arrow-down\" />\n          </LearnMoreContainer>\n\n          <TosPPContainer>\n            <StyledLink as={Link} to=\"/tos\">\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Terms of Service ↗\n              </ThemedText.LabelSmall>\n            </StyledLink>\n\n            <StyledLink as={Link} to=\"/pp\">\n              <ThemedText.LabelSmall textAlign=\"left\">\n                Privacy Policy ↗\n              </ThemedText.LabelSmall>\n            </StyledLink>\n          </TosPPContainer>\n        </HeroContainer>\n\n        <CardContainer paddingHorizontal={currentDeviceSize === 'mobile' ? 24 : 96}>\n          <CardGrid cols={currentDeviceSize === 'mobile' ? 1 : SECONDARY_CARDS.length} ref={cardsRef}>\n            {SECONDARY_CARDS.map(card => (\n              <Card\n                {...card}\n                key={card.title}\n              />\n            ))}\n          </CardGrid>\n          <CardGrid cols={currentDeviceSize === 'mobile' ? 1 : MAIN_CARDS.length}>\n            {MAIN_CARDS.map(card => (\n              <Card\n                {...card}\n                key={card.title}\n              />\n            ))}\n          </CardGrid>\n        </CardContainer>\n\n        <AboutContainer>\n          <IconRow>\n            <SocialIcon\n              icon={'twitter'}\n              onClick={() => jumpToMedia('https://twitter.com/zkp2p')}\n            />\n\n            <SocialIcon\n              icon={'github'}\n              onClick={() => jumpToMedia('https://github.com/zkp2p')}\n            />\n\n            <SocialIcon\n              icon={'telegram'}\n              onClick={() => jumpToMedia('https://t.me/+XDj9FNnW-xs5ODNl')}\n            />\n          </IconRow>\n\n          <SignatureContainer>\n            Made with<HeartIcon>♡</HeartIcon>\n          </SignatureContainer>\n          by the ZKP2P Team\n        </AboutContainer>\n      </Container>\n    </PageWrapper>\n  )\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding-bottom: 4rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 0rem;\n  }\n`;\n\nconst Container = styled.div`\n  width: 100%;\n  min-height: 535px;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  align-items: center;\n  justify-content: flex-end;\n  padding: 0 0 40px;\n`;\n\nconst HeroContainer = styled.div`\n  height: 100vh;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  align-items: center;\n  justify-content: center;\n  min-height: 535px;\n  max-height: 1000px;\n`;\n\nconst SwapPreviewContainer = styled.div`\n  position: absolute;\n  cursor: pointer;\n  padding: 0 24px;\n  margin-bottom: calc(360px + 32vw); \n\n  @media (min-width: 600px) {\n    width: 450px;\n    margin-bottom: 542px;\n  }\n`;\n\nconst ButtonContainer = styled.div`\n  width: 150px;\n  display: grid;\n  padding-top: 1rem;\n`;\n\nconst TosPPContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  gap: 2rem;\n`;\n\nconst StyledLink = styled.a`\n  color: inherit;\n  text-decoration: none;\n  cursor: pointer;\n\n  &:hover {\n    text-decoration: underline;\n  }\n`;\n\nconst HeroTextContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  padding-top: 2rem;\n  gap: 0.5rem;\n  width: 100%;\n  z-index: ${Z_INDEX.landing_hero};\n`;\n\nconst TextTransitionContainer = styled.div`\n  width: 88px;\n  height: 48.5px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  @media (min-width: 600px) {\n    width: 128px;\n    height: 70.5px;\n  }\n`;\n\nconst HeartIcon = styled.span`\n  color: #DF2E2D;\n  margin-top: -2px;\n`;\n\nconst LearnMoreContainer = styled.div`\n  display: flex;\n  align-items: center;\n  color: rgb(94, 94, 94);\n  cursor: pointer;\n  font-size: 20px;\n  font-weight: 535;\n  margin: 18px 0px 36px;\n  padding-left: 12px;\n  pointer-events: auto;\n  gap: 8px;\n\n  &:hover {\n    opacity: 0.6;\n  }\n`;\n\nconst CardGrid = styled.div<{ cols: number }>`\n  display: grid;\n  gap: 32px;\n  width: 100%;\n  padding: 24px 0 0;\n  max-width: 1440px;\n  scroll-margin: 10px 0 0;\n\n  grid-template-columns: ${({ cols }) => `repeat(${cols}, 1fr)`};\n`;\n\nconst Icon = styled(SVGIconThemed)`\n  width: 20px;\n  height: 20px;\n  cursor: pointer;\n  transition: opacity 0.2s ease-in-out;\n\n  &:hover {\n    opacity: 0.6;\n  }\n`;\n\nconst SocialIcon = styled(SVGIconThemed)`\n  width: 24px;\n  height: 24px;\n  cursor: pointer;\n  transition: opacity 0.2s ease-in-out;\n\n  &:hover {\n    opacity: 0.6;\n  }\n`;\n\nconst SubHeaderContainer = styled.div`\n  display: grid;\n  justify-content: center;\n  flex-direction: column;\n  padding-top: 1rem;\n  gap: 1rem;\n`;\n\nconst CardContainer = styled.div<{ paddingHorizontal: number }>`\n  display: grid;\n  justify-content: center;\n  flex-direction: column;\n  gap: 1rem;\n  padding: ${({ paddingHorizontal }) => `1rem ${paddingHorizontal}px 0`};\n`;\n\nconst AboutContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n  padding-top: 1rem;\n  gap: 0.5rem;\n  align-items: center;\n  text-align: center;\n`;\n\nconst IconRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  gap: 1.5rem;\n  margin-top: 0.75rem;\n`;\n\nconst SignatureContainer = styled.div`\n  padding-top: 1rem;\n  gap: 0.25rem;\n  display: flex;\n`;\n"
  },
  {
    "path": "client/src/pages/Liquidity.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from \"styled-components\";\n\nimport DepositTable from \"@components/Liquidity\"\nimport useVenmoRampState from '@hooks/venmo/useRampState';\nimport useVenmoLiquidity from '@hooks/venmo/useLiquidity';\nimport useHdfcRampState from '@hooks/hdfc/useRampState';\nimport useHdfcLiquidity from '@hooks/hdfc/useLiquidity';\nimport useGarantiRampState from '@hooks/garanti/useRampState';\nimport useGarantiLiquidity from '@hooks/garanti/useLiquidity';\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Liquidity: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  const {\n    refetchDepositCounter: refetchVenmoDepositCounter,\n    shouldFetchRampState: shouldFetchVenmoRampState\n  } = useVenmoRampState();\n  const {\n    refetchDeposits: refetchVenmoDeposits,\n    shouldFetchDeposits: shouldFetchVenmoDeposits\n  } = useVenmoLiquidity();\n\n  const {\n    refetchDepositCounter: refetchHdfcDepositCounter,\n    shouldFetchRampState: shouldFetchHdfcRampState\n  } = useHdfcRampState();\n  const {\n    refetchDeposits: refetchHdfcDeposits,\n    shouldFetchDeposits: shouldFetchHdfcDeposits\n  } = useHdfcLiquidity();\n\n  const {\n    refetchDepositCounter: refetchGarantiDepositCounter,\n    shouldFetchRampState: shouldFetchGarantiRampState\n  } = useGarantiRampState();\n  const {\n    refetchDeposits: refetchGarantiDeposits,\n    shouldFetchDeposits: shouldFetchGarantiDeposits\n  } = useGarantiLiquidity();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchVenmoRampState) {\n      refetchVenmoDepositCounter?.();\n    }\n\n    if (shouldFetchVenmoDeposits) {\n      refetchVenmoDeposits?.();\n    }\n\n    if (shouldFetchHdfcRampState) {\n      refetchHdfcDepositCounter?.();\n    }\n\n    if (shouldFetchHdfcDeposits) {\n      refetchHdfcDeposits?.();\n    }\n\n    if (shouldFetchGarantiRampState) {\n      refetchGarantiDepositCounter?.();\n    }\n\n    if (shouldFetchGarantiDeposits) {\n      refetchGarantiDeposits?.();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <Main>\n        <DepositTable />\n      </Main>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  padding-bottom: 7rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 3rem;\n  }\n`;\n\nconst Main = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n\n"
  },
  {
    "path": "client/src/pages/Modals.tsx",
    "content": "import ReceiveModal from '@components/Account/ReceiveModal';\nimport { MobileLandingPage } from '@components/MobileLandingPage';\n\nimport { MODALS } from '@helpers/types';\nimport useModal from '@hooks/useModal';\n\n\nexport default function Modals() {\n  const { currentModal } = useModal();\n\n  return (\n    <>\n      {currentModal === MODALS.RECEIVE && (\n        <ReceiveModal />\n      )}\n\n      {currentModal === MODALS.NOT_SUPPORTED_PLATFORM_DEVICE && (\n        <MobileLandingPage />\n      )}\n    </>\n  );\n};\n"
  },
  {
    "path": "client/src/pages/Permissions.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from \"styled-components\";\n\nimport PermissionsForm from \"@components/Permissions\"\nimport usePermissions from \"@hooks/usePermissions\";\n\n\nexport const Permissions: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const { refetchDeniedUsers, shouldFetchDeniedUsers } = usePermissions();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchDeniedUsers) {\n      refetchDeniedUsers?.();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <PageWrapper>\n      <Main>\n        <PermissionsForm />\n      </Main>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  padding-bottom: 7rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 3rem;\n  }\n`;\n\nconst Main = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n"
  },
  {
    "path": "client/src/pages/Privacy.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components';\n\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Privacy: React.FC = () => {\n  const currentDeviceSize = useMediaQuery();\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <PolicyHeader>ZKP2P Privacy Policy</PolicyHeader>\n      <PolicySubheader>Last modified: December 19th, 2023</PolicySubheader>\n      <PolicyContent>\n        <PolicyContentSection>\n          This Privacy Policy (the “Policy”) describes how P2P Labs Inc. (“P2P Labs“, the “Company“, “we”, “us” or “our”) collects, uses, and\n          shares data in connection with the zkp2p web app (zkp2p.xyz) and all of our other properties,\n          products, and services (the “Services”). Your use of the Services is subject to this Policy as well\n          as our Terms of Service.\n          This Privacy Policy describes Our policies and procedures on the collection, use and disclosure\n          of Your information when You use the Service and tells You about Your privacy rights and how\n          the law protects You.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          High Level Summary\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          ● ZKP2P consists of a set of smart contracts deployed on Layer 1 and Layer 2 chains.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● We does not collect or store personal data, such as first name, last name, street\n          address, date of birth, email address, or IP address, in connection with your use of the\n          Services.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● We optionally allow authentication via Google to read select user emails. This enables\n          an improved user experience in generating ZK proofs. Before any data is sent to our\n          proving servers, user consent will be explicitly requested. Only data explicitly approved\n          by the user will be sent to our servers for proof generation. At no point is any user data\n          persisted on our servers.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● We may explore methods to further protect consumers' privacy, such as opt-out prompts,\n          migrating to privacy-centric tooling and deploying proxies to anonymize network traffic.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Users are empowered to explore client-side privacy techniques and tools.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Any material changes to privacy will be reflected in an updated privacy policy and posted\n          to zkp2p.xyz.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          Data We Collect\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          Privacy is central to everything we do at the Company. And we've enshrined transparency as\n          one of our Company values. Accordingly, we aspire to be transparent about what little data we\n          do collect. We do not maintain user accounts and do not store personal data, such as your\n          name or internet protocol (“IP”) address.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          If we receive any communications and information you provide directly to us via email, customer\n          support, social media, or another support channel (such as Twitter or Telegram), or when you\n          participate in any surveys or questionnaires, that data may be persisted on our servers.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          If you specifically provide us with information (such as an email for proof generation), we may\n          use that information for the purposes described when you provide it to us. After a proof has\n          been generated, the information is not persisted on our servers. We will not attempt to link any\n          information you provide to your wallet address, IP address, or other personal data. You do not\n          need to provide us with any personal data to use the Services.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          How We Use Data\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          We use the data we collect in accordance with your instructions, including any applicable terms\n          in our Terms of Service, and as required by law. We may also use data for the following\n          purposes:\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Providing the Services. We use the data we collect to provide, maintain, customize and\n          improve our Services and features of our Services.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Customer support. We may use information to provide customer support for and answer\n          inquiries about the Services.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Safety and security. We may use data to protect against, investigate, and stop\n          fraudulent, unauthorized, or illegal activity. We may also use it to address security risks,\n          solve potential security issues such as bugs, enforce our agreements, and protect our\n          users and Company.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Legal compliance. We may use the information we collect as needed or requested by\n          regulators, government entities, and law enforcement to comply with applicable laws and\n          regulations.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Aggregated data. We may use some of the information we collect or access to compile\n          aggregated data that helps us learn more about how users use the Services and where\n          we can improve your experience.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          How We Share Data\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          We may share or disclose the data we collect:\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● With service providers. We may share your information with our service providers and\n          vendors to assist us in providing, delivering, and improving the Services. For example,\n          we may share your wallet address with service providers like, Alchemy, Infura, and\n          Cloudflare to provide technical infrastructure services, your wallet address with\n          blockchain analytics providers to detect, prevent, and mitigate financial crime and other\n          illicit or harmful activities, and your activity on our social media pages with our analytics\n          provider to learn more about you interact with us and the Services.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● To comply with our legal obligations. We may share your data in the course of litigation,\n          regulatory proceedings, compliance measures, and when compelled by subpoena, court\n          order, or other legal procedure. We may also share data when we believe it is necessary\n          to prevent harm to our users, our Company, or others, and to enforce our agreements\n          and policies, including our Terms of Service.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Safety and Security. We may share data to protect against, investigate, and stop\n          fraudulent, unauthorized, or illegal activity. We may also use it to address security risks,\n          solve potential security issues such as bugs, enforce our agreements, and protect our\n          users, Company, and ecosystem.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Business changes. We may transfer or share data to another entity in the event of a\n          merger, acquisition, bankruptcy, dissolution, reorganization, asset or stock sale, or other\n          business transaction.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● With your consent. We may share your information any other time you provide us with\n          your consent to do so.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● We do not share your information with any third parties for any marketing purposes\n          whatsoever.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          Third Party Cookies\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          We use services provided by Google and other third parties that use tracking technology such\n          as cookies, deviceID, and localStorage, to collect information about your use of the Services\n          and our interactions with you. You can opt out of having your online activity and device data\n          collected through these third-party services, including by:\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Blocking cookies in your browser by following the instructions in your browser settings.\n          For more information about cookies, including how to see the cookies on your device,\n          manage them, and delete them, visit www.allaboutcookies.org.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Blocking or limiting the use of your advertising ID on your mobile device through the\n          device settings.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Using privacy plug-ins or browsers. Certain browsers and browser extensions can be\n          configured to block third-party cookies and trackers.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Using the platform opt-out provided by Google at https://adssettings.google.com. You\n          can learn more about how Google uses your information by reviewing Google’s privacy\n          policy at https://policies.google.com/privacy.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          ● Using advertising industry opt-out tools on each device or browser where you use the\n          Services, available at http://optout.aboutads.info and\n          http://optout.networkadvertising.org.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          Third-Party Links and Sites\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          We may integrate technologies operated or controlled by other parties into parts of the Services.\n          For example, the Services may include links that hyperlink to websites, platforms, and other\n          services not operated or controlled by us. Please note that when you interact with these other\n          parties, including when you leave the Site, those parties may independently collect information\n          about you and solicit information from you. You can learn more about how those parties collect\n          and use your data by consulting their privacy policies and other terms.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          Security\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          We implement and maintain reasonable administrative, physical, and technical security\n          safeguards to help protect data from loss, theft, misuse, unauthorized access, disclosure,\n          alteration, and destruction. Nevertheless, transmission via the internet is not completely secure\n          and we cannot guarantee the security of information about you. You are responsible for all of\n          your activity on the Services, including the security of your blockchain network addresses,\n          cryptocurrency wallets, and their cryptographic keys.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          Age Requirements\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          The Services are intended for a general audience and are not directed at children. We do not\n          knowingly receive personal information (as defined by the U.S. Children’s Privacy Protection\n          Act, or “COPPA”) from children. If you believe we have received personal information about a\n          child under the age of 18, please contact us at team@zkp2p.xyz.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          Additional Notice to California Residents (“CCPA Notice”)\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          The California Consumer Privacy Act of 2018 (“CCPA”) requires certain businesses to provide a\n          CCPA Notice to California residents to explain how we collect, use, and share their personal\n          information, and the rights and choices we offer California residents regarding our handling of\n          their information.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          Privacy Practices. We do not “sell” personal information as defined under the CCPA. Please\n          review the “Sharing and Disclosure of Information” section above for further details about the\n          categories of parties with whom we share information.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          Privacy Rights. The CCPA gives individuals the right to request information about how we have\n          collected, used, and shared your personal information. It also gives you the right to request a\n          copy of any information we may maintain about you. You may also ask us to delete any\n          personal information that we may have received about you. Please note that the CCPA limits\n          these rights, for example, by prohibiting us from providing certain sensitive information in\n          response to access requests and limiting the circumstances under which we must comply with a\n          deletion request. We will respond to requests for information, access, and deletion only to the\n          extent we are able to associate, with a reasonable effort, the information we maintain with the\n          identifying details you provide in your request. If we deny the request, we will communicate the\n          decision to you. You are entitled to exercise the rights described above free from discrimination.\n          Submitting a Request. You can submit a request for information, access, or deletion to\n          team@zkp2p.xyz.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          Identity Verification. The CCPA requires us to collect and verify the identity of any individual\n          submitting a request to access or delete personal information before providing a substantive\n          response.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          Authorized Agents. California residents can designate an “authorized agent” to submit\n          requests on their behalf. We will require the authorized agent to have a written authorization\n          confirming their authority.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          Disclosures for European Union Data Subjects\n          We process personal data for the purposes described in the section titled “How We Use Data”\n          above. Our bases for processing your data include: (i) you have given consent to the process to\n          us or our service provides for one or more specific purposes; (ii) processing is necessary for the\n          performance of a contract with you; (iii) processing is necessary for compliance with a legal\n          obligation; and/or (iv) processing is necessary for the purposes of the legitimate interested\n          pursued by us or a third party, and your interests and fundamental rights and freedoms do not\n          override those interests.\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          Your rights under the General Data Protection Regulations (“GDPR”) include the right to (i)\n          request access and obtain a copy of your personal data, (ii) request rectification or erasure of\n          your personal data, (iii) object to or restrict the processing of your personal data; and (iv)\n          request portability of your personal data. Additionally, you may withdraw your consent to our\n          collection at any time. Nevertheless, we cannot edit or delete information that is stored on a\n          particular blockchain. Information such as your transaction data, blockchain wallet address, and\n          assets held by your address that may be related to the data we collect is beyond our control.\n          To exercise any of your rights under the GDPR, please contact us at team@zkp2p.xyz. We may\n          require additional information from you to process your request. Please note that we may retain\n          information as necessary to fulfill the purpose for which it was collected and may continue to do\n          so even after a data subject request in accordance with our legitimate interests, including to\n          comply with our legal obligations, resolves disputes, prevent fraud, and enforce our agreements.\n          Changes to this Policy\n        </PolicyContentSection>\n\n        <PolicyContentSection>\n          If we make material changes to this Policy, we will notify you via the Services. Nevertheless,\n          your continued use of the Services reflects your periodic review of this Policy and other\n          Company terms, and indicates your consent to them.\n        </PolicyContentSection>\n\n        <PolicyContentHeader>\n          Contact Us\n        </PolicyContentHeader>\n\n        <PolicyContentSection>\n          If you have any questions about this Policy or how we collect, use, or share your information,\n          please contact us at team@zkp2p.xyz.\n        </PolicyContentSection>\n      </PolicyContent>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n\n  @media (max-width: 600px) { \n    padding: 12px 32px 0px;\n  }\n  padding-bottom: ${props => props.$isMobile ? '7rem' : '3rem'};\n\n  margin: auto;\n  max-width: 660px;\n`;\n\nconst PolicyHeader = styled.div`\n  font-size: 28px;\n  padding-bottom: 1.5rem;\n  text-align: left;\n  font-weight: 600;\n`;\n\nconst PolicySubheader = styled.div`\n  font-size: 18px;\n  padding-bottom: 1.5rem;\n  text-align: left;\n  font-weight: 600;\n`;\n\nconst PolicyContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  text-align: left;\n  gap: 1rem;\n`;\n\nconst PolicyContentHeader = styled.div`\n  font-size: 20px;\n  padding-bottom: 1rem;\n  text-align: left;\n`;\n\nconst PolicyContentSection = styled.div`\n  font-size: 16px;\n  padding-bottom: 1rem;\n  text-align: left;\n`;"
  },
  {
    "path": "client/src/pages/Registration.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from \"styled-components\";\n\nimport { RegistrationForm } from \"@components/Registration\"\nimport useRegistration from '@hooks/venmo/useRegistration';\nimport useHdfcRegistration from '@hooks/hdfc/useRegistration';\nimport useGarantiRegistration from '@hooks/garanti/useRegistration';\nimport useRevolutRegistration from '@hooks/revolut/useRegistration';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Registration: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  const {\n    refetchRampAccount: refetchVenmoAccount,\n    shouldFetchRegistration: shouldFetchVenmoRegistration,\n    refetchVenmoNftId,\n    shouldFetchVenmoNftId\n  } = useRegistration();\n\n  const {\n    refetchRampAccount: refetchHdfcAccount,\n    shouldFetchRegistration: shouldFetchHdfcRegistration,\n    refetchHdfcNftId,\n    shouldFetchHdfcNftId\n  } = useHdfcRegistration();\n\n  const {\n    refetchRampAccount: refetchGarantiAccount,\n    shouldFetchRegistration: shouldFetchGarantiRegistration,\n    refetchGarantiNftId,\n    shouldFetchGarantiNftId\n  } = useGarantiRegistration();\n\n  const {\n    refetchRampAccount: refetchRevolutAccount,\n    shouldFetchRegistration: shouldFetchRevolutRegistration,\n    // refetchVenmoNftId: refetchRevolutVenmoNftId,\n    // shouldFetchVenmoNftId: shouldFetchRevolutVenmoNftId\n  } = useRevolutRegistration();\n\n  const {\n    PaymentPlatform,\n    paymentPlatform\n  } = usePlatformSettings();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        if (shouldFetchVenmoRegistration) {\n          refetchVenmoAccount?.();\n        }\n    \n        if (shouldFetchVenmoNftId) {\n          refetchVenmoNftId?.();\n        }\n        break;\n\n        case PaymentPlatform.HDFC:\n          if (shouldFetchHdfcRegistration) {\n            refetchHdfcAccount?.();\n          }\n  \n          if (shouldFetchHdfcNftId) {\n            refetchHdfcNftId?.();\n          }\n          break;\n\n        case PaymentPlatform.GARANTI:\n          if (shouldFetchGarantiRegistration) {\n            refetchGarantiAccount?.();\n          }\n  \n          if (shouldFetchGarantiNftId) {\n            refetchGarantiNftId?.();\n          }\n          break;\n\n        case PaymentPlatform.REVOLUT:\n          if (shouldFetchRevolutRegistration) {\n            refetchRevolutAccount?.();\n          }\n  \n          // if (shouldFetchRevolutVenmoNftId) {\n          //   refetchRevolutVenmoNftId?.();\n          // }\n          break;\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <Main>\n        <RegistrationForm />\n      </Main>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  padding-bottom: 7rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 3rem;\n  }\n`;\n\nconst Main = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n"
  },
  {
    "path": "client/src/pages/Send.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from \"styled-components\";\n\nimport SendForm from \"@components/Send\";\nimport useBalances from '@hooks/useBalance';\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Send: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  const { refetchUsdcBalance, shouldFetchUsdcBalance } = useBalances();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchUsdcBalance) {\n      refetchUsdcBalance?.();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <Main>\n        <SendForm />\n      </Main>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding-bottom: 7rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 3rem;\n  }\n`;\n\nconst Main = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n"
  },
  {
    "path": "client/src/pages/Swap.tsx",
    "content": "import React, { useEffect, useState } from 'react';\nimport styled from \"styled-components\";\n\nimport SwapForm from \"@components/Swap\";\nimport { OnRamp as VenmoOnRamp } from '@components/Swap/venmo/OnRamp';\nimport { OnRamp as HdfcOnRamp } from '@components/Swap/hdfc/OnRamp';\nimport { OnRamp as GarantiOnRamp } from '@components/Swap/garanti/OnRamp';\nimport { OnRamp as RevolutOnRamp } from '@components/Swap/revolut/OnRamp';\nimport useHdfcOnRamperIntents from '@hooks/hdfc/useOnRamperIntents';\nimport useHdfcRampState from '@hooks/hdfc/useRampState';\nimport usePlatformSettings from '@hooks/usePlatformSettings';\nimport useBalances from '@hooks/useBalance';\nimport useOnRamperIntents from '@hooks/venmo/useOnRamperIntents';\nimport useRampState from '@hooks/venmo/useRampState';\nimport useGarantiOnRamperIntents from '@hooks/garanti/useOnRamperIntents';\nimport useGarantiRampState from '@hooks/garanti/useRampState';\nimport useRevolutOnRamperIntents from '@hooks/revolut/useOnRamperIntents';\nimport useRevolutRampState from '@hooks/revolut/useRampState';\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Swap: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  const { refetchUsdcBalance, shouldFetchUsdcBalance } = useBalances();\n  \n  const {\n    currentIntentHash: currentVenmoIntentHash,\n    refetchIntentHash: refetchVenmoIntentHash,\n    shouldFetchIntentHash: shouldFetchVenmoIntentHash,\n    refetchLastOnRampTimestamp: refetchLastVenmoOnRampTimestamp\n  } = useOnRamperIntents();\n\n  const {\n    refetchDepositCounter: refetchVenmoDepositCounter,\n    shouldFetchRampState: shouldFetchVenmoRampState,\n  } = useRampState();\n\n  const {\n    currentIntentHash: currentHdfcIntentHash,\n    refetchIntentHash: refetchHdfcIntentHash,\n    shouldFetchIntentHash: shouldFetchHdfcIntentHash,\n    refetchLastOnRampTimestamp: refetchLastHdfcOnRampTimestamp\n  } = useHdfcOnRamperIntents();\n\n  const {\n    refetchDepositCounter: refetchHdfcDepositCounter,\n    shouldFetchRampState: shouldFetchHdfcRampState,\n  } = useHdfcRampState();\n\n  const {\n    currentIntentHash: currentGarantiIntentHash,\n    refetchIntentHash: refetchGarantiIntentHash,\n    shouldFetchIntentHash: shouldFetchGarantiIntentHash,\n    refetchLastOnRampTimestamp: refetchLastGarantiOnRampTimestamp\n  } = useGarantiOnRamperIntents();\n\n  const {\n    refetchDepositCounter: refetchGarantiDepositCounter,\n    shouldFetchRampState: shouldFetchGarantiRampState,\n  } = useGarantiRampState();\n\n  const {\n    currentIntentHashAsUint: currentRevolutIntentHashAsUint,\n    refetchIntentHash: refetchRevolutIntentHash,\n    shouldFetchIntentHash: shouldFetchRevolutIntentHash,\n    refetchLastOnRampTimestamp: refetchLastRevolutOnRampTimestamp\n  } = useRevolutOnRamperIntents();\n\n  const {\n    refetchDepositCounter: refetchRevolutDepositCounter,\n    shouldFetchRampState: shouldFetchRevolutRampState,\n  } = useRevolutRampState();\n\n  const {\n    PaymentPlatform,\n    paymentPlatform\n  } = usePlatformSettings();\n\n  /*\n   * State\n   */\n\n  const [selectedIntentHash, setSelectedIntentHash] = useState<string | null>(null);\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchUsdcBalance) {\n      refetchUsdcBalance?.();\n    }\n\n    if (shouldFetchVenmoIntentHash) {\n      refetchVenmoIntentHash?.();\n      refetchLastVenmoOnRampTimestamp?.();\n    }\n\n    if (shouldFetchVenmoRampState) {\n      refetchVenmoDepositCounter?.();\n    }\n\n    if (shouldFetchHdfcIntentHash) {\n      refetchHdfcIntentHash?.();\n      refetchLastHdfcOnRampTimestamp?.();\n    }\n\n    if (shouldFetchHdfcRampState) {\n      refetchHdfcDepositCounter?.();\n    }\n\n    if (shouldFetchGarantiIntentHash) {\n      refetchGarantiIntentHash?.();\n      refetchLastGarantiOnRampTimestamp?.();\n    }\n\n    if (shouldFetchGarantiRampState) {\n      refetchGarantiDepositCounter?.();\n    }\n\n    if (shouldFetchRevolutIntentHash) {\n      refetchRevolutIntentHash?.();\n      refetchLastRevolutOnRampTimestamp?.();\n    }\n\n    if (shouldFetchRevolutRampState) {\n      refetchRevolutDepositCounter?.();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  /*\n   * Handlers\n   */\n\n  const handleBackClick = () => {\n    setSelectedIntentHash(null);\n  }\n\n  const handleIntentClick = () => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        setSelectedIntentHash(currentVenmoIntentHash);\n        break;\n      \n      case PaymentPlatform.HDFC:\n        setSelectedIntentHash(currentHdfcIntentHash);\n        break;\n\n      case PaymentPlatform.GARANTI:\n        setSelectedIntentHash(currentGarantiIntentHash);\n        break;\n\n      case PaymentPlatform.REVOLUT:\n        setSelectedIntentHash(currentRevolutIntentHashAsUint);\n        break;\n    }\n  };\n\n  /*\n   * Component\n   */\n\n  const onRampComponent = () => {\n    switch (paymentPlatform) {\n      case PaymentPlatform.VENMO:\n        return (\n          <VenmoOnRamp\n            handleBackClick={handleBackClick}\n            selectedIntentHash={selectedIntentHash as any}\n          />\n        );\n\n      case PaymentPlatform.HDFC:\n        return (\n          <HdfcOnRamp\n            handleBackClick={handleBackClick}\n            selectedIntentHash={selectedIntentHash as any}\n          />\n        );\n\n      case PaymentPlatform.GARANTI:\n        return (\n          <GarantiOnRamp\n            handleBackClick={handleBackClick}\n            selectedIntentHash={selectedIntentHash as any}\n          />\n        );\n\n      case PaymentPlatform.REVOLUT:\n        return (\n          <RevolutOnRamp\n            handleBackClick={handleBackClick}\n            selectedUIntIntentHash={currentRevolutIntentHashAsUint as any}\n          />\n        );\n\n      default:\n        throw new Error(`Unknown payment platform: ${paymentPlatform}`);\n    }\n  };\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      {!selectedIntentHash ? (\n        <SwapForm\n          onIntentTableRowClick={handleIntentClick}\n        />\n      ) : (\n        <OnRampContainer>\n          {onRampComponent()}\n        </OnRampContainer>\n      )}\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding-bottom: 7rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 3rem;\n  }\n`;\n\nconst OnRampContainer = styled.div`\n  max-width: 660px;\n  padding-top: 1.5rem;\n`;\n"
  },
  {
    "path": "client/src/pages/Tos.tsx",
    "content": "import React from 'react';\nimport styled from 'styled-components';\n\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Tos: React.FC = () => {\n  const currentDeviceSize = useMediaQuery();\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <TermsHeader>ZKP2P Terms of Service</TermsHeader>\n      <TermsSubheader>Last modified: December 19th, 2023</TermsSubheader>\n      <TermsContent>\n        <TermsContentSection>\n          These Terms of Service (the \"Agreement\") explain the terms and conditions by which you may\n          access and use the Products provided by us (referred to herein as \"P2P Labs\", \"we\", \"our\", or \"us\"). The\n          Products shall include, but shall not necessarily be limited to, (a) zkp2p.xyz, a website-hosted\n          user interface (the \"Interface\" or \"App\"). You must read this Agreement carefully as it governs\n          your use of the Products. By accessing or using any of the Products, you signify that you have\n          read, understand, and agree to be bound by this Agreement in its entirety. If you do not agree,\n          you are not authorized to access or use any of our Products and should not use our Products.\n          To access or use any of our Products, you must be able to form a legally binding contract with\n          us. Accordingly, you represent that you are at least the age of majority in your jurisdiction (e.g.,\n          18 years old in the United States) and have the full right, power, and authority to enter into and\n          comply with the terms and conditions of this Agreement on behalf of yourself and any company\n          or legal entity for which you may access or use the Interface. If you are entering into this\n          Agreement on behalf of an entity, you represent to us that you have the legal authority to bind\n          such entity.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          You further represent that you are not (a) the subject of economic or trade sanctions\n          administered or enforced by any governmental authority or otherwise designated on any list of\n          prohibited or restricted parties (including but not limited to the list maintained by the Office of\n          Foreign Assets Control of the U.S. Department of the Treasury) or (b) a citizen, resident, or\n          organized in a jurisdiction or territory that is the subject of comprehensive country-wide,\n          territory-wide, or regional economic sanctions by the United States. Finally, you represent that\n          your access and use of any of our Products will fully comply with all applicable laws and\n          regulations, and that you will not access or use any of our Products to conduct, promote, or\n          otherwise facilitate any illegal activity.\n          NOTICE: This Agreement contains important information, including a binding arbitration\n          provision and a class action waiver, both of which impact your rights as to how disputes are\n          resolved. Our Products are only available to you — and you should only access any of our\n          Products — if you agree completely with these terms.\n        </TermsContentSection>\n\n        <TermsContentHeader>\n          1. Our Products\n        </TermsContentHeader>\n\n        <TermsContentSubHeader>\n          1.1 The Interface\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          The Interface provides a web or mobile-based means of access to (a) a decentralized protocol\n          on various public blockchains, including but not limited to Ethereum, that facilitates an escrow\n\n          transaction between counterparties who engage in a transaction on peer to peer payment\n          platforms (currently Venmo) in order to complete a trade for stable currencies on chain.\n          The Interface is distinct from the Protocol and is one, but not the exclusive, means of accessing\n          the Protocol. By using the Interface, you understand that you are not transacting from us and\n          that we do not control trade execution on the Protocol.\n          To access the Interface, you must use a non-custodial wallet software, which allows you to\n          interact with public blockchains. Your relationship with that non-custodial wallet provider is\n          governed by the applicable terms of service. We do not have custody or control over the\n          contents of your wallet and have no ability to retrieve or transfer its contents. By connecting your\n          wallet to our Interface, you agree to be bound by this Agreement and all of the terms\n          incorporated herein by reference.\n        </TermsContentSection>\n\n        <TermsContentHeader>\n          2. Modifications of this Agreement or our Products\n        </TermsContentHeader>\n\n        <TermsContentSubHeader>\n          2.1 Modifications of this Agreement\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          We reserve the right, in our sole discretion, to modify this Agreement from time to time. If we\n          make any material modifications, we will notify you by updating the date at the top of the\n          Agreement and by maintaining a current version of the Agreement. All modifications will be\n          effective when they are posted, and your continued accessing or use of any of the Products will\n          serve as confirmation of your acceptance of those modifications. If you do not agree with any\n          modifications to this Agreement, you must immediately stop accessing and using all of our\n          Products.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          2.2 Modifications of our Products\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          We reserve the following rights, which do not constitute obligations of ours: (a) with or without\n          notice to you, to modify, substitute, eliminate or add to any of the Products; (b) to review, modify,\n          filter, disable, delete and remove any and all content and information from any of the Products.\n        </TermsContentSection>\n\n        <TermsContentHeader>\n          3. Intellectual Property Rights\n        </TermsContentHeader>\n\n        <TermsContentSubHeader>\n          3.1 IP Rights Generally\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          We own all intellectual property and other rights in each of our Products and its respective\n          contents, including, but not limited to, software, text, images, trademarks, service marks,\n          copyrights, patents, designs, and its \"look and feel.\" Subject to the terms of this Agreement, we\n          grant you a limited, revocable, non-exclusive, non-sublicensable, non-transferable license to\n          access and use our Products solely in accordance with this Agreement. You agree that you will\n          not use, modify, distribute, tamper with, reverse engineer, disassemble or decompile any of our\n          Products for any purpose other than as expressly permitted pursuant to this Agreement. Except\n          as set forth in this Agreement, we grant you no rights to any of our Products, including any\n          intellectual property rights.\n          You understand and acknowledge that the Protocol is not a Product and we do not control the\n          Protocol.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          By using any of our Products (including to list, post, or promote), you grant us a worldwide,\n          non-exclusive, sublicensable, royalty-free license to use, copy, modify, and display any content,\n          including but not limited to text, materials, images, files, communications, comments, feedback,\n          suggestions, ideas, concepts, questions, data, or otherwise, that you post on or through any of\n          our Products for our current and future business purposes, including to provide, promote, and\n          improve the services. You grant to us a non-exclusive, transferable, worldwide, perpetual,\n          irrevocable, fully-paid, royalty-free license, with the right to sublicense, under any and all\n          intellectual property rights that you own or control to use, copy, modify, create derivative works\n          based upon any suggestions or feedback for any purpose.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          You represent and warrant that you have, or have obtained, all rights, licenses, consents,\n          permissions, power and/or authority necessary to grant the rights granted herein for any\n          material that you list, post, promote, or display on or through any of our Products. You represent\n          and warrant that such content does not contain material subject to copyright, trademark,\n          publicity rights, or other intellectual property rights, unless you have necessary permission or\n          are otherwise legally entitled to post the material and to grant us the license described above,\n          and that the content does not violate any laws.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          3.2 Third-Party Resources and Promotions\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          Our Products may contain references or links to third-party resources, including, but not limited\n          to, information, materials, products, or services, that we do not own or control. In addition, third\n          parties may offer promotions related to your access and use of our Products. We do not\n          approve, monitor, endorse, warrant or assume any responsibility for any such resources or\n          promotions. If you access any such resources or participate in any such promotions, you do so\n          at your own risk, and you understand that this Agreement does not apply to your dealings or\n          relationships with any third parties. You expressly relieve us of any and all liability arising from\n          your use of any such resources or participation in any such promotions.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          3.3 Additional Rights\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          We reserve the right to cooperate with any law enforcement, court or government investigation\n          or order or third party requesting or directing that we disclose information or content or\n          information that you provide.\n        </TermsContentSection>\n\n        <TermsContentHeader>\n          4. Your Responsibilities\n        </TermsContentHeader>\n\n        <TermsContentSubHeader>\n          4.1 Prohibited Activity\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          You agree not to engage in, or attempt to engage in, any of the following categories of\n          prohibited activity in relation to your access and use of the Interface:\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ○ Intellectual Property Infringement. Activity that infringes on or violates any copyright,\n          trademark, service mark, patent, right of publicity, right of privacy, or other proprietary or\n          intellectual property rights under the law.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ○ Cyberattack. Activity that seeks to interfere with or compromise the integrity, security, or\n          proper functioning of any computer, server, network, personal device, or other\n          information technology system, including, but not limited to, the deployment of viruses\n          and denial of service attacks.\n        </TermsContentSection>\n\n        ○ Fraud and Misrepresentation. Activity that seeks to defraud us or any other person or\n        entity, including, but not limited to, providing any false, inaccurate, or misleading\n        information in order to unlawfully obtain the property of another.\n        \n        <TermsContentSection>\n          ○ Market Manipulation. Activity that violates any applicable law, rule, or regulation\n          concerning the integrity of trading markets, including, but not limited to, the manipulative\n          tactics commonly known as \"rug pulls\", pumping and dumping, and wash trading.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ○ Securities and Derivatives Violations. Activity that violates any applicable law, rule, or\n          regulation concerning the trading of securities or derivatives, including, but not limited to,\n          the unregistered offering of securities and the offering of leveraged and margined\n          commodity products to retail customers in the United States.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ○ Sale of Stolen Property. Buying, selling, or transferring of stolen items, fraudulently\n          obtained items, items taken without authorization, and/or any other illegally obtained\n          items.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ○ Data Mining or Scraping. Activity that involves data mining, robots, scraping, or similar\n          data gathering or extraction methods of content or information from any of our Products.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ○ Objectionable Content. Activity that involves soliciting information from anyone under the\n          age of 18 or that is otherwise harmful, threatening, abusive, harassing, tortious,\n          excessively violent, defamatory, vulgar, obscene, pornographic, libelous, invasive of\n          another's privacy, hateful, discriminatory, or otherwise objectionable.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ○ Any Other Unlawful Conduct. Activity that violates any applicable law, rule, or regulation\n          of the United States or another relevant jurisdiction, including, but not limited to, the\n          restrictions and regulatory requirements imposed by U.S. law.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          4.2 Trading\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          You agree and understand that: (a) all trades you submit through any of our Products are\n          considered unsolicited, which means that they are solely initiated by you; (b) you have not\n          received any investment advice from us in connection with any trades, including those you place\n          via automated means; and (c) we do not conduct a suitability review of any trades you submit.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          4.3 Non-Custodial and No Fiduciary Duties\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          Each of the Products is a purely non-custodial application, meaning we do not ever have\n          custody, possession, or control of your digital assets at any time. It further means you are solely\n          responsible for the custody of the cryptographic private keys to the digital asset wallets you hold\n          and you should never share your wallet credentials or seed phrase with anyone. We accept no\n          responsibility for, or liability to you, in connection with your use of a wallet and make no\n          representations or warranties regarding how any of our Products will operate with any specific\n          wallet. Likewise, you are solely responsible for any associated wallet and we are not liable for\n          any acts or omissions by you in connection with or as a result of your wallet being\n          compromised.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          This Agreement is not intended to, and does not, create or impose any fiduciary duties on us. To\n          the fullest extent permitted by law, you acknowledge and agree that we owe no fiduciary duties\n          or liabilities to you or any other party, and that to the extent any such duties or liabilities may\n          exist at law or in equity, those duties and liabilities are hereby irrevocably disclaimed, waived,\n          and eliminated. You further agree that the only duties and obligations that we owe you are those\n          set out expressly in this Agreement.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          4.4 Compliance and Tax Obligations\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          One or more of our Products may not be available or appropriate for use in your jurisdiction. By\n          accessing or using any of our Products, you agree that you are solely and entirely responsible\n          for compliance with all laws and regulations that may apply to you.\n          Specifically, your use of our Products or the Protocol may result in various tax consequences,\n          such as income or capital gains tax, value-added tax, goods and services tax, or sales tax in\n          certain jurisdictions.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          It is your responsibility to determine whether taxes apply to any transactions you initiate or\n          receive and, if so, to report and/or remit the correct tax to the appropriate tax authority.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          4.5 Gas Fees\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          Blockchain transactions require the payment of transaction fees to the appropriate network\n          (\"Gas Fees\"). Except as otherwise expressly set forth in the terms of another offer by us, you\n          will be solely responsible to pay the Gas Fees for any transaction that you initiate via any of our\n          Products.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          4.6 Release of Claims\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          You expressly agree that you assume all risks in connection with your access and use of any of\n          our Products. You further expressly waive and release us from any and all liability, claims,\n          causes of action, or damages arising from or in any way relating to your use of any of our\n          Products. If you are a California resident, you waive the benefits and protections of California\n          Civil Code § 1542, which provides: \"[a] general release does not extend to claims that the\n          creditor or releasing party does not know or suspect to exist in his or her favor at the time of\n          executing the release and that, if known by him or her, would have materially affected his or her\n          settlement with the debtor or released party.\"\n        </TermsContentSection>\n\n        <TermsContentHeader>\n          5. DISCLAIMERS\n        </TermsContentHeader>\n\n        <TermsContentSubHeader>\n          5.1 ASSUMPTION OF RISK -- GENERALLY\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          BY ACCESSING AND USING ANY OF OUR PRODUCTS, YOU REPRESENT THAT YOU ARE\n          FINANCIALLY AND TECHNICALLY SOPHISTICATED ENOUGH TO UNDERSTAND THE\n          INHERENT RISKS ASSOCIATED WITH USING CRYPTOGRAPHIC AND\n          BLOCKCHAIN-BASED SYSTEMS, AND THAT YOU HAVE A WORKING KNOWLEDGE OF\n          THE USAGE AND INTRICACIES OF DIGITAL ASSETS SUCH AS ETHER (ETH), SO-CALLED\n          STABLECOINS, AND OTHER DIGITAL TOKENS SUCH AS THOSE FOLLOWING THE\n          ETHEREUM TOKEN STANDARD (ERC-20).\n          IN PARTICULAR, YOU UNDERSTAND THAT THE MARKETS FOR THESE DIGITAL ASSETS\n          ARE NASCENT AND HIGHLY VOLATILE DUE TO RISK FACTORS INCLUDING, BUT NOT\n          LIMITED TO, ADOPTION, SPECULATION, TECHNOLOGY, SECURITY, AND REGULATION.\n          YOU UNDERSTAND THAT ANYONE CAN CREATE A TOKEN, INCLUDING FAKE VERSIONS\n          OF EXISTING TOKENS AND TOKENS THAT FALSELY CLAIM TO REPRESENT PROJECTS,\n          AND ACKNOWLEDGE AND ACCEPT THE RISK THAT YOU MAY MISTAKENLY TRADE\n          THOSE OR OTHER TOKENS. SO-CALLED STABLECOINS MAY NOT BE AS STABLE AS\n          THEY PURPORT TO BE, MAY NOT BE FULLY OR ADEQUATELY COLLATERALIZED, AND\n          MAY BE SUBJECT TO PANICS AND RUNS.\n          FURTHER, YOU UNDERSTAND THAT SMART CONTRACT TRANSACTIONS\n          AUTOMATICALLY EXECUTE AND SETTLE, AND THAT BLOCKCHAIN-BASED\n          TRANSACTIONS ARE IRREVERSIBLE WHEN CONFIRMED. YOU ACKNOWLEDGE AND\n          ACCEPT THAT THE COST AND SPEED OF TRANSACTING WITH CRYPTOGRAPHIC AND\n          BLOCKCHAIN-BASED SYSTEMS SUCH AS ETHEREUM ARE VARIABLE AND MAY\n          INCREASE DRAMATICALLY AT ANY TIME. YOU FURTHER ACKNOWLEDGE AND ACCEPT\n          THE RISK OF SELECTING TO TRADE IN EXPERT MODES, WHICH CAN EXPOSE YOU TO\n          POTENTIALLY SIGNIFICANT PRICE SLIPPAGE AND HIGHER COSTS.\n          FINALLY, YOU UNDERSTAND THAT WE DO NOT CREATE, OWN, OR OPERATE\n          CROSS-CHAIN BRIDGES AND WE DO NOT MAKE ANY REPRESENTATION OR\n          WARRANTY ABOUT THE SAFETY OR SOUNDNESS OF ANY CROSS-CHAIN BRIDGE.\n          IN SUMMARY, YOU ACKNOWLEDGE THAT WE ARE NOT RESPONSIBLE FOR ANY OF\n          THESE VARIABLES OR RISKS, DO NOT OWN OR CONTROL THE PROTOCOL, AND\n          CANNOT BE HELD LIABLE FOR ANY RESULTING LOSSES THAT YOU EXPERIENCE\n          WHILE ACCESSING OR USING ANY OF OUR PRODUCTS. ACCORDINGLY, YOU\n        </TermsContentSection>\n\n        <TermsContentSection>\n          UNDERSTAND AND AGREE TO ASSUME FULL RESPONSIBILITY FOR ALL OF THE RISKS\n          OF ACCESSING AND USING THE INTERFACE TO INTERACT WITH THE PROTOCOL.**\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          5.2 NO WARRANTIES\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          EACH OF OUR PRODUCTS ARE PROVIDED ON AN \"AS IS\" AND \"AS AVAILABLE\" BASIS.\n          TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ANY REPRESENTATIONS\n          AND WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED, OR STATUTORY,\n          INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF MERCHANTABILITY AND\n          FITNESS FOR A PARTICULAR PURPOSE. YOU ACKNOWLEDGE AND AGREE THAT YOUR\n          USE OF EACH OF OUR PRODUCTS IS AT YOUR OWN RISK. WE DO NOT REPRESENT OR\n          WARRANT THAT ACCESS TO ANY OF OUR PRODUCTS WILL BE CONTINUOUS,\n          UNINTERRUPTED, TIMELY, OR SECURE; THAT THE INFORMATION CONTAINED IN ANY\n          OF OUR PRODUCTS WILL BE ACCURATE, RELIABLE, COMPLETE, OR CURRENT; OR\n          THAT ANY OF OUR PRODUCTS WILL BE FREE FROM ERRORS, DEFECTS, VIRUSES, OR\n          OTHER HARMFUL ELEMENTS. NO ADVICE, INFORMATION, OR STATEMENT THAT WE\n          MAKE SHOULD BE TREATED AS CREATING ANY WARRANTY CONCERNING ANY OF\n          OUR PRODUCTS. WE DO NOT ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY\n          FOR ANY ADVERTISEMENTS, OFFERS, OR STATEMENTS MADE BY THIRD PARTIES\n          CONCERNING ANY OF OUR PRODUCTS.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          SIMILARLY, THE PROTOCOL IS PROVIDED \"AS IS\", AT YOUR OWN RISK, AND WITHOUT\n          WARRANTIES OF ANY KIND. ALTHOUGH WE CONTRIBUTED TO THE INITIAL CODE FOR\n          THE PROTOCOL, WE DO NOT PROVIDE, OWN, OR CONTROL THE PROTOCOL, WHICH IS\n          RUN AUTONOMOUSLY WITHOUT ANY HEADCOUNT BY SMART CONTRACTS DEPLOYED\n          ON VARIOUS BLOCKCHAINS. UPGRADES AND MODIFICATIONS TO THE PROTOCOL ARE\n          GENERALLY MANAGED IN A COMMUNITY-DRIVEN WAY BY HOLDERS OF THE UNI\n          GOVERNANCE TOKEN. NO DEVELOPER OR ENTITY INVOLVED IN CREATING THE\n          PROTOCOL WILL BE LIABLE FOR ANY CLAIMS OR DAMAGES WHATSOEVER\n          ASSOCIATED WITH YOUR USE, INABILITY TO USE, OR YOUR INTERACTION WITH\n          OTHER USERS OF, THE PROTOCOL, INCLUDING ANY DIRECT, INDIRECT, INCIDENTAL,\n          SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR LOSS OF\n          PROFITS, CRYPTOCURRENCIES, TOKENS, OR ANYTHING ELSE OF VALUE. WE DO NOT\n          ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY ADVERTISEMENTS,\n          OFFERS, OR STATEMENTS MADE BY THIRD PARTIES CONCERNING ANY OF OUR\n          PRODUCTS.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          ANY PAYMENTS OR FINANCIAL TRANSACTIONS THAT YOU ENGAGE IN WILL BE\n          PROCESSED VIA AUTOMATED SMART CONTRACTS. ONCE EXECUTED, WE HAVE NO\n          CONTROL OVER THESE PAYMENTS OR TRANSACTIONS, NOR DO WE HAVE THE\n          ABILITY TO REVERSE ANY PAYMENTS OR TRANSACTIONS.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          5.3 NO INVESTMENT ADVICE\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          WE MAY PROVIDE INFORMATION ABOUT TOKENS IN OUR PRODUCTS SOURCED FROM\n          THIRD-PARTY DATA PARTNERS THROUGH FEATURES SUCH AS RARITY SCORES,\n          TOKEN EXPLORER OR TOKEN LISTS. WE MAY ALSO PROVIDE WARNING LABELS FOR\n          CERTAIN TOKENS. THE PROVISION OF INFORMATIONAL MATERIALS DOES NOT MAKE\n          TRADES IN THOSE TOKENS SOLICITED; WE ARE NOT ATTEMPTING TO INDUCE YOU TO\n          MAKE ANY PURCHASE AS A RESULT OF INFORMATION PROVIDED. ALL SUCH\n          INFORMATION PROVIDED BY ANY OF OUR PRODUCTS IS FOR INFORMATIONAL\n          PURPOSES ONLY AND SHOULD NOT BE CONSTRUED AS INVESTMENT ADVICE OR A\n          RECOMMENDATION THAT A PARTICULAR TOKEN IS A SAFE OR SOUND INVESTMENT.\n          YOU SHOULD NOT TAKE, OR REFRAIN FROM TAKING, ANY ACTION BASED ON ANY\n          INFORMATION CONTAINED IN ANY OF OUR PRODUCTS. BY PROVIDING TOKEN\n          INFORMATION FOR YOUR CONVENIENCE, WE DO NOT MAKE ANY INVESTMENT\n          RECOMMENDATIONS TO YOU OR OPINE ON THE MERITS OF ANY TRANSACTION OR\n          OPPORTUNITY. YOU ALONE ARE RESPONSIBLE FOR DETERMINING WHETHER ANY\n          INVESTMENT, INVESTMENT STRATEGY OR RELATED TRANSACTION IS APPROPRIATE\n          FOR YOU BASED ON YOUR PERSONAL INVESTMENT OBJECTIVES, FINANCIAL\n          CIRCUMSTANCES, AND RISK TOLERANCE.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          6. Indemnification\n        </TermsContentSection>\n\n        <TermsContentSection>\n          You agree to hold harmless, release, defend, and indemnify us and our officers, directors,\n          employees, contractors, agents, affiliates, and subsidiaries from and against all claims,\n          damages, obligations, losses, liabilities, costs, and expenses arising from: (a) your access and\n          use of any of our Products; (b) your violation of any term or condition of this Agreement, the\n          right of any third party, or any other applicable law, rule, or regulation; (c) any other party's\n          access and use of any of our Products with your assistance or using any device or account that\n          you own or control; and (d) any dispute between you and (i) any other user of any of the\n          Products or (ii) any of your own customers or users.\n        </TermsContentSection>\n\n        <TermsContentHeader>\n          7. Limitation of Liability\n        </TermsContentHeader>\n          \n        <TermsContentSection>\n          UNDER NO CIRCUMSTANCES SHALL WE OR ANY OF OUR OFFICERS, DIRECTORS,\n          EMPLOYEES, CONTRACTORS, AGENTS, AFFILIATES, OR SUBSIDIARIES BE LIABLE TO\n          YOU FOR ANY INDIRECT, PUNITIVE, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR\n          EXEMPLARY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF\n          PROFITS, GOODWILL, USE, DATA, OR OTHER INTANGIBLE PROPERTY, ARISING OUT OF\n          OR RELATING TO ANY ACCESS OR USE OF OR INABILITY TO ACCESS OR USE ANY OF\n          THE PRODUCTS, NOR WILL WE BE RESPONSIBLE FOR ANY DAMAGE, LOSS, OR\n          INJURY RESULTING FROM HACKING, TAMPERING, OR OTHER UNAUTHORIZED ACCESS\n          OR USE OF ANY OF THE PRODUCTS OR THE INFORMATION CONTAINED WITHIN IT,\n          WHETHER SUCH DAMAGES ARE BASED IN CONTRACT, TORT, NEGLIGENCE, STRICT\n          LIABILITY, OR OTHERWISE, ARISING OUT OF OR IN CONNECTION WITH AUTHORIZED\n          OR UNAUTHORIZED USE OF ANY OF THE PRODUCTS, EVEN IF AN AUTHORIZED\n        </TermsContentSection>\n\n        <TermsContentSection>\n          REPRESENTATIVE OF US HAS BEEN ADVISED OF OR KNEW OR SHOULD HAVE KNOWN\n          OF THE POSSIBILITY OF SUCH DAMAGES. WE ASSUME NO LIABILITY OR\n          RESPONSIBILITY FOR ANY: (A) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT;\n          (B) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER,\n          RESULTING FROM ANY ACCESS OR USE OF THE INTERFACE; (C) UNAUTHORIZED\n          ACCESS OR USE OF ANY SECURE SERVER OR DATABASE IN OUR CONTROL, OR THE\n          USE OF ANY INFORMATION OR DATA STORED THEREIN; (D) INTERRUPTION OR\n          CESSATION OF FUNCTION RELATED TO ANY OF THE PRODUCTS; (E) BUGS, VIRUSES,\n          TROJAN HORSES, OR THE LIKE THAT MAY BE TRANSMITTED TO OR THROUGH THE\n          INTERFACE; (F) ERRORS OR OMISSIONS IN, OR LOSS OR DAMAGE INCURRED AS A\n          RESULT OF THE USE OF, ANY CONTENT MADE AVAILABLE THROUGH ANY OF THE\n          PRODUCTS; AND (G) THE DEFAMATORY, OFFENSIVE, OR ILLEGAL CONDUCT OF ANY\n          THIRD PARTY.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          WE HAVE NO LIABILITY TO YOU OR TO ANY THIRD PARTY FOR ANY CLAIMS OR\n          DAMAGES THAT MAY ARISE AS A RESULT OF ANY PAYMENTS OR TRANSACTIONS THAT\n          YOU ENGAGE IN VIA ANY OF OUR PRODUCTS, OR ANY OTHER PAYMENT OR\n          TRANSACTIONS THAT YOU CONDUCT VIA ANY OF OUR PRODUCTS. EXCEPT AS\n          EXPRESSLY PROVIDED FOR HEREIN, WE DO NOT PROVIDE REFUNDS FOR ANY\n          PURCHASES THAT YOU MIGHT MAKE ON OR THROUGH ANY OF OUR PRODUCTS.\n          WE MAKE NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED, ABOUT\n          LINKED THIRD PARTY SERVICES, THE THIRD PARTIES THEY ARE OWNED AND\n          OPERATED BY, THE INFORMATION CONTAINED ON THEM, ASSETS AVAILABLE\n          THROUGH THEM, OR THE SUITABILITY, PRIVACY, OR SECURITY OF THEIR PRODUCTS\n          OR SERVICES. YOU ACKNOWLEDGE SOLE RESPONSIBILITY FOR AND ASSUME ALL\n          RISK ARISING FROM YOUR USE OF THIRD-PARTY SERVICES, THIRD-PARTY WEBSITES,\n          APPLICATIONS, OR RESOURCES. WE SHALL NOT BE LIABLE UNDER ANY\n          CIRCUMSTANCES FOR DAMAGES ARISING OUT OF OR IN ANY WAY RELATED TO\n          SOFTWARE, PRODUCTS, SERVICES, AND/OR INFORMATION OFFERED OR PROVIDED\n          BY THIRD-PARTIES AND ACCESSED THROUGH ANY OF OUR PRODUCTS.\n          SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY FOR PERSONAL\n          INJURY, OR OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY\n          NOT APPLY TO YOU. IN NO EVENT SHALL OUR TOTAL LIABILITY TO YOU FOR ALL\n          DAMAGES (OTHER THAN AS MAY BE REQUIRED BY APPLICABLE LAW IN CASES\n          INVOLVING PERSONAL INJURY) EXCEED THE AMOUNT OF ONE HUNDRED U.S.\n          DOLLARS ($100.00 USD) OR ITS EQUIVALENT IN THE LOCAL CURRENCY OF THE\n          APPLICABLE JURISDICTION.\n        </TermsContentSection>\n\n        <TermsContentSection>\n          THE FOREGOING DISCLAIMER WILL NOT APPLY TO THE EXTENT PROHIBITED BY LAW.\n        </TermsContentSection>\n        \n        <TermsContentHeader>\n          8. Governing Law and Venue\n        </TermsContentHeader>\n\n        <TermsContentSection>\n          This Agreement and your access to and use of the Site will be governed by the laws of the State\n          of California, U.S.A., without regard to conflict of law rules or principles (whether of the State of\n        </TermsContentSection>\n\n        <TermsContentSection>\n          California or any other jurisdiction) that would cause the application of the laws of any other\n          jurisdiction. Any dispute between the parties that is not subject to arbitration or cannot be heard\n          in small claims court shall be resolved in the state or federal courts of the State of California and\n          the United States, respectively, sitting in San Francisco County, California.\n        </TermsContentSection>\n\n        <TermsContentHeader>\n          9. Miscellaneous\n        </TermsContentHeader>\n\n        <TermsContentSubHeader>\n          9.1 Entire Agreement\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          These terms constitute the entire agreement between you and us with respect to the subject\n          matter hereof. This Agreement supersedes any and all prior or contemporaneous written and\n          oral agreements, communications and other understandings (if any) relating to the subject\n          matter of the terms.\n        </TermsContentSection>\n\n        \n        <TermsContentSubHeader>\n          9.2 Assignment\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          You may not assign or transfer this Agreement, by operation of law or otherwise, without our\n          prior written consent. Any attempt by you to assign or transfer this Agreement without our prior\n          written consent shall be null and void. We may freely assign or transfer this Agreement. Subject\n          to the foregoing, this Agreement will bind and inure to the benefit of the parties, their successors\n          and permitted assigns.\n        </TermsContentSection>\n        \n        <TermsContentSubHeader>\n          9.3 Rewards\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          In connection with your historic or current use of one or more of our Products, we may provide\n          you certain incentives, prizes or rewards for completing certain activities, such as completing a\n          certain number of transactions (\"User Rewards\"). Details regarding the criteria for earning a\n          reward will be described within the applicable Product or official documentation. Upon\n          satisfaction of the criteria for obtaining a reward and subject to your compliance with the\n          associated rewards terms, this Agreement, and applicable law — to be determined exclusively\n          by Company — we will use commercially reasonable efforts to promptly transfer the earned\n          reward to the digital wallet that you designate or have connected to the applicable Product. We\n          reserve the right to change, modify, discontinue or cancel any rewards programs (including the\n          frequency and criteria for earning such User Rewards), at any time and without notice to you.\n        </TermsContentSection>\n        \n        <TermsContentSubHeader>\n          9.4 Not Registered with the SEC or Any Other Agency\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          We are not registered with the U.S. Securities and Exchange Commission as a national\n          securities exchange or in any other capacity. You understand and acknowledge that we do not\n          broker trading orders on your behalf. We also do not facilitate the execution or settlement of\n          your trades, which occur entirely on public distributed blockchains like Ethereum. As a result, we\n          do not (and cannot) guarantee market best pricing or best execution through our Products.\n        </TermsContentSection>\n\n        <TermsContentSubHeader>\n          9.5. Notice\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          We may provide any notice to you under this Agreement using commercially reasonable means,\n          including using public communication channels. Notices we provide by using public\n          communication channels will be effective upon posting.\n        </TermsContentSection>\n        \n        <TermsContentSubHeader>\n          9.6 Severability\n        </TermsContentSubHeader>\n\n        <TermsContentSection>\n          If any provision of this Agreement shall be determined to be invalid or unenforceable under any\n          rule, law, or regulation of any local, state, or federal government agency, such provision will be\n          changed and interpreted to accomplish the objectives of the provision to the greatest extent\n          possible under any applicable law and the validity or enforceability of any other provision of this\n          Agreement shall not be affected.\n        </TermsContentSection>\n      </TermsContent>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n\n  @media (max-width: 600px) {\n    padding: 12px 32px 0px;\n  }\n  padding-bottom: ${props => props.$isMobile ? '7rem' : '3rem'};\n\n  margin: auto;\n  max-width: 660px;\n`;\n\nconst TermsHeader = styled.div`\n  font-size: 28px;\n  padding-bottom: 1.5rem;\n  text-align: left;\n  font-weight: 600;\n`;\n\nconst TermsSubheader = styled.div`\n  font-size: 18px;\n  padding-bottom: 1.5rem;\n  text-align: left;\n  font-weight: 600;\n`;\n\nconst TermsContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  text-align: left;\n  gap: 1rem;\n`;\n\nconst TermsContentHeader = styled.div`\n  font-size: 20px;\n  padding-bottom: 1rem;\n  text-align: left;\n`;\n\nconst TermsContentSubHeader = styled.div`\n  font-size: 18px;\n  padding-bottom: 1rem;\n  text-align: left;\n`;\n\nconst TermsContentSection = styled.div`\n  font-size: 16px;\n  padding-bottom: 1rem;\n  text-align: left;\n`;"
  },
  {
    "path": "client/src/pages/Withdraw.tsx",
    "content": "import React, { useEffect } from 'react';\nimport styled from \"styled-components\";\n\nimport DepositTable from \"@components/Withdraw\"\nimport useBalances from '@hooks/useBalance';\nimport useLegacyDeposits from '@hooks/useLegacyDeposits';\nimport useMediaQuery from '@hooks/useMediaQuery';\n\n\nexport const Withdraw: React.FC = () => {\n  /*\n   * Contexts\n   */\n\n  const currentDeviceSize = useMediaQuery();\n\n  const { refetchDeposits, shouldFetchDeposits } = useLegacyDeposits();\n  const { refetchUsdcBalance, shouldFetchUsdcBalance } = useBalances();\n\n  /*\n   * Hooks\n   */\n\n  useEffect(() => {\n    if (shouldFetchDeposits) {\n      refetchDeposits?.();\n    }\n\n    if (shouldFetchUsdcBalance) {\n      refetchUsdcBalance?.();\n    }\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <PageWrapper $isMobile={currentDeviceSize === 'tablet' || currentDeviceSize === 'mobile'}>\n      <Main>\n        <DepositTable />\n      </Main>\n    </PageWrapper>\n  );\n};\n\nconst PageWrapper = styled.div<{ $isMobile: boolean }>`\n  display: flex;\n  flex-direction: column;\n  padding-bottom: 7rem;\n  \n  @media (min-width: 600px) {\n    padding: 12px 8px;\n    padding-bottom: 3rem;\n  }\n`;\n\nconst Main = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n`;\n"
  },
  {
    "path": "client/src/react-app-env.d.ts",
    "content": "/// <reference types=\"node\" />\n/// <reference types=\"react\" />\n/// <reference types=\"react-dom\" />\n\ndeclare namespace NodeJS {\n  interface ProcessEnv {\n    readonly NODE_ENV: 'development' | 'production' | 'test';\n    readonly PUBLIC_URL: string;\n  }\n}\n\ndeclare module '*.avif' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.bmp' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.gif' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.jpg' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.jpeg' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.png' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.webp' {\n    const src: string;\n    export default src;\n}\n\ndeclare module '*.svg' {\n  import * as React from 'react';\n\n  export const ReactComponent: React.FunctionComponent<React.SVGProps<\n    SVGSVGElement\n  > & { title?: string }>;\n\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.module.css' {\n  const classes: { readonly [key: string]: string };\n  export default classes;\n}\n\ndeclare module '*.module.scss' {\n  const classes: { readonly [key: string]: string };\n  export default classes;\n}\n\ndeclare module '*.module.sass' {\n  const classes: { readonly [key: string]: string };\n  export default classes;\n}\n\n/// <reference types=\"node\" />\n/// <reference types=\"react\" />\n/// <reference types=\"react-dom\" />\n\ndeclare namespace NodeJS {\n  interface ProcessEnv {\n    readonly NODE_ENV: 'development' | 'production' | 'test';\n    readonly PUBLIC_URL: string;\n  }\n}\n\ndeclare module '*.avif' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.bmp' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.gif' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.jpg' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.jpeg' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.png' {\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.webp' {\n    const src: string;\n    export default src;\n}\n\ndeclare module '*.svg' {\n  import * as React from 'react';\n\n  export const ReactComponent: React.FunctionComponent<React.SVGProps<\n    SVGSVGElement\n  > & { title?: string }>;\n\n  const src: string;\n  export default src;\n}\n\ndeclare module '*.module.css' {\n  const classes: { readonly [key: string]: string };\n  export default classes;\n}\n\ndeclare module '*.module.scss' {\n  const classes: { readonly [key: string]: string };\n  export default classes;\n}\n\ndeclare module '*.module.sass' {\n  const classes: { readonly [key: string]: string };\n  export default classes;\n}\n"
  },
  {
    "path": "client/src/styles.css",
    "content": ".App {\n  font-family: Graphik;\n  text-align: center;\n}\n\n.fields > div {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-top: 40px;\n}\n\n.fields > div > label {\n  width: 150px;\n}\n\n.fields > div > input,\n.fields > div > textarea {\n  flex: 2;\n}\n\ntextarea {\n  /* white-space: pre; */\n  background: transparent;\n  color: #fff;\n}\n\nh1 {\n  font-weight: 300;\n  line-height: 1.1;\n}\n\nhtml {\n  background: #171717 !important;\n  color: #fff;\n}\n\nbody {\n  padding-top: env(safe-area-inset-top);\n  padding-bottom: env(safe-area-inset-bottom);\n  padding-left: env(safe-area-inset-left);\n  padding-right: env(safe-area-inset-right);\n}\n"
  },
  {
    "path": "client/src/theme/colors.tsx",
    "content": "/**\n * Add opacity information to a hex color\n * @param amount opacity value from 0 to 100\n * @param hexColor\n */\nexport function opacify(amount: number, hexColor: string): string {\n  if (!hexColor.startsWith('#')) {\n    return hexColor;\n  };\n\n  if (hexColor.length !== 7) {\n    throw new Error(`opacify: provided color ${hexColor} was not in hexadecimal format (e.g. #000000)`);\n  };\n\n  if (amount < 0 || amount > 100) {\n    throw new Error('opacify: provided amount should be between 0 and 100');\n  };\n\n  const opacityHex = Math.round((amount / 100) * 255).toString(16);\n  const opacifySuffix = opacityHex.length < 2 ? `0${opacityHex}` : opacityHex;\n\n  return `${hexColor.slice(0, 7)}${opacifySuffix}`;\n};\n\nexport const colors = {\n  white: '#FFFFFF',\n  black: '#000000',\n  offWhite: '#9CA3AA',\n\n  container: '#0D111C',\n\n  buttonRed: '#DF2E2D',\n\n  connectionStatusRed: '#DF2E2D',\n  connectionStatusGreen: '#4BB543',\n\n  defaultBorderColor: '#98A1C03D',\n  readOnlyBorderColor: '#98A1C03D',\n\n  defaultInputColor: '#131A2A',\n  readOnlyInputColor: '#101A2A',\n\n  selectorColor: '#0D111C',\n  selectorHover: '#1B1E29',\n  selectorHoverBorder: 'rgba(255, 255, 255, 0.1)',\n};\n"
  },
  {
    "path": "client/src/theme/media.tsx",
    "content": "export type MediaSizeKey = keyof typeof MEDIA_SIZE;\n\nexport const MEDIA_SIZE = {\n  mobile: '425px',\n  tablet: '768px',\n  laptop: '1024px',\n};\n\nexport const device = {\n  mobile: `(min-width: ${MEDIA_SIZE.mobile})`,\n  tablet: `(min-width: ${MEDIA_SIZE.tablet})`,\n  laptop: `(min-width: ${MEDIA_SIZE.laptop})`,\n};\n"
  },
  {
    "path": "client/src/theme/text.tsx",
    "content": "/**\n * Preset styles of the Rebass Text component\n */\n\nimport { Text, TextProps as TextPropsOriginal } from 'rebass'\nimport styled from 'styled-components/macro'\n\nconst TextWrapper = styled(Text).withConfig({\n  shouldForwardProp: (prop) => prop !== 'color',\n})<{ color: keyof string }>`\n  color: ${({ color, theme }) => (theme as any)[color]};\n`\n\ntype TextProps = Omit<TextPropsOriginal, 'css'>\n\n// todo: export each component individually\nexport const ThemedText = {\n  // todo: there should be just one `Body` with default color, no need to make all variations\n  BodyPrimary(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={16} color=\"textPrimary\" {...props} />\n  },\n  BodySecondary(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={16} color=\"textSecondary\" {...props} />\n  },\n  BodySmall(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={14} color=\"textPrimary\" {...props} />\n  },\n  Caption(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={12} color=\"textPrimary\" {...props} />\n  },\n  TitleAccent(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={20} lineHeight=\"28px\" color=\"textAccent\" {...props} />\n  },\n  HeadlineSmall(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={20} lineHeight=\"28px\" color=\"textPrimary\" {...props} />\n  },\n  HeadlineMedium(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={24} color=\"textPrimary\" {...props} />\n  },\n  HeadlineLarge(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={36} lineHeight=\"44px\" color=\"textPrimary\" {...props} />\n  },\n  LargeHeader(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={36} color=\"textPrimary\" {...props} />\n  },\n  Hero(props: TextProps) {\n    return <TextWrapper fontWeight={500} fontSize={64} color=\"textPrimary\" {...props} />\n  },\n  LabelSmall(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={16} color=\"textSecondary\" {...props} />\n  },\n  Link(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={14} color=\"accentAction\" {...props} />\n  },\n  MediumHeader(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={20} color=\"textPrimary\" {...props} />\n  },\n  SubHeaderLarge(props: TextProps) {\n    return <TextWrapper fontWeight={500} fontSize={20} color=\"textPrimary\" {...props} />\n  },\n  SubHeader(props: TextProps) {\n    return <TextWrapper fontWeight={500} fontSize={16} color=\"textPrimary\" lineHeight=\"24px\" {...props} />\n  },\n  SubHeaderSmall(props: TextProps) {\n    return <TextWrapper fontWeight={500} fontSize={15} color=\"textSecondary\" {...props} />\n  },\n  ModalHeadline(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={18} lineHeight=\"28px\" color=\"textPrimary\" {...props} />\n  },\n  UtilityBadge(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize=\"8px\" lineHeight=\"12px\" {...props} />\n  },\n  DeprecatedMain(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"textSecondary\" {...props} />\n  },\n  DeprecatedLink(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"accentAction\" {...props} />\n  },\n  DeprecatedLabel(props: TextProps) {\n    return <TextWrapper fontWeight={600} color=\"textPrimary\" {...props} />\n  },\n  DeprecatedBlack(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"textPrimary\" {...props} />\n  },\n  DeprecatedWhite(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"white\" {...props} />\n  },\n  DeprecatedBody(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={16} color=\"textPrimary\" {...props} />\n  },\n  DeprecatedLargeHeader(props: TextProps) {\n    return <TextWrapper fontWeight={600} fontSize={24} {...props} />\n  },\n  DeprecatedMediumHeader(props: TextProps) {\n    return <TextWrapper fontWeight={500} fontSize={20} {...props} />\n  },\n  DeprecatedSubHeader(props: TextProps) {\n    return <TextWrapper fontWeight={400} fontSize={14} {...props} />\n  },\n  DeprecatedSmall(props: TextProps) {\n    return <TextWrapper fontWeight={500} fontSize={11} {...props} />\n  },\n  DeprecatedBlue(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"accentAction\" {...props} />\n  },\n  DeprecatedYellow(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"deprecated_yellow3\" {...props} />\n  },\n  DeprecatedDarkGray(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"textTertiary\" {...props} />\n  },\n  DeprecatedGray(props: TextProps) {\n    return <TextWrapper fontWeight={500} color=\"deprecated_bg3\" {...props} />\n  },\n  DeprecatedItalic(props: TextProps) {\n    return <TextWrapper fontWeight={500} fontSize={12} fontStyle=\"italic\" color=\"textSecondary\" {...props} />\n  },\n  DeprecatedError({ error, ...props }: { error: boolean } & TextProps) {\n    return <TextWrapper fontWeight={500} color={error ? 'accentFailure' : 'textSecondary'} {...props} />\n  },\n}\n"
  },
  {
    "path": "client/src/theme/zIndex.ts",
    "content": "export enum Z_INDEX {\n  default = 1,\n  landing_hero = 5,\n  bottom_nav = 5,\n  overlay = 10,\n  receive_modal = 20,\n  mobile_landing_page = 50,\n\n  popover = 1000,\n};\n"
  },
  {
    "path": "client/src/types/privy.d.ts",
    "content": "declare module '@privy-io/react-auth'\n"
  },
  {
    "path": "client/src/types/wagmi.d.ts",
    "content": "declare module 'wagmi'\n"
  },
  {
    "path": "client/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es2020\",\n    \"module\": \"esnext\",\n    \"esModuleInterop\": true,\n    \"lib\": [\n      \"WebWorker\",\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"baseUrl\": \"src\",\n    \"paths\": {\n      \"@components/*\": [\"components/*\"],\n      \"@hooks/*\": [\"hooks/*\"],\n      \"@helpers/*\": [\"helpers/*\"],\n      \"@theme/*\": [\"theme/*\"],\n    },\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\",\n    \"types\": [\n      \"node\",\n      \"jest\"\n    ],\n    \"incremental\": true\n  },\n  \"include\": [\n    \"src\",\n    \"circuits/scripts/\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  },
  {
    "path": "contracts-domain/.gitignore",
    "content": "node_modules\n.env\ncoverage\ncoverage.json\ntypechain\ntypechain-types\ndist\n/deployments/localhost\n\n# Hardhat files\ncache\nartifacts\n\nyarn-error.log\n\n"
  },
  {
    "path": "contracts-domain/.solcover.js",
    "content": "module.exports = {\n    skipFiles: ['interfaces', 'mocks', 'external']\n  };\n"
  },
  {
    "path": "contracts-domain/contracts/DomainExchange.sol",
    "content": "// SPDX-License-Identifier: MIT\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { ReentrancyGuard } from \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport { Pausable } from \"@openzeppelin/contracts/security/Pausable.sol\";\n\nimport { AddressAllowList } from \"./external/AddressAllowList.sol\";\nimport { Bytes32ArrayUtils } from \"./external/lib/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"./external/lib/Uint256ArrayUtils.sol\";\nimport { IKeyHashAdapterV2 } from \"./external/interfaces/IKeyHashAdapterV2.sol\";\n\nimport { IDomainExchange } from \"./interfaces/IDomainExchange.sol\";\nimport { ITransferDomainProcessor } from \"./interfaces/ITransferDomainProcessor.sol\";\nimport { IVerifiedDomainRegistry } from \"./interfaces/IVerifiedDomainRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract DomainExchange is IDomainExchange, AddressAllowList, ReentrancyGuard, Pausable {\n\n    using Address for address payable;\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    \n    event ListingCreated(\n        uint256 indexed listingId, \n        address indexed seller, \n        bytes32 indexed domainId, \n        bytes32 dkimKeyHash,\n        uint256 askPrice,\n        uint256 minBidPrice,\n        address saleEthRecipient\n    );\n    event ListingUpdated(uint256 indexed listingId, address indexed seller, uint256 newAskPrice, address saleEthRecipient);\n    event ListingDeleted(uint256 indexed listingId, address indexed seller);\n    event ListingDeletedByRegistry(uint256 indexed listingId);\n    \n    event BidCreated(uint256 indexed bidId, uint256 indexed listingId, address indexed buyer, uint256 price);\n    event BidPriceIncreased(uint256 indexed bidId, address indexed buyer, uint256 newPrice);\n    event RefundInitiated(uint256 indexed bidId, address indexed buyer);\n    event BidWithdrawn(uint256 indexed bidId, address indexed buyer, uint256 amount);\n    \n    event SaleFinalized(uint256 indexed bidId, uint256 indexed listingId, uint256 priceNetFees, uint256 fees);\n    \n    event InstantAcceptUpdated(address indexed buyer, bool instantAccept);\n\n    event FeeUpdated(uint256 newFee);\n    event FeeRecipientUpdated(address indexed newFeeRecipient);\n    event BidSettlementPeriodUpdated(uint256 newBidSettlementPeriod);\n    event BidRefundPeriodUpdated(uint256 newBidRefundPeriod);\n    event TransferDomainProcessorUpdated(ITransferDomainProcessor indexed newTransferDomainProcessor);\n    event MailServerKeyHashAdapterUpdated(IKeyHashAdapterV2 indexed newMailServerKeyHashAdapter);\n\n    /* ============ Structs ============ */\n    struct Listing {\n        address seller;\n        address payable saleEthRecipient;       // Must be a contract that can receive ETH or an EOA\n        bytes32 dkimKeyHash;            // Allow for custom DKIM key hash\n        bytes encryptionKey;\n        bytes32 domainId;\n        uint256 createdAt;\n        uint256 askPrice;\n        uint256 minBidPrice;\n        bool isActive;          // false by default, set to true when the listing is created\n        uint256[] bids;\n    }\n\n    struct ListingWithId {\n        uint256 listingId;\n        Listing listing;\n    }\n\n    struct Bid {\n        address buyer;\n        uint256 listingId;\n        string encryptedBuyerId;\n        bytes32 buyerIdHash;\n        uint256 createdAt;\n        uint256 expiryTimestamp;\n        uint256 price;\n        bool refundInitiated;\n    }\n\n    struct BidDetailsWithId {\n        uint256 bidId;\n        Bid bid;\n        bool buyerInstantAcceptEnabled;\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyInitialized() {\n        require(isInitialized, \"Contract must be initialized\");\n        _;\n    }\n\n    /* ============ Public Variables ============ */\n\n    mapping(uint256 => Listing) public listings;\n    mapping(address => uint256[]) public userListings;\n    mapping(uint256 => Bid) public bids;\n    mapping(address => uint256[]) public userBids;\n    mapping(address => bool) public instantAcceptEnabled;\n\n    uint256 public fee;\n    address payable public feeRecipient;\n    uint256 public bidCounter;\n    uint256 public listingCounter;\n    uint256 public bidSettlementPeriod;\n    uint256 public bidRefundPeriod;\n    \n    bool public isInitialized;\n    \n    ITransferDomainProcessor public transferDomainProcessor;\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\n\n    /* ============ Constants ============ */\n    uint256 internal constant PRECISE_UNIT = 1e18;\n\n    /* ============ Constructor ============ */\n\n    constructor(\n        address _owner,\n        uint256 _fee,\n        address payable _feeRecipient,\n        uint256 _bidSettlementPeriod,\n        uint256 _bidRefundPeriod,\n        address[] memory _allowedAddresses\n    ) AddressAllowList(_allowedAddresses) {\n        fee = _fee;\n        feeRecipient = _feeRecipient;\n        bidSettlementPeriod = _bidSettlementPeriod;\n        bidRefundPeriod = _bidRefundPeriod;\n        \n        bidCounter = 1;\n        listingCounter = 1;\n        isInitialized = false;\n        \n        transferOwnership(_owner);\n    }\n\n    /* ============ Public Functions ============ */\n\n    /**\n     * @notice Creates listing for a domain. If ownership of domain changes offchain, the new owner\n     * will have to first register the domain on the domain registry contract. Then the new owner\n     * can create a listing for the domain. The old listing will be deleted from the old owner's \n     * listings and the old listing is marked as NOT active, which prevents any new bids from being\n     * created on it and makes the old bids immediately withdrawable. We also allow the seller to\n     * specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM\n     * key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be \n     * updated by us whenever Namecheap rotates their DKIM key.\n     *\n     * Function reverts if:\n     * - Caller is not domain owner on the domain registry contract\n     * - Ask price is less than min bid price\n     * - Sale ETH recipient is the zero address\n     *\n     * @param _domainId         The unique identifier of the domain\n     * @param _askPrice         An asking price for the domain\n     * @param _minBidPrice      The minimum bid price for the domain\n     * @param _saleEthRecipient The address to receive the ETH from the sale; must be a contract that can\n     *                          receive ETH or an EOA\n     * @param _encryptionKey    The encryption key for buyers to encrypt the buyerId to\n     * @param _dkimKeyHash      The custom DKIM key hash. If empty, the managed DKIM key hash will be used\n     */\n    function createListing(\n        bytes32 _domainId, \n        uint256 _askPrice, \n        uint256 _minBidPrice, \n        address payable _saleEthRecipient, \n        bytes memory _encryptionKey,\n        bytes32 _dkimKeyHash\n    ) \n        external\n        onlyAllowed\n        onlyInitialized \n        whenNotPaused\n    {\n        _verifyCreateListing(_domainId, _minBidPrice, _askPrice, _saleEthRecipient);\n\n        uint256 listingId = _updateCreateListingState(\n            _domainId, _askPrice, _minBidPrice, _saleEthRecipient, _encryptionKey, _dkimKeyHash\n        );\n\n        verifiedDomainRegistry.setDomainListing(_domainId, listingId);\n\n        emit ListingCreated(listingId, msg.sender, _domainId, _dkimKeyHash, _askPrice, _minBidPrice, _saleEthRecipient);\n    }\n\n    /**\n     * @notice Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer\n     * has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId\n     * to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the \n     * seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId \n     * using their private key to get the raw buyerId.\n     *\n     * DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be\n     * done in the client! This does not affect the security of the protocol as the encrypted buyerId is only \n     * used for communication between the buyer and the seller while maintaining privacy.\n     *\n     * @param _listingId            The unique identifier of the listing to bid on\n     * @param _buyerIdHash          The hashed buyerId which is also output as part of the transfer proof later\n     * @param _encryptedBuyerId     The encrypted buyerId. Should be the same as the buyerId hashed\n     */\n    function createBid(uint256 _listingId, bytes32 _buyerIdHash, string memory _encryptedBuyerId) \n        external \n        payable\n        nonReentrant\n        whenNotPaused\n    {\n        uint256 price = msg.value;\n        Listing storage listing = listings[_listingId];\n\n        _validateCreateBid(listing, price, _buyerIdHash);\n\n        uint256 bidId = _updateCreateBidState(listing, _listingId, price, _buyerIdHash, _encryptedBuyerId);\n\n        emit BidCreated(bidId, _listingId, msg.sender, price);\n    }\n\n    /**\n     * @notice ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to \n     * the listing owner. The seller can also finalize the sale with bids that have initiated a refund \n     * including the ones that have expired based on timestamp but not withdrawn yet.\n     *\n     * @param _proof The zk-email proof of domain transfer\n     */\n    function finalizeSale(ITransferDomainProcessor.TransferProof calldata _proof) \n        external\n        onlyInitialized\n        nonReentrant\n        whenNotPaused\n    {\n        // Check\n        (\n            bytes32 dkimKeyHash,\n            bytes32 hashedReceiverId, \n            string memory domainName, \n            uint256 bidId\n        ) = transferDomainProcessor.processProof(_proof);\n\n        Bid storage bid = bids[bidId];\n        Listing storage listing = listings[bid.listingId];\n        \n        _validateFinalizeSale(bid, listing, dkimKeyHash, hashedReceiverId, domainName);\n        \n        // Effect\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\n\n        uint256 transferValue = bid.price;\n        address payable recipient = listing.saleEthRecipient;\n        uint256 listingId = bid.listingId;\n        _updateFinalizeSaleState(bid, bidId, listing);\n\n        // Interaction\n        uint256 feeAmount = _settleSale(recipient, transferValue);\n        \n        emit SaleFinalized(bidId, listingId, transferValue - feeAmount, feeAmount);\n    }\n\n    /**\n     * @notice ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required\n     * because it is not in the buyer's interest to release funds unless they have received the domain. Note that the\n     * bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to\n     * the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will\n     * revert if:\n     * - The bid is not owned by the caller\n     * - The listing is not active (sold or withdrawn)\n     *\n     * @param _bidId The unique identifier of the bid to release funds for\n     */\n    function buyerReleaseFunds(uint256 _bidId) \n        external\n        nonReentrant\n    {\n        // Check\n        Bid storage bid = bids[_bidId];\n        Listing storage listing = listings[bid.listingId];\n\n        require(bid.buyer == msg.sender, \"Caller is not bid owner\");\n        require(listing.isActive, \"Listing not active\");\n\n        // Effect\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\n\n        uint256 transferValue = bid.price;\n        address payable recipient = listing.saleEthRecipient;\n        uint256 listingId = bid.listingId;\n        \n        _updateFinalizeSaleState(bid, _bidId, listing);\n\n        // Interaction\n        uint256 feeAmount = _settleSale(recipient, transferValue);\n\n        emit SaleFinalized(_bidId, listingId, transferValue - feeAmount, feeAmount);\n    }\n\n    /**\n     * @notice ONLY SELLER: Updates the asking price of an existing listing. We don't update\n     * the existing bids against the listing because the newAskPrice is an indicative value.\n     * The new ask price must be greater than or equal to the existing min bid price. If seller\n     * wants to update the min bid price, they should delete the listing and create a new one with\n     * the new min bid price.\n     *\n     * @param _listingId        The unique identifier of the listing to update\n     * @param _newAskPrice      The new asking price for the listing\n     * @param _saleEthRecipient The new address to receive the ETH from the sale; must be a contract that can\n     *                          receive ETH or an EOA\n     */\n    function updateListing(uint256 _listingId, uint256 _newAskPrice, address payable _saleEthRecipient) external whenNotPaused {\n        Listing storage listing = listings[_listingId];\n        \n        require(listing.seller == msg.sender, \"Caller is not listing owner\");\n        require(listing.isActive, \"Listing not active\");\n        require(_newAskPrice >= listing.minBidPrice, \"Ask price is less than min bid price\");\n        require(_saleEthRecipient != address(0), \"Invalid sale ETH recipient\");\n        \n        listing.askPrice = _newAskPrice;\n        listing.saleEthRecipient = _saleEthRecipient;\n\n        emit ListingUpdated(_listingId, msg.sender, _newAskPrice, _saleEthRecipient);\n    }\n\n    /**\n     * @notice ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array\n     * and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing\n     * are left as is to allow the buyer to withdraw the bid.\n     *\n     * @param _listingId The unique identifier of the listing to delete\n     */\n    function deleteListing(uint256 _listingId) external {\n        Listing storage listing = listings[_listingId];\n        \n        require(listing.seller == msg.sender, \"Caller is not listing owner\");\n        require(listing.isActive, \"Listing not active\");\n        \n        verifiedDomainRegistry.removeDomainListing(listing.domainId);\n\n        _pruneListing(listing, _listingId);\n\n        emit ListingDeleted(_listingId, msg.sender);\n    }\n\n    /**\n     * @notice ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry.\n     * \n     * @param _listingId    Listing Id to remove\n     */\n    function registryRemoveListing(uint256 _listingId) external override {\n        Listing storage listing = listings[_listingId];\n\n        require(address(verifiedDomainRegistry) == msg.sender, \"Caller is not registry\");\n        // If listing is NOT active, this function will NOT be called because the listing status\n        // would have already been removed from the registry beforehand; so there is no need to \n        // check if listing is active\n        \n        _pruneListing(listing, _listingId);\n\n        emit ListingDeletedByRegistry(_listingId);\n    }\n\n    /**\n     * @notice ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher \n     * than the old price. The buyer must send the additional amount of ETH. The function reverts if\n     * - bid has initiated refund, caller is not bid owner or listing is not active\n     * - the new price is less than old price\n     * - msg.value is NOT STRICTLY EQUAL to than new price - old price\n     *\n     * @param _bidId The unique identifier of the bid to increase the price for\n     * @param _newPrice The new price for the bid\n     */\n    function increaseBidPrice(uint256 _bidId, uint256 _newPrice)\n        external\n        payable\n        nonReentrant\n        whenNotPaused\n    {\n        Bid storage bid = bids[_bidId];\n        Listing storage listing = listings[bid.listingId];\n\n        // Check\n        _validateIncreaseBidPrice(bid, listing, _newPrice);\n        \n        // Effect\n        bid.price = _newPrice;\n\n        emit BidPriceIncreased(_bidId, msg.sender, _newPrice);\n    }\n\n    /**\n     * @notice Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has \n     * configured their Namecheap account to accept ownership of domains immediately upon transfer.\n     * \n     * DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only \n     * an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller\n     * may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But\n     * if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can \n     * cancel the transfer immediately.\n     */\n    function enableInstantAccept() external onlyInitialized {\n        require(!instantAcceptEnabled[msg.sender], \"Instant accept already enabled\");\n        \n        instantAcceptEnabled[msg.sender] = true;        \n        emit InstantAcceptUpdated(msg.sender, true);\n    }\n\n    /**\n     * @notice Disables the instant accept flag for the buyer.\n     */\n    function disableInstantAccept() external onlyInitialized {\n        require(instantAcceptEnabled[msg.sender], \"Instant accept already disabled\");\n\n        instantAcceptEnabled[msg.sender] = false;\n        emit InstantAcceptUpdated(msg.sender, false);\n    }\n\n    /**\n     * @notice ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner \n     * after the initial bid expiry period has passed.\n     *\n     * @param _bidId The unique identifier of the bid to initiate refund for\n     */\n    function initiateRefund(uint256 _bidId) external {\n        Bid storage bid = bids[_bidId];\n        Listing storage listing = listings[bid.listingId];\n\n        _validateInitiateRefund(bid, listing);\n\n        bid.expiryTimestamp = block.timestamp + bidRefundPeriod;\n        bid.refundInitiated = true;\n\n        emit RefundInitiated(_bidId, bid.buyer);\n    }\n\n    /**\n     * @notice ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\n     *\n     * @param _bidId The unique identifier of the bid to withdraw\n     */\n    function withdrawBid(uint256 _bidId) external nonReentrant {\n        Bid storage bid = bids[_bidId];\n        Listing storage listing = listings[bid.listingId];\n\n        // Check\n        _validateWithdrawBid(bid, listing);\n\n        // Effect\n        uint256 refundAmount = bid.price;\n        _pruneBid(bid, _bidId, listing);\n        \n        // Interaction\n        payable(msg.sender).sendValue(refundAmount);\n\n        emit BidWithdrawn(_bidId, msg.sender, refundAmount);\n    }\n\n    /* ============ Admin Functions ============ */\n\n    /**\n     * @notice Initializes the contract with domain verification and transfer processors. Can \n     * only be called once by the contract owner\n     * \n     * @param _transferDomainProcessor The address of the domain transfer processor contract\n     * @param _verifiedDomainRegistry The address of the verified domain registry contract\n     * @param _mailServerKeyHashAdapter The address of the mail server key hash adapter contract\n     */\n    function initialize(\n        ITransferDomainProcessor _transferDomainProcessor,\n        IVerifiedDomainRegistry _verifiedDomainRegistry,\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter\n    ) external onlyOwner {\n        require(!isInitialized, \"Already initialized\");\n        transferDomainProcessor = _transferDomainProcessor;\n        verifiedDomainRegistry = _verifiedDomainRegistry;\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\n        isInitialized = true;\n    }\n\n    /**\n     * @notice ONLY OWNER: Pauses listing and proof submission functionality for the marketplace. \n     * Functionalites that are paused:\n     * - Listing creation and update\n     * - Bid creation and update\n     * - Sale finalization\n     * \n     * Functinonalites that remain unpaused to allow users to retrieve funds in contract:\n     * - Bid refund initiation and withdrawal\n     * - Listing deletion\n     * - Manual settlement between buyer and seller\n     */\n    function pauseMarketplace() external onlyOwner {\n        _pause();\n    }\n\n    /**\n     * @notice ONLY OWNER: Restarts paused functionality for the marketplace.\n     */\n    function unpauseMarketplace() external onlyOwner {\n        _unpause();\n    }\n\n    /**\n     * @notice ONLY OWNER: Update the transfer domain processor\n     *\n     * @param _transferDomainProcessor The new transfer domain processor\n     */\n    function updateTransferDomainProcessor(ITransferDomainProcessor _transferDomainProcessor) external onlyOwner {\n        require(address(_transferDomainProcessor) != address(0), \"Invalid address\");\n        \n        transferDomainProcessor = _transferDomainProcessor;\n        emit TransferDomainProcessorUpdated(_transferDomainProcessor);\n    }\n\n    /**\n     * @notice ONLY OWNER: Update the managed mail server key hash adapter\n     *\n     * @param _mailServerKeyHashAdapter The new mail server key hash adapter\n     */\n    function updateMailServerKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\n        require(address(_mailServerKeyHashAdapter) != address(0), \"Invalid address\");\n        \n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\n        emit MailServerKeyHashAdapterUpdated(_mailServerKeyHashAdapter);\n    }\n\n    /**\n     * @notice ONLY OWNER: Updates the fee percentage for the marketplace\n     *\n     * @param _newFee The new fee percentage (in basis points)\n     */\n    function updateFee(uint256 _newFee) external onlyOwner {\n        fee = _newFee;\n        emit FeeUpdated(_newFee);\n    }\n\n    /**\n     * @notice ONLY OWNER: Updates the fee recipient address\n     *\n     * @param _newFeeRecipient The new address to receive fees\n     */\n    function updateFeeRecipient(address payable _newFeeRecipient) external onlyOwner {\n        require(_newFeeRecipient != address(0), \"Invalid address\");\n        feeRecipient = _newFeeRecipient;\n        emit FeeRecipientUpdated(_newFeeRecipient);\n    }\n\n    /**\n     * @notice ONLY OWNER: Updates the minimum bid active period\n     *\n     * @param _newBidSettlementPeriod The new bid settlement period in seconds\n     */\n    function updateBidSettlementPeriod(uint256 _newBidSettlementPeriod) external onlyOwner {\n        require(_newBidSettlementPeriod > 0, \"Bid settlement period must be greater than 0\");\n        bidSettlementPeriod = _newBidSettlementPeriod;\n        emit BidSettlementPeriodUpdated(_newBidSettlementPeriod);\n    }\n\n    /**\n     * @notice ONLY OWNER: Updates the bid refund period\n     *\n     * @param _newBidRefundPeriod The new bid refund period in seconds\n     */\n    function updateBidRefundPeriod(uint256 _newBidRefundPeriod) external onlyOwner {\n        require(_newBidRefundPeriod > 0, \"Bid refund period must be greater than 0\");\n        bidRefundPeriod = _newBidRefundPeriod;\n        emit BidRefundPeriodUpdated(_newBidRefundPeriod);\n    }\n\n    /* ============ View Functions ============ */    \n\n    /**\n     * @notice Get listing information with listingId for a list of listingIds\n     * @param _listingIds An array of listingIds to fetch details for\n     */\n    function getListings(uint256[] memory _listingIds)\n        external \n        view \n        returns (ListingWithId[] memory listingInfo) \n    {\n        listingInfo = new ListingWithId[](_listingIds.length);\n        for (uint256 i = 0; i < _listingIds.length; i++) {\n            listingInfo[i] = ListingWithId({\n                listingId: _listingIds[i],\n                listing: listings[_listingIds[i]]\n            });\n        }\n    }\n\n    /**\n     * @notice Returns all listings created by a user\n     * @param _user The address of the user to fetch listings for\n     */\n    function getUserListings(address _user) external view returns (ListingWithId[] memory listingInfo) {\n        uint256[] memory userListingIds = userListings[_user];\n        listingInfo = new ListingWithId[](userListingIds.length);\n        for (uint256 i = 0; i < userListingIds.length; i++) {\n            uint256 listingId = userListingIds[i];\n            listingInfo[i] = ListingWithId({\n                listingId: listingId,\n                listing: listings[listingId]\n            });\n        }\n    }\n\n    /**\n     * @notice Returns the bids created by a user\n     * @param _user The address of the user to fetch bids for\n     */\n    function getUserBids(address _user) external view returns (BidDetailsWithId[] memory bidInfo) {\n        uint256[] memory userBidIds = userBids[_user];\n        bidInfo = new BidDetailsWithId[](userBidIds.length);\n        for (uint256 i = 0; i < userBidIds.length; i++) {\n            uint256 bidId = userBidIds[i];\n            bidInfo[i] = BidDetailsWithId({\n                bidId: bidId,\n                bid: bids[bidId],\n                buyerInstantAcceptEnabled: instantAcceptEnabled[_user]\n            });\n        }\n    }\n\n    /**\n     * @notice Returns the bids for given listingIds\n     * @param _listingIds An array of listingIds to fetch bids for\n     */\n    function getListingBids(uint256[] memory _listingIds) external view returns (BidDetailsWithId[][] memory bidInfo) {\n        bidInfo = new BidDetailsWithId[][](_listingIds.length);\n        for (uint256 i = 0; i < _listingIds.length; i++) {\n            uint256 listingId = _listingIds[i];\n            uint256[] memory listingBidIds = listings[listingId].bids;\n            bidInfo[i] = new BidDetailsWithId[](listingBidIds.length);\n            for (uint256 j = 0; j < listingBidIds.length; j++) {\n                uint256 bidId = listingBidIds[j];\n                bidInfo[i][j] = BidDetailsWithId({\n                    bidId: bidId,\n                    bid: bids[bidId],\n                    buyerInstantAcceptEnabled: instantAcceptEnabled[bids[bidId].buyer]\n                });\n            }\n        }\n    }\n\n    /**\n     * @notice Get all allowed sellers\n     */\n    function getAllowedSellers() external view returns (address[] memory) {\n        return _getAllowedAddresses();\n    }\n\n\n    /* ============ Internal Functions ============ */\n\n    function _verifyCreateListing(\n        bytes32 _domainId, \n        uint256 _minBidPrice, \n        uint256 _askPrice, \n        address _saleEthRecipient\n    ) internal view {\n        IVerifiedDomainRegistry.DomainWithId memory domainWithId = verifiedDomainRegistry.getDomain(_domainId);\n        require(domainWithId.domain.owner == msg.sender, \"Caller is not domain owner\");\n        require(domainWithId.domain.exchange == address(0), \"Domain already listed on registry\");\n\n        require(_minBidPrice > 0, \"Minimum bid price is zero\");\n        require(_askPrice >= _minBidPrice, \"Ask price is less than min bid price\");\n        require(_saleEthRecipient != address(0), \"Invalid sale ETH recipient\");\n    }\n\n    function _updateCreateListingState(\n        bytes32 _domainId, \n        uint256 _askPrice, \n        uint256 _minBidPrice,\n        address payable _saleEthRecipient,\n        bytes memory _encryptionKey,\n        bytes32 _dkimKeyHash\n    ) internal returns (uint256 listingId) {\n        \n        // New listing\n        listingId = listingCounter;\n        listings[listingId] = Listing({\n            seller: msg.sender,\n            saleEthRecipient: _saleEthRecipient,\n            encryptionKey: _encryptionKey,\n            dkimKeyHash: _dkimKeyHash,\n            askPrice: _askPrice,\n            minBidPrice: _minBidPrice,\n            domainId: _domainId,\n            createdAt: block.timestamp,\n            isActive: true,\n            bids: new uint256[](0)\n        });\n        userListings[msg.sender].push(listingId);\n\n        // Increment listingCounter\n        listingCounter = listingCounter + 1;\n    }\n\n    function _validateCreateBid(Listing storage _listing, uint256 _price, bytes32 _buyerIdHash) internal view {\n        require(_listing.seller != address(0), \"Listing does not exist\");\n        require(_listing.isActive, \"Listing not active\");\n        \n        // Validate inputs\n        require(_price >= _listing.minBidPrice, \"Bid price is less than min bid price\");\n        require(_buyerIdHash != bytes32(0), \"Buyer ID hash cannot be empty\");\n    }\n\n    function _updateCreateBidState(\n        Listing storage _listing, \n        uint256 _listingId, \n        uint256 _price, \n        bytes32 _buyerIdHash, \n        string memory _encryptedBuyerId\n    ) internal returns (uint256 bidId) {\n        bidId = bidCounter;\n        bids[bidId] = Bid({\n            buyer: msg.sender,\n            listingId: _listingId,\n            encryptedBuyerId: _encryptedBuyerId,\n            buyerIdHash: _buyerIdHash,\n            createdAt: block.timestamp,\n            expiryTimestamp: type(uint256).max,\n            price: _price,\n            refundInitiated: false\n        });\n        userBids[msg.sender].push(bidId);\n        _listing.bids.push(bidId);\n\n        // Increment bidCounter\n        bidCounter = bidCounter + 1;\n    }\n\n    function _validateFinalizeSale(\n        Bid storage _bid, \n        Listing storage _listing,\n        bytes32 _dkimKeyHash,\n        bytes32 _hashedReceiverId, \n        string memory _transferredDomainName\n    ) internal view {\n        require(_bid.buyer != address(0), \"Bid does not exist\");\n        require(_listing.seller == msg.sender, \"Caller is not listing owner\");\n        require(_listing.isActive, \"Listing not active\");\n\n        // Validate namecheap DKIM key\n        if (_listing.dkimKeyHash != bytes32(0)) {\n            require(_dkimKeyHash == _listing.dkimKeyHash, \"Invalid custom DKIM key hash\");\n        } else {\n            require(\n                mailServerKeyHashAdapter.isMailServerKeyHash(_dkimKeyHash), \n                \"Invalid managed DKIM key hash\"\n            );\n        }\n\n        // Validate domain and receiver\n        bytes32 transferredDomainId = keccak256(abi.encodePacked(_transferredDomainName));\n        require(_bid.buyerIdHash == _hashedReceiverId, \"Invalid receiver\");\n        require(_listing.domainId == transferredDomainId, \"Invalid domain\");\n    }\n\n    function _updateFinalizeSaleState(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\n        uint256 listingId = _bid.listingId;\n        \n        _pruneBid(_bid, _bidId, _listing);\n        _pruneListing(_listing, listingId);\n    }\n\n    function _validateIncreaseBidPrice(\n        Bid storage _bid, \n        Listing storage _listing, \n        uint256 _newPrice\n    ) internal view {\n        require(_bid.buyer == msg.sender, \"Caller is not bid owner\");\n        require(!_bid.refundInitiated, \"Refund already initiated\");\n        require(_listing.isActive, \"Listing not active\");\n\n        // Validate new price\n        require(_newPrice > _bid.price, \"New price not greater than old price\");\n        require(msg.value == _newPrice - _bid.price, \"Incorrect amount of ETH sent\");\n    }\n\n    function _validateInitiateRefund(Bid storage _bid, Listing storage _listing) internal view {\n        require(_bid.buyer == msg.sender, \"Caller is not bid owner\");\n        require(!_bid.refundInitiated, \"Refund already initiated\");\n        require(block.timestamp > bidSettlementPeriod + _bid.createdAt, \"Refund period not started\");\n        require(_listing.isActive, \"Listing expired. Bid can be withdrawn directly\");\n    }\n\n    function _validateWithdrawBid(Bid storage _bid, Listing storage _listing) internal view {\n        require(_bid.buyer == msg.sender, \"Caller is not bid owner\");\n        if (_listing.isActive) {\n            require(_bid.refundInitiated, \"Refund not initiated\");\n            require(block.timestamp >= _bid.expiryTimestamp, \"Refund period not ended\");\n        }\n    }\n\n    function _settleSale(address payable _recipient, uint256 _amount) internal returns (uint256 feeAmount) {\n        feeAmount = (_amount * fee) / PRECISE_UNIT;\n        _recipient.sendValue(_amount - feeAmount);\n\n        if (feeAmount > 0) {\n            feeRecipient.sendValue(feeAmount);\n        }\n    }\n\n    /**\n     * @notice Deletes a bid from the exchange. Removes the bid from the listing's bids array and the buyer's\n     * bids array. Deletes the listing if it is expired and has no bids.\n     */\n    function _pruneBid(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\n        userBids[_bid.buyer].removeStorage(_bidId);\n        _listing.bids.removeStorage(_bidId);\n        if (!_listing.isActive && _listing.bids.length == 0) {\n            delete listings[_bid.listingId];\n        }\n        delete bids[_bidId];\n    }\n\n    /**\n     * @notice Marks a listing as expired. Removes the listing from the seller's listings array and domain listing.\n     * If the listing has no bids, it is deleted from the exchange.\n     */\n    function _pruneListing(Listing storage _listing, uint256 _listingId) internal {\n        _listing.isActive = false;\n        userListings[_listing.seller].removeStorage(_listingId);\n        if (_listing.bids.length == 0) {\n            delete listings[_listingId];\n        }\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/TransferDomainProcessor.sol",
    "content": "// SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { EmailBaseProcessor } from \"./external/processors/EmailBaseProcessor.sol\";\nimport { INullifierRegistry } from \"./external/interfaces/INullifierRegistry.sol\";\nimport { StringConversionUtils } from \"./external/lib/StringConversionUtils.sol\";\n\nimport { Groth16Verifier } from \"./verifiers/namecheap_transfer_verifier.sol\";\nimport { ITransferDomainProcessor } from \"./interfaces/ITransferDomainProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\n    \n    using StringUtils for uint256[];\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    uint256 constant PACK_SIZE = 31;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _exchange,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Groth16Verifier()\n        EmailBaseProcessor(\n            _exchange,\n            _nullifierRegistry,\n            _emailFromAddress,\n            _timestampBuffer\n        )\n    {}\n    \n    /* ============ External Functions ============ */\n\n    function processProof(\n        TransferProof calldata _proof\n    )\n        external\n        override\n        onlyExchange\n        returns (\n            bytes32 dkimKeyHash,\n            bytes32 hashedReceiverId,\n            string memory domainName, \n            uint256 bidId\n        )\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\");\n\n        // Signal [0] is the DKIM key hash\n        dkimKeyHash = bytes32(_proof.signals[0]);\n\n        // Signals [1:2] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\n        require(\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \n            \"Invalid email from address\"\n        );\n        \n        // Signals [2:7] are packed domain name\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\n\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\n        hashedReceiverId = bytes32(_proof.signals[7]);\n\n        // Check if email has been used previously, if not nullify it so it can't be used again\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\n\n        // Signal [9] is bidId\n        bidId = _proof.signals[9];\n    }\n    \n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \n        internal \n        pure \n        returns (string memory) \n    {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/VerifiedDomainRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Bytes32ArrayUtils } from \"./external/lib/Bytes32ArrayUtils.sol\";\nimport { AddressArrayUtils } from \"./external/lib/AddressArrayUtils.sol\";\n\nimport { IDomainExchange } from \"./interfaces/IDomainExchange.sol\";\nimport { IVerifiedDomainRegistry } from \"./interfaces/IVerifiedDomainRegistry.sol\";\nimport { IVerifyDomainProcessor } from \"./interfaces/IVerifyDomainProcessor.sol\";\n\n\npragma solidity ^0.8.18;\n\ncontract VerifiedDomainRegistry is IVerifiedDomainRegistry, Ownable {\n\n    using Bytes32ArrayUtils for bytes32[];\n    using AddressArrayUtils for address[];\n\n    /* ============ Events ============ */\n    event DomainVerified(\n        bytes32 indexed domainId,\n        address indexed owner,\n        string domainName,\n        uint256 expiryTime\n    );\n\n    event DomainListed(\n        bytes32 indexed domainId,\n        address indexed exchange,\n        uint256 indexed listingId\n    );\n\n    event DomainListingRemoved(\n        bytes32 indexed domainId,\n        address indexed exchange\n    );\n\n    event DomainTransferred(\n        bytes32 indexed domainId,\n        address indexed oldOwner,\n        address indexed newOwner\n    );\n\n\n    event VerifyDomainProcessorUpdated(\n        IVerifyDomainProcessor indexed newVerifyDomainProcessor\n    );\n\n    event ExchangeAdded(address indexed exchange);\n    event ExchangeRemoved(address indexed exchange);\n\n    /* ============ Modifiers ============ */\n    modifier onlyExchange() {\n        require(isExchange[msg.sender], \"Caller must be exchange\");\n        _;\n    }\n\n    modifier onlyInitialized() {\n        require(isInitialized, \"Contract must be initialized\");\n        _;\n    }\n\n    /* ============ Public Variables ============ */\n    IVerifyDomainProcessor public verifyDomainProcessor;\n    address[] public exchanges;\n    mapping(address=>bool) public isExchange;\n\n    bool public isInitialized;\n\n    mapping(bytes32 => Domain) public domains;\n    mapping(address => bytes32[]) public userDomains;\n\n    /* ============ Constructor ============ */\n    \n    constructor() Ownable() {}\n\n    /* ============ Public Functions ============ */\n\n    /**\n     * @notice Verify domains and add them to the registry. If domain is transferred off-chain to another party \n     * then they can re-verify the domain and claim ownership of the domain and previous ownership is removed.\n     * The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on\n     * the domain. Function reverts if:\n     * - Domain ownership TLS proofs are invalid\n     * \n     * @param _proofs           Array of domain ownership TLS proofs\n     */\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external override\n        onlyInitialized\n    {\n        IVerifyDomainProcessor.DomainRaw[] memory rawDomains = verifyDomainProcessor.verifyProofs(\n            _proofs\n        );\n\n        for (uint256 i = 0; i < rawDomains.length; i++) {\n            IVerifyDomainProcessor.DomainRaw memory rawDomain = rawDomains[i];\n            bytes32 domainId = getDomainId(rawDomain.name);\n\n            Domain storage domain = domains[domainId];\n            if (domain.owner == address(0)) {\n                // Case 1.1: Domain has no owner\n                // Add caller as owner\n                userDomains[msg.sender].push(domainId);\n\n                // Set domain details\n                domains[domainId] = Domain({\n                    owner: msg.sender,\n                    name: rawDomain.name,\n                    expiryTime: rawDomain.expiryTime,\n                    exchange: address(0),\n                    listingId: 0\n                });\n            } else {\n                // Case 2: Domain has owner\n                // Case 2.1: Caller is owner; skip\n                if (domain.owner == msg.sender) {\n                    // No updates to userDomains\n\n                    // Update domain details; Only expiry time can change\n                    // Owner and domain name cannot change\n                    // Exchange and listingId are kept as is\n                    domain.expiryTime = rawDomain.expiryTime;\n                }\n                // Case 2.2: Caller is NOT owner\n                if (domain.owner != msg.sender) {\n                    // Remove ownership from old owner\n                    userDomains[domain.owner].removeStorage(domainId);\n\n                    // Remove listing on exchange if it exists\n                    if (domain.exchange != address(0)) {\n                        IDomainExchange(domain.exchange).registryRemoveListing(domain.listingId);\n                    }\n\n                    // Add domain to new owner\n                    userDomains[msg.sender].push(domainId);\n\n                    // Set domain details except for domain name as it cannot change\n                    domain.owner = msg.sender;\n                    domain.expiryTime = rawDomain.expiryTime;\n                    domain.exchange = address(0);\n                    domain.listingId = 0;\n                }\n            }\n\n            emit DomainVerified(domainId, msg.sender, rawDomain.name, rawDomain.expiryTime);\n        }\n    }\n\n    // Todo: Add function for relinquishing ownership of domain\n\n    /**\n     * @notice ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is\n     * listed on the calling exchange. This sets the exchange and listingId of the domain.\n     * \n     * @param _domainId     Domain to set listed status for\n     * @param _listingId    Listing Id of domain on calling exchange\n     */\n    function setDomainListing(bytes32 _domainId, uint256 _listingId)\n        external\n        override\n        onlyInitialized\n        onlyExchange\n    {\n        Domain storage domain = domains[_domainId];\n\n        require(domain.owner != address(0), \"Domain must be verified\");\n        require(domain.exchange == address(0), \"Domain already listed on another exchange\");\n\n        domain.exchange = msg.sender;\n        domain.listingId = _listingId;\n\n        emit DomainListed(_domainId, msg.sender, _listingId);\n    }\n\n    /**\n     * @notice ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one\n     * that the domain is listed on. This removes the exchange and listingId from the domain.\n     * \n     * @param _domainId            Domain ID to update listing status for\n     */\n    function removeDomainListing(bytes32 _domainId) external override onlyInitialized onlyExchange {\n        Domain storage domain = domains[_domainId];\n        require(domain.exchange == msg.sender, \"Domain not listed on calling exchange\");\n\n        _removeDomainListing(domain);\n\n        emit DomainListingRemoved(_domainId, msg.sender);\n    }\n\n    /**\n     * @notice ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain\n     * is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status\n     * from the domain.\n     * \n     * @param _domainId            Domain ID to update listing status for\n     * @param _newOwner            New owner of the domain\n     */\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) \n        external \n        override \n        onlyInitialized \n        onlyExchange \n    {\n        Domain storage domain = domains[_domainId];\n        require(domain.exchange == msg.sender, \"Domain not listed on calling exchange\");\n\n        _removeDomainListing(domain);\n\n        // Update ownership\n        address oldOwner = domain.owner;\n        domain.owner = _newOwner;\n        userDomains[oldOwner].removeStorage(_domainId);\n        userDomains[_newOwner].push(_domainId);\n\n        emit DomainTransferred(_domainId, oldOwner, _newOwner);\n    }\n\n    /* ============ Admin Functions ============ */\n\n    /**\n     * @notice ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts.\n     * This can only be called once.\n     *\n     * @param _verifyDomainProcessor    Address of the VerifyDomainProcessor contract\n     */\n    function initialize(\n        IVerifyDomainProcessor _verifyDomainProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        verifyDomainProcessor = _verifyDomainProcessor;\n\n        isInitialized = true;\n\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\n    }\n\n    /**\n     * @notice ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized.\n     * Exchange must not already exist in the registry.\n     * \n     * @param _exchange     Address of the exchange contract\n     */\n    function addExchange(address _exchange) external onlyOwner onlyInitialized {\n        require(!isExchange[_exchange], \"Duplicate exchange\");\n\n        isExchange[_exchange] = true;\n        exchanges.push(_exchange);\n\n        emit ExchangeAdded(_exchange);\n    }\n\n    /**\n     * @notice ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry.\n     * \n     * @param _exchange     Address of the exchange contract\n     */\n    function removeExchange(address _exchange) external onlyOwner onlyInitialized {\n        require(isExchange[_exchange], \"Exchange does not exist\");\n\n        isExchange[_exchange] = false;\n        exchanges.removeStorage(_exchange);\n\n        emit ExchangeRemoved(_exchange);\n    }\n\n    /**\n     * @notice ONLY OWNER: Update the verify domain processor\n     *\n     * @param _verifyDomainProcessor    Address of the new VerifyDomainProcessor contract\n     */\n    function updateVerifyDomainProcessor(IVerifyDomainProcessor _verifyDomainProcessor) external onlyOwner {\n        require(address(_verifyDomainProcessor) != address(0), \"Invalid address\");\n\n        verifyDomainProcessor = _verifyDomainProcessor;\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\n    }\n\n    /* ============ View Functions ============ */\n\n    function getDomainId(string memory _domainName) public pure override returns (bytes32) {\n        return keccak256(abi.encodePacked(_domainName));\n    }\n\n    function getDomainOwner(bytes32 _domainId) external view override returns (address) {        \n        return domains[_domainId].owner;\n    }\n\n    function getUserDomains(address _user) external view returns (DomainWithId[] memory domainInfo) {\n        bytes32[] memory domainIds = userDomains[_user];\n        \n        domainInfo = new DomainWithId[](domainIds.length);\n        for (uint256 i = 0; i < domainIds.length; i++) {\n            bytes32 domainId = domainIds[i];\n            domainInfo[i] = DomainWithId({\n                domainId: domainId,\n                domain: domains[domainId]\n            });\n        }\n    }\n\n    function getDomain(bytes32 _domainId) external view override returns (DomainWithId memory domainInfo) {\n        return DomainWithId({\n            domainId: _domainId,\n            domain: domains[_domainId]\n        });\n    }\n\n    function getDomains(bytes32[] memory _domains) external view returns (DomainWithId[] memory domainInfo) {\n        domainInfo = new DomainWithId[](_domains.length);\n        for (uint256 i = 0; i < _domains.length; i++) {\n            bytes32 domainId = _domains[i];\n            domainInfo[i] = DomainWithId({\n                domainId: domainId,\n                domain: domains[domainId]\n            });\n        }\n    }\n\n    function getExchanges() external view returns (address[] memory) {\n        return exchanges;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _removeDomainListing(Domain storage _domain) internal {\n        delete _domain.exchange;\n        delete _domain.listingId;\n    }\n}"
  },
  {
    "path": "contracts-domain/contracts/VerifyDomainProcessor.sol",
    "content": "// SPDX-License-Identifier: MIT\n\nimport { ClaimVerifier } from \"./external/ClaimVerifier.sol\";\nimport { INullifierRegistry } from \"./external/interfaces/INullifierRegistry.sol\";\nimport { ProxyBaseProcessor } from \"./external/processors/ProxyBaseProcessor.sol\";\nimport { StringConversionUtils } from \"./external/lib/StringConversionUtils.sol\";\nimport { TicketmasterDataParsing } from \"./external/TicketmasterDataParsing.sol\";\n\nimport { IVerifyDomainProcessor } from \"./interfaces/IVerifyDomainProcessor.sol\";\n\npragma solidity ^0.8.18;\n\n\ncontract VerifyDomainProcessor is IVerifyDomainProcessor, ProxyBaseProcessor {\n\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    uint8 constant MAX_EXTRACT_VALUES = 5;\n\n    /* ============ State Variables ============ */\n    address public immutable registry;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _registry,\n        INullifierRegistry _nullifierRegistry,\n        string[] memory _providerHashes\n    )   \n        ProxyBaseProcessor(_nullifierRegistry, _providerHashes)\n    {\n        registry = _registry;\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\n     *\n     * @param _proofs        Proofs to be verified\n     * @return domains       Array of Domain structs\n     */\n    function verifyProofs(\n        Proof[] memory _proofs\n    ) \n        external \n        override\n        returns (DomainRaw[] memory domains)\n    {\n        require(msg.sender == registry, \"Only registry can call\");\n\n        domains = new DomainRaw[](_proofs.length);\n\n        for (uint256 i = 0; i < _proofs.length; i++) {\n            Proof memory proof = _proofs[i];\n\n            verifyProofSignatures(proof);\n\n            (\n                string memory domainName,\n                string memory expiryTimeStr,\n                string memory providerHash\n            ) = _extractValues(proof);\n\n            // Check provider hash\n            require(_validateProviderHash(providerHash), \"No valid providerHash\");\n\n            _validateAndAddNullifier(proof.signedClaim.signatures);\n\n            domains[i] = DomainRaw({\n                name: domainName,\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \"YYYY-MM-DDTHH:MM:SS\"\n                // and returns UTC timestamps.\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(expiryTimeStr)\n            });\n        }\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * Extracts all values from the proof context.\n     *\n     * @param _proof The proof containing the context to extract values from.\n     */\n    function _extractValues(Proof memory _proof) internal pure returns (\n        string memory domainName,\n        string memory expiryTime,\n        string memory providerHash\n    ) {\n        string[] memory values = ClaimVerifier.extractAllFromContext(\n            _proof.claimInfo.context, \n            MAX_EXTRACT_VALUES, \n            true\n        );\n\n        return (\n            values[0], // domainName\n            values[1], // expiryTime\n            values[2]  // providerHash\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/AddressAllowList.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { AddressArrayUtils } from \"./lib/AddressArrayUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract AddressAllowList is Ownable {\n\n    using AddressArrayUtils for address[];\n\n    /* ============ Events ============ */\n    event AddressAddedToAllowlist(address indexed allowedAddress);\n    event AddressRemovedFromAllowlist(address indexed allowedAddress);\n    event AllowlistEnabled();\n    event AllowlistDisabled();\n    \n    /* ============ Modifier ============ */\n    modifier onlyAllowed() {\n        require(isEnabled ? isAllowed[msg.sender] : true, \"Address is not allowed\");\n        _;\n    }\n    \n    /* ============ State Variables ============ */\n    bool public isEnabled;                     // Boolean indicating if the allowlist is enabled\n    address[] public allowedAddresses;         // Array of addresses that are allowed from taking depositors liquidity\n    mapping(address => bool) public isAllowed; // Mapping of address to boolean indicating if the user is allowed\n\n    /* ============ Constructor ============ */\n    constructor(address[] memory _allowedAddresses) Ownable() {\n        for (uint256 i = 0; i < _allowedAddresses.length; i++) {\n            address allowedAddress = _allowedAddresses[i];\n\n            require(!isAllowed[allowedAddress], \"Address is already allowed\");\n            isAllowed[allowedAddress] = true;\n            emit AddressAddedToAllowlist(allowedAddress);\n        }\n        allowedAddresses = _allowedAddresses;\n        isEnabled = true;\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed\n     * functions.\n     *\n     * @param _allowedAddresses   List of addresses allowed to call allow listed functions\n     */\n    function addAddressesToAllowlist(address[] memory _allowedAddresses) external onlyOwner {\n        for(uint256 i = 0; i < _allowedAddresses.length; i++) {\n            address allowedAddress = _allowedAddresses[i];\n\n            require(!isAllowed[allowedAddress], \"Address already on allowlist\");\n\n            isAllowed[allowedAddress] = true;\n            allowedAddresses.push(allowedAddress);\n\n            emit AddressAddedToAllowlist(allowedAddress);\n        }\n    }\n\n    /**\n     * @notice Removes passed addresses from an allow list. Addresses not on the allow list are unable to call\n     * allow listed functions.\n     *\n     * @param _disallowedAddresses   List of addresses being disallowed from calling allow listed functions\n     */\n    function removeAddressesFromAllowlist(address[] memory _disallowedAddresses) external onlyOwner {\n        for(uint256 i = 0; i < _disallowedAddresses.length; i++) {\n            address disallowedAddress = _disallowedAddresses[i];\n\n            require(isAllowed[disallowedAddress], \"Address already disallowed\");\n\n            isAllowed[disallowedAddress] = false;\n            allowedAddresses.removeStorage(disallowedAddress);\n\n            emit AddressRemovedFromAllowlist(disallowedAddress);\n        }\n    }\n\n    /**\n     * @notice Enable the allow list. When the allow list is enabled, only approved addresses are allowed to\n     * functions with onlyAllowed modifier.\n     */\n    function enableAllowlist() external onlyOwner {\n        require(!isEnabled, \"Allow list is already enabled\");\n\n        isEnabled = true;\n        emit AllowlistEnabled();\n    }\n\n    /**\n     * @notice Disable the allow list. When the allow list is disabled, any address is allowed to call functions\n     * with onlyAllowed modifier.\n     */\n    function disableAllowlist() external onlyOwner {\n        require(isEnabled, \"Allow list is already disabled\");\n\n        isEnabled = false;\n        emit AllowlistDisabled();\n    }\n\n    /* ============ View Functions ============ */\n\n    function _getAllowedAddresses() internal view returns (address[] memory) {\n        return allowedAddresses;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/ClaimVerifier.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Claims } from \"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\";\n\npragma solidity ^0.8.18;\n\nlibrary ClaimVerifier {\n\n    /**\n     * Find the end index of target string in the data string. Returns the end index + 1 if\n     * the target string in the data string if found. Returns type(uint256).max if:\n     * - Target is longer than data\n     * - Target is not found\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\n     */\n    function findSubstringEndIndex(\n        string memory data,\n        string memory target\n    ) public pure returns (uint256) {\n        bytes memory dataBytes = bytes(data);\n        bytes memory targetBytes = bytes(target);\n\n        if (dataBytes.length < targetBytes.length) {\n            return type(uint256).max;\n        }\n\n        // Find start of target\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\n            bool isMatch = true;\n\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\n                if (dataBytes[i + j] != targetBytes[j]) {\n                    isMatch = false;\n                    break;\n                }\n            }\n\n            if (isMatch) {\n                return i + targetBytes.length; // Return end index + 1\n            }\n        }\n\n        return type(uint256).max;\n    }\n\n    /**\n     * Extracts given target field value from context in claims. Extracts only ONE value.\n     * Pass prefix formatted with quotes, for example '\"providerHash\\\":\\\"'\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\n     *\n     * @param data      Context string from which target value needs to be extracted\n     * @param prefix    Prefix of the target value that needs to be extracted            \n     */\n    function extractFieldFromContext(\n        string memory data,\n        string memory prefix\n    ) public pure returns (string memory) {\n        // Find end index of prefix; which is the start index of the value\n        uint256 start = findSubstringEndIndex(data, prefix);\n\n        bytes memory dataBytes = bytes(data);\n        if (start == dataBytes.length) {\n            return \"\"; // Prefix not found. Malformed or missing message\n        }\n        \n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\n        uint256 end = start;\n        while (\n            end < dataBytes.length &&\n            !(dataBytes[end] == '\"' && dataBytes[end - 1] != \"\\\\\")\n        ) {\n            end++;\n        }\n        if (end <= start) {\n            return \"\"; // Malformed or missing message\n        }\n        bytes memory contextMessage = new bytes(end - start);\n        for (uint i = start; i < end; i++) {\n            contextMessage[i - start] = dataBytes[i];\n        }\n        return string(contextMessage);\n    }\n\n\n    /**\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \n     * key-value pairs. This function returns extracted individual values from extractedParameters along \n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \n     * multiple times.\n     * \n     * @param data                  Context string from which target value needs to be extracted\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\n     * @param extractProviderHash   Extracts and returns providerHash if true\n     */\n    function extractAllFromContext(\n        string memory data,\n        uint8 maxValues,\n        bool extractProviderHash\n    ) public pure returns (string[] memory) {\n        \n        require(maxValues > 0, \"Max values must be greater than 0\");\n\n        bytes memory dataBytes = bytes(data);\n        uint index = 0;\n\n        bytes memory extractedParametersBytes = bytes('{\\\"extractedParameters\\\":{\\\"');\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\n            require(dataBytes[index + i] == extractedParametersBytes[i], \"Extraction failed. Malformed extractedParameters\");\n        }\n        index += extractedParametersBytes.length;\n\n        bool isValue = false;       // starts with a key right after '{\\\"extractedParameters\\\":{\\\"'\n        uint valuesFound = 0;\n    \n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\n\n        while (\n            index < dataBytes.length\n        ) {\n            // Keep incrementing until '\"', escaped quotes are not considered\n            if (!(dataBytes[index] == '\"' && dataBytes[index - 1] != \"\\\\\")) {\n                index++;\n                continue;\n            }\n\n            if (!isValue) {\n                // \\\":\\\" (3 chars)\n                require(dataBytes[index + 1] == \":\" && dataBytes[index + 2] == '\\\"', \"Extraction failed. Malformed data 1\");\n                index += 3;     // move it after \\\"\n                isValue = true;\n                valueIndices[2 * valuesFound] = index;      // start index\n            } else {\n                // \\\",\\\" (3 chars) or \\\"}, (3 chars)\n                // \\\"}} is not supported, there should always be a providerHash\n                require(\n                    dataBytes[index + 1] == \",\" && dataBytes[index + 2] == '\\\"' ||  \n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \",\",\n                    \"Extraction failed. Malformed data 2\"\n                );\n                valueIndices[2 * valuesFound + 1] = index;      // end index\n                valuesFound++;\n\n                if (dataBytes[index + 1] == \",\") {\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\n                    require(valuesFound != maxValues, \"Extraction failed. Exceeded max values\");\n                    index += 3;\n                    isValue = false;\n                } else {    // index + 1 = \"}\"\n                    index += 3;\n                    break;  // end of extractedParameters\n                }\n            }\n        }\n\n        if (extractProviderHash) {\n            bytes memory providerHashParamBytes = bytes(\"\\\"providerHash\\\":\\\"\");\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\n                require(dataBytes[index + i] == providerHashParamBytes[i], \"Extraction failed. Malformed providerHash\");\n            }\n            index += providerHashParamBytes.length;\n            \n            // final indices tuple in valueIndices will be for star and end indices of provider hash\n            valueIndices[2 * valuesFound] = index;\n            // Keep incrementing until '\"'\n            while (\n                index < dataBytes.length && dataBytes[index] != '\"'\n            ) {\n                index++;\n            }\n            valueIndices[2 * valuesFound + 1] = index;\n            valuesFound++;\n        }   \n        \n        string[] memory values = new string[](valuesFound);\n        \n        for (uint i = 0; i < valuesFound; i++) {\n            uint startIndex = valueIndices[2 * i];\n            uint endIndex = valueIndices[2 * i + 1];\n            bytes memory contextValue = new bytes(endIndex - startIndex);\n            for (uint j = startIndex; j < endIndex; j++) {\n                contextValue[j - startIndex] = dataBytes[j];\n            }\n            values[i] = string(contextValue);\n        }\n\n        return values;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/ManagedKeyHashAdapterV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { IKeyHashAdapterV2 } from \"./interfaces/IKeyHashAdapterV2.sol\";\nimport { Bytes32ArrayUtils } from \"./lib/Bytes32ArrayUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\n    \n    using Bytes32ArrayUtils for bytes32[];\n\n    /* ============ Events ============ */\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\n\n    /* ============ State Variables ============ */\n\n    mapping(bytes32 => bool) public isMailServerKeyHash;\n    bytes32[] public mailServerKeyHashes;\n\n    /* ============ Constructor ============ */\n\n    constructor(\n        bytes32[] memory _mailServerKeyHashes\n    )\n        Ownable()\n    {\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\n            require(!isMailServerKeyHash[mailserverKeyHash], \"Key hash already added\");\n            \n            isMailServerKeyHash[mailserverKeyHash] = true;\n            mailServerKeyHashes.push(mailserverKeyHash);\n        }\n    }\n\n    /* ============ External Functions ============ */\n\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\n        require(!isMailServerKeyHash[_mailserverKeyHash], \"Key hash already added\");\n\n        isMailServerKeyHash[_mailserverKeyHash] = true;\n        mailServerKeyHashes.push(_mailserverKeyHash);\n\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\n    }\n\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\n        require(isMailServerKeyHash[_mailserverKeyHash], \"Key hash not added\");\n\n        isMailServerKeyHash[_mailserverKeyHash] = false;\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\n\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\n    }\n\n    /* ============ External Getter Functions ============ */\n\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\n        return mailServerKeyHashes;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/NullifierRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { AddressArrayUtils } from \"./lib/AddressArrayUtils.sol\";\nimport { INullifierRegistry } from \"./interfaces/INullifierRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract NullifierRegistry is Ownable, INullifierRegistry {\n\n    using AddressArrayUtils for address[];\n    \n    /* ============ Events ============ */\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\n    event WriterAdded(address writer);\n    event WriterRemoved(address writer);\n\n    /* ============ Modifiers ============ */\n    modifier onlyWriter() {\n        require(isWriter[msg.sender], \"Only addresses with write permissions can call\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    mapping(bytes32 => bool) public isNullified;\n    mapping(address => bool) public isWriter;\n    address[] public writers;\n\n    /* ============ Constructor ============ */\n    constructor() Ownable() {}\n    \n    /* ============ External Functions ============ */\n\n    /**\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\n     *\n     * @param _nullifier    The nullifier to store\n     */\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\n        require(!isNullified[_nullifier], \"Nullifier already exists\");\n\n        isNullified[_nullifier] = true;\n\n        emit NullifierAdded(_nullifier, msg.sender);\n    }\n\n    /* ============ Admin Functions ============ */\n\n    /**\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\n     *\n     * @param _newWriter    The nullifier to store\n     */\n    function addWritePermission(address _newWriter) external onlyOwner {\n        require(!isWriter[_newWriter], \"Address is already a writer\");\n\n        isWriter[_newWriter] = true;\n        writers.push(_newWriter);\n\n        emit WriterAdded(_newWriter);\n    }\n\n    /**\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\n     *\n     * @param _removedWriter    The nullifier to store\n     */\n    function removeWritePermission(address _removedWriter) external onlyOwner {\n        require(isWriter[_removedWriter], \"Address is not a writer\");\n\n        isWriter[_removedWriter] = false;\n        writers.removeStorage(_removedWriter);\n\n        emit WriterRemoved(_removedWriter);\n    }\n\n    /* ============ External View Functions ============ */\n\n    function getWriters() external view returns(address[] memory) {\n       return writers;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/TicketmasterDataParsing.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { DateTime } from \"./lib/DateTime.sol\";\n\nimport { StringConversionUtils } from \"./lib/StringConversionUtils.sol\";\nimport { ClaimVerifier } from \"./ClaimVerifier.sol\";\n\npragma solidity ^0.8.18;\n\nlibrary TicketmasterDataParsing {\n    \n    using StringConversionUtils for string;\n\n    /**\n     * @notice Iterates through every character in the date string and splits the string at each dash, \"T\", or colon. Function will revert\n     * if there are not 6 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\n     * to get the unix timestamp. This function is SPECIFIC TO THE DATE FORMAT USED BY Ticketmaster, not suitable for use with other date\n     * formats. Ticketmaster date format is: \"YYYY-MM-DDTHH:MM:SS\" and returns UTC timestamps.\n     *\n     * @param _dateString       Date string to be converted to a UTC timestamp\n     */\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256 utcTimestamp) {\n        string[6] memory extractedStrings;\n        uint256 breakCounter;\n        uint256 lastBreak;\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\n            if (bytes(_dateString)[i] == 0x2d || bytes(_dateString)[i] == 0x3a || bytes(_dateString)[i] == 0x54) {\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\n                lastBreak = i + 1;\n                breakCounter++;\n            }\n        }\n        // Add last substring to array\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\n\n        // Check that exactly 6 substrings were found (string is split at 5 different places)\n        require(breakCounter == 5, \"Invalid date string\");\n\n        utcTimestamp = DateTime.timestampFromDateTime(\n            extractedStrings[0].stringToUint(0),    // year\n            extractedStrings[1].stringToUint(0),    // month\n            extractedStrings[2].stringToUint(0),    // day\n            extractedStrings[3].stringToUint(0),    // hour\n            extractedStrings[4].stringToUint(0),    // minute\n            0                                       // we don't need to the second granularity\n        );\n    }\n\n    /**\n     * Extract event ID from URL by finding the last slash and taking the substring after it. We assume the\n     * URL is formulated something like: {domainRoot}/.../event/EVENT_ID\n     *\n     * @param _url          URL to extract event ID from\n     * @return              Event ID extracted from URL\n     */\n    function _extractEventIdFromUrl(string memory _url) internal pure returns (string memory) {\n        string memory prefix = \"event/\";\n        bytes memory urlBytes = bytes(_url);\n        uint256 urlLength = urlBytes.length;\n\n        uint256 startIndex = ClaimVerifier.findSubstringEndIndex(_url, prefix);\n        // If the start index is the max value or the URL length, then the event ID was not found\n        if (startIndex == type(uint256).max || startIndex == urlLength) {\n            revert(\"Event ID not found in URL\");\n        }\n\n        bytes memory contextMessage = new bytes(urlLength - startIndex);\n        for (uint i = startIndex; i < urlLength; i++) {\n            contextMessage[i - startIndex] = urlBytes[i];\n        }\n        return string(contextMessage);\n    }\n\n    /**\n     * Parse tickets out of a ticket string of the format: '[\"ticket1\", \"ticket2\", \"ticket3\"]'.\n     * We start by getting the number of tickets in a string by counting the number of commas and adding 1.\n     * Then we iterate through the string and find the ticket IDs by looking for the quotes. We need to extract\n     * from quote to quote so we look for all even-numbered quotes then extract the string between that and the\n     * previous quote index.\n     *\n     * @param _ticketString          Stringified array of tickets\n     */\n     function _parseTicketString(string memory _ticketString) internal pure returns (string[] memory ticketIds) {\n        // Assume there is at least one ticket (which means array would not have a comma)\n        // If there is no ticket then the transaction will end up reverting\n        uint256 ticketCount = 1;\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\n            if (bytes(_ticketString)[i] == 0x2C) {\n                ticketCount++;\n            }\n        }\n\n        ticketIds = new string[](ticketCount);\n        uint256 breakCounter;\n        uint256 lastBreak;\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\n            if (bytes(_ticketString)[i] == 0x22) {\n                breakCounter++;\n                if (breakCounter % 2 == 0) {\n                    ticketIds[(breakCounter/2)-1] = _ticketString.substring(lastBreak, i-1);\n                }\n                lastBreak = i + 1;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/interfaces/IKeyHashAdapterV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IKeyHashAdapterV2 {\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/interfaces/INullifierRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface INullifierRegistry {\n    function addNullifier(bytes32 _nullifier) external;\n    function isNullified(bytes32 _nullifier) external view returns(bool);\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/interfaces/IProxyBaseProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Claims } from \"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\";\n\npragma solidity ^0.8.18;\n\ninterface IProxyBaseProcessor {\n    \n    struct Proof {\n        Claims.ClaimInfo claimInfo;\n        Claims.SignedClaim signedClaim;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/lib/AddressArrayUtils.sol",
    "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: MIT\n*/\n\npragma solidity ^0.8.17;\n\n/**\n * @title AddressArrayUtils\n * @author Set Protocol\n *\n * Utility functions to handle Address Arrays\n *\n * CHANGELOG:\n * - 4/21/21: Added validatePairsWithArray methods\n */\nlibrary AddressArrayUtils {\n\n    uint256 constant internal MAX_INT = 2**256 - 1;\n\n    /**\n     * Finds the index of the first occurrence of the given element.\n     * @param A The input array to search\n     * @param a The value to find\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\n     */\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\n        uint256 length = A.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (A[i] == a) {\n                return (i, true);\n            }\n        }\n        return (MAX_INT, false);\n    }\n\n    /**\n    * Returns true if the value is present in the list. Uses indexOf internally.\n    * @param A The input array to search\n    * @param a The value to find\n    * @return Returns isIn for the first occurrence starting from index 0\n    */\n    function contains(address[] memory A, address a) internal pure returns (bool) {\n        (, bool isIn) = indexOf(A, a);\n        return isIn;\n    }\n\n    /**\n    * Returns true if there are 2 elements that are the same in an array\n    * @param A The input array to search\n    * @return Returns boolean for the first occurrence of a duplicate\n    */\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\n        require(A.length > 0, \"A is empty\");\n\n        for (uint256 i = 0; i < A.length - 1; i++) {\n            address current = A[i];\n            for (uint256 j = i + 1; j < A.length; j++) {\n                if (current == A[j]) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The address to remove\n     * @return Returns the array with the object removed.\n     */\n    function remove(address[] memory A, address a)\n        internal\n        pure\n        returns (address[] memory)\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"Address not in array.\");\n        } else {\n            (address[] memory _A,) = pop(A, index);\n            return _A;\n        }\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The address to remove\n     */\n    function removeStorage(address[] storage A, address a)\n        internal\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"Address not in array.\");\n        } else {\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\n            A.pop();\n        }\n    }\n\n    /**\n    * Removes specified index from array\n    * @param A The input array to search\n    * @param index The index to remove\n    * @return Returns the new array and the removed entry\n    */\n    function pop(address[] memory A, uint256 index)\n        internal\n        pure\n        returns (address[] memory, address)\n    {\n        uint256 length = A.length;\n        require(index < A.length, \"Index must be < A length\");\n        address[] memory newAddresses = new address[](length - 1);\n        for (uint256 i = 0; i < index; i++) {\n            newAddresses[i] = A[i];\n        }\n        for (uint256 j = index + 1; j < length; j++) {\n            newAddresses[j - 1] = A[j];\n        }\n        return (newAddresses, A[index]);\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/lib/Bytes32ArrayUtils.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.17;\n\n/**\n * @title Bytes32ArrayUtils\n * @author ZKP2P\n *\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\n */\nlibrary Bytes32ArrayUtils {\n\n    uint256 constant internal MAX_INT = 2**256 - 1;\n\n    /**\n     * Finds the index of the first occurrence of the given element.\n     * @param A The input array to search\n     * @param a The value to find\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\n     */\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\n        uint256 length = A.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (A[i] == a) {\n                return (i, true);\n            }\n        }\n        return (MAX_INT, false);\n    }\n\n    /**\n    * Returns true if the value is present in the list. Uses indexOf internally.\n    * @param A The input array to search\n    * @param a The value to find\n    * @return Returns isIn for the first occurrence starting from index 0\n    */\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\n        (, bool isIn) = indexOf(A, a);\n        return isIn;\n    }\n\n    /**\n    * Returns true if there are 2 elements that are the same in an array\n    * @param A The input array to search\n    * @return Returns boolean for the first occurrence of a duplicate\n    */\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\n        require(A.length > 0, \"A is empty\");\n\n        for (uint256 i = 0; i < A.length - 1; i++) {\n            bytes32 current = A[i];\n            for (uint256 j = i + 1; j < A.length; j++) {\n                if (current == A[j]) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The bytes32 to remove\n     * @return Returns the array with the object removed.\n     */\n    function remove(bytes32[] memory A, bytes32 a)\n        internal\n        pure\n        returns (bytes32[] memory)\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"bytes32 not in array.\");\n        } else {\n            (bytes32[] memory _A,) = pop(A, index);\n            return _A;\n        }\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The bytes32 to remove\n     */\n    function removeStorage(bytes32[] storage A, bytes32 a)\n        internal\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"bytes32 not in array.\");\n        } else {\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\n            A.pop();\n        }\n    }\n\n    /**\n    * Removes specified index from array\n    * @param A The input array to search\n    * @param index The index to remove\n    * @return Returns the new array and the removed entry\n    */\n    function pop(bytes32[] memory A, uint256 index)\n        internal\n        pure\n        returns (bytes32[] memory, bytes32)\n    {\n        uint256 length = A.length;\n        require(index < A.length, \"Index must be < A length\");\n        bytes32[] memory newBytes = new bytes32[](length - 1);\n        for (uint256 i = 0; i < index; i++) {\n            newBytes[i] = A[i];\n        }\n        for (uint256 j = index + 1; j < length; j++) {\n            newBytes[j - 1] = A[j];\n        }\n        return (newBytes, A[index]);\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/lib/DateTime.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// ----------------------------------------------------------------------------\n// DateTime Library v2.0\n//\n// A gas-efficient Solidity date and time library\n//\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\n//\n// Tested date range 1970/01/01 to 2345/12/31\n//\n// Conventions:\n// Unit      | Range         | Notes\n// :-------- |:-------------:|:-----\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\n// year      | 1970 ... 2345 |\n// month     | 1 ... 12      |\n// day       | 1 ... 31      |\n// hour      | 0 ... 23      |\n// minute    | 0 ... 59      |\n// second    | 0 ... 59      |\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\n//\n//\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\n//\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\n// ----------------------------------------------------------------------------\n\nlibrary DateTime {\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\n    uint256 constant SECONDS_PER_MINUTE = 60;\n    int256 constant OFFSET19700101 = 2440588;\n\n    uint256 constant DOW_MON = 1;\n    uint256 constant DOW_TUE = 2;\n    uint256 constant DOW_WED = 3;\n    uint256 constant DOW_THU = 4;\n    uint256 constant DOW_FRI = 5;\n    uint256 constant DOW_SAT = 6;\n    uint256 constant DOW_SUN = 7;\n\n    // ------------------------------------------------------------------------\n    // Calculate the number of days from 1970/01/01 to year/month/day using\n    // the date conversion algorithm from\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\n    //\n    // days = day\n    //      - 32075\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\n    //      - offset\n    // ------------------------------------------------------------------------\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\n        require(year >= 1970);\n        int256 _year = int256(year);\n        int256 _month = int256(month);\n        int256 _day = int256(day);\n\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\n\n        _days = uint256(__days);\n    }\n\n    function timestampFromDateTime(\n        uint256 year,\n        uint256 month,\n        uint256 day,\n        uint256 hour,\n        uint256 minute,\n        uint256 second\n    )\n        internal\n        pure\n        returns (uint256 timestamp)\n    {\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\n            + minute * SECONDS_PER_MINUTE + second;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/lib/StringArrayUtils.sol",
    "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache-2.0\n*/\n\npragma solidity ^0.8.18;\n\n/**\n * @title StringArrayUtils\n * @author Set Protocol\n *\n * Utility functions to handle String Arrays\n */\nlibrary StringArrayUtils {\n\n    /**\n     * Finds the index of the first occurrence of the given element.\n     * @param A The input string to search\n     * @param a The value to find\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\n     */\n    function indexOf(string[] memory A, string memory a) internal pure returns (uint256, bool) {\n        uint256 length = A.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (keccak256(bytes(A[i])) == keccak256(bytes(a))) {\n                return (i, true);\n            }\n        }\n        return (type(uint256).max, false);\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The string to remove\n     */\n    function removeStorage(string[] storage A, string memory a)\n        internal\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"String not in array.\");\n        } else {\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\n            A.pop();\n        }\n    }\n}"
  },
  {
    "path": "contracts-domain/contracts/external/lib/StringConversionUtils.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\n// converting from string to Uint\nlibrary StringConversionUtils {\n    \n    /**\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\n     * the returned number has multiple floating points then the function will revert.\n     *\n     * Examples: _s = \"12.34\", _expectedDecimals = 6 => 12340000\n     *           _s = \"12.34\", _expectedDecimals = 2 => 1234\n     *           _s = \"12.34\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\n     *           _s = \"12.34.56\", _expectedDecimals = 6 => REVERT (Invalid number)\n     *\n     * @param _s                    String being processed\n     * @param _desiredDecimals      Desired amount of decimal places\n     */\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\n        return stringToUint(_s, 0x2E, _desiredDecimals);\n    }\n\n    function stringToUint(\n        string memory _s,\n        bytes1 _decimalCharacter,\n        uint256 _desiredDecimals\n    )\n        internal\n        pure\n        returns (uint256)\n    {\n        bytes memory b = bytes(_s);\n\n        uint256 result = 0;\n        uint256 decimalPlaces = 0;\n\n        bool decimals = false;\n        for (uint256 i = 0; i < b.length; i++) {\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\n            }\n\n            if (decimals) {\n                decimalPlaces++;\n            }\n\n            if (b[i] == _decimalCharacter) {\n                require(decimals == false, \"String has multiple decimals\");\n                decimals = true;\n            }\n        }\n\n        require(decimalPlaces <= _desiredDecimals, \"String has too many decimal places\");\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\n    }\n\n    /**\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\n     *\n     * @param _str           String being processed\n     * @param _startIndex    Index to start parsing from\n     * @param _endIndex      Index to stop parsing at (index not included in result)\n     */\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\n        bytes memory strBytes = bytes(_str);\n        bytes memory result = new bytes(_endIndex-_startIndex);\n        for(uint i = _startIndex; i < _endIndex; i++) {\n            result[i-_startIndex] = strBytes[i];\n        }\n        return string(result);\n    }\n\n    function replaceString(\n        string memory _str,\n        string memory _lookupValue,\n        string memory _replaceValue\n    )\n        internal\n        pure\n        returns (string memory)\n    {\n        bytes memory strBytes = bytes(_str);\n        bytes memory lookupBytes = bytes(_lookupValue);\n\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\n        if (lookupIndex == type(uint256).max) {\n            return _str;\n        }\n\n        // Split the original string into two parts: before and after the keyword\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\n        \n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\n    }\n\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\n        bytes memory strBytes = bytes(str);\n        bytes memory substrBytes = bytes(substr);\n        \n        if (strBytes.length < substrBytes.length) return type(uint256).max;\n        \n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\n            bool found = true;\n            for (uint j = 0; j < substrBytes.length; j++) {\n                if (strBytes[i + j] != substrBytes[j]) {\n                    found = false;\n                    break;\n                }\n            }\n            if (found) return i;\n        }\n        \n        return type(uint256).max;\n    }\n\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/lib/Uint256ArrayUtils.sol",
    "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache-2.0\n*/\n\npragma solidity ^0.8.18;\n\n/**\n * @title Uint256ArrayUtils\n * @author Set Protocol\n *\n * Utility functions to handle Uint256 Arrays\n */\nlibrary Uint256ArrayUtils {\n\n    uint256 constant internal MAX_INT = 2**256 - 1;\n\n    /**\n     * Finds the index of the first occurrence of the given element.\n     * @param A The input array to search\n     * @param a The value to find\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\n     */\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\n        uint256 length = A.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (A[i] == a) {\n                return (i, true);\n            }\n        }\n        return (MAX_INT, false);\n    }\n\n    /**\n    * Returns true if the value is present in the list. Uses indexOf internally.\n    * @param A The input array to search\n    * @param a The value to find\n    * @return Returns isIn for the first occurrence starting from index 0\n    */\n    function contains(uint256[] memory A, uint256 a) internal pure returns (bool) {\n        (, bool isIn) = indexOf(A, a);\n        return isIn;\n    }\n\n    /**\n     * Returns the combination of the two arrays\n     * @param A The first array\n     * @param B The second array\n     * @return Returns A extended by B\n     */\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\n        uint256 aLength = A.length;\n        uint256 bLength = B.length;\n        uint256[] memory newUints = new uint256[](aLength + bLength);\n        for (uint256 i = 0; i < aLength; i++) {\n            newUints[i] = A[i];\n        }\n        for (uint256 j = 0; j < bLength; j++) {\n            newUints[aLength + j] = B[j];\n        }\n        return newUints;\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The bytes32 to remove\n     */\n    function removeStorage(uint256[] storage A, uint256 a)\n        internal\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"uint256 not in array.\");\n        } else {\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\n            A.pop();\n        }\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/processors/EmailBaseProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { IKeyHashAdapterV2 } from \"../interfaces/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../interfaces/INullifierRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract EmailBaseProcessor is Ownable {\n\n    /* ============ Modifiers ============ */\n    modifier onlyExchange() {\n        require(msg.sender == exchange, \"Only exchange can call this function\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    address public immutable exchange;\n    INullifierRegistry public nullifierRegistry;\n    bytes public emailFromAddress;\n    uint256 public timestampBuffer;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _exchange,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Ownable()\n    {\n        exchange = _exchange;\n        nullifierRegistry = _nullifierRegistry;\n        emailFromAddress = bytes(_emailFromAddress);\n        timestampBuffer = _timestampBuffer;\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\n     *\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\n     */\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\n        emailFromAddress = bytes(_emailFromAddress);\n    }\n\n    /**\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\n     * timestamps.\n     *\n     * @param _timestampBuffer    The timestamp buffer for validated emails\n     */\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\n        timestampBuffer = _timestampBuffer;\n    }\n\n    /* ============ External Getters ============ */\n\n    function getEmailFromAddress() external view returns (bytes memory) {\n        return emailFromAddress;\n    }\n\n\n    /* ============ Internal Functions ============ */\n\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\n        require(!nullifierRegistry.isNullified(_nullifier), \"Nullifier has already been used\");\n        nullifierRegistry.addNullifier(_nullifier);\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/external/processors/ProxyBaseProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Claims } from \"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\";\n\nimport { AddressArrayUtils } from \"../lib/AddressArrayUtils.sol\";\nimport { StringArrayUtils } from \"../lib/StringArrayUtils.sol\";\nimport { INullifierRegistry } from \"../interfaces/INullifierRegistry.sol\";\nimport { IProxyBaseProcessor } from \"../interfaces/IProxyBaseProcessor.sol\";\nimport { ClaimVerifier } from \"../ClaimVerifier.sol\";\n\npragma solidity ^0.8.18;\n\ncontract ProxyBaseProcessor is IProxyBaseProcessor, Ownable {\n\n    using AddressArrayUtils for address[];\n    using StringArrayUtils for string[];\n\n    /* ============ State Variables ============ */\n    mapping(address => bool) public isWitness;\n    address[] public witnesses;\n    mapping(string => bool) public isProviderHash;\n    string[] public providerHashes;                         // Set of provider hashes that these proofs should be for\n    INullifierRegistry public immutable nullifierRegistry;\n\n    /* ============ Events ============ */\n    event WitnessAdded(address witness);\n    event WitnessRemoved(address witness);\n    event ProviderHashAdded(string providerHash);\n    event ProviderHashRemoved(string providerHash);\n\n    /* ============ Constructor ============ */\n    constructor(\n        INullifierRegistry _nulliferRegistry,\n        string[] memory _providerHashes\n    )\n        Ownable()\n    {\n        nullifierRegistry = _nulliferRegistry;\n\n        for (uint256 i = 0; i < _providerHashes.length; i++) {\n            require(!isProviderHash[_providerHashes[i]], \"Provider hash already added\");\n            isProviderHash[_providerHashes[i]] = true;\n            providerHashes.push(_providerHashes[i]);\n\n            emit ProviderHashAdded(_providerHashes[i]);\n        }\n    }\n\n    /* ============ Admin Functions ============ */\n\n    /**\n     * ONLY OWNER: Add witness address. Witness must not have been previously added.\n     *\n     * @param _newWitness    Address of the new witness\n     */\n    function addWitness(address _newWitness) external onlyOwner {\n        require(!isWitness[_newWitness], \"Address is already a witness\");\n\n        isWitness[_newWitness] = true;\n        witnesses.push(_newWitness);\n\n        emit WitnessAdded(_newWitness);\n    }\n\n    /**\n     * ONLY OWNER: Remove witness address. Witness must have been previously added.\n     *\n     * @param _removeWitness    Address of witness to be removed\n     */\n    function removeWitness(address _removeWitness) external onlyOwner {\n        require(isWitness[_removeWitness], \"Address is not a witness\");\n\n        delete isWitness[_removeWitness];\n        witnesses.removeStorage(_removeWitness);\n\n        emit WitnessRemoved(_removeWitness);\n    }\n\n    /**\n     * ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\n     *\n     * @param _newProviderHash    New provider hash to be added\n     */\n    function addProviderHash(string memory _newProviderHash) external onlyOwner {\n        require(!isProviderHash[_newProviderHash], \"Provider hash already added\");\n\n        isProviderHash[_newProviderHash] = true;\n        providerHashes.push(_newProviderHash);\n\n        emit ProviderHashAdded(_newProviderHash);\n    }\n\n    /**\n     * ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\n     *\n     * @param _removeProviderHash    Provider hash to be removed\n     */\n    function removeProviderHash(string memory _removeProviderHash) external onlyOwner {\n        require(isProviderHash[_removeProviderHash], \"Provider hash not found\");\n\n        delete isProviderHash[_removeProviderHash];\n        providerHashes.removeStorage(_removeProviderHash);\n\n        emit ProviderHashRemoved(_removeProviderHash);\n    }\n\n    /* ============ Public Functions ============ */\n    \n    /**\n     * Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters)\n     * to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature. \n     * This function verifies a claim by performing the following checks on the claim\n     * - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim\n     * - Checks if the signatures are valid and from the witnesses\n     * This function reverts if\n     * - No signatures are found on the proof\n     * - Number of signatures is not equal to the number of witnesses\n     * - ClaimInfo hash does not match the identifier in the claim\n     * - Signatures are invalid (not from the witnesses)\n     * \n     * DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the \n     * responsibility of the caller.\n     * \n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\n     *    \n     * @param proof                 Proof to be verified\n     */\n    function verifyProofSignatures(Proof memory proof) public view returns (bool) {\n\n        // create signed claim using claimData and signature.\n        require(proof.signedClaim.signatures.length > 0, \"No signatures\");\n        Claims.SignedClaim memory signed = Claims.SignedClaim(\n            proof.signedClaim.claim,\n            proof.signedClaim.signatures\n        );\n\n        // check if the hash from the claimInfo is equal to the infoHash in the claimData\n        bytes32 hashed = Claims.hashClaimInfo(proof.claimInfo);\n        require(proof.signedClaim.claim.identifier == hashed, \"ClaimInfo hash doesn't match\");\n\n        // Recover signers of the signed claim\n        address[] memory signedWitnesses = Claims.recoverSignersOfSignedClaim(signed);\n\n        // check if the number of signatures is equal to the number of witnesses\n        require(\n            signedWitnesses.length == witnesses.length,\n            \"Number of signatures not equal to number of witnesses\"\n        );\n\n        // Check signatures are from witnesses\n        for (uint256 i = 0; i < signed.signatures.length; i++) {\n            bool found = false;\n            for (uint j = 0; j < witnesses.length; j++) {\n                if (signedWitnesses[i] == witnesses[j]) {\n                    found = true;\n                    break;\n                }\n            }\n            require(found, \"Signature not appropriate\");\n        }\n\n        return true;\n    }\n\n\n    /* ============ View Functions ============ */\n\n    function getWitnesses() external view returns (address[] memory) {\n        return witnesses;\n    }\n\n    function getProviderHashes() external view returns (string[] memory) {\n        return providerHashes;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _validateProviderHash(string memory _providerHash) internal view returns (bool) {\n        return isProviderHash[_providerHash];\n    }\n    \n    function _validateAndAddNullifier(bytes[] memory _sigArray) internal {\n        bytes32 nullifier = keccak256(abi.encode(_sigArray));\n        require(!nullifierRegistry.isNullified(nullifier), \"Nullifier has already been used\");\n        nullifierRegistry.addNullifier(nullifier);\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/interfaces/IDomainExchange.sol",
    "content": "//SPDX-License-Identifier: MIT\npragma solidity ^0.8.18;\n\n\ninterface IDomainExchange {\n    function registryRemoveListing(uint256 _listingId) external;\n}"
  },
  {
    "path": "contracts-domain/contracts/interfaces/ITransferDomainProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\npragma solidity ^0.8.18;\n\n\ninterface ITransferDomainProcessor {\n\n    struct TransferProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[10] signals;\n    }\n\n    function processProof(\n        TransferProof calldata _proof\n    ) \n        external \n        returns (\n            bytes32 dkimKeyHash, \n            bytes32 hashedReceiverId, \n            string memory domainName, \n            uint256 bidId\n        );\n}"
  },
  {
    "path": "contracts-domain/contracts/interfaces/IVerifiedDomainRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IVerifyDomainProcessor } from \"./IVerifyDomainProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ninterface IVerifiedDomainRegistry {\n\n    struct Domain {\n        address owner;\n        string name;\n        uint256 expiryTime;\n        address exchange;\n        uint256 listingId;\n    }\n\n    struct DomainWithId {\n        bytes32 domainId;\n        Domain domain;\n    }\n\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\n    \n    function getDomainId(string memory _domainName) external pure returns (bytes32);\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\n    \n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\n    function removeDomainListing(bytes32 _domainId) external;\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\n}\n"
  },
  {
    "path": "contracts-domain/contracts/interfaces/IVerifyDomainProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\nimport { IProxyBaseProcessor } from \"../external/interfaces/IProxyBaseProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\n    \n    struct DomainRaw {\n        string name;\n        uint256 expiryTime;\n    }\n\n    function verifyProofs(\n        Proof[] memory _proofs\n    ) \n        external  \n        returns (DomainRaw[] memory domains);\n}"
  },
  {
    "path": "contracts-domain/contracts/mocks/DomainExchangeMock.sol",
    "content": "// SPDX-License-Identifier: MIT\nimport \"../interfaces/IDomainExchange.sol\";\nimport \"../interfaces/IVerifiedDomainRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract DomainExchangeMock is IDomainExchange {\n    \n    mapping(uint256 => bool) public listingActive;\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\n\n    constructor(\n        IVerifiedDomainRegistry _verifiedDomainRegistry\n    ) {\n        verifiedDomainRegistry = _verifiedDomainRegistry;\n    }\n\n    function createListing(bytes32 _domainId, uint256 _listingId) public {\n        listingActive[_listingId] = true;\n        verifiedDomainRegistry.setDomainListing(_domainId, _listingId);\n    }\n\n    function registryRemoveListing(uint256 _listingId) external override {\n        listingActive[_listingId] = false;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/mocks/TransferDomainProcessorMock.sol",
    "content": "// SPDX-License-Identifier: MIT\n\nimport { ITransferDomainProcessor } from \"../interfaces/ITransferDomainProcessor.sol\";\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\n\npragma solidity ^0.8.18;\n\ncontract TransferDomainProcessorMock is ITransferDomainProcessor {\n\n    using StringUtils for uint256;\n\n    /* ============ State Variables ============ */\n    string storedDomainName;\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External Functions ============ */\n\n    function setDomainName(string memory _domainName) external {\n        storedDomainName = _domainName;\n    }\n\n    function processProof(TransferProof memory _proof)\n        external\n        view\n        override\n        returns (bytes32 dkimKeyHash, bytes32 hashedReceiverId, string memory domainName, uint256 bidId)\n    {\n        dkimKeyHash = bytes32(_proof.signals[0]);\n        hashedReceiverId = bytes32(_proof.signals[1]);\n        domainName = storedDomainName;\n        bidId = _proof.signals[3];\n    }\n}\n\n\n"
  },
  {
    "path": "contracts-domain/contracts/mocks/USDCMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\npragma solidity ^0.8.18;\n\ncontract USDCMock is ERC20 {\n\n    constructor(\n        uint256 _mintAmount,\n        string memory name,\n        string memory symbol\n    )\n        ERC20(name, symbol)\n    {\n        _mint(msg.sender, _mintAmount);\n    }\n\n    function decimals() public pure override returns (uint8) {\n        return 6;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/mocks/VerifyDomainProcessorMock.sol",
    "content": "// SPDX-License-Identifier: MIT\n\nimport { ClaimVerifier } from \"../external/ClaimVerifier.sol\";\nimport { StringConversionUtils } from \"../external/lib/StringConversionUtils.sol\";\nimport { TicketmasterDataParsing } from \"../external/TicketmasterDataParsing.sol\";\n\nimport { IVerifyDomainProcessor } from \"../interfaces/IVerifyDomainProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VerifyDomainProcessorMock is IVerifyDomainProcessor {\n\n    using StringConversionUtils for string;\n\n    uint8 constant MAX_EXTRACT_VALUES = 5;\n\n    function verifyProofs(Proof[] memory _proofs)\n        external\n        pure\n        returns (DomainRaw[] memory domains)\n    {\n        domains = new DomainRaw[](_proofs.length);\n\n        for (uint256 i = 0; i < _proofs.length; i++) {\n            domains[i] = DomainRaw({\n                name: string(_proofs[i].signedClaim.signatures[0]),\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \"YYYY-MM-DDTHH:MM:SS\"\n                // and returns UTC timestamps.\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(string(_proofs[i].signedClaim.signatures[1]))\n            });\n        }\n\n        return domains;\n    }\n}\n"
  },
  {
    "path": "contracts-domain/contracts/verifiers/namecheap_transfer_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\n\n\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\n\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\n\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\n\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\n\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\n\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\n\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\n\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\n\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\n\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\n\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, r)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n            checkField(calldataload(add(_pubSignals, 192)))\n\n            checkField(calldataload(add(_pubSignals, 224)))\n\n            checkField(calldataload(add(_pubSignals, 256)))\n\n            checkField(calldataload(add(_pubSignals, 288)))\n\n            checkField(calldataload(add(_pubSignals, 320)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "contracts-domain/deploy/00_deploy_domain_system.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nimport {\n  FROM_EMAIL,\n  SERVER_KEY_HASH,\n  ALLOWED_ADDRESSES,\n  FEE_PERCENTAGE,\n  FEE_RECIPIENT,\n  MULTI_SIG,\n  BID_SETTLEMENT_PERIOD,\n  BID_REFUND_PERIOD,\n  USDC,\n  USDC_MINT_AMOUNT,\n  USDC_RECIPIENT,\n  VERIFY_DOMAIN_PROVIDER_HASHES,\n  VERIFY_DOMAIN_WITNESS\n} from \"../deployments/parameters\";\nimport {\n  addWitness,\n  addWritePermission,\n  getDeployedContractAddress,\n  setNewOwner\n} from \"../deployments/helpers\";\nimport { ZERO, ADDRESS_ZERO } from \"../utils/constants\";\n\n\n// Deployment scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [deployer] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n\n  let usdcAddress;\n  if (!USDC[network]) {\n    const usdcToken = await deploy(\"USDCMock\", {\n      from: deployer,\n      args: [USDC_MINT_AMOUNT, \"USDC\", \"USDC\"],\n    });\n    usdcAddress = usdcToken.address;\n    console.log(\"USDC deployed...\");\n  } else {\n    usdcAddress = USDC[network];\n  }\n\n\n  // Deploy DomainExchange\n  const domainExchange = await deploy(\"DomainExchange\", {\n    from: deployer,\n    args: [\n      deployer,\n      FEE_PERCENTAGE[network],\n      FEE_RECIPIENT[network],\n      BID_SETTLEMENT_PERIOD[network],\n      BID_REFUND_PERIOD[network],\n      ALLOWED_ADDRESSES[network],\n    ],\n  }, { log: true });\n  console.log(\"DomainExchange deployed at\", domainExchange.address);\n\n  // Deploy KeyHashAdapter\n  const keyHashAdapter = await deploy(\"NamecheapManagedKeyHashAdapter\", {\n    contract: \"ManagedKeyHashAdapterV2\",\n    from: deployer,\n    args: [SERVER_KEY_HASH[\"namecheap\"]],\n    log: true\n  }, { log: true });\n  console.log(\"KeyHashAdapter deployed at\", keyHashAdapter.address);\n\n  // Deploy NullifierRegistry\n  const nullifierRegistry = await deploy(\"NullifierRegistry\", {\n    from: deployer,\n    args: [],\n  }, { log: true });\n  console.log(\"Nullifier deployed at\", nullifierRegistry.address);\n\n  // Deploy TransferDomainProcessor\n  const transferDomainProcessor = await deploy(\"TransferDomainProcessor\", {\n    from: deployer,\n    args: [\n      domainExchange.address,\n      nullifierRegistry.address,\n      FROM_EMAIL[\"namecheap\"],\n      ZERO\n    ],\n    log: true\n  });\n  console.log(\"TransferDomainProcessor deployed at\", transferDomainProcessor.address);\n\n  // Deploy ClaimVerifier\n  const claimVerifier = await deploy(\"ClaimVerifier\", {\n    from: deployer,\n    args: [],\n  }, { log: true });\n  console.log(\"ClaimVerifier deployed at\", claimVerifier.address);\n\n  // Deploy VerifiedDomainRegistry\n  const verifiedDomainRegistry = await deploy(\"VerifiedDomainRegistry\", {\n    from: deployer,\n    args: [],\n  }, { log: true });\n  console.log(\"VerifiedDomainRegistry deployed at\", verifiedDomainRegistry.address);\n\n  // Deploy VerifyDomainProcessor\n  const verifyDomainProcessor = await deploy(\"VerifyDomainProcessor\", {\n    from: deployer,\n    libraries: {\n      ClaimVerifier: claimVerifier.address,\n    },\n    args: [\n      verifiedDomainRegistry.address,\n      nullifierRegistry.address,\n      VERIFY_DOMAIN_PROVIDER_HASHES\n    ],\n  }, { log: true });\n  console.log(\"VerifyDomainProcessor deployed at\", verifyDomainProcessor.address);\n  console.log(\"processors deployed...\");\n\n\n  // Initialize VerifiedDomainRegistry\n  const verifiedDomainRegistryContract = await ethers.getContractAt(\"VerifiedDomainRegistry\", verifiedDomainRegistry.address);\n  if (!(await verifiedDomainRegistryContract.isInitialized())) {\n    await hre.deployments.rawTx(\n      {\n        from: deployer,\n        to: verifiedDomainRegistryContract.address,\n        data: verifiedDomainRegistryContract.interface.encodeFunctionData(\n          \"initialize\",\n          [\n            verifyDomainProcessor.address\n          ]\n        )\n      }\n    )\n  }\n\n  // Initialize DomainExchange\n  const exchangeContract = await ethers.getContractAt(\"DomainExchange\", domainExchange.address)\n  if (!(await exchangeContract.isInitialized())) {\n    await hre.deployments.rawTx(\n      {\n        from: deployer,\n        to: exchangeContract.address,\n        data: exchangeContract.interface.encodeFunctionData(\n          \"initialize\",\n          [\n            transferDomainProcessor.address,\n            verifiedDomainRegistry.address,\n            keyHashAdapter.address\n          ]\n        )\n      }\n    )\n  }\n\n  // Disable allow list; Domain trading has no restrictions on who can sell\n  const isEnabled = await exchangeContract.isEnabled();\n  if (isEnabled) {\n    await hre.deployments.rawTx(\n      {\n        from: deployer,\n        to: exchangeContract.address,\n        data: exchangeContract.interface.encodeFunctionData(\"disableAllowlist\")\n      }\n    )\n  }\n\n  // Add NullifierRegistry permissions\n  const nullifierRegistryContract = await ethers.getContractAt(\"NullifierRegistry\", nullifierRegistry.address);\n  await addWritePermission(hre, nullifierRegistryContract, transferDomainProcessor.address);\n  await addWritePermission(hre, nullifierRegistryContract, verifyDomainProcessor.address);\n  console.log(\"NullifierRegistry permissions added\");\n\n  if (network == \"goerli\") {\n    const usdcContract = await ethers.getContractAt(\"USDCMock\", usdcAddress);\n    await usdcContract.transfer(USDC_RECIPIENT, USDC_MINT_AMOUNT);\n  }\n\n  // Add exchange to VerifiedDomainRegistry\n  const isExchange = await verifiedDomainRegistryContract.isExchange(domainExchange.address);\n  if (!isExchange) {\n    await verifiedDomainRegistryContract.addExchange(domainExchange.address);\n  }\n\n  // Add witnesses to VerifyDomainProcessor\n  const verifyDomainProcessorContract = await ethers.getContractAt(\"VerifyDomainProcessor\", verifyDomainProcessor.address);\n  await addWitness(hre, verifyDomainProcessorContract, VERIFY_DOMAIN_WITNESS[network]);\n\n  console.log(\"Transferring ownership of contracts...\");\n  await setNewOwner(hre, domainExchange.address, multiSig);\n  await setNewOwner(hre, keyHashAdapter.address, multiSig);\n  await setNewOwner(hre, nullifierRegistry.address, multiSig);\n  await setNewOwner(hre, transferDomainProcessor.address, multiSig);\n  await setNewOwner(hre, verifyDomainProcessor.address, multiSig);\n  await setNewOwner(hre, verifiedDomainRegistry.address, multiSig);\n  console.log(\"Ownership transferred\");\n}\n\nfunc.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> => {\n  const network = hre.network.name;\n  if (network != \"localhost\") {\n    try { getDeployedContractAddress(hre.network.name, \"Ramp\") } catch (e) { return false; }\n    return true;\n  }\n  return false;\n};\n\nexport default func;\n"
  },
  {
    "path": "contracts-domain/deploy/deployment_summary.ts",
    "content": "import \"module-alias/register\";\nimport \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nimport {\n  MULTI_SIG,\n} from \"../deployments/parameters\";\nimport { getDeployedContractAddress } from \"../deployments/helpers\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [deployer] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n\n  console.log(\n    `\n    Deploment summary for ${network}:\n    deployer:                   ${deployer}\n    deployer nonce:             ${await hre.ethers.provider.getTransactionCount(deployer)}\n    multiSig:                   ${multiSig}\n    multiSig nonce:             ${await hre.ethers.provider.getTransactionCount(multiSig)}\n    ----------------------------------------------------------------------\n    DomainExchange:                       ${getDeployedContractAddress(network, \"DomainExchange\")}\n    ClaimVerifier:                        ${getDeployedContractAddress(network, \"ClaimVerifier\")}\n    VerifyDomainProcessor:                ${getDeployedContractAddress(network, \"VerifyDomainProcessor\")}\n    TransferDomainProcessor:              ${getDeployedContractAddress(network, \"TransferDomainProcessor\")}\n    VerifiedDomainRegistry:               ${getDeployedContractAddress(network, \"VerifiedDomainRegistry\")}\n    NamecheapManagedKeyHashAdapter:       ${getDeployedContractAddress(network, \"NamecheapManagedKeyHashAdapter\")}\n    NullifierRegistry:                    ${getDeployedContractAddress(network, \"NullifierRegistry\")}\n    `\n  );\n};\n\nfunc.runAtTheEnd = true;\n\nexport default func;\n"
  },
  {
    "path": "contracts-domain/deployments/base/.chainId",
    "content": "8453"
  },
  {
    "path": "contracts-domain/deployments/base/ClaimVerifier.json",
    "content": "{\n  \"address\": \"0xBA4D6eA209c3C3A6B0B31fE136a5F0eFd9De2bd1\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"maxValues\",\n          \"type\": \"uint8\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"extractProviderHash\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"extractAllFromContext\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"prefix\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"extractFieldFromContext\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"target\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"findSubstringEndIndex\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xa29d815c30056554ec350f161871f155852dc037938a23f34bdc0512ff81247d\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xBA4D6eA209c3C3A6B0B31fE136a5F0eFd9De2bd1\",\n    \"transactionIndex\": 156,\n    \"gasUsed\": \"925596\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x43d042dbcf4f32f39f82485636e51004504745ec16ca36a7f36c97561070eebe\",\n    \"transactionHash\": \"0xa29d815c30056554ec350f161871f155852dc037938a23f34bdc0512ff81247d\",\n    \"logs\": [],\n    \"blockNumber\": 20166833,\n    \"cumulativeGasUsed\": \"28338547\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"maxValues\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"extractProviderHash\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"extractAllFromContext\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"prefix\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"extractFieldFromContext\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"findSubstringEndIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"extractAllFromContext(string,uint8,bool)\\\":{\\\"params\\\":{\\\"data\\\":\\\"Context string from which target value needs to be extracted\\\",\\\"extractProviderHash\\\":\\\"Extracts and returns providerHash if true\\\",\\\"maxValues\\\":\\\"Maximum number of values to be extracted from extractedParameters\\\"}},\\\"extractFieldFromContext(string,string)\\\":{\\\"params\\\":{\\\"data\\\":\\\"Context string from which target value needs to be extracted\\\",\\\"prefix\\\":\\\"Prefix of the target value that needs to be extracted            \\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"extractAllFromContext(string,uint8,bool)\\\":{\\\"notice\\\":\\\"Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with  two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with  key-value pairs. This function returns extracted individual values from extractedParameters along  with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values to be extracted from extractedParameters. In most cases, one would need to extract all values from extractedParameters and providerHash, hence use this function over calling extractFieldFromContext  multiple times. \\\"},\\\"extractFieldFromContext(string,string)\\\":{\\\"notice\\\":\\\"Extracts given target field value from context in claims. Extracts only ONE value. Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"' Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\"},\\\"findSubstringEndIndex(string,string)\\\":{\\\"notice\\\":\\\"Find the end index of target string in the data string. Returns the end index + 1 if the target string in the data string if found. Returns type(uint256).max if: - Target is longer than data - Target is not found Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/ClaimVerifier.sol\\\":\\\"ClaimVerifier\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ClaimVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary ClaimVerifier {\\\\n\\\\n    /**\\\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\\\n     * the target string in the data string if found. Returns type(uint256).max if:\\\\n     * - Target is longer than data\\\\n     * - Target is not found\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     */\\\\n    function findSubstringEndIndex(\\\\n        string memory data,\\\\n        string memory target\\\\n    ) public pure returns (uint256) {\\\\n        bytes memory dataBytes = bytes(data);\\\\n        bytes memory targetBytes = bytes(target);\\\\n\\\\n        if (dataBytes.length < targetBytes.length) {\\\\n            return type(uint256).max;\\\\n        }\\\\n\\\\n        // Find start of target\\\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\\\n            bool isMatch = true;\\\\n\\\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\\\n                if (dataBytes[i + j] != targetBytes[j]) {\\\\n                    isMatch = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n\\\\n            if (isMatch) {\\\\n                return i + targetBytes.length; // Return end index + 1\\\\n            }\\\\n        }\\\\n\\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    /**\\\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\\\n     * Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"'\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *\\\\n     * @param data      Context string from which target value needs to be extracted\\\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\\\n     */\\\\n    function extractFieldFromContext(\\\\n        string memory data,\\\\n        string memory prefix\\\\n    ) public pure returns (string memory) {\\\\n        // Find end index of prefix; which is the start index of the value\\\\n        uint256 start = findSubstringEndIndex(data, prefix);\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        if (start == dataBytes.length) {\\\\n            return \\\\\\\"\\\\\\\"; // Prefix not found. Malformed or missing message\\\\n        }\\\\n        \\\\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\\\n        uint256 end = start;\\\\n        while (\\\\n            end < dataBytes.length &&\\\\n            !(dataBytes[end] == '\\\\\\\"' && dataBytes[end - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")\\\\n        ) {\\\\n            end++;\\\\n        }\\\\n        if (end <= start) {\\\\n            return \\\\\\\"\\\\\\\"; // Malformed or missing message\\\\n        }\\\\n        bytes memory contextMessage = new bytes(end - start);\\\\n        for (uint i = start; i < end; i++) {\\\\n            contextMessage[i - start] = dataBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\\\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\\\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\\\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\\\n     * multiple times.\\\\n     * \\\\n     * @param data                  Context string from which target value needs to be extracted\\\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\\\n     */\\\\n    function extractAllFromContext(\\\\n        string memory data,\\\\n        uint8 maxValues,\\\\n        bool extractProviderHash\\\\n    ) public pure returns (string[] memory) {\\\\n        \\\\n        require(maxValues > 0, \\\\\\\"Max values must be greater than 0\\\\\\\");\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        uint index = 0;\\\\n\\\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"');\\\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\\\\\"Extraction failed. Malformed extractedParameters\\\\\\\");\\\\n        }\\\\n        index += extractedParametersBytes.length;\\\\n\\\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"'\\\\n        uint valuesFound = 0;\\\\n    \\\\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\\\n\\\\n        while (\\\\n            index < dataBytes.length\\\\n        ) {\\\\n            // Keep incrementing until '\\\\\\\"', escaped quotes are not considered\\\\n            if (!(dataBytes[index] == '\\\\\\\"' && dataBytes[index - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")) {\\\\n                index++;\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isValue) {\\\\n                // \\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\" (3 chars)\\\\n                require(dataBytes[index + 1] == \\\\\\\":\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"', \\\\\\\"Extraction failed. Malformed data 1\\\\\\\");\\\\n                index += 3;     // move it after \\\\\\\\\\\\\\\"\\\\n                isValue = true;\\\\n                valueIndices[2 * valuesFound] = index;      // start index\\\\n            } else {\\\\n                // \\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\" (3 chars) or \\\\\\\\\\\\\\\"}, (3 chars)\\\\n                // \\\\\\\\\\\\\\\"}} is not supported, there should always be a providerHash\\\\n                require(\\\\n                    dataBytes[index + 1] == \\\\\\\",\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"' ||  \\\\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\\\\\",\\\\\\\",\\\\n                    \\\\\\\"Extraction failed. Malformed data 2\\\\\\\"\\\\n                );\\\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\\\n                valuesFound++;\\\\n\\\\n                if (dataBytes[index + 1] == \\\\\\\",\\\\\\\") {\\\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\\\n                    require(valuesFound != maxValues, \\\\\\\"Extraction failed. Exceeded max values\\\\\\\");\\\\n                    index += 3;\\\\n                    isValue = false;\\\\n                } else {    // index + 1 = \\\\\\\"}\\\\\\\"\\\\n                    index += 3;\\\\n                    break;  // end of extractedParameters\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        if (extractProviderHash) {\\\\n            bytes memory providerHashParamBytes = bytes(\\\\\\\"\\\\\\\\\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"\\\\\\\");\\\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\\\\\"Extraction failed. Malformed providerHash\\\\\\\");\\\\n            }\\\\n            index += providerHashParamBytes.length;\\\\n            \\\\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\\\n            valueIndices[2 * valuesFound] = index;\\\\n            // Keep incrementing until '\\\\\\\"'\\\\n            while (\\\\n                index < dataBytes.length && dataBytes[index] != '\\\\\\\"'\\\\n            ) {\\\\n                index++;\\\\n            }\\\\n            valueIndices[2 * valuesFound + 1] = index;\\\\n            valuesFound++;\\\\n        }   \\\\n        \\\\n        string[] memory values = new string[](valuesFound);\\\\n        \\\\n        for (uint i = 0; i < valuesFound; i++) {\\\\n            uint startIndex = valueIndices[2 * i];\\\\n            uint endIndex = valueIndices[2 * i + 1];\\\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\\\n            for (uint j = startIndex; j < endIndex; j++) {\\\\n                contextValue[j - startIndex] = dataBytes[j];\\\\n            }\\\\n            values[i] = string(contextValue);\\\\n        }\\\\n\\\\n        return values;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6a8d456c3b2c5ab5a475279a2f0f103faff3cb2d6abb2ce2029cd4265b904e\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523461001e57604051610fc4610024823930815050610fc490f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80633755667e146100425780634be6d4f81461003d57634da485c6036100f65761030c565b6102e9565b6101ca565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761007f57604052565b610047565b9061009861009160405190565b928361005d565b565b67ffffffffffffffff811161007f57602090601f01601f19160190565b0190565b90826000939282370152565b909291926100dc6100d78261009a565b610084565b938185526020850190828401116100f657610098926100bb565b600080fd5b9080601f830112156100f657816020610116933591016100c7565b90565b9190916040818403126100f657803567ffffffffffffffff81116100f657836101439183016100fb565b92602082013567ffffffffffffffff81116100f65761011692016100fb565b60005b8381106101755750506000910152565b8181015183820152602001610165565b6101a66101af6020936100b79361019a815190565b80835293849260200190565b95869101610162565b601f01601f191690565b602080825261011692910190610185565b6101ed6101e16101db366004610119565b9061054f565b604051918291826101b9565b0390f35b60ff81165b036100f657565b90503590610098826101f1565b8015156101f6565b905035906100988261020a565b90916060828403126100f657813567ffffffffffffffff81116100f65761024b846101169285016100fb565b9361025981602086016101fd565b93604001610212565b9061011691610185565b90610282610278835190565b8083529160200190565b90816102946020830284019460200190565b926000915b8383106102a857505050505090565b909192939460206102cb6102c483856001950387528951610262565b9760200190565b9301930191939290610299565b60208082526101169291019061026c565b6101ed6103006102fa36600461021f565b91610a12565b604051918291826102d8565b6101ed61032361031d366004610119565b906103bf565b6040519182918290815260200190565b6101166101166101169290565b634e487b7160e01b600052601160045260246000fd5b60001981146103655760010190565b610340565b9190610375565b9290565b820391821161036557565b9190820180921161036557565b634e487b7160e01b600052603260045260246000fd5b906103ac825190565b8110156103ba570160200190565b61038d565b6103d26103d6916103ce600090565b5090565b9190565b81516103e66103d2610116845190565b106104fb576000916103f783610333565b61040d610116610405845190565b85519061036a565b81116104f4576001808061042087610333565b905b61044b575b505061043b5761043690610356565b6103f7565b9151610116935090505b90610380565b61045c610116879894969395985190565b8110806104ed575b156104e25761048d61047f610479838a610380565b846103a3565b516001600160f81b03191690565b6104bb6104ad6104a061047f858b6103a3565b6001600160f81b03191690565b916001600160f81b03191690565b036104d4576104c990610356565b839194929693610422565b509250809491503880610427565b819492969350610427565b5084610464565b5050501990565b505060001990565b906105106100d78361009a565b918252565b6101166000610503565b610116610515565b369037565b9061009861054261053c84610503565b9361009a565b601f190160208401610527565b919061037161056791610560606090565b50846103bf565b90610573610116835190565b831461067f57825b610586610116845190565b811080610619575b156105a15761059c90610356565b61057b565b918383111561060d576105bc6105b7858561036a565b61052c565b91845b845b811015610601576105fa816105dc61047f6105c194876103a3565b6105f46105e98a8461036a565b9160001a91886103a3565b53610356565b90506105bf565b50935050610116915090565b5091505061011661051f565b5061062761047f82856103a3565b610634601160f91b6104ad565b1480610646575b1561058e565b61058e565b5061064161066961047f61066361065d6001610333565b8561036a565b866103a3565b610676601760fa1b6104ad565b1415905061063b565b91505061011661051f565b6106976101166101169290565b60ff1690565b156106a457565b60405162461bcd60e51b815260206004820152602160248201527f4d61782076616c756573206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b6106fd6019610503565b7f7b22657874726163746564506172616d6574657273223a7b2200000000000000602082015290565b6101166106f3565b1561073557565b60405162461bcd60e51b815260206004820152603060248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642065787460448201526f726163746564506172616d657465727360801b6064820152608490fd5b6107a29060ff165b9160ff1690565b029060ff821691820361036557565b6107bd9060ff1661079b565b019060ff821161036557565b6101166101166101169260ff1690565b67ffffffffffffffff811161007f5760208091020190565b906105106100d7836107d9565b9061009861054261080e846107f1565b936107d9565b1561081b57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526230901960e91b6064820152608490fd5b8181029291811591840414171561036557565b90610888825190565b8110156103ba576020809102010190565b156108a057565b60405162461bcd60e51b815260206004820152602660248201527f45787472616374696f6e206661696c65642e204578636565646564206d61782060448201526576616c75657360d01b6064820152608490fd5b156108fb57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526261203160e81b6064820152608490fd5b6109566010610503565b6f11383937bb34b232b92430b9b4111d1160811b602082015290565b61011661094c565b1561098157565b60405162461bcd60e51b815260206004820152602960248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642070726f6044820152680ecd2c8cae490c2e6d60bb1b6064820152608490fd5b60005b8281106109e757505050565b6060828201526020016109db565b90610098610a0561080e846107f1565b601f1901602084016109d8565b90610a2f600092610116610a258561068a565b60ff85161161069d565b93610a3983610333565b91610a42610726565b93835b610a50610116875190565b811015610a975780610a8d610a7461047f610a6e610a92958a610380565b8c6103a3565b610a876104ad6104a061047f868d6103a3565b1461072e565b610356565b610a45565b5092610445610aa99295979693975190565b918093610ab582610333565b968315610f7a57610af2610aed610ae86002610ae3610add610ad7600161068a565b886107b1565b9161068a565b610793565b6107c9565b6107fe565b955b610aff610116895190565b861015610f6c57610b1361047f878a6103a3565b610b20601160f91b6104ad565b1480610f39575b155b610f2957610bd757610b7c600195610b5561047f610b4f610b498a610333565b84610380565b8b6103a3565b610b62601d60f91b6104ad565b1480610ba5575b610b72906108f4565b6104456003610333565b94610ba086610b9d610b978c610b926002610333565b61086c565b8a61087f565b52565b610af4565b50610b72610bc261047f610a6e610bbc6002610333565b85610380565b610bcf601160f91b6104ad565b149050610b69565b93610c42600198610bf661047f610b4f610bf08d610333565b86610380565b610c03600b60fa1b6104ad565b1480610f02575b8015610ea9575b610c1a90610814565b610a8d83610b9d610c3c8d610445610c3687610b926002610333565b91610333565b8b61087f565b610c5b61047f610c55610bbc849c610333565b8a6103a3565b610c68600b60fa1b6104ad565b03610c8f5790610b72610c8892610c816103d2866107c9565b1415610899565b9382610af4565b50610ca7915061044560039897969598949394610333565b905b610d9d575b50610cb8846109f5565b94610cc282610333565b855b811015610d95576002610cf182610b92610ceb610ce7610b9784610b9288610333565b5190565b93610333565b610d0c610ce7610d0660019361044585610333565b8861087f565b91610d1a6105b7828561036a565b9281835b610d57575b50505050610cc491610d35610d509290565b610d3f828b61087f565b52610d4a818a61087f565b50610356565b9050610cc2565b8982821015610d8f5781610d7261047f8794610d89946103a3565b6105f4610d7f878461036a565b918c1a91896103a3565b90610d1e565b50610d23565b509350505050565b91949093610da9610972565b94610db381610333565b610dbe610116885190565b811015610e035780610a8d88610df86104ad6104a061047f86610df261047f8f8f610dfe9c610dec91610380565b906103a3565b956103a3565b1461097a565b610db3565b509392610445610e1592969793975190565b9384610e33600296610b9d610e2d85610b928b610333565b8661087f565b610e3e610116855190565b811080610e87575b15610e5957610e5490610356565b610e33565b610a8d90610b9d610e2d610e7685610b92610e8098999a9b610333565b6104456001610333565b9238610cae565b50610e9561047f82866103a3565b610ea2601160f91b6104ad565b1415610e46565b50610ebc61047f610b4f610bf08d610333565b610ec9607d60f81b6104ad565b148015610c115750610c1a610eed61047f610a6e610ee76002610333565b87610380565b610efa600b60fa1b6104ad565b149050610c11565b50610f1661047f610b4f610bf06002610333565b610f23601160f91b6104ad565b14610c0a565b94610f3390610356565b94610af4565b50610b29610f5661047f610b4f610f506001610333565b8a61036a565b610f63601760fa1b6104ad565b14159050610b27565b509695949391929050610ca9565b610af2610aed610ae884610ae3600261068a56fea2646970667358221220df8afdb50247b87e32995ce364cdd9d06fd8e2da0fc4e9ccb71b755e2d49a76864736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80633755667e146100425780634be6d4f81461003d57634da485c6036100f65761030c565b6102e9565b6101ca565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761007f57604052565b610047565b9061009861009160405190565b928361005d565b565b67ffffffffffffffff811161007f57602090601f01601f19160190565b0190565b90826000939282370152565b909291926100dc6100d78261009a565b610084565b938185526020850190828401116100f657610098926100bb565b600080fd5b9080601f830112156100f657816020610116933591016100c7565b90565b9190916040818403126100f657803567ffffffffffffffff81116100f657836101439183016100fb565b92602082013567ffffffffffffffff81116100f65761011692016100fb565b60005b8381106101755750506000910152565b8181015183820152602001610165565b6101a66101af6020936100b79361019a815190565b80835293849260200190565b95869101610162565b601f01601f191690565b602080825261011692910190610185565b6101ed6101e16101db366004610119565b9061054f565b604051918291826101b9565b0390f35b60ff81165b036100f657565b90503590610098826101f1565b8015156101f6565b905035906100988261020a565b90916060828403126100f657813567ffffffffffffffff81116100f65761024b846101169285016100fb565b9361025981602086016101fd565b93604001610212565b9061011691610185565b90610282610278835190565b8083529160200190565b90816102946020830284019460200190565b926000915b8383106102a857505050505090565b909192939460206102cb6102c483856001950387528951610262565b9760200190565b9301930191939290610299565b60208082526101169291019061026c565b6101ed6103006102fa36600461021f565b91610a12565b604051918291826102d8565b6101ed61032361031d366004610119565b906103bf565b6040519182918290815260200190565b6101166101166101169290565b634e487b7160e01b600052601160045260246000fd5b60001981146103655760010190565b610340565b9190610375565b9290565b820391821161036557565b9190820180921161036557565b634e487b7160e01b600052603260045260246000fd5b906103ac825190565b8110156103ba570160200190565b61038d565b6103d26103d6916103ce600090565b5090565b9190565b81516103e66103d2610116845190565b106104fb576000916103f783610333565b61040d610116610405845190565b85519061036a565b81116104f4576001808061042087610333565b905b61044b575b505061043b5761043690610356565b6103f7565b9151610116935090505b90610380565b61045c610116879894969395985190565b8110806104ed575b156104e25761048d61047f610479838a610380565b846103a3565b516001600160f81b03191690565b6104bb6104ad6104a061047f858b6103a3565b6001600160f81b03191690565b916001600160f81b03191690565b036104d4576104c990610356565b839194929693610422565b509250809491503880610427565b819492969350610427565b5084610464565b5050501990565b505060001990565b906105106100d78361009a565b918252565b6101166000610503565b610116610515565b369037565b9061009861054261053c84610503565b9361009a565b601f190160208401610527565b919061037161056791610560606090565b50846103bf565b90610573610116835190565b831461067f57825b610586610116845190565b811080610619575b156105a15761059c90610356565b61057b565b918383111561060d576105bc6105b7858561036a565b61052c565b91845b845b811015610601576105fa816105dc61047f6105c194876103a3565b6105f46105e98a8461036a565b9160001a91886103a3565b53610356565b90506105bf565b50935050610116915090565b5091505061011661051f565b5061062761047f82856103a3565b610634601160f91b6104ad565b1480610646575b1561058e565b61058e565b5061064161066961047f61066361065d6001610333565b8561036a565b866103a3565b610676601760fa1b6104ad565b1415905061063b565b91505061011661051f565b6106976101166101169290565b60ff1690565b156106a457565b60405162461bcd60e51b815260206004820152602160248201527f4d61782076616c756573206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b6106fd6019610503565b7f7b22657874726163746564506172616d6574657273223a7b2200000000000000602082015290565b6101166106f3565b1561073557565b60405162461bcd60e51b815260206004820152603060248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642065787460448201526f726163746564506172616d657465727360801b6064820152608490fd5b6107a29060ff165b9160ff1690565b029060ff821691820361036557565b6107bd9060ff1661079b565b019060ff821161036557565b6101166101166101169260ff1690565b67ffffffffffffffff811161007f5760208091020190565b906105106100d7836107d9565b9061009861054261080e846107f1565b936107d9565b1561081b57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526230901960e91b6064820152608490fd5b8181029291811591840414171561036557565b90610888825190565b8110156103ba576020809102010190565b156108a057565b60405162461bcd60e51b815260206004820152602660248201527f45787472616374696f6e206661696c65642e204578636565646564206d61782060448201526576616c75657360d01b6064820152608490fd5b156108fb57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526261203160e81b6064820152608490fd5b6109566010610503565b6f11383937bb34b232b92430b9b4111d1160811b602082015290565b61011661094c565b1561098157565b60405162461bcd60e51b815260206004820152602960248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642070726f6044820152680ecd2c8cae490c2e6d60bb1b6064820152608490fd5b60005b8281106109e757505050565b6060828201526020016109db565b90610098610a0561080e846107f1565b601f1901602084016109d8565b90610a2f600092610116610a258561068a565b60ff85161161069d565b93610a3983610333565b91610a42610726565b93835b610a50610116875190565b811015610a975780610a8d610a7461047f610a6e610a92958a610380565b8c6103a3565b610a876104ad6104a061047f868d6103a3565b1461072e565b610356565b610a45565b5092610445610aa99295979693975190565b918093610ab582610333565b968315610f7a57610af2610aed610ae86002610ae3610add610ad7600161068a565b886107b1565b9161068a565b610793565b6107c9565b6107fe565b955b610aff610116895190565b861015610f6c57610b1361047f878a6103a3565b610b20601160f91b6104ad565b1480610f39575b155b610f2957610bd757610b7c600195610b5561047f610b4f610b498a610333565b84610380565b8b6103a3565b610b62601d60f91b6104ad565b1480610ba5575b610b72906108f4565b6104456003610333565b94610ba086610b9d610b978c610b926002610333565b61086c565b8a61087f565b52565b610af4565b50610b72610bc261047f610a6e610bbc6002610333565b85610380565b610bcf601160f91b6104ad565b149050610b69565b93610c42600198610bf661047f610b4f610bf08d610333565b86610380565b610c03600b60fa1b6104ad565b1480610f02575b8015610ea9575b610c1a90610814565b610a8d83610b9d610c3c8d610445610c3687610b926002610333565b91610333565b8b61087f565b610c5b61047f610c55610bbc849c610333565b8a6103a3565b610c68600b60fa1b6104ad565b03610c8f5790610b72610c8892610c816103d2866107c9565b1415610899565b9382610af4565b50610ca7915061044560039897969598949394610333565b905b610d9d575b50610cb8846109f5565b94610cc282610333565b855b811015610d95576002610cf182610b92610ceb610ce7610b9784610b9288610333565b5190565b93610333565b610d0c610ce7610d0660019361044585610333565b8861087f565b91610d1a6105b7828561036a565b9281835b610d57575b50505050610cc491610d35610d509290565b610d3f828b61087f565b52610d4a818a61087f565b50610356565b9050610cc2565b8982821015610d8f5781610d7261047f8794610d89946103a3565b6105f4610d7f878461036a565b918c1a91896103a3565b90610d1e565b50610d23565b509350505050565b91949093610da9610972565b94610db381610333565b610dbe610116885190565b811015610e035780610a8d88610df86104ad6104a061047f86610df261047f8f8f610dfe9c610dec91610380565b906103a3565b956103a3565b1461097a565b610db3565b509392610445610e1592969793975190565b9384610e33600296610b9d610e2d85610b928b610333565b8661087f565b610e3e610116855190565b811080610e87575b15610e5957610e5490610356565b610e33565b610a8d90610b9d610e2d610e7685610b92610e8098999a9b610333565b6104456001610333565b9238610cae565b50610e9561047f82866103a3565b610ea2601160f91b6104ad565b1415610e46565b50610ebc61047f610b4f610bf08d610333565b610ec9607d60f81b6104ad565b148015610c115750610c1a610eed61047f610a6e610ee76002610333565b87610380565b610efa600b60fa1b6104ad565b149050610c11565b50610f1661047f610b4f610bf06002610333565b610f23601160f91b6104ad565b14610c0a565b94610f3390610356565b94610af4565b50610b29610f5661047f610b4f610f506001610333565b8a61036a565b610f63601760fa1b6104ad565b14159050610b27565b509695949391929050610ca9565b610af2610aed610ae884610ae3600261068a56fea2646970667358221220df8afdb50247b87e32995ce364cdd9d06fd8e2da0fc4e9ccb71b755e2d49a76864736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"extractAllFromContext(string,uint8,bool)\": {\n        \"params\": {\n          \"data\": \"Context string from which target value needs to be extracted\",\n          \"extractProviderHash\": \"Extracts and returns providerHash if true\",\n          \"maxValues\": \"Maximum number of values to be extracted from extractedParameters\"\n        }\n      },\n      \"extractFieldFromContext(string,string)\": {\n        \"params\": {\n          \"data\": \"Context string from which target value needs to be extracted\",\n          \"prefix\": \"Prefix of the target value that needs to be extracted            \"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"extractAllFromContext(string,uint8,bool)\": {\n        \"notice\": \"Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with  two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with  key-value pairs. This function returns extracted individual values from extractedParameters along  with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values to be extracted from extractedParameters. In most cases, one would need to extract all values from extractedParameters and providerHash, hence use this function over calling extractFieldFromContext  multiple times. \"\n      },\n      \"extractFieldFromContext(string,string)\": {\n        \"notice\": \"Extracts given target field value from context in claims. Extracts only ONE value. Pass prefix formatted with quotes, for example '\\\"providerHash\\\\\\\":\\\\\\\"' Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\"\n      },\n      \"findSubstringEndIndex(string,string)\": {\n        \"notice\": \"Find the end index of target string in the data string. Returns the end index + 1 if the target string in the data string if found. Returns type(uint256).max if: - Target is longer than data - Target is not found Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [],\n    \"types\": null\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/DomainExchange.json",
    "content": "{\n  \"address\": \"0x054be4cFB6e951A7dE921A179FA323c5ea3fCf47\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidSettlementPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidRefundPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_allowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"allowedAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressAddedToAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"allowedAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressRemovedFromAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"AllowlistDisabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"AllowlistEnabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"price\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newPrice\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidPriceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newBidRefundPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidRefundPeriodUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newBidSettlementPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidSettlementPeriodUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"FeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newFee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"FeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"instantAccept\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"InstantAcceptUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingDeleted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ListingDeletedByRegistry\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newAskPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"newMailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdapterUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RefundInitiated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"priceNetFees\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fees\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SaleFinalized\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"newTransferDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"TransferDomainProcessorUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_allowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"name\": \"addAddressesToAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"allowedAddresses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidRefundPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidSettlementPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"bids\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"encryptedBuyerId\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"buyerIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"createdAt\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTimestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"price\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"refundInitiated\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"buyerReleaseFunds\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_buyerIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_encryptedBuyerId\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"createBid\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_saleEthRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_encryptionKey\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_dkimKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"createListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deleteListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"disableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"disableInstantAccept\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableInstantAccept\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"fee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"feeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"finalizeSale\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAllowedSellers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_listingIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getListingBids\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"buyer\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"encryptedBuyerId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"buyerIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTimestamp\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"price\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"refundInitiated\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Bid\",\n              \"name\": \"bid\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"buyerInstantAcceptEnabled\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.BidDetailsWithId[][]\",\n          \"name\": \"bidInfo\",\n          \"type\": \"tuple[][]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_listingIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getListings\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"seller\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address payable\",\n                  \"name\": \"saleEthRecipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"dkimKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"encryptionKey\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"askPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"minBidPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"isActive\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"bids\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Listing\",\n              \"name\": \"listing\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n          \"name\": \"listingInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserBids\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"buyer\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"encryptedBuyerId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"buyerIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTimestamp\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"price\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"refundInitiated\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Bid\",\n              \"name\": \"bid\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"buyerInstantAcceptEnabled\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.BidDetailsWithId[]\",\n          \"name\": \"bidInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserListings\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"seller\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address payable\",\n                  \"name\": \"saleEthRecipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"dkimKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"encryptionKey\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"askPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"minBidPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"isActive\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"bids\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Listing\",\n              \"name\": \"listing\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n          \"name\": \"listingInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newPrice\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseBidPrice\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"_transferDomainProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IVerifiedDomainRegistry\",\n          \"name\": \"_verifiedDomainRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"initiateRefund\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"instantAcceptEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isAllowed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"listingCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"listings\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"encryptionKey\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"createdAt\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"isActive\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pauseMarketplace\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"registryRemoveListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_disallowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"name\": \"removeAddressesFromAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"transferDomainProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unpauseMarketplace\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newBidRefundPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateBidRefundPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newBidSettlementPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateBidSettlementPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newFee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_newFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newAskPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateMailServerKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"_transferDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateTransferDomainProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userBids\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userListings\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifiedDomainRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IVerifiedDomainRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"withdrawBid\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc81076859575e189614ebfe3a69229523356c7b0de46c59cd74c7d6c63ad0fd4\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x054be4cFB6e951A7dE921A179FA323c5ea3fCf47\",\n    \"transactionIndex\": 144,\n    \"gasUsed\": \"4978167\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xa9e2be9efee8352b0f759e7d03862e742f88456b8fa423de05282825378584d1\",\n    \"transactionHash\": \"0xc81076859575e189614ebfe3a69229523356c7b0de46c59cd74c7d6c63ad0fd4\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 144,\n        \"blockNumber\": 20166816,\n        \"transactionHash\": \"0xc81076859575e189614ebfe3a69229523356c7b0de46c59cd74c7d6c63ad0fd4\",\n        \"address\": \"0x054be4cFB6e951A7dE921A179FA323c5ea3fCf47\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 467,\n        \"blockHash\": \"0xa9e2be9efee8352b0f759e7d03862e742f88456b8fa423de05282825378584d1\"\n      },\n      {\n        \"transactionIndex\": 144,\n        \"blockNumber\": 20166816,\n        \"transactionHash\": \"0xc81076859575e189614ebfe3a69229523356c7b0de46c59cd74c7d6c63ad0fd4\",\n        \"address\": \"0x054be4cFB6e951A7dE921A179FA323c5ea3fCf47\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 468,\n        \"blockHash\": \"0xa9e2be9efee8352b0f759e7d03862e742f88456b8fa423de05282825378584d1\"\n      }\n    ],\n    \"blockNumber\": 20166816,\n    \"cumulativeGasUsed\": \"29046575\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"25000000000000000\",\n    \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n    \"1800\",\n    \"1800\",\n    []\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_allowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"allowedAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressAddedToAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"allowedAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressRemovedFromAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"AllowlistDisabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"AllowlistEnabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidCreated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidPriceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newBidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidRefundPeriodUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newBidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidSettlementPeriodUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"FeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newFee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"FeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"instantAccept\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"InstantAcceptUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingCreated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingDeleted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ListingDeletedByRegistry\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAskPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"newMailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdapterUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Paused\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"RefundInitiated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"priceNetFees\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fees\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SaleFinalized\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"newTransferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"TransferDomainProcessorUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Unpaused\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_allowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"addAddressesToAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"allowedAddresses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidRefundPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidSettlementPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"bids\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"buyerReleaseFunds\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"createBid\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"createListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deleteListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"disableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"disableInstantAccept\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableInstantAccept\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"fee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"feeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"internalType\\\":\\\"struct ITransferDomainProcessor.TransferProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"finalizeSale\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAllowedSellers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_listingIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getListingBids\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Bid\\\",\\\"name\\\":\\\"bid\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"buyerInstantAcceptEnabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.BidDetailsWithId[][]\\\",\\\"name\\\":\\\"bidInfo\\\",\\\"type\\\":\\\"tuple[][]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_listingIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getListings\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"bids\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Listing\\\",\\\"name\\\":\\\"listing\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.ListingWithId[]\\\",\\\"name\\\":\\\"listingInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserBids\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Bid\\\",\\\"name\\\":\\\"bid\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"buyerInstantAcceptEnabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.BidDetailsWithId[]\\\",\\\"name\\\":\\\"bidInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserListings\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"bids\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Listing\\\",\\\"name\\\":\\\"listing\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.ListingWithId[]\\\",\\\"name\\\":\\\"listingInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseBidPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"_transferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IVerifiedDomainRegistry\\\",\\\"name\\\":\\\"_verifiedDomainRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"initiateRefund\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"instantAcceptEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"listingCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"listings\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"pauseMarketplace\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"paused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"registryRemoveListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_disallowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"removeAddressesFromAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"transferDomainProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"unpauseMarketplace\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newBidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateBidRefundPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newBidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateBidSettlementPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newFee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_newFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newAskPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateMailServerKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"_transferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateTransferDomainProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userBids\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userListings\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifiedDomainRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IVerifiedDomainRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"withdrawBid\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Paused(address)\\\":{\\\"details\\\":\\\"Emitted when the pause is triggered by `account`.\\\"},\\\"Unpaused(address)\\\":{\\\"details\\\":\\\"Emitted when the pause is lifted by `account`.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAddressesToAllowlist(address[])\\\":{\\\"params\\\":{\\\"_allowedAddresses\\\":\\\"List of addresses allowed to call allow listed functions\\\"}},\\\"buyerReleaseFunds(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to release funds for\\\"}},\\\"createBid(uint256,bytes32,string)\\\":{\\\"params\\\":{\\\"_buyerIdHash\\\":\\\"The hashed buyerId which is also output as part of the transfer proof later\\\",\\\"_encryptedBuyerId\\\":\\\"The encrypted buyerId. Should be the same as the buyerId hashed\\\",\\\"_listingId\\\":\\\"The unique identifier of the listing to bid on\\\"}},\\\"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\\\":{\\\"params\\\":{\\\"_askPrice\\\":\\\"An asking price for the domain\\\",\\\"_dkimKeyHash\\\":\\\"The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\\",\\\"_domainId\\\":\\\"The unique identifier of the domain\\\",\\\"_encryptionKey\\\":\\\"The encryption key for buyers to encrypt the buyerId to\\\",\\\"_minBidPrice\\\":\\\"The minimum bid price for the domain\\\",\\\"_saleEthRecipient\\\":\\\"The address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\\\"}},\\\"deleteListing(uint256)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"The unique identifier of the listing to delete\\\"}},\\\"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\\\":{\\\"params\\\":{\\\"_proof\\\":\\\"The zk-email proof of domain transfer\\\"}},\\\"getListingBids(uint256[])\\\":{\\\"params\\\":{\\\"_listingIds\\\":\\\"An array of listingIds to fetch bids for\\\"}},\\\"getListings(uint256[])\\\":{\\\"params\\\":{\\\"_listingIds\\\":\\\"An array of listingIds to fetch details for\\\"}},\\\"getUserBids(address)\\\":{\\\"params\\\":{\\\"_user\\\":\\\"The address of the user to fetch bids for\\\"}},\\\"getUserListings(address)\\\":{\\\"params\\\":{\\\"_user\\\":\\\"The address of the user to fetch listings for\\\"}},\\\"increaseBidPrice(uint256,uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to increase the price for\\\",\\\"_newPrice\\\":\\\"The new price for the bid\\\"}},\\\"initialize(address,address,address)\\\":{\\\"params\\\":{\\\"_mailServerKeyHashAdapter\\\":\\\"The address of the mail server key hash adapter contract\\\",\\\"_transferDomainProcessor\\\":\\\"The address of the domain transfer processor contract\\\",\\\"_verifiedDomainRegistry\\\":\\\"The address of the verified domain registry contract\\\"}},\\\"initiateRefund(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to initiate refund for\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"paused()\\\":{\\\"details\\\":\\\"Returns true if the contract is paused, and false otherwise.\\\"},\\\"registryRemoveListing(uint256)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"Listing Id to remove\\\"}},\\\"removeAddressesFromAllowlist(address[])\\\":{\\\"params\\\":{\\\"_disallowedAddresses\\\":\\\"List of addresses being disallowed from calling allow listed functions\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"updateBidRefundPeriod(uint256)\\\":{\\\"params\\\":{\\\"_newBidRefundPeriod\\\":\\\"The new bid refund period in seconds\\\"}},\\\"updateBidSettlementPeriod(uint256)\\\":{\\\"params\\\":{\\\"_newBidSettlementPeriod\\\":\\\"The new bid settlement period in seconds\\\"}},\\\"updateFee(uint256)\\\":{\\\"params\\\":{\\\"_newFee\\\":\\\"The new fee percentage (in basis points)\\\"}},\\\"updateFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_newFeeRecipient\\\":\\\"The new address to receive fees\\\"}},\\\"updateListing(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"The unique identifier of the listing to update\\\",\\\"_newAskPrice\\\":\\\"The new asking price for the listing\\\",\\\"_saleEthRecipient\\\":\\\"The new address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\\\"}},\\\"updateMailServerKeyHashAdapter(address)\\\":{\\\"params\\\":{\\\"_mailServerKeyHashAdapter\\\":\\\"The new mail server key hash adapter\\\"}},\\\"updateTransferDomainProcessor(address)\\\":{\\\"params\\\":{\\\"_transferDomainProcessor\\\":\\\"The new transfer domain processor\\\"}},\\\"withdrawBid(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAddressesToAllowlist(address[])\\\":{\\\"notice\\\":\\\"Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed functions.\\\"},\\\"buyerReleaseFunds(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required because it is not in the buyer's interest to release funds unless they have received the domain. Note that the bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will revert if: - The bid is not owned by the caller - The listing is not active (sold or withdrawn)\\\"},\\\"createBid(uint256,bytes32,string)\\\":{\\\"notice\\\":\\\"Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the  seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId  using their private key to get the raw buyerId. DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be done in the client! This does not affect the security of the protocol as the encrypted buyerId is only  used for communication between the buyer and the seller while maintaining privacy.\\\"},\\\"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\\\":{\\\"notice\\\":\\\"Creates listing for a domain. If ownership of domain changes offchain, the new owner will have to first register the domain on the domain registry contract. Then the new owner can create a listing for the domain. The old listing will be deleted from the old owner's  listings and the old listing is marked as NOT active, which prevents any new bids from being created on it and makes the old bids immediately withdrawable. We also allow the seller to specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be  updated by us whenever Namecheap rotates their DKIM key. Function reverts if: - Caller is not domain owner on the domain registry contract - Ask price is less than min bid price - Sale ETH recipient is the zero address\\\"},\\\"deleteListing(uint256)\\\":{\\\"notice\\\":\\\"ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing are left as is to allow the buyer to withdraw the bid.\\\"},\\\"disableAllowlist()\\\":{\\\"notice\\\":\\\"Disable the allow list. When the allow list is disabled, any address is allowed to call functions with onlyAllowed modifier.\\\"},\\\"disableInstantAccept()\\\":{\\\"notice\\\":\\\"Disables the instant accept flag for the buyer.\\\"},\\\"enableAllowlist()\\\":{\\\"notice\\\":\\\"Enable the allow list. When the allow list is enabled, only approved addresses are allowed to functions with onlyAllowed modifier.\\\"},\\\"enableInstantAccept()\\\":{\\\"notice\\\":\\\"Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has  configured their Namecheap account to accept ownership of domains immediately upon transfer.  DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only  an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can  cancel the transfer immediately.\\\"},\\\"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\\\":{\\\"notice\\\":\\\"ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to  the listing owner. The seller can also finalize the sale with bids that have initiated a refund  including the ones that have expired based on timestamp but not withdrawn yet.\\\"},\\\"getAllowedSellers()\\\":{\\\"notice\\\":\\\"Get all allowed sellers\\\"},\\\"getListingBids(uint256[])\\\":{\\\"notice\\\":\\\"Returns the bids for given listingIds\\\"},\\\"getListings(uint256[])\\\":{\\\"notice\\\":\\\"Get listing information with listingId for a list of listingIds\\\"},\\\"getUserBids(address)\\\":{\\\"notice\\\":\\\"Returns the bids created by a user\\\"},\\\"getUserListings(address)\\\":{\\\"notice\\\":\\\"Returns all listings created by a user\\\"},\\\"increaseBidPrice(uint256,uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher  than the old price. The buyer must send the additional amount of ETH. The function reverts if - bid has initiated refund, caller is not bid owner or listing is not active - the new price is less than old price - msg.value is NOT STRICTLY EQUAL to than new price - old price\\\"},\\\"initialize(address,address,address)\\\":{\\\"notice\\\":\\\"Initializes the contract with domain verification and transfer processors. Can  only be called once by the contract owner \\\"},\\\"initiateRefund(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner  after the initial bid expiry period has passed.\\\"},\\\"pauseMarketplace()\\\":{\\\"notice\\\":\\\"ONLY OWNER: Pauses listing and proof submission functionality for the marketplace.  Functionalites that are paused: - Listing creation and update - Bid creation and update - Sale finalization  Functinonalites that remain unpaused to allow users to retrieve funds in contract: - Bid refund initiation and withdrawal - Listing deletion - Manual settlement between buyer and seller\\\"},\\\"registryRemoveListing(uint256)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry. \\\"},\\\"removeAddressesFromAllowlist(address[])\\\":{\\\"notice\\\":\\\"Removes passed addresses from an allow list. Addresses not on the allow list are unable to call allow listed functions.\\\"},\\\"unpauseMarketplace()\\\":{\\\"notice\\\":\\\"ONLY OWNER: Restarts paused functionality for the marketplace.\\\"},\\\"updateBidRefundPeriod(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the bid refund period\\\"},\\\"updateBidSettlementPeriod(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the minimum bid active period\\\"},\\\"updateFee(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the fee percentage for the marketplace\\\"},\\\"updateFeeRecipient(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the fee recipient address\\\"},\\\"updateListing(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"ONLY SELLER: Updates the asking price of an existing listing. We don't update the existing bids against the listing because the newAskPrice is an indicative value. The new ask price must be greater than or equal to the existing min bid price. If seller wants to update the min bid price, they should delete the listing and create a new one with the new min bid price.\\\"},\\\"updateMailServerKeyHashAdapter(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the managed mail server key hash adapter\\\"},\\\"updateTransferDomainProcessor(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the transfer domain processor\\\"},\\\"withdrawBid(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/DomainExchange.sol\\\":\\\"DomainExchange\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/security/Pausable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which allows children to implement an emergency stop\\\\n * mechanism that can be triggered by an authorized account.\\\\n *\\\\n * This module is used through inheritance. It will make available the\\\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\\\n * the functions of your contract. Note that they will not be pausable by\\\\n * simply including this module, only once the modifiers are put in place.\\\\n */\\\\nabstract contract Pausable is Context {\\\\n    /**\\\\n     * @dev Emitted when the pause is triggered by `account`.\\\\n     */\\\\n    event Paused(address account);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the pause is lifted by `account`.\\\\n     */\\\\n    event Unpaused(address account);\\\\n\\\\n    bool private _paused;\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract in unpaused state.\\\\n     */\\\\n    constructor() {\\\\n        _paused = false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must not be paused.\\\\n     */\\\\n    modifier whenNotPaused() {\\\\n        _requireNotPaused();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Modifier to make a function callable only when the contract is paused.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must be paused.\\\\n     */\\\\n    modifier whenPaused() {\\\\n        _requirePaused();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the contract is paused, and false otherwise.\\\\n     */\\\\n    function paused() public view virtual returns (bool) {\\\\n        return _paused;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the contract is paused.\\\\n     */\\\\n    function _requireNotPaused() internal view virtual {\\\\n        require(!paused(), \\\\\\\"Pausable: paused\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the contract is not paused.\\\\n     */\\\\n    function _requirePaused() internal view virtual {\\\\n        require(paused(), \\\\\\\"Pausable: not paused\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Triggers stopped state.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must not be paused.\\\\n     */\\\\n    function _pause() internal virtual whenNotPaused {\\\\n        _paused = true;\\\\n        emit Paused(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns to normal state.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must be paused.\\\\n     */\\\\n    function _unpause() internal virtual whenPaused {\\\\n        _paused = false;\\\\n        emit Unpaused(_msgSender());\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Contract module that helps prevent reentrant calls to a function.\\\\n *\\\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\\\n * available, which can be applied to functions to make sure there are no nested\\\\n * (reentrant) calls to them.\\\\n *\\\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\\\n * `nonReentrant` may not call one another. This can be worked around by making\\\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\\\n * points to them.\\\\n *\\\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\\\n * to protect against it, check out our blog post\\\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\\\n */\\\\nabstract contract ReentrancyGuard {\\\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\\\n    // word because each write operation emits an extra SLOAD to first read the\\\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\\\n    // back. This is the compiler's defense against contract upgrades and\\\\n    // pointer aliasing, and it cannot be disabled.\\\\n\\\\n    // The values being non-zero value makes deployment a bit more expensive,\\\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\\\n    // amount. Since refunds are capped to a percentage of the total\\\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\\\n    // increase the likelihood of the full refund coming into effect.\\\\n    uint256 private constant _NOT_ENTERED = 1;\\\\n    uint256 private constant _ENTERED = 2;\\\\n\\\\n    uint256 private _status;\\\\n\\\\n    constructor() {\\\\n        _status = _NOT_ENTERED;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\\\n     * function is not supported. It is possible to prevent this from happening\\\\n     * by making the `nonReentrant` function external, and making it call a\\\\n     * `private` function that does the actual work.\\\\n     */\\\\n    modifier nonReentrant() {\\\\n        _nonReentrantBefore();\\\\n        _;\\\\n        _nonReentrantAfter();\\\\n    }\\\\n\\\\n    function _nonReentrantBefore() private {\\\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\\\n        require(_status != _ENTERED, \\\\\\\"ReentrancyGuard: reentrant call\\\\\\\");\\\\n\\\\n        // Any calls to nonReentrant after this point will fail\\\\n        _status = _ENTERED;\\\\n    }\\\\n\\\\n    function _nonReentrantAfter() private {\\\\n        // By storing the original value once again, a refund is triggered (see\\\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\\\n        _status = _NOT_ENTERED;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the reentrancy guard is currently set to \\\\\\\"entered\\\\\\\", which indicates there is a\\\\n     * `nonReentrant` function in the call stack.\\\\n     */\\\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\\\n        return _status == _ENTERED;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/DomainExchange.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { ReentrancyGuard } from \\\\\\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\\\\\";\\\\nimport { Pausable } from \\\\\\\"@openzeppelin/contracts/security/Pausable.sol\\\\\\\";\\\\n\\\\nimport { AddressAllowList } from \\\\\\\"./external/AddressAllowList.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"./external/lib/Uint256ArrayUtils.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./external/interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\n\\\\nimport { IDomainExchange } from \\\\\\\"./interfaces/IDomainExchange.sol\\\\\\\";\\\\nimport { ITransferDomainProcessor } from \\\\\\\"./interfaces/ITransferDomainProcessor.sol\\\\\\\";\\\\nimport { IVerifiedDomainRegistry } from \\\\\\\"./interfaces/IVerifiedDomainRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract DomainExchange is IDomainExchange, AddressAllowList, ReentrancyGuard, Pausable {\\\\n\\\\n    using Address for address payable;\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    \\\\n    event ListingCreated(\\\\n        uint256 indexed listingId, \\\\n        address indexed seller, \\\\n        bytes32 indexed domainId, \\\\n        bytes32 dkimKeyHash,\\\\n        uint256 askPrice,\\\\n        uint256 minBidPrice,\\\\n        address saleEthRecipient\\\\n    );\\\\n    event ListingUpdated(uint256 indexed listingId, address indexed seller, uint256 newAskPrice, address saleEthRecipient);\\\\n    event ListingDeleted(uint256 indexed listingId, address indexed seller);\\\\n    event ListingDeletedByRegistry(uint256 indexed listingId);\\\\n    \\\\n    event BidCreated(uint256 indexed bidId, uint256 indexed listingId, address indexed buyer, uint256 price);\\\\n    event BidPriceIncreased(uint256 indexed bidId, address indexed buyer, uint256 newPrice);\\\\n    event RefundInitiated(uint256 indexed bidId, address indexed buyer);\\\\n    event BidWithdrawn(uint256 indexed bidId, address indexed buyer, uint256 amount);\\\\n    \\\\n    event SaleFinalized(uint256 indexed bidId, uint256 indexed listingId, uint256 priceNetFees, uint256 fees);\\\\n    \\\\n    event InstantAcceptUpdated(address indexed buyer, bool instantAccept);\\\\n\\\\n    event FeeUpdated(uint256 newFee);\\\\n    event FeeRecipientUpdated(address indexed newFeeRecipient);\\\\n    event BidSettlementPeriodUpdated(uint256 newBidSettlementPeriod);\\\\n    event BidRefundPeriodUpdated(uint256 newBidRefundPeriod);\\\\n    event TransferDomainProcessorUpdated(ITransferDomainProcessor indexed newTransferDomainProcessor);\\\\n    event MailServerKeyHashAdapterUpdated(IKeyHashAdapterV2 indexed newMailServerKeyHashAdapter);\\\\n\\\\n    /* ============ Structs ============ */\\\\n    struct Listing {\\\\n        address seller;\\\\n        address payable saleEthRecipient;       // Must be a contract that can receive ETH or an EOA\\\\n        bytes32 dkimKeyHash;            // Allow for custom DKIM key hash\\\\n        bytes encryptionKey;\\\\n        bytes32 domainId;\\\\n        uint256 createdAt;\\\\n        uint256 askPrice;\\\\n        uint256 minBidPrice;\\\\n        bool isActive;          // false by default, set to true when the listing is created\\\\n        uint256[] bids;\\\\n    }\\\\n\\\\n    struct ListingWithId {\\\\n        uint256 listingId;\\\\n        Listing listing;\\\\n    }\\\\n\\\\n    struct Bid {\\\\n        address buyer;\\\\n        uint256 listingId;\\\\n        string encryptedBuyerId;\\\\n        bytes32 buyerIdHash;\\\\n        uint256 createdAt;\\\\n        uint256 expiryTimestamp;\\\\n        uint256 price;\\\\n        bool refundInitiated;\\\\n    }\\\\n\\\\n    struct BidDetailsWithId {\\\\n        uint256 bidId;\\\\n        Bid bid;\\\\n        bool buyerInstantAcceptEnabled;\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyInitialized() {\\\\n        require(isInitialized, \\\\\\\"Contract must be initialized\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n\\\\n    mapping(uint256 => Listing) public listings;\\\\n    mapping(address => uint256[]) public userListings;\\\\n    mapping(uint256 => Bid) public bids;\\\\n    mapping(address => uint256[]) public userBids;\\\\n    mapping(address => bool) public instantAcceptEnabled;\\\\n\\\\n    uint256 public fee;\\\\n    address payable public feeRecipient;\\\\n    uint256 public bidCounter;\\\\n    uint256 public listingCounter;\\\\n    uint256 public bidSettlementPeriod;\\\\n    uint256 public bidRefundPeriod;\\\\n    \\\\n    bool public isInitialized;\\\\n    \\\\n    ITransferDomainProcessor public transferDomainProcessor;\\\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        address _owner,\\\\n        uint256 _fee,\\\\n        address payable _feeRecipient,\\\\n        uint256 _bidSettlementPeriod,\\\\n        uint256 _bidRefundPeriod,\\\\n        address[] memory _allowedAddresses\\\\n    ) AddressAllowList(_allowedAddresses) {\\\\n        fee = _fee;\\\\n        feeRecipient = _feeRecipient;\\\\n        bidSettlementPeriod = _bidSettlementPeriod;\\\\n        bidRefundPeriod = _bidRefundPeriod;\\\\n        \\\\n        bidCounter = 1;\\\\n        listingCounter = 1;\\\\n        isInitialized = false;\\\\n        \\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Creates listing for a domain. If ownership of domain changes offchain, the new owner\\\\n     * will have to first register the domain on the domain registry contract. Then the new owner\\\\n     * can create a listing for the domain. The old listing will be deleted from the old owner's \\\\n     * listings and the old listing is marked as NOT active, which prevents any new bids from being\\\\n     * created on it and makes the old bids immediately withdrawable. We also allow the seller to\\\\n     * specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM\\\\n     * key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be \\\\n     * updated by us whenever Namecheap rotates their DKIM key.\\\\n     *\\\\n     * Function reverts if:\\\\n     * - Caller is not domain owner on the domain registry contract\\\\n     * - Ask price is less than min bid price\\\\n     * - Sale ETH recipient is the zero address\\\\n     *\\\\n     * @param _domainId         The unique identifier of the domain\\\\n     * @param _askPrice         An asking price for the domain\\\\n     * @param _minBidPrice      The minimum bid price for the domain\\\\n     * @param _saleEthRecipient The address to receive the ETH from the sale; must be a contract that can\\\\n     *                          receive ETH or an EOA\\\\n     * @param _encryptionKey    The encryption key for buyers to encrypt the buyerId to\\\\n     * @param _dkimKeyHash      The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\\\n     */\\\\n    function createListing(\\\\n        bytes32 _domainId, \\\\n        uint256 _askPrice, \\\\n        uint256 _minBidPrice, \\\\n        address payable _saleEthRecipient, \\\\n        bytes memory _encryptionKey,\\\\n        bytes32 _dkimKeyHash\\\\n    ) \\\\n        external\\\\n        onlyAllowed\\\\n        onlyInitialized \\\\n        whenNotPaused\\\\n    {\\\\n        _verifyCreateListing(_domainId, _minBidPrice, _askPrice, _saleEthRecipient);\\\\n\\\\n        uint256 listingId = _updateCreateListingState(\\\\n            _domainId, _askPrice, _minBidPrice, _saleEthRecipient, _encryptionKey, _dkimKeyHash\\\\n        );\\\\n\\\\n        verifiedDomainRegistry.setDomainListing(_domainId, listingId);\\\\n\\\\n        emit ListingCreated(listingId, msg.sender, _domainId, _dkimKeyHash, _askPrice, _minBidPrice, _saleEthRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer\\\\n     * has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId\\\\n     * to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the \\\\n     * seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId \\\\n     * using their private key to get the raw buyerId.\\\\n     *\\\\n     * DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be\\\\n     * done in the client! This does not affect the security of the protocol as the encrypted buyerId is only \\\\n     * used for communication between the buyer and the seller while maintaining privacy.\\\\n     *\\\\n     * @param _listingId            The unique identifier of the listing to bid on\\\\n     * @param _buyerIdHash          The hashed buyerId which is also output as part of the transfer proof later\\\\n     * @param _encryptedBuyerId     The encrypted buyerId. Should be the same as the buyerId hashed\\\\n     */\\\\n    function createBid(uint256 _listingId, bytes32 _buyerIdHash, string memory _encryptedBuyerId) \\\\n        external \\\\n        payable\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        uint256 price = msg.value;\\\\n        Listing storage listing = listings[_listingId];\\\\n\\\\n        _validateCreateBid(listing, price, _buyerIdHash);\\\\n\\\\n        uint256 bidId = _updateCreateBidState(listing, _listingId, price, _buyerIdHash, _encryptedBuyerId);\\\\n\\\\n        emit BidCreated(bidId, _listingId, msg.sender, price);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to \\\\n     * the listing owner. The seller can also finalize the sale with bids that have initiated a refund \\\\n     * including the ones that have expired based on timestamp but not withdrawn yet.\\\\n     *\\\\n     * @param _proof The zk-email proof of domain transfer\\\\n     */\\\\n    function finalizeSale(ITransferDomainProcessor.TransferProof calldata _proof) \\\\n        external\\\\n        onlyInitialized\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        // Check\\\\n        (\\\\n            bytes32 dkimKeyHash,\\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        ) = transferDomainProcessor.processProof(_proof);\\\\n\\\\n        Bid storage bid = bids[bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n        \\\\n        _validateFinalizeSale(bid, listing, dkimKeyHash, hashedReceiverId, domainName);\\\\n        \\\\n        // Effect\\\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\\\n\\\\n        uint256 transferValue = bid.price;\\\\n        address payable recipient = listing.saleEthRecipient;\\\\n        uint256 listingId = bid.listingId;\\\\n        _updateFinalizeSaleState(bid, bidId, listing);\\\\n\\\\n        // Interaction\\\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\\\n        \\\\n        emit SaleFinalized(bidId, listingId, transferValue - feeAmount, feeAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required\\\\n     * because it is not in the buyer's interest to release funds unless they have received the domain. Note that the\\\\n     * bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to\\\\n     * the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will\\\\n     * revert if:\\\\n     * - The bid is not owned by the caller\\\\n     * - The listing is not active (sold or withdrawn)\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to release funds for\\\\n     */\\\\n    function buyerReleaseFunds(uint256 _bidId) \\\\n        external\\\\n        nonReentrant\\\\n    {\\\\n        // Check\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        require(bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Effect\\\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\\\n\\\\n        uint256 transferValue = bid.price;\\\\n        address payable recipient = listing.saleEthRecipient;\\\\n        uint256 listingId = bid.listingId;\\\\n        \\\\n        _updateFinalizeSaleState(bid, _bidId, listing);\\\\n\\\\n        // Interaction\\\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\\\n\\\\n        emit SaleFinalized(_bidId, listingId, transferValue - feeAmount, feeAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Updates the asking price of an existing listing. We don't update\\\\n     * the existing bids against the listing because the newAskPrice is an indicative value.\\\\n     * The new ask price must be greater than or equal to the existing min bid price. If seller\\\\n     * wants to update the min bid price, they should delete the listing and create a new one with\\\\n     * the new min bid price.\\\\n     *\\\\n     * @param _listingId        The unique identifier of the listing to update\\\\n     * @param _newAskPrice      The new asking price for the listing\\\\n     * @param _saleEthRecipient The new address to receive the ETH from the sale; must be a contract that can\\\\n     *                          receive ETH or an EOA\\\\n     */\\\\n    function updateListing(uint256 _listingId, uint256 _newAskPrice, address payable _saleEthRecipient) external whenNotPaused {\\\\n        Listing storage listing = listings[_listingId];\\\\n        \\\\n        require(listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        require(_newAskPrice >= listing.minBidPrice, \\\\\\\"Ask price is less than min bid price\\\\\\\");\\\\n        require(_saleEthRecipient != address(0), \\\\\\\"Invalid sale ETH recipient\\\\\\\");\\\\n        \\\\n        listing.askPrice = _newAskPrice;\\\\n        listing.saleEthRecipient = _saleEthRecipient;\\\\n\\\\n        emit ListingUpdated(_listingId, msg.sender, _newAskPrice, _saleEthRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array\\\\n     * and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing\\\\n     * are left as is to allow the buyer to withdraw the bid.\\\\n     *\\\\n     * @param _listingId The unique identifier of the listing to delete\\\\n     */\\\\n    function deleteListing(uint256 _listingId) external {\\\\n        Listing storage listing = listings[_listingId];\\\\n        \\\\n        require(listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        \\\\n        verifiedDomainRegistry.removeDomainListing(listing.domainId);\\\\n\\\\n        _pruneListing(listing, _listingId);\\\\n\\\\n        emit ListingDeleted(_listingId, msg.sender);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry.\\\\n     * \\\\n     * @param _listingId    Listing Id to remove\\\\n     */\\\\n    function registryRemoveListing(uint256 _listingId) external override {\\\\n        Listing storage listing = listings[_listingId];\\\\n\\\\n        require(address(verifiedDomainRegistry) == msg.sender, \\\\\\\"Caller is not registry\\\\\\\");\\\\n        // If listing is NOT active, this function will NOT be called because the listing status\\\\n        // would have already been removed from the registry beforehand; so there is no need to \\\\n        // check if listing is active\\\\n        \\\\n        _pruneListing(listing, _listingId);\\\\n\\\\n        emit ListingDeletedByRegistry(_listingId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher \\\\n     * than the old price. The buyer must send the additional amount of ETH. The function reverts if\\\\n     * - bid has initiated refund, caller is not bid owner or listing is not active\\\\n     * - the new price is less than old price\\\\n     * - msg.value is NOT STRICTLY EQUAL to than new price - old price\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to increase the price for\\\\n     * @param _newPrice The new price for the bid\\\\n     */\\\\n    function increaseBidPrice(uint256 _bidId, uint256 _newPrice)\\\\n        external\\\\n        payable\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        // Check\\\\n        _validateIncreaseBidPrice(bid, listing, _newPrice);\\\\n        \\\\n        // Effect\\\\n        bid.price = _newPrice;\\\\n\\\\n        emit BidPriceIncreased(_bidId, msg.sender, _newPrice);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has \\\\n     * configured their Namecheap account to accept ownership of domains immediately upon transfer.\\\\n     * \\\\n     * DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only \\\\n     * an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller\\\\n     * may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But\\\\n     * if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can \\\\n     * cancel the transfer immediately.\\\\n     */\\\\n    function enableInstantAccept() external onlyInitialized {\\\\n        require(!instantAcceptEnabled[msg.sender], \\\\\\\"Instant accept already enabled\\\\\\\");\\\\n        \\\\n        instantAcceptEnabled[msg.sender] = true;        \\\\n        emit InstantAcceptUpdated(msg.sender, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Disables the instant accept flag for the buyer.\\\\n     */\\\\n    function disableInstantAccept() external onlyInitialized {\\\\n        require(instantAcceptEnabled[msg.sender], \\\\\\\"Instant accept already disabled\\\\\\\");\\\\n\\\\n        instantAcceptEnabled[msg.sender] = false;\\\\n        emit InstantAcceptUpdated(msg.sender, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner \\\\n     * after the initial bid expiry period has passed.\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to initiate refund for\\\\n     */\\\\n    function initiateRefund(uint256 _bidId) external {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        _validateInitiateRefund(bid, listing);\\\\n\\\\n        bid.expiryTimestamp = block.timestamp + bidRefundPeriod;\\\\n        bid.refundInitiated = true;\\\\n\\\\n        emit RefundInitiated(_bidId, bid.buyer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to withdraw\\\\n     */\\\\n    function withdrawBid(uint256 _bidId) external nonReentrant {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        // Check\\\\n        _validateWithdrawBid(bid, listing);\\\\n\\\\n        // Effect\\\\n        uint256 refundAmount = bid.price;\\\\n        _pruneBid(bid, _bidId, listing);\\\\n        \\\\n        // Interaction\\\\n        payable(msg.sender).sendValue(refundAmount);\\\\n\\\\n        emit BidWithdrawn(_bidId, msg.sender, refundAmount);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initializes the contract with domain verification and transfer processors. Can \\\\n     * only be called once by the contract owner\\\\n     * \\\\n     * @param _transferDomainProcessor The address of the domain transfer processor contract\\\\n     * @param _verifiedDomainRegistry The address of the verified domain registry contract\\\\n     * @param _mailServerKeyHashAdapter The address of the mail server key hash adapter contract\\\\n     */\\\\n    function initialize(\\\\n        ITransferDomainProcessor _transferDomainProcessor,\\\\n        IVerifiedDomainRegistry _verifiedDomainRegistry,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter\\\\n    ) external onlyOwner {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n        transferDomainProcessor = _transferDomainProcessor;\\\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Pauses listing and proof submission functionality for the marketplace. \\\\n     * Functionalites that are paused:\\\\n     * - Listing creation and update\\\\n     * - Bid creation and update\\\\n     * - Sale finalization\\\\n     * \\\\n     * Functinonalites that remain unpaused to allow users to retrieve funds in contract:\\\\n     * - Bid refund initiation and withdrawal\\\\n     * - Listing deletion\\\\n     * - Manual settlement between buyer and seller\\\\n     */\\\\n    function pauseMarketplace() external onlyOwner {\\\\n        _pause();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Restarts paused functionality for the marketplace.\\\\n     */\\\\n    function unpauseMarketplace() external onlyOwner {\\\\n        _unpause();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the transfer domain processor\\\\n     *\\\\n     * @param _transferDomainProcessor The new transfer domain processor\\\\n     */\\\\n    function updateTransferDomainProcessor(ITransferDomainProcessor _transferDomainProcessor) external onlyOwner {\\\\n        require(address(_transferDomainProcessor) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        \\\\n        transferDomainProcessor = _transferDomainProcessor;\\\\n        emit TransferDomainProcessorUpdated(_transferDomainProcessor);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the managed mail server key hash adapter\\\\n     *\\\\n     * @param _mailServerKeyHashAdapter The new mail server key hash adapter\\\\n     */\\\\n    function updateMailServerKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        require(address(_mailServerKeyHashAdapter) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        \\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        emit MailServerKeyHashAdapterUpdated(_mailServerKeyHashAdapter);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the fee percentage for the marketplace\\\\n     *\\\\n     * @param _newFee The new fee percentage (in basis points)\\\\n     */\\\\n    function updateFee(uint256 _newFee) external onlyOwner {\\\\n        fee = _newFee;\\\\n        emit FeeUpdated(_newFee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the fee recipient address\\\\n     *\\\\n     * @param _newFeeRecipient The new address to receive fees\\\\n     */\\\\n    function updateFeeRecipient(address payable _newFeeRecipient) external onlyOwner {\\\\n        require(_newFeeRecipient != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        feeRecipient = _newFeeRecipient;\\\\n        emit FeeRecipientUpdated(_newFeeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the minimum bid active period\\\\n     *\\\\n     * @param _newBidSettlementPeriod The new bid settlement period in seconds\\\\n     */\\\\n    function updateBidSettlementPeriod(uint256 _newBidSettlementPeriod) external onlyOwner {\\\\n        require(_newBidSettlementPeriod > 0, \\\\\\\"Bid settlement period must be greater than 0\\\\\\\");\\\\n        bidSettlementPeriod = _newBidSettlementPeriod;\\\\n        emit BidSettlementPeriodUpdated(_newBidSettlementPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the bid refund period\\\\n     *\\\\n     * @param _newBidRefundPeriod The new bid refund period in seconds\\\\n     */\\\\n    function updateBidRefundPeriod(uint256 _newBidRefundPeriod) external onlyOwner {\\\\n        require(_newBidRefundPeriod > 0, \\\\\\\"Bid refund period must be greater than 0\\\\\\\");\\\\n        bidRefundPeriod = _newBidRefundPeriod;\\\\n        emit BidRefundPeriodUpdated(_newBidRefundPeriod);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */    \\\\n\\\\n    /**\\\\n     * @notice Get listing information with listingId for a list of listingIds\\\\n     * @param _listingIds An array of listingIds to fetch details for\\\\n     */\\\\n    function getListings(uint256[] memory _listingIds)\\\\n        external \\\\n        view \\\\n        returns (ListingWithId[] memory listingInfo) \\\\n    {\\\\n        listingInfo = new ListingWithId[](_listingIds.length);\\\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\\\n            listingInfo[i] = ListingWithId({\\\\n                listingId: _listingIds[i],\\\\n                listing: listings[_listingIds[i]]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns all listings created by a user\\\\n     * @param _user The address of the user to fetch listings for\\\\n     */\\\\n    function getUserListings(address _user) external view returns (ListingWithId[] memory listingInfo) {\\\\n        uint256[] memory userListingIds = userListings[_user];\\\\n        listingInfo = new ListingWithId[](userListingIds.length);\\\\n        for (uint256 i = 0; i < userListingIds.length; i++) {\\\\n            uint256 listingId = userListingIds[i];\\\\n            listingInfo[i] = ListingWithId({\\\\n                listingId: listingId,\\\\n                listing: listings[listingId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the bids created by a user\\\\n     * @param _user The address of the user to fetch bids for\\\\n     */\\\\n    function getUserBids(address _user) external view returns (BidDetailsWithId[] memory bidInfo) {\\\\n        uint256[] memory userBidIds = userBids[_user];\\\\n        bidInfo = new BidDetailsWithId[](userBidIds.length);\\\\n        for (uint256 i = 0; i < userBidIds.length; i++) {\\\\n            uint256 bidId = userBidIds[i];\\\\n            bidInfo[i] = BidDetailsWithId({\\\\n                bidId: bidId,\\\\n                bid: bids[bidId],\\\\n                buyerInstantAcceptEnabled: instantAcceptEnabled[_user]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the bids for given listingIds\\\\n     * @param _listingIds An array of listingIds to fetch bids for\\\\n     */\\\\n    function getListingBids(uint256[] memory _listingIds) external view returns (BidDetailsWithId[][] memory bidInfo) {\\\\n        bidInfo = new BidDetailsWithId[][](_listingIds.length);\\\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\\\n            uint256 listingId = _listingIds[i];\\\\n            uint256[] memory listingBidIds = listings[listingId].bids;\\\\n            bidInfo[i] = new BidDetailsWithId[](listingBidIds.length);\\\\n            for (uint256 j = 0; j < listingBidIds.length; j++) {\\\\n                uint256 bidId = listingBidIds[j];\\\\n                bidInfo[i][j] = BidDetailsWithId({\\\\n                    bidId: bidId,\\\\n                    bid: bids[bidId],\\\\n                    buyerInstantAcceptEnabled: instantAcceptEnabled[bids[bidId].buyer]\\\\n                });\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Get all allowed sellers\\\\n     */\\\\n    function getAllowedSellers() external view returns (address[] memory) {\\\\n        return _getAllowedAddresses();\\\\n    }\\\\n\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _verifyCreateListing(\\\\n        bytes32 _domainId, \\\\n        uint256 _minBidPrice, \\\\n        uint256 _askPrice, \\\\n        address _saleEthRecipient\\\\n    ) internal view {\\\\n        IVerifiedDomainRegistry.DomainWithId memory domainWithId = verifiedDomainRegistry.getDomain(_domainId);\\\\n        require(domainWithId.domain.owner == msg.sender, \\\\\\\"Caller is not domain owner\\\\\\\");\\\\n        require(domainWithId.domain.exchange == address(0), \\\\\\\"Domain already listed on registry\\\\\\\");\\\\n\\\\n        require(_minBidPrice > 0, \\\\\\\"Minimum bid price is zero\\\\\\\");\\\\n        require(_askPrice >= _minBidPrice, \\\\\\\"Ask price is less than min bid price\\\\\\\");\\\\n        require(_saleEthRecipient != address(0), \\\\\\\"Invalid sale ETH recipient\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateCreateListingState(\\\\n        bytes32 _domainId, \\\\n        uint256 _askPrice, \\\\n        uint256 _minBidPrice,\\\\n        address payable _saleEthRecipient,\\\\n        bytes memory _encryptionKey,\\\\n        bytes32 _dkimKeyHash\\\\n    ) internal returns (uint256 listingId) {\\\\n        \\\\n        // New listing\\\\n        listingId = listingCounter;\\\\n        listings[listingId] = Listing({\\\\n            seller: msg.sender,\\\\n            saleEthRecipient: _saleEthRecipient,\\\\n            encryptionKey: _encryptionKey,\\\\n            dkimKeyHash: _dkimKeyHash,\\\\n            askPrice: _askPrice,\\\\n            minBidPrice: _minBidPrice,\\\\n            domainId: _domainId,\\\\n            createdAt: block.timestamp,\\\\n            isActive: true,\\\\n            bids: new uint256[](0)\\\\n        });\\\\n        userListings[msg.sender].push(listingId);\\\\n\\\\n        // Increment listingCounter\\\\n        listingCounter = listingCounter + 1;\\\\n    }\\\\n\\\\n    function _validateCreateBid(Listing storage _listing, uint256 _price, bytes32 _buyerIdHash) internal view {\\\\n        require(_listing.seller != address(0), \\\\\\\"Listing does not exist\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        \\\\n        // Validate inputs\\\\n        require(_price >= _listing.minBidPrice, \\\\\\\"Bid price is less than min bid price\\\\\\\");\\\\n        require(_buyerIdHash != bytes32(0), \\\\\\\"Buyer ID hash cannot be empty\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateCreateBidState(\\\\n        Listing storage _listing, \\\\n        uint256 _listingId, \\\\n        uint256 _price, \\\\n        bytes32 _buyerIdHash, \\\\n        string memory _encryptedBuyerId\\\\n    ) internal returns (uint256 bidId) {\\\\n        bidId = bidCounter;\\\\n        bids[bidId] = Bid({\\\\n            buyer: msg.sender,\\\\n            listingId: _listingId,\\\\n            encryptedBuyerId: _encryptedBuyerId,\\\\n            buyerIdHash: _buyerIdHash,\\\\n            createdAt: block.timestamp,\\\\n            expiryTimestamp: type(uint256).max,\\\\n            price: _price,\\\\n            refundInitiated: false\\\\n        });\\\\n        userBids[msg.sender].push(bidId);\\\\n        _listing.bids.push(bidId);\\\\n\\\\n        // Increment bidCounter\\\\n        bidCounter = bidCounter + 1;\\\\n    }\\\\n\\\\n    function _validateFinalizeSale(\\\\n        Bid storage _bid, \\\\n        Listing storage _listing,\\\\n        bytes32 _dkimKeyHash,\\\\n        bytes32 _hashedReceiverId, \\\\n        string memory _transferredDomainName\\\\n    ) internal view {\\\\n        require(_bid.buyer != address(0), \\\\\\\"Bid does not exist\\\\\\\");\\\\n        require(_listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Validate namecheap DKIM key\\\\n        if (_listing.dkimKeyHash != bytes32(0)) {\\\\n            require(_dkimKeyHash == _listing.dkimKeyHash, \\\\\\\"Invalid custom DKIM key hash\\\\\\\");\\\\n        } else {\\\\n            require(\\\\n                mailServerKeyHashAdapter.isMailServerKeyHash(_dkimKeyHash), \\\\n                \\\\\\\"Invalid managed DKIM key hash\\\\\\\"\\\\n            );\\\\n        }\\\\n\\\\n        // Validate domain and receiver\\\\n        bytes32 transferredDomainId = keccak256(abi.encodePacked(_transferredDomainName));\\\\n        require(_bid.buyerIdHash == _hashedReceiverId, \\\\\\\"Invalid receiver\\\\\\\");\\\\n        require(_listing.domainId == transferredDomainId, \\\\\\\"Invalid domain\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateFinalizeSaleState(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\\\n        uint256 listingId = _bid.listingId;\\\\n        \\\\n        _pruneBid(_bid, _bidId, _listing);\\\\n        _pruneListing(_listing, listingId);\\\\n    }\\\\n\\\\n    function _validateIncreaseBidPrice(\\\\n        Bid storage _bid, \\\\n        Listing storage _listing, \\\\n        uint256 _newPrice\\\\n    ) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(!_bid.refundInitiated, \\\\\\\"Refund already initiated\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Validate new price\\\\n        require(_newPrice > _bid.price, \\\\\\\"New price not greater than old price\\\\\\\");\\\\n        require(msg.value == _newPrice - _bid.price, \\\\\\\"Incorrect amount of ETH sent\\\\\\\");\\\\n    }\\\\n\\\\n    function _validateInitiateRefund(Bid storage _bid, Listing storage _listing) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(!_bid.refundInitiated, \\\\\\\"Refund already initiated\\\\\\\");\\\\n        require(block.timestamp > bidSettlementPeriod + _bid.createdAt, \\\\\\\"Refund period not started\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing expired. Bid can be withdrawn directly\\\\\\\");\\\\n    }\\\\n\\\\n    function _validateWithdrawBid(Bid storage _bid, Listing storage _listing) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        if (_listing.isActive) {\\\\n            require(_bid.refundInitiated, \\\\\\\"Refund not initiated\\\\\\\");\\\\n            require(block.timestamp >= _bid.expiryTimestamp, \\\\\\\"Refund period not ended\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    function _settleSale(address payable _recipient, uint256 _amount) internal returns (uint256 feeAmount) {\\\\n        feeAmount = (_amount * fee) / PRECISE_UNIT;\\\\n        _recipient.sendValue(_amount - feeAmount);\\\\n\\\\n        if (feeAmount > 0) {\\\\n            feeRecipient.sendValue(feeAmount);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Deletes a bid from the exchange. Removes the bid from the listing's bids array and the buyer's\\\\n     * bids array. Deletes the listing if it is expired and has no bids.\\\\n     */\\\\n    function _pruneBid(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\\\n        userBids[_bid.buyer].removeStorage(_bidId);\\\\n        _listing.bids.removeStorage(_bidId);\\\\n        if (!_listing.isActive && _listing.bids.length == 0) {\\\\n            delete listings[_bid.listingId];\\\\n        }\\\\n        delete bids[_bidId];\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Marks a listing as expired. Removes the listing from the seller's listings array and domain listing.\\\\n     * If the listing has no bids, it is deleted from the exchange.\\\\n     */\\\\n    function _pruneListing(Listing storage _listing, uint256 _listingId) internal {\\\\n        _listing.isActive = false;\\\\n        userListings[_listing.seller].removeStorage(_listingId);\\\\n        if (_listing.bids.length == 0) {\\\\n            delete listings[_listingId];\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3470413dda117592e3d5ff6d73a50901e64eb77df61b0617974141ac0542b707\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/AddressAllowList.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"./lib/AddressArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract AddressAllowList is Ownable {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AddressAddedToAllowlist(address indexed allowedAddress);\\\\n    event AddressRemovedFromAllowlist(address indexed allowedAddress);\\\\n    event AllowlistEnabled();\\\\n    event AllowlistDisabled();\\\\n    \\\\n    /* ============ Modifier ============ */\\\\n    modifier onlyAllowed() {\\\\n        require(isEnabled ? isAllowed[msg.sender] : true, \\\\\\\"Address is not allowed\\\\\\\");\\\\n        _;\\\\n    }\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    bool public isEnabled;                     // Boolean indicating if the allowlist is enabled\\\\n    address[] public allowedAddresses;         // Array of addresses that are allowed from taking depositors liquidity\\\\n    mapping(address => bool) public isAllowed; // Mapping of address to boolean indicating if the user is allowed\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(address[] memory _allowedAddresses) Ownable() {\\\\n        for (uint256 i = 0; i < _allowedAddresses.length; i++) {\\\\n            address allowedAddress = _allowedAddresses[i];\\\\n\\\\n            require(!isAllowed[allowedAddress], \\\\\\\"Address is already allowed\\\\\\\");\\\\n            isAllowed[allowedAddress] = true;\\\\n            emit AddressAddedToAllowlist(allowedAddress);\\\\n        }\\\\n        allowedAddresses = _allowedAddresses;\\\\n        isEnabled = true;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed\\\\n     * functions.\\\\n     *\\\\n     * @param _allowedAddresses   List of addresses allowed to call allow listed functions\\\\n     */\\\\n    function addAddressesToAllowlist(address[] memory _allowedAddresses) external onlyOwner {\\\\n        for(uint256 i = 0; i < _allowedAddresses.length; i++) {\\\\n            address allowedAddress = _allowedAddresses[i];\\\\n\\\\n            require(!isAllowed[allowedAddress], \\\\\\\"Address already on allowlist\\\\\\\");\\\\n\\\\n            isAllowed[allowedAddress] = true;\\\\n            allowedAddresses.push(allowedAddress);\\\\n\\\\n            emit AddressAddedToAllowlist(allowedAddress);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes passed addresses from an allow list. Addresses not on the allow list are unable to call\\\\n     * allow listed functions.\\\\n     *\\\\n     * @param _disallowedAddresses   List of addresses being disallowed from calling allow listed functions\\\\n     */\\\\n    function removeAddressesFromAllowlist(address[] memory _disallowedAddresses) external onlyOwner {\\\\n        for(uint256 i = 0; i < _disallowedAddresses.length; i++) {\\\\n            address disallowedAddress = _disallowedAddresses[i];\\\\n\\\\n            require(isAllowed[disallowedAddress], \\\\\\\"Address already disallowed\\\\\\\");\\\\n\\\\n            isAllowed[disallowedAddress] = false;\\\\n            allowedAddresses.removeStorage(disallowedAddress);\\\\n\\\\n            emit AddressRemovedFromAllowlist(disallowedAddress);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enable the allow list. When the allow list is enabled, only approved addresses are allowed to\\\\n     * functions with onlyAllowed modifier.\\\\n     */\\\\n    function enableAllowlist() external onlyOwner {\\\\n        require(!isEnabled, \\\\\\\"Allow list is already enabled\\\\\\\");\\\\n\\\\n        isEnabled = true;\\\\n        emit AllowlistEnabled();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Disable the allow list. When the allow list is disabled, any address is allowed to call functions\\\\n     * with onlyAllowed modifier.\\\\n     */\\\\n    function disableAllowlist() external onlyOwner {\\\\n        require(isEnabled, \\\\\\\"Allow list is already disabled\\\\\\\");\\\\n\\\\n        isEnabled = false;\\\\n        emit AllowlistDisabled();\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function _getAllowedAddresses() internal view returns (address[] memory) {\\\\n        return allowedAddresses;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5a681a88a6e27db23ff879a4cf35842d008b2ce58bdd3c0c8a03028071762593\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(uint256[] memory A, uint256 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbf9f00cb29fa144868141b708c11d55b219db79cd386db886a5d72e38bbadcb0\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IDomainExchange.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface IDomainExchange {\\\\n    function registryRemoveListing(uint256 _listingId) external;\\\\n}\\\",\\\"keccak256\\\":\\\"0xe9deda400c359c1b42d10c518dc1f01605ea3a466e1be110f1f7c9be4af8253b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ITransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface ITransferDomainProcessor {\\\\n\\\\n    struct TransferProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[10] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    ) \\\\n        external \\\\n        returns (\\\\n            bytes32 dkimKeyHash, \\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        );\\\\n}\\\",\\\"keccak256\\\":\\\"0x9cf5f1b070d7bad73d8ae57f7b20d449853f96fcbb5df1a443723df41c91339d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifiedDomainRegistry {\\\\n\\\\n    struct Domain {\\\\n        address owner;\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n        address exchange;\\\\n        uint256 listingId;\\\\n    }\\\\n\\\\n    struct DomainWithId {\\\\n        bytes32 domainId;\\\\n        Domain domain;\\\\n    }\\\\n\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\\\n    \\\\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\\\n    \\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\\\n    function removeDomainListing(bytes32 _domainId) external;\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcc45329e6720b7b9df3c67985b16f8d778528f756c045ba6c2196831b40afe92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523462000037576200002562000018620001e5565b94939093929192620002cd565b6040516154ee6200089382396154ee90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200007457604052565b6200003c565b90620000916200008960405190565b928362000052565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200003757565b905051906200009182620000a2565b80620000ad565b905051906200009182620000c4565b6001600160401b038111620000745760208091020190565b909291926200010b6200010582620000da565b6200007a565b93818552602080860192028301928184116200003757915b838310620001315750505050565b60208091620001418486620000b5565b81520192019162000123565b9080601f83011215620000375781516200009f92602001620000f2565b91909160c0818403126200003757620001848382620000b5565b92620001948160208401620000cb565b92604090620001a683838601620000b5565b93620001b68460608301620000cb565b93620001c68160808401620000cb565b9360018060a0850151921b03811162000037576200009f92016200014d565b6200020862005d8180380380620001fc816200007a565b9283398101906200016a565b909192939495565b90600019905b9181191691161790565b6200009f6200009f6200009f9290565b90620002446200009f6200024c9262000220565b825462000210565b9055565b906001600160a01b039062000216565b6200009f9062000093906001600160a01b031682565b6200009f9062000260565b6200009f9062000276565b90620002a06200009f6200024c9262000281565b825462000250565b9060ff9062000216565b90620002c56200009f6200024c92151590565b8254620002a8565b939192620003016200031194620002f96200030994620002f1620000919a6200034a565b600a62000230565b600b6200028c565b600e62000230565b600f62000230565b6200033662000321600162000220565b6200032e81600c62000230565b600d62000230565b6200034460006010620002b2565b6200077f565b62000355906200036f565b6200009160006004620002b2565b6200009f600162000220565b6200037a90620005c2565b620000916200038862000363565b600362000230565b634e487b7160e01b600052601160045260246000fd5b6000198114620003b65760010190565b62000390565b634e487b7160e01b600052603260045260246000fd5b90620003dc825190565b811015620003ee576020809102010190565b620003bc565b90620004009062000281565b600052602052604060002090565b156200041657565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320697320616c726561647920616c6c6f7765640000000000006044820152606490fd5b0390fd5b9160001960089290920291821b911b62000216565b9190620004896200009f6200024c9362000220565b9083546200045f565b620000919160009162000474565b818110620004ac575050565b80620004bc600060019362000492565b01620004a0565b9091828110620004d257505050565b620000919290620004ea905b92600052602060002090565b9081019101620004a0565b906801000000000000000081116200007457816200051562000091935490565b90828155620004c3565b8151916001600160401b03831162000074576200054e620004de600192620005488686620004f5565b60200190565b92049160005b838110620005625750505050565b60019060206200057d6200009f86516001600160a01b031690565b940193818401550162000554565b9062000091916200051f565b9060ff60a01b9060a01b62000216565b90620005ba6200009f6200024c92151590565b825462000597565b620005cc620006b7565b600091620005da8362000220565b620005e76200009f845190565b8110156200069b57806200061162000604620006959386620003d2565b516001600160a01b031690565b620006546002620006406200063a620006366200062f8685620003f4565b5460ff1690565b1590565b6200040e565b6200064e83600192620003f4565b620002b2565b620006807f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379162000281565b906200068b60405190565b600090a2620003a6565b620005da565b5091620006ae620000919260016200058b565b600190620005a7565b620000913362000830565b62000830565b6200009190620006d7620007dc565b62000754565b620000936200009f6200009f9290565b6200009f90620006dd565b156200070057565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6200009190620006c26200076d620000936000620006ed565b6001600160a01b0383161415620006f8565b6200009190620006c8565b156200079257565b60405162461bcd60e51b8152806200045b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b62000091620007ea62000824565b62000806620007f93362000093565b916001600160a01b031690565b146200078a565b6200009f9062000093565b6200009f90546200080d565b6200009f600062000818565b6200083c600062000818565b906200084a8160006200028c565b620008816200087a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000281565b9162000281565b916200088c60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c80630373c0bf1461035257806303f693541461034d5780630d81539c146103485780630eaaf4c8146103435780630f2bc8b31461033e5780631756c30e146103395780631ce59f811461033457806321f67fbb1461032f5780632ac44f121461032a5780632f6db23814610325578063392e53cd146103205780633ec622791461031b5780634423c5f11461031657806346904840146103115780634f20fe5d1461030c5780635c975abb1461030757806364b55bed146103025780636759789f146102fd5780636aa633b6146102f85780636c2c9c7d146102f35780636caacbe7146102ee578063715018a6146102e95780637e064092146102e45780637e7a9c6c146102df5780637f17caa7146102da57806381c14314146102d557806386cfa7d3146102d057806387547367146102cb578063887f495a146102c65780638da5cb5b146102c15780639012c4a8146102bc578063944b8b2e146102b757806396ec50c3146102b25780639d8717a8146102ad578063a15ce280146102a8578063a8ef333f146102a3578063ad9287631461029e578063babcc53914610299578063bb46acd314610294578063bca0b9101461028f578063c0c53b8b1461028a578063c6a2aac814610285578063cf8e629a14610280578063ddca3f431461027b578063de74e57b14610276578063e38df96d14610271578063e6282c6e1461026c578063eb18a9d814610267578063f15851e614610262578063f160d3691461025d578063f2fde38b146102585763f6cda469036103c9576116f3565b6116db565b6116c3565b6116ab565b611690565b611678565b61165d565b61161a565b611474565b611450565b611438565b61141f565b6113dd565b6113b7565b611382565b611353565b611338565b611318565b6112b0565b6111c3565b61118e565b611151565b61112c565b611113565b6110cb565b6110af565b611012565b610ffa565b610fdf565b610fbb565b610fa3565b610f8b565b610ee3565b610ebc565b610e89565b610d31565b610cae565b610c87565b610bf9565b610b9e565b610963565b610935565b6108f7565b6108bb565b6108a3565b61088b565b610873565b610858565b610834565b6107fc565b6106da565b610682565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761038e57604052565b610357565b906103a76103a060405190565b928361036d565b565b6001600160401b03811161038e5760208091020190565b805b036103c957565b600080fd5b905035906103a7826103c0565b909291926103f06103eb826103a9565b610393565b93818552602080860192028301928184116103c957915b8383106104145750505050565b6020809161042284866103ce565b815201920191610407565b9080601f830112156103c957816020610448933591016103db565b90565b906020828203126103c95781356001600160401b0381116103c957610448920161042d565b9052565b6001600160a01b031690565b60005b8381106104935750506000910152565b8181015183820152602001610483565b6104c46104cd6020936104d7936104b8815190565b80835293849260200190565b95869101610480565b601f01601f191690565b0190565b906104fb6104f46104ea845190565b8084529260200190565b9260200190565b9060005b81811061050c5750505090565b9091926105296105226001928651815260200190565b9460200190565b9291016104ff565b80516001600160a01b031682526104489161012061058161014083016020858101516001600160a01b03169085015261056f60408601516040860152565b606085015184820360608601526104a3565b9261059160808201516080850152565b6105a060a082015160a0850152565b6105af60c082015160c0850152565b6105be60e082015160e0850152565b610100818101511515908401520151906101208184039101526104db565b8051825261044891604081019160200151906020818403910152610531565b90610448916105dc565b9061061b610611835190565b8083529160200190565b908161062d6020830284019460200190565b926000915b83831061064157505050505090565b9091929394602061066461065d838560019503875289516105fb565b9760200190565b9301930191939290610632565b602080825261044892910190610605565b346103c9576106a961069d61069836600461044b565b613266565b60405191829182610671565b0390f35b60009103126103c957565b610448916008021c81565b9061044891546106b8565b6104486000600c6106c3565b346103c9576106ea3660046106ad565b6106a96106f56106ce565b6040515b9182918290815260200190565b6001600160a01b0381166103c2565b905035906103a782610706565b6001600160401b03811161038e57602090601f01601f19160190565b90826000939282370152565b9092919261075a6103eb82610722565b938185526020850190828401116103c9576103a79261073e565b9080601f830112156103c9578160206104489335910161074a565b909160c0828403126103c9576107a583836103ce565b926107b381602085016103ce565b926107c182604083016103ce565b926107cf8360608401610715565b926080830135906001600160401b0382116103c9576107f381610448938601610774565b9360a0016103ce565b346103c95761081b61080f36600461078f565b94939093929192611b75565b604051005b906020828203126103c957610448916103ce565b346103c95761081b610847366004610820565b612961565b6104486000600f6106c3565b346103c9576108683660046106ad565b6106a96106f561084c565b346103c95761081b610886366004610820565b61258d565b346103c95761089b3660046106ad565b61081b61281a565b346103c9576108b33660046106ad565b61081b612be6565b346103c95761081b6108ce366004610820565b61282f565b90816102409103126103c95790565b90610240828203126103c957610448916108d3565b346103c95761081b61090a3660046108e2565b612106565b610448916008021c5b60ff1690565b90610448915461090f565b6104486000601061091e565b346103c9576109453660046106ad565b6106a9610950610929565b6040515b91829182901515815260200190565b346103c9576109733660046106ad565b61081b612b78565b6104486104486104489290565b906109929061097b565b600052602052604060002090565b6104489081565b61044890546109a0565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156109e7575b60208310146109e257565b6109b1565b91607f16916109d7565b80546000939291610a0e610a04836109c7565b8085529360200190565b9160018116908115610a605750600114610a2757505050565b610a3a9192939450600052602060002090565b916000925b818410610a4c5750500190565b805484840152602090930192600101610a3f565b92949550505060ff1916825215156020020190565b90610448916109f1565b906103a7610a9992610a9060405190565b93848092610a75565b038361036d565b61044890610918565b6104489054610aa0565b610abe906007610988565b90610ad082546001600160a01b031690565b91610add600182016109a7565b91610aea60028301610a7f565b91610af7600382016109a7565b91610b04600483016109a7565b91610b11600582016109a7565b916104486007610b23600685016109a7565b9301610aa9565b93989795610b8860e096610b81610b7988610b9698610b6c6103a79e99610b65610b8f9a600061010087019601906001600160a01b03169052565b60208d0152565b8a820360408c01526104a3565b9c6060890152565b6080870152565b60a0850152565b60c0830152565b019015159052565b346103c9576106a9610bb9610bb4366004610820565b610ab3565b94610bcc98969894919493929360405190565b98899889610b2a565b610448916008021c610474565b906104489154610bd5565b6104486000600b610be2565b346103c957610c093660046106ad565b6106a9610c14610bed565b6040515b918291826001600160a01b03909116815260200190565b90610c3e6104f46104ea845190565b9060005b818110610c4f5750505090565b909192610c6e61052260019286516001600160a01b0316815260200190565b929101610c42565b602080825261044892910190610c2f565b346103c957610c973660046106ad565b6106a9610ca26136f8565b60405191829182610c76565b346103c957610cbe3660046106ad565b6106a96109506118fa565b634e487b7160e01b600052603260045260246000fd5b8054821015610d0257610cf9600191600052602060002090565b91020190600090565b610cc9565b60016000610d13825490565b831015610d2e575061044891610d2891610cdf565b90610be2565b80fd5b346103c9576106a9610c14610d47366004610820565b610d07565b906020828203126103c95761044891610715565b80516001600160a01b03168252906104489060e080610d9e6101008401610d8c60208801516020870152565b604087015185820360408701526104a3565b94610dae60608201516060860152565b610dbd60808201516080860152565b610dcc60a082015160a0860152565b610ddb60c082015160c0860152565b01511515910152565b805182529061044890604080610e096060840160208701518582036020870152610d60565b9401511515910152565b9061044891610de4565b90610e29610611835190565b9081610e3b6020830284019460200190565b926000915b838310610e4f57505050505090565b90919293946020610e6b61065d83856001950387528951610e13565b9301930191939290610e40565b602080825261044892910190610e1d565b346103c9576106a9610ea4610e9f366004610d4c565b6134df565b60405191829182610e78565b6104486014600061091e565b346103c957610ecc3660046106ad565b6106a9610950610eb0565b6104486000600d6106c3565b346103c957610ef33660046106ad565b6106a96106f5610ed7565b90929192610f0e6103eb826103a9565b93818552602080860192028301928184116103c957915b838310610f325750505050565b60208091610f408486610715565b815201920191610f25565b9080601f830112156103c95781602061044893359101610efe565b906020828203126103c95781356001600160401b0381116103c9576104489201610f4b565b346103c95761081b610f9e366004610f66565b614f6c565b346103c957610fb33660046106ad565b61081b611743565b346103c95761081b610fce366004610820565b612f05565b6104486000600e6106c3565b346103c957610fef3660046106ad565b6106a96106f5610fd3565b346103c95761081b61100d366004610f66565b614e73565b346103c9576110223660046106ad565b61081b612788565b91906040838203126103c957610448906110448185610715565b936020016103ce565b61044890610474906001600160a01b031682565b6104489061104d565b61044890611061565b906109929061106a565b61108b600691600092611073565b90611094825490565b831015610d2e5750610448916110a991610cdf565b906106c3565b346103c9576106a96106f56110c536600461102a565b9061107d565b346103c95761081b6110de366004610d4c565b612d36565b90916060828403126103c9576104486110fc84846103ce565b9361110a81602086016103ce565b93604001610715565b346103c95761081b6111263660046110e3565b91612449565b346103c95761113c3660046106ad565b6106a9610c146000546001600160a01b031690565b346103c95761081b611164366004610820565b612dda565b61044860006011610be2565b6104709061106a565b6020810192916103a79190611175565b346103c95761119e3660046106ad565b6106a96111a9611169565b6040519182918261117e565b61108b600891600092611073565b346103c9576106a96106f56111d936600461102a565b906111b5565b906111eb610611835190565b90816111fd6020830284019460200190565b926000915b83831061121157505050505090565b9091929394602061122d61065d83856001950387528951610e13565b9301930191939290611202565b90610448916111df565b90611250610611835190565b90816112626020830284019460200190565b926000915b83831061127657505050505090565b9091929394602061129261065d8385600195038752895161123a565b9301930191939290611267565b602080825261044892910190611244565b346103c9576106a96112cb6112c636600461044b565b6135ce565b6040519182918261129f565b916060838303126103c9576112ec82846103ce565b926112fa83602083016103ce565b9260408201356001600160401b0381116103c9576104489201610774565b61081b6113263660046112d7565b91611c76565b61044860006012610be2565b346103c9576113483660046106ad565b6106a96111a961132c565b346103c95761081b611366366004610820565b612fc9565b6104489061137d600291600092611073565b61091e565b346103c9576106a9610950611398366004610d4c565b61136b565b91906040838203126103c9576104489061104481856103ce565b61081b6113c536600461139d565b90612695565b6104489061137d600991600092611073565b346103c9576106a96109506113f3366004610d4c565b6113cb565b90916060828403126103c9576104486114118484610715565b9361110a8160208601610715565b346103c95761081b6114323660046113f8565b91612b5a565b346103c9576114483660046106ad565b61081b615049565b346103c9576114603660046106ad565b61081b6150f4565b6104486000600a6106c3565b346103c9576114843660046106ad565b6106a96106f5611468565b805460009392916114a2610a04836109c7565b9160018116908115610a6057506001146114bb57505050565b6114ce9192939450600052602060002090565b916000925b8184106114e05750500190565b8054848401526020909301926001016114d3565b906104489161148f565b906103a7610a999261150f60405190565b938480926114f4565b611523906005610988565b80546001600160a01b03169161154360018301546001600160a01b031690565b91611550600282016109a7565b9161155d600383016114fe565b9161156a600482016109a7565b91611577600583016109a7565b91611584600682016109a7565b916104486008610b23600785016109a7565b9499989690610100966116056115fd61160c93610b96986115f06103a79e996115e96116139a60208f6115da61012082019860008301906001600160a01b03169052565b01906001600160a01b03169052565b60408d0152565b8a820360608c01526104a3565b9c6080890152565b60a0870152565b60c0850152565b60e0830152565b346103c9576106a9611635611630366004610820565b611518565b9561164899979995919594929460405190565b998a998a611596565b61044860016010610be2565b346103c95761166d3660046106ad565b6106a96111a9611651565b346103c95761081b61168b366004610820565b612454565b346103c9576106a961069d6116a6366004610d4c565b613312565b346103c95761081b6116be366004610820565b612243565b346103c95761081b6116d6366004610d4c565b612e3d565b346103c95761081b6116ee366004610d4c565b611864565b346103c95761081b611706366004610d4c565b612d8c565b61171361179f565b6103a7611731565b6104746104486104489290565b6104489061171b565b6103a761173e6000611728565b61189d565b6103a761170b565b1561175257565b60405162461bcd60e51b81528061179b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6103a76117b46000546001600160a01b031690565b6117cd6117c033610474565b916001600160a01b031690565b1461174b565b6103a7906117df61179f565b61183f565b156117eb57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6103a79061173e6118536104746000611728565b6001600160a01b03831614156117e4565b6103a7906117d3565b906001600160a01b03905b9181191691161790565b906118926104486118999261106a565b825461186d565b9055565b6000546001600160a01b0316906118b5816000611882565b6118e86118e27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361106a565b9161106a565b916118f260405190565b80805b0390a3565b6104486004610aa9565b6104489060a01c610918565b6104489054611904565b1561192157565b60405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc81b9bdd08185b1b1bddd95960521b6044820152606490fd5b906103a795949392916119726000611910565b156119975761199261198d611988336002611073565b610aa9565b61191a565b6119ed565b611992600161191a565b156119a857565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b906103a79594939291611a08611a036010610aa9565b6119a1565b906103a79594939291611a19611bc2565b611a71565b9081526040810192916103a79160200152565b6040513d6000823e3d90fd5b611a6a6103a794611a63606094989795611a5c608086019a6000870152565b6020850152565b6040830152565b0190611175565b9385611a9791969396611a8e611a868761106a565b858a8a6138e9565b85888589613dc3565b91611ab2611aad6011546001600160a01b031690565b61106a565b6327d335a890803b156103c957611ad891600091611acf60405190565b93849260e01b90565b8252818381611aeb8a8d60048401611a1e565b03925af18015611b7057611b52575b50611b4d3394611b3a611b36611b307f77a8be0890be6d79729c684636469d83d455e267a0bf0c9bc2463d8db867a5419761097b565b9761106a565b9790565b97611b4460405190565b94859485611a3d565b0390a4565b611b6a906000611b62818361036d565b8101906106ad565b38611afa565b611a31565b906103a7959493929161195f565b15611b8a57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6103a7611bd4611bd06118fa565b1590565b611b83565b90611bec9291611be7611cf8565b611bf4565b6103a7611d34565b906103a79291611c02611bc2565b9091611c2a9034938484611c1a610448826005610988565b611c25848483613f91565b61414e565b903391611b4d611c6c611c66611c607f6d2b783673dbbf046f2e5a1f3c92ce62c29a0f5385f2b1f0eaf19019ef28cb559461097b565b9461097b565b9461106a565b946106f960405190565b906103a79291611bd9565b610448600261097b565b15611c9257565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9060001990611878565b90611cf16104486118999261097b565b8254611cd7565b6103a7611d0560036109a7565b611d23611d10611c81565b918290611d1c565b9190565b1415611c8b565b6003611ce1565b610448600161097b565b6103a7611d23611d2a565b6103a790611d50611a036010610aa9565b611bec90611d5c611cf8565b6103a790611d68611bc2565b611f2e565b6104489060081c610474565b6104489054611d6d565b905051906103a7826103c0565b90929192611da06103eb82610722565b938185526020850190828401116103c9576103a792610480565b9080601f830112156103c957815161044892602001611d90565b6080818303126103c957611de88282611d83565b92611df68360208401611d83565b926040830151906001600160401b0382116103c957611e1a81610448938601611dba565b93606001611d83565b9037565b6103a791604091611e23565b906104d781604093611e27565b611e4c611d1860029390565b806000925b848410611e5f575050505050565b611e7b611e74600192611e6f8690565b611e33565b9360400190565b93019291611e51565b6103a79161014091611e23565b6103a7919061010090611ecf90611ea88482611e27565b611eb9604082016040860190611e40565b611eca60c0820160c0860190611e27565b820190565b910190611e84565b610240810192916103a79190611e91565b9081526040810192916103a7916020906115da565b634e487b7160e01b600052601160045260246000fd5b9190611f1e565b9290565b8203918211611f2957565b611efd565b6000611f6b91611f41611aad6010611d79565b611f60836365cd296c611f5360405190565b9687958694859360e01b90565b835260048301611ed7565b03925af18015611b70576000918291829182916120dd575b50611fbb611f95610448846007610988565b93600595611fb36104486001880198611fad8a6109a7565b90610988565b9384876143af565b611fd0611aad6011546001600160a01b031690565b90632b8a8002611fe2600483016109a7565b85546001600160a01b03165b93803b156103c9576120166000809461202161200960405190565b9889968795869460e01b90565b845260048401611ee8565b03925af1908115611b70576120719561207d93612076936120c7575b5061204a600687016109a7565b96828661206b61206560018c9701546001600160a01b031690565b946109a7565b98614557565b6148fd565b8094611f13565b926120b16120ab7f3247261fffac93019b3a34aa6692df18a5ddea75a12bf8ec4539903a608a6e4c9361097b565b9361097b565b936118f56120be60405190565b92839283611a1e565b6120d7906000611b62818361036d565b3861203d565b925090506120fd92503d8091833e6120f5818361036d565b810190611dd4565b90919238611f83565b6103a790611d3f565b611bec9061211b611cf8565b6121ad565b1561212757565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420626964206f776e65720000000000000000006044820152606490fd5b1561217357565b60405162461bcd60e51b81526020600482015260126024820152714c697374696e67206e6f742061637469766560701b6044820152606490fd5b6121bb610448826007610988565b60018101916121d16104486005611fad866109a7565b82906121f66121e783546001600160a01b031690565b6121f0336117c0565b14612120565b61220a61220560088301610aa9565b61216c565b61221f611aad6011546001600160a01b031690565b91632b8a800290611fee612235600485016109a7565b91546001600160a01b031690565b6103a79061210f565b906103a7929161225a611bc2565b612364565b1561226657565b60405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74206c697374696e67206f776e657200000000006044820152606490fd5b156122b257565b60405162461bcd60e51b8152602060048201526024808201527f41736b207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b1561230a57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c69642073616c652045544820726563697069656e740000000000006044820152606490fd5b9081526040810192916103a791602090611a6a565b919091612375610448826005610988565b9161240081600161238d86546001600160a01b031690565b3396906123a39061239d896117c0565b1461225f565b6123b261220560088301610aa9565b6123cd6123c4610448600784016109a7565b895b10156122ab565b6123ed6123dd6104746000611728565b6123e68561106a565b1415612303565b6123fa8860068301611ce1565b01611882565b61243361242d7f6df0cec5e0539cca31fe823df048a8d5834ba5dc079fa1d38e5157f00f9d085b9361097b565b9361106a565b936118f561244060405190565b9283928361234f565b906103a7929161224c565b612462610448826005610988565b80546001600160a01b031633919061247d9061239d846117c0565b61248c61220560088301610aa9565b6124a1611aad6011546001600160a01b031690565b90636e74da686124b3600483016109a7565b833b156103c9576124e9936124db600080946124ce60405190565b9788958694859360e01b90565b835260048301526024820190565b03925af1908115611b7057612505928592612532575b50614ca6565b6118e86118e27f5832f888aea12cc23bd891f2d9fd4bd01b8ce0e22898b6e7cee1519f5bd469549361097b565b612542906000611b62818361036d565b386124ff565b1561254f57565b60405162461bcd60e51b815260206004820152601660248201527543616c6c6572206973206e6f7420726567697374727960501b6044820152606490fd5b6125cb8161259f610448826005610988565b6125c66125b7611aad6011546001600160a01b031690565b6125c0336117c0565b14612548565b614ca6565b6125f57ff7504a55c42715ea3e852b679d6453ecfe02acbddb4d0652aa251d4458b7cc219161097b565b906125ff60405190565b80805b0390a2565b90611bec91612614611cf8565b906103a791612621611bc2565b612659826006612635610448856007610988565b6126538361264d6104486005611fad600187016109a7565b8361465d565b01611ce1565b33906118f561268b61242d7f8283dd04c4a2b6691bd80232f254e0ad876b8bb149938d3e7ced5c6e8a35b6149361097b565b936106f960405190565b906103a791612607565b6126ac611a036010610aa9565b6103a7612720565b156126bb57565b60405162461bcd60e51b815260206004820152601e60248201527f496e7374616e742061636365707420616c726561647920656e61626c656400006044820152606490fd5b9060ff90611878565b9061271961044861189992151590565b8254612700565b3380612751600961273f61273a611bd06119888685611073565b6126b4565b61274c6001948592611073565b612709565b61260261277e7f2e259e0564e75f0e10ce0e012a5ce2528ae513b0188b619bcc581b8ba8db70329261106a565b9261095460405190565b6103a761269f565b61279d611a036010610aa9565b6103a76127f1565b156127ac57565b60405162461bcd60e51b815260206004820152601f60248201527f496e7374616e742061636365707420616c72656164792064697361626c6564006044820152606490fd5b3380612751600961280d6128086119888584611073565b6127a5565b61274c6000948592611073565b6103a7612790565b91908201809211611f2957565b6128a1600060076128936128466104488684610988565b91612889600561286d612867610448612861600189016109a7565b84610988565b86614781565b6128814261287b600f6109a7565b90612822565b908501611ce1565b6001908301612709565b01546001600160a01b031690565b6118e86118e27f9da9db6af7fcfa5edbaa006b61a744d33fe4651a4c594cddd3e9a7e757ecd8d59361097b565b611bec906128da611cf8565b6128e8610448826007610988565b9061291d6129006104486005611fad600187016109a7565b61290a8185614872565b82612917600686016109a7565b94614c0b565b33906129318361292c8461106a565b612a59565b6118f561268b61242d7f8f8619524e8d462cead34604bd2247ede24175801481e4d0b8059ac8aa41c3019361097b565b6103a7906128ce565b1561297157565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b906129c36103eb83610722565b918252565b3d156129e2576129d73d6129b6565b903d6000602084013e565b606090565b156129ee57565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b60006103a792612a7a8293611aad612a703061106a565b849031101561296a565b90612a8460405190565b90818003925af1612a936129c8565b506129e7565b906103a79291612aa761179f565b612b18565b15612ab357565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b90610100600160a81b039060081b611878565b90612b116104486118999261106a565b8254612aee565b612b4e9291612b40612b4792612b39612b34611bd06010610aa9565b612aac565b6010612b01565b6011611882565b6012611882565b6103a760016010612709565b906103a79291612a99565b612b6d61179f565b6103a76103a7612bcb565b6103a7612b65565b612b88611bc2565b6103a7612b9760016004612709565b33612bc67f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610c1860405190565b0390a1565b6103a7612b80565b612bdb61179f565b6103a76103a7612c34565b6103a7612bd3565b612bf6612c7f565b6103a7612c0560006004612709565b33612bc67f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610c1860405190565b6103a7612bee565b15612c4357565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b6103a7612c8a6118fa565b612c3c565b6103a790612c9b61179f565b612cde565b15612ca757565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b612d01612cea8261106a565b612cfa6117c06104746000611728565b1415612ca0565b612d0c816010612b01565b6125f57f9106eb309cc633a951e77bd36af34646a9df8e6ade485938c34e3844a37b79da9161106a565b6103a790612c8f565b6103a790612d4b61179f565b612d57612cea8261106a565b612d62816012611882565b6125f57f9d3407c7200ba4f49e97f3d3f8250ec01c24b0ada6fa31053d71850793b739539161106a565b6103a790612d3f565b6103a790612da161179f565b612dac81600a611ce1565b612bc67f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76916106f960405190565b6103a790612d95565b6103a790612def61179f565b612e08612dff6104746000611728565b612cfa8361106a565b612e1381600b611882565b6125f57f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc29161106a565b6103a790612de3565b6103a790612e5261179f565b612eb8565b15612e5e57565b60405162461bcd60e51b815260206004820152602c60248201527f42696420736574746c656d656e7420706572696f64206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608490fd5b612ecc612ec5600061097b565b8211612e57565b612ed781600e611ce1565b612bc67f09a165ff77cf0f319f9ece89bc6dbe2a469a0da2640c9e6b501132846843daf5916106f960405190565b6103a790612e46565b6103a790612f1a61179f565b612f7c565b15612f2657565b60405162461bcd60e51b815260206004820152602860248201527f42696420726566756e6420706572696f64206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b612f90612f89600061097b565b8211612f1f565b612f9b81600f611ce1565b612bc67f90e0312fddcd5cbec358d5c7d63976e5c97d71dfb8d6cd5f2c53b0a1a043ccf0916106f960405190565b6103a790612f0e565b906129c36103eb836103a9565b6104486040610393565b610448610140610393565b612ffc612fe9565b906000825260208080808080808080808b01600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b905250565b610448612ff4565b613052612fdf565b9060008252602080830161303d613042565b61044861304a565b60005b82811061307b57505050565b602090613086613064565b818401520161306f565b906103a76130a66130a084612fd2565b936103a9565b601f19016020840161306c565b6000198114611f295760010190565b906130cb825190565b811015610d02576020809102010190565b906130f76130eb6104ea845490565b92600052602060002090565b9060005b8181106131085750505090565b90919261312c61312560019261311d876109a7565b815260200190565b9460010190565b9291016130fb565b90610448916130dc565b906103a7610a999261314f60405190565b93848092613134565b906103a76132556009613169612fe9565b9461318b61317e82546001600160a01b031690565b6001600160a01b03168752565b6131b26131a260018301546001600160a01b031690565b6001600160a01b03166020880152565b6131c86131c1600283016109a7565b6040880152565b6131de6131d7600383016114fe565b6060880152565b6131f46131ed600483016109a7565b6080880152565b61320a613203600583016109a7565b60a0880152565b613220613219600683016109a7565b60c0880152565b61323661322f600783016109a7565b60e0880152565b61324f61324560088301610aa9565b1515610100880152565b0161313e565b610120840152565b61044890613158565b90613277613272835190565b613090565b91600090836132858361097b565b613290610448845190565b81101561330257806132ac6132a86132fd93866130c2565b5190565b6132e26132db6132c46005611fad6132a8878b6130c2565b6132d66132cf612fdf565b948a860152565b61325d565b6020830152565b6132ec82896130c2565b526132f781886130c2565b506130b3565b613285565b5093505050565b6104489061313e565b61332961332e91613321606090565b506006611073565b613309565b9061333a613272835190565b91600090836133488361097b565b613353610448845190565b811015613302578061336b6132a861337c93866130c2565b6132e26132db6132c4836005610988565b613348565b6104486060610393565b610448610100610393565b61339e61338b565b906000825260208080808080808089016000815201606081520160008152016000815201600081520160005b8152016000905250565b610448613396565b6133e4613381565b90600082526020808084016133ca6133d4565b6104486133dc565b60005b82811061340e57505050565b6020906134196133f7565b8184015201613402565b906103a76134336130a084612fd2565b601f1901602084016133ff565b906103a76134cd600761345161338b565b9461346661317e82546001600160a01b031690565b61347c613475600183016109a7565b6020880152565b61348b6131c160028301610a7f565b61349a6131d7600383016109a7565b6134a96131ed600483016109a7565b6134b8613203600583016109a7565b6134c7613219600683016109a7565b01610aa9565b151560e0840152565b61044890613440565b906134ee613329836008611073565b6134fe6134f9825190565b613423565b926000918461350c8461097b565b613517610448845190565b81101561358c578061352f6132a861358793866130c2565b61357261353d826007610988565b613569611a5c6135516119888b6009611073565b9261356461355d613381565b968d880152565b6134d6565b15156040830152565b61357c828a6130c2565b526132f781896130c2565b61350c565b509450505050565b60005b8281106135a357505050565b606082820152602001613597565b906103a76135c16130a084612fd2565b601f190160208401613594565b6135de6135d9825190565b6135b1565b806000916135eb8361097b565b945b6135f8610448865190565b8610156136f057613621600961361b6136146132a88a8a6130c2565b6005610988565b01613309565b9461362d6134f9875190565b61363788866130c2565b5261364287856130c2565b5061364c8561097b565b613657610448885190565b8110156136d957806132f781886136b86136776132a86136d4978e6130c2565b613569611a5c60076135646136a96119886136928785610988565b936136a38a6128938a600994610988565b90611073565b946136b2613381565b97880152565b6136c28c8a6130c2565b51906136ce83836130c2565b526130c2565b61364c565b50929450946136e7906130b3565b949391936135ed565b935093505050565b61044861517f565b905051906103a782610706565b91909160a0818403126103c95761372460a0610393565b9260006137318284613700565b908501526020820151906001600160401b0382116103c9576137588161378b938501611dba565b6020860152604061376b82828601611d83565b90860152606061377d82828601613700565b908601526080809301611d83565b90830152565b9190916040818403126103c9576137a86040610393565b9260006137b58284611d83565b9085015260208201516001600160401b0381116103c9576132db920161370d565b906020828203126103c95781516001600160401b0381116103c9576104489201613791565b1561380257565b60405162461bcd60e51b815260206004820152601a60248201527f43616c6c6572206973206e6f7420646f6d61696e206f776e65720000000000006044820152606490fd5b1561384e57565b60405162461bcd60e51b815260206004820152602160248201527f446f6d61696e20616c7265616479206c6973746564206f6e20726567697374726044820152607960f81b6064820152608490fd5b156138a457565b60405162461bcd60e51b815260206004820152601960248201527f4d696e696d756d20626964207072696365206973207a65726f000000000000006044820152606490fd5b60006139269194939294613908611aad6011546001600160a01b031690565b6124db631a24254761391960405190565b9586948593849360e01b90565b03915afa938415611b70576104746123e6936123c6611d18613985606060206103a79b6117c0996000916139bf575b5001805151613976906001600160a01b0316613970336117c0565b146137fb565b5101516001600160a01b031690565b946104486139b860006139b361399a82611728565b996139ad6001600160a01b038c166117c0565b14613847565b61097b565b821161389d565b6139da913d8091833e6139d2818361036d565b8101906137d6565b38613955565b369037565b906103a76139f56130a084612fd2565b601f1901602084016139e0565b634e487b7160e01b600052600060045260246000fd5b90611cf16104486118999290565b9160001960089290920291821b911b611878565b9190613a4b6104486118999361097b565b908354613a26565b6103a791600091613a3a565b818110613a6a575050565b80613a786000600193613a53565b01613a5f565b9190601f8111613a8d57505050565b613a9f6103a793600052602060002090565b906020601f840181900483019310613ac2575b6020601f909101045b0190613a5f565b9091508190613ab2565b600019600883021c1916906002021790565b90613ae7815190565b906001600160401b03821161038e57613b0a82613b0485546109c7565b85613a7e565b602090601f8311600114613b3857611899929160009183613b2d575b5050613acc565b015190503880613b26565b601f19831691613b4d85600052602060002090565b9260005b818110613b8b57509160029391856001969410613b72575b50505002019055565b01516000196008601f8516021c19169055388080613b69565b91936020600181928787015181550195019201613b51565b906103a791613ade565b81810292918115918404141715611f2957565b818110613bcb575050565b80613bd96000600193613a53565b01613bc0565b90613bf290600019906020036008021c90565b8154169055565b9091828110613c0757505050565b6103a79290613c15906130eb565b9081019101613bc0565b90600160401b811161038e5781613c376103a7935490565b90828155613bf9565b8151916001600160401b03831161038e57613c6a6130eb600192613c648686613c1f565b60200190565b92049160005b838110613c7d5750505050565b6001906020613c8d610448865190565b9401938184015501613c70565b906103a791613c40565b6103a79190613d8a9061012090600990613ccf81613cc987516001600160a01b031690565b90611882565b613cea60018201613cc960208801516001600160a01b031690565b613d0260028201613cfc604088015190565b90613a18565b613d1a60038201613d14606088015190565b90613ba3565b613d2c60048201613cfc608088015190565b613d4460058201613d3e60a088015190565b90611ce1565b613d5660068201613d3e60c088015190565b613d6860078201613d3e60e088015190565b613d8360088201613d7d610100880151151590565b90612709565b0192015190565b90613c9a565b906103a791613ca4565b90815491600160401b83101561038e5782613dbd9160016103a795018155610cdf565b90613a3a565b919295949095613dd1600090565b50613ddc600d6109a7565b93849733944290600198600096613df28861097b565b613dfb906139e5565b9689613e05612fe9565b998a0190613e1b91906001600160a01b03169052565b6001600160a01b0316602089015260408801526060870152608086015260a085015260c084015260e0830152841515610100830152610120820152613e61836005610988565b90613e6b91613d90565b613e76906006611073565b90613e8091613d9a565b613e8a600d6109a7565b90613e949061097b565b613e9d91612822565b6103a790600d611ce1565b15613eaf57565b60405162461bcd60e51b8152602060048201526016602482015275131a5cdd1a5b99c8191bd95cc81b9bdd08195e1a5cdd60521b6044820152606490fd5b15613ef457565b60405162461bcd60e51b8152602060048201526024808201527f426964207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b15613f4c57565b60405162461bcd60e51b815260206004820152601d60248201527f427579657220494420686173682063616e6e6f7420626520656d7074790000006044820152606490fd5b611d18610448613ffb926139b36103a79695613ff4611d186104486007613fc260008801546001600160a01b031690565b96613fdf600098613fd86117c06104748c611728565b1415613ea8565b613fee61220560088301610aa9565b016109a7565b1015613eed565b1415613f45565b9061400b815190565b906001600160401b03821161038e5761402882613b0485546109c7565b602090601f831160011461404a57611899929160009183613b2d575050613acc565b601f1983169161405f85600052602060002090565b9260005b81811061408357509160029391856001969410613b725750505002019055565b91936020600181928787015181550195019201614063565b906103a791614002565b6103a79190613d7d9060e0906007906140c981613cc987516001600160a01b031690565b6140db60018201613d3e602088015190565b6140f3600282016140ed604088015190565b9061409b565b61410560038201613cfc606088015190565b61411760048201613d3e608088015190565b61412960058201613d3e60a088015190565b61413b60068201613d3e60c088015190565b01920151151590565b906103a7916140a5565b919493909261415d600c6109a7565b93849283973393426000199160009461417461338b565b6001600160a01b0389168782015296602088015260408701526060860152608085015260a084015260c0830152151560e08201526141b3836007610988565b906141bd91614144565b6141c8906008611073565b906141d291613d9a565b600901906141df91613d9a565b6141e9600c6109a7565b6141f3600161097b565b6141fc91612822565b6103a790600c611ce1565b1561420e57565b60405162461bcd60e51b8152602060048201526012602482015271109a5908191bd95cc81b9bdd08195e1a5cdd60721b6044820152606490fd5b8015156103c2565b905051906103a782614248565b906020828203126103c95761044891614250565b1561427857565b60405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206d616e6167656420444b494d206b657920686173680000006044820152606490fd5b156142c457565b60405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420637573746f6d20444b494d206b65792068617368000000006044820152606490fd5b6104d76143219260209261431b815190565b94859290565b93849101610480565b61044891614309565b1561433a57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b1561437957565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103237b6b0b4b760911b6044820152606490fd5b80549294909391926001600160a01b03166143dc6000916143d56117c061047485611728565b1415614207565b6143fb6143f2828601546001600160a01b031690565b61239d336117c0565b61440a61220560088601610aa9565b6002840190614421611d186104486120ab856109a7565b146144ac576144a693613fee611d18946144a0611d18611f1a6003611f1a9861445e6103a79e614458611d1861044860049d6109a7565b146142bd565b61448661446a60405190565b809261447a60208301918261432a565b9081038252038261036d565b614498614491825190565b9160200190565b209b016109a7565b14614333565b14614372565b5060206144e793956144c9611aad6012546001600160a01b031690565b6124db6319d091526144da60405190565b9788948593849360e01b90565b03915afa908115611b70576103a795613fee611d18946144a0611d18611f1a6003600497614524611f1a9a6144a69d600091614529575b50614271565b61445e565b61454a915060203d8111614550575b614542818361036d565b81019061425d565b3861451e565b503d614538565b90916125c6816103a794612917600186016109a7565b1561457457565b60405162461bcd60e51b815260206004820152601860248201527f526566756e6420616c726561647920696e6974696174656400000000000000006044820152606490fd5b156145c057565b60405162461bcd60e51b8152602060048201526024808201527f4e6577207072696365206e6f742067726561746572207468616e206f6c6420706044820152637269636560e01b6064820152608490fd5b1561461857565b60405162461bcd60e51b815260206004820152601c60248201527f496e636f727265637420616d6f756e74206f66204554482073656e74000000006044820152606490fd5b611d1861044860066146cc936146a461220560086103a7999861468d6121e760008701546001600160a01b031690565b6134c761469f611bd060078801610aa9565b61456d565b01936146bc6146b5610448876109a7565b82116145b9565b6146c634956109a7565b90611f13565b14614611565b156146d957565b60405162461bcd60e51b815260206004820152601960248201527f526566756e6420706572696f64206e6f742073746172746564000000000000006044820152606490fd5b1561472557565b60405162461bcd60e51b815260206004820152602e60248201527f4c697374696e6720657870697265642e204269642063616e206265207769746860448201526d647261776e206469726563746c7960901b6064820152608490fd5b60086103a7926134c76147de936147a56121e760008301546001600160a01b031690565b6147b761469f611bd060078401610aa9565b6147d8611d18610448429361287b60046147d1600e6109a7565b92016109a7565b116146d2565b61471e565b156147ea57565b60405162461bcd60e51b81526020600482015260146024820152731499599d5b99081b9bdd081a5b9a5d1a585d195960621b6044820152606490fd5b1561482d57565b60405162461bcd60e51b815260206004820152601760248201527f526566756e6420706572696f64206e6f7420656e6465640000000000000000006044820152606490fd5b9061488e906008906134c76121e785546001600160a01b031690565b6148955750565b806148ad6148a860076103a79401610aa9565b6147e3565b6148c0611d1861044860054294016109a7565b1015614826565b610448670de0b6b3a764000061097b565b634e487b7160e01b600052601260045260246000fd5b81156148f8570490565b6148d8565b909190614939614927614919614913600a6109a7565b86613bad565b6149216148c7565b906148ee565b91614933838096611f13565b90612a59565b614943600061097b565b811161494c5750565b6103a79061292c600b546001600160a01b031690565b9190613a4b6104486118999390565b6103a791600091614962565b9060009161499b61499382600052602060002090565b928354613acc565b905555565b91929060208210156149f857601f84116001146149c257611899929350613acc565b50906149f36103a79360016149ea6149df85600052602060002090565b92601f602091010490565b82019101613a5f565b61497d565b50614a318293614a0f600194600052602060002090565b613abb6020601f860104820192601f861680614a39575b50601f602091010490565b600202179055565b614a4590888603613bdf565b38614a26565b929091600160401b821161038e5760201115614a92576020811015614a735761189991613acc565b60019160ff1916614a8984600052602060002090565b55600202019055565b60019150600202019055565b908154614aaa816109c7565b90818311614ad3575b818310614ac1575b50505050565b614aca936149a0565b38808080614abb565b614adf83838387614a4b565b614ab3565b60006103a791614a9e565b90600003614b00576103a790614ae4565b613a02565b60006103a791613c1f565b90600003614b00576103a790614b05565b600060096103a7928280820155826001820155614b418360028301614971565b614b4e8360038301614aef565b614b5b8360048301614971565b614b688360058301613a53565b614b758360068301613a53565b614b828360078301613a53565b82600882015501614b10565b90600003614b00576103a790614b21565b600080825590600790614bb58360018301613a53565b614bc28360028301614aef565b614bcf8360038301614971565b614bdc8360048301613a53565b614be98360058301613a53565b614bf68360068301613a53565b0155565b90600003614b00576103a790614b9f565b600091614c6a916103a794614c55611bd06008614c4686614c41610448614c3b8c8a01546001600160a01b031690565b85611073565b6153e9565b60098401936134c787866153e9565b9081614c90575b50614c6f575b506007610988565b614bfa565b83614c85614c8a92611fad6001600592016109a7565b614b8e565b38614c62565b549050614c9f611d188661097b565b1438614c5c565b614cdf6009600092614cbb8460088301612709565b614cda85614c4161044860066136a3898701546001600160a01b031690565b015490565b614ceb611d188361097b565b14614cf4575050565b614c856103a7926005610988565b6103a790614d0e61179f565b614dba565b15614d1a57565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320616c7265616479206f6e20616c6c6f776c697374000000006044820152606490fd5b916001600160a01b0360089290920291821b911b611878565b9190614d896104486118999361106a565b908354614d5f565b90815491600160401b83101561038e5782614db49160016103a795018155610cdf565b90614d78565b90614dc5600061097b565b614dd0610448845190565b811015614e6e5780614df5614de8614e6993866130c2565b516001600160a01b031690565b614e2c81614e27816104486002614e1a614e15611bd06119888685611073565b614d13565b61274c6001938492611073565b614d91565b614e567f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379161106a565b90614e6060405190565b600090a26130b3565b614dc5565b509050565b6103a790614d02565b6103a790614e8861179f565b614ed9565b15614e9457565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320616c726561647920646973616c6c6f7765640000000000006044820152606490fd5b906000614ee58161097b565b614ef0610448855190565b811015614f665780614f08614de8614f6193876130c2565b614f2c8461274c836002614f27614f226119888484611073565b614e8d565b611073565b614f37816001615245565b614e567ff27dccb929dd3f4dba2d3ffc29a7c74e35995e051a268a7c466f9ddabdf81eac9161106a565b614ee5565b50509050565b6103a790614e7c565b614f7d61179f565b6103a7614ff7565b15614f8c57565b60405162461bcd60e51b815260206004820152601d60248201527f416c6c6f77206c69737420697320616c726561647920656e61626c65640000006044820152606490fd5b9060ff60a01b9060a01b611878565b90614ff061044861189992151590565b8254614fd1565b61500c615007611bd06000611910565b614f85565b61501860016000614fe0565b7f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec361504260405190565b8080612bc6565b6103a7614f75565b61505961179f565b6103a76150ad565b1561506857565b60405162461bcd60e51b815260206004820152601e60248201527f416c6c6f77206c69737420697320616c72656164792064697361626c656400006044820152606490fd5b6150bf6150ba6000611910565b615061565b6150ca600080614fe0565b7f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0761504260405190565b6103a7615051565b9061510b6130eb6104ea845490565b9060005b81811061511c5750505090565b90919261514a61312560019261513987546001600160a01b031690565b6001600160a01b0316815260200190565b92910161510f565b90610448916150fc565b906103a7610a999261516d60405190565b93848092615152565b6104489061515c565b6104486001615176565b906151986130eb6104ea845490565b9060005b8181106151a95750505090565b9091926151c661312560019261513987546001600160a01b031690565b92910161519c565b9061044891615189565b906103a7610a99926151e960405190565b938480926151ce565b610448906151d8565b634e487b7160e01b600052603160045260246000fd5b6103a791600091614d78565b8054801561524057600019019061523d6152378383610cdf565b90615211565b55565b6151fb565b61525a61526192615255836151f2565b6152f8565b9092901590565b156152a35760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a7916152bc6152b2835490565b6146c6600161097b565b908181036152cc575b505061521d565b614db46152df610d286152e69486610cdf565b9184610cdf565b38806152c5565b61044860001961097b565b919082519260006153088161097b565b855b8110156153525761531e614de882856130c2565b6153306001600160a01b0386166117c0565b146153485761534161530a916130b3565b9050615308565b9450505050600190565b5093505050611d186152ed565b9061536e6130eb6104ea845490565b9060005b81811061537f5750505090565b90919261539461312560019261311d876109a7565b929101615372565b906104489161535f565b906103a7610a99926153b760405190565b9384809261539c565b610448906153a6565b8054801561524057600019019061523d6153e38383610cdf565b90613a53565b61525a6153fe926153f9836153c0565b615479565b156154405760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a79161544f6152b2835490565b9081810361545f575b50506153c9565b613dbd6152df6110a96154729486610cdf565b3880615458565b919082519260006154898161097b565b855b8110156153525761549f6132a882856130c2565b8414615348576154b161548b916130b3565b905061548956fea264697066735822122003aeb335a6d381b0a582f93c9d1aab7b6e89b54509710141d9511d69f98051bd64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80630373c0bf1461035257806303f693541461034d5780630d81539c146103485780630eaaf4c8146103435780630f2bc8b31461033e5780631756c30e146103395780631ce59f811461033457806321f67fbb1461032f5780632ac44f121461032a5780632f6db23814610325578063392e53cd146103205780633ec622791461031b5780634423c5f11461031657806346904840146103115780634f20fe5d1461030c5780635c975abb1461030757806364b55bed146103025780636759789f146102fd5780636aa633b6146102f85780636c2c9c7d146102f35780636caacbe7146102ee578063715018a6146102e95780637e064092146102e45780637e7a9c6c146102df5780637f17caa7146102da57806381c14314146102d557806386cfa7d3146102d057806387547367146102cb578063887f495a146102c65780638da5cb5b146102c15780639012c4a8146102bc578063944b8b2e146102b757806396ec50c3146102b25780639d8717a8146102ad578063a15ce280146102a8578063a8ef333f146102a3578063ad9287631461029e578063babcc53914610299578063bb46acd314610294578063bca0b9101461028f578063c0c53b8b1461028a578063c6a2aac814610285578063cf8e629a14610280578063ddca3f431461027b578063de74e57b14610276578063e38df96d14610271578063e6282c6e1461026c578063eb18a9d814610267578063f15851e614610262578063f160d3691461025d578063f2fde38b146102585763f6cda469036103c9576116f3565b6116db565b6116c3565b6116ab565b611690565b611678565b61165d565b61161a565b611474565b611450565b611438565b61141f565b6113dd565b6113b7565b611382565b611353565b611338565b611318565b6112b0565b6111c3565b61118e565b611151565b61112c565b611113565b6110cb565b6110af565b611012565b610ffa565b610fdf565b610fbb565b610fa3565b610f8b565b610ee3565b610ebc565b610e89565b610d31565b610cae565b610c87565b610bf9565b610b9e565b610963565b610935565b6108f7565b6108bb565b6108a3565b61088b565b610873565b610858565b610834565b6107fc565b6106da565b610682565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761038e57604052565b610357565b906103a76103a060405190565b928361036d565b565b6001600160401b03811161038e5760208091020190565b805b036103c957565b600080fd5b905035906103a7826103c0565b909291926103f06103eb826103a9565b610393565b93818552602080860192028301928184116103c957915b8383106104145750505050565b6020809161042284866103ce565b815201920191610407565b9080601f830112156103c957816020610448933591016103db565b90565b906020828203126103c95781356001600160401b0381116103c957610448920161042d565b9052565b6001600160a01b031690565b60005b8381106104935750506000910152565b8181015183820152602001610483565b6104c46104cd6020936104d7936104b8815190565b80835293849260200190565b95869101610480565b601f01601f191690565b0190565b906104fb6104f46104ea845190565b8084529260200190565b9260200190565b9060005b81811061050c5750505090565b9091926105296105226001928651815260200190565b9460200190565b9291016104ff565b80516001600160a01b031682526104489161012061058161014083016020858101516001600160a01b03169085015261056f60408601516040860152565b606085015184820360608601526104a3565b9261059160808201516080850152565b6105a060a082015160a0850152565b6105af60c082015160c0850152565b6105be60e082015160e0850152565b610100818101511515908401520151906101208184039101526104db565b8051825261044891604081019160200151906020818403910152610531565b90610448916105dc565b9061061b610611835190565b8083529160200190565b908161062d6020830284019460200190565b926000915b83831061064157505050505090565b9091929394602061066461065d838560019503875289516105fb565b9760200190565b9301930191939290610632565b602080825261044892910190610605565b346103c9576106a961069d61069836600461044b565b613266565b60405191829182610671565b0390f35b60009103126103c957565b610448916008021c81565b9061044891546106b8565b6104486000600c6106c3565b346103c9576106ea3660046106ad565b6106a96106f56106ce565b6040515b9182918290815260200190565b6001600160a01b0381166103c2565b905035906103a782610706565b6001600160401b03811161038e57602090601f01601f19160190565b90826000939282370152565b9092919261075a6103eb82610722565b938185526020850190828401116103c9576103a79261073e565b9080601f830112156103c9578160206104489335910161074a565b909160c0828403126103c9576107a583836103ce565b926107b381602085016103ce565b926107c182604083016103ce565b926107cf8360608401610715565b926080830135906001600160401b0382116103c9576107f381610448938601610774565b9360a0016103ce565b346103c95761081b61080f36600461078f565b94939093929192611b75565b604051005b906020828203126103c957610448916103ce565b346103c95761081b610847366004610820565b612961565b6104486000600f6106c3565b346103c9576108683660046106ad565b6106a96106f561084c565b346103c95761081b610886366004610820565b61258d565b346103c95761089b3660046106ad565b61081b61281a565b346103c9576108b33660046106ad565b61081b612be6565b346103c95761081b6108ce366004610820565b61282f565b90816102409103126103c95790565b90610240828203126103c957610448916108d3565b346103c95761081b61090a3660046108e2565b612106565b610448916008021c5b60ff1690565b90610448915461090f565b6104486000601061091e565b346103c9576109453660046106ad565b6106a9610950610929565b6040515b91829182901515815260200190565b346103c9576109733660046106ad565b61081b612b78565b6104486104486104489290565b906109929061097b565b600052602052604060002090565b6104489081565b61044890546109a0565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156109e7575b60208310146109e257565b6109b1565b91607f16916109d7565b80546000939291610a0e610a04836109c7565b8085529360200190565b9160018116908115610a605750600114610a2757505050565b610a3a9192939450600052602060002090565b916000925b818410610a4c5750500190565b805484840152602090930192600101610a3f565b92949550505060ff1916825215156020020190565b90610448916109f1565b906103a7610a9992610a9060405190565b93848092610a75565b038361036d565b61044890610918565b6104489054610aa0565b610abe906007610988565b90610ad082546001600160a01b031690565b91610add600182016109a7565b91610aea60028301610a7f565b91610af7600382016109a7565b91610b04600483016109a7565b91610b11600582016109a7565b916104486007610b23600685016109a7565b9301610aa9565b93989795610b8860e096610b81610b7988610b9698610b6c6103a79e99610b65610b8f9a600061010087019601906001600160a01b03169052565b60208d0152565b8a820360408c01526104a3565b9c6060890152565b6080870152565b60a0850152565b60c0830152565b019015159052565b346103c9576106a9610bb9610bb4366004610820565b610ab3565b94610bcc98969894919493929360405190565b98899889610b2a565b610448916008021c610474565b906104489154610bd5565b6104486000600b610be2565b346103c957610c093660046106ad565b6106a9610c14610bed565b6040515b918291826001600160a01b03909116815260200190565b90610c3e6104f46104ea845190565b9060005b818110610c4f5750505090565b909192610c6e61052260019286516001600160a01b0316815260200190565b929101610c42565b602080825261044892910190610c2f565b346103c957610c973660046106ad565b6106a9610ca26136f8565b60405191829182610c76565b346103c957610cbe3660046106ad565b6106a96109506118fa565b634e487b7160e01b600052603260045260246000fd5b8054821015610d0257610cf9600191600052602060002090565b91020190600090565b610cc9565b60016000610d13825490565b831015610d2e575061044891610d2891610cdf565b90610be2565b80fd5b346103c9576106a9610c14610d47366004610820565b610d07565b906020828203126103c95761044891610715565b80516001600160a01b03168252906104489060e080610d9e6101008401610d8c60208801516020870152565b604087015185820360408701526104a3565b94610dae60608201516060860152565b610dbd60808201516080860152565b610dcc60a082015160a0860152565b610ddb60c082015160c0860152565b01511515910152565b805182529061044890604080610e096060840160208701518582036020870152610d60565b9401511515910152565b9061044891610de4565b90610e29610611835190565b9081610e3b6020830284019460200190565b926000915b838310610e4f57505050505090565b90919293946020610e6b61065d83856001950387528951610e13565b9301930191939290610e40565b602080825261044892910190610e1d565b346103c9576106a9610ea4610e9f366004610d4c565b6134df565b60405191829182610e78565b6104486014600061091e565b346103c957610ecc3660046106ad565b6106a9610950610eb0565b6104486000600d6106c3565b346103c957610ef33660046106ad565b6106a96106f5610ed7565b90929192610f0e6103eb826103a9565b93818552602080860192028301928184116103c957915b838310610f325750505050565b60208091610f408486610715565b815201920191610f25565b9080601f830112156103c95781602061044893359101610efe565b906020828203126103c95781356001600160401b0381116103c9576104489201610f4b565b346103c95761081b610f9e366004610f66565b614f6c565b346103c957610fb33660046106ad565b61081b611743565b346103c95761081b610fce366004610820565b612f05565b6104486000600e6106c3565b346103c957610fef3660046106ad565b6106a96106f5610fd3565b346103c95761081b61100d366004610f66565b614e73565b346103c9576110223660046106ad565b61081b612788565b91906040838203126103c957610448906110448185610715565b936020016103ce565b61044890610474906001600160a01b031682565b6104489061104d565b61044890611061565b906109929061106a565b61108b600691600092611073565b90611094825490565b831015610d2e5750610448916110a991610cdf565b906106c3565b346103c9576106a96106f56110c536600461102a565b9061107d565b346103c95761081b6110de366004610d4c565b612d36565b90916060828403126103c9576104486110fc84846103ce565b9361110a81602086016103ce565b93604001610715565b346103c95761081b6111263660046110e3565b91612449565b346103c95761113c3660046106ad565b6106a9610c146000546001600160a01b031690565b346103c95761081b611164366004610820565b612dda565b61044860006011610be2565b6104709061106a565b6020810192916103a79190611175565b346103c95761119e3660046106ad565b6106a96111a9611169565b6040519182918261117e565b61108b600891600092611073565b346103c9576106a96106f56111d936600461102a565b906111b5565b906111eb610611835190565b90816111fd6020830284019460200190565b926000915b83831061121157505050505090565b9091929394602061122d61065d83856001950387528951610e13565b9301930191939290611202565b90610448916111df565b90611250610611835190565b90816112626020830284019460200190565b926000915b83831061127657505050505090565b9091929394602061129261065d8385600195038752895161123a565b9301930191939290611267565b602080825261044892910190611244565b346103c9576106a96112cb6112c636600461044b565b6135ce565b6040519182918261129f565b916060838303126103c9576112ec82846103ce565b926112fa83602083016103ce565b9260408201356001600160401b0381116103c9576104489201610774565b61081b6113263660046112d7565b91611c76565b61044860006012610be2565b346103c9576113483660046106ad565b6106a96111a961132c565b346103c95761081b611366366004610820565b612fc9565b6104489061137d600291600092611073565b61091e565b346103c9576106a9610950611398366004610d4c565b61136b565b91906040838203126103c9576104489061104481856103ce565b61081b6113c536600461139d565b90612695565b6104489061137d600991600092611073565b346103c9576106a96109506113f3366004610d4c565b6113cb565b90916060828403126103c9576104486114118484610715565b9361110a8160208601610715565b346103c95761081b6114323660046113f8565b91612b5a565b346103c9576114483660046106ad565b61081b615049565b346103c9576114603660046106ad565b61081b6150f4565b6104486000600a6106c3565b346103c9576114843660046106ad565b6106a96106f5611468565b805460009392916114a2610a04836109c7565b9160018116908115610a6057506001146114bb57505050565b6114ce9192939450600052602060002090565b916000925b8184106114e05750500190565b8054848401526020909301926001016114d3565b906104489161148f565b906103a7610a999261150f60405190565b938480926114f4565b611523906005610988565b80546001600160a01b03169161154360018301546001600160a01b031690565b91611550600282016109a7565b9161155d600383016114fe565b9161156a600482016109a7565b91611577600583016109a7565b91611584600682016109a7565b916104486008610b23600785016109a7565b9499989690610100966116056115fd61160c93610b96986115f06103a79e996115e96116139a60208f6115da61012082019860008301906001600160a01b03169052565b01906001600160a01b03169052565b60408d0152565b8a820360608c01526104a3565b9c6080890152565b60a0870152565b60c0850152565b60e0830152565b346103c9576106a9611635611630366004610820565b611518565b9561164899979995919594929460405190565b998a998a611596565b61044860016010610be2565b346103c95761166d3660046106ad565b6106a96111a9611651565b346103c95761081b61168b366004610820565b612454565b346103c9576106a961069d6116a6366004610d4c565b613312565b346103c95761081b6116be366004610820565b612243565b346103c95761081b6116d6366004610d4c565b612e3d565b346103c95761081b6116ee366004610d4c565b611864565b346103c95761081b611706366004610d4c565b612d8c565b61171361179f565b6103a7611731565b6104746104486104489290565b6104489061171b565b6103a761173e6000611728565b61189d565b6103a761170b565b1561175257565b60405162461bcd60e51b81528061179b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6103a76117b46000546001600160a01b031690565b6117cd6117c033610474565b916001600160a01b031690565b1461174b565b6103a7906117df61179f565b61183f565b156117eb57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6103a79061173e6118536104746000611728565b6001600160a01b03831614156117e4565b6103a7906117d3565b906001600160a01b03905b9181191691161790565b906118926104486118999261106a565b825461186d565b9055565b6000546001600160a01b0316906118b5816000611882565b6118e86118e27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361106a565b9161106a565b916118f260405190565b80805b0390a3565b6104486004610aa9565b6104489060a01c610918565b6104489054611904565b1561192157565b60405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc81b9bdd08185b1b1bddd95960521b6044820152606490fd5b906103a795949392916119726000611910565b156119975761199261198d611988336002611073565b610aa9565b61191a565b6119ed565b611992600161191a565b156119a857565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b906103a79594939291611a08611a036010610aa9565b6119a1565b906103a79594939291611a19611bc2565b611a71565b9081526040810192916103a79160200152565b6040513d6000823e3d90fd5b611a6a6103a794611a63606094989795611a5c608086019a6000870152565b6020850152565b6040830152565b0190611175565b9385611a9791969396611a8e611a868761106a565b858a8a6138e9565b85888589613dc3565b91611ab2611aad6011546001600160a01b031690565b61106a565b6327d335a890803b156103c957611ad891600091611acf60405190565b93849260e01b90565b8252818381611aeb8a8d60048401611a1e565b03925af18015611b7057611b52575b50611b4d3394611b3a611b36611b307f77a8be0890be6d79729c684636469d83d455e267a0bf0c9bc2463d8db867a5419761097b565b9761106a565b9790565b97611b4460405190565b94859485611a3d565b0390a4565b611b6a906000611b62818361036d565b8101906106ad565b38611afa565b611a31565b906103a7959493929161195f565b15611b8a57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6103a7611bd4611bd06118fa565b1590565b611b83565b90611bec9291611be7611cf8565b611bf4565b6103a7611d34565b906103a79291611c02611bc2565b9091611c2a9034938484611c1a610448826005610988565b611c25848483613f91565b61414e565b903391611b4d611c6c611c66611c607f6d2b783673dbbf046f2e5a1f3c92ce62c29a0f5385f2b1f0eaf19019ef28cb559461097b565b9461097b565b9461106a565b946106f960405190565b906103a79291611bd9565b610448600261097b565b15611c9257565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9060001990611878565b90611cf16104486118999261097b565b8254611cd7565b6103a7611d0560036109a7565b611d23611d10611c81565b918290611d1c565b9190565b1415611c8b565b6003611ce1565b610448600161097b565b6103a7611d23611d2a565b6103a790611d50611a036010610aa9565b611bec90611d5c611cf8565b6103a790611d68611bc2565b611f2e565b6104489060081c610474565b6104489054611d6d565b905051906103a7826103c0565b90929192611da06103eb82610722565b938185526020850190828401116103c9576103a792610480565b9080601f830112156103c957815161044892602001611d90565b6080818303126103c957611de88282611d83565b92611df68360208401611d83565b926040830151906001600160401b0382116103c957611e1a81610448938601611dba565b93606001611d83565b9037565b6103a791604091611e23565b906104d781604093611e27565b611e4c611d1860029390565b806000925b848410611e5f575050505050565b611e7b611e74600192611e6f8690565b611e33565b9360400190565b93019291611e51565b6103a79161014091611e23565b6103a7919061010090611ecf90611ea88482611e27565b611eb9604082016040860190611e40565b611eca60c0820160c0860190611e27565b820190565b910190611e84565b610240810192916103a79190611e91565b9081526040810192916103a7916020906115da565b634e487b7160e01b600052601160045260246000fd5b9190611f1e565b9290565b8203918211611f2957565b611efd565b6000611f6b91611f41611aad6010611d79565b611f60836365cd296c611f5360405190565b9687958694859360e01b90565b835260048301611ed7565b03925af18015611b70576000918291829182916120dd575b50611fbb611f95610448846007610988565b93600595611fb36104486001880198611fad8a6109a7565b90610988565b9384876143af565b611fd0611aad6011546001600160a01b031690565b90632b8a8002611fe2600483016109a7565b85546001600160a01b03165b93803b156103c9576120166000809461202161200960405190565b9889968795869460e01b90565b845260048401611ee8565b03925af1908115611b70576120719561207d93612076936120c7575b5061204a600687016109a7565b96828661206b61206560018c9701546001600160a01b031690565b946109a7565b98614557565b6148fd565b8094611f13565b926120b16120ab7f3247261fffac93019b3a34aa6692df18a5ddea75a12bf8ec4539903a608a6e4c9361097b565b9361097b565b936118f56120be60405190565b92839283611a1e565b6120d7906000611b62818361036d565b3861203d565b925090506120fd92503d8091833e6120f5818361036d565b810190611dd4565b90919238611f83565b6103a790611d3f565b611bec9061211b611cf8565b6121ad565b1561212757565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420626964206f776e65720000000000000000006044820152606490fd5b1561217357565b60405162461bcd60e51b81526020600482015260126024820152714c697374696e67206e6f742061637469766560701b6044820152606490fd5b6121bb610448826007610988565b60018101916121d16104486005611fad866109a7565b82906121f66121e783546001600160a01b031690565b6121f0336117c0565b14612120565b61220a61220560088301610aa9565b61216c565b61221f611aad6011546001600160a01b031690565b91632b8a800290611fee612235600485016109a7565b91546001600160a01b031690565b6103a79061210f565b906103a7929161225a611bc2565b612364565b1561226657565b60405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74206c697374696e67206f776e657200000000006044820152606490fd5b156122b257565b60405162461bcd60e51b8152602060048201526024808201527f41736b207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b1561230a57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c69642073616c652045544820726563697069656e740000000000006044820152606490fd5b9081526040810192916103a791602090611a6a565b919091612375610448826005610988565b9161240081600161238d86546001600160a01b031690565b3396906123a39061239d896117c0565b1461225f565b6123b261220560088301610aa9565b6123cd6123c4610448600784016109a7565b895b10156122ab565b6123ed6123dd6104746000611728565b6123e68561106a565b1415612303565b6123fa8860068301611ce1565b01611882565b61243361242d7f6df0cec5e0539cca31fe823df048a8d5834ba5dc079fa1d38e5157f00f9d085b9361097b565b9361106a565b936118f561244060405190565b9283928361234f565b906103a7929161224c565b612462610448826005610988565b80546001600160a01b031633919061247d9061239d846117c0565b61248c61220560088301610aa9565b6124a1611aad6011546001600160a01b031690565b90636e74da686124b3600483016109a7565b833b156103c9576124e9936124db600080946124ce60405190565b9788958694859360e01b90565b835260048301526024820190565b03925af1908115611b7057612505928592612532575b50614ca6565b6118e86118e27f5832f888aea12cc23bd891f2d9fd4bd01b8ce0e22898b6e7cee1519f5bd469549361097b565b612542906000611b62818361036d565b386124ff565b1561254f57565b60405162461bcd60e51b815260206004820152601660248201527543616c6c6572206973206e6f7420726567697374727960501b6044820152606490fd5b6125cb8161259f610448826005610988565b6125c66125b7611aad6011546001600160a01b031690565b6125c0336117c0565b14612548565b614ca6565b6125f57ff7504a55c42715ea3e852b679d6453ecfe02acbddb4d0652aa251d4458b7cc219161097b565b906125ff60405190565b80805b0390a2565b90611bec91612614611cf8565b906103a791612621611bc2565b612659826006612635610448856007610988565b6126538361264d6104486005611fad600187016109a7565b8361465d565b01611ce1565b33906118f561268b61242d7f8283dd04c4a2b6691bd80232f254e0ad876b8bb149938d3e7ced5c6e8a35b6149361097b565b936106f960405190565b906103a791612607565b6126ac611a036010610aa9565b6103a7612720565b156126bb57565b60405162461bcd60e51b815260206004820152601e60248201527f496e7374616e742061636365707420616c726561647920656e61626c656400006044820152606490fd5b9060ff90611878565b9061271961044861189992151590565b8254612700565b3380612751600961273f61273a611bd06119888685611073565b6126b4565b61274c6001948592611073565b612709565b61260261277e7f2e259e0564e75f0e10ce0e012a5ce2528ae513b0188b619bcc581b8ba8db70329261106a565b9261095460405190565b6103a761269f565b61279d611a036010610aa9565b6103a76127f1565b156127ac57565b60405162461bcd60e51b815260206004820152601f60248201527f496e7374616e742061636365707420616c72656164792064697361626c6564006044820152606490fd5b3380612751600961280d6128086119888584611073565b6127a5565b61274c6000948592611073565b6103a7612790565b91908201809211611f2957565b6128a1600060076128936128466104488684610988565b91612889600561286d612867610448612861600189016109a7565b84610988565b86614781565b6128814261287b600f6109a7565b90612822565b908501611ce1565b6001908301612709565b01546001600160a01b031690565b6118e86118e27f9da9db6af7fcfa5edbaa006b61a744d33fe4651a4c594cddd3e9a7e757ecd8d59361097b565b611bec906128da611cf8565b6128e8610448826007610988565b9061291d6129006104486005611fad600187016109a7565b61290a8185614872565b82612917600686016109a7565b94614c0b565b33906129318361292c8461106a565b612a59565b6118f561268b61242d7f8f8619524e8d462cead34604bd2247ede24175801481e4d0b8059ac8aa41c3019361097b565b6103a7906128ce565b1561297157565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b906129c36103eb83610722565b918252565b3d156129e2576129d73d6129b6565b903d6000602084013e565b606090565b156129ee57565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b60006103a792612a7a8293611aad612a703061106a565b849031101561296a565b90612a8460405190565b90818003925af1612a936129c8565b506129e7565b906103a79291612aa761179f565b612b18565b15612ab357565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b90610100600160a81b039060081b611878565b90612b116104486118999261106a565b8254612aee565b612b4e9291612b40612b4792612b39612b34611bd06010610aa9565b612aac565b6010612b01565b6011611882565b6012611882565b6103a760016010612709565b906103a79291612a99565b612b6d61179f565b6103a76103a7612bcb565b6103a7612b65565b612b88611bc2565b6103a7612b9760016004612709565b33612bc67f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610c1860405190565b0390a1565b6103a7612b80565b612bdb61179f565b6103a76103a7612c34565b6103a7612bd3565b612bf6612c7f565b6103a7612c0560006004612709565b33612bc67f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610c1860405190565b6103a7612bee565b15612c4357565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b6103a7612c8a6118fa565b612c3c565b6103a790612c9b61179f565b612cde565b15612ca757565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b612d01612cea8261106a565b612cfa6117c06104746000611728565b1415612ca0565b612d0c816010612b01565b6125f57f9106eb309cc633a951e77bd36af34646a9df8e6ade485938c34e3844a37b79da9161106a565b6103a790612c8f565b6103a790612d4b61179f565b612d57612cea8261106a565b612d62816012611882565b6125f57f9d3407c7200ba4f49e97f3d3f8250ec01c24b0ada6fa31053d71850793b739539161106a565b6103a790612d3f565b6103a790612da161179f565b612dac81600a611ce1565b612bc67f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76916106f960405190565b6103a790612d95565b6103a790612def61179f565b612e08612dff6104746000611728565b612cfa8361106a565b612e1381600b611882565b6125f57f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc29161106a565b6103a790612de3565b6103a790612e5261179f565b612eb8565b15612e5e57565b60405162461bcd60e51b815260206004820152602c60248201527f42696420736574746c656d656e7420706572696f64206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608490fd5b612ecc612ec5600061097b565b8211612e57565b612ed781600e611ce1565b612bc67f09a165ff77cf0f319f9ece89bc6dbe2a469a0da2640c9e6b501132846843daf5916106f960405190565b6103a790612e46565b6103a790612f1a61179f565b612f7c565b15612f2657565b60405162461bcd60e51b815260206004820152602860248201527f42696420726566756e6420706572696f64206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b612f90612f89600061097b565b8211612f1f565b612f9b81600f611ce1565b612bc67f90e0312fddcd5cbec358d5c7d63976e5c97d71dfb8d6cd5f2c53b0a1a043ccf0916106f960405190565b6103a790612f0e565b906129c36103eb836103a9565b6104486040610393565b610448610140610393565b612ffc612fe9565b906000825260208080808080808080808b01600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b905250565b610448612ff4565b613052612fdf565b9060008252602080830161303d613042565b61044861304a565b60005b82811061307b57505050565b602090613086613064565b818401520161306f565b906103a76130a66130a084612fd2565b936103a9565b601f19016020840161306c565b6000198114611f295760010190565b906130cb825190565b811015610d02576020809102010190565b906130f76130eb6104ea845490565b92600052602060002090565b9060005b8181106131085750505090565b90919261312c61312560019261311d876109a7565b815260200190565b9460010190565b9291016130fb565b90610448916130dc565b906103a7610a999261314f60405190565b93848092613134565b906103a76132556009613169612fe9565b9461318b61317e82546001600160a01b031690565b6001600160a01b03168752565b6131b26131a260018301546001600160a01b031690565b6001600160a01b03166020880152565b6131c86131c1600283016109a7565b6040880152565b6131de6131d7600383016114fe565b6060880152565b6131f46131ed600483016109a7565b6080880152565b61320a613203600583016109a7565b60a0880152565b613220613219600683016109a7565b60c0880152565b61323661322f600783016109a7565b60e0880152565b61324f61324560088301610aa9565b1515610100880152565b0161313e565b610120840152565b61044890613158565b90613277613272835190565b613090565b91600090836132858361097b565b613290610448845190565b81101561330257806132ac6132a86132fd93866130c2565b5190565b6132e26132db6132c46005611fad6132a8878b6130c2565b6132d66132cf612fdf565b948a860152565b61325d565b6020830152565b6132ec82896130c2565b526132f781886130c2565b506130b3565b613285565b5093505050565b6104489061313e565b61332961332e91613321606090565b506006611073565b613309565b9061333a613272835190565b91600090836133488361097b565b613353610448845190565b811015613302578061336b6132a861337c93866130c2565b6132e26132db6132c4836005610988565b613348565b6104486060610393565b610448610100610393565b61339e61338b565b906000825260208080808080808089016000815201606081520160008152016000815201600081520160005b8152016000905250565b610448613396565b6133e4613381565b90600082526020808084016133ca6133d4565b6104486133dc565b60005b82811061340e57505050565b6020906134196133f7565b8184015201613402565b906103a76134336130a084612fd2565b601f1901602084016133ff565b906103a76134cd600761345161338b565b9461346661317e82546001600160a01b031690565b61347c613475600183016109a7565b6020880152565b61348b6131c160028301610a7f565b61349a6131d7600383016109a7565b6134a96131ed600483016109a7565b6134b8613203600583016109a7565b6134c7613219600683016109a7565b01610aa9565b151560e0840152565b61044890613440565b906134ee613329836008611073565b6134fe6134f9825190565b613423565b926000918461350c8461097b565b613517610448845190565b81101561358c578061352f6132a861358793866130c2565b61357261353d826007610988565b613569611a5c6135516119888b6009611073565b9261356461355d613381565b968d880152565b6134d6565b15156040830152565b61357c828a6130c2565b526132f781896130c2565b61350c565b509450505050565b60005b8281106135a357505050565b606082820152602001613597565b906103a76135c16130a084612fd2565b601f190160208401613594565b6135de6135d9825190565b6135b1565b806000916135eb8361097b565b945b6135f8610448865190565b8610156136f057613621600961361b6136146132a88a8a6130c2565b6005610988565b01613309565b9461362d6134f9875190565b61363788866130c2565b5261364287856130c2565b5061364c8561097b565b613657610448885190565b8110156136d957806132f781886136b86136776132a86136d4978e6130c2565b613569611a5c60076135646136a96119886136928785610988565b936136a38a6128938a600994610988565b90611073565b946136b2613381565b97880152565b6136c28c8a6130c2565b51906136ce83836130c2565b526130c2565b61364c565b50929450946136e7906130b3565b949391936135ed565b935093505050565b61044861517f565b905051906103a782610706565b91909160a0818403126103c95761372460a0610393565b9260006137318284613700565b908501526020820151906001600160401b0382116103c9576137588161378b938501611dba565b6020860152604061376b82828601611d83565b90860152606061377d82828601613700565b908601526080809301611d83565b90830152565b9190916040818403126103c9576137a86040610393565b9260006137b58284611d83565b9085015260208201516001600160401b0381116103c9576132db920161370d565b906020828203126103c95781516001600160401b0381116103c9576104489201613791565b1561380257565b60405162461bcd60e51b815260206004820152601a60248201527f43616c6c6572206973206e6f7420646f6d61696e206f776e65720000000000006044820152606490fd5b1561384e57565b60405162461bcd60e51b815260206004820152602160248201527f446f6d61696e20616c7265616479206c6973746564206f6e20726567697374726044820152607960f81b6064820152608490fd5b156138a457565b60405162461bcd60e51b815260206004820152601960248201527f4d696e696d756d20626964207072696365206973207a65726f000000000000006044820152606490fd5b60006139269194939294613908611aad6011546001600160a01b031690565b6124db631a24254761391960405190565b9586948593849360e01b90565b03915afa938415611b70576104746123e6936123c6611d18613985606060206103a79b6117c0996000916139bf575b5001805151613976906001600160a01b0316613970336117c0565b146137fb565b5101516001600160a01b031690565b946104486139b860006139b361399a82611728565b996139ad6001600160a01b038c166117c0565b14613847565b61097b565b821161389d565b6139da913d8091833e6139d2818361036d565b8101906137d6565b38613955565b369037565b906103a76139f56130a084612fd2565b601f1901602084016139e0565b634e487b7160e01b600052600060045260246000fd5b90611cf16104486118999290565b9160001960089290920291821b911b611878565b9190613a4b6104486118999361097b565b908354613a26565b6103a791600091613a3a565b818110613a6a575050565b80613a786000600193613a53565b01613a5f565b9190601f8111613a8d57505050565b613a9f6103a793600052602060002090565b906020601f840181900483019310613ac2575b6020601f909101045b0190613a5f565b9091508190613ab2565b600019600883021c1916906002021790565b90613ae7815190565b906001600160401b03821161038e57613b0a82613b0485546109c7565b85613a7e565b602090601f8311600114613b3857611899929160009183613b2d575b5050613acc565b015190503880613b26565b601f19831691613b4d85600052602060002090565b9260005b818110613b8b57509160029391856001969410613b72575b50505002019055565b01516000196008601f8516021c19169055388080613b69565b91936020600181928787015181550195019201613b51565b906103a791613ade565b81810292918115918404141715611f2957565b818110613bcb575050565b80613bd96000600193613a53565b01613bc0565b90613bf290600019906020036008021c90565b8154169055565b9091828110613c0757505050565b6103a79290613c15906130eb565b9081019101613bc0565b90600160401b811161038e5781613c376103a7935490565b90828155613bf9565b8151916001600160401b03831161038e57613c6a6130eb600192613c648686613c1f565b60200190565b92049160005b838110613c7d5750505050565b6001906020613c8d610448865190565b9401938184015501613c70565b906103a791613c40565b6103a79190613d8a9061012090600990613ccf81613cc987516001600160a01b031690565b90611882565b613cea60018201613cc960208801516001600160a01b031690565b613d0260028201613cfc604088015190565b90613a18565b613d1a60038201613d14606088015190565b90613ba3565b613d2c60048201613cfc608088015190565b613d4460058201613d3e60a088015190565b90611ce1565b613d5660068201613d3e60c088015190565b613d6860078201613d3e60e088015190565b613d8360088201613d7d610100880151151590565b90612709565b0192015190565b90613c9a565b906103a791613ca4565b90815491600160401b83101561038e5782613dbd9160016103a795018155610cdf565b90613a3a565b919295949095613dd1600090565b50613ddc600d6109a7565b93849733944290600198600096613df28861097b565b613dfb906139e5565b9689613e05612fe9565b998a0190613e1b91906001600160a01b03169052565b6001600160a01b0316602089015260408801526060870152608086015260a085015260c084015260e0830152841515610100830152610120820152613e61836005610988565b90613e6b91613d90565b613e76906006611073565b90613e8091613d9a565b613e8a600d6109a7565b90613e949061097b565b613e9d91612822565b6103a790600d611ce1565b15613eaf57565b60405162461bcd60e51b8152602060048201526016602482015275131a5cdd1a5b99c8191bd95cc81b9bdd08195e1a5cdd60521b6044820152606490fd5b15613ef457565b60405162461bcd60e51b8152602060048201526024808201527f426964207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b15613f4c57565b60405162461bcd60e51b815260206004820152601d60248201527f427579657220494420686173682063616e6e6f7420626520656d7074790000006044820152606490fd5b611d18610448613ffb926139b36103a79695613ff4611d186104486007613fc260008801546001600160a01b031690565b96613fdf600098613fd86117c06104748c611728565b1415613ea8565b613fee61220560088301610aa9565b016109a7565b1015613eed565b1415613f45565b9061400b815190565b906001600160401b03821161038e5761402882613b0485546109c7565b602090601f831160011461404a57611899929160009183613b2d575050613acc565b601f1983169161405f85600052602060002090565b9260005b81811061408357509160029391856001969410613b725750505002019055565b91936020600181928787015181550195019201614063565b906103a791614002565b6103a79190613d7d9060e0906007906140c981613cc987516001600160a01b031690565b6140db60018201613d3e602088015190565b6140f3600282016140ed604088015190565b9061409b565b61410560038201613cfc606088015190565b61411760048201613d3e608088015190565b61412960058201613d3e60a088015190565b61413b60068201613d3e60c088015190565b01920151151590565b906103a7916140a5565b919493909261415d600c6109a7565b93849283973393426000199160009461417461338b565b6001600160a01b0389168782015296602088015260408701526060860152608085015260a084015260c0830152151560e08201526141b3836007610988565b906141bd91614144565b6141c8906008611073565b906141d291613d9a565b600901906141df91613d9a565b6141e9600c6109a7565b6141f3600161097b565b6141fc91612822565b6103a790600c611ce1565b1561420e57565b60405162461bcd60e51b8152602060048201526012602482015271109a5908191bd95cc81b9bdd08195e1a5cdd60721b6044820152606490fd5b8015156103c2565b905051906103a782614248565b906020828203126103c95761044891614250565b1561427857565b60405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206d616e6167656420444b494d206b657920686173680000006044820152606490fd5b156142c457565b60405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420637573746f6d20444b494d206b65792068617368000000006044820152606490fd5b6104d76143219260209261431b815190565b94859290565b93849101610480565b61044891614309565b1561433a57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b1561437957565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103237b6b0b4b760911b6044820152606490fd5b80549294909391926001600160a01b03166143dc6000916143d56117c061047485611728565b1415614207565b6143fb6143f2828601546001600160a01b031690565b61239d336117c0565b61440a61220560088601610aa9565b6002840190614421611d186104486120ab856109a7565b146144ac576144a693613fee611d18946144a0611d18611f1a6003611f1a9861445e6103a79e614458611d1861044860049d6109a7565b146142bd565b61448661446a60405190565b809261447a60208301918261432a565b9081038252038261036d565b614498614491825190565b9160200190565b209b016109a7565b14614333565b14614372565b5060206144e793956144c9611aad6012546001600160a01b031690565b6124db6319d091526144da60405190565b9788948593849360e01b90565b03915afa908115611b70576103a795613fee611d18946144a0611d18611f1a6003600497614524611f1a9a6144a69d600091614529575b50614271565b61445e565b61454a915060203d8111614550575b614542818361036d565b81019061425d565b3861451e565b503d614538565b90916125c6816103a794612917600186016109a7565b1561457457565b60405162461bcd60e51b815260206004820152601860248201527f526566756e6420616c726561647920696e6974696174656400000000000000006044820152606490fd5b156145c057565b60405162461bcd60e51b8152602060048201526024808201527f4e6577207072696365206e6f742067726561746572207468616e206f6c6420706044820152637269636560e01b6064820152608490fd5b1561461857565b60405162461bcd60e51b815260206004820152601c60248201527f496e636f727265637420616d6f756e74206f66204554482073656e74000000006044820152606490fd5b611d1861044860066146cc936146a461220560086103a7999861468d6121e760008701546001600160a01b031690565b6134c761469f611bd060078801610aa9565b61456d565b01936146bc6146b5610448876109a7565b82116145b9565b6146c634956109a7565b90611f13565b14614611565b156146d957565b60405162461bcd60e51b815260206004820152601960248201527f526566756e6420706572696f64206e6f742073746172746564000000000000006044820152606490fd5b1561472557565b60405162461bcd60e51b815260206004820152602e60248201527f4c697374696e6720657870697265642e204269642063616e206265207769746860448201526d647261776e206469726563746c7960901b6064820152608490fd5b60086103a7926134c76147de936147a56121e760008301546001600160a01b031690565b6147b761469f611bd060078401610aa9565b6147d8611d18610448429361287b60046147d1600e6109a7565b92016109a7565b116146d2565b61471e565b156147ea57565b60405162461bcd60e51b81526020600482015260146024820152731499599d5b99081b9bdd081a5b9a5d1a585d195960621b6044820152606490fd5b1561482d57565b60405162461bcd60e51b815260206004820152601760248201527f526566756e6420706572696f64206e6f7420656e6465640000000000000000006044820152606490fd5b9061488e906008906134c76121e785546001600160a01b031690565b6148955750565b806148ad6148a860076103a79401610aa9565b6147e3565b6148c0611d1861044860054294016109a7565b1015614826565b610448670de0b6b3a764000061097b565b634e487b7160e01b600052601260045260246000fd5b81156148f8570490565b6148d8565b909190614939614927614919614913600a6109a7565b86613bad565b6149216148c7565b906148ee565b91614933838096611f13565b90612a59565b614943600061097b565b811161494c5750565b6103a79061292c600b546001600160a01b031690565b9190613a4b6104486118999390565b6103a791600091614962565b9060009161499b61499382600052602060002090565b928354613acc565b905555565b91929060208210156149f857601f84116001146149c257611899929350613acc565b50906149f36103a79360016149ea6149df85600052602060002090565b92601f602091010490565b82019101613a5f565b61497d565b50614a318293614a0f600194600052602060002090565b613abb6020601f860104820192601f861680614a39575b50601f602091010490565b600202179055565b614a4590888603613bdf565b38614a26565b929091600160401b821161038e5760201115614a92576020811015614a735761189991613acc565b60019160ff1916614a8984600052602060002090565b55600202019055565b60019150600202019055565b908154614aaa816109c7565b90818311614ad3575b818310614ac1575b50505050565b614aca936149a0565b38808080614abb565b614adf83838387614a4b565b614ab3565b60006103a791614a9e565b90600003614b00576103a790614ae4565b613a02565b60006103a791613c1f565b90600003614b00576103a790614b05565b600060096103a7928280820155826001820155614b418360028301614971565b614b4e8360038301614aef565b614b5b8360048301614971565b614b688360058301613a53565b614b758360068301613a53565b614b828360078301613a53565b82600882015501614b10565b90600003614b00576103a790614b21565b600080825590600790614bb58360018301613a53565b614bc28360028301614aef565b614bcf8360038301614971565b614bdc8360048301613a53565b614be98360058301613a53565b614bf68360068301613a53565b0155565b90600003614b00576103a790614b9f565b600091614c6a916103a794614c55611bd06008614c4686614c41610448614c3b8c8a01546001600160a01b031690565b85611073565b6153e9565b60098401936134c787866153e9565b9081614c90575b50614c6f575b506007610988565b614bfa565b83614c85614c8a92611fad6001600592016109a7565b614b8e565b38614c62565b549050614c9f611d188661097b565b1438614c5c565b614cdf6009600092614cbb8460088301612709565b614cda85614c4161044860066136a3898701546001600160a01b031690565b015490565b614ceb611d188361097b565b14614cf4575050565b614c856103a7926005610988565b6103a790614d0e61179f565b614dba565b15614d1a57565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320616c7265616479206f6e20616c6c6f776c697374000000006044820152606490fd5b916001600160a01b0360089290920291821b911b611878565b9190614d896104486118999361106a565b908354614d5f565b90815491600160401b83101561038e5782614db49160016103a795018155610cdf565b90614d78565b90614dc5600061097b565b614dd0610448845190565b811015614e6e5780614df5614de8614e6993866130c2565b516001600160a01b031690565b614e2c81614e27816104486002614e1a614e15611bd06119888685611073565b614d13565b61274c6001938492611073565b614d91565b614e567f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379161106a565b90614e6060405190565b600090a26130b3565b614dc5565b509050565b6103a790614d02565b6103a790614e8861179f565b614ed9565b15614e9457565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320616c726561647920646973616c6c6f7765640000000000006044820152606490fd5b906000614ee58161097b565b614ef0610448855190565b811015614f665780614f08614de8614f6193876130c2565b614f2c8461274c836002614f27614f226119888484611073565b614e8d565b611073565b614f37816001615245565b614e567ff27dccb929dd3f4dba2d3ffc29a7c74e35995e051a268a7c466f9ddabdf81eac9161106a565b614ee5565b50509050565b6103a790614e7c565b614f7d61179f565b6103a7614ff7565b15614f8c57565b60405162461bcd60e51b815260206004820152601d60248201527f416c6c6f77206c69737420697320616c726561647920656e61626c65640000006044820152606490fd5b9060ff60a01b9060a01b611878565b90614ff061044861189992151590565b8254614fd1565b61500c615007611bd06000611910565b614f85565b61501860016000614fe0565b7f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec361504260405190565b8080612bc6565b6103a7614f75565b61505961179f565b6103a76150ad565b1561506857565b60405162461bcd60e51b815260206004820152601e60248201527f416c6c6f77206c69737420697320616c72656164792064697361626c656400006044820152606490fd5b6150bf6150ba6000611910565b615061565b6150ca600080614fe0565b7f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0761504260405190565b6103a7615051565b9061510b6130eb6104ea845490565b9060005b81811061511c5750505090565b90919261514a61312560019261513987546001600160a01b031690565b6001600160a01b0316815260200190565b92910161510f565b90610448916150fc565b906103a7610a999261516d60405190565b93848092615152565b6104489061515c565b6104486001615176565b906151986130eb6104ea845490565b9060005b8181106151a95750505090565b9091926151c661312560019261513987546001600160a01b031690565b92910161519c565b9061044891615189565b906103a7610a99926151e960405190565b938480926151ce565b610448906151d8565b634e487b7160e01b600052603160045260246000fd5b6103a791600091614d78565b8054801561524057600019019061523d6152378383610cdf565b90615211565b55565b6151fb565b61525a61526192615255836151f2565b6152f8565b9092901590565b156152a35760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a7916152bc6152b2835490565b6146c6600161097b565b908181036152cc575b505061521d565b614db46152df610d286152e69486610cdf565b9184610cdf565b38806152c5565b61044860001961097b565b919082519260006153088161097b565b855b8110156153525761531e614de882856130c2565b6153306001600160a01b0386166117c0565b146153485761534161530a916130b3565b9050615308565b9450505050600190565b5093505050611d186152ed565b9061536e6130eb6104ea845490565b9060005b81811061537f5750505090565b90919261539461312560019261311d876109a7565b929101615372565b906104489161535f565b906103a7610a99926153b760405190565b9384809261539c565b610448906153a6565b8054801561524057600019019061523d6153e38383610cdf565b90613a53565b61525a6153fe926153f9836153c0565b615479565b156154405760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a79161544f6152b2835490565b9081810361545f575b50506153c9565b613dbd6152df6110a96154729486610cdf565b3880615458565b919082519260006154898161097b565b855b8110156153525761549f6132a882856130c2565b8414615348576154b161548b916130b3565b905061548956fea264697066735822122003aeb335a6d381b0a582f93c9d1aab7b6e89b54509710141d9511d69f98051bd64736f6c63430008120033\",\n  \"devdoc\": {\n    \"events\": {\n      \"Paused(address)\": {\n        \"details\": \"Emitted when the pause is triggered by `account`.\"\n      },\n      \"Unpaused(address)\": {\n        \"details\": \"Emitted when the pause is lifted by `account`.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAddressesToAllowlist(address[])\": {\n        \"params\": {\n          \"_allowedAddresses\": \"List of addresses allowed to call allow listed functions\"\n        }\n      },\n      \"buyerReleaseFunds(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to release funds for\"\n        }\n      },\n      \"createBid(uint256,bytes32,string)\": {\n        \"params\": {\n          \"_buyerIdHash\": \"The hashed buyerId which is also output as part of the transfer proof later\",\n          \"_encryptedBuyerId\": \"The encrypted buyerId. Should be the same as the buyerId hashed\",\n          \"_listingId\": \"The unique identifier of the listing to bid on\"\n        }\n      },\n      \"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\": {\n        \"params\": {\n          \"_askPrice\": \"An asking price for the domain\",\n          \"_dkimKeyHash\": \"The custom DKIM key hash. If empty, the managed DKIM key hash will be used\",\n          \"_domainId\": \"The unique identifier of the domain\",\n          \"_encryptionKey\": \"The encryption key for buyers to encrypt the buyerId to\",\n          \"_minBidPrice\": \"The minimum bid price for the domain\",\n          \"_saleEthRecipient\": \"The address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\"\n        }\n      },\n      \"deleteListing(uint256)\": {\n        \"params\": {\n          \"_listingId\": \"The unique identifier of the listing to delete\"\n        }\n      },\n      \"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\": {\n        \"params\": {\n          \"_proof\": \"The zk-email proof of domain transfer\"\n        }\n      },\n      \"getListingBids(uint256[])\": {\n        \"params\": {\n          \"_listingIds\": \"An array of listingIds to fetch bids for\"\n        }\n      },\n      \"getListings(uint256[])\": {\n        \"params\": {\n          \"_listingIds\": \"An array of listingIds to fetch details for\"\n        }\n      },\n      \"getUserBids(address)\": {\n        \"params\": {\n          \"_user\": \"The address of the user to fetch bids for\"\n        }\n      },\n      \"getUserListings(address)\": {\n        \"params\": {\n          \"_user\": \"The address of the user to fetch listings for\"\n        }\n      },\n      \"increaseBidPrice(uint256,uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to increase the price for\",\n          \"_newPrice\": \"The new price for the bid\"\n        }\n      },\n      \"initialize(address,address,address)\": {\n        \"params\": {\n          \"_mailServerKeyHashAdapter\": \"The address of the mail server key hash adapter contract\",\n          \"_transferDomainProcessor\": \"The address of the domain transfer processor contract\",\n          \"_verifiedDomainRegistry\": \"The address of the verified domain registry contract\"\n        }\n      },\n      \"initiateRefund(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to initiate refund for\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"paused()\": {\n        \"details\": \"Returns true if the contract is paused, and false otherwise.\"\n      },\n      \"registryRemoveListing(uint256)\": {\n        \"params\": {\n          \"_listingId\": \"Listing Id to remove\"\n        }\n      },\n      \"removeAddressesFromAllowlist(address[])\": {\n        \"params\": {\n          \"_disallowedAddresses\": \"List of addresses being disallowed from calling allow listed functions\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"updateBidRefundPeriod(uint256)\": {\n        \"params\": {\n          \"_newBidRefundPeriod\": \"The new bid refund period in seconds\"\n        }\n      },\n      \"updateBidSettlementPeriod(uint256)\": {\n        \"params\": {\n          \"_newBidSettlementPeriod\": \"The new bid settlement period in seconds\"\n        }\n      },\n      \"updateFee(uint256)\": {\n        \"params\": {\n          \"_newFee\": \"The new fee percentage (in basis points)\"\n        }\n      },\n      \"updateFeeRecipient(address)\": {\n        \"params\": {\n          \"_newFeeRecipient\": \"The new address to receive fees\"\n        }\n      },\n      \"updateListing(uint256,uint256,address)\": {\n        \"params\": {\n          \"_listingId\": \"The unique identifier of the listing to update\",\n          \"_newAskPrice\": \"The new asking price for the listing\",\n          \"_saleEthRecipient\": \"The new address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\"\n        }\n      },\n      \"updateMailServerKeyHashAdapter(address)\": {\n        \"params\": {\n          \"_mailServerKeyHashAdapter\": \"The new mail server key hash adapter\"\n        }\n      },\n      \"updateTransferDomainProcessor(address)\": {\n        \"params\": {\n          \"_transferDomainProcessor\": \"The new transfer domain processor\"\n        }\n      },\n      \"withdrawBid(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAddressesToAllowlist(address[])\": {\n        \"notice\": \"Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed functions.\"\n      },\n      \"buyerReleaseFunds(uint256)\": {\n        \"notice\": \"ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required because it is not in the buyer's interest to release funds unless they have received the domain. Note that the bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will revert if: - The bid is not owned by the caller - The listing is not active (sold or withdrawn)\"\n      },\n      \"createBid(uint256,bytes32,string)\": {\n        \"notice\": \"Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the  seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId  using their private key to get the raw buyerId. DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be done in the client! This does not affect the security of the protocol as the encrypted buyerId is only  used for communication between the buyer and the seller while maintaining privacy.\"\n      },\n      \"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\": {\n        \"notice\": \"Creates listing for a domain. If ownership of domain changes offchain, the new owner will have to first register the domain on the domain registry contract. Then the new owner can create a listing for the domain. The old listing will be deleted from the old owner's  listings and the old listing is marked as NOT active, which prevents any new bids from being created on it and makes the old bids immediately withdrawable. We also allow the seller to specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be  updated by us whenever Namecheap rotates their DKIM key. Function reverts if: - Caller is not domain owner on the domain registry contract - Ask price is less than min bid price - Sale ETH recipient is the zero address\"\n      },\n      \"deleteListing(uint256)\": {\n        \"notice\": \"ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing are left as is to allow the buyer to withdraw the bid.\"\n      },\n      \"disableAllowlist()\": {\n        \"notice\": \"Disable the allow list. When the allow list is disabled, any address is allowed to call functions with onlyAllowed modifier.\"\n      },\n      \"disableInstantAccept()\": {\n        \"notice\": \"Disables the instant accept flag for the buyer.\"\n      },\n      \"enableAllowlist()\": {\n        \"notice\": \"Enable the allow list. When the allow list is enabled, only approved addresses are allowed to functions with onlyAllowed modifier.\"\n      },\n      \"enableInstantAccept()\": {\n        \"notice\": \"Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has  configured their Namecheap account to accept ownership of domains immediately upon transfer.  DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only  an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can  cancel the transfer immediately.\"\n      },\n      \"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\": {\n        \"notice\": \"ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to  the listing owner. The seller can also finalize the sale with bids that have initiated a refund  including the ones that have expired based on timestamp but not withdrawn yet.\"\n      },\n      \"getAllowedSellers()\": {\n        \"notice\": \"Get all allowed sellers\"\n      },\n      \"getListingBids(uint256[])\": {\n        \"notice\": \"Returns the bids for given listingIds\"\n      },\n      \"getListings(uint256[])\": {\n        \"notice\": \"Get listing information with listingId for a list of listingIds\"\n      },\n      \"getUserBids(address)\": {\n        \"notice\": \"Returns the bids created by a user\"\n      },\n      \"getUserListings(address)\": {\n        \"notice\": \"Returns all listings created by a user\"\n      },\n      \"increaseBidPrice(uint256,uint256)\": {\n        \"notice\": \"ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher  than the old price. The buyer must send the additional amount of ETH. The function reverts if - bid has initiated refund, caller is not bid owner or listing is not active - the new price is less than old price - msg.value is NOT STRICTLY EQUAL to than new price - old price\"\n      },\n      \"initialize(address,address,address)\": {\n        \"notice\": \"Initializes the contract with domain verification and transfer processors. Can  only be called once by the contract owner \"\n      },\n      \"initiateRefund(uint256)\": {\n        \"notice\": \"ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner  after the initial bid expiry period has passed.\"\n      },\n      \"pauseMarketplace()\": {\n        \"notice\": \"ONLY OWNER: Pauses listing and proof submission functionality for the marketplace.  Functionalites that are paused: - Listing creation and update - Bid creation and update - Sale finalization  Functinonalites that remain unpaused to allow users to retrieve funds in contract: - Bid refund initiation and withdrawal - Listing deletion - Manual settlement between buyer and seller\"\n      },\n      \"registryRemoveListing(uint256)\": {\n        \"notice\": \"ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry. \"\n      },\n      \"removeAddressesFromAllowlist(address[])\": {\n        \"notice\": \"Removes passed addresses from an allow list. Addresses not on the allow list are unable to call allow listed functions.\"\n      },\n      \"unpauseMarketplace()\": {\n        \"notice\": \"ONLY OWNER: Restarts paused functionality for the marketplace.\"\n      },\n      \"updateBidRefundPeriod(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the bid refund period\"\n      },\n      \"updateBidSettlementPeriod(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the minimum bid active period\"\n      },\n      \"updateFee(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the fee percentage for the marketplace\"\n      },\n      \"updateFeeRecipient(address)\": {\n        \"notice\": \"ONLY OWNER: Updates the fee recipient address\"\n      },\n      \"updateListing(uint256,uint256,address)\": {\n        \"notice\": \"ONLY SELLER: Updates the asking price of an existing listing. We don't update the existing bids against the listing because the newAskPrice is an indicative value. The new ask price must be greater than or equal to the existing min bid price. If seller wants to update the min bid price, they should delete the listing and create a new one with the new min bid price.\"\n      },\n      \"updateMailServerKeyHashAdapter(address)\": {\n        \"notice\": \"ONLY OWNER: Update the managed mail server key hash adapter\"\n      },\n      \"updateTransferDomainProcessor(address)\": {\n        \"notice\": \"ONLY OWNER: Update the transfer domain processor\"\n      },\n      \"withdrawBid(uint256)\": {\n        \"notice\": \"ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 8064,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isEnabled\",\n        \"offset\": 20,\n        \"slot\": \"0\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 8067,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"allowedAddresses\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 8071,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isAllowed\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 231,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_status\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 130,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_paused\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4981,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"listings\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Listing)4936_storage)\"\n      },\n      {\n        \"astId\": 4986,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"userListings\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\"\n      },\n      {\n        \"astId\": 4991,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bids\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Bid)4959_storage)\"\n      },\n      {\n        \"astId\": 4996,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"userBids\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\"\n      },\n      {\n        \"astId\": 5000,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"instantAcceptEnabled\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 5002,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"fee\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5004,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"feeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_address_payable\"\n      },\n      {\n        \"astId\": 5006,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidCounter\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5008,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"listingCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5010,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidSettlementPeriod\",\n        \"offset\": 0,\n        \"slot\": \"14\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5012,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidRefundPeriod\",\n        \"offset\": 0,\n        \"slot\": \"15\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5014,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isInitialized\",\n        \"offset\": 0,\n        \"slot\": \"16\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 5017,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"transferDomainProcessor\",\n        \"offset\": 1,\n        \"slot\": \"16\",\n        \"type\": \"t_contract(ITransferDomainProcessor)11791\"\n      },\n      {\n        \"astId\": 5020,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"verifiedDomainRegistry\",\n        \"offset\": 0,\n        \"slot\": \"17\",\n        \"type\": \"t_contract(IVerifiedDomainRegistry)11871\"\n      },\n      {\n        \"astId\": 5023,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"18\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)9595\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_address_payable\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address payable\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)9595\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ITransferDomainProcessor)11791\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ITransferDomainProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IVerifiedDomainRegistry)11871\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IVerifiedDomainRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_uint256)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_uint256,t_struct(Bid)4959_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct DomainExchange.Bid)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Bid)4959_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Listing)4936_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct DomainExchange.Listing)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Listing)4936_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Bid)4959_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct DomainExchange.Bid\",\n        \"members\": [\n          {\n            \"astId\": 4944,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"buyer\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4946,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"listingId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4948,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"encryptedBuyerId\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4950,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"buyerIdHash\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4952,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"createdAt\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4954,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"expiryTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4956,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"price\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4958,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"refundInitiated\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_bool\"\n          }\n        ],\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_struct(Listing)4936_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct DomainExchange.Listing\",\n        \"members\": [\n          {\n            \"astId\": 4916,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"seller\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4918,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"saleEthRecipient\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address_payable\"\n          },\n          {\n            \"astId\": 4920,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"dkimKeyHash\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4922,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"encryptionKey\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes_storage\"\n          },\n          {\n            \"astId\": 4924,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"domainId\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4926,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"createdAt\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4928,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"askPrice\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4930,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"minBidPrice\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4932,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"isActive\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 4935,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"bids\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"320\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/NamecheapManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x6d00beaA1F921f22f10bAda079f2fb1bf0342e38\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xbbdb618ac153708022c44991521a78efe7a37c452ad4e96432566a4becb6eee3\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x6d00beaA1F921f22f10bAda079f2fb1bf0342e38\",\n    \"transactionIndex\": 92,\n    \"gasUsed\": \"766431\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000200000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000004000000\",\n    \"blockHash\": \"0x2642856bef1171d00f41f86275b847b85308e985981c0a46fcec0dc144d7cf92\",\n    \"transactionHash\": \"0xbbdb618ac153708022c44991521a78efe7a37c452ad4e96432566a4becb6eee3\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 92,\n        \"blockNumber\": 20166820,\n        \"transactionHash\": \"0xbbdb618ac153708022c44991521a78efe7a37c452ad4e96432566a4becb6eee3\",\n        \"address\": \"0x6d00beaA1F921f22f10bAda079f2fb1bf0342e38\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 234,\n        \"blockHash\": \"0x2642856bef1171d00f41f86275b847b85308e985981c0a46fcec0dc144d7cf92\"\n      }\n    ],\n    \"blockNumber\": 20166820,\n    \"cumulativeGasUsed\": \"13751578\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x0db7730bdd90c823601ed32395c8b2f3307fd4adc477ca22bf3ed406c1b3ae4a\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x13d60704c96e0d88380cc2db7367cf17848b03fcd410fade3ba7161046cabeac\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523462000030576200001e620000186200013d565b620002d7565b604051610aed620004718239610aed90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160401b0381116200006d5760208091020190565b90929192620000bd620000b7826200008c565b62000073565b93818552602080860192028301928184116200003057915b838310620000e35750505050565b8251815260209283019201620000d5565b9080601f83011215620000305781516200011192602001620000a4565b90565b90602082820312620000305781516001600160401b0381116200003057620001119201620000f4565b6200011162000f5e80380380620001548162000073565b92833981019062000114565b6200011162000111620001119290565b634e487b7160e01b600052601160045260246000fd5b6000198114620001965760010190565b62000170565b634e487b7160e01b600052603260045260246000fd5b90620001bc825190565b811015620001ce576020809102010190565b6200019c565b15620001dc57565b60405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c7265616479206164646564000000000000000000006044820152606490fd5b9060ff905b9181191691161790565b9062000243620001116200024b92151590565b825462000221565b9055565b8054821015620001ce576200026b600191600052602060002090565b91020190600090565b9160001960089290920291821b911b62000226565b91906200029b620001116200024b9390565b90835462000274565b90815491680100000000000000008310156200006d5782620002d09160016200008a950181556200024f565b9062000289565b90620002e26200038c565b620002ee600062000160565b620002fb62000111845190565b8110156200038757806200037b620003206200031c620003819487620001b2565b5190565b62000373600162000358620003526200034e62000347868590600052602052604060002090565b5460ff1690565b1590565b620001d4565b6200036d838290600052602052604060002090565b62000230565b6002620002a4565b62000186565b620002ee565b509050565b6200008a80336200040e565b62000111905b6001600160a01b031690565b62000111905462000398565b906001600160a01b039062000226565b62000111906200039e906001600160a01b031682565b6200011190620003c6565b6200011190620003dc565b9062000406620001116200024b92620003e7565b8254620003b6565b6200041a6000620003aa565b9062000428816000620003f2565b6200045f620004587f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620003e7565b91620003e7565b916200046a60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806319d091521461009257806361ba662a1461008d578063687bc0ab14610088578063715018a6146100835780638da5cb5b1461007e578063a26c04ee14610079578063b86e2d72146100745763f2fde38b036100a057610339565b6102dd565b610247565b610208565b6101e4565b6101bd565b61012e565b6100fd565b805b036100a057565b600080fd5b905035906100b282610097565b565b906020828203126100a0576100c8916100a5565b90565b6100c8916008021c5b60ff1690565b906100c891546100cb565b60009081526001602052604081206100c891906100da565b346100a05761012a6101186101133660046100b4565b6100e5565b60405191829182901515815260200190565b0390f35b346100a0576101466101413660046100b4565b6106e8565b604051005b60009103126100a057565b9061017661016f610165845190565b8084529260200190565b9260200190565b9060005b8181106101875750505090565b9091926101a461019d6001928651815260200190565b9460200190565b92910161017a565b60208082526100c892910190610156565b346100a0576101cd36600461014b565b61012a6101d861087e565b604051918291826101ac565b346100a0576101f436600461014b565b610146610389565b6001600160a01b031690565b346100a05761021836600461014b565b61012a61022d6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100a05761014661025a3660046100b4565b6107b6565b634e487b7160e01b600052603260045260246000fd5b80548210156102985761028f600191600052602060002090565b91020190600090565b61025f565b6100c8916008021c81565b906100c8915461029d565b600260006102bf825490565b8310156102da57506100c8916102d491610275565b906102a8565b80fd5b346100a05761012a6102f86102f33660046100b4565b6102b3565b6040515b9182918290815260200190565b6001600160a01b038116610099565b905035906100b282610309565b906020828203126100a0576100c891610318565b346100a05761014661034c366004610325565b6104aa565b6103596103e5565b6100b2610377565b6101fc6100c86100c89290565b6100c890610361565b6100b2610384600061036e565b610509565b6100b2610351565b1561039857565b60405162461bcd60e51b8152806103e1600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100b26103fa6000546001600160a01b031690565b610413610406336101fc565b916001600160a01b031690565b14610391565b6100b2906104256103e5565b610485565b1561043157565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100b2906103846104996101fc600061036e565b6001600160a01b038316141561042a565b6100b290610419565b906001600160a01b03905b9181191691161790565b6100c8906101fc906001600160a01b031682565b6100c8906104c8565b6100c8906104dc565b906104fe6100c8610505926104e5565b82546104b3565b9055565b6000546001600160a01b0316906105218160006104ee565b61055461054e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104e5565b916104e5565b9161055e60405190565b600090a3565b6100b2906105706103e5565b610661565b6100c8906100d4565b6100c89054610575565b1561058f57565b60405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b6044820152606490fd5b9060ff906104be565b906105e66100c861050592151590565b82546105cd565b634e487b7160e01b600052604160045260246000fd5b9160001960089290920291821b911b6104be565b91906106266100c86105059390565b908354610603565b908154916801000000000000000083101561065c57826106569160016100b295018155610275565b90610617565b6105ed565b6106aa600161069161068c610688610683868590600052602052604060002090565b61057e565b1590565b610588565b6106a5838290600052602052604060002090565b6105d6565b6106b581600261062e565b6106e37fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b916102fc60405190565b0390a1565b6100b290610564565b6100b2906106fd6103e5565b610743565b1561070957565b60405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b6044820152606490fd5b61077d6001610767610762610683858490600052602052604060002090565b610702565b6106a58360009290600052602052604060002090565b610788816002610971565b6106e37f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd916102fc60405190565b6100b2906106f1565b6100c89081565b6100c890546107bf565b906107eb6107df610165845490565b92600052602060002090565b9060005b8181106107fc5750505090565b909192610820610819600192610811876107c6565b815260200190565b9460010190565b9291016107ef565b906100c8916107d0565b90601f01601f1916810190811067ffffffffffffffff82111761065c57604052565b906100b261086e9261086560405190565b93848092610828565b0383610832565b6100c890610854565b6100c86002610875565b906108976107df610165845490565b9060005b8181106108a85750505090565b9091926108bd610819600192610811876107c6565b92910161089b565b906100c891610888565b906100b261086e926108e060405190565b938480926108c5565b6100c8906108cf565b6100c86100c86100c89290565b634e487b7160e01b600052601160045260246000fd5b9190820391821161092257565b6108ff565b634e487b7160e01b600052603160045260246000fd5b6100b291600091610617565b8054801561096c5760001901906109696109638383610275565b9061093d565b55565b610927565b61098661098d92610981836108e9565b610a53565b9092901590565b156109cf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6100b2916109ee6109de835490565b6109e860016108f2565b90610915565b908181036109fe575b5050610949565b610656610a116102d4610a189486610275565b9184610275565b38806109f7565b60001981146109225760010190565b90610a37825190565b811015610298576020809102010190565b6100c86000196108f2565b91908251926000610a63816108f2565b855b811015610aaa57610a7d610a798285610a2e565b5190565b8490610a88565b9190565b14610aa057610a99610a6591610a1f565b9050610a63565b9450505050600190565b5093505050610a84610a4856fea2646970667358221220cea7059c06059b0cdd2bc4094fb91f900abb58ad31de2b8f44a6d19c080e596264736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806319d091521461009257806361ba662a1461008d578063687bc0ab14610088578063715018a6146100835780638da5cb5b1461007e578063a26c04ee14610079578063b86e2d72146100745763f2fde38b036100a057610339565b6102dd565b610247565b610208565b6101e4565b6101bd565b61012e565b6100fd565b805b036100a057565b600080fd5b905035906100b282610097565b565b906020828203126100a0576100c8916100a5565b90565b6100c8916008021c5b60ff1690565b906100c891546100cb565b60009081526001602052604081206100c891906100da565b346100a05761012a6101186101133660046100b4565b6100e5565b60405191829182901515815260200190565b0390f35b346100a0576101466101413660046100b4565b6106e8565b604051005b60009103126100a057565b9061017661016f610165845190565b8084529260200190565b9260200190565b9060005b8181106101875750505090565b9091926101a461019d6001928651815260200190565b9460200190565b92910161017a565b60208082526100c892910190610156565b346100a0576101cd36600461014b565b61012a6101d861087e565b604051918291826101ac565b346100a0576101f436600461014b565b610146610389565b6001600160a01b031690565b346100a05761021836600461014b565b61012a61022d6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100a05761014661025a3660046100b4565b6107b6565b634e487b7160e01b600052603260045260246000fd5b80548210156102985761028f600191600052602060002090565b91020190600090565b61025f565b6100c8916008021c81565b906100c8915461029d565b600260006102bf825490565b8310156102da57506100c8916102d491610275565b906102a8565b80fd5b346100a05761012a6102f86102f33660046100b4565b6102b3565b6040515b9182918290815260200190565b6001600160a01b038116610099565b905035906100b282610309565b906020828203126100a0576100c891610318565b346100a05761014661034c366004610325565b6104aa565b6103596103e5565b6100b2610377565b6101fc6100c86100c89290565b6100c890610361565b6100b2610384600061036e565b610509565b6100b2610351565b1561039857565b60405162461bcd60e51b8152806103e1600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100b26103fa6000546001600160a01b031690565b610413610406336101fc565b916001600160a01b031690565b14610391565b6100b2906104256103e5565b610485565b1561043157565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100b2906103846104996101fc600061036e565b6001600160a01b038316141561042a565b6100b290610419565b906001600160a01b03905b9181191691161790565b6100c8906101fc906001600160a01b031682565b6100c8906104c8565b6100c8906104dc565b906104fe6100c8610505926104e5565b82546104b3565b9055565b6000546001600160a01b0316906105218160006104ee565b61055461054e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104e5565b916104e5565b9161055e60405190565b600090a3565b6100b2906105706103e5565b610661565b6100c8906100d4565b6100c89054610575565b1561058f57565b60405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b6044820152606490fd5b9060ff906104be565b906105e66100c861050592151590565b82546105cd565b634e487b7160e01b600052604160045260246000fd5b9160001960089290920291821b911b6104be565b91906106266100c86105059390565b908354610603565b908154916801000000000000000083101561065c57826106569160016100b295018155610275565b90610617565b6105ed565b6106aa600161069161068c610688610683868590600052602052604060002090565b61057e565b1590565b610588565b6106a5838290600052602052604060002090565b6105d6565b6106b581600261062e565b6106e37fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b916102fc60405190565b0390a1565b6100b290610564565b6100b2906106fd6103e5565b610743565b1561070957565b60405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b6044820152606490fd5b61077d6001610767610762610683858490600052602052604060002090565b610702565b6106a58360009290600052602052604060002090565b610788816002610971565b6106e37f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd916102fc60405190565b6100b2906106f1565b6100c89081565b6100c890546107bf565b906107eb6107df610165845490565b92600052602060002090565b9060005b8181106107fc5750505090565b909192610820610819600192610811876107c6565b815260200190565b9460010190565b9291016107ef565b906100c8916107d0565b90601f01601f1916810190811067ffffffffffffffff82111761065c57604052565b906100b261086e9261086560405190565b93848092610828565b0383610832565b6100c890610854565b6100c86002610875565b906108976107df610165845490565b9060005b8181106108a85750505090565b9091926108bd610819600192610811876107c6565b92910161089b565b906100c891610888565b906100b261086e926108e060405190565b938480926108c5565b6100c8906108cf565b6100c86100c86100c89290565b634e487b7160e01b600052601160045260246000fd5b9190820391821161092257565b6108ff565b634e487b7160e01b600052603160045260246000fd5b6100b291600091610617565b8054801561096c5760001901906109696109638383610275565b9061093d565b55565b610927565b61098661098d92610981836108e9565b610a53565b9092901590565b156109cf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6100b2916109ee6109de835490565b6109e860016108f2565b90610915565b908181036109fe575b5050610949565b610656610a116102d4610a189486610275565b9184610275565b38806109f7565b60001981146109225760010190565b90610a37825190565b811015610298576020809102010190565b6100c86000196108f2565b91908251926000610a63816108f2565b855b811015610aaa57610a7d610a798285610a2e565b5190565b8490610a88565b9190565b14610aa057610a99610a6591610a1f565b9050610a63565b9450505050600190565b5093505050610a84610a4856fea2646970667358221220cea7059c06059b0cdd2bc4094fb91f900abb58ad31de2b8f44a6d19c080e596264736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 8924,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 8927,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/NullifierRegistry.json",
    "content": "{\n  \"address\": \"0xcE4d0DE6589bF2b439d08dc9addD56428D76eC25\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"nullifier\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NullifierAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_nullifier\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addNullifier\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWriters\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isNullified\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWriter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removedWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"writers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x02df2778eb6e733417ff174a913a9668c58fe186ebd459f843a524968028f490\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xcE4d0DE6589bF2b439d08dc9addD56428D76eC25\",\n    \"transactionIndex\": 62,\n    \"gasUsed\": \"782784\",\n    \"logsBloom\": \"0x00040000000000000000000000000000000000000000004004800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xa30de9210af6bf7c48e0dbb6de1b9fb7ae4d12957d7c5c411a0e14290657a3cf\",\n    \"transactionHash\": \"0x02df2778eb6e733417ff174a913a9668c58fe186ebd459f843a524968028f490\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 62,\n        \"blockNumber\": 20166825,\n        \"transactionHash\": \"0x02df2778eb6e733417ff174a913a9668c58fe186ebd459f843a524968028f490\",\n        \"address\": \"0xcE4d0DE6589bF2b439d08dc9addD56428D76eC25\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 208,\n        \"blockHash\": \"0xa30de9210af6bf7c48e0dbb6de1b9fb7ae4d12957d7c5c411a0e14290657a3cf\"\n      }\n    ],\n    \"blockNumber\": 20166825,\n    \"cumulativeGasUsed\": \"9578995\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"nullifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NullifierAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_nullifier\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addNullifier\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWriters\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isNullified\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWriter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removedWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"writers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"params\\\":{\\\"_nullifier\\\":\\\"The nullifier to store\\\"}},\\\"addWritePermission(address)\\\":{\\\"params\\\":{\\\"_newWriter\\\":\\\"The nullifier to store\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeWritePermission(address)\\\":{\\\"params\\\":{\\\"_removedWriter\\\":\\\"The nullifier to store\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"notice\\\":\\\"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\"},\\\"addWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\"},\\\"removeWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/NullifierRegistry.sol\\\":\\\"NullifierRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/NullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"./lib/AddressArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./interfaces/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\\\n    event WriterAdded(address writer);\\\\n    event WriterRemoved(address writer);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyWriter() {\\\\n        require(isWriter[msg.sender], \\\\\\\"Only addresses with write permissions can call\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(bytes32 => bool) public isNullified;\\\\n    mapping(address => bool) public isWriter;\\\\n    address[] public writers;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor() Ownable() {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\\n     *\\\\n     * @param _nullifier    The nullifier to store\\\\n     */\\\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\\\n        require(!isNullified[_nullifier], \\\\\\\"Nullifier already exists\\\\\\\");\\\\n\\\\n        isNullified[_nullifier] = true;\\\\n\\\\n        emit NullifierAdded(_nullifier, msg.sender);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\\n     *\\\\n     * @param _newWriter    The nullifier to store\\\\n     */\\\\n    function addWritePermission(address _newWriter) external onlyOwner {\\\\n        require(!isWriter[_newWriter], \\\\\\\"Address is already a writer\\\\\\\");\\\\n\\\\n        isWriter[_newWriter] = true;\\\\n        writers.push(_newWriter);\\\\n\\\\n        emit WriterAdded(_newWriter);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\\n     *\\\\n     * @param _removedWriter    The nullifier to store\\\\n     */\\\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\\\n        require(isWriter[_removedWriter], \\\\\\\"Address is not a writer\\\\\\\");\\\\n\\\\n        isWriter[_removedWriter] = false;\\\\n        writers.removeStorage(_removedWriter);\\\\n\\\\n        emit WriterRemoved(_removedWriter);\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getWriters() external view returns(address[] memory) {\\\\n       return writers;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x2c461bc3e7074c455f0e7cce2edceb6db47d158ce38f8562ba3c02d41fd4ea77\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6080604052346200002657620000146200002b565b604051610cb3620001278239610cb390f35b600080fd5b6200003562000037565b565b620000358033620000c4565b62000055905b6001600160a01b031690565b90565b62000055905462000043565b620000559062000049906001600160a01b031682565b620000559062000064565b62000055906200007a565b90620000a462000055620000c09262000085565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620000d0600062000058565b90620000de81600062000090565b620001156200010e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000085565b9162000085565b916200012060405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063169394bb146100b2578063286f9201146100ad5780632b29ba23146100a85780635bd4df32146100a357806366a526721461009e578063715018a6146100995780638da5cb5b14610094578063cb01316c1461008f578063d6da03261461008a5763f2fde38b036100c0576103ce565b6103b6565b61038f565b610304565b6102ec565b6102ab565b610213565b6101f8565b610199565b61012c565b805b036100c057565b600080fd5b905035906100d2826100b7565b565b906020828203126100c0576100e8916100c5565b90565b905b600052602052604060002090565b6100e8916008021c5b60ff1690565b906100e891546100fb565b6100e8906101276001916000926100eb565b61010a565b346100c0576101596101476101423660046100d4565b610115565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b0381166100b9565b905035906100d282610169565b906020828203126100c0576100e891610178565b346100c0576101b16101ac366004610185565b610970565b604051005b6100e89061015d906001600160a01b031682565b6100e8906101b6565b6100e8906101ca565b906100ed906101d3565b6100e8906101276002916000926101dc565b346100c05761015961014761020e366004610185565b6101e6565b346100c0576101b16102263660046100d4565b610763565b634e487b7160e01b600052603260045260246000fd5b80548210156102645761025b600191600052602060002090565b91020190600090565b61022b565b6100e8916008021c61015d565b906100e89154610269565b6003600061028d825490565b8310156102a857506100e8916102a291610241565b90610276565b80fd5b346100c0576101596102c66102c13660046100d4565b610281565b6040515b918291826001600160a01b03909116815260200190565b60009103126100c057565b346100c0576102fc3660046102e1565b6101b161043b565b346100c0576103143660046102e1565b6101596102c66103f9565b9061033f61033861032e845190565b8084529260200190565b9260200190565b9060005b8181106103505750505090565b90919261037661036f60019286516001600160a01b0316815260200190565b9460200190565b929101610343565b60208082526100e89291019061031f565b346100c05761039f3660046102e1565b6101596103aa610a30565b6040519182918261037e565b346100c0576101b16103c9366004610185565b6108ab565b346100c0576101b16103e1366004610185565b610552565b6100e89061015d565b6100e890546103e6565b6100e860006103ef565b61040b610497565b6100d2610429565b61015d6100e86100e89290565b6100e890610413565b6100d26104366000610420565b61058b565b6100d2610403565b1561044a57565b60405162461bcd60e51b815280610493600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100d26104a26103f9565b6104bb6104ae3361015d565b916001600160a01b031690565b14610443565b6100d2906104cd610497565b61052d565b156104d957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100d29061043661054161015d6000610420565b6001600160a01b03831614156104d2565b6100d2906104c1565b906001600160a01b03905b9181191691161790565b906105806100e8610587926101d3565b825461055b565b9055565b61059560006103ef565b906105a1816000610570565b6105d46105ce7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101d3565b916101d3565b916105de60405190565b600090a3565b6100e890610104565b6100e890546105e4565b156105fe57565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608490fd5b6100d29061067961067461066f3360026101dc565b6105ed565b6105f7565b6106ea565b1561068557565b60405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606490fd5b9060ff90610566565b906106e36100e861058792151590565b82546106ca565b61071a600161070b61070661070261066f86856100eb565b1590565b61067e565b61071583826100eb565b6106d3565b7f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f8361075e610747336101d3565b9261075160405190565b9182918290815260200190565b0390a2565b6100d29061065a565b6100d290610778610497565b610844565b1561078457565b60405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b916001600160a01b0360089290920291821b911b610566565b91906108096100e8610587936101d3565b9083546107df565b908154916801000000000000000083101561083f57826108399160016100d295018155610241565b906107f8565b6107c9565b61086d600261086161085c61070261066f86856101dc565b61077d565b610715836001926101dc565b610878816003610811565b6108a67f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e916102ca60405190565b0390a1565b6100d29061076c565b6100d2906108c0610497565b610911565b156108cc57565b60405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f742061207772697465720000000000000000006044820152606490fd5b610937600261092b61092661066f85846101dc565b6108c5565b610715836000926101dc565b610942816003610b23565b6108a67f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e916102ca60405190565b6100d2906108b4565b9061099461098861032e845490565b92600052602060002090565b9060005b8181106109a55750505090565b9091926109d26109cb6001926109ba876103ef565b6001600160a01b0316815260200190565b9460010190565b929101610998565b906100e891610979565b90601f01601f1916810190811067ffffffffffffffff82111761083f57604052565b906100d2610a2092610a1760405190565b938480926109da565b03836109e4565b6100e890610a06565b6100e86003610a27565b90610a4961098861032e845490565b9060005b818110610a5a5750505090565b909192610a6f6109cb6001926109ba876103ef565b929101610a4d565b906100e891610a3a565b906100d2610a2092610a9260405190565b93848092610a77565b6100e890610a81565b6100e86100e86100e89290565b634e487b7160e01b600052601160045260246000fd5b91908203918211610ad457565b610ab1565b634e487b7160e01b600052603160045260246000fd5b6100d2916000916107f8565b80548015610b1e576000190190610b1b610b158383610241565b90610aef565b55565b610ad9565b610b38610b3f92610b3383610a9b565b610c05565b9092901590565b15610b815760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6100d291610ba0610b90835490565b610b9a6001610aa4565b90610ac7565b90818103610bb0575b5050610afb565b610839610bc36102a2610bca9486610241565b9184610241565b3880610ba9565b6000198114610ad45760010190565b90610be9825190565b811015610264576020809102010190565b6100e8600019610aa4565b91908251926000610c1581610aa4565b855b811015610c6c57610c38610c2b8285610be0565b516001600160a01b031690565b610c4a6001600160a01b0386166104ae565b14610c6257610c5b610c1791610bd1565b9050610c15565b9450505050600190565b5093505050610c79610bfa565b919056fea2646970667358221220ac3610fa2c1635ee2b87dd0e289f617051e7537c7f88c7217955bec887e7c00964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c8063169394bb146100b2578063286f9201146100ad5780632b29ba23146100a85780635bd4df32146100a357806366a526721461009e578063715018a6146100995780638da5cb5b14610094578063cb01316c1461008f578063d6da03261461008a5763f2fde38b036100c0576103ce565b6103b6565b61038f565b610304565b6102ec565b6102ab565b610213565b6101f8565b610199565b61012c565b805b036100c057565b600080fd5b905035906100d2826100b7565b565b906020828203126100c0576100e8916100c5565b90565b905b600052602052604060002090565b6100e8916008021c5b60ff1690565b906100e891546100fb565b6100e8906101276001916000926100eb565b61010a565b346100c0576101596101476101423660046100d4565b610115565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b0381166100b9565b905035906100d282610169565b906020828203126100c0576100e891610178565b346100c0576101b16101ac366004610185565b610970565b604051005b6100e89061015d906001600160a01b031682565b6100e8906101b6565b6100e8906101ca565b906100ed906101d3565b6100e8906101276002916000926101dc565b346100c05761015961014761020e366004610185565b6101e6565b346100c0576101b16102263660046100d4565b610763565b634e487b7160e01b600052603260045260246000fd5b80548210156102645761025b600191600052602060002090565b91020190600090565b61022b565b6100e8916008021c61015d565b906100e89154610269565b6003600061028d825490565b8310156102a857506100e8916102a291610241565b90610276565b80fd5b346100c0576101596102c66102c13660046100d4565b610281565b6040515b918291826001600160a01b03909116815260200190565b60009103126100c057565b346100c0576102fc3660046102e1565b6101b161043b565b346100c0576103143660046102e1565b6101596102c66103f9565b9061033f61033861032e845190565b8084529260200190565b9260200190565b9060005b8181106103505750505090565b90919261037661036f60019286516001600160a01b0316815260200190565b9460200190565b929101610343565b60208082526100e89291019061031f565b346100c05761039f3660046102e1565b6101596103aa610a30565b6040519182918261037e565b346100c0576101b16103c9366004610185565b6108ab565b346100c0576101b16103e1366004610185565b610552565b6100e89061015d565b6100e890546103e6565b6100e860006103ef565b61040b610497565b6100d2610429565b61015d6100e86100e89290565b6100e890610413565b6100d26104366000610420565b61058b565b6100d2610403565b1561044a57565b60405162461bcd60e51b815280610493600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100d26104a26103f9565b6104bb6104ae3361015d565b916001600160a01b031690565b14610443565b6100d2906104cd610497565b61052d565b156104d957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100d29061043661054161015d6000610420565b6001600160a01b03831614156104d2565b6100d2906104c1565b906001600160a01b03905b9181191691161790565b906105806100e8610587926101d3565b825461055b565b9055565b61059560006103ef565b906105a1816000610570565b6105d46105ce7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101d3565b916101d3565b916105de60405190565b600090a3565b6100e890610104565b6100e890546105e4565b156105fe57565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608490fd5b6100d29061067961067461066f3360026101dc565b6105ed565b6105f7565b6106ea565b1561068557565b60405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606490fd5b9060ff90610566565b906106e36100e861058792151590565b82546106ca565b61071a600161070b61070661070261066f86856100eb565b1590565b61067e565b61071583826100eb565b6106d3565b7f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f8361075e610747336101d3565b9261075160405190565b9182918290815260200190565b0390a2565b6100d29061065a565b6100d290610778610497565b610844565b1561078457565b60405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b916001600160a01b0360089290920291821b911b610566565b91906108096100e8610587936101d3565b9083546107df565b908154916801000000000000000083101561083f57826108399160016100d295018155610241565b906107f8565b6107c9565b61086d600261086161085c61070261066f86856101dc565b61077d565b610715836001926101dc565b610878816003610811565b6108a67f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e916102ca60405190565b0390a1565b6100d29061076c565b6100d2906108c0610497565b610911565b156108cc57565b60405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f742061207772697465720000000000000000006044820152606490fd5b610937600261092b61092661066f85846101dc565b6108c5565b610715836000926101dc565b610942816003610b23565b6108a67f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e916102ca60405190565b6100d2906108b4565b9061099461098861032e845490565b92600052602060002090565b9060005b8181106109a55750505090565b9091926109d26109cb6001926109ba876103ef565b6001600160a01b0316815260200190565b9460010190565b929101610998565b906100e891610979565b90601f01601f1916810190811067ffffffffffffffff82111761083f57604052565b906100d2610a2092610a1760405190565b938480926109da565b03836109e4565b6100e890610a06565b6100e86003610a27565b90610a4961098861032e845490565b9060005b818110610a5a5750505090565b909192610a6f6109cb6001926109ba876103ef565b929101610a4d565b906100e891610a3a565b906100d2610a2092610a9260405190565b93848092610a77565b6100e890610a81565b6100e86100e86100e89290565b634e487b7160e01b600052601160045260246000fd5b91908203918211610ad457565b610ab1565b634e487b7160e01b600052603160045260246000fd5b6100d2916000916107f8565b80548015610b1e576000190190610b1b610b158383610241565b90610aef565b55565b610ad9565b610b38610b3f92610b3383610a9b565b610c05565b9092901590565b15610b815760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6100d291610ba0610b90835490565b610b9a6001610aa4565b90610ac7565b90818103610bb0575b5050610afb565b610839610bc36102a2610bca9486610241565b9184610241565b3880610ba9565b6000198114610ad45760010190565b90610be9825190565b811015610264576020809102010190565b6100e8600019610aa4565b91908251926000610c1581610aa4565b855b811015610c6c57610c38610c2b8285610be0565b516001600160a01b031690565b610c4a6001600160a01b0386166104ae565b14610c6257610c5b610c1791610bd1565b9050610c15565b9450505050600190565b5093505050610c79610bfa565b919056fea2646970667358221220ac3610fa2c1635ee2b87dd0e289f617051e7537c7f88c7217955bec887e7c00964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"params\": {\n          \"_nullifier\": \"The nullifier to store\"\n        }\n      },\n      \"addWritePermission(address)\": {\n        \"params\": {\n          \"_newWriter\": \"The nullifier to store\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"params\": {\n          \"_removedWriter\": \"The nullifier to store\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"notice\": \"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\"\n      },\n      \"addWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9095,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isNullified\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 9099,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isWriter\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 9102,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"writers\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/TransferDomainProcessor.json",
    "content": "{\n  \"address\": \"0x5d915599DEaf3A15b47c2625F1910599B9D5a1fd\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"exchange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"hashedReceiverId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"domainName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[10]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[10]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc9cc5d8c6239868dbe0abe78545e7396bb9996ea53653b4bc657ba76f26d84ae\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x5d915599DEaf3A15b47c2625F1910599B9D5a1fd\",\n    \"transactionIndex\": 71,\n    \"gasUsed\": \"1844002\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000800000000000000001000000010000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000001000000000000000000000\",\n    \"blockHash\": \"0xc6c3e945dfa29a014ae30f51fcbe885ef9aead7f431766487539bb8b8641c20a\",\n    \"transactionHash\": \"0xc9cc5d8c6239868dbe0abe78545e7396bb9996ea53653b4bc657ba76f26d84ae\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 71,\n        \"blockNumber\": 20381165,\n        \"transactionHash\": \"0xc9cc5d8c6239868dbe0abe78545e7396bb9996ea53653b4bc657ba76f26d84ae\",\n        \"address\": \"0x5d915599DEaf3A15b47c2625F1910599B9D5a1fd\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 286,\n        \"blockHash\": \"0xc6c3e945dfa29a014ae30f51fcbe885ef9aead7f431766487539bb8b8641c20a\"\n      }\n    ],\n    \"blockNumber\": 20381165,\n    \"cumulativeGasUsed\": \"12709651\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x054be4cFB6e951A7dE921A179FA323c5ea3fCf47\",\n    \"0xcE4d0DE6589bF2b439d08dc9addD56428D76eC25\",\n    \"support@namecheap.com\",\n    \"0\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"a22247643263102eca9fc6c72e24c17d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"exchange\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"internalType\\\":\\\"struct ITransferDomainProcessor.TransferProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"hashedReceiverId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"domainName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/TransferDomainProcessor.sol\\\":\\\"TransferDomainProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/TransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { EmailBaseProcessor } from \\\\\\\"./external/processors/EmailBaseProcessor.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./external/interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"./external/lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\nimport { Groth16Verifier } from \\\\\\\"./verifiers/namecheap_transfer_verifier.sol\\\\\\\";\\\\nimport { ITransferDomainProcessor } from \\\\\\\"./interfaces/ITransferDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 31;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _exchange,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        EmailBaseProcessor(\\\\n            _exchange,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    )\\\\n        external\\\\n        override\\\\n        onlyExchange\\\\n        returns (\\\\n            bytes32 dkimKeyHash,\\\\n            bytes32 hashedReceiverId,\\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\");\\\\n\\\\n        // Signal [0] is the DKIM key hash\\\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\\\n\\\\n        // Signals [1:2] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\\\n        require(\\\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\n            \\\\\\\"Invalid email from address\\\\\\\"\\\\n        );\\\\n        \\\\n        // Signals [2:7] are packed domain name\\\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\\\n\\\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\\\n\\\\n        // Signal [9] is bidId\\\\n        bidId = _proof.signals[9];\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\\\n        internal \\\\n        pure \\\\n        returns (string memory) \\\\n    {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x27e7d34dbe222f5a865d0b34f276eac82f3888f00e9816c398ee5fe9cf18bb2c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/processors/EmailBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../interfaces/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract EmailBaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyExchange() {\\\\n        require(msg.sender == exchange, \\\\\\\"Only exchange can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable exchange;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _exchange,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        exchange = _exchange;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe210c8e937a457c2d2aff798f3696f04ce1d011470294f02fb1169006a385f07\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ITransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface ITransferDomainProcessor {\\\\n\\\\n    struct TransferProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[10] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    ) \\\\n        external \\\\n        returns (\\\\n            bytes32 dkimKeyHash, \\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        );\\\\n}\\\",\\\"keccak256\\\":\\\"0x9cf5f1b070d7bad73d8ae57f7b20d449853f96fcbb5df1a443723df41c91339d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/namecheap_transfer_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\\\\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\\\\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\\\\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\\\\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\\\\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\\\\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\\\\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\\\\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\\\\n\\\\n\\\\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\\\\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\\\\n\\\\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\\\\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\\\\n\\\\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\\\\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\\\\n\\\\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\\\\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\\\\n\\\\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\\\\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\\\\n\\\\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\\\\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\\\\n\\\\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\\\\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\\\\n\\\\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\\\\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\\\\n\\\\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\\\\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\\\\n\\\\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\\\\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\\\\n\\\\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\\\\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, r)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0xe7d4d4df7314df193c8206345215947c6902e58dd2e51e426eae6cc394028ca8\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523462000044576200002262000018620001f4565b929190916200021d565b604051611eb56200054c82396080518181816104da01526109460152611eb590f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200008157604052565b62000049565b906200009e6200009660405190565b92836200005f565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200004457565b905051906200009e82620000af565b6001600160a01b038116620000ba565b905051906200009e82620000d1565b6001600160401b0381116200008157602090601f01601f19160190565b60005b838110620001215750506000910152565b818101518382015260200162000110565b909291926200014b6200014582620000f0565b62000087565b9381855260208501908284011162000044576200009e926200010d565b9080601f8301121562000044578151620000ac9260200162000132565b80620000ba565b905051906200009e8262000185565b6080818303126200004457620001b28282620000c2565b92620001c28360208401620000e1565b604083015190936001600160401b0382116200004457620001ea81620000ac93860162000168565b936060016200018c565b6200021762002401803803806200020b8162000087565b9283398101906200019b565b90919293565b906200009e939291620004ab565b906001600160a01b03905b9181191691161790565b620000ac90620000a0906001600160a01b031682565b620000ac9062000240565b620000ac9062000256565b9062000280620000ac620002889262000261565b82546200022b565b9055565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620002c5575b6020831014620002bf57565b6200028c565b91607f1691620002b3565b9160001960089290920291821b911b62000236565b620000ac620000ac620000ac9290565b91906200030a620000ac6200028893620002e5565b908354620002d0565b6200009e91600091620002f5565b8181106200032d575050565b806200033d600060019362000313565b0162000321565b9190601f81116200035457505050565b620003686200009e93600052602060002090565b906020601f8401819004830193106200038c575b6020601f90910104019062000321565b90915081906200037c565b90620003a1815190565b906001600160401b0382116200008157620003c982620003c28554620002a2565b8562000344565b602090601f8311600114620004085762000288929160009183620003fc575b5050600019600883021c1916906002021790565b015190503880620003e8565b601f198316916200041e85600052602060002090565b9260005b8181106200045f5750916002939185600196941062000445575b50505002019055565b01516000196008601f8516021c191690553880806200043c565b9193602060018192878701518155019501920162000422565b906200009e9162000397565b906000199062000236565b90620004a3620000ac6200028892620002e5565b825462000484565b6200009e9392620000ac620004dc93620004d493620004c9620004e4565b60805260016200026c565b600262000478565b60036200048f565b6200009e336000546001600160a01b031690620005038160006200026c565b6200053a620005337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000261565b9162000261565b916200054560405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806365cd296c146100d2578063715018a6146100cd5780638da5cb5b146100c8578063b2a3fda4146100c3578063b870676c146100be578063c0d05fed146100b9578063ced1e978146100b4578063d2f7265a146100af578063dbac5821146100aa578063f2fde38b146100a5578063f3bb70f6146100a05763f6c7226b036100e6576106bf565b6105f9565b61057b565b610520565b6104c5565b6104aa565b610483565b6102e7565b610265565b610206565b6101dd565b61019d565b90816102409103126100e65790565b600080fd5b90610240828203126100e657610100916100d7565b90565b9052565b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b94939160609161019b946101896101969361018260808b019460008c0152565b60208a0152565b878203604089015261012a565b940152565b565b346100e6576101ce6101b86101b33660046100eb565b610d21565b906101c594929460405190565b94859485610162565b0390f35b60009103126100e657565b346100e6576101ed3660046101d2565b6101f561072c565b604051005b6001600160a01b031690565b346100e6576102163660046101d2565b6101ce6102216106ea565b604051918291826001600160a01b03909116815260200190565b805b036100e657565b9050359061019b8261023b565b906020828203126100e65761010091610244565b346100e6576101f5610278366004610251565b6115da565b610100916008021c6001600160a01b031690565b90610100915461027d565b61010060006001610291565b610100906101fa906001600160a01b031682565b610100906102a8565b610100906102bc565b610103906102c5565b60208101929161019b91906102ce565b346100e6576102f73660046101d2565b6101ce61030261029c565b604051918291826102d7565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561035a575b602083101461035557565b610324565b91607f169161034a565b805460009392916103816103778361033a565b8085529360200190565b91600181169081156103d3575060011461039a57505050565b6103ad9192939450600052602060002090565b916000925b8184106103bf5750500190565b8054848401526020909301926001016103b2565b92949550505060ff1916825215156020020190565b9061010091610364565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761042a57604052565b6103f2565b9061019b6104499261044060405190565b938480926103e8565b0383610408565b90600010610461576101009061042f565b61030e565b61010060006002610450565b60208082526101009291019061012a565b346100e6576104933660046101d2565b6101ce61049e610466565b60405191829182610472565b346100e6576104ba3660046101d2565b6101ce61049e6115e3565b346100e6576104d53660046101d2565b6101ce7f0000000000000000000000000000000000000000000000000000000000000000610221565b610100916008021c81565b9061010091546104fe565b61010060006003610509565b346100e6576105303660046101d2565b6101ce61053b610514565b6040519182918290815260200190565b6001600160a01b03811661023d565b9050359061019b8261054b565b906020828203126100e6576101009161055a565b346100e6576101f561058e366004610567565b610843565b919060408301116100e657565b919060808301116100e657565b91906101408301116100e657565b610240818303126100e6576105d08282610593565b926101006105e184604085016105a0565b936105ef8160c08601610593565b93610100016105ad565b346100e6576106093660046105bb565b92919091611dc4565b9061019b61061f60405190565b9283610408565b67ffffffffffffffff811161042a57602090601f01601f19160190565b90826000939282370152565b9092919261066461065f82610626565b610612565b938185526020850190828401116100e65761019b92610643565b9080601f830112156100e6578160206101009335910161064f565b906020828203126100e657813567ffffffffffffffff81116100e657610100920161067e565b346100e6576101f56106d2366004610699565b611594565b610100906101fa565b61010090546106d7565b61010060006106e0565b6106fc610788565b61019b61071a565b6101fa6101006101009290565b61010090610704565b61019b6107276000610711565b61087c565b61019b6106f4565b1561073b57565b60405162461bcd60e51b815280610784600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b61019b6107936106ea565b6107ac61079f336101fa565b916001600160a01b031690565b14610734565b61019b906107be610788565b61081e565b156107ca57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61019b906107276108326101fa6000610711565b6001600160a01b03831614156107c3565b61019b906107b2565b906001600160a01b03905b9181191691161790565b90610871610100610878926102c5565b825461084c565b9055565b61088660006106e0565b90610892816000610861565b6108c56108bf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936102c5565b916102c5565b916108cf60405190565b600090a3565b156108dc57565b60405162461bcd60e51b8152602060048201526024808201527f4f6e6c792065786368616e67652063616e2063616c6c20746869732066756e636044820152633a34b7b760e11b6064820152608490fd5b61097694939291906109713361096b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661079f565b146108d5565b610b73565b90919293565b80151561023d565b9050519061019b8261097c565b906020828203126100e65761010091610984565b9037565b61019b916040916109a5565b9061015e816040936109a9565b6109d26109ce60029390565b9190565b806000925b8484106109e5575050505050565b610a016109fa6001926109f58690565b6109b5565b9360400190565b930192916109d7565b61019b91610140916109a5565b610a4f61019b94610a4561010094989795610a3b61024086019a60008701906109a9565b60408501906109c2565b60c08301906109a9565b0190610a0a565b6040513d6000823e3d90fd5b15610a6957565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90600a811015610ac5576020020190565b610a9e565b6101006101006101009290565b356101008161023b565b610aee6101006101009290565b60ff1690565b61015e610b0c92602092610b06815190565b94859290565b93849101610107565b61010091610af4565b6101009061042f565b15610b2e57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606490fd5b50505050610b80306102c5565b602063f3bb70f6916000840190610bb96040860194610bc461010060c0890198018098610bac60405190565b9889978896879660e01b90565b865260048601610a17565b03915afa8015610d1c57610be091600091610cee575b50610a62565b610c03610bfe610bf9610bf36000610aca565b84610ab4565b610ad7565b610aca565b91600290610c88610c146001610ae1565b92610c826109ce610c73610c32610c2a85610ae1565b80988a610e1c565b610c5a610c3e60405190565b8092610c4e602083019182610b15565b90810382520382610408565b610c6c610c65825190565b9160200190565b2093610b1e565b610c7e610c65825190565b2090565b14610b27565b610100610bf9610cbc610bfe610bf9610cb6610cb0600798610ca98a610ae1565b908b610e1c565b97610aca565b88610ab4565b94610cde610cd9610bfe610bf9610cd36008610aca565b85610ab4565b611639565b610ce86009610aca565b90610ab4565b610d0f915060203d8111610d15575b610d078183610408565b810190610991565b38610bda565b503d610cfd565b610a56565b6109769060006060818061092d565b634e487b7160e01b600052601160045260246000fd5b610d559060ff165b9160ff1690565b90039060ff8211610d6257565b610d30565b6101006101006101009260ff1690565b67ffffffffffffffff811161042a5760208091020190565b90610d9c61065f83610d77565b918252565b369037565b9061019b610dbc610db684610d8f565b93610d77565b601f190160208401610da1565b6000198114610d625760010190565b91908203918211610d6257565b90610dee825190565b811015610ac5576020809102010190565b610100601f610aca565b81810292918115918404141715610d6257565b909290610e39610e34610e2f8686610d46565b610d67565b610da6565b91610e4385610d67565b610e4c85610d67565b811015610e9457610e8d81610e88610e6a610bf9610e4c9588610ab4565b610e85610e7f610e798c610d67565b85610dd8565b89610de5565b52565b610dc9565b9050610e43565b509350506101009150610ea5815190565b90610eb8610eb1610dff565b8093610e09565b906110c9565b90610d9c61065f83610626565b9061019b610dbc610edb84610ebe565b93610626565b610eee6101006101009290565b61ffff1690565b61ffff1661ffff8114610d625760010190565b6101006101006101009261ffff1690565b61010090610f2a6109ce6101009490565b901c90565b634e487b7160e01b600052601260045260246000fd5b610f519060ff16610d4e565b908115610f5c570690565b610f2f565b610f6d9060ff16610d4e565b019060ff8211610d6257565b610f8f610f896101009260ff1690565b60f81b90565b6001600160f81b03191690565b90610fa5825190565b811015610ac5570160200190565b61010090610f2a6109ce6101009460ff1690565b15610fce57565b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a490fd5b1561106657565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b926000926110d684610ae1565b6110ef6110ea836110e5895190565b610e09565b610ecb565b946110f981610aca565b9561110382610ee1565b965b6111106101008a5190565b61111989610f08565b10156112e75761113861113461112e8a610f08565b8b610de5565b5190565b98899661114487610da6565b9861114e86610aca565b8881101561119b5780610e888c8f6111969461118861118361118e9361117d6111776008610aca565b85610e09565b90610f19565b610ae1565b92610de5565b9060ff169052565b61114e565b5091909a50989295989793969194976111b388610aca565b955b8a8710156112c6576111d4610e2f6111cd8989610de5565b5160ff1690565b6111dd8a610aca565b811461127957906111f86111f361120a93610ae1565b610f79565b8a1a611204828b610f9c565b53610dc9565b9261121e6112186002610ae1565b8b610f45565b61122a610d4e8b610ae1565b14611255575b61124861124e915b6112426008610ae1565b90610fb3565b96610dc9565b95926111b5565b9861124861127061124e9261126a6001610ae1565b90610f61565b9a915050611230565b50926112886112186002610ae1565b600190611297610d4e83610ae1565b146112aa575b5061124861124e91611238565b6112be61124e929b61126a61124893610ae1565b9a915061129d565b989550935097949598916112da9150610ef5565b9695979197949094611105565b926109ce919598506101009750610100945061131a92509561010061132197611313610d4e6001610ae1565b1015610fc7565b111561105f565b611333565b610f8f610f896101009290565b80519060009261134284610aca565b61134d610100845190565b8110156113ef5761136f6113618285610f9c565b516001600160f81b03191690565b61138961137b87611326565b916001600160f81b03191690565b1461139c5761139790610dc9565b611342565b9250905b6113a983610ecb565b916113b385610aca565b845b8110156113e3576113dc816113d06113616113b59487610f9c565b881a6112048288610f9c565b90506113b3565b50935050610100915090565b50906113a0565b61019b90611402610788565b611589565b9160001960089290920291821b911b610857565b919061142c61010061087893610aca565b908354611407565b61019b9160009161141b565b81811061144b575050565b806114596000600193611434565b01611440565b9190601f811161146e57505050565b61148061019b93600052602060002090565b906020601f8401819004830193106114a2575b6020601f909101040190611440565b9091508190611493565b906114b5815190565b9067ffffffffffffffff821161042a576114d9826114d3855461033a565b8561145f565b602090601f831160011461151457610878929160009183611509575b5050600019600883021c1916906002021790565b0151905038806114f5565b601f1983169161152985600052602060002090565b9260005b8181106115675750916002939185600196941061154e575b50505002019055565b01516000196008601f8516021c19169055388080611545565b9193602060018192878701518155019501920161152d565b9061019b916114ac565b61019b90600261157f565b61019b906113f6565b61019b906115a9610788565b6115cf565b9060001990610857565b906115c861010061087892610aca565b82546115ae565b61019b9060036115b8565b61019b9061159d565b6101006002610b1e565b156115f457565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b611668602061165061164b60016106e0565b6102c5565b63169394bb9061165f60405190565b93849260e01b90565b82526004820185905260249082905afa908115610d1c57611698916116939160009161170b57501590565b6115ed565b6116a561164b60016106e0565b90635bd4df3290823b156100e6576116e2926116d4600080946116c760405190565b9687958694859360e01b90565b835260048301526024820190565b03925af18015610d1c576116f35750565b61019b9060006117038183610408565b8101906101d2565b611723915060203d8111610d1557610d078183610408565b1590565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001111561175057565b6000805260206000f35b919290926040519384526020840152604083015260408260608160076107d05a03fa156117505760806040928251848201526020830151606082015260066107d05a03fa1561175057565b93909260606020947f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47866080860198611b3f61012060008901977f1e3e840b53d3d27676a7593010db26c5d9c1be77982792c6a77bc51d996f59a489527f1fd57321e650c7231e9c2bcaf52236a0c52183e7dce757a3f1d74795afb9e3b9858a015261187760008201357f0a16776c085ca9fef14f58edbe5d3a3bdab9e490c9a3eef08331d35ad2687f1a7f055317dc49fd6dcd6f0d41a0f2be1e9ee5791af5077463c528dfb11944e38ea98c61175a565b6118c6858201357f0c1ebe29c01c5507488889e7ce28a5c925303856991945abb9a582b5218fe65d7f19dcecc22906300af06e53e1474d9b7c1d903775ddc1d8fc80587b6295d805858c61175a565b61191560408201357e51b809e3826e7d4bd859712d063d94783155f1e3c2d2df15240e8e7a1084457f2deaa61988aa335a5d94e8fc258fc360642f04989206c5b2f7377375bda2f2d58c61175a565b611964888201357f05481cfc53d291fb148bad51bc06bde7867ed38f3a019ecab25623ef9712bee67f0c1ff12c2af5e77866e13bc8bf89c58fd71e00f8d9fa29f44d3dda23267e892e8c61175a565b6119b460808201357f0c4a6bb6fdf60dbd2bebbd94c6d1ee9df64d15d4daa5573259e8724aa6d204c87f263812b8d2f91cd28b047e4935b8f7690c058763f2a57e02dc585416581d7f008c61175a565b611a0460a08201357f250ca18d4fd055aaa9095afd2d9cc339494b15341db450dca87bc857af2ce63c7f0d392fbad06e8aa6134b36ab2f7e2dd3c4b9f1a6aa009025978b5c4392a735b88c61175a565b611a5460c08201357f25d7e948e6ed9a2c550e9ac258a07d4a63182e4d7f0485acbf4eaeed0605d3a87f2ebb57f846731282b83de6b1fb4972b43713d037e1201de95880dd93590cdb378c61175a565b611aa460e08201357f1ccdd1ff9c12fee3aa632ef781714c2bc0bf12f01700911ed53536eb8c06efc77f23d8f1651f2fc35e077cb85ebb8b439f03c6fe4278ab0506703076037eba42ac8c61175a565b611af56101008201357f2039ef6253562b611e7f25a9bc2040f51ca3b9418e814163399ac11e8400cb717f28b295c865a6ed002fca95eef35f5c03e2ce284451a870d8cf7652f93757a0118c61175a565b01357f0f1e0ab547325e430a7356fe384a8db2f12c7fa605bdd918070ba1f0c87d543f7f2bace91ad1b222b2adfe20661747868d7c6a0c051efa473232733d915c32bc988961175a565b80358a5201358103068688015280356040880152858101358288015260408101356080880152013560a08601527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08601527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08601527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008601527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208601527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408601527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160860152516101808501528260000101516101a08401527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08401527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08401527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008401527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220840152803561024084015201356102608201527f0346cd87c9157b61554887f5f9b224de5cbe4ff8a86144a187d3f4e29c88115a6102808201527f161cd069685c9306d50c4af8ae4066febce4c3ee37dc0ae7050c3c2867c94ddf6102a08201527f1c9613e703c7c4be8c54ac686117c49201b663c52e59a0696ab3601a31ce1a216102c08201527f292b3ecaed6bffe99dea030955f5d260b73b0d381d1edf05efa16d6fc8c0571e6102e08201526020816103008160086107d05a03fa90511690565b91611e769391611dd2600090565b50604051936103808501604052611dec6000850135611727565b611df96020850135611727565b611e066040850135611727565b611e136060850135611727565b611e206080850135611727565b611e2d60a0850135611727565b611e3a60c0850135611727565b611e4760e0850135611727565b611e55610100850135611727565b611e63610120850135611727565b611e71610140850135611727565b6117a5565b60005260206000f3fea26469706673582212205d578d1e202f46a1a10e4e4c0a699e25343984036d710450a93c5624e06ec55b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806365cd296c146100d2578063715018a6146100cd5780638da5cb5b146100c8578063b2a3fda4146100c3578063b870676c146100be578063c0d05fed146100b9578063ced1e978146100b4578063d2f7265a146100af578063dbac5821146100aa578063f2fde38b146100a5578063f3bb70f6146100a05763f6c7226b036100e6576106bf565b6105f9565b61057b565b610520565b6104c5565b6104aa565b610483565b6102e7565b610265565b610206565b6101dd565b61019d565b90816102409103126100e65790565b600080fd5b90610240828203126100e657610100916100d7565b90565b9052565b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b94939160609161019b946101896101969361018260808b019460008c0152565b60208a0152565b878203604089015261012a565b940152565b565b346100e6576101ce6101b86101b33660046100eb565b610d21565b906101c594929460405190565b94859485610162565b0390f35b60009103126100e657565b346100e6576101ed3660046101d2565b6101f561072c565b604051005b6001600160a01b031690565b346100e6576102163660046101d2565b6101ce6102216106ea565b604051918291826001600160a01b03909116815260200190565b805b036100e657565b9050359061019b8261023b565b906020828203126100e65761010091610244565b346100e6576101f5610278366004610251565b6115da565b610100916008021c6001600160a01b031690565b90610100915461027d565b61010060006001610291565b610100906101fa906001600160a01b031682565b610100906102a8565b610100906102bc565b610103906102c5565b60208101929161019b91906102ce565b346100e6576102f73660046101d2565b6101ce61030261029c565b604051918291826102d7565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561035a575b602083101461035557565b610324565b91607f169161034a565b805460009392916103816103778361033a565b8085529360200190565b91600181169081156103d3575060011461039a57505050565b6103ad9192939450600052602060002090565b916000925b8184106103bf5750500190565b8054848401526020909301926001016103b2565b92949550505060ff1916825215156020020190565b9061010091610364565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761042a57604052565b6103f2565b9061019b6104499261044060405190565b938480926103e8565b0383610408565b90600010610461576101009061042f565b61030e565b61010060006002610450565b60208082526101009291019061012a565b346100e6576104933660046101d2565b6101ce61049e610466565b60405191829182610472565b346100e6576104ba3660046101d2565b6101ce61049e6115e3565b346100e6576104d53660046101d2565b6101ce7f0000000000000000000000000000000000000000000000000000000000000000610221565b610100916008021c81565b9061010091546104fe565b61010060006003610509565b346100e6576105303660046101d2565b6101ce61053b610514565b6040519182918290815260200190565b6001600160a01b03811661023d565b9050359061019b8261054b565b906020828203126100e6576101009161055a565b346100e6576101f561058e366004610567565b610843565b919060408301116100e657565b919060808301116100e657565b91906101408301116100e657565b610240818303126100e6576105d08282610593565b926101006105e184604085016105a0565b936105ef8160c08601610593565b93610100016105ad565b346100e6576106093660046105bb565b92919091611dc4565b9061019b61061f60405190565b9283610408565b67ffffffffffffffff811161042a57602090601f01601f19160190565b90826000939282370152565b9092919261066461065f82610626565b610612565b938185526020850190828401116100e65761019b92610643565b9080601f830112156100e6578160206101009335910161064f565b906020828203126100e657813567ffffffffffffffff81116100e657610100920161067e565b346100e6576101f56106d2366004610699565b611594565b610100906101fa565b61010090546106d7565b61010060006106e0565b6106fc610788565b61019b61071a565b6101fa6101006101009290565b61010090610704565b61019b6107276000610711565b61087c565b61019b6106f4565b1561073b57565b60405162461bcd60e51b815280610784600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b61019b6107936106ea565b6107ac61079f336101fa565b916001600160a01b031690565b14610734565b61019b906107be610788565b61081e565b156107ca57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61019b906107276108326101fa6000610711565b6001600160a01b03831614156107c3565b61019b906107b2565b906001600160a01b03905b9181191691161790565b90610871610100610878926102c5565b825461084c565b9055565b61088660006106e0565b90610892816000610861565b6108c56108bf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936102c5565b916102c5565b916108cf60405190565b600090a3565b156108dc57565b60405162461bcd60e51b8152602060048201526024808201527f4f6e6c792065786368616e67652063616e2063616c6c20746869732066756e636044820152633a34b7b760e11b6064820152608490fd5b61097694939291906109713361096b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661079f565b146108d5565b610b73565b90919293565b80151561023d565b9050519061019b8261097c565b906020828203126100e65761010091610984565b9037565b61019b916040916109a5565b9061015e816040936109a9565b6109d26109ce60029390565b9190565b806000925b8484106109e5575050505050565b610a016109fa6001926109f58690565b6109b5565b9360400190565b930192916109d7565b61019b91610140916109a5565b610a4f61019b94610a4561010094989795610a3b61024086019a60008701906109a9565b60408501906109c2565b60c08301906109a9565b0190610a0a565b6040513d6000823e3d90fd5b15610a6957565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90600a811015610ac5576020020190565b610a9e565b6101006101006101009290565b356101008161023b565b610aee6101006101009290565b60ff1690565b61015e610b0c92602092610b06815190565b94859290565b93849101610107565b61010091610af4565b6101009061042f565b15610b2e57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606490fd5b50505050610b80306102c5565b602063f3bb70f6916000840190610bb96040860194610bc461010060c0890198018098610bac60405190565b9889978896879660e01b90565b865260048601610a17565b03915afa8015610d1c57610be091600091610cee575b50610a62565b610c03610bfe610bf9610bf36000610aca565b84610ab4565b610ad7565b610aca565b91600290610c88610c146001610ae1565b92610c826109ce610c73610c32610c2a85610ae1565b80988a610e1c565b610c5a610c3e60405190565b8092610c4e602083019182610b15565b90810382520382610408565b610c6c610c65825190565b9160200190565b2093610b1e565b610c7e610c65825190565b2090565b14610b27565b610100610bf9610cbc610bfe610bf9610cb6610cb0600798610ca98a610ae1565b908b610e1c565b97610aca565b88610ab4565b94610cde610cd9610bfe610bf9610cd36008610aca565b85610ab4565b611639565b610ce86009610aca565b90610ab4565b610d0f915060203d8111610d15575b610d078183610408565b810190610991565b38610bda565b503d610cfd565b610a56565b6109769060006060818061092d565b634e487b7160e01b600052601160045260246000fd5b610d559060ff165b9160ff1690565b90039060ff8211610d6257565b610d30565b6101006101006101009260ff1690565b67ffffffffffffffff811161042a5760208091020190565b90610d9c61065f83610d77565b918252565b369037565b9061019b610dbc610db684610d8f565b93610d77565b601f190160208401610da1565b6000198114610d625760010190565b91908203918211610d6257565b90610dee825190565b811015610ac5576020809102010190565b610100601f610aca565b81810292918115918404141715610d6257565b909290610e39610e34610e2f8686610d46565b610d67565b610da6565b91610e4385610d67565b610e4c85610d67565b811015610e9457610e8d81610e88610e6a610bf9610e4c9588610ab4565b610e85610e7f610e798c610d67565b85610dd8565b89610de5565b52565b610dc9565b9050610e43565b509350506101009150610ea5815190565b90610eb8610eb1610dff565b8093610e09565b906110c9565b90610d9c61065f83610626565b9061019b610dbc610edb84610ebe565b93610626565b610eee6101006101009290565b61ffff1690565b61ffff1661ffff8114610d625760010190565b6101006101006101009261ffff1690565b61010090610f2a6109ce6101009490565b901c90565b634e487b7160e01b600052601260045260246000fd5b610f519060ff16610d4e565b908115610f5c570690565b610f2f565b610f6d9060ff16610d4e565b019060ff8211610d6257565b610f8f610f896101009260ff1690565b60f81b90565b6001600160f81b03191690565b90610fa5825190565b811015610ac5570160200190565b61010090610f2a6109ce6101009460ff1690565b15610fce57565b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a490fd5b1561106657565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b926000926110d684610ae1565b6110ef6110ea836110e5895190565b610e09565b610ecb565b946110f981610aca565b9561110382610ee1565b965b6111106101008a5190565b61111989610f08565b10156112e75761113861113461112e8a610f08565b8b610de5565b5190565b98899661114487610da6565b9861114e86610aca565b8881101561119b5780610e888c8f6111969461118861118361118e9361117d6111776008610aca565b85610e09565b90610f19565b610ae1565b92610de5565b9060ff169052565b61114e565b5091909a50989295989793969194976111b388610aca565b955b8a8710156112c6576111d4610e2f6111cd8989610de5565b5160ff1690565b6111dd8a610aca565b811461127957906111f86111f361120a93610ae1565b610f79565b8a1a611204828b610f9c565b53610dc9565b9261121e6112186002610ae1565b8b610f45565b61122a610d4e8b610ae1565b14611255575b61124861124e915b6112426008610ae1565b90610fb3565b96610dc9565b95926111b5565b9861124861127061124e9261126a6001610ae1565b90610f61565b9a915050611230565b50926112886112186002610ae1565b600190611297610d4e83610ae1565b146112aa575b5061124861124e91611238565b6112be61124e929b61126a61124893610ae1565b9a915061129d565b989550935097949598916112da9150610ef5565b9695979197949094611105565b926109ce919598506101009750610100945061131a92509561010061132197611313610d4e6001610ae1565b1015610fc7565b111561105f565b611333565b610f8f610f896101009290565b80519060009261134284610aca565b61134d610100845190565b8110156113ef5761136f6113618285610f9c565b516001600160f81b03191690565b61138961137b87611326565b916001600160f81b03191690565b1461139c5761139790610dc9565b611342565b9250905b6113a983610ecb565b916113b385610aca565b845b8110156113e3576113dc816113d06113616113b59487610f9c565b881a6112048288610f9c565b90506113b3565b50935050610100915090565b50906113a0565b61019b90611402610788565b611589565b9160001960089290920291821b911b610857565b919061142c61010061087893610aca565b908354611407565b61019b9160009161141b565b81811061144b575050565b806114596000600193611434565b01611440565b9190601f811161146e57505050565b61148061019b93600052602060002090565b906020601f8401819004830193106114a2575b6020601f909101040190611440565b9091508190611493565b906114b5815190565b9067ffffffffffffffff821161042a576114d9826114d3855461033a565b8561145f565b602090601f831160011461151457610878929160009183611509575b5050600019600883021c1916906002021790565b0151905038806114f5565b601f1983169161152985600052602060002090565b9260005b8181106115675750916002939185600196941061154e575b50505002019055565b01516000196008601f8516021c19169055388080611545565b9193602060018192878701518155019501920161152d565b9061019b916114ac565b61019b90600261157f565b61019b906113f6565b61019b906115a9610788565b6115cf565b9060001990610857565b906115c861010061087892610aca565b82546115ae565b61019b9060036115b8565b61019b9061159d565b6101006002610b1e565b156115f457565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b611668602061165061164b60016106e0565b6102c5565b63169394bb9061165f60405190565b93849260e01b90565b82526004820185905260249082905afa908115610d1c57611698916116939160009161170b57501590565b6115ed565b6116a561164b60016106e0565b90635bd4df3290823b156100e6576116e2926116d4600080946116c760405190565b9687958694859360e01b90565b835260048301526024820190565b03925af18015610d1c576116f35750565b61019b9060006117038183610408565b8101906101d2565b611723915060203d8111610d1557610d078183610408565b1590565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001111561175057565b6000805260206000f35b919290926040519384526020840152604083015260408260608160076107d05a03fa156117505760806040928251848201526020830151606082015260066107d05a03fa1561175057565b93909260606020947f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47866080860198611b3f61012060008901977f1e3e840b53d3d27676a7593010db26c5d9c1be77982792c6a77bc51d996f59a489527f1fd57321e650c7231e9c2bcaf52236a0c52183e7dce757a3f1d74795afb9e3b9858a015261187760008201357f0a16776c085ca9fef14f58edbe5d3a3bdab9e490c9a3eef08331d35ad2687f1a7f055317dc49fd6dcd6f0d41a0f2be1e9ee5791af5077463c528dfb11944e38ea98c61175a565b6118c6858201357f0c1ebe29c01c5507488889e7ce28a5c925303856991945abb9a582b5218fe65d7f19dcecc22906300af06e53e1474d9b7c1d903775ddc1d8fc80587b6295d805858c61175a565b61191560408201357e51b809e3826e7d4bd859712d063d94783155f1e3c2d2df15240e8e7a1084457f2deaa61988aa335a5d94e8fc258fc360642f04989206c5b2f7377375bda2f2d58c61175a565b611964888201357f05481cfc53d291fb148bad51bc06bde7867ed38f3a019ecab25623ef9712bee67f0c1ff12c2af5e77866e13bc8bf89c58fd71e00f8d9fa29f44d3dda23267e892e8c61175a565b6119b460808201357f0c4a6bb6fdf60dbd2bebbd94c6d1ee9df64d15d4daa5573259e8724aa6d204c87f263812b8d2f91cd28b047e4935b8f7690c058763f2a57e02dc585416581d7f008c61175a565b611a0460a08201357f250ca18d4fd055aaa9095afd2d9cc339494b15341db450dca87bc857af2ce63c7f0d392fbad06e8aa6134b36ab2f7e2dd3c4b9f1a6aa009025978b5c4392a735b88c61175a565b611a5460c08201357f25d7e948e6ed9a2c550e9ac258a07d4a63182e4d7f0485acbf4eaeed0605d3a87f2ebb57f846731282b83de6b1fb4972b43713d037e1201de95880dd93590cdb378c61175a565b611aa460e08201357f1ccdd1ff9c12fee3aa632ef781714c2bc0bf12f01700911ed53536eb8c06efc77f23d8f1651f2fc35e077cb85ebb8b439f03c6fe4278ab0506703076037eba42ac8c61175a565b611af56101008201357f2039ef6253562b611e7f25a9bc2040f51ca3b9418e814163399ac11e8400cb717f28b295c865a6ed002fca95eef35f5c03e2ce284451a870d8cf7652f93757a0118c61175a565b01357f0f1e0ab547325e430a7356fe384a8db2f12c7fa605bdd918070ba1f0c87d543f7f2bace91ad1b222b2adfe20661747868d7c6a0c051efa473232733d915c32bc988961175a565b80358a5201358103068688015280356040880152858101358288015260408101356080880152013560a08601527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08601527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08601527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008601527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208601527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408601527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160860152516101808501528260000101516101a08401527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08401527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08401527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008401527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220840152803561024084015201356102608201527f0346cd87c9157b61554887f5f9b224de5cbe4ff8a86144a187d3f4e29c88115a6102808201527f161cd069685c9306d50c4af8ae4066febce4c3ee37dc0ae7050c3c2867c94ddf6102a08201527f1c9613e703c7c4be8c54ac686117c49201b663c52e59a0696ab3601a31ce1a216102c08201527f292b3ecaed6bffe99dea030955f5d260b73b0d381d1edf05efa16d6fc8c0571e6102e08201526020816103008160086107d05a03fa90511690565b91611e769391611dd2600090565b50604051936103808501604052611dec6000850135611727565b611df96020850135611727565b611e066040850135611727565b611e136060850135611727565b611e206080850135611727565b611e2d60a0850135611727565b611e3a60c0850135611727565b611e4760e0850135611727565b611e55610100850135611727565b611e63610120850135611727565b611e71610140850135611727565b6117a5565b60005260206000f3fea26469706673582212205d578d1e202f46a1a10e4e4c0a699e25343984036d710450a93c5624e06ec55b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1862,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(INullifierRegistry)1450\"\n      },\n      {\n        \"astId\": 1864,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 1866,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(INullifierRegistry)1450\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/VerifiedDomainRegistry.json",
    "content": "{\n  \"address\": \"0x6206EB4c794c7fe58315f76ab088Ee3C17E0d9f5\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DomainListed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DomainListingRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"oldOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DomainTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"domainName\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTime\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DomainVerified\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ExchangeAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ExchangeRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"newVerifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"VerifyDomainProcessorUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addExchange\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"domains\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTime\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"exchanges\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getDomain\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_domainName\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"getDomainId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getDomainOwner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_domains\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getDomains\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getExchanges\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserDomains\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"_verifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isExchange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeDomainListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeExchange\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setDomainListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateDomainOnSale\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"_verifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateVerifyDomainProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userDomains\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifyDomainProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n          \"name\": \"_proofs\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"verifyDomains\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xcbacd672cc2bd561f56c03e0c9d801c10500f0045678d5d69c779e81a35ead20\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x6206EB4c794c7fe58315f76ab088Ee3C17E0d9f5\",\n    \"transactionIndex\": 88,\n    \"gasUsed\": \"2387918\",\n    \"logsBloom\": \"0x00000000000000000000000000100000000000000000004000800020000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000201000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xf9b305f107eaa277d6127aad38990d72c52d0eb5c1e46d84a7fdb2a738238e3b\",\n    \"transactionHash\": \"0xcbacd672cc2bd561f56c03e0c9d801c10500f0045678d5d69c779e81a35ead20\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 88,\n        \"blockNumber\": 20166837,\n        \"transactionHash\": \"0xcbacd672cc2bd561f56c03e0c9d801c10500f0045678d5d69c779e81a35ead20\",\n        \"address\": \"0x6206EB4c794c7fe58315f76ab088Ee3C17E0d9f5\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 262,\n        \"blockHash\": \"0xf9b305f107eaa277d6127aad38990d72c52d0eb5c1e46d84a7fdb2a738238e3b\"\n      }\n    ],\n    \"blockNumber\": 20166837,\n    \"cumulativeGasUsed\": \"19501406\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DomainListed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DomainListingRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DomainTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"domainName\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DomainVerified\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ExchangeAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ExchangeRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"newVerifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"VerifyDomainProcessorUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addExchange\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"domains\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"exchanges\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getDomain\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_domainName\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getDomainId\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getDomainOwner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_domains\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getDomains\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId[]\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getExchanges\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserDomains\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId[]\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"_verifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isExchange\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeDomainListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeExchange\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setDomainListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateDomainOnSale\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"_verifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateVerifyDomainProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userDomains\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifyDomainProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof[]\\\",\\\"name\\\":\\\"_proofs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"verifyDomains\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addExchange(address)\\\":{\\\"params\\\":{\\\"_exchange\\\":\\\"Address of the exchange contract\\\"}},\\\"initialize(address)\\\":{\\\"params\\\":{\\\"_verifyDomainProcessor\\\":\\\"Address of the VerifyDomainProcessor contract\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeDomainListing(bytes32)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain ID to update listing status for\\\"}},\\\"removeExchange(address)\\\":{\\\"params\\\":{\\\"_exchange\\\":\\\"Address of the exchange contract\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setDomainListing(bytes32,uint256)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain to set listed status for\\\",\\\"_listingId\\\":\\\"Listing Id of domain on calling exchange\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"updateDomainOnSale(bytes32,address)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain ID to update listing status for\\\",\\\"_newOwner\\\":\\\"New owner of the domain\\\"}},\\\"updateVerifyDomainProcessor(address)\\\":{\\\"params\\\":{\\\"_verifyDomainProcessor\\\":\\\"Address of the new VerifyDomainProcessor contract\\\"}},\\\"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"params\\\":{\\\"_proofs\\\":\\\"Array of domain ownership TLS proofs\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addExchange(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized. Exchange must not already exist in the registry. \\\"},\\\"initialize(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts. This can only be called once.\\\"},\\\"removeDomainListing(bytes32)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one that the domain is listed on. This removes the exchange and listingId from the domain. \\\"},\\\"removeExchange(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry. \\\"},\\\"setDomainListing(bytes32,uint256)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is listed on the calling exchange. This sets the exchange and listingId of the domain. \\\"},\\\"updateDomainOnSale(bytes32,address)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status from the domain. \\\"},\\\"updateVerifyDomainProcessor(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the verify domain processor\\\"},\\\"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"notice\\\":\\\"Verify domains and add them to the registry. If domain is transferred off-chain to another party  then they can re-verify the domain and claim ownership of the domain and previous ownership is removed. The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on the domain. Function reverts if: - Domain ownership TLS proofs are invalid \\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/VerifiedDomainRegistry.sol\\\":\\\"VerifiedDomainRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/VerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { AddressArrayUtils } from \\\\\\\"./external/lib/AddressArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IDomainExchange } from \\\\\\\"./interfaces/IDomainExchange.sol\\\\\\\";\\\\nimport { IVerifiedDomainRegistry } from \\\\\\\"./interfaces/IVerifiedDomainRegistry.sol\\\\\\\";\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./interfaces/IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VerifiedDomainRegistry is IVerifiedDomainRegistry, Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using AddressArrayUtils for address[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event DomainVerified(\\\\n        bytes32 indexed domainId,\\\\n        address indexed owner,\\\\n        string domainName,\\\\n        uint256 expiryTime\\\\n    );\\\\n\\\\n    event DomainListed(\\\\n        bytes32 indexed domainId,\\\\n        address indexed exchange,\\\\n        uint256 indexed listingId\\\\n    );\\\\n\\\\n    event DomainListingRemoved(\\\\n        bytes32 indexed domainId,\\\\n        address indexed exchange\\\\n    );\\\\n\\\\n    event DomainTransferred(\\\\n        bytes32 indexed domainId,\\\\n        address indexed oldOwner,\\\\n        address indexed newOwner\\\\n    );\\\\n\\\\n\\\\n    event VerifyDomainProcessorUpdated(\\\\n        IVerifyDomainProcessor indexed newVerifyDomainProcessor\\\\n    );\\\\n\\\\n    event ExchangeAdded(address indexed exchange);\\\\n    event ExchangeRemoved(address indexed exchange);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyExchange() {\\\\n        require(isExchange[msg.sender], \\\\\\\"Caller must be exchange\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    modifier onlyInitialized() {\\\\n        require(isInitialized, \\\\\\\"Contract must be initialized\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n    IVerifyDomainProcessor public verifyDomainProcessor;\\\\n    address[] public exchanges;\\\\n    mapping(address=>bool) public isExchange;\\\\n\\\\n    bool public isInitialized;\\\\n\\\\n    mapping(bytes32 => Domain) public domains;\\\\n    mapping(address => bytes32[]) public userDomains;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    \\\\n    constructor() Ownable() {}\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Verify domains and add them to the registry. If domain is transferred off-chain to another party \\\\n     * then they can re-verify the domain and claim ownership of the domain and previous ownership is removed.\\\\n     * The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on\\\\n     * the domain. Function reverts if:\\\\n     * - Domain ownership TLS proofs are invalid\\\\n     * \\\\n     * @param _proofs           Array of domain ownership TLS proofs\\\\n     */\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external override\\\\n        onlyInitialized\\\\n    {\\\\n        IVerifyDomainProcessor.DomainRaw[] memory rawDomains = verifyDomainProcessor.verifyProofs(\\\\n            _proofs\\\\n        );\\\\n\\\\n        for (uint256 i = 0; i < rawDomains.length; i++) {\\\\n            IVerifyDomainProcessor.DomainRaw memory rawDomain = rawDomains[i];\\\\n            bytes32 domainId = getDomainId(rawDomain.name);\\\\n\\\\n            Domain storage domain = domains[domainId];\\\\n            if (domain.owner == address(0)) {\\\\n                // Case 1.1: Domain has no owner\\\\n                // Add caller as owner\\\\n                userDomains[msg.sender].push(domainId);\\\\n\\\\n                // Set domain details\\\\n                domains[domainId] = Domain({\\\\n                    owner: msg.sender,\\\\n                    name: rawDomain.name,\\\\n                    expiryTime: rawDomain.expiryTime,\\\\n                    exchange: address(0),\\\\n                    listingId: 0\\\\n                });\\\\n            } else {\\\\n                // Case 2: Domain has owner\\\\n                // Case 2.1: Caller is owner; skip\\\\n                if (domain.owner == msg.sender) {\\\\n                    // No updates to userDomains\\\\n\\\\n                    // Update domain details; Only expiry time can change\\\\n                    // Owner and domain name cannot change\\\\n                    // Exchange and listingId are kept as is\\\\n                    domain.expiryTime = rawDomain.expiryTime;\\\\n                }\\\\n                // Case 2.2: Caller is NOT owner\\\\n                if (domain.owner != msg.sender) {\\\\n                    // Remove ownership from old owner\\\\n                    userDomains[domain.owner].removeStorage(domainId);\\\\n\\\\n                    // Remove listing on exchange if it exists\\\\n                    if (domain.exchange != address(0)) {\\\\n                        IDomainExchange(domain.exchange).registryRemoveListing(domain.listingId);\\\\n                    }\\\\n\\\\n                    // Add domain to new owner\\\\n                    userDomains[msg.sender].push(domainId);\\\\n\\\\n                    // Set domain details except for domain name as it cannot change\\\\n                    domain.owner = msg.sender;\\\\n                    domain.expiryTime = rawDomain.expiryTime;\\\\n                    domain.exchange = address(0);\\\\n                    domain.listingId = 0;\\\\n                }\\\\n            }\\\\n\\\\n            emit DomainVerified(domainId, msg.sender, rawDomain.name, rawDomain.expiryTime);\\\\n        }\\\\n    }\\\\n\\\\n    // Todo: Add function for relinquishing ownership of domain\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is\\\\n     * listed on the calling exchange. This sets the exchange and listingId of the domain.\\\\n     * \\\\n     * @param _domainId     Domain to set listed status for\\\\n     * @param _listingId    Listing Id of domain on calling exchange\\\\n     */\\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId)\\\\n        external\\\\n        override\\\\n        onlyInitialized\\\\n        onlyExchange\\\\n    {\\\\n        Domain storage domain = domains[_domainId];\\\\n\\\\n        require(domain.owner != address(0), \\\\\\\"Domain must be verified\\\\\\\");\\\\n        require(domain.exchange == address(0), \\\\\\\"Domain already listed on another exchange\\\\\\\");\\\\n\\\\n        domain.exchange = msg.sender;\\\\n        domain.listingId = _listingId;\\\\n\\\\n        emit DomainListed(_domainId, msg.sender, _listingId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one\\\\n     * that the domain is listed on. This removes the exchange and listingId from the domain.\\\\n     * \\\\n     * @param _domainId            Domain ID to update listing status for\\\\n     */\\\\n    function removeDomainListing(bytes32 _domainId) external override onlyInitialized onlyExchange {\\\\n        Domain storage domain = domains[_domainId];\\\\n        require(domain.exchange == msg.sender, \\\\\\\"Domain not listed on calling exchange\\\\\\\");\\\\n\\\\n        _removeDomainListing(domain);\\\\n\\\\n        emit DomainListingRemoved(_domainId, msg.sender);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain\\\\n     * is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status\\\\n     * from the domain.\\\\n     * \\\\n     * @param _domainId            Domain ID to update listing status for\\\\n     * @param _newOwner            New owner of the domain\\\\n     */\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) \\\\n        external \\\\n        override \\\\n        onlyInitialized \\\\n        onlyExchange \\\\n    {\\\\n        Domain storage domain = domains[_domainId];\\\\n        require(domain.exchange == msg.sender, \\\\\\\"Domain not listed on calling exchange\\\\\\\");\\\\n\\\\n        _removeDomainListing(domain);\\\\n\\\\n        // Update ownership\\\\n        address oldOwner = domain.owner;\\\\n        domain.owner = _newOwner;\\\\n        userDomains[oldOwner].removeStorage(_domainId);\\\\n        userDomains[_newOwner].push(_domainId);\\\\n\\\\n        emit DomainTransferred(_domainId, oldOwner, _newOwner);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts.\\\\n     * This can only be called once.\\\\n     *\\\\n     * @param _verifyDomainProcessor    Address of the VerifyDomainProcessor contract\\\\n     */\\\\n    function initialize(\\\\n        IVerifyDomainProcessor _verifyDomainProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        verifyDomainProcessor = _verifyDomainProcessor;\\\\n\\\\n        isInitialized = true;\\\\n\\\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized.\\\\n     * Exchange must not already exist in the registry.\\\\n     * \\\\n     * @param _exchange     Address of the exchange contract\\\\n     */\\\\n    function addExchange(address _exchange) external onlyOwner onlyInitialized {\\\\n        require(!isExchange[_exchange], \\\\\\\"Duplicate exchange\\\\\\\");\\\\n\\\\n        isExchange[_exchange] = true;\\\\n        exchanges.push(_exchange);\\\\n\\\\n        emit ExchangeAdded(_exchange);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry.\\\\n     * \\\\n     * @param _exchange     Address of the exchange contract\\\\n     */\\\\n    function removeExchange(address _exchange) external onlyOwner onlyInitialized {\\\\n        require(isExchange[_exchange], \\\\\\\"Exchange does not exist\\\\\\\");\\\\n\\\\n        isExchange[_exchange] = false;\\\\n        exchanges.removeStorage(_exchange);\\\\n\\\\n        emit ExchangeRemoved(_exchange);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the verify domain processor\\\\n     *\\\\n     * @param _verifyDomainProcessor    Address of the new VerifyDomainProcessor contract\\\\n     */\\\\n    function updateVerifyDomainProcessor(IVerifyDomainProcessor _verifyDomainProcessor) external onlyOwner {\\\\n        require(address(_verifyDomainProcessor) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n\\\\n        verifyDomainProcessor = _verifyDomainProcessor;\\\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function getDomainId(string memory _domainName) public pure override returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(_domainName));\\\\n    }\\\\n\\\\n    function getDomainOwner(bytes32 _domainId) external view override returns (address) {        \\\\n        return domains[_domainId].owner;\\\\n    }\\\\n\\\\n    function getUserDomains(address _user) external view returns (DomainWithId[] memory domainInfo) {\\\\n        bytes32[] memory domainIds = userDomains[_user];\\\\n        \\\\n        domainInfo = new DomainWithId[](domainIds.length);\\\\n        for (uint256 i = 0; i < domainIds.length; i++) {\\\\n            bytes32 domainId = domainIds[i];\\\\n            domainInfo[i] = DomainWithId({\\\\n                domainId: domainId,\\\\n                domain: domains[domainId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDomain(bytes32 _domainId) external view override returns (DomainWithId memory domainInfo) {\\\\n        return DomainWithId({\\\\n            domainId: _domainId,\\\\n            domain: domains[_domainId]\\\\n        });\\\\n    }\\\\n\\\\n    function getDomains(bytes32[] memory _domains) external view returns (DomainWithId[] memory domainInfo) {\\\\n        domainInfo = new DomainWithId[](_domains.length);\\\\n        for (uint256 i = 0; i < _domains.length; i++) {\\\\n            bytes32 domainId = _domains[i];\\\\n            domainInfo[i] = DomainWithId({\\\\n                domainId: domainId,\\\\n                domain: domains[domainId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getExchanges() external view returns (address[] memory) {\\\\n        return exchanges;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _removeDomainListing(Domain storage _domain) internal {\\\\n        delete _domain.exchange;\\\\n        delete _domain.listingId;\\\\n    }\\\\n}\\\",\\\"keccak256\\\":\\\"0x8162cd31c4aa35caa77d08e3115681bbe33e842a9640b0106816e2ca09137ea8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IDomainExchange.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface IDomainExchange {\\\\n    function registryRemoveListing(uint256 _listingId) external;\\\\n}\\\",\\\"keccak256\\\":\\\"0xe9deda400c359c1b42d10c518dc1f01605ea3a466e1be110f1f7c9be4af8253b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifiedDomainRegistry {\\\\n\\\\n    struct Domain {\\\\n        address owner;\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n        address exchange;\\\\n        uint256 listingId;\\\\n    }\\\\n\\\\n    struct DomainWithId {\\\\n        bytes32 domainId;\\\\n        Domain domain;\\\\n    }\\\\n\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\\\n    \\\\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\\\n    \\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\\\n    function removeDomainListing(bytes32 _domainId) external;\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcc45329e6720b7b9df3c67985b16f8d778528f756c045ba6c2196831b40afe92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6080604052346200002657620000146200002b565b6040516129b06200012682396129b090f35b600080fd5b6200003562000037565b565b6200003533620000c3565b62000054905b6001600160a01b031690565b90565b62000054905462000042565b620000549062000048906001600160a01b031682565b620000549062000063565b620000549062000079565b90620000a362000054620000bf9262000084565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620000cf600062000057565b90620000dd8160006200008f565b620001146200010d7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000084565b9162000084565b916200011f60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806236d2d3146101815780630183196b1461017c57806311d4c3a2146101775780631a242547146101725780631e2e3a6b1461016d57806327d335a8146101685780632839fc29146101635780632b8a80021461015e578063392e53cd146101595780635e8441d3146101545780636e74da681461014f578063715018a61461014a5780637f200269146101455780638da5cb5b146101405780638e0be3691461013b5780639f4cb8f0146101365780639f6eb88c14610131578063a9c56e911461012c578063aa10ce2214610127578063b3533dfe14610122578063c4d66de81461011d578063c722f177146101185763f2fde38b036101a757610e91565b610e60565b610c98565b610c71565b610c34565b610c1c565b610951565b610891565b610817565b6107f2565b6107da565b610792565b61077a565b61074f565b61064d565b610628565b6105ea565b61054c565b610502565b610460565b61041a565b6103cc565b610242565b6001600160a01b031690565b90565b6001600160a01b0381165b036101a757565b600080fd5b905035906101b982610195565b565b906020828203126101a757610192916101ac565b61019290610186906001600160a01b031682565b610192906101cf565b610192906101e3565b906101ff906101ec565b600052602052604060002090565b610192916008021c5b60ff1690565b90610192915461020d565b610192906102396003916000926101f5565b61021c565b9052565b346101a75761026f61025d6102583660046101bb565b610227565b60405191829182901515815260200190565b0390f35b60005b8381106102865750506000910152565b8181015183820152602001610276565b6102b76102c06020936102ca936102ab815190565b80835293849260200190565b95869101610273565b601f01601f191690565b0190565b80516001600160a01b0316825290610192906080806102fc60a0840160208701518582036020870152610296565b9461030c60408201516040860152565b6060818101516001600160a01b0316908501520151910152565b80518252610192916040810191602001519060208184039101526102ce565b9061019291610326565b9061036561035b835190565b8083529160200190565b90816103776020830284019460200190565b926000915b83831061038b57505050505090565b909192939460206103ae6103a783856001950387528951610345565b9760200190565b930193019193929061037c565b60208082526101929291019061034f565b346101a75761026f6103e76103e23660046101bb565b612456565b604051918291826103bb565b806101a0565b905035906101b9826103f3565b906020828203126101a757610192916103f9565b346101a75761026f610435610430366004610406565b612258565b604051918291826001600160a01b03909116815260200190565b602080825261019292910190610326565b346101a75761026f61047b610476366004610406565b612507565b6040519182918261044f565b60009103126101a757565b906104b26104ab6104a1845190565b8084529260200190565b9260200190565b9060005b8181106104c35750505090565b9091926104e96104e260019286516001600160a01b0316815260200190565b9460200190565b9291016104b6565b602080825261019292910190610492565b346101a757610512366004610487565b61026f61051d6125f6565b604051918291826104f1565b91906040838203126101a7576101929061054381856103f9565b936020016103f9565b346101a75761056561055f366004610529565b90611cac565b604051005b634e487b7160e01b600052603260045260246000fd5b80548210156105a35761059a600191600052602060002090565b91020190600090565b61056a565b610192916008021c610186565b9061019291546105a8565b600260006105cc825490565b8310156105e75750610192916105e191610580565b906105b5565b80fd5b346101a75761026f610435610600366004610406565b6105c0565b91906040838203126101a7576101929061061f81856103f9565b936020016101ac565b346101a75761056561063b366004610605565b90611e7e565b6101926000600461021c565b346101a75761065d366004610487565b61026f61025d610641565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761069f57604052565b610668565b906101b96106b160405190565b928361067e565b6001600160401b03811161069f57602090601f01601f19160190565b90826000939282370152565b909291926106f56106f0826106b8565b6106a4565b938185526020850190828401116101a7576101b9926106d4565b9080601f830112156101a757816020610192933591016106e0565b906020828203126101a75781356001600160401b0381116101a757610192920161070f565b346101a75761026f61076a61076536600461072a565b61221a565b6040519182918290815260200190565b346101a75761056561078d366004610406565b611da6565b346101a7576107a2366004610487565b610565610ee1565b6001600160a01b0381166101a0565b905035906101b9826107aa565b906020828203126101a757610192916107b9565b346101a7576105656107ed3660046107c6565b6121e7565b346101a757610802366004610487565b61026f6104356000546001600160a01b031690565b346101a75761056561082a3660046101bb565b612161565b91906040838203126101a7576101929061054381856101ac565b610192916008021c81565b906101929154610849565b61086d6006916000926101f5565b90610876825490565b8310156105e757506101929161088b91610580565b90610854565b346101a75761026f61076a6108a736600461082f565b9061085f565b6001600160401b03811161069f5760208091020190565b909291926108d46106f0826108ad565b93818552602080860192028301928184116101a757915b8383106108f85750505050565b6020809161090684866103f9565b8152019201916108eb565b9080601f830112156101a757816020610192933591016108c4565b906020828203126101a75781356001600160401b0381116101a7576101929201610911565b346101a75761026f6103e761096736600461092c565b612531565b9190916060818403126101a75761098360606106a4565b9281356001600160401b0381116101a757816109a091840161070f565b845260208201356001600160401b0381116101a757816109c191840161070f565b602085015260408201356001600160401b0381116101a7576109e3920161070f565b6040830152565b63ffffffff81166101a0565b905035906101b9826109ea565b9190916080818403126101a757610a5c610a1d60806106a4565b936000610a2a82856103f9565b908601526020610a3c828286016101ac565b908601526040610a4e828286016109f6565b9086015260608093016109f6565b90830152565b929190610a716106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610a97575050505050565b81356001600160401b0381116101a757602091610ab7878493870161070f565b815201910190610a89565b9080601f830112156101a75781602061019293359101610a62565b91909160a0818403126101a757610af460406106a4565b926000610b018284610a03565b9085015260808201356001600160401b0381116101a757610b229201610ac2565b6020830152565b9190916040818403126101a757610b4060406106a4565b9281356001600160401b0381116101a75781610b5d91840161096c565b845260208201356001600160401b0381116101a757610b229201610add565b929190610b8b6106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610bb1575050505050565b81356001600160401b0381116101a757602091610bd18784938701610b29565b815201910190610ba3565b9080601f830112156101a75781602061019293359101610b7c565b906020828203126101a75781356001600160401b0381116101a7576101929201610bdc565b346101a757610565610c2f366004610bf7565b611a96565b346101a757610565610c473660046101bb565b61208f565b610192600060016105b5565b61023e906101ec565b6020810192916101b99190610c58565b346101a757610c81366004610487565b61026f610c8c610c4c565b60405191829182610c61565b346101a757610565610cab3660046107c6565b611f65565b906101ff565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610cec575b6020831014610ce757565b610cb6565b91607f1691610cdc565b80546000939291610d13610d0983610ccc565b8085529360200190565b9160018116908115610d655750600114610d2c57505050565b610d3f9192939450600052602060002090565b916000925b818410610d515750500190565b805484840152602090930192600101610d44565b92949550505060ff1916825215156020020190565b9061019291610cf6565b906101b9610d9e92610d9560405190565b93848092610d7a565b038361067e565b6101929081565b6101929054610da5565b610dc1906005610cb0565b80546001600160a01b031691610dd960018301610d84565b91610de660028201610dac565b916101926004610e0060038501546001600160a01b031690565b9301610dac565b906101b994610e4c610e44610e5c936080969a99979a610e3760a088019260008901906001600160a01b03169052565b8682036020880152610296565b986040850152565b6001600160a01b03166060830152565b0152565b346101a75761026f610e7b610e76366004610406565b610db6565b91610e8895939560405190565b95869586610e07565b346101a757610565610ea43660046101bb565b611002565b610eb1610f3d565b6101b9610ecf565b6101866101926101929290565b61019290610eb9565b6101b9610edc6000610ec6565b61103b565b6101b9610ea9565b15610ef057565b60405162461bcd60e51b815280610f39600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6101b9610f526000546001600160a01b031690565b610f6b610f5e33610186565b916001600160a01b031690565b14610ee9565b6101b990610f7d610f3d565b610fdd565b15610f8957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6101b990610edc610ff16101866000610ec6565b6001600160a01b0383161415610f82565b6101b990610f71565b906001600160a01b03905b9181191691161790565b90611030610192611037926101ec565b825461100b565b9055565b6000546001600160a01b031690611053816000611020565b6110866110807f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101ec565b916101ec565b9161109060405190565b600090a3565b61019290610216565b6101929054611096565b156110b057565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b6101b99061110b611106600461109f565b6110a9565b6116e2565b909291926111206106f0826106b8565b938185526020850190828401116101a7576101b992610273565b9080601f830112156101a757815161019292602001611110565b905051906101b9826103f3565b9190916040818403126101a75761117860406106a4565b815190936001600160401b0382116101a75761119981610a5c93850161113a565b85526020928301611154565b9291906111b46106f0826108ad565b93818552602080860192028101918383116101a75781905b8382106111da575050505050565b81516001600160401b0381116101a7576020916111fa8784938701611161565b8152019101906111cc565b9080601f830112156101a7578151610192926020016111a5565b906020828203126101a75781516001600160401b0381116101a7576101929201611205565b8051606080845261019293916040916112759161126391850190610296565b60208501518482036020860152610296565b920151906040818403910152610296565b805182526020808201516001600160a01b0316908301526101b99190606090819060408181015163ffffffff1690850152015163ffffffff16910152565b9061019291610296565b906112da61035b835190565b90816112ec6020830284019460200190565b926000915b83831061130057505050505090565b9091929394602061131c6103a7838560019503875289516112c4565b93019301919392906112f1565b61019291602060a082019261134660008201516000850190611286565b01519060808184039101526112ce565b8051604080845261019293916020916113729190840190611244565b920151906020818403910152611329565b9061019291611356565b9061139961035b835190565b90816113ab6020830284019460200190565b926000915b8383106113bf57505050505090565b909192939460206113db6103a783856001950387528951611383565b93019301919392906113b0565b60208082526101929291019061138d565b6040513d6000823e3d90fd5b6101926101926101929290565b634e487b7160e01b600052601160045260246000fd5b60001981146114375760010190565b611412565b90611445825190565b8110156105a3576020809102010190565b9060001990611016565b9061147061019261103792611405565b8254611456565b9160001960089290920291821b911b611016565b919061149a6101926110379390565b908354611477565b90815491600160401b83101561069f57826114c59160016101b995018155610580565b9061148b565b61019260a06106a4565b919061149a61019261103793611405565b6101b9916000916114d5565b8181106114fd575050565b8061150b60006001936114e6565b016114f2565b9190601f811161152057505050565b6115326101b993600052602060002090565b906020601f840181900483019310611554575b6020601f9091010401906114f2565b9091508190611545565b90611567815190565b906001600160401b03821161069f5761158a826115848554610ccc565b85611511565b602090601f83116001146115c5576110379291600091836115ba575b5050600019600883021c1916906002021790565b0151905038806115a6565b601f198316916115da85600052602060002090565b9260005b818110611618575091600293918560019694106115ff575b50505002019055565b01516000196008601f8516021c191690553880806115f6565b919360206001819287870151815501950192016115de565b906101b99161155e565b6101b9919061168e906080906004906116648161165e87516001600160a01b031690565b90611020565b61167c60018201611676602088015190565b90611630565b6116946002820161168e604088015190565b90611460565b6116af6003820161165e60608801516001600160a01b031690565b0192015190565b906101b99161163a565b929160206116dd6101b99360408701908782036000890152610296565b940152565b600061172c916117026116fd6001546001600160a01b031690565b6101ec565b61172183637de24fcf61171460405190565b9687958694859360e01b90565b8352600483016113e8565b03925af1908115611a5057600091611a75575b5061174a6000611405565b611755610192835190565b811015611a7157611766818361143c565b5190611775600083015161221a565b916005926117866101928286610cb0565b9361179885546001600160a01b031690565b946117a36000610ec6565b956117b66001600160a01b038816610f5e565b036118b657506118b19461184b83611850936118326006946117e5846117e061019233809a6101f5565b6114a2565b88516118229061181b6117f960208d015190565b916118146118056114cb565b6001600160a01b03909b168b52565b60208a0152565b6040880152565b6001600160a01b03166060860152565b61184661183f6000611405565b6080860152565b610cb0565b6116b6565b33906118626020600085015194015190565b61189361188d7f04c47544b62d97fc6d744e7cc21ed4a24af06a46427efcfd15a0db261dbb27d69390565b936101ec565b936118a96118a060405190565b928392836116c0565b0390a3611428565b61174a565b90506118c981546001600160a01b031690565b6118d233610f5e565b14611a55575b80546001600160a01b03166118ec33610f5e565b036118fd575b506118b19350611850565b6119248261191f61019261191885546001600160a01b031690565b60066101f5565b6128ab565b60038101546001600160a01b03166119446001600160a01b038716610f5e565b036119aa575b6119a4906119916118b196611967856117e06101923360066101f5565b6119713384611020565b61198861197f602088015190565b60028501611460565b60038301611020565b600461199d6000611405565b9101611460565b386118f2565b6119c46116fd6116fd60038401546001600160a01b031690565b90631756c30e6119d660048301610dac565b833b156101a757611a0c936119fe600080946119f160405190565b9788958694859360e01b90565b835260048301526024820190565b03925af18015611a50576118b1966119a49361199192611a32575b50965050905061194a565b611a4a906000611a42818361067e565b810190610487565b38611a27565b6113f9565b611a6c611a63602085015190565b60028301611460565b6118d8565b5050565b611a90913d8091833e611a88818361067e565b81019061121f565b3861173f565b6101b9906110f5565b906101b991611ab1611106600461109f565b611b02565b15611abd57565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206d7573742062652065786368616e67650000000000000000006044820152606490fd5b6101b99190611b22611b1d611b183360036101f5565b61109f565b611ab6565b611bd1565b15611b2e57565b60405162461bcd60e51b815260206004820152601760248201527f446f6d61696e206d7573742062652076657269666965640000000000000000006044820152606490fd5b15611b7a57565b60405162461bcd60e51b815260206004820152602960248201527f446f6d61696e20616c7265616479206c6973746564206f6e20616e6f746865726044820152682065786368616e676560b81b6064820152608490fd5b90611be0610192836005610cb0565b611c62826004611bf784546001600160a01b031690565b93611c1f611c056000610ec6565b95611c186001600160a01b038816610f5e565b1415611b27565b611c516003820195611c4b610f5e611c3e89546001600160a01b031690565b926001600160a01b031690565b14611b73565b611c5c338096611020565b01611460565b611c9c611c96611c907f94ec80928933a86cc2847706c09c43fa58866b537c8fce8eef172af4036af5209590565b926101ec565b92611405565b92611ca660405190565b600090a4565b906101b991611a9f565b6101b990611cc7611106600461109f565b6101b990611cdc611b1d611b183360036101f5565b611d3b565b15611ce857565b60405162461bcd60e51b815260206004820152602560248201527f446f6d61696e206e6f74206c6973746564206f6e2063616c6c696e672065786360448201526468616e676560d81b6064820152608490fd5b611d49610192826005610cb0565b611d7b611d6060038301546001600160a01b031690565b339290611d7690611d7085610f5e565b14611ce1565b61260c565b6110866110807ff27bc8e4c954bf9eead2d99629d460313da75ee401666af4d3cb1eb821ddb1f69390565b6101b990611cb6565b906101b991611dc1611106600461109f565b6101b99190611dd7611b1d611b183360036101f5565b906000611de8610192846005610cb0565b611e08611dff60038301546001600160a01b031690565b611d7033610f5e565b611e118161260c565b01611e2d82611e2783546001600160a01b031690565b92611020565b611e50836117e0610192856006611e4b8561191f6101928a856101f5565b6101f5565b611c9c611c90611c907f3275c4afb1638bd20394301d401c788e5091157ddca135fd84970904da6541af9590565b906101b991611daf565b6101b990611e94610f3d565b611efb565b15611ea057565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b9060ff90611016565b90611ef461019261103792151590565b8254611edb565b611f14611f0f611f0b600461109f565b1590565b611e99565b611f1f816001611020565b611f2b60016004611ee4565b611f557f9b7c520e9e227a011fa79baf4082565a9fd780e2bcb20889c0fe36eba4b5c8db916101ec565b90611f5f60405190565b600090a2565b6101b990611e88565b6101b990611f7a610f3d565b6101b990611f8b611106600461109f565b61202c565b15611f9757565b60405162461bcd60e51b81526020600482015260126024820152714475706c69636174652065786368616e676560701b6044820152606490fd5b916001600160a01b0360089290920291821b911b611016565b9190611ffb610192611037936101ec565b908354611fd1565b90815491600160401b83101561069f57826120269160016101b995018155610580565b90611fea565b61205a6003612049612044611f0b611b1886856101f5565b611f90565b612055836001926101f5565b611ee4565b612065816002612003565b611f557f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e1916101ec565b6101b990611f6e565b6101b9906120a4610f3d565b6101b9906120b5611106600461109f565b612106565b156120c157565b60405162461bcd60e51b815260206004820152601760248201527f45786368616e676520646f6573206e6f742065786973740000000000000000006044820152606490fd5b61212c600361212061211b611b1885846101f5565b6120ba565b612055836000926101f5565b6121378160026126e4565b611f557ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb916101ec565b6101b990612098565b6101b990612176610f3d565b6121b9565b1561218257565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b6121dc6121c5826101ec565b6121d5610f5e6101866000610ec6565b141561217b565b611f2b816001611020565b6101b99061216a565b6102ca61220892602092612202815190565b94859290565b93849101610273565b610192916121f0565b61224261222660405190565b8092612236602083019182612211565b9081038252038261067e565b61225461224d825190565b9160200190565b2090565b600061227161019292612269600090565b506005610cb0565b01546001600160a01b031690565b9061229a61228e6104a1845490565b92600052602060002090565b9060005b8181106122ab5750505090565b9091926122cf6122c86001926122c087610dac565b815260200190565b9460010190565b92910161229e565b906101929161227f565b906101b9610d9e926122f260405190565b938480926122d7565b610192906122e1565b906123116106f0836108ad565b918252565b61019260406106a4565b6123286114cb565b906000825260208080808086016060815201600081520160008152016000905250565b905250565b610192612320565b612360612316565b9060008252602080830161234b612350565b610192612358565b60005b82811061238957505050565b602090612394612372565b818401520161237d565b906101b96123b46123ae84612304565b936108ad565b601f19016020840161237a565b906101b961244660046123d26114cb565b946123f46123e782546001600160a01b031690565b6001600160a01b03168752565b61240a61240360018301610d84565b6020880152565b61241961181b60028301610dac565b61244061243060038301546001600160a01b031690565b6001600160a01b03166060880152565b01610dac565b6080840152565b610192906123c1565b61246d61247291612465606090565b5060066101f5565b6122fb565b9061248361247e835190565b61239e565b916000908361249183611405565b61249c610192845190565b81101561250057806124b86124b46124fb938661143c565b5190565b6124e0610b226124c9836005610cb0565b6124db6124d4612316565b948a860152565b61244d565b6124ea828961143c565b526124f5818861143c565b50611428565b612491565b5093505050565b61250f612372565b50610192610b22612521836005610cb0565b6124db61252c612316565b948552565b9061253d61247e835190565b916000908361254b83611405565b612556610192845190565b81101561250057806124b86124b461256e938661143c565b61254b565b9061258261228e6104a1845490565b9060005b8181106125935750505090565b9091926125c16122c86001926125b087546001600160a01b031690565b6001600160a01b0316815260200190565b929101612586565b9061019291612573565b906101b9610d9e926125e460405190565b938480926125c9565b610192906125d3565b61019260026125ed565b6101b991600091611fea565b600060046101b9926126218360038301612600565b016114e6565b9061263661228e6104a1845490565b9060005b8181106126475750505090565b9091926126646122c86001926125b087546001600160a01b031690565b92910161263a565b9061019291612627565b906101b9610d9e9261268760405190565b9384809261266c565b61019290612676565b9190820391821161143757565b634e487b7160e01b600052603160045260246000fd5b805480156126df5760001901906126dc6126d68383610580565b90612600565b55565b6126a6565b6126f9612700926126f483612690565b61279d565b9092901590565b156127425760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612761612751835490565b61275b6001611405565b90612699565b90818103612771575b50506126bc565b6120266127846105e161278b9486610580565b9184610580565b388061276a565b610192600019611405565b919082519260006127ad81611405565b855b811015612804576127d06127c3828561143c565b516001600160a01b031690565b6127e26001600160a01b038616610f5e565b146127fa576127f36127af91611428565b90506127ad565b9450505050600190565b5093505050612811612792565b9190565b9061282461228e6104a1845490565b9060005b8181106128355750505090565b90919261284a6122c86001926122c087610dac565b929101612828565b9061019291612815565b906101b9610d9e9261286d60405190565b93848092612852565b6101929061285c565b6101b99160009161148b565b805480156126df5760001901906126dc6128a58383610580565b9061287f565b6126f96128c0926128bb83612876565b61293b565b156129025760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612911612751835490565b90818103612921575b505061288b565b6114c561278461088b6129349486610580565b388061291a565b9190825192600061294b81611405565b855b811015612804576129616124b4828561143c565b84146127fa5761297361294d91611428565b905061294b56fea2646970667358221220a6032f571ac9fa51b48f09a32827ab67ff828148f9996dd432fe8f26a821634c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806236d2d3146101815780630183196b1461017c57806311d4c3a2146101775780631a242547146101725780631e2e3a6b1461016d57806327d335a8146101685780632839fc29146101635780632b8a80021461015e578063392e53cd146101595780635e8441d3146101545780636e74da681461014f578063715018a61461014a5780637f200269146101455780638da5cb5b146101405780638e0be3691461013b5780639f4cb8f0146101365780639f6eb88c14610131578063a9c56e911461012c578063aa10ce2214610127578063b3533dfe14610122578063c4d66de81461011d578063c722f177146101185763f2fde38b036101a757610e91565b610e60565b610c98565b610c71565b610c34565b610c1c565b610951565b610891565b610817565b6107f2565b6107da565b610792565b61077a565b61074f565b61064d565b610628565b6105ea565b61054c565b610502565b610460565b61041a565b6103cc565b610242565b6001600160a01b031690565b90565b6001600160a01b0381165b036101a757565b600080fd5b905035906101b982610195565b565b906020828203126101a757610192916101ac565b61019290610186906001600160a01b031682565b610192906101cf565b610192906101e3565b906101ff906101ec565b600052602052604060002090565b610192916008021c5b60ff1690565b90610192915461020d565b610192906102396003916000926101f5565b61021c565b9052565b346101a75761026f61025d6102583660046101bb565b610227565b60405191829182901515815260200190565b0390f35b60005b8381106102865750506000910152565b8181015183820152602001610276565b6102b76102c06020936102ca936102ab815190565b80835293849260200190565b95869101610273565b601f01601f191690565b0190565b80516001600160a01b0316825290610192906080806102fc60a0840160208701518582036020870152610296565b9461030c60408201516040860152565b6060818101516001600160a01b0316908501520151910152565b80518252610192916040810191602001519060208184039101526102ce565b9061019291610326565b9061036561035b835190565b8083529160200190565b90816103776020830284019460200190565b926000915b83831061038b57505050505090565b909192939460206103ae6103a783856001950387528951610345565b9760200190565b930193019193929061037c565b60208082526101929291019061034f565b346101a75761026f6103e76103e23660046101bb565b612456565b604051918291826103bb565b806101a0565b905035906101b9826103f3565b906020828203126101a757610192916103f9565b346101a75761026f610435610430366004610406565b612258565b604051918291826001600160a01b03909116815260200190565b602080825261019292910190610326565b346101a75761026f61047b610476366004610406565b612507565b6040519182918261044f565b60009103126101a757565b906104b26104ab6104a1845190565b8084529260200190565b9260200190565b9060005b8181106104c35750505090565b9091926104e96104e260019286516001600160a01b0316815260200190565b9460200190565b9291016104b6565b602080825261019292910190610492565b346101a757610512366004610487565b61026f61051d6125f6565b604051918291826104f1565b91906040838203126101a7576101929061054381856103f9565b936020016103f9565b346101a75761056561055f366004610529565b90611cac565b604051005b634e487b7160e01b600052603260045260246000fd5b80548210156105a35761059a600191600052602060002090565b91020190600090565b61056a565b610192916008021c610186565b9061019291546105a8565b600260006105cc825490565b8310156105e75750610192916105e191610580565b906105b5565b80fd5b346101a75761026f610435610600366004610406565b6105c0565b91906040838203126101a7576101929061061f81856103f9565b936020016101ac565b346101a75761056561063b366004610605565b90611e7e565b6101926000600461021c565b346101a75761065d366004610487565b61026f61025d610641565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761069f57604052565b610668565b906101b96106b160405190565b928361067e565b6001600160401b03811161069f57602090601f01601f19160190565b90826000939282370152565b909291926106f56106f0826106b8565b6106a4565b938185526020850190828401116101a7576101b9926106d4565b9080601f830112156101a757816020610192933591016106e0565b906020828203126101a75781356001600160401b0381116101a757610192920161070f565b346101a75761026f61076a61076536600461072a565b61221a565b6040519182918290815260200190565b346101a75761056561078d366004610406565b611da6565b346101a7576107a2366004610487565b610565610ee1565b6001600160a01b0381166101a0565b905035906101b9826107aa565b906020828203126101a757610192916107b9565b346101a7576105656107ed3660046107c6565b6121e7565b346101a757610802366004610487565b61026f6104356000546001600160a01b031690565b346101a75761056561082a3660046101bb565b612161565b91906040838203126101a7576101929061054381856101ac565b610192916008021c81565b906101929154610849565b61086d6006916000926101f5565b90610876825490565b8310156105e757506101929161088b91610580565b90610854565b346101a75761026f61076a6108a736600461082f565b9061085f565b6001600160401b03811161069f5760208091020190565b909291926108d46106f0826108ad565b93818552602080860192028301928184116101a757915b8383106108f85750505050565b6020809161090684866103f9565b8152019201916108eb565b9080601f830112156101a757816020610192933591016108c4565b906020828203126101a75781356001600160401b0381116101a7576101929201610911565b346101a75761026f6103e761096736600461092c565b612531565b9190916060818403126101a75761098360606106a4565b9281356001600160401b0381116101a757816109a091840161070f565b845260208201356001600160401b0381116101a757816109c191840161070f565b602085015260408201356001600160401b0381116101a7576109e3920161070f565b6040830152565b63ffffffff81166101a0565b905035906101b9826109ea565b9190916080818403126101a757610a5c610a1d60806106a4565b936000610a2a82856103f9565b908601526020610a3c828286016101ac565b908601526040610a4e828286016109f6565b9086015260608093016109f6565b90830152565b929190610a716106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610a97575050505050565b81356001600160401b0381116101a757602091610ab7878493870161070f565b815201910190610a89565b9080601f830112156101a75781602061019293359101610a62565b91909160a0818403126101a757610af460406106a4565b926000610b018284610a03565b9085015260808201356001600160401b0381116101a757610b229201610ac2565b6020830152565b9190916040818403126101a757610b4060406106a4565b9281356001600160401b0381116101a75781610b5d91840161096c565b845260208201356001600160401b0381116101a757610b229201610add565b929190610b8b6106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610bb1575050505050565b81356001600160401b0381116101a757602091610bd18784938701610b29565b815201910190610ba3565b9080601f830112156101a75781602061019293359101610b7c565b906020828203126101a75781356001600160401b0381116101a7576101929201610bdc565b346101a757610565610c2f366004610bf7565b611a96565b346101a757610565610c473660046101bb565b61208f565b610192600060016105b5565b61023e906101ec565b6020810192916101b99190610c58565b346101a757610c81366004610487565b61026f610c8c610c4c565b60405191829182610c61565b346101a757610565610cab3660046107c6565b611f65565b906101ff565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610cec575b6020831014610ce757565b610cb6565b91607f1691610cdc565b80546000939291610d13610d0983610ccc565b8085529360200190565b9160018116908115610d655750600114610d2c57505050565b610d3f9192939450600052602060002090565b916000925b818410610d515750500190565b805484840152602090930192600101610d44565b92949550505060ff1916825215156020020190565b9061019291610cf6565b906101b9610d9e92610d9560405190565b93848092610d7a565b038361067e565b6101929081565b6101929054610da5565b610dc1906005610cb0565b80546001600160a01b031691610dd960018301610d84565b91610de660028201610dac565b916101926004610e0060038501546001600160a01b031690565b9301610dac565b906101b994610e4c610e44610e5c936080969a99979a610e3760a088019260008901906001600160a01b03169052565b8682036020880152610296565b986040850152565b6001600160a01b03166060830152565b0152565b346101a75761026f610e7b610e76366004610406565b610db6565b91610e8895939560405190565b95869586610e07565b346101a757610565610ea43660046101bb565b611002565b610eb1610f3d565b6101b9610ecf565b6101866101926101929290565b61019290610eb9565b6101b9610edc6000610ec6565b61103b565b6101b9610ea9565b15610ef057565b60405162461bcd60e51b815280610f39600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6101b9610f526000546001600160a01b031690565b610f6b610f5e33610186565b916001600160a01b031690565b14610ee9565b6101b990610f7d610f3d565b610fdd565b15610f8957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6101b990610edc610ff16101866000610ec6565b6001600160a01b0383161415610f82565b6101b990610f71565b906001600160a01b03905b9181191691161790565b90611030610192611037926101ec565b825461100b565b9055565b6000546001600160a01b031690611053816000611020565b6110866110807f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101ec565b916101ec565b9161109060405190565b600090a3565b61019290610216565b6101929054611096565b156110b057565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b6101b99061110b611106600461109f565b6110a9565b6116e2565b909291926111206106f0826106b8565b938185526020850190828401116101a7576101b992610273565b9080601f830112156101a757815161019292602001611110565b905051906101b9826103f3565b9190916040818403126101a75761117860406106a4565b815190936001600160401b0382116101a75761119981610a5c93850161113a565b85526020928301611154565b9291906111b46106f0826108ad565b93818552602080860192028101918383116101a75781905b8382106111da575050505050565b81516001600160401b0381116101a7576020916111fa8784938701611161565b8152019101906111cc565b9080601f830112156101a7578151610192926020016111a5565b906020828203126101a75781516001600160401b0381116101a7576101929201611205565b8051606080845261019293916040916112759161126391850190610296565b60208501518482036020860152610296565b920151906040818403910152610296565b805182526020808201516001600160a01b0316908301526101b99190606090819060408181015163ffffffff1690850152015163ffffffff16910152565b9061019291610296565b906112da61035b835190565b90816112ec6020830284019460200190565b926000915b83831061130057505050505090565b9091929394602061131c6103a7838560019503875289516112c4565b93019301919392906112f1565b61019291602060a082019261134660008201516000850190611286565b01519060808184039101526112ce565b8051604080845261019293916020916113729190840190611244565b920151906020818403910152611329565b9061019291611356565b9061139961035b835190565b90816113ab6020830284019460200190565b926000915b8383106113bf57505050505090565b909192939460206113db6103a783856001950387528951611383565b93019301919392906113b0565b60208082526101929291019061138d565b6040513d6000823e3d90fd5b6101926101926101929290565b634e487b7160e01b600052601160045260246000fd5b60001981146114375760010190565b611412565b90611445825190565b8110156105a3576020809102010190565b9060001990611016565b9061147061019261103792611405565b8254611456565b9160001960089290920291821b911b611016565b919061149a6101926110379390565b908354611477565b90815491600160401b83101561069f57826114c59160016101b995018155610580565b9061148b565b61019260a06106a4565b919061149a61019261103793611405565b6101b9916000916114d5565b8181106114fd575050565b8061150b60006001936114e6565b016114f2565b9190601f811161152057505050565b6115326101b993600052602060002090565b906020601f840181900483019310611554575b6020601f9091010401906114f2565b9091508190611545565b90611567815190565b906001600160401b03821161069f5761158a826115848554610ccc565b85611511565b602090601f83116001146115c5576110379291600091836115ba575b5050600019600883021c1916906002021790565b0151905038806115a6565b601f198316916115da85600052602060002090565b9260005b818110611618575091600293918560019694106115ff575b50505002019055565b01516000196008601f8516021c191690553880806115f6565b919360206001819287870151815501950192016115de565b906101b99161155e565b6101b9919061168e906080906004906116648161165e87516001600160a01b031690565b90611020565b61167c60018201611676602088015190565b90611630565b6116946002820161168e604088015190565b90611460565b6116af6003820161165e60608801516001600160a01b031690565b0192015190565b906101b99161163a565b929160206116dd6101b99360408701908782036000890152610296565b940152565b600061172c916117026116fd6001546001600160a01b031690565b6101ec565b61172183637de24fcf61171460405190565b9687958694859360e01b90565b8352600483016113e8565b03925af1908115611a5057600091611a75575b5061174a6000611405565b611755610192835190565b811015611a7157611766818361143c565b5190611775600083015161221a565b916005926117866101928286610cb0565b9361179885546001600160a01b031690565b946117a36000610ec6565b956117b66001600160a01b038816610f5e565b036118b657506118b19461184b83611850936118326006946117e5846117e061019233809a6101f5565b6114a2565b88516118229061181b6117f960208d015190565b916118146118056114cb565b6001600160a01b03909b168b52565b60208a0152565b6040880152565b6001600160a01b03166060860152565b61184661183f6000611405565b6080860152565b610cb0565b6116b6565b33906118626020600085015194015190565b61189361188d7f04c47544b62d97fc6d744e7cc21ed4a24af06a46427efcfd15a0db261dbb27d69390565b936101ec565b936118a96118a060405190565b928392836116c0565b0390a3611428565b61174a565b90506118c981546001600160a01b031690565b6118d233610f5e565b14611a55575b80546001600160a01b03166118ec33610f5e565b036118fd575b506118b19350611850565b6119248261191f61019261191885546001600160a01b031690565b60066101f5565b6128ab565b60038101546001600160a01b03166119446001600160a01b038716610f5e565b036119aa575b6119a4906119916118b196611967856117e06101923360066101f5565b6119713384611020565b61198861197f602088015190565b60028501611460565b60038301611020565b600461199d6000611405565b9101611460565b386118f2565b6119c46116fd6116fd60038401546001600160a01b031690565b90631756c30e6119d660048301610dac565b833b156101a757611a0c936119fe600080946119f160405190565b9788958694859360e01b90565b835260048301526024820190565b03925af18015611a50576118b1966119a49361199192611a32575b50965050905061194a565b611a4a906000611a42818361067e565b810190610487565b38611a27565b6113f9565b611a6c611a63602085015190565b60028301611460565b6118d8565b5050565b611a90913d8091833e611a88818361067e565b81019061121f565b3861173f565b6101b9906110f5565b906101b991611ab1611106600461109f565b611b02565b15611abd57565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206d7573742062652065786368616e67650000000000000000006044820152606490fd5b6101b99190611b22611b1d611b183360036101f5565b61109f565b611ab6565b611bd1565b15611b2e57565b60405162461bcd60e51b815260206004820152601760248201527f446f6d61696e206d7573742062652076657269666965640000000000000000006044820152606490fd5b15611b7a57565b60405162461bcd60e51b815260206004820152602960248201527f446f6d61696e20616c7265616479206c6973746564206f6e20616e6f746865726044820152682065786368616e676560b81b6064820152608490fd5b90611be0610192836005610cb0565b611c62826004611bf784546001600160a01b031690565b93611c1f611c056000610ec6565b95611c186001600160a01b038816610f5e565b1415611b27565b611c516003820195611c4b610f5e611c3e89546001600160a01b031690565b926001600160a01b031690565b14611b73565b611c5c338096611020565b01611460565b611c9c611c96611c907f94ec80928933a86cc2847706c09c43fa58866b537c8fce8eef172af4036af5209590565b926101ec565b92611405565b92611ca660405190565b600090a4565b906101b991611a9f565b6101b990611cc7611106600461109f565b6101b990611cdc611b1d611b183360036101f5565b611d3b565b15611ce857565b60405162461bcd60e51b815260206004820152602560248201527f446f6d61696e206e6f74206c6973746564206f6e2063616c6c696e672065786360448201526468616e676560d81b6064820152608490fd5b611d49610192826005610cb0565b611d7b611d6060038301546001600160a01b031690565b339290611d7690611d7085610f5e565b14611ce1565b61260c565b6110866110807ff27bc8e4c954bf9eead2d99629d460313da75ee401666af4d3cb1eb821ddb1f69390565b6101b990611cb6565b906101b991611dc1611106600461109f565b6101b99190611dd7611b1d611b183360036101f5565b906000611de8610192846005610cb0565b611e08611dff60038301546001600160a01b031690565b611d7033610f5e565b611e118161260c565b01611e2d82611e2783546001600160a01b031690565b92611020565b611e50836117e0610192856006611e4b8561191f6101928a856101f5565b6101f5565b611c9c611c90611c907f3275c4afb1638bd20394301d401c788e5091157ddca135fd84970904da6541af9590565b906101b991611daf565b6101b990611e94610f3d565b611efb565b15611ea057565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b9060ff90611016565b90611ef461019261103792151590565b8254611edb565b611f14611f0f611f0b600461109f565b1590565b611e99565b611f1f816001611020565b611f2b60016004611ee4565b611f557f9b7c520e9e227a011fa79baf4082565a9fd780e2bcb20889c0fe36eba4b5c8db916101ec565b90611f5f60405190565b600090a2565b6101b990611e88565b6101b990611f7a610f3d565b6101b990611f8b611106600461109f565b61202c565b15611f9757565b60405162461bcd60e51b81526020600482015260126024820152714475706c69636174652065786368616e676560701b6044820152606490fd5b916001600160a01b0360089290920291821b911b611016565b9190611ffb610192611037936101ec565b908354611fd1565b90815491600160401b83101561069f57826120269160016101b995018155610580565b90611fea565b61205a6003612049612044611f0b611b1886856101f5565b611f90565b612055836001926101f5565b611ee4565b612065816002612003565b611f557f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e1916101ec565b6101b990611f6e565b6101b9906120a4610f3d565b6101b9906120b5611106600461109f565b612106565b156120c157565b60405162461bcd60e51b815260206004820152601760248201527f45786368616e676520646f6573206e6f742065786973740000000000000000006044820152606490fd5b61212c600361212061211b611b1885846101f5565b6120ba565b612055836000926101f5565b6121378160026126e4565b611f557ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb916101ec565b6101b990612098565b6101b990612176610f3d565b6121b9565b1561218257565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b6121dc6121c5826101ec565b6121d5610f5e6101866000610ec6565b141561217b565b611f2b816001611020565b6101b99061216a565b6102ca61220892602092612202815190565b94859290565b93849101610273565b610192916121f0565b61224261222660405190565b8092612236602083019182612211565b9081038252038261067e565b61225461224d825190565b9160200190565b2090565b600061227161019292612269600090565b506005610cb0565b01546001600160a01b031690565b9061229a61228e6104a1845490565b92600052602060002090565b9060005b8181106122ab5750505090565b9091926122cf6122c86001926122c087610dac565b815260200190565b9460010190565b92910161229e565b906101929161227f565b906101b9610d9e926122f260405190565b938480926122d7565b610192906122e1565b906123116106f0836108ad565b918252565b61019260406106a4565b6123286114cb565b906000825260208080808086016060815201600081520160008152016000905250565b905250565b610192612320565b612360612316565b9060008252602080830161234b612350565b610192612358565b60005b82811061238957505050565b602090612394612372565b818401520161237d565b906101b96123b46123ae84612304565b936108ad565b601f19016020840161237a565b906101b961244660046123d26114cb565b946123f46123e782546001600160a01b031690565b6001600160a01b03168752565b61240a61240360018301610d84565b6020880152565b61241961181b60028301610dac565b61244061243060038301546001600160a01b031690565b6001600160a01b03166060880152565b01610dac565b6080840152565b610192906123c1565b61246d61247291612465606090565b5060066101f5565b6122fb565b9061248361247e835190565b61239e565b916000908361249183611405565b61249c610192845190565b81101561250057806124b86124b46124fb938661143c565b5190565b6124e0610b226124c9836005610cb0565b6124db6124d4612316565b948a860152565b61244d565b6124ea828961143c565b526124f5818861143c565b50611428565b612491565b5093505050565b61250f612372565b50610192610b22612521836005610cb0565b6124db61252c612316565b948552565b9061253d61247e835190565b916000908361254b83611405565b612556610192845190565b81101561250057806124b86124b461256e938661143c565b61254b565b9061258261228e6104a1845490565b9060005b8181106125935750505090565b9091926125c16122c86001926125b087546001600160a01b031690565b6001600160a01b0316815260200190565b929101612586565b9061019291612573565b906101b9610d9e926125e460405190565b938480926125c9565b610192906125d3565b61019260026125ed565b6101b991600091611fea565b600060046101b9926126218360038301612600565b016114e6565b9061263661228e6104a1845490565b9060005b8181106126475750505090565b9091926126646122c86001926125b087546001600160a01b031690565b92910161263a565b9061019291612627565b906101b9610d9e9261268760405190565b9384809261266c565b61019290612676565b9190820391821161143757565b634e487b7160e01b600052603160045260246000fd5b805480156126df5760001901906126dc6126d68383610580565b90612600565b55565b6126a6565b6126f9612700926126f483612690565b61279d565b9092901590565b156127425760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612761612751835490565b61275b6001611405565b90612699565b90818103612771575b50506126bc565b6120266127846105e161278b9486610580565b9184610580565b388061276a565b610192600019611405565b919082519260006127ad81611405565b855b811015612804576127d06127c3828561143c565b516001600160a01b031690565b6127e26001600160a01b038616610f5e565b146127fa576127f36127af91611428565b90506127ad565b9450505050600190565b5093505050612811612792565b9190565b9061282461228e6104a1845490565b9060005b8181106128355750505090565b90919261284a6122c86001926122c087610dac565b929101612828565b9061019291612815565b906101b9610d9e9261286d60405190565b93848092612852565b6101929061285c565b6101b99160009161148b565b805480156126df5760001901906126dc6128a58383610580565b9061287f565b6126f96128c0926128bb83612876565b61293b565b156129025760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612911612751835490565b90818103612921575b505061288b565b6114c561278461088b6129349486610580565b388061291a565b9190825192600061294b81611405565b855b811015612804576129616124b4828561143c565b84146127fa5761297361294d91611428565b905061294b56fea2646970667358221220a6032f571ac9fa51b48f09a32827ab67ff828148f9996dd432fe8f26a821634c64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addExchange(address)\": {\n        \"params\": {\n          \"_exchange\": \"Address of the exchange contract\"\n        }\n      },\n      \"initialize(address)\": {\n        \"params\": {\n          \"_verifyDomainProcessor\": \"Address of the VerifyDomainProcessor contract\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeDomainListing(bytes32)\": {\n        \"params\": {\n          \"_domainId\": \"Domain ID to update listing status for\"\n        }\n      },\n      \"removeExchange(address)\": {\n        \"params\": {\n          \"_exchange\": \"Address of the exchange contract\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setDomainListing(bytes32,uint256)\": {\n        \"params\": {\n          \"_domainId\": \"Domain to set listed status for\",\n          \"_listingId\": \"Listing Id of domain on calling exchange\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"updateDomainOnSale(bytes32,address)\": {\n        \"params\": {\n          \"_domainId\": \"Domain ID to update listing status for\",\n          \"_newOwner\": \"New owner of the domain\"\n        }\n      },\n      \"updateVerifyDomainProcessor(address)\": {\n        \"params\": {\n          \"_verifyDomainProcessor\": \"Address of the new VerifyDomainProcessor contract\"\n        }\n      },\n      \"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"params\": {\n          \"_proofs\": \"Array of domain ownership TLS proofs\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addExchange(address)\": {\n        \"notice\": \"ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized. Exchange must not already exist in the registry. \"\n      },\n      \"initialize(address)\": {\n        \"notice\": \"ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts. This can only be called once.\"\n      },\n      \"removeDomainListing(bytes32)\": {\n        \"notice\": \"ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one that the domain is listed on. This removes the exchange and listingId from the domain. \"\n      },\n      \"removeExchange(address)\": {\n        \"notice\": \"ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry. \"\n      },\n      \"setDomainListing(bytes32,uint256)\": {\n        \"notice\": \"ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is listed on the calling exchange. This sets the exchange and listingId of the domain. \"\n      },\n      \"updateDomainOnSale(bytes32,address)\": {\n        \"notice\": \"ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status from the domain. \"\n      },\n      \"updateVerifyDomainProcessor(address)\": {\n        \"notice\": \"ONLY OWNER: Update the verify domain processor\"\n      },\n      \"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"notice\": \"Verify domains and add them to the registry. If domain is transferred off-chain to another party  then they can re-verify the domain and claim ownership of the domain and previous ownership is removed. The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on the domain. Function reverts if: - Domain ownership TLS proofs are invalid \"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 7156,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"verifyDomainProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IVerifyDomainProcessor)11894\"\n      },\n      {\n        \"astId\": 7159,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"exchanges\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 7163,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"isExchange\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 7165,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"isInitialized\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 7170,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"domains\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Domain)11806_storage)\"\n      },\n      {\n        \"astId\": 7175,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"userDomains\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IVerifyDomainProcessor)11894\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IVerifyDomainProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Domain)11806_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct IVerifiedDomainRegistry.Domain)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Domain)11806_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Domain)11806_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct IVerifiedDomainRegistry.Domain\",\n        \"members\": [\n          {\n            \"astId\": 11797,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"owner\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 11799,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"name\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 11801,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"expiryTime\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 11803,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"exchange\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 11805,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"listingId\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/VerifyDomainProcessor.json",
    "content": "{\n  \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_registry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"_providerHashes\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"providerHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"ProviderHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"providerHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"ProviderHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"witness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WitnessAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"witness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WitnessRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_newProviderHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"addProviderHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWitness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWitness\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getProviderHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWitnesses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"isProviderHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWitness\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"providerHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_removeProviderHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"removeProviderHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removeWitness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWitness\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof\",\n          \"name\": \"proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"verifyProofSignatures\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n          \"name\": \"_proofs\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"verifyProofs\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTime\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IVerifyDomainProcessor.DomainRaw[]\",\n          \"name\": \"domains\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"witnesses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n    \"transactionIndex\": 60,\n    \"gasUsed\": \"15020436\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000020000000000000000000000000000000010000000000040000000000000000000000000000000000002000000001000000000000000000000000000000000000020000010000000000000800000000000000010000000000000000400000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\",\n    \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 240,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866643436323230333962653365343238366464333238356433366437373261373164353830613961666130613137313861376536343335333963393532636639000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 241,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839306136343839656666333831343036383961313531333366623538393036613765383437636331383237316166303336393336633865646139316464636338000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 242,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831346432366430326233616539663236663965363261346438643736656266666630636434613464343632396330386339303961663939656330656234316437000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 243,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836343535386234333633633466386434653763316565316137356534643832663866613736363430653137346230366434656433346533623436656263316137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 244,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865346163393363663332613538353839376233303065656330643232666464616564373031363539343866376161666431633434333634383035383133303537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 245,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834613236366664363366353530646236623739313732333235663333343139646636643564383762663932346231373564386231383137663031306132316366000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 246,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864633065363637323466636633386538353139633761623333616239653661303437633735386462333532303462316430383635303066653530333333663731000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 247,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835313561383265333332366239383563613037336435386133626139323930653834666638643032316430373265376234323066643036313662633630396537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 248,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862343161353133666464336532623761366238653063303266386137313461613361636131303163643332333635646536636261633930666165333038653036000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 249,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831666463343733386233323364346333386266363537613333663734663935363138626331313933336663633463653665396633663763393366356134393265000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 250,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835663135323331653537613266613836663565316562316332616264626435343835313039616461363562623633626564383763373234323564636138323835000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 251,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835343539656262656136343664316134613063393339343465363836303063396533353539313861393062333664333532613132393162613535376535353663000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 252,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866663636633765633166376338316663383333626166623935323263633135626534656635363436323236376338393837393531303530316331626337376664000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 253,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835666161353135303039636137393238303562646630336439353164373533616232343163333231303636653366306362633065653866346330396563623332000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 254,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838303438313862323836653663323034623366313832383262316637613061343062316235353562633339646366323536333432653062346463336632393932000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 255,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835666631363933333461383162386239386261396537626562316566326533383630663739663134386366303735323635323465383239656366366436653564000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 256,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833383938393332396535636564353835396536353039646133396631316636333434633130353232633031393363306362353733653738336539373466626430000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 257,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861633434316436643165393936326562306162636263383139323331653438363134373836633137393530376664306661616563346361643062356431653062000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 258,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865363265363332396162656664656532346663656366333763613535623131326661396430616261636232633939636437663863306461366337626134366138000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 259,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830393962363732366465313338323336666137643339313766313763616566343265626431396661393364653936623162316661666663373133323635643330000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 260,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864653165333763626232383737306131623165643730643461363833376530656537323739323630363965653866613136333366303365346465326333356364000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 261,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836633065306232333432346437356336313931323039343837613237626463623965653966373438656330356638373262346166643536616636366333366335000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 262,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839663736613234346237333164373235376434636338343666336461393837613632303338363261333261626535643337393738356462656364323335643161000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 263,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865663633656237643064613538303830373761663661386539633136303431366361363664623136373739656633306534393439643331656464373062663039000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 264,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832623564623037663538386264323764333739353238316336343066643566666536646531313134353033613237653531306134616134626439643030346434000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 265,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837313839393430303730623035613731326663363330353365396337373138373730633536326364376466303834653530613934313636396636383030393061000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 266,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831363537666161633934646435356530363333363264646662366639356335613664323165373966663735386336613864363037393531306230303462653332000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 267,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836306131386639623861663430356463623930623531653637313966633134623763373932376135393631343434636439376562386563666663376563626439000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 268,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830343066626536386539316134353735616439316437646362393030373766636663313736323765663261313239336635396431373732393539636361656437000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 269,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865326631396633633931643961353930636661663235663436353531623461303233396162343532656635663633386162313732636366626430613063363137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 270,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837306138633062353630623436353563336137633638633062623736636639666334323438346133626237336335666564303261356662343239373936356236000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 271,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835366338313264636364383436323032393261313861383239313538626132306665663439653532656661353739346335386437643237383031343866633233000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 272,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837326162373032333736383634646261316562373631613639333761623164396664303265363037303433643764363433346262336633343262323230613733000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 273,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864373865353566303964653963313836393036343133353830376331353134623262376639303562323039636335373065636435326530346230333635386561000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 274,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837353263313535376134656461613734663963366464376331363665643931656663653134656439303634373136343133373366326137623032383463316464000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 275,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830613664393963386535306238363535366162376362383466353133653130303432316662663330626665633637636464313863653732303235353331393933000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 276,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836383133626466356532346536623564626137626634336461383933623839326237373265646536326664343464643262363461333131373333376262663166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 277,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833646534326637353832333662666237393464663139396439653834353833373964333731326432656336383865326535666633633364663566393538666131000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 278,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863336464313363656166326639646531323563623233366133646263663739633063316637353861623631383763656461363834653338343535646636316433000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 279,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864393333356236396430613939313235353765316139656465313235313038393331626361623661656536383734663235666633386264376634653135623533000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 280,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832386634643661313032613432356633323361623039623364663739323435636331303761663132373530333539613361626666363834656461386363616234000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 281,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839366533313166366463373838303933386138333264383137643963376266353336326462316331316231616135633734373730323965633161363766646462000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 282,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836303830343636663738326437396366356533363964376464623964666164306131386433333035663931373566356464613966303138333739646661303962000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 283,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830326530306532323831343432376532353464386633383634653363326663376434646638663561383830613032616364343533653765643236366433346633000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 284,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837323237643039306465353233306239346262313237366233663766383836333763356638316361373836313164643638386162616164386634343466393934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 285,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833356539383462353539383263356666303532613535366634323232643638633834313862333066656632613439326135346664633239333264333764393232000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 286,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837313338653064646261626330613630616364343562656162326465336233353862353364653734663432333266333964653130376536333835393438353734000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 287,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838653564363532323035343333373561373837383731626637356664393761633565393261623139653465333936366638636431306536323661326136306137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 288,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839333336386338316131623561653762646461356636643434333861343638643032313437336262383766323439376661393138323931396461346230633934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 289,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834343237313533343837353339616537333065663865666561383038633037626232303438373432353466316332313232633130303631663435623966336336000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 290,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834333563313132303261633631383562323162386462346662363131323339663838623135613966616264353932383831646364633865316435363939623166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 291,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862643839303664306265666436656530303264646535363137383433393135393264383737303064356530353666656235356564656566333739623038313865000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 292,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838623265386330333365363535326663383430393739353937353864323832666566656639316231666231346166343033303030306239623963306534303032000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 293,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862306263653434636639373735333937613531363538363662613330626433653038643830333336316530376463643133383336623065366261633930313135000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 294,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834643439386665386135633034316135623764623736313933653764386238393266303637316535316365393634323863656231303666663331363961376334000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 295,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833313564383433666231373131363230393163306234386263646639653762366364353031653565376239353933393030383330376531353238666534376239000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 296,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864376466666532633632663535303536346562333963333662636630643663356534326138316234363535383864323133306630656138303639613730333265000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 297,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865393262303463363864353833323938663363346237626363323935306531656238376331663037633364316562623838326635386231633835393536396434000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 298,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838643366306165313535363063363236303230303362336165336163333135323235636533656663356238663130393566383739383734633537333134626261000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 299,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835383638343263353434623236353532356132376632663639623234653865613865303464343439663564613362383338326637376239616266666136653230000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 300,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830396138623230623364653233623866363631653338386536353431616134653138623339656466376532663039323665346233373633633832666565316532000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 301,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862373930353632383564376436323731386439623166313930383763663234366636666134626435346235396665666236653533363734656230333638313966000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 302,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839313062636330386565636134356631313539336665376233616138303832313361313434646463633935326264343634383065626338323731303064656632000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 303,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862323336353536616164396539323363343535306665653862626138316334316337353336383533333534656264363764663264663339643038303564626331000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 304,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834663437333835353334643834343336356439656331363432333133373133646637623530323030643139333466663835303066303231613465353066306531000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 305,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863323334653761616137306633353338316363653465643631656235666464656262383661316362303064656434336461366266363065316461373566666535000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 306,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832636334633339623732373466383430373139633037613635663630303461343361323835343530353266623739363131353638623934663866323836323436000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 307,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830646465343061356238613634353961393033613639633338306538646431663565323230343833346462373235376439313964303563663566623562363065000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 308,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830393437373132623835333464316339346463393962656234343731623566663861383239313436616338303561383438393935313662613763326239323162000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 309,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838396561636431663063646462383862376565663565323966623465633032656332633138303931653033326130633637383138336635323565393632653162000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 310,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833633935646532623935396566313034663532333765376337643832376338346237363039653163363533643535386438376330643235393139343830633262000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 311,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838343239336165343230633236396433633663313534356139323564653831313061323638326430353538306330323930386562353939643933653838393333000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 312,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835313761656530623465623536383365613265653665656137316162313138356130643966636266646633323633356662376533613030623433656436313035000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 313,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837646165653239343961633835643266336463626134633264343561343834316334666635336336663932383066303136323765393731323066646665396461000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 314,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865653933306431383732623332376466333836306563643733323330663934376536663538306163366430646164633638326137346463386134393832646339000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 315,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833303264643966623138643765623432616536666233333838356664323964313966363939346666666364636239616566326437636437333661643632343937000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 316,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863613662353732636331343639323935336261633261633361313232626238323564656532313764326663303661333662343563613235393839663730303139000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 317,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831316463376138623231336262353836353764383464613064356133636466663837336464653138626531396232623634346366306233653131356236366431000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 318,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838353030643233373239343732663063333232363432373930383162656536356536333263393333636463386638636635356537363333373566323035666462000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 319,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830316264323736666133343535383361666536393030646430616463613031316632343033363938373733623838353935396239613032396630356233633537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 320,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832643861376637353466393036316535393365306363306332383337636363633338356235663862373863303232396330626462393839366438386234343333000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 321,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837616261623931313531323366396535373431616561333865613036376337346466613862363039326338353332646263633839383966376138643833613932000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 322,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834373262323532373933323536393563383138363066653064363461633862373034326431633834656138653835396339376534616362613964353836393235000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 323,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836303666366135643831346136666530653139653039326231356164613333343438653862346165376465393731393364333966623838623565323261326263000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 324,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830323636323063323736353737313534326632626265343364646531626263643139363164376361343261656538373862373030336264353866626364666135000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 325,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861376235653462633438663430636332653665373133366564353333356231653731346233313038626661336533386261313133333732363062636334613131000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 326,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838343530616230336262363864636566386130326465303739656134333038353964386665366236373664323736366432643065396235316566393864656233000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 327,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866346361646164326265326162393039613637663634653630393263616138303735386236633730356336393439393366653735316336306134333965313934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 328,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838353366646635396233653064396438666139643035393038646633643231306434653061636538393632336438633064323633646634653263323864323965000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 329,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863663837396337656439336665643366666533323839366132663066343762303462303631613335353362316132393133373838356532633263653839313337000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 330,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839306565333836623438633166333865643462643738393266373962343330356139386633663766643664336236666630383637333764636632376363353764000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 331,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861396261653735316666666636623364326336616666313037366133613865633833663939336639633130336337383363353962633664393934663930336166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 332,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866326261343837646666383661646364623364653534376662333739633736633532396433653238316166386334663061343130373738626438326431363637000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 333,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861323035393836346462363537643837336230313433643364376430303833353739316565616437316264353162336139663535353265656334323232623465000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 334,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830313135313863326462343936636137616164313164383532623037353034373033393235666135653036386466393030323438306166343962623561396366000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 335,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861393435323661326665633162306661643035636262623830396237353732663434383966616432366562313836393030663032396239313331373334353837000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 336,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830613163386561343632333431356130303565303163326239623764313632626539623939396237356133636137633235623931396265363361353635336537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 337,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833386433393064666361373435633964333230333264623834356334353530653637666232373130363562303432373738636330346339346435383864336565000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 338,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864623335373565363265646233303332626264616565343561376136356432323866633766356363613263356237616130393535636339646638613039656362000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 339,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      },\n      {\n        \"transactionIndex\": 60,\n        \"blockNumber\": 20166840,\n        \"transactionHash\": \"0xe4a54c2ad3774d5499efa4f79977113475871bcc27dba595b0796c81ee32e871\",\n        \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863323764353138666435613639663266373931373938383136326533623730376235326534633137313433666630373733376131353866313964323732383139000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 340,\n        \"blockHash\": \"0xfb52cc6b903bcffe509d043b9ba8fdb119f9bc902e53d32162ff0f51531edeab\"\n      }\n    ],\n    \"blockNumber\": 20166840,\n    \"cumulativeGasUsed\": \"28084710\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x6206EB4c794c7fe58315f76ab088Ee3C17E0d9f5\",\n    \"0xcE4d0DE6589bF2b439d08dc9addD56428D76eC25\",\n    [\n      \"0xfd4622039be3e4286dd3285d36d772a71d580a9afa0a1718a7e643539c952cf9\",\n      \"0x90a6489eff38140689a15133fb58906a7e847cc18271af036936c8eda91ddcc8\",\n      \"0x14d26d02b3ae9f26f9e62a4d8d76ebfff0cd4a4d4629c08c909af99ec0eb41d7\",\n      \"0x64558b4363c4f8d4e7c1ee1a75e4d82f8fa76640e174b06d4ed34e3b46ebc1a7\",\n      \"0xe4ac93cf32a585897b300eec0d22fddaed70165948f7aafd1c44364805813057\",\n      \"0x4a266fd63f550db6b79172325f33419df6d5d87bf924b175d8b1817f010a21cf\",\n      \"0xdc0e66724fcf38e8519c7ab33ab9e6a047c758db35204b1d086500fe50333f71\",\n      \"0x515a82e3326b985ca073d58a3ba9290e84ff8d021d072e7b420fd0616bc609e7\",\n      \"0xb41a513fdd3e2b7a6b8e0c02f8a714aa3aca101cd32365de6cbac90fae308e06\",\n      \"0x1fdc4738b323d4c38bf657a33f74f95618bc11933fcc4ce6e9f3f7c93f5a492e\",\n      \"0x5f15231e57a2fa86f5e1eb1c2abdbd5485109ada65bb63bed87c72425dca8285\",\n      \"0x5459ebbea646d1a4a0c93944e68600c9e355918a90b36d352a1291ba557e556c\",\n      \"0xff66c7ec1f7c81fc833bafb9522cc15be4ef56462267c89879510501c1bc77fd\",\n      \"0x5faa515009ca792805bdf03d951d753ab241c321066e3f0cbc0ee8f4c09ecb32\",\n      \"0x804818b286e6c204b3f18282b1f7a0a40b1b555bc39dcf256342e0b4dc3f2992\",\n      \"0x5ff169334a81b8b98ba9e7beb1ef2e3860f79f148cf07526524e829ecf6d6e5d\",\n      \"0x38989329e5ced5859e6509da39f11f6344c10522c0193c0cb573e783e974fbd0\",\n      \"0xac441d6d1e9962eb0abcbc819231e48614786c179507fd0faaec4cad0b5d1e0b\",\n      \"0xe62e6329abefdee24fcecf37ca55b112fa9d0abacb2c99cd7f8c0da6c7ba46a8\",\n      \"0x099b6726de138236fa7d3917f17caef42ebd19fa93de96b1b1faffc713265d30\",\n      \"0xde1e37cbb28770a1b1ed70d4a6837e0ee727926069ee8fa1633f03e4de2c35cd\",\n      \"0x6c0e0b23424d75c6191209487a27bdcb9ee9f748ec05f872b4afd56af66c36c5\",\n      \"0x9f76a244b731d7257d4cc846f3da987a6203862a32abe5d379785dbecd235d1a\",\n      \"0xef63eb7d0da5808077af6a8e9c160416ca66db16779ef30e4949d31edd70bf09\",\n      \"0x2b5db07f588bd27d3795281c640fd5ffe6de1114503a27e510a4aa4bd9d004d4\",\n      \"0x7189940070b05a712fc63053e9c7718770c562cd7df084e50a941669f680090a\",\n      \"0x1657faac94dd55e063362ddfb6f95c5a6d21e79ff758c6a8d6079510b004be32\",\n      \"0x60a18f9b8af405dcb90b51e6719fc14b7c7927a5961444cd97eb8ecffc7ecbd9\",\n      \"0x040fbe68e91a4575ad91d7dcb90077fcfc17627ef2a1293f59d1772959ccaed7\",\n      \"0xe2f19f3c91d9a590cfaf25f46551b4a0239ab452ef5f638ab172ccfbd0a0c617\",\n      \"0x70a8c0b560b4655c3a7c68c0bb76cf9fc42484a3bb73c5fed02a5fb4297965b6\",\n      \"0x56c812dccd84620292a18a829158ba20fef49e52efa5794c58d7d2780148fc23\",\n      \"0x72ab702376864dba1eb761a6937ab1d9fd02e607043d7d6434bb3f342b220a73\",\n      \"0xd78e55f09de9c1869064135807c1514b2b7f905b209cc570ecd52e04b03658ea\",\n      \"0x752c1557a4edaa74f9c6dd7c166ed91efce14ed906471641373f2a7b0284c1dd\",\n      \"0x0a6d99c8e50b86556ab7cb84f513e100421fbf30bfec67cdd18ce72025531993\",\n      \"0x6813bdf5e24e6b5dba7bf43da893b892b772ede62fd44dd2b64a3117337bbf1f\",\n      \"0x3de42f758236bfb794df199d9e8458379d3712d2ec688e2e5ff3c3df5f958fa1\",\n      \"0xc3dd13ceaf2f9de125cb236a3dbcf79c0c1f758ab6187ceda684e38455df61d3\",\n      \"0xd9335b69d0a9912557e1a9ede125108931bcab6aee6874f25ff38bd7f4e15b53\",\n      \"0x28f4d6a102a425f323ab09b3df79245cc107af12750359a3abff684eda8ccab4\",\n      \"0x96e311f6dc7880938a832d817d9c7bf5362db1c11b1aa5c7477029ec1a67fddb\",\n      \"0x6080466f782d79cf5e369d7ddb9dfad0a18d3305f9175f5dda9f018379dfa09b\",\n      \"0x02e00e22814427e254d8f3864e3c2fc7d4df8f5a880a02acd453e7ed266d34f3\",\n      \"0x7227d090de5230b94bb1276b3f7f88637c5f81ca78611dd688abaad8f444f994\",\n      \"0x35e984b55982c5ff052a556f4222d68c8418b30fef2a492a54fdc2932d37d922\",\n      \"0x7138e0ddbabc0a60acd45beab2de3b358b53de74f4232f39de107e6385948574\",\n      \"0x8e5d65220543375a787871bf75fd97ac5e92ab19e4e3966f8cd10e626a2a60a7\",\n      \"0x93368c81a1b5ae7bdda5f6d4438a468d021473bb87f2497fa9182919da4b0c94\",\n      \"0x4427153487539ae730ef8efea808c07bb204874254f1c2122c10061f45b9f3c6\",\n      \"0x435c11202ac6185b21b8db4fb611239f88b15a9fabd592881dcdc8e1d5699b1f\",\n      \"0xbd8906d0befd6ee002dde561784391592d87700d5e056feb55edeef379b0818e\",\n      \"0x8b2e8c033e6552fc84097959758d282fefef91b1fb14af4030000b9b9c0e4002\",\n      \"0xb0bce44cf9775397a5165866ba30bd3e08d803361e07dcd13836b0e6bac90115\",\n      \"0x4d498fe8a5c041a5b7db76193e7d8b892f0671e51ce96428ceb106ff3169a7c4\",\n      \"0x315d843fb171162091c0b48bcdf9e7b6cd501e5e7b95939008307e1528fe47b9\",\n      \"0xd7dffe2c62f550564eb39c36bcf0d6c5e42a81b465588d2130f0ea8069a7032e\",\n      \"0xe92b04c68d583298f3c4b7bcc2950e1eb87c1f07c3d1ebb882f58b1c859569d4\",\n      \"0x8d3f0ae15560c62602003b3ae3ac315225ce3efc5b8f1095f879874c57314bba\",\n      \"0x586842c544b265525a27f2f69b24e8ea8e04d449f5da3b8382f77b9abffa6e20\",\n      \"0x09a8b20b3de23b8f661e388e6541aa4e18b39edf7e2f0926e4b3763c82fee1e2\",\n      \"0xb79056285d7d62718d9b1f19087cf246f6fa4bd54b59fefb6e53674eb036819f\",\n      \"0x910bcc08eeca45f11593fe7b3aa808213a144ddcc952bd46480ebc827100def2\",\n      \"0xb236556aad9e923c4550fee8bba81c41c7536853354ebd67df2df39d0805dbc1\",\n      \"0x4f47385534d844365d9ec1642313713df7b50200d1934ff8500f021a4e50f0e1\",\n      \"0xc234e7aaa70f35381cce4ed61eb5fddebb86a1cb00ded43da6bf60e1da75ffe5\",\n      \"0x2cc4c39b7274f840719c07a65f6004a43a28545052fb79611568b94f8f286246\",\n      \"0x0dde40a5b8a6459a903a69c380e8dd1f5e2204834db7257d919d05cf5fb5b60e\",\n      \"0x0947712b8534d1c94dc99beb4471b5ff8a829146ac805a84899516ba7c2b921b\",\n      \"0x89eacd1f0cddb88b7eef5e29fb4ec02ec2c18091e032a0c678183f525e962e1b\",\n      \"0x3c95de2b959ef104f5237e7c7d827c84b7609e1c653d558d87c0d25919480c2b\",\n      \"0x84293ae420c269d3c6c1545a925de8110a2682d05580c02908eb599d93e88933\",\n      \"0x517aee0b4eb5683ea2ee6eea71ab1185a0d9fcbfdf32635fb7e3a00b43ed6105\",\n      \"0x7daee2949ac85d2f3dcba4c2d45a4841c4ff53c6f9280f01627e97120fdfe9da\",\n      \"0xee930d1872b327df3860ecd73230f947e6f580ac6d0dadc682a74dc8a4982dc9\",\n      \"0x302dd9fb18d7eb42ae6fb33885fd29d19f6994fffcdcb9aef2d7cd736ad62497\",\n      \"0xca6b572cc14692953bac2ac3a122bb825dee217d2fc06a36b45ca25989f70019\",\n      \"0x11dc7a8b213bb58657d84da0d5a3cdff873dde18be19b2b644cf0b3e115b66d1\",\n      \"0x8500d23729472f0c32264279081bee65e632c933cdc8f8cf55e763375f205fdb\",\n      \"0x01bd276fa345583afe6900dd0adca011f2403698773b885959b9a029f05b3c57\",\n      \"0x2d8a7f754f9061e593e0cc0c2837cccc385b5f8b78c0229c0bdb9896d88b4433\",\n      \"0x7abab9115123f9e5741aea38ea067c74dfa8b6092c8532dbcc8989f7a8d83a92\",\n      \"0x472b25279325695c81860fe0d64ac8b7042d1c84ea8e859c97e4acba9d586925\",\n      \"0x606f6a5d814a6fe0e19e092b15ada33448e8b4ae7de97193d39fb88b5e22a2bc\",\n      \"0x026620c2765771542f2bbe43dde1bbcd1961d7ca42aee878b7003bd58fbcdfa5\",\n      \"0xa7b5e4bc48f40cc2e6e7136ed5335b1e714b3108bfa3e38ba11337260bcc4a11\",\n      \"0x8450ab03bb68dcef8a02de079ea430859d8fe6b676d2766d2d0e9b51ef98deb3\",\n      \"0xf4cadad2be2ab909a67f64e6092caa80758b6c705c694993fe751c60a439e194\",\n      \"0x853fdf59b3e0d9d8fa9d05908df3d210d4e0ace89623d8c0d263df4e2c28d29e\",\n      \"0xcf879c7ed93fed3ffe32896a2f0f47b04b061a3553b1a29137885e2c2ce89137\",\n      \"0x90ee386b48c1f38ed4bd7892f79b4305a98f3f7fd6d3b6ff086737dcf27cc57d\",\n      \"0xa9bae751ffff6b3d2c6aff1076a3a8ec83f993f9c103c783c59bc6d994f903af\",\n      \"0xf2ba487dff86adcdb3de547fb379c76c529d3e281af8c4f0a410778bd82d1667\",\n      \"0xa2059864db657d873b0143d3d7d00835791eead71bd51b3a9f5552eec4222b4e\",\n      \"0x011518c2db496ca7aad11d852b07504703925fa5e068df9002480af49bb5a9cf\",\n      \"0xa94526a2fec1b0fad05cbbb809b7572f4489fad26eb186900f029b9131734587\",\n      \"0x0a1c8ea4623415a005e01c2b9b7d162be9b999b75a3ca7c25b919be63a5653e7\",\n      \"0x38d390dfca745c9d32032db845c4550e67fb271065b042778cc04c94d588d3ee\",\n      \"0xdb3575e62edb3032bbdaee45a7a65d228fc7f5cca2c5b7aa0955cc9df8a09ecb\",\n      \"0xc27d518fd5a69f2f7917988162e3b707b52e4c17143ff07737a158f19d272819\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_registry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"_providerHashes\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"providerHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"ProviderHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"providerHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"ProviderHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"witness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WitnessAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"witness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WitnessRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_newProviderHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"addProviderHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWitness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWitness\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getProviderHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWitnesses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"isProviderHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWitness\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"providerHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_removeProviderHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"removeProviderHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removeWitness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWitness\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"verifyProofSignatures\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof[]\\\",\\\"name\\\":\\\"_proofs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"verifyProofs\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifyDomainProcessor.DomainRaw[]\\\",\\\"name\\\":\\\"domains\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"witnesses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addProviderHash(string)\\\":{\\\"params\\\":{\\\"_newProviderHash\\\":\\\"New provider hash to be added\\\"}},\\\"addWitness(address)\\\":{\\\"params\\\":{\\\"_newWitness\\\":\\\"Address of the new witness\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeProviderHash(string)\\\":{\\\"params\\\":{\\\"_removeProviderHash\\\":\\\"Provider hash to be removed\\\"}},\\\"removeWitness(address)\\\":{\\\"params\\\":{\\\"_removeWitness\\\":\\\"Address of witness to be removed\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\\\":{\\\"params\\\":{\\\"proof\\\":\\\"Proof to be verified\\\"}},\\\"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"params\\\":{\\\"_proofs\\\":\\\"Proofs to be verified\\\"},\\\"returns\\\":{\\\"domains\\\":\\\"      Array of Domain structs\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addProviderHash(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\\"},\\\"addWitness(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add witness address. Witness must not have been previously added.\\\"},\\\"removeProviderHash(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\\"},\\\"removeWitness(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove witness address. Witness must have been previously added.\\\"},\\\"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\\\":{\\\"notice\\\":\\\"Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters) to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature.  This function verifies a claim by performing the following checks on the claim - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim - Checks if the signatures are valid and from the witnesses This function reverts if - No signatures are found on the proof - Number of signatures is not equal to the number of witnesses - ClaimInfo hash does not match the identifier in the claim - Signatures are invalid (not from the witnesses)  DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the  responsibility of the caller.  Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code    \\\"},\\\"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"notice\\\":\\\"ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/VerifyDomainProcessor.sol\\\":\\\"VerifyDomainProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/VerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { ClaimVerifier } from \\\\\\\"./external/ClaimVerifier.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./external/interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { ProxyBaseProcessor } from \\\\\\\"./external/processors/ProxyBaseProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"./external/lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TicketmasterDataParsing } from \\\\\\\"./external/TicketmasterDataParsing.sol\\\\\\\";\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./interfaces/IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ncontract VerifyDomainProcessor is IVerifyDomainProcessor, ProxyBaseProcessor {\\\\n\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable registry;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _registry,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string[] memory _providerHashes\\\\n    )   \\\\n        ProxyBaseProcessor(_nullifierRegistry, _providerHashes)\\\\n    {\\\\n        registry = _registry;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\\\n     *\\\\n     * @param _proofs        Proofs to be verified\\\\n     * @return domains       Array of Domain structs\\\\n     */\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external \\\\n        override\\\\n        returns (DomainRaw[] memory domains)\\\\n    {\\\\n        require(msg.sender == registry, \\\\\\\"Only registry can call\\\\\\\");\\\\n\\\\n        domains = new DomainRaw[](_proofs.length);\\\\n\\\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\\\n            Proof memory proof = _proofs[i];\\\\n\\\\n            verifyProofSignatures(proof);\\\\n\\\\n            (\\\\n                string memory domainName,\\\\n                string memory expiryTimeStr,\\\\n                string memory providerHash\\\\n            ) = _extractValues(proof);\\\\n\\\\n            // Check provider hash\\\\n            require(_validateProviderHash(providerHash), \\\\\\\"No valid providerHash\\\\\\\");\\\\n\\\\n            _validateAndAddNullifier(proof.signedClaim.signatures);\\\\n\\\\n            domains[i] = DomainRaw({\\\\n                name: domainName,\\\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\\\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\\\\\"YYYY-MM-DDTHH:MM:SS\\\\\\\"\\\\n                // and returns UTC timestamps.\\\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(expiryTimeStr)\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * Extracts all values from the proof context.\\\\n     *\\\\n     * @param _proof The proof containing the context to extract values from.\\\\n     */\\\\n    function _extractValues(Proof memory _proof) internal pure returns (\\\\n        string memory domainName,\\\\n        string memory expiryTime,\\\\n        string memory providerHash\\\\n    ) {\\\\n        string[] memory values = ClaimVerifier.extractAllFromContext(\\\\n            _proof.claimInfo.context, \\\\n            MAX_EXTRACT_VALUES, \\\\n            true\\\\n        );\\\\n\\\\n        return (\\\\n            values[0], // domainName\\\\n            values[1], // expiryTime\\\\n            values[2]  // providerHash\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x34c84f99070a4b76cca1d63b5d8eee8edd8a0e98ace63cca4681d71327f4c18a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ClaimVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary ClaimVerifier {\\\\n\\\\n    /**\\\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\\\n     * the target string in the data string if found. Returns type(uint256).max if:\\\\n     * - Target is longer than data\\\\n     * - Target is not found\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     */\\\\n    function findSubstringEndIndex(\\\\n        string memory data,\\\\n        string memory target\\\\n    ) public pure returns (uint256) {\\\\n        bytes memory dataBytes = bytes(data);\\\\n        bytes memory targetBytes = bytes(target);\\\\n\\\\n        if (dataBytes.length < targetBytes.length) {\\\\n            return type(uint256).max;\\\\n        }\\\\n\\\\n        // Find start of target\\\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\\\n            bool isMatch = true;\\\\n\\\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\\\n                if (dataBytes[i + j] != targetBytes[j]) {\\\\n                    isMatch = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n\\\\n            if (isMatch) {\\\\n                return i + targetBytes.length; // Return end index + 1\\\\n            }\\\\n        }\\\\n\\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    /**\\\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\\\n     * Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"'\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *\\\\n     * @param data      Context string from which target value needs to be extracted\\\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\\\n     */\\\\n    function extractFieldFromContext(\\\\n        string memory data,\\\\n        string memory prefix\\\\n    ) public pure returns (string memory) {\\\\n        // Find end index of prefix; which is the start index of the value\\\\n        uint256 start = findSubstringEndIndex(data, prefix);\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        if (start == dataBytes.length) {\\\\n            return \\\\\\\"\\\\\\\"; // Prefix not found. Malformed or missing message\\\\n        }\\\\n        \\\\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\\\n        uint256 end = start;\\\\n        while (\\\\n            end < dataBytes.length &&\\\\n            !(dataBytes[end] == '\\\\\\\"' && dataBytes[end - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")\\\\n        ) {\\\\n            end++;\\\\n        }\\\\n        if (end <= start) {\\\\n            return \\\\\\\"\\\\\\\"; // Malformed or missing message\\\\n        }\\\\n        bytes memory contextMessage = new bytes(end - start);\\\\n        for (uint i = start; i < end; i++) {\\\\n            contextMessage[i - start] = dataBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\\\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\\\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\\\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\\\n     * multiple times.\\\\n     * \\\\n     * @param data                  Context string from which target value needs to be extracted\\\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\\\n     */\\\\n    function extractAllFromContext(\\\\n        string memory data,\\\\n        uint8 maxValues,\\\\n        bool extractProviderHash\\\\n    ) public pure returns (string[] memory) {\\\\n        \\\\n        require(maxValues > 0, \\\\\\\"Max values must be greater than 0\\\\\\\");\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        uint index = 0;\\\\n\\\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"');\\\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\\\\\"Extraction failed. Malformed extractedParameters\\\\\\\");\\\\n        }\\\\n        index += extractedParametersBytes.length;\\\\n\\\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"'\\\\n        uint valuesFound = 0;\\\\n    \\\\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\\\n\\\\n        while (\\\\n            index < dataBytes.length\\\\n        ) {\\\\n            // Keep incrementing until '\\\\\\\"', escaped quotes are not considered\\\\n            if (!(dataBytes[index] == '\\\\\\\"' && dataBytes[index - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")) {\\\\n                index++;\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isValue) {\\\\n                // \\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\" (3 chars)\\\\n                require(dataBytes[index + 1] == \\\\\\\":\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"', \\\\\\\"Extraction failed. Malformed data 1\\\\\\\");\\\\n                index += 3;     // move it after \\\\\\\\\\\\\\\"\\\\n                isValue = true;\\\\n                valueIndices[2 * valuesFound] = index;      // start index\\\\n            } else {\\\\n                // \\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\" (3 chars) or \\\\\\\\\\\\\\\"}, (3 chars)\\\\n                // \\\\\\\\\\\\\\\"}} is not supported, there should always be a providerHash\\\\n                require(\\\\n                    dataBytes[index + 1] == \\\\\\\",\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"' ||  \\\\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\\\\\",\\\\\\\",\\\\n                    \\\\\\\"Extraction failed. Malformed data 2\\\\\\\"\\\\n                );\\\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\\\n                valuesFound++;\\\\n\\\\n                if (dataBytes[index + 1] == \\\\\\\",\\\\\\\") {\\\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\\\n                    require(valuesFound != maxValues, \\\\\\\"Extraction failed. Exceeded max values\\\\\\\");\\\\n                    index += 3;\\\\n                    isValue = false;\\\\n                } else {    // index + 1 = \\\\\\\"}\\\\\\\"\\\\n                    index += 3;\\\\n                    break;  // end of extractedParameters\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        if (extractProviderHash) {\\\\n            bytes memory providerHashParamBytes = bytes(\\\\\\\"\\\\\\\\\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"\\\\\\\");\\\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\\\\\"Extraction failed. Malformed providerHash\\\\\\\");\\\\n            }\\\\n            index += providerHashParamBytes.length;\\\\n            \\\\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\\\n            valueIndices[2 * valuesFound] = index;\\\\n            // Keep incrementing until '\\\\\\\"'\\\\n            while (\\\\n                index < dataBytes.length && dataBytes[index] != '\\\\\\\"'\\\\n            ) {\\\\n                index++;\\\\n            }\\\\n            valueIndices[2 * valuesFound + 1] = index;\\\\n            valuesFound++;\\\\n        }   \\\\n        \\\\n        string[] memory values = new string[](valuesFound);\\\\n        \\\\n        for (uint i = 0; i < valuesFound; i++) {\\\\n            uint startIndex = valueIndices[2 * i];\\\\n            uint endIndex = valueIndices[2 * i + 1];\\\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\\\n            for (uint j = startIndex; j < endIndex; j++) {\\\\n                contextValue[j - startIndex] = dataBytes[j];\\\\n            }\\\\n            values[i] = string(contextValue);\\\\n        }\\\\n\\\\n        return values;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6a8d456c3b2c5ab5a475279a2f0f103faff3cb2d6abb2ce2029cd4265b904e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/TicketmasterDataParsing.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { DateTime } from \\\\\\\"./lib/DateTime.sol\\\\\\\";\\\\n\\\\nimport { StringConversionUtils } from \\\\\\\"./lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { ClaimVerifier } from \\\\\\\"./ClaimVerifier.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary TicketmasterDataParsing {\\\\n    \\\\n    using StringConversionUtils for string;\\\\n\\\\n    /**\\\\n     * @notice Iterates through every character in the date string and splits the string at each dash, \\\\\\\"T\\\\\\\", or colon. Function will revert\\\\n     * if there are not 6 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\\\n     * to get the unix timestamp. This function is SPECIFIC TO THE DATE FORMAT USED BY Ticketmaster, not suitable for use with other date\\\\n     * formats. Ticketmaster date format is: \\\\\\\"YYYY-MM-DDTHH:MM:SS\\\\\\\" and returns UTC timestamps.\\\\n     *\\\\n     * @param _dateString       Date string to be converted to a UTC timestamp\\\\n     */\\\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256 utcTimestamp) {\\\\n        string[6] memory extractedStrings;\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\\\n            if (bytes(_dateString)[i] == 0x2d || bytes(_dateString)[i] == 0x3a || bytes(_dateString)[i] == 0x54) {\\\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\\\n                lastBreak = i + 1;\\\\n                breakCounter++;\\\\n            }\\\\n        }\\\\n        // Add last substring to array\\\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\\\n\\\\n        // Check that exactly 6 substrings were found (string is split at 5 different places)\\\\n        require(breakCounter == 5, \\\\\\\"Invalid date string\\\\\\\");\\\\n\\\\n        utcTimestamp = DateTime.timestampFromDateTime(\\\\n            extractedStrings[0].stringToUint(0),    // year\\\\n            extractedStrings[1].stringToUint(0),    // month\\\\n            extractedStrings[2].stringToUint(0),    // day\\\\n            extractedStrings[3].stringToUint(0),    // hour\\\\n            extractedStrings[4].stringToUint(0),    // minute\\\\n            0                                       // we don't need to the second granularity\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * Extract event ID from URL by finding the last slash and taking the substring after it. We assume the\\\\n     * URL is formulated something like: {domainRoot}/.../event/EVENT_ID\\\\n     *\\\\n     * @param _url          URL to extract event ID from\\\\n     * @return              Event ID extracted from URL\\\\n     */\\\\n    function _extractEventIdFromUrl(string memory _url) internal pure returns (string memory) {\\\\n        string memory prefix = \\\\\\\"event/\\\\\\\";\\\\n        bytes memory urlBytes = bytes(_url);\\\\n        uint256 urlLength = urlBytes.length;\\\\n\\\\n        uint256 startIndex = ClaimVerifier.findSubstringEndIndex(_url, prefix);\\\\n        // If the start index is the max value or the URL length, then the event ID was not found\\\\n        if (startIndex == type(uint256).max || startIndex == urlLength) {\\\\n            revert(\\\\\\\"Event ID not found in URL\\\\\\\");\\\\n        }\\\\n\\\\n        bytes memory contextMessage = new bytes(urlLength - startIndex);\\\\n        for (uint i = startIndex; i < urlLength; i++) {\\\\n            contextMessage[i - startIndex] = urlBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * Parse tickets out of a ticket string of the format: '[\\\\\\\"ticket1\\\\\\\", \\\\\\\"ticket2\\\\\\\", \\\\\\\"ticket3\\\\\\\"]'.\\\\n     * We start by getting the number of tickets in a string by counting the number of commas and adding 1.\\\\n     * Then we iterate through the string and find the ticket IDs by looking for the quotes. We need to extract\\\\n     * from quote to quote so we look for all even-numbered quotes then extract the string between that and the\\\\n     * previous quote index.\\\\n     *\\\\n     * @param _ticketString          Stringified array of tickets\\\\n     */\\\\n     function _parseTicketString(string memory _ticketString) internal pure returns (string[] memory ticketIds) {\\\\n        // Assume there is at least one ticket (which means array would not have a comma)\\\\n        // If there is no ticket then the transaction will end up reverting\\\\n        uint256 ticketCount = 1;\\\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\\\n            if (bytes(_ticketString)[i] == 0x2C) {\\\\n                ticketCount++;\\\\n            }\\\\n        }\\\\n\\\\n        ticketIds = new string[](ticketCount);\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\\\n            if (bytes(_ticketString)[i] == 0x22) {\\\\n                breakCounter++;\\\\n                if (breakCounter % 2 == 0) {\\\\n                    ticketIds[(breakCounter/2)-1] = _ticketString.substring(lastBreak, i-1);\\\\n                }\\\\n                lastBreak = i + 1;\\\\n            }\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x23a87b78bf72170f5e0cee6e4a8c59f68947c50971e00d183580ebe473a148c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/DateTime.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.0;\\\\n\\\\n// ----------------------------------------------------------------------------\\\\n// DateTime Library v2.0\\\\n//\\\\n// A gas-efficient Solidity date and time library\\\\n//\\\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\\\n//\\\\n// Tested date range 1970/01/01 to 2345/12/31\\\\n//\\\\n// Conventions:\\\\n// Unit      | Range         | Notes\\\\n// :-------- |:-------------:|:-----\\\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\\\n// year      | 1970 ... 2345 |\\\\n// month     | 1 ... 12      |\\\\n// day       | 1 ... 31      |\\\\n// hour      | 0 ... 23      |\\\\n// minute    | 0 ... 59      |\\\\n// second    | 0 ... 59      |\\\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\\\n//\\\\n//\\\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\\\n//\\\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\\\n// ----------------------------------------------------------------------------\\\\n\\\\nlibrary DateTime {\\\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\\\n    int256 constant OFFSET19700101 = 2440588;\\\\n\\\\n    uint256 constant DOW_MON = 1;\\\\n    uint256 constant DOW_TUE = 2;\\\\n    uint256 constant DOW_WED = 3;\\\\n    uint256 constant DOW_THU = 4;\\\\n    uint256 constant DOW_FRI = 5;\\\\n    uint256 constant DOW_SAT = 6;\\\\n    uint256 constant DOW_SUN = 7;\\\\n\\\\n    // ------------------------------------------------------------------------\\\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\\\n    // the date conversion algorithm from\\\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\\\n    //\\\\n    // days = day\\\\n    //      - 32075\\\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\\\n    //      - offset\\\\n    // ------------------------------------------------------------------------\\\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\\\n        require(year >= 1970);\\\\n        int256 _year = int256(year);\\\\n        int256 _month = int256(month);\\\\n        int256 _day = int256(day);\\\\n\\\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\\\n\\\\n        _days = uint256(__days);\\\\n    }\\\\n\\\\n    function timestampFromDateTime(\\\\n        uint256 year,\\\\n        uint256 month,\\\\n        uint256 day,\\\\n        uint256 hour,\\\\n        uint256 minute,\\\\n        uint256 second\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256 timestamp)\\\\n    {\\\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\\\n            + minute * SECONDS_PER_MINUTE + second;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x64f6113ad342f8bd3c2eb74fde279401d604faf77dd08f6c16c3912c3519f170\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/StringArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title StringArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle String Arrays\\\\n */\\\\nlibrary StringArrayUtils {\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input string to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(string[] memory A, string memory a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (keccak256(bytes(A[i])) == keccak256(bytes(a))) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (type(uint256).max, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The string to remove\\\\n     */\\\\n    function removeStorage(string[] storage A, string memory a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"String not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\",\\\"keccak256\\\":\\\"0x249b6dc922e7e1602f3c2e77075d3b9d259d3badc744241ecf2ca2ee1cbcd56c\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/external/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/processors/ProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"../lib/AddressArrayUtils.sol\\\\\\\";\\\\nimport { StringArrayUtils } from \\\\\\\"../lib/StringArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\nimport { ClaimVerifier } from \\\\\\\"../ClaimVerifier.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ProxyBaseProcessor is IProxyBaseProcessor, Ownable {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    using StringArrayUtils for string[];\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(address => bool) public isWitness;\\\\n    address[] public witnesses;\\\\n    mapping(string => bool) public isProviderHash;\\\\n    string[] public providerHashes;                         // Set of provider hashes that these proofs should be for\\\\n    INullifierRegistry public immutable nullifierRegistry;\\\\n\\\\n    /* ============ Events ============ */\\\\n    event WitnessAdded(address witness);\\\\n    event WitnessRemoved(address witness);\\\\n    event ProviderHashAdded(string providerHash);\\\\n    event ProviderHashRemoved(string providerHash);\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        INullifierRegistry _nulliferRegistry,\\\\n        string[] memory _providerHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        nullifierRegistry = _nulliferRegistry;\\\\n\\\\n        for (uint256 i = 0; i < _providerHashes.length; i++) {\\\\n            require(!isProviderHash[_providerHashes[i]], \\\\\\\"Provider hash already added\\\\\\\");\\\\n            isProviderHash[_providerHashes[i]] = true;\\\\n            providerHashes.push(_providerHashes[i]);\\\\n\\\\n            emit ProviderHashAdded(_providerHashes[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add witness address. Witness must not have been previously added.\\\\n     *\\\\n     * @param _newWitness    Address of the new witness\\\\n     */\\\\n    function addWitness(address _newWitness) external onlyOwner {\\\\n        require(!isWitness[_newWitness], \\\\\\\"Address is already a witness\\\\\\\");\\\\n\\\\n        isWitness[_newWitness] = true;\\\\n        witnesses.push(_newWitness);\\\\n\\\\n        emit WitnessAdded(_newWitness);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove witness address. Witness must have been previously added.\\\\n     *\\\\n     * @param _removeWitness    Address of witness to be removed\\\\n     */\\\\n    function removeWitness(address _removeWitness) external onlyOwner {\\\\n        require(isWitness[_removeWitness], \\\\\\\"Address is not a witness\\\\\\\");\\\\n\\\\n        delete isWitness[_removeWitness];\\\\n        witnesses.removeStorage(_removeWitness);\\\\n\\\\n        emit WitnessRemoved(_removeWitness);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\\\n     *\\\\n     * @param _newProviderHash    New provider hash to be added\\\\n     */\\\\n    function addProviderHash(string memory _newProviderHash) external onlyOwner {\\\\n        require(!isProviderHash[_newProviderHash], \\\\\\\"Provider hash already added\\\\\\\");\\\\n\\\\n        isProviderHash[_newProviderHash] = true;\\\\n        providerHashes.push(_newProviderHash);\\\\n\\\\n        emit ProviderHashAdded(_newProviderHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\\\n     *\\\\n     * @param _removeProviderHash    Provider hash to be removed\\\\n     */\\\\n    function removeProviderHash(string memory _removeProviderHash) external onlyOwner {\\\\n        require(isProviderHash[_removeProviderHash], \\\\\\\"Provider hash not found\\\\\\\");\\\\n\\\\n        delete isProviderHash[_removeProviderHash];\\\\n        providerHashes.removeStorage(_removeProviderHash);\\\\n\\\\n        emit ProviderHashRemoved(_removeProviderHash);\\\\n    }\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n    \\\\n    /**\\\\n     * Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters)\\\\n     * to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature. \\\\n     * This function verifies a claim by performing the following checks on the claim\\\\n     * - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim\\\\n     * - Checks if the signatures are valid and from the witnesses\\\\n     * This function reverts if\\\\n     * - No signatures are found on the proof\\\\n     * - Number of signatures is not equal to the number of witnesses\\\\n     * - ClaimInfo hash does not match the identifier in the claim\\\\n     * - Signatures are invalid (not from the witnesses)\\\\n     * \\\\n     * DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the \\\\n     * responsibility of the caller.\\\\n     * \\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *    \\\\n     * @param proof                 Proof to be verified\\\\n     */\\\\n    function verifyProofSignatures(Proof memory proof) public view returns (bool) {\\\\n\\\\n        // create signed claim using claimData and signature.\\\\n        require(proof.signedClaim.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n        Claims.SignedClaim memory signed = Claims.SignedClaim(\\\\n            proof.signedClaim.claim,\\\\n            proof.signedClaim.signatures\\\\n        );\\\\n\\\\n        // check if the hash from the claimInfo is equal to the infoHash in the claimData\\\\n        bytes32 hashed = Claims.hashClaimInfo(proof.claimInfo);\\\\n        require(proof.signedClaim.claim.identifier == hashed, \\\\\\\"ClaimInfo hash doesn't match\\\\\\\");\\\\n\\\\n        // Recover signers of the signed claim\\\\n        address[] memory signedWitnesses = Claims.recoverSignersOfSignedClaim(signed);\\\\n\\\\n        // check if the number of signatures is equal to the number of witnesses\\\\n        require(\\\\n            signedWitnesses.length == witnesses.length,\\\\n            \\\\\\\"Number of signatures not equal to number of witnesses\\\\\\\"\\\\n        );\\\\n\\\\n        // Check signatures are from witnesses\\\\n        for (uint256 i = 0; i < signed.signatures.length; i++) {\\\\n            bool found = false;\\\\n            for (uint j = 0; j < witnesses.length; j++) {\\\\n                if (signedWitnesses[i] == witnesses[j]) {\\\\n                    found = true;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            require(found, \\\\\\\"Signature not appropriate\\\\\\\");\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function getWitnesses() external view returns (address[] memory) {\\\\n        return witnesses;\\\\n    }\\\\n\\\\n    function getProviderHashes() external view returns (string[] memory) {\\\\n        return providerHashes;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProviderHash(string memory _providerHash) internal view returns (bool) {\\\\n        return isProviderHash[_providerHash];\\\\n    }\\\\n    \\\\n    function _validateAndAddNullifier(bytes[] memory _sigArray) internal {\\\\n        bytes32 nullifier = keccak256(abi.encode(_sigArray));\\\\n        require(!nullifierRegistry.isNullified(nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbfbe301dc003e40793876e36d29ac7da3b294031dc74d26f4e41fcdf3deb1144\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c06040523462000051576200001f620000186200027f565b91620002a7565b6040516136af620008888239608051818181610b4a015261357d015260a0518181816108a50152610fff01526136af90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200008e57604052565b62000056565b90620000ab620000a360405190565b92836200006c565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200005157565b90505190620000ab82620000bc565b6001600160a01b038116620000c7565b90505190620000ab82620000de565b6001600160401b0381116200008e5760208091020190565b6001600160401b0381116200008e57602090601f01601f19160190565b0190565b60005b8381106200014a5750506000910152565b818101518382015260200162000139565b90929192620001746200016e8262000115565b62000094565b938185526020850190828401116200005157620000ab9262000136565b9080601f8301121562000051578151620000b9926020016200015b565b929190620001c06200016e82620000fd565b9381855260208086019202810191838311620000515781905b838210620001e8575050505050565b81516001600160401b03811162000051576020916200020b878493870162000191565b815201910190620001d9565b9080601f8301121562000051578151620000b992602001620001ae565b9160608383031262000051576200024c8284620000cf565b926200025c8360208301620000ee565b60408201519093906001600160401b0381116200005157620000b9920162000217565b620002a262003f3780380380620002968162000094565b92833981019062000234565b909192565b91620002b391620006bb565b60a052565b620000b9620000b9620000b99290565b634e487b7160e01b600052601160045260246000fd5b6000198114620002ee5760010190565b620002c8565b634e487b7160e01b600052603260045260246000fd5b9062000314825190565b81101562000326576020809102010190565b620002f4565b62000132620003479260209262000341815190565b94859290565b9384910162000136565b620003646200013291602094936200032c565b918252565b620003816200037760405190565b9283928362000351565b03902090565b620000b99162000369565b156200039a57565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9060ff905b9181191691161790565b9062000401620000b96200040992151590565b8254620003df565b9055565b8054821015620003265762000429600191600052602060002090565b91020190600090565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801562000481575b60208310146200047b57565b62000448565b91607f16916200046f565b9160001960089290920291821b911b620003e4565b9190620004b6620000b96200040993620002b8565b9083546200048c565b620000ab91600091620004a1565b818110620004d9575050565b80620004e96000600193620004bf565b01620004cd565b9190601f81116200050057505050565b62000514620000ab93600052602060002090565b906020601f84018190048301931062000538575b6020601f909101040190620004cd565b909150819062000528565b906200054d815190565b906001600160401b0382116200008e5762000575826200056e85546200045e565b85620004f0565b602090601f8311600114620005b45762000409929160009183620005a8575b5050600019600883021c1916906002021790565b01519050388062000594565b601f19831691620005ca85600052602060002090565b9260005b8181106200060b57509160029391856001969410620005f1575b50505002019055565b01516000196008601f8516021c19169055388080620005e8565b91936020600181928787015181550195019201620005ce565b91906200063657620000ab9162000543565b62000432565b90815491680100000000000000008310156200008e578262000668916001620000ab950181556200040d565b9062000624565b620006946200069e602093620001329362000688815190565b80835293849260200190565b9586910162000136565b601f01601f191690565b6020808252620000b9929101906200066f565b919091620006c8620007c2565b608052620006d76000620002b8565b620006e4620000b9845190565b811015620007bd57620007b7906200074d60036200072c62000726620007226200071b62000713878b6200030a565b518562000387565b5460ff1690565b1590565b62000392565b620007476001916200073f85896200030a565b519062000387565b620003ee565b6200076760046200075f83876200030a565b51906200063c565b6200077381856200030a565b51620007ae7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f409691620007a460405190565b91829182620006a8565b0390a1620002de565b620006d7565b509050565b620000ab3362000825565b906001600160a01b0390620003e4565b620000b990620000ad906001600160a01b031682565b620000b990620007dd565b620000b990620007f3565b906200081d620000b96200040992620007fe565b8254620007cd565b6000546001600160a01b0316906200083f81600062000809565b620008766200086f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620007fe565b91620007fe565b916200088160405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c80631cba9bed146101225780632ca6927d1461011d57806350262c001461011857806357c6e12a1461011357806359e26be11461010e578063670a8cb714610109578063715018a6146101045780637b103999146100ff5780637de24fcf146100fa5780638da5cb5b146100f557806396d195bd146100f0578063b870676c146100eb578063bd6e7741146100e6578063c2107e73146100e1578063ee2f13cd146100dc578063f2fde38b146100d75763fa7643f4036101d457610c7e565b610c3c565b610c24565b610bfd565b610b6f565b610b31565b610acb565b610a40565b610a19565b610890565b610878565b610837565b6107d9565b61079d565b6105a6565b6102ef565b61021c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761015e57604052565b610127565b9061017761017060405190565b928361013d565b565b6001600160401b03811161015e57602090601f01601f19160190565b0190565b90826000939282370152565b909291926101ba6101b582610179565b610163565b938185526020850190828401116101d45761017792610199565b600080fd5b9080601f830112156101d4578160206101f4933591016101a5565b90565b906020828203126101d45781356001600160401b0381116101d4576101f492016101d9565b346101d45761023461022f3660046101f7565b612392565b604051005b0390f35b60005b8381106102505750506000910152565b8181015183820152602001610240565b61019561027892602092610272815190565b94859290565b9384910161023d565b9052565b6102956101959160209493610260565b918252565b6102af6102a660405190565b92839283610285565b03902090565b6101f49161029a565b6101f4916008021c5b60ff1690565b906101f491546102be565b6101f4906102ea6003916000926102b5565b6102cd565b346101d45761023961030a6103053660046101f7565b6102d8565b60405191829182901515815260200190565b9190916060818403126101d4576103336060610163565b9281356001600160401b0381116101d457816103509184016101d9565b845260208201356001600160401b0381116101d457816103719184016101d9565b602085015260408201356001600160401b0381116101d45761039392016101d9565b6040830152565b805b036101d457565b905035906101778261039a565b6001600160a01b031690565b6001600160a01b03811661039c565b90503590610177826103bc565b63ffffffff811661039c565b90503590610177826103d8565b9190916080818403126101d45761044a61040b6080610163565b93600061041882856103a3565b90860152602061042a828286016103cb565b90860152604061043c828286016103e4565b9086015260608093016103e4565b90830152565b6001600160401b03811161015e5760208091020190565b9291906104766101b582610450565b93818552602080860192028101918383116101d45781905b83821061049c575050505050565b81356001600160401b0381116101d4576020916104bc87849387016101d9565b81520191019061048e565b9080601f830112156101d4578160206101f493359101610467565b91909160a0818403126101d4576104f96040610163565b92600061050682846103f1565b9085015260808201356001600160401b0381116101d45761052792016104c7565b6020830152565b9190916040818403126101d4576105456040610163565b9281356001600160401b0381116101d4578161056291840161031c565b845260208201356001600160401b0381116101d45761052792016104e2565b906020828203126101d45781356001600160401b0381116101d4576101f4920161052e565b346101d45761023961030a6105bc366004610581565b6128f5565b906020828203126101d4576101f4916103a3565b634e487b7160e01b600052603260045260246000fd5b805482101561060e57610605600191600052602060002090565b91020190600090565b6105d5565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561065f575b602083101461065a57565b610629565b91607f169161064f565b8054600093929161068661067c8361063f565b8085529360200190565b91600181169081156106d8575060011461069f57505050565b6106b29192939450600052602060002090565b916000925b8184106106c45750500190565b8054848401526020909301926001016106b7565b92949550505060ff1916825215156020020190565b906101f491610669565b906101776107119261070860405190565b938480926106ed565b038361013d565b90600010610729576101f4906106f7565b610613565b6004600061073a825490565b83101561075557506101f49161074f916105eb565b90610718565b80fd5b6107796107826020936101959361076d815190565b80835293849260200190565b9586910161023d565b601f01601f191690565b60208082526101f492910190610758565b346101d4576102396107b86107b33660046105c1565b61072e565b6040515b9182918261078c565b906020828203126101d4576101f4916103cb565b346101d4576102346107ec3660046107c5565b611d4f565b6101f4916008021c6001600160a01b031690565b906101f491546107f1565b6002600061081c825490565b83101561075557506101f491610831916105eb565b90610805565b346101d45761023961085261084d3660046105c1565b610810565b6040515b918291826001600160a01b03909116815260200190565b60009103126101d457565b346101d45761088836600461086d565b610234610cee565b346101d4576108a036600461086d565b6102397f0000000000000000000000000000000000000000000000000000000000000000610852565b9291906108d86101b582610450565b93818552602080860192028101918383116101d45781905b8382106108fe575050505050565b81356001600160401b0381116101d45760209161091e878493870161052e565b8152019101906108f0565b9080601f830112156101d4578160206101f4933591016108c9565b906020828203126101d45781356001600160401b0381116101d4576101f49201610929565b906101f49060208061098a6040840160008701518582036000870152610758565b940151910152565b906101f491610969565b906109b26109a8835190565b8083529160200190565b90816109c46020830284019460200190565b926000915b8383106109d857505050505090565b909192939460206109fb6109f483856001950387528951610992565b9760200190565b93019301919392906109c9565b60208082526101f49291019061099c565b346101d457610239610a34610a2f366004610944565b610fed565b60405191829182610a08565b346101d457610a5036600461086d565b610239610852610cac565b90610a7b610a74610a6a845190565b8084529260200190565b9260200190565b9060005b818110610a8c5750505090565b909192610ab2610aab60019286516001600160a01b0316815260200190565b9460200190565b929101610a7f565b60208082526101f492910190610a5b565b346101d457610adb36600461086d565b610239610ae66133e7565b60405191829182610aba565b6101f4906103b0906001600160a01b031682565b6101f490610af2565b6101f490610b06565b61028190610b0f565b6020810192916101779190610b18565b346101d457610b4136600461086d565b604051806102397f000000000000000000000000000000000000000000000000000000000000000082610b21565b346101d457610234610b823660046101f7565b6122ce565b906101f491610758565b90610b9d6109a8835190565b9081610baf6020830284019460200190565b926000915b838310610bc357505050505090565b90919293946020610bdf6109f483856001950387528951610b87565b9301930191939290610bb4565b60208082526101f492910190610b91565b346101d457610c0d36600461086d565b610239610c1861344e565b60405191829182610bec565b346101d457610234610c373660046107c5565b611e51565b346101d457610234610c4f3660046107c5565b610e05565b90610c5e90610b0f565b600052602052604060002090565b6101f4906102ea600191600092610c54565b346101d45761023961030a610c943660046107c5565b610c6c565b6101f4906103b0565b6101f49054610c99565b6101f46000610ca2565b610cbe610d4a565b610177610cdc565b6103b06101f46101f49290565b6101f490610cc6565b610177610ce96000610cd3565b610e3e565b610177610cb6565b15610cfd57565b60405162461bcd60e51b815280610d46600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b610177610d55610cac565b610d6e610d61336103b0565b916001600160a01b031690565b14610cf6565b61017790610d80610d4a565b610de0565b15610d8c57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61017790610ce9610df46103b06000610cd3565b6001600160a01b0383161415610d85565b61017790610d74565b906001600160a01b03905b9181191691161790565b90610e336101f4610e3a92610b0f565b8254610e0e565b9055565b610e486000610ca2565b90610e54816000610e23565b610e87610e817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610b0f565b91610b0f565b91610e9160405190565b600090a3565b15610e9e57565b60405162461bcd60e51b815260206004820152601660248201527513db9b1e481c9959da5cdd1c9e4818d85b8818d85b1b60521b6044820152606490fd5b906102956101b583610450565b6101f46040610163565b610efb610ee9565b906060825260006020830152565b6101f4610ef3565b60005b828110610f2057505050565b602090610f2b610f09565b8184015201610f14565b90610177610f4b610f4584610edc565b93610450565b601f190160208401610f11565b6101f46101f46101f49290565b634e487b7160e01b600052601160045260246000fd5b6000198114610f8a5760010190565b610f65565b90610f98825190565b81101561060e576020809102010190565b15610fb057565b60405162461bcd60e51b815260206004820152601560248201527409cde40ecc2d8d2c840e0e4deecd2c8cae490c2e6d605b1b6044820152606490fd5b9061102a336110246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610d61565b14610e97565b61103a611035835190565b610f35565b916000908361104883610f58565b6110536101f4845190565b8110156110de578061109e6110be6110ac6110996110a760208061107a6110d9998c610f8f565b51611084816128f5565b5061108e81611221565b999199969096613458565b610fa9565b01510151613550565b6113f1565b6105276110b7610ee9565b9389850152565b6110c88289610f8f565b526110d38188610f8f565b50610f7b565b611048565b5093505050565b6102c76101f46101f49290565b6101f460056110e5565b9092919261110c6101b582610179565b938185526020850190828401116101d4576101779261023d565b9080601f830112156101d45781516101f4926020016110fc565b92919061114f6101b582610450565b93818552602080860192028101918383116101d45781905b838210611175575050505050565b81516001600160401b0381116101d4576020916111958784938701611126565b815201910190611167565b9080601f830112156101d45781516101f492602001611140565b906020828203126101d45781516001600160401b0381116101d4576101f492016111a0565b60409061120d6112016101779597969460608401908482036000860152610758565b60ff9097166020830152565b019015159052565b6040513d6000823e3d90fd5b516040015173BA4D6eA209c3C3A6B0B31fE136a5F0eFd9De2bd191634be6d4f89160009061124d6110f2565b9461126e6001956112798761126160405190565b998a968795869560e01b90565b8552600485016111df565b03915af49283156112f2576000936112cf575b506112c86112b66112b06112a96112a36000610f58565b87610f8f565b5194610f58565b85610f8f565b51936112c26002610f58565b90610f8f565b5191929190565b6112eb91933d8091833e6112e3818361013d565b8101906111ba565b913861128c565b611215565b6001600160401b03811161015e5760200290565b6101b56101f4916112f7565b60005b82811061132657505050565b60608282015260200161131a565b9061017761134a6113448461130b565b936112f7565b83611317565b6101f46006611334565b90611363825190565b81101561060e570160200190565b61138461137e6101f49290565b60f81b90565b6001600160f81b03191690565b90600681101561060e576020020190565b91908201809211610f8a57565b156113b657565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606490fd5b906000916113fd611350565b8390600061140a81610f58565b846114166101f4825190565b82101561150a578161143961142b828461135a565b516001600160f81b03191690565b611454611446602d611371565b916001600160f81b03191690565b149182156114e7575b82156114c3575b5050611479575b61147490610f7b565b61140a565b9295836114869186611b86565b6114908784611391565b5261149b8683611391565b506114746114bb6114b56114af6001610f58565b866113a2565b97610f7b565b93905061146b565b6114d292509061142b9161135a565b6114df6114466054611371565b148138611464565b91506114f661142b828461135a565b611503611446603a611371565b149161145d565b5050929161152f61155c92936101f496976115296115258390565b5190565b91611b86565b6115398285611391565b526115448184611391565b506115566115526005610f58565b9190565b146113af565b61158261157b61157461156e85610f58565b84611391565b5193610f58565b8093611905565b9061159a8361159461156e6001610f58565b51611905565b6115b1846115946115ab6002610f58565b85611391565b906115e1856115946115d0826115946115ca6003610f58565b89611391565b956115db6004610f58565b90611391565b9361161b565b6101f462015180610f58565b81810292918115918404141715610f8a57565b6101f4610e10610f58565b6101f4603c610f58565b61166a9361165b6116526116446101f499989661165b966116619661163e600090565b50611712565b61164c6115e7565b906115f3565b9161164c611606565b906113a2565b9161164c611611565b6113a2565b156101d457565b91908083039260009091128015828513169184121617610f8a57565b919082810192600013801591841291821691151617610f8a57565b634e487b7160e01b600052601260045260246000fd5b81156116de57600160ff1b8114600019831416610f8a570590565b6116ad565b8181029291600160ff1b81146000831216610f8a578184051490151715610f8a57565b6101f462253d8c610f58565b61171d6107b2610f58565b8110156117299061166f565b61173290610f58565b9061173c90610f58565b9161174690610f58565b611751617d4b610f58565b61175a91611676565b906105b56117696112c0610f58565b6117739083611692565b600e9161177f83610f58565b6117899087611676565b91600c9261179684610f58565b61179f916116c3565b6117a891611692565b906117b290610f58565b906117bc916116e3565b936004946117c986610f58565b6117d2916116c3565b6117db91611692565b61016f6117e86002610f58565b6117f29088611676565b6117fb85610f58565b6118059089611676565b61180e85610f58565b611817916116c3565b61182085610f58565b611829916116e3565b61183291611676565b9061183c90610f58565b90611846916116e3565b61184f83610f58565b611858916116c3565b61186191611692565b94600393611870611324610f58565b61187991611692565b9261188390610f58565b61188c91611676565b9061189690610f58565b61189f916116c3565b6118a891611692565b6118b26064610f58565b6118bb916116c3565b906118c590610f58565b906118cf916116e3565b906118d990610f58565b6118e2916116c3565b6118eb91611676565b6118f3611706565b6118fc91611676565b6101f490610f58565b6101f49190611914602e611371565b90611a04565b6102c76101f46101f49260ff1690565b6101f49060f81c61191a565b6101f46101f46101f49260ff1690565b91908203918211610f8a57565b1561195a57565b60405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606490fd5b156119a657565b60405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608490fd5b604d8111610f8a57600a0a90565b92600091611a1183610f58565b808493815b611a216101f48a5190565b811015611b22578589611a3761142b848361135a565b603090611a4661144683611371565b101580611b00575b611ab6575b5050611aa6575b611a6761142b828b61135a565b611a7a6001600160f81b03198716611446565b14611a8e575b611a8990610f7b565b611a16565b94611a9e90151587151514611953565b600194611a80565b92611ab090610f7b565b92611a5a565b61165b90611af2611aec611ae7611ae261142b89611adc611af89a9d61164c600a610f58565b9861135a565b61192a565b611936565b91610f58565b90611946565b928938611a53565b50611b0e61142b858461135a565b611b1b6114466039611371565b1115611a4e565b509650935061164c9250611b4c91506101f494611b47611b3f8290565b83111561199f565b611946565b6119f6565b906102956101b583610179565b369037565b90610177611b79611b7384611b51565b93610179565b601f190160208401611b5e565b909290611b9b611b968585611946565b611b63565b91845b845b811015611be057611bd981611bbb61142b611ba0948761135a565b611bd3611bc88a84611946565b9160001a918861135a565b53610f7b565b9050611b9e565b509350506101f4915090565b61017790611bf8610d4a565b611cdc565b6101f4906102c7565b6101f49054611bfd565b15611c1757565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320697320616c72656164792061207769746e657373000000006044820152606490fd5b9060ff90610e19565b90611c756101f4610e3a92151590565b8254611c5c565b916001600160a01b0360089290920291821b911b610e19565b921b90565b9190611cab6101f4610e3a93610b0f565b908354611c7c565b90815491600160401b83101561015e5782611cd6916001610177950181556105eb565b90611c9a565b611d116001611d02611cfd611cf9611cf48685610c54565b611c06565b1590565b611c10565b611d0c8382610c54565b611c65565b611d1c816002611cb3565b611d4a7ff5944521c155e80db583372b9992336b6616b14dfb924a5cf6ef97b256d280349161085660405190565b0390a1565b61017790611bec565b61017790611d64610d4a565b611dee565b15611d7057565b60405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f742061207769746e65737300000000000000006044820152606490fd5b91906008610e19910291611c9560ff841b90565b9190611dda6101f4610e3a93151590565b908354611db5565b61017791600091611dc9565b611e186000611e13836001611e0e611e09611cf48484610c54565b611d69565b610c54565b611de2565b611e23816002611f32565b611d4a7f8b5785dce93ca82765b1cc25cedcda1b501288cb23a1fd171c0091d83900f9bd9161085660405190565b61017790611d58565b90611e75611e69610a6a845490565b92600052602060002090565b9060005b818110611e865750505090565b909192611eb3611eac600192611e9b87610ca2565b6001600160a01b0316815260200190565b9460010190565b929101611e79565b906101f491611e5a565b9061017761071192611ed660405190565b93848092611ebb565b6101f490611ec5565b634e487b7160e01b600052603160045260246000fd5b61017791600091611c9a565b80548015611f2d576000190190611f2a611f2483836105eb565b90611efe565b55565b611ee8565b611f47611f4e92611f4283611edf565b611fe5565b9092901590565b15611f905760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b61017791611fa9611f9f835490565b611af26001610f58565b90818103611fb9575b5050611f0a565b611cd6611fcc610831611fd394866105eb565b91846105eb565b3880611fb2565b6101f4600019610f58565b91908251926000611ff581610f58565b855b81101561204c5761201861200b8285610f8f565b516001600160a01b031690565b61202a6001600160a01b038616610d61565b146120425761203b611ff791610f7b565b9050611ff5565b9450505050600190565b5093505050611552611fda565b61017790612065610d4a565b61226c565b1561207157565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9160001960089290920291821b911b610e19565b91906120db6101f4610e3a93610f58565b9083546120b6565b610177916000916120ca565b8181106120fa575050565b8061210860006001936120e3565b016120ef565b9190601f811161211d57505050565b61212f61017793600052602060002090565b906020601f840181900483019310612152575b6020601f909101045b01906120ef565b9091508190612142565b600019600883021c1916906002021790565b90612177815190565b906001600160401b03821161015e5761219a82612194855461063f565b8561210e565b602090601f83116001146121c857610e3a9291600091836121bd575b505061215c565b0151905038806121b6565b601f198316916121dd85600052602060002090565b9260005b81811061221c57509160029391856001969410612202575b50505002019055565b01516000196008601f8516021c19165b90553880806121f9565b919360206001819287870151815501950192016121e1565b9190610729576101779161216e565b90815491600160401b83101561015e5782612266916001610177950181556105eb565b90612234565b6122956003612289612284611cf9611cf486856102b5565b61206a565b611d0c836001926102b5565b6122a0816004612243565b611d4a7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096916107bc60405190565b61017790612059565b610177906122e3610d4a565b612334565b156122ef57565b60405162461bcd60e51b815260206004820152601760248201527f50726f76696465722068617368206e6f7420666f756e640000000000000000006044820152606490fd5b6123596000611e1383600361235461234f611cf484846102b5565b6122e8565b6102b5565b6123648160046126aa565b611d4a7f6f594b4b4f0580c66aabba75218163a99fa1fe330a171cc9e2bfd8e167db22f8916107bc60405190565b610177906122d7565b6101f4906106f7565b906123ad825490565b6123b681610edc565b926123ca6020850191600052602060002090565b6000915b8383106123db5750505050565b6001602081926123ea8561239b565b8152019201920191906123ce565b6101f4906123a4565b6101f4905461063f565b908082146124da5761241c81612401565b906001600160401b03821161015e5761243982612194855461063f565b600090601f831160011461246657610e3a92916000918361245b57505061215c565b0154905038806121b6565b9061247b601f19841692600052602060002090565b9061248b85600052602060002090565b92815b8181106124c2575091600293918560019694106124ae5750505002019055565b01546000196008601f8516021c1916612212565b9193600180602092878701548155019501920161248e565b5050565b9190610729576101779161240b565b9061250090600019906020036008021c90565b8154169055565b9060009161252561251d82600052602060002090565b92835461215c565b905555565b919290602082101561258257601f841160011461254c57610e3a92935061215c565b509061257d61017793600161257461256985600052602060002090565b92601f602091010490565b820191016120ef565b612507565b506125bb8293612599600194600052602060002090565b61214b6020601f860104820192601f8616806125c3575b50601f602091010490565b600202179055565b6125cf908886036124ed565b386125b0565b929091600160401b821161015e576020111561261c5760208110156125fd57610e3a9161215c565b60019160ff191661261384600052602060002090565b55600202019055565b60019150600202019055565b9081546126348161063f565b9081831161265d575b81831061264b575b50505050565b6126549361252a565b38808080612645565b612669838383876125d5565b61263d565b600061017791612628565b90600003610729576101779061266e565b80548015611f2d576000190190611f2a6126a483836105eb565b90612679565b611f476126bf926126ba836123f8565b612744565b156127005760405162461bcd60e51b815260206004820152601460248201527329ba3934b733903737ba1034b71030b93930bc9760611b6044820152606490fd5b6101779161270f611f9f835490565b9081810361271f575b505061268a565b61273761272f61273d93856105eb565b5091846105eb565b906124de565b3880612718565b9190825192600061275481610f58565b855b8110156127ac5761276a6115258285610f8f565b61277c612775825190565b9160200190565b20612794611552865b612790612775825190565b2090565b14612042576127a561275691610f7b565b9050612754565b509350505081199190565b156127be57565b60405162461bcd60e51b815260206004820152600d60248201526c4e6f207369676e61747572657360981b6044820152606490fd5b156127fa57565b60405162461bcd60e51b815260206004820152601c60248201527f436c61696d496e666f206861736820646f65736e2774206d61746368000000006044820152606490fd5b1561284657565b60405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207369676e617475726573206e6f7420657175616c20746044820152746f206e756d626572206f66207769746e657373657360581b6064820152608490fd5b156128b057565b60405162461bcd60e51b815260206004820152601960248201527f5369676e6174757265206e6f7420617070726f707269617465000000000000006044820152606490fd5b906020820190815160200151612909905190565b9160009261291684610f58565b10612920906127b7565b828080808451015196845160200151612937610ee9565b98838a01906129439152565b6020890152015161295390612efe565b925101510161296190611525565b1461296b906127f3565b61297483612a5b565b805191600292612982845490565b1461298c9061283f565b61299584610f58565b935b6129a66101f460208801515190565b851015612a405780956129b882610f58565b6129c36101f4875490565b811015612a28576129d761200b8887610f8f565b6129ea610d616103b0610831858b6105eb565b146129fd576129f890610f7b565b6129b8565b50946129a69196506020612a1d6101f492612a1860016128a9565b610f7b565b969792505050612997565b50946020612a1d6101f492612a186129a6959a6128a9565b509350505050600190565b90610177611b79610f4584610edc565b6020612a6a6000830151612b2b565b910190612a7e612a7983515190565b612a4b565b91612a896000610f58565b612a956101f483515190565b811015612ad55780612a18612ab8612ab1612ad0948651610f8f565b5186612c02565b612ac28388610f8f565b906001600160a01b03169052565b612a89565b50505090565b610195816020939052565b6101f46101f46101f49263ffffffff1690565b92612b25612b18612b2594612b25612b186101f49998612b1897610260565b600560f91b815260010190565b90610260565b6101f4612b67612b3a83611525565b612b62612b4660405190565b8092612b56602083019182612adb565b9081038252038261013d565b613130565b612b83612b7e60208501516001600160a01b031690565b612fb9565b90612b56612bbf612bae612ba96060612bb3612bae612ba960408c015163ffffffff1690565b612ae6565b61329e565b98015163ffffffff1690565b604051958694602086019485612af9565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526101f49291612b2591601a0182565b90612b56612c326101f493612c15600090565b50612c21612bae825190565b604051938492602084019283612bd0565b612c3d612775825190565b206101f491612c4b91612dc1565b919091612c82565b634e487b7160e01b600052602160045260246000fd5b60051115612c7357565b612c53565b9061017782612c69565b612c8c6000612c78565b612c9582612c78565b03612c9d5750565b612ca76001612c78565b612cb082612c78565b03612cfa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b612d046002612c78565b612d0d82612c78565b03612d575760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b612d6a612d646003612c78565b91612c78565b14612d7157565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b908051612dd16115526041610f58565b03612df757612df3916020820151906060604084015193015160001a90612e36565b9091565b5050612e036000610cd3565b90600290565b612e3261017794610393606094989795612e28608086019a6000870152565b60ff166020850152565b0152565b919291612e42836118fc565b612e6e6115527f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610f58565b11612ed257612e8e600093602095612e8560405190565b94859485612e09565b838052039060015afa156112f25760005190600091612eac83610cd3565b6001600160a01b0381166001600160a01b03831614612eca57509190565b925050600190565b50505050612ee06000610cd3565b90600390565b6101f49392612b25612b18612b1893612b2595610260565b8051602082015160409283015192516127859290612b5690948593602085019384612ee6565b6101f49081906001600160a01b031681565b60ff8111610f8a5760020a90565b905b9081156116de570490565b61138461137e6101f49260ff1690565b612f469060ff165b9160ff1690565b612f7c9060ff16612f69565b029060ff8216918203610f8a57565b612f979060ff16612f69565b90039060ff8211610f8a57565b61060f60f31b81526101f49190600201612b25565b90612fc7611b966028610f58565b600092612fd384610f58565b612fdd6014610f58565b8110156130d45780613037611bd36130c56130bb6130cf956130376130b58c8b6130af613051611ae261304c8f61301e61301961304792610b06565b612f24565b61304161303c6008613037611aec8f611b476013610f58565b6115f3565b612f36565b90612f44565b6110e5565b612f51565b9261309a61309461304c60109661308e61307661304c6130708b6110e5565b84612f61565b986130896130838b61192a565b916110e5565b612f70565b90612f8b565b9461323a565b6130a78860029d8e610f58565b911a9261135a565b5361323a565b95610f58565b61165b6001610f58565b91881a918661135a565b612fd3565b50506101f49192506101f46130e860405190565b8092612b56602083019182612fa4565b6131026010611b51565b6f181899199a1a9b1b9c1cb0b131b232b360811b602082015290565b6101f46130f8565b81156116de570690565b90815191613146611b9660029461164c86610f58565b9061314f61311e565b60009161315b83610f58565b6131666101f4835190565b81101561320c57806131a661142b6131a061318a611ae261142b613207978961135a565b61319b613195895190565b91611936565b612f44565b8661135a565b6131c56131bb6131b58b610f58565b846115f3565b91871a918861135a565b536131ef61142b6131a06131df611ae261142b868961135a565b6131ea613195895190565b613126565b611bd36131bb6130bb6132018c610f58565b856115f3565b61315b565b505050506101f49192506101f46130e860405190565b61322e9060ff16612f69565b019060ff8211610f8a57565b6132439061192a565b61324d600a6110e5565b60ff8216101561326e5761304c6101f49161326860306110e5565b90613222565b61304c6101f49161326860576110e5565b6132896001611b51565b600360fc1b602082015290565b6101f461327f565b6000916132aa83610f58565b821461337257908060005b6132be85610f58565b83146132e1576132d06132db91610f7b565b92613041600a610f58565b916132b5565b91506132ec82611b63565b915b6132f785610f58565b82146133675761330e61336191611af26001610f58565b91613041600a8461335b61335261304c603061334d61308361304761334761333e6133388b610f58565b8d612f44565b61164c8b610f58565b8b611946565b613222565b8a1a918861135a565b53610f58565b906132ee565b50506101f491925090565b9150506101f4613296565b9061338c611e69610a6a845490565b9060005b81811061339d5750505090565b9091926133b2611eac600192611e9b87610ca2565b929101613390565b906101f49161337d565b90610177610711926133d560405190565b938480926133ba565b6101f4906133c4565b6101f460026133de565b906133fa825490565b61340381610edc565b926134176020850191600052602060002090565b6000915b8383106134285750505050565b6001602081926134378561239b565b81520192019201919061341b565b6101f4906133f1565b6101f46004613445565b611cf46101f491613467600090565b5060036102b5565b9061347b6109a8835190565b908161348d6020830284019460200190565b926000915b8383106134a157505050505090565b909192939460206134bd6109f483856001950387528951610b87565b9301930191939290613492565b60208082526101f49291019061346f565b80151561039c565b90505190610177826134db565b906020828203126101d4576101f4916134e3565b1561350b57565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b61356c61355c60405190565b8092612b566020830191826134ca565b613577612775825190565b206135a17f0000000000000000000000000000000000000000000000000000000000000000610b0f565b9063169394bb6135ba6135b360405190565b9160e01b90565b815260048101829052602081602481865afa9081156112f2576135ec916135e79160009161365157501590565b613504565b635bd4df3290823b156101d4576136289261361a6000809461360d60405190565b9687958694859360e01b90565b835260048301526024820190565b03925af180156112f2576136395750565b610177906000613649818361013d565b81019061086d565b611cf9915060203d8111613672575b61366a818361013d565b8101906134f0565b503d61366056fea2646970667358221220ac32ca16a78f612ec68240d59214076e1784464c21ff8fabfeff4b46fd239e1c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80631cba9bed146101225780632ca6927d1461011d57806350262c001461011857806357c6e12a1461011357806359e26be11461010e578063670a8cb714610109578063715018a6146101045780637b103999146100ff5780637de24fcf146100fa5780638da5cb5b146100f557806396d195bd146100f0578063b870676c146100eb578063bd6e7741146100e6578063c2107e73146100e1578063ee2f13cd146100dc578063f2fde38b146100d75763fa7643f4036101d457610c7e565b610c3c565b610c24565b610bfd565b610b6f565b610b31565b610acb565b610a40565b610a19565b610890565b610878565b610837565b6107d9565b61079d565b6105a6565b6102ef565b61021c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761015e57604052565b610127565b9061017761017060405190565b928361013d565b565b6001600160401b03811161015e57602090601f01601f19160190565b0190565b90826000939282370152565b909291926101ba6101b582610179565b610163565b938185526020850190828401116101d45761017792610199565b600080fd5b9080601f830112156101d4578160206101f4933591016101a5565b90565b906020828203126101d45781356001600160401b0381116101d4576101f492016101d9565b346101d45761023461022f3660046101f7565b612392565b604051005b0390f35b60005b8381106102505750506000910152565b8181015183820152602001610240565b61019561027892602092610272815190565b94859290565b9384910161023d565b9052565b6102956101959160209493610260565b918252565b6102af6102a660405190565b92839283610285565b03902090565b6101f49161029a565b6101f4916008021c5b60ff1690565b906101f491546102be565b6101f4906102ea6003916000926102b5565b6102cd565b346101d45761023961030a6103053660046101f7565b6102d8565b60405191829182901515815260200190565b9190916060818403126101d4576103336060610163565b9281356001600160401b0381116101d457816103509184016101d9565b845260208201356001600160401b0381116101d457816103719184016101d9565b602085015260408201356001600160401b0381116101d45761039392016101d9565b6040830152565b805b036101d457565b905035906101778261039a565b6001600160a01b031690565b6001600160a01b03811661039c565b90503590610177826103bc565b63ffffffff811661039c565b90503590610177826103d8565b9190916080818403126101d45761044a61040b6080610163565b93600061041882856103a3565b90860152602061042a828286016103cb565b90860152604061043c828286016103e4565b9086015260608093016103e4565b90830152565b6001600160401b03811161015e5760208091020190565b9291906104766101b582610450565b93818552602080860192028101918383116101d45781905b83821061049c575050505050565b81356001600160401b0381116101d4576020916104bc87849387016101d9565b81520191019061048e565b9080601f830112156101d4578160206101f493359101610467565b91909160a0818403126101d4576104f96040610163565b92600061050682846103f1565b9085015260808201356001600160401b0381116101d45761052792016104c7565b6020830152565b9190916040818403126101d4576105456040610163565b9281356001600160401b0381116101d4578161056291840161031c565b845260208201356001600160401b0381116101d45761052792016104e2565b906020828203126101d45781356001600160401b0381116101d4576101f4920161052e565b346101d45761023961030a6105bc366004610581565b6128f5565b906020828203126101d4576101f4916103a3565b634e487b7160e01b600052603260045260246000fd5b805482101561060e57610605600191600052602060002090565b91020190600090565b6105d5565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561065f575b602083101461065a57565b610629565b91607f169161064f565b8054600093929161068661067c8361063f565b8085529360200190565b91600181169081156106d8575060011461069f57505050565b6106b29192939450600052602060002090565b916000925b8184106106c45750500190565b8054848401526020909301926001016106b7565b92949550505060ff1916825215156020020190565b906101f491610669565b906101776107119261070860405190565b938480926106ed565b038361013d565b90600010610729576101f4906106f7565b610613565b6004600061073a825490565b83101561075557506101f49161074f916105eb565b90610718565b80fd5b6107796107826020936101959361076d815190565b80835293849260200190565b9586910161023d565b601f01601f191690565b60208082526101f492910190610758565b346101d4576102396107b86107b33660046105c1565b61072e565b6040515b9182918261078c565b906020828203126101d4576101f4916103cb565b346101d4576102346107ec3660046107c5565b611d4f565b6101f4916008021c6001600160a01b031690565b906101f491546107f1565b6002600061081c825490565b83101561075557506101f491610831916105eb565b90610805565b346101d45761023961085261084d3660046105c1565b610810565b6040515b918291826001600160a01b03909116815260200190565b60009103126101d457565b346101d45761088836600461086d565b610234610cee565b346101d4576108a036600461086d565b6102397f0000000000000000000000000000000000000000000000000000000000000000610852565b9291906108d86101b582610450565b93818552602080860192028101918383116101d45781905b8382106108fe575050505050565b81356001600160401b0381116101d45760209161091e878493870161052e565b8152019101906108f0565b9080601f830112156101d4578160206101f4933591016108c9565b906020828203126101d45781356001600160401b0381116101d4576101f49201610929565b906101f49060208061098a6040840160008701518582036000870152610758565b940151910152565b906101f491610969565b906109b26109a8835190565b8083529160200190565b90816109c46020830284019460200190565b926000915b8383106109d857505050505090565b909192939460206109fb6109f483856001950387528951610992565b9760200190565b93019301919392906109c9565b60208082526101f49291019061099c565b346101d457610239610a34610a2f366004610944565b610fed565b60405191829182610a08565b346101d457610a5036600461086d565b610239610852610cac565b90610a7b610a74610a6a845190565b8084529260200190565b9260200190565b9060005b818110610a8c5750505090565b909192610ab2610aab60019286516001600160a01b0316815260200190565b9460200190565b929101610a7f565b60208082526101f492910190610a5b565b346101d457610adb36600461086d565b610239610ae66133e7565b60405191829182610aba565b6101f4906103b0906001600160a01b031682565b6101f490610af2565b6101f490610b06565b61028190610b0f565b6020810192916101779190610b18565b346101d457610b4136600461086d565b604051806102397f000000000000000000000000000000000000000000000000000000000000000082610b21565b346101d457610234610b823660046101f7565b6122ce565b906101f491610758565b90610b9d6109a8835190565b9081610baf6020830284019460200190565b926000915b838310610bc357505050505090565b90919293946020610bdf6109f483856001950387528951610b87565b9301930191939290610bb4565b60208082526101f492910190610b91565b346101d457610c0d36600461086d565b610239610c1861344e565b60405191829182610bec565b346101d457610234610c373660046107c5565b611e51565b346101d457610234610c4f3660046107c5565b610e05565b90610c5e90610b0f565b600052602052604060002090565b6101f4906102ea600191600092610c54565b346101d45761023961030a610c943660046107c5565b610c6c565b6101f4906103b0565b6101f49054610c99565b6101f46000610ca2565b610cbe610d4a565b610177610cdc565b6103b06101f46101f49290565b6101f490610cc6565b610177610ce96000610cd3565b610e3e565b610177610cb6565b15610cfd57565b60405162461bcd60e51b815280610d46600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b610177610d55610cac565b610d6e610d61336103b0565b916001600160a01b031690565b14610cf6565b61017790610d80610d4a565b610de0565b15610d8c57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61017790610ce9610df46103b06000610cd3565b6001600160a01b0383161415610d85565b61017790610d74565b906001600160a01b03905b9181191691161790565b90610e336101f4610e3a92610b0f565b8254610e0e565b9055565b610e486000610ca2565b90610e54816000610e23565b610e87610e817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610b0f565b91610b0f565b91610e9160405190565b600090a3565b15610e9e57565b60405162461bcd60e51b815260206004820152601660248201527513db9b1e481c9959da5cdd1c9e4818d85b8818d85b1b60521b6044820152606490fd5b906102956101b583610450565b6101f46040610163565b610efb610ee9565b906060825260006020830152565b6101f4610ef3565b60005b828110610f2057505050565b602090610f2b610f09565b8184015201610f14565b90610177610f4b610f4584610edc565b93610450565b601f190160208401610f11565b6101f46101f46101f49290565b634e487b7160e01b600052601160045260246000fd5b6000198114610f8a5760010190565b610f65565b90610f98825190565b81101561060e576020809102010190565b15610fb057565b60405162461bcd60e51b815260206004820152601560248201527409cde40ecc2d8d2c840e0e4deecd2c8cae490c2e6d605b1b6044820152606490fd5b9061102a336110246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610d61565b14610e97565b61103a611035835190565b610f35565b916000908361104883610f58565b6110536101f4845190565b8110156110de578061109e6110be6110ac6110996110a760208061107a6110d9998c610f8f565b51611084816128f5565b5061108e81611221565b999199969096613458565b610fa9565b01510151613550565b6113f1565b6105276110b7610ee9565b9389850152565b6110c88289610f8f565b526110d38188610f8f565b50610f7b565b611048565b5093505050565b6102c76101f46101f49290565b6101f460056110e5565b9092919261110c6101b582610179565b938185526020850190828401116101d4576101779261023d565b9080601f830112156101d45781516101f4926020016110fc565b92919061114f6101b582610450565b93818552602080860192028101918383116101d45781905b838210611175575050505050565b81516001600160401b0381116101d4576020916111958784938701611126565b815201910190611167565b9080601f830112156101d45781516101f492602001611140565b906020828203126101d45781516001600160401b0381116101d4576101f492016111a0565b60409061120d6112016101779597969460608401908482036000860152610758565b60ff9097166020830152565b019015159052565b6040513d6000823e3d90fd5b516040015173__$5b71c94e19686701747fb081826a62a8ff$__91634be6d4f89160009061124d6110f2565b9461126e6001956112798761126160405190565b998a968795869560e01b90565b8552600485016111df565b03915af49283156112f2576000936112cf575b506112c86112b66112b06112a96112a36000610f58565b87610f8f565b5194610f58565b85610f8f565b51936112c26002610f58565b90610f8f565b5191929190565b6112eb91933d8091833e6112e3818361013d565b8101906111ba565b913861128c565b611215565b6001600160401b03811161015e5760200290565b6101b56101f4916112f7565b60005b82811061132657505050565b60608282015260200161131a565b9061017761134a6113448461130b565b936112f7565b83611317565b6101f46006611334565b90611363825190565b81101561060e570160200190565b61138461137e6101f49290565b60f81b90565b6001600160f81b03191690565b90600681101561060e576020020190565b91908201809211610f8a57565b156113b657565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606490fd5b906000916113fd611350565b8390600061140a81610f58565b846114166101f4825190565b82101561150a578161143961142b828461135a565b516001600160f81b03191690565b611454611446602d611371565b916001600160f81b03191690565b149182156114e7575b82156114c3575b5050611479575b61147490610f7b565b61140a565b9295836114869186611b86565b6114908784611391565b5261149b8683611391565b506114746114bb6114b56114af6001610f58565b866113a2565b97610f7b565b93905061146b565b6114d292509061142b9161135a565b6114df6114466054611371565b148138611464565b91506114f661142b828461135a565b611503611446603a611371565b149161145d565b5050929161152f61155c92936101f496976115296115258390565b5190565b91611b86565b6115398285611391565b526115448184611391565b506115566115526005610f58565b9190565b146113af565b61158261157b61157461156e85610f58565b84611391565b5193610f58565b8093611905565b9061159a8361159461156e6001610f58565b51611905565b6115b1846115946115ab6002610f58565b85611391565b906115e1856115946115d0826115946115ca6003610f58565b89611391565b956115db6004610f58565b90611391565b9361161b565b6101f462015180610f58565b81810292918115918404141715610f8a57565b6101f4610e10610f58565b6101f4603c610f58565b61166a9361165b6116526116446101f499989661165b966116619661163e600090565b50611712565b61164c6115e7565b906115f3565b9161164c611606565b906113a2565b9161164c611611565b6113a2565b156101d457565b91908083039260009091128015828513169184121617610f8a57565b919082810192600013801591841291821691151617610f8a57565b634e487b7160e01b600052601260045260246000fd5b81156116de57600160ff1b8114600019831416610f8a570590565b6116ad565b8181029291600160ff1b81146000831216610f8a578184051490151715610f8a57565b6101f462253d8c610f58565b61171d6107b2610f58565b8110156117299061166f565b61173290610f58565b9061173c90610f58565b9161174690610f58565b611751617d4b610f58565b61175a91611676565b906105b56117696112c0610f58565b6117739083611692565b600e9161177f83610f58565b6117899087611676565b91600c9261179684610f58565b61179f916116c3565b6117a891611692565b906117b290610f58565b906117bc916116e3565b936004946117c986610f58565b6117d2916116c3565b6117db91611692565b61016f6117e86002610f58565b6117f29088611676565b6117fb85610f58565b6118059089611676565b61180e85610f58565b611817916116c3565b61182085610f58565b611829916116e3565b61183291611676565b9061183c90610f58565b90611846916116e3565b61184f83610f58565b611858916116c3565b61186191611692565b94600393611870611324610f58565b61187991611692565b9261188390610f58565b61188c91611676565b9061189690610f58565b61189f916116c3565b6118a891611692565b6118b26064610f58565b6118bb916116c3565b906118c590610f58565b906118cf916116e3565b906118d990610f58565b6118e2916116c3565b6118eb91611676565b6118f3611706565b6118fc91611676565b6101f490610f58565b6101f49190611914602e611371565b90611a04565b6102c76101f46101f49260ff1690565b6101f49060f81c61191a565b6101f46101f46101f49260ff1690565b91908203918211610f8a57565b1561195a57565b60405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606490fd5b156119a657565b60405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608490fd5b604d8111610f8a57600a0a90565b92600091611a1183610f58565b808493815b611a216101f48a5190565b811015611b22578589611a3761142b848361135a565b603090611a4661144683611371565b101580611b00575b611ab6575b5050611aa6575b611a6761142b828b61135a565b611a7a6001600160f81b03198716611446565b14611a8e575b611a8990610f7b565b611a16565b94611a9e90151587151514611953565b600194611a80565b92611ab090610f7b565b92611a5a565b61165b90611af2611aec611ae7611ae261142b89611adc611af89a9d61164c600a610f58565b9861135a565b61192a565b611936565b91610f58565b90611946565b928938611a53565b50611b0e61142b858461135a565b611b1b6114466039611371565b1115611a4e565b509650935061164c9250611b4c91506101f494611b47611b3f8290565b83111561199f565b611946565b6119f6565b906102956101b583610179565b369037565b90610177611b79611b7384611b51565b93610179565b601f190160208401611b5e565b909290611b9b611b968585611946565b611b63565b91845b845b811015611be057611bd981611bbb61142b611ba0948761135a565b611bd3611bc88a84611946565b9160001a918861135a565b53610f7b565b9050611b9e565b509350506101f4915090565b61017790611bf8610d4a565b611cdc565b6101f4906102c7565b6101f49054611bfd565b15611c1757565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320697320616c72656164792061207769746e657373000000006044820152606490fd5b9060ff90610e19565b90611c756101f4610e3a92151590565b8254611c5c565b916001600160a01b0360089290920291821b911b610e19565b921b90565b9190611cab6101f4610e3a93610b0f565b908354611c7c565b90815491600160401b83101561015e5782611cd6916001610177950181556105eb565b90611c9a565b611d116001611d02611cfd611cf9611cf48685610c54565b611c06565b1590565b611c10565b611d0c8382610c54565b611c65565b611d1c816002611cb3565b611d4a7ff5944521c155e80db583372b9992336b6616b14dfb924a5cf6ef97b256d280349161085660405190565b0390a1565b61017790611bec565b61017790611d64610d4a565b611dee565b15611d7057565b60405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f742061207769746e65737300000000000000006044820152606490fd5b91906008610e19910291611c9560ff841b90565b9190611dda6101f4610e3a93151590565b908354611db5565b61017791600091611dc9565b611e186000611e13836001611e0e611e09611cf48484610c54565b611d69565b610c54565b611de2565b611e23816002611f32565b611d4a7f8b5785dce93ca82765b1cc25cedcda1b501288cb23a1fd171c0091d83900f9bd9161085660405190565b61017790611d58565b90611e75611e69610a6a845490565b92600052602060002090565b9060005b818110611e865750505090565b909192611eb3611eac600192611e9b87610ca2565b6001600160a01b0316815260200190565b9460010190565b929101611e79565b906101f491611e5a565b9061017761071192611ed660405190565b93848092611ebb565b6101f490611ec5565b634e487b7160e01b600052603160045260246000fd5b61017791600091611c9a565b80548015611f2d576000190190611f2a611f2483836105eb565b90611efe565b55565b611ee8565b611f47611f4e92611f4283611edf565b611fe5565b9092901590565b15611f905760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b61017791611fa9611f9f835490565b611af26001610f58565b90818103611fb9575b5050611f0a565b611cd6611fcc610831611fd394866105eb565b91846105eb565b3880611fb2565b6101f4600019610f58565b91908251926000611ff581610f58565b855b81101561204c5761201861200b8285610f8f565b516001600160a01b031690565b61202a6001600160a01b038616610d61565b146120425761203b611ff791610f7b565b9050611ff5565b9450505050600190565b5093505050611552611fda565b61017790612065610d4a565b61226c565b1561207157565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9160001960089290920291821b911b610e19565b91906120db6101f4610e3a93610f58565b9083546120b6565b610177916000916120ca565b8181106120fa575050565b8061210860006001936120e3565b016120ef565b9190601f811161211d57505050565b61212f61017793600052602060002090565b906020601f840181900483019310612152575b6020601f909101045b01906120ef565b9091508190612142565b600019600883021c1916906002021790565b90612177815190565b906001600160401b03821161015e5761219a82612194855461063f565b8561210e565b602090601f83116001146121c857610e3a9291600091836121bd575b505061215c565b0151905038806121b6565b601f198316916121dd85600052602060002090565b9260005b81811061221c57509160029391856001969410612202575b50505002019055565b01516000196008601f8516021c19165b90553880806121f9565b919360206001819287870151815501950192016121e1565b9190610729576101779161216e565b90815491600160401b83101561015e5782612266916001610177950181556105eb565b90612234565b6122956003612289612284611cf9611cf486856102b5565b61206a565b611d0c836001926102b5565b6122a0816004612243565b611d4a7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096916107bc60405190565b61017790612059565b610177906122e3610d4a565b612334565b156122ef57565b60405162461bcd60e51b815260206004820152601760248201527f50726f76696465722068617368206e6f7420666f756e640000000000000000006044820152606490fd5b6123596000611e1383600361235461234f611cf484846102b5565b6122e8565b6102b5565b6123648160046126aa565b611d4a7f6f594b4b4f0580c66aabba75218163a99fa1fe330a171cc9e2bfd8e167db22f8916107bc60405190565b610177906122d7565b6101f4906106f7565b906123ad825490565b6123b681610edc565b926123ca6020850191600052602060002090565b6000915b8383106123db5750505050565b6001602081926123ea8561239b565b8152019201920191906123ce565b6101f4906123a4565b6101f4905461063f565b908082146124da5761241c81612401565b906001600160401b03821161015e5761243982612194855461063f565b600090601f831160011461246657610e3a92916000918361245b57505061215c565b0154905038806121b6565b9061247b601f19841692600052602060002090565b9061248b85600052602060002090565b92815b8181106124c2575091600293918560019694106124ae5750505002019055565b01546000196008601f8516021c1916612212565b9193600180602092878701548155019501920161248e565b5050565b9190610729576101779161240b565b9061250090600019906020036008021c90565b8154169055565b9060009161252561251d82600052602060002090565b92835461215c565b905555565b919290602082101561258257601f841160011461254c57610e3a92935061215c565b509061257d61017793600161257461256985600052602060002090565b92601f602091010490565b820191016120ef565b612507565b506125bb8293612599600194600052602060002090565b61214b6020601f860104820192601f8616806125c3575b50601f602091010490565b600202179055565b6125cf908886036124ed565b386125b0565b929091600160401b821161015e576020111561261c5760208110156125fd57610e3a9161215c565b60019160ff191661261384600052602060002090565b55600202019055565b60019150600202019055565b9081546126348161063f565b9081831161265d575b81831061264b575b50505050565b6126549361252a565b38808080612645565b612669838383876125d5565b61263d565b600061017791612628565b90600003610729576101779061266e565b80548015611f2d576000190190611f2a6126a483836105eb565b90612679565b611f476126bf926126ba836123f8565b612744565b156127005760405162461bcd60e51b815260206004820152601460248201527329ba3934b733903737ba1034b71030b93930bc9760611b6044820152606490fd5b6101779161270f611f9f835490565b9081810361271f575b505061268a565b61273761272f61273d93856105eb565b5091846105eb565b906124de565b3880612718565b9190825192600061275481610f58565b855b8110156127ac5761276a6115258285610f8f565b61277c612775825190565b9160200190565b20612794611552865b612790612775825190565b2090565b14612042576127a561275691610f7b565b9050612754565b509350505081199190565b156127be57565b60405162461bcd60e51b815260206004820152600d60248201526c4e6f207369676e61747572657360981b6044820152606490fd5b156127fa57565b60405162461bcd60e51b815260206004820152601c60248201527f436c61696d496e666f206861736820646f65736e2774206d61746368000000006044820152606490fd5b1561284657565b60405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207369676e617475726573206e6f7420657175616c20746044820152746f206e756d626572206f66207769746e657373657360581b6064820152608490fd5b156128b057565b60405162461bcd60e51b815260206004820152601960248201527f5369676e6174757265206e6f7420617070726f707269617465000000000000006044820152606490fd5b906020820190815160200151612909905190565b9160009261291684610f58565b10612920906127b7565b828080808451015196845160200151612937610ee9565b98838a01906129439152565b6020890152015161295390612efe565b925101510161296190611525565b1461296b906127f3565b61297483612a5b565b805191600292612982845490565b1461298c9061283f565b61299584610f58565b935b6129a66101f460208801515190565b851015612a405780956129b882610f58565b6129c36101f4875490565b811015612a28576129d761200b8887610f8f565b6129ea610d616103b0610831858b6105eb565b146129fd576129f890610f7b565b6129b8565b50946129a69196506020612a1d6101f492612a1860016128a9565b610f7b565b969792505050612997565b50946020612a1d6101f492612a186129a6959a6128a9565b509350505050600190565b90610177611b79610f4584610edc565b6020612a6a6000830151612b2b565b910190612a7e612a7983515190565b612a4b565b91612a896000610f58565b612a956101f483515190565b811015612ad55780612a18612ab8612ab1612ad0948651610f8f565b5186612c02565b612ac28388610f8f565b906001600160a01b03169052565b612a89565b50505090565b610195816020939052565b6101f46101f46101f49263ffffffff1690565b92612b25612b18612b2594612b25612b186101f49998612b1897610260565b600560f91b815260010190565b90610260565b6101f4612b67612b3a83611525565b612b62612b4660405190565b8092612b56602083019182612adb565b9081038252038261013d565b613130565b612b83612b7e60208501516001600160a01b031690565b612fb9565b90612b56612bbf612bae612ba96060612bb3612bae612ba960408c015163ffffffff1690565b612ae6565b61329e565b98015163ffffffff1690565b604051958694602086019485612af9565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526101f49291612b2591601a0182565b90612b56612c326101f493612c15600090565b50612c21612bae825190565b604051938492602084019283612bd0565b612c3d612775825190565b206101f491612c4b91612dc1565b919091612c82565b634e487b7160e01b600052602160045260246000fd5b60051115612c7357565b612c53565b9061017782612c69565b612c8c6000612c78565b612c9582612c78565b03612c9d5750565b612ca76001612c78565b612cb082612c78565b03612cfa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b612d046002612c78565b612d0d82612c78565b03612d575760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b612d6a612d646003612c78565b91612c78565b14612d7157565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b908051612dd16115526041610f58565b03612df757612df3916020820151906060604084015193015160001a90612e36565b9091565b5050612e036000610cd3565b90600290565b612e3261017794610393606094989795612e28608086019a6000870152565b60ff166020850152565b0152565b919291612e42836118fc565b612e6e6115527f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610f58565b11612ed257612e8e600093602095612e8560405190565b94859485612e09565b838052039060015afa156112f25760005190600091612eac83610cd3565b6001600160a01b0381166001600160a01b03831614612eca57509190565b925050600190565b50505050612ee06000610cd3565b90600390565b6101f49392612b25612b18612b1893612b2595610260565b8051602082015160409283015192516127859290612b5690948593602085019384612ee6565b6101f49081906001600160a01b031681565b60ff8111610f8a5760020a90565b905b9081156116de570490565b61138461137e6101f49260ff1690565b612f469060ff165b9160ff1690565b612f7c9060ff16612f69565b029060ff8216918203610f8a57565b612f979060ff16612f69565b90039060ff8211610f8a57565b61060f60f31b81526101f49190600201612b25565b90612fc7611b966028610f58565b600092612fd384610f58565b612fdd6014610f58565b8110156130d45780613037611bd36130c56130bb6130cf956130376130b58c8b6130af613051611ae261304c8f61301e61301961304792610b06565b612f24565b61304161303c6008613037611aec8f611b476013610f58565b6115f3565b612f36565b90612f44565b6110e5565b612f51565b9261309a61309461304c60109661308e61307661304c6130708b6110e5565b84612f61565b986130896130838b61192a565b916110e5565b612f70565b90612f8b565b9461323a565b6130a78860029d8e610f58565b911a9261135a565b5361323a565b95610f58565b61165b6001610f58565b91881a918661135a565b612fd3565b50506101f49192506101f46130e860405190565b8092612b56602083019182612fa4565b6131026010611b51565b6f181899199a1a9b1b9c1cb0b131b232b360811b602082015290565b6101f46130f8565b81156116de570690565b90815191613146611b9660029461164c86610f58565b9061314f61311e565b60009161315b83610f58565b6131666101f4835190565b81101561320c57806131a661142b6131a061318a611ae261142b613207978961135a565b61319b613195895190565b91611936565b612f44565b8661135a565b6131c56131bb6131b58b610f58565b846115f3565b91871a918861135a565b536131ef61142b6131a06131df611ae261142b868961135a565b6131ea613195895190565b613126565b611bd36131bb6130bb6132018c610f58565b856115f3565b61315b565b505050506101f49192506101f46130e860405190565b61322e9060ff16612f69565b019060ff8211610f8a57565b6132439061192a565b61324d600a6110e5565b60ff8216101561326e5761304c6101f49161326860306110e5565b90613222565b61304c6101f49161326860576110e5565b6132896001611b51565b600360fc1b602082015290565b6101f461327f565b6000916132aa83610f58565b821461337257908060005b6132be85610f58565b83146132e1576132d06132db91610f7b565b92613041600a610f58565b916132b5565b91506132ec82611b63565b915b6132f785610f58565b82146133675761330e61336191611af26001610f58565b91613041600a8461335b61335261304c603061334d61308361304761334761333e6133388b610f58565b8d612f44565b61164c8b610f58565b8b611946565b613222565b8a1a918861135a565b53610f58565b906132ee565b50506101f491925090565b9150506101f4613296565b9061338c611e69610a6a845490565b9060005b81811061339d5750505090565b9091926133b2611eac600192611e9b87610ca2565b929101613390565b906101f49161337d565b90610177610711926133d560405190565b938480926133ba565b6101f4906133c4565b6101f460026133de565b906133fa825490565b61340381610edc565b926134176020850191600052602060002090565b6000915b8383106134285750505050565b6001602081926134378561239b565b81520192019201919061341b565b6101f4906133f1565b6101f46004613445565b611cf46101f491613467600090565b5060036102b5565b9061347b6109a8835190565b908161348d6020830284019460200190565b926000915b8383106134a157505050505090565b909192939460206134bd6109f483856001950387528951610b87565b9301930191939290613492565b60208082526101f49291019061346f565b80151561039c565b90505190610177826134db565b906020828203126101d4576101f4916134e3565b1561350b57565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b61356c61355c60405190565b8092612b566020830191826134ca565b613577612775825190565b206135a17f0000000000000000000000000000000000000000000000000000000000000000610b0f565b9063169394bb6135ba6135b360405190565b9160e01b90565b815260048101829052602081602481865afa9081156112f2576135ec916135e79160009161365157501590565b613504565b635bd4df3290823b156101d4576136289261361a6000809461360d60405190565b9687958694859360e01b90565b835260048301526024820190565b03925af180156112f2576136395750565b610177906000613649818361013d565b81019061086d565b611cf9915060203d8111613672575b61366a818361013d565b8101906134f0565b503d61366056fea2646970667358221220ac32ca16a78f612ec68240d59214076e1784464c21ff8fabfeff4b46fd239e1c64736f6c63430008120033\",\n  \"libraries\": {\n    \"ClaimVerifier\": \"0xBA4D6eA209c3C3A6B0B31fE136a5F0eFd9De2bd1\"\n  },\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addProviderHash(string)\": {\n        \"params\": {\n          \"_newProviderHash\": \"New provider hash to be added\"\n        }\n      },\n      \"addWitness(address)\": {\n        \"params\": {\n          \"_newWitness\": \"Address of the new witness\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeProviderHash(string)\": {\n        \"params\": {\n          \"_removeProviderHash\": \"Provider hash to be removed\"\n        }\n      },\n      \"removeWitness(address)\": {\n        \"params\": {\n          \"_removeWitness\": \"Address of witness to be removed\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\": {\n        \"params\": {\n          \"proof\": \"Proof to be verified\"\n        }\n      },\n      \"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"params\": {\n          \"_proofs\": \"Proofs to be verified\"\n        },\n        \"returns\": {\n          \"domains\": \"      Array of Domain structs\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addProviderHash(string)\": {\n        \"notice\": \"ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\"\n      },\n      \"addWitness(address)\": {\n        \"notice\": \"ONLY OWNER: Add witness address. Witness must not have been previously added.\"\n      },\n      \"removeProviderHash(string)\": {\n        \"notice\": \"ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\"\n      },\n      \"removeWitness(address)\": {\n        \"notice\": \"ONLY OWNER: Remove witness address. Witness must have been previously added.\"\n      },\n      \"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\": {\n        \"notice\": \"Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters) to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature.  This function verifies a claim by performing the following checks on the claim - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim - Checks if the signatures are valid and from the witnesses This function reverts if - No signatures are found on the proof - Number of signatures is not equal to the number of witnesses - ClaimInfo hash does not match the identifier in the claim - Signatures are invalid (not from the witnesses)  DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the  responsibility of the caller.  Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code    \"\n      },\n      \"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"notice\": \"ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 11343,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"isWitness\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 11346,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"witnesses\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 11350,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"isProviderHash\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_string_memory_ptr,t_bool)\"\n      },\n      {\n        \"astId\": 11353,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"providerHashes\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_array(t_string_storage)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_string_storage)dyn_storage\": {\n        \"base\": \"t_string_storage\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"string[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_string_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_string_memory_ptr\",\n        \"label\": \"mapping(string => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/solcInputs/a22247643263102eca9fc6c72e24c17d.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\\n\\n\\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\\n\\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\\n\\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\\n\\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\\n\\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\\n\\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\\n\\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\\n\\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\\n\\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\\n\\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\\n\\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/solcInputs/a43d75c8fa53cbd70612f5013c5d17a2.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12718791721466586474772975178991944367361898681403889293050590835735829974174;\\n    uint256 constant IC0y = 6579614210328804738196110281777440845203538387714672921854127346802897741731;\\n    \\n    uint256 constant IC1x = 15050971342023334328313633330499885418161248915553086390701402242486225179368;\\n    uint256 constant IC1y = 5024764877577619588829734526990256704181621131776349449360023481477820279987;\\n    \\n    uint256 constant IC2x = 7494265978725599958916265753653166549633529129800692658333846839504191651648;\\n    uint256 constant IC2y = 6331829577874431053631060489192183034310045972687441697179743819760334117448;\\n    \\n    uint256 constant IC3x = 19001722242244131321371144536562173279385056519981716838131699446018662048085;\\n    uint256 constant IC3y = 8148711952593941450664988855383229951630582602775661040234820121548658879338;\\n    \\n    uint256 constant IC4x = 3624352076627862068761560802183636400416483488844158805038644908873200708814;\\n    uint256 constant IC4y = 20894074159790604892251457333772898092352374489464929653588484093719978460605;\\n    \\n    uint256 constant IC5x = 2098287694939727519558784139808406325855172668407809961967029546183317335265;\\n    uint256 constant IC5y = 5659241113472526955215440521431168972841548603376846026887752206139550832697;\\n    \\n    uint256 constant IC6x = 17054571586962694690567468783102453574497782768524521043534058966826398455175;\\n    uint256 constant IC6y = 4087439525418017845490176926142509334113265173570304433911881676407144081865;\\n    \\n    uint256 constant IC7x = 7441928267847731392209447389119131741297268634643246304512516729270550734194;\\n    uint256 constant IC7y = 15714253901405577134617988311525363228461039013850912155558149694323922788327;\\n    \\n    uint256 constant IC8x = 11989172231499636764423272601594485978016807201316866170676011918612131765820;\\n    uint256 constant IC8y = 15918479982497737545158513843427772249925445687882255296587424450200131669618;\\n    \\n    uint256 constant IC9x = 19827744545534206076315711984525184804508732918768894016552346430789516516368;\\n    uint256 constant IC9y = 16361460611570894490152793347002588479282989223552655286979659973731335376509;\\n    \\n    uint256 constant IC10x = 10898965818757221383985300751768263931593441442012024286290119328446015154272;\\n    uint256 constant IC10y = 6989418820395701171656324073128354251482680955655018162117108617053607002569;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base/solcInputs/d865a6f49eab8c58036d78b72f5cb448.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/security/Pausable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/security/ReentrancyGuard.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        return _status == _ENTERED;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Address.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"./StringUtils.sol\\\";\\n\\n/**\\n * Library to assist with requesting,\\n * serialising & verifying credentials\\n */\\nlibrary Claims {\\n\\t/** Data required to describe a claim */\\n\\tstruct CompleteClaimData {\\n\\t\\tbytes32 identifier;\\n\\t\\taddress owner;\\n\\t\\tuint32 timestampS;\\n\\t\\tuint32 epoch;\\n\\t}\\n\\n\\tstruct ClaimInfo {\\n\\t\\tstring provider;\\n\\t\\tstring parameters;\\n\\t\\tstring context;\\n\\t}\\n\\n\\t/** Claim with signatures & signer */\\n\\tstruct SignedClaim {\\n\\t\\tCompleteClaimData claim;\\n\\t\\tbytes[] signatures;\\n\\t}\\n\\n\\t/**\\n\\t * Asserts that the claim is signed by the expected witnesses\\n\\t */\\n\\tfunction assertValidSignedClaim(\\n\\t\\tSignedClaim memory self,\\n\\t\\taddress[] memory expectedWitnessAddresses\\n\\t) internal pure {\\n\\t\\trequire(self.signatures.length > 0, \\\"No signatures\\\");\\n\\t\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\n\\t\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\n\\t\\t\\tbool found = false;\\n\\t\\t\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\n\\t\\t\\t\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\n\\t\\t\\t\\t\\tfound = true;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\trequire(found, \\\"Missing witness signature\\\");\\n\\t\\t}\\n\\t}\\n\\n\\t/**\\n\\t * @dev recovers the signer of the claim\\n\\t */\\n\\tfunction recoverSignersOfSignedClaim(\\n\\t\\tSignedClaim memory self\\n\\t) internal pure returns (address[] memory) {\\n\\t\\tbytes memory serialised = serialise(self.claim);\\n\\t\\taddress[] memory signers = new address[](self.signatures.length);\\n\\t\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\n\\t\\t\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\n\\t\\t}\\n\\n\\t\\treturn signers;\\n\\t}\\n\\n\\t/**\\n\\t * @dev serialises the credential into a string;\\n\\t * the string is used to verify the signature\\n\\t *\\n\\t * the serialisation is the same as done by the TS library\\n\\t */\\n\\tfunction serialise(\\n\\t\\tCompleteClaimData memory self\\n\\t) internal pure returns (bytes memory) {\\n\\t\\treturn\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.address2str(self.owner),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(self.timestampS),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(self.epoch)\\n\\t\\t\\t);\\n\\t}\\n\\n\\t/**\\n\\t * @dev returns the address of the user that generated the signature\\n\\t */\\n\\tfunction verifySignature(\\n\\t\\tbytes memory content,\\n\\t\\tbytes memory signature\\n\\t) internal pure returns (address signer) {\\n\\t\\tbytes32 signedHash = keccak256(\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\t\\\"\\\\x19Ethereum Signed Message:\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(content.length),\\n\\t\\t\\t\\tcontent\\n\\t\\t\\t)\\n\\t\\t);\\n\\t\\treturn ECDSA.recover(signedHash, signature);\\n\\t}\\n\\n\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\n\\t\\tbytes memory serialised = abi.encodePacked(\\n\\t\\t\\tclaimInfo.provider,\\n\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\tclaimInfo.parameters,\\n\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\tclaimInfo.context\\n\\t\\t);\\n\\t\\treturn keccak256(serialised);\\n\\t}\\n}\\n\"\n    },\n    \"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * Utilities for string manipulation & conversion\\n */\\nlibrary StringUtils {\\n\\tfunction address2str(address x) internal pure returns (string memory) {\\n\\t\\tbytes memory s = new bytes(40);\\n\\t\\tfor (uint i = 0; i < 20; i++) {\\n\\t\\t\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\n\\t\\t\\tbytes1 hi = bytes1(uint8(b) / 16);\\n\\t\\t\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\n\\t\\t\\ts[2 * i] = getChar(hi);\\n\\t\\t\\ts[2 * i + 1] = getChar(lo);\\n\\t\\t}\\n\\t\\treturn string(abi.encodePacked(\\\"0x\\\", s));\\n\\t}\\n\\n\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\n\\t\\t// Fixed buffer size for hexadecimal convertion\\n\\t\\tbytes memory converted = new bytes(buffer.length * 2);\\n\\t\\tbytes memory _base = \\\"0123456789abcdef\\\";\\n\\n\\t\\tfor (uint256 i = 0; i < buffer.length; i++) {\\n\\t\\t\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\n\\t\\t\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\n\\t\\t}\\n\\n\\t\\treturn string(abi.encodePacked(\\\"0x\\\", converted));\\n\\t}\\n\\n\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\n\\t\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\n\\t\\telse return bytes1(uint8(b) + 0x57);\\n\\t}\\n\\n\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\n\\t\\tif (_b) {\\n\\t\\t\\treturn \\\"true\\\";\\n\\t\\t} else {\\n\\t\\t\\treturn \\\"false\\\";\\n\\t\\t}\\n\\t}\\n\\n\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\n\\t\\tif (_i == 0) {\\n\\t\\t\\treturn \\\"0\\\";\\n\\t\\t}\\n\\t\\tuint j = _i;\\n\\t\\tuint len;\\n\\t\\twhile (j != 0) {\\n\\t\\t\\tlen++;\\n\\t\\t\\tj /= 10;\\n\\t\\t}\\n\\t\\tbytes memory bstr = new bytes(len);\\n\\t\\tuint k = len;\\n\\t\\twhile (_i != 0) {\\n\\t\\t\\tk = k - 1;\\n\\t\\t\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\n\\t\\t\\tbytes1 b1 = bytes1(temp);\\n\\t\\t\\tbstr[k] = b1;\\n\\t\\t\\t_i /= 10;\\n\\t\\t}\\n\\t\\treturn string(bstr);\\n\\t}\\n\\n\\tfunction areEqual(\\n\\t\\tstring calldata _a,\\n\\t\\tstring storage _b\\n\\t) internal pure returns (bool) {\\n\\t\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\n\\t}\\n\\n\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\n\\t\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\n\\t}\\n\\n\\tfunction toLower(string memory str) internal pure returns (string memory) {\\n\\t\\tbytes memory bStr = bytes(str);\\n\\t\\tbytes memory bLower = new bytes(bStr.length);\\n\\t\\tfor (uint i = 0; i < bStr.length; i++) {\\n\\t\\t\\t// Uppercase character...\\n\\t\\t\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\n\\t\\t\\t\\t// So we add 32 to make it lowercase\\n\\t\\t\\t\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tbLower[i] = bStr[i];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn string(bLower);\\n\\t}\\n\\n\\tfunction substring(\\n\\t\\tstring memory str,\\n\\t\\tuint startIndex,\\n\\t\\tuint endIndex\\n\\t) internal pure returns (string memory) {\\n\\t\\tbytes memory strBytes = bytes(str);\\n\\t\\tbytes memory result = new bytes(endIndex - startIndex);\\n\\t\\tfor (uint i = startIndex; i < endIndex; i++) {\\n\\t\\t\\tresult[i - startIndex] = strBytes[i];\\n\\t\\t}\\n\\t\\treturn string(result);\\n\\t}\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/DomainExchange.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { ReentrancyGuard } from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport { AddressAllowList } from \\\"./external/AddressAllowList.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./external/lib/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"./external/lib/Uint256ArrayUtils.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"./external/interfaces/IKeyHashAdapterV2.sol\\\";\\n\\nimport { IDomainExchange } from \\\"./interfaces/IDomainExchange.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\nimport { IVerifiedDomainRegistry } from \\\"./interfaces/IVerifiedDomainRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract DomainExchange is IDomainExchange, AddressAllowList, ReentrancyGuard, Pausable {\\n\\n    using Address for address payable;\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    \\n    event ListingCreated(\\n        uint256 indexed listingId, \\n        address indexed seller, \\n        bytes32 indexed domainId, \\n        bytes32 dkimKeyHash,\\n        uint256 askPrice,\\n        uint256 minBidPrice,\\n        address saleEthRecipient\\n    );\\n    event ListingUpdated(uint256 indexed listingId, address indexed seller, uint256 newAskPrice, address saleEthRecipient);\\n    event ListingDeleted(uint256 indexed listingId, address indexed seller);\\n    event ListingDeletedByRegistry(uint256 indexed listingId);\\n    \\n    event BidCreated(uint256 indexed bidId, uint256 indexed listingId, address indexed buyer, uint256 price);\\n    event BidPriceIncreased(uint256 indexed bidId, address indexed buyer, uint256 newPrice);\\n    event RefundInitiated(uint256 indexed bidId, address indexed buyer);\\n    event BidWithdrawn(uint256 indexed bidId, address indexed buyer, uint256 amount);\\n    \\n    event SaleFinalized(uint256 indexed bidId, uint256 indexed listingId, uint256 priceNetFees, uint256 fees);\\n    \\n    event InstantAcceptUpdated(address indexed buyer, bool instantAccept);\\n\\n    event FeeUpdated(uint256 newFee);\\n    event FeeRecipientUpdated(address indexed newFeeRecipient);\\n    event BidSettlementPeriodUpdated(uint256 newBidSettlementPeriod);\\n    event BidRefundPeriodUpdated(uint256 newBidRefundPeriod);\\n    event TransferDomainProcessorUpdated(ITransferDomainProcessor indexed newTransferDomainProcessor);\\n    event MailServerKeyHashAdapterUpdated(IKeyHashAdapterV2 indexed newMailServerKeyHashAdapter);\\n\\n    /* ============ Structs ============ */\\n    struct Listing {\\n        address seller;\\n        address payable saleEthRecipient;       // Must be a contract that can receive ETH or an EOA\\n        bytes32 dkimKeyHash;            // Allow for custom DKIM key hash\\n        bytes encryptionKey;\\n        bytes32 domainId;\\n        uint256 createdAt;\\n        uint256 askPrice;\\n        uint256 minBidPrice;\\n        bool isActive;          // false by default, set to true when the listing is created\\n        uint256[] bids;\\n    }\\n\\n    struct ListingWithId {\\n        uint256 listingId;\\n        Listing listing;\\n    }\\n\\n    struct Bid {\\n        address buyer;\\n        uint256 listingId;\\n        string encryptedBuyerId;\\n        bytes32 buyerIdHash;\\n        uint256 createdAt;\\n        uint256 expiryTimestamp;\\n        uint256 price;\\n        bool refundInitiated;\\n    }\\n\\n    struct BidDetailsWithId {\\n        uint256 bidId;\\n        Bid bid;\\n        bool buyerInstantAcceptEnabled;\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyInitialized() {\\n        require(isInitialized, \\\"Contract must be initialized\\\");\\n        _;\\n    }\\n\\n    /* ============ Public Variables ============ */\\n\\n    mapping(uint256 => Listing) public listings;\\n    mapping(address => uint256[]) public userListings;\\n    mapping(uint256 => Bid) public bids;\\n    mapping(address => uint256[]) public userBids;\\n    mapping(address => bool) public instantAcceptEnabled;\\n\\n    uint256 public fee;\\n    address payable public feeRecipient;\\n    uint256 public bidCounter;\\n    uint256 public listingCounter;\\n    uint256 public bidSettlementPeriod;\\n    uint256 public bidRefundPeriod;\\n    \\n    bool public isInitialized;\\n    \\n    ITransferDomainProcessor public transferDomainProcessor;\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        address _owner,\\n        uint256 _fee,\\n        address payable _feeRecipient,\\n        uint256 _bidSettlementPeriod,\\n        uint256 _bidRefundPeriod,\\n        address[] memory _allowedAddresses\\n    ) AddressAllowList(_allowedAddresses) {\\n        fee = _fee;\\n        feeRecipient = _feeRecipient;\\n        bidSettlementPeriod = _bidSettlementPeriod;\\n        bidRefundPeriod = _bidRefundPeriod;\\n        \\n        bidCounter = 1;\\n        listingCounter = 1;\\n        isInitialized = false;\\n        \\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ Public Functions ============ */\\n\\n    /**\\n     * @notice Creates listing for a domain. If ownership of domain changes offchain, the new owner\\n     * will have to first register the domain on the domain registry contract. Then the new owner\\n     * can create a listing for the domain. The old listing will be deleted from the old owner's \\n     * listings and the old listing is marked as NOT active, which prevents any new bids from being\\n     * created on it and makes the old bids immediately withdrawable. We also allow the seller to\\n     * specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM\\n     * key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be \\n     * updated by us whenever Namecheap rotates their DKIM key.\\n     *\\n     * Function reverts if:\\n     * - Caller is not domain owner on the domain registry contract\\n     * - Ask price is less than min bid price\\n     * - Sale ETH recipient is the zero address\\n     *\\n     * @param _domainId         The unique identifier of the domain\\n     * @param _askPrice         An asking price for the domain\\n     * @param _minBidPrice      The minimum bid price for the domain\\n     * @param _saleEthRecipient The address to receive the ETH from the sale; must be a contract that can\\n     *                          receive ETH or an EOA\\n     * @param _encryptionKey    The encryption key for buyers to encrypt the buyerId to\\n     * @param _dkimKeyHash      The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\n     */\\n    function createListing(\\n        bytes32 _domainId, \\n        uint256 _askPrice, \\n        uint256 _minBidPrice, \\n        address payable _saleEthRecipient, \\n        bytes memory _encryptionKey,\\n        bytes32 _dkimKeyHash\\n    ) \\n        external\\n        onlyAllowed\\n        onlyInitialized \\n        whenNotPaused\\n    {\\n        _verifyCreateListing(_domainId, _minBidPrice, _askPrice, _saleEthRecipient);\\n\\n        uint256 listingId = _updateCreateListingState(\\n            _domainId, _askPrice, _minBidPrice, _saleEthRecipient, _encryptionKey, _dkimKeyHash\\n        );\\n\\n        verifiedDomainRegistry.setDomainListing(_domainId, listingId);\\n\\n        emit ListingCreated(listingId, msg.sender, _domainId, _dkimKeyHash, _askPrice, _minBidPrice, _saleEthRecipient);\\n    }\\n\\n    /**\\n     * @notice Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer\\n     * has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId\\n     * to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the \\n     * seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId \\n     * using their private key to get the raw buyerId.\\n     *\\n     * DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be\\n     * done in the client! This does not affect the security of the protocol as the encrypted buyerId is only \\n     * used for communication between the buyer and the seller while maintaining privacy.\\n     *\\n     * @param _listingId            The unique identifier of the listing to bid on\\n     * @param _buyerIdHash          The hashed buyerId which is also output as part of the transfer proof later\\n     * @param _encryptedBuyerId     The encrypted buyerId. Should be the same as the buyerId hashed\\n     */\\n    function createBid(uint256 _listingId, bytes32 _buyerIdHash, string memory _encryptedBuyerId) \\n        external \\n        payable\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        uint256 price = msg.value;\\n        Listing storage listing = listings[_listingId];\\n\\n        _validateCreateBid(listing, price, _buyerIdHash);\\n\\n        uint256 bidId = _updateCreateBidState(listing, _listingId, price, _buyerIdHash, _encryptedBuyerId);\\n\\n        emit BidCreated(bidId, _listingId, msg.sender, price);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to \\n     * the listing owner. The seller can also finalize the sale with bids that have initiated a refund \\n     * including the ones that have expired based on timestamp but not withdrawn yet.\\n     *\\n     * @param _proof The zk-email proof of domain transfer\\n     */\\n    function finalizeSale(ITransferDomainProcessor.TransferProof calldata _proof) \\n        external\\n        onlyInitialized\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        // Check\\n        (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        ) = transferDomainProcessor.processProof(_proof);\\n\\n        Bid storage bid = bids[bidId];\\n        Listing storage listing = listings[bid.listingId];\\n        \\n        _validateFinalizeSale(bid, listing, dkimKeyHash, hashedReceiverId, domainName);\\n        \\n        // Effect\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\n\\n        uint256 transferValue = bid.price;\\n        address payable recipient = listing.saleEthRecipient;\\n        uint256 listingId = bid.listingId;\\n        _updateFinalizeSaleState(bid, bidId, listing);\\n\\n        // Interaction\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\n        \\n        emit SaleFinalized(bidId, listingId, transferValue - feeAmount, feeAmount);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required\\n     * because it is not in the buyer's interest to release funds unless they have received the domain. Note that the\\n     * bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to\\n     * the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will\\n     * revert if:\\n     * - The bid is not owned by the caller\\n     * - The listing is not active (sold or withdrawn)\\n     *\\n     * @param _bidId The unique identifier of the bid to release funds for\\n     */\\n    function buyerReleaseFunds(uint256 _bidId) \\n        external\\n        nonReentrant\\n    {\\n        // Check\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        require(bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n\\n        // Effect\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\n\\n        uint256 transferValue = bid.price;\\n        address payable recipient = listing.saleEthRecipient;\\n        uint256 listingId = bid.listingId;\\n        \\n        _updateFinalizeSaleState(bid, _bidId, listing);\\n\\n        // Interaction\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\n\\n        emit SaleFinalized(_bidId, listingId, transferValue - feeAmount, feeAmount);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Updates the asking price of an existing listing. We don't update\\n     * the existing bids against the listing because the newAskPrice is an indicative value.\\n     * The new ask price must be greater than or equal to the existing min bid price. If seller\\n     * wants to update the min bid price, they should delete the listing and create a new one with\\n     * the new min bid price.\\n     *\\n     * @param _listingId        The unique identifier of the listing to update\\n     * @param _newAskPrice      The new asking price for the listing\\n     * @param _saleEthRecipient The new address to receive the ETH from the sale; must be a contract that can\\n     *                          receive ETH or an EOA\\n     */\\n    function updateListing(uint256 _listingId, uint256 _newAskPrice, address payable _saleEthRecipient) external whenNotPaused {\\n        Listing storage listing = listings[_listingId];\\n        \\n        require(listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n        require(_newAskPrice >= listing.minBidPrice, \\\"Ask price is less than min bid price\\\");\\n        require(_saleEthRecipient != address(0), \\\"Invalid sale ETH recipient\\\");\\n        \\n        listing.askPrice = _newAskPrice;\\n        listing.saleEthRecipient = _saleEthRecipient;\\n\\n        emit ListingUpdated(_listingId, msg.sender, _newAskPrice, _saleEthRecipient);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array\\n     * and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing\\n     * are left as is to allow the buyer to withdraw the bid.\\n     *\\n     * @param _listingId The unique identifier of the listing to delete\\n     */\\n    function deleteListing(uint256 _listingId) external {\\n        Listing storage listing = listings[_listingId];\\n        \\n        require(listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n        \\n        verifiedDomainRegistry.removeDomainListing(listing.domainId);\\n\\n        _pruneListing(listing, _listingId);\\n\\n        emit ListingDeleted(_listingId, msg.sender);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry.\\n     * \\n     * @param _listingId    Listing Id to remove\\n     */\\n    function registryRemoveListing(uint256 _listingId) external override {\\n        Listing storage listing = listings[_listingId];\\n\\n        require(address(verifiedDomainRegistry) == msg.sender, \\\"Caller is not registry\\\");\\n        // If listing is NOT active, this function will NOT be called because the listing status\\n        // would have already been removed from the registry beforehand; so there is no need to \\n        // check if listing is active\\n        \\n        _pruneListing(listing, _listingId);\\n\\n        emit ListingDeletedByRegistry(_listingId);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher \\n     * than the old price. The buyer must send the additional amount of ETH. The function reverts if\\n     * - bid has initiated refund, caller is not bid owner or listing is not active\\n     * - the new price is less than old price\\n     * - msg.value is NOT STRICTLY EQUAL to than new price - old price\\n     *\\n     * @param _bidId The unique identifier of the bid to increase the price for\\n     * @param _newPrice The new price for the bid\\n     */\\n    function increaseBidPrice(uint256 _bidId, uint256 _newPrice)\\n        external\\n        payable\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        // Check\\n        _validateIncreaseBidPrice(bid, listing, _newPrice);\\n        \\n        // Effect\\n        bid.price = _newPrice;\\n\\n        emit BidPriceIncreased(_bidId, msg.sender, _newPrice);\\n    }\\n\\n    /**\\n     * @notice Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has \\n     * configured their Namecheap account to accept ownership of domains immediately upon transfer.\\n     * \\n     * DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only \\n     * an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller\\n     * may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But\\n     * if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can \\n     * cancel the transfer immediately.\\n     */\\n    function enableInstantAccept() external onlyInitialized {\\n        require(!instantAcceptEnabled[msg.sender], \\\"Instant accept already enabled\\\");\\n        \\n        instantAcceptEnabled[msg.sender] = true;        \\n        emit InstantAcceptUpdated(msg.sender, true);\\n    }\\n\\n    /**\\n     * @notice Disables the instant accept flag for the buyer.\\n     */\\n    function disableInstantAccept() external onlyInitialized {\\n        require(instantAcceptEnabled[msg.sender], \\\"Instant accept already disabled\\\");\\n\\n        instantAcceptEnabled[msg.sender] = false;\\n        emit InstantAcceptUpdated(msg.sender, false);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner \\n     * after the initial bid expiry period has passed.\\n     *\\n     * @param _bidId The unique identifier of the bid to initiate refund for\\n     */\\n    function initiateRefund(uint256 _bidId) external {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        _validateInitiateRefund(bid, listing);\\n\\n        bid.expiryTimestamp = block.timestamp + bidRefundPeriod;\\n        bid.refundInitiated = true;\\n\\n        emit RefundInitiated(_bidId, bid.buyer);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\n     *\\n     * @param _bidId The unique identifier of the bid to withdraw\\n     */\\n    function withdrawBid(uint256 _bidId) external nonReentrant {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        // Check\\n        _validateWithdrawBid(bid, listing);\\n\\n        // Effect\\n        uint256 refundAmount = bid.price;\\n        _pruneBid(bid, _bidId, listing);\\n        \\n        // Interaction\\n        payable(msg.sender).sendValue(refundAmount);\\n\\n        emit BidWithdrawn(_bidId, msg.sender, refundAmount);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * @notice Initializes the contract with domain verification and transfer processors. Can \\n     * only be called once by the contract owner\\n     * \\n     * @param _transferDomainProcessor The address of the domain transfer processor contract\\n     * @param _verifiedDomainRegistry The address of the verified domain registry contract\\n     * @param _mailServerKeyHashAdapter The address of the mail server key hash adapter contract\\n     */\\n    function initialize(\\n        ITransferDomainProcessor _transferDomainProcessor,\\n        IVerifiedDomainRegistry _verifiedDomainRegistry,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter\\n    ) external onlyOwner {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n        transferDomainProcessor = _transferDomainProcessor;\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Pauses listing and proof submission functionality for the marketplace. \\n     * Functionalites that are paused:\\n     * - Listing creation and update\\n     * - Bid creation and update\\n     * - Sale finalization\\n     * \\n     * Functinonalites that remain unpaused to allow users to retrieve funds in contract:\\n     * - Bid refund initiation and withdrawal\\n     * - Listing deletion\\n     * - Manual settlement between buyer and seller\\n     */\\n    function pauseMarketplace() external onlyOwner {\\n        _pause();\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Restarts paused functionality for the marketplace.\\n     */\\n    function unpauseMarketplace() external onlyOwner {\\n        _unpause();\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the transfer domain processor\\n     *\\n     * @param _transferDomainProcessor The new transfer domain processor\\n     */\\n    function updateTransferDomainProcessor(ITransferDomainProcessor _transferDomainProcessor) external onlyOwner {\\n        require(address(_transferDomainProcessor) != address(0), \\\"Invalid address\\\");\\n        \\n        transferDomainProcessor = _transferDomainProcessor;\\n        emit TransferDomainProcessorUpdated(_transferDomainProcessor);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the managed mail server key hash adapter\\n     *\\n     * @param _mailServerKeyHashAdapter The new mail server key hash adapter\\n     */\\n    function updateMailServerKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        require(address(_mailServerKeyHashAdapter) != address(0), \\\"Invalid address\\\");\\n        \\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        emit MailServerKeyHashAdapterUpdated(_mailServerKeyHashAdapter);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the fee percentage for the marketplace\\n     *\\n     * @param _newFee The new fee percentage (in basis points)\\n     */\\n    function updateFee(uint256 _newFee) external onlyOwner {\\n        fee = _newFee;\\n        emit FeeUpdated(_newFee);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the fee recipient address\\n     *\\n     * @param _newFeeRecipient The new address to receive fees\\n     */\\n    function updateFeeRecipient(address payable _newFeeRecipient) external onlyOwner {\\n        require(_newFeeRecipient != address(0), \\\"Invalid address\\\");\\n        feeRecipient = _newFeeRecipient;\\n        emit FeeRecipientUpdated(_newFeeRecipient);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the minimum bid active period\\n     *\\n     * @param _newBidSettlementPeriod The new bid settlement period in seconds\\n     */\\n    function updateBidSettlementPeriod(uint256 _newBidSettlementPeriod) external onlyOwner {\\n        require(_newBidSettlementPeriod > 0, \\\"Bid settlement period must be greater than 0\\\");\\n        bidSettlementPeriod = _newBidSettlementPeriod;\\n        emit BidSettlementPeriodUpdated(_newBidSettlementPeriod);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the bid refund period\\n     *\\n     * @param _newBidRefundPeriod The new bid refund period in seconds\\n     */\\n    function updateBidRefundPeriod(uint256 _newBidRefundPeriod) external onlyOwner {\\n        require(_newBidRefundPeriod > 0, \\\"Bid refund period must be greater than 0\\\");\\n        bidRefundPeriod = _newBidRefundPeriod;\\n        emit BidRefundPeriodUpdated(_newBidRefundPeriod);\\n    }\\n\\n    /* ============ View Functions ============ */    \\n\\n    /**\\n     * @notice Get listing information with listingId for a list of listingIds\\n     * @param _listingIds An array of listingIds to fetch details for\\n     */\\n    function getListings(uint256[] memory _listingIds)\\n        external \\n        view \\n        returns (ListingWithId[] memory listingInfo) \\n    {\\n        listingInfo = new ListingWithId[](_listingIds.length);\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\n            listingInfo[i] = ListingWithId({\\n                listingId: _listingIds[i],\\n                listing: listings[_listingIds[i]]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns all listings created by a user\\n     * @param _user The address of the user to fetch listings for\\n     */\\n    function getUserListings(address _user) external view returns (ListingWithId[] memory listingInfo) {\\n        uint256[] memory userListingIds = userListings[_user];\\n        listingInfo = new ListingWithId[](userListingIds.length);\\n        for (uint256 i = 0; i < userListingIds.length; i++) {\\n            uint256 listingId = userListingIds[i];\\n            listingInfo[i] = ListingWithId({\\n                listingId: listingId,\\n                listing: listings[listingId]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the bids created by a user\\n     * @param _user The address of the user to fetch bids for\\n     */\\n    function getUserBids(address _user) external view returns (BidDetailsWithId[] memory bidInfo) {\\n        uint256[] memory userBidIds = userBids[_user];\\n        bidInfo = new BidDetailsWithId[](userBidIds.length);\\n        for (uint256 i = 0; i < userBidIds.length; i++) {\\n            uint256 bidId = userBidIds[i];\\n            bidInfo[i] = BidDetailsWithId({\\n                bidId: bidId,\\n                bid: bids[bidId],\\n                buyerInstantAcceptEnabled: instantAcceptEnabled[_user]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the bids for given listingIds\\n     * @param _listingIds An array of listingIds to fetch bids for\\n     */\\n    function getListingBids(uint256[] memory _listingIds) external view returns (BidDetailsWithId[][] memory bidInfo) {\\n        bidInfo = new BidDetailsWithId[][](_listingIds.length);\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\n            uint256 listingId = _listingIds[i];\\n            uint256[] memory listingBidIds = listings[listingId].bids;\\n            bidInfo[i] = new BidDetailsWithId[](listingBidIds.length);\\n            for (uint256 j = 0; j < listingBidIds.length; j++) {\\n                uint256 bidId = listingBidIds[j];\\n                bidInfo[i][j] = BidDetailsWithId({\\n                    bidId: bidId,\\n                    bid: bids[bidId],\\n                    buyerInstantAcceptEnabled: instantAcceptEnabled[bids[bidId].buyer]\\n                });\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Get all allowed sellers\\n     */\\n    function getAllowedSellers() external view returns (address[] memory) {\\n        return _getAllowedAddresses();\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _verifyCreateListing(\\n        bytes32 _domainId, \\n        uint256 _minBidPrice, \\n        uint256 _askPrice, \\n        address _saleEthRecipient\\n    ) internal view {\\n        IVerifiedDomainRegistry.DomainWithId memory domainWithId = verifiedDomainRegistry.getDomain(_domainId);\\n        require(domainWithId.domain.owner == msg.sender, \\\"Caller is not domain owner\\\");\\n        require(domainWithId.domain.exchange == address(0), \\\"Domain already listed on registry\\\");\\n\\n        require(_minBidPrice > 0, \\\"Minimum bid price is zero\\\");\\n        require(_askPrice >= _minBidPrice, \\\"Ask price is less than min bid price\\\");\\n        require(_saleEthRecipient != address(0), \\\"Invalid sale ETH recipient\\\");\\n    }\\n\\n    function _updateCreateListingState(\\n        bytes32 _domainId, \\n        uint256 _askPrice, \\n        uint256 _minBidPrice,\\n        address payable _saleEthRecipient,\\n        bytes memory _encryptionKey,\\n        bytes32 _dkimKeyHash\\n    ) internal returns (uint256 listingId) {\\n        \\n        // New listing\\n        listingId = listingCounter;\\n        listings[listingId] = Listing({\\n            seller: msg.sender,\\n            saleEthRecipient: _saleEthRecipient,\\n            encryptionKey: _encryptionKey,\\n            dkimKeyHash: _dkimKeyHash,\\n            askPrice: _askPrice,\\n            minBidPrice: _minBidPrice,\\n            domainId: _domainId,\\n            createdAt: block.timestamp,\\n            isActive: true,\\n            bids: new uint256[](0)\\n        });\\n        userListings[msg.sender].push(listingId);\\n\\n        // Increment listingCounter\\n        listingCounter = listingCounter + 1;\\n    }\\n\\n    function _validateCreateBid(Listing storage _listing, uint256 _price, bytes32 _buyerIdHash) internal view {\\n        require(_listing.seller != address(0), \\\"Listing does not exist\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n        \\n        // Validate inputs\\n        require(_price >= _listing.minBidPrice, \\\"Bid price is less than min bid price\\\");\\n        require(_buyerIdHash != bytes32(0), \\\"Buyer ID hash cannot be empty\\\");\\n    }\\n\\n    function _updateCreateBidState(\\n        Listing storage _listing, \\n        uint256 _listingId, \\n        uint256 _price, \\n        bytes32 _buyerIdHash, \\n        string memory _encryptedBuyerId\\n    ) internal returns (uint256 bidId) {\\n        bidId = bidCounter;\\n        bids[bidId] = Bid({\\n            buyer: msg.sender,\\n            listingId: _listingId,\\n            encryptedBuyerId: _encryptedBuyerId,\\n            buyerIdHash: _buyerIdHash,\\n            createdAt: block.timestamp,\\n            expiryTimestamp: type(uint256).max,\\n            price: _price,\\n            refundInitiated: false\\n        });\\n        userBids[msg.sender].push(bidId);\\n        _listing.bids.push(bidId);\\n\\n        // Increment bidCounter\\n        bidCounter = bidCounter + 1;\\n    }\\n\\n    function _validateFinalizeSale(\\n        Bid storage _bid, \\n        Listing storage _listing,\\n        bytes32 _dkimKeyHash,\\n        bytes32 _hashedReceiverId, \\n        string memory _transferredDomainName\\n    ) internal view {\\n        require(_bid.buyer != address(0), \\\"Bid does not exist\\\");\\n        require(_listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n\\n        // Validate namecheap DKIM key\\n        if (_listing.dkimKeyHash != bytes32(0)) {\\n            require(_dkimKeyHash == _listing.dkimKeyHash, \\\"Invalid custom DKIM key hash\\\");\\n        } else {\\n            require(\\n                mailServerKeyHashAdapter.isMailServerKeyHash(_dkimKeyHash), \\n                \\\"Invalid managed DKIM key hash\\\"\\n            );\\n        }\\n\\n        // Validate domain and receiver\\n        bytes32 transferredDomainId = keccak256(abi.encodePacked(_transferredDomainName));\\n        require(_bid.buyerIdHash == _hashedReceiverId, \\\"Invalid receiver\\\");\\n        require(_listing.domainId == transferredDomainId, \\\"Invalid domain\\\");\\n    }\\n\\n    function _updateFinalizeSaleState(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\n        uint256 listingId = _bid.listingId;\\n        \\n        _pruneBid(_bid, _bidId, _listing);\\n        _pruneListing(_listing, listingId);\\n    }\\n\\n    function _validateIncreaseBidPrice(\\n        Bid storage _bid, \\n        Listing storage _listing, \\n        uint256 _newPrice\\n    ) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(!_bid.refundInitiated, \\\"Refund already initiated\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n\\n        // Validate new price\\n        require(_newPrice > _bid.price, \\\"New price not greater than old price\\\");\\n        require(msg.value == _newPrice - _bid.price, \\\"Incorrect amount of ETH sent\\\");\\n    }\\n\\n    function _validateInitiateRefund(Bid storage _bid, Listing storage _listing) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(!_bid.refundInitiated, \\\"Refund already initiated\\\");\\n        require(block.timestamp > bidSettlementPeriod + _bid.createdAt, \\\"Refund period not started\\\");\\n        require(_listing.isActive, \\\"Listing expired. Bid can be withdrawn directly\\\");\\n    }\\n\\n    function _validateWithdrawBid(Bid storage _bid, Listing storage _listing) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        if (_listing.isActive) {\\n            require(_bid.refundInitiated, \\\"Refund not initiated\\\");\\n            require(block.timestamp >= _bid.expiryTimestamp, \\\"Refund period not ended\\\");\\n        }\\n    }\\n\\n    function _settleSale(address payable _recipient, uint256 _amount) internal returns (uint256 feeAmount) {\\n        feeAmount = (_amount * fee) / PRECISE_UNIT;\\n        _recipient.sendValue(_amount - feeAmount);\\n\\n        if (feeAmount > 0) {\\n            feeRecipient.sendValue(feeAmount);\\n        }\\n    }\\n\\n    /**\\n     * @notice Deletes a bid from the exchange. Removes the bid from the listing's bids array and the buyer's\\n     * bids array. Deletes the listing if it is expired and has no bids.\\n     */\\n    function _pruneBid(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\n        userBids[_bid.buyer].removeStorage(_bidId);\\n        _listing.bids.removeStorage(_bidId);\\n        if (!_listing.isActive && _listing.bids.length == 0) {\\n            delete listings[_bid.listingId];\\n        }\\n        delete bids[_bidId];\\n    }\\n\\n    /**\\n     * @notice Marks a listing as expired. Removes the listing from the seller's listings array and domain listing.\\n     * If the listing has no bids, it is deleted from the exchange.\\n     */\\n    function _pruneListing(Listing storage _listing, uint256 _listingId) internal {\\n        _listing.isActive = false;\\n        userListings[_listing.seller].removeStorage(_listingId);\\n        if (_listing.bids.length == 0) {\\n            delete listings[_listingId];\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressAllowList.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"./lib/AddressArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract AddressAllowList is Ownable {\\n\\n    using AddressArrayUtils for address[];\\n\\n    /* ============ Events ============ */\\n    event AddressAddedToAllowlist(address indexed allowedAddress);\\n    event AddressRemovedFromAllowlist(address indexed allowedAddress);\\n    event AllowlistEnabled();\\n    event AllowlistDisabled();\\n    \\n    /* ============ Modifier ============ */\\n    modifier onlyAllowed() {\\n        require(isEnabled ? isAllowed[msg.sender] : true, \\\"Address is not allowed\\\");\\n        _;\\n    }\\n    \\n    /* ============ State Variables ============ */\\n    bool public isEnabled;                     // Boolean indicating if the allowlist is enabled\\n    address[] public allowedAddresses;         // Array of addresses that are allowed from taking depositors liquidity\\n    mapping(address => bool) public isAllowed; // Mapping of address to boolean indicating if the user is allowed\\n\\n    /* ============ Constructor ============ */\\n    constructor(address[] memory _allowedAddresses) Ownable() {\\n        for (uint256 i = 0; i < _allowedAddresses.length; i++) {\\n            address allowedAddress = _allowedAddresses[i];\\n\\n            require(!isAllowed[allowedAddress], \\\"Address is already allowed\\\");\\n            isAllowed[allowedAddress] = true;\\n            emit AddressAddedToAllowlist(allowedAddress);\\n        }\\n        allowedAddresses = _allowedAddresses;\\n        isEnabled = true;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed\\n     * functions.\\n     *\\n     * @param _allowedAddresses   List of addresses allowed to call allow listed functions\\n     */\\n    function addAddressesToAllowlist(address[] memory _allowedAddresses) external onlyOwner {\\n        for(uint256 i = 0; i < _allowedAddresses.length; i++) {\\n            address allowedAddress = _allowedAddresses[i];\\n\\n            require(!isAllowed[allowedAddress], \\\"Address already on allowlist\\\");\\n\\n            isAllowed[allowedAddress] = true;\\n            allowedAddresses.push(allowedAddress);\\n\\n            emit AddressAddedToAllowlist(allowedAddress);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes passed addresses from an allow list. Addresses not on the allow list are unable to call\\n     * allow listed functions.\\n     *\\n     * @param _disallowedAddresses   List of addresses being disallowed from calling allow listed functions\\n     */\\n    function removeAddressesFromAllowlist(address[] memory _disallowedAddresses) external onlyOwner {\\n        for(uint256 i = 0; i < _disallowedAddresses.length; i++) {\\n            address disallowedAddress = _disallowedAddresses[i];\\n\\n            require(isAllowed[disallowedAddress], \\\"Address already disallowed\\\");\\n\\n            isAllowed[disallowedAddress] = false;\\n            allowedAddresses.removeStorage(disallowedAddress);\\n\\n            emit AddressRemovedFromAllowlist(disallowedAddress);\\n        }\\n    }\\n\\n    /**\\n     * @notice Enable the allow list. When the allow list is enabled, only approved addresses are allowed to\\n     * functions with onlyAllowed modifier.\\n     */\\n    function enableAllowlist() external onlyOwner {\\n        require(!isEnabled, \\\"Allow list is already enabled\\\");\\n\\n        isEnabled = true;\\n        emit AllowlistEnabled();\\n    }\\n\\n    /**\\n     * @notice Disable the allow list. When the allow list is disabled, any address is allowed to call functions\\n     * with onlyAllowed modifier.\\n     */\\n    function disableAllowlist() external onlyOwner {\\n        require(isEnabled, \\\"Allow list is already disabled\\\");\\n\\n        isEnabled = false;\\n        emit AllowlistDisabled();\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function _getAllowedAddresses() internal view returns (address[] memory) {\\n        return allowedAddresses;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/ClaimVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary ClaimVerifier {\\n\\n    /**\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\n     * the target string in the data string if found. Returns type(uint256).max if:\\n     * - Target is longer than data\\n     * - Target is not found\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     */\\n    function findSubstringEndIndex(\\n        string memory data,\\n        string memory target\\n    ) public pure returns (uint256) {\\n        bytes memory dataBytes = bytes(data);\\n        bytes memory targetBytes = bytes(target);\\n\\n        if (dataBytes.length < targetBytes.length) {\\n            return type(uint256).max;\\n        }\\n\\n        // Find start of target\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\n            bool isMatch = true;\\n\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\n                if (dataBytes[i + j] != targetBytes[j]) {\\n                    isMatch = false;\\n                    break;\\n                }\\n            }\\n\\n            if (isMatch) {\\n                return i + targetBytes.length; // Return end index + 1\\n            }\\n        }\\n\\n        return type(uint256).max;\\n    }\\n\\n    /**\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\n     * Pass prefix formatted with quotes, for example '\\\"providerHash\\\\\\\":\\\\\\\"'\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     *\\n     * @param data      Context string from which target value needs to be extracted\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\n     */\\n    function extractFieldFromContext(\\n        string memory data,\\n        string memory prefix\\n    ) public pure returns (string memory) {\\n        // Find end index of prefix; which is the start index of the value\\n        uint256 start = findSubstringEndIndex(data, prefix);\\n\\n        bytes memory dataBytes = bytes(data);\\n        if (start == dataBytes.length) {\\n            return \\\"\\\"; // Prefix not found. Malformed or missing message\\n        }\\n        \\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\n        uint256 end = start;\\n        while (\\n            end < dataBytes.length &&\\n            !(dataBytes[end] == '\\\"' && dataBytes[end - 1] != \\\"\\\\\\\\\\\")\\n        ) {\\n            end++;\\n        }\\n        if (end <= start) {\\n            return \\\"\\\"; // Malformed or missing message\\n        }\\n        bytes memory contextMessage = new bytes(end - start);\\n        for (uint i = start; i < end; i++) {\\n            contextMessage[i - start] = dataBytes[i];\\n        }\\n        return string(contextMessage);\\n    }\\n\\n\\n    /**\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\n     * multiple times.\\n     * \\n     * @param data                  Context string from which target value needs to be extracted\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\n     */\\n    function extractAllFromContext(\\n        string memory data,\\n        uint8 maxValues,\\n        bool extractProviderHash\\n    ) public pure returns (string[] memory) {\\n        \\n        require(maxValues > 0, \\\"Max values must be greater than 0\\\");\\n\\n        bytes memory dataBytes = bytes(data);\\n        uint index = 0;\\n\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\"extractedParameters\\\\\\\":{\\\\\\\"');\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\"Extraction failed. Malformed extractedParameters\\\");\\n        }\\n        index += extractedParametersBytes.length;\\n\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\"extractedParameters\\\\\\\":{\\\\\\\"'\\n        uint valuesFound = 0;\\n    \\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\n\\n        while (\\n            index < dataBytes.length\\n        ) {\\n            // Keep incrementing until '\\\"', escaped quotes are not considered\\n            if (!(dataBytes[index] == '\\\"' && dataBytes[index - 1] != \\\"\\\\\\\\\\\")) {\\n                index++;\\n                continue;\\n            }\\n\\n            if (!isValue) {\\n                // \\\\\\\":\\\\\\\" (3 chars)\\n                require(dataBytes[index + 1] == \\\":\\\" && dataBytes[index + 2] == '\\\\\\\"', \\\"Extraction failed. Malformed data 1\\\");\\n                index += 3;     // move it after \\\\\\\"\\n                isValue = true;\\n                valueIndices[2 * valuesFound] = index;      // start index\\n            } else {\\n                // \\\\\\\",\\\\\\\" (3 chars) or \\\\\\\"}, (3 chars)\\n                // \\\\\\\"}} is not supported, there should always be a providerHash\\n                require(\\n                    dataBytes[index + 1] == \\\",\\\" && dataBytes[index + 2] == '\\\\\\\"' ||  \\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\",\\\",\\n                    \\\"Extraction failed. Malformed data 2\\\"\\n                );\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\n                valuesFound++;\\n\\n                if (dataBytes[index + 1] == \\\",\\\") {\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\n                    require(valuesFound != maxValues, \\\"Extraction failed. Exceeded max values\\\");\\n                    index += 3;\\n                    isValue = false;\\n                } else {    // index + 1 = \\\"}\\\"\\n                    index += 3;\\n                    break;  // end of extractedParameters\\n                }\\n            }\\n        }\\n\\n        if (extractProviderHash) {\\n            bytes memory providerHashParamBytes = bytes(\\\"\\\\\\\"providerHash\\\\\\\":\\\\\\\"\\\");\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\"Extraction failed. Malformed providerHash\\\");\\n            }\\n            index += providerHashParamBytes.length;\\n            \\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\n            valueIndices[2 * valuesFound] = index;\\n            // Keep incrementing until '\\\"'\\n            while (\\n                index < dataBytes.length && dataBytes[index] != '\\\"'\\n            ) {\\n                index++;\\n            }\\n            valueIndices[2 * valuesFound + 1] = index;\\n            valuesFound++;\\n        }   \\n        \\n        string[] memory values = new string[](valuesFound);\\n        \\n        for (uint i = 0; i < valuesFound; i++) {\\n            uint startIndex = valueIndices[2 * i];\\n            uint endIndex = valueIndices[2 * i + 1];\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\n            for (uint j = startIndex; j < endIndex; j++) {\\n                contextValue[j - startIndex] = dataBytes[j];\\n            }\\n            values[i] = string(contextValue);\\n        }\\n\\n        return values;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IProxyBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IProxyBaseProcessor {\\n    \\n    struct Proof {\\n        Claims.ClaimInfo claimInfo;\\n        Claims.SignedClaim signedClaim;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/StringArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title StringArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle String Arrays\\n */\\nlibrary StringArrayUtils {\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input string to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(string[] memory A, string memory a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (keccak256(bytes(A[i])) == keccak256(bytes(a))) {\\n                return (i, true);\\n            }\\n        }\\n        return (type(uint256).max, false);\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The string to remove\\n     */\\n    function removeStorage(string[] storage A, string memory a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"String not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(uint256[] memory A, uint256 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/external/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./lib/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"./lib/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/ProxyBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../lib/AddressArrayUtils.sol\\\";\\nimport { StringArrayUtils } from \\\"../lib/StringArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\nimport { IProxyBaseProcessor } from \\\"../interfaces/IProxyBaseProcessor.sol\\\";\\nimport { ClaimVerifier } from \\\"../ClaimVerifier.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ProxyBaseProcessor is IProxyBaseProcessor, Ownable {\\n\\n    using AddressArrayUtils for address[];\\n    using StringArrayUtils for string[];\\n\\n    /* ============ State Variables ============ */\\n    mapping(address => bool) public isWitness;\\n    address[] public witnesses;\\n    mapping(string => bool) public isProviderHash;\\n    string[] public providerHashes;                         // Set of provider hashes that these proofs should be for\\n    INullifierRegistry public immutable nullifierRegistry;\\n\\n    /* ============ Events ============ */\\n    event WitnessAdded(address witness);\\n    event WitnessRemoved(address witness);\\n    event ProviderHashAdded(string providerHash);\\n    event ProviderHashRemoved(string providerHash);\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        INullifierRegistry _nulliferRegistry,\\n        string[] memory _providerHashes\\n    )\\n        Ownable()\\n    {\\n        nullifierRegistry = _nulliferRegistry;\\n\\n        for (uint256 i = 0; i < _providerHashes.length; i++) {\\n            require(!isProviderHash[_providerHashes[i]], \\\"Provider hash already added\\\");\\n            isProviderHash[_providerHashes[i]] = true;\\n            providerHashes.push(_providerHashes[i]);\\n\\n            emit ProviderHashAdded(_providerHashes[i]);\\n        }\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add witness address. Witness must not have been previously added.\\n     *\\n     * @param _newWitness    Address of the new witness\\n     */\\n    function addWitness(address _newWitness) external onlyOwner {\\n        require(!isWitness[_newWitness], \\\"Address is already a witness\\\");\\n\\n        isWitness[_newWitness] = true;\\n        witnesses.push(_newWitness);\\n\\n        emit WitnessAdded(_newWitness);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove witness address. Witness must have been previously added.\\n     *\\n     * @param _removeWitness    Address of witness to be removed\\n     */\\n    function removeWitness(address _removeWitness) external onlyOwner {\\n        require(isWitness[_removeWitness], \\\"Address is not a witness\\\");\\n\\n        delete isWitness[_removeWitness];\\n        witnesses.removeStorage(_removeWitness);\\n\\n        emit WitnessRemoved(_removeWitness);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\n     *\\n     * @param _newProviderHash    New provider hash to be added\\n     */\\n    function addProviderHash(string memory _newProviderHash) external onlyOwner {\\n        require(!isProviderHash[_newProviderHash], \\\"Provider hash already added\\\");\\n\\n        isProviderHash[_newProviderHash] = true;\\n        providerHashes.push(_newProviderHash);\\n\\n        emit ProviderHashAdded(_newProviderHash);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\n     *\\n     * @param _removeProviderHash    Provider hash to be removed\\n     */\\n    function removeProviderHash(string memory _removeProviderHash) external onlyOwner {\\n        require(isProviderHash[_removeProviderHash], \\\"Provider hash not found\\\");\\n\\n        delete isProviderHash[_removeProviderHash];\\n        providerHashes.removeStorage(_removeProviderHash);\\n\\n        emit ProviderHashRemoved(_removeProviderHash);\\n    }\\n\\n    /* ============ Public Functions ============ */\\n    \\n    /**\\n     * Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters)\\n     * to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature. \\n     * This function verifies a claim by performing the following checks on the claim\\n     * - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim\\n     * - Checks if the signatures are valid and from the witnesses\\n     * This function reverts if\\n     * - No signatures are found on the proof\\n     * - Number of signatures is not equal to the number of witnesses\\n     * - ClaimInfo hash does not match the identifier in the claim\\n     * - Signatures are invalid (not from the witnesses)\\n     * \\n     * DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the \\n     * responsibility of the caller.\\n     * \\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     *    \\n     * @param proof                 Proof to be verified\\n     */\\n    function verifyProofSignatures(Proof memory proof) public view returns (bool) {\\n\\n        // create signed claim using claimData and signature.\\n        require(proof.signedClaim.signatures.length > 0, \\\"No signatures\\\");\\n        Claims.SignedClaim memory signed = Claims.SignedClaim(\\n            proof.signedClaim.claim,\\n            proof.signedClaim.signatures\\n        );\\n\\n        // check if the hash from the claimInfo is equal to the infoHash in the claimData\\n        bytes32 hashed = Claims.hashClaimInfo(proof.claimInfo);\\n        require(proof.signedClaim.claim.identifier == hashed, \\\"ClaimInfo hash doesn't match\\\");\\n\\n        // Recover signers of the signed claim\\n        address[] memory signedWitnesses = Claims.recoverSignersOfSignedClaim(signed);\\n\\n        // check if the number of signatures is equal to the number of witnesses\\n        require(\\n            signedWitnesses.length == witnesses.length,\\n            \\\"Number of signatures not equal to number of witnesses\\\"\\n        );\\n\\n        // Check signatures are from witnesses\\n        for (uint256 i = 0; i < signed.signatures.length; i++) {\\n            bool found = false;\\n            for (uint j = 0; j < witnesses.length; j++) {\\n                if (signedWitnesses[i] == witnesses[j]) {\\n                    found = true;\\n                    break;\\n                }\\n            }\\n            require(found, \\\"Signature not appropriate\\\");\\n        }\\n\\n        return true;\\n    }\\n\\n\\n    /* ============ View Functions ============ */\\n\\n    function getWitnesses() external view returns (address[] memory) {\\n        return witnesses;\\n    }\\n\\n    function getProviderHashes() external view returns (string[] memory) {\\n        return providerHashes;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProviderHash(string memory _providerHash) internal view returns (bool) {\\n        return isProviderHash[_providerHash];\\n    }\\n    \\n    function _validateAndAddNullifier(bytes[] memory _sigArray) internal {\\n        bytes32 nullifier = keccak256(abi.encode(_sigArray));\\n        require(!nullifierRegistry.isNullified(nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/TicketmasterDataParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"./lib/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"./lib/StringConversionUtils.sol\\\";\\nimport { ClaimVerifier } from \\\"./ClaimVerifier.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary TicketmasterDataParsing {\\n    \\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each dash, \\\"T\\\", or colon. Function will revert\\n     * if there are not 6 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is SPECIFIC TO THE DATE FORMAT USED BY Ticketmaster, not suitable for use with other date\\n     * formats. Ticketmaster date format is: \\\"YYYY-MM-DDTHH:MM:SS\\\" and returns UTC timestamps.\\n     *\\n     * @param _dateString       Date string to be converted to a UTC timestamp\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256 utcTimestamp) {\\n        string[6] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x2d || bytes(_dateString)[i] == 0x3a || bytes(_dateString)[i] == 0x54) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 6 substrings were found (string is split at 5 different places)\\n        require(breakCounter == 5, \\\"Invalid date string\\\");\\n\\n        utcTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[0].stringToUint(0),    // year\\n            extractedStrings[1].stringToUint(0),    // month\\n            extractedStrings[2].stringToUint(0),    // day\\n            extractedStrings[3].stringToUint(0),    // hour\\n            extractedStrings[4].stringToUint(0),    // minute\\n            0                                       // we don't need to the second granularity\\n        );\\n    }\\n\\n    /**\\n     * Extract event ID from URL by finding the last slash and taking the substring after it. We assume the\\n     * URL is formulated something like: {domainRoot}/.../event/EVENT_ID\\n     *\\n     * @param _url          URL to extract event ID from\\n     * @return              Event ID extracted from URL\\n     */\\n    function _extractEventIdFromUrl(string memory _url) internal pure returns (string memory) {\\n        string memory prefix = \\\"event/\\\";\\n        bytes memory urlBytes = bytes(_url);\\n        uint256 urlLength = urlBytes.length;\\n\\n        uint256 startIndex = ClaimVerifier.findSubstringEndIndex(_url, prefix);\\n        // If the start index is the max value or the URL length, then the event ID was not found\\n        if (startIndex == type(uint256).max || startIndex == urlLength) {\\n            revert(\\\"Event ID not found in URL\\\");\\n        }\\n\\n        bytes memory contextMessage = new bytes(urlLength - startIndex);\\n        for (uint i = startIndex; i < urlLength; i++) {\\n            contextMessage[i - startIndex] = urlBytes[i];\\n        }\\n        return string(contextMessage);\\n    }\\n\\n    /**\\n     * Parse tickets out of a ticket string of the format: '[\\\"ticket1\\\", \\\"ticket2\\\", \\\"ticket3\\\"]'.\\n     * We start by getting the number of tickets in a string by counting the number of commas and adding 1.\\n     * Then we iterate through the string and find the ticket IDs by looking for the quotes. We need to extract\\n     * from quote to quote so we look for all even-numbered quotes then extract the string between that and the\\n     * previous quote index.\\n     *\\n     * @param _ticketString          Stringified array of tickets\\n     */\\n     function _parseTicketString(string memory _ticketString) internal pure returns (string[] memory ticketIds) {\\n        // Assume there is at least one ticket (which means array would not have a comma)\\n        // If there is no ticket then the transaction will end up reverting\\n        uint256 ticketCount = 1;\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\n            if (bytes(_ticketString)[i] == 0x2C) {\\n                ticketCount++;\\n            }\\n        }\\n\\n        ticketIds = new string[](ticketCount);\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\n            if (bytes(_ticketString)[i] == 0x22) {\\n                breakCounter++;\\n                if (breakCounter % 2 == 0) {\\n                    ticketIds[(breakCounter/2)-1] = _ticketString.substring(lastBreak, i-1);\\n                }\\n                lastBreak = i + 1;\\n            }\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IDomainExchange.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface IDomainExchange {\\n    function registryRemoveListing(uint256 _listingId) external;\\n}\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/interfaces/IVerifiedDomainRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IVerifyDomainProcessor } from \\\"./IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IVerifiedDomainRegistry {\\n\\n    struct Domain {\\n        address owner;\\n        string name;\\n        uint256 expiryTime;\\n        address exchange;\\n        uint256 listingId;\\n    }\\n\\n    struct DomainWithId {\\n        bytes32 domainId;\\n        Domain domain;\\n    }\\n\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\n    \\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\n    \\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\n    function removeDomainListing(bytes32 _domainId) external;\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\n}\\n\"\n    },\n    \"contracts/interfaces/IVerifyDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\nimport { IProxyBaseProcessor } from \\\"../external/interfaces/IProxyBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\n    \\n    struct DomainRaw {\\n        string name;\\n        uint256 expiryTime;\\n    }\\n\\n    function verifyProofs(\\n        Proof[] memory _proofs\\n    ) \\n        external  \\n        returns (DomainRaw[] memory domains);\\n}\"\n    },\n    \"contracts/mocks/DomainExchangeMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\nimport \\\"../interfaces/IDomainExchange.sol\\\";\\nimport \\\"../interfaces/IVerifiedDomainRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract DomainExchangeMock is IDomainExchange {\\n    \\n    mapping(uint256 => bool) public listingActive;\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\n\\n    constructor(\\n        IVerifiedDomainRegistry _verifiedDomainRegistry\\n    ) {\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\n    }\\n\\n    function createListing(bytes32 _domainId, uint256 _listingId) public {\\n        listingActive[_listingId] = true;\\n        verifiedDomainRegistry.setDomainListing(_domainId, _listingId);\\n    }\\n\\n    function registryRemoveListing(uint256 _listingId) external override {\\n        listingActive[_listingId] = false;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/TransferDomainProcessorMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ITransferDomainProcessor } from \\\"../interfaces/ITransferDomainProcessor.sol\\\";\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessorMock is ITransferDomainProcessor {\\n\\n    using StringUtils for uint256;\\n\\n    /* ============ State Variables ============ */\\n    string storedDomainName;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function setDomainName(string memory _domainName) external {\\n        storedDomainName = _domainName;\\n    }\\n\\n    function processProof(TransferProof memory _proof)\\n        external\\n        view\\n        override\\n        returns (bytes32 dkimKeyHash, bytes32 hashedReceiverId, string memory domainName, uint256 bidId)\\n    {\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n        hashedReceiverId = bytes32(_proof.signals[1]);\\n        domainName = storedDomainName;\\n        bidId = _proof.signals[3];\\n    }\\n}\\n\\n\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VerifyDomainProcessorMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ClaimVerifier } from \\\"../external/ClaimVerifier.sol\\\";\\nimport { StringConversionUtils } from \\\"../external/lib/StringConversionUtils.sol\\\";\\nimport { TicketmasterDataParsing } from \\\"../external/TicketmasterDataParsing.sol\\\";\\n\\nimport { IVerifyDomainProcessor } from \\\"../interfaces/IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VerifyDomainProcessorMock is IVerifyDomainProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\n\\n    function verifyProofs(Proof[] memory _proofs)\\n        external\\n        pure\\n        returns (DomainRaw[] memory domains)\\n    {\\n        domains = new DomainRaw[](_proofs.length);\\n\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\n            domains[i] = DomainRaw({\\n                name: string(_proofs[i].signedClaim.signatures[0]),\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\"YYYY-MM-DDTHH:MM:SS\\\"\\n                // and returns UTC timestamps.\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(string(_proofs[i].signedClaim.signatures[1]))\\n            });\\n        }\\n\\n        return domains;\\n    }\\n}\\n\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/VerifiedDomainRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./external/lib/Bytes32ArrayUtils.sol\\\";\\nimport { AddressArrayUtils } from \\\"./external/lib/AddressArrayUtils.sol\\\";\\n\\nimport { IDomainExchange } from \\\"./interfaces/IDomainExchange.sol\\\";\\nimport { IVerifiedDomainRegistry } from \\\"./interfaces/IVerifiedDomainRegistry.sol\\\";\\nimport { IVerifyDomainProcessor } from \\\"./interfaces/IVerifyDomainProcessor.sol\\\";\\n\\n\\npragma solidity ^0.8.18;\\n\\ncontract VerifiedDomainRegistry is IVerifiedDomainRegistry, Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using AddressArrayUtils for address[];\\n\\n    /* ============ Events ============ */\\n    event DomainVerified(\\n        bytes32 indexed domainId,\\n        address indexed owner,\\n        string domainName,\\n        uint256 expiryTime\\n    );\\n\\n    event DomainListed(\\n        bytes32 indexed domainId,\\n        address indexed exchange,\\n        uint256 indexed listingId\\n    );\\n\\n    event DomainListingRemoved(\\n        bytes32 indexed domainId,\\n        address indexed exchange\\n    );\\n\\n    event DomainTransferred(\\n        bytes32 indexed domainId,\\n        address indexed oldOwner,\\n        address indexed newOwner\\n    );\\n\\n\\n    event VerifyDomainProcessorUpdated(\\n        IVerifyDomainProcessor indexed newVerifyDomainProcessor\\n    );\\n\\n    event ExchangeAdded(address indexed exchange);\\n    event ExchangeRemoved(address indexed exchange);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(isExchange[msg.sender], \\\"Caller must be exchange\\\");\\n        _;\\n    }\\n\\n    modifier onlyInitialized() {\\n        require(isInitialized, \\\"Contract must be initialized\\\");\\n        _;\\n    }\\n\\n    /* ============ Public Variables ============ */\\n    IVerifyDomainProcessor public verifyDomainProcessor;\\n    address[] public exchanges;\\n    mapping(address=>bool) public isExchange;\\n\\n    bool public isInitialized;\\n\\n    mapping(bytes32 => Domain) public domains;\\n    mapping(address => bytes32[]) public userDomains;\\n\\n    /* ============ Constructor ============ */\\n    \\n    constructor() Ownable() {}\\n\\n    /* ============ Public Functions ============ */\\n\\n    /**\\n     * @notice Verify domains and add them to the registry. If domain is transferred off-chain to another party \\n     * then they can re-verify the domain and claim ownership of the domain and previous ownership is removed.\\n     * The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on\\n     * the domain. Function reverts if:\\n     * - Domain ownership TLS proofs are invalid\\n     * \\n     * @param _proofs           Array of domain ownership TLS proofs\\n     */\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external override\\n        onlyInitialized\\n    {\\n        IVerifyDomainProcessor.DomainRaw[] memory rawDomains = verifyDomainProcessor.verifyProofs(\\n            _proofs\\n        );\\n\\n        for (uint256 i = 0; i < rawDomains.length; i++) {\\n            IVerifyDomainProcessor.DomainRaw memory rawDomain = rawDomains[i];\\n            bytes32 domainId = getDomainId(rawDomain.name);\\n\\n            Domain storage domain = domains[domainId];\\n            if (domain.owner == address(0)) {\\n                // Case 1.1: Domain has no owner\\n                // Add caller as owner\\n                userDomains[msg.sender].push(domainId);\\n\\n                // Set domain details\\n                domains[domainId] = Domain({\\n                    owner: msg.sender,\\n                    name: rawDomain.name,\\n                    expiryTime: rawDomain.expiryTime,\\n                    exchange: address(0),\\n                    listingId: 0\\n                });\\n            } else {\\n                // Case 2: Domain has owner\\n                // Case 2.1: Caller is owner; skip\\n                if (domain.owner == msg.sender) {\\n                    // No updates to userDomains\\n\\n                    // Update domain details; Only expiry time can change\\n                    // Owner and domain name cannot change\\n                    // Exchange and listingId are kept as is\\n                    domain.expiryTime = rawDomain.expiryTime;\\n                }\\n                // Case 2.2: Caller is NOT owner\\n                if (domain.owner != msg.sender) {\\n                    // Remove ownership from old owner\\n                    userDomains[domain.owner].removeStorage(domainId);\\n\\n                    // Remove listing on exchange if it exists\\n                    if (domain.exchange != address(0)) {\\n                        IDomainExchange(domain.exchange).registryRemoveListing(domain.listingId);\\n                    }\\n\\n                    // Add domain to new owner\\n                    userDomains[msg.sender].push(domainId);\\n\\n                    // Set domain details except for domain name as it cannot change\\n                    domain.owner = msg.sender;\\n                    domain.expiryTime = rawDomain.expiryTime;\\n                    domain.exchange = address(0);\\n                    domain.listingId = 0;\\n                }\\n            }\\n\\n            emit DomainVerified(domainId, msg.sender, rawDomain.name, rawDomain.expiryTime);\\n        }\\n    }\\n\\n    // Todo: Add function for relinquishing ownership of domain\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is\\n     * listed on the calling exchange. This sets the exchange and listingId of the domain.\\n     * \\n     * @param _domainId     Domain to set listed status for\\n     * @param _listingId    Listing Id of domain on calling exchange\\n     */\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId)\\n        external\\n        override\\n        onlyInitialized\\n        onlyExchange\\n    {\\n        Domain storage domain = domains[_domainId];\\n\\n        require(domain.owner != address(0), \\\"Domain must be verified\\\");\\n        require(domain.exchange == address(0), \\\"Domain already listed on another exchange\\\");\\n\\n        domain.exchange = msg.sender;\\n        domain.listingId = _listingId;\\n\\n        emit DomainListed(_domainId, msg.sender, _listingId);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one\\n     * that the domain is listed on. This removes the exchange and listingId from the domain.\\n     * \\n     * @param _domainId            Domain ID to update listing status for\\n     */\\n    function removeDomainListing(bytes32 _domainId) external override onlyInitialized onlyExchange {\\n        Domain storage domain = domains[_domainId];\\n        require(domain.exchange == msg.sender, \\\"Domain not listed on calling exchange\\\");\\n\\n        _removeDomainListing(domain);\\n\\n        emit DomainListingRemoved(_domainId, msg.sender);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain\\n     * is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status\\n     * from the domain.\\n     * \\n     * @param _domainId            Domain ID to update listing status for\\n     * @param _newOwner            New owner of the domain\\n     */\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) \\n        external \\n        override \\n        onlyInitialized \\n        onlyExchange \\n    {\\n        Domain storage domain = domains[_domainId];\\n        require(domain.exchange == msg.sender, \\\"Domain not listed on calling exchange\\\");\\n\\n        _removeDomainListing(domain);\\n\\n        // Update ownership\\n        address oldOwner = domain.owner;\\n        domain.owner = _newOwner;\\n        userDomains[oldOwner].removeStorage(_domainId);\\n        userDomains[_newOwner].push(_domainId);\\n\\n        emit DomainTransferred(_domainId, oldOwner, _newOwner);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts.\\n     * This can only be called once.\\n     *\\n     * @param _verifyDomainProcessor    Address of the VerifyDomainProcessor contract\\n     */\\n    function initialize(\\n        IVerifyDomainProcessor _verifyDomainProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        verifyDomainProcessor = _verifyDomainProcessor;\\n\\n        isInitialized = true;\\n\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized.\\n     * Exchange must not already exist in the registry.\\n     * \\n     * @param _exchange     Address of the exchange contract\\n     */\\n    function addExchange(address _exchange) external onlyOwner onlyInitialized {\\n        require(!isExchange[_exchange], \\\"Duplicate exchange\\\");\\n\\n        isExchange[_exchange] = true;\\n        exchanges.push(_exchange);\\n\\n        emit ExchangeAdded(_exchange);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry.\\n     * \\n     * @param _exchange     Address of the exchange contract\\n     */\\n    function removeExchange(address _exchange) external onlyOwner onlyInitialized {\\n        require(isExchange[_exchange], \\\"Exchange does not exist\\\");\\n\\n        isExchange[_exchange] = false;\\n        exchanges.removeStorage(_exchange);\\n\\n        emit ExchangeRemoved(_exchange);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the verify domain processor\\n     *\\n     * @param _verifyDomainProcessor    Address of the new VerifyDomainProcessor contract\\n     */\\n    function updateVerifyDomainProcessor(IVerifyDomainProcessor _verifyDomainProcessor) external onlyOwner {\\n        require(address(_verifyDomainProcessor) != address(0), \\\"Invalid address\\\");\\n\\n        verifyDomainProcessor = _verifyDomainProcessor;\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function getDomainId(string memory _domainName) public pure override returns (bytes32) {\\n        return keccak256(abi.encodePacked(_domainName));\\n    }\\n\\n    function getDomainOwner(bytes32 _domainId) external view override returns (address) {        \\n        return domains[_domainId].owner;\\n    }\\n\\n    function getUserDomains(address _user) external view returns (DomainWithId[] memory domainInfo) {\\n        bytes32[] memory domainIds = userDomains[_user];\\n        \\n        domainInfo = new DomainWithId[](domainIds.length);\\n        for (uint256 i = 0; i < domainIds.length; i++) {\\n            bytes32 domainId = domainIds[i];\\n            domainInfo[i] = DomainWithId({\\n                domainId: domainId,\\n                domain: domains[domainId]\\n            });\\n        }\\n    }\\n\\n    function getDomain(bytes32 _domainId) external view override returns (DomainWithId memory domainInfo) {\\n        return DomainWithId({\\n            domainId: _domainId,\\n            domain: domains[_domainId]\\n        });\\n    }\\n\\n    function getDomains(bytes32[] memory _domains) external view returns (DomainWithId[] memory domainInfo) {\\n        domainInfo = new DomainWithId[](_domains.length);\\n        for (uint256 i = 0; i < _domains.length; i++) {\\n            bytes32 domainId = _domains[i];\\n            domainInfo[i] = DomainWithId({\\n                domainId: domainId,\\n                domain: domains[domainId]\\n            });\\n        }\\n    }\\n\\n    function getExchanges() external view returns (address[] memory) {\\n        return exchanges;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _removeDomainListing(Domain storage _domain) internal {\\n        delete _domain.exchange;\\n        delete _domain.listingId;\\n    }\\n}\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n\\n    uint256 constant IC0x = 12140764414809439171579073747096628005611143888739021778142114438725209856911;\\n    uint256 constant IC0y = 18380664008722994554410246598515713804368408809139402801410617352473294938101;\\n\\n    uint256 constant IC1x = 16287270730688090110441256630912972881096977102957363147237538512209615075930;\\n    uint256 constant IC1y = 2449016754858987854593324887044687327196932594716827949199487058237499016691;\\n\\n    uint256 constant IC2x = 12290000746054008145532172012836689239677528072347882111559847558608807494030;\\n    uint256 constant IC2y = 14308358318183304542626969831757608989020288980497492892592599563043422576641;\\n\\n    uint256 constant IC3x = 17109205409157997740951972967816433882944148152574672952222919864324056429618;\\n    uint256 constant IC3y = 9961558237149244928391169779496769511791942854258198694890294984589871243856;\\n\\n    uint256 constant IC4x = 12885622983359679040345794541760667584938087103345731492334670493606961282700;\\n    uint256 constant IC4y = 18397333374263242470546340955330845415543534978510188436756186606821028634481;\\n\\n    uint256 constant IC5x = 8251971901226176941314060074725743834337466028961811325874949093602610929902;\\n    uint256 constant IC5y = 16257777857146800480589260332284762827173712873310789777823130626151679328406;\\n\\n    uint256 constant IC6x = 7755902890727928430969631143079950108469618570373249456222008624592630122217;\\n    uint256 constant IC6y = 10757977250154075642155615103618917172698106635999924885067022788329148453826;\\n\\n    uint256 constant IC7x = 9229565613389027758694089669374665969186485724568040364429447974425840672975;\\n    uint256 constant IC7y = 8522685561456236376873601057738356653321521861001626828091657280469196217906;\\n\\n    uint256 constant IC8x = 21276732369738095771663301979590133243106197446584260397744418605720907267683;\\n    uint256 constant IC8y = 7293000518568388677473960035761983204180608786522452828815102825735261508468;\\n\\n    uint256 constant IC9x = 9116173570523657214485637140779662063231707742648921986441734490858993965489;\\n    uint256 constant IC9y = 20125316561678768525824986864877835211109013619593406972323904438419789772526;\\n\\n    uint256 constant IC10x = 14220475398513461434883329515056365002533036699993990374428625877488131891870;\\n    uint256 constant IC10y = 12173247053801606963174627761051371553685163525039542034195810636700588930659;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/VerifyDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ClaimVerifier } from \\\"./external/ClaimVerifier.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { ProxyBaseProcessor } from \\\"./external/processors/ProxyBaseProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\nimport { TicketmasterDataParsing } from \\\"./external/TicketmasterDataParsing.sol\\\";\\n\\nimport { IVerifyDomainProcessor } from \\\"./interfaces/IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\n\\ncontract VerifyDomainProcessor is IVerifyDomainProcessor, ProxyBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\n\\n    /* ============ State Variables ============ */\\n    address public immutable registry;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _registry,\\n        INullifierRegistry _nullifierRegistry,\\n        string[] memory _providerHashes\\n    )   \\n        ProxyBaseProcessor(_nullifierRegistry, _providerHashes)\\n    {\\n        registry = _registry;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\n     *\\n     * @param _proofs        Proofs to be verified\\n     * @return domains       Array of Domain structs\\n     */\\n    function verifyProofs(\\n        Proof[] memory _proofs\\n    ) \\n        external \\n        override\\n        returns (DomainRaw[] memory domains)\\n    {\\n        require(msg.sender == registry, \\\"Only registry can call\\\");\\n\\n        domains = new DomainRaw[](_proofs.length);\\n\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\n            Proof memory proof = _proofs[i];\\n\\n            verifyProofSignatures(proof);\\n\\n            (\\n                string memory domainName,\\n                string memory expiryTimeStr,\\n                string memory providerHash\\n            ) = _extractValues(proof);\\n\\n            // Check provider hash\\n            require(_validateProviderHash(providerHash), \\\"No valid providerHash\\\");\\n\\n            _validateAndAddNullifier(proof.signedClaim.signatures);\\n\\n            domains[i] = DomainRaw({\\n                name: domainName,\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\"YYYY-MM-DDTHH:MM:SS\\\"\\n                // and returns UTC timestamps.\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(expiryTimeStr)\\n            });\\n        }\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * Extracts all values from the proof context.\\n     *\\n     * @param _proof The proof containing the context to extract values from.\\n     */\\n    function _extractValues(Proof memory _proof) internal pure returns (\\n        string memory domainName,\\n        string memory expiryTime,\\n        string memory providerHash\\n    ) {\\n        string[] memory values = ClaimVerifier.extractAllFromContext(\\n            _proof.claimInfo.context, \\n            MAX_EXTRACT_VALUES, \\n            true\\n        );\\n\\n        return (\\n            values[0], // domainName\\n            values[1], // expiryTime\\n            values[2]  // providerHash\\n        );\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/.chainId",
    "content": "8453"
  },
  {
    "path": "contracts-domain/deployments/base_staging/ClaimVerifier.json",
    "content": "{\n  \"address\": \"0x5B8F92B8afA5Db7078703294D646908F0fc00D87\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"maxValues\",\n          \"type\": \"uint8\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"extractProviderHash\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"extractAllFromContext\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"prefix\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"extractFieldFromContext\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"target\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"findSubstringEndIndex\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x44020458ec7bb4ce9f805af25ab9ce4f6069cdb01df081c2efa6c407847d3144\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x5B8F92B8afA5Db7078703294D646908F0fc00D87\",\n    \"transactionIndex\": 77,\n    \"gasUsed\": \"925596\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x92c221abb89001ddc036e19c514ef1b529d8cad1ae1ca3a27ad45b49ebebbb17\",\n    \"transactionHash\": \"0x44020458ec7bb4ce9f805af25ab9ce4f6069cdb01df081c2efa6c407847d3144\",\n    \"logs\": [],\n    \"blockNumber\": 20165437,\n    \"cumulativeGasUsed\": \"11506813\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"maxValues\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"extractProviderHash\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"extractAllFromContext\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"prefix\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"extractFieldFromContext\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"findSubstringEndIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"extractAllFromContext(string,uint8,bool)\\\":{\\\"params\\\":{\\\"data\\\":\\\"Context string from which target value needs to be extracted\\\",\\\"extractProviderHash\\\":\\\"Extracts and returns providerHash if true\\\",\\\"maxValues\\\":\\\"Maximum number of values to be extracted from extractedParameters\\\"}},\\\"extractFieldFromContext(string,string)\\\":{\\\"params\\\":{\\\"data\\\":\\\"Context string from which target value needs to be extracted\\\",\\\"prefix\\\":\\\"Prefix of the target value that needs to be extracted            \\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"extractAllFromContext(string,uint8,bool)\\\":{\\\"notice\\\":\\\"Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with  two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with  key-value pairs. This function returns extracted individual values from extractedParameters along  with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values to be extracted from extractedParameters. In most cases, one would need to extract all values from extractedParameters and providerHash, hence use this function over calling extractFieldFromContext  multiple times. \\\"},\\\"extractFieldFromContext(string,string)\\\":{\\\"notice\\\":\\\"Extracts given target field value from context in claims. Extracts only ONE value. Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"' Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\"},\\\"findSubstringEndIndex(string,string)\\\":{\\\"notice\\\":\\\"Find the end index of target string in the data string. Returns the end index + 1 if the target string in the data string if found. Returns type(uint256).max if: - Target is longer than data - Target is not found Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/ClaimVerifier.sol\\\":\\\"ClaimVerifier\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ClaimVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary ClaimVerifier {\\\\n\\\\n    /**\\\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\\\n     * the target string in the data string if found. Returns type(uint256).max if:\\\\n     * - Target is longer than data\\\\n     * - Target is not found\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     */\\\\n    function findSubstringEndIndex(\\\\n        string memory data,\\\\n        string memory target\\\\n    ) public pure returns (uint256) {\\\\n        bytes memory dataBytes = bytes(data);\\\\n        bytes memory targetBytes = bytes(target);\\\\n\\\\n        if (dataBytes.length < targetBytes.length) {\\\\n            return type(uint256).max;\\\\n        }\\\\n\\\\n        // Find start of target\\\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\\\n            bool isMatch = true;\\\\n\\\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\\\n                if (dataBytes[i + j] != targetBytes[j]) {\\\\n                    isMatch = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n\\\\n            if (isMatch) {\\\\n                return i + targetBytes.length; // Return end index + 1\\\\n            }\\\\n        }\\\\n\\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    /**\\\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\\\n     * Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"'\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *\\\\n     * @param data      Context string from which target value needs to be extracted\\\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\\\n     */\\\\n    function extractFieldFromContext(\\\\n        string memory data,\\\\n        string memory prefix\\\\n    ) public pure returns (string memory) {\\\\n        // Find end index of prefix; which is the start index of the value\\\\n        uint256 start = findSubstringEndIndex(data, prefix);\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        if (start == dataBytes.length) {\\\\n            return \\\\\\\"\\\\\\\"; // Prefix not found. Malformed or missing message\\\\n        }\\\\n        \\\\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\\\n        uint256 end = start;\\\\n        while (\\\\n            end < dataBytes.length &&\\\\n            !(dataBytes[end] == '\\\\\\\"' && dataBytes[end - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")\\\\n        ) {\\\\n            end++;\\\\n        }\\\\n        if (end <= start) {\\\\n            return \\\\\\\"\\\\\\\"; // Malformed or missing message\\\\n        }\\\\n        bytes memory contextMessage = new bytes(end - start);\\\\n        for (uint i = start; i < end; i++) {\\\\n            contextMessage[i - start] = dataBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\\\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\\\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\\\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\\\n     * multiple times.\\\\n     * \\\\n     * @param data                  Context string from which target value needs to be extracted\\\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\\\n     */\\\\n    function extractAllFromContext(\\\\n        string memory data,\\\\n        uint8 maxValues,\\\\n        bool extractProviderHash\\\\n    ) public pure returns (string[] memory) {\\\\n        \\\\n        require(maxValues > 0, \\\\\\\"Max values must be greater than 0\\\\\\\");\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        uint index = 0;\\\\n\\\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"');\\\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\\\\\"Extraction failed. Malformed extractedParameters\\\\\\\");\\\\n        }\\\\n        index += extractedParametersBytes.length;\\\\n\\\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"'\\\\n        uint valuesFound = 0;\\\\n    \\\\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\\\n\\\\n        while (\\\\n            index < dataBytes.length\\\\n        ) {\\\\n            // Keep incrementing until '\\\\\\\"', escaped quotes are not considered\\\\n            if (!(dataBytes[index] == '\\\\\\\"' && dataBytes[index - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")) {\\\\n                index++;\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isValue) {\\\\n                // \\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\" (3 chars)\\\\n                require(dataBytes[index + 1] == \\\\\\\":\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"', \\\\\\\"Extraction failed. Malformed data 1\\\\\\\");\\\\n                index += 3;     // move it after \\\\\\\\\\\\\\\"\\\\n                isValue = true;\\\\n                valueIndices[2 * valuesFound] = index;      // start index\\\\n            } else {\\\\n                // \\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\" (3 chars) or \\\\\\\\\\\\\\\"}, (3 chars)\\\\n                // \\\\\\\\\\\\\\\"}} is not supported, there should always be a providerHash\\\\n                require(\\\\n                    dataBytes[index + 1] == \\\\\\\",\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"' ||  \\\\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\\\\\",\\\\\\\",\\\\n                    \\\\\\\"Extraction failed. Malformed data 2\\\\\\\"\\\\n                );\\\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\\\n                valuesFound++;\\\\n\\\\n                if (dataBytes[index + 1] == \\\\\\\",\\\\\\\") {\\\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\\\n                    require(valuesFound != maxValues, \\\\\\\"Extraction failed. Exceeded max values\\\\\\\");\\\\n                    index += 3;\\\\n                    isValue = false;\\\\n                } else {    // index + 1 = \\\\\\\"}\\\\\\\"\\\\n                    index += 3;\\\\n                    break;  // end of extractedParameters\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        if (extractProviderHash) {\\\\n            bytes memory providerHashParamBytes = bytes(\\\\\\\"\\\\\\\\\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"\\\\\\\");\\\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\\\\\"Extraction failed. Malformed providerHash\\\\\\\");\\\\n            }\\\\n            index += providerHashParamBytes.length;\\\\n            \\\\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\\\n            valueIndices[2 * valuesFound] = index;\\\\n            // Keep incrementing until '\\\\\\\"'\\\\n            while (\\\\n                index < dataBytes.length && dataBytes[index] != '\\\\\\\"'\\\\n            ) {\\\\n                index++;\\\\n            }\\\\n            valueIndices[2 * valuesFound + 1] = index;\\\\n            valuesFound++;\\\\n        }   \\\\n        \\\\n        string[] memory values = new string[](valuesFound);\\\\n        \\\\n        for (uint i = 0; i < valuesFound; i++) {\\\\n            uint startIndex = valueIndices[2 * i];\\\\n            uint endIndex = valueIndices[2 * i + 1];\\\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\\\n            for (uint j = startIndex; j < endIndex; j++) {\\\\n                contextValue[j - startIndex] = dataBytes[j];\\\\n            }\\\\n            values[i] = string(contextValue);\\\\n        }\\\\n\\\\n        return values;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6a8d456c3b2c5ab5a475279a2f0f103faff3cb2d6abb2ce2029cd4265b904e\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523461001e57604051610fc4610024823930815050610fc490f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80633755667e146100425780634be6d4f81461003d57634da485c6036100f65761030c565b6102e9565b6101ca565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761007f57604052565b610047565b9061009861009160405190565b928361005d565b565b67ffffffffffffffff811161007f57602090601f01601f19160190565b0190565b90826000939282370152565b909291926100dc6100d78261009a565b610084565b938185526020850190828401116100f657610098926100bb565b600080fd5b9080601f830112156100f657816020610116933591016100c7565b90565b9190916040818403126100f657803567ffffffffffffffff81116100f657836101439183016100fb565b92602082013567ffffffffffffffff81116100f65761011692016100fb565b60005b8381106101755750506000910152565b8181015183820152602001610165565b6101a66101af6020936100b79361019a815190565b80835293849260200190565b95869101610162565b601f01601f191690565b602080825261011692910190610185565b6101ed6101e16101db366004610119565b9061054f565b604051918291826101b9565b0390f35b60ff81165b036100f657565b90503590610098826101f1565b8015156101f6565b905035906100988261020a565b90916060828403126100f657813567ffffffffffffffff81116100f65761024b846101169285016100fb565b9361025981602086016101fd565b93604001610212565b9061011691610185565b90610282610278835190565b8083529160200190565b90816102946020830284019460200190565b926000915b8383106102a857505050505090565b909192939460206102cb6102c483856001950387528951610262565b9760200190565b9301930191939290610299565b60208082526101169291019061026c565b6101ed6103006102fa36600461021f565b91610a12565b604051918291826102d8565b6101ed61032361031d366004610119565b906103bf565b6040519182918290815260200190565b6101166101166101169290565b634e487b7160e01b600052601160045260246000fd5b60001981146103655760010190565b610340565b9190610375565b9290565b820391821161036557565b9190820180921161036557565b634e487b7160e01b600052603260045260246000fd5b906103ac825190565b8110156103ba570160200190565b61038d565b6103d26103d6916103ce600090565b5090565b9190565b81516103e66103d2610116845190565b106104fb576000916103f783610333565b61040d610116610405845190565b85519061036a565b81116104f4576001808061042087610333565b905b61044b575b505061043b5761043690610356565b6103f7565b9151610116935090505b90610380565b61045c610116879894969395985190565b8110806104ed575b156104e25761048d61047f610479838a610380565b846103a3565b516001600160f81b03191690565b6104bb6104ad6104a061047f858b6103a3565b6001600160f81b03191690565b916001600160f81b03191690565b036104d4576104c990610356565b839194929693610422565b509250809491503880610427565b819492969350610427565b5084610464565b5050501990565b505060001990565b906105106100d78361009a565b918252565b6101166000610503565b610116610515565b369037565b9061009861054261053c84610503565b9361009a565b601f190160208401610527565b919061037161056791610560606090565b50846103bf565b90610573610116835190565b831461067f57825b610586610116845190565b811080610619575b156105a15761059c90610356565b61057b565b918383111561060d576105bc6105b7858561036a565b61052c565b91845b845b811015610601576105fa816105dc61047f6105c194876103a3565b6105f46105e98a8461036a565b9160001a91886103a3565b53610356565b90506105bf565b50935050610116915090565b5091505061011661051f565b5061062761047f82856103a3565b610634601160f91b6104ad565b1480610646575b1561058e565b61058e565b5061064161066961047f61066361065d6001610333565b8561036a565b866103a3565b610676601760fa1b6104ad565b1415905061063b565b91505061011661051f565b6106976101166101169290565b60ff1690565b156106a457565b60405162461bcd60e51b815260206004820152602160248201527f4d61782076616c756573206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b6106fd6019610503565b7f7b22657874726163746564506172616d6574657273223a7b2200000000000000602082015290565b6101166106f3565b1561073557565b60405162461bcd60e51b815260206004820152603060248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642065787460448201526f726163746564506172616d657465727360801b6064820152608490fd5b6107a29060ff165b9160ff1690565b029060ff821691820361036557565b6107bd9060ff1661079b565b019060ff821161036557565b6101166101166101169260ff1690565b67ffffffffffffffff811161007f5760208091020190565b906105106100d7836107d9565b9061009861054261080e846107f1565b936107d9565b1561081b57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526230901960e91b6064820152608490fd5b8181029291811591840414171561036557565b90610888825190565b8110156103ba576020809102010190565b156108a057565b60405162461bcd60e51b815260206004820152602660248201527f45787472616374696f6e206661696c65642e204578636565646564206d61782060448201526576616c75657360d01b6064820152608490fd5b156108fb57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526261203160e81b6064820152608490fd5b6109566010610503565b6f11383937bb34b232b92430b9b4111d1160811b602082015290565b61011661094c565b1561098157565b60405162461bcd60e51b815260206004820152602960248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642070726f6044820152680ecd2c8cae490c2e6d60bb1b6064820152608490fd5b60005b8281106109e757505050565b6060828201526020016109db565b90610098610a0561080e846107f1565b601f1901602084016109d8565b90610a2f600092610116610a258561068a565b60ff85161161069d565b93610a3983610333565b91610a42610726565b93835b610a50610116875190565b811015610a975780610a8d610a7461047f610a6e610a92958a610380565b8c6103a3565b610a876104ad6104a061047f868d6103a3565b1461072e565b610356565b610a45565b5092610445610aa99295979693975190565b918093610ab582610333565b968315610f7a57610af2610aed610ae86002610ae3610add610ad7600161068a565b886107b1565b9161068a565b610793565b6107c9565b6107fe565b955b610aff610116895190565b861015610f6c57610b1361047f878a6103a3565b610b20601160f91b6104ad565b1480610f39575b155b610f2957610bd757610b7c600195610b5561047f610b4f610b498a610333565b84610380565b8b6103a3565b610b62601d60f91b6104ad565b1480610ba5575b610b72906108f4565b6104456003610333565b94610ba086610b9d610b978c610b926002610333565b61086c565b8a61087f565b52565b610af4565b50610b72610bc261047f610a6e610bbc6002610333565b85610380565b610bcf601160f91b6104ad565b149050610b69565b93610c42600198610bf661047f610b4f610bf08d610333565b86610380565b610c03600b60fa1b6104ad565b1480610f02575b8015610ea9575b610c1a90610814565b610a8d83610b9d610c3c8d610445610c3687610b926002610333565b91610333565b8b61087f565b610c5b61047f610c55610bbc849c610333565b8a6103a3565b610c68600b60fa1b6104ad565b03610c8f5790610b72610c8892610c816103d2866107c9565b1415610899565b9382610af4565b50610ca7915061044560039897969598949394610333565b905b610d9d575b50610cb8846109f5565b94610cc282610333565b855b811015610d95576002610cf182610b92610ceb610ce7610b9784610b9288610333565b5190565b93610333565b610d0c610ce7610d0660019361044585610333565b8861087f565b91610d1a6105b7828561036a565b9281835b610d57575b50505050610cc491610d35610d509290565b610d3f828b61087f565b52610d4a818a61087f565b50610356565b9050610cc2565b8982821015610d8f5781610d7261047f8794610d89946103a3565b6105f4610d7f878461036a565b918c1a91896103a3565b90610d1e565b50610d23565b509350505050565b91949093610da9610972565b94610db381610333565b610dbe610116885190565b811015610e035780610a8d88610df86104ad6104a061047f86610df261047f8f8f610dfe9c610dec91610380565b906103a3565b956103a3565b1461097a565b610db3565b509392610445610e1592969793975190565b9384610e33600296610b9d610e2d85610b928b610333565b8661087f565b610e3e610116855190565b811080610e87575b15610e5957610e5490610356565b610e33565b610a8d90610b9d610e2d610e7685610b92610e8098999a9b610333565b6104456001610333565b9238610cae565b50610e9561047f82866103a3565b610ea2601160f91b6104ad565b1415610e46565b50610ebc61047f610b4f610bf08d610333565b610ec9607d60f81b6104ad565b148015610c115750610c1a610eed61047f610a6e610ee76002610333565b87610380565b610efa600b60fa1b6104ad565b149050610c11565b50610f1661047f610b4f610bf06002610333565b610f23601160f91b6104ad565b14610c0a565b94610f3390610356565b94610af4565b50610b29610f5661047f610b4f610f506001610333565b8a61036a565b610f63601760fa1b6104ad565b14159050610b27565b509695949391929050610ca9565b610af2610aed610ae884610ae3600261068a56fea2646970667358221220df8afdb50247b87e32995ce364cdd9d06fd8e2da0fc4e9ccb71b755e2d49a76864736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80633755667e146100425780634be6d4f81461003d57634da485c6036100f65761030c565b6102e9565b6101ca565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761007f57604052565b610047565b9061009861009160405190565b928361005d565b565b67ffffffffffffffff811161007f57602090601f01601f19160190565b0190565b90826000939282370152565b909291926100dc6100d78261009a565b610084565b938185526020850190828401116100f657610098926100bb565b600080fd5b9080601f830112156100f657816020610116933591016100c7565b90565b9190916040818403126100f657803567ffffffffffffffff81116100f657836101439183016100fb565b92602082013567ffffffffffffffff81116100f65761011692016100fb565b60005b8381106101755750506000910152565b8181015183820152602001610165565b6101a66101af6020936100b79361019a815190565b80835293849260200190565b95869101610162565b601f01601f191690565b602080825261011692910190610185565b6101ed6101e16101db366004610119565b9061054f565b604051918291826101b9565b0390f35b60ff81165b036100f657565b90503590610098826101f1565b8015156101f6565b905035906100988261020a565b90916060828403126100f657813567ffffffffffffffff81116100f65761024b846101169285016100fb565b9361025981602086016101fd565b93604001610212565b9061011691610185565b90610282610278835190565b8083529160200190565b90816102946020830284019460200190565b926000915b8383106102a857505050505090565b909192939460206102cb6102c483856001950387528951610262565b9760200190565b9301930191939290610299565b60208082526101169291019061026c565b6101ed6103006102fa36600461021f565b91610a12565b604051918291826102d8565b6101ed61032361031d366004610119565b906103bf565b6040519182918290815260200190565b6101166101166101169290565b634e487b7160e01b600052601160045260246000fd5b60001981146103655760010190565b610340565b9190610375565b9290565b820391821161036557565b9190820180921161036557565b634e487b7160e01b600052603260045260246000fd5b906103ac825190565b8110156103ba570160200190565b61038d565b6103d26103d6916103ce600090565b5090565b9190565b81516103e66103d2610116845190565b106104fb576000916103f783610333565b61040d610116610405845190565b85519061036a565b81116104f4576001808061042087610333565b905b61044b575b505061043b5761043690610356565b6103f7565b9151610116935090505b90610380565b61045c610116879894969395985190565b8110806104ed575b156104e25761048d61047f610479838a610380565b846103a3565b516001600160f81b03191690565b6104bb6104ad6104a061047f858b6103a3565b6001600160f81b03191690565b916001600160f81b03191690565b036104d4576104c990610356565b839194929693610422565b509250809491503880610427565b819492969350610427565b5084610464565b5050501990565b505060001990565b906105106100d78361009a565b918252565b6101166000610503565b610116610515565b369037565b9061009861054261053c84610503565b9361009a565b601f190160208401610527565b919061037161056791610560606090565b50846103bf565b90610573610116835190565b831461067f57825b610586610116845190565b811080610619575b156105a15761059c90610356565b61057b565b918383111561060d576105bc6105b7858561036a565b61052c565b91845b845b811015610601576105fa816105dc61047f6105c194876103a3565b6105f46105e98a8461036a565b9160001a91886103a3565b53610356565b90506105bf565b50935050610116915090565b5091505061011661051f565b5061062761047f82856103a3565b610634601160f91b6104ad565b1480610646575b1561058e565b61058e565b5061064161066961047f61066361065d6001610333565b8561036a565b866103a3565b610676601760fa1b6104ad565b1415905061063b565b91505061011661051f565b6106976101166101169290565b60ff1690565b156106a457565b60405162461bcd60e51b815260206004820152602160248201527f4d61782076616c756573206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b6106fd6019610503565b7f7b22657874726163746564506172616d6574657273223a7b2200000000000000602082015290565b6101166106f3565b1561073557565b60405162461bcd60e51b815260206004820152603060248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642065787460448201526f726163746564506172616d657465727360801b6064820152608490fd5b6107a29060ff165b9160ff1690565b029060ff821691820361036557565b6107bd9060ff1661079b565b019060ff821161036557565b6101166101166101169260ff1690565b67ffffffffffffffff811161007f5760208091020190565b906105106100d7836107d9565b9061009861054261080e846107f1565b936107d9565b1561081b57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526230901960e91b6064820152608490fd5b8181029291811591840414171561036557565b90610888825190565b8110156103ba576020809102010190565b156108a057565b60405162461bcd60e51b815260206004820152602660248201527f45787472616374696f6e206661696c65642e204578636565646564206d61782060448201526576616c75657360d01b6064820152608490fd5b156108fb57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526261203160e81b6064820152608490fd5b6109566010610503565b6f11383937bb34b232b92430b9b4111d1160811b602082015290565b61011661094c565b1561098157565b60405162461bcd60e51b815260206004820152602960248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642070726f6044820152680ecd2c8cae490c2e6d60bb1b6064820152608490fd5b60005b8281106109e757505050565b6060828201526020016109db565b90610098610a0561080e846107f1565b601f1901602084016109d8565b90610a2f600092610116610a258561068a565b60ff85161161069d565b93610a3983610333565b91610a42610726565b93835b610a50610116875190565b811015610a975780610a8d610a7461047f610a6e610a92958a610380565b8c6103a3565b610a876104ad6104a061047f868d6103a3565b1461072e565b610356565b610a45565b5092610445610aa99295979693975190565b918093610ab582610333565b968315610f7a57610af2610aed610ae86002610ae3610add610ad7600161068a565b886107b1565b9161068a565b610793565b6107c9565b6107fe565b955b610aff610116895190565b861015610f6c57610b1361047f878a6103a3565b610b20601160f91b6104ad565b1480610f39575b155b610f2957610bd757610b7c600195610b5561047f610b4f610b498a610333565b84610380565b8b6103a3565b610b62601d60f91b6104ad565b1480610ba5575b610b72906108f4565b6104456003610333565b94610ba086610b9d610b978c610b926002610333565b61086c565b8a61087f565b52565b610af4565b50610b72610bc261047f610a6e610bbc6002610333565b85610380565b610bcf601160f91b6104ad565b149050610b69565b93610c42600198610bf661047f610b4f610bf08d610333565b86610380565b610c03600b60fa1b6104ad565b1480610f02575b8015610ea9575b610c1a90610814565b610a8d83610b9d610c3c8d610445610c3687610b926002610333565b91610333565b8b61087f565b610c5b61047f610c55610bbc849c610333565b8a6103a3565b610c68600b60fa1b6104ad565b03610c8f5790610b72610c8892610c816103d2866107c9565b1415610899565b9382610af4565b50610ca7915061044560039897969598949394610333565b905b610d9d575b50610cb8846109f5565b94610cc282610333565b855b811015610d95576002610cf182610b92610ceb610ce7610b9784610b9288610333565b5190565b93610333565b610d0c610ce7610d0660019361044585610333565b8861087f565b91610d1a6105b7828561036a565b9281835b610d57575b50505050610cc491610d35610d509290565b610d3f828b61087f565b52610d4a818a61087f565b50610356565b9050610cc2565b8982821015610d8f5781610d7261047f8794610d89946103a3565b6105f4610d7f878461036a565b918c1a91896103a3565b90610d1e565b50610d23565b509350505050565b91949093610da9610972565b94610db381610333565b610dbe610116885190565b811015610e035780610a8d88610df86104ad6104a061047f86610df261047f8f8f610dfe9c610dec91610380565b906103a3565b956103a3565b1461097a565b610db3565b509392610445610e1592969793975190565b9384610e33600296610b9d610e2d85610b928b610333565b8661087f565b610e3e610116855190565b811080610e87575b15610e5957610e5490610356565b610e33565b610a8d90610b9d610e2d610e7685610b92610e8098999a9b610333565b6104456001610333565b9238610cae565b50610e9561047f82866103a3565b610ea2601160f91b6104ad565b1415610e46565b50610ebc61047f610b4f610bf08d610333565b610ec9607d60f81b6104ad565b148015610c115750610c1a610eed61047f610a6e610ee76002610333565b87610380565b610efa600b60fa1b6104ad565b149050610c11565b50610f1661047f610b4f610bf06002610333565b610f23601160f91b6104ad565b14610c0a565b94610f3390610356565b94610af4565b50610b29610f5661047f610b4f610f506001610333565b8a61036a565b610f63601760fa1b6104ad565b14159050610b27565b509695949391929050610ca9565b610af2610aed610ae884610ae3600261068a56fea2646970667358221220df8afdb50247b87e32995ce364cdd9d06fd8e2da0fc4e9ccb71b755e2d49a76864736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"extractAllFromContext(string,uint8,bool)\": {\n        \"params\": {\n          \"data\": \"Context string from which target value needs to be extracted\",\n          \"extractProviderHash\": \"Extracts and returns providerHash if true\",\n          \"maxValues\": \"Maximum number of values to be extracted from extractedParameters\"\n        }\n      },\n      \"extractFieldFromContext(string,string)\": {\n        \"params\": {\n          \"data\": \"Context string from which target value needs to be extracted\",\n          \"prefix\": \"Prefix of the target value that needs to be extracted            \"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"extractAllFromContext(string,uint8,bool)\": {\n        \"notice\": \"Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with  two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with  key-value pairs. This function returns extracted individual values from extractedParameters along  with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values to be extracted from extractedParameters. In most cases, one would need to extract all values from extractedParameters and providerHash, hence use this function over calling extractFieldFromContext  multiple times. \"\n      },\n      \"extractFieldFromContext(string,string)\": {\n        \"notice\": \"Extracts given target field value from context in claims. Extracts only ONE value. Pass prefix formatted with quotes, for example '\\\"providerHash\\\\\\\":\\\\\\\"' Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\"\n      },\n      \"findSubstringEndIndex(string,string)\": {\n        \"notice\": \"Find the end index of target string in the data string. Returns the end index + 1 if the target string in the data string if found. Returns type(uint256).max if: - Target is longer than data - Target is not found Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [],\n    \"types\": null\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/DomainExchange.json",
    "content": "{\n  \"address\": \"0xe4148B108Fe4D7421853FE8cFfd35bDc2c0d95Ec\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidSettlementPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidRefundPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_allowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"allowedAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressAddedToAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"allowedAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressRemovedFromAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"AllowlistDisabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"AllowlistEnabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"price\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newPrice\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidPriceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newBidRefundPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidRefundPeriodUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newBidSettlementPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidSettlementPeriodUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"FeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newFee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"FeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"instantAccept\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"InstantAcceptUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingDeleted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ListingDeletedByRegistry\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newAskPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"newMailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdapterUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RefundInitiated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"priceNetFees\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fees\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SaleFinalized\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"newTransferDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"TransferDomainProcessorUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_allowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"name\": \"addAddressesToAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"allowedAddresses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidRefundPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidSettlementPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"bids\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"encryptedBuyerId\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"buyerIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"createdAt\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTimestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"price\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"refundInitiated\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"buyerReleaseFunds\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_buyerIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_encryptedBuyerId\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"createBid\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_saleEthRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_encryptionKey\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_dkimKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"createListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deleteListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"disableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"disableInstantAccept\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableInstantAccept\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"fee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"feeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"finalizeSale\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAllowedSellers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_listingIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getListingBids\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"buyer\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"encryptedBuyerId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"buyerIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTimestamp\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"price\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"refundInitiated\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Bid\",\n              \"name\": \"bid\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"buyerInstantAcceptEnabled\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.BidDetailsWithId[][]\",\n          \"name\": \"bidInfo\",\n          \"type\": \"tuple[][]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_listingIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getListings\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"seller\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address payable\",\n                  \"name\": \"saleEthRecipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"dkimKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"encryptionKey\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"askPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"minBidPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"isActive\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"bids\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Listing\",\n              \"name\": \"listing\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n          \"name\": \"listingInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserBids\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"buyer\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"encryptedBuyerId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"buyerIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTimestamp\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"price\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"refundInitiated\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Bid\",\n              \"name\": \"bid\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"buyerInstantAcceptEnabled\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.BidDetailsWithId[]\",\n          \"name\": \"bidInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserListings\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"seller\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address payable\",\n                  \"name\": \"saleEthRecipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"dkimKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"encryptionKey\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"askPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"minBidPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"isActive\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"bids\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Listing\",\n              \"name\": \"listing\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n          \"name\": \"listingInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newPrice\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseBidPrice\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"_transferDomainProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IVerifiedDomainRegistry\",\n          \"name\": \"_verifiedDomainRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"initiateRefund\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"instantAcceptEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isAllowed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"listingCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"listings\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"encryptionKey\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"createdAt\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"isActive\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pauseMarketplace\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"registryRemoveListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_disallowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"name\": \"removeAddressesFromAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"transferDomainProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unpauseMarketplace\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newBidRefundPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateBidRefundPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newBidSettlementPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateBidSettlementPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newFee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_newFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newAskPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateMailServerKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"_transferDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateTransferDomainProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userBids\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userListings\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifiedDomainRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IVerifiedDomainRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"withdrawBid\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xbcb8774a29f9ee6705a04fa43b73c2a8b68521dea7d15e2ae837a93b5d012d1c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xe4148B108Fe4D7421853FE8cFfd35bDc2c0d95Ec\",\n    \"transactionIndex\": 75,\n    \"gasUsed\": \"4978191\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000020000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000001000000000000000000000000000004000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xfaddcc67c766e4f37de27d1b9a20f68dbcb25dd87dd211b39bc570830592cc8e\",\n    \"transactionHash\": \"0xbcb8774a29f9ee6705a04fa43b73c2a8b68521dea7d15e2ae837a93b5d012d1c\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 75,\n        \"blockNumber\": 20165420,\n        \"transactionHash\": \"0xbcb8774a29f9ee6705a04fa43b73c2a8b68521dea7d15e2ae837a93b5d012d1c\",\n        \"address\": \"0xe4148B108Fe4D7421853FE8cFfd35bDc2c0d95Ec\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 256,\n        \"blockHash\": \"0xfaddcc67c766e4f37de27d1b9a20f68dbcb25dd87dd211b39bc570830592cc8e\"\n      },\n      {\n        \"transactionIndex\": 75,\n        \"blockNumber\": 20165420,\n        \"transactionHash\": \"0xbcb8774a29f9ee6705a04fa43b73c2a8b68521dea7d15e2ae837a93b5d012d1c\",\n        \"address\": \"0xe4148B108Fe4D7421853FE8cFfd35bDc2c0d95Ec\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 257,\n        \"blockHash\": \"0xfaddcc67c766e4f37de27d1b9a20f68dbcb25dd87dd211b39bc570830592cc8e\"\n      }\n    ],\n    \"blockNumber\": 20165420,\n    \"cumulativeGasUsed\": \"17749613\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"25000000000000000\",\n    \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"86400\",\n    \"86400\",\n    []\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_allowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"allowedAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressAddedToAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"allowedAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressRemovedFromAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"AllowlistDisabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"AllowlistEnabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidCreated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidPriceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newBidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidRefundPeriodUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newBidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidSettlementPeriodUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"FeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newFee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"FeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"instantAccept\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"InstantAcceptUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingCreated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingDeleted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ListingDeletedByRegistry\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAskPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"newMailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdapterUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Paused\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"RefundInitiated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"priceNetFees\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fees\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SaleFinalized\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"newTransferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"TransferDomainProcessorUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Unpaused\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_allowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"addAddressesToAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"allowedAddresses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidRefundPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidSettlementPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"bids\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"buyerReleaseFunds\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"createBid\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"createListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deleteListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"disableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"disableInstantAccept\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableInstantAccept\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"fee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"feeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"internalType\\\":\\\"struct ITransferDomainProcessor.TransferProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"finalizeSale\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAllowedSellers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_listingIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getListingBids\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Bid\\\",\\\"name\\\":\\\"bid\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"buyerInstantAcceptEnabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.BidDetailsWithId[][]\\\",\\\"name\\\":\\\"bidInfo\\\",\\\"type\\\":\\\"tuple[][]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_listingIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getListings\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"bids\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Listing\\\",\\\"name\\\":\\\"listing\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.ListingWithId[]\\\",\\\"name\\\":\\\"listingInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserBids\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Bid\\\",\\\"name\\\":\\\"bid\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"buyerInstantAcceptEnabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.BidDetailsWithId[]\\\",\\\"name\\\":\\\"bidInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserListings\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"bids\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Listing\\\",\\\"name\\\":\\\"listing\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.ListingWithId[]\\\",\\\"name\\\":\\\"listingInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseBidPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"_transferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IVerifiedDomainRegistry\\\",\\\"name\\\":\\\"_verifiedDomainRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"initiateRefund\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"instantAcceptEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"listingCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"listings\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"pauseMarketplace\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"paused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"registryRemoveListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_disallowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"removeAddressesFromAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"transferDomainProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"unpauseMarketplace\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newBidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateBidRefundPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newBidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateBidSettlementPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newFee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_newFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newAskPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateMailServerKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"_transferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateTransferDomainProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userBids\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userListings\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifiedDomainRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IVerifiedDomainRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"withdrawBid\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Paused(address)\\\":{\\\"details\\\":\\\"Emitted when the pause is triggered by `account`.\\\"},\\\"Unpaused(address)\\\":{\\\"details\\\":\\\"Emitted when the pause is lifted by `account`.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAddressesToAllowlist(address[])\\\":{\\\"params\\\":{\\\"_allowedAddresses\\\":\\\"List of addresses allowed to call allow listed functions\\\"}},\\\"buyerReleaseFunds(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to release funds for\\\"}},\\\"createBid(uint256,bytes32,string)\\\":{\\\"params\\\":{\\\"_buyerIdHash\\\":\\\"The hashed buyerId which is also output as part of the transfer proof later\\\",\\\"_encryptedBuyerId\\\":\\\"The encrypted buyerId. Should be the same as the buyerId hashed\\\",\\\"_listingId\\\":\\\"The unique identifier of the listing to bid on\\\"}},\\\"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\\\":{\\\"params\\\":{\\\"_askPrice\\\":\\\"An asking price for the domain\\\",\\\"_dkimKeyHash\\\":\\\"The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\\",\\\"_domainId\\\":\\\"The unique identifier of the domain\\\",\\\"_encryptionKey\\\":\\\"The encryption key for buyers to encrypt the buyerId to\\\",\\\"_minBidPrice\\\":\\\"The minimum bid price for the domain\\\",\\\"_saleEthRecipient\\\":\\\"The address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\\\"}},\\\"deleteListing(uint256)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"The unique identifier of the listing to delete\\\"}},\\\"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\\\":{\\\"params\\\":{\\\"_proof\\\":\\\"The zk-email proof of domain transfer\\\"}},\\\"getListingBids(uint256[])\\\":{\\\"params\\\":{\\\"_listingIds\\\":\\\"An array of listingIds to fetch bids for\\\"}},\\\"getListings(uint256[])\\\":{\\\"params\\\":{\\\"_listingIds\\\":\\\"An array of listingIds to fetch details for\\\"}},\\\"getUserBids(address)\\\":{\\\"params\\\":{\\\"_user\\\":\\\"The address of the user to fetch bids for\\\"}},\\\"getUserListings(address)\\\":{\\\"params\\\":{\\\"_user\\\":\\\"The address of the user to fetch listings for\\\"}},\\\"increaseBidPrice(uint256,uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to increase the price for\\\",\\\"_newPrice\\\":\\\"The new price for the bid\\\"}},\\\"initialize(address,address,address)\\\":{\\\"params\\\":{\\\"_mailServerKeyHashAdapter\\\":\\\"The address of the mail server key hash adapter contract\\\",\\\"_transferDomainProcessor\\\":\\\"The address of the domain transfer processor contract\\\",\\\"_verifiedDomainRegistry\\\":\\\"The address of the verified domain registry contract\\\"}},\\\"initiateRefund(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to initiate refund for\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"paused()\\\":{\\\"details\\\":\\\"Returns true if the contract is paused, and false otherwise.\\\"},\\\"registryRemoveListing(uint256)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"Listing Id to remove\\\"}},\\\"removeAddressesFromAllowlist(address[])\\\":{\\\"params\\\":{\\\"_disallowedAddresses\\\":\\\"List of addresses being disallowed from calling allow listed functions\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"updateBidRefundPeriod(uint256)\\\":{\\\"params\\\":{\\\"_newBidRefundPeriod\\\":\\\"The new bid refund period in seconds\\\"}},\\\"updateBidSettlementPeriod(uint256)\\\":{\\\"params\\\":{\\\"_newBidSettlementPeriod\\\":\\\"The new bid settlement period in seconds\\\"}},\\\"updateFee(uint256)\\\":{\\\"params\\\":{\\\"_newFee\\\":\\\"The new fee percentage (in basis points)\\\"}},\\\"updateFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_newFeeRecipient\\\":\\\"The new address to receive fees\\\"}},\\\"updateListing(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"The unique identifier of the listing to update\\\",\\\"_newAskPrice\\\":\\\"The new asking price for the listing\\\",\\\"_saleEthRecipient\\\":\\\"The new address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\\\"}},\\\"updateMailServerKeyHashAdapter(address)\\\":{\\\"params\\\":{\\\"_mailServerKeyHashAdapter\\\":\\\"The new mail server key hash adapter\\\"}},\\\"updateTransferDomainProcessor(address)\\\":{\\\"params\\\":{\\\"_transferDomainProcessor\\\":\\\"The new transfer domain processor\\\"}},\\\"withdrawBid(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAddressesToAllowlist(address[])\\\":{\\\"notice\\\":\\\"Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed functions.\\\"},\\\"buyerReleaseFunds(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required because it is not in the buyer's interest to release funds unless they have received the domain. Note that the bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will revert if: - The bid is not owned by the caller - The listing is not active (sold or withdrawn)\\\"},\\\"createBid(uint256,bytes32,string)\\\":{\\\"notice\\\":\\\"Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the  seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId  using their private key to get the raw buyerId. DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be done in the client! This does not affect the security of the protocol as the encrypted buyerId is only  used for communication between the buyer and the seller while maintaining privacy.\\\"},\\\"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\\\":{\\\"notice\\\":\\\"Creates listing for a domain. If ownership of domain changes offchain, the new owner will have to first register the domain on the domain registry contract. Then the new owner can create a listing for the domain. The old listing will be deleted from the old owner's  listings and the old listing is marked as NOT active, which prevents any new bids from being created on it and makes the old bids immediately withdrawable. We also allow the seller to specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be  updated by us whenever Namecheap rotates their DKIM key. Function reverts if: - Caller is not domain owner on the domain registry contract - Ask price is less than min bid price - Sale ETH recipient is the zero address\\\"},\\\"deleteListing(uint256)\\\":{\\\"notice\\\":\\\"ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing are left as is to allow the buyer to withdraw the bid.\\\"},\\\"disableAllowlist()\\\":{\\\"notice\\\":\\\"Disable the allow list. When the allow list is disabled, any address is allowed to call functions with onlyAllowed modifier.\\\"},\\\"disableInstantAccept()\\\":{\\\"notice\\\":\\\"Disables the instant accept flag for the buyer.\\\"},\\\"enableAllowlist()\\\":{\\\"notice\\\":\\\"Enable the allow list. When the allow list is enabled, only approved addresses are allowed to functions with onlyAllowed modifier.\\\"},\\\"enableInstantAccept()\\\":{\\\"notice\\\":\\\"Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has  configured their Namecheap account to accept ownership of domains immediately upon transfer.  DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only  an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can  cancel the transfer immediately.\\\"},\\\"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\\\":{\\\"notice\\\":\\\"ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to  the listing owner. The seller can also finalize the sale with bids that have initiated a refund  including the ones that have expired based on timestamp but not withdrawn yet.\\\"},\\\"getAllowedSellers()\\\":{\\\"notice\\\":\\\"Get all allowed sellers\\\"},\\\"getListingBids(uint256[])\\\":{\\\"notice\\\":\\\"Returns the bids for given listingIds\\\"},\\\"getListings(uint256[])\\\":{\\\"notice\\\":\\\"Get listing information with listingId for a list of listingIds\\\"},\\\"getUserBids(address)\\\":{\\\"notice\\\":\\\"Returns the bids created by a user\\\"},\\\"getUserListings(address)\\\":{\\\"notice\\\":\\\"Returns all listings created by a user\\\"},\\\"increaseBidPrice(uint256,uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher  than the old price. The buyer must send the additional amount of ETH. The function reverts if - bid has initiated refund, caller is not bid owner or listing is not active - the new price is less than old price - msg.value is NOT STRICTLY EQUAL to than new price - old price\\\"},\\\"initialize(address,address,address)\\\":{\\\"notice\\\":\\\"Initializes the contract with domain verification and transfer processors. Can  only be called once by the contract owner \\\"},\\\"initiateRefund(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner  after the initial bid expiry period has passed.\\\"},\\\"pauseMarketplace()\\\":{\\\"notice\\\":\\\"ONLY OWNER: Pauses listing and proof submission functionality for the marketplace.  Functionalites that are paused: - Listing creation and update - Bid creation and update - Sale finalization  Functinonalites that remain unpaused to allow users to retrieve funds in contract: - Bid refund initiation and withdrawal - Listing deletion - Manual settlement between buyer and seller\\\"},\\\"registryRemoveListing(uint256)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry. \\\"},\\\"removeAddressesFromAllowlist(address[])\\\":{\\\"notice\\\":\\\"Removes passed addresses from an allow list. Addresses not on the allow list are unable to call allow listed functions.\\\"},\\\"unpauseMarketplace()\\\":{\\\"notice\\\":\\\"ONLY OWNER: Restarts paused functionality for the marketplace.\\\"},\\\"updateBidRefundPeriod(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the bid refund period\\\"},\\\"updateBidSettlementPeriod(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the minimum bid active period\\\"},\\\"updateFee(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the fee percentage for the marketplace\\\"},\\\"updateFeeRecipient(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the fee recipient address\\\"},\\\"updateListing(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"ONLY SELLER: Updates the asking price of an existing listing. We don't update the existing bids against the listing because the newAskPrice is an indicative value. The new ask price must be greater than or equal to the existing min bid price. If seller wants to update the min bid price, they should delete the listing and create a new one with the new min bid price.\\\"},\\\"updateMailServerKeyHashAdapter(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the managed mail server key hash adapter\\\"},\\\"updateTransferDomainProcessor(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the transfer domain processor\\\"},\\\"withdrawBid(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/DomainExchange.sol\\\":\\\"DomainExchange\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/security/Pausable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which allows children to implement an emergency stop\\\\n * mechanism that can be triggered by an authorized account.\\\\n *\\\\n * This module is used through inheritance. It will make available the\\\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\\\n * the functions of your contract. Note that they will not be pausable by\\\\n * simply including this module, only once the modifiers are put in place.\\\\n */\\\\nabstract contract Pausable is Context {\\\\n    /**\\\\n     * @dev Emitted when the pause is triggered by `account`.\\\\n     */\\\\n    event Paused(address account);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the pause is lifted by `account`.\\\\n     */\\\\n    event Unpaused(address account);\\\\n\\\\n    bool private _paused;\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract in unpaused state.\\\\n     */\\\\n    constructor() {\\\\n        _paused = false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must not be paused.\\\\n     */\\\\n    modifier whenNotPaused() {\\\\n        _requireNotPaused();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Modifier to make a function callable only when the contract is paused.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must be paused.\\\\n     */\\\\n    modifier whenPaused() {\\\\n        _requirePaused();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the contract is paused, and false otherwise.\\\\n     */\\\\n    function paused() public view virtual returns (bool) {\\\\n        return _paused;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the contract is paused.\\\\n     */\\\\n    function _requireNotPaused() internal view virtual {\\\\n        require(!paused(), \\\\\\\"Pausable: paused\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the contract is not paused.\\\\n     */\\\\n    function _requirePaused() internal view virtual {\\\\n        require(paused(), \\\\\\\"Pausable: not paused\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Triggers stopped state.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must not be paused.\\\\n     */\\\\n    function _pause() internal virtual whenNotPaused {\\\\n        _paused = true;\\\\n        emit Paused(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns to normal state.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must be paused.\\\\n     */\\\\n    function _unpause() internal virtual whenPaused {\\\\n        _paused = false;\\\\n        emit Unpaused(_msgSender());\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Contract module that helps prevent reentrant calls to a function.\\\\n *\\\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\\\n * available, which can be applied to functions to make sure there are no nested\\\\n * (reentrant) calls to them.\\\\n *\\\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\\\n * `nonReentrant` may not call one another. This can be worked around by making\\\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\\\n * points to them.\\\\n *\\\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\\\n * to protect against it, check out our blog post\\\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\\\n */\\\\nabstract contract ReentrancyGuard {\\\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\\\n    // word because each write operation emits an extra SLOAD to first read the\\\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\\\n    // back. This is the compiler's defense against contract upgrades and\\\\n    // pointer aliasing, and it cannot be disabled.\\\\n\\\\n    // The values being non-zero value makes deployment a bit more expensive,\\\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\\\n    // amount. Since refunds are capped to a percentage of the total\\\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\\\n    // increase the likelihood of the full refund coming into effect.\\\\n    uint256 private constant _NOT_ENTERED = 1;\\\\n    uint256 private constant _ENTERED = 2;\\\\n\\\\n    uint256 private _status;\\\\n\\\\n    constructor() {\\\\n        _status = _NOT_ENTERED;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\\\n     * function is not supported. It is possible to prevent this from happening\\\\n     * by making the `nonReentrant` function external, and making it call a\\\\n     * `private` function that does the actual work.\\\\n     */\\\\n    modifier nonReentrant() {\\\\n        _nonReentrantBefore();\\\\n        _;\\\\n        _nonReentrantAfter();\\\\n    }\\\\n\\\\n    function _nonReentrantBefore() private {\\\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\\\n        require(_status != _ENTERED, \\\\\\\"ReentrancyGuard: reentrant call\\\\\\\");\\\\n\\\\n        // Any calls to nonReentrant after this point will fail\\\\n        _status = _ENTERED;\\\\n    }\\\\n\\\\n    function _nonReentrantAfter() private {\\\\n        // By storing the original value once again, a refund is triggered (see\\\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\\\n        _status = _NOT_ENTERED;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the reentrancy guard is currently set to \\\\\\\"entered\\\\\\\", which indicates there is a\\\\n     * `nonReentrant` function in the call stack.\\\\n     */\\\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\\\n        return _status == _ENTERED;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/DomainExchange.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { ReentrancyGuard } from \\\\\\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\\\\\";\\\\nimport { Pausable } from \\\\\\\"@openzeppelin/contracts/security/Pausable.sol\\\\\\\";\\\\n\\\\nimport { AddressAllowList } from \\\\\\\"./external/AddressAllowList.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"./external/lib/Uint256ArrayUtils.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./external/interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\n\\\\nimport { IDomainExchange } from \\\\\\\"./interfaces/IDomainExchange.sol\\\\\\\";\\\\nimport { ITransferDomainProcessor } from \\\\\\\"./interfaces/ITransferDomainProcessor.sol\\\\\\\";\\\\nimport { IVerifiedDomainRegistry } from \\\\\\\"./interfaces/IVerifiedDomainRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract DomainExchange is IDomainExchange, AddressAllowList, ReentrancyGuard, Pausable {\\\\n\\\\n    using Address for address payable;\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    \\\\n    event ListingCreated(\\\\n        uint256 indexed listingId, \\\\n        address indexed seller, \\\\n        bytes32 indexed domainId, \\\\n        bytes32 dkimKeyHash,\\\\n        uint256 askPrice,\\\\n        uint256 minBidPrice,\\\\n        address saleEthRecipient\\\\n    );\\\\n    event ListingUpdated(uint256 indexed listingId, address indexed seller, uint256 newAskPrice, address saleEthRecipient);\\\\n    event ListingDeleted(uint256 indexed listingId, address indexed seller);\\\\n    event ListingDeletedByRegistry(uint256 indexed listingId);\\\\n    \\\\n    event BidCreated(uint256 indexed bidId, uint256 indexed listingId, address indexed buyer, uint256 price);\\\\n    event BidPriceIncreased(uint256 indexed bidId, address indexed buyer, uint256 newPrice);\\\\n    event RefundInitiated(uint256 indexed bidId, address indexed buyer);\\\\n    event BidWithdrawn(uint256 indexed bidId, address indexed buyer, uint256 amount);\\\\n    \\\\n    event SaleFinalized(uint256 indexed bidId, uint256 indexed listingId, uint256 priceNetFees, uint256 fees);\\\\n    \\\\n    event InstantAcceptUpdated(address indexed buyer, bool instantAccept);\\\\n\\\\n    event FeeUpdated(uint256 newFee);\\\\n    event FeeRecipientUpdated(address indexed newFeeRecipient);\\\\n    event BidSettlementPeriodUpdated(uint256 newBidSettlementPeriod);\\\\n    event BidRefundPeriodUpdated(uint256 newBidRefundPeriod);\\\\n    event TransferDomainProcessorUpdated(ITransferDomainProcessor indexed newTransferDomainProcessor);\\\\n    event MailServerKeyHashAdapterUpdated(IKeyHashAdapterV2 indexed newMailServerKeyHashAdapter);\\\\n\\\\n    /* ============ Structs ============ */\\\\n    struct Listing {\\\\n        address seller;\\\\n        address payable saleEthRecipient;       // Must be a contract that can receive ETH or an EOA\\\\n        bytes32 dkimKeyHash;            // Allow for custom DKIM key hash\\\\n        bytes encryptionKey;\\\\n        bytes32 domainId;\\\\n        uint256 createdAt;\\\\n        uint256 askPrice;\\\\n        uint256 minBidPrice;\\\\n        bool isActive;          // false by default, set to true when the listing is created\\\\n        uint256[] bids;\\\\n    }\\\\n\\\\n    struct ListingWithId {\\\\n        uint256 listingId;\\\\n        Listing listing;\\\\n    }\\\\n\\\\n    struct Bid {\\\\n        address buyer;\\\\n        uint256 listingId;\\\\n        string encryptedBuyerId;\\\\n        bytes32 buyerIdHash;\\\\n        uint256 createdAt;\\\\n        uint256 expiryTimestamp;\\\\n        uint256 price;\\\\n        bool refundInitiated;\\\\n    }\\\\n\\\\n    struct BidDetailsWithId {\\\\n        uint256 bidId;\\\\n        Bid bid;\\\\n        bool buyerInstantAcceptEnabled;\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyInitialized() {\\\\n        require(isInitialized, \\\\\\\"Contract must be initialized\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n\\\\n    mapping(uint256 => Listing) public listings;\\\\n    mapping(address => uint256[]) public userListings;\\\\n    mapping(uint256 => Bid) public bids;\\\\n    mapping(address => uint256[]) public userBids;\\\\n    mapping(address => bool) public instantAcceptEnabled;\\\\n\\\\n    uint256 public fee;\\\\n    address payable public feeRecipient;\\\\n    uint256 public bidCounter;\\\\n    uint256 public listingCounter;\\\\n    uint256 public bidSettlementPeriod;\\\\n    uint256 public bidRefundPeriod;\\\\n    \\\\n    bool public isInitialized;\\\\n    \\\\n    ITransferDomainProcessor public transferDomainProcessor;\\\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        address _owner,\\\\n        uint256 _fee,\\\\n        address payable _feeRecipient,\\\\n        uint256 _bidSettlementPeriod,\\\\n        uint256 _bidRefundPeriod,\\\\n        address[] memory _allowedAddresses\\\\n    ) AddressAllowList(_allowedAddresses) {\\\\n        fee = _fee;\\\\n        feeRecipient = _feeRecipient;\\\\n        bidSettlementPeriod = _bidSettlementPeriod;\\\\n        bidRefundPeriod = _bidRefundPeriod;\\\\n        \\\\n        bidCounter = 1;\\\\n        listingCounter = 1;\\\\n        isInitialized = false;\\\\n        \\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Creates listing for a domain. If ownership of domain changes offchain, the new owner\\\\n     * will have to first register the domain on the domain registry contract. Then the new owner\\\\n     * can create a listing for the domain. The old listing will be deleted from the old owner's \\\\n     * listings and the old listing is marked as NOT active, which prevents any new bids from being\\\\n     * created on it and makes the old bids immediately withdrawable. We also allow the seller to\\\\n     * specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM\\\\n     * key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be \\\\n     * updated by us whenever Namecheap rotates their DKIM key.\\\\n     *\\\\n     * Function reverts if:\\\\n     * - Caller is not domain owner on the domain registry contract\\\\n     * - Ask price is less than min bid price\\\\n     * - Sale ETH recipient is the zero address\\\\n     *\\\\n     * @param _domainId         The unique identifier of the domain\\\\n     * @param _askPrice         An asking price for the domain\\\\n     * @param _minBidPrice      The minimum bid price for the domain\\\\n     * @param _saleEthRecipient The address to receive the ETH from the sale; must be a contract that can\\\\n     *                          receive ETH or an EOA\\\\n     * @param _encryptionKey    The encryption key for buyers to encrypt the buyerId to\\\\n     * @param _dkimKeyHash      The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\\\n     */\\\\n    function createListing(\\\\n        bytes32 _domainId, \\\\n        uint256 _askPrice, \\\\n        uint256 _minBidPrice, \\\\n        address payable _saleEthRecipient, \\\\n        bytes memory _encryptionKey,\\\\n        bytes32 _dkimKeyHash\\\\n    ) \\\\n        external\\\\n        onlyAllowed\\\\n        onlyInitialized \\\\n        whenNotPaused\\\\n    {\\\\n        _verifyCreateListing(_domainId, _minBidPrice, _askPrice, _saleEthRecipient);\\\\n\\\\n        uint256 listingId = _updateCreateListingState(\\\\n            _domainId, _askPrice, _minBidPrice, _saleEthRecipient, _encryptionKey, _dkimKeyHash\\\\n        );\\\\n\\\\n        verifiedDomainRegistry.setDomainListing(_domainId, listingId);\\\\n\\\\n        emit ListingCreated(listingId, msg.sender, _domainId, _dkimKeyHash, _askPrice, _minBidPrice, _saleEthRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer\\\\n     * has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId\\\\n     * to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the \\\\n     * seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId \\\\n     * using their private key to get the raw buyerId.\\\\n     *\\\\n     * DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be\\\\n     * done in the client! This does not affect the security of the protocol as the encrypted buyerId is only \\\\n     * used for communication between the buyer and the seller while maintaining privacy.\\\\n     *\\\\n     * @param _listingId            The unique identifier of the listing to bid on\\\\n     * @param _buyerIdHash          The hashed buyerId which is also output as part of the transfer proof later\\\\n     * @param _encryptedBuyerId     The encrypted buyerId. Should be the same as the buyerId hashed\\\\n     */\\\\n    function createBid(uint256 _listingId, bytes32 _buyerIdHash, string memory _encryptedBuyerId) \\\\n        external \\\\n        payable\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        uint256 price = msg.value;\\\\n        Listing storage listing = listings[_listingId];\\\\n\\\\n        _validateCreateBid(listing, price, _buyerIdHash);\\\\n\\\\n        uint256 bidId = _updateCreateBidState(listing, _listingId, price, _buyerIdHash, _encryptedBuyerId);\\\\n\\\\n        emit BidCreated(bidId, _listingId, msg.sender, price);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to \\\\n     * the listing owner. The seller can also finalize the sale with bids that have initiated a refund \\\\n     * including the ones that have expired based on timestamp but not withdrawn yet.\\\\n     *\\\\n     * @param _proof The zk-email proof of domain transfer\\\\n     */\\\\n    function finalizeSale(ITransferDomainProcessor.TransferProof calldata _proof) \\\\n        external\\\\n        onlyInitialized\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        // Check\\\\n        (\\\\n            bytes32 dkimKeyHash,\\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        ) = transferDomainProcessor.processProof(_proof);\\\\n\\\\n        Bid storage bid = bids[bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n        \\\\n        _validateFinalizeSale(bid, listing, dkimKeyHash, hashedReceiverId, domainName);\\\\n        \\\\n        // Effect\\\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\\\n\\\\n        uint256 transferValue = bid.price;\\\\n        address payable recipient = listing.saleEthRecipient;\\\\n        uint256 listingId = bid.listingId;\\\\n        _updateFinalizeSaleState(bid, bidId, listing);\\\\n\\\\n        // Interaction\\\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\\\n        \\\\n        emit SaleFinalized(bidId, listingId, transferValue - feeAmount, feeAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required\\\\n     * because it is not in the buyer's interest to release funds unless they have received the domain. Note that the\\\\n     * bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to\\\\n     * the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will\\\\n     * revert if:\\\\n     * - The bid is not owned by the caller\\\\n     * - The listing is not active (sold or withdrawn)\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to release funds for\\\\n     */\\\\n    function buyerReleaseFunds(uint256 _bidId) \\\\n        external\\\\n        nonReentrant\\\\n    {\\\\n        // Check\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        require(bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Effect\\\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\\\n\\\\n        uint256 transferValue = bid.price;\\\\n        address payable recipient = listing.saleEthRecipient;\\\\n        uint256 listingId = bid.listingId;\\\\n        \\\\n        _updateFinalizeSaleState(bid, _bidId, listing);\\\\n\\\\n        // Interaction\\\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\\\n\\\\n        emit SaleFinalized(_bidId, listingId, transferValue - feeAmount, feeAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Updates the asking price of an existing listing. We don't update\\\\n     * the existing bids against the listing because the newAskPrice is an indicative value.\\\\n     * The new ask price must be greater than or equal to the existing min bid price. If seller\\\\n     * wants to update the min bid price, they should delete the listing and create a new one with\\\\n     * the new min bid price.\\\\n     *\\\\n     * @param _listingId        The unique identifier of the listing to update\\\\n     * @param _newAskPrice      The new asking price for the listing\\\\n     * @param _saleEthRecipient The new address to receive the ETH from the sale; must be a contract that can\\\\n     *                          receive ETH or an EOA\\\\n     */\\\\n    function updateListing(uint256 _listingId, uint256 _newAskPrice, address payable _saleEthRecipient) external whenNotPaused {\\\\n        Listing storage listing = listings[_listingId];\\\\n        \\\\n        require(listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        require(_newAskPrice >= listing.minBidPrice, \\\\\\\"Ask price is less than min bid price\\\\\\\");\\\\n        require(_saleEthRecipient != address(0), \\\\\\\"Invalid sale ETH recipient\\\\\\\");\\\\n        \\\\n        listing.askPrice = _newAskPrice;\\\\n        listing.saleEthRecipient = _saleEthRecipient;\\\\n\\\\n        emit ListingUpdated(_listingId, msg.sender, _newAskPrice, _saleEthRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array\\\\n     * and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing\\\\n     * are left as is to allow the buyer to withdraw the bid.\\\\n     *\\\\n     * @param _listingId The unique identifier of the listing to delete\\\\n     */\\\\n    function deleteListing(uint256 _listingId) external {\\\\n        Listing storage listing = listings[_listingId];\\\\n        \\\\n        require(listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        \\\\n        verifiedDomainRegistry.removeDomainListing(listing.domainId);\\\\n\\\\n        _pruneListing(listing, _listingId);\\\\n\\\\n        emit ListingDeleted(_listingId, msg.sender);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry.\\\\n     * \\\\n     * @param _listingId    Listing Id to remove\\\\n     */\\\\n    function registryRemoveListing(uint256 _listingId) external override {\\\\n        Listing storage listing = listings[_listingId];\\\\n\\\\n        require(address(verifiedDomainRegistry) == msg.sender, \\\\\\\"Caller is not registry\\\\\\\");\\\\n        // If listing is NOT active, this function will NOT be called because the listing status\\\\n        // would have already been removed from the registry beforehand; so there is no need to \\\\n        // check if listing is active\\\\n        \\\\n        _pruneListing(listing, _listingId);\\\\n\\\\n        emit ListingDeletedByRegistry(_listingId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher \\\\n     * than the old price. The buyer must send the additional amount of ETH. The function reverts if\\\\n     * - bid has initiated refund, caller is not bid owner or listing is not active\\\\n     * - the new price is less than old price\\\\n     * - msg.value is NOT STRICTLY EQUAL to than new price - old price\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to increase the price for\\\\n     * @param _newPrice The new price for the bid\\\\n     */\\\\n    function increaseBidPrice(uint256 _bidId, uint256 _newPrice)\\\\n        external\\\\n        payable\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        // Check\\\\n        _validateIncreaseBidPrice(bid, listing, _newPrice);\\\\n        \\\\n        // Effect\\\\n        bid.price = _newPrice;\\\\n\\\\n        emit BidPriceIncreased(_bidId, msg.sender, _newPrice);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has \\\\n     * configured their Namecheap account to accept ownership of domains immediately upon transfer.\\\\n     * \\\\n     * DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only \\\\n     * an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller\\\\n     * may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But\\\\n     * if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can \\\\n     * cancel the transfer immediately.\\\\n     */\\\\n    function enableInstantAccept() external onlyInitialized {\\\\n        require(!instantAcceptEnabled[msg.sender], \\\\\\\"Instant accept already enabled\\\\\\\");\\\\n        \\\\n        instantAcceptEnabled[msg.sender] = true;        \\\\n        emit InstantAcceptUpdated(msg.sender, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Disables the instant accept flag for the buyer.\\\\n     */\\\\n    function disableInstantAccept() external onlyInitialized {\\\\n        require(instantAcceptEnabled[msg.sender], \\\\\\\"Instant accept already disabled\\\\\\\");\\\\n\\\\n        instantAcceptEnabled[msg.sender] = false;\\\\n        emit InstantAcceptUpdated(msg.sender, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner \\\\n     * after the initial bid expiry period has passed.\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to initiate refund for\\\\n     */\\\\n    function initiateRefund(uint256 _bidId) external {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        _validateInitiateRefund(bid, listing);\\\\n\\\\n        bid.expiryTimestamp = block.timestamp + bidRefundPeriod;\\\\n        bid.refundInitiated = true;\\\\n\\\\n        emit RefundInitiated(_bidId, bid.buyer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to withdraw\\\\n     */\\\\n    function withdrawBid(uint256 _bidId) external nonReentrant {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        // Check\\\\n        _validateWithdrawBid(bid, listing);\\\\n\\\\n        // Effect\\\\n        uint256 refundAmount = bid.price;\\\\n        _pruneBid(bid, _bidId, listing);\\\\n        \\\\n        // Interaction\\\\n        payable(msg.sender).sendValue(refundAmount);\\\\n\\\\n        emit BidWithdrawn(_bidId, msg.sender, refundAmount);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initializes the contract with domain verification and transfer processors. Can \\\\n     * only be called once by the contract owner\\\\n     * \\\\n     * @param _transferDomainProcessor The address of the domain transfer processor contract\\\\n     * @param _verifiedDomainRegistry The address of the verified domain registry contract\\\\n     * @param _mailServerKeyHashAdapter The address of the mail server key hash adapter contract\\\\n     */\\\\n    function initialize(\\\\n        ITransferDomainProcessor _transferDomainProcessor,\\\\n        IVerifiedDomainRegistry _verifiedDomainRegistry,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter\\\\n    ) external onlyOwner {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n        transferDomainProcessor = _transferDomainProcessor;\\\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Pauses listing and proof submission functionality for the marketplace. \\\\n     * Functionalites that are paused:\\\\n     * - Listing creation and update\\\\n     * - Bid creation and update\\\\n     * - Sale finalization\\\\n     * \\\\n     * Functinonalites that remain unpaused to allow users to retrieve funds in contract:\\\\n     * - Bid refund initiation and withdrawal\\\\n     * - Listing deletion\\\\n     * - Manual settlement between buyer and seller\\\\n     */\\\\n    function pauseMarketplace() external onlyOwner {\\\\n        _pause();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Restarts paused functionality for the marketplace.\\\\n     */\\\\n    function unpauseMarketplace() external onlyOwner {\\\\n        _unpause();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the transfer domain processor\\\\n     *\\\\n     * @param _transferDomainProcessor The new transfer domain processor\\\\n     */\\\\n    function updateTransferDomainProcessor(ITransferDomainProcessor _transferDomainProcessor) external onlyOwner {\\\\n        require(address(_transferDomainProcessor) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        \\\\n        transferDomainProcessor = _transferDomainProcessor;\\\\n        emit TransferDomainProcessorUpdated(_transferDomainProcessor);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the managed mail server key hash adapter\\\\n     *\\\\n     * @param _mailServerKeyHashAdapter The new mail server key hash adapter\\\\n     */\\\\n    function updateMailServerKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        require(address(_mailServerKeyHashAdapter) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        \\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        emit MailServerKeyHashAdapterUpdated(_mailServerKeyHashAdapter);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the fee percentage for the marketplace\\\\n     *\\\\n     * @param _newFee The new fee percentage (in basis points)\\\\n     */\\\\n    function updateFee(uint256 _newFee) external onlyOwner {\\\\n        fee = _newFee;\\\\n        emit FeeUpdated(_newFee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the fee recipient address\\\\n     *\\\\n     * @param _newFeeRecipient The new address to receive fees\\\\n     */\\\\n    function updateFeeRecipient(address payable _newFeeRecipient) external onlyOwner {\\\\n        require(_newFeeRecipient != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        feeRecipient = _newFeeRecipient;\\\\n        emit FeeRecipientUpdated(_newFeeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the minimum bid active period\\\\n     *\\\\n     * @param _newBidSettlementPeriod The new bid settlement period in seconds\\\\n     */\\\\n    function updateBidSettlementPeriod(uint256 _newBidSettlementPeriod) external onlyOwner {\\\\n        require(_newBidSettlementPeriod > 0, \\\\\\\"Bid settlement period must be greater than 0\\\\\\\");\\\\n        bidSettlementPeriod = _newBidSettlementPeriod;\\\\n        emit BidSettlementPeriodUpdated(_newBidSettlementPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the bid refund period\\\\n     *\\\\n     * @param _newBidRefundPeriod The new bid refund period in seconds\\\\n     */\\\\n    function updateBidRefundPeriod(uint256 _newBidRefundPeriod) external onlyOwner {\\\\n        require(_newBidRefundPeriod > 0, \\\\\\\"Bid refund period must be greater than 0\\\\\\\");\\\\n        bidRefundPeriod = _newBidRefundPeriod;\\\\n        emit BidRefundPeriodUpdated(_newBidRefundPeriod);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */    \\\\n\\\\n    /**\\\\n     * @notice Get listing information with listingId for a list of listingIds\\\\n     * @param _listingIds An array of listingIds to fetch details for\\\\n     */\\\\n    function getListings(uint256[] memory _listingIds)\\\\n        external \\\\n        view \\\\n        returns (ListingWithId[] memory listingInfo) \\\\n    {\\\\n        listingInfo = new ListingWithId[](_listingIds.length);\\\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\\\n            listingInfo[i] = ListingWithId({\\\\n                listingId: _listingIds[i],\\\\n                listing: listings[_listingIds[i]]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns all listings created by a user\\\\n     * @param _user The address of the user to fetch listings for\\\\n     */\\\\n    function getUserListings(address _user) external view returns (ListingWithId[] memory listingInfo) {\\\\n        uint256[] memory userListingIds = userListings[_user];\\\\n        listingInfo = new ListingWithId[](userListingIds.length);\\\\n        for (uint256 i = 0; i < userListingIds.length; i++) {\\\\n            uint256 listingId = userListingIds[i];\\\\n            listingInfo[i] = ListingWithId({\\\\n                listingId: listingId,\\\\n                listing: listings[listingId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the bids created by a user\\\\n     * @param _user The address of the user to fetch bids for\\\\n     */\\\\n    function getUserBids(address _user) external view returns (BidDetailsWithId[] memory bidInfo) {\\\\n        uint256[] memory userBidIds = userBids[_user];\\\\n        bidInfo = new BidDetailsWithId[](userBidIds.length);\\\\n        for (uint256 i = 0; i < userBidIds.length; i++) {\\\\n            uint256 bidId = userBidIds[i];\\\\n            bidInfo[i] = BidDetailsWithId({\\\\n                bidId: bidId,\\\\n                bid: bids[bidId],\\\\n                buyerInstantAcceptEnabled: instantAcceptEnabled[_user]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the bids for given listingIds\\\\n     * @param _listingIds An array of listingIds to fetch bids for\\\\n     */\\\\n    function getListingBids(uint256[] memory _listingIds) external view returns (BidDetailsWithId[][] memory bidInfo) {\\\\n        bidInfo = new BidDetailsWithId[][](_listingIds.length);\\\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\\\n            uint256 listingId = _listingIds[i];\\\\n            uint256[] memory listingBidIds = listings[listingId].bids;\\\\n            bidInfo[i] = new BidDetailsWithId[](listingBidIds.length);\\\\n            for (uint256 j = 0; j < listingBidIds.length; j++) {\\\\n                uint256 bidId = listingBidIds[j];\\\\n                bidInfo[i][j] = BidDetailsWithId({\\\\n                    bidId: bidId,\\\\n                    bid: bids[bidId],\\\\n                    buyerInstantAcceptEnabled: instantAcceptEnabled[bids[bidId].buyer]\\\\n                });\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Get all allowed sellers\\\\n     */\\\\n    function getAllowedSellers() external view returns (address[] memory) {\\\\n        return _getAllowedAddresses();\\\\n    }\\\\n\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _verifyCreateListing(\\\\n        bytes32 _domainId, \\\\n        uint256 _minBidPrice, \\\\n        uint256 _askPrice, \\\\n        address _saleEthRecipient\\\\n    ) internal view {\\\\n        IVerifiedDomainRegistry.DomainWithId memory domainWithId = verifiedDomainRegistry.getDomain(_domainId);\\\\n        require(domainWithId.domain.owner == msg.sender, \\\\\\\"Caller is not domain owner\\\\\\\");\\\\n        require(domainWithId.domain.exchange == address(0), \\\\\\\"Domain already listed on registry\\\\\\\");\\\\n\\\\n        require(_minBidPrice > 0, \\\\\\\"Minimum bid price is zero\\\\\\\");\\\\n        require(_askPrice >= _minBidPrice, \\\\\\\"Ask price is less than min bid price\\\\\\\");\\\\n        require(_saleEthRecipient != address(0), \\\\\\\"Invalid sale ETH recipient\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateCreateListingState(\\\\n        bytes32 _domainId, \\\\n        uint256 _askPrice, \\\\n        uint256 _minBidPrice,\\\\n        address payable _saleEthRecipient,\\\\n        bytes memory _encryptionKey,\\\\n        bytes32 _dkimKeyHash\\\\n    ) internal returns (uint256 listingId) {\\\\n        \\\\n        // New listing\\\\n        listingId = listingCounter;\\\\n        listings[listingId] = Listing({\\\\n            seller: msg.sender,\\\\n            saleEthRecipient: _saleEthRecipient,\\\\n            encryptionKey: _encryptionKey,\\\\n            dkimKeyHash: _dkimKeyHash,\\\\n            askPrice: _askPrice,\\\\n            minBidPrice: _minBidPrice,\\\\n            domainId: _domainId,\\\\n            createdAt: block.timestamp,\\\\n            isActive: true,\\\\n            bids: new uint256[](0)\\\\n        });\\\\n        userListings[msg.sender].push(listingId);\\\\n\\\\n        // Increment listingCounter\\\\n        listingCounter = listingCounter + 1;\\\\n    }\\\\n\\\\n    function _validateCreateBid(Listing storage _listing, uint256 _price, bytes32 _buyerIdHash) internal view {\\\\n        require(_listing.seller != address(0), \\\\\\\"Listing does not exist\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        \\\\n        // Validate inputs\\\\n        require(_price >= _listing.minBidPrice, \\\\\\\"Bid price is less than min bid price\\\\\\\");\\\\n        require(_buyerIdHash != bytes32(0), \\\\\\\"Buyer ID hash cannot be empty\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateCreateBidState(\\\\n        Listing storage _listing, \\\\n        uint256 _listingId, \\\\n        uint256 _price, \\\\n        bytes32 _buyerIdHash, \\\\n        string memory _encryptedBuyerId\\\\n    ) internal returns (uint256 bidId) {\\\\n        bidId = bidCounter;\\\\n        bids[bidId] = Bid({\\\\n            buyer: msg.sender,\\\\n            listingId: _listingId,\\\\n            encryptedBuyerId: _encryptedBuyerId,\\\\n            buyerIdHash: _buyerIdHash,\\\\n            createdAt: block.timestamp,\\\\n            expiryTimestamp: type(uint256).max,\\\\n            price: _price,\\\\n            refundInitiated: false\\\\n        });\\\\n        userBids[msg.sender].push(bidId);\\\\n        _listing.bids.push(bidId);\\\\n\\\\n        // Increment bidCounter\\\\n        bidCounter = bidCounter + 1;\\\\n    }\\\\n\\\\n    function _validateFinalizeSale(\\\\n        Bid storage _bid, \\\\n        Listing storage _listing,\\\\n        bytes32 _dkimKeyHash,\\\\n        bytes32 _hashedReceiverId, \\\\n        string memory _transferredDomainName\\\\n    ) internal view {\\\\n        require(_bid.buyer != address(0), \\\\\\\"Bid does not exist\\\\\\\");\\\\n        require(_listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Validate namecheap DKIM key\\\\n        if (_listing.dkimKeyHash != bytes32(0)) {\\\\n            require(_dkimKeyHash == _listing.dkimKeyHash, \\\\\\\"Invalid custom DKIM key hash\\\\\\\");\\\\n        } else {\\\\n            require(\\\\n                mailServerKeyHashAdapter.isMailServerKeyHash(_dkimKeyHash), \\\\n                \\\\\\\"Invalid managed DKIM key hash\\\\\\\"\\\\n            );\\\\n        }\\\\n\\\\n        // Validate domain and receiver\\\\n        bytes32 transferredDomainId = keccak256(abi.encodePacked(_transferredDomainName));\\\\n        require(_bid.buyerIdHash == _hashedReceiverId, \\\\\\\"Invalid receiver\\\\\\\");\\\\n        require(_listing.domainId == transferredDomainId, \\\\\\\"Invalid domain\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateFinalizeSaleState(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\\\n        uint256 listingId = _bid.listingId;\\\\n        \\\\n        _pruneBid(_bid, _bidId, _listing);\\\\n        _pruneListing(_listing, listingId);\\\\n    }\\\\n\\\\n    function _validateIncreaseBidPrice(\\\\n        Bid storage _bid, \\\\n        Listing storage _listing, \\\\n        uint256 _newPrice\\\\n    ) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(!_bid.refundInitiated, \\\\\\\"Refund already initiated\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Validate new price\\\\n        require(_newPrice > _bid.price, \\\\\\\"New price not greater than old price\\\\\\\");\\\\n        require(msg.value == _newPrice - _bid.price, \\\\\\\"Incorrect amount of ETH sent\\\\\\\");\\\\n    }\\\\n\\\\n    function _validateInitiateRefund(Bid storage _bid, Listing storage _listing) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(!_bid.refundInitiated, \\\\\\\"Refund already initiated\\\\\\\");\\\\n        require(block.timestamp > bidSettlementPeriod + _bid.createdAt, \\\\\\\"Refund period not started\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing expired. Bid can be withdrawn directly\\\\\\\");\\\\n    }\\\\n\\\\n    function _validateWithdrawBid(Bid storage _bid, Listing storage _listing) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        if (_listing.isActive) {\\\\n            require(_bid.refundInitiated, \\\\\\\"Refund not initiated\\\\\\\");\\\\n            require(block.timestamp >= _bid.expiryTimestamp, \\\\\\\"Refund period not ended\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    function _settleSale(address payable _recipient, uint256 _amount) internal returns (uint256 feeAmount) {\\\\n        feeAmount = (_amount * fee) / PRECISE_UNIT;\\\\n        _recipient.sendValue(_amount - feeAmount);\\\\n\\\\n        if (feeAmount > 0) {\\\\n            feeRecipient.sendValue(feeAmount);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Deletes a bid from the exchange. Removes the bid from the listing's bids array and the buyer's\\\\n     * bids array. Deletes the listing if it is expired and has no bids.\\\\n     */\\\\n    function _pruneBid(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\\\n        userBids[_bid.buyer].removeStorage(_bidId);\\\\n        _listing.bids.removeStorage(_bidId);\\\\n        if (!_listing.isActive && _listing.bids.length == 0) {\\\\n            delete listings[_bid.listingId];\\\\n        }\\\\n        delete bids[_bidId];\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Marks a listing as expired. Removes the listing from the seller's listings array and domain listing.\\\\n     * If the listing has no bids, it is deleted from the exchange.\\\\n     */\\\\n    function _pruneListing(Listing storage _listing, uint256 _listingId) internal {\\\\n        _listing.isActive = false;\\\\n        userListings[_listing.seller].removeStorage(_listingId);\\\\n        if (_listing.bids.length == 0) {\\\\n            delete listings[_listingId];\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3470413dda117592e3d5ff6d73a50901e64eb77df61b0617974141ac0542b707\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/AddressAllowList.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"./lib/AddressArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract AddressAllowList is Ownable {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AddressAddedToAllowlist(address indexed allowedAddress);\\\\n    event AddressRemovedFromAllowlist(address indexed allowedAddress);\\\\n    event AllowlistEnabled();\\\\n    event AllowlistDisabled();\\\\n    \\\\n    /* ============ Modifier ============ */\\\\n    modifier onlyAllowed() {\\\\n        require(isEnabled ? isAllowed[msg.sender] : true, \\\\\\\"Address is not allowed\\\\\\\");\\\\n        _;\\\\n    }\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    bool public isEnabled;                     // Boolean indicating if the allowlist is enabled\\\\n    address[] public allowedAddresses;         // Array of addresses that are allowed from taking depositors liquidity\\\\n    mapping(address => bool) public isAllowed; // Mapping of address to boolean indicating if the user is allowed\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(address[] memory _allowedAddresses) Ownable() {\\\\n        for (uint256 i = 0; i < _allowedAddresses.length; i++) {\\\\n            address allowedAddress = _allowedAddresses[i];\\\\n\\\\n            require(!isAllowed[allowedAddress], \\\\\\\"Address is already allowed\\\\\\\");\\\\n            isAllowed[allowedAddress] = true;\\\\n            emit AddressAddedToAllowlist(allowedAddress);\\\\n        }\\\\n        allowedAddresses = _allowedAddresses;\\\\n        isEnabled = true;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed\\\\n     * functions.\\\\n     *\\\\n     * @param _allowedAddresses   List of addresses allowed to call allow listed functions\\\\n     */\\\\n    function addAddressesToAllowlist(address[] memory _allowedAddresses) external onlyOwner {\\\\n        for(uint256 i = 0; i < _allowedAddresses.length; i++) {\\\\n            address allowedAddress = _allowedAddresses[i];\\\\n\\\\n            require(!isAllowed[allowedAddress], \\\\\\\"Address already on allowlist\\\\\\\");\\\\n\\\\n            isAllowed[allowedAddress] = true;\\\\n            allowedAddresses.push(allowedAddress);\\\\n\\\\n            emit AddressAddedToAllowlist(allowedAddress);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes passed addresses from an allow list. Addresses not on the allow list are unable to call\\\\n     * allow listed functions.\\\\n     *\\\\n     * @param _disallowedAddresses   List of addresses being disallowed from calling allow listed functions\\\\n     */\\\\n    function removeAddressesFromAllowlist(address[] memory _disallowedAddresses) external onlyOwner {\\\\n        for(uint256 i = 0; i < _disallowedAddresses.length; i++) {\\\\n            address disallowedAddress = _disallowedAddresses[i];\\\\n\\\\n            require(isAllowed[disallowedAddress], \\\\\\\"Address already disallowed\\\\\\\");\\\\n\\\\n            isAllowed[disallowedAddress] = false;\\\\n            allowedAddresses.removeStorage(disallowedAddress);\\\\n\\\\n            emit AddressRemovedFromAllowlist(disallowedAddress);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enable the allow list. When the allow list is enabled, only approved addresses are allowed to\\\\n     * functions with onlyAllowed modifier.\\\\n     */\\\\n    function enableAllowlist() external onlyOwner {\\\\n        require(!isEnabled, \\\\\\\"Allow list is already enabled\\\\\\\");\\\\n\\\\n        isEnabled = true;\\\\n        emit AllowlistEnabled();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Disable the allow list. When the allow list is disabled, any address is allowed to call functions\\\\n     * with onlyAllowed modifier.\\\\n     */\\\\n    function disableAllowlist() external onlyOwner {\\\\n        require(isEnabled, \\\\\\\"Allow list is already disabled\\\\\\\");\\\\n\\\\n        isEnabled = false;\\\\n        emit AllowlistDisabled();\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function _getAllowedAddresses() internal view returns (address[] memory) {\\\\n        return allowedAddresses;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5a681a88a6e27db23ff879a4cf35842d008b2ce58bdd3c0c8a03028071762593\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(uint256[] memory A, uint256 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbf9f00cb29fa144868141b708c11d55b219db79cd386db886a5d72e38bbadcb0\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IDomainExchange.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface IDomainExchange {\\\\n    function registryRemoveListing(uint256 _listingId) external;\\\\n}\\\",\\\"keccak256\\\":\\\"0xe9deda400c359c1b42d10c518dc1f01605ea3a466e1be110f1f7c9be4af8253b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ITransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface ITransferDomainProcessor {\\\\n\\\\n    struct TransferProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[10] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    ) \\\\n        external \\\\n        returns (\\\\n            bytes32 dkimKeyHash, \\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        );\\\\n}\\\",\\\"keccak256\\\":\\\"0x9cf5f1b070d7bad73d8ae57f7b20d449853f96fcbb5df1a443723df41c91339d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifiedDomainRegistry {\\\\n\\\\n    struct Domain {\\\\n        address owner;\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n        address exchange;\\\\n        uint256 listingId;\\\\n    }\\\\n\\\\n    struct DomainWithId {\\\\n        bytes32 domainId;\\\\n        Domain domain;\\\\n    }\\\\n\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\\\n    \\\\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\\\n    \\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\\\n    function removeDomainListing(bytes32 _domainId) external;\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcc45329e6720b7b9df3c67985b16f8d778528f756c045ba6c2196831b40afe92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523462000037576200002562000018620001e5565b94939093929192620002cd565b6040516154ee6200089382396154ee90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200007457604052565b6200003c565b90620000916200008960405190565b928362000052565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200003757565b905051906200009182620000a2565b80620000ad565b905051906200009182620000c4565b6001600160401b038111620000745760208091020190565b909291926200010b6200010582620000da565b6200007a565b93818552602080860192028301928184116200003757915b838310620001315750505050565b60208091620001418486620000b5565b81520192019162000123565b9080601f83011215620000375781516200009f92602001620000f2565b91909160c0818403126200003757620001848382620000b5565b92620001948160208401620000cb565b92604090620001a683838601620000b5565b93620001b68460608301620000cb565b93620001c68160808401620000cb565b9360018060a0850151921b03811162000037576200009f92016200014d565b6200020862005d8180380380620001fc816200007a565b9283398101906200016a565b909192939495565b90600019905b9181191691161790565b6200009f6200009f6200009f9290565b90620002446200009f6200024c9262000220565b825462000210565b9055565b906001600160a01b039062000216565b6200009f9062000093906001600160a01b031682565b6200009f9062000260565b6200009f9062000276565b90620002a06200009f6200024c9262000281565b825462000250565b9060ff9062000216565b90620002c56200009f6200024c92151590565b8254620002a8565b939192620003016200031194620002f96200030994620002f1620000919a6200034a565b600a62000230565b600b6200028c565b600e62000230565b600f62000230565b6200033662000321600162000220565b6200032e81600c62000230565b600d62000230565b6200034460006010620002b2565b6200077f565b62000355906200036f565b6200009160006004620002b2565b6200009f600162000220565b6200037a90620005c2565b620000916200038862000363565b600362000230565b634e487b7160e01b600052601160045260246000fd5b6000198114620003b65760010190565b62000390565b634e487b7160e01b600052603260045260246000fd5b90620003dc825190565b811015620003ee576020809102010190565b620003bc565b90620004009062000281565b600052602052604060002090565b156200041657565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320697320616c726561647920616c6c6f7765640000000000006044820152606490fd5b0390fd5b9160001960089290920291821b911b62000216565b9190620004896200009f6200024c9362000220565b9083546200045f565b620000919160009162000474565b818110620004ac575050565b80620004bc600060019362000492565b01620004a0565b9091828110620004d257505050565b620000919290620004ea905b92600052602060002090565b9081019101620004a0565b906801000000000000000081116200007457816200051562000091935490565b90828155620004c3565b8151916001600160401b03831162000074576200054e620004de600192620005488686620004f5565b60200190565b92049160005b838110620005625750505050565b60019060206200057d6200009f86516001600160a01b031690565b940193818401550162000554565b9062000091916200051f565b9060ff60a01b9060a01b62000216565b90620005ba6200009f6200024c92151590565b825462000597565b620005cc620006b7565b600091620005da8362000220565b620005e76200009f845190565b8110156200069b57806200061162000604620006959386620003d2565b516001600160a01b031690565b620006546002620006406200063a620006366200062f8685620003f4565b5460ff1690565b1590565b6200040e565b6200064e83600192620003f4565b620002b2565b620006807f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379162000281565b906200068b60405190565b600090a2620003a6565b620005da565b5091620006ae620000919260016200058b565b600190620005a7565b620000913362000830565b62000830565b6200009190620006d7620007dc565b62000754565b620000936200009f6200009f9290565b6200009f90620006dd565b156200070057565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6200009190620006c26200076d620000936000620006ed565b6001600160a01b0383161415620006f8565b6200009190620006c8565b156200079257565b60405162461bcd60e51b8152806200045b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b62000091620007ea62000824565b62000806620007f93362000093565b916001600160a01b031690565b146200078a565b6200009f9062000093565b6200009f90546200080d565b6200009f600062000818565b6200083c600062000818565b906200084a8160006200028c565b620008816200087a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000281565b9162000281565b916200088c60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c80630373c0bf1461035257806303f693541461034d5780630d81539c146103485780630eaaf4c8146103435780630f2bc8b31461033e5780631756c30e146103395780631ce59f811461033457806321f67fbb1461032f5780632ac44f121461032a5780632f6db23814610325578063392e53cd146103205780633ec622791461031b5780634423c5f11461031657806346904840146103115780634f20fe5d1461030c5780635c975abb1461030757806364b55bed146103025780636759789f146102fd5780636aa633b6146102f85780636c2c9c7d146102f35780636caacbe7146102ee578063715018a6146102e95780637e064092146102e45780637e7a9c6c146102df5780637f17caa7146102da57806381c14314146102d557806386cfa7d3146102d057806387547367146102cb578063887f495a146102c65780638da5cb5b146102c15780639012c4a8146102bc578063944b8b2e146102b757806396ec50c3146102b25780639d8717a8146102ad578063a15ce280146102a8578063a8ef333f146102a3578063ad9287631461029e578063babcc53914610299578063bb46acd314610294578063bca0b9101461028f578063c0c53b8b1461028a578063c6a2aac814610285578063cf8e629a14610280578063ddca3f431461027b578063de74e57b14610276578063e38df96d14610271578063e6282c6e1461026c578063eb18a9d814610267578063f15851e614610262578063f160d3691461025d578063f2fde38b146102585763f6cda469036103c9576116f3565b6116db565b6116c3565b6116ab565b611690565b611678565b61165d565b61161a565b611474565b611450565b611438565b61141f565b6113dd565b6113b7565b611382565b611353565b611338565b611318565b6112b0565b6111c3565b61118e565b611151565b61112c565b611113565b6110cb565b6110af565b611012565b610ffa565b610fdf565b610fbb565b610fa3565b610f8b565b610ee3565b610ebc565b610e89565b610d31565b610cae565b610c87565b610bf9565b610b9e565b610963565b610935565b6108f7565b6108bb565b6108a3565b61088b565b610873565b610858565b610834565b6107fc565b6106da565b610682565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761038e57604052565b610357565b906103a76103a060405190565b928361036d565b565b6001600160401b03811161038e5760208091020190565b805b036103c957565b600080fd5b905035906103a7826103c0565b909291926103f06103eb826103a9565b610393565b93818552602080860192028301928184116103c957915b8383106104145750505050565b6020809161042284866103ce565b815201920191610407565b9080601f830112156103c957816020610448933591016103db565b90565b906020828203126103c95781356001600160401b0381116103c957610448920161042d565b9052565b6001600160a01b031690565b60005b8381106104935750506000910152565b8181015183820152602001610483565b6104c46104cd6020936104d7936104b8815190565b80835293849260200190565b95869101610480565b601f01601f191690565b0190565b906104fb6104f46104ea845190565b8084529260200190565b9260200190565b9060005b81811061050c5750505090565b9091926105296105226001928651815260200190565b9460200190565b9291016104ff565b80516001600160a01b031682526104489161012061058161014083016020858101516001600160a01b03169085015261056f60408601516040860152565b606085015184820360608601526104a3565b9261059160808201516080850152565b6105a060a082015160a0850152565b6105af60c082015160c0850152565b6105be60e082015160e0850152565b610100818101511515908401520151906101208184039101526104db565b8051825261044891604081019160200151906020818403910152610531565b90610448916105dc565b9061061b610611835190565b8083529160200190565b908161062d6020830284019460200190565b926000915b83831061064157505050505090565b9091929394602061066461065d838560019503875289516105fb565b9760200190565b9301930191939290610632565b602080825261044892910190610605565b346103c9576106a961069d61069836600461044b565b613266565b60405191829182610671565b0390f35b60009103126103c957565b610448916008021c81565b9061044891546106b8565b6104486000600c6106c3565b346103c9576106ea3660046106ad565b6106a96106f56106ce565b6040515b9182918290815260200190565b6001600160a01b0381166103c2565b905035906103a782610706565b6001600160401b03811161038e57602090601f01601f19160190565b90826000939282370152565b9092919261075a6103eb82610722565b938185526020850190828401116103c9576103a79261073e565b9080601f830112156103c9578160206104489335910161074a565b909160c0828403126103c9576107a583836103ce565b926107b381602085016103ce565b926107c182604083016103ce565b926107cf8360608401610715565b926080830135906001600160401b0382116103c9576107f381610448938601610774565b9360a0016103ce565b346103c95761081b61080f36600461078f565b94939093929192611b75565b604051005b906020828203126103c957610448916103ce565b346103c95761081b610847366004610820565b612961565b6104486000600f6106c3565b346103c9576108683660046106ad565b6106a96106f561084c565b346103c95761081b610886366004610820565b61258d565b346103c95761089b3660046106ad565b61081b61281a565b346103c9576108b33660046106ad565b61081b612be6565b346103c95761081b6108ce366004610820565b61282f565b90816102409103126103c95790565b90610240828203126103c957610448916108d3565b346103c95761081b61090a3660046108e2565b612106565b610448916008021c5b60ff1690565b90610448915461090f565b6104486000601061091e565b346103c9576109453660046106ad565b6106a9610950610929565b6040515b91829182901515815260200190565b346103c9576109733660046106ad565b61081b612b78565b6104486104486104489290565b906109929061097b565b600052602052604060002090565b6104489081565b61044890546109a0565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156109e7575b60208310146109e257565b6109b1565b91607f16916109d7565b80546000939291610a0e610a04836109c7565b8085529360200190565b9160018116908115610a605750600114610a2757505050565b610a3a9192939450600052602060002090565b916000925b818410610a4c5750500190565b805484840152602090930192600101610a3f565b92949550505060ff1916825215156020020190565b90610448916109f1565b906103a7610a9992610a9060405190565b93848092610a75565b038361036d565b61044890610918565b6104489054610aa0565b610abe906007610988565b90610ad082546001600160a01b031690565b91610add600182016109a7565b91610aea60028301610a7f565b91610af7600382016109a7565b91610b04600483016109a7565b91610b11600582016109a7565b916104486007610b23600685016109a7565b9301610aa9565b93989795610b8860e096610b81610b7988610b9698610b6c6103a79e99610b65610b8f9a600061010087019601906001600160a01b03169052565b60208d0152565b8a820360408c01526104a3565b9c6060890152565b6080870152565b60a0850152565b60c0830152565b019015159052565b346103c9576106a9610bb9610bb4366004610820565b610ab3565b94610bcc98969894919493929360405190565b98899889610b2a565b610448916008021c610474565b906104489154610bd5565b6104486000600b610be2565b346103c957610c093660046106ad565b6106a9610c14610bed565b6040515b918291826001600160a01b03909116815260200190565b90610c3e6104f46104ea845190565b9060005b818110610c4f5750505090565b909192610c6e61052260019286516001600160a01b0316815260200190565b929101610c42565b602080825261044892910190610c2f565b346103c957610c973660046106ad565b6106a9610ca26136f8565b60405191829182610c76565b346103c957610cbe3660046106ad565b6106a96109506118fa565b634e487b7160e01b600052603260045260246000fd5b8054821015610d0257610cf9600191600052602060002090565b91020190600090565b610cc9565b60016000610d13825490565b831015610d2e575061044891610d2891610cdf565b90610be2565b80fd5b346103c9576106a9610c14610d47366004610820565b610d07565b906020828203126103c95761044891610715565b80516001600160a01b03168252906104489060e080610d9e6101008401610d8c60208801516020870152565b604087015185820360408701526104a3565b94610dae60608201516060860152565b610dbd60808201516080860152565b610dcc60a082015160a0860152565b610ddb60c082015160c0860152565b01511515910152565b805182529061044890604080610e096060840160208701518582036020870152610d60565b9401511515910152565b9061044891610de4565b90610e29610611835190565b9081610e3b6020830284019460200190565b926000915b838310610e4f57505050505090565b90919293946020610e6b61065d83856001950387528951610e13565b9301930191939290610e40565b602080825261044892910190610e1d565b346103c9576106a9610ea4610e9f366004610d4c565b6134df565b60405191829182610e78565b6104486014600061091e565b346103c957610ecc3660046106ad565b6106a9610950610eb0565b6104486000600d6106c3565b346103c957610ef33660046106ad565b6106a96106f5610ed7565b90929192610f0e6103eb826103a9565b93818552602080860192028301928184116103c957915b838310610f325750505050565b60208091610f408486610715565b815201920191610f25565b9080601f830112156103c95781602061044893359101610efe565b906020828203126103c95781356001600160401b0381116103c9576104489201610f4b565b346103c95761081b610f9e366004610f66565b614f6c565b346103c957610fb33660046106ad565b61081b611743565b346103c95761081b610fce366004610820565b612f05565b6104486000600e6106c3565b346103c957610fef3660046106ad565b6106a96106f5610fd3565b346103c95761081b61100d366004610f66565b614e73565b346103c9576110223660046106ad565b61081b612788565b91906040838203126103c957610448906110448185610715565b936020016103ce565b61044890610474906001600160a01b031682565b6104489061104d565b61044890611061565b906109929061106a565b61108b600691600092611073565b90611094825490565b831015610d2e5750610448916110a991610cdf565b906106c3565b346103c9576106a96106f56110c536600461102a565b9061107d565b346103c95761081b6110de366004610d4c565b612d36565b90916060828403126103c9576104486110fc84846103ce565b9361110a81602086016103ce565b93604001610715565b346103c95761081b6111263660046110e3565b91612449565b346103c95761113c3660046106ad565b6106a9610c146000546001600160a01b031690565b346103c95761081b611164366004610820565b612dda565b61044860006011610be2565b6104709061106a565b6020810192916103a79190611175565b346103c95761119e3660046106ad565b6106a96111a9611169565b6040519182918261117e565b61108b600891600092611073565b346103c9576106a96106f56111d936600461102a565b906111b5565b906111eb610611835190565b90816111fd6020830284019460200190565b926000915b83831061121157505050505090565b9091929394602061122d61065d83856001950387528951610e13565b9301930191939290611202565b90610448916111df565b90611250610611835190565b90816112626020830284019460200190565b926000915b83831061127657505050505090565b9091929394602061129261065d8385600195038752895161123a565b9301930191939290611267565b602080825261044892910190611244565b346103c9576106a96112cb6112c636600461044b565b6135ce565b6040519182918261129f565b916060838303126103c9576112ec82846103ce565b926112fa83602083016103ce565b9260408201356001600160401b0381116103c9576104489201610774565b61081b6113263660046112d7565b91611c76565b61044860006012610be2565b346103c9576113483660046106ad565b6106a96111a961132c565b346103c95761081b611366366004610820565b612fc9565b6104489061137d600291600092611073565b61091e565b346103c9576106a9610950611398366004610d4c565b61136b565b91906040838203126103c9576104489061104481856103ce565b61081b6113c536600461139d565b90612695565b6104489061137d600991600092611073565b346103c9576106a96109506113f3366004610d4c565b6113cb565b90916060828403126103c9576104486114118484610715565b9361110a8160208601610715565b346103c95761081b6114323660046113f8565b91612b5a565b346103c9576114483660046106ad565b61081b615049565b346103c9576114603660046106ad565b61081b6150f4565b6104486000600a6106c3565b346103c9576114843660046106ad565b6106a96106f5611468565b805460009392916114a2610a04836109c7565b9160018116908115610a6057506001146114bb57505050565b6114ce9192939450600052602060002090565b916000925b8184106114e05750500190565b8054848401526020909301926001016114d3565b906104489161148f565b906103a7610a999261150f60405190565b938480926114f4565b611523906005610988565b80546001600160a01b03169161154360018301546001600160a01b031690565b91611550600282016109a7565b9161155d600383016114fe565b9161156a600482016109a7565b91611577600583016109a7565b91611584600682016109a7565b916104486008610b23600785016109a7565b9499989690610100966116056115fd61160c93610b96986115f06103a79e996115e96116139a60208f6115da61012082019860008301906001600160a01b03169052565b01906001600160a01b03169052565b60408d0152565b8a820360608c01526104a3565b9c6080890152565b60a0870152565b60c0850152565b60e0830152565b346103c9576106a9611635611630366004610820565b611518565b9561164899979995919594929460405190565b998a998a611596565b61044860016010610be2565b346103c95761166d3660046106ad565b6106a96111a9611651565b346103c95761081b61168b366004610820565b612454565b346103c9576106a961069d6116a6366004610d4c565b613312565b346103c95761081b6116be366004610820565b612243565b346103c95761081b6116d6366004610d4c565b612e3d565b346103c95761081b6116ee366004610d4c565b611864565b346103c95761081b611706366004610d4c565b612d8c565b61171361179f565b6103a7611731565b6104746104486104489290565b6104489061171b565b6103a761173e6000611728565b61189d565b6103a761170b565b1561175257565b60405162461bcd60e51b81528061179b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6103a76117b46000546001600160a01b031690565b6117cd6117c033610474565b916001600160a01b031690565b1461174b565b6103a7906117df61179f565b61183f565b156117eb57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6103a79061173e6118536104746000611728565b6001600160a01b03831614156117e4565b6103a7906117d3565b906001600160a01b03905b9181191691161790565b906118926104486118999261106a565b825461186d565b9055565b6000546001600160a01b0316906118b5816000611882565b6118e86118e27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361106a565b9161106a565b916118f260405190565b80805b0390a3565b6104486004610aa9565b6104489060a01c610918565b6104489054611904565b1561192157565b60405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc81b9bdd08185b1b1bddd95960521b6044820152606490fd5b906103a795949392916119726000611910565b156119975761199261198d611988336002611073565b610aa9565b61191a565b6119ed565b611992600161191a565b156119a857565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b906103a79594939291611a08611a036010610aa9565b6119a1565b906103a79594939291611a19611bc2565b611a71565b9081526040810192916103a79160200152565b6040513d6000823e3d90fd5b611a6a6103a794611a63606094989795611a5c608086019a6000870152565b6020850152565b6040830152565b0190611175565b9385611a9791969396611a8e611a868761106a565b858a8a6138e9565b85888589613dc3565b91611ab2611aad6011546001600160a01b031690565b61106a565b6327d335a890803b156103c957611ad891600091611acf60405190565b93849260e01b90565b8252818381611aeb8a8d60048401611a1e565b03925af18015611b7057611b52575b50611b4d3394611b3a611b36611b307f77a8be0890be6d79729c684636469d83d455e267a0bf0c9bc2463d8db867a5419761097b565b9761106a565b9790565b97611b4460405190565b94859485611a3d565b0390a4565b611b6a906000611b62818361036d565b8101906106ad565b38611afa565b611a31565b906103a7959493929161195f565b15611b8a57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6103a7611bd4611bd06118fa565b1590565b611b83565b90611bec9291611be7611cf8565b611bf4565b6103a7611d34565b906103a79291611c02611bc2565b9091611c2a9034938484611c1a610448826005610988565b611c25848483613f91565b61414e565b903391611b4d611c6c611c66611c607f6d2b783673dbbf046f2e5a1f3c92ce62c29a0f5385f2b1f0eaf19019ef28cb559461097b565b9461097b565b9461106a565b946106f960405190565b906103a79291611bd9565b610448600261097b565b15611c9257565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9060001990611878565b90611cf16104486118999261097b565b8254611cd7565b6103a7611d0560036109a7565b611d23611d10611c81565b918290611d1c565b9190565b1415611c8b565b6003611ce1565b610448600161097b565b6103a7611d23611d2a565b6103a790611d50611a036010610aa9565b611bec90611d5c611cf8565b6103a790611d68611bc2565b611f2e565b6104489060081c610474565b6104489054611d6d565b905051906103a7826103c0565b90929192611da06103eb82610722565b938185526020850190828401116103c9576103a792610480565b9080601f830112156103c957815161044892602001611d90565b6080818303126103c957611de88282611d83565b92611df68360208401611d83565b926040830151906001600160401b0382116103c957611e1a81610448938601611dba565b93606001611d83565b9037565b6103a791604091611e23565b906104d781604093611e27565b611e4c611d1860029390565b806000925b848410611e5f575050505050565b611e7b611e74600192611e6f8690565b611e33565b9360400190565b93019291611e51565b6103a79161014091611e23565b6103a7919061010090611ecf90611ea88482611e27565b611eb9604082016040860190611e40565b611eca60c0820160c0860190611e27565b820190565b910190611e84565b610240810192916103a79190611e91565b9081526040810192916103a7916020906115da565b634e487b7160e01b600052601160045260246000fd5b9190611f1e565b9290565b8203918211611f2957565b611efd565b6000611f6b91611f41611aad6010611d79565b611f60836365cd296c611f5360405190565b9687958694859360e01b90565b835260048301611ed7565b03925af18015611b70576000918291829182916120dd575b50611fbb611f95610448846007610988565b93600595611fb36104486001880198611fad8a6109a7565b90610988565b9384876143af565b611fd0611aad6011546001600160a01b031690565b90632b8a8002611fe2600483016109a7565b85546001600160a01b03165b93803b156103c9576120166000809461202161200960405190565b9889968795869460e01b90565b845260048401611ee8565b03925af1908115611b70576120719561207d93612076936120c7575b5061204a600687016109a7565b96828661206b61206560018c9701546001600160a01b031690565b946109a7565b98614557565b6148fd565b8094611f13565b926120b16120ab7f3247261fffac93019b3a34aa6692df18a5ddea75a12bf8ec4539903a608a6e4c9361097b565b9361097b565b936118f56120be60405190565b92839283611a1e565b6120d7906000611b62818361036d565b3861203d565b925090506120fd92503d8091833e6120f5818361036d565b810190611dd4565b90919238611f83565b6103a790611d3f565b611bec9061211b611cf8565b6121ad565b1561212757565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420626964206f776e65720000000000000000006044820152606490fd5b1561217357565b60405162461bcd60e51b81526020600482015260126024820152714c697374696e67206e6f742061637469766560701b6044820152606490fd5b6121bb610448826007610988565b60018101916121d16104486005611fad866109a7565b82906121f66121e783546001600160a01b031690565b6121f0336117c0565b14612120565b61220a61220560088301610aa9565b61216c565b61221f611aad6011546001600160a01b031690565b91632b8a800290611fee612235600485016109a7565b91546001600160a01b031690565b6103a79061210f565b906103a7929161225a611bc2565b612364565b1561226657565b60405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74206c697374696e67206f776e657200000000006044820152606490fd5b156122b257565b60405162461bcd60e51b8152602060048201526024808201527f41736b207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b1561230a57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c69642073616c652045544820726563697069656e740000000000006044820152606490fd5b9081526040810192916103a791602090611a6a565b919091612375610448826005610988565b9161240081600161238d86546001600160a01b031690565b3396906123a39061239d896117c0565b1461225f565b6123b261220560088301610aa9565b6123cd6123c4610448600784016109a7565b895b10156122ab565b6123ed6123dd6104746000611728565b6123e68561106a565b1415612303565b6123fa8860068301611ce1565b01611882565b61243361242d7f6df0cec5e0539cca31fe823df048a8d5834ba5dc079fa1d38e5157f00f9d085b9361097b565b9361106a565b936118f561244060405190565b9283928361234f565b906103a7929161224c565b612462610448826005610988565b80546001600160a01b031633919061247d9061239d846117c0565b61248c61220560088301610aa9565b6124a1611aad6011546001600160a01b031690565b90636e74da686124b3600483016109a7565b833b156103c9576124e9936124db600080946124ce60405190565b9788958694859360e01b90565b835260048301526024820190565b03925af1908115611b7057612505928592612532575b50614ca6565b6118e86118e27f5832f888aea12cc23bd891f2d9fd4bd01b8ce0e22898b6e7cee1519f5bd469549361097b565b612542906000611b62818361036d565b386124ff565b1561254f57565b60405162461bcd60e51b815260206004820152601660248201527543616c6c6572206973206e6f7420726567697374727960501b6044820152606490fd5b6125cb8161259f610448826005610988565b6125c66125b7611aad6011546001600160a01b031690565b6125c0336117c0565b14612548565b614ca6565b6125f57ff7504a55c42715ea3e852b679d6453ecfe02acbddb4d0652aa251d4458b7cc219161097b565b906125ff60405190565b80805b0390a2565b90611bec91612614611cf8565b906103a791612621611bc2565b612659826006612635610448856007610988565b6126538361264d6104486005611fad600187016109a7565b8361465d565b01611ce1565b33906118f561268b61242d7f8283dd04c4a2b6691bd80232f254e0ad876b8bb149938d3e7ced5c6e8a35b6149361097b565b936106f960405190565b906103a791612607565b6126ac611a036010610aa9565b6103a7612720565b156126bb57565b60405162461bcd60e51b815260206004820152601e60248201527f496e7374616e742061636365707420616c726561647920656e61626c656400006044820152606490fd5b9060ff90611878565b9061271961044861189992151590565b8254612700565b3380612751600961273f61273a611bd06119888685611073565b6126b4565b61274c6001948592611073565b612709565b61260261277e7f2e259e0564e75f0e10ce0e012a5ce2528ae513b0188b619bcc581b8ba8db70329261106a565b9261095460405190565b6103a761269f565b61279d611a036010610aa9565b6103a76127f1565b156127ac57565b60405162461bcd60e51b815260206004820152601f60248201527f496e7374616e742061636365707420616c72656164792064697361626c6564006044820152606490fd5b3380612751600961280d6128086119888584611073565b6127a5565b61274c6000948592611073565b6103a7612790565b91908201809211611f2957565b6128a1600060076128936128466104488684610988565b91612889600561286d612867610448612861600189016109a7565b84610988565b86614781565b6128814261287b600f6109a7565b90612822565b908501611ce1565b6001908301612709565b01546001600160a01b031690565b6118e86118e27f9da9db6af7fcfa5edbaa006b61a744d33fe4651a4c594cddd3e9a7e757ecd8d59361097b565b611bec906128da611cf8565b6128e8610448826007610988565b9061291d6129006104486005611fad600187016109a7565b61290a8185614872565b82612917600686016109a7565b94614c0b565b33906129318361292c8461106a565b612a59565b6118f561268b61242d7f8f8619524e8d462cead34604bd2247ede24175801481e4d0b8059ac8aa41c3019361097b565b6103a7906128ce565b1561297157565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b906129c36103eb83610722565b918252565b3d156129e2576129d73d6129b6565b903d6000602084013e565b606090565b156129ee57565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b60006103a792612a7a8293611aad612a703061106a565b849031101561296a565b90612a8460405190565b90818003925af1612a936129c8565b506129e7565b906103a79291612aa761179f565b612b18565b15612ab357565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b90610100600160a81b039060081b611878565b90612b116104486118999261106a565b8254612aee565b612b4e9291612b40612b4792612b39612b34611bd06010610aa9565b612aac565b6010612b01565b6011611882565b6012611882565b6103a760016010612709565b906103a79291612a99565b612b6d61179f565b6103a76103a7612bcb565b6103a7612b65565b612b88611bc2565b6103a7612b9760016004612709565b33612bc67f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610c1860405190565b0390a1565b6103a7612b80565b612bdb61179f565b6103a76103a7612c34565b6103a7612bd3565b612bf6612c7f565b6103a7612c0560006004612709565b33612bc67f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610c1860405190565b6103a7612bee565b15612c4357565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b6103a7612c8a6118fa565b612c3c565b6103a790612c9b61179f565b612cde565b15612ca757565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b612d01612cea8261106a565b612cfa6117c06104746000611728565b1415612ca0565b612d0c816010612b01565b6125f57f9106eb309cc633a951e77bd36af34646a9df8e6ade485938c34e3844a37b79da9161106a565b6103a790612c8f565b6103a790612d4b61179f565b612d57612cea8261106a565b612d62816012611882565b6125f57f9d3407c7200ba4f49e97f3d3f8250ec01c24b0ada6fa31053d71850793b739539161106a565b6103a790612d3f565b6103a790612da161179f565b612dac81600a611ce1565b612bc67f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76916106f960405190565b6103a790612d95565b6103a790612def61179f565b612e08612dff6104746000611728565b612cfa8361106a565b612e1381600b611882565b6125f57f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc29161106a565b6103a790612de3565b6103a790612e5261179f565b612eb8565b15612e5e57565b60405162461bcd60e51b815260206004820152602c60248201527f42696420736574746c656d656e7420706572696f64206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608490fd5b612ecc612ec5600061097b565b8211612e57565b612ed781600e611ce1565b612bc67f09a165ff77cf0f319f9ece89bc6dbe2a469a0da2640c9e6b501132846843daf5916106f960405190565b6103a790612e46565b6103a790612f1a61179f565b612f7c565b15612f2657565b60405162461bcd60e51b815260206004820152602860248201527f42696420726566756e6420706572696f64206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b612f90612f89600061097b565b8211612f1f565b612f9b81600f611ce1565b612bc67f90e0312fddcd5cbec358d5c7d63976e5c97d71dfb8d6cd5f2c53b0a1a043ccf0916106f960405190565b6103a790612f0e565b906129c36103eb836103a9565b6104486040610393565b610448610140610393565b612ffc612fe9565b906000825260208080808080808080808b01600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b905250565b610448612ff4565b613052612fdf565b9060008252602080830161303d613042565b61044861304a565b60005b82811061307b57505050565b602090613086613064565b818401520161306f565b906103a76130a66130a084612fd2565b936103a9565b601f19016020840161306c565b6000198114611f295760010190565b906130cb825190565b811015610d02576020809102010190565b906130f76130eb6104ea845490565b92600052602060002090565b9060005b8181106131085750505090565b90919261312c61312560019261311d876109a7565b815260200190565b9460010190565b9291016130fb565b90610448916130dc565b906103a7610a999261314f60405190565b93848092613134565b906103a76132556009613169612fe9565b9461318b61317e82546001600160a01b031690565b6001600160a01b03168752565b6131b26131a260018301546001600160a01b031690565b6001600160a01b03166020880152565b6131c86131c1600283016109a7565b6040880152565b6131de6131d7600383016114fe565b6060880152565b6131f46131ed600483016109a7565b6080880152565b61320a613203600583016109a7565b60a0880152565b613220613219600683016109a7565b60c0880152565b61323661322f600783016109a7565b60e0880152565b61324f61324560088301610aa9565b1515610100880152565b0161313e565b610120840152565b61044890613158565b90613277613272835190565b613090565b91600090836132858361097b565b613290610448845190565b81101561330257806132ac6132a86132fd93866130c2565b5190565b6132e26132db6132c46005611fad6132a8878b6130c2565b6132d66132cf612fdf565b948a860152565b61325d565b6020830152565b6132ec82896130c2565b526132f781886130c2565b506130b3565b613285565b5093505050565b6104489061313e565b61332961332e91613321606090565b506006611073565b613309565b9061333a613272835190565b91600090836133488361097b565b613353610448845190565b811015613302578061336b6132a861337c93866130c2565b6132e26132db6132c4836005610988565b613348565b6104486060610393565b610448610100610393565b61339e61338b565b906000825260208080808080808089016000815201606081520160008152016000815201600081520160005b8152016000905250565b610448613396565b6133e4613381565b90600082526020808084016133ca6133d4565b6104486133dc565b60005b82811061340e57505050565b6020906134196133f7565b8184015201613402565b906103a76134336130a084612fd2565b601f1901602084016133ff565b906103a76134cd600761345161338b565b9461346661317e82546001600160a01b031690565b61347c613475600183016109a7565b6020880152565b61348b6131c160028301610a7f565b61349a6131d7600383016109a7565b6134a96131ed600483016109a7565b6134b8613203600583016109a7565b6134c7613219600683016109a7565b01610aa9565b151560e0840152565b61044890613440565b906134ee613329836008611073565b6134fe6134f9825190565b613423565b926000918461350c8461097b565b613517610448845190565b81101561358c578061352f6132a861358793866130c2565b61357261353d826007610988565b613569611a5c6135516119888b6009611073565b9261356461355d613381565b968d880152565b6134d6565b15156040830152565b61357c828a6130c2565b526132f781896130c2565b61350c565b509450505050565b60005b8281106135a357505050565b606082820152602001613597565b906103a76135c16130a084612fd2565b601f190160208401613594565b6135de6135d9825190565b6135b1565b806000916135eb8361097b565b945b6135f8610448865190565b8610156136f057613621600961361b6136146132a88a8a6130c2565b6005610988565b01613309565b9461362d6134f9875190565b61363788866130c2565b5261364287856130c2565b5061364c8561097b565b613657610448885190565b8110156136d957806132f781886136b86136776132a86136d4978e6130c2565b613569611a5c60076135646136a96119886136928785610988565b936136a38a6128938a600994610988565b90611073565b946136b2613381565b97880152565b6136c28c8a6130c2565b51906136ce83836130c2565b526130c2565b61364c565b50929450946136e7906130b3565b949391936135ed565b935093505050565b61044861517f565b905051906103a782610706565b91909160a0818403126103c95761372460a0610393565b9260006137318284613700565b908501526020820151906001600160401b0382116103c9576137588161378b938501611dba565b6020860152604061376b82828601611d83565b90860152606061377d82828601613700565b908601526080809301611d83565b90830152565b9190916040818403126103c9576137a86040610393565b9260006137b58284611d83565b9085015260208201516001600160401b0381116103c9576132db920161370d565b906020828203126103c95781516001600160401b0381116103c9576104489201613791565b1561380257565b60405162461bcd60e51b815260206004820152601a60248201527f43616c6c6572206973206e6f7420646f6d61696e206f776e65720000000000006044820152606490fd5b1561384e57565b60405162461bcd60e51b815260206004820152602160248201527f446f6d61696e20616c7265616479206c6973746564206f6e20726567697374726044820152607960f81b6064820152608490fd5b156138a457565b60405162461bcd60e51b815260206004820152601960248201527f4d696e696d756d20626964207072696365206973207a65726f000000000000006044820152606490fd5b60006139269194939294613908611aad6011546001600160a01b031690565b6124db631a24254761391960405190565b9586948593849360e01b90565b03915afa938415611b70576104746123e6936123c6611d18613985606060206103a79b6117c0996000916139bf575b5001805151613976906001600160a01b0316613970336117c0565b146137fb565b5101516001600160a01b031690565b946104486139b860006139b361399a82611728565b996139ad6001600160a01b038c166117c0565b14613847565b61097b565b821161389d565b6139da913d8091833e6139d2818361036d565b8101906137d6565b38613955565b369037565b906103a76139f56130a084612fd2565b601f1901602084016139e0565b634e487b7160e01b600052600060045260246000fd5b90611cf16104486118999290565b9160001960089290920291821b911b611878565b9190613a4b6104486118999361097b565b908354613a26565b6103a791600091613a3a565b818110613a6a575050565b80613a786000600193613a53565b01613a5f565b9190601f8111613a8d57505050565b613a9f6103a793600052602060002090565b906020601f840181900483019310613ac2575b6020601f909101045b0190613a5f565b9091508190613ab2565b600019600883021c1916906002021790565b90613ae7815190565b906001600160401b03821161038e57613b0a82613b0485546109c7565b85613a7e565b602090601f8311600114613b3857611899929160009183613b2d575b5050613acc565b015190503880613b26565b601f19831691613b4d85600052602060002090565b9260005b818110613b8b57509160029391856001969410613b72575b50505002019055565b01516000196008601f8516021c19169055388080613b69565b91936020600181928787015181550195019201613b51565b906103a791613ade565b81810292918115918404141715611f2957565b818110613bcb575050565b80613bd96000600193613a53565b01613bc0565b90613bf290600019906020036008021c90565b8154169055565b9091828110613c0757505050565b6103a79290613c15906130eb565b9081019101613bc0565b90600160401b811161038e5781613c376103a7935490565b90828155613bf9565b8151916001600160401b03831161038e57613c6a6130eb600192613c648686613c1f565b60200190565b92049160005b838110613c7d5750505050565b6001906020613c8d610448865190565b9401938184015501613c70565b906103a791613c40565b6103a79190613d8a9061012090600990613ccf81613cc987516001600160a01b031690565b90611882565b613cea60018201613cc960208801516001600160a01b031690565b613d0260028201613cfc604088015190565b90613a18565b613d1a60038201613d14606088015190565b90613ba3565b613d2c60048201613cfc608088015190565b613d4460058201613d3e60a088015190565b90611ce1565b613d5660068201613d3e60c088015190565b613d6860078201613d3e60e088015190565b613d8360088201613d7d610100880151151590565b90612709565b0192015190565b90613c9a565b906103a791613ca4565b90815491600160401b83101561038e5782613dbd9160016103a795018155610cdf565b90613a3a565b919295949095613dd1600090565b50613ddc600d6109a7565b93849733944290600198600096613df28861097b565b613dfb906139e5565b9689613e05612fe9565b998a0190613e1b91906001600160a01b03169052565b6001600160a01b0316602089015260408801526060870152608086015260a085015260c084015260e0830152841515610100830152610120820152613e61836005610988565b90613e6b91613d90565b613e76906006611073565b90613e8091613d9a565b613e8a600d6109a7565b90613e949061097b565b613e9d91612822565b6103a790600d611ce1565b15613eaf57565b60405162461bcd60e51b8152602060048201526016602482015275131a5cdd1a5b99c8191bd95cc81b9bdd08195e1a5cdd60521b6044820152606490fd5b15613ef457565b60405162461bcd60e51b8152602060048201526024808201527f426964207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b15613f4c57565b60405162461bcd60e51b815260206004820152601d60248201527f427579657220494420686173682063616e6e6f7420626520656d7074790000006044820152606490fd5b611d18610448613ffb926139b36103a79695613ff4611d186104486007613fc260008801546001600160a01b031690565b96613fdf600098613fd86117c06104748c611728565b1415613ea8565b613fee61220560088301610aa9565b016109a7565b1015613eed565b1415613f45565b9061400b815190565b906001600160401b03821161038e5761402882613b0485546109c7565b602090601f831160011461404a57611899929160009183613b2d575050613acc565b601f1983169161405f85600052602060002090565b9260005b81811061408357509160029391856001969410613b725750505002019055565b91936020600181928787015181550195019201614063565b906103a791614002565b6103a79190613d7d9060e0906007906140c981613cc987516001600160a01b031690565b6140db60018201613d3e602088015190565b6140f3600282016140ed604088015190565b9061409b565b61410560038201613cfc606088015190565b61411760048201613d3e608088015190565b61412960058201613d3e60a088015190565b61413b60068201613d3e60c088015190565b01920151151590565b906103a7916140a5565b919493909261415d600c6109a7565b93849283973393426000199160009461417461338b565b6001600160a01b0389168782015296602088015260408701526060860152608085015260a084015260c0830152151560e08201526141b3836007610988565b906141bd91614144565b6141c8906008611073565b906141d291613d9a565b600901906141df91613d9a565b6141e9600c6109a7565b6141f3600161097b565b6141fc91612822565b6103a790600c611ce1565b1561420e57565b60405162461bcd60e51b8152602060048201526012602482015271109a5908191bd95cc81b9bdd08195e1a5cdd60721b6044820152606490fd5b8015156103c2565b905051906103a782614248565b906020828203126103c95761044891614250565b1561427857565b60405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206d616e6167656420444b494d206b657920686173680000006044820152606490fd5b156142c457565b60405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420637573746f6d20444b494d206b65792068617368000000006044820152606490fd5b6104d76143219260209261431b815190565b94859290565b93849101610480565b61044891614309565b1561433a57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b1561437957565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103237b6b0b4b760911b6044820152606490fd5b80549294909391926001600160a01b03166143dc6000916143d56117c061047485611728565b1415614207565b6143fb6143f2828601546001600160a01b031690565b61239d336117c0565b61440a61220560088601610aa9565b6002840190614421611d186104486120ab856109a7565b146144ac576144a693613fee611d18946144a0611d18611f1a6003611f1a9861445e6103a79e614458611d1861044860049d6109a7565b146142bd565b61448661446a60405190565b809261447a60208301918261432a565b9081038252038261036d565b614498614491825190565b9160200190565b209b016109a7565b14614333565b14614372565b5060206144e793956144c9611aad6012546001600160a01b031690565b6124db6319d091526144da60405190565b9788948593849360e01b90565b03915afa908115611b70576103a795613fee611d18946144a0611d18611f1a6003600497614524611f1a9a6144a69d600091614529575b50614271565b61445e565b61454a915060203d8111614550575b614542818361036d565b81019061425d565b3861451e565b503d614538565b90916125c6816103a794612917600186016109a7565b1561457457565b60405162461bcd60e51b815260206004820152601860248201527f526566756e6420616c726561647920696e6974696174656400000000000000006044820152606490fd5b156145c057565b60405162461bcd60e51b8152602060048201526024808201527f4e6577207072696365206e6f742067726561746572207468616e206f6c6420706044820152637269636560e01b6064820152608490fd5b1561461857565b60405162461bcd60e51b815260206004820152601c60248201527f496e636f727265637420616d6f756e74206f66204554482073656e74000000006044820152606490fd5b611d1861044860066146cc936146a461220560086103a7999861468d6121e760008701546001600160a01b031690565b6134c761469f611bd060078801610aa9565b61456d565b01936146bc6146b5610448876109a7565b82116145b9565b6146c634956109a7565b90611f13565b14614611565b156146d957565b60405162461bcd60e51b815260206004820152601960248201527f526566756e6420706572696f64206e6f742073746172746564000000000000006044820152606490fd5b1561472557565b60405162461bcd60e51b815260206004820152602e60248201527f4c697374696e6720657870697265642e204269642063616e206265207769746860448201526d647261776e206469726563746c7960901b6064820152608490fd5b60086103a7926134c76147de936147a56121e760008301546001600160a01b031690565b6147b761469f611bd060078401610aa9565b6147d8611d18610448429361287b60046147d1600e6109a7565b92016109a7565b116146d2565b61471e565b156147ea57565b60405162461bcd60e51b81526020600482015260146024820152731499599d5b99081b9bdd081a5b9a5d1a585d195960621b6044820152606490fd5b1561482d57565b60405162461bcd60e51b815260206004820152601760248201527f526566756e6420706572696f64206e6f7420656e6465640000000000000000006044820152606490fd5b9061488e906008906134c76121e785546001600160a01b031690565b6148955750565b806148ad6148a860076103a79401610aa9565b6147e3565b6148c0611d1861044860054294016109a7565b1015614826565b610448670de0b6b3a764000061097b565b634e487b7160e01b600052601260045260246000fd5b81156148f8570490565b6148d8565b909190614939614927614919614913600a6109a7565b86613bad565b6149216148c7565b906148ee565b91614933838096611f13565b90612a59565b614943600061097b565b811161494c5750565b6103a79061292c600b546001600160a01b031690565b9190613a4b6104486118999390565b6103a791600091614962565b9060009161499b61499382600052602060002090565b928354613acc565b905555565b91929060208210156149f857601f84116001146149c257611899929350613acc565b50906149f36103a79360016149ea6149df85600052602060002090565b92601f602091010490565b82019101613a5f565b61497d565b50614a318293614a0f600194600052602060002090565b613abb6020601f860104820192601f861680614a39575b50601f602091010490565b600202179055565b614a4590888603613bdf565b38614a26565b929091600160401b821161038e5760201115614a92576020811015614a735761189991613acc565b60019160ff1916614a8984600052602060002090565b55600202019055565b60019150600202019055565b908154614aaa816109c7565b90818311614ad3575b818310614ac1575b50505050565b614aca936149a0565b38808080614abb565b614adf83838387614a4b565b614ab3565b60006103a791614a9e565b90600003614b00576103a790614ae4565b613a02565b60006103a791613c1f565b90600003614b00576103a790614b05565b600060096103a7928280820155826001820155614b418360028301614971565b614b4e8360038301614aef565b614b5b8360048301614971565b614b688360058301613a53565b614b758360068301613a53565b614b828360078301613a53565b82600882015501614b10565b90600003614b00576103a790614b21565b600080825590600790614bb58360018301613a53565b614bc28360028301614aef565b614bcf8360038301614971565b614bdc8360048301613a53565b614be98360058301613a53565b614bf68360068301613a53565b0155565b90600003614b00576103a790614b9f565b600091614c6a916103a794614c55611bd06008614c4686614c41610448614c3b8c8a01546001600160a01b031690565b85611073565b6153e9565b60098401936134c787866153e9565b9081614c90575b50614c6f575b506007610988565b614bfa565b83614c85614c8a92611fad6001600592016109a7565b614b8e565b38614c62565b549050614c9f611d188661097b565b1438614c5c565b614cdf6009600092614cbb8460088301612709565b614cda85614c4161044860066136a3898701546001600160a01b031690565b015490565b614ceb611d188361097b565b14614cf4575050565b614c856103a7926005610988565b6103a790614d0e61179f565b614dba565b15614d1a57565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320616c7265616479206f6e20616c6c6f776c697374000000006044820152606490fd5b916001600160a01b0360089290920291821b911b611878565b9190614d896104486118999361106a565b908354614d5f565b90815491600160401b83101561038e5782614db49160016103a795018155610cdf565b90614d78565b90614dc5600061097b565b614dd0610448845190565b811015614e6e5780614df5614de8614e6993866130c2565b516001600160a01b031690565b614e2c81614e27816104486002614e1a614e15611bd06119888685611073565b614d13565b61274c6001938492611073565b614d91565b614e567f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379161106a565b90614e6060405190565b600090a26130b3565b614dc5565b509050565b6103a790614d02565b6103a790614e8861179f565b614ed9565b15614e9457565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320616c726561647920646973616c6c6f7765640000000000006044820152606490fd5b906000614ee58161097b565b614ef0610448855190565b811015614f665780614f08614de8614f6193876130c2565b614f2c8461274c836002614f27614f226119888484611073565b614e8d565b611073565b614f37816001615245565b614e567ff27dccb929dd3f4dba2d3ffc29a7c74e35995e051a268a7c466f9ddabdf81eac9161106a565b614ee5565b50509050565b6103a790614e7c565b614f7d61179f565b6103a7614ff7565b15614f8c57565b60405162461bcd60e51b815260206004820152601d60248201527f416c6c6f77206c69737420697320616c726561647920656e61626c65640000006044820152606490fd5b9060ff60a01b9060a01b611878565b90614ff061044861189992151590565b8254614fd1565b61500c615007611bd06000611910565b614f85565b61501860016000614fe0565b7f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec361504260405190565b8080612bc6565b6103a7614f75565b61505961179f565b6103a76150ad565b1561506857565b60405162461bcd60e51b815260206004820152601e60248201527f416c6c6f77206c69737420697320616c72656164792064697361626c656400006044820152606490fd5b6150bf6150ba6000611910565b615061565b6150ca600080614fe0565b7f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0761504260405190565b6103a7615051565b9061510b6130eb6104ea845490565b9060005b81811061511c5750505090565b90919261514a61312560019261513987546001600160a01b031690565b6001600160a01b0316815260200190565b92910161510f565b90610448916150fc565b906103a7610a999261516d60405190565b93848092615152565b6104489061515c565b6104486001615176565b906151986130eb6104ea845490565b9060005b8181106151a95750505090565b9091926151c661312560019261513987546001600160a01b031690565b92910161519c565b9061044891615189565b906103a7610a99926151e960405190565b938480926151ce565b610448906151d8565b634e487b7160e01b600052603160045260246000fd5b6103a791600091614d78565b8054801561524057600019019061523d6152378383610cdf565b90615211565b55565b6151fb565b61525a61526192615255836151f2565b6152f8565b9092901590565b156152a35760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a7916152bc6152b2835490565b6146c6600161097b565b908181036152cc575b505061521d565b614db46152df610d286152e69486610cdf565b9184610cdf565b38806152c5565b61044860001961097b565b919082519260006153088161097b565b855b8110156153525761531e614de882856130c2565b6153306001600160a01b0386166117c0565b146153485761534161530a916130b3565b9050615308565b9450505050600190565b5093505050611d186152ed565b9061536e6130eb6104ea845490565b9060005b81811061537f5750505090565b90919261539461312560019261311d876109a7565b929101615372565b906104489161535f565b906103a7610a99926153b760405190565b9384809261539c565b610448906153a6565b8054801561524057600019019061523d6153e38383610cdf565b90613a53565b61525a6153fe926153f9836153c0565b615479565b156154405760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a79161544f6152b2835490565b9081810361545f575b50506153c9565b613dbd6152df6110a96154729486610cdf565b3880615458565b919082519260006154898161097b565b855b8110156153525761549f6132a882856130c2565b8414615348576154b161548b916130b3565b905061548956fea264697066735822122003aeb335a6d381b0a582f93c9d1aab7b6e89b54509710141d9511d69f98051bd64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80630373c0bf1461035257806303f693541461034d5780630d81539c146103485780630eaaf4c8146103435780630f2bc8b31461033e5780631756c30e146103395780631ce59f811461033457806321f67fbb1461032f5780632ac44f121461032a5780632f6db23814610325578063392e53cd146103205780633ec622791461031b5780634423c5f11461031657806346904840146103115780634f20fe5d1461030c5780635c975abb1461030757806364b55bed146103025780636759789f146102fd5780636aa633b6146102f85780636c2c9c7d146102f35780636caacbe7146102ee578063715018a6146102e95780637e064092146102e45780637e7a9c6c146102df5780637f17caa7146102da57806381c14314146102d557806386cfa7d3146102d057806387547367146102cb578063887f495a146102c65780638da5cb5b146102c15780639012c4a8146102bc578063944b8b2e146102b757806396ec50c3146102b25780639d8717a8146102ad578063a15ce280146102a8578063a8ef333f146102a3578063ad9287631461029e578063babcc53914610299578063bb46acd314610294578063bca0b9101461028f578063c0c53b8b1461028a578063c6a2aac814610285578063cf8e629a14610280578063ddca3f431461027b578063de74e57b14610276578063e38df96d14610271578063e6282c6e1461026c578063eb18a9d814610267578063f15851e614610262578063f160d3691461025d578063f2fde38b146102585763f6cda469036103c9576116f3565b6116db565b6116c3565b6116ab565b611690565b611678565b61165d565b61161a565b611474565b611450565b611438565b61141f565b6113dd565b6113b7565b611382565b611353565b611338565b611318565b6112b0565b6111c3565b61118e565b611151565b61112c565b611113565b6110cb565b6110af565b611012565b610ffa565b610fdf565b610fbb565b610fa3565b610f8b565b610ee3565b610ebc565b610e89565b610d31565b610cae565b610c87565b610bf9565b610b9e565b610963565b610935565b6108f7565b6108bb565b6108a3565b61088b565b610873565b610858565b610834565b6107fc565b6106da565b610682565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761038e57604052565b610357565b906103a76103a060405190565b928361036d565b565b6001600160401b03811161038e5760208091020190565b805b036103c957565b600080fd5b905035906103a7826103c0565b909291926103f06103eb826103a9565b610393565b93818552602080860192028301928184116103c957915b8383106104145750505050565b6020809161042284866103ce565b815201920191610407565b9080601f830112156103c957816020610448933591016103db565b90565b906020828203126103c95781356001600160401b0381116103c957610448920161042d565b9052565b6001600160a01b031690565b60005b8381106104935750506000910152565b8181015183820152602001610483565b6104c46104cd6020936104d7936104b8815190565b80835293849260200190565b95869101610480565b601f01601f191690565b0190565b906104fb6104f46104ea845190565b8084529260200190565b9260200190565b9060005b81811061050c5750505090565b9091926105296105226001928651815260200190565b9460200190565b9291016104ff565b80516001600160a01b031682526104489161012061058161014083016020858101516001600160a01b03169085015261056f60408601516040860152565b606085015184820360608601526104a3565b9261059160808201516080850152565b6105a060a082015160a0850152565b6105af60c082015160c0850152565b6105be60e082015160e0850152565b610100818101511515908401520151906101208184039101526104db565b8051825261044891604081019160200151906020818403910152610531565b90610448916105dc565b9061061b610611835190565b8083529160200190565b908161062d6020830284019460200190565b926000915b83831061064157505050505090565b9091929394602061066461065d838560019503875289516105fb565b9760200190565b9301930191939290610632565b602080825261044892910190610605565b346103c9576106a961069d61069836600461044b565b613266565b60405191829182610671565b0390f35b60009103126103c957565b610448916008021c81565b9061044891546106b8565b6104486000600c6106c3565b346103c9576106ea3660046106ad565b6106a96106f56106ce565b6040515b9182918290815260200190565b6001600160a01b0381166103c2565b905035906103a782610706565b6001600160401b03811161038e57602090601f01601f19160190565b90826000939282370152565b9092919261075a6103eb82610722565b938185526020850190828401116103c9576103a79261073e565b9080601f830112156103c9578160206104489335910161074a565b909160c0828403126103c9576107a583836103ce565b926107b381602085016103ce565b926107c182604083016103ce565b926107cf8360608401610715565b926080830135906001600160401b0382116103c9576107f381610448938601610774565b9360a0016103ce565b346103c95761081b61080f36600461078f565b94939093929192611b75565b604051005b906020828203126103c957610448916103ce565b346103c95761081b610847366004610820565b612961565b6104486000600f6106c3565b346103c9576108683660046106ad565b6106a96106f561084c565b346103c95761081b610886366004610820565b61258d565b346103c95761089b3660046106ad565b61081b61281a565b346103c9576108b33660046106ad565b61081b612be6565b346103c95761081b6108ce366004610820565b61282f565b90816102409103126103c95790565b90610240828203126103c957610448916108d3565b346103c95761081b61090a3660046108e2565b612106565b610448916008021c5b60ff1690565b90610448915461090f565b6104486000601061091e565b346103c9576109453660046106ad565b6106a9610950610929565b6040515b91829182901515815260200190565b346103c9576109733660046106ad565b61081b612b78565b6104486104486104489290565b906109929061097b565b600052602052604060002090565b6104489081565b61044890546109a0565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156109e7575b60208310146109e257565b6109b1565b91607f16916109d7565b80546000939291610a0e610a04836109c7565b8085529360200190565b9160018116908115610a605750600114610a2757505050565b610a3a9192939450600052602060002090565b916000925b818410610a4c5750500190565b805484840152602090930192600101610a3f565b92949550505060ff1916825215156020020190565b90610448916109f1565b906103a7610a9992610a9060405190565b93848092610a75565b038361036d565b61044890610918565b6104489054610aa0565b610abe906007610988565b90610ad082546001600160a01b031690565b91610add600182016109a7565b91610aea60028301610a7f565b91610af7600382016109a7565b91610b04600483016109a7565b91610b11600582016109a7565b916104486007610b23600685016109a7565b9301610aa9565b93989795610b8860e096610b81610b7988610b9698610b6c6103a79e99610b65610b8f9a600061010087019601906001600160a01b03169052565b60208d0152565b8a820360408c01526104a3565b9c6060890152565b6080870152565b60a0850152565b60c0830152565b019015159052565b346103c9576106a9610bb9610bb4366004610820565b610ab3565b94610bcc98969894919493929360405190565b98899889610b2a565b610448916008021c610474565b906104489154610bd5565b6104486000600b610be2565b346103c957610c093660046106ad565b6106a9610c14610bed565b6040515b918291826001600160a01b03909116815260200190565b90610c3e6104f46104ea845190565b9060005b818110610c4f5750505090565b909192610c6e61052260019286516001600160a01b0316815260200190565b929101610c42565b602080825261044892910190610c2f565b346103c957610c973660046106ad565b6106a9610ca26136f8565b60405191829182610c76565b346103c957610cbe3660046106ad565b6106a96109506118fa565b634e487b7160e01b600052603260045260246000fd5b8054821015610d0257610cf9600191600052602060002090565b91020190600090565b610cc9565b60016000610d13825490565b831015610d2e575061044891610d2891610cdf565b90610be2565b80fd5b346103c9576106a9610c14610d47366004610820565b610d07565b906020828203126103c95761044891610715565b80516001600160a01b03168252906104489060e080610d9e6101008401610d8c60208801516020870152565b604087015185820360408701526104a3565b94610dae60608201516060860152565b610dbd60808201516080860152565b610dcc60a082015160a0860152565b610ddb60c082015160c0860152565b01511515910152565b805182529061044890604080610e096060840160208701518582036020870152610d60565b9401511515910152565b9061044891610de4565b90610e29610611835190565b9081610e3b6020830284019460200190565b926000915b838310610e4f57505050505090565b90919293946020610e6b61065d83856001950387528951610e13565b9301930191939290610e40565b602080825261044892910190610e1d565b346103c9576106a9610ea4610e9f366004610d4c565b6134df565b60405191829182610e78565b6104486014600061091e565b346103c957610ecc3660046106ad565b6106a9610950610eb0565b6104486000600d6106c3565b346103c957610ef33660046106ad565b6106a96106f5610ed7565b90929192610f0e6103eb826103a9565b93818552602080860192028301928184116103c957915b838310610f325750505050565b60208091610f408486610715565b815201920191610f25565b9080601f830112156103c95781602061044893359101610efe565b906020828203126103c95781356001600160401b0381116103c9576104489201610f4b565b346103c95761081b610f9e366004610f66565b614f6c565b346103c957610fb33660046106ad565b61081b611743565b346103c95761081b610fce366004610820565b612f05565b6104486000600e6106c3565b346103c957610fef3660046106ad565b6106a96106f5610fd3565b346103c95761081b61100d366004610f66565b614e73565b346103c9576110223660046106ad565b61081b612788565b91906040838203126103c957610448906110448185610715565b936020016103ce565b61044890610474906001600160a01b031682565b6104489061104d565b61044890611061565b906109929061106a565b61108b600691600092611073565b90611094825490565b831015610d2e5750610448916110a991610cdf565b906106c3565b346103c9576106a96106f56110c536600461102a565b9061107d565b346103c95761081b6110de366004610d4c565b612d36565b90916060828403126103c9576104486110fc84846103ce565b9361110a81602086016103ce565b93604001610715565b346103c95761081b6111263660046110e3565b91612449565b346103c95761113c3660046106ad565b6106a9610c146000546001600160a01b031690565b346103c95761081b611164366004610820565b612dda565b61044860006011610be2565b6104709061106a565b6020810192916103a79190611175565b346103c95761119e3660046106ad565b6106a96111a9611169565b6040519182918261117e565b61108b600891600092611073565b346103c9576106a96106f56111d936600461102a565b906111b5565b906111eb610611835190565b90816111fd6020830284019460200190565b926000915b83831061121157505050505090565b9091929394602061122d61065d83856001950387528951610e13565b9301930191939290611202565b90610448916111df565b90611250610611835190565b90816112626020830284019460200190565b926000915b83831061127657505050505090565b9091929394602061129261065d8385600195038752895161123a565b9301930191939290611267565b602080825261044892910190611244565b346103c9576106a96112cb6112c636600461044b565b6135ce565b6040519182918261129f565b916060838303126103c9576112ec82846103ce565b926112fa83602083016103ce565b9260408201356001600160401b0381116103c9576104489201610774565b61081b6113263660046112d7565b91611c76565b61044860006012610be2565b346103c9576113483660046106ad565b6106a96111a961132c565b346103c95761081b611366366004610820565b612fc9565b6104489061137d600291600092611073565b61091e565b346103c9576106a9610950611398366004610d4c565b61136b565b91906040838203126103c9576104489061104481856103ce565b61081b6113c536600461139d565b90612695565b6104489061137d600991600092611073565b346103c9576106a96109506113f3366004610d4c565b6113cb565b90916060828403126103c9576104486114118484610715565b9361110a8160208601610715565b346103c95761081b6114323660046113f8565b91612b5a565b346103c9576114483660046106ad565b61081b615049565b346103c9576114603660046106ad565b61081b6150f4565b6104486000600a6106c3565b346103c9576114843660046106ad565b6106a96106f5611468565b805460009392916114a2610a04836109c7565b9160018116908115610a6057506001146114bb57505050565b6114ce9192939450600052602060002090565b916000925b8184106114e05750500190565b8054848401526020909301926001016114d3565b906104489161148f565b906103a7610a999261150f60405190565b938480926114f4565b611523906005610988565b80546001600160a01b03169161154360018301546001600160a01b031690565b91611550600282016109a7565b9161155d600383016114fe565b9161156a600482016109a7565b91611577600583016109a7565b91611584600682016109a7565b916104486008610b23600785016109a7565b9499989690610100966116056115fd61160c93610b96986115f06103a79e996115e96116139a60208f6115da61012082019860008301906001600160a01b03169052565b01906001600160a01b03169052565b60408d0152565b8a820360608c01526104a3565b9c6080890152565b60a0870152565b60c0850152565b60e0830152565b346103c9576106a9611635611630366004610820565b611518565b9561164899979995919594929460405190565b998a998a611596565b61044860016010610be2565b346103c95761166d3660046106ad565b6106a96111a9611651565b346103c95761081b61168b366004610820565b612454565b346103c9576106a961069d6116a6366004610d4c565b613312565b346103c95761081b6116be366004610820565b612243565b346103c95761081b6116d6366004610d4c565b612e3d565b346103c95761081b6116ee366004610d4c565b611864565b346103c95761081b611706366004610d4c565b612d8c565b61171361179f565b6103a7611731565b6104746104486104489290565b6104489061171b565b6103a761173e6000611728565b61189d565b6103a761170b565b1561175257565b60405162461bcd60e51b81528061179b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6103a76117b46000546001600160a01b031690565b6117cd6117c033610474565b916001600160a01b031690565b1461174b565b6103a7906117df61179f565b61183f565b156117eb57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6103a79061173e6118536104746000611728565b6001600160a01b03831614156117e4565b6103a7906117d3565b906001600160a01b03905b9181191691161790565b906118926104486118999261106a565b825461186d565b9055565b6000546001600160a01b0316906118b5816000611882565b6118e86118e27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361106a565b9161106a565b916118f260405190565b80805b0390a3565b6104486004610aa9565b6104489060a01c610918565b6104489054611904565b1561192157565b60405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc81b9bdd08185b1b1bddd95960521b6044820152606490fd5b906103a795949392916119726000611910565b156119975761199261198d611988336002611073565b610aa9565b61191a565b6119ed565b611992600161191a565b156119a857565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b906103a79594939291611a08611a036010610aa9565b6119a1565b906103a79594939291611a19611bc2565b611a71565b9081526040810192916103a79160200152565b6040513d6000823e3d90fd5b611a6a6103a794611a63606094989795611a5c608086019a6000870152565b6020850152565b6040830152565b0190611175565b9385611a9791969396611a8e611a868761106a565b858a8a6138e9565b85888589613dc3565b91611ab2611aad6011546001600160a01b031690565b61106a565b6327d335a890803b156103c957611ad891600091611acf60405190565b93849260e01b90565b8252818381611aeb8a8d60048401611a1e565b03925af18015611b7057611b52575b50611b4d3394611b3a611b36611b307f77a8be0890be6d79729c684636469d83d455e267a0bf0c9bc2463d8db867a5419761097b565b9761106a565b9790565b97611b4460405190565b94859485611a3d565b0390a4565b611b6a906000611b62818361036d565b8101906106ad565b38611afa565b611a31565b906103a7959493929161195f565b15611b8a57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6103a7611bd4611bd06118fa565b1590565b611b83565b90611bec9291611be7611cf8565b611bf4565b6103a7611d34565b906103a79291611c02611bc2565b9091611c2a9034938484611c1a610448826005610988565b611c25848483613f91565b61414e565b903391611b4d611c6c611c66611c607f6d2b783673dbbf046f2e5a1f3c92ce62c29a0f5385f2b1f0eaf19019ef28cb559461097b565b9461097b565b9461106a565b946106f960405190565b906103a79291611bd9565b610448600261097b565b15611c9257565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9060001990611878565b90611cf16104486118999261097b565b8254611cd7565b6103a7611d0560036109a7565b611d23611d10611c81565b918290611d1c565b9190565b1415611c8b565b6003611ce1565b610448600161097b565b6103a7611d23611d2a565b6103a790611d50611a036010610aa9565b611bec90611d5c611cf8565b6103a790611d68611bc2565b611f2e565b6104489060081c610474565b6104489054611d6d565b905051906103a7826103c0565b90929192611da06103eb82610722565b938185526020850190828401116103c9576103a792610480565b9080601f830112156103c957815161044892602001611d90565b6080818303126103c957611de88282611d83565b92611df68360208401611d83565b926040830151906001600160401b0382116103c957611e1a81610448938601611dba565b93606001611d83565b9037565b6103a791604091611e23565b906104d781604093611e27565b611e4c611d1860029390565b806000925b848410611e5f575050505050565b611e7b611e74600192611e6f8690565b611e33565b9360400190565b93019291611e51565b6103a79161014091611e23565b6103a7919061010090611ecf90611ea88482611e27565b611eb9604082016040860190611e40565b611eca60c0820160c0860190611e27565b820190565b910190611e84565b610240810192916103a79190611e91565b9081526040810192916103a7916020906115da565b634e487b7160e01b600052601160045260246000fd5b9190611f1e565b9290565b8203918211611f2957565b611efd565b6000611f6b91611f41611aad6010611d79565b611f60836365cd296c611f5360405190565b9687958694859360e01b90565b835260048301611ed7565b03925af18015611b70576000918291829182916120dd575b50611fbb611f95610448846007610988565b93600595611fb36104486001880198611fad8a6109a7565b90610988565b9384876143af565b611fd0611aad6011546001600160a01b031690565b90632b8a8002611fe2600483016109a7565b85546001600160a01b03165b93803b156103c9576120166000809461202161200960405190565b9889968795869460e01b90565b845260048401611ee8565b03925af1908115611b70576120719561207d93612076936120c7575b5061204a600687016109a7565b96828661206b61206560018c9701546001600160a01b031690565b946109a7565b98614557565b6148fd565b8094611f13565b926120b16120ab7f3247261fffac93019b3a34aa6692df18a5ddea75a12bf8ec4539903a608a6e4c9361097b565b9361097b565b936118f56120be60405190565b92839283611a1e565b6120d7906000611b62818361036d565b3861203d565b925090506120fd92503d8091833e6120f5818361036d565b810190611dd4565b90919238611f83565b6103a790611d3f565b611bec9061211b611cf8565b6121ad565b1561212757565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420626964206f776e65720000000000000000006044820152606490fd5b1561217357565b60405162461bcd60e51b81526020600482015260126024820152714c697374696e67206e6f742061637469766560701b6044820152606490fd5b6121bb610448826007610988565b60018101916121d16104486005611fad866109a7565b82906121f66121e783546001600160a01b031690565b6121f0336117c0565b14612120565b61220a61220560088301610aa9565b61216c565b61221f611aad6011546001600160a01b031690565b91632b8a800290611fee612235600485016109a7565b91546001600160a01b031690565b6103a79061210f565b906103a7929161225a611bc2565b612364565b1561226657565b60405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74206c697374696e67206f776e657200000000006044820152606490fd5b156122b257565b60405162461bcd60e51b8152602060048201526024808201527f41736b207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b1561230a57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c69642073616c652045544820726563697069656e740000000000006044820152606490fd5b9081526040810192916103a791602090611a6a565b919091612375610448826005610988565b9161240081600161238d86546001600160a01b031690565b3396906123a39061239d896117c0565b1461225f565b6123b261220560088301610aa9565b6123cd6123c4610448600784016109a7565b895b10156122ab565b6123ed6123dd6104746000611728565b6123e68561106a565b1415612303565b6123fa8860068301611ce1565b01611882565b61243361242d7f6df0cec5e0539cca31fe823df048a8d5834ba5dc079fa1d38e5157f00f9d085b9361097b565b9361106a565b936118f561244060405190565b9283928361234f565b906103a7929161224c565b612462610448826005610988565b80546001600160a01b031633919061247d9061239d846117c0565b61248c61220560088301610aa9565b6124a1611aad6011546001600160a01b031690565b90636e74da686124b3600483016109a7565b833b156103c9576124e9936124db600080946124ce60405190565b9788958694859360e01b90565b835260048301526024820190565b03925af1908115611b7057612505928592612532575b50614ca6565b6118e86118e27f5832f888aea12cc23bd891f2d9fd4bd01b8ce0e22898b6e7cee1519f5bd469549361097b565b612542906000611b62818361036d565b386124ff565b1561254f57565b60405162461bcd60e51b815260206004820152601660248201527543616c6c6572206973206e6f7420726567697374727960501b6044820152606490fd5b6125cb8161259f610448826005610988565b6125c66125b7611aad6011546001600160a01b031690565b6125c0336117c0565b14612548565b614ca6565b6125f57ff7504a55c42715ea3e852b679d6453ecfe02acbddb4d0652aa251d4458b7cc219161097b565b906125ff60405190565b80805b0390a2565b90611bec91612614611cf8565b906103a791612621611bc2565b612659826006612635610448856007610988565b6126538361264d6104486005611fad600187016109a7565b8361465d565b01611ce1565b33906118f561268b61242d7f8283dd04c4a2b6691bd80232f254e0ad876b8bb149938d3e7ced5c6e8a35b6149361097b565b936106f960405190565b906103a791612607565b6126ac611a036010610aa9565b6103a7612720565b156126bb57565b60405162461bcd60e51b815260206004820152601e60248201527f496e7374616e742061636365707420616c726561647920656e61626c656400006044820152606490fd5b9060ff90611878565b9061271961044861189992151590565b8254612700565b3380612751600961273f61273a611bd06119888685611073565b6126b4565b61274c6001948592611073565b612709565b61260261277e7f2e259e0564e75f0e10ce0e012a5ce2528ae513b0188b619bcc581b8ba8db70329261106a565b9261095460405190565b6103a761269f565b61279d611a036010610aa9565b6103a76127f1565b156127ac57565b60405162461bcd60e51b815260206004820152601f60248201527f496e7374616e742061636365707420616c72656164792064697361626c6564006044820152606490fd5b3380612751600961280d6128086119888584611073565b6127a5565b61274c6000948592611073565b6103a7612790565b91908201809211611f2957565b6128a1600060076128936128466104488684610988565b91612889600561286d612867610448612861600189016109a7565b84610988565b86614781565b6128814261287b600f6109a7565b90612822565b908501611ce1565b6001908301612709565b01546001600160a01b031690565b6118e86118e27f9da9db6af7fcfa5edbaa006b61a744d33fe4651a4c594cddd3e9a7e757ecd8d59361097b565b611bec906128da611cf8565b6128e8610448826007610988565b9061291d6129006104486005611fad600187016109a7565b61290a8185614872565b82612917600686016109a7565b94614c0b565b33906129318361292c8461106a565b612a59565b6118f561268b61242d7f8f8619524e8d462cead34604bd2247ede24175801481e4d0b8059ac8aa41c3019361097b565b6103a7906128ce565b1561297157565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b906129c36103eb83610722565b918252565b3d156129e2576129d73d6129b6565b903d6000602084013e565b606090565b156129ee57565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b60006103a792612a7a8293611aad612a703061106a565b849031101561296a565b90612a8460405190565b90818003925af1612a936129c8565b506129e7565b906103a79291612aa761179f565b612b18565b15612ab357565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b90610100600160a81b039060081b611878565b90612b116104486118999261106a565b8254612aee565b612b4e9291612b40612b4792612b39612b34611bd06010610aa9565b612aac565b6010612b01565b6011611882565b6012611882565b6103a760016010612709565b906103a79291612a99565b612b6d61179f565b6103a76103a7612bcb565b6103a7612b65565b612b88611bc2565b6103a7612b9760016004612709565b33612bc67f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610c1860405190565b0390a1565b6103a7612b80565b612bdb61179f565b6103a76103a7612c34565b6103a7612bd3565b612bf6612c7f565b6103a7612c0560006004612709565b33612bc67f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610c1860405190565b6103a7612bee565b15612c4357565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b6103a7612c8a6118fa565b612c3c565b6103a790612c9b61179f565b612cde565b15612ca757565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b612d01612cea8261106a565b612cfa6117c06104746000611728565b1415612ca0565b612d0c816010612b01565b6125f57f9106eb309cc633a951e77bd36af34646a9df8e6ade485938c34e3844a37b79da9161106a565b6103a790612c8f565b6103a790612d4b61179f565b612d57612cea8261106a565b612d62816012611882565b6125f57f9d3407c7200ba4f49e97f3d3f8250ec01c24b0ada6fa31053d71850793b739539161106a565b6103a790612d3f565b6103a790612da161179f565b612dac81600a611ce1565b612bc67f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76916106f960405190565b6103a790612d95565b6103a790612def61179f565b612e08612dff6104746000611728565b612cfa8361106a565b612e1381600b611882565b6125f57f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc29161106a565b6103a790612de3565b6103a790612e5261179f565b612eb8565b15612e5e57565b60405162461bcd60e51b815260206004820152602c60248201527f42696420736574746c656d656e7420706572696f64206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608490fd5b612ecc612ec5600061097b565b8211612e57565b612ed781600e611ce1565b612bc67f09a165ff77cf0f319f9ece89bc6dbe2a469a0da2640c9e6b501132846843daf5916106f960405190565b6103a790612e46565b6103a790612f1a61179f565b612f7c565b15612f2657565b60405162461bcd60e51b815260206004820152602860248201527f42696420726566756e6420706572696f64206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b612f90612f89600061097b565b8211612f1f565b612f9b81600f611ce1565b612bc67f90e0312fddcd5cbec358d5c7d63976e5c97d71dfb8d6cd5f2c53b0a1a043ccf0916106f960405190565b6103a790612f0e565b906129c36103eb836103a9565b6104486040610393565b610448610140610393565b612ffc612fe9565b906000825260208080808080808080808b01600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b905250565b610448612ff4565b613052612fdf565b9060008252602080830161303d613042565b61044861304a565b60005b82811061307b57505050565b602090613086613064565b818401520161306f565b906103a76130a66130a084612fd2565b936103a9565b601f19016020840161306c565b6000198114611f295760010190565b906130cb825190565b811015610d02576020809102010190565b906130f76130eb6104ea845490565b92600052602060002090565b9060005b8181106131085750505090565b90919261312c61312560019261311d876109a7565b815260200190565b9460010190565b9291016130fb565b90610448916130dc565b906103a7610a999261314f60405190565b93848092613134565b906103a76132556009613169612fe9565b9461318b61317e82546001600160a01b031690565b6001600160a01b03168752565b6131b26131a260018301546001600160a01b031690565b6001600160a01b03166020880152565b6131c86131c1600283016109a7565b6040880152565b6131de6131d7600383016114fe565b6060880152565b6131f46131ed600483016109a7565b6080880152565b61320a613203600583016109a7565b60a0880152565b613220613219600683016109a7565b60c0880152565b61323661322f600783016109a7565b60e0880152565b61324f61324560088301610aa9565b1515610100880152565b0161313e565b610120840152565b61044890613158565b90613277613272835190565b613090565b91600090836132858361097b565b613290610448845190565b81101561330257806132ac6132a86132fd93866130c2565b5190565b6132e26132db6132c46005611fad6132a8878b6130c2565b6132d66132cf612fdf565b948a860152565b61325d565b6020830152565b6132ec82896130c2565b526132f781886130c2565b506130b3565b613285565b5093505050565b6104489061313e565b61332961332e91613321606090565b506006611073565b613309565b9061333a613272835190565b91600090836133488361097b565b613353610448845190565b811015613302578061336b6132a861337c93866130c2565b6132e26132db6132c4836005610988565b613348565b6104486060610393565b610448610100610393565b61339e61338b565b906000825260208080808080808089016000815201606081520160008152016000815201600081520160005b8152016000905250565b610448613396565b6133e4613381565b90600082526020808084016133ca6133d4565b6104486133dc565b60005b82811061340e57505050565b6020906134196133f7565b8184015201613402565b906103a76134336130a084612fd2565b601f1901602084016133ff565b906103a76134cd600761345161338b565b9461346661317e82546001600160a01b031690565b61347c613475600183016109a7565b6020880152565b61348b6131c160028301610a7f565b61349a6131d7600383016109a7565b6134a96131ed600483016109a7565b6134b8613203600583016109a7565b6134c7613219600683016109a7565b01610aa9565b151560e0840152565b61044890613440565b906134ee613329836008611073565b6134fe6134f9825190565b613423565b926000918461350c8461097b565b613517610448845190565b81101561358c578061352f6132a861358793866130c2565b61357261353d826007610988565b613569611a5c6135516119888b6009611073565b9261356461355d613381565b968d880152565b6134d6565b15156040830152565b61357c828a6130c2565b526132f781896130c2565b61350c565b509450505050565b60005b8281106135a357505050565b606082820152602001613597565b906103a76135c16130a084612fd2565b601f190160208401613594565b6135de6135d9825190565b6135b1565b806000916135eb8361097b565b945b6135f8610448865190565b8610156136f057613621600961361b6136146132a88a8a6130c2565b6005610988565b01613309565b9461362d6134f9875190565b61363788866130c2565b5261364287856130c2565b5061364c8561097b565b613657610448885190565b8110156136d957806132f781886136b86136776132a86136d4978e6130c2565b613569611a5c60076135646136a96119886136928785610988565b936136a38a6128938a600994610988565b90611073565b946136b2613381565b97880152565b6136c28c8a6130c2565b51906136ce83836130c2565b526130c2565b61364c565b50929450946136e7906130b3565b949391936135ed565b935093505050565b61044861517f565b905051906103a782610706565b91909160a0818403126103c95761372460a0610393565b9260006137318284613700565b908501526020820151906001600160401b0382116103c9576137588161378b938501611dba565b6020860152604061376b82828601611d83565b90860152606061377d82828601613700565b908601526080809301611d83565b90830152565b9190916040818403126103c9576137a86040610393565b9260006137b58284611d83565b9085015260208201516001600160401b0381116103c9576132db920161370d565b906020828203126103c95781516001600160401b0381116103c9576104489201613791565b1561380257565b60405162461bcd60e51b815260206004820152601a60248201527f43616c6c6572206973206e6f7420646f6d61696e206f776e65720000000000006044820152606490fd5b1561384e57565b60405162461bcd60e51b815260206004820152602160248201527f446f6d61696e20616c7265616479206c6973746564206f6e20726567697374726044820152607960f81b6064820152608490fd5b156138a457565b60405162461bcd60e51b815260206004820152601960248201527f4d696e696d756d20626964207072696365206973207a65726f000000000000006044820152606490fd5b60006139269194939294613908611aad6011546001600160a01b031690565b6124db631a24254761391960405190565b9586948593849360e01b90565b03915afa938415611b70576104746123e6936123c6611d18613985606060206103a79b6117c0996000916139bf575b5001805151613976906001600160a01b0316613970336117c0565b146137fb565b5101516001600160a01b031690565b946104486139b860006139b361399a82611728565b996139ad6001600160a01b038c166117c0565b14613847565b61097b565b821161389d565b6139da913d8091833e6139d2818361036d565b8101906137d6565b38613955565b369037565b906103a76139f56130a084612fd2565b601f1901602084016139e0565b634e487b7160e01b600052600060045260246000fd5b90611cf16104486118999290565b9160001960089290920291821b911b611878565b9190613a4b6104486118999361097b565b908354613a26565b6103a791600091613a3a565b818110613a6a575050565b80613a786000600193613a53565b01613a5f565b9190601f8111613a8d57505050565b613a9f6103a793600052602060002090565b906020601f840181900483019310613ac2575b6020601f909101045b0190613a5f565b9091508190613ab2565b600019600883021c1916906002021790565b90613ae7815190565b906001600160401b03821161038e57613b0a82613b0485546109c7565b85613a7e565b602090601f8311600114613b3857611899929160009183613b2d575b5050613acc565b015190503880613b26565b601f19831691613b4d85600052602060002090565b9260005b818110613b8b57509160029391856001969410613b72575b50505002019055565b01516000196008601f8516021c19169055388080613b69565b91936020600181928787015181550195019201613b51565b906103a791613ade565b81810292918115918404141715611f2957565b818110613bcb575050565b80613bd96000600193613a53565b01613bc0565b90613bf290600019906020036008021c90565b8154169055565b9091828110613c0757505050565b6103a79290613c15906130eb565b9081019101613bc0565b90600160401b811161038e5781613c376103a7935490565b90828155613bf9565b8151916001600160401b03831161038e57613c6a6130eb600192613c648686613c1f565b60200190565b92049160005b838110613c7d5750505050565b6001906020613c8d610448865190565b9401938184015501613c70565b906103a791613c40565b6103a79190613d8a9061012090600990613ccf81613cc987516001600160a01b031690565b90611882565b613cea60018201613cc960208801516001600160a01b031690565b613d0260028201613cfc604088015190565b90613a18565b613d1a60038201613d14606088015190565b90613ba3565b613d2c60048201613cfc608088015190565b613d4460058201613d3e60a088015190565b90611ce1565b613d5660068201613d3e60c088015190565b613d6860078201613d3e60e088015190565b613d8360088201613d7d610100880151151590565b90612709565b0192015190565b90613c9a565b906103a791613ca4565b90815491600160401b83101561038e5782613dbd9160016103a795018155610cdf565b90613a3a565b919295949095613dd1600090565b50613ddc600d6109a7565b93849733944290600198600096613df28861097b565b613dfb906139e5565b9689613e05612fe9565b998a0190613e1b91906001600160a01b03169052565b6001600160a01b0316602089015260408801526060870152608086015260a085015260c084015260e0830152841515610100830152610120820152613e61836005610988565b90613e6b91613d90565b613e76906006611073565b90613e8091613d9a565b613e8a600d6109a7565b90613e949061097b565b613e9d91612822565b6103a790600d611ce1565b15613eaf57565b60405162461bcd60e51b8152602060048201526016602482015275131a5cdd1a5b99c8191bd95cc81b9bdd08195e1a5cdd60521b6044820152606490fd5b15613ef457565b60405162461bcd60e51b8152602060048201526024808201527f426964207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b15613f4c57565b60405162461bcd60e51b815260206004820152601d60248201527f427579657220494420686173682063616e6e6f7420626520656d7074790000006044820152606490fd5b611d18610448613ffb926139b36103a79695613ff4611d186104486007613fc260008801546001600160a01b031690565b96613fdf600098613fd86117c06104748c611728565b1415613ea8565b613fee61220560088301610aa9565b016109a7565b1015613eed565b1415613f45565b9061400b815190565b906001600160401b03821161038e5761402882613b0485546109c7565b602090601f831160011461404a57611899929160009183613b2d575050613acc565b601f1983169161405f85600052602060002090565b9260005b81811061408357509160029391856001969410613b725750505002019055565b91936020600181928787015181550195019201614063565b906103a791614002565b6103a79190613d7d9060e0906007906140c981613cc987516001600160a01b031690565b6140db60018201613d3e602088015190565b6140f3600282016140ed604088015190565b9061409b565b61410560038201613cfc606088015190565b61411760048201613d3e608088015190565b61412960058201613d3e60a088015190565b61413b60068201613d3e60c088015190565b01920151151590565b906103a7916140a5565b919493909261415d600c6109a7565b93849283973393426000199160009461417461338b565b6001600160a01b0389168782015296602088015260408701526060860152608085015260a084015260c0830152151560e08201526141b3836007610988565b906141bd91614144565b6141c8906008611073565b906141d291613d9a565b600901906141df91613d9a565b6141e9600c6109a7565b6141f3600161097b565b6141fc91612822565b6103a790600c611ce1565b1561420e57565b60405162461bcd60e51b8152602060048201526012602482015271109a5908191bd95cc81b9bdd08195e1a5cdd60721b6044820152606490fd5b8015156103c2565b905051906103a782614248565b906020828203126103c95761044891614250565b1561427857565b60405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206d616e6167656420444b494d206b657920686173680000006044820152606490fd5b156142c457565b60405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420637573746f6d20444b494d206b65792068617368000000006044820152606490fd5b6104d76143219260209261431b815190565b94859290565b93849101610480565b61044891614309565b1561433a57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b1561437957565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103237b6b0b4b760911b6044820152606490fd5b80549294909391926001600160a01b03166143dc6000916143d56117c061047485611728565b1415614207565b6143fb6143f2828601546001600160a01b031690565b61239d336117c0565b61440a61220560088601610aa9565b6002840190614421611d186104486120ab856109a7565b146144ac576144a693613fee611d18946144a0611d18611f1a6003611f1a9861445e6103a79e614458611d1861044860049d6109a7565b146142bd565b61448661446a60405190565b809261447a60208301918261432a565b9081038252038261036d565b614498614491825190565b9160200190565b209b016109a7565b14614333565b14614372565b5060206144e793956144c9611aad6012546001600160a01b031690565b6124db6319d091526144da60405190565b9788948593849360e01b90565b03915afa908115611b70576103a795613fee611d18946144a0611d18611f1a6003600497614524611f1a9a6144a69d600091614529575b50614271565b61445e565b61454a915060203d8111614550575b614542818361036d565b81019061425d565b3861451e565b503d614538565b90916125c6816103a794612917600186016109a7565b1561457457565b60405162461bcd60e51b815260206004820152601860248201527f526566756e6420616c726561647920696e6974696174656400000000000000006044820152606490fd5b156145c057565b60405162461bcd60e51b8152602060048201526024808201527f4e6577207072696365206e6f742067726561746572207468616e206f6c6420706044820152637269636560e01b6064820152608490fd5b1561461857565b60405162461bcd60e51b815260206004820152601c60248201527f496e636f727265637420616d6f756e74206f66204554482073656e74000000006044820152606490fd5b611d1861044860066146cc936146a461220560086103a7999861468d6121e760008701546001600160a01b031690565b6134c761469f611bd060078801610aa9565b61456d565b01936146bc6146b5610448876109a7565b82116145b9565b6146c634956109a7565b90611f13565b14614611565b156146d957565b60405162461bcd60e51b815260206004820152601960248201527f526566756e6420706572696f64206e6f742073746172746564000000000000006044820152606490fd5b1561472557565b60405162461bcd60e51b815260206004820152602e60248201527f4c697374696e6720657870697265642e204269642063616e206265207769746860448201526d647261776e206469726563746c7960901b6064820152608490fd5b60086103a7926134c76147de936147a56121e760008301546001600160a01b031690565b6147b761469f611bd060078401610aa9565b6147d8611d18610448429361287b60046147d1600e6109a7565b92016109a7565b116146d2565b61471e565b156147ea57565b60405162461bcd60e51b81526020600482015260146024820152731499599d5b99081b9bdd081a5b9a5d1a585d195960621b6044820152606490fd5b1561482d57565b60405162461bcd60e51b815260206004820152601760248201527f526566756e6420706572696f64206e6f7420656e6465640000000000000000006044820152606490fd5b9061488e906008906134c76121e785546001600160a01b031690565b6148955750565b806148ad6148a860076103a79401610aa9565b6147e3565b6148c0611d1861044860054294016109a7565b1015614826565b610448670de0b6b3a764000061097b565b634e487b7160e01b600052601260045260246000fd5b81156148f8570490565b6148d8565b909190614939614927614919614913600a6109a7565b86613bad565b6149216148c7565b906148ee565b91614933838096611f13565b90612a59565b614943600061097b565b811161494c5750565b6103a79061292c600b546001600160a01b031690565b9190613a4b6104486118999390565b6103a791600091614962565b9060009161499b61499382600052602060002090565b928354613acc565b905555565b91929060208210156149f857601f84116001146149c257611899929350613acc565b50906149f36103a79360016149ea6149df85600052602060002090565b92601f602091010490565b82019101613a5f565b61497d565b50614a318293614a0f600194600052602060002090565b613abb6020601f860104820192601f861680614a39575b50601f602091010490565b600202179055565b614a4590888603613bdf565b38614a26565b929091600160401b821161038e5760201115614a92576020811015614a735761189991613acc565b60019160ff1916614a8984600052602060002090565b55600202019055565b60019150600202019055565b908154614aaa816109c7565b90818311614ad3575b818310614ac1575b50505050565b614aca936149a0565b38808080614abb565b614adf83838387614a4b565b614ab3565b60006103a791614a9e565b90600003614b00576103a790614ae4565b613a02565b60006103a791613c1f565b90600003614b00576103a790614b05565b600060096103a7928280820155826001820155614b418360028301614971565b614b4e8360038301614aef565b614b5b8360048301614971565b614b688360058301613a53565b614b758360068301613a53565b614b828360078301613a53565b82600882015501614b10565b90600003614b00576103a790614b21565b600080825590600790614bb58360018301613a53565b614bc28360028301614aef565b614bcf8360038301614971565b614bdc8360048301613a53565b614be98360058301613a53565b614bf68360068301613a53565b0155565b90600003614b00576103a790614b9f565b600091614c6a916103a794614c55611bd06008614c4686614c41610448614c3b8c8a01546001600160a01b031690565b85611073565b6153e9565b60098401936134c787866153e9565b9081614c90575b50614c6f575b506007610988565b614bfa565b83614c85614c8a92611fad6001600592016109a7565b614b8e565b38614c62565b549050614c9f611d188661097b565b1438614c5c565b614cdf6009600092614cbb8460088301612709565b614cda85614c4161044860066136a3898701546001600160a01b031690565b015490565b614ceb611d188361097b565b14614cf4575050565b614c856103a7926005610988565b6103a790614d0e61179f565b614dba565b15614d1a57565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320616c7265616479206f6e20616c6c6f776c697374000000006044820152606490fd5b916001600160a01b0360089290920291821b911b611878565b9190614d896104486118999361106a565b908354614d5f565b90815491600160401b83101561038e5782614db49160016103a795018155610cdf565b90614d78565b90614dc5600061097b565b614dd0610448845190565b811015614e6e5780614df5614de8614e6993866130c2565b516001600160a01b031690565b614e2c81614e27816104486002614e1a614e15611bd06119888685611073565b614d13565b61274c6001938492611073565b614d91565b614e567f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379161106a565b90614e6060405190565b600090a26130b3565b614dc5565b509050565b6103a790614d02565b6103a790614e8861179f565b614ed9565b15614e9457565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320616c726561647920646973616c6c6f7765640000000000006044820152606490fd5b906000614ee58161097b565b614ef0610448855190565b811015614f665780614f08614de8614f6193876130c2565b614f2c8461274c836002614f27614f226119888484611073565b614e8d565b611073565b614f37816001615245565b614e567ff27dccb929dd3f4dba2d3ffc29a7c74e35995e051a268a7c466f9ddabdf81eac9161106a565b614ee5565b50509050565b6103a790614e7c565b614f7d61179f565b6103a7614ff7565b15614f8c57565b60405162461bcd60e51b815260206004820152601d60248201527f416c6c6f77206c69737420697320616c726561647920656e61626c65640000006044820152606490fd5b9060ff60a01b9060a01b611878565b90614ff061044861189992151590565b8254614fd1565b61500c615007611bd06000611910565b614f85565b61501860016000614fe0565b7f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec361504260405190565b8080612bc6565b6103a7614f75565b61505961179f565b6103a76150ad565b1561506857565b60405162461bcd60e51b815260206004820152601e60248201527f416c6c6f77206c69737420697320616c72656164792064697361626c656400006044820152606490fd5b6150bf6150ba6000611910565b615061565b6150ca600080614fe0565b7f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0761504260405190565b6103a7615051565b9061510b6130eb6104ea845490565b9060005b81811061511c5750505090565b90919261514a61312560019261513987546001600160a01b031690565b6001600160a01b0316815260200190565b92910161510f565b90610448916150fc565b906103a7610a999261516d60405190565b93848092615152565b6104489061515c565b6104486001615176565b906151986130eb6104ea845490565b9060005b8181106151a95750505090565b9091926151c661312560019261513987546001600160a01b031690565b92910161519c565b9061044891615189565b906103a7610a99926151e960405190565b938480926151ce565b610448906151d8565b634e487b7160e01b600052603160045260246000fd5b6103a791600091614d78565b8054801561524057600019019061523d6152378383610cdf565b90615211565b55565b6151fb565b61525a61526192615255836151f2565b6152f8565b9092901590565b156152a35760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a7916152bc6152b2835490565b6146c6600161097b565b908181036152cc575b505061521d565b614db46152df610d286152e69486610cdf565b9184610cdf565b38806152c5565b61044860001961097b565b919082519260006153088161097b565b855b8110156153525761531e614de882856130c2565b6153306001600160a01b0386166117c0565b146153485761534161530a916130b3565b9050615308565b9450505050600190565b5093505050611d186152ed565b9061536e6130eb6104ea845490565b9060005b81811061537f5750505090565b90919261539461312560019261311d876109a7565b929101615372565b906104489161535f565b906103a7610a99926153b760405190565b9384809261539c565b610448906153a6565b8054801561524057600019019061523d6153e38383610cdf565b90613a53565b61525a6153fe926153f9836153c0565b615479565b156154405760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a79161544f6152b2835490565b9081810361545f575b50506153c9565b613dbd6152df6110a96154729486610cdf565b3880615458565b919082519260006154898161097b565b855b8110156153525761549f6132a882856130c2565b8414615348576154b161548b916130b3565b905061548956fea264697066735822122003aeb335a6d381b0a582f93c9d1aab7b6e89b54509710141d9511d69f98051bd64736f6c63430008120033\",\n  \"devdoc\": {\n    \"events\": {\n      \"Paused(address)\": {\n        \"details\": \"Emitted when the pause is triggered by `account`.\"\n      },\n      \"Unpaused(address)\": {\n        \"details\": \"Emitted when the pause is lifted by `account`.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAddressesToAllowlist(address[])\": {\n        \"params\": {\n          \"_allowedAddresses\": \"List of addresses allowed to call allow listed functions\"\n        }\n      },\n      \"buyerReleaseFunds(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to release funds for\"\n        }\n      },\n      \"createBid(uint256,bytes32,string)\": {\n        \"params\": {\n          \"_buyerIdHash\": \"The hashed buyerId which is also output as part of the transfer proof later\",\n          \"_encryptedBuyerId\": \"The encrypted buyerId. Should be the same as the buyerId hashed\",\n          \"_listingId\": \"The unique identifier of the listing to bid on\"\n        }\n      },\n      \"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\": {\n        \"params\": {\n          \"_askPrice\": \"An asking price for the domain\",\n          \"_dkimKeyHash\": \"The custom DKIM key hash. If empty, the managed DKIM key hash will be used\",\n          \"_domainId\": \"The unique identifier of the domain\",\n          \"_encryptionKey\": \"The encryption key for buyers to encrypt the buyerId to\",\n          \"_minBidPrice\": \"The minimum bid price for the domain\",\n          \"_saleEthRecipient\": \"The address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\"\n        }\n      },\n      \"deleteListing(uint256)\": {\n        \"params\": {\n          \"_listingId\": \"The unique identifier of the listing to delete\"\n        }\n      },\n      \"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\": {\n        \"params\": {\n          \"_proof\": \"The zk-email proof of domain transfer\"\n        }\n      },\n      \"getListingBids(uint256[])\": {\n        \"params\": {\n          \"_listingIds\": \"An array of listingIds to fetch bids for\"\n        }\n      },\n      \"getListings(uint256[])\": {\n        \"params\": {\n          \"_listingIds\": \"An array of listingIds to fetch details for\"\n        }\n      },\n      \"getUserBids(address)\": {\n        \"params\": {\n          \"_user\": \"The address of the user to fetch bids for\"\n        }\n      },\n      \"getUserListings(address)\": {\n        \"params\": {\n          \"_user\": \"The address of the user to fetch listings for\"\n        }\n      },\n      \"increaseBidPrice(uint256,uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to increase the price for\",\n          \"_newPrice\": \"The new price for the bid\"\n        }\n      },\n      \"initialize(address,address,address)\": {\n        \"params\": {\n          \"_mailServerKeyHashAdapter\": \"The address of the mail server key hash adapter contract\",\n          \"_transferDomainProcessor\": \"The address of the domain transfer processor contract\",\n          \"_verifiedDomainRegistry\": \"The address of the verified domain registry contract\"\n        }\n      },\n      \"initiateRefund(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to initiate refund for\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"paused()\": {\n        \"details\": \"Returns true if the contract is paused, and false otherwise.\"\n      },\n      \"registryRemoveListing(uint256)\": {\n        \"params\": {\n          \"_listingId\": \"Listing Id to remove\"\n        }\n      },\n      \"removeAddressesFromAllowlist(address[])\": {\n        \"params\": {\n          \"_disallowedAddresses\": \"List of addresses being disallowed from calling allow listed functions\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"updateBidRefundPeriod(uint256)\": {\n        \"params\": {\n          \"_newBidRefundPeriod\": \"The new bid refund period in seconds\"\n        }\n      },\n      \"updateBidSettlementPeriod(uint256)\": {\n        \"params\": {\n          \"_newBidSettlementPeriod\": \"The new bid settlement period in seconds\"\n        }\n      },\n      \"updateFee(uint256)\": {\n        \"params\": {\n          \"_newFee\": \"The new fee percentage (in basis points)\"\n        }\n      },\n      \"updateFeeRecipient(address)\": {\n        \"params\": {\n          \"_newFeeRecipient\": \"The new address to receive fees\"\n        }\n      },\n      \"updateListing(uint256,uint256,address)\": {\n        \"params\": {\n          \"_listingId\": \"The unique identifier of the listing to update\",\n          \"_newAskPrice\": \"The new asking price for the listing\",\n          \"_saleEthRecipient\": \"The new address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\"\n        }\n      },\n      \"updateMailServerKeyHashAdapter(address)\": {\n        \"params\": {\n          \"_mailServerKeyHashAdapter\": \"The new mail server key hash adapter\"\n        }\n      },\n      \"updateTransferDomainProcessor(address)\": {\n        \"params\": {\n          \"_transferDomainProcessor\": \"The new transfer domain processor\"\n        }\n      },\n      \"withdrawBid(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAddressesToAllowlist(address[])\": {\n        \"notice\": \"Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed functions.\"\n      },\n      \"buyerReleaseFunds(uint256)\": {\n        \"notice\": \"ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required because it is not in the buyer's interest to release funds unless they have received the domain. Note that the bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will revert if: - The bid is not owned by the caller - The listing is not active (sold or withdrawn)\"\n      },\n      \"createBid(uint256,bytes32,string)\": {\n        \"notice\": \"Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the  seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId  using their private key to get the raw buyerId. DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be done in the client! This does not affect the security of the protocol as the encrypted buyerId is only  used for communication between the buyer and the seller while maintaining privacy.\"\n      },\n      \"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\": {\n        \"notice\": \"Creates listing for a domain. If ownership of domain changes offchain, the new owner will have to first register the domain on the domain registry contract. Then the new owner can create a listing for the domain. The old listing will be deleted from the old owner's  listings and the old listing is marked as NOT active, which prevents any new bids from being created on it and makes the old bids immediately withdrawable. We also allow the seller to specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be  updated by us whenever Namecheap rotates their DKIM key. Function reverts if: - Caller is not domain owner on the domain registry contract - Ask price is less than min bid price - Sale ETH recipient is the zero address\"\n      },\n      \"deleteListing(uint256)\": {\n        \"notice\": \"ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing are left as is to allow the buyer to withdraw the bid.\"\n      },\n      \"disableAllowlist()\": {\n        \"notice\": \"Disable the allow list. When the allow list is disabled, any address is allowed to call functions with onlyAllowed modifier.\"\n      },\n      \"disableInstantAccept()\": {\n        \"notice\": \"Disables the instant accept flag for the buyer.\"\n      },\n      \"enableAllowlist()\": {\n        \"notice\": \"Enable the allow list. When the allow list is enabled, only approved addresses are allowed to functions with onlyAllowed modifier.\"\n      },\n      \"enableInstantAccept()\": {\n        \"notice\": \"Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has  configured their Namecheap account to accept ownership of domains immediately upon transfer.  DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only  an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can  cancel the transfer immediately.\"\n      },\n      \"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\": {\n        \"notice\": \"ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to  the listing owner. The seller can also finalize the sale with bids that have initiated a refund  including the ones that have expired based on timestamp but not withdrawn yet.\"\n      },\n      \"getAllowedSellers()\": {\n        \"notice\": \"Get all allowed sellers\"\n      },\n      \"getListingBids(uint256[])\": {\n        \"notice\": \"Returns the bids for given listingIds\"\n      },\n      \"getListings(uint256[])\": {\n        \"notice\": \"Get listing information with listingId for a list of listingIds\"\n      },\n      \"getUserBids(address)\": {\n        \"notice\": \"Returns the bids created by a user\"\n      },\n      \"getUserListings(address)\": {\n        \"notice\": \"Returns all listings created by a user\"\n      },\n      \"increaseBidPrice(uint256,uint256)\": {\n        \"notice\": \"ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher  than the old price. The buyer must send the additional amount of ETH. The function reverts if - bid has initiated refund, caller is not bid owner or listing is not active - the new price is less than old price - msg.value is NOT STRICTLY EQUAL to than new price - old price\"\n      },\n      \"initialize(address,address,address)\": {\n        \"notice\": \"Initializes the contract with domain verification and transfer processors. Can  only be called once by the contract owner \"\n      },\n      \"initiateRefund(uint256)\": {\n        \"notice\": \"ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner  after the initial bid expiry period has passed.\"\n      },\n      \"pauseMarketplace()\": {\n        \"notice\": \"ONLY OWNER: Pauses listing and proof submission functionality for the marketplace.  Functionalites that are paused: - Listing creation and update - Bid creation and update - Sale finalization  Functinonalites that remain unpaused to allow users to retrieve funds in contract: - Bid refund initiation and withdrawal - Listing deletion - Manual settlement between buyer and seller\"\n      },\n      \"registryRemoveListing(uint256)\": {\n        \"notice\": \"ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry. \"\n      },\n      \"removeAddressesFromAllowlist(address[])\": {\n        \"notice\": \"Removes passed addresses from an allow list. Addresses not on the allow list are unable to call allow listed functions.\"\n      },\n      \"unpauseMarketplace()\": {\n        \"notice\": \"ONLY OWNER: Restarts paused functionality for the marketplace.\"\n      },\n      \"updateBidRefundPeriod(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the bid refund period\"\n      },\n      \"updateBidSettlementPeriod(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the minimum bid active period\"\n      },\n      \"updateFee(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the fee percentage for the marketplace\"\n      },\n      \"updateFeeRecipient(address)\": {\n        \"notice\": \"ONLY OWNER: Updates the fee recipient address\"\n      },\n      \"updateListing(uint256,uint256,address)\": {\n        \"notice\": \"ONLY SELLER: Updates the asking price of an existing listing. We don't update the existing bids against the listing because the newAskPrice is an indicative value. The new ask price must be greater than or equal to the existing min bid price. If seller wants to update the min bid price, they should delete the listing and create a new one with the new min bid price.\"\n      },\n      \"updateMailServerKeyHashAdapter(address)\": {\n        \"notice\": \"ONLY OWNER: Update the managed mail server key hash adapter\"\n      },\n      \"updateTransferDomainProcessor(address)\": {\n        \"notice\": \"ONLY OWNER: Update the transfer domain processor\"\n      },\n      \"withdrawBid(uint256)\": {\n        \"notice\": \"ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 8064,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isEnabled\",\n        \"offset\": 20,\n        \"slot\": \"0\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 8067,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"allowedAddresses\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 8071,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isAllowed\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 231,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_status\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 130,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_paused\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4981,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"listings\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Listing)4936_storage)\"\n      },\n      {\n        \"astId\": 4986,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"userListings\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\"\n      },\n      {\n        \"astId\": 4991,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bids\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Bid)4959_storage)\"\n      },\n      {\n        \"astId\": 4996,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"userBids\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\"\n      },\n      {\n        \"astId\": 5000,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"instantAcceptEnabled\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 5002,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"fee\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5004,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"feeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_address_payable\"\n      },\n      {\n        \"astId\": 5006,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidCounter\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5008,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"listingCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5010,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidSettlementPeriod\",\n        \"offset\": 0,\n        \"slot\": \"14\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5012,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidRefundPeriod\",\n        \"offset\": 0,\n        \"slot\": \"15\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5014,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isInitialized\",\n        \"offset\": 0,\n        \"slot\": \"16\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 5017,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"transferDomainProcessor\",\n        \"offset\": 1,\n        \"slot\": \"16\",\n        \"type\": \"t_contract(ITransferDomainProcessor)11791\"\n      },\n      {\n        \"astId\": 5020,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"verifiedDomainRegistry\",\n        \"offset\": 0,\n        \"slot\": \"17\",\n        \"type\": \"t_contract(IVerifiedDomainRegistry)11871\"\n      },\n      {\n        \"astId\": 5023,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"18\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)9595\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_address_payable\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address payable\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)9595\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ITransferDomainProcessor)11791\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ITransferDomainProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IVerifiedDomainRegistry)11871\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IVerifiedDomainRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_uint256)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_uint256,t_struct(Bid)4959_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct DomainExchange.Bid)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Bid)4959_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Listing)4936_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct DomainExchange.Listing)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Listing)4936_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Bid)4959_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct DomainExchange.Bid\",\n        \"members\": [\n          {\n            \"astId\": 4944,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"buyer\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4946,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"listingId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4948,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"encryptedBuyerId\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4950,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"buyerIdHash\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4952,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"createdAt\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4954,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"expiryTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4956,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"price\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4958,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"refundInitiated\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_bool\"\n          }\n        ],\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_struct(Listing)4936_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct DomainExchange.Listing\",\n        \"members\": [\n          {\n            \"astId\": 4916,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"seller\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4918,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"saleEthRecipient\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address_payable\"\n          },\n          {\n            \"astId\": 4920,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"dkimKeyHash\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4922,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"encryptionKey\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes_storage\"\n          },\n          {\n            \"astId\": 4924,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"domainId\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4926,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"createdAt\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4928,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"askPrice\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4930,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"minBidPrice\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4932,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"isActive\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 4935,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"bids\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"320\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/NamecheapManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x7E537F3A9329a0c29F386E6B0c30257AfbE7883f\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xcf6ff6f8d07359e4c6050f9a65c1f50fcaa7cb50e2ae986ae8222288b5d8d97c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x7E537F3A9329a0c29F386E6B0c30257AfbE7883f\",\n    \"transactionIndex\": 131,\n    \"gasUsed\": \"766431\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000800000000000000000000000000000000000000000000000001000002000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xf67d637664866723bd9586717cae07608fd23a1814c34b8af62cb25270413d49\",\n    \"transactionHash\": \"0xcf6ff6f8d07359e4c6050f9a65c1f50fcaa7cb50e2ae986ae8222288b5d8d97c\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 131,\n        \"blockNumber\": 20165425,\n        \"transactionHash\": \"0xcf6ff6f8d07359e4c6050f9a65c1f50fcaa7cb50e2ae986ae8222288b5d8d97c\",\n        \"address\": \"0x7E537F3A9329a0c29F386E6B0c30257AfbE7883f\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 525,\n        \"blockHash\": \"0xf67d637664866723bd9586717cae07608fd23a1814c34b8af62cb25270413d49\"\n      }\n    ],\n    \"blockNumber\": 20165425,\n    \"cumulativeGasUsed\": \"28926133\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x0db7730bdd90c823601ed32395c8b2f3307fd4adc477ca22bf3ed406c1b3ae4a\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x13d60704c96e0d88380cc2db7367cf17848b03fcd410fade3ba7161046cabeac\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523462000030576200001e620000186200013d565b620002d7565b604051610aed620004718239610aed90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160401b0381116200006d5760208091020190565b90929192620000bd620000b7826200008c565b62000073565b93818552602080860192028301928184116200003057915b838310620000e35750505050565b8251815260209283019201620000d5565b9080601f83011215620000305781516200011192602001620000a4565b90565b90602082820312620000305781516001600160401b0381116200003057620001119201620000f4565b6200011162000f5e80380380620001548162000073565b92833981019062000114565b6200011162000111620001119290565b634e487b7160e01b600052601160045260246000fd5b6000198114620001965760010190565b62000170565b634e487b7160e01b600052603260045260246000fd5b90620001bc825190565b811015620001ce576020809102010190565b6200019c565b15620001dc57565b60405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c7265616479206164646564000000000000000000006044820152606490fd5b9060ff905b9181191691161790565b9062000243620001116200024b92151590565b825462000221565b9055565b8054821015620001ce576200026b600191600052602060002090565b91020190600090565b9160001960089290920291821b911b62000226565b91906200029b620001116200024b9390565b90835462000274565b90815491680100000000000000008310156200006d5782620002d09160016200008a950181556200024f565b9062000289565b90620002e26200038c565b620002ee600062000160565b620002fb62000111845190565b8110156200038757806200037b620003206200031c620003819487620001b2565b5190565b62000373600162000358620003526200034e62000347868590600052602052604060002090565b5460ff1690565b1590565b620001d4565b6200036d838290600052602052604060002090565b62000230565b6002620002a4565b62000186565b620002ee565b509050565b6200008a80336200040e565b62000111905b6001600160a01b031690565b62000111905462000398565b906001600160a01b039062000226565b62000111906200039e906001600160a01b031682565b6200011190620003c6565b6200011190620003dc565b9062000406620001116200024b92620003e7565b8254620003b6565b6200041a6000620003aa565b9062000428816000620003f2565b6200045f620004587f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620003e7565b91620003e7565b916200046a60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806319d091521461009257806361ba662a1461008d578063687bc0ab14610088578063715018a6146100835780638da5cb5b1461007e578063a26c04ee14610079578063b86e2d72146100745763f2fde38b036100a057610339565b6102dd565b610247565b610208565b6101e4565b6101bd565b61012e565b6100fd565b805b036100a057565b600080fd5b905035906100b282610097565b565b906020828203126100a0576100c8916100a5565b90565b6100c8916008021c5b60ff1690565b906100c891546100cb565b60009081526001602052604081206100c891906100da565b346100a05761012a6101186101133660046100b4565b6100e5565b60405191829182901515815260200190565b0390f35b346100a0576101466101413660046100b4565b6106e8565b604051005b60009103126100a057565b9061017661016f610165845190565b8084529260200190565b9260200190565b9060005b8181106101875750505090565b9091926101a461019d6001928651815260200190565b9460200190565b92910161017a565b60208082526100c892910190610156565b346100a0576101cd36600461014b565b61012a6101d861087e565b604051918291826101ac565b346100a0576101f436600461014b565b610146610389565b6001600160a01b031690565b346100a05761021836600461014b565b61012a61022d6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100a05761014661025a3660046100b4565b6107b6565b634e487b7160e01b600052603260045260246000fd5b80548210156102985761028f600191600052602060002090565b91020190600090565b61025f565b6100c8916008021c81565b906100c8915461029d565b600260006102bf825490565b8310156102da57506100c8916102d491610275565b906102a8565b80fd5b346100a05761012a6102f86102f33660046100b4565b6102b3565b6040515b9182918290815260200190565b6001600160a01b038116610099565b905035906100b282610309565b906020828203126100a0576100c891610318565b346100a05761014661034c366004610325565b6104aa565b6103596103e5565b6100b2610377565b6101fc6100c86100c89290565b6100c890610361565b6100b2610384600061036e565b610509565b6100b2610351565b1561039857565b60405162461bcd60e51b8152806103e1600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100b26103fa6000546001600160a01b031690565b610413610406336101fc565b916001600160a01b031690565b14610391565b6100b2906104256103e5565b610485565b1561043157565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100b2906103846104996101fc600061036e565b6001600160a01b038316141561042a565b6100b290610419565b906001600160a01b03905b9181191691161790565b6100c8906101fc906001600160a01b031682565b6100c8906104c8565b6100c8906104dc565b906104fe6100c8610505926104e5565b82546104b3565b9055565b6000546001600160a01b0316906105218160006104ee565b61055461054e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104e5565b916104e5565b9161055e60405190565b600090a3565b6100b2906105706103e5565b610661565b6100c8906100d4565b6100c89054610575565b1561058f57565b60405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b6044820152606490fd5b9060ff906104be565b906105e66100c861050592151590565b82546105cd565b634e487b7160e01b600052604160045260246000fd5b9160001960089290920291821b911b6104be565b91906106266100c86105059390565b908354610603565b908154916801000000000000000083101561065c57826106569160016100b295018155610275565b90610617565b6105ed565b6106aa600161069161068c610688610683868590600052602052604060002090565b61057e565b1590565b610588565b6106a5838290600052602052604060002090565b6105d6565b6106b581600261062e565b6106e37fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b916102fc60405190565b0390a1565b6100b290610564565b6100b2906106fd6103e5565b610743565b1561070957565b60405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b6044820152606490fd5b61077d6001610767610762610683858490600052602052604060002090565b610702565b6106a58360009290600052602052604060002090565b610788816002610971565b6106e37f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd916102fc60405190565b6100b2906106f1565b6100c89081565b6100c890546107bf565b906107eb6107df610165845490565b92600052602060002090565b9060005b8181106107fc5750505090565b909192610820610819600192610811876107c6565b815260200190565b9460010190565b9291016107ef565b906100c8916107d0565b90601f01601f1916810190811067ffffffffffffffff82111761065c57604052565b906100b261086e9261086560405190565b93848092610828565b0383610832565b6100c890610854565b6100c86002610875565b906108976107df610165845490565b9060005b8181106108a85750505090565b9091926108bd610819600192610811876107c6565b92910161089b565b906100c891610888565b906100b261086e926108e060405190565b938480926108c5565b6100c8906108cf565b6100c86100c86100c89290565b634e487b7160e01b600052601160045260246000fd5b9190820391821161092257565b6108ff565b634e487b7160e01b600052603160045260246000fd5b6100b291600091610617565b8054801561096c5760001901906109696109638383610275565b9061093d565b55565b610927565b61098661098d92610981836108e9565b610a53565b9092901590565b156109cf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6100b2916109ee6109de835490565b6109e860016108f2565b90610915565b908181036109fe575b5050610949565b610656610a116102d4610a189486610275565b9184610275565b38806109f7565b60001981146109225760010190565b90610a37825190565b811015610298576020809102010190565b6100c86000196108f2565b91908251926000610a63816108f2565b855b811015610aaa57610a7d610a798285610a2e565b5190565b8490610a88565b9190565b14610aa057610a99610a6591610a1f565b9050610a63565b9450505050600190565b5093505050610a84610a4856fea2646970667358221220cea7059c06059b0cdd2bc4094fb91f900abb58ad31de2b8f44a6d19c080e596264736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806319d091521461009257806361ba662a1461008d578063687bc0ab14610088578063715018a6146100835780638da5cb5b1461007e578063a26c04ee14610079578063b86e2d72146100745763f2fde38b036100a057610339565b6102dd565b610247565b610208565b6101e4565b6101bd565b61012e565b6100fd565b805b036100a057565b600080fd5b905035906100b282610097565b565b906020828203126100a0576100c8916100a5565b90565b6100c8916008021c5b60ff1690565b906100c891546100cb565b60009081526001602052604081206100c891906100da565b346100a05761012a6101186101133660046100b4565b6100e5565b60405191829182901515815260200190565b0390f35b346100a0576101466101413660046100b4565b6106e8565b604051005b60009103126100a057565b9061017661016f610165845190565b8084529260200190565b9260200190565b9060005b8181106101875750505090565b9091926101a461019d6001928651815260200190565b9460200190565b92910161017a565b60208082526100c892910190610156565b346100a0576101cd36600461014b565b61012a6101d861087e565b604051918291826101ac565b346100a0576101f436600461014b565b610146610389565b6001600160a01b031690565b346100a05761021836600461014b565b61012a61022d6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100a05761014661025a3660046100b4565b6107b6565b634e487b7160e01b600052603260045260246000fd5b80548210156102985761028f600191600052602060002090565b91020190600090565b61025f565b6100c8916008021c81565b906100c8915461029d565b600260006102bf825490565b8310156102da57506100c8916102d491610275565b906102a8565b80fd5b346100a05761012a6102f86102f33660046100b4565b6102b3565b6040515b9182918290815260200190565b6001600160a01b038116610099565b905035906100b282610309565b906020828203126100a0576100c891610318565b346100a05761014661034c366004610325565b6104aa565b6103596103e5565b6100b2610377565b6101fc6100c86100c89290565b6100c890610361565b6100b2610384600061036e565b610509565b6100b2610351565b1561039857565b60405162461bcd60e51b8152806103e1600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100b26103fa6000546001600160a01b031690565b610413610406336101fc565b916001600160a01b031690565b14610391565b6100b2906104256103e5565b610485565b1561043157565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100b2906103846104996101fc600061036e565b6001600160a01b038316141561042a565b6100b290610419565b906001600160a01b03905b9181191691161790565b6100c8906101fc906001600160a01b031682565b6100c8906104c8565b6100c8906104dc565b906104fe6100c8610505926104e5565b82546104b3565b9055565b6000546001600160a01b0316906105218160006104ee565b61055461054e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104e5565b916104e5565b9161055e60405190565b600090a3565b6100b2906105706103e5565b610661565b6100c8906100d4565b6100c89054610575565b1561058f57565b60405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b6044820152606490fd5b9060ff906104be565b906105e66100c861050592151590565b82546105cd565b634e487b7160e01b600052604160045260246000fd5b9160001960089290920291821b911b6104be565b91906106266100c86105059390565b908354610603565b908154916801000000000000000083101561065c57826106569160016100b295018155610275565b90610617565b6105ed565b6106aa600161069161068c610688610683868590600052602052604060002090565b61057e565b1590565b610588565b6106a5838290600052602052604060002090565b6105d6565b6106b581600261062e565b6106e37fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b916102fc60405190565b0390a1565b6100b290610564565b6100b2906106fd6103e5565b610743565b1561070957565b60405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b6044820152606490fd5b61077d6001610767610762610683858490600052602052604060002090565b610702565b6106a58360009290600052602052604060002090565b610788816002610971565b6106e37f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd916102fc60405190565b6100b2906106f1565b6100c89081565b6100c890546107bf565b906107eb6107df610165845490565b92600052602060002090565b9060005b8181106107fc5750505090565b909192610820610819600192610811876107c6565b815260200190565b9460010190565b9291016107ef565b906100c8916107d0565b90601f01601f1916810190811067ffffffffffffffff82111761065c57604052565b906100b261086e9261086560405190565b93848092610828565b0383610832565b6100c890610854565b6100c86002610875565b906108976107df610165845490565b9060005b8181106108a85750505090565b9091926108bd610819600192610811876107c6565b92910161089b565b906100c891610888565b906100b261086e926108e060405190565b938480926108c5565b6100c8906108cf565b6100c86100c86100c89290565b634e487b7160e01b600052601160045260246000fd5b9190820391821161092257565b6108ff565b634e487b7160e01b600052603160045260246000fd5b6100b291600091610617565b8054801561096c5760001901906109696109638383610275565b9061093d565b55565b610927565b61098661098d92610981836108e9565b610a53565b9092901590565b156109cf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6100b2916109ee6109de835490565b6109e860016108f2565b90610915565b908181036109fe575b5050610949565b610656610a116102d4610a189486610275565b9184610275565b38806109f7565b60001981146109225760010190565b90610a37825190565b811015610298576020809102010190565b6100c86000196108f2565b91908251926000610a63816108f2565b855b811015610aaa57610a7d610a798285610a2e565b5190565b8490610a88565b9190565b14610aa057610a99610a6591610a1f565b9050610a63565b9450505050600190565b5093505050610a84610a4856fea2646970667358221220cea7059c06059b0cdd2bc4094fb91f900abb58ad31de2b8f44a6d19c080e596264736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 8924,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 8927,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/NullifierRegistry.json",
    "content": "{\n  \"address\": \"0x2b68bFd2b44a6a9E8dC7b414550457B091ECB5fB\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"nullifier\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NullifierAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_nullifier\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addNullifier\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWriters\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isNullified\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWriter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removedWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"writers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x87f20e411e6d177934f552e975dc2f04fe0f35faad81e4c960e2af734f314755\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x2b68bFd2b44a6a9E8dC7b414550457B091ECB5fB\",\n    \"transactionIndex\": 152,\n    \"gasUsed\": \"782784\",\n    \"logsBloom\": \"0x00000000000000000400000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000004000000\",\n    \"blockHash\": \"0x4df87558b6876d88f79453532297a1e8fbba9defce045ceb06323a4606d63ebb\",\n    \"transactionHash\": \"0x87f20e411e6d177934f552e975dc2f04fe0f35faad81e4c960e2af734f314755\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 152,\n        \"blockNumber\": 20165428,\n        \"transactionHash\": \"0x87f20e411e6d177934f552e975dc2f04fe0f35faad81e4c960e2af734f314755\",\n        \"address\": \"0x2b68bFd2b44a6a9E8dC7b414550457B091ECB5fB\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 465,\n        \"blockHash\": \"0x4df87558b6876d88f79453532297a1e8fbba9defce045ceb06323a4606d63ebb\"\n      }\n    ],\n    \"blockNumber\": 20165428,\n    \"cumulativeGasUsed\": \"26152924\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"nullifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NullifierAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_nullifier\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addNullifier\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWriters\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isNullified\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWriter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removedWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"writers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"params\\\":{\\\"_nullifier\\\":\\\"The nullifier to store\\\"}},\\\"addWritePermission(address)\\\":{\\\"params\\\":{\\\"_newWriter\\\":\\\"The nullifier to store\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeWritePermission(address)\\\":{\\\"params\\\":{\\\"_removedWriter\\\":\\\"The nullifier to store\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"notice\\\":\\\"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\"},\\\"addWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\"},\\\"removeWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/NullifierRegistry.sol\\\":\\\"NullifierRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/NullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"./lib/AddressArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./interfaces/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\\\n    event WriterAdded(address writer);\\\\n    event WriterRemoved(address writer);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyWriter() {\\\\n        require(isWriter[msg.sender], \\\\\\\"Only addresses with write permissions can call\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(bytes32 => bool) public isNullified;\\\\n    mapping(address => bool) public isWriter;\\\\n    address[] public writers;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor() Ownable() {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\\n     *\\\\n     * @param _nullifier    The nullifier to store\\\\n     */\\\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\\\n        require(!isNullified[_nullifier], \\\\\\\"Nullifier already exists\\\\\\\");\\\\n\\\\n        isNullified[_nullifier] = true;\\\\n\\\\n        emit NullifierAdded(_nullifier, msg.sender);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\\n     *\\\\n     * @param _newWriter    The nullifier to store\\\\n     */\\\\n    function addWritePermission(address _newWriter) external onlyOwner {\\\\n        require(!isWriter[_newWriter], \\\\\\\"Address is already a writer\\\\\\\");\\\\n\\\\n        isWriter[_newWriter] = true;\\\\n        writers.push(_newWriter);\\\\n\\\\n        emit WriterAdded(_newWriter);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\\n     *\\\\n     * @param _removedWriter    The nullifier to store\\\\n     */\\\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\\\n        require(isWriter[_removedWriter], \\\\\\\"Address is not a writer\\\\\\\");\\\\n\\\\n        isWriter[_removedWriter] = false;\\\\n        writers.removeStorage(_removedWriter);\\\\n\\\\n        emit WriterRemoved(_removedWriter);\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getWriters() external view returns(address[] memory) {\\\\n       return writers;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x2c461bc3e7074c455f0e7cce2edceb6db47d158ce38f8562ba3c02d41fd4ea77\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6080604052346200002657620000146200002b565b604051610cb3620001278239610cb390f35b600080fd5b6200003562000037565b565b620000358033620000c4565b62000055905b6001600160a01b031690565b90565b62000055905462000043565b620000559062000049906001600160a01b031682565b620000559062000064565b62000055906200007a565b90620000a462000055620000c09262000085565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620000d0600062000058565b90620000de81600062000090565b620001156200010e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000085565b9162000085565b916200012060405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063169394bb146100b2578063286f9201146100ad5780632b29ba23146100a85780635bd4df32146100a357806366a526721461009e578063715018a6146100995780638da5cb5b14610094578063cb01316c1461008f578063d6da03261461008a5763f2fde38b036100c0576103ce565b6103b6565b61038f565b610304565b6102ec565b6102ab565b610213565b6101f8565b610199565b61012c565b805b036100c057565b600080fd5b905035906100d2826100b7565b565b906020828203126100c0576100e8916100c5565b90565b905b600052602052604060002090565b6100e8916008021c5b60ff1690565b906100e891546100fb565b6100e8906101276001916000926100eb565b61010a565b346100c0576101596101476101423660046100d4565b610115565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b0381166100b9565b905035906100d282610169565b906020828203126100c0576100e891610178565b346100c0576101b16101ac366004610185565b610970565b604051005b6100e89061015d906001600160a01b031682565b6100e8906101b6565b6100e8906101ca565b906100ed906101d3565b6100e8906101276002916000926101dc565b346100c05761015961014761020e366004610185565b6101e6565b346100c0576101b16102263660046100d4565b610763565b634e487b7160e01b600052603260045260246000fd5b80548210156102645761025b600191600052602060002090565b91020190600090565b61022b565b6100e8916008021c61015d565b906100e89154610269565b6003600061028d825490565b8310156102a857506100e8916102a291610241565b90610276565b80fd5b346100c0576101596102c66102c13660046100d4565b610281565b6040515b918291826001600160a01b03909116815260200190565b60009103126100c057565b346100c0576102fc3660046102e1565b6101b161043b565b346100c0576103143660046102e1565b6101596102c66103f9565b9061033f61033861032e845190565b8084529260200190565b9260200190565b9060005b8181106103505750505090565b90919261037661036f60019286516001600160a01b0316815260200190565b9460200190565b929101610343565b60208082526100e89291019061031f565b346100c05761039f3660046102e1565b6101596103aa610a30565b6040519182918261037e565b346100c0576101b16103c9366004610185565b6108ab565b346100c0576101b16103e1366004610185565b610552565b6100e89061015d565b6100e890546103e6565b6100e860006103ef565b61040b610497565b6100d2610429565b61015d6100e86100e89290565b6100e890610413565b6100d26104366000610420565b61058b565b6100d2610403565b1561044a57565b60405162461bcd60e51b815280610493600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100d26104a26103f9565b6104bb6104ae3361015d565b916001600160a01b031690565b14610443565b6100d2906104cd610497565b61052d565b156104d957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100d29061043661054161015d6000610420565b6001600160a01b03831614156104d2565b6100d2906104c1565b906001600160a01b03905b9181191691161790565b906105806100e8610587926101d3565b825461055b565b9055565b61059560006103ef565b906105a1816000610570565b6105d46105ce7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101d3565b916101d3565b916105de60405190565b600090a3565b6100e890610104565b6100e890546105e4565b156105fe57565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608490fd5b6100d29061067961067461066f3360026101dc565b6105ed565b6105f7565b6106ea565b1561068557565b60405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606490fd5b9060ff90610566565b906106e36100e861058792151590565b82546106ca565b61071a600161070b61070661070261066f86856100eb565b1590565b61067e565b61071583826100eb565b6106d3565b7f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f8361075e610747336101d3565b9261075160405190565b9182918290815260200190565b0390a2565b6100d29061065a565b6100d290610778610497565b610844565b1561078457565b60405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b916001600160a01b0360089290920291821b911b610566565b91906108096100e8610587936101d3565b9083546107df565b908154916801000000000000000083101561083f57826108399160016100d295018155610241565b906107f8565b6107c9565b61086d600261086161085c61070261066f86856101dc565b61077d565b610715836001926101dc565b610878816003610811565b6108a67f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e916102ca60405190565b0390a1565b6100d29061076c565b6100d2906108c0610497565b610911565b156108cc57565b60405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f742061207772697465720000000000000000006044820152606490fd5b610937600261092b61092661066f85846101dc565b6108c5565b610715836000926101dc565b610942816003610b23565b6108a67f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e916102ca60405190565b6100d2906108b4565b9061099461098861032e845490565b92600052602060002090565b9060005b8181106109a55750505090565b9091926109d26109cb6001926109ba876103ef565b6001600160a01b0316815260200190565b9460010190565b929101610998565b906100e891610979565b90601f01601f1916810190811067ffffffffffffffff82111761083f57604052565b906100d2610a2092610a1760405190565b938480926109da565b03836109e4565b6100e890610a06565b6100e86003610a27565b90610a4961098861032e845490565b9060005b818110610a5a5750505090565b909192610a6f6109cb6001926109ba876103ef565b929101610a4d565b906100e891610a3a565b906100d2610a2092610a9260405190565b93848092610a77565b6100e890610a81565b6100e86100e86100e89290565b634e487b7160e01b600052601160045260246000fd5b91908203918211610ad457565b610ab1565b634e487b7160e01b600052603160045260246000fd5b6100d2916000916107f8565b80548015610b1e576000190190610b1b610b158383610241565b90610aef565b55565b610ad9565b610b38610b3f92610b3383610a9b565b610c05565b9092901590565b15610b815760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6100d291610ba0610b90835490565b610b9a6001610aa4565b90610ac7565b90818103610bb0575b5050610afb565b610839610bc36102a2610bca9486610241565b9184610241565b3880610ba9565b6000198114610ad45760010190565b90610be9825190565b811015610264576020809102010190565b6100e8600019610aa4565b91908251926000610c1581610aa4565b855b811015610c6c57610c38610c2b8285610be0565b516001600160a01b031690565b610c4a6001600160a01b0386166104ae565b14610c6257610c5b610c1791610bd1565b9050610c15565b9450505050600190565b5093505050610c79610bfa565b919056fea2646970667358221220ac3610fa2c1635ee2b87dd0e289f617051e7537c7f88c7217955bec887e7c00964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c8063169394bb146100b2578063286f9201146100ad5780632b29ba23146100a85780635bd4df32146100a357806366a526721461009e578063715018a6146100995780638da5cb5b14610094578063cb01316c1461008f578063d6da03261461008a5763f2fde38b036100c0576103ce565b6103b6565b61038f565b610304565b6102ec565b6102ab565b610213565b6101f8565b610199565b61012c565b805b036100c057565b600080fd5b905035906100d2826100b7565b565b906020828203126100c0576100e8916100c5565b90565b905b600052602052604060002090565b6100e8916008021c5b60ff1690565b906100e891546100fb565b6100e8906101276001916000926100eb565b61010a565b346100c0576101596101476101423660046100d4565b610115565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b0381166100b9565b905035906100d282610169565b906020828203126100c0576100e891610178565b346100c0576101b16101ac366004610185565b610970565b604051005b6100e89061015d906001600160a01b031682565b6100e8906101b6565b6100e8906101ca565b906100ed906101d3565b6100e8906101276002916000926101dc565b346100c05761015961014761020e366004610185565b6101e6565b346100c0576101b16102263660046100d4565b610763565b634e487b7160e01b600052603260045260246000fd5b80548210156102645761025b600191600052602060002090565b91020190600090565b61022b565b6100e8916008021c61015d565b906100e89154610269565b6003600061028d825490565b8310156102a857506100e8916102a291610241565b90610276565b80fd5b346100c0576101596102c66102c13660046100d4565b610281565b6040515b918291826001600160a01b03909116815260200190565b60009103126100c057565b346100c0576102fc3660046102e1565b6101b161043b565b346100c0576103143660046102e1565b6101596102c66103f9565b9061033f61033861032e845190565b8084529260200190565b9260200190565b9060005b8181106103505750505090565b90919261037661036f60019286516001600160a01b0316815260200190565b9460200190565b929101610343565b60208082526100e89291019061031f565b346100c05761039f3660046102e1565b6101596103aa610a30565b6040519182918261037e565b346100c0576101b16103c9366004610185565b6108ab565b346100c0576101b16103e1366004610185565b610552565b6100e89061015d565b6100e890546103e6565b6100e860006103ef565b61040b610497565b6100d2610429565b61015d6100e86100e89290565b6100e890610413565b6100d26104366000610420565b61058b565b6100d2610403565b1561044a57565b60405162461bcd60e51b815280610493600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100d26104a26103f9565b6104bb6104ae3361015d565b916001600160a01b031690565b14610443565b6100d2906104cd610497565b61052d565b156104d957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100d29061043661054161015d6000610420565b6001600160a01b03831614156104d2565b6100d2906104c1565b906001600160a01b03905b9181191691161790565b906105806100e8610587926101d3565b825461055b565b9055565b61059560006103ef565b906105a1816000610570565b6105d46105ce7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101d3565b916101d3565b916105de60405190565b600090a3565b6100e890610104565b6100e890546105e4565b156105fe57565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608490fd5b6100d29061067961067461066f3360026101dc565b6105ed565b6105f7565b6106ea565b1561068557565b60405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606490fd5b9060ff90610566565b906106e36100e861058792151590565b82546106ca565b61071a600161070b61070661070261066f86856100eb565b1590565b61067e565b61071583826100eb565b6106d3565b7f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f8361075e610747336101d3565b9261075160405190565b9182918290815260200190565b0390a2565b6100d29061065a565b6100d290610778610497565b610844565b1561078457565b60405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b916001600160a01b0360089290920291821b911b610566565b91906108096100e8610587936101d3565b9083546107df565b908154916801000000000000000083101561083f57826108399160016100d295018155610241565b906107f8565b6107c9565b61086d600261086161085c61070261066f86856101dc565b61077d565b610715836001926101dc565b610878816003610811565b6108a67f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e916102ca60405190565b0390a1565b6100d29061076c565b6100d2906108c0610497565b610911565b156108cc57565b60405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f742061207772697465720000000000000000006044820152606490fd5b610937600261092b61092661066f85846101dc565b6108c5565b610715836000926101dc565b610942816003610b23565b6108a67f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e916102ca60405190565b6100d2906108b4565b9061099461098861032e845490565b92600052602060002090565b9060005b8181106109a55750505090565b9091926109d26109cb6001926109ba876103ef565b6001600160a01b0316815260200190565b9460010190565b929101610998565b906100e891610979565b90601f01601f1916810190811067ffffffffffffffff82111761083f57604052565b906100d2610a2092610a1760405190565b938480926109da565b03836109e4565b6100e890610a06565b6100e86003610a27565b90610a4961098861032e845490565b9060005b818110610a5a5750505090565b909192610a6f6109cb6001926109ba876103ef565b929101610a4d565b906100e891610a3a565b906100d2610a2092610a9260405190565b93848092610a77565b6100e890610a81565b6100e86100e86100e89290565b634e487b7160e01b600052601160045260246000fd5b91908203918211610ad457565b610ab1565b634e487b7160e01b600052603160045260246000fd5b6100d2916000916107f8565b80548015610b1e576000190190610b1b610b158383610241565b90610aef565b55565b610ad9565b610b38610b3f92610b3383610a9b565b610c05565b9092901590565b15610b815760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6100d291610ba0610b90835490565b610b9a6001610aa4565b90610ac7565b90818103610bb0575b5050610afb565b610839610bc36102a2610bca9486610241565b9184610241565b3880610ba9565b6000198114610ad45760010190565b90610be9825190565b811015610264576020809102010190565b6100e8600019610aa4565b91908251926000610c1581610aa4565b855b811015610c6c57610c38610c2b8285610be0565b516001600160a01b031690565b610c4a6001600160a01b0386166104ae565b14610c6257610c5b610c1791610bd1565b9050610c15565b9450505050600190565b5093505050610c79610bfa565b919056fea2646970667358221220ac3610fa2c1635ee2b87dd0e289f617051e7537c7f88c7217955bec887e7c00964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"params\": {\n          \"_nullifier\": \"The nullifier to store\"\n        }\n      },\n      \"addWritePermission(address)\": {\n        \"params\": {\n          \"_newWriter\": \"The nullifier to store\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"params\": {\n          \"_removedWriter\": \"The nullifier to store\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"notice\": \"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\"\n      },\n      \"addWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9095,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isNullified\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 9099,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isWriter\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 9102,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"writers\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/TransferDomainProcessor.json",
    "content": "{\n  \"address\": \"0xB7C59f5a38dD6396c31B014599b9483084084d33\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"exchange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"hashedReceiverId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"domainName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[10]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[10]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x52e8d21afbc41c9608830569d066b5b961073cd01f531a66b7c0501629b41e7f\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xB7C59f5a38dD6396c31B014599b9483084084d33\",\n    \"transactionIndex\": 47,\n    \"gasUsed\": \"1844002\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000004000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000402000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x62abf486e49e9146b2b45da8c8c8fbf5476147ef91f96f0738c35fbafcdfd5f4\",\n    \"transactionHash\": \"0x52e8d21afbc41c9608830569d066b5b961073cd01f531a66b7c0501629b41e7f\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 47,\n        \"blockNumber\": 20380397,\n        \"transactionHash\": \"0x52e8d21afbc41c9608830569d066b5b961073cd01f531a66b7c0501629b41e7f\",\n        \"address\": \"0xB7C59f5a38dD6396c31B014599b9483084084d33\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 91,\n        \"blockHash\": \"0x62abf486e49e9146b2b45da8c8c8fbf5476147ef91f96f0738c35fbafcdfd5f4\"\n      }\n    ],\n    \"blockNumber\": 20380397,\n    \"cumulativeGasUsed\": \"6600956\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xe4148B108Fe4D7421853FE8cFfd35bDc2c0d95Ec\",\n    \"0x2b68bFd2b44a6a9E8dC7b414550457B091ECB5fB\",\n    \"support@namecheap.com\",\n    \"0\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"a22247643263102eca9fc6c72e24c17d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"exchange\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"internalType\\\":\\\"struct ITransferDomainProcessor.TransferProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"hashedReceiverId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"domainName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/TransferDomainProcessor.sol\\\":\\\"TransferDomainProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/TransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { EmailBaseProcessor } from \\\\\\\"./external/processors/EmailBaseProcessor.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./external/interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"./external/lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\nimport { Groth16Verifier } from \\\\\\\"./verifiers/namecheap_transfer_verifier.sol\\\\\\\";\\\\nimport { ITransferDomainProcessor } from \\\\\\\"./interfaces/ITransferDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 31;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _exchange,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        EmailBaseProcessor(\\\\n            _exchange,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    )\\\\n        external\\\\n        override\\\\n        onlyExchange\\\\n        returns (\\\\n            bytes32 dkimKeyHash,\\\\n            bytes32 hashedReceiverId,\\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\");\\\\n\\\\n        // Signal [0] is the DKIM key hash\\\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\\\n\\\\n        // Signals [1:2] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\\\n        require(\\\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\n            \\\\\\\"Invalid email from address\\\\\\\"\\\\n        );\\\\n        \\\\n        // Signals [2:7] are packed domain name\\\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\\\n\\\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\\\n\\\\n        // Signal [9] is bidId\\\\n        bidId = _proof.signals[9];\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\\\n        internal \\\\n        pure \\\\n        returns (string memory) \\\\n    {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x27e7d34dbe222f5a865d0b34f276eac82f3888f00e9816c398ee5fe9cf18bb2c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/processors/EmailBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../interfaces/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract EmailBaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyExchange() {\\\\n        require(msg.sender == exchange, \\\\\\\"Only exchange can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable exchange;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _exchange,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        exchange = _exchange;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe210c8e937a457c2d2aff798f3696f04ce1d011470294f02fb1169006a385f07\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ITransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface ITransferDomainProcessor {\\\\n\\\\n    struct TransferProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[10] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    ) \\\\n        external \\\\n        returns (\\\\n            bytes32 dkimKeyHash, \\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        );\\\\n}\\\",\\\"keccak256\\\":\\\"0x9cf5f1b070d7bad73d8ae57f7b20d449853f96fcbb5df1a443723df41c91339d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/namecheap_transfer_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\\\\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\\\\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\\\\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\\\\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\\\\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\\\\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\\\\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\\\\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\\\\n\\\\n\\\\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\\\\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\\\\n\\\\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\\\\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\\\\n\\\\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\\\\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\\\\n\\\\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\\\\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\\\\n\\\\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\\\\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\\\\n\\\\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\\\\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\\\\n\\\\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\\\\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\\\\n\\\\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\\\\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\\\\n\\\\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\\\\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\\\\n\\\\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\\\\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\\\\n\\\\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\\\\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, r)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0xe7d4d4df7314df193c8206345215947c6902e58dd2e51e426eae6cc394028ca8\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523462000044576200002262000018620001f4565b929190916200021d565b604051611eb56200054c82396080518181816104da01526109460152611eb590f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200008157604052565b62000049565b906200009e6200009660405190565b92836200005f565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200004457565b905051906200009e82620000af565b6001600160a01b038116620000ba565b905051906200009e82620000d1565b6001600160401b0381116200008157602090601f01601f19160190565b60005b838110620001215750506000910152565b818101518382015260200162000110565b909291926200014b6200014582620000f0565b62000087565b9381855260208501908284011162000044576200009e926200010d565b9080601f8301121562000044578151620000ac9260200162000132565b80620000ba565b905051906200009e8262000185565b6080818303126200004457620001b28282620000c2565b92620001c28360208401620000e1565b604083015190936001600160401b0382116200004457620001ea81620000ac93860162000168565b936060016200018c565b6200021762002401803803806200020b8162000087565b9283398101906200019b565b90919293565b906200009e939291620004ab565b906001600160a01b03905b9181191691161790565b620000ac90620000a0906001600160a01b031682565b620000ac9062000240565b620000ac9062000256565b9062000280620000ac620002889262000261565b82546200022b565b9055565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620002c5575b6020831014620002bf57565b6200028c565b91607f1691620002b3565b9160001960089290920291821b911b62000236565b620000ac620000ac620000ac9290565b91906200030a620000ac6200028893620002e5565b908354620002d0565b6200009e91600091620002f5565b8181106200032d575050565b806200033d600060019362000313565b0162000321565b9190601f81116200035457505050565b620003686200009e93600052602060002090565b906020601f8401819004830193106200038c575b6020601f90910104019062000321565b90915081906200037c565b90620003a1815190565b906001600160401b0382116200008157620003c982620003c28554620002a2565b8562000344565b602090601f8311600114620004085762000288929160009183620003fc575b5050600019600883021c1916906002021790565b015190503880620003e8565b601f198316916200041e85600052602060002090565b9260005b8181106200045f5750916002939185600196941062000445575b50505002019055565b01516000196008601f8516021c191690553880806200043c565b9193602060018192878701518155019501920162000422565b906200009e9162000397565b906000199062000236565b90620004a3620000ac6200028892620002e5565b825462000484565b6200009e9392620000ac620004dc93620004d493620004c9620004e4565b60805260016200026c565b600262000478565b60036200048f565b6200009e336000546001600160a01b031690620005038160006200026c565b6200053a620005337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000261565b9162000261565b916200054560405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806365cd296c146100d2578063715018a6146100cd5780638da5cb5b146100c8578063b2a3fda4146100c3578063b870676c146100be578063c0d05fed146100b9578063ced1e978146100b4578063d2f7265a146100af578063dbac5821146100aa578063f2fde38b146100a5578063f3bb70f6146100a05763f6c7226b036100e6576106bf565b6105f9565b61057b565b610520565b6104c5565b6104aa565b610483565b6102e7565b610265565b610206565b6101dd565b61019d565b90816102409103126100e65790565b600080fd5b90610240828203126100e657610100916100d7565b90565b9052565b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b94939160609161019b946101896101969361018260808b019460008c0152565b60208a0152565b878203604089015261012a565b940152565b565b346100e6576101ce6101b86101b33660046100eb565b610d21565b906101c594929460405190565b94859485610162565b0390f35b60009103126100e657565b346100e6576101ed3660046101d2565b6101f561072c565b604051005b6001600160a01b031690565b346100e6576102163660046101d2565b6101ce6102216106ea565b604051918291826001600160a01b03909116815260200190565b805b036100e657565b9050359061019b8261023b565b906020828203126100e65761010091610244565b346100e6576101f5610278366004610251565b6115da565b610100916008021c6001600160a01b031690565b90610100915461027d565b61010060006001610291565b610100906101fa906001600160a01b031682565b610100906102a8565b610100906102bc565b610103906102c5565b60208101929161019b91906102ce565b346100e6576102f73660046101d2565b6101ce61030261029c565b604051918291826102d7565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561035a575b602083101461035557565b610324565b91607f169161034a565b805460009392916103816103778361033a565b8085529360200190565b91600181169081156103d3575060011461039a57505050565b6103ad9192939450600052602060002090565b916000925b8184106103bf5750500190565b8054848401526020909301926001016103b2565b92949550505060ff1916825215156020020190565b9061010091610364565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761042a57604052565b6103f2565b9061019b6104499261044060405190565b938480926103e8565b0383610408565b90600010610461576101009061042f565b61030e565b61010060006002610450565b60208082526101009291019061012a565b346100e6576104933660046101d2565b6101ce61049e610466565b60405191829182610472565b346100e6576104ba3660046101d2565b6101ce61049e6115e3565b346100e6576104d53660046101d2565b6101ce7f0000000000000000000000000000000000000000000000000000000000000000610221565b610100916008021c81565b9061010091546104fe565b61010060006003610509565b346100e6576105303660046101d2565b6101ce61053b610514565b6040519182918290815260200190565b6001600160a01b03811661023d565b9050359061019b8261054b565b906020828203126100e6576101009161055a565b346100e6576101f561058e366004610567565b610843565b919060408301116100e657565b919060808301116100e657565b91906101408301116100e657565b610240818303126100e6576105d08282610593565b926101006105e184604085016105a0565b936105ef8160c08601610593565b93610100016105ad565b346100e6576106093660046105bb565b92919091611dc4565b9061019b61061f60405190565b9283610408565b67ffffffffffffffff811161042a57602090601f01601f19160190565b90826000939282370152565b9092919261066461065f82610626565b610612565b938185526020850190828401116100e65761019b92610643565b9080601f830112156100e6578160206101009335910161064f565b906020828203126100e657813567ffffffffffffffff81116100e657610100920161067e565b346100e6576101f56106d2366004610699565b611594565b610100906101fa565b61010090546106d7565b61010060006106e0565b6106fc610788565b61019b61071a565b6101fa6101006101009290565b61010090610704565b61019b6107276000610711565b61087c565b61019b6106f4565b1561073b57565b60405162461bcd60e51b815280610784600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b61019b6107936106ea565b6107ac61079f336101fa565b916001600160a01b031690565b14610734565b61019b906107be610788565b61081e565b156107ca57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61019b906107276108326101fa6000610711565b6001600160a01b03831614156107c3565b61019b906107b2565b906001600160a01b03905b9181191691161790565b90610871610100610878926102c5565b825461084c565b9055565b61088660006106e0565b90610892816000610861565b6108c56108bf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936102c5565b916102c5565b916108cf60405190565b600090a3565b156108dc57565b60405162461bcd60e51b8152602060048201526024808201527f4f6e6c792065786368616e67652063616e2063616c6c20746869732066756e636044820152633a34b7b760e11b6064820152608490fd5b61097694939291906109713361096b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661079f565b146108d5565b610b73565b90919293565b80151561023d565b9050519061019b8261097c565b906020828203126100e65761010091610984565b9037565b61019b916040916109a5565b9061015e816040936109a9565b6109d26109ce60029390565b9190565b806000925b8484106109e5575050505050565b610a016109fa6001926109f58690565b6109b5565b9360400190565b930192916109d7565b61019b91610140916109a5565b610a4f61019b94610a4561010094989795610a3b61024086019a60008701906109a9565b60408501906109c2565b60c08301906109a9565b0190610a0a565b6040513d6000823e3d90fd5b15610a6957565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90600a811015610ac5576020020190565b610a9e565b6101006101006101009290565b356101008161023b565b610aee6101006101009290565b60ff1690565b61015e610b0c92602092610b06815190565b94859290565b93849101610107565b61010091610af4565b6101009061042f565b15610b2e57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606490fd5b50505050610b80306102c5565b602063f3bb70f6916000840190610bb96040860194610bc461010060c0890198018098610bac60405190565b9889978896879660e01b90565b865260048601610a17565b03915afa8015610d1c57610be091600091610cee575b50610a62565b610c03610bfe610bf9610bf36000610aca565b84610ab4565b610ad7565b610aca565b91600290610c88610c146001610ae1565b92610c826109ce610c73610c32610c2a85610ae1565b80988a610e1c565b610c5a610c3e60405190565b8092610c4e602083019182610b15565b90810382520382610408565b610c6c610c65825190565b9160200190565b2093610b1e565b610c7e610c65825190565b2090565b14610b27565b610100610bf9610cbc610bfe610bf9610cb6610cb0600798610ca98a610ae1565b908b610e1c565b97610aca565b88610ab4565b94610cde610cd9610bfe610bf9610cd36008610aca565b85610ab4565b611639565b610ce86009610aca565b90610ab4565b610d0f915060203d8111610d15575b610d078183610408565b810190610991565b38610bda565b503d610cfd565b610a56565b6109769060006060818061092d565b634e487b7160e01b600052601160045260246000fd5b610d559060ff165b9160ff1690565b90039060ff8211610d6257565b610d30565b6101006101006101009260ff1690565b67ffffffffffffffff811161042a5760208091020190565b90610d9c61065f83610d77565b918252565b369037565b9061019b610dbc610db684610d8f565b93610d77565b601f190160208401610da1565b6000198114610d625760010190565b91908203918211610d6257565b90610dee825190565b811015610ac5576020809102010190565b610100601f610aca565b81810292918115918404141715610d6257565b909290610e39610e34610e2f8686610d46565b610d67565b610da6565b91610e4385610d67565b610e4c85610d67565b811015610e9457610e8d81610e88610e6a610bf9610e4c9588610ab4565b610e85610e7f610e798c610d67565b85610dd8565b89610de5565b52565b610dc9565b9050610e43565b509350506101009150610ea5815190565b90610eb8610eb1610dff565b8093610e09565b906110c9565b90610d9c61065f83610626565b9061019b610dbc610edb84610ebe565b93610626565b610eee6101006101009290565b61ffff1690565b61ffff1661ffff8114610d625760010190565b6101006101006101009261ffff1690565b61010090610f2a6109ce6101009490565b901c90565b634e487b7160e01b600052601260045260246000fd5b610f519060ff16610d4e565b908115610f5c570690565b610f2f565b610f6d9060ff16610d4e565b019060ff8211610d6257565b610f8f610f896101009260ff1690565b60f81b90565b6001600160f81b03191690565b90610fa5825190565b811015610ac5570160200190565b61010090610f2a6109ce6101009460ff1690565b15610fce57565b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a490fd5b1561106657565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b926000926110d684610ae1565b6110ef6110ea836110e5895190565b610e09565b610ecb565b946110f981610aca565b9561110382610ee1565b965b6111106101008a5190565b61111989610f08565b10156112e75761113861113461112e8a610f08565b8b610de5565b5190565b98899661114487610da6565b9861114e86610aca565b8881101561119b5780610e888c8f6111969461118861118361118e9361117d6111776008610aca565b85610e09565b90610f19565b610ae1565b92610de5565b9060ff169052565b61114e565b5091909a50989295989793969194976111b388610aca565b955b8a8710156112c6576111d4610e2f6111cd8989610de5565b5160ff1690565b6111dd8a610aca565b811461127957906111f86111f361120a93610ae1565b610f79565b8a1a611204828b610f9c565b53610dc9565b9261121e6112186002610ae1565b8b610f45565b61122a610d4e8b610ae1565b14611255575b61124861124e915b6112426008610ae1565b90610fb3565b96610dc9565b95926111b5565b9861124861127061124e9261126a6001610ae1565b90610f61565b9a915050611230565b50926112886112186002610ae1565b600190611297610d4e83610ae1565b146112aa575b5061124861124e91611238565b6112be61124e929b61126a61124893610ae1565b9a915061129d565b989550935097949598916112da9150610ef5565b9695979197949094611105565b926109ce919598506101009750610100945061131a92509561010061132197611313610d4e6001610ae1565b1015610fc7565b111561105f565b611333565b610f8f610f896101009290565b80519060009261134284610aca565b61134d610100845190565b8110156113ef5761136f6113618285610f9c565b516001600160f81b03191690565b61138961137b87611326565b916001600160f81b03191690565b1461139c5761139790610dc9565b611342565b9250905b6113a983610ecb565b916113b385610aca565b845b8110156113e3576113dc816113d06113616113b59487610f9c565b881a6112048288610f9c565b90506113b3565b50935050610100915090565b50906113a0565b61019b90611402610788565b611589565b9160001960089290920291821b911b610857565b919061142c61010061087893610aca565b908354611407565b61019b9160009161141b565b81811061144b575050565b806114596000600193611434565b01611440565b9190601f811161146e57505050565b61148061019b93600052602060002090565b906020601f8401819004830193106114a2575b6020601f909101040190611440565b9091508190611493565b906114b5815190565b9067ffffffffffffffff821161042a576114d9826114d3855461033a565b8561145f565b602090601f831160011461151457610878929160009183611509575b5050600019600883021c1916906002021790565b0151905038806114f5565b601f1983169161152985600052602060002090565b9260005b8181106115675750916002939185600196941061154e575b50505002019055565b01516000196008601f8516021c19169055388080611545565b9193602060018192878701518155019501920161152d565b9061019b916114ac565b61019b90600261157f565b61019b906113f6565b61019b906115a9610788565b6115cf565b9060001990610857565b906115c861010061087892610aca565b82546115ae565b61019b9060036115b8565b61019b9061159d565b6101006002610b1e565b156115f457565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b611668602061165061164b60016106e0565b6102c5565b63169394bb9061165f60405190565b93849260e01b90565b82526004820185905260249082905afa908115610d1c57611698916116939160009161170b57501590565b6115ed565b6116a561164b60016106e0565b90635bd4df3290823b156100e6576116e2926116d4600080946116c760405190565b9687958694859360e01b90565b835260048301526024820190565b03925af18015610d1c576116f35750565b61019b9060006117038183610408565b8101906101d2565b611723915060203d8111610d1557610d078183610408565b1590565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001111561175057565b6000805260206000f35b919290926040519384526020840152604083015260408260608160076107d05a03fa156117505760806040928251848201526020830151606082015260066107d05a03fa1561175057565b93909260606020947f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47866080860198611b3f61012060008901977f1e3e840b53d3d27676a7593010db26c5d9c1be77982792c6a77bc51d996f59a489527f1fd57321e650c7231e9c2bcaf52236a0c52183e7dce757a3f1d74795afb9e3b9858a015261187760008201357f0a16776c085ca9fef14f58edbe5d3a3bdab9e490c9a3eef08331d35ad2687f1a7f055317dc49fd6dcd6f0d41a0f2be1e9ee5791af5077463c528dfb11944e38ea98c61175a565b6118c6858201357f0c1ebe29c01c5507488889e7ce28a5c925303856991945abb9a582b5218fe65d7f19dcecc22906300af06e53e1474d9b7c1d903775ddc1d8fc80587b6295d805858c61175a565b61191560408201357e51b809e3826e7d4bd859712d063d94783155f1e3c2d2df15240e8e7a1084457f2deaa61988aa335a5d94e8fc258fc360642f04989206c5b2f7377375bda2f2d58c61175a565b611964888201357f05481cfc53d291fb148bad51bc06bde7867ed38f3a019ecab25623ef9712bee67f0c1ff12c2af5e77866e13bc8bf89c58fd71e00f8d9fa29f44d3dda23267e892e8c61175a565b6119b460808201357f0c4a6bb6fdf60dbd2bebbd94c6d1ee9df64d15d4daa5573259e8724aa6d204c87f263812b8d2f91cd28b047e4935b8f7690c058763f2a57e02dc585416581d7f008c61175a565b611a0460a08201357f250ca18d4fd055aaa9095afd2d9cc339494b15341db450dca87bc857af2ce63c7f0d392fbad06e8aa6134b36ab2f7e2dd3c4b9f1a6aa009025978b5c4392a735b88c61175a565b611a5460c08201357f25d7e948e6ed9a2c550e9ac258a07d4a63182e4d7f0485acbf4eaeed0605d3a87f2ebb57f846731282b83de6b1fb4972b43713d037e1201de95880dd93590cdb378c61175a565b611aa460e08201357f1ccdd1ff9c12fee3aa632ef781714c2bc0bf12f01700911ed53536eb8c06efc77f23d8f1651f2fc35e077cb85ebb8b439f03c6fe4278ab0506703076037eba42ac8c61175a565b611af56101008201357f2039ef6253562b611e7f25a9bc2040f51ca3b9418e814163399ac11e8400cb717f28b295c865a6ed002fca95eef35f5c03e2ce284451a870d8cf7652f93757a0118c61175a565b01357f0f1e0ab547325e430a7356fe384a8db2f12c7fa605bdd918070ba1f0c87d543f7f2bace91ad1b222b2adfe20661747868d7c6a0c051efa473232733d915c32bc988961175a565b80358a5201358103068688015280356040880152858101358288015260408101356080880152013560a08601527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08601527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08601527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008601527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208601527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408601527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160860152516101808501528260000101516101a08401527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08401527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08401527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008401527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220840152803561024084015201356102608201527f0346cd87c9157b61554887f5f9b224de5cbe4ff8a86144a187d3f4e29c88115a6102808201527f161cd069685c9306d50c4af8ae4066febce4c3ee37dc0ae7050c3c2867c94ddf6102a08201527f1c9613e703c7c4be8c54ac686117c49201b663c52e59a0696ab3601a31ce1a216102c08201527f292b3ecaed6bffe99dea030955f5d260b73b0d381d1edf05efa16d6fc8c0571e6102e08201526020816103008160086107d05a03fa90511690565b91611e769391611dd2600090565b50604051936103808501604052611dec6000850135611727565b611df96020850135611727565b611e066040850135611727565b611e136060850135611727565b611e206080850135611727565b611e2d60a0850135611727565b611e3a60c0850135611727565b611e4760e0850135611727565b611e55610100850135611727565b611e63610120850135611727565b611e71610140850135611727565b6117a5565b60005260206000f3fea26469706673582212205d578d1e202f46a1a10e4e4c0a699e25343984036d710450a93c5624e06ec55b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806365cd296c146100d2578063715018a6146100cd5780638da5cb5b146100c8578063b2a3fda4146100c3578063b870676c146100be578063c0d05fed146100b9578063ced1e978146100b4578063d2f7265a146100af578063dbac5821146100aa578063f2fde38b146100a5578063f3bb70f6146100a05763f6c7226b036100e6576106bf565b6105f9565b61057b565b610520565b6104c5565b6104aa565b610483565b6102e7565b610265565b610206565b6101dd565b61019d565b90816102409103126100e65790565b600080fd5b90610240828203126100e657610100916100d7565b90565b9052565b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b94939160609161019b946101896101969361018260808b019460008c0152565b60208a0152565b878203604089015261012a565b940152565b565b346100e6576101ce6101b86101b33660046100eb565b610d21565b906101c594929460405190565b94859485610162565b0390f35b60009103126100e657565b346100e6576101ed3660046101d2565b6101f561072c565b604051005b6001600160a01b031690565b346100e6576102163660046101d2565b6101ce6102216106ea565b604051918291826001600160a01b03909116815260200190565b805b036100e657565b9050359061019b8261023b565b906020828203126100e65761010091610244565b346100e6576101f5610278366004610251565b6115da565b610100916008021c6001600160a01b031690565b90610100915461027d565b61010060006001610291565b610100906101fa906001600160a01b031682565b610100906102a8565b610100906102bc565b610103906102c5565b60208101929161019b91906102ce565b346100e6576102f73660046101d2565b6101ce61030261029c565b604051918291826102d7565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561035a575b602083101461035557565b610324565b91607f169161034a565b805460009392916103816103778361033a565b8085529360200190565b91600181169081156103d3575060011461039a57505050565b6103ad9192939450600052602060002090565b916000925b8184106103bf5750500190565b8054848401526020909301926001016103b2565b92949550505060ff1916825215156020020190565b9061010091610364565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761042a57604052565b6103f2565b9061019b6104499261044060405190565b938480926103e8565b0383610408565b90600010610461576101009061042f565b61030e565b61010060006002610450565b60208082526101009291019061012a565b346100e6576104933660046101d2565b6101ce61049e610466565b60405191829182610472565b346100e6576104ba3660046101d2565b6101ce61049e6115e3565b346100e6576104d53660046101d2565b6101ce7f0000000000000000000000000000000000000000000000000000000000000000610221565b610100916008021c81565b9061010091546104fe565b61010060006003610509565b346100e6576105303660046101d2565b6101ce61053b610514565b6040519182918290815260200190565b6001600160a01b03811661023d565b9050359061019b8261054b565b906020828203126100e6576101009161055a565b346100e6576101f561058e366004610567565b610843565b919060408301116100e657565b919060808301116100e657565b91906101408301116100e657565b610240818303126100e6576105d08282610593565b926101006105e184604085016105a0565b936105ef8160c08601610593565b93610100016105ad565b346100e6576106093660046105bb565b92919091611dc4565b9061019b61061f60405190565b9283610408565b67ffffffffffffffff811161042a57602090601f01601f19160190565b90826000939282370152565b9092919261066461065f82610626565b610612565b938185526020850190828401116100e65761019b92610643565b9080601f830112156100e6578160206101009335910161064f565b906020828203126100e657813567ffffffffffffffff81116100e657610100920161067e565b346100e6576101f56106d2366004610699565b611594565b610100906101fa565b61010090546106d7565b61010060006106e0565b6106fc610788565b61019b61071a565b6101fa6101006101009290565b61010090610704565b61019b6107276000610711565b61087c565b61019b6106f4565b1561073b57565b60405162461bcd60e51b815280610784600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b61019b6107936106ea565b6107ac61079f336101fa565b916001600160a01b031690565b14610734565b61019b906107be610788565b61081e565b156107ca57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61019b906107276108326101fa6000610711565b6001600160a01b03831614156107c3565b61019b906107b2565b906001600160a01b03905b9181191691161790565b90610871610100610878926102c5565b825461084c565b9055565b61088660006106e0565b90610892816000610861565b6108c56108bf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936102c5565b916102c5565b916108cf60405190565b600090a3565b156108dc57565b60405162461bcd60e51b8152602060048201526024808201527f4f6e6c792065786368616e67652063616e2063616c6c20746869732066756e636044820152633a34b7b760e11b6064820152608490fd5b61097694939291906109713361096b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661079f565b146108d5565b610b73565b90919293565b80151561023d565b9050519061019b8261097c565b906020828203126100e65761010091610984565b9037565b61019b916040916109a5565b9061015e816040936109a9565b6109d26109ce60029390565b9190565b806000925b8484106109e5575050505050565b610a016109fa6001926109f58690565b6109b5565b9360400190565b930192916109d7565b61019b91610140916109a5565b610a4f61019b94610a4561010094989795610a3b61024086019a60008701906109a9565b60408501906109c2565b60c08301906109a9565b0190610a0a565b6040513d6000823e3d90fd5b15610a6957565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90600a811015610ac5576020020190565b610a9e565b6101006101006101009290565b356101008161023b565b610aee6101006101009290565b60ff1690565b61015e610b0c92602092610b06815190565b94859290565b93849101610107565b61010091610af4565b6101009061042f565b15610b2e57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606490fd5b50505050610b80306102c5565b602063f3bb70f6916000840190610bb96040860194610bc461010060c0890198018098610bac60405190565b9889978896879660e01b90565b865260048601610a17565b03915afa8015610d1c57610be091600091610cee575b50610a62565b610c03610bfe610bf9610bf36000610aca565b84610ab4565b610ad7565b610aca565b91600290610c88610c146001610ae1565b92610c826109ce610c73610c32610c2a85610ae1565b80988a610e1c565b610c5a610c3e60405190565b8092610c4e602083019182610b15565b90810382520382610408565b610c6c610c65825190565b9160200190565b2093610b1e565b610c7e610c65825190565b2090565b14610b27565b610100610bf9610cbc610bfe610bf9610cb6610cb0600798610ca98a610ae1565b908b610e1c565b97610aca565b88610ab4565b94610cde610cd9610bfe610bf9610cd36008610aca565b85610ab4565b611639565b610ce86009610aca565b90610ab4565b610d0f915060203d8111610d15575b610d078183610408565b810190610991565b38610bda565b503d610cfd565b610a56565b6109769060006060818061092d565b634e487b7160e01b600052601160045260246000fd5b610d559060ff165b9160ff1690565b90039060ff8211610d6257565b610d30565b6101006101006101009260ff1690565b67ffffffffffffffff811161042a5760208091020190565b90610d9c61065f83610d77565b918252565b369037565b9061019b610dbc610db684610d8f565b93610d77565b601f190160208401610da1565b6000198114610d625760010190565b91908203918211610d6257565b90610dee825190565b811015610ac5576020809102010190565b610100601f610aca565b81810292918115918404141715610d6257565b909290610e39610e34610e2f8686610d46565b610d67565b610da6565b91610e4385610d67565b610e4c85610d67565b811015610e9457610e8d81610e88610e6a610bf9610e4c9588610ab4565b610e85610e7f610e798c610d67565b85610dd8565b89610de5565b52565b610dc9565b9050610e43565b509350506101009150610ea5815190565b90610eb8610eb1610dff565b8093610e09565b906110c9565b90610d9c61065f83610626565b9061019b610dbc610edb84610ebe565b93610626565b610eee6101006101009290565b61ffff1690565b61ffff1661ffff8114610d625760010190565b6101006101006101009261ffff1690565b61010090610f2a6109ce6101009490565b901c90565b634e487b7160e01b600052601260045260246000fd5b610f519060ff16610d4e565b908115610f5c570690565b610f2f565b610f6d9060ff16610d4e565b019060ff8211610d6257565b610f8f610f896101009260ff1690565b60f81b90565b6001600160f81b03191690565b90610fa5825190565b811015610ac5570160200190565b61010090610f2a6109ce6101009460ff1690565b15610fce57565b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a490fd5b1561106657565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b926000926110d684610ae1565b6110ef6110ea836110e5895190565b610e09565b610ecb565b946110f981610aca565b9561110382610ee1565b965b6111106101008a5190565b61111989610f08565b10156112e75761113861113461112e8a610f08565b8b610de5565b5190565b98899661114487610da6565b9861114e86610aca565b8881101561119b5780610e888c8f6111969461118861118361118e9361117d6111776008610aca565b85610e09565b90610f19565b610ae1565b92610de5565b9060ff169052565b61114e565b5091909a50989295989793969194976111b388610aca565b955b8a8710156112c6576111d4610e2f6111cd8989610de5565b5160ff1690565b6111dd8a610aca565b811461127957906111f86111f361120a93610ae1565b610f79565b8a1a611204828b610f9c565b53610dc9565b9261121e6112186002610ae1565b8b610f45565b61122a610d4e8b610ae1565b14611255575b61124861124e915b6112426008610ae1565b90610fb3565b96610dc9565b95926111b5565b9861124861127061124e9261126a6001610ae1565b90610f61565b9a915050611230565b50926112886112186002610ae1565b600190611297610d4e83610ae1565b146112aa575b5061124861124e91611238565b6112be61124e929b61126a61124893610ae1565b9a915061129d565b989550935097949598916112da9150610ef5565b9695979197949094611105565b926109ce919598506101009750610100945061131a92509561010061132197611313610d4e6001610ae1565b1015610fc7565b111561105f565b611333565b610f8f610f896101009290565b80519060009261134284610aca565b61134d610100845190565b8110156113ef5761136f6113618285610f9c565b516001600160f81b03191690565b61138961137b87611326565b916001600160f81b03191690565b1461139c5761139790610dc9565b611342565b9250905b6113a983610ecb565b916113b385610aca565b845b8110156113e3576113dc816113d06113616113b59487610f9c565b881a6112048288610f9c565b90506113b3565b50935050610100915090565b50906113a0565b61019b90611402610788565b611589565b9160001960089290920291821b911b610857565b919061142c61010061087893610aca565b908354611407565b61019b9160009161141b565b81811061144b575050565b806114596000600193611434565b01611440565b9190601f811161146e57505050565b61148061019b93600052602060002090565b906020601f8401819004830193106114a2575b6020601f909101040190611440565b9091508190611493565b906114b5815190565b9067ffffffffffffffff821161042a576114d9826114d3855461033a565b8561145f565b602090601f831160011461151457610878929160009183611509575b5050600019600883021c1916906002021790565b0151905038806114f5565b601f1983169161152985600052602060002090565b9260005b8181106115675750916002939185600196941061154e575b50505002019055565b01516000196008601f8516021c19169055388080611545565b9193602060018192878701518155019501920161152d565b9061019b916114ac565b61019b90600261157f565b61019b906113f6565b61019b906115a9610788565b6115cf565b9060001990610857565b906115c861010061087892610aca565b82546115ae565b61019b9060036115b8565b61019b9061159d565b6101006002610b1e565b156115f457565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b611668602061165061164b60016106e0565b6102c5565b63169394bb9061165f60405190565b93849260e01b90565b82526004820185905260249082905afa908115610d1c57611698916116939160009161170b57501590565b6115ed565b6116a561164b60016106e0565b90635bd4df3290823b156100e6576116e2926116d4600080946116c760405190565b9687958694859360e01b90565b835260048301526024820190565b03925af18015610d1c576116f35750565b61019b9060006117038183610408565b8101906101d2565b611723915060203d8111610d1557610d078183610408565b1590565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001111561175057565b6000805260206000f35b919290926040519384526020840152604083015260408260608160076107d05a03fa156117505760806040928251848201526020830151606082015260066107d05a03fa1561175057565b93909260606020947f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47866080860198611b3f61012060008901977f1e3e840b53d3d27676a7593010db26c5d9c1be77982792c6a77bc51d996f59a489527f1fd57321e650c7231e9c2bcaf52236a0c52183e7dce757a3f1d74795afb9e3b9858a015261187760008201357f0a16776c085ca9fef14f58edbe5d3a3bdab9e490c9a3eef08331d35ad2687f1a7f055317dc49fd6dcd6f0d41a0f2be1e9ee5791af5077463c528dfb11944e38ea98c61175a565b6118c6858201357f0c1ebe29c01c5507488889e7ce28a5c925303856991945abb9a582b5218fe65d7f19dcecc22906300af06e53e1474d9b7c1d903775ddc1d8fc80587b6295d805858c61175a565b61191560408201357e51b809e3826e7d4bd859712d063d94783155f1e3c2d2df15240e8e7a1084457f2deaa61988aa335a5d94e8fc258fc360642f04989206c5b2f7377375bda2f2d58c61175a565b611964888201357f05481cfc53d291fb148bad51bc06bde7867ed38f3a019ecab25623ef9712bee67f0c1ff12c2af5e77866e13bc8bf89c58fd71e00f8d9fa29f44d3dda23267e892e8c61175a565b6119b460808201357f0c4a6bb6fdf60dbd2bebbd94c6d1ee9df64d15d4daa5573259e8724aa6d204c87f263812b8d2f91cd28b047e4935b8f7690c058763f2a57e02dc585416581d7f008c61175a565b611a0460a08201357f250ca18d4fd055aaa9095afd2d9cc339494b15341db450dca87bc857af2ce63c7f0d392fbad06e8aa6134b36ab2f7e2dd3c4b9f1a6aa009025978b5c4392a735b88c61175a565b611a5460c08201357f25d7e948e6ed9a2c550e9ac258a07d4a63182e4d7f0485acbf4eaeed0605d3a87f2ebb57f846731282b83de6b1fb4972b43713d037e1201de95880dd93590cdb378c61175a565b611aa460e08201357f1ccdd1ff9c12fee3aa632ef781714c2bc0bf12f01700911ed53536eb8c06efc77f23d8f1651f2fc35e077cb85ebb8b439f03c6fe4278ab0506703076037eba42ac8c61175a565b611af56101008201357f2039ef6253562b611e7f25a9bc2040f51ca3b9418e814163399ac11e8400cb717f28b295c865a6ed002fca95eef35f5c03e2ce284451a870d8cf7652f93757a0118c61175a565b01357f0f1e0ab547325e430a7356fe384a8db2f12c7fa605bdd918070ba1f0c87d543f7f2bace91ad1b222b2adfe20661747868d7c6a0c051efa473232733d915c32bc988961175a565b80358a5201358103068688015280356040880152858101358288015260408101356080880152013560a08601527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08601527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08601527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008601527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208601527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408601527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160860152516101808501528260000101516101a08401527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08401527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08401527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008401527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220840152803561024084015201356102608201527f0346cd87c9157b61554887f5f9b224de5cbe4ff8a86144a187d3f4e29c88115a6102808201527f161cd069685c9306d50c4af8ae4066febce4c3ee37dc0ae7050c3c2867c94ddf6102a08201527f1c9613e703c7c4be8c54ac686117c49201b663c52e59a0696ab3601a31ce1a216102c08201527f292b3ecaed6bffe99dea030955f5d260b73b0d381d1edf05efa16d6fc8c0571e6102e08201526020816103008160086107d05a03fa90511690565b91611e769391611dd2600090565b50604051936103808501604052611dec6000850135611727565b611df96020850135611727565b611e066040850135611727565b611e136060850135611727565b611e206080850135611727565b611e2d60a0850135611727565b611e3a60c0850135611727565b611e4760e0850135611727565b611e55610100850135611727565b611e63610120850135611727565b611e71610140850135611727565b6117a5565b60005260206000f3fea26469706673582212205d578d1e202f46a1a10e4e4c0a699e25343984036d710450a93c5624e06ec55b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1862,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(INullifierRegistry)1450\"\n      },\n      {\n        \"astId\": 1864,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 1866,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(INullifierRegistry)1450\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/VerifiedDomainRegistry.json",
    "content": "{\n  \"address\": \"0xbCbE5B3F85ffAFa46960272a581A2662c257EF57\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DomainListed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DomainListingRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"oldOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DomainTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"domainName\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTime\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DomainVerified\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ExchangeAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ExchangeRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"newVerifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"VerifyDomainProcessorUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addExchange\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"domains\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTime\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"exchanges\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getDomain\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_domainName\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"getDomainId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getDomainOwner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_domains\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getDomains\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getExchanges\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserDomains\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"_verifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isExchange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeDomainListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeExchange\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setDomainListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateDomainOnSale\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"_verifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateVerifyDomainProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userDomains\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifyDomainProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n          \"name\": \"_proofs\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"verifyDomains\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x3fa5a245b20f7f7f8b7ce98d33f111661f6de6707bbaa2b0433f8fb85592b368\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xbCbE5B3F85ffAFa46960272a581A2662c257EF57\",\n    \"transactionIndex\": 71,\n    \"gasUsed\": \"2387918\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000200000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x3db4f380616b21de29d52daa06addf36351aea583c6b1ec6cb2374fac2f634f1\",\n    \"transactionHash\": \"0x3fa5a245b20f7f7f8b7ce98d33f111661f6de6707bbaa2b0433f8fb85592b368\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 71,\n        \"blockNumber\": 20165442,\n        \"transactionHash\": \"0x3fa5a245b20f7f7f8b7ce98d33f111661f6de6707bbaa2b0433f8fb85592b368\",\n        \"address\": \"0xbCbE5B3F85ffAFa46960272a581A2662c257EF57\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 172,\n        \"blockHash\": \"0x3db4f380616b21de29d52daa06addf36351aea583c6b1ec6cb2374fac2f634f1\"\n      }\n    ],\n    \"blockNumber\": 20165442,\n    \"cumulativeGasUsed\": \"15121884\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DomainListed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DomainListingRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DomainTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"domainName\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DomainVerified\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ExchangeAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ExchangeRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"newVerifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"VerifyDomainProcessorUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addExchange\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"domains\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"exchanges\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getDomain\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_domainName\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getDomainId\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getDomainOwner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_domains\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getDomains\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId[]\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getExchanges\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserDomains\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId[]\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"_verifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isExchange\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeDomainListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeExchange\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setDomainListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateDomainOnSale\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"_verifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateVerifyDomainProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userDomains\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifyDomainProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof[]\\\",\\\"name\\\":\\\"_proofs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"verifyDomains\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addExchange(address)\\\":{\\\"params\\\":{\\\"_exchange\\\":\\\"Address of the exchange contract\\\"}},\\\"initialize(address)\\\":{\\\"params\\\":{\\\"_verifyDomainProcessor\\\":\\\"Address of the VerifyDomainProcessor contract\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeDomainListing(bytes32)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain ID to update listing status for\\\"}},\\\"removeExchange(address)\\\":{\\\"params\\\":{\\\"_exchange\\\":\\\"Address of the exchange contract\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setDomainListing(bytes32,uint256)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain to set listed status for\\\",\\\"_listingId\\\":\\\"Listing Id of domain on calling exchange\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"updateDomainOnSale(bytes32,address)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain ID to update listing status for\\\",\\\"_newOwner\\\":\\\"New owner of the domain\\\"}},\\\"updateVerifyDomainProcessor(address)\\\":{\\\"params\\\":{\\\"_verifyDomainProcessor\\\":\\\"Address of the new VerifyDomainProcessor contract\\\"}},\\\"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"params\\\":{\\\"_proofs\\\":\\\"Array of domain ownership TLS proofs\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addExchange(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized. Exchange must not already exist in the registry. \\\"},\\\"initialize(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts. This can only be called once.\\\"},\\\"removeDomainListing(bytes32)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one that the domain is listed on. This removes the exchange and listingId from the domain. \\\"},\\\"removeExchange(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry. \\\"},\\\"setDomainListing(bytes32,uint256)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is listed on the calling exchange. This sets the exchange and listingId of the domain. \\\"},\\\"updateDomainOnSale(bytes32,address)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status from the domain. \\\"},\\\"updateVerifyDomainProcessor(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the verify domain processor\\\"},\\\"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"notice\\\":\\\"Verify domains and add them to the registry. If domain is transferred off-chain to another party  then they can re-verify the domain and claim ownership of the domain and previous ownership is removed. The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on the domain. Function reverts if: - Domain ownership TLS proofs are invalid \\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/VerifiedDomainRegistry.sol\\\":\\\"VerifiedDomainRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/VerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { AddressArrayUtils } from \\\\\\\"./external/lib/AddressArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IDomainExchange } from \\\\\\\"./interfaces/IDomainExchange.sol\\\\\\\";\\\\nimport { IVerifiedDomainRegistry } from \\\\\\\"./interfaces/IVerifiedDomainRegistry.sol\\\\\\\";\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./interfaces/IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VerifiedDomainRegistry is IVerifiedDomainRegistry, Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using AddressArrayUtils for address[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event DomainVerified(\\\\n        bytes32 indexed domainId,\\\\n        address indexed owner,\\\\n        string domainName,\\\\n        uint256 expiryTime\\\\n    );\\\\n\\\\n    event DomainListed(\\\\n        bytes32 indexed domainId,\\\\n        address indexed exchange,\\\\n        uint256 indexed listingId\\\\n    );\\\\n\\\\n    event DomainListingRemoved(\\\\n        bytes32 indexed domainId,\\\\n        address indexed exchange\\\\n    );\\\\n\\\\n    event DomainTransferred(\\\\n        bytes32 indexed domainId,\\\\n        address indexed oldOwner,\\\\n        address indexed newOwner\\\\n    );\\\\n\\\\n\\\\n    event VerifyDomainProcessorUpdated(\\\\n        IVerifyDomainProcessor indexed newVerifyDomainProcessor\\\\n    );\\\\n\\\\n    event ExchangeAdded(address indexed exchange);\\\\n    event ExchangeRemoved(address indexed exchange);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyExchange() {\\\\n        require(isExchange[msg.sender], \\\\\\\"Caller must be exchange\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    modifier onlyInitialized() {\\\\n        require(isInitialized, \\\\\\\"Contract must be initialized\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n    IVerifyDomainProcessor public verifyDomainProcessor;\\\\n    address[] public exchanges;\\\\n    mapping(address=>bool) public isExchange;\\\\n\\\\n    bool public isInitialized;\\\\n\\\\n    mapping(bytes32 => Domain) public domains;\\\\n    mapping(address => bytes32[]) public userDomains;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    \\\\n    constructor() Ownable() {}\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Verify domains and add them to the registry. If domain is transferred off-chain to another party \\\\n     * then they can re-verify the domain and claim ownership of the domain and previous ownership is removed.\\\\n     * The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on\\\\n     * the domain. Function reverts if:\\\\n     * - Domain ownership TLS proofs are invalid\\\\n     * \\\\n     * @param _proofs           Array of domain ownership TLS proofs\\\\n     */\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external override\\\\n        onlyInitialized\\\\n    {\\\\n        IVerifyDomainProcessor.DomainRaw[] memory rawDomains = verifyDomainProcessor.verifyProofs(\\\\n            _proofs\\\\n        );\\\\n\\\\n        for (uint256 i = 0; i < rawDomains.length; i++) {\\\\n            IVerifyDomainProcessor.DomainRaw memory rawDomain = rawDomains[i];\\\\n            bytes32 domainId = getDomainId(rawDomain.name);\\\\n\\\\n            Domain storage domain = domains[domainId];\\\\n            if (domain.owner == address(0)) {\\\\n                // Case 1.1: Domain has no owner\\\\n                // Add caller as owner\\\\n                userDomains[msg.sender].push(domainId);\\\\n\\\\n                // Set domain details\\\\n                domains[domainId] = Domain({\\\\n                    owner: msg.sender,\\\\n                    name: rawDomain.name,\\\\n                    expiryTime: rawDomain.expiryTime,\\\\n                    exchange: address(0),\\\\n                    listingId: 0\\\\n                });\\\\n            } else {\\\\n                // Case 2: Domain has owner\\\\n                // Case 2.1: Caller is owner; skip\\\\n                if (domain.owner == msg.sender) {\\\\n                    // No updates to userDomains\\\\n\\\\n                    // Update domain details; Only expiry time can change\\\\n                    // Owner and domain name cannot change\\\\n                    // Exchange and listingId are kept as is\\\\n                    domain.expiryTime = rawDomain.expiryTime;\\\\n                }\\\\n                // Case 2.2: Caller is NOT owner\\\\n                if (domain.owner != msg.sender) {\\\\n                    // Remove ownership from old owner\\\\n                    userDomains[domain.owner].removeStorage(domainId);\\\\n\\\\n                    // Remove listing on exchange if it exists\\\\n                    if (domain.exchange != address(0)) {\\\\n                        IDomainExchange(domain.exchange).registryRemoveListing(domain.listingId);\\\\n                    }\\\\n\\\\n                    // Add domain to new owner\\\\n                    userDomains[msg.sender].push(domainId);\\\\n\\\\n                    // Set domain details except for domain name as it cannot change\\\\n                    domain.owner = msg.sender;\\\\n                    domain.expiryTime = rawDomain.expiryTime;\\\\n                    domain.exchange = address(0);\\\\n                    domain.listingId = 0;\\\\n                }\\\\n            }\\\\n\\\\n            emit DomainVerified(domainId, msg.sender, rawDomain.name, rawDomain.expiryTime);\\\\n        }\\\\n    }\\\\n\\\\n    // Todo: Add function for relinquishing ownership of domain\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is\\\\n     * listed on the calling exchange. This sets the exchange and listingId of the domain.\\\\n     * \\\\n     * @param _domainId     Domain to set listed status for\\\\n     * @param _listingId    Listing Id of domain on calling exchange\\\\n     */\\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId)\\\\n        external\\\\n        override\\\\n        onlyInitialized\\\\n        onlyExchange\\\\n    {\\\\n        Domain storage domain = domains[_domainId];\\\\n\\\\n        require(domain.owner != address(0), \\\\\\\"Domain must be verified\\\\\\\");\\\\n        require(domain.exchange == address(0), \\\\\\\"Domain already listed on another exchange\\\\\\\");\\\\n\\\\n        domain.exchange = msg.sender;\\\\n        domain.listingId = _listingId;\\\\n\\\\n        emit DomainListed(_domainId, msg.sender, _listingId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one\\\\n     * that the domain is listed on. This removes the exchange and listingId from the domain.\\\\n     * \\\\n     * @param _domainId            Domain ID to update listing status for\\\\n     */\\\\n    function removeDomainListing(bytes32 _domainId) external override onlyInitialized onlyExchange {\\\\n        Domain storage domain = domains[_domainId];\\\\n        require(domain.exchange == msg.sender, \\\\\\\"Domain not listed on calling exchange\\\\\\\");\\\\n\\\\n        _removeDomainListing(domain);\\\\n\\\\n        emit DomainListingRemoved(_domainId, msg.sender);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain\\\\n     * is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status\\\\n     * from the domain.\\\\n     * \\\\n     * @param _domainId            Domain ID to update listing status for\\\\n     * @param _newOwner            New owner of the domain\\\\n     */\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) \\\\n        external \\\\n        override \\\\n        onlyInitialized \\\\n        onlyExchange \\\\n    {\\\\n        Domain storage domain = domains[_domainId];\\\\n        require(domain.exchange == msg.sender, \\\\\\\"Domain not listed on calling exchange\\\\\\\");\\\\n\\\\n        _removeDomainListing(domain);\\\\n\\\\n        // Update ownership\\\\n        address oldOwner = domain.owner;\\\\n        domain.owner = _newOwner;\\\\n        userDomains[oldOwner].removeStorage(_domainId);\\\\n        userDomains[_newOwner].push(_domainId);\\\\n\\\\n        emit DomainTransferred(_domainId, oldOwner, _newOwner);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts.\\\\n     * This can only be called once.\\\\n     *\\\\n     * @param _verifyDomainProcessor    Address of the VerifyDomainProcessor contract\\\\n     */\\\\n    function initialize(\\\\n        IVerifyDomainProcessor _verifyDomainProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        verifyDomainProcessor = _verifyDomainProcessor;\\\\n\\\\n        isInitialized = true;\\\\n\\\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized.\\\\n     * Exchange must not already exist in the registry.\\\\n     * \\\\n     * @param _exchange     Address of the exchange contract\\\\n     */\\\\n    function addExchange(address _exchange) external onlyOwner onlyInitialized {\\\\n        require(!isExchange[_exchange], \\\\\\\"Duplicate exchange\\\\\\\");\\\\n\\\\n        isExchange[_exchange] = true;\\\\n        exchanges.push(_exchange);\\\\n\\\\n        emit ExchangeAdded(_exchange);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry.\\\\n     * \\\\n     * @param _exchange     Address of the exchange contract\\\\n     */\\\\n    function removeExchange(address _exchange) external onlyOwner onlyInitialized {\\\\n        require(isExchange[_exchange], \\\\\\\"Exchange does not exist\\\\\\\");\\\\n\\\\n        isExchange[_exchange] = false;\\\\n        exchanges.removeStorage(_exchange);\\\\n\\\\n        emit ExchangeRemoved(_exchange);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the verify domain processor\\\\n     *\\\\n     * @param _verifyDomainProcessor    Address of the new VerifyDomainProcessor contract\\\\n     */\\\\n    function updateVerifyDomainProcessor(IVerifyDomainProcessor _verifyDomainProcessor) external onlyOwner {\\\\n        require(address(_verifyDomainProcessor) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n\\\\n        verifyDomainProcessor = _verifyDomainProcessor;\\\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function getDomainId(string memory _domainName) public pure override returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(_domainName));\\\\n    }\\\\n\\\\n    function getDomainOwner(bytes32 _domainId) external view override returns (address) {        \\\\n        return domains[_domainId].owner;\\\\n    }\\\\n\\\\n    function getUserDomains(address _user) external view returns (DomainWithId[] memory domainInfo) {\\\\n        bytes32[] memory domainIds = userDomains[_user];\\\\n        \\\\n        domainInfo = new DomainWithId[](domainIds.length);\\\\n        for (uint256 i = 0; i < domainIds.length; i++) {\\\\n            bytes32 domainId = domainIds[i];\\\\n            domainInfo[i] = DomainWithId({\\\\n                domainId: domainId,\\\\n                domain: domains[domainId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDomain(bytes32 _domainId) external view override returns (DomainWithId memory domainInfo) {\\\\n        return DomainWithId({\\\\n            domainId: _domainId,\\\\n            domain: domains[_domainId]\\\\n        });\\\\n    }\\\\n\\\\n    function getDomains(bytes32[] memory _domains) external view returns (DomainWithId[] memory domainInfo) {\\\\n        domainInfo = new DomainWithId[](_domains.length);\\\\n        for (uint256 i = 0; i < _domains.length; i++) {\\\\n            bytes32 domainId = _domains[i];\\\\n            domainInfo[i] = DomainWithId({\\\\n                domainId: domainId,\\\\n                domain: domains[domainId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getExchanges() external view returns (address[] memory) {\\\\n        return exchanges;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _removeDomainListing(Domain storage _domain) internal {\\\\n        delete _domain.exchange;\\\\n        delete _domain.listingId;\\\\n    }\\\\n}\\\",\\\"keccak256\\\":\\\"0x8162cd31c4aa35caa77d08e3115681bbe33e842a9640b0106816e2ca09137ea8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IDomainExchange.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface IDomainExchange {\\\\n    function registryRemoveListing(uint256 _listingId) external;\\\\n}\\\",\\\"keccak256\\\":\\\"0xe9deda400c359c1b42d10c518dc1f01605ea3a466e1be110f1f7c9be4af8253b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifiedDomainRegistry {\\\\n\\\\n    struct Domain {\\\\n        address owner;\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n        address exchange;\\\\n        uint256 listingId;\\\\n    }\\\\n\\\\n    struct DomainWithId {\\\\n        bytes32 domainId;\\\\n        Domain domain;\\\\n    }\\\\n\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\\\n    \\\\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\\\n    \\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\\\n    function removeDomainListing(bytes32 _domainId) external;\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcc45329e6720b7b9df3c67985b16f8d778528f756c045ba6c2196831b40afe92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6080604052346200002657620000146200002b565b6040516129b06200012682396129b090f35b600080fd5b6200003562000037565b565b6200003533620000c3565b62000054905b6001600160a01b031690565b90565b62000054905462000042565b620000549062000048906001600160a01b031682565b620000549062000063565b620000549062000079565b90620000a362000054620000bf9262000084565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620000cf600062000057565b90620000dd8160006200008f565b620001146200010d7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000084565b9162000084565b916200011f60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806236d2d3146101815780630183196b1461017c57806311d4c3a2146101775780631a242547146101725780631e2e3a6b1461016d57806327d335a8146101685780632839fc29146101635780632b8a80021461015e578063392e53cd146101595780635e8441d3146101545780636e74da681461014f578063715018a61461014a5780637f200269146101455780638da5cb5b146101405780638e0be3691461013b5780639f4cb8f0146101365780639f6eb88c14610131578063a9c56e911461012c578063aa10ce2214610127578063b3533dfe14610122578063c4d66de81461011d578063c722f177146101185763f2fde38b036101a757610e91565b610e60565b610c98565b610c71565b610c34565b610c1c565b610951565b610891565b610817565b6107f2565b6107da565b610792565b61077a565b61074f565b61064d565b610628565b6105ea565b61054c565b610502565b610460565b61041a565b6103cc565b610242565b6001600160a01b031690565b90565b6001600160a01b0381165b036101a757565b600080fd5b905035906101b982610195565b565b906020828203126101a757610192916101ac565b61019290610186906001600160a01b031682565b610192906101cf565b610192906101e3565b906101ff906101ec565b600052602052604060002090565b610192916008021c5b60ff1690565b90610192915461020d565b610192906102396003916000926101f5565b61021c565b9052565b346101a75761026f61025d6102583660046101bb565b610227565b60405191829182901515815260200190565b0390f35b60005b8381106102865750506000910152565b8181015183820152602001610276565b6102b76102c06020936102ca936102ab815190565b80835293849260200190565b95869101610273565b601f01601f191690565b0190565b80516001600160a01b0316825290610192906080806102fc60a0840160208701518582036020870152610296565b9461030c60408201516040860152565b6060818101516001600160a01b0316908501520151910152565b80518252610192916040810191602001519060208184039101526102ce565b9061019291610326565b9061036561035b835190565b8083529160200190565b90816103776020830284019460200190565b926000915b83831061038b57505050505090565b909192939460206103ae6103a783856001950387528951610345565b9760200190565b930193019193929061037c565b60208082526101929291019061034f565b346101a75761026f6103e76103e23660046101bb565b612456565b604051918291826103bb565b806101a0565b905035906101b9826103f3565b906020828203126101a757610192916103f9565b346101a75761026f610435610430366004610406565b612258565b604051918291826001600160a01b03909116815260200190565b602080825261019292910190610326565b346101a75761026f61047b610476366004610406565b612507565b6040519182918261044f565b60009103126101a757565b906104b26104ab6104a1845190565b8084529260200190565b9260200190565b9060005b8181106104c35750505090565b9091926104e96104e260019286516001600160a01b0316815260200190565b9460200190565b9291016104b6565b602080825261019292910190610492565b346101a757610512366004610487565b61026f61051d6125f6565b604051918291826104f1565b91906040838203126101a7576101929061054381856103f9565b936020016103f9565b346101a75761056561055f366004610529565b90611cac565b604051005b634e487b7160e01b600052603260045260246000fd5b80548210156105a35761059a600191600052602060002090565b91020190600090565b61056a565b610192916008021c610186565b9061019291546105a8565b600260006105cc825490565b8310156105e75750610192916105e191610580565b906105b5565b80fd5b346101a75761026f610435610600366004610406565b6105c0565b91906040838203126101a7576101929061061f81856103f9565b936020016101ac565b346101a75761056561063b366004610605565b90611e7e565b6101926000600461021c565b346101a75761065d366004610487565b61026f61025d610641565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761069f57604052565b610668565b906101b96106b160405190565b928361067e565b6001600160401b03811161069f57602090601f01601f19160190565b90826000939282370152565b909291926106f56106f0826106b8565b6106a4565b938185526020850190828401116101a7576101b9926106d4565b9080601f830112156101a757816020610192933591016106e0565b906020828203126101a75781356001600160401b0381116101a757610192920161070f565b346101a75761026f61076a61076536600461072a565b61221a565b6040519182918290815260200190565b346101a75761056561078d366004610406565b611da6565b346101a7576107a2366004610487565b610565610ee1565b6001600160a01b0381166101a0565b905035906101b9826107aa565b906020828203126101a757610192916107b9565b346101a7576105656107ed3660046107c6565b6121e7565b346101a757610802366004610487565b61026f6104356000546001600160a01b031690565b346101a75761056561082a3660046101bb565b612161565b91906040838203126101a7576101929061054381856101ac565b610192916008021c81565b906101929154610849565b61086d6006916000926101f5565b90610876825490565b8310156105e757506101929161088b91610580565b90610854565b346101a75761026f61076a6108a736600461082f565b9061085f565b6001600160401b03811161069f5760208091020190565b909291926108d46106f0826108ad565b93818552602080860192028301928184116101a757915b8383106108f85750505050565b6020809161090684866103f9565b8152019201916108eb565b9080601f830112156101a757816020610192933591016108c4565b906020828203126101a75781356001600160401b0381116101a7576101929201610911565b346101a75761026f6103e761096736600461092c565b612531565b9190916060818403126101a75761098360606106a4565b9281356001600160401b0381116101a757816109a091840161070f565b845260208201356001600160401b0381116101a757816109c191840161070f565b602085015260408201356001600160401b0381116101a7576109e3920161070f565b6040830152565b63ffffffff81166101a0565b905035906101b9826109ea565b9190916080818403126101a757610a5c610a1d60806106a4565b936000610a2a82856103f9565b908601526020610a3c828286016101ac565b908601526040610a4e828286016109f6565b9086015260608093016109f6565b90830152565b929190610a716106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610a97575050505050565b81356001600160401b0381116101a757602091610ab7878493870161070f565b815201910190610a89565b9080601f830112156101a75781602061019293359101610a62565b91909160a0818403126101a757610af460406106a4565b926000610b018284610a03565b9085015260808201356001600160401b0381116101a757610b229201610ac2565b6020830152565b9190916040818403126101a757610b4060406106a4565b9281356001600160401b0381116101a75781610b5d91840161096c565b845260208201356001600160401b0381116101a757610b229201610add565b929190610b8b6106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610bb1575050505050565b81356001600160401b0381116101a757602091610bd18784938701610b29565b815201910190610ba3565b9080601f830112156101a75781602061019293359101610b7c565b906020828203126101a75781356001600160401b0381116101a7576101929201610bdc565b346101a757610565610c2f366004610bf7565b611a96565b346101a757610565610c473660046101bb565b61208f565b610192600060016105b5565b61023e906101ec565b6020810192916101b99190610c58565b346101a757610c81366004610487565b61026f610c8c610c4c565b60405191829182610c61565b346101a757610565610cab3660046107c6565b611f65565b906101ff565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610cec575b6020831014610ce757565b610cb6565b91607f1691610cdc565b80546000939291610d13610d0983610ccc565b8085529360200190565b9160018116908115610d655750600114610d2c57505050565b610d3f9192939450600052602060002090565b916000925b818410610d515750500190565b805484840152602090930192600101610d44565b92949550505060ff1916825215156020020190565b9061019291610cf6565b906101b9610d9e92610d9560405190565b93848092610d7a565b038361067e565b6101929081565b6101929054610da5565b610dc1906005610cb0565b80546001600160a01b031691610dd960018301610d84565b91610de660028201610dac565b916101926004610e0060038501546001600160a01b031690565b9301610dac565b906101b994610e4c610e44610e5c936080969a99979a610e3760a088019260008901906001600160a01b03169052565b8682036020880152610296565b986040850152565b6001600160a01b03166060830152565b0152565b346101a75761026f610e7b610e76366004610406565b610db6565b91610e8895939560405190565b95869586610e07565b346101a757610565610ea43660046101bb565b611002565b610eb1610f3d565b6101b9610ecf565b6101866101926101929290565b61019290610eb9565b6101b9610edc6000610ec6565b61103b565b6101b9610ea9565b15610ef057565b60405162461bcd60e51b815280610f39600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6101b9610f526000546001600160a01b031690565b610f6b610f5e33610186565b916001600160a01b031690565b14610ee9565b6101b990610f7d610f3d565b610fdd565b15610f8957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6101b990610edc610ff16101866000610ec6565b6001600160a01b0383161415610f82565b6101b990610f71565b906001600160a01b03905b9181191691161790565b90611030610192611037926101ec565b825461100b565b9055565b6000546001600160a01b031690611053816000611020565b6110866110807f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101ec565b916101ec565b9161109060405190565b600090a3565b61019290610216565b6101929054611096565b156110b057565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b6101b99061110b611106600461109f565b6110a9565b6116e2565b909291926111206106f0826106b8565b938185526020850190828401116101a7576101b992610273565b9080601f830112156101a757815161019292602001611110565b905051906101b9826103f3565b9190916040818403126101a75761117860406106a4565b815190936001600160401b0382116101a75761119981610a5c93850161113a565b85526020928301611154565b9291906111b46106f0826108ad565b93818552602080860192028101918383116101a75781905b8382106111da575050505050565b81516001600160401b0381116101a7576020916111fa8784938701611161565b8152019101906111cc565b9080601f830112156101a7578151610192926020016111a5565b906020828203126101a75781516001600160401b0381116101a7576101929201611205565b8051606080845261019293916040916112759161126391850190610296565b60208501518482036020860152610296565b920151906040818403910152610296565b805182526020808201516001600160a01b0316908301526101b99190606090819060408181015163ffffffff1690850152015163ffffffff16910152565b9061019291610296565b906112da61035b835190565b90816112ec6020830284019460200190565b926000915b83831061130057505050505090565b9091929394602061131c6103a7838560019503875289516112c4565b93019301919392906112f1565b61019291602060a082019261134660008201516000850190611286565b01519060808184039101526112ce565b8051604080845261019293916020916113729190840190611244565b920151906020818403910152611329565b9061019291611356565b9061139961035b835190565b90816113ab6020830284019460200190565b926000915b8383106113bf57505050505090565b909192939460206113db6103a783856001950387528951611383565b93019301919392906113b0565b60208082526101929291019061138d565b6040513d6000823e3d90fd5b6101926101926101929290565b634e487b7160e01b600052601160045260246000fd5b60001981146114375760010190565b611412565b90611445825190565b8110156105a3576020809102010190565b9060001990611016565b9061147061019261103792611405565b8254611456565b9160001960089290920291821b911b611016565b919061149a6101926110379390565b908354611477565b90815491600160401b83101561069f57826114c59160016101b995018155610580565b9061148b565b61019260a06106a4565b919061149a61019261103793611405565b6101b9916000916114d5565b8181106114fd575050565b8061150b60006001936114e6565b016114f2565b9190601f811161152057505050565b6115326101b993600052602060002090565b906020601f840181900483019310611554575b6020601f9091010401906114f2565b9091508190611545565b90611567815190565b906001600160401b03821161069f5761158a826115848554610ccc565b85611511565b602090601f83116001146115c5576110379291600091836115ba575b5050600019600883021c1916906002021790565b0151905038806115a6565b601f198316916115da85600052602060002090565b9260005b818110611618575091600293918560019694106115ff575b50505002019055565b01516000196008601f8516021c191690553880806115f6565b919360206001819287870151815501950192016115de565b906101b99161155e565b6101b9919061168e906080906004906116648161165e87516001600160a01b031690565b90611020565b61167c60018201611676602088015190565b90611630565b6116946002820161168e604088015190565b90611460565b6116af6003820161165e60608801516001600160a01b031690565b0192015190565b906101b99161163a565b929160206116dd6101b99360408701908782036000890152610296565b940152565b600061172c916117026116fd6001546001600160a01b031690565b6101ec565b61172183637de24fcf61171460405190565b9687958694859360e01b90565b8352600483016113e8565b03925af1908115611a5057600091611a75575b5061174a6000611405565b611755610192835190565b811015611a7157611766818361143c565b5190611775600083015161221a565b916005926117866101928286610cb0565b9361179885546001600160a01b031690565b946117a36000610ec6565b956117b66001600160a01b038816610f5e565b036118b657506118b19461184b83611850936118326006946117e5846117e061019233809a6101f5565b6114a2565b88516118229061181b6117f960208d015190565b916118146118056114cb565b6001600160a01b03909b168b52565b60208a0152565b6040880152565b6001600160a01b03166060860152565b61184661183f6000611405565b6080860152565b610cb0565b6116b6565b33906118626020600085015194015190565b61189361188d7f04c47544b62d97fc6d744e7cc21ed4a24af06a46427efcfd15a0db261dbb27d69390565b936101ec565b936118a96118a060405190565b928392836116c0565b0390a3611428565b61174a565b90506118c981546001600160a01b031690565b6118d233610f5e565b14611a55575b80546001600160a01b03166118ec33610f5e565b036118fd575b506118b19350611850565b6119248261191f61019261191885546001600160a01b031690565b60066101f5565b6128ab565b60038101546001600160a01b03166119446001600160a01b038716610f5e565b036119aa575b6119a4906119916118b196611967856117e06101923360066101f5565b6119713384611020565b61198861197f602088015190565b60028501611460565b60038301611020565b600461199d6000611405565b9101611460565b386118f2565b6119c46116fd6116fd60038401546001600160a01b031690565b90631756c30e6119d660048301610dac565b833b156101a757611a0c936119fe600080946119f160405190565b9788958694859360e01b90565b835260048301526024820190565b03925af18015611a50576118b1966119a49361199192611a32575b50965050905061194a565b611a4a906000611a42818361067e565b810190610487565b38611a27565b6113f9565b611a6c611a63602085015190565b60028301611460565b6118d8565b5050565b611a90913d8091833e611a88818361067e565b81019061121f565b3861173f565b6101b9906110f5565b906101b991611ab1611106600461109f565b611b02565b15611abd57565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206d7573742062652065786368616e67650000000000000000006044820152606490fd5b6101b99190611b22611b1d611b183360036101f5565b61109f565b611ab6565b611bd1565b15611b2e57565b60405162461bcd60e51b815260206004820152601760248201527f446f6d61696e206d7573742062652076657269666965640000000000000000006044820152606490fd5b15611b7a57565b60405162461bcd60e51b815260206004820152602960248201527f446f6d61696e20616c7265616479206c6973746564206f6e20616e6f746865726044820152682065786368616e676560b81b6064820152608490fd5b90611be0610192836005610cb0565b611c62826004611bf784546001600160a01b031690565b93611c1f611c056000610ec6565b95611c186001600160a01b038816610f5e565b1415611b27565b611c516003820195611c4b610f5e611c3e89546001600160a01b031690565b926001600160a01b031690565b14611b73565b611c5c338096611020565b01611460565b611c9c611c96611c907f94ec80928933a86cc2847706c09c43fa58866b537c8fce8eef172af4036af5209590565b926101ec565b92611405565b92611ca660405190565b600090a4565b906101b991611a9f565b6101b990611cc7611106600461109f565b6101b990611cdc611b1d611b183360036101f5565b611d3b565b15611ce857565b60405162461bcd60e51b815260206004820152602560248201527f446f6d61696e206e6f74206c6973746564206f6e2063616c6c696e672065786360448201526468616e676560d81b6064820152608490fd5b611d49610192826005610cb0565b611d7b611d6060038301546001600160a01b031690565b339290611d7690611d7085610f5e565b14611ce1565b61260c565b6110866110807ff27bc8e4c954bf9eead2d99629d460313da75ee401666af4d3cb1eb821ddb1f69390565b6101b990611cb6565b906101b991611dc1611106600461109f565b6101b99190611dd7611b1d611b183360036101f5565b906000611de8610192846005610cb0565b611e08611dff60038301546001600160a01b031690565b611d7033610f5e565b611e118161260c565b01611e2d82611e2783546001600160a01b031690565b92611020565b611e50836117e0610192856006611e4b8561191f6101928a856101f5565b6101f5565b611c9c611c90611c907f3275c4afb1638bd20394301d401c788e5091157ddca135fd84970904da6541af9590565b906101b991611daf565b6101b990611e94610f3d565b611efb565b15611ea057565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b9060ff90611016565b90611ef461019261103792151590565b8254611edb565b611f14611f0f611f0b600461109f565b1590565b611e99565b611f1f816001611020565b611f2b60016004611ee4565b611f557f9b7c520e9e227a011fa79baf4082565a9fd780e2bcb20889c0fe36eba4b5c8db916101ec565b90611f5f60405190565b600090a2565b6101b990611e88565b6101b990611f7a610f3d565b6101b990611f8b611106600461109f565b61202c565b15611f9757565b60405162461bcd60e51b81526020600482015260126024820152714475706c69636174652065786368616e676560701b6044820152606490fd5b916001600160a01b0360089290920291821b911b611016565b9190611ffb610192611037936101ec565b908354611fd1565b90815491600160401b83101561069f57826120269160016101b995018155610580565b90611fea565b61205a6003612049612044611f0b611b1886856101f5565b611f90565b612055836001926101f5565b611ee4565b612065816002612003565b611f557f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e1916101ec565b6101b990611f6e565b6101b9906120a4610f3d565b6101b9906120b5611106600461109f565b612106565b156120c157565b60405162461bcd60e51b815260206004820152601760248201527f45786368616e676520646f6573206e6f742065786973740000000000000000006044820152606490fd5b61212c600361212061211b611b1885846101f5565b6120ba565b612055836000926101f5565b6121378160026126e4565b611f557ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb916101ec565b6101b990612098565b6101b990612176610f3d565b6121b9565b1561218257565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b6121dc6121c5826101ec565b6121d5610f5e6101866000610ec6565b141561217b565b611f2b816001611020565b6101b99061216a565b6102ca61220892602092612202815190565b94859290565b93849101610273565b610192916121f0565b61224261222660405190565b8092612236602083019182612211565b9081038252038261067e565b61225461224d825190565b9160200190565b2090565b600061227161019292612269600090565b506005610cb0565b01546001600160a01b031690565b9061229a61228e6104a1845490565b92600052602060002090565b9060005b8181106122ab5750505090565b9091926122cf6122c86001926122c087610dac565b815260200190565b9460010190565b92910161229e565b906101929161227f565b906101b9610d9e926122f260405190565b938480926122d7565b610192906122e1565b906123116106f0836108ad565b918252565b61019260406106a4565b6123286114cb565b906000825260208080808086016060815201600081520160008152016000905250565b905250565b610192612320565b612360612316565b9060008252602080830161234b612350565b610192612358565b60005b82811061238957505050565b602090612394612372565b818401520161237d565b906101b96123b46123ae84612304565b936108ad565b601f19016020840161237a565b906101b961244660046123d26114cb565b946123f46123e782546001600160a01b031690565b6001600160a01b03168752565b61240a61240360018301610d84565b6020880152565b61241961181b60028301610dac565b61244061243060038301546001600160a01b031690565b6001600160a01b03166060880152565b01610dac565b6080840152565b610192906123c1565b61246d61247291612465606090565b5060066101f5565b6122fb565b9061248361247e835190565b61239e565b916000908361249183611405565b61249c610192845190565b81101561250057806124b86124b46124fb938661143c565b5190565b6124e0610b226124c9836005610cb0565b6124db6124d4612316565b948a860152565b61244d565b6124ea828961143c565b526124f5818861143c565b50611428565b612491565b5093505050565b61250f612372565b50610192610b22612521836005610cb0565b6124db61252c612316565b948552565b9061253d61247e835190565b916000908361254b83611405565b612556610192845190565b81101561250057806124b86124b461256e938661143c565b61254b565b9061258261228e6104a1845490565b9060005b8181106125935750505090565b9091926125c16122c86001926125b087546001600160a01b031690565b6001600160a01b0316815260200190565b929101612586565b9061019291612573565b906101b9610d9e926125e460405190565b938480926125c9565b610192906125d3565b61019260026125ed565b6101b991600091611fea565b600060046101b9926126218360038301612600565b016114e6565b9061263661228e6104a1845490565b9060005b8181106126475750505090565b9091926126646122c86001926125b087546001600160a01b031690565b92910161263a565b9061019291612627565b906101b9610d9e9261268760405190565b9384809261266c565b61019290612676565b9190820391821161143757565b634e487b7160e01b600052603160045260246000fd5b805480156126df5760001901906126dc6126d68383610580565b90612600565b55565b6126a6565b6126f9612700926126f483612690565b61279d565b9092901590565b156127425760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612761612751835490565b61275b6001611405565b90612699565b90818103612771575b50506126bc565b6120266127846105e161278b9486610580565b9184610580565b388061276a565b610192600019611405565b919082519260006127ad81611405565b855b811015612804576127d06127c3828561143c565b516001600160a01b031690565b6127e26001600160a01b038616610f5e565b146127fa576127f36127af91611428565b90506127ad565b9450505050600190565b5093505050612811612792565b9190565b9061282461228e6104a1845490565b9060005b8181106128355750505090565b90919261284a6122c86001926122c087610dac565b929101612828565b9061019291612815565b906101b9610d9e9261286d60405190565b93848092612852565b6101929061285c565b6101b99160009161148b565b805480156126df5760001901906126dc6128a58383610580565b9061287f565b6126f96128c0926128bb83612876565b61293b565b156129025760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612911612751835490565b90818103612921575b505061288b565b6114c561278461088b6129349486610580565b388061291a565b9190825192600061294b81611405565b855b811015612804576129616124b4828561143c565b84146127fa5761297361294d91611428565b905061294b56fea2646970667358221220a6032f571ac9fa51b48f09a32827ab67ff828148f9996dd432fe8f26a821634c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806236d2d3146101815780630183196b1461017c57806311d4c3a2146101775780631a242547146101725780631e2e3a6b1461016d57806327d335a8146101685780632839fc29146101635780632b8a80021461015e578063392e53cd146101595780635e8441d3146101545780636e74da681461014f578063715018a61461014a5780637f200269146101455780638da5cb5b146101405780638e0be3691461013b5780639f4cb8f0146101365780639f6eb88c14610131578063a9c56e911461012c578063aa10ce2214610127578063b3533dfe14610122578063c4d66de81461011d578063c722f177146101185763f2fde38b036101a757610e91565b610e60565b610c98565b610c71565b610c34565b610c1c565b610951565b610891565b610817565b6107f2565b6107da565b610792565b61077a565b61074f565b61064d565b610628565b6105ea565b61054c565b610502565b610460565b61041a565b6103cc565b610242565b6001600160a01b031690565b90565b6001600160a01b0381165b036101a757565b600080fd5b905035906101b982610195565b565b906020828203126101a757610192916101ac565b61019290610186906001600160a01b031682565b610192906101cf565b610192906101e3565b906101ff906101ec565b600052602052604060002090565b610192916008021c5b60ff1690565b90610192915461020d565b610192906102396003916000926101f5565b61021c565b9052565b346101a75761026f61025d6102583660046101bb565b610227565b60405191829182901515815260200190565b0390f35b60005b8381106102865750506000910152565b8181015183820152602001610276565b6102b76102c06020936102ca936102ab815190565b80835293849260200190565b95869101610273565b601f01601f191690565b0190565b80516001600160a01b0316825290610192906080806102fc60a0840160208701518582036020870152610296565b9461030c60408201516040860152565b6060818101516001600160a01b0316908501520151910152565b80518252610192916040810191602001519060208184039101526102ce565b9061019291610326565b9061036561035b835190565b8083529160200190565b90816103776020830284019460200190565b926000915b83831061038b57505050505090565b909192939460206103ae6103a783856001950387528951610345565b9760200190565b930193019193929061037c565b60208082526101929291019061034f565b346101a75761026f6103e76103e23660046101bb565b612456565b604051918291826103bb565b806101a0565b905035906101b9826103f3565b906020828203126101a757610192916103f9565b346101a75761026f610435610430366004610406565b612258565b604051918291826001600160a01b03909116815260200190565b602080825261019292910190610326565b346101a75761026f61047b610476366004610406565b612507565b6040519182918261044f565b60009103126101a757565b906104b26104ab6104a1845190565b8084529260200190565b9260200190565b9060005b8181106104c35750505090565b9091926104e96104e260019286516001600160a01b0316815260200190565b9460200190565b9291016104b6565b602080825261019292910190610492565b346101a757610512366004610487565b61026f61051d6125f6565b604051918291826104f1565b91906040838203126101a7576101929061054381856103f9565b936020016103f9565b346101a75761056561055f366004610529565b90611cac565b604051005b634e487b7160e01b600052603260045260246000fd5b80548210156105a35761059a600191600052602060002090565b91020190600090565b61056a565b610192916008021c610186565b9061019291546105a8565b600260006105cc825490565b8310156105e75750610192916105e191610580565b906105b5565b80fd5b346101a75761026f610435610600366004610406565b6105c0565b91906040838203126101a7576101929061061f81856103f9565b936020016101ac565b346101a75761056561063b366004610605565b90611e7e565b6101926000600461021c565b346101a75761065d366004610487565b61026f61025d610641565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761069f57604052565b610668565b906101b96106b160405190565b928361067e565b6001600160401b03811161069f57602090601f01601f19160190565b90826000939282370152565b909291926106f56106f0826106b8565b6106a4565b938185526020850190828401116101a7576101b9926106d4565b9080601f830112156101a757816020610192933591016106e0565b906020828203126101a75781356001600160401b0381116101a757610192920161070f565b346101a75761026f61076a61076536600461072a565b61221a565b6040519182918290815260200190565b346101a75761056561078d366004610406565b611da6565b346101a7576107a2366004610487565b610565610ee1565b6001600160a01b0381166101a0565b905035906101b9826107aa565b906020828203126101a757610192916107b9565b346101a7576105656107ed3660046107c6565b6121e7565b346101a757610802366004610487565b61026f6104356000546001600160a01b031690565b346101a75761056561082a3660046101bb565b612161565b91906040838203126101a7576101929061054381856101ac565b610192916008021c81565b906101929154610849565b61086d6006916000926101f5565b90610876825490565b8310156105e757506101929161088b91610580565b90610854565b346101a75761026f61076a6108a736600461082f565b9061085f565b6001600160401b03811161069f5760208091020190565b909291926108d46106f0826108ad565b93818552602080860192028301928184116101a757915b8383106108f85750505050565b6020809161090684866103f9565b8152019201916108eb565b9080601f830112156101a757816020610192933591016108c4565b906020828203126101a75781356001600160401b0381116101a7576101929201610911565b346101a75761026f6103e761096736600461092c565b612531565b9190916060818403126101a75761098360606106a4565b9281356001600160401b0381116101a757816109a091840161070f565b845260208201356001600160401b0381116101a757816109c191840161070f565b602085015260408201356001600160401b0381116101a7576109e3920161070f565b6040830152565b63ffffffff81166101a0565b905035906101b9826109ea565b9190916080818403126101a757610a5c610a1d60806106a4565b936000610a2a82856103f9565b908601526020610a3c828286016101ac565b908601526040610a4e828286016109f6565b9086015260608093016109f6565b90830152565b929190610a716106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610a97575050505050565b81356001600160401b0381116101a757602091610ab7878493870161070f565b815201910190610a89565b9080601f830112156101a75781602061019293359101610a62565b91909160a0818403126101a757610af460406106a4565b926000610b018284610a03565b9085015260808201356001600160401b0381116101a757610b229201610ac2565b6020830152565b9190916040818403126101a757610b4060406106a4565b9281356001600160401b0381116101a75781610b5d91840161096c565b845260208201356001600160401b0381116101a757610b229201610add565b929190610b8b6106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610bb1575050505050565b81356001600160401b0381116101a757602091610bd18784938701610b29565b815201910190610ba3565b9080601f830112156101a75781602061019293359101610b7c565b906020828203126101a75781356001600160401b0381116101a7576101929201610bdc565b346101a757610565610c2f366004610bf7565b611a96565b346101a757610565610c473660046101bb565b61208f565b610192600060016105b5565b61023e906101ec565b6020810192916101b99190610c58565b346101a757610c81366004610487565b61026f610c8c610c4c565b60405191829182610c61565b346101a757610565610cab3660046107c6565b611f65565b906101ff565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610cec575b6020831014610ce757565b610cb6565b91607f1691610cdc565b80546000939291610d13610d0983610ccc565b8085529360200190565b9160018116908115610d655750600114610d2c57505050565b610d3f9192939450600052602060002090565b916000925b818410610d515750500190565b805484840152602090930192600101610d44565b92949550505060ff1916825215156020020190565b9061019291610cf6565b906101b9610d9e92610d9560405190565b93848092610d7a565b038361067e565b6101929081565b6101929054610da5565b610dc1906005610cb0565b80546001600160a01b031691610dd960018301610d84565b91610de660028201610dac565b916101926004610e0060038501546001600160a01b031690565b9301610dac565b906101b994610e4c610e44610e5c936080969a99979a610e3760a088019260008901906001600160a01b03169052565b8682036020880152610296565b986040850152565b6001600160a01b03166060830152565b0152565b346101a75761026f610e7b610e76366004610406565b610db6565b91610e8895939560405190565b95869586610e07565b346101a757610565610ea43660046101bb565b611002565b610eb1610f3d565b6101b9610ecf565b6101866101926101929290565b61019290610eb9565b6101b9610edc6000610ec6565b61103b565b6101b9610ea9565b15610ef057565b60405162461bcd60e51b815280610f39600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6101b9610f526000546001600160a01b031690565b610f6b610f5e33610186565b916001600160a01b031690565b14610ee9565b6101b990610f7d610f3d565b610fdd565b15610f8957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6101b990610edc610ff16101866000610ec6565b6001600160a01b0383161415610f82565b6101b990610f71565b906001600160a01b03905b9181191691161790565b90611030610192611037926101ec565b825461100b565b9055565b6000546001600160a01b031690611053816000611020565b6110866110807f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101ec565b916101ec565b9161109060405190565b600090a3565b61019290610216565b6101929054611096565b156110b057565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b6101b99061110b611106600461109f565b6110a9565b6116e2565b909291926111206106f0826106b8565b938185526020850190828401116101a7576101b992610273565b9080601f830112156101a757815161019292602001611110565b905051906101b9826103f3565b9190916040818403126101a75761117860406106a4565b815190936001600160401b0382116101a75761119981610a5c93850161113a565b85526020928301611154565b9291906111b46106f0826108ad565b93818552602080860192028101918383116101a75781905b8382106111da575050505050565b81516001600160401b0381116101a7576020916111fa8784938701611161565b8152019101906111cc565b9080601f830112156101a7578151610192926020016111a5565b906020828203126101a75781516001600160401b0381116101a7576101929201611205565b8051606080845261019293916040916112759161126391850190610296565b60208501518482036020860152610296565b920151906040818403910152610296565b805182526020808201516001600160a01b0316908301526101b99190606090819060408181015163ffffffff1690850152015163ffffffff16910152565b9061019291610296565b906112da61035b835190565b90816112ec6020830284019460200190565b926000915b83831061130057505050505090565b9091929394602061131c6103a7838560019503875289516112c4565b93019301919392906112f1565b61019291602060a082019261134660008201516000850190611286565b01519060808184039101526112ce565b8051604080845261019293916020916113729190840190611244565b920151906020818403910152611329565b9061019291611356565b9061139961035b835190565b90816113ab6020830284019460200190565b926000915b8383106113bf57505050505090565b909192939460206113db6103a783856001950387528951611383565b93019301919392906113b0565b60208082526101929291019061138d565b6040513d6000823e3d90fd5b6101926101926101929290565b634e487b7160e01b600052601160045260246000fd5b60001981146114375760010190565b611412565b90611445825190565b8110156105a3576020809102010190565b9060001990611016565b9061147061019261103792611405565b8254611456565b9160001960089290920291821b911b611016565b919061149a6101926110379390565b908354611477565b90815491600160401b83101561069f57826114c59160016101b995018155610580565b9061148b565b61019260a06106a4565b919061149a61019261103793611405565b6101b9916000916114d5565b8181106114fd575050565b8061150b60006001936114e6565b016114f2565b9190601f811161152057505050565b6115326101b993600052602060002090565b906020601f840181900483019310611554575b6020601f9091010401906114f2565b9091508190611545565b90611567815190565b906001600160401b03821161069f5761158a826115848554610ccc565b85611511565b602090601f83116001146115c5576110379291600091836115ba575b5050600019600883021c1916906002021790565b0151905038806115a6565b601f198316916115da85600052602060002090565b9260005b818110611618575091600293918560019694106115ff575b50505002019055565b01516000196008601f8516021c191690553880806115f6565b919360206001819287870151815501950192016115de565b906101b99161155e565b6101b9919061168e906080906004906116648161165e87516001600160a01b031690565b90611020565b61167c60018201611676602088015190565b90611630565b6116946002820161168e604088015190565b90611460565b6116af6003820161165e60608801516001600160a01b031690565b0192015190565b906101b99161163a565b929160206116dd6101b99360408701908782036000890152610296565b940152565b600061172c916117026116fd6001546001600160a01b031690565b6101ec565b61172183637de24fcf61171460405190565b9687958694859360e01b90565b8352600483016113e8565b03925af1908115611a5057600091611a75575b5061174a6000611405565b611755610192835190565b811015611a7157611766818361143c565b5190611775600083015161221a565b916005926117866101928286610cb0565b9361179885546001600160a01b031690565b946117a36000610ec6565b956117b66001600160a01b038816610f5e565b036118b657506118b19461184b83611850936118326006946117e5846117e061019233809a6101f5565b6114a2565b88516118229061181b6117f960208d015190565b916118146118056114cb565b6001600160a01b03909b168b52565b60208a0152565b6040880152565b6001600160a01b03166060860152565b61184661183f6000611405565b6080860152565b610cb0565b6116b6565b33906118626020600085015194015190565b61189361188d7f04c47544b62d97fc6d744e7cc21ed4a24af06a46427efcfd15a0db261dbb27d69390565b936101ec565b936118a96118a060405190565b928392836116c0565b0390a3611428565b61174a565b90506118c981546001600160a01b031690565b6118d233610f5e565b14611a55575b80546001600160a01b03166118ec33610f5e565b036118fd575b506118b19350611850565b6119248261191f61019261191885546001600160a01b031690565b60066101f5565b6128ab565b60038101546001600160a01b03166119446001600160a01b038716610f5e565b036119aa575b6119a4906119916118b196611967856117e06101923360066101f5565b6119713384611020565b61198861197f602088015190565b60028501611460565b60038301611020565b600461199d6000611405565b9101611460565b386118f2565b6119c46116fd6116fd60038401546001600160a01b031690565b90631756c30e6119d660048301610dac565b833b156101a757611a0c936119fe600080946119f160405190565b9788958694859360e01b90565b835260048301526024820190565b03925af18015611a50576118b1966119a49361199192611a32575b50965050905061194a565b611a4a906000611a42818361067e565b810190610487565b38611a27565b6113f9565b611a6c611a63602085015190565b60028301611460565b6118d8565b5050565b611a90913d8091833e611a88818361067e565b81019061121f565b3861173f565b6101b9906110f5565b906101b991611ab1611106600461109f565b611b02565b15611abd57565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206d7573742062652065786368616e67650000000000000000006044820152606490fd5b6101b99190611b22611b1d611b183360036101f5565b61109f565b611ab6565b611bd1565b15611b2e57565b60405162461bcd60e51b815260206004820152601760248201527f446f6d61696e206d7573742062652076657269666965640000000000000000006044820152606490fd5b15611b7a57565b60405162461bcd60e51b815260206004820152602960248201527f446f6d61696e20616c7265616479206c6973746564206f6e20616e6f746865726044820152682065786368616e676560b81b6064820152608490fd5b90611be0610192836005610cb0565b611c62826004611bf784546001600160a01b031690565b93611c1f611c056000610ec6565b95611c186001600160a01b038816610f5e565b1415611b27565b611c516003820195611c4b610f5e611c3e89546001600160a01b031690565b926001600160a01b031690565b14611b73565b611c5c338096611020565b01611460565b611c9c611c96611c907f94ec80928933a86cc2847706c09c43fa58866b537c8fce8eef172af4036af5209590565b926101ec565b92611405565b92611ca660405190565b600090a4565b906101b991611a9f565b6101b990611cc7611106600461109f565b6101b990611cdc611b1d611b183360036101f5565b611d3b565b15611ce857565b60405162461bcd60e51b815260206004820152602560248201527f446f6d61696e206e6f74206c6973746564206f6e2063616c6c696e672065786360448201526468616e676560d81b6064820152608490fd5b611d49610192826005610cb0565b611d7b611d6060038301546001600160a01b031690565b339290611d7690611d7085610f5e565b14611ce1565b61260c565b6110866110807ff27bc8e4c954bf9eead2d99629d460313da75ee401666af4d3cb1eb821ddb1f69390565b6101b990611cb6565b906101b991611dc1611106600461109f565b6101b99190611dd7611b1d611b183360036101f5565b906000611de8610192846005610cb0565b611e08611dff60038301546001600160a01b031690565b611d7033610f5e565b611e118161260c565b01611e2d82611e2783546001600160a01b031690565b92611020565b611e50836117e0610192856006611e4b8561191f6101928a856101f5565b6101f5565b611c9c611c90611c907f3275c4afb1638bd20394301d401c788e5091157ddca135fd84970904da6541af9590565b906101b991611daf565b6101b990611e94610f3d565b611efb565b15611ea057565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b9060ff90611016565b90611ef461019261103792151590565b8254611edb565b611f14611f0f611f0b600461109f565b1590565b611e99565b611f1f816001611020565b611f2b60016004611ee4565b611f557f9b7c520e9e227a011fa79baf4082565a9fd780e2bcb20889c0fe36eba4b5c8db916101ec565b90611f5f60405190565b600090a2565b6101b990611e88565b6101b990611f7a610f3d565b6101b990611f8b611106600461109f565b61202c565b15611f9757565b60405162461bcd60e51b81526020600482015260126024820152714475706c69636174652065786368616e676560701b6044820152606490fd5b916001600160a01b0360089290920291821b911b611016565b9190611ffb610192611037936101ec565b908354611fd1565b90815491600160401b83101561069f57826120269160016101b995018155610580565b90611fea565b61205a6003612049612044611f0b611b1886856101f5565b611f90565b612055836001926101f5565b611ee4565b612065816002612003565b611f557f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e1916101ec565b6101b990611f6e565b6101b9906120a4610f3d565b6101b9906120b5611106600461109f565b612106565b156120c157565b60405162461bcd60e51b815260206004820152601760248201527f45786368616e676520646f6573206e6f742065786973740000000000000000006044820152606490fd5b61212c600361212061211b611b1885846101f5565b6120ba565b612055836000926101f5565b6121378160026126e4565b611f557ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb916101ec565b6101b990612098565b6101b990612176610f3d565b6121b9565b1561218257565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b6121dc6121c5826101ec565b6121d5610f5e6101866000610ec6565b141561217b565b611f2b816001611020565b6101b99061216a565b6102ca61220892602092612202815190565b94859290565b93849101610273565b610192916121f0565b61224261222660405190565b8092612236602083019182612211565b9081038252038261067e565b61225461224d825190565b9160200190565b2090565b600061227161019292612269600090565b506005610cb0565b01546001600160a01b031690565b9061229a61228e6104a1845490565b92600052602060002090565b9060005b8181106122ab5750505090565b9091926122cf6122c86001926122c087610dac565b815260200190565b9460010190565b92910161229e565b906101929161227f565b906101b9610d9e926122f260405190565b938480926122d7565b610192906122e1565b906123116106f0836108ad565b918252565b61019260406106a4565b6123286114cb565b906000825260208080808086016060815201600081520160008152016000905250565b905250565b610192612320565b612360612316565b9060008252602080830161234b612350565b610192612358565b60005b82811061238957505050565b602090612394612372565b818401520161237d565b906101b96123b46123ae84612304565b936108ad565b601f19016020840161237a565b906101b961244660046123d26114cb565b946123f46123e782546001600160a01b031690565b6001600160a01b03168752565b61240a61240360018301610d84565b6020880152565b61241961181b60028301610dac565b61244061243060038301546001600160a01b031690565b6001600160a01b03166060880152565b01610dac565b6080840152565b610192906123c1565b61246d61247291612465606090565b5060066101f5565b6122fb565b9061248361247e835190565b61239e565b916000908361249183611405565b61249c610192845190565b81101561250057806124b86124b46124fb938661143c565b5190565b6124e0610b226124c9836005610cb0565b6124db6124d4612316565b948a860152565b61244d565b6124ea828961143c565b526124f5818861143c565b50611428565b612491565b5093505050565b61250f612372565b50610192610b22612521836005610cb0565b6124db61252c612316565b948552565b9061253d61247e835190565b916000908361254b83611405565b612556610192845190565b81101561250057806124b86124b461256e938661143c565b61254b565b9061258261228e6104a1845490565b9060005b8181106125935750505090565b9091926125c16122c86001926125b087546001600160a01b031690565b6001600160a01b0316815260200190565b929101612586565b9061019291612573565b906101b9610d9e926125e460405190565b938480926125c9565b610192906125d3565b61019260026125ed565b6101b991600091611fea565b600060046101b9926126218360038301612600565b016114e6565b9061263661228e6104a1845490565b9060005b8181106126475750505090565b9091926126646122c86001926125b087546001600160a01b031690565b92910161263a565b9061019291612627565b906101b9610d9e9261268760405190565b9384809261266c565b61019290612676565b9190820391821161143757565b634e487b7160e01b600052603160045260246000fd5b805480156126df5760001901906126dc6126d68383610580565b90612600565b55565b6126a6565b6126f9612700926126f483612690565b61279d565b9092901590565b156127425760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612761612751835490565b61275b6001611405565b90612699565b90818103612771575b50506126bc565b6120266127846105e161278b9486610580565b9184610580565b388061276a565b610192600019611405565b919082519260006127ad81611405565b855b811015612804576127d06127c3828561143c565b516001600160a01b031690565b6127e26001600160a01b038616610f5e565b146127fa576127f36127af91611428565b90506127ad565b9450505050600190565b5093505050612811612792565b9190565b9061282461228e6104a1845490565b9060005b8181106128355750505090565b90919261284a6122c86001926122c087610dac565b929101612828565b9061019291612815565b906101b9610d9e9261286d60405190565b93848092612852565b6101929061285c565b6101b99160009161148b565b805480156126df5760001901906126dc6128a58383610580565b9061287f565b6126f96128c0926128bb83612876565b61293b565b156129025760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612911612751835490565b90818103612921575b505061288b565b6114c561278461088b6129349486610580565b388061291a565b9190825192600061294b81611405565b855b811015612804576129616124b4828561143c565b84146127fa5761297361294d91611428565b905061294b56fea2646970667358221220a6032f571ac9fa51b48f09a32827ab67ff828148f9996dd432fe8f26a821634c64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addExchange(address)\": {\n        \"params\": {\n          \"_exchange\": \"Address of the exchange contract\"\n        }\n      },\n      \"initialize(address)\": {\n        \"params\": {\n          \"_verifyDomainProcessor\": \"Address of the VerifyDomainProcessor contract\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeDomainListing(bytes32)\": {\n        \"params\": {\n          \"_domainId\": \"Domain ID to update listing status for\"\n        }\n      },\n      \"removeExchange(address)\": {\n        \"params\": {\n          \"_exchange\": \"Address of the exchange contract\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setDomainListing(bytes32,uint256)\": {\n        \"params\": {\n          \"_domainId\": \"Domain to set listed status for\",\n          \"_listingId\": \"Listing Id of domain on calling exchange\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"updateDomainOnSale(bytes32,address)\": {\n        \"params\": {\n          \"_domainId\": \"Domain ID to update listing status for\",\n          \"_newOwner\": \"New owner of the domain\"\n        }\n      },\n      \"updateVerifyDomainProcessor(address)\": {\n        \"params\": {\n          \"_verifyDomainProcessor\": \"Address of the new VerifyDomainProcessor contract\"\n        }\n      },\n      \"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"params\": {\n          \"_proofs\": \"Array of domain ownership TLS proofs\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addExchange(address)\": {\n        \"notice\": \"ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized. Exchange must not already exist in the registry. \"\n      },\n      \"initialize(address)\": {\n        \"notice\": \"ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts. This can only be called once.\"\n      },\n      \"removeDomainListing(bytes32)\": {\n        \"notice\": \"ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one that the domain is listed on. This removes the exchange and listingId from the domain. \"\n      },\n      \"removeExchange(address)\": {\n        \"notice\": \"ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry. \"\n      },\n      \"setDomainListing(bytes32,uint256)\": {\n        \"notice\": \"ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is listed on the calling exchange. This sets the exchange and listingId of the domain. \"\n      },\n      \"updateDomainOnSale(bytes32,address)\": {\n        \"notice\": \"ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status from the domain. \"\n      },\n      \"updateVerifyDomainProcessor(address)\": {\n        \"notice\": \"ONLY OWNER: Update the verify domain processor\"\n      },\n      \"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"notice\": \"Verify domains and add them to the registry. If domain is transferred off-chain to another party  then they can re-verify the domain and claim ownership of the domain and previous ownership is removed. The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on the domain. Function reverts if: - Domain ownership TLS proofs are invalid \"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 7156,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"verifyDomainProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IVerifyDomainProcessor)11894\"\n      },\n      {\n        \"astId\": 7159,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"exchanges\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 7163,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"isExchange\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 7165,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"isInitialized\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 7170,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"domains\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Domain)11806_storage)\"\n      },\n      {\n        \"astId\": 7175,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"userDomains\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IVerifyDomainProcessor)11894\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IVerifyDomainProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Domain)11806_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct IVerifiedDomainRegistry.Domain)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Domain)11806_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Domain)11806_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct IVerifiedDomainRegistry.Domain\",\n        \"members\": [\n          {\n            \"astId\": 11797,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"owner\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 11799,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"name\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 11801,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"expiryTime\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 11803,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"exchange\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 11805,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"listingId\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/VerifyDomainProcessor.json",
    "content": "{\n  \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_registry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"_providerHashes\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"providerHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"ProviderHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"providerHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"ProviderHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"witness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WitnessAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"witness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WitnessRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_newProviderHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"addProviderHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWitness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWitness\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getProviderHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWitnesses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"isProviderHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWitness\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"providerHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_removeProviderHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"removeProviderHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removeWitness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWitness\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof\",\n          \"name\": \"proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"verifyProofSignatures\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n          \"name\": \"_proofs\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"verifyProofs\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTime\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IVerifyDomainProcessor.DomainRaw[]\",\n          \"name\": \"domains\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"witnesses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n    \"transactionIndex\": 79,\n    \"gasUsed\": \"15020436\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000040000000000000000000000000000000000202000000001000000000000000000000000000000000000020000010000000000000800001000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\",\n    \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 315,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866643436323230333962653365343238366464333238356433366437373261373164353830613961666130613137313861376536343335333963393532636639000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 316,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839306136343839656666333831343036383961313531333366623538393036613765383437636331383237316166303336393336633865646139316464636338000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 317,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831346432366430326233616539663236663965363261346438643736656266666630636434613464343632396330386339303961663939656330656234316437000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 318,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836343535386234333633633466386434653763316565316137356534643832663866613736363430653137346230366434656433346533623436656263316137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 319,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865346163393363663332613538353839376233303065656330643232666464616564373031363539343866376161666431633434333634383035383133303537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 320,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834613236366664363366353530646236623739313732333235663333343139646636643564383762663932346231373564386231383137663031306132316366000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 321,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864633065363637323466636633386538353139633761623333616239653661303437633735386462333532303462316430383635303066653530333333663731000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 322,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835313561383265333332366239383563613037336435386133626139323930653834666638643032316430373265376234323066643036313662633630396537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 323,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862343161353133666464336532623761366238653063303266386137313461613361636131303163643332333635646536636261633930666165333038653036000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 324,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831666463343733386233323364346333386266363537613333663734663935363138626331313933336663633463653665396633663763393366356134393265000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 325,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835663135323331653537613266613836663565316562316332616264626435343835313039616461363562623633626564383763373234323564636138323835000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 326,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835343539656262656136343664316134613063393339343465363836303063396533353539313861393062333664333532613132393162613535376535353663000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 327,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866663636633765633166376338316663383333626166623935323263633135626534656635363436323236376338393837393531303530316331626337376664000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 328,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835666161353135303039636137393238303562646630336439353164373533616232343163333231303636653366306362633065653866346330396563623332000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 329,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838303438313862323836653663323034623366313832383262316637613061343062316235353562633339646366323536333432653062346463336632393932000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 330,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835666631363933333461383162386239386261396537626562316566326533383630663739663134386366303735323635323465383239656366366436653564000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 331,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833383938393332396535636564353835396536353039646133396631316636333434633130353232633031393363306362353733653738336539373466626430000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 332,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861633434316436643165393936326562306162636263383139323331653438363134373836633137393530376664306661616563346361643062356431653062000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 333,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865363265363332396162656664656532346663656366333763613535623131326661396430616261636232633939636437663863306461366337626134366138000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 334,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830393962363732366465313338323336666137643339313766313763616566343265626431396661393364653936623162316661666663373133323635643330000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 335,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864653165333763626232383737306131623165643730643461363833376530656537323739323630363965653866613136333366303365346465326333356364000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 336,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836633065306232333432346437356336313931323039343837613237626463623965653966373438656330356638373262346166643536616636366333366335000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 337,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839663736613234346237333164373235376434636338343666336461393837613632303338363261333261626535643337393738356462656364323335643161000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 338,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865663633656237643064613538303830373761663661386539633136303431366361363664623136373739656633306534393439643331656464373062663039000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 339,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832623564623037663538386264323764333739353238316336343066643566666536646531313134353033613237653531306134616134626439643030346434000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 340,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837313839393430303730623035613731326663363330353365396337373138373730633536326364376466303834653530613934313636396636383030393061000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 341,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831363537666161633934646435356530363333363264646662366639356335613664323165373966663735386336613864363037393531306230303462653332000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 342,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836306131386639623861663430356463623930623531653637313966633134623763373932376135393631343434636439376562386563666663376563626439000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 343,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830343066626536386539316134353735616439316437646362393030373766636663313736323765663261313239336635396431373732393539636361656437000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 344,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865326631396633633931643961353930636661663235663436353531623461303233396162343532656635663633386162313732636366626430613063363137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 345,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837306138633062353630623436353563336137633638633062623736636639666334323438346133626237336335666564303261356662343239373936356236000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 346,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835366338313264636364383436323032393261313861383239313538626132306665663439653532656661353739346335386437643237383031343866633233000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 347,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837326162373032333736383634646261316562373631613639333761623164396664303265363037303433643764363433346262336633343262323230613733000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 348,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864373865353566303964653963313836393036343133353830376331353134623262376639303562323039636335373065636435326530346230333635386561000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 349,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837353263313535376134656461613734663963366464376331363665643931656663653134656439303634373136343133373366326137623032383463316464000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 350,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830613664393963386535306238363535366162376362383466353133653130303432316662663330626665633637636464313863653732303235353331393933000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 351,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836383133626466356532346536623564626137626634336461383933623839326237373265646536326664343464643262363461333131373333376262663166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 352,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833646534326637353832333662666237393464663139396439653834353833373964333731326432656336383865326535666633633364663566393538666131000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 353,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863336464313363656166326639646531323563623233366133646263663739633063316637353861623631383763656461363834653338343535646636316433000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 354,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864393333356236396430613939313235353765316139656465313235313038393331626361623661656536383734663235666633386264376634653135623533000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 355,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832386634643661313032613432356633323361623039623364663739323435636331303761663132373530333539613361626666363834656461386363616234000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 356,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839366533313166366463373838303933386138333264383137643963376266353336326462316331316231616135633734373730323965633161363766646462000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 357,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836303830343636663738326437396366356533363964376464623964666164306131386433333035663931373566356464613966303138333739646661303962000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 358,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830326530306532323831343432376532353464386633383634653363326663376434646638663561383830613032616364343533653765643236366433346633000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 359,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837323237643039306465353233306239346262313237366233663766383836333763356638316361373836313164643638386162616164386634343466393934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 360,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833356539383462353539383263356666303532613535366634323232643638633834313862333066656632613439326135346664633239333264333764393232000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 361,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837313338653064646261626330613630616364343562656162326465336233353862353364653734663432333266333964653130376536333835393438353734000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 362,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838653564363532323035343333373561373837383731626637356664393761633565393261623139653465333936366638636431306536323661326136306137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 363,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839333336386338316131623561653762646461356636643434333861343638643032313437336262383766323439376661393138323931396461346230633934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 364,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834343237313533343837353339616537333065663865666561383038633037626232303438373432353466316332313232633130303631663435623966336336000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 365,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834333563313132303261633631383562323162386462346662363131323339663838623135613966616264353932383831646364633865316435363939623166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 366,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862643839303664306265666436656530303264646535363137383433393135393264383737303064356530353666656235356564656566333739623038313865000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 367,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838623265386330333365363535326663383430393739353937353864323832666566656639316231666231346166343033303030306239623963306534303032000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 368,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862306263653434636639373735333937613531363538363662613330626433653038643830333336316530376463643133383336623065366261633930313135000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 369,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834643439386665386135633034316135623764623736313933653764386238393266303637316535316365393634323863656231303666663331363961376334000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 370,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833313564383433666231373131363230393163306234386263646639653762366364353031653565376239353933393030383330376531353238666534376239000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 371,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864376466666532633632663535303536346562333963333662636630643663356534326138316234363535383864323133306630656138303639613730333265000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 372,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865393262303463363864353833323938663363346237626363323935306531656238376331663037633364316562623838326635386231633835393536396434000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 373,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838643366306165313535363063363236303230303362336165336163333135323235636533656663356238663130393566383739383734633537333134626261000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 374,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835383638343263353434623236353532356132376632663639623234653865613865303464343439663564613362383338326637376239616266666136653230000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 375,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830396138623230623364653233623866363631653338386536353431616134653138623339656466376532663039323665346233373633633832666565316532000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 376,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862373930353632383564376436323731386439623166313930383763663234366636666134626435346235396665666236653533363734656230333638313966000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 377,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839313062636330386565636134356631313539336665376233616138303832313361313434646463633935326264343634383065626338323731303064656632000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 378,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862323336353536616164396539323363343535306665653862626138316334316337353336383533333534656264363764663264663339643038303564626331000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 379,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834663437333835353334643834343336356439656331363432333133373133646637623530323030643139333466663835303066303231613465353066306531000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 380,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863323334653761616137306633353338316363653465643631656235666464656262383661316362303064656434336461366266363065316461373566666535000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 381,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832636334633339623732373466383430373139633037613635663630303461343361323835343530353266623739363131353638623934663866323836323436000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 382,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830646465343061356238613634353961393033613639633338306538646431663565323230343833346462373235376439313964303563663566623562363065000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 383,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830393437373132623835333464316339346463393962656234343731623566663861383239313436616338303561383438393935313662613763326239323162000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 384,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838396561636431663063646462383862376565663565323966623465633032656332633138303931653033326130633637383138336635323565393632653162000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 385,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833633935646532623935396566313034663532333765376337643832376338346237363039653163363533643535386438376330643235393139343830633262000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 386,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838343239336165343230633236396433633663313534356139323564653831313061323638326430353538306330323930386562353939643933653838393333000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 387,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835313761656530623465623536383365613265653665656137316162313138356130643966636266646633323633356662376533613030623433656436313035000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 388,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837646165653239343961633835643266336463626134633264343561343834316334666635336336663932383066303136323765393731323066646665396461000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 389,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865653933306431383732623332376466333836306563643733323330663934376536663538306163366430646164633638326137346463386134393832646339000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 390,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833303264643966623138643765623432616536666233333838356664323964313966363939346666666364636239616566326437636437333661643632343937000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 391,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863613662353732636331343639323935336261633261633361313232626238323564656532313764326663303661333662343563613235393839663730303139000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 392,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831316463376138623231336262353836353764383464613064356133636466663837336464653138626531396232623634346366306233653131356236366431000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 393,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838353030643233373239343732663063333232363432373930383162656536356536333263393333636463386638636635356537363333373566323035666462000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 394,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830316264323736666133343535383361666536393030646430616463613031316632343033363938373733623838353935396239613032396630356233633537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 395,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832643861376637353466393036316535393365306363306332383337636363633338356235663862373863303232396330626462393839366438386234343333000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 396,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837616261623931313531323366396535373431616561333865613036376337346466613862363039326338353332646263633839383966376138643833613932000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 397,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834373262323532373933323536393563383138363066653064363461633862373034326431633834656138653835396339376534616362613964353836393235000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 398,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836303666366135643831346136666530653139653039326231356164613333343438653862346165376465393731393364333966623838623565323261326263000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 399,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830323636323063323736353737313534326632626265343364646531626263643139363164376361343261656538373862373030336264353866626364666135000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 400,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861376235653462633438663430636332653665373133366564353333356231653731346233313038626661336533386261313133333732363062636334613131000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 401,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838343530616230336262363864636566386130326465303739656134333038353964386665366236373664323736366432643065396235316566393864656233000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 402,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866346361646164326265326162393039613637663634653630393263616138303735386236633730356336393439393366653735316336306134333965313934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 403,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838353366646635396233653064396438666139643035393038646633643231306434653061636538393632336438633064323633646634653263323864323965000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 404,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863663837396337656439336665643366666533323839366132663066343762303462303631613335353362316132393133373838356532633263653839313337000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 405,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839306565333836623438633166333865643462643738393266373962343330356139386633663766643664336236666630383637333764636632376363353764000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 406,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861396261653735316666666636623364326336616666313037366133613865633833663939336639633130336337383363353962633664393934663930336166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 407,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866326261343837646666383661646364623364653534376662333739633736633532396433653238316166386334663061343130373738626438326431363637000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 408,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861323035393836346462363537643837336230313433643364376430303833353739316565616437316264353162336139663535353265656334323232623465000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 409,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830313135313863326462343936636137616164313164383532623037353034373033393235666135653036386466393030323438306166343962623561396366000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 410,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861393435323661326665633162306661643035636262623830396237353732663434383966616432366562313836393030663032396239313331373334353837000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 411,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830613163386561343632333431356130303565303163326239623764313632626539623939396237356133636137633235623931396265363361353635336537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 412,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833386433393064666361373435633964333230333264623834356334353530653637666232373130363562303432373738636330346339346435383864336565000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 413,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864623335373565363265646233303332626264616565343561376136356432323866633766356363613263356237616130393535636339646638613039656362000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 414,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      },\n      {\n        \"transactionIndex\": 79,\n        \"blockNumber\": 20165451,\n        \"transactionHash\": \"0x3b5403e8c6f48aacdbfe1c559564a06226052687ae0032489de90f82b9714db6\",\n        \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863323764353138666435613639663266373931373938383136326533623730376235326534633137313433666630373733376131353866313964323732383139000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 415,\n        \"blockHash\": \"0x44005ff4e4a0f5eb0d3f24938b361963e593beb61ab5df7432627bc0d865d8af\"\n      }\n    ],\n    \"blockNumber\": 20165451,\n    \"cumulativeGasUsed\": \"29256511\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xbCbE5B3F85ffAFa46960272a581A2662c257EF57\",\n    \"0x2b68bFd2b44a6a9E8dC7b414550457B091ECB5fB\",\n    [\n      \"0xfd4622039be3e4286dd3285d36d772a71d580a9afa0a1718a7e643539c952cf9\",\n      \"0x90a6489eff38140689a15133fb58906a7e847cc18271af036936c8eda91ddcc8\",\n      \"0x14d26d02b3ae9f26f9e62a4d8d76ebfff0cd4a4d4629c08c909af99ec0eb41d7\",\n      \"0x64558b4363c4f8d4e7c1ee1a75e4d82f8fa76640e174b06d4ed34e3b46ebc1a7\",\n      \"0xe4ac93cf32a585897b300eec0d22fddaed70165948f7aafd1c44364805813057\",\n      \"0x4a266fd63f550db6b79172325f33419df6d5d87bf924b175d8b1817f010a21cf\",\n      \"0xdc0e66724fcf38e8519c7ab33ab9e6a047c758db35204b1d086500fe50333f71\",\n      \"0x515a82e3326b985ca073d58a3ba9290e84ff8d021d072e7b420fd0616bc609e7\",\n      \"0xb41a513fdd3e2b7a6b8e0c02f8a714aa3aca101cd32365de6cbac90fae308e06\",\n      \"0x1fdc4738b323d4c38bf657a33f74f95618bc11933fcc4ce6e9f3f7c93f5a492e\",\n      \"0x5f15231e57a2fa86f5e1eb1c2abdbd5485109ada65bb63bed87c72425dca8285\",\n      \"0x5459ebbea646d1a4a0c93944e68600c9e355918a90b36d352a1291ba557e556c\",\n      \"0xff66c7ec1f7c81fc833bafb9522cc15be4ef56462267c89879510501c1bc77fd\",\n      \"0x5faa515009ca792805bdf03d951d753ab241c321066e3f0cbc0ee8f4c09ecb32\",\n      \"0x804818b286e6c204b3f18282b1f7a0a40b1b555bc39dcf256342e0b4dc3f2992\",\n      \"0x5ff169334a81b8b98ba9e7beb1ef2e3860f79f148cf07526524e829ecf6d6e5d\",\n      \"0x38989329e5ced5859e6509da39f11f6344c10522c0193c0cb573e783e974fbd0\",\n      \"0xac441d6d1e9962eb0abcbc819231e48614786c179507fd0faaec4cad0b5d1e0b\",\n      \"0xe62e6329abefdee24fcecf37ca55b112fa9d0abacb2c99cd7f8c0da6c7ba46a8\",\n      \"0x099b6726de138236fa7d3917f17caef42ebd19fa93de96b1b1faffc713265d30\",\n      \"0xde1e37cbb28770a1b1ed70d4a6837e0ee727926069ee8fa1633f03e4de2c35cd\",\n      \"0x6c0e0b23424d75c6191209487a27bdcb9ee9f748ec05f872b4afd56af66c36c5\",\n      \"0x9f76a244b731d7257d4cc846f3da987a6203862a32abe5d379785dbecd235d1a\",\n      \"0xef63eb7d0da5808077af6a8e9c160416ca66db16779ef30e4949d31edd70bf09\",\n      \"0x2b5db07f588bd27d3795281c640fd5ffe6de1114503a27e510a4aa4bd9d004d4\",\n      \"0x7189940070b05a712fc63053e9c7718770c562cd7df084e50a941669f680090a\",\n      \"0x1657faac94dd55e063362ddfb6f95c5a6d21e79ff758c6a8d6079510b004be32\",\n      \"0x60a18f9b8af405dcb90b51e6719fc14b7c7927a5961444cd97eb8ecffc7ecbd9\",\n      \"0x040fbe68e91a4575ad91d7dcb90077fcfc17627ef2a1293f59d1772959ccaed7\",\n      \"0xe2f19f3c91d9a590cfaf25f46551b4a0239ab452ef5f638ab172ccfbd0a0c617\",\n      \"0x70a8c0b560b4655c3a7c68c0bb76cf9fc42484a3bb73c5fed02a5fb4297965b6\",\n      \"0x56c812dccd84620292a18a829158ba20fef49e52efa5794c58d7d2780148fc23\",\n      \"0x72ab702376864dba1eb761a6937ab1d9fd02e607043d7d6434bb3f342b220a73\",\n      \"0xd78e55f09de9c1869064135807c1514b2b7f905b209cc570ecd52e04b03658ea\",\n      \"0x752c1557a4edaa74f9c6dd7c166ed91efce14ed906471641373f2a7b0284c1dd\",\n      \"0x0a6d99c8e50b86556ab7cb84f513e100421fbf30bfec67cdd18ce72025531993\",\n      \"0x6813bdf5e24e6b5dba7bf43da893b892b772ede62fd44dd2b64a3117337bbf1f\",\n      \"0x3de42f758236bfb794df199d9e8458379d3712d2ec688e2e5ff3c3df5f958fa1\",\n      \"0xc3dd13ceaf2f9de125cb236a3dbcf79c0c1f758ab6187ceda684e38455df61d3\",\n      \"0xd9335b69d0a9912557e1a9ede125108931bcab6aee6874f25ff38bd7f4e15b53\",\n      \"0x28f4d6a102a425f323ab09b3df79245cc107af12750359a3abff684eda8ccab4\",\n      \"0x96e311f6dc7880938a832d817d9c7bf5362db1c11b1aa5c7477029ec1a67fddb\",\n      \"0x6080466f782d79cf5e369d7ddb9dfad0a18d3305f9175f5dda9f018379dfa09b\",\n      \"0x02e00e22814427e254d8f3864e3c2fc7d4df8f5a880a02acd453e7ed266d34f3\",\n      \"0x7227d090de5230b94bb1276b3f7f88637c5f81ca78611dd688abaad8f444f994\",\n      \"0x35e984b55982c5ff052a556f4222d68c8418b30fef2a492a54fdc2932d37d922\",\n      \"0x7138e0ddbabc0a60acd45beab2de3b358b53de74f4232f39de107e6385948574\",\n      \"0x8e5d65220543375a787871bf75fd97ac5e92ab19e4e3966f8cd10e626a2a60a7\",\n      \"0x93368c81a1b5ae7bdda5f6d4438a468d021473bb87f2497fa9182919da4b0c94\",\n      \"0x4427153487539ae730ef8efea808c07bb204874254f1c2122c10061f45b9f3c6\",\n      \"0x435c11202ac6185b21b8db4fb611239f88b15a9fabd592881dcdc8e1d5699b1f\",\n      \"0xbd8906d0befd6ee002dde561784391592d87700d5e056feb55edeef379b0818e\",\n      \"0x8b2e8c033e6552fc84097959758d282fefef91b1fb14af4030000b9b9c0e4002\",\n      \"0xb0bce44cf9775397a5165866ba30bd3e08d803361e07dcd13836b0e6bac90115\",\n      \"0x4d498fe8a5c041a5b7db76193e7d8b892f0671e51ce96428ceb106ff3169a7c4\",\n      \"0x315d843fb171162091c0b48bcdf9e7b6cd501e5e7b95939008307e1528fe47b9\",\n      \"0xd7dffe2c62f550564eb39c36bcf0d6c5e42a81b465588d2130f0ea8069a7032e\",\n      \"0xe92b04c68d583298f3c4b7bcc2950e1eb87c1f07c3d1ebb882f58b1c859569d4\",\n      \"0x8d3f0ae15560c62602003b3ae3ac315225ce3efc5b8f1095f879874c57314bba\",\n      \"0x586842c544b265525a27f2f69b24e8ea8e04d449f5da3b8382f77b9abffa6e20\",\n      \"0x09a8b20b3de23b8f661e388e6541aa4e18b39edf7e2f0926e4b3763c82fee1e2\",\n      \"0xb79056285d7d62718d9b1f19087cf246f6fa4bd54b59fefb6e53674eb036819f\",\n      \"0x910bcc08eeca45f11593fe7b3aa808213a144ddcc952bd46480ebc827100def2\",\n      \"0xb236556aad9e923c4550fee8bba81c41c7536853354ebd67df2df39d0805dbc1\",\n      \"0x4f47385534d844365d9ec1642313713df7b50200d1934ff8500f021a4e50f0e1\",\n      \"0xc234e7aaa70f35381cce4ed61eb5fddebb86a1cb00ded43da6bf60e1da75ffe5\",\n      \"0x2cc4c39b7274f840719c07a65f6004a43a28545052fb79611568b94f8f286246\",\n      \"0x0dde40a5b8a6459a903a69c380e8dd1f5e2204834db7257d919d05cf5fb5b60e\",\n      \"0x0947712b8534d1c94dc99beb4471b5ff8a829146ac805a84899516ba7c2b921b\",\n      \"0x89eacd1f0cddb88b7eef5e29fb4ec02ec2c18091e032a0c678183f525e962e1b\",\n      \"0x3c95de2b959ef104f5237e7c7d827c84b7609e1c653d558d87c0d25919480c2b\",\n      \"0x84293ae420c269d3c6c1545a925de8110a2682d05580c02908eb599d93e88933\",\n      \"0x517aee0b4eb5683ea2ee6eea71ab1185a0d9fcbfdf32635fb7e3a00b43ed6105\",\n      \"0x7daee2949ac85d2f3dcba4c2d45a4841c4ff53c6f9280f01627e97120fdfe9da\",\n      \"0xee930d1872b327df3860ecd73230f947e6f580ac6d0dadc682a74dc8a4982dc9\",\n      \"0x302dd9fb18d7eb42ae6fb33885fd29d19f6994fffcdcb9aef2d7cd736ad62497\",\n      \"0xca6b572cc14692953bac2ac3a122bb825dee217d2fc06a36b45ca25989f70019\",\n      \"0x11dc7a8b213bb58657d84da0d5a3cdff873dde18be19b2b644cf0b3e115b66d1\",\n      \"0x8500d23729472f0c32264279081bee65e632c933cdc8f8cf55e763375f205fdb\",\n      \"0x01bd276fa345583afe6900dd0adca011f2403698773b885959b9a029f05b3c57\",\n      \"0x2d8a7f754f9061e593e0cc0c2837cccc385b5f8b78c0229c0bdb9896d88b4433\",\n      \"0x7abab9115123f9e5741aea38ea067c74dfa8b6092c8532dbcc8989f7a8d83a92\",\n      \"0x472b25279325695c81860fe0d64ac8b7042d1c84ea8e859c97e4acba9d586925\",\n      \"0x606f6a5d814a6fe0e19e092b15ada33448e8b4ae7de97193d39fb88b5e22a2bc\",\n      \"0x026620c2765771542f2bbe43dde1bbcd1961d7ca42aee878b7003bd58fbcdfa5\",\n      \"0xa7b5e4bc48f40cc2e6e7136ed5335b1e714b3108bfa3e38ba11337260bcc4a11\",\n      \"0x8450ab03bb68dcef8a02de079ea430859d8fe6b676d2766d2d0e9b51ef98deb3\",\n      \"0xf4cadad2be2ab909a67f64e6092caa80758b6c705c694993fe751c60a439e194\",\n      \"0x853fdf59b3e0d9d8fa9d05908df3d210d4e0ace89623d8c0d263df4e2c28d29e\",\n      \"0xcf879c7ed93fed3ffe32896a2f0f47b04b061a3553b1a29137885e2c2ce89137\",\n      \"0x90ee386b48c1f38ed4bd7892f79b4305a98f3f7fd6d3b6ff086737dcf27cc57d\",\n      \"0xa9bae751ffff6b3d2c6aff1076a3a8ec83f993f9c103c783c59bc6d994f903af\",\n      \"0xf2ba487dff86adcdb3de547fb379c76c529d3e281af8c4f0a410778bd82d1667\",\n      \"0xa2059864db657d873b0143d3d7d00835791eead71bd51b3a9f5552eec4222b4e\",\n      \"0x011518c2db496ca7aad11d852b07504703925fa5e068df9002480af49bb5a9cf\",\n      \"0xa94526a2fec1b0fad05cbbb809b7572f4489fad26eb186900f029b9131734587\",\n      \"0x0a1c8ea4623415a005e01c2b9b7d162be9b999b75a3ca7c25b919be63a5653e7\",\n      \"0x38d390dfca745c9d32032db845c4550e67fb271065b042778cc04c94d588d3ee\",\n      \"0xdb3575e62edb3032bbdaee45a7a65d228fc7f5cca2c5b7aa0955cc9df8a09ecb\",\n      \"0xc27d518fd5a69f2f7917988162e3b707b52e4c17143ff07737a158f19d272819\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_registry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"_providerHashes\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"providerHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"ProviderHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"providerHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"ProviderHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"witness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WitnessAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"witness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WitnessRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_newProviderHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"addProviderHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWitness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWitness\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getProviderHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWitnesses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"isProviderHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWitness\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"providerHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_removeProviderHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"removeProviderHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removeWitness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWitness\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"verifyProofSignatures\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof[]\\\",\\\"name\\\":\\\"_proofs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"verifyProofs\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifyDomainProcessor.DomainRaw[]\\\",\\\"name\\\":\\\"domains\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"witnesses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addProviderHash(string)\\\":{\\\"params\\\":{\\\"_newProviderHash\\\":\\\"New provider hash to be added\\\"}},\\\"addWitness(address)\\\":{\\\"params\\\":{\\\"_newWitness\\\":\\\"Address of the new witness\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeProviderHash(string)\\\":{\\\"params\\\":{\\\"_removeProviderHash\\\":\\\"Provider hash to be removed\\\"}},\\\"removeWitness(address)\\\":{\\\"params\\\":{\\\"_removeWitness\\\":\\\"Address of witness to be removed\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\\\":{\\\"params\\\":{\\\"proof\\\":\\\"Proof to be verified\\\"}},\\\"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"params\\\":{\\\"_proofs\\\":\\\"Proofs to be verified\\\"},\\\"returns\\\":{\\\"domains\\\":\\\"      Array of Domain structs\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addProviderHash(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\\"},\\\"addWitness(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add witness address. Witness must not have been previously added.\\\"},\\\"removeProviderHash(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\\"},\\\"removeWitness(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove witness address. Witness must have been previously added.\\\"},\\\"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\\\":{\\\"notice\\\":\\\"Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters) to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature.  This function verifies a claim by performing the following checks on the claim - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim - Checks if the signatures are valid and from the witnesses This function reverts if - No signatures are found on the proof - Number of signatures is not equal to the number of witnesses - ClaimInfo hash does not match the identifier in the claim - Signatures are invalid (not from the witnesses)  DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the  responsibility of the caller.  Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code    \\\"},\\\"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"notice\\\":\\\"ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/VerifyDomainProcessor.sol\\\":\\\"VerifyDomainProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/VerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { ClaimVerifier } from \\\\\\\"./external/ClaimVerifier.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./external/interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { ProxyBaseProcessor } from \\\\\\\"./external/processors/ProxyBaseProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"./external/lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TicketmasterDataParsing } from \\\\\\\"./external/TicketmasterDataParsing.sol\\\\\\\";\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./interfaces/IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ncontract VerifyDomainProcessor is IVerifyDomainProcessor, ProxyBaseProcessor {\\\\n\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable registry;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _registry,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string[] memory _providerHashes\\\\n    )   \\\\n        ProxyBaseProcessor(_nullifierRegistry, _providerHashes)\\\\n    {\\\\n        registry = _registry;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\\\n     *\\\\n     * @param _proofs        Proofs to be verified\\\\n     * @return domains       Array of Domain structs\\\\n     */\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external \\\\n        override\\\\n        returns (DomainRaw[] memory domains)\\\\n    {\\\\n        require(msg.sender == registry, \\\\\\\"Only registry can call\\\\\\\");\\\\n\\\\n        domains = new DomainRaw[](_proofs.length);\\\\n\\\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\\\n            Proof memory proof = _proofs[i];\\\\n\\\\n            verifyProofSignatures(proof);\\\\n\\\\n            (\\\\n                string memory domainName,\\\\n                string memory expiryTimeStr,\\\\n                string memory providerHash\\\\n            ) = _extractValues(proof);\\\\n\\\\n            // Check provider hash\\\\n            require(_validateProviderHash(providerHash), \\\\\\\"No valid providerHash\\\\\\\");\\\\n\\\\n            _validateAndAddNullifier(proof.signedClaim.signatures);\\\\n\\\\n            domains[i] = DomainRaw({\\\\n                name: domainName,\\\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\\\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\\\\\"YYYY-MM-DDTHH:MM:SS\\\\\\\"\\\\n                // and returns UTC timestamps.\\\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(expiryTimeStr)\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * Extracts all values from the proof context.\\\\n     *\\\\n     * @param _proof The proof containing the context to extract values from.\\\\n     */\\\\n    function _extractValues(Proof memory _proof) internal pure returns (\\\\n        string memory domainName,\\\\n        string memory expiryTime,\\\\n        string memory providerHash\\\\n    ) {\\\\n        string[] memory values = ClaimVerifier.extractAllFromContext(\\\\n            _proof.claimInfo.context, \\\\n            MAX_EXTRACT_VALUES, \\\\n            true\\\\n        );\\\\n\\\\n        return (\\\\n            values[0], // domainName\\\\n            values[1], // expiryTime\\\\n            values[2]  // providerHash\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x34c84f99070a4b76cca1d63b5d8eee8edd8a0e98ace63cca4681d71327f4c18a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ClaimVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary ClaimVerifier {\\\\n\\\\n    /**\\\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\\\n     * the target string in the data string if found. Returns type(uint256).max if:\\\\n     * - Target is longer than data\\\\n     * - Target is not found\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     */\\\\n    function findSubstringEndIndex(\\\\n        string memory data,\\\\n        string memory target\\\\n    ) public pure returns (uint256) {\\\\n        bytes memory dataBytes = bytes(data);\\\\n        bytes memory targetBytes = bytes(target);\\\\n\\\\n        if (dataBytes.length < targetBytes.length) {\\\\n            return type(uint256).max;\\\\n        }\\\\n\\\\n        // Find start of target\\\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\\\n            bool isMatch = true;\\\\n\\\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\\\n                if (dataBytes[i + j] != targetBytes[j]) {\\\\n                    isMatch = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n\\\\n            if (isMatch) {\\\\n                return i + targetBytes.length; // Return end index + 1\\\\n            }\\\\n        }\\\\n\\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    /**\\\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\\\n     * Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"'\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *\\\\n     * @param data      Context string from which target value needs to be extracted\\\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\\\n     */\\\\n    function extractFieldFromContext(\\\\n        string memory data,\\\\n        string memory prefix\\\\n    ) public pure returns (string memory) {\\\\n        // Find end index of prefix; which is the start index of the value\\\\n        uint256 start = findSubstringEndIndex(data, prefix);\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        if (start == dataBytes.length) {\\\\n            return \\\\\\\"\\\\\\\"; // Prefix not found. Malformed or missing message\\\\n        }\\\\n        \\\\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\\\n        uint256 end = start;\\\\n        while (\\\\n            end < dataBytes.length &&\\\\n            !(dataBytes[end] == '\\\\\\\"' && dataBytes[end - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")\\\\n        ) {\\\\n            end++;\\\\n        }\\\\n        if (end <= start) {\\\\n            return \\\\\\\"\\\\\\\"; // Malformed or missing message\\\\n        }\\\\n        bytes memory contextMessage = new bytes(end - start);\\\\n        for (uint i = start; i < end; i++) {\\\\n            contextMessage[i - start] = dataBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\\\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\\\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\\\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\\\n     * multiple times.\\\\n     * \\\\n     * @param data                  Context string from which target value needs to be extracted\\\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\\\n     */\\\\n    function extractAllFromContext(\\\\n        string memory data,\\\\n        uint8 maxValues,\\\\n        bool extractProviderHash\\\\n    ) public pure returns (string[] memory) {\\\\n        \\\\n        require(maxValues > 0, \\\\\\\"Max values must be greater than 0\\\\\\\");\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        uint index = 0;\\\\n\\\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"');\\\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\\\\\"Extraction failed. Malformed extractedParameters\\\\\\\");\\\\n        }\\\\n        index += extractedParametersBytes.length;\\\\n\\\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"'\\\\n        uint valuesFound = 0;\\\\n    \\\\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\\\n\\\\n        while (\\\\n            index < dataBytes.length\\\\n        ) {\\\\n            // Keep incrementing until '\\\\\\\"', escaped quotes are not considered\\\\n            if (!(dataBytes[index] == '\\\\\\\"' && dataBytes[index - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")) {\\\\n                index++;\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isValue) {\\\\n                // \\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\" (3 chars)\\\\n                require(dataBytes[index + 1] == \\\\\\\":\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"', \\\\\\\"Extraction failed. Malformed data 1\\\\\\\");\\\\n                index += 3;     // move it after \\\\\\\\\\\\\\\"\\\\n                isValue = true;\\\\n                valueIndices[2 * valuesFound] = index;      // start index\\\\n            } else {\\\\n                // \\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\" (3 chars) or \\\\\\\\\\\\\\\"}, (3 chars)\\\\n                // \\\\\\\\\\\\\\\"}} is not supported, there should always be a providerHash\\\\n                require(\\\\n                    dataBytes[index + 1] == \\\\\\\",\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"' ||  \\\\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\\\\\",\\\\\\\",\\\\n                    \\\\\\\"Extraction failed. Malformed data 2\\\\\\\"\\\\n                );\\\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\\\n                valuesFound++;\\\\n\\\\n                if (dataBytes[index + 1] == \\\\\\\",\\\\\\\") {\\\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\\\n                    require(valuesFound != maxValues, \\\\\\\"Extraction failed. Exceeded max values\\\\\\\");\\\\n                    index += 3;\\\\n                    isValue = false;\\\\n                } else {    // index + 1 = \\\\\\\"}\\\\\\\"\\\\n                    index += 3;\\\\n                    break;  // end of extractedParameters\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        if (extractProviderHash) {\\\\n            bytes memory providerHashParamBytes = bytes(\\\\\\\"\\\\\\\\\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"\\\\\\\");\\\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\\\\\"Extraction failed. Malformed providerHash\\\\\\\");\\\\n            }\\\\n            index += providerHashParamBytes.length;\\\\n            \\\\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\\\n            valueIndices[2 * valuesFound] = index;\\\\n            // Keep incrementing until '\\\\\\\"'\\\\n            while (\\\\n                index < dataBytes.length && dataBytes[index] != '\\\\\\\"'\\\\n            ) {\\\\n                index++;\\\\n            }\\\\n            valueIndices[2 * valuesFound + 1] = index;\\\\n            valuesFound++;\\\\n        }   \\\\n        \\\\n        string[] memory values = new string[](valuesFound);\\\\n        \\\\n        for (uint i = 0; i < valuesFound; i++) {\\\\n            uint startIndex = valueIndices[2 * i];\\\\n            uint endIndex = valueIndices[2 * i + 1];\\\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\\\n            for (uint j = startIndex; j < endIndex; j++) {\\\\n                contextValue[j - startIndex] = dataBytes[j];\\\\n            }\\\\n            values[i] = string(contextValue);\\\\n        }\\\\n\\\\n        return values;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6a8d456c3b2c5ab5a475279a2f0f103faff3cb2d6abb2ce2029cd4265b904e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/TicketmasterDataParsing.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { DateTime } from \\\\\\\"./lib/DateTime.sol\\\\\\\";\\\\n\\\\nimport { StringConversionUtils } from \\\\\\\"./lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { ClaimVerifier } from \\\\\\\"./ClaimVerifier.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary TicketmasterDataParsing {\\\\n    \\\\n    using StringConversionUtils for string;\\\\n\\\\n    /**\\\\n     * @notice Iterates through every character in the date string and splits the string at each dash, \\\\\\\"T\\\\\\\", or colon. Function will revert\\\\n     * if there are not 6 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\\\n     * to get the unix timestamp. This function is SPECIFIC TO THE DATE FORMAT USED BY Ticketmaster, not suitable for use with other date\\\\n     * formats. Ticketmaster date format is: \\\\\\\"YYYY-MM-DDTHH:MM:SS\\\\\\\" and returns UTC timestamps.\\\\n     *\\\\n     * @param _dateString       Date string to be converted to a UTC timestamp\\\\n     */\\\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256 utcTimestamp) {\\\\n        string[6] memory extractedStrings;\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\\\n            if (bytes(_dateString)[i] == 0x2d || bytes(_dateString)[i] == 0x3a || bytes(_dateString)[i] == 0x54) {\\\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\\\n                lastBreak = i + 1;\\\\n                breakCounter++;\\\\n            }\\\\n        }\\\\n        // Add last substring to array\\\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\\\n\\\\n        // Check that exactly 6 substrings were found (string is split at 5 different places)\\\\n        require(breakCounter == 5, \\\\\\\"Invalid date string\\\\\\\");\\\\n\\\\n        utcTimestamp = DateTime.timestampFromDateTime(\\\\n            extractedStrings[0].stringToUint(0),    // year\\\\n            extractedStrings[1].stringToUint(0),    // month\\\\n            extractedStrings[2].stringToUint(0),    // day\\\\n            extractedStrings[3].stringToUint(0),    // hour\\\\n            extractedStrings[4].stringToUint(0),    // minute\\\\n            0                                       // we don't need to the second granularity\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * Extract event ID from URL by finding the last slash and taking the substring after it. We assume the\\\\n     * URL is formulated something like: {domainRoot}/.../event/EVENT_ID\\\\n     *\\\\n     * @param _url          URL to extract event ID from\\\\n     * @return              Event ID extracted from URL\\\\n     */\\\\n    function _extractEventIdFromUrl(string memory _url) internal pure returns (string memory) {\\\\n        string memory prefix = \\\\\\\"event/\\\\\\\";\\\\n        bytes memory urlBytes = bytes(_url);\\\\n        uint256 urlLength = urlBytes.length;\\\\n\\\\n        uint256 startIndex = ClaimVerifier.findSubstringEndIndex(_url, prefix);\\\\n        // If the start index is the max value or the URL length, then the event ID was not found\\\\n        if (startIndex == type(uint256).max || startIndex == urlLength) {\\\\n            revert(\\\\\\\"Event ID not found in URL\\\\\\\");\\\\n        }\\\\n\\\\n        bytes memory contextMessage = new bytes(urlLength - startIndex);\\\\n        for (uint i = startIndex; i < urlLength; i++) {\\\\n            contextMessage[i - startIndex] = urlBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * Parse tickets out of a ticket string of the format: '[\\\\\\\"ticket1\\\\\\\", \\\\\\\"ticket2\\\\\\\", \\\\\\\"ticket3\\\\\\\"]'.\\\\n     * We start by getting the number of tickets in a string by counting the number of commas and adding 1.\\\\n     * Then we iterate through the string and find the ticket IDs by looking for the quotes. We need to extract\\\\n     * from quote to quote so we look for all even-numbered quotes then extract the string between that and the\\\\n     * previous quote index.\\\\n     *\\\\n     * @param _ticketString          Stringified array of tickets\\\\n     */\\\\n     function _parseTicketString(string memory _ticketString) internal pure returns (string[] memory ticketIds) {\\\\n        // Assume there is at least one ticket (which means array would not have a comma)\\\\n        // If there is no ticket then the transaction will end up reverting\\\\n        uint256 ticketCount = 1;\\\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\\\n            if (bytes(_ticketString)[i] == 0x2C) {\\\\n                ticketCount++;\\\\n            }\\\\n        }\\\\n\\\\n        ticketIds = new string[](ticketCount);\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\\\n            if (bytes(_ticketString)[i] == 0x22) {\\\\n                breakCounter++;\\\\n                if (breakCounter % 2 == 0) {\\\\n                    ticketIds[(breakCounter/2)-1] = _ticketString.substring(lastBreak, i-1);\\\\n                }\\\\n                lastBreak = i + 1;\\\\n            }\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x23a87b78bf72170f5e0cee6e4a8c59f68947c50971e00d183580ebe473a148c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/DateTime.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.0;\\\\n\\\\n// ----------------------------------------------------------------------------\\\\n// DateTime Library v2.0\\\\n//\\\\n// A gas-efficient Solidity date and time library\\\\n//\\\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\\\n//\\\\n// Tested date range 1970/01/01 to 2345/12/31\\\\n//\\\\n// Conventions:\\\\n// Unit      | Range         | Notes\\\\n// :-------- |:-------------:|:-----\\\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\\\n// year      | 1970 ... 2345 |\\\\n// month     | 1 ... 12      |\\\\n// day       | 1 ... 31      |\\\\n// hour      | 0 ... 23      |\\\\n// minute    | 0 ... 59      |\\\\n// second    | 0 ... 59      |\\\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\\\n//\\\\n//\\\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\\\n//\\\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\\\n// ----------------------------------------------------------------------------\\\\n\\\\nlibrary DateTime {\\\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\\\n    int256 constant OFFSET19700101 = 2440588;\\\\n\\\\n    uint256 constant DOW_MON = 1;\\\\n    uint256 constant DOW_TUE = 2;\\\\n    uint256 constant DOW_WED = 3;\\\\n    uint256 constant DOW_THU = 4;\\\\n    uint256 constant DOW_FRI = 5;\\\\n    uint256 constant DOW_SAT = 6;\\\\n    uint256 constant DOW_SUN = 7;\\\\n\\\\n    // ------------------------------------------------------------------------\\\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\\\n    // the date conversion algorithm from\\\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\\\n    //\\\\n    // days = day\\\\n    //      - 32075\\\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\\\n    //      - offset\\\\n    // ------------------------------------------------------------------------\\\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\\\n        require(year >= 1970);\\\\n        int256 _year = int256(year);\\\\n        int256 _month = int256(month);\\\\n        int256 _day = int256(day);\\\\n\\\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\\\n\\\\n        _days = uint256(__days);\\\\n    }\\\\n\\\\n    function timestampFromDateTime(\\\\n        uint256 year,\\\\n        uint256 month,\\\\n        uint256 day,\\\\n        uint256 hour,\\\\n        uint256 minute,\\\\n        uint256 second\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256 timestamp)\\\\n    {\\\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\\\n            + minute * SECONDS_PER_MINUTE + second;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x64f6113ad342f8bd3c2eb74fde279401d604faf77dd08f6c16c3912c3519f170\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/StringArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title StringArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle String Arrays\\\\n */\\\\nlibrary StringArrayUtils {\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input string to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(string[] memory A, string memory a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (keccak256(bytes(A[i])) == keccak256(bytes(a))) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (type(uint256).max, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The string to remove\\\\n     */\\\\n    function removeStorage(string[] storage A, string memory a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"String not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\",\\\"keccak256\\\":\\\"0x249b6dc922e7e1602f3c2e77075d3b9d259d3badc744241ecf2ca2ee1cbcd56c\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/external/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/processors/ProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"../lib/AddressArrayUtils.sol\\\\\\\";\\\\nimport { StringArrayUtils } from \\\\\\\"../lib/StringArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\nimport { ClaimVerifier } from \\\\\\\"../ClaimVerifier.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ProxyBaseProcessor is IProxyBaseProcessor, Ownable {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    using StringArrayUtils for string[];\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(address => bool) public isWitness;\\\\n    address[] public witnesses;\\\\n    mapping(string => bool) public isProviderHash;\\\\n    string[] public providerHashes;                         // Set of provider hashes that these proofs should be for\\\\n    INullifierRegistry public immutable nullifierRegistry;\\\\n\\\\n    /* ============ Events ============ */\\\\n    event WitnessAdded(address witness);\\\\n    event WitnessRemoved(address witness);\\\\n    event ProviderHashAdded(string providerHash);\\\\n    event ProviderHashRemoved(string providerHash);\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        INullifierRegistry _nulliferRegistry,\\\\n        string[] memory _providerHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        nullifierRegistry = _nulliferRegistry;\\\\n\\\\n        for (uint256 i = 0; i < _providerHashes.length; i++) {\\\\n            require(!isProviderHash[_providerHashes[i]], \\\\\\\"Provider hash already added\\\\\\\");\\\\n            isProviderHash[_providerHashes[i]] = true;\\\\n            providerHashes.push(_providerHashes[i]);\\\\n\\\\n            emit ProviderHashAdded(_providerHashes[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add witness address. Witness must not have been previously added.\\\\n     *\\\\n     * @param _newWitness    Address of the new witness\\\\n     */\\\\n    function addWitness(address _newWitness) external onlyOwner {\\\\n        require(!isWitness[_newWitness], \\\\\\\"Address is already a witness\\\\\\\");\\\\n\\\\n        isWitness[_newWitness] = true;\\\\n        witnesses.push(_newWitness);\\\\n\\\\n        emit WitnessAdded(_newWitness);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove witness address. Witness must have been previously added.\\\\n     *\\\\n     * @param _removeWitness    Address of witness to be removed\\\\n     */\\\\n    function removeWitness(address _removeWitness) external onlyOwner {\\\\n        require(isWitness[_removeWitness], \\\\\\\"Address is not a witness\\\\\\\");\\\\n\\\\n        delete isWitness[_removeWitness];\\\\n        witnesses.removeStorage(_removeWitness);\\\\n\\\\n        emit WitnessRemoved(_removeWitness);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\\\n     *\\\\n     * @param _newProviderHash    New provider hash to be added\\\\n     */\\\\n    function addProviderHash(string memory _newProviderHash) external onlyOwner {\\\\n        require(!isProviderHash[_newProviderHash], \\\\\\\"Provider hash already added\\\\\\\");\\\\n\\\\n        isProviderHash[_newProviderHash] = true;\\\\n        providerHashes.push(_newProviderHash);\\\\n\\\\n        emit ProviderHashAdded(_newProviderHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\\\n     *\\\\n     * @param _removeProviderHash    Provider hash to be removed\\\\n     */\\\\n    function removeProviderHash(string memory _removeProviderHash) external onlyOwner {\\\\n        require(isProviderHash[_removeProviderHash], \\\\\\\"Provider hash not found\\\\\\\");\\\\n\\\\n        delete isProviderHash[_removeProviderHash];\\\\n        providerHashes.removeStorage(_removeProviderHash);\\\\n\\\\n        emit ProviderHashRemoved(_removeProviderHash);\\\\n    }\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n    \\\\n    /**\\\\n     * Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters)\\\\n     * to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature. \\\\n     * This function verifies a claim by performing the following checks on the claim\\\\n     * - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim\\\\n     * - Checks if the signatures are valid and from the witnesses\\\\n     * This function reverts if\\\\n     * - No signatures are found on the proof\\\\n     * - Number of signatures is not equal to the number of witnesses\\\\n     * - ClaimInfo hash does not match the identifier in the claim\\\\n     * - Signatures are invalid (not from the witnesses)\\\\n     * \\\\n     * DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the \\\\n     * responsibility of the caller.\\\\n     * \\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *    \\\\n     * @param proof                 Proof to be verified\\\\n     */\\\\n    function verifyProofSignatures(Proof memory proof) public view returns (bool) {\\\\n\\\\n        // create signed claim using claimData and signature.\\\\n        require(proof.signedClaim.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n        Claims.SignedClaim memory signed = Claims.SignedClaim(\\\\n            proof.signedClaim.claim,\\\\n            proof.signedClaim.signatures\\\\n        );\\\\n\\\\n        // check if the hash from the claimInfo is equal to the infoHash in the claimData\\\\n        bytes32 hashed = Claims.hashClaimInfo(proof.claimInfo);\\\\n        require(proof.signedClaim.claim.identifier == hashed, \\\\\\\"ClaimInfo hash doesn't match\\\\\\\");\\\\n\\\\n        // Recover signers of the signed claim\\\\n        address[] memory signedWitnesses = Claims.recoverSignersOfSignedClaim(signed);\\\\n\\\\n        // check if the number of signatures is equal to the number of witnesses\\\\n        require(\\\\n            signedWitnesses.length == witnesses.length,\\\\n            \\\\\\\"Number of signatures not equal to number of witnesses\\\\\\\"\\\\n        );\\\\n\\\\n        // Check signatures are from witnesses\\\\n        for (uint256 i = 0; i < signed.signatures.length; i++) {\\\\n            bool found = false;\\\\n            for (uint j = 0; j < witnesses.length; j++) {\\\\n                if (signedWitnesses[i] == witnesses[j]) {\\\\n                    found = true;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            require(found, \\\\\\\"Signature not appropriate\\\\\\\");\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function getWitnesses() external view returns (address[] memory) {\\\\n        return witnesses;\\\\n    }\\\\n\\\\n    function getProviderHashes() external view returns (string[] memory) {\\\\n        return providerHashes;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProviderHash(string memory _providerHash) internal view returns (bool) {\\\\n        return isProviderHash[_providerHash];\\\\n    }\\\\n    \\\\n    function _validateAndAddNullifier(bytes[] memory _sigArray) internal {\\\\n        bytes32 nullifier = keccak256(abi.encode(_sigArray));\\\\n        require(!nullifierRegistry.isNullified(nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbfbe301dc003e40793876e36d29ac7da3b294031dc74d26f4e41fcdf3deb1144\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c06040523462000051576200001f620000186200027f565b91620002a7565b6040516136af620008888239608051818181610b4a015261357d015260a0518181816108a50152610fff01526136af90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200008e57604052565b62000056565b90620000ab620000a360405190565b92836200006c565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200005157565b90505190620000ab82620000bc565b6001600160a01b038116620000c7565b90505190620000ab82620000de565b6001600160401b0381116200008e5760208091020190565b6001600160401b0381116200008e57602090601f01601f19160190565b0190565b60005b8381106200014a5750506000910152565b818101518382015260200162000139565b90929192620001746200016e8262000115565b62000094565b938185526020850190828401116200005157620000ab9262000136565b9080601f8301121562000051578151620000b9926020016200015b565b929190620001c06200016e82620000fd565b9381855260208086019202810191838311620000515781905b838210620001e8575050505050565b81516001600160401b03811162000051576020916200020b878493870162000191565b815201910190620001d9565b9080601f8301121562000051578151620000b992602001620001ae565b9160608383031262000051576200024c8284620000cf565b926200025c8360208301620000ee565b60408201519093906001600160401b0381116200005157620000b9920162000217565b620002a262003f3780380380620002968162000094565b92833981019062000234565b909192565b91620002b391620006bb565b60a052565b620000b9620000b9620000b99290565b634e487b7160e01b600052601160045260246000fd5b6000198114620002ee5760010190565b620002c8565b634e487b7160e01b600052603260045260246000fd5b9062000314825190565b81101562000326576020809102010190565b620002f4565b62000132620003479260209262000341815190565b94859290565b9384910162000136565b620003646200013291602094936200032c565b918252565b620003816200037760405190565b9283928362000351565b03902090565b620000b99162000369565b156200039a57565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9060ff905b9181191691161790565b9062000401620000b96200040992151590565b8254620003df565b9055565b8054821015620003265762000429600191600052602060002090565b91020190600090565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801562000481575b60208310146200047b57565b62000448565b91607f16916200046f565b9160001960089290920291821b911b620003e4565b9190620004b6620000b96200040993620002b8565b9083546200048c565b620000ab91600091620004a1565b818110620004d9575050565b80620004e96000600193620004bf565b01620004cd565b9190601f81116200050057505050565b62000514620000ab93600052602060002090565b906020601f84018190048301931062000538575b6020601f909101040190620004cd565b909150819062000528565b906200054d815190565b906001600160401b0382116200008e5762000575826200056e85546200045e565b85620004f0565b602090601f8311600114620005b45762000409929160009183620005a8575b5050600019600883021c1916906002021790565b01519050388062000594565b601f19831691620005ca85600052602060002090565b9260005b8181106200060b57509160029391856001969410620005f1575b50505002019055565b01516000196008601f8516021c19169055388080620005e8565b91936020600181928787015181550195019201620005ce565b91906200063657620000ab9162000543565b62000432565b90815491680100000000000000008310156200008e578262000668916001620000ab950181556200040d565b9062000624565b620006946200069e602093620001329362000688815190565b80835293849260200190565b9586910162000136565b601f01601f191690565b6020808252620000b9929101906200066f565b919091620006c8620007c2565b608052620006d76000620002b8565b620006e4620000b9845190565b811015620007bd57620007b7906200074d60036200072c62000726620007226200071b62000713878b6200030a565b518562000387565b5460ff1690565b1590565b62000392565b620007476001916200073f85896200030a565b519062000387565b620003ee565b6200076760046200075f83876200030a565b51906200063c565b6200077381856200030a565b51620007ae7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f409691620007a460405190565b91829182620006a8565b0390a1620002de565b620006d7565b509050565b620000ab3362000825565b906001600160a01b0390620003e4565b620000b990620000ad906001600160a01b031682565b620000b990620007dd565b620000b990620007f3565b906200081d620000b96200040992620007fe565b8254620007cd565b6000546001600160a01b0316906200083f81600062000809565b620008766200086f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620007fe565b91620007fe565b916200088160405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c80631cba9bed146101225780632ca6927d1461011d57806350262c001461011857806357c6e12a1461011357806359e26be11461010e578063670a8cb714610109578063715018a6146101045780637b103999146100ff5780637de24fcf146100fa5780638da5cb5b146100f557806396d195bd146100f0578063b870676c146100eb578063bd6e7741146100e6578063c2107e73146100e1578063ee2f13cd146100dc578063f2fde38b146100d75763fa7643f4036101d457610c7e565b610c3c565b610c24565b610bfd565b610b6f565b610b31565b610acb565b610a40565b610a19565b610890565b610878565b610837565b6107d9565b61079d565b6105a6565b6102ef565b61021c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761015e57604052565b610127565b9061017761017060405190565b928361013d565b565b6001600160401b03811161015e57602090601f01601f19160190565b0190565b90826000939282370152565b909291926101ba6101b582610179565b610163565b938185526020850190828401116101d45761017792610199565b600080fd5b9080601f830112156101d4578160206101f4933591016101a5565b90565b906020828203126101d45781356001600160401b0381116101d4576101f492016101d9565b346101d45761023461022f3660046101f7565b612392565b604051005b0390f35b60005b8381106102505750506000910152565b8181015183820152602001610240565b61019561027892602092610272815190565b94859290565b9384910161023d565b9052565b6102956101959160209493610260565b918252565b6102af6102a660405190565b92839283610285565b03902090565b6101f49161029a565b6101f4916008021c5b60ff1690565b906101f491546102be565b6101f4906102ea6003916000926102b5565b6102cd565b346101d45761023961030a6103053660046101f7565b6102d8565b60405191829182901515815260200190565b9190916060818403126101d4576103336060610163565b9281356001600160401b0381116101d457816103509184016101d9565b845260208201356001600160401b0381116101d457816103719184016101d9565b602085015260408201356001600160401b0381116101d45761039392016101d9565b6040830152565b805b036101d457565b905035906101778261039a565b6001600160a01b031690565b6001600160a01b03811661039c565b90503590610177826103bc565b63ffffffff811661039c565b90503590610177826103d8565b9190916080818403126101d45761044a61040b6080610163565b93600061041882856103a3565b90860152602061042a828286016103cb565b90860152604061043c828286016103e4565b9086015260608093016103e4565b90830152565b6001600160401b03811161015e5760208091020190565b9291906104766101b582610450565b93818552602080860192028101918383116101d45781905b83821061049c575050505050565b81356001600160401b0381116101d4576020916104bc87849387016101d9565b81520191019061048e565b9080601f830112156101d4578160206101f493359101610467565b91909160a0818403126101d4576104f96040610163565b92600061050682846103f1565b9085015260808201356001600160401b0381116101d45761052792016104c7565b6020830152565b9190916040818403126101d4576105456040610163565b9281356001600160401b0381116101d4578161056291840161031c565b845260208201356001600160401b0381116101d45761052792016104e2565b906020828203126101d45781356001600160401b0381116101d4576101f4920161052e565b346101d45761023961030a6105bc366004610581565b6128f5565b906020828203126101d4576101f4916103a3565b634e487b7160e01b600052603260045260246000fd5b805482101561060e57610605600191600052602060002090565b91020190600090565b6105d5565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561065f575b602083101461065a57565b610629565b91607f169161064f565b8054600093929161068661067c8361063f565b8085529360200190565b91600181169081156106d8575060011461069f57505050565b6106b29192939450600052602060002090565b916000925b8184106106c45750500190565b8054848401526020909301926001016106b7565b92949550505060ff1916825215156020020190565b906101f491610669565b906101776107119261070860405190565b938480926106ed565b038361013d565b90600010610729576101f4906106f7565b610613565b6004600061073a825490565b83101561075557506101f49161074f916105eb565b90610718565b80fd5b6107796107826020936101959361076d815190565b80835293849260200190565b9586910161023d565b601f01601f191690565b60208082526101f492910190610758565b346101d4576102396107b86107b33660046105c1565b61072e565b6040515b9182918261078c565b906020828203126101d4576101f4916103cb565b346101d4576102346107ec3660046107c5565b611d4f565b6101f4916008021c6001600160a01b031690565b906101f491546107f1565b6002600061081c825490565b83101561075557506101f491610831916105eb565b90610805565b346101d45761023961085261084d3660046105c1565b610810565b6040515b918291826001600160a01b03909116815260200190565b60009103126101d457565b346101d45761088836600461086d565b610234610cee565b346101d4576108a036600461086d565b6102397f0000000000000000000000000000000000000000000000000000000000000000610852565b9291906108d86101b582610450565b93818552602080860192028101918383116101d45781905b8382106108fe575050505050565b81356001600160401b0381116101d45760209161091e878493870161052e565b8152019101906108f0565b9080601f830112156101d4578160206101f4933591016108c9565b906020828203126101d45781356001600160401b0381116101d4576101f49201610929565b906101f49060208061098a6040840160008701518582036000870152610758565b940151910152565b906101f491610969565b906109b26109a8835190565b8083529160200190565b90816109c46020830284019460200190565b926000915b8383106109d857505050505090565b909192939460206109fb6109f483856001950387528951610992565b9760200190565b93019301919392906109c9565b60208082526101f49291019061099c565b346101d457610239610a34610a2f366004610944565b610fed565b60405191829182610a08565b346101d457610a5036600461086d565b610239610852610cac565b90610a7b610a74610a6a845190565b8084529260200190565b9260200190565b9060005b818110610a8c5750505090565b909192610ab2610aab60019286516001600160a01b0316815260200190565b9460200190565b929101610a7f565b60208082526101f492910190610a5b565b346101d457610adb36600461086d565b610239610ae66133e7565b60405191829182610aba565b6101f4906103b0906001600160a01b031682565b6101f490610af2565b6101f490610b06565b61028190610b0f565b6020810192916101779190610b18565b346101d457610b4136600461086d565b604051806102397f000000000000000000000000000000000000000000000000000000000000000082610b21565b346101d457610234610b823660046101f7565b6122ce565b906101f491610758565b90610b9d6109a8835190565b9081610baf6020830284019460200190565b926000915b838310610bc357505050505090565b90919293946020610bdf6109f483856001950387528951610b87565b9301930191939290610bb4565b60208082526101f492910190610b91565b346101d457610c0d36600461086d565b610239610c1861344e565b60405191829182610bec565b346101d457610234610c373660046107c5565b611e51565b346101d457610234610c4f3660046107c5565b610e05565b90610c5e90610b0f565b600052602052604060002090565b6101f4906102ea600191600092610c54565b346101d45761023961030a610c943660046107c5565b610c6c565b6101f4906103b0565b6101f49054610c99565b6101f46000610ca2565b610cbe610d4a565b610177610cdc565b6103b06101f46101f49290565b6101f490610cc6565b610177610ce96000610cd3565b610e3e565b610177610cb6565b15610cfd57565b60405162461bcd60e51b815280610d46600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b610177610d55610cac565b610d6e610d61336103b0565b916001600160a01b031690565b14610cf6565b61017790610d80610d4a565b610de0565b15610d8c57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61017790610ce9610df46103b06000610cd3565b6001600160a01b0383161415610d85565b61017790610d74565b906001600160a01b03905b9181191691161790565b90610e336101f4610e3a92610b0f565b8254610e0e565b9055565b610e486000610ca2565b90610e54816000610e23565b610e87610e817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610b0f565b91610b0f565b91610e9160405190565b600090a3565b15610e9e57565b60405162461bcd60e51b815260206004820152601660248201527513db9b1e481c9959da5cdd1c9e4818d85b8818d85b1b60521b6044820152606490fd5b906102956101b583610450565b6101f46040610163565b610efb610ee9565b906060825260006020830152565b6101f4610ef3565b60005b828110610f2057505050565b602090610f2b610f09565b8184015201610f14565b90610177610f4b610f4584610edc565b93610450565b601f190160208401610f11565b6101f46101f46101f49290565b634e487b7160e01b600052601160045260246000fd5b6000198114610f8a5760010190565b610f65565b90610f98825190565b81101561060e576020809102010190565b15610fb057565b60405162461bcd60e51b815260206004820152601560248201527409cde40ecc2d8d2c840e0e4deecd2c8cae490c2e6d605b1b6044820152606490fd5b9061102a336110246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610d61565b14610e97565b61103a611035835190565b610f35565b916000908361104883610f58565b6110536101f4845190565b8110156110de578061109e6110be6110ac6110996110a760208061107a6110d9998c610f8f565b51611084816128f5565b5061108e81611221565b999199969096613458565b610fa9565b01510151613550565b6113f1565b6105276110b7610ee9565b9389850152565b6110c88289610f8f565b526110d38188610f8f565b50610f7b565b611048565b5093505050565b6102c76101f46101f49290565b6101f460056110e5565b9092919261110c6101b582610179565b938185526020850190828401116101d4576101779261023d565b9080601f830112156101d45781516101f4926020016110fc565b92919061114f6101b582610450565b93818552602080860192028101918383116101d45781905b838210611175575050505050565b81516001600160401b0381116101d4576020916111958784938701611126565b815201910190611167565b9080601f830112156101d45781516101f492602001611140565b906020828203126101d45781516001600160401b0381116101d4576101f492016111a0565b60409061120d6112016101779597969460608401908482036000860152610758565b60ff9097166020830152565b019015159052565b6040513d6000823e3d90fd5b5160400151735B8F92B8afA5Db7078703294D646908F0fc00D8791634be6d4f89160009061124d6110f2565b9461126e6001956112798761126160405190565b998a968795869560e01b90565b8552600485016111df565b03915af49283156112f2576000936112cf575b506112c86112b66112b06112a96112a36000610f58565b87610f8f565b5194610f58565b85610f8f565b51936112c26002610f58565b90610f8f565b5191929190565b6112eb91933d8091833e6112e3818361013d565b8101906111ba565b913861128c565b611215565b6001600160401b03811161015e5760200290565b6101b56101f4916112f7565b60005b82811061132657505050565b60608282015260200161131a565b9061017761134a6113448461130b565b936112f7565b83611317565b6101f46006611334565b90611363825190565b81101561060e570160200190565b61138461137e6101f49290565b60f81b90565b6001600160f81b03191690565b90600681101561060e576020020190565b91908201809211610f8a57565b156113b657565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606490fd5b906000916113fd611350565b8390600061140a81610f58565b846114166101f4825190565b82101561150a578161143961142b828461135a565b516001600160f81b03191690565b611454611446602d611371565b916001600160f81b03191690565b149182156114e7575b82156114c3575b5050611479575b61147490610f7b565b61140a565b9295836114869186611b86565b6114908784611391565b5261149b8683611391565b506114746114bb6114b56114af6001610f58565b866113a2565b97610f7b565b93905061146b565b6114d292509061142b9161135a565b6114df6114466054611371565b148138611464565b91506114f661142b828461135a565b611503611446603a611371565b149161145d565b5050929161152f61155c92936101f496976115296115258390565b5190565b91611b86565b6115398285611391565b526115448184611391565b506115566115526005610f58565b9190565b146113af565b61158261157b61157461156e85610f58565b84611391565b5193610f58565b8093611905565b9061159a8361159461156e6001610f58565b51611905565b6115b1846115946115ab6002610f58565b85611391565b906115e1856115946115d0826115946115ca6003610f58565b89611391565b956115db6004610f58565b90611391565b9361161b565b6101f462015180610f58565b81810292918115918404141715610f8a57565b6101f4610e10610f58565b6101f4603c610f58565b61166a9361165b6116526116446101f499989661165b966116619661163e600090565b50611712565b61164c6115e7565b906115f3565b9161164c611606565b906113a2565b9161164c611611565b6113a2565b156101d457565b91908083039260009091128015828513169184121617610f8a57565b919082810192600013801591841291821691151617610f8a57565b634e487b7160e01b600052601260045260246000fd5b81156116de57600160ff1b8114600019831416610f8a570590565b6116ad565b8181029291600160ff1b81146000831216610f8a578184051490151715610f8a57565b6101f462253d8c610f58565b61171d6107b2610f58565b8110156117299061166f565b61173290610f58565b9061173c90610f58565b9161174690610f58565b611751617d4b610f58565b61175a91611676565b906105b56117696112c0610f58565b6117739083611692565b600e9161177f83610f58565b6117899087611676565b91600c9261179684610f58565b61179f916116c3565b6117a891611692565b906117b290610f58565b906117bc916116e3565b936004946117c986610f58565b6117d2916116c3565b6117db91611692565b61016f6117e86002610f58565b6117f29088611676565b6117fb85610f58565b6118059089611676565b61180e85610f58565b611817916116c3565b61182085610f58565b611829916116e3565b61183291611676565b9061183c90610f58565b90611846916116e3565b61184f83610f58565b611858916116c3565b61186191611692565b94600393611870611324610f58565b61187991611692565b9261188390610f58565b61188c91611676565b9061189690610f58565b61189f916116c3565b6118a891611692565b6118b26064610f58565b6118bb916116c3565b906118c590610f58565b906118cf916116e3565b906118d990610f58565b6118e2916116c3565b6118eb91611676565b6118f3611706565b6118fc91611676565b6101f490610f58565b6101f49190611914602e611371565b90611a04565b6102c76101f46101f49260ff1690565b6101f49060f81c61191a565b6101f46101f46101f49260ff1690565b91908203918211610f8a57565b1561195a57565b60405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606490fd5b156119a657565b60405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608490fd5b604d8111610f8a57600a0a90565b92600091611a1183610f58565b808493815b611a216101f48a5190565b811015611b22578589611a3761142b848361135a565b603090611a4661144683611371565b101580611b00575b611ab6575b5050611aa6575b611a6761142b828b61135a565b611a7a6001600160f81b03198716611446565b14611a8e575b611a8990610f7b565b611a16565b94611a9e90151587151514611953565b600194611a80565b92611ab090610f7b565b92611a5a565b61165b90611af2611aec611ae7611ae261142b89611adc611af89a9d61164c600a610f58565b9861135a565b61192a565b611936565b91610f58565b90611946565b928938611a53565b50611b0e61142b858461135a565b611b1b6114466039611371565b1115611a4e565b509650935061164c9250611b4c91506101f494611b47611b3f8290565b83111561199f565b611946565b6119f6565b906102956101b583610179565b369037565b90610177611b79611b7384611b51565b93610179565b601f190160208401611b5e565b909290611b9b611b968585611946565b611b63565b91845b845b811015611be057611bd981611bbb61142b611ba0948761135a565b611bd3611bc88a84611946565b9160001a918861135a565b53610f7b565b9050611b9e565b509350506101f4915090565b61017790611bf8610d4a565b611cdc565b6101f4906102c7565b6101f49054611bfd565b15611c1757565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320697320616c72656164792061207769746e657373000000006044820152606490fd5b9060ff90610e19565b90611c756101f4610e3a92151590565b8254611c5c565b916001600160a01b0360089290920291821b911b610e19565b921b90565b9190611cab6101f4610e3a93610b0f565b908354611c7c565b90815491600160401b83101561015e5782611cd6916001610177950181556105eb565b90611c9a565b611d116001611d02611cfd611cf9611cf48685610c54565b611c06565b1590565b611c10565b611d0c8382610c54565b611c65565b611d1c816002611cb3565b611d4a7ff5944521c155e80db583372b9992336b6616b14dfb924a5cf6ef97b256d280349161085660405190565b0390a1565b61017790611bec565b61017790611d64610d4a565b611dee565b15611d7057565b60405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f742061207769746e65737300000000000000006044820152606490fd5b91906008610e19910291611c9560ff841b90565b9190611dda6101f4610e3a93151590565b908354611db5565b61017791600091611dc9565b611e186000611e13836001611e0e611e09611cf48484610c54565b611d69565b610c54565b611de2565b611e23816002611f32565b611d4a7f8b5785dce93ca82765b1cc25cedcda1b501288cb23a1fd171c0091d83900f9bd9161085660405190565b61017790611d58565b90611e75611e69610a6a845490565b92600052602060002090565b9060005b818110611e865750505090565b909192611eb3611eac600192611e9b87610ca2565b6001600160a01b0316815260200190565b9460010190565b929101611e79565b906101f491611e5a565b9061017761071192611ed660405190565b93848092611ebb565b6101f490611ec5565b634e487b7160e01b600052603160045260246000fd5b61017791600091611c9a565b80548015611f2d576000190190611f2a611f2483836105eb565b90611efe565b55565b611ee8565b611f47611f4e92611f4283611edf565b611fe5565b9092901590565b15611f905760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b61017791611fa9611f9f835490565b611af26001610f58565b90818103611fb9575b5050611f0a565b611cd6611fcc610831611fd394866105eb565b91846105eb565b3880611fb2565b6101f4600019610f58565b91908251926000611ff581610f58565b855b81101561204c5761201861200b8285610f8f565b516001600160a01b031690565b61202a6001600160a01b038616610d61565b146120425761203b611ff791610f7b565b9050611ff5565b9450505050600190565b5093505050611552611fda565b61017790612065610d4a565b61226c565b1561207157565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9160001960089290920291821b911b610e19565b91906120db6101f4610e3a93610f58565b9083546120b6565b610177916000916120ca565b8181106120fa575050565b8061210860006001936120e3565b016120ef565b9190601f811161211d57505050565b61212f61017793600052602060002090565b906020601f840181900483019310612152575b6020601f909101045b01906120ef565b9091508190612142565b600019600883021c1916906002021790565b90612177815190565b906001600160401b03821161015e5761219a82612194855461063f565b8561210e565b602090601f83116001146121c857610e3a9291600091836121bd575b505061215c565b0151905038806121b6565b601f198316916121dd85600052602060002090565b9260005b81811061221c57509160029391856001969410612202575b50505002019055565b01516000196008601f8516021c19165b90553880806121f9565b919360206001819287870151815501950192016121e1565b9190610729576101779161216e565b90815491600160401b83101561015e5782612266916001610177950181556105eb565b90612234565b6122956003612289612284611cf9611cf486856102b5565b61206a565b611d0c836001926102b5565b6122a0816004612243565b611d4a7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096916107bc60405190565b61017790612059565b610177906122e3610d4a565b612334565b156122ef57565b60405162461bcd60e51b815260206004820152601760248201527f50726f76696465722068617368206e6f7420666f756e640000000000000000006044820152606490fd5b6123596000611e1383600361235461234f611cf484846102b5565b6122e8565b6102b5565b6123648160046126aa565b611d4a7f6f594b4b4f0580c66aabba75218163a99fa1fe330a171cc9e2bfd8e167db22f8916107bc60405190565b610177906122d7565b6101f4906106f7565b906123ad825490565b6123b681610edc565b926123ca6020850191600052602060002090565b6000915b8383106123db5750505050565b6001602081926123ea8561239b565b8152019201920191906123ce565b6101f4906123a4565b6101f4905461063f565b908082146124da5761241c81612401565b906001600160401b03821161015e5761243982612194855461063f565b600090601f831160011461246657610e3a92916000918361245b57505061215c565b0154905038806121b6565b9061247b601f19841692600052602060002090565b9061248b85600052602060002090565b92815b8181106124c2575091600293918560019694106124ae5750505002019055565b01546000196008601f8516021c1916612212565b9193600180602092878701548155019501920161248e565b5050565b9190610729576101779161240b565b9061250090600019906020036008021c90565b8154169055565b9060009161252561251d82600052602060002090565b92835461215c565b905555565b919290602082101561258257601f841160011461254c57610e3a92935061215c565b509061257d61017793600161257461256985600052602060002090565b92601f602091010490565b820191016120ef565b612507565b506125bb8293612599600194600052602060002090565b61214b6020601f860104820192601f8616806125c3575b50601f602091010490565b600202179055565b6125cf908886036124ed565b386125b0565b929091600160401b821161015e576020111561261c5760208110156125fd57610e3a9161215c565b60019160ff191661261384600052602060002090565b55600202019055565b60019150600202019055565b9081546126348161063f565b9081831161265d575b81831061264b575b50505050565b6126549361252a565b38808080612645565b612669838383876125d5565b61263d565b600061017791612628565b90600003610729576101779061266e565b80548015611f2d576000190190611f2a6126a483836105eb565b90612679565b611f476126bf926126ba836123f8565b612744565b156127005760405162461bcd60e51b815260206004820152601460248201527329ba3934b733903737ba1034b71030b93930bc9760611b6044820152606490fd5b6101779161270f611f9f835490565b9081810361271f575b505061268a565b61273761272f61273d93856105eb565b5091846105eb565b906124de565b3880612718565b9190825192600061275481610f58565b855b8110156127ac5761276a6115258285610f8f565b61277c612775825190565b9160200190565b20612794611552865b612790612775825190565b2090565b14612042576127a561275691610f7b565b9050612754565b509350505081199190565b156127be57565b60405162461bcd60e51b815260206004820152600d60248201526c4e6f207369676e61747572657360981b6044820152606490fd5b156127fa57565b60405162461bcd60e51b815260206004820152601c60248201527f436c61696d496e666f206861736820646f65736e2774206d61746368000000006044820152606490fd5b1561284657565b60405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207369676e617475726573206e6f7420657175616c20746044820152746f206e756d626572206f66207769746e657373657360581b6064820152608490fd5b156128b057565b60405162461bcd60e51b815260206004820152601960248201527f5369676e6174757265206e6f7420617070726f707269617465000000000000006044820152606490fd5b906020820190815160200151612909905190565b9160009261291684610f58565b10612920906127b7565b828080808451015196845160200151612937610ee9565b98838a01906129439152565b6020890152015161295390612efe565b925101510161296190611525565b1461296b906127f3565b61297483612a5b565b805191600292612982845490565b1461298c9061283f565b61299584610f58565b935b6129a66101f460208801515190565b851015612a405780956129b882610f58565b6129c36101f4875490565b811015612a28576129d761200b8887610f8f565b6129ea610d616103b0610831858b6105eb565b146129fd576129f890610f7b565b6129b8565b50946129a69196506020612a1d6101f492612a1860016128a9565b610f7b565b969792505050612997565b50946020612a1d6101f492612a186129a6959a6128a9565b509350505050600190565b90610177611b79610f4584610edc565b6020612a6a6000830151612b2b565b910190612a7e612a7983515190565b612a4b565b91612a896000610f58565b612a956101f483515190565b811015612ad55780612a18612ab8612ab1612ad0948651610f8f565b5186612c02565b612ac28388610f8f565b906001600160a01b03169052565b612a89565b50505090565b610195816020939052565b6101f46101f46101f49263ffffffff1690565b92612b25612b18612b2594612b25612b186101f49998612b1897610260565b600560f91b815260010190565b90610260565b6101f4612b67612b3a83611525565b612b62612b4660405190565b8092612b56602083019182612adb565b9081038252038261013d565b613130565b612b83612b7e60208501516001600160a01b031690565b612fb9565b90612b56612bbf612bae612ba96060612bb3612bae612ba960408c015163ffffffff1690565b612ae6565b61329e565b98015163ffffffff1690565b604051958694602086019485612af9565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526101f49291612b2591601a0182565b90612b56612c326101f493612c15600090565b50612c21612bae825190565b604051938492602084019283612bd0565b612c3d612775825190565b206101f491612c4b91612dc1565b919091612c82565b634e487b7160e01b600052602160045260246000fd5b60051115612c7357565b612c53565b9061017782612c69565b612c8c6000612c78565b612c9582612c78565b03612c9d5750565b612ca76001612c78565b612cb082612c78565b03612cfa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b612d046002612c78565b612d0d82612c78565b03612d575760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b612d6a612d646003612c78565b91612c78565b14612d7157565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b908051612dd16115526041610f58565b03612df757612df3916020820151906060604084015193015160001a90612e36565b9091565b5050612e036000610cd3565b90600290565b612e3261017794610393606094989795612e28608086019a6000870152565b60ff166020850152565b0152565b919291612e42836118fc565b612e6e6115527f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610f58565b11612ed257612e8e600093602095612e8560405190565b94859485612e09565b838052039060015afa156112f25760005190600091612eac83610cd3565b6001600160a01b0381166001600160a01b03831614612eca57509190565b925050600190565b50505050612ee06000610cd3565b90600390565b6101f49392612b25612b18612b1893612b2595610260565b8051602082015160409283015192516127859290612b5690948593602085019384612ee6565b6101f49081906001600160a01b031681565b60ff8111610f8a5760020a90565b905b9081156116de570490565b61138461137e6101f49260ff1690565b612f469060ff165b9160ff1690565b612f7c9060ff16612f69565b029060ff8216918203610f8a57565b612f979060ff16612f69565b90039060ff8211610f8a57565b61060f60f31b81526101f49190600201612b25565b90612fc7611b966028610f58565b600092612fd384610f58565b612fdd6014610f58565b8110156130d45780613037611bd36130c56130bb6130cf956130376130b58c8b6130af613051611ae261304c8f61301e61301961304792610b06565b612f24565b61304161303c6008613037611aec8f611b476013610f58565b6115f3565b612f36565b90612f44565b6110e5565b612f51565b9261309a61309461304c60109661308e61307661304c6130708b6110e5565b84612f61565b986130896130838b61192a565b916110e5565b612f70565b90612f8b565b9461323a565b6130a78860029d8e610f58565b911a9261135a565b5361323a565b95610f58565b61165b6001610f58565b91881a918661135a565b612fd3565b50506101f49192506101f46130e860405190565b8092612b56602083019182612fa4565b6131026010611b51565b6f181899199a1a9b1b9c1cb0b131b232b360811b602082015290565b6101f46130f8565b81156116de570690565b90815191613146611b9660029461164c86610f58565b9061314f61311e565b60009161315b83610f58565b6131666101f4835190565b81101561320c57806131a661142b6131a061318a611ae261142b613207978961135a565b61319b613195895190565b91611936565b612f44565b8661135a565b6131c56131bb6131b58b610f58565b846115f3565b91871a918861135a565b536131ef61142b6131a06131df611ae261142b868961135a565b6131ea613195895190565b613126565b611bd36131bb6130bb6132018c610f58565b856115f3565b61315b565b505050506101f49192506101f46130e860405190565b61322e9060ff16612f69565b019060ff8211610f8a57565b6132439061192a565b61324d600a6110e5565b60ff8216101561326e5761304c6101f49161326860306110e5565b90613222565b61304c6101f49161326860576110e5565b6132896001611b51565b600360fc1b602082015290565b6101f461327f565b6000916132aa83610f58565b821461337257908060005b6132be85610f58565b83146132e1576132d06132db91610f7b565b92613041600a610f58565b916132b5565b91506132ec82611b63565b915b6132f785610f58565b82146133675761330e61336191611af26001610f58565b91613041600a8461335b61335261304c603061334d61308361304761334761333e6133388b610f58565b8d612f44565b61164c8b610f58565b8b611946565b613222565b8a1a918861135a565b53610f58565b906132ee565b50506101f491925090565b9150506101f4613296565b9061338c611e69610a6a845490565b9060005b81811061339d5750505090565b9091926133b2611eac600192611e9b87610ca2565b929101613390565b906101f49161337d565b90610177610711926133d560405190565b938480926133ba565b6101f4906133c4565b6101f460026133de565b906133fa825490565b61340381610edc565b926134176020850191600052602060002090565b6000915b8383106134285750505050565b6001602081926134378561239b565b81520192019201919061341b565b6101f4906133f1565b6101f46004613445565b611cf46101f491613467600090565b5060036102b5565b9061347b6109a8835190565b908161348d6020830284019460200190565b926000915b8383106134a157505050505090565b909192939460206134bd6109f483856001950387528951610b87565b9301930191939290613492565b60208082526101f49291019061346f565b80151561039c565b90505190610177826134db565b906020828203126101d4576101f4916134e3565b1561350b57565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b61356c61355c60405190565b8092612b566020830191826134ca565b613577612775825190565b206135a17f0000000000000000000000000000000000000000000000000000000000000000610b0f565b9063169394bb6135ba6135b360405190565b9160e01b90565b815260048101829052602081602481865afa9081156112f2576135ec916135e79160009161365157501590565b613504565b635bd4df3290823b156101d4576136289261361a6000809461360d60405190565b9687958694859360e01b90565b835260048301526024820190565b03925af180156112f2576136395750565b610177906000613649818361013d565b81019061086d565b611cf9915060203d8111613672575b61366a818361013d565b8101906134f0565b503d61366056fea2646970667358221220ac32ca16a78f612ec68240d59214076e1784464c21ff8fabfeff4b46fd239e1c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80631cba9bed146101225780632ca6927d1461011d57806350262c001461011857806357c6e12a1461011357806359e26be11461010e578063670a8cb714610109578063715018a6146101045780637b103999146100ff5780637de24fcf146100fa5780638da5cb5b146100f557806396d195bd146100f0578063b870676c146100eb578063bd6e7741146100e6578063c2107e73146100e1578063ee2f13cd146100dc578063f2fde38b146100d75763fa7643f4036101d457610c7e565b610c3c565b610c24565b610bfd565b610b6f565b610b31565b610acb565b610a40565b610a19565b610890565b610878565b610837565b6107d9565b61079d565b6105a6565b6102ef565b61021c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761015e57604052565b610127565b9061017761017060405190565b928361013d565b565b6001600160401b03811161015e57602090601f01601f19160190565b0190565b90826000939282370152565b909291926101ba6101b582610179565b610163565b938185526020850190828401116101d45761017792610199565b600080fd5b9080601f830112156101d4578160206101f4933591016101a5565b90565b906020828203126101d45781356001600160401b0381116101d4576101f492016101d9565b346101d45761023461022f3660046101f7565b612392565b604051005b0390f35b60005b8381106102505750506000910152565b8181015183820152602001610240565b61019561027892602092610272815190565b94859290565b9384910161023d565b9052565b6102956101959160209493610260565b918252565b6102af6102a660405190565b92839283610285565b03902090565b6101f49161029a565b6101f4916008021c5b60ff1690565b906101f491546102be565b6101f4906102ea6003916000926102b5565b6102cd565b346101d45761023961030a6103053660046101f7565b6102d8565b60405191829182901515815260200190565b9190916060818403126101d4576103336060610163565b9281356001600160401b0381116101d457816103509184016101d9565b845260208201356001600160401b0381116101d457816103719184016101d9565b602085015260408201356001600160401b0381116101d45761039392016101d9565b6040830152565b805b036101d457565b905035906101778261039a565b6001600160a01b031690565b6001600160a01b03811661039c565b90503590610177826103bc565b63ffffffff811661039c565b90503590610177826103d8565b9190916080818403126101d45761044a61040b6080610163565b93600061041882856103a3565b90860152602061042a828286016103cb565b90860152604061043c828286016103e4565b9086015260608093016103e4565b90830152565b6001600160401b03811161015e5760208091020190565b9291906104766101b582610450565b93818552602080860192028101918383116101d45781905b83821061049c575050505050565b81356001600160401b0381116101d4576020916104bc87849387016101d9565b81520191019061048e565b9080601f830112156101d4578160206101f493359101610467565b91909160a0818403126101d4576104f96040610163565b92600061050682846103f1565b9085015260808201356001600160401b0381116101d45761052792016104c7565b6020830152565b9190916040818403126101d4576105456040610163565b9281356001600160401b0381116101d4578161056291840161031c565b845260208201356001600160401b0381116101d45761052792016104e2565b906020828203126101d45781356001600160401b0381116101d4576101f4920161052e565b346101d45761023961030a6105bc366004610581565b6128f5565b906020828203126101d4576101f4916103a3565b634e487b7160e01b600052603260045260246000fd5b805482101561060e57610605600191600052602060002090565b91020190600090565b6105d5565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561065f575b602083101461065a57565b610629565b91607f169161064f565b8054600093929161068661067c8361063f565b8085529360200190565b91600181169081156106d8575060011461069f57505050565b6106b29192939450600052602060002090565b916000925b8184106106c45750500190565b8054848401526020909301926001016106b7565b92949550505060ff1916825215156020020190565b906101f491610669565b906101776107119261070860405190565b938480926106ed565b038361013d565b90600010610729576101f4906106f7565b610613565b6004600061073a825490565b83101561075557506101f49161074f916105eb565b90610718565b80fd5b6107796107826020936101959361076d815190565b80835293849260200190565b9586910161023d565b601f01601f191690565b60208082526101f492910190610758565b346101d4576102396107b86107b33660046105c1565b61072e565b6040515b9182918261078c565b906020828203126101d4576101f4916103cb565b346101d4576102346107ec3660046107c5565b611d4f565b6101f4916008021c6001600160a01b031690565b906101f491546107f1565b6002600061081c825490565b83101561075557506101f491610831916105eb565b90610805565b346101d45761023961085261084d3660046105c1565b610810565b6040515b918291826001600160a01b03909116815260200190565b60009103126101d457565b346101d45761088836600461086d565b610234610cee565b346101d4576108a036600461086d565b6102397f0000000000000000000000000000000000000000000000000000000000000000610852565b9291906108d86101b582610450565b93818552602080860192028101918383116101d45781905b8382106108fe575050505050565b81356001600160401b0381116101d45760209161091e878493870161052e565b8152019101906108f0565b9080601f830112156101d4578160206101f4933591016108c9565b906020828203126101d45781356001600160401b0381116101d4576101f49201610929565b906101f49060208061098a6040840160008701518582036000870152610758565b940151910152565b906101f491610969565b906109b26109a8835190565b8083529160200190565b90816109c46020830284019460200190565b926000915b8383106109d857505050505090565b909192939460206109fb6109f483856001950387528951610992565b9760200190565b93019301919392906109c9565b60208082526101f49291019061099c565b346101d457610239610a34610a2f366004610944565b610fed565b60405191829182610a08565b346101d457610a5036600461086d565b610239610852610cac565b90610a7b610a74610a6a845190565b8084529260200190565b9260200190565b9060005b818110610a8c5750505090565b909192610ab2610aab60019286516001600160a01b0316815260200190565b9460200190565b929101610a7f565b60208082526101f492910190610a5b565b346101d457610adb36600461086d565b610239610ae66133e7565b60405191829182610aba565b6101f4906103b0906001600160a01b031682565b6101f490610af2565b6101f490610b06565b61028190610b0f565b6020810192916101779190610b18565b346101d457610b4136600461086d565b604051806102397f000000000000000000000000000000000000000000000000000000000000000082610b21565b346101d457610234610b823660046101f7565b6122ce565b906101f491610758565b90610b9d6109a8835190565b9081610baf6020830284019460200190565b926000915b838310610bc357505050505090565b90919293946020610bdf6109f483856001950387528951610b87565b9301930191939290610bb4565b60208082526101f492910190610b91565b346101d457610c0d36600461086d565b610239610c1861344e565b60405191829182610bec565b346101d457610234610c373660046107c5565b611e51565b346101d457610234610c4f3660046107c5565b610e05565b90610c5e90610b0f565b600052602052604060002090565b6101f4906102ea600191600092610c54565b346101d45761023961030a610c943660046107c5565b610c6c565b6101f4906103b0565b6101f49054610c99565b6101f46000610ca2565b610cbe610d4a565b610177610cdc565b6103b06101f46101f49290565b6101f490610cc6565b610177610ce96000610cd3565b610e3e565b610177610cb6565b15610cfd57565b60405162461bcd60e51b815280610d46600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b610177610d55610cac565b610d6e610d61336103b0565b916001600160a01b031690565b14610cf6565b61017790610d80610d4a565b610de0565b15610d8c57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61017790610ce9610df46103b06000610cd3565b6001600160a01b0383161415610d85565b61017790610d74565b906001600160a01b03905b9181191691161790565b90610e336101f4610e3a92610b0f565b8254610e0e565b9055565b610e486000610ca2565b90610e54816000610e23565b610e87610e817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610b0f565b91610b0f565b91610e9160405190565b600090a3565b15610e9e57565b60405162461bcd60e51b815260206004820152601660248201527513db9b1e481c9959da5cdd1c9e4818d85b8818d85b1b60521b6044820152606490fd5b906102956101b583610450565b6101f46040610163565b610efb610ee9565b906060825260006020830152565b6101f4610ef3565b60005b828110610f2057505050565b602090610f2b610f09565b8184015201610f14565b90610177610f4b610f4584610edc565b93610450565b601f190160208401610f11565b6101f46101f46101f49290565b634e487b7160e01b600052601160045260246000fd5b6000198114610f8a5760010190565b610f65565b90610f98825190565b81101561060e576020809102010190565b15610fb057565b60405162461bcd60e51b815260206004820152601560248201527409cde40ecc2d8d2c840e0e4deecd2c8cae490c2e6d605b1b6044820152606490fd5b9061102a336110246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610d61565b14610e97565b61103a611035835190565b610f35565b916000908361104883610f58565b6110536101f4845190565b8110156110de578061109e6110be6110ac6110996110a760208061107a6110d9998c610f8f565b51611084816128f5565b5061108e81611221565b999199969096613458565b610fa9565b01510151613550565b6113f1565b6105276110b7610ee9565b9389850152565b6110c88289610f8f565b526110d38188610f8f565b50610f7b565b611048565b5093505050565b6102c76101f46101f49290565b6101f460056110e5565b9092919261110c6101b582610179565b938185526020850190828401116101d4576101779261023d565b9080601f830112156101d45781516101f4926020016110fc565b92919061114f6101b582610450565b93818552602080860192028101918383116101d45781905b838210611175575050505050565b81516001600160401b0381116101d4576020916111958784938701611126565b815201910190611167565b9080601f830112156101d45781516101f492602001611140565b906020828203126101d45781516001600160401b0381116101d4576101f492016111a0565b60409061120d6112016101779597969460608401908482036000860152610758565b60ff9097166020830152565b019015159052565b6040513d6000823e3d90fd5b516040015173__$5b71c94e19686701747fb081826a62a8ff$__91634be6d4f89160009061124d6110f2565b9461126e6001956112798761126160405190565b998a968795869560e01b90565b8552600485016111df565b03915af49283156112f2576000936112cf575b506112c86112b66112b06112a96112a36000610f58565b87610f8f565b5194610f58565b85610f8f565b51936112c26002610f58565b90610f8f565b5191929190565b6112eb91933d8091833e6112e3818361013d565b8101906111ba565b913861128c565b611215565b6001600160401b03811161015e5760200290565b6101b56101f4916112f7565b60005b82811061132657505050565b60608282015260200161131a565b9061017761134a6113448461130b565b936112f7565b83611317565b6101f46006611334565b90611363825190565b81101561060e570160200190565b61138461137e6101f49290565b60f81b90565b6001600160f81b03191690565b90600681101561060e576020020190565b91908201809211610f8a57565b156113b657565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606490fd5b906000916113fd611350565b8390600061140a81610f58565b846114166101f4825190565b82101561150a578161143961142b828461135a565b516001600160f81b03191690565b611454611446602d611371565b916001600160f81b03191690565b149182156114e7575b82156114c3575b5050611479575b61147490610f7b565b61140a565b9295836114869186611b86565b6114908784611391565b5261149b8683611391565b506114746114bb6114b56114af6001610f58565b866113a2565b97610f7b565b93905061146b565b6114d292509061142b9161135a565b6114df6114466054611371565b148138611464565b91506114f661142b828461135a565b611503611446603a611371565b149161145d565b5050929161152f61155c92936101f496976115296115258390565b5190565b91611b86565b6115398285611391565b526115448184611391565b506115566115526005610f58565b9190565b146113af565b61158261157b61157461156e85610f58565b84611391565b5193610f58565b8093611905565b9061159a8361159461156e6001610f58565b51611905565b6115b1846115946115ab6002610f58565b85611391565b906115e1856115946115d0826115946115ca6003610f58565b89611391565b956115db6004610f58565b90611391565b9361161b565b6101f462015180610f58565b81810292918115918404141715610f8a57565b6101f4610e10610f58565b6101f4603c610f58565b61166a9361165b6116526116446101f499989661165b966116619661163e600090565b50611712565b61164c6115e7565b906115f3565b9161164c611606565b906113a2565b9161164c611611565b6113a2565b156101d457565b91908083039260009091128015828513169184121617610f8a57565b919082810192600013801591841291821691151617610f8a57565b634e487b7160e01b600052601260045260246000fd5b81156116de57600160ff1b8114600019831416610f8a570590565b6116ad565b8181029291600160ff1b81146000831216610f8a578184051490151715610f8a57565b6101f462253d8c610f58565b61171d6107b2610f58565b8110156117299061166f565b61173290610f58565b9061173c90610f58565b9161174690610f58565b611751617d4b610f58565b61175a91611676565b906105b56117696112c0610f58565b6117739083611692565b600e9161177f83610f58565b6117899087611676565b91600c9261179684610f58565b61179f916116c3565b6117a891611692565b906117b290610f58565b906117bc916116e3565b936004946117c986610f58565b6117d2916116c3565b6117db91611692565b61016f6117e86002610f58565b6117f29088611676565b6117fb85610f58565b6118059089611676565b61180e85610f58565b611817916116c3565b61182085610f58565b611829916116e3565b61183291611676565b9061183c90610f58565b90611846916116e3565b61184f83610f58565b611858916116c3565b61186191611692565b94600393611870611324610f58565b61187991611692565b9261188390610f58565b61188c91611676565b9061189690610f58565b61189f916116c3565b6118a891611692565b6118b26064610f58565b6118bb916116c3565b906118c590610f58565b906118cf916116e3565b906118d990610f58565b6118e2916116c3565b6118eb91611676565b6118f3611706565b6118fc91611676565b6101f490610f58565b6101f49190611914602e611371565b90611a04565b6102c76101f46101f49260ff1690565b6101f49060f81c61191a565b6101f46101f46101f49260ff1690565b91908203918211610f8a57565b1561195a57565b60405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606490fd5b156119a657565b60405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608490fd5b604d8111610f8a57600a0a90565b92600091611a1183610f58565b808493815b611a216101f48a5190565b811015611b22578589611a3761142b848361135a565b603090611a4661144683611371565b101580611b00575b611ab6575b5050611aa6575b611a6761142b828b61135a565b611a7a6001600160f81b03198716611446565b14611a8e575b611a8990610f7b565b611a16565b94611a9e90151587151514611953565b600194611a80565b92611ab090610f7b565b92611a5a565b61165b90611af2611aec611ae7611ae261142b89611adc611af89a9d61164c600a610f58565b9861135a565b61192a565b611936565b91610f58565b90611946565b928938611a53565b50611b0e61142b858461135a565b611b1b6114466039611371565b1115611a4e565b509650935061164c9250611b4c91506101f494611b47611b3f8290565b83111561199f565b611946565b6119f6565b906102956101b583610179565b369037565b90610177611b79611b7384611b51565b93610179565b601f190160208401611b5e565b909290611b9b611b968585611946565b611b63565b91845b845b811015611be057611bd981611bbb61142b611ba0948761135a565b611bd3611bc88a84611946565b9160001a918861135a565b53610f7b565b9050611b9e565b509350506101f4915090565b61017790611bf8610d4a565b611cdc565b6101f4906102c7565b6101f49054611bfd565b15611c1757565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320697320616c72656164792061207769746e657373000000006044820152606490fd5b9060ff90610e19565b90611c756101f4610e3a92151590565b8254611c5c565b916001600160a01b0360089290920291821b911b610e19565b921b90565b9190611cab6101f4610e3a93610b0f565b908354611c7c565b90815491600160401b83101561015e5782611cd6916001610177950181556105eb565b90611c9a565b611d116001611d02611cfd611cf9611cf48685610c54565b611c06565b1590565b611c10565b611d0c8382610c54565b611c65565b611d1c816002611cb3565b611d4a7ff5944521c155e80db583372b9992336b6616b14dfb924a5cf6ef97b256d280349161085660405190565b0390a1565b61017790611bec565b61017790611d64610d4a565b611dee565b15611d7057565b60405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f742061207769746e65737300000000000000006044820152606490fd5b91906008610e19910291611c9560ff841b90565b9190611dda6101f4610e3a93151590565b908354611db5565b61017791600091611dc9565b611e186000611e13836001611e0e611e09611cf48484610c54565b611d69565b610c54565b611de2565b611e23816002611f32565b611d4a7f8b5785dce93ca82765b1cc25cedcda1b501288cb23a1fd171c0091d83900f9bd9161085660405190565b61017790611d58565b90611e75611e69610a6a845490565b92600052602060002090565b9060005b818110611e865750505090565b909192611eb3611eac600192611e9b87610ca2565b6001600160a01b0316815260200190565b9460010190565b929101611e79565b906101f491611e5a565b9061017761071192611ed660405190565b93848092611ebb565b6101f490611ec5565b634e487b7160e01b600052603160045260246000fd5b61017791600091611c9a565b80548015611f2d576000190190611f2a611f2483836105eb565b90611efe565b55565b611ee8565b611f47611f4e92611f4283611edf565b611fe5565b9092901590565b15611f905760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b61017791611fa9611f9f835490565b611af26001610f58565b90818103611fb9575b5050611f0a565b611cd6611fcc610831611fd394866105eb565b91846105eb565b3880611fb2565b6101f4600019610f58565b91908251926000611ff581610f58565b855b81101561204c5761201861200b8285610f8f565b516001600160a01b031690565b61202a6001600160a01b038616610d61565b146120425761203b611ff791610f7b565b9050611ff5565b9450505050600190565b5093505050611552611fda565b61017790612065610d4a565b61226c565b1561207157565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9160001960089290920291821b911b610e19565b91906120db6101f4610e3a93610f58565b9083546120b6565b610177916000916120ca565b8181106120fa575050565b8061210860006001936120e3565b016120ef565b9190601f811161211d57505050565b61212f61017793600052602060002090565b906020601f840181900483019310612152575b6020601f909101045b01906120ef565b9091508190612142565b600019600883021c1916906002021790565b90612177815190565b906001600160401b03821161015e5761219a82612194855461063f565b8561210e565b602090601f83116001146121c857610e3a9291600091836121bd575b505061215c565b0151905038806121b6565b601f198316916121dd85600052602060002090565b9260005b81811061221c57509160029391856001969410612202575b50505002019055565b01516000196008601f8516021c19165b90553880806121f9565b919360206001819287870151815501950192016121e1565b9190610729576101779161216e565b90815491600160401b83101561015e5782612266916001610177950181556105eb565b90612234565b6122956003612289612284611cf9611cf486856102b5565b61206a565b611d0c836001926102b5565b6122a0816004612243565b611d4a7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096916107bc60405190565b61017790612059565b610177906122e3610d4a565b612334565b156122ef57565b60405162461bcd60e51b815260206004820152601760248201527f50726f76696465722068617368206e6f7420666f756e640000000000000000006044820152606490fd5b6123596000611e1383600361235461234f611cf484846102b5565b6122e8565b6102b5565b6123648160046126aa565b611d4a7f6f594b4b4f0580c66aabba75218163a99fa1fe330a171cc9e2bfd8e167db22f8916107bc60405190565b610177906122d7565b6101f4906106f7565b906123ad825490565b6123b681610edc565b926123ca6020850191600052602060002090565b6000915b8383106123db5750505050565b6001602081926123ea8561239b565b8152019201920191906123ce565b6101f4906123a4565b6101f4905461063f565b908082146124da5761241c81612401565b906001600160401b03821161015e5761243982612194855461063f565b600090601f831160011461246657610e3a92916000918361245b57505061215c565b0154905038806121b6565b9061247b601f19841692600052602060002090565b9061248b85600052602060002090565b92815b8181106124c2575091600293918560019694106124ae5750505002019055565b01546000196008601f8516021c1916612212565b9193600180602092878701548155019501920161248e565b5050565b9190610729576101779161240b565b9061250090600019906020036008021c90565b8154169055565b9060009161252561251d82600052602060002090565b92835461215c565b905555565b919290602082101561258257601f841160011461254c57610e3a92935061215c565b509061257d61017793600161257461256985600052602060002090565b92601f602091010490565b820191016120ef565b612507565b506125bb8293612599600194600052602060002090565b61214b6020601f860104820192601f8616806125c3575b50601f602091010490565b600202179055565b6125cf908886036124ed565b386125b0565b929091600160401b821161015e576020111561261c5760208110156125fd57610e3a9161215c565b60019160ff191661261384600052602060002090565b55600202019055565b60019150600202019055565b9081546126348161063f565b9081831161265d575b81831061264b575b50505050565b6126549361252a565b38808080612645565b612669838383876125d5565b61263d565b600061017791612628565b90600003610729576101779061266e565b80548015611f2d576000190190611f2a6126a483836105eb565b90612679565b611f476126bf926126ba836123f8565b612744565b156127005760405162461bcd60e51b815260206004820152601460248201527329ba3934b733903737ba1034b71030b93930bc9760611b6044820152606490fd5b6101779161270f611f9f835490565b9081810361271f575b505061268a565b61273761272f61273d93856105eb565b5091846105eb565b906124de565b3880612718565b9190825192600061275481610f58565b855b8110156127ac5761276a6115258285610f8f565b61277c612775825190565b9160200190565b20612794611552865b612790612775825190565b2090565b14612042576127a561275691610f7b565b9050612754565b509350505081199190565b156127be57565b60405162461bcd60e51b815260206004820152600d60248201526c4e6f207369676e61747572657360981b6044820152606490fd5b156127fa57565b60405162461bcd60e51b815260206004820152601c60248201527f436c61696d496e666f206861736820646f65736e2774206d61746368000000006044820152606490fd5b1561284657565b60405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207369676e617475726573206e6f7420657175616c20746044820152746f206e756d626572206f66207769746e657373657360581b6064820152608490fd5b156128b057565b60405162461bcd60e51b815260206004820152601960248201527f5369676e6174757265206e6f7420617070726f707269617465000000000000006044820152606490fd5b906020820190815160200151612909905190565b9160009261291684610f58565b10612920906127b7565b828080808451015196845160200151612937610ee9565b98838a01906129439152565b6020890152015161295390612efe565b925101510161296190611525565b1461296b906127f3565b61297483612a5b565b805191600292612982845490565b1461298c9061283f565b61299584610f58565b935b6129a66101f460208801515190565b851015612a405780956129b882610f58565b6129c36101f4875490565b811015612a28576129d761200b8887610f8f565b6129ea610d616103b0610831858b6105eb565b146129fd576129f890610f7b565b6129b8565b50946129a69196506020612a1d6101f492612a1860016128a9565b610f7b565b969792505050612997565b50946020612a1d6101f492612a186129a6959a6128a9565b509350505050600190565b90610177611b79610f4584610edc565b6020612a6a6000830151612b2b565b910190612a7e612a7983515190565b612a4b565b91612a896000610f58565b612a956101f483515190565b811015612ad55780612a18612ab8612ab1612ad0948651610f8f565b5186612c02565b612ac28388610f8f565b906001600160a01b03169052565b612a89565b50505090565b610195816020939052565b6101f46101f46101f49263ffffffff1690565b92612b25612b18612b2594612b25612b186101f49998612b1897610260565b600560f91b815260010190565b90610260565b6101f4612b67612b3a83611525565b612b62612b4660405190565b8092612b56602083019182612adb565b9081038252038261013d565b613130565b612b83612b7e60208501516001600160a01b031690565b612fb9565b90612b56612bbf612bae612ba96060612bb3612bae612ba960408c015163ffffffff1690565b612ae6565b61329e565b98015163ffffffff1690565b604051958694602086019485612af9565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526101f49291612b2591601a0182565b90612b56612c326101f493612c15600090565b50612c21612bae825190565b604051938492602084019283612bd0565b612c3d612775825190565b206101f491612c4b91612dc1565b919091612c82565b634e487b7160e01b600052602160045260246000fd5b60051115612c7357565b612c53565b9061017782612c69565b612c8c6000612c78565b612c9582612c78565b03612c9d5750565b612ca76001612c78565b612cb082612c78565b03612cfa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b612d046002612c78565b612d0d82612c78565b03612d575760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b612d6a612d646003612c78565b91612c78565b14612d7157565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b908051612dd16115526041610f58565b03612df757612df3916020820151906060604084015193015160001a90612e36565b9091565b5050612e036000610cd3565b90600290565b612e3261017794610393606094989795612e28608086019a6000870152565b60ff166020850152565b0152565b919291612e42836118fc565b612e6e6115527f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610f58565b11612ed257612e8e600093602095612e8560405190565b94859485612e09565b838052039060015afa156112f25760005190600091612eac83610cd3565b6001600160a01b0381166001600160a01b03831614612eca57509190565b925050600190565b50505050612ee06000610cd3565b90600390565b6101f49392612b25612b18612b1893612b2595610260565b8051602082015160409283015192516127859290612b5690948593602085019384612ee6565b6101f49081906001600160a01b031681565b60ff8111610f8a5760020a90565b905b9081156116de570490565b61138461137e6101f49260ff1690565b612f469060ff165b9160ff1690565b612f7c9060ff16612f69565b029060ff8216918203610f8a57565b612f979060ff16612f69565b90039060ff8211610f8a57565b61060f60f31b81526101f49190600201612b25565b90612fc7611b966028610f58565b600092612fd384610f58565b612fdd6014610f58565b8110156130d45780613037611bd36130c56130bb6130cf956130376130b58c8b6130af613051611ae261304c8f61301e61301961304792610b06565b612f24565b61304161303c6008613037611aec8f611b476013610f58565b6115f3565b612f36565b90612f44565b6110e5565b612f51565b9261309a61309461304c60109661308e61307661304c6130708b6110e5565b84612f61565b986130896130838b61192a565b916110e5565b612f70565b90612f8b565b9461323a565b6130a78860029d8e610f58565b911a9261135a565b5361323a565b95610f58565b61165b6001610f58565b91881a918661135a565b612fd3565b50506101f49192506101f46130e860405190565b8092612b56602083019182612fa4565b6131026010611b51565b6f181899199a1a9b1b9c1cb0b131b232b360811b602082015290565b6101f46130f8565b81156116de570690565b90815191613146611b9660029461164c86610f58565b9061314f61311e565b60009161315b83610f58565b6131666101f4835190565b81101561320c57806131a661142b6131a061318a611ae261142b613207978961135a565b61319b613195895190565b91611936565b612f44565b8661135a565b6131c56131bb6131b58b610f58565b846115f3565b91871a918861135a565b536131ef61142b6131a06131df611ae261142b868961135a565b6131ea613195895190565b613126565b611bd36131bb6130bb6132018c610f58565b856115f3565b61315b565b505050506101f49192506101f46130e860405190565b61322e9060ff16612f69565b019060ff8211610f8a57565b6132439061192a565b61324d600a6110e5565b60ff8216101561326e5761304c6101f49161326860306110e5565b90613222565b61304c6101f49161326860576110e5565b6132896001611b51565b600360fc1b602082015290565b6101f461327f565b6000916132aa83610f58565b821461337257908060005b6132be85610f58565b83146132e1576132d06132db91610f7b565b92613041600a610f58565b916132b5565b91506132ec82611b63565b915b6132f785610f58565b82146133675761330e61336191611af26001610f58565b91613041600a8461335b61335261304c603061334d61308361304761334761333e6133388b610f58565b8d612f44565b61164c8b610f58565b8b611946565b613222565b8a1a918861135a565b53610f58565b906132ee565b50506101f491925090565b9150506101f4613296565b9061338c611e69610a6a845490565b9060005b81811061339d5750505090565b9091926133b2611eac600192611e9b87610ca2565b929101613390565b906101f49161337d565b90610177610711926133d560405190565b938480926133ba565b6101f4906133c4565b6101f460026133de565b906133fa825490565b61340381610edc565b926134176020850191600052602060002090565b6000915b8383106134285750505050565b6001602081926134378561239b565b81520192019201919061341b565b6101f4906133f1565b6101f46004613445565b611cf46101f491613467600090565b5060036102b5565b9061347b6109a8835190565b908161348d6020830284019460200190565b926000915b8383106134a157505050505090565b909192939460206134bd6109f483856001950387528951610b87565b9301930191939290613492565b60208082526101f49291019061346f565b80151561039c565b90505190610177826134db565b906020828203126101d4576101f4916134e3565b1561350b57565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b61356c61355c60405190565b8092612b566020830191826134ca565b613577612775825190565b206135a17f0000000000000000000000000000000000000000000000000000000000000000610b0f565b9063169394bb6135ba6135b360405190565b9160e01b90565b815260048101829052602081602481865afa9081156112f2576135ec916135e79160009161365157501590565b613504565b635bd4df3290823b156101d4576136289261361a6000809461360d60405190565b9687958694859360e01b90565b835260048301526024820190565b03925af180156112f2576136395750565b610177906000613649818361013d565b81019061086d565b611cf9915060203d8111613672575b61366a818361013d565b8101906134f0565b503d61366056fea2646970667358221220ac32ca16a78f612ec68240d59214076e1784464c21ff8fabfeff4b46fd239e1c64736f6c63430008120033\",\n  \"libraries\": {\n    \"ClaimVerifier\": \"0x5B8F92B8afA5Db7078703294D646908F0fc00D87\"\n  },\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addProviderHash(string)\": {\n        \"params\": {\n          \"_newProviderHash\": \"New provider hash to be added\"\n        }\n      },\n      \"addWitness(address)\": {\n        \"params\": {\n          \"_newWitness\": \"Address of the new witness\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeProviderHash(string)\": {\n        \"params\": {\n          \"_removeProviderHash\": \"Provider hash to be removed\"\n        }\n      },\n      \"removeWitness(address)\": {\n        \"params\": {\n          \"_removeWitness\": \"Address of witness to be removed\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\": {\n        \"params\": {\n          \"proof\": \"Proof to be verified\"\n        }\n      },\n      \"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"params\": {\n          \"_proofs\": \"Proofs to be verified\"\n        },\n        \"returns\": {\n          \"domains\": \"      Array of Domain structs\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addProviderHash(string)\": {\n        \"notice\": \"ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\"\n      },\n      \"addWitness(address)\": {\n        \"notice\": \"ONLY OWNER: Add witness address. Witness must not have been previously added.\"\n      },\n      \"removeProviderHash(string)\": {\n        \"notice\": \"ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\"\n      },\n      \"removeWitness(address)\": {\n        \"notice\": \"ONLY OWNER: Remove witness address. Witness must have been previously added.\"\n      },\n      \"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\": {\n        \"notice\": \"Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters) to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature.  This function verifies a claim by performing the following checks on the claim - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim - Checks if the signatures are valid and from the witnesses This function reverts if - No signatures are found on the proof - Number of signatures is not equal to the number of witnesses - ClaimInfo hash does not match the identifier in the claim - Signatures are invalid (not from the witnesses)  DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the  responsibility of the caller.  Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code    \"\n      },\n      \"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"notice\": \"ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 11343,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"isWitness\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 11346,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"witnesses\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 11350,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"isProviderHash\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_string_memory_ptr,t_bool)\"\n      },\n      {\n        \"astId\": 11353,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"providerHashes\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_array(t_string_storage)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_string_storage)dyn_storage\": {\n        \"base\": \"t_string_storage\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"string[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_string_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_string_memory_ptr\",\n        \"label\": \"mapping(string => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/solcInputs/a22247643263102eca9fc6c72e24c17d.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\\n\\n\\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\\n\\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\\n\\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\\n\\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\\n\\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\\n\\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\\n\\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\\n\\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\\n\\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\\n\\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\\n\\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/solcInputs/a43d75c8fa53cbd70612f5013c5d17a2.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12718791721466586474772975178991944367361898681403889293050590835735829974174;\\n    uint256 constant IC0y = 6579614210328804738196110281777440845203538387714672921854127346802897741731;\\n    \\n    uint256 constant IC1x = 15050971342023334328313633330499885418161248915553086390701402242486225179368;\\n    uint256 constant IC1y = 5024764877577619588829734526990256704181621131776349449360023481477820279987;\\n    \\n    uint256 constant IC2x = 7494265978725599958916265753653166549633529129800692658333846839504191651648;\\n    uint256 constant IC2y = 6331829577874431053631060489192183034310045972687441697179743819760334117448;\\n    \\n    uint256 constant IC3x = 19001722242244131321371144536562173279385056519981716838131699446018662048085;\\n    uint256 constant IC3y = 8148711952593941450664988855383229951630582602775661040234820121548658879338;\\n    \\n    uint256 constant IC4x = 3624352076627862068761560802183636400416483488844158805038644908873200708814;\\n    uint256 constant IC4y = 20894074159790604892251457333772898092352374489464929653588484093719978460605;\\n    \\n    uint256 constant IC5x = 2098287694939727519558784139808406325855172668407809961967029546183317335265;\\n    uint256 constant IC5y = 5659241113472526955215440521431168972841548603376846026887752206139550832697;\\n    \\n    uint256 constant IC6x = 17054571586962694690567468783102453574497782768524521043534058966826398455175;\\n    uint256 constant IC6y = 4087439525418017845490176926142509334113265173570304433911881676407144081865;\\n    \\n    uint256 constant IC7x = 7441928267847731392209447389119131741297268634643246304512516729270550734194;\\n    uint256 constant IC7y = 15714253901405577134617988311525363228461039013850912155558149694323922788327;\\n    \\n    uint256 constant IC8x = 11989172231499636764423272601594485978016807201316866170676011918612131765820;\\n    uint256 constant IC8y = 15918479982497737545158513843427772249925445687882255296587424450200131669618;\\n    \\n    uint256 constant IC9x = 19827744545534206076315711984525184804508732918768894016552346430789516516368;\\n    uint256 constant IC9y = 16361460611570894490152793347002588479282989223552655286979659973731335376509;\\n    \\n    uint256 constant IC10x = 10898965818757221383985300751768263931593441442012024286290119328446015154272;\\n    uint256 constant IC10y = 6989418820395701171656324073128354251482680955655018162117108617053607002569;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/base_staging/solcInputs/d865a6f49eab8c58036d78b72f5cb448.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/security/Pausable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/security/ReentrancyGuard.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        return _status == _ENTERED;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Address.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"./StringUtils.sol\\\";\\n\\n/**\\n * Library to assist with requesting,\\n * serialising & verifying credentials\\n */\\nlibrary Claims {\\n\\t/** Data required to describe a claim */\\n\\tstruct CompleteClaimData {\\n\\t\\tbytes32 identifier;\\n\\t\\taddress owner;\\n\\t\\tuint32 timestampS;\\n\\t\\tuint32 epoch;\\n\\t}\\n\\n\\tstruct ClaimInfo {\\n\\t\\tstring provider;\\n\\t\\tstring parameters;\\n\\t\\tstring context;\\n\\t}\\n\\n\\t/** Claim with signatures & signer */\\n\\tstruct SignedClaim {\\n\\t\\tCompleteClaimData claim;\\n\\t\\tbytes[] signatures;\\n\\t}\\n\\n\\t/**\\n\\t * Asserts that the claim is signed by the expected witnesses\\n\\t */\\n\\tfunction assertValidSignedClaim(\\n\\t\\tSignedClaim memory self,\\n\\t\\taddress[] memory expectedWitnessAddresses\\n\\t) internal pure {\\n\\t\\trequire(self.signatures.length > 0, \\\"No signatures\\\");\\n\\t\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\n\\t\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\n\\t\\t\\tbool found = false;\\n\\t\\t\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\n\\t\\t\\t\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\n\\t\\t\\t\\t\\tfound = true;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\trequire(found, \\\"Missing witness signature\\\");\\n\\t\\t}\\n\\t}\\n\\n\\t/**\\n\\t * @dev recovers the signer of the claim\\n\\t */\\n\\tfunction recoverSignersOfSignedClaim(\\n\\t\\tSignedClaim memory self\\n\\t) internal pure returns (address[] memory) {\\n\\t\\tbytes memory serialised = serialise(self.claim);\\n\\t\\taddress[] memory signers = new address[](self.signatures.length);\\n\\t\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\n\\t\\t\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\n\\t\\t}\\n\\n\\t\\treturn signers;\\n\\t}\\n\\n\\t/**\\n\\t * @dev serialises the credential into a string;\\n\\t * the string is used to verify the signature\\n\\t *\\n\\t * the serialisation is the same as done by the TS library\\n\\t */\\n\\tfunction serialise(\\n\\t\\tCompleteClaimData memory self\\n\\t) internal pure returns (bytes memory) {\\n\\t\\treturn\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.address2str(self.owner),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(self.timestampS),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(self.epoch)\\n\\t\\t\\t);\\n\\t}\\n\\n\\t/**\\n\\t * @dev returns the address of the user that generated the signature\\n\\t */\\n\\tfunction verifySignature(\\n\\t\\tbytes memory content,\\n\\t\\tbytes memory signature\\n\\t) internal pure returns (address signer) {\\n\\t\\tbytes32 signedHash = keccak256(\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\t\\\"\\\\x19Ethereum Signed Message:\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(content.length),\\n\\t\\t\\t\\tcontent\\n\\t\\t\\t)\\n\\t\\t);\\n\\t\\treturn ECDSA.recover(signedHash, signature);\\n\\t}\\n\\n\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\n\\t\\tbytes memory serialised = abi.encodePacked(\\n\\t\\t\\tclaimInfo.provider,\\n\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\tclaimInfo.parameters,\\n\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\tclaimInfo.context\\n\\t\\t);\\n\\t\\treturn keccak256(serialised);\\n\\t}\\n}\\n\"\n    },\n    \"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * Utilities for string manipulation & conversion\\n */\\nlibrary StringUtils {\\n\\tfunction address2str(address x) internal pure returns (string memory) {\\n\\t\\tbytes memory s = new bytes(40);\\n\\t\\tfor (uint i = 0; i < 20; i++) {\\n\\t\\t\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\n\\t\\t\\tbytes1 hi = bytes1(uint8(b) / 16);\\n\\t\\t\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\n\\t\\t\\ts[2 * i] = getChar(hi);\\n\\t\\t\\ts[2 * i + 1] = getChar(lo);\\n\\t\\t}\\n\\t\\treturn string(abi.encodePacked(\\\"0x\\\", s));\\n\\t}\\n\\n\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\n\\t\\t// Fixed buffer size for hexadecimal convertion\\n\\t\\tbytes memory converted = new bytes(buffer.length * 2);\\n\\t\\tbytes memory _base = \\\"0123456789abcdef\\\";\\n\\n\\t\\tfor (uint256 i = 0; i < buffer.length; i++) {\\n\\t\\t\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\n\\t\\t\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\n\\t\\t}\\n\\n\\t\\treturn string(abi.encodePacked(\\\"0x\\\", converted));\\n\\t}\\n\\n\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\n\\t\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\n\\t\\telse return bytes1(uint8(b) + 0x57);\\n\\t}\\n\\n\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\n\\t\\tif (_b) {\\n\\t\\t\\treturn \\\"true\\\";\\n\\t\\t} else {\\n\\t\\t\\treturn \\\"false\\\";\\n\\t\\t}\\n\\t}\\n\\n\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\n\\t\\tif (_i == 0) {\\n\\t\\t\\treturn \\\"0\\\";\\n\\t\\t}\\n\\t\\tuint j = _i;\\n\\t\\tuint len;\\n\\t\\twhile (j != 0) {\\n\\t\\t\\tlen++;\\n\\t\\t\\tj /= 10;\\n\\t\\t}\\n\\t\\tbytes memory bstr = new bytes(len);\\n\\t\\tuint k = len;\\n\\t\\twhile (_i != 0) {\\n\\t\\t\\tk = k - 1;\\n\\t\\t\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\n\\t\\t\\tbytes1 b1 = bytes1(temp);\\n\\t\\t\\tbstr[k] = b1;\\n\\t\\t\\t_i /= 10;\\n\\t\\t}\\n\\t\\treturn string(bstr);\\n\\t}\\n\\n\\tfunction areEqual(\\n\\t\\tstring calldata _a,\\n\\t\\tstring storage _b\\n\\t) internal pure returns (bool) {\\n\\t\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\n\\t}\\n\\n\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\n\\t\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\n\\t}\\n\\n\\tfunction toLower(string memory str) internal pure returns (string memory) {\\n\\t\\tbytes memory bStr = bytes(str);\\n\\t\\tbytes memory bLower = new bytes(bStr.length);\\n\\t\\tfor (uint i = 0; i < bStr.length; i++) {\\n\\t\\t\\t// Uppercase character...\\n\\t\\t\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\n\\t\\t\\t\\t// So we add 32 to make it lowercase\\n\\t\\t\\t\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tbLower[i] = bStr[i];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn string(bLower);\\n\\t}\\n\\n\\tfunction substring(\\n\\t\\tstring memory str,\\n\\t\\tuint startIndex,\\n\\t\\tuint endIndex\\n\\t) internal pure returns (string memory) {\\n\\t\\tbytes memory strBytes = bytes(str);\\n\\t\\tbytes memory result = new bytes(endIndex - startIndex);\\n\\t\\tfor (uint i = startIndex; i < endIndex; i++) {\\n\\t\\t\\tresult[i - startIndex] = strBytes[i];\\n\\t\\t}\\n\\t\\treturn string(result);\\n\\t}\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/DomainExchange.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { ReentrancyGuard } from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport { AddressAllowList } from \\\"./external/AddressAllowList.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./external/lib/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"./external/lib/Uint256ArrayUtils.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"./external/interfaces/IKeyHashAdapterV2.sol\\\";\\n\\nimport { IDomainExchange } from \\\"./interfaces/IDomainExchange.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\nimport { IVerifiedDomainRegistry } from \\\"./interfaces/IVerifiedDomainRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract DomainExchange is IDomainExchange, AddressAllowList, ReentrancyGuard, Pausable {\\n\\n    using Address for address payable;\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    \\n    event ListingCreated(\\n        uint256 indexed listingId, \\n        address indexed seller, \\n        bytes32 indexed domainId, \\n        bytes32 dkimKeyHash,\\n        uint256 askPrice,\\n        uint256 minBidPrice,\\n        address saleEthRecipient\\n    );\\n    event ListingUpdated(uint256 indexed listingId, address indexed seller, uint256 newAskPrice, address saleEthRecipient);\\n    event ListingDeleted(uint256 indexed listingId, address indexed seller);\\n    event ListingDeletedByRegistry(uint256 indexed listingId);\\n    \\n    event BidCreated(uint256 indexed bidId, uint256 indexed listingId, address indexed buyer, uint256 price);\\n    event BidPriceIncreased(uint256 indexed bidId, address indexed buyer, uint256 newPrice);\\n    event RefundInitiated(uint256 indexed bidId, address indexed buyer);\\n    event BidWithdrawn(uint256 indexed bidId, address indexed buyer, uint256 amount);\\n    \\n    event SaleFinalized(uint256 indexed bidId, uint256 indexed listingId, uint256 priceNetFees, uint256 fees);\\n    \\n    event InstantAcceptUpdated(address indexed buyer, bool instantAccept);\\n\\n    event FeeUpdated(uint256 newFee);\\n    event FeeRecipientUpdated(address indexed newFeeRecipient);\\n    event BidSettlementPeriodUpdated(uint256 newBidSettlementPeriod);\\n    event BidRefundPeriodUpdated(uint256 newBidRefundPeriod);\\n    event TransferDomainProcessorUpdated(ITransferDomainProcessor indexed newTransferDomainProcessor);\\n    event MailServerKeyHashAdapterUpdated(IKeyHashAdapterV2 indexed newMailServerKeyHashAdapter);\\n\\n    /* ============ Structs ============ */\\n    struct Listing {\\n        address seller;\\n        address payable saleEthRecipient;       // Must be a contract that can receive ETH or an EOA\\n        bytes32 dkimKeyHash;            // Allow for custom DKIM key hash\\n        bytes encryptionKey;\\n        bytes32 domainId;\\n        uint256 createdAt;\\n        uint256 askPrice;\\n        uint256 minBidPrice;\\n        bool isActive;          // false by default, set to true when the listing is created\\n        uint256[] bids;\\n    }\\n\\n    struct ListingWithId {\\n        uint256 listingId;\\n        Listing listing;\\n    }\\n\\n    struct Bid {\\n        address buyer;\\n        uint256 listingId;\\n        string encryptedBuyerId;\\n        bytes32 buyerIdHash;\\n        uint256 createdAt;\\n        uint256 expiryTimestamp;\\n        uint256 price;\\n        bool refundInitiated;\\n    }\\n\\n    struct BidDetailsWithId {\\n        uint256 bidId;\\n        Bid bid;\\n        bool buyerInstantAcceptEnabled;\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyInitialized() {\\n        require(isInitialized, \\\"Contract must be initialized\\\");\\n        _;\\n    }\\n\\n    /* ============ Public Variables ============ */\\n\\n    mapping(uint256 => Listing) public listings;\\n    mapping(address => uint256[]) public userListings;\\n    mapping(uint256 => Bid) public bids;\\n    mapping(address => uint256[]) public userBids;\\n    mapping(address => bool) public instantAcceptEnabled;\\n\\n    uint256 public fee;\\n    address payable public feeRecipient;\\n    uint256 public bidCounter;\\n    uint256 public listingCounter;\\n    uint256 public bidSettlementPeriod;\\n    uint256 public bidRefundPeriod;\\n    \\n    bool public isInitialized;\\n    \\n    ITransferDomainProcessor public transferDomainProcessor;\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        address _owner,\\n        uint256 _fee,\\n        address payable _feeRecipient,\\n        uint256 _bidSettlementPeriod,\\n        uint256 _bidRefundPeriod,\\n        address[] memory _allowedAddresses\\n    ) AddressAllowList(_allowedAddresses) {\\n        fee = _fee;\\n        feeRecipient = _feeRecipient;\\n        bidSettlementPeriod = _bidSettlementPeriod;\\n        bidRefundPeriod = _bidRefundPeriod;\\n        \\n        bidCounter = 1;\\n        listingCounter = 1;\\n        isInitialized = false;\\n        \\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ Public Functions ============ */\\n\\n    /**\\n     * @notice Creates listing for a domain. If ownership of domain changes offchain, the new owner\\n     * will have to first register the domain on the domain registry contract. Then the new owner\\n     * can create a listing for the domain. The old listing will be deleted from the old owner's \\n     * listings and the old listing is marked as NOT active, which prevents any new bids from being\\n     * created on it and makes the old bids immediately withdrawable. We also allow the seller to\\n     * specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM\\n     * key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be \\n     * updated by us whenever Namecheap rotates their DKIM key.\\n     *\\n     * Function reverts if:\\n     * - Caller is not domain owner on the domain registry contract\\n     * - Ask price is less than min bid price\\n     * - Sale ETH recipient is the zero address\\n     *\\n     * @param _domainId         The unique identifier of the domain\\n     * @param _askPrice         An asking price for the domain\\n     * @param _minBidPrice      The minimum bid price for the domain\\n     * @param _saleEthRecipient The address to receive the ETH from the sale; must be a contract that can\\n     *                          receive ETH or an EOA\\n     * @param _encryptionKey    The encryption key for buyers to encrypt the buyerId to\\n     * @param _dkimKeyHash      The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\n     */\\n    function createListing(\\n        bytes32 _domainId, \\n        uint256 _askPrice, \\n        uint256 _minBidPrice, \\n        address payable _saleEthRecipient, \\n        bytes memory _encryptionKey,\\n        bytes32 _dkimKeyHash\\n    ) \\n        external\\n        onlyAllowed\\n        onlyInitialized \\n        whenNotPaused\\n    {\\n        _verifyCreateListing(_domainId, _minBidPrice, _askPrice, _saleEthRecipient);\\n\\n        uint256 listingId = _updateCreateListingState(\\n            _domainId, _askPrice, _minBidPrice, _saleEthRecipient, _encryptionKey, _dkimKeyHash\\n        );\\n\\n        verifiedDomainRegistry.setDomainListing(_domainId, listingId);\\n\\n        emit ListingCreated(listingId, msg.sender, _domainId, _dkimKeyHash, _askPrice, _minBidPrice, _saleEthRecipient);\\n    }\\n\\n    /**\\n     * @notice Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer\\n     * has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId\\n     * to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the \\n     * seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId \\n     * using their private key to get the raw buyerId.\\n     *\\n     * DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be\\n     * done in the client! This does not affect the security of the protocol as the encrypted buyerId is only \\n     * used for communication between the buyer and the seller while maintaining privacy.\\n     *\\n     * @param _listingId            The unique identifier of the listing to bid on\\n     * @param _buyerIdHash          The hashed buyerId which is also output as part of the transfer proof later\\n     * @param _encryptedBuyerId     The encrypted buyerId. Should be the same as the buyerId hashed\\n     */\\n    function createBid(uint256 _listingId, bytes32 _buyerIdHash, string memory _encryptedBuyerId) \\n        external \\n        payable\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        uint256 price = msg.value;\\n        Listing storage listing = listings[_listingId];\\n\\n        _validateCreateBid(listing, price, _buyerIdHash);\\n\\n        uint256 bidId = _updateCreateBidState(listing, _listingId, price, _buyerIdHash, _encryptedBuyerId);\\n\\n        emit BidCreated(bidId, _listingId, msg.sender, price);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to \\n     * the listing owner. The seller can also finalize the sale with bids that have initiated a refund \\n     * including the ones that have expired based on timestamp but not withdrawn yet.\\n     *\\n     * @param _proof The zk-email proof of domain transfer\\n     */\\n    function finalizeSale(ITransferDomainProcessor.TransferProof calldata _proof) \\n        external\\n        onlyInitialized\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        // Check\\n        (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        ) = transferDomainProcessor.processProof(_proof);\\n\\n        Bid storage bid = bids[bidId];\\n        Listing storage listing = listings[bid.listingId];\\n        \\n        _validateFinalizeSale(bid, listing, dkimKeyHash, hashedReceiverId, domainName);\\n        \\n        // Effect\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\n\\n        uint256 transferValue = bid.price;\\n        address payable recipient = listing.saleEthRecipient;\\n        uint256 listingId = bid.listingId;\\n        _updateFinalizeSaleState(bid, bidId, listing);\\n\\n        // Interaction\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\n        \\n        emit SaleFinalized(bidId, listingId, transferValue - feeAmount, feeAmount);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required\\n     * because it is not in the buyer's interest to release funds unless they have received the domain. Note that the\\n     * bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to\\n     * the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will\\n     * revert if:\\n     * - The bid is not owned by the caller\\n     * - The listing is not active (sold or withdrawn)\\n     *\\n     * @param _bidId The unique identifier of the bid to release funds for\\n     */\\n    function buyerReleaseFunds(uint256 _bidId) \\n        external\\n        nonReentrant\\n    {\\n        // Check\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        require(bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n\\n        // Effect\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\n\\n        uint256 transferValue = bid.price;\\n        address payable recipient = listing.saleEthRecipient;\\n        uint256 listingId = bid.listingId;\\n        \\n        _updateFinalizeSaleState(bid, _bidId, listing);\\n\\n        // Interaction\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\n\\n        emit SaleFinalized(_bidId, listingId, transferValue - feeAmount, feeAmount);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Updates the asking price of an existing listing. We don't update\\n     * the existing bids against the listing because the newAskPrice is an indicative value.\\n     * The new ask price must be greater than or equal to the existing min bid price. If seller\\n     * wants to update the min bid price, they should delete the listing and create a new one with\\n     * the new min bid price.\\n     *\\n     * @param _listingId        The unique identifier of the listing to update\\n     * @param _newAskPrice      The new asking price for the listing\\n     * @param _saleEthRecipient The new address to receive the ETH from the sale; must be a contract that can\\n     *                          receive ETH or an EOA\\n     */\\n    function updateListing(uint256 _listingId, uint256 _newAskPrice, address payable _saleEthRecipient) external whenNotPaused {\\n        Listing storage listing = listings[_listingId];\\n        \\n        require(listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n        require(_newAskPrice >= listing.minBidPrice, \\\"Ask price is less than min bid price\\\");\\n        require(_saleEthRecipient != address(0), \\\"Invalid sale ETH recipient\\\");\\n        \\n        listing.askPrice = _newAskPrice;\\n        listing.saleEthRecipient = _saleEthRecipient;\\n\\n        emit ListingUpdated(_listingId, msg.sender, _newAskPrice, _saleEthRecipient);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array\\n     * and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing\\n     * are left as is to allow the buyer to withdraw the bid.\\n     *\\n     * @param _listingId The unique identifier of the listing to delete\\n     */\\n    function deleteListing(uint256 _listingId) external {\\n        Listing storage listing = listings[_listingId];\\n        \\n        require(listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n        \\n        verifiedDomainRegistry.removeDomainListing(listing.domainId);\\n\\n        _pruneListing(listing, _listingId);\\n\\n        emit ListingDeleted(_listingId, msg.sender);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry.\\n     * \\n     * @param _listingId    Listing Id to remove\\n     */\\n    function registryRemoveListing(uint256 _listingId) external override {\\n        Listing storage listing = listings[_listingId];\\n\\n        require(address(verifiedDomainRegistry) == msg.sender, \\\"Caller is not registry\\\");\\n        // If listing is NOT active, this function will NOT be called because the listing status\\n        // would have already been removed from the registry beforehand; so there is no need to \\n        // check if listing is active\\n        \\n        _pruneListing(listing, _listingId);\\n\\n        emit ListingDeletedByRegistry(_listingId);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher \\n     * than the old price. The buyer must send the additional amount of ETH. The function reverts if\\n     * - bid has initiated refund, caller is not bid owner or listing is not active\\n     * - the new price is less than old price\\n     * - msg.value is NOT STRICTLY EQUAL to than new price - old price\\n     *\\n     * @param _bidId The unique identifier of the bid to increase the price for\\n     * @param _newPrice The new price for the bid\\n     */\\n    function increaseBidPrice(uint256 _bidId, uint256 _newPrice)\\n        external\\n        payable\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        // Check\\n        _validateIncreaseBidPrice(bid, listing, _newPrice);\\n        \\n        // Effect\\n        bid.price = _newPrice;\\n\\n        emit BidPriceIncreased(_bidId, msg.sender, _newPrice);\\n    }\\n\\n    /**\\n     * @notice Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has \\n     * configured their Namecheap account to accept ownership of domains immediately upon transfer.\\n     * \\n     * DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only \\n     * an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller\\n     * may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But\\n     * if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can \\n     * cancel the transfer immediately.\\n     */\\n    function enableInstantAccept() external onlyInitialized {\\n        require(!instantAcceptEnabled[msg.sender], \\\"Instant accept already enabled\\\");\\n        \\n        instantAcceptEnabled[msg.sender] = true;        \\n        emit InstantAcceptUpdated(msg.sender, true);\\n    }\\n\\n    /**\\n     * @notice Disables the instant accept flag for the buyer.\\n     */\\n    function disableInstantAccept() external onlyInitialized {\\n        require(instantAcceptEnabled[msg.sender], \\\"Instant accept already disabled\\\");\\n\\n        instantAcceptEnabled[msg.sender] = false;\\n        emit InstantAcceptUpdated(msg.sender, false);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner \\n     * after the initial bid expiry period has passed.\\n     *\\n     * @param _bidId The unique identifier of the bid to initiate refund for\\n     */\\n    function initiateRefund(uint256 _bidId) external {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        _validateInitiateRefund(bid, listing);\\n\\n        bid.expiryTimestamp = block.timestamp + bidRefundPeriod;\\n        bid.refundInitiated = true;\\n\\n        emit RefundInitiated(_bidId, bid.buyer);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\n     *\\n     * @param _bidId The unique identifier of the bid to withdraw\\n     */\\n    function withdrawBid(uint256 _bidId) external nonReentrant {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        // Check\\n        _validateWithdrawBid(bid, listing);\\n\\n        // Effect\\n        uint256 refundAmount = bid.price;\\n        _pruneBid(bid, _bidId, listing);\\n        \\n        // Interaction\\n        payable(msg.sender).sendValue(refundAmount);\\n\\n        emit BidWithdrawn(_bidId, msg.sender, refundAmount);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * @notice Initializes the contract with domain verification and transfer processors. Can \\n     * only be called once by the contract owner\\n     * \\n     * @param _transferDomainProcessor The address of the domain transfer processor contract\\n     * @param _verifiedDomainRegistry The address of the verified domain registry contract\\n     * @param _mailServerKeyHashAdapter The address of the mail server key hash adapter contract\\n     */\\n    function initialize(\\n        ITransferDomainProcessor _transferDomainProcessor,\\n        IVerifiedDomainRegistry _verifiedDomainRegistry,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter\\n    ) external onlyOwner {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n        transferDomainProcessor = _transferDomainProcessor;\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Pauses listing and proof submission functionality for the marketplace. \\n     * Functionalites that are paused:\\n     * - Listing creation and update\\n     * - Bid creation and update\\n     * - Sale finalization\\n     * \\n     * Functinonalites that remain unpaused to allow users to retrieve funds in contract:\\n     * - Bid refund initiation and withdrawal\\n     * - Listing deletion\\n     * - Manual settlement between buyer and seller\\n     */\\n    function pauseMarketplace() external onlyOwner {\\n        _pause();\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Restarts paused functionality for the marketplace.\\n     */\\n    function unpauseMarketplace() external onlyOwner {\\n        _unpause();\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the transfer domain processor\\n     *\\n     * @param _transferDomainProcessor The new transfer domain processor\\n     */\\n    function updateTransferDomainProcessor(ITransferDomainProcessor _transferDomainProcessor) external onlyOwner {\\n        require(address(_transferDomainProcessor) != address(0), \\\"Invalid address\\\");\\n        \\n        transferDomainProcessor = _transferDomainProcessor;\\n        emit TransferDomainProcessorUpdated(_transferDomainProcessor);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the managed mail server key hash adapter\\n     *\\n     * @param _mailServerKeyHashAdapter The new mail server key hash adapter\\n     */\\n    function updateMailServerKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        require(address(_mailServerKeyHashAdapter) != address(0), \\\"Invalid address\\\");\\n        \\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        emit MailServerKeyHashAdapterUpdated(_mailServerKeyHashAdapter);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the fee percentage for the marketplace\\n     *\\n     * @param _newFee The new fee percentage (in basis points)\\n     */\\n    function updateFee(uint256 _newFee) external onlyOwner {\\n        fee = _newFee;\\n        emit FeeUpdated(_newFee);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the fee recipient address\\n     *\\n     * @param _newFeeRecipient The new address to receive fees\\n     */\\n    function updateFeeRecipient(address payable _newFeeRecipient) external onlyOwner {\\n        require(_newFeeRecipient != address(0), \\\"Invalid address\\\");\\n        feeRecipient = _newFeeRecipient;\\n        emit FeeRecipientUpdated(_newFeeRecipient);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the minimum bid active period\\n     *\\n     * @param _newBidSettlementPeriod The new bid settlement period in seconds\\n     */\\n    function updateBidSettlementPeriod(uint256 _newBidSettlementPeriod) external onlyOwner {\\n        require(_newBidSettlementPeriod > 0, \\\"Bid settlement period must be greater than 0\\\");\\n        bidSettlementPeriod = _newBidSettlementPeriod;\\n        emit BidSettlementPeriodUpdated(_newBidSettlementPeriod);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the bid refund period\\n     *\\n     * @param _newBidRefundPeriod The new bid refund period in seconds\\n     */\\n    function updateBidRefundPeriod(uint256 _newBidRefundPeriod) external onlyOwner {\\n        require(_newBidRefundPeriod > 0, \\\"Bid refund period must be greater than 0\\\");\\n        bidRefundPeriod = _newBidRefundPeriod;\\n        emit BidRefundPeriodUpdated(_newBidRefundPeriod);\\n    }\\n\\n    /* ============ View Functions ============ */    \\n\\n    /**\\n     * @notice Get listing information with listingId for a list of listingIds\\n     * @param _listingIds An array of listingIds to fetch details for\\n     */\\n    function getListings(uint256[] memory _listingIds)\\n        external \\n        view \\n        returns (ListingWithId[] memory listingInfo) \\n    {\\n        listingInfo = new ListingWithId[](_listingIds.length);\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\n            listingInfo[i] = ListingWithId({\\n                listingId: _listingIds[i],\\n                listing: listings[_listingIds[i]]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns all listings created by a user\\n     * @param _user The address of the user to fetch listings for\\n     */\\n    function getUserListings(address _user) external view returns (ListingWithId[] memory listingInfo) {\\n        uint256[] memory userListingIds = userListings[_user];\\n        listingInfo = new ListingWithId[](userListingIds.length);\\n        for (uint256 i = 0; i < userListingIds.length; i++) {\\n            uint256 listingId = userListingIds[i];\\n            listingInfo[i] = ListingWithId({\\n                listingId: listingId,\\n                listing: listings[listingId]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the bids created by a user\\n     * @param _user The address of the user to fetch bids for\\n     */\\n    function getUserBids(address _user) external view returns (BidDetailsWithId[] memory bidInfo) {\\n        uint256[] memory userBidIds = userBids[_user];\\n        bidInfo = new BidDetailsWithId[](userBidIds.length);\\n        for (uint256 i = 0; i < userBidIds.length; i++) {\\n            uint256 bidId = userBidIds[i];\\n            bidInfo[i] = BidDetailsWithId({\\n                bidId: bidId,\\n                bid: bids[bidId],\\n                buyerInstantAcceptEnabled: instantAcceptEnabled[_user]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the bids for given listingIds\\n     * @param _listingIds An array of listingIds to fetch bids for\\n     */\\n    function getListingBids(uint256[] memory _listingIds) external view returns (BidDetailsWithId[][] memory bidInfo) {\\n        bidInfo = new BidDetailsWithId[][](_listingIds.length);\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\n            uint256 listingId = _listingIds[i];\\n            uint256[] memory listingBidIds = listings[listingId].bids;\\n            bidInfo[i] = new BidDetailsWithId[](listingBidIds.length);\\n            for (uint256 j = 0; j < listingBidIds.length; j++) {\\n                uint256 bidId = listingBidIds[j];\\n                bidInfo[i][j] = BidDetailsWithId({\\n                    bidId: bidId,\\n                    bid: bids[bidId],\\n                    buyerInstantAcceptEnabled: instantAcceptEnabled[bids[bidId].buyer]\\n                });\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Get all allowed sellers\\n     */\\n    function getAllowedSellers() external view returns (address[] memory) {\\n        return _getAllowedAddresses();\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _verifyCreateListing(\\n        bytes32 _domainId, \\n        uint256 _minBidPrice, \\n        uint256 _askPrice, \\n        address _saleEthRecipient\\n    ) internal view {\\n        IVerifiedDomainRegistry.DomainWithId memory domainWithId = verifiedDomainRegistry.getDomain(_domainId);\\n        require(domainWithId.domain.owner == msg.sender, \\\"Caller is not domain owner\\\");\\n        require(domainWithId.domain.exchange == address(0), \\\"Domain already listed on registry\\\");\\n\\n        require(_minBidPrice > 0, \\\"Minimum bid price is zero\\\");\\n        require(_askPrice >= _minBidPrice, \\\"Ask price is less than min bid price\\\");\\n        require(_saleEthRecipient != address(0), \\\"Invalid sale ETH recipient\\\");\\n    }\\n\\n    function _updateCreateListingState(\\n        bytes32 _domainId, \\n        uint256 _askPrice, \\n        uint256 _minBidPrice,\\n        address payable _saleEthRecipient,\\n        bytes memory _encryptionKey,\\n        bytes32 _dkimKeyHash\\n    ) internal returns (uint256 listingId) {\\n        \\n        // New listing\\n        listingId = listingCounter;\\n        listings[listingId] = Listing({\\n            seller: msg.sender,\\n            saleEthRecipient: _saleEthRecipient,\\n            encryptionKey: _encryptionKey,\\n            dkimKeyHash: _dkimKeyHash,\\n            askPrice: _askPrice,\\n            minBidPrice: _minBidPrice,\\n            domainId: _domainId,\\n            createdAt: block.timestamp,\\n            isActive: true,\\n            bids: new uint256[](0)\\n        });\\n        userListings[msg.sender].push(listingId);\\n\\n        // Increment listingCounter\\n        listingCounter = listingCounter + 1;\\n    }\\n\\n    function _validateCreateBid(Listing storage _listing, uint256 _price, bytes32 _buyerIdHash) internal view {\\n        require(_listing.seller != address(0), \\\"Listing does not exist\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n        \\n        // Validate inputs\\n        require(_price >= _listing.minBidPrice, \\\"Bid price is less than min bid price\\\");\\n        require(_buyerIdHash != bytes32(0), \\\"Buyer ID hash cannot be empty\\\");\\n    }\\n\\n    function _updateCreateBidState(\\n        Listing storage _listing, \\n        uint256 _listingId, \\n        uint256 _price, \\n        bytes32 _buyerIdHash, \\n        string memory _encryptedBuyerId\\n    ) internal returns (uint256 bidId) {\\n        bidId = bidCounter;\\n        bids[bidId] = Bid({\\n            buyer: msg.sender,\\n            listingId: _listingId,\\n            encryptedBuyerId: _encryptedBuyerId,\\n            buyerIdHash: _buyerIdHash,\\n            createdAt: block.timestamp,\\n            expiryTimestamp: type(uint256).max,\\n            price: _price,\\n            refundInitiated: false\\n        });\\n        userBids[msg.sender].push(bidId);\\n        _listing.bids.push(bidId);\\n\\n        // Increment bidCounter\\n        bidCounter = bidCounter + 1;\\n    }\\n\\n    function _validateFinalizeSale(\\n        Bid storage _bid, \\n        Listing storage _listing,\\n        bytes32 _dkimKeyHash,\\n        bytes32 _hashedReceiverId, \\n        string memory _transferredDomainName\\n    ) internal view {\\n        require(_bid.buyer != address(0), \\\"Bid does not exist\\\");\\n        require(_listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n\\n        // Validate namecheap DKIM key\\n        if (_listing.dkimKeyHash != bytes32(0)) {\\n            require(_dkimKeyHash == _listing.dkimKeyHash, \\\"Invalid custom DKIM key hash\\\");\\n        } else {\\n            require(\\n                mailServerKeyHashAdapter.isMailServerKeyHash(_dkimKeyHash), \\n                \\\"Invalid managed DKIM key hash\\\"\\n            );\\n        }\\n\\n        // Validate domain and receiver\\n        bytes32 transferredDomainId = keccak256(abi.encodePacked(_transferredDomainName));\\n        require(_bid.buyerIdHash == _hashedReceiverId, \\\"Invalid receiver\\\");\\n        require(_listing.domainId == transferredDomainId, \\\"Invalid domain\\\");\\n    }\\n\\n    function _updateFinalizeSaleState(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\n        uint256 listingId = _bid.listingId;\\n        \\n        _pruneBid(_bid, _bidId, _listing);\\n        _pruneListing(_listing, listingId);\\n    }\\n\\n    function _validateIncreaseBidPrice(\\n        Bid storage _bid, \\n        Listing storage _listing, \\n        uint256 _newPrice\\n    ) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(!_bid.refundInitiated, \\\"Refund already initiated\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n\\n        // Validate new price\\n        require(_newPrice > _bid.price, \\\"New price not greater than old price\\\");\\n        require(msg.value == _newPrice - _bid.price, \\\"Incorrect amount of ETH sent\\\");\\n    }\\n\\n    function _validateInitiateRefund(Bid storage _bid, Listing storage _listing) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(!_bid.refundInitiated, \\\"Refund already initiated\\\");\\n        require(block.timestamp > bidSettlementPeriod + _bid.createdAt, \\\"Refund period not started\\\");\\n        require(_listing.isActive, \\\"Listing expired. Bid can be withdrawn directly\\\");\\n    }\\n\\n    function _validateWithdrawBid(Bid storage _bid, Listing storage _listing) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        if (_listing.isActive) {\\n            require(_bid.refundInitiated, \\\"Refund not initiated\\\");\\n            require(block.timestamp >= _bid.expiryTimestamp, \\\"Refund period not ended\\\");\\n        }\\n    }\\n\\n    function _settleSale(address payable _recipient, uint256 _amount) internal returns (uint256 feeAmount) {\\n        feeAmount = (_amount * fee) / PRECISE_UNIT;\\n        _recipient.sendValue(_amount - feeAmount);\\n\\n        if (feeAmount > 0) {\\n            feeRecipient.sendValue(feeAmount);\\n        }\\n    }\\n\\n    /**\\n     * @notice Deletes a bid from the exchange. Removes the bid from the listing's bids array and the buyer's\\n     * bids array. Deletes the listing if it is expired and has no bids.\\n     */\\n    function _pruneBid(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\n        userBids[_bid.buyer].removeStorage(_bidId);\\n        _listing.bids.removeStorage(_bidId);\\n        if (!_listing.isActive && _listing.bids.length == 0) {\\n            delete listings[_bid.listingId];\\n        }\\n        delete bids[_bidId];\\n    }\\n\\n    /**\\n     * @notice Marks a listing as expired. Removes the listing from the seller's listings array and domain listing.\\n     * If the listing has no bids, it is deleted from the exchange.\\n     */\\n    function _pruneListing(Listing storage _listing, uint256 _listingId) internal {\\n        _listing.isActive = false;\\n        userListings[_listing.seller].removeStorage(_listingId);\\n        if (_listing.bids.length == 0) {\\n            delete listings[_listingId];\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressAllowList.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"./lib/AddressArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract AddressAllowList is Ownable {\\n\\n    using AddressArrayUtils for address[];\\n\\n    /* ============ Events ============ */\\n    event AddressAddedToAllowlist(address indexed allowedAddress);\\n    event AddressRemovedFromAllowlist(address indexed allowedAddress);\\n    event AllowlistEnabled();\\n    event AllowlistDisabled();\\n    \\n    /* ============ Modifier ============ */\\n    modifier onlyAllowed() {\\n        require(isEnabled ? isAllowed[msg.sender] : true, \\\"Address is not allowed\\\");\\n        _;\\n    }\\n    \\n    /* ============ State Variables ============ */\\n    bool public isEnabled;                     // Boolean indicating if the allowlist is enabled\\n    address[] public allowedAddresses;         // Array of addresses that are allowed from taking depositors liquidity\\n    mapping(address => bool) public isAllowed; // Mapping of address to boolean indicating if the user is allowed\\n\\n    /* ============ Constructor ============ */\\n    constructor(address[] memory _allowedAddresses) Ownable() {\\n        for (uint256 i = 0; i < _allowedAddresses.length; i++) {\\n            address allowedAddress = _allowedAddresses[i];\\n\\n            require(!isAllowed[allowedAddress], \\\"Address is already allowed\\\");\\n            isAllowed[allowedAddress] = true;\\n            emit AddressAddedToAllowlist(allowedAddress);\\n        }\\n        allowedAddresses = _allowedAddresses;\\n        isEnabled = true;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed\\n     * functions.\\n     *\\n     * @param _allowedAddresses   List of addresses allowed to call allow listed functions\\n     */\\n    function addAddressesToAllowlist(address[] memory _allowedAddresses) external onlyOwner {\\n        for(uint256 i = 0; i < _allowedAddresses.length; i++) {\\n            address allowedAddress = _allowedAddresses[i];\\n\\n            require(!isAllowed[allowedAddress], \\\"Address already on allowlist\\\");\\n\\n            isAllowed[allowedAddress] = true;\\n            allowedAddresses.push(allowedAddress);\\n\\n            emit AddressAddedToAllowlist(allowedAddress);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes passed addresses from an allow list. Addresses not on the allow list are unable to call\\n     * allow listed functions.\\n     *\\n     * @param _disallowedAddresses   List of addresses being disallowed from calling allow listed functions\\n     */\\n    function removeAddressesFromAllowlist(address[] memory _disallowedAddresses) external onlyOwner {\\n        for(uint256 i = 0; i < _disallowedAddresses.length; i++) {\\n            address disallowedAddress = _disallowedAddresses[i];\\n\\n            require(isAllowed[disallowedAddress], \\\"Address already disallowed\\\");\\n\\n            isAllowed[disallowedAddress] = false;\\n            allowedAddresses.removeStorage(disallowedAddress);\\n\\n            emit AddressRemovedFromAllowlist(disallowedAddress);\\n        }\\n    }\\n\\n    /**\\n     * @notice Enable the allow list. When the allow list is enabled, only approved addresses are allowed to\\n     * functions with onlyAllowed modifier.\\n     */\\n    function enableAllowlist() external onlyOwner {\\n        require(!isEnabled, \\\"Allow list is already enabled\\\");\\n\\n        isEnabled = true;\\n        emit AllowlistEnabled();\\n    }\\n\\n    /**\\n     * @notice Disable the allow list. When the allow list is disabled, any address is allowed to call functions\\n     * with onlyAllowed modifier.\\n     */\\n    function disableAllowlist() external onlyOwner {\\n        require(isEnabled, \\\"Allow list is already disabled\\\");\\n\\n        isEnabled = false;\\n        emit AllowlistDisabled();\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function _getAllowedAddresses() internal view returns (address[] memory) {\\n        return allowedAddresses;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/ClaimVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary ClaimVerifier {\\n\\n    /**\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\n     * the target string in the data string if found. Returns type(uint256).max if:\\n     * - Target is longer than data\\n     * - Target is not found\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     */\\n    function findSubstringEndIndex(\\n        string memory data,\\n        string memory target\\n    ) public pure returns (uint256) {\\n        bytes memory dataBytes = bytes(data);\\n        bytes memory targetBytes = bytes(target);\\n\\n        if (dataBytes.length < targetBytes.length) {\\n            return type(uint256).max;\\n        }\\n\\n        // Find start of target\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\n            bool isMatch = true;\\n\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\n                if (dataBytes[i + j] != targetBytes[j]) {\\n                    isMatch = false;\\n                    break;\\n                }\\n            }\\n\\n            if (isMatch) {\\n                return i + targetBytes.length; // Return end index + 1\\n            }\\n        }\\n\\n        return type(uint256).max;\\n    }\\n\\n    /**\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\n     * Pass prefix formatted with quotes, for example '\\\"providerHash\\\\\\\":\\\\\\\"'\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     *\\n     * @param data      Context string from which target value needs to be extracted\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\n     */\\n    function extractFieldFromContext(\\n        string memory data,\\n        string memory prefix\\n    ) public pure returns (string memory) {\\n        // Find end index of prefix; which is the start index of the value\\n        uint256 start = findSubstringEndIndex(data, prefix);\\n\\n        bytes memory dataBytes = bytes(data);\\n        if (start == dataBytes.length) {\\n            return \\\"\\\"; // Prefix not found. Malformed or missing message\\n        }\\n        \\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\n        uint256 end = start;\\n        while (\\n            end < dataBytes.length &&\\n            !(dataBytes[end] == '\\\"' && dataBytes[end - 1] != \\\"\\\\\\\\\\\")\\n        ) {\\n            end++;\\n        }\\n        if (end <= start) {\\n            return \\\"\\\"; // Malformed or missing message\\n        }\\n        bytes memory contextMessage = new bytes(end - start);\\n        for (uint i = start; i < end; i++) {\\n            contextMessage[i - start] = dataBytes[i];\\n        }\\n        return string(contextMessage);\\n    }\\n\\n\\n    /**\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\n     * multiple times.\\n     * \\n     * @param data                  Context string from which target value needs to be extracted\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\n     */\\n    function extractAllFromContext(\\n        string memory data,\\n        uint8 maxValues,\\n        bool extractProviderHash\\n    ) public pure returns (string[] memory) {\\n        \\n        require(maxValues > 0, \\\"Max values must be greater than 0\\\");\\n\\n        bytes memory dataBytes = bytes(data);\\n        uint index = 0;\\n\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\"extractedParameters\\\\\\\":{\\\\\\\"');\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\"Extraction failed. Malformed extractedParameters\\\");\\n        }\\n        index += extractedParametersBytes.length;\\n\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\"extractedParameters\\\\\\\":{\\\\\\\"'\\n        uint valuesFound = 0;\\n    \\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\n\\n        while (\\n            index < dataBytes.length\\n        ) {\\n            // Keep incrementing until '\\\"', escaped quotes are not considered\\n            if (!(dataBytes[index] == '\\\"' && dataBytes[index - 1] != \\\"\\\\\\\\\\\")) {\\n                index++;\\n                continue;\\n            }\\n\\n            if (!isValue) {\\n                // \\\\\\\":\\\\\\\" (3 chars)\\n                require(dataBytes[index + 1] == \\\":\\\" && dataBytes[index + 2] == '\\\\\\\"', \\\"Extraction failed. Malformed data 1\\\");\\n                index += 3;     // move it after \\\\\\\"\\n                isValue = true;\\n                valueIndices[2 * valuesFound] = index;      // start index\\n            } else {\\n                // \\\\\\\",\\\\\\\" (3 chars) or \\\\\\\"}, (3 chars)\\n                // \\\\\\\"}} is not supported, there should always be a providerHash\\n                require(\\n                    dataBytes[index + 1] == \\\",\\\" && dataBytes[index + 2] == '\\\\\\\"' ||  \\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\",\\\",\\n                    \\\"Extraction failed. Malformed data 2\\\"\\n                );\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\n                valuesFound++;\\n\\n                if (dataBytes[index + 1] == \\\",\\\") {\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\n                    require(valuesFound != maxValues, \\\"Extraction failed. Exceeded max values\\\");\\n                    index += 3;\\n                    isValue = false;\\n                } else {    // index + 1 = \\\"}\\\"\\n                    index += 3;\\n                    break;  // end of extractedParameters\\n                }\\n            }\\n        }\\n\\n        if (extractProviderHash) {\\n            bytes memory providerHashParamBytes = bytes(\\\"\\\\\\\"providerHash\\\\\\\":\\\\\\\"\\\");\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\"Extraction failed. Malformed providerHash\\\");\\n            }\\n            index += providerHashParamBytes.length;\\n            \\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\n            valueIndices[2 * valuesFound] = index;\\n            // Keep incrementing until '\\\"'\\n            while (\\n                index < dataBytes.length && dataBytes[index] != '\\\"'\\n            ) {\\n                index++;\\n            }\\n            valueIndices[2 * valuesFound + 1] = index;\\n            valuesFound++;\\n        }   \\n        \\n        string[] memory values = new string[](valuesFound);\\n        \\n        for (uint i = 0; i < valuesFound; i++) {\\n            uint startIndex = valueIndices[2 * i];\\n            uint endIndex = valueIndices[2 * i + 1];\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\n            for (uint j = startIndex; j < endIndex; j++) {\\n                contextValue[j - startIndex] = dataBytes[j];\\n            }\\n            values[i] = string(contextValue);\\n        }\\n\\n        return values;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IProxyBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IProxyBaseProcessor {\\n    \\n    struct Proof {\\n        Claims.ClaimInfo claimInfo;\\n        Claims.SignedClaim signedClaim;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/StringArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title StringArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle String Arrays\\n */\\nlibrary StringArrayUtils {\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input string to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(string[] memory A, string memory a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (keccak256(bytes(A[i])) == keccak256(bytes(a))) {\\n                return (i, true);\\n            }\\n        }\\n        return (type(uint256).max, false);\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The string to remove\\n     */\\n    function removeStorage(string[] storage A, string memory a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"String not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(uint256[] memory A, uint256 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/external/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./lib/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"./lib/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/ProxyBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../lib/AddressArrayUtils.sol\\\";\\nimport { StringArrayUtils } from \\\"../lib/StringArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\nimport { IProxyBaseProcessor } from \\\"../interfaces/IProxyBaseProcessor.sol\\\";\\nimport { ClaimVerifier } from \\\"../ClaimVerifier.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ProxyBaseProcessor is IProxyBaseProcessor, Ownable {\\n\\n    using AddressArrayUtils for address[];\\n    using StringArrayUtils for string[];\\n\\n    /* ============ State Variables ============ */\\n    mapping(address => bool) public isWitness;\\n    address[] public witnesses;\\n    mapping(string => bool) public isProviderHash;\\n    string[] public providerHashes;                         // Set of provider hashes that these proofs should be for\\n    INullifierRegistry public immutable nullifierRegistry;\\n\\n    /* ============ Events ============ */\\n    event WitnessAdded(address witness);\\n    event WitnessRemoved(address witness);\\n    event ProviderHashAdded(string providerHash);\\n    event ProviderHashRemoved(string providerHash);\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        INullifierRegistry _nulliferRegistry,\\n        string[] memory _providerHashes\\n    )\\n        Ownable()\\n    {\\n        nullifierRegistry = _nulliferRegistry;\\n\\n        for (uint256 i = 0; i < _providerHashes.length; i++) {\\n            require(!isProviderHash[_providerHashes[i]], \\\"Provider hash already added\\\");\\n            isProviderHash[_providerHashes[i]] = true;\\n            providerHashes.push(_providerHashes[i]);\\n\\n            emit ProviderHashAdded(_providerHashes[i]);\\n        }\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add witness address. Witness must not have been previously added.\\n     *\\n     * @param _newWitness    Address of the new witness\\n     */\\n    function addWitness(address _newWitness) external onlyOwner {\\n        require(!isWitness[_newWitness], \\\"Address is already a witness\\\");\\n\\n        isWitness[_newWitness] = true;\\n        witnesses.push(_newWitness);\\n\\n        emit WitnessAdded(_newWitness);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove witness address. Witness must have been previously added.\\n     *\\n     * @param _removeWitness    Address of witness to be removed\\n     */\\n    function removeWitness(address _removeWitness) external onlyOwner {\\n        require(isWitness[_removeWitness], \\\"Address is not a witness\\\");\\n\\n        delete isWitness[_removeWitness];\\n        witnesses.removeStorage(_removeWitness);\\n\\n        emit WitnessRemoved(_removeWitness);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\n     *\\n     * @param _newProviderHash    New provider hash to be added\\n     */\\n    function addProviderHash(string memory _newProviderHash) external onlyOwner {\\n        require(!isProviderHash[_newProviderHash], \\\"Provider hash already added\\\");\\n\\n        isProviderHash[_newProviderHash] = true;\\n        providerHashes.push(_newProviderHash);\\n\\n        emit ProviderHashAdded(_newProviderHash);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\n     *\\n     * @param _removeProviderHash    Provider hash to be removed\\n     */\\n    function removeProviderHash(string memory _removeProviderHash) external onlyOwner {\\n        require(isProviderHash[_removeProviderHash], \\\"Provider hash not found\\\");\\n\\n        delete isProviderHash[_removeProviderHash];\\n        providerHashes.removeStorage(_removeProviderHash);\\n\\n        emit ProviderHashRemoved(_removeProviderHash);\\n    }\\n\\n    /* ============ Public Functions ============ */\\n    \\n    /**\\n     * Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters)\\n     * to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature. \\n     * This function verifies a claim by performing the following checks on the claim\\n     * - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim\\n     * - Checks if the signatures are valid and from the witnesses\\n     * This function reverts if\\n     * - No signatures are found on the proof\\n     * - Number of signatures is not equal to the number of witnesses\\n     * - ClaimInfo hash does not match the identifier in the claim\\n     * - Signatures are invalid (not from the witnesses)\\n     * \\n     * DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the \\n     * responsibility of the caller.\\n     * \\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     *    \\n     * @param proof                 Proof to be verified\\n     */\\n    function verifyProofSignatures(Proof memory proof) public view returns (bool) {\\n\\n        // create signed claim using claimData and signature.\\n        require(proof.signedClaim.signatures.length > 0, \\\"No signatures\\\");\\n        Claims.SignedClaim memory signed = Claims.SignedClaim(\\n            proof.signedClaim.claim,\\n            proof.signedClaim.signatures\\n        );\\n\\n        // check if the hash from the claimInfo is equal to the infoHash in the claimData\\n        bytes32 hashed = Claims.hashClaimInfo(proof.claimInfo);\\n        require(proof.signedClaim.claim.identifier == hashed, \\\"ClaimInfo hash doesn't match\\\");\\n\\n        // Recover signers of the signed claim\\n        address[] memory signedWitnesses = Claims.recoverSignersOfSignedClaim(signed);\\n\\n        // check if the number of signatures is equal to the number of witnesses\\n        require(\\n            signedWitnesses.length == witnesses.length,\\n            \\\"Number of signatures not equal to number of witnesses\\\"\\n        );\\n\\n        // Check signatures are from witnesses\\n        for (uint256 i = 0; i < signed.signatures.length; i++) {\\n            bool found = false;\\n            for (uint j = 0; j < witnesses.length; j++) {\\n                if (signedWitnesses[i] == witnesses[j]) {\\n                    found = true;\\n                    break;\\n                }\\n            }\\n            require(found, \\\"Signature not appropriate\\\");\\n        }\\n\\n        return true;\\n    }\\n\\n\\n    /* ============ View Functions ============ */\\n\\n    function getWitnesses() external view returns (address[] memory) {\\n        return witnesses;\\n    }\\n\\n    function getProviderHashes() external view returns (string[] memory) {\\n        return providerHashes;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProviderHash(string memory _providerHash) internal view returns (bool) {\\n        return isProviderHash[_providerHash];\\n    }\\n    \\n    function _validateAndAddNullifier(bytes[] memory _sigArray) internal {\\n        bytes32 nullifier = keccak256(abi.encode(_sigArray));\\n        require(!nullifierRegistry.isNullified(nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/TicketmasterDataParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"./lib/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"./lib/StringConversionUtils.sol\\\";\\nimport { ClaimVerifier } from \\\"./ClaimVerifier.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary TicketmasterDataParsing {\\n    \\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each dash, \\\"T\\\", or colon. Function will revert\\n     * if there are not 6 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is SPECIFIC TO THE DATE FORMAT USED BY Ticketmaster, not suitable for use with other date\\n     * formats. Ticketmaster date format is: \\\"YYYY-MM-DDTHH:MM:SS\\\" and returns UTC timestamps.\\n     *\\n     * @param _dateString       Date string to be converted to a UTC timestamp\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256 utcTimestamp) {\\n        string[6] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x2d || bytes(_dateString)[i] == 0x3a || bytes(_dateString)[i] == 0x54) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 6 substrings were found (string is split at 5 different places)\\n        require(breakCounter == 5, \\\"Invalid date string\\\");\\n\\n        utcTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[0].stringToUint(0),    // year\\n            extractedStrings[1].stringToUint(0),    // month\\n            extractedStrings[2].stringToUint(0),    // day\\n            extractedStrings[3].stringToUint(0),    // hour\\n            extractedStrings[4].stringToUint(0),    // minute\\n            0                                       // we don't need to the second granularity\\n        );\\n    }\\n\\n    /**\\n     * Extract event ID from URL by finding the last slash and taking the substring after it. We assume the\\n     * URL is formulated something like: {domainRoot}/.../event/EVENT_ID\\n     *\\n     * @param _url          URL to extract event ID from\\n     * @return              Event ID extracted from URL\\n     */\\n    function _extractEventIdFromUrl(string memory _url) internal pure returns (string memory) {\\n        string memory prefix = \\\"event/\\\";\\n        bytes memory urlBytes = bytes(_url);\\n        uint256 urlLength = urlBytes.length;\\n\\n        uint256 startIndex = ClaimVerifier.findSubstringEndIndex(_url, prefix);\\n        // If the start index is the max value or the URL length, then the event ID was not found\\n        if (startIndex == type(uint256).max || startIndex == urlLength) {\\n            revert(\\\"Event ID not found in URL\\\");\\n        }\\n\\n        bytes memory contextMessage = new bytes(urlLength - startIndex);\\n        for (uint i = startIndex; i < urlLength; i++) {\\n            contextMessage[i - startIndex] = urlBytes[i];\\n        }\\n        return string(contextMessage);\\n    }\\n\\n    /**\\n     * Parse tickets out of a ticket string of the format: '[\\\"ticket1\\\", \\\"ticket2\\\", \\\"ticket3\\\"]'.\\n     * We start by getting the number of tickets in a string by counting the number of commas and adding 1.\\n     * Then we iterate through the string and find the ticket IDs by looking for the quotes. We need to extract\\n     * from quote to quote so we look for all even-numbered quotes then extract the string between that and the\\n     * previous quote index.\\n     *\\n     * @param _ticketString          Stringified array of tickets\\n     */\\n     function _parseTicketString(string memory _ticketString) internal pure returns (string[] memory ticketIds) {\\n        // Assume there is at least one ticket (which means array would not have a comma)\\n        // If there is no ticket then the transaction will end up reverting\\n        uint256 ticketCount = 1;\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\n            if (bytes(_ticketString)[i] == 0x2C) {\\n                ticketCount++;\\n            }\\n        }\\n\\n        ticketIds = new string[](ticketCount);\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\n            if (bytes(_ticketString)[i] == 0x22) {\\n                breakCounter++;\\n                if (breakCounter % 2 == 0) {\\n                    ticketIds[(breakCounter/2)-1] = _ticketString.substring(lastBreak, i-1);\\n                }\\n                lastBreak = i + 1;\\n            }\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IDomainExchange.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface IDomainExchange {\\n    function registryRemoveListing(uint256 _listingId) external;\\n}\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/interfaces/IVerifiedDomainRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IVerifyDomainProcessor } from \\\"./IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IVerifiedDomainRegistry {\\n\\n    struct Domain {\\n        address owner;\\n        string name;\\n        uint256 expiryTime;\\n        address exchange;\\n        uint256 listingId;\\n    }\\n\\n    struct DomainWithId {\\n        bytes32 domainId;\\n        Domain domain;\\n    }\\n\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\n    \\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\n    \\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\n    function removeDomainListing(bytes32 _domainId) external;\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\n}\\n\"\n    },\n    \"contracts/interfaces/IVerifyDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\nimport { IProxyBaseProcessor } from \\\"../external/interfaces/IProxyBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\n    \\n    struct DomainRaw {\\n        string name;\\n        uint256 expiryTime;\\n    }\\n\\n    function verifyProofs(\\n        Proof[] memory _proofs\\n    ) \\n        external  \\n        returns (DomainRaw[] memory domains);\\n}\"\n    },\n    \"contracts/mocks/DomainExchangeMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\nimport \\\"../interfaces/IDomainExchange.sol\\\";\\nimport \\\"../interfaces/IVerifiedDomainRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract DomainExchangeMock is IDomainExchange {\\n    \\n    mapping(uint256 => bool) public listingActive;\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\n\\n    constructor(\\n        IVerifiedDomainRegistry _verifiedDomainRegistry\\n    ) {\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\n    }\\n\\n    function createListing(bytes32 _domainId, uint256 _listingId) public {\\n        listingActive[_listingId] = true;\\n        verifiedDomainRegistry.setDomainListing(_domainId, _listingId);\\n    }\\n\\n    function registryRemoveListing(uint256 _listingId) external override {\\n        listingActive[_listingId] = false;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/TransferDomainProcessorMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ITransferDomainProcessor } from \\\"../interfaces/ITransferDomainProcessor.sol\\\";\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessorMock is ITransferDomainProcessor {\\n\\n    using StringUtils for uint256;\\n\\n    /* ============ State Variables ============ */\\n    string storedDomainName;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function setDomainName(string memory _domainName) external {\\n        storedDomainName = _domainName;\\n    }\\n\\n    function processProof(TransferProof memory _proof)\\n        external\\n        view\\n        override\\n        returns (bytes32 dkimKeyHash, bytes32 hashedReceiverId, string memory domainName, uint256 bidId)\\n    {\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n        hashedReceiverId = bytes32(_proof.signals[1]);\\n        domainName = storedDomainName;\\n        bidId = _proof.signals[3];\\n    }\\n}\\n\\n\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VerifyDomainProcessorMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ClaimVerifier } from \\\"../external/ClaimVerifier.sol\\\";\\nimport { StringConversionUtils } from \\\"../external/lib/StringConversionUtils.sol\\\";\\nimport { TicketmasterDataParsing } from \\\"../external/TicketmasterDataParsing.sol\\\";\\n\\nimport { IVerifyDomainProcessor } from \\\"../interfaces/IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VerifyDomainProcessorMock is IVerifyDomainProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\n\\n    function verifyProofs(Proof[] memory _proofs)\\n        external\\n        pure\\n        returns (DomainRaw[] memory domains)\\n    {\\n        domains = new DomainRaw[](_proofs.length);\\n\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\n            domains[i] = DomainRaw({\\n                name: string(_proofs[i].signedClaim.signatures[0]),\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\"YYYY-MM-DDTHH:MM:SS\\\"\\n                // and returns UTC timestamps.\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(string(_proofs[i].signedClaim.signatures[1]))\\n            });\\n        }\\n\\n        return domains;\\n    }\\n}\\n\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/VerifiedDomainRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./external/lib/Bytes32ArrayUtils.sol\\\";\\nimport { AddressArrayUtils } from \\\"./external/lib/AddressArrayUtils.sol\\\";\\n\\nimport { IDomainExchange } from \\\"./interfaces/IDomainExchange.sol\\\";\\nimport { IVerifiedDomainRegistry } from \\\"./interfaces/IVerifiedDomainRegistry.sol\\\";\\nimport { IVerifyDomainProcessor } from \\\"./interfaces/IVerifyDomainProcessor.sol\\\";\\n\\n\\npragma solidity ^0.8.18;\\n\\ncontract VerifiedDomainRegistry is IVerifiedDomainRegistry, Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using AddressArrayUtils for address[];\\n\\n    /* ============ Events ============ */\\n    event DomainVerified(\\n        bytes32 indexed domainId,\\n        address indexed owner,\\n        string domainName,\\n        uint256 expiryTime\\n    );\\n\\n    event DomainListed(\\n        bytes32 indexed domainId,\\n        address indexed exchange,\\n        uint256 indexed listingId\\n    );\\n\\n    event DomainListingRemoved(\\n        bytes32 indexed domainId,\\n        address indexed exchange\\n    );\\n\\n    event DomainTransferred(\\n        bytes32 indexed domainId,\\n        address indexed oldOwner,\\n        address indexed newOwner\\n    );\\n\\n\\n    event VerifyDomainProcessorUpdated(\\n        IVerifyDomainProcessor indexed newVerifyDomainProcessor\\n    );\\n\\n    event ExchangeAdded(address indexed exchange);\\n    event ExchangeRemoved(address indexed exchange);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(isExchange[msg.sender], \\\"Caller must be exchange\\\");\\n        _;\\n    }\\n\\n    modifier onlyInitialized() {\\n        require(isInitialized, \\\"Contract must be initialized\\\");\\n        _;\\n    }\\n\\n    /* ============ Public Variables ============ */\\n    IVerifyDomainProcessor public verifyDomainProcessor;\\n    address[] public exchanges;\\n    mapping(address=>bool) public isExchange;\\n\\n    bool public isInitialized;\\n\\n    mapping(bytes32 => Domain) public domains;\\n    mapping(address => bytes32[]) public userDomains;\\n\\n    /* ============ Constructor ============ */\\n    \\n    constructor() Ownable() {}\\n\\n    /* ============ Public Functions ============ */\\n\\n    /**\\n     * @notice Verify domains and add them to the registry. If domain is transferred off-chain to another party \\n     * then they can re-verify the domain and claim ownership of the domain and previous ownership is removed.\\n     * The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on\\n     * the domain. Function reverts if:\\n     * - Domain ownership TLS proofs are invalid\\n     * \\n     * @param _proofs           Array of domain ownership TLS proofs\\n     */\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external override\\n        onlyInitialized\\n    {\\n        IVerifyDomainProcessor.DomainRaw[] memory rawDomains = verifyDomainProcessor.verifyProofs(\\n            _proofs\\n        );\\n\\n        for (uint256 i = 0; i < rawDomains.length; i++) {\\n            IVerifyDomainProcessor.DomainRaw memory rawDomain = rawDomains[i];\\n            bytes32 domainId = getDomainId(rawDomain.name);\\n\\n            Domain storage domain = domains[domainId];\\n            if (domain.owner == address(0)) {\\n                // Case 1.1: Domain has no owner\\n                // Add caller as owner\\n                userDomains[msg.sender].push(domainId);\\n\\n                // Set domain details\\n                domains[domainId] = Domain({\\n                    owner: msg.sender,\\n                    name: rawDomain.name,\\n                    expiryTime: rawDomain.expiryTime,\\n                    exchange: address(0),\\n                    listingId: 0\\n                });\\n            } else {\\n                // Case 2: Domain has owner\\n                // Case 2.1: Caller is owner; skip\\n                if (domain.owner == msg.sender) {\\n                    // No updates to userDomains\\n\\n                    // Update domain details; Only expiry time can change\\n                    // Owner and domain name cannot change\\n                    // Exchange and listingId are kept as is\\n                    domain.expiryTime = rawDomain.expiryTime;\\n                }\\n                // Case 2.2: Caller is NOT owner\\n                if (domain.owner != msg.sender) {\\n                    // Remove ownership from old owner\\n                    userDomains[domain.owner].removeStorage(domainId);\\n\\n                    // Remove listing on exchange if it exists\\n                    if (domain.exchange != address(0)) {\\n                        IDomainExchange(domain.exchange).registryRemoveListing(domain.listingId);\\n                    }\\n\\n                    // Add domain to new owner\\n                    userDomains[msg.sender].push(domainId);\\n\\n                    // Set domain details except for domain name as it cannot change\\n                    domain.owner = msg.sender;\\n                    domain.expiryTime = rawDomain.expiryTime;\\n                    domain.exchange = address(0);\\n                    domain.listingId = 0;\\n                }\\n            }\\n\\n            emit DomainVerified(domainId, msg.sender, rawDomain.name, rawDomain.expiryTime);\\n        }\\n    }\\n\\n    // Todo: Add function for relinquishing ownership of domain\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is\\n     * listed on the calling exchange. This sets the exchange and listingId of the domain.\\n     * \\n     * @param _domainId     Domain to set listed status for\\n     * @param _listingId    Listing Id of domain on calling exchange\\n     */\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId)\\n        external\\n        override\\n        onlyInitialized\\n        onlyExchange\\n    {\\n        Domain storage domain = domains[_domainId];\\n\\n        require(domain.owner != address(0), \\\"Domain must be verified\\\");\\n        require(domain.exchange == address(0), \\\"Domain already listed on another exchange\\\");\\n\\n        domain.exchange = msg.sender;\\n        domain.listingId = _listingId;\\n\\n        emit DomainListed(_domainId, msg.sender, _listingId);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one\\n     * that the domain is listed on. This removes the exchange and listingId from the domain.\\n     * \\n     * @param _domainId            Domain ID to update listing status for\\n     */\\n    function removeDomainListing(bytes32 _domainId) external override onlyInitialized onlyExchange {\\n        Domain storage domain = domains[_domainId];\\n        require(domain.exchange == msg.sender, \\\"Domain not listed on calling exchange\\\");\\n\\n        _removeDomainListing(domain);\\n\\n        emit DomainListingRemoved(_domainId, msg.sender);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain\\n     * is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status\\n     * from the domain.\\n     * \\n     * @param _domainId            Domain ID to update listing status for\\n     * @param _newOwner            New owner of the domain\\n     */\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) \\n        external \\n        override \\n        onlyInitialized \\n        onlyExchange \\n    {\\n        Domain storage domain = domains[_domainId];\\n        require(domain.exchange == msg.sender, \\\"Domain not listed on calling exchange\\\");\\n\\n        _removeDomainListing(domain);\\n\\n        // Update ownership\\n        address oldOwner = domain.owner;\\n        domain.owner = _newOwner;\\n        userDomains[oldOwner].removeStorage(_domainId);\\n        userDomains[_newOwner].push(_domainId);\\n\\n        emit DomainTransferred(_domainId, oldOwner, _newOwner);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts.\\n     * This can only be called once.\\n     *\\n     * @param _verifyDomainProcessor    Address of the VerifyDomainProcessor contract\\n     */\\n    function initialize(\\n        IVerifyDomainProcessor _verifyDomainProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        verifyDomainProcessor = _verifyDomainProcessor;\\n\\n        isInitialized = true;\\n\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized.\\n     * Exchange must not already exist in the registry.\\n     * \\n     * @param _exchange     Address of the exchange contract\\n     */\\n    function addExchange(address _exchange) external onlyOwner onlyInitialized {\\n        require(!isExchange[_exchange], \\\"Duplicate exchange\\\");\\n\\n        isExchange[_exchange] = true;\\n        exchanges.push(_exchange);\\n\\n        emit ExchangeAdded(_exchange);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry.\\n     * \\n     * @param _exchange     Address of the exchange contract\\n     */\\n    function removeExchange(address _exchange) external onlyOwner onlyInitialized {\\n        require(isExchange[_exchange], \\\"Exchange does not exist\\\");\\n\\n        isExchange[_exchange] = false;\\n        exchanges.removeStorage(_exchange);\\n\\n        emit ExchangeRemoved(_exchange);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the verify domain processor\\n     *\\n     * @param _verifyDomainProcessor    Address of the new VerifyDomainProcessor contract\\n     */\\n    function updateVerifyDomainProcessor(IVerifyDomainProcessor _verifyDomainProcessor) external onlyOwner {\\n        require(address(_verifyDomainProcessor) != address(0), \\\"Invalid address\\\");\\n\\n        verifyDomainProcessor = _verifyDomainProcessor;\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function getDomainId(string memory _domainName) public pure override returns (bytes32) {\\n        return keccak256(abi.encodePacked(_domainName));\\n    }\\n\\n    function getDomainOwner(bytes32 _domainId) external view override returns (address) {        \\n        return domains[_domainId].owner;\\n    }\\n\\n    function getUserDomains(address _user) external view returns (DomainWithId[] memory domainInfo) {\\n        bytes32[] memory domainIds = userDomains[_user];\\n        \\n        domainInfo = new DomainWithId[](domainIds.length);\\n        for (uint256 i = 0; i < domainIds.length; i++) {\\n            bytes32 domainId = domainIds[i];\\n            domainInfo[i] = DomainWithId({\\n                domainId: domainId,\\n                domain: domains[domainId]\\n            });\\n        }\\n    }\\n\\n    function getDomain(bytes32 _domainId) external view override returns (DomainWithId memory domainInfo) {\\n        return DomainWithId({\\n            domainId: _domainId,\\n            domain: domains[_domainId]\\n        });\\n    }\\n\\n    function getDomains(bytes32[] memory _domains) external view returns (DomainWithId[] memory domainInfo) {\\n        domainInfo = new DomainWithId[](_domains.length);\\n        for (uint256 i = 0; i < _domains.length; i++) {\\n            bytes32 domainId = _domains[i];\\n            domainInfo[i] = DomainWithId({\\n                domainId: domainId,\\n                domain: domains[domainId]\\n            });\\n        }\\n    }\\n\\n    function getExchanges() external view returns (address[] memory) {\\n        return exchanges;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _removeDomainListing(Domain storage _domain) internal {\\n        delete _domain.exchange;\\n        delete _domain.listingId;\\n    }\\n}\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n\\n    uint256 constant IC0x = 12140764414809439171579073747096628005611143888739021778142114438725209856911;\\n    uint256 constant IC0y = 18380664008722994554410246598515713804368408809139402801410617352473294938101;\\n\\n    uint256 constant IC1x = 16287270730688090110441256630912972881096977102957363147237538512209615075930;\\n    uint256 constant IC1y = 2449016754858987854593324887044687327196932594716827949199487058237499016691;\\n\\n    uint256 constant IC2x = 12290000746054008145532172012836689239677528072347882111559847558608807494030;\\n    uint256 constant IC2y = 14308358318183304542626969831757608989020288980497492892592599563043422576641;\\n\\n    uint256 constant IC3x = 17109205409157997740951972967816433882944148152574672952222919864324056429618;\\n    uint256 constant IC3y = 9961558237149244928391169779496769511791942854258198694890294984589871243856;\\n\\n    uint256 constant IC4x = 12885622983359679040345794541760667584938087103345731492334670493606961282700;\\n    uint256 constant IC4y = 18397333374263242470546340955330845415543534978510188436756186606821028634481;\\n\\n    uint256 constant IC5x = 8251971901226176941314060074725743834337466028961811325874949093602610929902;\\n    uint256 constant IC5y = 16257777857146800480589260332284762827173712873310789777823130626151679328406;\\n\\n    uint256 constant IC6x = 7755902890727928430969631143079950108469618570373249456222008624592630122217;\\n    uint256 constant IC6y = 10757977250154075642155615103618917172698106635999924885067022788329148453826;\\n\\n    uint256 constant IC7x = 9229565613389027758694089669374665969186485724568040364429447974425840672975;\\n    uint256 constant IC7y = 8522685561456236376873601057738356653321521861001626828091657280469196217906;\\n\\n    uint256 constant IC8x = 21276732369738095771663301979590133243106197446584260397744418605720907267683;\\n    uint256 constant IC8y = 7293000518568388677473960035761983204180608786522452828815102825735261508468;\\n\\n    uint256 constant IC9x = 9116173570523657214485637140779662063231707742648921986441734490858993965489;\\n    uint256 constant IC9y = 20125316561678768525824986864877835211109013619593406972323904438419789772526;\\n\\n    uint256 constant IC10x = 14220475398513461434883329515056365002533036699993990374428625877488131891870;\\n    uint256 constant IC10y = 12173247053801606963174627761051371553685163525039542034195810636700588930659;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/VerifyDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ClaimVerifier } from \\\"./external/ClaimVerifier.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { ProxyBaseProcessor } from \\\"./external/processors/ProxyBaseProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\nimport { TicketmasterDataParsing } from \\\"./external/TicketmasterDataParsing.sol\\\";\\n\\nimport { IVerifyDomainProcessor } from \\\"./interfaces/IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\n\\ncontract VerifyDomainProcessor is IVerifyDomainProcessor, ProxyBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\n\\n    /* ============ State Variables ============ */\\n    address public immutable registry;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _registry,\\n        INullifierRegistry _nullifierRegistry,\\n        string[] memory _providerHashes\\n    )   \\n        ProxyBaseProcessor(_nullifierRegistry, _providerHashes)\\n    {\\n        registry = _registry;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\n     *\\n     * @param _proofs        Proofs to be verified\\n     * @return domains       Array of Domain structs\\n     */\\n    function verifyProofs(\\n        Proof[] memory _proofs\\n    ) \\n        external \\n        override\\n        returns (DomainRaw[] memory domains)\\n    {\\n        require(msg.sender == registry, \\\"Only registry can call\\\");\\n\\n        domains = new DomainRaw[](_proofs.length);\\n\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\n            Proof memory proof = _proofs[i];\\n\\n            verifyProofSignatures(proof);\\n\\n            (\\n                string memory domainName,\\n                string memory expiryTimeStr,\\n                string memory providerHash\\n            ) = _extractValues(proof);\\n\\n            // Check provider hash\\n            require(_validateProviderHash(providerHash), \\\"No valid providerHash\\\");\\n\\n            _validateAndAddNullifier(proof.signedClaim.signatures);\\n\\n            domains[i] = DomainRaw({\\n                name: domainName,\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\"YYYY-MM-DDTHH:MM:SS\\\"\\n                // and returns UTC timestamps.\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(expiryTimeStr)\\n            });\\n        }\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * Extracts all values from the proof context.\\n     *\\n     * @param _proof The proof containing the context to extract values from.\\n     */\\n    function _extractValues(Proof memory _proof) internal pure returns (\\n        string memory domainName,\\n        string memory expiryTime,\\n        string memory providerHash\\n    ) {\\n        string[] memory values = ClaimVerifier.extractAllFromContext(\\n            _proof.claimInfo.context, \\n            MAX_EXTRACT_VALUES, \\n            true\\n        );\\n\\n        return (\\n            values[0], // domainName\\n            values[1], // expiryTime\\n            values[2]  // providerHash\\n        );\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/helpers.ts",
    "content": "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address } from \"../utils/types\";\nimport { ethers } from \"hardhat\";\n\nexport function getDeployedContractAddress(network: string, contractName: string): string {\n  return require(`./${network}/${contractName}.json`).address;\n}\n\nexport async function setNewOwner(\n  hre: HardhatRuntimeEnvironment,\n  contractAddress: Address,\n  newOwner: Address\n): Promise<void> {\n  const contract = await ethers.getContractAt(\"Ownable\", contractAddress);\n  const currentOwner = await contract.owner();\n\n  if (currentOwner != newOwner) {\n    const data = contract.interface.encodeFunctionData(\"transferOwnership\", [newOwner]);\n\n    await hre.deployments.rawTx({\n      from: currentOwner,\n      to: contract.address,\n      data\n    });\n  }\n}\n\nexport async function addWritePermission(\n  hre: HardhatRuntimeEnvironment,\n  contract: any,\n  newPermission: Address\n): Promise<void> {\n  const currentOwner = await contract.owner();\n  if (!(await contract.isWriter(newPermission))) {\n    if ((await hre.getUnnamedAccounts()).includes(currentOwner)) {\n      const data = contract.interface.encodeFunctionData(\"addWritePermission\", [newPermission]);\n\n      await hre.deployments.rawTx({\n        from: currentOwner,\n        to: contract.address,\n        data\n      });\n    } else {\n      console.log(\n        `Contract owner is not in the list of accounts, must be manually added with the following calldata:\n        ${contract.interface.encodeFunctionData(\"addWritePermission\", [newPermission])}\n        `\n      );\n    }\n  }\n}\n\n\nexport async function addWitness(\n  hre: HardhatRuntimeEnvironment,\n  contract: any,\n  newWitness: Address\n): Promise<void> {\n  const currentOwner = await contract.owner();\n  if (!(await contract.isWitness(newWitness))) {\n    if ((await hre.getUnnamedAccounts()).includes(currentOwner)) {\n      const data = contract.interface.encodeFunctionData(\"addWitness\", [newWitness]);\n\n      await hre.deployments.rawTx({\n        from: currentOwner,\n        to: contract.address,\n        data\n      });\n    } else {\n      console.log(\n        `Contract owner is not in the list of accounts, must be manually added with the following calldata:\n        ${contract.interface.encodeFunctionData(\"addWitness\", [newWitness])}\n        `\n      );\n    }\n  }\n}\n\nexport async function addProviderHash(\n  hre: HardhatRuntimeEnvironment,\n  contract: any,\n  newProviderHash: string\n): Promise<void> {\n  const currentOwner = await contract.owner();\n  if (!(await contract.isProviderHash(newProviderHash))) {\n    if ((await hre.getUnnamedAccounts()).includes(currentOwner)) {\n      const data = contract.interface.encodeFunctionData(\"addProviderHash\", [newProviderHash]);\n\n      await hre.deployments.rawTx({\n        from: currentOwner,\n        to: contract.address,\n        data\n      });\n    } else {\n      console.log(\n        `Contract owner is not in the list of accounts, must be manually added with the following calldata:\n        ${contract.interface.encodeFunctionData(\"addProviderHash\", [newProviderHash])}\n        `\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "contracts-domain/deployments/outputs/baseContracts.ts",
    "content": "export default {\n  \"name\": \"base\",\n  \"chainId\": \"8453\",\n  \"contracts\": {\n    \"ClaimVerifier\": {\n      \"address\": \"0xBA4D6eA209c3C3A6B0B31fE136a5F0eFd9De2bd1\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"data\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint8\",\n              \"name\": \"maxValues\",\n              \"type\": \"uint8\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"extractProviderHash\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"name\": \"extractAllFromContext\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string[]\",\n              \"name\": \"\",\n              \"type\": \"string[]\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"data\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"prefix\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"extractFieldFromContext\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"data\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"target\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"findSubstringEndIndex\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"DomainExchange\": {\n      \"address\": \"0x054be4cFB6e951A7dE921A179FA323c5ea3fCf47\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidSettlementPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidRefundPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"_allowedAddresses\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"allowedAddress\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"AddressAddedToAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"allowedAddress\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"AddressRemovedFromAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [],\n          \"name\": \"AllowlistDisabled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [],\n          \"name\": \"AllowlistEnabled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"price\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidCreated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newPrice\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidPriceIncreased\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newBidRefundPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidRefundPeriodUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newBidSettlementPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidSettlementPeriodUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"FeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newFee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"FeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bool\",\n              \"name\": \"instantAccept\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"name\": \"InstantAcceptUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"dkimKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"askPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minBidPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"saleEthRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ListingCreated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ListingDeleted\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"ListingDeletedByRegistry\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newAskPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"saleEthRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ListingUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"newMailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdapterUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"Paused\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"RefundInitiated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"priceNetFees\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fees\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SaleFinalized\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"newTransferDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"TransferDomainProcessorUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"Unpaused\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"_allowedAddresses\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"name\": \"addAddressesToAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"allowedAddresses\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bidCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bidRefundPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bidSettlementPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"bids\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"encryptedBuyerId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"buyerIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"createdAt\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTimestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"price\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"refundInitiated\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"buyerReleaseFunds\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_buyerIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_encryptedBuyerId\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"createBid\",\n          \"outputs\": [],\n          \"stateMutability\": \"payable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_askPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minBidPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_saleEthRecipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"_encryptionKey\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_dkimKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"createListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deleteListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"disableAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"disableInstantAccept\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"enableAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"enableInstantAccept\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"fee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"feeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[10]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[10]\"\n                }\n              ],\n              \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"finalizeSale\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getAllowedSellers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_listingIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getListingBids\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"bidId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"buyer\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"encryptedBuyerId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"buyerIdHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTimestamp\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"price\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"refundInitiated\",\n                      \"type\": \"bool\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Bid\",\n                  \"name\": \"bid\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"buyerInstantAcceptEnabled\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.BidDetailsWithId[][]\",\n              \"name\": \"bidInfo\",\n              \"type\": \"tuple[][]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_listingIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getListings\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"seller\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address payable\",\n                      \"name\": \"saleEthRecipient\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"dkimKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"bytes\",\n                      \"name\": \"encryptionKey\",\n                      \"type\": \"bytes\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"domainId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"askPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"minBidPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"isActive\",\n                      \"type\": \"bool\"\n                    },\n                    {\n                      \"internalType\": \"uint256[]\",\n                      \"name\": \"bids\",\n                      \"type\": \"uint256[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Listing\",\n                  \"name\": \"listing\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n              \"name\": \"listingInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_user\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getUserBids\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"bidId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"buyer\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"encryptedBuyerId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"buyerIdHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTimestamp\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"price\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"refundInitiated\",\n                      \"type\": \"bool\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Bid\",\n                  \"name\": \"bid\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"buyerInstantAcceptEnabled\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.BidDetailsWithId[]\",\n              \"name\": \"bidInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_user\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getUserListings\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"seller\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address payable\",\n                      \"name\": \"saleEthRecipient\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"dkimKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"bytes\",\n                      \"name\": \"encryptionKey\",\n                      \"type\": \"bytes\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"domainId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"askPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"minBidPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"isActive\",\n                      \"type\": \"bool\"\n                    },\n                    {\n                      \"internalType\": \"uint256[]\",\n                      \"name\": \"bids\",\n                      \"type\": \"uint256[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Listing\",\n                  \"name\": \"listing\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n              \"name\": \"listingInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newPrice\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"increaseBidPrice\",\n          \"outputs\": [],\n          \"stateMutability\": \"payable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"_transferDomainProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IVerifiedDomainRegistry\",\n              \"name\": \"_verifiedDomainRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"initiateRefund\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"instantAcceptEnabled\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isAllowed\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isEnabled\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"listingCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"listings\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"saleEthRecipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"dkimKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"encryptionKey\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"createdAt\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"askPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"minBidPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"isActive\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"pauseMarketplace\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"paused\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"registryRemoveListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"_disallowedAddresses\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"name\": \"removeAddressesFromAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"transferDomainProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"unpauseMarketplace\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newBidRefundPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"updateBidRefundPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newBidSettlementPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"updateBidSettlementPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newFee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"updateFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_newFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newAskPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_saleEthRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateMailServerKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"_transferDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateTransferDomainProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"userBids\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"userListings\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"verifiedDomainRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IVerifiedDomainRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"withdrawBid\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"NamecheapManagedKeyHashAdapter\": {\n      \"address\": \"0x6d00beaA1F921f22f10bAda079f2fb1bf0342e38\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"NullifierRegistry\": {\n      \"address\": \"0xcE4d0DE6589bF2b439d08dc9addD56428D76eC25\",\n      \"abi\": [\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"nullifier\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NullifierAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_nullifier\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addNullifier\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getWriters\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isNullified\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isWriter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_removedWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"writers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"TransferDomainProcessor\": {\n      \"address\": \"0x5d915599DEaf3A15b47c2625F1910599B9D5a1fd\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_exchange\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"exchange\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[10]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[10]\"\n                }\n              ],\n              \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"dkimKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"hashedReceiverId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"domainName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VerifiedDomainRegistry\": {\n      \"address\": \"0x6206EB4c794c7fe58315f76ab088Ee3C17E0d9f5\",\n      \"abi\": [\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DomainListed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DomainListingRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"oldOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DomainTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"string\",\n              \"name\": \"domainName\",\n              \"type\": \"string\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTime\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DomainVerified\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ExchangeAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ExchangeRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"newVerifyDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"VerifyDomainProcessorUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addExchange\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"domains\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTime\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"exchanges\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"getDomain\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"name\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTime\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"exchange\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n                  \"name\": \"domain\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId\",\n              \"name\": \"domainInfo\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_domainName\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"getDomainId\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"getDomainOwner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_domains\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getDomains\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"name\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTime\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"exchange\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n                  \"name\": \"domain\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n              \"name\": \"domainInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getExchanges\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_user\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getUserDomains\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"name\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTime\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"exchange\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n                  \"name\": \"domain\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n              \"name\": \"domainInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"_verifyDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isExchange\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeDomainListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeExchange\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setDomainListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateDomainOnSale\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"_verifyDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateVerifyDomainProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"userDomains\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"verifyDomainProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"provider\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"parameters\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"context\",\n                      \"type\": \"string\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.ClaimInfo\",\n                  \"name\": \"claimInfo\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"components\": [\n                        {\n                          \"internalType\": \"bytes32\",\n                          \"name\": \"identifier\",\n                          \"type\": \"bytes32\"\n                        },\n                        {\n                          \"internalType\": \"address\",\n                          \"name\": \"owner\",\n                          \"type\": \"address\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"timestampS\",\n                          \"type\": \"uint32\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"epoch\",\n                          \"type\": \"uint32\"\n                        }\n                      ],\n                      \"internalType\": \"struct Claims.CompleteClaimData\",\n                      \"name\": \"claim\",\n                      \"type\": \"tuple\"\n                    },\n                    {\n                      \"internalType\": \"bytes[]\",\n                      \"name\": \"signatures\",\n                      \"type\": \"bytes[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.SignedClaim\",\n                  \"name\": \"signedClaim\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n              \"name\": \"_proofs\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"name\": \"verifyDomains\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VerifyDomainProcessor\": {\n      \"address\": \"0x9eD28eBE190827fB8cfb2428C598f406d951Ac5e\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_registry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string[]\",\n              \"name\": \"_providerHashes\",\n              \"type\": \"string[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"string\",\n              \"name\": \"providerHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"ProviderHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"string\",\n              \"name\": \"providerHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"ProviderHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"witness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WitnessAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"witness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WitnessRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_newProviderHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"addProviderHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newWitness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addWitness\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getProviderHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string[]\",\n              \"name\": \"\",\n              \"type\": \"string[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getWitnesses\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"isProviderHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isWitness\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"providerHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_removeProviderHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"removeProviderHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_removeWitness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeWitness\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"provider\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"parameters\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"context\",\n                      \"type\": \"string\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.ClaimInfo\",\n                  \"name\": \"claimInfo\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"components\": [\n                        {\n                          \"internalType\": \"bytes32\",\n                          \"name\": \"identifier\",\n                          \"type\": \"bytes32\"\n                        },\n                        {\n                          \"internalType\": \"address\",\n                          \"name\": \"owner\",\n                          \"type\": \"address\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"timestampS\",\n                          \"type\": \"uint32\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"epoch\",\n                          \"type\": \"uint32\"\n                        }\n                      ],\n                      \"internalType\": \"struct Claims.CompleteClaimData\",\n                      \"name\": \"claim\",\n                      \"type\": \"tuple\"\n                    },\n                    {\n                      \"internalType\": \"bytes[]\",\n                      \"name\": \"signatures\",\n                      \"type\": \"bytes[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.SignedClaim\",\n                  \"name\": \"signedClaim\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IProxyBaseProcessor.Proof\",\n              \"name\": \"proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"verifyProofSignatures\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"provider\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"parameters\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"context\",\n                      \"type\": \"string\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.ClaimInfo\",\n                  \"name\": \"claimInfo\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"components\": [\n                        {\n                          \"internalType\": \"bytes32\",\n                          \"name\": \"identifier\",\n                          \"type\": \"bytes32\"\n                        },\n                        {\n                          \"internalType\": \"address\",\n                          \"name\": \"owner\",\n                          \"type\": \"address\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"timestampS\",\n                          \"type\": \"uint32\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"epoch\",\n                          \"type\": \"uint32\"\n                        }\n                      ],\n                      \"internalType\": \"struct Claims.CompleteClaimData\",\n                      \"name\": \"claim\",\n                      \"type\": \"tuple\"\n                    },\n                    {\n                      \"internalType\": \"bytes[]\",\n                      \"name\": \"signatures\",\n                      \"type\": \"bytes[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.SignedClaim\",\n                  \"name\": \"signedClaim\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n              \"name\": \"_proofs\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"name\": \"verifyProofs\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifyDomainProcessor.DomainRaw[]\",\n              \"name\": \"domains\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"witnesses\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    }\n  }\n} as const;"
  },
  {
    "path": "contracts-domain/deployments/outputs/baseStagingContracts.ts",
    "content": "export default {\n  \"name\": \"base_staging\",\n  \"chainId\": \"8453\",\n  \"contracts\": {\n    \"ClaimVerifier\": {\n      \"address\": \"0x5B8F92B8afA5Db7078703294D646908F0fc00D87\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"data\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint8\",\n              \"name\": \"maxValues\",\n              \"type\": \"uint8\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"extractProviderHash\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"name\": \"extractAllFromContext\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string[]\",\n              \"name\": \"\",\n              \"type\": \"string[]\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"data\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"prefix\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"extractFieldFromContext\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"data\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"target\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"findSubstringEndIndex\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"DomainExchange\": {\n      \"address\": \"0xe4148B108Fe4D7421853FE8cFfd35bDc2c0d95Ec\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidSettlementPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidRefundPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"_allowedAddresses\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"allowedAddress\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"AddressAddedToAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"allowedAddress\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"AddressRemovedFromAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [],\n          \"name\": \"AllowlistDisabled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [],\n          \"name\": \"AllowlistEnabled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"price\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidCreated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newPrice\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidPriceIncreased\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newBidRefundPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidRefundPeriodUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newBidSettlementPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidSettlementPeriodUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"BidWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"FeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newFee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"FeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bool\",\n              \"name\": \"instantAccept\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"name\": \"InstantAcceptUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"dkimKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"askPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minBidPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"saleEthRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ListingCreated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ListingDeleted\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"ListingDeletedByRegistry\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"newAskPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"saleEthRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ListingUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"newMailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdapterUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"Paused\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"RefundInitiated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"priceNetFees\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fees\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SaleFinalized\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"newTransferDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"TransferDomainProcessorUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"Unpaused\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"_allowedAddresses\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"name\": \"addAddressesToAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"allowedAddresses\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bidCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bidRefundPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bidSettlementPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"bids\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"buyer\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"encryptedBuyerId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"buyerIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"createdAt\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTimestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"price\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"refundInitiated\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"buyerReleaseFunds\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_buyerIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_encryptedBuyerId\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"createBid\",\n          \"outputs\": [],\n          \"stateMutability\": \"payable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_askPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minBidPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_saleEthRecipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"_encryptionKey\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_dkimKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"createListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deleteListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"disableAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"disableInstantAccept\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"enableAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"enableInstantAccept\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"fee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"feeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[10]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[10]\"\n                }\n              ],\n              \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"finalizeSale\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getAllowedSellers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_listingIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getListingBids\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"bidId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"buyer\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"encryptedBuyerId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"buyerIdHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTimestamp\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"price\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"refundInitiated\",\n                      \"type\": \"bool\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Bid\",\n                  \"name\": \"bid\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"buyerInstantAcceptEnabled\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.BidDetailsWithId[][]\",\n              \"name\": \"bidInfo\",\n              \"type\": \"tuple[][]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_listingIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getListings\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"seller\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address payable\",\n                      \"name\": \"saleEthRecipient\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"dkimKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"bytes\",\n                      \"name\": \"encryptionKey\",\n                      \"type\": \"bytes\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"domainId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"askPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"minBidPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"isActive\",\n                      \"type\": \"bool\"\n                    },\n                    {\n                      \"internalType\": \"uint256[]\",\n                      \"name\": \"bids\",\n                      \"type\": \"uint256[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Listing\",\n                  \"name\": \"listing\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n              \"name\": \"listingInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_user\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getUserBids\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"bidId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"buyer\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"encryptedBuyerId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"buyerIdHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTimestamp\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"price\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"refundInitiated\",\n                      \"type\": \"bool\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Bid\",\n                  \"name\": \"bid\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"buyerInstantAcceptEnabled\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.BidDetailsWithId[]\",\n              \"name\": \"bidInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_user\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getUserListings\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"seller\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address payable\",\n                      \"name\": \"saleEthRecipient\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"dkimKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"bytes\",\n                      \"name\": \"encryptionKey\",\n                      \"type\": \"bytes\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"domainId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"createdAt\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"askPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"minBidPrice\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bool\",\n                      \"name\": \"isActive\",\n                      \"type\": \"bool\"\n                    },\n                    {\n                      \"internalType\": \"uint256[]\",\n                      \"name\": \"bids\",\n                      \"type\": \"uint256[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct DomainExchange.Listing\",\n                  \"name\": \"listing\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n              \"name\": \"listingInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newPrice\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"increaseBidPrice\",\n          \"outputs\": [],\n          \"stateMutability\": \"payable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"_transferDomainProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IVerifiedDomainRegistry\",\n              \"name\": \"_verifiedDomainRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"initiateRefund\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"instantAcceptEnabled\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isAllowed\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isEnabled\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"listingCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"listings\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"seller\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"saleEthRecipient\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"dkimKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"encryptionKey\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"createdAt\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"askPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"minBidPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"isActive\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"pauseMarketplace\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"paused\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"registryRemoveListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"_disallowedAddresses\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"name\": \"removeAddressesFromAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"transferDomainProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"unpauseMarketplace\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newBidRefundPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"updateBidRefundPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newBidSettlementPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"updateBidSettlementPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newFee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"updateFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_newFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_newAskPrice\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address payable\",\n              \"name\": \"_saleEthRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateMailServerKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ITransferDomainProcessor\",\n              \"name\": \"_transferDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateTransferDomainProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"userBids\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"userListings\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"verifiedDomainRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IVerifiedDomainRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"withdrawBid\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"NamecheapManagedKeyHashAdapter\": {\n      \"address\": \"0x7E537F3A9329a0c29F386E6B0c30257AfbE7883f\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"NullifierRegistry\": {\n      \"address\": \"0x2b68bFd2b44a6a9E8dC7b414550457B091ECB5fB\",\n      \"abi\": [\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"nullifier\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NullifierAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_nullifier\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addNullifier\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getWriters\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isNullified\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isWriter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_removedWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"writers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"TransferDomainProcessor\": {\n      \"address\": \"0xB7C59f5a38dD6396c31B014599b9483084084d33\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_exchange\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"exchange\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[10]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[10]\"\n                }\n              ],\n              \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"dkimKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"hashedReceiverId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"domainName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VerifiedDomainRegistry\": {\n      \"address\": \"0xbCbE5B3F85ffAFa46960272a581A2662c257EF57\",\n      \"abi\": [\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DomainListed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DomainListingRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"oldOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DomainTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"string\",\n              \"name\": \"domainName\",\n              \"type\": \"string\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTime\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DomainVerified\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ExchangeAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"ExchangeRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"newVerifyDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"VerifyDomainProcessorUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addExchange\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"domains\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTime\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"exchange\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"exchanges\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"getDomain\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"name\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTime\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"exchange\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n                  \"name\": \"domain\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId\",\n              \"name\": \"domainInfo\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_domainName\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"getDomainId\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"getDomainOwner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_domains\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getDomains\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"name\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTime\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"exchange\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n                  \"name\": \"domain\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n              \"name\": \"domainInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getExchanges\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_user\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getUserDomains\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"name\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"expiryTime\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"exchange\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"listingId\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n                  \"name\": \"domain\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n              \"name\": \"domainInfo\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"_verifyDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isExchange\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeDomainListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_exchange\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeExchange\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_listingId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setDomainListing\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateDomainOnSale\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"_verifyDomainProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"updateVerifyDomainProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"userDomains\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"verifyDomainProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IVerifyDomainProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"provider\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"parameters\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"context\",\n                      \"type\": \"string\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.ClaimInfo\",\n                  \"name\": \"claimInfo\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"components\": [\n                        {\n                          \"internalType\": \"bytes32\",\n                          \"name\": \"identifier\",\n                          \"type\": \"bytes32\"\n                        },\n                        {\n                          \"internalType\": \"address\",\n                          \"name\": \"owner\",\n                          \"type\": \"address\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"timestampS\",\n                          \"type\": \"uint32\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"epoch\",\n                          \"type\": \"uint32\"\n                        }\n                      ],\n                      \"internalType\": \"struct Claims.CompleteClaimData\",\n                      \"name\": \"claim\",\n                      \"type\": \"tuple\"\n                    },\n                    {\n                      \"internalType\": \"bytes[]\",\n                      \"name\": \"signatures\",\n                      \"type\": \"bytes[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.SignedClaim\",\n                  \"name\": \"signedClaim\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n              \"name\": \"_proofs\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"name\": \"verifyDomains\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VerifyDomainProcessor\": {\n      \"address\": \"0x4367155Fe7BAA99d9AE99fE4F6aC1b8E87012e6b\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_registry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string[]\",\n              \"name\": \"_providerHashes\",\n              \"type\": \"string[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"string\",\n              \"name\": \"providerHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"ProviderHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"string\",\n              \"name\": \"providerHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"ProviderHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"witness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WitnessAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"witness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WitnessRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_newProviderHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"addProviderHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newWitness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addWitness\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getProviderHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string[]\",\n              \"name\": \"\",\n              \"type\": \"string[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getWitnesses\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"isProviderHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isWitness\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"providerHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_removeProviderHash\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"removeProviderHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_removeWitness\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeWitness\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"provider\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"parameters\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"context\",\n                      \"type\": \"string\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.ClaimInfo\",\n                  \"name\": \"claimInfo\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"components\": [\n                        {\n                          \"internalType\": \"bytes32\",\n                          \"name\": \"identifier\",\n                          \"type\": \"bytes32\"\n                        },\n                        {\n                          \"internalType\": \"address\",\n                          \"name\": \"owner\",\n                          \"type\": \"address\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"timestampS\",\n                          \"type\": \"uint32\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"epoch\",\n                          \"type\": \"uint32\"\n                        }\n                      ],\n                      \"internalType\": \"struct Claims.CompleteClaimData\",\n                      \"name\": \"claim\",\n                      \"type\": \"tuple\"\n                    },\n                    {\n                      \"internalType\": \"bytes[]\",\n                      \"name\": \"signatures\",\n                      \"type\": \"bytes[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.SignedClaim\",\n                  \"name\": \"signedClaim\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IProxyBaseProcessor.Proof\",\n              \"name\": \"proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"verifyProofSignatures\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"provider\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"parameters\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"context\",\n                      \"type\": \"string\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.ClaimInfo\",\n                  \"name\": \"claimInfo\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"components\": [\n                        {\n                          \"internalType\": \"bytes32\",\n                          \"name\": \"identifier\",\n                          \"type\": \"bytes32\"\n                        },\n                        {\n                          \"internalType\": \"address\",\n                          \"name\": \"owner\",\n                          \"type\": \"address\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"timestampS\",\n                          \"type\": \"uint32\"\n                        },\n                        {\n                          \"internalType\": \"uint32\",\n                          \"name\": \"epoch\",\n                          \"type\": \"uint32\"\n                        }\n                      ],\n                      \"internalType\": \"struct Claims.CompleteClaimData\",\n                      \"name\": \"claim\",\n                      \"type\": \"tuple\"\n                    },\n                    {\n                      \"internalType\": \"bytes[]\",\n                      \"name\": \"signatures\",\n                      \"type\": \"bytes[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.SignedClaim\",\n                  \"name\": \"signedClaim\",\n                  \"type\": \"tuple\"\n                }\n              ],\n              \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n              \"name\": \"_proofs\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"name\": \"verifyProofs\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifyDomainProcessor.DomainRaw[]\",\n              \"name\": \"domains\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"witnesses\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    }\n  }\n} as const;"
  },
  {
    "path": "contracts-domain/deployments/parameters.ts",
    "content": "import \"module-alias/register\";\nimport { BigNumber } from \"ethers\";\nimport { ONE_DAY_IN_SECONDS, THREE_MINUTES_IN_SECONDS, ZERO } from \"@utils/constants\";\nimport { ether, usdc } from \"@utils/common/units\";\n\n// Deployment Parameters\n\n// Global Parameters\nexport const MULTI_SIG: any = {\n  \"localhost\": \"\",\n  \"sepolia\": \"\",\n  \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n  \"base_staging\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n};\n\nexport const FEE_RECIPIENT: any = {\n  \"localhost\": \"0x70997970C51812dc3A010C7d01b50e0d17dc79C8\",\n  \"sepolia\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n  \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n  \"base_staging\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n};\n\nexport const FEE_PERCENTAGE: any = {\n  \"localhost\": ether(0.025),   // 2.5%\n  \"sepolia\": ether(0.025),    // 2.5%\n  \"base\": ether(0.025),       // 2.5%\n  \"base_staging\": ether(0.025), // 2.5%\n};\n\nexport const BID_SETTLEMENT_PERIOD: any = {\n  \"localhost\": ONE_DAY_IN_SECONDS,\n  \"sepolia\": THREE_MINUTES_IN_SECONDS,    // 3 minutes\n  \"base_staging\": THREE_MINUTES_IN_SECONDS.mul(BigNumber.from(10)),   // 30 minutes\n  \"base\": ONE_DAY_IN_SECONDS,\n};\n\nexport const BID_REFUND_PERIOD: any = {\n  \"localhost\": ONE_DAY_IN_SECONDS,\n  \"sepolia\": THREE_MINUTES_IN_SECONDS,    // 3 minutes  \n  \"base_staging\": THREE_MINUTES_IN_SECONDS.mul(BigNumber.from(10)),   // 30 minutes\n  \"base\": ONE_DAY_IN_SECONDS,\n};\n\nexport const VERIFY_DOMAIN_PROVIDER_HASHES: any = [\n  '0xfd4622039be3e4286dd3285d36d772a71d580a9afa0a1718a7e643539c952cf9',   // 0\n  '0x90a6489eff38140689a15133fb58906a7e847cc18271af036936c8eda91ddcc8',   // 1\n  '0x14d26d02b3ae9f26f9e62a4d8d76ebfff0cd4a4d4629c08c909af99ec0eb41d7',   // 2\n  '0x64558b4363c4f8d4e7c1ee1a75e4d82f8fa76640e174b06d4ed34e3b46ebc1a7',   // 3\n  '0xe4ac93cf32a585897b300eec0d22fddaed70165948f7aafd1c44364805813057',   // 4\n  '0x4a266fd63f550db6b79172325f33419df6d5d87bf924b175d8b1817f010a21cf',   // 5\n  '0xdc0e66724fcf38e8519c7ab33ab9e6a047c758db35204b1d086500fe50333f71',   // 6\n  '0x515a82e3326b985ca073d58a3ba9290e84ff8d021d072e7b420fd0616bc609e7',   // 7\n  '0xb41a513fdd3e2b7a6b8e0c02f8a714aa3aca101cd32365de6cbac90fae308e06',   // 8\n  '0x1fdc4738b323d4c38bf657a33f74f95618bc11933fcc4ce6e9f3f7c93f5a492e',   // 9\n  '0x5f15231e57a2fa86f5e1eb1c2abdbd5485109ada65bb63bed87c72425dca8285',   // 10\n  '0x5459ebbea646d1a4a0c93944e68600c9e355918a90b36d352a1291ba557e556c',   // 11\n  '0xff66c7ec1f7c81fc833bafb9522cc15be4ef56462267c89879510501c1bc77fd',   // 12\n  '0x5faa515009ca792805bdf03d951d753ab241c321066e3f0cbc0ee8f4c09ecb32',   // 13\n  '0x804818b286e6c204b3f18282b1f7a0a40b1b555bc39dcf256342e0b4dc3f2992',   // 14\n  '0x5ff169334a81b8b98ba9e7beb1ef2e3860f79f148cf07526524e829ecf6d6e5d',   // 15\n  '0x38989329e5ced5859e6509da39f11f6344c10522c0193c0cb573e783e974fbd0',   // 16\n  '0xac441d6d1e9962eb0abcbc819231e48614786c179507fd0faaec4cad0b5d1e0b',   // 17\n  '0xe62e6329abefdee24fcecf37ca55b112fa9d0abacb2c99cd7f8c0da6c7ba46a8',   // 18\n  '0x099b6726de138236fa7d3917f17caef42ebd19fa93de96b1b1faffc713265d30',   // 19\n  '0xde1e37cbb28770a1b1ed70d4a6837e0ee727926069ee8fa1633f03e4de2c35cd',\n  '0x6c0e0b23424d75c6191209487a27bdcb9ee9f748ec05f872b4afd56af66c36c5',\n  '0x9f76a244b731d7257d4cc846f3da987a6203862a32abe5d379785dbecd235d1a',\n  '0xef63eb7d0da5808077af6a8e9c160416ca66db16779ef30e4949d31edd70bf09',\n  '0x2b5db07f588bd27d3795281c640fd5ffe6de1114503a27e510a4aa4bd9d004d4',\n  '0x7189940070b05a712fc63053e9c7718770c562cd7df084e50a941669f680090a',\n  '0x1657faac94dd55e063362ddfb6f95c5a6d21e79ff758c6a8d6079510b004be32',\n  '0x60a18f9b8af405dcb90b51e6719fc14b7c7927a5961444cd97eb8ecffc7ecbd9',\n  '0x040fbe68e91a4575ad91d7dcb90077fcfc17627ef2a1293f59d1772959ccaed7',\n  '0xe2f19f3c91d9a590cfaf25f46551b4a0239ab452ef5f638ab172ccfbd0a0c617',\n  '0x70a8c0b560b4655c3a7c68c0bb76cf9fc42484a3bb73c5fed02a5fb4297965b6',\n  '0x56c812dccd84620292a18a829158ba20fef49e52efa5794c58d7d2780148fc23',\n  '0x72ab702376864dba1eb761a6937ab1d9fd02e607043d7d6434bb3f342b220a73',\n  '0xd78e55f09de9c1869064135807c1514b2b7f905b209cc570ecd52e04b03658ea',\n  '0x752c1557a4edaa74f9c6dd7c166ed91efce14ed906471641373f2a7b0284c1dd',\n  '0x0a6d99c8e50b86556ab7cb84f513e100421fbf30bfec67cdd18ce72025531993',\n  '0x6813bdf5e24e6b5dba7bf43da893b892b772ede62fd44dd2b64a3117337bbf1f',\n  '0x3de42f758236bfb794df199d9e8458379d3712d2ec688e2e5ff3c3df5f958fa1',\n  '0xc3dd13ceaf2f9de125cb236a3dbcf79c0c1f758ab6187ceda684e38455df61d3',\n  '0xd9335b69d0a9912557e1a9ede125108931bcab6aee6874f25ff38bd7f4e15b53',\n  '0x28f4d6a102a425f323ab09b3df79245cc107af12750359a3abff684eda8ccab4',\n  '0x96e311f6dc7880938a832d817d9c7bf5362db1c11b1aa5c7477029ec1a67fddb',\n  '0x6080466f782d79cf5e369d7ddb9dfad0a18d3305f9175f5dda9f018379dfa09b',\n  '0x02e00e22814427e254d8f3864e3c2fc7d4df8f5a880a02acd453e7ed266d34f3',\n  '0x7227d090de5230b94bb1276b3f7f88637c5f81ca78611dd688abaad8f444f994',\n  '0x35e984b55982c5ff052a556f4222d68c8418b30fef2a492a54fdc2932d37d922',\n  '0x7138e0ddbabc0a60acd45beab2de3b358b53de74f4232f39de107e6385948574',\n  '0x8e5d65220543375a787871bf75fd97ac5e92ab19e4e3966f8cd10e626a2a60a7',\n  '0x93368c81a1b5ae7bdda5f6d4438a468d021473bb87f2497fa9182919da4b0c94',\n  '0x4427153487539ae730ef8efea808c07bb204874254f1c2122c10061f45b9f3c6',\n  '0x435c11202ac6185b21b8db4fb611239f88b15a9fabd592881dcdc8e1d5699b1f',\n  '0xbd8906d0befd6ee002dde561784391592d87700d5e056feb55edeef379b0818e',\n  '0x8b2e8c033e6552fc84097959758d282fefef91b1fb14af4030000b9b9c0e4002',\n  '0xb0bce44cf9775397a5165866ba30bd3e08d803361e07dcd13836b0e6bac90115',\n  '0x4d498fe8a5c041a5b7db76193e7d8b892f0671e51ce96428ceb106ff3169a7c4',\n  '0x315d843fb171162091c0b48bcdf9e7b6cd501e5e7b95939008307e1528fe47b9',\n  '0xd7dffe2c62f550564eb39c36bcf0d6c5e42a81b465588d2130f0ea8069a7032e',\n  '0xe92b04c68d583298f3c4b7bcc2950e1eb87c1f07c3d1ebb882f58b1c859569d4',\n  '0x8d3f0ae15560c62602003b3ae3ac315225ce3efc5b8f1095f879874c57314bba',\n  '0x586842c544b265525a27f2f69b24e8ea8e04d449f5da3b8382f77b9abffa6e20',\n  '0x09a8b20b3de23b8f661e388e6541aa4e18b39edf7e2f0926e4b3763c82fee1e2',\n  '0xb79056285d7d62718d9b1f19087cf246f6fa4bd54b59fefb6e53674eb036819f',\n  '0x910bcc08eeca45f11593fe7b3aa808213a144ddcc952bd46480ebc827100def2',\n  '0xb236556aad9e923c4550fee8bba81c41c7536853354ebd67df2df39d0805dbc1',\n  '0x4f47385534d844365d9ec1642313713df7b50200d1934ff8500f021a4e50f0e1',\n  '0xc234e7aaa70f35381cce4ed61eb5fddebb86a1cb00ded43da6bf60e1da75ffe5',\n  '0x2cc4c39b7274f840719c07a65f6004a43a28545052fb79611568b94f8f286246',\n  '0x0dde40a5b8a6459a903a69c380e8dd1f5e2204834db7257d919d05cf5fb5b60e',\n  '0x0947712b8534d1c94dc99beb4471b5ff8a829146ac805a84899516ba7c2b921b',\n  '0x89eacd1f0cddb88b7eef5e29fb4ec02ec2c18091e032a0c678183f525e962e1b',\n  '0x3c95de2b959ef104f5237e7c7d827c84b7609e1c653d558d87c0d25919480c2b',\n  '0x84293ae420c269d3c6c1545a925de8110a2682d05580c02908eb599d93e88933',\n  '0x517aee0b4eb5683ea2ee6eea71ab1185a0d9fcbfdf32635fb7e3a00b43ed6105',\n  '0x7daee2949ac85d2f3dcba4c2d45a4841c4ff53c6f9280f01627e97120fdfe9da',\n  '0xee930d1872b327df3860ecd73230f947e6f580ac6d0dadc682a74dc8a4982dc9',\n  '0x302dd9fb18d7eb42ae6fb33885fd29d19f6994fffcdcb9aef2d7cd736ad62497',\n  '0xca6b572cc14692953bac2ac3a122bb825dee217d2fc06a36b45ca25989f70019',\n  '0x11dc7a8b213bb58657d84da0d5a3cdff873dde18be19b2b644cf0b3e115b66d1',\n  '0x8500d23729472f0c32264279081bee65e632c933cdc8f8cf55e763375f205fdb',\n  '0x01bd276fa345583afe6900dd0adca011f2403698773b885959b9a029f05b3c57',\n  '0x2d8a7f754f9061e593e0cc0c2837cccc385b5f8b78c0229c0bdb9896d88b4433',\n  '0x7abab9115123f9e5741aea38ea067c74dfa8b6092c8532dbcc8989f7a8d83a92',\n  '0x472b25279325695c81860fe0d64ac8b7042d1c84ea8e859c97e4acba9d586925',\n  '0x606f6a5d814a6fe0e19e092b15ada33448e8b4ae7de97193d39fb88b5e22a2bc',\n  '0x026620c2765771542f2bbe43dde1bbcd1961d7ca42aee878b7003bd58fbcdfa5',\n  '0xa7b5e4bc48f40cc2e6e7136ed5335b1e714b3108bfa3e38ba11337260bcc4a11',\n  '0x8450ab03bb68dcef8a02de079ea430859d8fe6b676d2766d2d0e9b51ef98deb3',\n  '0xf4cadad2be2ab909a67f64e6092caa80758b6c705c694993fe751c60a439e194',\n  '0x853fdf59b3e0d9d8fa9d05908df3d210d4e0ace89623d8c0d263df4e2c28d29e',\n  '0xcf879c7ed93fed3ffe32896a2f0f47b04b061a3553b1a29137885e2c2ce89137',\n  '0x90ee386b48c1f38ed4bd7892f79b4305a98f3f7fd6d3b6ff086737dcf27cc57d',\n  '0xa9bae751ffff6b3d2c6aff1076a3a8ec83f993f9c103c783c59bc6d994f903af',\n  '0xf2ba487dff86adcdb3de547fb379c76c529d3e281af8c4f0a410778bd82d1667',\n  '0xa2059864db657d873b0143d3d7d00835791eead71bd51b3a9f5552eec4222b4e',\n  '0x011518c2db496ca7aad11d852b07504703925fa5e068df9002480af49bb5a9cf',\n  '0xa94526a2fec1b0fad05cbbb809b7572f4489fad26eb186900f029b9131734587',\n  '0x0a1c8ea4623415a005e01c2b9b7d162be9b999b75a3ca7c25b919be63a5653e7',\n  '0x38d390dfca745c9d32032db845c4550e67fb271065b042778cc04c94d588d3ee',\n  '0xdb3575e62edb3032bbdaee45a7a65d228fc7f5cca2c5b7aa0955cc9df8a09ecb',\n  '0xc27d518fd5a69f2f7917988162e3b707b52e4c17143ff07737a158f19d272819',  // 99\n];\n\nexport const VERIFY_DOMAIN_WITNESS: any = {\n  \"localhost\": \"0x0636c417755E3ae25C6c166D181c0607F4C572A3\",\n  \"sepolia\": \"0x0636c417755E3ae25C6c166D181c0607F4C572A3\",\n  \"base\": \"0x0636c417755E3ae25C6c166D181c0607F4C572A3\",\n  \"base_staging\": \"0x0636c417755E3ae25C6c166D181c0607F4C572A3\",\n};\n\n\nexport const ALLOWED_ADDRESSES_ENABLED: any = {\n  \"localhost\": false,\n  \"sepolia\": false,\n  \"base\": false,\n  \"base_staging\": false,\n};\n\nexport const ALLOWED_ADDRESSES: any = {\n  \"localhost\": [],\n  \"sepolia\": [],\n  \"base\": [],\n  \"base_staging\": [],\n};\n\n// USDC\nexport const USDC: any = {\n  \"base\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n  \"base_staging\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n};\n\n// For Goerli and localhost\nexport const USDC_MINT_AMOUNT = usdc(1000000);\nexport const USDC_RECIPIENT = \"0x1d2033DC6720e3eCC14aBB8C2349C7ED77E831ad\";\n\n\nexport const FROM_EMAIL = {\n  \"namecheap\": \"support@namecheap.com\",\n};\n\n// Deployment Parameters\nexport const SERVER_KEY_HASH = {\n  \"namecheap\": [\n    \"0x0db7730bdd90c823601ed32395c8b2f3307fd4adc477ca22bf3ed406c1b3ae4a\", // selector: s1\n  ]\n};"
  },
  {
    "path": "contracts-domain/deployments/sepolia/.chainId",
    "content": "11155111"
  },
  {
    "path": "contracts-domain/deployments/sepolia/ClaimVerifier.json",
    "content": "{\n  \"address\": \"0x71D6e2056e7138F1F489EE98658D4832348b3435\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"maxValues\",\n          \"type\": \"uint8\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"extractProviderHash\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"extractAllFromContext\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"prefix\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"extractFieldFromContext\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"data\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"target\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"findSubstringEndIndex\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd2d2a832ea42941f6b1c31aded89efd24876d23349e233491673b88916d7458b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x71D6e2056e7138F1F489EE98658D4832348b3435\",\n    \"transactionIndex\": 34,\n    \"gasUsed\": \"925596\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xb0ae55b42e3486408d5a660346321241043f2a6febd33ec7a6f62be2bb00934d\",\n    \"transactionHash\": \"0xd2d2a832ea42941f6b1c31aded89efd24876d23349e233491673b88916d7458b\",\n    \"logs\": [],\n    \"blockNumber\": 6746721,\n    \"cumulativeGasUsed\": \"9193668\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"maxValues\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"extractProviderHash\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"extractAllFromContext\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"prefix\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"extractFieldFromContext\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"findSubstringEndIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"extractAllFromContext(string,uint8,bool)\\\":{\\\"params\\\":{\\\"data\\\":\\\"Context string from which target value needs to be extracted\\\",\\\"extractProviderHash\\\":\\\"Extracts and returns providerHash if true\\\",\\\"maxValues\\\":\\\"Maximum number of values to be extracted from extractedParameters\\\"}},\\\"extractFieldFromContext(string,string)\\\":{\\\"params\\\":{\\\"data\\\":\\\"Context string from which target value needs to be extracted\\\",\\\"prefix\\\":\\\"Prefix of the target value that needs to be extracted            \\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"extractAllFromContext(string,uint8,bool)\\\":{\\\"notice\\\":\\\"Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with  two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with  key-value pairs. This function returns extracted individual values from extractedParameters along  with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values to be extracted from extractedParameters. In most cases, one would need to extract all values from extractedParameters and providerHash, hence use this function over calling extractFieldFromContext  multiple times. \\\"},\\\"extractFieldFromContext(string,string)\\\":{\\\"notice\\\":\\\"Extracts given target field value from context in claims. Extracts only ONE value. Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"' Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\"},\\\"findSubstringEndIndex(string,string)\\\":{\\\"notice\\\":\\\"Find the end index of target string in the data string. Returns the end index + 1 if the target string in the data string if found. Returns type(uint256).max if: - Target is longer than data - Target is not found Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/ClaimVerifier.sol\\\":\\\"ClaimVerifier\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ClaimVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary ClaimVerifier {\\\\n\\\\n    /**\\\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\\\n     * the target string in the data string if found. Returns type(uint256).max if:\\\\n     * - Target is longer than data\\\\n     * - Target is not found\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     */\\\\n    function findSubstringEndIndex(\\\\n        string memory data,\\\\n        string memory target\\\\n    ) public pure returns (uint256) {\\\\n        bytes memory dataBytes = bytes(data);\\\\n        bytes memory targetBytes = bytes(target);\\\\n\\\\n        if (dataBytes.length < targetBytes.length) {\\\\n            return type(uint256).max;\\\\n        }\\\\n\\\\n        // Find start of target\\\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\\\n            bool isMatch = true;\\\\n\\\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\\\n                if (dataBytes[i + j] != targetBytes[j]) {\\\\n                    isMatch = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n\\\\n            if (isMatch) {\\\\n                return i + targetBytes.length; // Return end index + 1\\\\n            }\\\\n        }\\\\n\\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    /**\\\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\\\n     * Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"'\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *\\\\n     * @param data      Context string from which target value needs to be extracted\\\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\\\n     */\\\\n    function extractFieldFromContext(\\\\n        string memory data,\\\\n        string memory prefix\\\\n    ) public pure returns (string memory) {\\\\n        // Find end index of prefix; which is the start index of the value\\\\n        uint256 start = findSubstringEndIndex(data, prefix);\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        if (start == dataBytes.length) {\\\\n            return \\\\\\\"\\\\\\\"; // Prefix not found. Malformed or missing message\\\\n        }\\\\n        \\\\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\\\n        uint256 end = start;\\\\n        while (\\\\n            end < dataBytes.length &&\\\\n            !(dataBytes[end] == '\\\\\\\"' && dataBytes[end - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")\\\\n        ) {\\\\n            end++;\\\\n        }\\\\n        if (end <= start) {\\\\n            return \\\\\\\"\\\\\\\"; // Malformed or missing message\\\\n        }\\\\n        bytes memory contextMessage = new bytes(end - start);\\\\n        for (uint i = start; i < end; i++) {\\\\n            contextMessage[i - start] = dataBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\\\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\\\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\\\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\\\n     * multiple times.\\\\n     * \\\\n     * @param data                  Context string from which target value needs to be extracted\\\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\\\n     */\\\\n    function extractAllFromContext(\\\\n        string memory data,\\\\n        uint8 maxValues,\\\\n        bool extractProviderHash\\\\n    ) public pure returns (string[] memory) {\\\\n        \\\\n        require(maxValues > 0, \\\\\\\"Max values must be greater than 0\\\\\\\");\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        uint index = 0;\\\\n\\\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"');\\\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\\\\\"Extraction failed. Malformed extractedParameters\\\\\\\");\\\\n        }\\\\n        index += extractedParametersBytes.length;\\\\n\\\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"'\\\\n        uint valuesFound = 0;\\\\n    \\\\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\\\n\\\\n        while (\\\\n            index < dataBytes.length\\\\n        ) {\\\\n            // Keep incrementing until '\\\\\\\"', escaped quotes are not considered\\\\n            if (!(dataBytes[index] == '\\\\\\\"' && dataBytes[index - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")) {\\\\n                index++;\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isValue) {\\\\n                // \\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\" (3 chars)\\\\n                require(dataBytes[index + 1] == \\\\\\\":\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"', \\\\\\\"Extraction failed. Malformed data 1\\\\\\\");\\\\n                index += 3;     // move it after \\\\\\\\\\\\\\\"\\\\n                isValue = true;\\\\n                valueIndices[2 * valuesFound] = index;      // start index\\\\n            } else {\\\\n                // \\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\" (3 chars) or \\\\\\\\\\\\\\\"}, (3 chars)\\\\n                // \\\\\\\\\\\\\\\"}} is not supported, there should always be a providerHash\\\\n                require(\\\\n                    dataBytes[index + 1] == \\\\\\\",\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"' ||  \\\\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\\\\\",\\\\\\\",\\\\n                    \\\\\\\"Extraction failed. Malformed data 2\\\\\\\"\\\\n                );\\\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\\\n                valuesFound++;\\\\n\\\\n                if (dataBytes[index + 1] == \\\\\\\",\\\\\\\") {\\\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\\\n                    require(valuesFound != maxValues, \\\\\\\"Extraction failed. Exceeded max values\\\\\\\");\\\\n                    index += 3;\\\\n                    isValue = false;\\\\n                } else {    // index + 1 = \\\\\\\"}\\\\\\\"\\\\n                    index += 3;\\\\n                    break;  // end of extractedParameters\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        if (extractProviderHash) {\\\\n            bytes memory providerHashParamBytes = bytes(\\\\\\\"\\\\\\\\\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"\\\\\\\");\\\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\\\\\"Extraction failed. Malformed providerHash\\\\\\\");\\\\n            }\\\\n            index += providerHashParamBytes.length;\\\\n            \\\\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\\\n            valueIndices[2 * valuesFound] = index;\\\\n            // Keep incrementing until '\\\\\\\"'\\\\n            while (\\\\n                index < dataBytes.length && dataBytes[index] != '\\\\\\\"'\\\\n            ) {\\\\n                index++;\\\\n            }\\\\n            valueIndices[2 * valuesFound + 1] = index;\\\\n            valuesFound++;\\\\n        }   \\\\n        \\\\n        string[] memory values = new string[](valuesFound);\\\\n        \\\\n        for (uint i = 0; i < valuesFound; i++) {\\\\n            uint startIndex = valueIndices[2 * i];\\\\n            uint endIndex = valueIndices[2 * i + 1];\\\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\\\n            for (uint j = startIndex; j < endIndex; j++) {\\\\n                contextValue[j - startIndex] = dataBytes[j];\\\\n            }\\\\n            values[i] = string(contextValue);\\\\n        }\\\\n\\\\n        return values;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6a8d456c3b2c5ab5a475279a2f0f103faff3cb2d6abb2ce2029cd4265b904e\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523461001e57604051610fc4610024823930815050610fc490f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80633755667e146100425780634be6d4f81461003d57634da485c6036100f65761030c565b6102e9565b6101ca565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761007f57604052565b610047565b9061009861009160405190565b928361005d565b565b67ffffffffffffffff811161007f57602090601f01601f19160190565b0190565b90826000939282370152565b909291926100dc6100d78261009a565b610084565b938185526020850190828401116100f657610098926100bb565b600080fd5b9080601f830112156100f657816020610116933591016100c7565b90565b9190916040818403126100f657803567ffffffffffffffff81116100f657836101439183016100fb565b92602082013567ffffffffffffffff81116100f65761011692016100fb565b60005b8381106101755750506000910152565b8181015183820152602001610165565b6101a66101af6020936100b79361019a815190565b80835293849260200190565b95869101610162565b601f01601f191690565b602080825261011692910190610185565b6101ed6101e16101db366004610119565b9061054f565b604051918291826101b9565b0390f35b60ff81165b036100f657565b90503590610098826101f1565b8015156101f6565b905035906100988261020a565b90916060828403126100f657813567ffffffffffffffff81116100f65761024b846101169285016100fb565b9361025981602086016101fd565b93604001610212565b9061011691610185565b90610282610278835190565b8083529160200190565b90816102946020830284019460200190565b926000915b8383106102a857505050505090565b909192939460206102cb6102c483856001950387528951610262565b9760200190565b9301930191939290610299565b60208082526101169291019061026c565b6101ed6103006102fa36600461021f565b91610a12565b604051918291826102d8565b6101ed61032361031d366004610119565b906103bf565b6040519182918290815260200190565b6101166101166101169290565b634e487b7160e01b600052601160045260246000fd5b60001981146103655760010190565b610340565b9190610375565b9290565b820391821161036557565b9190820180921161036557565b634e487b7160e01b600052603260045260246000fd5b906103ac825190565b8110156103ba570160200190565b61038d565b6103d26103d6916103ce600090565b5090565b9190565b81516103e66103d2610116845190565b106104fb576000916103f783610333565b61040d610116610405845190565b85519061036a565b81116104f4576001808061042087610333565b905b61044b575b505061043b5761043690610356565b6103f7565b9151610116935090505b90610380565b61045c610116879894969395985190565b8110806104ed575b156104e25761048d61047f610479838a610380565b846103a3565b516001600160f81b03191690565b6104bb6104ad6104a061047f858b6103a3565b6001600160f81b03191690565b916001600160f81b03191690565b036104d4576104c990610356565b839194929693610422565b509250809491503880610427565b819492969350610427565b5084610464565b5050501990565b505060001990565b906105106100d78361009a565b918252565b6101166000610503565b610116610515565b369037565b9061009861054261053c84610503565b9361009a565b601f190160208401610527565b919061037161056791610560606090565b50846103bf565b90610573610116835190565b831461067f57825b610586610116845190565b811080610619575b156105a15761059c90610356565b61057b565b918383111561060d576105bc6105b7858561036a565b61052c565b91845b845b811015610601576105fa816105dc61047f6105c194876103a3565b6105f46105e98a8461036a565b9160001a91886103a3565b53610356565b90506105bf565b50935050610116915090565b5091505061011661051f565b5061062761047f82856103a3565b610634601160f91b6104ad565b1480610646575b1561058e565b61058e565b5061064161066961047f61066361065d6001610333565b8561036a565b866103a3565b610676601760fa1b6104ad565b1415905061063b565b91505061011661051f565b6106976101166101169290565b60ff1690565b156106a457565b60405162461bcd60e51b815260206004820152602160248201527f4d61782076616c756573206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b6106fd6019610503565b7f7b22657874726163746564506172616d6574657273223a7b2200000000000000602082015290565b6101166106f3565b1561073557565b60405162461bcd60e51b815260206004820152603060248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642065787460448201526f726163746564506172616d657465727360801b6064820152608490fd5b6107a29060ff165b9160ff1690565b029060ff821691820361036557565b6107bd9060ff1661079b565b019060ff821161036557565b6101166101166101169260ff1690565b67ffffffffffffffff811161007f5760208091020190565b906105106100d7836107d9565b9061009861054261080e846107f1565b936107d9565b1561081b57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526230901960e91b6064820152608490fd5b8181029291811591840414171561036557565b90610888825190565b8110156103ba576020809102010190565b156108a057565b60405162461bcd60e51b815260206004820152602660248201527f45787472616374696f6e206661696c65642e204578636565646564206d61782060448201526576616c75657360d01b6064820152608490fd5b156108fb57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526261203160e81b6064820152608490fd5b6109566010610503565b6f11383937bb34b232b92430b9b4111d1160811b602082015290565b61011661094c565b1561098157565b60405162461bcd60e51b815260206004820152602960248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642070726f6044820152680ecd2c8cae490c2e6d60bb1b6064820152608490fd5b60005b8281106109e757505050565b6060828201526020016109db565b90610098610a0561080e846107f1565b601f1901602084016109d8565b90610a2f600092610116610a258561068a565b60ff85161161069d565b93610a3983610333565b91610a42610726565b93835b610a50610116875190565b811015610a975780610a8d610a7461047f610a6e610a92958a610380565b8c6103a3565b610a876104ad6104a061047f868d6103a3565b1461072e565b610356565b610a45565b5092610445610aa99295979693975190565b918093610ab582610333565b968315610f7a57610af2610aed610ae86002610ae3610add610ad7600161068a565b886107b1565b9161068a565b610793565b6107c9565b6107fe565b955b610aff610116895190565b861015610f6c57610b1361047f878a6103a3565b610b20601160f91b6104ad565b1480610f39575b155b610f2957610bd757610b7c600195610b5561047f610b4f610b498a610333565b84610380565b8b6103a3565b610b62601d60f91b6104ad565b1480610ba5575b610b72906108f4565b6104456003610333565b94610ba086610b9d610b978c610b926002610333565b61086c565b8a61087f565b52565b610af4565b50610b72610bc261047f610a6e610bbc6002610333565b85610380565b610bcf601160f91b6104ad565b149050610b69565b93610c42600198610bf661047f610b4f610bf08d610333565b86610380565b610c03600b60fa1b6104ad565b1480610f02575b8015610ea9575b610c1a90610814565b610a8d83610b9d610c3c8d610445610c3687610b926002610333565b91610333565b8b61087f565b610c5b61047f610c55610bbc849c610333565b8a6103a3565b610c68600b60fa1b6104ad565b03610c8f5790610b72610c8892610c816103d2866107c9565b1415610899565b9382610af4565b50610ca7915061044560039897969598949394610333565b905b610d9d575b50610cb8846109f5565b94610cc282610333565b855b811015610d95576002610cf182610b92610ceb610ce7610b9784610b9288610333565b5190565b93610333565b610d0c610ce7610d0660019361044585610333565b8861087f565b91610d1a6105b7828561036a565b9281835b610d57575b50505050610cc491610d35610d509290565b610d3f828b61087f565b52610d4a818a61087f565b50610356565b9050610cc2565b8982821015610d8f5781610d7261047f8794610d89946103a3565b6105f4610d7f878461036a565b918c1a91896103a3565b90610d1e565b50610d23565b509350505050565b91949093610da9610972565b94610db381610333565b610dbe610116885190565b811015610e035780610a8d88610df86104ad6104a061047f86610df261047f8f8f610dfe9c610dec91610380565b906103a3565b956103a3565b1461097a565b610db3565b509392610445610e1592969793975190565b9384610e33600296610b9d610e2d85610b928b610333565b8661087f565b610e3e610116855190565b811080610e87575b15610e5957610e5490610356565b610e33565b610a8d90610b9d610e2d610e7685610b92610e8098999a9b610333565b6104456001610333565b9238610cae565b50610e9561047f82866103a3565b610ea2601160f91b6104ad565b1415610e46565b50610ebc61047f610b4f610bf08d610333565b610ec9607d60f81b6104ad565b148015610c115750610c1a610eed61047f610a6e610ee76002610333565b87610380565b610efa600b60fa1b6104ad565b149050610c11565b50610f1661047f610b4f610bf06002610333565b610f23601160f91b6104ad565b14610c0a565b94610f3390610356565b94610af4565b50610b29610f5661047f610b4f610f506001610333565b8a61036a565b610f63601760fa1b6104ad565b14159050610b27565b509695949391929050610ca9565b610af2610aed610ae884610ae3600261068a56fea2646970667358221220df8afdb50247b87e32995ce364cdd9d06fd8e2da0fc4e9ccb71b755e2d49a76864736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80633755667e146100425780634be6d4f81461003d57634da485c6036100f65761030c565b6102e9565b6101ca565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761007f57604052565b610047565b9061009861009160405190565b928361005d565b565b67ffffffffffffffff811161007f57602090601f01601f19160190565b0190565b90826000939282370152565b909291926100dc6100d78261009a565b610084565b938185526020850190828401116100f657610098926100bb565b600080fd5b9080601f830112156100f657816020610116933591016100c7565b90565b9190916040818403126100f657803567ffffffffffffffff81116100f657836101439183016100fb565b92602082013567ffffffffffffffff81116100f65761011692016100fb565b60005b8381106101755750506000910152565b8181015183820152602001610165565b6101a66101af6020936100b79361019a815190565b80835293849260200190565b95869101610162565b601f01601f191690565b602080825261011692910190610185565b6101ed6101e16101db366004610119565b9061054f565b604051918291826101b9565b0390f35b60ff81165b036100f657565b90503590610098826101f1565b8015156101f6565b905035906100988261020a565b90916060828403126100f657813567ffffffffffffffff81116100f65761024b846101169285016100fb565b9361025981602086016101fd565b93604001610212565b9061011691610185565b90610282610278835190565b8083529160200190565b90816102946020830284019460200190565b926000915b8383106102a857505050505090565b909192939460206102cb6102c483856001950387528951610262565b9760200190565b9301930191939290610299565b60208082526101169291019061026c565b6101ed6103006102fa36600461021f565b91610a12565b604051918291826102d8565b6101ed61032361031d366004610119565b906103bf565b6040519182918290815260200190565b6101166101166101169290565b634e487b7160e01b600052601160045260246000fd5b60001981146103655760010190565b610340565b9190610375565b9290565b820391821161036557565b9190820180921161036557565b634e487b7160e01b600052603260045260246000fd5b906103ac825190565b8110156103ba570160200190565b61038d565b6103d26103d6916103ce600090565b5090565b9190565b81516103e66103d2610116845190565b106104fb576000916103f783610333565b61040d610116610405845190565b85519061036a565b81116104f4576001808061042087610333565b905b61044b575b505061043b5761043690610356565b6103f7565b9151610116935090505b90610380565b61045c610116879894969395985190565b8110806104ed575b156104e25761048d61047f610479838a610380565b846103a3565b516001600160f81b03191690565b6104bb6104ad6104a061047f858b6103a3565b6001600160f81b03191690565b916001600160f81b03191690565b036104d4576104c990610356565b839194929693610422565b509250809491503880610427565b819492969350610427565b5084610464565b5050501990565b505060001990565b906105106100d78361009a565b918252565b6101166000610503565b610116610515565b369037565b9061009861054261053c84610503565b9361009a565b601f190160208401610527565b919061037161056791610560606090565b50846103bf565b90610573610116835190565b831461067f57825b610586610116845190565b811080610619575b156105a15761059c90610356565b61057b565b918383111561060d576105bc6105b7858561036a565b61052c565b91845b845b811015610601576105fa816105dc61047f6105c194876103a3565b6105f46105e98a8461036a565b9160001a91886103a3565b53610356565b90506105bf565b50935050610116915090565b5091505061011661051f565b5061062761047f82856103a3565b610634601160f91b6104ad565b1480610646575b1561058e565b61058e565b5061064161066961047f61066361065d6001610333565b8561036a565b866103a3565b610676601760fa1b6104ad565b1415905061063b565b91505061011661051f565b6106976101166101169290565b60ff1690565b156106a457565b60405162461bcd60e51b815260206004820152602160248201527f4d61782076616c756573206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b6106fd6019610503565b7f7b22657874726163746564506172616d6574657273223a7b2200000000000000602082015290565b6101166106f3565b1561073557565b60405162461bcd60e51b815260206004820152603060248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642065787460448201526f726163746564506172616d657465727360801b6064820152608490fd5b6107a29060ff165b9160ff1690565b029060ff821691820361036557565b6107bd9060ff1661079b565b019060ff821161036557565b6101166101166101169260ff1690565b67ffffffffffffffff811161007f5760208091020190565b906105106100d7836107d9565b9061009861054261080e846107f1565b936107d9565b1561081b57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526230901960e91b6064820152608490fd5b8181029291811591840414171561036557565b90610888825190565b8110156103ba576020809102010190565b156108a057565b60405162461bcd60e51b815260206004820152602660248201527f45787472616374696f6e206661696c65642e204578636565646564206d61782060448201526576616c75657360d01b6064820152608490fd5b156108fb57565b60405162461bcd60e51b815260206004820152602360248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642064617460448201526261203160e81b6064820152608490fd5b6109566010610503565b6f11383937bb34b232b92430b9b4111d1160811b602082015290565b61011661094c565b1561098157565b60405162461bcd60e51b815260206004820152602960248201527f45787472616374696f6e206661696c65642e204d616c666f726d65642070726f6044820152680ecd2c8cae490c2e6d60bb1b6064820152608490fd5b60005b8281106109e757505050565b6060828201526020016109db565b90610098610a0561080e846107f1565b601f1901602084016109d8565b90610a2f600092610116610a258561068a565b60ff85161161069d565b93610a3983610333565b91610a42610726565b93835b610a50610116875190565b811015610a975780610a8d610a7461047f610a6e610a92958a610380565b8c6103a3565b610a876104ad6104a061047f868d6103a3565b1461072e565b610356565b610a45565b5092610445610aa99295979693975190565b918093610ab582610333565b968315610f7a57610af2610aed610ae86002610ae3610add610ad7600161068a565b886107b1565b9161068a565b610793565b6107c9565b6107fe565b955b610aff610116895190565b861015610f6c57610b1361047f878a6103a3565b610b20601160f91b6104ad565b1480610f39575b155b610f2957610bd757610b7c600195610b5561047f610b4f610b498a610333565b84610380565b8b6103a3565b610b62601d60f91b6104ad565b1480610ba5575b610b72906108f4565b6104456003610333565b94610ba086610b9d610b978c610b926002610333565b61086c565b8a61087f565b52565b610af4565b50610b72610bc261047f610a6e610bbc6002610333565b85610380565b610bcf601160f91b6104ad565b149050610b69565b93610c42600198610bf661047f610b4f610bf08d610333565b86610380565b610c03600b60fa1b6104ad565b1480610f02575b8015610ea9575b610c1a90610814565b610a8d83610b9d610c3c8d610445610c3687610b926002610333565b91610333565b8b61087f565b610c5b61047f610c55610bbc849c610333565b8a6103a3565b610c68600b60fa1b6104ad565b03610c8f5790610b72610c8892610c816103d2866107c9565b1415610899565b9382610af4565b50610ca7915061044560039897969598949394610333565b905b610d9d575b50610cb8846109f5565b94610cc282610333565b855b811015610d95576002610cf182610b92610ceb610ce7610b9784610b9288610333565b5190565b93610333565b610d0c610ce7610d0660019361044585610333565b8861087f565b91610d1a6105b7828561036a565b9281835b610d57575b50505050610cc491610d35610d509290565b610d3f828b61087f565b52610d4a818a61087f565b50610356565b9050610cc2565b8982821015610d8f5781610d7261047f8794610d89946103a3565b6105f4610d7f878461036a565b918c1a91896103a3565b90610d1e565b50610d23565b509350505050565b91949093610da9610972565b94610db381610333565b610dbe610116885190565b811015610e035780610a8d88610df86104ad6104a061047f86610df261047f8f8f610dfe9c610dec91610380565b906103a3565b956103a3565b1461097a565b610db3565b509392610445610e1592969793975190565b9384610e33600296610b9d610e2d85610b928b610333565b8661087f565b610e3e610116855190565b811080610e87575b15610e5957610e5490610356565b610e33565b610a8d90610b9d610e2d610e7685610b92610e8098999a9b610333565b6104456001610333565b9238610cae565b50610e9561047f82866103a3565b610ea2601160f91b6104ad565b1415610e46565b50610ebc61047f610b4f610bf08d610333565b610ec9607d60f81b6104ad565b148015610c115750610c1a610eed61047f610a6e610ee76002610333565b87610380565b610efa600b60fa1b6104ad565b149050610c11565b50610f1661047f610b4f610bf06002610333565b610f23601160f91b6104ad565b14610c0a565b94610f3390610356565b94610af4565b50610b29610f5661047f610b4f610f506001610333565b8a61036a565b610f63601760fa1b6104ad565b14159050610b27565b509695949391929050610ca9565b610af2610aed610ae884610ae3600261068a56fea2646970667358221220df8afdb50247b87e32995ce364cdd9d06fd8e2da0fc4e9ccb71b755e2d49a76864736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"extractAllFromContext(string,uint8,bool)\": {\n        \"params\": {\n          \"data\": \"Context string from which target value needs to be extracted\",\n          \"extractProviderHash\": \"Extracts and returns providerHash if true\",\n          \"maxValues\": \"Maximum number of values to be extracted from extractedParameters\"\n        }\n      },\n      \"extractFieldFromContext(string,string)\": {\n        \"params\": {\n          \"data\": \"Context string from which target value needs to be extracted\",\n          \"prefix\": \"Prefix of the target value that needs to be extracted            \"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"extractAllFromContext(string,uint8,bool)\": {\n        \"notice\": \"Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with  two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with  key-value pairs. This function returns extracted individual values from extractedParameters along  with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values to be extracted from extractedParameters. In most cases, one would need to extract all values from extractedParameters and providerHash, hence use this function over calling extractFieldFromContext  multiple times. \"\n      },\n      \"extractFieldFromContext(string,string)\": {\n        \"notice\": \"Extracts given target field value from context in claims. Extracts only ONE value. Pass prefix formatted with quotes, for example '\\\"providerHash\\\\\\\":\\\\\\\"' Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\"\n      },\n      \"findSubstringEndIndex(string,string)\": {\n        \"notice\": \"Find the end index of target string in the data string. Returns the end index + 1 if the target string in the data string if found. Returns type(uint256).max if: - Target is longer than data - Target is not found Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [],\n    \"types\": null\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/DomainExchange.json",
    "content": "{\n  \"address\": \"0xC8cd114C6274Ef1066840337E7678BC9731BEa68\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidSettlementPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidRefundPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_allowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"allowedAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressAddedToAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"allowedAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AddressRemovedFromAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"AllowlistDisabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [],\n      \"name\": \"AllowlistEnabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"price\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newPrice\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidPriceIncreased\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newBidRefundPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidRefundPeriodUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newBidSettlementPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidSettlementPeriodUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"BidWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"FeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newFee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"FeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"instantAccept\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"InstantAcceptUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingDeleted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ListingDeletedByRegistry\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"newAskPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ListingUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"newMailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdapterUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RefundInitiated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"priceNetFees\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fees\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SaleFinalized\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"newTransferDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"TransferDomainProcessorUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_allowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"name\": \"addAddressesToAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"allowedAddresses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidRefundPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bidSettlementPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"bids\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"buyer\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"encryptedBuyerId\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"buyerIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"createdAt\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTimestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"price\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"refundInitiated\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"buyerReleaseFunds\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_buyerIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_encryptedBuyerId\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"createBid\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_saleEthRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_encryptionKey\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_dkimKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"createListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deleteListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"disableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"disableInstantAccept\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableInstantAccept\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"fee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"feeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"finalizeSale\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getAllowedSellers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_listingIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getListingBids\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"buyer\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"encryptedBuyerId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"buyerIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTimestamp\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"price\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"refundInitiated\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Bid\",\n              \"name\": \"bid\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"buyerInstantAcceptEnabled\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.BidDetailsWithId[][]\",\n          \"name\": \"bidInfo\",\n          \"type\": \"tuple[][]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_listingIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getListings\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"seller\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address payable\",\n                  \"name\": \"saleEthRecipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"dkimKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"encryptionKey\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"askPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"minBidPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"isActive\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"bids\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Listing\",\n              \"name\": \"listing\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n          \"name\": \"listingInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserBids\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"bidId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"buyer\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"encryptedBuyerId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"buyerIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTimestamp\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"price\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"refundInitiated\",\n                  \"type\": \"bool\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Bid\",\n              \"name\": \"bid\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"buyerInstantAcceptEnabled\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.BidDetailsWithId[]\",\n          \"name\": \"bidInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserListings\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"listingId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"seller\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address payable\",\n                  \"name\": \"saleEthRecipient\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"dkimKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"encryptionKey\",\n                  \"type\": \"bytes\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"domainId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"createdAt\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"askPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"minBidPrice\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bool\",\n                  \"name\": \"isActive\",\n                  \"type\": \"bool\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"bids\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct DomainExchange.Listing\",\n              \"name\": \"listing\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct DomainExchange.ListingWithId[]\",\n          \"name\": \"listingInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newPrice\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseBidPrice\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"_transferDomainProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IVerifiedDomainRegistry\",\n          \"name\": \"_verifiedDomainRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"initiateRefund\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"instantAcceptEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isAllowed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"listingCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"listings\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"seller\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"saleEthRecipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"encryptionKey\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"createdAt\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"askPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"minBidPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"isActive\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pauseMarketplace\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"registryRemoveListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"_disallowedAddresses\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"name\": \"removeAddressesFromAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"transferDomainProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unpauseMarketplace\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newBidRefundPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateBidRefundPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newBidSettlementPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateBidSettlementPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newFee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"updateFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_newFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_newAskPrice\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"_saleEthRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateMailServerKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ITransferDomainProcessor\",\n          \"name\": \"_transferDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateTransferDomainProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userBids\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userListings\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifiedDomainRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IVerifiedDomainRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"withdrawBid\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x813d0e36b36d0a5f0d4e46febff9cd1eefed9b91b62739e9110b0fd0b91384bb\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xC8cd114C6274Ef1066840337E7678BC9731BEa68\",\n    \"transactionIndex\": 52,\n    \"gasUsed\": \"4978143\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000001000020000000000001004000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x76e642f49e10dfd19554afc869e19a2743e1d87138f1474f31655734af439d27\",\n    \"transactionHash\": \"0x813d0e36b36d0a5f0d4e46febff9cd1eefed9b91b62739e9110b0fd0b91384bb\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 52,\n        \"blockNumber\": 6746717,\n        \"transactionHash\": \"0x813d0e36b36d0a5f0d4e46febff9cd1eefed9b91b62739e9110b0fd0b91384bb\",\n        \"address\": \"0xC8cd114C6274Ef1066840337E7678BC9731BEa68\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 108,\n        \"blockHash\": \"0x76e642f49e10dfd19554afc869e19a2743e1d87138f1474f31655734af439d27\"\n      },\n      {\n        \"transactionIndex\": 52,\n        \"blockNumber\": 6746717,\n        \"transactionHash\": \"0x813d0e36b36d0a5f0d4e46febff9cd1eefed9b91b62739e9110b0fd0b91384bb\",\n        \"address\": \"0xC8cd114C6274Ef1066840337E7678BC9731BEa68\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 109,\n        \"blockHash\": \"0x76e642f49e10dfd19554afc869e19a2743e1d87138f1474f31655734af439d27\"\n      }\n    ],\n    \"blockNumber\": 6746717,\n    \"cumulativeGasUsed\": \"19567195\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"25000000000000000\",\n    \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"180\",\n    \"180\",\n    []\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_allowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"allowedAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressAddedToAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"allowedAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddressRemovedFromAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"AllowlistDisabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"AllowlistEnabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidCreated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidPriceIncreased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newBidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidRefundPeriodUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newBidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidSettlementPeriodUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"BidWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"FeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newFee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"FeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"instantAccept\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"InstantAcceptUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingCreated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingDeleted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ListingDeletedByRegistry\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAskPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ListingUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"newMailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdapterUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Paused\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"RefundInitiated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"priceNetFees\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fees\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SaleFinalized\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"newTransferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"TransferDomainProcessorUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Unpaused\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_allowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"addAddressesToAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"allowedAddresses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidRefundPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bidSettlementPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"bids\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"buyerReleaseFunds\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"createBid\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"createListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deleteListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"disableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"disableInstantAccept\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableInstantAccept\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"fee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"feeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"internalType\\\":\\\"struct ITransferDomainProcessor.TransferProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"finalizeSale\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getAllowedSellers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_listingIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getListingBids\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Bid\\\",\\\"name\\\":\\\"bid\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"buyerInstantAcceptEnabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.BidDetailsWithId[][]\\\",\\\"name\\\":\\\"bidInfo\\\",\\\"type\\\":\\\"tuple[][]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_listingIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getListings\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"bids\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Listing\\\",\\\"name\\\":\\\"listing\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.ListingWithId[]\\\",\\\"name\\\":\\\"listingInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserBids\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"buyer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"encryptedBuyerId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"buyerIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"refundInitiated\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Bid\\\",\\\"name\\\":\\\"bid\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"buyerInstantAcceptEnabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.BidDetailsWithId[]\\\",\\\"name\\\":\\\"bidInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserListings\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"bids\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.Listing\\\",\\\"name\\\":\\\"listing\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct DomainExchange.ListingWithId[]\\\",\\\"name\\\":\\\"listingInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseBidPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"_transferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IVerifiedDomainRegistry\\\",\\\"name\\\":\\\"_verifiedDomainRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"initiateRefund\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"instantAcceptEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"listingCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"listings\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"seller\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"encryptionKey\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"createdAt\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"askPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minBidPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isActive\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"pauseMarketplace\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"paused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"registryRemoveListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"_disallowedAddresses\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"removeAddressesFromAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"transferDomainProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"unpauseMarketplace\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newBidRefundPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateBidRefundPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newBidSettlementPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateBidSettlementPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newFee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"updateFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_newFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_newAskPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address payable\\\",\\\"name\\\":\\\"_saleEthRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateMailServerKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ITransferDomainProcessor\\\",\\\"name\\\":\\\"_transferDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateTransferDomainProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userBids\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userListings\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifiedDomainRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IVerifiedDomainRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"withdrawBid\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Paused(address)\\\":{\\\"details\\\":\\\"Emitted when the pause is triggered by `account`.\\\"},\\\"Unpaused(address)\\\":{\\\"details\\\":\\\"Emitted when the pause is lifted by `account`.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAddressesToAllowlist(address[])\\\":{\\\"params\\\":{\\\"_allowedAddresses\\\":\\\"List of addresses allowed to call allow listed functions\\\"}},\\\"buyerReleaseFunds(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to release funds for\\\"}},\\\"createBid(uint256,bytes32,string)\\\":{\\\"params\\\":{\\\"_buyerIdHash\\\":\\\"The hashed buyerId which is also output as part of the transfer proof later\\\",\\\"_encryptedBuyerId\\\":\\\"The encrypted buyerId. Should be the same as the buyerId hashed\\\",\\\"_listingId\\\":\\\"The unique identifier of the listing to bid on\\\"}},\\\"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\\\":{\\\"params\\\":{\\\"_askPrice\\\":\\\"An asking price for the domain\\\",\\\"_dkimKeyHash\\\":\\\"The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\\",\\\"_domainId\\\":\\\"The unique identifier of the domain\\\",\\\"_encryptionKey\\\":\\\"The encryption key for buyers to encrypt the buyerId to\\\",\\\"_minBidPrice\\\":\\\"The minimum bid price for the domain\\\",\\\"_saleEthRecipient\\\":\\\"The address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\\\"}},\\\"deleteListing(uint256)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"The unique identifier of the listing to delete\\\"}},\\\"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\\\":{\\\"params\\\":{\\\"_proof\\\":\\\"The zk-email proof of domain transfer\\\"}},\\\"getListingBids(uint256[])\\\":{\\\"params\\\":{\\\"_listingIds\\\":\\\"An array of listingIds to fetch bids for\\\"}},\\\"getListings(uint256[])\\\":{\\\"params\\\":{\\\"_listingIds\\\":\\\"An array of listingIds to fetch details for\\\"}},\\\"getUserBids(address)\\\":{\\\"params\\\":{\\\"_user\\\":\\\"The address of the user to fetch bids for\\\"}},\\\"getUserListings(address)\\\":{\\\"params\\\":{\\\"_user\\\":\\\"The address of the user to fetch listings for\\\"}},\\\"increaseBidPrice(uint256,uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to increase the price for\\\",\\\"_newPrice\\\":\\\"The new price for the bid\\\"}},\\\"initialize(address,address,address)\\\":{\\\"params\\\":{\\\"_mailServerKeyHashAdapter\\\":\\\"The address of the mail server key hash adapter contract\\\",\\\"_transferDomainProcessor\\\":\\\"The address of the domain transfer processor contract\\\",\\\"_verifiedDomainRegistry\\\":\\\"The address of the verified domain registry contract\\\"}},\\\"initiateRefund(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to initiate refund for\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"paused()\\\":{\\\"details\\\":\\\"Returns true if the contract is paused, and false otherwise.\\\"},\\\"registryRemoveListing(uint256)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"Listing Id to remove\\\"}},\\\"removeAddressesFromAllowlist(address[])\\\":{\\\"params\\\":{\\\"_disallowedAddresses\\\":\\\"List of addresses being disallowed from calling allow listed functions\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"updateBidRefundPeriod(uint256)\\\":{\\\"params\\\":{\\\"_newBidRefundPeriod\\\":\\\"The new bid refund period in seconds\\\"}},\\\"updateBidSettlementPeriod(uint256)\\\":{\\\"params\\\":{\\\"_newBidSettlementPeriod\\\":\\\"The new bid settlement period in seconds\\\"}},\\\"updateFee(uint256)\\\":{\\\"params\\\":{\\\"_newFee\\\":\\\"The new fee percentage (in basis points)\\\"}},\\\"updateFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_newFeeRecipient\\\":\\\"The new address to receive fees\\\"}},\\\"updateListing(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_listingId\\\":\\\"The unique identifier of the listing to update\\\",\\\"_newAskPrice\\\":\\\"The new asking price for the listing\\\",\\\"_saleEthRecipient\\\":\\\"The new address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\\\"}},\\\"updateMailServerKeyHashAdapter(address)\\\":{\\\"params\\\":{\\\"_mailServerKeyHashAdapter\\\":\\\"The new mail server key hash adapter\\\"}},\\\"updateTransferDomainProcessor(address)\\\":{\\\"params\\\":{\\\"_transferDomainProcessor\\\":\\\"The new transfer domain processor\\\"}},\\\"withdrawBid(uint256)\\\":{\\\"params\\\":{\\\"_bidId\\\":\\\"The unique identifier of the bid to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAddressesToAllowlist(address[])\\\":{\\\"notice\\\":\\\"Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed functions.\\\"},\\\"buyerReleaseFunds(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required because it is not in the buyer's interest to release funds unless they have received the domain. Note that the bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will revert if: - The bid is not owned by the caller - The listing is not active (sold or withdrawn)\\\"},\\\"createBid(uint256,bytes32,string)\\\":{\\\"notice\\\":\\\"Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the  seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId  using their private key to get the raw buyerId. DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be done in the client! This does not affect the security of the protocol as the encrypted buyerId is only  used for communication between the buyer and the seller while maintaining privacy.\\\"},\\\"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\\\":{\\\"notice\\\":\\\"Creates listing for a domain. If ownership of domain changes offchain, the new owner will have to first register the domain on the domain registry contract. Then the new owner can create a listing for the domain. The old listing will be deleted from the old owner's  listings and the old listing is marked as NOT active, which prevents any new bids from being created on it and makes the old bids immediately withdrawable. We also allow the seller to specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be  updated by us whenever Namecheap rotates their DKIM key. Function reverts if: - Caller is not domain owner on the domain registry contract - Ask price is less than min bid price - Sale ETH recipient is the zero address\\\"},\\\"deleteListing(uint256)\\\":{\\\"notice\\\":\\\"ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing are left as is to allow the buyer to withdraw the bid.\\\"},\\\"disableAllowlist()\\\":{\\\"notice\\\":\\\"Disable the allow list. When the allow list is disabled, any address is allowed to call functions with onlyAllowed modifier.\\\"},\\\"disableInstantAccept()\\\":{\\\"notice\\\":\\\"Disables the instant accept flag for the buyer.\\\"},\\\"enableAllowlist()\\\":{\\\"notice\\\":\\\"Enable the allow list. When the allow list is enabled, only approved addresses are allowed to functions with onlyAllowed modifier.\\\"},\\\"enableInstantAccept()\\\":{\\\"notice\\\":\\\"Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has  configured their Namecheap account to accept ownership of domains immediately upon transfer.  DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only  an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can  cancel the transfer immediately.\\\"},\\\"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\\\":{\\\"notice\\\":\\\"ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to  the listing owner. The seller can also finalize the sale with bids that have initiated a refund  including the ones that have expired based on timestamp but not withdrawn yet.\\\"},\\\"getAllowedSellers()\\\":{\\\"notice\\\":\\\"Get all allowed sellers\\\"},\\\"getListingBids(uint256[])\\\":{\\\"notice\\\":\\\"Returns the bids for given listingIds\\\"},\\\"getListings(uint256[])\\\":{\\\"notice\\\":\\\"Get listing information with listingId for a list of listingIds\\\"},\\\"getUserBids(address)\\\":{\\\"notice\\\":\\\"Returns the bids created by a user\\\"},\\\"getUserListings(address)\\\":{\\\"notice\\\":\\\"Returns all listings created by a user\\\"},\\\"increaseBidPrice(uint256,uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher  than the old price. The buyer must send the additional amount of ETH. The function reverts if - bid has initiated refund, caller is not bid owner or listing is not active - the new price is less than old price - msg.value is NOT STRICTLY EQUAL to than new price - old price\\\"},\\\"initialize(address,address,address)\\\":{\\\"notice\\\":\\\"Initializes the contract with domain verification and transfer processors. Can  only be called once by the contract owner \\\"},\\\"initiateRefund(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner  after the initial bid expiry period has passed.\\\"},\\\"pauseMarketplace()\\\":{\\\"notice\\\":\\\"ONLY OWNER: Pauses listing and proof submission functionality for the marketplace.  Functionalites that are paused: - Listing creation and update - Bid creation and update - Sale finalization  Functinonalites that remain unpaused to allow users to retrieve funds in contract: - Bid refund initiation and withdrawal - Listing deletion - Manual settlement between buyer and seller\\\"},\\\"registryRemoveListing(uint256)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry. \\\"},\\\"removeAddressesFromAllowlist(address[])\\\":{\\\"notice\\\":\\\"Removes passed addresses from an allow list. Addresses not on the allow list are unable to call allow listed functions.\\\"},\\\"unpauseMarketplace()\\\":{\\\"notice\\\":\\\"ONLY OWNER: Restarts paused functionality for the marketplace.\\\"},\\\"updateBidRefundPeriod(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the bid refund period\\\"},\\\"updateBidSettlementPeriod(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the minimum bid active period\\\"},\\\"updateFee(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the fee percentage for the marketplace\\\"},\\\"updateFeeRecipient(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Updates the fee recipient address\\\"},\\\"updateListing(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"ONLY SELLER: Updates the asking price of an existing listing. We don't update the existing bids against the listing because the newAskPrice is an indicative value. The new ask price must be greater than or equal to the existing min bid price. If seller wants to update the min bid price, they should delete the listing and create a new one with the new min bid price.\\\"},\\\"updateMailServerKeyHashAdapter(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the managed mail server key hash adapter\\\"},\\\"updateTransferDomainProcessor(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the transfer domain processor\\\"},\\\"withdrawBid(uint256)\\\":{\\\"notice\\\":\\\"ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/DomainExchange.sol\\\":\\\"DomainExchange\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/security/Pausable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which allows children to implement an emergency stop\\\\n * mechanism that can be triggered by an authorized account.\\\\n *\\\\n * This module is used through inheritance. It will make available the\\\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\\\n * the functions of your contract. Note that they will not be pausable by\\\\n * simply including this module, only once the modifiers are put in place.\\\\n */\\\\nabstract contract Pausable is Context {\\\\n    /**\\\\n     * @dev Emitted when the pause is triggered by `account`.\\\\n     */\\\\n    event Paused(address account);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the pause is lifted by `account`.\\\\n     */\\\\n    event Unpaused(address account);\\\\n\\\\n    bool private _paused;\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract in unpaused state.\\\\n     */\\\\n    constructor() {\\\\n        _paused = false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must not be paused.\\\\n     */\\\\n    modifier whenNotPaused() {\\\\n        _requireNotPaused();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Modifier to make a function callable only when the contract is paused.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must be paused.\\\\n     */\\\\n    modifier whenPaused() {\\\\n        _requirePaused();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the contract is paused, and false otherwise.\\\\n     */\\\\n    function paused() public view virtual returns (bool) {\\\\n        return _paused;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the contract is paused.\\\\n     */\\\\n    function _requireNotPaused() internal view virtual {\\\\n        require(!paused(), \\\\\\\"Pausable: paused\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the contract is not paused.\\\\n     */\\\\n    function _requirePaused() internal view virtual {\\\\n        require(paused(), \\\\\\\"Pausable: not paused\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Triggers stopped state.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must not be paused.\\\\n     */\\\\n    function _pause() internal virtual whenNotPaused {\\\\n        _paused = true;\\\\n        emit Paused(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns to normal state.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - The contract must be paused.\\\\n     */\\\\n    function _unpause() internal virtual whenPaused {\\\\n        _paused = false;\\\\n        emit Unpaused(_msgSender());\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Contract module that helps prevent reentrant calls to a function.\\\\n *\\\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\\\n * available, which can be applied to functions to make sure there are no nested\\\\n * (reentrant) calls to them.\\\\n *\\\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\\\n * `nonReentrant` may not call one another. This can be worked around by making\\\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\\\n * points to them.\\\\n *\\\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\\\n * to protect against it, check out our blog post\\\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\\\n */\\\\nabstract contract ReentrancyGuard {\\\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\\\n    // word because each write operation emits an extra SLOAD to first read the\\\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\\\n    // back. This is the compiler's defense against contract upgrades and\\\\n    // pointer aliasing, and it cannot be disabled.\\\\n\\\\n    // The values being non-zero value makes deployment a bit more expensive,\\\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\\\n    // amount. Since refunds are capped to a percentage of the total\\\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\\\n    // increase the likelihood of the full refund coming into effect.\\\\n    uint256 private constant _NOT_ENTERED = 1;\\\\n    uint256 private constant _ENTERED = 2;\\\\n\\\\n    uint256 private _status;\\\\n\\\\n    constructor() {\\\\n        _status = _NOT_ENTERED;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\\\n     * function is not supported. It is possible to prevent this from happening\\\\n     * by making the `nonReentrant` function external, and making it call a\\\\n     * `private` function that does the actual work.\\\\n     */\\\\n    modifier nonReentrant() {\\\\n        _nonReentrantBefore();\\\\n        _;\\\\n        _nonReentrantAfter();\\\\n    }\\\\n\\\\n    function _nonReentrantBefore() private {\\\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\\\n        require(_status != _ENTERED, \\\\\\\"ReentrancyGuard: reentrant call\\\\\\\");\\\\n\\\\n        // Any calls to nonReentrant after this point will fail\\\\n        _status = _ENTERED;\\\\n    }\\\\n\\\\n    function _nonReentrantAfter() private {\\\\n        // By storing the original value once again, a refund is triggered (see\\\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\\\n        _status = _NOT_ENTERED;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the reentrancy guard is currently set to \\\\\\\"entered\\\\\\\", which indicates there is a\\\\n     * `nonReentrant` function in the call stack.\\\\n     */\\\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\\\n        return _status == _ENTERED;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Address.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\\\n\\\\npragma solidity ^0.8.1;\\\\n\\\\n/**\\\\n * @dev Collection of functions related to the address type\\\\n */\\\\nlibrary Address {\\\\n    /**\\\\n     * @dev Returns true if `account` is a contract.\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * It is unsafe to assume that an address for which this function returns\\\\n     * false is an externally-owned account (EOA) and not a contract.\\\\n     *\\\\n     * Among others, `isContract` will return false for the following\\\\n     * types of addresses:\\\\n     *\\\\n     *  - an externally-owned account\\\\n     *  - a contract in construction\\\\n     *  - an address where a contract will be created\\\\n     *  - an address where a contract lived, but was destroyed\\\\n     *\\\\n     * Furthermore, `isContract` will also return true if the target contract within\\\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\\\n     * which only has an effect at the end of a transaction.\\\\n     * ====\\\\n     *\\\\n     * [IMPORTANT]\\\\n     * ====\\\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\\\n     *\\\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\\\n     * constructor.\\\\n     * ====\\\\n     */\\\\n    function isContract(address account) internal view returns (bool) {\\\\n        // This method relies on extcodesize/address.code.length, which returns 0\\\\n        // for contracts in construction, since the code is only stored at the end\\\\n        // of the constructor execution.\\\\n\\\\n        return account.code.length > 0;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\\\n     * `recipient`, forwarding all available gas and reverting on errors.\\\\n     *\\\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\\\n     * imposed by `transfer`, making them unable to receive funds via\\\\n     * `transfer`. {sendValue} removes this limitation.\\\\n     *\\\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\\\n     *\\\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\\\n     * taken to not create reentrancy vulnerabilities. Consider using\\\\n     * {ReentrancyGuard} or the\\\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\\\n     */\\\\n    function sendValue(address payable recipient, uint256 amount) internal {\\\\n        require(address(this).balance >= amount, \\\\\\\"Address: insufficient balance\\\\\\\");\\\\n\\\\n        (bool success, ) = recipient.call{value: amount}(\\\\\\\"\\\\\\\");\\\\n        require(success, \\\\\\\"Address: unable to send value, recipient may have reverted\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Performs a Solidity function call using a low level `call`. A\\\\n     * plain `call` is an unsafe replacement for a function call: use this\\\\n     * function instead.\\\\n     *\\\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\\\n     * function (like regular Solidity function calls).\\\\n     *\\\\n     * Returns the raw returned data. To convert to the expected return value,\\\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `target` must be a contract.\\\\n     * - calling `target` with `data` must not revert.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, \\\\\\\"Address: low-level call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, 0, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but also transferring `value` wei to `target`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - the calling contract must have an ETH balance of at least `value`.\\\\n     * - the called Solidity function must be `payable`.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\\\n        return functionCallWithValue(target, data, value, \\\\\\\"Address: low-level call with value failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\\\n     *\\\\n     * _Available since v3.1._\\\\n     */\\\\n    function functionCallWithValue(\\\\n        address target,\\\\n        bytes memory data,\\\\n        uint256 value,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        require(address(this).balance >= value, \\\\\\\"Address: insufficient balance for call\\\\\\\");\\\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\\\n        return functionStaticCall(target, data, \\\\\\\"Address: low-level static call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a static call.\\\\n     *\\\\n     * _Available since v3.3._\\\\n     */\\\\n    function functionStaticCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\\\n        return functionDelegateCall(target, data, \\\\\\\"Address: low-level delegate call failed\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\\\n     * but performing a delegate call.\\\\n     *\\\\n     * _Available since v3.4._\\\\n     */\\\\n    function functionDelegateCall(\\\\n        address target,\\\\n        bytes memory data,\\\\n        string memory errorMessage\\\\n    ) internal returns (bytes memory) {\\\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\\\n     *\\\\n     * _Available since v4.8._\\\\n     */\\\\n    function verifyCallResultFromTarget(\\\\n        address target,\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal view returns (bytes memory) {\\\\n        if (success) {\\\\n            if (returndata.length == 0) {\\\\n                // only check isContract if the call was successful and the return data is empty\\\\n                // otherwise we already know that it was a contract\\\\n                require(isContract(target), \\\\\\\"Address: call to non-contract\\\\\\\");\\\\n            }\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\\\n     * revert reason or using the provided one.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function verifyCallResult(\\\\n        bool success,\\\\n        bytes memory returndata,\\\\n        string memory errorMessage\\\\n    ) internal pure returns (bytes memory) {\\\\n        if (success) {\\\\n            return returndata;\\\\n        } else {\\\\n            _revert(returndata, errorMessage);\\\\n        }\\\\n    }\\\\n\\\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\\\n        // Look for revert reason and bubble it up if present\\\\n        if (returndata.length > 0) {\\\\n            // The easiest way to bubble the revert reason is using memory via assembly\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                let returndata_size := mload(returndata)\\\\n                revert(add(32, returndata), returndata_size)\\\\n            }\\\\n        } else {\\\\n            revert(errorMessage);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/DomainExchange.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { Address } from \\\\\\\"@openzeppelin/contracts/utils/Address.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { ReentrancyGuard } from \\\\\\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\\\\\";\\\\nimport { Pausable } from \\\\\\\"@openzeppelin/contracts/security/Pausable.sol\\\\\\\";\\\\n\\\\nimport { AddressAllowList } from \\\\\\\"./external/AddressAllowList.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"./external/lib/Uint256ArrayUtils.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./external/interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\n\\\\nimport { IDomainExchange } from \\\\\\\"./interfaces/IDomainExchange.sol\\\\\\\";\\\\nimport { ITransferDomainProcessor } from \\\\\\\"./interfaces/ITransferDomainProcessor.sol\\\\\\\";\\\\nimport { IVerifiedDomainRegistry } from \\\\\\\"./interfaces/IVerifiedDomainRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract DomainExchange is IDomainExchange, AddressAllowList, ReentrancyGuard, Pausable {\\\\n\\\\n    using Address for address payable;\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    \\\\n    event ListingCreated(\\\\n        uint256 indexed listingId, \\\\n        address indexed seller, \\\\n        bytes32 indexed domainId, \\\\n        bytes32 dkimKeyHash,\\\\n        uint256 askPrice,\\\\n        uint256 minBidPrice,\\\\n        address saleEthRecipient\\\\n    );\\\\n    event ListingUpdated(uint256 indexed listingId, address indexed seller, uint256 newAskPrice, address saleEthRecipient);\\\\n    event ListingDeleted(uint256 indexed listingId, address indexed seller);\\\\n    event ListingDeletedByRegistry(uint256 indexed listingId);\\\\n    \\\\n    event BidCreated(uint256 indexed bidId, uint256 indexed listingId, address indexed buyer, uint256 price);\\\\n    event BidPriceIncreased(uint256 indexed bidId, address indexed buyer, uint256 newPrice);\\\\n    event RefundInitiated(uint256 indexed bidId, address indexed buyer);\\\\n    event BidWithdrawn(uint256 indexed bidId, address indexed buyer, uint256 amount);\\\\n    \\\\n    event SaleFinalized(uint256 indexed bidId, uint256 indexed listingId, uint256 priceNetFees, uint256 fees);\\\\n    \\\\n    event InstantAcceptUpdated(address indexed buyer, bool instantAccept);\\\\n\\\\n    event FeeUpdated(uint256 newFee);\\\\n    event FeeRecipientUpdated(address indexed newFeeRecipient);\\\\n    event BidSettlementPeriodUpdated(uint256 newBidSettlementPeriod);\\\\n    event BidRefundPeriodUpdated(uint256 newBidRefundPeriod);\\\\n    event TransferDomainProcessorUpdated(ITransferDomainProcessor indexed newTransferDomainProcessor);\\\\n    event MailServerKeyHashAdapterUpdated(IKeyHashAdapterV2 indexed newMailServerKeyHashAdapter);\\\\n\\\\n    /* ============ Structs ============ */\\\\n    struct Listing {\\\\n        address seller;\\\\n        address payable saleEthRecipient;       // Must be a contract that can receive ETH or an EOA\\\\n        bytes32 dkimKeyHash;            // Allow for custom DKIM key hash\\\\n        bytes encryptionKey;\\\\n        bytes32 domainId;\\\\n        uint256 createdAt;\\\\n        uint256 askPrice;\\\\n        uint256 minBidPrice;\\\\n        bool isActive;          // false by default, set to true when the listing is created\\\\n        uint256[] bids;\\\\n    }\\\\n\\\\n    struct ListingWithId {\\\\n        uint256 listingId;\\\\n        Listing listing;\\\\n    }\\\\n\\\\n    struct Bid {\\\\n        address buyer;\\\\n        uint256 listingId;\\\\n        string encryptedBuyerId;\\\\n        bytes32 buyerIdHash;\\\\n        uint256 createdAt;\\\\n        uint256 expiryTimestamp;\\\\n        uint256 price;\\\\n        bool refundInitiated;\\\\n    }\\\\n\\\\n    struct BidDetailsWithId {\\\\n        uint256 bidId;\\\\n        Bid bid;\\\\n        bool buyerInstantAcceptEnabled;\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyInitialized() {\\\\n        require(isInitialized, \\\\\\\"Contract must be initialized\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n\\\\n    mapping(uint256 => Listing) public listings;\\\\n    mapping(address => uint256[]) public userListings;\\\\n    mapping(uint256 => Bid) public bids;\\\\n    mapping(address => uint256[]) public userBids;\\\\n    mapping(address => bool) public instantAcceptEnabled;\\\\n\\\\n    uint256 public fee;\\\\n    address payable public feeRecipient;\\\\n    uint256 public bidCounter;\\\\n    uint256 public listingCounter;\\\\n    uint256 public bidSettlementPeriod;\\\\n    uint256 public bidRefundPeriod;\\\\n    \\\\n    bool public isInitialized;\\\\n    \\\\n    ITransferDomainProcessor public transferDomainProcessor;\\\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        address _owner,\\\\n        uint256 _fee,\\\\n        address payable _feeRecipient,\\\\n        uint256 _bidSettlementPeriod,\\\\n        uint256 _bidRefundPeriod,\\\\n        address[] memory _allowedAddresses\\\\n    ) AddressAllowList(_allowedAddresses) {\\\\n        fee = _fee;\\\\n        feeRecipient = _feeRecipient;\\\\n        bidSettlementPeriod = _bidSettlementPeriod;\\\\n        bidRefundPeriod = _bidRefundPeriod;\\\\n        \\\\n        bidCounter = 1;\\\\n        listingCounter = 1;\\\\n        isInitialized = false;\\\\n        \\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Creates listing for a domain. If ownership of domain changes offchain, the new owner\\\\n     * will have to first register the domain on the domain registry contract. Then the new owner\\\\n     * can create a listing for the domain. The old listing will be deleted from the old owner's \\\\n     * listings and the old listing is marked as NOT active, which prevents any new bids from being\\\\n     * created on it and makes the old bids immediately withdrawable. We also allow the seller to\\\\n     * specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM\\\\n     * key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be \\\\n     * updated by us whenever Namecheap rotates their DKIM key.\\\\n     *\\\\n     * Function reverts if:\\\\n     * - Caller is not domain owner on the domain registry contract\\\\n     * - Ask price is less than min bid price\\\\n     * - Sale ETH recipient is the zero address\\\\n     *\\\\n     * @param _domainId         The unique identifier of the domain\\\\n     * @param _askPrice         An asking price for the domain\\\\n     * @param _minBidPrice      The minimum bid price for the domain\\\\n     * @param _saleEthRecipient The address to receive the ETH from the sale; must be a contract that can\\\\n     *                          receive ETH or an EOA\\\\n     * @param _encryptionKey    The encryption key for buyers to encrypt the buyerId to\\\\n     * @param _dkimKeyHash      The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\\\n     */\\\\n    function createListing(\\\\n        bytes32 _domainId, \\\\n        uint256 _askPrice, \\\\n        uint256 _minBidPrice, \\\\n        address payable _saleEthRecipient, \\\\n        bytes memory _encryptionKey,\\\\n        bytes32 _dkimKeyHash\\\\n    ) \\\\n        external\\\\n        onlyAllowed\\\\n        onlyInitialized \\\\n        whenNotPaused\\\\n    {\\\\n        _verifyCreateListing(_domainId, _minBidPrice, _askPrice, _saleEthRecipient);\\\\n\\\\n        uint256 listingId = _updateCreateListingState(\\\\n            _domainId, _askPrice, _minBidPrice, _saleEthRecipient, _encryptionKey, _dkimKeyHash\\\\n        );\\\\n\\\\n        verifiedDomainRegistry.setDomainListing(_domainId, listingId);\\\\n\\\\n        emit ListingCreated(listingId, msg.sender, _domainId, _dkimKeyHash, _askPrice, _minBidPrice, _saleEthRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer\\\\n     * has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId\\\\n     * to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the \\\\n     * seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId \\\\n     * using their private key to get the raw buyerId.\\\\n     *\\\\n     * DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be\\\\n     * done in the client! This does not affect the security of the protocol as the encrypted buyerId is only \\\\n     * used for communication between the buyer and the seller while maintaining privacy.\\\\n     *\\\\n     * @param _listingId            The unique identifier of the listing to bid on\\\\n     * @param _buyerIdHash          The hashed buyerId which is also output as part of the transfer proof later\\\\n     * @param _encryptedBuyerId     The encrypted buyerId. Should be the same as the buyerId hashed\\\\n     */\\\\n    function createBid(uint256 _listingId, bytes32 _buyerIdHash, string memory _encryptedBuyerId) \\\\n        external \\\\n        payable\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        uint256 price = msg.value;\\\\n        Listing storage listing = listings[_listingId];\\\\n\\\\n        _validateCreateBid(listing, price, _buyerIdHash);\\\\n\\\\n        uint256 bidId = _updateCreateBidState(listing, _listingId, price, _buyerIdHash, _encryptedBuyerId);\\\\n\\\\n        emit BidCreated(bidId, _listingId, msg.sender, price);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to \\\\n     * the listing owner. The seller can also finalize the sale with bids that have initiated a refund \\\\n     * including the ones that have expired based on timestamp but not withdrawn yet.\\\\n     *\\\\n     * @param _proof The zk-email proof of domain transfer\\\\n     */\\\\n    function finalizeSale(ITransferDomainProcessor.TransferProof calldata _proof) \\\\n        external\\\\n        onlyInitialized\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        // Check\\\\n        (\\\\n            bytes32 dkimKeyHash,\\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        ) = transferDomainProcessor.processProof(_proof);\\\\n\\\\n        Bid storage bid = bids[bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n        \\\\n        _validateFinalizeSale(bid, listing, dkimKeyHash, hashedReceiverId, domainName);\\\\n        \\\\n        // Effect\\\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\\\n\\\\n        uint256 transferValue = bid.price;\\\\n        address payable recipient = listing.saleEthRecipient;\\\\n        uint256 listingId = bid.listingId;\\\\n        _updateFinalizeSaleState(bid, bidId, listing);\\\\n\\\\n        // Interaction\\\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\\\n        \\\\n        emit SaleFinalized(bidId, listingId, transferValue - feeAmount, feeAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required\\\\n     * because it is not in the buyer's interest to release funds unless they have received the domain. Note that the\\\\n     * bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to\\\\n     * the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will\\\\n     * revert if:\\\\n     * - The bid is not owned by the caller\\\\n     * - The listing is not active (sold or withdrawn)\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to release funds for\\\\n     */\\\\n    function buyerReleaseFunds(uint256 _bidId) \\\\n        external\\\\n        nonReentrant\\\\n    {\\\\n        // Check\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        require(bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Effect\\\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\\\n\\\\n        uint256 transferValue = bid.price;\\\\n        address payable recipient = listing.saleEthRecipient;\\\\n        uint256 listingId = bid.listingId;\\\\n        \\\\n        _updateFinalizeSaleState(bid, _bidId, listing);\\\\n\\\\n        // Interaction\\\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\\\n\\\\n        emit SaleFinalized(_bidId, listingId, transferValue - feeAmount, feeAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Updates the asking price of an existing listing. We don't update\\\\n     * the existing bids against the listing because the newAskPrice is an indicative value.\\\\n     * The new ask price must be greater than or equal to the existing min bid price. If seller\\\\n     * wants to update the min bid price, they should delete the listing and create a new one with\\\\n     * the new min bid price.\\\\n     *\\\\n     * @param _listingId        The unique identifier of the listing to update\\\\n     * @param _newAskPrice      The new asking price for the listing\\\\n     * @param _saleEthRecipient The new address to receive the ETH from the sale; must be a contract that can\\\\n     *                          receive ETH or an EOA\\\\n     */\\\\n    function updateListing(uint256 _listingId, uint256 _newAskPrice, address payable _saleEthRecipient) external whenNotPaused {\\\\n        Listing storage listing = listings[_listingId];\\\\n        \\\\n        require(listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        require(_newAskPrice >= listing.minBidPrice, \\\\\\\"Ask price is less than min bid price\\\\\\\");\\\\n        require(_saleEthRecipient != address(0), \\\\\\\"Invalid sale ETH recipient\\\\\\\");\\\\n        \\\\n        listing.askPrice = _newAskPrice;\\\\n        listing.saleEthRecipient = _saleEthRecipient;\\\\n\\\\n        emit ListingUpdated(_listingId, msg.sender, _newAskPrice, _saleEthRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array\\\\n     * and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing\\\\n     * are left as is to allow the buyer to withdraw the bid.\\\\n     *\\\\n     * @param _listingId The unique identifier of the listing to delete\\\\n     */\\\\n    function deleteListing(uint256 _listingId) external {\\\\n        Listing storage listing = listings[_listingId];\\\\n        \\\\n        require(listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        \\\\n        verifiedDomainRegistry.removeDomainListing(listing.domainId);\\\\n\\\\n        _pruneListing(listing, _listingId);\\\\n\\\\n        emit ListingDeleted(_listingId, msg.sender);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry.\\\\n     * \\\\n     * @param _listingId    Listing Id to remove\\\\n     */\\\\n    function registryRemoveListing(uint256 _listingId) external override {\\\\n        Listing storage listing = listings[_listingId];\\\\n\\\\n        require(address(verifiedDomainRegistry) == msg.sender, \\\\\\\"Caller is not registry\\\\\\\");\\\\n        // If listing is NOT active, this function will NOT be called because the listing status\\\\n        // would have already been removed from the registry beforehand; so there is no need to \\\\n        // check if listing is active\\\\n        \\\\n        _pruneListing(listing, _listingId);\\\\n\\\\n        emit ListingDeletedByRegistry(_listingId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher \\\\n     * than the old price. The buyer must send the additional amount of ETH. The function reverts if\\\\n     * - bid has initiated refund, caller is not bid owner or listing is not active\\\\n     * - the new price is less than old price\\\\n     * - msg.value is NOT STRICTLY EQUAL to than new price - old price\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to increase the price for\\\\n     * @param _newPrice The new price for the bid\\\\n     */\\\\n    function increaseBidPrice(uint256 _bidId, uint256 _newPrice)\\\\n        external\\\\n        payable\\\\n        nonReentrant\\\\n        whenNotPaused\\\\n    {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        // Check\\\\n        _validateIncreaseBidPrice(bid, listing, _newPrice);\\\\n        \\\\n        // Effect\\\\n        bid.price = _newPrice;\\\\n\\\\n        emit BidPriceIncreased(_bidId, msg.sender, _newPrice);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has \\\\n     * configured their Namecheap account to accept ownership of domains immediately upon transfer.\\\\n     * \\\\n     * DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only \\\\n     * an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller\\\\n     * may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But\\\\n     * if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can \\\\n     * cancel the transfer immediately.\\\\n     */\\\\n    function enableInstantAccept() external onlyInitialized {\\\\n        require(!instantAcceptEnabled[msg.sender], \\\\\\\"Instant accept already enabled\\\\\\\");\\\\n        \\\\n        instantAcceptEnabled[msg.sender] = true;        \\\\n        emit InstantAcceptUpdated(msg.sender, true);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Disables the instant accept flag for the buyer.\\\\n     */\\\\n    function disableInstantAccept() external onlyInitialized {\\\\n        require(instantAcceptEnabled[msg.sender], \\\\\\\"Instant accept already disabled\\\\\\\");\\\\n\\\\n        instantAcceptEnabled[msg.sender] = false;\\\\n        emit InstantAcceptUpdated(msg.sender, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner \\\\n     * after the initial bid expiry period has passed.\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to initiate refund for\\\\n     */\\\\n    function initiateRefund(uint256 _bidId) external {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        _validateInitiateRefund(bid, listing);\\\\n\\\\n        bid.expiryTimestamp = block.timestamp + bidRefundPeriod;\\\\n        bid.refundInitiated = true;\\\\n\\\\n        emit RefundInitiated(_bidId, bid.buyer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\\\n     *\\\\n     * @param _bidId The unique identifier of the bid to withdraw\\\\n     */\\\\n    function withdrawBid(uint256 _bidId) external nonReentrant {\\\\n        Bid storage bid = bids[_bidId];\\\\n        Listing storage listing = listings[bid.listingId];\\\\n\\\\n        // Check\\\\n        _validateWithdrawBid(bid, listing);\\\\n\\\\n        // Effect\\\\n        uint256 refundAmount = bid.price;\\\\n        _pruneBid(bid, _bidId, listing);\\\\n        \\\\n        // Interaction\\\\n        payable(msg.sender).sendValue(refundAmount);\\\\n\\\\n        emit BidWithdrawn(_bidId, msg.sender, refundAmount);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initializes the contract with domain verification and transfer processors. Can \\\\n     * only be called once by the contract owner\\\\n     * \\\\n     * @param _transferDomainProcessor The address of the domain transfer processor contract\\\\n     * @param _verifiedDomainRegistry The address of the verified domain registry contract\\\\n     * @param _mailServerKeyHashAdapter The address of the mail server key hash adapter contract\\\\n     */\\\\n    function initialize(\\\\n        ITransferDomainProcessor _transferDomainProcessor,\\\\n        IVerifiedDomainRegistry _verifiedDomainRegistry,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter\\\\n    ) external onlyOwner {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n        transferDomainProcessor = _transferDomainProcessor;\\\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Pauses listing and proof submission functionality for the marketplace. \\\\n     * Functionalites that are paused:\\\\n     * - Listing creation and update\\\\n     * - Bid creation and update\\\\n     * - Sale finalization\\\\n     * \\\\n     * Functinonalites that remain unpaused to allow users to retrieve funds in contract:\\\\n     * - Bid refund initiation and withdrawal\\\\n     * - Listing deletion\\\\n     * - Manual settlement between buyer and seller\\\\n     */\\\\n    function pauseMarketplace() external onlyOwner {\\\\n        _pause();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Restarts paused functionality for the marketplace.\\\\n     */\\\\n    function unpauseMarketplace() external onlyOwner {\\\\n        _unpause();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the transfer domain processor\\\\n     *\\\\n     * @param _transferDomainProcessor The new transfer domain processor\\\\n     */\\\\n    function updateTransferDomainProcessor(ITransferDomainProcessor _transferDomainProcessor) external onlyOwner {\\\\n        require(address(_transferDomainProcessor) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        \\\\n        transferDomainProcessor = _transferDomainProcessor;\\\\n        emit TransferDomainProcessorUpdated(_transferDomainProcessor);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the managed mail server key hash adapter\\\\n     *\\\\n     * @param _mailServerKeyHashAdapter The new mail server key hash adapter\\\\n     */\\\\n    function updateMailServerKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        require(address(_mailServerKeyHashAdapter) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        \\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        emit MailServerKeyHashAdapterUpdated(_mailServerKeyHashAdapter);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the fee percentage for the marketplace\\\\n     *\\\\n     * @param _newFee The new fee percentage (in basis points)\\\\n     */\\\\n    function updateFee(uint256 _newFee) external onlyOwner {\\\\n        fee = _newFee;\\\\n        emit FeeUpdated(_newFee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the fee recipient address\\\\n     *\\\\n     * @param _newFeeRecipient The new address to receive fees\\\\n     */\\\\n    function updateFeeRecipient(address payable _newFeeRecipient) external onlyOwner {\\\\n        require(_newFeeRecipient != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n        feeRecipient = _newFeeRecipient;\\\\n        emit FeeRecipientUpdated(_newFeeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the minimum bid active period\\\\n     *\\\\n     * @param _newBidSettlementPeriod The new bid settlement period in seconds\\\\n     */\\\\n    function updateBidSettlementPeriod(uint256 _newBidSettlementPeriod) external onlyOwner {\\\\n        require(_newBidSettlementPeriod > 0, \\\\\\\"Bid settlement period must be greater than 0\\\\\\\");\\\\n        bidSettlementPeriod = _newBidSettlementPeriod;\\\\n        emit BidSettlementPeriodUpdated(_newBidSettlementPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Updates the bid refund period\\\\n     *\\\\n     * @param _newBidRefundPeriod The new bid refund period in seconds\\\\n     */\\\\n    function updateBidRefundPeriod(uint256 _newBidRefundPeriod) external onlyOwner {\\\\n        require(_newBidRefundPeriod > 0, \\\\\\\"Bid refund period must be greater than 0\\\\\\\");\\\\n        bidRefundPeriod = _newBidRefundPeriod;\\\\n        emit BidRefundPeriodUpdated(_newBidRefundPeriod);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */    \\\\n\\\\n    /**\\\\n     * @notice Get listing information with listingId for a list of listingIds\\\\n     * @param _listingIds An array of listingIds to fetch details for\\\\n     */\\\\n    function getListings(uint256[] memory _listingIds)\\\\n        external \\\\n        view \\\\n        returns (ListingWithId[] memory listingInfo) \\\\n    {\\\\n        listingInfo = new ListingWithId[](_listingIds.length);\\\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\\\n            listingInfo[i] = ListingWithId({\\\\n                listingId: _listingIds[i],\\\\n                listing: listings[_listingIds[i]]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns all listings created by a user\\\\n     * @param _user The address of the user to fetch listings for\\\\n     */\\\\n    function getUserListings(address _user) external view returns (ListingWithId[] memory listingInfo) {\\\\n        uint256[] memory userListingIds = userListings[_user];\\\\n        listingInfo = new ListingWithId[](userListingIds.length);\\\\n        for (uint256 i = 0; i < userListingIds.length; i++) {\\\\n            uint256 listingId = userListingIds[i];\\\\n            listingInfo[i] = ListingWithId({\\\\n                listingId: listingId,\\\\n                listing: listings[listingId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the bids created by a user\\\\n     * @param _user The address of the user to fetch bids for\\\\n     */\\\\n    function getUserBids(address _user) external view returns (BidDetailsWithId[] memory bidInfo) {\\\\n        uint256[] memory userBidIds = userBids[_user];\\\\n        bidInfo = new BidDetailsWithId[](userBidIds.length);\\\\n        for (uint256 i = 0; i < userBidIds.length; i++) {\\\\n            uint256 bidId = userBidIds[i];\\\\n            bidInfo[i] = BidDetailsWithId({\\\\n                bidId: bidId,\\\\n                bid: bids[bidId],\\\\n                buyerInstantAcceptEnabled: instantAcceptEnabled[_user]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the bids for given listingIds\\\\n     * @param _listingIds An array of listingIds to fetch bids for\\\\n     */\\\\n    function getListingBids(uint256[] memory _listingIds) external view returns (BidDetailsWithId[][] memory bidInfo) {\\\\n        bidInfo = new BidDetailsWithId[][](_listingIds.length);\\\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\\\n            uint256 listingId = _listingIds[i];\\\\n            uint256[] memory listingBidIds = listings[listingId].bids;\\\\n            bidInfo[i] = new BidDetailsWithId[](listingBidIds.length);\\\\n            for (uint256 j = 0; j < listingBidIds.length; j++) {\\\\n                uint256 bidId = listingBidIds[j];\\\\n                bidInfo[i][j] = BidDetailsWithId({\\\\n                    bidId: bidId,\\\\n                    bid: bids[bidId],\\\\n                    buyerInstantAcceptEnabled: instantAcceptEnabled[bids[bidId].buyer]\\\\n                });\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Get all allowed sellers\\\\n     */\\\\n    function getAllowedSellers() external view returns (address[] memory) {\\\\n        return _getAllowedAddresses();\\\\n    }\\\\n\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _verifyCreateListing(\\\\n        bytes32 _domainId, \\\\n        uint256 _minBidPrice, \\\\n        uint256 _askPrice, \\\\n        address _saleEthRecipient\\\\n    ) internal view {\\\\n        IVerifiedDomainRegistry.DomainWithId memory domainWithId = verifiedDomainRegistry.getDomain(_domainId);\\\\n        require(domainWithId.domain.owner == msg.sender, \\\\\\\"Caller is not domain owner\\\\\\\");\\\\n        require(domainWithId.domain.exchange == address(0), \\\\\\\"Domain already listed on registry\\\\\\\");\\\\n\\\\n        require(_minBidPrice > 0, \\\\\\\"Minimum bid price is zero\\\\\\\");\\\\n        require(_askPrice >= _minBidPrice, \\\\\\\"Ask price is less than min bid price\\\\\\\");\\\\n        require(_saleEthRecipient != address(0), \\\\\\\"Invalid sale ETH recipient\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateCreateListingState(\\\\n        bytes32 _domainId, \\\\n        uint256 _askPrice, \\\\n        uint256 _minBidPrice,\\\\n        address payable _saleEthRecipient,\\\\n        bytes memory _encryptionKey,\\\\n        bytes32 _dkimKeyHash\\\\n    ) internal returns (uint256 listingId) {\\\\n        \\\\n        // New listing\\\\n        listingId = listingCounter;\\\\n        listings[listingId] = Listing({\\\\n            seller: msg.sender,\\\\n            saleEthRecipient: _saleEthRecipient,\\\\n            encryptionKey: _encryptionKey,\\\\n            dkimKeyHash: _dkimKeyHash,\\\\n            askPrice: _askPrice,\\\\n            minBidPrice: _minBidPrice,\\\\n            domainId: _domainId,\\\\n            createdAt: block.timestamp,\\\\n            isActive: true,\\\\n            bids: new uint256[](0)\\\\n        });\\\\n        userListings[msg.sender].push(listingId);\\\\n\\\\n        // Increment listingCounter\\\\n        listingCounter = listingCounter + 1;\\\\n    }\\\\n\\\\n    function _validateCreateBid(Listing storage _listing, uint256 _price, bytes32 _buyerIdHash) internal view {\\\\n        require(_listing.seller != address(0), \\\\\\\"Listing does not exist\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n        \\\\n        // Validate inputs\\\\n        require(_price >= _listing.minBidPrice, \\\\\\\"Bid price is less than min bid price\\\\\\\");\\\\n        require(_buyerIdHash != bytes32(0), \\\\\\\"Buyer ID hash cannot be empty\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateCreateBidState(\\\\n        Listing storage _listing, \\\\n        uint256 _listingId, \\\\n        uint256 _price, \\\\n        bytes32 _buyerIdHash, \\\\n        string memory _encryptedBuyerId\\\\n    ) internal returns (uint256 bidId) {\\\\n        bidId = bidCounter;\\\\n        bids[bidId] = Bid({\\\\n            buyer: msg.sender,\\\\n            listingId: _listingId,\\\\n            encryptedBuyerId: _encryptedBuyerId,\\\\n            buyerIdHash: _buyerIdHash,\\\\n            createdAt: block.timestamp,\\\\n            expiryTimestamp: type(uint256).max,\\\\n            price: _price,\\\\n            refundInitiated: false\\\\n        });\\\\n        userBids[msg.sender].push(bidId);\\\\n        _listing.bids.push(bidId);\\\\n\\\\n        // Increment bidCounter\\\\n        bidCounter = bidCounter + 1;\\\\n    }\\\\n\\\\n    function _validateFinalizeSale(\\\\n        Bid storage _bid, \\\\n        Listing storage _listing,\\\\n        bytes32 _dkimKeyHash,\\\\n        bytes32 _hashedReceiverId, \\\\n        string memory _transferredDomainName\\\\n    ) internal view {\\\\n        require(_bid.buyer != address(0), \\\\\\\"Bid does not exist\\\\\\\");\\\\n        require(_listing.seller == msg.sender, \\\\\\\"Caller is not listing owner\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Validate namecheap DKIM key\\\\n        if (_listing.dkimKeyHash != bytes32(0)) {\\\\n            require(_dkimKeyHash == _listing.dkimKeyHash, \\\\\\\"Invalid custom DKIM key hash\\\\\\\");\\\\n        } else {\\\\n            require(\\\\n                mailServerKeyHashAdapter.isMailServerKeyHash(_dkimKeyHash), \\\\n                \\\\\\\"Invalid managed DKIM key hash\\\\\\\"\\\\n            );\\\\n        }\\\\n\\\\n        // Validate domain and receiver\\\\n        bytes32 transferredDomainId = keccak256(abi.encodePacked(_transferredDomainName));\\\\n        require(_bid.buyerIdHash == _hashedReceiverId, \\\\\\\"Invalid receiver\\\\\\\");\\\\n        require(_listing.domainId == transferredDomainId, \\\\\\\"Invalid domain\\\\\\\");\\\\n    }\\\\n\\\\n    function _updateFinalizeSaleState(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\\\n        uint256 listingId = _bid.listingId;\\\\n        \\\\n        _pruneBid(_bid, _bidId, _listing);\\\\n        _pruneListing(_listing, listingId);\\\\n    }\\\\n\\\\n    function _validateIncreaseBidPrice(\\\\n        Bid storage _bid, \\\\n        Listing storage _listing, \\\\n        uint256 _newPrice\\\\n    ) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(!_bid.refundInitiated, \\\\\\\"Refund already initiated\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing not active\\\\\\\");\\\\n\\\\n        // Validate new price\\\\n        require(_newPrice > _bid.price, \\\\\\\"New price not greater than old price\\\\\\\");\\\\n        require(msg.value == _newPrice - _bid.price, \\\\\\\"Incorrect amount of ETH sent\\\\\\\");\\\\n    }\\\\n\\\\n    function _validateInitiateRefund(Bid storage _bid, Listing storage _listing) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        require(!_bid.refundInitiated, \\\\\\\"Refund already initiated\\\\\\\");\\\\n        require(block.timestamp > bidSettlementPeriod + _bid.createdAt, \\\\\\\"Refund period not started\\\\\\\");\\\\n        require(_listing.isActive, \\\\\\\"Listing expired. Bid can be withdrawn directly\\\\\\\");\\\\n    }\\\\n\\\\n    function _validateWithdrawBid(Bid storage _bid, Listing storage _listing) internal view {\\\\n        require(_bid.buyer == msg.sender, \\\\\\\"Caller is not bid owner\\\\\\\");\\\\n        if (_listing.isActive) {\\\\n            require(_bid.refundInitiated, \\\\\\\"Refund not initiated\\\\\\\");\\\\n            require(block.timestamp >= _bid.expiryTimestamp, \\\\\\\"Refund period not ended\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    function _settleSale(address payable _recipient, uint256 _amount) internal returns (uint256 feeAmount) {\\\\n        feeAmount = (_amount * fee) / PRECISE_UNIT;\\\\n        _recipient.sendValue(_amount - feeAmount);\\\\n\\\\n        if (feeAmount > 0) {\\\\n            feeRecipient.sendValue(feeAmount);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Deletes a bid from the exchange. Removes the bid from the listing's bids array and the buyer's\\\\n     * bids array. Deletes the listing if it is expired and has no bids.\\\\n     */\\\\n    function _pruneBid(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\\\n        userBids[_bid.buyer].removeStorage(_bidId);\\\\n        _listing.bids.removeStorage(_bidId);\\\\n        if (!_listing.isActive && _listing.bids.length == 0) {\\\\n            delete listings[_bid.listingId];\\\\n        }\\\\n        delete bids[_bidId];\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Marks a listing as expired. Removes the listing from the seller's listings array and domain listing.\\\\n     * If the listing has no bids, it is deleted from the exchange.\\\\n     */\\\\n    function _pruneListing(Listing storage _listing, uint256 _listingId) internal {\\\\n        _listing.isActive = false;\\\\n        userListings[_listing.seller].removeStorage(_listingId);\\\\n        if (_listing.bids.length == 0) {\\\\n            delete listings[_listingId];\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3470413dda117592e3d5ff6d73a50901e64eb77df61b0617974141ac0542b707\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/AddressAllowList.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"./lib/AddressArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract AddressAllowList is Ownable {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AddressAddedToAllowlist(address indexed allowedAddress);\\\\n    event AddressRemovedFromAllowlist(address indexed allowedAddress);\\\\n    event AllowlistEnabled();\\\\n    event AllowlistDisabled();\\\\n    \\\\n    /* ============ Modifier ============ */\\\\n    modifier onlyAllowed() {\\\\n        require(isEnabled ? isAllowed[msg.sender] : true, \\\\\\\"Address is not allowed\\\\\\\");\\\\n        _;\\\\n    }\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    bool public isEnabled;                     // Boolean indicating if the allowlist is enabled\\\\n    address[] public allowedAddresses;         // Array of addresses that are allowed from taking depositors liquidity\\\\n    mapping(address => bool) public isAllowed; // Mapping of address to boolean indicating if the user is allowed\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(address[] memory _allowedAddresses) Ownable() {\\\\n        for (uint256 i = 0; i < _allowedAddresses.length; i++) {\\\\n            address allowedAddress = _allowedAddresses[i];\\\\n\\\\n            require(!isAllowed[allowedAddress], \\\\\\\"Address is already allowed\\\\\\\");\\\\n            isAllowed[allowedAddress] = true;\\\\n            emit AddressAddedToAllowlist(allowedAddress);\\\\n        }\\\\n        allowedAddresses = _allowedAddresses;\\\\n        isEnabled = true;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed\\\\n     * functions.\\\\n     *\\\\n     * @param _allowedAddresses   List of addresses allowed to call allow listed functions\\\\n     */\\\\n    function addAddressesToAllowlist(address[] memory _allowedAddresses) external onlyOwner {\\\\n        for(uint256 i = 0; i < _allowedAddresses.length; i++) {\\\\n            address allowedAddress = _allowedAddresses[i];\\\\n\\\\n            require(!isAllowed[allowedAddress], \\\\\\\"Address already on allowlist\\\\\\\");\\\\n\\\\n            isAllowed[allowedAddress] = true;\\\\n            allowedAddresses.push(allowedAddress);\\\\n\\\\n            emit AddressAddedToAllowlist(allowedAddress);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes passed addresses from an allow list. Addresses not on the allow list are unable to call\\\\n     * allow listed functions.\\\\n     *\\\\n     * @param _disallowedAddresses   List of addresses being disallowed from calling allow listed functions\\\\n     */\\\\n    function removeAddressesFromAllowlist(address[] memory _disallowedAddresses) external onlyOwner {\\\\n        for(uint256 i = 0; i < _disallowedAddresses.length; i++) {\\\\n            address disallowedAddress = _disallowedAddresses[i];\\\\n\\\\n            require(isAllowed[disallowedAddress], \\\\\\\"Address already disallowed\\\\\\\");\\\\n\\\\n            isAllowed[disallowedAddress] = false;\\\\n            allowedAddresses.removeStorage(disallowedAddress);\\\\n\\\\n            emit AddressRemovedFromAllowlist(disallowedAddress);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enable the allow list. When the allow list is enabled, only approved addresses are allowed to\\\\n     * functions with onlyAllowed modifier.\\\\n     */\\\\n    function enableAllowlist() external onlyOwner {\\\\n        require(!isEnabled, \\\\\\\"Allow list is already enabled\\\\\\\");\\\\n\\\\n        isEnabled = true;\\\\n        emit AllowlistEnabled();\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Disable the allow list. When the allow list is disabled, any address is allowed to call functions\\\\n     * with onlyAllowed modifier.\\\\n     */\\\\n    function disableAllowlist() external onlyOwner {\\\\n        require(isEnabled, \\\\\\\"Allow list is already disabled\\\\\\\");\\\\n\\\\n        isEnabled = false;\\\\n        emit AllowlistDisabled();\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function _getAllowedAddresses() internal view returns (address[] memory) {\\\\n        return allowedAddresses;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5a681a88a6e27db23ff879a4cf35842d008b2ce58bdd3c0c8a03028071762593\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(uint256[] memory A, uint256 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbf9f00cb29fa144868141b708c11d55b219db79cd386db886a5d72e38bbadcb0\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IDomainExchange.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface IDomainExchange {\\\\n    function registryRemoveListing(uint256 _listingId) external;\\\\n}\\\",\\\"keccak256\\\":\\\"0xe9deda400c359c1b42d10c518dc1f01605ea3a466e1be110f1f7c9be4af8253b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ITransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface ITransferDomainProcessor {\\\\n\\\\n    struct TransferProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[10] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    ) \\\\n        external \\\\n        returns (\\\\n            bytes32 dkimKeyHash, \\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        );\\\\n}\\\",\\\"keccak256\\\":\\\"0x9cf5f1b070d7bad73d8ae57f7b20d449853f96fcbb5df1a443723df41c91339d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifiedDomainRegistry {\\\\n\\\\n    struct Domain {\\\\n        address owner;\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n        address exchange;\\\\n        uint256 listingId;\\\\n    }\\\\n\\\\n    struct DomainWithId {\\\\n        bytes32 domainId;\\\\n        Domain domain;\\\\n    }\\\\n\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\\\n    \\\\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\\\n    \\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\\\n    function removeDomainListing(bytes32 _domainId) external;\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcc45329e6720b7b9df3c67985b16f8d778528f756c045ba6c2196831b40afe92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523462000037576200002562000018620001e5565b94939093929192620002cd565b6040516154ee6200089382396154ee90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200007457604052565b6200003c565b90620000916200008960405190565b928362000052565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200003757565b905051906200009182620000a2565b80620000ad565b905051906200009182620000c4565b6001600160401b038111620000745760208091020190565b909291926200010b6200010582620000da565b6200007a565b93818552602080860192028301928184116200003757915b838310620001315750505050565b60208091620001418486620000b5565b81520192019162000123565b9080601f83011215620000375781516200009f92602001620000f2565b91909160c0818403126200003757620001848382620000b5565b92620001948160208401620000cb565b92604090620001a683838601620000b5565b93620001b68460608301620000cb565b93620001c68160808401620000cb565b9360018060a0850151921b03811162000037576200009f92016200014d565b6200020862005d8180380380620001fc816200007a565b9283398101906200016a565b909192939495565b90600019905b9181191691161790565b6200009f6200009f6200009f9290565b90620002446200009f6200024c9262000220565b825462000210565b9055565b906001600160a01b039062000216565b6200009f9062000093906001600160a01b031682565b6200009f9062000260565b6200009f9062000276565b90620002a06200009f6200024c9262000281565b825462000250565b9060ff9062000216565b90620002c56200009f6200024c92151590565b8254620002a8565b939192620003016200031194620002f96200030994620002f1620000919a6200034a565b600a62000230565b600b6200028c565b600e62000230565b600f62000230565b6200033662000321600162000220565b6200032e81600c62000230565b600d62000230565b6200034460006010620002b2565b6200077f565b62000355906200036f565b6200009160006004620002b2565b6200009f600162000220565b6200037a90620005c2565b620000916200038862000363565b600362000230565b634e487b7160e01b600052601160045260246000fd5b6000198114620003b65760010190565b62000390565b634e487b7160e01b600052603260045260246000fd5b90620003dc825190565b811015620003ee576020809102010190565b620003bc565b90620004009062000281565b600052602052604060002090565b156200041657565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320697320616c726561647920616c6c6f7765640000000000006044820152606490fd5b0390fd5b9160001960089290920291821b911b62000216565b9190620004896200009f6200024c9362000220565b9083546200045f565b620000919160009162000474565b818110620004ac575050565b80620004bc600060019362000492565b01620004a0565b9091828110620004d257505050565b620000919290620004ea905b92600052602060002090565b9081019101620004a0565b906801000000000000000081116200007457816200051562000091935490565b90828155620004c3565b8151916001600160401b03831162000074576200054e620004de600192620005488686620004f5565b60200190565b92049160005b838110620005625750505050565b60019060206200057d6200009f86516001600160a01b031690565b940193818401550162000554565b9062000091916200051f565b9060ff60a01b9060a01b62000216565b90620005ba6200009f6200024c92151590565b825462000597565b620005cc620006b7565b600091620005da8362000220565b620005e76200009f845190565b8110156200069b57806200061162000604620006959386620003d2565b516001600160a01b031690565b620006546002620006406200063a620006366200062f8685620003f4565b5460ff1690565b1590565b6200040e565b6200064e83600192620003f4565b620002b2565b620006807f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379162000281565b906200068b60405190565b600090a2620003a6565b620005da565b5091620006ae620000919260016200058b565b600190620005a7565b620000913362000830565b62000830565b6200009190620006d7620007dc565b62000754565b620000936200009f6200009f9290565b6200009f90620006dd565b156200070057565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6200009190620006c26200076d620000936000620006ed565b6001600160a01b0383161415620006f8565b6200009190620006c8565b156200079257565b60405162461bcd60e51b8152806200045b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b62000091620007ea62000824565b62000806620007f93362000093565b916001600160a01b031690565b146200078a565b6200009f9062000093565b6200009f90546200080d565b6200009f600062000818565b6200083c600062000818565b906200084a8160006200028c565b620008816200087a7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000281565b9162000281565b916200088c60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c80630373c0bf1461035257806303f693541461034d5780630d81539c146103485780630eaaf4c8146103435780630f2bc8b31461033e5780631756c30e146103395780631ce59f811461033457806321f67fbb1461032f5780632ac44f121461032a5780632f6db23814610325578063392e53cd146103205780633ec622791461031b5780634423c5f11461031657806346904840146103115780634f20fe5d1461030c5780635c975abb1461030757806364b55bed146103025780636759789f146102fd5780636aa633b6146102f85780636c2c9c7d146102f35780636caacbe7146102ee578063715018a6146102e95780637e064092146102e45780637e7a9c6c146102df5780637f17caa7146102da57806381c14314146102d557806386cfa7d3146102d057806387547367146102cb578063887f495a146102c65780638da5cb5b146102c15780639012c4a8146102bc578063944b8b2e146102b757806396ec50c3146102b25780639d8717a8146102ad578063a15ce280146102a8578063a8ef333f146102a3578063ad9287631461029e578063babcc53914610299578063bb46acd314610294578063bca0b9101461028f578063c0c53b8b1461028a578063c6a2aac814610285578063cf8e629a14610280578063ddca3f431461027b578063de74e57b14610276578063e38df96d14610271578063e6282c6e1461026c578063eb18a9d814610267578063f15851e614610262578063f160d3691461025d578063f2fde38b146102585763f6cda469036103c9576116f3565b6116db565b6116c3565b6116ab565b611690565b611678565b61165d565b61161a565b611474565b611450565b611438565b61141f565b6113dd565b6113b7565b611382565b611353565b611338565b611318565b6112b0565b6111c3565b61118e565b611151565b61112c565b611113565b6110cb565b6110af565b611012565b610ffa565b610fdf565b610fbb565b610fa3565b610f8b565b610ee3565b610ebc565b610e89565b610d31565b610cae565b610c87565b610bf9565b610b9e565b610963565b610935565b6108f7565b6108bb565b6108a3565b61088b565b610873565b610858565b610834565b6107fc565b6106da565b610682565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761038e57604052565b610357565b906103a76103a060405190565b928361036d565b565b6001600160401b03811161038e5760208091020190565b805b036103c957565b600080fd5b905035906103a7826103c0565b909291926103f06103eb826103a9565b610393565b93818552602080860192028301928184116103c957915b8383106104145750505050565b6020809161042284866103ce565b815201920191610407565b9080601f830112156103c957816020610448933591016103db565b90565b906020828203126103c95781356001600160401b0381116103c957610448920161042d565b9052565b6001600160a01b031690565b60005b8381106104935750506000910152565b8181015183820152602001610483565b6104c46104cd6020936104d7936104b8815190565b80835293849260200190565b95869101610480565b601f01601f191690565b0190565b906104fb6104f46104ea845190565b8084529260200190565b9260200190565b9060005b81811061050c5750505090565b9091926105296105226001928651815260200190565b9460200190565b9291016104ff565b80516001600160a01b031682526104489161012061058161014083016020858101516001600160a01b03169085015261056f60408601516040860152565b606085015184820360608601526104a3565b9261059160808201516080850152565b6105a060a082015160a0850152565b6105af60c082015160c0850152565b6105be60e082015160e0850152565b610100818101511515908401520151906101208184039101526104db565b8051825261044891604081019160200151906020818403910152610531565b90610448916105dc565b9061061b610611835190565b8083529160200190565b908161062d6020830284019460200190565b926000915b83831061064157505050505090565b9091929394602061066461065d838560019503875289516105fb565b9760200190565b9301930191939290610632565b602080825261044892910190610605565b346103c9576106a961069d61069836600461044b565b613266565b60405191829182610671565b0390f35b60009103126103c957565b610448916008021c81565b9061044891546106b8565b6104486000600c6106c3565b346103c9576106ea3660046106ad565b6106a96106f56106ce565b6040515b9182918290815260200190565b6001600160a01b0381166103c2565b905035906103a782610706565b6001600160401b03811161038e57602090601f01601f19160190565b90826000939282370152565b9092919261075a6103eb82610722565b938185526020850190828401116103c9576103a79261073e565b9080601f830112156103c9578160206104489335910161074a565b909160c0828403126103c9576107a583836103ce565b926107b381602085016103ce565b926107c182604083016103ce565b926107cf8360608401610715565b926080830135906001600160401b0382116103c9576107f381610448938601610774565b9360a0016103ce565b346103c95761081b61080f36600461078f565b94939093929192611b75565b604051005b906020828203126103c957610448916103ce565b346103c95761081b610847366004610820565b612961565b6104486000600f6106c3565b346103c9576108683660046106ad565b6106a96106f561084c565b346103c95761081b610886366004610820565b61258d565b346103c95761089b3660046106ad565b61081b61281a565b346103c9576108b33660046106ad565b61081b612be6565b346103c95761081b6108ce366004610820565b61282f565b90816102409103126103c95790565b90610240828203126103c957610448916108d3565b346103c95761081b61090a3660046108e2565b612106565b610448916008021c5b60ff1690565b90610448915461090f565b6104486000601061091e565b346103c9576109453660046106ad565b6106a9610950610929565b6040515b91829182901515815260200190565b346103c9576109733660046106ad565b61081b612b78565b6104486104486104489290565b906109929061097b565b600052602052604060002090565b6104489081565b61044890546109a0565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156109e7575b60208310146109e257565b6109b1565b91607f16916109d7565b80546000939291610a0e610a04836109c7565b8085529360200190565b9160018116908115610a605750600114610a2757505050565b610a3a9192939450600052602060002090565b916000925b818410610a4c5750500190565b805484840152602090930192600101610a3f565b92949550505060ff1916825215156020020190565b90610448916109f1565b906103a7610a9992610a9060405190565b93848092610a75565b038361036d565b61044890610918565b6104489054610aa0565b610abe906007610988565b90610ad082546001600160a01b031690565b91610add600182016109a7565b91610aea60028301610a7f565b91610af7600382016109a7565b91610b04600483016109a7565b91610b11600582016109a7565b916104486007610b23600685016109a7565b9301610aa9565b93989795610b8860e096610b81610b7988610b9698610b6c6103a79e99610b65610b8f9a600061010087019601906001600160a01b03169052565b60208d0152565b8a820360408c01526104a3565b9c6060890152565b6080870152565b60a0850152565b60c0830152565b019015159052565b346103c9576106a9610bb9610bb4366004610820565b610ab3565b94610bcc98969894919493929360405190565b98899889610b2a565b610448916008021c610474565b906104489154610bd5565b6104486000600b610be2565b346103c957610c093660046106ad565b6106a9610c14610bed565b6040515b918291826001600160a01b03909116815260200190565b90610c3e6104f46104ea845190565b9060005b818110610c4f5750505090565b909192610c6e61052260019286516001600160a01b0316815260200190565b929101610c42565b602080825261044892910190610c2f565b346103c957610c973660046106ad565b6106a9610ca26136f8565b60405191829182610c76565b346103c957610cbe3660046106ad565b6106a96109506118fa565b634e487b7160e01b600052603260045260246000fd5b8054821015610d0257610cf9600191600052602060002090565b91020190600090565b610cc9565b60016000610d13825490565b831015610d2e575061044891610d2891610cdf565b90610be2565b80fd5b346103c9576106a9610c14610d47366004610820565b610d07565b906020828203126103c95761044891610715565b80516001600160a01b03168252906104489060e080610d9e6101008401610d8c60208801516020870152565b604087015185820360408701526104a3565b94610dae60608201516060860152565b610dbd60808201516080860152565b610dcc60a082015160a0860152565b610ddb60c082015160c0860152565b01511515910152565b805182529061044890604080610e096060840160208701518582036020870152610d60565b9401511515910152565b9061044891610de4565b90610e29610611835190565b9081610e3b6020830284019460200190565b926000915b838310610e4f57505050505090565b90919293946020610e6b61065d83856001950387528951610e13565b9301930191939290610e40565b602080825261044892910190610e1d565b346103c9576106a9610ea4610e9f366004610d4c565b6134df565b60405191829182610e78565b6104486014600061091e565b346103c957610ecc3660046106ad565b6106a9610950610eb0565b6104486000600d6106c3565b346103c957610ef33660046106ad565b6106a96106f5610ed7565b90929192610f0e6103eb826103a9565b93818552602080860192028301928184116103c957915b838310610f325750505050565b60208091610f408486610715565b815201920191610f25565b9080601f830112156103c95781602061044893359101610efe565b906020828203126103c95781356001600160401b0381116103c9576104489201610f4b565b346103c95761081b610f9e366004610f66565b614f6c565b346103c957610fb33660046106ad565b61081b611743565b346103c95761081b610fce366004610820565b612f05565b6104486000600e6106c3565b346103c957610fef3660046106ad565b6106a96106f5610fd3565b346103c95761081b61100d366004610f66565b614e73565b346103c9576110223660046106ad565b61081b612788565b91906040838203126103c957610448906110448185610715565b936020016103ce565b61044890610474906001600160a01b031682565b6104489061104d565b61044890611061565b906109929061106a565b61108b600691600092611073565b90611094825490565b831015610d2e5750610448916110a991610cdf565b906106c3565b346103c9576106a96106f56110c536600461102a565b9061107d565b346103c95761081b6110de366004610d4c565b612d36565b90916060828403126103c9576104486110fc84846103ce565b9361110a81602086016103ce565b93604001610715565b346103c95761081b6111263660046110e3565b91612449565b346103c95761113c3660046106ad565b6106a9610c146000546001600160a01b031690565b346103c95761081b611164366004610820565b612dda565b61044860006011610be2565b6104709061106a565b6020810192916103a79190611175565b346103c95761119e3660046106ad565b6106a96111a9611169565b6040519182918261117e565b61108b600891600092611073565b346103c9576106a96106f56111d936600461102a565b906111b5565b906111eb610611835190565b90816111fd6020830284019460200190565b926000915b83831061121157505050505090565b9091929394602061122d61065d83856001950387528951610e13565b9301930191939290611202565b90610448916111df565b90611250610611835190565b90816112626020830284019460200190565b926000915b83831061127657505050505090565b9091929394602061129261065d8385600195038752895161123a565b9301930191939290611267565b602080825261044892910190611244565b346103c9576106a96112cb6112c636600461044b565b6135ce565b6040519182918261129f565b916060838303126103c9576112ec82846103ce565b926112fa83602083016103ce565b9260408201356001600160401b0381116103c9576104489201610774565b61081b6113263660046112d7565b91611c76565b61044860006012610be2565b346103c9576113483660046106ad565b6106a96111a961132c565b346103c95761081b611366366004610820565b612fc9565b6104489061137d600291600092611073565b61091e565b346103c9576106a9610950611398366004610d4c565b61136b565b91906040838203126103c9576104489061104481856103ce565b61081b6113c536600461139d565b90612695565b6104489061137d600991600092611073565b346103c9576106a96109506113f3366004610d4c565b6113cb565b90916060828403126103c9576104486114118484610715565b9361110a8160208601610715565b346103c95761081b6114323660046113f8565b91612b5a565b346103c9576114483660046106ad565b61081b615049565b346103c9576114603660046106ad565b61081b6150f4565b6104486000600a6106c3565b346103c9576114843660046106ad565b6106a96106f5611468565b805460009392916114a2610a04836109c7565b9160018116908115610a6057506001146114bb57505050565b6114ce9192939450600052602060002090565b916000925b8184106114e05750500190565b8054848401526020909301926001016114d3565b906104489161148f565b906103a7610a999261150f60405190565b938480926114f4565b611523906005610988565b80546001600160a01b03169161154360018301546001600160a01b031690565b91611550600282016109a7565b9161155d600383016114fe565b9161156a600482016109a7565b91611577600583016109a7565b91611584600682016109a7565b916104486008610b23600785016109a7565b9499989690610100966116056115fd61160c93610b96986115f06103a79e996115e96116139a60208f6115da61012082019860008301906001600160a01b03169052565b01906001600160a01b03169052565b60408d0152565b8a820360608c01526104a3565b9c6080890152565b60a0870152565b60c0850152565b60e0830152565b346103c9576106a9611635611630366004610820565b611518565b9561164899979995919594929460405190565b998a998a611596565b61044860016010610be2565b346103c95761166d3660046106ad565b6106a96111a9611651565b346103c95761081b61168b366004610820565b612454565b346103c9576106a961069d6116a6366004610d4c565b613312565b346103c95761081b6116be366004610820565b612243565b346103c95761081b6116d6366004610d4c565b612e3d565b346103c95761081b6116ee366004610d4c565b611864565b346103c95761081b611706366004610d4c565b612d8c565b61171361179f565b6103a7611731565b6104746104486104489290565b6104489061171b565b6103a761173e6000611728565b61189d565b6103a761170b565b1561175257565b60405162461bcd60e51b81528061179b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6103a76117b46000546001600160a01b031690565b6117cd6117c033610474565b916001600160a01b031690565b1461174b565b6103a7906117df61179f565b61183f565b156117eb57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6103a79061173e6118536104746000611728565b6001600160a01b03831614156117e4565b6103a7906117d3565b906001600160a01b03905b9181191691161790565b906118926104486118999261106a565b825461186d565b9055565b6000546001600160a01b0316906118b5816000611882565b6118e86118e27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361106a565b9161106a565b916118f260405190565b80805b0390a3565b6104486004610aa9565b6104489060a01c610918565b6104489054611904565b1561192157565b60405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc81b9bdd08185b1b1bddd95960521b6044820152606490fd5b906103a795949392916119726000611910565b156119975761199261198d611988336002611073565b610aa9565b61191a565b6119ed565b611992600161191a565b156119a857565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b906103a79594939291611a08611a036010610aa9565b6119a1565b906103a79594939291611a19611bc2565b611a71565b9081526040810192916103a79160200152565b6040513d6000823e3d90fd5b611a6a6103a794611a63606094989795611a5c608086019a6000870152565b6020850152565b6040830152565b0190611175565b9385611a9791969396611a8e611a868761106a565b858a8a6138e9565b85888589613dc3565b91611ab2611aad6011546001600160a01b031690565b61106a565b6327d335a890803b156103c957611ad891600091611acf60405190565b93849260e01b90565b8252818381611aeb8a8d60048401611a1e565b03925af18015611b7057611b52575b50611b4d3394611b3a611b36611b307f77a8be0890be6d79729c684636469d83d455e267a0bf0c9bc2463d8db867a5419761097b565b9761106a565b9790565b97611b4460405190565b94859485611a3d565b0390a4565b611b6a906000611b62818361036d565b8101906106ad565b38611afa565b611a31565b906103a7959493929161195f565b15611b8a57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6103a7611bd4611bd06118fa565b1590565b611b83565b90611bec9291611be7611cf8565b611bf4565b6103a7611d34565b906103a79291611c02611bc2565b9091611c2a9034938484611c1a610448826005610988565b611c25848483613f91565b61414e565b903391611b4d611c6c611c66611c607f6d2b783673dbbf046f2e5a1f3c92ce62c29a0f5385f2b1f0eaf19019ef28cb559461097b565b9461097b565b9461106a565b946106f960405190565b906103a79291611bd9565b610448600261097b565b15611c9257565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9060001990611878565b90611cf16104486118999261097b565b8254611cd7565b6103a7611d0560036109a7565b611d23611d10611c81565b918290611d1c565b9190565b1415611c8b565b6003611ce1565b610448600161097b565b6103a7611d23611d2a565b6103a790611d50611a036010610aa9565b611bec90611d5c611cf8565b6103a790611d68611bc2565b611f2e565b6104489060081c610474565b6104489054611d6d565b905051906103a7826103c0565b90929192611da06103eb82610722565b938185526020850190828401116103c9576103a792610480565b9080601f830112156103c957815161044892602001611d90565b6080818303126103c957611de88282611d83565b92611df68360208401611d83565b926040830151906001600160401b0382116103c957611e1a81610448938601611dba565b93606001611d83565b9037565b6103a791604091611e23565b906104d781604093611e27565b611e4c611d1860029390565b806000925b848410611e5f575050505050565b611e7b611e74600192611e6f8690565b611e33565b9360400190565b93019291611e51565b6103a79161014091611e23565b6103a7919061010090611ecf90611ea88482611e27565b611eb9604082016040860190611e40565b611eca60c0820160c0860190611e27565b820190565b910190611e84565b610240810192916103a79190611e91565b9081526040810192916103a7916020906115da565b634e487b7160e01b600052601160045260246000fd5b9190611f1e565b9290565b8203918211611f2957565b611efd565b6000611f6b91611f41611aad6010611d79565b611f60836365cd296c611f5360405190565b9687958694859360e01b90565b835260048301611ed7565b03925af18015611b70576000918291829182916120dd575b50611fbb611f95610448846007610988565b93600595611fb36104486001880198611fad8a6109a7565b90610988565b9384876143af565b611fd0611aad6011546001600160a01b031690565b90632b8a8002611fe2600483016109a7565b85546001600160a01b03165b93803b156103c9576120166000809461202161200960405190565b9889968795869460e01b90565b845260048401611ee8565b03925af1908115611b70576120719561207d93612076936120c7575b5061204a600687016109a7565b96828661206b61206560018c9701546001600160a01b031690565b946109a7565b98614557565b6148fd565b8094611f13565b926120b16120ab7f3247261fffac93019b3a34aa6692df18a5ddea75a12bf8ec4539903a608a6e4c9361097b565b9361097b565b936118f56120be60405190565b92839283611a1e565b6120d7906000611b62818361036d565b3861203d565b925090506120fd92503d8091833e6120f5818361036d565b810190611dd4565b90919238611f83565b6103a790611d3f565b611bec9061211b611cf8565b6121ad565b1561212757565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420626964206f776e65720000000000000000006044820152606490fd5b1561217357565b60405162461bcd60e51b81526020600482015260126024820152714c697374696e67206e6f742061637469766560701b6044820152606490fd5b6121bb610448826007610988565b60018101916121d16104486005611fad866109a7565b82906121f66121e783546001600160a01b031690565b6121f0336117c0565b14612120565b61220a61220560088301610aa9565b61216c565b61221f611aad6011546001600160a01b031690565b91632b8a800290611fee612235600485016109a7565b91546001600160a01b031690565b6103a79061210f565b906103a7929161225a611bc2565b612364565b1561226657565b60405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74206c697374696e67206f776e657200000000006044820152606490fd5b156122b257565b60405162461bcd60e51b8152602060048201526024808201527f41736b207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b1561230a57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c69642073616c652045544820726563697069656e740000000000006044820152606490fd5b9081526040810192916103a791602090611a6a565b919091612375610448826005610988565b9161240081600161238d86546001600160a01b031690565b3396906123a39061239d896117c0565b1461225f565b6123b261220560088301610aa9565b6123cd6123c4610448600784016109a7565b895b10156122ab565b6123ed6123dd6104746000611728565b6123e68561106a565b1415612303565b6123fa8860068301611ce1565b01611882565b61243361242d7f6df0cec5e0539cca31fe823df048a8d5834ba5dc079fa1d38e5157f00f9d085b9361097b565b9361106a565b936118f561244060405190565b9283928361234f565b906103a7929161224c565b612462610448826005610988565b80546001600160a01b031633919061247d9061239d846117c0565b61248c61220560088301610aa9565b6124a1611aad6011546001600160a01b031690565b90636e74da686124b3600483016109a7565b833b156103c9576124e9936124db600080946124ce60405190565b9788958694859360e01b90565b835260048301526024820190565b03925af1908115611b7057612505928592612532575b50614ca6565b6118e86118e27f5832f888aea12cc23bd891f2d9fd4bd01b8ce0e22898b6e7cee1519f5bd469549361097b565b612542906000611b62818361036d565b386124ff565b1561254f57565b60405162461bcd60e51b815260206004820152601660248201527543616c6c6572206973206e6f7420726567697374727960501b6044820152606490fd5b6125cb8161259f610448826005610988565b6125c66125b7611aad6011546001600160a01b031690565b6125c0336117c0565b14612548565b614ca6565b6125f57ff7504a55c42715ea3e852b679d6453ecfe02acbddb4d0652aa251d4458b7cc219161097b565b906125ff60405190565b80805b0390a2565b90611bec91612614611cf8565b906103a791612621611bc2565b612659826006612635610448856007610988565b6126538361264d6104486005611fad600187016109a7565b8361465d565b01611ce1565b33906118f561268b61242d7f8283dd04c4a2b6691bd80232f254e0ad876b8bb149938d3e7ced5c6e8a35b6149361097b565b936106f960405190565b906103a791612607565b6126ac611a036010610aa9565b6103a7612720565b156126bb57565b60405162461bcd60e51b815260206004820152601e60248201527f496e7374616e742061636365707420616c726561647920656e61626c656400006044820152606490fd5b9060ff90611878565b9061271961044861189992151590565b8254612700565b3380612751600961273f61273a611bd06119888685611073565b6126b4565b61274c6001948592611073565b612709565b61260261277e7f2e259e0564e75f0e10ce0e012a5ce2528ae513b0188b619bcc581b8ba8db70329261106a565b9261095460405190565b6103a761269f565b61279d611a036010610aa9565b6103a76127f1565b156127ac57565b60405162461bcd60e51b815260206004820152601f60248201527f496e7374616e742061636365707420616c72656164792064697361626c6564006044820152606490fd5b3380612751600961280d6128086119888584611073565b6127a5565b61274c6000948592611073565b6103a7612790565b91908201809211611f2957565b6128a1600060076128936128466104488684610988565b91612889600561286d612867610448612861600189016109a7565b84610988565b86614781565b6128814261287b600f6109a7565b90612822565b908501611ce1565b6001908301612709565b01546001600160a01b031690565b6118e86118e27f9da9db6af7fcfa5edbaa006b61a744d33fe4651a4c594cddd3e9a7e757ecd8d59361097b565b611bec906128da611cf8565b6128e8610448826007610988565b9061291d6129006104486005611fad600187016109a7565b61290a8185614872565b82612917600686016109a7565b94614c0b565b33906129318361292c8461106a565b612a59565b6118f561268b61242d7f8f8619524e8d462cead34604bd2247ede24175801481e4d0b8059ac8aa41c3019361097b565b6103a7906128ce565b1561297157565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b906129c36103eb83610722565b918252565b3d156129e2576129d73d6129b6565b903d6000602084013e565b606090565b156129ee57565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b60006103a792612a7a8293611aad612a703061106a565b849031101561296a565b90612a8460405190565b90818003925af1612a936129c8565b506129e7565b906103a79291612aa761179f565b612b18565b15612ab357565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b90610100600160a81b039060081b611878565b90612b116104486118999261106a565b8254612aee565b612b4e9291612b40612b4792612b39612b34611bd06010610aa9565b612aac565b6010612b01565b6011611882565b6012611882565b6103a760016010612709565b906103a79291612a99565b612b6d61179f565b6103a76103a7612bcb565b6103a7612b65565b612b88611bc2565b6103a7612b9760016004612709565b33612bc67f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610c1860405190565b0390a1565b6103a7612b80565b612bdb61179f565b6103a76103a7612c34565b6103a7612bd3565b612bf6612c7f565b6103a7612c0560006004612709565b33612bc67f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610c1860405190565b6103a7612bee565b15612c4357565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b6103a7612c8a6118fa565b612c3c565b6103a790612c9b61179f565b612cde565b15612ca757565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b612d01612cea8261106a565b612cfa6117c06104746000611728565b1415612ca0565b612d0c816010612b01565b6125f57f9106eb309cc633a951e77bd36af34646a9df8e6ade485938c34e3844a37b79da9161106a565b6103a790612c8f565b6103a790612d4b61179f565b612d57612cea8261106a565b612d62816012611882565b6125f57f9d3407c7200ba4f49e97f3d3f8250ec01c24b0ada6fa31053d71850793b739539161106a565b6103a790612d3f565b6103a790612da161179f565b612dac81600a611ce1565b612bc67f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76916106f960405190565b6103a790612d95565b6103a790612def61179f565b612e08612dff6104746000611728565b612cfa8361106a565b612e1381600b611882565b6125f57f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc29161106a565b6103a790612de3565b6103a790612e5261179f565b612eb8565b15612e5e57565b60405162461bcd60e51b815260206004820152602c60248201527f42696420736574746c656d656e7420706572696f64206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608490fd5b612ecc612ec5600061097b565b8211612e57565b612ed781600e611ce1565b612bc67f09a165ff77cf0f319f9ece89bc6dbe2a469a0da2640c9e6b501132846843daf5916106f960405190565b6103a790612e46565b6103a790612f1a61179f565b612f7c565b15612f2657565b60405162461bcd60e51b815260206004820152602860248201527f42696420726566756e6420706572696f64206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b612f90612f89600061097b565b8211612f1f565b612f9b81600f611ce1565b612bc67f90e0312fddcd5cbec358d5c7d63976e5c97d71dfb8d6cd5f2c53b0a1a043ccf0916106f960405190565b6103a790612f0e565b906129c36103eb836103a9565b6104486040610393565b610448610140610393565b612ffc612fe9565b906000825260208080808080808080808b01600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b905250565b610448612ff4565b613052612fdf565b9060008252602080830161303d613042565b61044861304a565b60005b82811061307b57505050565b602090613086613064565b818401520161306f565b906103a76130a66130a084612fd2565b936103a9565b601f19016020840161306c565b6000198114611f295760010190565b906130cb825190565b811015610d02576020809102010190565b906130f76130eb6104ea845490565b92600052602060002090565b9060005b8181106131085750505090565b90919261312c61312560019261311d876109a7565b815260200190565b9460010190565b9291016130fb565b90610448916130dc565b906103a7610a999261314f60405190565b93848092613134565b906103a76132556009613169612fe9565b9461318b61317e82546001600160a01b031690565b6001600160a01b03168752565b6131b26131a260018301546001600160a01b031690565b6001600160a01b03166020880152565b6131c86131c1600283016109a7565b6040880152565b6131de6131d7600383016114fe565b6060880152565b6131f46131ed600483016109a7565b6080880152565b61320a613203600583016109a7565b60a0880152565b613220613219600683016109a7565b60c0880152565b61323661322f600783016109a7565b60e0880152565b61324f61324560088301610aa9565b1515610100880152565b0161313e565b610120840152565b61044890613158565b90613277613272835190565b613090565b91600090836132858361097b565b613290610448845190565b81101561330257806132ac6132a86132fd93866130c2565b5190565b6132e26132db6132c46005611fad6132a8878b6130c2565b6132d66132cf612fdf565b948a860152565b61325d565b6020830152565b6132ec82896130c2565b526132f781886130c2565b506130b3565b613285565b5093505050565b6104489061313e565b61332961332e91613321606090565b506006611073565b613309565b9061333a613272835190565b91600090836133488361097b565b613353610448845190565b811015613302578061336b6132a861337c93866130c2565b6132e26132db6132c4836005610988565b613348565b6104486060610393565b610448610100610393565b61339e61338b565b906000825260208080808080808089016000815201606081520160008152016000815201600081520160005b8152016000905250565b610448613396565b6133e4613381565b90600082526020808084016133ca6133d4565b6104486133dc565b60005b82811061340e57505050565b6020906134196133f7565b8184015201613402565b906103a76134336130a084612fd2565b601f1901602084016133ff565b906103a76134cd600761345161338b565b9461346661317e82546001600160a01b031690565b61347c613475600183016109a7565b6020880152565b61348b6131c160028301610a7f565b61349a6131d7600383016109a7565b6134a96131ed600483016109a7565b6134b8613203600583016109a7565b6134c7613219600683016109a7565b01610aa9565b151560e0840152565b61044890613440565b906134ee613329836008611073565b6134fe6134f9825190565b613423565b926000918461350c8461097b565b613517610448845190565b81101561358c578061352f6132a861358793866130c2565b61357261353d826007610988565b613569611a5c6135516119888b6009611073565b9261356461355d613381565b968d880152565b6134d6565b15156040830152565b61357c828a6130c2565b526132f781896130c2565b61350c565b509450505050565b60005b8281106135a357505050565b606082820152602001613597565b906103a76135c16130a084612fd2565b601f190160208401613594565b6135de6135d9825190565b6135b1565b806000916135eb8361097b565b945b6135f8610448865190565b8610156136f057613621600961361b6136146132a88a8a6130c2565b6005610988565b01613309565b9461362d6134f9875190565b61363788866130c2565b5261364287856130c2565b5061364c8561097b565b613657610448885190565b8110156136d957806132f781886136b86136776132a86136d4978e6130c2565b613569611a5c60076135646136a96119886136928785610988565b936136a38a6128938a600994610988565b90611073565b946136b2613381565b97880152565b6136c28c8a6130c2565b51906136ce83836130c2565b526130c2565b61364c565b50929450946136e7906130b3565b949391936135ed565b935093505050565b61044861517f565b905051906103a782610706565b91909160a0818403126103c95761372460a0610393565b9260006137318284613700565b908501526020820151906001600160401b0382116103c9576137588161378b938501611dba565b6020860152604061376b82828601611d83565b90860152606061377d82828601613700565b908601526080809301611d83565b90830152565b9190916040818403126103c9576137a86040610393565b9260006137b58284611d83565b9085015260208201516001600160401b0381116103c9576132db920161370d565b906020828203126103c95781516001600160401b0381116103c9576104489201613791565b1561380257565b60405162461bcd60e51b815260206004820152601a60248201527f43616c6c6572206973206e6f7420646f6d61696e206f776e65720000000000006044820152606490fd5b1561384e57565b60405162461bcd60e51b815260206004820152602160248201527f446f6d61696e20616c7265616479206c6973746564206f6e20726567697374726044820152607960f81b6064820152608490fd5b156138a457565b60405162461bcd60e51b815260206004820152601960248201527f4d696e696d756d20626964207072696365206973207a65726f000000000000006044820152606490fd5b60006139269194939294613908611aad6011546001600160a01b031690565b6124db631a24254761391960405190565b9586948593849360e01b90565b03915afa938415611b70576104746123e6936123c6611d18613985606060206103a79b6117c0996000916139bf575b5001805151613976906001600160a01b0316613970336117c0565b146137fb565b5101516001600160a01b031690565b946104486139b860006139b361399a82611728565b996139ad6001600160a01b038c166117c0565b14613847565b61097b565b821161389d565b6139da913d8091833e6139d2818361036d565b8101906137d6565b38613955565b369037565b906103a76139f56130a084612fd2565b601f1901602084016139e0565b634e487b7160e01b600052600060045260246000fd5b90611cf16104486118999290565b9160001960089290920291821b911b611878565b9190613a4b6104486118999361097b565b908354613a26565b6103a791600091613a3a565b818110613a6a575050565b80613a786000600193613a53565b01613a5f565b9190601f8111613a8d57505050565b613a9f6103a793600052602060002090565b906020601f840181900483019310613ac2575b6020601f909101045b0190613a5f565b9091508190613ab2565b600019600883021c1916906002021790565b90613ae7815190565b906001600160401b03821161038e57613b0a82613b0485546109c7565b85613a7e565b602090601f8311600114613b3857611899929160009183613b2d575b5050613acc565b015190503880613b26565b601f19831691613b4d85600052602060002090565b9260005b818110613b8b57509160029391856001969410613b72575b50505002019055565b01516000196008601f8516021c19169055388080613b69565b91936020600181928787015181550195019201613b51565b906103a791613ade565b81810292918115918404141715611f2957565b818110613bcb575050565b80613bd96000600193613a53565b01613bc0565b90613bf290600019906020036008021c90565b8154169055565b9091828110613c0757505050565b6103a79290613c15906130eb565b9081019101613bc0565b90600160401b811161038e5781613c376103a7935490565b90828155613bf9565b8151916001600160401b03831161038e57613c6a6130eb600192613c648686613c1f565b60200190565b92049160005b838110613c7d5750505050565b6001906020613c8d610448865190565b9401938184015501613c70565b906103a791613c40565b6103a79190613d8a9061012090600990613ccf81613cc987516001600160a01b031690565b90611882565b613cea60018201613cc960208801516001600160a01b031690565b613d0260028201613cfc604088015190565b90613a18565b613d1a60038201613d14606088015190565b90613ba3565b613d2c60048201613cfc608088015190565b613d4460058201613d3e60a088015190565b90611ce1565b613d5660068201613d3e60c088015190565b613d6860078201613d3e60e088015190565b613d8360088201613d7d610100880151151590565b90612709565b0192015190565b90613c9a565b906103a791613ca4565b90815491600160401b83101561038e5782613dbd9160016103a795018155610cdf565b90613a3a565b919295949095613dd1600090565b50613ddc600d6109a7565b93849733944290600198600096613df28861097b565b613dfb906139e5565b9689613e05612fe9565b998a0190613e1b91906001600160a01b03169052565b6001600160a01b0316602089015260408801526060870152608086015260a085015260c084015260e0830152841515610100830152610120820152613e61836005610988565b90613e6b91613d90565b613e76906006611073565b90613e8091613d9a565b613e8a600d6109a7565b90613e949061097b565b613e9d91612822565b6103a790600d611ce1565b15613eaf57565b60405162461bcd60e51b8152602060048201526016602482015275131a5cdd1a5b99c8191bd95cc81b9bdd08195e1a5cdd60521b6044820152606490fd5b15613ef457565b60405162461bcd60e51b8152602060048201526024808201527f426964207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b15613f4c57565b60405162461bcd60e51b815260206004820152601d60248201527f427579657220494420686173682063616e6e6f7420626520656d7074790000006044820152606490fd5b611d18610448613ffb926139b36103a79695613ff4611d186104486007613fc260008801546001600160a01b031690565b96613fdf600098613fd86117c06104748c611728565b1415613ea8565b613fee61220560088301610aa9565b016109a7565b1015613eed565b1415613f45565b9061400b815190565b906001600160401b03821161038e5761402882613b0485546109c7565b602090601f831160011461404a57611899929160009183613b2d575050613acc565b601f1983169161405f85600052602060002090565b9260005b81811061408357509160029391856001969410613b725750505002019055565b91936020600181928787015181550195019201614063565b906103a791614002565b6103a79190613d7d9060e0906007906140c981613cc987516001600160a01b031690565b6140db60018201613d3e602088015190565b6140f3600282016140ed604088015190565b9061409b565b61410560038201613cfc606088015190565b61411760048201613d3e608088015190565b61412960058201613d3e60a088015190565b61413b60068201613d3e60c088015190565b01920151151590565b906103a7916140a5565b919493909261415d600c6109a7565b93849283973393426000199160009461417461338b565b6001600160a01b0389168782015296602088015260408701526060860152608085015260a084015260c0830152151560e08201526141b3836007610988565b906141bd91614144565b6141c8906008611073565b906141d291613d9a565b600901906141df91613d9a565b6141e9600c6109a7565b6141f3600161097b565b6141fc91612822565b6103a790600c611ce1565b1561420e57565b60405162461bcd60e51b8152602060048201526012602482015271109a5908191bd95cc81b9bdd08195e1a5cdd60721b6044820152606490fd5b8015156103c2565b905051906103a782614248565b906020828203126103c95761044891614250565b1561427857565b60405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206d616e6167656420444b494d206b657920686173680000006044820152606490fd5b156142c457565b60405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420637573746f6d20444b494d206b65792068617368000000006044820152606490fd5b6104d76143219260209261431b815190565b94859290565b93849101610480565b61044891614309565b1561433a57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b1561437957565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103237b6b0b4b760911b6044820152606490fd5b80549294909391926001600160a01b03166143dc6000916143d56117c061047485611728565b1415614207565b6143fb6143f2828601546001600160a01b031690565b61239d336117c0565b61440a61220560088601610aa9565b6002840190614421611d186104486120ab856109a7565b146144ac576144a693613fee611d18946144a0611d18611f1a6003611f1a9861445e6103a79e614458611d1861044860049d6109a7565b146142bd565b61448661446a60405190565b809261447a60208301918261432a565b9081038252038261036d565b614498614491825190565b9160200190565b209b016109a7565b14614333565b14614372565b5060206144e793956144c9611aad6012546001600160a01b031690565b6124db6319d091526144da60405190565b9788948593849360e01b90565b03915afa908115611b70576103a795613fee611d18946144a0611d18611f1a6003600497614524611f1a9a6144a69d600091614529575b50614271565b61445e565b61454a915060203d8111614550575b614542818361036d565b81019061425d565b3861451e565b503d614538565b90916125c6816103a794612917600186016109a7565b1561457457565b60405162461bcd60e51b815260206004820152601860248201527f526566756e6420616c726561647920696e6974696174656400000000000000006044820152606490fd5b156145c057565b60405162461bcd60e51b8152602060048201526024808201527f4e6577207072696365206e6f742067726561746572207468616e206f6c6420706044820152637269636560e01b6064820152608490fd5b1561461857565b60405162461bcd60e51b815260206004820152601c60248201527f496e636f727265637420616d6f756e74206f66204554482073656e74000000006044820152606490fd5b611d1861044860066146cc936146a461220560086103a7999861468d6121e760008701546001600160a01b031690565b6134c761469f611bd060078801610aa9565b61456d565b01936146bc6146b5610448876109a7565b82116145b9565b6146c634956109a7565b90611f13565b14614611565b156146d957565b60405162461bcd60e51b815260206004820152601960248201527f526566756e6420706572696f64206e6f742073746172746564000000000000006044820152606490fd5b1561472557565b60405162461bcd60e51b815260206004820152602e60248201527f4c697374696e6720657870697265642e204269642063616e206265207769746860448201526d647261776e206469726563746c7960901b6064820152608490fd5b60086103a7926134c76147de936147a56121e760008301546001600160a01b031690565b6147b761469f611bd060078401610aa9565b6147d8611d18610448429361287b60046147d1600e6109a7565b92016109a7565b116146d2565b61471e565b156147ea57565b60405162461bcd60e51b81526020600482015260146024820152731499599d5b99081b9bdd081a5b9a5d1a585d195960621b6044820152606490fd5b1561482d57565b60405162461bcd60e51b815260206004820152601760248201527f526566756e6420706572696f64206e6f7420656e6465640000000000000000006044820152606490fd5b9061488e906008906134c76121e785546001600160a01b031690565b6148955750565b806148ad6148a860076103a79401610aa9565b6147e3565b6148c0611d1861044860054294016109a7565b1015614826565b610448670de0b6b3a764000061097b565b634e487b7160e01b600052601260045260246000fd5b81156148f8570490565b6148d8565b909190614939614927614919614913600a6109a7565b86613bad565b6149216148c7565b906148ee565b91614933838096611f13565b90612a59565b614943600061097b565b811161494c5750565b6103a79061292c600b546001600160a01b031690565b9190613a4b6104486118999390565b6103a791600091614962565b9060009161499b61499382600052602060002090565b928354613acc565b905555565b91929060208210156149f857601f84116001146149c257611899929350613acc565b50906149f36103a79360016149ea6149df85600052602060002090565b92601f602091010490565b82019101613a5f565b61497d565b50614a318293614a0f600194600052602060002090565b613abb6020601f860104820192601f861680614a39575b50601f602091010490565b600202179055565b614a4590888603613bdf565b38614a26565b929091600160401b821161038e5760201115614a92576020811015614a735761189991613acc565b60019160ff1916614a8984600052602060002090565b55600202019055565b60019150600202019055565b908154614aaa816109c7565b90818311614ad3575b818310614ac1575b50505050565b614aca936149a0565b38808080614abb565b614adf83838387614a4b565b614ab3565b60006103a791614a9e565b90600003614b00576103a790614ae4565b613a02565b60006103a791613c1f565b90600003614b00576103a790614b05565b600060096103a7928280820155826001820155614b418360028301614971565b614b4e8360038301614aef565b614b5b8360048301614971565b614b688360058301613a53565b614b758360068301613a53565b614b828360078301613a53565b82600882015501614b10565b90600003614b00576103a790614b21565b600080825590600790614bb58360018301613a53565b614bc28360028301614aef565b614bcf8360038301614971565b614bdc8360048301613a53565b614be98360058301613a53565b614bf68360068301613a53565b0155565b90600003614b00576103a790614b9f565b600091614c6a916103a794614c55611bd06008614c4686614c41610448614c3b8c8a01546001600160a01b031690565b85611073565b6153e9565b60098401936134c787866153e9565b9081614c90575b50614c6f575b506007610988565b614bfa565b83614c85614c8a92611fad6001600592016109a7565b614b8e565b38614c62565b549050614c9f611d188661097b565b1438614c5c565b614cdf6009600092614cbb8460088301612709565b614cda85614c4161044860066136a3898701546001600160a01b031690565b015490565b614ceb611d188361097b565b14614cf4575050565b614c856103a7926005610988565b6103a790614d0e61179f565b614dba565b15614d1a57565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320616c7265616479206f6e20616c6c6f776c697374000000006044820152606490fd5b916001600160a01b0360089290920291821b911b611878565b9190614d896104486118999361106a565b908354614d5f565b90815491600160401b83101561038e5782614db49160016103a795018155610cdf565b90614d78565b90614dc5600061097b565b614dd0610448845190565b811015614e6e5780614df5614de8614e6993866130c2565b516001600160a01b031690565b614e2c81614e27816104486002614e1a614e15611bd06119888685611073565b614d13565b61274c6001938492611073565b614d91565b614e567f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379161106a565b90614e6060405190565b600090a26130b3565b614dc5565b509050565b6103a790614d02565b6103a790614e8861179f565b614ed9565b15614e9457565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320616c726561647920646973616c6c6f7765640000000000006044820152606490fd5b906000614ee58161097b565b614ef0610448855190565b811015614f665780614f08614de8614f6193876130c2565b614f2c8461274c836002614f27614f226119888484611073565b614e8d565b611073565b614f37816001615245565b614e567ff27dccb929dd3f4dba2d3ffc29a7c74e35995e051a268a7c466f9ddabdf81eac9161106a565b614ee5565b50509050565b6103a790614e7c565b614f7d61179f565b6103a7614ff7565b15614f8c57565b60405162461bcd60e51b815260206004820152601d60248201527f416c6c6f77206c69737420697320616c726561647920656e61626c65640000006044820152606490fd5b9060ff60a01b9060a01b611878565b90614ff061044861189992151590565b8254614fd1565b61500c615007611bd06000611910565b614f85565b61501860016000614fe0565b7f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec361504260405190565b8080612bc6565b6103a7614f75565b61505961179f565b6103a76150ad565b1561506857565b60405162461bcd60e51b815260206004820152601e60248201527f416c6c6f77206c69737420697320616c72656164792064697361626c656400006044820152606490fd5b6150bf6150ba6000611910565b615061565b6150ca600080614fe0565b7f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0761504260405190565b6103a7615051565b9061510b6130eb6104ea845490565b9060005b81811061511c5750505090565b90919261514a61312560019261513987546001600160a01b031690565b6001600160a01b0316815260200190565b92910161510f565b90610448916150fc565b906103a7610a999261516d60405190565b93848092615152565b6104489061515c565b6104486001615176565b906151986130eb6104ea845490565b9060005b8181106151a95750505090565b9091926151c661312560019261513987546001600160a01b031690565b92910161519c565b9061044891615189565b906103a7610a99926151e960405190565b938480926151ce565b610448906151d8565b634e487b7160e01b600052603160045260246000fd5b6103a791600091614d78565b8054801561524057600019019061523d6152378383610cdf565b90615211565b55565b6151fb565b61525a61526192615255836151f2565b6152f8565b9092901590565b156152a35760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a7916152bc6152b2835490565b6146c6600161097b565b908181036152cc575b505061521d565b614db46152df610d286152e69486610cdf565b9184610cdf565b38806152c5565b61044860001961097b565b919082519260006153088161097b565b855b8110156153525761531e614de882856130c2565b6153306001600160a01b0386166117c0565b146153485761534161530a916130b3565b9050615308565b9450505050600190565b5093505050611d186152ed565b9061536e6130eb6104ea845490565b9060005b81811061537f5750505090565b90919261539461312560019261311d876109a7565b929101615372565b906104489161535f565b906103a7610a99926153b760405190565b9384809261539c565b610448906153a6565b8054801561524057600019019061523d6153e38383610cdf565b90613a53565b61525a6153fe926153f9836153c0565b615479565b156154405760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a79161544f6152b2835490565b9081810361545f575b50506153c9565b613dbd6152df6110a96154729486610cdf565b3880615458565b919082519260006154898161097b565b855b8110156153525761549f6132a882856130c2565b8414615348576154b161548b916130b3565b905061548956fea264697066735822122003aeb335a6d381b0a582f93c9d1aab7b6e89b54509710141d9511d69f98051bd64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80630373c0bf1461035257806303f693541461034d5780630d81539c146103485780630eaaf4c8146103435780630f2bc8b31461033e5780631756c30e146103395780631ce59f811461033457806321f67fbb1461032f5780632ac44f121461032a5780632f6db23814610325578063392e53cd146103205780633ec622791461031b5780634423c5f11461031657806346904840146103115780634f20fe5d1461030c5780635c975abb1461030757806364b55bed146103025780636759789f146102fd5780636aa633b6146102f85780636c2c9c7d146102f35780636caacbe7146102ee578063715018a6146102e95780637e064092146102e45780637e7a9c6c146102df5780637f17caa7146102da57806381c14314146102d557806386cfa7d3146102d057806387547367146102cb578063887f495a146102c65780638da5cb5b146102c15780639012c4a8146102bc578063944b8b2e146102b757806396ec50c3146102b25780639d8717a8146102ad578063a15ce280146102a8578063a8ef333f146102a3578063ad9287631461029e578063babcc53914610299578063bb46acd314610294578063bca0b9101461028f578063c0c53b8b1461028a578063c6a2aac814610285578063cf8e629a14610280578063ddca3f431461027b578063de74e57b14610276578063e38df96d14610271578063e6282c6e1461026c578063eb18a9d814610267578063f15851e614610262578063f160d3691461025d578063f2fde38b146102585763f6cda469036103c9576116f3565b6116db565b6116c3565b6116ab565b611690565b611678565b61165d565b61161a565b611474565b611450565b611438565b61141f565b6113dd565b6113b7565b611382565b611353565b611338565b611318565b6112b0565b6111c3565b61118e565b611151565b61112c565b611113565b6110cb565b6110af565b611012565b610ffa565b610fdf565b610fbb565b610fa3565b610f8b565b610ee3565b610ebc565b610e89565b610d31565b610cae565b610c87565b610bf9565b610b9e565b610963565b610935565b6108f7565b6108bb565b6108a3565b61088b565b610873565b610858565b610834565b6107fc565b6106da565b610682565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761038e57604052565b610357565b906103a76103a060405190565b928361036d565b565b6001600160401b03811161038e5760208091020190565b805b036103c957565b600080fd5b905035906103a7826103c0565b909291926103f06103eb826103a9565b610393565b93818552602080860192028301928184116103c957915b8383106104145750505050565b6020809161042284866103ce565b815201920191610407565b9080601f830112156103c957816020610448933591016103db565b90565b906020828203126103c95781356001600160401b0381116103c957610448920161042d565b9052565b6001600160a01b031690565b60005b8381106104935750506000910152565b8181015183820152602001610483565b6104c46104cd6020936104d7936104b8815190565b80835293849260200190565b95869101610480565b601f01601f191690565b0190565b906104fb6104f46104ea845190565b8084529260200190565b9260200190565b9060005b81811061050c5750505090565b9091926105296105226001928651815260200190565b9460200190565b9291016104ff565b80516001600160a01b031682526104489161012061058161014083016020858101516001600160a01b03169085015261056f60408601516040860152565b606085015184820360608601526104a3565b9261059160808201516080850152565b6105a060a082015160a0850152565b6105af60c082015160c0850152565b6105be60e082015160e0850152565b610100818101511515908401520151906101208184039101526104db565b8051825261044891604081019160200151906020818403910152610531565b90610448916105dc565b9061061b610611835190565b8083529160200190565b908161062d6020830284019460200190565b926000915b83831061064157505050505090565b9091929394602061066461065d838560019503875289516105fb565b9760200190565b9301930191939290610632565b602080825261044892910190610605565b346103c9576106a961069d61069836600461044b565b613266565b60405191829182610671565b0390f35b60009103126103c957565b610448916008021c81565b9061044891546106b8565b6104486000600c6106c3565b346103c9576106ea3660046106ad565b6106a96106f56106ce565b6040515b9182918290815260200190565b6001600160a01b0381166103c2565b905035906103a782610706565b6001600160401b03811161038e57602090601f01601f19160190565b90826000939282370152565b9092919261075a6103eb82610722565b938185526020850190828401116103c9576103a79261073e565b9080601f830112156103c9578160206104489335910161074a565b909160c0828403126103c9576107a583836103ce565b926107b381602085016103ce565b926107c182604083016103ce565b926107cf8360608401610715565b926080830135906001600160401b0382116103c9576107f381610448938601610774565b9360a0016103ce565b346103c95761081b61080f36600461078f565b94939093929192611b75565b604051005b906020828203126103c957610448916103ce565b346103c95761081b610847366004610820565b612961565b6104486000600f6106c3565b346103c9576108683660046106ad565b6106a96106f561084c565b346103c95761081b610886366004610820565b61258d565b346103c95761089b3660046106ad565b61081b61281a565b346103c9576108b33660046106ad565b61081b612be6565b346103c95761081b6108ce366004610820565b61282f565b90816102409103126103c95790565b90610240828203126103c957610448916108d3565b346103c95761081b61090a3660046108e2565b612106565b610448916008021c5b60ff1690565b90610448915461090f565b6104486000601061091e565b346103c9576109453660046106ad565b6106a9610950610929565b6040515b91829182901515815260200190565b346103c9576109733660046106ad565b61081b612b78565b6104486104486104489290565b906109929061097b565b600052602052604060002090565b6104489081565b61044890546109a0565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156109e7575b60208310146109e257565b6109b1565b91607f16916109d7565b80546000939291610a0e610a04836109c7565b8085529360200190565b9160018116908115610a605750600114610a2757505050565b610a3a9192939450600052602060002090565b916000925b818410610a4c5750500190565b805484840152602090930192600101610a3f565b92949550505060ff1916825215156020020190565b90610448916109f1565b906103a7610a9992610a9060405190565b93848092610a75565b038361036d565b61044890610918565b6104489054610aa0565b610abe906007610988565b90610ad082546001600160a01b031690565b91610add600182016109a7565b91610aea60028301610a7f565b91610af7600382016109a7565b91610b04600483016109a7565b91610b11600582016109a7565b916104486007610b23600685016109a7565b9301610aa9565b93989795610b8860e096610b81610b7988610b9698610b6c6103a79e99610b65610b8f9a600061010087019601906001600160a01b03169052565b60208d0152565b8a820360408c01526104a3565b9c6060890152565b6080870152565b60a0850152565b60c0830152565b019015159052565b346103c9576106a9610bb9610bb4366004610820565b610ab3565b94610bcc98969894919493929360405190565b98899889610b2a565b610448916008021c610474565b906104489154610bd5565b6104486000600b610be2565b346103c957610c093660046106ad565b6106a9610c14610bed565b6040515b918291826001600160a01b03909116815260200190565b90610c3e6104f46104ea845190565b9060005b818110610c4f5750505090565b909192610c6e61052260019286516001600160a01b0316815260200190565b929101610c42565b602080825261044892910190610c2f565b346103c957610c973660046106ad565b6106a9610ca26136f8565b60405191829182610c76565b346103c957610cbe3660046106ad565b6106a96109506118fa565b634e487b7160e01b600052603260045260246000fd5b8054821015610d0257610cf9600191600052602060002090565b91020190600090565b610cc9565b60016000610d13825490565b831015610d2e575061044891610d2891610cdf565b90610be2565b80fd5b346103c9576106a9610c14610d47366004610820565b610d07565b906020828203126103c95761044891610715565b80516001600160a01b03168252906104489060e080610d9e6101008401610d8c60208801516020870152565b604087015185820360408701526104a3565b94610dae60608201516060860152565b610dbd60808201516080860152565b610dcc60a082015160a0860152565b610ddb60c082015160c0860152565b01511515910152565b805182529061044890604080610e096060840160208701518582036020870152610d60565b9401511515910152565b9061044891610de4565b90610e29610611835190565b9081610e3b6020830284019460200190565b926000915b838310610e4f57505050505090565b90919293946020610e6b61065d83856001950387528951610e13565b9301930191939290610e40565b602080825261044892910190610e1d565b346103c9576106a9610ea4610e9f366004610d4c565b6134df565b60405191829182610e78565b6104486014600061091e565b346103c957610ecc3660046106ad565b6106a9610950610eb0565b6104486000600d6106c3565b346103c957610ef33660046106ad565b6106a96106f5610ed7565b90929192610f0e6103eb826103a9565b93818552602080860192028301928184116103c957915b838310610f325750505050565b60208091610f408486610715565b815201920191610f25565b9080601f830112156103c95781602061044893359101610efe565b906020828203126103c95781356001600160401b0381116103c9576104489201610f4b565b346103c95761081b610f9e366004610f66565b614f6c565b346103c957610fb33660046106ad565b61081b611743565b346103c95761081b610fce366004610820565b612f05565b6104486000600e6106c3565b346103c957610fef3660046106ad565b6106a96106f5610fd3565b346103c95761081b61100d366004610f66565b614e73565b346103c9576110223660046106ad565b61081b612788565b91906040838203126103c957610448906110448185610715565b936020016103ce565b61044890610474906001600160a01b031682565b6104489061104d565b61044890611061565b906109929061106a565b61108b600691600092611073565b90611094825490565b831015610d2e5750610448916110a991610cdf565b906106c3565b346103c9576106a96106f56110c536600461102a565b9061107d565b346103c95761081b6110de366004610d4c565b612d36565b90916060828403126103c9576104486110fc84846103ce565b9361110a81602086016103ce565b93604001610715565b346103c95761081b6111263660046110e3565b91612449565b346103c95761113c3660046106ad565b6106a9610c146000546001600160a01b031690565b346103c95761081b611164366004610820565b612dda565b61044860006011610be2565b6104709061106a565b6020810192916103a79190611175565b346103c95761119e3660046106ad565b6106a96111a9611169565b6040519182918261117e565b61108b600891600092611073565b346103c9576106a96106f56111d936600461102a565b906111b5565b906111eb610611835190565b90816111fd6020830284019460200190565b926000915b83831061121157505050505090565b9091929394602061122d61065d83856001950387528951610e13565b9301930191939290611202565b90610448916111df565b90611250610611835190565b90816112626020830284019460200190565b926000915b83831061127657505050505090565b9091929394602061129261065d8385600195038752895161123a565b9301930191939290611267565b602080825261044892910190611244565b346103c9576106a96112cb6112c636600461044b565b6135ce565b6040519182918261129f565b916060838303126103c9576112ec82846103ce565b926112fa83602083016103ce565b9260408201356001600160401b0381116103c9576104489201610774565b61081b6113263660046112d7565b91611c76565b61044860006012610be2565b346103c9576113483660046106ad565b6106a96111a961132c565b346103c95761081b611366366004610820565b612fc9565b6104489061137d600291600092611073565b61091e565b346103c9576106a9610950611398366004610d4c565b61136b565b91906040838203126103c9576104489061104481856103ce565b61081b6113c536600461139d565b90612695565b6104489061137d600991600092611073565b346103c9576106a96109506113f3366004610d4c565b6113cb565b90916060828403126103c9576104486114118484610715565b9361110a8160208601610715565b346103c95761081b6114323660046113f8565b91612b5a565b346103c9576114483660046106ad565b61081b615049565b346103c9576114603660046106ad565b61081b6150f4565b6104486000600a6106c3565b346103c9576114843660046106ad565b6106a96106f5611468565b805460009392916114a2610a04836109c7565b9160018116908115610a6057506001146114bb57505050565b6114ce9192939450600052602060002090565b916000925b8184106114e05750500190565b8054848401526020909301926001016114d3565b906104489161148f565b906103a7610a999261150f60405190565b938480926114f4565b611523906005610988565b80546001600160a01b03169161154360018301546001600160a01b031690565b91611550600282016109a7565b9161155d600383016114fe565b9161156a600482016109a7565b91611577600583016109a7565b91611584600682016109a7565b916104486008610b23600785016109a7565b9499989690610100966116056115fd61160c93610b96986115f06103a79e996115e96116139a60208f6115da61012082019860008301906001600160a01b03169052565b01906001600160a01b03169052565b60408d0152565b8a820360608c01526104a3565b9c6080890152565b60a0870152565b60c0850152565b60e0830152565b346103c9576106a9611635611630366004610820565b611518565b9561164899979995919594929460405190565b998a998a611596565b61044860016010610be2565b346103c95761166d3660046106ad565b6106a96111a9611651565b346103c95761081b61168b366004610820565b612454565b346103c9576106a961069d6116a6366004610d4c565b613312565b346103c95761081b6116be366004610820565b612243565b346103c95761081b6116d6366004610d4c565b612e3d565b346103c95761081b6116ee366004610d4c565b611864565b346103c95761081b611706366004610d4c565b612d8c565b61171361179f565b6103a7611731565b6104746104486104489290565b6104489061171b565b6103a761173e6000611728565b61189d565b6103a761170b565b1561175257565b60405162461bcd60e51b81528061179b600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6103a76117b46000546001600160a01b031690565b6117cd6117c033610474565b916001600160a01b031690565b1461174b565b6103a7906117df61179f565b61183f565b156117eb57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6103a79061173e6118536104746000611728565b6001600160a01b03831614156117e4565b6103a7906117d3565b906001600160a01b03905b9181191691161790565b906118926104486118999261106a565b825461186d565b9055565b6000546001600160a01b0316906118b5816000611882565b6118e86118e27f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361106a565b9161106a565b916118f260405190565b80805b0390a3565b6104486004610aa9565b6104489060a01c610918565b6104489054611904565b1561192157565b60405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc81b9bdd08185b1b1bddd95960521b6044820152606490fd5b906103a795949392916119726000611910565b156119975761199261198d611988336002611073565b610aa9565b61191a565b6119ed565b611992600161191a565b156119a857565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b906103a79594939291611a08611a036010610aa9565b6119a1565b906103a79594939291611a19611bc2565b611a71565b9081526040810192916103a79160200152565b6040513d6000823e3d90fd5b611a6a6103a794611a63606094989795611a5c608086019a6000870152565b6020850152565b6040830152565b0190611175565b9385611a9791969396611a8e611a868761106a565b858a8a6138e9565b85888589613dc3565b91611ab2611aad6011546001600160a01b031690565b61106a565b6327d335a890803b156103c957611ad891600091611acf60405190565b93849260e01b90565b8252818381611aeb8a8d60048401611a1e565b03925af18015611b7057611b52575b50611b4d3394611b3a611b36611b307f77a8be0890be6d79729c684636469d83d455e267a0bf0c9bc2463d8db867a5419761097b565b9761106a565b9790565b97611b4460405190565b94859485611a3d565b0390a4565b611b6a906000611b62818361036d565b8101906106ad565b38611afa565b611a31565b906103a7959493929161195f565b15611b8a57565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b6103a7611bd4611bd06118fa565b1590565b611b83565b90611bec9291611be7611cf8565b611bf4565b6103a7611d34565b906103a79291611c02611bc2565b9091611c2a9034938484611c1a610448826005610988565b611c25848483613f91565b61414e565b903391611b4d611c6c611c66611c607f6d2b783673dbbf046f2e5a1f3c92ce62c29a0f5385f2b1f0eaf19019ef28cb559461097b565b9461097b565b9461106a565b946106f960405190565b906103a79291611bd9565b610448600261097b565b15611c9257565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9060001990611878565b90611cf16104486118999261097b565b8254611cd7565b6103a7611d0560036109a7565b611d23611d10611c81565b918290611d1c565b9190565b1415611c8b565b6003611ce1565b610448600161097b565b6103a7611d23611d2a565b6103a790611d50611a036010610aa9565b611bec90611d5c611cf8565b6103a790611d68611bc2565b611f2e565b6104489060081c610474565b6104489054611d6d565b905051906103a7826103c0565b90929192611da06103eb82610722565b938185526020850190828401116103c9576103a792610480565b9080601f830112156103c957815161044892602001611d90565b6080818303126103c957611de88282611d83565b92611df68360208401611d83565b926040830151906001600160401b0382116103c957611e1a81610448938601611dba565b93606001611d83565b9037565b6103a791604091611e23565b906104d781604093611e27565b611e4c611d1860029390565b806000925b848410611e5f575050505050565b611e7b611e74600192611e6f8690565b611e33565b9360400190565b93019291611e51565b6103a79161014091611e23565b6103a7919061010090611ecf90611ea88482611e27565b611eb9604082016040860190611e40565b611eca60c0820160c0860190611e27565b820190565b910190611e84565b610240810192916103a79190611e91565b9081526040810192916103a7916020906115da565b634e487b7160e01b600052601160045260246000fd5b9190611f1e565b9290565b8203918211611f2957565b611efd565b6000611f6b91611f41611aad6010611d79565b611f60836365cd296c611f5360405190565b9687958694859360e01b90565b835260048301611ed7565b03925af18015611b70576000918291829182916120dd575b50611fbb611f95610448846007610988565b93600595611fb36104486001880198611fad8a6109a7565b90610988565b9384876143af565b611fd0611aad6011546001600160a01b031690565b90632b8a8002611fe2600483016109a7565b85546001600160a01b03165b93803b156103c9576120166000809461202161200960405190565b9889968795869460e01b90565b845260048401611ee8565b03925af1908115611b70576120719561207d93612076936120c7575b5061204a600687016109a7565b96828661206b61206560018c9701546001600160a01b031690565b946109a7565b98614557565b6148fd565b8094611f13565b926120b16120ab7f3247261fffac93019b3a34aa6692df18a5ddea75a12bf8ec4539903a608a6e4c9361097b565b9361097b565b936118f56120be60405190565b92839283611a1e565b6120d7906000611b62818361036d565b3861203d565b925090506120fd92503d8091833e6120f5818361036d565b810190611dd4565b90919238611f83565b6103a790611d3f565b611bec9061211b611cf8565b6121ad565b1561212757565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420626964206f776e65720000000000000000006044820152606490fd5b1561217357565b60405162461bcd60e51b81526020600482015260126024820152714c697374696e67206e6f742061637469766560701b6044820152606490fd5b6121bb610448826007610988565b60018101916121d16104486005611fad866109a7565b82906121f66121e783546001600160a01b031690565b6121f0336117c0565b14612120565b61220a61220560088301610aa9565b61216c565b61221f611aad6011546001600160a01b031690565b91632b8a800290611fee612235600485016109a7565b91546001600160a01b031690565b6103a79061210f565b906103a7929161225a611bc2565b612364565b1561226657565b60405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74206c697374696e67206f776e657200000000006044820152606490fd5b156122b257565b60405162461bcd60e51b8152602060048201526024808201527f41736b207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b1561230a57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c69642073616c652045544820726563697069656e740000000000006044820152606490fd5b9081526040810192916103a791602090611a6a565b919091612375610448826005610988565b9161240081600161238d86546001600160a01b031690565b3396906123a39061239d896117c0565b1461225f565b6123b261220560088301610aa9565b6123cd6123c4610448600784016109a7565b895b10156122ab565b6123ed6123dd6104746000611728565b6123e68561106a565b1415612303565b6123fa8860068301611ce1565b01611882565b61243361242d7f6df0cec5e0539cca31fe823df048a8d5834ba5dc079fa1d38e5157f00f9d085b9361097b565b9361106a565b936118f561244060405190565b9283928361234f565b906103a7929161224c565b612462610448826005610988565b80546001600160a01b031633919061247d9061239d846117c0565b61248c61220560088301610aa9565b6124a1611aad6011546001600160a01b031690565b90636e74da686124b3600483016109a7565b833b156103c9576124e9936124db600080946124ce60405190565b9788958694859360e01b90565b835260048301526024820190565b03925af1908115611b7057612505928592612532575b50614ca6565b6118e86118e27f5832f888aea12cc23bd891f2d9fd4bd01b8ce0e22898b6e7cee1519f5bd469549361097b565b612542906000611b62818361036d565b386124ff565b1561254f57565b60405162461bcd60e51b815260206004820152601660248201527543616c6c6572206973206e6f7420726567697374727960501b6044820152606490fd5b6125cb8161259f610448826005610988565b6125c66125b7611aad6011546001600160a01b031690565b6125c0336117c0565b14612548565b614ca6565b6125f57ff7504a55c42715ea3e852b679d6453ecfe02acbddb4d0652aa251d4458b7cc219161097b565b906125ff60405190565b80805b0390a2565b90611bec91612614611cf8565b906103a791612621611bc2565b612659826006612635610448856007610988565b6126538361264d6104486005611fad600187016109a7565b8361465d565b01611ce1565b33906118f561268b61242d7f8283dd04c4a2b6691bd80232f254e0ad876b8bb149938d3e7ced5c6e8a35b6149361097b565b936106f960405190565b906103a791612607565b6126ac611a036010610aa9565b6103a7612720565b156126bb57565b60405162461bcd60e51b815260206004820152601e60248201527f496e7374616e742061636365707420616c726561647920656e61626c656400006044820152606490fd5b9060ff90611878565b9061271961044861189992151590565b8254612700565b3380612751600961273f61273a611bd06119888685611073565b6126b4565b61274c6001948592611073565b612709565b61260261277e7f2e259e0564e75f0e10ce0e012a5ce2528ae513b0188b619bcc581b8ba8db70329261106a565b9261095460405190565b6103a761269f565b61279d611a036010610aa9565b6103a76127f1565b156127ac57565b60405162461bcd60e51b815260206004820152601f60248201527f496e7374616e742061636365707420616c72656164792064697361626c6564006044820152606490fd5b3380612751600961280d6128086119888584611073565b6127a5565b61274c6000948592611073565b6103a7612790565b91908201809211611f2957565b6128a1600060076128936128466104488684610988565b91612889600561286d612867610448612861600189016109a7565b84610988565b86614781565b6128814261287b600f6109a7565b90612822565b908501611ce1565b6001908301612709565b01546001600160a01b031690565b6118e86118e27f9da9db6af7fcfa5edbaa006b61a744d33fe4651a4c594cddd3e9a7e757ecd8d59361097b565b611bec906128da611cf8565b6128e8610448826007610988565b9061291d6129006104486005611fad600187016109a7565b61290a8185614872565b82612917600686016109a7565b94614c0b565b33906129318361292c8461106a565b612a59565b6118f561268b61242d7f8f8619524e8d462cead34604bd2247ede24175801481e4d0b8059ac8aa41c3019361097b565b6103a7906128ce565b1561297157565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b906129c36103eb83610722565b918252565b3d156129e2576129d73d6129b6565b903d6000602084013e565b606090565b156129ee57565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b60006103a792612a7a8293611aad612a703061106a565b849031101561296a565b90612a8460405190565b90818003925af1612a936129c8565b506129e7565b906103a79291612aa761179f565b612b18565b15612ab357565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b90610100600160a81b039060081b611878565b90612b116104486118999261106a565b8254612aee565b612b4e9291612b40612b4792612b39612b34611bd06010610aa9565b612aac565b6010612b01565b6011611882565b6012611882565b6103a760016010612709565b906103a79291612a99565b612b6d61179f565b6103a76103a7612bcb565b6103a7612b65565b612b88611bc2565b6103a7612b9760016004612709565b33612bc67f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610c1860405190565b0390a1565b6103a7612b80565b612bdb61179f565b6103a76103a7612c34565b6103a7612bd3565b612bf6612c7f565b6103a7612c0560006004612709565b33612bc67f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610c1860405190565b6103a7612bee565b15612c4357565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b6103a7612c8a6118fa565b612c3c565b6103a790612c9b61179f565b612cde565b15612ca757565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b612d01612cea8261106a565b612cfa6117c06104746000611728565b1415612ca0565b612d0c816010612b01565b6125f57f9106eb309cc633a951e77bd36af34646a9df8e6ade485938c34e3844a37b79da9161106a565b6103a790612c8f565b6103a790612d4b61179f565b612d57612cea8261106a565b612d62816012611882565b6125f57f9d3407c7200ba4f49e97f3d3f8250ec01c24b0ada6fa31053d71850793b739539161106a565b6103a790612d3f565b6103a790612da161179f565b612dac81600a611ce1565b612bc67f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76916106f960405190565b6103a790612d95565b6103a790612def61179f565b612e08612dff6104746000611728565b612cfa8361106a565b612e1381600b611882565b6125f57f7a7b5a0a132f9e0581eb8527f66eae9ee89c2a3e79d4ac7e41a1f1f4d48a7fc29161106a565b6103a790612de3565b6103a790612e5261179f565b612eb8565b15612e5e57565b60405162461bcd60e51b815260206004820152602c60248201527f42696420736574746c656d656e7420706572696f64206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608490fd5b612ecc612ec5600061097b565b8211612e57565b612ed781600e611ce1565b612bc67f09a165ff77cf0f319f9ece89bc6dbe2a469a0da2640c9e6b501132846843daf5916106f960405190565b6103a790612e46565b6103a790612f1a61179f565b612f7c565b15612f2657565b60405162461bcd60e51b815260206004820152602860248201527f42696420726566756e6420706572696f64206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608490fd5b612f90612f89600061097b565b8211612f1f565b612f9b81600f611ce1565b612bc67f90e0312fddcd5cbec358d5c7d63976e5c97d71dfb8d6cd5f2c53b0a1a043ccf0916106f960405190565b6103a790612f0e565b906129c36103eb836103a9565b6104486040610393565b610448610140610393565b612ffc612fe9565b906000825260208080808080808080808b01600081520160008152016060815201600081520160008152016000815201600081520160008152016060905250565b905250565b610448612ff4565b613052612fdf565b9060008252602080830161303d613042565b61044861304a565b60005b82811061307b57505050565b602090613086613064565b818401520161306f565b906103a76130a66130a084612fd2565b936103a9565b601f19016020840161306c565b6000198114611f295760010190565b906130cb825190565b811015610d02576020809102010190565b906130f76130eb6104ea845490565b92600052602060002090565b9060005b8181106131085750505090565b90919261312c61312560019261311d876109a7565b815260200190565b9460010190565b9291016130fb565b90610448916130dc565b906103a7610a999261314f60405190565b93848092613134565b906103a76132556009613169612fe9565b9461318b61317e82546001600160a01b031690565b6001600160a01b03168752565b6131b26131a260018301546001600160a01b031690565b6001600160a01b03166020880152565b6131c86131c1600283016109a7565b6040880152565b6131de6131d7600383016114fe565b6060880152565b6131f46131ed600483016109a7565b6080880152565b61320a613203600583016109a7565b60a0880152565b613220613219600683016109a7565b60c0880152565b61323661322f600783016109a7565b60e0880152565b61324f61324560088301610aa9565b1515610100880152565b0161313e565b610120840152565b61044890613158565b90613277613272835190565b613090565b91600090836132858361097b565b613290610448845190565b81101561330257806132ac6132a86132fd93866130c2565b5190565b6132e26132db6132c46005611fad6132a8878b6130c2565b6132d66132cf612fdf565b948a860152565b61325d565b6020830152565b6132ec82896130c2565b526132f781886130c2565b506130b3565b613285565b5093505050565b6104489061313e565b61332961332e91613321606090565b506006611073565b613309565b9061333a613272835190565b91600090836133488361097b565b613353610448845190565b811015613302578061336b6132a861337c93866130c2565b6132e26132db6132c4836005610988565b613348565b6104486060610393565b610448610100610393565b61339e61338b565b906000825260208080808080808089016000815201606081520160008152016000815201600081520160005b8152016000905250565b610448613396565b6133e4613381565b90600082526020808084016133ca6133d4565b6104486133dc565b60005b82811061340e57505050565b6020906134196133f7565b8184015201613402565b906103a76134336130a084612fd2565b601f1901602084016133ff565b906103a76134cd600761345161338b565b9461346661317e82546001600160a01b031690565b61347c613475600183016109a7565b6020880152565b61348b6131c160028301610a7f565b61349a6131d7600383016109a7565b6134a96131ed600483016109a7565b6134b8613203600583016109a7565b6134c7613219600683016109a7565b01610aa9565b151560e0840152565b61044890613440565b906134ee613329836008611073565b6134fe6134f9825190565b613423565b926000918461350c8461097b565b613517610448845190565b81101561358c578061352f6132a861358793866130c2565b61357261353d826007610988565b613569611a5c6135516119888b6009611073565b9261356461355d613381565b968d880152565b6134d6565b15156040830152565b61357c828a6130c2565b526132f781896130c2565b61350c565b509450505050565b60005b8281106135a357505050565b606082820152602001613597565b906103a76135c16130a084612fd2565b601f190160208401613594565b6135de6135d9825190565b6135b1565b806000916135eb8361097b565b945b6135f8610448865190565b8610156136f057613621600961361b6136146132a88a8a6130c2565b6005610988565b01613309565b9461362d6134f9875190565b61363788866130c2565b5261364287856130c2565b5061364c8561097b565b613657610448885190565b8110156136d957806132f781886136b86136776132a86136d4978e6130c2565b613569611a5c60076135646136a96119886136928785610988565b936136a38a6128938a600994610988565b90611073565b946136b2613381565b97880152565b6136c28c8a6130c2565b51906136ce83836130c2565b526130c2565b61364c565b50929450946136e7906130b3565b949391936135ed565b935093505050565b61044861517f565b905051906103a782610706565b91909160a0818403126103c95761372460a0610393565b9260006137318284613700565b908501526020820151906001600160401b0382116103c9576137588161378b938501611dba565b6020860152604061376b82828601611d83565b90860152606061377d82828601613700565b908601526080809301611d83565b90830152565b9190916040818403126103c9576137a86040610393565b9260006137b58284611d83565b9085015260208201516001600160401b0381116103c9576132db920161370d565b906020828203126103c95781516001600160401b0381116103c9576104489201613791565b1561380257565b60405162461bcd60e51b815260206004820152601a60248201527f43616c6c6572206973206e6f7420646f6d61696e206f776e65720000000000006044820152606490fd5b1561384e57565b60405162461bcd60e51b815260206004820152602160248201527f446f6d61696e20616c7265616479206c6973746564206f6e20726567697374726044820152607960f81b6064820152608490fd5b156138a457565b60405162461bcd60e51b815260206004820152601960248201527f4d696e696d756d20626964207072696365206973207a65726f000000000000006044820152606490fd5b60006139269194939294613908611aad6011546001600160a01b031690565b6124db631a24254761391960405190565b9586948593849360e01b90565b03915afa938415611b70576104746123e6936123c6611d18613985606060206103a79b6117c0996000916139bf575b5001805151613976906001600160a01b0316613970336117c0565b146137fb565b5101516001600160a01b031690565b946104486139b860006139b361399a82611728565b996139ad6001600160a01b038c166117c0565b14613847565b61097b565b821161389d565b6139da913d8091833e6139d2818361036d565b8101906137d6565b38613955565b369037565b906103a76139f56130a084612fd2565b601f1901602084016139e0565b634e487b7160e01b600052600060045260246000fd5b90611cf16104486118999290565b9160001960089290920291821b911b611878565b9190613a4b6104486118999361097b565b908354613a26565b6103a791600091613a3a565b818110613a6a575050565b80613a786000600193613a53565b01613a5f565b9190601f8111613a8d57505050565b613a9f6103a793600052602060002090565b906020601f840181900483019310613ac2575b6020601f909101045b0190613a5f565b9091508190613ab2565b600019600883021c1916906002021790565b90613ae7815190565b906001600160401b03821161038e57613b0a82613b0485546109c7565b85613a7e565b602090601f8311600114613b3857611899929160009183613b2d575b5050613acc565b015190503880613b26565b601f19831691613b4d85600052602060002090565b9260005b818110613b8b57509160029391856001969410613b72575b50505002019055565b01516000196008601f8516021c19169055388080613b69565b91936020600181928787015181550195019201613b51565b906103a791613ade565b81810292918115918404141715611f2957565b818110613bcb575050565b80613bd96000600193613a53565b01613bc0565b90613bf290600019906020036008021c90565b8154169055565b9091828110613c0757505050565b6103a79290613c15906130eb565b9081019101613bc0565b90600160401b811161038e5781613c376103a7935490565b90828155613bf9565b8151916001600160401b03831161038e57613c6a6130eb600192613c648686613c1f565b60200190565b92049160005b838110613c7d5750505050565b6001906020613c8d610448865190565b9401938184015501613c70565b906103a791613c40565b6103a79190613d8a9061012090600990613ccf81613cc987516001600160a01b031690565b90611882565b613cea60018201613cc960208801516001600160a01b031690565b613d0260028201613cfc604088015190565b90613a18565b613d1a60038201613d14606088015190565b90613ba3565b613d2c60048201613cfc608088015190565b613d4460058201613d3e60a088015190565b90611ce1565b613d5660068201613d3e60c088015190565b613d6860078201613d3e60e088015190565b613d8360088201613d7d610100880151151590565b90612709565b0192015190565b90613c9a565b906103a791613ca4565b90815491600160401b83101561038e5782613dbd9160016103a795018155610cdf565b90613a3a565b919295949095613dd1600090565b50613ddc600d6109a7565b93849733944290600198600096613df28861097b565b613dfb906139e5565b9689613e05612fe9565b998a0190613e1b91906001600160a01b03169052565b6001600160a01b0316602089015260408801526060870152608086015260a085015260c084015260e0830152841515610100830152610120820152613e61836005610988565b90613e6b91613d90565b613e76906006611073565b90613e8091613d9a565b613e8a600d6109a7565b90613e949061097b565b613e9d91612822565b6103a790600d611ce1565b15613eaf57565b60405162461bcd60e51b8152602060048201526016602482015275131a5cdd1a5b99c8191bd95cc81b9bdd08195e1a5cdd60521b6044820152606490fd5b15613ef457565b60405162461bcd60e51b8152602060048201526024808201527f426964207072696365206973206c657373207468616e206d696e2062696420706044820152637269636560e01b6064820152608490fd5b15613f4c57565b60405162461bcd60e51b815260206004820152601d60248201527f427579657220494420686173682063616e6e6f7420626520656d7074790000006044820152606490fd5b611d18610448613ffb926139b36103a79695613ff4611d186104486007613fc260008801546001600160a01b031690565b96613fdf600098613fd86117c06104748c611728565b1415613ea8565b613fee61220560088301610aa9565b016109a7565b1015613eed565b1415613f45565b9061400b815190565b906001600160401b03821161038e5761402882613b0485546109c7565b602090601f831160011461404a57611899929160009183613b2d575050613acc565b601f1983169161405f85600052602060002090565b9260005b81811061408357509160029391856001969410613b725750505002019055565b91936020600181928787015181550195019201614063565b906103a791614002565b6103a79190613d7d9060e0906007906140c981613cc987516001600160a01b031690565b6140db60018201613d3e602088015190565b6140f3600282016140ed604088015190565b9061409b565b61410560038201613cfc606088015190565b61411760048201613d3e608088015190565b61412960058201613d3e60a088015190565b61413b60068201613d3e60c088015190565b01920151151590565b906103a7916140a5565b919493909261415d600c6109a7565b93849283973393426000199160009461417461338b565b6001600160a01b0389168782015296602088015260408701526060860152608085015260a084015260c0830152151560e08201526141b3836007610988565b906141bd91614144565b6141c8906008611073565b906141d291613d9a565b600901906141df91613d9a565b6141e9600c6109a7565b6141f3600161097b565b6141fc91612822565b6103a790600c611ce1565b1561420e57565b60405162461bcd60e51b8152602060048201526012602482015271109a5908191bd95cc81b9bdd08195e1a5cdd60721b6044820152606490fd5b8015156103c2565b905051906103a782614248565b906020828203126103c95761044891614250565b1561427857565b60405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206d616e6167656420444b494d206b657920686173680000006044820152606490fd5b156142c457565b60405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420637573746f6d20444b494d206b65792068617368000000006044820152606490fd5b6104d76143219260209261431b815190565b94859290565b93849101610480565b61044891614309565b1561433a57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b1561437957565b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103237b6b0b4b760911b6044820152606490fd5b80549294909391926001600160a01b03166143dc6000916143d56117c061047485611728565b1415614207565b6143fb6143f2828601546001600160a01b031690565b61239d336117c0565b61440a61220560088601610aa9565b6002840190614421611d186104486120ab856109a7565b146144ac576144a693613fee611d18946144a0611d18611f1a6003611f1a9861445e6103a79e614458611d1861044860049d6109a7565b146142bd565b61448661446a60405190565b809261447a60208301918261432a565b9081038252038261036d565b614498614491825190565b9160200190565b209b016109a7565b14614333565b14614372565b5060206144e793956144c9611aad6012546001600160a01b031690565b6124db6319d091526144da60405190565b9788948593849360e01b90565b03915afa908115611b70576103a795613fee611d18946144a0611d18611f1a6003600497614524611f1a9a6144a69d600091614529575b50614271565b61445e565b61454a915060203d8111614550575b614542818361036d565b81019061425d565b3861451e565b503d614538565b90916125c6816103a794612917600186016109a7565b1561457457565b60405162461bcd60e51b815260206004820152601860248201527f526566756e6420616c726561647920696e6974696174656400000000000000006044820152606490fd5b156145c057565b60405162461bcd60e51b8152602060048201526024808201527f4e6577207072696365206e6f742067726561746572207468616e206f6c6420706044820152637269636560e01b6064820152608490fd5b1561461857565b60405162461bcd60e51b815260206004820152601c60248201527f496e636f727265637420616d6f756e74206f66204554482073656e74000000006044820152606490fd5b611d1861044860066146cc936146a461220560086103a7999861468d6121e760008701546001600160a01b031690565b6134c761469f611bd060078801610aa9565b61456d565b01936146bc6146b5610448876109a7565b82116145b9565b6146c634956109a7565b90611f13565b14614611565b156146d957565b60405162461bcd60e51b815260206004820152601960248201527f526566756e6420706572696f64206e6f742073746172746564000000000000006044820152606490fd5b1561472557565b60405162461bcd60e51b815260206004820152602e60248201527f4c697374696e6720657870697265642e204269642063616e206265207769746860448201526d647261776e206469726563746c7960901b6064820152608490fd5b60086103a7926134c76147de936147a56121e760008301546001600160a01b031690565b6147b761469f611bd060078401610aa9565b6147d8611d18610448429361287b60046147d1600e6109a7565b92016109a7565b116146d2565b61471e565b156147ea57565b60405162461bcd60e51b81526020600482015260146024820152731499599d5b99081b9bdd081a5b9a5d1a585d195960621b6044820152606490fd5b1561482d57565b60405162461bcd60e51b815260206004820152601760248201527f526566756e6420706572696f64206e6f7420656e6465640000000000000000006044820152606490fd5b9061488e906008906134c76121e785546001600160a01b031690565b6148955750565b806148ad6148a860076103a79401610aa9565b6147e3565b6148c0611d1861044860054294016109a7565b1015614826565b610448670de0b6b3a764000061097b565b634e487b7160e01b600052601260045260246000fd5b81156148f8570490565b6148d8565b909190614939614927614919614913600a6109a7565b86613bad565b6149216148c7565b906148ee565b91614933838096611f13565b90612a59565b614943600061097b565b811161494c5750565b6103a79061292c600b546001600160a01b031690565b9190613a4b6104486118999390565b6103a791600091614962565b9060009161499b61499382600052602060002090565b928354613acc565b905555565b91929060208210156149f857601f84116001146149c257611899929350613acc565b50906149f36103a79360016149ea6149df85600052602060002090565b92601f602091010490565b82019101613a5f565b61497d565b50614a318293614a0f600194600052602060002090565b613abb6020601f860104820192601f861680614a39575b50601f602091010490565b600202179055565b614a4590888603613bdf565b38614a26565b929091600160401b821161038e5760201115614a92576020811015614a735761189991613acc565b60019160ff1916614a8984600052602060002090565b55600202019055565b60019150600202019055565b908154614aaa816109c7565b90818311614ad3575b818310614ac1575b50505050565b614aca936149a0565b38808080614abb565b614adf83838387614a4b565b614ab3565b60006103a791614a9e565b90600003614b00576103a790614ae4565b613a02565b60006103a791613c1f565b90600003614b00576103a790614b05565b600060096103a7928280820155826001820155614b418360028301614971565b614b4e8360038301614aef565b614b5b8360048301614971565b614b688360058301613a53565b614b758360068301613a53565b614b828360078301613a53565b82600882015501614b10565b90600003614b00576103a790614b21565b600080825590600790614bb58360018301613a53565b614bc28360028301614aef565b614bcf8360038301614971565b614bdc8360048301613a53565b614be98360058301613a53565b614bf68360068301613a53565b0155565b90600003614b00576103a790614b9f565b600091614c6a916103a794614c55611bd06008614c4686614c41610448614c3b8c8a01546001600160a01b031690565b85611073565b6153e9565b60098401936134c787866153e9565b9081614c90575b50614c6f575b506007610988565b614bfa565b83614c85614c8a92611fad6001600592016109a7565b614b8e565b38614c62565b549050614c9f611d188661097b565b1438614c5c565b614cdf6009600092614cbb8460088301612709565b614cda85614c4161044860066136a3898701546001600160a01b031690565b015490565b614ceb611d188361097b565b14614cf4575050565b614c856103a7926005610988565b6103a790614d0e61179f565b614dba565b15614d1a57565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320616c7265616479206f6e20616c6c6f776c697374000000006044820152606490fd5b916001600160a01b0360089290920291821b911b611878565b9190614d896104486118999361106a565b908354614d5f565b90815491600160401b83101561038e5782614db49160016103a795018155610cdf565b90614d78565b90614dc5600061097b565b614dd0610448845190565b811015614e6e5780614df5614de8614e6993866130c2565b516001600160a01b031690565b614e2c81614e27816104486002614e1a614e15611bd06119888685611073565b614d13565b61274c6001938492611073565b614d91565b614e567f41f4a012571b6bf21f3c6557be5d1a28851ce415203203b84c14099b84fe97379161106a565b90614e6060405190565b600090a26130b3565b614dc5565b509050565b6103a790614d02565b6103a790614e8861179f565b614ed9565b15614e9457565b60405162461bcd60e51b815260206004820152601a60248201527f4164647265737320616c726561647920646973616c6c6f7765640000000000006044820152606490fd5b906000614ee58161097b565b614ef0610448855190565b811015614f665780614f08614de8614f6193876130c2565b614f2c8461274c836002614f27614f226119888484611073565b614e8d565b611073565b614f37816001615245565b614e567ff27dccb929dd3f4dba2d3ffc29a7c74e35995e051a268a7c466f9ddabdf81eac9161106a565b614ee5565b50509050565b6103a790614e7c565b614f7d61179f565b6103a7614ff7565b15614f8c57565b60405162461bcd60e51b815260206004820152601d60248201527f416c6c6f77206c69737420697320616c726561647920656e61626c65640000006044820152606490fd5b9060ff60a01b9060a01b611878565b90614ff061044861189992151590565b8254614fd1565b61500c615007611bd06000611910565b614f85565b61501860016000614fe0565b7f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec361504260405190565b8080612bc6565b6103a7614f75565b61505961179f565b6103a76150ad565b1561506857565b60405162461bcd60e51b815260206004820152601e60248201527f416c6c6f77206c69737420697320616c72656164792064697361626c656400006044820152606490fd5b6150bf6150ba6000611910565b615061565b6150ca600080614fe0565b7f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb0761504260405190565b6103a7615051565b9061510b6130eb6104ea845490565b9060005b81811061511c5750505090565b90919261514a61312560019261513987546001600160a01b031690565b6001600160a01b0316815260200190565b92910161510f565b90610448916150fc565b906103a7610a999261516d60405190565b93848092615152565b6104489061515c565b6104486001615176565b906151986130eb6104ea845490565b9060005b8181106151a95750505090565b9091926151c661312560019261513987546001600160a01b031690565b92910161519c565b9061044891615189565b906103a7610a99926151e960405190565b938480926151ce565b610448906151d8565b634e487b7160e01b600052603160045260246000fd5b6103a791600091614d78565b8054801561524057600019019061523d6152378383610cdf565b90615211565b55565b6151fb565b61525a61526192615255836151f2565b6152f8565b9092901590565b156152a35760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a7916152bc6152b2835490565b6146c6600161097b565b908181036152cc575b505061521d565b614db46152df610d286152e69486610cdf565b9184610cdf565b38806152c5565b61044860001961097b565b919082519260006153088161097b565b855b8110156153525761531e614de882856130c2565b6153306001600160a01b0386166117c0565b146153485761534161530a916130b3565b9050615308565b9450505050600190565b5093505050611d186152ed565b9061536e6130eb6104ea845490565b9060005b81811061537f5750505090565b90919261539461312560019261311d876109a7565b929101615372565b906104489161535f565b906103a7610a99926153b760405190565b9384809261539c565b610448906153a6565b8054801561524057600019019061523d6153e38383610cdf565b90613a53565b61525a6153fe926153f9836153c0565b615479565b156154405760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606490fd5b6103a79161544f6152b2835490565b9081810361545f575b50506153c9565b613dbd6152df6110a96154729486610cdf565b3880615458565b919082519260006154898161097b565b855b8110156153525761549f6132a882856130c2565b8414615348576154b161548b916130b3565b905061548956fea264697066735822122003aeb335a6d381b0a582f93c9d1aab7b6e89b54509710141d9511d69f98051bd64736f6c63430008120033\",\n  \"devdoc\": {\n    \"events\": {\n      \"Paused(address)\": {\n        \"details\": \"Emitted when the pause is triggered by `account`.\"\n      },\n      \"Unpaused(address)\": {\n        \"details\": \"Emitted when the pause is lifted by `account`.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAddressesToAllowlist(address[])\": {\n        \"params\": {\n          \"_allowedAddresses\": \"List of addresses allowed to call allow listed functions\"\n        }\n      },\n      \"buyerReleaseFunds(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to release funds for\"\n        }\n      },\n      \"createBid(uint256,bytes32,string)\": {\n        \"params\": {\n          \"_buyerIdHash\": \"The hashed buyerId which is also output as part of the transfer proof later\",\n          \"_encryptedBuyerId\": \"The encrypted buyerId. Should be the same as the buyerId hashed\",\n          \"_listingId\": \"The unique identifier of the listing to bid on\"\n        }\n      },\n      \"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\": {\n        \"params\": {\n          \"_askPrice\": \"An asking price for the domain\",\n          \"_dkimKeyHash\": \"The custom DKIM key hash. If empty, the managed DKIM key hash will be used\",\n          \"_domainId\": \"The unique identifier of the domain\",\n          \"_encryptionKey\": \"The encryption key for buyers to encrypt the buyerId to\",\n          \"_minBidPrice\": \"The minimum bid price for the domain\",\n          \"_saleEthRecipient\": \"The address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\"\n        }\n      },\n      \"deleteListing(uint256)\": {\n        \"params\": {\n          \"_listingId\": \"The unique identifier of the listing to delete\"\n        }\n      },\n      \"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\": {\n        \"params\": {\n          \"_proof\": \"The zk-email proof of domain transfer\"\n        }\n      },\n      \"getListingBids(uint256[])\": {\n        \"params\": {\n          \"_listingIds\": \"An array of listingIds to fetch bids for\"\n        }\n      },\n      \"getListings(uint256[])\": {\n        \"params\": {\n          \"_listingIds\": \"An array of listingIds to fetch details for\"\n        }\n      },\n      \"getUserBids(address)\": {\n        \"params\": {\n          \"_user\": \"The address of the user to fetch bids for\"\n        }\n      },\n      \"getUserListings(address)\": {\n        \"params\": {\n          \"_user\": \"The address of the user to fetch listings for\"\n        }\n      },\n      \"increaseBidPrice(uint256,uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to increase the price for\",\n          \"_newPrice\": \"The new price for the bid\"\n        }\n      },\n      \"initialize(address,address,address)\": {\n        \"params\": {\n          \"_mailServerKeyHashAdapter\": \"The address of the mail server key hash adapter contract\",\n          \"_transferDomainProcessor\": \"The address of the domain transfer processor contract\",\n          \"_verifiedDomainRegistry\": \"The address of the verified domain registry contract\"\n        }\n      },\n      \"initiateRefund(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to initiate refund for\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"paused()\": {\n        \"details\": \"Returns true if the contract is paused, and false otherwise.\"\n      },\n      \"registryRemoveListing(uint256)\": {\n        \"params\": {\n          \"_listingId\": \"Listing Id to remove\"\n        }\n      },\n      \"removeAddressesFromAllowlist(address[])\": {\n        \"params\": {\n          \"_disallowedAddresses\": \"List of addresses being disallowed from calling allow listed functions\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"updateBidRefundPeriod(uint256)\": {\n        \"params\": {\n          \"_newBidRefundPeriod\": \"The new bid refund period in seconds\"\n        }\n      },\n      \"updateBidSettlementPeriod(uint256)\": {\n        \"params\": {\n          \"_newBidSettlementPeriod\": \"The new bid settlement period in seconds\"\n        }\n      },\n      \"updateFee(uint256)\": {\n        \"params\": {\n          \"_newFee\": \"The new fee percentage (in basis points)\"\n        }\n      },\n      \"updateFeeRecipient(address)\": {\n        \"params\": {\n          \"_newFeeRecipient\": \"The new address to receive fees\"\n        }\n      },\n      \"updateListing(uint256,uint256,address)\": {\n        \"params\": {\n          \"_listingId\": \"The unique identifier of the listing to update\",\n          \"_newAskPrice\": \"The new asking price for the listing\",\n          \"_saleEthRecipient\": \"The new address to receive the ETH from the sale; must be a contract that can                          receive ETH or an EOA\"\n        }\n      },\n      \"updateMailServerKeyHashAdapter(address)\": {\n        \"params\": {\n          \"_mailServerKeyHashAdapter\": \"The new mail server key hash adapter\"\n        }\n      },\n      \"updateTransferDomainProcessor(address)\": {\n        \"params\": {\n          \"_transferDomainProcessor\": \"The new transfer domain processor\"\n        }\n      },\n      \"withdrawBid(uint256)\": {\n        \"params\": {\n          \"_bidId\": \"The unique identifier of the bid to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAddressesToAllowlist(address[])\": {\n        \"notice\": \"Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed functions.\"\n      },\n      \"buyerReleaseFunds(uint256)\": {\n        \"notice\": \"ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required because it is not in the buyer's interest to release funds unless they have received the domain. Note that the bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will revert if: - The bid is not owned by the caller - The listing is not active (sold or withdrawn)\"\n      },\n      \"createBid(uint256,bytes32,string)\": {\n        \"notice\": \"Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the  seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId  using their private key to get the raw buyerId. DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be done in the client! This does not affect the security of the protocol as the encrypted buyerId is only  used for communication between the buyer and the seller while maintaining privacy.\"\n      },\n      \"createListing(bytes32,uint256,uint256,address,bytes,bytes32)\": {\n        \"notice\": \"Creates listing for a domain. If ownership of domain changes offchain, the new owner will have to first register the domain on the domain registry contract. Then the new owner can create a listing for the domain. The old listing will be deleted from the old owner's  listings and the old listing is marked as NOT active, which prevents any new bids from being created on it and makes the old bids immediately withdrawable. We also allow the seller to specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be  updated by us whenever Namecheap rotates their DKIM key. Function reverts if: - Caller is not domain owner on the domain registry contract - Ask price is less than min bid price - Sale ETH recipient is the zero address\"\n      },\n      \"deleteListing(uint256)\": {\n        \"notice\": \"ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing are left as is to allow the buyer to withdraw the bid.\"\n      },\n      \"disableAllowlist()\": {\n        \"notice\": \"Disable the allow list. When the allow list is disabled, any address is allowed to call functions with onlyAllowed modifier.\"\n      },\n      \"disableInstantAccept()\": {\n        \"notice\": \"Disables the instant accept flag for the buyer.\"\n      },\n      \"enableAllowlist()\": {\n        \"notice\": \"Enable the allow list. When the allow list is enabled, only approved addresses are allowed to functions with onlyAllowed modifier.\"\n      },\n      \"enableInstantAccept()\": {\n        \"notice\": \"Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has  configured their Namecheap account to accept ownership of domains immediately upon transfer.  DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only  an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can  cancel the transfer immediately.\"\n      },\n      \"finalizeSale((uint256[2],uint256[2][2],uint256[2],uint256[10]))\": {\n        \"notice\": \"ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to  the listing owner. The seller can also finalize the sale with bids that have initiated a refund  including the ones that have expired based on timestamp but not withdrawn yet.\"\n      },\n      \"getAllowedSellers()\": {\n        \"notice\": \"Get all allowed sellers\"\n      },\n      \"getListingBids(uint256[])\": {\n        \"notice\": \"Returns the bids for given listingIds\"\n      },\n      \"getListings(uint256[])\": {\n        \"notice\": \"Get listing information with listingId for a list of listingIds\"\n      },\n      \"getUserBids(address)\": {\n        \"notice\": \"Returns the bids created by a user\"\n      },\n      \"getUserListings(address)\": {\n        \"notice\": \"Returns all listings created by a user\"\n      },\n      \"increaseBidPrice(uint256,uint256)\": {\n        \"notice\": \"ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher  than the old price. The buyer must send the additional amount of ETH. The function reverts if - bid has initiated refund, caller is not bid owner or listing is not active - the new price is less than old price - msg.value is NOT STRICTLY EQUAL to than new price - old price\"\n      },\n      \"initialize(address,address,address)\": {\n        \"notice\": \"Initializes the contract with domain verification and transfer processors. Can  only be called once by the contract owner \"\n      },\n      \"initiateRefund(uint256)\": {\n        \"notice\": \"ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner  after the initial bid expiry period has passed.\"\n      },\n      \"pauseMarketplace()\": {\n        \"notice\": \"ONLY OWNER: Pauses listing and proof submission functionality for the marketplace.  Functionalites that are paused: - Listing creation and update - Bid creation and update - Sale finalization  Functinonalites that remain unpaused to allow users to retrieve funds in contract: - Bid refund initiation and withdrawal - Listing deletion - Manual settlement between buyer and seller\"\n      },\n      \"registryRemoveListing(uint256)\": {\n        \"notice\": \"ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry. \"\n      },\n      \"removeAddressesFromAllowlist(address[])\": {\n        \"notice\": \"Removes passed addresses from an allow list. Addresses not on the allow list are unable to call allow listed functions.\"\n      },\n      \"unpauseMarketplace()\": {\n        \"notice\": \"ONLY OWNER: Restarts paused functionality for the marketplace.\"\n      },\n      \"updateBidRefundPeriod(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the bid refund period\"\n      },\n      \"updateBidSettlementPeriod(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the minimum bid active period\"\n      },\n      \"updateFee(uint256)\": {\n        \"notice\": \"ONLY OWNER: Updates the fee percentage for the marketplace\"\n      },\n      \"updateFeeRecipient(address)\": {\n        \"notice\": \"ONLY OWNER: Updates the fee recipient address\"\n      },\n      \"updateListing(uint256,uint256,address)\": {\n        \"notice\": \"ONLY SELLER: Updates the asking price of an existing listing. We don't update the existing bids against the listing because the newAskPrice is an indicative value. The new ask price must be greater than or equal to the existing min bid price. If seller wants to update the min bid price, they should delete the listing and create a new one with the new min bid price.\"\n      },\n      \"updateMailServerKeyHashAdapter(address)\": {\n        \"notice\": \"ONLY OWNER: Update the managed mail server key hash adapter\"\n      },\n      \"updateTransferDomainProcessor(address)\": {\n        \"notice\": \"ONLY OWNER: Update the transfer domain processor\"\n      },\n      \"withdrawBid(uint256)\": {\n        \"notice\": \"ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 8064,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isEnabled\",\n        \"offset\": 20,\n        \"slot\": \"0\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 8067,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"allowedAddresses\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 8071,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isAllowed\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 231,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_status\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 130,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"_paused\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4981,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"listings\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Listing)4936_storage)\"\n      },\n      {\n        \"astId\": 4986,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"userListings\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\"\n      },\n      {\n        \"astId\": 4991,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bids\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Bid)4959_storage)\"\n      },\n      {\n        \"astId\": 4996,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"userBids\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\"\n      },\n      {\n        \"astId\": 5000,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"instantAcceptEnabled\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 5002,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"fee\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5004,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"feeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_address_payable\"\n      },\n      {\n        \"astId\": 5006,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidCounter\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5008,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"listingCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5010,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidSettlementPeriod\",\n        \"offset\": 0,\n        \"slot\": \"14\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5012,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"bidRefundPeriod\",\n        \"offset\": 0,\n        \"slot\": \"15\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5014,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"isInitialized\",\n        \"offset\": 0,\n        \"slot\": \"16\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 5017,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"transferDomainProcessor\",\n        \"offset\": 1,\n        \"slot\": \"16\",\n        \"type\": \"t_contract(ITransferDomainProcessor)11791\"\n      },\n      {\n        \"astId\": 5020,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"verifiedDomainRegistry\",\n        \"offset\": 0,\n        \"slot\": \"17\",\n        \"type\": \"t_contract(IVerifiedDomainRegistry)11871\"\n      },\n      {\n        \"astId\": 5023,\n        \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"18\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)9595\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_address_payable\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address payable\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)9595\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ITransferDomainProcessor)11791\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ITransferDomainProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IVerifiedDomainRegistry)11871\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IVerifiedDomainRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_array(t_uint256)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_uint256)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_uint256,t_struct(Bid)4959_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct DomainExchange.Bid)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Bid)4959_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Listing)4936_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct DomainExchange.Listing)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Listing)4936_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Bid)4959_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct DomainExchange.Bid\",\n        \"members\": [\n          {\n            \"astId\": 4944,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"buyer\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4946,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"listingId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4948,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"encryptedBuyerId\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4950,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"buyerIdHash\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4952,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"createdAt\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4954,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"expiryTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4956,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"price\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4958,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"refundInitiated\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_bool\"\n          }\n        ],\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_struct(Listing)4936_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct DomainExchange.Listing\",\n        \"members\": [\n          {\n            \"astId\": 4916,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"seller\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4918,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"saleEthRecipient\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address_payable\"\n          },\n          {\n            \"astId\": 4920,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"dkimKeyHash\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4922,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"encryptionKey\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes_storage\"\n          },\n          {\n            \"astId\": 4924,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"domainId\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4926,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"createdAt\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4928,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"askPrice\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4930,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"minBidPrice\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4932,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"isActive\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 4935,\n            \"contract\": \"contracts/DomainExchange.sol:DomainExchange\",\n            \"label\": \"bids\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"320\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/NamecheapManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x5d96e0Bf0c080C5f42475d767248A7501D069883\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x62bd91915a3250bc1c43c516da97f8d35ef7a99ca4e9d3d88ad79dca257bf6e7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x5d96e0Bf0c080C5f42475d767248A7501D069883\",\n    \"transactionIndex\": 27,\n    \"gasUsed\": \"766431\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000002000000000400000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000000800000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x72493b2f8e97e7ef2c77bd3eeed2a1b45100f11aaf203fa0e1475ac489baa627\",\n    \"transactionHash\": \"0x62bd91915a3250bc1c43c516da97f8d35ef7a99ca4e9d3d88ad79dca257bf6e7\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 27,\n        \"blockNumber\": 6746718,\n        \"transactionHash\": \"0x62bd91915a3250bc1c43c516da97f8d35ef7a99ca4e9d3d88ad79dca257bf6e7\",\n        \"address\": \"0x5d96e0Bf0c080C5f42475d767248A7501D069883\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 29,\n        \"blockHash\": \"0x72493b2f8e97e7ef2c77bd3eeed2a1b45100f11aaf203fa0e1475ac489baa627\"\n      }\n    ],\n    \"blockNumber\": 6746718,\n    \"cumulativeGasUsed\": \"6706718\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x0db7730bdd90c823601ed32395c8b2f3307fd4adc477ca22bf3ed406c1b3ae4a\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x13d60704c96e0d88380cc2db7367cf17848b03fcd410fade3ba7161046cabeac\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523462000030576200001e620000186200013d565b620002d7565b604051610aed620004718239610aed90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160401b0381116200006d5760208091020190565b90929192620000bd620000b7826200008c565b62000073565b93818552602080860192028301928184116200003057915b838310620000e35750505050565b8251815260209283019201620000d5565b9080601f83011215620000305781516200011192602001620000a4565b90565b90602082820312620000305781516001600160401b0381116200003057620001119201620000f4565b6200011162000f5e80380380620001548162000073565b92833981019062000114565b6200011162000111620001119290565b634e487b7160e01b600052601160045260246000fd5b6000198114620001965760010190565b62000170565b634e487b7160e01b600052603260045260246000fd5b90620001bc825190565b811015620001ce576020809102010190565b6200019c565b15620001dc57565b60405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c7265616479206164646564000000000000000000006044820152606490fd5b9060ff905b9181191691161790565b9062000243620001116200024b92151590565b825462000221565b9055565b8054821015620001ce576200026b600191600052602060002090565b91020190600090565b9160001960089290920291821b911b62000226565b91906200029b620001116200024b9390565b90835462000274565b90815491680100000000000000008310156200006d5782620002d09160016200008a950181556200024f565b9062000289565b90620002e26200038c565b620002ee600062000160565b620002fb62000111845190565b8110156200038757806200037b620003206200031c620003819487620001b2565b5190565b62000373600162000358620003526200034e62000347868590600052602052604060002090565b5460ff1690565b1590565b620001d4565b6200036d838290600052602052604060002090565b62000230565b6002620002a4565b62000186565b620002ee565b509050565b6200008a80336200040e565b62000111905b6001600160a01b031690565b62000111905462000398565b906001600160a01b039062000226565b62000111906200039e906001600160a01b031682565b6200011190620003c6565b6200011190620003dc565b9062000406620001116200024b92620003e7565b8254620003b6565b6200041a6000620003aa565b9062000428816000620003f2565b6200045f620004587f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620003e7565b91620003e7565b916200046a60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806319d091521461009257806361ba662a1461008d578063687bc0ab14610088578063715018a6146100835780638da5cb5b1461007e578063a26c04ee14610079578063b86e2d72146100745763f2fde38b036100a057610339565b6102dd565b610247565b610208565b6101e4565b6101bd565b61012e565b6100fd565b805b036100a057565b600080fd5b905035906100b282610097565b565b906020828203126100a0576100c8916100a5565b90565b6100c8916008021c5b60ff1690565b906100c891546100cb565b60009081526001602052604081206100c891906100da565b346100a05761012a6101186101133660046100b4565b6100e5565b60405191829182901515815260200190565b0390f35b346100a0576101466101413660046100b4565b6106e8565b604051005b60009103126100a057565b9061017661016f610165845190565b8084529260200190565b9260200190565b9060005b8181106101875750505090565b9091926101a461019d6001928651815260200190565b9460200190565b92910161017a565b60208082526100c892910190610156565b346100a0576101cd36600461014b565b61012a6101d861087e565b604051918291826101ac565b346100a0576101f436600461014b565b610146610389565b6001600160a01b031690565b346100a05761021836600461014b565b61012a61022d6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100a05761014661025a3660046100b4565b6107b6565b634e487b7160e01b600052603260045260246000fd5b80548210156102985761028f600191600052602060002090565b91020190600090565b61025f565b6100c8916008021c81565b906100c8915461029d565b600260006102bf825490565b8310156102da57506100c8916102d491610275565b906102a8565b80fd5b346100a05761012a6102f86102f33660046100b4565b6102b3565b6040515b9182918290815260200190565b6001600160a01b038116610099565b905035906100b282610309565b906020828203126100a0576100c891610318565b346100a05761014661034c366004610325565b6104aa565b6103596103e5565b6100b2610377565b6101fc6100c86100c89290565b6100c890610361565b6100b2610384600061036e565b610509565b6100b2610351565b1561039857565b60405162461bcd60e51b8152806103e1600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100b26103fa6000546001600160a01b031690565b610413610406336101fc565b916001600160a01b031690565b14610391565b6100b2906104256103e5565b610485565b1561043157565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100b2906103846104996101fc600061036e565b6001600160a01b038316141561042a565b6100b290610419565b906001600160a01b03905b9181191691161790565b6100c8906101fc906001600160a01b031682565b6100c8906104c8565b6100c8906104dc565b906104fe6100c8610505926104e5565b82546104b3565b9055565b6000546001600160a01b0316906105218160006104ee565b61055461054e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104e5565b916104e5565b9161055e60405190565b600090a3565b6100b2906105706103e5565b610661565b6100c8906100d4565b6100c89054610575565b1561058f57565b60405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b6044820152606490fd5b9060ff906104be565b906105e66100c861050592151590565b82546105cd565b634e487b7160e01b600052604160045260246000fd5b9160001960089290920291821b911b6104be565b91906106266100c86105059390565b908354610603565b908154916801000000000000000083101561065c57826106569160016100b295018155610275565b90610617565b6105ed565b6106aa600161069161068c610688610683868590600052602052604060002090565b61057e565b1590565b610588565b6106a5838290600052602052604060002090565b6105d6565b6106b581600261062e565b6106e37fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b916102fc60405190565b0390a1565b6100b290610564565b6100b2906106fd6103e5565b610743565b1561070957565b60405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b6044820152606490fd5b61077d6001610767610762610683858490600052602052604060002090565b610702565b6106a58360009290600052602052604060002090565b610788816002610971565b6106e37f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd916102fc60405190565b6100b2906106f1565b6100c89081565b6100c890546107bf565b906107eb6107df610165845490565b92600052602060002090565b9060005b8181106107fc5750505090565b909192610820610819600192610811876107c6565b815260200190565b9460010190565b9291016107ef565b906100c8916107d0565b90601f01601f1916810190811067ffffffffffffffff82111761065c57604052565b906100b261086e9261086560405190565b93848092610828565b0383610832565b6100c890610854565b6100c86002610875565b906108976107df610165845490565b9060005b8181106108a85750505090565b9091926108bd610819600192610811876107c6565b92910161089b565b906100c891610888565b906100b261086e926108e060405190565b938480926108c5565b6100c8906108cf565b6100c86100c86100c89290565b634e487b7160e01b600052601160045260246000fd5b9190820391821161092257565b6108ff565b634e487b7160e01b600052603160045260246000fd5b6100b291600091610617565b8054801561096c5760001901906109696109638383610275565b9061093d565b55565b610927565b61098661098d92610981836108e9565b610a53565b9092901590565b156109cf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6100b2916109ee6109de835490565b6109e860016108f2565b90610915565b908181036109fe575b5050610949565b610656610a116102d4610a189486610275565b9184610275565b38806109f7565b60001981146109225760010190565b90610a37825190565b811015610298576020809102010190565b6100c86000196108f2565b91908251926000610a63816108f2565b855b811015610aaa57610a7d610a798285610a2e565b5190565b8490610a88565b9190565b14610aa057610a99610a6591610a1f565b9050610a63565b9450505050600190565b5093505050610a84610a4856fea2646970667358221220cea7059c06059b0cdd2bc4094fb91f900abb58ad31de2b8f44a6d19c080e596264736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806319d091521461009257806361ba662a1461008d578063687bc0ab14610088578063715018a6146100835780638da5cb5b1461007e578063a26c04ee14610079578063b86e2d72146100745763f2fde38b036100a057610339565b6102dd565b610247565b610208565b6101e4565b6101bd565b61012e565b6100fd565b805b036100a057565b600080fd5b905035906100b282610097565b565b906020828203126100a0576100c8916100a5565b90565b6100c8916008021c5b60ff1690565b906100c891546100cb565b60009081526001602052604081206100c891906100da565b346100a05761012a6101186101133660046100b4565b6100e5565b60405191829182901515815260200190565b0390f35b346100a0576101466101413660046100b4565b6106e8565b604051005b60009103126100a057565b9061017661016f610165845190565b8084529260200190565b9260200190565b9060005b8181106101875750505090565b9091926101a461019d6001928651815260200190565b9460200190565b92910161017a565b60208082526100c892910190610156565b346100a0576101cd36600461014b565b61012a6101d861087e565b604051918291826101ac565b346100a0576101f436600461014b565b610146610389565b6001600160a01b031690565b346100a05761021836600461014b565b61012a61022d6000546001600160a01b031690565b604051918291826001600160a01b03909116815260200190565b346100a05761014661025a3660046100b4565b6107b6565b634e487b7160e01b600052603260045260246000fd5b80548210156102985761028f600191600052602060002090565b91020190600090565b61025f565b6100c8916008021c81565b906100c8915461029d565b600260006102bf825490565b8310156102da57506100c8916102d491610275565b906102a8565b80fd5b346100a05761012a6102f86102f33660046100b4565b6102b3565b6040515b9182918290815260200190565b6001600160a01b038116610099565b905035906100b282610309565b906020828203126100a0576100c891610318565b346100a05761014661034c366004610325565b6104aa565b6103596103e5565b6100b2610377565b6101fc6100c86100c89290565b6100c890610361565b6100b2610384600061036e565b610509565b6100b2610351565b1561039857565b60405162461bcd60e51b8152806103e1600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100b26103fa6000546001600160a01b031690565b610413610406336101fc565b916001600160a01b031690565b14610391565b6100b2906104256103e5565b610485565b1561043157565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100b2906103846104996101fc600061036e565b6001600160a01b038316141561042a565b6100b290610419565b906001600160a01b03905b9181191691161790565b6100c8906101fc906001600160a01b031682565b6100c8906104c8565b6100c8906104dc565b906104fe6100c8610505926104e5565b82546104b3565b9055565b6000546001600160a01b0316906105218160006104ee565b61055461054e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936104e5565b916104e5565b9161055e60405190565b600090a3565b6100b2906105706103e5565b610661565b6100c8906100d4565b6100c89054610575565b1561058f57565b60405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b6044820152606490fd5b9060ff906104be565b906105e66100c861050592151590565b82546105cd565b634e487b7160e01b600052604160045260246000fd5b9160001960089290920291821b911b6104be565b91906106266100c86105059390565b908354610603565b908154916801000000000000000083101561065c57826106569160016100b295018155610275565b90610617565b6105ed565b6106aa600161069161068c610688610683868590600052602052604060002090565b61057e565b1590565b610588565b6106a5838290600052602052604060002090565b6105d6565b6106b581600261062e565b6106e37fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b916102fc60405190565b0390a1565b6100b290610564565b6100b2906106fd6103e5565b610743565b1561070957565b60405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b6044820152606490fd5b61077d6001610767610762610683858490600052602052604060002090565b610702565b6106a58360009290600052602052604060002090565b610788816002610971565b6106e37f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd916102fc60405190565b6100b2906106f1565b6100c89081565b6100c890546107bf565b906107eb6107df610165845490565b92600052602060002090565b9060005b8181106107fc5750505090565b909192610820610819600192610811876107c6565b815260200190565b9460010190565b9291016107ef565b906100c8916107d0565b90601f01601f1916810190811067ffffffffffffffff82111761065c57604052565b906100b261086e9261086560405190565b93848092610828565b0383610832565b6100c890610854565b6100c86002610875565b906108976107df610165845490565b9060005b8181106108a85750505090565b9091926108bd610819600192610811876107c6565b92910161089b565b906100c891610888565b906100b261086e926108e060405190565b938480926108c5565b6100c8906108cf565b6100c86100c86100c89290565b634e487b7160e01b600052601160045260246000fd5b9190820391821161092257565b6108ff565b634e487b7160e01b600052603160045260246000fd5b6100b291600091610617565b8054801561096c5760001901906109696109638383610275565b9061093d565b55565b610927565b61098661098d92610981836108e9565b610a53565b9092901590565b156109cf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6100b2916109ee6109de835490565b6109e860016108f2565b90610915565b908181036109fe575b5050610949565b610656610a116102d4610a189486610275565b9184610275565b38806109f7565b60001981146109225760010190565b90610a37825190565b811015610298576020809102010190565b6100c86000196108f2565b91908251926000610a63816108f2565b855b811015610aaa57610a7d610a798285610a2e565b5190565b8490610a88565b9190565b14610aa057610a99610a6591610a1f565b9050610a63565b9450505050600190565b5093505050610a84610a4856fea2646970667358221220cea7059c06059b0cdd2bc4094fb91f900abb58ad31de2b8f44a6d19c080e596264736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 8924,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 8927,\n        \"contract\": \"contracts/external/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/NullifierRegistry.json",
    "content": "{\n  \"address\": \"0xCE6454f272127ba69e8C8128B92F2388Ca343257\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"nullifier\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NullifierAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_nullifier\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addNullifier\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWriters\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isNullified\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWriter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removedWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"writers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd5dd3fbcb7da32b053269a6ec73a8f681d9773a19f7b77aab51169967c10e250\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xCE6454f272127ba69e8C8128B92F2388Ca343257\",\n    \"transactionIndex\": 23,\n    \"gasUsed\": \"782784\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000100000000000000000000000000000010000000000000000000000000000000000000000000020000000000001000000000000000000000000000000000000020000000000000008000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x7180218a75fbd67903c3e4e754f5245c85a46a1e997ba4abadaff774ffb9ccff\",\n    \"transactionHash\": \"0xd5dd3fbcb7da32b053269a6ec73a8f681d9773a19f7b77aab51169967c10e250\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 23,\n        \"blockNumber\": 6746719,\n        \"transactionHash\": \"0xd5dd3fbcb7da32b053269a6ec73a8f681d9773a19f7b77aab51169967c10e250\",\n        \"address\": \"0xCE6454f272127ba69e8C8128B92F2388Ca343257\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 53,\n        \"blockHash\": \"0x7180218a75fbd67903c3e4e754f5245c85a46a1e997ba4abadaff774ffb9ccff\"\n      }\n    ],\n    \"blockNumber\": 6746719,\n    \"cumulativeGasUsed\": \"6197806\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"nullifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NullifierAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_nullifier\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addNullifier\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWriters\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isNullified\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWriter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removedWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"writers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"params\\\":{\\\"_nullifier\\\":\\\"The nullifier to store\\\"}},\\\"addWritePermission(address)\\\":{\\\"params\\\":{\\\"_newWriter\\\":\\\"The nullifier to store\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeWritePermission(address)\\\":{\\\"params\\\":{\\\"_removedWriter\\\":\\\"The nullifier to store\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"notice\\\":\\\"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\"},\\\"addWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\"},\\\"removeWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/external/NullifierRegistry.sol\\\":\\\"NullifierRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/NullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"./lib/AddressArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./interfaces/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\\\n    event WriterAdded(address writer);\\\\n    event WriterRemoved(address writer);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyWriter() {\\\\n        require(isWriter[msg.sender], \\\\\\\"Only addresses with write permissions can call\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(bytes32 => bool) public isNullified;\\\\n    mapping(address => bool) public isWriter;\\\\n    address[] public writers;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor() Ownable() {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\\n     *\\\\n     * @param _nullifier    The nullifier to store\\\\n     */\\\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\\\n        require(!isNullified[_nullifier], \\\\\\\"Nullifier already exists\\\\\\\");\\\\n\\\\n        isNullified[_nullifier] = true;\\\\n\\\\n        emit NullifierAdded(_nullifier, msg.sender);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\\n     *\\\\n     * @param _newWriter    The nullifier to store\\\\n     */\\\\n    function addWritePermission(address _newWriter) external onlyOwner {\\\\n        require(!isWriter[_newWriter], \\\\\\\"Address is already a writer\\\\\\\");\\\\n\\\\n        isWriter[_newWriter] = true;\\\\n        writers.push(_newWriter);\\\\n\\\\n        emit WriterAdded(_newWriter);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\\n     *\\\\n     * @param _removedWriter    The nullifier to store\\\\n     */\\\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\\\n        require(isWriter[_removedWriter], \\\\\\\"Address is not a writer\\\\\\\");\\\\n\\\\n        isWriter[_removedWriter] = false;\\\\n        writers.removeStorage(_removedWriter);\\\\n\\\\n        emit WriterRemoved(_removedWriter);\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getWriters() external view returns(address[] memory) {\\\\n       return writers;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x2c461bc3e7074c455f0e7cce2edceb6db47d158ce38f8562ba3c02d41fd4ea77\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6080604052346200002657620000146200002b565b604051610cb3620001278239610cb390f35b600080fd5b6200003562000037565b565b620000358033620000c4565b62000055905b6001600160a01b031690565b90565b62000055905462000043565b620000559062000049906001600160a01b031682565b620000559062000064565b62000055906200007a565b90620000a462000055620000c09262000085565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620000d0600062000058565b90620000de81600062000090565b620001156200010e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000085565b9162000085565b916200012060405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c8063169394bb146100b2578063286f9201146100ad5780632b29ba23146100a85780635bd4df32146100a357806366a526721461009e578063715018a6146100995780638da5cb5b14610094578063cb01316c1461008f578063d6da03261461008a5763f2fde38b036100c0576103ce565b6103b6565b61038f565b610304565b6102ec565b6102ab565b610213565b6101f8565b610199565b61012c565b805b036100c057565b600080fd5b905035906100d2826100b7565b565b906020828203126100c0576100e8916100c5565b90565b905b600052602052604060002090565b6100e8916008021c5b60ff1690565b906100e891546100fb565b6100e8906101276001916000926100eb565b61010a565b346100c0576101596101476101423660046100d4565b610115565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b0381166100b9565b905035906100d282610169565b906020828203126100c0576100e891610178565b346100c0576101b16101ac366004610185565b610970565b604051005b6100e89061015d906001600160a01b031682565b6100e8906101b6565b6100e8906101ca565b906100ed906101d3565b6100e8906101276002916000926101dc565b346100c05761015961014761020e366004610185565b6101e6565b346100c0576101b16102263660046100d4565b610763565b634e487b7160e01b600052603260045260246000fd5b80548210156102645761025b600191600052602060002090565b91020190600090565b61022b565b6100e8916008021c61015d565b906100e89154610269565b6003600061028d825490565b8310156102a857506100e8916102a291610241565b90610276565b80fd5b346100c0576101596102c66102c13660046100d4565b610281565b6040515b918291826001600160a01b03909116815260200190565b60009103126100c057565b346100c0576102fc3660046102e1565b6101b161043b565b346100c0576103143660046102e1565b6101596102c66103f9565b9061033f61033861032e845190565b8084529260200190565b9260200190565b9060005b8181106103505750505090565b90919261037661036f60019286516001600160a01b0316815260200190565b9460200190565b929101610343565b60208082526100e89291019061031f565b346100c05761039f3660046102e1565b6101596103aa610a30565b6040519182918261037e565b346100c0576101b16103c9366004610185565b6108ab565b346100c0576101b16103e1366004610185565b610552565b6100e89061015d565b6100e890546103e6565b6100e860006103ef565b61040b610497565b6100d2610429565b61015d6100e86100e89290565b6100e890610413565b6100d26104366000610420565b61058b565b6100d2610403565b1561044a57565b60405162461bcd60e51b815280610493600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100d26104a26103f9565b6104bb6104ae3361015d565b916001600160a01b031690565b14610443565b6100d2906104cd610497565b61052d565b156104d957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100d29061043661054161015d6000610420565b6001600160a01b03831614156104d2565b6100d2906104c1565b906001600160a01b03905b9181191691161790565b906105806100e8610587926101d3565b825461055b565b9055565b61059560006103ef565b906105a1816000610570565b6105d46105ce7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101d3565b916101d3565b916105de60405190565b600090a3565b6100e890610104565b6100e890546105e4565b156105fe57565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608490fd5b6100d29061067961067461066f3360026101dc565b6105ed565b6105f7565b6106ea565b1561068557565b60405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606490fd5b9060ff90610566565b906106e36100e861058792151590565b82546106ca565b61071a600161070b61070661070261066f86856100eb565b1590565b61067e565b61071583826100eb565b6106d3565b7f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f8361075e610747336101d3565b9261075160405190565b9182918290815260200190565b0390a2565b6100d29061065a565b6100d290610778610497565b610844565b1561078457565b60405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b916001600160a01b0360089290920291821b911b610566565b91906108096100e8610587936101d3565b9083546107df565b908154916801000000000000000083101561083f57826108399160016100d295018155610241565b906107f8565b6107c9565b61086d600261086161085c61070261066f86856101dc565b61077d565b610715836001926101dc565b610878816003610811565b6108a67f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e916102ca60405190565b0390a1565b6100d29061076c565b6100d2906108c0610497565b610911565b156108cc57565b60405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f742061207772697465720000000000000000006044820152606490fd5b610937600261092b61092661066f85846101dc565b6108c5565b610715836000926101dc565b610942816003610b23565b6108a67f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e916102ca60405190565b6100d2906108b4565b9061099461098861032e845490565b92600052602060002090565b9060005b8181106109a55750505090565b9091926109d26109cb6001926109ba876103ef565b6001600160a01b0316815260200190565b9460010190565b929101610998565b906100e891610979565b90601f01601f1916810190811067ffffffffffffffff82111761083f57604052565b906100d2610a2092610a1760405190565b938480926109da565b03836109e4565b6100e890610a06565b6100e86003610a27565b90610a4961098861032e845490565b9060005b818110610a5a5750505090565b909192610a6f6109cb6001926109ba876103ef565b929101610a4d565b906100e891610a3a565b906100d2610a2092610a9260405190565b93848092610a77565b6100e890610a81565b6100e86100e86100e89290565b634e487b7160e01b600052601160045260246000fd5b91908203918211610ad457565b610ab1565b634e487b7160e01b600052603160045260246000fd5b6100d2916000916107f8565b80548015610b1e576000190190610b1b610b158383610241565b90610aef565b55565b610ad9565b610b38610b3f92610b3383610a9b565b610c05565b9092901590565b15610b815760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6100d291610ba0610b90835490565b610b9a6001610aa4565b90610ac7565b90818103610bb0575b5050610afb565b610839610bc36102a2610bca9486610241565b9184610241565b3880610ba9565b6000198114610ad45760010190565b90610be9825190565b811015610264576020809102010190565b6100e8600019610aa4565b91908251926000610c1581610aa4565b855b811015610c6c57610c38610c2b8285610be0565b516001600160a01b031690565b610c4a6001600160a01b0386166104ae565b14610c6257610c5b610c1791610bd1565b9050610c15565b9450505050600190565b5093505050610c79610bfa565b919056fea2646970667358221220ac3610fa2c1635ee2b87dd0e289f617051e7537c7f88c7217955bec887e7c00964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c8063169394bb146100b2578063286f9201146100ad5780632b29ba23146100a85780635bd4df32146100a357806366a526721461009e578063715018a6146100995780638da5cb5b14610094578063cb01316c1461008f578063d6da03261461008a5763f2fde38b036100c0576103ce565b6103b6565b61038f565b610304565b6102ec565b6102ab565b610213565b6101f8565b610199565b61012c565b805b036100c057565b600080fd5b905035906100d2826100b7565b565b906020828203126100c0576100e8916100c5565b90565b905b600052602052604060002090565b6100e8916008021c5b60ff1690565b906100e891546100fb565b6100e8906101276001916000926100eb565b61010a565b346100c0576101596101476101423660046100d4565b610115565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b0381166100b9565b905035906100d282610169565b906020828203126100c0576100e891610178565b346100c0576101b16101ac366004610185565b610970565b604051005b6100e89061015d906001600160a01b031682565b6100e8906101b6565b6100e8906101ca565b906100ed906101d3565b6100e8906101276002916000926101dc565b346100c05761015961014761020e366004610185565b6101e6565b346100c0576101b16102263660046100d4565b610763565b634e487b7160e01b600052603260045260246000fd5b80548210156102645761025b600191600052602060002090565b91020190600090565b61022b565b6100e8916008021c61015d565b906100e89154610269565b6003600061028d825490565b8310156102a857506100e8916102a291610241565b90610276565b80fd5b346100c0576101596102c66102c13660046100d4565b610281565b6040515b918291826001600160a01b03909116815260200190565b60009103126100c057565b346100c0576102fc3660046102e1565b6101b161043b565b346100c0576103143660046102e1565b6101596102c66103f9565b9061033f61033861032e845190565b8084529260200190565b9260200190565b9060005b8181106103505750505090565b90919261037661036f60019286516001600160a01b0316815260200190565b9460200190565b929101610343565b60208082526100e89291019061031f565b346100c05761039f3660046102e1565b6101596103aa610a30565b6040519182918261037e565b346100c0576101b16103c9366004610185565b6108ab565b346100c0576101b16103e1366004610185565b610552565b6100e89061015d565b6100e890546103e6565b6100e860006103ef565b61040b610497565b6100d2610429565b61015d6100e86100e89290565b6100e890610413565b6100d26104366000610420565b61058b565b6100d2610403565b1561044a57565b60405162461bcd60e51b815280610493600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6100d26104a26103f9565b6104bb6104ae3361015d565b916001600160a01b031690565b14610443565b6100d2906104cd610497565b61052d565b156104d957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6100d29061043661054161015d6000610420565b6001600160a01b03831614156104d2565b6100d2906104c1565b906001600160a01b03905b9181191691161790565b906105806100e8610587926101d3565b825461055b565b9055565b61059560006103ef565b906105a1816000610570565b6105d46105ce7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101d3565b916101d3565b916105de60405190565b600090a3565b6100e890610104565b6100e890546105e4565b156105fe57565b60405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608490fd5b6100d29061067961067461066f3360026101dc565b6105ed565b6105f7565b6106ea565b1561068557565b60405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606490fd5b9060ff90610566565b906106e36100e861058792151590565b82546106ca565b61071a600161070b61070661070261066f86856100eb565b1590565b61067e565b61071583826100eb565b6106d3565b7f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f8361075e610747336101d3565b9261075160405190565b9182918290815260200190565b0390a2565b6100d29061065a565b6100d290610778610497565b610844565b1561078457565b60405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b916001600160a01b0360089290920291821b911b610566565b91906108096100e8610587936101d3565b9083546107df565b908154916801000000000000000083101561083f57826108399160016100d295018155610241565b906107f8565b6107c9565b61086d600261086161085c61070261066f86856101dc565b61077d565b610715836001926101dc565b610878816003610811565b6108a67f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e916102ca60405190565b0390a1565b6100d29061076c565b6100d2906108c0610497565b610911565b156108cc57565b60405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f742061207772697465720000000000000000006044820152606490fd5b610937600261092b61092661066f85846101dc565b6108c5565b610715836000926101dc565b610942816003610b23565b6108a67f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e916102ca60405190565b6100d2906108b4565b9061099461098861032e845490565b92600052602060002090565b9060005b8181106109a55750505090565b9091926109d26109cb6001926109ba876103ef565b6001600160a01b0316815260200190565b9460010190565b929101610998565b906100e891610979565b90601f01601f1916810190811067ffffffffffffffff82111761083f57604052565b906100d2610a2092610a1760405190565b938480926109da565b03836109e4565b6100e890610a06565b6100e86003610a27565b90610a4961098861032e845490565b9060005b818110610a5a5750505090565b909192610a6f6109cb6001926109ba876103ef565b929101610a4d565b906100e891610a3a565b906100d2610a2092610a9260405190565b93848092610a77565b6100e890610a81565b6100e86100e86100e89290565b634e487b7160e01b600052601160045260246000fd5b91908203918211610ad457565b610ab1565b634e487b7160e01b600052603160045260246000fd5b6100d2916000916107f8565b80548015610b1e576000190190610b1b610b158383610241565b90610aef565b55565b610ad9565b610b38610b3f92610b3383610a9b565b610c05565b9092901590565b15610b815760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6100d291610ba0610b90835490565b610b9a6001610aa4565b90610ac7565b90818103610bb0575b5050610afb565b610839610bc36102a2610bca9486610241565b9184610241565b3880610ba9565b6000198114610ad45760010190565b90610be9825190565b811015610264576020809102010190565b6100e8600019610aa4565b91908251926000610c1581610aa4565b855b811015610c6c57610c38610c2b8285610be0565b516001600160a01b031690565b610c4a6001600160a01b0386166104ae565b14610c6257610c5b610c1791610bd1565b9050610c15565b9450505050600190565b5093505050610c79610bfa565b919056fea2646970667358221220ac3610fa2c1635ee2b87dd0e289f617051e7537c7f88c7217955bec887e7c00964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"params\": {\n          \"_nullifier\": \"The nullifier to store\"\n        }\n      },\n      \"addWritePermission(address)\": {\n        \"params\": {\n          \"_newWriter\": \"The nullifier to store\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"params\": {\n          \"_removedWriter\": \"The nullifier to store\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"notice\": \"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\"\n      },\n      \"addWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9095,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isNullified\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 9099,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isWriter\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 9102,\n        \"contract\": \"contracts/external/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"writers\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/TransferDomainProcessor.json",
    "content": "{\n  \"address\": \"0xf7434C701A9F546f4E8FBcf4Dc752dB8EDF3E480\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"exchange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[10]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[10]\"\n            }\n          ],\n          \"internalType\": \"struct ITransferDomainProcessor.TransferProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"dkimKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"hashedReceiverId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"domainName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"bidId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[10]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[10]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x55c4a8c5cb81f703cd0992faac272d47aae4dc550e2adfd1f4da2a1f8787d90c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xf7434C701A9F546f4E8FBcf4Dc752dB8EDF3E480\",\n    \"transactionIndex\": 34,\n    \"gasUsed\": \"1844002\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000008000000000000000000000000000000000020000000000081000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd307993fe1f7a6150e6c84d00f63e1c207e6aa57eaebbdb88801caf4f6f2a5c0\",\n    \"transactionHash\": \"0x55c4a8c5cb81f703cd0992faac272d47aae4dc550e2adfd1f4da2a1f8787d90c\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 34,\n        \"blockNumber\": 6776720,\n        \"transactionHash\": \"0x55c4a8c5cb81f703cd0992faac272d47aae4dc550e2adfd1f4da2a1f8787d90c\",\n        \"address\": \"0xf7434C701A9F546f4E8FBcf4Dc752dB8EDF3E480\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 61,\n        \"blockHash\": \"0xd307993fe1f7a6150e6c84d00f63e1c207e6aa57eaebbdb88801caf4f6f2a5c0\"\n      }\n    ],\n    \"blockNumber\": 6776720,\n    \"cumulativeGasUsed\": \"12478015\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xC8cd114C6274Ef1066840337E7678BC9731BEa68\",\n    \"0xCE6454f272127ba69e8C8128B92F2388Ca343257\",\n    \"support@namecheap.com\",\n    \"0\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"a22247643263102eca9fc6c72e24c17d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"exchange\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"internalType\\\":\\\"struct ITransferDomainProcessor.TransferProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"dkimKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"hashedReceiverId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"domainName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"bidId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[10]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[10]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/TransferDomainProcessor.sol\\\":\\\"TransferDomainProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/TransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { EmailBaseProcessor } from \\\\\\\"./external/processors/EmailBaseProcessor.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./external/interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"./external/lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\nimport { Groth16Verifier } from \\\\\\\"./verifiers/namecheap_transfer_verifier.sol\\\\\\\";\\\\nimport { ITransferDomainProcessor } from \\\\\\\"./interfaces/ITransferDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 31;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _exchange,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        EmailBaseProcessor(\\\\n            _exchange,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    )\\\\n        external\\\\n        override\\\\n        onlyExchange\\\\n        returns (\\\\n            bytes32 dkimKeyHash,\\\\n            bytes32 hashedReceiverId,\\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\");\\\\n\\\\n        // Signal [0] is the DKIM key hash\\\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\\\n\\\\n        // Signals [1:2] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\\\n        require(\\\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\n            \\\\\\\"Invalid email from address\\\\\\\"\\\\n        );\\\\n        \\\\n        // Signals [2:7] are packed domain name\\\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\\\n\\\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\\\n\\\\n        // Signal [9] is bidId\\\\n        bidId = _proof.signals[9];\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\\\n        internal \\\\n        pure \\\\n        returns (string memory) \\\\n    {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x27e7d34dbe222f5a865d0b34f276eac82f3888f00e9816c398ee5fe9cf18bb2c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/processors/EmailBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../interfaces/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../interfaces/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract EmailBaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyExchange() {\\\\n        require(msg.sender == exchange, \\\\\\\"Only exchange can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable exchange;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _exchange,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        exchange = _exchange;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe210c8e937a457c2d2aff798f3696f04ce1d011470294f02fb1169006a385f07\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ITransferDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface ITransferDomainProcessor {\\\\n\\\\n    struct TransferProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[10] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        TransferProof calldata _proof\\\\n    ) \\\\n        external \\\\n        returns (\\\\n            bytes32 dkimKeyHash, \\\\n            bytes32 hashedReceiverId, \\\\n            string memory domainName, \\\\n            uint256 bidId\\\\n        );\\\\n}\\\",\\\"keccak256\\\":\\\"0x9cf5f1b070d7bad73d8ae57f7b20d449853f96fcbb5df1a443723df41c91339d\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/namecheap_transfer_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\\\\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\\\\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\\\\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\\\\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\\\\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\\\\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\\\\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\\\\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\\\\n\\\\n\\\\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\\\\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\\\\n\\\\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\\\\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\\\\n\\\\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\\\\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\\\\n\\\\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\\\\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\\\\n\\\\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\\\\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\\\\n\\\\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\\\\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\\\\n\\\\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\\\\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\\\\n\\\\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\\\\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\\\\n\\\\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\\\\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\\\\n\\\\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\\\\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\\\\n\\\\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\\\\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, r)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0xe7d4d4df7314df193c8206345215947c6902e58dd2e51e426eae6cc394028ca8\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523462000044576200002262000018620001f4565b929190916200021d565b604051611eb56200054c82396080518181816104da01526109460152611eb590f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200008157604052565b62000049565b906200009e6200009660405190565b92836200005f565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200004457565b905051906200009e82620000af565b6001600160a01b038116620000ba565b905051906200009e82620000d1565b6001600160401b0381116200008157602090601f01601f19160190565b60005b838110620001215750506000910152565b818101518382015260200162000110565b909291926200014b6200014582620000f0565b62000087565b9381855260208501908284011162000044576200009e926200010d565b9080601f8301121562000044578151620000ac9260200162000132565b80620000ba565b905051906200009e8262000185565b6080818303126200004457620001b28282620000c2565b92620001c28360208401620000e1565b604083015190936001600160401b0382116200004457620001ea81620000ac93860162000168565b936060016200018c565b6200021762002401803803806200020b8162000087565b9283398101906200019b565b90919293565b906200009e939291620004ab565b906001600160a01b03905b9181191691161790565b620000ac90620000a0906001600160a01b031682565b620000ac9062000240565b620000ac9062000256565b9062000280620000ac620002889262000261565b82546200022b565b9055565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620002c5575b6020831014620002bf57565b6200028c565b91607f1691620002b3565b9160001960089290920291821b911b62000236565b620000ac620000ac620000ac9290565b91906200030a620000ac6200028893620002e5565b908354620002d0565b6200009e91600091620002f5565b8181106200032d575050565b806200033d600060019362000313565b0162000321565b9190601f81116200035457505050565b620003686200009e93600052602060002090565b906020601f8401819004830193106200038c575b6020601f90910104019062000321565b90915081906200037c565b90620003a1815190565b906001600160401b0382116200008157620003c982620003c28554620002a2565b8562000344565b602090601f8311600114620004085762000288929160009183620003fc575b5050600019600883021c1916906002021790565b015190503880620003e8565b601f198316916200041e85600052602060002090565b9260005b8181106200045f5750916002939185600196941062000445575b50505002019055565b01516000196008601f8516021c191690553880806200043c565b9193602060018192878701518155019501920162000422565b906200009e9162000397565b906000199062000236565b90620004a3620000ac6200028892620002e5565b825462000484565b6200009e9392620000ac620004dc93620004d493620004c9620004e4565b60805260016200026c565b600262000478565b60036200048f565b6200009e336000546001600160a01b031690620005038160006200026c565b6200053a620005337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000261565b9162000261565b916200054560405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806365cd296c146100d2578063715018a6146100cd5780638da5cb5b146100c8578063b2a3fda4146100c3578063b870676c146100be578063c0d05fed146100b9578063ced1e978146100b4578063d2f7265a146100af578063dbac5821146100aa578063f2fde38b146100a5578063f3bb70f6146100a05763f6c7226b036100e6576106bf565b6105f9565b61057b565b610520565b6104c5565b6104aa565b610483565b6102e7565b610265565b610206565b6101dd565b61019d565b90816102409103126100e65790565b600080fd5b90610240828203126100e657610100916100d7565b90565b9052565b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b94939160609161019b946101896101969361018260808b019460008c0152565b60208a0152565b878203604089015261012a565b940152565b565b346100e6576101ce6101b86101b33660046100eb565b610d21565b906101c594929460405190565b94859485610162565b0390f35b60009103126100e657565b346100e6576101ed3660046101d2565b6101f561072c565b604051005b6001600160a01b031690565b346100e6576102163660046101d2565b6101ce6102216106ea565b604051918291826001600160a01b03909116815260200190565b805b036100e657565b9050359061019b8261023b565b906020828203126100e65761010091610244565b346100e6576101f5610278366004610251565b6115da565b610100916008021c6001600160a01b031690565b90610100915461027d565b61010060006001610291565b610100906101fa906001600160a01b031682565b610100906102a8565b610100906102bc565b610103906102c5565b60208101929161019b91906102ce565b346100e6576102f73660046101d2565b6101ce61030261029c565b604051918291826102d7565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561035a575b602083101461035557565b610324565b91607f169161034a565b805460009392916103816103778361033a565b8085529360200190565b91600181169081156103d3575060011461039a57505050565b6103ad9192939450600052602060002090565b916000925b8184106103bf5750500190565b8054848401526020909301926001016103b2565b92949550505060ff1916825215156020020190565b9061010091610364565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761042a57604052565b6103f2565b9061019b6104499261044060405190565b938480926103e8565b0383610408565b90600010610461576101009061042f565b61030e565b61010060006002610450565b60208082526101009291019061012a565b346100e6576104933660046101d2565b6101ce61049e610466565b60405191829182610472565b346100e6576104ba3660046101d2565b6101ce61049e6115e3565b346100e6576104d53660046101d2565b6101ce7f0000000000000000000000000000000000000000000000000000000000000000610221565b610100916008021c81565b9061010091546104fe565b61010060006003610509565b346100e6576105303660046101d2565b6101ce61053b610514565b6040519182918290815260200190565b6001600160a01b03811661023d565b9050359061019b8261054b565b906020828203126100e6576101009161055a565b346100e6576101f561058e366004610567565b610843565b919060408301116100e657565b919060808301116100e657565b91906101408301116100e657565b610240818303126100e6576105d08282610593565b926101006105e184604085016105a0565b936105ef8160c08601610593565b93610100016105ad565b346100e6576106093660046105bb565b92919091611dc4565b9061019b61061f60405190565b9283610408565b67ffffffffffffffff811161042a57602090601f01601f19160190565b90826000939282370152565b9092919261066461065f82610626565b610612565b938185526020850190828401116100e65761019b92610643565b9080601f830112156100e6578160206101009335910161064f565b906020828203126100e657813567ffffffffffffffff81116100e657610100920161067e565b346100e6576101f56106d2366004610699565b611594565b610100906101fa565b61010090546106d7565b61010060006106e0565b6106fc610788565b61019b61071a565b6101fa6101006101009290565b61010090610704565b61019b6107276000610711565b61087c565b61019b6106f4565b1561073b57565b60405162461bcd60e51b815280610784600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b61019b6107936106ea565b6107ac61079f336101fa565b916001600160a01b031690565b14610734565b61019b906107be610788565b61081e565b156107ca57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61019b906107276108326101fa6000610711565b6001600160a01b03831614156107c3565b61019b906107b2565b906001600160a01b03905b9181191691161790565b90610871610100610878926102c5565b825461084c565b9055565b61088660006106e0565b90610892816000610861565b6108c56108bf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936102c5565b916102c5565b916108cf60405190565b600090a3565b156108dc57565b60405162461bcd60e51b8152602060048201526024808201527f4f6e6c792065786368616e67652063616e2063616c6c20746869732066756e636044820152633a34b7b760e11b6064820152608490fd5b61097694939291906109713361096b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661079f565b146108d5565b610b73565b90919293565b80151561023d565b9050519061019b8261097c565b906020828203126100e65761010091610984565b9037565b61019b916040916109a5565b9061015e816040936109a9565b6109d26109ce60029390565b9190565b806000925b8484106109e5575050505050565b610a016109fa6001926109f58690565b6109b5565b9360400190565b930192916109d7565b61019b91610140916109a5565b610a4f61019b94610a4561010094989795610a3b61024086019a60008701906109a9565b60408501906109c2565b60c08301906109a9565b0190610a0a565b6040513d6000823e3d90fd5b15610a6957565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90600a811015610ac5576020020190565b610a9e565b6101006101006101009290565b356101008161023b565b610aee6101006101009290565b60ff1690565b61015e610b0c92602092610b06815190565b94859290565b93849101610107565b61010091610af4565b6101009061042f565b15610b2e57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606490fd5b50505050610b80306102c5565b602063f3bb70f6916000840190610bb96040860194610bc461010060c0890198018098610bac60405190565b9889978896879660e01b90565b865260048601610a17565b03915afa8015610d1c57610be091600091610cee575b50610a62565b610c03610bfe610bf9610bf36000610aca565b84610ab4565b610ad7565b610aca565b91600290610c88610c146001610ae1565b92610c826109ce610c73610c32610c2a85610ae1565b80988a610e1c565b610c5a610c3e60405190565b8092610c4e602083019182610b15565b90810382520382610408565b610c6c610c65825190565b9160200190565b2093610b1e565b610c7e610c65825190565b2090565b14610b27565b610100610bf9610cbc610bfe610bf9610cb6610cb0600798610ca98a610ae1565b908b610e1c565b97610aca565b88610ab4565b94610cde610cd9610bfe610bf9610cd36008610aca565b85610ab4565b611639565b610ce86009610aca565b90610ab4565b610d0f915060203d8111610d15575b610d078183610408565b810190610991565b38610bda565b503d610cfd565b610a56565b6109769060006060818061092d565b634e487b7160e01b600052601160045260246000fd5b610d559060ff165b9160ff1690565b90039060ff8211610d6257565b610d30565b6101006101006101009260ff1690565b67ffffffffffffffff811161042a5760208091020190565b90610d9c61065f83610d77565b918252565b369037565b9061019b610dbc610db684610d8f565b93610d77565b601f190160208401610da1565b6000198114610d625760010190565b91908203918211610d6257565b90610dee825190565b811015610ac5576020809102010190565b610100601f610aca565b81810292918115918404141715610d6257565b909290610e39610e34610e2f8686610d46565b610d67565b610da6565b91610e4385610d67565b610e4c85610d67565b811015610e9457610e8d81610e88610e6a610bf9610e4c9588610ab4565b610e85610e7f610e798c610d67565b85610dd8565b89610de5565b52565b610dc9565b9050610e43565b509350506101009150610ea5815190565b90610eb8610eb1610dff565b8093610e09565b906110c9565b90610d9c61065f83610626565b9061019b610dbc610edb84610ebe565b93610626565b610eee6101006101009290565b61ffff1690565b61ffff1661ffff8114610d625760010190565b6101006101006101009261ffff1690565b61010090610f2a6109ce6101009490565b901c90565b634e487b7160e01b600052601260045260246000fd5b610f519060ff16610d4e565b908115610f5c570690565b610f2f565b610f6d9060ff16610d4e565b019060ff8211610d6257565b610f8f610f896101009260ff1690565b60f81b90565b6001600160f81b03191690565b90610fa5825190565b811015610ac5570160200190565b61010090610f2a6109ce6101009460ff1690565b15610fce57565b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a490fd5b1561106657565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b926000926110d684610ae1565b6110ef6110ea836110e5895190565b610e09565b610ecb565b946110f981610aca565b9561110382610ee1565b965b6111106101008a5190565b61111989610f08565b10156112e75761113861113461112e8a610f08565b8b610de5565b5190565b98899661114487610da6565b9861114e86610aca565b8881101561119b5780610e888c8f6111969461118861118361118e9361117d6111776008610aca565b85610e09565b90610f19565b610ae1565b92610de5565b9060ff169052565b61114e565b5091909a50989295989793969194976111b388610aca565b955b8a8710156112c6576111d4610e2f6111cd8989610de5565b5160ff1690565b6111dd8a610aca565b811461127957906111f86111f361120a93610ae1565b610f79565b8a1a611204828b610f9c565b53610dc9565b9261121e6112186002610ae1565b8b610f45565b61122a610d4e8b610ae1565b14611255575b61124861124e915b6112426008610ae1565b90610fb3565b96610dc9565b95926111b5565b9861124861127061124e9261126a6001610ae1565b90610f61565b9a915050611230565b50926112886112186002610ae1565b600190611297610d4e83610ae1565b146112aa575b5061124861124e91611238565b6112be61124e929b61126a61124893610ae1565b9a915061129d565b989550935097949598916112da9150610ef5565b9695979197949094611105565b926109ce919598506101009750610100945061131a92509561010061132197611313610d4e6001610ae1565b1015610fc7565b111561105f565b611333565b610f8f610f896101009290565b80519060009261134284610aca565b61134d610100845190565b8110156113ef5761136f6113618285610f9c565b516001600160f81b03191690565b61138961137b87611326565b916001600160f81b03191690565b1461139c5761139790610dc9565b611342565b9250905b6113a983610ecb565b916113b385610aca565b845b8110156113e3576113dc816113d06113616113b59487610f9c565b881a6112048288610f9c565b90506113b3565b50935050610100915090565b50906113a0565b61019b90611402610788565b611589565b9160001960089290920291821b911b610857565b919061142c61010061087893610aca565b908354611407565b61019b9160009161141b565b81811061144b575050565b806114596000600193611434565b01611440565b9190601f811161146e57505050565b61148061019b93600052602060002090565b906020601f8401819004830193106114a2575b6020601f909101040190611440565b9091508190611493565b906114b5815190565b9067ffffffffffffffff821161042a576114d9826114d3855461033a565b8561145f565b602090601f831160011461151457610878929160009183611509575b5050600019600883021c1916906002021790565b0151905038806114f5565b601f1983169161152985600052602060002090565b9260005b8181106115675750916002939185600196941061154e575b50505002019055565b01516000196008601f8516021c19169055388080611545565b9193602060018192878701518155019501920161152d565b9061019b916114ac565b61019b90600261157f565b61019b906113f6565b61019b906115a9610788565b6115cf565b9060001990610857565b906115c861010061087892610aca565b82546115ae565b61019b9060036115b8565b61019b9061159d565b6101006002610b1e565b156115f457565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b611668602061165061164b60016106e0565b6102c5565b63169394bb9061165f60405190565b93849260e01b90565b82526004820185905260249082905afa908115610d1c57611698916116939160009161170b57501590565b6115ed565b6116a561164b60016106e0565b90635bd4df3290823b156100e6576116e2926116d4600080946116c760405190565b9687958694859360e01b90565b835260048301526024820190565b03925af18015610d1c576116f35750565b61019b9060006117038183610408565b8101906101d2565b611723915060203d8111610d1557610d078183610408565b1590565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001111561175057565b6000805260206000f35b919290926040519384526020840152604083015260408260608160076107d05a03fa156117505760806040928251848201526020830151606082015260066107d05a03fa1561175057565b93909260606020947f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47866080860198611b3f61012060008901977f1e3e840b53d3d27676a7593010db26c5d9c1be77982792c6a77bc51d996f59a489527f1fd57321e650c7231e9c2bcaf52236a0c52183e7dce757a3f1d74795afb9e3b9858a015261187760008201357f0a16776c085ca9fef14f58edbe5d3a3bdab9e490c9a3eef08331d35ad2687f1a7f055317dc49fd6dcd6f0d41a0f2be1e9ee5791af5077463c528dfb11944e38ea98c61175a565b6118c6858201357f0c1ebe29c01c5507488889e7ce28a5c925303856991945abb9a582b5218fe65d7f19dcecc22906300af06e53e1474d9b7c1d903775ddc1d8fc80587b6295d805858c61175a565b61191560408201357e51b809e3826e7d4bd859712d063d94783155f1e3c2d2df15240e8e7a1084457f2deaa61988aa335a5d94e8fc258fc360642f04989206c5b2f7377375bda2f2d58c61175a565b611964888201357f05481cfc53d291fb148bad51bc06bde7867ed38f3a019ecab25623ef9712bee67f0c1ff12c2af5e77866e13bc8bf89c58fd71e00f8d9fa29f44d3dda23267e892e8c61175a565b6119b460808201357f0c4a6bb6fdf60dbd2bebbd94c6d1ee9df64d15d4daa5573259e8724aa6d204c87f263812b8d2f91cd28b047e4935b8f7690c058763f2a57e02dc585416581d7f008c61175a565b611a0460a08201357f250ca18d4fd055aaa9095afd2d9cc339494b15341db450dca87bc857af2ce63c7f0d392fbad06e8aa6134b36ab2f7e2dd3c4b9f1a6aa009025978b5c4392a735b88c61175a565b611a5460c08201357f25d7e948e6ed9a2c550e9ac258a07d4a63182e4d7f0485acbf4eaeed0605d3a87f2ebb57f846731282b83de6b1fb4972b43713d037e1201de95880dd93590cdb378c61175a565b611aa460e08201357f1ccdd1ff9c12fee3aa632ef781714c2bc0bf12f01700911ed53536eb8c06efc77f23d8f1651f2fc35e077cb85ebb8b439f03c6fe4278ab0506703076037eba42ac8c61175a565b611af56101008201357f2039ef6253562b611e7f25a9bc2040f51ca3b9418e814163399ac11e8400cb717f28b295c865a6ed002fca95eef35f5c03e2ce284451a870d8cf7652f93757a0118c61175a565b01357f0f1e0ab547325e430a7356fe384a8db2f12c7fa605bdd918070ba1f0c87d543f7f2bace91ad1b222b2adfe20661747868d7c6a0c051efa473232733d915c32bc988961175a565b80358a5201358103068688015280356040880152858101358288015260408101356080880152013560a08601527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08601527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08601527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008601527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208601527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408601527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160860152516101808501528260000101516101a08401527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08401527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08401527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008401527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220840152803561024084015201356102608201527f0346cd87c9157b61554887f5f9b224de5cbe4ff8a86144a187d3f4e29c88115a6102808201527f161cd069685c9306d50c4af8ae4066febce4c3ee37dc0ae7050c3c2867c94ddf6102a08201527f1c9613e703c7c4be8c54ac686117c49201b663c52e59a0696ab3601a31ce1a216102c08201527f292b3ecaed6bffe99dea030955f5d260b73b0d381d1edf05efa16d6fc8c0571e6102e08201526020816103008160086107d05a03fa90511690565b91611e769391611dd2600090565b50604051936103808501604052611dec6000850135611727565b611df96020850135611727565b611e066040850135611727565b611e136060850135611727565b611e206080850135611727565b611e2d60a0850135611727565b611e3a60c0850135611727565b611e4760e0850135611727565b611e55610100850135611727565b611e63610120850135611727565b611e71610140850135611727565b6117a5565b60005260206000f3fea26469706673582212205d578d1e202f46a1a10e4e4c0a699e25343984036d710450a93c5624e06ec55b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806365cd296c146100d2578063715018a6146100cd5780638da5cb5b146100c8578063b2a3fda4146100c3578063b870676c146100be578063c0d05fed146100b9578063ced1e978146100b4578063d2f7265a146100af578063dbac5821146100aa578063f2fde38b146100a5578063f3bb70f6146100a05763f6c7226b036100e6576106bf565b6105f9565b61057b565b610520565b6104c5565b6104aa565b610483565b6102e7565b610265565b610206565b6101dd565b61019d565b90816102409103126100e65790565b600080fd5b90610240828203126100e657610100916100d7565b90565b9052565b60005b83811061011a5750506000910152565b818101518382015260200161010a565b61014b61015460209361015e9361013f815190565b80835293849260200190565b95869101610107565b601f01601f191690565b0190565b94939160609161019b946101896101969361018260808b019460008c0152565b60208a0152565b878203604089015261012a565b940152565b565b346100e6576101ce6101b86101b33660046100eb565b610d21565b906101c594929460405190565b94859485610162565b0390f35b60009103126100e657565b346100e6576101ed3660046101d2565b6101f561072c565b604051005b6001600160a01b031690565b346100e6576102163660046101d2565b6101ce6102216106ea565b604051918291826001600160a01b03909116815260200190565b805b036100e657565b9050359061019b8261023b565b906020828203126100e65761010091610244565b346100e6576101f5610278366004610251565b6115da565b610100916008021c6001600160a01b031690565b90610100915461027d565b61010060006001610291565b610100906101fa906001600160a01b031682565b610100906102a8565b610100906102bc565b610103906102c5565b60208101929161019b91906102ce565b346100e6576102f73660046101d2565b6101ce61030261029c565b604051918291826102d7565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561035a575b602083101461035557565b610324565b91607f169161034a565b805460009392916103816103778361033a565b8085529360200190565b91600181169081156103d3575060011461039a57505050565b6103ad9192939450600052602060002090565b916000925b8184106103bf5750500190565b8054848401526020909301926001016103b2565b92949550505060ff1916825215156020020190565b9061010091610364565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761042a57604052565b6103f2565b9061019b6104499261044060405190565b938480926103e8565b0383610408565b90600010610461576101009061042f565b61030e565b61010060006002610450565b60208082526101009291019061012a565b346100e6576104933660046101d2565b6101ce61049e610466565b60405191829182610472565b346100e6576104ba3660046101d2565b6101ce61049e6115e3565b346100e6576104d53660046101d2565b6101ce7f0000000000000000000000000000000000000000000000000000000000000000610221565b610100916008021c81565b9061010091546104fe565b61010060006003610509565b346100e6576105303660046101d2565b6101ce61053b610514565b6040519182918290815260200190565b6001600160a01b03811661023d565b9050359061019b8261054b565b906020828203126100e6576101009161055a565b346100e6576101f561058e366004610567565b610843565b919060408301116100e657565b919060808301116100e657565b91906101408301116100e657565b610240818303126100e6576105d08282610593565b926101006105e184604085016105a0565b936105ef8160c08601610593565b93610100016105ad565b346100e6576106093660046105bb565b92919091611dc4565b9061019b61061f60405190565b9283610408565b67ffffffffffffffff811161042a57602090601f01601f19160190565b90826000939282370152565b9092919261066461065f82610626565b610612565b938185526020850190828401116100e65761019b92610643565b9080601f830112156100e6578160206101009335910161064f565b906020828203126100e657813567ffffffffffffffff81116100e657610100920161067e565b346100e6576101f56106d2366004610699565b611594565b610100906101fa565b61010090546106d7565b61010060006106e0565b6106fc610788565b61019b61071a565b6101fa6101006101009290565b61010090610704565b61019b6107276000610711565b61087c565b61019b6106f4565b1561073b57565b60405162461bcd60e51b815280610784600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b61019b6107936106ea565b6107ac61079f336101fa565b916001600160a01b031690565b14610734565b61019b906107be610788565b61081e565b156107ca57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61019b906107276108326101fa6000610711565b6001600160a01b03831614156107c3565b61019b906107b2565b906001600160a01b03905b9181191691161790565b90610871610100610878926102c5565b825461084c565b9055565b61088660006106e0565b90610892816000610861565b6108c56108bf7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936102c5565b916102c5565b916108cf60405190565b600090a3565b156108dc57565b60405162461bcd60e51b8152602060048201526024808201527f4f6e6c792065786368616e67652063616e2063616c6c20746869732066756e636044820152633a34b7b760e11b6064820152608490fd5b61097694939291906109713361096b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661079f565b146108d5565b610b73565b90919293565b80151561023d565b9050519061019b8261097c565b906020828203126100e65761010091610984565b9037565b61019b916040916109a5565b9061015e816040936109a9565b6109d26109ce60029390565b9190565b806000925b8484106109e5575050505050565b610a016109fa6001926109f58690565b6109b5565b9360400190565b930192916109d7565b61019b91610140916109a5565b610a4f61019b94610a4561010094989795610a3b61024086019a60008701906109a9565b60408501906109c2565b60c08301906109a9565b0190610a0a565b6040513d6000823e3d90fd5b15610a6957565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90600a811015610ac5576020020190565b610a9e565b6101006101006101009290565b356101008161023b565b610aee6101006101009290565b60ff1690565b61015e610b0c92602092610b06815190565b94859290565b93849101610107565b61010091610af4565b6101009061042f565b15610b2e57565b60405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606490fd5b50505050610b80306102c5565b602063f3bb70f6916000840190610bb96040860194610bc461010060c0890198018098610bac60405190565b9889978896879660e01b90565b865260048601610a17565b03915afa8015610d1c57610be091600091610cee575b50610a62565b610c03610bfe610bf9610bf36000610aca565b84610ab4565b610ad7565b610aca565b91600290610c88610c146001610ae1565b92610c826109ce610c73610c32610c2a85610ae1565b80988a610e1c565b610c5a610c3e60405190565b8092610c4e602083019182610b15565b90810382520382610408565b610c6c610c65825190565b9160200190565b2093610b1e565b610c7e610c65825190565b2090565b14610b27565b610100610bf9610cbc610bfe610bf9610cb6610cb0600798610ca98a610ae1565b908b610e1c565b97610aca565b88610ab4565b94610cde610cd9610bfe610bf9610cd36008610aca565b85610ab4565b611639565b610ce86009610aca565b90610ab4565b610d0f915060203d8111610d15575b610d078183610408565b810190610991565b38610bda565b503d610cfd565b610a56565b6109769060006060818061092d565b634e487b7160e01b600052601160045260246000fd5b610d559060ff165b9160ff1690565b90039060ff8211610d6257565b610d30565b6101006101006101009260ff1690565b67ffffffffffffffff811161042a5760208091020190565b90610d9c61065f83610d77565b918252565b369037565b9061019b610dbc610db684610d8f565b93610d77565b601f190160208401610da1565b6000198114610d625760010190565b91908203918211610d6257565b90610dee825190565b811015610ac5576020809102010190565b610100601f610aca565b81810292918115918404141715610d6257565b909290610e39610e34610e2f8686610d46565b610d67565b610da6565b91610e4385610d67565b610e4c85610d67565b811015610e9457610e8d81610e88610e6a610bf9610e4c9588610ab4565b610e85610e7f610e798c610d67565b85610dd8565b89610de5565b52565b610dc9565b9050610e43565b509350506101009150610ea5815190565b90610eb8610eb1610dff565b8093610e09565b906110c9565b90610d9c61065f83610626565b9061019b610dbc610edb84610ebe565b93610626565b610eee6101006101009290565b61ffff1690565b61ffff1661ffff8114610d625760010190565b6101006101006101009261ffff1690565b61010090610f2a6109ce6101009490565b901c90565b634e487b7160e01b600052601260045260246000fd5b610f519060ff16610d4e565b908115610f5c570690565b610f2f565b610f6d9060ff16610d4e565b019060ff8211610d6257565b610f8f610f896101009260ff1690565b60f81b90565b6001600160f81b03191690565b90610fa5825190565b811015610ac5570160200190565b61010090610f2a6109ce6101009460ff1690565b15610fce57565b60405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a490fd5b1561106657565b60405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608490fd5b926000926110d684610ae1565b6110ef6110ea836110e5895190565b610e09565b610ecb565b946110f981610aca565b9561110382610ee1565b965b6111106101008a5190565b61111989610f08565b10156112e75761113861113461112e8a610f08565b8b610de5565b5190565b98899661114487610da6565b9861114e86610aca565b8881101561119b5780610e888c8f6111969461118861118361118e9361117d6111776008610aca565b85610e09565b90610f19565b610ae1565b92610de5565b9060ff169052565b61114e565b5091909a50989295989793969194976111b388610aca565b955b8a8710156112c6576111d4610e2f6111cd8989610de5565b5160ff1690565b6111dd8a610aca565b811461127957906111f86111f361120a93610ae1565b610f79565b8a1a611204828b610f9c565b53610dc9565b9261121e6112186002610ae1565b8b610f45565b61122a610d4e8b610ae1565b14611255575b61124861124e915b6112426008610ae1565b90610fb3565b96610dc9565b95926111b5565b9861124861127061124e9261126a6001610ae1565b90610f61565b9a915050611230565b50926112886112186002610ae1565b600190611297610d4e83610ae1565b146112aa575b5061124861124e91611238565b6112be61124e929b61126a61124893610ae1565b9a915061129d565b989550935097949598916112da9150610ef5565b9695979197949094611105565b926109ce919598506101009750610100945061131a92509561010061132197611313610d4e6001610ae1565b1015610fc7565b111561105f565b611333565b610f8f610f896101009290565b80519060009261134284610aca565b61134d610100845190565b8110156113ef5761136f6113618285610f9c565b516001600160f81b03191690565b61138961137b87611326565b916001600160f81b03191690565b1461139c5761139790610dc9565b611342565b9250905b6113a983610ecb565b916113b385610aca565b845b8110156113e3576113dc816113d06113616113b59487610f9c565b881a6112048288610f9c565b90506113b3565b50935050610100915090565b50906113a0565b61019b90611402610788565b611589565b9160001960089290920291821b911b610857565b919061142c61010061087893610aca565b908354611407565b61019b9160009161141b565b81811061144b575050565b806114596000600193611434565b01611440565b9190601f811161146e57505050565b61148061019b93600052602060002090565b906020601f8401819004830193106114a2575b6020601f909101040190611440565b9091508190611493565b906114b5815190565b9067ffffffffffffffff821161042a576114d9826114d3855461033a565b8561145f565b602090601f831160011461151457610878929160009183611509575b5050600019600883021c1916906002021790565b0151905038806114f5565b601f1983169161152985600052602060002090565b9260005b8181106115675750916002939185600196941061154e575b50505002019055565b01516000196008601f8516021c19169055388080611545565b9193602060018192878701518155019501920161152d565b9061019b916114ac565b61019b90600261157f565b61019b906113f6565b61019b906115a9610788565b6115cf565b9060001990610857565b906115c861010061087892610aca565b82546115ae565b61019b9060036115b8565b61019b9061159d565b6101006002610b1e565b156115f457565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b611668602061165061164b60016106e0565b6102c5565b63169394bb9061165f60405190565b93849260e01b90565b82526004820185905260249082905afa908115610d1c57611698916116939160009161170b57501590565b6115ed565b6116a561164b60016106e0565b90635bd4df3290823b156100e6576116e2926116d4600080946116c760405190565b9687958694859360e01b90565b835260048301526024820190565b03925af18015610d1c576116f35750565b61019b9060006117038183610408565b8101906101d2565b611723915060203d8111610d1557610d078183610408565b1590565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001111561175057565b6000805260206000f35b919290926040519384526020840152604083015260408260608160076107d05a03fa156117505760806040928251848201526020830151606082015260066107d05a03fa1561175057565b93909260606020947f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47866080860198611b3f61012060008901977f1e3e840b53d3d27676a7593010db26c5d9c1be77982792c6a77bc51d996f59a489527f1fd57321e650c7231e9c2bcaf52236a0c52183e7dce757a3f1d74795afb9e3b9858a015261187760008201357f0a16776c085ca9fef14f58edbe5d3a3bdab9e490c9a3eef08331d35ad2687f1a7f055317dc49fd6dcd6f0d41a0f2be1e9ee5791af5077463c528dfb11944e38ea98c61175a565b6118c6858201357f0c1ebe29c01c5507488889e7ce28a5c925303856991945abb9a582b5218fe65d7f19dcecc22906300af06e53e1474d9b7c1d903775ddc1d8fc80587b6295d805858c61175a565b61191560408201357e51b809e3826e7d4bd859712d063d94783155f1e3c2d2df15240e8e7a1084457f2deaa61988aa335a5d94e8fc258fc360642f04989206c5b2f7377375bda2f2d58c61175a565b611964888201357f05481cfc53d291fb148bad51bc06bde7867ed38f3a019ecab25623ef9712bee67f0c1ff12c2af5e77866e13bc8bf89c58fd71e00f8d9fa29f44d3dda23267e892e8c61175a565b6119b460808201357f0c4a6bb6fdf60dbd2bebbd94c6d1ee9df64d15d4daa5573259e8724aa6d204c87f263812b8d2f91cd28b047e4935b8f7690c058763f2a57e02dc585416581d7f008c61175a565b611a0460a08201357f250ca18d4fd055aaa9095afd2d9cc339494b15341db450dca87bc857af2ce63c7f0d392fbad06e8aa6134b36ab2f7e2dd3c4b9f1a6aa009025978b5c4392a735b88c61175a565b611a5460c08201357f25d7e948e6ed9a2c550e9ac258a07d4a63182e4d7f0485acbf4eaeed0605d3a87f2ebb57f846731282b83de6b1fb4972b43713d037e1201de95880dd93590cdb378c61175a565b611aa460e08201357f1ccdd1ff9c12fee3aa632ef781714c2bc0bf12f01700911ed53536eb8c06efc77f23d8f1651f2fc35e077cb85ebb8b439f03c6fe4278ab0506703076037eba42ac8c61175a565b611af56101008201357f2039ef6253562b611e7f25a9bc2040f51ca3b9418e814163399ac11e8400cb717f28b295c865a6ed002fca95eef35f5c03e2ce284451a870d8cf7652f93757a0118c61175a565b01357f0f1e0ab547325e430a7356fe384a8db2f12c7fa605bdd918070ba1f0c87d543f7f2bace91ad1b222b2adfe20661747868d7c6a0c051efa473232733d915c32bc988961175a565b80358a5201358103068688015280356040880152858101358288015260408101356080880152013560a08601527f245229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c760c08601527f253ec85988dbb84e46e94b5efa3373b47a000b4ac6c86b2d4b798d274a18230260e08601527f07090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db6101008601527f2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d2446101208601527f0ae1135cffdaf227c5dc266740607aa930bc3bd92ddc2b135086d9da2dfd3e2a6101408601527f2b86859fd3d55c9d150fb3f0aeba798826493dd73d357ab0f9fdaced9fc81829610160860152516101808501528260000101516101a08401527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08401527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08401527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008401527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220840152803561024084015201356102608201527f0346cd87c9157b61554887f5f9b224de5cbe4ff8a86144a187d3f4e29c88115a6102808201527f161cd069685c9306d50c4af8ae4066febce4c3ee37dc0ae7050c3c2867c94ddf6102a08201527f1c9613e703c7c4be8c54ac686117c49201b663c52e59a0696ab3601a31ce1a216102c08201527f292b3ecaed6bffe99dea030955f5d260b73b0d381d1edf05efa16d6fc8c0571e6102e08201526020816103008160086107d05a03fa90511690565b91611e769391611dd2600090565b50604051936103808501604052611dec6000850135611727565b611df96020850135611727565b611e066040850135611727565b611e136060850135611727565b611e206080850135611727565b611e2d60a0850135611727565b611e3a60c0850135611727565b611e4760e0850135611727565b611e55610100850135611727565b611e63610120850135611727565b611e71610140850135611727565b6117a5565b60005260206000f3fea26469706673582212205d578d1e202f46a1a10e4e4c0a699e25343984036d710450a93c5624e06ec55b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1862,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(INullifierRegistry)1450\"\n      },\n      {\n        \"astId\": 1864,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 1866,\n        \"contract\": \"contracts/TransferDomainProcessor.sol:TransferDomainProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(INullifierRegistry)1450\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/USDCMock.json",
    "content": "{\n  \"address\": \"0xdE76EA7B759F9ebb5F4B000ACc312CC5F9c3C096\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_mintAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"symbol\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"allowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"subtractedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"decreaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"addedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transfer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x9187216cf98d19b9b1e8aa3e00e7cdc92589508a26a952288041485b954787de\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xdE76EA7B759F9ebb5F4B000ACc312CC5F9c3C096\",\n    \"transactionIndex\": 24,\n    \"gasUsed\": \"748119\",\n    \"logsBloom\": \"0x00000000000000000000000000000000800000000000004000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000800000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000008000000000\",\n    \"blockHash\": \"0x34409c3dd97c075ae0655d494a3886cc8b1cbf738cd01cb2151e367c71afb1ab\",\n    \"transactionHash\": \"0x9187216cf98d19b9b1e8aa3e00e7cdc92589508a26a952288041485b954787de\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 24,\n        \"blockNumber\": 6746716,\n        \"transactionHash\": \"0x9187216cf98d19b9b1e8aa3e00e7cdc92589508a26a952288041485b954787de\",\n        \"address\": \"0xdE76EA7B759F9ebb5F4B000ACc312CC5F9c3C096\",\n        \"topics\": [\n          \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x000000000000000000000000000000000000000000000000000000e8d4a51000\",\n        \"logIndex\": 55,\n        \"blockHash\": \"0x34409c3dd97c075ae0655d494a3886cc8b1cbf738cd01cb2151e367c71afb1ab\"\n      }\n    ],\n    \"blockNumber\": 6746716,\n    \"cumulativeGasUsed\": \"5347385\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"1000000000000\",\n    \"USDC\",\n    \"USDC\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_mintAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Approval\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"allowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"approve\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"subtractedValue\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"decreaseAllowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"addedValue\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseAllowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"totalSupply\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Approval(address,address,uint256)\\\":{\\\"details\\\":\\\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\\\"},\\\"Transfer(address,address,uint256)\\\":{\\\"details\\\":\\\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"allowance(address,address)\\\":{\\\"details\\\":\\\"See {IERC20-allowance}.\\\"},\\\"approve(address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\\\"},\\\"balanceOf(address)\\\":{\\\"details\\\":\\\"See {IERC20-balanceOf}.\\\"},\\\"decimals()\\\":{\\\"details\\\":\\\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\\\"},\\\"decreaseAllowance(address,uint256)\\\":{\\\"details\\\":\\\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\\\"},\\\"increaseAllowance(address,uint256)\\\":{\\\"details\\\":\\\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\\\"},\\\"name()\\\":{\\\"details\\\":\\\"Returns the name of the token.\\\"},\\\"symbol()\\\":{\\\"details\\\":\\\"Returns the symbol of the token, usually a shorter version of the name.\\\"},\\\"totalSupply()\\\":{\\\"details\\\":\\\"See {IERC20-totalSupply}.\\\"},\\\"transfer(address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\\\"},\\\"transferFrom(address,address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/mocks/USDCMock.sol\\\":\\\"USDCMock\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./IERC20.sol\\\\\\\";\\\\nimport \\\\\\\"./extensions/IERC20Metadata.sol\\\\\\\";\\\\nimport \\\\\\\"../../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Implementation of the {IERC20} interface.\\\\n *\\\\n * This implementation is agnostic to the way tokens are created. This means\\\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\\\n *\\\\n * TIP: For a detailed writeup see our guide\\\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\\\n * to implement supply mechanisms].\\\\n *\\\\n * The default value of {decimals} is 18. To change this, you should override\\\\n * this function so it returns a different value.\\\\n *\\\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\\\n * instead returning `false` on failure. This behavior is nonetheless\\\\n * conventional and does not conflict with the expectations of ERC20\\\\n * applications.\\\\n *\\\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\\\n * This allows applications to reconstruct the allowance for all accounts just\\\\n * by listening to said events. Other implementations of the EIP may not emit\\\\n * these events, as it isn't required by the specification.\\\\n *\\\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\\\n * functions have been added to mitigate the well-known issues around setting\\\\n * allowances. See {IERC20-approve}.\\\\n */\\\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\\\n    mapping(address => uint256) private _balances;\\\\n\\\\n    mapping(address => mapping(address => uint256)) private _allowances;\\\\n\\\\n    uint256 private _totalSupply;\\\\n\\\\n    string private _name;\\\\n    string private _symbol;\\\\n\\\\n    /**\\\\n     * @dev Sets the values for {name} and {symbol}.\\\\n     *\\\\n     * All two of these values are immutable: they can only be set once during\\\\n     * construction.\\\\n     */\\\\n    constructor(string memory name_, string memory symbol_) {\\\\n        _name = name_;\\\\n        _symbol = symbol_;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the name of the token.\\\\n     */\\\\n    function name() public view virtual override returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\\\n     * name.\\\\n     */\\\\n    function symbol() public view virtual override returns (string memory) {\\\\n        return _symbol;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the number of decimals used to get its user representation.\\\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\\\n     *\\\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\\\n     * Ether and Wei. This is the default value returned by this function, unless\\\\n     * it's overridden.\\\\n     *\\\\n     * NOTE: This information is only used for _display_ purposes: it in\\\\n     * no way affects any of the arithmetic of the contract, including\\\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\\\n     */\\\\n    function decimals() public view virtual override returns (uint8) {\\\\n        return 18;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-totalSupply}.\\\\n     */\\\\n    function totalSupply() public view virtual override returns (uint256) {\\\\n        return _totalSupply;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-balanceOf}.\\\\n     */\\\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\\\n        return _balances[account];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-transfer}.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `to` cannot be the zero address.\\\\n     * - the caller must have a balance of at least `amount`.\\\\n     */\\\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _transfer(owner, to, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-allowance}.\\\\n     */\\\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\\\n        return _allowances[owner][spender];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-approve}.\\\\n     *\\\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _approve(owner, spender, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-transferFrom}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\\\n     *\\\\n     * NOTE: Does not update the allowance if the current allowance\\\\n     * is the maximum `uint256`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `from` and `to` cannot be the zero address.\\\\n     * - `from` must have a balance of at least `amount`.\\\\n     * - the caller must have allowance for ``from``'s tokens of at least\\\\n     * `amount`.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\\\n        address spender = _msgSender();\\\\n        _spendAllowance(from, spender, amount);\\\\n        _transfer(from, to, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\\\n     *\\\\n     * This is an alternative to {approve} that can be used as a mitigation for\\\\n     * problems described in {IERC20-approve}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\\\n     *\\\\n     * This is an alternative to {approve} that can be used as a mitigation for\\\\n     * problems described in {IERC20-approve}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     * - `spender` must have allowance for the caller of at least\\\\n     * `subtractedValue`.\\\\n     */\\\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\\\n        address owner = _msgSender();\\\\n        uint256 currentAllowance = allowance(owner, spender);\\\\n        require(currentAllowance >= subtractedValue, \\\\\\\"ERC20: decreased allowance below zero\\\\\\\");\\\\n        unchecked {\\\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\\\n     *\\\\n     * This internal function is equivalent to {transfer}, and can be used to\\\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `from` cannot be the zero address.\\\\n     * - `to` cannot be the zero address.\\\\n     * - `from` must have a balance of at least `amount`.\\\\n     */\\\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\\\n        require(from != address(0), \\\\\\\"ERC20: transfer from the zero address\\\\\\\");\\\\n        require(to != address(0), \\\\\\\"ERC20: transfer to the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(from, to, amount);\\\\n\\\\n        uint256 fromBalance = _balances[from];\\\\n        require(fromBalance >= amount, \\\\\\\"ERC20: transfer amount exceeds balance\\\\\\\");\\\\n        unchecked {\\\\n            _balances[from] = fromBalance - amount;\\\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\\\n            // decrementing then incrementing.\\\\n            _balances[to] += amount;\\\\n        }\\\\n\\\\n        emit Transfer(from, to, amount);\\\\n\\\\n        _afterTokenTransfer(from, to, amount);\\\\n    }\\\\n\\\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\\\n     * the total supply.\\\\n     *\\\\n     * Emits a {Transfer} event with `from` set to the zero address.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `account` cannot be the zero address.\\\\n     */\\\\n    function _mint(address account, uint256 amount) internal virtual {\\\\n        require(account != address(0), \\\\\\\"ERC20: mint to the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(address(0), account, amount);\\\\n\\\\n        _totalSupply += amount;\\\\n        unchecked {\\\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\\\n            _balances[account] += amount;\\\\n        }\\\\n        emit Transfer(address(0), account, amount);\\\\n\\\\n        _afterTokenTransfer(address(0), account, amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\\\n     * total supply.\\\\n     *\\\\n     * Emits a {Transfer} event with `to` set to the zero address.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `account` cannot be the zero address.\\\\n     * - `account` must have at least `amount` tokens.\\\\n     */\\\\n    function _burn(address account, uint256 amount) internal virtual {\\\\n        require(account != address(0), \\\\\\\"ERC20: burn from the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(account, address(0), amount);\\\\n\\\\n        uint256 accountBalance = _balances[account];\\\\n        require(accountBalance >= amount, \\\\\\\"ERC20: burn amount exceeds balance\\\\\\\");\\\\n        unchecked {\\\\n            _balances[account] = accountBalance - amount;\\\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\\\n            _totalSupply -= amount;\\\\n        }\\\\n\\\\n        emit Transfer(account, address(0), amount);\\\\n\\\\n        _afterTokenTransfer(account, address(0), amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\\\n     *\\\\n     * This internal function is equivalent to `approve`, and can be used to\\\\n     * e.g. set automatic allowances for certain subsystems, etc.\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `owner` cannot be the zero address.\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\\\n        require(owner != address(0), \\\\\\\"ERC20: approve from the zero address\\\\\\\");\\\\n        require(spender != address(0), \\\\\\\"ERC20: approve to the zero address\\\\\\\");\\\\n\\\\n        _allowances[owner][spender] = amount;\\\\n        emit Approval(owner, spender, amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\\\n     *\\\\n     * Does not update the allowance amount in case of infinite allowance.\\\\n     * Revert if not enough allowance is available.\\\\n     *\\\\n     * Might emit an {Approval} event.\\\\n     */\\\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\\\n        uint256 currentAllowance = allowance(owner, spender);\\\\n        if (currentAllowance != type(uint256).max) {\\\\n            require(currentAllowance >= amount, \\\\\\\"ERC20: insufficient allowance\\\\\\\");\\\\n            unchecked {\\\\n                _approve(owner, spender, currentAllowance - amount);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Hook that is called before any transfer of tokens. This includes\\\\n     * minting and burning.\\\\n     *\\\\n     * Calling conditions:\\\\n     *\\\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\\\n     * will be transferred to `to`.\\\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\\\n     * - `from` and `to` are never both zero.\\\\n     *\\\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\\\n     */\\\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\\\n\\\\n    /**\\\\n     * @dev Hook that is called after any transfer of tokens. This includes\\\\n     * minting and burning.\\\\n     *\\\\n     * Calling conditions:\\\\n     *\\\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\\\n     * has been transferred to `to`.\\\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\\\n     * - `from` and `to` are never both zero.\\\\n     *\\\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\\\n     */\\\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../IERC20.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC20Metadata is IERC20 {\\\\n    /**\\\\n     * @dev Returns the name of the token.\\\\n     */\\\\n    function name() external view returns (string memory);\\\\n\\\\n    /**\\\\n     * @dev Returns the symbol of the token.\\\\n     */\\\\n    function symbol() external view returns (string memory);\\\\n\\\\n    /**\\\\n     * @dev Returns the decimals places of the token.\\\\n     */\\\\n    function decimals() external view returns (uint8);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/mocks/USDCMock.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract USDCMock is ERC20 {\\\\n\\\\n    constructor(\\\\n        uint256 _mintAmount,\\\\n        string memory name,\\\\n        string memory symbol\\\\n    )\\\\n        ERC20(name, symbol)\\\\n    {\\\\n        _mint(msg.sender, _mintAmount);\\\\n    }\\\\n\\\\n    function decimals() public pure override returns (uint8) {\\\\n        return 6;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xda097618a7499396c5d4b8bdf4d296d687408a91b442333254f8ef8ba8f29953\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523462000031576200001f620000186200017b565b91620001a3565b604051610a74620005cb8239610a7490f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006e57604052565b62000036565b906200008b6200008360405190565b92836200004c565b565b6001600160401b0381116200006e57602090601f01601f19160190565b60005b838110620000be5750506000910152565b8181015183820152602001620000ad565b90929192620000e8620000e2826200008d565b62000074565b9381855260208501908284011162000031576200008b92620000aa565b9080601f83011215620000315781516200012292602001620000cf565b90565b916060838303126200003157825160208401519093906001600160401b0381116200003157836200015891830162000105565b60408201519093906001600160401b038111620000315762000122920162000105565b6200019e6200103f80380380620001928162000074565b92833981019062000125565b909192565b906200008b92620001b491620003bc565b33620004f5565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015620001f4575b6020831014620001ee57565b620001bb565b91607f1691620001e2565b9160001960089290920291821b911b5b9181191691161790565b6200012262000122620001229290565b91906200023e62000122620002479362000219565b908354620001ff565b9055565b6200008b9160009162000229565b81811062000265575050565b806200027560006001936200024b565b0162000259565b9190601f81116200028c57505050565b620002a06200008b93600052602060002090565b906020601f840181900483019310620002c4575b6020601f90910104019062000259565b9091508190620002b4565b90620002d9815190565b906001600160401b0382116200006e576200030182620002fa8554620001d1565b856200027c565b602090601f831160011462000340576200024792916000918362000334575b5050600019600883021c1916906002021790565b01519050388062000320565b601f198316916200035685600052602060002090565b9260005b81811062000397575091600293918560019694106200037d575b50505002019055565b01516000196008601f8516021c1916905538808062000374565b919360206001819287870151815501950192016200035a565b906200008b91620002cf565b90620003ce6200008b926003620003b0565b6004620003b0565b620003e662000122620001229290565b6001600160a01b031690565b6200012290620003d6565b156200040557565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b620001229081565b6200012290546200044a565b634e487b7160e01b600052601160045260246000fd5b919082018092116200048257565b6200045e565b90600019906200020f565b90620004a762000122620002479262000219565b825462000488565b6200012290620003e6906001600160a01b031682565b6200012290620004af565b6200012290620004c5565b90620004e790620004d0565b600052602052604060002090565b60006200057262000557836200050b84620003f2565b936200052e6200051b86620003e6565b6200052684620003e6565b1415620003fd565b62000551620005498862000543600262000452565b62000474565b600262000493565b620004db565b6200056b85620005678362000452565b0190565b9062000493565b620005c5620005ad620005a67fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93620004d0565b93620004d0565b93620005b860405190565b9182918290815260200190565b0390a356fe6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100c2578063095ea7b3146100bd57806318160ddd146100b857806323b872dd146100b3578063313ce567146100ae57806339509351146100a957806370a08231146100a457806395d89b411461009f578063a457c2d71461009a578063a9059cbb146100955763dd62ed3e036100d25761036a565b61032b565b61030f565b6102f4565b6102d9565b6102a9565b61027a565b61025e565b610202565b6101d4565b610146565b60009103126100d257565b600080fd5b60005b8381106100ea5750506000910152565b81810151838201526020016100da565b61011b61012460209361012e9361010f815190565b80835293849260200190565b958691016100d7565b601f01601f191690565b0190565b6020808252610143929101906100fa565b90565b346100d2576101563660046100c7565b61016d6101616104bb565b60405191829182610132565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100d257565b9050359061019c8261017d565b565b80610188565b9050359061019c8261019e565b91906040838203126100d257610143906101cb818561018f565b936020016101a4565b346100d25761016d6101f06101ea3660046101b1565b90610579565b60405191829182901515815260200190565b346100d2576102123660046100c7565b61016d61021d6104e0565b6040515b9182918290815260200190565b90916060828403126100d257610143610247848461018f565b93610255816020860161018f565b936040016101a4565b346100d25761016d6101f061027436600461022e565b91610584565b346100d25761028a3660046100c7565b61016d610295610a34565b6040519182918260ff909116815260200190565b346100d25761016d6101f06102bf3660046101b1565b906105bd565b906020828203126100d2576101439161018f565b346100d25761016d61021d6102ef3660046102c5565b610528565b346100d2576103043660046100c7565b61016d6101616104c5565b346100d25761016d6101f06103253660046101b1565b90610636565b346100d25761016d6101f06103413660046101b1565b90610544565b91906040838203126100d25761014390610361818561018f565b9360200161018f565b346100d25761016d61021d610380366004610347565b90610559565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156103bc575b60208310146103b757565b610386565b91607f16916103ac565b805460009392916103e36103d98361039c565b8085529360200190565b916001811690811561043557506001146103fc57505050565b61040f9192939450600052602060002090565b916000925b8184106104215750500190565b805484840152602090930192600101610414565b92949550505060ff1916825215156020020190565b90610143916103c6565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761048c57604052565b610454565b9061019c6104ab926104a260405190565b9384809261044a565b038361046a565b61014390610491565b61014360036104b2565b61014360046104b2565b6101439081565b61014390546104cf565b61014360026104d6565b61014390610171906001600160a01b031682565b610143906104ea565b610143906104fe565b9061051a90610507565b600052602052604060002090565b61053f61014391610537600090565b506000610510565b6104d6565b61055491903361079e565b61079e565b600190565b6101439161057461053f9261056c600090565b506001610510565b610510565b61055491903361091b565b61055492919061054f8333836109e9565b634e487b7160e01b600052601160045260246000fd5b919082018092116105b857565b610595565b61055491906105d633926105d18385610559565b6105ab565b9161091b565b156105e357565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b61055491906105d6339261064a8385610559565b610656828210156105dc565b0390565b6101716101436101439290565b6101439061065a565b1561067757565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b156106d157565b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b1561072957565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b6101436101436101439290565b9061014361014361079a9261077d565b9055565b6108276108148360006107e56107d46107b683610667565b6101716001600160a01b0382166001600160a01b038a161415610670565b6001600160a01b03841614156106ca565b610574610805886107f961053f8986610510565b61065682821015610722565b61080f8784610510565b61078a565b6108218561012e836104d6565b9061078a565b61086761085d6108577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93610507565b93610507565b9361022160405190565b0390a3565b1561087357565b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b156108cb57565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b61095a61094961092b6000610667565b6101716001600160a01b0382166001600160a01b038616141561086c565b6001600160a01b03841614156108c4565b61096d8361080f84610574856001610510565b61086761085d6108577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593610507565b156109a457565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b906109f48183610559565b6000198103610a04575b50505050565b610a18936105d6916106568282101561099d565b388080806109fe565b610a2e6101436101439290565b60ff1690565b6101436006610a2156fea2646970667358221220e80608d1674df26ea48c686f799e4697d708f305deeab4d5adee33c57a3c0fe364736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806306fdde03146100c2578063095ea7b3146100bd57806318160ddd146100b857806323b872dd146100b3578063313ce567146100ae57806339509351146100a957806370a08231146100a457806395d89b411461009f578063a457c2d71461009a578063a9059cbb146100955763dd62ed3e036100d25761036a565b61032b565b61030f565b6102f4565b6102d9565b6102a9565b61027a565b61025e565b610202565b6101d4565b610146565b60009103126100d257565b600080fd5b60005b8381106100ea5750506000910152565b81810151838201526020016100da565b61011b61012460209361012e9361010f815190565b80835293849260200190565b958691016100d7565b601f01601f191690565b0190565b6020808252610143929101906100fa565b90565b346100d2576101563660046100c7565b61016d6101616104bb565b60405191829182610132565b0390f35b6001600160a01b031690565b6001600160a01b0381165b036100d257565b9050359061019c8261017d565b565b80610188565b9050359061019c8261019e565b91906040838203126100d257610143906101cb818561018f565b936020016101a4565b346100d25761016d6101f06101ea3660046101b1565b90610579565b60405191829182901515815260200190565b346100d2576102123660046100c7565b61016d61021d6104e0565b6040515b9182918290815260200190565b90916060828403126100d257610143610247848461018f565b93610255816020860161018f565b936040016101a4565b346100d25761016d6101f061027436600461022e565b91610584565b346100d25761028a3660046100c7565b61016d610295610a34565b6040519182918260ff909116815260200190565b346100d25761016d6101f06102bf3660046101b1565b906105bd565b906020828203126100d2576101439161018f565b346100d25761016d61021d6102ef3660046102c5565b610528565b346100d2576103043660046100c7565b61016d6101616104c5565b346100d25761016d6101f06103253660046101b1565b90610636565b346100d25761016d6101f06103413660046101b1565b90610544565b91906040838203126100d25761014390610361818561018f565b9360200161018f565b346100d25761016d61021d610380366004610347565b90610559565b634e487b7160e01b600052602260045260246000fd5b90600160028304921680156103bc575b60208310146103b757565b610386565b91607f16916103ac565b805460009392916103e36103d98361039c565b8085529360200190565b916001811690811561043557506001146103fc57505050565b61040f9192939450600052602060002090565b916000925b8184106104215750500190565b805484840152602090930192600101610414565b92949550505060ff1916825215156020020190565b90610143916103c6565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff82111761048c57604052565b610454565b9061019c6104ab926104a260405190565b9384809261044a565b038361046a565b61014390610491565b61014360036104b2565b61014360046104b2565b6101439081565b61014390546104cf565b61014360026104d6565b61014390610171906001600160a01b031682565b610143906104ea565b610143906104fe565b9061051a90610507565b600052602052604060002090565b61053f61014391610537600090565b506000610510565b6104d6565b61055491903361079e565b61079e565b600190565b6101439161057461053f9261056c600090565b506001610510565b610510565b61055491903361091b565b61055492919061054f8333836109e9565b634e487b7160e01b600052601160045260246000fd5b919082018092116105b857565b610595565b61055491906105d633926105d18385610559565b6105ab565b9161091b565b156105e357565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b61055491906105d6339261064a8385610559565b610656828210156105dc565b0390565b6101716101436101439290565b6101439061065a565b1561067757565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b156106d157565b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b1561072957565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b6101436101436101439290565b9061014361014361079a9261077d565b9055565b6108276108148360006107e56107d46107b683610667565b6101716001600160a01b0382166001600160a01b038a161415610670565b6001600160a01b03841614156106ca565b610574610805886107f961053f8986610510565b61065682821015610722565b61080f8784610510565b61078a565b6108218561012e836104d6565b9061078a565b61086761085d6108577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93610507565b93610507565b9361022160405190565b0390a3565b1561087357565b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b156108cb57565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b61095a61094961092b6000610667565b6101716001600160a01b0382166001600160a01b038616141561086c565b6001600160a01b03841614156108c4565b61096d8361080f84610574856001610510565b61086761085d6108577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593610507565b156109a457565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b906109f48183610559565b6000198103610a04575b50505050565b610a18936105d6916106568282101561099d565b388080806109fe565b610a2e6101436101439290565b60ff1690565b6101436006610a2156fea2646970667358221220e80608d1674df26ea48c686f799e4697d708f305deeab4d5adee33c57a3c0fe364736f6c63430008120033\",\n  \"devdoc\": {\n    \"events\": {\n      \"Approval(address,address,uint256)\": {\n        \"details\": \"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"\n      },\n      \"Transfer(address,address,uint256)\": {\n        \"details\": \"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"allowance(address,address)\": {\n        \"details\": \"See {IERC20-allowance}.\"\n      },\n      \"approve(address,uint256)\": {\n        \"details\": \"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"\n      },\n      \"balanceOf(address)\": {\n        \"details\": \"See {IERC20-balanceOf}.\"\n      },\n      \"decimals()\": {\n        \"details\": \"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"\n      },\n      \"decreaseAllowance(address,uint256)\": {\n        \"details\": \"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"\n      },\n      \"increaseAllowance(address,uint256)\": {\n        \"details\": \"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"\n      },\n      \"name()\": {\n        \"details\": \"Returns the name of the token.\"\n      },\n      \"symbol()\": {\n        \"details\": \"Returns the symbol of the token, usually a shorter version of the name.\"\n      },\n      \"totalSupply()\": {\n        \"details\": \"See {IERC20-totalSupply}.\"\n      },\n      \"transfer(address,uint256)\": {\n        \"details\": \"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"\n      },\n      \"transferFrom(address,address,uint256)\": {\n        \"details\": \"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 301,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_balances\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 307,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_allowances\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_address,t_uint256))\"\n      },\n      {\n        \"astId\": 309,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_totalSupply\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 311,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 313,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_symbol\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_string_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_uint256))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => uint256))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_uint256)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/VerifiedDomainRegistry.json",
    "content": "{\n  \"address\": \"0xb941e69B6C1A23A88cf9DA7D243bAE1D2Cb8eb6b\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DomainListed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DomainListingRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"oldOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DomainTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"domainName\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTime\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DomainVerified\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ExchangeAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ExchangeRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"newVerifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"VerifyDomainProcessorUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addExchange\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"domains\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"expiryTime\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"exchange\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"exchanges\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getDomain\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_domainName\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"getDomainId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getDomainOwner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_domains\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getDomains\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getExchanges\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_user\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUserDomains\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"domainId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"owner\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"name\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"expiryTime\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"exchange\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"listingId\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IVerifiedDomainRegistry.Domain\",\n              \"name\": \"domain\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IVerifiedDomainRegistry.DomainWithId[]\",\n          \"name\": \"domainInfo\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"_verifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isExchange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeDomainListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_exchange\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeExchange\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_listingId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setDomainListing\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_domainId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateDomainOnSale\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"_verifyDomainProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"updateVerifyDomainProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"userDomains\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifyDomainProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IVerifyDomainProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n          \"name\": \"_proofs\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"verifyDomains\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xde4a0a205656019da670947f35e1b25ce66bbdad5514f202f64e4849d344812a\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0xb941e69B6C1A23A88cf9DA7D243bAE1D2Cb8eb6b\",\n    \"transactionIndex\": 27,\n    \"gasUsed\": \"2387918\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000080000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000200000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x610bb792147a43e89e83179cea8398650876b29bb74e4e00e9f5159ab351fb0e\",\n    \"transactionHash\": \"0xde4a0a205656019da670947f35e1b25ce66bbdad5514f202f64e4849d344812a\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 27,\n        \"blockNumber\": 6746722,\n        \"transactionHash\": \"0xde4a0a205656019da670947f35e1b25ce66bbdad5514f202f64e4849d344812a\",\n        \"address\": \"0xb941e69B6C1A23A88cf9DA7D243bAE1D2Cb8eb6b\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 80,\n        \"blockHash\": \"0x610bb792147a43e89e83179cea8398650876b29bb74e4e00e9f5159ab351fb0e\"\n      }\n    ],\n    \"blockNumber\": 6746722,\n    \"cumulativeGasUsed\": \"13177290\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DomainListed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DomainListingRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DomainTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"domainName\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DomainVerified\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ExchangeAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ExchangeRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"newVerifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"VerifyDomainProcessorUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addExchange\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"domains\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"exchanges\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getDomain\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_domainName\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getDomainId\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getDomainOwner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_domains\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getDomains\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId[]\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getExchanges\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_user\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUserDomains\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"exchange\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.Domain\\\",\\\"name\\\":\\\"domain\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IVerifiedDomainRegistry.DomainWithId[]\\\",\\\"name\\\":\\\"domainInfo\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"_verifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isExchange\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeDomainListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_exchange\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeExchange\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_listingId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setDomainListing\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_domainId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateDomainOnSale\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"_verifyDomainProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateVerifyDomainProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"userDomains\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifyDomainProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IVerifyDomainProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof[]\\\",\\\"name\\\":\\\"_proofs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"verifyDomains\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addExchange(address)\\\":{\\\"params\\\":{\\\"_exchange\\\":\\\"Address of the exchange contract\\\"}},\\\"initialize(address)\\\":{\\\"params\\\":{\\\"_verifyDomainProcessor\\\":\\\"Address of the VerifyDomainProcessor contract\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeDomainListing(bytes32)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain ID to update listing status for\\\"}},\\\"removeExchange(address)\\\":{\\\"params\\\":{\\\"_exchange\\\":\\\"Address of the exchange contract\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setDomainListing(bytes32,uint256)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain to set listed status for\\\",\\\"_listingId\\\":\\\"Listing Id of domain on calling exchange\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"updateDomainOnSale(bytes32,address)\\\":{\\\"params\\\":{\\\"_domainId\\\":\\\"Domain ID to update listing status for\\\",\\\"_newOwner\\\":\\\"New owner of the domain\\\"}},\\\"updateVerifyDomainProcessor(address)\\\":{\\\"params\\\":{\\\"_verifyDomainProcessor\\\":\\\"Address of the new VerifyDomainProcessor contract\\\"}},\\\"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"params\\\":{\\\"_proofs\\\":\\\"Array of domain ownership TLS proofs\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addExchange(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized. Exchange must not already exist in the registry. \\\"},\\\"initialize(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts. This can only be called once.\\\"},\\\"removeDomainListing(bytes32)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one that the domain is listed on. This removes the exchange and listingId from the domain. \\\"},\\\"removeExchange(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry. \\\"},\\\"setDomainListing(bytes32,uint256)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is listed on the calling exchange. This sets the exchange and listingId of the domain. \\\"},\\\"updateDomainOnSale(bytes32,address)\\\":{\\\"notice\\\":\\\"ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status from the domain. \\\"},\\\"updateVerifyDomainProcessor(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Update the verify domain processor\\\"},\\\"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"notice\\\":\\\"Verify domains and add them to the registry. If domain is transferred off-chain to another party  then they can re-verify the domain and claim ownership of the domain and previous ownership is removed. The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on the domain. Function reverts if: - Domain ownership TLS proofs are invalid \\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/VerifiedDomainRegistry.sol\\\":\\\"VerifiedDomainRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/VerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/lib/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { AddressArrayUtils } from \\\\\\\"./external/lib/AddressArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IDomainExchange } from \\\\\\\"./interfaces/IDomainExchange.sol\\\\\\\";\\\\nimport { IVerifiedDomainRegistry } from \\\\\\\"./interfaces/IVerifiedDomainRegistry.sol\\\\\\\";\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./interfaces/IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VerifiedDomainRegistry is IVerifiedDomainRegistry, Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using AddressArrayUtils for address[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event DomainVerified(\\\\n        bytes32 indexed domainId,\\\\n        address indexed owner,\\\\n        string domainName,\\\\n        uint256 expiryTime\\\\n    );\\\\n\\\\n    event DomainListed(\\\\n        bytes32 indexed domainId,\\\\n        address indexed exchange,\\\\n        uint256 indexed listingId\\\\n    );\\\\n\\\\n    event DomainListingRemoved(\\\\n        bytes32 indexed domainId,\\\\n        address indexed exchange\\\\n    );\\\\n\\\\n    event DomainTransferred(\\\\n        bytes32 indexed domainId,\\\\n        address indexed oldOwner,\\\\n        address indexed newOwner\\\\n    );\\\\n\\\\n\\\\n    event VerifyDomainProcessorUpdated(\\\\n        IVerifyDomainProcessor indexed newVerifyDomainProcessor\\\\n    );\\\\n\\\\n    event ExchangeAdded(address indexed exchange);\\\\n    event ExchangeRemoved(address indexed exchange);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyExchange() {\\\\n        require(isExchange[msg.sender], \\\\\\\"Caller must be exchange\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    modifier onlyInitialized() {\\\\n        require(isInitialized, \\\\\\\"Contract must be initialized\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n    IVerifyDomainProcessor public verifyDomainProcessor;\\\\n    address[] public exchanges;\\\\n    mapping(address=>bool) public isExchange;\\\\n\\\\n    bool public isInitialized;\\\\n\\\\n    mapping(bytes32 => Domain) public domains;\\\\n    mapping(address => bytes32[]) public userDomains;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    \\\\n    constructor() Ownable() {}\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Verify domains and add them to the registry. If domain is transferred off-chain to another party \\\\n     * then they can re-verify the domain and claim ownership of the domain and previous ownership is removed.\\\\n     * The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on\\\\n     * the domain. Function reverts if:\\\\n     * - Domain ownership TLS proofs are invalid\\\\n     * \\\\n     * @param _proofs           Array of domain ownership TLS proofs\\\\n     */\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external override\\\\n        onlyInitialized\\\\n    {\\\\n        IVerifyDomainProcessor.DomainRaw[] memory rawDomains = verifyDomainProcessor.verifyProofs(\\\\n            _proofs\\\\n        );\\\\n\\\\n        for (uint256 i = 0; i < rawDomains.length; i++) {\\\\n            IVerifyDomainProcessor.DomainRaw memory rawDomain = rawDomains[i];\\\\n            bytes32 domainId = getDomainId(rawDomain.name);\\\\n\\\\n            Domain storage domain = domains[domainId];\\\\n            if (domain.owner == address(0)) {\\\\n                // Case 1.1: Domain has no owner\\\\n                // Add caller as owner\\\\n                userDomains[msg.sender].push(domainId);\\\\n\\\\n                // Set domain details\\\\n                domains[domainId] = Domain({\\\\n                    owner: msg.sender,\\\\n                    name: rawDomain.name,\\\\n                    expiryTime: rawDomain.expiryTime,\\\\n                    exchange: address(0),\\\\n                    listingId: 0\\\\n                });\\\\n            } else {\\\\n                // Case 2: Domain has owner\\\\n                // Case 2.1: Caller is owner; skip\\\\n                if (domain.owner == msg.sender) {\\\\n                    // No updates to userDomains\\\\n\\\\n                    // Update domain details; Only expiry time can change\\\\n                    // Owner and domain name cannot change\\\\n                    // Exchange and listingId are kept as is\\\\n                    domain.expiryTime = rawDomain.expiryTime;\\\\n                }\\\\n                // Case 2.2: Caller is NOT owner\\\\n                if (domain.owner != msg.sender) {\\\\n                    // Remove ownership from old owner\\\\n                    userDomains[domain.owner].removeStorage(domainId);\\\\n\\\\n                    // Remove listing on exchange if it exists\\\\n                    if (domain.exchange != address(0)) {\\\\n                        IDomainExchange(domain.exchange).registryRemoveListing(domain.listingId);\\\\n                    }\\\\n\\\\n                    // Add domain to new owner\\\\n                    userDomains[msg.sender].push(domainId);\\\\n\\\\n                    // Set domain details except for domain name as it cannot change\\\\n                    domain.owner = msg.sender;\\\\n                    domain.expiryTime = rawDomain.expiryTime;\\\\n                    domain.exchange = address(0);\\\\n                    domain.listingId = 0;\\\\n                }\\\\n            }\\\\n\\\\n            emit DomainVerified(domainId, msg.sender, rawDomain.name, rawDomain.expiryTime);\\\\n        }\\\\n    }\\\\n\\\\n    // Todo: Add function for relinquishing ownership of domain\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is\\\\n     * listed on the calling exchange. This sets the exchange and listingId of the domain.\\\\n     * \\\\n     * @param _domainId     Domain to set listed status for\\\\n     * @param _listingId    Listing Id of domain on calling exchange\\\\n     */\\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId)\\\\n        external\\\\n        override\\\\n        onlyInitialized\\\\n        onlyExchange\\\\n    {\\\\n        Domain storage domain = domains[_domainId];\\\\n\\\\n        require(domain.owner != address(0), \\\\\\\"Domain must be verified\\\\\\\");\\\\n        require(domain.exchange == address(0), \\\\\\\"Domain already listed on another exchange\\\\\\\");\\\\n\\\\n        domain.exchange = msg.sender;\\\\n        domain.listingId = _listingId;\\\\n\\\\n        emit DomainListed(_domainId, msg.sender, _listingId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one\\\\n     * that the domain is listed on. This removes the exchange and listingId from the domain.\\\\n     * \\\\n     * @param _domainId            Domain ID to update listing status for\\\\n     */\\\\n    function removeDomainListing(bytes32 _domainId) external override onlyInitialized onlyExchange {\\\\n        Domain storage domain = domains[_domainId];\\\\n        require(domain.exchange == msg.sender, \\\\\\\"Domain not listed on calling exchange\\\\\\\");\\\\n\\\\n        _removeDomainListing(domain);\\\\n\\\\n        emit DomainListingRemoved(_domainId, msg.sender);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain\\\\n     * is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status\\\\n     * from the domain.\\\\n     * \\\\n     * @param _domainId            Domain ID to update listing status for\\\\n     * @param _newOwner            New owner of the domain\\\\n     */\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) \\\\n        external \\\\n        override \\\\n        onlyInitialized \\\\n        onlyExchange \\\\n    {\\\\n        Domain storage domain = domains[_domainId];\\\\n        require(domain.exchange == msg.sender, \\\\\\\"Domain not listed on calling exchange\\\\\\\");\\\\n\\\\n        _removeDomainListing(domain);\\\\n\\\\n        // Update ownership\\\\n        address oldOwner = domain.owner;\\\\n        domain.owner = _newOwner;\\\\n        userDomains[oldOwner].removeStorage(_domainId);\\\\n        userDomains[_newOwner].push(_domainId);\\\\n\\\\n        emit DomainTransferred(_domainId, oldOwner, _newOwner);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts.\\\\n     * This can only be called once.\\\\n     *\\\\n     * @param _verifyDomainProcessor    Address of the VerifyDomainProcessor contract\\\\n     */\\\\n    function initialize(\\\\n        IVerifyDomainProcessor _verifyDomainProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        verifyDomainProcessor = _verifyDomainProcessor;\\\\n\\\\n        isInitialized = true;\\\\n\\\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized.\\\\n     * Exchange must not already exist in the registry.\\\\n     * \\\\n     * @param _exchange     Address of the exchange contract\\\\n     */\\\\n    function addExchange(address _exchange) external onlyOwner onlyInitialized {\\\\n        require(!isExchange[_exchange], \\\\\\\"Duplicate exchange\\\\\\\");\\\\n\\\\n        isExchange[_exchange] = true;\\\\n        exchanges.push(_exchange);\\\\n\\\\n        emit ExchangeAdded(_exchange);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry.\\\\n     * \\\\n     * @param _exchange     Address of the exchange contract\\\\n     */\\\\n    function removeExchange(address _exchange) external onlyOwner onlyInitialized {\\\\n        require(isExchange[_exchange], \\\\\\\"Exchange does not exist\\\\\\\");\\\\n\\\\n        isExchange[_exchange] = false;\\\\n        exchanges.removeStorage(_exchange);\\\\n\\\\n        emit ExchangeRemoved(_exchange);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Update the verify domain processor\\\\n     *\\\\n     * @param _verifyDomainProcessor    Address of the new VerifyDomainProcessor contract\\\\n     */\\\\n    function updateVerifyDomainProcessor(IVerifyDomainProcessor _verifyDomainProcessor) external onlyOwner {\\\\n        require(address(_verifyDomainProcessor) != address(0), \\\\\\\"Invalid address\\\\\\\");\\\\n\\\\n        verifyDomainProcessor = _verifyDomainProcessor;\\\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function getDomainId(string memory _domainName) public pure override returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(_domainName));\\\\n    }\\\\n\\\\n    function getDomainOwner(bytes32 _domainId) external view override returns (address) {        \\\\n        return domains[_domainId].owner;\\\\n    }\\\\n\\\\n    function getUserDomains(address _user) external view returns (DomainWithId[] memory domainInfo) {\\\\n        bytes32[] memory domainIds = userDomains[_user];\\\\n        \\\\n        domainInfo = new DomainWithId[](domainIds.length);\\\\n        for (uint256 i = 0; i < domainIds.length; i++) {\\\\n            bytes32 domainId = domainIds[i];\\\\n            domainInfo[i] = DomainWithId({\\\\n                domainId: domainId,\\\\n                domain: domains[domainId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDomain(bytes32 _domainId) external view override returns (DomainWithId memory domainInfo) {\\\\n        return DomainWithId({\\\\n            domainId: _domainId,\\\\n            domain: domains[_domainId]\\\\n        });\\\\n    }\\\\n\\\\n    function getDomains(bytes32[] memory _domains) external view returns (DomainWithId[] memory domainInfo) {\\\\n        domainInfo = new DomainWithId[](_domains.length);\\\\n        for (uint256 i = 0; i < _domains.length; i++) {\\\\n            bytes32 domainId = _domains[i];\\\\n            domainInfo[i] = DomainWithId({\\\\n                domainId: domainId,\\\\n                domain: domains[domainId]\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getExchanges() external view returns (address[] memory) {\\\\n        return exchanges;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _removeDomainListing(Domain storage _domain) internal {\\\\n        delete _domain.exchange;\\\\n        delete _domain.listingId;\\\\n    }\\\\n}\\\",\\\"keccak256\\\":\\\"0x8162cd31c4aa35caa77d08e3115681bbe33e842a9640b0106816e2ca09137ea8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IDomainExchange.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ninterface IDomainExchange {\\\\n    function registryRemoveListing(uint256 _listingId) external;\\\\n}\\\",\\\"keccak256\\\":\\\"0xe9deda400c359c1b42d10c518dc1f01605ea3a466e1be110f1f7c9be4af8253b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifiedDomainRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifiedDomainRegistry {\\\\n\\\\n    struct Domain {\\\\n        address owner;\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n        address exchange;\\\\n        uint256 listingId;\\\\n    }\\\\n\\\\n    struct DomainWithId {\\\\n        bytes32 domainId;\\\\n        Domain domain;\\\\n    }\\\\n\\\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\\\n    \\\\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\\\n    \\\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\\\n    function removeDomainListing(bytes32 _domainId) external;\\\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xcc45329e6720b7b9df3c67985b16f8d778528f756c045ba6c2196831b40afe92\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x6080604052346200002657620000146200002b565b6040516129b06200012682396129b090f35b600080fd5b6200003562000037565b565b6200003533620000c3565b62000054905b6001600160a01b031690565b90565b62000054905462000042565b620000549062000048906001600160a01b031682565b620000549062000063565b620000549062000079565b90620000a362000054620000bf9262000084565b82546001600160a01b0319166001600160a01b03919091161790565b9055565b620000cf600062000057565b90620000dd8160006200008f565b620001146200010d7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09362000084565b9162000084565b916200011f60405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c806236d2d3146101815780630183196b1461017c57806311d4c3a2146101775780631a242547146101725780631e2e3a6b1461016d57806327d335a8146101685780632839fc29146101635780632b8a80021461015e578063392e53cd146101595780635e8441d3146101545780636e74da681461014f578063715018a61461014a5780637f200269146101455780638da5cb5b146101405780638e0be3691461013b5780639f4cb8f0146101365780639f6eb88c14610131578063a9c56e911461012c578063aa10ce2214610127578063b3533dfe14610122578063c4d66de81461011d578063c722f177146101185763f2fde38b036101a757610e91565b610e60565b610c98565b610c71565b610c34565b610c1c565b610951565b610891565b610817565b6107f2565b6107da565b610792565b61077a565b61074f565b61064d565b610628565b6105ea565b61054c565b610502565b610460565b61041a565b6103cc565b610242565b6001600160a01b031690565b90565b6001600160a01b0381165b036101a757565b600080fd5b905035906101b982610195565b565b906020828203126101a757610192916101ac565b61019290610186906001600160a01b031682565b610192906101cf565b610192906101e3565b906101ff906101ec565b600052602052604060002090565b610192916008021c5b60ff1690565b90610192915461020d565b610192906102396003916000926101f5565b61021c565b9052565b346101a75761026f61025d6102583660046101bb565b610227565b60405191829182901515815260200190565b0390f35b60005b8381106102865750506000910152565b8181015183820152602001610276565b6102b76102c06020936102ca936102ab815190565b80835293849260200190565b95869101610273565b601f01601f191690565b0190565b80516001600160a01b0316825290610192906080806102fc60a0840160208701518582036020870152610296565b9461030c60408201516040860152565b6060818101516001600160a01b0316908501520151910152565b80518252610192916040810191602001519060208184039101526102ce565b9061019291610326565b9061036561035b835190565b8083529160200190565b90816103776020830284019460200190565b926000915b83831061038b57505050505090565b909192939460206103ae6103a783856001950387528951610345565b9760200190565b930193019193929061037c565b60208082526101929291019061034f565b346101a75761026f6103e76103e23660046101bb565b612456565b604051918291826103bb565b806101a0565b905035906101b9826103f3565b906020828203126101a757610192916103f9565b346101a75761026f610435610430366004610406565b612258565b604051918291826001600160a01b03909116815260200190565b602080825261019292910190610326565b346101a75761026f61047b610476366004610406565b612507565b6040519182918261044f565b60009103126101a757565b906104b26104ab6104a1845190565b8084529260200190565b9260200190565b9060005b8181106104c35750505090565b9091926104e96104e260019286516001600160a01b0316815260200190565b9460200190565b9291016104b6565b602080825261019292910190610492565b346101a757610512366004610487565b61026f61051d6125f6565b604051918291826104f1565b91906040838203126101a7576101929061054381856103f9565b936020016103f9565b346101a75761056561055f366004610529565b90611cac565b604051005b634e487b7160e01b600052603260045260246000fd5b80548210156105a35761059a600191600052602060002090565b91020190600090565b61056a565b610192916008021c610186565b9061019291546105a8565b600260006105cc825490565b8310156105e75750610192916105e191610580565b906105b5565b80fd5b346101a75761026f610435610600366004610406565b6105c0565b91906040838203126101a7576101929061061f81856103f9565b936020016101ac565b346101a75761056561063b366004610605565b90611e7e565b6101926000600461021c565b346101a75761065d366004610487565b61026f61025d610641565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761069f57604052565b610668565b906101b96106b160405190565b928361067e565b6001600160401b03811161069f57602090601f01601f19160190565b90826000939282370152565b909291926106f56106f0826106b8565b6106a4565b938185526020850190828401116101a7576101b9926106d4565b9080601f830112156101a757816020610192933591016106e0565b906020828203126101a75781356001600160401b0381116101a757610192920161070f565b346101a75761026f61076a61076536600461072a565b61221a565b6040519182918290815260200190565b346101a75761056561078d366004610406565b611da6565b346101a7576107a2366004610487565b610565610ee1565b6001600160a01b0381166101a0565b905035906101b9826107aa565b906020828203126101a757610192916107b9565b346101a7576105656107ed3660046107c6565b6121e7565b346101a757610802366004610487565b61026f6104356000546001600160a01b031690565b346101a75761056561082a3660046101bb565b612161565b91906040838203126101a7576101929061054381856101ac565b610192916008021c81565b906101929154610849565b61086d6006916000926101f5565b90610876825490565b8310156105e757506101929161088b91610580565b90610854565b346101a75761026f61076a6108a736600461082f565b9061085f565b6001600160401b03811161069f5760208091020190565b909291926108d46106f0826108ad565b93818552602080860192028301928184116101a757915b8383106108f85750505050565b6020809161090684866103f9565b8152019201916108eb565b9080601f830112156101a757816020610192933591016108c4565b906020828203126101a75781356001600160401b0381116101a7576101929201610911565b346101a75761026f6103e761096736600461092c565b612531565b9190916060818403126101a75761098360606106a4565b9281356001600160401b0381116101a757816109a091840161070f565b845260208201356001600160401b0381116101a757816109c191840161070f565b602085015260408201356001600160401b0381116101a7576109e3920161070f565b6040830152565b63ffffffff81166101a0565b905035906101b9826109ea565b9190916080818403126101a757610a5c610a1d60806106a4565b936000610a2a82856103f9565b908601526020610a3c828286016101ac565b908601526040610a4e828286016109f6565b9086015260608093016109f6565b90830152565b929190610a716106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610a97575050505050565b81356001600160401b0381116101a757602091610ab7878493870161070f565b815201910190610a89565b9080601f830112156101a75781602061019293359101610a62565b91909160a0818403126101a757610af460406106a4565b926000610b018284610a03565b9085015260808201356001600160401b0381116101a757610b229201610ac2565b6020830152565b9190916040818403126101a757610b4060406106a4565b9281356001600160401b0381116101a75781610b5d91840161096c565b845260208201356001600160401b0381116101a757610b229201610add565b929190610b8b6106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610bb1575050505050565b81356001600160401b0381116101a757602091610bd18784938701610b29565b815201910190610ba3565b9080601f830112156101a75781602061019293359101610b7c565b906020828203126101a75781356001600160401b0381116101a7576101929201610bdc565b346101a757610565610c2f366004610bf7565b611a96565b346101a757610565610c473660046101bb565b61208f565b610192600060016105b5565b61023e906101ec565b6020810192916101b99190610c58565b346101a757610c81366004610487565b61026f610c8c610c4c565b60405191829182610c61565b346101a757610565610cab3660046107c6565b611f65565b906101ff565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610cec575b6020831014610ce757565b610cb6565b91607f1691610cdc565b80546000939291610d13610d0983610ccc565b8085529360200190565b9160018116908115610d655750600114610d2c57505050565b610d3f9192939450600052602060002090565b916000925b818410610d515750500190565b805484840152602090930192600101610d44565b92949550505060ff1916825215156020020190565b9061019291610cf6565b906101b9610d9e92610d9560405190565b93848092610d7a565b038361067e565b6101929081565b6101929054610da5565b610dc1906005610cb0565b80546001600160a01b031691610dd960018301610d84565b91610de660028201610dac565b916101926004610e0060038501546001600160a01b031690565b9301610dac565b906101b994610e4c610e44610e5c936080969a99979a610e3760a088019260008901906001600160a01b03169052565b8682036020880152610296565b986040850152565b6001600160a01b03166060830152565b0152565b346101a75761026f610e7b610e76366004610406565b610db6565b91610e8895939560405190565b95869586610e07565b346101a757610565610ea43660046101bb565b611002565b610eb1610f3d565b6101b9610ecf565b6101866101926101929290565b61019290610eb9565b6101b9610edc6000610ec6565b61103b565b6101b9610ea9565b15610ef057565b60405162461bcd60e51b815280610f39600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6101b9610f526000546001600160a01b031690565b610f6b610f5e33610186565b916001600160a01b031690565b14610ee9565b6101b990610f7d610f3d565b610fdd565b15610f8957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6101b990610edc610ff16101866000610ec6565b6001600160a01b0383161415610f82565b6101b990610f71565b906001600160a01b03905b9181191691161790565b90611030610192611037926101ec565b825461100b565b9055565b6000546001600160a01b031690611053816000611020565b6110866110807f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101ec565b916101ec565b9161109060405190565b600090a3565b61019290610216565b6101929054611096565b156110b057565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b6101b99061110b611106600461109f565b6110a9565b6116e2565b909291926111206106f0826106b8565b938185526020850190828401116101a7576101b992610273565b9080601f830112156101a757815161019292602001611110565b905051906101b9826103f3565b9190916040818403126101a75761117860406106a4565b815190936001600160401b0382116101a75761119981610a5c93850161113a565b85526020928301611154565b9291906111b46106f0826108ad565b93818552602080860192028101918383116101a75781905b8382106111da575050505050565b81516001600160401b0381116101a7576020916111fa8784938701611161565b8152019101906111cc565b9080601f830112156101a7578151610192926020016111a5565b906020828203126101a75781516001600160401b0381116101a7576101929201611205565b8051606080845261019293916040916112759161126391850190610296565b60208501518482036020860152610296565b920151906040818403910152610296565b805182526020808201516001600160a01b0316908301526101b99190606090819060408181015163ffffffff1690850152015163ffffffff16910152565b9061019291610296565b906112da61035b835190565b90816112ec6020830284019460200190565b926000915b83831061130057505050505090565b9091929394602061131c6103a7838560019503875289516112c4565b93019301919392906112f1565b61019291602060a082019261134660008201516000850190611286565b01519060808184039101526112ce565b8051604080845261019293916020916113729190840190611244565b920151906020818403910152611329565b9061019291611356565b9061139961035b835190565b90816113ab6020830284019460200190565b926000915b8383106113bf57505050505090565b909192939460206113db6103a783856001950387528951611383565b93019301919392906113b0565b60208082526101929291019061138d565b6040513d6000823e3d90fd5b6101926101926101929290565b634e487b7160e01b600052601160045260246000fd5b60001981146114375760010190565b611412565b90611445825190565b8110156105a3576020809102010190565b9060001990611016565b9061147061019261103792611405565b8254611456565b9160001960089290920291821b911b611016565b919061149a6101926110379390565b908354611477565b90815491600160401b83101561069f57826114c59160016101b995018155610580565b9061148b565b61019260a06106a4565b919061149a61019261103793611405565b6101b9916000916114d5565b8181106114fd575050565b8061150b60006001936114e6565b016114f2565b9190601f811161152057505050565b6115326101b993600052602060002090565b906020601f840181900483019310611554575b6020601f9091010401906114f2565b9091508190611545565b90611567815190565b906001600160401b03821161069f5761158a826115848554610ccc565b85611511565b602090601f83116001146115c5576110379291600091836115ba575b5050600019600883021c1916906002021790565b0151905038806115a6565b601f198316916115da85600052602060002090565b9260005b818110611618575091600293918560019694106115ff575b50505002019055565b01516000196008601f8516021c191690553880806115f6565b919360206001819287870151815501950192016115de565b906101b99161155e565b6101b9919061168e906080906004906116648161165e87516001600160a01b031690565b90611020565b61167c60018201611676602088015190565b90611630565b6116946002820161168e604088015190565b90611460565b6116af6003820161165e60608801516001600160a01b031690565b0192015190565b906101b99161163a565b929160206116dd6101b99360408701908782036000890152610296565b940152565b600061172c916117026116fd6001546001600160a01b031690565b6101ec565b61172183637de24fcf61171460405190565b9687958694859360e01b90565b8352600483016113e8565b03925af1908115611a5057600091611a75575b5061174a6000611405565b611755610192835190565b811015611a7157611766818361143c565b5190611775600083015161221a565b916005926117866101928286610cb0565b9361179885546001600160a01b031690565b946117a36000610ec6565b956117b66001600160a01b038816610f5e565b036118b657506118b19461184b83611850936118326006946117e5846117e061019233809a6101f5565b6114a2565b88516118229061181b6117f960208d015190565b916118146118056114cb565b6001600160a01b03909b168b52565b60208a0152565b6040880152565b6001600160a01b03166060860152565b61184661183f6000611405565b6080860152565b610cb0565b6116b6565b33906118626020600085015194015190565b61189361188d7f04c47544b62d97fc6d744e7cc21ed4a24af06a46427efcfd15a0db261dbb27d69390565b936101ec565b936118a96118a060405190565b928392836116c0565b0390a3611428565b61174a565b90506118c981546001600160a01b031690565b6118d233610f5e565b14611a55575b80546001600160a01b03166118ec33610f5e565b036118fd575b506118b19350611850565b6119248261191f61019261191885546001600160a01b031690565b60066101f5565b6128ab565b60038101546001600160a01b03166119446001600160a01b038716610f5e565b036119aa575b6119a4906119916118b196611967856117e06101923360066101f5565b6119713384611020565b61198861197f602088015190565b60028501611460565b60038301611020565b600461199d6000611405565b9101611460565b386118f2565b6119c46116fd6116fd60038401546001600160a01b031690565b90631756c30e6119d660048301610dac565b833b156101a757611a0c936119fe600080946119f160405190565b9788958694859360e01b90565b835260048301526024820190565b03925af18015611a50576118b1966119a49361199192611a32575b50965050905061194a565b611a4a906000611a42818361067e565b810190610487565b38611a27565b6113f9565b611a6c611a63602085015190565b60028301611460565b6118d8565b5050565b611a90913d8091833e611a88818361067e565b81019061121f565b3861173f565b6101b9906110f5565b906101b991611ab1611106600461109f565b611b02565b15611abd57565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206d7573742062652065786368616e67650000000000000000006044820152606490fd5b6101b99190611b22611b1d611b183360036101f5565b61109f565b611ab6565b611bd1565b15611b2e57565b60405162461bcd60e51b815260206004820152601760248201527f446f6d61696e206d7573742062652076657269666965640000000000000000006044820152606490fd5b15611b7a57565b60405162461bcd60e51b815260206004820152602960248201527f446f6d61696e20616c7265616479206c6973746564206f6e20616e6f746865726044820152682065786368616e676560b81b6064820152608490fd5b90611be0610192836005610cb0565b611c62826004611bf784546001600160a01b031690565b93611c1f611c056000610ec6565b95611c186001600160a01b038816610f5e565b1415611b27565b611c516003820195611c4b610f5e611c3e89546001600160a01b031690565b926001600160a01b031690565b14611b73565b611c5c338096611020565b01611460565b611c9c611c96611c907f94ec80928933a86cc2847706c09c43fa58866b537c8fce8eef172af4036af5209590565b926101ec565b92611405565b92611ca660405190565b600090a4565b906101b991611a9f565b6101b990611cc7611106600461109f565b6101b990611cdc611b1d611b183360036101f5565b611d3b565b15611ce857565b60405162461bcd60e51b815260206004820152602560248201527f446f6d61696e206e6f74206c6973746564206f6e2063616c6c696e672065786360448201526468616e676560d81b6064820152608490fd5b611d49610192826005610cb0565b611d7b611d6060038301546001600160a01b031690565b339290611d7690611d7085610f5e565b14611ce1565b61260c565b6110866110807ff27bc8e4c954bf9eead2d99629d460313da75ee401666af4d3cb1eb821ddb1f69390565b6101b990611cb6565b906101b991611dc1611106600461109f565b6101b99190611dd7611b1d611b183360036101f5565b906000611de8610192846005610cb0565b611e08611dff60038301546001600160a01b031690565b611d7033610f5e565b611e118161260c565b01611e2d82611e2783546001600160a01b031690565b92611020565b611e50836117e0610192856006611e4b8561191f6101928a856101f5565b6101f5565b611c9c611c90611c907f3275c4afb1638bd20394301d401c788e5091157ddca135fd84970904da6541af9590565b906101b991611daf565b6101b990611e94610f3d565b611efb565b15611ea057565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b9060ff90611016565b90611ef461019261103792151590565b8254611edb565b611f14611f0f611f0b600461109f565b1590565b611e99565b611f1f816001611020565b611f2b60016004611ee4565b611f557f9b7c520e9e227a011fa79baf4082565a9fd780e2bcb20889c0fe36eba4b5c8db916101ec565b90611f5f60405190565b600090a2565b6101b990611e88565b6101b990611f7a610f3d565b6101b990611f8b611106600461109f565b61202c565b15611f9757565b60405162461bcd60e51b81526020600482015260126024820152714475706c69636174652065786368616e676560701b6044820152606490fd5b916001600160a01b0360089290920291821b911b611016565b9190611ffb610192611037936101ec565b908354611fd1565b90815491600160401b83101561069f57826120269160016101b995018155610580565b90611fea565b61205a6003612049612044611f0b611b1886856101f5565b611f90565b612055836001926101f5565b611ee4565b612065816002612003565b611f557f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e1916101ec565b6101b990611f6e565b6101b9906120a4610f3d565b6101b9906120b5611106600461109f565b612106565b156120c157565b60405162461bcd60e51b815260206004820152601760248201527f45786368616e676520646f6573206e6f742065786973740000000000000000006044820152606490fd5b61212c600361212061211b611b1885846101f5565b6120ba565b612055836000926101f5565b6121378160026126e4565b611f557ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb916101ec565b6101b990612098565b6101b990612176610f3d565b6121b9565b1561218257565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b6121dc6121c5826101ec565b6121d5610f5e6101866000610ec6565b141561217b565b611f2b816001611020565b6101b99061216a565b6102ca61220892602092612202815190565b94859290565b93849101610273565b610192916121f0565b61224261222660405190565b8092612236602083019182612211565b9081038252038261067e565b61225461224d825190565b9160200190565b2090565b600061227161019292612269600090565b506005610cb0565b01546001600160a01b031690565b9061229a61228e6104a1845490565b92600052602060002090565b9060005b8181106122ab5750505090565b9091926122cf6122c86001926122c087610dac565b815260200190565b9460010190565b92910161229e565b906101929161227f565b906101b9610d9e926122f260405190565b938480926122d7565b610192906122e1565b906123116106f0836108ad565b918252565b61019260406106a4565b6123286114cb565b906000825260208080808086016060815201600081520160008152016000905250565b905250565b610192612320565b612360612316565b9060008252602080830161234b612350565b610192612358565b60005b82811061238957505050565b602090612394612372565b818401520161237d565b906101b96123b46123ae84612304565b936108ad565b601f19016020840161237a565b906101b961244660046123d26114cb565b946123f46123e782546001600160a01b031690565b6001600160a01b03168752565b61240a61240360018301610d84565b6020880152565b61241961181b60028301610dac565b61244061243060038301546001600160a01b031690565b6001600160a01b03166060880152565b01610dac565b6080840152565b610192906123c1565b61246d61247291612465606090565b5060066101f5565b6122fb565b9061248361247e835190565b61239e565b916000908361249183611405565b61249c610192845190565b81101561250057806124b86124b46124fb938661143c565b5190565b6124e0610b226124c9836005610cb0565b6124db6124d4612316565b948a860152565b61244d565b6124ea828961143c565b526124f5818861143c565b50611428565b612491565b5093505050565b61250f612372565b50610192610b22612521836005610cb0565b6124db61252c612316565b948552565b9061253d61247e835190565b916000908361254b83611405565b612556610192845190565b81101561250057806124b86124b461256e938661143c565b61254b565b9061258261228e6104a1845490565b9060005b8181106125935750505090565b9091926125c16122c86001926125b087546001600160a01b031690565b6001600160a01b0316815260200190565b929101612586565b9061019291612573565b906101b9610d9e926125e460405190565b938480926125c9565b610192906125d3565b61019260026125ed565b6101b991600091611fea565b600060046101b9926126218360038301612600565b016114e6565b9061263661228e6104a1845490565b9060005b8181106126475750505090565b9091926126646122c86001926125b087546001600160a01b031690565b92910161263a565b9061019291612627565b906101b9610d9e9261268760405190565b9384809261266c565b61019290612676565b9190820391821161143757565b634e487b7160e01b600052603160045260246000fd5b805480156126df5760001901906126dc6126d68383610580565b90612600565b55565b6126a6565b6126f9612700926126f483612690565b61279d565b9092901590565b156127425760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612761612751835490565b61275b6001611405565b90612699565b90818103612771575b50506126bc565b6120266127846105e161278b9486610580565b9184610580565b388061276a565b610192600019611405565b919082519260006127ad81611405565b855b811015612804576127d06127c3828561143c565b516001600160a01b031690565b6127e26001600160a01b038616610f5e565b146127fa576127f36127af91611428565b90506127ad565b9450505050600190565b5093505050612811612792565b9190565b9061282461228e6104a1845490565b9060005b8181106128355750505090565b90919261284a6122c86001926122c087610dac565b929101612828565b9061019291612815565b906101b9610d9e9261286d60405190565b93848092612852565b6101929061285c565b6101b99160009161148b565b805480156126df5760001901906126dc6128a58383610580565b9061287f565b6126f96128c0926128bb83612876565b61293b565b156129025760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612911612751835490565b90818103612921575b505061288b565b6114c561278461088b6129349486610580565b388061291a565b9190825192600061294b81611405565b855b811015612804576129616124b4828561143c565b84146127fa5761297361294d91611428565b905061294b56fea2646970667358221220a6032f571ac9fa51b48f09a32827ab67ff828148f9996dd432fe8f26a821634c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c806236d2d3146101815780630183196b1461017c57806311d4c3a2146101775780631a242547146101725780631e2e3a6b1461016d57806327d335a8146101685780632839fc29146101635780632b8a80021461015e578063392e53cd146101595780635e8441d3146101545780636e74da681461014f578063715018a61461014a5780637f200269146101455780638da5cb5b146101405780638e0be3691461013b5780639f4cb8f0146101365780639f6eb88c14610131578063a9c56e911461012c578063aa10ce2214610127578063b3533dfe14610122578063c4d66de81461011d578063c722f177146101185763f2fde38b036101a757610e91565b610e60565b610c98565b610c71565b610c34565b610c1c565b610951565b610891565b610817565b6107f2565b6107da565b610792565b61077a565b61074f565b61064d565b610628565b6105ea565b61054c565b610502565b610460565b61041a565b6103cc565b610242565b6001600160a01b031690565b90565b6001600160a01b0381165b036101a757565b600080fd5b905035906101b982610195565b565b906020828203126101a757610192916101ac565b61019290610186906001600160a01b031682565b610192906101cf565b610192906101e3565b906101ff906101ec565b600052602052604060002090565b610192916008021c5b60ff1690565b90610192915461020d565b610192906102396003916000926101f5565b61021c565b9052565b346101a75761026f61025d6102583660046101bb565b610227565b60405191829182901515815260200190565b0390f35b60005b8381106102865750506000910152565b8181015183820152602001610276565b6102b76102c06020936102ca936102ab815190565b80835293849260200190565b95869101610273565b601f01601f191690565b0190565b80516001600160a01b0316825290610192906080806102fc60a0840160208701518582036020870152610296565b9461030c60408201516040860152565b6060818101516001600160a01b0316908501520151910152565b80518252610192916040810191602001519060208184039101526102ce565b9061019291610326565b9061036561035b835190565b8083529160200190565b90816103776020830284019460200190565b926000915b83831061038b57505050505090565b909192939460206103ae6103a783856001950387528951610345565b9760200190565b930193019193929061037c565b60208082526101929291019061034f565b346101a75761026f6103e76103e23660046101bb565b612456565b604051918291826103bb565b806101a0565b905035906101b9826103f3565b906020828203126101a757610192916103f9565b346101a75761026f610435610430366004610406565b612258565b604051918291826001600160a01b03909116815260200190565b602080825261019292910190610326565b346101a75761026f61047b610476366004610406565b612507565b6040519182918261044f565b60009103126101a757565b906104b26104ab6104a1845190565b8084529260200190565b9260200190565b9060005b8181106104c35750505090565b9091926104e96104e260019286516001600160a01b0316815260200190565b9460200190565b9291016104b6565b602080825261019292910190610492565b346101a757610512366004610487565b61026f61051d6125f6565b604051918291826104f1565b91906040838203126101a7576101929061054381856103f9565b936020016103f9565b346101a75761056561055f366004610529565b90611cac565b604051005b634e487b7160e01b600052603260045260246000fd5b80548210156105a35761059a600191600052602060002090565b91020190600090565b61056a565b610192916008021c610186565b9061019291546105a8565b600260006105cc825490565b8310156105e75750610192916105e191610580565b906105b5565b80fd5b346101a75761026f610435610600366004610406565b6105c0565b91906040838203126101a7576101929061061f81856103f9565b936020016101ac565b346101a75761056561063b366004610605565b90611e7e565b6101926000600461021c565b346101a75761065d366004610487565b61026f61025d610641565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761069f57604052565b610668565b906101b96106b160405190565b928361067e565b6001600160401b03811161069f57602090601f01601f19160190565b90826000939282370152565b909291926106f56106f0826106b8565b6106a4565b938185526020850190828401116101a7576101b9926106d4565b9080601f830112156101a757816020610192933591016106e0565b906020828203126101a75781356001600160401b0381116101a757610192920161070f565b346101a75761026f61076a61076536600461072a565b61221a565b6040519182918290815260200190565b346101a75761056561078d366004610406565b611da6565b346101a7576107a2366004610487565b610565610ee1565b6001600160a01b0381166101a0565b905035906101b9826107aa565b906020828203126101a757610192916107b9565b346101a7576105656107ed3660046107c6565b6121e7565b346101a757610802366004610487565b61026f6104356000546001600160a01b031690565b346101a75761056561082a3660046101bb565b612161565b91906040838203126101a7576101929061054381856101ac565b610192916008021c81565b906101929154610849565b61086d6006916000926101f5565b90610876825490565b8310156105e757506101929161088b91610580565b90610854565b346101a75761026f61076a6108a736600461082f565b9061085f565b6001600160401b03811161069f5760208091020190565b909291926108d46106f0826108ad565b93818552602080860192028301928184116101a757915b8383106108f85750505050565b6020809161090684866103f9565b8152019201916108eb565b9080601f830112156101a757816020610192933591016108c4565b906020828203126101a75781356001600160401b0381116101a7576101929201610911565b346101a75761026f6103e761096736600461092c565b612531565b9190916060818403126101a75761098360606106a4565b9281356001600160401b0381116101a757816109a091840161070f565b845260208201356001600160401b0381116101a757816109c191840161070f565b602085015260408201356001600160401b0381116101a7576109e3920161070f565b6040830152565b63ffffffff81166101a0565b905035906101b9826109ea565b9190916080818403126101a757610a5c610a1d60806106a4565b936000610a2a82856103f9565b908601526020610a3c828286016101ac565b908601526040610a4e828286016109f6565b9086015260608093016109f6565b90830152565b929190610a716106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610a97575050505050565b81356001600160401b0381116101a757602091610ab7878493870161070f565b815201910190610a89565b9080601f830112156101a75781602061019293359101610a62565b91909160a0818403126101a757610af460406106a4565b926000610b018284610a03565b9085015260808201356001600160401b0381116101a757610b229201610ac2565b6020830152565b9190916040818403126101a757610b4060406106a4565b9281356001600160401b0381116101a75781610b5d91840161096c565b845260208201356001600160401b0381116101a757610b229201610add565b929190610b8b6106f0826108ad565b93818552602080860192028101918383116101a75781905b838210610bb1575050505050565b81356001600160401b0381116101a757602091610bd18784938701610b29565b815201910190610ba3565b9080601f830112156101a75781602061019293359101610b7c565b906020828203126101a75781356001600160401b0381116101a7576101929201610bdc565b346101a757610565610c2f366004610bf7565b611a96565b346101a757610565610c473660046101bb565b61208f565b610192600060016105b5565b61023e906101ec565b6020810192916101b99190610c58565b346101a757610c81366004610487565b61026f610c8c610c4c565b60405191829182610c61565b346101a757610565610cab3660046107c6565b611f65565b906101ff565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610cec575b6020831014610ce757565b610cb6565b91607f1691610cdc565b80546000939291610d13610d0983610ccc565b8085529360200190565b9160018116908115610d655750600114610d2c57505050565b610d3f9192939450600052602060002090565b916000925b818410610d515750500190565b805484840152602090930192600101610d44565b92949550505060ff1916825215156020020190565b9061019291610cf6565b906101b9610d9e92610d9560405190565b93848092610d7a565b038361067e565b6101929081565b6101929054610da5565b610dc1906005610cb0565b80546001600160a01b031691610dd960018301610d84565b91610de660028201610dac565b916101926004610e0060038501546001600160a01b031690565b9301610dac565b906101b994610e4c610e44610e5c936080969a99979a610e3760a088019260008901906001600160a01b03169052565b8682036020880152610296565b986040850152565b6001600160a01b03166060830152565b0152565b346101a75761026f610e7b610e76366004610406565b610db6565b91610e8895939560405190565b95869586610e07565b346101a757610565610ea43660046101bb565b611002565b610eb1610f3d565b6101b9610ecf565b6101866101926101929290565b61019290610eb9565b6101b9610edc6000610ec6565b61103b565b6101b9610ea9565b15610ef057565b60405162461bcd60e51b815280610f39600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b6101b9610f526000546001600160a01b031690565b610f6b610f5e33610186565b916001600160a01b031690565b14610ee9565b6101b990610f7d610f3d565b610fdd565b15610f8957565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b6101b990610edc610ff16101866000610ec6565b6001600160a01b0383161415610f82565b6101b990610f71565b906001600160a01b03905b9181191691161790565b90611030610192611037926101ec565b825461100b565b9055565b6000546001600160a01b031690611053816000611020565b6110866110807f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936101ec565b916101ec565b9161109060405190565b600090a3565b61019290610216565b6101929054611096565b156110b057565b60405162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206d75737420626520696e697469616c697a6564000000006044820152606490fd5b6101b99061110b611106600461109f565b6110a9565b6116e2565b909291926111206106f0826106b8565b938185526020850190828401116101a7576101b992610273565b9080601f830112156101a757815161019292602001611110565b905051906101b9826103f3565b9190916040818403126101a75761117860406106a4565b815190936001600160401b0382116101a75761119981610a5c93850161113a565b85526020928301611154565b9291906111b46106f0826108ad565b93818552602080860192028101918383116101a75781905b8382106111da575050505050565b81516001600160401b0381116101a7576020916111fa8784938701611161565b8152019101906111cc565b9080601f830112156101a7578151610192926020016111a5565b906020828203126101a75781516001600160401b0381116101a7576101929201611205565b8051606080845261019293916040916112759161126391850190610296565b60208501518482036020860152610296565b920151906040818403910152610296565b805182526020808201516001600160a01b0316908301526101b99190606090819060408181015163ffffffff1690850152015163ffffffff16910152565b9061019291610296565b906112da61035b835190565b90816112ec6020830284019460200190565b926000915b83831061130057505050505090565b9091929394602061131c6103a7838560019503875289516112c4565b93019301919392906112f1565b61019291602060a082019261134660008201516000850190611286565b01519060808184039101526112ce565b8051604080845261019293916020916113729190840190611244565b920151906020818403910152611329565b9061019291611356565b9061139961035b835190565b90816113ab6020830284019460200190565b926000915b8383106113bf57505050505090565b909192939460206113db6103a783856001950387528951611383565b93019301919392906113b0565b60208082526101929291019061138d565b6040513d6000823e3d90fd5b6101926101926101929290565b634e487b7160e01b600052601160045260246000fd5b60001981146114375760010190565b611412565b90611445825190565b8110156105a3576020809102010190565b9060001990611016565b9061147061019261103792611405565b8254611456565b9160001960089290920291821b911b611016565b919061149a6101926110379390565b908354611477565b90815491600160401b83101561069f57826114c59160016101b995018155610580565b9061148b565b61019260a06106a4565b919061149a61019261103793611405565b6101b9916000916114d5565b8181106114fd575050565b8061150b60006001936114e6565b016114f2565b9190601f811161152057505050565b6115326101b993600052602060002090565b906020601f840181900483019310611554575b6020601f9091010401906114f2565b9091508190611545565b90611567815190565b906001600160401b03821161069f5761158a826115848554610ccc565b85611511565b602090601f83116001146115c5576110379291600091836115ba575b5050600019600883021c1916906002021790565b0151905038806115a6565b601f198316916115da85600052602060002090565b9260005b818110611618575091600293918560019694106115ff575b50505002019055565b01516000196008601f8516021c191690553880806115f6565b919360206001819287870151815501950192016115de565b906101b99161155e565b6101b9919061168e906080906004906116648161165e87516001600160a01b031690565b90611020565b61167c60018201611676602088015190565b90611630565b6116946002820161168e604088015190565b90611460565b6116af6003820161165e60608801516001600160a01b031690565b0192015190565b906101b99161163a565b929160206116dd6101b99360408701908782036000890152610296565b940152565b600061172c916117026116fd6001546001600160a01b031690565b6101ec565b61172183637de24fcf61171460405190565b9687958694859360e01b90565b8352600483016113e8565b03925af1908115611a5057600091611a75575b5061174a6000611405565b611755610192835190565b811015611a7157611766818361143c565b5190611775600083015161221a565b916005926117866101928286610cb0565b9361179885546001600160a01b031690565b946117a36000610ec6565b956117b66001600160a01b038816610f5e565b036118b657506118b19461184b83611850936118326006946117e5846117e061019233809a6101f5565b6114a2565b88516118229061181b6117f960208d015190565b916118146118056114cb565b6001600160a01b03909b168b52565b60208a0152565b6040880152565b6001600160a01b03166060860152565b61184661183f6000611405565b6080860152565b610cb0565b6116b6565b33906118626020600085015194015190565b61189361188d7f04c47544b62d97fc6d744e7cc21ed4a24af06a46427efcfd15a0db261dbb27d69390565b936101ec565b936118a96118a060405190565b928392836116c0565b0390a3611428565b61174a565b90506118c981546001600160a01b031690565b6118d233610f5e565b14611a55575b80546001600160a01b03166118ec33610f5e565b036118fd575b506118b19350611850565b6119248261191f61019261191885546001600160a01b031690565b60066101f5565b6128ab565b60038101546001600160a01b03166119446001600160a01b038716610f5e565b036119aa575b6119a4906119916118b196611967856117e06101923360066101f5565b6119713384611020565b61198861197f602088015190565b60028501611460565b60038301611020565b600461199d6000611405565b9101611460565b386118f2565b6119c46116fd6116fd60038401546001600160a01b031690565b90631756c30e6119d660048301610dac565b833b156101a757611a0c936119fe600080946119f160405190565b9788958694859360e01b90565b835260048301526024820190565b03925af18015611a50576118b1966119a49361199192611a32575b50965050905061194a565b611a4a906000611a42818361067e565b810190610487565b38611a27565b6113f9565b611a6c611a63602085015190565b60028301611460565b6118d8565b5050565b611a90913d8091833e611a88818361067e565b81019061121f565b3861173f565b6101b9906110f5565b906101b991611ab1611106600461109f565b611b02565b15611abd57565b60405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206d7573742062652065786368616e67650000000000000000006044820152606490fd5b6101b99190611b22611b1d611b183360036101f5565b61109f565b611ab6565b611bd1565b15611b2e57565b60405162461bcd60e51b815260206004820152601760248201527f446f6d61696e206d7573742062652076657269666965640000000000000000006044820152606490fd5b15611b7a57565b60405162461bcd60e51b815260206004820152602960248201527f446f6d61696e20616c7265616479206c6973746564206f6e20616e6f746865726044820152682065786368616e676560b81b6064820152608490fd5b90611be0610192836005610cb0565b611c62826004611bf784546001600160a01b031690565b93611c1f611c056000610ec6565b95611c186001600160a01b038816610f5e565b1415611b27565b611c516003820195611c4b610f5e611c3e89546001600160a01b031690565b926001600160a01b031690565b14611b73565b611c5c338096611020565b01611460565b611c9c611c96611c907f94ec80928933a86cc2847706c09c43fa58866b537c8fce8eef172af4036af5209590565b926101ec565b92611405565b92611ca660405190565b600090a4565b906101b991611a9f565b6101b990611cc7611106600461109f565b6101b990611cdc611b1d611b183360036101f5565b611d3b565b15611ce857565b60405162461bcd60e51b815260206004820152602560248201527f446f6d61696e206e6f74206c6973746564206f6e2063616c6c696e672065786360448201526468616e676560d81b6064820152608490fd5b611d49610192826005610cb0565b611d7b611d6060038301546001600160a01b031690565b339290611d7690611d7085610f5e565b14611ce1565b61260c565b6110866110807ff27bc8e4c954bf9eead2d99629d460313da75ee401666af4d3cb1eb821ddb1f69390565b6101b990611cb6565b906101b991611dc1611106600461109f565b6101b99190611dd7611b1d611b183360036101f5565b906000611de8610192846005610cb0565b611e08611dff60038301546001600160a01b031690565b611d7033610f5e565b611e118161260c565b01611e2d82611e2783546001600160a01b031690565b92611020565b611e50836117e0610192856006611e4b8561191f6101928a856101f5565b6101f5565b611c9c611c90611c907f3275c4afb1638bd20394301d401c788e5091157ddca135fd84970904da6541af9590565b906101b991611daf565b6101b990611e94610f3d565b611efb565b15611ea057565b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b9060ff90611016565b90611ef461019261103792151590565b8254611edb565b611f14611f0f611f0b600461109f565b1590565b611e99565b611f1f816001611020565b611f2b60016004611ee4565b611f557f9b7c520e9e227a011fa79baf4082565a9fd780e2bcb20889c0fe36eba4b5c8db916101ec565b90611f5f60405190565b600090a2565b6101b990611e88565b6101b990611f7a610f3d565b6101b990611f8b611106600461109f565b61202c565b15611f9757565b60405162461bcd60e51b81526020600482015260126024820152714475706c69636174652065786368616e676560701b6044820152606490fd5b916001600160a01b0360089290920291821b911b611016565b9190611ffb610192611037936101ec565b908354611fd1565b90815491600160401b83101561069f57826120269160016101b995018155610580565b90611fea565b61205a6003612049612044611f0b611b1886856101f5565b611f90565b612055836001926101f5565b611ee4565b612065816002612003565b611f557f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e1916101ec565b6101b990611f6e565b6101b9906120a4610f3d565b6101b9906120b5611106600461109f565b612106565b156120c157565b60405162461bcd60e51b815260206004820152601760248201527f45786368616e676520646f6573206e6f742065786973740000000000000000006044820152606490fd5b61212c600361212061211b611b1885846101f5565b6120ba565b612055836000926101f5565b6121378160026126e4565b611f557ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb916101ec565b6101b990612098565b6101b990612176610f3d565b6121b9565b1561218257565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b6121dc6121c5826101ec565b6121d5610f5e6101866000610ec6565b141561217b565b611f2b816001611020565b6101b99061216a565b6102ca61220892602092612202815190565b94859290565b93849101610273565b610192916121f0565b61224261222660405190565b8092612236602083019182612211565b9081038252038261067e565b61225461224d825190565b9160200190565b2090565b600061227161019292612269600090565b506005610cb0565b01546001600160a01b031690565b9061229a61228e6104a1845490565b92600052602060002090565b9060005b8181106122ab5750505090565b9091926122cf6122c86001926122c087610dac565b815260200190565b9460010190565b92910161229e565b906101929161227f565b906101b9610d9e926122f260405190565b938480926122d7565b610192906122e1565b906123116106f0836108ad565b918252565b61019260406106a4565b6123286114cb565b906000825260208080808086016060815201600081520160008152016000905250565b905250565b610192612320565b612360612316565b9060008252602080830161234b612350565b610192612358565b60005b82811061238957505050565b602090612394612372565b818401520161237d565b906101b96123b46123ae84612304565b936108ad565b601f19016020840161237a565b906101b961244660046123d26114cb565b946123f46123e782546001600160a01b031690565b6001600160a01b03168752565b61240a61240360018301610d84565b6020880152565b61241961181b60028301610dac565b61244061243060038301546001600160a01b031690565b6001600160a01b03166060880152565b01610dac565b6080840152565b610192906123c1565b61246d61247291612465606090565b5060066101f5565b6122fb565b9061248361247e835190565b61239e565b916000908361249183611405565b61249c610192845190565b81101561250057806124b86124b46124fb938661143c565b5190565b6124e0610b226124c9836005610cb0565b6124db6124d4612316565b948a860152565b61244d565b6124ea828961143c565b526124f5818861143c565b50611428565b612491565b5093505050565b61250f612372565b50610192610b22612521836005610cb0565b6124db61252c612316565b948552565b9061253d61247e835190565b916000908361254b83611405565b612556610192845190565b81101561250057806124b86124b461256e938661143c565b61254b565b9061258261228e6104a1845490565b9060005b8181106125935750505090565b9091926125c16122c86001926125b087546001600160a01b031690565b6001600160a01b0316815260200190565b929101612586565b9061019291612573565b906101b9610d9e926125e460405190565b938480926125c9565b610192906125d3565b61019260026125ed565b6101b991600091611fea565b600060046101b9926126218360038301612600565b016114e6565b9061263661228e6104a1845490565b9060005b8181106126475750505090565b9091926126646122c86001926125b087546001600160a01b031690565b92910161263a565b9061019291612627565b906101b9610d9e9261268760405190565b9384809261266c565b61019290612676565b9190820391821161143757565b634e487b7160e01b600052603160045260246000fd5b805480156126df5760001901906126dc6126d68383610580565b90612600565b55565b6126a6565b6126f9612700926126f483612690565b61279d565b9092901590565b156127425760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612761612751835490565b61275b6001611405565b90612699565b90818103612771575b50506126bc565b6120266127846105e161278b9486610580565b9184610580565b388061276a565b610192600019611405565b919082519260006127ad81611405565b855b811015612804576127d06127c3828561143c565b516001600160a01b031690565b6127e26001600160a01b038616610f5e565b146127fa576127f36127af91611428565b90506127ad565b9450505050600190565b5093505050612811612792565b9190565b9061282461228e6104a1845490565b9060005b8181106128355750505090565b90919261284a6122c86001926122c087610dac565b929101612828565b9061019291612815565b906101b9610d9e9261286d60405190565b93848092612852565b6101929061285c565b6101b99160009161148b565b805480156126df5760001901906126dc6128a58383610580565b9061287f565b6126f96128c0926128bb83612876565b61293b565b156129025760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606490fd5b6101b991612911612751835490565b90818103612921575b505061288b565b6114c561278461088b6129349486610580565b388061291a565b9190825192600061294b81611405565b855b811015612804576129616124b4828561143c565b84146127fa5761297361294d91611428565b905061294b56fea2646970667358221220a6032f571ac9fa51b48f09a32827ab67ff828148f9996dd432fe8f26a821634c64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addExchange(address)\": {\n        \"params\": {\n          \"_exchange\": \"Address of the exchange contract\"\n        }\n      },\n      \"initialize(address)\": {\n        \"params\": {\n          \"_verifyDomainProcessor\": \"Address of the VerifyDomainProcessor contract\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeDomainListing(bytes32)\": {\n        \"params\": {\n          \"_domainId\": \"Domain ID to update listing status for\"\n        }\n      },\n      \"removeExchange(address)\": {\n        \"params\": {\n          \"_exchange\": \"Address of the exchange contract\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setDomainListing(bytes32,uint256)\": {\n        \"params\": {\n          \"_domainId\": \"Domain to set listed status for\",\n          \"_listingId\": \"Listing Id of domain on calling exchange\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"updateDomainOnSale(bytes32,address)\": {\n        \"params\": {\n          \"_domainId\": \"Domain ID to update listing status for\",\n          \"_newOwner\": \"New owner of the domain\"\n        }\n      },\n      \"updateVerifyDomainProcessor(address)\": {\n        \"params\": {\n          \"_verifyDomainProcessor\": \"Address of the new VerifyDomainProcessor contract\"\n        }\n      },\n      \"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"params\": {\n          \"_proofs\": \"Array of domain ownership TLS proofs\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addExchange(address)\": {\n        \"notice\": \"ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized. Exchange must not already exist in the registry. \"\n      },\n      \"initialize(address)\": {\n        \"notice\": \"ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts. This can only be called once.\"\n      },\n      \"removeDomainListing(bytes32)\": {\n        \"notice\": \"ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one that the domain is listed on. This removes the exchange and listingId from the domain. \"\n      },\n      \"removeExchange(address)\": {\n        \"notice\": \"ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry. \"\n      },\n      \"setDomainListing(bytes32,uint256)\": {\n        \"notice\": \"ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is listed on the calling exchange. This sets the exchange and listingId of the domain. \"\n      },\n      \"updateDomainOnSale(bytes32,address)\": {\n        \"notice\": \"ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status from the domain. \"\n      },\n      \"updateVerifyDomainProcessor(address)\": {\n        \"notice\": \"ONLY OWNER: Update the verify domain processor\"\n      },\n      \"verifyDomains(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"notice\": \"Verify domains and add them to the registry. If domain is transferred off-chain to another party  then they can re-verify the domain and claim ownership of the domain and previous ownership is removed. The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on the domain. Function reverts if: - Domain ownership TLS proofs are invalid \"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 7156,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"verifyDomainProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IVerifyDomainProcessor)11894\"\n      },\n      {\n        \"astId\": 7159,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"exchanges\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 7163,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"isExchange\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 7165,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"isInitialized\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 7170,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"domains\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Domain)11806_storage)\"\n      },\n      {\n        \"astId\": 7175,\n        \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n        \"label\": \"userDomains\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IVerifyDomainProcessor)11894\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IVerifyDomainProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_array(t_bytes32)dyn_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32[])\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_array(t_bytes32)dyn_storage\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Domain)11806_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct IVerifiedDomainRegistry.Domain)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Domain)11806_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Domain)11806_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct IVerifiedDomainRegistry.Domain\",\n        \"members\": [\n          {\n            \"astId\": 11797,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"owner\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 11799,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"name\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 11801,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"expiryTime\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 11803,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"exchange\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 11805,\n            \"contract\": \"contracts/VerifiedDomainRegistry.sol:VerifiedDomainRegistry\",\n            \"label\": \"listingId\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/VerifyDomainProcessor.json",
    "content": "{\n  \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_registry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"_providerHashes\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"providerHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"ProviderHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"providerHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"ProviderHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"witness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WitnessAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"witness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WitnessRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_newProviderHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"addProviderHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWitness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWitness\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getProviderHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"\",\n          \"type\": \"string[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWitnesses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"isProviderHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWitness\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"providerHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_removeProviderHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"removeProviderHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removeWitness\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWitness\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof\",\n          \"name\": \"proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"verifyProofSignatures\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"provider\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"parameters\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"context\",\n                  \"type\": \"string\"\n                }\n              ],\n              \"internalType\": \"struct Claims.ClaimInfo\",\n              \"name\": \"claimInfo\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"identifier\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"owner\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"timestampS\",\n                      \"type\": \"uint32\"\n                    },\n                    {\n                      \"internalType\": \"uint32\",\n                      \"name\": \"epoch\",\n                      \"type\": \"uint32\"\n                    }\n                  ],\n                  \"internalType\": \"struct Claims.CompleteClaimData\",\n                  \"name\": \"claim\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes[]\",\n                  \"name\": \"signatures\",\n                  \"type\": \"bytes[]\"\n                }\n              ],\n              \"internalType\": \"struct Claims.SignedClaim\",\n              \"name\": \"signedClaim\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"internalType\": \"struct IProxyBaseProcessor.Proof[]\",\n          \"name\": \"_proofs\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"name\": \"verifyProofs\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"expiryTime\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IVerifyDomainProcessor.DomainRaw[]\",\n          \"name\": \"domains\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"witnesses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x84e113087C97Cd80eA9D78983D4B8Ff61ECa1929\",\n    \"contractAddress\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n    \"transactionIndex\": 17,\n    \"gasUsed\": \"15020436\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000004000800000000000000000000000000000000000000000000400000000010000000000040000000000000000000000000000000000002000000001000000000000000000000000000000000000020000010000000000000802000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\",\n    \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x00000000000000000000000084e113087c97cd80ea9d78983d4b8ff61eca1929\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 63,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866643436323230333962653365343238366464333238356433366437373261373164353830613961666130613137313861376536343335333963393532636639000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 64,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839306136343839656666333831343036383961313531333366623538393036613765383437636331383237316166303336393336633865646139316464636338000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 65,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831346432366430326233616539663236663965363261346438643736656266666630636434613464343632396330386339303961663939656330656234316437000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 66,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836343535386234333633633466386434653763316565316137356534643832663866613736363430653137346230366434656433346533623436656263316137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 67,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865346163393363663332613538353839376233303065656330643232666464616564373031363539343866376161666431633434333634383035383133303537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 68,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834613236366664363366353530646236623739313732333235663333343139646636643564383762663932346231373564386231383137663031306132316366000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 69,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864633065363637323466636633386538353139633761623333616239653661303437633735386462333532303462316430383635303066653530333333663731000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 70,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835313561383265333332366239383563613037336435386133626139323930653834666638643032316430373265376234323066643036313662633630396537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 71,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862343161353133666464336532623761366238653063303266386137313461613361636131303163643332333635646536636261633930666165333038653036000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 72,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831666463343733386233323364346333386266363537613333663734663935363138626331313933336663633463653665396633663763393366356134393265000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 73,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835663135323331653537613266613836663565316562316332616264626435343835313039616461363562623633626564383763373234323564636138323835000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 74,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835343539656262656136343664316134613063393339343465363836303063396533353539313861393062333664333532613132393162613535376535353663000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 75,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866663636633765633166376338316663383333626166623935323263633135626534656635363436323236376338393837393531303530316331626337376664000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 76,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835666161353135303039636137393238303562646630336439353164373533616232343163333231303636653366306362633065653866346330396563623332000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 77,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838303438313862323836653663323034623366313832383262316637613061343062316235353562633339646366323536333432653062346463336632393932000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 78,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835666631363933333461383162386239386261396537626562316566326533383630663739663134386366303735323635323465383239656366366436653564000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 79,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833383938393332396535636564353835396536353039646133396631316636333434633130353232633031393363306362353733653738336539373466626430000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 80,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861633434316436643165393936326562306162636263383139323331653438363134373836633137393530376664306661616563346361643062356431653062000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 81,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865363265363332396162656664656532346663656366333763613535623131326661396430616261636232633939636437663863306461366337626134366138000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 82,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830393962363732366465313338323336666137643339313766313763616566343265626431396661393364653936623162316661666663373133323635643330000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 83,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864653165333763626232383737306131623165643730643461363833376530656537323739323630363965653866613136333366303365346465326333356364000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 84,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836633065306232333432346437356336313931323039343837613237626463623965653966373438656330356638373262346166643536616636366333366335000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 85,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839663736613234346237333164373235376434636338343666336461393837613632303338363261333261626535643337393738356462656364323335643161000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 86,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865663633656237643064613538303830373761663661386539633136303431366361363664623136373739656633306534393439643331656464373062663039000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 87,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832623564623037663538386264323764333739353238316336343066643566666536646531313134353033613237653531306134616134626439643030346434000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 88,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837313839393430303730623035613731326663363330353365396337373138373730633536326364376466303834653530613934313636396636383030393061000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 89,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831363537666161633934646435356530363333363264646662366639356335613664323165373966663735386336613864363037393531306230303462653332000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 90,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836306131386639623861663430356463623930623531653637313966633134623763373932376135393631343434636439376562386563666663376563626439000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 91,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830343066626536386539316134353735616439316437646362393030373766636663313736323765663261313239336635396431373732393539636361656437000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 92,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865326631396633633931643961353930636661663235663436353531623461303233396162343532656635663633386162313732636366626430613063363137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 93,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837306138633062353630623436353563336137633638633062623736636639666334323438346133626237336335666564303261356662343239373936356236000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 94,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835366338313264636364383436323032393261313861383239313538626132306665663439653532656661353739346335386437643237383031343866633233000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 95,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837326162373032333736383634646261316562373631613639333761623164396664303265363037303433643764363433346262336633343262323230613733000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 96,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864373865353566303964653963313836393036343133353830376331353134623262376639303562323039636335373065636435326530346230333635386561000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 97,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837353263313535376134656461613734663963366464376331363665643931656663653134656439303634373136343133373366326137623032383463316464000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 98,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830613664393963386535306238363535366162376362383466353133653130303432316662663330626665633637636464313863653732303235353331393933000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 99,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836383133626466356532346536623564626137626634336461383933623839326237373265646536326664343464643262363461333131373333376262663166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 100,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833646534326637353832333662666237393464663139396439653834353833373964333731326432656336383865326535666633633364663566393538666131000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 101,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863336464313363656166326639646531323563623233366133646263663739633063316637353861623631383763656461363834653338343535646636316433000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 102,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864393333356236396430613939313235353765316139656465313235313038393331626361623661656536383734663235666633386264376634653135623533000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 103,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832386634643661313032613432356633323361623039623364663739323435636331303761663132373530333539613361626666363834656461386363616234000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 104,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839366533313166366463373838303933386138333264383137643963376266353336326462316331316231616135633734373730323965633161363766646462000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 105,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836303830343636663738326437396366356533363964376464623964666164306131386433333035663931373566356464613966303138333739646661303962000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 106,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830326530306532323831343432376532353464386633383634653363326663376434646638663561383830613032616364343533653765643236366433346633000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 107,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837323237643039306465353233306239346262313237366233663766383836333763356638316361373836313164643638386162616164386634343466393934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 108,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833356539383462353539383263356666303532613535366634323232643638633834313862333066656632613439326135346664633239333264333764393232000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 109,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837313338653064646261626330613630616364343562656162326465336233353862353364653734663432333266333964653130376536333835393438353734000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 110,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838653564363532323035343333373561373837383731626637356664393761633565393261623139653465333936366638636431306536323661326136306137000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 111,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839333336386338316131623561653762646461356636643434333861343638643032313437336262383766323439376661393138323931396461346230633934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 112,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834343237313533343837353339616537333065663865666561383038633037626232303438373432353466316332313232633130303631663435623966336336000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 113,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834333563313132303261633631383562323162386462346662363131323339663838623135613966616264353932383831646364633865316435363939623166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 114,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862643839303664306265666436656530303264646535363137383433393135393264383737303064356530353666656235356564656566333739623038313865000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 115,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838623265386330333365363535326663383430393739353937353864323832666566656639316231666231346166343033303030306239623963306534303032000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 116,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862306263653434636639373735333937613531363538363662613330626433653038643830333336316530376463643133383336623065366261633930313135000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 117,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834643439386665386135633034316135623764623736313933653764386238393266303637316535316365393634323863656231303666663331363961376334000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 118,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833313564383433666231373131363230393163306234386263646639653762366364353031653565376239353933393030383330376531353238666534376239000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 119,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864376466666532633632663535303536346562333963333662636630643663356534326138316234363535383864323133306630656138303639613730333265000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 120,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865393262303463363864353833323938663363346237626363323935306531656238376331663037633364316562623838326635386231633835393536396434000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 121,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838643366306165313535363063363236303230303362336165336163333135323235636533656663356238663130393566383739383734633537333134626261000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 122,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835383638343263353434623236353532356132376632663639623234653865613865303464343439663564613362383338326637376239616266666136653230000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 123,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830396138623230623364653233623866363631653338386536353431616134653138623339656466376532663039323665346233373633633832666565316532000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 124,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862373930353632383564376436323731386439623166313930383763663234366636666134626435346235396665666236653533363734656230333638313966000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 125,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839313062636330386565636134356631313539336665376233616138303832313361313434646463633935326264343634383065626338323731303064656632000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 126,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307862323336353536616164396539323363343535306665653862626138316334316337353336383533333534656264363764663264663339643038303564626331000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 127,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834663437333835353334643834343336356439656331363432333133373133646637623530323030643139333466663835303066303231613465353066306531000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 128,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863323334653761616137306633353338316363653465643631656235666464656262383661316362303064656434336461366266363065316461373566666535000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 129,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832636334633339623732373466383430373139633037613635663630303461343361323835343530353266623739363131353638623934663866323836323436000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 130,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830646465343061356238613634353961393033613639633338306538646431663565323230343833346462373235376439313964303563663566623562363065000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 131,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830393437373132623835333464316339346463393962656234343731623566663861383239313436616338303561383438393935313662613763326239323162000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 132,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838396561636431663063646462383862376565663565323966623465633032656332633138303931653033326130633637383138336635323565393632653162000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 133,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833633935646532623935396566313034663532333765376337643832376338346237363039653163363533643535386438376330643235393139343830633262000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 134,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838343239336165343230633236396433633663313534356139323564653831313061323638326430353538306330323930386562353939643933653838393333000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 135,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307835313761656530623465623536383365613265653665656137316162313138356130643966636266646633323633356662376533613030623433656436313035000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 136,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837646165653239343961633835643266336463626134633264343561343834316334666635336336663932383066303136323765393731323066646665396461000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 137,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307865653933306431383732623332376466333836306563643733323330663934376536663538306163366430646164633638326137346463386134393832646339000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 138,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833303264643966623138643765623432616536666233333838356664323964313966363939346666666364636239616566326437636437333661643632343937000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 139,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863613662353732636331343639323935336261633261633361313232626238323564656532313764326663303661333662343563613235393839663730303139000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 140,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307831316463376138623231336262353836353764383464613064356133636466663837336464653138626531396232623634346366306233653131356236366431000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 141,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838353030643233373239343732663063333232363432373930383162656536356536333263393333636463386638636635356537363333373566323035666462000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 142,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830316264323736666133343535383361666536393030646430616463613031316632343033363938373733623838353935396239613032396630356233633537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 143,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307832643861376637353466393036316535393365306363306332383337636363633338356235663862373863303232396330626462393839366438386234343333000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 144,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307837616261623931313531323366396535373431616561333865613036376337346466613862363039326338353332646263633839383966376138643833613932000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 145,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307834373262323532373933323536393563383138363066653064363461633862373034326431633834656138653835396339376534616362613964353836393235000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 146,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307836303666366135643831346136666530653139653039326231356164613333343438653862346165376465393731393364333966623838623565323261326263000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 147,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830323636323063323736353737313534326632626265343364646531626263643139363164376361343261656538373862373030336264353866626364666135000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 148,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861376235653462633438663430636332653665373133366564353333356231653731346233313038626661336533386261313133333732363062636334613131000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 149,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838343530616230336262363864636566386130326465303739656134333038353964386665366236373664323736366432643065396235316566393864656233000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 150,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866346361646164326265326162393039613637663634653630393263616138303735386236633730356336393439393366653735316336306134333965313934000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 151,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307838353366646635396233653064396438666139643035393038646633643231306434653061636538393632336438633064323633646634653263323864323965000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 152,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863663837396337656439336665643366666533323839366132663066343762303462303631613335353362316132393133373838356532633263653839313337000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 153,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307839306565333836623438633166333865643462643738393266373962343330356139386633663766643664336236666630383637333764636632376363353764000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 154,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861396261653735316666666636623364326336616666313037366133613865633833663939336639633130336337383363353962633664393934663930336166000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 155,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307866326261343837646666383661646364623364653534376662333739633736633532396433653238316166386334663061343130373738626438326431363637000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 156,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861323035393836346462363537643837336230313433643364376430303833353739316565616437316264353162336139663535353265656334323232623465000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 157,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830313135313863326462343936636137616164313164383532623037353034373033393235666135653036386466393030323438306166343962623561396366000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 158,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307861393435323661326665633162306661643035636262623830396237353732663434383966616432366562313836393030663032396239313331373334353837000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 159,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307830613163386561343632333431356130303565303163326239623764313632626539623939396237356133636137633235623931396265363361353635336537000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 160,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307833386433393064666361373435633964333230333264623834356334353530653637666232373130363562303432373738636330346339346435383864336565000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 161,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307864623335373565363265646233303332626264616565343561376136356432323866633766356363613263356237616130393535636339646638613039656362000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 162,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      },\n      {\n        \"transactionIndex\": 17,\n        \"blockNumber\": 6746723,\n        \"transactionHash\": \"0x3c7b61609a7fdedc12a518117480aff5af749c11734ee60f8eb9532e4d2b78fe\",\n        \"address\": \"0x7a07D610C4cfFBf90F7fe35A6A4008602DEFd388\",\n        \"topics\": [\n          \"0xc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096\"\n        ],\n        \"data\": \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042307863323764353138666435613639663266373931373938383136326533623730376235326534633137313433666630373733376131353866313964323732383139000000000000000000000000000000000000000000000000000000000000\",\n        \"logIndex\": 163,\n        \"blockHash\": \"0x217621fef1b3d412a45f6b81d22d7534df43d19ff1906385c7589ec9a2567b98\"\n      }\n    ],\n    \"blockNumber\": 6746723,\n    \"cumulativeGasUsed\": \"23935083\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xb941e69B6C1A23A88cf9DA7D243bAE1D2Cb8eb6b\",\n    \"0xCE6454f272127ba69e8C8128B92F2388Ca343257\",\n    [\n      \"0xfd4622039be3e4286dd3285d36d772a71d580a9afa0a1718a7e643539c952cf9\",\n      \"0x90a6489eff38140689a15133fb58906a7e847cc18271af036936c8eda91ddcc8\",\n      \"0x14d26d02b3ae9f26f9e62a4d8d76ebfff0cd4a4d4629c08c909af99ec0eb41d7\",\n      \"0x64558b4363c4f8d4e7c1ee1a75e4d82f8fa76640e174b06d4ed34e3b46ebc1a7\",\n      \"0xe4ac93cf32a585897b300eec0d22fddaed70165948f7aafd1c44364805813057\",\n      \"0x4a266fd63f550db6b79172325f33419df6d5d87bf924b175d8b1817f010a21cf\",\n      \"0xdc0e66724fcf38e8519c7ab33ab9e6a047c758db35204b1d086500fe50333f71\",\n      \"0x515a82e3326b985ca073d58a3ba9290e84ff8d021d072e7b420fd0616bc609e7\",\n      \"0xb41a513fdd3e2b7a6b8e0c02f8a714aa3aca101cd32365de6cbac90fae308e06\",\n      \"0x1fdc4738b323d4c38bf657a33f74f95618bc11933fcc4ce6e9f3f7c93f5a492e\",\n      \"0x5f15231e57a2fa86f5e1eb1c2abdbd5485109ada65bb63bed87c72425dca8285\",\n      \"0x5459ebbea646d1a4a0c93944e68600c9e355918a90b36d352a1291ba557e556c\",\n      \"0xff66c7ec1f7c81fc833bafb9522cc15be4ef56462267c89879510501c1bc77fd\",\n      \"0x5faa515009ca792805bdf03d951d753ab241c321066e3f0cbc0ee8f4c09ecb32\",\n      \"0x804818b286e6c204b3f18282b1f7a0a40b1b555bc39dcf256342e0b4dc3f2992\",\n      \"0x5ff169334a81b8b98ba9e7beb1ef2e3860f79f148cf07526524e829ecf6d6e5d\",\n      \"0x38989329e5ced5859e6509da39f11f6344c10522c0193c0cb573e783e974fbd0\",\n      \"0xac441d6d1e9962eb0abcbc819231e48614786c179507fd0faaec4cad0b5d1e0b\",\n      \"0xe62e6329abefdee24fcecf37ca55b112fa9d0abacb2c99cd7f8c0da6c7ba46a8\",\n      \"0x099b6726de138236fa7d3917f17caef42ebd19fa93de96b1b1faffc713265d30\",\n      \"0xde1e37cbb28770a1b1ed70d4a6837e0ee727926069ee8fa1633f03e4de2c35cd\",\n      \"0x6c0e0b23424d75c6191209487a27bdcb9ee9f748ec05f872b4afd56af66c36c5\",\n      \"0x9f76a244b731d7257d4cc846f3da987a6203862a32abe5d379785dbecd235d1a\",\n      \"0xef63eb7d0da5808077af6a8e9c160416ca66db16779ef30e4949d31edd70bf09\",\n      \"0x2b5db07f588bd27d3795281c640fd5ffe6de1114503a27e510a4aa4bd9d004d4\",\n      \"0x7189940070b05a712fc63053e9c7718770c562cd7df084e50a941669f680090a\",\n      \"0x1657faac94dd55e063362ddfb6f95c5a6d21e79ff758c6a8d6079510b004be32\",\n      \"0x60a18f9b8af405dcb90b51e6719fc14b7c7927a5961444cd97eb8ecffc7ecbd9\",\n      \"0x040fbe68e91a4575ad91d7dcb90077fcfc17627ef2a1293f59d1772959ccaed7\",\n      \"0xe2f19f3c91d9a590cfaf25f46551b4a0239ab452ef5f638ab172ccfbd0a0c617\",\n      \"0x70a8c0b560b4655c3a7c68c0bb76cf9fc42484a3bb73c5fed02a5fb4297965b6\",\n      \"0x56c812dccd84620292a18a829158ba20fef49e52efa5794c58d7d2780148fc23\",\n      \"0x72ab702376864dba1eb761a6937ab1d9fd02e607043d7d6434bb3f342b220a73\",\n      \"0xd78e55f09de9c1869064135807c1514b2b7f905b209cc570ecd52e04b03658ea\",\n      \"0x752c1557a4edaa74f9c6dd7c166ed91efce14ed906471641373f2a7b0284c1dd\",\n      \"0x0a6d99c8e50b86556ab7cb84f513e100421fbf30bfec67cdd18ce72025531993\",\n      \"0x6813bdf5e24e6b5dba7bf43da893b892b772ede62fd44dd2b64a3117337bbf1f\",\n      \"0x3de42f758236bfb794df199d9e8458379d3712d2ec688e2e5ff3c3df5f958fa1\",\n      \"0xc3dd13ceaf2f9de125cb236a3dbcf79c0c1f758ab6187ceda684e38455df61d3\",\n      \"0xd9335b69d0a9912557e1a9ede125108931bcab6aee6874f25ff38bd7f4e15b53\",\n      \"0x28f4d6a102a425f323ab09b3df79245cc107af12750359a3abff684eda8ccab4\",\n      \"0x96e311f6dc7880938a832d817d9c7bf5362db1c11b1aa5c7477029ec1a67fddb\",\n      \"0x6080466f782d79cf5e369d7ddb9dfad0a18d3305f9175f5dda9f018379dfa09b\",\n      \"0x02e00e22814427e254d8f3864e3c2fc7d4df8f5a880a02acd453e7ed266d34f3\",\n      \"0x7227d090de5230b94bb1276b3f7f88637c5f81ca78611dd688abaad8f444f994\",\n      \"0x35e984b55982c5ff052a556f4222d68c8418b30fef2a492a54fdc2932d37d922\",\n      \"0x7138e0ddbabc0a60acd45beab2de3b358b53de74f4232f39de107e6385948574\",\n      \"0x8e5d65220543375a787871bf75fd97ac5e92ab19e4e3966f8cd10e626a2a60a7\",\n      \"0x93368c81a1b5ae7bdda5f6d4438a468d021473bb87f2497fa9182919da4b0c94\",\n      \"0x4427153487539ae730ef8efea808c07bb204874254f1c2122c10061f45b9f3c6\",\n      \"0x435c11202ac6185b21b8db4fb611239f88b15a9fabd592881dcdc8e1d5699b1f\",\n      \"0xbd8906d0befd6ee002dde561784391592d87700d5e056feb55edeef379b0818e\",\n      \"0x8b2e8c033e6552fc84097959758d282fefef91b1fb14af4030000b9b9c0e4002\",\n      \"0xb0bce44cf9775397a5165866ba30bd3e08d803361e07dcd13836b0e6bac90115\",\n      \"0x4d498fe8a5c041a5b7db76193e7d8b892f0671e51ce96428ceb106ff3169a7c4\",\n      \"0x315d843fb171162091c0b48bcdf9e7b6cd501e5e7b95939008307e1528fe47b9\",\n      \"0xd7dffe2c62f550564eb39c36bcf0d6c5e42a81b465588d2130f0ea8069a7032e\",\n      \"0xe92b04c68d583298f3c4b7bcc2950e1eb87c1f07c3d1ebb882f58b1c859569d4\",\n      \"0x8d3f0ae15560c62602003b3ae3ac315225ce3efc5b8f1095f879874c57314bba\",\n      \"0x586842c544b265525a27f2f69b24e8ea8e04d449f5da3b8382f77b9abffa6e20\",\n      \"0x09a8b20b3de23b8f661e388e6541aa4e18b39edf7e2f0926e4b3763c82fee1e2\",\n      \"0xb79056285d7d62718d9b1f19087cf246f6fa4bd54b59fefb6e53674eb036819f\",\n      \"0x910bcc08eeca45f11593fe7b3aa808213a144ddcc952bd46480ebc827100def2\",\n      \"0xb236556aad9e923c4550fee8bba81c41c7536853354ebd67df2df39d0805dbc1\",\n      \"0x4f47385534d844365d9ec1642313713df7b50200d1934ff8500f021a4e50f0e1\",\n      \"0xc234e7aaa70f35381cce4ed61eb5fddebb86a1cb00ded43da6bf60e1da75ffe5\",\n      \"0x2cc4c39b7274f840719c07a65f6004a43a28545052fb79611568b94f8f286246\",\n      \"0x0dde40a5b8a6459a903a69c380e8dd1f5e2204834db7257d919d05cf5fb5b60e\",\n      \"0x0947712b8534d1c94dc99beb4471b5ff8a829146ac805a84899516ba7c2b921b\",\n      \"0x89eacd1f0cddb88b7eef5e29fb4ec02ec2c18091e032a0c678183f525e962e1b\",\n      \"0x3c95de2b959ef104f5237e7c7d827c84b7609e1c653d558d87c0d25919480c2b\",\n      \"0x84293ae420c269d3c6c1545a925de8110a2682d05580c02908eb599d93e88933\",\n      \"0x517aee0b4eb5683ea2ee6eea71ab1185a0d9fcbfdf32635fb7e3a00b43ed6105\",\n      \"0x7daee2949ac85d2f3dcba4c2d45a4841c4ff53c6f9280f01627e97120fdfe9da\",\n      \"0xee930d1872b327df3860ecd73230f947e6f580ac6d0dadc682a74dc8a4982dc9\",\n      \"0x302dd9fb18d7eb42ae6fb33885fd29d19f6994fffcdcb9aef2d7cd736ad62497\",\n      \"0xca6b572cc14692953bac2ac3a122bb825dee217d2fc06a36b45ca25989f70019\",\n      \"0x11dc7a8b213bb58657d84da0d5a3cdff873dde18be19b2b644cf0b3e115b66d1\",\n      \"0x8500d23729472f0c32264279081bee65e632c933cdc8f8cf55e763375f205fdb\",\n      \"0x01bd276fa345583afe6900dd0adca011f2403698773b885959b9a029f05b3c57\",\n      \"0x2d8a7f754f9061e593e0cc0c2837cccc385b5f8b78c0229c0bdb9896d88b4433\",\n      \"0x7abab9115123f9e5741aea38ea067c74dfa8b6092c8532dbcc8989f7a8d83a92\",\n      \"0x472b25279325695c81860fe0d64ac8b7042d1c84ea8e859c97e4acba9d586925\",\n      \"0x606f6a5d814a6fe0e19e092b15ada33448e8b4ae7de97193d39fb88b5e22a2bc\",\n      \"0x026620c2765771542f2bbe43dde1bbcd1961d7ca42aee878b7003bd58fbcdfa5\",\n      \"0xa7b5e4bc48f40cc2e6e7136ed5335b1e714b3108bfa3e38ba11337260bcc4a11\",\n      \"0x8450ab03bb68dcef8a02de079ea430859d8fe6b676d2766d2d0e9b51ef98deb3\",\n      \"0xf4cadad2be2ab909a67f64e6092caa80758b6c705c694993fe751c60a439e194\",\n      \"0x853fdf59b3e0d9d8fa9d05908df3d210d4e0ace89623d8c0d263df4e2c28d29e\",\n      \"0xcf879c7ed93fed3ffe32896a2f0f47b04b061a3553b1a29137885e2c2ce89137\",\n      \"0x90ee386b48c1f38ed4bd7892f79b4305a98f3f7fd6d3b6ff086737dcf27cc57d\",\n      \"0xa9bae751ffff6b3d2c6aff1076a3a8ec83f993f9c103c783c59bc6d994f903af\",\n      \"0xf2ba487dff86adcdb3de547fb379c76c529d3e281af8c4f0a410778bd82d1667\",\n      \"0xa2059864db657d873b0143d3d7d00835791eead71bd51b3a9f5552eec4222b4e\",\n      \"0x011518c2db496ca7aad11d852b07504703925fa5e068df9002480af49bb5a9cf\",\n      \"0xa94526a2fec1b0fad05cbbb809b7572f4489fad26eb186900f029b9131734587\",\n      \"0x0a1c8ea4623415a005e01c2b9b7d162be9b999b75a3ca7c25b919be63a5653e7\",\n      \"0x38d390dfca745c9d32032db845c4550e67fb271065b042778cc04c94d588d3ee\",\n      \"0xdb3575e62edb3032bbdaee45a7a65d228fc7f5cca2c5b7aa0955cc9df8a09ecb\",\n      \"0xc27d518fd5a69f2f7917988162e3b707b52e4c17143ff07737a158f19d272819\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"d865a6f49eab8c58036d78b72f5cb448\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_registry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"_providerHashes\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"providerHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"ProviderHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"providerHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"ProviderHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"witness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WitnessAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"witness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WitnessRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_newProviderHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"addProviderHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWitness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWitness\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getProviderHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWitnesses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"isProviderHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWitness\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"providerHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_removeProviderHash\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"removeProviderHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removeWitness\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWitness\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"verifyProofSignatures\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"provider\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"parameters\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"context\\\",\\\"type\\\":\\\"string\\\"}],\\\"internalType\\\":\\\"struct Claims.ClaimInfo\\\",\\\"name\\\":\\\"claimInfo\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"timestampS\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"epoch\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"internalType\\\":\\\"struct Claims.CompleteClaimData\\\",\\\"name\\\":\\\"claim\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"internalType\\\":\\\"struct Claims.SignedClaim\\\",\\\"name\\\":\\\"signedClaim\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"internalType\\\":\\\"struct IProxyBaseProcessor.Proof[]\\\",\\\"name\\\":\\\"_proofs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"verifyProofs\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"expiryTime\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IVerifyDomainProcessor.DomainRaw[]\\\",\\\"name\\\":\\\"domains\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"witnesses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addProviderHash(string)\\\":{\\\"params\\\":{\\\"_newProviderHash\\\":\\\"New provider hash to be added\\\"}},\\\"addWitness(address)\\\":{\\\"params\\\":{\\\"_newWitness\\\":\\\"Address of the new witness\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeProviderHash(string)\\\":{\\\"params\\\":{\\\"_removeProviderHash\\\":\\\"Provider hash to be removed\\\"}},\\\"removeWitness(address)\\\":{\\\"params\\\":{\\\"_removeWitness\\\":\\\"Address of witness to be removed\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\\\":{\\\"params\\\":{\\\"proof\\\":\\\"Proof to be verified\\\"}},\\\"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"params\\\":{\\\"_proofs\\\":\\\"Proofs to be verified\\\"},\\\"returns\\\":{\\\"domains\\\":\\\"      Array of Domain structs\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addProviderHash(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\\"},\\\"addWitness(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add witness address. Witness must not have been previously added.\\\"},\\\"removeProviderHash(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\\"},\\\"removeWitness(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove witness address. Witness must have been previously added.\\\"},\\\"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\\\":{\\\"notice\\\":\\\"Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters) to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature.  This function verifies a claim by performing the following checks on the claim - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim - Checks if the signatures are valid and from the witnesses This function reverts if - No signatures are found on the proof - Number of signatures is not equal to the number of witnesses - ClaimInfo hash does not match the identifier in the claim - Signatures are invalid (not from the witnesses)  DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the  responsibility of the caller.  Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code    \\\"},\\\"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\\\":{\\\"notice\\\":\\\"ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/VerifyDomainProcessor.sol\\\":\\\"VerifyDomainProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"details\\\":{\\\"constantOptimizer\\\":true,\\\"cse\\\":true,\\\"deduplicate\\\":true,\\\"inliner\\\":true,\\\"jumpdestRemover\\\":true,\\\"orderLiterals\\\":true,\\\"peephole\\\":true,\\\"yul\\\":true,\\\"yulDetails\\\":{\\\"optimizerSteps\\\":\\\"u:fDnTOc\\\",\\\"stackAllocation\\\":true}},\\\"runs\\\":200},\\\"remappings\\\":[],\\\"viaIR\\\":true},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n\\\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\\\n        return 0;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\nimport \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"./StringUtils.sol\\\\\\\";\\\\n\\\\n/**\\\\n * Library to assist with requesting,\\\\n * serialising & verifying credentials\\\\n */\\\\nlibrary Claims {\\\\n\\\\t/** Data required to describe a claim */\\\\n\\\\tstruct CompleteClaimData {\\\\n\\\\t\\\\tbytes32 identifier;\\\\n\\\\t\\\\taddress owner;\\\\n\\\\t\\\\tuint32 timestampS;\\\\n\\\\t\\\\tuint32 epoch;\\\\n\\\\t}\\\\n\\\\n\\\\tstruct ClaimInfo {\\\\n\\\\t\\\\tstring provider;\\\\n\\\\t\\\\tstring parameters;\\\\n\\\\t\\\\tstring context;\\\\n\\\\t}\\\\n\\\\n\\\\t/** Claim with signatures & signer */\\\\n\\\\tstruct SignedClaim {\\\\n\\\\t\\\\tCompleteClaimData claim;\\\\n\\\\t\\\\tbytes[] signatures;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * Asserts that the claim is signed by the expected witnesses\\\\n\\\\t */\\\\n\\\\tfunction assertValidSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self,\\\\n\\\\t\\\\taddress[] memory expectedWitnessAddresses\\\\n\\\\t) internal pure {\\\\n\\\\t\\\\trequire(self.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n\\\\t\\\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\\\n\\\\t\\\\t\\\\tbool found = false;\\\\n\\\\t\\\\t\\\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\\\n\\\\t\\\\t\\\\t\\\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfound = true;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\trequire(found, \\\\\\\"Missing witness signature\\\\\\\");\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev recovers the signer of the claim\\\\n\\\\t */\\\\n\\\\tfunction recoverSignersOfSignedClaim(\\\\n\\\\t\\\\tSignedClaim memory self\\\\n\\\\t) internal pure returns (address[] memory) {\\\\n\\\\t\\\\tbytes memory serialised = serialise(self.claim);\\\\n\\\\t\\\\taddress[] memory signers = new address[](self.signatures.length);\\\\n\\\\t\\\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\\\n\\\\t\\\\t\\\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn signers;\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev serialises the credential into a string;\\\\n\\\\t * the string is used to verify the signature\\\\n\\\\t *\\\\n\\\\t * the serialisation is the same as done by the TS library\\\\n\\\\t */\\\\n\\\\tfunction serialise(\\\\n\\\\t\\\\tCompleteClaimData memory self\\\\n\\\\t) internal pure returns (bytes memory) {\\\\n\\\\t\\\\treturn\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.address2str(self.owner),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.timestampS),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(self.epoch)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\t}\\\\n\\\\n\\\\t/**\\\\n\\\\t * @dev returns the address of the user that generated the signature\\\\n\\\\t */\\\\n\\\\tfunction verifySignature(\\\\n\\\\t\\\\tbytes memory content,\\\\n\\\\t\\\\tbytes memory signature\\\\n\\\\t) internal pure returns (address signer) {\\\\n\\\\t\\\\tbytes32 signedHash = keccak256(\\\\n\\\\t\\\\t\\\\tabi.encodePacked(\\\\n\\\\t\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\t\\\\tStringUtils.uint2str(content.length),\\\\n\\\\t\\\\t\\\\t\\\\tcontent\\\\n\\\\t\\\\t\\\\t)\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn ECDSA.recover(signedHash, signature);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\\\n\\\\t\\\\tbytes memory serialised = abi.encodePacked(\\\\n\\\\t\\\\t\\\\tclaimInfo.provider,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.parameters,\\\\n\\\\t\\\\t\\\\t\\\\\\\"\\\\\\\\n\\\\\\\",\\\\n\\\\t\\\\t\\\\tclaimInfo.context\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\treturn keccak256(serialised);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x87a41e75d358e86798456ad45e03446cde8f1519c8af17905f6c8b852a5f2da7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.4;\\\\n\\\\n/**\\\\n * Utilities for string manipulation & conversion\\\\n */\\\\nlibrary StringUtils {\\\\n\\\\tfunction address2str(address x) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory s = new bytes(40);\\\\n\\\\t\\\\tfor (uint i = 0; i < 20; i++) {\\\\n\\\\t\\\\t\\\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\\\n\\\\t\\\\t\\\\tbytes1 hi = bytes1(uint8(b) / 16);\\\\n\\\\t\\\\t\\\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\\\n\\\\t\\\\t\\\\ts[2 * i] = getChar(hi);\\\\n\\\\t\\\\t\\\\ts[2 * i + 1] = getChar(lo);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", s));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\\\n\\\\t\\\\t// Fixed buffer size for hexadecimal convertion\\\\n\\\\t\\\\tbytes memory converted = new bytes(buffer.length * 2);\\\\n\\\\t\\\\tbytes memory _base = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n\\\\t\\\\tfor (uint256 i = 0; i < buffer.length; i++) {\\\\n\\\\t\\\\t\\\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\\\n\\\\t\\\\t\\\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn string(abi.encodePacked(\\\\\\\"0x\\\\\\\", converted));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\\\n\\\\t\\\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\\\n\\\\t\\\\telse return bytes1(uint8(b) + 0x57);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_b) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"true\\\\\\\";\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"false\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\\\n\\\\t\\\\tif (_i == 0) {\\\\n\\\\t\\\\t\\\\treturn \\\\\\\"0\\\\\\\";\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuint j = _i;\\\\n\\\\t\\\\tuint len;\\\\n\\\\t\\\\twhile (j != 0) {\\\\n\\\\t\\\\t\\\\tlen++;\\\\n\\\\t\\\\t\\\\tj /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tbytes memory bstr = new bytes(len);\\\\n\\\\t\\\\tuint k = len;\\\\n\\\\t\\\\twhile (_i != 0) {\\\\n\\\\t\\\\t\\\\tk = k - 1;\\\\n\\\\t\\\\t\\\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\\\n\\\\t\\\\t\\\\tbytes1 b1 = bytes1(temp);\\\\n\\\\t\\\\t\\\\tbstr[k] = b1;\\\\n\\\\t\\\\t\\\\t_i /= 10;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bstr);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(\\\\n\\\\t\\\\tstring calldata _a,\\\\n\\\\t\\\\tstring storage _b\\\\n\\\\t) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\\\n\\\\t\\\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\\\n\\\\t}\\\\n\\\\n\\\\tfunction toLower(string memory str) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory bStr = bytes(str);\\\\n\\\\t\\\\tbytes memory bLower = new bytes(bStr.length);\\\\n\\\\t\\\\tfor (uint i = 0; i < bStr.length; i++) {\\\\n\\\\t\\\\t\\\\t// Uppercase character...\\\\n\\\\t\\\\t\\\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\\\n\\\\t\\\\t\\\\t\\\\t// So we add 32 to make it lowercase\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tbLower[i] = bStr[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(bLower);\\\\n\\\\t}\\\\n\\\\n\\\\tfunction substring(\\\\n\\\\t\\\\tstring memory str,\\\\n\\\\t\\\\tuint startIndex,\\\\n\\\\t\\\\tuint endIndex\\\\n\\\\t) internal pure returns (string memory) {\\\\n\\\\t\\\\tbytes memory strBytes = bytes(str);\\\\n\\\\t\\\\tbytes memory result = new bytes(endIndex - startIndex);\\\\n\\\\t\\\\tfor (uint i = startIndex; i < endIndex; i++) {\\\\n\\\\t\\\\t\\\\tresult[i - startIndex] = strBytes[i];\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn string(result);\\\\n\\\\t}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x15feebafef16d4c74c043b39e652ddae0e121987ceca74b663f6a2d2d7ba8b4b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/VerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n\\\\nimport { ClaimVerifier } from \\\\\\\"./external/ClaimVerifier.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./external/interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { ProxyBaseProcessor } from \\\\\\\"./external/processors/ProxyBaseProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"./external/lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TicketmasterDataParsing } from \\\\\\\"./external/TicketmasterDataParsing.sol\\\\\\\";\\\\n\\\\nimport { IVerifyDomainProcessor } from \\\\\\\"./interfaces/IVerifyDomainProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n\\\\ncontract VerifyDomainProcessor is IVerifyDomainProcessor, ProxyBaseProcessor {\\\\n\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable registry;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _registry,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string[] memory _providerHashes\\\\n    )   \\\\n        ProxyBaseProcessor(_nullifierRegistry, _providerHashes)\\\\n    {\\\\n        registry = _registry;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\\\n     *\\\\n     * @param _proofs        Proofs to be verified\\\\n     * @return domains       Array of Domain structs\\\\n     */\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external \\\\n        override\\\\n        returns (DomainRaw[] memory domains)\\\\n    {\\\\n        require(msg.sender == registry, \\\\\\\"Only registry can call\\\\\\\");\\\\n\\\\n        domains = new DomainRaw[](_proofs.length);\\\\n\\\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\\\n            Proof memory proof = _proofs[i];\\\\n\\\\n            verifyProofSignatures(proof);\\\\n\\\\n            (\\\\n                string memory domainName,\\\\n                string memory expiryTimeStr,\\\\n                string memory providerHash\\\\n            ) = _extractValues(proof);\\\\n\\\\n            // Check provider hash\\\\n            require(_validateProviderHash(providerHash), \\\\\\\"No valid providerHash\\\\\\\");\\\\n\\\\n            _validateAndAddNullifier(proof.signedClaim.signatures);\\\\n\\\\n            domains[i] = DomainRaw({\\\\n                name: domainName,\\\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\\\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\\\\\"YYYY-MM-DDTHH:MM:SS\\\\\\\"\\\\n                // and returns UTC timestamps.\\\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(expiryTimeStr)\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * Extracts all values from the proof context.\\\\n     *\\\\n     * @param _proof The proof containing the context to extract values from.\\\\n     */\\\\n    function _extractValues(Proof memory _proof) internal pure returns (\\\\n        string memory domainName,\\\\n        string memory expiryTime,\\\\n        string memory providerHash\\\\n    ) {\\\\n        string[] memory values = ClaimVerifier.extractAllFromContext(\\\\n            _proof.claimInfo.context, \\\\n            MAX_EXTRACT_VALUES, \\\\n            true\\\\n        );\\\\n\\\\n        return (\\\\n            values[0], // domainName\\\\n            values[1], // expiryTime\\\\n            values[2]  // providerHash\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x34c84f99070a4b76cca1d63b5d8eee8edd8a0e98ace63cca4681d71327f4c18a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/ClaimVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary ClaimVerifier {\\\\n\\\\n    /**\\\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\\\n     * the target string in the data string if found. Returns type(uint256).max if:\\\\n     * - Target is longer than data\\\\n     * - Target is not found\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     */\\\\n    function findSubstringEndIndex(\\\\n        string memory data,\\\\n        string memory target\\\\n    ) public pure returns (uint256) {\\\\n        bytes memory dataBytes = bytes(data);\\\\n        bytes memory targetBytes = bytes(target);\\\\n\\\\n        if (dataBytes.length < targetBytes.length) {\\\\n            return type(uint256).max;\\\\n        }\\\\n\\\\n        // Find start of target\\\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\\\n            bool isMatch = true;\\\\n\\\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\\\n                if (dataBytes[i + j] != targetBytes[j]) {\\\\n                    isMatch = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n\\\\n            if (isMatch) {\\\\n                return i + targetBytes.length; // Return end index + 1\\\\n            }\\\\n        }\\\\n\\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    /**\\\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\\\n     * Pass prefix formatted with quotes, for example '\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"'\\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *\\\\n     * @param data      Context string from which target value needs to be extracted\\\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\\\n     */\\\\n    function extractFieldFromContext(\\\\n        string memory data,\\\\n        string memory prefix\\\\n    ) public pure returns (string memory) {\\\\n        // Find end index of prefix; which is the start index of the value\\\\n        uint256 start = findSubstringEndIndex(data, prefix);\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        if (start == dataBytes.length) {\\\\n            return \\\\\\\"\\\\\\\"; // Prefix not found. Malformed or missing message\\\\n        }\\\\n        \\\\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\\\n        uint256 end = start;\\\\n        while (\\\\n            end < dataBytes.length &&\\\\n            !(dataBytes[end] == '\\\\\\\"' && dataBytes[end - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")\\\\n        ) {\\\\n            end++;\\\\n        }\\\\n        if (end <= start) {\\\\n            return \\\\\\\"\\\\\\\"; // Malformed or missing message\\\\n        }\\\\n        bytes memory contextMessage = new bytes(end - start);\\\\n        for (uint i = start; i < end; i++) {\\\\n            contextMessage[i - start] = dataBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\\\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\\\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\\\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\\\n     * multiple times.\\\\n     * \\\\n     * @param data                  Context string from which target value needs to be extracted\\\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\\\n     */\\\\n    function extractAllFromContext(\\\\n        string memory data,\\\\n        uint8 maxValues,\\\\n        bool extractProviderHash\\\\n    ) public pure returns (string[] memory) {\\\\n        \\\\n        require(maxValues > 0, \\\\\\\"Max values must be greater than 0\\\\\\\");\\\\n\\\\n        bytes memory dataBytes = bytes(data);\\\\n        uint index = 0;\\\\n\\\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"');\\\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\\\\\"Extraction failed. Malformed extractedParameters\\\\\\\");\\\\n        }\\\\n        index += extractedParametersBytes.length;\\\\n\\\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\\\\\\\\\"extractedParameters\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"'\\\\n        uint valuesFound = 0;\\\\n    \\\\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\\\n\\\\n        while (\\\\n            index < dataBytes.length\\\\n        ) {\\\\n            // Keep incrementing until '\\\\\\\"', escaped quotes are not considered\\\\n            if (!(dataBytes[index] == '\\\\\\\"' && dataBytes[index - 1] != \\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\")) {\\\\n                index++;\\\\n                continue;\\\\n            }\\\\n\\\\n            if (!isValue) {\\\\n                // \\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\" (3 chars)\\\\n                require(dataBytes[index + 1] == \\\\\\\":\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"', \\\\\\\"Extraction failed. Malformed data 1\\\\\\\");\\\\n                index += 3;     // move it after \\\\\\\\\\\\\\\"\\\\n                isValue = true;\\\\n                valueIndices[2 * valuesFound] = index;      // start index\\\\n            } else {\\\\n                // \\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\" (3 chars) or \\\\\\\\\\\\\\\"}, (3 chars)\\\\n                // \\\\\\\\\\\\\\\"}} is not supported, there should always be a providerHash\\\\n                require(\\\\n                    dataBytes[index + 1] == \\\\\\\",\\\\\\\" && dataBytes[index + 2] == '\\\\\\\\\\\\\\\"' ||  \\\\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\\\\\",\\\\\\\",\\\\n                    \\\\\\\"Extraction failed. Malformed data 2\\\\\\\"\\\\n                );\\\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\\\n                valuesFound++;\\\\n\\\\n                if (dataBytes[index + 1] == \\\\\\\",\\\\\\\") {\\\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\\\n                    require(valuesFound != maxValues, \\\\\\\"Extraction failed. Exceeded max values\\\\\\\");\\\\n                    index += 3;\\\\n                    isValue = false;\\\\n                } else {    // index + 1 = \\\\\\\"}\\\\\\\"\\\\n                    index += 3;\\\\n                    break;  // end of extractedParameters\\\\n                }\\\\n            }\\\\n        }\\\\n\\\\n        if (extractProviderHash) {\\\\n            bytes memory providerHashParamBytes = bytes(\\\\\\\"\\\\\\\\\\\\\\\"providerHash\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"\\\\\\\");\\\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\\\\\"Extraction failed. Malformed providerHash\\\\\\\");\\\\n            }\\\\n            index += providerHashParamBytes.length;\\\\n            \\\\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\\\n            valueIndices[2 * valuesFound] = index;\\\\n            // Keep incrementing until '\\\\\\\"'\\\\n            while (\\\\n                index < dataBytes.length && dataBytes[index] != '\\\\\\\"'\\\\n            ) {\\\\n                index++;\\\\n            }\\\\n            valueIndices[2 * valuesFound + 1] = index;\\\\n            valuesFound++;\\\\n        }   \\\\n        \\\\n        string[] memory values = new string[](valuesFound);\\\\n        \\\\n        for (uint i = 0; i < valuesFound; i++) {\\\\n            uint startIndex = valueIndices[2 * i];\\\\n            uint endIndex = valueIndices[2 * i + 1];\\\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\\\n            for (uint j = startIndex; j < endIndex; j++) {\\\\n                contextValue[j - startIndex] = dataBytes[j];\\\\n            }\\\\n            values[i] = string(contextValue);\\\\n        }\\\\n\\\\n        return values;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xac6a8d456c3b2c5ab5a475279a2f0f103faff3cb2d6abb2ce2029cd4265b904e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/TicketmasterDataParsing.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { DateTime } from \\\\\\\"./lib/DateTime.sol\\\\\\\";\\\\n\\\\nimport { StringConversionUtils } from \\\\\\\"./lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { ClaimVerifier } from \\\\\\\"./ClaimVerifier.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary TicketmasterDataParsing {\\\\n    \\\\n    using StringConversionUtils for string;\\\\n\\\\n    /**\\\\n     * @notice Iterates through every character in the date string and splits the string at each dash, \\\\\\\"T\\\\\\\", or colon. Function will revert\\\\n     * if there are not 6 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\\\n     * to get the unix timestamp. This function is SPECIFIC TO THE DATE FORMAT USED BY Ticketmaster, not suitable for use with other date\\\\n     * formats. Ticketmaster date format is: \\\\\\\"YYYY-MM-DDTHH:MM:SS\\\\\\\" and returns UTC timestamps.\\\\n     *\\\\n     * @param _dateString       Date string to be converted to a UTC timestamp\\\\n     */\\\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256 utcTimestamp) {\\\\n        string[6] memory extractedStrings;\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\\\n            if (bytes(_dateString)[i] == 0x2d || bytes(_dateString)[i] == 0x3a || bytes(_dateString)[i] == 0x54) {\\\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\\\n                lastBreak = i + 1;\\\\n                breakCounter++;\\\\n            }\\\\n        }\\\\n        // Add last substring to array\\\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\\\n\\\\n        // Check that exactly 6 substrings were found (string is split at 5 different places)\\\\n        require(breakCounter == 5, \\\\\\\"Invalid date string\\\\\\\");\\\\n\\\\n        utcTimestamp = DateTime.timestampFromDateTime(\\\\n            extractedStrings[0].stringToUint(0),    // year\\\\n            extractedStrings[1].stringToUint(0),    // month\\\\n            extractedStrings[2].stringToUint(0),    // day\\\\n            extractedStrings[3].stringToUint(0),    // hour\\\\n            extractedStrings[4].stringToUint(0),    // minute\\\\n            0                                       // we don't need to the second granularity\\\\n        );\\\\n    }\\\\n\\\\n    /**\\\\n     * Extract event ID from URL by finding the last slash and taking the substring after it. We assume the\\\\n     * URL is formulated something like: {domainRoot}/.../event/EVENT_ID\\\\n     *\\\\n     * @param _url          URL to extract event ID from\\\\n     * @return              Event ID extracted from URL\\\\n     */\\\\n    function _extractEventIdFromUrl(string memory _url) internal pure returns (string memory) {\\\\n        string memory prefix = \\\\\\\"event/\\\\\\\";\\\\n        bytes memory urlBytes = bytes(_url);\\\\n        uint256 urlLength = urlBytes.length;\\\\n\\\\n        uint256 startIndex = ClaimVerifier.findSubstringEndIndex(_url, prefix);\\\\n        // If the start index is the max value or the URL length, then the event ID was not found\\\\n        if (startIndex == type(uint256).max || startIndex == urlLength) {\\\\n            revert(\\\\\\\"Event ID not found in URL\\\\\\\");\\\\n        }\\\\n\\\\n        bytes memory contextMessage = new bytes(urlLength - startIndex);\\\\n        for (uint i = startIndex; i < urlLength; i++) {\\\\n            contextMessage[i - startIndex] = urlBytes[i];\\\\n        }\\\\n        return string(contextMessage);\\\\n    }\\\\n\\\\n    /**\\\\n     * Parse tickets out of a ticket string of the format: '[\\\\\\\"ticket1\\\\\\\", \\\\\\\"ticket2\\\\\\\", \\\\\\\"ticket3\\\\\\\"]'.\\\\n     * We start by getting the number of tickets in a string by counting the number of commas and adding 1.\\\\n     * Then we iterate through the string and find the ticket IDs by looking for the quotes. We need to extract\\\\n     * from quote to quote so we look for all even-numbered quotes then extract the string between that and the\\\\n     * previous quote index.\\\\n     *\\\\n     * @param _ticketString          Stringified array of tickets\\\\n     */\\\\n     function _parseTicketString(string memory _ticketString) internal pure returns (string[] memory ticketIds) {\\\\n        // Assume there is at least one ticket (which means array would not have a comma)\\\\n        // If there is no ticket then the transaction will end up reverting\\\\n        uint256 ticketCount = 1;\\\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\\\n            if (bytes(_ticketString)[i] == 0x2C) {\\\\n                ticketCount++;\\\\n            }\\\\n        }\\\\n\\\\n        ticketIds = new string[](ticketCount);\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\\\n            if (bytes(_ticketString)[i] == 0x22) {\\\\n                breakCounter++;\\\\n                if (breakCounter % 2 == 0) {\\\\n                    ticketIds[(breakCounter/2)-1] = _ticketString.substring(lastBreak, i-1);\\\\n                }\\\\n                lastBreak = i + 1;\\\\n            }\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x23a87b78bf72170f5e0cee6e4a8c59f68947c50971e00d183580ebe473a148c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/interfaces/IProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IProxyBaseProcessor {\\\\n    \\\\n    struct Proof {\\\\n        Claims.ClaimInfo claimInfo;\\\\n        Claims.SignedClaim signedClaim;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x65aa00301110dfdf8333bd9bb71ebad241d66ea5840a2db3ac6d4f6037083cb8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/DateTime.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.0;\\\\n\\\\n// ----------------------------------------------------------------------------\\\\n// DateTime Library v2.0\\\\n//\\\\n// A gas-efficient Solidity date and time library\\\\n//\\\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\\\n//\\\\n// Tested date range 1970/01/01 to 2345/12/31\\\\n//\\\\n// Conventions:\\\\n// Unit      | Range         | Notes\\\\n// :-------- |:-------------:|:-----\\\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\\\n// year      | 1970 ... 2345 |\\\\n// month     | 1 ... 12      |\\\\n// day       | 1 ... 31      |\\\\n// hour      | 0 ... 23      |\\\\n// minute    | 0 ... 59      |\\\\n// second    | 0 ... 59      |\\\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\\\n//\\\\n//\\\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\\\n//\\\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\\\n// ----------------------------------------------------------------------------\\\\n\\\\nlibrary DateTime {\\\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\\\n    int256 constant OFFSET19700101 = 2440588;\\\\n\\\\n    uint256 constant DOW_MON = 1;\\\\n    uint256 constant DOW_TUE = 2;\\\\n    uint256 constant DOW_WED = 3;\\\\n    uint256 constant DOW_THU = 4;\\\\n    uint256 constant DOW_FRI = 5;\\\\n    uint256 constant DOW_SAT = 6;\\\\n    uint256 constant DOW_SUN = 7;\\\\n\\\\n    // ------------------------------------------------------------------------\\\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\\\n    // the date conversion algorithm from\\\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\\\n    //\\\\n    // days = day\\\\n    //      - 32075\\\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\\\n    //      - offset\\\\n    // ------------------------------------------------------------------------\\\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\\\n        require(year >= 1970);\\\\n        int256 _year = int256(year);\\\\n        int256 _month = int256(month);\\\\n        int256 _day = int256(day);\\\\n\\\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\\\n\\\\n        _days = uint256(__days);\\\\n    }\\\\n\\\\n    function timestampFromDateTime(\\\\n        uint256 year,\\\\n        uint256 month,\\\\n        uint256 day,\\\\n        uint256 hour,\\\\n        uint256 minute,\\\\n        uint256 second\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256 timestamp)\\\\n    {\\\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\\\n            + minute * SECONDS_PER_MINUTE + second;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x64f6113ad342f8bd3c2eb74fde279401d604faf77dd08f6c16c3912c3519f170\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/lib/StringArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title StringArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle String Arrays\\\\n */\\\\nlibrary StringArrayUtils {\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input string to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(string[] memory A, string memory a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (keccak256(bytes(A[i])) == keccak256(bytes(a))) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (type(uint256).max, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The string to remove\\\\n     */\\\\n    function removeStorage(string[] storage A, string memory a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"String not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\",\\\"keccak256\\\":\\\"0x249b6dc922e7e1602f3c2e77075d3b9d259d3badc744241ecf2ca2ee1cbcd56c\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/external/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/processors/ProxyBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { Claims } from \\\\\\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"../lib/AddressArrayUtils.sol\\\\\\\";\\\\nimport { StringArrayUtils } from \\\\\\\"../lib/StringArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../interfaces/INullifierRegistry.sol\\\\\\\";\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\nimport { ClaimVerifier } from \\\\\\\"../ClaimVerifier.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ProxyBaseProcessor is IProxyBaseProcessor, Ownable {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    using StringArrayUtils for string[];\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(address => bool) public isWitness;\\\\n    address[] public witnesses;\\\\n    mapping(string => bool) public isProviderHash;\\\\n    string[] public providerHashes;                         // Set of provider hashes that these proofs should be for\\\\n    INullifierRegistry public immutable nullifierRegistry;\\\\n\\\\n    /* ============ Events ============ */\\\\n    event WitnessAdded(address witness);\\\\n    event WitnessRemoved(address witness);\\\\n    event ProviderHashAdded(string providerHash);\\\\n    event ProviderHashRemoved(string providerHash);\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        INullifierRegistry _nulliferRegistry,\\\\n        string[] memory _providerHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        nullifierRegistry = _nulliferRegistry;\\\\n\\\\n        for (uint256 i = 0; i < _providerHashes.length; i++) {\\\\n            require(!isProviderHash[_providerHashes[i]], \\\\\\\"Provider hash already added\\\\\\\");\\\\n            isProviderHash[_providerHashes[i]] = true;\\\\n            providerHashes.push(_providerHashes[i]);\\\\n\\\\n            emit ProviderHashAdded(_providerHashes[i]);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add witness address. Witness must not have been previously added.\\\\n     *\\\\n     * @param _newWitness    Address of the new witness\\\\n     */\\\\n    function addWitness(address _newWitness) external onlyOwner {\\\\n        require(!isWitness[_newWitness], \\\\\\\"Address is already a witness\\\\\\\");\\\\n\\\\n        isWitness[_newWitness] = true;\\\\n        witnesses.push(_newWitness);\\\\n\\\\n        emit WitnessAdded(_newWitness);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove witness address. Witness must have been previously added.\\\\n     *\\\\n     * @param _removeWitness    Address of witness to be removed\\\\n     */\\\\n    function removeWitness(address _removeWitness) external onlyOwner {\\\\n        require(isWitness[_removeWitness], \\\\\\\"Address is not a witness\\\\\\\");\\\\n\\\\n        delete isWitness[_removeWitness];\\\\n        witnesses.removeStorage(_removeWitness);\\\\n\\\\n        emit WitnessRemoved(_removeWitness);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\\\n     *\\\\n     * @param _newProviderHash    New provider hash to be added\\\\n     */\\\\n    function addProviderHash(string memory _newProviderHash) external onlyOwner {\\\\n        require(!isProviderHash[_newProviderHash], \\\\\\\"Provider hash already added\\\\\\\");\\\\n\\\\n        isProviderHash[_newProviderHash] = true;\\\\n        providerHashes.push(_newProviderHash);\\\\n\\\\n        emit ProviderHashAdded(_newProviderHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\\\n     *\\\\n     * @param _removeProviderHash    Provider hash to be removed\\\\n     */\\\\n    function removeProviderHash(string memory _removeProviderHash) external onlyOwner {\\\\n        require(isProviderHash[_removeProviderHash], \\\\\\\"Provider hash not found\\\\\\\");\\\\n\\\\n        delete isProviderHash[_removeProviderHash];\\\\n        providerHashes.removeStorage(_removeProviderHash);\\\\n\\\\n        emit ProviderHashRemoved(_removeProviderHash);\\\\n    }\\\\n\\\\n    /* ============ Public Functions ============ */\\\\n    \\\\n    /**\\\\n     * Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters)\\\\n     * to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature. \\\\n     * This function verifies a claim by performing the following checks on the claim\\\\n     * - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim\\\\n     * - Checks if the signatures are valid and from the witnesses\\\\n     * This function reverts if\\\\n     * - No signatures are found on the proof\\\\n     * - Number of signatures is not equal to the number of witnesses\\\\n     * - ClaimInfo hash does not match the identifier in the claim\\\\n     * - Signatures are invalid (not from the witnesses)\\\\n     * \\\\n     * DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the \\\\n     * responsibility of the caller.\\\\n     * \\\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\\\n     *    \\\\n     * @param proof                 Proof to be verified\\\\n     */\\\\n    function verifyProofSignatures(Proof memory proof) public view returns (bool) {\\\\n\\\\n        // create signed claim using claimData and signature.\\\\n        require(proof.signedClaim.signatures.length > 0, \\\\\\\"No signatures\\\\\\\");\\\\n        Claims.SignedClaim memory signed = Claims.SignedClaim(\\\\n            proof.signedClaim.claim,\\\\n            proof.signedClaim.signatures\\\\n        );\\\\n\\\\n        // check if the hash from the claimInfo is equal to the infoHash in the claimData\\\\n        bytes32 hashed = Claims.hashClaimInfo(proof.claimInfo);\\\\n        require(proof.signedClaim.claim.identifier == hashed, \\\\\\\"ClaimInfo hash doesn't match\\\\\\\");\\\\n\\\\n        // Recover signers of the signed claim\\\\n        address[] memory signedWitnesses = Claims.recoverSignersOfSignedClaim(signed);\\\\n\\\\n        // check if the number of signatures is equal to the number of witnesses\\\\n        require(\\\\n            signedWitnesses.length == witnesses.length,\\\\n            \\\\\\\"Number of signatures not equal to number of witnesses\\\\\\\"\\\\n        );\\\\n\\\\n        // Check signatures are from witnesses\\\\n        for (uint256 i = 0; i < signed.signatures.length; i++) {\\\\n            bool found = false;\\\\n            for (uint j = 0; j < witnesses.length; j++) {\\\\n                if (signedWitnesses[i] == witnesses[j]) {\\\\n                    found = true;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            require(found, \\\\\\\"Signature not appropriate\\\\\\\");\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function getWitnesses() external view returns (address[] memory) {\\\\n        return witnesses;\\\\n    }\\\\n\\\\n    function getProviderHashes() external view returns (string[] memory) {\\\\n        return providerHashes;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProviderHash(string memory _providerHash) internal view returns (bool) {\\\\n        return isProviderHash[_providerHash];\\\\n    }\\\\n    \\\\n    function _validateAndAddNullifier(bytes[] memory _sigArray) internal {\\\\n        bytes32 nullifier = keccak256(abi.encode(_sigArray));\\\\n        require(!nullifierRegistry.isNullified(nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbfbe301dc003e40793876e36d29ac7da3b294031dc74d26f4e41fcdf3deb1144\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IVerifyDomainProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\nimport { IProxyBaseProcessor } from \\\\\\\"../external/interfaces/IProxyBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\\\n    \\\\n    struct DomainRaw {\\\\n        string name;\\\\n        uint256 expiryTime;\\\\n    }\\\\n\\\\n    function verifyProofs(\\\\n        Proof[] memory _proofs\\\\n    ) \\\\n        external  \\\\n        returns (DomainRaw[] memory domains);\\\\n}\\\",\\\"keccak256\\\":\\\"0xe66335a9d8fb3d03a9ee76bf44fbec775311aeed3f6666862f06124b6605a123\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c06040523462000051576200001f620000186200027f565b91620002a7565b6040516136af620008888239608051818181610b4a015261357d015260a0518181816108a50152610fff01526136af90f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200008e57604052565b62000056565b90620000ab620000a360405190565b92836200006c565b565b6001600160a01b031690565b90565b6001600160a01b0381165b036200005157565b90505190620000ab82620000bc565b6001600160a01b038116620000c7565b90505190620000ab82620000de565b6001600160401b0381116200008e5760208091020190565b6001600160401b0381116200008e57602090601f01601f19160190565b0190565b60005b8381106200014a5750506000910152565b818101518382015260200162000139565b90929192620001746200016e8262000115565b62000094565b938185526020850190828401116200005157620000ab9262000136565b9080601f8301121562000051578151620000b9926020016200015b565b929190620001c06200016e82620000fd565b9381855260208086019202810191838311620000515781905b838210620001e8575050505050565b81516001600160401b03811162000051576020916200020b878493870162000191565b815201910190620001d9565b9080601f8301121562000051578151620000b992602001620001ae565b9160608383031262000051576200024c8284620000cf565b926200025c8360208301620000ee565b60408201519093906001600160401b0381116200005157620000b9920162000217565b620002a262003f3780380380620002968162000094565b92833981019062000234565b909192565b91620002b391620006bb565b60a052565b620000b9620000b9620000b99290565b634e487b7160e01b600052601160045260246000fd5b6000198114620002ee5760010190565b620002c8565b634e487b7160e01b600052603260045260246000fd5b9062000314825190565b81101562000326576020809102010190565b620002f4565b62000132620003479260209262000341815190565b94859290565b9384910162000136565b620003646200013291602094936200032c565b918252565b620003816200037760405190565b9283928362000351565b03902090565b620000b99162000369565b156200039a57565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9060ff905b9181191691161790565b9062000401620000b96200040992151590565b8254620003df565b9055565b8054821015620003265762000429600191600052602060002090565b91020190600090565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801562000481575b60208310146200047b57565b62000448565b91607f16916200046f565b9160001960089290920291821b911b620003e4565b9190620004b6620000b96200040993620002b8565b9083546200048c565b620000ab91600091620004a1565b818110620004d9575050565b80620004e96000600193620004bf565b01620004cd565b9190601f81116200050057505050565b62000514620000ab93600052602060002090565b906020601f84018190048301931062000538575b6020601f909101040190620004cd565b909150819062000528565b906200054d815190565b906001600160401b0382116200008e5762000575826200056e85546200045e565b85620004f0565b602090601f8311600114620005b45762000409929160009183620005a8575b5050600019600883021c1916906002021790565b01519050388062000594565b601f19831691620005ca85600052602060002090565b9260005b8181106200060b57509160029391856001969410620005f1575b50505002019055565b01516000196008601f8516021c19169055388080620005e8565b91936020600181928787015181550195019201620005ce565b91906200063657620000ab9162000543565b62000432565b90815491680100000000000000008310156200008e578262000668916001620000ab950181556200040d565b9062000624565b620006946200069e602093620001329362000688815190565b80835293849260200190565b9586910162000136565b601f01601f191690565b6020808252620000b9929101906200066f565b919091620006c8620007c2565b608052620006d76000620002b8565b620006e4620000b9845190565b811015620007bd57620007b7906200074d60036200072c62000726620007226200071b62000713878b6200030a565b518562000387565b5460ff1690565b1590565b62000392565b620007476001916200073f85896200030a565b519062000387565b620003ee565b6200076760046200075f83876200030a565b51906200063c565b6200077381856200030a565b51620007ae7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f409691620007a460405190565b91829182620006a8565b0390a1620002de565b620006d7565b509050565b620000ab3362000825565b906001600160a01b0390620003e4565b620000b990620000ad906001600160a01b031682565b620000b990620007dd565b620000b990620007f3565b906200081d620000b96200040992620007fe565b8254620007cd565b6000546001600160a01b0316906200083f81600062000809565b620008766200086f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093620007fe565b91620007fe565b916200088160405190565b600090a356fe6080604052600436101561001257600080fd5b60003560e01c80631cba9bed146101225780632ca6927d1461011d57806350262c001461011857806357c6e12a1461011357806359e26be11461010e578063670a8cb714610109578063715018a6146101045780637b103999146100ff5780637de24fcf146100fa5780638da5cb5b146100f557806396d195bd146100f0578063b870676c146100eb578063bd6e7741146100e6578063c2107e73146100e1578063ee2f13cd146100dc578063f2fde38b146100d75763fa7643f4036101d457610c7e565b610c3c565b610c24565b610bfd565b610b6f565b610b31565b610acb565b610a40565b610a19565b610890565b610878565b610837565b6107d9565b61079d565b6105a6565b6102ef565b61021c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761015e57604052565b610127565b9061017761017060405190565b928361013d565b565b6001600160401b03811161015e57602090601f01601f19160190565b0190565b90826000939282370152565b909291926101ba6101b582610179565b610163565b938185526020850190828401116101d45761017792610199565b600080fd5b9080601f830112156101d4578160206101f4933591016101a5565b90565b906020828203126101d45781356001600160401b0381116101d4576101f492016101d9565b346101d45761023461022f3660046101f7565b612392565b604051005b0390f35b60005b8381106102505750506000910152565b8181015183820152602001610240565b61019561027892602092610272815190565b94859290565b9384910161023d565b9052565b6102956101959160209493610260565b918252565b6102af6102a660405190565b92839283610285565b03902090565b6101f49161029a565b6101f4916008021c5b60ff1690565b906101f491546102be565b6101f4906102ea6003916000926102b5565b6102cd565b346101d45761023961030a6103053660046101f7565b6102d8565b60405191829182901515815260200190565b9190916060818403126101d4576103336060610163565b9281356001600160401b0381116101d457816103509184016101d9565b845260208201356001600160401b0381116101d457816103719184016101d9565b602085015260408201356001600160401b0381116101d45761039392016101d9565b6040830152565b805b036101d457565b905035906101778261039a565b6001600160a01b031690565b6001600160a01b03811661039c565b90503590610177826103bc565b63ffffffff811661039c565b90503590610177826103d8565b9190916080818403126101d45761044a61040b6080610163565b93600061041882856103a3565b90860152602061042a828286016103cb565b90860152604061043c828286016103e4565b9086015260608093016103e4565b90830152565b6001600160401b03811161015e5760208091020190565b9291906104766101b582610450565b93818552602080860192028101918383116101d45781905b83821061049c575050505050565b81356001600160401b0381116101d4576020916104bc87849387016101d9565b81520191019061048e565b9080601f830112156101d4578160206101f493359101610467565b91909160a0818403126101d4576104f96040610163565b92600061050682846103f1565b9085015260808201356001600160401b0381116101d45761052792016104c7565b6020830152565b9190916040818403126101d4576105456040610163565b9281356001600160401b0381116101d4578161056291840161031c565b845260208201356001600160401b0381116101d45761052792016104e2565b906020828203126101d45781356001600160401b0381116101d4576101f4920161052e565b346101d45761023961030a6105bc366004610581565b6128f5565b906020828203126101d4576101f4916103a3565b634e487b7160e01b600052603260045260246000fd5b805482101561060e57610605600191600052602060002090565b91020190600090565b6105d5565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561065f575b602083101461065a57565b610629565b91607f169161064f565b8054600093929161068661067c8361063f565b8085529360200190565b91600181169081156106d8575060011461069f57505050565b6106b29192939450600052602060002090565b916000925b8184106106c45750500190565b8054848401526020909301926001016106b7565b92949550505060ff1916825215156020020190565b906101f491610669565b906101776107119261070860405190565b938480926106ed565b038361013d565b90600010610729576101f4906106f7565b610613565b6004600061073a825490565b83101561075557506101f49161074f916105eb565b90610718565b80fd5b6107796107826020936101959361076d815190565b80835293849260200190565b9586910161023d565b601f01601f191690565b60208082526101f492910190610758565b346101d4576102396107b86107b33660046105c1565b61072e565b6040515b9182918261078c565b906020828203126101d4576101f4916103cb565b346101d4576102346107ec3660046107c5565b611d4f565b6101f4916008021c6001600160a01b031690565b906101f491546107f1565b6002600061081c825490565b83101561075557506101f491610831916105eb565b90610805565b346101d45761023961085261084d3660046105c1565b610810565b6040515b918291826001600160a01b03909116815260200190565b60009103126101d457565b346101d45761088836600461086d565b610234610cee565b346101d4576108a036600461086d565b6102397f0000000000000000000000000000000000000000000000000000000000000000610852565b9291906108d86101b582610450565b93818552602080860192028101918383116101d45781905b8382106108fe575050505050565b81356001600160401b0381116101d45760209161091e878493870161052e565b8152019101906108f0565b9080601f830112156101d4578160206101f4933591016108c9565b906020828203126101d45781356001600160401b0381116101d4576101f49201610929565b906101f49060208061098a6040840160008701518582036000870152610758565b940151910152565b906101f491610969565b906109b26109a8835190565b8083529160200190565b90816109c46020830284019460200190565b926000915b8383106109d857505050505090565b909192939460206109fb6109f483856001950387528951610992565b9760200190565b93019301919392906109c9565b60208082526101f49291019061099c565b346101d457610239610a34610a2f366004610944565b610fed565b60405191829182610a08565b346101d457610a5036600461086d565b610239610852610cac565b90610a7b610a74610a6a845190565b8084529260200190565b9260200190565b9060005b818110610a8c5750505090565b909192610ab2610aab60019286516001600160a01b0316815260200190565b9460200190565b929101610a7f565b60208082526101f492910190610a5b565b346101d457610adb36600461086d565b610239610ae66133e7565b60405191829182610aba565b6101f4906103b0906001600160a01b031682565b6101f490610af2565b6101f490610b06565b61028190610b0f565b6020810192916101779190610b18565b346101d457610b4136600461086d565b604051806102397f000000000000000000000000000000000000000000000000000000000000000082610b21565b346101d457610234610b823660046101f7565b6122ce565b906101f491610758565b90610b9d6109a8835190565b9081610baf6020830284019460200190565b926000915b838310610bc357505050505090565b90919293946020610bdf6109f483856001950387528951610b87565b9301930191939290610bb4565b60208082526101f492910190610b91565b346101d457610c0d36600461086d565b610239610c1861344e565b60405191829182610bec565b346101d457610234610c373660046107c5565b611e51565b346101d457610234610c4f3660046107c5565b610e05565b90610c5e90610b0f565b600052602052604060002090565b6101f4906102ea600191600092610c54565b346101d45761023961030a610c943660046107c5565b610c6c565b6101f4906103b0565b6101f49054610c99565b6101f46000610ca2565b610cbe610d4a565b610177610cdc565b6103b06101f46101f49290565b6101f490610cc6565b610177610ce96000610cd3565b610e3e565b610177610cb6565b15610cfd57565b60405162461bcd60e51b815280610d46600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b610177610d55610cac565b610d6e610d61336103b0565b916001600160a01b031690565b14610cf6565b61017790610d80610d4a565b610de0565b15610d8c57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61017790610ce9610df46103b06000610cd3565b6001600160a01b0383161415610d85565b61017790610d74565b906001600160a01b03905b9181191691161790565b90610e336101f4610e3a92610b0f565b8254610e0e565b9055565b610e486000610ca2565b90610e54816000610e23565b610e87610e817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610b0f565b91610b0f565b91610e9160405190565b600090a3565b15610e9e57565b60405162461bcd60e51b815260206004820152601660248201527513db9b1e481c9959da5cdd1c9e4818d85b8818d85b1b60521b6044820152606490fd5b906102956101b583610450565b6101f46040610163565b610efb610ee9565b906060825260006020830152565b6101f4610ef3565b60005b828110610f2057505050565b602090610f2b610f09565b8184015201610f14565b90610177610f4b610f4584610edc565b93610450565b601f190160208401610f11565b6101f46101f46101f49290565b634e487b7160e01b600052601160045260246000fd5b6000198114610f8a5760010190565b610f65565b90610f98825190565b81101561060e576020809102010190565b15610fb057565b60405162461bcd60e51b815260206004820152601560248201527409cde40ecc2d8d2c840e0e4deecd2c8cae490c2e6d605b1b6044820152606490fd5b9061102a336110246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610d61565b14610e97565b61103a611035835190565b610f35565b916000908361104883610f58565b6110536101f4845190565b8110156110de578061109e6110be6110ac6110996110a760208061107a6110d9998c610f8f565b51611084816128f5565b5061108e81611221565b999199969096613458565b610fa9565b01510151613550565b6113f1565b6105276110b7610ee9565b9389850152565b6110c88289610f8f565b526110d38188610f8f565b50610f7b565b611048565b5093505050565b6102c76101f46101f49290565b6101f460056110e5565b9092919261110c6101b582610179565b938185526020850190828401116101d4576101779261023d565b9080601f830112156101d45781516101f4926020016110fc565b92919061114f6101b582610450565b93818552602080860192028101918383116101d45781905b838210611175575050505050565b81516001600160401b0381116101d4576020916111958784938701611126565b815201910190611167565b9080601f830112156101d45781516101f492602001611140565b906020828203126101d45781516001600160401b0381116101d4576101f492016111a0565b60409061120d6112016101779597969460608401908482036000860152610758565b60ff9097166020830152565b019015159052565b6040513d6000823e3d90fd5b51604001517371D6e2056e7138F1F489EE98658D4832348b343591634be6d4f89160009061124d6110f2565b9461126e6001956112798761126160405190565b998a968795869560e01b90565b8552600485016111df565b03915af49283156112f2576000936112cf575b506112c86112b66112b06112a96112a36000610f58565b87610f8f565b5194610f58565b85610f8f565b51936112c26002610f58565b90610f8f565b5191929190565b6112eb91933d8091833e6112e3818361013d565b8101906111ba565b913861128c565b611215565b6001600160401b03811161015e5760200290565b6101b56101f4916112f7565b60005b82811061132657505050565b60608282015260200161131a565b9061017761134a6113448461130b565b936112f7565b83611317565b6101f46006611334565b90611363825190565b81101561060e570160200190565b61138461137e6101f49290565b60f81b90565b6001600160f81b03191690565b90600681101561060e576020020190565b91908201809211610f8a57565b156113b657565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606490fd5b906000916113fd611350565b8390600061140a81610f58565b846114166101f4825190565b82101561150a578161143961142b828461135a565b516001600160f81b03191690565b611454611446602d611371565b916001600160f81b03191690565b149182156114e7575b82156114c3575b5050611479575b61147490610f7b565b61140a565b9295836114869186611b86565b6114908784611391565b5261149b8683611391565b506114746114bb6114b56114af6001610f58565b866113a2565b97610f7b565b93905061146b565b6114d292509061142b9161135a565b6114df6114466054611371565b148138611464565b91506114f661142b828461135a565b611503611446603a611371565b149161145d565b5050929161152f61155c92936101f496976115296115258390565b5190565b91611b86565b6115398285611391565b526115448184611391565b506115566115526005610f58565b9190565b146113af565b61158261157b61157461156e85610f58565b84611391565b5193610f58565b8093611905565b9061159a8361159461156e6001610f58565b51611905565b6115b1846115946115ab6002610f58565b85611391565b906115e1856115946115d0826115946115ca6003610f58565b89611391565b956115db6004610f58565b90611391565b9361161b565b6101f462015180610f58565b81810292918115918404141715610f8a57565b6101f4610e10610f58565b6101f4603c610f58565b61166a9361165b6116526116446101f499989661165b966116619661163e600090565b50611712565b61164c6115e7565b906115f3565b9161164c611606565b906113a2565b9161164c611611565b6113a2565b156101d457565b91908083039260009091128015828513169184121617610f8a57565b919082810192600013801591841291821691151617610f8a57565b634e487b7160e01b600052601260045260246000fd5b81156116de57600160ff1b8114600019831416610f8a570590565b6116ad565b8181029291600160ff1b81146000831216610f8a578184051490151715610f8a57565b6101f462253d8c610f58565b61171d6107b2610f58565b8110156117299061166f565b61173290610f58565b9061173c90610f58565b9161174690610f58565b611751617d4b610f58565b61175a91611676565b906105b56117696112c0610f58565b6117739083611692565b600e9161177f83610f58565b6117899087611676565b91600c9261179684610f58565b61179f916116c3565b6117a891611692565b906117b290610f58565b906117bc916116e3565b936004946117c986610f58565b6117d2916116c3565b6117db91611692565b61016f6117e86002610f58565b6117f29088611676565b6117fb85610f58565b6118059089611676565b61180e85610f58565b611817916116c3565b61182085610f58565b611829916116e3565b61183291611676565b9061183c90610f58565b90611846916116e3565b61184f83610f58565b611858916116c3565b61186191611692565b94600393611870611324610f58565b61187991611692565b9261188390610f58565b61188c91611676565b9061189690610f58565b61189f916116c3565b6118a891611692565b6118b26064610f58565b6118bb916116c3565b906118c590610f58565b906118cf916116e3565b906118d990610f58565b6118e2916116c3565b6118eb91611676565b6118f3611706565b6118fc91611676565b6101f490610f58565b6101f49190611914602e611371565b90611a04565b6102c76101f46101f49260ff1690565b6101f49060f81c61191a565b6101f46101f46101f49260ff1690565b91908203918211610f8a57565b1561195a57565b60405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606490fd5b156119a657565b60405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608490fd5b604d8111610f8a57600a0a90565b92600091611a1183610f58565b808493815b611a216101f48a5190565b811015611b22578589611a3761142b848361135a565b603090611a4661144683611371565b101580611b00575b611ab6575b5050611aa6575b611a6761142b828b61135a565b611a7a6001600160f81b03198716611446565b14611a8e575b611a8990610f7b565b611a16565b94611a9e90151587151514611953565b600194611a80565b92611ab090610f7b565b92611a5a565b61165b90611af2611aec611ae7611ae261142b89611adc611af89a9d61164c600a610f58565b9861135a565b61192a565b611936565b91610f58565b90611946565b928938611a53565b50611b0e61142b858461135a565b611b1b6114466039611371565b1115611a4e565b509650935061164c9250611b4c91506101f494611b47611b3f8290565b83111561199f565b611946565b6119f6565b906102956101b583610179565b369037565b90610177611b79611b7384611b51565b93610179565b601f190160208401611b5e565b909290611b9b611b968585611946565b611b63565b91845b845b811015611be057611bd981611bbb61142b611ba0948761135a565b611bd3611bc88a84611946565b9160001a918861135a565b53610f7b565b9050611b9e565b509350506101f4915090565b61017790611bf8610d4a565b611cdc565b6101f4906102c7565b6101f49054611bfd565b15611c1757565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320697320616c72656164792061207769746e657373000000006044820152606490fd5b9060ff90610e19565b90611c756101f4610e3a92151590565b8254611c5c565b916001600160a01b0360089290920291821b911b610e19565b921b90565b9190611cab6101f4610e3a93610b0f565b908354611c7c565b90815491600160401b83101561015e5782611cd6916001610177950181556105eb565b90611c9a565b611d116001611d02611cfd611cf9611cf48685610c54565b611c06565b1590565b611c10565b611d0c8382610c54565b611c65565b611d1c816002611cb3565b611d4a7ff5944521c155e80db583372b9992336b6616b14dfb924a5cf6ef97b256d280349161085660405190565b0390a1565b61017790611bec565b61017790611d64610d4a565b611dee565b15611d7057565b60405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f742061207769746e65737300000000000000006044820152606490fd5b91906008610e19910291611c9560ff841b90565b9190611dda6101f4610e3a93151590565b908354611db5565b61017791600091611dc9565b611e186000611e13836001611e0e611e09611cf48484610c54565b611d69565b610c54565b611de2565b611e23816002611f32565b611d4a7f8b5785dce93ca82765b1cc25cedcda1b501288cb23a1fd171c0091d83900f9bd9161085660405190565b61017790611d58565b90611e75611e69610a6a845490565b92600052602060002090565b9060005b818110611e865750505090565b909192611eb3611eac600192611e9b87610ca2565b6001600160a01b0316815260200190565b9460010190565b929101611e79565b906101f491611e5a565b9061017761071192611ed660405190565b93848092611ebb565b6101f490611ec5565b634e487b7160e01b600052603160045260246000fd5b61017791600091611c9a565b80548015611f2d576000190190611f2a611f2483836105eb565b90611efe565b55565b611ee8565b611f47611f4e92611f4283611edf565b611fe5565b9092901590565b15611f905760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b61017791611fa9611f9f835490565b611af26001610f58565b90818103611fb9575b5050611f0a565b611cd6611fcc610831611fd394866105eb565b91846105eb565b3880611fb2565b6101f4600019610f58565b91908251926000611ff581610f58565b855b81101561204c5761201861200b8285610f8f565b516001600160a01b031690565b61202a6001600160a01b038616610d61565b146120425761203b611ff791610f7b565b9050611ff5565b9450505050600190565b5093505050611552611fda565b61017790612065610d4a565b61226c565b1561207157565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9160001960089290920291821b911b610e19565b91906120db6101f4610e3a93610f58565b9083546120b6565b610177916000916120ca565b8181106120fa575050565b8061210860006001936120e3565b016120ef565b9190601f811161211d57505050565b61212f61017793600052602060002090565b906020601f840181900483019310612152575b6020601f909101045b01906120ef565b9091508190612142565b600019600883021c1916906002021790565b90612177815190565b906001600160401b03821161015e5761219a82612194855461063f565b8561210e565b602090601f83116001146121c857610e3a9291600091836121bd575b505061215c565b0151905038806121b6565b601f198316916121dd85600052602060002090565b9260005b81811061221c57509160029391856001969410612202575b50505002019055565b01516000196008601f8516021c19165b90553880806121f9565b919360206001819287870151815501950192016121e1565b9190610729576101779161216e565b90815491600160401b83101561015e5782612266916001610177950181556105eb565b90612234565b6122956003612289612284611cf9611cf486856102b5565b61206a565b611d0c836001926102b5565b6122a0816004612243565b611d4a7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096916107bc60405190565b61017790612059565b610177906122e3610d4a565b612334565b156122ef57565b60405162461bcd60e51b815260206004820152601760248201527f50726f76696465722068617368206e6f7420666f756e640000000000000000006044820152606490fd5b6123596000611e1383600361235461234f611cf484846102b5565b6122e8565b6102b5565b6123648160046126aa565b611d4a7f6f594b4b4f0580c66aabba75218163a99fa1fe330a171cc9e2bfd8e167db22f8916107bc60405190565b610177906122d7565b6101f4906106f7565b906123ad825490565b6123b681610edc565b926123ca6020850191600052602060002090565b6000915b8383106123db5750505050565b6001602081926123ea8561239b565b8152019201920191906123ce565b6101f4906123a4565b6101f4905461063f565b908082146124da5761241c81612401565b906001600160401b03821161015e5761243982612194855461063f565b600090601f831160011461246657610e3a92916000918361245b57505061215c565b0154905038806121b6565b9061247b601f19841692600052602060002090565b9061248b85600052602060002090565b92815b8181106124c2575091600293918560019694106124ae5750505002019055565b01546000196008601f8516021c1916612212565b9193600180602092878701548155019501920161248e565b5050565b9190610729576101779161240b565b9061250090600019906020036008021c90565b8154169055565b9060009161252561251d82600052602060002090565b92835461215c565b905555565b919290602082101561258257601f841160011461254c57610e3a92935061215c565b509061257d61017793600161257461256985600052602060002090565b92601f602091010490565b820191016120ef565b612507565b506125bb8293612599600194600052602060002090565b61214b6020601f860104820192601f8616806125c3575b50601f602091010490565b600202179055565b6125cf908886036124ed565b386125b0565b929091600160401b821161015e576020111561261c5760208110156125fd57610e3a9161215c565b60019160ff191661261384600052602060002090565b55600202019055565b60019150600202019055565b9081546126348161063f565b9081831161265d575b81831061264b575b50505050565b6126549361252a565b38808080612645565b612669838383876125d5565b61263d565b600061017791612628565b90600003610729576101779061266e565b80548015611f2d576000190190611f2a6126a483836105eb565b90612679565b611f476126bf926126ba836123f8565b612744565b156127005760405162461bcd60e51b815260206004820152601460248201527329ba3934b733903737ba1034b71030b93930bc9760611b6044820152606490fd5b6101779161270f611f9f835490565b9081810361271f575b505061268a565b61273761272f61273d93856105eb565b5091846105eb565b906124de565b3880612718565b9190825192600061275481610f58565b855b8110156127ac5761276a6115258285610f8f565b61277c612775825190565b9160200190565b20612794611552865b612790612775825190565b2090565b14612042576127a561275691610f7b565b9050612754565b509350505081199190565b156127be57565b60405162461bcd60e51b815260206004820152600d60248201526c4e6f207369676e61747572657360981b6044820152606490fd5b156127fa57565b60405162461bcd60e51b815260206004820152601c60248201527f436c61696d496e666f206861736820646f65736e2774206d61746368000000006044820152606490fd5b1561284657565b60405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207369676e617475726573206e6f7420657175616c20746044820152746f206e756d626572206f66207769746e657373657360581b6064820152608490fd5b156128b057565b60405162461bcd60e51b815260206004820152601960248201527f5369676e6174757265206e6f7420617070726f707269617465000000000000006044820152606490fd5b906020820190815160200151612909905190565b9160009261291684610f58565b10612920906127b7565b828080808451015196845160200151612937610ee9565b98838a01906129439152565b6020890152015161295390612efe565b925101510161296190611525565b1461296b906127f3565b61297483612a5b565b805191600292612982845490565b1461298c9061283f565b61299584610f58565b935b6129a66101f460208801515190565b851015612a405780956129b882610f58565b6129c36101f4875490565b811015612a28576129d761200b8887610f8f565b6129ea610d616103b0610831858b6105eb565b146129fd576129f890610f7b565b6129b8565b50946129a69196506020612a1d6101f492612a1860016128a9565b610f7b565b969792505050612997565b50946020612a1d6101f492612a186129a6959a6128a9565b509350505050600190565b90610177611b79610f4584610edc565b6020612a6a6000830151612b2b565b910190612a7e612a7983515190565b612a4b565b91612a896000610f58565b612a956101f483515190565b811015612ad55780612a18612ab8612ab1612ad0948651610f8f565b5186612c02565b612ac28388610f8f565b906001600160a01b03169052565b612a89565b50505090565b610195816020939052565b6101f46101f46101f49263ffffffff1690565b92612b25612b18612b2594612b25612b186101f49998612b1897610260565b600560f91b815260010190565b90610260565b6101f4612b67612b3a83611525565b612b62612b4660405190565b8092612b56602083019182612adb565b9081038252038261013d565b613130565b612b83612b7e60208501516001600160a01b031690565b612fb9565b90612b56612bbf612bae612ba96060612bb3612bae612ba960408c015163ffffffff1690565b612ae6565b61329e565b98015163ffffffff1690565b604051958694602086019485612af9565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526101f49291612b2591601a0182565b90612b56612c326101f493612c15600090565b50612c21612bae825190565b604051938492602084019283612bd0565b612c3d612775825190565b206101f491612c4b91612dc1565b919091612c82565b634e487b7160e01b600052602160045260246000fd5b60051115612c7357565b612c53565b9061017782612c69565b612c8c6000612c78565b612c9582612c78565b03612c9d5750565b612ca76001612c78565b612cb082612c78565b03612cfa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b612d046002612c78565b612d0d82612c78565b03612d575760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b612d6a612d646003612c78565b91612c78565b14612d7157565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b908051612dd16115526041610f58565b03612df757612df3916020820151906060604084015193015160001a90612e36565b9091565b5050612e036000610cd3565b90600290565b612e3261017794610393606094989795612e28608086019a6000870152565b60ff166020850152565b0152565b919291612e42836118fc565b612e6e6115527f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610f58565b11612ed257612e8e600093602095612e8560405190565b94859485612e09565b838052039060015afa156112f25760005190600091612eac83610cd3565b6001600160a01b0381166001600160a01b03831614612eca57509190565b925050600190565b50505050612ee06000610cd3565b90600390565b6101f49392612b25612b18612b1893612b2595610260565b8051602082015160409283015192516127859290612b5690948593602085019384612ee6565b6101f49081906001600160a01b031681565b60ff8111610f8a5760020a90565b905b9081156116de570490565b61138461137e6101f49260ff1690565b612f469060ff165b9160ff1690565b612f7c9060ff16612f69565b029060ff8216918203610f8a57565b612f979060ff16612f69565b90039060ff8211610f8a57565b61060f60f31b81526101f49190600201612b25565b90612fc7611b966028610f58565b600092612fd384610f58565b612fdd6014610f58565b8110156130d45780613037611bd36130c56130bb6130cf956130376130b58c8b6130af613051611ae261304c8f61301e61301961304792610b06565b612f24565b61304161303c6008613037611aec8f611b476013610f58565b6115f3565b612f36565b90612f44565b6110e5565b612f51565b9261309a61309461304c60109661308e61307661304c6130708b6110e5565b84612f61565b986130896130838b61192a565b916110e5565b612f70565b90612f8b565b9461323a565b6130a78860029d8e610f58565b911a9261135a565b5361323a565b95610f58565b61165b6001610f58565b91881a918661135a565b612fd3565b50506101f49192506101f46130e860405190565b8092612b56602083019182612fa4565b6131026010611b51565b6f181899199a1a9b1b9c1cb0b131b232b360811b602082015290565b6101f46130f8565b81156116de570690565b90815191613146611b9660029461164c86610f58565b9061314f61311e565b60009161315b83610f58565b6131666101f4835190565b81101561320c57806131a661142b6131a061318a611ae261142b613207978961135a565b61319b613195895190565b91611936565b612f44565b8661135a565b6131c56131bb6131b58b610f58565b846115f3565b91871a918861135a565b536131ef61142b6131a06131df611ae261142b868961135a565b6131ea613195895190565b613126565b611bd36131bb6130bb6132018c610f58565b856115f3565b61315b565b505050506101f49192506101f46130e860405190565b61322e9060ff16612f69565b019060ff8211610f8a57565b6132439061192a565b61324d600a6110e5565b60ff8216101561326e5761304c6101f49161326860306110e5565b90613222565b61304c6101f49161326860576110e5565b6132896001611b51565b600360fc1b602082015290565b6101f461327f565b6000916132aa83610f58565b821461337257908060005b6132be85610f58565b83146132e1576132d06132db91610f7b565b92613041600a610f58565b916132b5565b91506132ec82611b63565b915b6132f785610f58565b82146133675761330e61336191611af26001610f58565b91613041600a8461335b61335261304c603061334d61308361304761334761333e6133388b610f58565b8d612f44565b61164c8b610f58565b8b611946565b613222565b8a1a918861135a565b53610f58565b906132ee565b50506101f491925090565b9150506101f4613296565b9061338c611e69610a6a845490565b9060005b81811061339d5750505090565b9091926133b2611eac600192611e9b87610ca2565b929101613390565b906101f49161337d565b90610177610711926133d560405190565b938480926133ba565b6101f4906133c4565b6101f460026133de565b906133fa825490565b61340381610edc565b926134176020850191600052602060002090565b6000915b8383106134285750505050565b6001602081926134378561239b565b81520192019201919061341b565b6101f4906133f1565b6101f46004613445565b611cf46101f491613467600090565b5060036102b5565b9061347b6109a8835190565b908161348d6020830284019460200190565b926000915b8383106134a157505050505090565b909192939460206134bd6109f483856001950387528951610b87565b9301930191939290613492565b60208082526101f49291019061346f565b80151561039c565b90505190610177826134db565b906020828203126101d4576101f4916134e3565b1561350b57565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b61356c61355c60405190565b8092612b566020830191826134ca565b613577612775825190565b206135a17f0000000000000000000000000000000000000000000000000000000000000000610b0f565b9063169394bb6135ba6135b360405190565b9160e01b90565b815260048101829052602081602481865afa9081156112f2576135ec916135e79160009161365157501590565b613504565b635bd4df3290823b156101d4576136289261361a6000809461360d60405190565b9687958694859360e01b90565b835260048301526024820190565b03925af180156112f2576136395750565b610177906000613649818361013d565b81019061086d565b611cf9915060203d8111613672575b61366a818361013d565b8101906134f0565b503d61366056fea2646970667358221220ac32ca16a78f612ec68240d59214076e1784464c21ff8fabfeff4b46fd239e1c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x6080604052600436101561001257600080fd5b60003560e01c80631cba9bed146101225780632ca6927d1461011d57806350262c001461011857806357c6e12a1461011357806359e26be11461010e578063670a8cb714610109578063715018a6146101045780637b103999146100ff5780637de24fcf146100fa5780638da5cb5b146100f557806396d195bd146100f0578063b870676c146100eb578063bd6e7741146100e6578063c2107e73146100e1578063ee2f13cd146100dc578063f2fde38b146100d75763fa7643f4036101d457610c7e565b610c3c565b610c24565b610bfd565b610b6f565b610b31565b610acb565b610a40565b610a19565b610890565b610878565b610837565b6107d9565b61079d565b6105a6565b6102ef565b61021c565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761015e57604052565b610127565b9061017761017060405190565b928361013d565b565b6001600160401b03811161015e57602090601f01601f19160190565b0190565b90826000939282370152565b909291926101ba6101b582610179565b610163565b938185526020850190828401116101d45761017792610199565b600080fd5b9080601f830112156101d4578160206101f4933591016101a5565b90565b906020828203126101d45781356001600160401b0381116101d4576101f492016101d9565b346101d45761023461022f3660046101f7565b612392565b604051005b0390f35b60005b8381106102505750506000910152565b8181015183820152602001610240565b61019561027892602092610272815190565b94859290565b9384910161023d565b9052565b6102956101959160209493610260565b918252565b6102af6102a660405190565b92839283610285565b03902090565b6101f49161029a565b6101f4916008021c5b60ff1690565b906101f491546102be565b6101f4906102ea6003916000926102b5565b6102cd565b346101d45761023961030a6103053660046101f7565b6102d8565b60405191829182901515815260200190565b9190916060818403126101d4576103336060610163565b9281356001600160401b0381116101d457816103509184016101d9565b845260208201356001600160401b0381116101d457816103719184016101d9565b602085015260408201356001600160401b0381116101d45761039392016101d9565b6040830152565b805b036101d457565b905035906101778261039a565b6001600160a01b031690565b6001600160a01b03811661039c565b90503590610177826103bc565b63ffffffff811661039c565b90503590610177826103d8565b9190916080818403126101d45761044a61040b6080610163565b93600061041882856103a3565b90860152602061042a828286016103cb565b90860152604061043c828286016103e4565b9086015260608093016103e4565b90830152565b6001600160401b03811161015e5760208091020190565b9291906104766101b582610450565b93818552602080860192028101918383116101d45781905b83821061049c575050505050565b81356001600160401b0381116101d4576020916104bc87849387016101d9565b81520191019061048e565b9080601f830112156101d4578160206101f493359101610467565b91909160a0818403126101d4576104f96040610163565b92600061050682846103f1565b9085015260808201356001600160401b0381116101d45761052792016104c7565b6020830152565b9190916040818403126101d4576105456040610163565b9281356001600160401b0381116101d4578161056291840161031c565b845260208201356001600160401b0381116101d45761052792016104e2565b906020828203126101d45781356001600160401b0381116101d4576101f4920161052e565b346101d45761023961030a6105bc366004610581565b6128f5565b906020828203126101d4576101f4916103a3565b634e487b7160e01b600052603260045260246000fd5b805482101561060e57610605600191600052602060002090565b91020190600090565b6105d5565b634e487b7160e01b600052600060045260246000fd5b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561065f575b602083101461065a57565b610629565b91607f169161064f565b8054600093929161068661067c8361063f565b8085529360200190565b91600181169081156106d8575060011461069f57505050565b6106b29192939450600052602060002090565b916000925b8184106106c45750500190565b8054848401526020909301926001016106b7565b92949550505060ff1916825215156020020190565b906101f491610669565b906101776107119261070860405190565b938480926106ed565b038361013d565b90600010610729576101f4906106f7565b610613565b6004600061073a825490565b83101561075557506101f49161074f916105eb565b90610718565b80fd5b6107796107826020936101959361076d815190565b80835293849260200190565b9586910161023d565b601f01601f191690565b60208082526101f492910190610758565b346101d4576102396107b86107b33660046105c1565b61072e565b6040515b9182918261078c565b906020828203126101d4576101f4916103cb565b346101d4576102346107ec3660046107c5565b611d4f565b6101f4916008021c6001600160a01b031690565b906101f491546107f1565b6002600061081c825490565b83101561075557506101f491610831916105eb565b90610805565b346101d45761023961085261084d3660046105c1565b610810565b6040515b918291826001600160a01b03909116815260200190565b60009103126101d457565b346101d45761088836600461086d565b610234610cee565b346101d4576108a036600461086d565b6102397f0000000000000000000000000000000000000000000000000000000000000000610852565b9291906108d86101b582610450565b93818552602080860192028101918383116101d45781905b8382106108fe575050505050565b81356001600160401b0381116101d45760209161091e878493870161052e565b8152019101906108f0565b9080601f830112156101d4578160206101f4933591016108c9565b906020828203126101d45781356001600160401b0381116101d4576101f49201610929565b906101f49060208061098a6040840160008701518582036000870152610758565b940151910152565b906101f491610969565b906109b26109a8835190565b8083529160200190565b90816109c46020830284019460200190565b926000915b8383106109d857505050505090565b909192939460206109fb6109f483856001950387528951610992565b9760200190565b93019301919392906109c9565b60208082526101f49291019061099c565b346101d457610239610a34610a2f366004610944565b610fed565b60405191829182610a08565b346101d457610a5036600461086d565b610239610852610cac565b90610a7b610a74610a6a845190565b8084529260200190565b9260200190565b9060005b818110610a8c5750505090565b909192610ab2610aab60019286516001600160a01b0316815260200190565b9460200190565b929101610a7f565b60208082526101f492910190610a5b565b346101d457610adb36600461086d565b610239610ae66133e7565b60405191829182610aba565b6101f4906103b0906001600160a01b031682565b6101f490610af2565b6101f490610b06565b61028190610b0f565b6020810192916101779190610b18565b346101d457610b4136600461086d565b604051806102397f000000000000000000000000000000000000000000000000000000000000000082610b21565b346101d457610234610b823660046101f7565b6122ce565b906101f491610758565b90610b9d6109a8835190565b9081610baf6020830284019460200190565b926000915b838310610bc357505050505090565b90919293946020610bdf6109f483856001950387528951610b87565b9301930191939290610bb4565b60208082526101f492910190610b91565b346101d457610c0d36600461086d565b610239610c1861344e565b60405191829182610bec565b346101d457610234610c373660046107c5565b611e51565b346101d457610234610c4f3660046107c5565b610e05565b90610c5e90610b0f565b600052602052604060002090565b6101f4906102ea600191600092610c54565b346101d45761023961030a610c943660046107c5565b610c6c565b6101f4906103b0565b6101f49054610c99565b6101f46000610ca2565b610cbe610d4a565b610177610cdc565b6103b06101f46101f49290565b6101f490610cc6565b610177610ce96000610cd3565b610e3e565b610177610cb6565b15610cfd57565b60405162461bcd60e51b815280610d46600482016020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b0390fd5b610177610d55610cac565b610d6e610d61336103b0565b916001600160a01b031690565b14610cf6565b61017790610d80610d4a565b610de0565b15610d8c57565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b61017790610ce9610df46103b06000610cd3565b6001600160a01b0383161415610d85565b61017790610d74565b906001600160a01b03905b9181191691161790565b90610e336101f4610e3a92610b0f565b8254610e0e565b9055565b610e486000610ca2565b90610e54816000610e23565b610e87610e817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610b0f565b91610b0f565b91610e9160405190565b600090a3565b15610e9e57565b60405162461bcd60e51b815260206004820152601660248201527513db9b1e481c9959da5cdd1c9e4818d85b8818d85b1b60521b6044820152606490fd5b906102956101b583610450565b6101f46040610163565b610efb610ee9565b906060825260006020830152565b6101f4610ef3565b60005b828110610f2057505050565b602090610f2b610f09565b8184015201610f14565b90610177610f4b610f4584610edc565b93610450565b601f190160208401610f11565b6101f46101f46101f49290565b634e487b7160e01b600052601160045260246000fd5b6000198114610f8a5760010190565b610f65565b90610f98825190565b81101561060e576020809102010190565b15610fb057565b60405162461bcd60e51b815260206004820152601560248201527409cde40ecc2d8d2c840e0e4deecd2c8cae490c2e6d605b1b6044820152606490fd5b9061102a336110246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610d61565b14610e97565b61103a611035835190565b610f35565b916000908361104883610f58565b6110536101f4845190565b8110156110de578061109e6110be6110ac6110996110a760208061107a6110d9998c610f8f565b51611084816128f5565b5061108e81611221565b999199969096613458565b610fa9565b01510151613550565b6113f1565b6105276110b7610ee9565b9389850152565b6110c88289610f8f565b526110d38188610f8f565b50610f7b565b611048565b5093505050565b6102c76101f46101f49290565b6101f460056110e5565b9092919261110c6101b582610179565b938185526020850190828401116101d4576101779261023d565b9080601f830112156101d45781516101f4926020016110fc565b92919061114f6101b582610450565b93818552602080860192028101918383116101d45781905b838210611175575050505050565b81516001600160401b0381116101d4576020916111958784938701611126565b815201910190611167565b9080601f830112156101d45781516101f492602001611140565b906020828203126101d45781516001600160401b0381116101d4576101f492016111a0565b60409061120d6112016101779597969460608401908482036000860152610758565b60ff9097166020830152565b019015159052565b6040513d6000823e3d90fd5b516040015173__$5b71c94e19686701747fb081826a62a8ff$__91634be6d4f89160009061124d6110f2565b9461126e6001956112798761126160405190565b998a968795869560e01b90565b8552600485016111df565b03915af49283156112f2576000936112cf575b506112c86112b66112b06112a96112a36000610f58565b87610f8f565b5194610f58565b85610f8f565b51936112c26002610f58565b90610f8f565b5191929190565b6112eb91933d8091833e6112e3818361013d565b8101906111ba565b913861128c565b611215565b6001600160401b03811161015e5760200290565b6101b56101f4916112f7565b60005b82811061132657505050565b60608282015260200161131a565b9061017761134a6113448461130b565b936112f7565b83611317565b6101f46006611334565b90611363825190565b81101561060e570160200190565b61138461137e6101f49290565b60f81b90565b6001600160f81b03191690565b90600681101561060e576020020190565b91908201809211610f8a57565b156113b657565b60405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606490fd5b906000916113fd611350565b8390600061140a81610f58565b846114166101f4825190565b82101561150a578161143961142b828461135a565b516001600160f81b03191690565b611454611446602d611371565b916001600160f81b03191690565b149182156114e7575b82156114c3575b5050611479575b61147490610f7b565b61140a565b9295836114869186611b86565b6114908784611391565b5261149b8683611391565b506114746114bb6114b56114af6001610f58565b866113a2565b97610f7b565b93905061146b565b6114d292509061142b9161135a565b6114df6114466054611371565b148138611464565b91506114f661142b828461135a565b611503611446603a611371565b149161145d565b5050929161152f61155c92936101f496976115296115258390565b5190565b91611b86565b6115398285611391565b526115448184611391565b506115566115526005610f58565b9190565b146113af565b61158261157b61157461156e85610f58565b84611391565b5193610f58565b8093611905565b9061159a8361159461156e6001610f58565b51611905565b6115b1846115946115ab6002610f58565b85611391565b906115e1856115946115d0826115946115ca6003610f58565b89611391565b956115db6004610f58565b90611391565b9361161b565b6101f462015180610f58565b81810292918115918404141715610f8a57565b6101f4610e10610f58565b6101f4603c610f58565b61166a9361165b6116526116446101f499989661165b966116619661163e600090565b50611712565b61164c6115e7565b906115f3565b9161164c611606565b906113a2565b9161164c611611565b6113a2565b156101d457565b91908083039260009091128015828513169184121617610f8a57565b919082810192600013801591841291821691151617610f8a57565b634e487b7160e01b600052601260045260246000fd5b81156116de57600160ff1b8114600019831416610f8a570590565b6116ad565b8181029291600160ff1b81146000831216610f8a578184051490151715610f8a57565b6101f462253d8c610f58565b61171d6107b2610f58565b8110156117299061166f565b61173290610f58565b9061173c90610f58565b9161174690610f58565b611751617d4b610f58565b61175a91611676565b906105b56117696112c0610f58565b6117739083611692565b600e9161177f83610f58565b6117899087611676565b91600c9261179684610f58565b61179f916116c3565b6117a891611692565b906117b290610f58565b906117bc916116e3565b936004946117c986610f58565b6117d2916116c3565b6117db91611692565b61016f6117e86002610f58565b6117f29088611676565b6117fb85610f58565b6118059089611676565b61180e85610f58565b611817916116c3565b61182085610f58565b611829916116e3565b61183291611676565b9061183c90610f58565b90611846916116e3565b61184f83610f58565b611858916116c3565b61186191611692565b94600393611870611324610f58565b61187991611692565b9261188390610f58565b61188c91611676565b9061189690610f58565b61189f916116c3565b6118a891611692565b6118b26064610f58565b6118bb916116c3565b906118c590610f58565b906118cf916116e3565b906118d990610f58565b6118e2916116c3565b6118eb91611676565b6118f3611706565b6118fc91611676565b6101f490610f58565b6101f49190611914602e611371565b90611a04565b6102c76101f46101f49260ff1690565b6101f49060f81c61191a565b6101f46101f46101f49260ff1690565b91908203918211610f8a57565b1561195a57565b60405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606490fd5b156119a657565b60405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608490fd5b604d8111610f8a57600a0a90565b92600091611a1183610f58565b808493815b611a216101f48a5190565b811015611b22578589611a3761142b848361135a565b603090611a4661144683611371565b101580611b00575b611ab6575b5050611aa6575b611a6761142b828b61135a565b611a7a6001600160f81b03198716611446565b14611a8e575b611a8990610f7b565b611a16565b94611a9e90151587151514611953565b600194611a80565b92611ab090610f7b565b92611a5a565b61165b90611af2611aec611ae7611ae261142b89611adc611af89a9d61164c600a610f58565b9861135a565b61192a565b611936565b91610f58565b90611946565b928938611a53565b50611b0e61142b858461135a565b611b1b6114466039611371565b1115611a4e565b509650935061164c9250611b4c91506101f494611b47611b3f8290565b83111561199f565b611946565b6119f6565b906102956101b583610179565b369037565b90610177611b79611b7384611b51565b93610179565b601f190160208401611b5e565b909290611b9b611b968585611946565b611b63565b91845b845b811015611be057611bd981611bbb61142b611ba0948761135a565b611bd3611bc88a84611946565b9160001a918861135a565b53610f7b565b9050611b9e565b509350506101f4915090565b61017790611bf8610d4a565b611cdc565b6101f4906102c7565b6101f49054611bfd565b15611c1757565b60405162461bcd60e51b815260206004820152601c60248201527f4164647265737320697320616c72656164792061207769746e657373000000006044820152606490fd5b9060ff90610e19565b90611c756101f4610e3a92151590565b8254611c5c565b916001600160a01b0360089290920291821b911b610e19565b921b90565b9190611cab6101f4610e3a93610b0f565b908354611c7c565b90815491600160401b83101561015e5782611cd6916001610177950181556105eb565b90611c9a565b611d116001611d02611cfd611cf9611cf48685610c54565b611c06565b1590565b611c10565b611d0c8382610c54565b611c65565b611d1c816002611cb3565b611d4a7ff5944521c155e80db583372b9992336b6616b14dfb924a5cf6ef97b256d280349161085660405190565b0390a1565b61017790611bec565b61017790611d64610d4a565b611dee565b15611d7057565b60405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f742061207769746e65737300000000000000006044820152606490fd5b91906008610e19910291611c9560ff841b90565b9190611dda6101f4610e3a93151590565b908354611db5565b61017791600091611dc9565b611e186000611e13836001611e0e611e09611cf48484610c54565b611d69565b610c54565b611de2565b611e23816002611f32565b611d4a7f8b5785dce93ca82765b1cc25cedcda1b501288cb23a1fd171c0091d83900f9bd9161085660405190565b61017790611d58565b90611e75611e69610a6a845490565b92600052602060002090565b9060005b818110611e865750505090565b909192611eb3611eac600192611e9b87610ca2565b6001600160a01b0316815260200190565b9460010190565b929101611e79565b906101f491611e5a565b9061017761071192611ed660405190565b93848092611ebb565b6101f490611ec5565b634e487b7160e01b600052603160045260246000fd5b61017791600091611c9a565b80548015611f2d576000190190611f2a611f2483836105eb565b90611efe565b55565b611ee8565b611f47611f4e92611f4283611edf565b611fe5565b9092901590565b15611f905760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606490fd5b61017791611fa9611f9f835490565b611af26001610f58565b90818103611fb9575b5050611f0a565b611cd6611fcc610831611fd394866105eb565b91846105eb565b3880611fb2565b6101f4600019610f58565b91908251926000611ff581610f58565b855b81101561204c5761201861200b8285610f8f565b516001600160a01b031690565b61202a6001600160a01b038616610d61565b146120425761203b611ff791610f7b565b9050611ff5565b9450505050600190565b5093505050611552611fda565b61017790612065610d4a565b61226c565b1561207157565b60405162461bcd60e51b815260206004820152601b60248201527f50726f7669646572206861736820616c726561647920616464656400000000006044820152606490fd5b9160001960089290920291821b911b610e19565b91906120db6101f4610e3a93610f58565b9083546120b6565b610177916000916120ca565b8181106120fa575050565b8061210860006001936120e3565b016120ef565b9190601f811161211d57505050565b61212f61017793600052602060002090565b906020601f840181900483019310612152575b6020601f909101045b01906120ef565b9091508190612142565b600019600883021c1916906002021790565b90612177815190565b906001600160401b03821161015e5761219a82612194855461063f565b8561210e565b602090601f83116001146121c857610e3a9291600091836121bd575b505061215c565b0151905038806121b6565b601f198316916121dd85600052602060002090565b9260005b81811061221c57509160029391856001969410612202575b50505002019055565b01516000196008601f8516021c19165b90553880806121f9565b919360206001819287870151815501950192016121e1565b9190610729576101779161216e565b90815491600160401b83101561015e5782612266916001610177950181556105eb565b90612234565b6122956003612289612284611cf9611cf486856102b5565b61206a565b611d0c836001926102b5565b6122a0816004612243565b611d4a7fc9e1c78701d1853eeb1eb35ad3449e4b336281f672d5837243d21239dc6f4096916107bc60405190565b61017790612059565b610177906122e3610d4a565b612334565b156122ef57565b60405162461bcd60e51b815260206004820152601760248201527f50726f76696465722068617368206e6f7420666f756e640000000000000000006044820152606490fd5b6123596000611e1383600361235461234f611cf484846102b5565b6122e8565b6102b5565b6123648160046126aa565b611d4a7f6f594b4b4f0580c66aabba75218163a99fa1fe330a171cc9e2bfd8e167db22f8916107bc60405190565b610177906122d7565b6101f4906106f7565b906123ad825490565b6123b681610edc565b926123ca6020850191600052602060002090565b6000915b8383106123db5750505050565b6001602081926123ea8561239b565b8152019201920191906123ce565b6101f4906123a4565b6101f4905461063f565b908082146124da5761241c81612401565b906001600160401b03821161015e5761243982612194855461063f565b600090601f831160011461246657610e3a92916000918361245b57505061215c565b0154905038806121b6565b9061247b601f19841692600052602060002090565b9061248b85600052602060002090565b92815b8181106124c2575091600293918560019694106124ae5750505002019055565b01546000196008601f8516021c1916612212565b9193600180602092878701548155019501920161248e565b5050565b9190610729576101779161240b565b9061250090600019906020036008021c90565b8154169055565b9060009161252561251d82600052602060002090565b92835461215c565b905555565b919290602082101561258257601f841160011461254c57610e3a92935061215c565b509061257d61017793600161257461256985600052602060002090565b92601f602091010490565b820191016120ef565b612507565b506125bb8293612599600194600052602060002090565b61214b6020601f860104820192601f8616806125c3575b50601f602091010490565b600202179055565b6125cf908886036124ed565b386125b0565b929091600160401b821161015e576020111561261c5760208110156125fd57610e3a9161215c565b60019160ff191661261384600052602060002090565b55600202019055565b60019150600202019055565b9081546126348161063f565b9081831161265d575b81831061264b575b50505050565b6126549361252a565b38808080612645565b612669838383876125d5565b61263d565b600061017791612628565b90600003610729576101779061266e565b80548015611f2d576000190190611f2a6126a483836105eb565b90612679565b611f476126bf926126ba836123f8565b612744565b156127005760405162461bcd60e51b815260206004820152601460248201527329ba3934b733903737ba1034b71030b93930bc9760611b6044820152606490fd5b6101779161270f611f9f835490565b9081810361271f575b505061268a565b61273761272f61273d93856105eb565b5091846105eb565b906124de565b3880612718565b9190825192600061275481610f58565b855b8110156127ac5761276a6115258285610f8f565b61277c612775825190565b9160200190565b20612794611552865b612790612775825190565b2090565b14612042576127a561275691610f7b565b9050612754565b509350505081199190565b156127be57565b60405162461bcd60e51b815260206004820152600d60248201526c4e6f207369676e61747572657360981b6044820152606490fd5b156127fa57565b60405162461bcd60e51b815260206004820152601c60248201527f436c61696d496e666f206861736820646f65736e2774206d61746368000000006044820152606490fd5b1561284657565b60405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207369676e617475726573206e6f7420657175616c20746044820152746f206e756d626572206f66207769746e657373657360581b6064820152608490fd5b156128b057565b60405162461bcd60e51b815260206004820152601960248201527f5369676e6174757265206e6f7420617070726f707269617465000000000000006044820152606490fd5b906020820190815160200151612909905190565b9160009261291684610f58565b10612920906127b7565b828080808451015196845160200151612937610ee9565b98838a01906129439152565b6020890152015161295390612efe565b925101510161296190611525565b1461296b906127f3565b61297483612a5b565b805191600292612982845490565b1461298c9061283f565b61299584610f58565b935b6129a66101f460208801515190565b851015612a405780956129b882610f58565b6129c36101f4875490565b811015612a28576129d761200b8887610f8f565b6129ea610d616103b0610831858b6105eb565b146129fd576129f890610f7b565b6129b8565b50946129a69196506020612a1d6101f492612a1860016128a9565b610f7b565b969792505050612997565b50946020612a1d6101f492612a186129a6959a6128a9565b509350505050600190565b90610177611b79610f4584610edc565b6020612a6a6000830151612b2b565b910190612a7e612a7983515190565b612a4b565b91612a896000610f58565b612a956101f483515190565b811015612ad55780612a18612ab8612ab1612ad0948651610f8f565b5186612c02565b612ac28388610f8f565b906001600160a01b03169052565b612a89565b50505090565b610195816020939052565b6101f46101f46101f49263ffffffff1690565b92612b25612b18612b2594612b25612b186101f49998612b1897610260565b600560f91b815260010190565b90610260565b6101f4612b67612b3a83611525565b612b62612b4660405190565b8092612b56602083019182612adb565b9081038252038261013d565b613130565b612b83612b7e60208501516001600160a01b031690565b612fb9565b90612b56612bbf612bae612ba96060612bb3612bae612ba960408c015163ffffffff1690565b612ae6565b61329e565b98015163ffffffff1690565b604051958694602086019485612af9565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526101f49291612b2591601a0182565b90612b56612c326101f493612c15600090565b50612c21612bae825190565b604051938492602084019283612bd0565b612c3d612775825190565b206101f491612c4b91612dc1565b919091612c82565b634e487b7160e01b600052602160045260246000fd5b60051115612c7357565b612c53565b9061017782612c69565b612c8c6000612c78565b612c9582612c78565b03612c9d5750565b612ca76001612c78565b612cb082612c78565b03612cfa5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b612d046002612c78565b612d0d82612c78565b03612d575760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b612d6a612d646003612c78565b91612c78565b14612d7157565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b908051612dd16115526041610f58565b03612df757612df3916020820151906060604084015193015160001a90612e36565b9091565b5050612e036000610cd3565b90600290565b612e3261017794610393606094989795612e28608086019a6000870152565b60ff166020850152565b0152565b919291612e42836118fc565b612e6e6115527f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0610f58565b11612ed257612e8e600093602095612e8560405190565b94859485612e09565b838052039060015afa156112f25760005190600091612eac83610cd3565b6001600160a01b0381166001600160a01b03831614612eca57509190565b925050600190565b50505050612ee06000610cd3565b90600390565b6101f49392612b25612b18612b1893612b2595610260565b8051602082015160409283015192516127859290612b5690948593602085019384612ee6565b6101f49081906001600160a01b031681565b60ff8111610f8a5760020a90565b905b9081156116de570490565b61138461137e6101f49260ff1690565b612f469060ff165b9160ff1690565b612f7c9060ff16612f69565b029060ff8216918203610f8a57565b612f979060ff16612f69565b90039060ff8211610f8a57565b61060f60f31b81526101f49190600201612b25565b90612fc7611b966028610f58565b600092612fd384610f58565b612fdd6014610f58565b8110156130d45780613037611bd36130c56130bb6130cf956130376130b58c8b6130af613051611ae261304c8f61301e61301961304792610b06565b612f24565b61304161303c6008613037611aec8f611b476013610f58565b6115f3565b612f36565b90612f44565b6110e5565b612f51565b9261309a61309461304c60109661308e61307661304c6130708b6110e5565b84612f61565b986130896130838b61192a565b916110e5565b612f70565b90612f8b565b9461323a565b6130a78860029d8e610f58565b911a9261135a565b5361323a565b95610f58565b61165b6001610f58565b91881a918661135a565b612fd3565b50506101f49192506101f46130e860405190565b8092612b56602083019182612fa4565b6131026010611b51565b6f181899199a1a9b1b9c1cb0b131b232b360811b602082015290565b6101f46130f8565b81156116de570690565b90815191613146611b9660029461164c86610f58565b9061314f61311e565b60009161315b83610f58565b6131666101f4835190565b81101561320c57806131a661142b6131a061318a611ae261142b613207978961135a565b61319b613195895190565b91611936565b612f44565b8661135a565b6131c56131bb6131b58b610f58565b846115f3565b91871a918861135a565b536131ef61142b6131a06131df611ae261142b868961135a565b6131ea613195895190565b613126565b611bd36131bb6130bb6132018c610f58565b856115f3565b61315b565b505050506101f49192506101f46130e860405190565b61322e9060ff16612f69565b019060ff8211610f8a57565b6132439061192a565b61324d600a6110e5565b60ff8216101561326e5761304c6101f49161326860306110e5565b90613222565b61304c6101f49161326860576110e5565b6132896001611b51565b600360fc1b602082015290565b6101f461327f565b6000916132aa83610f58565b821461337257908060005b6132be85610f58565b83146132e1576132d06132db91610f7b565b92613041600a610f58565b916132b5565b91506132ec82611b63565b915b6132f785610f58565b82146133675761330e61336191611af26001610f58565b91613041600a8461335b61335261304c603061334d61308361304761334761333e6133388b610f58565b8d612f44565b61164c8b610f58565b8b611946565b613222565b8a1a918861135a565b53610f58565b906132ee565b50506101f491925090565b9150506101f4613296565b9061338c611e69610a6a845490565b9060005b81811061339d5750505090565b9091926133b2611eac600192611e9b87610ca2565b929101613390565b906101f49161337d565b90610177610711926133d560405190565b938480926133ba565b6101f4906133c4565b6101f460026133de565b906133fa825490565b61340381610edc565b926134176020850191600052602060002090565b6000915b8383106134285750505050565b6001602081926134378561239b565b81520192019201919061341b565b6101f4906133f1565b6101f46004613445565b611cf46101f491613467600090565b5060036102b5565b9061347b6109a8835190565b908161348d6020830284019460200190565b926000915b8383106134a157505050505090565b909192939460206134bd6109f483856001950387528951610b87565b9301930191939290613492565b60208082526101f49291019061346f565b80151561039c565b90505190610177826134db565b906020828203126101d4576101f4916134e3565b1561350b57565b60405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606490fd5b61356c61355c60405190565b8092612b566020830191826134ca565b613577612775825190565b206135a17f0000000000000000000000000000000000000000000000000000000000000000610b0f565b9063169394bb6135ba6135b360405190565b9160e01b90565b815260048101829052602081602481865afa9081156112f2576135ec916135e79160009161365157501590565b613504565b635bd4df3290823b156101d4576136289261361a6000809461360d60405190565b9687958694859360e01b90565b835260048301526024820190565b03925af180156112f2576136395750565b610177906000613649818361013d565b81019061086d565b611cf9915060203d8111613672575b61366a818361013d565b8101906134f0565b503d61366056fea2646970667358221220ac32ca16a78f612ec68240d59214076e1784464c21ff8fabfeff4b46fd239e1c64736f6c63430008120033\",\n  \"libraries\": {\n    \"ClaimVerifier\": \"0x71D6e2056e7138F1F489EE98658D4832348b3435\"\n  },\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addProviderHash(string)\": {\n        \"params\": {\n          \"_newProviderHash\": \"New provider hash to be added\"\n        }\n      },\n      \"addWitness(address)\": {\n        \"params\": {\n          \"_newWitness\": \"Address of the new witness\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeProviderHash(string)\": {\n        \"params\": {\n          \"_removeProviderHash\": \"Provider hash to be removed\"\n        }\n      },\n      \"removeWitness(address)\": {\n        \"params\": {\n          \"_removeWitness\": \"Address of witness to be removed\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\": {\n        \"params\": {\n          \"proof\": \"Proof to be verified\"\n        }\n      },\n      \"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"params\": {\n          \"_proofs\": \"Proofs to be verified\"\n        },\n        \"returns\": {\n          \"domains\": \"      Array of Domain structs\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addProviderHash(string)\": {\n        \"notice\": \"ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\"\n      },\n      \"addWitness(address)\": {\n        \"notice\": \"ONLY OWNER: Add witness address. Witness must not have been previously added.\"\n      },\n      \"removeProviderHash(string)\": {\n        \"notice\": \"ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\"\n      },\n      \"removeWitness(address)\": {\n        \"notice\": \"ONLY OWNER: Remove witness address. Witness must have been previously added.\"\n      },\n      \"verifyProofSignatures(((string,string,string),((bytes32,address,uint32,uint32),bytes[])))\": {\n        \"notice\": \"Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters) to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature.  This function verifies a claim by performing the following checks on the claim - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim - Checks if the signatures are valid and from the witnesses This function reverts if - No signatures are found on the proof - Number of signatures is not equal to the number of witnesses - ClaimInfo hash does not match the identifier in the claim - Signatures are invalid (not from the witnesses)  DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the  responsibility of the caller.  Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code    \"\n      },\n      \"verifyProofs(((string,string,string),((bytes32,address,uint32,uint32),bytes[]))[])\": {\n        \"notice\": \"ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 11343,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"isWitness\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 11346,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"witnesses\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      },\n      {\n        \"astId\": 11350,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"isProviderHash\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_string_memory_ptr,t_bool)\"\n      },\n      {\n        \"astId\": 11353,\n        \"contract\": \"contracts/VerifyDomainProcessor.sol:VerifyDomainProcessor\",\n        \"label\": \"providerHashes\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_array(t_string_storage)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_string_storage)dyn_storage\": {\n        \"base\": \"t_string_storage\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"string[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_string_memory_ptr,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_string_memory_ptr\",\n        \"label\": \"mapping(string => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_string_memory_ptr\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/solcInputs/a22247643263102eca9fc6c72e24c17d.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 16428432848801857252194528405604668803277877773566238944394625302971855135431;\\n    uint256 constant alphay  = 16846502678714586896801519656441059708016666274385668027902869494772365009666;\\n    uint256 constant betax1  = 3182164110458002340215786955198810119980427837186618912744689678939861918171;\\n    uint256 constant betax2  = 16348171800823588416173124589066524623406261996681292662100840445103873053252;\\n    uint256 constant betay1  = 4920802715848186258981584729175884379674325733638798907835771393452862684714;\\n    uint256 constant betay2  = 19687132236965066906216944365591810874384658708175106803089633851114028275753;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 1482036359054785987758983791437636255761203148422438653991915394359246721370;\\n    uint256 constant deltax2 = 10001792791670748994653802587965307894251588681124493339739643276539399327199;\\n    uint256 constant deltay1 = 12929924181374602539079631103652565558658437684289021022192643357266276129313;\\n    uint256 constant deltay2 = 18621234594885561836856860416599021020030685616956494244557460320066348275486;\\n\\n\\n    uint256 constant IC0x = 13679841311419499947196488030563927052737833631831087839800108582001619982756;\\n    uint256 constant IC0y = 14398831345642232008615460969424497321419317733481671851297924133275173512121;\\n\\n    uint256 constant IC1x = 2408377228439232698160803002782752816762776284505564408880728084177561554601;\\n    uint256 constant IC1y = 4562823341627914579340945271513298981280656371775082655869052525475797696282;\\n\\n    uint256 constant IC2x = 11698161615520749679058702638780643731158760523880360973169686160750874723717;\\n    uint256 constant IC2y = 5482072052337866918379448154185642235470279334903213679209093769947335616093;\\n\\n    uint256 constant IC3x = 20768666777689851453960746019474086479608334345599593721826216429323116802773;\\n    uint256 constant IC3y = 144384800173925255346616036805594882403322575509153153064641653383667680325;\\n\\n    uint256 constant IC4x = 5484190953638831817876258480017744165730276029855186594303418421204653869358;\\n    uint256 constant IC4y = 2388977283212189651166234573571473197529151009141226183250075013106275368678;\\n\\n    uint256 constant IC5x = 17286960896074201491464437213186707946980083024758675396143906384940172672768;\\n    uint256 constant IC5y = 5559244286107427512674714237837993184640251130340291817174978126569513551048;\\n\\n    uint256 constant IC6x = 5981106732853641044464779767035945345345676221237979116689771873940770600376;\\n    uint256 constant IC6y = 16757892553277885270560523048286665969871413522533097385031102756444326127164;\\n\\n    uint256 constant IC7x = 21137398581361954385460769732122488724166715754152295898647889069721843981111;\\n    uint256 constant IC7y = 17117057588842742212408259815326568334655191160255595656714878965037331239848;\\n\\n    uint256 constant IC8x = 16214254713514974179767304814474510985714849436687773447034352068497147314860;\\n    uint256 constant IC8y = 13028412764820438875408464005100529475148539560770504369038194564947786526663;\\n\\n    uint256 constant IC9x = 18408046483761423912872515862380512887546745528686003625682162751275305246737;\\n    uint256 constant IC9y = 14576373605584916924675717896952852805094073315049779994296007237958279154545;\\n\\n    uint256 constant IC10x = 19754959014163302021033520556658948350285362357974437446624957863682467085464;\\n    uint256 constant IC10y = 6837772045404055003823337103437422613565931626793512604498169200205461541951;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/solcInputs/a43d75c8fa53cbd70612f5013c5d17a2.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12718791721466586474772975178991944367361898681403889293050590835735829974174;\\n    uint256 constant IC0y = 6579614210328804738196110281777440845203538387714672921854127346802897741731;\\n    \\n    uint256 constant IC1x = 15050971342023334328313633330499885418161248915553086390701402242486225179368;\\n    uint256 constant IC1y = 5024764877577619588829734526990256704181621131776349449360023481477820279987;\\n    \\n    uint256 constant IC2x = 7494265978725599958916265753653166549633529129800692658333846839504191651648;\\n    uint256 constant IC2y = 6331829577874431053631060489192183034310045972687441697179743819760334117448;\\n    \\n    uint256 constant IC3x = 19001722242244131321371144536562173279385056519981716838131699446018662048085;\\n    uint256 constant IC3y = 8148711952593941450664988855383229951630582602775661040234820121548658879338;\\n    \\n    uint256 constant IC4x = 3624352076627862068761560802183636400416483488844158805038644908873200708814;\\n    uint256 constant IC4y = 20894074159790604892251457333772898092352374489464929653588484093719978460605;\\n    \\n    uint256 constant IC5x = 2098287694939727519558784139808406325855172668407809961967029546183317335265;\\n    uint256 constant IC5y = 5659241113472526955215440521431168972841548603376846026887752206139550832697;\\n    \\n    uint256 constant IC6x = 17054571586962694690567468783102453574497782768524521043534058966826398455175;\\n    uint256 constant IC6y = 4087439525418017845490176926142509334113265173570304433911881676407144081865;\\n    \\n    uint256 constant IC7x = 7441928267847731392209447389119131741297268634643246304512516729270550734194;\\n    uint256 constant IC7y = 15714253901405577134617988311525363228461039013850912155558149694323922788327;\\n    \\n    uint256 constant IC8x = 11989172231499636764423272601594485978016807201316866170676011918612131765820;\\n    uint256 constant IC8y = 15918479982497737545158513843427772249925445687882255296587424450200131669618;\\n    \\n    uint256 constant IC9x = 19827744545534206076315711984525184804508732918768894016552346430789516516368;\\n    uint256 constant IC9y = 16361460611570894490152793347002588479282989223552655286979659973731335376509;\\n    \\n    uint256 constant IC10x = 10898965818757221383985300751768263931593441442012024286290119328446015154272;\\n    uint256 constant IC10y = 6989418820395701171656324073128354251482680955655018162117108617053607002569;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/deployments/sepolia/solcInputs/d865a6f49eab8c58036d78b72f5cb448.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/security/Pausable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/security/ReentrancyGuard.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n     * `nonReentrant` function in the call stack.\\n     */\\n    function _reentrancyGuardEntered() internal view returns (bool) {\\n        return _status == _ENTERED;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Address.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     *\\n     * Furthermore, `isContract` will also return true if the target contract within\\n     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n     * which only has an effect at the end of a transaction.\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\nimport \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"./StringUtils.sol\\\";\\n\\n/**\\n * Library to assist with requesting,\\n * serialising & verifying credentials\\n */\\nlibrary Claims {\\n\\t/** Data required to describe a claim */\\n\\tstruct CompleteClaimData {\\n\\t\\tbytes32 identifier;\\n\\t\\taddress owner;\\n\\t\\tuint32 timestampS;\\n\\t\\tuint32 epoch;\\n\\t}\\n\\n\\tstruct ClaimInfo {\\n\\t\\tstring provider;\\n\\t\\tstring parameters;\\n\\t\\tstring context;\\n\\t}\\n\\n\\t/** Claim with signatures & signer */\\n\\tstruct SignedClaim {\\n\\t\\tCompleteClaimData claim;\\n\\t\\tbytes[] signatures;\\n\\t}\\n\\n\\t/**\\n\\t * Asserts that the claim is signed by the expected witnesses\\n\\t */\\n\\tfunction assertValidSignedClaim(\\n\\t\\tSignedClaim memory self,\\n\\t\\taddress[] memory expectedWitnessAddresses\\n\\t) internal pure {\\n\\t\\trequire(self.signatures.length > 0, \\\"No signatures\\\");\\n\\t\\taddress[] memory signedWitnesses = recoverSignersOfSignedClaim(self);\\n\\t\\tfor (uint256 i = 0; i < expectedWitnessAddresses.length; i++) {\\n\\t\\t\\tbool found = false;\\n\\t\\t\\tfor (uint256 j = 0; j < signedWitnesses.length; j++) {\\n\\t\\t\\t\\tif (signedWitnesses[j] == expectedWitnessAddresses[i]) {\\n\\t\\t\\t\\t\\tfound = true;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\trequire(found, \\\"Missing witness signature\\\");\\n\\t\\t}\\n\\t}\\n\\n\\t/**\\n\\t * @dev recovers the signer of the claim\\n\\t */\\n\\tfunction recoverSignersOfSignedClaim(\\n\\t\\tSignedClaim memory self\\n\\t) internal pure returns (address[] memory) {\\n\\t\\tbytes memory serialised = serialise(self.claim);\\n\\t\\taddress[] memory signers = new address[](self.signatures.length);\\n\\t\\tfor (uint256 i = 0; i < self.signatures.length; i++) {\\n\\t\\t\\tsigners[i] = verifySignature(serialised, self.signatures[i]);\\n\\t\\t}\\n\\n\\t\\treturn signers;\\n\\t}\\n\\n\\t/**\\n\\t * @dev serialises the credential into a string;\\n\\t * the string is used to verify the signature\\n\\t *\\n\\t * the serialisation is the same as done by the TS library\\n\\t */\\n\\tfunction serialise(\\n\\t\\tCompleteClaimData memory self\\n\\t) internal pure returns (bytes memory) {\\n\\t\\treturn\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\tStringUtils.bytes2str(abi.encodePacked(self.identifier)),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.address2str(self.owner),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(self.timestampS),\\n\\t\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(self.epoch)\\n\\t\\t\\t);\\n\\t}\\n\\n\\t/**\\n\\t * @dev returns the address of the user that generated the signature\\n\\t */\\n\\tfunction verifySignature(\\n\\t\\tbytes memory content,\\n\\t\\tbytes memory signature\\n\\t) internal pure returns (address signer) {\\n\\t\\tbytes32 signedHash = keccak256(\\n\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\t\\\"\\\\x19Ethereum Signed Message:\\\\n\\\",\\n\\t\\t\\t\\tStringUtils.uint2str(content.length),\\n\\t\\t\\t\\tcontent\\n\\t\\t\\t)\\n\\t\\t);\\n\\t\\treturn ECDSA.recover(signedHash, signature);\\n\\t}\\n\\n\\tfunction hashClaimInfo(ClaimInfo memory claimInfo) internal pure returns (bytes32) {\\n\\t\\tbytes memory serialised = abi.encodePacked(\\n\\t\\t\\tclaimInfo.provider,\\n\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\tclaimInfo.parameters,\\n\\t\\t\\t\\\"\\\\n\\\",\\n\\t\\t\\tclaimInfo.context\\n\\t\\t);\\n\\t\\treturn keccak256(serialised);\\n\\t}\\n}\\n\"\n    },\n    \"@reclaimprotocol/verifier-solidity-sdk/contracts/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.4;\\n\\n/**\\n * Utilities for string manipulation & conversion\\n */\\nlibrary StringUtils {\\n\\tfunction address2str(address x) internal pure returns (string memory) {\\n\\t\\tbytes memory s = new bytes(40);\\n\\t\\tfor (uint i = 0; i < 20; i++) {\\n\\t\\t\\tbytes1 b = bytes1(uint8(uint(uint160(x)) / (2 ** (8 * (19 - i)))));\\n\\t\\t\\tbytes1 hi = bytes1(uint8(b) / 16);\\n\\t\\t\\tbytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));\\n\\t\\t\\ts[2 * i] = getChar(hi);\\n\\t\\t\\ts[2 * i + 1] = getChar(lo);\\n\\t\\t}\\n\\t\\treturn string(abi.encodePacked(\\\"0x\\\", s));\\n\\t}\\n\\n\\tfunction bytes2str(bytes memory buffer) internal pure returns (string memory) {\\n\\t\\t// Fixed buffer size for hexadecimal convertion\\n\\t\\tbytes memory converted = new bytes(buffer.length * 2);\\n\\t\\tbytes memory _base = \\\"0123456789abcdef\\\";\\n\\n\\t\\tfor (uint256 i = 0; i < buffer.length; i++) {\\n\\t\\t\\tconverted[i * 2] = _base[uint8(buffer[i]) / _base.length];\\n\\t\\t\\tconverted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length];\\n\\t\\t}\\n\\n\\t\\treturn string(abi.encodePacked(\\\"0x\\\", converted));\\n\\t}\\n\\n\\tfunction getChar(bytes1 b) internal pure returns (bytes1 c) {\\n\\t\\tif (uint8(b) < 10) return bytes1(uint8(b) + 0x30);\\n\\t\\telse return bytes1(uint8(b) + 0x57);\\n\\t}\\n\\n\\tfunction bool2str(bool _b) internal pure returns (string memory _uintAsString) {\\n\\t\\tif (_b) {\\n\\t\\t\\treturn \\\"true\\\";\\n\\t\\t} else {\\n\\t\\t\\treturn \\\"false\\\";\\n\\t\\t}\\n\\t}\\n\\n\\tfunction uint2str(uint _i) internal pure returns (string memory _uintAsString) {\\n\\t\\tif (_i == 0) {\\n\\t\\t\\treturn \\\"0\\\";\\n\\t\\t}\\n\\t\\tuint j = _i;\\n\\t\\tuint len;\\n\\t\\twhile (j != 0) {\\n\\t\\t\\tlen++;\\n\\t\\t\\tj /= 10;\\n\\t\\t}\\n\\t\\tbytes memory bstr = new bytes(len);\\n\\t\\tuint k = len;\\n\\t\\twhile (_i != 0) {\\n\\t\\t\\tk = k - 1;\\n\\t\\t\\tuint8 temp = (48 + uint8(_i - (_i / 10) * 10));\\n\\t\\t\\tbytes1 b1 = bytes1(temp);\\n\\t\\t\\tbstr[k] = b1;\\n\\t\\t\\t_i /= 10;\\n\\t\\t}\\n\\t\\treturn string(bstr);\\n\\t}\\n\\n\\tfunction areEqual(\\n\\t\\tstring calldata _a,\\n\\t\\tstring storage _b\\n\\t) internal pure returns (bool) {\\n\\t\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\n\\t}\\n\\n\\tfunction areEqual(string memory _a, string memory _b) internal pure returns (bool) {\\n\\t\\treturn keccak256(abi.encodePacked((_a))) == keccak256(abi.encodePacked((_b)));\\n\\t}\\n\\n\\tfunction toLower(string memory str) internal pure returns (string memory) {\\n\\t\\tbytes memory bStr = bytes(str);\\n\\t\\tbytes memory bLower = new bytes(bStr.length);\\n\\t\\tfor (uint i = 0; i < bStr.length; i++) {\\n\\t\\t\\t// Uppercase character...\\n\\t\\t\\tif ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {\\n\\t\\t\\t\\t// So we add 32 to make it lowercase\\n\\t\\t\\t\\tbLower[i] = bytes1(uint8(bStr[i]) + 32);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tbLower[i] = bStr[i];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn string(bLower);\\n\\t}\\n\\n\\tfunction substring(\\n\\t\\tstring memory str,\\n\\t\\tuint startIndex,\\n\\t\\tuint endIndex\\n\\t) internal pure returns (string memory) {\\n\\t\\tbytes memory strBytes = bytes(str);\\n\\t\\tbytes memory result = new bytes(endIndex - startIndex);\\n\\t\\tfor (uint i = startIndex; i < endIndex; i++) {\\n\\t\\t\\tresult[i - startIndex] = strBytes[i];\\n\\t\\t}\\n\\t\\treturn string(result);\\n\\t}\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/DomainExchange.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { ReentrancyGuard } from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport { AddressAllowList } from \\\"./external/AddressAllowList.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./external/lib/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"./external/lib/Uint256ArrayUtils.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"./external/interfaces/IKeyHashAdapterV2.sol\\\";\\n\\nimport { IDomainExchange } from \\\"./interfaces/IDomainExchange.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\nimport { IVerifiedDomainRegistry } from \\\"./interfaces/IVerifiedDomainRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract DomainExchange is IDomainExchange, AddressAllowList, ReentrancyGuard, Pausable {\\n\\n    using Address for address payable;\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    \\n    event ListingCreated(\\n        uint256 indexed listingId, \\n        address indexed seller, \\n        bytes32 indexed domainId, \\n        bytes32 dkimKeyHash,\\n        uint256 askPrice,\\n        uint256 minBidPrice,\\n        address saleEthRecipient\\n    );\\n    event ListingUpdated(uint256 indexed listingId, address indexed seller, uint256 newAskPrice, address saleEthRecipient);\\n    event ListingDeleted(uint256 indexed listingId, address indexed seller);\\n    event ListingDeletedByRegistry(uint256 indexed listingId);\\n    \\n    event BidCreated(uint256 indexed bidId, uint256 indexed listingId, address indexed buyer, uint256 price);\\n    event BidPriceIncreased(uint256 indexed bidId, address indexed buyer, uint256 newPrice);\\n    event RefundInitiated(uint256 indexed bidId, address indexed buyer);\\n    event BidWithdrawn(uint256 indexed bidId, address indexed buyer, uint256 amount);\\n    \\n    event SaleFinalized(uint256 indexed bidId, uint256 indexed listingId, uint256 priceNetFees, uint256 fees);\\n    \\n    event InstantAcceptUpdated(address indexed buyer, bool instantAccept);\\n\\n    event FeeUpdated(uint256 newFee);\\n    event FeeRecipientUpdated(address indexed newFeeRecipient);\\n    event BidSettlementPeriodUpdated(uint256 newBidSettlementPeriod);\\n    event BidRefundPeriodUpdated(uint256 newBidRefundPeriod);\\n    event TransferDomainProcessorUpdated(ITransferDomainProcessor indexed newTransferDomainProcessor);\\n    event MailServerKeyHashAdapterUpdated(IKeyHashAdapterV2 indexed newMailServerKeyHashAdapter);\\n\\n    /* ============ Structs ============ */\\n    struct Listing {\\n        address seller;\\n        address payable saleEthRecipient;       // Must be a contract that can receive ETH or an EOA\\n        bytes32 dkimKeyHash;            // Allow for custom DKIM key hash\\n        bytes encryptionKey;\\n        bytes32 domainId;\\n        uint256 createdAt;\\n        uint256 askPrice;\\n        uint256 minBidPrice;\\n        bool isActive;          // false by default, set to true when the listing is created\\n        uint256[] bids;\\n    }\\n\\n    struct ListingWithId {\\n        uint256 listingId;\\n        Listing listing;\\n    }\\n\\n    struct Bid {\\n        address buyer;\\n        uint256 listingId;\\n        string encryptedBuyerId;\\n        bytes32 buyerIdHash;\\n        uint256 createdAt;\\n        uint256 expiryTimestamp;\\n        uint256 price;\\n        bool refundInitiated;\\n    }\\n\\n    struct BidDetailsWithId {\\n        uint256 bidId;\\n        Bid bid;\\n        bool buyerInstantAcceptEnabled;\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyInitialized() {\\n        require(isInitialized, \\\"Contract must be initialized\\\");\\n        _;\\n    }\\n\\n    /* ============ Public Variables ============ */\\n\\n    mapping(uint256 => Listing) public listings;\\n    mapping(address => uint256[]) public userListings;\\n    mapping(uint256 => Bid) public bids;\\n    mapping(address => uint256[]) public userBids;\\n    mapping(address => bool) public instantAcceptEnabled;\\n\\n    uint256 public fee;\\n    address payable public feeRecipient;\\n    uint256 public bidCounter;\\n    uint256 public listingCounter;\\n    uint256 public bidSettlementPeriod;\\n    uint256 public bidRefundPeriod;\\n    \\n    bool public isInitialized;\\n    \\n    ITransferDomainProcessor public transferDomainProcessor;\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        address _owner,\\n        uint256 _fee,\\n        address payable _feeRecipient,\\n        uint256 _bidSettlementPeriod,\\n        uint256 _bidRefundPeriod,\\n        address[] memory _allowedAddresses\\n    ) AddressAllowList(_allowedAddresses) {\\n        fee = _fee;\\n        feeRecipient = _feeRecipient;\\n        bidSettlementPeriod = _bidSettlementPeriod;\\n        bidRefundPeriod = _bidRefundPeriod;\\n        \\n        bidCounter = 1;\\n        listingCounter = 1;\\n        isInitialized = false;\\n        \\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ Public Functions ============ */\\n\\n    /**\\n     * @notice Creates listing for a domain. If ownership of domain changes offchain, the new owner\\n     * will have to first register the domain on the domain registry contract. Then the new owner\\n     * can create a listing for the domain. The old listing will be deleted from the old owner's \\n     * listings and the old listing is marked as NOT active, which prevents any new bids from being\\n     * created on it and makes the old bids immediately withdrawable. We also allow the seller to\\n     * specify a custom DKIM key hash for Namecheap if they want to opt out of using the managed DKIM\\n     * key hash set in the transferDomainProcessor contract. The managed DKIM key hash *can* be \\n     * updated by us whenever Namecheap rotates their DKIM key.\\n     *\\n     * Function reverts if:\\n     * - Caller is not domain owner on the domain registry contract\\n     * - Ask price is less than min bid price\\n     * - Sale ETH recipient is the zero address\\n     *\\n     * @param _domainId         The unique identifier of the domain\\n     * @param _askPrice         An asking price for the domain\\n     * @param _minBidPrice      The minimum bid price for the domain\\n     * @param _saleEthRecipient The address to receive the ETH from the sale; must be a contract that can\\n     *                          receive ETH or an EOA\\n     * @param _encryptionKey    The encryption key for buyers to encrypt the buyerId to\\n     * @param _dkimKeyHash      The custom DKIM key hash. If empty, the managed DKIM key hash will be used\\n     */\\n    function createListing(\\n        bytes32 _domainId, \\n        uint256 _askPrice, \\n        uint256 _minBidPrice, \\n        address payable _saleEthRecipient, \\n        bytes memory _encryptionKey,\\n        bytes32 _dkimKeyHash\\n    ) \\n        external\\n        onlyAllowed\\n        onlyInitialized \\n        whenNotPaused\\n    {\\n        _verifyCreateListing(_domainId, _minBidPrice, _askPrice, _saleEthRecipient);\\n\\n        uint256 listingId = _updateCreateListingState(\\n            _domainId, _askPrice, _minBidPrice, _saleEthRecipient, _encryptionKey, _dkimKeyHash\\n        );\\n\\n        verifiedDomainRegistry.setDomainListing(_domainId, listingId);\\n\\n        emit ListingCreated(listingId, msg.sender, _domainId, _dkimKeyHash, _askPrice, _minBidPrice, _saleEthRecipient);\\n    }\\n\\n    /**\\n     * @notice Creates a new bid for a listing. Transfers ETH from the buyer to the contract. Every buyer\\n     * has a unique identifier, for Namecheap it's their username. The seller needs the raw buyerId\\n     * to transfer the domain off-chain. To facilitate this, the buyer encrypts their buyerId using the \\n     * seller's encryption key and sends it along with the bid. The seller then decrypts the buyerId \\n     * using their private key to get the raw buyerId.\\n     *\\n     * DEV NOTE: We do not check that the encrypted buyerId is the same as the hashed buyerId. This must be\\n     * done in the client! This does not affect the security of the protocol as the encrypted buyerId is only \\n     * used for communication between the buyer and the seller while maintaining privacy.\\n     *\\n     * @param _listingId            The unique identifier of the listing to bid on\\n     * @param _buyerIdHash          The hashed buyerId which is also output as part of the transfer proof later\\n     * @param _encryptedBuyerId     The encrypted buyerId. Should be the same as the buyerId hashed\\n     */\\n    function createBid(uint256 _listingId, bytes32 _buyerIdHash, string memory _encryptedBuyerId) \\n        external \\n        payable\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        uint256 price = msg.value;\\n        Listing storage listing = listings[_listingId];\\n\\n        _validateCreateBid(listing, price, _buyerIdHash);\\n\\n        uint256 bidId = _updateCreateBidState(listing, _listingId, price, _buyerIdHash, _encryptedBuyerId);\\n\\n        emit BidCreated(bidId, _listingId, msg.sender, price);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Finalizes a sale by verifying the domain transfer and unlocking bid funds to \\n     * the listing owner. The seller can also finalize the sale with bids that have initiated a refund \\n     * including the ones that have expired based on timestamp but not withdrawn yet.\\n     *\\n     * @param _proof The zk-email proof of domain transfer\\n     */\\n    function finalizeSale(ITransferDomainProcessor.TransferProof calldata _proof) \\n        external\\n        onlyInitialized\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        // Check\\n        (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        ) = transferDomainProcessor.processProof(_proof);\\n\\n        Bid storage bid = bids[bidId];\\n        Listing storage listing = listings[bid.listingId];\\n        \\n        _validateFinalizeSale(bid, listing, dkimKeyHash, hashedReceiverId, domainName);\\n        \\n        // Effect\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\n\\n        uint256 transferValue = bid.price;\\n        address payable recipient = listing.saleEthRecipient;\\n        uint256 listingId = bid.listingId;\\n        _updateFinalizeSaleState(bid, bidId, listing);\\n\\n        // Interaction\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\n        \\n        emit SaleFinalized(bidId, listingId, transferValue - feeAmount, feeAmount);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Finalize a sale by releasing funds to the seller. Proof of transfer is not required\\n     * because it is not in the buyer's interest to release funds unless they have received the domain. Note that the\\n     * bid can be in ANY STATE when this function is called. Upon calling this function funds will be transferred to\\n     * the seller and fees will be taken by the protocol. The listing and the bid will be deleted. The function will\\n     * revert if:\\n     * - The bid is not owned by the caller\\n     * - The listing is not active (sold or withdrawn)\\n     *\\n     * @param _bidId The unique identifier of the bid to release funds for\\n     */\\n    function buyerReleaseFunds(uint256 _bidId) \\n        external\\n        nonReentrant\\n    {\\n        // Check\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        require(bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n\\n        // Effect\\n        verifiedDomainRegistry.updateDomainOnSale(listing.domainId, bid.buyer);\\n\\n        uint256 transferValue = bid.price;\\n        address payable recipient = listing.saleEthRecipient;\\n        uint256 listingId = bid.listingId;\\n        \\n        _updateFinalizeSaleState(bid, _bidId, listing);\\n\\n        // Interaction\\n        uint256 feeAmount = _settleSale(recipient, transferValue);\\n\\n        emit SaleFinalized(_bidId, listingId, transferValue - feeAmount, feeAmount);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Updates the asking price of an existing listing. We don't update\\n     * the existing bids against the listing because the newAskPrice is an indicative value.\\n     * The new ask price must be greater than or equal to the existing min bid price. If seller\\n     * wants to update the min bid price, they should delete the listing and create a new one with\\n     * the new min bid price.\\n     *\\n     * @param _listingId        The unique identifier of the listing to update\\n     * @param _newAskPrice      The new asking price for the listing\\n     * @param _saleEthRecipient The new address to receive the ETH from the sale; must be a contract that can\\n     *                          receive ETH or an EOA\\n     */\\n    function updateListing(uint256 _listingId, uint256 _newAskPrice, address payable _saleEthRecipient) external whenNotPaused {\\n        Listing storage listing = listings[_listingId];\\n        \\n        require(listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n        require(_newAskPrice >= listing.minBidPrice, \\\"Ask price is less than min bid price\\\");\\n        require(_saleEthRecipient != address(0), \\\"Invalid sale ETH recipient\\\");\\n        \\n        listing.askPrice = _newAskPrice;\\n        listing.saleEthRecipient = _saleEthRecipient;\\n\\n        emit ListingUpdated(_listingId, msg.sender, _newAskPrice, _saleEthRecipient);\\n    }\\n\\n    /**\\n     * @notice ONLY SELLER: Marks a listing as NOT active. Removes the listing from the seller's listings array\\n     * and domain listing. If the listing has no bids, it is deleted from the exchange. Bids against the listing\\n     * are left as is to allow the buyer to withdraw the bid.\\n     *\\n     * @param _listingId The unique identifier of the listing to delete\\n     */\\n    function deleteListing(uint256 _listingId) external {\\n        Listing storage listing = listings[_listingId];\\n        \\n        require(listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(listing.isActive, \\\"Listing not active\\\");\\n        \\n        verifiedDomainRegistry.removeDomainListing(listing.domainId);\\n\\n        _pruneListing(listing, _listingId);\\n\\n        emit ListingDeleted(_listingId, msg.sender);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Remove a listing for domain when ownership changes on the registry.\\n     * \\n     * @param _listingId    Listing Id to remove\\n     */\\n    function registryRemoveListing(uint256 _listingId) external override {\\n        Listing storage listing = listings[_listingId];\\n\\n        require(address(verifiedDomainRegistry) == msg.sender, \\\"Caller is not registry\\\");\\n        // If listing is NOT active, this function will NOT be called because the listing status\\n        // would have already been removed from the registry beforehand; so there is no need to \\n        // check if listing is active\\n        \\n        _pruneListing(listing, _listingId);\\n\\n        emit ListingDeletedByRegistry(_listingId);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Increases the price of an existing bid. The new price can ONLY be higher \\n     * than the old price. The buyer must send the additional amount of ETH. The function reverts if\\n     * - bid has initiated refund, caller is not bid owner or listing is not active\\n     * - the new price is less than old price\\n     * - msg.value is NOT STRICTLY EQUAL to than new price - old price\\n     *\\n     * @param _bidId The unique identifier of the bid to increase the price for\\n     * @param _newPrice The new price for the bid\\n     */\\n    function increaseBidPrice(uint256 _bidId, uint256 _newPrice)\\n        external\\n        payable\\n        nonReentrant\\n        whenNotPaused\\n    {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        // Check\\n        _validateIncreaseBidPrice(bid, listing, _newPrice);\\n        \\n        // Effect\\n        bid.price = _newPrice;\\n\\n        emit BidPriceIncreased(_bidId, msg.sender, _newPrice);\\n    }\\n\\n    /**\\n     * @notice Enables the instant accept flag for the buyer. This flag is used to indicate if the buyer has \\n     * configured their Namecheap account to accept ownership of domains immediately upon transfer.\\n     * \\n     * DEV NOTE: We can not check that the buyer has actually enabled instant accept on Namecheap. It is only \\n     * an indicative flag to help the seller know if they can finalize the sale immediately or not. The seller\\n     * may get tricked by a malicious buyer to initiate a transfer to them assuming instant accept is on. But\\n     * if the buyer does not have instant accept enabled, the seller will get immediate feedback and they can \\n     * cancel the transfer immediately.\\n     */\\n    function enableInstantAccept() external onlyInitialized {\\n        require(!instantAcceptEnabled[msg.sender], \\\"Instant accept already enabled\\\");\\n        \\n        instantAcceptEnabled[msg.sender] = true;        \\n        emit InstantAcceptUpdated(msg.sender, true);\\n    }\\n\\n    /**\\n     * @notice Disables the instant accept flag for the buyer.\\n     */\\n    function disableInstantAccept() external onlyInitialized {\\n        require(instantAcceptEnabled[msg.sender], \\\"Instant accept already disabled\\\");\\n\\n        instantAcceptEnabled[msg.sender] = false;\\n        emit InstantAcceptUpdated(msg.sender, false);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Initiates the refund process for a bid. Can only be called by the bid owner \\n     * after the initial bid expiry period has passed.\\n     *\\n     * @param _bidId The unique identifier of the bid to initiate refund for\\n     */\\n    function initiateRefund(uint256 _bidId) external {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        _validateInitiateRefund(bid, listing);\\n\\n        bid.expiryTimestamp = block.timestamp + bidRefundPeriod;\\n        bid.refundInitiated = true;\\n\\n        emit RefundInitiated(_bidId, bid.buyer);\\n    }\\n\\n    /**\\n     * @notice ONLY BUYER: Withdraws a bid after the refund period has ended. Transfers ETH back to the buyer.\\n     *\\n     * @param _bidId The unique identifier of the bid to withdraw\\n     */\\n    function withdrawBid(uint256 _bidId) external nonReentrant {\\n        Bid storage bid = bids[_bidId];\\n        Listing storage listing = listings[bid.listingId];\\n\\n        // Check\\n        _validateWithdrawBid(bid, listing);\\n\\n        // Effect\\n        uint256 refundAmount = bid.price;\\n        _pruneBid(bid, _bidId, listing);\\n        \\n        // Interaction\\n        payable(msg.sender).sendValue(refundAmount);\\n\\n        emit BidWithdrawn(_bidId, msg.sender, refundAmount);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * @notice Initializes the contract with domain verification and transfer processors. Can \\n     * only be called once by the contract owner\\n     * \\n     * @param _transferDomainProcessor The address of the domain transfer processor contract\\n     * @param _verifiedDomainRegistry The address of the verified domain registry contract\\n     * @param _mailServerKeyHashAdapter The address of the mail server key hash adapter contract\\n     */\\n    function initialize(\\n        ITransferDomainProcessor _transferDomainProcessor,\\n        IVerifiedDomainRegistry _verifiedDomainRegistry,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter\\n    ) external onlyOwner {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n        transferDomainProcessor = _transferDomainProcessor;\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Pauses listing and proof submission functionality for the marketplace. \\n     * Functionalites that are paused:\\n     * - Listing creation and update\\n     * - Bid creation and update\\n     * - Sale finalization\\n     * \\n     * Functinonalites that remain unpaused to allow users to retrieve funds in contract:\\n     * - Bid refund initiation and withdrawal\\n     * - Listing deletion\\n     * - Manual settlement between buyer and seller\\n     */\\n    function pauseMarketplace() external onlyOwner {\\n        _pause();\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Restarts paused functionality for the marketplace.\\n     */\\n    function unpauseMarketplace() external onlyOwner {\\n        _unpause();\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the transfer domain processor\\n     *\\n     * @param _transferDomainProcessor The new transfer domain processor\\n     */\\n    function updateTransferDomainProcessor(ITransferDomainProcessor _transferDomainProcessor) external onlyOwner {\\n        require(address(_transferDomainProcessor) != address(0), \\\"Invalid address\\\");\\n        \\n        transferDomainProcessor = _transferDomainProcessor;\\n        emit TransferDomainProcessorUpdated(_transferDomainProcessor);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the managed mail server key hash adapter\\n     *\\n     * @param _mailServerKeyHashAdapter The new mail server key hash adapter\\n     */\\n    function updateMailServerKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        require(address(_mailServerKeyHashAdapter) != address(0), \\\"Invalid address\\\");\\n        \\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        emit MailServerKeyHashAdapterUpdated(_mailServerKeyHashAdapter);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the fee percentage for the marketplace\\n     *\\n     * @param _newFee The new fee percentage (in basis points)\\n     */\\n    function updateFee(uint256 _newFee) external onlyOwner {\\n        fee = _newFee;\\n        emit FeeUpdated(_newFee);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the fee recipient address\\n     *\\n     * @param _newFeeRecipient The new address to receive fees\\n     */\\n    function updateFeeRecipient(address payable _newFeeRecipient) external onlyOwner {\\n        require(_newFeeRecipient != address(0), \\\"Invalid address\\\");\\n        feeRecipient = _newFeeRecipient;\\n        emit FeeRecipientUpdated(_newFeeRecipient);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the minimum bid active period\\n     *\\n     * @param _newBidSettlementPeriod The new bid settlement period in seconds\\n     */\\n    function updateBidSettlementPeriod(uint256 _newBidSettlementPeriod) external onlyOwner {\\n        require(_newBidSettlementPeriod > 0, \\\"Bid settlement period must be greater than 0\\\");\\n        bidSettlementPeriod = _newBidSettlementPeriod;\\n        emit BidSettlementPeriodUpdated(_newBidSettlementPeriod);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Updates the bid refund period\\n     *\\n     * @param _newBidRefundPeriod The new bid refund period in seconds\\n     */\\n    function updateBidRefundPeriod(uint256 _newBidRefundPeriod) external onlyOwner {\\n        require(_newBidRefundPeriod > 0, \\\"Bid refund period must be greater than 0\\\");\\n        bidRefundPeriod = _newBidRefundPeriod;\\n        emit BidRefundPeriodUpdated(_newBidRefundPeriod);\\n    }\\n\\n    /* ============ View Functions ============ */    \\n\\n    /**\\n     * @notice Get listing information with listingId for a list of listingIds\\n     * @param _listingIds An array of listingIds to fetch details for\\n     */\\n    function getListings(uint256[] memory _listingIds)\\n        external \\n        view \\n        returns (ListingWithId[] memory listingInfo) \\n    {\\n        listingInfo = new ListingWithId[](_listingIds.length);\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\n            listingInfo[i] = ListingWithId({\\n                listingId: _listingIds[i],\\n                listing: listings[_listingIds[i]]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns all listings created by a user\\n     * @param _user The address of the user to fetch listings for\\n     */\\n    function getUserListings(address _user) external view returns (ListingWithId[] memory listingInfo) {\\n        uint256[] memory userListingIds = userListings[_user];\\n        listingInfo = new ListingWithId[](userListingIds.length);\\n        for (uint256 i = 0; i < userListingIds.length; i++) {\\n            uint256 listingId = userListingIds[i];\\n            listingInfo[i] = ListingWithId({\\n                listingId: listingId,\\n                listing: listings[listingId]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the bids created by a user\\n     * @param _user The address of the user to fetch bids for\\n     */\\n    function getUserBids(address _user) external view returns (BidDetailsWithId[] memory bidInfo) {\\n        uint256[] memory userBidIds = userBids[_user];\\n        bidInfo = new BidDetailsWithId[](userBidIds.length);\\n        for (uint256 i = 0; i < userBidIds.length; i++) {\\n            uint256 bidId = userBidIds[i];\\n            bidInfo[i] = BidDetailsWithId({\\n                bidId: bidId,\\n                bid: bids[bidId],\\n                buyerInstantAcceptEnabled: instantAcceptEnabled[_user]\\n            });\\n        }\\n    }\\n\\n    /**\\n     * @notice Returns the bids for given listingIds\\n     * @param _listingIds An array of listingIds to fetch bids for\\n     */\\n    function getListingBids(uint256[] memory _listingIds) external view returns (BidDetailsWithId[][] memory bidInfo) {\\n        bidInfo = new BidDetailsWithId[][](_listingIds.length);\\n        for (uint256 i = 0; i < _listingIds.length; i++) {\\n            uint256 listingId = _listingIds[i];\\n            uint256[] memory listingBidIds = listings[listingId].bids;\\n            bidInfo[i] = new BidDetailsWithId[](listingBidIds.length);\\n            for (uint256 j = 0; j < listingBidIds.length; j++) {\\n                uint256 bidId = listingBidIds[j];\\n                bidInfo[i][j] = BidDetailsWithId({\\n                    bidId: bidId,\\n                    bid: bids[bidId],\\n                    buyerInstantAcceptEnabled: instantAcceptEnabled[bids[bidId].buyer]\\n                });\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Get all allowed sellers\\n     */\\n    function getAllowedSellers() external view returns (address[] memory) {\\n        return _getAllowedAddresses();\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _verifyCreateListing(\\n        bytes32 _domainId, \\n        uint256 _minBidPrice, \\n        uint256 _askPrice, \\n        address _saleEthRecipient\\n    ) internal view {\\n        IVerifiedDomainRegistry.DomainWithId memory domainWithId = verifiedDomainRegistry.getDomain(_domainId);\\n        require(domainWithId.domain.owner == msg.sender, \\\"Caller is not domain owner\\\");\\n        require(domainWithId.domain.exchange == address(0), \\\"Domain already listed on registry\\\");\\n\\n        require(_minBidPrice > 0, \\\"Minimum bid price is zero\\\");\\n        require(_askPrice >= _minBidPrice, \\\"Ask price is less than min bid price\\\");\\n        require(_saleEthRecipient != address(0), \\\"Invalid sale ETH recipient\\\");\\n    }\\n\\n    function _updateCreateListingState(\\n        bytes32 _domainId, \\n        uint256 _askPrice, \\n        uint256 _minBidPrice,\\n        address payable _saleEthRecipient,\\n        bytes memory _encryptionKey,\\n        bytes32 _dkimKeyHash\\n    ) internal returns (uint256 listingId) {\\n        \\n        // New listing\\n        listingId = listingCounter;\\n        listings[listingId] = Listing({\\n            seller: msg.sender,\\n            saleEthRecipient: _saleEthRecipient,\\n            encryptionKey: _encryptionKey,\\n            dkimKeyHash: _dkimKeyHash,\\n            askPrice: _askPrice,\\n            minBidPrice: _minBidPrice,\\n            domainId: _domainId,\\n            createdAt: block.timestamp,\\n            isActive: true,\\n            bids: new uint256[](0)\\n        });\\n        userListings[msg.sender].push(listingId);\\n\\n        // Increment listingCounter\\n        listingCounter = listingCounter + 1;\\n    }\\n\\n    function _validateCreateBid(Listing storage _listing, uint256 _price, bytes32 _buyerIdHash) internal view {\\n        require(_listing.seller != address(0), \\\"Listing does not exist\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n        \\n        // Validate inputs\\n        require(_price >= _listing.minBidPrice, \\\"Bid price is less than min bid price\\\");\\n        require(_buyerIdHash != bytes32(0), \\\"Buyer ID hash cannot be empty\\\");\\n    }\\n\\n    function _updateCreateBidState(\\n        Listing storage _listing, \\n        uint256 _listingId, \\n        uint256 _price, \\n        bytes32 _buyerIdHash, \\n        string memory _encryptedBuyerId\\n    ) internal returns (uint256 bidId) {\\n        bidId = bidCounter;\\n        bids[bidId] = Bid({\\n            buyer: msg.sender,\\n            listingId: _listingId,\\n            encryptedBuyerId: _encryptedBuyerId,\\n            buyerIdHash: _buyerIdHash,\\n            createdAt: block.timestamp,\\n            expiryTimestamp: type(uint256).max,\\n            price: _price,\\n            refundInitiated: false\\n        });\\n        userBids[msg.sender].push(bidId);\\n        _listing.bids.push(bidId);\\n\\n        // Increment bidCounter\\n        bidCounter = bidCounter + 1;\\n    }\\n\\n    function _validateFinalizeSale(\\n        Bid storage _bid, \\n        Listing storage _listing,\\n        bytes32 _dkimKeyHash,\\n        bytes32 _hashedReceiverId, \\n        string memory _transferredDomainName\\n    ) internal view {\\n        require(_bid.buyer != address(0), \\\"Bid does not exist\\\");\\n        require(_listing.seller == msg.sender, \\\"Caller is not listing owner\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n\\n        // Validate namecheap DKIM key\\n        if (_listing.dkimKeyHash != bytes32(0)) {\\n            require(_dkimKeyHash == _listing.dkimKeyHash, \\\"Invalid custom DKIM key hash\\\");\\n        } else {\\n            require(\\n                mailServerKeyHashAdapter.isMailServerKeyHash(_dkimKeyHash), \\n                \\\"Invalid managed DKIM key hash\\\"\\n            );\\n        }\\n\\n        // Validate domain and receiver\\n        bytes32 transferredDomainId = keccak256(abi.encodePacked(_transferredDomainName));\\n        require(_bid.buyerIdHash == _hashedReceiverId, \\\"Invalid receiver\\\");\\n        require(_listing.domainId == transferredDomainId, \\\"Invalid domain\\\");\\n    }\\n\\n    function _updateFinalizeSaleState(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\n        uint256 listingId = _bid.listingId;\\n        \\n        _pruneBid(_bid, _bidId, _listing);\\n        _pruneListing(_listing, listingId);\\n    }\\n\\n    function _validateIncreaseBidPrice(\\n        Bid storage _bid, \\n        Listing storage _listing, \\n        uint256 _newPrice\\n    ) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(!_bid.refundInitiated, \\\"Refund already initiated\\\");\\n        require(_listing.isActive, \\\"Listing not active\\\");\\n\\n        // Validate new price\\n        require(_newPrice > _bid.price, \\\"New price not greater than old price\\\");\\n        require(msg.value == _newPrice - _bid.price, \\\"Incorrect amount of ETH sent\\\");\\n    }\\n\\n    function _validateInitiateRefund(Bid storage _bid, Listing storage _listing) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        require(!_bid.refundInitiated, \\\"Refund already initiated\\\");\\n        require(block.timestamp > bidSettlementPeriod + _bid.createdAt, \\\"Refund period not started\\\");\\n        require(_listing.isActive, \\\"Listing expired. Bid can be withdrawn directly\\\");\\n    }\\n\\n    function _validateWithdrawBid(Bid storage _bid, Listing storage _listing) internal view {\\n        require(_bid.buyer == msg.sender, \\\"Caller is not bid owner\\\");\\n        if (_listing.isActive) {\\n            require(_bid.refundInitiated, \\\"Refund not initiated\\\");\\n            require(block.timestamp >= _bid.expiryTimestamp, \\\"Refund period not ended\\\");\\n        }\\n    }\\n\\n    function _settleSale(address payable _recipient, uint256 _amount) internal returns (uint256 feeAmount) {\\n        feeAmount = (_amount * fee) / PRECISE_UNIT;\\n        _recipient.sendValue(_amount - feeAmount);\\n\\n        if (feeAmount > 0) {\\n            feeRecipient.sendValue(feeAmount);\\n        }\\n    }\\n\\n    /**\\n     * @notice Deletes a bid from the exchange. Removes the bid from the listing's bids array and the buyer's\\n     * bids array. Deletes the listing if it is expired and has no bids.\\n     */\\n    function _pruneBid(Bid storage _bid, uint256 _bidId, Listing storage _listing) internal {\\n        userBids[_bid.buyer].removeStorage(_bidId);\\n        _listing.bids.removeStorage(_bidId);\\n        if (!_listing.isActive && _listing.bids.length == 0) {\\n            delete listings[_bid.listingId];\\n        }\\n        delete bids[_bidId];\\n    }\\n\\n    /**\\n     * @notice Marks a listing as expired. Removes the listing from the seller's listings array and domain listing.\\n     * If the listing has no bids, it is deleted from the exchange.\\n     */\\n    function _pruneListing(Listing storage _listing, uint256 _listingId) internal {\\n        _listing.isActive = false;\\n        userListings[_listing.seller].removeStorage(_listingId);\\n        if (_listing.bids.length == 0) {\\n            delete listings[_listingId];\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressAllowList.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"./lib/AddressArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract AddressAllowList is Ownable {\\n\\n    using AddressArrayUtils for address[];\\n\\n    /* ============ Events ============ */\\n    event AddressAddedToAllowlist(address indexed allowedAddress);\\n    event AddressRemovedFromAllowlist(address indexed allowedAddress);\\n    event AllowlistEnabled();\\n    event AllowlistDisabled();\\n    \\n    /* ============ Modifier ============ */\\n    modifier onlyAllowed() {\\n        require(isEnabled ? isAllowed[msg.sender] : true, \\\"Address is not allowed\\\");\\n        _;\\n    }\\n    \\n    /* ============ State Variables ============ */\\n    bool public isEnabled;                     // Boolean indicating if the allowlist is enabled\\n    address[] public allowedAddresses;         // Array of addresses that are allowed from taking depositors liquidity\\n    mapping(address => bool) public isAllowed; // Mapping of address to boolean indicating if the user is allowed\\n\\n    /* ============ Constructor ============ */\\n    constructor(address[] memory _allowedAddresses) Ownable() {\\n        for (uint256 i = 0; i < _allowedAddresses.length; i++) {\\n            address allowedAddress = _allowedAddresses[i];\\n\\n            require(!isAllowed[allowedAddress], \\\"Address is already allowed\\\");\\n            isAllowed[allowedAddress] = true;\\n            emit AddressAddedToAllowlist(allowedAddress);\\n        }\\n        allowedAddresses = _allowedAddresses;\\n        isEnabled = true;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Adds passed addresses to an allow list. Addresses on the allow list are able to call allow listed\\n     * functions.\\n     *\\n     * @param _allowedAddresses   List of addresses allowed to call allow listed functions\\n     */\\n    function addAddressesToAllowlist(address[] memory _allowedAddresses) external onlyOwner {\\n        for(uint256 i = 0; i < _allowedAddresses.length; i++) {\\n            address allowedAddress = _allowedAddresses[i];\\n\\n            require(!isAllowed[allowedAddress], \\\"Address already on allowlist\\\");\\n\\n            isAllowed[allowedAddress] = true;\\n            allowedAddresses.push(allowedAddress);\\n\\n            emit AddressAddedToAllowlist(allowedAddress);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes passed addresses from an allow list. Addresses not on the allow list are unable to call\\n     * allow listed functions.\\n     *\\n     * @param _disallowedAddresses   List of addresses being disallowed from calling allow listed functions\\n     */\\n    function removeAddressesFromAllowlist(address[] memory _disallowedAddresses) external onlyOwner {\\n        for(uint256 i = 0; i < _disallowedAddresses.length; i++) {\\n            address disallowedAddress = _disallowedAddresses[i];\\n\\n            require(isAllowed[disallowedAddress], \\\"Address already disallowed\\\");\\n\\n            isAllowed[disallowedAddress] = false;\\n            allowedAddresses.removeStorage(disallowedAddress);\\n\\n            emit AddressRemovedFromAllowlist(disallowedAddress);\\n        }\\n    }\\n\\n    /**\\n     * @notice Enable the allow list. When the allow list is enabled, only approved addresses are allowed to\\n     * functions with onlyAllowed modifier.\\n     */\\n    function enableAllowlist() external onlyOwner {\\n        require(!isEnabled, \\\"Allow list is already enabled\\\");\\n\\n        isEnabled = true;\\n        emit AllowlistEnabled();\\n    }\\n\\n    /**\\n     * @notice Disable the allow list. When the allow list is disabled, any address is allowed to call functions\\n     * with onlyAllowed modifier.\\n     */\\n    function disableAllowlist() external onlyOwner {\\n        require(isEnabled, \\\"Allow list is already disabled\\\");\\n\\n        isEnabled = false;\\n        emit AllowlistDisabled();\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function _getAllowedAddresses() internal view returns (address[] memory) {\\n        return allowedAddresses;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/ClaimVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary ClaimVerifier {\\n\\n    /**\\n     * Find the end index of target string in the data string. Returns the end index + 1 if\\n     * the target string in the data string if found. Returns type(uint256).max if:\\n     * - Target is longer than data\\n     * - Target is not found\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     */\\n    function findSubstringEndIndex(\\n        string memory data,\\n        string memory target\\n    ) public pure returns (uint256) {\\n        bytes memory dataBytes = bytes(data);\\n        bytes memory targetBytes = bytes(target);\\n\\n        if (dataBytes.length < targetBytes.length) {\\n            return type(uint256).max;\\n        }\\n\\n        // Find start of target\\n        for (uint i = 0; i <= dataBytes.length - targetBytes.length; i++) {\\n            bool isMatch = true;\\n\\n            for (uint j = 0; j < targetBytes.length && isMatch; j++) {\\n                if (dataBytes[i + j] != targetBytes[j]) {\\n                    isMatch = false;\\n                    break;\\n                }\\n            }\\n\\n            if (isMatch) {\\n                return i + targetBytes.length; // Return end index + 1\\n            }\\n        }\\n\\n        return type(uint256).max;\\n    }\\n\\n    /**\\n     * Extracts given target field value from context in claims. Extracts only ONE value.\\n     * Pass prefix formatted with quotes, for example '\\\"providerHash\\\\\\\":\\\\\\\"'\\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     *\\n     * @param data      Context string from which target value needs to be extracted\\n     * @param prefix    Prefix of the target value that needs to be extracted            \\n     */\\n    function extractFieldFromContext(\\n        string memory data,\\n        string memory prefix\\n    ) public pure returns (string memory) {\\n        // Find end index of prefix; which is the start index of the value\\n        uint256 start = findSubstringEndIndex(data, prefix);\\n\\n        bytes memory dataBytes = bytes(data);\\n        if (start == dataBytes.length) {\\n            return \\\"\\\"; // Prefix not found. Malformed or missing message\\n        }\\n        \\n        // Find the end of the VALUE, assuming it ends with a quote not preceded by a backslash\\n        uint256 end = start;\\n        while (\\n            end < dataBytes.length &&\\n            !(dataBytes[end] == '\\\"' && dataBytes[end - 1] != \\\"\\\\\\\\\\\")\\n        ) {\\n            end++;\\n        }\\n        if (end <= start) {\\n            return \\\"\\\"; // Malformed or missing message\\n        }\\n        bytes memory contextMessage = new bytes(end - start);\\n        for (uint i = start; i < end; i++) {\\n            contextMessage[i - start] = dataBytes[i];\\n        }\\n        return string(contextMessage);\\n    }\\n\\n\\n    /**\\n     * Extracts ALL values from context in a single pass. Context is stored as serialized JSON string with \\n     * two keys: extractedParameters and providerHash. ExtractedParameters itself is a JSON string with \\n     * key-value pairs. This function returns extracted individual values from extractedParameters along \\n     * with providerHash (if extractProviderHash is true). Use maxValues to limit the number of expected values\\n     * to be extracted from extractedParameters. In most cases, one would need to extract all values from\\n     * extractedParameters and providerHash, hence use this function over calling extractFieldFromContext \\n     * multiple times.\\n     * \\n     * @param data                  Context string from which target value needs to be extracted\\n     * @param maxValues             Maximum number of values to be extracted from extractedParameters\\n     * @param extractProviderHash   Extracts and returns providerHash if true\\n     */\\n    function extractAllFromContext(\\n        string memory data,\\n        uint8 maxValues,\\n        bool extractProviderHash\\n    ) public pure returns (string[] memory) {\\n        \\n        require(maxValues > 0, \\\"Max values must be greater than 0\\\");\\n\\n        bytes memory dataBytes = bytes(data);\\n        uint index = 0;\\n\\n        bytes memory extractedParametersBytes = bytes('{\\\\\\\"extractedParameters\\\\\\\":{\\\\\\\"');\\n        for (uint i = 0; i < extractedParametersBytes.length; i++) {\\n            require(dataBytes[index + i] == extractedParametersBytes[i], \\\"Extraction failed. Malformed extractedParameters\\\");\\n        }\\n        index += extractedParametersBytes.length;\\n\\n        bool isValue = false;       // starts with a key right after '{\\\\\\\"extractedParameters\\\\\\\":{\\\\\\\"'\\n        uint valuesFound = 0;\\n    \\n        uint[] memory valueIndices = new uint[](extractProviderHash ? 2 * (maxValues + 1): 2 * maxValues);\\n\\n        while (\\n            index < dataBytes.length\\n        ) {\\n            // Keep incrementing until '\\\"', escaped quotes are not considered\\n            if (!(dataBytes[index] == '\\\"' && dataBytes[index - 1] != \\\"\\\\\\\\\\\")) {\\n                index++;\\n                continue;\\n            }\\n\\n            if (!isValue) {\\n                // \\\\\\\":\\\\\\\" (3 chars)\\n                require(dataBytes[index + 1] == \\\":\\\" && dataBytes[index + 2] == '\\\\\\\"', \\\"Extraction failed. Malformed data 1\\\");\\n                index += 3;     // move it after \\\\\\\"\\n                isValue = true;\\n                valueIndices[2 * valuesFound] = index;      // start index\\n            } else {\\n                // \\\\\\\",\\\\\\\" (3 chars) or \\\\\\\"}, (3 chars)\\n                // \\\\\\\"}} is not supported, there should always be a providerHash\\n                require(\\n                    dataBytes[index + 1] == \\\",\\\" && dataBytes[index + 2] == '\\\\\\\"' ||  \\n                    dataBytes[index + 1] == '}' && dataBytes[index + 2] == \\\",\\\",\\n                    \\\"Extraction failed. Malformed data 2\\\"\\n                );\\n                valueIndices[2 * valuesFound + 1] = index;      // end index\\n                valuesFound++;\\n\\n                if (dataBytes[index + 1] == \\\",\\\") {\\n                    // Revert if valuesFound == maxValues and next char is a comma as there will be more values\\n                    require(valuesFound != maxValues, \\\"Extraction failed. Exceeded max values\\\");\\n                    index += 3;\\n                    isValue = false;\\n                } else {    // index + 1 = \\\"}\\\"\\n                    index += 3;\\n                    break;  // end of extractedParameters\\n                }\\n            }\\n        }\\n\\n        if (extractProviderHash) {\\n            bytes memory providerHashParamBytes = bytes(\\\"\\\\\\\"providerHash\\\\\\\":\\\\\\\"\\\");\\n            for (uint i = 0; i < providerHashParamBytes.length; i++) {\\n                require(dataBytes[index + i] == providerHashParamBytes[i], \\\"Extraction failed. Malformed providerHash\\\");\\n            }\\n            index += providerHashParamBytes.length;\\n            \\n            // final indices tuple in valueIndices will be for star and end indices of provider hash\\n            valueIndices[2 * valuesFound] = index;\\n            // Keep incrementing until '\\\"'\\n            while (\\n                index < dataBytes.length && dataBytes[index] != '\\\"'\\n            ) {\\n                index++;\\n            }\\n            valueIndices[2 * valuesFound + 1] = index;\\n            valuesFound++;\\n        }   \\n        \\n        string[] memory values = new string[](valuesFound);\\n        \\n        for (uint i = 0; i < valuesFound; i++) {\\n            uint startIndex = valueIndices[2 * i];\\n            uint endIndex = valueIndices[2 * i + 1];\\n            bytes memory contextValue = new bytes(endIndex - startIndex);\\n            for (uint j = startIndex; j < endIndex; j++) {\\n                contextValue[j - startIndex] = dataBytes[j];\\n            }\\n            values[i] = string(contextValue);\\n        }\\n\\n        return values;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/external/interfaces/IProxyBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IProxyBaseProcessor {\\n    \\n    struct Proof {\\n        Claims.ClaimInfo claimInfo;\\n        Claims.SignedClaim signedClaim;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/StringArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title StringArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle String Arrays\\n */\\nlibrary StringArrayUtils {\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input string to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(string[] memory A, string memory a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (keccak256(bytes(A[i])) == keccak256(bytes(a))) {\\n                return (i, true);\\n            }\\n        }\\n        return (type(uint256).max, false);\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The string to remove\\n     */\\n    function removeStorage(string[] storage A, string memory a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"String not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\"\n    },\n    \"contracts/external/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/external/lib/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(uint256[] memory A, uint256 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/external/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./lib/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"./lib/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/EmailBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../interfaces/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract EmailBaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(msg.sender == exchange, \\\"Only exchange can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable exchange;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        exchange = _exchange;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/processors/ProxyBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Claims } from \\\"@reclaimprotocol/verifier-solidity-sdk/contracts/Claims.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../lib/AddressArrayUtils.sol\\\";\\nimport { StringArrayUtils } from \\\"../lib/StringArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"../interfaces/INullifierRegistry.sol\\\";\\nimport { IProxyBaseProcessor } from \\\"../interfaces/IProxyBaseProcessor.sol\\\";\\nimport { ClaimVerifier } from \\\"../ClaimVerifier.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ProxyBaseProcessor is IProxyBaseProcessor, Ownable {\\n\\n    using AddressArrayUtils for address[];\\n    using StringArrayUtils for string[];\\n\\n    /* ============ State Variables ============ */\\n    mapping(address => bool) public isWitness;\\n    address[] public witnesses;\\n    mapping(string => bool) public isProviderHash;\\n    string[] public providerHashes;                         // Set of provider hashes that these proofs should be for\\n    INullifierRegistry public immutable nullifierRegistry;\\n\\n    /* ============ Events ============ */\\n    event WitnessAdded(address witness);\\n    event WitnessRemoved(address witness);\\n    event ProviderHashAdded(string providerHash);\\n    event ProviderHashRemoved(string providerHash);\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        INullifierRegistry _nulliferRegistry,\\n        string[] memory _providerHashes\\n    )\\n        Ownable()\\n    {\\n        nullifierRegistry = _nulliferRegistry;\\n\\n        for (uint256 i = 0; i < _providerHashes.length; i++) {\\n            require(!isProviderHash[_providerHashes[i]], \\\"Provider hash already added\\\");\\n            isProviderHash[_providerHashes[i]] = true;\\n            providerHashes.push(_providerHashes[i]);\\n\\n            emit ProviderHashAdded(_providerHashes[i]);\\n        }\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add witness address. Witness must not have been previously added.\\n     *\\n     * @param _newWitness    Address of the new witness\\n     */\\n    function addWitness(address _newWitness) external onlyOwner {\\n        require(!isWitness[_newWitness], \\\"Address is already a witness\\\");\\n\\n        isWitness[_newWitness] = true;\\n        witnesses.push(_newWitness);\\n\\n        emit WitnessAdded(_newWitness);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove witness address. Witness must have been previously added.\\n     *\\n     * @param _removeWitness    Address of witness to be removed\\n     */\\n    function removeWitness(address _removeWitness) external onlyOwner {\\n        require(isWitness[_removeWitness], \\\"Address is not a witness\\\");\\n\\n        delete isWitness[_removeWitness];\\n        witnesses.removeStorage(_removeWitness);\\n\\n        emit WitnessRemoved(_removeWitness);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Add provider hash string. Provider hash must not have been previously added.\\n     *\\n     * @param _newProviderHash    New provider hash to be added\\n     */\\n    function addProviderHash(string memory _newProviderHash) external onlyOwner {\\n        require(!isProviderHash[_newProviderHash], \\\"Provider hash already added\\\");\\n\\n        isProviderHash[_newProviderHash] = true;\\n        providerHashes.push(_newProviderHash);\\n\\n        emit ProviderHashAdded(_newProviderHash);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove provider hash string. Provider hash must have been previously added.\\n     *\\n     * @param _removeProviderHash    Provider hash to be removed\\n     */\\n    function removeProviderHash(string memory _removeProviderHash) external onlyOwner {\\n        require(isProviderHash[_removeProviderHash], \\\"Provider hash not found\\\");\\n\\n        delete isProviderHash[_removeProviderHash];\\n        providerHashes.removeStorage(_removeProviderHash);\\n\\n        emit ProviderHashRemoved(_removeProviderHash);\\n    }\\n\\n    /* ============ Public Functions ============ */\\n    \\n    /**\\n     * Verify proof generated by witnesses. Claim is constructed by hashing claimInfo (provider, context, parameters)\\n     * to get the identifier. And then signing on (identifier, owner, timestamp, epoch) to get claim signature. \\n     * This function verifies a claim by performing the following checks on the claim\\n     * - Calculates the hash of the claimInfo and checks if it matches the identifier in the claim\\n     * - Checks if the signatures are valid and from the witnesses\\n     * This function reverts if\\n     * - No signatures are found on the proof\\n     * - Number of signatures is not equal to the number of witnesses\\n     * - ClaimInfo hash does not match the identifier in the claim\\n     * - Signatures are invalid (not from the witnesses)\\n     * \\n     * DEV NOTE: This function does NOT validate that the claim provider hash is valid. That is the \\n     * responsibility of the caller.\\n     * \\n     * Parts of the code are adapted from: https://basescan.org/address/0x7281630e4346dd4c0b7ae3b4689c1d0102741410#code\\n     *    \\n     * @param proof                 Proof to be verified\\n     */\\n    function verifyProofSignatures(Proof memory proof) public view returns (bool) {\\n\\n        // create signed claim using claimData and signature.\\n        require(proof.signedClaim.signatures.length > 0, \\\"No signatures\\\");\\n        Claims.SignedClaim memory signed = Claims.SignedClaim(\\n            proof.signedClaim.claim,\\n            proof.signedClaim.signatures\\n        );\\n\\n        // check if the hash from the claimInfo is equal to the infoHash in the claimData\\n        bytes32 hashed = Claims.hashClaimInfo(proof.claimInfo);\\n        require(proof.signedClaim.claim.identifier == hashed, \\\"ClaimInfo hash doesn't match\\\");\\n\\n        // Recover signers of the signed claim\\n        address[] memory signedWitnesses = Claims.recoverSignersOfSignedClaim(signed);\\n\\n        // check if the number of signatures is equal to the number of witnesses\\n        require(\\n            signedWitnesses.length == witnesses.length,\\n            \\\"Number of signatures not equal to number of witnesses\\\"\\n        );\\n\\n        // Check signatures are from witnesses\\n        for (uint256 i = 0; i < signed.signatures.length; i++) {\\n            bool found = false;\\n            for (uint j = 0; j < witnesses.length; j++) {\\n                if (signedWitnesses[i] == witnesses[j]) {\\n                    found = true;\\n                    break;\\n                }\\n            }\\n            require(found, \\\"Signature not appropriate\\\");\\n        }\\n\\n        return true;\\n    }\\n\\n\\n    /* ============ View Functions ============ */\\n\\n    function getWitnesses() external view returns (address[] memory) {\\n        return witnesses;\\n    }\\n\\n    function getProviderHashes() external view returns (string[] memory) {\\n        return providerHashes;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProviderHash(string memory _providerHash) internal view returns (bool) {\\n        return isProviderHash[_providerHash];\\n    }\\n    \\n    function _validateAndAddNullifier(bytes[] memory _sigArray) internal {\\n        bytes32 nullifier = keccak256(abi.encode(_sigArray));\\n        require(!nullifierRegistry.isNullified(nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/TicketmasterDataParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"./lib/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"./lib/StringConversionUtils.sol\\\";\\nimport { ClaimVerifier } from \\\"./ClaimVerifier.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary TicketmasterDataParsing {\\n    \\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each dash, \\\"T\\\", or colon. Function will revert\\n     * if there are not 6 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is SPECIFIC TO THE DATE FORMAT USED BY Ticketmaster, not suitable for use with other date\\n     * formats. Ticketmaster date format is: \\\"YYYY-MM-DDTHH:MM:SS\\\" and returns UTC timestamps.\\n     *\\n     * @param _dateString       Date string to be converted to a UTC timestamp\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256 utcTimestamp) {\\n        string[6] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x2d || bytes(_dateString)[i] == 0x3a || bytes(_dateString)[i] == 0x54) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 6 substrings were found (string is split at 5 different places)\\n        require(breakCounter == 5, \\\"Invalid date string\\\");\\n\\n        utcTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[0].stringToUint(0),    // year\\n            extractedStrings[1].stringToUint(0),    // month\\n            extractedStrings[2].stringToUint(0),    // day\\n            extractedStrings[3].stringToUint(0),    // hour\\n            extractedStrings[4].stringToUint(0),    // minute\\n            0                                       // we don't need to the second granularity\\n        );\\n    }\\n\\n    /**\\n     * Extract event ID from URL by finding the last slash and taking the substring after it. We assume the\\n     * URL is formulated something like: {domainRoot}/.../event/EVENT_ID\\n     *\\n     * @param _url          URL to extract event ID from\\n     * @return              Event ID extracted from URL\\n     */\\n    function _extractEventIdFromUrl(string memory _url) internal pure returns (string memory) {\\n        string memory prefix = \\\"event/\\\";\\n        bytes memory urlBytes = bytes(_url);\\n        uint256 urlLength = urlBytes.length;\\n\\n        uint256 startIndex = ClaimVerifier.findSubstringEndIndex(_url, prefix);\\n        // If the start index is the max value or the URL length, then the event ID was not found\\n        if (startIndex == type(uint256).max || startIndex == urlLength) {\\n            revert(\\\"Event ID not found in URL\\\");\\n        }\\n\\n        bytes memory contextMessage = new bytes(urlLength - startIndex);\\n        for (uint i = startIndex; i < urlLength; i++) {\\n            contextMessage[i - startIndex] = urlBytes[i];\\n        }\\n        return string(contextMessage);\\n    }\\n\\n    /**\\n     * Parse tickets out of a ticket string of the format: '[\\\"ticket1\\\", \\\"ticket2\\\", \\\"ticket3\\\"]'.\\n     * We start by getting the number of tickets in a string by counting the number of commas and adding 1.\\n     * Then we iterate through the string and find the ticket IDs by looking for the quotes. We need to extract\\n     * from quote to quote so we look for all even-numbered quotes then extract the string between that and the\\n     * previous quote index.\\n     *\\n     * @param _ticketString          Stringified array of tickets\\n     */\\n     function _parseTicketString(string memory _ticketString) internal pure returns (string[] memory ticketIds) {\\n        // Assume there is at least one ticket (which means array would not have a comma)\\n        // If there is no ticket then the transaction will end up reverting\\n        uint256 ticketCount = 1;\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\n            if (bytes(_ticketString)[i] == 0x2C) {\\n                ticketCount++;\\n            }\\n        }\\n\\n        ticketIds = new string[](ticketCount);\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_ticketString).length; i++) {\\n            if (bytes(_ticketString)[i] == 0x22) {\\n                breakCounter++;\\n                if (breakCounter % 2 == 0) {\\n                    ticketIds[(breakCounter/2)-1] = _ticketString.substring(lastBreak, i-1);\\n                }\\n                lastBreak = i + 1;\\n            }\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IDomainExchange.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface IDomainExchange {\\n    function registryRemoveListing(uint256 _listingId) external;\\n}\"\n    },\n    \"contracts/interfaces/ITransferDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.18;\\n\\n\\ninterface ITransferDomainProcessor {\\n\\n    struct TransferProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[10] signals;\\n    }\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    ) \\n        external \\n        returns (\\n            bytes32 dkimKeyHash, \\n            bytes32 hashedReceiverId, \\n            string memory domainName, \\n            uint256 bidId\\n        );\\n}\"\n    },\n    \"contracts/interfaces/IVerifiedDomainRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IVerifyDomainProcessor } from \\\"./IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IVerifiedDomainRegistry {\\n\\n    struct Domain {\\n        address owner;\\n        string name;\\n        uint256 expiryTime;\\n        address exchange;\\n        uint256 listingId;\\n    }\\n\\n    struct DomainWithId {\\n        bytes32 domainId;\\n        Domain domain;\\n    }\\n\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external;\\n    \\n    function getDomainId(string memory _domainName) external pure returns (bytes32);\\n    function getDomainOwner(bytes32 _domainId) external view returns (address);\\n    function getDomain(bytes32 _domainId) external view returns (DomainWithId memory);\\n    function getDomains(bytes32[] memory _domainId) external view returns (DomainWithId[] memory);\\n    \\n    function setDomainListing(bytes32 _domainId, uint256 _listingId) external;\\n    function removeDomainListing(bytes32 _domainId) external;\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) external;\\n}\\n\"\n    },\n    \"contracts/interfaces/IVerifyDomainProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\nimport { IProxyBaseProcessor } from \\\"../external/interfaces/IProxyBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IVerifyDomainProcessor is IProxyBaseProcessor {\\n    \\n    struct DomainRaw {\\n        string name;\\n        uint256 expiryTime;\\n    }\\n\\n    function verifyProofs(\\n        Proof[] memory _proofs\\n    ) \\n        external  \\n        returns (DomainRaw[] memory domains);\\n}\"\n    },\n    \"contracts/mocks/DomainExchangeMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\nimport \\\"../interfaces/IDomainExchange.sol\\\";\\nimport \\\"../interfaces/IVerifiedDomainRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract DomainExchangeMock is IDomainExchange {\\n    \\n    mapping(uint256 => bool) public listingActive;\\n    IVerifiedDomainRegistry public verifiedDomainRegistry;\\n\\n    constructor(\\n        IVerifiedDomainRegistry _verifiedDomainRegistry\\n    ) {\\n        verifiedDomainRegistry = _verifiedDomainRegistry;\\n    }\\n\\n    function createListing(bytes32 _domainId, uint256 _listingId) public {\\n        listingActive[_listingId] = true;\\n        verifiedDomainRegistry.setDomainListing(_domainId, _listingId);\\n    }\\n\\n    function registryRemoveListing(uint256 _listingId) external override {\\n        listingActive[_listingId] = false;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/TransferDomainProcessorMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ITransferDomainProcessor } from \\\"../interfaces/ITransferDomainProcessor.sol\\\";\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessorMock is ITransferDomainProcessor {\\n\\n    using StringUtils for uint256;\\n\\n    /* ============ State Variables ============ */\\n    string storedDomainName;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function setDomainName(string memory _domainName) external {\\n        storedDomainName = _domainName;\\n    }\\n\\n    function processProof(TransferProof memory _proof)\\n        external\\n        view\\n        override\\n        returns (bytes32 dkimKeyHash, bytes32 hashedReceiverId, string memory domainName, uint256 bidId)\\n    {\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n        hashedReceiverId = bytes32(_proof.signals[1]);\\n        domainName = storedDomainName;\\n        bidId = _proof.signals[3];\\n    }\\n}\\n\\n\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VerifyDomainProcessorMock.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ClaimVerifier } from \\\"../external/ClaimVerifier.sol\\\";\\nimport { StringConversionUtils } from \\\"../external/lib/StringConversionUtils.sol\\\";\\nimport { TicketmasterDataParsing } from \\\"../external/TicketmasterDataParsing.sol\\\";\\n\\nimport { IVerifyDomainProcessor } from \\\"../interfaces/IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VerifyDomainProcessorMock is IVerifyDomainProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\n\\n    function verifyProofs(Proof[] memory _proofs)\\n        external\\n        pure\\n        returns (DomainRaw[] memory domains)\\n    {\\n        domains = new DomainRaw[](_proofs.length);\\n\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\n            domains[i] = DomainRaw({\\n                name: string(_proofs[i].signedClaim.signatures[0]),\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\"YYYY-MM-DDTHH:MM:SS\\\"\\n                // and returns UTC timestamps.\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(string(_proofs[i].signedClaim.signatures[1]))\\n            });\\n        }\\n\\n        return domains;\\n    }\\n}\\n\"\n    },\n    \"contracts/TransferDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { EmailBaseProcessor } from \\\"./external/processors/EmailBaseProcessor.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\n\\nimport { Groth16Verifier } from \\\"./verifiers/namecheap_transfer_verifier.sol\\\";\\nimport { ITransferDomainProcessor } from \\\"./interfaces/ITransferDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TransferDomainProcessor is Groth16Verifier, ITransferDomainProcessor, EmailBaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 31;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _exchange,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        EmailBaseProcessor(\\n            _exchange,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        TransferProof calldata _proof\\n    )\\n        external\\n        override\\n        onlyExchange\\n        returns (\\n            bytes32 dkimKeyHash,\\n            bytes32 hashedReceiverId,\\n            string memory domainName, \\n            uint256 bidId\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\");\\n\\n        // Signal [0] is the DKIM key hash\\n        dkimKeyHash = bytes32(_proof.signals[0]);\\n\\n        // Signals [1:2] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 2);\\n        require(\\n            keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\n            \\\"Invalid email from address\\\"\\n        );\\n        \\n        // Signals [2:7] are packed domain name\\n        domainName = _parseSignalArray(_proof.signals, 2, 7);\\n\\n        // Signal [7] is packed hashed namecheap id to which domain was transferred\\n        hashedReceiverId = bytes32(_proof.signals[7]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[8]));\\n\\n        // Signal [9] is bidId\\n        bidId = _proof.signals[9];\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[10] calldata _signals, uint8 _from, uint8 _to) \\n        internal \\n        pure \\n        returns (string memory) \\n    {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/VerifiedDomainRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"./external/lib/Bytes32ArrayUtils.sol\\\";\\nimport { AddressArrayUtils } from \\\"./external/lib/AddressArrayUtils.sol\\\";\\n\\nimport { IDomainExchange } from \\\"./interfaces/IDomainExchange.sol\\\";\\nimport { IVerifiedDomainRegistry } from \\\"./interfaces/IVerifiedDomainRegistry.sol\\\";\\nimport { IVerifyDomainProcessor } from \\\"./interfaces/IVerifyDomainProcessor.sol\\\";\\n\\n\\npragma solidity ^0.8.18;\\n\\ncontract VerifiedDomainRegistry is IVerifiedDomainRegistry, Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using AddressArrayUtils for address[];\\n\\n    /* ============ Events ============ */\\n    event DomainVerified(\\n        bytes32 indexed domainId,\\n        address indexed owner,\\n        string domainName,\\n        uint256 expiryTime\\n    );\\n\\n    event DomainListed(\\n        bytes32 indexed domainId,\\n        address indexed exchange,\\n        uint256 indexed listingId\\n    );\\n\\n    event DomainListingRemoved(\\n        bytes32 indexed domainId,\\n        address indexed exchange\\n    );\\n\\n    event DomainTransferred(\\n        bytes32 indexed domainId,\\n        address indexed oldOwner,\\n        address indexed newOwner\\n    );\\n\\n\\n    event VerifyDomainProcessorUpdated(\\n        IVerifyDomainProcessor indexed newVerifyDomainProcessor\\n    );\\n\\n    event ExchangeAdded(address indexed exchange);\\n    event ExchangeRemoved(address indexed exchange);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyExchange() {\\n        require(isExchange[msg.sender], \\\"Caller must be exchange\\\");\\n        _;\\n    }\\n\\n    modifier onlyInitialized() {\\n        require(isInitialized, \\\"Contract must be initialized\\\");\\n        _;\\n    }\\n\\n    /* ============ Public Variables ============ */\\n    IVerifyDomainProcessor public verifyDomainProcessor;\\n    address[] public exchanges;\\n    mapping(address=>bool) public isExchange;\\n\\n    bool public isInitialized;\\n\\n    mapping(bytes32 => Domain) public domains;\\n    mapping(address => bytes32[]) public userDomains;\\n\\n    /* ============ Constructor ============ */\\n    \\n    constructor() Ownable() {}\\n\\n    /* ============ Public Functions ============ */\\n\\n    /**\\n     * @notice Verify domains and add them to the registry. If domain is transferred off-chain to another party \\n     * then they can re-verify the domain and claim ownership of the domain and previous ownership is removed.\\n     * The existing owner can re-verify the domain, say after the domain has expired to update the expiry time on\\n     * the domain. Function reverts if:\\n     * - Domain ownership TLS proofs are invalid\\n     * \\n     * @param _proofs           Array of domain ownership TLS proofs\\n     */\\n    function verifyDomains(IVerifyDomainProcessor.Proof[] memory _proofs) external override\\n        onlyInitialized\\n    {\\n        IVerifyDomainProcessor.DomainRaw[] memory rawDomains = verifyDomainProcessor.verifyProofs(\\n            _proofs\\n        );\\n\\n        for (uint256 i = 0; i < rawDomains.length; i++) {\\n            IVerifyDomainProcessor.DomainRaw memory rawDomain = rawDomains[i];\\n            bytes32 domainId = getDomainId(rawDomain.name);\\n\\n            Domain storage domain = domains[domainId];\\n            if (domain.owner == address(0)) {\\n                // Case 1.1: Domain has no owner\\n                // Add caller as owner\\n                userDomains[msg.sender].push(domainId);\\n\\n                // Set domain details\\n                domains[domainId] = Domain({\\n                    owner: msg.sender,\\n                    name: rawDomain.name,\\n                    expiryTime: rawDomain.expiryTime,\\n                    exchange: address(0),\\n                    listingId: 0\\n                });\\n            } else {\\n                // Case 2: Domain has owner\\n                // Case 2.1: Caller is owner; skip\\n                if (domain.owner == msg.sender) {\\n                    // No updates to userDomains\\n\\n                    // Update domain details; Only expiry time can change\\n                    // Owner and domain name cannot change\\n                    // Exchange and listingId are kept as is\\n                    domain.expiryTime = rawDomain.expiryTime;\\n                }\\n                // Case 2.2: Caller is NOT owner\\n                if (domain.owner != msg.sender) {\\n                    // Remove ownership from old owner\\n                    userDomains[domain.owner].removeStorage(domainId);\\n\\n                    // Remove listing on exchange if it exists\\n                    if (domain.exchange != address(0)) {\\n                        IDomainExchange(domain.exchange).registryRemoveListing(domain.listingId);\\n                    }\\n\\n                    // Add domain to new owner\\n                    userDomains[msg.sender].push(domainId);\\n\\n                    // Set domain details except for domain name as it cannot change\\n                    domain.owner = msg.sender;\\n                    domain.expiryTime = rawDomain.expiryTime;\\n                    domain.exchange = address(0);\\n                    domain.listingId = 0;\\n                }\\n            }\\n\\n            emit DomainVerified(domainId, msg.sender, rawDomain.name, rawDomain.expiryTime);\\n        }\\n    }\\n\\n    // Todo: Add function for relinquishing ownership of domain\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Add a listing status to domain. We check that the domain has been verified and is\\n     * listed on the calling exchange. This sets the exchange and listingId of the domain.\\n     * \\n     * @param _domainId     Domain to set listed status for\\n     * @param _listingId    Listing Id of domain on calling exchange\\n     */\\n    function setDomainListing(bytes32 _domainId, uint256 _listingId)\\n        external\\n        override\\n        onlyInitialized\\n        onlyExchange\\n    {\\n        Domain storage domain = domains[_domainId];\\n\\n        require(domain.owner != address(0), \\\"Domain must be verified\\\");\\n        require(domain.exchange == address(0), \\\"Domain already listed on another exchange\\\");\\n\\n        domain.exchange = msg.sender;\\n        domain.listingId = _listingId;\\n\\n        emit DomainListed(_domainId, msg.sender, _listingId);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Remove a listing status from domain. We check that the calling exchange is the one\\n     * that the domain is listed on. This removes the exchange and listingId from the domain.\\n     * \\n     * @param _domainId            Domain ID to update listing status for\\n     */\\n    function removeDomainListing(bytes32 _domainId) external override onlyInitialized onlyExchange {\\n        Domain storage domain = domains[_domainId];\\n        require(domain.exchange == msg.sender, \\\"Domain not listed on calling exchange\\\");\\n\\n        _removeDomainListing(domain);\\n\\n        emit DomainListingRemoved(_domainId, msg.sender);\\n    }\\n\\n    /**\\n     * @notice ONLY EXCHANGE: Update domain on sale. We check that the calling exchange is the one that the domain\\n     * is listed on. This updates the ownership of the domain to the new owner as well as removes the listing status\\n     * from the domain.\\n     * \\n     * @param _domainId            Domain ID to update listing status for\\n     * @param _newOwner            New owner of the domain\\n     */\\n    function updateDomainOnSale(bytes32 _domainId, address _newOwner) \\n        external \\n        override \\n        onlyInitialized \\n        onlyExchange \\n    {\\n        Domain storage domain = domains[_domainId];\\n        require(domain.exchange == msg.sender, \\\"Domain not listed on calling exchange\\\");\\n\\n        _removeDomainListing(domain);\\n\\n        // Update ownership\\n        address oldOwner = domain.owner;\\n        domain.owner = _newOwner;\\n        userDomains[oldOwner].removeStorage(_domainId);\\n        userDomains[_newOwner].push(_domainId);\\n\\n        emit DomainTransferred(_domainId, oldOwner, _newOwner);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Initialize the contract with the VerifyDomainProcessor and exchange contracts.\\n     * This can only be called once.\\n     *\\n     * @param _verifyDomainProcessor    Address of the VerifyDomainProcessor contract\\n     */\\n    function initialize(\\n        IVerifyDomainProcessor _verifyDomainProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        verifyDomainProcessor = _verifyDomainProcessor;\\n\\n        isInitialized = true;\\n\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Add an exchange to the registry. This can only be called after the contract has been initialized.\\n     * Exchange must not already exist in the registry.\\n     * \\n     * @param _exchange     Address of the exchange contract\\n     */\\n    function addExchange(address _exchange) external onlyOwner onlyInitialized {\\n        require(!isExchange[_exchange], \\\"Duplicate exchange\\\");\\n\\n        isExchange[_exchange] = true;\\n        exchanges.push(_exchange);\\n\\n        emit ExchangeAdded(_exchange);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Remove an exchange from the registry. Exchange must exist in the registry.\\n     * \\n     * @param _exchange     Address of the exchange contract\\n     */\\n    function removeExchange(address _exchange) external onlyOwner onlyInitialized {\\n        require(isExchange[_exchange], \\\"Exchange does not exist\\\");\\n\\n        isExchange[_exchange] = false;\\n        exchanges.removeStorage(_exchange);\\n\\n        emit ExchangeRemoved(_exchange);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Update the verify domain processor\\n     *\\n     * @param _verifyDomainProcessor    Address of the new VerifyDomainProcessor contract\\n     */\\n    function updateVerifyDomainProcessor(IVerifyDomainProcessor _verifyDomainProcessor) external onlyOwner {\\n        require(address(_verifyDomainProcessor) != address(0), \\\"Invalid address\\\");\\n\\n        verifyDomainProcessor = _verifyDomainProcessor;\\n        emit VerifyDomainProcessorUpdated(_verifyDomainProcessor);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function getDomainId(string memory _domainName) public pure override returns (bytes32) {\\n        return keccak256(abi.encodePacked(_domainName));\\n    }\\n\\n    function getDomainOwner(bytes32 _domainId) external view override returns (address) {        \\n        return domains[_domainId].owner;\\n    }\\n\\n    function getUserDomains(address _user) external view returns (DomainWithId[] memory domainInfo) {\\n        bytes32[] memory domainIds = userDomains[_user];\\n        \\n        domainInfo = new DomainWithId[](domainIds.length);\\n        for (uint256 i = 0; i < domainIds.length; i++) {\\n            bytes32 domainId = domainIds[i];\\n            domainInfo[i] = DomainWithId({\\n                domainId: domainId,\\n                domain: domains[domainId]\\n            });\\n        }\\n    }\\n\\n    function getDomain(bytes32 _domainId) external view override returns (DomainWithId memory domainInfo) {\\n        return DomainWithId({\\n            domainId: _domainId,\\n            domain: domains[_domainId]\\n        });\\n    }\\n\\n    function getDomains(bytes32[] memory _domains) external view returns (DomainWithId[] memory domainInfo) {\\n        domainInfo = new DomainWithId[](_domains.length);\\n        for (uint256 i = 0; i < _domains.length; i++) {\\n            bytes32 domainId = _domains[i];\\n            domainInfo[i] = DomainWithId({\\n                domainId: domainId,\\n                domain: domains[domainId]\\n            });\\n        }\\n    }\\n\\n    function getExchanges() external view returns (address[] memory) {\\n        return exchanges;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _removeDomainListing(Domain storage _domain) internal {\\n        delete _domain.exchange;\\n        delete _domain.listingId;\\n    }\\n}\"\n    },\n    \"contracts/verifiers/namecheap_transfer_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n\\n    uint256 constant IC0x = 12140764414809439171579073747096628005611143888739021778142114438725209856911;\\n    uint256 constant IC0y = 18380664008722994554410246598515713804368408809139402801410617352473294938101;\\n\\n    uint256 constant IC1x = 16287270730688090110441256630912972881096977102957363147237538512209615075930;\\n    uint256 constant IC1y = 2449016754858987854593324887044687327196932594716827949199487058237499016691;\\n\\n    uint256 constant IC2x = 12290000746054008145532172012836689239677528072347882111559847558608807494030;\\n    uint256 constant IC2y = 14308358318183304542626969831757608989020288980497492892592599563043422576641;\\n\\n    uint256 constant IC3x = 17109205409157997740951972967816433882944148152574672952222919864324056429618;\\n    uint256 constant IC3y = 9961558237149244928391169779496769511791942854258198694890294984589871243856;\\n\\n    uint256 constant IC4x = 12885622983359679040345794541760667584938087103345731492334670493606961282700;\\n    uint256 constant IC4y = 18397333374263242470546340955330845415543534978510188436756186606821028634481;\\n\\n    uint256 constant IC5x = 8251971901226176941314060074725743834337466028961811325874949093602610929902;\\n    uint256 constant IC5y = 16257777857146800480589260332284762827173712873310789777823130626151679328406;\\n\\n    uint256 constant IC6x = 7755902890727928430969631143079950108469618570373249456222008624592630122217;\\n    uint256 constant IC6y = 10757977250154075642155615103618917172698106635999924885067022788329148453826;\\n\\n    uint256 constant IC7x = 9229565613389027758694089669374665969186485724568040364429447974425840672975;\\n    uint256 constant IC7y = 8522685561456236376873601057738356653321521861001626828091657280469196217906;\\n\\n    uint256 constant IC8x = 21276732369738095771663301979590133243106197446584260397744418605720907267683;\\n    uint256 constant IC8y = 7293000518568388677473960035761983204180608786522452828815102825735261508468;\\n\\n    uint256 constant IC9x = 9116173570523657214485637140779662063231707742648921986441734490858993965489;\\n    uint256 constant IC9y = 20125316561678768525824986864877835211109013619593406972323904438419789772526;\\n\\n    uint256 constant IC10x = 14220475398513461434883329515056365002533036699993990374428625877488131891870;\\n    uint256 constant IC10y = 12173247053801606963174627761051371553685163525039542034195810636700588930659;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, r)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/VerifyDomainProcessor.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n\\nimport { ClaimVerifier } from \\\"./external/ClaimVerifier.sol\\\";\\nimport { INullifierRegistry } from \\\"./external/interfaces/INullifierRegistry.sol\\\";\\nimport { ProxyBaseProcessor } from \\\"./external/processors/ProxyBaseProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"./external/lib/StringConversionUtils.sol\\\";\\nimport { TicketmasterDataParsing } from \\\"./external/TicketmasterDataParsing.sol\\\";\\n\\nimport { IVerifyDomainProcessor } from \\\"./interfaces/IVerifyDomainProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\n\\ncontract VerifyDomainProcessor is IVerifyDomainProcessor, ProxyBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint8 constant MAX_EXTRACT_VALUES = 5;\\n\\n    /* ============ State Variables ============ */\\n    address public immutable registry;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _registry,\\n        INullifierRegistry _nullifierRegistry,\\n        string[] memory _providerHashes\\n    )   \\n        ProxyBaseProcessor(_nullifierRegistry, _providerHashes)\\n    {\\n        registry = _registry;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY REGISTRY: Verifies proofs. Extracts values and formats them into Domain structs.\\n     *\\n     * @param _proofs        Proofs to be verified\\n     * @return domains       Array of Domain structs\\n     */\\n    function verifyProofs(\\n        Proof[] memory _proofs\\n    ) \\n        external \\n        override\\n        returns (DomainRaw[] memory domains)\\n    {\\n        require(msg.sender == registry, \\\"Only registry can call\\\");\\n\\n        domains = new DomainRaw[](_proofs.length);\\n\\n        for (uint256 i = 0; i < _proofs.length; i++) {\\n            Proof memory proof = _proofs[i];\\n\\n            verifyProofSignatures(proof);\\n\\n            (\\n                string memory domainName,\\n                string memory expiryTimeStr,\\n                string memory providerHash\\n            ) = _extractValues(proof);\\n\\n            // Check provider hash\\n            require(_validateProviderHash(providerHash), \\\"No valid providerHash\\\");\\n\\n            _validateAndAddNullifier(proof.signedClaim.signatures);\\n\\n            domains[i] = DomainRaw({\\n                name: domainName,\\n                // The TicketmasterDataParsing library's date parsing logic is pretty generic, and works for domain \\n                // expiry dates as well. Similar to Ticketmaster dates, the expiry time is of the format \\\"YYYY-MM-DDTHH:MM:SS\\\"\\n                // and returns UTC timestamps.\\n                expiryTime: TicketmasterDataParsing._dateStringToTimestamp(expiryTimeStr)\\n            });\\n        }\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * Extracts all values from the proof context.\\n     *\\n     * @param _proof The proof containing the context to extract values from.\\n     */\\n    function _extractValues(Proof memory _proof) internal pure returns (\\n        string memory domainName,\\n        string memory expiryTime,\\n        string memory providerHash\\n    ) {\\n        string[] memory values = ClaimVerifier.extractAllFromContext(\\n            _proof.claimInfo.context, \\n            MAX_EXTRACT_VALUES, \\n            true\\n        );\\n\\n        return (\\n            values[0], // domainName\\n            values[1], // expiryTime\\n            values[2]  // providerHash\\n        );\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"viaIR\": true,\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200,\n      \"details\": {\n        \"yulDetails\": {\n          \"optimizerSteps\": \"u\"\n        }\n      }\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-domain/hardhat.config.ts",
    "content": "import * as dotenv from 'dotenv';\n\nimport '@typechain/hardhat'\nimport 'solidity-coverage'\nimport '@nomiclabs/hardhat-ethers'\nimport 'hardhat-deploy';\nimport '@nomiclabs/hardhat-etherscan';\nimport '@nomicfoundation/hardhat-chai-matchers'\nimport 'hardhat-gas-reporter';\n\nimport { HardhatUserConfig } from \"hardhat/config\";\nimport { task } from \"hardhat/config\";\n\n\ndotenv.config();\n\nconst config: HardhatUserConfig = {\n  solidity: {\n    compilers: [\n      {\n        version: \"0.8.18\",\n        settings: {\n          viaIR: true,\n          optimizer: {\n            enabled: true,\n            runs: 200,\n            details: {\n              yulDetails: {\n                optimizerSteps: \"u\",\n              },\n            },\n          },\n        },\n      },\n    ],\n  },\n  networks: {\n    hardhat: {\n      allowBlocksWithSameTimestamp: true,\n      gas: 1000000000,\n      hardfork: \"cancun\"\n    },\n    localhost: {\n      allowBlocksWithSameTimestamp: true,\n      hardfork: \"cancun\"\n    },\n    base_staging: {\n      url: \"https://developer-access-mainnet.base.org\",\n      // @ts-ignore\n      accounts: [\n        `0x${process.env.BASE_DEPLOY_PRIVATE_KEY}`,\n      ],\n      verify: {\n        etherscan: {\n          apiUrl: \"https://api.basescan.org/\",\n          apiKey: process.env.BASESCAN_API_KEY\n        }\n      },\n    },\n    sepolia: {\n      url: \"https://sepolia.infura.io/v3/\" + process.env.INFURA_TOKEN,\n      // @ts-ignore\n      accounts: [\n        `0x${process.env.TESTNET_DEPLOY_PRIVATE_KEY}`,\n      ],\n      verify: {\n        etherscan: {\n          apiKey: process.env.ETHERSCAN_KEY\n        }\n      },\n    },\n    // goerli: {\n    //   url: \"https://goerli.infura.io/v3/\" + process.env.INFURA_TOKEN,\n    //   // @ts-ignore\n    //   accounts: [\n    //     `0x${process.env.TESTNET_DEPLOY_PRIVATE_KEY}`,\n    //   ],\n    //   verify: {\n    //     etherscan: {\n    //       apiKey: process.env.ETHERSCAN_KEY\n    //     }\n    //   },\n    // },\n    base: {\n      url: \"https://developer-access-mainnet.base.org\",\n      // @ts-ignore\n      accounts: [\n        `0x${process.env.BASE_DEPLOY_PRIVATE_KEY}`,\n      ],\n      verify: {\n        etherscan: {\n          apiUrl: \"https://api.basescan.org/\",\n          apiKey: process.env.BASESCAN_API_KEY\n        }\n      },\n    },\n  },\n  // @ts-ignore\n  typechain: {\n    outDir: \"typechain\",\n    target: \"ethers-v5\",\n  },\n  gasReporter: {\n    enabled: true,\n    reportPureAndViewMethods: true\n  }\n};\n\n\n// npx hardhat update-bid-periods --refund <new_refund_period> --settlement <new_settlement_period> --network localhost\n\ntask(\"update-bid-periods\", \"Updates bidRefundPeriod and bidSettlementPeriod\")\n  .addParam(\"refund\", \"The new bid refund period\")\n  .addParam(\"settlement\", \"The new bid settlement period\")\n  .setAction(async (taskArgs, hre) => {\n    const { refund, settlement } = taskArgs;\n    const [owner] = await hre.ethers.getSigners();\n    const DomainExchange = await hre.ethers.getContractFactory(\"DomainExchange\");\n    const domainExchangeAddress = await hre.deployments.get(\"DomainExchange\").then(d => d.address);\n    const domainExchange = await DomainExchange.attach(domainExchangeAddress).connect(owner);\n\n    console.log(\"Updating bid periods...\");\n\n    const tx1 = await domainExchange.updateBidRefundPeriod(refund);\n    await tx1.wait();\n    console.log(`Bid refund period updated to ${refund}`);\n\n    const tx2 = await domainExchange.updateBidSettlementPeriod(settlement);\n    await tx2.wait();\n    console.log(`Bid settlement period updated to ${settlement}`);\n\n    console.log(\"Bid periods updated successfully!\");\n  });\n\n\ntask(\"get-block-timestamp\", \"Fetches the current block timestamp\")\n  .setAction(async (_, hre) => {\n    const provider = hre.ethers.provider;\n    const block = await provider.getBlock(await provider.getBlockNumber());\n    const timestamp = block ? block.timestamp : 0;\n    console.log(`Current block timestamp: ${timestamp}`);\n  });\n\n\ntask(\"set-block-timestamp\", \"Sets the timestamp for the next block\")\n  .addParam(\"timestamp\", \"The new timestamp for the next block\")\n  .setAction(async (taskArgs, hre) => {\n    const { timestamp } = taskArgs;\n    const provider = hre.ethers.provider;\n    await provider.send(\"evm_setNextBlockTimestamp\", [timestamp]);\n    await provider.send(\"evm_mine\", []);\n    console.log(`Next block timestamp set to: ${timestamp}`);\n  });\n\n\ntask(\"generate-exchange-calldata\", \"Generates calldata for a contract interaction\")\n  .addParam(\"method\", \"The method you want to call\")\n  .addParam(\"params\", \"The parameters for the method, comma-separated\")\n  .setAction(async (taskArgs, hre) => {\n    const { method, params } = taskArgs;\n\n    // Get the contract from the Hardhat environment\n    const DomainExchange = await hre.ethers.getContractFactory(\"DomainExchange\");\n    const domainExchangeAddress = await hre.deployments.get(\"DomainExchange\").then(d => d.address);\n    const domainExchange = await DomainExchange.attach(domainExchangeAddress);\n\n    // Convert parameters to an array\n    const methodParams = params.split(\",\");\n\n    // Generate the calldata\n    const calldata = domainExchange.interface.encodeFunctionData(method, methodParams);\n\n    console.log(\"Generated Calldata:\", calldata);\n  });\n\n\ntask(\"generate-nullifier-registry-calldata\", \"Generates calldata for NullifierRegistry contract interaction\")\n  .addParam(\"method\", \"The method you want to call\")\n  .addParam(\"params\", \"The parameters for the method, comma-separated\")\n  .setAction(async (taskArgs, hre) => {\n    const { method, params } = taskArgs;\n\n    // Get the contract from the Hardhat environment\n    const NullifierRegistry = await hre.ethers.getContractFactory(\"NullifierRegistry\");\n    const nullifierRegistryAddress = await hre.deployments.get(\"NullifierRegistry\").then(d => d.address);\n    const nullifierRegistry = await NullifierRegistry.attach(nullifierRegistryAddress);\n\n    // Convert parameters to an array\n    const methodParams = params.split(\",\");\n\n    // Generate the calldata\n    const calldata = nullifierRegistry.interface.encodeFunctionData(method, methodParams);\n\n    console.log(\"Generated Calldata:\", calldata);\n  });\n\nexport default config;\n"
  },
  {
    "path": "contracts-domain/package.json",
    "content": "{\n  \"name\": \"zkp2p-domain-contracts\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Contracts for the ZK Peer to Peer domain marketplace\",\n  \"main\": \"index.js\",\n  \"author\": \"0xsachink <0xsachink@gmail.com>, bweick <brian.weickmann@gmail.com>\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"build\": \"yarn clean && yarn compile && yarn build:ts:latest\",\n    \"build:ts:latest\": \"yarn typechain && yarn transpile\",\n    \"chain\": \"npx hardhat node --no-deploy\",\n    \"clean\": \"rm -f coverage.json; rm -rf .coverage_cache; rm -rf .coverage_contracts; rm -rf cache; rm -rf coverage; rm -rf typechain; rm -rf artifacts; rm -rf dist\",\n    \"compile\": \"hardhat compile\",\n    \"coverage\": \"yarn clean && yarn build && npx hardhat coverage --testfiles 'test/{*.ts,lib/*.ts}'\",\n    \"deploy:localhost\": \"npx hardhat deploy --network localhost\",\n    \"deploy:goerli\": \"npx hardhat deploy --network goerli\",\n    \"deploy:sepolia\": \"npx hardhat deploy --network sepolia\",\n    \"deploy:base\": \"npx hardhat deploy --network base  && npx hardhat export --network base --export ./deployments/outputs/baseContracts.ts\",\n    \"deploy:base_staging\": \"npx hardhat deploy --network base_staging && npx hardhat export --network base_staging --export ./deployments/outputs/baseStagingContracts.ts\",\n    \"etherscan:goerli\": \"yarn hardhat --network goerli etherscan-verify\",\n    \"etherscan:sepolia\": \"yarn hardhat --network sepolia etherscan-verify\",\n    \"etherscan:base\": \"yarn hardhat --network base etherscan-verify\",\n    \"etherscan:base_staging\": \"yarn hardhat --network base_staging etherscan-verify\",\n    \"test\": \"npx hardhat test test/*.ts\",\n    \"test:clean\": \"yarn build && yarn test\",\n    \"test:fast\": \"NO_COMPILE=true TS_NODE_TRANSPILE_ONLY=1 yarn test --no-compile\",\n    \"test:deploy\": \"npx hardhat test test/deploy/*.ts\",\n    \"typechain\": \"hardhat typechain\",\n    \"transpile\": \"tsc\"\n  },\n  \"devDependencies\": {\n    \"@nomicfoundation/hardhat-chai-matchers\": \"^1.0.6\",\n    \"@nomicfoundation/hardhat-network-helpers\": \"^1.0.8\",\n    \"@nomicfoundation/hardhat-verify\": \"^1.1.1\",\n    \"@nomiclabs/hardhat-ethers\": \"^2.2.2\",\n    \"@nomiclabs/hardhat-etherscan\": \"^3.1.7\",\n    \"@typechain/ethers-v5\": \"^10.2.0\",\n    \"@typechain/hardhat\": \"^6.1.5\",\n    \"@types/chai\": \"^4.2.0\",\n    \"@types/mocha\": \">=9.1.0\",\n    \"@types/node\": \">=12.0.0\",\n    \"chai\": \"^4.2.0\",\n    \"ethers\": \"^5.7.2\",\n    \"hardhat\": \"^2.22.10\",\n    \"hardhat-deploy\": \"^0.11.34\",\n    \"hardhat-gas-reporter\": \"^2.2.0\",\n    \"module-alias\": \"^2.2.3\",\n    \"solidity-coverage\": \"^0.8.4\",\n    \"ts-node\": \">=8.0.0\",\n    \"typechain\": \"^8.1.0\",\n    \"typescript\": \">=4.5.0\"\n  },\n  \"dependencies\": {\n    \"@openzeppelin/contracts\": \"^4.9.2\",\n    \"@reclaimprotocol/verifier-solidity-sdk\": \"^1.0.2\",\n    \"@zk-email/contracts\": \"^6.1.3\",\n    \"canonicalize\": \"^2.0.0\",\n    \"dotenv\": \"^16.3.1\",\n    \"ethereum-waffle\": \"^4.0.10\"\n  },\n  \"_moduleAliases\": {\n    \"@utils\": \"utils\",\n    \"@typechain\": \"typechain\"\n  }\n}\n"
  },
  {
    "path": "contracts-domain/test/deploy/domainSystemDeploy.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { deployments, ethers } from \"hardhat\";\n\nimport {\n  NullifierRegistry,\n  DomainExchange,\n  TransferDomainProcessor,\n  ManagedKeyHashAdapterV2,\n  VerifyDomainProcessor,\n  ClaimVerifier,\n  VerifiedDomainRegistry\n} from \"../../utils/contracts\"\nimport {\n  NullifierRegistry__factory,\n  DomainExchange__factory,\n  TransferDomainProcessor__factory,\n  ManagedKeyHashAdapterV2__factory,\n  VerifyDomainProcessor__factory,\n  ClaimVerifier__factory,\n  VerifiedDomainRegistry__factory\n} from \"../../typechain\"\n\nimport {\n  getAccounts,\n  getWaffleExpect,\n} from \"../../utils/test\";\nimport {\n  Account\n} from \"../../utils/test/types\";\nimport {\n  Address\n} from \"../../utils/types\";\n\nimport {\n  FEE_PERCENTAGE,\n  FEE_RECIPIENT,\n  MULTI_SIG,\n  BID_SETTLEMENT_PERIOD,\n  BID_REFUND_PERIOD,\n  USDC,\n  SERVER_KEY_HASH,\n  VERIFY_DOMAIN_PROVIDER_HASHES,\n} from \"../../deployments/parameters\";\n\nconst expect = getWaffleExpect();\n\ndescribe(\"Domain System Deploy\", () => {\n  let deployer: Account;\n  let multiSig: Address;\n\n  let nullifierRegistry: NullifierRegistry;\n  let domainExchange: DomainExchange;\n  let transferDomainProcessor: TransferDomainProcessor;\n  let verifiedDomainRegistry: VerifiedDomainRegistry;\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n  let verifyDomainProcessor: VerifyDomainProcessor;\n  let claimVerifier: ClaimVerifier;\n\n  const network: string = deployments.getNetworkName();\n\n  function getDeployedContractAddress(network: string, contractName: string): string {\n    return require(`../../deployments/${network}/${contractName}.json`).address;\n  }\n\n  before(async () => {\n    [\n      deployer,\n    ] = await getAccounts();\n\n    multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer.address;\n\n    const nullifierRegistryAddress = await getDeployedContractAddress(network, \"NullifierRegistry\");\n    nullifierRegistry = new NullifierRegistry__factory(deployer.wallet).attach(nullifierRegistryAddress);\n\n    const domainExchangeAddress = await getDeployedContractAddress(network, \"DomainExchange\");\n    domainExchange = new DomainExchange__factory(deployer.wallet).attach(domainExchangeAddress);\n\n    const transferDomainProcessorAddress = await getDeployedContractAddress(network, \"TransferDomainProcessor\");\n    transferDomainProcessor = new TransferDomainProcessor__factory(deployer.wallet).attach(transferDomainProcessorAddress);\n\n    const keyHashAdapterAddress = await getDeployedContractAddress(network, \"NamecheapManagedKeyHashAdapter\");\n    keyHashAdapter = new ManagedKeyHashAdapterV2__factory(deployer.wallet).attach(keyHashAdapterAddress);\n\n    const claimVerifierAddress = await getDeployedContractAddress(network, \"ClaimVerifier\");\n    claimVerifier = new ClaimVerifier__factory(deployer.wallet).attach(claimVerifierAddress);\n\n    const verifiedDomainRegistryAddress = await getDeployedContractAddress(network, \"VerifiedDomainRegistry\");\n    verifiedDomainRegistry = new VerifiedDomainRegistry__factory(deployer.wallet).attach(verifiedDomainRegistryAddress);\n\n    const verifyDomainProcessorAddress = await getDeployedContractAddress(network, \"VerifyDomainProcessor\");\n    verifyDomainProcessor = new VerifyDomainProcessor__factory(\n      {\n        \"contracts/external/ClaimVerifier.sol:ClaimVerifier\": claimVerifier.address,\n      },\n      deployer.wallet\n    ).attach(verifyDomainProcessorAddress);\n  });\n\n  describe(\"DomainExchange\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await domainExchange.owner();\n      const actualFeeRecipient = await domainExchange.feeRecipient();\n      const actualFee = await domainExchange.fee();\n      const actualBidSettlementPeriod = await domainExchange.bidSettlementPeriod();\n      const actualBidRefundPeriod = await domainExchange.bidRefundPeriod();\n      const actualTransferDomainProcessor = await domainExchange.transferDomainProcessor();\n      const actualVerifiedDomainRegistry = await domainExchange.verifiedDomainRegistry();\n      const actualMailServerKeyHashAdapter = await domainExchange.mailServerKeyHashAdapter();\n      const isInitialized = await domainExchange.isInitialized();\n      const isEnabled = await domainExchange.isEnabled();\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualFeeRecipient).to.eq(FEE_RECIPIENT[network]);\n      expect(actualFee).to.eq(FEE_PERCENTAGE[network]);\n      expect(actualBidSettlementPeriod).to.eq(BID_SETTLEMENT_PERIOD[network]);\n      expect(actualBidRefundPeriod).to.eq(BID_REFUND_PERIOD[network]);\n      expect(actualTransferDomainProcessor).to.eq(transferDomainProcessor.address);\n      expect(actualVerifiedDomainRegistry).to.eq(verifiedDomainRegistry.address);\n      expect(actualMailServerKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(isInitialized).to.be.true;\n      expect(isEnabled).to.be.false;\n    });\n  });\n\n  describe(\"TransferDomainProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await transferDomainProcessor.owner();\n      const actualExchange = await transferDomainProcessor.exchange();\n      const actualNullifierRegistry = await transferDomainProcessor.nullifierRegistry();\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualExchange).to.eq(domainExchange.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n    });\n  });\n\n  describe(\"VerifyDomainProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await verifyDomainProcessor.owner();\n      const actualRegistry = await verifyDomainProcessor.registry();\n      const actualNullifierRegistry = await verifyDomainProcessor.nullifierRegistry();\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualRegistry).to.eq(verifiedDomainRegistry.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n\n      // Verify provider hashes\n      const providerHashes = await verifyDomainProcessor.getProviderHashes();\n      // Ensure each provider hash is correct\n      for (let i = 0; i < providerHashes.length; i++) {\n        expect(providerHashes[i]).to.eq(VERIFY_DOMAIN_PROVIDER_HASHES[i]);\n      }\n    });\n  });\n\n  describe(\"VerifiedDomainRegistry\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await verifiedDomainRegistry.owner();\n      const actualVerifyDomainProcessor = await verifiedDomainRegistry.verifyDomainProcessor();\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualVerifyDomainProcessor).to.eq(verifyDomainProcessor.address);\n    });\n  });\n\n  describe(\"NullifierRegistry\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await nullifierRegistry.owner();\n      const verifyHasWritePermission = await nullifierRegistry.isWriter(verifyDomainProcessor.address);\n      const xferHasWritePermission = await nullifierRegistry.isWriter(transferDomainProcessor.address);\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(verifyHasWritePermission).to.be.true;\n      expect(xferHasWritePermission).to.be.true;\n    });\n  });\n\n  describe(\"ManagedKeyHashAdapter\", async () => {\n    it(\"should have the correct owner set\", async () => {\n      const actualOwner = await keyHashAdapter.owner();\n      const isMailServerKeyHash = await keyHashAdapter.isMailServerKeyHash(SERVER_KEY_HASH[\"namecheap\"][0]);\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(isMailServerKeyHash).to.be.true;\n    });\n  });\n});"
  },
  {
    "path": "contracts-domain/test/domainExchange.spec.ts",
    "content": "\nimport \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber, Bytes, BytesLike } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { Domain, ReclaimProof } from \"@utils/types\";\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\n\nimport DeployHelper from \"@utils/deploys\";\nimport { Address } from \"@utils/types\";\nimport { ONE_DAY_IN_SECONDS, ZERO, ONE, PRECISE_UNIT, ADDRESS_ZERO, MAX_UINT_256, ZERO_BYTES32 } from \"@utils/constants\";\nimport {\n  calculateDomainId,\n  convertToUnixTimestamp,\n  generateProofsFromDomains,\n  convertUnixTimestampToDateString,\n  generateTransferProof\n} from \"@utils/protocolUtils\";\nimport {\n  DomainExchange,\n  TransferDomainProcessorMock,\n  VerifyDomainProcessorMock,\n  ITransferDomainProcessor,\n  IProxyBaseProcessor,\n  IVerifyDomainProcessor,\n  VerifiedDomainRegistry,\n  ManagedKeyHashAdapterV2\n} from \"@utils/contracts\";\nimport { Blockchain, ether } from \"@utils/common\";\n\nconst expect = getWaffleExpect();\nconst provider = ethers.provider;\nconst blockchain = new Blockchain(provider);\n\n\ndescribe(\"DomainExchange\", () => {\n  let owner: Account;\n  let notOwner: Account;\n  let feeRecipient: Account;\n  let seller: Account;\n  let sellerSaleEthRecipient: Account;\n  let otherSeller: Account;\n  let notAllowedSeller: Account;\n  let buyer: Account;\n  let otherBuyer: Account;\n  let secondExchange: Account;\n  let verifiedDomainRegistryAccount: Account;\n  let newMailServerKeyHashAdapter: Account;\n  let newTransferDomainProcessor: Account;\n\n  let verifyDomainProcessor: VerifyDomainProcessorMock;\n  let xferDomainProcessor: TransferDomainProcessorMock;\n  let verifiedDomainRegistry: VerifiedDomainRegistry;\n  let exchange: DomainExchange;\n  let mailServerKeyHashAdapter: ManagedKeyHashAdapterV2;\n\n  let swapFee: BigNumber;\n  let dkimKeyHash: BytesLike;\n  let bidSettlementPeriod: BigNumber;\n  let bidRefundPeriod: BigNumber;\n\n  let deployer: DeployHelper;\n  let snapshotId: string;\n\n  before(async () => {\n    [\n      owner,\n      notOwner,\n      feeRecipient,\n      seller,\n      sellerSaleEthRecipient,\n      otherSeller,\n      buyer,\n      otherBuyer,\n      notAllowedSeller,\n      secondExchange,\n      newTransferDomainProcessor,\n      newMailServerKeyHashAdapter,\n      verifiedDomainRegistryAccount\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    swapFee = ether(0.01)     // 1% fee\n    bidSettlementPeriod = ONE_DAY_IN_SECONDS;    // 1 day\n    bidRefundPeriod = ONE_DAY_IN_SECONDS;   // 1 day\n    dkimKeyHash = ethers.utils.hexlify(ethers.utils.randomBytes(32));\n\n    verifyDomainProcessor = await deployer.deployVerifyDomainProcessorMock();\n    verifiedDomainRegistry = await deployer.deployVerifiedDomainRegistry();\n    xferDomainProcessor = await deployer.deployTransferDomainProcessorMock();\n    mailServerKeyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([dkimKeyHash]);\n\n    await verifiedDomainRegistry.initialize(\n      verifyDomainProcessor.address\n    );\n\n    exchange = await deployer.deployDomainExchange(\n      owner.address,\n      swapFee,\n      feeRecipient.address,\n      bidSettlementPeriod,\n      bidRefundPeriod,\n      [seller.address, otherSeller.address]\n    );\n\n    await verifiedDomainRegistry.addExchange(exchange.address);\n    await verifiedDomainRegistry.addExchange(secondExchange.address);\n  });\n\n  beforeEach(async () => {\n    snapshotId = await blockchain.saveSnapshotAsync();\n  });\n\n  afterEach(async () => {\n    await blockchain.revertByIdAsync(snapshotId);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct parameters\", async () => {\n      expect(await exchange.owner()).to.equal(owner.address);\n      expect(await exchange.fee()).to.equal(swapFee);\n      expect(await exchange.feeRecipient()).to.equal(feeRecipient.address);\n      expect(await exchange.bidSettlementPeriod()).to.equal(bidSettlementPeriod);\n      expect(await exchange.bidRefundPeriod()).to.equal(bidRefundPeriod);\n      expect(await exchange.bidCounter()).to.equal(ONE);\n      expect(await exchange.listingCounter()).to.equal(ONE);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectTransferDomainProcessor: Address;\n    let subjectVerifiedDomainRegistry: Address;\n    let subjectMailServerKeyHashAdapter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectTransferDomainProcessor = xferDomainProcessor.address;\n      subjectVerifiedDomainRegistry = verifiedDomainRegistry.address;\n      subjectMailServerKeyHashAdapter = mailServerKeyHashAdapter.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return exchange.connect(subjectCaller.wallet).initialize(\n        subjectTransferDomainProcessor,\n        subjectVerifiedDomainRegistry,\n        subjectMailServerKeyHashAdapter\n      );\n    }\n\n    it(\"should set the transfer domain processor\", async () => {\n      await subject();\n      expect(await exchange.transferDomainProcessor()).to.equal(subjectTransferDomainProcessor);\n    });\n\n\n    it(\"should set the verified domain registry\", async () => {\n      await subject();\n      expect(await exchange.verifiedDomainRegistry()).to.equal(subjectVerifiedDomainRegistry);\n    });\n\n    it(\"should set the mail server key hash adapter\", async () => {\n      await subject();\n      expect(await exchange.mailServerKeyHashAdapter()).to.equal(subjectMailServerKeyHashAdapter);\n    });\n\n    it(\"should set isInitialized to true\", async () => {\n      await subject();\n      expect(await exchange.isInitialized()).to.be.true;\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = notOwner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n\n    describe(\"when the contract is already initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n  });\n\n  context(\"when the contract has been initialized\", async () => {\n    let snapshotIdTwo: string;\n    let shouldInitialize: boolean = true;\n\n    let domainName1: string;\n    let domainName2: string;\n    let domainId1: BytesLike;\n    let domainId2: BytesLike;\n    let sellerEncryptionKey: string;\n    let encryptedBuyerId: string;\n\n    beforeEach(async () => {\n      domainName1 = '0xsachink.xyz';\n      domainName2 = 'groth16.xyz';\n      let domains = [\n        {\n          name: domainName1,\n          expiryTimestamp: '2025-07-08T07:01:00',\n        } as Domain,\n        {\n          name: domainName2,\n          expiryTimestamp: '2025-07-08T18:22:00',\n        } as Domain\n      ];\n      let proofs = generateProofsFromDomains(domains);\n\n      // Claim ownership of the domain\n      await verifiedDomainRegistry.connect(seller.wallet).verifyDomains(proofs);\n\n      domainId1 = calculateDomainId('0xsachink.xyz');\n      domainId2 = calculateDomainId('groth16.xyz');\n\n      if (shouldInitialize) {\n        await exchange.initialize(\n          xferDomainProcessor.address,\n          verifiedDomainRegistry.address,\n          mailServerKeyHashAdapter.address\n        );\n      }\n      snapshotIdTwo = await blockchain.saveSnapshotAsync();\n\n      sellerEncryptionKey = \"0x\" + Buffer.from(ethers.utils.randomBytes(32)).toString(\"hex\");\n      encryptedBuyerId = \"0x\" + Buffer.from(ethers.utils.randomBytes(32)).toString(\"hex\");\n    });\n\n    afterEach(async () => {\n      await blockchain.revertByIdAsync(snapshotIdTwo);\n    });\n\n    function getHashedBuyerId(buyerId: string): BytesLike {\n      return ethers.utils.keccak256(ethers.utils.toUtf8Bytes(buyerId));\n    }\n\n    describe(\"#createListing\", async () => {\n      let subjectDomainId: BytesLike;\n      let subjectSaleEthRecipient: Address;\n      let subjectAskPrice: BigNumber;\n      let subjectMinBidPrice: BigNumber;\n      let subjectCaller: Account;\n      let subjectEncryptionKey: string;\n      let subjectDkimKeyHash: BytesLike;\n\n      beforeEach(async () => {\n        subjectDomainId = domainId1;\n        subjectSaleEthRecipient = seller.address;\n        subjectAskPrice = ether(1);\n        subjectMinBidPrice = ether(0.5);\n        subjectCaller = seller;\n        subjectEncryptionKey = sellerEncryptionKey;\n        subjectDkimKeyHash = ethers.utils.hexlify(ethers.utils.randomBytes(32));\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).createListing(\n          subjectDomainId,\n          subjectAskPrice,\n          subjectMinBidPrice,\n          subjectSaleEthRecipient,\n          subjectEncryptionKey,\n          subjectDkimKeyHash\n        );\n      }\n\n      it(\"should create new listing\", async () => {\n        await subject();\n\n        const listingId = (await exchange.listingCounter()).sub(1);\n        const listing = await exchange.listings(listingId);\n\n        expect(listing.seller).to.equal(subjectCaller.address);\n        expect(listing.encryptionKey).to.equal(subjectEncryptionKey);\n        expect(listing.askPrice).to.equal(subjectAskPrice);\n        expect(listing.minBidPrice).to.equal(subjectMinBidPrice);\n        expect(listing.createdAt).to.equal(await blockchain.getCurrentTimestamp());\n        expect(listing.domainId).to.equal(domainId1);\n        expect(listing.isActive).to.be.true;\n        expect(listing.saleEthRecipient).to.equal(subjectSaleEthRecipient);\n      });\n\n      it(\"should update userListings\", async () => {\n        await subject();\n\n        const listingId = (await exchange.listingCounter()).sub(1);\n        const userListings = await exchange.getUserListings(subjectCaller.address);\n        expect(userListings.length).to.equal(1);\n        expect(userListings[0].listingId).to.equal(listingId);\n        expect(userListings[0].listing.seller).to.equal(subjectCaller.address);\n        expect(userListings[0].listing.askPrice).to.equal(subjectAskPrice);\n        expect(userListings[0].listing.minBidPrice).to.equal(subjectMinBidPrice);\n        expect(userListings[0].listing.isActive).to.be.true;\n        expect(userListings[0].listing.saleEthRecipient).to.equal(subjectSaleEthRecipient);\n      });\n\n      it(\"should increment the listing counter\", async () => {\n        const listingCounter = await exchange.listingCounter();\n        await subject();\n        expect(await exchange.listingCounter()).to.equal(listingCounter.add(1));\n      });\n\n      it(\"should emit ListingCreated event\", async () => {\n        const listingId = await exchange.listingCounter(); // get listing counter before creating listing\n        await expect(subject()).to.emit(exchange, \"ListingCreated\").withArgs(\n          listingId,\n          subjectCaller.address,\n          subjectDomainId,\n          subjectDkimKeyHash,\n          subjectAskPrice,\n          subjectMinBidPrice,\n          subjectSaleEthRecipient\n        );\n      });\n\n      it(\"should update domain listing and exchange status on registry\", async () => {\n        await subject();\n\n        const domainDetails = await verifiedDomainRegistry.getDomain(domainId1);\n        const expectedListingId = (await exchange.listingCounter()).sub(1);\n\n        expect(domainDetails.domain.listingId).to.equal(expectedListingId);\n        expect(domainDetails.domain.exchange).to.equal(exchange.address);\n      });\n\n      describe(\"when caller is not domain owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherSeller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not domain owner\");\n        });\n      });\n\n      describe(\"when domain is already listed on another exchange\", async () => {\n        beforeEach(async () => {\n          await verifiedDomainRegistry.connect(secondExchange.wallet).setDomainListing(domainId1, ONE);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Domain already listed on registry\");\n        });\n      });\n\n      describe(\"when the seller is not allowed\", async () => {\n        beforeEach(async () => {\n          subjectCaller = notAllowedSeller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Address is not allowed\");\n        });\n      });\n\n      describe(\"when the min bid price is zero\", async () => {\n        beforeEach(async () => {\n          subjectMinBidPrice = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Minimum bid price is zero\");\n        });\n      });\n\n      describe(\"when the dkim key hash is the zero hash\", async () => {\n        beforeEach(async () => {\n          subjectDkimKeyHash = ethers.constants.HashZero;\n        });\n\n        it(\"should NOT revert\", async () => {\n          await expect(subject()).to.not.be.reverted;\n        });\n      });\n\n      describe(\"when the sale eth recipient is the zero address\", async () => {\n        beforeEach(async () => {\n          subjectSaleEthRecipient = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Invalid sale ETH recipient\");\n        });\n      });\n\n      describe(\"when the ask price is less than min bid price\", async () => {\n        beforeEach(async () => {\n          subjectAskPrice = ether(1);\n          subjectMinBidPrice = ether(1.01);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ask price is less than min bid price\");\n        });\n      });\n\n      describe(\"when the contract is not initialized\", async () => {\n        before(async () => {\n          shouldInitialize = false;\n        });\n\n        after(async () => {\n          shouldInitialize = true;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n        });\n      });\n\n      describe(\"when the exchange is paused\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(owner.wallet).pauseMarketplace();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Pausable: paused\");\n        });\n\n        describe(\"when the exchange is unpaused\", async () => {\n          beforeEach(async () => {\n            await exchange.connect(owner.wallet).unpauseMarketplace();\n          });\n\n          it(\"should not revert\", async () => {\n            await expect(subject()).to.not.be.reverted;\n          });\n        });\n      });\n    });\n\n    describe(\"#updateListing\", async () => {\n      let subjectListingId: BigNumber;\n      let subjectNewPrice: BigNumber;\n      let subjectSaleEthRecipient: Address;\n      let subjectCaller: Account;\n\n      let listingId: BigNumber;\n      let minBidPrice: BigNumber;\n\n      beforeEach(async () => {\n        minBidPrice = ether(0.5);\n        await exchange.connect(seller.wallet).createListing(\n          domainId2,\n          ether(5),\n          minBidPrice,\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        subjectListingId = listingId;\n        subjectNewPrice = ether(6);\n        subjectSaleEthRecipient = sellerSaleEthRecipient.address;\n        subjectCaller = seller;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).updateListing(\n          subjectListingId,\n          subjectNewPrice,\n          subjectSaleEthRecipient\n        );\n      }\n\n      it(\"should update listing\", async () => {\n        await subject();\n\n        const listing = await exchange.listings(subjectListingId);\n        expect(listing.askPrice).to.equal(subjectNewPrice);\n        expect(listing.isActive).to.be.true;\n        expect(listing.saleEthRecipient).to.equal(subjectSaleEthRecipient);\n      });\n\n      it(\"should emit ListingUpdated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"ListingUpdated\").withArgs(\n          subjectListingId,\n          subjectCaller.address,\n          subjectNewPrice,\n          subjectSaleEthRecipient\n        );\n      });\n\n      describe(\"when caller is not seller\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherSeller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not listing owner\");\n        });\n      });\n\n      describe(\"when the new ask price is less than min bid price\", async () => {\n        beforeEach(async () => {\n          subjectNewPrice = minBidPrice.sub(1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ask price is less than min bid price\");\n        });\n      });\n\n      describe(\"when the sale eth recipient is the zero address\", async () => {\n        beforeEach(async () => {\n          subjectSaleEthRecipient = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Invalid sale ETH recipient\");\n        });\n      });\n\n      describe(\"when the listing is not active\", async () => {\n        beforeEach(async () => {\n          // Create bids against the listing so that it is only expired and not deleted\n          await exchange.connect(buyer.wallet).createBid(\n            subjectListingId,\n            getHashedBuyerId(\"richardliang2015\"),\n            encryptedBuyerId,\n            {\n              value: ether(6)\n            }\n          );\n\n          // Delete listing\n          await exchange.connect(seller.wallet).deleteListing(subjectListingId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Listing not active\");\n        });\n      });\n\n      describe(\"when the exchange is paused\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(owner.wallet).pauseMarketplace();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Pausable: paused\");\n        });\n\n        describe(\"when the exchange is unpaused\", async () => {\n          beforeEach(async () => {\n            await exchange.connect(owner.wallet).unpauseMarketplace();\n          });\n\n          it(\"should not revert\", async () => {\n            await expect(subject()).to.not.be.reverted;\n          });\n        });\n      });\n    });\n\n    describe(\"#deleteListing\", async () => {\n      let subjectListingId: BigNumber;\n      let subjectCaller: Account;\n\n      let listingId: BigNumber;\n      let askPrice: BigNumber;\n\n      beforeEach(async () => {\n        // create listing\n        askPrice = ether(5);\n        await exchange.connect(seller.wallet).createListing(\n          domainId2,\n          askPrice,\n          askPrice.sub(1),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        subjectListingId = listingId;\n        subjectCaller = seller;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).deleteListing(subjectListingId);\n      }\n\n      it(\"should delete listing\", async () => {\n        await subject();\n\n        const listing = await exchange.listings(subjectListingId);\n\n        expect(listing.seller).to.equal(ADDRESS_ZERO);\n        expect(listing.askPrice).to.equal(ZERO);\n        expect(listing.createdAt).to.equal(0);\n        expect(listing.domainId).to.equal(ZERO_BYTES32);\n      });\n\n      it(\"should delete listing from user's listings\", async () => {\n        await subject();\n\n        const userListings = await exchange.getUserListings(subjectCaller.address);\n        expect(userListings.length).to.equal(0);\n      });\n\n      it(\"should emit ListingDeleted event\", async () => {\n        await expect(subject()).to.emit(exchange, \"ListingDeleted\").withArgs(\n          subjectListingId,\n          subjectCaller.address\n        );\n      });\n\n      it(\"should remove listing status from domain in verifiedDomainRegistry\", async () => {\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomain(domainId2);\n        expect(domainInfo.domain.exchange).to.equal(ZERO);\n        expect(domainInfo.domain.listingId).to.equal(ZERO);\n      });\n\n      describe(\"when there are bids against the listing\", async () => {\n        beforeEach(async () => {\n          // create a bid for the listing\n          await exchange.connect(buyer.wallet).createBid(\n            listingId,\n            getHashedBuyerId(\"0xsachink\"),\n            encryptedBuyerId,\n            {\n              value: ether(6)\n            }\n          );\n        });\n\n        it(\"should mark the listing as expired but not delete it\", async () => {\n          await subject();\n\n          const listing = await exchange.listings(subjectListingId);\n\n          expect(listing.seller).to.equal(subjectCaller.address);\n          expect(listing.askPrice).to.equal(askPrice);\n          expect(listing.isActive).to.be.false;\n        });\n      });\n\n      describe(\"when caller is not owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherSeller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not listing owner\");\n        });\n      });\n    });\n\n    describe(\"#createBid\", async () => {\n      let subjectListingId: BigNumber;\n      let subjectPrice: BigNumber;\n      let subjectBuyerIdHash: BytesLike;\n      let subjectCaller: Account;\n      let subjectEncryptedBuyerId: string;\n\n      let askPrice: BigNumber;\n      let minBidPrice: BigNumber;\n\n      beforeEach(async () => {\n        // Create a listing\n        askPrice = ether(5);\n        minBidPrice = ether(0.5);\n        await exchange.connect(seller.wallet).createListing(\n          domainId1,\n          askPrice,\n          minBidPrice,\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        const listingId = (await exchange.listingCounter()).sub(1);\n\n        // Richard wants to buy 0xsachink.xyz from seller (0xsachink)\n        subjectListingId = listingId;\n        subjectPrice = ether(6);\n        subjectBuyerIdHash = getHashedBuyerId(\"richardliang2015\");\n        subjectCaller = buyer;\n        subjectEncryptedBuyerId = encryptedBuyerId;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).createBid(\n          subjectListingId,\n          subjectBuyerIdHash,\n          subjectEncryptedBuyerId,\n          {\n            value: subjectPrice\n          }\n        );\n      }\n\n      it(\"should create a new bid\", async () => {\n        await subject();\n\n        const bidId = (await exchange.bidCounter()).sub(1);   // counter - 1\n        const bid = await exchange.bids(bidId);\n\n        expect(bid.buyer).to.equal(subjectCaller.address);\n        expect(bid.listingId).to.equal(subjectListingId);\n        expect(bid.buyerIdHash).to.equal(subjectBuyerIdHash);\n        expect(bid.encryptedBuyerId).to.equal(subjectEncryptedBuyerId);\n        expect(bid.price).to.equal(subjectPrice);\n        expect(bid.refundInitiated).to.be.false;\n        expect(bid.createdAt).to.equal(await blockchain.getCurrentTimestamp());\n        expect(bid.expiryTimestamp).to.equal(MAX_UINT_256);\n      });\n\n      it(\"should add the bid to the user's bids\", async () => {\n        await subject();\n\n        const bidId = (await exchange.bidCounter()).sub(1);   // counter - 1\n        const userBids = await exchange.getUserBids(subjectCaller.address);\n\n        expect(userBids.length).to.equal(1);\n        expect(userBids[0].bidId).to.equal(bidId);\n      });\n\n      it(\"should add the bid to the listing's bids\", async () => {\n        await subject();\n\n        const bidId = (await exchange.bidCounter()).sub(1);   // counter - 1\n        const listingBids = await exchange.getListingBids([subjectListingId]);\n\n        expect(listingBids.length).to.equal(1);\n        expect(listingBids[0][0].bidId).to.equal(bidId);\n      });\n\n      it(\"should increment the bid counter\", async () => {\n        const initialBidCounter = await exchange.bidCounter();\n        await subject();\n        const finalBidCounter = await exchange.bidCounter();\n        expect(finalBidCounter).to.equal(initialBidCounter.add(1));\n      });\n\n      it(\"should transfer ETH from the buyer to the contract\", async () => {\n        const initialContractBalance = await provider.getBalance(exchange.address);\n        const initialBuyerBalance = await provider.getBalance(subjectCaller.address);\n\n        await subject();\n\n        const finalContractBalance = await provider.getBalance(exchange.address);\n        const finalBuyerBalance = await provider.getBalance(subjectCaller.address);\n\n        expect(finalContractBalance).to.equal(initialContractBalance.add(subjectPrice));\n        expect(finalBuyerBalance).to.lt(initialBuyerBalance.sub(subjectPrice));   // account for gas\n      });\n\n      it(\"should emit a BidCreated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"BidCreated\").withArgs(\n          (await exchange.bidCounter()),      // This is fetched before subject() is called\n          subjectListingId,\n          subjectCaller.address,\n          subjectPrice\n        );\n      });\n\n      describe(\"when the bid price is lower than the asking price\", async () => {\n        beforeEach(async () => {\n          subjectPrice = askPrice.sub(1);\n        });\n\n        it(\"should create a new bid\", async () => {\n          await subject();\n\n          const bidId = (await exchange.bidCounter()).sub(1);\n          const bid = await exchange.bids(bidId);\n          expect(bid.price).to.equal(subjectPrice);\n        });\n      });\n\n      describe(\"when the bid price is lower than the min bid price\", async () => {\n        beforeEach(async () => {\n          subjectPrice = minBidPrice.sub(1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Bid price is less than min bid price\");\n        });\n      });\n\n      describe(\"when the buyer ID hash is empty\", async () => {\n        beforeEach(async () => {\n          subjectBuyerIdHash = ZERO_BYTES32;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Buyer ID hash cannot be empty\");\n        });\n      });\n\n      describe(\"when the listing does not exist\", async () => {\n        beforeEach(async () => {\n          subjectListingId = (await exchange.listingCounter()).add(1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Listing does not exist\");\n        });\n      });\n\n      describe(\"when the listing is not active, i.e. sold or withdrawn\", async () => {\n        beforeEach(async () => {\n          await subject();    // Create a bid against the listing\n          await exchange.connect(seller.wallet).deleteListing(subjectListingId);    // Delete the listing\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Listing not active\");\n        });\n      });\n\n      describe(\"when the exchange is paused\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(owner.wallet).pauseMarketplace();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Pausable: paused\");\n        });\n\n        describe(\"when the exchange is unpaused\", async () => {\n          beforeEach(async () => {\n            await exchange.connect(owner.wallet).unpauseMarketplace();\n          });\n\n          it(\"should not revert\", async () => {\n            await expect(subject()).to.not.be.reverted;\n          });\n        });\n      });\n    });\n\n    describe(\"#increaseBidPrice\", async () => {\n      let subjectBidId: BigNumber;\n      let subjectNewPrice: BigNumber;\n      let subjectCaller: Account;\n      let subjectValue: BigNumber;\n\n      let bidPrice: BigNumber;\n      let listingId: BigNumber;\n\n      beforeEach(async () => {\n        // create a listing\n        await exchange.connect(seller.wallet).createListing(\n          domainId2,\n          ether(5),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        // create a bid\n        bidPrice = ether(4);\n        await exchange.connect(buyer.wallet).createBid(\n          listingId,\n          getHashedBuyerId(\"richardliang2015\"),\n          encryptedBuyerId,\n          {\n            value: bidPrice\n          }\n        );\n\n        subjectBidId = (await exchange.bidCounter()).sub(1);\n        subjectCaller = buyer;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).increaseBidPrice(subjectBidId, subjectNewPrice, {\n          value: subjectValue\n        });\n      }\n\n      describe(\"when bidding higher\", async () => {\n        beforeEach(async () => {\n          subjectNewPrice = ether(6);\n          subjectValue = ether(2);\n        });\n\n        it(\"should transfer ETH from buyer to contract\", async () => {\n          const initialContractBalance = await provider.getBalance(exchange.address);\n          const initialBuyerBalance = await provider.getBalance(subjectCaller.address);\n\n          const tx = await subject();\n          const receipt = await tx.wait();\n\n          const finalContractBalance = await provider.getBalance(exchange.address);\n          const finalBuyerBalance = await provider.getBalance(subjectCaller.address);\n          const expectedTransferAmount = subjectNewPrice.sub(bidPrice);\n\n          expect(finalContractBalance).to.equal(initialContractBalance.add(expectedTransferAmount));\n          expect(finalBuyerBalance).to.equal(initialBuyerBalance.sub(expectedTransferAmount).sub(receipt.effectiveGasPrice.mul(receipt.gasUsed)));\n        });\n\n        it(\"should update bid price\", async () => {\n          await subject();\n\n          const bid = await exchange.bids(subjectBidId);\n          expect(bid.price).to.equal(subjectNewPrice);\n        });\n\n        it(\"should emit BidPriceIncreased event\", async () => {\n          await expect(subject()).to.emit(exchange, \"BidPriceIncreased\").withArgs(\n            subjectBidId,\n            subjectCaller.address,\n            subjectNewPrice\n          );\n        });\n\n        describe(\"when new price is lower than the asking price but higher than old price\", async () => {\n          beforeEach(async () => {\n            subjectNewPrice = ether(4.5);\n            subjectValue = ether(0.5);\n          });\n\n          it(\"should NOT revert\", async () => {\n            await expect(subject()).to.not.be.reverted;\n          });\n        });\n      });\n\n      describe(\"when bidding lower\", async () => {\n        beforeEach(async () => {\n          subjectNewPrice = bidPrice.sub(1);\n          subjectValue = ether(0);\n        });\n\n        afterEach(async () => {\n          subjectNewPrice = ether(6);\n          subjectValue = ether(2);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"New price not greater than old price\");\n        });\n      });\n\n      describe(\"when bid price is zero\", async () => {\n        beforeEach(async () => {\n          subjectNewPrice = ZERO;\n        });\n\n        afterEach(async () => {\n          subjectNewPrice = ether(6);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"New price not greater than old price\");\n        });\n      });\n\n      describe(\"when new price is the same as the current price\", async () => {\n        beforeEach(async () => {\n          subjectNewPrice = bidPrice;\n        });\n\n        afterEach(async () => {\n          subjectNewPrice = ether(6);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"New price not greater than old price\");\n        });\n      });\n\n      describe(\"when caller is not bid owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not bid owner\");\n        });\n      });\n\n      describe(\"when bid does not exist\", async () => {\n        beforeEach(async () => {\n          subjectBidId = (await exchange.bidCounter()).add(1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not bid owner\");\n        });\n      });\n\n      describe(\"when bid refund has already been initiated\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(bidSettlementPeriod.add(1).toNumber());\n          await exchange.connect(buyer.wallet).initiateRefund(subjectBidId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Refund already initiated\");\n        });\n      });\n\n      describe(\"when listing is not active\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(seller.wallet).deleteListing(listingId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Listing not active\");\n        });\n      });\n\n      describe(\"when the exchange is paused\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(owner.wallet).pauseMarketplace();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Pausable: paused\");\n        });\n\n        describe(\"when the exchange is unpaused\", async () => {\n          beforeEach(async () => {\n            await exchange.connect(owner.wallet).unpauseMarketplace();\n          });\n\n          it(\"should not revert\", async () => {\n            await expect(subject()).to.not.be.reverted;\n          });\n        });\n      });\n    });\n\n    describe(\"#refundBid\", async () => {\n      let subjectBidId: BigNumber;\n      let subjectCaller: Account;\n\n      let listingId: BigNumber;\n\n      beforeEach(async () => {\n        // Create a listing\n        await exchange.connect(seller.wallet).createListing(\n          domainId2,\n          ether(5),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        // Create a bid\n        await exchange.connect(buyer.wallet).createBid(\n          listingId,\n          getHashedBuyerId(\"richardliang2015\"),\n          encryptedBuyerId,\n          {\n            value: ether(6)\n          }\n        );\n\n        subjectBidId = (await exchange.bidCounter()).sub(1);\n        subjectCaller = buyer;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).initiateRefund(subjectBidId);\n      }\n\n      describe(\"when bidSettlementPeriod has NOT passed\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(bidSettlementPeriod.sub(1).toNumber());\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Refund period not started\");\n        });\n      });\n\n      describe(\"when bidSettlementPeriod has passed\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(bidSettlementPeriod.add(1).toNumber());\n        });\n\n        it(\"should mark the bid as refunded\", async () => {\n          await subject();\n\n          const bid = await exchange.bids(subjectBidId);\n          expect(bid.refundInitiated).to.be.true;\n        });\n\n        it(\"should set the expiryTimestamp to the current time\", async () => {\n          await subject();\n\n          const blockTimestamp = await blockchain.getCurrentTimestamp();\n          const expectedExpiryTimestamp = blockTimestamp.add(bidSettlementPeriod);\n\n          const bid = await exchange.bids(subjectBidId);\n          expect(bid.expiryTimestamp).to.equal(expectedExpiryTimestamp);\n        });\n\n        it(\"should emit a RefundInitiated event\", async () => {\n          await expect(subject()).to.emit(exchange, \"RefundInitiated\").withArgs(\n            subjectBidId,\n            subjectCaller.address\n          );\n        });\n\n        describe(\"when refund already initiated\", async () => {\n          beforeEach(async () => {\n            await subject();\n          })\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Refund already initiated\");\n          });\n        });\n\n        describe(\"when caller is not owner\", async () => {\n          beforeEach(async () => {\n            subjectCaller = otherBuyer;\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Caller is not bid owner\");\n          });\n        });\n\n        describe(\"when corresponding listing has expired\", async () => {\n          beforeEach(async () => {\n            await exchange.connect(seller.wallet).deleteListing(listingId);\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Listing expired. Bid can be withdrawn directly\");\n          });\n        });\n      });\n    });\n\n    describe(\"#withdrawBid\", async () => {\n      let subjectBidId: BigNumber;\n      let subjectCaller: Account;\n\n      let bidId: BigNumber;\n      let bidPrice: BigNumber;\n      let listingId: BigNumber;\n      let hashedBuyerId: BytesLike;\n\n      beforeEach(async () => {\n        // Create a listing\n        await exchange.connect(seller.wallet).createListing(\n          domainId2,\n          ether(5),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        // Create a bid\n        hashedBuyerId = getHashedBuyerId(\"richardliang2015\");\n        bidPrice = ether(5);\n        await exchange.connect(buyer.wallet).createBid(\n          listingId,\n          hashedBuyerId,\n          encryptedBuyerId,\n          {\n            value: bidPrice\n          }\n        );\n        bidId = (await exchange.bidCounter()).sub(1);\n\n        // Increase blockchain time beyond bidSettlementPeriod\n        await blockchain.increaseTimeAsync(bidSettlementPeriod.add(1).toNumber());\n\n        // Initiate refund\n        await exchange.connect(buyer.wallet).initiateRefund(bidId);\n\n        subjectBidId = bidId;\n        subjectCaller = buyer;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).withdrawBid(subjectBidId);\n      }\n\n      describe(\"when the bid has expired by passing of time\", async () => {\n        beforeEach(async () => {\n          // Increase blockchain time beyond bidRefundPeriod\n          await blockchain.increaseTimeAsync(bidRefundPeriod.add(1).toNumber());\n        });\n\n        it(\"should transfer ETH back to buyer\", async () => {\n          const initialContractBalance = await provider.getBalance(exchange.address);\n          const initialBuyerBalance = await provider.getBalance(subjectCaller.address);\n\n          const tx = await subject();\n          const receipt = await tx.wait();\n\n          const finalContractBalance = await provider.getBalance(exchange.address);\n          const finalBuyerBalance = await provider.getBalance(subjectCaller.address);\n\n          expect(finalContractBalance).to.equal(initialContractBalance.sub(bidPrice));\n          expect(finalBuyerBalance).to.equal(initialBuyerBalance.add(bidPrice).sub(receipt.effectiveGasPrice.mul(receipt.gasUsed)));\n        });\n\n        it(\"should delete the bid from bids array\", async () => {\n          await subject();\n\n          const bid = await exchange.bids(subjectBidId);\n\n          expect(bid.buyer).to.equal(ADDRESS_ZERO);\n          expect(bid.createdAt).to.equal(ZERO);\n        });\n\n        it(\"should delete the bid from userBids\", async () => {\n          await subject();\n\n          const userBids = await exchange.getUserBids(subjectCaller.address);\n          expect(userBids.length).to.equal(ZERO);\n        });\n\n        it(\"should delete bid from listings bids\", async () => {\n          await subject();\n\n          const listingBids = await exchange.getListingBids([listingId]);\n          expect(listingBids[0].length).to.equal(ZERO);\n        });\n\n        it(\"should not delete the listing\", async () => {\n          await subject();\n\n          const listing = await exchange.listings(listingId);\n          expect(listing.seller).to.equal(seller.address);\n        });\n\n        it(\"should emit a BidWithdrawn event\", async () => {\n          await expect(subject()).to.emit(exchange, \"BidWithdrawn\").withArgs(\n            subjectBidId,\n            buyer.address,\n            bidPrice\n          );\n        });\n      });\n\n      describe(\"when the bid can be widthdrawn because listing was sold\", async () => {\n        let otherBidId: BigNumber;\n        let otherBidPrice: BigNumber;\n\n        beforeEach(async () => {\n          // Other buyer creates a bid\n          otherBidPrice = ether(6);\n          await exchange.connect(otherBuyer.wallet).createBid(\n            listingId,\n            hashedBuyerId,\n            encryptedBuyerId,\n            {\n              value: otherBidPrice\n            }\n          );\n          otherBidId = (await exchange.bidCounter()).sub(1);\n\n          // Seller finalizes the sale\n          await xferDomainProcessor.setDomainName(\"groth16.xyz\");   // Set domain name in mock\n          const proof = generateTransferProof(dkimKeyHash, hashedBuyerId, bidId);  // bidId was selected\n          await exchange.connect(seller.wallet).finalizeSale(proof);\n\n          subjectCaller = otherBuyer;\n          subjectBidId = otherBidId;    // this can be withdrawn\n        });\n\n        it(\"should transfer ETH back to buyer\", async () => {\n          const initialContractBalance = await provider.getBalance(exchange.address);\n          const initialBuyerBalance = await provider.getBalance(subjectCaller.address);\n\n          const tx = await subject();\n          const receipt = await tx.wait();\n\n          const finalContractBalance = await provider.getBalance(exchange.address);\n          const finalBuyerBalance = await provider.getBalance(subjectCaller.address);\n\n          expect(finalContractBalance).to.equal(initialContractBalance.sub(otherBidPrice));\n          expect(finalBuyerBalance).to.equal(initialBuyerBalance.add(otherBidPrice).sub(receipt.effectiveGasPrice.mul(receipt.gasUsed)));\n        });\n\n        it(\"should delete the bid from bids array\", async () => {\n          await subject();\n\n          const bid = await exchange.bids(subjectBidId);\n\n          expect(bid.buyer).to.equal(ADDRESS_ZERO);\n          expect(bid.createdAt).to.equal(ZERO);\n        });\n\n        it(\"should delete the bid from userBids\", async () => {\n          await subject();\n\n          const userBids = await exchange.getUserBids(subjectCaller.address);\n          expect(userBids.length).to.equal(ZERO);\n        });\n\n        it(\"should delete the listing as no more bids remain\", async () => {\n          await subject();\n\n          const listing = await exchange.listings(listingId);\n          expect(listing.seller).to.equal(ethers.constants.AddressZero);\n        });\n\n        it(\"should emit a BidWithdrawn event\", async () => {\n          await expect(subject()).to.emit(exchange, \"BidWithdrawn\").withArgs(\n            subjectBidId,\n            otherBuyer.address,\n            otherBidPrice\n          );\n        });\n      });\n\n      describe(\"when refund period has NOT ended\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(bidRefundPeriod.sub(1).toNumber());\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Refund period not ended\");\n        });\n      });\n\n      describe(\"when the caller is not the buyer\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not bid owner\");\n        });\n      });\n\n      describe(\"when the bid does not exist\", async () => {\n        beforeEach(async () => {\n          subjectBidId = bidId.add(1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not bid owner\");\n        });\n      });\n\n      describe(\"when refund is not initiated\", async () => {\n        beforeEach(async () => {\n          // create a new bid that has not initiated refund\n          await exchange.connect(buyer.wallet).createBid(\n            listingId,\n            hashedBuyerId,\n            encryptedBuyerId,\n            {\n              value: bidPrice\n            }\n          );\n\n          subjectBidId = (await exchange.bidCounter()).sub(1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Refund not initiated\");\n        });\n      });\n    });\n\n    describe(\"#finalizeSale\", async () => {\n      let subjectCaller: Account;\n      let subjectProof: ITransferDomainProcessor.TransferProofStruct;\n\n      let proof: ITransferDomainProcessor.TransferProofStruct;\n      let listingId: BigNumber;\n      let bidPrice: BigNumber;\n      let bidId: BigNumber;\n      let otherBidId: BigNumber;\n      let hashedBuyerId: BytesLike;\n\n      beforeEach(async () => {\n        if (shouldInitialize) {\n          await exchange.connect(seller.wallet).createListing(\n            domainId2,\n            ether(5),\n            ether(0.5),\n            seller.address,\n            sellerEncryptionKey,\n            ethers.constants.HashZero\n          );\n          listingId = (await exchange.listingCounter()).sub(1);\n\n          // Create a bid against groth16.xyz\n          bidPrice = ether(6);\n          hashedBuyerId = getHashedBuyerId(\"buyerId\");\n          await exchange.connect(buyer.wallet).createBid(\n            listingId,\n            hashedBuyerId,\n            encryptedBuyerId,\n            {\n              value: bidPrice\n            }\n          );\n          bidId = (await exchange.bidCounter()).sub(1);\n\n          await xferDomainProcessor.setDomainName(\"groth16.xyz\");   // Set domain name in mock\n          proof = generateTransferProof(dkimKeyHash, hashedBuyerId, bidId);\n        }\n\n        subjectProof = proof;\n        subjectCaller = seller;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).finalizeSale(subjectProof);\n      }\n\n      it(\"should transfer funds to the seller and fee recipient\", async () => {\n        const initialSellerBalance = await provider.getBalance(seller.address);\n        const initialFeeRecipientBalance = await provider.getBalance(feeRecipient.address);\n\n        const tx = await subject();\n        const receipt = await tx.wait();\n\n        const finalSellerBalance = await provider.getBalance(seller.address);\n        const finalFeeRecipientBalance = await provider.getBalance(feeRecipient.address);\n\n        const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n        const expectedFundsToTransfer = bidPrice.sub(fees);\n\n        expect(finalFeeRecipientBalance).to.equal(initialFeeRecipientBalance.add(fees));\n        expect(finalSellerBalance).to.equal(initialSellerBalance.add(expectedFundsToTransfer).sub(receipt.effectiveGasPrice.mul(receipt.gasUsed)));\n      });\n\n      it(\"should remove the listing from listings\", async () => {\n        await subject();\n\n        const listing = await exchange.listings(listingId);\n        expect(listing.seller).to.equal(ethers.constants.AddressZero);\n      });\n\n      it(\"should remove the bid from bids\", async () => {\n        await subject();\n\n        const bid = await exchange.bids(bidId);\n        expect(bid.buyer).to.equal(ethers.constants.AddressZero);\n      });\n\n      it(\"should remove the listing from userListings\", async () => {\n        await subject();\n\n        const sellerBids = await exchange.getUserListings(seller.address);\n        expect(sellerBids.length).to.equal(0);\n      });\n\n      it(\"should remove the bid from userBids\", async () => {\n        await subject();\n\n        const buyerBids = await exchange.getUserBids(buyer.address);\n        expect(buyerBids.length).to.equal(0);\n      });\n\n      it(\"should emit a SaleFinalized event\", async () => {\n        const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n        await expect(subject()).to.emit(exchange, \"SaleFinalized\").withArgs(\n          bidId,\n          listingId,\n          bidPrice.sub(fees),\n          fees\n        );\n      });\n\n      it(\"should update domain ownership on registry \", async () => {\n        const sellerDomainsBefore = await verifiedDomainRegistry.getUserDomains(seller.address);\n        const buyerDomainsBefore = await verifiedDomainRegistry.getUserDomains(buyer.address);\n\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomain(domainId2);\n\n        const sellerDomainsAfter = await verifiedDomainRegistry.getUserDomains(seller.address);\n        const buyerDomainsAfter = await verifiedDomainRegistry.getUserDomains(buyer.address);\n        const buyerDomainIds = buyerDomainsAfter.map(domain => domain.domainId);\n\n        expect(domainInfo.domain.owner).to.equal(buyer.address);\n        expect(sellerDomainsAfter.length).to.equal(sellerDomainsBefore.length - 1);\n        expect(buyerDomainsAfter.length).to.equal(buyerDomainsBefore.length + 1);\n        expect(buyerDomainIds).to.include(domainId2);\n      });\n\n      it(\"should remove domain exchange and listing on registry\", async () => {\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomain(domainId2);\n        expect(domainInfo.domain.exchange).to.equal(ZERO);\n        expect(domainInfo.domain.listingId).to.equal(ZERO);\n      });\n\n      describe(\"when the sale eth recipient is not the seller address\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(seller.wallet).updateListing(listingId, ether(5), sellerSaleEthRecipient.address);\n        });\n\n        it(\"should transfer funds to the seller and fee recipient\", async () => {\n          const initialSellerBalance = await provider.getBalance(seller.address);\n          const initialSellerEthRecipientBalance = await provider.getBalance(sellerSaleEthRecipient.address);\n          const initialFeeRecipientBalance = await provider.getBalance(feeRecipient.address);\n\n          const tx = await subject();\n          const receipt = await tx.wait();\n\n          const finalSellerBalance = await provider.getBalance(seller.address);\n          const finalSellerEthRecipientBalance = await provider.getBalance(sellerSaleEthRecipient.address);\n          const finalFeeRecipientBalance = await provider.getBalance(feeRecipient.address);\n\n          const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n          const expectedFundsToTransfer = bidPrice.sub(fees);\n          const expectedGasFeePaid = receipt.effectiveGasPrice.mul(receipt.gasUsed);\n\n          expect(initialSellerBalance).to.equal(finalSellerBalance.add(expectedGasFeePaid));\n          expect(finalFeeRecipientBalance).to.equal(initialFeeRecipientBalance.add(fees));\n          expect(finalSellerEthRecipientBalance).to.equal(initialSellerEthRecipientBalance.add(expectedFundsToTransfer));\n        });\n      });\n\n      describe(\"when there are multiple bids against the listing\", async () => {\n        beforeEach(async () => {\n          // Create another bid against groth16.xyz\n          await exchange.connect(otherBuyer.wallet).createBid(\n            listingId,\n            hashedBuyerId,\n            encryptedBuyerId,\n            {\n              value: bidPrice\n            }\n          );\n        });\n\n        it(\"should not delete the listing\", async () => {\n          await subject();\n\n          const listing = await exchange.listings(listingId);\n          expect(listing.seller).to.equal(seller.address);\n        });\n\n        it(\"should mark the listing as expired\", async () => {\n          await subject();\n\n          const listing = await exchange.listings(listingId);\n          expect(listing.isActive).to.be.false;\n        });\n      });\n\n      describe(\"when selected bid has already initiated refund\", async () => {\n        beforeEach(async () => {\n          // Pass blockchain time to bypass minBidActive period\n          await blockchain.increaseTimeAsync(bidRefundPeriod.add(1).toNumber());\n          await exchange.connect(buyer.wallet).initiateRefund(bidId);\n\n          subjectProof = generateTransferProof(dkimKeyHash, hashedBuyerId, bidId);\n        });\n\n        it(\"should still finalize the sale\", async () => {\n          expect(await subject()).to.not.be.reverted;\n        });\n\n        it(\"should emit SaleFinalized event\", async () => {\n          const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n          await expect(subject()).to.emit(exchange, \"SaleFinalized\").withArgs(\n            bidId,\n            listingId,\n            bidPrice.sub(fees),\n            fees\n          );\n        });\n      });\n\n      describe(\"when selected bid does not exist\", async () => {\n        beforeEach(async () => {\n          // pass time to mark bid as expired and then withdraw bid\n          await blockchain.increaseTimeAsync(bidSettlementPeriod.add(1).toNumber());\n          await exchange.connect(buyer.wallet).initiateRefund(bidId);\n          await blockchain.increaseTimeAsync(bidRefundPeriod.add(1).toNumber());\n          await exchange.connect(buyer.wallet).withdrawBid(bidId);\n\n          subjectProof = generateTransferProof(dkimKeyHash, hashedBuyerId, bidId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Bid does not exist\");\n        });\n      });\n\n      describe(\"when owner has set a custom DKIM key hash\", async () => {\n        let customDkimKeyHash: BytesLike;\n\n        beforeEach(async () => {\n          if (shouldInitialize) {\n            customDkimKeyHash = ethers.utils.hexlify(ethers.utils.randomBytes(32));\n            await exchange.connect(seller.wallet).createListing(\n              domainId1,\n              ether(1),\n              ether(0.5),\n              seller.address,\n              sellerEncryptionKey,\n              customDkimKeyHash\n            );\n            listingId = (await exchange.listingCounter()).sub(1);\n\n            // Create a bid against groth16.xyz\n            bidPrice = ether(2);\n            hashedBuyerId = getHashedBuyerId(\"buyerId\");\n            await exchange.connect(buyer.wallet).createBid(\n              listingId,\n              hashedBuyerId,\n              encryptedBuyerId,\n              {\n                value: bidPrice\n              }\n            );\n            bidId = (await exchange.bidCounter()).sub(1);\n\n            await xferDomainProcessor.setDomainName(\"0xsachink.xyz\");   // Set domain name in mock\n            proof = generateTransferProof(customDkimKeyHash, hashedBuyerId, bidId);\n          }\n\n          subjectProof = generateTransferProof(customDkimKeyHash, hashedBuyerId, bidId);\n        });\n\n        it(\"should finalize the sale\", async () => {\n          await expect(subject()).to.not.be.reverted;\n        });\n\n        it(\"should emit a SaleFinalized event\", async () => {\n          const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n          await expect(subject()).to.emit(exchange, \"SaleFinalized\").withArgs(\n            bidId,\n            listingId,\n            bidPrice.sub(fees),\n            fees\n          );\n        });\n\n        describe(\"when the dkim key hash is incorrect\", async () => {\n          beforeEach(async () => {\n            const incorrectDkimKeyHash = ethers.utils.hexlify(ethers.utils.randomBytes(32));\n            subjectProof = generateTransferProof(incorrectDkimKeyHash, hashedBuyerId, bidId);\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Invalid custom DKIM key hash\");\n          });\n        });\n      });\n\n      describe(\"when the dkim key hash is incorrect\", async () => {\n        beforeEach(async () => {\n          const incorrectDkimKeyHash = ethers.utils.hexlify(ethers.utils.randomBytes(32));\n          subjectProof = generateTransferProof(incorrectDkimKeyHash, hashedBuyerId, bidId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Invalid managed DKIM key hash\");\n        });\n      });\n\n      describe(\"when the owner updates the domain after creating a listing\", async () => {\n        let newExpiryTimestamp: string;\n        beforeEach(async () => {\n          newExpiryTimestamp = '2035-07-08T18:22:00';\n          if (shouldInitialize) {\n            let proofs = generateProofsFromDomains([\n              {\n                name: domainName2,\n                expiryTimestamp: newExpiryTimestamp,\n              }\n            ]);\n            await verifiedDomainRegistry.connect(seller.wallet).verifyDomains(proofs);\n          }\n        });\n\n        it(\"should still finalize the sale\", async () => {\n          // assert domain info has been updated\n          const domainInfo = await verifiedDomainRegistry.getDomains([domainId2]);\n          expect(domainInfo[0].domain.expiryTime).to.equal(convertToUnixTimestamp(newExpiryTimestamp));\n\n          await expect(subject()).to.not.be.reverted;\n        });\n\n        it(\"should emit SaleFinalized event with the correct domain id\", async () => {\n          const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n          await expect(subject()).to.emit(exchange, \"SaleFinalized\").withArgs(\n            bidId,\n            listingId,\n            bidPrice.sub(fees),\n            fees\n          );\n        });\n      });\n\n      describe(\"caller is not seller\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherSeller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not listing owner\");\n        });\n      });\n\n      describe(\"when listing is not active\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(seller.wallet).deleteListing(listingId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Listing not active\");\n        });\n      });\n\n      describe(\"hashed receiver ID is invalid\", async () => {\n        beforeEach(async () => {\n          let invalidBuyerId = getHashedBuyerId(\"invalidBuyerId\");\n          subjectProof = generateTransferProof(dkimKeyHash, invalidBuyerId, bidId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Invalid receiver\");\n        });\n      });\n\n      describe(\"domain name doesn't match the listing\", async () => {\n        beforeEach(async () => {\n          await xferDomainProcessor.setDomainName(\"invalid.domain\");\n          subjectProof = generateTransferProof(dkimKeyHash, hashedBuyerId, bidId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Invalid domain\");\n        });\n      });\n\n      describe(\"when seller tries to finalize sale twice\", async () => {\n        beforeEach(async () => {\n          // Other buyer creates a bid\n          await exchange.connect(otherBuyer.wallet).createBid(\n            listingId,\n            hashedBuyerId,\n            encryptedBuyerId,\n            {\n              value: ether(5)\n            }\n          );\n          otherBidId = (await exchange.bidCounter()).sub(1);\n\n          // Seller finalizes the sale on first bid\n          await subject();\n\n          // Buyer colludes with the seller and transfers the domain back to the seller\n\n          // Generates a transfer proof\n          let proof = generateTransferProof(dkimKeyHash, hashedBuyerId, otherBidId);\n\n          subjectCaller = seller;\n          subjectProof = proof;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Listing not active\");\n        });\n      });\n\n      describe(\"when the exchange is paused\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(owner.wallet).pauseMarketplace();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Pausable: paused\");\n        });\n\n        describe(\"when the exchange is unpaused\", async () => {\n          beforeEach(async () => {\n            await exchange.connect(owner.wallet).unpauseMarketplace();\n          });\n\n          it(\"should not revert\", async () => {\n            await expect(subject()).to.not.be.reverted;\n          });\n        });\n      });\n\n      describe(\"when the contract is not initialized\", async () => {\n        before(async () => {\n          shouldInitialize = false;\n        });\n\n        after(async () => {\n          shouldInitialize = true;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n        });\n      });\n    });\n\n    describe(\"#buyerReleaseFunds\", async () => {\n      let subjectBidId: BigNumber;\n      let subjectCaller: Account;\n\n      let bidId: BigNumber;\n      let listingId: BigNumber;\n      let hashedBuyerId: BytesLike;\n      let bidPrice: BigNumber;\n\n      beforeEach(async () => {\n        // create a listing\n        await exchange.connect(seller.wallet).createListing(\n          domainId2,\n          ether(5),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        // create a bid\n        hashedBuyerId = getHashedBuyerId(\"buyerId\");\n        bidPrice = ether(6);\n        await exchange.connect(buyer.wallet).createBid(\n          listingId,\n          hashedBuyerId,\n          encryptedBuyerId,\n          {\n            value: bidPrice\n          }\n        );\n        bidId = (await exchange.bidCounter()).sub(1);\n\n        subjectBidId = bidId;\n        subjectCaller = buyer;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).buyerReleaseFunds(subjectBidId);\n      }\n\n      it(\"should release funds to the seller\", async () => {\n        const sellerBalanceBefore = await provider.getBalance(seller.address);\n\n        await subject();\n\n        const sellerBalanceAfter = await provider.getBalance(seller.address);\n\n        const expectedTransfer = bidPrice.mul(ether(1).sub(await exchange.fee())).div(ether(1));\n        expect(sellerBalanceAfter.sub(sellerBalanceBefore)).to.equal(expectedTransfer);\n      });\n\n      it(\"should transfer fee to the fee recipient\", async () => {\n        const feeRecipientBalanceBefore = await provider.getBalance(await exchange.feeRecipient());\n        await subject();\n        const feeRecipientBalanceAfter = await provider.getBalance(await exchange.feeRecipient());\n\n        const expectedFee = bidPrice.mul(await exchange.fee()).div(ether(1));\n        expect(feeRecipientBalanceAfter.sub(feeRecipientBalanceBefore)).to.equal(expectedFee);\n      });\n\n      it(\"should remove the listing from listings\", async () => {\n        await subject();\n\n        const listing = await exchange.listings(listingId);\n        expect(listing.seller).to.equal(ethers.constants.AddressZero);\n      });\n\n      it(\"should remove the bid from bids\", async () => {\n        await subject();\n\n        const bid = await exchange.bids(bidId);\n        expect(bid.buyer).to.equal(ethers.constants.AddressZero);\n      });\n\n      it(\"should remove the listing from userListings\", async () => {\n        await subject();\n\n        const sellerBids = await exchange.getUserListings(seller.address);\n        expect(sellerBids.length).to.equal(0);\n      });\n\n      it(\"should remove the bid from userBids\", async () => {\n        await subject();\n\n        const buyerBids = await exchange.getUserBids(buyer.address);\n        expect(buyerBids.length).to.equal(0);\n      });\n\n\n      it(\"should emit a SaleFinalized event\", async () => {\n        const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n        await expect(subject()).to.emit(exchange, \"SaleFinalized\").withArgs(\n          bidId,\n          listingId,\n          bidPrice.sub(fees),\n          fees\n        );\n      });\n\n      it(\"should update domain ownership on registry\", async () => {\n        const sellerDomainsBefore = await verifiedDomainRegistry.getUserDomains(seller.address);\n        const buyerDomainsBefore = await verifiedDomainRegistry.getUserDomains(buyer.address);\n\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomain(domainId2);\n\n        const sellerDomainsAfter = await verifiedDomainRegistry.getUserDomains(seller.address);\n        const buyerDomainsAfter = await verifiedDomainRegistry.getUserDomains(buyer.address);\n        const buyerDomainIds = buyerDomainsAfter.map(domain => domain.domainId);\n\n\n        expect(domainInfo.domain.owner).to.equal(buyer.address);\n        expect(sellerDomainsAfter.length).to.equal(sellerDomainsBefore.length - 1);\n        expect(buyerDomainsAfter.length).to.equal(buyerDomainsBefore.length + 1);\n        expect(buyerDomainIds).to.include(domainId2);\n      });\n\n      it(\"should remove domain exchange and listing id on registry\", async () => {\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomain(domainId2);\n        expect(domainInfo.domain.exchange).to.equal(ZERO);\n        expect(domainInfo.domain.listingId).to.equal(ZERO);\n      });\n\n      describe(\"when the sale eth recipient is not the seller address\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(seller.wallet).updateListing(listingId, ether(5), sellerSaleEthRecipient.address);\n        });\n\n        it(\"should transfer funds to the seller and fee recipient\", async () => {\n          const initialSellerBalance = await provider.getBalance(seller.address);\n          const initialSellerEthRecipientBalance = await provider.getBalance(sellerSaleEthRecipient.address);\n          const initialFeeRecipientBalance = await provider.getBalance(feeRecipient.address);\n\n          await subject();\n\n          const finalSellerBalance = await provider.getBalance(seller.address);\n          const finalSellerEthRecipientBalance = await provider.getBalance(sellerSaleEthRecipient.address);\n          const finalFeeRecipientBalance = await provider.getBalance(feeRecipient.address);\n\n          const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n          const expectedFundsToTransfer = bidPrice.sub(fees);\n\n          expect(initialSellerBalance).to.equal(finalSellerBalance);    // Transaction was initiated by buyer\n          expect(finalFeeRecipientBalance).to.equal(initialFeeRecipientBalance.add(fees));\n          expect(finalSellerEthRecipientBalance).to.equal(initialSellerEthRecipientBalance.add(expectedFundsToTransfer));\n        });\n      });\n\n      describe(\"when the caller is not the buyer\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not bid owner\");\n        });\n      });\n\n      describe(\"when the listing is not active\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(seller.wallet).deleteListing(listingId);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Listing not active\");\n        });\n      });\n\n      describe(\"when the selected bid has initiated refund\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(bidRefundPeriod.add(1).toNumber());\n          await exchange.connect(buyer.wallet).initiateRefund(subjectBidId);\n        });\n\n        it(\"should not revert\", async () => {\n          await expect(subject()).to.not.be.reverted;\n        });\n\n        it(\"should emit SaleFinalized event\", async () => {\n          const fees = bidPrice.mul(swapFee).div(PRECISE_UNIT);\n          await expect(subject()).to.emit(exchange, \"SaleFinalized\").withArgs(\n            subjectBidId,\n            listingId,\n            bidPrice.sub(fees),\n            fees\n          );\n        });\n      });\n    });\n\n    describe(\"#enableInstantAccept\", async () => {\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectCaller = buyer;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).enableInstantAccept();\n      }\n\n      it(\"should enable instant accept\", async () => {\n        await subject();\n\n        const instantAcceptEnabled = await exchange.instantAcceptEnabled(subjectCaller.address);\n        expect(instantAcceptEnabled).to.be.true;\n      });\n\n      it(\"should emit an InstantAcceptUpdated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"InstantAcceptUpdated\").withArgs(subjectCaller.address, true);\n      });\n\n      describe(\"when instant accept is already enabled\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(subjectCaller.wallet).enableInstantAccept();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Instant accept already enabled\");\n        });\n      });\n    });\n\n    describe(\"#disableInstantAccept\", async () => {\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectCaller = buyer;\n        await exchange.connect(subjectCaller.wallet).enableInstantAccept();\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).disableInstantAccept();\n      }\n\n      it(\"should disable instant accept\", async () => {\n        await subject();\n\n        const instantAcceptEnabled = await exchange.instantAcceptEnabled(subjectCaller.address);\n        expect(instantAcceptEnabled).to.be.false;\n      });\n\n      it(\"should emit an InstantAcceptUpdated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"InstantAcceptUpdated\").withArgs(subjectCaller.address, false);\n      });\n\n      describe(\"when instant accept is already disabled\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(subjectCaller.wallet).disableInstantAccept();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Instant accept already disabled\");\n        });\n      });\n    });\n\n    /* ============== Registry Functions (Integration Test) ============== */\n\n    describe(\"#registryRemoveListing\", async () => {\n      let listingId: BigNumber;\n      let otherSellerProofs: ReclaimProof[];\n\n      beforeEach(async () => {\n        // seller claims ownership of the domain\n        let domains = [\n          {\n            name: '0xsachink.xyz',\n            expiryTimestamp: '2025-07-08T07:01:00',\n          } as Domain,\n        ];\n        let proofs = generateProofsFromDomains(domains);\n        await verifiedDomainRegistry.connect(seller.wallet).verifyDomains(proofs);\n\n        // seller lists the domain\n        await exchange.connect(seller.wallet).createListing(\n          domainId1,\n          ether(5),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        otherSellerProofs = generateProofsFromDomains([{\n          name: '0xsachink.xyz',\n          expiryTimestamp: '2025-07-08T07:01:00',\n        }]);\n      });\n\n      async function subject(): Promise<any> {\n        // Invokes registryRemoveListing\n        return await verifiedDomainRegistry.connect(otherSeller.wallet).verifyDomains(otherSellerProofs);\n      }\n\n      it(\"should delete the listing\", async () => {\n        await subject();\n\n        const oldListing = await exchange.listings(listingId);\n        expect(oldListing.seller).to.equal(ADDRESS_ZERO);\n      });\n\n      it(\"should mark the listing as expired\", async () => {\n        await subject();\n\n        const oldListing = await exchange.listings(listingId);\n        expect(oldListing.isActive).to.be.false;\n      });\n\n      it(\"should remove old listing from previous seller's listings\", async () => {\n        await subject();\n\n        const oldSellerListings = await exchange.getUserListings(seller.address);\n        expect(oldSellerListings.length).to.equal(0);\n      });\n\n      it(\"should emit ListingDeletedByRegistry event\", async () => {\n        await expect(subject()).to.emit(exchange, \"ListingDeletedByRegistry\").withArgs(\n          listingId\n        );\n      });\n\n      describe(\"when there are bids against the existing listing\", async () => {\n        beforeEach(async () => {\n          await exchange.connect(buyer.wallet).createBid(\n            listingId,\n            getHashedBuyerId(\"richardliang2015\"),\n            encryptedBuyerId,\n            {\n              value: ether(6)\n            }\n          );\n        });\n\n        it(\"should not delete the listing\", async () => {\n          await subject();\n\n          const oldListing = await exchange.listings(listingId);\n          expect(oldListing.seller).to.equal(seller.address);\n        });\n\n        it(\"should mark old listing as expired\", async () => {\n          await subject();\n\n          const oldListing = await exchange.listings(listingId);\n          expect(oldListing.isActive).to.be.false;\n        });\n\n        it(\"should remove old listing from previous seller's listings\", async () => {\n          await subject();\n\n          const oldSellerListings = await exchange.getUserListings(seller.address);\n          expect(oldSellerListings.length).to.equal(0);\n        });\n\n        it(\"should emit ListingDeletedByRegistry event\", async () => {\n          await expect(subject()).to.emit(exchange, \"ListingDeletedByRegistry\").withArgs(\n            listingId\n          );\n        });\n      });\n\n      describe(\"when caller is not registry\", async () => {\n        let subjectCaller: Account;\n\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        async function subject(): Promise<any> {\n          return exchange.connect(subjectCaller.wallet).registryRemoveListing(listingId);\n        }\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller is not registry\");\n        });\n      });\n\n      describe(\"when listing is NOT active\", async () => {\n        beforeEach(async () => {\n          // original seller deletes the listing the before hand\n          await exchange.connect(seller.wallet).deleteListing(listingId);\n        });\n\n        it(\"should NOT revert\", async () => {\n          await expect(subject()).to.not.be.reverted;\n        });\n      });\n    });\n\n    /* ============== Admin Functions ============== */\n\n\n    describe(\"#updateFee\", async () => {\n      let subjectNewFee: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectNewFee = ether(0.1);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).updateFee(subjectNewFee);\n      }\n\n      it(\"should update the fee\", async () => {\n        await subject();\n\n        const newFee = await exchange.fee();\n        expect(newFee).to.equal(subjectNewFee);\n      });\n\n      it(\"should emit a FeeUpdated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"FeeUpdated\").withArgs(subjectNewFee);\n      });\n\n      describe(\"when new fee is zero\", async () => {\n        beforeEach(async () => {\n          subjectNewFee = ZERO;\n        });\n\n        it(\"should set fee to zero\", async () => {\n          await subject();\n\n          const newFee = await exchange.fee();\n          expect(newFee).to.equal(ZERO);\n        });\n      });\n\n      describe(\"when caller is not admin\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#updateFeeRecipient\", async () => {\n      let subjectNewFeeRecipient: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectNewFeeRecipient = otherBuyer.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).updateFeeRecipient(subjectNewFeeRecipient);\n      }\n\n      it(\"should update the fee recipient\", async () => {\n        await subject();\n\n        const newFeeRecipient = await exchange.feeRecipient();\n        expect(newFeeRecipient).to.equal(subjectNewFeeRecipient);\n      });\n\n      it(\"should emit a FeeRecipientUpdated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"FeeRecipientUpdated\").withArgs(subjectNewFeeRecipient);\n      });\n\n      describe(\"when new fee recipient is the zero address\", async () => {\n        beforeEach(async () => {\n          subjectNewFeeRecipient = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Invalid address\");\n        });\n      });\n\n      describe(\"when caller is not admin\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#updateBidSettlementPeriod\", async () => {\n      let subjectNewBidSettlementPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectNewBidSettlementPeriod = ONE_DAY_IN_SECONDS.mul(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).updateBidSettlementPeriod(subjectNewBidSettlementPeriod);\n      }\n\n      it(\"should update the bid settlement period\", async () => {\n        await subject();\n\n        const newBidSettlementPeriod = await exchange.bidSettlementPeriod();\n        expect(newBidSettlementPeriod).to.equal(subjectNewBidSettlementPeriod);\n      });\n\n      it(\"should emit a BidSettlementPeriodUpdated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"BidSettlementPeriodUpdated\").withArgs(subjectNewBidSettlementPeriod);\n      });\n\n      describe(\"when new bid settlement period is zero\", async () => {\n        beforeEach(async () => {\n          subjectNewBidSettlementPeriod = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Bid settlement period must be greater than 0\");\n        });\n      });\n\n      describe(\"when caller is not admin\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#updateBidRefundPeriod\", async () => {\n      let subjectNewBidRefundPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectNewBidRefundPeriod = ONE_DAY_IN_SECONDS.mul(3);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.connect(subjectCaller.wallet).updateBidRefundPeriod(subjectNewBidRefundPeriod);\n      }\n\n      it(\"should update the bid refund period\", async () => {\n        await subject();\n\n        const newBidRefundPeriod = await exchange.bidRefundPeriod();\n        expect(newBidRefundPeriod).to.equal(subjectNewBidRefundPeriod);\n      });\n\n      it(\"should emit a BidRefundPeriodUpdated event\", async () => {\n        await expect(subject()).to.emit(exchange, \"BidRefundPeriodUpdated\").withArgs(subjectNewBidRefundPeriod);\n      });\n\n      describe(\"when new bid refund period is zero\", async () => {\n        beforeEach(async () => {\n          subjectNewBidRefundPeriod = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Bid refund period must be greater than 0\");\n        });\n      });\n\n      describe(\"when caller is not admin\", async () => {\n        beforeEach(async () => {\n          subjectCaller = otherBuyer;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    /* ============== View Functions ============== */\n\n    describe(\"#getUserListings\", () => {\n      let subjectUser: string;\n\n      beforeEach(async () => {\n        // Create listings for the domains\n        await exchange.connect(seller.wallet).createListing(\n          domainId1,\n          ether(1),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        await exchange.connect(seller.wallet).createListing(\n          domainId2,\n          ether(5),\n          ether(0.6),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n\n        subjectUser = seller.address;\n      });\n\n      async function subject(): Promise<any> {\n        return exchange.getUserListings(subjectUser);\n      }\n\n      it(\"should return the correct listings for the user\", async () => {\n\n        const userListings = await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const listingCounter = await exchange.listingCounter();\n\n        expect(userListings.length).to.equal(2);\n        expect(userListings[0].listingId).to.equal(listingCounter.sub(2));\n        expect(userListings[0].listing.askPrice).to.equal(ether(1));\n        expect(userListings[0].listing.minBidPrice).to.equal(ether(0.5));\n        expect(userListings[0].listing.seller).to.equal(seller.address);\n        expect(userListings[0].listing.createdAt).to.approximately(currentTimestamp, 1);\n\n        expect(userListings[1].listingId).to.equal(listingCounter.sub(1));\n        expect(userListings[1].listing.askPrice).to.equal(ether(5));\n        expect(userListings[1].listing.minBidPrice).to.equal(ether(0.6));\n        expect(userListings[1].listing.seller).to.equal(seller.address);\n        expect(userListings[1].listing.createdAt).to.equal(currentTimestamp);\n      });\n\n      describe(\"when the user has no listings\", () => {\n        beforeEach(() => {\n          subjectUser = buyer.address;\n        });\n\n        it(\"should return an empty array\", async () => {\n          const userListings = await subject();\n\n          expect(userListings.length).to.equal(0);\n        });\n      });\n    });\n\n    describe(\"#getUserBids\", () => {\n      let subjectUser: Address;\n\n      let bidId: BigNumber;\n      let listingId: BigNumber;\n\n      beforeEach(async () => {\n        // Create listings\n        await exchange.connect(seller.wallet).createListing(\n          domainId1,\n          ether(1),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        // Create a bid against groth16.xyz\n        await exchange.connect(buyer.wallet).enableInstantAccept();\n        await exchange.connect(buyer.wallet).createBid(\n          listingId,\n          getHashedBuyerId(\"buyerId\"),\n          encryptedBuyerId,\n          {\n            value: ether(1)\n          }\n        );\n\n        bidId = (await exchange.bidCounter()).sub(1);\n\n        subjectUser = buyer.address;\n      });\n\n      async function subject(): Promise<any[]> {\n        return exchange.getUserBids(subjectUser);\n      }\n\n      it(\"should return the correct bids for the user\", async () => {\n        const userBids = await subject();\n\n        expect(userBids.length).to.equal(1);\n        expect(userBids[0].bidId).to.equal(bidId);\n        expect(userBids[0].bid.price).to.equal(ether(1));\n        expect(userBids[0].bid.buyer).to.equal(buyer.address);\n        expect(userBids[0].bid.listingId).to.equal(listingId);\n        expect(userBids[0].bid.createdAt).to.equal(await blockchain.getCurrentTimestamp());\n        expect(userBids[0].buyerInstantAcceptEnabled).to.be.true;\n      });\n\n      describe(\"when the user has no bids\", () => {\n        beforeEach(() => {\n          subjectUser = otherBuyer.address;\n        });\n\n        it(\"should return an empty array\", async () => {\n          const userBids = await subject();\n\n          expect(userBids.length).to.equal(0);\n        });\n      });\n    });\n\n    describe(\"#getListingBids\", () => {\n      let subjectListingId: BigNumber[];\n\n      let bidId1: BigNumber;\n      let bidId2: BigNumber;\n      let listingId: BigNumber;\n\n      beforeEach(async () => {\n        // Create a listing\n        await exchange.connect(seller.wallet).createListing(\n          domainId1,\n          ether(1),\n          ether(0.5),\n          seller.address,\n          sellerEncryptionKey,\n          ethers.constants.HashZero\n        );\n        listingId = (await exchange.listingCounter()).sub(1);\n\n        // Create two bids against the listing\n        await exchange.connect(buyer.wallet).enableInstantAccept();\n        await exchange.connect(buyer.wallet).createBid(\n          listingId,\n          getHashedBuyerId(\"buyerId1\"),\n          encryptedBuyerId,\n          {\n            value: ether(1)\n          }\n        );\n\n        await exchange.connect(otherBuyer.wallet).createBid(\n          listingId,\n          getHashedBuyerId(\"buyerId2\"),\n          encryptedBuyerId,\n          {\n            value: ether(2)\n          }\n        );\n\n        bidId1 = (await exchange.bidCounter()).sub(2);\n        bidId2 = (await exchange.bidCounter()).sub(1);\n\n        subjectListingId = [listingId];\n      });\n\n      async function subject(): Promise<any[]> {\n        return exchange.getListingBids(subjectListingId);\n      }\n\n      it(\"should return the correct bids for the listing\", async () => {\n        const listingBids = await subject();\n\n        expect(listingBids.length).to.equal(1);\n        expect(listingBids[0].length).to.equal(2);\n        expect(listingBids[0][0].bidId).to.equal(bidId1);\n        expect(listingBids[0][0].bid.price).to.equal(ether(1));\n        expect(listingBids[0][0].bid.buyer).to.equal(buyer.address);\n        expect(listingBids[0][0].bid.createdAt).to.approximately(await blockchain.getCurrentTimestamp(), 1);\n        expect(listingBids[0][0].buyerInstantAcceptEnabled).to.be.true;\n\n        expect(listingBids[0][1].bidId).to.equal(bidId2);\n        expect(listingBids[0][1].bid.price).to.equal(ether(2));\n        expect(listingBids[0][1].bid.buyer).to.equal(otherBuyer.address);\n        expect(listingBids[0][1].bid.createdAt).to.equal(await blockchain.getCurrentTimestamp());\n        expect(listingBids[0][1].buyerInstantAcceptEnabled).to.be.false;\n      });\n\n      describe(\"when the listing has no bids\", () => {\n        beforeEach(async () => {\n          // Create a new listing without bids\n          await exchange.connect(seller.wallet).createListing(\n            domainId2,\n            ether(5),\n            ether(0.5),\n            seller.address,\n            sellerEncryptionKey,\n            ethers.constants.HashZero\n          );\n          listingId = (await exchange.listingCounter()).sub(1);\n\n          subjectListingId = [listingId];\n        });\n\n        it(\"should return an empty array\", async () => {\n          const listingBids = await subject();\n\n          expect(listingBids[0].length).to.equal(0);\n        });\n      });\n\n      describe(\"when the listing does not exist\", () => {\n        beforeEach(() => {\n          subjectListingId = [listingId.add(1)];\n        });\n\n        it(\"should return an empty array\", async () => {\n          const listingBids = await subject();\n\n          expect(listingBids[0].length).to.equal(0);\n        });\n      });\n    });\n  });\n\n  describe(\"#updateTransferDomainProcessor\", async () => {\n    let subjectNewTransferDomainProcessor: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectNewTransferDomainProcessor = newTransferDomainProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return await exchange.connect(subjectCaller.wallet).updateTransferDomainProcessor(subjectNewTransferDomainProcessor);\n    }\n\n    it(\"should update the transfer domain processor\", async () => {\n      await subject();\n\n      const newProcessor = await exchange.transferDomainProcessor();\n      expect(newProcessor).to.equal(subjectNewTransferDomainProcessor);\n    });\n\n    it(\"should emit a TransferDomainProcessorUpdated event\", async () => {\n      await expect(subject()).to.emit(exchange, \"TransferDomainProcessorUpdated\").withArgs(subjectNewTransferDomainProcessor);\n    });\n\n    describe(\"when the caller is not the owner\", () => {\n      beforeEach(async () => {\n        subjectCaller = seller;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n\n    describe(\"when the new processor address is zero\", () => {\n      beforeEach(async () => {\n        subjectNewTransferDomainProcessor = ADDRESS_ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid address\");\n      });\n    });\n  });\n\n  describe(\"#updateMailServerKeyHashAdapter\", async () => {\n    let subjectNewMailServerKeyHashAdapter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n      subjectNewMailServerKeyHashAdapter = newMailServerKeyHashAdapter.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await exchange.connect(subjectCaller.wallet).updateMailServerKeyHashAdapter(subjectNewMailServerKeyHashAdapter);\n    }\n\n    it(\"should update the mail server key hash adapter\", async () => {\n      await subject();\n\n      const newAdapter = await exchange.mailServerKeyHashAdapter();\n      expect(newAdapter).to.equal(subjectNewMailServerKeyHashAdapter);\n    });\n\n    it(\"should emit a MailServerKeyHashAdapterUpdated event\", async () => {\n      await expect(subject()).to.emit(exchange, \"MailServerKeyHashAdapterUpdated\").withArgs(subjectNewMailServerKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", () => {\n      beforeEach(async () => {\n        subjectCaller = seller;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n\n    describe(\"when the new adapter address is zero\", () => {\n      beforeEach(async () => {\n        subjectNewMailServerKeyHashAdapter = ADDRESS_ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid address\");\n      });\n    });\n  });\n});"
  },
  {
    "path": "contracts-domain/test/transferDomainProcessor.spec.ts",
    "content": "\nimport \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber, Bytes, BytesLike } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\n\nimport DeployHelper from \"@utils/deploys\";\nimport { Groth16Proof } from \"@utils/types\";\nimport { createTypedGroth16Proof } from \"@utils/protocolUtils\";\nimport {\n  TransferDomainProcessor,\n  ManagedKeyHashAdapterV2,\n  NullifierRegistry\n} from \"@utils/contracts\";\n\nconst expect = getWaffleExpect();\n\nconst PROOF = {\n  a: [\"0x292bbb24032132ee63149adf98b766443fcabe98edecc0d40ca6c03d4d4439f2\", \"0x129475199792277d6171ff2cb83f39c8071ca02d1cd5812a3e1bde2a5e7c614c\"],\n  b: [[\"0x1a5da248b050a894c9a0e11c6b30fcad47a39fe4ad7af83a97ed42827512ca3e\", \"0x02f767a3e96d8c5db4102210dbd7831200f8621e30addd9d528d1f1cb2dbd796\"], [\"0x1bfd97c314f5d36270022215384658d96cbc354900c4e20d490cdf680d1e4583\", \"0x1e4d1a48ecc369c0c885c0fa24970c087ec21bb7b99abbef247578c7ea1adb13\"]],\n  c: [\"0x06fd24abf835692f90f1fe1ca00c6d96e88f39acf38b43173b2ae715f6b37696\", \"0x12ffcaec17c3bbdeaabd8b7838593a2952ba2b6f68fe61b7ac7eae5560affb5c\"],\n  signals: [\n    \"0x0db7730bdd90c823601ed32395c8b2f3307fd4adc477ca22bf3ed406c1b3ae4a\",\n    \"0x00000000000000000000006d6f632e7061656863656d616e4074726f70707573\",\n    \"0x000000000000000000000000000000007a79782e676e61696c64726168636972\",\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n    \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n    \"0x2d5c62f5adcd38b107d729c9aec6b3db0656e9e85d6b57958b2cafc05f33aee9\",\n    \"0x0196972d6498372690eb6e2b761c2fa189eaca0033d1231e9877b403d13e06e8\",\n    \"0x0000000000000000000000000000000000000000000000000000000000003039\"\n  ]\n}\n\ndescribe(\"TransferDomainProcessor\", () => {\n  let owner: Account;\n  let exchange: Account;\n\n  let nullifierRegistry: NullifierRegistry;\n  let xferDomainProcessor: TransferDomainProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      exchange\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    xferDomainProcessor = await deployer.deployTransferDomainProcessor(\n      exchange.address,\n      nullifierRegistry.address,\n      \"support@namecheap.com\"\n    );\n\n    await nullifierRegistry.addWritePermission(xferDomainProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const emailFromAddress = await xferDomainProcessor.getEmailFromAddress();\n\n      expect(await xferDomainProcessor.exchange()).to.equal(exchange.address);\n      expect(await xferDomainProcessor.nullifierRegistry()).to.equal(nullifierRegistry.address);\n      expect(ethers.utils.arrayify(emailFromAddress)).to.deep.equal(ethers.utils.toUtf8Bytes(\"support@namecheap.com\"));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: Groth16Proof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = createTypedGroth16Proof(PROOF.a, PROOF.b, PROOF.c, PROOF.signals);\n      subjectCaller = exchange;\n    });\n\n    async function subject(): Promise<any> {\n      return xferDomainProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return xferDomainProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const {\n        dkimKeyHash,\n        hashedReceiverId,\n        domainName,\n        bidId\n      } = await subjectCallStatic();\n\n      expect(dkimKeyHash).to.eq(PROOF.signals[0]);\n      expect(domainName).to.eq('richardliang.xyz');\n      expect(hashedReceiverId).to.eq(PROOF.signals[7]);\n      expect(bidId).to.eq(\"12345\");\n    });\n\n    it(\"should add the email to the nullifier registry\", async () => {\n      await subject();\n\n      const isNullified = await nullifierRegistry.isNullified(subjectProof.signals[8].toHexString());\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the proof is invalid\", () => {\n      beforeEach(() => {\n        subjectProof = createTypedGroth16Proof(PROOF.a, PROOF.b, PROOF.c, [ethers.constants.HashZero, ...PROOF.signals.slice(1)]);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the from email address is invalid\", () => {\n      beforeEach(async () => {\n        await xferDomainProcessor.setEmailFromAddress(\"support@Namecheap.com\");   // capital N\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the email has been used previously\", () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when caller is not the exchange\", () => {\n      beforeEach(() => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only exchange can call this function\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-domain/test/verifiedDomainRegistry.spec.ts",
    "content": "\nimport \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber, Bytes, BytesLike } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { Domain } from \"@utils/types\";\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\n\nimport DeployHelper from \"@utils/deploys\";\nimport { Address } from \"@utils/types\";\nimport { ADDRESS_ZERO, ONE, ONE_DAY_IN_SECONDS, ZERO } from \"@utils/constants\";\nimport {\n  calculateDomainId,\n  convertToUnixTimestamp,\n  generateProofsFromDomains,\n  convertUnixTimestampToDateString\n} from \"@utils/protocolUtils\";\nimport {\n  IProxyBaseProcessor,\n  VerifiedDomainRegistry,\n  VerifyDomainProcessorMock,\n  DomainExchangeMock\n} from \"@utils/contracts\";\nimport { Blockchain, ether, usdc } from \"@utils/common\";\n\nconst expect = getWaffleExpect();\nconst blockchain = new Blockchain(ethers.provider);\n\ndescribe(\"VerifiedDomainRegistry\", () => {\n  let owner: Account;\n  let seller: Account;\n  let otherSeller: Account;\n\n  let verifiedDomainRegistry: VerifiedDomainRegistry;\n  let verifyDomainProcessor: VerifyDomainProcessorMock;\n  let newVerifyDomainProcessor: VerifyDomainProcessorMock;\n\n  let snapshotId: string;\n  let deployer: DeployHelper;\n\n  let exchange: Account;\n  let secondExchange: Account;\n  let domainExchangeMock: DomainExchangeMock;\n\n  before(async () => {\n    [\n      owner,\n      seller,\n      otherSeller,\n      exchange,\n      secondExchange\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    verifyDomainProcessor = await deployer.deployVerifyDomainProcessorMock();\n    newVerifyDomainProcessor = await deployer.deployVerifyDomainProcessorMock();\n    verifiedDomainRegistry = await deployer.deployVerifiedDomainRegistry();\n\n    domainExchangeMock = await deployer.deployDomainExchangeMock(verifiedDomainRegistry.address);\n  });\n\n  beforeEach(async () => {\n    snapshotId = await blockchain.saveSnapshotAsync();\n  });\n\n  afterEach(async () => {\n    await blockchain.revertByIdAsync(snapshotId);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct parameters\", async () => {\n      expect(await verifiedDomainRegistry.owner()).to.equal(owner.address);\n      expect(await verifiedDomainRegistry.isInitialized()).to.equal(false);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectVerifyDomainProcessor: Address;\n\n    beforeEach(async () => {\n      subjectVerifyDomainProcessor = verifyDomainProcessor.address;\n    });\n\n    async function subject(): Promise<any> {\n      return verifiedDomainRegistry.initialize(subjectVerifyDomainProcessor);\n    }\n\n    it(\"should set the correct parameters\", async () => {\n      await subject();\n\n      expect(await verifiedDomainRegistry.isInitialized()).to.equal(true);\n    });\n\n    it(\"should set initialize to true\", async () => {\n      await subject();\n\n      expect(await verifiedDomainRegistry.isInitialized()).to.equal(true);\n    });\n\n    it(\"should emit VerifyDomainProcessorUpdated event\", async () => {\n      await expect(subject()).to.emit(verifiedDomainRegistry, \"VerifyDomainProcessorUpdated\").withArgs(\n        subjectVerifyDomainProcessor\n      );\n    });\n\n    describe(\"if already initialized\", () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n  });\n\n  describe(\"when it is initialized\", async () => {\n    let snapshotIdTwo: string;\n    let shouldInitialize: boolean = true;\n\n    beforeEach(async () => {\n      if (shouldInitialize) {\n        await verifiedDomainRegistry.initialize(verifyDomainProcessor.address);\n      }\n      snapshotIdTwo = await blockchain.saveSnapshotAsync();\n    });\n\n    afterEach(async () => {\n      await blockchain.revertByIdAsync(snapshotIdTwo);\n    });\n\n    describe(\"#verifyDomains\", async () => {\n      let subjectCaller: Account;\n      let subjectProofs: IProxyBaseProcessor.ProofStruct[];\n\n      let domainName: string;\n      let expiryTimestamp: string;\n      let domainId: string;\n\n      beforeEach(async () => {\n        domainName = 'groth16.xyz';\n        expiryTimestamp = '2025-07-08T18:22:00';\n        domainId = calculateDomainId(domainName);\n\n        subjectCaller = seller;\n        subjectProofs = generateProofsFromDomains([\n          {\n            name: domainName,\n            expiryTimestamp: expiryTimestamp,\n          }\n        ]);\n      });\n\n      async function subject(): Promise<any> {\n        return verifiedDomainRegistry.connect(subjectCaller.wallet).verifyDomains(subjectProofs);\n      }\n\n      it(\"should update domain info\", async () => {\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomains([domainId]);\n        expect(domainInfo[0].domainId).to.equal(domainId);\n        expect(domainInfo[0].domain.owner).to.equal(seller.address);\n        expect(domainInfo[0].domain.name).to.equal(domainName);\n        expect(domainInfo[0].domain.expiryTime).to.equal(convertToUnixTimestamp(expiryTimestamp));\n        expect(domainInfo[0].domain.exchange).to.equal(ADDRESS_ZERO);\n        expect(domainInfo[0].domain.listingId).to.equal(0);\n      });\n\n      it(\"should update userDomains\", async () => {\n        await subject();\n\n        const userDomains = await verifiedDomainRegistry.getUserDomains(seller.address);\n        expect(userDomains.length).to.equal(1);\n        expect(userDomains[0].domainId).to.equal(domainId);\n      });\n\n      it(\"should emit DomainVerified event\", async () => {\n        await expect(subject()).to.emit(verifiedDomainRegistry, \"DomainVerified\").withArgs(\n          domainId,\n          seller.address,\n          domainName,\n          convertToUnixTimestamp(expiryTimestamp)\n        );\n      });\n\n      describe(\"when verifying multiple domains\", () => {\n        let secondDomainName: string;\n        let secondExpiryTimestamp: string;\n        let secondDomainId: string;\n\n        beforeEach(async () => {\n          secondDomainName = '0xsachink.xyz';\n          secondExpiryTimestamp = '2025-07-08T07:01:00';\n          secondDomainId = calculateDomainId(secondDomainName);\n\n          subjectProofs = generateProofsFromDomains([\n            {\n              name: domainName,\n              expiryTimestamp: expiryTimestamp,\n            },\n            {\n              name: secondDomainName,\n              expiryTimestamp: secondExpiryTimestamp,\n            }\n          ]);\n        });\n\n        it(\"should update domain info for both domains\", async () => {\n          await subject();\n\n          const domainInfo = await verifiedDomainRegistry.getDomains([domainId, secondDomainId]);\n\n          expect(domainInfo[0].domainId).to.equal(domainId);\n          expect(domainInfo[0].domain.owner).to.equal(seller.address);\n          expect(domainInfo[0].domain.name).to.equal(domainName);\n          expect(domainInfo[0].domain.expiryTime).to.equal(convertToUnixTimestamp(expiryTimestamp));\n          expect(domainInfo[0].domain.exchange).to.equal(ADDRESS_ZERO);\n          expect(domainInfo[0].domain.listingId).to.equal(0);\n\n          expect(domainInfo[1].domainId).to.equal(secondDomainId);\n          expect(domainInfo[1].domain.owner).to.equal(seller.address);\n          expect(domainInfo[1].domain.name).to.equal(secondDomainName);\n          expect(domainInfo[1].domain.expiryTime).to.equal(convertToUnixTimestamp(secondExpiryTimestamp));\n          expect(domainInfo[1].domain.exchange).to.equal(ADDRESS_ZERO);\n          expect(domainInfo[1].domain.listingId).to.equal(0);\n        });\n\n        it(\"should update userDomains with both domains\", async () => {\n          await subject();\n\n          const userDomains = await verifiedDomainRegistry.getUserDomains(seller.address);\n          expect(userDomains.length).to.equal(2);\n\n          expect(userDomains[0].domainId).to.equal(domainId);\n          expect(userDomains[0].domain.name).to.equal(domainName);\n          expect(userDomains[0].domain.expiryTime).to.equal(convertToUnixTimestamp(expiryTimestamp));\n\n          expect(userDomains[1].domainId).to.equal(secondDomainId);\n          expect(userDomains[1].domain.name).to.equal(secondDomainName);\n          expect(userDomains[1].domain.expiryTime).to.equal(convertToUnixTimestamp(secondExpiryTimestamp));\n        });\n\n        it(\"should emit DomainVerified events for both domains\", async () => {\n          await expect(subject())\n            .to.emit(verifiedDomainRegistry, \"DomainVerified\")\n            .withArgs(domainId, seller.address, domainName, convertToUnixTimestamp(expiryTimestamp))\n            .and.to.emit(verifiedDomainRegistry, \"DomainVerified\")\n            .withArgs(secondDomainId, seller.address, secondDomainName, convertToUnixTimestamp(secondExpiryTimestamp));\n        });\n      });\n\n      describe(\"when domain is already owned\", () => {\n\n        describe(\"and the owner is same as the caller\", () => {\n          let newExpiryTimestamp: string;\n\n          beforeEach(async () => {\n            // seller claims ownership of domain\n            await subject();\n\n            newExpiryTimestamp = '2035-07-08T18:22:00';\n\n            subjectCaller = seller;\n            subjectProofs = generateProofsFromDomains([\n              {\n                name: domainName,\n                expiryTimestamp: newExpiryTimestamp,\n              }\n            ]);\n          });\n\n          it(\"should update domainInfo\", async () => {\n            const previousDomainInfo = await verifiedDomainRegistry.getDomains([domainId]);\n\n            await subject();\n\n            const domainInfo = await verifiedDomainRegistry.getDomains([domainId]);\n\n            expect(domainInfo.length).to.equal(1);\n            expect(domainInfo[0].domainId).to.equal(domainId);\n            expect(domainInfo[0].domain.owner).to.equal(seller.address);\n            expect(domainInfo[0].domain.name).to.equal(domainName);\n            expect(domainInfo[0].domain.expiryTime).to.equal(convertToUnixTimestamp(newExpiryTimestamp));\n            expect(domainInfo[0].domain.exchange).to.equal(previousDomainInfo[0].domain.exchange);\n            expect(domainInfo[0].domain.listingId).to.equal(previousDomainInfo[0].domain.listingId);\n          });\n\n          it(\"should NOT update userDomains\", async () => {\n            await subject();\n\n            const sellerDomains = await verifiedDomainRegistry.getUserDomains(seller.address);\n            expect(sellerDomains.length).to.equal(1);\n            expect(sellerDomains[0].domainId).to.equal(domainId);\n          });\n\n          it(\"should emit DomainVerified event\", async () => {\n            await expect(subject()).to.emit(verifiedDomainRegistry, \"DomainVerified\").withArgs(\n              domainId,\n              seller.address,\n              domainName,\n              convertToUnixTimestamp(newExpiryTimestamp)\n            );\n          });\n        });\n\n        describe(\"and the owner is different from the caller\", () => {\n          beforeEach(async () => {\n            // first seller claims ownership of domain\n            await subject();\n\n            subjectCaller = otherSeller;\n            subjectProofs = generateProofsFromDomains([\n              {\n                name: domainName,\n                expiryTimestamp: expiryTimestamp,\n              }\n            ]);\n          });\n\n          it(\"should update domain info\", async () => {\n            await subject();\n\n            const domainInfo = await verifiedDomainRegistry.getDomains([domainId]);\n\n            expect(domainInfo.length).to.equal(1);\n            expect(domainInfo[0].domainId).to.equal(domainId);\n            expect(domainInfo[0].domain.owner).to.equal(otherSeller.address);\n            expect(domainInfo[0].domain.name).to.equal(domainName);\n            expect(domainInfo[0].domain.expiryTime).to.equal(convertToUnixTimestamp(expiryTimestamp));\n          });\n\n          it(\"should update userDomains\", async () => {\n            await subject();\n\n            const prevSellerDomains = await verifiedDomainRegistry.getUserDomains(seller.address);\n            expect(prevSellerDomains.length).to.equal(0);\n\n            const otherSellerDomains = await verifiedDomainRegistry.getUserDomains(otherSeller.address);\n            expect(otherSellerDomains.length).to.equal(1);\n            expect(otherSellerDomains[0].domainId).to.equal(domainId);\n          });\n\n          it(\"should emit DomainVerified event\", async () => {\n            await expect(subject()).to.emit(verifiedDomainRegistry, \"DomainVerified\").withArgs(\n              domainId,\n              otherSeller.address,\n              domainName,\n              convertToUnixTimestamp(expiryTimestamp)\n            );\n          });\n\n          describe(\"when the domain is already listed on an exchange\", () => {\n            beforeEach(async () => {\n              await verifiedDomainRegistry.connect(owner.wallet).addExchange(domainExchangeMock.address);\n              await domainExchangeMock.connect(seller.wallet).createListing(domainId, ONE);\n            });\n\n            it(\"should reset exchange and listingId\", async () => {\n              await subject();\n\n              const domainInfo = await verifiedDomainRegistry.getDomains([domainId]);\n              expect(domainInfo[0].domain.exchange).to.equal(ADDRESS_ZERO);\n              expect(domainInfo[0].domain.listingId).to.equal(0);\n            });\n\n            it(\"should remove listing from exchange\", async () => {\n              await subject();\n\n              const listingActive = await domainExchangeMock.listingActive(ONE);\n              expect(listingActive).to.equal(false);\n            });\n          });\n        });\n      });\n\n      describe(\"when domain is expired\", async () => {\n        beforeEach(async () => {\n          const blockTimestamp = await blockchain.getCurrentTimestamp();\n          expiryTimestamp = convertUnixTimestampToDateString(blockTimestamp.sub(ONE_DAY_IN_SECONDS));\n\n          subjectProofs = generateProofsFromDomains([\n            {\n              name: domainName,\n              expiryTimestamp: expiryTimestamp,\n            }\n          ]);\n        });\n\n        it(\"should NOT revert\", async () => {\n          await expect(subject()).to.not.be.reverted;\n        });\n      });\n\n      describe(\"when the contract is not initialized\", () => {\n        before(async () => {\n          shouldInitialize = false;\n        });\n\n        after(async () => {\n          shouldInitialize = true;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n        });\n      });\n    });\n\n    describe(\"#setDomainListing\", async () => {\n      let subjectDomainId: string;\n      let subjectListingId: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        let domainName = 'groth16.xyz';\n        let expiryTimestamp = '2025-07-08T18:22:00';\n        let domainId = calculateDomainId(domainName);\n\n        if (shouldInitialize) {\n          // Add exchange to verifiedDomainRegistry\n          await verifiedDomainRegistry.connect(owner.wallet).addExchange(exchange.address);\n\n          // verify domain\n          const proofs = generateProofsFromDomains([\n            {\n              name: domainName,\n              expiryTimestamp: expiryTimestamp,\n            }\n          ]);\n          await verifiedDomainRegistry.connect(seller.wallet).verifyDomains(proofs);\n        }\n\n        subjectDomainId = domainId;\n        subjectListingId = ONE;\n        subjectCaller = exchange;\n      });\n\n      async function subject(): Promise<any> {\n        return verifiedDomainRegistry.connect(subjectCaller.wallet).setDomainListing(\n          subjectDomainId,\n          subjectListingId\n        );\n      };\n\n      it(\"should update the exchange for the domain\", async () => {\n        await subject();\n        const domainInfo = await verifiedDomainRegistry.getDomains([subjectDomainId]);\n        expect(domainInfo[0].domain.exchange).to.equal(subjectCaller.address);\n      });\n\n      it(\"should update the listing id for the domain\", async () => {\n        await subject();\n        const domainInfo = await verifiedDomainRegistry.getDomains([subjectDomainId]);\n        expect(domainInfo[0].domain.listingId).to.equal(subjectListingId);\n      });\n\n      it(\"should emit a DomainListed event\", async () => {\n        await expect(subject()).to.emit(verifiedDomainRegistry, \"DomainListed\").withArgs(\n          subjectDomainId,\n          subjectCaller.address,\n          subjectListingId\n        );\n      });\n\n      describe(\"when the domain is not verified\", () => {\n        beforeEach(async () => {\n          subjectDomainId = calculateDomainId(\"unverified.xyz\");\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Domain must be verified\");\n        });\n      });\n\n      describe(\"when the domain is already listed on another exchange\", () => {\n        beforeEach(async () => {\n          await verifiedDomainRegistry.connect(owner.wallet).addExchange(secondExchange.address);\n          await verifiedDomainRegistry.connect(secondExchange.wallet).setDomainListing(subjectDomainId, ONE);\n\n          subjectCaller = secondExchange;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Domain already listed on another exchange\");\n        });\n      });\n\n      describe(\"when the caller is not an exchange\", () => {\n        beforeEach(async () => {\n          subjectCaller = seller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be exchange\");\n        });\n      });\n\n      describe(\"when the contract is not initialized\", () => {\n        before(async () => {\n          shouldInitialize = false;\n        });\n\n        after(async () => {\n          shouldInitialize = true;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n        });\n      });\n    });\n\n    describe(\"#removeDomainListing\", async () => {\n      let subjectDomainId: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        let domainName = 'groth16.xyz';\n        let expiryTimestamp = '2025-07-08T18:22:00';\n        let domainId = calculateDomainId(domainName);\n\n        if (shouldInitialize) {\n          // Add exchange to verifiedDomainRegistry\n          await verifiedDomainRegistry.connect(owner.wallet).addExchange(exchange.address);\n\n          // verify domain\n          const proofs = generateProofsFromDomains([\n            {\n              name: domainName,\n              expiryTimestamp: expiryTimestamp,\n            }\n          ]);\n          await verifiedDomainRegistry.connect(seller.wallet).verifyDomains(proofs);\n          await verifiedDomainRegistry.connect(exchange.wallet).setDomainListing(domainId, ONE);\n        }\n\n        subjectDomainId = domainId;\n        subjectCaller = exchange;\n      });\n\n      async function subject(): Promise<any> {\n        return verifiedDomainRegistry.connect(subjectCaller.wallet).removeDomainListing(subjectDomainId);\n      }\n\n      it(\"should remove domain listing status\", async () => {\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomains([subjectDomainId]);\n        expect(domainInfo[0].domain.listingId).to.equal(0);\n      });\n\n      it(\"should remove domain exchange\", async () => {\n        await subject();\n\n        const domainInfo = await verifiedDomainRegistry.getDomains([subjectDomainId]);\n        expect(domainInfo[0].domain.exchange).to.equal(ethers.constants.AddressZero);\n      });\n\n      it(\"should emit DomainListingRemoved event\", async () => {\n        await expect(subject()).to.emit(verifiedDomainRegistry, \"DomainListingRemoved\").withArgs(\n          subjectDomainId,\n          subjectCaller.address\n        );\n      });\n\n      describe(\"when the domain is not listed on the calling exchange\", () => {\n        beforeEach(async () => {\n          await verifiedDomainRegistry.connect(owner.wallet).addExchange(secondExchange.address);\n\n          subjectCaller = secondExchange;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Domain not listed on calling exchange\");\n        });\n      });\n\n      describe(\"when the caller is not an exchange\", () => {\n        beforeEach(async () => {\n          subjectCaller = seller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be exchange\");\n        });\n      });\n\n      describe(\"when the contract is not initialized\", () => {\n        before(async () => {\n          shouldInitialize = false;\n        });\n\n        after(async () => {\n          shouldInitialize = true;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n        });\n      });\n    });\n\n    describe(\"#updateDomainOnSale\", async () => {\n      let subjectDomainId: string;\n      let subjectNewOwner: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        let domainName = 'groth16.xyz';\n        let expiryTimestamp = '2025-07-08T18:22:00';\n        let domainId = calculateDomainId(domainName);\n\n        if (shouldInitialize) {\n          // Add exchange to verifiedDomainRegistry\n          await verifiedDomainRegistry.connect(owner.wallet).addExchange(exchange.address);\n\n          // verify domain\n          const proofs = generateProofsFromDomains([\n            {\n              name: domainName,\n              expiryTimestamp: expiryTimestamp,\n            }\n          ]);\n          await verifiedDomainRegistry.connect(seller.wallet).verifyDomains(proofs);\n\n          // List the domain\n          await verifiedDomainRegistry.connect(exchange.wallet).setDomainListing(domainId, ONE);\n        }\n\n        subjectDomainId = domainId;\n        subjectNewOwner = otherSeller.address;\n        subjectCaller = exchange;\n      });\n\n      async function subject(): Promise<any> {\n        return verifiedDomainRegistry.connect(subjectCaller.wallet).updateDomainOnSale(\n          subjectDomainId,\n          subjectNewOwner\n        );\n      }\n\n      it(\"should update the owner of the domain\", async () => {\n        await subject();\n        const domainInfo = await verifiedDomainRegistry.getDomains([subjectDomainId]);\n        expect(domainInfo[0].domain.owner).to.equal(subjectNewOwner);\n      });\n\n      it(\"should remove the exchange and listingId\", async () => {\n        await subject();\n        const domainInfo = await verifiedDomainRegistry.getDomains([subjectDomainId]);\n        expect(domainInfo[0].domain.exchange).to.equal(ethers.constants.AddressZero);\n        expect(domainInfo[0].domain.listingId).to.equal(0);\n      });\n\n      it(\"should update the user domains\", async () => {\n        const prevSellerDomains = await verifiedDomainRegistry.getUserDomains(seller.address);\n        expect(prevSellerDomains.length).to.equal(1);\n\n        await subject();\n\n        const newSellerDomains = await verifiedDomainRegistry.getUserDomains(seller.address);\n        expect(newSellerDomains.length).to.equal(0);\n\n        const buyerDomains = await verifiedDomainRegistry.getUserDomains(otherSeller.address);\n        expect(buyerDomains.length).to.equal(1);\n        expect(buyerDomains[0].domainId).to.equal(subjectDomainId);\n      });\n\n      it(\"should emit DomainTransferred event\", async () => {\n        await expect(subject()).to.emit(verifiedDomainRegistry, \"DomainTransferred\").withArgs(\n          subjectDomainId,\n          seller.address,\n          subjectNewOwner\n        );\n      });\n\n      describe(\"when the domain is not listed on the calling exchange\", () => {\n        beforeEach(async () => {\n          await verifiedDomainRegistry.connect(owner.wallet).addExchange(secondExchange.address);\n          subjectCaller = secondExchange;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Domain not listed on calling exchange\");\n        });\n      });\n\n      describe(\"when the caller is not an exchange\", () => {\n        beforeEach(async () => {\n          subjectCaller = seller;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be exchange\");\n        });\n      });\n\n      describe(\"when the contract is not initialized\", () => {\n        before(async () => {\n          shouldInitialize = false;\n        });\n\n        after(async () => {\n          shouldInitialize = true;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n        });\n      });\n    });\n  });\n  /* ============ Admin functions ============ */\n\n  describe(\"#setVerifyDomainProcessor\", async () => {\n    let subjectNewVerifyDomainProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectNewVerifyDomainProcessor = newVerifyDomainProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return verifiedDomainRegistry.connect(subjectCaller.wallet).updateVerifyDomainProcessor(subjectNewVerifyDomainProcessor);\n    }\n\n    it(\"should update the verify domain processor\", async () => {\n      await subject();\n\n      const newVerifyDomainProcessor = await verifiedDomainRegistry.verifyDomainProcessor();\n      expect(newVerifyDomainProcessor).to.equal(subjectNewVerifyDomainProcessor);\n    });\n\n    it(\"should emit a VerifyDomainProcessorUpdated event\", async () => {\n      await expect(subject()).to.emit(verifiedDomainRegistry, \"VerifyDomainProcessorUpdated\").withArgs(\n        subjectNewVerifyDomainProcessor\n      );\n    });\n\n    describe(\"when new verify domain processor is zero address\", async () => {\n      beforeEach(async () => {\n        subjectNewVerifyDomainProcessor = ethers.constants.AddressZero;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid address\");\n      });\n    });\n\n    describe(\"when caller is not owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = seller;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  /* =========== Getter functions ============ */\n\n  describe(\"#getDomainOwner\", async () => {\n    let domainId: string;\n    let domainName: string;\n    let expiryTimestamp: string;\n\n    beforeEach(async () => {\n      domainName = 'groth16.xyz';\n      expiryTimestamp = '2025-07-08T18:22:00';\n      domainId = calculateDomainId(domainName);\n\n      await verifiedDomainRegistry.initialize(verifyDomainProcessor.address);\n      await verifiedDomainRegistry.connect(seller.wallet).verifyDomains(generateProofsFromDomains([\n        {\n          name: domainName,\n          expiryTimestamp: expiryTimestamp,\n        }\n      ]));\n    });\n\n    async function subject(): Promise<Address> {\n      return await verifiedDomainRegistry.getDomainOwner(domainId);\n    }\n\n    it(\"should return the owner of the domain\", async () => {\n      const owner = await subject();\n      expect(owner).to.equal(seller.address);\n    });\n  });\n\n  describe(\"#getDomainId\", async () => {\n    let subjectDomainName: string;\n\n    beforeEach(async () => {\n      subjectDomainName = 'example.com';\n    });\n\n    async function subject(): Promise<string> {\n      return await verifiedDomainRegistry.getDomainId(subjectDomainName);\n    }\n\n    it(\"should return the correct domain ID\", async () => {\n      const actualDomainId = await subject();\n      const expectedDomainId = calculateDomainId(subjectDomainName);\n      expect(actualDomainId).to.equal(expectedDomainId);\n    });\n  });\n\n  describe(\"#addExchange\", async () => {\n    let subjectExchange: Address;\n    let subjectCaller: Account;\n\n    let shouldInitialize: boolean = true;\n\n    beforeEach(async () => {\n      if (shouldInitialize) {\n        await verifiedDomainRegistry.initialize(verifyDomainProcessor.address);\n      }\n\n      subjectExchange = exchange.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return verifiedDomainRegistry.connect(subjectCaller.wallet).addExchange(subjectExchange);\n    }\n\n    it(\"should update the exchanges array and mapping correctly\", async () => {\n      await subject();\n\n      const actualIsExchange = await verifiedDomainRegistry.isExchange(exchange.address);\n      const actualExchanges = await verifiedDomainRegistry.getExchanges();\n\n      expect(actualIsExchange).to.be.true;\n      expect(actualExchanges).to.deep.equal([exchange.address]);\n    });\n\n    it(\"should emit the correct ExchangeAdded event\", async () => {\n      await expect(subject()).to.emit(verifiedDomainRegistry, \"ExchangeAdded\").withArgs(exchange.address);\n    });\n\n    describe(\"when the exchange is already added\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectExchange = exchange.address;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Duplicate exchange\");\n      });\n    });\n\n    describe(\"when the contract has not been initialized\", async () => {\n      before(async () => {\n        shouldInitialize = false;\n      });\n\n      after(async () => {\n        shouldInitialize = true;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = seller;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#removeExchange\", async () => {\n    let subjectExchange: Address;\n    let subjectCaller: Account;\n\n    let shouldInitialize: boolean = true;\n\n    beforeEach(async () => {\n      if (shouldInitialize) {\n        await verifiedDomainRegistry.initialize(verifyDomainProcessor.address);\n        await verifiedDomainRegistry.connect(owner.wallet).addExchange(exchange.address);\n      }\n\n      subjectExchange = exchange.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return verifiedDomainRegistry.connect(subjectCaller.wallet).removeExchange(subjectExchange);\n    }\n\n    it(\"should update the exchanges array and mapping correctly\", async () => {\n      await subject();\n\n      const actualIsExchange = await verifiedDomainRegistry.isExchange(exchange.address);\n      const actualExchanges = await verifiedDomainRegistry.getExchanges();\n\n      expect(actualIsExchange).to.be.false;\n      expect(actualExchanges).to.deep.equal([]);\n    });\n\n    it(\"should emit the correct ExchangeRemoved event\", async () => {\n      await expect(subject()).to.emit(verifiedDomainRegistry, \"ExchangeRemoved\").withArgs(exchange.address);\n    });\n\n    describe(\"when the exchange is not already added\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectExchange = exchange.address;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Exchange does not exist\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = seller;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n\n    describe(\"when the contract has not been initialized\", async () => {\n      before(async () => {\n        shouldInitialize = false;\n      });\n\n      after(async () => {\n        shouldInitialize = true;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Contract must be initialized\");\n      });\n    });\n  });\n});"
  },
  {
    "path": "contracts-domain/test/verifyDomainProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\nimport { Account } from \"@utils/test/types\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\n\nimport DeployHelper from \"@utils/deploys\";\nimport { ReclaimProof } from \"@utils/types\";\nimport { createSignDataForClaim, getIdentifierFromClaimInfo } from \"@utils/reclaimUtils\";\nimport { IVerifyDomainProcessor, NullifierRegistry, VerifyDomainProcessor } from \"@utils/contracts\";\nimport { ZERO_BYTES32 } from \"@utils/constants\";\nimport { convertToUnixTimestamp } from \"@utils/protocolUtils\";\n\nconst expect = getWaffleExpect();\n\nconst abiCoder = new ethers.utils.AbiCoder();\n\n// Proof for groth16.xyz\nconst GROTH16_XYZ_PROOF = {\n  provider: \"http\",\n  parameters: \"{\\\"body\\\":\\\"{\\\\\\\"gridPageRequestViewModel\\\\\\\":{PageSize: 2000,Page: 1}}\\\",\\\"headers\\\":{\\\"User-Agent\\\":\\\"reclaim/0.0.1\\\",\\\"X-Ncpl-Rcsrf\\\":\\\"1a57e31ce38d4e0fac382664ba4f22f7\\\"},\\\"method\\\":\\\"POST\\\",\\\"responseMatches\\\":[{\\\"type\\\":\\\"regex\\\",\\\"value\\\":\\\"\\\\\\\"DomainName\\\\\\\":\\\\\\\"(?<domainName>[^\\\\\\\"]+)\\\\\\\"\\\"},{\\\"type\\\":\\\"regex\\\",\\\"value\\\":\\\"\\\\\\\"ExpireDateTime\\\\\\\":\\\\\\\"(?<expireDateTime>[^\\\\\\\"]+)\\\\\\\"\\\"}],\\\"responseRedactions\\\":[{\\\"jsonPath\\\":\\\"$.Data[5].DomainName\\\",\\\"xPath\\\":\\\"\\\"},{\\\"jsonPath\\\":\\\"$.Data[5].ExpireDateTime\\\",\\\"xPath\\\":\\\"\\\"}],\\\"url\\\":\\\"https://ap.www.namecheap.com/api/v1/ncpl/gatewaydomainlist/getdomainsonly\\\"}\",\n  owner: \"0xf9f25d1b846625674901ace47d6313d1ac795265\",\n  timestampS: 1722414784,\n  context: \"{\\\"extractedParameters\\\":{\\\"domainName\\\":\\\"groth16.xyz\\\",\\\"expireDateTime\\\":\\\"2025-07-08T18:22:42.0000000\\\"},\\\"providerHash\\\":\\\"0x4a266fd63f550db6b79172325f33419df6d5d87bf924b175d8b1817f010a21cf\\\"}\",\n  identifier: \"0x84e953b8936bfa684065e4c3086d77557ff67923ee2373bff8e56244c47a6f77\",\n  epoch: 1,\n  signature: { \"0\": 105, \"1\": 246, \"2\": 126, \"3\": 210, \"4\": 179, \"5\": 196, \"6\": 251, \"7\": 37, \"8\": 226, \"9\": 2, \"10\": 106, \"11\": 131, \"12\": 60, \"13\": 150, \"14\": 163, \"15\": 252, \"16\": 114, \"17\": 16, \"18\": 41, \"19\": 46, \"20\": 138, \"21\": 218, \"22\": 12, \"23\": 64, \"24\": 7, \"25\": 175, \"26\": 198, \"27\": 215, \"28\": 192, \"29\": 78, \"30\": 238, \"31\": 89, \"32\": 6, \"33\": 190, \"34\": 36, \"35\": 86, \"36\": 164, \"37\": 137, \"38\": 213, \"39\": 132, \"40\": 137, \"41\": 82, \"42\": 47, \"43\": 178, \"44\": 62, \"45\": 248, \"46\": 25, \"47\": 192, \"48\": 179, \"49\": 248, \"50\": 149, \"51\": 134, \"52\": 189, \"53\": 29, \"54\": 254, \"55\": 40, \"56\": 146, \"57\": 254, \"58\": 144, \"59\": 35, \"60\": 81, \"61\": 10, \"62\": 53, \"63\": 187, \"64\": 28 }\n}\n\n// Proof for 0xsachink.xyz\nconst SACHINK_XYZ_PROOF = {\n  provider: \"http\",\n  parameters: \"{\\\"body\\\":\\\"{\\\\\\\"gridPageRequestViewModel\\\\\\\":{PageSize: 2000,Page: 1}}\\\",\\\"headers\\\":{\\\"User-Agent\\\":\\\"reclaim/0.0.1\\\",\\\"X-Ncpl-Rcsrf\\\":\\\"1a57e31ce38d4e0fac382664ba4f22f7\\\"},\\\"method\\\":\\\"POST\\\",\\\"responseMatches\\\":[{\\\"type\\\":\\\"regex\\\",\\\"value\\\":\\\"\\\\\\\"DomainName\\\\\\\":\\\\\\\"(?<domainName>[^\\\\\\\"]+)\\\\\\\"\\\"},{\\\"type\\\":\\\"regex\\\",\\\"value\\\":\\\"\\\\\\\"ExpireDateTime\\\\\\\":\\\\\\\"(?<expireDateTime>[^\\\\\\\"]+)\\\\\\\"\\\"}],\\\"responseRedactions\\\":[{\\\"jsonPath\\\":\\\"$.Data[0].DomainName\\\",\\\"xPath\\\":\\\"\\\"},{\\\"jsonPath\\\":\\\"$.Data[0].ExpireDateTime\\\",\\\"xPath\\\":\\\"\\\"}],\\\"url\\\":\\\"https://ap.www.namecheap.com/api/v1/ncpl/gatewaydomainlist/getdomainsonly\\\"}\",\n  owner: \"0xf9f25d1b846625674901ace47d6313d1ac795265\",\n  timestampS: 1722414783,\n  context: \"{\\\"extractedParameters\\\":{\\\"domainName\\\":\\\"0xsachink.xyz\\\",\\\"expireDateTime\\\":\\\"2025-07-08T07:01:53.0000000\\\"},\\\"providerHash\\\":\\\"0xfd4622039be3e4286dd3285d36d772a71d580a9afa0a1718a7e643539c952cf9\\\"}\",\n  identifier: \"0x78249baa65445ef6b8c184afb8b065669b4a9207d6c5990cae337490491e3e3f\",\n  epoch: 1,\n  signature: { \"0\": 169, \"1\": 191, \"2\": 32, \"3\": 3, \"4\": 165, \"5\": 249, \"6\": 59, \"7\": 183, \"8\": 234, \"9\": 61, \"10\": 17, \"11\": 9, \"12\": 79, \"13\": 166, \"14\": 219, \"15\": 58, \"16\": 202, \"17\": 166, \"18\": 83, \"19\": 45, \"20\": 53, \"21\": 108, \"22\": 28, \"23\": 132, \"24\": 53, \"25\": 236, \"26\": 170, \"27\": 9, \"28\": 123, \"29\": 26, \"30\": 44, \"31\": 228, \"32\": 120, \"33\": 253, \"34\": 7, \"35\": 86, \"36\": 83, \"37\": 56, \"38\": 90, \"39\": 213, \"40\": 75, \"41\": 55, \"42\": 126, \"43\": 239, \"44\": 129, \"45\": 6, \"46\": 252, \"47\": 251, \"48\": 180, \"49\": 91, \"50\": 154, \"51\": 152, \"52\": 77, \"53\": 154, \"54\": 139, \"55\": 144, \"56\": 20, \"57\": 63, \"58\": 17, \"59\": 56, \"60\": 220, \"61\": 201, \"62\": 142, \"63\": 194, \"64\": 27 }\n}\n\ndescribe(\"VerifyDomainProcessor\", () => {\n  let owner: Account;\n  let witness: Account;\n  let registry: Account;\n  let providerHash: string;\n\n  let deployer: DeployHelper;\n\n  let verifyDomainProcessor: VerifyDomainProcessor;\n  let nullifierRegistry: NullifierRegistry;\n\n  beforeEach(async () => {\n    [\n      witness,    // hardhat 0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266\n      owner,\n      registry\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n    providerHash = '0x4a266fd63f550db6b79172325f33419df6d5d87bf924b175d8b1817f010a21cf';\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    const claimVerifier = await deployer.deployClaimVerifier();\n    verifyDomainProcessor = await deployer.deployVerifyDomainProcessor(\n      registry.address,\n      nullifierRegistry.address,\n      [providerHash],\n      \"contracts/external/ClaimVerifier.sol:ClaimVerifier\",\n      claimVerifier.address\n    );\n\n    await verifyDomainProcessor.transferOwnership(owner.address);\n    await verifyDomainProcessor.addWitness(witness.address);\n    await nullifierRegistry.addWritePermission(verifyDomainProcessor.address);\n  });\n\n  function convertSignatureToHex(signature: { [key: string]: number }): string {\n    const byteArray = Object.values(signature);\n    return '0x' + Buffer.from(byteArray).toString('hex');\n  }\n\n  describe(\"#verifyProofs\", async () => {\n    let subjectProof: ReclaimProof[];\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = [\n        {\n          claimInfo: {\n            provider: GROTH16_XYZ_PROOF.provider,\n            parameters: GROTH16_XYZ_PROOF.parameters,\n            context: GROTH16_XYZ_PROOF.context\n          },\n          signedClaim: {\n            claim: {\n              identifier: GROTH16_XYZ_PROOF.identifier,\n              owner: GROTH16_XYZ_PROOF.owner,\n              timestampS: BigNumber.from(GROTH16_XYZ_PROOF.timestampS),\n              epoch: BigNumber.from(GROTH16_XYZ_PROOF.epoch)\n            },\n            signatures: [convertSignatureToHex(GROTH16_XYZ_PROOF.signature)]\n          }\n        }\n      ];\n      subjectCaller = registry;\n    });\n\n    async function subject(): Promise<any> {\n      return await verifyDomainProcessor.connect(subjectCaller.wallet).verifyProofs(subjectProof);\n    };\n\n    async function subjectCall(): Promise<IVerifyDomainProcessor.DomainRawStructOutput[]> {\n      return await verifyDomainProcessor.connect(subjectCaller.wallet).callStatic.verifyProofs(subjectProof);\n    };\n\n    it(\"should properly nullify the proof\", async () => {\n      await subject();\n\n      const nullifier = ethers.utils.keccak256(abiCoder.encode([\"bytes[]\"], [subjectProof[0].signedClaim.signatures]));\n      const isNullified = await nullifierRegistry.isNullified(nullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    it(\"should return correct domain value\", async () => {\n      const domains = await subjectCall();\n\n      expect(domains[0].name).to.equal('groth16.xyz');\n\n      const expectedExpiryTimestamp = convertToUnixTimestamp(\"2025-07-08T18:22:00.0000000\");    // seconds zeroed out \n      expect(domains[0].expiryTime).to.equal(expectedExpiryTimestamp);\n    });\n\n    describe(\"when multiple domains are correctly verified\", async () => {\n      beforeEach(async () => {\n        await verifyDomainProcessor.addProviderHash(\"0xfd4622039be3e4286dd3285d36d772a71d580a9afa0a1718a7e643539c952cf9\");\n\n        subjectProof.push(\n          {\n            claimInfo: {\n              provider: SACHINK_XYZ_PROOF.provider,\n              parameters: SACHINK_XYZ_PROOF.parameters,\n              context: SACHINK_XYZ_PROOF.context\n            },\n            signedClaim: {\n              claim: {\n                identifier: SACHINK_XYZ_PROOF.identifier,\n                owner: SACHINK_XYZ_PROOF.owner,\n                timestampS: BigNumber.from(SACHINK_XYZ_PROOF.timestampS),\n                epoch: BigNumber.from(SACHINK_XYZ_PROOF.epoch)\n              },\n              signatures: [convertSignatureToHex(SACHINK_XYZ_PROOF.signature)]\n            }\n          }\n        );\n      });\n\n      it(\"should return the correct info\", async () => {\n        const domains = await subjectCall();\n\n        const expectedExpiryTimestamp = convertToUnixTimestamp(\"2025-07-08T07:01:00.0000000\");    // seconds zeroed out\n\n        expect(domains[1].name).to.equal('0xsachink.xyz');\n        expect(domains[1].expiryTime).to.equal(expectedExpiryTimestamp);\n      });\n    });\n\n    describe(\"when the proof has already been verified\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the provider hash is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof[0].claimInfo.context = '{\"extractedParameters\":{\"domainName\":\"groth16.xyz\",\"expireDateTime\":\"2025-07-08T18:22:42.0000000\",\"isOwner\":\"true\",\"statusTypeString\":\"Active\"},\"providerHash\":\"0x6978e71086556e704f997883fb1b64ea5e72328a74de837e4d1c7e2261c62e6j\"}';   // replace last e with j \n        subjectProof[0].signedClaim.claim.identifier = getIdentifierFromClaimInfo(subjectProof[0].claimInfo);\n\n        const digest = createSignDataForClaim(subjectProof[0].signedClaim.claim);\n        subjectProof[0].signedClaim.signatures = [await witness.wallet.signMessage(digest)];\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"No valid providerHash\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof[0].signedClaim.claim.identifier = ZERO_BYTES32;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.reverted;\n      });\n    });\n\n    describe(\"when the caller is not the registry\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only registry can call\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-domain/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es2020\",\n    \"module\": \"commonjs\",\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"resolveJsonModule\": true,\n    \"outDir\": \"dist\",\n    \"declaration\": true,\n    \"declarationDir\": \"./dist/types\",\n    \"declarationMap\": true,\n    \"sourceMap\": true,\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@utils/*\": [\"utils/*\"],\n      \"@typechain/*\": [\"typechain/*\"]\n    }\n  },\n  \"include\": [\n    \"index.ts\",\n    \"./test/**/*.ts\",\n    \"./utils/**/*.ts\",\n    \"./typechain/**/*.ts\",\n  ],\n  \"files\": [\n    \"hardhat.config.ts\",\n  ]\n}\n"
  },
  {
    "path": "contracts-domain/utils/common/blockchainUtils.ts",
    "content": "import { ZERO } from \"@utils/constants\";\nimport { BigNumber, providers } from \"ethers\";\n\nexport class Blockchain {\n  public _provider: providers.Web3Provider | providers.JsonRpcProvider;\n  private _snapshotId: number;\n\n  constructor(_provider: providers.Web3Provider | providers.JsonRpcProvider) {\n    this._provider = _provider;\n\n    this._snapshotId = 0;\n  }\n\n  public async saveSnapshotAsync(): Promise<string> {\n    const response = await this.sendJSONRpcRequestAsync(\"evm_snapshot\", []);\n\n    this._snapshotId = response;\n    return response;\n  }\n\n  public async revertAsync(): Promise<void> {\n    await this.sendJSONRpcRequestAsync(\"evm_revert\", [this._snapshotId]);\n  }\n\n  public async revertByIdAsync(id: string): Promise<void> {\n    await this.sendJSONRpcRequestAsync(\"evm_revert\", [id]);\n  }\n\n  public async resetAsync(): Promise<void> {\n    await this.sendJSONRpcRequestAsync(\"evm_revert\", [\"0x1\"]);\n  }\n\n  public async getChainId(): Promise<number> {\n    return (await this._provider.getNetwork()).chainId;\n  }\n\n  public async increaseTimeAsync(duration: number): Promise<any> {\n    await this.sendJSONRpcRequestAsync(\"evm_increaseTime\", [duration]);\n    await this.sendJSONRpcRequestAsync(\"evm_mine\", []);\n  }\n\n  public async getCurrentTimestamp(): Promise<BigNumber> {\n    const block = await this._provider.getBlock(await this._provider.getBlockNumber());\n    return block ? BigNumber.from(block.timestamp) : ZERO;\n  }\n\n  public async setNextBlockTimestamp(timestamp: number): Promise<any> {\n    await this.sendJSONRpcRequestAsync(\"evm_setNextBlockTimestamp\", [timestamp]);\n  }\n\n  public async waitBlocksAsync(count: number) {\n    for (let i = 0; i < count; i++) {\n      await this.sendJSONRpcRequestAsync(\"evm_mine\", []);\n    }\n  }\n\n  public async getLatestBlockNumber(): Promise<BigNumber> {\n    const block = await this._provider.getBlock(\"latest\");\n    return block ? BigNumber.from(block.number) : ZERO;\n  }\n\n  private async sendJSONRpcRequestAsync(method: string, params: any[]): Promise<any> {\n    return this._provider.send(method, params);\n  }\n}\n"
  },
  {
    "path": "contracts-domain/utils/common/index.ts",
    "content": "export { Blockchain } from \"./blockchainUtils\";\nexport * from \"./units\";\n"
  },
  {
    "path": "contracts-domain/utils/common/units.ts",
    "content": "import { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nexport const ether = (amount: number | string): BigNumber => {\n  const weiString = ethers.utils.parseEther(amount.toString());\n  return BigNumber.from(weiString);\n};\n\nexport const usdc = (amount: number): BigNumber => {\n  const weiString = 1000000 * amount;\n  return BigNumber.from(weiString);\n};\n"
  },
  {
    "path": "contracts-domain/utils/constants.ts",
    "content": "import { BigNumber, constants } from \"ethers\";\n\nexport const ADDRESS_ZERO = constants.AddressZero;\nexport const ZERO = constants.Zero;\nexport const ONE = constants.One;\nexport const ONE_DAY_IN_SECONDS = BigNumber.from(86400);\nexport const THREE_MINUTES_IN_SECONDS = BigNumber.from(180);\nexport const ZERO_BYTES32 = constants.HashZero;\nexport const MAX_UINT_256 = BigNumber.from(2).pow(BigNumber.from(256)).sub(1);\nexport const PRECISE_UNIT = BigNumber.from(10).pow(18);"
  },
  {
    "path": "contracts-domain/utils/contracts.ts",
    "content": "export {\n  DomainExchange,\n  NullifierRegistry,\n  TransferDomainProcessorMock,\n  USDCMock,\n  VerifyDomainProcessorMock,\n  VerifyDomainProcessor,\n  TransferDomainProcessor,\n  ClaimVerifier,\n  IVerifyDomainProcessor,\n  ITransferDomainProcessor,\n  ManagedKeyHashAdapterV2,\n  VerifiedDomainRegistry,\n  DomainExchangeMock\n} from \"../typechain\";\n\nexport {\n  IProxyBaseProcessor\n} from \"../typechain/contracts/interfaces/IVerifyDomainProcessor\""
  },
  {
    "path": "contracts-domain/utils/deploys.ts",
    "content": "import { BigNumber, Signer, ethers } from \"ethers\";\n\nimport { Address } from \"@utils/types\";\n\nimport {\n  ClaimVerifier,\n  NullifierRegistry,\n  DomainExchange,\n  TransferDomainProcessor,\n  TransferDomainProcessorMock,\n  USDCMock,\n  VerifyDomainProcessorMock,\n  VerifyDomainProcessor,\n  VerifiedDomainRegistry,\n  DomainExchangeMock,\n  ManagedKeyHashAdapterV2\n} from \"./contracts\";\n\nimport {\n  DomainExchange__factory,\n  VerifyDomainProcessor__factory,\n  TransferDomainProcessor__factory,\n  VerifiedDomainRegistry__factory\n} from \"../typechain/factories/contracts/\";\nimport {\n  TransferDomainProcessorMock__factory,\n  USDCMock__factory,\n  VerifyDomainProcessorMock__factory,\n  DomainExchangeMock__factory\n} from \"../typechain/factories/contracts/mocks\";\nimport {\n  ClaimVerifier__factory,\n} from \"../typechain/factories/contracts/external\";\nimport {\n  NullifierRegistry__factory,\n  ManagedKeyHashAdapterV2__factory\n} from \"../typechain/factories/contracts/external\";\nimport { ONE_DAY_IN_SECONDS } from \"./constants\";\n\nexport default class DeployHelper {\n  private _deployerSigner: Signer;\n\n  constructor(deployerSigner: Signer) {\n    this._deployerSigner = deployerSigner;\n  }\n\n  // System Contracts\n  public async deployDomainExchange(\n    owner: Address,\n    fee: BigNumber,\n    feeRecipient: Address,\n    minBidActivePeriod: BigNumber,\n    bidRefundPeriod: BigNumber,\n    allowedAddresses: Address[]\n  ): Promise<DomainExchange> {\n    return await new DomainExchange__factory(this._deployerSigner).deploy(\n      owner,\n      fee,\n      feeRecipient,\n      minBidActivePeriod,\n      bidRefundPeriod,\n      allowedAddresses\n    );\n  }\n\n  public async deployVerifyDomainProcessor(\n    exchange: Address,\n    nullifierRegistry: Address,\n    providerHashes: string[],\n    claimVerifierLibraryName: string,\n    claimVerifierLibraryAddress: Address\n  ): Promise<VerifyDomainProcessor> {\n    return await new VerifyDomainProcessor__factory(\n      // @ts-ignore\n      {\n        [claimVerifierLibraryName]: claimVerifierLibraryAddress,\n      },\n      this._deployerSigner\n    ).deploy(\n      exchange,\n      nullifierRegistry,\n      providerHashes\n    );\n  }\n\n  public async deployTransferDomainProcessor(\n    exchange: Address,\n    nullifierRegistry: Address,\n    emailFromAddress: string,\n    timestampBuffer: BigNumber = BigNumber.from(30)\n  ): Promise<TransferDomainProcessor> {\n    return await new TransferDomainProcessor__factory(this._deployerSigner).deploy(\n      exchange,\n      nullifierRegistry,\n      emailFromAddress,\n      timestampBuffer\n    );\n  }\n\n  public async deployVerifiedDomainRegistry(): Promise<VerifiedDomainRegistry> {\n    return await new VerifiedDomainRegistry__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployNullifierRegistry(): Promise<NullifierRegistry> {\n    return await new NullifierRegistry__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployManagedKeyHashAdapterV2(keyHashes: string[]): Promise<ManagedKeyHashAdapterV2> {\n    return await new ManagedKeyHashAdapterV2__factory(this._deployerSigner).deploy(keyHashes);\n  }\n\n  // Mocks\n  public async deployUSDCMock(mintAmount: BigNumber, name: string, symbol: string): Promise<USDCMock> {\n    return await new USDCMock__factory(this._deployerSigner).deploy(mintAmount.toString(), name, symbol);\n  }\n\n  public async deployVerifyDomainProcessorMock(): Promise<VerifyDomainProcessorMock> {\n    return await new VerifyDomainProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployTransferDomainProcessorMock(): Promise<TransferDomainProcessorMock> {\n    return await new TransferDomainProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployDomainExchangeMock(verifiedDomainRegistry: Address): Promise<DomainExchangeMock> {\n    return await new DomainExchangeMock__factory(this._deployerSigner).deploy(verifiedDomainRegistry);\n  }\n\n  //Libraries\n  public async deployClaimVerifier(): Promise<ClaimVerifier> {\n    return await new ClaimVerifier__factory(this._deployerSigner).deploy();\n  }\n}\n"
  },
  {
    "path": "contracts-domain/utils/protocolUtils.ts",
    "content": "import { ethers } from \"ethers\";\n\nimport { BigNumber, BytesLike } from \"ethers\";\nimport { Domain, ReclaimProof, ClaimInfo, SignedClaim } from \"./types\";\nimport { ITransferDomainProcessor } from \"./contracts\"\nimport { ZERO_BYTES32, ADDRESS_ZERO, ZERO } from \"./constants\";\n\nexport const createTypedGroth16Proof = (\n  a: string[],\n  b: string[][],\n  c: string[],\n  signals: string[]\n): any => {\n  const a_fixed: [BigNumber, BigNumber] = [BigNumber.from(a[0]), BigNumber.from(a[1])];\n  const b_fixed: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [\n    [BigNumber.from(b[0][0]), BigNumber.from(b[0][1])],\n    [BigNumber.from(b[1][0]), BigNumber.from(b[1][1])]\n  ];\n  const c_fixed: [BigNumber, BigNumber] = [BigNumber.from(c[0]), BigNumber.from(c[1])];\n  const signals_fixed: BigNumber[] = signals.map((signal) => BigNumber.from(signal));;\n\n  return {\n    a: a_fixed,\n    b: b_fixed,\n    c: c_fixed,\n    signals: signals_fixed\n  };\n}\n\nexport function calculateDomainId(domainName: string): string {\n  return ethers.utils.keccak256(ethers.utils.toUtf8Bytes(domainName));\n}\n\nexport function convertToUnixTimestamp(dateString: string): BigNumber {\n  const date = new Date(dateString + 'Z'); // Append 'Z' to treat as UTC\n  return BigNumber.from(Math.floor(date.getTime() / 1000));\n}\n\nexport function convertUnixTimestampToDateString(timestamp: BigNumber): string {\n  const date = new Date(timestamp.toNumber() * 1000);\n  return date.toISOString();\n}\n\nexport const generateProofsFromDomains = (\n  domains: Domain[]\n): ReclaimProof[] => {\n  const proofs: ReclaimProof[] = [];\n  for (const domain of domains) {\n    const claimInfo: ClaimInfo = {\n      provider: \"http\",\n      parameters: \"\",\n      context: \"\",\n    };\n    const signedClaim: SignedClaim = {\n      claim: {\n        identifier: ZERO_BYTES32,\n        owner: ADDRESS_ZERO,\n        timestampS: ethers.constants.Zero,\n        epoch: ethers.constants.Zero,\n      },\n      signatures: [\n        ethers.utils.hexlify(Buffer.from(domain.name)),\n        ethers.utils.hexlify(Buffer.from(domain.expiryTimestamp))\n      ],\n    };\n    proofs.push({ claimInfo, signedClaim } as ReclaimProof);\n  }\n\n  return proofs;\n}\n\n\nexport const generateTransferProof = (\n  dkimKeyHash: BytesLike,\n  hashedBuyerId: BytesLike,\n  bidId: BigNumber\n) => {\n  return {\n    a: [ZERO, ZERO],\n    b: [[ZERO, ZERO], [ZERO, ZERO]],\n    c: [ZERO, ZERO],\n    signals: [\n      dkimKeyHash,     // Modulus\n      BigNumber.from(hashedBuyerId),    // hashedReceiverId\n      ZERO,     // domain Name already set in mock\n      bidId,   // bidId\n      ZERO,\n      ZERO,\n      ZERO,\n      ZERO,\n      ZERO,\n      ZERO\n    ]\n  } as ITransferDomainProcessor.TransferProofStruct;\n}"
  },
  {
    "path": "contracts-domain/utils/reclaimUtils.ts",
    "content": "import { utils } from 'ethers';\nimport canonicalize from 'canonicalize';\n\nimport { ClaimInfo, CompleteClaimData } from './types';\nimport { ethers } from 'hardhat';\n\n/**\n * Creates the standard string to sign for a claim.\n * This data is what the witness will sign when it successfully\n * verifies a claim.\n */\nexport function createSignDataForClaim(data: CompleteClaimData) {\n\tconst identifier = 'identifier' in data\n\t\t? data.identifier\n\t\t: getIdentifierFromClaimInfo(data)\n\tconst lines = [\n\t\tidentifier,\n\t\t// we lowercase the owner to ensure that the\n\t\t// ETH addresses always serialize the same way\n\t\tdata.owner.toLowerCase(),\n\t\tdata.timestampS.toString(),\n\t\tdata.epoch.toString(),\n\t]\n\n\treturn lines.join('\\n')\n}\n\n/**\n * Generates a unique identifier for given claim info\n * @param info\n * @returns\n */\nexport function getIdentifierFromClaimInfo(info: ClaimInfo): string {\n\t//re-canonicalize context if it's not empty\n\tif(info.context?.length > 0) {\n\t\ttry {\n\t\t\tconst ctx = JSON.parse(info.context)\n\t\t\tinfo.context = canonicalize(ctx)!\n\t\t} catch(e) {\n\t\t\tthrow new Error('unable to parse non-empty context. Must be JSON')\n\t\t}\n\t}\n\n\tconst str = `${info.provider}\\n${info.parameters}\\n${info.context || ''}`\n\n\treturn utils.keccak256(\n\t\tnew TextEncoder().encode(str)\n\t).toLowerCase()\n}\n"
  },
  {
    "path": "contracts-domain/utils/test/accountUtils.ts",
    "content": "import { ethers } from \"hardhat\";\nimport { Account } from \"./types\";\nimport { SignerWithAddress } from \"@nomiclabs/hardhat-ethers/dist/src/signer-with-address\";\n\nconst provider = ethers.provider;\n\n// NOTE ethers.signers may be a hardhat specific function\nexport const getWallets = async (): Promise<SignerWithAddress[]> => {\n  return (await ethers.getSigners() as SignerWithAddress[]);\n};\n\n\nexport const getAccounts = async (): Promise<Account[]> => {\n  const accounts: Account[] = [];\n\n  const wallets = await getWallets();\n  for (let i = 0; i < wallets.length; i++) {\n    accounts.push({\n      wallet: wallets[i],\n      address: await wallets[i].getAddress(),\n    });\n  }\n\n  return accounts;\n};\n"
  },
  {
    "path": "contracts-domain/utils/test/index.ts",
    "content": "export {\n  addSnapshotBeforeRestoreAfterEach,\n  getWaffleExpect,\n} from \"./testingUtils\"\n\nexport {\n  getAccounts\n} from \"./accountUtils\"\n"
  },
  {
    "path": "contracts-domain/utils/test/testingUtils.ts",
    "content": "\nimport chai from \"chai\";\nimport { solidity } from \"ethereum-waffle\";\nimport { Blockchain } from \"../common\";\nimport { ethers } from \"hardhat\";\n\nchai.use(solidity);\n\nconst provider = ethers.provider;\n\n// HARDHAT / WAFFLE\nexport const getWaffleExpect = (): Chai.ExpectStatic => {\n  return chai.expect;\n};\n\nexport const addSnapshotBeforeRestoreAfterEach = () => {\n  const blockchain = new Blockchain(provider);\n  beforeEach(async () => {\n    await blockchain.saveSnapshotAsync();\n  });\n\n  afterEach(async () => {\n    await blockchain.revertAsync();\n  });\n};\n"
  },
  {
    "path": "contracts-domain/utils/test/types.ts",
    "content": "import { SignerWithAddress } from \"@nomiclabs/hardhat-ethers/dist/src/signer-with-address\";\nimport { Address } from \"../types\";\n\nexport type Account = {\n  address: Address;\n  wallet: SignerWithAddress;\n};\n"
  },
  {
    "path": "contracts-domain/utils/types.ts",
    "content": "import { BigNumber } from \"ethers\";\n\nexport type Address = string;\n\ninterface OnchainStruct {\n  [key: string]: string;\n}\n\nexport type Groth16Proof = {\n  a: [BigNumber, BigNumber],\n  b: [[BigNumber, BigNumber], [BigNumber, BigNumber]],\n  c: [BigNumber, BigNumber],\n  signals: BigNumber[]\n}\n\nexport interface ReclaimProof {\n  claimInfo: ClaimInfo;\n  signedClaim: SignedClaim;\n}\n\nexport interface ClaimInfo {\n  provider: string;\n  parameters: string;\n  context: string;\n}\n\nexport interface CompleteClaimData {\n  identifier: string;\n  owner: Address;\n  timestampS: BigNumber;\n  epoch: BigNumber;\n}\n\nexport interface SignedClaim {\n  claim: CompleteClaimData;\n  signatures: string[];\n}\n\nexport interface Domain {\n  name: string;\n  expiryTimestamp: string;\n}"
  },
  {
    "path": "contracts-ramp/.gitignore",
    "content": "node_modules\n.env\ncoverage\ncoverage.json\ntypechain\ntypechain-types\ndist\n/deployments/localhost\n\n# Hardhat files\ncache\nartifacts\n\nyarn-error.log\n\n"
  },
  {
    "path": "contracts-ramp/.solcover.js",
    "content": "module.exports = {\n    skipFiles: ['interfaces', 'mocks', 'external', 'verifiers']\n  };\n"
  },
  {
    "path": "contracts-ramp/.yarnrc.yml",
    "content": "nodeLinker: node-modules\n"
  },
  {
    "path": "contracts-ramp/README.md",
    "content": "# ZKP2P Contracts\n\n### Local Node Configuration Steps:\n- Run `yarn install` from the `contracts/` directory\n- Run `npx hardhat node`\n- Configure browser wallet with local hardhat network\n    - Add correct settings, see [guide](https://medium.com/@kaishinaw/connecting-metamask-with-a-local-hardhat-network-7d8cea604dc6)\n    - Import account private key for Account #0. This is the deployer by default\n- Run `yarn deploy:localhost`\n- Update client/src/helpers/deployed_addresses.ts with newly deployed `Ramp` and `USDCMock` addresses under `development`\n"
  },
  {
    "path": "contracts-ramp/contracts/external/AddressArrayUtils.sol",
    "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: MIT\n*/\n\npragma solidity ^0.8.17;\n\n/**\n * @title AddressArrayUtils\n * @author Set Protocol\n *\n * Utility functions to handle Address Arrays\n *\n * CHANGELOG:\n * - 4/21/21: Added validatePairsWithArray methods\n */\nlibrary AddressArrayUtils {\n\n    uint256 constant internal MAX_INT = 2**256 - 1;\n\n    /**\n     * Finds the index of the first occurrence of the given element.\n     * @param A The input array to search\n     * @param a The value to find\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\n     */\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\n        uint256 length = A.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (A[i] == a) {\n                return (i, true);\n            }\n        }\n        return (MAX_INT, false);\n    }\n\n    /**\n    * Returns true if the value is present in the list. Uses indexOf internally.\n    * @param A The input array to search\n    * @param a The value to find\n    * @return Returns isIn for the first occurrence starting from index 0\n    */\n    function contains(address[] memory A, address a) internal pure returns (bool) {\n        (, bool isIn) = indexOf(A, a);\n        return isIn;\n    }\n\n    /**\n    * Returns true if there are 2 elements that are the same in an array\n    * @param A The input array to search\n    * @return Returns boolean for the first occurrence of a duplicate\n    */\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\n        require(A.length > 0, \"A is empty\");\n\n        for (uint256 i = 0; i < A.length - 1; i++) {\n            address current = A[i];\n            for (uint256 j = i + 1; j < A.length; j++) {\n                if (current == A[j]) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The address to remove\n     * @return Returns the array with the object removed.\n     */\n    function remove(address[] memory A, address a)\n        internal\n        pure\n        returns (address[] memory)\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"Address not in array.\");\n        } else {\n            (address[] memory _A,) = pop(A, index);\n            return _A;\n        }\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The address to remove\n     */\n    function removeStorage(address[] storage A, address a)\n        internal\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"Address not in array.\");\n        } else {\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\n            A.pop();\n        }\n    }\n\n    /**\n    * Removes specified index from array\n    * @param A The input array to search\n    * @param index The index to remove\n    * @return Returns the new array and the removed entry\n    */\n    function pop(address[] memory A, uint256 index)\n        internal\n        pure\n        returns (address[] memory, address)\n    {\n        uint256 length = A.length;\n        require(index < A.length, \"Index must be < A length\");\n        address[] memory newAddresses = new address[](length - 1);\n        for (uint256 i = 0; i < index; i++) {\n            newAddresses[i] = A[i];\n        }\n        for (uint256 j = index + 1; j < length; j++) {\n            newAddresses[j - 1] = A[j];\n        }\n        return (newAddresses, A[index]);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/external/Bytes32ArrayUtils.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.17;\n\n/**\n * @title Bytes32ArrayUtils\n * @author ZKP2P\n *\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\n */\nlibrary Bytes32ArrayUtils {\n\n    uint256 constant internal MAX_INT = 2**256 - 1;\n\n    /**\n     * Finds the index of the first occurrence of the given element.\n     * @param A The input array to search\n     * @param a The value to find\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\n     */\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\n        uint256 length = A.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (A[i] == a) {\n                return (i, true);\n            }\n        }\n        return (MAX_INT, false);\n    }\n\n    /**\n    * Returns true if the value is present in the list. Uses indexOf internally.\n    * @param A The input array to search\n    * @param a The value to find\n    * @return Returns isIn for the first occurrence starting from index 0\n    */\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\n        (, bool isIn) = indexOf(A, a);\n        return isIn;\n    }\n\n    /**\n    * Returns true if there are 2 elements that are the same in an array\n    * @param A The input array to search\n    * @return Returns boolean for the first occurrence of a duplicate\n    */\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\n        require(A.length > 0, \"A is empty\");\n\n        for (uint256 i = 0; i < A.length - 1; i++) {\n            bytes32 current = A[i];\n            for (uint256 j = i + 1; j < A.length; j++) {\n                if (current == A[j]) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The bytes32 to remove\n     * @return Returns the array with the object removed.\n     */\n    function remove(bytes32[] memory A, bytes32 a)\n        internal\n        pure\n        returns (bytes32[] memory)\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"bytes32 not in array.\");\n        } else {\n            (bytes32[] memory _A,) = pop(A, index);\n            return _A;\n        }\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The bytes32 to remove\n     */\n    function removeStorage(bytes32[] storage A, bytes32 a)\n        internal\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"bytes32 not in array.\");\n        } else {\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\n            A.pop();\n        }\n    }\n\n    /**\n    * Removes specified index from array\n    * @param A The input array to search\n    * @param index The index to remove\n    * @return Returns the new array and the removed entry\n    */\n    function pop(bytes32[] memory A, uint256 index)\n        internal\n        pure\n        returns (bytes32[] memory, bytes32)\n    {\n        uint256 length = A.length;\n        require(index < A.length, \"Index must be < A length\");\n        bytes32[] memory newBytes = new bytes32[](length - 1);\n        for (uint256 i = 0; i < index; i++) {\n            newBytes[i] = A[i];\n        }\n        for (uint256 j = index + 1; j < length; j++) {\n            newBytes[j - 1] = A[j];\n        }\n        return (newBytes, A[index]);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/external/DateTime.sol",
    "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// ----------------------------------------------------------------------------\n// DateTime Library v2.0\n//\n// A gas-efficient Solidity date and time library\n//\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\n//\n// Tested date range 1970/01/01 to 2345/12/31\n//\n// Conventions:\n// Unit      | Range         | Notes\n// :-------- |:-------------:|:-----\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\n// year      | 1970 ... 2345 |\n// month     | 1 ... 12      |\n// day       | 1 ... 31      |\n// hour      | 0 ... 23      |\n// minute    | 0 ... 59      |\n// second    | 0 ... 59      |\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\n//\n//\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\n//\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\n// ----------------------------------------------------------------------------\n\nlibrary DateTime {\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\n    uint256 constant SECONDS_PER_MINUTE = 60;\n    int256 constant OFFSET19700101 = 2440588;\n\n    uint256 constant DOW_MON = 1;\n    uint256 constant DOW_TUE = 2;\n    uint256 constant DOW_WED = 3;\n    uint256 constant DOW_THU = 4;\n    uint256 constant DOW_FRI = 5;\n    uint256 constant DOW_SAT = 6;\n    uint256 constant DOW_SUN = 7;\n\n    // ------------------------------------------------------------------------\n    // Calculate the number of days from 1970/01/01 to year/month/day using\n    // the date conversion algorithm from\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\n    //\n    // days = day\n    //      - 32075\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\n    //      - offset\n    // ------------------------------------------------------------------------\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\n        require(year >= 1970);\n        int256 _year = int256(year);\n        int256 _month = int256(month);\n        int256 _day = int256(day);\n\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\n\n        _days = uint256(__days);\n    }\n\n    function timestampFromDateTime(\n        uint256 year,\n        uint256 month,\n        uint256 day,\n        uint256 hour,\n        uint256 minute,\n        uint256 second\n    )\n        internal\n        pure\n        returns (uint256 timestamp)\n    {\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\n            + minute * SECONDS_PER_MINUTE + second;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/external/Uint256ArrayUtils.sol",
    "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache-2.0\n*/\n\npragma solidity ^0.8.18;\n\n/**\n * @title Uint256ArrayUtils\n * @author Set Protocol\n *\n * Utility functions to handle Uint256 Arrays\n */\nlibrary Uint256ArrayUtils {\n\n    uint256 constant internal MAX_INT = 2**256 - 1;\n\n    /**\n     * Finds the index of the first occurrence of the given element.\n     * @param A The input array to search\n     * @param a The value to find\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\n     */\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\n        uint256 length = A.length;\n        for (uint256 i = 0; i < length; i++) {\n            if (A[i] == a) {\n                return (i, true);\n            }\n        }\n        return (MAX_INT, false);\n    }\n\n    /**\n     * Returns the combination of the two arrays\n     * @param A The first array\n     * @param B The second array\n     * @return Returns A extended by B\n     */\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\n        uint256 aLength = A.length;\n        uint256 bLength = B.length;\n        uint256[] memory newUints = new uint256[](aLength + bLength);\n        for (uint256 i = 0; i < aLength; i++) {\n            newUints[i] = A[i];\n        }\n        for (uint256 j = 0; j < bLength; j++) {\n            newUints[aLength + j] = B[j];\n        }\n        return newUints;\n    }\n\n    /**\n     * @param A The input array to search\n     * @param a The bytes32 to remove\n     */\n    function removeStorage(uint256[] storage A, uint256 a)\n        internal\n    {\n        (uint256 index, bool isIn) = indexOf(A, a);\n        if (!isIn) {\n            revert(\"uint256 not in array.\");\n        } else {\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\n            A.pop();\n        }\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/interfaces/IPoseidon.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IPoseidon {\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/interfaces/IPoseidon3.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IPoseidon3 {\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/interfaces/IPoseidon6.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IPoseidon6 {\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/lib/StringConversionUtils.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\n// converting from string to Uint\nlibrary StringConversionUtils {\n    \n    /**\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\n     * the returned number has multiple floating points then the function will revert.\n     *\n     * Examples: _s = \"12.34\", _expectedDecimals = 6 => 12340000\n     *           _s = \"12.34\", _expectedDecimals = 2 => 1234\n     *           _s = \"12.34\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\n     *           _s = \"12.34.56\", _expectedDecimals = 6 => REVERT (Invalid number)\n     *\n     * @param _s                    String being processed\n     * @param _desiredDecimals      Desired amount of decimal places\n     */\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\n        return stringToUint(_s, 0x2E, _desiredDecimals);\n    }\n\n    function stringToUint(\n        string memory _s,\n        bytes1 _decimalCharacter,\n        uint256 _desiredDecimals\n    )\n        internal\n        pure\n        returns (uint256)\n    {\n        bytes memory b = bytes(_s);\n\n        uint256 result = 0;\n        uint256 decimalPlaces = 0;\n\n        bool decimals = false;\n        for (uint256 i = 0; i < b.length; i++) {\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\n            }\n\n            if (decimals) {\n                decimalPlaces++;\n            }\n\n            if (b[i] == _decimalCharacter) {\n                require(decimals == false, \"String has multiple decimals\");\n                decimals = true;\n            }\n        }\n\n        require(decimalPlaces <= _desiredDecimals, \"String has too many decimal places\");\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\n    }\n\n    /**\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\n     *\n     * @param _str           String being processed\n     * @param _startIndex    Index to start parsing from\n     * @param _endIndex      Index to stop parsing at (index not included in result)\n     */\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\n        bytes memory strBytes = bytes(_str);\n        bytes memory result = new bytes(_endIndex-_startIndex);\n        for(uint i = _startIndex; i < _endIndex; i++) {\n            result[i-_startIndex] = strBytes[i];\n        }\n        return string(result);\n    }\n\n    function replaceString(\n        string memory _str,\n        string memory _lookupValue,\n        string memory _replaceValue\n    )\n        internal\n        pure\n        returns (string memory)\n    {\n        bytes memory strBytes = bytes(_str);\n        bytes memory lookupBytes = bytes(_lookupValue);\n\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\n        if (lookupIndex == type(uint256).max) {\n            return _str;\n        }\n\n        // Split the original string into two parts: before and after the keyword\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\n        \n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\n    }\n\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\n        bytes memory strBytes = bytes(str);\n        bytes memory substrBytes = bytes(substr);\n        \n        if (strBytes.length < substrBytes.length) return type(uint256).max;\n        \n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\n            bool found = true;\n            for (uint j = 0; j < substrBytes.length; j++) {\n                if (strBytes[i + j] != substrBytes[j]) {\n                    found = false;\n                    break;\n                }\n            }\n            if (found) return i;\n        }\n        \n        return type(uint256).max;\n    }\n\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/mocks/StringConversionUtilsMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringConversionUtils } from \"../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract StringConversionUtilsMock {\n\n    using StringConversionUtils for string;\n\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\n        return _s.stringToUint(_desiredDecimals);\n    }\n\n    function stringToUintDefinedCharacter(\n        string memory _s,\n        bytes1 _decimalCharacter,\n        uint256 _desiredDecimals\n    )\n        public\n        pure\n        returns (uint256)\n    {\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/mocks/USDCMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\npragma solidity ^0.8.18;\n\ncontract USDCMock is ERC20 {\n\n    constructor(\n        uint256 _mintAmount,\n        string memory name,\n        string memory symbol\n    )\n        ERC20(name, symbol)\n    {\n        _mint(msg.sender, _mintAmount);\n    }\n\n    function decimals() public pure override returns (uint8) {\n        return 6;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/BaseProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { IKeyHashAdapter } from \"./keyHashAdapters/IKeyHashAdapter.sol\";\nimport { INullifierRegistry } from \"./nullifierRegistries/INullifierRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract BaseProcessor is Ownable {\n\n    /* ============ Modifiers ============ */\n    modifier onlyRamp() {\n        require(msg.sender == ramp, \"Only Ramp can call this function\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    address public immutable ramp;\n    IKeyHashAdapter public mailserverKeyHashAdapter;\n    INullifierRegistry public nullifierRegistry;\n    bytes public emailFromAddress;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapter _mailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress\n    )\n        Ownable()\n    {\n        ramp = _ramp;\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\n        nullifierRegistry = _nullifierRegistry;\n        emailFromAddress = bytes(_emailFromAddress);\n    }\n\n    /* ============ External Functions ============ */\n\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\n    }\n\n    /**\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\n     *\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\n     */\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\n        emailFromAddress = bytes(_emailFromAddress);\n    }\n\n    /* ============ External Getters ============ */\n\n    function getEmailFromAddress() external view returns (bytes memory) {\n        return emailFromAddress;\n    }\n\n    function getMailserverKeyHash() public view returns (bytes32) {\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\n        require(!nullifierRegistry.isNullified(_nullifier), \"Nullifier has already been used\");\n        nullifierRegistry.addNullifier(_nullifier);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/BaseProcessorV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { IKeyHashAdapterV2 } from \"./keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"./nullifierRegistries/INullifierRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract BaseProcessorV2 is Ownable {\n\n    /* ============ Modifiers ============ */\n    modifier onlyRamp() {\n        require(msg.sender == ramp, \"Only Ramp can call this function\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    address public immutable ramp;\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\n    INullifierRegistry public nullifierRegistry;\n    bytes public emailFromAddress;\n    uint256 public timestampBuffer;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Ownable()\n    {\n        ramp = _ramp;\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\n        nullifierRegistry = _nullifierRegistry;\n        emailFromAddress = bytes(_emailFromAddress);\n        timestampBuffer = _timestampBuffer;\n    }\n\n    /* ============ External Functions ============ */\n\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\n    }\n\n    /**\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\n     *\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\n     */\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\n        emailFromAddress = bytes(_emailFromAddress);\n    }\n\n    /**\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\n     * timestamps.\n     *\n     * @param _timestampBuffer    The timestamp buffer for validated emails\n     */\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\n        timestampBuffer = _timestampBuffer;\n    }\n\n    /* ============ External Getters ============ */\n\n    function getEmailFromAddress() external view returns (bytes memory) {\n        return emailFromAddress;\n    }\n\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\n        require(!nullifierRegistry.isNullified(_nullifier), \"Nullifier has already been used\");\n        nullifierRegistry.addNullifier(_nullifier);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/TLSBaseProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { SignatureChecker } from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\n\nimport { INullifierRegistry } from \"./nullifierRegistries/INullifierRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract TLSBaseProcessor is Ownable {\n\n    using SignatureChecker for address;\n    using ECDSA for bytes32;\n\n    /* ============ Modifiers ============ */\n    modifier onlyRamp() {\n        require(msg.sender == ramp, \"Only Ramp can call this function\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    address public immutable ramp;\n    string public endpoint;\n    string public host;\n\n    INullifierRegistry public nullifierRegistry;\n    uint256 public timestampBuffer;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        INullifierRegistry _nullifierRegistry,\n        uint256 _timestampBuffer,\n        string memory _endpoint,\n        string memory _host\n    )\n        Ownable()\n    {\n        ramp = _ramp;\n        endpoint = _endpoint;\n        host = _host;\n\n        nullifierRegistry = _nullifierRegistry;\n        timestampBuffer = _timestampBuffer;\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\n     * timestamps.\n     *\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\n     */\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\n        timestampBuffer = _timestampBuffer;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _validateTLSEndpoint(\n        string memory _expectedEndpoint,\n        string memory _passedEndpoint\n    )\n        internal\n        pure\n    {\n        require(\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\n            \"Endpoint does not match expected\"\n        );\n    }\n\n    function _validateTLSHost(\n        string memory _expectedHost,\n        string memory _passedHost\n    )\n        internal\n        pure\n    {\n        require(\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\n            \"Host does not match expected\"\n        );\n    }\n\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\n        require(!nullifierRegistry.isNullified(_nullifier), \"Nullifier has already been used\");\n        nullifierRegistry.addNullifier(_nullifier);\n    }\n\n    function _isValidSignature(\n        bytes memory _message,\n        bytes memory _signature,\n        address _signer\n    )\n        internal\n        view\n        returns(bool)\n    {\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\n\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/keyHashAdapters/IKeyHashAdapter.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IKeyHashAdapter {\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\n    function mailserverKeyHash() external view returns (bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IKeyHashAdapterV2 {\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { IKeyHashAdapter } from \"./IKeyHashAdapter.sol\";\n\npragma solidity ^0.8.18;\n\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\n    \n    /* ============ State Variables ============ */\n\n    bytes32 public mailserverKeyHash;\n\n    /* ============ Constructor ============ */\n\n    constructor(\n        bytes32 _mailserverKeyHash\n    )\n        Ownable()\n    {\n        mailserverKeyHash = _mailserverKeyHash;\n    }\n\n    /* ============ External Functions ============ */\n\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\n        mailserverKeyHash = _mailserverKeyHash;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { IKeyHashAdapterV2 } from \"./IKeyHashAdapterV2.sol\";\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\n    \n    using Bytes32ArrayUtils for bytes32[];\n\n    /* ============ Events ============ */\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\n\n    /* ============ State Variables ============ */\n\n    mapping(bytes32 => bool) public isMailServerKeyHash;\n    bytes32[] public mailServerKeyHashes;\n\n    /* ============ Constructor ============ */\n\n    constructor(\n        bytes32[] memory _mailServerKeyHashes\n    )\n        Ownable()\n    {\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\n            require(!isMailServerKeyHash[mailserverKeyHash], \"Key hash already added\");\n            \n            isMailServerKeyHash[mailserverKeyHash] = true;\n            mailServerKeyHashes.push(mailserverKeyHash);\n        }\n    }\n\n    /* ============ External Functions ============ */\n\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\n        require(!isMailServerKeyHash[_mailserverKeyHash], \"Key hash already added\");\n\n        isMailServerKeyHash[_mailserverKeyHash] = true;\n        mailServerKeyHashes.push(_mailserverKeyHash);\n\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\n    }\n\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\n        require(isMailServerKeyHash[_mailserverKeyHash], \"Key hash not added\");\n\n        isMailServerKeyHash[_mailserverKeyHash] = false;\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\n\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\n    }\n\n    /* ============ External Getter Functions ============ */\n\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\n        return mailServerKeyHashes;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/nullifierRegistries/INullifierRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface INullifierRegistry {\n    function addNullifier(bytes32 _nullifier) external;\n    function isNullified(bytes32 _nullifier) external view returns(bool);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/processors/nullifierRegistries/NullifierRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { AddressArrayUtils } from \"../../external/AddressArrayUtils.sol\";\nimport { INullifierRegistry } from \"./INullifierRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract NullifierRegistry is Ownable, INullifierRegistry {\n\n    using AddressArrayUtils for address[];\n    \n    /* ============ Events ============ */\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\n    event WriterAdded(address writer);\n    event WriterRemoved(address writer);\n\n    /* ============ Modifiers ============ */\n    modifier onlyWriter() {\n        require(isWriter[msg.sender], \"Only addresses with write permissions can call\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    mapping(bytes32 => bool) public isNullified;\n    mapping(address => bool) public isWriter;\n    address[] public writers;\n\n    /* ============ Constructor ============ */\n    constructor() Ownable() {}\n    \n    /* ============ External Functions ============ */\n\n    /**\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\n     *\n     * @param _nullifier    The nullifier to store\n     */\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\n        require(!isNullified[_nullifier], \"Nullifier already exists\");\n\n        isNullified[_nullifier] = true;\n\n        emit NullifierAdded(_nullifier, msg.sender);\n    }\n\n    /* ============ Admin Functions ============ */\n\n    /**\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\n     *\n     * @param _newWriter    The nullifier to store\n     */\n    function addWritePermission(address _newWriter) external onlyOwner {\n        require(!isWriter[_newWriter], \"Address is already a writer\");\n\n        isWriter[_newWriter] = true;\n        writers.push(_newWriter);\n\n        emit WriterAdded(_newWriter);\n    }\n\n    /**\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\n     *\n     * @param _removedWriter    The nullifier to store\n     */\n    function removeWritePermission(address _removedWriter) external onlyOwner {\n        require(isWriter[_removedWriter], \"Address is not a writer\");\n\n        isWriter[_removedWriter] = false;\n        writers.removeStorage(_removedWriter);\n\n        emit WriterRemoved(_removedWriter);\n    }\n\n    /* ============ External View Functions ============ */\n\n    function getWriters() external view returns(address[] memory) {\n       return writers;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/GarantiRamp.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IPoseidon3 } from \"../../interfaces/IPoseidon3.sol\";\nimport { IPoseidon6 } from \"../../interfaces/IPoseidon6.sol\";\nimport { IGarantiBodySuffixHashVerifier } from \"./interfaces/IGarantiBodySuffixHashVerifier.sol\";\nimport { IGarantiRegistrationProcessor } from \"./interfaces/IGarantiRegistrationProcessor.sol\";\nimport { IGarantiSendProcessor } from \"./interfaces/IGarantiSendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract GarantiRamp is Ownable {\n\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\n    event DepositReceived(\n        uint256 indexed depositId,\n        bytes32 indexed idHash,\n        uint256 amount,\n        uint256 conversionRate\n    );\n    event IntentSignaled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        bytes32 indexed idHash,\n        address to,\n        uint256 amount,\n        uint256 timestamp\n    );\n\n    event IntentPruned(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId\n    );\n    // Do we want to emit the onRamper or the idHash\n    event IntentFulfilled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        address indexed onRamper,\n        address to,\n        uint256 amount,\n        uint256 feeAmount\n    );\n    event DepositWithdrawn(\n        uint256 indexed depositId,\n        address indexed depositor,\n        uint256 amount\n    );\n\n    event DepositClosed(uint256 depositId, address depositor);\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\n    event MinDepositAmountSet(uint256 minDepositAmount);\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\n    event SustainabilityFeeUpdated(uint256 fee);\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\n    event NewSendProcessorSet(address sendProcessor);\n    event NewRegistrationProcessorSet(address registrationProcessor);\n    event NewReceiveProcessorSet(address receiveProcessor);\n\n    /* ============ Structs ============ */\n\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\n    // and is allowed to have at most 5 deposits associated with it.\n    struct AccountInfo {\n        bytes32 idHash;                     // Hash of payment processor id\n        uint256[] deposits;                 // Array of open account deposits\n    }\n\n    struct Deposit {\n        address depositor;\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \"TR## #### #### #### #### #### ##\"\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\n        uint256 depositAmount;              // Amount of USDC deposited\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\n    }\n\n    struct DepositWithAvailableLiquidity {\n        uint256 depositId;                  // ID of the deposit\n        bytes32 depositorIdHash;            // Depositor's idHash \n        Deposit deposit;                    // Deposit struct\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\n    }\n\n    struct Intent {\n        address onRamper;                   // On-ramper's address\n        address to;                         // Address to forward funds to (can be same as onRamper)\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\n    }\n\n    struct IntentWithOnRamperId {\n        bytes32 intentHash;                 // Intent hash\n        Intent intent;                      // Intent struct\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\n    }\n\n    struct DenyList {\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\n    }\n\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\n    struct GlobalAccountInfo {\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\n        DenyList denyList;                  // Deny list of the account\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(accounts[msg.sender].idHash != bytes32(0), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ Constants ============ */\n    uint256 internal constant PRECISE_UNIT = 1e18;\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\n    \n    /* ============ State Variables ============ */\n    IERC20 public immutable usdc;                                   // USDC token contract\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\n\n    bool public isInitialized;                                      // Indicates if contract has been initialized\n\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\n\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\n\n    uint256 public depositCounter;                                  // Counter for depositIds\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner,\n        IERC20 _usdc,\n        uint256 _minDepositAmount,\n        uint256 _maxOnRampAmount,\n        uint256 _intentExpirationPeriod,\n        uint256 _onRampCooldownPeriod,\n        uint256 _sustainabilityFee,\n        address _sustainabilityFeeRecipient\n    )\n        Ownable()\n    {\n        usdc = _usdc;\n        minDepositAmount = _minDepositAmount;\n        maxOnRampAmount = _maxOnRampAmount;\n        intentExpirationPeriod = _intentExpirationPeriod;\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        sustainabilityFee = _sustainabilityFee;\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\n\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _registrationProcessor    Registration processor address\n     * @param _sendProcessor            Send processor address\n     */\n    function initialize(\n        IGarantiRegistrationProcessor _registrationProcessor,\n        IGarantiSendProcessor _sendProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        registrationProcessor = _registrationProcessor;\n        sendProcessor = _sendProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\n     *\n     * @param _proof            Parameters and signals for registration email proof\n     * @param _bodyHashProof    Parameters and signals for body hash proof\n     */\n    function register(\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        external\n    {\n        require(accounts[msg.sender].idHash == bytes32(0), \"Account already associated with idHash\");\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\n\n        accounts[msg.sender].idHash = idHash;\n\n        emit AccountRegistered(msg.sender, idHash);\n    }\n\n    /**\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\n     * of USDC.\n     *\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \"TR## #### #### #### #### #### ##\"\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\n     * @param _depositAmount    The amount of USDC to off-ramp\n     * @param _receiveAmount    The amount of USD to receive\n     */\n    function offRamp(\n        string memory _garantiIban,\n        string memory _garantiName,\n        uint256 _depositAmount,\n        uint256 _receiveAmount\n    )\n        external\n        onlyRegisteredUser\n    {\n        require(isValidIban(_garantiIban), \"Invalid IBAN\");\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \"Maximum deposit amount reached\");\n        require(_depositAmount >= minDepositAmount, \"Deposit amount must be greater than min deposit amount\");\n        require(_receiveAmount > 0, \"Receive amount must be greater than 0\");\n\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\n        uint256 depositId = depositCounter++;\n\n        AccountInfo storage account = accounts[msg.sender];\n        account.deposits.push(depositId);\n\n        deposits[depositId] = Deposit({\n            depositor: msg.sender,\n            garantiIban: _garantiIban,\n            garantiName: _garantiName,\n            depositAmount: _depositAmount,\n            remainingDeposits: _depositAmount,\n            outstandingIntentAmount: 0,\n            conversionRate: conversionRate,\n            intentHashes: new bytes32[](0)\n        });\n\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\n\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\n    }\n\n    /**\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\n     * they will be deleted from the deposit to be able to maintain state hygiene.\n     *\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \n     * @param _amount       The amount of USDC the user wants to on-ramp\n     * @param _to           Address to forward funds to (can be same as onRamper)\n     */\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\n        bytes32 idHash = accounts[msg.sender].idHash;\n        Deposit storage deposit = deposits[_depositId];\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\n\n        // Caller validity checks\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \"Onramper on depositor's denylist\");\n        require(\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\n            \"On ramp cool down period not elapsed\"\n        );\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \"Intent still outstanding\");\n        require(depositorIdHash != idHash, \"Sender cannot be the depositor\");\n\n        // Intent information checks\n        require(deposit.depositor != address(0), \"Deposit does not exist\");\n        require(_amount > 0, \"Signaled amount must be greater than 0\");\n        require(_amount <= maxOnRampAmount, \"Signaled amount must be less than max on-ramp amount\");\n        require(_to != address(0), \"Cannot send to zero address\");\n\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\n\n        if (deposit.remainingDeposits < _amount) {\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(_depositId);\n\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \"Not enough liquidity\");\n\n            _pruneIntents(deposit, prunableIntents);\n            deposit.remainingDeposits += reclaimableAmount;\n            deposit.outstandingIntentAmount -= reclaimableAmount;\n        }\n\n        intents[intentHash] = Intent({\n            onRamper: msg.sender,\n            to: _to,\n            deposit: _depositId,\n            amount: _amount,\n            intentTimestamp: block.timestamp\n        });\n\n        globalAccount[idHash].currentIntentHash = intentHash;\n\n        deposit.remainingDeposits -= _amount;\n        deposit.outstandingIntentAmount += _amount;\n        deposit.intentHashes.push(intentHash);\n\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\n    }\n\n    /**\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\n     * intent. Deposit state is updated to reflect the cancelled intent.\n     *\n     * @param _intentHash    Hash of intent being cancelled\n     */\n    function cancelIntent(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        \n        require(intent.intentTimestamp != 0, \"Intent does not exist\");\n        require(\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\n            \"Sender must be the on-ramper\"\n        );\n\n        Deposit storage deposit = deposits[intent.deposit];\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.remainingDeposits += intent.amount;\n        deposit.outstandingIntentAmount -= intent.amount;\n    }\n\n    /**\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _proof            Parameters and signals for send email proof\n     * @param _bodyHashProof    Parameters and signals for body hash proof\n     */\n    function onRamp(\n        IGarantiSendProcessor.SendProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        external\n    {\n        (\n            Intent memory intent,\n            Deposit storage deposit,\n            bytes32 intentHash\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\n\n        _pruneIntent(deposit, intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(intentHash, intent);\n    }\n\n    /**\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \n     * deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\n     */\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(deposit.depositor == msg.sender, \"Caller must be the depositor\");\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(_intentHash, intent);\n    }\n\n    /**\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\n     *\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\n     */\n    function withdrawDeposit(uint256[] memory _depositIds) external {\n        uint256 returnAmount;\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit storage deposit = deposits[depositId];\n\n            require(deposit.depositor == msg.sender, \"Sender must be the depositor\");\n\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(depositId);\n\n            _pruneIntents(deposit, prunableIntents);\n\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\n            \n            deposit.outstandingIntentAmount -= reclaimableAmount;\n\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\n            \n            delete deposit.remainingDeposits;\n            _closeDepositIfNecessary(depositId, deposit);\n        }\n\n        usdc.transfer(msg.sender, returnAmount);\n    }\n\n    /**\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\n     * signal an intent on the user's deposit they will be denied.\n     *\n     * @param _deniedUser   Poseidon hash of the idHash being banned\n     */\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\n        bytes32 denyingUser = accounts[msg.sender].idHash;\n\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \"User already on denylist\");\n\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\n\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\n    }\n\n    /**\n     * @notice Removes a idHash from a depositor's deny list.\n     *\n     * @param _approvedUser   Poseidon hash of the idHash being approved\n     */\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\n        bytes32 approvingUser = accounts[msg.sender].idHash;\n\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \"User not on denylist\");\n\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\n\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\n     *\n     * @param _sendProcessor   New send proccesor address\n     */\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\n        sendProcessor = _sendProcessor;\n        emit NewSendProcessorSet(address(_sendProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\n     *\n     * @param _registrationProcessor   New registration proccesor address\n     */\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\n        registrationProcessor = _registrationProcessor;\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\n     *\n     * @param _minDepositAmount   The new minimum deposit amount\n     */\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\n        require(_minDepositAmount != 0, \"Minimum deposit cannot be zero\");\n\n        minDepositAmount = _minDepositAmount;\n        emit MinDepositAmountSet(_minDepositAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\n     *\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\n     */\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \"Fee cannot be greater than max fee\");\n\n        sustainabilityFee = _fee;\n        emit SustainabilityFeeUpdated(_fee);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\n     *\n     * @param _feeRecipient   The new fee recipient address\n     */\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\n        require(_feeRecipient != address(0), \"Fee recipient cannot be zero address\");\n\n        sustainabilityFeeRecipient = _feeRecipient;\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\n     * this amount a user must make multiple transactions.\n     *\n     * @param _maxOnRampAmount   The new max on ramp amount\n     */\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\n        require(_maxOnRampAmount != 0, \"Max on ramp amount cannot be zero\");\n\n        maxOnRampAmount = _maxOnRampAmount;\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\n     * amount of time before they can signalIntent to on-ramp again.\n     *\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\n     */\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\n     * locking up a depositor's funds.\n     *\n     * @param _intentExpirationPeriod   New intent expiration period\n     */\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\n        require(_intentExpirationPeriod != 0, \"Max intent expiration period cannot be zero\");\n\n        intentExpirationPeriod = _intentExpirationPeriod;\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\n    }\n\n\n    /* ============ External View Functions ============ */\n\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\n        return deposits[_depositId];\n    }\n\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\n        return accounts[_account];\n    }\n\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\n    }\n\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\n    }\n\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\n    }\n\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\n    }\n\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\n\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\n            bytes32 intentHash = _intentHashes[i];\n            Intent memory intent = intents[intentHash];\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\n                intentHash: _intentHashes[i],\n                intent: intent,\n                onRamperIdHash: accounts[intent.onRamper].idHash\n            });\n        }\n\n        return intentsWithOnRamperId;\n    }\n\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\n        \n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\n            uint256 depositId = accountDepositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            accountDeposits[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorIdHash: accounts[deposit.depositor].idHash,\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n    }\n\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            depositArray[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorIdHash: accounts[deposit.depositor].idHash,\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n\n        return depositArray;\n    }\n\n    function isValidIban(string memory _iban) public pure returns(bool) {\n        bytes memory ibanBytes = bytes(_iban);\n        if(ibanBytes.length != 32) { return false; }\n\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\n            if (i < 2) {\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\n            } else if (i % 5 == 4) {\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\n                if(ibanBytes[i] != 0x20) { return false; }\n            } else {\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\n            }\n        }\n\n        return true;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Calculates the intentHash of new intent\n     */\n    function _calculateIntentHash(\n        bytes32 _idHash,\n        uint256 _depositId\n    )\n        internal\n        view\n        virtual\n        returns (bytes32 intentHash)\n    {\n        // Mod with circom prime field to make sure it fits in a 254-bit field\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\n    }\n\n    /**\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\n     * the outstanding amounts are summed and returned alongside the intentHashes\n     */\n    function _getPrunableIntents(\n        uint256 _depositId\n    )\n        internal\n        view\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\n    {\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\n        prunableIntents = new bytes32[](intentHashes.length);\n\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\n            Intent memory intent = intents[intentHashes[i]];\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\n                prunableIntents[i] = intentHashes[i];\n                reclaimedAmount += intent.amount;\n            }\n        }\n    }\n\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\n        for (uint256 i = 0; i < _intents.length; ++i) {\n            if (_intents[i] != bytes32(0)) {\n                _pruneIntent(_deposit, _intents[i]);\n            }\n        }\n    }\n\n    /**\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\n     */\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\n        Intent memory intent = intents[_intentHash];\n\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\n        delete intents[_intentHash];\n        _deposit.intentHashes.removeStorage(_intentHash);\n\n        emit IntentPruned(_intentHash, intent.deposit);\n    }\n\n    /**\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\n     * deposits mapping and removes tracking it in the user's accounts mapping.\n     */\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\n        if (openDepositAmount == 0) {\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\n            emit DepositClosed(_depositId, _deposit.depositor);\n            delete deposits[_depositId];\n        }\n    }\n\n    /**\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\n     */\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\n        uint256 fee;\n        if (sustainabilityFee != 0) {\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\n            usdc.transfer(sustainabilityFeeRecipient, fee);\n        }\n\n        uint256 onRampAmount = _intent.amount - fee;\n        usdc.transfer(_intent.to, onRampAmount);\n\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\n    }\n\n    /**\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\n     * was paid off-chain inclusive of the conversionRate.\n     */\n    function _verifyOnRampProof(\n        IGarantiSendProcessor.SendProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        internal\n        returns(Intent memory, Deposit storage, bytes32)\n    {\n        (\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperNameHash,\n            bytes32 offRamperIdHash,\n            bytes32 onRamperIdHash,\n            bytes32 intentHash\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\n\n        Intent memory intent = intents[intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(intent.intentTimestamp <= timestamp, \"Intent was not created before send\");\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \"Offramper id does not match\");\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \"Offramper id does not match\");\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \"Onramper id does not match\");\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \"Payment was not enough\");\n\n        return (intent, deposit, intentHash);\n    }\n\n    /**\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\n     * different addresses.\n     */\n    function _verifyRegistrationProof(\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        internal\n        returns(bytes32)\n    {\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\n\n        return idHash;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/GarantiRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessorV2 } from \"../../processors/BaseProcessorV2.sol\";\nimport { Groth16Verifier } from \"../../verifiers/garanti_registration_verifier.sol\";\nimport { IGarantiBodySuffixHashVerifier } from \"./interfaces/IGarantiBodySuffixHashVerifier.sol\";\nimport { IGarantiRegistrationProcessor } from \"./interfaces/IGarantiRegistrationProcessor.sol\";\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract GarantiRegistrationProcessor is\n    Groth16Verifier,\n    IGarantiRegistrationProcessor,\n    BaseProcessorV2\n{\n\n    using StringUtils for uint256[];\n\n    /* ============ Constants ============ */\n    uint256 constant public PACK_SIZE = 7;\n\n        /* ============ Public Variables ============ */\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\n    \n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Groth16Verifier()\n        BaseProcessorV2(\n            _ramp,\n            _garantiMailserverKeyHashAdapter,\n            _nullifierRegistry,\n            _emailFromAddress,\n            _timestampBuffer\n        )\n    {\n        bodyHashVerifier = _bodyHashVerifier;\n    }\n\n    /* ============ External Functions ============ */\n\n    function processProof(\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        public\n        override\n        onlyRamp\n        returns(bytes32 userIdHash)\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n        require(\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\n            \"Invalid body hash proof\"\n        );\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\n\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \"Invalid mailserver key hash\");\n\n        // Signals [5:10] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\n\n        // Signals [10] is the packed userIdHash\n        userIdHash = bytes32(_proof.signals[10]);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\n        require(intermediateHash == inputHash, \"Invalid intermediate or output hash\");\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/GarantiSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessorV2 } from \"../../processors/BaseProcessorV2.sol\";\nimport { Groth16Verifier } from \"../../verifiers/garanti_send_verifier.sol\";\nimport { IGarantiBodySuffixHashVerifier } from \"./interfaces/IGarantiBodySuffixHashVerifier.sol\";\nimport { IGarantiSendProcessor } from \"./interfaces/IGarantiSendProcessor.sol\";\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\n    \n    using StringUtils for uint256[];\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    uint256 constant PACK_SIZE = 7;\n\n    /* ============ Public Variables ============ */\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Groth16Verifier()\n        BaseProcessorV2(\n            _ramp,\n            _garantiMailserverKeyHashAdapter,\n            _nullifierRegistry,\n            _emailFromAddress,\n            _timestampBuffer\n        )\n    {\n        bodyHashVerifier = _bodyHashVerifier;\n    }\n    \n    /* ============ External Functions ============ */\n    function processProof(\n        IGarantiSendProcessor.SendProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        public\n        override\n        onlyRamp\n        returns(\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperNameHash,\n            bytes32 offRamperIdHash,\n            bytes32 onRamperIdHash,\n            bytes32 intentHash\n        )\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n        require(\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\n            \"Invalid body hash proof\"\n        );\n\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\n\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \"Invalid mailserver key hash\");\n\n        // Signals [5:10] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\n\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\n        // parse and convert to a unix timestamp\n        // Add the buffer to build in flexibility with L2 timestamps\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\n\n        // Signals [19] is the packed onRamperIdHash\n        onRamperIdHash = bytes32(_proof.signals[25]);\n\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\n\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\n\n        // Check if email has been used previously, if not nullify it so it can't be used again\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\n\n        // Signals [14] is intentHash\n        intentHash = bytes32(_proof.signals[27]);\n    }\n    \n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\n        require(intermediateHash == inputHash, \"Invalid intermediate or output hash\");\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IGarantiBodySuffixHashVerifier {\n\n    struct BodySuffixHashProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[4] signals;\n    }\n\n    function verifyProof(\n        uint[2] calldata _pA,\n        uint[2][2] calldata _pB,\n        uint[2] calldata _pC,\n        uint[4] calldata _pubSignals\n    )\n        external\n        view\n        returns (bool);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\nimport { IGarantiBodySuffixHashVerifier } from \"./IGarantiBodySuffixHashVerifier.sol\";\n\ninterface IGarantiRegistrationProcessor {\n\n    struct RegistrationProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[11] signals;\n    }\n\n    function processProof(\n        RegistrationProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        external\n    returns (bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\nimport { IGarantiBodySuffixHashVerifier } from \"./IGarantiBodySuffixHashVerifier.sol\";\n\ninterface IGarantiSendProcessor {\n\n    struct SendProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[28] signals;\n    }\n\n    function processProof(\n        SendProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\n    )\n        external\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IGarantiBodySuffixHashVerifier } from \"../interfaces/IGarantiBodySuffixHashVerifier.sol\";\nimport { IGarantiRegistrationProcessor } from \"../interfaces/IGarantiRegistrationProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        RegistrationProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\n    )\n        public\n        pure\n        override\n        returns(bytes32 userIdHash)\n    {\n        return(bytes32(_proof.signals[1]));\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IGarantiBodySuffixHashVerifier } from \"../interfaces/IGarantiBodySuffixHashVerifier.sol\";\nimport { IGarantiSendProcessor } from \"../interfaces/IGarantiSendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        SendProof calldata _proof,\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\n    )\n        public\n        pure\n        override\n        returns(\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperNameHash,\n            bytes32 offRamperIdHash,\n            bytes32 onRamperIdHash,\n            bytes32 intentHash\n        )\n    {\n        return(\n            _proof.signals[0],\n            _proof.signals[1],\n            bytes32(_proof.signals[2]),\n            bytes32(_proof.signals[3]),\n            bytes32(_proof.signals[4]),\n            bytes32(_proof.signals[5])\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/HDFCRamp.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IPoseidon3 } from \"../../interfaces/IPoseidon3.sol\";\nimport { IPoseidon6 } from \"../../interfaces/IPoseidon6.sol\";\nimport { IRegistrationProcessor } from \"./interfaces/IRegistrationProcessor.sol\";\nimport { IHDFCSendProcessor } from \"./interfaces/IHDFCSendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract HDFCRamp is Ownable {\n\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\n    event DepositReceived(\n        uint256 indexed depositId,\n        bytes32 indexed idHash,\n        uint256 amount,\n        uint256 conversionRate\n    );\n    event IntentSignaled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        bytes32 indexed idHash,\n        address to,\n        uint256 amount,\n        uint256 timestamp\n    );\n\n    event IntentPruned(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId\n    );\n    // Do we want to emit the onRamper or the idHash\n    event IntentFulfilled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        address indexed onRamper,\n        address to,\n        uint256 amount,\n        uint256 feeAmount\n    );\n    event DepositWithdrawn(\n        uint256 indexed depositId,\n        address indexed depositor,\n        uint256 amount\n    );\n\n    event DepositClosed(uint256 depositId, address depositor);\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\n    event MinDepositAmountSet(uint256 minDepositAmount);\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\n    event SustainabilityFeeUpdated(uint256 fee);\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\n    event NewSendProcessorSet(address sendProcessor);\n    event NewRegistrationProcessorSet(address registrationProcessor);\n    event NewReceiveProcessorSet(address receiveProcessor);\n\n    /* ============ Structs ============ */\n\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\n    // and is allowed to have at most 5 deposits associated with it.\n    struct AccountInfo {\n        bytes32 idHash;                     // Hash of payment processor id\n        uint256[] deposits;                 // Array of open account deposits\n    }\n\n    struct Deposit {\n        address depositor;\n        uint256[8] upiId;\n        uint256 depositAmount;              // Amount of USDC deposited\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\n    }\n\n    struct DepositWithAvailableLiquidity {\n        uint256 depositId;                  // ID of the deposit\n        bytes32 depositorIdHash;            // Depositor's idHash \n        Deposit deposit;                    // Deposit struct\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\n    }\n\n    struct Intent {\n        address onRamper;                   // On-ramper's address\n        address to;                         // Address to forward funds to (can be same as onRamper)\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\n    }\n\n    struct IntentWithOnRamperId {\n        bytes32 intentHash;                 // Intent hash\n        Intent intent;                      // Intent struct\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\n    }\n\n    struct DenyList {\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\n    }\n\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\n    struct GlobalAccountInfo {\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\n        DenyList denyList;                  // Deny list of the account\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(accounts[msg.sender].idHash != bytes32(0), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ Constants ============ */\n    uint256 internal constant PRECISE_UNIT = 1e18;\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\n    \n    /* ============ State Variables ============ */\n    IERC20 public immutable usdc;                                   // USDC token contract\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\n\n    bool public isInitialized;                                      // Indicates if contract has been initialized\n\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\n\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\n\n    uint256 public depositCounter;                                  // Counter for depositIds\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner,\n        IERC20 _usdc,\n        IPoseidon3 _poseidon3,\n        IPoseidon6 _poseidon6,\n        uint256 _minDepositAmount,\n        uint256 _maxOnRampAmount,\n        uint256 _intentExpirationPeriod,\n        uint256 _onRampCooldownPeriod,\n        uint256 _sustainabilityFee,\n        address _sustainabilityFeeRecipient\n    )\n        Ownable()\n    {\n        usdc = _usdc;\n        poseidon3 = _poseidon3;\n        poseidon6 = _poseidon6;\n        minDepositAmount = _minDepositAmount;\n        maxOnRampAmount = _maxOnRampAmount;\n        intentExpirationPeriod = _intentExpirationPeriod;\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        sustainabilityFee = _sustainabilityFee;\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\n\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _registrationProcessor    Registration processor address\n     * @param _sendProcessor            Send processor address\n     */\n    function initialize(\n        IRegistrationProcessor _registrationProcessor,\n        IHDFCSendProcessor _sendProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        registrationProcessor = _registrationProcessor;\n        sendProcessor = _sendProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\n     *\n     * @param _a        Parameter of zk proof\n     * @param _b        Parameter of zk proof\n     * @param _c        Parameter of zk proof\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\n     */\n    function register(\n        uint[2] memory _a,\n        uint[2][2] memory _b,\n        uint[2] memory _c,\n        uint[5] memory _signals\n    )\n        external\n    {\n        require(accounts[msg.sender].idHash == bytes32(0), \"Account already associated with idHash\");\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\n\n        accounts[msg.sender].idHash = idHash;\n\n        emit AccountRegistered(msg.sender, idHash);\n    }\n\n    /**\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\n     * of USDC.\n     *\n     * @param _upiId            The packed upi ID of the depositor\n     * @param _depositAmount    The amount of USDC to off-ramp\n     * @param _receiveAmount    The amount of USD to receive\n     */\n    function offRamp(\n        uint256[8] memory _upiId,\n        uint256 _depositAmount,\n        uint256 _receiveAmount\n    )\n        external\n        onlyRegisteredUser\n    {\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \"Maximum deposit amount reached\");\n        require(_depositAmount >= minDepositAmount, \"Deposit amount must be greater than min deposit amount\");\n        require(_receiveAmount > 0, \"Receive amount must be greater than 0\");\n\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\n        uint256 depositId = depositCounter++;\n\n        AccountInfo storage account = accounts[msg.sender];\n        account.deposits.push(depositId);\n\n        deposits[depositId] = Deposit({\n            depositor: msg.sender,\n            upiId: _upiId,\n            depositAmount: _depositAmount,\n            remainingDeposits: _depositAmount,\n            outstandingIntentAmount: 0,\n            conversionRate: conversionRate,\n            intentHashes: new bytes32[](0)\n        });\n\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\n\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\n    }\n\n    /**\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\n     * they will be deleted from the deposit to be able to maintain state hygiene.\n     *\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \n     * @param _amount       The amount of USDC the user wants to on-ramp\n     * @param _to           Address to forward funds to (can be same as onRamper)\n     */\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\n        bytes32 idHash = accounts[msg.sender].idHash;\n        Deposit storage deposit = deposits[_depositId];\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\n\n        // Caller validity checks\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \"Onramper on depositor's denylist\");\n        require(\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\n            \"On ramp cool down period not elapsed\"\n        );\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \"Intent still outstanding\");\n        require(depositorIdHash != idHash, \"Sender cannot be the depositor\");\n\n        // Intent information checks\n        require(deposit.depositor != address(0), \"Deposit does not exist\");\n        require(_amount > 0, \"Signaled amount must be greater than 0\");\n        require(_amount <= maxOnRampAmount, \"Signaled amount must be less than max on-ramp amount\");\n        require(_to != address(0), \"Cannot send to zero address\");\n\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\n\n        if (deposit.remainingDeposits < _amount) {\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(_depositId);\n\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \"Not enough liquidity\");\n\n            _pruneIntents(deposit, prunableIntents);\n            deposit.remainingDeposits += reclaimableAmount;\n            deposit.outstandingIntentAmount -= reclaimableAmount;\n        }\n\n        intents[intentHash] = Intent({\n            onRamper: msg.sender,\n            to: _to,\n            deposit: _depositId,\n            amount: _amount,\n            intentTimestamp: block.timestamp\n        });\n\n        globalAccount[idHash].currentIntentHash = intentHash;\n\n        deposit.remainingDeposits -= _amount;\n        deposit.outstandingIntentAmount += _amount;\n        deposit.intentHashes.push(intentHash);\n\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\n    }\n\n    /**\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\n     * intent. Deposit state is updated to reflect the cancelled intent.\n     *\n     * @param _intentHash    Hash of intent being cancelled\n     */\n    function cancelIntent(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        \n        require(intent.intentTimestamp != 0, \"Intent does not exist\");\n        require(\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\n            \"Sender must be the on-ramper\"\n        );\n\n        Deposit storage deposit = deposits[intent.deposit];\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.remainingDeposits += intent.amount;\n        deposit.outstandingIntentAmount -= intent.amount;\n    }\n\n    /**\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _a        Parameter of zk proof\n     * @param _b        Parameter of zk proof\n     * @param _c        Parameter of zk proof\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\n     *                  nullifier, intentHash\n     */\n    function onRamp(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[15] memory _signals\n    )\n        external\n    {\n        (\n            Intent memory intent,\n            Deposit storage deposit,\n            bytes32 intentHash\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\n\n        _pruneIntent(deposit, intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(intentHash, intent);\n    }\n\n    /**\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \n     * deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\n     */\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(deposit.depositor == msg.sender, \"Caller must be the depositor\");\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(_intentHash, intent);\n    }\n\n    /**\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\n     *\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\n     */\n    function withdrawDeposit(uint256[] memory _depositIds) external {\n        uint256 returnAmount;\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit storage deposit = deposits[depositId];\n\n            require(deposit.depositor == msg.sender, \"Sender must be the depositor\");\n\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(depositId);\n\n            _pruneIntents(deposit, prunableIntents);\n\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\n            \n            deposit.outstandingIntentAmount -= reclaimableAmount;\n\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\n            \n            delete deposit.remainingDeposits;\n            _closeDepositIfNecessary(depositId, deposit);\n        }\n\n        usdc.transfer(msg.sender, returnAmount);\n    }\n\n    /**\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\n     * signal an intent on the user's deposit they will be denied.\n     *\n     * @param _deniedUser   Poseidon hash of the idHash being banned\n     */\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\n        bytes32 denyingUser = accounts[msg.sender].idHash;\n\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \"User already on denylist\");\n\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\n\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\n    }\n\n    /**\n     * @notice Removes a idHash from a depositor's deny list.\n     *\n     * @param _approvedUser   Poseidon hash of the idHash being approved\n     */\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\n        bytes32 approvingUser = accounts[msg.sender].idHash;\n\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \"User not on denylist\");\n\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\n\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\n     *\n     * @param _sendProcessor   New send proccesor address\n     */\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\n        sendProcessor = _sendProcessor;\n        emit NewSendProcessorSet(address(_sendProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\n     *\n     * @param _registrationProcessor   New registration proccesor address\n     */\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\n        registrationProcessor = _registrationProcessor;\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\n     *\n     * @param _minDepositAmount   The new minimum deposit amount\n     */\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\n        require(_minDepositAmount != 0, \"Minimum deposit cannot be zero\");\n\n        minDepositAmount = _minDepositAmount;\n        emit MinDepositAmountSet(_minDepositAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\n     *\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\n     */\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \"Fee cannot be greater than max fee\");\n\n        sustainabilityFee = _fee;\n        emit SustainabilityFeeUpdated(_fee);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\n     *\n     * @param _feeRecipient   The new fee recipient address\n     */\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\n        require(_feeRecipient != address(0), \"Fee recipient cannot be zero address\");\n\n        sustainabilityFeeRecipient = _feeRecipient;\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\n     * this amount a user must make multiple transactions.\n     *\n     * @param _maxOnRampAmount   The new max on ramp amount\n     */\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\n        require(_maxOnRampAmount != 0, \"Max on ramp amount cannot be zero\");\n\n        maxOnRampAmount = _maxOnRampAmount;\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\n     * amount of time before they can signalIntent to on-ramp again.\n     *\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\n     */\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\n     * locking up a depositor's funds.\n     *\n     * @param _intentExpirationPeriod   New intent expiration period\n     */\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\n        require(_intentExpirationPeriod != 0, \"Max intent expiration period cannot be zero\");\n\n        intentExpirationPeriod = _intentExpirationPeriod;\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\n    }\n\n\n    /* ============ External View Functions ============ */\n\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\n        return deposits[_depositId];\n    }\n\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\n        return accounts[_account];\n    }\n\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\n    }\n\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\n    }\n\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\n    }\n\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\n    }\n\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\n\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\n            bytes32 intentHash = _intentHashes[i];\n            Intent memory intent = intents[intentHash];\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\n                intentHash: _intentHashes[i],\n                intent: intent,\n                onRamperIdHash: accounts[intent.onRamper].idHash\n            });\n        }\n\n        return intentsWithOnRamperId;\n    }\n\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\n        \n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\n            uint256 depositId = accountDepositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            accountDeposits[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorIdHash: accounts[deposit.depositor].idHash,\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n    }\n\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            depositArray[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorIdHash: accounts[deposit.depositor].idHash,\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n\n        return depositArray;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Calculates the intentHash of new intent\n     */\n    function _calculateIntentHash(\n        bytes32 _idHash,\n        uint256 _depositId\n    )\n        internal\n        view\n        virtual\n        returns (bytes32 intentHash)\n    {\n        // Mod with circom prime field to make sure it fits in a 254-bit field\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\n    }\n\n    /**\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\n     * the outstanding amounts are summed and returned alongside the intentHashes\n     */\n    function _getPrunableIntents(\n        uint256 _depositId\n    )\n        internal\n        view\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\n    {\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\n        prunableIntents = new bytes32[](intentHashes.length);\n\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\n            Intent memory intent = intents[intentHashes[i]];\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\n                prunableIntents[i] = intentHashes[i];\n                reclaimedAmount += intent.amount;\n            }\n        }\n    }\n\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\n        for (uint256 i = 0; i < _intents.length; ++i) {\n            if (_intents[i] != bytes32(0)) {\n                _pruneIntent(_deposit, _intents[i]);\n            }\n        }\n    }\n\n    /**\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\n     */\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\n        Intent memory intent = intents[_intentHash];\n\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\n        delete intents[_intentHash];\n        _deposit.intentHashes.removeStorage(_intentHash);\n\n        emit IntentPruned(_intentHash, intent.deposit);\n    }\n\n    /**\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\n     * deposits mapping and removes tracking it in the user's accounts mapping.\n     */\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\n        if (openDepositAmount == 0) {\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\n            emit DepositClosed(_depositId, _deposit.depositor);\n            delete deposits[_depositId];\n        }\n    }\n\n    /**\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\n     */\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\n        uint256 fee;\n        if (sustainabilityFee != 0) {\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\n            usdc.transfer(sustainabilityFeeRecipient, fee);\n        }\n\n        uint256 onRampAmount = _intent.amount - fee;\n        usdc.transfer(_intent.to, onRampAmount);\n\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\n    }\n\n    /**\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\n     * was paid off-chain inclusive of the conversionRate.\n     */\n    function _verifyOnRampProof(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[15] memory _signals\n    )\n        internal\n        returns(Intent memory, Deposit storage, bytes32)\n    {\n        (\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperIdHash,\n            bytes32 onRamperIdHash,\n            bytes32 intentHash\n        ) = sendProcessor.processProof(\n            IHDFCSendProcessor.SendProof({\n                a: _a,\n                b: _b,\n                c: _c,\n                signals: _signals\n            })\n        );\n\n        Intent memory intent = intents[intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(intent.intentTimestamp <= timestamp, \"Intent was not created before send\");\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \"Offramper id does not match\");\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \"Onramper id does not match\");\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \"Payment was not enough\");\n\n        return (intent, deposit, intentHash);\n    }\n\n    /**\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\n     * different addresses.\n     */\n    function _verifyRegistrationProof(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[5] memory _signals\n    )\n        internal\n        returns(bytes32)\n    {\n        bytes32 idHash = registrationProcessor.processProof(\n            IRegistrationProcessor.RegistrationProof({\n                a: _a,\n                b: _b,\n                c: _c,\n                signals: _signals\n            })\n        );\n\n        return idHash;\n    }\n\n    /**\n     * @notice Returns the poseidon hash of the given raw UPI ID    \n     */\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\n        uint256[6] memory temp1;\n        uint256[3] memory temp2;\n\n        for (uint256 i = 0; i < 6; ++i) {\n            temp1[i] = _upiId[i];\n        }\n        temp2[0] = poseidon6.poseidon(temp1);\n        temp2[1] = _upiId[6];\n        temp2[2] = _upiId[7];\n\n        return bytes32(poseidon3.poseidon(temp2));\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/HDFCRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessorV2 } from \"../../processors/BaseProcessorV2.sol\";\nimport { Groth16Verifier } from \"../../verifiers/hdfc_registration_verifier.sol\";\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IRegistrationProcessor } from \"./interfaces/IRegistrationProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\n\n    using StringUtils for uint256[];\n\n    /* ============ Constants ============ */\n    uint256 constant public PACK_SIZE = 7;\n    \n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Groth16Verifier()\n        BaseProcessorV2(\n            _ramp,\n            _hdfcMailserverKeyHashAdapter,\n            _nullifierRegistry,\n            _emailFromAddress,\n            _timestampBuffer\n        )\n    {}\n\n    /* ============ External Functions ============ */\n\n    function processProof(\n        IRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        public\n        override\n        onlyRamp\n        returns(bytes32 userIdHash)\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \"Invalid mailserver key hash\");\n\n        // Signals [1:4] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\n\n        // Signals [4] is the packed userIdHash\n        userIdHash = bytes32(_proof.signals[4]);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/HDFCSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessorV2 } from \"../../processors/BaseProcessorV2.sol\";\nimport { Groth16Verifier } from \"../../verifiers/hdfc_send_verifier.sol\";\nimport { HDFCTimestampParsing } from \"./lib/HDFCTimestampParsing.sol\";\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IHDFCSendProcessor } from \"./interfaces/IHDFCSendProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\n    \n    using StringUtils for uint256[];\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    uint256 constant PACK_SIZE = 7;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Groth16Verifier()\n        BaseProcessorV2(\n            _ramp,\n            _hdfcMailserverKeyHashAdapter,\n            _nullifierRegistry,\n            _emailFromAddress,\n            _timestampBuffer\n        )\n    {}\n    \n    /* ============ External Functions ============ */\n    function processProof(\n        IHDFCSendProcessor.SendProof calldata _proof\n    )\n        public\n        override\n        onlyRamp\n        returns(\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperIdHash,\n            bytes32 onRamperIdHash,\n            bytes32 intentHash\n        )\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \"Invalid mailserver key hash\");\n\n        // Signals [1:4] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\n\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\n        // parse and convert to a unix timestamp\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\n        // Add the buffer to build in flexibility with L2 timestamps\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\n\n        // Signals [11] is the packed onRamperIdHash\n        onRamperIdHash = bytes32(_proof.signals[11]);\n\n        // Signals [12] is the packed offRamper UPI ID hash\n        offRamperIdHash = bytes32(_proof.signals[12]);\n\n        // Check if email has been used previously, if not nullify it so it can't be used again\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\n\n        // Signals [14] is intentHash\n        intentHash = bytes32(_proof.signals[14]);\n    }\n    \n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IHDFCSendProcessor {\n\n    struct SendProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[15] signals;\n    }\n\n    function processProof(\n        SendProof calldata _proof\n    )\n        external\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IRegistrationProcessor {\n\n    struct RegistrationProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[5] signals;\n    }\n\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        external\n    returns (bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { DateTime } from \"../../../external/DateTime.sol\";\n\nimport { StringConversionUtils } from \"../../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\nlibrary HDFCTimestampParsing {\n\n    using StringConversionUtils for string;\n\n    /**\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\n     */\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\n        string[8] memory extractedStrings;\n        uint256 breakCounter;\n        uint256 lastBreak;\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\n                lastBreak = i + 1;\n                breakCounter++;\n            }\n        }\n        // Add last substring to array\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\n\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\n        require(breakCounter == 7, \"Invalid date string\");\n\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\n            extractedStrings[3].stringToUint(0), // year\n            _parseMonth(extractedStrings[2]), // month\n            extractedStrings[1].stringToUint(0), // day\n            extractedStrings[4].stringToUint(0), // hour\n            extractedStrings[5].stringToUint(0), // minute\n            extractedStrings[6].stringToUint(0) // second\n        );\n\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\n    }\n\n    /**\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\n     * string is of the format \"+0530\" or \"-0530\" where the first character is either a \"+\" or a \"-\" and the next 4 characters are hhmm. If\n     * the _timeOffsetString is \"+0530\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\n     *\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\n     */\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\n        require(bytes(_timeOffsetString).length == 5, \"Invalid timezone offset\");\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\n\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\n\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \"+\" meaning the tz is ahead of GMT and must\n        // be subtracted\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\n    }\n\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\"Jan\")) {\n            return 1;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Feb\")) {\n            return 2;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Mar\")) {\n            return 3;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Apr\")) {\n            return 4;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"May\")) {\n            return 5;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Jun\")) {\n            return 6;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Jul\")) {\n            return 7;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Aug\")) {\n            return 8;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Sep\")) {\n            return 9;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Oct\")) {\n            return 10;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Nov\")) {\n            return 11;\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\"Dec\")) {\n            return 12;\n        } else {\n            revert(\"Invalid month\");\n        }\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IRegistrationProcessor } from \"../interfaces/IRegistrationProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        public\n        pure\n        override\n        returns(bytes32 userIdHash)\n    {\n        return(bytes32(_proof.signals[1]));\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IHDFCSendProcessor } from \"../interfaces/IHDFCSendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        SendProof calldata _proof\n    )\n        public\n        pure\n        override\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\n    {\n        return(\n            _proof.signals[0],\n            _proof.signals[1],\n            bytes32(_proof.signals[2]),\n            bytes32(_proof.signals[3]),\n            bytes32(_proof.signals[4])\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { HDFCTimestampParsing } from \"../lib/HDFCTimestampParsing.sol\";\n\npragma solidity ^0.8.18;\n\ncontract HDFCTimestampParsingMock {\n\n    /**\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\n     */\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\n    }\n\n    /**\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\n     * string is of the format \"+0530\" or \"-0530\" where the first character is either a \"+\" or a \"-\" and the next 4 characters are hhmm. If\n     * the _timeOffsetString is \"+0530\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\n     *\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\n     */\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\n    }\n\n    function _parseMonth(string memory _month) external pure returns (uint256) {\n        return HDFCTimestampParsing._parseMonth(_month);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { SignatureChecker } from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\n\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IRevolutAccountRegistrationProcessor } from \"./interfaces/IRevolutAccountRegistrationProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\nimport { TLSBaseProcessor } from \"../../processors/TLSBaseProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\n\n    using ECDSA for bytes32;\n    using SignatureChecker for address;\n    using StringConversionUtils for string;\n    \n    /* ============ Events ============ */\n    event VerifierSigningKeySet(address _verifierSigningKey);\n    \n    /* ============ Public Variables ============ */\n    address public verifierSigningKey;\n    bytes32 public notaryKeyHash;\n    \n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        address _verifierSigningKey,\n        bytes32 _notaryKeyHash,\n        INullifierRegistry _nullifierRegistry,\n        uint256 _timestampBuffer,\n        string memory _endpoint,\n        string memory _host\n    )\n        TLSBaseProcessor(\n            _ramp,\n            _nullifierRegistry,\n            _timestampBuffer,\n            _endpoint,\n            _host\n        )\n    {\n        verifierSigningKey = _verifierSigningKey;\n        notaryKeyHash = _notaryKeyHash;\n    }\n\n    /* ============ External Functions ============ */\n\n    function processProof(\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        public\n        override\n        onlyRamp\n        returns(bytes32 onRampId)\n    {\n        _validateProof(_proof.public_values, _proof.proof);\n\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\n        _validateTLSHost(host, _proof.public_values.host);\n\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\n\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\n    }\n\n    /* ============ External Admin Functions ============ */\n\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\n        verifierSigningKey = _verifierSigningKey;\n\n        emit VerifierSigningKeySet(_verifierSigningKey);\n    }\n\n    /* ============ View Functions ============ */\n\n    function verifyProof(\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\n        bytes memory _proof\n    )\n        public\n        view\n        returns(bool)\n    {\n        bytes memory encodedMessage = abi.encode(\n            _publicValues.endpoint,\n            _publicValues.host,\n            _publicValues.profileId,\n            _publicValues.userAddress,\n            _publicValues.notaryKeyHash\n        );\n\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \"Invalid notary key hash\");\n\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\n    }\n    \n    /* ============ Internal Functions ============ */\n\n    function _validateProof(\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n    {   \n        require(\n            verifyProof(_publicValues, _proof),\n            \"Invalid proof\"\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/RevolutAccountRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IRevolutAccountRegistrationProcessor } from \"./interfaces/IRevolutAccountRegistrationProcessor.sol\";\nimport { IRevolutAccountRegistry } from \"./interfaces/IRevolutAccountRegistry.sol\";\n\npragma solidity ^0.8.18;\n\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\n\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\n\n    event AllowlistEnabled(bytes32 listOwner);\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\n\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\n\n    /* ============ Structs ============ */\n\n    struct DenyList {\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\n    }\n\n    struct AllowList {\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(isRegisteredUser(msg.sender), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\n\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\n\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\n                                                                                // resulting hash is the accountId for our system\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner\n    )\n        Ownable()\n    {\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _accountRegistrationProcessor     Account Registration processor address\n     */\n    function initialize(\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        accountRegistrationProcessor = _accountRegistrationProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\n     * sender of the transaction.\n     *\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\n     */\n    function register(\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        external\n    {\n        require(msg.sender == _proof.public_values.userAddress, \"Caller must be address specified in proof\");\n        require(accounts[msg.sender] == bytes32(0), \"Account already associated with accountId\");\n        bytes32 accountId = _verifyRegistrationProof(_proof);\n\n        accounts[msg.sender] = accountId;\n\n        emit AccountRegistered(msg.sender, accountId);\n    }\n\n    /**\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\n     * signal an intent on the user's deposit they will be denied.\n     *\n     * @param _deniedUser   accountId being banned\n     */\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\n        bytes32 denyingUser = accounts[msg.sender];\n\n        require(!denyList[denyingUser].isDenied[_deniedUser], \"User already on denylist\");\n\n        denyList[denyingUser].isDenied[_deniedUser] = true;\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\n\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\n    }\n\n    /**\n     * @notice Removes an accountId from a depositor's deny list.\n     *\n     * @param _approvedUser   accountId being approved\n     */\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\n        bytes32 approvingUser = accounts[msg.sender];\n\n        require(denyList[approvingUser].isDenied[_approvedUser], \"User not on denylist\");\n\n        denyList[approvingUser].isDenied[_approvedUser] = false;\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\n\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\n    }\n\n    /**\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\n     */\n    function enableAllowlist() external onlyRegisteredUser {\n        bytes32 allowingUser = accounts[msg.sender];\n\n        require(!allowList[allowingUser].isEnabled, \"Allow list already enabled\");\n\n        allowList[allowingUser].isEnabled = true;\n\n        emit AllowlistEnabled(allowingUser);\n    }\n\n    /**\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\n     * be able to signal intents on the user's deposit.\n     *\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\n     */\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\n        bytes32 allowingUser = accounts[msg.sender];\n\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\n            bytes32 allowedUser = _allowedUsers[i];\n\n            require(!allowList[allowingUser].isAllowed[allowedUser], \"User already on allowlist\");\n\n            allowList[allowingUser].isAllowed[allowedUser] = true;\n            allowList[allowingUser].allowedUsers.push(allowedUser);\n\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\n        }\n    }\n\n    /**\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\n     * able to signal intents on the user's deposit.\n     *\n     * @param _disallowedUsers   List of accountIds being approved\n     */\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\n        bytes32 disallowingUser = accounts[msg.sender];\n\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\n            bytes32 disallowedUser = _disallowedUsers[i];\n\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \"User not on allowlist\");\n\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\n\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\n        }\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\n     *\n     * @param _registrationProcessor   New registration proccesor address\n     */\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\n        accountRegistrationProcessor = _registrationProcessor;\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\n    }\n\n    /* ============ External View Functions ============ */\n\n    function getAccountId(address _account) public view returns (bytes32) {\n        return accounts[_account];\n    }\n\n    function isRegisteredUser(address _account) public view returns (bool) {\n        return getAccountId(_account) != bytes32(0);\n    }\n\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\n        return denyList[getAccountId(_account)].deniedUsers;\n    }\n\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\n    }\n\n    function isAllowlistEnabled(address _account) external view returns (bool) {\n        return allowList[getAccountId(_account)].isEnabled;\n    }\n\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\n        return allowList[getAccountId(_account)].allowedUsers;\n    }\n\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\n        bytes32 allowingUser = getAccountId(_account);\n\n        // Deny list overrides, if user on deny list then they are not allowed\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\n\n        // Check if allow list is enabled, if so return status of user, else return true\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\n    }\n    \n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\n     * it can't be used again.\n     */\n    function _verifyRegistrationProof(\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        internal\n        returns (bytes32 accountId)\n    {\n        accountId = accountRegistrationProcessor.processProof(_proof);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/RevolutRamp.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IRevolutAccountRegistry } from \"./interfaces/IRevolutAccountRegistry.sol\";\nimport { IRevolutSendProcessor } from \"./interfaces/IRevolutSendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract RevolutRamp is Ownable {\n\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event DepositReceived(\n        uint256 indexed depositId,\n        bytes32 indexed offRampId,\n        bytes32 indexed currencyId,\n        uint256 amount,\n        uint256 conversionRate\n    );\n    event IntentSignaled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        bytes32 indexed accountId,\n        address to,\n        uint256 amount,\n        uint256 timestamp\n    );\n\n    event IntentPruned(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId\n    );\n    event IntentFulfilled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        address indexed onRamper,\n        address to,\n        uint256 amount,\n        uint256 feeAmount\n    );\n    event DepositWithdrawn(\n        uint256 indexed depositId,\n        address indexed depositor,\n        uint256 amount\n    );\n\n    event DepositClosed(uint256 depositId, address depositor);\n    event MinDepositAmountSet(uint256 minDepositAmount);\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\n    event SustainabilityFeeUpdated(uint256 fee);\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\n    event NewSendProcessorSet(address sendProcessor);\n\n    /* ============ Structs ============ */\n\n    struct Deposit {\n        address depositor;\n        string revolutTag;\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\n        bytes32 notaryKeyHash;              // Hash of notary's public key\n        uint256 depositAmount;              // Amount of USDC deposited\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\n    }\n\n    struct DepositWithAvailableLiquidity {\n        uint256 depositId;                  // ID of the deposit\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \n        Deposit deposit;                    // Deposit struct\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\n    }\n\n    struct Intent {\n        address onRamper;                   // On-ramper's address\n        address to;                         // Address to forward funds to (can be same as onRamper)\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\n    }\n\n    struct IntentWithOnRamperId {\n        bytes32 intentHash;                 // Intent hash\n        Intent intent;                      // Intent struct\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\n    }\n\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\n    struct GlobalAccountInfo {\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\n        uint256[] deposits;                 // Array of open account deposits\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(accountRegistry.isRegisteredUser(msg.sender), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ Constants ============ */\n    uint256 internal constant PRECISE_UNIT = 1e18;\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\n    \n    /* ============ State Variables ============ */\n    IERC20 public immutable usdc;                                   // USDC token contract\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\n\n    bool public isInitialized;                                      // Indicates if contract has been initialized\n\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\n\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\n\n    uint256 public depositCounter;                                  // Counter for depositIds\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner,\n        IERC20 _usdc,\n        uint256 _minDepositAmount,\n        uint256 _maxOnRampAmount,\n        uint256 _intentExpirationPeriod,\n        uint256 _onRampCooldownPeriod,\n        uint256 _sustainabilityFee,\n        address _sustainabilityFeeRecipient\n    )\n        Ownable()\n    {\n        usdc = _usdc;\n        minDepositAmount = _minDepositAmount;\n        maxOnRampAmount = _maxOnRampAmount;\n        intentExpirationPeriod = _intentExpirationPeriod;\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        sustainabilityFee = _sustainabilityFee;\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\n\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _accountRegistry     Account Registry contract for Revolut\n     * @param _sendProcessor       Send processor address\n     */\n    function initialize(\n        IRevolutAccountRegistry _accountRegistry,\n        IRevolutSendProcessor _sendProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        accountRegistry = _accountRegistry;\n        sendProcessor = _sendProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\n     * of USDC.\n     *\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\n     * @param _depositAmount        The amount of USDC to off-ramp\n     * @param _receiveAmount        The amount of USD to receive\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\n     */\n    function offRamp(\n        string calldata _revolutTag,\n        bytes32 _receiveCurrencyId,\n        uint256 _depositAmount,\n        uint256 _receiveAmount,\n        address _verifierSigningKey,\n        bytes32 _notaryKeyHash\n    )\n        external\n        onlyRegisteredUser\n    {\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\n\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \"Revolut tag must match id\");\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \"Maximum deposit amount reached\");\n        require(_depositAmount >= minDepositAmount, \"Deposit amount must be greater than min deposit amount\");\n        require(_receiveAmount > 0, \"Receive amount must be greater than 0\");\n\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\n        uint256 depositId = depositCounter++;\n\n        globalAccountInfo.deposits.push(depositId);\n\n        deposits[depositId] = Deposit({\n            depositor: msg.sender,\n            revolutTag: _revolutTag,\n            receiveCurrencyId: _receiveCurrencyId,\n            depositAmount: _depositAmount,\n            remainingDeposits: _depositAmount,\n            outstandingIntentAmount: 0,\n            conversionRate: conversionRate,\n            intentHashes: new bytes32[](0),\n            verifierSigningKey: _verifierSigningKey,\n            notaryKeyHash: _notaryKeyHash\n        });\n\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\n\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\n    }\n\n    /**\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\n     * they will be deleted from the deposit to be able to maintain state hygiene.\n     *\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \n     * @param _amount       The amount of USDC the user wants to on-ramp\n     * @param _to           Address to forward funds to (can be same as onRamper)\n     */\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\n        Deposit storage deposit = deposits[_depositId];\n\n        // Caller validity checks\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \"Onramper on depositor's denylist\");\n        require(\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\n            \"On ramp cool down period not elapsed\"\n        );\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \"Intent still outstanding\");\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \"Sender cannot be the depositor\");\n\n        // Intent information checks\n        require(deposit.depositor != address(0), \"Deposit does not exist\");\n        require(_amount > 0, \"Signaled amount must be greater than 0\");\n        require(_amount <= maxOnRampAmount, \"Signaled amount must be less than max on-ramp amount\");\n        require(_to != address(0), \"Cannot send to zero address\");\n\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\n\n        if (deposit.remainingDeposits < _amount) {\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(_depositId);\n\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \"Not enough liquidity\");\n\n            _pruneIntents(deposit, prunableIntents);\n            deposit.remainingDeposits += reclaimableAmount;\n            deposit.outstandingIntentAmount -= reclaimableAmount;\n        }\n\n        intents[intentHash] = Intent({\n            onRamper: msg.sender,\n            to: _to,\n            deposit: _depositId,\n            amount: _amount,\n            intentTimestamp: block.timestamp\n        });\n\n        globalAccount[onRamperId].currentIntentHash = intentHash;\n\n        deposit.remainingDeposits -= _amount;\n        deposit.outstandingIntentAmount += _amount;\n        deposit.intentHashes.push(intentHash);\n\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\n    }\n\n    /**\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\n     * intent. Deposit state is updated to reflect the cancelled intent.\n     *\n     * @param _intentHash    Hash of intent being cancelled\n     */\n    function cancelIntent(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        \n        require(intent.intentTimestamp != 0, \"Intent does not exist\");\n        require(\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\n            \"Sender must be the on-ramper\"\n        );\n\n        Deposit storage deposit = deposits[intent.deposit];\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.remainingDeposits += intent.amount;\n        deposit.outstandingIntentAmount -= intent.amount;\n    }\n\n    /**\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\n     * @param _verifierSignature  Signature by verifier of the unredacted data\n     */\n    function onRamp(\n        IRevolutSendProcessor.SendData calldata _sendData,\n        bytes calldata _verifierSignature\n    )\n        external\n    {\n        (\n            Intent memory intent,\n            Deposit storage deposit,\n            bytes32 intentHash\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\n\n        _pruneIntent(deposit, intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(intentHash, intent);\n    }\n\n    /**\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \n     * deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\n     */\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(deposit.depositor == msg.sender, \"Caller must be the depositor\");\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(_intentHash, intent);\n    }\n\n    /**\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\n     *\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\n     */\n    function withdrawDeposit(uint256[] memory _depositIds) external {\n        uint256 returnAmount;\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit storage deposit = deposits[depositId];\n\n            require(deposit.depositor == msg.sender, \"Sender must be the depositor\");\n\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(depositId);\n\n            _pruneIntents(deposit, prunableIntents);\n\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\n            \n            deposit.outstandingIntentAmount -= reclaimableAmount;\n\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\n            \n            delete deposit.remainingDeposits;\n            _closeDepositIfNecessary(depositId, deposit);\n        }\n\n        usdc.transfer(msg.sender, returnAmount);\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\n     *\n     * @param _sendProcessor   New send proccesor address\n     */\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\n        sendProcessor = _sendProcessor;\n        emit NewSendProcessorSet(address(_sendProcessor));\n    }\n\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\n     *\n     * @param _minDepositAmount   The new minimum deposit amount\n     */\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\n        require(_minDepositAmount != 0, \"Minimum deposit cannot be zero\");\n\n        minDepositAmount = _minDepositAmount;\n        emit MinDepositAmountSet(_minDepositAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\n     *\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\n     */\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \"Fee cannot be greater than max fee\");\n\n        sustainabilityFee = _fee;\n        emit SustainabilityFeeUpdated(_fee);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\n     *\n     * @param _feeRecipient   The new fee recipient address\n     */\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\n        require(_feeRecipient != address(0), \"Fee recipient cannot be zero address\");\n\n        sustainabilityFeeRecipient = _feeRecipient;\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\n     * this amount a user must make multiple transactions.\n     *\n     * @param _maxOnRampAmount   The new max on ramp amount\n     */\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\n        require(_maxOnRampAmount != 0, \"Max on ramp amount cannot be zero\");\n\n        maxOnRampAmount = _maxOnRampAmount;\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\n     * amount of time before they can signalIntent to on-ramp again.\n     *\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\n     */\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\n     * locking up a depositor's funds.\n     *\n     * @param _intentExpirationPeriod   New intent expiration period\n     */\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\n        require(_intentExpirationPeriod != 0, \"Max intent expiration period cannot be zero\");\n\n        intentExpirationPeriod = _intentExpirationPeriod;\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\n    }\n\n\n    /* ============ External View Functions ============ */\n\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\n        return deposits[_depositId];\n    }\n\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\n    }\n\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\n        return uint256(getIdCurrentIntentHash(_account));\n    }\n\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\n    }\n\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\n\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\n            bytes32 intentHash = _intentHashes[i];\n            Intent memory intent = intents[intentHash];\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\n                intentHash: _intentHashes[i],\n                intent: intent,\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\n            });\n        }\n\n        return intentsWithOnRamperId;\n    }\n\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\n        \n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\n            uint256 depositId = accountDepositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            accountDeposits[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n    }\n\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            depositArray[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n\n        return depositArray;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Calculates the intentHash of new intent\n     */\n    function _calculateIntentHash(\n        bytes32 _accountId,\n        uint256 _depositId\n    )\n        internal\n        view\n        virtual\n        returns (bytes32 intentHash)\n    {\n        // Mod with circom prime field to make sure it fits in a 254-bit field\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\n    }\n\n    /**\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\n     * the outstanding amounts are summed and returned alongside the intentHashes\n     */\n    function _getPrunableIntents(\n        uint256 _depositId\n    )\n        internal\n        view\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\n    {\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\n        prunableIntents = new bytes32[](intentHashes.length);\n\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\n            Intent memory intent = intents[intentHashes[i]];\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\n                prunableIntents[i] = intentHashes[i];\n                reclaimedAmount += intent.amount;\n            }\n        }\n    }\n\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\n        for (uint256 i = 0; i < _intents.length; ++i) {\n            if (_intents[i] != bytes32(0)) {\n                _pruneIntent(_deposit, _intents[i]);\n            }\n        }\n    }\n\n    /**\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\n     */\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\n        Intent memory intent = intents[_intentHash];\n\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\n        delete intents[_intentHash];\n        _deposit.intentHashes.removeStorage(_intentHash);\n\n        emit IntentPruned(_intentHash, intent.deposit);\n    }\n\n    /**\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\n     * deposits mapping and removes tracking it in the user's accounts mapping.\n     */\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\n        if (openDepositAmount == 0) {\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\n            emit DepositClosed(_depositId, _deposit.depositor);\n            delete deposits[_depositId];\n        }\n    }\n\n    /**\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\n     */\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\n        uint256 fee;\n        if (sustainabilityFee != 0) {\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\n            usdc.transfer(sustainabilityFeeRecipient, fee);\n        }\n\n        uint256 onRampAmount = _intent.amount - fee;\n        usdc.transfer(_intent.to, onRampAmount);\n\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\n    }\n\n    /**\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\n     * was paid off-chain inclusive of the conversionRate.\n     */\n    function _verifyOnRampProof(\n        IRevolutSendProcessor.SendData calldata _data,\n        bytes calldata _verifierSignature\n    )\n        internal\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\n    {\n        intentHash = bytes32(_data.intentHash);\n        intent = intents[intentHash];\n        require(intent.onRamper == msg.sender, \"Caller must be the on-ramper\");\n\n        deposit = deposits[intent.deposit];\n\n        (\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperId,\n            bytes32 currencyId,\n            bytes32 notaryKeyHash\n        ) = sendProcessor.processProof(\n            IRevolutSendProcessor.SendProof({\n                public_values: _data,\n                proof: _verifierSignature\n            }),\n            deposit.verifierSigningKey\n        );\n\n        require(notaryKeyHash == deposit.notaryKeyHash, \"Incorrect notary used for notarization\");\n        require(currencyId == deposit.receiveCurrencyId, \"Wrong currency sent\");\n        require(intent.intentTimestamp <= timestamp, \"Intent was not created before send\");\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \"Offramper id does not match\");\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \"Payment was not enough\");\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/RevolutSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { SignatureChecker } from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\n\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IRevolutSendProcessor } from \"./interfaces/IRevolutSendProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\nimport { TLSBaseProcessor } from \"../../processors/TLSBaseProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\n\n    using ECDSA for bytes32;\n    using SignatureChecker for address;\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\"COMPLETED\"));\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        INullifierRegistry _nullifierRegistry,\n        uint256 _timestampBuffer,\n        string memory _endpoint,\n        string memory _host\n    )\n        TLSBaseProcessor(\n            _ramp,\n            _nullifierRegistry,\n            _timestampBuffer,\n            _endpoint,\n            _host\n        )\n    {}\n    \n    /* ============ External Functions ============ */\n    function processProof(\n        IRevolutSendProcessor.SendProof calldata _proof,\n        address _verifierSigningKey\n    )\n        public\n        override\n        onlyRamp\n        returns(\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperId,\n            bytes32 currencyId,\n            bytes32 notaryKeyHash\n        )\n    {\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\n\n        _validateTLSEndpoint(\n            endpoint.replaceString(\"*\", _proof.public_values.transferId),\n            _proof.public_values.endpoint\n        );\n        _validateTLSHost(host, _proof.public_values.host);\n        \n        // Validate status\n        require(\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\n            \"Payment status not confirmed as sent\"\n        );\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\"Revolut\", _proof.public_values.transferId)));\n\n        amount = _parseAmount(_proof.public_values.amount);\n\n        // Add the buffer to build in flexibility with L2 timestamps\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\n\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\n    }\n\n    /* ============ View Functions ============ */\n\n    function verifyProof(\n        address _verifierSigningKey,\n        IRevolutSendProcessor.SendData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n        returns(bool)\n    {   \n        bytes memory encodedMessage = abi.encode(\n            _publicValues.endpoint,\n            _publicValues.host,\n            _publicValues.transferId,\n            _publicValues.recipientId,\n            _publicValues.amount,\n            _publicValues.currencyId,\n            _publicValues.status,\n            _publicValues.timestamp,\n            _publicValues.intentHash,\n            _publicValues.notaryKeyHash\n        );\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _validateProof(\n        address _verifierSigningKey,\n        IRevolutSendProcessor.SendData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n    {   \n        require(\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\n            \"Invalid proof\"\n        );\n    }\n\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\n        // it would be a receive transaction\n        require(bytes(amount)[0] == 0x2D, \"Not a send transaction\");   \n        return amount.stringToUint(6);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IRevolutAccountRegistrationProcessor {\n\n    struct RegistrationData {\n        string endpoint;\n        string host;\n        string profileId;\n        address userAddress;\n        uint256 notaryKeyHash;\n    }\n\n    struct RegistrationProof {\n        RegistrationData public_values;\n        bytes proof;\n    }\n\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        external\n    returns (bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IRevolutAccountRegistry {\n    function getAccountId(address _account) external view returns (bytes32);\n    function isRegisteredUser(address _account) external view returns (bool);\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IRevolutSendProcessor {\n\n    struct SendData {\n        string endpoint;\n        string host;\n        string transferId;\n        string recipientId;\n        string amount;\n        string currencyId;\n        string status;\n        string timestamp;\n        uint256 intentHash;\n        uint256 notaryKeyHash;\n    }\n\n    struct SendProof {\n        SendData public_values;\n        bytes proof;\n    }\n\n    function processProof(\n        SendProof calldata _proof,\n        address _verifierSigningKey\n    )\n        external\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/mocks/RevolutAccountRegistrationProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IRevolutAccountRegistrationProcessor } from \"../interfaces/IRevolutAccountRegistrationProcessor.sol\";\nimport { StringConversionUtils } from \"../../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract RevolutAccountRegistrationProcessorMock is IRevolutAccountRegistrationProcessor {\n\n    using StringConversionUtils for string;\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        public\n        pure\n        override\n        returns(bytes32 onRampId)\n    {\n        return bytes32(_proof.public_values.profileId.stringToUint(0));\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/revolut/mocks/RevolutSendProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IRevolutSendProcessor } from \"../interfaces/IRevolutSendProcessor.sol\";\nimport { StringConversionUtils } from \"../../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract RevolutSendProcessorMock is IRevolutSendProcessor {\n\n    using StringConversionUtils for string;\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        SendProof calldata _proof,\n        address /*_verifierSigningKey*/\n    )\n        public\n        pure\n        override\n        returns(\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 revolutTagHash,\n            bytes32 currencyId,\n            bytes32 notaryKeyHash\n        )\n    {\n        return(\n            _proof.public_values.amount.stringToUint(6),\n            _proof.public_values.timestamp.stringToUint(0),\n            keccak256(abi.encodePacked(_proof.public_values.recipientId)),\n            keccak256(abi.encodePacked(_proof.public_values.currencyId)),\n            bytes32(_proof.public_values.notaryKeyHash)\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v1/Ramp.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IPoseidon } from \"../../interfaces/IPoseidon.sol\";\nimport { IRegistrationProcessor } from \"./interfaces/IRegistrationProcessor.sol\";\nimport { ISendProcessor } from \"./interfaces/ISendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract Ramp is Ownable {\n\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\n    event DepositReceived(\n        uint256 indexed depositId,\n        bytes32 indexed venmoId,\n        uint256 amount,\n        uint256 conversionRate\n    );\n    event IntentSignaled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        bytes32 indexed venmoId,\n        address to,\n        uint256 amount,\n        uint256 timestamp\n    );\n\n    event IntentPruned(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId\n    );\n    // Do we want to emit the onRamper or the venmoId\n    event IntentFulfilled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        address indexed onRamper,\n        address to,\n        uint256 amount,\n        uint256 feeAmount\n    );\n    // Do we want to emit the depositor or the venmoId\n    event DepositWithdrawn(\n        uint256 indexed depositId,\n        address indexed depositor,\n        uint256 amount\n    );\n\n    event DepositClosed(uint256 depositId, address depositor);\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\n    event MinDepositAmountSet(uint256 minDepositAmount);\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\n    event SustainabilityFeeUpdated(uint256 fee);\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\n    event NewSendProcessorSet(address sendProcessor);\n    event NewRegistrationProcessorSet(address registrationProcessor);\n    event NewReceiveProcessorSet(address receiveProcessor);\n\n    /* ============ Structs ============ */\n\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\n    // and is allowed to have at most 5 deposits associated with it.\n    struct AccountInfo {\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\n        uint256[] deposits;                 // Array of open account deposits\n    }\n\n    struct Deposit {\n        address depositor;\n        uint256[3] packedVenmoId;\n        uint256 depositAmount;              // Amount of USDC deposited\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\n    }\n\n    struct DepositWithAvailableLiquidity {\n        uint256 depositId;                  // ID of the deposit\n        Deposit deposit;                    // Deposit struct\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\n    }\n\n    struct Intent {\n        address onRamper;                   // On-ramper's address\n        address to;                         // Address to forward funds to (can be same as onRamper)\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\n    }\n\n    struct IntentWithOnRamperId {\n        Intent intent;                      // Intent struct\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\n    }\n\n    struct DenyList {\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\n    }\n\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\n    struct GlobalAccountInfo {\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\n        DenyList denyList;                  // Deny list of the account\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ Constants ============ */\n    uint256 internal constant PRECISE_UNIT = 1e18;\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\n    \n    /* ============ State Variables ============ */\n    IERC20 public immutable usdc;                                   // USDC token contract\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\n\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\n\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\n\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\n\n    uint256 public depositCounter;                                  // Counter for depositIds\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner,\n        IERC20 _usdc,\n        IPoseidon _poseidon,\n        uint256 _minDepositAmount,\n        uint256 _maxOnRampAmount,\n        uint256 _intentExpirationPeriod,\n        uint256 _onRampCooldownPeriod,\n        uint256 _sustainabilityFee,\n        address _sustainabilityFeeRecipient\n    )\n        Ownable()\n    {\n        usdc = _usdc;\n        poseidon = _poseidon;\n        minDepositAmount = _minDepositAmount;\n        maxOnRampAmount = _maxOnRampAmount;\n        intentExpirationPeriod = _intentExpirationPeriod;\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        sustainabilityFee = _sustainabilityFee;\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\n\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _registrationProcessor    Registration processor address\n     * @param _sendProcessor            Send processor address\n     */\n    function initialize(\n        IRegistrationProcessor _registrationProcessor,\n        ISendProcessor _sendProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        registrationProcessor = _registrationProcessor;\n        sendProcessor = _sendProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\n     *\n     * @param _a        Parameter of zk proof\n     * @param _b        Parameter of zk proof\n     * @param _c        Parameter of zk proof\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\n     */\n    function register(\n        uint[2] memory _a,\n        uint[2][2] memory _b,\n        uint[2] memory _c,\n        uint[5] memory _signals\n    )\n        external\n    {\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \"Account already associated with venmoId\");\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\n\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\n\n        emit AccountRegistered(msg.sender, venmoIdHash);\n    }\n\n    /**\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\n     * of USDC.\n     *\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\n     * @param _depositAmount    The amount of USDC to off-ramp\n     * @param _receiveAmount    The amount of USD to receive\n     */\n    function offRamp(\n        uint256[3] memory _packedVenmoId,\n        uint256 _depositAmount,\n        uint256 _receiveAmount\n    )\n        external\n        onlyRegisteredUser\n    {\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\n\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \"Sender must be the account owner\");\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \"Maximum deposit amount reached\");\n        require(_depositAmount >= minDepositAmount, \"Deposit amount must be greater than min deposit amount\");\n        require(_receiveAmount > 0, \"Receive amount must be greater than 0\");\n\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\n        uint256 depositId = depositCounter++;\n\n        accounts[msg.sender].deposits.push(depositId);\n\n        deposits[depositId] = Deposit({\n            depositor: msg.sender,\n            packedVenmoId: _packedVenmoId,\n            depositAmount: _depositAmount,\n            remainingDeposits: _depositAmount,\n            outstandingIntentAmount: 0,\n            conversionRate: conversionRate,\n            intentHashes: new bytes32[](0)\n        });\n\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\n\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\n    }\n\n    /**\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\n     * they will be deleted from the deposit to be able to maintain state hygiene.\n     *\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \n     * @param _amount       The amount of USDC the user wants to on-ramp\n     * @param _to           Address to forward funds to (can be same as onRamper)\n     */\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\n        Deposit storage deposit = deposits[_depositId];\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\n\n        // Caller validity checks\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \"Onramper on depositor's denylist\");\n        require(\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\n            \"On ramp cool down period not elapsed\"\n        );\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \"Intent still outstanding\");\n        require(depositorVenmoIdHash != venmoIdHash, \"Sender cannot be the depositor\");\n\n        // Intent information checks\n        require(deposit.depositor != address(0), \"Deposit does not exist\");\n        require(_amount > 0, \"Signaled amount must be greater than 0\");\n        require(_amount <= maxOnRampAmount, \"Signaled amount must be less than max on-ramp amount\");\n        require(_to != address(0), \"Cannot send to zero address\");\n\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\n\n        if (deposit.remainingDeposits < _amount) {\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(_depositId);\n\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \"Not enough liquidity\");\n\n            _pruneIntents(deposit, prunableIntents);\n            deposit.remainingDeposits += reclaimableAmount;\n            deposit.outstandingIntentAmount -= reclaimableAmount;\n        }\n\n        intents[intentHash] = Intent({\n            onRamper: msg.sender,\n            to: _to,\n            deposit: _depositId,\n            amount: _amount,\n            intentTimestamp: block.timestamp\n        });\n\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\n\n        deposit.remainingDeposits -= _amount;\n        deposit.outstandingIntentAmount += _amount;\n        deposit.intentHashes.push(intentHash);\n\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\n    }\n\n    /**\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\n     * intent. Deposit state is updated to reflect the cancelled intent.\n     *\n     * @param _intentHash    Hash of intent being cancelled\n     */\n    function cancelIntent(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        \n        require(intent.intentTimestamp != 0, \"Intent does not exist\");\n        require(intent.onRamper == msg.sender, \"Sender must be the on-ramper\");\n\n        Deposit storage deposit = deposits[intent.deposit];\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.remainingDeposits += intent.amount;\n        deposit.outstandingIntentAmount -= intent.amount;\n    }\n\n    /**\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _a        Parameter of zk proof\n     * @param _b        Parameter of zk proof\n     * @param _c        Parameter of zk proof\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\n     *                  nullifier, intentHash\n     */\n    function onRamp(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[12] memory _signals\n    )\n        external\n    {\n        (\n            Intent memory intent,\n            Deposit storage deposit,\n            bytes32 intentHash\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\n\n        _pruneIntent(deposit, intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(intentHash, intent);\n    }\n\n    /**\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\n     *\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\n     */\n    function withdrawDeposit(uint256[] memory _depositIds) external {\n        uint256 returnAmount;\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit storage deposit = deposits[depositId];\n\n            require(deposit.depositor == msg.sender, \"Sender must be the depositor\");\n\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(depositId);\n\n            _pruneIntents(deposit, prunableIntents);\n\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\n            \n            deposit.outstandingIntentAmount -= reclaimableAmount;\n\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\n            \n            delete deposit.remainingDeposits;\n            _closeDepositIfNecessary(depositId, deposit);\n        }\n\n        usdc.transfer(msg.sender, returnAmount);\n    }\n\n    /**\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\n     * signal an intent on the user's deposit they will be denied.\n     *\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\n     */\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\n\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \"User already on denylist\");\n\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\n\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\n    }\n\n    /**\n     * @notice Removes a venmoId from a depositor's deny list.\n     *\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\n     */\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\n\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \"User not on denylist\");\n\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\n\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\n     *\n     * @param _sendProcessor   New send proccesor address\n     */\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\n        sendProcessor = _sendProcessor;\n        emit NewSendProcessorSet(address(_sendProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\n     *\n     * @param _registrationProcessor   New registration proccesor address\n     */\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\n        registrationProcessor = _registrationProcessor;\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\n     *\n     * @param _minDepositAmount   The new minimum deposit amount\n     */\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\n        require(_minDepositAmount != 0, \"Minimum deposit cannot be zero\");\n\n        minDepositAmount = _minDepositAmount;\n        emit MinDepositAmountSet(_minDepositAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\n     *\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\n     */\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \"Fee cannot be greater than max fee\");\n\n        sustainabilityFee = _fee;\n        emit SustainabilityFeeUpdated(_fee);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\n     *\n     * @param _feeRecipient   The new fee recipient address\n     */\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\n        require(_feeRecipient != address(0), \"Fee recipient cannot be zero address\");\n\n        sustainabilityFeeRecipient = _feeRecipient;\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\n     * this amount a user must make multiple transactions.\n     *\n     * @param _maxOnRampAmount   The new max on ramp amount\n     */\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\n        require(_maxOnRampAmount != 0, \"Max on ramp amount cannot be zero\");\n\n        maxOnRampAmount = _maxOnRampAmount;\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\n     * amount of time before they can signalIntent to on-ramp again.\n     *\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\n     */\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\n     * locking up a depositor's funds.\n     *\n     * @param _intentExpirationPeriod   New intent expiration period\n     */\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\n        require(_intentExpirationPeriod != 0, \"Max intent expiration period cannot be zero\");\n\n        intentExpirationPeriod = _intentExpirationPeriod;\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\n    }\n\n\n    /* ============ External View Functions ============ */\n\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\n        return deposits[_depositId];\n    }\n\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\n        return accounts[_account];\n    }\n\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\n    }\n\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\n    }\n\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\n    }\n\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\n    }\n\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\n\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\n            Intent memory intent = intents[_intentHashes[i]];\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\n                intent: intent,\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\n            });\n        }\n\n        return intentsWithOnRamperId;\n    }\n\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\n        \n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\n            uint256 depositId = accountDepositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            accountDeposits[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n    }\n\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            depositArray[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n\n        return depositArray;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Calculates the intentHash of new intent\n     */\n    function _calculateIntentHash(\n        bytes32 _venmoId,\n        uint256 _depositId\n    )\n        internal\n        view\n        virtual\n        returns (bytes32 intentHash)\n    {\n        // Mod with circom prime field to make sure it fits in a 254-bit field\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\n    }\n\n    /**\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\n     * the outstanding amounts are summed and returned alongside the intentHashes\n     */\n    function _getPrunableIntents(\n        uint256 _depositId\n    )\n        internal\n        view\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\n    {\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\n        prunableIntents = new bytes32[](intentHashes.length);\n\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\n            Intent memory intent = intents[intentHashes[i]];\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\n                prunableIntents[i] = intentHashes[i];\n                reclaimedAmount += intent.amount;\n            }\n        }\n    }\n\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\n        for (uint256 i = 0; i < _intents.length; ++i) {\n            if (_intents[i] != bytes32(0)) {\n                _pruneIntent(_deposit, _intents[i]);\n            }\n        }\n    }\n\n    /**\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\n     */\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\n        Intent memory intent = intents[_intentHash];\n\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\n        delete intents[_intentHash];\n        _deposit.intentHashes.removeStorage(_intentHash);\n\n        emit IntentPruned(_intentHash, intent.deposit);\n    }\n\n    /**\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\n     * deposits mapping and removes tracking it in the user's accounts mapping.\n     */\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\n        if (openDepositAmount == 0) {\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\n            emit DepositClosed(_depositId, _deposit.depositor);\n            delete deposits[_depositId];\n        }\n    }\n\n    /**\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\n     */\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\n        uint256 fee;\n        if (sustainabilityFee != 0) {\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\n            usdc.transfer(sustainabilityFeeRecipient, fee);\n        }\n\n        uint256 onRampAmount = _intent.amount - fee;\n        usdc.transfer(_intent.to, onRampAmount);\n\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\n    }\n\n    /**\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\n     * was paid off-chain inclusive of the conversionRate.\n     */\n    function _verifyOnRampProof(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[12] memory _signals\n    )\n        internal\n        returns(Intent memory, Deposit storage, bytes32)\n    {\n        (\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperIdHash,\n            bytes32 onRamperIdHash,\n            bytes32 intentHash\n        ) = sendProcessor.processProof(\n            ISendProcessor.SendProof({\n                a: _a,\n                b: _b,\n                c: _c,\n                signals: _signals\n            })\n        );\n\n        Intent memory intent = intents[intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(intent.intentTimestamp <= timestamp, \"Intent was not created before send\");\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \"Offramper id does not match\");\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \"Onramper id does not match\");\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \"Payment was not enough\");\n\n        return (intent, deposit, intentHash);\n    }\n\n    /**\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\n     * different addresses.\n     */\n    function _verifyRegistrationProof(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[5] memory _signals\n    )\n        internal\n        view\n        returns(bytes32)\n    {\n        bytes32 venmoIdHash = registrationProcessor.processProof(\n            IRegistrationProcessor.RegistrationProof({\n                a: _a,\n                b: _b,\n                c: _c,\n                signals: _signals\n            })\n        );\n\n        return venmoIdHash;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessor } from \"../../processors/BaseProcessor.sol\";\nimport { Groth16Verifier } from \"../../verifiers/venmo_registration_verifier.sol\";\nimport { IKeyHashAdapter } from \"../../processors/keyHashAdapters/IKeyHashAdapter.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IRegistrationProcessor } from \"./interfaces/IRegistrationProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\n\n    using StringUtils for uint256[];\n\n    /* ============ Constants ============ */\n    uint256 constant public PACK_SIZE = 7;\n    \n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress\n    )\n        Groth16Verifier()\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\n    {}\n\n    /* ============ External Functions ============ */\n\n    function processProof(\n        IRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        public\n        view\n        override\n        onlyRamp\n        returns(bytes32 userIdHash)\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \"Invalid mailserver key hash\");\n\n        // Signals [1:4] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        // Signals [4] is the packed onRamperIdHash\n        userIdHash = bytes32(_proof.signals[4]);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v1/VenmoSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessor } from \"../../processors/BaseProcessor.sol\";\nimport { Groth16Verifier } from \"../../verifiers/venmo_send_verifier_v1.sol\";\nimport { IKeyHashAdapter } from \"../../processors/keyHashAdapters/IKeyHashAdapter.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { ISendProcessor } from \"./interfaces/ISendProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\n    \n    using StringUtils for uint256[];\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    uint256 constant public PACK_SIZE = 7;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress\n    )\n        Groth16Verifier()\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\n    {}\n    \n    /* ============ External Functions ============ */\n    function processProof(\n        ISendProcessor.SendProof calldata _proof\n    )\n        public\n        override\n        onlyRamp\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \"Invalid mailserver key hash\");\n\n        // Signals [1:4] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\n\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\n        // specify 0 decimals, if any decimal appears this function will revert\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\n\n        // Signals [8] is the packed offRamperIdHash\n        offRamperIdHash = bytes32(_proof.signals[8]);\n\n        // Signals [9] is the packed onRamperIdHash\n        onRamperIdHash = bytes32(_proof.signals[9]);\n\n        // Check if email has been used previously, if not nullify it so it can't be used again\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\n\n        // Signals [11] is intentHash\n        intentHash = bytes32(_proof.signals[11]);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IRegistrationProcessor {\n\n    struct RegistrationProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[5] signals;\n    }\n\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        external\n        view\n    returns (bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface ISendProcessor {\n\n    struct SendProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[12] signals;\n    }\n\n    function processProof(\n        SendProof calldata _proof\n    )\n        external\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IRegistrationProcessor } from \"../interfaces/IRegistrationProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        public\n        pure\n        override\n        returns(bytes32 onRamperIdHash)\n    {\n        return(bytes32(_proof.signals[1]));\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ISendProcessor } from \"../interfaces/ISendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VenmoSendProcessorMock is ISendProcessor {\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        SendProof calldata _proof\n    )\n        public\n        pure\n        override\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\n    {\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v2/VenmoRampV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IPoseidon } from \"../../interfaces/IPoseidon.sol\";\nimport { IRamp } from \"./interfaces/IRamp.sol\";\nimport { IRegistrationProcessorV2 } from \"./interfaces/IRegistrationProcessorV2.sol\";\nimport { ISendProcessor } from \"../venmo-v1/interfaces/ISendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VenmoRampV2 is Ownable {\n\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\n    event DepositReceived(\n        uint256 indexed depositId,\n        bytes32 indexed venmoId,\n        uint256 amount,\n        uint256 conversionRate\n    );\n    event IntentSignaled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        bytes32 indexed venmoId,\n        address to,\n        uint256 amount,\n        uint256 timestamp\n    );\n\n    event IntentPruned(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId\n    );\n    // Do we want to emit the onRamper or the venmoId\n    event IntentFulfilled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        address indexed onRamper,\n        address to,\n        uint256 amount,\n        uint256 feeAmount\n    );\n    // Do we want to emit the depositor or the venmoId\n    event DepositWithdrawn(\n        uint256 indexed depositId,\n        address indexed depositor,\n        uint256 amount\n    );\n\n    event DepositClosed(uint256 depositId, address depositor);\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\n    event MinDepositAmountSet(uint256 minDepositAmount);\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\n    event SustainabilityFeeUpdated(uint256 fee);\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\n    event NewSendProcessorSet(address sendProcessor);\n    event NewRegistrationProcessorSet(address registrationProcessor);\n    event NewReceiveProcessorSet(address receiveProcessor);\n\n    /* ============ Structs ============ */\n\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\n    // and is allowed to have at most 5 deposits associated with it.\n    struct AccountInfo {\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\n        uint256[] deposits;                 // Array of open account deposits\n    }\n\n    struct Deposit {\n        address depositor;\n        uint256[3] packedVenmoId;\n        uint256 depositAmount;              // Amount of USDC deposited\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\n    }\n\n    struct DepositWithAvailableLiquidity {\n        uint256 depositId;                  // ID of the deposit\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \n        Deposit deposit;                    // Deposit struct\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\n    }\n\n    struct Intent {\n        address onRamper;                   // On-ramper's address\n        address to;                         // Address to forward funds to (can be same as onRamper)\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\n    }\n\n    struct IntentWithOnRamperId {\n        bytes32 intentHash;                 // Intent hash\n        Intent intent;                      // Intent struct\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\n    }\n\n    struct DenyList {\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\n    }\n\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\n    struct GlobalAccountInfo {\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\n        DenyList denyList;                  // Deny list of the account\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ Constants ============ */\n    uint256 internal constant PRECISE_UNIT = 1e18;\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\n    \n    /* ============ State Variables ============ */\n    IERC20 public immutable usdc;                                   // USDC token contract\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\n\n    bool public isInitialized;                                      // Indicates if contract has been initialized\n\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\n\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\n\n    uint256 public depositCounter;                                  // Counter for depositIds\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner,\n        IRamp _ramp,\n        IERC20 _usdc,\n        IPoseidon _poseidon,\n        uint256 _minDepositAmount,\n        uint256 _maxOnRampAmount,\n        uint256 _intentExpirationPeriod,\n        uint256 _onRampCooldownPeriod,\n        uint256 _sustainabilityFee,\n        address _sustainabilityFeeRecipient\n    )\n        Ownable()\n    {\n        usdc = _usdc;\n        ramp = _ramp;\n        poseidon = _poseidon;\n        minDepositAmount = _minDepositAmount;\n        maxOnRampAmount = _maxOnRampAmount;\n        intentExpirationPeriod = _intentExpirationPeriod;\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        sustainabilityFee = _sustainabilityFee;\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\n\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _registrationProcessor    Registration processor address\n     * @param _sendProcessor            Send processor address\n     */\n    function initialize(\n        IRegistrationProcessorV2 _registrationProcessor,\n        ISendProcessor _sendProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        registrationProcessor = _registrationProcessor;\n        sendProcessor = _sendProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\n     *\n     * @param _a        Parameter of zk proof\n     * @param _b        Parameter of zk proof\n     * @param _c        Parameter of zk proof\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\n     */\n    function register(\n        uint[2] memory _a,\n        uint[2][2] memory _b,\n        uint[2] memory _c,\n        uint[5] memory _signals\n    )\n        external\n    {\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \"Account already associated with venmoId\");\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\n\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\n\n        emit AccountRegistered(msg.sender, venmoIdHash);\n    }\n\n    /**\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\n     * of USDC.\n     *\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\n     * @param _depositAmount    The amount of USDC to off-ramp\n     * @param _receiveAmount    The amount of USD to receive\n     */\n    function offRamp(\n        uint256[3] memory _packedVenmoId,\n        uint256 _depositAmount,\n        uint256 _receiveAmount\n    )\n        external\n        onlyRegisteredUser\n    {\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\n\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \"Sender must be the account owner\");\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \"Maximum deposit amount reached\");\n        require(_depositAmount >= minDepositAmount, \"Deposit amount must be greater than min deposit amount\");\n        require(_receiveAmount > 0, \"Receive amount must be greater than 0\");\n\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\n        uint256 depositId = depositCounter++;\n\n        accounts[msg.sender].deposits.push(depositId);\n\n        deposits[depositId] = Deposit({\n            depositor: msg.sender,\n            packedVenmoId: _packedVenmoId,\n            depositAmount: _depositAmount,\n            remainingDeposits: _depositAmount,\n            outstandingIntentAmount: 0,\n            conversionRate: conversionRate,\n            intentHashes: new bytes32[](0)\n        });\n\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\n\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\n    }\n\n    /**\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\n     * they will be deleted from the deposit to be able to maintain state hygiene.\n     *\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \n     * @param _amount       The amount of USDC the user wants to on-ramp\n     * @param _to           Address to forward funds to (can be same as onRamper)\n     */\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\n        Deposit storage deposit = deposits[_depositId];\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\n\n        // Caller validity checks\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \"Onramper on depositor's denylist\");\n        require(\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\n            \"On ramp cool down period not elapsed\"\n        );\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \"Intent still outstanding\");\n        require(depositorVenmoIdHash != venmoIdHash, \"Sender cannot be the depositor\");\n\n        // Intent information checks\n        require(deposit.depositor != address(0), \"Deposit does not exist\");\n        require(_amount > 0, \"Signaled amount must be greater than 0\");\n        require(_amount <= maxOnRampAmount, \"Signaled amount must be less than max on-ramp amount\");\n        require(_to != address(0), \"Cannot send to zero address\");\n\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\n\n        if (deposit.remainingDeposits < _amount) {\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(_depositId);\n\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \"Not enough liquidity\");\n\n            _pruneIntents(deposit, prunableIntents);\n            deposit.remainingDeposits += reclaimableAmount;\n            deposit.outstandingIntentAmount -= reclaimableAmount;\n        }\n\n        intents[intentHash] = Intent({\n            onRamper: msg.sender,\n            to: _to,\n            deposit: _depositId,\n            amount: _amount,\n            intentTimestamp: block.timestamp\n        });\n\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\n\n        deposit.remainingDeposits -= _amount;\n        deposit.outstandingIntentAmount += _amount;\n        deposit.intentHashes.push(intentHash);\n\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\n    }\n\n    /**\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\n     * intent. Deposit state is updated to reflect the cancelled intent.\n     *\n     * @param _intentHash    Hash of intent being cancelled\n     */\n    function cancelIntent(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        \n        require(intent.intentTimestamp != 0, \"Intent does not exist\");\n        require(\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\n            \"Sender must be the on-ramper\"\n        );\n\n        Deposit storage deposit = deposits[intent.deposit];\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.remainingDeposits += intent.amount;\n        deposit.outstandingIntentAmount -= intent.amount;\n    }\n\n    /**\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _a        Parameter of zk proof\n     * @param _b        Parameter of zk proof\n     * @param _c        Parameter of zk proof\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\n     *                  nullifier, intentHash\n     */\n    function onRamp(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[12] memory _signals\n    )\n        external\n    {\n        (\n            Intent memory intent,\n            Deposit storage deposit,\n            bytes32 intentHash\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\n\n        _pruneIntent(deposit, intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(intentHash, intent);\n    }\n\n    /**\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \n     * deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\n     */\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(deposit.depositor == msg.sender, \"Caller must be the depositor\");\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(_intentHash, intent);\n    }\n\n    /**\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\n     *\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\n     */\n    function withdrawDeposit(uint256[] memory _depositIds) external {\n        uint256 returnAmount;\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit storage deposit = deposits[depositId];\n\n            require(deposit.depositor == msg.sender, \"Sender must be the depositor\");\n\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(depositId);\n\n            _pruneIntents(deposit, prunableIntents);\n\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\n            \n            deposit.outstandingIntentAmount -= reclaimableAmount;\n\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\n            \n            delete deposit.remainingDeposits;\n            _closeDepositIfNecessary(depositId, deposit);\n        }\n\n        usdc.transfer(msg.sender, returnAmount);\n    }\n\n    /**\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\n     * signal an intent on the user's deposit they will be denied.\n     *\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\n     */\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\n\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \"User already on denylist\");\n\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\n\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\n    }\n\n    /**\n     * @notice Removes a venmoId from a depositor's deny list.\n     *\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\n     */\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\n\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \"User not on denylist\");\n\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\n\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\n     *\n     * @param _sendProcessor   New send proccesor address\n     */\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\n        sendProcessor = _sendProcessor;\n        emit NewSendProcessorSet(address(_sendProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\n     *\n     * @param _registrationProcessor   New registration proccesor address\n     */\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\n        registrationProcessor = _registrationProcessor;\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\n     *\n     * @param _minDepositAmount   The new minimum deposit amount\n     */\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\n        require(_minDepositAmount != 0, \"Minimum deposit cannot be zero\");\n\n        minDepositAmount = _minDepositAmount;\n        emit MinDepositAmountSet(_minDepositAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\n     *\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\n     */\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \"Fee cannot be greater than max fee\");\n\n        sustainabilityFee = _fee;\n        emit SustainabilityFeeUpdated(_fee);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\n     *\n     * @param _feeRecipient   The new fee recipient address\n     */\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\n        require(_feeRecipient != address(0), \"Fee recipient cannot be zero address\");\n\n        sustainabilityFeeRecipient = _feeRecipient;\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\n     * this amount a user must make multiple transactions.\n     *\n     * @param _maxOnRampAmount   The new max on ramp amount\n     */\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\n        require(_maxOnRampAmount != 0, \"Max on ramp amount cannot be zero\");\n\n        maxOnRampAmount = _maxOnRampAmount;\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\n     * amount of time before they can signalIntent to on-ramp again.\n     *\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\n     */\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\n     * locking up a depositor's funds.\n     *\n     * @param _intentExpirationPeriod   New intent expiration period\n     */\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\n        require(_intentExpirationPeriod != 0, \"Max intent expiration period cannot be zero\");\n\n        intentExpirationPeriod = _intentExpirationPeriod;\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\n    }\n\n\n    /* ============ External View Functions ============ */\n\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\n        return deposits[_depositId];\n    }\n\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\n        return AccountInfo({\n            venmoIdHash: getAccountVenmoIdHash(_account),\n            deposits: accounts[_account].deposits\n        });\n    }\n\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\n        return accounts[_account].venmoIdHash == bytes32(0) ?\n            ramp.getAccountInfo(_account).venmoIdHash :\n            accounts[_account].venmoIdHash;\n    }\n\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\n    }\n\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\n    }\n\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\n    }\n\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\n    }\n\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\n\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\n            bytes32 intentHash = _intentHashes[i];\n            Intent memory intent = intents[intentHash];\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\n                intentHash: _intentHashes[i],\n                intent: intent,\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\n            });\n        }\n\n        return intentsWithOnRamperId;\n    }\n\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\n        \n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\n            uint256 depositId = accountDepositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            accountDeposits[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n    }\n\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            depositArray[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n\n        return depositArray;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Calculates the intentHash of new intent\n     */\n    function _calculateIntentHash(\n        bytes32 _venmoId,\n        uint256 _depositId\n    )\n        internal\n        view\n        virtual\n        returns (bytes32 intentHash)\n    {\n        // Mod with circom prime field to make sure it fits in a 254-bit field\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\n    }\n\n    /**\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\n     * the outstanding amounts are summed and returned alongside the intentHashes\n     */\n    function _getPrunableIntents(\n        uint256 _depositId\n    )\n        internal\n        view\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\n    {\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\n        prunableIntents = new bytes32[](intentHashes.length);\n\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\n            Intent memory intent = intents[intentHashes[i]];\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\n                prunableIntents[i] = intentHashes[i];\n                reclaimedAmount += intent.amount;\n            }\n        }\n    }\n\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\n        for (uint256 i = 0; i < _intents.length; ++i) {\n            if (_intents[i] != bytes32(0)) {\n                _pruneIntent(_deposit, _intents[i]);\n            }\n        }\n    }\n\n    /**\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\n     */\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\n        Intent memory intent = intents[_intentHash];\n\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\n        delete intents[_intentHash];\n        _deposit.intentHashes.removeStorage(_intentHash);\n\n        emit IntentPruned(_intentHash, intent.deposit);\n    }\n\n    /**\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\n     * deposits mapping and removes tracking it in the user's accounts mapping.\n     */\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\n        if (openDepositAmount == 0) {\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\n            emit DepositClosed(_depositId, _deposit.depositor);\n            delete deposits[_depositId];\n        }\n    }\n\n    /**\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\n     */\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\n        uint256 fee;\n        if (sustainabilityFee != 0) {\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\n            usdc.transfer(sustainabilityFeeRecipient, fee);\n        }\n\n        uint256 onRampAmount = _intent.amount - fee;\n        usdc.transfer(_intent.to, onRampAmount);\n\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\n    }\n\n    /**\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\n     * was paid off-chain inclusive of the conversionRate.\n     */\n    function _verifyOnRampProof(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[12] memory _signals\n    )\n        internal\n        returns(Intent memory, Deposit storage, bytes32)\n    {\n        (\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperIdHash,\n            bytes32 onRamperIdHash,\n            bytes32 intentHash\n        ) = sendProcessor.processProof(\n            ISendProcessor.SendProof({\n                a: _a,\n                b: _b,\n                c: _c,\n                signals: _signals\n            })\n        );\n\n        Intent memory intent = intents[intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(intent.intentTimestamp <= timestamp, \"Intent was not created before send\");\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \"Offramper id does not match\");\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \"Onramper id does not match\");\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \"Payment was not enough\");\n\n        return (intent, deposit, intentHash);\n    }\n\n    /**\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\n     * different addresses.\n     */\n    function _verifyRegistrationProof(\n        uint256[2] memory _a,\n        uint256[2][2] memory _b,\n        uint256[2] memory _c,\n        uint256[5] memory _signals\n    )\n        internal\n        returns(bytes32)\n    {\n        bytes32 venmoIdHash = registrationProcessor.processProof(\n            IRegistrationProcessorV2.RegistrationProof({\n                a: _a,\n                b: _b,\n                c: _c,\n                signals: _signals\n            })\n        );\n\n        return venmoIdHash;\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessorV2 } from \"../../processors/BaseProcessorV2.sol\";\nimport { Groth16Verifier } from \"../../verifiers/venmo_registration_verifier.sol\";\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IRegistrationProcessorV2 } from \"./interfaces/IRegistrationProcessorV2.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\n\n    using StringUtils for uint256[];\n\n    /* ============ Constants ============ */\n    uint256 constant public PACK_SIZE = 7;\n    \n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Groth16Verifier()\n        BaseProcessorV2(\n            _ramp,\n            _venmoMailserverKeyHashAdapter,\n            _nullifierRegistry,\n            _emailFromAddress,\n            _timestampBuffer\n        )\n    {}\n\n    /* ============ External Functions ============ */\n\n    function processProof(\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\n    )\n        public\n        override\n        onlyRamp\n        returns(bytes32 userIdHash)\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \"Invalid mailserver key hash\");\n\n        // Signals [1:4] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\n\n        // Signals [4] is the packed onRamperIdHash\n        userIdHash = bytes32(_proof.signals[4]);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { StringUtils } from \"@zk-email/contracts/utils/StringUtils.sol\";\n\nimport { BaseProcessorV2 } from \"../../processors/BaseProcessorV2.sol\";\nimport { Groth16Verifier } from \"../../verifiers/venmo_send_verifier.sol\";\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { ISendProcessor } from \"../venmo-v1/interfaces/ISendProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\n    \n    using StringUtils for uint256[];\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    uint256 constant public PACK_SIZE = 7;\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\n        INullifierRegistry _nullifierRegistry,\n        string memory _emailFromAddress,\n        uint256 _timestampBuffer\n    )\n        Groth16Verifier()\n        BaseProcessorV2(\n            _ramp,\n            _venmoMailserverKeyHashAdapter,\n            _nullifierRegistry,\n            _emailFromAddress,\n            _timestampBuffer\n        )\n    {}\n    \n    /* ============ External Functions ============ */\n    function processProof(\n        ISendProcessor.SendProof calldata _proof\n    )\n        public\n        override\n        onlyRamp\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\n    {\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \"Invalid Proof\"); // checks effects iteractions, this should come first\n\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \"Invalid mailserver key hash\");\n\n        // Signals [1:4] are the packed from email address\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \"Invalid email from address\");\n\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\n\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\n        // specify 0 decimals, if any decimal appears this function will revert\n        // Add the buffer to build in flexibility with L2 timestamps\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\n\n        // Signals [8] is the packed offRamperIdHash\n        offRamperIdHash = bytes32(_proof.signals[8]);\n\n        // Signals [9] is the packed onRamperIdHash\n        onRamperIdHash = bytes32(_proof.signals[9]);\n\n        // Check if email has been used previously, if not nullify it so it can't be used again\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\n\n        // Signals [11] is intentHash\n        intentHash = bytes32(_proof.signals[11]);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\n        uint256[] memory signalArray = new uint256[](_to - _from);\n        for (uint256 i = _from; i < _to; i++) {\n            signalArray[i - _from] = _signals[i];\n        }\n\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v2/interfaces/IRamp.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ramp } from \"../../venmo-v1/Ramp.sol\";\n\npragma solidity ^0.8.18;\n\ninterface IRamp {\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IRegistrationProcessorV2 {\n\n    struct RegistrationProof {\n        uint256[2] a;\n        uint256[2][2] b;\n        uint256[2] c;\n        uint256[5] signals;\n    }\n\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        external\n    returns (bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/WiseAccountRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { SignatureChecker } from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\n\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IWiseAccountRegistrationProcessor } from \"./interfaces/IWiseAccountRegistrationProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\nimport { TLSBaseProcessor } from \"../../processors/TLSBaseProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseAccountRegistrationProcessor is IWiseAccountRegistrationProcessor, TLSBaseProcessor {\n\n    using ECDSA for bytes32;\n    using SignatureChecker for address;\n    using StringConversionUtils for string;\n    \n    /* ============ Events ============ */\n    event VerifierSigningKeySet(address _verifierSigningKey);\n    \n    /* ============ Public Variables ============ */\n    address public verifierSigningKey;\n    \n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        address _verifierSigningKey,\n        INullifierRegistry _nullifierRegistry,\n        uint256 _timestampBuffer,\n        string memory _endpoint,\n        string memory _host\n    )\n        TLSBaseProcessor(\n            _ramp,\n            _nullifierRegistry,\n            _timestampBuffer,\n            _endpoint,\n            _host\n        )\n    {\n        verifierSigningKey = _verifierSigningKey;\n    }\n\n    /* ============ External Functions ============ */\n\n    function processProof(\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        public\n        override\n        onlyRamp\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\n    {\n        _validateProof(_proof.public_values, _proof.proof);\n\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\n        _validateTLSHost(host, _proof.public_values.host);\n\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\n\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\n        wiseTagHash = bytes32(_proof.public_values.wiseTagHash.stringToUint(0));\n    }\n\n    /* ============ External Admin Functions ============ */\n\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\n        verifierSigningKey = _verifierSigningKey;\n\n        emit VerifierSigningKeySet(_verifierSigningKey);\n    }\n\n    /* ============ View Functions ============ */\n\n    function verifyProof(\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues,\n        bytes memory _proof\n    )\n        public\n        view\n        returns(bool)\n    {\n        bytes memory encodedMessage = abi.encode(\n            _publicValues.endpoint,\n            _publicValues.host,\n            _publicValues.profileId,\n            _publicValues.wiseTagHash,\n            _publicValues.userAddress\n        );\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\n    }\n    \n    /* ============ Internal Functions ============ */\n\n    function _validateProof(\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n    {   \n        require(\n            verifyProof(_publicValues, _proof),\n            \"Invalid proof\"\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/WiseAccountRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IWiseAccountRegistrationProcessor } from \"./interfaces/IWiseAccountRegistrationProcessor.sol\";\nimport { IWiseAccountRegistry } from \"./interfaces/IWiseAccountRegistry.sol\";\nimport { IWiseOffRamperRegistrationProcessor } from \"./interfaces/IWiseOffRamperRegistrationProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseAccountRegistry is IWiseAccountRegistry, Ownable {\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed wiseTagHash);\n    event OffRamperRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed offRampId);\n\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\n\n    event AllowlistEnabled(bytes32 listOwner);\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\n\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\n    event NewOffRamperRegistrationProcessorSet(address registrationProcessor);\n\n    /* ============ Structs ============ */\n\n    struct DenyList {\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\n    }\n\n    struct AllowList {\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(isRegisteredUser(msg.sender), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ State Variables ============ */\n    IWiseAccountRegistrationProcessor public accountRegistrationProcessor;      // Address of Account registration processor contract\n    IWiseOffRamperRegistrationProcessor public offRamperRegistrationProcessor;  // Address of Off-ramper registration processor contract\n\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\n\n    mapping(address => AccountInfo) internal accounts;                          // Mapping of Ethereum accounts to their account information (IDs and deposits)\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner\n    )\n        Ownable()\n    {\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _accountRegistrationProcessor     Account Registration processor address\n     * @param _offRamperRegistrationProcessor   Off-ramper Registration processor address\n     */\n    function initialize(\n        IWiseAccountRegistrationProcessor _accountRegistrationProcessor,\n        IWiseOffRamperRegistrationProcessor _offRamperRegistrationProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        accountRegistrationProcessor = _accountRegistrationProcessor;\n        offRamperRegistrationProcessor = _offRamperRegistrationProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\n     * sender of the transaction.\n     *\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\n     */\n    function register(\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        external\n    {\n        require(msg.sender == _proof.public_values.userAddress, \"Caller must be address specified in proof\");\n        require(accounts[msg.sender].accountId == bytes32(0), \"Account already associated with accountId\");\n        (\n            bytes32 accountId,\n            bytes32 wiseTagHash\n        ) = _verifyRegistrationProof(_proof);\n\n        accounts[msg.sender].accountId = accountId;\n        accounts[msg.sender].wiseTagHash = wiseTagHash;\n\n        emit AccountRegistered(msg.sender, accountId, wiseTagHash);\n    }\n\n    /**\n     * @notice Registers an account for off-ramping by pulling the multi-currency account id from the proof and assigning\n     * the account owner to the sender of the transaction.\n     *\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\n     */\n    function registerAsOffRamper(\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\n    )\n        external\n        onlyRegisteredUser\n    {\n        require(accounts[msg.sender].offRampId == bytes32(0), \"Account already associated with offRampId\");\n        (\n            bytes32 accountId,\n            bytes32 offRampId\n        ) = _verifyOffRamperRegistrationProof(_proof);\n\n        accounts[msg.sender].offRampId = offRampId;\n\n        emit OffRamperRegistered(msg.sender, accountId, offRampId);\n    }\n\n    /**\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\n     * signal an intent on the user's deposit they will be denied.\n     *\n     * @param _deniedUser   accountId being banned\n     */\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\n        bytes32 denyingUser = accounts[msg.sender].accountId;\n\n        require(!denyList[denyingUser].isDenied[_deniedUser], \"User already on denylist\");\n\n        denyList[denyingUser].isDenied[_deniedUser] = true;\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\n\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\n    }\n\n    /**\n     * @notice Removes an accountId from a depositor's deny list.\n     *\n     * @param _approvedUser   accountId being approved\n     */\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\n        bytes32 approvingUser = accounts[msg.sender].accountId;\n\n        require(denyList[approvingUser].isDenied[_approvedUser], \"User not on denylist\");\n\n        denyList[approvingUser].isDenied[_approvedUser] = false;\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\n\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\n    }\n\n    /**\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\n     */\n    function enableAllowlist() external onlyRegisteredUser {\n        bytes32 allowingUser = accounts[msg.sender].accountId;\n\n        require(!allowList[allowingUser].isEnabled, \"Allow list already enabled\");\n\n        allowList[allowingUser].isEnabled = true;\n\n        emit AllowlistEnabled(allowingUser);\n    }\n\n    /**\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\n     * be able to signal intents on the user's deposit.\n     *\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\n     */\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\n        bytes32 allowingUser = accounts[msg.sender].accountId;\n\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\n            bytes32 allowedUser = _allowedUsers[i];\n\n            require(!allowList[allowingUser].isAllowed[allowedUser], \"User already on allowlist\");\n\n            allowList[allowingUser].isAllowed[allowedUser] = true;\n            allowList[allowingUser].allowedUsers.push(allowedUser);\n\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\n        }\n    }\n\n    /**\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\n     * able to signal intents on the user's deposit.\n     *\n     * @param _disallowedUsers   List of accountIds being approved\n     */\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\n        bytes32 disallowingUser = accounts[msg.sender].accountId;\n\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\n            bytes32 disallowedUser = _disallowedUsers[i];\n\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \"User not on allowlist\");\n\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\n\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\n        }\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\n     *\n     * @param _registrationProcessor   New registration proccesor address\n     */\n    function setAccountRegistrationProcessor(IWiseAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\n        accountRegistrationProcessor = _registrationProcessor;\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the off ramper registration processor address used for validating and interpreting tls proofs.\n     *\n     * @param _registrationProcessor   New registration proccesor address\n     */\n    function setOffRamperRegistrationProcessor(IWiseOffRamperRegistrationProcessor _registrationProcessor) external onlyOwner {\n        offRamperRegistrationProcessor = _registrationProcessor;\n        emit NewOffRamperRegistrationProcessorSet(address(_registrationProcessor));\n    }\n\n    /* ============ External View Functions ============ */\n\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\n        return accounts[_account];\n    }\n\n    function getAccountId(address _account) public view returns (bytes32) {\n        return accounts[_account].accountId;\n    }\n\n    function isRegisteredUser(address _account) public view returns (bool) {\n        return getAccountId(_account) != bytes32(0);\n    }\n\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\n        return denyList[getAccountId(_account)].deniedUsers;\n    }\n\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\n    }\n\n    function isAllowlistEnabled(address _account) external view returns (bool) {\n        return allowList[getAccountId(_account)].isEnabled;\n    }\n\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\n        return allowList[getAccountId(_account)].allowedUsers;\n    }\n\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\n        bytes32 allowingUser = getAccountId(_account);\n\n        // Deny list overrides, if user on deny list then they are not allowed\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\n\n        // Check if allow list is enabled, if so return status of user, else return true\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\n    }\n    \n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\n     * different addresses.\n     */\n    function _verifyRegistrationProof(\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\n    )\n        internal\n        returns(bytes32 accountId, bytes32 wiseTagHash)\n    {\n        (\n            accountId,\n            wiseTagHash\n        ) = accountRegistrationProcessor.processProof(_proof);\n    }\n\n    /**\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\n     * different addresses.\n     */\n    function _verifyOffRamperRegistrationProof(\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\n    )\n        internal\n        returns(bytes32 accountId, bytes32 offRampId)\n    {\n        (\n            accountId,\n            offRampId\n        ) = offRamperRegistrationProcessor.processProof(_proof);\n\n        require(accountId == accounts[msg.sender].accountId, \"AccountId does not match\");\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/WiseOffRamperRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IWiseOffRamperRegistrationProcessor } from \"./interfaces/IWiseOffRamperRegistrationProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\nimport { TLSBaseProcessor } from \"../../processors/TLSBaseProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseOffRamperRegistrationProcessor is IWiseOffRamperRegistrationProcessor, TLSBaseProcessor {\n\n    using StringConversionUtils for string;\n    \n    /* ============ Events ============ */\n    event VerifierSigningKeySet(address _verifierSigningKey);\n    \n    /* ============ Public Variables ============ */\n    address public verifierSigningKey;\n    \n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        address _verifierSigningKey,\n        INullifierRegistry _nullifierRegistry,\n        uint256 _timestampBuffer,\n        string memory _endpoint,\n        string memory _host\n    )\n        TLSBaseProcessor(\n            _ramp,\n            _nullifierRegistry,\n            _timestampBuffer,\n            _endpoint,\n            _host\n        )\n    {\n        verifierSigningKey = _verifierSigningKey;\n    }\n\n    /* ============ External Functions ============ */\n\n    function processProof(\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\n    )\n        public\n        view\n        override\n        onlyRamp\n        returns(bytes32 onRampId, bytes32 offRampId)\n    {\n        _validateProof(_proof.public_values, _proof.proof);\n\n        _validateTLSEndpoint(endpoint.replaceString(\"*\", _proof.public_values.profileId), _proof.public_values.endpoint);\n        _validateTLSHost(host, _proof.public_values.host);\n\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\n        offRampId = bytes32(_proof.public_values.mcAccountId.stringToUint(0));\n    }\n\n    /* ============ External Admin Functions ============ */\n\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\n        verifierSigningKey = _verifierSigningKey;\n\n        emit VerifierSigningKeySet(_verifierSigningKey);\n    }\n\n    /* ============ View Functions ============ */\n\n    function verifyProof(\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n        returns(bool)\n    {   \n        bytes memory encodedMessage = abi.encode(_publicValues.endpoint, _publicValues.host, _publicValues.profileId, _publicValues.mcAccountId);\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _validateProof(\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n    {   \n        require(\n            verifyProof(_publicValues, _proof),\n            \"Invalid proof\"\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/WiseRamp.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { Bytes32ArrayUtils } from \"../../external/Bytes32ArrayUtils.sol\";\nimport { Uint256ArrayUtils } from \"../../external/Uint256ArrayUtils.sol\";\n\nimport { IWiseAccountRegistry } from \"./interfaces/IWiseAccountRegistry.sol\";\nimport { IWiseSendProcessor } from \"./interfaces/IWiseSendProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseRamp is Ownable {\n\n    using Bytes32ArrayUtils for bytes32[];\n    using Uint256ArrayUtils for uint256[];\n\n    /* ============ Events ============ */\n    event DepositReceived(\n        uint256 indexed depositId,\n        bytes32 indexed offRampId,\n        bytes32 indexed currencyId,\n        uint256 amount,\n        uint256 conversionRate\n    );\n    event IntentSignaled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        bytes32 indexed accountId,\n        address to,\n        uint256 amount,\n        uint256 timestamp\n    );\n\n    event IntentPruned(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId\n    );\n    event IntentFulfilled(\n        bytes32 indexed intentHash,\n        uint256 indexed depositId,\n        address indexed onRamper,\n        address to,\n        uint256 amount,\n        uint256 feeAmount\n    );\n    event DepositWithdrawn(\n        uint256 indexed depositId,\n        address indexed depositor,\n        uint256 amount\n    );\n\n    event DepositClosed(uint256 depositId, address depositor);\n    event MinDepositAmountSet(uint256 minDepositAmount);\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\n    event SustainabilityFeeUpdated(uint256 fee);\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\n    event NewSendProcessorSet(address sendProcessor);\n\n    /* ============ Structs ============ */\n\n    struct Deposit {\n        address depositor;\n        string wiseTag;\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\n        uint256 depositAmount;              // Amount of USDC deposited\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Wise currency code))\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\n    }\n\n    struct DepositWithAvailableLiquidity {\n        uint256 depositId;                  // ID of the deposit\n        bytes32 depositorId;                // Depositor's offRampId \n        Deposit deposit;                    // Deposit struct\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\n    }\n\n    struct Intent {\n        address onRamper;                   // On-ramper's address\n        address to;                         // Address to forward funds to (can be same as onRamper)\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\n    }\n\n    struct IntentWithOnRamperId {\n        bytes32 intentHash;                 // Intent hash\n        Intent intent;                      // Intent struct\n        bytes32 onRamperId;                 // onRamper's onRamperId\n    }\n\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\n    // restrict each Wise account to one outstanding intent at a time, and to enforce deny lists.\n    struct GlobalAccountInfo {\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\n        uint256[] deposits;                 // Array of open account deposits\n    }\n\n    /* ============ Modifiers ============ */\n    modifier onlyRegisteredUser() {\n        require(accountRegistry.isRegisteredUser(msg.sender), \"Caller must be registered user\");\n        _;\n    }\n\n    /* ============ Constants ============ */\n    uint256 internal constant PRECISE_UNIT = 1e18;\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\n    \n    /* ============ State Variables ============ */\n    IERC20 public immutable usdc;                                   // USDC token contract\n    IWiseAccountRegistry public accountRegistry;                    // Account Registry contract for Wise\n    IWiseSendProcessor public sendProcessor;                        // Address of send processor contract\n\n    bool public isInitialized;                                      // Indicates if contract has been initialized\n\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\n\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\n\n    uint256 public depositCounter;                                  // Counter for depositIds\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _owner,\n        IERC20 _usdc,\n        uint256 _minDepositAmount,\n        uint256 _maxOnRampAmount,\n        uint256 _intentExpirationPeriod,\n        uint256 _onRampCooldownPeriod,\n        uint256 _sustainabilityFee,\n        address _sustainabilityFeeRecipient\n    )\n        Ownable()\n    {\n        usdc = _usdc;\n        minDepositAmount = _minDepositAmount;\n        maxOnRampAmount = _maxOnRampAmount;\n        intentExpirationPeriod = _intentExpirationPeriod;\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        sustainabilityFee = _sustainabilityFee;\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\n\n        transferOwnership(_owner);\n    }\n\n    /* ============ External Functions ============ */\n\n    /**\n     * @notice Initialize Ramp with the addresses of the Processors\n     *\n     * @param _accountRegistry     Account Registry contract for Wise\n     * @param _sendProcessor       Send processor address\n     */\n    function initialize(\n        IWiseAccountRegistry _accountRegistry,\n        IWiseSendProcessor _sendProcessor\n    )\n        external\n        onlyOwner\n    {\n        require(!isInitialized, \"Already initialized\");\n\n        accountRegistry = _accountRegistry;\n        sendProcessor = _sendProcessor;\n\n        isInitialized = true;\n    }\n\n    /**\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\n     * of USDC.\n     *\n     * @param _wiseTag              Depositor's Wise tag to receive payments\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\n     * @param _depositAmount        The amount of USDC to off-ramp\n     * @param _receiveAmount        The amount of USD to receive\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\n     */\n    function offRamp(\n        string calldata _wiseTag,\n        bytes32 _receiveCurrencyId,\n        uint256 _depositAmount,\n        uint256 _receiveAmount,\n        address _verifierSigningKey\n    )\n        external\n        onlyRegisteredUser\n    {\n        IWiseAccountRegistry.AccountInfo memory account = accountRegistry.getAccountInfo(msg.sender);\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account.accountId];\n\n        require(account.offRampId != bytes32(0), \"Must be registered as off ramper\");\n        require(keccak256(abi.encode(_wiseTag)) == account.wiseTagHash, \"Wise tag does not match registered wise tag\");\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \"Maximum deposit amount reached\");\n        require(_depositAmount >= minDepositAmount, \"Deposit amount must be greater than min deposit amount\");\n        require(_receiveAmount > 0, \"Receive amount must be greater than 0\");\n\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\n        uint256 depositId = depositCounter++;\n\n        globalAccountInfo.deposits.push(depositId);\n\n        deposits[depositId] = Deposit({\n            depositor: msg.sender,\n            wiseTag: _wiseTag,\n            receiveCurrencyId: _receiveCurrencyId,\n            depositAmount: _depositAmount,\n            remainingDeposits: _depositAmount,\n            outstandingIntentAmount: 0,\n            conversionRate: conversionRate,\n            intentHashes: new bytes32[](0),\n            verifierSigningKey: _verifierSigningKey\n        });\n\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\n\n        emit DepositReceived(depositId, account.accountId, _receiveCurrencyId, _depositAmount, conversionRate);\n    }\n\n    /**\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\n     * they will be deleted from the deposit to be able to maintain state hygiene.\n     *\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \n     * @param _amount       The amount of USDC the user wants to on-ramp\n     * @param _to           Address to forward funds to (can be same as onRamper)\n     */\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\n        Deposit storage deposit = deposits[_depositId];\n\n        // Caller validity checks\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \"Onramper on depositor's denylist\");\n        require(\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\n            \"On ramp cool down period not elapsed\"\n        );\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \"Intent still outstanding\");\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \"Sender cannot be the depositor\");\n\n        // Intent information checks\n        require(deposit.depositor != address(0), \"Deposit does not exist\");\n        require(_amount > 0, \"Signaled amount must be greater than 0\");\n        require(_amount <= maxOnRampAmount, \"Signaled amount must be less than max on-ramp amount\");\n        require(_to != address(0), \"Cannot send to zero address\");\n\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\n\n        if (deposit.remainingDeposits < _amount) {\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(_depositId);\n\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \"Not enough liquidity\");\n\n            _pruneIntents(deposit, prunableIntents);\n            deposit.remainingDeposits += reclaimableAmount;\n            deposit.outstandingIntentAmount -= reclaimableAmount;\n        }\n\n        intents[intentHash] = Intent({\n            onRamper: msg.sender,\n            to: _to,\n            deposit: _depositId,\n            amount: _amount,\n            intentTimestamp: block.timestamp\n        });\n\n        globalAccount[onRamperId].currentIntentHash = intentHash;\n\n        deposit.remainingDeposits -= _amount;\n        deposit.outstandingIntentAmount += _amount;\n        deposit.intentHashes.push(intentHash);\n\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\n    }\n\n    /**\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\n     * intent. Deposit state is updated to reflect the cancelled intent.\n     *\n     * @param _intentHash    Hash of intent being cancelled\n     */\n    function cancelIntent(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        \n        require(intent.intentTimestamp != 0, \"Intent does not exist\");\n        require(\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\n            \"Sender must be the on-ramper\"\n        );\n\n        Deposit storage deposit = deposits[intent.deposit];\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.remainingDeposits += intent.amount;\n        deposit.outstandingIntentAmount -= intent.amount;\n    }\n\n    /**\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _sendData         Struct containing unredacted data from API call to Wise\n     * @param _verifierSignature  Signature by verifier of the unredacted data\n     */\n    function onRamp(\n        IWiseSendProcessor.SendData calldata _sendData,\n        bytes calldata _verifierSignature\n    )\n        external\n    {\n        (\n            Intent memory intent,\n            Deposit storage deposit,\n            bytes32 intentHash\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\n\n        _pruneIntent(deposit, intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(intentHash, intent);\n    }\n\n    /**\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \n     * deposit state is updated. USDC is transferred to the on-ramper.\n     *\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\n     */\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\n        Intent memory intent = intents[_intentHash];\n        Deposit storage deposit = deposits[intent.deposit];\n\n        require(intent.onRamper != address(0), \"Intent does not exist\");\n        require(deposit.depositor == msg.sender, \"Caller must be the depositor\");\n\n        _pruneIntent(deposit, _intentHash);\n\n        deposit.outstandingIntentAmount -= intent.amount;\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\n        _closeDepositIfNecessary(intent.deposit, deposit);\n\n        _transferFunds(_intentHash, intent);\n    }\n\n    /**\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\n     *\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\n     */\n    function withdrawDeposit(uint256[] memory _depositIds) external {\n        uint256 returnAmount;\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit storage deposit = deposits[depositId];\n\n            require(deposit.depositor == msg.sender, \"Sender must be the depositor\");\n\n            (\n                bytes32[] memory prunableIntents,\n                uint256 reclaimableAmount\n            ) = _getPrunableIntents(depositId);\n\n            _pruneIntents(deposit, prunableIntents);\n\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\n            \n            deposit.outstandingIntentAmount -= reclaimableAmount;\n\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\n            \n            delete deposit.remainingDeposits;\n            _closeDepositIfNecessary(depositId, deposit);\n        }\n\n        usdc.transfer(msg.sender, returnAmount);\n    }\n\n    /* ============ Governance Functions ============ */\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\n     *\n     * @param _sendProcessor   New send proccesor address\n     */\n    function setSendProcessor(IWiseSendProcessor _sendProcessor) external onlyOwner {\n        sendProcessor = _sendProcessor;\n        emit NewSendProcessorSet(address(_sendProcessor));\n    }\n\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\n     *\n     * @param _minDepositAmount   The new minimum deposit amount\n     */\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\n        require(_minDepositAmount != 0, \"Minimum deposit cannot be zero\");\n\n        minDepositAmount = _minDepositAmount;\n        emit MinDepositAmountSet(_minDepositAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\n     *\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\n     */\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \"Fee cannot be greater than max fee\");\n\n        sustainabilityFee = _fee;\n        emit SustainabilityFeeUpdated(_fee);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\n     *\n     * @param _feeRecipient   The new fee recipient address\n     */\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\n        require(_feeRecipient != address(0), \"Fee recipient cannot be zero address\");\n\n        sustainabilityFeeRecipient = _feeRecipient;\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\n     * this amount a user must make multiple transactions.\n     *\n     * @param _maxOnRampAmount   The new max on ramp amount\n     */\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\n        require(_maxOnRampAmount != 0, \"Max on ramp amount cannot be zero\");\n\n        maxOnRampAmount = _maxOnRampAmount;\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\n     * amount of time before they can signalIntent to on-ramp again.\n     *\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\n     */\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\n        onRampCooldownPeriod = _onRampCooldownPeriod;\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\n    }\n\n    /**\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\n     * locking up a depositor's funds.\n     *\n     * @param _intentExpirationPeriod   New intent expiration period\n     */\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\n        require(_intentExpirationPeriod != 0, \"Max intent expiration period cannot be zero\");\n\n        intentExpirationPeriod = _intentExpirationPeriod;\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\n    }\n\n\n    /* ============ External View Functions ============ */\n\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\n        return deposits[_depositId];\n    }\n\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\n    }\n\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\n        return uint256(getIdCurrentIntentHash(_account));\n    }\n\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\n    }\n\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\n\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\n            bytes32 intentHash = _intentHashes[i];\n            Intent memory intent = intents[intentHash];\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\n                intentHash: _intentHashes[i],\n                intent: intent,\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\n            });\n        }\n\n        return intentsWithOnRamperId;\n    }\n\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\n        \n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\n            uint256 depositId = accountDepositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            accountDeposits[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n    }\n\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\n\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\n            uint256 depositId = _depositIds[i];\n            Deposit memory deposit = deposits[depositId];\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\n\n            depositArray[i] = DepositWithAvailableLiquidity({\n                depositId: depositId,\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\n                deposit: deposit,\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\n            });\n        }\n\n        return depositArray;\n    }\n\n    /* ============ Internal Functions ============ */\n\n    /**\n     * @notice Calculates the intentHash of new intent\n     */\n    function _calculateIntentHash(\n        bytes32 _accountId,\n        uint256 _depositId\n    )\n        internal\n        view\n        virtual\n        returns (bytes32 intentHash)\n    {\n        // Mod with circom prime field to make sure it fits in a 254-bit field\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\n    }\n\n    /**\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\n     * the outstanding amounts are summed and returned alongside the intentHashes\n     */\n    function _getPrunableIntents(\n        uint256 _depositId\n    )\n        internal\n        view\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\n    {\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\n        prunableIntents = new bytes32[](intentHashes.length);\n\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\n            Intent memory intent = intents[intentHashes[i]];\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\n                prunableIntents[i] = intentHashes[i];\n                reclaimedAmount += intent.amount;\n            }\n        }\n    }\n\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\n        for (uint256 i = 0; i < _intents.length; ++i) {\n            if (_intents[i] != bytes32(0)) {\n                _pruneIntent(_deposit, _intents[i]);\n            }\n        }\n    }\n\n    /**\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\n     */\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\n        Intent memory intent = intents[_intentHash];\n\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\n        delete intents[_intentHash];\n        _deposit.intentHashes.removeStorage(_intentHash);\n\n        emit IntentPruned(_intentHash, intent.deposit);\n    }\n\n    /**\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\n     * deposits mapping and removes tracking it in the user's accounts mapping.\n     */\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\n        if (openDepositAmount == 0) {\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\n            emit DepositClosed(_depositId, _deposit.depositor);\n            delete deposits[_depositId];\n        }\n    }\n\n    /**\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\n     */\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\n        uint256 fee;\n        if (sustainabilityFee != 0) {\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\n            usdc.transfer(sustainabilityFeeRecipient, fee);\n        }\n\n        uint256 onRampAmount = _intent.amount - fee;\n        usdc.transfer(_intent.to, onRampAmount);\n\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\n    }\n\n    /**\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\n     * was paid off-chain inclusive of the conversionRate.\n     */\n    function _verifyOnRampProof(\n        IWiseSendProcessor.SendData calldata _data,\n        bytes calldata _verifierSignature\n    )\n        internal\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\n    {\n        intentHash = bytes32(_data.intentHash);\n        intent = intents[intentHash];\n        require(intent.onRamper == msg.sender, \"Caller must be the on-ramper\");\n\n        deposit = deposits[intent.deposit];\n\n        (\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperId,\n            bytes32 currencyId\n        ) = sendProcessor.processProof(\n            IWiseSendProcessor.SendProof({\n                public_values: _data,\n                proof: _verifierSignature\n            }),\n            deposit.verifierSigningKey\n        );\n\n        require(currencyId == deposit.receiveCurrencyId, \"Wrong currency sent\");\n        require(intent.intentTimestamp <= timestamp, \"Intent was not created before send\");\n        require(accountRegistry.getAccountInfo(deposit.depositor).offRampId == offRamperId, \"Offramper id does not match\");\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \"Payment was not enough\");\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/WiseSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { SignatureChecker } from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\n\nimport { IKeyHashAdapterV2 } from \"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\";\nimport { INullifierRegistry } from \"../../processors/nullifierRegistries/INullifierRegistry.sol\";\nimport { IWiseSendProcessor } from \"./interfaces/IWiseSendProcessor.sol\";\nimport { StringConversionUtils } from \"../../lib/StringConversionUtils.sol\";\nimport { TLSBaseProcessor } from \"../../processors/TLSBaseProcessor.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseSendProcessor is IWiseSendProcessor, TLSBaseProcessor {\n\n    using ECDSA for bytes32;\n    using SignatureChecker for address;\n    using StringConversionUtils for string;\n\n    /* ============ Constants ============ */\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\"OUTGOING_PAYMENT_SENT\"));\n\n    /* ============ Constructor ============ */\n    constructor(\n        address _ramp,\n        INullifierRegistry _nullifierRegistry,\n        uint256 _timestampBuffer,\n        string memory _endpoint,\n        string memory _host\n    )\n        TLSBaseProcessor(\n            _ramp,\n            _nullifierRegistry,\n            _timestampBuffer,\n            _endpoint,\n            _host\n        )\n    {}\n    \n    /* ============ External Functions ============ */\n    function processProof(\n        IWiseSendProcessor.SendProof calldata _proof,\n        address _verifierSigningKey\n    )\n        public\n        override\n        onlyRamp\n        returns(\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperId,\n            bytes32 currencyId\n        )\n    {\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\n\n        _validateTLSEndpoint(\n            endpoint.replaceString(\"*\", _proof.public_values.senderId),\n            _proof.public_values.endpoint\n        );\n        _validateTLSHost(host, _proof.public_values.host);\n        \n        // Validate status\n        require(\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\n            \"Payment status not confirmed as sent\"\n        );\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\"Wise\", _proof.public_values.transferId)));\n\n        amount = _proof.public_values.amount.stringToUint(6);\n\n        // Add the buffer to build in flexibility with L2 timestamps\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\n\n        offRamperId = bytes32(_proof.public_values.recipientId.stringToUint(0));\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\n    }\n\n    /* ============ View Functions ============ */\n\n    function verifyProof(\n        address _verifierSigningKey,\n        IWiseSendProcessor.SendData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n        returns(bool)\n    {   \n        bytes memory encodedMessage = abi.encode(\n            _publicValues.endpoint,\n            _publicValues.host,\n            _publicValues.transferId,\n            _publicValues.senderId,\n            _publicValues.recipientId,\n            _publicValues.amount,\n            _publicValues.currencyId,\n            _publicValues.status,\n            _publicValues.timestamp,\n            _publicValues.intentHash\n        );\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\n    }\n\n    /* ============ Internal Functions ============ */\n\n    function _validateProof(\n        address _verifierSigningKey,\n        IWiseSendProcessor.SendData memory _publicValues, \n        bytes memory _proof\n    )\n        internal\n        view\n    {   \n        require(\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\n            \"Invalid proof\"\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/interfaces/IWiseAccountRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IWiseAccountRegistrationProcessor {\n\n    struct RegistrationData {\n        string endpoint;\n        string host;\n        string profileId;\n        string wiseTagHash;\n        address userAddress;\n    }\n\n    struct RegistrationProof {\n        RegistrationData public_values;\n        bytes proof;\n    }\n\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        external\n    returns (bytes32, bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/interfaces/IWiseAccountRegistry.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IWiseAccountRegistry {\n\n    // Each Account is tied to a Wise ID and is represented by an Ethereum address.\n    struct AccountInfo {\n        bytes32 accountId;                  // User's Wise account ID\n        bytes32 offRampId;                  // Multi-currency account ID to receive funds\n        bytes32 wiseTagHash;                // Hash of user's wise tag account stored on register. Used to verify offramper's wise tag\n    }\n\n    function getAccountInfo(address _account) external view returns (AccountInfo memory);\n    function getAccountId(address _account) external view returns (bytes32);\n\n    function isRegisteredUser(address _account) external view returns (bool);\n    \n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/interfaces/IWiseOffRamperRegistrationProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IWiseOffRamperRegistrationProcessor {\n\n    struct OffRamperRegistrationData {\n        string endpoint;\n        string host;\n        string profileId;\n        string mcAccountId;\n    }\n\n    struct OffRamperRegistrationProof {\n        OffRamperRegistrationData public_values;\n        bytes proof;\n    }\n\n    function processProof(\n        OffRamperRegistrationProof calldata _proof\n    )\n        external\n    returns (bytes32, bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/interfaces/IWiseSendProcessor.sol",
    "content": "//SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.18;\n\ninterface IWiseSendProcessor {\n\n    struct SendData {\n        string endpoint;\n        string host;\n        string transferId;\n        string senderId;\n        string recipientId;\n        string amount;\n        string currencyId;\n        string status;\n        string timestamp;\n        uint256 intentHash;\n    }\n\n    struct SendProof {\n        SendData public_values;\n        bytes proof;\n    }\n\n    function processProof(\n        SendProof calldata _proof,\n        address _verifierSigningKey\n    )\n        external\n    returns(uint256, uint256, bytes32, bytes32);\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/mocks/WiseAccountRegistrationProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IWiseAccountRegistrationProcessor } from \"../interfaces/IWiseAccountRegistrationProcessor.sol\";\nimport { StringConversionUtils } from \"../../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseAccountRegistrationProcessorMock is IWiseAccountRegistrationProcessor {\n\n    using StringConversionUtils for string;\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        RegistrationProof calldata _proof\n    )\n        public\n        pure\n        override\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\n    {\n        return(\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\n            bytes32(_proof.public_values.wiseTagHash.stringToUint(0))\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/mocks/WiseOffRamperRegistrationProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IWiseOffRamperRegistrationProcessor } from \"../interfaces/IWiseOffRamperRegistrationProcessor.sol\";\nimport { StringConversionUtils } from \"../../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseOffRamperRegistrationProcessorMock is IWiseOffRamperRegistrationProcessor {\n\n    using StringConversionUtils for string;\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n       OffRamperRegistrationProof calldata _proof\n    )\n        public\n        pure\n        override\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\n    {\n        return(\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\n            bytes32(_proof.public_values.mcAccountId.stringToUint(0))\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/ramps/wise/mocks/WiseSendProcessorMock.sol",
    "content": "//SPDX-License-Identifier: MIT\n\nimport { IWiseSendProcessor } from \"../interfaces/IWiseSendProcessor.sol\";\nimport { StringConversionUtils } from \"../../../lib/StringConversionUtils.sol\";\n\npragma solidity ^0.8.18;\n\ncontract WiseSendProcessorMock is IWiseSendProcessor {\n\n    using StringConversionUtils for string;\n\n    /* ============ Constructor ============ */\n    constructor() {}\n\n    /* ============ External View Functions ============ */\n    function processProof(\n        SendProof calldata _proof,\n        address /*_verifierSigningKey*/\n    )\n        public\n        pure\n        override\n        returns(\n            uint256 amount,\n            uint256 timestamp,\n            bytes32 offRamperIdHash,\n            bytes32 currencyId\n        )\n    {\n        return(\n            _proof.public_values.amount.stringToUint(6),\n            _proof.public_values.timestamp.stringToUint(0),\n            bytes32(_proof.public_values.recipientId.stringToUint(0)),\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\n        );\n    }\n}\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/garanti_body_suffix_hasher_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\n\n    \n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\n    \n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\n    \n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\n    \n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\n    \n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/garanti_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\n\n    \n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\n    \n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\n    \n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\n    \n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\n    \n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\n    \n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\n    \n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\n    \n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\n    \n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\n    \n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\n    \n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\n    \n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/garanti_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\n\n    \n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\n    \n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\n    \n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\n    \n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\n    \n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\n    \n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\n    \n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\n    \n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\n    \n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\n    \n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\n    \n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\n    \n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\n    \n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\n    \n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\n    \n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\n    \n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\n    \n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\n    \n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\n    \n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\n    \n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\n    \n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\n    \n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\n    \n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\n    \n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\n    \n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\n    \n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\n    \n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\n    \n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\n    \n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n                \n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\n                \n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\n                \n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\n                \n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\n                \n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\n                \n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\n                \n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\n                \n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\n                \n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\n                \n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\n                \n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\n                \n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\n                \n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\n                \n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\n                \n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\n                \n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n            checkField(calldataload(add(_pubSignals, 384)))\n            \n            checkField(calldataload(add(_pubSignals, 416)))\n            \n            checkField(calldataload(add(_pubSignals, 448)))\n            \n            checkField(calldataload(add(_pubSignals, 480)))\n            \n            checkField(calldataload(add(_pubSignals, 512)))\n            \n            checkField(calldataload(add(_pubSignals, 544)))\n            \n            checkField(calldataload(add(_pubSignals, 576)))\n            \n            checkField(calldataload(add(_pubSignals, 608)))\n            \n            checkField(calldataload(add(_pubSignals, 640)))\n            \n            checkField(calldataload(add(_pubSignals, 672)))\n            \n            checkField(calldataload(add(_pubSignals, 704)))\n            \n            checkField(calldataload(add(_pubSignals, 736)))\n            \n            checkField(calldataload(add(_pubSignals, 768)))\n            \n            checkField(calldataload(add(_pubSignals, 800)))\n            \n            checkField(calldataload(add(_pubSignals, 832)))\n            \n            checkField(calldataload(add(_pubSignals, 864)))\n            \n            checkField(calldataload(add(_pubSignals, 896)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/hdfc_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\n\n\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\n\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\n\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\n\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\n\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\n\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/hdfc_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\n\n\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\n\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\n\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\n\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\n\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\n\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\n\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\n\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\n\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\n\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\n\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\n\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\n\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\n\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\n\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\n\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\n\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\n\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n            checkField(calldataload(add(_pubSignals, 192)))\n\n            checkField(calldataload(add(_pubSignals, 224)))\n\n            checkField(calldataload(add(_pubSignals, 256)))\n\n            checkField(calldataload(add(_pubSignals, 288)))\n\n            checkField(calldataload(add(_pubSignals, 320)))\n\n            checkField(calldataload(add(_pubSignals, 352)))\n\n            checkField(calldataload(add(_pubSignals, 384)))\n\n            checkField(calldataload(add(_pubSignals, 416)))\n\n            checkField(calldataload(add(_pubSignals, 448)))\n\n            checkField(calldataload(add(_pubSignals, 480)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/paylah_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n\n    \n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\n    \n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\n    \n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\n    \n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\n    \n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\n    \n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/paylah_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n\n    \n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\n    \n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\n    \n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\n    \n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\n    \n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\n    \n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\n    \n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\n    \n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\n    \n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\n    \n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\n    \n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\n    \n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/venmo_registration_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 16692827623879808830126666424117838150546424161010311559130132272860078100250;\n    uint256 constant deltax2 = 10427071116080203280483990720065140241625477298313711514843941053378169062748;\n    uint256 constant deltay1 = 12292291730534257963793035250750833013505862587513324721305952905575695195722;\n    uint256 constant deltay2 = 20744227296603881754617447489692206687227195961073977292626564883622660146422;\n\n    \n    uint256 constant IC0x = 8444387327591820163253359883706304250001395835708102283881672029412593968774;\n    uint256 constant IC0y = 277567402350001170949287541204029095267467381858853916455216632597839881894;\n    \n    uint256 constant IC1x = 11766018000598374647690511651127745003630346152255765679463620118729063279220;\n    uint256 constant IC1y = 9973870620290232174118930849612458053973396098852917252709131237691777167431;\n    \n    uint256 constant IC2x = 21007152236406284962452665998326532111064818140624217664323424373713986554835;\n    uint256 constant IC2y = 21775424933265972488601591944473690558387975377218817711132857025038427581344;\n    \n    uint256 constant IC3x = 19548332954070589452554863336717712265670681575029463650291986455368503640194;\n    uint256 constant IC3y = 9885572105525346384114396000793852863725331019928798599079916138124811450063;\n    \n    uint256 constant IC4x = 20459688676260758193620894047864540995062748169615148342851161008796903469478;\n    uint256 constant IC4y = 7185096966400904659568958817597117358528438755253953902329001546341542579806;\n    \n    uint256 constant IC5x = 15566588852465957839914470257479783208753427872712540953155019219989274639291;\n    uint256 constant IC5y = 13117341851862511824800803143692229606087651943401230287864971446454834743578;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/venmo_send_verifier.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 5710629204359318057562498392234897061794505526378244639613545081979421872324;\n    uint256 constant deltax2 = 990656993167988662763349194790300993619547607285680693352122387169954518876;\n    uint256 constant deltay1 = 716219014029453087010203485855017030343957665868140907538168510860723855404;\n    uint256 constant deltay2 = 15567073068481787678459322691280596720950847803967120869528969231388542383007;\n\n    \n    uint256 constant IC0x = 3627016935680980991432758845809120437097698562642321662019774941798047598180;\n    uint256 constant IC0y = 16742737478481137559777273336649173908087975045426893354724005348183061433359;\n    \n    uint256 constant IC1x = 1454889468509402624274228018232533000837827531552657849863656594197598947498;\n    uint256 constant IC1y = 21114519264105667881501109217530601184286085076749464919673271702318856586869;\n    \n    uint256 constant IC2x = 15214926606177919954497590021391485480795904680262796779354958872907701613369;\n    uint256 constant IC2y = 3436701283643568631088610954415601741399004409005447167420424641912447528939;\n    \n    uint256 constant IC3x = 4535577697185795754970511618264939460763831131849914629687538976336257649268;\n    uint256 constant IC3y = 7758558535557743288212279084775965030097651866120453423634300893790511261820;\n    \n    uint256 constant IC4x = 874294953994422297831973347765527399192587644625708091600444498339317231142;\n    uint256 constant IC4y = 987062449590966973283739390864507348641413150099442677760662058272414279274;\n    \n    uint256 constant IC5x = 21093306057635441117249393023592254587788813974241613308459037792013982125271;\n    uint256 constant IC5y = 2674227458751675036151996130714025181946977717008550031124827209614433661640;\n    \n    uint256 constant IC6x = 13846687013867984054231693830774779045583700534400211257658890706223553634739;\n    uint256 constant IC6y = 8017285138819571587063238313118652954321504644123983130004849545264828919081;\n    \n    uint256 constant IC7x = 13134004890952141957850059371765174729898824494756098133509785273144965229605;\n    uint256 constant IC7y = 19833383650616654544301917274181853787895876513168493371626228893058581160277;\n    \n    uint256 constant IC8x = 15730855678085463666228938279082107543444904323060443712618683292548728266981;\n    uint256 constant IC8y = 11187003173972315212472857297424367154976035201682387760241185052675631112914;\n    \n    uint256 constant IC9x = 19431007015983296833648365920726396734910027676221391642968597625199383752634;\n    uint256 constant IC9y = 21132440606561643161647678729377817341013518219983716149257194049459184921050;\n    \n    uint256 constant IC10x = 4559717915456495626304866642697317683057747436742022494016974327403606371979;\n    uint256 constant IC10y = 11478380993372530002009436682140297146781606321299572933211280870931334446617;\n    \n    uint256 constant IC11x = 16525805622865173604160997674689687443990633252176419982940261013647563901344;\n    uint256 constant IC11y = 792201218354373970098710160330509619168590675536085985581042389294282406443;\n    \n    uint256 constant IC12x = 10525116069038722935367461628431297752051968830490923775813610986261326824582;\n    uint256 constant IC12y = 10970802876973329565857167947893820731407652682848506683295471907792738767120;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n            checkField(calldataload(add(_pubSignals, 384)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }\n"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/venmo_send_verifier_v1.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\n\n    \n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\n    \n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\n    \n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\n    \n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\n    \n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\n    \n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\n    \n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\n    \n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\n    \n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\n    \n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\n    \n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\n    \n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\n    \n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\n    \n \n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n            \n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n                \n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n                \n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n                \n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n                \n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n                \n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n                \n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n                \n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n                \n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n                \n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n                \n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n                \n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n                \n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n                \n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n            \n            checkField(calldataload(add(_pubSignals, 0)))\n            \n            checkField(calldataload(add(_pubSignals, 32)))\n            \n            checkField(calldataload(add(_pubSignals, 64)))\n            \n            checkField(calldataload(add(_pubSignals, 96)))\n            \n            checkField(calldataload(add(_pubSignals, 128)))\n            \n            checkField(calldataload(add(_pubSignals, 160)))\n            \n            checkField(calldataload(add(_pubSignals, 192)))\n            \n            checkField(calldataload(add(_pubSignals, 224)))\n            \n            checkField(calldataload(add(_pubSignals, 256)))\n            \n            checkField(calldataload(add(_pubSignals, 288)))\n            \n            checkField(calldataload(add(_pubSignals, 320)))\n            \n            checkField(calldataload(add(_pubSignals, 352)))\n            \n            checkField(calldataload(add(_pubSignals, 384)))\n            \n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "contracts-ramp/contracts/verifiers/venmo_send_verifier_v2.sol",
    "content": "// SPDX-License-Identifier: GPL-3.0\n/*\n    Copyright 2021 0KIMS association.\n\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\n\n    snarkJS is a free software: you can redistribute it and/or modify it\n    under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n    License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\n*/\n\npragma solidity >=0.7.0 <0.9.0;\n\ncontract Groth16Verifier {\n    // Scalar field size\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    // Base field size\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n\n    // Verification Key data\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\n\n\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\n\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\n\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\n\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\n\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\n\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\n\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\n\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\n\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\n\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\n\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\n\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\n\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\n\n\n    // Memory data\n    uint16 constant pVk = 0;\n    uint16 constant pPairing = 128;\n\n    uint16 constant pLastMem = 896;\n\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\n        assembly {\n            function checkField(v) {\n                if iszero(lt(v, q)) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            // G1 function to multiply a G1 value(x,y) to value in an address\n            function g1_mulAccC(pR, x, y, s) {\n                let success\n                let mIn := mload(0x40)\n                mstore(mIn, x)\n                mstore(add(mIn, 32), y)\n                mstore(add(mIn, 64), s)\n\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n\n                mstore(add(mIn, 64), mload(pR))\n                mstore(add(mIn, 96), mload(add(pR, 32)))\n\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\n\n                if iszero(success) {\n                    mstore(0, 0)\n                    return(0, 0x20)\n                }\n            }\n\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\n                let _pPairing := add(pMem, pPairing)\n                let _pVk := add(pMem, pVk)\n\n                mstore(_pVk, IC0x)\n                mstore(add(_pVk, 32), IC0y)\n\n                // Compute the linear combination vk_x\n\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\n\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\n\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\n\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\n\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\n\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\n\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\n\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\n\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\n\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\n\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\n\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\n\n\n                // -A\n                mstore(_pPairing, calldataload(pA))\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\n\n                // B\n                mstore(add(_pPairing, 64), calldataload(pB))\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\n\n                // alpha1\n                mstore(add(_pPairing, 192), alphax)\n                mstore(add(_pPairing, 224), alphay)\n\n                // beta2\n                mstore(add(_pPairing, 256), betax1)\n                mstore(add(_pPairing, 288), betax2)\n                mstore(add(_pPairing, 320), betay1)\n                mstore(add(_pPairing, 352), betay2)\n\n                // vk_x\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\n\n\n                // gamma2\n                mstore(add(_pPairing, 448), gammax1)\n                mstore(add(_pPairing, 480), gammax2)\n                mstore(add(_pPairing, 512), gammay1)\n                mstore(add(_pPairing, 544), gammay2)\n\n                // C\n                mstore(add(_pPairing, 576), calldataload(pC))\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\n\n                // delta2\n                mstore(add(_pPairing, 640), deltax1)\n                mstore(add(_pPairing, 672), deltax2)\n                mstore(add(_pPairing, 704), deltay1)\n                mstore(add(_pPairing, 736), deltay2)\n\n\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\n\n                isOk := and(success, mload(_pPairing))\n            }\n\n            let pMem := mload(0x40)\n            mstore(0x40, add(pMem, pLastMem))\n\n            // Validate that all evaluations ∈ F\n\n            checkField(calldataload(add(_pubSignals, 0)))\n\n            checkField(calldataload(add(_pubSignals, 32)))\n\n            checkField(calldataload(add(_pubSignals, 64)))\n\n            checkField(calldataload(add(_pubSignals, 96)))\n\n            checkField(calldataload(add(_pubSignals, 128)))\n\n            checkField(calldataload(add(_pubSignals, 160)))\n\n            checkField(calldataload(add(_pubSignals, 192)))\n\n            checkField(calldataload(add(_pubSignals, 224)))\n\n            checkField(calldataload(add(_pubSignals, 256)))\n\n            checkField(calldataload(add(_pubSignals, 288)))\n\n            checkField(calldataload(add(_pubSignals, 320)))\n\n            checkField(calldataload(add(_pubSignals, 352)))\n\n            checkField(calldataload(add(_pubSignals, 384)))\n\n\n            // Validate all evaluations\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\n\n            mstore(0, isValid)\n             return(0, 0x20)\n         }\n     }\n }"
  },
  {
    "path": "contracts-ramp/deploy/00_deploy_venmo_contracts.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nconst circom = require(\"circomlibjs\");\n\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  USDC,\n  USDC_MINT_AMOUNT,\n  USDC_RECIPIENT,\n} from \"../deployments/parameters\";\nimport { addWritePermission, getDeployedContractAddress, setNewOwner } from \"../deployments/helpers\";\nimport { PaymentProviders } from \"../utils/types\";\nimport { ADDRESS_ZERO } from \"../utils/constants\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [ deployer ] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n  const paymentProvider = PaymentProviders.Venmo;\n\n  let usdcAddress;\n  if (!USDC[network]) {\n    const usdcToken = await deploy(\"USDCMock\", {\n      from: deployer,\n      args: [USDC_MINT_AMOUNT, \"USDC\", \"USDC\"],\n    });\n    usdcAddress = usdcToken.address;\n    console.log(\"USDC deployed...\");\n  } else {\n    usdcAddress = USDC[network];\n  }\n\n  const poseidon = await deploy(\"Poseidon3\", {\n    from: deployer,\n    contract: {\n      abi: circom.poseidonContract.generateABI(3),\n      bytecode: circom.poseidonContract.createCode(3),\n    }\n  });\n  console.log(\"Poseidon3 deployed at\", poseidon.address);\n\n  const ramp = await deploy(\"Ramp\", {\n    from: deployer,\n    args: [\n      deployer,\n      usdcAddress,\n      poseidon.address,\n      MIN_DEPOSIT_AMOUNT[paymentProvider][network],\n      MAX_ONRAMP_AMOUNT[paymentProvider][network],\n      INTENT_EXPIRATION_PERIOD[paymentProvider][network],\n      ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network],\n      SUSTAINABILITY_FEE[paymentProvider][network],\n      SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] \n        : deployer,\n    ],\n  });\n  console.log(\"Ramp deployed at\", ramp.address);\n\n  const keyHashAdapter = await deploy(\"VenmoManagedKeyHashAdapter\", {\n    contract: \"ManagedKeyHashAdapter\",\n    from: deployer,\n    args: [SERVER_KEY_HASH[paymentProvider][0]],\n  });\n  console.log(\"KeyHashAdapter deployed at\", keyHashAdapter.address);\n\n  const nullifierRegistry = await deploy(\"NullifierRegistry\", {\n    from: deployer,\n    args: [],\n  });\n  console.log(\"Nullifier deployed at\", nullifierRegistry.address);\n\n  const registrationProcessor = await deploy(\"VenmoRegistrationProcessor\", {\n    from: deployer,\n    args: [ramp.address, keyHashAdapter.address, nullifierRegistry.address, FROM_EMAIL[paymentProvider]],\n  });\n  console.log(\"RegistrationProcessor deployed at\", registrationProcessor.address);\n\n  const sendProcessor = await deploy(\"VenmoSendProcessor\", {\n    from: deployer,\n    args: [ramp.address, keyHashAdapter.address, nullifierRegistry.address, FROM_EMAIL[paymentProvider]],\n  });\n  console.log(\"SendProcessor deployed at\", sendProcessor.address);\n  console.log(\"Processors deployed...\");\n\n  const rampContract = await ethers.getContractAt(\"Ramp\", ramp.address);\n  if ((await rampContract.registrationProcessor()) == ADDRESS_ZERO) {\n    await rampContract.initialize(\n      registrationProcessor.address,\n      sendProcessor.address\n    );\n  \n    console.log(\"Ramp initialized...\");\n  }\n\n  const nullifierRegistryContract = await ethers.getContractAt(\"NullifierRegistry\", nullifierRegistry.address);\n  await addWritePermission(hre, nullifierRegistryContract, sendProcessor.address);\n\n  console.log(\"NullifierRegistry permissions added...\");\n  \n  if (network == \"goerli\") {\n    const usdcContract = await ethers.getContractAt(\"USDCMock\", usdcAddress);\n    await usdcContract.transfer(USDC_RECIPIENT, USDC_MINT_AMOUNT);\n  }\n\n  console.log(\"Transferring ownership of contracts...\");\n  await setNewOwner(hre, rampContract, multiSig);\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"VenmoRegistrationProcessor\", registrationProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"VenmoSendProcessor\", sendProcessor.address),\n    multiSig\n  );\n  await setNewOwner(hre, nullifierRegistryContract, multiSig);\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"ManagedKeyHashAdapter\", keyHashAdapter.address),\n    multiSig\n  );\n\n  console.log(\"Deploy finished...\");\n};\n\nfunc.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> => {\n  const network = hre.network.name;\n  if (network != \"localhost\") {\n    try { getDeployedContractAddress(hre.network.name, \"Ramp\") } catch (e) {return false;}\n    return true;\n  }\n  return false;\n};\n\nexport default func;\n"
  },
  {
    "path": "contracts-ramp/deploy/01_deploy_hdfc_contracts.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nconst circom = require(\"circomlibjs\");\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../deployments/parameters\";\nimport { addWritePermission, getDeployedContractAddress, setNewOwner } from \"../deployments/helpers\";\nimport { PaymentProviders } from \"../utils/types\";\nimport { ZERO } from \"../utils/constants\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [ deployer ] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n  const paymentProvider = PaymentProviders.HDFC;\n\n  let usdcAddress = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n  const poseidon6 = await deploy(\"Poseidon6\", {\n    from: deployer,\n    contract: {\n      abi: circom.poseidonContract.generateABI(6),\n      bytecode: circom.poseidonContract.createCode(6),\n    }\n  });\n  console.log(\"Poseidon6 deployed at \", poseidon6.address);\n\n  const hdfcRamp = await deploy(\"HDFCRamp\", {\n    from: deployer,\n    args: [\n      deployer,\n      usdcAddress,\n      getDeployedContractAddress(network, \"Poseidon3\"),\n      poseidon6.address,\n      MIN_DEPOSIT_AMOUNT[paymentProvider][network],\n      MAX_ONRAMP_AMOUNT[paymentProvider][network],\n      INTENT_EXPIRATION_PERIOD[paymentProvider][network],\n      ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network],\n      SUSTAINABILITY_FEE[paymentProvider][network],\n      SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer,\n    ],\n  });\n  console.log(\"HDFCRamp deployed at\", hdfcRamp.address);\n\n  const keyHashAdapter = await deploy(\"HDFCManagedKeyHashAdapter\", {\n    contract: \"ManagedKeyHashAdapterV2\",\n    from: deployer,\n    args: [SERVER_KEY_HASH[paymentProvider]],\n  });\n  console.log(\"KeyHashAdapter deployed at\", keyHashAdapter.address);\n\n  const nullifierRegistryContract = await ethers.getContractAt(\n    \"NullifierRegistry\",\n    getDeployedContractAddress(network, \"NullifierRegistry\")\n  );\n\n  const registrationProcessor = await deploy(\"HDFCRegistrationProcessor\", {\n    from: deployer,\n    args: [\n      hdfcRamp.address,\n      keyHashAdapter.address,\n      nullifierRegistryContract.address,\n      FROM_EMAIL[paymentProvider],\n      ZERO\n    ],\n  });\n  console.log(\"RegistrationProcessor deployed at\", registrationProcessor.address);\n\n  const sendProcessor = await deploy(\"HDFCSendProcessor\", {\n    from: deployer,\n    args: [\n      getDeployedContractAddress(network, \"HDFCRamp\"),\n      keyHashAdapter.address,\n      nullifierRegistryContract.address,\n      FROM_EMAIL[paymentProvider],\n      TIMESTAMP_BUFFER[paymentProvider]\n    ],\n  });\n  console.log(\"SendProcessor deployed at \", sendProcessor.address);\n  console.log(\"Processors deployed...\");\n\n  const hdfcRampContract = await ethers.getContractAt(\"HDFCRamp\", hdfcRamp.address);\n  if (!(await hdfcRampContract.isInitialized())) {\n    await hdfcRampContract.initialize(\n      registrationProcessor.address,\n      sendProcessor.address\n    );\n  \n    console.log(\"HDFCRamp initialized...\");\n  }\n\n  await addWritePermission(hre, nullifierRegistryContract, sendProcessor.address);\n  await addWritePermission(hre, nullifierRegistryContract, registrationProcessor.address);\n  console.log(\"NullifierRegistry permissions added...\");\n\n  console.log(\"Transferring ownership of contracts...\");\n  await setNewOwner(hre, hdfcRampContract, multiSig);\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"HDFCRegistrationProcessor\", registrationProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"HDFCSendProcessor\", sendProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"ManagedKeyHashAdapterV2\", keyHashAdapter.address),\n    multiSig\n  );\n\n  console.log(\"Deploy finished...\");\n};\n\nfunc.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> => {\n  const network = hre.network.name;\n  if (network != \"localhost\") {\n    try { getDeployedContractAddress(hre.network.name, \"HDFCRamp\") } catch (e) {return false;}\n    return true;\n  }\n  return false;\n};\n\nexport default func;\n"
  },
  {
    "path": "contracts-ramp/deploy/02_deploy_venmo_v2.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../deployments/parameters\";\nimport { addWritePermission, getDeployedContractAddress, setNewOwner } from \"../deployments/helpers\";\nimport { PaymentProviders } from \"../utils/types\";\nimport { ZERO } from \"../utils/constants\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [ deployer ] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n  const paymentProvider = PaymentProviders.Venmo;\n\n  const usdcAddress = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n  const ramp = await deploy(\"VenmoRampV2\", {\n    from: deployer,\n    args: [\n      deployer,\n      getDeployedContractAddress(network, \"Ramp\"),\n      usdcAddress,\n      getDeployedContractAddress(network, \"Poseidon3\"),\n      MIN_DEPOSIT_AMOUNT[paymentProvider][network],\n      MAX_ONRAMP_AMOUNT[paymentProvider][network],\n      INTENT_EXPIRATION_PERIOD[paymentProvider][network],\n      ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network],\n      SUSTAINABILITY_FEE[paymentProvider][network],\n      SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] \n        : deployer,\n    ],\n  });\n  console.log(\"VenmoRampV2 deployed at\", ramp.address);\n\n  const keyHashAdapterDeploy = await deploy(\"VenmoManagedKeyHashAdapterV2\", {\n    contract: \"ManagedKeyHashAdapterV2\",\n    from: deployer,\n    args: [SERVER_KEY_HASH[paymentProvider]],\n  });\n  console.log(\"VenmoV2KeyHashAdapter deployed at\", keyHashAdapterDeploy.address);\n\n  const nullifierRegistryContract = await ethers.getContractAt(\n    \"NullifierRegistry\",\n    getDeployedContractAddress(network, \"NullifierRegistry\")\n  );\n\n  const registrationProcessor = await deploy(\"VenmoRegistrationProcessorV2\", {\n    from: deployer,\n    args: [\n      ramp.address,\n      keyHashAdapterDeploy.address,\n      nullifierRegistryContract.address,\n      FROM_EMAIL[paymentProvider],\n      ZERO,\n    ],\n  });\n  console.log(\"RegistrationProcessorV2 deployed at\", registrationProcessor.address);\n\n  const sendProcessor = await deploy(\"VenmoSendProcessorV2\", {\n    from: deployer,\n    args: [\n      ramp.address,\n      keyHashAdapterDeploy.address,\n      nullifierRegistryContract.address,\n      FROM_EMAIL[paymentProvider],\n      TIMESTAMP_BUFFER[paymentProvider],\n    ],\n  });\n  console.log(\"SendProcessorV2 deployed at\", sendProcessor.address);\n  console.log(\"Processors deployed...\");\n\n  const rampContract = await ethers.getContractAt(\"VenmoRampV2\", ramp.address);\n  if (!(await rampContract.isInitialized())) {\n    await rampContract.initialize(\n      registrationProcessor.address,\n      sendProcessor.address\n    );\n  \n    console.log(\"VenmoRampV2 initialized...\");\n  }\n\n  await addWritePermission(hre, nullifierRegistryContract, registrationProcessor.address);\n  await addWritePermission(hre, nullifierRegistryContract, sendProcessor.address);\n\n  console.log(\"NullifierRegistry permissions added...\");\n\n  console.log(\"Transferring ownership of contracts...\");\n  await setNewOwner(hre, rampContract, multiSig);\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"VenmoRegistrationProcessorV2\", registrationProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"VenmoSendProcessorV2\", sendProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"ManagedKeyHashAdapterV2\", keyHashAdapterDeploy.address),\n    multiSig\n  );\n\n  console.log(\"Deploy finished...\");\n};\n\nfunc.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> => {\n  const network = hre.network.name;\n  if (network != \"localhost\") {\n    try { getDeployedContractAddress(hre.network.name, \"VenmoRampV2\") } catch (e) {return false;}\n    return true;\n  }\n  return false;\n};\n\nexport default func;\n"
  },
  {
    "path": "contracts-ramp/deploy/03_deploy_garanti_contracts.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nconst circom = require(\"circomlibjs\");\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../deployments/parameters\";\nimport { addWritePermission, getDeployedContractAddress, setNewOwner } from \"../deployments/helpers\";\nimport { PaymentProviders } from \"../utils/types\";\nimport { ZERO } from \"../utils/constants\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [ deployer ] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n  const paymentProvider = PaymentProviders.Garanti;\n\n  let usdcAddress = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n  const garantiRamp = await deploy(\"GarantiRamp\", {\n    from: deployer,\n    args: [\n      deployer,\n      usdcAddress,\n      MIN_DEPOSIT_AMOUNT[paymentProvider][network],\n      MAX_ONRAMP_AMOUNT[paymentProvider][network],\n      INTENT_EXPIRATION_PERIOD[paymentProvider][network],\n      ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network],\n      SUSTAINABILITY_FEE[paymentProvider][network],\n      SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer,\n    ],\n    log: true\n  });\n  console.log(\"GarantiRamp deployed at\", garantiRamp.address);\n\n  const keyHashAdapter = await deploy(\"GarantiManagedKeyHashAdapter\", {\n    contract: \"ManagedKeyHashAdapterV2\",\n    from: deployer,\n    args: [SERVER_KEY_HASH[paymentProvider]],\n    log: true\n  });\n  console.log(\"KeyHashAdapter deployed at\", keyHashAdapter.address);\n\n  const nullifierRegistryContract = await ethers.getContractAt(\n    \"NullifierRegistry\",\n    getDeployedContractAddress(network, \"NullifierRegistry\")\n  );\n\n  const bodyHashVerifierDeploy = await deploy(\n    \"GarantiBodyHashVerifier\",\n    {\n      from: deployer,\n      args: [],\n      log: true,\n      contract: \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol:Groth16Verifier\"\n    }\n  );\n\n  const registrationProcessor = await deploy(\"GarantiRegistrationProcessor\", {\n    from: deployer,\n    args: [\n      garantiRamp.address,\n      keyHashAdapter.address,\n      nullifierRegistryContract.address,\n      bodyHashVerifierDeploy.address,\n      FROM_EMAIL[paymentProvider],\n      ZERO\n    ],\n    log: true\n  });\n  console.log(\"RegistrationProcessor deployed at\", registrationProcessor.address);\n\n  const sendProcessor = await deploy(\"GarantiSendProcessor\", {\n    from: deployer,\n    args: [\n      getDeployedContractAddress(network, \"GarantiRamp\"),\n      keyHashAdapter.address,\n      nullifierRegistryContract.address,\n      bodyHashVerifierDeploy.address,\n      FROM_EMAIL[paymentProvider],\n      TIMESTAMP_BUFFER[paymentProvider]\n    ],\n    log: true\n  });\n  console.log(\"SendProcessor deployed at \", sendProcessor.address);\n  console.log(\"Processors deployed...\");\n\n  const garantiRampContract = await ethers.getContractAt(\"GarantiRamp\", garantiRamp.address);\n  if (!(await garantiRampContract.isInitialized())) {\n    await garantiRampContract.initialize(\n      registrationProcessor.address,\n      sendProcessor.address\n    );\n  \n    console.log(\"GarantiRamp initialized...\");\n  }\n\n  await addWritePermission(hre, nullifierRegistryContract, sendProcessor.address);\n  await addWritePermission(hre, nullifierRegistryContract, registrationProcessor.address);\n  console.log(\"NullifierRegistry permissions added...\");\n\n  console.log(\"Transferring ownership of contracts...\");\n  await setNewOwner(hre, garantiRampContract, multiSig);\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"GarantiRegistrationProcessor\", registrationProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"GarantiSendProcessor\", sendProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"ManagedKeyHashAdapterV2\", keyHashAdapter.address),\n    multiSig\n  );\n\n  console.log(\"Deploy finished...\");\n};\n\nfunc.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> => {\n  const network = hre.network.name;\n  if (network != \"localhost\") {\n    try { getDeployedContractAddress(hre.network.name, \"GarantiRamp\") } catch (e) {return false;}\n    return true;\n  }\n  return false;\n};\n\nexport default func;\n"
  },
  {
    "path": "contracts-ramp/deploy/04_deploy_wise_contracts.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nconst circom = require(\"circomlibjs\");\nimport {\n  ACCOUNT_TLS_PARAMS,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  OFFRAMPER_TLS_PARAMS,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SEND_TLS_PARAMS,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../deployments/parameters\";\nimport { addWritePermission, getDeployedContractAddress, setNewOwner } from \"../deployments/helpers\";\nimport { PaymentProviders } from \"../utils/types\";\nimport { ZERO } from \"../utils/constants\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [ deployer ] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n  const paymentProvider = PaymentProviders.Wise;\n\n  let usdcAddress = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n  const wiseRamp = await deploy(\"WiseRamp\", {\n    from: deployer,\n    args: [\n      deployer,\n      usdcAddress,\n      MIN_DEPOSIT_AMOUNT[paymentProvider][network],\n      MAX_ONRAMP_AMOUNT[paymentProvider][network],\n      INTENT_EXPIRATION_PERIOD[paymentProvider][network],\n      ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network],\n      SUSTAINABILITY_FEE[paymentProvider][network],\n      SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer,\n    ],\n    log: true\n  });\n  const wiseAccountRegistry = await deploy(\"WiseAccountRegistry\", {\n    from: deployer,\n    args: [deployer],\n    log: true\n  });\n  console.log(\"WiseRamp deployed at\", wiseRamp.address);\n\n  const nullifierRegistryContract = await ethers.getContractAt(\n    \"NullifierRegistry\",\n    getDeployedContractAddress(network, \"NullifierRegistry\")\n  );\n\n  const accountRegistrationProcessor = await deploy(\"WiseAccountRegistrationProcessor\", {\n    from: deployer,\n    args: [\n      wiseAccountRegistry.address,\n      ACCOUNT_TLS_PARAMS[paymentProvider][network].verifierSigningKey,\n      nullifierRegistryContract.address,\n      ZERO,\n      ACCOUNT_TLS_PARAMS[paymentProvider][network].endpoint,\n      ACCOUNT_TLS_PARAMS[paymentProvider][network].host\n    ],\n    log: true\n  });\n  console.log(\"AccountRegistrationProcessor deployed at\", accountRegistrationProcessor.address);\n\n  const offRamperRegistrationProcessor = await deploy(\"WiseOffRamperRegistrationProcessor\", {\n    from: deployer,\n    args: [\n      wiseAccountRegistry.address,\n      OFFRAMPER_TLS_PARAMS[paymentProvider][network].verifierSigningKey,\n      nullifierRegistryContract.address,\n      ZERO,\n      OFFRAMPER_TLS_PARAMS[paymentProvider][network].endpoint,\n      OFFRAMPER_TLS_PARAMS[paymentProvider][network].host,\n    ],\n    log: true\n  });\n  console.log(\"AccountRegistrationProcessor deployed at\", offRamperRegistrationProcessor.address);\n\n  const sendProcessor = await deploy(\"WiseSendProcessor\", {\n    from: deployer,\n    args: [\n      wiseRamp.address,\n      nullifierRegistryContract.address,\n      TIMESTAMP_BUFFER[paymentProvider],\n      SEND_TLS_PARAMS[paymentProvider][network].endpoint,\n      SEND_TLS_PARAMS[paymentProvider][network].host\n    ],\n    log: true\n  });\n  console.log(\"SendProcessor deployed at \", sendProcessor.address);\n  console.log(\"Processors deployed...\");\n\n  const wiseRampContract = await ethers.getContractAt(\"WiseRamp\", wiseRamp.address);\n  if (!(await wiseRampContract.isInitialized())) {\n    await wiseRampContract.initialize(\n      wiseAccountRegistry.address,\n      sendProcessor.address\n    );\n  \n    console.log(\"WiseRamp initialized...\");\n  }\n\n  const wiseAccountRegistryContract = await ethers.getContractAt(\"WiseAccountRegistry\", wiseAccountRegistry.address);\n  if (!(await wiseAccountRegistryContract.isInitialized())) {\n    await wiseAccountRegistryContract.initialize(\n      accountRegistrationProcessor.address,\n      offRamperRegistrationProcessor.address\n    );\n  \n    console.log(\"WiseAccountRegistry initialized...\");\n  }\n\n  await addWritePermission(hre, nullifierRegistryContract, sendProcessor.address);\n  await addWritePermission(hre, nullifierRegistryContract, accountRegistrationProcessor.address);\n  await addWritePermission(hre, nullifierRegistryContract, offRamperRegistrationProcessor.address);\n  console.log(\"NullifierRegistry permissions added...\");\n\n  console.log(\"Transferring ownership of contracts...\");\n  await setNewOwner(hre, wiseRampContract, multiSig);\n  await setNewOwner(hre, wiseAccountRegistryContract, multiSig);\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"WiseAccountRegistrationProcessor\", accountRegistrationProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"WiseOffRamperRegistrationProcessor\", offRamperRegistrationProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"WiseSendProcessor\", sendProcessor.address),\n    multiSig\n  );\n\n  console.log(\"Deploy finished...\");\n};\n\nfunc.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> => {\n  return true;\n  // const network = hre.network.name;\n  // if (network != \"localhost\") {\n  //   try { getDeployedContractAddress(hre.network.name, \"WiseRamp\") } catch (e) {return false;}\n  //   return true;\n  // }\n  // return false;\n};\n\nexport default func;\n"
  },
  {
    "path": "contracts-ramp/deploy/05_deploy_revolut_contracts.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nconst circom = require(\"circomlibjs\");\nimport {\n  ACCOUNT_TLS_PARAMS,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SEND_TLS_PARAMS,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../deployments/parameters\";\nimport { addWritePermission, getDeployedContractAddress, setNewOwner } from \"../deployments/helpers\";\nimport { PaymentProviders } from \"../utils/types\";\nimport { ZERO } from \"../utils/constants\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [ deployer ] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n  const paymentProvider = PaymentProviders.Revolut;\n\n  let usdcAddress = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n  const revolutRamp = await deploy(\"RevolutRamp\", {\n    from: deployer,\n    args: [\n      deployer,\n      usdcAddress,\n      MIN_DEPOSIT_AMOUNT[paymentProvider][network],\n      MAX_ONRAMP_AMOUNT[paymentProvider][network],\n      INTENT_EXPIRATION_PERIOD[paymentProvider][network],\n      ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network],\n      SUSTAINABILITY_FEE[paymentProvider][network],\n      SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer,\n    ],\n    log: true\n  });\n  const revolutAccountRegistry = await deploy(\"RevolutAccountRegistry\", {\n    from: deployer,\n    args: [deployer],\n    log: true\n  });\n  console.log(\"RevolutRamp deployed at\", revolutRamp.address);\n\n  const nullifierRegistryContract = await ethers.getContractAt(\n    \"NullifierRegistry\",\n    getDeployedContractAddress(network, \"NullifierRegistry\")\n  );\n\n  const accountRegistrationProcessor = await deploy(\"RevolutAccountRegistrationProcessor\", {\n    from: deployer,\n    args: [\n      revolutAccountRegistry.address,\n      ACCOUNT_TLS_PARAMS[paymentProvider][network].verifierSigningKey,\n      ACCOUNT_TLS_PARAMS[paymentProvider][network].notaryKeyHash,\n      nullifierRegistryContract.address,\n      ZERO,\n      ACCOUNT_TLS_PARAMS[paymentProvider][network].endpoint,\n      ACCOUNT_TLS_PARAMS[paymentProvider][network].host\n    ],\n    log: true\n  });\n  console.log(\"AccountRegistrationProcessor deployed at\", accountRegistrationProcessor.address);\n\n  const sendProcessor = await deploy(\"RevolutSendProcessor\", {\n    from: deployer,\n    args: [\n      revolutRamp.address,\n      nullifierRegistryContract.address,\n      TIMESTAMP_BUFFER[paymentProvider],\n      SEND_TLS_PARAMS[paymentProvider][network].endpoint,\n      SEND_TLS_PARAMS[paymentProvider][network].host\n    ],\n    log: true\n  });\n  console.log(\"SendProcessor deployed at \", sendProcessor.address);\n  console.log(\"Processors deployed...\");\n\n  const revolutRampContract = await ethers.getContractAt(\"RevolutRamp\", revolutRamp.address);\n  if (!(await revolutRampContract.isInitialized())) {\n    await revolutRampContract.initialize(\n      revolutAccountRegistry.address,\n      sendProcessor.address\n    );\n  \n    console.log(\"RevolutRamp initialized...\");\n  }\n\n  const revolutAccountRegistryContract = await ethers.getContractAt(\"RevolutAccountRegistry\", revolutAccountRegistry.address);\n  if (!(await revolutAccountRegistryContract.isInitialized())) {\n    await revolutAccountRegistryContract.initialize(\n      accountRegistrationProcessor.address\n    );\n  \n    console.log(\"RevolutAccountRegistry initialized...\");\n  }\n\n  await addWritePermission(hre, nullifierRegistryContract, sendProcessor.address);\n  await addWritePermission(hre, nullifierRegistryContract, accountRegistrationProcessor.address);\n  console.log(\"NullifierRegistry permissions added...\");\n\n  console.log(\"Transferring ownership of contracts...\");\n  await setNewOwner(hre, revolutRampContract, multiSig);\n  await setNewOwner(hre, revolutAccountRegistryContract, multiSig);\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"RevolutAccountRegistrationProcessor\", accountRegistrationProcessor.address),\n    multiSig\n  );\n  await setNewOwner(\n    hre,\n    await ethers.getContractAt(\"RevolutSendProcessor\", sendProcessor.address),\n    multiSig\n  );\n\n  console.log(\"Deploy finished...\");\n};\n\nfunc.skip = async (hre: HardhatRuntimeEnvironment): Promise<boolean> => {\n  // const network = hre.network.name;\n  // if (network != \"localhost\") {\n  //   try { getDeployedContractAddress(hre.network.name, \"RevolutRamp\") } catch (e) {return false;}\n  //   return true;\n  // }\n  return false;\n};\n\nexport default func;\n"
  },
  {
    "path": "contracts-ramp/deploy/deploy_summary.ts",
    "content": "import \"module-alias/register\";\n\nimport { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { DeployFunction } from \"hardhat-deploy/types\";\nimport { ethers } from \"hardhat\";\n\nconst circom = require(\"circomlibjs\");\nimport {\n  MULTI_SIG,\n  USDC\n} from \"../deployments/parameters\";\nimport { getDeployedContractAddress, setNewOwner } from \"../deployments/helpers\";\nimport { PaymentProviders } from \"../utils/types\";\n\n// Deployment Scripts\nconst func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {\n  const { deploy } = await hre.deployments\n  const network = hre.deployments.getNetworkName();\n\n  const [deployer] = await hre.getUnnamedAccounts();\n  const multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer;\n\n  console.log(\n    `\n    Deploment summary for ${network}:\n    deployer:                   ${deployer}\n    deployer nonce:             ${await hre.ethers.provider.getTransactionCount(deployer)}\n    multiSig:                   ${multiSig}\n    multiSig nonce:             ${await hre.ethers.provider.getTransactionCount(multiSig)}\n    ----------------------------------------------------------------------\n    Ramp:                                 ${getDeployedContractAddress(network, \"Ramp\")}\n    HDFCRamp:                             ${getDeployedContractAddress(network, \"HDFCRamp\")}\n    VenmoRampV2:                          ${getDeployedContractAddress(network, \"VenmoRampV2\")}\n    GarantiRamp:                          ${getDeployedContractAddress(network, \"GarantiRamp\")}\n    RevolutRamp:                          ${getDeployedContractAddress(network, \"RevolutRamp\")}\n    VenmoRegistrationProcessor:           ${getDeployedContractAddress(network, \"VenmoRegistrationProcessor\")}\n    VenmoSendProcessor:                   ${getDeployedContractAddress(network, \"VenmoSendProcessor\")}\n    VenmoRegistrationProcessorV2:         ${getDeployedContractAddress(network, \"VenmoRegistrationProcessorV2\")}\n    VenmoSendProcessorV2:                 ${getDeployedContractAddress(network, \"VenmoSendProcessorV2\")}\n    VenmoKeyHashAdapter:                  ${getDeployedContractAddress(network, \"VenmoManagedKeyHashAdapter\")}\n    VenmoKeyHashAdapterV2:                ${getDeployedContractAddress(network, \"VenmoManagedKeyHashAdapterV2\")}\n    HDFCRegistrationProcessor:            ${getDeployedContractAddress(network, \"HDFCRegistrationProcessor\")}\n    HDFCSendProcessor:                    ${getDeployedContractAddress(network, \"HDFCSendProcessor\")}\n    HDFCKeyHashAdapter:                   ${getDeployedContractAddress(network, \"HDFCManagedKeyHashAdapter\")}\n    GarantiRegistrationProcessor:         ${getDeployedContractAddress(network, \"GarantiRegistrationProcessor\")}\n    GarantiSendProcessor:                 ${getDeployedContractAddress(network, \"GarantiSendProcessor\")}\n    GarantiKeyHashAdapter:                ${getDeployedContractAddress(network, \"GarantiManagedKeyHashAdapter\")}\n    RevolutAccountRegistry:               ${getDeployedContractAddress(network, \"RevolutAccountRegistry\")}\n    RevolutAccountRegistrationProcessor:  ${getDeployedContractAddress(network, \"RevolutAccountRegistrationProcessor\")}\n    RevolutSendProcessor:                 ${getDeployedContractAddress(network, \"RevolutSendProcessor\")}\n    NullifierRegistry:                    ${getDeployedContractAddress(network, \"NullifierRegistry\")}\n    USDC:                                 ${USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\")}\n    Poseidon3:                            ${getDeployedContractAddress(network, \"Poseidon3\")}\n    Poseidon6:                            ${getDeployedContractAddress(network, \"Poseidon6\")}\n    `\n  );\n};\n\nfunc.runAtTheEnd = true;\n\nexport default func;\n"
  },
  {
    "path": "contracts-ramp/deployments/base/.chainId",
    "content": "8453"
  },
  {
    "path": "contracts-ramp/deployments/base/GarantiBodyHashVerifier.json",
    "content": "{\n  \"address\": \"0x2D86A67402E9d9FbD616E02BeFFc21Edc30Ae64E\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[4]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[4]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x5823da187916828dae21b5bd62ac8ae56802352e9a27ab93c3ea570e935976b7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x2D86A67402E9d9FbD616E02BeFFc21Edc30Ae64E\",\n    \"transactionIndex\": 20,\n    \"gasUsed\": \"414246\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x808eac99a08ac84eebe49ba5015d86c0c38006ac8d57058bf42ddd47d5736f24\",\n    \"transactionHash\": \"0x5823da187916828dae21b5bd62ac8ae56802352e9a27ab93c3ea570e935976b7\",\n    \"logs\": [],\n    \"blockNumber\": 12230700,\n    \"cumulativeGasUsed\": \"3414935\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\\\":\\\"Groth16Verifier\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\\\n    \\\\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\\\n    \\\\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\\\n    \\\\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\\\n    \\\\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x6203eac560e097469393cb611e298265692297a8e6bb05e81d642eb888fc9ee9\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610687806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004361003e3660046105f7565b610057565b604051901515815260200160405180910390f35b600061056a565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2d84602728848e471bd1ba9e560f82ab8a7eec80bd3014f76ebd173d6ca628bc85527f1a7ded6d8fdaf30f436cf3f3bfa878a07585d245de1b30e632ec87025f97e82560208601526000608086018661019a87357f2eacdafb8a074f55c7eeaeaba8e637580efd6becf4cc32e3ffcb29d5f7d5c47c7f0ba89cd7566d8ba7283a2c695154fd3596a3fa79ceb3fff200e4a1bc6df50c0684610092565b6101ea60208801357f22c4fc2bb63514decde9458ccb4bc65a47aa468ef49618e4eda09120cf429d707f0fdf44fe63793ab49f743161b2aecf184517b4bb0fae7702da1f596ed3c85bd384610092565b61023a60408801357f260137477524ec7727275599f381fb4d4dcc29fed4c0333d45ca9638a7ad42c47f05b0b02830349454814f64e84c47e6efc8ab5b2eb0b771a4ba2079c48facffde84610092565b61028a60608801357f12c261380019d137f4c8e7e13bbb8231d5f1e834377311c5dc5e0f2b9d758db97f1f359c754273ab6f981835d1bb37f8c007d8b75ac24d775ff24098f2577f70f584610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1982c6465dbad02e8ffe7203ec829194caa6d8f0c00a28953fe9763ecfbc0d866102808201527f16dddf97803669507bc9011f92e4fff75ea52e1891dfc6655bed759aa87cf4146102a08201527f10f7390ef109560803b040cefb04b3a2400f425ccf60456c6f1815272e05c8a06102c08201527f2a7488e34e7971bee4a74881cf790f1da42411e95a261bb1a7049098f3c8ef1c6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610582600084013561005e565b61058f602084013561005e565b61059c604084013561005e565b6105a9606084013561005e565b6105b6608084013561005e565b6105c3818486888a6100fd565b90508060005260206000f35b80604081018310156105e057600080fd5b92915050565b80608081018310156105e057600080fd5b600080600080610180858703121561060e57600080fd5b61061886866105cf565b935061062786604087016105e6565b92506106368660c087016105cf565b91506106468661010087016105e6565b90509295919450925056fea2646970667358221220ec67a808c756c9c7812b0e9e766ded5eff2ed5f70b6096d58043b7ddc714b72f64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004361003e3660046105f7565b610057565b604051901515815260200160405180910390f35b600061056a565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2d84602728848e471bd1ba9e560f82ab8a7eec80bd3014f76ebd173d6ca628bc85527f1a7ded6d8fdaf30f436cf3f3bfa878a07585d245de1b30e632ec87025f97e82560208601526000608086018661019a87357f2eacdafb8a074f55c7eeaeaba8e637580efd6becf4cc32e3ffcb29d5f7d5c47c7f0ba89cd7566d8ba7283a2c695154fd3596a3fa79ceb3fff200e4a1bc6df50c0684610092565b6101ea60208801357f22c4fc2bb63514decde9458ccb4bc65a47aa468ef49618e4eda09120cf429d707f0fdf44fe63793ab49f743161b2aecf184517b4bb0fae7702da1f596ed3c85bd384610092565b61023a60408801357f260137477524ec7727275599f381fb4d4dcc29fed4c0333d45ca9638a7ad42c47f05b0b02830349454814f64e84c47e6efc8ab5b2eb0b771a4ba2079c48facffde84610092565b61028a60608801357f12c261380019d137f4c8e7e13bbb8231d5f1e834377311c5dc5e0f2b9d758db97f1f359c754273ab6f981835d1bb37f8c007d8b75ac24d775ff24098f2577f70f584610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1982c6465dbad02e8ffe7203ec829194caa6d8f0c00a28953fe9763ecfbc0d866102808201527f16dddf97803669507bc9011f92e4fff75ea52e1891dfc6655bed759aa87cf4146102a08201527f10f7390ef109560803b040cefb04b3a2400f425ccf60456c6f1815272e05c8a06102c08201527f2a7488e34e7971bee4a74881cf790f1da42411e95a261bb1a7049098f3c8ef1c6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610582600084013561005e565b61058f602084013561005e565b61059c604084013561005e565b6105a9606084013561005e565b6105b6608084013561005e565b6105c3818486888a6100fd565b90508060005260206000f35b80604081018310156105e057600080fd5b92915050565b80608081018310156105e057600080fd5b600080600080610180858703121561060e57600080fd5b61061886866105cf565b935061062786604087016105e6565b92506106368660c087016105cf565b91506106468661010087016105e6565b90509295919450925056fea2646970667358221220ec67a808c756c9c7812b0e9e766ded5eff2ed5f70b6096d58043b7ddc714b72f64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [],\n    \"types\": null\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/GarantiManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x3Ff1c29f2406c9351B06F377f03e71023962DfdA\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd067e2eed7c7eaf715b52cfe4f93e8ae615246810f644f2dff5af789c41b70ea\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x3Ff1c29f2406c9351B06F377f03e71023962DfdA\",\n    \"transactionIndex\": 24,\n    \"gasUsed\": \"563417\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000100000000000000002000000000000000000000000000000000000000000000000000000000001000000000002000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x1b249e3e7c73fb5f47335e2d44e79a9ee1e1305efa97bc7ac00d4858304e4237\",\n    \"transactionHash\": \"0xd067e2eed7c7eaf715b52cfe4f93e8ae615246810f644f2dff5af789c41b70ea\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 24,\n        \"blockNumber\": 12230698,\n        \"transactionHash\": \"0xd067e2eed7c7eaf715b52cfe4f93e8ae615246810f644f2dff5af789c41b70ea\",\n        \"address\": \"0x3Ff1c29f2406c9351B06F377f03e71023962DfdA\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 109,\n        \"blockHash\": \"0x1b249e3e7c73fb5f47335e2d44e79a9ee1e1305efa97bc7ac00d4858304e4237\"\n      }\n    ],\n    \"blockNumber\": 12230698,\n    \"cumulativeGasUsed\": \"4682821\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x03a9c8babd6b4ad94d711f3ffbee84b7aa69f4cb0dd08d491c5a5c32eca15f60\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3631,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3634,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/GarantiRamp.json",
    "content": "{\n  \"address\": \"0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"garantiIban\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"garantiName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiIban\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_iban\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"isValidIban\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_garantiIban\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_garantiName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xfec2261830a14c4d6f55c8ae5deb47cb94b715e66b27d04a6ec8995c851bd9d2\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d\",\n    \"transactionIndex\": 29,\n    \"gasUsed\": \"4012650\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000021000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000008\",\n    \"blockHash\": \"0x28a0c786b99da2f39fdba975fcdd244ff5ac6b2c9f5ac3354e967579a08eada3\",\n    \"transactionHash\": \"0xfec2261830a14c4d6f55c8ae5deb47cb94b715e66b27d04a6ec8995c851bd9d2\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 29,\n        \"blockNumber\": 12230695,\n        \"transactionHash\": \"0xfec2261830a14c4d6f55c8ae5deb47cb94b715e66b27d04a6ec8995c851bd9d2\",\n        \"address\": \"0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 105,\n        \"blockHash\": \"0x28a0c786b99da2f39fdba975fcdd244ff5ac6b2c9f5ac3354e967579a08eada3\"\n      },\n      {\n        \"transactionIndex\": 29,\n        \"blockNumber\": 12230695,\n        \"transactionHash\": \"0xfec2261830a14c4d6f55c8ae5deb47cb94b715e66b27d04a6ec8995c851bd9d2\",\n        \"address\": \"0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 106,\n        \"blockHash\": \"0x28a0c786b99da2f39fdba975fcdd244ff5ac6b2c9f5ac3354e967579a08eada3\"\n      }\n    ],\n    \"blockNumber\": 12230695,\n    \"cumulativeGasUsed\": \"7040292\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"20000000\",\n    \"100000000\",\n    \"86400\",\n    \"43200\",\n    \"0\",\n    \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_iban\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"isValidIban\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"internalType\\\":\\\"struct IGarantiSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"internalType\\\":\\\"struct IGarantiRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the idHash being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(string,string,uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_garantiIban\\\":\\\"IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\",\\\"_garantiName\\\":\\\"Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"params\\\":{\\\"_bodyHashProof\\\":\\\"Parameters and signals for body hash proof\\\",\\\"_proof\\\":\\\"Parameters and signals for send email proof\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"params\\\":{\\\"_bodyHashProof\\\":\\\"Parameters and signals for body hash proof\\\",\\\"_proof\\\":\\\"Parameters and signals for registration email proof\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the idHash being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(string,string,uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a idHash from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiRamp.sol\\\":\\\"GarantiRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon3.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon3 {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x39cd67d4a7ef93e243c77b7c8a40c3842c060a7f444b0b2c875bce7d8d0c24fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IPoseidon6.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon6 {\\\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9609bcff68e45a22b551bf5f42a5ea62ea0b33e433a89f7c89a6b0714df09229\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon3 } from \\\\\\\"../../interfaces/IPoseidon3.sol\\\\\\\";\\\\nimport { IPoseidon6 } from \\\\\\\"../../interfaces/IPoseidon6.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiRegistrationProcessor } from \\\\\\\"./interfaces/IGarantiRegistrationProcessor.sol\\\\\\\";\\\\nimport { IGarantiSendProcessor } from \\\\\\\"./interfaces/IGarantiSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the idHash\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 idHash;                     // Hash of payment processor id\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's idHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IGarantiRegistrationProcessor _registrationProcessor,\\\\n        IGarantiSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _proof            Parameters and signals for registration email proof\\\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\\\n     */\\\\n    function register(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\\\\\"Account already associated with idHash\\\\\\\");\\\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\\\n\\\\n        accounts[msg.sender].idHash = idHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, idHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        string memory _garantiIban,\\\\n        string memory _garantiName,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        require(isValidIban(_garantiIban), \\\\\\\"Invalid IBAN\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        AccountInfo storage account = accounts[msg.sender];\\\\n        account.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            garantiIban: _garantiIban,\\\\n            garantiName: _garantiName,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 idHash = accounts[msg.sender].idHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorIdHash != idHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[idHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _proof            Parameters and signals for send email proof\\\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\\\n     */\\\\n    function onRamp(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a idHash from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\\\n        bytes memory ibanBytes = bytes(_iban);\\\\n        if(ibanBytes.length != 32) { return false; }\\\\n\\\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\\\n            if (i < 2) {\\\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\\\n            } else if (i % 5 == 4) {\\\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\\\n                if(ibanBytes[i] != 0x20) { return false; }\\\\n            } else {\\\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\\\n            }\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _idHash,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperNameHash,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\\\n\\\\n        return idHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x11095008d889ee4205c6e43f9628207ec364b25ad6e9082e5b4647094fb99b7a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[11] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0f70e4fda7e77a71110f14b943f0be18414d3fde1f89611659f3bfa61e7d220\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[28] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70a70e2bf4861b7095bff34a55b10da9bc705735e40bed6104e179c0ecc3da25\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162004782380380620047828339810160408190526200003491620001dd565b6200003f3362000096565b6001600160a01b0387811660805260078790556008869055600a8590556009849055600b839055600c80546001600160a01b0319169183169190911790556200008888620000e6565b505050505050505062000263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f062000169565b6001600160a01b0381166200015b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001668162000096565b50565b6000546001600160a01b03163314620001c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000152565b565b6001600160a01b03811681146200016657600080fd5b600080600080600080600080610100898b031215620001fb57600080fd5b88516200020881620001c7565b60208a01519098506200021b81620001c7565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151915060e08901516200025281620001c7565b809150509295985092959890939650565b6080516144e76200029b600039600081816103a1015281816119c20152818161245d01528181613360015261340f01526144e76000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c8063715018a611610151578063b3fa4c01116100c3578063ecb3dc8811610087578063ecb3dc8814610657578063ecd618f014610660578063ed1692b814610680578063eea1d19714610693578063f2fde38b146106a6578063fbf15b1f146106b957600080fd5b8063b3fa4c0114610602578063d55f960d14610615578063d9478d2014610628578063e215ad591461063b578063e279d9641461064e57600080fd5b80639087beff116101155780639087beff1461057a5780639b357b5a1461058d5780639f9fb968146105a0578063a00555b3146105c0578063a1a954b7146105d3578063b02c43d0146105dc57600080fd5b8063715018a6146104b257806371a28f69146104ba5780637b510fe8146104cd5780638da5cb5b146104ed5780639021578a146104fe57600080fd5b806342987349116101ea5780635081d952116101ae5780635081d9521461043d5780635dd765151461045d57806360e0d21e14610470578063645006ca1461048357806366ec84191461048c578063711347621461049f57600080fd5b806342987349146103db57806343a170e6146103ee5780634595bba014610401578063485cc95514610421578063495223e71461043457600080fd5b80632a80cda31161023c5780632a80cda31461032c578063317dcc961461033f5780633389d5d514610352578063392e53cd146103755780633adba28a146103895780633e413bee1461039c57600080fd5b80630f1ef98c14610279578063133de6cb146102c5578063148172da146102da57806314ec32fa146102ed578063238c849414610323575b600080fd5b6102b261028736600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102d86102d336600461395e565b610700565b005b6102d86102e8366004613982565b61075d565b6102b26102fb36600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102b2600b5481565b6102d861033a366004613982565b61088f565b6102d861034d366004613982565b61091c565b610365610360366004613a52565b610959565b60405190151581526020016102bc565b60025461036590600160a01b900460ff1681565b6102d8610397366004613a87565b610ab4565b6103c37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102bc565b6102d86103e9366004613982565b611005565b6102d86103fc366004613ad3565b6110a6565b61041461040f36600461395e565b611160565b6040516102bc9190613b12565b6102d861042f366004613b56565b6111d9565b6102b260095481565b61045061044b36600461395e565b61126c565b6040516102bc9190613c9d565b6102d861046b366004613982565b6115d1565b6102d861047e366004613d29565b611670565b6102b260075481565b6102d861049a366004613982565b6116f9565b6102d86104ad366004613d4e565b611844565b6102d8611a37565b6104506104c8366004613d4e565b611a4b565b6104e06104db36600461395e565b611d48565b6040516102bc9190613df4565b6000546001600160a01b03166103c3565b61054761050c366004613982565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102bc565b6102d8610588366004613982565b611de2565b6102d861059b366004613982565b611e79565b6105b36105ae366004613982565b611f80565b6040516102bc9190613e4c565b6102d86105ce366004613e5f565b61215e565b6102b2600a5481565b6105ef6105ea366004613982565b61251a565b6040516102bc9796959493929190613ed3565b6102d861061036600461395e565b61266f565b6102d8610623366004613982565b612727565b600c546103c3906001600160a01b031681565b6001546103c3906001600160a01b031681565b6102b260085481565b6102b2600d5481565b61067361066e366004613f30565b612865565b6040516102bc9190613fa5565b6102d861068e36600461395e565b6129ca565b6002546103c3906001600160a01b031681565b6102d86106b436600461395e565b612a20565b6103656106c7366004614035565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b610708612a99565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107925760405162461bcd60e51b815260040161078990614061565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff161561080b5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610789565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108839083908590918252602082015260400190565b60405180910390a15050565b610897612a99565b806000036108e75760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610789565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc90602001610752565b610924612a99565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e90602001610752565b805160009082906020146109705750600092915050565b60005b8151811015610aaa5760028110156109ee57604160f81b82828151811061099c5761099c614098565b01602001516001600160f81b03191610806109da5750605a60f81b8282815181106109c9576109c9614098565b01602001516001600160f81b031916115b156109e9575060009392505050565b610a9a565b6109f96005826140c4565b600403610a3657818181518110610a1257610a12614098565b6020910101516001600160f81b031916600160fd1b146109e9575060009392505050565b603060f81b828281518110610a4d57610a4d614098565b01602001516001600160f81b0319161080610a8b5750603960f81b828281518110610a7a57610a7a614098565b01602001516001600160f81b031916115b15610a9a575060009392505050565b610aa3816140ee565b9050610973565b5060019392505050565b33600090815260046020526040902054610ae05760405162461bcd60e51b815260040161078990614061565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610b765760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610789565b6009546000848152600360205260409020600101544291610b9691614107565b1115610bf05760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610789565b60008381526003602052604090205415610c4c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610789565b828103610c9b5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610789565b81546001600160a01b0316610ceb5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610789565b60008511610d4a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610789565b600854851115610db95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610789565b6001600160a01b038416610e0f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610789565b6000610e1b8488612af3565b90508583600401541015610ed057600080610e3589612b5e565b9150915087818660040154610e4a9190614107565b1015610e8f5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610789565b610e998583612d06565b80856004016000828254610ead9190614107565b9250508190555080856005016000828254610ec8919061411a565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188546001600160a01b03199081169189169190911789559551600189018054909716971696909617909455905160028601555160038086019190915591516004948501558883525291822083905584018054889290610f7390849061411a565b9250508190555085836005016000828254610f8e9190614107565b9091555050600783018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b61100d612a99565b806000036110715760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610789565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a80390602001610752565b33600090815260046020526040902054156111125760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610789565b600061111e8383612d68565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a3505050565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156111cd57602002820191906000526020600020905b8154815260200190600101908083116111b9575b50505050509050919050565b6111e1612a99565b600254600160a01b900460ff16156112315760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610789565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156112ce57602002820191906000526020600020905b8154815260200190600101908083116112ba575b50505050509050805167ffffffffffffffff8111156112ef576112ef61399b565b60405190808252806020026020018201604052801561132857816020015b6113156137b2565b81526020019060019003908161130d5790505b50915060005b81518110156115ca57600082828151811061134b5761134b614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b0316825260018101805494965092949193909291840191906113999061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546113c59061412d565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b5050505050815260200160028201805461142b9061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546114579061412d565b80156114a45780601f10611479576101008083540402835291602001916114a4565b820191906000526020600020905b81548152906001019060200180831161148757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820180548060200260200160405190810160405280929190818152602001828054801561152457602002820191906000526020600020905b815481526020019060010190808311611510575b5050505050815250509050600061153a83612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284608001516115969190614107565b8152508685815181106115ab576115ab614098565b6020026020010181905250505050806115c3906140ee565b905061132e565b5050919050565b6115d9612a99565b66b1a2bc2ec5000081111561163b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610789565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e72567090602001610752565b600080600061167f8585612de2565b92509250925061168f8282613138565b82606001518260050160008282546116a7919061411a565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516116e89083613211565b6116f28184613303565b5050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166117795760405162461bcd60e51b815260040161078990614161565b80546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6117dc8184613138565b81606001518160050160008282546117f4919061411a565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516118359082613211565b61183f8383613303565b505050565b6000805b82518110156119a557600083828151811061186557611865614098565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6000806118e984612b5e565b915091506118f78383612d06565b8083600401546119079190614107565b6119119087614107565b955080836005016000828254611927919061411a565b9091555050825460048401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c643129061196e908590614107565b60405190815260200160405180910390a3600060048401556119908484613211565b505050508061199e906140ee565b9050611848565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f9190614190565b611a3f612a99565b611a4960006134e1565b565b6060815167ffffffffffffffff811115611a6757611a6761399b565b604051908082528060200260200182016040528015611aa057816020015b611a8d6137b2565b815260200190600190039081611a855790505b50905060005b8251811015611d42576000838281518110611ac357611ac3614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b031682526001810180549496509294919390929184019190611b119061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3d9061412d565b8015611b8a5780601f10611b5f57610100808354040283529160200191611b8a565b820191906000526020600020905b815481529060010190602001808311611b6d57829003601f168201915b50505050508152602001600282018054611ba39061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcf9061412d565b8015611c1c5780601f10611bf157610100808354040283529160200191611c1c565b820191906000526020600020905b815481529060010190602001808311611bff57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c9c57602002820191906000526020600020905b815481526020019060010190808311611c88575b50505050508152505090506000611cb283612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b03168152602001908152602001600020600001548152602001838152602001828460800151611d0e9190614107565b815250858581518110611d2357611d23614098565b602002602001018190525050505080611d3b906140ee565b9050611aa6565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b5050505050815250509050919050565b611dea612a99565b80600003611e445760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610789565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b3990602001610752565b33600090815260046020526040902054611ea55760405162461bcd60e51b815260040161078990614061565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f145760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610789565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f4a9060020183613531565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610883565b611f886137de565b6000828152600560209081526040918290208251610100810190935280546001600160a01b031683526001810180549192840191611fc59061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff19061412d565b801561203e5780601f106120135761010080835404028352916020019161203e565b820191906000526020600020905b81548152906001019060200180831161202157829003601f168201915b505050505081526020016002820180546120579061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546120839061412d565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611dd25760200282019190600052602060002090815481526020019060010190808311611dbe575050505050815250509050919050565b3360009081526004602052604090205461218a5760405162461bcd60e51b815260040161078990614061565b61219384610959565b6121ce5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b21024a120a760a11b6044820152606401610789565b336000908152600460205260409020600101546005116122305760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610789565b6007548210156122a15760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610789565b600081116122ff5760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610789565b600081612314670de0b6b3a7640000856141b2565b61231e91906141c9565b600d80549192506000919082612333836140ee565b90915550336000818152600460209081526040808320600180820180548083018255908652848620018790558251610100810184529586528584018d81528684018d9052606087018c9052608087018c905260a0870186905260c087018a90528351868152808601855260e0880152878652600590945291909320845181546001600160a01b0319166001600160a01b039091161781559151949550919390918201906123e0908261422b565b50604082015160028201906123f5908261422b565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151805161243991600784019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190614190565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a350505050505050565b600560205260009081526040902080546001820180546001600160a01b0390921692916125469061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546125729061412d565b80156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b5050505050908060020180546125d49061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546126009061412d565b801561264d5780601f106126225761010080835404028352916020019161264d565b820191906000526020600020905b81548152906001019060200180831161263057829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b612677612a99565b6001600160a01b0381166126d95760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610789565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e490602001610752565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361279c5760405162461bcd60e51b815260040161078990614161565b336000908152600460205260408082205483516001600160a01b031683529120541461280a5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610789565b60408082015160009081526005602052206128258184613138565b816060015181600401600082825461283d9190614107565b9091555050606082015160058201805460009061285b90849061411a565b9091555050505050565b606060008267ffffffffffffffff8111156128825761288261399b565b6040519080825280602002602001820160405280156128bb57816020015b6128a8613877565b8152602001906001900390816128a05790505b50905060005b838110156129c05760008585838181106128dd576128dd614098565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061295c5761295c614098565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106129a2576129a2614098565b60200260200101819052505050806129b9906140ee565b90506128c1565b5090505b92915050565b6129d2612a99565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c4190602001610752565b612a28612a99565b6001600160a01b038116612a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b612a96816134e1565b50565b6000546001600160a01b03163314611a495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610789565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b567f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826140c4565b949350505050565b60008181526005602090815260408083206007018054825181850281018501909352808352606094938493929190830182828015612bbb57602002820191906000526020600020905b815481526020019060010190808311612ba7575b50505050509050805167ffffffffffffffff811115612bdc57612bdc61399b565b604051908082528060200260200182016040528015612c05578160200160208202803683370190505b50925060005b8151811015612cff57600060066000848481518110612c2c57612c2c614098565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a549192504291612c9f91614107565b1015612cee57828281518110612cb757612cb7614098565b6020026020010151858381518110612cd157612cd1614098565b60209081029190910101526060810151612ceb9085614107565b93505b50612cf8816140ee565b9050612c0b565b5050915091565b60005b815181101561183f576000801b828281518110612d2857612d28614098565b602002602001015114612d5857612d5883838381518110612d4b57612d4b614098565b6020026020010151613138565b612d61816140ee565b9050612d09565b60015460405163dc28b2bf60e01b815260009182916001600160a01b039091169063dc28b2bf90612d9f9087908790600401614340565b6020604051808303816000875af1158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190614381565b612dea61389f565b600254604051630c44b27760e01b815260009182918291829182918291829182916001600160a01b0390911690630c44b27790612e2d908e908e9060040161439a565b60c0604051808303816000875af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7091906143db565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151989e50969c50949a509298509096509450909216612eff5760405162461bcd60e51b815260040161078990614161565b8682608001511115612f5e5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610789565b8581600201604051602001612f739190614425565b6040516020818303038152906040528051906020012014612fd65760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b8481600101604051602001612feb9190614425565b604051602081830303815290604052805190602001201461304e5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b81516001600160a01b031660009081526004602052604090205484146130b65760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610789565b8060060154670de0b6b3a764000083606001516130d391906141b2565b6130dd91906141c9565b8810156131255760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610789565b9099509750955050505050509250925092565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b0319908116909355805490921690915592849055839055919091556131dc6007840183613531565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816004015482600501546132279190614107565b90508060000361183f5781546001600160a01b03166000908152600460205260409020613257906001018461365a565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155906132c560018301826138e0565b6132d36002830160006138e0565b60038201600090556004820160009055600582016000905560068201600090556007820160006116f2919061391a565b6000600b546000146133cf57670de0b6b3a7640000600b54836060015161332a91906141b2565b61333491906141c9565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cd9190614190565b505b60008183606001516133e1919061411a565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015613458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347c9190614190565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061358d8480548060200260200160405190810160405280929190818152602001828054801561358257602002820191906000526020600020905b81548152602001906001019080831161356e575b5050505050846136ff565b91509150806135d65760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610789565b83546000906135e79060019061411a565b905080831461362c5784818154811061360257613602614098565b906000526020600020015485848154811061361f5761361f614098565b6000918252602090912001555b8480548061363c5761363c61449b565b60019003818190600052602060002001600090559055505b50505050565b6000806136b6848054806020026020016040519081016040528092919081815260200182805480156136ab57602002820191906000526020600020905b815481526020019060010190808311613697575b505050505084613762565b91509150806135d65760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610789565b81516000908190815b8181101561374f578486828151811061372357613723614098565b60200260200101510361373d5792506001915061375b9050565b80613747816140ee565b915050613708565b50600019600092509250505b9250929050565b81516000908190815b8181101561374f578486828151811061378657613786614098565b6020026020010151036137a05792506001915061375b9050565b806137aa816140ee565b91505061376b565b60408051608081018252600080825260208201529081016137d16137de565b8152602001600081525090565b60405180610100016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b50613873929150613934565b5090565b6040805160608101909152600081526020810161389261389f565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5080546138ec9061412d565b6000825580601f106138fc575050565b601f016020900490600052602060002090810190612a969190613934565b5080546000825590600052602060002090810190612a9691905b5b808211156138735760008155600101613935565b6001600160a01b0381168114612a9657600080fd5b60006020828403121561397057600080fd5b813561397b81613949565b9392505050565b60006020828403121561399457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139da576139da61399b565b604052919050565b600082601f8301126139f357600080fd5b813567ffffffffffffffff811115613a0d57613a0d61399b565b613a20601f8201601f19166020016139b1565b818152846020838601011115613a3557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613a6457600080fd5b813567ffffffffffffffff811115613a7b57600080fd5b612b56848285016139e2565b600080600060608486031215613a9c57600080fd5b83359250602084013591506040840135613ab581613949565b809150509250925092565b60006101808284031215611d4257600080fd5b6000808284036103e0811215613ae857600080fd5b61026080821215613af857600080fd5b849350613b0786828701613ac0565b925050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613b4a57835183529284019291840191600101613b2e565b50909695505050505050565b60008060408385031215613b6957600080fd5b8235613b7481613949565b91506020830135613b8481613949565b809150509250929050565b6000815180845260005b81811015613bb557602081850181015186830182015201613b99565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613c0557815187529582019590820190600101613be9565b509495945050505050565b600061010060018060a01b0383511684526020830151816020860152613c3882860182613b8f565b91505060408301518482036040860152613c528282613b8f565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152613c948282613bd5565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613d1b57603f1989840301855281516080815185528882015189860152878201518189870152613cfa82870182613c10565b60609384015196909301959095525094870194925090860190600101613cc4565b509098975050505050505050565b600080828403610600811215613d3e57600080fd5b61048080821215613af857600080fd5b60006020808385031215613d6157600080fd5b823567ffffffffffffffff80821115613d7957600080fd5b818501915085601f830112613d8d57600080fd5b813581811115613d9f57613d9f61399b565b8060051b9150613db08483016139b1565b8181529183018401918481019088841115613dca57600080fd5b938501935b83851015613de857843582529385019390850190613dcf565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613e415783518252928401926001929092019190840190613e21565b509695505050505050565b60208152600061397b6020830184613c10565b60008060008060808587031215613e7557600080fd5b843567ffffffffffffffff80821115613e8d57600080fd5b613e99888389016139e2565b95506020870135915080821115613eaf57600080fd5b50613ebc878288016139e2565b949794965050505060408301359260600135919050565b6001600160a01b038816815260e060208201819052600090613ef790830189613b8f565b8281036040840152613f098189613b8f565b9150508560608301528460808301528360a08301528260c083015298975050505050505050565b60008060208385031215613f4357600080fd5b823567ffffffffffffffff80821115613f5b57600080fd5b818501915085601f830112613f6f57600080fd5b813581811115613f7e57600080fd5b8660208260051b8501011115613f9357600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015614028578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613fc2565b5091979650505050505050565b6000806040838503121561404857600080fd5b823561405381613949565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600060018201614100576141006140d8565b5060010190565b808201808211156129c4576129c46140d8565b818103818111156129c4576129c46140d8565b600181811c9082168061414157607f821691505b602082108103611d4257634e487b7160e01b600052602260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6000602082840312156141a257600080fd5b8151801515811461397b57600080fd5b80820281158282048414176129c4576129c46140d8565b6000826141d8576141d86140ae565b500490565b601f82111561183f57600081815260208120601f850160051c810160208610156142045750805b601f850160051c820191505b8181101561422357828155600101614210565b505050505050565b815167ffffffffffffffff8111156142455761424561399b565b61425981614253845461412d565b846141dd565b602080601f83116001811461428e57600084156142765750858301515b600019600386901b1c1916600185901b178555614223565b600085815260208120601f198616915b828110156142bd5788860151825594840194600190910190840161429e565b50858210156142db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8060005b6002811015613654576040808386379384019391909101906001016142ef565b604081833761432460408301604083016142eb565b604060c0820160c0840137610100608081830182850137505050565b6103e08101604084833761435a60408301604086016142eb565b604060c0850160c0840137610100610160818601828501375061397b61026083018461430f565b60006020828403121561439357600080fd5b5051919050565b610600810160408483376143b460408301604086016142eb565b604060c0850160c0840137610100610380818601828501375061397b61048083018461430f565b60008060008060008060c087890312156143f457600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008083546144338161412d565b6001828116801561444b57600181146144605761448f565b60ff198416875282151583028701945061448f565b8760005260208060002060005b858110156144865781548a82015290840190820161446d565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea264697066735822122065e22fa908aee992b0d94bfe127dfd0a35300e5aac610167919a4c44944ddd6164736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106102745760003560e01c8063715018a611610151578063b3fa4c01116100c3578063ecb3dc8811610087578063ecb3dc8814610657578063ecd618f014610660578063ed1692b814610680578063eea1d19714610693578063f2fde38b146106a6578063fbf15b1f146106b957600080fd5b8063b3fa4c0114610602578063d55f960d14610615578063d9478d2014610628578063e215ad591461063b578063e279d9641461064e57600080fd5b80639087beff116101155780639087beff1461057a5780639b357b5a1461058d5780639f9fb968146105a0578063a00555b3146105c0578063a1a954b7146105d3578063b02c43d0146105dc57600080fd5b8063715018a6146104b257806371a28f69146104ba5780637b510fe8146104cd5780638da5cb5b146104ed5780639021578a146104fe57600080fd5b806342987349116101ea5780635081d952116101ae5780635081d9521461043d5780635dd765151461045d57806360e0d21e14610470578063645006ca1461048357806366ec84191461048c578063711347621461049f57600080fd5b806342987349146103db57806343a170e6146103ee5780634595bba014610401578063485cc95514610421578063495223e71461043457600080fd5b80632a80cda31161023c5780632a80cda31461032c578063317dcc961461033f5780633389d5d514610352578063392e53cd146103755780633adba28a146103895780633e413bee1461039c57600080fd5b80630f1ef98c14610279578063133de6cb146102c5578063148172da146102da57806314ec32fa146102ed578063238c849414610323575b600080fd5b6102b261028736600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102d86102d336600461395e565b610700565b005b6102d86102e8366004613982565b61075d565b6102b26102fb36600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102b2600b5481565b6102d861033a366004613982565b61088f565b6102d861034d366004613982565b61091c565b610365610360366004613a52565b610959565b60405190151581526020016102bc565b60025461036590600160a01b900460ff1681565b6102d8610397366004613a87565b610ab4565b6103c37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102bc565b6102d86103e9366004613982565b611005565b6102d86103fc366004613ad3565b6110a6565b61041461040f36600461395e565b611160565b6040516102bc9190613b12565b6102d861042f366004613b56565b6111d9565b6102b260095481565b61045061044b36600461395e565b61126c565b6040516102bc9190613c9d565b6102d861046b366004613982565b6115d1565b6102d861047e366004613d29565b611670565b6102b260075481565b6102d861049a366004613982565b6116f9565b6102d86104ad366004613d4e565b611844565b6102d8611a37565b6104506104c8366004613d4e565b611a4b565b6104e06104db36600461395e565b611d48565b6040516102bc9190613df4565b6000546001600160a01b03166103c3565b61054761050c366004613982565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102bc565b6102d8610588366004613982565b611de2565b6102d861059b366004613982565b611e79565b6105b36105ae366004613982565b611f80565b6040516102bc9190613e4c565b6102d86105ce366004613e5f565b61215e565b6102b2600a5481565b6105ef6105ea366004613982565b61251a565b6040516102bc9796959493929190613ed3565b6102d861061036600461395e565b61266f565b6102d8610623366004613982565b612727565b600c546103c3906001600160a01b031681565b6001546103c3906001600160a01b031681565b6102b260085481565b6102b2600d5481565b61067361066e366004613f30565b612865565b6040516102bc9190613fa5565b6102d861068e36600461395e565b6129ca565b6002546103c3906001600160a01b031681565b6102d86106b436600461395e565b612a20565b6103656106c7366004614035565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b610708612a99565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107925760405162461bcd60e51b815260040161078990614061565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff161561080b5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610789565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108839083908590918252602082015260400190565b60405180910390a15050565b610897612a99565b806000036108e75760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610789565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc90602001610752565b610924612a99565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e90602001610752565b805160009082906020146109705750600092915050565b60005b8151811015610aaa5760028110156109ee57604160f81b82828151811061099c5761099c614098565b01602001516001600160f81b03191610806109da5750605a60f81b8282815181106109c9576109c9614098565b01602001516001600160f81b031916115b156109e9575060009392505050565b610a9a565b6109f96005826140c4565b600403610a3657818181518110610a1257610a12614098565b6020910101516001600160f81b031916600160fd1b146109e9575060009392505050565b603060f81b828281518110610a4d57610a4d614098565b01602001516001600160f81b0319161080610a8b5750603960f81b828281518110610a7a57610a7a614098565b01602001516001600160f81b031916115b15610a9a575060009392505050565b610aa3816140ee565b9050610973565b5060019392505050565b33600090815260046020526040902054610ae05760405162461bcd60e51b815260040161078990614061565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610b765760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610789565b6009546000848152600360205260409020600101544291610b9691614107565b1115610bf05760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610789565b60008381526003602052604090205415610c4c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610789565b828103610c9b5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610789565b81546001600160a01b0316610ceb5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610789565b60008511610d4a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610789565b600854851115610db95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610789565b6001600160a01b038416610e0f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610789565b6000610e1b8488612af3565b90508583600401541015610ed057600080610e3589612b5e565b9150915087818660040154610e4a9190614107565b1015610e8f5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610789565b610e998583612d06565b80856004016000828254610ead9190614107565b9250508190555080856005016000828254610ec8919061411a565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188546001600160a01b03199081169189169190911789559551600189018054909716971696909617909455905160028601555160038086019190915591516004948501558883525291822083905584018054889290610f7390849061411a565b9250508190555085836005016000828254610f8e9190614107565b9091555050600783018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b61100d612a99565b806000036110715760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610789565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a80390602001610752565b33600090815260046020526040902054156111125760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610789565b600061111e8383612d68565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a3505050565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156111cd57602002820191906000526020600020905b8154815260200190600101908083116111b9575b50505050509050919050565b6111e1612a99565b600254600160a01b900460ff16156112315760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610789565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156112ce57602002820191906000526020600020905b8154815260200190600101908083116112ba575b50505050509050805167ffffffffffffffff8111156112ef576112ef61399b565b60405190808252806020026020018201604052801561132857816020015b6113156137b2565b81526020019060019003908161130d5790505b50915060005b81518110156115ca57600082828151811061134b5761134b614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b0316825260018101805494965092949193909291840191906113999061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546113c59061412d565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b5050505050815260200160028201805461142b9061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546114579061412d565b80156114a45780601f10611479576101008083540402835291602001916114a4565b820191906000526020600020905b81548152906001019060200180831161148757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820180548060200260200160405190810160405280929190818152602001828054801561152457602002820191906000526020600020905b815481526020019060010190808311611510575b5050505050815250509050600061153a83612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284608001516115969190614107565b8152508685815181106115ab576115ab614098565b6020026020010181905250505050806115c3906140ee565b905061132e565b5050919050565b6115d9612a99565b66b1a2bc2ec5000081111561163b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610789565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e72567090602001610752565b600080600061167f8585612de2565b92509250925061168f8282613138565b82606001518260050160008282546116a7919061411a565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516116e89083613211565b6116f28184613303565b5050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166117795760405162461bcd60e51b815260040161078990614161565b80546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6117dc8184613138565b81606001518160050160008282546117f4919061411a565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516118359082613211565b61183f8383613303565b505050565b6000805b82518110156119a557600083828151811061186557611865614098565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6000806118e984612b5e565b915091506118f78383612d06565b8083600401546119079190614107565b6119119087614107565b955080836005016000828254611927919061411a565b9091555050825460048401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c643129061196e908590614107565b60405190815260200160405180910390a3600060048401556119908484613211565b505050508061199e906140ee565b9050611848565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f9190614190565b611a3f612a99565b611a4960006134e1565b565b6060815167ffffffffffffffff811115611a6757611a6761399b565b604051908082528060200260200182016040528015611aa057816020015b611a8d6137b2565b815260200190600190039081611a855790505b50905060005b8251811015611d42576000838281518110611ac357611ac3614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b031682526001810180549496509294919390929184019190611b119061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3d9061412d565b8015611b8a5780601f10611b5f57610100808354040283529160200191611b8a565b820191906000526020600020905b815481529060010190602001808311611b6d57829003601f168201915b50505050508152602001600282018054611ba39061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcf9061412d565b8015611c1c5780601f10611bf157610100808354040283529160200191611c1c565b820191906000526020600020905b815481529060010190602001808311611bff57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c9c57602002820191906000526020600020905b815481526020019060010190808311611c88575b50505050508152505090506000611cb283612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b03168152602001908152602001600020600001548152602001838152602001828460800151611d0e9190614107565b815250858581518110611d2357611d23614098565b602002602001018190525050505080611d3b906140ee565b9050611aa6565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b5050505050815250509050919050565b611dea612a99565b80600003611e445760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610789565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b3990602001610752565b33600090815260046020526040902054611ea55760405162461bcd60e51b815260040161078990614061565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f145760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610789565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f4a9060020183613531565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610883565b611f886137de565b6000828152600560209081526040918290208251610100810190935280546001600160a01b031683526001810180549192840191611fc59061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff19061412d565b801561203e5780601f106120135761010080835404028352916020019161203e565b820191906000526020600020905b81548152906001019060200180831161202157829003601f168201915b505050505081526020016002820180546120579061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546120839061412d565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611dd25760200282019190600052602060002090815481526020019060010190808311611dbe575050505050815250509050919050565b3360009081526004602052604090205461218a5760405162461bcd60e51b815260040161078990614061565b61219384610959565b6121ce5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b21024a120a760a11b6044820152606401610789565b336000908152600460205260409020600101546005116122305760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610789565b6007548210156122a15760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610789565b600081116122ff5760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610789565b600081612314670de0b6b3a7640000856141b2565b61231e91906141c9565b600d80549192506000919082612333836140ee565b90915550336000818152600460209081526040808320600180820180548083018255908652848620018790558251610100810184529586528584018d81528684018d9052606087018c9052608087018c905260a0870186905260c087018a90528351868152808601855260e0880152878652600590945291909320845181546001600160a01b0319166001600160a01b039091161781559151949550919390918201906123e0908261422b565b50604082015160028201906123f5908261422b565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151805161243991600784019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190614190565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a350505050505050565b600560205260009081526040902080546001820180546001600160a01b0390921692916125469061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546125729061412d565b80156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b5050505050908060020180546125d49061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546126009061412d565b801561264d5780601f106126225761010080835404028352916020019161264d565b820191906000526020600020905b81548152906001019060200180831161263057829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b612677612a99565b6001600160a01b0381166126d95760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610789565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e490602001610752565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361279c5760405162461bcd60e51b815260040161078990614161565b336000908152600460205260408082205483516001600160a01b031683529120541461280a5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610789565b60408082015160009081526005602052206128258184613138565b816060015181600401600082825461283d9190614107565b9091555050606082015160058201805460009061285b90849061411a565b9091555050505050565b606060008267ffffffffffffffff8111156128825761288261399b565b6040519080825280602002602001820160405280156128bb57816020015b6128a8613877565b8152602001906001900390816128a05790505b50905060005b838110156129c05760008585838181106128dd576128dd614098565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061295c5761295c614098565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106129a2576129a2614098565b60200260200101819052505050806129b9906140ee565b90506128c1565b5090505b92915050565b6129d2612a99565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c4190602001610752565b612a28612a99565b6001600160a01b038116612a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b612a96816134e1565b50565b6000546001600160a01b03163314611a495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610789565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b567f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826140c4565b949350505050565b60008181526005602090815260408083206007018054825181850281018501909352808352606094938493929190830182828015612bbb57602002820191906000526020600020905b815481526020019060010190808311612ba7575b50505050509050805167ffffffffffffffff811115612bdc57612bdc61399b565b604051908082528060200260200182016040528015612c05578160200160208202803683370190505b50925060005b8151811015612cff57600060066000848481518110612c2c57612c2c614098565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a549192504291612c9f91614107565b1015612cee57828281518110612cb757612cb7614098565b6020026020010151858381518110612cd157612cd1614098565b60209081029190910101526060810151612ceb9085614107565b93505b50612cf8816140ee565b9050612c0b565b5050915091565b60005b815181101561183f576000801b828281518110612d2857612d28614098565b602002602001015114612d5857612d5883838381518110612d4b57612d4b614098565b6020026020010151613138565b612d61816140ee565b9050612d09565b60015460405163dc28b2bf60e01b815260009182916001600160a01b039091169063dc28b2bf90612d9f9087908790600401614340565b6020604051808303816000875af1158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190614381565b612dea61389f565b600254604051630c44b27760e01b815260009182918291829182918291829182916001600160a01b0390911690630c44b27790612e2d908e908e9060040161439a565b60c0604051808303816000875af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7091906143db565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151989e50969c50949a509298509096509450909216612eff5760405162461bcd60e51b815260040161078990614161565b8682608001511115612f5e5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610789565b8581600201604051602001612f739190614425565b6040516020818303038152906040528051906020012014612fd65760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b8481600101604051602001612feb9190614425565b604051602081830303815290604052805190602001201461304e5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b81516001600160a01b031660009081526004602052604090205484146130b65760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610789565b8060060154670de0b6b3a764000083606001516130d391906141b2565b6130dd91906141c9565b8810156131255760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610789565b9099509750955050505050509250925092565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b0319908116909355805490921690915592849055839055919091556131dc6007840183613531565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816004015482600501546132279190614107565b90508060000361183f5781546001600160a01b03166000908152600460205260409020613257906001018461365a565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155906132c560018301826138e0565b6132d36002830160006138e0565b60038201600090556004820160009055600582016000905560068201600090556007820160006116f2919061391a565b6000600b546000146133cf57670de0b6b3a7640000600b54836060015161332a91906141b2565b61333491906141c9565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cd9190614190565b505b60008183606001516133e1919061411a565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015613458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347c9190614190565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061358d8480548060200260200160405190810160405280929190818152602001828054801561358257602002820191906000526020600020905b81548152602001906001019080831161356e575b5050505050846136ff565b91509150806135d65760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610789565b83546000906135e79060019061411a565b905080831461362c5784818154811061360257613602614098565b906000526020600020015485848154811061361f5761361f614098565b6000918252602090912001555b8480548061363c5761363c61449b565b60019003818190600052602060002001600090559055505b50505050565b6000806136b6848054806020026020016040519081016040528092919081815260200182805480156136ab57602002820191906000526020600020905b815481526020019060010190808311613697575b505050505084613762565b91509150806135d65760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610789565b81516000908190815b8181101561374f578486828151811061372357613723614098565b60200260200101510361373d5792506001915061375b9050565b80613747816140ee565b915050613708565b50600019600092509250505b9250929050565b81516000908190815b8181101561374f578486828151811061378657613786614098565b6020026020010151036137a05792506001915061375b9050565b806137aa816140ee565b91505061376b565b60408051608081018252600080825260208201529081016137d16137de565b8152602001600081525090565b60405180610100016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b50613873929150613934565b5090565b6040805160608101909152600081526020810161389261389f565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5080546138ec9061412d565b6000825580601f106138fc575050565b601f016020900490600052602060002090810190612a969190613934565b5080546000825590600052602060002090810190612a9691905b5b808211156138735760008155600101613935565b6001600160a01b0381168114612a9657600080fd5b60006020828403121561397057600080fd5b813561397b81613949565b9392505050565b60006020828403121561399457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139da576139da61399b565b604052919050565b600082601f8301126139f357600080fd5b813567ffffffffffffffff811115613a0d57613a0d61399b565b613a20601f8201601f19166020016139b1565b818152846020838601011115613a3557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613a6457600080fd5b813567ffffffffffffffff811115613a7b57600080fd5b612b56848285016139e2565b600080600060608486031215613a9c57600080fd5b83359250602084013591506040840135613ab581613949565b809150509250925092565b60006101808284031215611d4257600080fd5b6000808284036103e0811215613ae857600080fd5b61026080821215613af857600080fd5b849350613b0786828701613ac0565b925050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613b4a57835183529284019291840191600101613b2e565b50909695505050505050565b60008060408385031215613b6957600080fd5b8235613b7481613949565b91506020830135613b8481613949565b809150509250929050565b6000815180845260005b81811015613bb557602081850181015186830182015201613b99565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613c0557815187529582019590820190600101613be9565b509495945050505050565b600061010060018060a01b0383511684526020830151816020860152613c3882860182613b8f565b91505060408301518482036040860152613c528282613b8f565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152613c948282613bd5565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613d1b57603f1989840301855281516080815185528882015189860152878201518189870152613cfa82870182613c10565b60609384015196909301959095525094870194925090860190600101613cc4565b509098975050505050505050565b600080828403610600811215613d3e57600080fd5b61048080821215613af857600080fd5b60006020808385031215613d6157600080fd5b823567ffffffffffffffff80821115613d7957600080fd5b818501915085601f830112613d8d57600080fd5b813581811115613d9f57613d9f61399b565b8060051b9150613db08483016139b1565b8181529183018401918481019088841115613dca57600080fd5b938501935b83851015613de857843582529385019390850190613dcf565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613e415783518252928401926001929092019190840190613e21565b509695505050505050565b60208152600061397b6020830184613c10565b60008060008060808587031215613e7557600080fd5b843567ffffffffffffffff80821115613e8d57600080fd5b613e99888389016139e2565b95506020870135915080821115613eaf57600080fd5b50613ebc878288016139e2565b949794965050505060408301359260600135919050565b6001600160a01b038816815260e060208201819052600090613ef790830189613b8f565b8281036040840152613f098189613b8f565b9150508560608301528460808301528360a08301528260c083015298975050505050505050565b60008060208385031215613f4357600080fd5b823567ffffffffffffffff80821115613f5b57600080fd5b818501915085601f830112613f6f57600080fd5b813581811115613f7e57600080fd5b8660208260051b8501011115613f9357600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015614028578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613fc2565b5091979650505050505050565b6000806040838503121561404857600080fd5b823561405381613949565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600060018201614100576141006140d8565b5060010190565b808201808211156129c4576129c46140d8565b818103818111156129c4576129c46140d8565b600181811c9082168061414157607f821691505b602082108103611d4257634e487b7160e01b600052602260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6000602082840312156141a257600080fd5b8151801515811461397b57600080fd5b80820281158282048414176129c4576129c46140d8565b6000826141d8576141d86140ae565b500490565b601f82111561183f57600081815260208120601f850160051c810160208610156142045750805b601f850160051c820191505b8181101561422357828155600101614210565b505050505050565b815167ffffffffffffffff8111156142455761424561399b565b61425981614253845461412d565b846141dd565b602080601f83116001811461428e57600084156142765750858301515b600019600386901b1c1916600185901b178555614223565b600085815260208120601f198616915b828110156142bd5788860151825594840194600190910190840161429e565b50858210156142db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8060005b6002811015613654576040808386379384019391909101906001016142ef565b604081833761432460408301604083016142eb565b604060c0820160c0840137610100608081830182850137505050565b6103e08101604084833761435a60408301604086016142eb565b604060c0850160c0840137610100610160818601828501375061397b61026083018461430f565b60006020828403121561439357600080fd5b5051919050565b610600810160408483376143b460408301604086016142eb565b604060c0850160c0840137610100610380818601828501375061397b61048083018461430f565b60008060008060008060c087890312156143f457600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008083546144338161412d565b6001828116801561444b57600181146144605761448f565b60ff198416875282151583028701945061448f565b8760005260208060002060005b858110156144865781548a82015290840190820161446d565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea264697066735822122065e22fa908aee992b0d94bfe127dfd0a35300e5aac610167919a4c44944ddd6164736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the idHash being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(string,string,uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_garantiIban\": \"IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\",\n          \"_garantiName\": \"Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"params\": {\n          \"_bodyHashProof\": \"Parameters and signals for body hash proof\",\n          \"_proof\": \"Parameters and signals for send email proof\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"params\": {\n          \"_bodyHashProof\": \"Parameters and signals for body hash proof\",\n          \"_proof\": \"Parameters and signals for registration email proof\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the idHash being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(string,string,uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a idHash from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4181,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IGarantiRegistrationProcessor)6876\"\n      },\n      {\n        \"astId\": 4184,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IGarantiSendProcessor)6921\"\n      },\n      {\n        \"astId\": 4186,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4191,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4145_storage)\"\n      },\n      {\n        \"astId\": 4196,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)4082_storage)\"\n      },\n      {\n        \"astId\": 4201,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)4100_storage)\"\n      },\n      {\n        \"astId\": 4206,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)4121_storage)\"\n      },\n      {\n        \"astId\": 4208,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4210,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4212,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4214,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4216,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4218,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4220,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiRegistrationProcessor)6876\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IGarantiSendProcessor)6921\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)4082_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct GarantiRamp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)4082_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4145_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct GarantiRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)4145_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)4121_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct GarantiRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)4121_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)4100_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct GarantiRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)4100_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(AccountInfo)4082_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4078,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"idHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4081,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)4137_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 4132,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 4136,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)4100_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 4084,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4086,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"garantiIban\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4088,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"garantiName\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4090,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4092,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4094,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4096,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4099,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_struct(GlobalAccountInfo)4145_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4139,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4141,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4144,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)4137_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)4121_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 4112,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4114,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4116,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4118,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4120,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/GarantiRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0x4893d6b0A9dc0B11f373f673bC2bCfAE74c0a1f9\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_garantiMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"_bodyHashVerifier\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bodyHashVerifier\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[11]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[11]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x0d910412257466e7375d09517c9f5d3142c3901d45108f72d426a2e1a3dafcd5\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x4893d6b0A9dc0B11f373f673bC2bCfAE74c0a1f9\",\n    \"transactionIndex\": 30,\n    \"gasUsed\": \"1843349\",\n    \"logsBloom\": \"0x00000000400000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000080000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x8acf8da4d97ea22ef3c9835b6a882bb27d2061252988b0d025dc0651125fa136\",\n    \"transactionHash\": \"0x0d910412257466e7375d09517c9f5d3142c3901d45108f72d426a2e1a3dafcd5\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 30,\n        \"blockNumber\": 12230704,\n        \"transactionHash\": \"0x0d910412257466e7375d09517c9f5d3142c3901d45108f72d426a2e1a3dafcd5\",\n        \"address\": \"0x4893d6b0A9dc0B11f373f673bC2bCfAE74c0a1f9\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 104,\n        \"blockHash\": \"0x8acf8da4d97ea22ef3c9835b6a882bb27d2061252988b0d025dc0651125fa136\"\n      }\n    ],\n    \"blockNumber\": 12230704,\n    \"cumulativeGasUsed\": \"4986074\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d\",\n    \"0x3Ff1c29f2406c9351B06F377f03e71023962DfdA\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"0x2D86A67402E9d9FbD616E02BeFFc21Edc30Ae64E\",\n    \"garanti@info.garantibbva.com.tr\",\n    \"0\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_garantiMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"_bodyHashVerifier\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bodyHashVerifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"internalType\\\":\\\"struct IGarantiRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\\\":\\\"GarantiRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/garanti_registration_verifier.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiRegistrationProcessor } from \\\\\\\"./interfaces/IGarantiRegistrationProcessor.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiRegistrationProcessor is\\\\n    Groth16Verifier,\\\\n    IGarantiRegistrationProcessor,\\\\n    BaseProcessorV2\\\\n{\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n        /* ============ Public Variables ============ */\\\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _garantiMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {\\\\n        bodyHashVerifier = _bodyHashVerifier;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n        require(\\\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\\\n            \\\\\\\"Invalid body hash proof\\\\\\\"\\\\n        );\\\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [5:10] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [10] is the packed userIdHash\\\\n        userIdHash = bytes32(_proof.signals[10]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n\\\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\\\n        require(intermediateHash == inputHash, \\\\\\\"Invalid intermediate or output hash\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x898ba95c7383b134a46d8cb477e8550d4d5e317e56bbb44618a722fec6a22aa6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[11] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0f70e4fda7e77a71110f14b943f0be18414d3fde1f89611659f3bfa61e7d220\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/garanti_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\\\n    \\\\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\\\n    \\\\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\\\n    \\\\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\\\n    \\\\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\\\n    \\\\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\\\n    \\\\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\\\n    \\\\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\\\n    \\\\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\\\n    \\\\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\\\n    \\\\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\\\n    \\\\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x684fdc3f6538962fc0a9ddf24d2a302d1ca140e068a784c0e9723843b5aeee57\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b50604051620021e7380380620021e783398101604081905262000034916200013b565b85858584846200004433620000bc565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002fe565b506004555050600580546001600160a01b0319166001600160a01b03969096169590951790945550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200015557600080fd5b865162000162816200010c565b8096505060208088015162000177816200010c565b60408901519096506200018a816200010c565b60608901519095506200019d816200010c565b60808901519094506001600160401b0380821115620001bb57600080fd5b818a0191508a601f830112620001d057600080fd5b815181811115620001e557620001e562000125565b604051601f8201601f19908116603f0116810190838211818310171562000210576200021062000125565b816040528281528d868487010111156200022957600080fd5b600093505b828410156200024d57848401860151818501870152928501926200022e565b600086848301015280975050505050505060a087015190509295509295509295565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a62000125565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611dfa620003ed600039600081816101150152610c6f0152611dfa6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063b870676c116100a2578063d0b71f9911610071578063d0b71f9914610224578063dbac582114610237578063dc28b2bf14610240578063f2fde38b14610253578063f6c7226b1461026657600080fd5b8063b870676c146101e1578063b9c6ea87146101f4578063c0d05fed14610207578063ced1e9781461021c57600080fd5b80638da5cb5b116100de5780638da5cb5b146101975780639895e5b7146101a8578063a8ef333f146101bb578063b2a3fda4146101ce57600080fd5b806315d276e11461011057806319d09152146101545780633d0c9cc414610177578063715018a61461018d575b600080fd5b6101377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101676101623660046117e6565b610279565b604051901515815260200161014b565b61017f600781565b60405190815260200161014b565b6101956102ed565b005b6000546001600160a01b0316610137565b600554610137906001600160a01b031681565b600154610137906001600160a01b031681565b6101956101dc3660046117e6565b610301565b600254610137906001600160a01b031681565b610167610202366004611810565b61030e565b61020f610b18565b60405161014b919061189a565b61020f610ba6565b6101956102323660046118e2565b610c38565b61017f60045481565b61017f61024e366004611906565b610c62565b6101956102613660046118e2565b610fa3565b610195610274366004611964565b611019565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e79190611a15565b92915050565b6102f5611031565b6102ff600061108b565b565b610309611031565b600455565b6000610a54565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610346576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161037c576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103ad576000805260206000f35b5050505050565b7f152dbeb8b8ab5eac60f4eef36d566fc91e5bb94e9ef0a08ec6c32127b1e5a5f285527f141de924cf08572281bf199f2e95a5e4b2573700ac3bf62f391ea2c4fbf78cee60208601526000608086018661045187357f053ddcea331e82cb4f9383d3df2ceb5d593bd9818ac8fc8bb1067ba10e629aa37f25041758d837741ae0d2ef251976f958e3c2705396cea1e9274039c0b18e8d7c84610349565b6104a160208801357f03c565627ff60ffc102246e6011808710c2ded87eb016e91cb18da96b1f3133b7f02a65c41c7e83b0c9f02b9370500a2f8355a6bbd5b1d9b06c4aa66f8799a40b284610349565b6104f160408801357f2c5b5bbde6c28b0991602a967c1fe5e32c2246d7d2880808e48265fb448e8f127f1230e04a6fd464834afed47a0ceaaaf77075c298e0db455136f4c2e218552d2b84610349565b61054160608801357f120c68be04314a872c0c388ec55c9cf3b368684ba8a50dab6d2abfb8996527827f0fc0e7d2a54f0a5a5133c038fc67a6d078b688e3c7ce78d00afb06e5b795273284610349565b61059160808801357f23819bc7be63a25573e216a2fc729f78d4bd4733558a6a6a4e98d2e175497ab27f2e6c0c05c2879447c6a65803421ba7ec6b6ba7c636f85f8e6a9ea529716abd1784610349565b6105e160a08801357f0ba21ee1f8053b9ff0fb5e743a04ec8ea70d255d0da0cbeb96556b0744a9a19c7f25a1bb0f9d263a96e44514dcba335f1991134fb33e77bf8a98e400a14ba6724b84610349565b61063160c08801357f20ac36f76fb33007fe57317ad2a6f39b907fe7da3d0c817d30ef35869d9dc4fb7f181a3c6101a924a62e0423a93c5a8ee369634777d8c4d38a4e4f9f19c0c2198384610349565b61068160e08801357f07dea76d67502b94bb38d5cd0a11ffff409213105254477105eae49a52f4ea217f1ef2ffedde9413306e78a2d35b9e6ca44cc080626abd82b44da4a9abad937cfb84610349565b6106d26101008801357f2b4a0f65746c64cfdf33690e101dc7ad6ab74e9269f2fca0a3d102d7a074a8167f01f3543d78cc7400d2d3581aaea774bb4ef7529860d8fd1c25db5a5d9cf9e07384610349565b6107236101208801357f059775a03288dbaecef98e8bbbf58b3b18cbddab69166669fde01f14460255157f2858e3c69ac92153a24e1bca97f59caecbce8d6f6d7100c615b4262a4cce619484610349565b6107746101408801357f101766538ecad8f3ad02975172f78d4a1b68dfe85762b81cfc20b5c15aedce857f1b846bd35a2b1db5876801ef17b9c07aa4be33cbf19511eada4a1d6a6ae42ef284610349565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29f725293b71250bc0726fa86bb992cef8d0f14621c9e6f3406e5fcf75cf313b6102808201527f28490d221f4d7ac575e80205e97ce102920dd9df55b2a60d06b8f6a3e05da29d6102a08201527f1d24e4a220ebcbcac369fb98e10d1376e7e30320cb514e0c5ca30fa009196abd6102c08201527f0255acb82ef4a2aa399db24ba36decb1a273a6461348d19bb4dc2da8e8c816ca6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a6c6000840135610315565b610a796020840135610315565b610a866040840135610315565b610a936060840135610315565b610aa06080840135610315565b610aad60a0840135610315565b610aba60c0840135610315565b610ac760e0840135610315565b610ad5610100840135610315565b610ae3610120840135610315565b610af1610140840135610315565b610aff610160840135610315565b610b0c818486888a6103b4565b90508060005260206000f35b60038054610b2590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190611a37565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b606060038054610bb590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190611a37565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b610c40611031565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ce15760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163b9c6ea8760e01b8152309163b9c6ea8791610d149187919082019060c0830190610100840190600401611a95565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611a15565b610d915760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610cd8565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610dd091869182019060c0830190610100840190600401611ac7565b602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611a15565b610e5d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f660000000000000000006044820152606401610cd8565b610e6f836101000183610100016110db565b610e7d610100840135610279565b610ec95760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610cd8565b6000610edc84610100016005600a6111bc565b90506003604051610eed9190611b0e565b604051809103902081604051602001610f069190611b84565b6040516020818303038152906040528051906020012014610f695760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610cd8565b610f9884604051602001610f7d9190611ba0565b60405160208183030381529060405280519060200120611297565b505050610240013590565b610fab611031565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd8565b6103468161108b565b611021611031565b600361102d8282611c28565b5050565b6000546001600160a01b031633146102ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cd8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e08501528585013561010085015290850135610120808501919091528451808503909101815261014090930190935281519101208082146111b65760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b6064820152608401610cd8565b50505050565b606060006111ca8484611cfe565b60ff1667ffffffffffffffff8111156111e5576111e561194e565b60405190808252806020026020018201604052801561120e578160200160208202803683370190505b50905060ff84165b8360ff16811015611273578581600b811061123357611233611af8565b60200201358261124660ff881684611d17565b8151811061125657611256611af8565b60209081029190910101528061126b81611d2a565b915050611216565b5061128e600782516112859190611d43565b829060076113ab565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190611a15565b156113515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610cd8565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561139757600080fd5b505af11580156103ad573d6000803e3d6000fd5b60606000808386516113bd9190611d43565b67ffffffffffffffff8111156113d5576113d561194e565b6040519080825280601f01601f1916602001820160405280156113ff576020820181803683370190505b5090506000805b87518161ffff1610156115b6576000888261ffff168151811061142b5761142b611af8565b6020026020010151905060008767ffffffffffffffff8111156114505761145061194e565b604051908082528060200260200182016040528015611479578160200160208202803683370190505b50905060005b888110156114cb57611492816008611d43565b83901c8282815181106114a7576114a7611af8565b60ff90921660209283029190910190910152806114c381611d2a565b91505061147f565b5060005b888110156115a05760008282815181106114eb576114eb611af8565b602002602001015160ff16905080600014611563578060f81b87878151811061151657611516611af8565b60200101906001600160f81b031916908160001a9053508561153781611d2a565b96506115469050600289611d5a565b60ff1660000361155e5761155b600189611d8a565b97505b611586565b61156e600289611d5a565b60ff1660010361158657611583600189611d8a565b97505b5060089290921c918061159881611d2a565b9150506114cf565b50505080806115ae90611da3565b915050611406565b5060018360ff1610156116575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610cd8565b858111156116c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610cd8565b60006116d0836116dc565b98975050505050505050565b8051606090829060005b82518110156117315782818151811061170157611701611af8565b01602001516001600160f81b03191660000361171f57809150611731565b8061172981611d2a565b9150506116e6565b5060008167ffffffffffffffff81111561174d5761174d61194e565b6040519080825280601f01601f191660200182016040528015611777576020820181803683370190505b50905060005b828110156117dd5783818151811061179757611797611af8565b602001015160f81c60f81b8282815181106117b4576117b4611af8565b60200101906001600160f81b031916908160001a905350806117d581611d2a565b91505061177d565b50949350505050565b6000602082840312156117f857600080fd5b5035919050565b80604081018310156102e757600080fd5b60008060008061026080868803121561182857600080fd5b61183287876117ff565b945060c086018781111561184557600080fd5b60408701945061185588826117ff565b93505086818701111561186757600080fd5b50929591945092610100019150565b60005b83811015611891578181015183820152602001611879565b50506000910152565b60208152600082518060208401526118b9816040850160208701611876565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034657600080fd5b6000602082840312156118f457600080fd5b81356118ff816118cd565b9392505050565b6000808284036103e081121561191b57600080fd5b6102608082121561192b57600080fd5b84935061018061025f198301121561194257600080fd5b92959390920193505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561197657600080fd5b813567ffffffffffffffff8082111561198e57600080fd5b818401915084601f8301126119a257600080fd5b8135818111156119b4576119b461194e565b604051601f8201601f19908116603f011681019083821181831017156119dc576119dc61194e565b816040528281528760208487010111156119f557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a2757600080fd5b815180151581146118ff57600080fd5b600181811c90821680611a4b57607f821691505b602082108103611a6b57634e487b7160e01b600052602260045260246000fd5b50919050565b8060005b60028110156111b657604080838637938401939190910190600101611a75565b61026081016040868337611aac6040830186611a71565b60408460c08401376101608361010084013795945050505050565b61018081016040868337611ade6040830186611a71565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808354611b1c81611a37565b60018281168015611b345760018114611b4957611b78565b60ff1984168752821515830287019450611b78565b8760005260208060002060005b85811015611b6f5781548a820152908401908201611b56565b50505082870194505b50929695505050505050565b60008251611b96818460208701611876565b9190910192915050565b61026081016040838337611bba6040830160408501611a71565b604060c0840160c0840137610100610160818501828501375092915050565b601f821115611c2357600081815260208120601f850160051c81016020861015611c005750805b601f850160051c820191505b81811015611c1f57828155600101611c0c565b5050505b505050565b815167ffffffffffffffff811115611c4257611c4261194e565b611c5681611c508454611a37565b84611bd9565b602080601f831160018114611c8b5760008415611c735750858301515b600019600386901b1c1916600185901b178555611c1f565b600085815260208120601f198616915b82811015611cba57888601518255948401946001909101908401611c9b565b5085821015611cd85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102e7576102e7611ce8565b818103818111156102e7576102e7611ce8565b600060018201611d3c57611d3c611ce8565b5060010190565b80820281158282048414176102e7576102e7611ce8565b600060ff831680611d7b57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102e7576102e7611ce8565b600061ffff808316818103611dba57611dba611ce8565b600101939250505056fea26469706673582212208de4387db64c9febd9ce9e5854bce4ae5009b356183f943984fb0f53020e7b4b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063b870676c116100a2578063d0b71f9911610071578063d0b71f9914610224578063dbac582114610237578063dc28b2bf14610240578063f2fde38b14610253578063f6c7226b1461026657600080fd5b8063b870676c146101e1578063b9c6ea87146101f4578063c0d05fed14610207578063ced1e9781461021c57600080fd5b80638da5cb5b116100de5780638da5cb5b146101975780639895e5b7146101a8578063a8ef333f146101bb578063b2a3fda4146101ce57600080fd5b806315d276e11461011057806319d09152146101545780633d0c9cc414610177578063715018a61461018d575b600080fd5b6101377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101676101623660046117e6565b610279565b604051901515815260200161014b565b61017f600781565b60405190815260200161014b565b6101956102ed565b005b6000546001600160a01b0316610137565b600554610137906001600160a01b031681565b600154610137906001600160a01b031681565b6101956101dc3660046117e6565b610301565b600254610137906001600160a01b031681565b610167610202366004611810565b61030e565b61020f610b18565b60405161014b919061189a565b61020f610ba6565b6101956102323660046118e2565b610c38565b61017f60045481565b61017f61024e366004611906565b610c62565b6101956102613660046118e2565b610fa3565b610195610274366004611964565b611019565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e79190611a15565b92915050565b6102f5611031565b6102ff600061108b565b565b610309611031565b600455565b6000610a54565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610346576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161037c576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103ad576000805260206000f35b5050505050565b7f152dbeb8b8ab5eac60f4eef36d566fc91e5bb94e9ef0a08ec6c32127b1e5a5f285527f141de924cf08572281bf199f2e95a5e4b2573700ac3bf62f391ea2c4fbf78cee60208601526000608086018661045187357f053ddcea331e82cb4f9383d3df2ceb5d593bd9818ac8fc8bb1067ba10e629aa37f25041758d837741ae0d2ef251976f958e3c2705396cea1e9274039c0b18e8d7c84610349565b6104a160208801357f03c565627ff60ffc102246e6011808710c2ded87eb016e91cb18da96b1f3133b7f02a65c41c7e83b0c9f02b9370500a2f8355a6bbd5b1d9b06c4aa66f8799a40b284610349565b6104f160408801357f2c5b5bbde6c28b0991602a967c1fe5e32c2246d7d2880808e48265fb448e8f127f1230e04a6fd464834afed47a0ceaaaf77075c298e0db455136f4c2e218552d2b84610349565b61054160608801357f120c68be04314a872c0c388ec55c9cf3b368684ba8a50dab6d2abfb8996527827f0fc0e7d2a54f0a5a5133c038fc67a6d078b688e3c7ce78d00afb06e5b795273284610349565b61059160808801357f23819bc7be63a25573e216a2fc729f78d4bd4733558a6a6a4e98d2e175497ab27f2e6c0c05c2879447c6a65803421ba7ec6b6ba7c636f85f8e6a9ea529716abd1784610349565b6105e160a08801357f0ba21ee1f8053b9ff0fb5e743a04ec8ea70d255d0da0cbeb96556b0744a9a19c7f25a1bb0f9d263a96e44514dcba335f1991134fb33e77bf8a98e400a14ba6724b84610349565b61063160c08801357f20ac36f76fb33007fe57317ad2a6f39b907fe7da3d0c817d30ef35869d9dc4fb7f181a3c6101a924a62e0423a93c5a8ee369634777d8c4d38a4e4f9f19c0c2198384610349565b61068160e08801357f07dea76d67502b94bb38d5cd0a11ffff409213105254477105eae49a52f4ea217f1ef2ffedde9413306e78a2d35b9e6ca44cc080626abd82b44da4a9abad937cfb84610349565b6106d26101008801357f2b4a0f65746c64cfdf33690e101dc7ad6ab74e9269f2fca0a3d102d7a074a8167f01f3543d78cc7400d2d3581aaea774bb4ef7529860d8fd1c25db5a5d9cf9e07384610349565b6107236101208801357f059775a03288dbaecef98e8bbbf58b3b18cbddab69166669fde01f14460255157f2858e3c69ac92153a24e1bca97f59caecbce8d6f6d7100c615b4262a4cce619484610349565b6107746101408801357f101766538ecad8f3ad02975172f78d4a1b68dfe85762b81cfc20b5c15aedce857f1b846bd35a2b1db5876801ef17b9c07aa4be33cbf19511eada4a1d6a6ae42ef284610349565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29f725293b71250bc0726fa86bb992cef8d0f14621c9e6f3406e5fcf75cf313b6102808201527f28490d221f4d7ac575e80205e97ce102920dd9df55b2a60d06b8f6a3e05da29d6102a08201527f1d24e4a220ebcbcac369fb98e10d1376e7e30320cb514e0c5ca30fa009196abd6102c08201527f0255acb82ef4a2aa399db24ba36decb1a273a6461348d19bb4dc2da8e8c816ca6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a6c6000840135610315565b610a796020840135610315565b610a866040840135610315565b610a936060840135610315565b610aa06080840135610315565b610aad60a0840135610315565b610aba60c0840135610315565b610ac760e0840135610315565b610ad5610100840135610315565b610ae3610120840135610315565b610af1610140840135610315565b610aff610160840135610315565b610b0c818486888a6103b4565b90508060005260206000f35b60038054610b2590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190611a37565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b606060038054610bb590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190611a37565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b610c40611031565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ce15760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163b9c6ea8760e01b8152309163b9c6ea8791610d149187919082019060c0830190610100840190600401611a95565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611a15565b610d915760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610cd8565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610dd091869182019060c0830190610100840190600401611ac7565b602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611a15565b610e5d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f660000000000000000006044820152606401610cd8565b610e6f836101000183610100016110db565b610e7d610100840135610279565b610ec95760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610cd8565b6000610edc84610100016005600a6111bc565b90506003604051610eed9190611b0e565b604051809103902081604051602001610f069190611b84565b6040516020818303038152906040528051906020012014610f695760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610cd8565b610f9884604051602001610f7d9190611ba0565b60405160208183030381529060405280519060200120611297565b505050610240013590565b610fab611031565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd8565b6103468161108b565b611021611031565b600361102d8282611c28565b5050565b6000546001600160a01b031633146102ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cd8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e08501528585013561010085015290850135610120808501919091528451808503909101815261014090930190935281519101208082146111b65760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b6064820152608401610cd8565b50505050565b606060006111ca8484611cfe565b60ff1667ffffffffffffffff8111156111e5576111e561194e565b60405190808252806020026020018201604052801561120e578160200160208202803683370190505b50905060ff84165b8360ff16811015611273578581600b811061123357611233611af8565b60200201358261124660ff881684611d17565b8151811061125657611256611af8565b60209081029190910101528061126b81611d2a565b915050611216565b5061128e600782516112859190611d43565b829060076113ab565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190611a15565b156113515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610cd8565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561139757600080fd5b505af11580156103ad573d6000803e3d6000fd5b60606000808386516113bd9190611d43565b67ffffffffffffffff8111156113d5576113d561194e565b6040519080825280601f01601f1916602001820160405280156113ff576020820181803683370190505b5090506000805b87518161ffff1610156115b6576000888261ffff168151811061142b5761142b611af8565b6020026020010151905060008767ffffffffffffffff8111156114505761145061194e565b604051908082528060200260200182016040528015611479578160200160208202803683370190505b50905060005b888110156114cb57611492816008611d43565b83901c8282815181106114a7576114a7611af8565b60ff90921660209283029190910190910152806114c381611d2a565b91505061147f565b5060005b888110156115a05760008282815181106114eb576114eb611af8565b602002602001015160ff16905080600014611563578060f81b87878151811061151657611516611af8565b60200101906001600160f81b031916908160001a9053508561153781611d2a565b96506115469050600289611d5a565b60ff1660000361155e5761155b600189611d8a565b97505b611586565b61156e600289611d5a565b60ff1660010361158657611583600189611d8a565b97505b5060089290921c918061159881611d2a565b9150506114cf565b50505080806115ae90611da3565b915050611406565b5060018360ff1610156116575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610cd8565b858111156116c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610cd8565b60006116d0836116dc565b98975050505050505050565b8051606090829060005b82518110156117315782818151811061170157611701611af8565b01602001516001600160f81b03191660000361171f57809150611731565b8061172981611d2a565b9150506116e6565b5060008167ffffffffffffffff81111561174d5761174d61194e565b6040519080825280601f01601f191660200182016040528015611777576020820181803683370190505b50905060005b828110156117dd5783818151811061179757611797611af8565b602001015160f81c60f81b8282815181106117b4576117b4611af8565b60200101906001600160f81b031916908160001a905350806117d581611d2a565b91505061177d565b50949350505050565b6000602082840312156117f857600080fd5b5035919050565b80604081018310156102e757600080fd5b60008060008061026080868803121561182857600080fd5b61183287876117ff565b945060c086018781111561184557600080fd5b60408701945061185588826117ff565b93505086818701111561186757600080fd5b50929591945092610100019150565b60005b83811015611891578181015183820152602001611879565b50506000910152565b60208152600082518060208401526118b9816040850160208701611876565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034657600080fd5b6000602082840312156118f457600080fd5b81356118ff816118cd565b9392505050565b6000808284036103e081121561191b57600080fd5b6102608082121561192b57600080fd5b84935061018061025f198301121561194257600080fd5b92959390920193505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561197657600080fd5b813567ffffffffffffffff8082111561198e57600080fd5b818401915084601f8301126119a257600080fd5b8135818111156119b4576119b461194e565b604051601f8201601f19908116603f011681019083821181831017156119dc576119dc61194e565b816040528281528760208487010111156119f557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a2757600080fd5b815180151581146118ff57600080fd5b600181811c90821680611a4b57607f821691505b602082108103611a6b57634e487b7160e01b600052602260045260246000fd5b50919050565b8060005b60028110156111b657604080838637938401939190910190600101611a75565b61026081016040868337611aac6040830186611a71565b60408460c08401376101608361010084013795945050505050565b61018081016040868337611ade6040830186611a71565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808354611b1c81611a37565b60018281168015611b345760018114611b4957611b78565b60ff1984168752821515830287019450611b78565b8760005260208060002060005b85811015611b6f5781548a820152908401908201611b56565b50505082870194505b50929695505050505050565b60008251611b96818460208701611876565b9190910192915050565b61026081016040838337611bba6040830160408501611a71565b604060c0840160c0840137610100610160818501828501375092915050565b601f821115611c2357600081815260208120601f850160051c81016020861015611c005750805b601f850160051c820191505b81811015611c1f57828155600101611c0c565b5050505b505050565b815167ffffffffffffffff811115611c4257611c4261194e565b611c5681611c508454611a37565b84611bd9565b602080601f831160018114611c8b5760008415611c735750858301515b600019600386901b1c1916600185901b178555611c1f565b600085815260208120601f198616915b82811015611cba57888601518255948401946001909101908401611c9b565b5085821015611cd85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102e7576102e7611ce8565b818103818111156102e7576102e7611ce8565b600060018201611d3c57611d3c611ce8565b5060010190565b80820281158282048414176102e7576102e7611ce8565b600060ff831680611d7b57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102e7576102e7611ce8565b600061ffff808316818103611dba57611dba611ce8565b600101939250505056fea26469706673582212208de4387db64c9febd9ce9e5854bce4ae5009b356183f943984fb0f53020e7b4b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3392,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3566\"\n      },\n      {\n        \"astId\": 3395,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3771\"\n      },\n      {\n        \"astId\": 3397,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3399,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 6169,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"bodyHashVerifier\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_contract(IGarantiBodySuffixHashVerifier)6841\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiBodySuffixHashVerifier)6841\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3566\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3771\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/GarantiSendProcessor.json",
    "content": "{\n  \"address\": \"0x29666c1dB00852c5378d4299ae24B6CB8081057f\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_garantiMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"_bodyHashVerifier\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bodyHashVerifier\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperNameHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[28]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[28]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xa468b27b1d8c78a9a35aec1b03362378fcbd1faef87a8d29d5ace1a7e2880e05\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x29666c1dB00852c5378d4299ae24B6CB8081057f\",\n    \"transactionIndex\": 27,\n    \"gasUsed\": \"2404301\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000001200000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000400000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x157949820f6f5c04f53ffb169f16baf3fa5426a80eef7904aa535a86a1a11369\",\n    \"transactionHash\": \"0xa468b27b1d8c78a9a35aec1b03362378fcbd1faef87a8d29d5ace1a7e2880e05\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 27,\n        \"blockNumber\": 12230707,\n        \"transactionHash\": \"0xa468b27b1d8c78a9a35aec1b03362378fcbd1faef87a8d29d5ace1a7e2880e05\",\n        \"address\": \"0x29666c1dB00852c5378d4299ae24B6CB8081057f\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 98,\n        \"blockHash\": \"0x157949820f6f5c04f53ffb169f16baf3fa5426a80eef7904aa535a86a1a11369\"\n      }\n    ],\n    \"blockNumber\": 12230707,\n    \"cumulativeGasUsed\": \"5784338\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d\",\n    \"0x3Ff1c29f2406c9351B06F377f03e71023962DfdA\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"0x2D86A67402E9d9FbD616E02BeFFc21Edc30Ae64E\",\n    \"garanti@info.garantibbva.com.tr\",\n    \"30\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_garantiMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"_bodyHashVerifier\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bodyHashVerifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"internalType\\\":\\\"struct IGarantiSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperNameHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiSendProcessor.sol\\\":\\\"GarantiSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbe0863ae4a59b5b7e5f6b554ac86e3d15e4f51c54974cc89fff8f0df2864787a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/garanti_send_verifier.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiSendProcessor } from \\\\\\\"./interfaces/IGarantiSendProcessor.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 7;\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _garantiMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {\\\\n        bodyHashVerifier = _bodyHashVerifier;\\\\n    }\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperNameHash,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n        require(\\\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\\\n            \\\\\\\"Invalid body hash proof\\\\\\\"\\\\n        );\\\\n\\\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [5:10] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\\\n\\\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\\\n        // parse and convert to a unix timestamp\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\\\n\\\\n        // Signals [19] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\\\n\\\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\\\n\\\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\\\n\\\\n        // Signals [14] is intentHash\\\\n        intentHash = bytes32(_proof.signals[27]);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n\\\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\\\n        require(intermediateHash == inputHash, \\\\\\\"Invalid intermediate or output hash\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x81ae73e29bc87913b8746b041a6d208c3d0fedd21f80d42be44546d8e19ef10f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[28] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70a70e2bf4861b7095bff34a55b10da9bc705735e40bed6104e179c0ecc3da25\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/garanti_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\\\n    \\\\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\\\n    \\\\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\\\n    \\\\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\\\n    \\\\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\\\n    \\\\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\\\n    \\\\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\\\n    \\\\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\\\n    \\\\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\\\n    \\\\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\\\n    \\\\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\\\n    \\\\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\\\n    \\\\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\\\n    \\\\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\\\n    \\\\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\\\n    \\\\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\\\n    \\\\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\\\n    \\\\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\\\n    \\\\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\\\n    \\\\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\\\n    \\\\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\\\n    \\\\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\\\n    \\\\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\\\n    \\\\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\\\n    \\\\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\\\n    \\\\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\\\n    \\\\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\\\n    \\\\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\\\n    \\\\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 416)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 448)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 480)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 512)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 544)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 576)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 608)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 640)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 672)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 704)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 736)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 768)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 800)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 832)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 864)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 896)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xc792f59c7816b5ce83fbdb4350c0efbf7272f4a9e862b5f2307666bae5d90d8c\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162002bae38038062002bae83398101604081905262000034916200013b565b85858584846200004433620000bc565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002fe565b506004555050600580546001600160a01b0319166001600160a01b03969096169590951790945550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200015557600080fd5b865162000162816200010c565b8096505060208088015162000177816200010c565b60408901519096506200018a816200010c565b60608901519095506200019d816200010c565b60808901519094506001600160401b0380821115620001bb57600080fd5b818a0191508a601f830112620001d057600080fd5b815181811115620001e557620001e562000125565b604051601f8201601f19908116603f0116810190838211818310171562000210576200021062000125565b816040528281528d868487010111156200022957600080fd5b600093505b828410156200024d57848401860151818501870152928501926200022e565b600086848301015280975050505050505060a087015190509295509295509295565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a62000125565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516127c1620003ed6000396000818161014f01526102a501526127c16000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610243578063dbac582114610256578063f2fde38b1461026d578063f6c7226b1461028057600080fd5b8063b2a3fda414610200578063b870676c14610213578063c0d05fed14610226578063ced1e9781461023b57600080fd5b8063715018a6116100d3578063715018a6146101bf5780638da5cb5b146101c95780639895e5b7146101da578063a8ef333f146101ed57600080fd5b80630c44b2771461010557806315d276e11461014a57806319d09152146101895780635b2d12ea146101ac575b600080fd5b6101186101133660046120ea565b610293565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b6101717f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610141565b61019c610197366004612132565b61068e565b6040519015158152602001610141565b61019c6101ba36600461215c565b610702565b6101c7611558565b005b6000546001600160a01b0316610171565b600554610171906001600160a01b031681565b600154610171906001600160a01b031681565b6101c761020e366004612132565b61156c565b600254610171906001600160a01b031681565b61022e611579565b60405161014191906121e6565b61022e611607565b6101c761025136600461222e565b611699565b61025f60045481565b604051908152602001610141565b6101c761027b36600461222e565b6116c3565b6101c761028e366004612261565b611739565b60008080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103175760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b60408051632d96897560e11b81523091635b2d12ea9161034a918c919082019060c0830190610100840190600401612336565b602060405180830381865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b9190612368565b6103c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161030e565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610406918b9182019060c083019061010084019060040161238a565b602060405180830381865afa158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190612368565b6104935760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f66000000000000000000604482015260640161030e565b6104a588610100018861010001611751565b6104b361010089013561068e565b6104ff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161030e565b600061051289610100016005600a611832565b90506003604051610523919061240b565b60405180910390208160405160200161053c9190612481565b604051602081830303815290604052805190602001201461059f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161030e565b6105c1600b60fa1b60066105ba6101008d0160176019611832565b919061190d565b96506004546105e260006105dc8c61010001600a600c611832565b90611aea565b6105ec91906124b3565b955061042089013592506106076101008a01600c6012611832565b6040516020016106179190612481565b604051602081830303815290604052805190602001209450610640896101000160126017611832565b6040516020016106509190612481565b60408051808303601f19018152919052805160209091012093506106786104408a0135611b02565b5094979396929550909350916104609091013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190612368565b92915050565b60006113a6565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061073a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610770576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806107a1576000805260206000f35b5050505050565b7f23fe0119e0d86d98fef3296d3987953338f409989ee0d25c2e6f65f1ac69a0ce85527f01c6e591e4f2be7957d3c4d6e6a4bc56531b0b5853fae4cbbb9979dc3fb4054760208601526000608086018661084587357f22ab60c4aec5bc92a88fb158ea2f8650a673a4c6b22d1129ac1d00be9390f9b47f0c6c5c5e9cd44842f22ea4148cb673cd03856d7a1470fcbadeedfc16e4fdeada8461073d565b61089560208801357f101cf9529c1420aba7bd89319bbe0a2d90c912fdfc582d65c26d563341eb4e047f0ca42b1575a9a329c09d91b81f8b84c130808565de3467e32e109ac740ab9b6e8461073d565b6108e560408801357f089d945945e413f66f09d7d05eced536c1b1c76af63307988e5602c5fa18a2647f19e936c17e4e70f8d4a74a0c5d3c0b6ca8882523a94617e4a8eed449efe2d63e8461073d565b61093560608801357f2a7d9db6e93fe306547d1509e3152be1ad664b5a56700e6d01e1b0ad177562227f2570aa6d600dcb3626e9bdedd465d8f4d67f1662ea70e514fcccdc37dbeb30628461073d565b61098560808801357f22441bd33d5f7d352f09f043001ead6d8dce01fe4f1e06f6d52a3ec025a50e477f2f62d4ab058625a42df361a06e432ea669df600b018d57a3cc9e06d3b32352908461073d565b6109d560a08801357f2bd98244eb34f527cddde82bc7ecd3d82572341b6723c7e204b4b13b4483a0067f2bc1835204d308c4560a3db92bffeb83d72eee6fcc8c286c5f46b11ff20819718461073d565b610a2560c08801357f076ee4439bed6ba9c0363880a2a678899b2ca3f4a8b60c954e4ef908658a959a7f1a1de9f43ef35c391fcc525fe1350dbf6158cb4b977402b318e7a69646b4d9038461073d565b610a7560e08801357f0ff1e251abd89fcb1a7d7933e30545ed1d70fdaa8aefaf38e4f0a8d7a03bc41e7f08162360d15cfd2c53d5ed4f2a5ced2cddc4ca82ce6094b2155d53bc934317798461073d565b610ac66101008801357f2675a0ba71a63d06d61dd6379583ad1c910138768349d0028ab3341a9ddd97c67f061570d382129dff2bac14d938281bc6c434663611bffd8ebae841e89b3a91438461073d565b610b176101208801357f2e7ee0dfebd18a5dce23ca2c9281caadd1e64d18a299c052a315130f01acd7857f198da0e315822dc430064816fa30bff8dc44b12dcaf3bb1f7969e1ed3d1f123c8461073d565b610b676101408801357f1f1dbe73fe0b80437353249d8a85e029446996809fc833c20d4f2ce5298fc0397e7795fe454ffc3f3e74f9da55cdce061a5e0b00097ddc642b0ce7246bbd5c468461073d565b610bb86101608801357f12273cff18addf941caf2bfcca416d3ff48b65a5c23f2470379ccc91c1a1988a7f0b125c630f757966a1277c4ba48ee8f917dc2355c9b0ae1e344611c66de4f6c08461073d565b610c096101808801357f128f40c4e75ffaad2b197a6a59752a2a47c91a4cca174dc0efab9f0286c52d5d7f1d63fa7d27b65bae515baf04e661a140a4f6c0429067223beb3b7ab4c36d2ffe8461073d565b610c5a6101a08801357f2ca69ffae97a540015d7c340ba9d751bdddd22c1226e850f47b86fba3bc9c4ee7f2776a05d98ee9432c323b360cae02e275acf2a8d0af78ac0fee9e017c63c60c98461073d565b610cab6101c08801357f2b6af433c35897a0f9458c8c8dc529ae00bd2f485e0fd1eb1aa9c33510d8b5af7f26668060050e6db758e60e3b944075a05b1708c45c0a7b74609ddcf2e78396658461073d565b610cfc6101e08801357f087083b6345e3b3a634f91ebac116834623185ce32bee1b57b80bf249e5082dc7f2b742c812404bde4218c3c0d3830669c3bdaf023717c8c6e16342dcd7fae8dcb8461073d565b610d4d6102008801357f0613ef91c62c4fe8695af930288e88015cb0db3f9421f9bd29da3675aa6403177f110e8f6a568e37356c1f05b9f063142461b41e4869e76784d10ef0c52c1422308461073d565b610d9e6102208801357f14420a530bff2b7dbc9956771e90b019ca0035fcd22623c064145c7de21d64127f029819dce317f0ed390d1e4525fb803cd0594a5fc1cd708cc118bf8b46d906d78461073d565b610def6102408801357f08d51bc7ed9e0fa0a16095a14d1f08e59a542a37610dc382c154dba6021eb65e7f12f54cc9fc215b9665fcec7f0ea84278ccfdec9ce0721b3d54c8aad79dadaf2e8461073d565b610e406102608801357f1a5601de789a9b9676133a0ca9c5db25d5a96113c9c975e7a102cec68848a4b07f23fd9af7d041dbb03d11a3431c72b5a460a1d36c9c8794d2d3b76093d6dbba3f8461073d565b610e916102808801357f1f20e53fb46193851de0c5290fe68ef454d2c0aee9d718d3a26dc1b9a0d1fbf37f0119d365c9bd85d15ae0cfd05222329bedbd2b5af1152bb01a06fd6e927d72df8461073d565b610ee16102a08801357e3c7a3b50dc6c29bbecafaf5c20327657603b3f5cdf7e1cfe0b9a872c8937557f0573d6da8283a957bede0e1d662a7826475a7f3503b61ce6731cda9e05b9061f8461073d565b610f326102c08801357f17899f38cd9c61264b3a0b6bd8849bccb8d7752a18e26ac11d755f3dde8b61097f169a46074f60fe92e7e2f51c1cb9f1ef137bd9a056c3391eb9f6a7c656ce6f3e8461073d565b610f836102e08801357f288723a08481f3ba64b49862bb693af72875ed303cba67d71d79ac19605ebb067f100e99c7a85374b98df7f70dee671d985be259cf23b941d97c9903742aec653d8461073d565b610fd46103008801357f094162cf3f32de9b93a59ef13c9a33ac297fd5b803cd9a6b7c888510375d67207f1df59b2a12d7a478bb3abc00b26d86973722485658d0466c5bcb7136b8d00ee88461073d565b6110256103208801357f26d2dd8bcb721ddddf7a89fce7a8174360bfde331abacdcc4e95a544437623c97f222355ee8b12fd4b953be489ce7ac9e0c45c41ae9f9a3e818018a2ef27c8fe868461073d565b6110766103408801357f0ac9b2a5b59662bfe8d866a43ff5280402ceaff7bf4d0d3321bd5cffb8238cbf7f118feff08485cffea53d0e5750f0cfad7d5f6415985d002708c0ba4cdb806d778461073d565b6110c66103608801357f1ef601660e69a4d6b550f31e03b229bc114ae46a0dbc611a88c5f2b9da5d67637e2b50469bb49cfb2b946d134a99c282cb9ae18a70ce144bf7bbbe74be9e5cd48461073d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f2421d5e11b841e97bba6ebf4f6c52f5e7068b4cac03cfe14b850dab7b03cb7416102808201527f16cda08f8f6fd30da8c340e73ad4829d593f0b6e9adddda9cf9e7992704f60b46102a08201527f29b8959bb7032f74cf68b6fd6b3ae134f46034af7754bff13dd000fb177fad8f6102c08201527f2e43943d84a2aa708872610f2ad74308fe43ac6599953f160297ad9fdac814776102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526113be6000840135610709565b6113cb6020840135610709565b6113d86040840135610709565b6113e56060840135610709565b6113f26080840135610709565b6113ff60a0840135610709565b61140c60c0840135610709565b61141960e0840135610709565b611427610100840135610709565b611435610120840135610709565b611443610140840135610709565b611451610160840135610709565b61145f610180840135610709565b61146d6101a0840135610709565b61147b6101c0840135610709565b6114896101e0840135610709565b611497610200840135610709565b6114a5610220840135610709565b6114b3610240840135610709565b6114c1610260840135610709565b6114cf610280840135610709565b6114dd6102a0840135610709565b6114eb6102c0840135610709565b6114f96102e0840135610709565b611507610300840135610709565b611515610320840135610709565b611523610340840135610709565b611531610360840135610709565b61153f610380840135610709565b61154c818486888a6107a8565b90508060005260206000f35b611560611c16565b61156a6000611c70565b565b611574611c16565b600455565b60038054611586906123d1565b80601f01602080910402602001604051908101604052809291908181526020018280546115b2906123d1565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b505050505081565b606060038054611616906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906123d1565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b6116a1611c16565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6116cb611c16565b6001600160a01b0381166117305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030e565b61073a81611c70565b611741611c16565b600361174d8282612515565b5050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e085015285850135610100850152908501356101208085019190915284518085039091018152610140909301909352815191012080821461182c5760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b606482015260840161030e565b50505050565b6060600061184084846125d5565b60ff1667ffffffffffffffff81111561185b5761185b61224b565b604051908082528060200260200182016040528015611884578160200160208202803683370190505b50905060ff84165b8360ff168110156118e9578581601c81106118a9576118a96123bb565b6020020135826118bc60ff8816846125ee565b815181106118cc576118cc6123bb565b6020908102919091010152806118e181612601565b91505061188c565b50611904600782516118fb919061261a565b82906007611cc0565b95945050505050565b600083818080805b8451811015611a6357603060f81b858281518110611935576119356123bb565b01602001516001600160f81b031916108015906119765750603960f81b858281518110611964576119646123bb565b01602001516001600160f81b03191611155b156119b957603085828151811061198f5761198f6123bb565b01602001516119a1919060f81c6125ee565b6119ac85600a61261a565b6119b691906124b3565b93505b81156119cd57826119c981612601565b9350505b876001600160f81b0319168582815181106119ea576119ea6123bb565b01602001516001600160f81b03191603611a51578115611a4c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161030e565b600191505b80611a5b81612601565b915050611915565b5085821115611abf5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161030e565b611ac982876125ee565b611ad490600a612715565b611ade908461261a565b98975050505050505050565b6000611afb83601760f91b8461190d565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190612368565b15611bbc5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161030e565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015611c0257600080fd5b505af11580156107a1573d6000803e3d6000fd5b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651611cd2919061261a565b67ffffffffffffffff811115611cea57611cea61224b565b6040519080825280601f01601f191660200182016040528015611d14576020820181803683370190505b5090506000805b87518161ffff161015611ecb576000888261ffff1681518110611d4057611d406123bb565b6020026020010151905060008767ffffffffffffffff811115611d6557611d6561224b565b604051908082528060200260200182016040528015611d8e578160200160208202803683370190505b50905060005b88811015611de057611da781600861261a565b83901c828281518110611dbc57611dbc6123bb565b60ff9092166020928302919091019091015280611dd881612601565b915050611d94565b5060005b88811015611eb5576000828281518110611e0057611e006123bb565b602002602001015160ff16905080600014611e78578060f81b878781518110611e2b57611e2b6123bb565b60200101906001600160f81b031916908160001a90535085611e4c81612601565b9650611e5b9050600289612721565b60ff16600003611e7357611e70600189612751565b97505b611e9b565b611e83600289612721565b60ff16600103611e9b57611e98600189612751565b97505b5060089290921c9180611ead81612601565b915050611de4565b5050508080611ec39061276a565b915050611d1b565b5060018360ff161015611f6c5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161030e565b85811115611fda5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161030e565b6000611ade838051606090829060005b825181101561203557828181518110612005576120056123bb565b01602001516001600160f81b03191660000361202357809150612035565b8061202d81612601565b915050611fea565b5060008167ffffffffffffffff8111156120515761205161224b565b6040519080825280601f01601f19166020018201604052801561207b576020820181803683370190505b50905060005b828110156120e15783818151811061209b5761209b6123bb565b602001015160f81c60f81b8282815181106120b8576120b86123bb565b60200101906001600160f81b031916908160001a905350806120d981612601565b915050612081565b50949350505050565b6000808284036106008112156120ff57600080fd5b6104808082121561210f57600080fd5b84935061018061047f198301121561212657600080fd5b92959390920193505050565b60006020828403121561214457600080fd5b5035919050565b80604081018310156106fc57600080fd5b60008060008061048080868803121561217457600080fd5b61217e878761214b565b945060c086018781111561219157600080fd5b6040870194506121a1888261214b565b9350508681870111156121b357600080fd5b50929591945092610100019150565b60005b838110156121dd5781810151838201526020016121c5565b50506000910152565b60208152600082518060208401526122058160408501602087016121c2565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073a57600080fd5b60006020828403121561224057600080fd5b8135611afb81612219565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561227357600080fd5b813567ffffffffffffffff8082111561228b57600080fd5b818401915084601f83011261229f57600080fd5b8135818111156122b1576122b161224b565b604051601f8201601f19908116603f011681019083821181831017156122d9576122d961224b565b816040528281528760208487010111156122f257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b600281101561182c57604080838637938401939190910190600101612316565b6104808101604086833761234d6040830186612312565b60408460c08401376103808361010084013795945050505050565b60006020828403121561237a57600080fd5b81518015158114611afb57600080fd5b610180810160408683376123a16040830186612312565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612419816123d1565b60018281168015612431576001811461244657612475565b60ff1984168752821515830287019450612475565b8760005260208060002060005b8581101561246c5781548a820152908401908201612453565b50505082870194505b50929695505050505050565b600082516124938184602087016121c2565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106fc576106fc61249d565b601f82111561251057600081815260208120601f850160051c810160208610156124ed5750805b601f850160051c820191505b8181101561250c578281556001016124f9565b5050505b505050565b815167ffffffffffffffff81111561252f5761252f61224b565b6125438161253d84546123d1565b846124c6565b602080601f83116001811461257857600084156125605750858301515b600019600386901b1c1916600185901b17855561250c565b600085815260208120601f198616915b828110156125a757888601518255948401946001909101908401612588565b50858210156125c55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156106fc576106fc61249d565b818103818111156106fc576106fc61249d565b6000600182016126135761261361249d565b5060010190565b80820281158282048414176106fc576106fc61249d565b600181815b8085111561266c5781600019048211156126525761265261249d565b8085161561265f57918102915b93841c9390800290612636565b509250929050565b600082612683575060016106fc565b81612690575060006106fc565b81600181146126a657600281146126b0576126cc565b60019150506106fc565b60ff8411156126c1576126c161249d565b50506001821b6106fc565b5060208310610133831016604e8410600b84101617156126ef575081810a6106fc565b6126f98383612631565b806000190482111561270d5761270d61249d565b029392505050565b6000611afb8383612674565b600060ff83168061274257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156106fc576106fc61249d565b600061ffff8083168181036127815761278161249d565b600101939250505056fea2646970667358221220b68d775d23695c7993f4e8191809ed6a550eea8e913da4fdcf02358fa5577a5c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610243578063dbac582114610256578063f2fde38b1461026d578063f6c7226b1461028057600080fd5b8063b2a3fda414610200578063b870676c14610213578063c0d05fed14610226578063ced1e9781461023b57600080fd5b8063715018a6116100d3578063715018a6146101bf5780638da5cb5b146101c95780639895e5b7146101da578063a8ef333f146101ed57600080fd5b80630c44b2771461010557806315d276e11461014a57806319d09152146101895780635b2d12ea146101ac575b600080fd5b6101186101133660046120ea565b610293565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b6101717f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610141565b61019c610197366004612132565b61068e565b6040519015158152602001610141565b61019c6101ba36600461215c565b610702565b6101c7611558565b005b6000546001600160a01b0316610171565b600554610171906001600160a01b031681565b600154610171906001600160a01b031681565b6101c761020e366004612132565b61156c565b600254610171906001600160a01b031681565b61022e611579565b60405161014191906121e6565b61022e611607565b6101c761025136600461222e565b611699565b61025f60045481565b604051908152602001610141565b6101c761027b36600461222e565b6116c3565b6101c761028e366004612261565b611739565b60008080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103175760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b60408051632d96897560e11b81523091635b2d12ea9161034a918c919082019060c0830190610100840190600401612336565b602060405180830381865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b9190612368565b6103c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161030e565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610406918b9182019060c083019061010084019060040161238a565b602060405180830381865afa158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190612368565b6104935760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f66000000000000000000604482015260640161030e565b6104a588610100018861010001611751565b6104b361010089013561068e565b6104ff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161030e565b600061051289610100016005600a611832565b90506003604051610523919061240b565b60405180910390208160405160200161053c9190612481565b604051602081830303815290604052805190602001201461059f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161030e565b6105c1600b60fa1b60066105ba6101008d0160176019611832565b919061190d565b96506004546105e260006105dc8c61010001600a600c611832565b90611aea565b6105ec91906124b3565b955061042089013592506106076101008a01600c6012611832565b6040516020016106179190612481565b604051602081830303815290604052805190602001209450610640896101000160126017611832565b6040516020016106509190612481565b60408051808303601f19018152919052805160209091012093506106786104408a0135611b02565b5094979396929550909350916104609091013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190612368565b92915050565b60006113a6565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061073a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610770576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806107a1576000805260206000f35b5050505050565b7f23fe0119e0d86d98fef3296d3987953338f409989ee0d25c2e6f65f1ac69a0ce85527f01c6e591e4f2be7957d3c4d6e6a4bc56531b0b5853fae4cbbb9979dc3fb4054760208601526000608086018661084587357f22ab60c4aec5bc92a88fb158ea2f8650a673a4c6b22d1129ac1d00be9390f9b47f0c6c5c5e9cd44842f22ea4148cb673cd03856d7a1470fcbadeedfc16e4fdeada8461073d565b61089560208801357f101cf9529c1420aba7bd89319bbe0a2d90c912fdfc582d65c26d563341eb4e047f0ca42b1575a9a329c09d91b81f8b84c130808565de3467e32e109ac740ab9b6e8461073d565b6108e560408801357f089d945945e413f66f09d7d05eced536c1b1c76af63307988e5602c5fa18a2647f19e936c17e4e70f8d4a74a0c5d3c0b6ca8882523a94617e4a8eed449efe2d63e8461073d565b61093560608801357f2a7d9db6e93fe306547d1509e3152be1ad664b5a56700e6d01e1b0ad177562227f2570aa6d600dcb3626e9bdedd465d8f4d67f1662ea70e514fcccdc37dbeb30628461073d565b61098560808801357f22441bd33d5f7d352f09f043001ead6d8dce01fe4f1e06f6d52a3ec025a50e477f2f62d4ab058625a42df361a06e432ea669df600b018d57a3cc9e06d3b32352908461073d565b6109d560a08801357f2bd98244eb34f527cddde82bc7ecd3d82572341b6723c7e204b4b13b4483a0067f2bc1835204d308c4560a3db92bffeb83d72eee6fcc8c286c5f46b11ff20819718461073d565b610a2560c08801357f076ee4439bed6ba9c0363880a2a678899b2ca3f4a8b60c954e4ef908658a959a7f1a1de9f43ef35c391fcc525fe1350dbf6158cb4b977402b318e7a69646b4d9038461073d565b610a7560e08801357f0ff1e251abd89fcb1a7d7933e30545ed1d70fdaa8aefaf38e4f0a8d7a03bc41e7f08162360d15cfd2c53d5ed4f2a5ced2cddc4ca82ce6094b2155d53bc934317798461073d565b610ac66101008801357f2675a0ba71a63d06d61dd6379583ad1c910138768349d0028ab3341a9ddd97c67f061570d382129dff2bac14d938281bc6c434663611bffd8ebae841e89b3a91438461073d565b610b176101208801357f2e7ee0dfebd18a5dce23ca2c9281caadd1e64d18a299c052a315130f01acd7857f198da0e315822dc430064816fa30bff8dc44b12dcaf3bb1f7969e1ed3d1f123c8461073d565b610b676101408801357f1f1dbe73fe0b80437353249d8a85e029446996809fc833c20d4f2ce5298fc0397e7795fe454ffc3f3e74f9da55cdce061a5e0b00097ddc642b0ce7246bbd5c468461073d565b610bb86101608801357f12273cff18addf941caf2bfcca416d3ff48b65a5c23f2470379ccc91c1a1988a7f0b125c630f757966a1277c4ba48ee8f917dc2355c9b0ae1e344611c66de4f6c08461073d565b610c096101808801357f128f40c4e75ffaad2b197a6a59752a2a47c91a4cca174dc0efab9f0286c52d5d7f1d63fa7d27b65bae515baf04e661a140a4f6c0429067223beb3b7ab4c36d2ffe8461073d565b610c5a6101a08801357f2ca69ffae97a540015d7c340ba9d751bdddd22c1226e850f47b86fba3bc9c4ee7f2776a05d98ee9432c323b360cae02e275acf2a8d0af78ac0fee9e017c63c60c98461073d565b610cab6101c08801357f2b6af433c35897a0f9458c8c8dc529ae00bd2f485e0fd1eb1aa9c33510d8b5af7f26668060050e6db758e60e3b944075a05b1708c45c0a7b74609ddcf2e78396658461073d565b610cfc6101e08801357f087083b6345e3b3a634f91ebac116834623185ce32bee1b57b80bf249e5082dc7f2b742c812404bde4218c3c0d3830669c3bdaf023717c8c6e16342dcd7fae8dcb8461073d565b610d4d6102008801357f0613ef91c62c4fe8695af930288e88015cb0db3f9421f9bd29da3675aa6403177f110e8f6a568e37356c1f05b9f063142461b41e4869e76784d10ef0c52c1422308461073d565b610d9e6102208801357f14420a530bff2b7dbc9956771e90b019ca0035fcd22623c064145c7de21d64127f029819dce317f0ed390d1e4525fb803cd0594a5fc1cd708cc118bf8b46d906d78461073d565b610def6102408801357f08d51bc7ed9e0fa0a16095a14d1f08e59a542a37610dc382c154dba6021eb65e7f12f54cc9fc215b9665fcec7f0ea84278ccfdec9ce0721b3d54c8aad79dadaf2e8461073d565b610e406102608801357f1a5601de789a9b9676133a0ca9c5db25d5a96113c9c975e7a102cec68848a4b07f23fd9af7d041dbb03d11a3431c72b5a460a1d36c9c8794d2d3b76093d6dbba3f8461073d565b610e916102808801357f1f20e53fb46193851de0c5290fe68ef454d2c0aee9d718d3a26dc1b9a0d1fbf37f0119d365c9bd85d15ae0cfd05222329bedbd2b5af1152bb01a06fd6e927d72df8461073d565b610ee16102a08801357e3c7a3b50dc6c29bbecafaf5c20327657603b3f5cdf7e1cfe0b9a872c8937557f0573d6da8283a957bede0e1d662a7826475a7f3503b61ce6731cda9e05b9061f8461073d565b610f326102c08801357f17899f38cd9c61264b3a0b6bd8849bccb8d7752a18e26ac11d755f3dde8b61097f169a46074f60fe92e7e2f51c1cb9f1ef137bd9a056c3391eb9f6a7c656ce6f3e8461073d565b610f836102e08801357f288723a08481f3ba64b49862bb693af72875ed303cba67d71d79ac19605ebb067f100e99c7a85374b98df7f70dee671d985be259cf23b941d97c9903742aec653d8461073d565b610fd46103008801357f094162cf3f32de9b93a59ef13c9a33ac297fd5b803cd9a6b7c888510375d67207f1df59b2a12d7a478bb3abc00b26d86973722485658d0466c5bcb7136b8d00ee88461073d565b6110256103208801357f26d2dd8bcb721ddddf7a89fce7a8174360bfde331abacdcc4e95a544437623c97f222355ee8b12fd4b953be489ce7ac9e0c45c41ae9f9a3e818018a2ef27c8fe868461073d565b6110766103408801357f0ac9b2a5b59662bfe8d866a43ff5280402ceaff7bf4d0d3321bd5cffb8238cbf7f118feff08485cffea53d0e5750f0cfad7d5f6415985d002708c0ba4cdb806d778461073d565b6110c66103608801357f1ef601660e69a4d6b550f31e03b229bc114ae46a0dbc611a88c5f2b9da5d67637e2b50469bb49cfb2b946d134a99c282cb9ae18a70ce144bf7bbbe74be9e5cd48461073d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f2421d5e11b841e97bba6ebf4f6c52f5e7068b4cac03cfe14b850dab7b03cb7416102808201527f16cda08f8f6fd30da8c340e73ad4829d593f0b6e9adddda9cf9e7992704f60b46102a08201527f29b8959bb7032f74cf68b6fd6b3ae134f46034af7754bff13dd000fb177fad8f6102c08201527f2e43943d84a2aa708872610f2ad74308fe43ac6599953f160297ad9fdac814776102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526113be6000840135610709565b6113cb6020840135610709565b6113d86040840135610709565b6113e56060840135610709565b6113f26080840135610709565b6113ff60a0840135610709565b61140c60c0840135610709565b61141960e0840135610709565b611427610100840135610709565b611435610120840135610709565b611443610140840135610709565b611451610160840135610709565b61145f610180840135610709565b61146d6101a0840135610709565b61147b6101c0840135610709565b6114896101e0840135610709565b611497610200840135610709565b6114a5610220840135610709565b6114b3610240840135610709565b6114c1610260840135610709565b6114cf610280840135610709565b6114dd6102a0840135610709565b6114eb6102c0840135610709565b6114f96102e0840135610709565b611507610300840135610709565b611515610320840135610709565b611523610340840135610709565b611531610360840135610709565b61153f610380840135610709565b61154c818486888a6107a8565b90508060005260206000f35b611560611c16565b61156a6000611c70565b565b611574611c16565b600455565b60038054611586906123d1565b80601f01602080910402602001604051908101604052809291908181526020018280546115b2906123d1565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b505050505081565b606060038054611616906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906123d1565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b6116a1611c16565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6116cb611c16565b6001600160a01b0381166117305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030e565b61073a81611c70565b611741611c16565b600361174d8282612515565b5050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e085015285850135610100850152908501356101208085019190915284518085039091018152610140909301909352815191012080821461182c5760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b606482015260840161030e565b50505050565b6060600061184084846125d5565b60ff1667ffffffffffffffff81111561185b5761185b61224b565b604051908082528060200260200182016040528015611884578160200160208202803683370190505b50905060ff84165b8360ff168110156118e9578581601c81106118a9576118a96123bb565b6020020135826118bc60ff8816846125ee565b815181106118cc576118cc6123bb565b6020908102919091010152806118e181612601565b91505061188c565b50611904600782516118fb919061261a565b82906007611cc0565b95945050505050565b600083818080805b8451811015611a6357603060f81b858281518110611935576119356123bb565b01602001516001600160f81b031916108015906119765750603960f81b858281518110611964576119646123bb565b01602001516001600160f81b03191611155b156119b957603085828151811061198f5761198f6123bb565b01602001516119a1919060f81c6125ee565b6119ac85600a61261a565b6119b691906124b3565b93505b81156119cd57826119c981612601565b9350505b876001600160f81b0319168582815181106119ea576119ea6123bb565b01602001516001600160f81b03191603611a51578115611a4c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161030e565b600191505b80611a5b81612601565b915050611915565b5085821115611abf5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161030e565b611ac982876125ee565b611ad490600a612715565b611ade908461261a565b98975050505050505050565b6000611afb83601760f91b8461190d565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190612368565b15611bbc5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161030e565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015611c0257600080fd5b505af11580156107a1573d6000803e3d6000fd5b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651611cd2919061261a565b67ffffffffffffffff811115611cea57611cea61224b565b6040519080825280601f01601f191660200182016040528015611d14576020820181803683370190505b5090506000805b87518161ffff161015611ecb576000888261ffff1681518110611d4057611d406123bb565b6020026020010151905060008767ffffffffffffffff811115611d6557611d6561224b565b604051908082528060200260200182016040528015611d8e578160200160208202803683370190505b50905060005b88811015611de057611da781600861261a565b83901c828281518110611dbc57611dbc6123bb565b60ff9092166020928302919091019091015280611dd881612601565b915050611d94565b5060005b88811015611eb5576000828281518110611e0057611e006123bb565b602002602001015160ff16905080600014611e78578060f81b878781518110611e2b57611e2b6123bb565b60200101906001600160f81b031916908160001a90535085611e4c81612601565b9650611e5b9050600289612721565b60ff16600003611e7357611e70600189612751565b97505b611e9b565b611e83600289612721565b60ff16600103611e9b57611e98600189612751565b97505b5060089290921c9180611ead81612601565b915050611de4565b5050508080611ec39061276a565b915050611d1b565b5060018360ff161015611f6c5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161030e565b85811115611fda5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161030e565b6000611ade838051606090829060005b825181101561203557828181518110612005576120056123bb565b01602001516001600160f81b03191660000361202357809150612035565b8061202d81612601565b915050611fea565b5060008167ffffffffffffffff8111156120515761205161224b565b6040519080825280601f01601f19166020018201604052801561207b576020820181803683370190505b50905060005b828110156120e15783818151811061209b5761209b6123bb565b602001015160f81c60f81b8282815181106120b8576120b86123bb565b60200101906001600160f81b031916908160001a905350806120d981612601565b915050612081565b50949350505050565b6000808284036106008112156120ff57600080fd5b6104808082121561210f57600080fd5b84935061018061047f198301121561212657600080fd5b92959390920193505050565b60006020828403121561214457600080fd5b5035919050565b80604081018310156106fc57600080fd5b60008060008061048080868803121561217457600080fd5b61217e878761214b565b945060c086018781111561219157600080fd5b6040870194506121a1888261214b565b9350508681870111156121b357600080fd5b50929591945092610100019150565b60005b838110156121dd5781810151838201526020016121c5565b50506000910152565b60208152600082518060208401526122058160408501602087016121c2565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073a57600080fd5b60006020828403121561224057600080fd5b8135611afb81612219565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561227357600080fd5b813567ffffffffffffffff8082111561228b57600080fd5b818401915084601f83011261229f57600080fd5b8135818111156122b1576122b161224b565b604051601f8201601f19908116603f011681019083821181831017156122d9576122d961224b565b816040528281528760208487010111156122f257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b600281101561182c57604080838637938401939190910190600101612316565b6104808101604086833761234d6040830186612312565b60408460c08401376103808361010084013795945050505050565b60006020828403121561237a57600080fd5b81518015158114611afb57600080fd5b610180810160408683376123a16040830186612312565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612419816123d1565b60018281168015612431576001811461244657612475565b60ff1984168752821515830287019450612475565b8760005260208060002060005b8581101561246c5781548a820152908401908201612453565b50505082870194505b50929695505050505050565b600082516124938184602087016121c2565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106fc576106fc61249d565b601f82111561251057600081815260208120601f850160051c810160208610156124ed5750805b601f850160051c820191505b8181101561250c578281556001016124f9565b5050505b505050565b815167ffffffffffffffff81111561252f5761252f61224b565b6125438161253d84546123d1565b846124c6565b602080601f83116001811461257857600084156125605750858301515b600019600386901b1c1916600185901b17855561250c565b600085815260208120601f198616915b828110156125a757888601518255948401946001909101908401612588565b50858210156125c55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156106fc576106fc61249d565b818103818111156106fc576106fc61249d565b6000600182016126135761261361249d565b5060010190565b80820281158282048414176106fc576106fc61249d565b600181815b8085111561266c5781600019048211156126525761265261249d565b8085161561265f57918102915b93841c9390800290612636565b509250929050565b600082612683575060016106fc565b81612690575060006106fc565b81600181146126a657600281146126b0576126cc565b60019150506106fc565b60ff8411156126c1576126c161249d565b50506001821b6106fc565b5060208310610133831016604e8410600b84101617156126ef575081810a6106fc565b6126f98383612631565b806000190482111561270d5761270d61249d565b029392505050565b6000611afb8383612674565b600060ff83168061274257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156106fc576106fc61249d565b600061ffff8083168181036127815761278161249d565b600101939250505056fea2646970667358221220b68d775d23695c7993f4e8191809ed6a550eea8e913da4fdcf02358fa5577a5c64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3392,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3566\"\n      },\n      {\n        \"astId\": 3395,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3771\"\n      },\n      {\n        \"astId\": 3397,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3399,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 6463,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"bodyHashVerifier\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_contract(IGarantiBodySuffixHashVerifier)6841\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiBodySuffixHashVerifier)6841\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3566\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3771\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/HDFCManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0xd4257D0d4224Da79da4909b99458F9A7b6Da8195\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x51c48f8089e532a563fa75b757618287a7bbe33e35f32ece68ca0dae78cf53bc\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xd4257D0d4224Da79da4909b99458F9A7b6Da8195\",\n    \"transactionIndex\": 5,\n    \"gasUsed\": \"608914\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000010000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x0cd05a8362d34fb1b96f78499e512a360104afbf7086c762b3e8447bd400975b\",\n    \"transactionHash\": \"0x51c48f8089e532a563fa75b757618287a7bbe33e35f32ece68ca0dae78cf53bc\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 5,\n        \"blockNumber\": 9279038,\n        \"transactionHash\": \"0x51c48f8089e532a563fa75b757618287a7bbe33e35f32ece68ca0dae78cf53bc\",\n        \"address\": \"0xd4257D0d4224Da79da4909b99458F9A7b6Da8195\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 4,\n        \"blockHash\": \"0x0cd05a8362d34fb1b96f78499e512a360104afbf7086c762b3e8447bd400975b\"\n      }\n    ],\n    \"blockNumber\": 9279038,\n    \"cumulativeGasUsed\": \"877554\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x06b0ad846d386f60e777f1d11b82922c6bb694216eed9c23535796ac404a7dfa\",\n      \"0x1c1b5a203a9f1f15f6172969b9359e6a7572001de09471efd1586a67f7956fd8\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3574,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/HDFCRamp.json",
    "content": "{\n  \"address\": \"0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"_poseidon3\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"_poseidon6\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[8]\",\n              \"name\": \"upiId\",\n              \"type\": \"uint256[8]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[8]\",\n          \"name\": \"_upiId\",\n          \"type\": \"uint256[8]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon3\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon6\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x11e8f46ff07287a4c8cd0532c3b13aae3c53c4e0f2d2c06b1fb31b9204918ce4\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a\",\n    \"transactionIndex\": 3,\n    \"gasUsed\": \"3774637\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000500000000000000000004000000000000000000000000000000080000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xeb8e3f66e1baa47e07045bacc3812e1b5d9598ad385485c45de2894faa0adade\",\n    \"transactionHash\": \"0x11e8f46ff07287a4c8cd0532c3b13aae3c53c4e0f2d2c06b1fb31b9204918ce4\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 3,\n        \"blockNumber\": 9279035,\n        \"transactionHash\": \"0x11e8f46ff07287a4c8cd0532c3b13aae3c53c4e0f2d2c06b1fb31b9204918ce4\",\n        \"address\": \"0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 11,\n        \"blockHash\": \"0xeb8e3f66e1baa47e07045bacc3812e1b5d9598ad385485c45de2894faa0adade\"\n      },\n      {\n        \"transactionIndex\": 3,\n        \"blockNumber\": 9279035,\n        \"transactionHash\": \"0x11e8f46ff07287a4c8cd0532c3b13aae3c53c4e0f2d2c06b1fb31b9204918ce4\",\n        \"address\": \"0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 12,\n        \"blockHash\": \"0xeb8e3f66e1baa47e07045bacc3812e1b5d9598ad385485c45de2894faa0adade\"\n      }\n    ],\n    \"blockNumber\": 9279035,\n    \"cumulativeGasUsed\": \"4145262\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"0xC87eFE0445fbA1FDb8a73553F293272B7bE91c64\",\n    \"0xcEC79FdDBaA7C9cfed2E9AD23Bb272c71e7E2144\",\n    \"20000000\",\n    \"100000000\",\n    \"86400\",\n    \"43200\",\n    \"0\",\n    \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"_poseidon3\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"_poseidon6\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"_upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon3\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon6\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the idHash being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\",\\\"_upiId\\\":\\\"The packed upi ID of the depositor\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the idHash being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a idHash from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":\\\"HDFCRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon3.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon3 {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x39cd67d4a7ef93e243c77b7c8a40c3842c060a7f444b0b2c875bce7d8d0c24fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IPoseidon6.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon6 {\\\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9609bcff68e45a22b551bf5f42a5ea62ea0b33e433a89f7c89a6b0714df09229\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon3 } from \\\\\\\"../../interfaces/IPoseidon3.sol\\\\\\\";\\\\nimport { IPoseidon6 } from \\\\\\\"../../interfaces/IPoseidon6.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the idHash\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 idHash;                     // Hash of payment processor id\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[8] upiId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's idHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon3 _poseidon3,\\\\n        IPoseidon6 _poseidon6,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon3 = _poseidon3;\\\\n        poseidon6 = _poseidon6;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        IHDFCSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\\\\\"Account already associated with idHash\\\\\\\");\\\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].idHash = idHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, idHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _upiId            The packed upi ID of the depositor\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[8] memory _upiId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        AccountInfo storage account = accounts[msg.sender];\\\\n        account.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            upiId: _upiId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 idHash = accounts[msg.sender].idHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorIdHash != idHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[idHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a idHash from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _idHash,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            IHDFCSendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 idHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return idHash;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\\\n     */\\\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\\\n        uint256[6] memory temp1;\\\\n        uint256[3] memory temp2;\\\\n\\\\n        for (uint256 i = 0; i < 6; ++i) {\\\\n            temp1[i] = _upiId[i];\\\\n        }\\\\n        temp2[0] = poseidon6.poseidon(temp1);\\\\n        temp2[1] = _upiId[6];\\\\n        temp2[2] = _upiId[7];\\\\n\\\\n        return bytes32(poseidon3.poseidon(temp2));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xae7d672b1734e0e13737762b6317bc5de9f2a4070b1b1af2d40a2ce74ed3957f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b506040516200438c3803806200438c8339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0389811660805288811660a05287811660c05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c051614094620002f860003960008181610386015261315701526000818161067901526131f40152600081816103d80152818161175901528181611dbb01528181612d490152612df801526140946000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd6102923660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de3660046135d5565b610799565b005b6102e36102f33660046135f9565b6107f6565b6102bd6103063660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e36103453660046135f9565b610928565b6102e36103583660046135f9565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce366004613612565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e361040836600461375a565b610f47565b6102e361041b3660046135f9565b610fd4565b61043361042e3660046135d5565b611075565b6040516102c79190613813565b6102e361044e366004613857565b6110ee565b6102bd60095481565b61046f61046a3660046135d5565b611181565b6040516102c79190613958565b6102e361048a3660046135f9565b6113f1565b6102bd60075481565b6102e36104a63660046135f9565b611490565b6102e36104b93660046139e4565b6115db565b6102e36117ce565b61046f6104d43660046139e4565b6117e2565b6104ec6104e73660046135d5565b6119ea565b6040516102c79190613a8a565b6000546001600160a01b03166103a8565b6105536105183660046135f9565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e36105943660046135f9565b611a84565b6102e36105a7366004613ae2565b611b1b565b6102e36105ba3660046135f9565b611e77565b6105d26105cd3660046135f9565b611f7e565b6040516102c79190613b70565b6102bd600a5481565b61062f6105f63660046135f9565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f3660046135d5565b61206b565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b83565b612123565b6102e36106bc3660046135f9565b6121e1565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613bf8565b61231f565b6040516102c79190613c6d565b6102e36107273660046135d5565b612484565b6002546103a8906001600160a01b031681565b6102e361074d3660046135d5565b6124da565b610371610760366004613cfd565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a1612553565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613d29565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b610930612553565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd612553565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613d29565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d76565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d5984886125ad565b90508583600a01541015610e0e57600080610d7389612618565b91509150878186600a0154610d889190613d76565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd785836127c0565b8085600a016000828254610deb9190613d76565b925050819055508085600b016000828254610e069190613d89565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d89565b925050819055508583600b016000828254610ed09190613d76565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f5887878787612822565b925092509250610f688282612b28565b826060015182600b016000828254610f809190613d89565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612c01565b610fcb8184612cec565b50505050505050565b610fdc612553565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f6612553565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff8111156112045761120461364b565b60405190808252806020026020018201604052801561123d57816020015b61122a6133ca565b8152602001906001900390816112225790505b50915060005b81518110156113ea57600082828151811061126057611260613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a83612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516113b69190613d76565b8152508685815181106113cb576113cb613d9c565b6020026020010181905250505050806113e390613db2565b9050611243565b5050919050565b6113f9612553565b66b1a2bc2ec5000081111561145b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166115105760405162461bcd60e51b815260040161082290613dcb565b80546001600160a01b031633146115695760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115738184612b28565b816060015181600b01600082825461158b9190613d89565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516115cc9082612c01565b6115d68383612cec565b505050565b6000805b825181101561173c5760008382815181106115fc576115fc613d9c565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116745760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061168084612618565b9150915061168e83836127c0565b8083600a015461169e9190613d76565b6116a89087613d76565b95508083600b0160008282546116be9190613d89565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611705908590613d76565b60405190815260200160405180910390a36000600a8401556117278484612c01565b505050508061173590613db2565b90506115df565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190613dfa565b6117d6612553565b6117e06000612eca565b565b6060815167ffffffffffffffff8111156117fe576117fe61364b565b60405190808252806020026020018201604052801561183757816020015b6118246133ca565b81526020019060019003908161181c5790505b50905060005b82518110156119e457600083828151811061185a5761185a613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116118ab575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561193e57602002820191906000526020600020905b81548152602001906001019080831161192a575b5050505050815250509050600061195483612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516119b09190613d76565b8152508585815181106119c5576119c5613d9c565b6020026020010181905250505050806119dd90613db2565b905061183d565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a7457602002820191906000526020600020905b815481526020019060010190808311611a60575b5050505050815250509050919050565b611a8c612553565b80600003611ae65760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611b475760405162461bcd60e51b815260040161082290613d29565b33600090815260046020526040902060010154600511611ba95760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611c1a5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c785760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c8d670de0b6b3a764000085613e1c565b611c979190613e49565b600d80549192506000919082611cac83613db2565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611d53919083019060086133f6565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d9791600d840191602090910190613434565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e319190613dfa565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611ea35760405162461bcd60e51b815260040161082290613d29565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f125760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f489060020183612f1a565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f8661346e565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611fca575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a745760200282019190600052602060002090815481526020019060010190808311611a60575050505050815250509050919050565b612073612553565b6001600160a01b0381166120d55760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561218f5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061219d85858585613043565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122565760405162461bcd60e51b815260040161082290613dcb565b336000908152600460205260408082205483516001600160a01b03168352912054146122c45760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b60408082015160009081526005602052206122df8184612b28565b816060015181600a0160008282546122f79190613d76565b90915550506060820151600b82018054600090612315908490613d89565b9091555050505050565b606060008267ffffffffffffffff81111561233c5761233c61364b565b60405190808252806020026020018201604052801561237557816020015b6123626134ba565b81526020019060019003908161235a5790505b50905060005b8381101561247a57600085858381811061239757612397613d9c565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061241657612416613d9c565b6020908102929092013583525081810184905283516001600160a01b03166000908152600490915260409081902054910152845185908590811061245c5761245c613d9c565b602002602001018190525050508061247390613db2565b905061237b565b5090505b92915050565b61248c612553565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b6124e2612553565b6001600160a01b0381166125475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b61255081612eca565b50565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506126107f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613e5d565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561267557602002820191906000526020600020905b815481526020019060010190808311612661575b50505050509050805167ffffffffffffffff8111156126965761269661364b565b6040519080825280602002602001820160405280156126bf578160200160208202803683370190505b50925060005b81518110156127b9576000600660008484815181106126e6576126e6613d9c565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161275991613d76565b10156127a85782828151811061277157612771613d9c565b602002602001015185838151811061278b5761278b613d9c565b602090810291909101015260608101516127a59085613d76565b93505b506127b281613db2565b90506126c5565b5050915091565b60005b81518110156115d6576000801b8282815181106127e2576127e2613d9c565b602002602001015114612812576128128383838151811061280557612805613d9c565b6020026020010151612b28565b61281b81613db2565b90506127c3565b61282a6134e2565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128869190600401613ec2565b60a0604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613f31565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166129555760405162461bcd60e51b815260040161082290613dcb565b85826080015111156129b45760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b6040805161010081019182905286916129f09190600185019060089082845b8154815260200190600101908083116129d35750505050506130e3565b14612a3d5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612aa55760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612ac29190613e1c565b612acc9190613e49565b871015612b145760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612bcc600d840183612f1a565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612c179190613d76565b9050806000036115d65781546001600160a01b03166000908152600460205260409020612c479060010184613272565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612cb56001830182613523565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612ce59190613532565b5050505050565b6000600b54600014612db857670de0b6b3a7640000600b548360600151612d139190613e1c565b612d1d9190613e49565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613dfa565b505b6000818360600151612dca9190613d89565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e659190613dfa565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f7684805480602002602001604051908101604052809291908181526020018280548015612f6b57602002820191906000526020600020905b815481526020019060010190808311612f57575b505050505084613317565b9150915080612fbf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612fd090600190613d89565b905080831461301557848181548110612feb57612feb613d9c565b906000526020600020015485848154811061300857613008613d9c565b6000918252602090912001555b8480548061302557613025613f71565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161309691600401613f87565b6020604051808303816000875af11580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613fec565b9695505050505050565b60006130ed613550565b6130f561356e565b60005b600681101561313f5784816008811061311357613113613d9c565b602002015183826006811061312a5761312a613d9c565b602002015261313881613db2565b90506130f8565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a7889061318c908590600401614005565b602060405180830381865afa1580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd9190613fec565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e890613231908490600401614036565b602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613fec565b6000806132ce848054806020026020016040519081016040528092919081815260200182805480156132c357602002820191906000526020600020905b8154815260200190600101908083116132af575b50505050508461337a565b9150915080612fbf5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b81811015613367578486828151811061333b5761333b613d9c565b602002602001015103613355579250600191506133739050565b8061335f81613db2565b915050613320565b50600019600092509250505b9250929050565b81516000908190815b81811015613367578486828151811061339e5761339e613d9c565b6020026020010151036133b8579250600191506133739050565b806133c281613db2565b915050613383565b60408051608081018252600080825260208201529081016133e961346e565b8152602001600081525090565b8260088101928215613424579160200282015b82811115613424578251825591602001919060010190613409565b5061343092915061358c565b5090565b8280548282559060005260206000209081019282156134245791602002820182811115613424578251825591602001919060010190613409565b6040518060e0016040528060006001600160a01b031681526020016134916135a1565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134d56134e2565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5061255090600881019061358c565b5080546000825590600052602060002090810190612550919061358c565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b80821115613430576000815560010161358d565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b038116811461255057600080fd5b6000602082840312156135e757600080fd5b81356135f2816135c0565b9392505050565b60006020828403121561360b57600080fd5b5035919050565b60008060006060848603121561362757600080fd5b83359250602084013591506040840135613640816135c0565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156136845761368461364b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364b565b604052919050565b600082601f8301126136cc57600080fd5b6136d4613661565b8060408401858111156136e657600080fd5b845b818110156137005780358452602093840193016136e8565b509095945050505050565b600082601f83011261371c57600080fd5b613724613661565b80608084018581111561373657600080fd5b845b818110156137005761374a87826136bb565b8452602090930192604001613738565b6000806000806102e080868803121561377257600080fd5b61377c87876136bb565b945061378b876040880161370b565b935061379a8760c088016136bb565b92508661011f8701126137ac57600080fd5b6040516101e0810181811067ffffffffffffffff821117156137d0576137d061364b565b6040529086019080888311156137e557600080fd5b61010088015b838110156138035780358252602091820191016137eb565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561384b5783518352928401929184019160010161382f565b50909695505050505050565b6000806040838503121561386a57600080fd5b8235613875816135c0565b91506020830135613885816135c0565b809150509250929050565b600081518084526020808501945080840160005b838110156138c0578151875295820195908201906001016138a4565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b6008811015613907578251825291830191908301906001016138ea565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a086015261394f82860182613890565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156139d657603f19898403018552815160808151855288820151898601528782015181898701526139b5828701826138cb565b6060938401519690930195909552509487019492509086019060010161397f565b509098975050505050505050565b600060208083850312156139f757600080fd5b823567ffffffffffffffff80821115613a0f57600080fd5b818501915085601f830112613a2357600080fd5b813581811115613a3557613a3561364b565b8060051b9150613a4684830161368a565b8181529183018401918481019088841115613a6057600080fd5b938501935b83851015613a7e57843582529385019390850190613a65565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613ad75783518252928401926001929092019190840190613ab7565b509695505050505050565b60008060006101408486031215613af857600080fd5b84601f850112613b0757600080fd5b60405161010080820182811067ffffffffffffffff82111715613b2c57613b2c61364b565b60405285018187821115613b3f57600080fd5b865b82811015613b59578035825260209182019101613b41565b509197903596506101209590950135949350505050565b6020815260006135f260208301846138cb565b6000806000806101a0808688031215613b9b57600080fd5b613ba587876136bb565b9450613bb4876040880161370b565b9350613bc38760c088016136bb565b92508661011f870112613bd557600080fd5b60405160a0810181811067ffffffffffffffff821117156137d0576137d061364b565b60008060208385031215613c0b57600080fd5b823567ffffffffffffffff80821115613c2357600080fd5b818501915085601f830112613c3757600080fd5b813581811115613c4657600080fd5b8660208260051b8501011115613c5b57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613cf0578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c8a565b5091979650505050505050565b60008060408385031215613d1057600080fd5b8235613d1b816135c0565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561247e5761247e613d60565b8181038181111561247e5761247e613d60565b634e487b7160e01b600052603260045260246000fd5b600060018201613dc457613dc4613d60565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613e0c57600080fd5b815180151581146135f257600080fd5b808202811582820484141761247e5761247e613d60565b634e487b7160e01b600052601260045260246000fd5b600082613e5857613e58613e33565b500490565b600082613e6c57613e6c613e33565b500690565b8060005b600281101561303d578151845260209384019390910190600101613e75565b8060005b600281101561303d57613eac848351613e71565b6040939093019260209190910190600101613e98565b60006102e082019050613ed6828451613e71565b602080840151613ee96040850182613e94565b506040840151613efc60c0850182613e71565b506060840151610100840160005b600f811015613f2757825182529183019190830190600101613f0a565b5050505092915050565b600080600080600060a08688031215613f4957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f9b828451613e71565b602080840151613fae6040850182613e94565b506040840151613fc160c0850182613e71565b506060840151610100840160005b6005811015613f2757825182529183019190830190600101613fcf565b600060208284031215613ffe57600080fd5b5051919050565b60c08101818360005b600681101561402d57815183526020928301929091019060010161400e565b50505092915050565b60608101818360005b600381101561402d57815183526020928301929091019060010161403f56fea2646970667358221220ce4b5ac012d074f8459b3087900f248a83a7859401303ac0546d4eb7feb3ba5064736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd6102923660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de3660046135d5565b610799565b005b6102e36102f33660046135f9565b6107f6565b6102bd6103063660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e36103453660046135f9565b610928565b6102e36103583660046135f9565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce366004613612565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e361040836600461375a565b610f47565b6102e361041b3660046135f9565b610fd4565b61043361042e3660046135d5565b611075565b6040516102c79190613813565b6102e361044e366004613857565b6110ee565b6102bd60095481565b61046f61046a3660046135d5565b611181565b6040516102c79190613958565b6102e361048a3660046135f9565b6113f1565b6102bd60075481565b6102e36104a63660046135f9565b611490565b6102e36104b93660046139e4565b6115db565b6102e36117ce565b61046f6104d43660046139e4565b6117e2565b6104ec6104e73660046135d5565b6119ea565b6040516102c79190613a8a565b6000546001600160a01b03166103a8565b6105536105183660046135f9565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e36105943660046135f9565b611a84565b6102e36105a7366004613ae2565b611b1b565b6102e36105ba3660046135f9565b611e77565b6105d26105cd3660046135f9565b611f7e565b6040516102c79190613b70565b6102bd600a5481565b61062f6105f63660046135f9565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f3660046135d5565b61206b565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b83565b612123565b6102e36106bc3660046135f9565b6121e1565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613bf8565b61231f565b6040516102c79190613c6d565b6102e36107273660046135d5565b612484565b6002546103a8906001600160a01b031681565b6102e361074d3660046135d5565b6124da565b610371610760366004613cfd565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a1612553565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613d29565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b610930612553565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd612553565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613d29565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d76565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d5984886125ad565b90508583600a01541015610e0e57600080610d7389612618565b91509150878186600a0154610d889190613d76565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd785836127c0565b8085600a016000828254610deb9190613d76565b925050819055508085600b016000828254610e069190613d89565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d89565b925050819055508583600b016000828254610ed09190613d76565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f5887878787612822565b925092509250610f688282612b28565b826060015182600b016000828254610f809190613d89565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612c01565b610fcb8184612cec565b50505050505050565b610fdc612553565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f6612553565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff8111156112045761120461364b565b60405190808252806020026020018201604052801561123d57816020015b61122a6133ca565b8152602001906001900390816112225790505b50915060005b81518110156113ea57600082828151811061126057611260613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a83612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516113b69190613d76565b8152508685815181106113cb576113cb613d9c565b6020026020010181905250505050806113e390613db2565b9050611243565b5050919050565b6113f9612553565b66b1a2bc2ec5000081111561145b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166115105760405162461bcd60e51b815260040161082290613dcb565b80546001600160a01b031633146115695760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115738184612b28565b816060015181600b01600082825461158b9190613d89565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516115cc9082612c01565b6115d68383612cec565b505050565b6000805b825181101561173c5760008382815181106115fc576115fc613d9c565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116745760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061168084612618565b9150915061168e83836127c0565b8083600a015461169e9190613d76565b6116a89087613d76565b95508083600b0160008282546116be9190613d89565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611705908590613d76565b60405190815260200160405180910390a36000600a8401556117278484612c01565b505050508061173590613db2565b90506115df565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190613dfa565b6117d6612553565b6117e06000612eca565b565b6060815167ffffffffffffffff8111156117fe576117fe61364b565b60405190808252806020026020018201604052801561183757816020015b6118246133ca565b81526020019060019003908161181c5790505b50905060005b82518110156119e457600083828151811061185a5761185a613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116118ab575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561193e57602002820191906000526020600020905b81548152602001906001019080831161192a575b5050505050815250509050600061195483612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516119b09190613d76565b8152508585815181106119c5576119c5613d9c565b6020026020010181905250505050806119dd90613db2565b905061183d565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a7457602002820191906000526020600020905b815481526020019060010190808311611a60575b5050505050815250509050919050565b611a8c612553565b80600003611ae65760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611b475760405162461bcd60e51b815260040161082290613d29565b33600090815260046020526040902060010154600511611ba95760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611c1a5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c785760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c8d670de0b6b3a764000085613e1c565b611c979190613e49565b600d80549192506000919082611cac83613db2565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611d53919083019060086133f6565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d9791600d840191602090910190613434565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e319190613dfa565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611ea35760405162461bcd60e51b815260040161082290613d29565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f125760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f489060020183612f1a565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f8661346e565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611fca575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a745760200282019190600052602060002090815481526020019060010190808311611a60575050505050815250509050919050565b612073612553565b6001600160a01b0381166120d55760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561218f5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061219d85858585613043565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122565760405162461bcd60e51b815260040161082290613dcb565b336000908152600460205260408082205483516001600160a01b03168352912054146122c45760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b60408082015160009081526005602052206122df8184612b28565b816060015181600a0160008282546122f79190613d76565b90915550506060820151600b82018054600090612315908490613d89565b9091555050505050565b606060008267ffffffffffffffff81111561233c5761233c61364b565b60405190808252806020026020018201604052801561237557816020015b6123626134ba565b81526020019060019003908161235a5790505b50905060005b8381101561247a57600085858381811061239757612397613d9c565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061241657612416613d9c565b6020908102929092013583525081810184905283516001600160a01b03166000908152600490915260409081902054910152845185908590811061245c5761245c613d9c565b602002602001018190525050508061247390613db2565b905061237b565b5090505b92915050565b61248c612553565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b6124e2612553565b6001600160a01b0381166125475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b61255081612eca565b50565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506126107f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613e5d565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561267557602002820191906000526020600020905b815481526020019060010190808311612661575b50505050509050805167ffffffffffffffff8111156126965761269661364b565b6040519080825280602002602001820160405280156126bf578160200160208202803683370190505b50925060005b81518110156127b9576000600660008484815181106126e6576126e6613d9c565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161275991613d76565b10156127a85782828151811061277157612771613d9c565b602002602001015185838151811061278b5761278b613d9c565b602090810291909101015260608101516127a59085613d76565b93505b506127b281613db2565b90506126c5565b5050915091565b60005b81518110156115d6576000801b8282815181106127e2576127e2613d9c565b602002602001015114612812576128128383838151811061280557612805613d9c565b6020026020010151612b28565b61281b81613db2565b90506127c3565b61282a6134e2565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128869190600401613ec2565b60a0604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613f31565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166129555760405162461bcd60e51b815260040161082290613dcb565b85826080015111156129b45760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b6040805161010081019182905286916129f09190600185019060089082845b8154815260200190600101908083116129d35750505050506130e3565b14612a3d5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612aa55760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612ac29190613e1c565b612acc9190613e49565b871015612b145760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612bcc600d840183612f1a565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612c179190613d76565b9050806000036115d65781546001600160a01b03166000908152600460205260409020612c479060010184613272565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612cb56001830182613523565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612ce59190613532565b5050505050565b6000600b54600014612db857670de0b6b3a7640000600b548360600151612d139190613e1c565b612d1d9190613e49565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613dfa565b505b6000818360600151612dca9190613d89565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e659190613dfa565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f7684805480602002602001604051908101604052809291908181526020018280548015612f6b57602002820191906000526020600020905b815481526020019060010190808311612f57575b505050505084613317565b9150915080612fbf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612fd090600190613d89565b905080831461301557848181548110612feb57612feb613d9c565b906000526020600020015485848154811061300857613008613d9c565b6000918252602090912001555b8480548061302557613025613f71565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161309691600401613f87565b6020604051808303816000875af11580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613fec565b9695505050505050565b60006130ed613550565b6130f561356e565b60005b600681101561313f5784816008811061311357613113613d9c565b602002015183826006811061312a5761312a613d9c565b602002015261313881613db2565b90506130f8565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a7889061318c908590600401614005565b602060405180830381865afa1580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd9190613fec565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e890613231908490600401614036565b602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613fec565b6000806132ce848054806020026020016040519081016040528092919081815260200182805480156132c357602002820191906000526020600020905b8154815260200190600101908083116132af575b50505050508461337a565b9150915080612fbf5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b81811015613367578486828151811061333b5761333b613d9c565b602002602001015103613355579250600191506133739050565b8061335f81613db2565b915050613320565b50600019600092509250505b9250929050565b81516000908190815b81811015613367578486828151811061339e5761339e613d9c565b6020026020010151036133b8579250600191506133739050565b806133c281613db2565b915050613383565b60408051608081018252600080825260208201529081016133e961346e565b8152602001600081525090565b8260088101928215613424579160200282015b82811115613424578251825591602001919060010190613409565b5061343092915061358c565b5090565b8280548282559060005260206000209081019282156134245791602002820182811115613424578251825591602001919060010190613409565b6040518060e0016040528060006001600160a01b031681526020016134916135a1565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134d56134e2565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5061255090600881019061358c565b5080546000825590600052602060002090810190612550919061358c565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b80821115613430576000815560010161358d565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b038116811461255057600080fd5b6000602082840312156135e757600080fd5b81356135f2816135c0565b9392505050565b60006020828403121561360b57600080fd5b5035919050565b60008060006060848603121561362757600080fd5b83359250602084013591506040840135613640816135c0565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156136845761368461364b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364b565b604052919050565b600082601f8301126136cc57600080fd5b6136d4613661565b8060408401858111156136e657600080fd5b845b818110156137005780358452602093840193016136e8565b509095945050505050565b600082601f83011261371c57600080fd5b613724613661565b80608084018581111561373657600080fd5b845b818110156137005761374a87826136bb565b8452602090930192604001613738565b6000806000806102e080868803121561377257600080fd5b61377c87876136bb565b945061378b876040880161370b565b935061379a8760c088016136bb565b92508661011f8701126137ac57600080fd5b6040516101e0810181811067ffffffffffffffff821117156137d0576137d061364b565b6040529086019080888311156137e557600080fd5b61010088015b838110156138035780358252602091820191016137eb565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561384b5783518352928401929184019160010161382f565b50909695505050505050565b6000806040838503121561386a57600080fd5b8235613875816135c0565b91506020830135613885816135c0565b809150509250929050565b600081518084526020808501945080840160005b838110156138c0578151875295820195908201906001016138a4565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b6008811015613907578251825291830191908301906001016138ea565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a086015261394f82860182613890565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156139d657603f19898403018552815160808151855288820151898601528782015181898701526139b5828701826138cb565b6060938401519690930195909552509487019492509086019060010161397f565b509098975050505050505050565b600060208083850312156139f757600080fd5b823567ffffffffffffffff80821115613a0f57600080fd5b818501915085601f830112613a2357600080fd5b813581811115613a3557613a3561364b565b8060051b9150613a4684830161368a565b8181529183018401918481019088841115613a6057600080fd5b938501935b83851015613a7e57843582529385019390850190613a65565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613ad75783518252928401926001929092019190840190613ab7565b509695505050505050565b60008060006101408486031215613af857600080fd5b84601f850112613b0757600080fd5b60405161010080820182811067ffffffffffffffff82111715613b2c57613b2c61364b565b60405285018187821115613b3f57600080fd5b865b82811015613b59578035825260209182019101613b41565b509197903596506101209590950135949350505050565b6020815260006135f260208301846138cb565b6000806000806101a0808688031215613b9b57600080fd5b613ba587876136bb565b9450613bb4876040880161370b565b9350613bc38760c088016136bb565b92508661011f870112613bd557600080fd5b60405160a0810181811067ffffffffffffffff821117156137d0576137d061364b565b60008060208385031215613c0b57600080fd5b823567ffffffffffffffff80821115613c2357600080fd5b818501915085601f830112613c3757600080fd5b813581811115613c4657600080fd5b8660208260051b8501011115613c5b57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613cf0578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c8a565b5091979650505050505050565b60008060408385031215613d1057600080fd5b8235613d1b816135c0565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561247e5761247e613d60565b8181038181111561247e5761247e613d60565b634e487b7160e01b600052603260045260246000fd5b600060018201613dc457613dc4613d60565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613e0c57600080fd5b815180151581146135f257600080fd5b808202811582820484141761247e5761247e613d60565b634e487b7160e01b600052601260045260246000fd5b600082613e5857613e58613e33565b500490565b600082613e6c57613e6c613e33565b500690565b8060005b600281101561303d578151845260209384019390910190600101613e75565b8060005b600281101561303d57613eac848351613e71565b6040939093019260209190910190600101613e98565b60006102e082019050613ed6828451613e71565b602080840151613ee96040850182613e94565b506040840151613efc60c0850182613e71565b506060840151610100840160005b600f811015613f2757825182529183019190830190600101613f0a565b5050505092915050565b600080600080600060a08688031215613f4957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f9b828451613e71565b602080840151613fae6040850182613e94565b506040840151613fc160c0850182613e71565b506060840151610100840160005b6005811015613f2757825182529183019190830190600101613fcf565b600060208284031215613ffe57600080fd5b5051919050565b60c08101818360005b600681101561402d57815183526020928301929091019060010161400e565b50505092915050565b60608101818360005b600381101561402d57815183526020928301929091019060010161403f56fea2646970667358221220ce4b5ac012d074f8459b3087900f248a83a7859401303ac0546d4eb7feb3ba5064736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the idHash being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_receiveAmount\": \"The amount of USD to receive\",\n          \"_upiId\": \"The packed upi ID of the depositor\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the idHash being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a idHash from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4128,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)6944\"\n      },\n      {\n        \"astId\": 4131,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IHDFCSendProcessor)6914\"\n      },\n      {\n        \"astId\": 4133,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4138,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4086_storage)\"\n      },\n      {\n        \"astId\": 4143,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)4023_storage)\"\n      },\n      {\n        \"astId\": 4148,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)4041_storage)\"\n      },\n      {\n        \"astId\": 4153,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)4062_storage)\"\n      },\n      {\n        \"astId\": 4155,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4157,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4159,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4161,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4163,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4165,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4167,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)8_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[8]\",\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IHDFCSendProcessor)6914\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IHDFCSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IRegistrationProcessor)6944\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)4023_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct HDFCRamp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)4023_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4086_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)4086_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)4062_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)4062_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)4041_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct HDFCRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)4041_storage\"\n      },\n      \"t_struct(AccountInfo)4023_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4019,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"idHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4022,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)4078_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 4073,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 4077,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)4041_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 4025,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4029,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"upiId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)8_storage\"\n          },\n          {\n            \"astId\": 4031,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4033,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"10\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4035,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"11\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4037,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"12\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4040,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"13\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"448\"\n      },\n      \"t_struct(GlobalAccountInfo)4086_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4080,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4082,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4085,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)4078_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)4062_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 4053,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4055,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4057,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4059,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4061,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/HDFCRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0xD2B4CcA64Fc4B7588D6546780fEdb4c71A4b75D6\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x99664b65d00f70f4f9974b1a27081c2dc1aff481ff3761bed5ec97ce21929d98\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xD2B4CcA64Fc4B7588D6546780fEdb4c71A4b75D6\",\n    \"transactionIndex\": 6,\n    \"gasUsed\": \"1573187\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000040020000400000000000020000000000000000000800000000000001000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000400000000000000000000\",\n    \"blockHash\": \"0x5566831bc09cd7756fdf5a9bd90b75eccaabe7f3a45e1cdaa50bec88cf01483f\",\n    \"transactionHash\": \"0x99664b65d00f70f4f9974b1a27081c2dc1aff481ff3761bed5ec97ce21929d98\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 6,\n        \"blockNumber\": 10272927,\n        \"transactionHash\": \"0x99664b65d00f70f4f9974b1a27081c2dc1aff481ff3761bed5ec97ce21929d98\",\n        \"address\": \"0xD2B4CcA64Fc4B7588D6546780fEdb4c71A4b75D6\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 21,\n        \"blockHash\": \"0x5566831bc09cd7756fdf5a9bd90b75eccaabe7f3a45e1cdaa50bec88cf01483f\"\n      }\n    ],\n    \"blockNumber\": 10272927,\n    \"cumulativeGasUsed\": \"2346127\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a\",\n    \"0xd4257D0d4224Da79da4909b99458F9A7b6Da8195\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"alerts@hdfcbank.net\",\n    \"0\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":\\\"HDFCRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _hdfcMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed userIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x201e3eb65e17171b5359065b51e78356853be26e598180822ebb4305b0cc3884\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\\\n\\\\n\\\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\\\n\\\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\\\n\\\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\\\n\\\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\\\n\\\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\\\n\\\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x2bc6b9f3db91263227b1e3a6b8fa9a965b9aa896bf3d12434766198a8b823e81\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001d3d38038062001d3d83398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611985620003b86000396000818161010a015261026801526119856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f289eb82230faad0c62fbd2f540384142221e6b43882036be535e03d4d49f7f7285527f090b259da85021f388985bd3de1665a5d035c5a770be66b75093da97e178d7eb60208601526000608086018661067487357f1d466572d6fee03f19c311206ca5817e0088ca3817fae4f83ffc87f87c6d81247f202032329a66a39b16ab45b84d1a4c5fb030644957050a46b628de101ffb73248461056c565b6106c460208801357f215448eb180d4812a749a8eb0085b5cc108dbaea6af4614ea38ca86ddd3adcfa7f1f1a33746fb5bb57c457768bab47b04fe76d00a7290a62f71344a8ed659f80f08461056c565b61071460408801357f0159c8912a08d29aa9af11e4daf0adbf26108fe74c45ff2d636ecc69d5437f2f7f050406f4edf6a26e9227eebdac7c9c6ef22a1275fc6bdbd59e3f5072dd62d91b8461056c565b61076460608801357f16be9a7484c0895cd1cdb9526ccf2d6d1645e53f5cda64cfa00749884c58ab3e7f1ee0821a01e9f589b248ac2c66efa1961e7f82aad907d0d30b1fae4495d4adbf8461056c565b6107b460808801357f0c94a4026750622d8fcbe4f7a710552a26a1fdbddec11103d3eaf25f3e8253d47f2367adfd5521befb39f7482424f3ca32be5f36c7b79096f04cd51e5760b8e6398461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29e0c9df733e35f5a0f4a592c344dfa5669b61230266e156d86ac98bd3dfa6cc6102808201527f23f7f7e68d1d08a306a9752966290057d6167da414f3a75de9e253febc9e56ae6102a08201527f036dd57a7bd3ead51c3d0d5bd18cf6182b104511db118a576c0b7050a7c3b5ac6102c08201527f2a6aab1f59ba4c8b68d1835c9518fb5e30d07e1699f58ceec65b5bd38b461b656102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea26469706673582212204649a612b2c53a9a408c66298ccaa4832140576b76a617e8103caa711e7533a764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f289eb82230faad0c62fbd2f540384142221e6b43882036be535e03d4d49f7f7285527f090b259da85021f388985bd3de1665a5d035c5a770be66b75093da97e178d7eb60208601526000608086018661067487357f1d466572d6fee03f19c311206ca5817e0088ca3817fae4f83ffc87f87c6d81247f202032329a66a39b16ab45b84d1a4c5fb030644957050a46b628de101ffb73248461056c565b6106c460208801357f215448eb180d4812a749a8eb0085b5cc108dbaea6af4614ea38ca86ddd3adcfa7f1f1a33746fb5bb57c457768bab47b04fe76d00a7290a62f71344a8ed659f80f08461056c565b61071460408801357f0159c8912a08d29aa9af11e4daf0adbf26108fe74c45ff2d636ecc69d5437f2f7f050406f4edf6a26e9227eebdac7c9c6ef22a1275fc6bdbd59e3f5072dd62d91b8461056c565b61076460608801357f16be9a7484c0895cd1cdb9526ccf2d6d1645e53f5cda64cfa00749884c58ab3e7f1ee0821a01e9f589b248ac2c66efa1961e7f82aad907d0d30b1fae4495d4adbf8461056c565b6107b460808801357f0c94a4026750622d8fcbe4f7a710552a26a1fdbddec11103d3eaf25f3e8253d47f2367adfd5521befb39f7482424f3ca32be5f36c7b79096f04cd51e5760b8e6398461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29e0c9df733e35f5a0f4a592c344dfa5669b61230266e156d86ac98bd3dfa6cc6102808201527f23f7f7e68d1d08a306a9752966290057d6167da414f3a75de9e253febc9e56ae6102a08201527f036dd57a7bd3ead51c3d0d5bd18cf6182b104511db118a576c0b7050a7c3b5ac6102c08201527f2a6aab1f59ba4c8b68d1835c9518fb5e30d07e1699f58ceec65b5bd38b461b656102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea26469706673582212204649a612b2c53a9a408c66298ccaa4832140576b76a617e8103caa711e7533a764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/HDFCSendProcessor.json",
    "content": "{\n  \"address\": \"0x03eB0ba3f7A4451C41278Af74E8384079Ae40170\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"internalType\": \"struct IHDFCSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf0c04504e65a7e75cc0465d579ddac3e0f3e532841f6f504d34b9a14c04c26ac\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x03eB0ba3f7A4451C41278Af74E8384079Ae40170\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"2514894\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000404000000000020000000000000000000800000000000080000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000100000\",\n    \"blockHash\": \"0x85d9ce5c2543b1246937a107eda7ec18564d4739ff92b469e9268ec8aaeeea4e\",\n    \"transactionHash\": \"0xf0c04504e65a7e75cc0465d579ddac3e0f3e532841f6f504d34b9a14c04c26ac\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 4,\n        \"blockNumber\": 10272930,\n        \"transactionHash\": \"0xf0c04504e65a7e75cc0465d579ddac3e0f3e532841f6f504d34b9a14c04c26ac\",\n        \"address\": \"0x03eB0ba3f7A4451C41278Af74E8384079Ae40170\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 4,\n        \"blockHash\": \"0x85d9ce5c2543b1246937a107eda7ec18564d4739ff92b469e9268ec8aaeeea4e\"\n      }\n    ],\n    \"blockNumber\": 10272930,\n    \"cumulativeGasUsed\": \"2851173\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a\",\n    \"0xd4257D0d4224Da79da4909b99458F9A7b6Da8195\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"alerts@hdfcbank.net\",\n    \"30\"\n  ],\n  \"numDeployments\": 3,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"internalType\\\":\\\"struct IHDFCSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":\\\"HDFCSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/DateTime.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.0;\\\\n\\\\n// ----------------------------------------------------------------------------\\\\n// DateTime Library v2.0\\\\n//\\\\n// A gas-efficient Solidity date and time library\\\\n//\\\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\\\n//\\\\n// Tested date range 1970/01/01 to 2345/12/31\\\\n//\\\\n// Conventions:\\\\n// Unit      | Range         | Notes\\\\n// :-------- |:-------------:|:-----\\\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\\\n// year      | 1970 ... 2345 |\\\\n// month     | 1 ... 12      |\\\\n// day       | 1 ... 31      |\\\\n// hour      | 0 ... 23      |\\\\n// minute    | 0 ... 59      |\\\\n// second    | 0 ... 59      |\\\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\\\n//\\\\n//\\\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\\\n//\\\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\\\n// ----------------------------------------------------------------------------\\\\n\\\\nlibrary DateTime {\\\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\\\n    int256 constant OFFSET19700101 = 2440588;\\\\n\\\\n    uint256 constant DOW_MON = 1;\\\\n    uint256 constant DOW_TUE = 2;\\\\n    uint256 constant DOW_WED = 3;\\\\n    uint256 constant DOW_THU = 4;\\\\n    uint256 constant DOW_FRI = 5;\\\\n    uint256 constant DOW_SAT = 6;\\\\n    uint256 constant DOW_SUN = 7;\\\\n\\\\n    // ------------------------------------------------------------------------\\\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\\\n    // the date conversion algorithm from\\\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\\\n    //\\\\n    // days = day\\\\n    //      - 32075\\\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\\\n    //      - offset\\\\n    // ------------------------------------------------------------------------\\\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\\\n        require(year >= 1970);\\\\n        int256 _year = int256(year);\\\\n        int256 _month = int256(month);\\\\n        int256 _day = int256(day);\\\\n\\\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\\\n\\\\n        _days = uint256(__days);\\\\n    }\\\\n\\\\n    function timestampFromDateTime(\\\\n        uint256 year,\\\\n        uint256 month,\\\\n        uint256 day,\\\\n        uint256 hour,\\\\n        uint256 minute,\\\\n        uint256 second\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256 timestamp)\\\\n    {\\\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\\\n            + minute * SECONDS_PER_MINUTE + second;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x64f6113ad342f8bd3c2eb74fde279401d604faf77dd08f6c16c3912c3519f170\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_send_verifier.sol\\\\\\\";\\\\nimport { HDFCTimestampParsing } from \\\\\\\"./lib/HDFCTimestampParsing.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _hdfcMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IHDFCSendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\\\n        // parse and convert to a unix timestamp\\\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\\\n\\\\n        // Signals [11] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\\\n\\\\n        // Signals [12] is the packed offRamper UPI ID hash\\\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\\\n\\\\n        // Signals [14] is intentHash\\\\n        intentHash = bytes32(_proof.signals[14]);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x817fbb9806670719d4e42665dfdf60a3beb3852f3ad8178049e3836732de7034\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { DateTime } from \\\\\\\"../../../external/DateTime.sol\\\\\\\";\\\\n\\\\nimport { StringConversionUtils } from \\\\\\\"../../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary HDFCTimestampParsing {\\\\n\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /**\\\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\\\n     */\\\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\\\n        string[8] memory extractedStrings;\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\\\n                lastBreak = i + 1;\\\\n                breakCounter++;\\\\n            }\\\\n        }\\\\n        // Add last substring to array\\\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\\\n\\\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\\\n        require(breakCounter == 7, \\\\\\\"Invalid date string\\\\\\\");\\\\n\\\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\\\n            extractedStrings[3].stringToUint(0), // year\\\\n            _parseMonth(extractedStrings[2]), // month\\\\n            extractedStrings[1].stringToUint(0), // day\\\\n            extractedStrings[4].stringToUint(0), // hour\\\\n            extractedStrings[5].stringToUint(0), // minute\\\\n            extractedStrings[6].stringToUint(0) // second\\\\n        );\\\\n\\\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\\\n     * string is of the format \\\\\\\"+0530\\\\\\\" or \\\\\\\"-0530\\\\\\\" where the first character is either a \\\\\\\"+\\\\\\\" or a \\\\\\\"-\\\\\\\" and the next 4 characters are hhmm. If\\\\n     * the _timeOffsetString is \\\\\\\"+0530\\\\\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\\\n     *\\\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\\\n     */\\\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\\\n        require(bytes(_timeOffsetString).length == 5, \\\\\\\"Invalid timezone offset\\\\\\\");\\\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\\\n\\\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\\\n\\\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\\\\\"+\\\\\\\" meaning the tz is ahead of GMT and must\\\\n        // be subtracted\\\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\\\n    }\\\\n\\\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jan\\\\\\\")) {\\\\n            return 1;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Feb\\\\\\\")) {\\\\n            return 2;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Mar\\\\\\\")) {\\\\n            return 3;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Apr\\\\\\\")) {\\\\n            return 4;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"May\\\\\\\")) {\\\\n            return 5;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jun\\\\\\\")) {\\\\n            return 6;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jul\\\\\\\")) {\\\\n            return 7;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Aug\\\\\\\")) {\\\\n            return 8;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Sep\\\\\\\")) {\\\\n            return 9;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Oct\\\\\\\")) {\\\\n            return 10;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Nov\\\\\\\")) {\\\\n            return 11;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Dec\\\\\\\")) {\\\\n            return 12;\\\\n        } else {\\\\n            revert(\\\\\\\"Invalid month\\\\\\\");\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74067d5ce3820b0763d3faee918d58f423377b0729af325e8f7670ee4466b713\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\\\n\\\\n\\\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\\\n\\\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\\\n\\\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\\\n\\\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\\\n\\\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\\\n\\\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\\\n\\\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\\\n\\\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\\\n\\\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\\\n\\\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\\\n\\\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\\\n\\\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\\\n\\\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\\\n\\\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\\\n\\\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\\\n\\\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n\\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n\\\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\\\n\\\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\\\n\\\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 416)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 448)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 480)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x708985be21c0895b2b06ac50102da21cdf2bb14ab8f3f7c0a7be754bcc4207d8\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162002de538038062002de583398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612a2e620003b76000396000818160ff01526103160152612a2e6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063bf93fde111610097578063dbac582111610066578063dbac582114610220578063f054a9a314610237578063f2fde38b1461024a578063f6c7226b1461025d57600080fd5b8063bf93fde1146101b5578063c0d05fed146101f0578063ced1e97814610205578063d0b71f991461020d57600080fd5b80638da5cb5b116100d35780638da5cb5b1461016b578063a8ef333f1461017c578063b2a3fda41461018f578063b870676c146101a257600080fd5b806315d276e1146100fa57806319d091521461013e578063715018a614610161575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015161014c36600461230a565b610270565b6040519015158152602001610135565b6101696102e4565b005b6000546001600160a01b0316610121565b600154610121906001600160a01b031681565b61016961019d36600461230a565b6102f8565b600254610121906001600160a01b031681565b6101c86101c3366004612323565b610305565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6101f86105b1565b6040516101359190612360565b6101f861063f565b61016961021b3660046123a8565b6106d1565b61022960045481565b604051908152602001610135565b6101516102453660046123dd565b6106fb565b6101696102583660046123a8565b611081565b61016961026b366004612459565b6110f7565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de919061250a565b92915050565b6102ec61110f565b6102f66000611169565b565b61030061110f565b600455565b600080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103885760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a3916103bb918a919082019060c083019061010084019060040161252c565b602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc919061250a565b6104385760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161037f565b610446610100870135610270565b6104925760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161037f565b60006104a58761010001600160046111b9565b905060036040516104b691906125c3565b6040518091039020816040516020016104cf9190612639565b60405160208183030381529060405280519060200120146105325760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161037f565b61054e60066105488961010001600460066111b9565b90611294565b9550600061056388610100016006600b6111b9565b90506004546105718261146a565b61057b919061266b565b95506102808801359450610260880135935061059b6102a0890135611617565b509496939592945090926102c090920135919050565b600380546105be9061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea9061258f565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60606003805461064e9061258f565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061258f565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b6106d961110f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f85565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610733576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610769576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061079a576000805260206000f35b5050505050565b7f11c0fa536785a14ea232244faf4db797ed78290ed4fb27d5038cac6ae9a3915285527f25d09a0e68aa815305c2995cc88de47499c6bf8dd88aebc829db24846944696160208601526000608086018661083e87357f06e757dafa88a886ce63a8c2b453fedcc71a0eb31f0131a905a4913207355d4c7f1364e9163e5b15b2805a6aac65afcb4001017d5343017c737564a23b6d08428684610736565b61088e60208801357f29ca5087e79a2d1fb754d59033fec517f164dfd734b75a8cc89c6e2894cec0687f15d07987dd5b551b72857cefaed299e7a1989a2927f859a6d0ad593beba9361384610736565b6108de60408801357f2b6a88b3112d75e15c1fc7f737cf28da3a22df26156e80d1dceb1d792aa6f5697f24580e32cd5353fa5aa622fec5d0cb8834ad9a35a5d7ed3de960648f39fa42af84610736565b61092e60608801357f24a9fdbfeb9e558ea7eb1c0f9d2f59adb3e19fee489181e0649cac9968d92c3d7f23ea51f6d35583a15c0e0f0bb44cdb055ddccb3109365d0feb10559bce3f682484610736565b61097e60808801357f083b0d8149f542f7d51ff78dd5bd947ac228adf4765f13cbb8ae4b0c9de33d197f04282c6bb25a8a05b9d698fa726e427251a636a05ae11f8178ed74ce70c7b38384610736565b6109ce60a08801357f1803098aec4fded4fc5b2bab68cf7fb1f5cdfc173e8b4c2d6f3ad5ae8b7d5ce47f02cf06b9216abdbe0d145ee6ba106240740f6554ba338900ae157bc1d113612384610736565b610a1e60c08801357f2e7c4cf7b58d9b12bb9cee35f053430f80678fe1885b216886c042d0cde497487f12a5802440d5b5d29b299b8818078e7c2165b5d2f49776e55ac4c8da11581e2f84610736565b610a6e60e08801357f1d78c8b32944313d7e911c1c721109f4a04d0879fe1e1802e3ddf943612a4ddd7f245b7127d480d0e750564b78818a037a57e3a17f889b15dbb01e9e243ad4218084610736565b610abf6101008801357f2568c716b634adaf4106a56b42776b724d5ef21e52864a1347088de129b478fe7f17565054db4aa08be111cfc14344b79875bc704e563362d7a9d3992271be350984610736565b610b106101208801357f0400bd816ec371a36d4594b5466ba7a092139238746fcee0f5e254b7944c51617f013d5ee8b0b9e671e5bde7130e47682c47ca38dd479db7331ca393bf5edfa02484610736565b610b616101408801357f10444a550566f8186e8fd121fe8a929e92f66e479515b67833a3d4bc07e5eeb77f24042e12cbcf48ac6d7b05da02753790ed095694fe2b3184239ec60500d3a86a84610736565b610bb26101608801357f29d1fba93734715a1dee7b66433894a2fb3304bcc7784a98f5f54b57c5f31f9e7f297559c6982845ac8cbc9d10c68703d05fff58f59bd022718930361da7d6240584610736565b610c036101808801357f01fbfd0d8299e28fe5b7b1e44840e0e49175cd784ea29456a5544d41ec56ed4f7f0120f0145b0c23de99655163334fafda2296421f9ff6d616a4381b731bcf8e9284610736565b610c546101a08801357f272e3f68e4dde921f3fecbf1da3e48be0375066071f79cf60d12a94909b013137f1c172fb9ad177d1f52f6f867020a4fd1d20819d027b26b5306eabd3d6a2da44884610736565b610ca56101c08801357f29bf2dd28bddc6677bfc29ae10bc2fc88614c805470de8f9c3bd943ef5b56b477f0bbe36a822bf94a2563eccdcdf022dce00eb8770630efa37084f7dabe6ec84f384610736565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0a656bd3ce0f460dfb7f25d7c71d52fecdc0eb363d413b2585775d8283eb0b046102808201527f0717de189821c8fd7338c4b95469c6dd47ee1aad6c8510dc9bcd7983852514eb6102a08201527f2d5f46e1cbebc83f7340eecebc2fff23e5da01cab367c8f7ec52c1bd3f6a2bc36102c08201527f1c0356f78812a13151f9212f9c69e8a7a9b2a7634c2b43617adda632ce9954d86102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f9d6000840135610702565b610faa6020840135610702565b610fb76040840135610702565b610fc46060840135610702565b610fd16080840135610702565b610fde60a0840135610702565b610feb60c0840135610702565b610ff860e0840135610702565b611006610100840135610702565b611014610120840135610702565b611022610140840135610702565b611030610160840135610702565b61103e610180840135610702565b61104c6101a0840135610702565b61105a6101c0840135610702565b6110686101e0840135610702565b611075818486888a6107a1565b90508060005260206000f35b61108961110f565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161037f565b61073381611169565b6110ff61110f565b600361110b82826126cd565b5050565b6000546001600160a01b031633146102f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006111c7848461278d565b60ff1667ffffffffffffffff8111156111e2576111e2612443565b60405190808252806020026020018201604052801561120b578160200160208202803683370190505b50905060ff84165b8360ff16811015611270578581600f811061123057611230612579565b60200201358261124360ff8816846127a6565b8151811061125357611253612579565b602090810291909101015280611268816127b9565b915050611213565b5061128b6007825161128291906127d2565b8290600761172b565b95945050505050565b600082818080805b84518110156113e457603060f81b8582815181106112bc576112bc612579565b01602001516001600160f81b031916108015906112fd5750603960f81b8582815181106112eb576112eb612579565b01602001516001600160f81b03191611155b1561134057603085828151811061131657611316612579565b0160200151611328919060f81c6127a6565b61133385600a6127d2565b61133d919061266b565b93505b81156113545782611350816127b9565b9350505b84818151811061136657611366612579565b01602001516001600160f81b031916601760f91b036113d25781156113cd5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161037f565b600191505b806113dc816127b9565b91505061129c565b50858211156114405760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161037f565b61144a82876127a6565b61145590600a6128cd565b61145f90846127d2565b979650505050505050565b60006114746122e2565b60008060005b855181101561152e5785818151811061149557611495612579565b6020910101516001600160f81b031916600160fd1b14806114da57508581815181106114c3576114c3612579565b6020910101516001600160f81b031916601d60f91b145b1561151c576114ea868383611a5c565b8484600881106114fc576114fc612579565b602002015261150c81600161266b565b915082611518816127b9565b9350505b80611526816127b9565b91505061147a565b50845161153e9086908390611a5c565b83836008811061155057611550612579565b60200201526007821461159b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b604482015260640161037f565b60006115fa6115b3828660035b602002015190611294565b60408601516115c190611b29565b6115ce60008860016115a8565b6115db60008960046115a8565b6115e860008a60056115a8565b6115f560008b60066115a8565b611f5f565b905061160d818560076020020151611fb0565b9695505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611684919061250a565b156116d15760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161037f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561171757600080fd5b505af115801561079a573d6000803e3d6000fd5b606060008083865161173d91906127d2565b67ffffffffffffffff81111561175557611755612443565b6040519080825280601f01601f19166020018201604052801561177f576020820181803683370190505b5090506000805b87518161ffff161015611936576000888261ffff16815181106117ab576117ab612579565b6020026020010151905060008767ffffffffffffffff8111156117d0576117d0612443565b6040519080825280602002602001820160405280156117f9578160200160208202803683370190505b50905060005b8881101561184b576118128160086127d2565b83901c82828151811061182757611827612579565b60ff9092166020928302919091019091015280611843816127b9565b9150506117ff565b5060005b8881101561192057600082828151811061186b5761186b612579565b602002602001015160ff169050806000146118e3578060f81b87878151811061189657611896612579565b60200101906001600160f81b031916908160001a905350856118b7816127b9565b96506118c690506002896128ef565b60ff166000036118de576118db600189612911565b97505b611906565b6118ee6002896128ef565b60ff1660010361190657611903600189612911565b97505b5060089290921c9180611918816127b9565b91505061184f565b505050808061192e9061292a565b915050611786565b5060018360ff1610156119d75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161037f565b85811115611a455760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161037f565b6000611a50836120a7565b98975050505050505050565b6060836000611a6b85856127a6565b67ffffffffffffffff811115611a8357611a83612443565b6040519080825280601f01601f191660200182016040528015611aad576020820181803683370190505b509050845b84811015611b1f57828181518110611acc57611acc612579565b01602001516001600160f81b03191682611ae688846127a6565b81518110611af657611af6612579565b60200101906001600160f81b031916908160001a90535080611b17816127b9565b915050611ab2565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611b5d9190612639565b6040516020818303038152906040528051906020012003611b8057506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611bb29190612639565b6040516020818303038152906040528051906020012003611bd557506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611c079190612639565b6040516020818303038152906040528051906020012003611c2a57506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611c5c9190612639565b6040516020818303038152906040528051906020012003611c7f57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611cb19190612639565b6040516020818303038152906040528051906020012003611cd457506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611d069190612639565b6040516020818303038152906040528051906020012003611d2957506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611d5b9190612639565b6040516020818303038152906040528051906020012003611d7e57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611db09190612639565b6040516020818303038152906040528051906020012003611dd357506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611e059190612639565b6040516020818303038152906040528051906020012003611e2857506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611e5a9190612639565b6040516020818303038152906040528051906020012003611e7d5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611eaf9190612639565b6040516020818303038152906040528051906020012003611ed25750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611f049190612639565b6040516020818303038152906040528051906020012003611f275750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b604482015260640161037f565b600081611f6d603c856127d2565b611f79610e10876127d2565b62015180611f888b8b8b6121b1565b611f9291906127d2565b611f9c919061266b565b611fa6919061266b565b61145f919061266b565b600081516005146120035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d657a6f6e65206f6666736574000000000000000000604482015260640161037f565b6000612016816105488560016003611a5c565b9050600061202b816105488660036005611a5c565b9050600061203a82603c6127d2565b61204684610e106127d2565b612050919061266b565b9050600061206086826001611a5c565b60008151811061207257612072612579565b01602001516001600160f81b0319169050602b60f81b811461209d57612098828861266b565b61145f565b61145f82886127a6565b8051606090829060005b82518110156120fc578281815181106120cc576120cc612579565b01602001516001600160f81b0319166000036120ea578091506120fc565b806120f4816127b9565b9150506120b1565b5060008167ffffffffffffffff81111561211857612118612443565b6040519080825280601f01601f191660200182016040528015612142576020820181803683370190505b50905060005b828110156121a85783818151811061216257612162612579565b602001015160f81c60f81b82828151811061217f5761217f612579565b60200101906001600160f81b031916908160001a905350806121a0816127b9565b915050612148565b50949350505050565b60006107b28410156121c257600080fd5b838383600062253d8c60046064600c6121dc600e8861294b565b6121e69190612972565b6121f2886113246129a0565b6121fc91906129a0565b6122069190612972565b6122119060036129c8565b61221b9190612972565b600c80612229600e8861294b565b6122339190612972565b61223e90600c6129c8565b61224960028861294b565b612253919061294b565b61225f9061016f6129c8565b6122699190612972565b6004600c612278600e8961294b565b6122829190612972565b61228e896112c06129a0565b61229891906129a0565b6122a4906105b56129c8565b6122ae9190612972565b6122ba617d4b8761294b565b6122c491906129a0565b6122ce91906129a0565b6122d8919061294b565b611a50919061294b565b6040518061010001604052806008905b60608152602001906001900390816122f25790505090565b60006020828403121561231c57600080fd5b5035919050565b60006102e0828403121561233657600080fd5b50919050565b60005b8381101561235757818101518382015260200161233f565b50506000910152565b602081526000825180602084015261237f81604085016020870161233c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073357600080fd5b6000602082840312156123ba57600080fd5b81356123c581612393565b9392505050565b80604081018310156102de57600080fd5b6000806000806102e08086880312156123f557600080fd5b6123ff87876123cc565b945060c086018781111561241257600080fd5b60408701945061242288826123cc565b93505086818701111561243457600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561246b57600080fd5b813567ffffffffffffffff8082111561248357600080fd5b818401915084601f83011261249757600080fd5b8135818111156124a9576124a9612443565b604051601f8201601f19908116603f011681019083821181831017156124d1576124d1612443565b816040528281528760208487010111156124ea57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561251c57600080fd5b815180151581146123c557600080fd5b6102e081016040808784378083018660005b600281101561255b5783828437918301919083019060010161253e565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806125a357607f821691505b60208210810361233657634e487b7160e01b600052602260045260246000fd5b60008083546125d18161258f565b600182811680156125e957600181146125fe5761262d565b60ff198416875282151583028701945061262d565b8760005260208060002060005b858110156126245781548a82015290840190820161260b565b50505082870194505b50929695505050505050565b6000825161264b81846020870161233c565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102de576102de612655565b601f8211156126c857600081815260208120601f850160051c810160208610156126a55750805b601f850160051c820191505b818110156126c4578281556001016126b1565b5050505b505050565b815167ffffffffffffffff8111156126e7576126e7612443565b6126fb816126f5845461258f565b8461267e565b602080601f83116001811461273057600084156127185750858301515b600019600386901b1c1916600185901b1785556126c4565b600085815260208120601f198616915b8281101561275f57888601518255948401946001909101908401612740565b508582101561277d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102de576102de612655565b818103818111156102de576102de612655565b6000600182016127cb576127cb612655565b5060010190565b80820281158282048414176102de576102de612655565b600181815b8085111561282457816000190482111561280a5761280a612655565b8085161561281757918102915b93841c93908002906127ee565b509250929050565b60008261283b575060016102de565b81612848575060006102de565b816001811461285e576002811461286857612884565b60019150506102de565b60ff84111561287957612879612655565b50506001821b6102de565b5060208310610133831016604e8410600b84101617156128a7575081810a6102de565b6128b183836127e9565b80600019048211156128c5576128c5612655565b029392505050565b60006123c5838361282c565b634e487b7160e01b600052601260045260246000fd5b600060ff831680612902576129026128d9565b8060ff84160691505092915050565b60ff81811683821601908111156102de576102de612655565b600061ffff80831681810361294157612941612655565b6001019392505050565b818103600083128015838313168383128216171561296b5761296b612655565b5092915050565b600082612981576129816128d9565b600160ff1b82146000198414161561299b5761299b612655565b500590565b80820182811260008312801582168215821617156129c0576129c0612655565b505092915050565b80820260008212600160ff1b841416156129e4576129e4612655565b81810583148215176102de576102de61265556fea26469706673582212203718a7e9e50a4f07565325df33ba83f03bd8e8f7b787577bbb0628965d0b031e64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063bf93fde111610097578063dbac582111610066578063dbac582114610220578063f054a9a314610237578063f2fde38b1461024a578063f6c7226b1461025d57600080fd5b8063bf93fde1146101b5578063c0d05fed146101f0578063ced1e97814610205578063d0b71f991461020d57600080fd5b80638da5cb5b116100d35780638da5cb5b1461016b578063a8ef333f1461017c578063b2a3fda41461018f578063b870676c146101a257600080fd5b806315d276e1146100fa57806319d091521461013e578063715018a614610161575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015161014c36600461230a565b610270565b6040519015158152602001610135565b6101696102e4565b005b6000546001600160a01b0316610121565b600154610121906001600160a01b031681565b61016961019d36600461230a565b6102f8565b600254610121906001600160a01b031681565b6101c86101c3366004612323565b610305565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6101f86105b1565b6040516101359190612360565b6101f861063f565b61016961021b3660046123a8565b6106d1565b61022960045481565b604051908152602001610135565b6101516102453660046123dd565b6106fb565b6101696102583660046123a8565b611081565b61016961026b366004612459565b6110f7565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de919061250a565b92915050565b6102ec61110f565b6102f66000611169565b565b61030061110f565b600455565b600080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103885760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a3916103bb918a919082019060c083019061010084019060040161252c565b602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc919061250a565b6104385760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161037f565b610446610100870135610270565b6104925760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161037f565b60006104a58761010001600160046111b9565b905060036040516104b691906125c3565b6040518091039020816040516020016104cf9190612639565b60405160208183030381529060405280519060200120146105325760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161037f565b61054e60066105488961010001600460066111b9565b90611294565b9550600061056388610100016006600b6111b9565b90506004546105718261146a565b61057b919061266b565b95506102808801359450610260880135935061059b6102a0890135611617565b509496939592945090926102c090920135919050565b600380546105be9061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea9061258f565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60606003805461064e9061258f565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061258f565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b6106d961110f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f85565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610733576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610769576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061079a576000805260206000f35b5050505050565b7f11c0fa536785a14ea232244faf4db797ed78290ed4fb27d5038cac6ae9a3915285527f25d09a0e68aa815305c2995cc88de47499c6bf8dd88aebc829db24846944696160208601526000608086018661083e87357f06e757dafa88a886ce63a8c2b453fedcc71a0eb31f0131a905a4913207355d4c7f1364e9163e5b15b2805a6aac65afcb4001017d5343017c737564a23b6d08428684610736565b61088e60208801357f29ca5087e79a2d1fb754d59033fec517f164dfd734b75a8cc89c6e2894cec0687f15d07987dd5b551b72857cefaed299e7a1989a2927f859a6d0ad593beba9361384610736565b6108de60408801357f2b6a88b3112d75e15c1fc7f737cf28da3a22df26156e80d1dceb1d792aa6f5697f24580e32cd5353fa5aa622fec5d0cb8834ad9a35a5d7ed3de960648f39fa42af84610736565b61092e60608801357f24a9fdbfeb9e558ea7eb1c0f9d2f59adb3e19fee489181e0649cac9968d92c3d7f23ea51f6d35583a15c0e0f0bb44cdb055ddccb3109365d0feb10559bce3f682484610736565b61097e60808801357f083b0d8149f542f7d51ff78dd5bd947ac228adf4765f13cbb8ae4b0c9de33d197f04282c6bb25a8a05b9d698fa726e427251a636a05ae11f8178ed74ce70c7b38384610736565b6109ce60a08801357f1803098aec4fded4fc5b2bab68cf7fb1f5cdfc173e8b4c2d6f3ad5ae8b7d5ce47f02cf06b9216abdbe0d145ee6ba106240740f6554ba338900ae157bc1d113612384610736565b610a1e60c08801357f2e7c4cf7b58d9b12bb9cee35f053430f80678fe1885b216886c042d0cde497487f12a5802440d5b5d29b299b8818078e7c2165b5d2f49776e55ac4c8da11581e2f84610736565b610a6e60e08801357f1d78c8b32944313d7e911c1c721109f4a04d0879fe1e1802e3ddf943612a4ddd7f245b7127d480d0e750564b78818a037a57e3a17f889b15dbb01e9e243ad4218084610736565b610abf6101008801357f2568c716b634adaf4106a56b42776b724d5ef21e52864a1347088de129b478fe7f17565054db4aa08be111cfc14344b79875bc704e563362d7a9d3992271be350984610736565b610b106101208801357f0400bd816ec371a36d4594b5466ba7a092139238746fcee0f5e254b7944c51617f013d5ee8b0b9e671e5bde7130e47682c47ca38dd479db7331ca393bf5edfa02484610736565b610b616101408801357f10444a550566f8186e8fd121fe8a929e92f66e479515b67833a3d4bc07e5eeb77f24042e12cbcf48ac6d7b05da02753790ed095694fe2b3184239ec60500d3a86a84610736565b610bb26101608801357f29d1fba93734715a1dee7b66433894a2fb3304bcc7784a98f5f54b57c5f31f9e7f297559c6982845ac8cbc9d10c68703d05fff58f59bd022718930361da7d6240584610736565b610c036101808801357f01fbfd0d8299e28fe5b7b1e44840e0e49175cd784ea29456a5544d41ec56ed4f7f0120f0145b0c23de99655163334fafda2296421f9ff6d616a4381b731bcf8e9284610736565b610c546101a08801357f272e3f68e4dde921f3fecbf1da3e48be0375066071f79cf60d12a94909b013137f1c172fb9ad177d1f52f6f867020a4fd1d20819d027b26b5306eabd3d6a2da44884610736565b610ca56101c08801357f29bf2dd28bddc6677bfc29ae10bc2fc88614c805470de8f9c3bd943ef5b56b477f0bbe36a822bf94a2563eccdcdf022dce00eb8770630efa37084f7dabe6ec84f384610736565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0a656bd3ce0f460dfb7f25d7c71d52fecdc0eb363d413b2585775d8283eb0b046102808201527f0717de189821c8fd7338c4b95469c6dd47ee1aad6c8510dc9bcd7983852514eb6102a08201527f2d5f46e1cbebc83f7340eecebc2fff23e5da01cab367c8f7ec52c1bd3f6a2bc36102c08201527f1c0356f78812a13151f9212f9c69e8a7a9b2a7634c2b43617adda632ce9954d86102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f9d6000840135610702565b610faa6020840135610702565b610fb76040840135610702565b610fc46060840135610702565b610fd16080840135610702565b610fde60a0840135610702565b610feb60c0840135610702565b610ff860e0840135610702565b611006610100840135610702565b611014610120840135610702565b611022610140840135610702565b611030610160840135610702565b61103e610180840135610702565b61104c6101a0840135610702565b61105a6101c0840135610702565b6110686101e0840135610702565b611075818486888a6107a1565b90508060005260206000f35b61108961110f565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161037f565b61073381611169565b6110ff61110f565b600361110b82826126cd565b5050565b6000546001600160a01b031633146102f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006111c7848461278d565b60ff1667ffffffffffffffff8111156111e2576111e2612443565b60405190808252806020026020018201604052801561120b578160200160208202803683370190505b50905060ff84165b8360ff16811015611270578581600f811061123057611230612579565b60200201358261124360ff8816846127a6565b8151811061125357611253612579565b602090810291909101015280611268816127b9565b915050611213565b5061128b6007825161128291906127d2565b8290600761172b565b95945050505050565b600082818080805b84518110156113e457603060f81b8582815181106112bc576112bc612579565b01602001516001600160f81b031916108015906112fd5750603960f81b8582815181106112eb576112eb612579565b01602001516001600160f81b03191611155b1561134057603085828151811061131657611316612579565b0160200151611328919060f81c6127a6565b61133385600a6127d2565b61133d919061266b565b93505b81156113545782611350816127b9565b9350505b84818151811061136657611366612579565b01602001516001600160f81b031916601760f91b036113d25781156113cd5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161037f565b600191505b806113dc816127b9565b91505061129c565b50858211156114405760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161037f565b61144a82876127a6565b61145590600a6128cd565b61145f90846127d2565b979650505050505050565b60006114746122e2565b60008060005b855181101561152e5785818151811061149557611495612579565b6020910101516001600160f81b031916600160fd1b14806114da57508581815181106114c3576114c3612579565b6020910101516001600160f81b031916601d60f91b145b1561151c576114ea868383611a5c565b8484600881106114fc576114fc612579565b602002015261150c81600161266b565b915082611518816127b9565b9350505b80611526816127b9565b91505061147a565b50845161153e9086908390611a5c565b83836008811061155057611550612579565b60200201526007821461159b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b604482015260640161037f565b60006115fa6115b3828660035b602002015190611294565b60408601516115c190611b29565b6115ce60008860016115a8565b6115db60008960046115a8565b6115e860008a60056115a8565b6115f560008b60066115a8565b611f5f565b905061160d818560076020020151611fb0565b9695505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611684919061250a565b156116d15760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161037f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561171757600080fd5b505af115801561079a573d6000803e3d6000fd5b606060008083865161173d91906127d2565b67ffffffffffffffff81111561175557611755612443565b6040519080825280601f01601f19166020018201604052801561177f576020820181803683370190505b5090506000805b87518161ffff161015611936576000888261ffff16815181106117ab576117ab612579565b6020026020010151905060008767ffffffffffffffff8111156117d0576117d0612443565b6040519080825280602002602001820160405280156117f9578160200160208202803683370190505b50905060005b8881101561184b576118128160086127d2565b83901c82828151811061182757611827612579565b60ff9092166020928302919091019091015280611843816127b9565b9150506117ff565b5060005b8881101561192057600082828151811061186b5761186b612579565b602002602001015160ff169050806000146118e3578060f81b87878151811061189657611896612579565b60200101906001600160f81b031916908160001a905350856118b7816127b9565b96506118c690506002896128ef565b60ff166000036118de576118db600189612911565b97505b611906565b6118ee6002896128ef565b60ff1660010361190657611903600189612911565b97505b5060089290921c9180611918816127b9565b91505061184f565b505050808061192e9061292a565b915050611786565b5060018360ff1610156119d75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161037f565b85811115611a455760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161037f565b6000611a50836120a7565b98975050505050505050565b6060836000611a6b85856127a6565b67ffffffffffffffff811115611a8357611a83612443565b6040519080825280601f01601f191660200182016040528015611aad576020820181803683370190505b509050845b84811015611b1f57828181518110611acc57611acc612579565b01602001516001600160f81b03191682611ae688846127a6565b81518110611af657611af6612579565b60200101906001600160f81b031916908160001a90535080611b17816127b9565b915050611ab2565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611b5d9190612639565b6040516020818303038152906040528051906020012003611b8057506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611bb29190612639565b6040516020818303038152906040528051906020012003611bd557506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611c079190612639565b6040516020818303038152906040528051906020012003611c2a57506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611c5c9190612639565b6040516020818303038152906040528051906020012003611c7f57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611cb19190612639565b6040516020818303038152906040528051906020012003611cd457506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611d069190612639565b6040516020818303038152906040528051906020012003611d2957506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611d5b9190612639565b6040516020818303038152906040528051906020012003611d7e57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611db09190612639565b6040516020818303038152906040528051906020012003611dd357506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611e059190612639565b6040516020818303038152906040528051906020012003611e2857506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611e5a9190612639565b6040516020818303038152906040528051906020012003611e7d5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611eaf9190612639565b6040516020818303038152906040528051906020012003611ed25750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611f049190612639565b6040516020818303038152906040528051906020012003611f275750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b604482015260640161037f565b600081611f6d603c856127d2565b611f79610e10876127d2565b62015180611f888b8b8b6121b1565b611f9291906127d2565b611f9c919061266b565b611fa6919061266b565b61145f919061266b565b600081516005146120035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d657a6f6e65206f6666736574000000000000000000604482015260640161037f565b6000612016816105488560016003611a5c565b9050600061202b816105488660036005611a5c565b9050600061203a82603c6127d2565b61204684610e106127d2565b612050919061266b565b9050600061206086826001611a5c565b60008151811061207257612072612579565b01602001516001600160f81b0319169050602b60f81b811461209d57612098828861266b565b61145f565b61145f82886127a6565b8051606090829060005b82518110156120fc578281815181106120cc576120cc612579565b01602001516001600160f81b0319166000036120ea578091506120fc565b806120f4816127b9565b9150506120b1565b5060008167ffffffffffffffff81111561211857612118612443565b6040519080825280601f01601f191660200182016040528015612142576020820181803683370190505b50905060005b828110156121a85783818151811061216257612162612579565b602001015160f81c60f81b82828151811061217f5761217f612579565b60200101906001600160f81b031916908160001a905350806121a0816127b9565b915050612148565b50949350505050565b60006107b28410156121c257600080fd5b838383600062253d8c60046064600c6121dc600e8861294b565b6121e69190612972565b6121f2886113246129a0565b6121fc91906129a0565b6122069190612972565b6122119060036129c8565b61221b9190612972565b600c80612229600e8861294b565b6122339190612972565b61223e90600c6129c8565b61224960028861294b565b612253919061294b565b61225f9061016f6129c8565b6122699190612972565b6004600c612278600e8961294b565b6122829190612972565b61228e896112c06129a0565b61229891906129a0565b6122a4906105b56129c8565b6122ae9190612972565b6122ba617d4b8761294b565b6122c491906129a0565b6122ce91906129a0565b6122d8919061294b565b611a50919061294b565b6040518061010001604052806008905b60608152602001906001900390816122f25790505090565b60006020828403121561231c57600080fd5b5035919050565b60006102e0828403121561233657600080fd5b50919050565b60005b8381101561235757818101518382015260200161233f565b50506000910152565b602081526000825180602084015261237f81604085016020870161233c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073357600080fd5b6000602082840312156123ba57600080fd5b81356123c581612393565b9392505050565b80604081018310156102de57600080fd5b6000806000806102e08086880312156123f557600080fd5b6123ff87876123cc565b945060c086018781111561241257600080fd5b60408701945061242288826123cc565b93505086818701111561243457600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561246b57600080fd5b813567ffffffffffffffff8082111561248357600080fd5b818401915084601f83011261249757600080fd5b8135818111156124a9576124a9612443565b604051601f8201601f19908116603f011681019083821181831017156124d1576124d1612443565b816040528281528760208487010111156124ea57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561251c57600080fd5b815180151581146123c557600080fd5b6102e081016040808784378083018660005b600281101561255b5783828437918301919083019060010161253e565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806125a357607f821691505b60208210810361233657634e487b7160e01b600052602260045260246000fd5b60008083546125d18161258f565b600182811680156125e957600181146125fe5761262d565b60ff198416875282151583028701945061262d565b8760005260208060002060005b858110156126245781548a82015290840190820161260b565b50505082870194505b50929695505050505050565b6000825161264b81846020870161233c565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102de576102de612655565b601f8211156126c857600081815260208120601f850160051c810160208610156126a55750805b601f850160051c820191505b818110156126c4578281556001016126b1565b5050505b505050565b815167ffffffffffffffff8111156126e7576126e7612443565b6126fb816126f5845461258f565b8461267e565b602080601f83116001811461273057600084156127185750858301515b600019600386901b1c1916600185901b1785556126c4565b600085815260208120601f198616915b8281101561275f57888601518255948401946001909101908401612740565b508582101561277d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102de576102de612655565b818103818111156102de576102de612655565b6000600182016127cb576127cb612655565b5060010190565b80820281158282048414176102de576102de612655565b600181815b8085111561282457816000190482111561280a5761280a612655565b8085161561281757918102915b93841c93908002906127ee565b509250929050565b60008261283b575060016102de565b81612848575060006102de565b816001811461285e576002811461286857612884565b60019150506102de565b60ff84111561287957612879612655565b50506001821b6102de565b5060208310610133831016604e8410600b84101617156128a7575081810a6102de565b6128b183836127e9565b80600019048211156128c5576128c5612655565b029392505050565b60006123c5838361282c565b634e487b7160e01b600052601260045260246000fd5b600060ff831680612902576129026128d9565b8060ff84160691505092915050565b60ff81811683821601908111156102de576102de612655565b600061ffff80831681810361294157612941612655565b6001019392505050565b818103600083128015838313168383128216171561296b5761296b612655565b5092915050565b600082612981576129816128d9565b600160ff1b82146000198414161561299b5761299b612655565b500590565b80820182811260008312801582168215821617156129c0576129c0612655565b505092915050565b80820260008212600160ff1b841416156129e4576129e4612655565b81810583148215176102de576102de61265556fea26469706673582212203718a7e9e50a4f07565325df33ba83f03bd8e8f7b787577bbb0628965d0b031e64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/NullifierRegistry.json",
    "content": "{\n  \"address\": \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"nullifier\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NullifierAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_nullifier\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addNullifier\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWriters\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isNullified\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWriter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removedWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"writers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc65b7dc060d8d86eb12e134bfb83c529b096ca6220dc765f9690cabe67594366\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"transactionIndex\": 8,\n    \"gasUsed\": \"610041\",\n    \"logsBloom\": \"0x00020000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000010000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x02e704f2bc41a470fd797c0ea1482c59ecf2aac6f3862d4bc47f291805b69c04\",\n    \"transactionHash\": \"0xc65b7dc060d8d86eb12e134bfb83c529b096ca6220dc765f9690cabe67594366\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 8,\n        \"blockNumber\": 6681012,\n        \"transactionHash\": \"0xc65b7dc060d8d86eb12e134bfb83c529b096ca6220dc765f9690cabe67594366\",\n        \"address\": \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 9,\n        \"blockHash\": \"0x02e704f2bc41a470fd797c0ea1482c59ecf2aac6f3862d4bc47f291805b69c04\"\n      }\n    ],\n    \"blockNumber\": 6681012,\n    \"cumulativeGasUsed\": \"1220713\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3235f00afe52b593578a06ba6b1f711c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"nullifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NullifierAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_nullifier\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addNullifier\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWriters\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isNullified\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWriter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removedWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"writers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"params\\\":{\\\"_nullifier\\\":\\\"The nullifier to store\\\"}},\\\"addWritePermission(address)\\\":{\\\"params\\\":{\\\"_newWriter\\\":\\\"The nullifier to store\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeWritePermission(address)\\\":{\\\"params\\\":{\\\"_removedWriter\\\":\\\"The nullifier to store\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"notice\\\":\\\"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\"},\\\"addWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\"},\\\"removeWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":\\\"NullifierRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"../../external/AddressArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\\\n    event WriterAdded(address writer);\\\\n    event WriterRemoved(address writer);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyWriter() {\\\\n        require(isWriter[msg.sender], \\\\\\\"Only addresses with write permissions can call\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(bytes32 => bool) public isNullified;\\\\n    mapping(address => bool) public isWriter;\\\\n    address[] public writers;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor() Ownable() {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\\n     *\\\\n     * @param _nullifier    The nullifier to store\\\\n     */\\\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\\\n        require(!isNullified[_nullifier], \\\\\\\"Nullifier already exists\\\\\\\");\\\\n\\\\n        isNullified[_nullifier] = true;\\\\n\\\\n        emit NullifierAdded(_nullifier, msg.sender);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\\n     *\\\\n     * @param _newWriter    The nullifier to store\\\\n     */\\\\n    function addWritePermission(address _newWriter) external onlyOwner {\\\\n        require(!isWriter[_newWriter], \\\\\\\"Address is already a writer\\\\\\\");\\\\n\\\\n        isWriter[_newWriter] = true;\\\\n        writers.push(_newWriter);\\\\n\\\\n        emit WriterAdded(_newWriter);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\\n     *\\\\n     * @param _removedWriter    The nullifier to store\\\\n     */\\\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\\\n        require(isWriter[_removedWriter], \\\\\\\"Address is not a writer\\\\\\\");\\\\n\\\\n        isWriter[_removedWriter] = false;\\\\n        writers.removeStorage(_removedWriter);\\\\n\\\\n        emit WriterRemoved(_removedWriter);\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getWriters() external view returns(address[] memory) {\\\\n       return writers;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x20f773bb8f52b109301fca328369f2d5cebc8d105d2d0cf9588adccab2f9d1c8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61099f8061007e6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"params\": {\n          \"_nullifier\": \"The nullifier to store\"\n        }\n      },\n      \"addWritePermission(address)\": {\n        \"params\": {\n          \"_newWriter\": \"The nullifier to store\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"params\": {\n          \"_removedWriter\": \"The nullifier to store\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"notice\": \"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\"\n      },\n      \"addWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5807,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isNullified\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 5811,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isWriter\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 5814,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"writers\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/Poseidon3.json",
    "content": "{\n  \"address\": \"0xC87eFE0445fbA1FDb8a73553F293272B7bE91c64\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[3]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x0c165788ac1d11de9f1945f968d2853968cc01ba5c9a73db1f8e878aa1fb3d5b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xC87eFE0445fbA1FDb8a73553F293272B7bE91c64\",\n    \"transactionIndex\": 7,\n    \"gasUsed\": \"2744494\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x50241aa72fc563507c3f8022f447c57aaf650a6c4883a98bb47656835bf598e2\",\n    \"transactionHash\": \"0x0c165788ac1d11de9f1945f968d2853968cc01ba5c9a73db1f8e878aa1fb3d5b\",\n    \"logs\": [],\n    \"blockNumber\": 6680920,\n    \"cumulativeGasUsed\": \"3125490\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c6000396130af6000f37c010000000000000000000000000000000000000000000000000000000060003504806325cc70e81490635a53025d14176200003757fe5b7f236d13393ef85cc48a351dd786dd7a1de5e39942296127fd87947223ae5108ad6020527f277686494f7644bbc4a9b194e10724eb967f1dc58718e59e3cedc821b2a7ae196040527f023db68784e3f0cc0b85618826a9b3505129c16479973b0a84a4529e66b09c626060527f1d359d245f286c12d50d663bae733f978af08cdbd63017c57b3a75646ff382c16080527f2a75a171563b807db525be259699ab28fe9bc7fb1f70943ff049bc970e841a0c60a0527f083abff5e10051f078e2827d092e1ae808b4dd3e15ccc3706f38ce4157b6770e60c0527f1a5ad71bbbecd8a97dc49cfdbae303ad24d5c4741eab8b7568a9ff8253a1eb6f60e0527f0d745fd00dd167fb86772133640f02ce945004a7bc2c59e8790f725c5d84f0af610100527f2070679e798782ef592a52ca9cef820d497ad2eecbaa7e42f366b3e521c4ed42610120527f2e18c8570d20bf5df800739a53da75d906ece318cd224ab6b3a2be979e2d7eab610140527f0fa86f0f27e4d3dd7f3367ce86f684f1f2e4386d3e5b9f38fa283c6aa723b608610160527f03f3e6fab791f16628168e4b14dbaeb657035ee3da6b2ca83f0c2491e0b403eb610180527f2f545e578202c9732488540e41f783b68ff0613fd79375f8ba8b3d30958e76776101a0527f23810bf82877fc19bff7eefeae3faf4bb8104c32ba4cd701596a15623d01476e6101c0527f014fcd5eb0be6d5beeafc4944034cf321c068ef930f10be2207ed58d2a34cdd66101e0527f00c15fc3a1d5733dd835eae0823e377f8ba4a8b627627cc2bb661c25d20fb52a610200527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016044356024356004356000847f19b849f69450b06848da1d39bd5e4a4302bb86744edc26238b0878e269ed23e582089050847f265ddfe127dd51bd7239347b758f0a1320eb2cc7450acc1dad47f80c8dcf34d683089150847f199750ec472f1809e0f66a545e1e51624108ac845015c2aa3dfc36bab497d8aa84089250847f157ff3fe65ac7208110f06a5f74302b14d743ea25067f0ffd032f787c7f1cdf8850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200038160005262003015565b847f2e49c43c4569dd9c5fd35ac45fca33f10b15c590692f8beefe18f4896ac9490282089050847f0e35fb89981890520d4aef2b6d6506c3cb2f0b6973c24fa82731345ffa2d1f1e83089150847f251ad47cb15c4f1105f109ae5e944f1ba9d9e7806d667ffec6fe723002e0b99684089250847f13da07dc64d428369873e97160234641f8beb56fdd05e5f3563fa39d9c22df4e850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200045660005262003015565b847f0c009b84e650e6d23dc00c7dccef7483a553939689d350cd46e7b89055fd473882089050847f011f16b1c63a854f01992e3956f42d8b04eb650c6d535eb0203dec74befdca0683089150847f0ed69e5e383a688f209d9a561daa79612f3f78d0467ad45485df07093f36754984089250847f04dba94a7b0ce9e221acad41472b6bbe3aec507f5eb3d33f463672264c9f789b850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200052b60005262003015565b847f0a3f2637d840f3a16eb094271c9d237b6036757d4bb50bf7ce732ff1d4fa28e882089050847f259a666f129eea198f8a1c502fdb38fa39b1f075569564b6e54a485d1182323f83089150847f28bf7459c9b2f4c6d8e7d06a4ee3a47f7745d4271038e5157a32fdf7ede0d6a184089250847f0a1ca941f057037526ea200f489be8d4c37c85bbcce6a2aeec91bd6941432447850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200060060005262003015565b847f0c6f8f958be0e93053d7fd4fc54512855535ed1539f051dcb43a26fd926361cf82089050847f123106a93cd17578d426e8128ac9d90aa9e8a00708e296e084dd57e69caaf81183089150847f26e1ba52ad9285d97dd3ab52f8e840085e8fa83ff1e8f1877b074867cd2dee7584089250847f1cb55cad7bd133de18a64c5c47b9c97cbe4d8b7bf9e095864471537e6a4ae2c585089350848181808280098009099050620006b160005262003015565b847f1dcd73e46acd8f8e0e2c7ce04bde7f6d2a53043d5060a41c7143f08e6e9055d082089050847f011003e32f6d9c66f5852f05474a4def0cda294a0eb4e9b9b12b9bb4512e557483089150847f2b1e809ac1d10ab29ad5f20d03a57dfebadfe5903f58bafed7c508dd2287ae8c84089250847f2539de1785b735999fb4dac35ee17ed0ef995d05ab2fc5faeaa69ae87bcec0a5850893508481818082800980090990506200076260005262003015565b847f0c246c5a2ef8ee0126497f222b3e0a0ef4e1c3d41c86d46e43982cb11d77951d82089050847f192089c4974f68e95408148f7c0632edbb09e6a6ad1a1c2f3f0305f5d03b527b83089150847f1eae0ad8ab68b2f06a0ee36eeb0d0c058529097d91096b756d8fdc2fb5a60d8584089250847f179190e5d0e22179e46f8282872abc88db6e2fdc0dee99e69768bd98c5d06bfb850893508481818082800980090990506200081360005262003015565b847f29bb9e2c9076732576e9a81c7ac4b83214528f7db00f31bf6cafe794a9b3cd1c82089050847f225d394e42207599403efd0c2464a90d52652645882aac35b10e590e6e691e0883089150847f064760623c25c8cf753d238055b444532be13557451c087de09efd454b23fd5984089250847f10ba3a0e01df92e87f301c4b716d8a394d67f4bf42a75c10922910a78f6b5b8785089350848181808280098009099050620008c460005262003015565b847f0e070bf53f8451b24f9c6e96b0c2a801cb511bc0c242eb9d361b77693f21471c82089050847f1b94cd61b051b04dd39755ff93821a73ccd6cb11d2491d8aa7f921014de252fb83089150847f1d7cb39bafb8c744e148787a2e70230f9d4e917d5713bb050487b5aa7d74070b84089250847f2ec93189bd1ab4f69117d0fe980c80ff8785c2961829f701bb74ac1f303b17db850893508481818082800980090990506200097560005262003015565b847f2db366bfdd36d277a692bb825b86275beac404a19ae07a9082ea46bd8351792682089050847f062100eb485db06269655cf186a68532985275428450359adc99cec6960711b883089150847f0761d33c66614aaa570e7f1e8244ca1120243f92fa59e4f900c567bf41f5a59b84089250847f20fc411a114d13992c2705aa034e3f315d78608a0f7de4ccf7a72e494855ad0d8508935084818180828009800909905062000a2660005262003015565b847f25b5c004a4bdfcb5add9ec4e9ab219ba102c67e8b3effb5fc3a30f317250bc5a82089050847f23b1822d278ed632a494e58f6df6f5ed038b186d8474155ad87e7dff62b37f4b83089150847f22734b4c5c3f9493606c4ba9012499bf0f14d13bfcfcccaa16102a29cc2f69e084089250847f26c0c8fe09eb30b7e27a74dc33492347e5bdff409aa3610254413d3fad795ce58508935084818180828009800909905062000ad760005262003015565b847f070dd0ccb6bd7bbae88eac03fa1fbb26196be3083a809829bbd626df348ccad982089050847f12b6595bdb329b6fb043ba78bb28c3bec2c0a6de46d8c5ad6067c4ebfd4250da83089150847f248d97d7f76283d63bec30e7a5876c11c06fca9b275c671c5e33d95bb7e8d72984089250847f1a306d439d463b0816fc6fd64cc939318b45eb759ddde4aa106d15d9bd9baaaa8508935084818180828009800909905062000b8860005262003015565b847f28a8f8372e3c38daced7c00421cb4621f4f1b54ddc27821b0d62d3d6ec7c56cf82089050847f0094975717f9a8a8bb35152f24d43294071ce320c829f388bc852183e1e2ce7e83089150847f04d5ee4c3aa78f7d80fde60d716480d3593f74d4f653ae83f4103246db2e8d6584089250847f2a6cf5e9aa03d4336349ad6fb8ed2269c7bef54b8822cc76d08495c12efde1878508935084818180828009800909905062000c3960005262003015565b847f2304d31eaab960ba9274da43e19ddeb7f792180808fd6e43baae48d7efcba3f382089050847f03fd9ac865a4b2a6d5e7009785817249bff08a7e0726fcb4e1c11d39d199f0b083089150847f00b7258ded52bbda2248404d55ee5044798afc3a209193073f7954d4d63b0b6484089250847f159f81ada0771799ec38fca2d4bf65ebb13d3a74f3298db36272c5ca65e92d9a8508935084818180828009800909905062000cea60005262003015565b847f1ef90e67437fbc8550237a75bc28e3bb9000130ea25f0c5471e144cf4264431f82089050847f1e65f838515e5ff0196b49aa41a2d2568df739bc176b08ec95a79ed82932e30d83089150847f2b1b045def3a166cec6ce768d079ba74b18c844e570e1f826575c1068c94c33f84089250847f0832e5753ceb0ff6402543b1109229c165dc2d73bef715e3f1c6e07c168bb1738508935084818180828009800909905062000d9b60005262003015565b847f02f614e9cedfb3dc6b762ae0a37d41bab1b841c2e8b6451bc5a8e3c390b6ad1682089050847f0e2427d38bd46a60dd640b8e362cad967370ebb777bedff40f6a0be27e7ed70583089150847f0493630b7c670b6deb7c84d414e7ce79049f0ec098c3c7c50768bbe29214a53a84089250847f22ead100e8e482674decdab17066c5a26bb1515355d5461a3dc06cc85327cea98508935084818180828009800909905062000e4c60005262003015565b847f25b3e56e655b42cdaae2626ed2554d48583f1ae35626d04de5084e0b6d2a6f1682089050847f1e32752ada8836ef5837a6cde8ff13dbb599c336349e4c584b4fdc0a0cf6f9d083089150847f2fa2a871c15a387cc50f68f6f3c3455b23c00995f05078f672a9864074d412e584089250847f2f569b8a9a4424c9278e1db7311e889f54ccbf10661bab7fcd18e7c7a7d835058508935084818180828009800909905062000efd60005262003015565b847f044cb455110a8fdd531ade530234c518a7df93f7332ffd2144165374b246b43d82089050847f227808de93906d5d420246157f2e42b191fe8c90adfe118178ddc723a531902583089150847f02fcca2934e046bc623adead873579865d03781ae090ad4a8579d2e7a680035584089250847f0ef915f0ac120b876abccceb344a1d36bad3f3c5ab91a8ddcbec2e060d8befac8508935084818180828009800909905062000fae60005262003015565b847f1797130f4b7a3e1777eb757bc6f287f6ab0fb85f6be63b09f3b16ef2b1405d3882089050847f0a76225dc04170ae3306c85abab59e608c7f497c20156d4d36c668555decc6e583089150847f1fffb9ec1992d66ba1e77a7b93209af6f8fa76d48acb664796174b5326a31a5c84089250847f25721c4fc15a3f2853b57c338fa538d85f8fbba6c6b9c6090611889b797b9c5f850893508481818082800980090990506200105f60005262003015565b847f0c817fd42d5f7a41215e3d07ba197216adb4c3790705da95eb63b982bfcaf75a82089050847f13abe3f5239915d39f7e13c2c24970b6df8cf86ce00a22002bc15866e52b5a9683089150847f2106feea546224ea12ef7f39987a46c85c1bc3dc29bdbd7a92cd60acb4d391ce84089250847f21ca859468a746b6aaa79474a37dab49f1ca5a28c748bc7157e1b3345bb0f959850893508481818082800980090990506200111060005262003015565b847f05ccd6255c1e6f0c5cf1f0df934194c62911d14d0321662a8f1a48999e34185b82089050847f0f0e34a64b70a626e464d846674c4c8816c4fb267fe44fe6ea28678cb09490a483089150847f0558531a4e25470c6157794ca36d0e9647dbfcfe350d64838f5b1a8a2de0d4bf84089250847f09d3dca9173ed2faceea125157683d18924cadad3f655a60b72f5864961f145585089350848181808280098009099050620011c160005262003015565b847f0328cbd54e8c0913493f866ed03d218bf23f92d68aaec48617d4c722e5bd433582089050847f2bf07216e2aff0a223a487b1a7094e07e79e7bcc9798c648ee3347dd5329d34b83089150847f1daf345a58006b736499c583cb76c316d6f78ed6a6dffc82111e11a63fe412df84089250847f176563472456aaa746b694c60e1823611ef39039b2edc7ff391e6f2293d2c404850893508481818082800980090990506200127260005262003015565b847f2ef1e0fad9f08e87a3bb5e47d7e33538ca964d2b7d1083d4fb0225035bd3f8db82089050847f226c9b1af95babcf17b2b1f57c7310179c1803dec5ae8f0a1779ed36c817ae2a83089150847f14bce3549cc3db7428126b4c3a15ae0ff8148c89f13fb35d35734eb5d4ad0def84089250847f2debff156e276bb5742c3373f2635b48b8e923d301f372f8e550cfd4034212c7850893508481818082800980090990506200132360005262003015565b847f2d4083cf5a87f5b6fc2395b22e356b6441afe1b6b29c47add7d0432d1d4760c782089050847f0c225b7bcd04bf9c34b911262fdc9c1b91bf79a10c0184d89c317c53d7161c2983089150847f03152169d4f3d06ec33a79bfac91a02c99aa0200db66d5aa7b835265f9c9c8f384089250847f0b61811a9210be78b05974587486d58bddc8f51bfdfebbb87afe8b7aa7d3199c85089350848181808280098009099050620013d460005262003015565b847f203e000cad298daaf7eba6a5c5921878b8ae48acf7048f16046d637a533b6f7882089050847f1a44bf0937c722d1376672b69f6c9655ba7ee386fda1112c0757143d1bfa914683089150847f0376b4fae08cb03d3500afec1a1f56acb8e0fde75a2106d7002f59c5611d4daa84089250847f00780af2ca1cad6465a2171250fdfc32d6fc241d3214177f3d553ef363182185850893508481818082800980090990506200148560005262003015565b847f10774d9ab80c25bdeb808bedfd72a8d9b75dbe18d5221c87e9d857079bdc31d582089050847f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e883089150847f00544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac1684089250847f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428c850893508481818082800980090990506200153660005262003015565b847f2840d045e9bc22b259cfb8811b1e0f45b77f7bdb7f7e2b46151a1430f608e3c582089050847f062752f86eebe11a009c937e468c335b04554574c2990196508e01fa5860186b83089150847f06041bdac48205ac87adb87c20a478a71c9950c12a80bc0a55a8e83eaaf0474684089250847f04a533f236c422d1ff900a368949b0022c7a2ae092f308d82b1dcbbf51f5000d85089350848181808280098009099050620015e760005262003015565b847f13e31d7a67232fd811d6a955b3d4f25dfe066d1e7dc33df04bde50a2b2d05b2a82089050847f011c2683ae91eb4dfbc13d6357e8599a9279d1648ff2c95d2f79905bb13920f183089150847f0b0d219346b8574525b1a270e0b4cba5d56c928e3e2c2bd0a1ecaed015aaf6ae84089250847f14abdec8db9c6dc970291ee638690209b65080781ef9fd13d84c7a726b5f1364850893508481818082800980090990506200169860005262003015565b847f1a0b70b4b26fdc28fcd32aa3d266478801eb12202ef47ced988d0376610be10682089050847f278543721f96d1307b6943f9804e7fe56401deb2ef99c4d12704882e7278b60783089150847f16eb59494a9776cf57866214dbd1473f3f0738a325638d8ba36535e011d5825984089250847f2567a658a81ffb444f240088fa5524c69a9e53eeab6b7f8c41c3479dcf8c644a850893508481818082800980090990506200174960005262003015565b847f29aa1d7c151e9ad0a7ab39f1abd9cf77ab78e0215a5715a6b882ade840bb13d882089050847f15c091233e60efe0d4bbfce2b36415006a4f017f9a85388ce206b91f99f2c98483089150847f16bd7d22ff858e5e0882c2c999558d77e7673ad5f1915f9feb679a8115f014cf84089250847f02db50480a07be0eb2c2e13ed6ef4074c0182d9b668b8e08ffe676925004202585089350848181808280098009099050620017fa60005262003015565b847f05e4a220e6a3bc9f7b6806ec9d6cdba186330ef2bf7adb4c13ba866343b7311982089050847f1dda05ebc30170bc98cbf2a5ee3b50e8b5f70bc424d39fa4104d37f1cbcf7a4283089150847f0184bef721888187f645b6fee3667f3c91da214414d89ba5cd301f22b0de899084089250847f1498a307e68900065f5e8276f62aef1c37414b84494e1577ad1a6d64341b78ec85089350848181808280098009099050620018ab60005262003015565b847f25f40f82b31dacc4f4939800b9d2c3eacef737b8fab1f864fe33548ad46bd49d82089050847f09d317cc670251943f6f5862a30d2ea9e83056ce4907bfbbcb1ff31ce5bb965083089150847f2f77d77786d979b23ba4ce4a4c1b3bd0a41132cd467a86ab29b913b6cf3149d084089250847f0f53dafd535a9f4473dc266b6fccc6841bbd336963f254c152f89e785f729bbf850893508481818082800980090990506200195c60005262003015565b847f25c1fd72e223045265c3a099e17526fa0e6976e1c00baf16de96de85deef2fa282089050847f2a902c8980c17faae368d385d52d16be41af95c84eaea3cf893e65d6ce4a8f6283089150847f1ce1580a3452ecf302878c8976b82be96676dd114d1dc8d25527405762f8352984089250847f24a6073f91addc33a49a1fa306df008801c5ec569609034d2fc50f7f0f4d00568508935084818180828009800909905062001a0d60005262003015565b847f25e52dbd6124530d9fc27fe306d71d4583e07ca554b5d1577f256c68b0be2b7482089050847f23dffae3c423fa7a93468dbccfb029855974be4d0a7b29946796e5b6cd70f15d83089150847f06342da370cc0d8c49b77594f6b027c480615d50be36243a99591bc9924ed6f584089250847f2754114281286546b75f09f115fc751b4778303d0405c1b4cc7df0d8e9f639258508935084818180828009800909905062001abe60005262003015565b847f15c19e8534c5c1a8862c2bc1d119eddeabf214153833d7bdb59ee197f8187cf582089050847f265fe062766d08fab4c78d0d9ef3cabe366f3be0a821061679b4b3d2d77d5f3e83089150847f13ccf689d67a3ec9f22cb7cd0ac3a327d377ac5cd0146f048debfd098d3ec7be84089250847f17662f7456789739f81cd3974827a887d92a5e05bdf3fe6b9fbccca4524aaebd8508935084818180828009800909905062001b6f60005262003015565b847f21b29c76329b31c8ef18631e515f7f2f82ca6a5cca70cee4e809fd624be7ad5d82089050847f18137478382aadba441eb97fe27901989c06738165215319939eb17b01fa975c83089150847f2bc07ea2bfad68e8dc724f5fef2b37c2d34f761935ffd3b739ceec4668f37e8884089250847f2ddb2e376f54d64a563840480df993feb4173203c2bd94ad0e602077aef9a03e8508935084818180828009800909905062001c2060005262003015565b847f277eb50f2baa706106b41cb24c602609e8a20f8d72f613708adb25373596c3f782089050847f0d4de47e1aba34269d0c620904f01a56b33fc4b450c0db50bb7f87734c9a1fe583089150847f0b8442bfe9e4a1b4428673b6bd3eea6f9f445697058f134aae908d0279a29f0c84089250847f11fe5b18fbbea1a86e06930cb89f7d4a26e186a65945e96574247fddb720f8f58508935084818180828009800909905062001cd160005262003015565b847f224026f6dfaf71e24d25d8f6d9f90021df5b774dcad4d883170e4ad89c33a0d682089050847f0b2ca6a999fe6887e0704dad58d03465a96bc9e37d1091f61bc9f9c62bbeb82483089150847f221b63d66f0b45f9d40c54053a28a06b1d0a4ce41d364797a1a7e0c96529f42184089250847f30185c48b7b2f1d53d4120801b047d087493bce64d4d24aedce2f4836bb84ad48508935084818180828009800909905062001d8260005262003015565b847f23f5d372a3f0e3cba989e223056227d3533356f0faa48f27f8267318632a61f082089050847f2716683b32c755fd1bf8235ea162b1f388e1e0090d06162e8e6dfbe4328f3e3b83089150847f0977545836866fa204ca1d853ec0909e3d140770c80ac67dc930c69748d5d4bc84089250847f1444e8f592bdbfd8025d91ab4982dd425f51682d31472b05e81c43c0f9434b318508935084818180828009800909905062001e3360005262003015565b847f26e04b65e9ca8270beb74a1c5cb8fee8be3ffbfe583f7012a00f874e7718fbe382089050847f22a5c2fa860d11fe34ee47a5cd9f869800f48f4febe29ad6df69816fb1a914d283089150847f174b54d9907d8f5c6afd672a738f42737ec338f3a0964c629f7474dd44c5c8d784089250847f1db1db8aa45283f31168fa66694cf2808d2189b87c8c8143d56c871907b39b878508935084818180828009800909905062001ee460005262003015565b847f1530bf0f46527e889030b8c7b7dfde126f65faf8cce0ab66387341d813d1bfd182089050847f0b73f613993229f59f01c1cec8760e9936ead9edc8f2814889330a2f2bade45783089150847f29c25a22fe2164604552aaea377f448d587ab977fc8227787bd2dc0f36bcf41e84089250847f2b30d53ed1759bfb8503da66c92cf4077abe82795dc272b377df57d77c8755268508935084818180828009800909905062001f9560005262003015565b847f12f6d703b5702aab7b7b7e69359d53a2756c08c85ede7227cf5f0a2916787cd282089050847f2520e18300afda3f61a40a0b8837293a55ad01071028d4841ffa9ac70636411383089150847f1ec9daea860971ecdda8ed4f346fa967ac9bc59278277393c68f09fa03b8b95f84089250847f0a99b3e178db2e2e432f5cd5bef8fe4483bf5cbf70ed407c08aae24b830ad725850893508481818082800980090990506200204660005262003015565b847f07cda9e63db6e39f086b89b601c2bbe407ee0abac3c817a1317abad7c577849282089050847f08c9c65a4f955e8952d571b191bb0adb49bd8290963203b35d48aab38f8fc3a383089150847f2737f8ce1d5a67b349590ddbfbd709ed9af54a2a3f2719d33801c9c17bdd9c9e84089250847f1049a6c65ff019f0d28770072798e8b7909432bd0c129813a9f179ba627f7d6a85089350848181808280098009099050620020f760005262003015565b847f18b4fe968732c462c0ea5a9beb27cecbde8868944fdf64ee60a5122361daeddb82089050847f2ff2b6fd22df49d2440b2eaeeefa8c02a6f478cfcf11f1b2a4f7473483885d1983089150847f2ec5f2f1928fe932e56c789b8f6bbcb3e8be4057cbd8dbd18a1b352f5cef42ff84089250847f265a5eccd8b92975e33ad9f75bf3426d424a4c6a7794ee3f08c1d100378e545e85089350848181808280098009099050620021a860005262003015565b847f2405eaa4c0bde1129d6242bb5ada0e68778e656cfcb366bf20517da1dfd4279c82089050847f094c97d8c194c42e88018004cbbf2bc5fdb51955d8b2d66b76dd98a2dbf6041783089150847f2c30d5f33bb32c5c22b9979a605bf64d508b705221e6a686330c9625c2afe0b884089250847f01a75666f6241f6825d01cc6dcb1622d4886ea583e87299e6aa2fc716fdb6cf5850893508481818082800980090990506200225960005262003015565b847f0a3290e8398113ea4d12ac091e87be7c6d359ab9a66979fcf47bf2e87d382fcb82089050847f154ade9ca36e268dfeb38461425bb0d8c31219d8fa0dfc75ecd21bf69aa0cc7483089150847f27aa8d3e25380c0b1b172d79c6f22eee99231ef5dc69d8dc13a4b5095d02877284089250847f2cf4051e6cab48301a8b2e3bca6099d756bbdf485afa1f549d395bbcbd806461850893508481818082800980090990506200230a60005262003015565b847f301e70f729f3c94b1d3f517ddff9f2015131feab8afa5eebb0843d7f84b23e7182089050847f298beb64f812d25d8b4d9620347ab02332dc4cef113ae60d17a8d7a4c91f83bc83089150847f1b362e72a5f847f84d03fd291c3c471ed1c14a15b221680acf11a3f02e46aa9584089250847f0dc8a2146110c0b375432902999223d5aa1ef6e78e1e5ebcbc1d9ba41dc1c73785089350848181808280098009099050620023bb60005262003015565b847f0a48663b34ce5e1c05dc93092cb69778cb21729a72ddc03a08afa1eb922ff27982089050847f0a87391fb1cd8cdf6096b64a82f9e95f0fe46f143b702d74545bb314881098ee83089150847f1b5b2946f7c28975f0512ff8e6ca362f8826edd7ea9c29f382ba8a2a0892fd5d84089250847f01001cf512ac241d47ebe2239219bc6a173a8bbcb8a5b987b4eac1f533315b6b850893508481818082800980090990506200246c60005262003015565b847f2fd977c70f645db4f704fa7d7693da727ac093d3fb5f5febc72beb17d8358a3282089050847f23c0039a3fab4ad3c2d7cc688164f39e761d5355c05444d99be763a97793a9c483089150847f19d43ee0c6081c052c9c0df6161eaac1aec356cf435888e79f27f22ff03fa25d84089250847f2d9b10c2f2e7ac1afddccffd94a563028bf29b646d020830919f9d5ca1cefe59850893508481818082800980090990506200251d60005262003015565b847f2457ca6c2f2aa30ec47e4aff5a66f5ce2799283e166fc81cdae2f2b9f83e426782089050847f0abc392fe85eda855820592445094022811ee8676ed6f0c3044dfb54a7c10b3583089150847f19d2cc5ca549d1d40cebcd37f3ea54f31161ac3993acf3101d2c2bc30eac1eb084089250847f0f97ae3033ffa01608aafb26ae13cd393ee0e4ec041ba644a3d3ab546e98c9c885089350848181808280098009099050620025ce60005262003015565b847f16dbc78fd28b7fb8260e404cf1d427a7fa15537ea4e168e88a166496e88cfeca82089050847f240faf28f11499b916f085f73bc4f22eef8344e576f8ad3d1827820366d5e07b83089150847f0a1bb075aa37ff0cfe6c8531e55e1770eaba808c8fdb6dbf46f8cab58d9ef1af84089250847f2e47e15ea4a47ff1a6a853aaf3a644ca38d5b085ac1042fdc4a705a7ce089f4d850893508481818082800980090990506200267f60005262003015565b847f166e5bf073378348860ca4a9c09d39e1673ab059935f4df35fb14528375772b682089050847f18b42d7ffdd2ea4faf235902f057a2740cacccd027233001ed10f96538f0916f83089150847f089cb1b032238f5e4914788e3e3c7ead4fc368020b3ed38221deab1051c3770284089250847f242acd3eb3a2f72baf7c7076dd165adf89f9339c7b971921d9e70863451dd8d1850893508481818082800980090990506200273060005262003015565b847f174fbb104a4ee302bf47f2bd82fce896eac9a068283f326474af860457245c3b82089050847f17340e71d96f466d61f3058ce092c67d2891fb2bb318613f780c275fe1116c6b83089150847f1e8e40ac853b7d42f00f2e383982d024f098b9f8fd455953a2fd380c4df7f6b284089250847f0529898dc0649907e1d4d5e284b8d1075198c55cad66e8a9bf40f92938e2e96185089350848181808280098009099050620027e160005262003015565b847f2162754db0baa030bf7de5bb797364dce8c77aa017ee1d7bf65f21c4d4e5df8f82089050847f12c7553698c4bf6f3ceb250ae00c58c2a9f9291efbde4c8421bef44741752ec683089150847f292643e3ba2026affcb8c5279313bd51a733c93353e9d9c79cb723136526508e84089250847f00ccf13e0cb6f9d81d52951bea990bd5b6c07c5d98e66ff71db6e74d5b87d158850893508481818082800980090990506200289260005262003015565b847f185d1e20e23b0917dd654128cf2f3aaab6723873cb30fc22b0f86c15ab645b4b82089050847f14c61c836d55d3df742bdf11c60efa186778e3de0f024c0f13fe53f8d8764e1f83089150847f0f356841b3f556fce5dbe4680457691c2919e2af53008184d03ee1195d72449e84089250847f1b8fd9ff39714e075df124f887bf40b383143374fd2080ba0c0a6b6e8fa5b3e8850893508481818082800980090990506200294360005262003015565b847f0e86a8c2009c140ca3f873924e2aaa14fc3c8ae04e9df0b3e9103418796f602482089050847f2e6c5e898f5547770e5462ad932fcdd2373fc43820ca2b16b0861421e79155c883089150847f05d797f1ab3647237c14f9d1df032bc9ff9fe1a0ecd377972ce5fd5a0c01460484089250847f29a3110463a5aae76c3d152875981d0c1daf2dcd65519ef5ca8929851da8c00885089350848181808280098009099050620029f460005262003015565b847f2974da7bc074322273c3a4b91c05354cdc71640a8bbd1f864b732f816388331482089050847f1ed0fb06699ba249b2a30621c05eb12ca29cb91aa082c8bfcce9c522889b47dc83089150847f1c793ef0dcc51123654ff26d8d863feeae29e8c572eca912d80c8ae36e40fe9b84089250847f1e6aac1c6d3dd3157956257d3d234ef18c91e82589a78169fbb4a8770977dc2f8508935084818180828009800909905062002aa560005262003015565b847f1a20ada7576234eee6273dd6fa98b25ed037748080a47d948fcda33256fb6bf582089050847f191033d6d85ceaa6fc7a9a23a6fd9996642d772045ece51335d49306728af96c83089150847f006e5979da7e7ef53a825aa6fddc3abfc76f200b3740b8b232ef481f5d06297b84089250847f0b0d7e69c651910bbef3e68d417e9fa0fbd57f596c8f29831eff8c0174cdb06d8508935084818180828009800909905062002b5660005262003015565b847f25caf5b0c1b93bc516435ec084e2ecd44ac46dbbb033c5112c4b20a25c9cdf9d82089050847f12c1ea892cc31e0d9af8b796d9645872f7f77442d62fd4c8085b2f150f72472a83089150847f16af29695157aba9b8bbe3afeb245feee5a929d9f928b9b81de6dadc78c32aae84089250847f0136df457c80588dd687fb2f3be18691705b87ec5a4cfdc168d31084256b67dc8508935084818180828009800909905062002c0760005262003015565b847f1639a28c5b4c81166aea984fba6e71479e07b1efbc74434db95a285060e7b08982089050847f03d62fbf82fd1d4313f8e650f587ec06816c28b700bdc50f7e232bd9b5ca9b7683089150847f11aeeb527dc8ce44b4d14aaddca3cfe2f77a1e40fc6da97c249830de1edfde5484089250847f13f9b9a41274129479c5e6138c6c8ee36a670e6bc68c7a49642b645807bfc8248508935084818180828009800909905062002cb860005262003015565b847f0e4772fa3d75179dc8484cd26c7c1f635ddeeed7a939440c506cae8b7ebcd15b82089050847f1b39a00cbc81e427de4bdec58febe8d8b5971752067a612b39fc46a68c5d4db483089150847f2bedb66e1ad5a1d571e16e2953f48731f66463c2eb54a245444d1c0a3a25707e84089250847f2cf0a09a55ca93af8abd068f06a7287fb08b193b608582a27379ce35da915dec8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002d8d60005262003015565b847f2d1bd78fa90e77aa88830cabfef2f8d27d1a512050ba7db0753c8fb863efb38782089050847f065610c6f4f92491f423d3071eb83539f7c0d49c1387062e630d7fd283dc339483089150847f2d933ff19217a5545013b12873452bebcc5f9969033f15ec642fb464bd60736884089250847f1aa9d3fe4c644910f76b92b3e13b30d500dae5354e79508c3c49c8aa99e0258b8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002e6260005262003015565b847f027ef04869e482b1c748638c59111c6b27095fa773e1aca078cea1f1c8450bdd82089050847f2b7d524c5172cbbb15db4e00668a8c449f67a2605d9ec03802e3fa136ad0b8fb83089150847f0c7c382443c6aa787c8718d86747c7f74693ae25b1e55df13f7c3c1dd735db0f84089250847f00b4567186bc3f7c62a7b56acf4f76207a1f43c2d30d0fe4a627dcdd9bd790788508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002f3760005262003015565b847f1e41fc29b825454fe6d61737fe08b47fb07fe739e4c1e61d0337490883db4fd582089050847f12507cd556b7bbcc72ee6dafc616584421e1af872d8c0e89002ae8d3ba0653b683089150847f13d437083553006bcef312e5e6f52a5d97eb36617ef36fe4d77d3e97f71cb5db84089250847f163ec73251f85443687222487dda9a65467d90b22f0b38664686077c6a4486d5850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200300c60005262003015565b60005260206000f35b8460205182098560405184098691088560605185098691088560805186098691088560a05183098660c05185098791088660e05186098791088661010051870987910886610120518409876101405186098891088761016051870988910887610180518809889108876101a0518509886101c0518709899108886101e051880989910888610200518909899108965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/Poseidon6.json",
    "content": "{\n  \"address\": \"0xcEC79FdDBaA7C9cfed2E9AD23Bb272c71e7E2144\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[6]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[6]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x2010dd17c8cde6035e285e9b1acb103490eeb3f903927b95fa6a6212cb946f50\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xcEC79FdDBaA7C9cfed2E9AD23Bb272c71e7E2144\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"5162502\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xc1076487fd973c04386873dd5a741b818832e90677123f7e96299736d054a293\",\n    \"transactionHash\": \"0x2010dd17c8cde6035e285e9b1acb103490eeb3f903927b95fa6a6212cb946f50\",\n    \"logs\": [],\n    \"blockNumber\": 9279013,\n    \"cumulativeGasUsed\": \"5226515\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c600039615c596000f37c0100000000000000000000000000000000000000000000000000000000600035048063f5b4a7881490636afa4b7a14176200003757fe5b7f2abd9e16b7b48289aa19cdfec726fa3fa15cc1625102ae511bca45f39d337e9d6020527f1b4bc5885d1cfc8eb691875300db5a0c7362ae381898acaf8b63cad04ecb36c66040527f08a72fbb55dde3e93c5818571a424a54953695029eedbcf91eaeb012751c7f836060527f0f95359a1f6845d4921892f83e500bbb1b3d3763d8fc762400af039b0abb83f56080527f16f01751ce985328afde34d81619defb43e6c7b5dadf52d0f82472fbce7770d960a0527f1c391626328457fcafa629f3e6d33e2555e8d885e3c07cecc8af1f4d5659641760c0527f00970f671b9ba35e3e3c642d1e0b8032023ed5bac91c2c1056f03965a42c529760e0527f1fe9feb5c7f7c7a426bff032cd6a3158278b6c6b2cc57a871213fcafd6427989610100527f0cc7eabb154aa7955eac47a19f6437a2b8dec0fe9e5686150ff6e88b1a7b4bc4610120527f0393efd96399aa0726ef9af79be8b6c715e429906ca0d15076b5a990fea75ace610140527f0871233835b752ea030cf8a4f43771296eeb33f697d1b0825db47d39ac9e5955610160527f1a02798f047a51baaea34fcfb26ca6afe96a5fad1d2db4270497b6e6504891cb610180527f055665d76df3cd0fcb713c234ea79d06a31d6e3e4c3bcc657dba4c664d5a0da06101a0527f26ee9691a638edc7c91887e302fc55e8e7758286a44845ad88fd7de3bb1052c16101c0527f00cdb2db9e4f9d732d217c5e3114821165d49e5a2d41556bcd53d0c4d433224c6101e0527f012f3bb29c972793182123f5c49306e16a3a787c4bcd9c798a131b70856d1cbe610200527f0bba9006404c5ede82b527677daf444ed43fd1e0dbdc5528dd2cd1f17ad73481610220527f17e4e73bf701f88d219acf1ca6390cc1e17c9f84b1713820837ca070be84a2dc610240527f234b8a077ef52b53a343b8da5b20cc358ad60760dd60276d485015f73d53d207610260527f2dc3fd77394b7b5ac1cbd1b46e6ded5b835d7217a4c50a487ae9a35a7fd45d9d610280527f1668477640fab14c72b1c16ff0192e48cf882f12276bd12f97f82c6ee2e61e486102a0527f09664216ca565c1a44fc2b98347ea8b36904b3877f2159dcc999895adeb4d70b6102c0527f111fd8dfce2bd3b7ba0cfa93e20fb685abf76d77305857b8df30914e4849ecef6102e0527f19f53c0a592b3ea93497a511e56f66753598265b1ab6774da48eec04e4d93426610300527f19b683c39d3b002fc3523b7bee5a60148b1dbdf18dd1c318e6a541e8cf66a174610320527f2547113a818779f13e3448719c7ef100b8036bb3e882dd5e6456c35311c1bd5b610340527f00cf148f8045cdbe7bb1013f72ebd4126a3e35cba9a970441ba8d5bc76943b0b610360527f3008421eed767a093322a09c3733973a038168cb28cd2e1f709076c00b869599610380527f1463f51d4a4cb1eba16dbc115566aa48fe77b43c244c9988a3c658d2f56493d66103a0527f16afd8f4c39038b8006a59d292aea84731c0f83832a61b82250ed90118e8fec26103c0527f2296361f3bf154efbab996921936e9b1dff8352711f958638172055333e075796103e0527f1c3160ebaeb10f809f69843cf8d5bbaca198d1f8e3439be29beb92d909ec891c610400527f094c66bdcff54382cd9213abe43312edb5b4d414c6e09acca24912a7635404c6610420527f2e883bd408c4c826d004ff777d7c0938434ab5bb84f3420e5d94b853b1746f89610440527f228af6d425e91a783dd18fd89a6b38bda053f2f23c094b875f27cb3abba2030b610460527f214e41788bd2b990347c7f2a8f47612d4dfceb1a1e6da38165873df66ce51f59610480527f03fba82d3f783620873da94e9f4e84c8b529d76f54e4b5d7d4805272af9b97756104a0527f066782fe3e869de2cebd7ebbf60fb435785329dfb12ad9bd1b4e46ed362895116104c0527f1c5cd6b23ef336be01efa37a27e6b7aae5d1643fceeb212cdff51588835fb5376104e0527f2f3b4bf0f105f88e27248af094e29feed9ff3fad9a794e15830bd2b311539453610500527f2f4085eaa9f80a69b739fc23f2fe4057f64729b311783fcfab3a0a36fc1ff432610520527f2363603349e94f520fa1f98fe2507f6aae361934078aa59a16214c088185638b610540527f0548541724f64e20128260899abe8fbcdff184a1957a9385fb715923bf0fc79d610560527f21c5e25a6991364e59a205e5b01c811deeb095680a72928369cfd2de71b14f98610580527f11c5cc53f6338c825817aff7792a2efbce8fff171300d41455a2edac37663d026105a0527f27a0949fdc9f10495c4ee7214aa0edd2ad8eef68f577da8b96f9d87a39504bf96105c0527f1c7fc68f3fbde4a23c455ef0d0dbce0ce556a0194e6d552c0455cbb5b0c230e26105e0527f11d0f56fc00e7d85b3a2939fd33991dc8abc1ced0c3f3c530cbfb4500d63de9c610600527f01b2e9d20d9b55deb048cabe1636f0e96363bec886679cbd91f332fb2bade44f610620527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a4356084356064356044356024356004356000877f2197703fceb4cbf07c6dbf46c4ad93e7d14e554db66d09102ff84824743fe4e782089050877f1322f0fffc7e4854bd8b5fc23e7106b51f59bd5061d8b565aca2fd3efe512f7983089150877f19e414f80380aa2d222133118c337d82a8c5894c2f88861ee46f448fa9d6135984089250877f22241199a4df9cb7d65249d9562cad6c65f16460e79a7939cbfdd6d7b9209d9a85089350877f0301061735384dfcecf9a311c22ade327b51c78b211615f41c77f6d85e8a41b686089450877f229e1d86c1f2810f4a2633b7b4b5bb61b7dc5d19ac95fd8d379548ff2b6850ee87089550877f0e31dcf9c53209a817eeb292e989727c3f56bff65883afe5fdc28ac3dfbea67588089650878181808280098009099050878281808280098009099150878381808280098009099250878481808280098009099350878581808280098009099450878681808280098009099550878781808280098009099650620008e560005262005a78565b877f222c7318ebe96306c9d79ac11237263c6b8eb25272eb88407e8c29a358b40f2a82089050877f0cb416b42c53a829cf4fc823be8f4fedd12593394cd529053ff4e3604974a2c683089150877f0892729d09594a8d8b1adfbf2e2ed75399dee612842b6db3d2d2c2aaddb6c0aa84089250877f18e39e9ae45f14ba97a15bd672711ae124375d9f482a4487a0e334dee2d27c7185089350877f2560c9ff672e6ea69dbb33844d0d22870461d18eaf0f8992d4d7ac649edd661086089450877f21bee2b8ed54b726ef17f77366b1dcfbda7ccf1e487f9916e5f963e814c5731287089550877f300e1b28dabebdc0d4bdbc19be29a3dee4eda8425dd0c7c6e82fec147cb070ba8808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000a5060005262005a78565b877f2c44a5ff45deea69dd2961d67011af4982b9405f9fe38de4a732d2aeae88cc2382089050877f0c8d59fe1b7f55095e6aaad9e3b4e7b1c93d876ba3234dd1ac5ec64108291bfd83089150877f06cf82bc5fd115d348a30b0c45378d90cca1660446ba049759fa53103fcd78b584089250877f2f80ed01a2118d02e2145111c3fe6ca70efdf95d8abeaee8829293347dc9061c85089350877f0bdfe7f6803e4dee7b026e079075908cb8414e3d651dd12fda67df08dded9e4286089450877f06cc48ed882405595b34d39138f50bb5b31a963a0dba66aef17c19ad622e29b187089550877f2a67f3ba6d15949932ac5622cf9e2b493801bf16a50336a4518258bcc6867c958808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000bbb60005262005a78565b877f2572725a67c60718df656934aa78fbeb80c8f395aeb6a20cd833c4b14fef412a82089050877f03bb7f6ca43545b11f19721265b416166579cb753330b1879b79685d1df0bfa783089150877f2412815e863f8f3bc28bfcbb957faa5f393300b25133e9221b8eb3156ed5c12b84089250877f0dbf64d58df212e4307871966de097a5db09a93e5bc305cebdcd0630f433af4585089350877f274c06c01158e047ff4a791e25b7bb3db190529df8f50b6386273f810f15c6ab86089450877f23cf40693f52abf0ed3d842f7bc85d1a2111d0abecfc18acd0fe3991ee5fd33d87089550877f1daaa926528f3368f4e4cf924166b8bd3ff8daefbcf900e6dcc4ee63c40996988808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000d2660005262005a78565b877f10103789dc9471ad718657bebb6781e39bd92fd20ee1a32d0de3ea2817a0155582089050877f0009bc25065080e6c6e9932e34bfde78d1085f19e9ffc8965a4660a4d9b6d60783089150877f1312c727cb5489bb174e1dcb82588edfab31a2999b377dabece466e9dcd6afee84089250877f20294a462c7d0c25aeb5374618e5e77316682ae3d726824f15f00f7cb9a7009f85089350877f25e0c6be89bbb04bd8391c90cf35588f0e9d73fdb06259f47a05513ad7a23e9186089450877f0084a0b87e0b336c9a911069f89d875a38be313efc420d28b9ec287f28810fd387089550877f28a03ee29f612aab268f76241d54d477a1d97f5807ba2e1812f4d350d7c6f7da8808965087818180828009800909905062000e4960005262005a78565b877f0b6794182b723a12e0b35f76bd55a7d106ee6a4035527c4d329a6f33068d7eda82089050877f015b9a698465428fc686b79db4959c8495b92b85122f6a6932940836facea86d83089150877f1bfe52289f811f5c3619f14866138ae9a1279bb76e8cec9a8936fdc36f59df7b84089250877f1cd574fe8d5e4c428b92b23a9717342176e1d309a7e259052c31bdc9af091fa385089350877f212d1bbdfaaf0200735bc5851a156adcbfa4f607f5da122e1f63afaecd38cab786089450877f0b0479e28820e883d903a951f95b13093788e9e1ca64ddf2abb94b13fee9edbc87089550877f0110f5257c21c9379d73b76e9ca95c513c77a15cc8ee0ef726d8460d4fbbdaaa8808965087818180828009800909905062000f6c60005262005a78565b877f08c52e9401a9764f0c2487dfed34e215c186b6c2838e38eb5a50cca4f0bc699482089050877f2e422b4323cb4c0af46f4b0e5052f75744c538abccc7643f339440dc3aaeeca383089150877f2e12482ba160472d45549ff79cd04aebc4a327c4bb9d78c2573b835b05c55fe684089250877f124fa5f9c5a96d6cce92cfc73ea2446202f09100eed203ae4267aa637a032d3685089350877f0bf651f82f83ca1fa037a941d4e2a4b3e08f5e1603f933a1723adf4135796de786089450877f21c674ea7b834741cbad39b21b242ab9a5554c6c9f92e801cb1fe4382b61946387089550877f214f91d6c4aef57e83186b57fd9fa48a193e1caf16d7f6dc1559d144a271b341880896508781818082800980090990506200108f60005262005a78565b877f203e2218389729c26c6f66213f2269c262785ec68c759599c2d8e3f68035055b82089050877f1aa934198713ce17658f51293fad44b1c22fc80391405ce76c92b2349b7eb3a283089150877f1014d4e5ddd9c17b3c2b29684476afdbaf7fc56e8b799616a67bbc6678e4535184089250877f033c13ed45b4762a47e1d2d45d7fc8fbf9d4e24546e20dc596911fb99171035885089350877f09bc1c3274c569e7e5c5d77c51fe69b23b7e435138f4f3217016a2d70ce71d5e86089450877f1803171c9dbc0610e38d8308db101d6a99ca90137f6ab8cdab2a91b36b63322a87089550877f0ba6071aa98afec3fbdeb46a88e4a5d17bd4454c0e7da8c74b15b084488cfdcf88089650878181808280098009099050620011b260005262005a78565b877f179e90ab4b08a4ead281a8709057487e077b710879911f215fbd6e8ebf838e9782089050877f1cbca88b8ab3f0588ff87deea978d00008adbad808e6510897238ea007f491a483089150877f2f50b20b33692bb0f62777de5e3198377d7923ef2fa8ede08831e10f7e9b9f5a84089250877f15ba030e8f1ef6f260566fd6fcfffcd21a1cfc1232f7ec7148ff076d1ba6870785089350877f0dbe053da01aa4b7c0fad83a3cc966f0b8281bb4940f97a5516cfb9dcd543a6f86089450877f222eca5d754afeca8997f31d6fcb94a5d799afb795e68d4d8b0ce6d839f6dd7e87089550877f2abffa43d756ef242db7f584bd62405991112618362f1b29a33ee2131b46a44688089650878181808280098009099050620012d560005262005a78565b877f03c92524ebe67300d0dd0aac464f0e6ecf962d6ad41bf2685f077bfd788eb3fd82089050877f282241758ade4ef8ff3858305288d3b4a52209295d1a4bc89d885b2f5dc3341a83089150877f02635cb973d71bb3d2137bd81680dd3bc607fc5487e898c4c2d83c1dc281768784089250877f13c866aa66e8d506079dc24c2df7b1e691994887d35622f4cfcf014bbea223e985089350877f151f0007ccf42a7ef969f1b6f6315992e6594bb5344d2839fee6620b60e2c02386089450877f1c1c6a5ebccee8caa4dc7ef18e194274f6e198d2b140ddcc97cb15c92ba1409c87089550877f18330c9e67d62f7861a996d7ed69bba904b0dd459f2b254fc7cc53dd28e45a6588089650878181808280098009099050620013f860005262005a78565b877f26b747740c95bf139cb11bdf02fa63a4bdb29a90f158933a1822cdde5387290d82089050877f1475676fb205084246ef9bc7234f312c214f426852dcb2ec7dc3772f579af8b183089150877f1b03ad9080d29b70aaf30bbc3200efffe73ee269dc032d2e32bd190767bc380d84089250877f21c175f937c2f82e99735bc7c201284f89577b27a1f84fa24642eceb552f445585089350877f1192e0269a6b66a8c5887527aa4474c2de91cf8c71ebda835df2cdccdd4a4e4b86089450877f0f3a12c0ee52f0d34f2b4a0dcd13541b48aeb3d5121d311113bba9792a45a58d87089550877f07fb521883bdf78b33689205b45e52269458a061bcb87eeb3b1e183c6d7eb5b7880896508781818082800980090990506200151b60005262005a78565b877f248d0e8051c1a965640c96c6f010c4931fe648b96f95ef6f5b8e474f64cf316982089050877f2ab553db9ead2c82ce91febe180529eff3521875f7e90a9b8b7a3c4de4877cd683089150877f211ee3bda3c95f1954eef22a0a82c2ede8444e42a72a8200bab6a133846d5b5c84089250877f111db3b5184ff7412f79c129904a9cac4ee65a51c2062d66732f54bcdf767be485089350877f1a73843264cf9a3a1bb6fb68ef76037c4fa98337e5c10096c630b449ec4a5f6786089450877f1c2e5a2d9332f65128c85358662d6a7c44353add09c27cd07da02f9144da855e87089550877f0e2b35fe1021b879de5b67a7458fa6188bbdea39e2bf468a1a24e3625cafff98880896508781818082800980090990506200163e60005262005a78565b877f2e568594e5dfbfadf272b8d6e8c99bd785c4fa94ce9e87fa8a9a37e32c7a28de82089050877f07043c7571cb7dc5205bfda42d693527a4bcb58238ed6a6a248e7917ddaf0c3a83089150877f239e18a0c85b845ffd6b85e96343f1a8378f3c691dadfb228da6ff7aa79efe1f84089250877f25e247af250c564c00f5ff1cf1f2bc8606600f173cb65ef0780af9f5a1b676c885089350877f031ba3385664544e3e0801f1698b15033a6049b2504e9cdc2c6e3eb2fd12100d86089450877f2a33777739e2ab0adfb1ca5687db1e059b20370cbeeccad32da5c3609431ff6587089550877f2bfd6f0e9e996ba13749327b9c5cec69903d413b2df29b777d05384b3e7af952880896508781818082800980090990506200176160005262005a78565b877f2d453d93fb36fbf8e36747ee92d90cad9e02e692d0748c07fd43eafc2cc5e82382089050877f187bd8043f8642cda2b6bad82958d115818880eb80f6b730381d974ac5d5037e83089150877f21aca605f92a48ac35708fe5140729fb35c3e48ccec441217713b0864944393084089250877f173fd164f5224ac06c2e99f3e2eaa6379df113de30aa485e8bbcc7f0fd2d1e0385089350877f071c66a6463c3fd4292bf1e5acb6de611142d73cd1db590e89b61b57d44d69bd86089450877f044a40e396855be550d8ccce7b82ee2caaef6675bebe92266c666982ff72bbf887089550877f1176d9f52e12df67f087110a15aaf98d1ded293ffdf99599fedef2e51569e4f6880896508781818082800980090990506200188460005262005a78565b877f06e8eb7dd026d257b15c6624bee2f37d5b67b4a671cfcdfee5797e8457b6391682089050877f0696aa48c1d5fe84ca5cf59009ab0baaefbb612e32c91d5ef306def38dc5673a83089150877f0853c33a9c7a7c3b355c92c75de444365db82d241eef9f3fac417004a3a1accc84089250877f3016c0ba34678e0a67f59cf96ce16e908154f5f9802591717e66e95ba25ab77f85089350877f0af008601dc9552517f303ff9e22c793a682caa93256f2f09a4f746542603b0e86089450877f04cb6d76b5a27a5aae387cb647790318c25fc16f8d7d1855a38765f847f731b087089550877f2ecf70c372d8e5edcad49e58d47875f26933d62614f266e6b4f586177148565f88089650878181808280098009099050620019a760005262005a78565b877f01f393a6ee74dd6c4d52b0e7820a7132f8c4889742313c06caa6ecc55f3dd41382089050877f2e4d4ce3f97bf96ff86b88e969d13e415e14721282769f7cf8c3a73723f094db83089150877f306000ef24a7f5a9c652e3a9367578554ea59bf8efa0bd8bc5776460c18c1add84089250877f26e58d6287678f3db9c225c1d3b93ae7c43a69024ebf249c8bde40617c2b3d4985089350877f09eee09f873d1bf683971df4d7ce56c8f0b8b98ddc05b9612c0a0d317310655a86089450877f0f08879dfd4fa0dc11ded556ef01c6f94cc6f4d18553b08bcb1dd604392ec00c87089550877f11459f7e9f0e3c727777e34d6d93ec28a25bd867171523bad5be0d5a20029eb78808965087818180828009800909905062001aca60005262005a78565b877f04e9cbb6f6e8e805a20fbd801a53b723f78c1f5acd227880f7f37f4e5b0528ad82089050877f2d2ff32eb7a0c0266dd46bd5939c9a9aae88b3e9af5dad01a7304f9868f7c7c683089150877f23b77eb0f27e950200a590447d645a723d9b405fa2538a5cb76fc5fdae16d83984089250877f2cd6d2c5658ec0792daee2067e2f958d6849886318a6c1c27233a469e9998c2f85089350877f0ae1daa420bac90780d0c83026bfcc84af83953e26eca839da76861e739855e786089450877f2b495b854553d02a75b68763bda6dd8ef0e81fe32b5cb072d3f580a914967bf087089550877f056fa5d7ce2c32bc5735351d2d48af5d6c9256a4b72e12a35640b53ea959e2968808965087818180828009800909905062001bed60005262005a78565b877f2ecbe1a06b28ec78ea7d22df11cd224a0e1a0ac7a3476c5cc3c4e50da961a87b82089050877f143053c1c387f9353bd677e5db6e9975792bffeecf02d6aa0fe8f627579fe6cf83089150877f04064b25584499a011ea74ac047a8b37494189bc63342bb1182e234212d42bdb84089250877f100f61f6b81542156760a6d29af5dd8644c82deab5b90e6ac66de8b4a069564a85089350877f18d331b2e8180b7aa7055c029fa77aff4f02b0e2a2078bff67688ed65b51d6dd86089450877f0fcf9b89e19b1a55f9b03255cf80ccb9fb6aafde2b46207d873fac80ccef085c87089550877f254f801f3c89c62436ef63df67d912c1f231bb1f76c6c7b497f7708dbcfdc17b8808965087818180828009800909905062001d1060005262005a78565b877f16d8e85e57819a10a61461bcd8d3d3c963c4f95afba3e4d8fd0d6ec882b9d16182089050877f29c9565aa702088bd443e4620d84bb2bfb93253a8f0f04e5cf408c92820ada8483089150877f294fb68064643d8beb237bd705a557871b5f1408624eda46d47b583a60d29cf984089250877f2c26f3083140c104baf24c3df922317584aa11770451e6a846de7dc79519731385089350877f231811279854707dbaa537cb27241e7021a949a1d9671380a7d6944c838904cb86089450877f1419365adbb91f1f7d1bb0aa8a4b5d11c7ad0570cc6cf3638be9c5a2a275b49587089550877f1674425f2e9fcaa66eb001feca48ddd4b2a29e86d451f00d176ea35b4e02fb848808965087818180828009800909905062001e3360005262005a78565b877f291f956def59b878028000cef03d7b54dcc2fe1dd5a75dc180d6d5bed898cd3082089050877f2f1302894fe6a26b5bc03fbaa69c4d95012394d78de494549c7057b7ef965bcc83089150877f0627d6d6d94d0a19a17db45c0796f7db8de13d278a2b24c99ac5d92d0a1a1ce284089250877f2ee297662bafebcb01df8e62bd5f50f03025515b10465d59f3a294f0bfbb2fc585089350877f118029945df773f52fef5429da766b902eeae7d967062fdd879c60a1bfaba75b86089450877f306042d262f6268ba789eb4323c2169279752ffec6b8536cc68b53bd4df0e85887089550877f0472a13ac7da9ebe1132e05f9ef609135c82a0ebd9278def2b34f8ce709aee4a8808965087818180828009800909905062001f5660005262005a78565b877f2e8f76b27b474180f00c5a6c2d65850bbf96019bf0d76dbb4743a970f42a130f82089050877f1e33984165f47c204a33fee31f613544b7d846a7d5ea45280ede4b362c32aaa483089150877f17f22e27252bdcf91a72b59eb276a666ce4fea7adfbacb2ea9fdf28524b7b43d84089250877f00547e7c70ee4e3fb4a4d386c8baa55d823a0f02bc963b43039b8847cff6e6c985089350877f08ea4ccbf815be325ccd15494f38f3f97153ab09c54a87a852b2a99480724e2586089450877f277cb45f3e632718673ba05d48c712fe7404df9eff5401cebe45d194c67fa8db87089550877f0159ec7ea49aadb3a8b0a23c1dba0023807b0d099d3c40b69df866a92dc87b37880896508781818082800980090990506200207960005262005a78565b877f0c33489297e244956de579c5c112ab40c7fb2d89866a28418f660a86ee18524e82089050877f01bb4fcbae28a2f3399568c6b3849da27d6ddf4fe6adabb591151679ed37d21f83089150877f2a23343d24a9cfa3b8f413f52ee1b233ce4c1d5b9bf34b03dbc6d733d52305c984089250877f0707a6d515b3bad03a9b06d6be048defa850134aacd120f38fa93264016b778685089350877f1837db5401dd6ec30ba6b866184da56e8db439ffd04154ec469b62120ce35cb486089450877f244872a0d2766b8547e6b6a5afeabf198e1409a0f0026de36c101793952f6cfb87089550877f204fb17927ce873c761196395f7da46f679ca331832a59fddd2ae31e84eba1f5880896508781818082800980090990506200219c60005262005a78565b877f056f53037d5d8efc7cf6a6feba18d102bf818bbba70b86dd9b763a12072f4c2e82089050877f1df4bc5d73239f5ec3b89efad53df9cd8ad8fca543be01f5f40fea2952071bd683089150877f1ffb6ccbba001155d46e167d1fad1c13bf2892ac87cd9c347c734ab5ef65836784089250877f08ee36e881496539b0abd647d353e51b63fef91fc944880006f2c26c2ecf2a2485089350877f1c3080c254443332a3e6283d5bab6f7fce8aaa68487b9ee4e372cbc6cc17266586089450877f2dc6040500e7329f75a3cefa4db49f9b47085b1660f8873b3e81b7b1af82af5387089550877f2c8bca9dd293bb67db1f66ff2e82047ae9385ce67d7f33568cd4c216a89994b788089650878181808280098009099050620022bf60005262005a78565b877f2a157b9786f9224cf63648aaec1b9f61c7a7087ed6eb8ab20c6c5469d401b7df82089050877f1e0fb0cdd8a54591c42e7c26b9027b77417e4e6522b472bfe61ff89c39bc40e983089150877f250144d1cea033fd78bd73ee4ea4cfdcd6a42f7c00e2d7ee6794d464207d2b3d84089250877f0b6b3fe9a7a525ca60443c4b78a8e830957aae0403116d22983a2e680eedff6585089350877f2fdf613e67d176569f4743b4963f8c53e52482fa32e705247eb650bc7bd616e986089450877f048f64b14275fb86fc55b3c0469cd89306752827c3c04463be5bea66fbd7b38c87089550877f0f2027b781c2c52490e11ed4b7b494d66cdc16e690b6a4b3c924dc9d6e85483288089650878181808280098009099050620023e260005262005a78565b877f29652785160b261c1c20c741524a26147cc3191f33b74ebf17d44ce2f88b0f9182089050877f1176909e02a5b37bfd47810fcbe73af87fea130470aa44bdf6b058c4d359e17983089150877f180f26c6ce2a3a477baf0da58d069769c2bf0156d636f2255e1bc35c01e9899384089250877f2afeedcc2cec57285ad22e734fb7fe3dd65f62601c1ca4884a86c7a6a05f083d85089350877f0dd21a87ee22626998dbcd73dd751affb49d47a02e995a41bca26399103087d286089450877f1d21baa09d7f50f0159fa8a0b6e0d61446d1c7db5d1566469da6a85aa722496287089550877f2dc59c4c9e275cd8c2506282cc5bb842c014bea4236b1bc27a856351b48af802880896508781818082800980090990506200250560005262005a78565b877f2cf62d08541dff0919ba68a697f44f4791c42d1447a41513ab9d5f755eb1f38a82089050877f2f5b8853e2cd2e47a9fedeea4047e46083c97acd4b687aebd2264e7a0eb354b183089150877f05865328a9b2fd469170c391c5ba8db5c66eef9938e4da5bae33f2703c47073084089250877f29761c9fc3d2c4cc1b126be1dc0470a97b8f2725d327c6d1ca923c2aa8092b1e85089350877f1d3fb1f8dc3c77cb515c37bc810d3a5e3b96552d4bbb57fdb01c2aeeb1d9a04886089450877f05f2fbeb7cae0a35ee2f3a4d2964d241a0ceeb47b3f7c4c87bb3b052c8705d9087089550877f1f445014a0f266082a50257152609cc219062154f4d7c13288746954b97998f8880896508781818082800980090990506200262860005262005a78565b877f2d35917cb1d0ca611ee37cfd9078c924fc84bd1a4bfd7db3ce39e05b38f698b182089050877f05a89a4eb40387b8512f2f398b6526efe76716951c500fc8dabc835775335ced83089150877f04e26aa3f02601174f46ced15594329e4f4e5bd5d7d53d5df6c8633a94dd01de84089250877f204d587d61526c1e047e1dc6b6d403b9eb8730f2e2dfb7bc7350d939bac5b90f85089350877f21c8ca213d2f44446ae90a6bdae5843b7c2cb53ed699f36675ea8280a2a420e586089450877f1303bd921f32fa4c4e73af21457c46b6d69e2e6a2c396716217787b46e822ebf87089550877f0613823c5b6abeef14387465317e713b45ace79c0e4433d7c4d352097e5c8399880896508781818082800980090990506200274b60005262005a78565b877f0f27c5305ee978f4f775e213e3ba12a901f51144ce1ea89bb5046930f5ec55d182089050877f2cad11c693c6a627531950a307e07b30ea8a495115f5a5388827792120c7bdb083089150877f16bb256883c44cf37366618e46c6db4e3da97a9d4ae7d5c585959de3272f82b184089250877f29afe50bd78f72cc763695976410324bfd67157a5ccdb7ae45b00032e1d57a5185089350877f09329902e59e5243a726ae5ca35408a207148609ab3698139725aefe29aeb16786089450877f04b1800e600c90ec4776bc6af1764ccbdc10bf55c3314f42acd0531ad53420fd87089550877f298d0110bb90e4c35e293c7a7dacedef7ee9342a591b4330e27276aa13b67ad1880896508781818082800980090990506200286e60005262005a78565b877f024ea6e68cb1aa6b407e022649aa32d1b7ea4a350e510c07eee43929395e4f8282089050877f22ae3a1a81c4550f5fa0116e135d2df2bd9f6835a0f0d03f4dd934e1320a3d8d83089150877f1f0f5eee9e9abb2a2f4ae04d6fe09311fe0115c1e199c28e22705e681442ed3784089250877f023c86606616f317af022464f350b4bee80c2fca32064bcbf83e8cd35dac06c785089350877f2a89c4e5b074fbe67d04cb03efe18c4bf904bec4759b33dad6b2c86ebfd2b9d586089450877f04b0f48c4f2e05bda4b9cf806075f9c275df2cf60b5fd11470eaa7394a82727e87089550877f0edde5a2c01327ad042a686f443417bd8f107c99eb7c02900c931a7bd8cb349e880896508781818082800980090990506200299160005262005a78565b877f2cacacc9c9d8b0004d8932080f9378b60675a8bd853aad1dc50672f137212cc182089050877f0816f33508621f2d56371156b0a3f7731030e4b218e44c90a88cecaf07170dec83089150877f2ef8e0a455d472b49bffda935c8d3bee1ae9248608e2a52d53f4b76313c9792084089250877f17184a8af9199aba605dd1f2dd18ebc02e3055ce408068eccaaf3ea7c0a334af85089350877f16395e153937a83660db6f78446cb995836436602777d81f0607130b4488144886089450877f0e174088223c38e9440fc77307d6720ac32784c9d2f591e2437eaea9b8f5e2bb87089550877f19e70fa937788f7a2127573d56c8197bd0dd096140f39064865c65c31b47d4028808965087818180828009800909905062002ab460005262005a78565b877f0e434c329d5242adbdab24780495ff97230beb344b918f6f8d6bd7d21b03692e82089050877f2c88a82eb87c81ba42a211bf2ef3c15875ac157c7f3868fff35af9f55a8c22bc83089150877f111dc223e3c9fc7452a9c2de469383915f33adf4cf5b49fd2e01c51d09ccf43684089250877f10647353de3197b9cb48f4539b507e45393b000842e8baa1218af097f871baea85089350877f0e53d64121c0a851c1b3f07423582034abce698525d0a47724354c07152f703b86089450877f2891938acb83ee193754969f4aa5a62a531081dbca4dec226258ea92984b434887089550877f04106f95e4ba3fb74dbe4bc53abc170262ba00c7c63ed8c457c3227532c12ce38808965087818180828009800909905062002bd760005262005a78565b877f2a73e61b8f1babfbb38b186f401eed0d92c5613ba25dd2ff4d099f7dd3c19fe582089050877f18e16b24642f19193b798b923b8dd25f6e4856d6b21b729aed2281ab154f7c5f83089150877f0d5f849b166ab9f6fc1a64467c5557029f359a2d0f194030c4dd875e12ae348584089250877f0e25250c57365a29c63a4f1531b8b0ef523eaa93c1d70acd0aa7cd7844dd044285089350877f0f813d14af0c85bcedfbf480b3d80b9f335853c60188526d80761274074a599a86089450877f0d2356a92dbaae8c24a8cebed6428083ef2f469460f166a6e774377e7805543587089550877f1fb6dceb495bf90fff56c8aad70b40bf773ea1003cdd092fd77a43961e9d7dc78808965087818180828009800909905062002cfa60005262005a78565b877f2c0a70ced79951a75e23c5a323fd706c2ab87c381cfc3c269081627741c2bbe882089050877f13dc6b3bdb05167dceb4b11037064ac5fd22db5e229e4c6ba55e8382321dc5ee83089150877f210fa8b777907ec30bb88dbd7c0e6ca9004eb3425d498025da6c90a47c35025c84089250877f0c5cfa957139b45a72fbbf80a410aab5454a982668baf24b0dd3c04e4d599cd985089350877f1f1f3bc4c21d633400fcf8bdb7be59b7f65cedc06bb2fc93a873b6ef12e0f52b86089450877f188f0ee95a9dfb03cd5e3fb30827057e933711644ee7bd57490374c0d67532e187089550877f0823877ebf8a842b77e8e0f3b44873e9409727101b186cae2b80d0cfa726ec8c8808965087818180828009800909905062002e1d60005262005a78565b877f0fe81603de39ccf148ca6390d6f8bdc9395ca2f3f50878283d98f1f0e61b1aff82089050877f2ef61fe192f52a9d7cebf41c134098f2ccae35cabcaa12963566768ff1b8370683089150877f0db6d076b2dd1b9f4d56d2f66fab4d7bfc6a38fef7f9ae1d4c2f8c44b1510f5184089250877f2a194a4ae8583f28189f9c011d107b82f279e6a0f8ca8bc9cb0aa581831c7d0685089350877f0ae539fa9ca67d4af48fb292f9188c9e72f2eeaae2e500b7e7201718c8da8de986089450877f23f66a894b1df4d26a8baa6d05b1ace511faffd4605b36cfd12bb4c6dc2bb4d787089550877f137cef522af2942aee9a4fb8017bf330e64601f466b56d32245669d9fe5ba7078808965087818180828009800909905062002f4060005262005a78565b877f187aafcb87841b2df9d64c1767789a6b221767e4634f0d550063a0bf92788c3282089050877f23212e75f4b89992a3647036ee36d74938bb9a9851e13d7b6e52daf66c4cbd2583089150877f0f54cbe967770dfa9d068b2fc53abc96489bb7d266212654d326de6b9af16d6384089250877f23d83a60b9887ab4359b8569ff3a219bb81367955fde72a62002d3cd51101fcc85089350877f2ea676fe7f21fc583ab0b0e189020d42cb22f044607ee15bfac7dd66da5ebe7686089450877f16f37f357a0c584821a356ab56a16d41f045029cb515f58ede001f05a807890b87089550877f139093b78fc9603a4288ae5811ed1311be916e4c97d35a5cf18e4b7e47d13b03880896508781818082800980090990506200306360005262005a78565b877f0aaba5fcad1c047030c8bf246f41610b68d60bad285cc15f55900f52778a11ba82089050877f1611827956f3435c1fc67dd3d37954a255eaa0196cddc5d5a6187fa0a2839efb83089150877f23db56362f248912421e5f087ad16e0c9e6d2bb59db30a52818e41964b7d812684089250877f2f215e640207a88b02999c98f1af8fa17331d19ea3de1decfe8f2e478224209c85089350877f2b2a261917c0fecf2bce19021f8506e378e9d3e1afb451e9d162b3d93eed861286089450877f2f662e4cdfef5f822cb956df75b17b46f17b08f930f54bab4324a0363e23384b87089550877f0870eeab2e7bb1e82c426c2ab1d65fda25d426749a538b4ea669eaa31f661a00880896508781818082800980090990506200318660005262005a78565b877f169418dffc99f2ef5dc6b1013717c134409349d846457985725b15ac6a152fac82089050877f021d3cb240d6400339ad5bc535b4fbb40919ce6b90162e51ec6895a7cabb437583089150877f12e45c46c45b660b6addc149e4216eeb6fb19474c8cce4d78e34c3cc18024afb84089250877f0c7c86394b7ad61d8c348d185403dc77152fd310b5d05970375a11b5abd0354885089350877f3024e78b217f85d8efeb60008ff70d33c3e84c238d9c21a04121b498a2fbb13186089450877f235977101b56071ced3163c1ec7187909a3ed7679bb54ad40811ba318e1afc8187089550877f14bf885e66f7c01fd974efdc0bc2d628ed79ad6fc6ba511c5a8ec383e1a73a7088089650878181808280098009099050620032a960005262005a78565b877f223325ae7e73cf093e1d5891aa92ed43f82610f1283f265f56548b38072f38d382089050877f239a5ae138dce6a019f44560ef7c19d2b8025dadf040559226f54870d318a57e83089150877f01dcc35115d9057efaf468d7c8a7d46048e01359c974855bc99738f0b247672e84089250877f1359a40012c5332587a4deb5604a436e269c282ba240cca0a6d77b343e76bbf385089350877f0a9ee39712223d4c0c37c26a96f267c85fc8e31acaee0c07354d3798dc5003e786089450877f11812d1ca3671ae688a9877233eeb5ec29868f7cd7c5e13275391a84167e023187089550877f2435cd699bc94985945d878960770f9298d40c0e28b6b5979069e0590952f0b888089650878181808280098009099050620033cc60005262005a78565b877f2bf020785e4117a1ea5930cd5355303bf9aab2a1ea0d6685391f40eeab2af0a082089050877f2cef6c78577c9e97a76855292ca92e4269ac53e9b7439dffbac2eda5c675802483089150877f09a30e00c9f0f6f260f05f029cdaa7c7afca506a5ce562c877b3b8d54313542984089250877f1fd85928f8c8053c9b264a74f121b90bbf9ae8063e0e89670165b9ba66a3e7cd85089350877f24482279d9efa57862a6cd4524aa289e6950606df8cdf8fbcaed4b674fdade9186089450877f10260a39cfb0d82ad8182a6951f9c780a455fc1de48c417d6ce6b27f3646218587089550877f25207827a76052d489bb2698730d5c3fc97192a4420578d2474a37ae7d7e314888089650878181808280098009099050620034ef60005262005a78565b877f28e36b634ecbdf7b8e4f9e1a347df95d771f15d97f2d5c401edf6a6e375874bd82089050877f073f0dea6f83d443ee3ba27c5b7f0064ab7cc0d34babae859f6bf66d46a1e16583089150877f14c6618569f748ff65514437adbcfa97f87b9b0d169048e84c553ba9888c451e84089250877f0c7675a042ba6cc74fa588a0b26fdc4f2d1f119a0fe6ef111be6a2d45b4bbcad85089350877f03dfad7db3f32c6ed8130c43cff604dbe1c29dbff250c684c955f09e495fb34c86089450877f20114281fbe35c188164fc6d4144200fc1d9ec433efc677480bd2cdcb35b64e687089550877f29e42f5218b1ea3fad06a48e2292c0fe3df08a2c4a823a3be4b998955da8a21d880896508781818082800980090990506200361260005262005a78565b877f13bf4039488d94b1b6a67f256296daeb6c7c80fad2726d6e9be11e17c235281682089050877f1847a4e36b3eace13de58fa4662a9f88c9c17a464e6dbd2083c2938c227ee3fa83089150877f0a7a2056c7b79384af9fe3c6826830145f51f6f8ca5d1a344e295ca7663ada2784089250877f181278caa15bdfb5940cff2bc3216ff06a45962d4979dfc0d6c94993bb7de86d85089350877f0a8a6f4fbba2ee09a36d390fbb1485fb789cf3f9f641dae011520c8f10e57a4386089450877f08f6b4c0d7bd5e4c87fbc6874520e3329c067b6841fc833aa37514435e987cea87089550877f2206b2c18f3292e7a9a91039683a55d813dd914b0c7d523210424ff0f2817df7880896508781818082800980090990506200373560005262005a78565b877f0186cef5c04b3a6c32da26405a16cdd359df57be8e93291acbeba3f487329cfc82089050877f075aff67570ea17c7c79c9114c7a10d533c6080b6d15a5bebd1204fdcde772f083089150877f2b06d8389ba9621c3869d2e8b25ac15e2c97389caaf7f97a35700be66c1655a884089250877f04fc6d0a6b67744428161cb5228a94e7c0e95dede804b2b47a18055acd737aeb85089350877f25e4a295b4e7a2dc71394d41ec2a8f4b124e58c234448a028a2c3bc6ad25e69b86089450877f0094c24ab01c6db594fda907b639a7b3a54301439340e889b6ca9cb6cba067b087089550877f2751821a6e3b2206cd6bc3cd5d98cbae8850745ec6cbbea413e7254d2a514549880896508781818082800980090990506200385860005262005a78565b877f145aaecc24e3878db9a8d77149b2419ed5b42df025ecbd1a8e97d8b817904bb982089050877f0d2aa00cc6e5167d845ee1877b7aa059b5e5151c57e4c163da3403f9a95755f283089150877f24233b69861c70c449ebd36e4420ddfc3c242b69ff6e3d4c6090c2bd08a764c284089250877f2c55fe1a75147c9c826f762f836d5645ac4184ba1927dd56a76dc056a989566785089350877f19779b1cb16a9c79654016674978b8b6ee1a78b64579de93ed2d67b9e49f098e86089450877f1807721ba60fbae476ff60120c1f47ec0bce692cfc00102ae50bd9376c5a22a187089550877f1c0208f5aba12750802fbdc3bf12eac9e00ada708f167d4b167bd7d4b03d76f1880896508781818082800980090990506200397b60005262005a78565b877f090b6e28ff541cc38869abe2f5dbfb9fbe888d21021f29d2bddb9127d3c273be82089050877f193d6c7e76ad94eb59a20010a799c7bf96a8dda8c90887d65214c8665ecda01b83089150877f09ddd5bc0b1f8d4c4f1a7a102c1ba12ec7e7540cda285a564ea7c4753af8a8d184089250877f300a1dd5fda15d1a9cfe2a287801817168721da2f970139549e16811f555be1f85089350877f1520908df2eefba075bb41cfe0740e1e5a1ee181ce492016e152706e493cf47086089450877f0b3f215d52e85ec3c682698ebcb6228233ae9518f9450f480689e7cf3013784687089550877f050996a07af6765c56a8ee2f736650deb4972bfcddb194a0efeb1954daa8a4d78808965087818180828009800909905062003a9e60005262005a78565b877f23a59326daf5f94f3b5192c18ed06cc58cd9608e44138686399dc4f1ee807add82089050877f1d220b9add0592866898ce834b1bdc2003976e815c0cf7d3f6b8bf967ad5649683089150877f19b49c4da3d9e3a26d36566738658923477c504e76a38a82b1b1247104f681e184089250877f139decc567b06b495bd6f3cf006c05b7e1f25d5b7ac554445c37dd285beaae7a85089350877f1a5a7d8bca8d4f07d4cd6e9bcd00c009e3099e99af3080debbb21f90f8e5b42586089450877f0621e3811d3dcb9584d0a8be41e431d588c93274c8549e625f98fd15983a809e87089550877f02a41c2d2bcf14664a0130a021daa6efd4a3b0c3aded38635bff97e3785ed6bd8808965087818180828009800909905062003bc160005262005a78565b877f21cfb54ba72fc06794947cc3bda33d815355416e2aae19084d84471eedca399d82089050877f05115093894089a202a4cf8d0aea329d83cbe0ece741160f9975cf01b7c85dc683089150877f2e40541caca7653212827129559ab422a1c06a6f48c974291470c65fc070dfb684089250877f07eeadd730284f5ab60778900b60300d27970001aa63e46ebb7f9cda1157600e85089350877f0cf33e4964d350adf2051f8e2e8448d3324d24d3f4858407f4fd60d3333bd98d86089450877f287c60483e2db313f1a2bda92c1e1c28b65ef0b99df4acfb75709edf6a3bfcb987089550877f289440f4b7fdb8b2b22661d0742e9695139c1a1ecef53c3febde0b5f6d9bb4a58808965087818180828009800909905062003ce460005262005a78565b877f291bda2c37fac962a24555a7abeb36d8e8b9eb25222f97f4817ef2e5b0bc720882089050877f0e105449589412404cda7b82f14d527594ff99d04cea894d6ecc315119f42b7383089150877f0e6097f0ad418ac7123ae7eba6cd4522b7ffa8dc8cf60a1f836be23e41ec25e584089250877f22fdb676724017afa8a8069c62d307aa4ff52c1445ad41b94c3e406e33e0def185089350877f0204d594ad7855ad0f6950742b19e60c2c5338817aab7ee7bf631c3aa92160f186089450877f0b6a643dad3f953877110517f7b336518c8fc11d868bc72e76cd76c3b2f7dc1b87089550877f04189ea6c2bd4b00fa6349adde17027eb7d76353a10bd07d0942639447cb43d38808965087818180828009800909905062003e0760005262005a78565b877f23bc8449d898a7524b2dfde263036cac2e14935134f8c3baf7f1e13ea2deec3c82089050877f0017efa608d9941bc64d39e0b2593b742576dba257fab323d4c99c7a42107a1683089150877f02f061475e9d8888b3877f9308e7758a16f91e3a34a5856f15ad0b9f2f92e2b484089250877f1f257d4d6f3277674a061330d73d6ba135da7cb0cba318686872fe1ef6d52e2585089350877f195340f6c1f7b5f6158884bd237715149cea488edbfd80fc9b9cc61c384853ab86089450877f273e200179c5c45d860b26a20b2c0853c1008f942459d5cdbed633ede031aa1d87089550877f24bd0ecea1e1df97af0f296c0e792d676e2c8e02e808a158bdbe01431c5e4a488808965087818180828009800909905062003f2a60005262005a78565b877f0c6e6f0f7c20811f404599d458af5c6cb41ab671599d6350df38e82104bc683582089050877f1dee1352470235cd8e129b5611fa953706bc08d58f6a3ef3d80370d8d19683a283089150877f1be0cc30343a168fda7c757ac0c7e5e16afddbfb7265878080725a12fa12ad4c84089250877f1a449abf644f68a64c217c6a042a231107ca8d9c619208580eb76bbd9215d98485089350877f080117dde58f228a459f59d90e64babe2daf476a9a2ca018faa3c5fecaac178986089450877f24ab9a167b61855e0f2c60bff098d5eb7d15166fab51f2b62c809de318d6d17687089550877f2b56aca9d595460503363292bccdc80e823201f71b54bda684c93eb0893784f6880896508781818082800980090990506200404d60005262005a78565b877f057361ec23c87b30080ff1cdf3467d57c95a12afbfc48ab5e1e4de0162a41b5a82089050877f1baed177177a25ecbbfaf4f204d9921eade3689ba1378cd9362cc14145089f9583089150877f00ccdb6d5f4913d7656889c312975fdbe0e0309a841849fd808d75f593a7148184089250877f2c52f5e1ef57de5dde528471cc1f0ee7839929df98ee743d9eff96251556191085089350877f0234a4a32f767f2e1ca48dad3a2fdd3ff54b2ca3d53ce13fc9052414ad7f755586089450877f182b4c0c551ab0ce1990b472278f794ba9cc62abcc90a89efdd80776558e343387089550877f001ab2bbdbd043d2d7d1a4eb76db4de71fddf19edf10d7cdb9550e1846e53fd5880896508781818082800980090990506200417060005262005a78565b877f206e6cd1e3154c113a762a628e24940907b41e90e7c2d43aa256ea524997835882089050877f27816cab4bec18577bd335bdaf8298798a261bb175137177d46ba95dd03dc8bb83089150877f1680b632a04be3eb1ed64ef589440b3f9526b2ad82cf0b8839d3e7b0f585bc8c84089250877f196b2cc0e6e07628df8234f58c027c190c75b0342511efea4c3724c4fedd6e7585089350877f29ab0b6065ebbefc684608acc6bf3b5fc693770c38bf91b4be38fe6f7264748686089450877f224ce814d39c382da2d65eccd9deb48056ede18c5efcb8e25515b727e540a85987089550877f195e1cb28f38a9cb57b2c719b504f5fdd1d42559b6a368264fd0fbfefa66559f880896508781818082800980090990506200429360005262005a78565b877f0e9e5eb70f4490ba6dbd1c0ee1d6724ccdd58acdf138785ce98ee3848ffb784082089050877f1995c9c8e520014e4412ec653839d781548cf71f46fbeb51919582226cbd5b2183089150877f0886095cc376c87fa653000283a6eae11008982f27104afee198fc377f26e32484089250877f13761e206b3e89b23de2342bfca860f9b0d9a36d486aa115565f9f52369c124d85089350877f22a8c6cfc0e38a500a47515c519ad6a72506ec0d508de25942c10f51f0dfab8186089450877f18985e9c7ea6f1a16962e4e27cf1aa4aa3086938b13f8ee9465a5ec7bebdee0387089550877f215b523ce3f055c92eb148c00027d1ad406a2abd64081043e0d15492845b31a488089650878181808280098009099050620043b660005262005a78565b877f0102f78c7513b093b885726b7df2e70298801b3e4019cdd42239d76448588c3182089050877f0bce88602fd3a0f0ab8885891ad44045058f9ace11fdabd24e8dfa1b0a4ae72783089150877f0745f760f8d466fc21043e2292e6cbb20b6227517f5200251129c5481f52fa4b84089250877f0406de3807445c6d3cbdf7b174c410a998a1530fcca991535a2a262de4e2ee5685089350877f26779e7346349068dbba66f784f87e243cc27cab59e887f7ed7a0117887d1acd86089450877f25150652a08af8ca574c7c5c77ffd98b17259a1d914a6ea41db75014267949d887089550877f00bb8d13438040f674a79ed42202c5bf6e67de6fc3f6b65ca837ceab795fcc6f88089650878181808280098009099050620044d960005262005a78565b877f0c1ebf40eeaac3d4a192dd50ee25c0067f66eff6229d045d5a801067639ccf2c82089050877f1a39731eb32fdb51dd793754f76103b5cab86947aad12d490d4951932ff2072783089150877f2baad3d41b18ae10c463af1662ecb28c6988524edded36943672a0e857b960f884089250877f2e778da1518b6a4fad2e833e41466fb2fe82f4f8df1b5c218cdd3b7e49af67e185089350877f156dc717930d6490167743911e9bf4d4634ae049b53adab281698645f8b16dc686089450877f117f2ef1712692ab9dbdc51db4968b45f5e0104f9e5281329349d908b23e231c87089550877f0b281b5d9dd2ca1a92e2d83b5087b6a08d6ab08330f47512aa047b2f88ba68cc88089650878181808280098009099050620045fc60005262005a78565b877f1c2803766dd9096567a3366061764f8c916f2a2dd640b6eec0942ccb75d4076782089050877f120174d53ba57d1a141bf40e4c705683668bd55800000aab6f34766b7b6575a283089150877f0c37b25020f8c76ea5536de54c722e47d01795d31b5ed73466e7d8b8ad376d4684089250877f0a508f345cc9a8b0c30ba27651ba1c3ad8398025a4000a5c2500228c44fa91b885089350877f12afa49ff4d8b4c6c372f7e065840783cb9497eeacc847a340f61f1823cb2a8d86089450877f29fc37eb5ec7cd004809516b7aa3c716f4f7f6e7772f443e0730b01dd5071a5587089550877f2048fb9c1fdaced0fdc5159490db2977e57dbcbff7514ad1e52a271bf84dd1a8880896508781818082800980090990506200471f60005262005a78565b877f00a6c4223aabe583e899bbcd0314a4743181f1d5e03dbc11c8a4d02550fab64f82089050877f15f462ab5b21c31557e25d9c22d8dc6a0cca93c8ed68a35655cff745686764d083089150877f27bc1c9af68edf8e3730197124be559f1472e7e3bba0d35e079b2d1b9e4271ef84089250877f1a2ec148f900eeae38c0d3d6efda64e146929c71eb82da3139a3a85968ec6ebc85089350877f04ff41cb553ca616d0616545922f2030b71b2354bcd1c55d7eabcaea8904c22e86089450877f2f2c4e7b18a845fcd6add67009fc237b14a984619260a7b3d38712e03a0849b787089550877f22925c606a1f091c1d5c7122f8e1a8ffea6a140031106826ac53a9c69d84c0ab880896508781818082800980090990506200484260005262005a78565b877f10e2a8c7b12bf70266c257573ca2594d8811633f77822d7c232b329c5b4e727982089050877f1712319595ae464992524bf8e488b783fa45b3548cd3f162d586bce31ec7184c83089150877f2e9616987d3333388ea5a1cb56b4c161f279ff19454a64ade43daed4dcda5c0b84089250877f2c68210d75660df5d9a8392a2805ea1612fc6137cf5b35a68fc1f03acfbfe4ca85089350877f053cf3707283df8730b6e1f637d23c67b0b3533061a35bcb0cb0f9bbe4e8adc286089450877f07577491483d03d7769dacc79607b9897081c0095decdce3d227c059ddeddb6687089550877f05639b2324c0b0af81c5b256ca6b2d46b95eaf855fc26cedbf90411312de4a12880896508781818082800980090990506200496560005262005a78565b877f0ec90944eb8fc36c52f3fd13763714f41cea1ff487ea39d70bd94e9b7f8f16d582089050877f1e96cd3ac345bb2e5bd3e755922f84afaf303d6fb227fc68f703b93665f5ea9683089150877f0408425405c66baa7d49858e6d5871e5b42ffebb0df885a824942da1e2e36d5884089250877f284d77566b42f3913d41ebb0528b899426e0805aadb9957a534b022b081aa97785089350877f0b044e5984887cda337f58c7ca50a78126deb5624f644516239427948d7d06bc86089450877f0486972179ee3496795bded1c2fc9674c0c3f71b58150c9c525063a6f2b340d887089550877f25b7568316c4b2fef9b72543b6033b317a7bfe406623e47cb68e5c79296e6bee8808965087818180828009800909905062004a8860005262005a78565b877f0cec9e74c344198703ceff28a4d11275f6c5c15738aa5a54a19269261ec6a8a882089050877f2bcc34a99345174c97a65e8978194486a9957c9d736f0ca39b98130801d1a11483089150877f2ddb2ebc0ac98f6498c0f2be2d73e86a786940a1e8c558d8dbed8d6f44b0255184089250877f2642b4a208e503e3480718d4d205351f43da183ed284ed7a385ef7cdca80bea885089350877f23fabdb09b481bc764102ae85ccf1e6ff71c7762f8bad04a2de3f7a025cb508786089450877f0ae4ed0ea6adb74b9d327fbcd01dbf37f5f6c467480c8aa5f495124cf70b823e87089550877f09034e1a646d6674bef041afa774e3634faf8adcc7c71bc2ed6e03b0b44920168808965087818180828009800909905062004bab60005262005a78565b877f2817ea20b471a4bf138dec79d84f9f6c0015e0ca147b650683df4b3372b55ef282089050877f2dfb7f81425c2def6bfa4e833e51e912298397de78fd2aa17f6d1dd2f1379ca983089150877f137b5bdb746523c051d680be08daa6b0d54c9ff7099f2bf5ce894c24a8ef1f3784089250877f03900ec7adc8e28af7046833dbad3fa1024e382aebe02bcb535243ddca21aa8585089350877f2b285b6c23b25c52f2079863c759e6a10c33df8f191551ead53ea508511cb55586089450877f1242067be2202d1b2c32b79c464e2d6c977e6fd12d8b35281e84c375864613d887089550877f1e8690f5b0a8729b9536ef2920abe7e6f3eee805237b158d997db63b17525eef8808965087818180828009800909905062004cce60005262005a78565b877f047f5113e1287b5572c82edb369fb0f717a91f261ef9d81764a5b279ad9c13ba82089050877f2d8800f21cd6774d5a6aa58ae2cd32593593d173b687122a4d61c4474390210583089150877f274ba1521d5bc5c580647f10d1a4c4cadeef088685d1976979bad813756f84b084089250877f17895b7c10d6a475310d34a0737efaedddca8f1eee9d8d56e7fe4934c8b5644185089350877f06eed11ae9f70df5ced09b1a6db258978cf5becad2f66d15761bf61e7dc1344086089450877f3036b521c631ce5d3599e37f6a5daf928842cefcbcd2c6bf84e2db5ded748f0987089550877f1f52d6e9ac28976c5a6fbf168c818478645c90d72e367609d7d7805a6367482d8808965087818180828009800909905062004df160005262005a78565b877f2a0e60356875d6ace1055932b3dd9ef39c3dd871091e96a323c1596cedb35e6b82089050877f02089633a6194f3ed38eeec2c8f54d0c7f434938fdebb9c0e1830dbe5311c38f83089150877f178c73d2769765d85383283fdb0d769457cfef0612baa963336bac1240b604c284089250877f2fc20bcaba9e3d96ebcdd710e3b341837d5d0db849e789f28c4be5004afa19a085089350877f151a423bee67fb14d5ad279f425213db7e0f21494982df872354c01f0f4a722c86089450877f25d61619e135690c4e10e4afeb4f5578ad0f8e25c20735366895b31eebcdf47e87089550877f15dd579bbd075429301d7295d3e685d832bf9f36c51277d09f2c3a664b045cd78808965087818180828009800909905062004f1460005262005a78565b877f236fa29b81678c8a109fd361c1ca90adf4423c13cf5b8cc1032b7283bcc959b182089050877f2a80cbac9b884e20368691bf1567cb7320537a977da10e53c5baea3446c01d1d83089150877f11d4cb8957937b3628a3b3f4d27f276cc0c179b0c22b2c13fffbde85fd91237884089250877f1289bf8ec507bf752a07c9b71efc0f800a52fbeb1637c5010fa54eadab40294685089350877f26f842b1a99394297d25799f2f03dc9e4903e77d2ddc03ec2fb155466da6f30386089450877f15944b9954b6182314e878fa2f9e091dcc40eadc48d37d39bdd5f09905c3a36987089550877f0742166dcd8ebd8576a6bfe0f1fed13793928f84442c7465a0012f584426fadf880896508781818082800980090990506200503760005262005a78565b877f08603d5a0e937b5353b56b05768fd50bde792e72fd61c06344cbd735707b68ff82089050877f0caa1711c66e9301b6f25e21a31683d80bf58d86032d03bfd25b9777edb74a7583089150877f2d6506da695d2087dff87b5f636ee676fab00c32ae45c75b3db345f3fe74a31184089250877f0d9244b07af9b6eaeff6f84049cb2e01d75dc4cb68533606e976b8b300758c8485089350877f243abc3c3382faa5dde3f1c3b432042d3f030ef6a1f5401aa37acd15cb1c8c4686089450877f168416e0a6d275d30eda3989242e0723024727d3b0791b06f8e1bfe8efe4019887089550877f1bcdeef03693d1ad0ea80c65688654affe634aa14cb11ae3a491681d9c5f8eeb880896508781818082800980090990506200515a60005262005a78565b877f02f66bfda3d2a1bdedb0ab8bf7eb1c4e551bef58d94fad7f7c231107e565390982089050877f019f6802171ab82a5922f023fdecc097eb8ac1fd0a1ed349afe9a7b94298975a83089150877f195a1c738398feed8c760468a0556c232645a1dd862d87c1f508c949ad52c3ae84089250877f0a36a3a46e6ec16567dfae1f853f360e6f24924810e838cb24ed1b0fce37f1e385089350877f002123c29ea87f7ea7b35c25f9e8dd3e81bbc3974c3c17c607cd840c09f374ae86089450877f02a717499cb6c31f71f0f0352b0f5bfef3005b80e93a520b6e42b3985789e2d387089550877f0fc053584b0a4607a2293e18baa309c52fdc933e9ba90fd327aaa8c8cfc4daa1880896508781818082800980090990506200527d60005262005a78565b877f1310d1942129737b32e87a86f4573032b1b99ae3c6d71bafef7b49479485554182089050877f1bfadae53fc82900f5761c558fee5e1218e6b2a6657e74b540969eeb49e0b8de83089150877f28c08a69e5f3641460ff2c60b7579395650c5b6afb392da142d32de8677556ea84089250877f223222ee42b6ca997f44d643ed6a3f2b040f47fe8cd922163d9d9d8b2622d90985089350877f064dad4752e708ff29bb0842d2c452a71448b43949345690031cb125588876a086089450877f2d5ddc21797043996b22dcabb9a1ba6c82b71e9a1bc5919db8befd35411056a587089550877f26315fcd9b5e1a266ec8e9f6600f5a6e0bcdb22f926d61591e83fa21069c0e0b88089650878181808280098009099050620053a060005262005a78565b877f0759273a4177fcdeab23da38b478faf2d4f22e82f346aa754b0a1331bc8371ee82089050877f09e13300eade70568fa0a840ea9729896ddd84c364d6279d34a0b9d1478fcf2a83089150877f13e97ed3c16fad6cb5b7bb954f278f2434b22f8cc054463a145cbe0240d4f8bc84089250877f05cd3486dca58f4eb221bc2cbedb8aa3027cde5765971bb1f61c272c5aa51ad085089350877f005ce523f6bc21daf1df468b12fd3e8665e1c1697816a9a671a3b2b6149c7de486089450877f2103066cc5df55e67cd7914028145fb71f089d671c83c5b537abea482b2d8cbb87089550877f039f8077bd9b71f91ca0502eaccc1672c539f72329317aaf8173d2edd763692888089650878181808280098009099050620054c360005262005a78565b877f2247bc0cc4373705b89672a2205346e6af3a6422e81b4f4885dc3af7cadcc5c582089050877f27bcc768bd31b9d00687a7e53c3ce53c426762706188790ea20b2e819638df8083089150877f0d91cef51a76f7a62c51c73a2809732d79ac350159814ea536487368cfdfd70884089250877f20a9ecdc649a26388dc68dc02343a0f167bad46d6aa1cd008537f627ba14073085089350877f23134149a0d4567c6dfc911d5cb80c1a1016220d39e0c230325dae2941f528bb86089450877f2a07507e9f030a42c6f29ccf1c9cc4f3e5a5b0dbf05874d5edadc03fe74b947487089550877f1bdf66bb1d57fd788e54ef29f06f35fdb2729b718ce81152cf3aafc64966110b880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200562e60005262005a78565b877f275c33d07f9e7338ddf50783bf158d51be619bf77a12020cf5630b78e7e0d0b982089050877f16411554e55fe604a1ff1b3b5b7afb6a2bfd0f32c4070b55bf1ad234e8b2811683089150877f073e6ac7e6af227557249ca1a5c55222a36c641bc2851a0dfcfb60831f6759a884089250877f10a6fde88c5f621d748543c76a218f95c202bbc3baca06838f31331b0556e12f85089350877f29c5865a26588ca8a88128a072c8434cc97a1bcec23e136f038d29dcf96b0eb686089450877f233e0ef6ad132ed211b1911cdd569576fea8c17ca64e4d5dd516fcca07212c1a87089550877f096f9b92b9cf2c7d664408a29860365f5b6adc238d878a476bded3e4d2e0b840880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200579960005262005a78565b877f2fc788fe8aad4c28b943bb57cb90edf6d7b1f1e835de1fbf3192e395db78555482089050877f1bac0ed609233148503795fc5e114076ef7c9d722bc648dd0338d9689f6e023a83089150877f001c35268aa030d6cd148e106e3fc23094e561573d8c72a69fc383643e2adc8284089250877f2bb1f8fe5d998d0b8b92837ffb27bfe7a39ce39ff94fc167ddcc95a7202e34b285089350877f1a98576450a43e5e705b9af68cd0c145422da23945630b10b8e821dd61f9a2b286089450877f2714d37ee506efbc2ba9941043fb23f16af966f123d653f38388bcbdd50e603787089550877f175d0480ba14abf0bcb8075a03f4a2a01ff7ed75413917b53e50ea00cc2a4ad0880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200590460005262005a78565b877f203de45a037b75ef63761750dce08da2be7709701ec8158c17fc026fd084d54182089050877f265aabfc78b70ca985c329080d6329a12560f76b01cc3d431a7283022193abf883089150877f135468dfbeb70e8c2edaffac8658a6c22b2ad1520ac0819c127af2ea5f3a87a884089250877f216a41e24329deda65a8a82001c84ce8286c61758447ff1bfa9d9293b6711fdd85089350877f2887ed49797bd6652bed8bb99ae345ad70d1a27cdb21b9460bb6fd0d4fe482e686089450877f03e2bf82690c804bb6ee3c79dabd1892ea53a9811e2424a19fae446b8ae49cad87089550877f0e6dce1bbe6e9e465cbe14dcc615611867414676dd8a8ce9946649b1c4e811168808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062005a6f60005262005a78565b60005260206000f35b8760205182098860405184098991088860605185098991088860805186098991088860a05187098991088860c05188098991088860e051890989910888610100518309896101205185098a9108896101405186098a9108896101605187098a9108896101805188098a9108896101a05189098a9108896101c0518a098a9108896101e05184098a6102005186098b91088a6102205187098b91088a6102405188098b91088a6102605189098b91088a610280518a098b91088a6102a0518b098b91088a6102c05185098b6102e05187098c91088b6103005188098c91088b6103205189098c91088b610340518a098c91088b610360518b098c91088b610380518c098c91088b6103a05186098c6103c05188098d91088c6103e05189098d91088c610400518a098d91088c610420518b098d91088c610440518c098d91088c610460518d098d91088c6104805187098d6104a05189098e91088d6104c0518a098e91088d6104e0518b098e91088d610500518c098e91088d610520518d098e91088d610540518e098e91088d6105605188098e610580518a098f91088e6105a0518b098f91088e6105c0518c098f91088e6105e0518d098f91088e610600518e098f91088e610620518f098f91089c509a509850965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/Ramp.json",
    "content": "{\n  \"address\": \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xa3760dd7f2c870f9a35fe5316261592a24cb5507982238a676e429554dbcf45a\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"3566644\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000100000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000200000000000000000000000000000000000000000000000000000000000001000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xf690338b394d55f513d4a27b9e996c0d5eb72112a233f0d0fb966a56f836afdf\",\n    \"transactionHash\": \"0xa3760dd7f2c870f9a35fe5316261592a24cb5507982238a676e429554dbcf45a\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 1,\n        \"blockNumber\": 6681004,\n        \"transactionHash\": \"0xa3760dd7f2c870f9a35fe5316261592a24cb5507982238a676e429554dbcf45a\",\n        \"address\": \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 0,\n        \"blockHash\": \"0xf690338b394d55f513d4a27b9e996c0d5eb72112a233f0d0fb966a56f836afdf\"\n      },\n      {\n        \"transactionIndex\": 1,\n        \"blockNumber\": 6681004,\n        \"transactionHash\": \"0xa3760dd7f2c870f9a35fe5316261592a24cb5507982238a676e429554dbcf45a\",\n        \"address\": \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 1,\n        \"blockHash\": \"0xf690338b394d55f513d4a27b9e996c0d5eb72112a233f0d0fb966a56f836afdf\"\n      }\n    ],\n    \"blockNumber\": 6681004,\n    \"cumulativeGasUsed\": \"3613557\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"0xC87eFE0445fbA1FDb8a73553F293272B7bE91c64\",\n    \"20000000\",\n    \"250000000\",\n    \"86400\",\n    \"21600\",\n    \"0\",\n    \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3235f00afe52b593578a06ba6b1f711c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Ramp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Ramp.sol\\\":\\\"Ramp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"./external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"./interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0673d848a6f2d2a80803fe45e2f186625c1a09998eb1da414a39573afcaa4f4f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c06040523480156200001157600080fd5b5060405162003fa138038062003fa18339810160408190526200003491620001e4565b6200003f336200009d565b6001600160a01b0388811660805287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b0319169183169190911790556200008e89620000ed565b50505050505050505062000280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f762000170565b6001600160a01b038116620001625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200016d816200009d565b50565b6000546001600160a01b03163314620001cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000159565b565b6001600160a01b03811681146200016d57600080fd5b60008060008060008060008060006101208a8c0312156200020457600080fd5b89516200021181620001ce565b60208b01519099506200022481620001ce565b60408b01519098506200023781620001ce565b8097505060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a01516200026f81620001ce565b809150509295985092959850929598565b60805160a051613cd8620002c9600039600081816105e701526110cb015260008181610354015281816114110152818161192701528181612e260152612ed50152613cd86000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212209f5c02fc7d99d9a29ddbf394d50a84e561027a6b405d2ef7b323f6d8a34006c964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212209f5c02fc7d99d9a29ddbf394d50a84e561027a6b405d2ef7b323f6d8a34006c964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2121,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)4837\"\n      },\n      {\n        \"astId\": 2124,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)4875\"\n      },\n      {\n        \"astId\": 2126,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 2131,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)2082_storage)\"\n      },\n      {\n        \"astId\": 2136,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)2023_storage)\"\n      },\n      {\n        \"astId\": 2141,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)2041_storage)\"\n      },\n      {\n        \"astId\": 2146,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)2060_storage)\"\n      },\n      {\n        \"astId\": 2148,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2150,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2152,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2154,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2156,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2158,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2160,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessor)4837\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)4875\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)2023_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct Ramp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)2023_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)2082_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)2082_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)2060_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)2060_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)2041_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct Ramp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)2041_storage\"\n      },\n      \"t_struct(AccountInfo)2023_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 2019,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 2022,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)2074_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 2069,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 2073,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)2041_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 2025,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 2029,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 2031,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2033,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2035,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2037,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2040,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)2082_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 2076,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 2078,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2081,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)2074_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)2060_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 2051,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 2053,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 2055,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2057,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2059,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/RevolutAccountRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0x7699Fce34011688a67cC44af4C76d1B38BA1a3a8\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_notaryKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_endpoint\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_host\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"VerifierSigningKeySet\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"endpoint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"host\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"notaryKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRampId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setVerifierSigningKey\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifierSigningKey\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"host\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"profileId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"userAddress\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n          \"name\": \"_publicValues\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_proof\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xa6463f38d6474fe279954bc68ea073e4df8d8b2cf69357738fda91e52905367e\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x7699Fce34011688a67cC44af4C76d1B38BA1a3a8\",\n    \"transactionIndex\": 42,\n    \"gasUsed\": \"1473085\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000002000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000400000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x52924599c3f8588637ae5f9445f5f1b647ebbebb740574c6577ebb50cae32740\",\n    \"transactionHash\": \"0xa6463f38d6474fe279954bc68ea073e4df8d8b2cf69357738fda91e52905367e\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 42,\n        \"blockNumber\": 15021726,\n        \"transactionHash\": \"0xa6463f38d6474fe279954bc68ea073e4df8d8b2cf69357738fda91e52905367e\",\n        \"address\": \"0x7699Fce34011688a67cC44af4C76d1B38BA1a3a8\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 147,\n        \"blockHash\": \"0x52924599c3f8588637ae5f9445f5f1b647ebbebb740574c6577ebb50cae32740\"\n      }\n    ],\n    \"blockNumber\": 15021726,\n    \"cumulativeGasUsed\": \"7525412\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x969FD0eD23A44756678af779FD0206aE123261B2\",\n    \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n    \"0xfa15be4a0fff051ec52e2738d0d62f7e8c0e951705885ed7290a6daff1ed7aee\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"0\",\n    \"GET https://app.revolut.com/api/retail/user/current\",\n    \"app.revolut.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3d00f158650f73562ebab290bf8faab9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_host\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"VerifierSigningKeySet\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"endpoint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"host\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"notaryKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRampId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setVerifierSigningKey\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifierSigningKey\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"_publicValues\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated TLS calls\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\\\":\\\"RevolutAccountRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/TLSBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TLSBaseProcessor is Ownable {\\\\n\\\\n    using SignatureChecker for address;\\\\n    using ECDSA for bytes32;\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    string public endpoint;\\\\n    string public host;\\\\n\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        endpoint = _endpoint;\\\\n        host = _host;\\\\n\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateTLSEndpoint(\\\\n        string memory _expectedEndpoint,\\\\n        string memory _passedEndpoint\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\\\n            \\\\\\\"Endpoint does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateTLSHost(\\\\n        string memory _expectedHost,\\\\n        string memory _passedHost\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\\\n            \\\\\\\"Host does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n\\\\n    function _isValidSignature(\\\\n        bytes memory _message,\\\\n        bytes memory _signature,\\\\n        address _signer\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\\\n\\\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x366ab1cc4ebfdb4ba68fdb43b902676e67e7760ae1987e4252e5839e8370a6c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRevolutAccountRegistrationProcessor } from \\\\\\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TLSBaseProcessor } from \\\\\\\"../../processors/TLSBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\\\n\\\\n    using ECDSA for bytes32;\\\\n    using SignatureChecker for address;\\\\n    using StringConversionUtils for string;\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\\\n    \\\\n    /* ============ Public Variables ============ */\\\\n    address public verifierSigningKey;\\\\n    bytes32 public notaryKeyHash;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        address _verifierSigningKey,\\\\n        bytes32 _notaryKeyHash,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        TLSBaseProcessor(\\\\n            _ramp,\\\\n            _nullifierRegistry,\\\\n            _timestampBuffer,\\\\n            _endpoint,\\\\n            _host\\\\n        )\\\\n    {\\\\n        verifierSigningKey = _verifierSigningKey;\\\\n        notaryKeyHash = _notaryKeyHash;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 onRampId)\\\\n    {\\\\n        _validateProof(_proof.public_values, _proof.proof);\\\\n\\\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\\\n        _validateTLSHost(host, _proof.public_values.host);\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\\\n\\\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\\\n    }\\\\n\\\\n    /* ============ External Admin Functions ============ */\\\\n\\\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\\\n        verifierSigningKey = _verifierSigningKey;\\\\n\\\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function verifyProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\\\n        bytes memory _proof\\\\n    )\\\\n        public\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes memory encodedMessage = abi.encode(\\\\n            _publicValues.endpoint,\\\\n            _publicValues.host,\\\\n            _publicValues.profileId,\\\\n            _publicValues.userAddress,\\\\n            _publicValues.notaryKeyHash\\\\n        );\\\\n\\\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\\\\\"Invalid notary key hash\\\\\\\");\\\\n\\\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n    {   \\\\n        require(\\\\n            verifyProof(_publicValues, _proof),\\\\n            \\\\\\\"Invalid proof\\\\\\\"\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x2e0d697451ba4cc026f7299f269f90bbba6f4efdda1be1f9a9575ba4af1b5cc2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistrationProcessor {\\\\n\\\\n    struct RegistrationData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string profileId;\\\\n        address userAddress;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct RegistrationProof {\\\\n        RegistrationData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb3e358861c8fb5d7c81c48e3eac4e0f4ce3c03ddfe4136aada9759b61e5e465a\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001a2c38038062001a2c8339810160408190526200003491620001e8565b86848484846200004433620000ba565b6001600160a01b03851660805260016200005f838262000335565b5060026200006e828262000335565b5050600380546001600160a01b039485166001600160a01b0319918216179091556004929092555060058054999092169816979097179096555050506006919091555062000401915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014b57600080fd5b81516001600160401b038082111562000168576200016862000123565b604051601f8301601f19908116603f0116810190828211818310171562000193576200019362000123565b81604052838152602092508683858801011115620001b057600080fd5b600091505b83821015620001d45785820183015181830184015290820190620001b5565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200020457600080fd5b875162000211816200010a565b602089015190975062000224816200010a565b604089015160608a015191975095506200023e816200010a565b608089015160a08a015191955093506001600160401b03808211156200026357600080fd5b620002718b838c0162000139565b935060c08a01519150808211156200028857600080fd5b50620002978a828b0162000139565b91505092959891949750929550565b600181811c90821680620002bb57607f821691505b602082108103620002dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033057600081815260208120601f850160051c810160208610156200030b5750805b601f850160051c820191505b818110156200032c5782815560010162000317565b5050505b505050565b81516001600160401b0381111562000351576200035162000123565b6200036981620003628454620002a6565b84620002e2565b602080601f831160018114620003a15760008415620003885750858301515b600019600386901b1c1916600185901b1785556200032c565b600085815260208120601f198616915b82811015620003d257888601518255948401946001909101908401620003b1565b5085821015620003f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611608620004246000396000818161012401526103f901526116086000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063b870676c1161008c578063dec965d311610066578063dec965d3146101e9578063f193eda6146101fc578063f2fde38b14610205578063f437bc591461021857600080fd5b8063b870676c1461019c578063beb15c21146101af578063dbac5821146101d257600080fd5b80635e280f11116100c85780635e280f111461015b578063715018a6146101705780638da5cb5b14610178578063b2a3fda41461018957600080fd5b80630fa4ed4d146100ef57806315d276e11461011f5780634e06a32b14610146575b600080fd5b600554610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101027f000000000000000000000000000000000000000000000000000000000000000081565b610159610154366004610fca565b610220565b005b61016361027c565b6040516101169190611035565b61015961030a565b6000546001600160a01b0316610102565b610159610197366004611048565b61031e565b600354610102906001600160a01b031681565b6101c26101bd3660046111e5565b61032b565b6040519015158152602001610116565b6101db60045481565b604051908152602001610116565b6101db6101f736600461125d565b6103ec565b6101db60065481565b610159610213366004610fca565b610744565b6101636107bd565b6102286107ca565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fb8603ceabf8ee4633f1fd8c0ae9e0e64f2fc2fea5cb79a96c18efd007aab6f969060200160405180910390a150565b6001805461028990611298565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611298565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050505081565b6103126107ca565b61031c6000610824565b565b6103266107ca565b600455565b6000808360000151846020015185604001518660600151876080015160405160200161035b9594939291906112d2565b6040516020818303038152906040529050600654846080015160001b146103c95760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e6f74617279206b6579206861736800000000000000000060448201526064015b60405180910390fd5b6005546103e290829085906001600160a01b0316610874565b9150505b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104665760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064016103c0565b6104c36104738380611329565b61047c90611349565b6104896020850185611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108c892505050565b6105a3600180546104d390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff90611298565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b5061055f93508792508291506113299050565b6105699080611355565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091292505050565b610687600280546105b390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546105df90611298565b801561062c5780601f106106015761010080835404028352916020019161062c565b820191906000526020600020905b81548152906001019060200180831161060f57829003601f168201915b5061063f93508792508291506113299050565b61064d906020810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ad92505050565b6106ea6106948380611329565b6106a5906080810190606001610fca565b6106af8480611329565b6106bd906040810190611355565b6040516020016106cf9392919061139c565b60405160208183030381529060405280519060200120610a48565b6103e660006106f98480611329565b610707906040810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610b639050565b61074c6107ca565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c0565b6107ba81610824565b50565b6002805461028990611298565b6000546001600160a01b0316331461031c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c81206108bf6001600160a01b0384168286610b7b565b95945050505050565b6108d2828261032b565b61090e5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016103c0565b5050565b806040516020016109239190611035565b604051602081830303815290604052805190602001208260405160200161094a9190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d6174636820657870656374656460448201526064016103c0565b806040516020016109be9190611035565b60405160208183030381529060405280519060200120826040516020016109e59190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d617463682065787065637465640000000060448201526064016103c0565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113dc565b15610b025760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016103c0565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610b4857600080fd5b505af1158015610b5c573d6000803e3d6000fd5b5050505050565b6000610b7483601760f91b84610bdc565b9392505050565b6000806000610b8a8585610db9565b90925090506000816004811115610ba357610ba36113fe565b148015610bc15750856001600160a01b0316826001600160a01b0316145b80610bd25750610bd2868686610dfe565b9695505050505050565b600083818080805b8451811015610d3257603060f81b858281518110610c0457610c04611414565b01602001516001600160f81b03191610801590610c455750603960f81b858281518110610c3357610c33611414565b01602001516001600160f81b03191611155b15610c88576030858281518110610c5e57610c5e611414565b0160200151610c70919060f81c611440565b610c7b85600a611453565b610c85919061146a565b93505b8115610c9c5782610c988161147d565b9350505b876001600160f81b031916858281518110610cb957610cb9611414565b01602001516001600160f81b03191603610d20578115610d1b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c730000000060448201526064016103c0565b600191505b80610d2a8161147d565b915050610be4565b5085821115610d8e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b60648201526084016103c0565b610d988287611440565b610da390600a61157a565b610dad9084611453565b98975050505050505050565b6000808251604103610def5760208301516040840151606085015160001a610de387828585610eea565b94509450505050610df7565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401610e28929190611586565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e6691906115a7565b600060405180830381855afa9150503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea6565b606091505b5091509150818015610eba57506020815110155b8015610bd257508051630b135d3f60e11b90610edf90830160209081019084016115b9565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f215750600090506003610fa5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610f75573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f9e57600060019250925050610fa5565b9150600090505b94509492505050565b80356001600160a01b0381168114610fc557600080fd5b919050565b600060208284031215610fdc57600080fd5b610b7482610fae565b60005b83811015611000578181015183820152602001610fe8565b50506000910152565b60008151808452611021816020860160208601610fe5565b601f01601f19169290920160200192915050565b602081526000610b746020830184611009565b60006020828403121561105a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561109a5761109a611061565b60405290565b600067ffffffffffffffff808411156110bb576110bb611061565b604051601f8501601f19908116603f011681019082821181831017156110e3576110e3611061565b816040528093508581528686860111156110fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261112757600080fd5b610b74838335602085016110a0565b600060a0828403121561114857600080fd5b611150611077565b9050813567ffffffffffffffff8082111561116a57600080fd5b61117685838601611116565b8352602084013591508082111561118c57600080fd5b61119885838601611116565b602084015260408401359150808211156111b157600080fd5b506111be84828501611116565b6040830152506111d060608301610fae565b60608201526080820135608082015292915050565b600080604083850312156111f857600080fd5b823567ffffffffffffffff8082111561121057600080fd5b61121c86838701611136565b9350602085013591508082111561123257600080fd5b508301601f8101851361124457600080fd5b611253858235602084016110a0565b9150509250929050565b60006020828403121561126f57600080fd5b813567ffffffffffffffff81111561128657600080fd5b820160408185031215610b7457600080fd5b600181811c908216806112ac57607f821691505b6020821081036112cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60a0815260006112e560a0830188611009565b82810360208401526112f78188611009565b9050828103604084015261130b8187611009565b6001600160a01b039590951660608401525050608001529392505050565b60008235609e1983360301811261133f57600080fd5b9190910192915050565b60006103e63683611136565b6000808335601e1984360301811261136c57600080fd5b83018035915067ffffffffffffffff82111561138757600080fd5b602001915036819003821315610df757600080fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156113ee57600080fd5b81518015158114610b7457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156103e6576103e661142a565b80820281158282048414176103e6576103e661142a565b808201808211156103e6576103e661142a565b60006001820161148f5761148f61142a565b5060010190565b600181815b808511156114d15781600019048211156114b7576114b761142a565b808516156114c457918102915b93841c939080029061149b565b509250929050565b6000826114e8575060016103e6565b816114f5575060006103e6565b816001811461150b576002811461151557611531565b60019150506103e6565b60ff8411156115265761152661142a565b50506001821b6103e6565b5060208310610133831016604e8410600b8410161715611554575081810a6103e6565b61155e8383611496565b80600019048211156115725761157261142a565b029392505050565b6000610b7483836114d9565b82815260406020820152600061159f6040830184611009565b949350505050565b6000825161133f818460208701610fe5565b6000602082840312156115cb57600080fd5b505191905056fea2646970667358221220d18dcf7b2dc9bd7697240198bf08fb73c2276ae25cdbf1ddb3e827fd7b93aa0f64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063b870676c1161008c578063dec965d311610066578063dec965d3146101e9578063f193eda6146101fc578063f2fde38b14610205578063f437bc591461021857600080fd5b8063b870676c1461019c578063beb15c21146101af578063dbac5821146101d257600080fd5b80635e280f11116100c85780635e280f111461015b578063715018a6146101705780638da5cb5b14610178578063b2a3fda41461018957600080fd5b80630fa4ed4d146100ef57806315d276e11461011f5780634e06a32b14610146575b600080fd5b600554610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101027f000000000000000000000000000000000000000000000000000000000000000081565b610159610154366004610fca565b610220565b005b61016361027c565b6040516101169190611035565b61015961030a565b6000546001600160a01b0316610102565b610159610197366004611048565b61031e565b600354610102906001600160a01b031681565b6101c26101bd3660046111e5565b61032b565b6040519015158152602001610116565b6101db60045481565b604051908152602001610116565b6101db6101f736600461125d565b6103ec565b6101db60065481565b610159610213366004610fca565b610744565b6101636107bd565b6102286107ca565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fb8603ceabf8ee4633f1fd8c0ae9e0e64f2fc2fea5cb79a96c18efd007aab6f969060200160405180910390a150565b6001805461028990611298565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611298565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050505081565b6103126107ca565b61031c6000610824565b565b6103266107ca565b600455565b6000808360000151846020015185604001518660600151876080015160405160200161035b9594939291906112d2565b6040516020818303038152906040529050600654846080015160001b146103c95760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e6f74617279206b6579206861736800000000000000000060448201526064015b60405180910390fd5b6005546103e290829085906001600160a01b0316610874565b9150505b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104665760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064016103c0565b6104c36104738380611329565b61047c90611349565b6104896020850185611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108c892505050565b6105a3600180546104d390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff90611298565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b5061055f93508792508291506113299050565b6105699080611355565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091292505050565b610687600280546105b390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546105df90611298565b801561062c5780601f106106015761010080835404028352916020019161062c565b820191906000526020600020905b81548152906001019060200180831161060f57829003601f168201915b5061063f93508792508291506113299050565b61064d906020810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ad92505050565b6106ea6106948380611329565b6106a5906080810190606001610fca565b6106af8480611329565b6106bd906040810190611355565b6040516020016106cf9392919061139c565b60405160208183030381529060405280519060200120610a48565b6103e660006106f98480611329565b610707906040810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610b639050565b61074c6107ca565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c0565b6107ba81610824565b50565b6002805461028990611298565b6000546001600160a01b0316331461031c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c81206108bf6001600160a01b0384168286610b7b565b95945050505050565b6108d2828261032b565b61090e5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016103c0565b5050565b806040516020016109239190611035565b604051602081830303815290604052805190602001208260405160200161094a9190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d6174636820657870656374656460448201526064016103c0565b806040516020016109be9190611035565b60405160208183030381529060405280519060200120826040516020016109e59190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d617463682065787065637465640000000060448201526064016103c0565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113dc565b15610b025760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016103c0565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610b4857600080fd5b505af1158015610b5c573d6000803e3d6000fd5b5050505050565b6000610b7483601760f91b84610bdc565b9392505050565b6000806000610b8a8585610db9565b90925090506000816004811115610ba357610ba36113fe565b148015610bc15750856001600160a01b0316826001600160a01b0316145b80610bd25750610bd2868686610dfe565b9695505050505050565b600083818080805b8451811015610d3257603060f81b858281518110610c0457610c04611414565b01602001516001600160f81b03191610801590610c455750603960f81b858281518110610c3357610c33611414565b01602001516001600160f81b03191611155b15610c88576030858281518110610c5e57610c5e611414565b0160200151610c70919060f81c611440565b610c7b85600a611453565b610c85919061146a565b93505b8115610c9c5782610c988161147d565b9350505b876001600160f81b031916858281518110610cb957610cb9611414565b01602001516001600160f81b03191603610d20578115610d1b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c730000000060448201526064016103c0565b600191505b80610d2a8161147d565b915050610be4565b5085821115610d8e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b60648201526084016103c0565b610d988287611440565b610da390600a61157a565b610dad9084611453565b98975050505050505050565b6000808251604103610def5760208301516040840151606085015160001a610de387828585610eea565b94509450505050610df7565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401610e28929190611586565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e6691906115a7565b600060405180830381855afa9150503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea6565b606091505b5091509150818015610eba57506020815110155b8015610bd257508051630b135d3f60e11b90610edf90830160209081019084016115b9565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f215750600090506003610fa5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610f75573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f9e57600060019250925050610fa5565b9150600090505b94509492505050565b80356001600160a01b0381168114610fc557600080fd5b919050565b600060208284031215610fdc57600080fd5b610b7482610fae565b60005b83811015611000578181015183820152602001610fe8565b50506000910152565b60008151808452611021816020860160208601610fe5565b601f01601f19169290920160200192915050565b602081526000610b746020830184611009565b60006020828403121561105a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561109a5761109a611061565b60405290565b600067ffffffffffffffff808411156110bb576110bb611061565b604051601f8501601f19908116603f011681019082821181831017156110e3576110e3611061565b816040528093508581528686860111156110fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261112757600080fd5b610b74838335602085016110a0565b600060a0828403121561114857600080fd5b611150611077565b9050813567ffffffffffffffff8082111561116a57600080fd5b61117685838601611116565b8352602084013591508082111561118c57600080fd5b61119885838601611116565b602084015260408401359150808211156111b157600080fd5b506111be84828501611116565b6040830152506111d060608301610fae565b60608201526080820135608082015292915050565b600080604083850312156111f857600080fd5b823567ffffffffffffffff8082111561121057600080fd5b61121c86838701611136565b9350602085013591508082111561123257600080fd5b508301601f8101851361124457600080fd5b611253858235602084016110a0565b9150509250929050565b60006020828403121561126f57600080fd5b813567ffffffffffffffff81111561128657600080fd5b820160408185031215610b7457600080fd5b600181811c908216806112ac57607f821691505b6020821081036112cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60a0815260006112e560a0830188611009565b82810360208401526112f78188611009565b9050828103604084015261130b8187611009565b6001600160a01b039590951660608401525050608001529392505050565b60008235609e1983360301811261133f57600080fd5b9190910192915050565b60006103e63683611136565b6000808335601e1984360301811261136c57600080fd5b83018035915067ffffffffffffffff82111561138757600080fd5b602001915036819003821315610df757600080fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156113ee57600080fd5b81518015158114610b7457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156103e6576103e661142a565b80820281158282048414176103e6576103e661142a565b808201808211156103e6576103e661142a565b60006001820161148f5761148f61142a565b5060010190565b600181815b808511156114d15781600019048211156114b7576114b761142a565b808516156114c457918102915b93841c939080029061149b565b509250929050565b6000826114e8575060016103e6565b816114f5575060006103e6565b816001811461150b576002811461151557611531565b60019150506103e6565b60ff8411156115265761152661142a565b50506001821b6103e6565b5060208310610133831016604e8410600b8410161715611554575081810a6103e6565b61155e8383611496565b80600019048211156115725761157261142a565b029392505050565b6000610b7483836114d9565b82815260406020820152600061159f6040830184611009565b949350505050565b6000825161133f818460208701610fe5565b6000602082840312156115cb57600080fd5b505191905056fea2646970667358221220d18dcf7b2dc9bd7697240198bf08fb73c2276ae25cdbf1ddb3e827fd7b93aa0f64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated TLS calls\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2232,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"endpoint\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2234,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"host\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2237,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_contract(INullifierRegistry)2402\"\n      },\n      {\n        \"astId\": 2239,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2435,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"verifierSigningKey\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"notaryKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_bytes32\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(INullifierRegistry)2402\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/RevolutAccountRegistry.json",
    "content": "{\n  \"address\": \"0x969FD0eD23A44756678af779FD0206aE123261B2\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"accountId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AllowlistEnabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewAccountRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accountRegistrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_allowedUsers\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"addAccountsToAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAllowedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"_accountRegistrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAllowedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isAllowlistEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isRegisteredUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_disallowedUsers\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"removeAccountsFromAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setAccountRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x6482d91efcc34617c9d8bc1c1146144decbfa2de1c9dec6fa15cab0c83f759c9\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x969FD0eD23A44756678af779FD0206aE123261B2\",\n    \"transactionIndex\": 31,\n    \"gasUsed\": \"1200937\",\n    \"logsBloom\": \"0x80000000000000000000000020000000000000000000000000800000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x62e4cce8b434ce4f80fa0e0d4a9c33df9c1c336db9b5c5dbed9de9a255a8d740\",\n    \"transactionHash\": \"0x6482d91efcc34617c9d8bc1c1146144decbfa2de1c9dec6fa15cab0c83f759c9\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 31,\n        \"blockNumber\": 15021723,\n        \"transactionHash\": \"0x6482d91efcc34617c9d8bc1c1146144decbfa2de1c9dec6fa15cab0c83f759c9\",\n        \"address\": \"0x969FD0eD23A44756678af779FD0206aE123261B2\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 99,\n        \"blockHash\": \"0x62e4cce8b434ce4f80fa0e0d4a9c33df9c1c336db9b5c5dbed9de9a255a8d740\"\n      },\n      {\n        \"transactionIndex\": 31,\n        \"blockNumber\": 15021723,\n        \"transactionHash\": \"0x6482d91efcc34617c9d8bc1c1146144decbfa2de1c9dec6fa15cab0c83f759c9\",\n        \"address\": \"0x969FD0eD23A44756678af779FD0206aE123261B2\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 100,\n        \"blockHash\": \"0x62e4cce8b434ce4f80fa0e0d4a9c33df9c1c336db9b5c5dbed9de9a255a8d740\"\n      }\n    ],\n    \"blockNumber\": 15021723,\n    \"cumulativeGasUsed\": \"6156397\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"accountId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AllowlistEnabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewAccountRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"accountRegistrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_allowedUsers\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"addAccountsToAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountId\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAllowedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"_accountRegistrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAllowedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isAllowlistEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isRegisteredUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_disallowedUsers\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"removeAccountsFromAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setAccountRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"accountId being banned\\\"}},\\\"addAccountsToAllowlist(bytes32[])\\\":{\\\"params\\\":{\\\"_allowedUsers\\\":\\\"List of accountIds allowed to signal intents on the user's deposit\\\"}},\\\"initialize(address)\\\":{\\\"params\\\":{\\\"_accountRegistrationProcessor\\\":\\\"Account Registration processor address\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(((string,string,string,address,uint256),bytes))\\\":{\\\"params\\\":{\\\"_proof\\\":\\\"Registration proof consisting of unredacted data being notarized and a signature\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"accountId being approved\\\"}},\\\"removeAccountsFromAllowlist(bytes32[])\\\":{\\\"params\\\":{\\\"_disallowedUsers\\\":\\\"List of accountIds being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setAccountRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"addAccountsToAllowlist(bytes32[])\\\":{\\\"notice\\\":\\\"Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will be able to signal intents on the user's deposit.\\\"},\\\"enableAllowlist()\\\":{\\\"notice\\\":\\\"Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\\"},\\\"initialize(address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"register(((string,string,string,address,uint256),bytes))\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the profileId from the proof and assigning the account owner to the sender of the transaction.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes an accountId from a depositor's deny list.\\\"},\\\"removeAccountsFromAllowlist(bytes32[])\\\":{\\\"notice\\\":\\\"Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be able to signal intents on the user's deposit.\\\"},\\\"setAccountRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutAccountRegistry.sol\\\":\\\"RevolutAccountRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/ramps/revolut/RevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IRevolutAccountRegistrationProcessor } from \\\\\\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\\\\\";\\\\nimport { IRevolutAccountRegistry } from \\\\\\\"./interfaces/IRevolutAccountRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\\\n\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n\\\\n    event AllowlistEnabled(bytes32 listOwner);\\\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\\\n\\\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    struct AllowList {\\\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(isRegisteredUser(msg.sender), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\\\n\\\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\\\n\\\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\\\n                                                                                // resulting hash is the accountId for our system\\\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\\\n     */\\\\n    function initialize(\\\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\\\n     * sender of the transaction.\\\\n     *\\\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\\\n     */\\\\n    function register(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    {\\\\n        require(msg.sender == _proof.public_values.userAddress, \\\\\\\"Caller must be address specified in proof\\\\\\\");\\\\n        require(accounts[msg.sender] == bytes32(0), \\\\\\\"Account already associated with accountId\\\\\\\");\\\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\\\n\\\\n        accounts[msg.sender] = accountId;\\\\n\\\\n        emit AccountRegistered(msg.sender, accountId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   accountId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender];\\\\n\\\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes an accountId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   accountId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender];\\\\n\\\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\\\n     */\\\\n    function enableAllowlist() external onlyRegisteredUser {\\\\n        bytes32 allowingUser = accounts[msg.sender];\\\\n\\\\n        require(!allowList[allowingUser].isEnabled, \\\\\\\"Allow list already enabled\\\\\\\");\\\\n\\\\n        allowList[allowingUser].isEnabled = true;\\\\n\\\\n        emit AllowlistEnabled(allowingUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\\\n     * be able to signal intents on the user's deposit.\\\\n     *\\\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\\\n     */\\\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\\\n        bytes32 allowingUser = accounts[msg.sender];\\\\n\\\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\\\n            bytes32 allowedUser = _allowedUsers[i];\\\\n\\\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\\\\\"User already on allowlist\\\\\\\");\\\\n\\\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\\\n\\\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\\\n     * able to signal intents on the user's deposit.\\\\n     *\\\\n     * @param _disallowedUsers   List of accountIds being approved\\\\n     */\\\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\\\n        bytes32 disallowingUser = accounts[msg.sender];\\\\n\\\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\\\n            bytes32 disallowedUser = _disallowedUsers[i];\\\\n\\\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\\\\\"User not on allowlist\\\\\\\");\\\\n\\\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\\\n\\\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        accountRegistrationProcessor = _registrationProcessor;\\\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getAccountId(address _account) public view returns (bytes32) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function isRegisteredUser(address _account) public view returns (bool) {\\\\n        return getAccountId(_account) != bytes32(0);\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return denyList[getAccountId(_account)].deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\\\n        return allowList[getAccountId(_account)].isEnabled;\\\\n    }\\\\n\\\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return allowList[getAccountId(_account)].allowedUsers;\\\\n    }\\\\n\\\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\\\n        bytes32 allowingUser = getAccountId(_account);\\\\n\\\\n        // Deny list overrides, if user on deny list then they are not allowed\\\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\\\n\\\\n        // Check if allow list is enabled, if so return status of user, else return true\\\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\\\n     * it can't be used again.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        internal\\\\n        returns (bytes32 accountId)\\\\n    {\\\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x686d9b6ae09e5786bb2e18735d5e8a515657f99ca2850e261058fc4ffce3d64c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistrationProcessor {\\\\n\\\\n    struct RegistrationData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string profileId;\\\\n        address userAddress;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct RegistrationProof {\\\\n        RegistrationData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb3e358861c8fb5d7c81c48e3eac4e0f4ce3c03ddfe4136aada9759b61e5e465a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistry {\\\\n    function getAccountId(address _account) external view returns (bytes32);\\\\n    function isRegisteredUser(address _account) external view returns (bool);\\\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5c58e8996f2d06f3d8bad7b3cef912c6370eecb2f3523ff8c1e15ec05dfb8e74\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523480156200001157600080fd5b50604051620015ee380380620015ee833981016040819052620000349162000182565b6200003f3362000051565b6200004a81620000a1565b50620001b4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000ab62000124565b6001600160a01b038116620001165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001218162000051565b50565b6000546001600160a01b03163314620001805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200010d565b565b6000602082840312156200019557600080fd5b81516001600160a01b0381168114620001ad57600080fd5b9392505050565b61142a80620001c46000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063d884524511610071578063d884524514610273578063e0b490f714610286578063e39ca3b4146102a7578063f2fde38b146102ba578063fbf15b1f146102cd57600080fd5b8063715018a61461022c5780638da5cb5b146102345780639b357b5a14610245578063c4d66de814610258578063c6a2aac81461026b57600080fd5b80631f5bdf5d116100f45780631f5bdf5d146101bf5780633056eb28146101d257806338e4bef6146101e5578063392e53cd146101f85780634595bba01461020c57600080fd5b8063066a82fe146101315780630876dda314610146578063148172da146101765780631acd84d8146101895780631e48fe6b146101ac575b600080fd5b61014461013f366004610fe8565b6102e0565b005b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014461018436600461102a565b61042d565b61019c610197366004611058565b61054b565b604051901515815260200161016d565b6101446101ba36600461109a565b6105d1565b61019c6101cd366004611158565b610720565b6101446101e0366004611158565b610734565b61019c6101f3366004611158565b610791565b60015461019c90600160a01b900460ff1681565b61021f61021a366004611158565b6107ba565b60405161016d9190611175565b610144610830565b6000546001600160a01b0316610159565b61014461025336600461102a565b610844565b610144610266366004611158565b610943565b6101446109c2565b61014461028136600461109a565b610aa1565b610299610294366004611158565b610bfc565b60405190815260200161016d565b61021f6102b5366004611158565b610c17565b6101446102c8366004611158565b610c8b565b61019c6102db366004611058565b610d04565b6102ea81806111b9565b6102fb906080810190606001611158565b6001600160a01b0316336001600160a01b0316146103725760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206d7573742062652061646472657373207370656369666965646044820152681034b710383937b7b360b91b60648201526084015b60405180910390fd5b33600090815260026020526040902054156103e15760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152681858d8dbdd5b9d125960ba1b6064820152608401610369565b60006103ec82610d3f565b336000818152600260205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050565b61043633610720565b6104525760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff16156104cc5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610369565b600081815260036020818152604080842086855260018181018452828620805460ff191682179055938352805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061053f9083908590918252602082015260400190565b60405180910390a15050565b60008061055784610bfc565b600081815260036020908152604080832087845260010190915290205490915060ff16156105895760009150506105cb565b60008181526004602052604090205460ff166105a65760016105c7565b600081815260046020908152604080832086845260020190915290205460ff165b9150505b92915050565b6105da33610720565b6105f65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b57600083828151811061062557610625611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff166106975760405162461bcd60e51b8152602060048201526015602482015274155cd95c881b9bdd081bdb88185b1b1bdddb1a5cdd605a1b6044820152606401610369565b6000838152600460208181526040808420858552600281018352908420805460ff1916905592869052526106ce9060010182610db3565b827fe87ba7050133e8b4c8b879f99b3276368eaca3b81f4ea415d9528843a15d8c638260405161070091815260200190565b60405180910390a250806107138161123c565b915050610608565b505050565b60008061072c83610bfc565b141592915050565b61073c610edb565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd4e734c9a89ace3649766f5233487313285fe97ca577c2602beda889ef46dd3906020015b60405180910390a150565b6000600460006107a084610bfc565b815260208101919091526040016000205460ff1692915050565b6060600360006107c984610bfc565b815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020905b815481526020019060010190808311610810575b50505050509050919050565b610838610edb565b6108426000610f35565b565b61084d33610720565b6108695760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff166108d95760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610369565b6000818152600360208181526040808420868552600181018352908420805460ff19169055928490525261090d9083610db3565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161053f565b61094b610edb565b600154600160a01b900460ff161561099b5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610369565b600180546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6109cb33610720565b6109e75760405162461bcd60e51b8152600401610369906111d9565b3360009081526002602090815260408083205480845260049092529091205460ff1615610a565760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f77206c69737420616c726561647920656e61626c65640000000000006044820152606401610369565b60008181526004602052604090819020805460ff19166001179055517f08df0a71ea3e5565a2138936ed06eaba47996a3ccfde2dae1f3edd1164e299d7906107869083815260200190565b610aaa33610720565b610ac65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b576000838281518110610af557610af5611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff1615610b705760405162461bcd60e51b815260206004820152601960248201527f5573657220616c7265616479206f6e20616c6c6f776c697374000000000000006044820152606401610369565b6000838152600460208181526040808420858552600281018352818520805460ff1916600190811790915593835283018054938401815584529220018290555183907f857ce673abc5a303fa8303102f12b42079aa85b97bca15b56428764dd1dec4d290610be19084815260200190565b60405180910390a25080610bf48161123c565b915050610ad8565b6001600160a01b031660009081526002602052604090205490565b606060046000610c2684610bfc565b815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020908154815260200190600101908083116108105750505050509050919050565b610c93610edb565b6001600160a01b038116610cf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610369565b610d0181610f35565b50565b600060036000610d1385610bfc565b81526020808201929092526040908101600090812085825260010190925290205460ff16905092915050565b60015460405163dec965d360e01b81526000916001600160a01b03169063dec965d390610d709085906004016112c4565b6020604051808303816000875af1158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cb91906113b2565b600080610e0f84805480602002602001604051908101604052809291908181526020018280548015610e0457602002820191906000526020600020905b815481526020019060010190808311610df0575b505050505084610f85565b9150915080610e585760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610369565b8354600090610e69906001906113cb565b9050808314610eae57848181548110610e8457610e84611210565b9060005260206000200154858481548110610ea157610ea1611210565b6000918252602090912001555b84805480610ebe57610ebe6113de565b600190038181906000526020600020016000905590555050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610369565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b81811015610fd55784868281518110610fa957610fa9611210565b602002602001015103610fc357925060019150610fe19050565b80610fcd8161123c565b915050610f8e565b50600019600092509250505b9250929050565b600060208284031215610ffa57600080fd5b813567ffffffffffffffff81111561101157600080fd5b82016040818503121561102357600080fd5b9392505050565b60006020828403121561103c57600080fd5b5035919050565b6001600160a01b0381168114610d0157600080fd5b6000806040838503121561106b57600080fd5b823561107681611043565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156110ad57600080fd5b823567ffffffffffffffff808211156110c557600080fd5b818501915085601f8301126110d957600080fd5b8135818111156110eb576110eb611084565b8060051b604051601f19603f8301168101818110858211171561111057611110611084565b60405291825284820192508381018501918883111561112e57600080fd5b938501935b8285101561114c57843584529385019392850192611133565b98975050505050505050565b60006020828403121561116a57600080fd5b813561102381611043565b6020808252825182820181905260009190848201906040850190845b818110156111ad57835183529284019291840191600101611191565b50909695505050505050565b60008235609e198336030181126111cf57600080fd5b9190910192915050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161124e5761124e611226565b5060010190565b6000808335601e1984360301811261126c57600080fd5b830160208101925035905067ffffffffffffffff81111561128c57600080fd5b803603821315610fe157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235609e198436030181126112de57600080fd5b6040602084015283016112f18180611255565b60a060608601526113076101008601828461129b565b9150506113176020830183611255565b605f198087850301608088015261132f84838561129b565b935061133e6040860186611255565b93509150808785030160a08801525061135883838361129b565b92505050606082013561136a81611043565b6001600160a01b031660c0850152608082013560e085015261138f6020860186611255565b858303601f1901604087015292506113a882848361129b565b9695505050505050565b6000602082840312156113c457600080fd5b5051919050565b818103818111156105cb576105cb611226565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204d908448568dee8f178658c3e858dab36e0dff4876b3de68433ba819907de6b964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063d884524511610071578063d884524514610273578063e0b490f714610286578063e39ca3b4146102a7578063f2fde38b146102ba578063fbf15b1f146102cd57600080fd5b8063715018a61461022c5780638da5cb5b146102345780639b357b5a14610245578063c4d66de814610258578063c6a2aac81461026b57600080fd5b80631f5bdf5d116100f45780631f5bdf5d146101bf5780633056eb28146101d257806338e4bef6146101e5578063392e53cd146101f85780634595bba01461020c57600080fd5b8063066a82fe146101315780630876dda314610146578063148172da146101765780631acd84d8146101895780631e48fe6b146101ac575b600080fd5b61014461013f366004610fe8565b6102e0565b005b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014461018436600461102a565b61042d565b61019c610197366004611058565b61054b565b604051901515815260200161016d565b6101446101ba36600461109a565b6105d1565b61019c6101cd366004611158565b610720565b6101446101e0366004611158565b610734565b61019c6101f3366004611158565b610791565b60015461019c90600160a01b900460ff1681565b61021f61021a366004611158565b6107ba565b60405161016d9190611175565b610144610830565b6000546001600160a01b0316610159565b61014461025336600461102a565b610844565b610144610266366004611158565b610943565b6101446109c2565b61014461028136600461109a565b610aa1565b610299610294366004611158565b610bfc565b60405190815260200161016d565b61021f6102b5366004611158565b610c17565b6101446102c8366004611158565b610c8b565b61019c6102db366004611058565b610d04565b6102ea81806111b9565b6102fb906080810190606001611158565b6001600160a01b0316336001600160a01b0316146103725760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206d7573742062652061646472657373207370656369666965646044820152681034b710383937b7b360b91b60648201526084015b60405180910390fd5b33600090815260026020526040902054156103e15760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152681858d8dbdd5b9d125960ba1b6064820152608401610369565b60006103ec82610d3f565b336000818152600260205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050565b61043633610720565b6104525760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff16156104cc5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610369565b600081815260036020818152604080842086855260018181018452828620805460ff191682179055938352805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061053f9083908590918252602082015260400190565b60405180910390a15050565b60008061055784610bfc565b600081815260036020908152604080832087845260010190915290205490915060ff16156105895760009150506105cb565b60008181526004602052604090205460ff166105a65760016105c7565b600081815260046020908152604080832086845260020190915290205460ff165b9150505b92915050565b6105da33610720565b6105f65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b57600083828151811061062557610625611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff166106975760405162461bcd60e51b8152602060048201526015602482015274155cd95c881b9bdd081bdb88185b1b1bdddb1a5cdd605a1b6044820152606401610369565b6000838152600460208181526040808420858552600281018352908420805460ff1916905592869052526106ce9060010182610db3565b827fe87ba7050133e8b4c8b879f99b3276368eaca3b81f4ea415d9528843a15d8c638260405161070091815260200190565b60405180910390a250806107138161123c565b915050610608565b505050565b60008061072c83610bfc565b141592915050565b61073c610edb565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd4e734c9a89ace3649766f5233487313285fe97ca577c2602beda889ef46dd3906020015b60405180910390a150565b6000600460006107a084610bfc565b815260208101919091526040016000205460ff1692915050565b6060600360006107c984610bfc565b815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020905b815481526020019060010190808311610810575b50505050509050919050565b610838610edb565b6108426000610f35565b565b61084d33610720565b6108695760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff166108d95760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610369565b6000818152600360208181526040808420868552600181018352908420805460ff19169055928490525261090d9083610db3565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161053f565b61094b610edb565b600154600160a01b900460ff161561099b5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610369565b600180546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6109cb33610720565b6109e75760405162461bcd60e51b8152600401610369906111d9565b3360009081526002602090815260408083205480845260049092529091205460ff1615610a565760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f77206c69737420616c726561647920656e61626c65640000000000006044820152606401610369565b60008181526004602052604090819020805460ff19166001179055517f08df0a71ea3e5565a2138936ed06eaba47996a3ccfde2dae1f3edd1164e299d7906107869083815260200190565b610aaa33610720565b610ac65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b576000838281518110610af557610af5611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff1615610b705760405162461bcd60e51b815260206004820152601960248201527f5573657220616c7265616479206f6e20616c6c6f776c697374000000000000006044820152606401610369565b6000838152600460208181526040808420858552600281018352818520805460ff1916600190811790915593835283018054938401815584529220018290555183907f857ce673abc5a303fa8303102f12b42079aa85b97bca15b56428764dd1dec4d290610be19084815260200190565b60405180910390a25080610bf48161123c565b915050610ad8565b6001600160a01b031660009081526002602052604090205490565b606060046000610c2684610bfc565b815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020908154815260200190600101908083116108105750505050509050919050565b610c93610edb565b6001600160a01b038116610cf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610369565b610d0181610f35565b50565b600060036000610d1385610bfc565b81526020808201929092526040908101600090812085825260010190925290205460ff16905092915050565b60015460405163dec965d360e01b81526000916001600160a01b03169063dec965d390610d709085906004016112c4565b6020604051808303816000875af1158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cb91906113b2565b600080610e0f84805480602002602001604051908101604052809291908181526020018280548015610e0457602002820191906000526020600020905b815481526020019060010190808311610df0575b505050505084610f85565b9150915080610e585760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610369565b8354600090610e69906001906113cb565b9050808314610eae57848181548110610e8457610e84611210565b9060005260206000200154858481548110610ea157610ea1611210565b6000918252602090912001555b84805480610ebe57610ebe6113de565b600190038181906000526020600020016000905590555050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610369565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b81811015610fd55784868281518110610fa957610fa9611210565b602002602001015103610fc357925060019150610fe19050565b80610fcd8161123c565b915050610f8e565b50600019600092509250505b9250929050565b600060208284031215610ffa57600080fd5b813567ffffffffffffffff81111561101157600080fd5b82016040818503121561102357600080fd5b9392505050565b60006020828403121561103c57600080fd5b5035919050565b6001600160a01b0381168114610d0157600080fd5b6000806040838503121561106b57600080fd5b823561107681611043565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156110ad57600080fd5b823567ffffffffffffffff808211156110c557600080fd5b818501915085601f8301126110d957600080fd5b8135818111156110eb576110eb611084565b8060051b604051601f19603f8301168101818110858211171561111057611110611084565b60405291825284820192508381018501918883111561112e57600080fd5b938501935b8285101561114c57843584529385019392850192611133565b98975050505050505050565b60006020828403121561116a57600080fd5b813561102381611043565b6020808252825182820181905260009190848201906040850190845b818110156111ad57835183529284019291840191600101611191565b50909695505050505050565b60008235609e198336030181126111cf57600080fd5b9190910192915050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161124e5761124e611226565b5060010190565b6000808335601e1984360301811261126c57600080fd5b830160208101925035905067ffffffffffffffff81111561128c57600080fd5b803603821315610fe157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235609e198436030181126112de57600080fd5b6040602084015283016112f18180611255565b60a060608601526113076101008601828461129b565b9150506113176020830183611255565b605f198087850301608088015261132f84838561129b565b935061133e6040860186611255565b93509150808785030160a08801525061135883838361129b565b92505050606082013561136a81611043565b6001600160a01b031660c0850152608082013560e085015261138f6020860186611255565b858303601f1901604087015292506113a882848361129b565b9695505050505050565b6000602082840312156113c457600080fd5b5051919050565b818103818111156105cb576105cb611226565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204d908448568dee8f178658c3e858dab36e0dff4876b3de68433ba819907de6b964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"accountId being banned\"\n        }\n      },\n      \"addAccountsToAllowlist(bytes32[])\": {\n        \"params\": {\n          \"_allowedUsers\": \"List of accountIds allowed to signal intents on the user's deposit\"\n        }\n      },\n      \"initialize(address)\": {\n        \"params\": {\n          \"_accountRegistrationProcessor\": \"Account Registration processor address\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(((string,string,string,address,uint256),bytes))\": {\n        \"params\": {\n          \"_proof\": \"Registration proof consisting of unredacted data being notarized and a signature\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"accountId being approved\"\n        }\n      },\n      \"removeAccountsFromAllowlist(bytes32[])\": {\n        \"params\": {\n          \"_disallowedUsers\": \"List of accountIds being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setAccountRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"addAccountsToAllowlist(bytes32[])\": {\n        \"notice\": \"Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will be able to signal intents on the user's deposit.\"\n      },\n      \"enableAllowlist()\": {\n        \"notice\": \"Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\"\n      },\n      \"initialize(address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"register(((string,string,string,address,uint256),bytes))\": {\n        \"notice\": \"Registers a new account by pulling the profileId from the proof and assigning the account owner to the sender of the transaction.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes an accountId from a depositor's deny list.\"\n      },\n      \"removeAccountsFromAllowlist(bytes32[])\": {\n        \"notice\": \"Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be able to signal intents on the user's deposit.\"\n      },\n      \"setAccountRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 12732,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"accountRegistrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRevolutAccountRegistrationProcessor)15419\"\n      },\n      {\n        \"astId\": 12734,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"1\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 12738,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bytes32)\"\n      },\n      {\n        \"astId\": 12743,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"denyList\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(DenyList)12707_storage)\"\n      },\n      {\n        \"astId\": 12748,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"allowList\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(AllowList)12717_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRevolutAccountRegistrationProcessor)15419\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutAccountRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_bytes32)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bytes32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(AllowList)12717_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutAccountRegistry.AllowList)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AllowList)12717_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(DenyList)12707_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutAccountRegistry.DenyList)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(DenyList)12707_storage\"\n      },\n      \"t_struct(AllowList)12717_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutAccountRegistry.AllowList\",\n        \"members\": [\n          {\n            \"astId\": 12709,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isEnabled\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 12712,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"allowedUsers\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 12716,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isAllowed\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_struct(DenyList)12707_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutAccountRegistry.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 12702,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 12706,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/RevolutRamp.json",
    "content": "{\n  \"address\": \"0xeb33C544dBd9a487de0522fE886fc38D66887533\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRampId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"currencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"accountId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accountRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"revolutTag\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"notaryKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"receiveCurrencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"revolutTag\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"receiveCurrencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHashAsUint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistry\",\n          \"name\": \"_accountRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_revolutTag\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_receiveCurrencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_notaryKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"host\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"transferId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"recipientId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"amount\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"currencyId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"status\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"timestamp\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentHash\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n          \"name\": \"_sendData\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_verifierSignature\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc1a0bd0ed41375f109b252f0ae618f14dc90adf7608812809a8321a6429f73f9\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xeb33C544dBd9a487de0522fE886fc38D66887533\",\n    \"transactionIndex\": 20,\n    \"gasUsed\": \"4065989\",\n    \"logsBloom\": \"0x00000000000000000000080000000000000000000000000000800000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xad506c5db6009318a6aa365beeb98182d45937ce53d1b06c905e27ba68bc835d\",\n    \"transactionHash\": \"0xc1a0bd0ed41375f109b252f0ae618f14dc90adf7608812809a8321a6429f73f9\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 20,\n        \"blockNumber\": 15021720,\n        \"transactionHash\": \"0xc1a0bd0ed41375f109b252f0ae618f14dc90adf7608812809a8321a6429f73f9\",\n        \"address\": \"0xeb33C544dBd9a487de0522fE886fc38D66887533\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 64,\n        \"blockHash\": \"0xad506c5db6009318a6aa365beeb98182d45937ce53d1b06c905e27ba68bc835d\"\n      },\n      {\n        \"transactionIndex\": 20,\n        \"blockNumber\": 15021720,\n        \"transactionHash\": \"0xc1a0bd0ed41375f109b252f0ae618f14dc90adf7608812809a8321a6429f73f9\",\n        \"address\": \"0xeb33C544dBd9a487de0522fE886fc38D66887533\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 65,\n        \"blockHash\": \"0xad506c5db6009318a6aa365beeb98182d45937ce53d1b06c905e27ba68bc835d\"\n      }\n    ],\n    \"blockNumber\": 15021720,\n    \"cumulativeGasUsed\": \"7177155\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"20000000\",\n    \"250000000\",\n    \"86400\",\n    \"43200\",\n    \"0\",\n    \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRampId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"accountId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"accountRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHashAsUint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistry\\\",\\\"name\\\":\\\"_accountRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"transferId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"recipientId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendData\\\",\\\"name\\\":\\\"_sendData\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_verifierSignature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_accountRegistry\\\":\\\"Account Registry contract for Revolut\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(string,bytes32,uint256,uint256,address,bytes32)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_notaryKeyHash\\\":\\\"Hash of the notary public key that is required to do notarization\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\",\\\"_receiveCurrencyId\\\":\\\"Id of the currency to be received off-chain\\\",\\\"_revolutTag\\\":\\\"Depositor's Revolut tag to receive payments\\\",\\\"_verifierSigningKey\\\":\\\"Public key of the verifier depositor wants to sign the TLS proof\\\"}},\\\"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\\\":{\\\"params\\\":{\\\"_sendData\\\":\\\"Struct containing unredacted data from API call to Revolut\\\",\\\"_verifierSignature\\\":\\\"Signature by verifier of the unredacted data\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(string,bytes32,uint256,uint256,address,bytes32)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutRamp.sol\\\":\\\"RevolutRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/ramps/revolut/RevolutRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IRevolutAccountRegistry } from \\\\\\\"./interfaces/IRevolutAccountRegistry.sol\\\\\\\";\\\\nimport { IRevolutSendProcessor } from \\\\\\\"./interfaces/IRevolutSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed offRampId,\\\\n        bytes32 indexed currencyId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed accountId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        string revolutTag;\\\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _accountRegistry     Account Registry contract for Revolut\\\\n     * @param _sendProcessor       Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRevolutAccountRegistry _accountRegistry,\\\\n        IRevolutSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        accountRegistry = _accountRegistry;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\\\n     * @param _depositAmount        The amount of USDC to off-ramp\\\\n     * @param _receiveAmount        The amount of USD to receive\\\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\\\n     */\\\\n    function offRamp(\\\\n        string calldata _revolutTag,\\\\n        bytes32 _receiveCurrencyId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount,\\\\n        address _verifierSigningKey,\\\\n        bytes32 _notaryKeyHash\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\\\n\\\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\\\\\"Revolut tag must match id\\\\\\\");\\\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        globalAccountInfo.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            revolutTag: _revolutTag,\\\\n            receiveCurrencyId: _receiveCurrencyId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0),\\\\n            verifierSigningKey: _verifierSigningKey,\\\\n            notaryKeyHash: _notaryKeyHash\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n\\\\n        // Caller validity checks\\\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\\\n     */\\\\n    function onRamp(\\\\n        IRevolutSendProcessor.SendData calldata _sendData,\\\\n        bytes calldata _verifierSignature\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\\\n        return uint256(getIdCurrentIntentHash(_account));\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _accountId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        IRevolutSendProcessor.SendData calldata _data,\\\\n        bytes calldata _verifierSignature\\\\n    )\\\\n        internal\\\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\\\n    {\\\\n        intentHash = bytes32(_data.intentHash);\\\\n        intent = intents[intentHash];\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Caller must be the on-ramper\\\\\\\");\\\\n\\\\n        deposit = deposits[intent.deposit];\\\\n\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperId,\\\\n            bytes32 currencyId,\\\\n            bytes32 notaryKeyHash\\\\n        ) = sendProcessor.processProof(\\\\n            IRevolutSendProcessor.SendProof({\\\\n                public_values: _data,\\\\n                proof: _verifierSignature\\\\n            }),\\\\n            deposit.verifierSigningKey\\\\n        );\\\\n\\\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\\\\\"Incorrect notary used for notarization\\\\\\\");\\\\n        require(currencyId == deposit.receiveCurrencyId, \\\\\\\"Wrong currency sent\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x576f519d82b98521832a1ac34c2ec806e438a73ed562e67718920effcf9f9b2b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistry {\\\\n    function getAccountId(address _account) external view returns (bytes32);\\\\n    function isRegisteredUser(address _account) external view returns (bool);\\\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5c58e8996f2d06f3d8bad7b3cef912c6370eecb2f3523ff8c1e15ec05dfb8e74\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutSendProcessor {\\\\n\\\\n    struct SendData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string transferId;\\\\n        string recipientId;\\\\n        string amount;\\\\n        string currencyId;\\\\n        string status;\\\\n        string timestamp;\\\\n        uint256 intentHash;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct SendProof {\\\\n        SendData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6bb42393fe8c5f9ac83fa56e126413638b4a0c110602eecaa70d2b41cf77f1a3\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162004878380380620048788339810160408190526200003491620001dd565b6200003f3362000096565b6001600160a01b038781166080526006879055600786905560098590556008849055600a839055600b80546001600160a01b0319169183169190911790556200008888620000e6565b505050505050505062000263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f062000169565b6001600160a01b0381166200015b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001668162000096565b50565b6000546001600160a01b03163314620001c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000152565b565b6001600160a01b03811681146200016657600080fd5b600080600080600080600080610100898b031215620001fb57600080fd5b88516200020881620001c7565b60208a01519098506200021b81620001c7565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151915060e08901516200025281620001c7565b809150509295985092959890939650565b6080516145dd6200029b600039600081816102e5015281816119b901528181611e6e015281816133af015261345e01526145dd6000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80637113476211610130578063b3c0cfa4116100b8578063e279d9641161007c578063e279d96414610541578063ecb3dc881461054a578063ecd618f014610553578063eea1d19714610573578063f2fde38b1461058657600080fd5b8063b3c0cfa4146104e2578063b3fa4c01146104f5578063d089e11a14610508578063d55f960d1461051b578063d9478d201461052e57600080fd5b80639021578a116100ff5780639021578a146104025780639087beff1461047e5780639f9fb96814610491578063a1a954b7146104b1578063b02c43d0146104ba57600080fd5b806371134762146103c3578063715018a6146103d657806371a28f69146103de5780638da5cb5b146103f157600080fd5b80633e85fc25116101b35780635081d952116101825780635081d952146103615780635d108a22146103815780635dd7651514610394578063645006ca146103a757806366ec8419146103b057600080fd5b80633e85fc251461031f5780634298734914610332578063485cc95514610345578063495223e71461035857600080fd5b80632a80cda3116101fa5780632a80cda314610283578063317dcc9614610296578063392e53cd146102a95780633adba28a146102cd5780633e413bee146102e057600080fd5b80630f1ef98c1461022c578063133de6cb1461025257806314ec32fa14610267578063238c84941461027a575b600080fd5b61023f61023a366004613948565b610599565b6040519081526020015b60405180910390f35b610265610260366004613948565b610628565b005b61023f610275366004613948565b610685565b61023f600a5481565b61026561029136600461396c565b610712565b6102656102a436600461396c565b6107a4565b6002546102bd90600160a01b900460ff1681565b6040519015158152602001610249565b6102656102db366004613985565b6107e1565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b61026561032d3660046139ff565b610ee4565b61026561034036600461396c565b611013565b610265610353366004613a70565b6110b4565b61023f60085481565b61037461036f366004613948565b611147565b6040516102499190613bd1565b61026561038f366004613c5d565b611511565b6102656103a236600461396c565b611a82565b61023f60065481565b6102656103be36600461396c565b611b21565b6102656103d1366004613d49565b611cf0565b610265611ee3565b6103746103ec366004613d49565b611ef7565b6000546001600160a01b0316610307565b61044b61041036600461396c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610249565b61026561048c36600461396c565b6121e9565b6104a461049f36600461396c565b612280565b6040516102499190613dee565b61023f60095481565b6104cd6104c836600461396c565b612411565b60405161024999989796959493929190613e01565b61023f6104f0366004613948565b6124f6565b610265610503366004613948565b612507565b600154610307906001600160a01b031681565b61026561052936600461396c565b6125bf565b600b54610307906001600160a01b031681565b61023f60075481565b61023f600c5481565b610566610561366004613e5f565b6127df565b6040516102499190613ed3565b600254610307906001600160a01b031681565b610265610594366004613948565b6129d6565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f9190613f63565b8152602001908152602001600020600101549050919050565b610630612a4f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190613f63565b815260208101919091526040016000205492915050565b61071a612a4f565b8060000361076f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064015b60405180910390fd5b60068190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161067a565b6107ac612a4f565b60088190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161067a565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190613f7c565b6108995760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613f63565b60008581526004602081905260409182902060015481549351630359b09b60e31b81526001600160a01b039485169381019390935260248301859052939450929190911690631acd84d890604401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190613f7c565b6109e15760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610766565b6008546000838152600360205260409020600101544291610a0191613fb4565b1115610a5b5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610766565b60008281526003602052604090205415610ab75760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610766565b600154815460405163e0b490f760e01b81526001600160a01b0391821660048201528492919091169063e0b490f790602401602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613f63565b03610b775760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610766565b80546001600160a01b0316610bc75760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610766565b60008411610c265760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610766565b600754841115610c955760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610766565b6001600160a01b038316610ceb5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610766565b6000610cf78387612aa9565b90508482600601541015610dac57600080610d1188612b14565b9150915086818560060154610d269190613fb4565b1015610d6b5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610766565b610d758483612cbb565b80846006016000828254610d899190613fb4565b9250508190555080846007016000828254610da49190613fc7565b909155505050505b6040805160a0810182523381526001600160a01b0386811660208084019182528385018b8152606085018b81524260808701908152600089815260058552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558681529152908120829055600683018054879290610e53908490613fc7565b9250508190555084826007016000828254610e6e9190613fb4565b9091555050600982018054600181018255600091825260209182902001829055604080516001600160a01b038716815291820187905242908201528390879083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a4505050505050565b6000806000610ef4868686612d1d565b6040805160a08101825284546001600160a01b039081168252600186015416602082015260028501549181019190915260038401546060820152600490930154608084015291945092509050610f4a828261308c565b8260600151826007016000828254610f629190613fc7565b9091555050600154835160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190613f63565b8152602001908152602001600020600101819055506110018360400151836131d5565b61100b8184613352565b505050505050565b61101b612a4f565b8060000361107f5760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610766565b60098190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161067a565b6110bc612a4f565b600254600160a01b900460ff161561110c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610766565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60015460405163e0b490f760e01b81526001600160a01b0383811660048301526060926000926003928492169063e0b490f790602401602060405180830381865afa15801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190613f63565b815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561121957602002820191906000526020600020905b815481526020019060010190808311611205575b5050505050905080516001600160401b0381111561123957611239613cda565b60405190808252806020026020018201604052801561127257816020015b61125f613800565b8152602001906001900390816112575790505b50915060005b815181101561150a57600082828151811061129557611295613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b0316825260018101805494965092949193909291840191906112e390613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461130f90613ff0565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561141f57602002820191906000526020600020905b81548152602001906001019080831161140b575b5050505050815250509050600061143583612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f63565b8152602001838152602001828460c001516114d69190613fb4565b8152508685815181106114eb576114eb613fda565b60200260200101819052505050508061150390614024565b9050611278565b5050919050565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190613f7c565b6115c95760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190613f63565b9050600060036000838152602001908152602001600020905081898960405160200161166392919061403d565b60405160208183030381529060405280519060200120146116c65760405162461bcd60e51b815260206004820152601960248201527f5265766f6c757420746167206d757374206d61746368206964000000000000006044820152606401610766565b600281015460051161171a5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610766565b60065486101561178b5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610766565b600085116117e95760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610766565b6000856117fe670de0b6b3a76400008961406c565b6118089190614099565b600c8054919250600091908261181d83614024565b9091555060028401805460018101825560009182526020918290200182905560408051610140810182523381528151601f8f018490048402810184019092528d8252929350828201918e908e908190840183828082843760009201829052509385525050506001600160a01b03891660208084019190915260408084018a9052606084018d9052608084018e905260a084018d905260c0840183905260e084018790528051838152918201905261010090920191905090526000828152600460209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061191590826140f3565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e082015160078201556101008201516008820155610120820151805161199591600984019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018a90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2f9190613f7c565b508884827f94c4b6f8843ea372709c89bc4a9ed85ef74ab10a68713ffdddc31716a76a6c958b86604051611a6d929190918252602082015260400190565b60405180910390a45050505050505050505050565b611a8a612a4f565b66b1a2bc2ec50000811115611aec5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610766565b600a8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004938401546080840152865291909352922081519192909116611bc75760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b80546001600160a01b03163314611c205760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b611c2a818461308c565b8160600151816007016000828254611c429190613fc7565b9091555050600154825160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015611c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbe9190613f63565b815260200190815260200160002060010181905550611ce18260400151826131d5565b611ceb8383613352565b505050565b6000805b8251811015611e51576000838281518110611d1157611d11613fda565b6020908102919091018101516000818152600490925260409091208054919250906001600160a01b03163314611d895760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b600080611d9584612b14565b91509150611da38383612cbb565b808360060154611db39190613fb4565b611dbd9087613fb4565b955080836007016000828254611dd39190613fc7565b9091555050825460068401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611e1a908590613fb4565b60405190815260200160405180910390a360006006840155611e3c84846131d5565b5050505080611e4a90614024565b9050611cf4565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190613f7c565b611eeb612a4f565b611ef56000613530565b565b606081516001600160401b03811115611f1257611f12613cda565b604051908082528060200260200182016040528015611f4b57816020015b611f38613800565b815260200190600190039081611f305790505b50905060005b82518110156121e3576000838281518110611f6e57611f6e613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b031682526001810180549496509294919390929184019190611fbc90613ff0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890613ff0565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201548152602001600982018054806020026020016040519081016040528092919081815260200182805480156120f857602002820191906000526020600020905b8154815260200190600101908083116120e4575b5050505050815250509050600061210e83612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015612170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121949190613f63565b8152602001838152602001828460c001516121af9190613fb4565b8152508585815181106121c4576121c4613fda565b6020026020010181905250505050806121dc90614024565b9050611f51565b50919050565b6121f1612a4f565b8060000361224b5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610766565b60078190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161067a565b612288613877565b6000828152600460209081526040918290208251610140810190935280546001600160a01b0316835260018101805491928401916122c590613ff0565b80601f01602080910402602001604051908101604052809291908181526020018280546122f190613ff0565b801561233e5780601f106123135761010080835404028352916020019161233e565b820191906000526020600020905b81548152906001019060200180831161232157829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561240157602002820191906000526020600020905b8154815260200190600101908083116123ed575b5050505050815250509050919050565b600460205260009081526040902080546001820180546001600160a01b03909216929161243d90613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461246990613ff0565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b5050505060028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b03909516969395509193909289565b600061250182610685565b92915050565b61250f612a4f565b6001600160a01b0381166125715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610766565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361265c5760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b60015460405163e0b490f760e01b81523360048201526001600160a01b039091169063e0b490f790602401602060405180830381865afa1580156126a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c89190613f63565b600154825160405163e0b490f760e01b81526001600160a01b03918216600482015291169063e0b490f790602401602060405180830381865afa158015612713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127379190613f63565b146127845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b604080820151600090815260046020522061279f818461308c565b81606001518160060160008282546127b79190613fb4565b909155505060608201516007820180546000906127d5908490613fc7565b9091555050505050565b60606000826001600160401b038111156127fb576127fb613cda565b60405190808252806020026020018201604052801561287557816020015b61286260408051606080820183526000808352835160a0810185528181526020818101839052948101829052918201819052608082015290918201908152600060209091015290565b8152602001906001900390816128195790505b50905060005b838110156129ce57600085858381811061289757612897613fda565b60209081029290920135600081815260058452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061291657612916613fda565b60209081029290920135835250810183905260015483516040805163e0b490f760e01b81526001600160a01b03928316600482015293019291169063e0b490f790602401602060405180830381865afa158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b9190613f63565b8152508484815181106129b0576129b0613fda565b60200260200101819052505050806129c790614024565b905061287b565b509392505050565b6129de612a4f565b6001600160a01b038116612a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610766565b612a4c81613530565b50565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610766565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b0c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826141b2565b949350505050565b60008181526004602090815260408083206009018054825181850281018501909352808352606094938493929190830182828015612b7157602002820191906000526020600020905b815481526020019060010190808311612b5d575b5050505050905080516001600160401b03811115612b9157612b91613cda565b604051908082528060200260200182016040528015612bba578160200160208202803683370190505b50925060005b8151811015612cb457600060056000848481518110612be157612be1613fda565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190526009549192504291612c5491613fb4565b1015612ca357828281518110612c6c57612c6c613fda565b6020026020010151858381518110612c8657612c86613fda565b60209081029190910101526060810151612ca09085613fb4565b93505b50612cad81614024565b9050612bc0565b5050915091565b60005b8151811015611ceb576000801b828281518110612cdd57612cdd613fda565b602002602001015114612d0d57612d0d83838381518110612d0057612d00613fda565b602002602001015161308c565b612d1681614024565b9050612cbe565b610100830135600081815260056020526040812080549092906001600160a01b03163314612d8d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b60028084015460009081526004602052604080822092548151808301909252929450909182918291829182916001600160a01b031690630f2d076d9080612dd38f614235565b81526020018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525060028a01546040516001600160e01b031960e085901b168152612e4092916001600160a01b031690600401614397565b60a0604051808303816000875af1158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8391906144db565b9450945094509450945086600301548114612eef5760405162461bcd60e51b815260206004820152602660248201527f496e636f7272656374206e6f74617279207573656420666f72206e6f746172696044820152653d30ba34b7b760d11b6064820152608401610766565b86600501548214612f385760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c818dd5c9c995b98de481cd95b9d606a1b6044820152606401610766565b8388600401541115612f975760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610766565b8287600101604051602001612fac919061451b565b604051602081830303815290604052805190602001201461300f5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610766565b8660080154670de0b6b3a7640000896003015461302c919061406c565b6130369190614099565b85101561307e5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610766565b505050505093509350939050565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116808352600180850154831696840196909652600284015483860152600380850154606085015260049485015460808501529554945163e0b490f760e01b815293840152909492169063e0b490f790602401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131449190613f63565b8152602080820192909252604090810160009081208190558481526005909252812080546001600160a01b0319908116825560018201805490911690556002810182905560038101829055600401556131a06009840183613580565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816006015482600701546131eb9190613fb4565b905080600003611ceb57600154825460405163e0b490f760e01b81526001600160a01b039182166004820152613291928692600392600092919091169063e0b490f790602401602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132729190613f63565b81526020019081526020016000206002016136a890919063ffffffff16565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260046020526040812080546001600160a01b0319168155906132ff60018301826138ca565b6002820180546001600160a01b0319169055600060038301819055600483018190556005830181905560068301819055600783018190556008830181905561334b906009840190613904565b5050505050565b6000600a5460001461341e57670de0b6b3a7640000600a548360600151613379919061406c565b6133839190614099565b600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613f7c565b505b60008183606001516134309190613fc7565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156134a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cb9190613f7c565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806135dc848054806020026020016040519081016040528092919081815260200182805480156135d157602002820191906000526020600020905b8154815260200190600101908083116135bd575b50505050508461374d565b91509150806136255760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610766565b835460009061363690600190613fc7565b905080831461367b5784818154811061365157613651613fda565b906000526020600020015485848154811061366e5761366e613fda565b6000918252602090912001555b8480548061368b5761368b614591565b600190038181906000526020600020016000905590555050505050565b600080613704848054806020026020016040519081016040528092919081815260200182805480156136f957602002820191906000526020600020905b8154815260200190600101908083116136e5575b5050505050846137b0565b91509150806136255760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610766565b81516000908190815b8181101561379d578486828151811061377157613771613fda565b60200260200101510361378b579250600191506137a99050565b8061379581614024565b915050613756565b50600019600092509250505b9250929050565b81516000908190815b8181101561379d57848682815181106137d4576137d4613fda565b6020026020010151036137ee579250600191506137a99050565b806137f881614024565b9150506137b9565b604080516080810182526000808252602082015290810161381f613877565b8152602001600081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b5061387392915061391e565b5090565b604080516101408101825260008082526060602083018190529282018190528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261012081019190915290565b5080546138d690613ff0565b6000825580601f106138e6575050565b601f016020900490600052602060002090810190612a4c919061391e565b5080546000825590600052602060002090810190612a4c91905b5b80821115613873576000815560010161391f565b6001600160a01b0381168114612a4c57600080fd5b60006020828403121561395a57600080fd5b813561396581613933565b9392505050565b60006020828403121561397e57600080fd5b5035919050565b60008060006060848603121561399a57600080fd5b833592506020840135915060408401356139b381613933565b809150509250925092565b60008083601f8401126139d057600080fd5b5081356001600160401b038111156139e757600080fd5b6020830191508360208285010111156137a957600080fd5b600080600060408486031215613a1457600080fd5b83356001600160401b0380821115613a2b57600080fd5b908501906101408288031215613a4057600080fd5b90935060208501359080821115613a5657600080fd5b50613a63868287016139be565b9497909650939450505050565b60008060408385031215613a8357600080fd5b8235613a8e81613933565b91506020830135613a9e81613933565b809150509250929050565b6000815180845260005b81811015613acf57602081850181015186830182015201613ab3565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613b1f57815187529582019590820190600101613b03565b509495945050505050565b80516001600160a01b0316825260006101406020830151816020860152613b5382860182613aa9565b9150506040830151613b7060408601826001600160a01b03169052565b50606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015185830382870152613bc78382613aef565b9695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613c4f57603f1989840301855281516080815185528882015189860152878201518189870152613c2e82870182613b2a565b60609384015196909301959095525094870194925090860190600101613bf8565b509098975050505050505050565b600080600080600080600060c0888a031215613c7857600080fd5b87356001600160401b03811115613c8e57600080fd5b613c9a8a828b016139be565b9098509650506020880135945060408801359350606088013592506080880135613cc381613933565b8092505060a0880135905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613d1357613d13613cda565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613d4157613d41613cda565b604052919050565b60006020808385031215613d5c57600080fd5b82356001600160401b0380821115613d7357600080fd5b818501915085601f830112613d8757600080fd5b813581811115613d9957613d99613cda565b8060051b9150613daa848301613d19565b8181529183018401918481019088841115613dc457600080fd5b938501935b83851015613de257843582529385019390850190613dc9565b98975050505050505050565b6020815260006139656020830184613b2a565b6001600160a01b038a8116825261012060208301819052600091613e278483018d613aa9565b9a16604084015250506060810196909652608086019490945260a085019290925260c084015260e08301526101009091015292915050565b60008060208385031215613e7257600080fd5b82356001600160401b0380821115613e8957600080fd5b818501915085601f830112613e9d57600080fd5b813581811115613eac57600080fd5b8660208260051b8501011115613ec157600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613f56578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613ef0565b5091979650505050505050565b600060208284031215613f7557600080fd5b5051919050565b600060208284031215613f8e57600080fd5b8151801515811461396557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561250157612501613f9e565b8181038181111561250157612501613f9e565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061400457607f821691505b6020821081036121e357634e487b7160e01b600052602260045260246000fd5b60006001820161403657614036613f9e565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b808202811582820484141761250157612501613f9e565b634e487b7160e01b600052601260045260246000fd5b6000826140a8576140a8614083565b500490565b601f821115611ceb57600081815260208120601f850160051c810160208610156140d45750805b601f850160051c820191505b8181101561100b578281556001016140e0565b81516001600160401b0381111561410c5761410c613cda565b6141208161411a8454613ff0565b846140ad565b602080601f831160018114614155576000841561413d5750858301515b600019600386901b1c1916600185901b17855561100b565b600085815260208120601f198616915b8281101561418457888601518255948401946001909101908401614165565b50858210156141a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826141c1576141c1614083565b500690565b600082601f8301126141d757600080fd5b81356001600160401b038111156141f0576141f0613cda565b614203601f8201601f1916602001613d19565b81815284602083860101111561421857600080fd5b816020850160208301376000918101602001919091529392505050565b6000610140823603121561424857600080fd5b614250613cf0565b82356001600160401b038082111561426757600080fd5b614273368387016141c6565b8352602085013591508082111561428957600080fd5b614295368387016141c6565b602084015260408501359150808211156142ae57600080fd5b6142ba368387016141c6565b604084015260608501359150808211156142d357600080fd5b6142df368387016141c6565b606084015260808501359150808211156142f857600080fd5b614304368387016141c6565b608084015260a085013591508082111561431d57600080fd5b614329368387016141c6565b60a084015260c085013591508082111561434257600080fd5b61434e368387016141c6565b60c084015260e085013591508082111561436757600080fd5b50614374368286016141c6565b60e083015250610100838101359082015261012092830135928101929092525090565b604081526000835160408084015280516101408060808601526143be6101c0860183613aa9565b91506020830151607f19808785030160a08801526143dc8483613aa9565b935060408501519150808785030160c08801526143f98483613aa9565b935060608501519150808785030160e08801526144168483613aa9565b9350608085015191506101008188860301818901526144358584613aa9565b945060a086015192506101208289870301818a01526144548685613aa9565b955060c087015193508289870301858a01526144708685613aa9565b955060e0870151945082898703016101608a015261448e8686613aa9565b918701516101808a0152909501516101a0880152505050506020850151838203603f19016060850152906144c28183613aa9565b9250505061396560208301846001600160a01b03169052565b600080600080600060a086880312156144f357600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600080835461452981613ff0565b60018281168015614541576001811461455657614585565b60ff1984168752821515830287019450614585565b8760005260208060002060005b8581101561457c5781548a820152908401908201614563565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200c1dd6603fe23e3215869ddb17de6764c2212ab6a689276b98bc4ec806c8a8df64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106102275760003560e01c80637113476211610130578063b3c0cfa4116100b8578063e279d9641161007c578063e279d96414610541578063ecb3dc881461054a578063ecd618f014610553578063eea1d19714610573578063f2fde38b1461058657600080fd5b8063b3c0cfa4146104e2578063b3fa4c01146104f5578063d089e11a14610508578063d55f960d1461051b578063d9478d201461052e57600080fd5b80639021578a116100ff5780639021578a146104025780639087beff1461047e5780639f9fb96814610491578063a1a954b7146104b1578063b02c43d0146104ba57600080fd5b806371134762146103c3578063715018a6146103d657806371a28f69146103de5780638da5cb5b146103f157600080fd5b80633e85fc25116101b35780635081d952116101825780635081d952146103615780635d108a22146103815780635dd7651514610394578063645006ca146103a757806366ec8419146103b057600080fd5b80633e85fc251461031f5780634298734914610332578063485cc95514610345578063495223e71461035857600080fd5b80632a80cda3116101fa5780632a80cda314610283578063317dcc9614610296578063392e53cd146102a95780633adba28a146102cd5780633e413bee146102e057600080fd5b80630f1ef98c1461022c578063133de6cb1461025257806314ec32fa14610267578063238c84941461027a575b600080fd5b61023f61023a366004613948565b610599565b6040519081526020015b60405180910390f35b610265610260366004613948565b610628565b005b61023f610275366004613948565b610685565b61023f600a5481565b61026561029136600461396c565b610712565b6102656102a436600461396c565b6107a4565b6002546102bd90600160a01b900460ff1681565b6040519015158152602001610249565b6102656102db366004613985565b6107e1565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b61026561032d3660046139ff565b610ee4565b61026561034036600461396c565b611013565b610265610353366004613a70565b6110b4565b61023f60085481565b61037461036f366004613948565b611147565b6040516102499190613bd1565b61026561038f366004613c5d565b611511565b6102656103a236600461396c565b611a82565b61023f60065481565b6102656103be36600461396c565b611b21565b6102656103d1366004613d49565b611cf0565b610265611ee3565b6103746103ec366004613d49565b611ef7565b6000546001600160a01b0316610307565b61044b61041036600461396c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610249565b61026561048c36600461396c565b6121e9565b6104a461049f36600461396c565b612280565b6040516102499190613dee565b61023f60095481565b6104cd6104c836600461396c565b612411565b60405161024999989796959493929190613e01565b61023f6104f0366004613948565b6124f6565b610265610503366004613948565b612507565b600154610307906001600160a01b031681565b61026561052936600461396c565b6125bf565b600b54610307906001600160a01b031681565b61023f60075481565b61023f600c5481565b610566610561366004613e5f565b6127df565b6040516102499190613ed3565b600254610307906001600160a01b031681565b610265610594366004613948565b6129d6565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f9190613f63565b8152602001908152602001600020600101549050919050565b610630612a4f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190613f63565b815260208101919091526040016000205492915050565b61071a612a4f565b8060000361076f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064015b60405180910390fd5b60068190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161067a565b6107ac612a4f565b60088190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161067a565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190613f7c565b6108995760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613f63565b60008581526004602081905260409182902060015481549351630359b09b60e31b81526001600160a01b039485169381019390935260248301859052939450929190911690631acd84d890604401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190613f7c565b6109e15760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610766565b6008546000838152600360205260409020600101544291610a0191613fb4565b1115610a5b5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610766565b60008281526003602052604090205415610ab75760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610766565b600154815460405163e0b490f760e01b81526001600160a01b0391821660048201528492919091169063e0b490f790602401602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613f63565b03610b775760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610766565b80546001600160a01b0316610bc75760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610766565b60008411610c265760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610766565b600754841115610c955760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610766565b6001600160a01b038316610ceb5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610766565b6000610cf78387612aa9565b90508482600601541015610dac57600080610d1188612b14565b9150915086818560060154610d269190613fb4565b1015610d6b5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610766565b610d758483612cbb565b80846006016000828254610d899190613fb4565b9250508190555080846007016000828254610da49190613fc7565b909155505050505b6040805160a0810182523381526001600160a01b0386811660208084019182528385018b8152606085018b81524260808701908152600089815260058552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558681529152908120829055600683018054879290610e53908490613fc7565b9250508190555084826007016000828254610e6e9190613fb4565b9091555050600982018054600181018255600091825260209182902001829055604080516001600160a01b038716815291820187905242908201528390879083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a4505050505050565b6000806000610ef4868686612d1d565b6040805160a08101825284546001600160a01b039081168252600186015416602082015260028501549181019190915260038401546060820152600490930154608084015291945092509050610f4a828261308c565b8260600151826007016000828254610f629190613fc7565b9091555050600154835160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190613f63565b8152602001908152602001600020600101819055506110018360400151836131d5565b61100b8184613352565b505050505050565b61101b612a4f565b8060000361107f5760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610766565b60098190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161067a565b6110bc612a4f565b600254600160a01b900460ff161561110c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610766565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60015460405163e0b490f760e01b81526001600160a01b0383811660048301526060926000926003928492169063e0b490f790602401602060405180830381865afa15801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190613f63565b815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561121957602002820191906000526020600020905b815481526020019060010190808311611205575b5050505050905080516001600160401b0381111561123957611239613cda565b60405190808252806020026020018201604052801561127257816020015b61125f613800565b8152602001906001900390816112575790505b50915060005b815181101561150a57600082828151811061129557611295613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b0316825260018101805494965092949193909291840191906112e390613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461130f90613ff0565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561141f57602002820191906000526020600020905b81548152602001906001019080831161140b575b5050505050815250509050600061143583612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f63565b8152602001838152602001828460c001516114d69190613fb4565b8152508685815181106114eb576114eb613fda565b60200260200101819052505050508061150390614024565b9050611278565b5050919050565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190613f7c565b6115c95760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190613f63565b9050600060036000838152602001908152602001600020905081898960405160200161166392919061403d565b60405160208183030381529060405280519060200120146116c65760405162461bcd60e51b815260206004820152601960248201527f5265766f6c757420746167206d757374206d61746368206964000000000000006044820152606401610766565b600281015460051161171a5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610766565b60065486101561178b5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610766565b600085116117e95760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610766565b6000856117fe670de0b6b3a76400008961406c565b6118089190614099565b600c8054919250600091908261181d83614024565b9091555060028401805460018101825560009182526020918290200182905560408051610140810182523381528151601f8f018490048402810184019092528d8252929350828201918e908e908190840183828082843760009201829052509385525050506001600160a01b03891660208084019190915260408084018a9052606084018d9052608084018e905260a084018d905260c0840183905260e084018790528051838152918201905261010090920191905090526000828152600460209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061191590826140f3565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e082015160078201556101008201516008820155610120820151805161199591600984019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018a90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2f9190613f7c565b508884827f94c4b6f8843ea372709c89bc4a9ed85ef74ab10a68713ffdddc31716a76a6c958b86604051611a6d929190918252602082015260400190565b60405180910390a45050505050505050505050565b611a8a612a4f565b66b1a2bc2ec50000811115611aec5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610766565b600a8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004938401546080840152865291909352922081519192909116611bc75760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b80546001600160a01b03163314611c205760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b611c2a818461308c565b8160600151816007016000828254611c429190613fc7565b9091555050600154825160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015611c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbe9190613f63565b815260200190815260200160002060010181905550611ce18260400151826131d5565b611ceb8383613352565b505050565b6000805b8251811015611e51576000838281518110611d1157611d11613fda565b6020908102919091018101516000818152600490925260409091208054919250906001600160a01b03163314611d895760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b600080611d9584612b14565b91509150611da38383612cbb565b808360060154611db39190613fb4565b611dbd9087613fb4565b955080836007016000828254611dd39190613fc7565b9091555050825460068401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611e1a908590613fb4565b60405190815260200160405180910390a360006006840155611e3c84846131d5565b5050505080611e4a90614024565b9050611cf4565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190613f7c565b611eeb612a4f565b611ef56000613530565b565b606081516001600160401b03811115611f1257611f12613cda565b604051908082528060200260200182016040528015611f4b57816020015b611f38613800565b815260200190600190039081611f305790505b50905060005b82518110156121e3576000838281518110611f6e57611f6e613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b031682526001810180549496509294919390929184019190611fbc90613ff0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890613ff0565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201548152602001600982018054806020026020016040519081016040528092919081815260200182805480156120f857602002820191906000526020600020905b8154815260200190600101908083116120e4575b5050505050815250509050600061210e83612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015612170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121949190613f63565b8152602001838152602001828460c001516121af9190613fb4565b8152508585815181106121c4576121c4613fda565b6020026020010181905250505050806121dc90614024565b9050611f51565b50919050565b6121f1612a4f565b8060000361224b5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610766565b60078190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161067a565b612288613877565b6000828152600460209081526040918290208251610140810190935280546001600160a01b0316835260018101805491928401916122c590613ff0565b80601f01602080910402602001604051908101604052809291908181526020018280546122f190613ff0565b801561233e5780601f106123135761010080835404028352916020019161233e565b820191906000526020600020905b81548152906001019060200180831161232157829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561240157602002820191906000526020600020905b8154815260200190600101908083116123ed575b5050505050815250509050919050565b600460205260009081526040902080546001820180546001600160a01b03909216929161243d90613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461246990613ff0565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b5050505060028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b03909516969395509193909289565b600061250182610685565b92915050565b61250f612a4f565b6001600160a01b0381166125715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610766565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361265c5760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b60015460405163e0b490f760e01b81523360048201526001600160a01b039091169063e0b490f790602401602060405180830381865afa1580156126a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c89190613f63565b600154825160405163e0b490f760e01b81526001600160a01b03918216600482015291169063e0b490f790602401602060405180830381865afa158015612713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127379190613f63565b146127845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b604080820151600090815260046020522061279f818461308c565b81606001518160060160008282546127b79190613fb4565b909155505060608201516007820180546000906127d5908490613fc7565b9091555050505050565b60606000826001600160401b038111156127fb576127fb613cda565b60405190808252806020026020018201604052801561287557816020015b61286260408051606080820183526000808352835160a0810185528181526020818101839052948101829052918201819052608082015290918201908152600060209091015290565b8152602001906001900390816128195790505b50905060005b838110156129ce57600085858381811061289757612897613fda565b60209081029290920135600081815260058452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061291657612916613fda565b60209081029290920135835250810183905260015483516040805163e0b490f760e01b81526001600160a01b03928316600482015293019291169063e0b490f790602401602060405180830381865afa158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b9190613f63565b8152508484815181106129b0576129b0613fda565b60200260200101819052505050806129c790614024565b905061287b565b509392505050565b6129de612a4f565b6001600160a01b038116612a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610766565b612a4c81613530565b50565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610766565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b0c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826141b2565b949350505050565b60008181526004602090815260408083206009018054825181850281018501909352808352606094938493929190830182828015612b7157602002820191906000526020600020905b815481526020019060010190808311612b5d575b5050505050905080516001600160401b03811115612b9157612b91613cda565b604051908082528060200260200182016040528015612bba578160200160208202803683370190505b50925060005b8151811015612cb457600060056000848481518110612be157612be1613fda565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190526009549192504291612c5491613fb4565b1015612ca357828281518110612c6c57612c6c613fda565b6020026020010151858381518110612c8657612c86613fda565b60209081029190910101526060810151612ca09085613fb4565b93505b50612cad81614024565b9050612bc0565b5050915091565b60005b8151811015611ceb576000801b828281518110612cdd57612cdd613fda565b602002602001015114612d0d57612d0d83838381518110612d0057612d00613fda565b602002602001015161308c565b612d1681614024565b9050612cbe565b610100830135600081815260056020526040812080549092906001600160a01b03163314612d8d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b60028084015460009081526004602052604080822092548151808301909252929450909182918291829182916001600160a01b031690630f2d076d9080612dd38f614235565b81526020018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525060028a01546040516001600160e01b031960e085901b168152612e4092916001600160a01b031690600401614397565b60a0604051808303816000875af1158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8391906144db565b9450945094509450945086600301548114612eef5760405162461bcd60e51b815260206004820152602660248201527f496e636f7272656374206e6f74617279207573656420666f72206e6f746172696044820152653d30ba34b7b760d11b6064820152608401610766565b86600501548214612f385760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c818dd5c9c995b98de481cd95b9d606a1b6044820152606401610766565b8388600401541115612f975760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610766565b8287600101604051602001612fac919061451b565b604051602081830303815290604052805190602001201461300f5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610766565b8660080154670de0b6b3a7640000896003015461302c919061406c565b6130369190614099565b85101561307e5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610766565b505050505093509350939050565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116808352600180850154831696840196909652600284015483860152600380850154606085015260049485015460808501529554945163e0b490f760e01b815293840152909492169063e0b490f790602401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131449190613f63565b8152602080820192909252604090810160009081208190558481526005909252812080546001600160a01b0319908116825560018201805490911690556002810182905560038101829055600401556131a06009840183613580565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816006015482600701546131eb9190613fb4565b905080600003611ceb57600154825460405163e0b490f760e01b81526001600160a01b039182166004820152613291928692600392600092919091169063e0b490f790602401602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132729190613f63565b81526020019081526020016000206002016136a890919063ffffffff16565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260046020526040812080546001600160a01b0319168155906132ff60018301826138ca565b6002820180546001600160a01b0319169055600060038301819055600483018190556005830181905560068301819055600783018190556008830181905561334b906009840190613904565b5050505050565b6000600a5460001461341e57670de0b6b3a7640000600a548360600151613379919061406c565b6133839190614099565b600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613f7c565b505b60008183606001516134309190613fc7565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156134a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cb9190613f7c565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806135dc848054806020026020016040519081016040528092919081815260200182805480156135d157602002820191906000526020600020905b8154815260200190600101908083116135bd575b50505050508461374d565b91509150806136255760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610766565b835460009061363690600190613fc7565b905080831461367b5784818154811061365157613651613fda565b906000526020600020015485848154811061366e5761366e613fda565b6000918252602090912001555b8480548061368b5761368b614591565b600190038181906000526020600020016000905590555050505050565b600080613704848054806020026020016040519081016040528092919081815260200182805480156136f957602002820191906000526020600020905b8154815260200190600101908083116136e5575b5050505050846137b0565b91509150806136255760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610766565b81516000908190815b8181101561379d578486828151811061377157613771613fda565b60200260200101510361378b579250600191506137a99050565b8061379581614024565b915050613756565b50600019600092509250505b9250929050565b81516000908190815b8181101561379d57848682815181106137d4576137d4613fda565b6020026020010151036137ee579250600191506137a99050565b806137f881614024565b9150506137b9565b604080516080810182526000808252602082015290810161381f613877565b8152602001600081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b5061387392915061391e565b5090565b604080516101408101825260008082526060602083018190529282018190528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261012081019190915290565b5080546138d690613ff0565b6000825580601f106138e6575050565b601f016020900490600052602060002090810190612a4c919061391e565b5080546000825590600052602060002090810190612a4c91905b5b80821115613873576000815560010161391f565b6001600160a01b0381168114612a4c57600080fd5b60006020828403121561395a57600080fd5b813561396581613933565b9392505050565b60006020828403121561397e57600080fd5b5035919050565b60008060006060848603121561399a57600080fd5b833592506020840135915060408401356139b381613933565b809150509250925092565b60008083601f8401126139d057600080fd5b5081356001600160401b038111156139e757600080fd5b6020830191508360208285010111156137a957600080fd5b600080600060408486031215613a1457600080fd5b83356001600160401b0380821115613a2b57600080fd5b908501906101408288031215613a4057600080fd5b90935060208501359080821115613a5657600080fd5b50613a63868287016139be565b9497909650939450505050565b60008060408385031215613a8357600080fd5b8235613a8e81613933565b91506020830135613a9e81613933565b809150509250929050565b6000815180845260005b81811015613acf57602081850181015186830182015201613ab3565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613b1f57815187529582019590820190600101613b03565b509495945050505050565b80516001600160a01b0316825260006101406020830151816020860152613b5382860182613aa9565b9150506040830151613b7060408601826001600160a01b03169052565b50606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015185830382870152613bc78382613aef565b9695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613c4f57603f1989840301855281516080815185528882015189860152878201518189870152613c2e82870182613b2a565b60609384015196909301959095525094870194925090860190600101613bf8565b509098975050505050505050565b600080600080600080600060c0888a031215613c7857600080fd5b87356001600160401b03811115613c8e57600080fd5b613c9a8a828b016139be565b9098509650506020880135945060408801359350606088013592506080880135613cc381613933565b8092505060a0880135905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613d1357613d13613cda565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613d4157613d41613cda565b604052919050565b60006020808385031215613d5c57600080fd5b82356001600160401b0380821115613d7357600080fd5b818501915085601f830112613d8757600080fd5b813581811115613d9957613d99613cda565b8060051b9150613daa848301613d19565b8181529183018401918481019088841115613dc457600080fd5b938501935b83851015613de257843582529385019390850190613dc9565b98975050505050505050565b6020815260006139656020830184613b2a565b6001600160a01b038a8116825261012060208301819052600091613e278483018d613aa9565b9a16604084015250506060810196909652608086019490945260a085019290925260c084015260e08301526101009091015292915050565b60008060208385031215613e7257600080fd5b82356001600160401b0380821115613e8957600080fd5b818501915085601f830112613e9d57600080fd5b813581811115613eac57600080fd5b8660208260051b8501011115613ec157600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613f56578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613ef0565b5091979650505050505050565b600060208284031215613f7557600080fd5b5051919050565b600060208284031215613f8e57600080fd5b8151801515811461396557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561250157612501613f9e565b8181038181111561250157612501613f9e565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061400457607f821691505b6020821081036121e357634e487b7160e01b600052602260045260246000fd5b60006001820161403657614036613f9e565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b808202811582820484141761250157612501613f9e565b634e487b7160e01b600052601260045260246000fd5b6000826140a8576140a8614083565b500490565b601f821115611ceb57600081815260208120601f850160051c810160208610156140d45750805b601f850160051c820191505b8181101561100b578281556001016140e0565b81516001600160401b0381111561410c5761410c613cda565b6141208161411a8454613ff0565b846140ad565b602080601f831160018114614155576000841561413d5750858301515b600019600386901b1c1916600185901b17855561100b565b600085815260208120601f198616915b8281101561418457888601518255948401946001909101908401614165565b50858210156141a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826141c1576141c1614083565b500690565b600082601f8301126141d757600080fd5b81356001600160401b038111156141f0576141f0613cda565b614203601f8201601f1916602001613d19565b81815284602083860101111561421857600080fd5b816020850160208301376000918101602001919091529392505050565b6000610140823603121561424857600080fd5b614250613cf0565b82356001600160401b038082111561426757600080fd5b614273368387016141c6565b8352602085013591508082111561428957600080fd5b614295368387016141c6565b602084015260408501359150808211156142ae57600080fd5b6142ba368387016141c6565b604084015260608501359150808211156142d357600080fd5b6142df368387016141c6565b606084015260808501359150808211156142f857600080fd5b614304368387016141c6565b608084015260a085013591508082111561431d57600080fd5b614329368387016141c6565b60a084015260c085013591508082111561434257600080fd5b61434e368387016141c6565b60c084015260e085013591508082111561436757600080fd5b50614374368286016141c6565b60e083015250610100838101359082015261012092830135928101929092525090565b604081526000835160408084015280516101408060808601526143be6101c0860183613aa9565b91506020830151607f19808785030160a08801526143dc8483613aa9565b935060408501519150808785030160c08801526143f98483613aa9565b935060608501519150808785030160e08801526144168483613aa9565b9350608085015191506101008188860301818901526144358584613aa9565b945060a086015192506101208289870301818a01526144548685613aa9565b955060c087015193508289870301858a01526144708685613aa9565b955060e0870151945082898703016101608a015261448e8686613aa9565b918701516101808a0152909501516101a0880152505050506020850151838203603f19016060850152906144c28183613aa9565b9250505061396560208301846001600160a01b03169052565b600080600080600060a086880312156144f357600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600080835461452981613ff0565b60018281168015614541576001811461455657614585565b60ff1984168752821515830287019450614585565b8760005260208060002060005b8581101561457c5781548a820152908401908201614563565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200c1dd6603fe23e3215869ddb17de6764c2212ab6a689276b98bc4ec806c8a8df64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_accountRegistry\": \"Account Registry contract for Revolut\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(string,bytes32,uint256,uint256,address,bytes32)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_notaryKeyHash\": \"Hash of the notary public key that is required to do notarization\",\n          \"_receiveAmount\": \"The amount of USD to receive\",\n          \"_receiveCurrencyId\": \"Id of the currency to be received off-chain\",\n          \"_revolutTag\": \"Depositor's Revolut tag to receive payments\",\n          \"_verifierSigningKey\": \"Public key of the verifier depositor wants to sign the TLS proof\"\n        }\n      },\n      \"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\": {\n        \"params\": {\n          \"_sendData\": \"Struct containing unredacted data from API call to Revolut\",\n          \"_verifierSignature\": \"Signature by verifier of the unredacted data\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(string,bytes32,uint256,uint256,address,bytes32)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 13477,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"accountRegistry\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRevolutAccountRegistry)15445\"\n      },\n      {\n        \"astId\": 13480,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IRevolutSendProcessor)15493\"\n      },\n      {\n        \"astId\": 13482,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 13487,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)13446_storage)\"\n      },\n      {\n        \"astId\": 13492,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)13409_storage)\"\n      },\n      {\n        \"astId\": 13497,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)13430_storage)\"\n      },\n      {\n        \"astId\": 13499,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13501,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13503,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13505,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13507,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13509,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 13511,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRevolutAccountRegistry)15445\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutAccountRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IRevolutSendProcessor)15493\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)13446_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)13446_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)13430_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)13430_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)13409_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct RevolutRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)13409_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Deposit)13409_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 13389,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13391,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"revolutTag\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 13393,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"verifierSigningKey\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13395,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"notaryKeyHash\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13397,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13399,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"receiveCurrencyId\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13401,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13403,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13405,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13408,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"320\"\n      },\n      \"t_struct(GlobalAccountInfo)13446_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 13440,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13442,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13445,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_struct(Intent)13430_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 13421,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13423,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13425,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13427,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13429,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/RevolutSendProcessor.json",
    "content": "{\n  \"address\": \"0xaD7cC2A3a83Fb13F3A82D6cC31928d3E91fF25cc\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_endpoint\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_host\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PAYMENT_STATUS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"endpoint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"host\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"transferId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"recipientId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"amount\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"currencyId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"status\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"timestamp\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"currencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"notaryKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf1d68944c759ed43039ab0be3c31fa3b17e5b194cd44133375c6b3fb06a8f6c3\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xaD7cC2A3a83Fb13F3A82D6cC31928d3E91fF25cc\",\n    \"transactionIndex\": 37,\n    \"gasUsed\": \"1724801\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000400000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000001000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xc4221375470ca86d0e21cb86a6836124cc38ecde461156b0124d2f948407a05d\",\n    \"transactionHash\": \"0xf1d68944c759ed43039ab0be3c31fa3b17e5b194cd44133375c6b3fb06a8f6c3\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 37,\n        \"blockNumber\": 15021729,\n        \"transactionHash\": \"0xf1d68944c759ed43039ab0be3c31fa3b17e5b194cd44133375c6b3fb06a8f6c3\",\n        \"address\": \"0xaD7cC2A3a83Fb13F3A82D6cC31928d3E91fF25cc\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 110,\n        \"blockHash\": \"0xc4221375470ca86d0e21cb86a6836124cc38ecde461156b0124d2f948407a05d\"\n      }\n    ],\n    \"blockNumber\": 15021729,\n    \"cumulativeGasUsed\": \"8113695\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xeb33C544dBd9a487de0522fE886fc38D66887533\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"30\",\n    \"GET https://app.revolut.com/api/retail/transaction/*\",\n    \"app.revolut.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_host\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PAYMENT_STATUS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"endpoint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"host\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"transferId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"recipientId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated TLS calls\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutSendProcessor.sol\\\":\\\"RevolutSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/TLSBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TLSBaseProcessor is Ownable {\\\\n\\\\n    using SignatureChecker for address;\\\\n    using ECDSA for bytes32;\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    string public endpoint;\\\\n    string public host;\\\\n\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        endpoint = _endpoint;\\\\n        host = _host;\\\\n\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateTLSEndpoint(\\\\n        string memory _expectedEndpoint,\\\\n        string memory _passedEndpoint\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\\\n            \\\\\\\"Endpoint does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateTLSHost(\\\\n        string memory _expectedHost,\\\\n        string memory _passedHost\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\\\n            \\\\\\\"Host does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n\\\\n    function _isValidSignature(\\\\n        bytes memory _message,\\\\n        bytes memory _signature,\\\\n        address _signer\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\\\n\\\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x366ab1cc4ebfdb4ba68fdb43b902676e67e7760ae1987e4252e5839e8370a6c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/RevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRevolutSendProcessor } from \\\\\\\"./interfaces/IRevolutSendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TLSBaseProcessor } from \\\\\\\"../../processors/TLSBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\\\n\\\\n    using ECDSA for bytes32;\\\\n    using SignatureChecker for address;\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\\\\\"COMPLETED\\\\\\\"));\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        TLSBaseProcessor(\\\\n            _ramp,\\\\n            _nullifierRegistry,\\\\n            _timestampBuffer,\\\\n            _endpoint,\\\\n            _host\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IRevolutSendProcessor.SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperId,\\\\n            bytes32 currencyId,\\\\n            bytes32 notaryKeyHash\\\\n        )\\\\n    {\\\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\\\n\\\\n        _validateTLSEndpoint(\\\\n            endpoint.replaceString(\\\\\\\"*\\\\\\\", _proof.public_values.transferId),\\\\n            _proof.public_values.endpoint\\\\n        );\\\\n        _validateTLSHost(host, _proof.public_values.host);\\\\n        \\\\n        // Validate status\\\\n        require(\\\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\\\n            \\\\\\\"Payment status not confirmed as sent\\\\\\\"\\\\n        );\\\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\\\\\"Revolut\\\\\\\", _proof.public_values.transferId)));\\\\n\\\\n        amount = _parseAmount(_proof.public_values.amount);\\\\n\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\\\n\\\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function verifyProof(\\\\n        address _verifierSigningKey,\\\\n        IRevolutSendProcessor.SendData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {   \\\\n        bytes memory encodedMessage = abi.encode(\\\\n            _publicValues.endpoint,\\\\n            _publicValues.host,\\\\n            _publicValues.transferId,\\\\n            _publicValues.recipientId,\\\\n            _publicValues.amount,\\\\n            _publicValues.currencyId,\\\\n            _publicValues.status,\\\\n            _publicValues.timestamp,\\\\n            _publicValues.intentHash,\\\\n            _publicValues.notaryKeyHash\\\\n        );\\\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProof(\\\\n        address _verifierSigningKey,\\\\n        IRevolutSendProcessor.SendData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n    {   \\\\n        require(\\\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\\\n            \\\\\\\"Invalid proof\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\\\n        // it would be a receive transaction\\\\n        require(bytes(amount)[0] == 0x2D, \\\\\\\"Not a send transaction\\\\\\\");   \\\\n        return amount.stringToUint(6);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x12ec921517e7364323e67c11d38da7e712b63c65a7cfb91f68b24a9725bf3e95\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutSendProcessor {\\\\n\\\\n    struct SendData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string transferId;\\\\n        string recipientId;\\\\n        string amount;\\\\n        string currencyId;\\\\n        string status;\\\\n        string timestamp;\\\\n        uint256 intentHash;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct SendProof {\\\\n        SendData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6bb42393fe8c5f9ac83fa56e126413638b4a0c110602eecaa70d2b41cf77f1a3\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001efa38038062001efa8339810160408190526200003491620001d0565b84848484846200004433620000a2565b6001600160a01b03851660805260016200005f8382620002fe565b5060026200006e8282620002fe565b5050600380546001600160a01b0319166001600160a01b03949094169390931790925560045550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013357600080fd5b81516001600160401b03808211156200015057620001506200010b565b604051601f8301601f19908116603f011681019082821181831017156200017b576200017b6200010b565b816040528381526020925086838588010111156200019857600080fd5b600091505b83821015620001bc57858201830151818301840152908201906200019d565b600093810190920192909252949350505050565b600080600080600060a08688031215620001e957600080fd5b8551620001f681620000f2565b60208701519095506200020981620000f2565b6040870151606088015191955093506001600160401b03808211156200022e57600080fd5b6200023c89838a0162000121565b935060808801519150808211156200025357600080fd5b50620002628882890162000121565b9150509295509295909350565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a6200010b565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611b0e620003ec6000396000818160f301526101fa0152611b0e6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b2a3fda411610071578063b2a3fda41461015d578063b870676c14610170578063dbac582114610183578063f2fde38b1461019a578063f437bc59146101ad578063faec91e0146101b557600080fd5b80630f2d076d146100ae57806315d276e1146100ee5780635e280f111461012d578063715018a6146101425780638da5cb5b1461014c575b600080fd5b6100c16100bc3660046113d2565b6101e9565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e5565b610135610785565b6040516100e59190611475565b61014a610813565b005b6000546001600160a01b0316610115565b61014a61016b366004611488565b610827565b600354610115906001600160a01b031681565b61018c60045481565b6040519081526020016100e5565b61014a6101a83660046114a1565b610834565b6101356108ad565b61018c6040516810d3d354131155115160ba1b60208201526029016040516020818303038152906040528051906020012081565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026c5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6102ca8661027a89806114bc565b610283906115aa565b61029060208b018b61170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108ba92505050565b6040805180820190915260018152601560f91b6020820152610420906103d2906102f48a806114bc565b61030290604081019061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600180549092506103459150611754565b80601f016020809104026020016040519081016040528092919081815260200182805461037190611754565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50505050506109069092919063ffffffff16565b6103dc89806114bc565b6103e6908061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098b92505050565b6105046002805461043090611754565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611754565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b506104bc93508c92508291506114bc9050565b6104ca90602081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a2a92505050565b6040516810d3d354131155115160ba1b602082015260290160408051601f19818403018152919052805160209091012061053e88806114bc565b61054c9060c081019061170d565b60405160200161055d92919061178e565b60405160208183030381529060405280519060200120146105cc5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7420737461747573206e6f7420636f6e6669726d6564206173206044820152631cd95b9d60e21b6064820152608401610263565b6106136105d988806114bc565b6105e790604081019061170d565b6040516020016105f892919061179e565b60405160208183030381529060405280519060200120610ac5565b61066861062088806114bc565b61062e90608081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610be092505050565b6004549095506103e86106cb60006106808b806114bc565b61068e9060e081019061170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610c619050565b6106d591906117d7565b6106df91906117f9565b93506106eb87806114bc565b6106f990606081019061170d565b60405160200161070a92919061178e565b60408051601f198184030181529190528051602090910120925061072e87806114bc565b61073c9060a081019061170d565b60405160200161074d92919061178e565b60408051601f198184030181529190528051602090910120915061077187806114bc565b610120013560001b90509295509295909350565b6001805461079290611754565b80601f01602080910402602001604051908101604052809291908181526020018280546107be90611754565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b610c72565b6108256000610ccc565b565b61082f610c72565b600455565b61083c610c72565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610263565b6108aa81610ccc565b50565b6002805461079290611754565b6108c5838383610d1c565b6109015760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610263565b505050565b6060838360006109168383610d91565b9050600019810361092c57869350505050610984565b600061093a88600084610e70565b905060006109568985518561094f91906117f9565b8751610e70565b905081878260405160200161096d9392919061180c565b604051602081830303815290604052955050505050505b9392505050565b8060405160200161099c9190611475565b60405160208183030381529060405280519060200120826040516020016109c39190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d617463682065787065637465646044820152606401610263565b5050565b80604051602001610a3b9190611475565b6040516020818303038152906040528051906020012082604051602001610a629190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d61746368206578706563746564000000006044820152606401610263565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061184f565b15610b7f5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610263565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b5050505050565b600081600081518110610bf557610bf5611871565b6020910101516001600160f81b031916602d60f81b14610c505760405162461bcd60e51b81526020600482015260166024820152752737ba10309039b2b732103a3930b739b0b1ba34b7b760511b6044820152606401610263565b610c5b826006610c61565b92915050565b600061098483601760f91b84610f3d565b6000546001600160a01b031633146108255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c6101200151604051602001610d6c9a99989796959493929190611887565b6040516020818303038152906040529050610d8881848761111a565b95945050505050565b80518251600091849184911115610dae5760001992505050610c5b565b60005b81518351610dbf9190611943565b8111610e6357600160005b8351811015610e3e57838181518110610de557610de5611871565b01602001516001600160f81b03191685610dff83866117f9565b81518110610e0f57610e0f611871565b01602001516001600160f81b03191614610e2c5760009150610e3e565b80610e3681611956565b915050610dca565b508015610e5057509250610c5b915050565b5080610e5b81611956565b915050610db1565b5060001995945050505050565b6060836000610e7f8585611943565b67ffffffffffffffff811115610e9757610e976114dd565b6040519080825280601f01601f191660200182016040528015610ec1576020820181803683370190505b509050845b84811015610f3357828181518110610ee057610ee0611871565b01602001516001600160f81b03191682610efa8884611943565b81518110610f0a57610f0a611871565b60200101906001600160f81b031916908160001a90535080610f2b81611956565b915050610ec6565b5095945050505050565b600083818080805b845181101561109357603060f81b858281518110610f6557610f65611871565b01602001516001600160f81b03191610801590610fa65750603960f81b858281518110610f9457610f94611871565b01602001516001600160f81b03191611155b15610fe9576030858281518110610fbf57610fbf611871565b0160200151610fd1919060f81c611943565b610fdc85600a61196f565b610fe691906117f9565b93505b8115610ffd5782610ff981611956565b9350505b876001600160f81b03191685828151811061101a5761101a611871565b01602001516001600160f81b0319160361108157811561107c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610263565b600191505b8061108b81611956565b915050610f45565b50858211156110ef5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610263565b6110f98287611943565b61110490600a611a6a565b61110e908461196f565b98975050505050505050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c8120610d886001600160a01b0384168286600080600061116f85856111c1565b9092509050600081600481111561118857611188611a76565b1480156111a65750856001600160a01b0316826001600160a01b0316145b806111b757506111b7868686611206565b9695505050505050565b60008082516041036111f75760208301516040840151606085015160001a6111eb878285856112f2565b945094505050506111ff565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401611230929190611a8c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161126e9190611aad565b600060405180830381855afa9150503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091508180156112c257506020815110155b80156111b757508051630b135d3f60e11b906112e79083016020908101908401611abf565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561132957506000905060036113ad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a6576000600192509250506113ad565b9150600090505b94509492505050565b80356001600160a01b03811681146113cd57600080fd5b919050565b600080604083850312156113e557600080fd5b823567ffffffffffffffff8111156113fc57600080fd5b83016040818603121561140e57600080fd5b915061141c602084016113b6565b90509250929050565b60005b83811015611440578181015183820152602001611428565b50506000910152565b60008151808452611461816020860160208601611425565b601f01601f19169290920160200192915050565b6020815260006109846020830184611449565b60006020828403121561149a57600080fd5b5035919050565b6000602082840312156114b357600080fd5b610984826113b6565b6000823561013e198336030181126114d357600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715611517576115176114dd565b60405290565b600082601f83011261152e57600080fd5b813567ffffffffffffffff80821115611549576115496114dd565b604051601f8301601f19908116603f01168101908282118183101715611571576115716114dd565b8160405283815286602085880101111561158a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061014082360312156115bd57600080fd5b6115c56114f3565b823567ffffffffffffffff808211156115dd57600080fd5b6115e93683870161151d565b835260208501359150808211156115ff57600080fd5b61160b3683870161151d565b6020840152604085013591508082111561162457600080fd5b6116303683870161151d565b6040840152606085013591508082111561164957600080fd5b6116553683870161151d565b6060840152608085013591508082111561166e57600080fd5b61167a3683870161151d565b608084015260a085013591508082111561169357600080fd5b61169f3683870161151d565b60a084015260c08501359150808211156116b857600080fd5b6116c43683870161151d565b60c084015260e08501359150808211156116dd57600080fd5b506116ea3682860161151d565b60e083015250610100838101359082015261012092830135928101929092525090565b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b6020019150368190038213156111ff57600080fd5b600181811c9082168061176857607f821691505b60208210810361178857634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6614995d9bdb1d5d60ca1b81528183600783013760009101600701908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826117f457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b6117c1565b6000845161181e818460208901611425565b845190830190611832818360208901611425565b8451910190611845818360208801611425565b0195945050505050565b60006020828403121561186157600080fd5b8151801515811461098457600080fd5b634e487b7160e01b600052603260045260246000fd5b600061014080835261189b8184018e611449565b905082810360208401526118af818d611449565b905082810360408401526118c3818c611449565b905082810360608401526118d7818b611449565b905082810360808401526118eb818a611449565b905082810360a08401526118ff8189611449565b905082810360c08401526119138188611449565b905082810360e08401526119278187611449565b6101008401959095525050610120015298975050505050505050565b81810381811115610c5b57610c5b6117c1565b600060018201611968576119686117c1565b5060010190565b8082028115828204841417610c5b57610c5b6117c1565b600181815b808511156119c15781600019048211156119a7576119a76117c1565b808516156119b457918102915b93841c939080029061198b565b509250929050565b6000826119d857506001610c5b565b816119e557506000610c5b565b81600181146119fb5760028114611a0557611a21565b6001915050610c5b565b60ff841115611a1657611a166117c1565b50506001821b610c5b565b5060208310610133831016604e8410600b8410161715611a44575081810a610c5b565b611a4e8383611986565b8060001904821115611a6257611a626117c1565b029392505050565b600061098483836119c9565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000611aa56040830184611449565b949350505050565b600082516114d3818460208701611425565b600060208284031215611ad157600080fd5b505191905056fea2646970667358221220e18a6a6191feef83c74663dc447936038dada8ef62a251e16ee5c3a5e6ad0e3b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b2a3fda411610071578063b2a3fda41461015d578063b870676c14610170578063dbac582114610183578063f2fde38b1461019a578063f437bc59146101ad578063faec91e0146101b557600080fd5b80630f2d076d146100ae57806315d276e1146100ee5780635e280f111461012d578063715018a6146101425780638da5cb5b1461014c575b600080fd5b6100c16100bc3660046113d2565b6101e9565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e5565b610135610785565b6040516100e59190611475565b61014a610813565b005b6000546001600160a01b0316610115565b61014a61016b366004611488565b610827565b600354610115906001600160a01b031681565b61018c60045481565b6040519081526020016100e5565b61014a6101a83660046114a1565b610834565b6101356108ad565b61018c6040516810d3d354131155115160ba1b60208201526029016040516020818303038152906040528051906020012081565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026c5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6102ca8661027a89806114bc565b610283906115aa565b61029060208b018b61170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108ba92505050565b6040805180820190915260018152601560f91b6020820152610420906103d2906102f48a806114bc565b61030290604081019061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600180549092506103459150611754565b80601f016020809104026020016040519081016040528092919081815260200182805461037190611754565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50505050506109069092919063ffffffff16565b6103dc89806114bc565b6103e6908061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098b92505050565b6105046002805461043090611754565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611754565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b506104bc93508c92508291506114bc9050565b6104ca90602081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a2a92505050565b6040516810d3d354131155115160ba1b602082015260290160408051601f19818403018152919052805160209091012061053e88806114bc565b61054c9060c081019061170d565b60405160200161055d92919061178e565b60405160208183030381529060405280519060200120146105cc5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7420737461747573206e6f7420636f6e6669726d6564206173206044820152631cd95b9d60e21b6064820152608401610263565b6106136105d988806114bc565b6105e790604081019061170d565b6040516020016105f892919061179e565b60405160208183030381529060405280519060200120610ac5565b61066861062088806114bc565b61062e90608081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610be092505050565b6004549095506103e86106cb60006106808b806114bc565b61068e9060e081019061170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610c619050565b6106d591906117d7565b6106df91906117f9565b93506106eb87806114bc565b6106f990606081019061170d565b60405160200161070a92919061178e565b60408051601f198184030181529190528051602090910120925061072e87806114bc565b61073c9060a081019061170d565b60405160200161074d92919061178e565b60408051601f198184030181529190528051602090910120915061077187806114bc565b610120013560001b90509295509295909350565b6001805461079290611754565b80601f01602080910402602001604051908101604052809291908181526020018280546107be90611754565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b610c72565b6108256000610ccc565b565b61082f610c72565b600455565b61083c610c72565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610263565b6108aa81610ccc565b50565b6002805461079290611754565b6108c5838383610d1c565b6109015760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610263565b505050565b6060838360006109168383610d91565b9050600019810361092c57869350505050610984565b600061093a88600084610e70565b905060006109568985518561094f91906117f9565b8751610e70565b905081878260405160200161096d9392919061180c565b604051602081830303815290604052955050505050505b9392505050565b8060405160200161099c9190611475565b60405160208183030381529060405280519060200120826040516020016109c39190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d617463682065787065637465646044820152606401610263565b5050565b80604051602001610a3b9190611475565b6040516020818303038152906040528051906020012082604051602001610a629190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d61746368206578706563746564000000006044820152606401610263565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061184f565b15610b7f5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610263565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b5050505050565b600081600081518110610bf557610bf5611871565b6020910101516001600160f81b031916602d60f81b14610c505760405162461bcd60e51b81526020600482015260166024820152752737ba10309039b2b732103a3930b739b0b1ba34b7b760511b6044820152606401610263565b610c5b826006610c61565b92915050565b600061098483601760f91b84610f3d565b6000546001600160a01b031633146108255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c6101200151604051602001610d6c9a99989796959493929190611887565b6040516020818303038152906040529050610d8881848761111a565b95945050505050565b80518251600091849184911115610dae5760001992505050610c5b565b60005b81518351610dbf9190611943565b8111610e6357600160005b8351811015610e3e57838181518110610de557610de5611871565b01602001516001600160f81b03191685610dff83866117f9565b81518110610e0f57610e0f611871565b01602001516001600160f81b03191614610e2c5760009150610e3e565b80610e3681611956565b915050610dca565b508015610e5057509250610c5b915050565b5080610e5b81611956565b915050610db1565b5060001995945050505050565b6060836000610e7f8585611943565b67ffffffffffffffff811115610e9757610e976114dd565b6040519080825280601f01601f191660200182016040528015610ec1576020820181803683370190505b509050845b84811015610f3357828181518110610ee057610ee0611871565b01602001516001600160f81b03191682610efa8884611943565b81518110610f0a57610f0a611871565b60200101906001600160f81b031916908160001a90535080610f2b81611956565b915050610ec6565b5095945050505050565b600083818080805b845181101561109357603060f81b858281518110610f6557610f65611871565b01602001516001600160f81b03191610801590610fa65750603960f81b858281518110610f9457610f94611871565b01602001516001600160f81b03191611155b15610fe9576030858281518110610fbf57610fbf611871565b0160200151610fd1919060f81c611943565b610fdc85600a61196f565b610fe691906117f9565b93505b8115610ffd5782610ff981611956565b9350505b876001600160f81b03191685828151811061101a5761101a611871565b01602001516001600160f81b0319160361108157811561107c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610263565b600191505b8061108b81611956565b915050610f45565b50858211156110ef5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610263565b6110f98287611943565b61110490600a611a6a565b61110e908461196f565b98975050505050505050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c8120610d886001600160a01b0384168286600080600061116f85856111c1565b9092509050600081600481111561118857611188611a76565b1480156111a65750856001600160a01b0316826001600160a01b0316145b806111b757506111b7868686611206565b9695505050505050565b60008082516041036111f75760208301516040840151606085015160001a6111eb878285856112f2565b945094505050506111ff565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401611230929190611a8c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161126e9190611aad565b600060405180830381855afa9150503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091508180156112c257506020815110155b80156111b757508051630b135d3f60e11b906112e79083016020908101908401611abf565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561132957506000905060036113ad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a6576000600192509250506113ad565b9150600090505b94509492505050565b80356001600160a01b03811681146113cd57600080fd5b919050565b600080604083850312156113e557600080fd5b823567ffffffffffffffff8111156113fc57600080fd5b83016040818603121561140e57600080fd5b915061141c602084016113b6565b90509250929050565b60005b83811015611440578181015183820152602001611428565b50506000910152565b60008151808452611461816020860160208601611425565b601f01601f19169290920160200192915050565b6020815260006109846020830184611449565b60006020828403121561149a57600080fd5b5035919050565b6000602082840312156114b357600080fd5b610984826113b6565b6000823561013e198336030181126114d357600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715611517576115176114dd565b60405290565b600082601f83011261152e57600080fd5b813567ffffffffffffffff80821115611549576115496114dd565b604051601f8301601f19908116603f01168101908282118183101715611571576115716114dd565b8160405283815286602085880101111561158a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061014082360312156115bd57600080fd5b6115c56114f3565b823567ffffffffffffffff808211156115dd57600080fd5b6115e93683870161151d565b835260208501359150808211156115ff57600080fd5b61160b3683870161151d565b6020840152604085013591508082111561162457600080fd5b6116303683870161151d565b6040840152606085013591508082111561164957600080fd5b6116553683870161151d565b6060840152608085013591508082111561166e57600080fd5b61167a3683870161151d565b608084015260a085013591508082111561169357600080fd5b61169f3683870161151d565b60a084015260c08501359150808211156116b857600080fd5b6116c43683870161151d565b60c084015260e08501359150808211156116dd57600080fd5b506116ea3682860161151d565b60e083015250610100838101359082015261012092830135928101929092525090565b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b6020019150368190038213156111ff57600080fd5b600181811c9082168061176857607f821691505b60208210810361178857634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6614995d9bdb1d5d60ca1b81528183600783013760009101600701908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826117f457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b6117c1565b6000845161181e818460208901611425565b845190830190611832818360208901611425565b8451910190611845818360208801611425565b0195945050505050565b60006020828403121561186157600080fd5b8151801515811461098457600080fd5b634e487b7160e01b600052603260045260246000fd5b600061014080835261189b8184018e611449565b905082810360208401526118af818d611449565b905082810360408401526118c3818c611449565b905082810360608401526118d7818b611449565b905082810360808401526118eb818a611449565b905082810360a08401526118ff8189611449565b905082810360c08401526119138188611449565b905082810360e08401526119278187611449565b6101008401959095525050610120015298975050505050505050565b81810381811115610c5b57610c5b6117c1565b600060018201611968576119686117c1565b5060010190565b8082028115828204841417610c5b57610c5b6117c1565b600181815b808511156119c15781600019048211156119a7576119a76117c1565b808516156119b457918102915b93841c939080029061198b565b509250929050565b6000826119d857506001610c5b565b816119e557506000610c5b565b81600181146119fb5760028114611a0557611a21565b6001915050610c5b565b60ff841115611a1657611a166117c1565b50506001821b610c5b565b5060208310610133831016604e8410600b8410161715611a44575081810a610c5b565b611a4e8383611986565b8060001904821115611a6257611a626117c1565b029392505050565b600061098483836119c9565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000611aa56040830184611449565b949350505050565b600082516114d3818460208701611425565b600060208284031215611ad157600080fd5b505191905056fea2646970667358221220e18a6a6191feef83c74663dc447936038dada8ef62a251e16ee5c3a5e6ad0e3b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated TLS calls\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5432,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"endpoint\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5434,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"host\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5437,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_contract(INullifierRegistry)5831\"\n      },\n      {\n        \"astId\": 5439,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)5831\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/VenmoManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x8FF8F6698Bd7bafFaD97D23ed46c5dD0b515B0BA\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x9ad2f7ed40a9e726f247a724614fc9572fca208571a0419dbbfd8d9ca2122702\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x8FF8F6698Bd7bafFaD97D23ed46c5dD0b515B0BA\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"242603\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800020000000000000000000000000000400000000000000000000000000000000000000000000000000040000040000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd48796ba4813eb975e85b0b631788bef16e6a5fa967b9155de1b7e3a1741ba5a\",\n    \"transactionHash\": \"0x9ad2f7ed40a9e726f247a724614fc9572fca208571a0419dbbfd8d9ca2122702\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 4,\n        \"blockNumber\": 6681008,\n        \"transactionHash\": \"0x9ad2f7ed40a9e726f247a724614fc9572fca208571a0419dbbfd8d9ca2122702\",\n        \"address\": \"0x8FF8F6698Bd7bafFaD97D23ed46c5dD0b515B0BA\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 9,\n        \"blockHash\": \"0xd48796ba4813eb975e85b0b631788bef16e6a5fa967b9155de1b7e3a1741ba5a\"\n      }\n    ],\n    \"blockNumber\": 6681008,\n    \"cumulativeGasUsed\": \"656201\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3235f00afe52b593578a06ba6b1f711c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setMailserverKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":\\\"ManagedKeyHashAdapter\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./IKeyHashAdapter.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n\\\\n    bytes32 public mailserverKeyHash;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32 _mailserverKeyHash\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x348720e86ab8fd55374953f267d674884f0cbfd3a612859dae5988363bd71c5c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161034338038061034383398101604081905261002f91610090565b61003833610040565b6001556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b61028b806100b86000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5721,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"mailserverKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_bytes32\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/VenmoManagedKeyHashAdapterV2.json",
    "content": "{\n  \"address\": \"0xc7350FFc8d7e92Bc4cD116A09b3D36121144061b\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd52e691b661df391e889b0b722ca937b251045f40893abaafd3db3f4d24e1b64\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xc7350FFc8d7e92Bc4cD116A09b3D36121144061b\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"608926\",\n    \"logsBloom\": \"0x00000000000000001000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000200000000000000000000100000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x5f7f88edc1886a39c49f9eccfcc9e663b998eaa8af39c7037a7861d69d5111df\",\n    \"transactionHash\": \"0xd52e691b661df391e889b0b722ca937b251045f40893abaafd3db3f4d24e1b64\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 4,\n        \"blockNumber\": 9279066,\n        \"transactionHash\": \"0xd52e691b661df391e889b0b722ca937b251045f40893abaafd3db3f4d24e1b64\",\n        \"address\": \"0xc7350FFc8d7e92Bc4cD116A09b3D36121144061b\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 12,\n        \"blockHash\": \"0x5f7f88edc1886a39c49f9eccfcc9e663b998eaa8af39c7037a7861d69d5111df\"\n      }\n    ],\n    \"blockNumber\": 9279066,\n    \"cumulativeGasUsed\": \"976706\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\",\n      \"0x1163C7F4AF2E63FE2DCB73B8EDF51A3AC04A257979D7877EDFE4AB37B9C807B1\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3574,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/VenmoRampV2.json",
    "content": "{\n  \"address\": \"0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountVenmoIdHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4a3327c6461b43e98e72f73ead9cf0dd8d8fd0a7905d6ae2f4fd9069589cc68d\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D\",\n    \"transactionIndex\": 3,\n    \"gasUsed\": \"3777465\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000008020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000040000000000000000000001000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x26793cb41d8e37b5ae99afaf5f78bf40ab79318d20fe78b4d0c0860c53e7f4e4\",\n    \"transactionHash\": \"0x4a3327c6461b43e98e72f73ead9cf0dd8d8fd0a7905d6ae2f4fd9069589cc68d\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 3,\n        \"blockNumber\": 9279063,\n        \"transactionHash\": \"0x4a3327c6461b43e98e72f73ead9cf0dd8d8fd0a7905d6ae2f4fd9069589cc68d\",\n        \"address\": \"0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 4,\n        \"blockHash\": \"0x26793cb41d8e37b5ae99afaf5f78bf40ab79318d20fe78b4d0c0860c53e7f4e4\"\n      },\n      {\n        \"transactionIndex\": 3,\n        \"blockNumber\": 9279063,\n        \"transactionHash\": \"0x4a3327c6461b43e98e72f73ead9cf0dd8d8fd0a7905d6ae2f4fd9069589cc68d\",\n        \"address\": \"0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 5,\n        \"blockHash\": \"0x26793cb41d8e37b5ae99afaf5f78bf40ab79318d20fe78b4d0c0860c53e7f4e4\"\n      }\n    ],\n    \"blockNumber\": 9279063,\n    \"cumulativeGasUsed\": \"3954458\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"0xC87eFE0445fbA1FDb8a73553F293272B7bE91c64\",\n    \"20000000\",\n    \"500000000\",\n    \"86400\",\n    \"43200\",\n    \"0\",\n    \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountVenmoIdHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":\\\"VenmoRampV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55cb1c9701d9b03ff4e445f03993659c7d3b6922ad280d3b2a88edfad8af9fed\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRamp } from \\\\\\\"./interfaces/IRamp.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRampV2 is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IRamp _ramp,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        ramp = _ramp;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessorV2 _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return AccountInfo({\\\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\\\n            deposits: accounts[_account].deposits\\\\n        });\\\\n    }\\\\n\\\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\\\n            ramp.getAccountInfo(_account).venmoIdHash :\\\\n            accounts[_account].venmoIdHash;\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessorV2.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x518dcdcb17faceecc71150a2a412462429cdb61856603e23affd44394523dea8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ramp } from \\\\\\\"../../venmo-v1/Ramp.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRamp {\\\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xffaff7b2fe82cb5756f2c472987d6cfd157312da87a355f21ef7aaf62df27161\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b506040516200439a3803806200439a8339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0388811660805289811660c05287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c0516140a2620002f8600039600081816102f5015261217d015260008181610628015261112801526000818161039a0152818161146601528181611ad301528181612bd70152612c8601526140a26000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d36600461355b565b61073a565b6040519081526020015b60405180910390f35b6102a26102c336600461355b565b610762565b6102db6102d636600461355b565b610788565b005b6102db6102eb36600461357f565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db61034636600461357f565b610914565b6102db61035936600461357f565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db610390366004613598565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca36600461357f565b610f39565b6103e26103dd36600461355b565b610fda565b6040516102ac91906135d1565b6102db6103fd366004613615565b611053565b6102db6104103660046136bc565b6110e6565b6102a260095481565b61043161042c36600461355b565b611522565b6040516102ac919061380a565b6102db61044c36600461357f565b611770565b6102a260075481565b6102db61046836600461357f565b61180f565b6102db61047b3660046138b9565b611955565b6102db611b48565b6104316104963660046138b9565b611b5c565b6104ae6104a936600461355b565b611d42565b6040516102ac919061394e565b6000546001600160a01b0316610317565b6105156104da36600461357f565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db61055636600461357f565b611de1565b6102db61056936600461357f565b611e78565b61058161057c36600461357f565b611f7c565b6040516102ac91906139a6565b6102a2600a5481565b6105de6105a536600461357f565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e36600461355b565b61206a565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a261065836600461355b565b612122565b6102db61066b366004613a58565b6121f4565b6102db61067e36600461357f565b6122ae565b600c54610317906001600160a01b031681565b6102db6106a4366004613b0f565b6123df565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b84565b612467565b6040516102ac9190613bf8565b6102db6106fc36600461355b565b6125b7565b600254610317906001600160a01b031681565b6102db61072236600461355b565b61260d565b610372610735366004613c88565b612686565b60006003600061074984612122565b8152602001908152602001600020600101549050919050565b60006003600061077184612122565b815260208101919091526040016000205492915050565b6107906126c1565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f033612122565b036108165760405162461bcd60e51b815260040161080d90613cb4565b60405180910390fd5b600061082133612122565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c6126c1565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a96126c1565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e933612122565b03610a065760405162461bcd60e51b815260040161080d90613cb4565b6000610a1133612122565b6000858152600560205260408120805492935091610a37906001600160a01b0316612122565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613d01565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b848861271b565b90508583600501541015610e0057600080610d6589612786565b9150915087818660050154610d7a9190613d01565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc9858361292d565b80856005016000828254610ddd9190613d01565b9250508190555080856006016000828254610df89190613d14565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613d14565b9250508190555085836006016000828254610ec29190613d01565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f416126c1565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe984612122565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b6126c1565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f133612122565b0361110e5760405162461bcd60e51b815260040161080d90613cb4565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613d27565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d35565b9050806111aa33612122565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d4e565b6113479190613d7b565b600d8054919250600091908261135c83613d8f565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe91830190600361339c565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133da565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613da8565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a461364e565b6040519080825280602002602001820160405280156115dd57816020015b6115ca613414565b8152602001906001900390816115c25790505b50915060005b815181101561176957600082828151811061160057611600613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612786565b915050604051806080016040528084815260200161171a8460000151612122565b81526020018381526020018284606001516117359190613d01565b81525086858151811061174a5761174a613dca565b60200260200101819052505050508061176290613d8f565b90506115e3565b5050919050565b6117786126c1565b66b1a2bc2ec500008111156117da5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661188f5760405162461bcd60e51b815260040161080d90613de0565b80546001600160a01b031633146118e85760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118f2818461298f565b816060015181600601600082825461190a9190613d14565b9250508190555042600360006119238560000151612122565b815260200190815260200160002060010181905550611946826040015182612a87565b6119508383612b7a565b505050565b6000805b8251811015611ab657600083828151811061197657611976613dca565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119ee5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119fa84612786565b91509150611a08838361292d565b808360050154611a189190613d01565b611a229087613d01565b955080836006016000828254611a389190613d14565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a7f908590613d01565b60405190815260200160405180910390a360006005840155611aa18484612a87565b5050505080611aaf90613d8f565b9050611959565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613da8565b611b506126c1565b611b5a6000612d58565b565b606081516001600160401b03811115611b7757611b7761364e565b604051908082528060200260200182016040528015611bb057816020015b611b9d613414565b815260200190600190039081611b955790505b50905060005b8251811015611d3c576000838281518110611bd357611bd3613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c2357505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611cb657602002820191906000526020600020905b815481526020019060010190808311611ca2575b50505050508152505090506000611ccc83612786565b9150506040518060800160405280848152602001611ced8460000151612122565b8152602001838152602001828460600151611d089190613d01565b815250858581518110611d1d57611d1d613dca565b602002602001018190525050505080611d3590613d8f565b9050611bb6565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d6b84612122565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b50505050508152509050919050565b611de96126c1565b80600003611e435760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e8333612122565b03611ea05760405162461bcd60e51b815260040161080d90613cb4565b6000611eab33612122565b6000818152600360208181526040808420878552909201905290205490915060ff16611f105760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f469060020183612da8565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f84613440565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fc75750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561205a57602002820191906000526020600020905b815481526020019060010190808311612046575b5050505050815250509050919050565b6120726126c1565b6001600160a01b0381166120d45760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561215e576001600160a01b0382166000908152600460205260409020546121ee565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ec9190810190613e0f565b515b92915050565b60006121ff33612122565b1461225c5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061226a85858585612ed1565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036123235760405162461bcd60e51b815260040161080d90613de0565b61232c33612122565b815161233790612122565b146123845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061239f818461298f565b81606001518160050160008282546123b79190613d01565b909155505060608201516006820180546000906123d5908490613d14565b9091555050505050565b60008060006123f087878787612f71565b925092509250612400828261298f565b82606001518260060160008282546124189190613d14565b9250508190555042600360006124318660000151612122565b815260200190815260200160002060010181905550612454836040015183612a87565b61245e8184612b7a565b50505050505050565b60606000826001600160401b038111156124835761248361364e565b6040519080825280602002602001820160405280156124bc57816020015b6124a961348c565b8152602001906001900390816124a15790505b50905060005b838110156125af5760008585838181106124de576124de613dca565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061255d5761255d613dca565b90506020020135815260200182815260200161257c8360000151612122565b81525084848151811061259157612591613dca565b60200260200101819052505050806125a890613d8f565b90506124c2565b509392505050565b6125bf6126c1565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6126156126c1565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61268381612d58565b50565b60006003600061269585612122565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061277e7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613edd565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127e357602002820191906000526020600020905b8154815260200190600101908083116127cf575b5050505050905080516001600160401b038111156128035761280361364e565b60405190808252806020026020018201604052801561282c578160200160208202803683370190505b50925060005b81518110156129265760006006600084848151811061285357612853613dca565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128c691613d01565b1015612915578282815181106128de576128de613dca565b60200260200101518583815181106128f8576128f8613dca565b602090810291909101015260608101516129129085613d01565b93505b5061291f81613d8f565b9050612832565b5050915091565b60005b8151811015611950576000801b82828151811061294f5761294f613dca565b60200260200101511461297f5761297f8383838151811061297257612972613dca565b602002602001015161298f565b61298881613d8f565b9050612930565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129f690612122565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a526008840183612da8565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a9d9190613d01565b9050806000036119505781546001600160a01b03166000908152600460205260409020612acd9060010184613244565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b7391906134b4565b5050505050565b6000600b54600014612c4657670de0b6b3a7640000600b548360600151612ba19190613d4e565b612bab9190613d7b565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190613da8565b505b6000818360600151612c589190613d14565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf39190613da8565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612e0484805480602002602001604051908101604052809291908181526020018280548015612df957602002820191906000526020600020905b815481526020019060010190808311612de5575b5050505050846132e9565b9150915080612e4d5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e5e90600190613d14565b9050808314612ea357848181548110612e7957612e79613dca565b9060005260206000200154858481548110612e9657612e96613dca565b6000918252602090912001555b84805480612eb357612eb3613ef1565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f2491600401613f58565b6020604051808303816000875af1158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f679190613d35565b9695505050505050565b612f796134d2565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fd59190600401613fc7565b60a0604051808303816000875af1158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613018919061402c565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130a45760405162461bcd60e51b815260040161080d90613de0565b85826080015111156131035760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b80548590613119906001600160a01b0316612122565b146131665760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b836131748360000151612122565b146131c15760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131de9190613d4e565b6131e89190613d7b565b8710156132305760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b6000806132a08480548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050508461334c565b9150915080612e4d5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b81811015613339578486828151811061330d5761330d613dca565b602002602001015103613327579250600191506133459050565b8061333181613d8f565b9150506132f2565b50600019600092509250505b9250929050565b81516000908190815b81811015613339578486828151811061337057613370613dca565b60200260200101510361338a579250600191506133459050565b8061339481613d8f565b915050613355565b82600381019282156133ca579160200282015b828111156133ca5782518255916020019190600101906133af565b506133d6929150613513565b5090565b8280548282559060005260206000209081019282156133ca57916020028201828111156133ca5782518255916020019190600101906133af565b6040805160808101825260008082526020820152908101613433613440565b8152602001600081525090565b6040518060e0016040528060006001600160a01b03168152602001613463613528565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134a76134d2565b8152600060209091015290565b50805460008255906000526020600020908101906126839190613513565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133d65760008155600101613514565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461268357600080fd5b60006020828403121561356d57600080fd5b813561357881613546565b9392505050565b60006020828403121561359157600080fd5b5035919050565b6000806000606084860312156135ad57600080fd5b833592506020840135915060408401356135c681613546565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613609578351835292840192918401916001016135ed565b50909695505050505050565b6000806040838503121561362857600080fd5b823561363381613546565b9150602083013561364381613546565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156136865761368661364e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136b4576136b461364e565b604052919050565b600080600060a084860312156136d157600080fd5b84601f8501126136e057600080fd5b604051606081018181106001600160401b03821117156137025761370261364e565b60405280606086018781111561371757600080fd5b865b81811015613731578035835260209283019201613719565b5091979135965050608094909401359392505050565b8060005b6003811015612ecb57815184526020938401939091019060010161374b565b600061012080840160018060a01b03845116855260208085015161379082880182613747565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137fe57835185529382019392820192600191909101906137de565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561388857603f19898403018552815160808151855288820151898601528782015181898701526138678287018261376a565b60609384015196909301959095525094870194925090860190600101613831565b509098975050505050505050565b60006001600160401b038211156138af576138af61364e565b5060051b60200190565b600060208083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b8301601f810185136138f357600080fd5b803561390661390182613896565b61368c565b81815260059190911b8201830190838101908783111561392557600080fd5b928401925b828410156139435783358252928401929084019061392a565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561399b578351825292840192600192909201919084019061397b565b509695505050505050565b602081526000613578602083018461376a565b600082601f8301126139ca57600080fd5b6139d2613664565b8060408401858111156139e457600080fd5b845b818110156139fe5780358452602093840193016139e6565b509095945050505050565b600082601f830112613a1a57600080fd5b613a22613664565b806080840185811115613a3457600080fd5b845b818110156139fe57613a4887826139b9565b8452602090930192604001613a36565b6000806000806101a0808688031215613a7057600080fd5b613a7a87876139b9565b9450613a898760408801613a09565b9350613a988760c088016139b9565b92508661011f870112613aaa57600080fd5b60405160a081018181106001600160401b0382111715613acc57613acc61364e565b604052908601908088831115613ae157600080fd5b61010088015b83811015613aff578035825260209182019101613ae7565b5050809250505092959194509250565b600080600080610280808688031215613b2757600080fd5b613b3187876139b9565b9450613b408760408801613a09565b9350613b4f8760c088016139b9565b92508661011f870112613b6157600080fd5b60405161018081018181106001600160401b0382111715613acc57613acc61364e565b60008060208385031215613b9757600080fd5b82356001600160401b0380821115613bae57600080fd5b818501915085601f830112613bc257600080fd5b813581811115613bd157600080fd5b8660208260051b8501011115613be657600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7b578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c15565b5091979650505050505050565b60008060408385031215613c9b57600080fd5b8235613ca681613546565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ee576121ee613ceb565b818103818111156121ee576121ee613ceb565b606081016121ee8284613747565b600060208284031215613d4757600080fd5b5051919050565b80820281158282048414176121ee576121ee613ceb565b634e487b7160e01b600052601260045260246000fd5b600082613d8a57613d8a613d65565b500490565b600060018201613da157613da1613ceb565b5060010190565b600060208284031215613dba57600080fd5b8151801515811461357857600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613e2257600080fd5b82516001600160401b0380821115613e3957600080fd5b9084019060408287031215613e4d57600080fd5b613e55613664565b825181528383015182811115613e6a57600080fd5b80840193505086601f840112613e7f57600080fd5b82519150613e8f61390183613896565b82815260059290921b83018401918481019088841115613eae57600080fd5b938501935b83851015613ecc57845182529385019390850190613eb3565b948201949094529695505050505050565b600082613eec57613eec613d65565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ecb578151845260209384019390910190600101613f0b565b8060005b6002811015612ecb57613f42848351613f07565b6040939093019260209190910190600101613f2e565b60006101a082019050613f6c828451613f07565b602080840151613f7f6040850182613f2a565b506040840151613f9260c0850182613f07565b506060840151610100840160005b6005811015613fbd57825182529183019190830190600101613fa0565b5050505092915050565b600061028082019050613fdb828451613f07565b602080840151613fee6040850182613f2a565b50604084015161400160c0850182613f07565b506060840151610100840160005b600c811015613fbd5782518252918301919083019060010161400f565b600080600080600060a0868803121561404457600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212205f324bcc64951b344706a8dfc43dadc49148f6b3a1ef8999a96c6941721f73f764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d36600461355b565b61073a565b6040519081526020015b60405180910390f35b6102a26102c336600461355b565b610762565b6102db6102d636600461355b565b610788565b005b6102db6102eb36600461357f565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db61034636600461357f565b610914565b6102db61035936600461357f565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db610390366004613598565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca36600461357f565b610f39565b6103e26103dd36600461355b565b610fda565b6040516102ac91906135d1565b6102db6103fd366004613615565b611053565b6102db6104103660046136bc565b6110e6565b6102a260095481565b61043161042c36600461355b565b611522565b6040516102ac919061380a565b6102db61044c36600461357f565b611770565b6102a260075481565b6102db61046836600461357f565b61180f565b6102db61047b3660046138b9565b611955565b6102db611b48565b6104316104963660046138b9565b611b5c565b6104ae6104a936600461355b565b611d42565b6040516102ac919061394e565b6000546001600160a01b0316610317565b6105156104da36600461357f565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db61055636600461357f565b611de1565b6102db61056936600461357f565b611e78565b61058161057c36600461357f565b611f7c565b6040516102ac91906139a6565b6102a2600a5481565b6105de6105a536600461357f565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e36600461355b565b61206a565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a261065836600461355b565b612122565b6102db61066b366004613a58565b6121f4565b6102db61067e36600461357f565b6122ae565b600c54610317906001600160a01b031681565b6102db6106a4366004613b0f565b6123df565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b84565b612467565b6040516102ac9190613bf8565b6102db6106fc36600461355b565b6125b7565b600254610317906001600160a01b031681565b6102db61072236600461355b565b61260d565b610372610735366004613c88565b612686565b60006003600061074984612122565b8152602001908152602001600020600101549050919050565b60006003600061077184612122565b815260208101919091526040016000205492915050565b6107906126c1565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f033612122565b036108165760405162461bcd60e51b815260040161080d90613cb4565b60405180910390fd5b600061082133612122565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c6126c1565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a96126c1565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e933612122565b03610a065760405162461bcd60e51b815260040161080d90613cb4565b6000610a1133612122565b6000858152600560205260408120805492935091610a37906001600160a01b0316612122565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613d01565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b848861271b565b90508583600501541015610e0057600080610d6589612786565b9150915087818660050154610d7a9190613d01565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc9858361292d565b80856005016000828254610ddd9190613d01565b9250508190555080856006016000828254610df89190613d14565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613d14565b9250508190555085836006016000828254610ec29190613d01565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f416126c1565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe984612122565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b6126c1565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f133612122565b0361110e5760405162461bcd60e51b815260040161080d90613cb4565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613d27565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d35565b9050806111aa33612122565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d4e565b6113479190613d7b565b600d8054919250600091908261135c83613d8f565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe91830190600361339c565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133da565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613da8565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a461364e565b6040519080825280602002602001820160405280156115dd57816020015b6115ca613414565b8152602001906001900390816115c25790505b50915060005b815181101561176957600082828151811061160057611600613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612786565b915050604051806080016040528084815260200161171a8460000151612122565b81526020018381526020018284606001516117359190613d01565b81525086858151811061174a5761174a613dca565b60200260200101819052505050508061176290613d8f565b90506115e3565b5050919050565b6117786126c1565b66b1a2bc2ec500008111156117da5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661188f5760405162461bcd60e51b815260040161080d90613de0565b80546001600160a01b031633146118e85760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118f2818461298f565b816060015181600601600082825461190a9190613d14565b9250508190555042600360006119238560000151612122565b815260200190815260200160002060010181905550611946826040015182612a87565b6119508383612b7a565b505050565b6000805b8251811015611ab657600083828151811061197657611976613dca565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119ee5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119fa84612786565b91509150611a08838361292d565b808360050154611a189190613d01565b611a229087613d01565b955080836006016000828254611a389190613d14565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a7f908590613d01565b60405190815260200160405180910390a360006005840155611aa18484612a87565b5050505080611aaf90613d8f565b9050611959565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613da8565b611b506126c1565b611b5a6000612d58565b565b606081516001600160401b03811115611b7757611b7761364e565b604051908082528060200260200182016040528015611bb057816020015b611b9d613414565b815260200190600190039081611b955790505b50905060005b8251811015611d3c576000838281518110611bd357611bd3613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c2357505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611cb657602002820191906000526020600020905b815481526020019060010190808311611ca2575b50505050508152505090506000611ccc83612786565b9150506040518060800160405280848152602001611ced8460000151612122565b8152602001838152602001828460600151611d089190613d01565b815250858581518110611d1d57611d1d613dca565b602002602001018190525050505080611d3590613d8f565b9050611bb6565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d6b84612122565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b50505050508152509050919050565b611de96126c1565b80600003611e435760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e8333612122565b03611ea05760405162461bcd60e51b815260040161080d90613cb4565b6000611eab33612122565b6000818152600360208181526040808420878552909201905290205490915060ff16611f105760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f469060020183612da8565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f84613440565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fc75750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561205a57602002820191906000526020600020905b815481526020019060010190808311612046575b5050505050815250509050919050565b6120726126c1565b6001600160a01b0381166120d45760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561215e576001600160a01b0382166000908152600460205260409020546121ee565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ec9190810190613e0f565b515b92915050565b60006121ff33612122565b1461225c5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061226a85858585612ed1565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036123235760405162461bcd60e51b815260040161080d90613de0565b61232c33612122565b815161233790612122565b146123845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061239f818461298f565b81606001518160050160008282546123b79190613d01565b909155505060608201516006820180546000906123d5908490613d14565b9091555050505050565b60008060006123f087878787612f71565b925092509250612400828261298f565b82606001518260060160008282546124189190613d14565b9250508190555042600360006124318660000151612122565b815260200190815260200160002060010181905550612454836040015183612a87565b61245e8184612b7a565b50505050505050565b60606000826001600160401b038111156124835761248361364e565b6040519080825280602002602001820160405280156124bc57816020015b6124a961348c565b8152602001906001900390816124a15790505b50905060005b838110156125af5760008585838181106124de576124de613dca565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061255d5761255d613dca565b90506020020135815260200182815260200161257c8360000151612122565b81525084848151811061259157612591613dca565b60200260200101819052505050806125a890613d8f565b90506124c2565b509392505050565b6125bf6126c1565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6126156126c1565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61268381612d58565b50565b60006003600061269585612122565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061277e7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613edd565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127e357602002820191906000526020600020905b8154815260200190600101908083116127cf575b5050505050905080516001600160401b038111156128035761280361364e565b60405190808252806020026020018201604052801561282c578160200160208202803683370190505b50925060005b81518110156129265760006006600084848151811061285357612853613dca565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128c691613d01565b1015612915578282815181106128de576128de613dca565b60200260200101518583815181106128f8576128f8613dca565b602090810291909101015260608101516129129085613d01565b93505b5061291f81613d8f565b9050612832565b5050915091565b60005b8151811015611950576000801b82828151811061294f5761294f613dca565b60200260200101511461297f5761297f8383838151811061297257612972613dca565b602002602001015161298f565b61298881613d8f565b9050612930565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129f690612122565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a526008840183612da8565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a9d9190613d01565b9050806000036119505781546001600160a01b03166000908152600460205260409020612acd9060010184613244565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b7391906134b4565b5050505050565b6000600b54600014612c4657670de0b6b3a7640000600b548360600151612ba19190613d4e565b612bab9190613d7b565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190613da8565b505b6000818360600151612c589190613d14565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf39190613da8565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612e0484805480602002602001604051908101604052809291908181526020018280548015612df957602002820191906000526020600020905b815481526020019060010190808311612de5575b5050505050846132e9565b9150915080612e4d5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e5e90600190613d14565b9050808314612ea357848181548110612e7957612e79613dca565b9060005260206000200154858481548110612e9657612e96613dca565b6000918252602090912001555b84805480612eb357612eb3613ef1565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f2491600401613f58565b6020604051808303816000875af1158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f679190613d35565b9695505050505050565b612f796134d2565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fd59190600401613fc7565b60a0604051808303816000875af1158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613018919061402c565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130a45760405162461bcd60e51b815260040161080d90613de0565b85826080015111156131035760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b80548590613119906001600160a01b0316612122565b146131665760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b836131748360000151612122565b146131c15760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131de9190613d4e565b6131e89190613d7b565b8710156132305760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b6000806132a08480548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050508461334c565b9150915080612e4d5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b81811015613339578486828151811061330d5761330d613dca565b602002602001015103613327579250600191506133459050565b8061333181613d8f565b9150506132f2565b50600019600092509250505b9250929050565b81516000908190815b81811015613339578486828151811061337057613370613dca565b60200260200101510361338a579250600191506133459050565b8061339481613d8f565b915050613355565b82600381019282156133ca579160200282015b828111156133ca5782518255916020019190600101906133af565b506133d6929150613513565b5090565b8280548282559060005260206000209081019282156133ca57916020028201828111156133ca5782518255916020019190600101906133af565b6040805160808101825260008082526020820152908101613433613440565b8152602001600081525090565b6040518060e0016040528060006001600160a01b03168152602001613463613528565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134a76134d2565b8152600060209091015290565b50805460008255906000526020600020908101906126839190613513565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133d65760008155600101613514565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461268357600080fd5b60006020828403121561356d57600080fd5b813561357881613546565b9392505050565b60006020828403121561359157600080fd5b5035919050565b6000806000606084860312156135ad57600080fd5b833592506020840135915060408401356135c681613546565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613609578351835292840192918401916001016135ed565b50909695505050505050565b6000806040838503121561362857600080fd5b823561363381613546565b9150602083013561364381613546565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156136865761368661364e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136b4576136b461364e565b604052919050565b600080600060a084860312156136d157600080fd5b84601f8501126136e057600080fd5b604051606081018181106001600160401b03821117156137025761370261364e565b60405280606086018781111561371757600080fd5b865b81811015613731578035835260209283019201613719565b5091979135965050608094909401359392505050565b8060005b6003811015612ecb57815184526020938401939091019060010161374b565b600061012080840160018060a01b03845116855260208085015161379082880182613747565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137fe57835185529382019392820192600191909101906137de565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561388857603f19898403018552815160808151855288820151898601528782015181898701526138678287018261376a565b60609384015196909301959095525094870194925090860190600101613831565b509098975050505050505050565b60006001600160401b038211156138af576138af61364e565b5060051b60200190565b600060208083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b8301601f810185136138f357600080fd5b803561390661390182613896565b61368c565b81815260059190911b8201830190838101908783111561392557600080fd5b928401925b828410156139435783358252928401929084019061392a565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561399b578351825292840192600192909201919084019061397b565b509695505050505050565b602081526000613578602083018461376a565b600082601f8301126139ca57600080fd5b6139d2613664565b8060408401858111156139e457600080fd5b845b818110156139fe5780358452602093840193016139e6565b509095945050505050565b600082601f830112613a1a57600080fd5b613a22613664565b806080840185811115613a3457600080fd5b845b818110156139fe57613a4887826139b9565b8452602090930192604001613a36565b6000806000806101a0808688031215613a7057600080fd5b613a7a87876139b9565b9450613a898760408801613a09565b9350613a988760c088016139b9565b92508661011f870112613aaa57600080fd5b60405160a081018181106001600160401b0382111715613acc57613acc61364e565b604052908601908088831115613ae157600080fd5b61010088015b83811015613aff578035825260209182019101613ae7565b5050809250505092959194509250565b600080600080610280808688031215613b2757600080fd5b613b3187876139b9565b9450613b408760408801613a09565b9350613b4f8760c088016139b9565b92508661011f870112613b6157600080fd5b60405161018081018181106001600160401b0382111715613acc57613acc61364e565b60008060208385031215613b9757600080fd5b82356001600160401b0380821115613bae57600080fd5b818501915085601f830112613bc257600080fd5b813581811115613bd157600080fd5b8660208260051b8501011115613be657600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7b578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c15565b5091979650505050505050565b60008060408385031215613c9b57600080fd5b8235613ca681613546565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ee576121ee613ceb565b818103818111156121ee576121ee613ceb565b606081016121ee8284613747565b600060208284031215613d4757600080fd5b5051919050565b80820281158282048414176121ee576121ee613ceb565b634e487b7160e01b600052601260045260246000fd5b600082613d8a57613d8a613d65565b500490565b600060018201613da157613da1613ceb565b5060010190565b600060208284031215613dba57600080fd5b8151801515811461357857600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613e2257600080fd5b82516001600160401b0380821115613e3957600080fd5b9084019060408287031215613e4d57600080fd5b613e55613664565b825181528383015182811115613e6a57600080fd5b80840193505086601f840112613e7f57600080fd5b82519150613e8f61390183613896565b82815260059290921b83018401918481019088841115613eae57600080fd5b938501935b83851015613ecc57845182529385019390850190613eb3565b948201949094529695505050505050565b600082613eec57613eec613d65565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ecb578151845260209384019390910190600101613f0b565b8060005b6002811015612ecb57613f42848351613f07565b6040939093019260209190910190600101613f2e565b60006101a082019050613f6c828451613f07565b602080840151613f7f6040850182613f2a565b506040840151613f9260c0850182613f07565b506060840151610100840160005b6005811015613fbd57825182529183019190830190600101613fa0565b5050505092915050565b600061028082019050613fdb828451613f07565b602080840151613fee6040850182613f2a565b50604084015161400160c0850182613f07565b506060840151610100840160005b600c811015613fbd5782518252918301919083019060010161400f565b600080600080600060a0868803121561404457600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212205f324bcc64951b344706a8dfc43dadc49148f6b3a1ef8999a96c6941721f73f764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9938,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessorV2)12363\"\n      },\n      {\n        \"astId\": 9941,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)9598\"\n      },\n      {\n        \"astId\": 9943,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 9948,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)9897_storage)\"\n      },\n      {\n        \"astId\": 9953,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)9834_storage)\"\n      },\n      {\n        \"astId\": 9958,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)9852_storage)\"\n      },\n      {\n        \"astId\": 9963,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)9873_storage)\"\n      },\n      {\n        \"astId\": 9965,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9967,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9969,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9971,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9973,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9975,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9977,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessorV2)12363\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessorV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)9598\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)9834_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct VenmoRampV2.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)9834_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)9897_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)9897_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)9873_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)9873_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)9852_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct VenmoRampV2.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)9852_storage\"\n      },\n      \"t_struct(AccountInfo)9834_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 9830,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 9833,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)9889_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 9884,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 9888,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)9852_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 9836,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9840,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 9842,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9844,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9846,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9848,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9851,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)9897_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 9891,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 9893,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9896,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)9889_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)9873_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Intent\",\n        \"members\": [\n          {\n            \"astId\": 9864,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9866,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9868,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9870,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9872,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/VenmoRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0x71EAD6E8FC3331da65191BCbdD3BE81F04EAa3CA\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x951bacc6a38db1bd1459083a51f35f0bdabbc6bf86a9409831751ad6c52f5b2c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x71EAD6E8FC3331da65191BCbdD3BE81F04EAa3CA\",\n    \"transactionIndex\": 6,\n    \"gasUsed\": \"1470150\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000020000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x8a88589aebf9501032d27ac9dafceb6efef4c8a102b4098baf1bd165eef873fa\",\n    \"transactionHash\": \"0x951bacc6a38db1bd1459083a51f35f0bdabbc6bf86a9409831751ad6c52f5b2c\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 6,\n        \"blockNumber\": 6681016,\n        \"transactionHash\": \"0x951bacc6a38db1bd1459083a51f35f0bdabbc6bf86a9409831751ad6c52f5b2c\",\n        \"address\": \"0x71EAD6E8FC3331da65191BCbdD3BE81F04EAa3CA\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 33,\n        \"blockHash\": \"0x8a88589aebf9501032d27ac9dafceb6efef4c8a102b4098baf1bd165eef873fa\"\n      }\n    ],\n    \"blockNumber\": 6681016,\n    \"cumulativeGasUsed\": \"2469446\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n    \"0x8FF8F6698Bd7bafFaD97D23ed46c5dD0b515B0BA\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"582bda84e77341f31e48e553d6955fd7\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/VenmoRegistrationProcessor.sol\\\":\\\"VenmoRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/VenmoRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"./BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"../interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        view\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x645b79a0384d43f2377b4eef122c3768c74891a81afff855f1cc48840b538c9c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\\\n    \\\\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\\\n    \\\\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\\\n    \\\\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\\\n    \\\\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\\\n    \\\\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xe75e7981040431d65fa54187d75ef19b77cded328e050458c5921256be2d6d2d\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001b5e38038062001b5e833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516117b7620003a76000396000818160f4015261022b01526117b76000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220c37304a5850f0d98f58c41f8f0556acf17acc66166d0212dec997b906584df2364736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220c37304a5850f0d98f58c41f8f0556acf17acc66166d0212dec997b906584df2364736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1403,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)1958\"\n      },\n      {\n        \"astId\": 1406,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)1973\"\n      },\n      {\n        \"astId\": 1408,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)1958\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)1973\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/VenmoRegistrationProcessorV2.json",
    "content": "{\n  \"address\": \"0x209E0fa47FAbdb656B8b4bb8fBA01322e9d5cf00\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessorV2.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x6d08479f2164f9e9e9d3f997e21542b6906c5d2bdb8b87c152062d63dc3130a3\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x209E0fa47FAbdb656B8b4bb8fBA01322e9d5cf00\",\n    \"transactionIndex\": 34,\n    \"gasUsed\": \"1572947\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000001000000020000000000000000000000000000000000000000000000000000000000200000000\",\n    \"blockHash\": \"0x0ce547ce43d0534e5bb30300b6ebb8fd6c5b9afbc58522f96f3b3efee745e29c\",\n    \"transactionHash\": \"0x6d08479f2164f9e9e9d3f997e21542b6906c5d2bdb8b87c152062d63dc3130a3\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 34,\n        \"blockNumber\": 16917845,\n        \"transactionHash\": \"0x6d08479f2164f9e9e9d3f997e21542b6906c5d2bdb8b87c152062d63dc3130a3\",\n        \"address\": \"0x209E0fa47FAbdb656B8b4bb8fBA01322e9d5cf00\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 98,\n        \"blockHash\": \"0x0ce547ce43d0534e5bb30300b6ebb8fd6c5b9afbc58522f96f3b3efee745e29c\"\n      }\n    ],\n    \"blockNumber\": 16917845,\n    \"cumulativeGasUsed\": \"7443386\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D\",\n    \"0xc7350FFc8d7e92Bc4cD116A09b3D36121144061b\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"venmo@venmo.com\",\n    \"0\"\n  ],\n  \"numDeployments\": 3,\n  \"solcInputHash\": \"3ead3a1930264a5f1428c2beccc481e4\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessorV2.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":\\\"VenmoRegistrationProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _venmoMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x96fed71c2e264aaec9a1bcaaa6ae0b497742b6cba06f2e2c76715815d8d9e755\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 16692827623879808830126666424117838150546424161010311559130132272860078100250;\\\\n    uint256 constant deltax2 = 10427071116080203280483990720065140241625477298313711514843941053378169062748;\\\\n    uint256 constant deltay1 = 12292291730534257963793035250750833013505862587513324721305952905575695195722;\\\\n    uint256 constant deltay2 = 20744227296603881754617447489692206687227195961073977292626564883622660146422;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 8444387327591820163253359883706304250001395835708102283881672029412593968774;\\\\n    uint256 constant IC0y = 277567402350001170949287541204029095267467381858853916455216632597839881894;\\\\n    \\\\n    uint256 constant IC1x = 11766018000598374647690511651127745003630346152255765679463620118729063279220;\\\\n    uint256 constant IC1y = 9973870620290232174118930849612458053973396098852917252709131237691777167431;\\\\n    \\\\n    uint256 constant IC2x = 21007152236406284962452665998326532111064818140624217664323424373713986554835;\\\\n    uint256 constant IC2y = 21775424933265972488601591944473690558387975377218817711132857025038427581344;\\\\n    \\\\n    uint256 constant IC3x = 19548332954070589452554863336717712265670681575029463650291986455368503640194;\\\\n    uint256 constant IC3y = 9885572105525346384114396000793852863725331019928798599079916138124811450063;\\\\n    \\\\n    uint256 constant IC4x = 20459688676260758193620894047864540995062748169615148342851161008796903469478;\\\\n    uint256 constant IC4y = 7185096966400904659568958817597117358528438755253953902329001546341542579806;\\\\n    \\\\n    uint256 constant IC5x = 15566588852465957839914470257479783208753427872712540953155019219989274639291;\\\\n    uint256 constant IC5y = 13117341851862511824800803143692229606087651943401230287864971446454834743578;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xff9780d09b9ca02c5ffe9a87891c78e8248d0c7a3529fc60a5a19dc26c6ab0e3\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001d3c38038062001d3c83398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611984620003b86000396000818161010a015261026801526119846000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d2565b61025b565b604051908152602001610140565b61017d6101783660046113eb565b6104bd565b6040519015158152602001610140565b61017d61019b366004611415565b610531565b61015c600781565b6101b0610b05565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113eb565b610b19565b60025461012c906001600160a01b031681565b610204610b26565b604051610140919061149f565b610204610bb4565b6101b06102273660046114e7565b610c46565b61015c60045481565b6101b06102433660046114e7565b610c70565b6101b0610256366004611521565b610ce6565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fc565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162d565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cfe565b905060036040516104089190611699565b604051809103902081604051602001610421919061170f565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172b565b60405160208183030381529060405280519060200120610dd9565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162d565b92915050565b6000610a93565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f12ab5a9624956b76265fc0eec1d900b529add7b70792dbf4e5a843dd604b268685527e9d18fb29076cc91333c58ed5efb1c16e4c4895b9f4163f7d1b3f7c8d4026a660208601526000608086018661067387357f160d02be8268c1b255c0a0ebde2da936232ed0e153d6f8996f1defac51f930477f1a0354875e82d8f0ac2ac8aeb2dd4fc16d0da2df59f5071140d037af419e2a748461056c565b6106c360208801357f30247428f688b9e3e1d9a0b69811eac6c928394e70e275120108106592076ba07f2e71a076d6490c2f15b995d8b68ad3a0bfa3eb68a58fa33df69c0cfc955a8bd38461056c565b61071360408801357f15db0918919bf88282f6a317b654c06195e674b6d4d833681dab4bd774d036cf7f2b37f6e04a0bca3b2cdcaa0a9f8c2d544a3c5b360d4874c9c1894c59225bc0828461056c565b61076360608801357f0fe29eea9c50213502ef28c871f902b18884958f4eb0596758a1f8389a9cce5e7f2d3bc5feca96b1abbee7368fbcb0ade12a856a5785d8fc3cfb0ac8215850f1a68461056c565b6107b360808801357f1d002702c6a69936e861d6e2a0d8e2ac85847afea1277294beebdb36af9cc91a7f226a60872afad35dabefcc99fd4f84eb93add0df114af28147b4dd2770793bbb8461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f24e7ce3cf2d75f0b3bc44ddeeceef45d789f7c66da38ae223ef2eed52d894f1a6102808201527f170d835b2c98451e8b4e152ee67a3ceda06bbed8e6c68adc4a5c6f4342fec55c6102a08201527f1b2d30c8edee55fa0308f573fe5d1737f2e76ae12c5263f338e3b68e62911e4a6102c08201527f2ddcd10acc578091831b7e1a6edb36fb628c81b530513c55ffba19948e2004f66102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aab6000840135610538565b610ab86020840135610538565b610ac56040840135610538565b610ad26060840135610538565b610adf6080840135610538565b610aec60a0840135610538565b610af9818486888a6105d7565b90508060005260206000f35b610b0d610eed565b610b176000610f47565b565b610b21610eed565b600455565b60038054610b3390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f90611665565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b505050505081565b606060038054610bc390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef90611665565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b610c4e610eed565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c78610eed565b6001600160a01b038116610cdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f47565b610cee610eed565b6003610cfa82826117b2565b5050565b60606000610d0c8484611888565b60ff1667ffffffffffffffff811115610d2757610d2761150b565b604051908082528060200260200182016040528015610d50578160200160208202803683370190505b50905060ff84165b8360ff16811015610db557858160058110610d7557610d7561164f565b602002013582610d8860ff8816846118a1565b81518110610d9857610d9861164f565b602090810291909101015280610dad816118b4565b915050610d58565b50610dd060078251610dc791906118cd565b82906007610f97565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061162d565b15610e935760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610ed957600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610fa991906118cd565b67ffffffffffffffff811115610fc157610fc161150b565b6040519080825280601f01601f191660200182016040528015610feb576020820181803683370190505b5090506000805b87518161ffff1610156111a2576000888261ffff16815181106110175761101761164f565b6020026020010151905060008767ffffffffffffffff81111561103c5761103c61150b565b604051908082528060200260200182016040528015611065578160200160208202803683370190505b50905060005b888110156110b75761107e8160086118cd565b83901c8282815181106110935761109361164f565b60ff90921660209283029190910190910152806110af816118b4565b91505061106b565b5060005b8881101561118c5760008282815181106110d7576110d761164f565b602002602001015160ff1690508060001461114f578060f81b8787815181106111025761110261164f565b60200101906001600160f81b031916908160001a90535085611123816118b4565b965061113290506002896118e4565b60ff1660000361114a57611147600189611914565b97505b611172565b61115a6002896118e4565b60ff166001036111725761116f600189611914565b97505b5060089290921c9180611184816118b4565b9150506110bb565b505050808061119a9061192d565b915050610ff2565b5060018360ff1610156112435760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b15760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bc836112c8565b98975050505050505050565b8051606090829060005b825181101561131d578281815181106112ed576112ed61164f565b01602001516001600160f81b03191660000361130b5780915061131d565b80611315816118b4565b9150506112d2565b5060008167ffffffffffffffff8111156113395761133961150b565b6040519080825280601f01601f191660200182016040528015611363576020820181803683370190505b50905060005b828110156113c9578381815181106113835761138361164f565b602001015160f81c60f81b8282815181106113a0576113a061164f565b60200101906001600160f81b031916908160001a905350806113c1816118b4565b915050611369565b50949350505050565b60006101a082840312156113e557600080fd5b50919050565b6000602082840312156113fd57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142d57600080fd5b6114378787611404565b945060c086018781111561144a57600080fd5b60408701945061145a8882611404565b93505086818701111561146c57600080fd5b50929591945092610100019150565b60005b8381101561149657818101518382015260200161147e565b50506000910152565b60208152600082518060208401526114be81604085016020870161147b565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114f957600080fd5b8135611504816114d2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153357600080fd5b813567ffffffffffffffff8082111561154b57600080fd5b818401915084601f83011261155f57600080fd5b8135818111156115715761157161150b565b604051601f8201601f19908116603f011681019083821181831017156115995761159961150b565b816040528281528760208487010111156115b257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f6576040808386379384019391909101906001016115d6565b50505050565b6101a08101604086833761161360408301866115d2565b60408460c084013760a08361010084013795945050505050565b60006020828403121561163f57600080fd5b8151801515811461150457600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167957607f821691505b6020821081036113e557634e487b7160e01b600052602260045260246000fd5b60008083546116a781611665565b600182811680156116bf57600181146116d457611703565b60ff1984168752821515830287019450611703565b8760005260208060002060005b858110156116fa5781548a8201529084019082016116e1565b50505082870194505b50929695505050505050565b6000825161172181846020870161147b565b9190910192915050565b6101a08101604083833761174560408301604085016115d2565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ad57600081815260208120601f850160051c8101602086101561178a5750805b601f850160051c820191505b818110156117a957828155600101611796565b5050505b505050565b815167ffffffffffffffff8111156117cc576117cc61150b565b6117e0816117da8454611665565b84611763565b602080601f83116001811461181557600084156117fd5750858301515b600019600386901b1c1916600185901b1785556117a9565b600085815260208120601f198616915b8281101561184457888601518255948401946001909101908401611825565b50858210156118625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611872565b8181038181111561052b5761052b611872565b6000600182016118c6576118c6611872565b5060010190565b808202811582820484141761052b5761052b611872565b600060ff83168061190557634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611872565b600061ffff80831681810361194457611944611872565b600101939250505056fea2646970667358221220d6515d1a8d86d1f4115f4f3d893789e2b8693c613cb1473c8a8ae536457a746164736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d2565b61025b565b604051908152602001610140565b61017d6101783660046113eb565b6104bd565b6040519015158152602001610140565b61017d61019b366004611415565b610531565b61015c600781565b6101b0610b05565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113eb565b610b19565b60025461012c906001600160a01b031681565b610204610b26565b604051610140919061149f565b610204610bb4565b6101b06102273660046114e7565b610c46565b61015c60045481565b6101b06102433660046114e7565b610c70565b6101b0610256366004611521565b610ce6565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fc565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162d565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cfe565b905060036040516104089190611699565b604051809103902081604051602001610421919061170f565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172b565b60405160208183030381529060405280519060200120610dd9565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162d565b92915050565b6000610a93565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f12ab5a9624956b76265fc0eec1d900b529add7b70792dbf4e5a843dd604b268685527e9d18fb29076cc91333c58ed5efb1c16e4c4895b9f4163f7d1b3f7c8d4026a660208601526000608086018661067387357f160d02be8268c1b255c0a0ebde2da936232ed0e153d6f8996f1defac51f930477f1a0354875e82d8f0ac2ac8aeb2dd4fc16d0da2df59f5071140d037af419e2a748461056c565b6106c360208801357f30247428f688b9e3e1d9a0b69811eac6c928394e70e275120108106592076ba07f2e71a076d6490c2f15b995d8b68ad3a0bfa3eb68a58fa33df69c0cfc955a8bd38461056c565b61071360408801357f15db0918919bf88282f6a317b654c06195e674b6d4d833681dab4bd774d036cf7f2b37f6e04a0bca3b2cdcaa0a9f8c2d544a3c5b360d4874c9c1894c59225bc0828461056c565b61076360608801357f0fe29eea9c50213502ef28c871f902b18884958f4eb0596758a1f8389a9cce5e7f2d3bc5feca96b1abbee7368fbcb0ade12a856a5785d8fc3cfb0ac8215850f1a68461056c565b6107b360808801357f1d002702c6a69936e861d6e2a0d8e2ac85847afea1277294beebdb36af9cc91a7f226a60872afad35dabefcc99fd4f84eb93add0df114af28147b4dd2770793bbb8461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f24e7ce3cf2d75f0b3bc44ddeeceef45d789f7c66da38ae223ef2eed52d894f1a6102808201527f170d835b2c98451e8b4e152ee67a3ceda06bbed8e6c68adc4a5c6f4342fec55c6102a08201527f1b2d30c8edee55fa0308f573fe5d1737f2e76ae12c5263f338e3b68e62911e4a6102c08201527f2ddcd10acc578091831b7e1a6edb36fb628c81b530513c55ffba19948e2004f66102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aab6000840135610538565b610ab86020840135610538565b610ac56040840135610538565b610ad26060840135610538565b610adf6080840135610538565b610aec60a0840135610538565b610af9818486888a6105d7565b90508060005260206000f35b610b0d610eed565b610b176000610f47565b565b610b21610eed565b600455565b60038054610b3390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f90611665565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b505050505081565b606060038054610bc390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef90611665565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b610c4e610eed565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c78610eed565b6001600160a01b038116610cdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f47565b610cee610eed565b6003610cfa82826117b2565b5050565b60606000610d0c8484611888565b60ff1667ffffffffffffffff811115610d2757610d2761150b565b604051908082528060200260200182016040528015610d50578160200160208202803683370190505b50905060ff84165b8360ff16811015610db557858160058110610d7557610d7561164f565b602002013582610d8860ff8816846118a1565b81518110610d9857610d9861164f565b602090810291909101015280610dad816118b4565b915050610d58565b50610dd060078251610dc791906118cd565b82906007610f97565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061162d565b15610e935760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610ed957600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610fa991906118cd565b67ffffffffffffffff811115610fc157610fc161150b565b6040519080825280601f01601f191660200182016040528015610feb576020820181803683370190505b5090506000805b87518161ffff1610156111a2576000888261ffff16815181106110175761101761164f565b6020026020010151905060008767ffffffffffffffff81111561103c5761103c61150b565b604051908082528060200260200182016040528015611065578160200160208202803683370190505b50905060005b888110156110b75761107e8160086118cd565b83901c8282815181106110935761109361164f565b60ff90921660209283029190910190910152806110af816118b4565b91505061106b565b5060005b8881101561118c5760008282815181106110d7576110d761164f565b602002602001015160ff1690508060001461114f578060f81b8787815181106111025761110261164f565b60200101906001600160f81b031916908160001a90535085611123816118b4565b965061113290506002896118e4565b60ff1660000361114a57611147600189611914565b97505b611172565b61115a6002896118e4565b60ff166001036111725761116f600189611914565b97505b5060089290921c9180611184816118b4565b9150506110bb565b505050808061119a9061192d565b915050610ff2565b5060018360ff1610156112435760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b15760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bc836112c8565b98975050505050505050565b8051606090829060005b825181101561131d578281815181106112ed576112ed61164f565b01602001516001600160f81b03191660000361130b5780915061131d565b80611315816118b4565b9150506112d2565b5060008167ffffffffffffffff8111156113395761133961150b565b6040519080825280601f01601f191660200182016040528015611363576020820181803683370190505b50905060005b828110156113c9578381815181106113835761138361164f565b602001015160f81c60f81b8282815181106113a0576113a061164f565b60200101906001600160f81b031916908160001a905350806113c1816118b4565b915050611369565b50949350505050565b60006101a082840312156113e557600080fd5b50919050565b6000602082840312156113fd57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142d57600080fd5b6114378787611404565b945060c086018781111561144a57600080fd5b60408701945061145a8882611404565b93505086818701111561146c57600080fd5b50929591945092610100019150565b60005b8381101561149657818101518382015260200161147e565b50506000910152565b60208152600082518060208401526114be81604085016020870161147b565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114f957600080fd5b8135611504816114d2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153357600080fd5b813567ffffffffffffffff8082111561154b57600080fd5b818401915084601f83011261155f57600080fd5b8135818111156115715761157161150b565b604051601f8201601f19908116603f011681019083821181831017156115995761159961150b565b816040528281528760208487010111156115b257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f6576040808386379384019391909101906001016115d6565b50505050565b6101a08101604086833761161360408301866115d2565b60408460c084013760a08361010084013795945050505050565b60006020828403121561163f57600080fd5b8151801515811461150457600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167957607f821691505b6020821081036113e557634e487b7160e01b600052602260045260246000fd5b60008083546116a781611665565b600182811680156116bf57600181146116d457611703565b60ff1984168752821515830287019450611703565b8760005260208060002060005b858110156116fa5781548a8201529084019082016116e1565b50505082870194505b50929695505050505050565b6000825161172181846020870161147b565b9190910192915050565b6101a08101604083833761174560408301604085016115d2565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ad57600081815260208120601f850160051c8101602086101561178a5750805b601f850160051c820191505b818110156117a957828155600101611796565b5050505b505050565b815167ffffffffffffffff8111156117cc576117cc61150b565b6117e0816117da8454611665565b84611763565b602080601f83116001811461181557600084156117fd5750858301515b600019600386901b1c1916600185901b1785556117a9565b600085815260208120601f198616915b8281101561184457888601518255948401946001909101908401611825565b50858210156118625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611872565b8181038181111561052b5761052b611872565b6000600182016118c6576118c6611872565b5060010190565b808202811582820484141761052b5761052b611872565b600060ff83168061190557634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611872565b600061ffff80831681810361194457611944611872565b600101939250505056fea2646970667358221220d6515d1a8d86d1f4115f4f3d893789e2b8693c613cb1473c8a8ae536457a746164736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5263,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)5626\"\n      },\n      {\n        \"astId\": 5266,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)5831\"\n      },\n      {\n        \"astId\": 5268,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 5270,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)5626\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)5831\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/VenmoSendProcessor.json",
    "content": "{\n  \"address\": \"0x9011fC66C34546511cf1e514F248fB98Af95b96d\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd00b0bd0167724d27e5c95dd6dafc775e526c323e22ac5122252221271cb989a\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x9011fC66C34546511cf1e514F248fB98Af95b96d\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"1858638\",\n    \"logsBloom\": \"0x00000000000000000000000010000000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000008000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x1ec620471e8c4cb2cb9eaba3be496c0bd0d9d7b0f502a2e17d9151c5c6147d16\",\n    \"transactionHash\": \"0xd00b0bd0167724d27e5c95dd6dafc775e526c323e22ac5122252221271cb989a\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 4,\n        \"blockNumber\": 6681098,\n        \"transactionHash\": \"0xd00b0bd0167724d27e5c95dd6dafc775e526c323e22ac5122252221271cb989a\",\n        \"address\": \"0x9011fC66C34546511cf1e514F248fB98Af95b96d\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 9,\n        \"blockHash\": \"0x1ec620471e8c4cb2cb9eaba3be496c0bd0d9d7b0f502a2e17d9151c5c6147d16\"\n      }\n    ],\n    \"blockNumber\": 6681098,\n    \"cumulativeGasUsed\": \"2279804\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n    \"0x8FF8F6698Bd7bafFaD97D23ed46c5dD0b515B0BA\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"582bda84e77341f31e48e553d6955fd7\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/VenmoSendProcessor.sol\\\":\\\"VenmoSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa2162361ad63f6e15153b6c989746c3a21f95e4bb2ae9ee9806421413e2157c9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/VenmoSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"./BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../verifiers/venmo_send_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70d57e9a07e2db041569362549e16a2f53a08a63a7ff92aaee69d1f71c0f5569\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\\\n    \\\\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\\\n    \\\\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\\\n    \\\\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\\\n    \\\\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\\\n    \\\\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\\\n    \\\\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\\\n    \\\\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\\\n    \\\\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\\\n    \\\\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\\\n    \\\\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\\\n    \\\\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\\\n    \\\\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xb757585b2fbeabdb975afef07753da27f657d8d34bd62130109e2d0bf28e0e63\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b506040516200226438038062002264833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611ebd620003a76000396000818160f40152610ad30152611ebd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea26469706673582212202c7aa89ec8dfecaa3afd18cf0ffdf3880e5900eeff3f10f9d4ce6d0193d3213b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea26469706673582212202c7aa89ec8dfecaa3afd18cf0ffdf3880e5900eeff3f10f9d4ce6d0193d3213b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1403,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)1958\"\n      },\n      {\n        \"astId\": 1406,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)1973\"\n      },\n      {\n        \"astId\": 1408,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)1958\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)1973\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/VenmoSendProcessorV2.json",
    "content": "{\n  \"address\": \"0x170Cfa26a1fC6868dC45B251e7a482188A84A1d4\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x67231d5c829e818b818621da9fd8cb71b48fdfdd91f5eb75fe57f3bade0607ec\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x170Cfa26a1fC6868dC45B251e7a482188A84A1d4\",\n    \"transactionIndex\": 43,\n    \"gasUsed\": \"1903044\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000001000000000000000000020000402000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000200000000000000000000000000000000\",\n    \"blockHash\": \"0x7a7d1ab418b4c907c718903a9bc2ce1f1bc684367381ce3165c2b56f35b3ef85\",\n    \"transactionHash\": \"0x67231d5c829e818b818621da9fd8cb71b48fdfdd91f5eb75fe57f3bade0607ec\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 43,\n        \"blockNumber\": 16917848,\n        \"transactionHash\": \"0x67231d5c829e818b818621da9fd8cb71b48fdfdd91f5eb75fe57f3bade0607ec\",\n        \"address\": \"0x170Cfa26a1fC6868dC45B251e7a482188A84A1d4\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 162,\n        \"blockHash\": \"0x7a7d1ab418b4c907c718903a9bc2ce1f1bc684367381ce3165c2b56f35b3ef85\"\n      }\n    ],\n    \"blockNumber\": 16917848,\n    \"cumulativeGasUsed\": \"9230962\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D\",\n    \"0xc7350FFc8d7e92Bc4cD116A09b3D36121144061b\",\n    \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n    \"venmo@venmo.com\",\n    \"30\"\n  ],\n  \"numDeployments\": 3,\n  \"solcInputHash\": \"3ead3a1930264a5f1428c2beccc481e4\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":\\\"VenmoSendProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_send_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _venmoMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32dac49aa74b2b58ae06f85454adfcef11355c507f18c79ffa57cc0ca7a62ed0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 5710629204359318057562498392234897061794505526378244639613545081979421872324;\\\\n    uint256 constant deltax2 = 990656993167988662763349194790300993619547607285680693352122387169954518876;\\\\n    uint256 constant deltay1 = 716219014029453087010203485855017030343957665868140907538168510860723855404;\\\\n    uint256 constant deltay2 = 15567073068481787678459322691280596720950847803967120869528969231388542383007;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 3627016935680980991432758845809120437097698562642321662019774941798047598180;\\\\n    uint256 constant IC0y = 16742737478481137559777273336649173908087975045426893354724005348183061433359;\\\\n    \\\\n    uint256 constant IC1x = 1454889468509402624274228018232533000837827531552657849863656594197598947498;\\\\n    uint256 constant IC1y = 21114519264105667881501109217530601184286085076749464919673271702318856586869;\\\\n    \\\\n    uint256 constant IC2x = 15214926606177919954497590021391485480795904680262796779354958872907701613369;\\\\n    uint256 constant IC2y = 3436701283643568631088610954415601741399004409005447167420424641912447528939;\\\\n    \\\\n    uint256 constant IC3x = 4535577697185795754970511618264939460763831131849914629687538976336257649268;\\\\n    uint256 constant IC3y = 7758558535557743288212279084775965030097651866120453423634300893790511261820;\\\\n    \\\\n    uint256 constant IC4x = 874294953994422297831973347765527399192587644625708091600444498339317231142;\\\\n    uint256 constant IC4y = 987062449590966973283739390864507348641413150099442677760662058272414279274;\\\\n    \\\\n    uint256 constant IC5x = 21093306057635441117249393023592254587788813974241613308459037792013982125271;\\\\n    uint256 constant IC5y = 2674227458751675036151996130714025181946977717008550031124827209614433661640;\\\\n    \\\\n    uint256 constant IC6x = 13846687013867984054231693830774779045583700534400211257658890706223553634739;\\\\n    uint256 constant IC6y = 8017285138819571587063238313118652954321504644123983130004849545264828919081;\\\\n    \\\\n    uint256 constant IC7x = 13134004890952141957850059371765174729898824494756098133509785273144965229605;\\\\n    uint256 constant IC7y = 19833383650616654544301917274181853787895876513168493371626228893058581160277;\\\\n    \\\\n    uint256 constant IC8x = 15730855678085463666228938279082107543444904323060443712618683292548728266981;\\\\n    uint256 constant IC8y = 11187003173972315212472857297424367154976035201682387760241185052675631112914;\\\\n    \\\\n    uint256 constant IC9x = 19431007015983296833648365920726396734910027676221391642968597625199383752634;\\\\n    uint256 constant IC9y = 21132440606561643161647678729377817341013518219983716149257194049459184921050;\\\\n    \\\\n    uint256 constant IC10x = 4559717915456495626304866642697317683057747436742022494016974327403606371979;\\\\n    uint256 constant IC10y = 11478380993372530002009436682140297146781606321299572933211280870931334446617;\\\\n    \\\\n    uint256 constant IC11x = 16525805622865173604160997674689687443990633252176419982940261013647563901344;\\\\n    uint256 constant IC11y = 792201218354373970098710160330509619168590675536085985581042389294282406443;\\\\n    \\\\n    uint256 constant IC12x = 10525116069038722935367461628431297752051968830490923775813610986261326824582;\\\\n    uint256 constant IC12y = 10970802876973329565857167947893820731407652682848506683295471907792738767120;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x1ddacf233eeb13eaeaac81146d4f8b3421d8724ffdb00e3fbf439c34c479373c\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b50604051620022d7380380620022d783398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611f1f620003b86000396000818161010a0152610b850152611f1f6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610241578063dbac582114610254578063f2fde38b1461025d578063f6c7226b1461027057600080fd5b8063b2a3fda4146101fe578063b870676c14610211578063c0d05fed14610224578063ced1e9781461023957600080fd5b80638cbac0fa116100d35780638cbac0fa1461018c5780638da5cb5b1461019f5780638fe0ab8e146101b0578063a8ef333f146101eb57600080fd5b806315d276e11461010557806319d09152146101495780633d0c9cc41461016c578063715018a614610182575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046118b7565b610283565b6040519015158152602001610140565b610174600781565b604051908152602001610140565b61018a6102f7565b005b61015c61019a3660046118e1565b61030b565b6000546001600160a01b031661012c565b6101c36101be366004611947565b610b74565b604080519586526020860194909452928401919091526060830152608082015260a001610140565b60015461012c906001600160a01b031681565b61018a61020c3660046118b7565b610e15565b60025461012c906001600160a01b031681565b61022c610e22565b6040516101409190611984565b61022c610eb0565b61018a61024f3660046119cc565b610f42565b61017460045481565b61018a61026b3660046119cc565b610f6c565b61018a61027e3660046119ff565b610fe2565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190611ab0565b92915050565b6102ff610ffa565b6103096000611054565b565b6000610aa2565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610343576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610379576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103aa576000805260206000f35b5050505050565b7f0804d19f43c6e0aa984ef2d1e375b431a8fe0835289c656e6bba9441f166c66485527f25040db85863a4bb8731ec62d2c93ad23ff5aeba9f07860c47e85bd014a20c0f60208601526000608086018661044e87357f2eae64f73b7738369e069525e66cfe0748a4ff7a2278be1c2ff348129e5cc6757f03377031a6d2d0e51c3ba8115124ff36fbec49d2cf074f1317f2b0797133c8aa84610346565b61049e60208801357f07991a9f64c6f476627d8224834870d0468de2a4dda39e3f640486598d9d6feb7f21a357e17fb9c4a2035b9157f3ee366a49b2ddf8f741b8bc295664ce3d74f33984610346565b6104ee60408801357f1127304267d4dc4109446b0bc64adf5d2fc1b09e30d6bb5172b9e6237793687c7f0a070bc6e9c8f2337f5e496e80a7dfb2f7d8120e051f6e7a82431cd477768a7484610346565b61053e60608801357f022ea8551762fb0d484eaf5dbaa9ebfc61570969e16c50553fc5256593dca66a7f01eed55a356e1365ecafc63de65edc7ed13717958ea0c4749452d7e393812e2684610346565b61058e60808801357f05e98f216225c8fd66611cf79935b4df8b4e1c1fffb6ede6384de90c66eb32c87f2ea2635dac52a7d0d21dfd61ef9bb70c5e6c969cfa3a53de181fd4ea568c4cd784610346565b6105de60a08801357f11b99f617cbc07d59b321ae93d4fb398afc90fa19aea298eb111c4f62c8e2d297f1e9cf276628411884bf183a85eeccacbb63bf25d35a6d4554f87f4efc6cce1b384610346565b61062e60c08801357f2bd94c1e4213428e3647ba827fb2e473dd95460a9b8b0879693fb8c0a9b061557f1d0995553f2d35c98c8945170ee69c13085388df1221105c8ef10e7086426c2584610346565b61067e60e08801357f18bb9e91ce7be822a53d86b569077a4a12059e6923182dd5813951c1c6de62d27f22c7594a5e07dd0ac0bcfd42e3865beeb3b8996939e882e48c172393ec06a0e584610346565b6106cf6101008801357f2eb8899ac4d9f3c81edff23c8e14363a0e8998432c3e72bd886cd5e7fe16e9da7f2af58f6b609a74fe1a52d27026ef1fd8e719145496bc31704cc23c8144772fba84610346565b6107206101208801357f1960888dce35e4417f924cafc664f31501a7a0e0bb584179b7d0de2402783e197f0a14b5795fc594ff84bacee8fa1e316c5cf9b9dfff5f16ed5d4c8cd1d7e2ee8b84610346565b6107716101408801357f01c05eb851284bf3d8d069756a0a26c55d0b53ccd29b1be951cda7061c8f7a2b7f248946469d2ca9a1b04005223ad17489f4a081ae906286952ac7ebb5308349a084610346565b6107c26101608801357f1841411f17ad3fbb997447e9f644114194d820241b5ad22e424a8e79340ad1107f1745012c998ad198581a529c8ad6dacca6372bf1b865978299698c2716fb848684610346565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0ca01a01b0e88539a2eb8751fa5a97c62e0c0d170309c2a63cdbf4d824bc50c46102808201527f0230b1261f6ff569ba908e8b64b3457d4457f211379daf0d8bdf40230ed4575c6102a08201527f01955d97b88498fecafedeaacfddd0d70ef179ff31d1a88f9ea74d1e9f45a02c6102c08201527f226aa6afbcf630c798ca6ef7896ed4b17694d0ec43e17e74fc5a68b68e9a339f6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aba6000840135610312565b610ac76020840135610312565b610ad46040840135610312565b610ae16060840135610312565b610aee6080840135610312565b610afb60a0840135610312565b610b0860c0840135610312565b610b1560e0840135610312565b610b23610100840135610312565b610b31610120840135610312565b610b3f610140840135610312565b610b4d610160840135610312565b610b5b610180840135610312565b610b68818486888a6103b1565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf75760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610c2a918a919082019060c0830190610100840190600401611ad2565b602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611ab0565b610ca75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bee565b610cb5610100870135610283565b610d015760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bee565b6000610d148761010001600160046110a4565b90506003604051610d259190611b69565b604051809103902081604051602001610d3e9190611bdf565b6040516020818303038152906040528051906020012014610da15760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bee565b610dbd6006610db78961010001600460066110a4565b9061117f565b9550600454610dd86000610db78a61010001600660086110a4565b610de29190611c11565b945061020087013593506102208701359250610e02610240880135611197565b5093959294919350916102609091013590565b610e1d610ffa565b600455565b60038054610e2f90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90611b35565b8015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b505050505081565b606060038054610ebf90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb90611b35565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b610f4a610ffa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f74610ffa565b6001600160a01b038116610fd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bee565b61034381611054565b610fea610ffa565b6003610ff68282611c73565b5050565b6000546001600160a01b031633146103095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110b28484611d33565b60ff1667ffffffffffffffff8111156110cd576110cd6119e9565b6040519080825280602002602001820160405280156110f6578160200160208202803683370190505b50905060ff84165b8360ff1681101561115b578581600c811061111b5761111b611b1f565b60200201358261112e60ff881684611d4c565b8151811061113e5761113e611b1f565b60209081029190910101528061115381611d5f565b9150506110fe565b506111766007825161116d9190611d78565b829060076112ab565b95945050505050565b600061119083601760f91b846115dc565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190611ab0565b156112515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bee565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561129757600080fd5b505af11580156103aa573d6000803e3d6000fd5b60606000808386516112bd9190611d78565b67ffffffffffffffff8111156112d5576112d56119e9565b6040519080825280601f01601f1916602001820160405280156112ff576020820181803683370190505b5090506000805b87518161ffff1610156114b6576000888261ffff168151811061132b5761132b611b1f565b6020026020010151905060008767ffffffffffffffff811115611350576113506119e9565b604051908082528060200260200182016040528015611379578160200160208202803683370190505b50905060005b888110156113cb57611392816008611d78565b83901c8282815181106113a7576113a7611b1f565b60ff90921660209283029190910190910152806113c381611d5f565b91505061137f565b5060005b888110156114a05760008282815181106113eb576113eb611b1f565b602002602001015160ff16905080600014611463578060f81b87878151811061141657611416611b1f565b60200101906001600160f81b031916908160001a9053508561143781611d5f565b96506114469050600289611d8f565b60ff1660000361145e5761145b600189611dbf565b97505b611486565b61146e600289611d8f565b60ff1660010361148657611483600189611dbf565b97505b5060089290921c918061149881611d5f565b9150506113cf565b50505080806114ae90611dd8565b915050611306565b5060018360ff1610156115575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bee565b858111156115c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bee565b60006115d0836117ad565b98975050505050505050565b600083818080805b845181101561173257603060f81b85828151811061160457611604611b1f565b01602001516001600160f81b031916108015906116455750603960f81b85828151811061163357611633611b1f565b01602001516001600160f81b03191611155b1561168857603085828151811061165e5761165e611b1f565b0160200151611670919060f81c611d4c565b61167b85600a611d78565b6116859190611c11565b93505b811561169c578261169881611d5f565b9350505b876001600160f81b0319168582815181106116b9576116b9611b1f565b01602001516001600160f81b0319160361172057811561171b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bee565b600191505b8061172a81611d5f565b9150506115e4565b508582111561178e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bee565b6117988287611d4c565b6117a390600a611edd565b6115d09084611d78565b8051606090829060005b8251811015611802578281815181106117d2576117d2611b1f565b01602001516001600160f81b0319166000036117f057809150611802565b806117fa81611d5f565b9150506117b7565b5060008167ffffffffffffffff81111561181e5761181e6119e9565b6040519080825280601f01601f191660200182016040528015611848576020820181803683370190505b50905060005b828110156118ae5783818151811061186857611868611b1f565b602001015160f81c60f81b82828151811061188557611885611b1f565b60200101906001600160f81b031916908160001a905350806118a681611d5f565b91505061184e565b50949350505050565b6000602082840312156118c957600080fd5b5035919050565b80604081018310156102f157600080fd5b6000806000806102808086880312156118f957600080fd5b61190387876118d0565b945060c086018781111561191657600080fd5b60408701945061192688826118d0565b93505086818701111561193857600080fd5b50929591945092610100019150565b6000610280828403121561195a57600080fd5b50919050565b60005b8381101561197b578181015183820152602001611963565b50506000910152565b60208152600082518060208401526119a3816040850160208701611960565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034357600080fd5b6000602082840312156119de57600080fd5b8135611190816119b7565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a1157600080fd5b813567ffffffffffffffff80821115611a2957600080fd5b818401915084601f830112611a3d57600080fd5b813581811115611a4f57611a4f6119e9565b604051601f8201601f19908116603f01168101908382118183101715611a7757611a776119e9565b81604052828152876020848701011115611a9057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611ac257600080fd5b8151801515811461119057600080fd5b61028081016040808784378083018660005b6002811015611b0157838284379183019190830190600101611ae4565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611b4957607f821691505b60208210810361195a57634e487b7160e01b600052602260045260246000fd5b6000808354611b7781611b35565b60018281168015611b8f5760018114611ba457611bd3565b60ff1984168752821515830287019450611bd3565b8760005260208060002060005b85811015611bca5781548a820152908401908201611bb1565b50505082870194505b50929695505050505050565b60008251611bf1818460208701611960565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102f1576102f1611bfb565b601f821115611c6e57600081815260208120601f850160051c81016020861015611c4b5750805b601f850160051c820191505b81811015611c6a57828155600101611c57565b5050505b505050565b815167ffffffffffffffff811115611c8d57611c8d6119e9565b611ca181611c9b8454611b35565b84611c24565b602080601f831160018114611cd65760008415611cbe5750858301515b600019600386901b1c1916600185901b178555611c6a565b600085815260208120601f198616915b82811015611d0557888601518255948401946001909101908401611ce6565b5085821015611d235787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102f1576102f1611bfb565b818103818111156102f1576102f1611bfb565b600060018201611d7157611d71611bfb565b5060010190565b80820281158282048414176102f1576102f1611bfb565b600060ff831680611db057634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102f1576102f1611bfb565b600061ffff808316818103611def57611def611bfb565b6001019392505050565b600181815b80851115611e34578160001904821115611e1a57611e1a611bfb565b80851615611e2757918102915b93841c9390800290611dfe565b509250929050565b600082611e4b575060016102f1565b81611e58575060006102f1565b8160018114611e6e5760028114611e7857611e94565b60019150506102f1565b60ff841115611e8957611e89611bfb565b50506001821b6102f1565b5060208310610133831016604e8410600b8410161715611eb7575081810a6102f1565b611ec18383611df9565b8060001904821115611ed557611ed5611bfb565b029392505050565b60006111908383611e3c56fea26469706673582212200be7e3b9a6eb7de8c23a1e84055a3d9c74d2675fb90c7a9d41d8e516037cec9a64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610241578063dbac582114610254578063f2fde38b1461025d578063f6c7226b1461027057600080fd5b8063b2a3fda4146101fe578063b870676c14610211578063c0d05fed14610224578063ced1e9781461023957600080fd5b80638cbac0fa116100d35780638cbac0fa1461018c5780638da5cb5b1461019f5780638fe0ab8e146101b0578063a8ef333f146101eb57600080fd5b806315d276e11461010557806319d09152146101495780633d0c9cc41461016c578063715018a614610182575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046118b7565b610283565b6040519015158152602001610140565b610174600781565b604051908152602001610140565b61018a6102f7565b005b61015c61019a3660046118e1565b61030b565b6000546001600160a01b031661012c565b6101c36101be366004611947565b610b74565b604080519586526020860194909452928401919091526060830152608082015260a001610140565b60015461012c906001600160a01b031681565b61018a61020c3660046118b7565b610e15565b60025461012c906001600160a01b031681565b61022c610e22565b6040516101409190611984565b61022c610eb0565b61018a61024f3660046119cc565b610f42565b61017460045481565b61018a61026b3660046119cc565b610f6c565b61018a61027e3660046119ff565b610fe2565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190611ab0565b92915050565b6102ff610ffa565b6103096000611054565b565b6000610aa2565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610343576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610379576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103aa576000805260206000f35b5050505050565b7f0804d19f43c6e0aa984ef2d1e375b431a8fe0835289c656e6bba9441f166c66485527f25040db85863a4bb8731ec62d2c93ad23ff5aeba9f07860c47e85bd014a20c0f60208601526000608086018661044e87357f2eae64f73b7738369e069525e66cfe0748a4ff7a2278be1c2ff348129e5cc6757f03377031a6d2d0e51c3ba8115124ff36fbec49d2cf074f1317f2b0797133c8aa84610346565b61049e60208801357f07991a9f64c6f476627d8224834870d0468de2a4dda39e3f640486598d9d6feb7f21a357e17fb9c4a2035b9157f3ee366a49b2ddf8f741b8bc295664ce3d74f33984610346565b6104ee60408801357f1127304267d4dc4109446b0bc64adf5d2fc1b09e30d6bb5172b9e6237793687c7f0a070bc6e9c8f2337f5e496e80a7dfb2f7d8120e051f6e7a82431cd477768a7484610346565b61053e60608801357f022ea8551762fb0d484eaf5dbaa9ebfc61570969e16c50553fc5256593dca66a7f01eed55a356e1365ecafc63de65edc7ed13717958ea0c4749452d7e393812e2684610346565b61058e60808801357f05e98f216225c8fd66611cf79935b4df8b4e1c1fffb6ede6384de90c66eb32c87f2ea2635dac52a7d0d21dfd61ef9bb70c5e6c969cfa3a53de181fd4ea568c4cd784610346565b6105de60a08801357f11b99f617cbc07d59b321ae93d4fb398afc90fa19aea298eb111c4f62c8e2d297f1e9cf276628411884bf183a85eeccacbb63bf25d35a6d4554f87f4efc6cce1b384610346565b61062e60c08801357f2bd94c1e4213428e3647ba827fb2e473dd95460a9b8b0879693fb8c0a9b061557f1d0995553f2d35c98c8945170ee69c13085388df1221105c8ef10e7086426c2584610346565b61067e60e08801357f18bb9e91ce7be822a53d86b569077a4a12059e6923182dd5813951c1c6de62d27f22c7594a5e07dd0ac0bcfd42e3865beeb3b8996939e882e48c172393ec06a0e584610346565b6106cf6101008801357f2eb8899ac4d9f3c81edff23c8e14363a0e8998432c3e72bd886cd5e7fe16e9da7f2af58f6b609a74fe1a52d27026ef1fd8e719145496bc31704cc23c8144772fba84610346565b6107206101208801357f1960888dce35e4417f924cafc664f31501a7a0e0bb584179b7d0de2402783e197f0a14b5795fc594ff84bacee8fa1e316c5cf9b9dfff5f16ed5d4c8cd1d7e2ee8b84610346565b6107716101408801357f01c05eb851284bf3d8d069756a0a26c55d0b53ccd29b1be951cda7061c8f7a2b7f248946469d2ca9a1b04005223ad17489f4a081ae906286952ac7ebb5308349a084610346565b6107c26101608801357f1841411f17ad3fbb997447e9f644114194d820241b5ad22e424a8e79340ad1107f1745012c998ad198581a529c8ad6dacca6372bf1b865978299698c2716fb848684610346565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0ca01a01b0e88539a2eb8751fa5a97c62e0c0d170309c2a63cdbf4d824bc50c46102808201527f0230b1261f6ff569ba908e8b64b3457d4457f211379daf0d8bdf40230ed4575c6102a08201527f01955d97b88498fecafedeaacfddd0d70ef179ff31d1a88f9ea74d1e9f45a02c6102c08201527f226aa6afbcf630c798ca6ef7896ed4b17694d0ec43e17e74fc5a68b68e9a339f6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aba6000840135610312565b610ac76020840135610312565b610ad46040840135610312565b610ae16060840135610312565b610aee6080840135610312565b610afb60a0840135610312565b610b0860c0840135610312565b610b1560e0840135610312565b610b23610100840135610312565b610b31610120840135610312565b610b3f610140840135610312565b610b4d610160840135610312565b610b5b610180840135610312565b610b68818486888a6103b1565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf75760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610c2a918a919082019060c0830190610100840190600401611ad2565b602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611ab0565b610ca75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bee565b610cb5610100870135610283565b610d015760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bee565b6000610d148761010001600160046110a4565b90506003604051610d259190611b69565b604051809103902081604051602001610d3e9190611bdf565b6040516020818303038152906040528051906020012014610da15760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bee565b610dbd6006610db78961010001600460066110a4565b9061117f565b9550600454610dd86000610db78a61010001600660086110a4565b610de29190611c11565b945061020087013593506102208701359250610e02610240880135611197565b5093959294919350916102609091013590565b610e1d610ffa565b600455565b60038054610e2f90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90611b35565b8015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b505050505081565b606060038054610ebf90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb90611b35565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b610f4a610ffa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f74610ffa565b6001600160a01b038116610fd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bee565b61034381611054565b610fea610ffa565b6003610ff68282611c73565b5050565b6000546001600160a01b031633146103095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110b28484611d33565b60ff1667ffffffffffffffff8111156110cd576110cd6119e9565b6040519080825280602002602001820160405280156110f6578160200160208202803683370190505b50905060ff84165b8360ff1681101561115b578581600c811061111b5761111b611b1f565b60200201358261112e60ff881684611d4c565b8151811061113e5761113e611b1f565b60209081029190910101528061115381611d5f565b9150506110fe565b506111766007825161116d9190611d78565b829060076112ab565b95945050505050565b600061119083601760f91b846115dc565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190611ab0565b156112515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bee565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561129757600080fd5b505af11580156103aa573d6000803e3d6000fd5b60606000808386516112bd9190611d78565b67ffffffffffffffff8111156112d5576112d56119e9565b6040519080825280601f01601f1916602001820160405280156112ff576020820181803683370190505b5090506000805b87518161ffff1610156114b6576000888261ffff168151811061132b5761132b611b1f565b6020026020010151905060008767ffffffffffffffff811115611350576113506119e9565b604051908082528060200260200182016040528015611379578160200160208202803683370190505b50905060005b888110156113cb57611392816008611d78565b83901c8282815181106113a7576113a7611b1f565b60ff90921660209283029190910190910152806113c381611d5f565b91505061137f565b5060005b888110156114a05760008282815181106113eb576113eb611b1f565b602002602001015160ff16905080600014611463578060f81b87878151811061141657611416611b1f565b60200101906001600160f81b031916908160001a9053508561143781611d5f565b96506114469050600289611d8f565b60ff1660000361145e5761145b600189611dbf565b97505b611486565b61146e600289611d8f565b60ff1660010361148657611483600189611dbf565b97505b5060089290921c918061149881611d5f565b9150506113cf565b50505080806114ae90611dd8565b915050611306565b5060018360ff1610156115575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bee565b858111156115c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bee565b60006115d0836117ad565b98975050505050505050565b600083818080805b845181101561173257603060f81b85828151811061160457611604611b1f565b01602001516001600160f81b031916108015906116455750603960f81b85828151811061163357611633611b1f565b01602001516001600160f81b03191611155b1561168857603085828151811061165e5761165e611b1f565b0160200151611670919060f81c611d4c565b61167b85600a611d78565b6116859190611c11565b93505b811561169c578261169881611d5f565b9350505b876001600160f81b0319168582815181106116b9576116b9611b1f565b01602001516001600160f81b0319160361172057811561171b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bee565b600191505b8061172a81611d5f565b9150506115e4565b508582111561178e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bee565b6117988287611d4c565b6117a390600a611edd565b6115d09084611d78565b8051606090829060005b8251811015611802578281815181106117d2576117d2611b1f565b01602001516001600160f81b0319166000036117f057809150611802565b806117fa81611d5f565b9150506117b7565b5060008167ffffffffffffffff81111561181e5761181e6119e9565b6040519080825280601f01601f191660200182016040528015611848576020820181803683370190505b50905060005b828110156118ae5783818151811061186857611868611b1f565b602001015160f81c60f81b82828151811061188557611885611b1f565b60200101906001600160f81b031916908160001a905350806118a681611d5f565b91505061184e565b50949350505050565b6000602082840312156118c957600080fd5b5035919050565b80604081018310156102f157600080fd5b6000806000806102808086880312156118f957600080fd5b61190387876118d0565b945060c086018781111561191657600080fd5b60408701945061192688826118d0565b93505086818701111561193857600080fd5b50929591945092610100019150565b6000610280828403121561195a57600080fd5b50919050565b60005b8381101561197b578181015183820152602001611963565b50506000910152565b60208152600082518060208401526119a3816040850160208701611960565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034357600080fd5b6000602082840312156119de57600080fd5b8135611190816119b7565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a1157600080fd5b813567ffffffffffffffff80821115611a2957600080fd5b818401915084601f830112611a3d57600080fd5b813581811115611a4f57611a4f6119e9565b604051601f8201601f19908116603f01168101908382118183101715611a7757611a776119e9565b81604052828152876020848701011115611a9057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611ac257600080fd5b8151801515811461119057600080fd5b61028081016040808784378083018660005b6002811015611b0157838284379183019190830190600101611ae4565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611b4957607f821691505b60208210810361195a57634e487b7160e01b600052602260045260246000fd5b6000808354611b7781611b35565b60018281168015611b8f5760018114611ba457611bd3565b60ff1984168752821515830287019450611bd3565b8760005260208060002060005b85811015611bca5781548a820152908401908201611bb1565b50505082870194505b50929695505050505050565b60008251611bf1818460208701611960565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102f1576102f1611bfb565b601f821115611c6e57600081815260208120601f850160051c81016020861015611c4b5750805b601f850160051c820191505b81811015611c6a57828155600101611c57565b5050505b505050565b815167ffffffffffffffff811115611c8d57611c8d6119e9565b611ca181611c9b8454611b35565b84611c24565b602080601f831160018114611cd65760008415611cbe5750858301515b600019600386901b1c1916600185901b178555611c6a565b600085815260208120601f198616915b82811015611d0557888601518255948401946001909101908401611ce6565b5085821015611d235787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102f1576102f1611bfb565b818103818111156102f1576102f1611bfb565b600060018201611d7157611d71611bfb565b5060010190565b80820281158282048414176102f1576102f1611bfb565b600060ff831680611db057634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102f1576102f1611bfb565b600061ffff808316818103611def57611def611bfb565b6001019392505050565b600181815b80851115611e34578160001904821115611e1a57611e1a611bfb565b80851615611e2757918102915b93841c9390800290611dfe565b509250929050565b600082611e4b575060016102f1565b81611e58575060006102f1565b8160018114611e6e5760028114611e7857611e94565b60019150506102f1565b60ff841115611e8957611e89611bfb565b50506001821b6102f1565b5060208310610133831016604e8410600b8410161715611eb7575081810a6102f1565b611ec18383611df9565b8060001904821115611ed557611ed5611bfb565b029392505050565b60006111908383611e3c56fea26469706673582212200be7e3b9a6eb7de8c23a1e84055a3d9c74d2675fb90c7a9d41d8e516037cec9a64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5263,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)5626\"\n      },\n      {\n        \"astId\": 5266,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)5831\"\n      },\n      {\n        \"astId\": 5268,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 5270,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)5626\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)5831\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/229aaeec0b8310f97c638f9ed903cb04.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11133828657934177089004312995558009171494340641763879517673191421017863452495;\\n    uint256 constant deltax2 = 15578605622679797628916481587424069927318004999014864187840594050063358446429;\\n    uint256 constant deltay1 = 10776460641737156525775554271006285498298598522158976318346806579207101706777;\\n    uint256 constant deltay2 = 13370712488507592422860031641109290699443204427500458532551752051737078074683;\\n\\n    \\n    uint256 constant IC0x = 9394740747776187241597029104953484261679012526425116554159524966233999111263;\\n    uint256 constant IC0y = 19689273204164097728177651836883812205170784316328518073257553118356569721529;\\n    \\n    uint256 constant IC1x = 2103298983762510908301138293943056608631520025630826390321569873465337843612;\\n    uint256 constant IC1y = 3051671505392171758204845789745109750013350293754815803257290082249002704162;\\n    \\n    uint256 constant IC2x = 16449197615353463639054592956247688316837441704346035760206288894539930814077;\\n    uint256 constant IC2y = 6335892290253569886213727820048151796384993861106408353434365713962828062536;\\n    \\n    uint256 constant IC3x = 13909339620076649767883466299398757372347682133758066729503408416549131081314;\\n    uint256 constant IC3y = 680939940507125217800291279675392811201474158796517777404806360441256992511;\\n    \\n    uint256 constant IC4x = 5567565339001906931154550109868824777928665956120696988986942291349201008482;\\n    uint256 constant IC4y = 14182369860111175092039963088428935808239168726019022822913308258774428350169;\\n    \\n    uint256 constant IC5x = 4528931757641575110352830627683078786226227744379836276335458021091600396184;\\n    uint256 constant IC5y = 18809760409635068499937315446477117440887658318231718225159843539196113242397;\\n    \\n    uint256 constant IC6x = 217249737022013148790853614054515288744843070463361996227143243753146454558;\\n    uint256 constant IC6y = 5843595604928112686285135260361410764846211093271852947892142733907981483475;\\n    \\n    uint256 constant IC7x = 16382783349015794414606292731397855206031202794459940530289465235845935294599;\\n    uint256 constant IC7y = 8313689883004195951872015712057362672054743656979611883792351037811710281664;\\n    \\n    uint256 constant IC8x = 12091879935696046645654533776196374113414754479661743359672798704639476620661;\\n    uint256 constant IC8y = 13607368754408928105528637625253051479212460464623135888354013366424189726618;\\n    \\n    uint256 constant IC9x = 1427687473863783182488178317364745261019085244973035264375279293174848549312;\\n    uint256 constant IC9y = 7042084296523600520065911790797906589532524342562812887761489075993835181146;\\n    \\n    uint256 constant IC10x = 19579875689027874433809077324776940508857197381913748776343129158527029914029;\\n    uint256 constant IC10y = 11360688967181958431013518844967411744837522897538508687548664595854123094206;\\n    \\n    uint256 constant IC11x = 15489617821697871842044770938846172737438163666835784991442660969573132279238;\\n    uint256 constant IC11y = 9208709180384759640941195473336890577882300724746282442631899048305657377731;\\n    \\n    uint256 constant IC12x = 12219340695113383303094720678815419311566874168360126633878210542379865206498;\\n    uint256 constant IC12y = 19748310142198112801532265275227626809399838784073257383942928475531551524126;\\n    \\n    uint256 constant IC13x = 9809600841880559730361608794352502078553304084649850859459331073975327390409;\\n    uint256 constant IC13y = 11320259074840511785906545984642922355663228703151484107043641197226422843416;\\n    \\n    uint256 constant IC14x = 16059817887658775120436765365711045350150793283463695196041726740989539679801;\\n    uint256 constant IC14y = 4842923321162840856934661309117966577909319066986869353905580462534729375402;\\n    \\n    uint256 constant IC15x = 12339372070549065744144308230683430247880602184204850330715911885647781887335;\\n    uint256 constant IC15y = 18316443093151957129338732113138820850818943232578658491484809647188395368957;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/3235f00afe52b593578a06ba6b1f711c.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString();\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_send_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString();\\n    }\\n}\\n\"\n    },\n    \"contracts/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"./external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"./external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"./interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n\\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n\\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n\\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n\\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n\\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n\\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n\\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n\\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n\\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n\\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n\\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n\\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n\\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/3d00f158650f73562ebab290bf8faab9.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/3ead3a1930264a5f1428c2beccc481e4.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistry {\\n    function getAccountId(address _account) external view returns (bytes32);\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"../interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessorMock is IRevolutAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId)\\n    {\\n        return bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutSendProcessor } from \\\"../interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessorMock is IRevolutSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 revolutTagHash,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            keccak256(abi.encodePacked(_proof.public_values.recipientId)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId)),\\n            bytes32(_proof.public_values.notaryKeyHash)\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\n                                                                                // resulting hash is the accountId for our system\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender] == bytes32(0), \\\"Account already associated with accountId\\\");\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender] = accountId;\\n\\n        emit AccountRegistered(msg.sender, accountId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender];\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender];\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account];\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\n     * it can't be used again.\\n     */\\n    function _verifyRegistrationProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns (bytes32 accountId)\\n    {\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string revolutTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Revolut\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistry _accountRegistry,\\n        IRevolutSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\n     */\\n    function offRamp(\\n        string calldata _revolutTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\n\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\"Revolut tag must match id\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            revolutTag: _revolutTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey,\\n            notaryKeyHash: _notaryKeyHash\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IRevolutSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IRevolutSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        ) = sendProcessor.processProof(\\n            IRevolutSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\"Incorrect notary used for notarization\\\");\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"COMPLETED\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IRevolutSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.transferId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Revolut\\\", _proof.public_values.transferId)));\\n\\n        amount = _parseAmount(_proof.public_values.amount);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash,\\n            _publicValues.notaryKeyHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\n        // it would be a receive transaction\\n        require(bytes(amount)[0] == 0x2D, \\\"Not a send transaction\\\");   \\n        return amount.stringToUint(6);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string wiseTagHash;\\n        address userAddress;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistry {\\n\\n    // Each Account is tied to a Wise ID and is represented by an Ethereum address.\\n    struct AccountInfo {\\n        bytes32 accountId;                  // User's Wise account ID\\n        bytes32 offRampId;                  // Multi-currency account ID to receive funds\\n        bytes32 wiseTagHash;                // Hash of user's wise tag account stored on register. Used to verify offramper's wise tag\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory);\\n    function getAccountId(address _account) external view returns (bytes32);\\n\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    \\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseOffRamperRegistrationProcessor {\\n\\n    struct OffRamperRegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string mcAccountId;\\n    }\\n\\n    struct OffRamperRegistrationProof {\\n        OffRamperRegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string senderId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"../interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessorMock is IWiseAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.wiseTagHash.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseOffRamperRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"../interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessorMock is IWiseOffRamperRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n       OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.mcAccountId.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseSendProcessor } from \\\"../interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessorMock is IWiseSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 currencyId\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            bytes32(_proof.public_values.recipientId.stringToUint(0)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessor is IWiseAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        wiseTagHash = bytes32(_proof.public_values.wiseTagHash.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.wiseTagHash,\\n            _publicValues.userAddress\\n        );\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistry is IWiseAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed wiseTagHash);\\n    event OffRamperRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed offRampId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n    event NewOffRamperRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IWiseAccountRegistrationProcessor public accountRegistrationProcessor;      // Address of Account registration processor contract\\n    IWiseOffRamperRegistrationProcessor public offRamperRegistrationProcessor;  // Address of Off-ramper registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => AccountInfo) internal accounts;                          // Mapping of Ethereum accounts to their account information (IDs and deposits)\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     * @param _offRamperRegistrationProcessor   Off-ramper Registration processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistrationProcessor _accountRegistrationProcessor,\\n        IWiseOffRamperRegistrationProcessor _offRamperRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n        offRamperRegistrationProcessor = _offRamperRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender].accountId == bytes32(0), \\\"Account already associated with accountId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 wiseTagHash\\n        ) = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender].accountId = accountId;\\n        accounts[msg.sender].wiseTagHash = wiseTagHash;\\n\\n        emit AccountRegistered(msg.sender, accountId, wiseTagHash);\\n    }\\n\\n    /**\\n     * @notice Registers an account for off-ramping by pulling the multi-currency account id from the proof and assigning\\n     * the account owner to the sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function registerAsOffRamper(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].offRampId == bytes32(0), \\\"Account already associated with offRampId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 offRampId\\n        ) = _verifyOffRamperRegistrationProof(_proof);\\n\\n        accounts[msg.sender].offRampId = offRampId;\\n\\n        emit OffRamperRegistered(msg.sender, accountId, offRampId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].accountId;\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].accountId;\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IWiseAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the off ramper registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setOffRamperRegistrationProcessor(IWiseOffRamperRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        offRamperRegistrationProcessor = _registrationProcessor;\\n        emit NewOffRamperRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account].accountId;\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 wiseTagHash)\\n    {\\n        (\\n            accountId,\\n            wiseTagHash\\n        ) = accountRegistrationProcessor.processProof(_proof);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyOffRamperRegistrationProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 offRampId)\\n    {\\n        (\\n            accountId,\\n            offRampId\\n        ) = offRamperRegistrationProcessor.processProof(_proof);\\n\\n        require(accountId == accounts[msg.sender].accountId, \\\"AccountId does not match\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessor is IWiseOffRamperRegistrationProcessor, TLSBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 offRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint.replaceString(\\\"*\\\", _proof.public_values.profileId), _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        offRampId = bytes32(_proof.public_values.mcAccountId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(_publicValues.endpoint, _publicValues.host, _publicValues.profileId, _publicValues.mcAccountId);\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string wiseTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Wise currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's offRampId \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Wise account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IWiseAccountRegistry public accountRegistry;                    // Account Registry contract for Wise\\n    IWiseSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Wise\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistry _accountRegistry,\\n        IWiseSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _wiseTag              Depositor's Wise tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     */\\n    function offRamp(\\n        string calldata _wiseTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        IWiseAccountRegistry.AccountInfo memory account = accountRegistry.getAccountInfo(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account.accountId];\\n\\n        require(account.offRampId != bytes32(0), \\\"Must be registered as off ramper\\\");\\n        require(keccak256(abi.encode(_wiseTag)) == account.wiseTagHash, \\\"Wise tag does not match registered wise tag\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            wiseTag: _wiseTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.accountId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Wise\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IWiseSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IWiseSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IWiseSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        ) = sendProcessor.processProof(\\n            IWiseSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accountRegistry.getAccountInfo(deposit.depositor).offRampId == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessor is IWiseSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"OUTGOING_PAYMENT_SENT\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IWiseSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.senderId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Wise\\\", _proof.public_values.transferId)));\\n\\n        amount = _proof.public_values.amount.stringToUint(6);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = bytes32(_proof.public_values.recipientId.stringToUint(0));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.senderId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16692827623879808830126666424117838150546424161010311559130132272860078100250;\\n    uint256 constant deltax2 = 10427071116080203280483990720065140241625477298313711514843941053378169062748;\\n    uint256 constant deltay1 = 12292291730534257963793035250750833013505862587513324721305952905575695195722;\\n    uint256 constant deltay2 = 20744227296603881754617447489692206687227195961073977292626564883622660146422;\\n\\n    \\n    uint256 constant IC0x = 8444387327591820163253359883706304250001395835708102283881672029412593968774;\\n    uint256 constant IC0y = 277567402350001170949287541204029095267467381858853916455216632597839881894;\\n    \\n    uint256 constant IC1x = 11766018000598374647690511651127745003630346152255765679463620118729063279220;\\n    uint256 constant IC1y = 9973870620290232174118930849612458053973396098852917252709131237691777167431;\\n    \\n    uint256 constant IC2x = 21007152236406284962452665998326532111064818140624217664323424373713986554835;\\n    uint256 constant IC2y = 21775424933265972488601591944473690558387975377218817711132857025038427581344;\\n    \\n    uint256 constant IC3x = 19548332954070589452554863336717712265670681575029463650291986455368503640194;\\n    uint256 constant IC3y = 9885572105525346384114396000793852863725331019928798599079916138124811450063;\\n    \\n    uint256 constant IC4x = 20459688676260758193620894047864540995062748169615148342851161008796903469478;\\n    uint256 constant IC4y = 7185096966400904659568958817597117358528438755253953902329001546341542579806;\\n    \\n    uint256 constant IC5x = 15566588852465957839914470257479783208753427872712540953155019219989274639291;\\n    uint256 constant IC5y = 13117341851862511824800803143692229606087651943401230287864971446454834743578;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5710629204359318057562498392234897061794505526378244639613545081979421872324;\\n    uint256 constant deltax2 = 990656993167988662763349194790300993619547607285680693352122387169954518876;\\n    uint256 constant deltay1 = 716219014029453087010203485855017030343957665868140907538168510860723855404;\\n    uint256 constant deltay2 = 15567073068481787678459322691280596720950847803967120869528969231388542383007;\\n\\n    \\n    uint256 constant IC0x = 3627016935680980991432758845809120437097698562642321662019774941798047598180;\\n    uint256 constant IC0y = 16742737478481137559777273336649173908087975045426893354724005348183061433359;\\n    \\n    uint256 constant IC1x = 1454889468509402624274228018232533000837827531552657849863656594197598947498;\\n    uint256 constant IC1y = 21114519264105667881501109217530601184286085076749464919673271702318856586869;\\n    \\n    uint256 constant IC2x = 15214926606177919954497590021391485480795904680262796779354958872907701613369;\\n    uint256 constant IC2y = 3436701283643568631088610954415601741399004409005447167420424641912447528939;\\n    \\n    uint256 constant IC3x = 4535577697185795754970511618264939460763831131849914629687538976336257649268;\\n    uint256 constant IC3y = 7758558535557743288212279084775965030097651866120453423634300893790511261820;\\n    \\n    uint256 constant IC4x = 874294953994422297831973347765527399192587644625708091600444498339317231142;\\n    uint256 constant IC4y = 987062449590966973283739390864507348641413150099442677760662058272414279274;\\n    \\n    uint256 constant IC5x = 21093306057635441117249393023592254587788813974241613308459037792013982125271;\\n    uint256 constant IC5y = 2674227458751675036151996130714025181946977717008550031124827209614433661640;\\n    \\n    uint256 constant IC6x = 13846687013867984054231693830774779045583700534400211257658890706223553634739;\\n    uint256 constant IC6y = 8017285138819571587063238313118652954321504644123983130004849545264828919081;\\n    \\n    uint256 constant IC7x = 13134004890952141957850059371765174729898824494756098133509785273144965229605;\\n    uint256 constant IC7y = 19833383650616654544301917274181853787895876513168493371626228893058581160277;\\n    \\n    uint256 constant IC8x = 15730855678085463666228938279082107543444904323060443712618683292548728266981;\\n    uint256 constant IC8y = 11187003173972315212472857297424367154976035201682387760241185052675631112914;\\n    \\n    uint256 constant IC9x = 19431007015983296833648365920726396734910027676221391642968597625199383752634;\\n    uint256 constant IC9y = 21132440606561643161647678729377817341013518219983716149257194049459184921050;\\n    \\n    uint256 constant IC10x = 4559717915456495626304866642697317683057747436742022494016974327403606371979;\\n    uint256 constant IC10y = 11478380993372530002009436682140297146781606321299572933211280870931334446617;\\n    \\n    uint256 constant IC11x = 16525805622865173604160997674689687443990633252176419982940261013647563901344;\\n    uint256 constant IC11y = 792201218354373970098710160330509619168590675536085985581042389294282406443;\\n    \\n    uint256 constant IC12x = 10525116069038722935367461628431297752051968830490923775813610986261326824582;\\n    uint256 constant IC12y = 10970802876973329565857167947893820731407652682848506683295471907792738767120;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/582bda84e77341f31e48e553d6955fd7.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_send_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/8bc81ff8830ebb82cab81dfebf9e965a.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistry {\\n    function getAccountId(address _account) external view returns (bytes32);\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"../interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessorMock is IRevolutAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId)\\n    {\\n        return bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutSendProcessor } from \\\"../interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessorMock is IRevolutSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 revolutTagHash,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            keccak256(abi.encodePacked(_proof.public_values.recipientId)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId)),\\n            bytes32(_proof.public_values.notaryKeyHash)\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    event NotaryKeyHashSet(bytes32 _notaryKeyHash);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    function setNotaryKeyHash(bytes32 _notaryKeyHash) external onlyOwner {\\n        notaryKeyHash = _notaryKeyHash;\\n\\n        emit NotaryKeyHashSet(_notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\n                                                                                // resulting hash is the accountId for our system\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender] == bytes32(0), \\\"Account already associated with accountId\\\");\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender] = accountId;\\n\\n        emit AccountRegistered(msg.sender, accountId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender];\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender];\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account];\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\n     * it can't be used again.\\n     */\\n    function _verifyRegistrationProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns (bytes32 accountId)\\n    {\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string revolutTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Revolut\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistry _accountRegistry,\\n        IRevolutSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\n     */\\n    function offRamp(\\n        string calldata _revolutTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\n\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\"Revolut tag must match id\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            revolutTag: _revolutTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey,\\n            notaryKeyHash: _notaryKeyHash\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IRevolutSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IRevolutSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        ) = sendProcessor.processProof(\\n            IRevolutSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\"Incorrect notary used for notarization\\\");\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"COMPLETED\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IRevolutSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.transferId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Revolut\\\", _proof.public_values.transferId)));\\n\\n        amount = _parseAmount(_proof.public_values.amount);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash,\\n            _publicValues.notaryKeyHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\n        // it would be a receive transaction\\n        require(bytes(amount)[0] == 0x2D, \\\"Not a send transaction\\\");   \\n        return amount.stringToUint(6);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string wiseTagHash;\\n        address userAddress;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistry {\\n\\n    // Each Account is tied to a Wise ID and is represented by an Ethereum address.\\n    struct AccountInfo {\\n        bytes32 accountId;                  // User's Wise account ID\\n        bytes32 offRampId;                  // Multi-currency account ID to receive funds\\n        bytes32 wiseTagHash;                // Hash of user's wise tag account stored on register. Used to verify offramper's wise tag\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory);\\n    function getAccountId(address _account) external view returns (bytes32);\\n\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    \\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseOffRamperRegistrationProcessor {\\n\\n    struct OffRamperRegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string mcAccountId;\\n    }\\n\\n    struct OffRamperRegistrationProof {\\n        OffRamperRegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string senderId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"../interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessorMock is IWiseAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.wiseTagHash.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseOffRamperRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"../interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessorMock is IWiseOffRamperRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n       OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.mcAccountId.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseSendProcessor } from \\\"../interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessorMock is IWiseSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 currencyId\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            bytes32(_proof.public_values.recipientId.stringToUint(0)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessor is IWiseAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        wiseTagHash = bytes32(_proof.public_values.wiseTagHash.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.wiseTagHash,\\n            _publicValues.userAddress\\n        );\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistry is IWiseAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed wiseTagHash);\\n    event OffRamperRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed offRampId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n    event NewOffRamperRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IWiseAccountRegistrationProcessor public accountRegistrationProcessor;      // Address of Account registration processor contract\\n    IWiseOffRamperRegistrationProcessor public offRamperRegistrationProcessor;  // Address of Off-ramper registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => AccountInfo) internal accounts;                          // Mapping of Ethereum accounts to their account information (IDs and deposits)\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     * @param _offRamperRegistrationProcessor   Off-ramper Registration processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistrationProcessor _accountRegistrationProcessor,\\n        IWiseOffRamperRegistrationProcessor _offRamperRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n        offRamperRegistrationProcessor = _offRamperRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender].accountId == bytes32(0), \\\"Account already associated with accountId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 wiseTagHash\\n        ) = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender].accountId = accountId;\\n        accounts[msg.sender].wiseTagHash = wiseTagHash;\\n\\n        emit AccountRegistered(msg.sender, accountId, wiseTagHash);\\n    }\\n\\n    /**\\n     * @notice Registers an account for off-ramping by pulling the multi-currency account id from the proof and assigning\\n     * the account owner to the sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function registerAsOffRamper(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].offRampId == bytes32(0), \\\"Account already associated with offRampId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 offRampId\\n        ) = _verifyOffRamperRegistrationProof(_proof);\\n\\n        accounts[msg.sender].offRampId = offRampId;\\n\\n        emit OffRamperRegistered(msg.sender, accountId, offRampId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].accountId;\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].accountId;\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IWiseAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the off ramper registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setOffRamperRegistrationProcessor(IWiseOffRamperRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        offRamperRegistrationProcessor = _registrationProcessor;\\n        emit NewOffRamperRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account].accountId;\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 wiseTagHash)\\n    {\\n        (\\n            accountId,\\n            wiseTagHash\\n        ) = accountRegistrationProcessor.processProof(_proof);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyOffRamperRegistrationProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 offRampId)\\n    {\\n        (\\n            accountId,\\n            offRampId\\n        ) = offRamperRegistrationProcessor.processProof(_proof);\\n\\n        require(accountId == accounts[msg.sender].accountId, \\\"AccountId does not match\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessor is IWiseOffRamperRegistrationProcessor, TLSBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 offRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint.replaceString(\\\"*\\\", _proof.public_values.profileId), _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        offRampId = bytes32(_proof.public_values.mcAccountId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(_publicValues.endpoint, _publicValues.host, _publicValues.profileId, _publicValues.mcAccountId);\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string wiseTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Wise currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's offRampId \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Wise account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IWiseAccountRegistry public accountRegistry;                    // Account Registry contract for Wise\\n    IWiseSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Wise\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistry _accountRegistry,\\n        IWiseSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _wiseTag              Depositor's Wise tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     */\\n    function offRamp(\\n        string calldata _wiseTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        IWiseAccountRegistry.AccountInfo memory account = accountRegistry.getAccountInfo(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account.accountId];\\n\\n        require(account.offRampId != bytes32(0), \\\"Must be registered as off ramper\\\");\\n        require(keccak256(abi.encode(_wiseTag)) == account.wiseTagHash, \\\"Wise tag does not match registered wise tag\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            wiseTag: _wiseTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.accountId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Wise\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IWiseSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IWiseSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IWiseSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        ) = sendProcessor.processProof(\\n            IWiseSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accountRegistry.getAccountInfo(deposit.depositor).offRampId == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessor is IWiseSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"OUTGOING_PAYMENT_SENT\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IWiseSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.senderId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Wise\\\", _proof.public_values.transferId)));\\n\\n        amount = _proof.public_values.amount.stringToUint(6);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = bytes32(_proof.public_values.recipientId.stringToUint(0));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.senderId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/b37c1ae3295cdbee97a5fae6e06eede9.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/c76db42e3552a72f819af71bb2be52ce.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18574627869058290718249846286416066923787357305653818275198119569110729063307;\\n    uint256 constant deltax2 = 13915999697294316428724933304884230300804768925316324388637447994944303207122;\\n    uint256 constant deltay1 = 6098255674121565970551903974560935137843957314441504769450899063293175181557;\\n    uint256 constant deltay2 = 15143967207878882858319171473723762116395973746480761427454690602499031508717;\\n\\n    \\n    uint256 constant IC0x = 6865443700594715891152328791607889526330887414086993633068747938072457241685;\\n    uint256 constant IC0y = 10468945301756143970646006543367573774178372611766681195220999860357915797944;\\n    \\n    uint256 constant IC1x = 10704722446523266721180562643447437149651020230245607194259102672100716655622;\\n    uint256 constant IC1y = 13835922647350771093409292403482106984225273572439540259619248291997497190338;\\n    \\n    uint256 constant IC2x = 9082820476663057749813862646863505694595521088627361022677522902057835975674;\\n    uint256 constant IC2y = 2956559811855122372464720724455222044024045806141600873519434424076727259549;\\n    \\n    uint256 constant IC3x = 3792740326745716842453603765202940845282157902511414580984405164815472719626;\\n    uint256 constant IC3y = 13398930886279937280023561976368048826175146409027429215170876003688906362216;\\n    \\n    uint256 constant IC4x = 1141781699151428606267044235130552909660238448565862470582441408755286403649;\\n    uint256 constant IC4y = 16789658000733015308721768726691601134554495877403753820826002406384958395008;\\n    \\n    uint256 constant IC5x = 12543171042042072636131914829125043929342724675040777036405607612956292855474;\\n    uint256 constant IC5y = 4103351600393692854136490223669999878503018507420468298933278541160167154342;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 13715093910953477444594932613394637161592645326267490952383773258932680530785;\\n    uint256 constant deltax2 = 6917355939685380899148753334446963866296679557559265300195124805902372568736;\\n    uint256 constant deltay1 = 10027537635408556375640886021174498274338207339803607940642263434646237658144;\\n    uint256 constant deltay2 = 19825314797083105356154821733414236732602675829642895849779157432388025780748;\\n\\n    \\n    uint256 constant IC0x = 7948712917874849781328365661027367011398916994267746344840851439625837578323;\\n    uint256 constant IC0y = 14445610336427827969214783890094209349619216720637343095223018572693254280923;\\n    \\n    uint256 constant IC1x = 3654976868371838169631577898462947005550108125685649400186026683210975806547;\\n    uint256 constant IC1y = 7383470632301847779131345725687431208414525939319998905342796582584383932784;\\n    \\n    uint256 constant IC2x = 15960136517117002583905099076229506420678130465330836605642076667698312488907;\\n    uint256 constant IC2y = 10981003641590459938830276725941498612829685925850889415515039958666798745545;\\n    \\n    uint256 constant IC3x = 18064147597098347735634254758923927729758051955626895483758091493962336324910;\\n    uint256 constant IC3y = 14561976814062079545004557051651175882415454473414826337411715544694691078488;\\n    \\n    uint256 constant IC4x = 5479872440797886105045613557892343574379959348291323344571145668056905130790;\\n    uint256 constant IC4y = 19816668883377774512316396795679515122358992446677555233530823190449668202575;\\n    \\n    uint256 constant IC5x = 9764995418164291848924916053122788044578670279004409359935206951759326535751;\\n    uint256 constant IC5y = 11151240738595525109186562114546767429226785384258075837825604200334229399893;\\n    \\n    uint256 constant IC6x = 8592289604370662283816667811371636409851377122184258261984779162566069289701;\\n    uint256 constant IC6y = 14924863702174947616504138427154175911132478861008643941575632275190130139352;\\n    \\n    uint256 constant IC7x = 18144310048336844926716356091507529474953804436633311455291234260603469939801;\\n    uint256 constant IC7y = 20695654519010539727518673528536864282905304035588394263484365314168181698771;\\n    \\n    uint256 constant IC8x = 6502380984206062082509747555585722773109086149921002084837192664976139632635;\\n    uint256 constant IC8y = 20559694265554344023542679863623632229239552087994730960172389697388976005511;\\n    \\n    uint256 constant IC9x = 20112907151747105787761530796573701791334087761671369712034010592321424588594;\\n    uint256 constant IC9y = 7868275330531868976088552522626764067554872392097431803379373791917043873429;\\n    \\n    uint256 constant IC10x = 21738568466342470712305504479308744377477421607586657477021567762815751353985;\\n    uint256 constant IC10y = 15899136431442502164449286654852349998271141738582178828650897248716421930967;\\n    \\n    uint256 constant IC11x = 8797574036872579022038442307145559829777119719185174358600414786794648200526;\\n    uint256 constant IC11y = 19158045316273481821441527564745598208594831388291307046183673615092116714767;\\n    \\n    uint256 constant IC12x = 1856159710792583584076099033562199824825551035760525968182870506068750338922;\\n    uint256 constant IC12y = 5431689035393664841658365783566955093050903672278814147361678362199701787106;\\n    \\n    uint256 constant IC13x = 1326184215165888620491943578175089960460457074386949049899809721605475868360;\\n    uint256 constant IC13y = 19798068085286831236096103256261325470985925228876029833389405086405680467005;\\n    \\n    uint256 constant IC14x = 21303925226345182261601479972988106925149727015068245014063996271014722518363;\\n    uint256 constant IC14y = 13822581075918761258491041321378418848172590182506086615070972333032971332948;\\n    \\n    uint256 constant IC15x = 7601301681882298785665130103217482061846330487834337423048688553591898089998;\\n    uint256 constant IC15y = 16353595650180105876268966027044363473882857313997670459546834066677499432092;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 10075444819728828528059511311364183377585011636666347250599008316664107494584;\\n    uint256 constant deltax2 = 19327888262652149651858559507688929247845982563456569545298956783712290831031;\\n    uint256 constant deltay1 = 19352801460895629485256782282819819495690526597376096989389923034283130776118;\\n    uint256 constant deltay2 = 11668517376357679640486892005206332407941243522830734898219813555969756490527;\\n\\n    \\n    uint256 constant IC0x = 4244199450261939264855608361292422830494076317114087381524682052624987594898;\\n    uint256 constant IC0y = 19645046663091251713731947178298410964505911169469312617571077810087266152857;\\n    \\n    uint256 constant IC1x = 8174035567318043885708495283345132428559378659325609203776402978017320167293;\\n    uint256 constant IC1y = 14468913963303826866215469807518170784403093656434266017779773880257875040240;\\n    \\n    uint256 constant IC2x = 1616603017751755006393562987905285502270823546542543926944627007410237341389;\\n    uint256 constant IC2y = 19363001402611389684892375352655759926342431445082754246958964085276938403807;\\n    \\n    uint256 constant IC3x = 18206398417831844023515176703806764449138507779128726420915001707110434960674;\\n    uint256 constant IC3y = 15788322487150289973315668363845259348952014356217153206401112660482394149984;\\n    \\n    uint256 constant IC4x = 5556506419684194840114638678281266193177223336781663103282498332205775709966;\\n    uint256 constant IC4y = 3612832929973582572292953270578481883198123808328242543078950263985599193867;\\n    \\n    uint256 constant IC5x = 12215062759329544988171802286780059092087193981868301475398051148747302789508;\\n    uint256 constant IC5y = 1980305058569746313443850675062124742589110071159814897086099250727381686120;\\n    \\n    uint256 constant IC6x = 3493933421620238986193524740698678015926658911199434587596433896655331481231;\\n    uint256 constant IC6y = 7459045126206245262756783739697871731196375298112634212173672404853831309786;\\n    \\n    uint256 constant IC7x = 10740551677743158382441062386501298848646053145865823442847610791968594528289;\\n    uint256 constant IC7y = 21657167241153225314135589387079002708587418842864077521693977210968021048721;\\n    \\n    uint256 constant IC8x = 20536476234797263831643189740064053117160337195791856385892992834482370287512;\\n    uint256 constant IC8y = 18258699057873865588245369435578918571756469704183085011165098139074862434543;\\n    \\n    uint256 constant IC9x = 18293662353150822330749373485066335943093182919888710919053977794688677443843;\\n    uint256 constant IC9y = 3365197130606871938439382259561012622230793791152518122576869893531830020051;\\n    \\n    uint256 constant IC10x = 10464268927660994961936771610761322397633069758803976833400107641287034964420;\\n    uint256 constant IC10y = 15896600235017903857295002971756639107391153447838560723402307560050234141111;\\n    \\n    uint256 constant IC11x = 19786751484513045884347111989063082084450406057425687794673931698452346081044;\\n    uint256 constant IC11y = 5313251178585910055977156446218999699936391470697302222575669547157687947710;\\n    \\n    uint256 constant IC12x = 1684055055646723719894355280156760702291183222236626601663480311877006377437;\\n    uint256 constant IC12y = 14613128874599604159663378872994588938053027721510091765805321127316501622056;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base/solcInputs/f47db0aba1ef1355cf5a362858260c2b.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/.chainId",
    "content": "8453"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/GarantiBodyHashVerifier.json",
    "content": "{\n  \"address\": \"0xA52E53Efa715a2909328Bffb3d7f2eE2B84A5Cb7\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[4]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[4]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4addfc6a4992b245d691681575ff3519218bf79d131fc6a5b2cbcfb8a67a945f\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xA52E53Efa715a2909328Bffb3d7f2eE2B84A5Cb7\",\n    \"transactionIndex\": 21,\n    \"gasUsed\": \"414246\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xa8c98f80a85ee35a8ce3ed44075897ec6ef41e144f824f134c69ab0f33b203af\",\n    \"transactionHash\": \"0x4addfc6a4992b245d691681575ff3519218bf79d131fc6a5b2cbcfb8a67a945f\",\n    \"logs\": [],\n    \"blockNumber\": 12215459,\n    \"cumulativeGasUsed\": \"3891391\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\\\":\\\"Groth16Verifier\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\\\n    \\\\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\\\n    \\\\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\\\n    \\\\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\\\n    \\\\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x6203eac560e097469393cb611e298265692297a8e6bb05e81d642eb888fc9ee9\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610687806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004361003e3660046105f7565b610057565b604051901515815260200160405180910390f35b600061056a565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2d84602728848e471bd1ba9e560f82ab8a7eec80bd3014f76ebd173d6ca628bc85527f1a7ded6d8fdaf30f436cf3f3bfa878a07585d245de1b30e632ec87025f97e82560208601526000608086018661019a87357f2eacdafb8a074f55c7eeaeaba8e637580efd6becf4cc32e3ffcb29d5f7d5c47c7f0ba89cd7566d8ba7283a2c695154fd3596a3fa79ceb3fff200e4a1bc6df50c0684610092565b6101ea60208801357f22c4fc2bb63514decde9458ccb4bc65a47aa468ef49618e4eda09120cf429d707f0fdf44fe63793ab49f743161b2aecf184517b4bb0fae7702da1f596ed3c85bd384610092565b61023a60408801357f260137477524ec7727275599f381fb4d4dcc29fed4c0333d45ca9638a7ad42c47f05b0b02830349454814f64e84c47e6efc8ab5b2eb0b771a4ba2079c48facffde84610092565b61028a60608801357f12c261380019d137f4c8e7e13bbb8231d5f1e834377311c5dc5e0f2b9d758db97f1f359c754273ab6f981835d1bb37f8c007d8b75ac24d775ff24098f2577f70f584610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1982c6465dbad02e8ffe7203ec829194caa6d8f0c00a28953fe9763ecfbc0d866102808201527f16dddf97803669507bc9011f92e4fff75ea52e1891dfc6655bed759aa87cf4146102a08201527f10f7390ef109560803b040cefb04b3a2400f425ccf60456c6f1815272e05c8a06102c08201527f2a7488e34e7971bee4a74881cf790f1da42411e95a261bb1a7049098f3c8ef1c6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610582600084013561005e565b61058f602084013561005e565b61059c604084013561005e565b6105a9606084013561005e565b6105b6608084013561005e565b6105c3818486888a6100fd565b90508060005260206000f35b80604081018310156105e057600080fd5b92915050565b80608081018310156105e057600080fd5b600080600080610180858703121561060e57600080fd5b61061886866105cf565b935061062786604087016105e6565b92506106368660c087016105cf565b91506106468661010087016105e6565b90509295919450925056fea2646970667358221220ec67a808c756c9c7812b0e9e766ded5eff2ed5f70b6096d58043b7ddc714b72f64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004361003e3660046105f7565b610057565b604051901515815260200160405180910390f35b600061056a565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2d84602728848e471bd1ba9e560f82ab8a7eec80bd3014f76ebd173d6ca628bc85527f1a7ded6d8fdaf30f436cf3f3bfa878a07585d245de1b30e632ec87025f97e82560208601526000608086018661019a87357f2eacdafb8a074f55c7eeaeaba8e637580efd6becf4cc32e3ffcb29d5f7d5c47c7f0ba89cd7566d8ba7283a2c695154fd3596a3fa79ceb3fff200e4a1bc6df50c0684610092565b6101ea60208801357f22c4fc2bb63514decde9458ccb4bc65a47aa468ef49618e4eda09120cf429d707f0fdf44fe63793ab49f743161b2aecf184517b4bb0fae7702da1f596ed3c85bd384610092565b61023a60408801357f260137477524ec7727275599f381fb4d4dcc29fed4c0333d45ca9638a7ad42c47f05b0b02830349454814f64e84c47e6efc8ab5b2eb0b771a4ba2079c48facffde84610092565b61028a60608801357f12c261380019d137f4c8e7e13bbb8231d5f1e834377311c5dc5e0f2b9d758db97f1f359c754273ab6f981835d1bb37f8c007d8b75ac24d775ff24098f2577f70f584610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1982c6465dbad02e8ffe7203ec829194caa6d8f0c00a28953fe9763ecfbc0d866102808201527f16dddf97803669507bc9011f92e4fff75ea52e1891dfc6655bed759aa87cf4146102a08201527f10f7390ef109560803b040cefb04b3a2400f425ccf60456c6f1815272e05c8a06102c08201527f2a7488e34e7971bee4a74881cf790f1da42411e95a261bb1a7049098f3c8ef1c6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610582600084013561005e565b61058f602084013561005e565b61059c604084013561005e565b6105a9606084013561005e565b6105b6608084013561005e565b6105c3818486888a6100fd565b90508060005260206000f35b80604081018310156105e057600080fd5b92915050565b80608081018310156105e057600080fd5b600080600080610180858703121561060e57600080fd5b61061886866105cf565b935061062786604087016105e6565b92506106368660c087016105cf565b91506106468661010087016105e6565b90509295919450925056fea2646970667358221220ec67a808c756c9c7812b0e9e766ded5eff2ed5f70b6096d58043b7ddc714b72f64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [],\n    \"types\": null\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/GarantiManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0xB68b9bCBEA54540F41c8F597aC6415F33114016f\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x872439847ab6fea946331a4dbba85a2fbbcf85d6e2be65bdf55a7b7806f10e09\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xB68b9bCBEA54540F41c8F597aC6415F33114016f\",\n    \"transactionIndex\": 5,\n    \"gasUsed\": \"563417\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000001000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000800000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd59fe65507655e44a6bf6515ab03eec3918ddaf3f1e8d0a235231ac0a6f16a6e\",\n    \"transactionHash\": \"0x872439847ab6fea946331a4dbba85a2fbbcf85d6e2be65bdf55a7b7806f10e09\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 5,\n        \"blockNumber\": 11394194,\n        \"transactionHash\": \"0x872439847ab6fea946331a4dbba85a2fbbcf85d6e2be65bdf55a7b7806f10e09\",\n        \"address\": \"0xB68b9bCBEA54540F41c8F597aC6415F33114016f\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 9,\n        \"blockHash\": \"0xd59fe65507655e44a6bf6515ab03eec3918ddaf3f1e8d0a235231ac0a6f16a6e\"\n      }\n    ],\n    \"blockNumber\": 11394194,\n    \"cumulativeGasUsed\": \"1569584\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x03a9c8babd6b4ad94d711f3ffbee84b7aa69f4cb0dd08d491c5a5c32eca15f60\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"fddf950e5f6f8abf0d9e29e0433009ae\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3631,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3634,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/GarantiRamp.json",
    "content": "{\n  \"address\": \"0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"garantiIban\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"garantiName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiIban\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_iban\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"isValidIban\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_garantiIban\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_garantiName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x11ae991e286210c80ee5f5431ec7e2ecf23be33ca2711e4ec4721ab0a3f203d0\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"4012614\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000800000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000200000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x2ded27998e5fa5bf0a64a894ce7ba738677a1a5f32ded66217a0173c2920eadd\",\n    \"transactionHash\": \"0x11ae991e286210c80ee5f5431ec7e2ecf23be33ca2711e4ec4721ab0a3f203d0\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 2,\n        \"blockNumber\": 11394191,\n        \"transactionHash\": \"0x11ae991e286210c80ee5f5431ec7e2ecf23be33ca2711e4ec4721ab0a3f203d0\",\n        \"address\": \"0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 7,\n        \"blockHash\": \"0x2ded27998e5fa5bf0a64a894ce7ba738677a1a5f32ded66217a0173c2920eadd\"\n      },\n      {\n        \"transactionIndex\": 2,\n        \"blockNumber\": 11394191,\n        \"transactionHash\": \"0x11ae991e286210c80ee5f5431ec7e2ecf23be33ca2711e4ec4721ab0a3f203d0\",\n        \"address\": \"0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 8,\n        \"blockHash\": \"0x2ded27998e5fa5bf0a64a894ce7ba738677a1a5f32ded66217a0173c2920eadd\"\n      }\n    ],\n    \"blockNumber\": 11394191,\n    \"cumulativeGasUsed\": \"4220035\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"10000000\",\n    \"100000000\",\n    \"180\",\n    \"180\",\n    \"0\",\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"fddf950e5f6f8abf0d9e29e0433009ae\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_iban\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"isValidIban\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"internalType\\\":\\\"struct IGarantiSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"internalType\\\":\\\"struct IGarantiRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the idHash being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(string,string,uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_garantiIban\\\":\\\"IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\",\\\"_garantiName\\\":\\\"Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"params\\\":{\\\"_bodyHashProof\\\":\\\"Parameters and signals for body hash proof\\\",\\\"_proof\\\":\\\"Parameters and signals for send email proof\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"params\\\":{\\\"_bodyHashProof\\\":\\\"Parameters and signals for body hash proof\\\",\\\"_proof\\\":\\\"Parameters and signals for registration email proof\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the idHash being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(string,string,uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a idHash from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiRamp.sol\\\":\\\"GarantiRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon3.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon3 {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x39cd67d4a7ef93e243c77b7c8a40c3842c060a7f444b0b2c875bce7d8d0c24fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IPoseidon6.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon6 {\\\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9609bcff68e45a22b551bf5f42a5ea62ea0b33e433a89f7c89a6b0714df09229\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon3 } from \\\\\\\"../../interfaces/IPoseidon3.sol\\\\\\\";\\\\nimport { IPoseidon6 } from \\\\\\\"../../interfaces/IPoseidon6.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiRegistrationProcessor } from \\\\\\\"./interfaces/IGarantiRegistrationProcessor.sol\\\\\\\";\\\\nimport { IGarantiSendProcessor } from \\\\\\\"./interfaces/IGarantiSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the idHash\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 idHash;                     // Hash of payment processor id\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's idHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IGarantiRegistrationProcessor _registrationProcessor,\\\\n        IGarantiSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _proof            Parameters and signals for registration email proof\\\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\\\n     */\\\\n    function register(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\\\\\"Account already associated with idHash\\\\\\\");\\\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\\\n\\\\n        accounts[msg.sender].idHash = idHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, idHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        string memory _garantiIban,\\\\n        string memory _garantiName,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        require(isValidIban(_garantiIban), \\\\\\\"Invalid IBAN\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        AccountInfo storage account = accounts[msg.sender];\\\\n        account.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            garantiIban: _garantiIban,\\\\n            garantiName: _garantiName,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 idHash = accounts[msg.sender].idHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorIdHash != idHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[idHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _proof            Parameters and signals for send email proof\\\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\\\n     */\\\\n    function onRamp(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a idHash from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\\\n        bytes memory ibanBytes = bytes(_iban);\\\\n        if(ibanBytes.length != 32) { return false; }\\\\n\\\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\\\n            if (i < 2) {\\\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\\\n            } else if (i % 5 == 4) {\\\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\\\n                if(ibanBytes[i] != 0x20) { return false; }\\\\n            } else {\\\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\\\n            }\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _idHash,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperNameHash,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\\\n\\\\n        return idHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x11095008d889ee4205c6e43f9628207ec364b25ad6e9082e5b4647094fb99b7a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[11] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0f70e4fda7e77a71110f14b943f0be18414d3fde1f89611659f3bfa61e7d220\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[28] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70a70e2bf4861b7095bff34a55b10da9bc705735e40bed6104e179c0ecc3da25\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162004782380380620047828339810160408190526200003491620001dd565b6200003f3362000096565b6001600160a01b0387811660805260078790556008869055600a8590556009849055600b839055600c80546001600160a01b0319169183169190911790556200008888620000e6565b505050505050505062000263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f062000169565b6001600160a01b0381166200015b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001668162000096565b50565b6000546001600160a01b03163314620001c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000152565b565b6001600160a01b03811681146200016657600080fd5b600080600080600080600080610100898b031215620001fb57600080fd5b88516200020881620001c7565b60208a01519098506200021b81620001c7565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151915060e08901516200025281620001c7565b809150509295985092959890939650565b6080516144e76200029b600039600081816103a1015281816119c20152818161245d01528181613360015261340f01526144e76000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c8063715018a611610151578063b3fa4c01116100c3578063ecb3dc8811610087578063ecb3dc8814610657578063ecd618f014610660578063ed1692b814610680578063eea1d19714610693578063f2fde38b146106a6578063fbf15b1f146106b957600080fd5b8063b3fa4c0114610602578063d55f960d14610615578063d9478d2014610628578063e215ad591461063b578063e279d9641461064e57600080fd5b80639087beff116101155780639087beff1461057a5780639b357b5a1461058d5780639f9fb968146105a0578063a00555b3146105c0578063a1a954b7146105d3578063b02c43d0146105dc57600080fd5b8063715018a6146104b257806371a28f69146104ba5780637b510fe8146104cd5780638da5cb5b146104ed5780639021578a146104fe57600080fd5b806342987349116101ea5780635081d952116101ae5780635081d9521461043d5780635dd765151461045d57806360e0d21e14610470578063645006ca1461048357806366ec84191461048c578063711347621461049f57600080fd5b806342987349146103db57806343a170e6146103ee5780634595bba014610401578063485cc95514610421578063495223e71461043457600080fd5b80632a80cda31161023c5780632a80cda31461032c578063317dcc961461033f5780633389d5d514610352578063392e53cd146103755780633adba28a146103895780633e413bee1461039c57600080fd5b80630f1ef98c14610279578063133de6cb146102c5578063148172da146102da57806314ec32fa146102ed578063238c849414610323575b600080fd5b6102b261028736600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102d86102d336600461395e565b610700565b005b6102d86102e8366004613982565b61075d565b6102b26102fb36600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102b2600b5481565b6102d861033a366004613982565b61088f565b6102d861034d366004613982565b61091c565b610365610360366004613a52565b610959565b60405190151581526020016102bc565b60025461036590600160a01b900460ff1681565b6102d8610397366004613a87565b610ab4565b6103c37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102bc565b6102d86103e9366004613982565b611005565b6102d86103fc366004613ad3565b6110a6565b61041461040f36600461395e565b611160565b6040516102bc9190613b12565b6102d861042f366004613b56565b6111d9565b6102b260095481565b61045061044b36600461395e565b61126c565b6040516102bc9190613c9d565b6102d861046b366004613982565b6115d1565b6102d861047e366004613d29565b611670565b6102b260075481565b6102d861049a366004613982565b6116f9565b6102d86104ad366004613d4e565b611844565b6102d8611a37565b6104506104c8366004613d4e565b611a4b565b6104e06104db36600461395e565b611d48565b6040516102bc9190613df4565b6000546001600160a01b03166103c3565b61054761050c366004613982565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102bc565b6102d8610588366004613982565b611de2565b6102d861059b366004613982565b611e79565b6105b36105ae366004613982565b611f80565b6040516102bc9190613e4c565b6102d86105ce366004613e5f565b61215e565b6102b2600a5481565b6105ef6105ea366004613982565b61251a565b6040516102bc9796959493929190613ed3565b6102d861061036600461395e565b61266f565b6102d8610623366004613982565b612727565b600c546103c3906001600160a01b031681565b6001546103c3906001600160a01b031681565b6102b260085481565b6102b2600d5481565b61067361066e366004613f30565b612865565b6040516102bc9190613fa5565b6102d861068e36600461395e565b6129ca565b6002546103c3906001600160a01b031681565b6102d86106b436600461395e565b612a20565b6103656106c7366004614035565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b610708612a99565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107925760405162461bcd60e51b815260040161078990614061565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff161561080b5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610789565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108839083908590918252602082015260400190565b60405180910390a15050565b610897612a99565b806000036108e75760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610789565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc90602001610752565b610924612a99565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e90602001610752565b805160009082906020146109705750600092915050565b60005b8151811015610aaa5760028110156109ee57604160f81b82828151811061099c5761099c614098565b01602001516001600160f81b03191610806109da5750605a60f81b8282815181106109c9576109c9614098565b01602001516001600160f81b031916115b156109e9575060009392505050565b610a9a565b6109f96005826140c4565b600403610a3657818181518110610a1257610a12614098565b6020910101516001600160f81b031916600160fd1b146109e9575060009392505050565b603060f81b828281518110610a4d57610a4d614098565b01602001516001600160f81b0319161080610a8b5750603960f81b828281518110610a7a57610a7a614098565b01602001516001600160f81b031916115b15610a9a575060009392505050565b610aa3816140ee565b9050610973565b5060019392505050565b33600090815260046020526040902054610ae05760405162461bcd60e51b815260040161078990614061565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610b765760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610789565b6009546000848152600360205260409020600101544291610b9691614107565b1115610bf05760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610789565b60008381526003602052604090205415610c4c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610789565b828103610c9b5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610789565b81546001600160a01b0316610ceb5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610789565b60008511610d4a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610789565b600854851115610db95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610789565b6001600160a01b038416610e0f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610789565b6000610e1b8488612af3565b90508583600401541015610ed057600080610e3589612b5e565b9150915087818660040154610e4a9190614107565b1015610e8f5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610789565b610e998583612d06565b80856004016000828254610ead9190614107565b9250508190555080856005016000828254610ec8919061411a565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188546001600160a01b03199081169189169190911789559551600189018054909716971696909617909455905160028601555160038086019190915591516004948501558883525291822083905584018054889290610f7390849061411a565b9250508190555085836005016000828254610f8e9190614107565b9091555050600783018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b61100d612a99565b806000036110715760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610789565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a80390602001610752565b33600090815260046020526040902054156111125760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610789565b600061111e8383612d68565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a3505050565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156111cd57602002820191906000526020600020905b8154815260200190600101908083116111b9575b50505050509050919050565b6111e1612a99565b600254600160a01b900460ff16156112315760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610789565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156112ce57602002820191906000526020600020905b8154815260200190600101908083116112ba575b50505050509050805167ffffffffffffffff8111156112ef576112ef61399b565b60405190808252806020026020018201604052801561132857816020015b6113156137b2565b81526020019060019003908161130d5790505b50915060005b81518110156115ca57600082828151811061134b5761134b614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b0316825260018101805494965092949193909291840191906113999061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546113c59061412d565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b5050505050815260200160028201805461142b9061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546114579061412d565b80156114a45780601f10611479576101008083540402835291602001916114a4565b820191906000526020600020905b81548152906001019060200180831161148757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820180548060200260200160405190810160405280929190818152602001828054801561152457602002820191906000526020600020905b815481526020019060010190808311611510575b5050505050815250509050600061153a83612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284608001516115969190614107565b8152508685815181106115ab576115ab614098565b6020026020010181905250505050806115c3906140ee565b905061132e565b5050919050565b6115d9612a99565b66b1a2bc2ec5000081111561163b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610789565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e72567090602001610752565b600080600061167f8585612de2565b92509250925061168f8282613138565b82606001518260050160008282546116a7919061411a565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516116e89083613211565b6116f28184613303565b5050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166117795760405162461bcd60e51b815260040161078990614161565b80546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6117dc8184613138565b81606001518160050160008282546117f4919061411a565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516118359082613211565b61183f8383613303565b505050565b6000805b82518110156119a557600083828151811061186557611865614098565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6000806118e984612b5e565b915091506118f78383612d06565b8083600401546119079190614107565b6119119087614107565b955080836005016000828254611927919061411a565b9091555050825460048401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c643129061196e908590614107565b60405190815260200160405180910390a3600060048401556119908484613211565b505050508061199e906140ee565b9050611848565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f9190614190565b611a3f612a99565b611a4960006134e1565b565b6060815167ffffffffffffffff811115611a6757611a6761399b565b604051908082528060200260200182016040528015611aa057816020015b611a8d6137b2565b815260200190600190039081611a855790505b50905060005b8251811015611d42576000838281518110611ac357611ac3614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b031682526001810180549496509294919390929184019190611b119061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3d9061412d565b8015611b8a5780601f10611b5f57610100808354040283529160200191611b8a565b820191906000526020600020905b815481529060010190602001808311611b6d57829003601f168201915b50505050508152602001600282018054611ba39061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcf9061412d565b8015611c1c5780601f10611bf157610100808354040283529160200191611c1c565b820191906000526020600020905b815481529060010190602001808311611bff57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c9c57602002820191906000526020600020905b815481526020019060010190808311611c88575b50505050508152505090506000611cb283612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b03168152602001908152602001600020600001548152602001838152602001828460800151611d0e9190614107565b815250858581518110611d2357611d23614098565b602002602001018190525050505080611d3b906140ee565b9050611aa6565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b5050505050815250509050919050565b611dea612a99565b80600003611e445760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610789565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b3990602001610752565b33600090815260046020526040902054611ea55760405162461bcd60e51b815260040161078990614061565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f145760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610789565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f4a9060020183613531565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610883565b611f886137de565b6000828152600560209081526040918290208251610100810190935280546001600160a01b031683526001810180549192840191611fc59061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff19061412d565b801561203e5780601f106120135761010080835404028352916020019161203e565b820191906000526020600020905b81548152906001019060200180831161202157829003601f168201915b505050505081526020016002820180546120579061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546120839061412d565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611dd25760200282019190600052602060002090815481526020019060010190808311611dbe575050505050815250509050919050565b3360009081526004602052604090205461218a5760405162461bcd60e51b815260040161078990614061565b61219384610959565b6121ce5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b21024a120a760a11b6044820152606401610789565b336000908152600460205260409020600101546005116122305760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610789565b6007548210156122a15760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610789565b600081116122ff5760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610789565b600081612314670de0b6b3a7640000856141b2565b61231e91906141c9565b600d80549192506000919082612333836140ee565b90915550336000818152600460209081526040808320600180820180548083018255908652848620018790558251610100810184529586528584018d81528684018d9052606087018c9052608087018c905260a0870186905260c087018a90528351868152808601855260e0880152878652600590945291909320845181546001600160a01b0319166001600160a01b039091161781559151949550919390918201906123e0908261422b565b50604082015160028201906123f5908261422b565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151805161243991600784019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190614190565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a350505050505050565b600560205260009081526040902080546001820180546001600160a01b0390921692916125469061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546125729061412d565b80156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b5050505050908060020180546125d49061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546126009061412d565b801561264d5780601f106126225761010080835404028352916020019161264d565b820191906000526020600020905b81548152906001019060200180831161263057829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b612677612a99565b6001600160a01b0381166126d95760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610789565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e490602001610752565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361279c5760405162461bcd60e51b815260040161078990614161565b336000908152600460205260408082205483516001600160a01b031683529120541461280a5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610789565b60408082015160009081526005602052206128258184613138565b816060015181600401600082825461283d9190614107565b9091555050606082015160058201805460009061285b90849061411a565b9091555050505050565b606060008267ffffffffffffffff8111156128825761288261399b565b6040519080825280602002602001820160405280156128bb57816020015b6128a8613877565b8152602001906001900390816128a05790505b50905060005b838110156129c05760008585838181106128dd576128dd614098565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061295c5761295c614098565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106129a2576129a2614098565b60200260200101819052505050806129b9906140ee565b90506128c1565b5090505b92915050565b6129d2612a99565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c4190602001610752565b612a28612a99565b6001600160a01b038116612a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b612a96816134e1565b50565b6000546001600160a01b03163314611a495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610789565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b567f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826140c4565b949350505050565b60008181526005602090815260408083206007018054825181850281018501909352808352606094938493929190830182828015612bbb57602002820191906000526020600020905b815481526020019060010190808311612ba7575b50505050509050805167ffffffffffffffff811115612bdc57612bdc61399b565b604051908082528060200260200182016040528015612c05578160200160208202803683370190505b50925060005b8151811015612cff57600060066000848481518110612c2c57612c2c614098565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a549192504291612c9f91614107565b1015612cee57828281518110612cb757612cb7614098565b6020026020010151858381518110612cd157612cd1614098565b60209081029190910101526060810151612ceb9085614107565b93505b50612cf8816140ee565b9050612c0b565b5050915091565b60005b815181101561183f576000801b828281518110612d2857612d28614098565b602002602001015114612d5857612d5883838381518110612d4b57612d4b614098565b6020026020010151613138565b612d61816140ee565b9050612d09565b60015460405163dc28b2bf60e01b815260009182916001600160a01b039091169063dc28b2bf90612d9f9087908790600401614340565b6020604051808303816000875af1158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190614381565b612dea61389f565b600254604051630c44b27760e01b815260009182918291829182918291829182916001600160a01b0390911690630c44b27790612e2d908e908e9060040161439a565b60c0604051808303816000875af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7091906143db565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151989e50969c50949a509298509096509450909216612eff5760405162461bcd60e51b815260040161078990614161565b8682608001511115612f5e5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610789565b8581600201604051602001612f739190614425565b6040516020818303038152906040528051906020012014612fd65760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b8481600101604051602001612feb9190614425565b604051602081830303815290604052805190602001201461304e5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b81516001600160a01b031660009081526004602052604090205484146130b65760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610789565b8060060154670de0b6b3a764000083606001516130d391906141b2565b6130dd91906141c9565b8810156131255760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610789565b9099509750955050505050509250925092565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b0319908116909355805490921690915592849055839055919091556131dc6007840183613531565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816004015482600501546132279190614107565b90508060000361183f5781546001600160a01b03166000908152600460205260409020613257906001018461365a565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155906132c560018301826138e0565b6132d36002830160006138e0565b60038201600090556004820160009055600582016000905560068201600090556007820160006116f2919061391a565b6000600b546000146133cf57670de0b6b3a7640000600b54836060015161332a91906141b2565b61333491906141c9565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cd9190614190565b505b60008183606001516133e1919061411a565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015613458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347c9190614190565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061358d8480548060200260200160405190810160405280929190818152602001828054801561358257602002820191906000526020600020905b81548152602001906001019080831161356e575b5050505050846136ff565b91509150806135d65760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610789565b83546000906135e79060019061411a565b905080831461362c5784818154811061360257613602614098565b906000526020600020015485848154811061361f5761361f614098565b6000918252602090912001555b8480548061363c5761363c61449b565b60019003818190600052602060002001600090559055505b50505050565b6000806136b6848054806020026020016040519081016040528092919081815260200182805480156136ab57602002820191906000526020600020905b815481526020019060010190808311613697575b505050505084613762565b91509150806135d65760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610789565b81516000908190815b8181101561374f578486828151811061372357613723614098565b60200260200101510361373d5792506001915061375b9050565b80613747816140ee565b915050613708565b50600019600092509250505b9250929050565b81516000908190815b8181101561374f578486828151811061378657613786614098565b6020026020010151036137a05792506001915061375b9050565b806137aa816140ee565b91505061376b565b60408051608081018252600080825260208201529081016137d16137de565b8152602001600081525090565b60405180610100016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b50613873929150613934565b5090565b6040805160608101909152600081526020810161389261389f565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5080546138ec9061412d565b6000825580601f106138fc575050565b601f016020900490600052602060002090810190612a969190613934565b5080546000825590600052602060002090810190612a9691905b5b808211156138735760008155600101613935565b6001600160a01b0381168114612a9657600080fd5b60006020828403121561397057600080fd5b813561397b81613949565b9392505050565b60006020828403121561399457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139da576139da61399b565b604052919050565b600082601f8301126139f357600080fd5b813567ffffffffffffffff811115613a0d57613a0d61399b565b613a20601f8201601f19166020016139b1565b818152846020838601011115613a3557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613a6457600080fd5b813567ffffffffffffffff811115613a7b57600080fd5b612b56848285016139e2565b600080600060608486031215613a9c57600080fd5b83359250602084013591506040840135613ab581613949565b809150509250925092565b60006101808284031215611d4257600080fd5b6000808284036103e0811215613ae857600080fd5b61026080821215613af857600080fd5b849350613b0786828701613ac0565b925050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613b4a57835183529284019291840191600101613b2e565b50909695505050505050565b60008060408385031215613b6957600080fd5b8235613b7481613949565b91506020830135613b8481613949565b809150509250929050565b6000815180845260005b81811015613bb557602081850181015186830182015201613b99565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613c0557815187529582019590820190600101613be9565b509495945050505050565b600061010060018060a01b0383511684526020830151816020860152613c3882860182613b8f565b91505060408301518482036040860152613c528282613b8f565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152613c948282613bd5565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613d1b57603f1989840301855281516080815185528882015189860152878201518189870152613cfa82870182613c10565b60609384015196909301959095525094870194925090860190600101613cc4565b509098975050505050505050565b600080828403610600811215613d3e57600080fd5b61048080821215613af857600080fd5b60006020808385031215613d6157600080fd5b823567ffffffffffffffff80821115613d7957600080fd5b818501915085601f830112613d8d57600080fd5b813581811115613d9f57613d9f61399b565b8060051b9150613db08483016139b1565b8181529183018401918481019088841115613dca57600080fd5b938501935b83851015613de857843582529385019390850190613dcf565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613e415783518252928401926001929092019190840190613e21565b509695505050505050565b60208152600061397b6020830184613c10565b60008060008060808587031215613e7557600080fd5b843567ffffffffffffffff80821115613e8d57600080fd5b613e99888389016139e2565b95506020870135915080821115613eaf57600080fd5b50613ebc878288016139e2565b949794965050505060408301359260600135919050565b6001600160a01b038816815260e060208201819052600090613ef790830189613b8f565b8281036040840152613f098189613b8f565b9150508560608301528460808301528360a08301528260c083015298975050505050505050565b60008060208385031215613f4357600080fd5b823567ffffffffffffffff80821115613f5b57600080fd5b818501915085601f830112613f6f57600080fd5b813581811115613f7e57600080fd5b8660208260051b8501011115613f9357600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015614028578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613fc2565b5091979650505050505050565b6000806040838503121561404857600080fd5b823561405381613949565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600060018201614100576141006140d8565b5060010190565b808201808211156129c4576129c46140d8565b818103818111156129c4576129c46140d8565b600181811c9082168061414157607f821691505b602082108103611d4257634e487b7160e01b600052602260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6000602082840312156141a257600080fd5b8151801515811461397b57600080fd5b80820281158282048414176129c4576129c46140d8565b6000826141d8576141d86140ae565b500490565b601f82111561183f57600081815260208120601f850160051c810160208610156142045750805b601f850160051c820191505b8181101561422357828155600101614210565b505050505050565b815167ffffffffffffffff8111156142455761424561399b565b61425981614253845461412d565b846141dd565b602080601f83116001811461428e57600084156142765750858301515b600019600386901b1c1916600185901b178555614223565b600085815260208120601f198616915b828110156142bd5788860151825594840194600190910190840161429e565b50858210156142db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8060005b6002811015613654576040808386379384019391909101906001016142ef565b604081833761432460408301604083016142eb565b604060c0820160c0840137610100608081830182850137505050565b6103e08101604084833761435a60408301604086016142eb565b604060c0850160c0840137610100610160818601828501375061397b61026083018461430f565b60006020828403121561439357600080fd5b5051919050565b610600810160408483376143b460408301604086016142eb565b604060c0850160c0840137610100610380818601828501375061397b61048083018461430f565b60008060008060008060c087890312156143f457600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008083546144338161412d565b6001828116801561444b57600181146144605761448f565b60ff198416875282151583028701945061448f565b8760005260208060002060005b858110156144865781548a82015290840190820161446d565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea264697066735822122065e22fa908aee992b0d94bfe127dfd0a35300e5aac610167919a4c44944ddd6164736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106102745760003560e01c8063715018a611610151578063b3fa4c01116100c3578063ecb3dc8811610087578063ecb3dc8814610657578063ecd618f014610660578063ed1692b814610680578063eea1d19714610693578063f2fde38b146106a6578063fbf15b1f146106b957600080fd5b8063b3fa4c0114610602578063d55f960d14610615578063d9478d2014610628578063e215ad591461063b578063e279d9641461064e57600080fd5b80639087beff116101155780639087beff1461057a5780639b357b5a1461058d5780639f9fb968146105a0578063a00555b3146105c0578063a1a954b7146105d3578063b02c43d0146105dc57600080fd5b8063715018a6146104b257806371a28f69146104ba5780637b510fe8146104cd5780638da5cb5b146104ed5780639021578a146104fe57600080fd5b806342987349116101ea5780635081d952116101ae5780635081d9521461043d5780635dd765151461045d57806360e0d21e14610470578063645006ca1461048357806366ec84191461048c578063711347621461049f57600080fd5b806342987349146103db57806343a170e6146103ee5780634595bba014610401578063485cc95514610421578063495223e71461043457600080fd5b80632a80cda31161023c5780632a80cda31461032c578063317dcc961461033f5780633389d5d514610352578063392e53cd146103755780633adba28a146103895780633e413bee1461039c57600080fd5b80630f1ef98c14610279578063133de6cb146102c5578063148172da146102da57806314ec32fa146102ed578063238c849414610323575b600080fd5b6102b261028736600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102d86102d336600461395e565b610700565b005b6102d86102e8366004613982565b61075d565b6102b26102fb36600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102b2600b5481565b6102d861033a366004613982565b61088f565b6102d861034d366004613982565b61091c565b610365610360366004613a52565b610959565b60405190151581526020016102bc565b60025461036590600160a01b900460ff1681565b6102d8610397366004613a87565b610ab4565b6103c37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102bc565b6102d86103e9366004613982565b611005565b6102d86103fc366004613ad3565b6110a6565b61041461040f36600461395e565b611160565b6040516102bc9190613b12565b6102d861042f366004613b56565b6111d9565b6102b260095481565b61045061044b36600461395e565b61126c565b6040516102bc9190613c9d565b6102d861046b366004613982565b6115d1565b6102d861047e366004613d29565b611670565b6102b260075481565b6102d861049a366004613982565b6116f9565b6102d86104ad366004613d4e565b611844565b6102d8611a37565b6104506104c8366004613d4e565b611a4b565b6104e06104db36600461395e565b611d48565b6040516102bc9190613df4565b6000546001600160a01b03166103c3565b61054761050c366004613982565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102bc565b6102d8610588366004613982565b611de2565b6102d861059b366004613982565b611e79565b6105b36105ae366004613982565b611f80565b6040516102bc9190613e4c565b6102d86105ce366004613e5f565b61215e565b6102b2600a5481565b6105ef6105ea366004613982565b61251a565b6040516102bc9796959493929190613ed3565b6102d861061036600461395e565b61266f565b6102d8610623366004613982565b612727565b600c546103c3906001600160a01b031681565b6001546103c3906001600160a01b031681565b6102b260085481565b6102b2600d5481565b61067361066e366004613f30565b612865565b6040516102bc9190613fa5565b6102d861068e36600461395e565b6129ca565b6002546103c3906001600160a01b031681565b6102d86106b436600461395e565b612a20565b6103656106c7366004614035565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b610708612a99565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107925760405162461bcd60e51b815260040161078990614061565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff161561080b5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610789565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108839083908590918252602082015260400190565b60405180910390a15050565b610897612a99565b806000036108e75760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610789565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc90602001610752565b610924612a99565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e90602001610752565b805160009082906020146109705750600092915050565b60005b8151811015610aaa5760028110156109ee57604160f81b82828151811061099c5761099c614098565b01602001516001600160f81b03191610806109da5750605a60f81b8282815181106109c9576109c9614098565b01602001516001600160f81b031916115b156109e9575060009392505050565b610a9a565b6109f96005826140c4565b600403610a3657818181518110610a1257610a12614098565b6020910101516001600160f81b031916600160fd1b146109e9575060009392505050565b603060f81b828281518110610a4d57610a4d614098565b01602001516001600160f81b0319161080610a8b5750603960f81b828281518110610a7a57610a7a614098565b01602001516001600160f81b031916115b15610a9a575060009392505050565b610aa3816140ee565b9050610973565b5060019392505050565b33600090815260046020526040902054610ae05760405162461bcd60e51b815260040161078990614061565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610b765760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610789565b6009546000848152600360205260409020600101544291610b9691614107565b1115610bf05760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610789565b60008381526003602052604090205415610c4c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610789565b828103610c9b5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610789565b81546001600160a01b0316610ceb5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610789565b60008511610d4a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610789565b600854851115610db95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610789565b6001600160a01b038416610e0f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610789565b6000610e1b8488612af3565b90508583600401541015610ed057600080610e3589612b5e565b9150915087818660040154610e4a9190614107565b1015610e8f5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610789565b610e998583612d06565b80856004016000828254610ead9190614107565b9250508190555080856005016000828254610ec8919061411a565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188546001600160a01b03199081169189169190911789559551600189018054909716971696909617909455905160028601555160038086019190915591516004948501558883525291822083905584018054889290610f7390849061411a565b9250508190555085836005016000828254610f8e9190614107565b9091555050600783018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b61100d612a99565b806000036110715760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610789565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a80390602001610752565b33600090815260046020526040902054156111125760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610789565b600061111e8383612d68565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a3505050565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156111cd57602002820191906000526020600020905b8154815260200190600101908083116111b9575b50505050509050919050565b6111e1612a99565b600254600160a01b900460ff16156112315760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610789565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156112ce57602002820191906000526020600020905b8154815260200190600101908083116112ba575b50505050509050805167ffffffffffffffff8111156112ef576112ef61399b565b60405190808252806020026020018201604052801561132857816020015b6113156137b2565b81526020019060019003908161130d5790505b50915060005b81518110156115ca57600082828151811061134b5761134b614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b0316825260018101805494965092949193909291840191906113999061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546113c59061412d565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b5050505050815260200160028201805461142b9061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546114579061412d565b80156114a45780601f10611479576101008083540402835291602001916114a4565b820191906000526020600020905b81548152906001019060200180831161148757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820180548060200260200160405190810160405280929190818152602001828054801561152457602002820191906000526020600020905b815481526020019060010190808311611510575b5050505050815250509050600061153a83612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284608001516115969190614107565b8152508685815181106115ab576115ab614098565b6020026020010181905250505050806115c3906140ee565b905061132e565b5050919050565b6115d9612a99565b66b1a2bc2ec5000081111561163b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610789565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e72567090602001610752565b600080600061167f8585612de2565b92509250925061168f8282613138565b82606001518260050160008282546116a7919061411a565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516116e89083613211565b6116f28184613303565b5050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166117795760405162461bcd60e51b815260040161078990614161565b80546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6117dc8184613138565b81606001518160050160008282546117f4919061411a565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516118359082613211565b61183f8383613303565b505050565b6000805b82518110156119a557600083828151811061186557611865614098565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6000806118e984612b5e565b915091506118f78383612d06565b8083600401546119079190614107565b6119119087614107565b955080836005016000828254611927919061411a565b9091555050825460048401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c643129061196e908590614107565b60405190815260200160405180910390a3600060048401556119908484613211565b505050508061199e906140ee565b9050611848565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f9190614190565b611a3f612a99565b611a4960006134e1565b565b6060815167ffffffffffffffff811115611a6757611a6761399b565b604051908082528060200260200182016040528015611aa057816020015b611a8d6137b2565b815260200190600190039081611a855790505b50905060005b8251811015611d42576000838281518110611ac357611ac3614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b031682526001810180549496509294919390929184019190611b119061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3d9061412d565b8015611b8a5780601f10611b5f57610100808354040283529160200191611b8a565b820191906000526020600020905b815481529060010190602001808311611b6d57829003601f168201915b50505050508152602001600282018054611ba39061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcf9061412d565b8015611c1c5780601f10611bf157610100808354040283529160200191611c1c565b820191906000526020600020905b815481529060010190602001808311611bff57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c9c57602002820191906000526020600020905b815481526020019060010190808311611c88575b50505050508152505090506000611cb283612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b03168152602001908152602001600020600001548152602001838152602001828460800151611d0e9190614107565b815250858581518110611d2357611d23614098565b602002602001018190525050505080611d3b906140ee565b9050611aa6565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b5050505050815250509050919050565b611dea612a99565b80600003611e445760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610789565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b3990602001610752565b33600090815260046020526040902054611ea55760405162461bcd60e51b815260040161078990614061565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f145760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610789565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f4a9060020183613531565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610883565b611f886137de565b6000828152600560209081526040918290208251610100810190935280546001600160a01b031683526001810180549192840191611fc59061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff19061412d565b801561203e5780601f106120135761010080835404028352916020019161203e565b820191906000526020600020905b81548152906001019060200180831161202157829003601f168201915b505050505081526020016002820180546120579061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546120839061412d565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611dd25760200282019190600052602060002090815481526020019060010190808311611dbe575050505050815250509050919050565b3360009081526004602052604090205461218a5760405162461bcd60e51b815260040161078990614061565b61219384610959565b6121ce5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b21024a120a760a11b6044820152606401610789565b336000908152600460205260409020600101546005116122305760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610789565b6007548210156122a15760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610789565b600081116122ff5760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610789565b600081612314670de0b6b3a7640000856141b2565b61231e91906141c9565b600d80549192506000919082612333836140ee565b90915550336000818152600460209081526040808320600180820180548083018255908652848620018790558251610100810184529586528584018d81528684018d9052606087018c9052608087018c905260a0870186905260c087018a90528351868152808601855260e0880152878652600590945291909320845181546001600160a01b0319166001600160a01b039091161781559151949550919390918201906123e0908261422b565b50604082015160028201906123f5908261422b565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151805161243991600784019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190614190565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a350505050505050565b600560205260009081526040902080546001820180546001600160a01b0390921692916125469061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546125729061412d565b80156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b5050505050908060020180546125d49061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546126009061412d565b801561264d5780601f106126225761010080835404028352916020019161264d565b820191906000526020600020905b81548152906001019060200180831161263057829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b612677612a99565b6001600160a01b0381166126d95760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610789565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e490602001610752565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361279c5760405162461bcd60e51b815260040161078990614161565b336000908152600460205260408082205483516001600160a01b031683529120541461280a5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610789565b60408082015160009081526005602052206128258184613138565b816060015181600401600082825461283d9190614107565b9091555050606082015160058201805460009061285b90849061411a565b9091555050505050565b606060008267ffffffffffffffff8111156128825761288261399b565b6040519080825280602002602001820160405280156128bb57816020015b6128a8613877565b8152602001906001900390816128a05790505b50905060005b838110156129c05760008585838181106128dd576128dd614098565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061295c5761295c614098565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106129a2576129a2614098565b60200260200101819052505050806129b9906140ee565b90506128c1565b5090505b92915050565b6129d2612a99565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c4190602001610752565b612a28612a99565b6001600160a01b038116612a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b612a96816134e1565b50565b6000546001600160a01b03163314611a495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610789565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b567f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826140c4565b949350505050565b60008181526005602090815260408083206007018054825181850281018501909352808352606094938493929190830182828015612bbb57602002820191906000526020600020905b815481526020019060010190808311612ba7575b50505050509050805167ffffffffffffffff811115612bdc57612bdc61399b565b604051908082528060200260200182016040528015612c05578160200160208202803683370190505b50925060005b8151811015612cff57600060066000848481518110612c2c57612c2c614098565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a549192504291612c9f91614107565b1015612cee57828281518110612cb757612cb7614098565b6020026020010151858381518110612cd157612cd1614098565b60209081029190910101526060810151612ceb9085614107565b93505b50612cf8816140ee565b9050612c0b565b5050915091565b60005b815181101561183f576000801b828281518110612d2857612d28614098565b602002602001015114612d5857612d5883838381518110612d4b57612d4b614098565b6020026020010151613138565b612d61816140ee565b9050612d09565b60015460405163dc28b2bf60e01b815260009182916001600160a01b039091169063dc28b2bf90612d9f9087908790600401614340565b6020604051808303816000875af1158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190614381565b612dea61389f565b600254604051630c44b27760e01b815260009182918291829182918291829182916001600160a01b0390911690630c44b27790612e2d908e908e9060040161439a565b60c0604051808303816000875af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7091906143db565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151989e50969c50949a509298509096509450909216612eff5760405162461bcd60e51b815260040161078990614161565b8682608001511115612f5e5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610789565b8581600201604051602001612f739190614425565b6040516020818303038152906040528051906020012014612fd65760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b8481600101604051602001612feb9190614425565b604051602081830303815290604052805190602001201461304e5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b81516001600160a01b031660009081526004602052604090205484146130b65760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610789565b8060060154670de0b6b3a764000083606001516130d391906141b2565b6130dd91906141c9565b8810156131255760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610789565b9099509750955050505050509250925092565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b0319908116909355805490921690915592849055839055919091556131dc6007840183613531565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816004015482600501546132279190614107565b90508060000361183f5781546001600160a01b03166000908152600460205260409020613257906001018461365a565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155906132c560018301826138e0565b6132d36002830160006138e0565b60038201600090556004820160009055600582016000905560068201600090556007820160006116f2919061391a565b6000600b546000146133cf57670de0b6b3a7640000600b54836060015161332a91906141b2565b61333491906141c9565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cd9190614190565b505b60008183606001516133e1919061411a565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015613458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347c9190614190565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061358d8480548060200260200160405190810160405280929190818152602001828054801561358257602002820191906000526020600020905b81548152602001906001019080831161356e575b5050505050846136ff565b91509150806135d65760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610789565b83546000906135e79060019061411a565b905080831461362c5784818154811061360257613602614098565b906000526020600020015485848154811061361f5761361f614098565b6000918252602090912001555b8480548061363c5761363c61449b565b60019003818190600052602060002001600090559055505b50505050565b6000806136b6848054806020026020016040519081016040528092919081815260200182805480156136ab57602002820191906000526020600020905b815481526020019060010190808311613697575b505050505084613762565b91509150806135d65760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610789565b81516000908190815b8181101561374f578486828151811061372357613723614098565b60200260200101510361373d5792506001915061375b9050565b80613747816140ee565b915050613708565b50600019600092509250505b9250929050565b81516000908190815b8181101561374f578486828151811061378657613786614098565b6020026020010151036137a05792506001915061375b9050565b806137aa816140ee565b91505061376b565b60408051608081018252600080825260208201529081016137d16137de565b8152602001600081525090565b60405180610100016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b50613873929150613934565b5090565b6040805160608101909152600081526020810161389261389f565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5080546138ec9061412d565b6000825580601f106138fc575050565b601f016020900490600052602060002090810190612a969190613934565b5080546000825590600052602060002090810190612a9691905b5b808211156138735760008155600101613935565b6001600160a01b0381168114612a9657600080fd5b60006020828403121561397057600080fd5b813561397b81613949565b9392505050565b60006020828403121561399457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139da576139da61399b565b604052919050565b600082601f8301126139f357600080fd5b813567ffffffffffffffff811115613a0d57613a0d61399b565b613a20601f8201601f19166020016139b1565b818152846020838601011115613a3557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613a6457600080fd5b813567ffffffffffffffff811115613a7b57600080fd5b612b56848285016139e2565b600080600060608486031215613a9c57600080fd5b83359250602084013591506040840135613ab581613949565b809150509250925092565b60006101808284031215611d4257600080fd5b6000808284036103e0811215613ae857600080fd5b61026080821215613af857600080fd5b849350613b0786828701613ac0565b925050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613b4a57835183529284019291840191600101613b2e565b50909695505050505050565b60008060408385031215613b6957600080fd5b8235613b7481613949565b91506020830135613b8481613949565b809150509250929050565b6000815180845260005b81811015613bb557602081850181015186830182015201613b99565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613c0557815187529582019590820190600101613be9565b509495945050505050565b600061010060018060a01b0383511684526020830151816020860152613c3882860182613b8f565b91505060408301518482036040860152613c528282613b8f565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152613c948282613bd5565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613d1b57603f1989840301855281516080815185528882015189860152878201518189870152613cfa82870182613c10565b60609384015196909301959095525094870194925090860190600101613cc4565b509098975050505050505050565b600080828403610600811215613d3e57600080fd5b61048080821215613af857600080fd5b60006020808385031215613d6157600080fd5b823567ffffffffffffffff80821115613d7957600080fd5b818501915085601f830112613d8d57600080fd5b813581811115613d9f57613d9f61399b565b8060051b9150613db08483016139b1565b8181529183018401918481019088841115613dca57600080fd5b938501935b83851015613de857843582529385019390850190613dcf565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613e415783518252928401926001929092019190840190613e21565b509695505050505050565b60208152600061397b6020830184613c10565b60008060008060808587031215613e7557600080fd5b843567ffffffffffffffff80821115613e8d57600080fd5b613e99888389016139e2565b95506020870135915080821115613eaf57600080fd5b50613ebc878288016139e2565b949794965050505060408301359260600135919050565b6001600160a01b038816815260e060208201819052600090613ef790830189613b8f565b8281036040840152613f098189613b8f565b9150508560608301528460808301528360a08301528260c083015298975050505050505050565b60008060208385031215613f4357600080fd5b823567ffffffffffffffff80821115613f5b57600080fd5b818501915085601f830112613f6f57600080fd5b813581811115613f7e57600080fd5b8660208260051b8501011115613f9357600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015614028578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613fc2565b5091979650505050505050565b6000806040838503121561404857600080fd5b823561405381613949565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600060018201614100576141006140d8565b5060010190565b808201808211156129c4576129c46140d8565b818103818111156129c4576129c46140d8565b600181811c9082168061414157607f821691505b602082108103611d4257634e487b7160e01b600052602260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6000602082840312156141a257600080fd5b8151801515811461397b57600080fd5b80820281158282048414176129c4576129c46140d8565b6000826141d8576141d86140ae565b500490565b601f82111561183f57600081815260208120601f850160051c810160208610156142045750805b601f850160051c820191505b8181101561422357828155600101614210565b505050505050565b815167ffffffffffffffff8111156142455761424561399b565b61425981614253845461412d565b846141dd565b602080601f83116001811461428e57600084156142765750858301515b600019600386901b1c1916600185901b178555614223565b600085815260208120601f198616915b828110156142bd5788860151825594840194600190910190840161429e565b50858210156142db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8060005b6002811015613654576040808386379384019391909101906001016142ef565b604081833761432460408301604083016142eb565b604060c0820160c0840137610100608081830182850137505050565b6103e08101604084833761435a60408301604086016142eb565b604060c0850160c0840137610100610160818601828501375061397b61026083018461430f565b60006020828403121561439357600080fd5b5051919050565b610600810160408483376143b460408301604086016142eb565b604060c0850160c0840137610100610380818601828501375061397b61048083018461430f565b60008060008060008060c087890312156143f457600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008083546144338161412d565b6001828116801561444b57600181146144605761448f565b60ff198416875282151583028701945061448f565b8760005260208060002060005b858110156144865781548a82015290840190820161446d565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea264697066735822122065e22fa908aee992b0d94bfe127dfd0a35300e5aac610167919a4c44944ddd6164736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the idHash being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(string,string,uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_garantiIban\": \"IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\",\n          \"_garantiName\": \"Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"params\": {\n          \"_bodyHashProof\": \"Parameters and signals for body hash proof\",\n          \"_proof\": \"Parameters and signals for send email proof\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"params\": {\n          \"_bodyHashProof\": \"Parameters and signals for body hash proof\",\n          \"_proof\": \"Parameters and signals for registration email proof\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the idHash being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(string,string,uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a idHash from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4181,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IGarantiRegistrationProcessor)6876\"\n      },\n      {\n        \"astId\": 4184,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IGarantiSendProcessor)6921\"\n      },\n      {\n        \"astId\": 4186,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4191,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4145_storage)\"\n      },\n      {\n        \"astId\": 4196,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)4082_storage)\"\n      },\n      {\n        \"astId\": 4201,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)4100_storage)\"\n      },\n      {\n        \"astId\": 4206,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)4121_storage)\"\n      },\n      {\n        \"astId\": 4208,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4210,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4212,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4214,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4216,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4218,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4220,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiRegistrationProcessor)6876\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IGarantiSendProcessor)6921\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)4082_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct GarantiRamp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)4082_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4145_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct GarantiRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)4145_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)4121_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct GarantiRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)4121_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)4100_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct GarantiRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)4100_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(AccountInfo)4082_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4078,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"idHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4081,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)4137_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 4132,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 4136,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)4100_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 4084,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4086,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"garantiIban\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4088,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"garantiName\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4090,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4092,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4094,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4096,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4099,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_struct(GlobalAccountInfo)4145_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4139,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4141,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4144,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)4137_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)4121_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 4112,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4114,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4116,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4118,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4120,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/GarantiRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0x6E6eAc7e8995fb6d44aE5E559874B8C969010293\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_garantiMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"_bodyHashVerifier\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bodyHashVerifier\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[11]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[11]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x066a0dac449fb10a31f6da6ba6247c4a434932c746cf233c1d44f5dd762fc7aa\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x6E6eAc7e8995fb6d44aE5E559874B8C969010293\",\n    \"transactionIndex\": 15,\n    \"gasUsed\": \"1843349\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000040020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000010000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xaf32769c5c137a515475bbc9162ce37e51e14931a25dff705d610fb4543eed0a\",\n    \"transactionHash\": \"0x066a0dac449fb10a31f6da6ba6247c4a434932c746cf233c1d44f5dd762fc7aa\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 15,\n        \"blockNumber\": 12215463,\n        \"transactionHash\": \"0x066a0dac449fb10a31f6da6ba6247c4a434932c746cf233c1d44f5dd762fc7aa\",\n        \"address\": \"0x6E6eAc7e8995fb6d44aE5E559874B8C969010293\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 47,\n        \"blockHash\": \"0xaf32769c5c137a515475bbc9162ce37e51e14931a25dff705d610fb4543eed0a\"\n      }\n    ],\n    \"blockNumber\": 12215463,\n    \"cumulativeGasUsed\": \"3437372\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171\",\n    \"0xB68b9bCBEA54540F41c8F597aC6415F33114016f\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"0xA52E53Efa715a2909328Bffb3d7f2eE2B84A5Cb7\",\n    \"garanti@info.garantibbva.com.tr\",\n    \"0\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_garantiMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"_bodyHashVerifier\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bodyHashVerifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"internalType\\\":\\\"struct IGarantiRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\\\":\\\"GarantiRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/garanti_registration_verifier.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiRegistrationProcessor } from \\\\\\\"./interfaces/IGarantiRegistrationProcessor.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiRegistrationProcessor is\\\\n    Groth16Verifier,\\\\n    IGarantiRegistrationProcessor,\\\\n    BaseProcessorV2\\\\n{\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n        /* ============ Public Variables ============ */\\\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _garantiMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {\\\\n        bodyHashVerifier = _bodyHashVerifier;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n        require(\\\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\\\n            \\\\\\\"Invalid body hash proof\\\\\\\"\\\\n        );\\\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [5:10] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [10] is the packed userIdHash\\\\n        userIdHash = bytes32(_proof.signals[10]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n\\\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\\\n        require(intermediateHash == inputHash, \\\\\\\"Invalid intermediate or output hash\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x898ba95c7383b134a46d8cb477e8550d4d5e317e56bbb44618a722fec6a22aa6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[11] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0f70e4fda7e77a71110f14b943f0be18414d3fde1f89611659f3bfa61e7d220\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/garanti_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\\\n    \\\\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\\\n    \\\\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\\\n    \\\\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\\\n    \\\\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\\\n    \\\\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\\\n    \\\\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\\\n    \\\\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\\\n    \\\\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\\\n    \\\\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\\\n    \\\\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\\\n    \\\\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x684fdc3f6538962fc0a9ddf24d2a302d1ca140e068a784c0e9723843b5aeee57\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b50604051620021e7380380620021e783398101604081905262000034916200013b565b85858584846200004433620000bc565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002fe565b506004555050600580546001600160a01b0319166001600160a01b03969096169590951790945550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200015557600080fd5b865162000162816200010c565b8096505060208088015162000177816200010c565b60408901519096506200018a816200010c565b60608901519095506200019d816200010c565b60808901519094506001600160401b0380821115620001bb57600080fd5b818a0191508a601f830112620001d057600080fd5b815181811115620001e557620001e562000125565b604051601f8201601f19908116603f0116810190838211818310171562000210576200021062000125565b816040528281528d868487010111156200022957600080fd5b600093505b828410156200024d57848401860151818501870152928501926200022e565b600086848301015280975050505050505060a087015190509295509295509295565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a62000125565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611dfa620003ed600039600081816101150152610c6f0152611dfa6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063b870676c116100a2578063d0b71f9911610071578063d0b71f9914610224578063dbac582114610237578063dc28b2bf14610240578063f2fde38b14610253578063f6c7226b1461026657600080fd5b8063b870676c146101e1578063b9c6ea87146101f4578063c0d05fed14610207578063ced1e9781461021c57600080fd5b80638da5cb5b116100de5780638da5cb5b146101975780639895e5b7146101a8578063a8ef333f146101bb578063b2a3fda4146101ce57600080fd5b806315d276e11461011057806319d09152146101545780633d0c9cc414610177578063715018a61461018d575b600080fd5b6101377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101676101623660046117e6565b610279565b604051901515815260200161014b565b61017f600781565b60405190815260200161014b565b6101956102ed565b005b6000546001600160a01b0316610137565b600554610137906001600160a01b031681565b600154610137906001600160a01b031681565b6101956101dc3660046117e6565b610301565b600254610137906001600160a01b031681565b610167610202366004611810565b61030e565b61020f610b18565b60405161014b919061189a565b61020f610ba6565b6101956102323660046118e2565b610c38565b61017f60045481565b61017f61024e366004611906565b610c62565b6101956102613660046118e2565b610fa3565b610195610274366004611964565b611019565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e79190611a15565b92915050565b6102f5611031565b6102ff600061108b565b565b610309611031565b600455565b6000610a54565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610346576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161037c576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103ad576000805260206000f35b5050505050565b7f152dbeb8b8ab5eac60f4eef36d566fc91e5bb94e9ef0a08ec6c32127b1e5a5f285527f141de924cf08572281bf199f2e95a5e4b2573700ac3bf62f391ea2c4fbf78cee60208601526000608086018661045187357f053ddcea331e82cb4f9383d3df2ceb5d593bd9818ac8fc8bb1067ba10e629aa37f25041758d837741ae0d2ef251976f958e3c2705396cea1e9274039c0b18e8d7c84610349565b6104a160208801357f03c565627ff60ffc102246e6011808710c2ded87eb016e91cb18da96b1f3133b7f02a65c41c7e83b0c9f02b9370500a2f8355a6bbd5b1d9b06c4aa66f8799a40b284610349565b6104f160408801357f2c5b5bbde6c28b0991602a967c1fe5e32c2246d7d2880808e48265fb448e8f127f1230e04a6fd464834afed47a0ceaaaf77075c298e0db455136f4c2e218552d2b84610349565b61054160608801357f120c68be04314a872c0c388ec55c9cf3b368684ba8a50dab6d2abfb8996527827f0fc0e7d2a54f0a5a5133c038fc67a6d078b688e3c7ce78d00afb06e5b795273284610349565b61059160808801357f23819bc7be63a25573e216a2fc729f78d4bd4733558a6a6a4e98d2e175497ab27f2e6c0c05c2879447c6a65803421ba7ec6b6ba7c636f85f8e6a9ea529716abd1784610349565b6105e160a08801357f0ba21ee1f8053b9ff0fb5e743a04ec8ea70d255d0da0cbeb96556b0744a9a19c7f25a1bb0f9d263a96e44514dcba335f1991134fb33e77bf8a98e400a14ba6724b84610349565b61063160c08801357f20ac36f76fb33007fe57317ad2a6f39b907fe7da3d0c817d30ef35869d9dc4fb7f181a3c6101a924a62e0423a93c5a8ee369634777d8c4d38a4e4f9f19c0c2198384610349565b61068160e08801357f07dea76d67502b94bb38d5cd0a11ffff409213105254477105eae49a52f4ea217f1ef2ffedde9413306e78a2d35b9e6ca44cc080626abd82b44da4a9abad937cfb84610349565b6106d26101008801357f2b4a0f65746c64cfdf33690e101dc7ad6ab74e9269f2fca0a3d102d7a074a8167f01f3543d78cc7400d2d3581aaea774bb4ef7529860d8fd1c25db5a5d9cf9e07384610349565b6107236101208801357f059775a03288dbaecef98e8bbbf58b3b18cbddab69166669fde01f14460255157f2858e3c69ac92153a24e1bca97f59caecbce8d6f6d7100c615b4262a4cce619484610349565b6107746101408801357f101766538ecad8f3ad02975172f78d4a1b68dfe85762b81cfc20b5c15aedce857f1b846bd35a2b1db5876801ef17b9c07aa4be33cbf19511eada4a1d6a6ae42ef284610349565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29f725293b71250bc0726fa86bb992cef8d0f14621c9e6f3406e5fcf75cf313b6102808201527f28490d221f4d7ac575e80205e97ce102920dd9df55b2a60d06b8f6a3e05da29d6102a08201527f1d24e4a220ebcbcac369fb98e10d1376e7e30320cb514e0c5ca30fa009196abd6102c08201527f0255acb82ef4a2aa399db24ba36decb1a273a6461348d19bb4dc2da8e8c816ca6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a6c6000840135610315565b610a796020840135610315565b610a866040840135610315565b610a936060840135610315565b610aa06080840135610315565b610aad60a0840135610315565b610aba60c0840135610315565b610ac760e0840135610315565b610ad5610100840135610315565b610ae3610120840135610315565b610af1610140840135610315565b610aff610160840135610315565b610b0c818486888a6103b4565b90508060005260206000f35b60038054610b2590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190611a37565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b606060038054610bb590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190611a37565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b610c40611031565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ce15760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163b9c6ea8760e01b8152309163b9c6ea8791610d149187919082019060c0830190610100840190600401611a95565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611a15565b610d915760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610cd8565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610dd091869182019060c0830190610100840190600401611ac7565b602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611a15565b610e5d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f660000000000000000006044820152606401610cd8565b610e6f836101000183610100016110db565b610e7d610100840135610279565b610ec95760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610cd8565b6000610edc84610100016005600a6111bc565b90506003604051610eed9190611b0e565b604051809103902081604051602001610f069190611b84565b6040516020818303038152906040528051906020012014610f695760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610cd8565b610f9884604051602001610f7d9190611ba0565b60405160208183030381529060405280519060200120611297565b505050610240013590565b610fab611031565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd8565b6103468161108b565b611021611031565b600361102d8282611c28565b5050565b6000546001600160a01b031633146102ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cd8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e08501528585013561010085015290850135610120808501919091528451808503909101815261014090930190935281519101208082146111b65760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b6064820152608401610cd8565b50505050565b606060006111ca8484611cfe565b60ff1667ffffffffffffffff8111156111e5576111e561194e565b60405190808252806020026020018201604052801561120e578160200160208202803683370190505b50905060ff84165b8360ff16811015611273578581600b811061123357611233611af8565b60200201358261124660ff881684611d17565b8151811061125657611256611af8565b60209081029190910101528061126b81611d2a565b915050611216565b5061128e600782516112859190611d43565b829060076113ab565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190611a15565b156113515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610cd8565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561139757600080fd5b505af11580156103ad573d6000803e3d6000fd5b60606000808386516113bd9190611d43565b67ffffffffffffffff8111156113d5576113d561194e565b6040519080825280601f01601f1916602001820160405280156113ff576020820181803683370190505b5090506000805b87518161ffff1610156115b6576000888261ffff168151811061142b5761142b611af8565b6020026020010151905060008767ffffffffffffffff8111156114505761145061194e565b604051908082528060200260200182016040528015611479578160200160208202803683370190505b50905060005b888110156114cb57611492816008611d43565b83901c8282815181106114a7576114a7611af8565b60ff90921660209283029190910190910152806114c381611d2a565b91505061147f565b5060005b888110156115a05760008282815181106114eb576114eb611af8565b602002602001015160ff16905080600014611563578060f81b87878151811061151657611516611af8565b60200101906001600160f81b031916908160001a9053508561153781611d2a565b96506115469050600289611d5a565b60ff1660000361155e5761155b600189611d8a565b97505b611586565b61156e600289611d5a565b60ff1660010361158657611583600189611d8a565b97505b5060089290921c918061159881611d2a565b9150506114cf565b50505080806115ae90611da3565b915050611406565b5060018360ff1610156116575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610cd8565b858111156116c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610cd8565b60006116d0836116dc565b98975050505050505050565b8051606090829060005b82518110156117315782818151811061170157611701611af8565b01602001516001600160f81b03191660000361171f57809150611731565b8061172981611d2a565b9150506116e6565b5060008167ffffffffffffffff81111561174d5761174d61194e565b6040519080825280601f01601f191660200182016040528015611777576020820181803683370190505b50905060005b828110156117dd5783818151811061179757611797611af8565b602001015160f81c60f81b8282815181106117b4576117b4611af8565b60200101906001600160f81b031916908160001a905350806117d581611d2a565b91505061177d565b50949350505050565b6000602082840312156117f857600080fd5b5035919050565b80604081018310156102e757600080fd5b60008060008061026080868803121561182857600080fd5b61183287876117ff565b945060c086018781111561184557600080fd5b60408701945061185588826117ff565b93505086818701111561186757600080fd5b50929591945092610100019150565b60005b83811015611891578181015183820152602001611879565b50506000910152565b60208152600082518060208401526118b9816040850160208701611876565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034657600080fd5b6000602082840312156118f457600080fd5b81356118ff816118cd565b9392505050565b6000808284036103e081121561191b57600080fd5b6102608082121561192b57600080fd5b84935061018061025f198301121561194257600080fd5b92959390920193505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561197657600080fd5b813567ffffffffffffffff8082111561198e57600080fd5b818401915084601f8301126119a257600080fd5b8135818111156119b4576119b461194e565b604051601f8201601f19908116603f011681019083821181831017156119dc576119dc61194e565b816040528281528760208487010111156119f557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a2757600080fd5b815180151581146118ff57600080fd5b600181811c90821680611a4b57607f821691505b602082108103611a6b57634e487b7160e01b600052602260045260246000fd5b50919050565b8060005b60028110156111b657604080838637938401939190910190600101611a75565b61026081016040868337611aac6040830186611a71565b60408460c08401376101608361010084013795945050505050565b61018081016040868337611ade6040830186611a71565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808354611b1c81611a37565b60018281168015611b345760018114611b4957611b78565b60ff1984168752821515830287019450611b78565b8760005260208060002060005b85811015611b6f5781548a820152908401908201611b56565b50505082870194505b50929695505050505050565b60008251611b96818460208701611876565b9190910192915050565b61026081016040838337611bba6040830160408501611a71565b604060c0840160c0840137610100610160818501828501375092915050565b601f821115611c2357600081815260208120601f850160051c81016020861015611c005750805b601f850160051c820191505b81811015611c1f57828155600101611c0c565b5050505b505050565b815167ffffffffffffffff811115611c4257611c4261194e565b611c5681611c508454611a37565b84611bd9565b602080601f831160018114611c8b5760008415611c735750858301515b600019600386901b1c1916600185901b178555611c1f565b600085815260208120601f198616915b82811015611cba57888601518255948401946001909101908401611c9b565b5085821015611cd85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102e7576102e7611ce8565b818103818111156102e7576102e7611ce8565b600060018201611d3c57611d3c611ce8565b5060010190565b80820281158282048414176102e7576102e7611ce8565b600060ff831680611d7b57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102e7576102e7611ce8565b600061ffff808316818103611dba57611dba611ce8565b600101939250505056fea26469706673582212208de4387db64c9febd9ce9e5854bce4ae5009b356183f943984fb0f53020e7b4b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063b870676c116100a2578063d0b71f9911610071578063d0b71f9914610224578063dbac582114610237578063dc28b2bf14610240578063f2fde38b14610253578063f6c7226b1461026657600080fd5b8063b870676c146101e1578063b9c6ea87146101f4578063c0d05fed14610207578063ced1e9781461021c57600080fd5b80638da5cb5b116100de5780638da5cb5b146101975780639895e5b7146101a8578063a8ef333f146101bb578063b2a3fda4146101ce57600080fd5b806315d276e11461011057806319d09152146101545780633d0c9cc414610177578063715018a61461018d575b600080fd5b6101377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101676101623660046117e6565b610279565b604051901515815260200161014b565b61017f600781565b60405190815260200161014b565b6101956102ed565b005b6000546001600160a01b0316610137565b600554610137906001600160a01b031681565b600154610137906001600160a01b031681565b6101956101dc3660046117e6565b610301565b600254610137906001600160a01b031681565b610167610202366004611810565b61030e565b61020f610b18565b60405161014b919061189a565b61020f610ba6565b6101956102323660046118e2565b610c38565b61017f60045481565b61017f61024e366004611906565b610c62565b6101956102613660046118e2565b610fa3565b610195610274366004611964565b611019565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e79190611a15565b92915050565b6102f5611031565b6102ff600061108b565b565b610309611031565b600455565b6000610a54565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610346576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161037c576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103ad576000805260206000f35b5050505050565b7f152dbeb8b8ab5eac60f4eef36d566fc91e5bb94e9ef0a08ec6c32127b1e5a5f285527f141de924cf08572281bf199f2e95a5e4b2573700ac3bf62f391ea2c4fbf78cee60208601526000608086018661045187357f053ddcea331e82cb4f9383d3df2ceb5d593bd9818ac8fc8bb1067ba10e629aa37f25041758d837741ae0d2ef251976f958e3c2705396cea1e9274039c0b18e8d7c84610349565b6104a160208801357f03c565627ff60ffc102246e6011808710c2ded87eb016e91cb18da96b1f3133b7f02a65c41c7e83b0c9f02b9370500a2f8355a6bbd5b1d9b06c4aa66f8799a40b284610349565b6104f160408801357f2c5b5bbde6c28b0991602a967c1fe5e32c2246d7d2880808e48265fb448e8f127f1230e04a6fd464834afed47a0ceaaaf77075c298e0db455136f4c2e218552d2b84610349565b61054160608801357f120c68be04314a872c0c388ec55c9cf3b368684ba8a50dab6d2abfb8996527827f0fc0e7d2a54f0a5a5133c038fc67a6d078b688e3c7ce78d00afb06e5b795273284610349565b61059160808801357f23819bc7be63a25573e216a2fc729f78d4bd4733558a6a6a4e98d2e175497ab27f2e6c0c05c2879447c6a65803421ba7ec6b6ba7c636f85f8e6a9ea529716abd1784610349565b6105e160a08801357f0ba21ee1f8053b9ff0fb5e743a04ec8ea70d255d0da0cbeb96556b0744a9a19c7f25a1bb0f9d263a96e44514dcba335f1991134fb33e77bf8a98e400a14ba6724b84610349565b61063160c08801357f20ac36f76fb33007fe57317ad2a6f39b907fe7da3d0c817d30ef35869d9dc4fb7f181a3c6101a924a62e0423a93c5a8ee369634777d8c4d38a4e4f9f19c0c2198384610349565b61068160e08801357f07dea76d67502b94bb38d5cd0a11ffff409213105254477105eae49a52f4ea217f1ef2ffedde9413306e78a2d35b9e6ca44cc080626abd82b44da4a9abad937cfb84610349565b6106d26101008801357f2b4a0f65746c64cfdf33690e101dc7ad6ab74e9269f2fca0a3d102d7a074a8167f01f3543d78cc7400d2d3581aaea774bb4ef7529860d8fd1c25db5a5d9cf9e07384610349565b6107236101208801357f059775a03288dbaecef98e8bbbf58b3b18cbddab69166669fde01f14460255157f2858e3c69ac92153a24e1bca97f59caecbce8d6f6d7100c615b4262a4cce619484610349565b6107746101408801357f101766538ecad8f3ad02975172f78d4a1b68dfe85762b81cfc20b5c15aedce857f1b846bd35a2b1db5876801ef17b9c07aa4be33cbf19511eada4a1d6a6ae42ef284610349565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29f725293b71250bc0726fa86bb992cef8d0f14621c9e6f3406e5fcf75cf313b6102808201527f28490d221f4d7ac575e80205e97ce102920dd9df55b2a60d06b8f6a3e05da29d6102a08201527f1d24e4a220ebcbcac369fb98e10d1376e7e30320cb514e0c5ca30fa009196abd6102c08201527f0255acb82ef4a2aa399db24ba36decb1a273a6461348d19bb4dc2da8e8c816ca6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a6c6000840135610315565b610a796020840135610315565b610a866040840135610315565b610a936060840135610315565b610aa06080840135610315565b610aad60a0840135610315565b610aba60c0840135610315565b610ac760e0840135610315565b610ad5610100840135610315565b610ae3610120840135610315565b610af1610140840135610315565b610aff610160840135610315565b610b0c818486888a6103b4565b90508060005260206000f35b60038054610b2590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190611a37565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b606060038054610bb590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190611a37565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b610c40611031565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ce15760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163b9c6ea8760e01b8152309163b9c6ea8791610d149187919082019060c0830190610100840190600401611a95565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611a15565b610d915760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610cd8565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610dd091869182019060c0830190610100840190600401611ac7565b602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611a15565b610e5d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f660000000000000000006044820152606401610cd8565b610e6f836101000183610100016110db565b610e7d610100840135610279565b610ec95760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610cd8565b6000610edc84610100016005600a6111bc565b90506003604051610eed9190611b0e565b604051809103902081604051602001610f069190611b84565b6040516020818303038152906040528051906020012014610f695760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610cd8565b610f9884604051602001610f7d9190611ba0565b60405160208183030381529060405280519060200120611297565b505050610240013590565b610fab611031565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd8565b6103468161108b565b611021611031565b600361102d8282611c28565b5050565b6000546001600160a01b031633146102ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cd8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e08501528585013561010085015290850135610120808501919091528451808503909101815261014090930190935281519101208082146111b65760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b6064820152608401610cd8565b50505050565b606060006111ca8484611cfe565b60ff1667ffffffffffffffff8111156111e5576111e561194e565b60405190808252806020026020018201604052801561120e578160200160208202803683370190505b50905060ff84165b8360ff16811015611273578581600b811061123357611233611af8565b60200201358261124660ff881684611d17565b8151811061125657611256611af8565b60209081029190910101528061126b81611d2a565b915050611216565b5061128e600782516112859190611d43565b829060076113ab565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190611a15565b156113515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610cd8565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561139757600080fd5b505af11580156103ad573d6000803e3d6000fd5b60606000808386516113bd9190611d43565b67ffffffffffffffff8111156113d5576113d561194e565b6040519080825280601f01601f1916602001820160405280156113ff576020820181803683370190505b5090506000805b87518161ffff1610156115b6576000888261ffff168151811061142b5761142b611af8565b6020026020010151905060008767ffffffffffffffff8111156114505761145061194e565b604051908082528060200260200182016040528015611479578160200160208202803683370190505b50905060005b888110156114cb57611492816008611d43565b83901c8282815181106114a7576114a7611af8565b60ff90921660209283029190910190910152806114c381611d2a565b91505061147f565b5060005b888110156115a05760008282815181106114eb576114eb611af8565b602002602001015160ff16905080600014611563578060f81b87878151811061151657611516611af8565b60200101906001600160f81b031916908160001a9053508561153781611d2a565b96506115469050600289611d5a565b60ff1660000361155e5761155b600189611d8a565b97505b611586565b61156e600289611d5a565b60ff1660010361158657611583600189611d8a565b97505b5060089290921c918061159881611d2a565b9150506114cf565b50505080806115ae90611da3565b915050611406565b5060018360ff1610156116575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610cd8565b858111156116c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610cd8565b60006116d0836116dc565b98975050505050505050565b8051606090829060005b82518110156117315782818151811061170157611701611af8565b01602001516001600160f81b03191660000361171f57809150611731565b8061172981611d2a565b9150506116e6565b5060008167ffffffffffffffff81111561174d5761174d61194e565b6040519080825280601f01601f191660200182016040528015611777576020820181803683370190505b50905060005b828110156117dd5783818151811061179757611797611af8565b602001015160f81c60f81b8282815181106117b4576117b4611af8565b60200101906001600160f81b031916908160001a905350806117d581611d2a565b91505061177d565b50949350505050565b6000602082840312156117f857600080fd5b5035919050565b80604081018310156102e757600080fd5b60008060008061026080868803121561182857600080fd5b61183287876117ff565b945060c086018781111561184557600080fd5b60408701945061185588826117ff565b93505086818701111561186757600080fd5b50929591945092610100019150565b60005b83811015611891578181015183820152602001611879565b50506000910152565b60208152600082518060208401526118b9816040850160208701611876565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034657600080fd5b6000602082840312156118f457600080fd5b81356118ff816118cd565b9392505050565b6000808284036103e081121561191b57600080fd5b6102608082121561192b57600080fd5b84935061018061025f198301121561194257600080fd5b92959390920193505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561197657600080fd5b813567ffffffffffffffff8082111561198e57600080fd5b818401915084601f8301126119a257600080fd5b8135818111156119b4576119b461194e565b604051601f8201601f19908116603f011681019083821181831017156119dc576119dc61194e565b816040528281528760208487010111156119f557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a2757600080fd5b815180151581146118ff57600080fd5b600181811c90821680611a4b57607f821691505b602082108103611a6b57634e487b7160e01b600052602260045260246000fd5b50919050565b8060005b60028110156111b657604080838637938401939190910190600101611a75565b61026081016040868337611aac6040830186611a71565b60408460c08401376101608361010084013795945050505050565b61018081016040868337611ade6040830186611a71565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808354611b1c81611a37565b60018281168015611b345760018114611b4957611b78565b60ff1984168752821515830287019450611b78565b8760005260208060002060005b85811015611b6f5781548a820152908401908201611b56565b50505082870194505b50929695505050505050565b60008251611b96818460208701611876565b9190910192915050565b61026081016040838337611bba6040830160408501611a71565b604060c0840160c0840137610100610160818501828501375092915050565b601f821115611c2357600081815260208120601f850160051c81016020861015611c005750805b601f850160051c820191505b81811015611c1f57828155600101611c0c565b5050505b505050565b815167ffffffffffffffff811115611c4257611c4261194e565b611c5681611c508454611a37565b84611bd9565b602080601f831160018114611c8b5760008415611c735750858301515b600019600386901b1c1916600185901b178555611c1f565b600085815260208120601f198616915b82811015611cba57888601518255948401946001909101908401611c9b565b5085821015611cd85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102e7576102e7611ce8565b818103818111156102e7576102e7611ce8565b600060018201611d3c57611d3c611ce8565b5060010190565b80820281158282048414176102e7576102e7611ce8565b600060ff831680611d7b57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102e7576102e7611ce8565b600061ffff808316818103611dba57611dba611ce8565b600101939250505056fea26469706673582212208de4387db64c9febd9ce9e5854bce4ae5009b356183f943984fb0f53020e7b4b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3392,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3566\"\n      },\n      {\n        \"astId\": 3395,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3771\"\n      },\n      {\n        \"astId\": 3397,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3399,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 6169,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"bodyHashVerifier\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_contract(IGarantiBodySuffixHashVerifier)6841\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiBodySuffixHashVerifier)6841\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3566\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3771\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/GarantiSendProcessor.json",
    "content": "{\n  \"address\": \"0x1048dd39f95aBE7712291752B63f61BD397c695E\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_garantiMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"_bodyHashVerifier\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bodyHashVerifier\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperNameHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[28]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[28]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x782731909cf46e1c7e7b06e22c7dfb28c36446608535a6693304f5d293fb5505\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x1048dd39f95aBE7712291752B63f61BD397c695E\",\n    \"transactionIndex\": 24,\n    \"gasUsed\": \"2404301\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000080000000040000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x570e490071339d8286352a7570a299c74697453700fec0e3c186694070e41ce3\",\n    \"transactionHash\": \"0x782731909cf46e1c7e7b06e22c7dfb28c36446608535a6693304f5d293fb5505\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 24,\n        \"blockNumber\": 12215466,\n        \"transactionHash\": \"0x782731909cf46e1c7e7b06e22c7dfb28c36446608535a6693304f5d293fb5505\",\n        \"address\": \"0x1048dd39f95aBE7712291752B63f61BD397c695E\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 76,\n        \"blockHash\": \"0x570e490071339d8286352a7570a299c74697453700fec0e3c186694070e41ce3\"\n      }\n    ],\n    \"blockNumber\": 12215466,\n    \"cumulativeGasUsed\": \"5297162\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171\",\n    \"0xB68b9bCBEA54540F41c8F597aC6415F33114016f\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"0xA52E53Efa715a2909328Bffb3d7f2eE2B84A5Cb7\",\n    \"garanti@info.garantibbva.com.tr\",\n    \"30\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"b37c1ae3295cdbee97a5fae6e06eede9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_garantiMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"_bodyHashVerifier\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bodyHashVerifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"internalType\\\":\\\"struct IGarantiSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperNameHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiSendProcessor.sol\\\":\\\"GarantiSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbe0863ae4a59b5b7e5f6b554ac86e3d15e4f51c54974cc89fff8f0df2864787a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/garanti_send_verifier.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiSendProcessor } from \\\\\\\"./interfaces/IGarantiSendProcessor.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 7;\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _garantiMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {\\\\n        bodyHashVerifier = _bodyHashVerifier;\\\\n    }\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperNameHash,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n        require(\\\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\\\n            \\\\\\\"Invalid body hash proof\\\\\\\"\\\\n        );\\\\n\\\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [5:10] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\\\n\\\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\\\n        // parse and convert to a unix timestamp\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\\\n\\\\n        // Signals [19] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\\\n\\\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\\\n\\\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\\\n\\\\n        // Signals [14] is intentHash\\\\n        intentHash = bytes32(_proof.signals[27]);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n\\\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\\\n        require(intermediateHash == inputHash, \\\\\\\"Invalid intermediate or output hash\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x81ae73e29bc87913b8746b041a6d208c3d0fedd21f80d42be44546d8e19ef10f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[28] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70a70e2bf4861b7095bff34a55b10da9bc705735e40bed6104e179c0ecc3da25\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/garanti_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\\\n    \\\\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\\\n    \\\\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\\\n    \\\\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\\\n    \\\\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\\\n    \\\\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\\\n    \\\\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\\\n    \\\\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\\\n    \\\\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\\\n    \\\\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\\\n    \\\\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\\\n    \\\\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\\\n    \\\\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\\\n    \\\\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\\\n    \\\\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\\\n    \\\\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\\\n    \\\\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\\\n    \\\\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\\\n    \\\\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\\\n    \\\\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\\\n    \\\\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\\\n    \\\\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\\\n    \\\\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\\\n    \\\\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\\\n    \\\\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\\\n    \\\\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\\\n    \\\\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\\\n    \\\\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\\\n    \\\\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 416)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 448)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 480)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 512)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 544)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 576)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 608)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 640)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 672)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 704)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 736)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 768)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 800)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 832)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 864)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 896)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xc792f59c7816b5ce83fbdb4350c0efbf7272f4a9e862b5f2307666bae5d90d8c\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162002bae38038062002bae83398101604081905262000034916200013b565b85858584846200004433620000bc565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002fe565b506004555050600580546001600160a01b0319166001600160a01b03969096169590951790945550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200015557600080fd5b865162000162816200010c565b8096505060208088015162000177816200010c565b60408901519096506200018a816200010c565b60608901519095506200019d816200010c565b60808901519094506001600160401b0380821115620001bb57600080fd5b818a0191508a601f830112620001d057600080fd5b815181811115620001e557620001e562000125565b604051601f8201601f19908116603f0116810190838211818310171562000210576200021062000125565b816040528281528d868487010111156200022957600080fd5b600093505b828410156200024d57848401860151818501870152928501926200022e565b600086848301015280975050505050505060a087015190509295509295509295565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a62000125565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516127c1620003ed6000396000818161014f01526102a501526127c16000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610243578063dbac582114610256578063f2fde38b1461026d578063f6c7226b1461028057600080fd5b8063b2a3fda414610200578063b870676c14610213578063c0d05fed14610226578063ced1e9781461023b57600080fd5b8063715018a6116100d3578063715018a6146101bf5780638da5cb5b146101c95780639895e5b7146101da578063a8ef333f146101ed57600080fd5b80630c44b2771461010557806315d276e11461014a57806319d09152146101895780635b2d12ea146101ac575b600080fd5b6101186101133660046120ea565b610293565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b6101717f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610141565b61019c610197366004612132565b61068e565b6040519015158152602001610141565b61019c6101ba36600461215c565b610702565b6101c7611558565b005b6000546001600160a01b0316610171565b600554610171906001600160a01b031681565b600154610171906001600160a01b031681565b6101c761020e366004612132565b61156c565b600254610171906001600160a01b031681565b61022e611579565b60405161014191906121e6565b61022e611607565b6101c761025136600461222e565b611699565b61025f60045481565b604051908152602001610141565b6101c761027b36600461222e565b6116c3565b6101c761028e366004612261565b611739565b60008080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103175760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b60408051632d96897560e11b81523091635b2d12ea9161034a918c919082019060c0830190610100840190600401612336565b602060405180830381865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b9190612368565b6103c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161030e565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610406918b9182019060c083019061010084019060040161238a565b602060405180830381865afa158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190612368565b6104935760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f66000000000000000000604482015260640161030e565b6104a588610100018861010001611751565b6104b361010089013561068e565b6104ff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161030e565b600061051289610100016005600a611832565b90506003604051610523919061240b565b60405180910390208160405160200161053c9190612481565b604051602081830303815290604052805190602001201461059f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161030e565b6105c1600b60fa1b60066105ba6101008d0160176019611832565b919061190d565b96506004546105e260006105dc8c61010001600a600c611832565b90611aea565b6105ec91906124b3565b955061042089013592506106076101008a01600c6012611832565b6040516020016106179190612481565b604051602081830303815290604052805190602001209450610640896101000160126017611832565b6040516020016106509190612481565b60408051808303601f19018152919052805160209091012093506106786104408a0135611b02565b5094979396929550909350916104609091013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190612368565b92915050565b60006113a6565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061073a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610770576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806107a1576000805260206000f35b5050505050565b7f23fe0119e0d86d98fef3296d3987953338f409989ee0d25c2e6f65f1ac69a0ce85527f01c6e591e4f2be7957d3c4d6e6a4bc56531b0b5853fae4cbbb9979dc3fb4054760208601526000608086018661084587357f22ab60c4aec5bc92a88fb158ea2f8650a673a4c6b22d1129ac1d00be9390f9b47f0c6c5c5e9cd44842f22ea4148cb673cd03856d7a1470fcbadeedfc16e4fdeada8461073d565b61089560208801357f101cf9529c1420aba7bd89319bbe0a2d90c912fdfc582d65c26d563341eb4e047f0ca42b1575a9a329c09d91b81f8b84c130808565de3467e32e109ac740ab9b6e8461073d565b6108e560408801357f089d945945e413f66f09d7d05eced536c1b1c76af63307988e5602c5fa18a2647f19e936c17e4e70f8d4a74a0c5d3c0b6ca8882523a94617e4a8eed449efe2d63e8461073d565b61093560608801357f2a7d9db6e93fe306547d1509e3152be1ad664b5a56700e6d01e1b0ad177562227f2570aa6d600dcb3626e9bdedd465d8f4d67f1662ea70e514fcccdc37dbeb30628461073d565b61098560808801357f22441bd33d5f7d352f09f043001ead6d8dce01fe4f1e06f6d52a3ec025a50e477f2f62d4ab058625a42df361a06e432ea669df600b018d57a3cc9e06d3b32352908461073d565b6109d560a08801357f2bd98244eb34f527cddde82bc7ecd3d82572341b6723c7e204b4b13b4483a0067f2bc1835204d308c4560a3db92bffeb83d72eee6fcc8c286c5f46b11ff20819718461073d565b610a2560c08801357f076ee4439bed6ba9c0363880a2a678899b2ca3f4a8b60c954e4ef908658a959a7f1a1de9f43ef35c391fcc525fe1350dbf6158cb4b977402b318e7a69646b4d9038461073d565b610a7560e08801357f0ff1e251abd89fcb1a7d7933e30545ed1d70fdaa8aefaf38e4f0a8d7a03bc41e7f08162360d15cfd2c53d5ed4f2a5ced2cddc4ca82ce6094b2155d53bc934317798461073d565b610ac66101008801357f2675a0ba71a63d06d61dd6379583ad1c910138768349d0028ab3341a9ddd97c67f061570d382129dff2bac14d938281bc6c434663611bffd8ebae841e89b3a91438461073d565b610b176101208801357f2e7ee0dfebd18a5dce23ca2c9281caadd1e64d18a299c052a315130f01acd7857f198da0e315822dc430064816fa30bff8dc44b12dcaf3bb1f7969e1ed3d1f123c8461073d565b610b676101408801357f1f1dbe73fe0b80437353249d8a85e029446996809fc833c20d4f2ce5298fc0397e7795fe454ffc3f3e74f9da55cdce061a5e0b00097ddc642b0ce7246bbd5c468461073d565b610bb86101608801357f12273cff18addf941caf2bfcca416d3ff48b65a5c23f2470379ccc91c1a1988a7f0b125c630f757966a1277c4ba48ee8f917dc2355c9b0ae1e344611c66de4f6c08461073d565b610c096101808801357f128f40c4e75ffaad2b197a6a59752a2a47c91a4cca174dc0efab9f0286c52d5d7f1d63fa7d27b65bae515baf04e661a140a4f6c0429067223beb3b7ab4c36d2ffe8461073d565b610c5a6101a08801357f2ca69ffae97a540015d7c340ba9d751bdddd22c1226e850f47b86fba3bc9c4ee7f2776a05d98ee9432c323b360cae02e275acf2a8d0af78ac0fee9e017c63c60c98461073d565b610cab6101c08801357f2b6af433c35897a0f9458c8c8dc529ae00bd2f485e0fd1eb1aa9c33510d8b5af7f26668060050e6db758e60e3b944075a05b1708c45c0a7b74609ddcf2e78396658461073d565b610cfc6101e08801357f087083b6345e3b3a634f91ebac116834623185ce32bee1b57b80bf249e5082dc7f2b742c812404bde4218c3c0d3830669c3bdaf023717c8c6e16342dcd7fae8dcb8461073d565b610d4d6102008801357f0613ef91c62c4fe8695af930288e88015cb0db3f9421f9bd29da3675aa6403177f110e8f6a568e37356c1f05b9f063142461b41e4869e76784d10ef0c52c1422308461073d565b610d9e6102208801357f14420a530bff2b7dbc9956771e90b019ca0035fcd22623c064145c7de21d64127f029819dce317f0ed390d1e4525fb803cd0594a5fc1cd708cc118bf8b46d906d78461073d565b610def6102408801357f08d51bc7ed9e0fa0a16095a14d1f08e59a542a37610dc382c154dba6021eb65e7f12f54cc9fc215b9665fcec7f0ea84278ccfdec9ce0721b3d54c8aad79dadaf2e8461073d565b610e406102608801357f1a5601de789a9b9676133a0ca9c5db25d5a96113c9c975e7a102cec68848a4b07f23fd9af7d041dbb03d11a3431c72b5a460a1d36c9c8794d2d3b76093d6dbba3f8461073d565b610e916102808801357f1f20e53fb46193851de0c5290fe68ef454d2c0aee9d718d3a26dc1b9a0d1fbf37f0119d365c9bd85d15ae0cfd05222329bedbd2b5af1152bb01a06fd6e927d72df8461073d565b610ee16102a08801357e3c7a3b50dc6c29bbecafaf5c20327657603b3f5cdf7e1cfe0b9a872c8937557f0573d6da8283a957bede0e1d662a7826475a7f3503b61ce6731cda9e05b9061f8461073d565b610f326102c08801357f17899f38cd9c61264b3a0b6bd8849bccb8d7752a18e26ac11d755f3dde8b61097f169a46074f60fe92e7e2f51c1cb9f1ef137bd9a056c3391eb9f6a7c656ce6f3e8461073d565b610f836102e08801357f288723a08481f3ba64b49862bb693af72875ed303cba67d71d79ac19605ebb067f100e99c7a85374b98df7f70dee671d985be259cf23b941d97c9903742aec653d8461073d565b610fd46103008801357f094162cf3f32de9b93a59ef13c9a33ac297fd5b803cd9a6b7c888510375d67207f1df59b2a12d7a478bb3abc00b26d86973722485658d0466c5bcb7136b8d00ee88461073d565b6110256103208801357f26d2dd8bcb721ddddf7a89fce7a8174360bfde331abacdcc4e95a544437623c97f222355ee8b12fd4b953be489ce7ac9e0c45c41ae9f9a3e818018a2ef27c8fe868461073d565b6110766103408801357f0ac9b2a5b59662bfe8d866a43ff5280402ceaff7bf4d0d3321bd5cffb8238cbf7f118feff08485cffea53d0e5750f0cfad7d5f6415985d002708c0ba4cdb806d778461073d565b6110c66103608801357f1ef601660e69a4d6b550f31e03b229bc114ae46a0dbc611a88c5f2b9da5d67637e2b50469bb49cfb2b946d134a99c282cb9ae18a70ce144bf7bbbe74be9e5cd48461073d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f2421d5e11b841e97bba6ebf4f6c52f5e7068b4cac03cfe14b850dab7b03cb7416102808201527f16cda08f8f6fd30da8c340e73ad4829d593f0b6e9adddda9cf9e7992704f60b46102a08201527f29b8959bb7032f74cf68b6fd6b3ae134f46034af7754bff13dd000fb177fad8f6102c08201527f2e43943d84a2aa708872610f2ad74308fe43ac6599953f160297ad9fdac814776102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526113be6000840135610709565b6113cb6020840135610709565b6113d86040840135610709565b6113e56060840135610709565b6113f26080840135610709565b6113ff60a0840135610709565b61140c60c0840135610709565b61141960e0840135610709565b611427610100840135610709565b611435610120840135610709565b611443610140840135610709565b611451610160840135610709565b61145f610180840135610709565b61146d6101a0840135610709565b61147b6101c0840135610709565b6114896101e0840135610709565b611497610200840135610709565b6114a5610220840135610709565b6114b3610240840135610709565b6114c1610260840135610709565b6114cf610280840135610709565b6114dd6102a0840135610709565b6114eb6102c0840135610709565b6114f96102e0840135610709565b611507610300840135610709565b611515610320840135610709565b611523610340840135610709565b611531610360840135610709565b61153f610380840135610709565b61154c818486888a6107a8565b90508060005260206000f35b611560611c16565b61156a6000611c70565b565b611574611c16565b600455565b60038054611586906123d1565b80601f01602080910402602001604051908101604052809291908181526020018280546115b2906123d1565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b505050505081565b606060038054611616906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906123d1565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b6116a1611c16565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6116cb611c16565b6001600160a01b0381166117305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030e565b61073a81611c70565b611741611c16565b600361174d8282612515565b5050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e085015285850135610100850152908501356101208085019190915284518085039091018152610140909301909352815191012080821461182c5760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b606482015260840161030e565b50505050565b6060600061184084846125d5565b60ff1667ffffffffffffffff81111561185b5761185b61224b565b604051908082528060200260200182016040528015611884578160200160208202803683370190505b50905060ff84165b8360ff168110156118e9578581601c81106118a9576118a96123bb565b6020020135826118bc60ff8816846125ee565b815181106118cc576118cc6123bb565b6020908102919091010152806118e181612601565b91505061188c565b50611904600782516118fb919061261a565b82906007611cc0565b95945050505050565b600083818080805b8451811015611a6357603060f81b858281518110611935576119356123bb565b01602001516001600160f81b031916108015906119765750603960f81b858281518110611964576119646123bb565b01602001516001600160f81b03191611155b156119b957603085828151811061198f5761198f6123bb565b01602001516119a1919060f81c6125ee565b6119ac85600a61261a565b6119b691906124b3565b93505b81156119cd57826119c981612601565b9350505b876001600160f81b0319168582815181106119ea576119ea6123bb565b01602001516001600160f81b03191603611a51578115611a4c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161030e565b600191505b80611a5b81612601565b915050611915565b5085821115611abf5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161030e565b611ac982876125ee565b611ad490600a612715565b611ade908461261a565b98975050505050505050565b6000611afb83601760f91b8461190d565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190612368565b15611bbc5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161030e565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015611c0257600080fd5b505af11580156107a1573d6000803e3d6000fd5b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651611cd2919061261a565b67ffffffffffffffff811115611cea57611cea61224b565b6040519080825280601f01601f191660200182016040528015611d14576020820181803683370190505b5090506000805b87518161ffff161015611ecb576000888261ffff1681518110611d4057611d406123bb565b6020026020010151905060008767ffffffffffffffff811115611d6557611d6561224b565b604051908082528060200260200182016040528015611d8e578160200160208202803683370190505b50905060005b88811015611de057611da781600861261a565b83901c828281518110611dbc57611dbc6123bb565b60ff9092166020928302919091019091015280611dd881612601565b915050611d94565b5060005b88811015611eb5576000828281518110611e0057611e006123bb565b602002602001015160ff16905080600014611e78578060f81b878781518110611e2b57611e2b6123bb565b60200101906001600160f81b031916908160001a90535085611e4c81612601565b9650611e5b9050600289612721565b60ff16600003611e7357611e70600189612751565b97505b611e9b565b611e83600289612721565b60ff16600103611e9b57611e98600189612751565b97505b5060089290921c9180611ead81612601565b915050611de4565b5050508080611ec39061276a565b915050611d1b565b5060018360ff161015611f6c5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161030e565b85811115611fda5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161030e565b6000611ade838051606090829060005b825181101561203557828181518110612005576120056123bb565b01602001516001600160f81b03191660000361202357809150612035565b8061202d81612601565b915050611fea565b5060008167ffffffffffffffff8111156120515761205161224b565b6040519080825280601f01601f19166020018201604052801561207b576020820181803683370190505b50905060005b828110156120e15783818151811061209b5761209b6123bb565b602001015160f81c60f81b8282815181106120b8576120b86123bb565b60200101906001600160f81b031916908160001a905350806120d981612601565b915050612081565b50949350505050565b6000808284036106008112156120ff57600080fd5b6104808082121561210f57600080fd5b84935061018061047f198301121561212657600080fd5b92959390920193505050565b60006020828403121561214457600080fd5b5035919050565b80604081018310156106fc57600080fd5b60008060008061048080868803121561217457600080fd5b61217e878761214b565b945060c086018781111561219157600080fd5b6040870194506121a1888261214b565b9350508681870111156121b357600080fd5b50929591945092610100019150565b60005b838110156121dd5781810151838201526020016121c5565b50506000910152565b60208152600082518060208401526122058160408501602087016121c2565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073a57600080fd5b60006020828403121561224057600080fd5b8135611afb81612219565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561227357600080fd5b813567ffffffffffffffff8082111561228b57600080fd5b818401915084601f83011261229f57600080fd5b8135818111156122b1576122b161224b565b604051601f8201601f19908116603f011681019083821181831017156122d9576122d961224b565b816040528281528760208487010111156122f257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b600281101561182c57604080838637938401939190910190600101612316565b6104808101604086833761234d6040830186612312565b60408460c08401376103808361010084013795945050505050565b60006020828403121561237a57600080fd5b81518015158114611afb57600080fd5b610180810160408683376123a16040830186612312565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612419816123d1565b60018281168015612431576001811461244657612475565b60ff1984168752821515830287019450612475565b8760005260208060002060005b8581101561246c5781548a820152908401908201612453565b50505082870194505b50929695505050505050565b600082516124938184602087016121c2565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106fc576106fc61249d565b601f82111561251057600081815260208120601f850160051c810160208610156124ed5750805b601f850160051c820191505b8181101561250c578281556001016124f9565b5050505b505050565b815167ffffffffffffffff81111561252f5761252f61224b565b6125438161253d84546123d1565b846124c6565b602080601f83116001811461257857600084156125605750858301515b600019600386901b1c1916600185901b17855561250c565b600085815260208120601f198616915b828110156125a757888601518255948401946001909101908401612588565b50858210156125c55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156106fc576106fc61249d565b818103818111156106fc576106fc61249d565b6000600182016126135761261361249d565b5060010190565b80820281158282048414176106fc576106fc61249d565b600181815b8085111561266c5781600019048211156126525761265261249d565b8085161561265f57918102915b93841c9390800290612636565b509250929050565b600082612683575060016106fc565b81612690575060006106fc565b81600181146126a657600281146126b0576126cc565b60019150506106fc565b60ff8411156126c1576126c161249d565b50506001821b6106fc565b5060208310610133831016604e8410600b84101617156126ef575081810a6106fc565b6126f98383612631565b806000190482111561270d5761270d61249d565b029392505050565b6000611afb8383612674565b600060ff83168061274257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156106fc576106fc61249d565b600061ffff8083168181036127815761278161249d565b600101939250505056fea2646970667358221220b68d775d23695c7993f4e8191809ed6a550eea8e913da4fdcf02358fa5577a5c64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610243578063dbac582114610256578063f2fde38b1461026d578063f6c7226b1461028057600080fd5b8063b2a3fda414610200578063b870676c14610213578063c0d05fed14610226578063ced1e9781461023b57600080fd5b8063715018a6116100d3578063715018a6146101bf5780638da5cb5b146101c95780639895e5b7146101da578063a8ef333f146101ed57600080fd5b80630c44b2771461010557806315d276e11461014a57806319d09152146101895780635b2d12ea146101ac575b600080fd5b6101186101133660046120ea565b610293565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b6101717f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610141565b61019c610197366004612132565b61068e565b6040519015158152602001610141565b61019c6101ba36600461215c565b610702565b6101c7611558565b005b6000546001600160a01b0316610171565b600554610171906001600160a01b031681565b600154610171906001600160a01b031681565b6101c761020e366004612132565b61156c565b600254610171906001600160a01b031681565b61022e611579565b60405161014191906121e6565b61022e611607565b6101c761025136600461222e565b611699565b61025f60045481565b604051908152602001610141565b6101c761027b36600461222e565b6116c3565b6101c761028e366004612261565b611739565b60008080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103175760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b60408051632d96897560e11b81523091635b2d12ea9161034a918c919082019060c0830190610100840190600401612336565b602060405180830381865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b9190612368565b6103c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161030e565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610406918b9182019060c083019061010084019060040161238a565b602060405180830381865afa158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190612368565b6104935760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f66000000000000000000604482015260640161030e565b6104a588610100018861010001611751565b6104b361010089013561068e565b6104ff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161030e565b600061051289610100016005600a611832565b90506003604051610523919061240b565b60405180910390208160405160200161053c9190612481565b604051602081830303815290604052805190602001201461059f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161030e565b6105c1600b60fa1b60066105ba6101008d0160176019611832565b919061190d565b96506004546105e260006105dc8c61010001600a600c611832565b90611aea565b6105ec91906124b3565b955061042089013592506106076101008a01600c6012611832565b6040516020016106179190612481565b604051602081830303815290604052805190602001209450610640896101000160126017611832565b6040516020016106509190612481565b60408051808303601f19018152919052805160209091012093506106786104408a0135611b02565b5094979396929550909350916104609091013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190612368565b92915050565b60006113a6565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061073a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610770576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806107a1576000805260206000f35b5050505050565b7f23fe0119e0d86d98fef3296d3987953338f409989ee0d25c2e6f65f1ac69a0ce85527f01c6e591e4f2be7957d3c4d6e6a4bc56531b0b5853fae4cbbb9979dc3fb4054760208601526000608086018661084587357f22ab60c4aec5bc92a88fb158ea2f8650a673a4c6b22d1129ac1d00be9390f9b47f0c6c5c5e9cd44842f22ea4148cb673cd03856d7a1470fcbadeedfc16e4fdeada8461073d565b61089560208801357f101cf9529c1420aba7bd89319bbe0a2d90c912fdfc582d65c26d563341eb4e047f0ca42b1575a9a329c09d91b81f8b84c130808565de3467e32e109ac740ab9b6e8461073d565b6108e560408801357f089d945945e413f66f09d7d05eced536c1b1c76af63307988e5602c5fa18a2647f19e936c17e4e70f8d4a74a0c5d3c0b6ca8882523a94617e4a8eed449efe2d63e8461073d565b61093560608801357f2a7d9db6e93fe306547d1509e3152be1ad664b5a56700e6d01e1b0ad177562227f2570aa6d600dcb3626e9bdedd465d8f4d67f1662ea70e514fcccdc37dbeb30628461073d565b61098560808801357f22441bd33d5f7d352f09f043001ead6d8dce01fe4f1e06f6d52a3ec025a50e477f2f62d4ab058625a42df361a06e432ea669df600b018d57a3cc9e06d3b32352908461073d565b6109d560a08801357f2bd98244eb34f527cddde82bc7ecd3d82572341b6723c7e204b4b13b4483a0067f2bc1835204d308c4560a3db92bffeb83d72eee6fcc8c286c5f46b11ff20819718461073d565b610a2560c08801357f076ee4439bed6ba9c0363880a2a678899b2ca3f4a8b60c954e4ef908658a959a7f1a1de9f43ef35c391fcc525fe1350dbf6158cb4b977402b318e7a69646b4d9038461073d565b610a7560e08801357f0ff1e251abd89fcb1a7d7933e30545ed1d70fdaa8aefaf38e4f0a8d7a03bc41e7f08162360d15cfd2c53d5ed4f2a5ced2cddc4ca82ce6094b2155d53bc934317798461073d565b610ac66101008801357f2675a0ba71a63d06d61dd6379583ad1c910138768349d0028ab3341a9ddd97c67f061570d382129dff2bac14d938281bc6c434663611bffd8ebae841e89b3a91438461073d565b610b176101208801357f2e7ee0dfebd18a5dce23ca2c9281caadd1e64d18a299c052a315130f01acd7857f198da0e315822dc430064816fa30bff8dc44b12dcaf3bb1f7969e1ed3d1f123c8461073d565b610b676101408801357f1f1dbe73fe0b80437353249d8a85e029446996809fc833c20d4f2ce5298fc0397e7795fe454ffc3f3e74f9da55cdce061a5e0b00097ddc642b0ce7246bbd5c468461073d565b610bb86101608801357f12273cff18addf941caf2bfcca416d3ff48b65a5c23f2470379ccc91c1a1988a7f0b125c630f757966a1277c4ba48ee8f917dc2355c9b0ae1e344611c66de4f6c08461073d565b610c096101808801357f128f40c4e75ffaad2b197a6a59752a2a47c91a4cca174dc0efab9f0286c52d5d7f1d63fa7d27b65bae515baf04e661a140a4f6c0429067223beb3b7ab4c36d2ffe8461073d565b610c5a6101a08801357f2ca69ffae97a540015d7c340ba9d751bdddd22c1226e850f47b86fba3bc9c4ee7f2776a05d98ee9432c323b360cae02e275acf2a8d0af78ac0fee9e017c63c60c98461073d565b610cab6101c08801357f2b6af433c35897a0f9458c8c8dc529ae00bd2f485e0fd1eb1aa9c33510d8b5af7f26668060050e6db758e60e3b944075a05b1708c45c0a7b74609ddcf2e78396658461073d565b610cfc6101e08801357f087083b6345e3b3a634f91ebac116834623185ce32bee1b57b80bf249e5082dc7f2b742c812404bde4218c3c0d3830669c3bdaf023717c8c6e16342dcd7fae8dcb8461073d565b610d4d6102008801357f0613ef91c62c4fe8695af930288e88015cb0db3f9421f9bd29da3675aa6403177f110e8f6a568e37356c1f05b9f063142461b41e4869e76784d10ef0c52c1422308461073d565b610d9e6102208801357f14420a530bff2b7dbc9956771e90b019ca0035fcd22623c064145c7de21d64127f029819dce317f0ed390d1e4525fb803cd0594a5fc1cd708cc118bf8b46d906d78461073d565b610def6102408801357f08d51bc7ed9e0fa0a16095a14d1f08e59a542a37610dc382c154dba6021eb65e7f12f54cc9fc215b9665fcec7f0ea84278ccfdec9ce0721b3d54c8aad79dadaf2e8461073d565b610e406102608801357f1a5601de789a9b9676133a0ca9c5db25d5a96113c9c975e7a102cec68848a4b07f23fd9af7d041dbb03d11a3431c72b5a460a1d36c9c8794d2d3b76093d6dbba3f8461073d565b610e916102808801357f1f20e53fb46193851de0c5290fe68ef454d2c0aee9d718d3a26dc1b9a0d1fbf37f0119d365c9bd85d15ae0cfd05222329bedbd2b5af1152bb01a06fd6e927d72df8461073d565b610ee16102a08801357e3c7a3b50dc6c29bbecafaf5c20327657603b3f5cdf7e1cfe0b9a872c8937557f0573d6da8283a957bede0e1d662a7826475a7f3503b61ce6731cda9e05b9061f8461073d565b610f326102c08801357f17899f38cd9c61264b3a0b6bd8849bccb8d7752a18e26ac11d755f3dde8b61097f169a46074f60fe92e7e2f51c1cb9f1ef137bd9a056c3391eb9f6a7c656ce6f3e8461073d565b610f836102e08801357f288723a08481f3ba64b49862bb693af72875ed303cba67d71d79ac19605ebb067f100e99c7a85374b98df7f70dee671d985be259cf23b941d97c9903742aec653d8461073d565b610fd46103008801357f094162cf3f32de9b93a59ef13c9a33ac297fd5b803cd9a6b7c888510375d67207f1df59b2a12d7a478bb3abc00b26d86973722485658d0466c5bcb7136b8d00ee88461073d565b6110256103208801357f26d2dd8bcb721ddddf7a89fce7a8174360bfde331abacdcc4e95a544437623c97f222355ee8b12fd4b953be489ce7ac9e0c45c41ae9f9a3e818018a2ef27c8fe868461073d565b6110766103408801357f0ac9b2a5b59662bfe8d866a43ff5280402ceaff7bf4d0d3321bd5cffb8238cbf7f118feff08485cffea53d0e5750f0cfad7d5f6415985d002708c0ba4cdb806d778461073d565b6110c66103608801357f1ef601660e69a4d6b550f31e03b229bc114ae46a0dbc611a88c5f2b9da5d67637e2b50469bb49cfb2b946d134a99c282cb9ae18a70ce144bf7bbbe74be9e5cd48461073d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f2421d5e11b841e97bba6ebf4f6c52f5e7068b4cac03cfe14b850dab7b03cb7416102808201527f16cda08f8f6fd30da8c340e73ad4829d593f0b6e9adddda9cf9e7992704f60b46102a08201527f29b8959bb7032f74cf68b6fd6b3ae134f46034af7754bff13dd000fb177fad8f6102c08201527f2e43943d84a2aa708872610f2ad74308fe43ac6599953f160297ad9fdac814776102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526113be6000840135610709565b6113cb6020840135610709565b6113d86040840135610709565b6113e56060840135610709565b6113f26080840135610709565b6113ff60a0840135610709565b61140c60c0840135610709565b61141960e0840135610709565b611427610100840135610709565b611435610120840135610709565b611443610140840135610709565b611451610160840135610709565b61145f610180840135610709565b61146d6101a0840135610709565b61147b6101c0840135610709565b6114896101e0840135610709565b611497610200840135610709565b6114a5610220840135610709565b6114b3610240840135610709565b6114c1610260840135610709565b6114cf610280840135610709565b6114dd6102a0840135610709565b6114eb6102c0840135610709565b6114f96102e0840135610709565b611507610300840135610709565b611515610320840135610709565b611523610340840135610709565b611531610360840135610709565b61153f610380840135610709565b61154c818486888a6107a8565b90508060005260206000f35b611560611c16565b61156a6000611c70565b565b611574611c16565b600455565b60038054611586906123d1565b80601f01602080910402602001604051908101604052809291908181526020018280546115b2906123d1565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b505050505081565b606060038054611616906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906123d1565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b6116a1611c16565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6116cb611c16565b6001600160a01b0381166117305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030e565b61073a81611c70565b611741611c16565b600361174d8282612515565b5050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e085015285850135610100850152908501356101208085019190915284518085039091018152610140909301909352815191012080821461182c5760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b606482015260840161030e565b50505050565b6060600061184084846125d5565b60ff1667ffffffffffffffff81111561185b5761185b61224b565b604051908082528060200260200182016040528015611884578160200160208202803683370190505b50905060ff84165b8360ff168110156118e9578581601c81106118a9576118a96123bb565b6020020135826118bc60ff8816846125ee565b815181106118cc576118cc6123bb565b6020908102919091010152806118e181612601565b91505061188c565b50611904600782516118fb919061261a565b82906007611cc0565b95945050505050565b600083818080805b8451811015611a6357603060f81b858281518110611935576119356123bb565b01602001516001600160f81b031916108015906119765750603960f81b858281518110611964576119646123bb565b01602001516001600160f81b03191611155b156119b957603085828151811061198f5761198f6123bb565b01602001516119a1919060f81c6125ee565b6119ac85600a61261a565b6119b691906124b3565b93505b81156119cd57826119c981612601565b9350505b876001600160f81b0319168582815181106119ea576119ea6123bb565b01602001516001600160f81b03191603611a51578115611a4c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161030e565b600191505b80611a5b81612601565b915050611915565b5085821115611abf5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161030e565b611ac982876125ee565b611ad490600a612715565b611ade908461261a565b98975050505050505050565b6000611afb83601760f91b8461190d565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190612368565b15611bbc5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161030e565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015611c0257600080fd5b505af11580156107a1573d6000803e3d6000fd5b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651611cd2919061261a565b67ffffffffffffffff811115611cea57611cea61224b565b6040519080825280601f01601f191660200182016040528015611d14576020820181803683370190505b5090506000805b87518161ffff161015611ecb576000888261ffff1681518110611d4057611d406123bb565b6020026020010151905060008767ffffffffffffffff811115611d6557611d6561224b565b604051908082528060200260200182016040528015611d8e578160200160208202803683370190505b50905060005b88811015611de057611da781600861261a565b83901c828281518110611dbc57611dbc6123bb565b60ff9092166020928302919091019091015280611dd881612601565b915050611d94565b5060005b88811015611eb5576000828281518110611e0057611e006123bb565b602002602001015160ff16905080600014611e78578060f81b878781518110611e2b57611e2b6123bb565b60200101906001600160f81b031916908160001a90535085611e4c81612601565b9650611e5b9050600289612721565b60ff16600003611e7357611e70600189612751565b97505b611e9b565b611e83600289612721565b60ff16600103611e9b57611e98600189612751565b97505b5060089290921c9180611ead81612601565b915050611de4565b5050508080611ec39061276a565b915050611d1b565b5060018360ff161015611f6c5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161030e565b85811115611fda5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161030e565b6000611ade838051606090829060005b825181101561203557828181518110612005576120056123bb565b01602001516001600160f81b03191660000361202357809150612035565b8061202d81612601565b915050611fea565b5060008167ffffffffffffffff8111156120515761205161224b565b6040519080825280601f01601f19166020018201604052801561207b576020820181803683370190505b50905060005b828110156120e15783818151811061209b5761209b6123bb565b602001015160f81c60f81b8282815181106120b8576120b86123bb565b60200101906001600160f81b031916908160001a905350806120d981612601565b915050612081565b50949350505050565b6000808284036106008112156120ff57600080fd5b6104808082121561210f57600080fd5b84935061018061047f198301121561212657600080fd5b92959390920193505050565b60006020828403121561214457600080fd5b5035919050565b80604081018310156106fc57600080fd5b60008060008061048080868803121561217457600080fd5b61217e878761214b565b945060c086018781111561219157600080fd5b6040870194506121a1888261214b565b9350508681870111156121b357600080fd5b50929591945092610100019150565b60005b838110156121dd5781810151838201526020016121c5565b50506000910152565b60208152600082518060208401526122058160408501602087016121c2565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073a57600080fd5b60006020828403121561224057600080fd5b8135611afb81612219565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561227357600080fd5b813567ffffffffffffffff8082111561228b57600080fd5b818401915084601f83011261229f57600080fd5b8135818111156122b1576122b161224b565b604051601f8201601f19908116603f011681019083821181831017156122d9576122d961224b565b816040528281528760208487010111156122f257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b600281101561182c57604080838637938401939190910190600101612316565b6104808101604086833761234d6040830186612312565b60408460c08401376103808361010084013795945050505050565b60006020828403121561237a57600080fd5b81518015158114611afb57600080fd5b610180810160408683376123a16040830186612312565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612419816123d1565b60018281168015612431576001811461244657612475565b60ff1984168752821515830287019450612475565b8760005260208060002060005b8581101561246c5781548a820152908401908201612453565b50505082870194505b50929695505050505050565b600082516124938184602087016121c2565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106fc576106fc61249d565b601f82111561251057600081815260208120601f850160051c810160208610156124ed5750805b601f850160051c820191505b8181101561250c578281556001016124f9565b5050505b505050565b815167ffffffffffffffff81111561252f5761252f61224b565b6125438161253d84546123d1565b846124c6565b602080601f83116001811461257857600084156125605750858301515b600019600386901b1c1916600185901b17855561250c565b600085815260208120601f198616915b828110156125a757888601518255948401946001909101908401612588565b50858210156125c55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156106fc576106fc61249d565b818103818111156106fc576106fc61249d565b6000600182016126135761261361249d565b5060010190565b80820281158282048414176106fc576106fc61249d565b600181815b8085111561266c5781600019048211156126525761265261249d565b8085161561265f57918102915b93841c9390800290612636565b509250929050565b600082612683575060016106fc565b81612690575060006106fc565b81600181146126a657600281146126b0576126cc565b60019150506106fc565b60ff8411156126c1576126c161249d565b50506001821b6106fc565b5060208310610133831016604e8410600b84101617156126ef575081810a6106fc565b6126f98383612631565b806000190482111561270d5761270d61249d565b029392505050565b6000611afb8383612674565b600060ff83168061274257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156106fc576106fc61249d565b600061ffff8083168181036127815761278161249d565b600101939250505056fea2646970667358221220b68d775d23695c7993f4e8191809ed6a550eea8e913da4fdcf02358fa5577a5c64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3392,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3566\"\n      },\n      {\n        \"astId\": 3395,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3771\"\n      },\n      {\n        \"astId\": 3397,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3399,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 6463,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"bodyHashVerifier\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_contract(IGarantiBodySuffixHashVerifier)6841\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiBodySuffixHashVerifier)6841\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3566\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3771\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/HDFCManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x3f53c1f28237862FF14ab4f34152d8C6659bA242\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x06d59e5e52903d57b7daa492dd274ed8544e5efb22139a7634c8d551a52066dd\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x3f53c1f28237862FF14ab4f34152d8C6659bA242\",\n    \"transactionIndex\": 6,\n    \"gasUsed\": \"608914\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000000000004000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000\",\n    \"blockHash\": \"0x7a2105323229b8549fdf785e95c448eb49e245d05c5828561bb2d1ac711394c0\",\n    \"transactionHash\": \"0x06d59e5e52903d57b7daa492dd274ed8544e5efb22139a7634c8d551a52066dd\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 6,\n        \"blockNumber\": 9155544,\n        \"transactionHash\": \"0x06d59e5e52903d57b7daa492dd274ed8544e5efb22139a7634c8d551a52066dd\",\n        \"address\": \"0x3f53c1f28237862FF14ab4f34152d8C6659bA242\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 19,\n        \"blockHash\": \"0x7a2105323229b8549fdf785e95c448eb49e245d05c5828561bb2d1ac711394c0\"\n      }\n    ],\n    \"blockNumber\": 9155544,\n    \"cumulativeGasUsed\": \"1391237\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x06b0ad846d386f60e777f1d11b82922c6bb694216eed9c23535796ac404a7dfa\",\n      \"0x1c1b5a203a9f1f15f6172969b9359e6a7572001de09471efd1586a67f7956fd8\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"1dc9a2624d5fa8a2a6f6105ee74be00a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3574,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/HDFCRamp.json",
    "content": "{\n  \"address\": \"0xc137d22fa93316Df55b5F896F5180c722D02b01D\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"_poseidon3\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"_poseidon6\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[8]\",\n              \"name\": \"upiId\",\n              \"type\": \"uint256[8]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[8]\",\n          \"name\": \"_upiId\",\n          \"type\": \"uint256[8]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon3\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon6\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x7eaad511adc80f981950719f10f4c39d720e32931e0418e1857efc6598439790\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xc137d22fa93316Df55b5F896F5180c722D02b01D\",\n    \"transactionIndex\": 6,\n    \"gasUsed\": \"3774613\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000010000000000000000000000000000000000000\",\n    \"blockHash\": \"0xfb40091fb8d2635a2f8e2d2d9a32551190624be7ae2cea434fd4db8a2d59981e\",\n    \"transactionHash\": \"0x7eaad511adc80f981950719f10f4c39d720e32931e0418e1857efc6598439790\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 6,\n        \"blockNumber\": 9155539,\n        \"transactionHash\": \"0x7eaad511adc80f981950719f10f4c39d720e32931e0418e1857efc6598439790\",\n        \"address\": \"0xc137d22fa93316Df55b5F896F5180c722D02b01D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 8,\n        \"blockHash\": \"0xfb40091fb8d2635a2f8e2d2d9a32551190624be7ae2cea434fd4db8a2d59981e\"\n      },\n      {\n        \"transactionIndex\": 6,\n        \"blockNumber\": 9155539,\n        \"transactionHash\": \"0x7eaad511adc80f981950719f10f4c39d720e32931e0418e1857efc6598439790\",\n        \"address\": \"0xc137d22fa93316Df55b5F896F5180c722D02b01D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 9,\n        \"blockHash\": \"0xfb40091fb8d2635a2f8e2d2d9a32551190624be7ae2cea434fd4db8a2d59981e\"\n      }\n    ],\n    \"blockNumber\": 9155539,\n    \"cumulativeGasUsed\": \"4219651\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"0xfdb7153989116F650387813013A047B6Ab56aEff\",\n    \"0x95Fc5D19C778FABE6Aec8948C1a7A32eF8DeC791\",\n    \"10000000\",\n    \"50000000\",\n    \"180\",\n    \"180\",\n    \"0\",\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"1dc9a2624d5fa8a2a6f6105ee74be00a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"_poseidon3\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"_poseidon6\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"_upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon3\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon6\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the idHash being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\",\\\"_upiId\\\":\\\"The packed upi ID of the depositor\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the idHash being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a idHash from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":\\\"HDFCRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon3.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon3 {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x39cd67d4a7ef93e243c77b7c8a40c3842c060a7f444b0b2c875bce7d8d0c24fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IPoseidon6.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon6 {\\\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9609bcff68e45a22b551bf5f42a5ea62ea0b33e433a89f7c89a6b0714df09229\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon3 } from \\\\\\\"../../interfaces/IPoseidon3.sol\\\\\\\";\\\\nimport { IPoseidon6 } from \\\\\\\"../../interfaces/IPoseidon6.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the idHash\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 idHash;                     // Hash of payment processor id\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[8] upiId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's idHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon3 _poseidon3,\\\\n        IPoseidon6 _poseidon6,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon3 = _poseidon3;\\\\n        poseidon6 = _poseidon6;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        IHDFCSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\\\\\"Account already associated with idHash\\\\\\\");\\\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].idHash = idHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, idHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _upiId            The packed upi ID of the depositor\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[8] memory _upiId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        AccountInfo storage account = accounts[msg.sender];\\\\n        account.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            upiId: _upiId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 idHash = accounts[msg.sender].idHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorIdHash != idHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[idHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a idHash from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _idHash,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            IHDFCSendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 idHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return idHash;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\\\n     */\\\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\\\n        uint256[6] memory temp1;\\\\n        uint256[3] memory temp2;\\\\n\\\\n        for (uint256 i = 0; i < 6; ++i) {\\\\n            temp1[i] = _upiId[i];\\\\n        }\\\\n        temp2[0] = poseidon6.poseidon(temp1);\\\\n        temp2[1] = _upiId[6];\\\\n        temp2[2] = _upiId[7];\\\\n\\\\n        return bytes32(poseidon3.poseidon(temp2));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xae7d672b1734e0e13737762b6317bc5de9f2a4070b1b1af2d40a2ce74ed3957f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b506040516200438c3803806200438c8339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0389811660805288811660a05287811660c05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c051614094620002f860003960008181610386015261315701526000818161067901526131f40152600081816103d80152818161175901528181611dbb01528181612d490152612df801526140946000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd6102923660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de3660046135d5565b610799565b005b6102e36102f33660046135f9565b6107f6565b6102bd6103063660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e36103453660046135f9565b610928565b6102e36103583660046135f9565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce366004613612565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e361040836600461375a565b610f47565b6102e361041b3660046135f9565b610fd4565b61043361042e3660046135d5565b611075565b6040516102c79190613813565b6102e361044e366004613857565b6110ee565b6102bd60095481565b61046f61046a3660046135d5565b611181565b6040516102c79190613958565b6102e361048a3660046135f9565b6113f1565b6102bd60075481565b6102e36104a63660046135f9565b611490565b6102e36104b93660046139e4565b6115db565b6102e36117ce565b61046f6104d43660046139e4565b6117e2565b6104ec6104e73660046135d5565b6119ea565b6040516102c79190613a8a565b6000546001600160a01b03166103a8565b6105536105183660046135f9565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e36105943660046135f9565b611a84565b6102e36105a7366004613ae2565b611b1b565b6102e36105ba3660046135f9565b611e77565b6105d26105cd3660046135f9565b611f7e565b6040516102c79190613b70565b6102bd600a5481565b61062f6105f63660046135f9565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f3660046135d5565b61206b565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b83565b612123565b6102e36106bc3660046135f9565b6121e1565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613bf8565b61231f565b6040516102c79190613c6d565b6102e36107273660046135d5565b612484565b6002546103a8906001600160a01b031681565b6102e361074d3660046135d5565b6124da565b610371610760366004613cfd565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a1612553565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613d29565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b610930612553565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd612553565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613d29565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d76565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d5984886125ad565b90508583600a01541015610e0e57600080610d7389612618565b91509150878186600a0154610d889190613d76565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd785836127c0565b8085600a016000828254610deb9190613d76565b925050819055508085600b016000828254610e069190613d89565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d89565b925050819055508583600b016000828254610ed09190613d76565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f5887878787612822565b925092509250610f688282612b28565b826060015182600b016000828254610f809190613d89565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612c01565b610fcb8184612cec565b50505050505050565b610fdc612553565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f6612553565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff8111156112045761120461364b565b60405190808252806020026020018201604052801561123d57816020015b61122a6133ca565b8152602001906001900390816112225790505b50915060005b81518110156113ea57600082828151811061126057611260613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a83612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516113b69190613d76565b8152508685815181106113cb576113cb613d9c565b6020026020010181905250505050806113e390613db2565b9050611243565b5050919050565b6113f9612553565b66b1a2bc2ec5000081111561145b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166115105760405162461bcd60e51b815260040161082290613dcb565b80546001600160a01b031633146115695760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115738184612b28565b816060015181600b01600082825461158b9190613d89565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516115cc9082612c01565b6115d68383612cec565b505050565b6000805b825181101561173c5760008382815181106115fc576115fc613d9c565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116745760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061168084612618565b9150915061168e83836127c0565b8083600a015461169e9190613d76565b6116a89087613d76565b95508083600b0160008282546116be9190613d89565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611705908590613d76565b60405190815260200160405180910390a36000600a8401556117278484612c01565b505050508061173590613db2565b90506115df565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190613dfa565b6117d6612553565b6117e06000612eca565b565b6060815167ffffffffffffffff8111156117fe576117fe61364b565b60405190808252806020026020018201604052801561183757816020015b6118246133ca565b81526020019060019003908161181c5790505b50905060005b82518110156119e457600083828151811061185a5761185a613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116118ab575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561193e57602002820191906000526020600020905b81548152602001906001019080831161192a575b5050505050815250509050600061195483612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516119b09190613d76565b8152508585815181106119c5576119c5613d9c565b6020026020010181905250505050806119dd90613db2565b905061183d565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a7457602002820191906000526020600020905b815481526020019060010190808311611a60575b5050505050815250509050919050565b611a8c612553565b80600003611ae65760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611b475760405162461bcd60e51b815260040161082290613d29565b33600090815260046020526040902060010154600511611ba95760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611c1a5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c785760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c8d670de0b6b3a764000085613e1c565b611c979190613e49565b600d80549192506000919082611cac83613db2565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611d53919083019060086133f6565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d9791600d840191602090910190613434565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e319190613dfa565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611ea35760405162461bcd60e51b815260040161082290613d29565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f125760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f489060020183612f1a565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f8661346e565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611fca575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a745760200282019190600052602060002090815481526020019060010190808311611a60575050505050815250509050919050565b612073612553565b6001600160a01b0381166120d55760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561218f5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061219d85858585613043565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122565760405162461bcd60e51b815260040161082290613dcb565b336000908152600460205260408082205483516001600160a01b03168352912054146122c45760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b60408082015160009081526005602052206122df8184612b28565b816060015181600a0160008282546122f79190613d76565b90915550506060820151600b82018054600090612315908490613d89565b9091555050505050565b606060008267ffffffffffffffff81111561233c5761233c61364b565b60405190808252806020026020018201604052801561237557816020015b6123626134ba565b81526020019060019003908161235a5790505b50905060005b8381101561247a57600085858381811061239757612397613d9c565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061241657612416613d9c565b6020908102929092013583525081810184905283516001600160a01b03166000908152600490915260409081902054910152845185908590811061245c5761245c613d9c565b602002602001018190525050508061247390613db2565b905061237b565b5090505b92915050565b61248c612553565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b6124e2612553565b6001600160a01b0381166125475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b61255081612eca565b50565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506126107f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613e5d565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561267557602002820191906000526020600020905b815481526020019060010190808311612661575b50505050509050805167ffffffffffffffff8111156126965761269661364b565b6040519080825280602002602001820160405280156126bf578160200160208202803683370190505b50925060005b81518110156127b9576000600660008484815181106126e6576126e6613d9c565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161275991613d76565b10156127a85782828151811061277157612771613d9c565b602002602001015185838151811061278b5761278b613d9c565b602090810291909101015260608101516127a59085613d76565b93505b506127b281613db2565b90506126c5565b5050915091565b60005b81518110156115d6576000801b8282815181106127e2576127e2613d9c565b602002602001015114612812576128128383838151811061280557612805613d9c565b6020026020010151612b28565b61281b81613db2565b90506127c3565b61282a6134e2565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128869190600401613ec2565b60a0604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613f31565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166129555760405162461bcd60e51b815260040161082290613dcb565b85826080015111156129b45760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b6040805161010081019182905286916129f09190600185019060089082845b8154815260200190600101908083116129d35750505050506130e3565b14612a3d5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612aa55760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612ac29190613e1c565b612acc9190613e49565b871015612b145760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612bcc600d840183612f1a565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612c179190613d76565b9050806000036115d65781546001600160a01b03166000908152600460205260409020612c479060010184613272565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612cb56001830182613523565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612ce59190613532565b5050505050565b6000600b54600014612db857670de0b6b3a7640000600b548360600151612d139190613e1c565b612d1d9190613e49565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613dfa565b505b6000818360600151612dca9190613d89565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e659190613dfa565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f7684805480602002602001604051908101604052809291908181526020018280548015612f6b57602002820191906000526020600020905b815481526020019060010190808311612f57575b505050505084613317565b9150915080612fbf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612fd090600190613d89565b905080831461301557848181548110612feb57612feb613d9c565b906000526020600020015485848154811061300857613008613d9c565b6000918252602090912001555b8480548061302557613025613f71565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161309691600401613f87565b6020604051808303816000875af11580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613fec565b9695505050505050565b60006130ed613550565b6130f561356e565b60005b600681101561313f5784816008811061311357613113613d9c565b602002015183826006811061312a5761312a613d9c565b602002015261313881613db2565b90506130f8565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a7889061318c908590600401614005565b602060405180830381865afa1580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd9190613fec565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e890613231908490600401614036565b602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613fec565b6000806132ce848054806020026020016040519081016040528092919081815260200182805480156132c357602002820191906000526020600020905b8154815260200190600101908083116132af575b50505050508461337a565b9150915080612fbf5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b81811015613367578486828151811061333b5761333b613d9c565b602002602001015103613355579250600191506133739050565b8061335f81613db2565b915050613320565b50600019600092509250505b9250929050565b81516000908190815b81811015613367578486828151811061339e5761339e613d9c565b6020026020010151036133b8579250600191506133739050565b806133c281613db2565b915050613383565b60408051608081018252600080825260208201529081016133e961346e565b8152602001600081525090565b8260088101928215613424579160200282015b82811115613424578251825591602001919060010190613409565b5061343092915061358c565b5090565b8280548282559060005260206000209081019282156134245791602002820182811115613424578251825591602001919060010190613409565b6040518060e0016040528060006001600160a01b031681526020016134916135a1565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134d56134e2565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5061255090600881019061358c565b5080546000825590600052602060002090810190612550919061358c565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b80821115613430576000815560010161358d565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b038116811461255057600080fd5b6000602082840312156135e757600080fd5b81356135f2816135c0565b9392505050565b60006020828403121561360b57600080fd5b5035919050565b60008060006060848603121561362757600080fd5b83359250602084013591506040840135613640816135c0565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156136845761368461364b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364b565b604052919050565b600082601f8301126136cc57600080fd5b6136d4613661565b8060408401858111156136e657600080fd5b845b818110156137005780358452602093840193016136e8565b509095945050505050565b600082601f83011261371c57600080fd5b613724613661565b80608084018581111561373657600080fd5b845b818110156137005761374a87826136bb565b8452602090930192604001613738565b6000806000806102e080868803121561377257600080fd5b61377c87876136bb565b945061378b876040880161370b565b935061379a8760c088016136bb565b92508661011f8701126137ac57600080fd5b6040516101e0810181811067ffffffffffffffff821117156137d0576137d061364b565b6040529086019080888311156137e557600080fd5b61010088015b838110156138035780358252602091820191016137eb565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561384b5783518352928401929184019160010161382f565b50909695505050505050565b6000806040838503121561386a57600080fd5b8235613875816135c0565b91506020830135613885816135c0565b809150509250929050565b600081518084526020808501945080840160005b838110156138c0578151875295820195908201906001016138a4565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b6008811015613907578251825291830191908301906001016138ea565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a086015261394f82860182613890565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156139d657603f19898403018552815160808151855288820151898601528782015181898701526139b5828701826138cb565b6060938401519690930195909552509487019492509086019060010161397f565b509098975050505050505050565b600060208083850312156139f757600080fd5b823567ffffffffffffffff80821115613a0f57600080fd5b818501915085601f830112613a2357600080fd5b813581811115613a3557613a3561364b565b8060051b9150613a4684830161368a565b8181529183018401918481019088841115613a6057600080fd5b938501935b83851015613a7e57843582529385019390850190613a65565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613ad75783518252928401926001929092019190840190613ab7565b509695505050505050565b60008060006101408486031215613af857600080fd5b84601f850112613b0757600080fd5b60405161010080820182811067ffffffffffffffff82111715613b2c57613b2c61364b565b60405285018187821115613b3f57600080fd5b865b82811015613b59578035825260209182019101613b41565b509197903596506101209590950135949350505050565b6020815260006135f260208301846138cb565b6000806000806101a0808688031215613b9b57600080fd5b613ba587876136bb565b9450613bb4876040880161370b565b9350613bc38760c088016136bb565b92508661011f870112613bd557600080fd5b60405160a0810181811067ffffffffffffffff821117156137d0576137d061364b565b60008060208385031215613c0b57600080fd5b823567ffffffffffffffff80821115613c2357600080fd5b818501915085601f830112613c3757600080fd5b813581811115613c4657600080fd5b8660208260051b8501011115613c5b57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613cf0578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c8a565b5091979650505050505050565b60008060408385031215613d1057600080fd5b8235613d1b816135c0565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561247e5761247e613d60565b8181038181111561247e5761247e613d60565b634e487b7160e01b600052603260045260246000fd5b600060018201613dc457613dc4613d60565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613e0c57600080fd5b815180151581146135f257600080fd5b808202811582820484141761247e5761247e613d60565b634e487b7160e01b600052601260045260246000fd5b600082613e5857613e58613e33565b500490565b600082613e6c57613e6c613e33565b500690565b8060005b600281101561303d578151845260209384019390910190600101613e75565b8060005b600281101561303d57613eac848351613e71565b6040939093019260209190910190600101613e98565b60006102e082019050613ed6828451613e71565b602080840151613ee96040850182613e94565b506040840151613efc60c0850182613e71565b506060840151610100840160005b600f811015613f2757825182529183019190830190600101613f0a565b5050505092915050565b600080600080600060a08688031215613f4957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f9b828451613e71565b602080840151613fae6040850182613e94565b506040840151613fc160c0850182613e71565b506060840151610100840160005b6005811015613f2757825182529183019190830190600101613fcf565b600060208284031215613ffe57600080fd5b5051919050565b60c08101818360005b600681101561402d57815183526020928301929091019060010161400e565b50505092915050565b60608101818360005b600381101561402d57815183526020928301929091019060010161403f56fea2646970667358221220ce4b5ac012d074f8459b3087900f248a83a7859401303ac0546d4eb7feb3ba5064736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd6102923660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de3660046135d5565b610799565b005b6102e36102f33660046135f9565b6107f6565b6102bd6103063660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e36103453660046135f9565b610928565b6102e36103583660046135f9565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce366004613612565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e361040836600461375a565b610f47565b6102e361041b3660046135f9565b610fd4565b61043361042e3660046135d5565b611075565b6040516102c79190613813565b6102e361044e366004613857565b6110ee565b6102bd60095481565b61046f61046a3660046135d5565b611181565b6040516102c79190613958565b6102e361048a3660046135f9565b6113f1565b6102bd60075481565b6102e36104a63660046135f9565b611490565b6102e36104b93660046139e4565b6115db565b6102e36117ce565b61046f6104d43660046139e4565b6117e2565b6104ec6104e73660046135d5565b6119ea565b6040516102c79190613a8a565b6000546001600160a01b03166103a8565b6105536105183660046135f9565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e36105943660046135f9565b611a84565b6102e36105a7366004613ae2565b611b1b565b6102e36105ba3660046135f9565b611e77565b6105d26105cd3660046135f9565b611f7e565b6040516102c79190613b70565b6102bd600a5481565b61062f6105f63660046135f9565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f3660046135d5565b61206b565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b83565b612123565b6102e36106bc3660046135f9565b6121e1565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613bf8565b61231f565b6040516102c79190613c6d565b6102e36107273660046135d5565b612484565b6002546103a8906001600160a01b031681565b6102e361074d3660046135d5565b6124da565b610371610760366004613cfd565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a1612553565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613d29565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b610930612553565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd612553565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613d29565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d76565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d5984886125ad565b90508583600a01541015610e0e57600080610d7389612618565b91509150878186600a0154610d889190613d76565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd785836127c0565b8085600a016000828254610deb9190613d76565b925050819055508085600b016000828254610e069190613d89565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d89565b925050819055508583600b016000828254610ed09190613d76565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f5887878787612822565b925092509250610f688282612b28565b826060015182600b016000828254610f809190613d89565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612c01565b610fcb8184612cec565b50505050505050565b610fdc612553565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f6612553565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff8111156112045761120461364b565b60405190808252806020026020018201604052801561123d57816020015b61122a6133ca565b8152602001906001900390816112225790505b50915060005b81518110156113ea57600082828151811061126057611260613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a83612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516113b69190613d76565b8152508685815181106113cb576113cb613d9c565b6020026020010181905250505050806113e390613db2565b9050611243565b5050919050565b6113f9612553565b66b1a2bc2ec5000081111561145b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166115105760405162461bcd60e51b815260040161082290613dcb565b80546001600160a01b031633146115695760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115738184612b28565b816060015181600b01600082825461158b9190613d89565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516115cc9082612c01565b6115d68383612cec565b505050565b6000805b825181101561173c5760008382815181106115fc576115fc613d9c565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116745760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061168084612618565b9150915061168e83836127c0565b8083600a015461169e9190613d76565b6116a89087613d76565b95508083600b0160008282546116be9190613d89565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611705908590613d76565b60405190815260200160405180910390a36000600a8401556117278484612c01565b505050508061173590613db2565b90506115df565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190613dfa565b6117d6612553565b6117e06000612eca565b565b6060815167ffffffffffffffff8111156117fe576117fe61364b565b60405190808252806020026020018201604052801561183757816020015b6118246133ca565b81526020019060019003908161181c5790505b50905060005b82518110156119e457600083828151811061185a5761185a613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116118ab575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561193e57602002820191906000526020600020905b81548152602001906001019080831161192a575b5050505050815250509050600061195483612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516119b09190613d76565b8152508585815181106119c5576119c5613d9c565b6020026020010181905250505050806119dd90613db2565b905061183d565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a7457602002820191906000526020600020905b815481526020019060010190808311611a60575b5050505050815250509050919050565b611a8c612553565b80600003611ae65760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611b475760405162461bcd60e51b815260040161082290613d29565b33600090815260046020526040902060010154600511611ba95760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611c1a5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c785760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c8d670de0b6b3a764000085613e1c565b611c979190613e49565b600d80549192506000919082611cac83613db2565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611d53919083019060086133f6565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d9791600d840191602090910190613434565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e319190613dfa565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611ea35760405162461bcd60e51b815260040161082290613d29565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f125760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f489060020183612f1a565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f8661346e565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611fca575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a745760200282019190600052602060002090815481526020019060010190808311611a60575050505050815250509050919050565b612073612553565b6001600160a01b0381166120d55760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561218f5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061219d85858585613043565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122565760405162461bcd60e51b815260040161082290613dcb565b336000908152600460205260408082205483516001600160a01b03168352912054146122c45760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b60408082015160009081526005602052206122df8184612b28565b816060015181600a0160008282546122f79190613d76565b90915550506060820151600b82018054600090612315908490613d89565b9091555050505050565b606060008267ffffffffffffffff81111561233c5761233c61364b565b60405190808252806020026020018201604052801561237557816020015b6123626134ba565b81526020019060019003908161235a5790505b50905060005b8381101561247a57600085858381811061239757612397613d9c565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061241657612416613d9c565b6020908102929092013583525081810184905283516001600160a01b03166000908152600490915260409081902054910152845185908590811061245c5761245c613d9c565b602002602001018190525050508061247390613db2565b905061237b565b5090505b92915050565b61248c612553565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b6124e2612553565b6001600160a01b0381166125475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b61255081612eca565b50565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506126107f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613e5d565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561267557602002820191906000526020600020905b815481526020019060010190808311612661575b50505050509050805167ffffffffffffffff8111156126965761269661364b565b6040519080825280602002602001820160405280156126bf578160200160208202803683370190505b50925060005b81518110156127b9576000600660008484815181106126e6576126e6613d9c565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161275991613d76565b10156127a85782828151811061277157612771613d9c565b602002602001015185838151811061278b5761278b613d9c565b602090810291909101015260608101516127a59085613d76565b93505b506127b281613db2565b90506126c5565b5050915091565b60005b81518110156115d6576000801b8282815181106127e2576127e2613d9c565b602002602001015114612812576128128383838151811061280557612805613d9c565b6020026020010151612b28565b61281b81613db2565b90506127c3565b61282a6134e2565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128869190600401613ec2565b60a0604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613f31565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166129555760405162461bcd60e51b815260040161082290613dcb565b85826080015111156129b45760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b6040805161010081019182905286916129f09190600185019060089082845b8154815260200190600101908083116129d35750505050506130e3565b14612a3d5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612aa55760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612ac29190613e1c565b612acc9190613e49565b871015612b145760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612bcc600d840183612f1a565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612c179190613d76565b9050806000036115d65781546001600160a01b03166000908152600460205260409020612c479060010184613272565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612cb56001830182613523565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612ce59190613532565b5050505050565b6000600b54600014612db857670de0b6b3a7640000600b548360600151612d139190613e1c565b612d1d9190613e49565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613dfa565b505b6000818360600151612dca9190613d89565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e659190613dfa565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f7684805480602002602001604051908101604052809291908181526020018280548015612f6b57602002820191906000526020600020905b815481526020019060010190808311612f57575b505050505084613317565b9150915080612fbf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612fd090600190613d89565b905080831461301557848181548110612feb57612feb613d9c565b906000526020600020015485848154811061300857613008613d9c565b6000918252602090912001555b8480548061302557613025613f71565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161309691600401613f87565b6020604051808303816000875af11580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613fec565b9695505050505050565b60006130ed613550565b6130f561356e565b60005b600681101561313f5784816008811061311357613113613d9c565b602002015183826006811061312a5761312a613d9c565b602002015261313881613db2565b90506130f8565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a7889061318c908590600401614005565b602060405180830381865afa1580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd9190613fec565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e890613231908490600401614036565b602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613fec565b6000806132ce848054806020026020016040519081016040528092919081815260200182805480156132c357602002820191906000526020600020905b8154815260200190600101908083116132af575b50505050508461337a565b9150915080612fbf5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b81811015613367578486828151811061333b5761333b613d9c565b602002602001015103613355579250600191506133739050565b8061335f81613db2565b915050613320565b50600019600092509250505b9250929050565b81516000908190815b81811015613367578486828151811061339e5761339e613d9c565b6020026020010151036133b8579250600191506133739050565b806133c281613db2565b915050613383565b60408051608081018252600080825260208201529081016133e961346e565b8152602001600081525090565b8260088101928215613424579160200282015b82811115613424578251825591602001919060010190613409565b5061343092915061358c565b5090565b8280548282559060005260206000209081019282156134245791602002820182811115613424578251825591602001919060010190613409565b6040518060e0016040528060006001600160a01b031681526020016134916135a1565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134d56134e2565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5061255090600881019061358c565b5080546000825590600052602060002090810190612550919061358c565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b80821115613430576000815560010161358d565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b038116811461255057600080fd5b6000602082840312156135e757600080fd5b81356135f2816135c0565b9392505050565b60006020828403121561360b57600080fd5b5035919050565b60008060006060848603121561362757600080fd5b83359250602084013591506040840135613640816135c0565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156136845761368461364b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364b565b604052919050565b600082601f8301126136cc57600080fd5b6136d4613661565b8060408401858111156136e657600080fd5b845b818110156137005780358452602093840193016136e8565b509095945050505050565b600082601f83011261371c57600080fd5b613724613661565b80608084018581111561373657600080fd5b845b818110156137005761374a87826136bb565b8452602090930192604001613738565b6000806000806102e080868803121561377257600080fd5b61377c87876136bb565b945061378b876040880161370b565b935061379a8760c088016136bb565b92508661011f8701126137ac57600080fd5b6040516101e0810181811067ffffffffffffffff821117156137d0576137d061364b565b6040529086019080888311156137e557600080fd5b61010088015b838110156138035780358252602091820191016137eb565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561384b5783518352928401929184019160010161382f565b50909695505050505050565b6000806040838503121561386a57600080fd5b8235613875816135c0565b91506020830135613885816135c0565b809150509250929050565b600081518084526020808501945080840160005b838110156138c0578151875295820195908201906001016138a4565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b6008811015613907578251825291830191908301906001016138ea565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a086015261394f82860182613890565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156139d657603f19898403018552815160808151855288820151898601528782015181898701526139b5828701826138cb565b6060938401519690930195909552509487019492509086019060010161397f565b509098975050505050505050565b600060208083850312156139f757600080fd5b823567ffffffffffffffff80821115613a0f57600080fd5b818501915085601f830112613a2357600080fd5b813581811115613a3557613a3561364b565b8060051b9150613a4684830161368a565b8181529183018401918481019088841115613a6057600080fd5b938501935b83851015613a7e57843582529385019390850190613a65565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613ad75783518252928401926001929092019190840190613ab7565b509695505050505050565b60008060006101408486031215613af857600080fd5b84601f850112613b0757600080fd5b60405161010080820182811067ffffffffffffffff82111715613b2c57613b2c61364b565b60405285018187821115613b3f57600080fd5b865b82811015613b59578035825260209182019101613b41565b509197903596506101209590950135949350505050565b6020815260006135f260208301846138cb565b6000806000806101a0808688031215613b9b57600080fd5b613ba587876136bb565b9450613bb4876040880161370b565b9350613bc38760c088016136bb565b92508661011f870112613bd557600080fd5b60405160a0810181811067ffffffffffffffff821117156137d0576137d061364b565b60008060208385031215613c0b57600080fd5b823567ffffffffffffffff80821115613c2357600080fd5b818501915085601f830112613c3757600080fd5b813581811115613c4657600080fd5b8660208260051b8501011115613c5b57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613cf0578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c8a565b5091979650505050505050565b60008060408385031215613d1057600080fd5b8235613d1b816135c0565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561247e5761247e613d60565b8181038181111561247e5761247e613d60565b634e487b7160e01b600052603260045260246000fd5b600060018201613dc457613dc4613d60565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613e0c57600080fd5b815180151581146135f257600080fd5b808202811582820484141761247e5761247e613d60565b634e487b7160e01b600052601260045260246000fd5b600082613e5857613e58613e33565b500490565b600082613e6c57613e6c613e33565b500690565b8060005b600281101561303d578151845260209384019390910190600101613e75565b8060005b600281101561303d57613eac848351613e71565b6040939093019260209190910190600101613e98565b60006102e082019050613ed6828451613e71565b602080840151613ee96040850182613e94565b506040840151613efc60c0850182613e71565b506060840151610100840160005b600f811015613f2757825182529183019190830190600101613f0a565b5050505092915050565b600080600080600060a08688031215613f4957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f9b828451613e71565b602080840151613fae6040850182613e94565b506040840151613fc160c0850182613e71565b506060840151610100840160005b6005811015613f2757825182529183019190830190600101613fcf565b600060208284031215613ffe57600080fd5b5051919050565b60c08101818360005b600681101561402d57815183526020928301929091019060010161400e565b50505092915050565b60608101818360005b600381101561402d57815183526020928301929091019060010161403f56fea2646970667358221220ce4b5ac012d074f8459b3087900f248a83a7859401303ac0546d4eb7feb3ba5064736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the idHash being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_receiveAmount\": \"The amount of USD to receive\",\n          \"_upiId\": \"The packed upi ID of the depositor\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the idHash being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a idHash from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4128,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)6944\"\n      },\n      {\n        \"astId\": 4131,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IHDFCSendProcessor)6914\"\n      },\n      {\n        \"astId\": 4133,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4138,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4086_storage)\"\n      },\n      {\n        \"astId\": 4143,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)4023_storage)\"\n      },\n      {\n        \"astId\": 4148,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)4041_storage)\"\n      },\n      {\n        \"astId\": 4153,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)4062_storage)\"\n      },\n      {\n        \"astId\": 4155,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4157,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4159,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4161,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4163,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4165,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4167,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)8_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[8]\",\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IHDFCSendProcessor)6914\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IHDFCSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IRegistrationProcessor)6944\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)4023_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct HDFCRamp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)4023_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4086_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)4086_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)4062_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)4062_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)4041_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct HDFCRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)4041_storage\"\n      },\n      \"t_struct(AccountInfo)4023_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4019,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"idHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4022,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)4078_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 4073,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 4077,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)4041_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 4025,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4029,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"upiId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)8_storage\"\n          },\n          {\n            \"astId\": 4031,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4033,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"10\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4035,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"11\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4037,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"12\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4040,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"13\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"448\"\n      },\n      \"t_struct(GlobalAccountInfo)4086_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4080,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4082,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4085,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)4078_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)4062_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 4053,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4055,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4057,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4059,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4061,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/HDFCRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0xC8d7C6a5a8B2158012FB679DB1c3d7fbC1cC2980\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x726353989c9df7f0ed62498339382ec41740d870d404cbcb7bb75f50ca3b8d69\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xC8d7C6a5a8B2158012FB679DB1c3d7fbC1cC2980\",\n    \"transactionIndex\": 12,\n    \"gasUsed\": \"1573187\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000001000000001000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xf461318b602449678523d326c5d6a583d62022266ba5c136d32600fbb37e70aa\",\n    \"transactionHash\": \"0x726353989c9df7f0ed62498339382ec41740d870d404cbcb7bb75f50ca3b8d69\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 12,\n        \"blockNumber\": 10272887,\n        \"transactionHash\": \"0x726353989c9df7f0ed62498339382ec41740d870d404cbcb7bb75f50ca3b8d69\",\n        \"address\": \"0xC8d7C6a5a8B2158012FB679DB1c3d7fbC1cC2980\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 25,\n        \"blockHash\": \"0xf461318b602449678523d326c5d6a583d62022266ba5c136d32600fbb37e70aa\"\n      }\n    ],\n    \"blockNumber\": 10272887,\n    \"cumulativeGasUsed\": \"4291595\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xc137d22fa93316Df55b5F896F5180c722D02b01D\",\n    \"0x3f53c1f28237862FF14ab4f34152d8C6659bA242\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"alerts@hdfcbank.net\",\n    \"0\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":\\\"HDFCRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _hdfcMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed userIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x201e3eb65e17171b5359065b51e78356853be26e598180822ebb4305b0cc3884\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\\\n\\\\n\\\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\\\n\\\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\\\n\\\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\\\n\\\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\\\n\\\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\\\n\\\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x2bc6b9f3db91263227b1e3a6b8fa9a965b9aa896bf3d12434766198a8b823e81\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001d3d38038062001d3d83398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611985620003b86000396000818161010a015261026801526119856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f289eb82230faad0c62fbd2f540384142221e6b43882036be535e03d4d49f7f7285527f090b259da85021f388985bd3de1665a5d035c5a770be66b75093da97e178d7eb60208601526000608086018661067487357f1d466572d6fee03f19c311206ca5817e0088ca3817fae4f83ffc87f87c6d81247f202032329a66a39b16ab45b84d1a4c5fb030644957050a46b628de101ffb73248461056c565b6106c460208801357f215448eb180d4812a749a8eb0085b5cc108dbaea6af4614ea38ca86ddd3adcfa7f1f1a33746fb5bb57c457768bab47b04fe76d00a7290a62f71344a8ed659f80f08461056c565b61071460408801357f0159c8912a08d29aa9af11e4daf0adbf26108fe74c45ff2d636ecc69d5437f2f7f050406f4edf6a26e9227eebdac7c9c6ef22a1275fc6bdbd59e3f5072dd62d91b8461056c565b61076460608801357f16be9a7484c0895cd1cdb9526ccf2d6d1645e53f5cda64cfa00749884c58ab3e7f1ee0821a01e9f589b248ac2c66efa1961e7f82aad907d0d30b1fae4495d4adbf8461056c565b6107b460808801357f0c94a4026750622d8fcbe4f7a710552a26a1fdbddec11103d3eaf25f3e8253d47f2367adfd5521befb39f7482424f3ca32be5f36c7b79096f04cd51e5760b8e6398461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29e0c9df733e35f5a0f4a592c344dfa5669b61230266e156d86ac98bd3dfa6cc6102808201527f23f7f7e68d1d08a306a9752966290057d6167da414f3a75de9e253febc9e56ae6102a08201527f036dd57a7bd3ead51c3d0d5bd18cf6182b104511db118a576c0b7050a7c3b5ac6102c08201527f2a6aab1f59ba4c8b68d1835c9518fb5e30d07e1699f58ceec65b5bd38b461b656102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea26469706673582212204649a612b2c53a9a408c66298ccaa4832140576b76a617e8103caa711e7533a764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f289eb82230faad0c62fbd2f540384142221e6b43882036be535e03d4d49f7f7285527f090b259da85021f388985bd3de1665a5d035c5a770be66b75093da97e178d7eb60208601526000608086018661067487357f1d466572d6fee03f19c311206ca5817e0088ca3817fae4f83ffc87f87c6d81247f202032329a66a39b16ab45b84d1a4c5fb030644957050a46b628de101ffb73248461056c565b6106c460208801357f215448eb180d4812a749a8eb0085b5cc108dbaea6af4614ea38ca86ddd3adcfa7f1f1a33746fb5bb57c457768bab47b04fe76d00a7290a62f71344a8ed659f80f08461056c565b61071460408801357f0159c8912a08d29aa9af11e4daf0adbf26108fe74c45ff2d636ecc69d5437f2f7f050406f4edf6a26e9227eebdac7c9c6ef22a1275fc6bdbd59e3f5072dd62d91b8461056c565b61076460608801357f16be9a7484c0895cd1cdb9526ccf2d6d1645e53f5cda64cfa00749884c58ab3e7f1ee0821a01e9f589b248ac2c66efa1961e7f82aad907d0d30b1fae4495d4adbf8461056c565b6107b460808801357f0c94a4026750622d8fcbe4f7a710552a26a1fdbddec11103d3eaf25f3e8253d47f2367adfd5521befb39f7482424f3ca32be5f36c7b79096f04cd51e5760b8e6398461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29e0c9df733e35f5a0f4a592c344dfa5669b61230266e156d86ac98bd3dfa6cc6102808201527f23f7f7e68d1d08a306a9752966290057d6167da414f3a75de9e253febc9e56ae6102a08201527f036dd57a7bd3ead51c3d0d5bd18cf6182b104511db118a576c0b7050a7c3b5ac6102c08201527f2a6aab1f59ba4c8b68d1835c9518fb5e30d07e1699f58ceec65b5bd38b461b656102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea26469706673582212204649a612b2c53a9a408c66298ccaa4832140576b76a617e8103caa711e7533a764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/HDFCSendProcessor.json",
    "content": "{\n  \"address\": \"0x3bCC71916d9d2BB5F52Fdb386814bd84C9312A04\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"internalType\": \"struct IHDFCSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x025601d3ee21e42acb26de908c4afeb7be8483b1755f5c2bdabb8fa1471bcd42\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x3bCC71916d9d2BB5F52Fdb386814bd84C9312A04\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"2514894\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000080000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x1e01a7cafac606e4555dd524e82570e8b4152fe676f408ef1a2653cc13bc6d90\",\n    \"transactionHash\": \"0x025601d3ee21e42acb26de908c4afeb7be8483b1755f5c2bdabb8fa1471bcd42\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 4,\n        \"blockNumber\": 10272890,\n        \"transactionHash\": \"0x025601d3ee21e42acb26de908c4afeb7be8483b1755f5c2bdabb8fa1471bcd42\",\n        \"address\": \"0x3bCC71916d9d2BB5F52Fdb386814bd84C9312A04\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 21,\n        \"blockHash\": \"0x1e01a7cafac606e4555dd524e82570e8b4152fe676f408ef1a2653cc13bc6d90\"\n      }\n    ],\n    \"blockNumber\": 10272890,\n    \"cumulativeGasUsed\": \"3174447\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xc137d22fa93316Df55b5F896F5180c722D02b01D\",\n    \"0x3f53c1f28237862FF14ab4f34152d8C6659bA242\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"alerts@hdfcbank.net\",\n    \"30\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"internalType\\\":\\\"struct IHDFCSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":\\\"HDFCSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/DateTime.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.0;\\\\n\\\\n// ----------------------------------------------------------------------------\\\\n// DateTime Library v2.0\\\\n//\\\\n// A gas-efficient Solidity date and time library\\\\n//\\\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\\\n//\\\\n// Tested date range 1970/01/01 to 2345/12/31\\\\n//\\\\n// Conventions:\\\\n// Unit      | Range         | Notes\\\\n// :-------- |:-------------:|:-----\\\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\\\n// year      | 1970 ... 2345 |\\\\n// month     | 1 ... 12      |\\\\n// day       | 1 ... 31      |\\\\n// hour      | 0 ... 23      |\\\\n// minute    | 0 ... 59      |\\\\n// second    | 0 ... 59      |\\\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\\\n//\\\\n//\\\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\\\n//\\\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\\\n// ----------------------------------------------------------------------------\\\\n\\\\nlibrary DateTime {\\\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\\\n    int256 constant OFFSET19700101 = 2440588;\\\\n\\\\n    uint256 constant DOW_MON = 1;\\\\n    uint256 constant DOW_TUE = 2;\\\\n    uint256 constant DOW_WED = 3;\\\\n    uint256 constant DOW_THU = 4;\\\\n    uint256 constant DOW_FRI = 5;\\\\n    uint256 constant DOW_SAT = 6;\\\\n    uint256 constant DOW_SUN = 7;\\\\n\\\\n    // ------------------------------------------------------------------------\\\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\\\n    // the date conversion algorithm from\\\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\\\n    //\\\\n    // days = day\\\\n    //      - 32075\\\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\\\n    //      - offset\\\\n    // ------------------------------------------------------------------------\\\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\\\n        require(year >= 1970);\\\\n        int256 _year = int256(year);\\\\n        int256 _month = int256(month);\\\\n        int256 _day = int256(day);\\\\n\\\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\\\n\\\\n        _days = uint256(__days);\\\\n    }\\\\n\\\\n    function timestampFromDateTime(\\\\n        uint256 year,\\\\n        uint256 month,\\\\n        uint256 day,\\\\n        uint256 hour,\\\\n        uint256 minute,\\\\n        uint256 second\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256 timestamp)\\\\n    {\\\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\\\n            + minute * SECONDS_PER_MINUTE + second;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x64f6113ad342f8bd3c2eb74fde279401d604faf77dd08f6c16c3912c3519f170\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_send_verifier.sol\\\\\\\";\\\\nimport { HDFCTimestampParsing } from \\\\\\\"./lib/HDFCTimestampParsing.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _hdfcMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IHDFCSendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\\\n        // parse and convert to a unix timestamp\\\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\\\n\\\\n        // Signals [11] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\\\n\\\\n        // Signals [12] is the packed offRamper UPI ID hash\\\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\\\n\\\\n        // Signals [14] is intentHash\\\\n        intentHash = bytes32(_proof.signals[14]);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x817fbb9806670719d4e42665dfdf60a3beb3852f3ad8178049e3836732de7034\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { DateTime } from \\\\\\\"../../../external/DateTime.sol\\\\\\\";\\\\n\\\\nimport { StringConversionUtils } from \\\\\\\"../../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary HDFCTimestampParsing {\\\\n\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /**\\\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\\\n     */\\\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\\\n        string[8] memory extractedStrings;\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\\\n                lastBreak = i + 1;\\\\n                breakCounter++;\\\\n            }\\\\n        }\\\\n        // Add last substring to array\\\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\\\n\\\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\\\n        require(breakCounter == 7, \\\\\\\"Invalid date string\\\\\\\");\\\\n\\\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\\\n            extractedStrings[3].stringToUint(0), // year\\\\n            _parseMonth(extractedStrings[2]), // month\\\\n            extractedStrings[1].stringToUint(0), // day\\\\n            extractedStrings[4].stringToUint(0), // hour\\\\n            extractedStrings[5].stringToUint(0), // minute\\\\n            extractedStrings[6].stringToUint(0) // second\\\\n        );\\\\n\\\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\\\n     * string is of the format \\\\\\\"+0530\\\\\\\" or \\\\\\\"-0530\\\\\\\" where the first character is either a \\\\\\\"+\\\\\\\" or a \\\\\\\"-\\\\\\\" and the next 4 characters are hhmm. If\\\\n     * the _timeOffsetString is \\\\\\\"+0530\\\\\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\\\n     *\\\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\\\n     */\\\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\\\n        require(bytes(_timeOffsetString).length == 5, \\\\\\\"Invalid timezone offset\\\\\\\");\\\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\\\n\\\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\\\n\\\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\\\\\"+\\\\\\\" meaning the tz is ahead of GMT and must\\\\n        // be subtracted\\\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\\\n    }\\\\n\\\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jan\\\\\\\")) {\\\\n            return 1;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Feb\\\\\\\")) {\\\\n            return 2;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Mar\\\\\\\")) {\\\\n            return 3;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Apr\\\\\\\")) {\\\\n            return 4;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"May\\\\\\\")) {\\\\n            return 5;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jun\\\\\\\")) {\\\\n            return 6;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jul\\\\\\\")) {\\\\n            return 7;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Aug\\\\\\\")) {\\\\n            return 8;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Sep\\\\\\\")) {\\\\n            return 9;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Oct\\\\\\\")) {\\\\n            return 10;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Nov\\\\\\\")) {\\\\n            return 11;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Dec\\\\\\\")) {\\\\n            return 12;\\\\n        } else {\\\\n            revert(\\\\\\\"Invalid month\\\\\\\");\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74067d5ce3820b0763d3faee918d58f423377b0729af325e8f7670ee4466b713\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\\\n\\\\n\\\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\\\n\\\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\\\n\\\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\\\n\\\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\\\n\\\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\\\n\\\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\\\n\\\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\\\n\\\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\\\n\\\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\\\n\\\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\\\n\\\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\\\n\\\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\\\n\\\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\\\n\\\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\\\n\\\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\\\n\\\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n\\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n\\\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\\\n\\\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\\\n\\\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 416)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 448)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 480)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x708985be21c0895b2b06ac50102da21cdf2bb14ab8f3f7c0a7be754bcc4207d8\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162002de538038062002de583398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612a2e620003b76000396000818160ff01526103160152612a2e6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063bf93fde111610097578063dbac582111610066578063dbac582114610220578063f054a9a314610237578063f2fde38b1461024a578063f6c7226b1461025d57600080fd5b8063bf93fde1146101b5578063c0d05fed146101f0578063ced1e97814610205578063d0b71f991461020d57600080fd5b80638da5cb5b116100d35780638da5cb5b1461016b578063a8ef333f1461017c578063b2a3fda41461018f578063b870676c146101a257600080fd5b806315d276e1146100fa57806319d091521461013e578063715018a614610161575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015161014c36600461230a565b610270565b6040519015158152602001610135565b6101696102e4565b005b6000546001600160a01b0316610121565b600154610121906001600160a01b031681565b61016961019d36600461230a565b6102f8565b600254610121906001600160a01b031681565b6101c86101c3366004612323565b610305565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6101f86105b1565b6040516101359190612360565b6101f861063f565b61016961021b3660046123a8565b6106d1565b61022960045481565b604051908152602001610135565b6101516102453660046123dd565b6106fb565b6101696102583660046123a8565b611081565b61016961026b366004612459565b6110f7565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de919061250a565b92915050565b6102ec61110f565b6102f66000611169565b565b61030061110f565b600455565b600080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103885760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a3916103bb918a919082019060c083019061010084019060040161252c565b602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc919061250a565b6104385760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161037f565b610446610100870135610270565b6104925760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161037f565b60006104a58761010001600160046111b9565b905060036040516104b691906125c3565b6040518091039020816040516020016104cf9190612639565b60405160208183030381529060405280519060200120146105325760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161037f565b61054e60066105488961010001600460066111b9565b90611294565b9550600061056388610100016006600b6111b9565b90506004546105718261146a565b61057b919061266b565b95506102808801359450610260880135935061059b6102a0890135611617565b509496939592945090926102c090920135919050565b600380546105be9061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea9061258f565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60606003805461064e9061258f565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061258f565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b6106d961110f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f85565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610733576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610769576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061079a576000805260206000f35b5050505050565b7f11c0fa536785a14ea232244faf4db797ed78290ed4fb27d5038cac6ae9a3915285527f25d09a0e68aa815305c2995cc88de47499c6bf8dd88aebc829db24846944696160208601526000608086018661083e87357f06e757dafa88a886ce63a8c2b453fedcc71a0eb31f0131a905a4913207355d4c7f1364e9163e5b15b2805a6aac65afcb4001017d5343017c737564a23b6d08428684610736565b61088e60208801357f29ca5087e79a2d1fb754d59033fec517f164dfd734b75a8cc89c6e2894cec0687f15d07987dd5b551b72857cefaed299e7a1989a2927f859a6d0ad593beba9361384610736565b6108de60408801357f2b6a88b3112d75e15c1fc7f737cf28da3a22df26156e80d1dceb1d792aa6f5697f24580e32cd5353fa5aa622fec5d0cb8834ad9a35a5d7ed3de960648f39fa42af84610736565b61092e60608801357f24a9fdbfeb9e558ea7eb1c0f9d2f59adb3e19fee489181e0649cac9968d92c3d7f23ea51f6d35583a15c0e0f0bb44cdb055ddccb3109365d0feb10559bce3f682484610736565b61097e60808801357f083b0d8149f542f7d51ff78dd5bd947ac228adf4765f13cbb8ae4b0c9de33d197f04282c6bb25a8a05b9d698fa726e427251a636a05ae11f8178ed74ce70c7b38384610736565b6109ce60a08801357f1803098aec4fded4fc5b2bab68cf7fb1f5cdfc173e8b4c2d6f3ad5ae8b7d5ce47f02cf06b9216abdbe0d145ee6ba106240740f6554ba338900ae157bc1d113612384610736565b610a1e60c08801357f2e7c4cf7b58d9b12bb9cee35f053430f80678fe1885b216886c042d0cde497487f12a5802440d5b5d29b299b8818078e7c2165b5d2f49776e55ac4c8da11581e2f84610736565b610a6e60e08801357f1d78c8b32944313d7e911c1c721109f4a04d0879fe1e1802e3ddf943612a4ddd7f245b7127d480d0e750564b78818a037a57e3a17f889b15dbb01e9e243ad4218084610736565b610abf6101008801357f2568c716b634adaf4106a56b42776b724d5ef21e52864a1347088de129b478fe7f17565054db4aa08be111cfc14344b79875bc704e563362d7a9d3992271be350984610736565b610b106101208801357f0400bd816ec371a36d4594b5466ba7a092139238746fcee0f5e254b7944c51617f013d5ee8b0b9e671e5bde7130e47682c47ca38dd479db7331ca393bf5edfa02484610736565b610b616101408801357f10444a550566f8186e8fd121fe8a929e92f66e479515b67833a3d4bc07e5eeb77f24042e12cbcf48ac6d7b05da02753790ed095694fe2b3184239ec60500d3a86a84610736565b610bb26101608801357f29d1fba93734715a1dee7b66433894a2fb3304bcc7784a98f5f54b57c5f31f9e7f297559c6982845ac8cbc9d10c68703d05fff58f59bd022718930361da7d6240584610736565b610c036101808801357f01fbfd0d8299e28fe5b7b1e44840e0e49175cd784ea29456a5544d41ec56ed4f7f0120f0145b0c23de99655163334fafda2296421f9ff6d616a4381b731bcf8e9284610736565b610c546101a08801357f272e3f68e4dde921f3fecbf1da3e48be0375066071f79cf60d12a94909b013137f1c172fb9ad177d1f52f6f867020a4fd1d20819d027b26b5306eabd3d6a2da44884610736565b610ca56101c08801357f29bf2dd28bddc6677bfc29ae10bc2fc88614c805470de8f9c3bd943ef5b56b477f0bbe36a822bf94a2563eccdcdf022dce00eb8770630efa37084f7dabe6ec84f384610736565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0a656bd3ce0f460dfb7f25d7c71d52fecdc0eb363d413b2585775d8283eb0b046102808201527f0717de189821c8fd7338c4b95469c6dd47ee1aad6c8510dc9bcd7983852514eb6102a08201527f2d5f46e1cbebc83f7340eecebc2fff23e5da01cab367c8f7ec52c1bd3f6a2bc36102c08201527f1c0356f78812a13151f9212f9c69e8a7a9b2a7634c2b43617adda632ce9954d86102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f9d6000840135610702565b610faa6020840135610702565b610fb76040840135610702565b610fc46060840135610702565b610fd16080840135610702565b610fde60a0840135610702565b610feb60c0840135610702565b610ff860e0840135610702565b611006610100840135610702565b611014610120840135610702565b611022610140840135610702565b611030610160840135610702565b61103e610180840135610702565b61104c6101a0840135610702565b61105a6101c0840135610702565b6110686101e0840135610702565b611075818486888a6107a1565b90508060005260206000f35b61108961110f565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161037f565b61073381611169565b6110ff61110f565b600361110b82826126cd565b5050565b6000546001600160a01b031633146102f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006111c7848461278d565b60ff1667ffffffffffffffff8111156111e2576111e2612443565b60405190808252806020026020018201604052801561120b578160200160208202803683370190505b50905060ff84165b8360ff16811015611270578581600f811061123057611230612579565b60200201358261124360ff8816846127a6565b8151811061125357611253612579565b602090810291909101015280611268816127b9565b915050611213565b5061128b6007825161128291906127d2565b8290600761172b565b95945050505050565b600082818080805b84518110156113e457603060f81b8582815181106112bc576112bc612579565b01602001516001600160f81b031916108015906112fd5750603960f81b8582815181106112eb576112eb612579565b01602001516001600160f81b03191611155b1561134057603085828151811061131657611316612579565b0160200151611328919060f81c6127a6565b61133385600a6127d2565b61133d919061266b565b93505b81156113545782611350816127b9565b9350505b84818151811061136657611366612579565b01602001516001600160f81b031916601760f91b036113d25781156113cd5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161037f565b600191505b806113dc816127b9565b91505061129c565b50858211156114405760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161037f565b61144a82876127a6565b61145590600a6128cd565b61145f90846127d2565b979650505050505050565b60006114746122e2565b60008060005b855181101561152e5785818151811061149557611495612579565b6020910101516001600160f81b031916600160fd1b14806114da57508581815181106114c3576114c3612579565b6020910101516001600160f81b031916601d60f91b145b1561151c576114ea868383611a5c565b8484600881106114fc576114fc612579565b602002015261150c81600161266b565b915082611518816127b9565b9350505b80611526816127b9565b91505061147a565b50845161153e9086908390611a5c565b83836008811061155057611550612579565b60200201526007821461159b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b604482015260640161037f565b60006115fa6115b3828660035b602002015190611294565b60408601516115c190611b29565b6115ce60008860016115a8565b6115db60008960046115a8565b6115e860008a60056115a8565b6115f560008b60066115a8565b611f5f565b905061160d818560076020020151611fb0565b9695505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611684919061250a565b156116d15760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161037f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561171757600080fd5b505af115801561079a573d6000803e3d6000fd5b606060008083865161173d91906127d2565b67ffffffffffffffff81111561175557611755612443565b6040519080825280601f01601f19166020018201604052801561177f576020820181803683370190505b5090506000805b87518161ffff161015611936576000888261ffff16815181106117ab576117ab612579565b6020026020010151905060008767ffffffffffffffff8111156117d0576117d0612443565b6040519080825280602002602001820160405280156117f9578160200160208202803683370190505b50905060005b8881101561184b576118128160086127d2565b83901c82828151811061182757611827612579565b60ff9092166020928302919091019091015280611843816127b9565b9150506117ff565b5060005b8881101561192057600082828151811061186b5761186b612579565b602002602001015160ff169050806000146118e3578060f81b87878151811061189657611896612579565b60200101906001600160f81b031916908160001a905350856118b7816127b9565b96506118c690506002896128ef565b60ff166000036118de576118db600189612911565b97505b611906565b6118ee6002896128ef565b60ff1660010361190657611903600189612911565b97505b5060089290921c9180611918816127b9565b91505061184f565b505050808061192e9061292a565b915050611786565b5060018360ff1610156119d75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161037f565b85811115611a455760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161037f565b6000611a50836120a7565b98975050505050505050565b6060836000611a6b85856127a6565b67ffffffffffffffff811115611a8357611a83612443565b6040519080825280601f01601f191660200182016040528015611aad576020820181803683370190505b509050845b84811015611b1f57828181518110611acc57611acc612579565b01602001516001600160f81b03191682611ae688846127a6565b81518110611af657611af6612579565b60200101906001600160f81b031916908160001a90535080611b17816127b9565b915050611ab2565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611b5d9190612639565b6040516020818303038152906040528051906020012003611b8057506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611bb29190612639565b6040516020818303038152906040528051906020012003611bd557506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611c079190612639565b6040516020818303038152906040528051906020012003611c2a57506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611c5c9190612639565b6040516020818303038152906040528051906020012003611c7f57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611cb19190612639565b6040516020818303038152906040528051906020012003611cd457506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611d069190612639565b6040516020818303038152906040528051906020012003611d2957506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611d5b9190612639565b6040516020818303038152906040528051906020012003611d7e57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611db09190612639565b6040516020818303038152906040528051906020012003611dd357506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611e059190612639565b6040516020818303038152906040528051906020012003611e2857506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611e5a9190612639565b6040516020818303038152906040528051906020012003611e7d5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611eaf9190612639565b6040516020818303038152906040528051906020012003611ed25750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611f049190612639565b6040516020818303038152906040528051906020012003611f275750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b604482015260640161037f565b600081611f6d603c856127d2565b611f79610e10876127d2565b62015180611f888b8b8b6121b1565b611f9291906127d2565b611f9c919061266b565b611fa6919061266b565b61145f919061266b565b600081516005146120035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d657a6f6e65206f6666736574000000000000000000604482015260640161037f565b6000612016816105488560016003611a5c565b9050600061202b816105488660036005611a5c565b9050600061203a82603c6127d2565b61204684610e106127d2565b612050919061266b565b9050600061206086826001611a5c565b60008151811061207257612072612579565b01602001516001600160f81b0319169050602b60f81b811461209d57612098828861266b565b61145f565b61145f82886127a6565b8051606090829060005b82518110156120fc578281815181106120cc576120cc612579565b01602001516001600160f81b0319166000036120ea578091506120fc565b806120f4816127b9565b9150506120b1565b5060008167ffffffffffffffff81111561211857612118612443565b6040519080825280601f01601f191660200182016040528015612142576020820181803683370190505b50905060005b828110156121a85783818151811061216257612162612579565b602001015160f81c60f81b82828151811061217f5761217f612579565b60200101906001600160f81b031916908160001a905350806121a0816127b9565b915050612148565b50949350505050565b60006107b28410156121c257600080fd5b838383600062253d8c60046064600c6121dc600e8861294b565b6121e69190612972565b6121f2886113246129a0565b6121fc91906129a0565b6122069190612972565b6122119060036129c8565b61221b9190612972565b600c80612229600e8861294b565b6122339190612972565b61223e90600c6129c8565b61224960028861294b565b612253919061294b565b61225f9061016f6129c8565b6122699190612972565b6004600c612278600e8961294b565b6122829190612972565b61228e896112c06129a0565b61229891906129a0565b6122a4906105b56129c8565b6122ae9190612972565b6122ba617d4b8761294b565b6122c491906129a0565b6122ce91906129a0565b6122d8919061294b565b611a50919061294b565b6040518061010001604052806008905b60608152602001906001900390816122f25790505090565b60006020828403121561231c57600080fd5b5035919050565b60006102e0828403121561233657600080fd5b50919050565b60005b8381101561235757818101518382015260200161233f565b50506000910152565b602081526000825180602084015261237f81604085016020870161233c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073357600080fd5b6000602082840312156123ba57600080fd5b81356123c581612393565b9392505050565b80604081018310156102de57600080fd5b6000806000806102e08086880312156123f557600080fd5b6123ff87876123cc565b945060c086018781111561241257600080fd5b60408701945061242288826123cc565b93505086818701111561243457600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561246b57600080fd5b813567ffffffffffffffff8082111561248357600080fd5b818401915084601f83011261249757600080fd5b8135818111156124a9576124a9612443565b604051601f8201601f19908116603f011681019083821181831017156124d1576124d1612443565b816040528281528760208487010111156124ea57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561251c57600080fd5b815180151581146123c557600080fd5b6102e081016040808784378083018660005b600281101561255b5783828437918301919083019060010161253e565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806125a357607f821691505b60208210810361233657634e487b7160e01b600052602260045260246000fd5b60008083546125d18161258f565b600182811680156125e957600181146125fe5761262d565b60ff198416875282151583028701945061262d565b8760005260208060002060005b858110156126245781548a82015290840190820161260b565b50505082870194505b50929695505050505050565b6000825161264b81846020870161233c565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102de576102de612655565b601f8211156126c857600081815260208120601f850160051c810160208610156126a55750805b601f850160051c820191505b818110156126c4578281556001016126b1565b5050505b505050565b815167ffffffffffffffff8111156126e7576126e7612443565b6126fb816126f5845461258f565b8461267e565b602080601f83116001811461273057600084156127185750858301515b600019600386901b1c1916600185901b1785556126c4565b600085815260208120601f198616915b8281101561275f57888601518255948401946001909101908401612740565b508582101561277d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102de576102de612655565b818103818111156102de576102de612655565b6000600182016127cb576127cb612655565b5060010190565b80820281158282048414176102de576102de612655565b600181815b8085111561282457816000190482111561280a5761280a612655565b8085161561281757918102915b93841c93908002906127ee565b509250929050565b60008261283b575060016102de565b81612848575060006102de565b816001811461285e576002811461286857612884565b60019150506102de565b60ff84111561287957612879612655565b50506001821b6102de565b5060208310610133831016604e8410600b84101617156128a7575081810a6102de565b6128b183836127e9565b80600019048211156128c5576128c5612655565b029392505050565b60006123c5838361282c565b634e487b7160e01b600052601260045260246000fd5b600060ff831680612902576129026128d9565b8060ff84160691505092915050565b60ff81811683821601908111156102de576102de612655565b600061ffff80831681810361294157612941612655565b6001019392505050565b818103600083128015838313168383128216171561296b5761296b612655565b5092915050565b600082612981576129816128d9565b600160ff1b82146000198414161561299b5761299b612655565b500590565b80820182811260008312801582168215821617156129c0576129c0612655565b505092915050565b80820260008212600160ff1b841416156129e4576129e4612655565b81810583148215176102de576102de61265556fea26469706673582212203718a7e9e50a4f07565325df33ba83f03bd8e8f7b787577bbb0628965d0b031e64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063bf93fde111610097578063dbac582111610066578063dbac582114610220578063f054a9a314610237578063f2fde38b1461024a578063f6c7226b1461025d57600080fd5b8063bf93fde1146101b5578063c0d05fed146101f0578063ced1e97814610205578063d0b71f991461020d57600080fd5b80638da5cb5b116100d35780638da5cb5b1461016b578063a8ef333f1461017c578063b2a3fda41461018f578063b870676c146101a257600080fd5b806315d276e1146100fa57806319d091521461013e578063715018a614610161575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015161014c36600461230a565b610270565b6040519015158152602001610135565b6101696102e4565b005b6000546001600160a01b0316610121565b600154610121906001600160a01b031681565b61016961019d36600461230a565b6102f8565b600254610121906001600160a01b031681565b6101c86101c3366004612323565b610305565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6101f86105b1565b6040516101359190612360565b6101f861063f565b61016961021b3660046123a8565b6106d1565b61022960045481565b604051908152602001610135565b6101516102453660046123dd565b6106fb565b6101696102583660046123a8565b611081565b61016961026b366004612459565b6110f7565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de919061250a565b92915050565b6102ec61110f565b6102f66000611169565b565b61030061110f565b600455565b600080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103885760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a3916103bb918a919082019060c083019061010084019060040161252c565b602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc919061250a565b6104385760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161037f565b610446610100870135610270565b6104925760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161037f565b60006104a58761010001600160046111b9565b905060036040516104b691906125c3565b6040518091039020816040516020016104cf9190612639565b60405160208183030381529060405280519060200120146105325760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161037f565b61054e60066105488961010001600460066111b9565b90611294565b9550600061056388610100016006600b6111b9565b90506004546105718261146a565b61057b919061266b565b95506102808801359450610260880135935061059b6102a0890135611617565b509496939592945090926102c090920135919050565b600380546105be9061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea9061258f565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60606003805461064e9061258f565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061258f565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b6106d961110f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f85565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610733576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610769576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061079a576000805260206000f35b5050505050565b7f11c0fa536785a14ea232244faf4db797ed78290ed4fb27d5038cac6ae9a3915285527f25d09a0e68aa815305c2995cc88de47499c6bf8dd88aebc829db24846944696160208601526000608086018661083e87357f06e757dafa88a886ce63a8c2b453fedcc71a0eb31f0131a905a4913207355d4c7f1364e9163e5b15b2805a6aac65afcb4001017d5343017c737564a23b6d08428684610736565b61088e60208801357f29ca5087e79a2d1fb754d59033fec517f164dfd734b75a8cc89c6e2894cec0687f15d07987dd5b551b72857cefaed299e7a1989a2927f859a6d0ad593beba9361384610736565b6108de60408801357f2b6a88b3112d75e15c1fc7f737cf28da3a22df26156e80d1dceb1d792aa6f5697f24580e32cd5353fa5aa622fec5d0cb8834ad9a35a5d7ed3de960648f39fa42af84610736565b61092e60608801357f24a9fdbfeb9e558ea7eb1c0f9d2f59adb3e19fee489181e0649cac9968d92c3d7f23ea51f6d35583a15c0e0f0bb44cdb055ddccb3109365d0feb10559bce3f682484610736565b61097e60808801357f083b0d8149f542f7d51ff78dd5bd947ac228adf4765f13cbb8ae4b0c9de33d197f04282c6bb25a8a05b9d698fa726e427251a636a05ae11f8178ed74ce70c7b38384610736565b6109ce60a08801357f1803098aec4fded4fc5b2bab68cf7fb1f5cdfc173e8b4c2d6f3ad5ae8b7d5ce47f02cf06b9216abdbe0d145ee6ba106240740f6554ba338900ae157bc1d113612384610736565b610a1e60c08801357f2e7c4cf7b58d9b12bb9cee35f053430f80678fe1885b216886c042d0cde497487f12a5802440d5b5d29b299b8818078e7c2165b5d2f49776e55ac4c8da11581e2f84610736565b610a6e60e08801357f1d78c8b32944313d7e911c1c721109f4a04d0879fe1e1802e3ddf943612a4ddd7f245b7127d480d0e750564b78818a037a57e3a17f889b15dbb01e9e243ad4218084610736565b610abf6101008801357f2568c716b634adaf4106a56b42776b724d5ef21e52864a1347088de129b478fe7f17565054db4aa08be111cfc14344b79875bc704e563362d7a9d3992271be350984610736565b610b106101208801357f0400bd816ec371a36d4594b5466ba7a092139238746fcee0f5e254b7944c51617f013d5ee8b0b9e671e5bde7130e47682c47ca38dd479db7331ca393bf5edfa02484610736565b610b616101408801357f10444a550566f8186e8fd121fe8a929e92f66e479515b67833a3d4bc07e5eeb77f24042e12cbcf48ac6d7b05da02753790ed095694fe2b3184239ec60500d3a86a84610736565b610bb26101608801357f29d1fba93734715a1dee7b66433894a2fb3304bcc7784a98f5f54b57c5f31f9e7f297559c6982845ac8cbc9d10c68703d05fff58f59bd022718930361da7d6240584610736565b610c036101808801357f01fbfd0d8299e28fe5b7b1e44840e0e49175cd784ea29456a5544d41ec56ed4f7f0120f0145b0c23de99655163334fafda2296421f9ff6d616a4381b731bcf8e9284610736565b610c546101a08801357f272e3f68e4dde921f3fecbf1da3e48be0375066071f79cf60d12a94909b013137f1c172fb9ad177d1f52f6f867020a4fd1d20819d027b26b5306eabd3d6a2da44884610736565b610ca56101c08801357f29bf2dd28bddc6677bfc29ae10bc2fc88614c805470de8f9c3bd943ef5b56b477f0bbe36a822bf94a2563eccdcdf022dce00eb8770630efa37084f7dabe6ec84f384610736565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0a656bd3ce0f460dfb7f25d7c71d52fecdc0eb363d413b2585775d8283eb0b046102808201527f0717de189821c8fd7338c4b95469c6dd47ee1aad6c8510dc9bcd7983852514eb6102a08201527f2d5f46e1cbebc83f7340eecebc2fff23e5da01cab367c8f7ec52c1bd3f6a2bc36102c08201527f1c0356f78812a13151f9212f9c69e8a7a9b2a7634c2b43617adda632ce9954d86102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f9d6000840135610702565b610faa6020840135610702565b610fb76040840135610702565b610fc46060840135610702565b610fd16080840135610702565b610fde60a0840135610702565b610feb60c0840135610702565b610ff860e0840135610702565b611006610100840135610702565b611014610120840135610702565b611022610140840135610702565b611030610160840135610702565b61103e610180840135610702565b61104c6101a0840135610702565b61105a6101c0840135610702565b6110686101e0840135610702565b611075818486888a6107a1565b90508060005260206000f35b61108961110f565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161037f565b61073381611169565b6110ff61110f565b600361110b82826126cd565b5050565b6000546001600160a01b031633146102f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006111c7848461278d565b60ff1667ffffffffffffffff8111156111e2576111e2612443565b60405190808252806020026020018201604052801561120b578160200160208202803683370190505b50905060ff84165b8360ff16811015611270578581600f811061123057611230612579565b60200201358261124360ff8816846127a6565b8151811061125357611253612579565b602090810291909101015280611268816127b9565b915050611213565b5061128b6007825161128291906127d2565b8290600761172b565b95945050505050565b600082818080805b84518110156113e457603060f81b8582815181106112bc576112bc612579565b01602001516001600160f81b031916108015906112fd5750603960f81b8582815181106112eb576112eb612579565b01602001516001600160f81b03191611155b1561134057603085828151811061131657611316612579565b0160200151611328919060f81c6127a6565b61133385600a6127d2565b61133d919061266b565b93505b81156113545782611350816127b9565b9350505b84818151811061136657611366612579565b01602001516001600160f81b031916601760f91b036113d25781156113cd5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161037f565b600191505b806113dc816127b9565b91505061129c565b50858211156114405760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161037f565b61144a82876127a6565b61145590600a6128cd565b61145f90846127d2565b979650505050505050565b60006114746122e2565b60008060005b855181101561152e5785818151811061149557611495612579565b6020910101516001600160f81b031916600160fd1b14806114da57508581815181106114c3576114c3612579565b6020910101516001600160f81b031916601d60f91b145b1561151c576114ea868383611a5c565b8484600881106114fc576114fc612579565b602002015261150c81600161266b565b915082611518816127b9565b9350505b80611526816127b9565b91505061147a565b50845161153e9086908390611a5c565b83836008811061155057611550612579565b60200201526007821461159b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b604482015260640161037f565b60006115fa6115b3828660035b602002015190611294565b60408601516115c190611b29565b6115ce60008860016115a8565b6115db60008960046115a8565b6115e860008a60056115a8565b6115f560008b60066115a8565b611f5f565b905061160d818560076020020151611fb0565b9695505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611684919061250a565b156116d15760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161037f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561171757600080fd5b505af115801561079a573d6000803e3d6000fd5b606060008083865161173d91906127d2565b67ffffffffffffffff81111561175557611755612443565b6040519080825280601f01601f19166020018201604052801561177f576020820181803683370190505b5090506000805b87518161ffff161015611936576000888261ffff16815181106117ab576117ab612579565b6020026020010151905060008767ffffffffffffffff8111156117d0576117d0612443565b6040519080825280602002602001820160405280156117f9578160200160208202803683370190505b50905060005b8881101561184b576118128160086127d2565b83901c82828151811061182757611827612579565b60ff9092166020928302919091019091015280611843816127b9565b9150506117ff565b5060005b8881101561192057600082828151811061186b5761186b612579565b602002602001015160ff169050806000146118e3578060f81b87878151811061189657611896612579565b60200101906001600160f81b031916908160001a905350856118b7816127b9565b96506118c690506002896128ef565b60ff166000036118de576118db600189612911565b97505b611906565b6118ee6002896128ef565b60ff1660010361190657611903600189612911565b97505b5060089290921c9180611918816127b9565b91505061184f565b505050808061192e9061292a565b915050611786565b5060018360ff1610156119d75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161037f565b85811115611a455760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161037f565b6000611a50836120a7565b98975050505050505050565b6060836000611a6b85856127a6565b67ffffffffffffffff811115611a8357611a83612443565b6040519080825280601f01601f191660200182016040528015611aad576020820181803683370190505b509050845b84811015611b1f57828181518110611acc57611acc612579565b01602001516001600160f81b03191682611ae688846127a6565b81518110611af657611af6612579565b60200101906001600160f81b031916908160001a90535080611b17816127b9565b915050611ab2565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611b5d9190612639565b6040516020818303038152906040528051906020012003611b8057506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611bb29190612639565b6040516020818303038152906040528051906020012003611bd557506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611c079190612639565b6040516020818303038152906040528051906020012003611c2a57506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611c5c9190612639565b6040516020818303038152906040528051906020012003611c7f57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611cb19190612639565b6040516020818303038152906040528051906020012003611cd457506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611d069190612639565b6040516020818303038152906040528051906020012003611d2957506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611d5b9190612639565b6040516020818303038152906040528051906020012003611d7e57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611db09190612639565b6040516020818303038152906040528051906020012003611dd357506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611e059190612639565b6040516020818303038152906040528051906020012003611e2857506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611e5a9190612639565b6040516020818303038152906040528051906020012003611e7d5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611eaf9190612639565b6040516020818303038152906040528051906020012003611ed25750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611f049190612639565b6040516020818303038152906040528051906020012003611f275750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b604482015260640161037f565b600081611f6d603c856127d2565b611f79610e10876127d2565b62015180611f888b8b8b6121b1565b611f9291906127d2565b611f9c919061266b565b611fa6919061266b565b61145f919061266b565b600081516005146120035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d657a6f6e65206f6666736574000000000000000000604482015260640161037f565b6000612016816105488560016003611a5c565b9050600061202b816105488660036005611a5c565b9050600061203a82603c6127d2565b61204684610e106127d2565b612050919061266b565b9050600061206086826001611a5c565b60008151811061207257612072612579565b01602001516001600160f81b0319169050602b60f81b811461209d57612098828861266b565b61145f565b61145f82886127a6565b8051606090829060005b82518110156120fc578281815181106120cc576120cc612579565b01602001516001600160f81b0319166000036120ea578091506120fc565b806120f4816127b9565b9150506120b1565b5060008167ffffffffffffffff81111561211857612118612443565b6040519080825280601f01601f191660200182016040528015612142576020820181803683370190505b50905060005b828110156121a85783818151811061216257612162612579565b602001015160f81c60f81b82828151811061217f5761217f612579565b60200101906001600160f81b031916908160001a905350806121a0816127b9565b915050612148565b50949350505050565b60006107b28410156121c257600080fd5b838383600062253d8c60046064600c6121dc600e8861294b565b6121e69190612972565b6121f2886113246129a0565b6121fc91906129a0565b6122069190612972565b6122119060036129c8565b61221b9190612972565b600c80612229600e8861294b565b6122339190612972565b61223e90600c6129c8565b61224960028861294b565b612253919061294b565b61225f9061016f6129c8565b6122699190612972565b6004600c612278600e8961294b565b6122829190612972565b61228e896112c06129a0565b61229891906129a0565b6122a4906105b56129c8565b6122ae9190612972565b6122ba617d4b8761294b565b6122c491906129a0565b6122ce91906129a0565b6122d8919061294b565b611a50919061294b565b6040518061010001604052806008905b60608152602001906001900390816122f25790505090565b60006020828403121561231c57600080fd5b5035919050565b60006102e0828403121561233657600080fd5b50919050565b60005b8381101561235757818101518382015260200161233f565b50506000910152565b602081526000825180602084015261237f81604085016020870161233c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073357600080fd5b6000602082840312156123ba57600080fd5b81356123c581612393565b9392505050565b80604081018310156102de57600080fd5b6000806000806102e08086880312156123f557600080fd5b6123ff87876123cc565b945060c086018781111561241257600080fd5b60408701945061242288826123cc565b93505086818701111561243457600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561246b57600080fd5b813567ffffffffffffffff8082111561248357600080fd5b818401915084601f83011261249757600080fd5b8135818111156124a9576124a9612443565b604051601f8201601f19908116603f011681019083821181831017156124d1576124d1612443565b816040528281528760208487010111156124ea57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561251c57600080fd5b815180151581146123c557600080fd5b6102e081016040808784378083018660005b600281101561255b5783828437918301919083019060010161253e565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806125a357607f821691505b60208210810361233657634e487b7160e01b600052602260045260246000fd5b60008083546125d18161258f565b600182811680156125e957600181146125fe5761262d565b60ff198416875282151583028701945061262d565b8760005260208060002060005b858110156126245781548a82015290840190820161260b565b50505082870194505b50929695505050505050565b6000825161264b81846020870161233c565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102de576102de612655565b601f8211156126c857600081815260208120601f850160051c810160208610156126a55750805b601f850160051c820191505b818110156126c4578281556001016126b1565b5050505b505050565b815167ffffffffffffffff8111156126e7576126e7612443565b6126fb816126f5845461258f565b8461267e565b602080601f83116001811461273057600084156127185750858301515b600019600386901b1c1916600185901b1785556126c4565b600085815260208120601f198616915b8281101561275f57888601518255948401946001909101908401612740565b508582101561277d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102de576102de612655565b818103818111156102de576102de612655565b6000600182016127cb576127cb612655565b5060010190565b80820281158282048414176102de576102de612655565b600181815b8085111561282457816000190482111561280a5761280a612655565b8085161561281757918102915b93841c93908002906127ee565b509250929050565b60008261283b575060016102de565b81612848575060006102de565b816001811461285e576002811461286857612884565b60019150506102de565b60ff84111561287957612879612655565b50506001821b6102de565b5060208310610133831016604e8410600b84101617156128a7575081810a6102de565b6128b183836127e9565b80600019048211156128c5576128c5612655565b029392505050565b60006123c5838361282c565b634e487b7160e01b600052601260045260246000fd5b600060ff831680612902576129026128d9565b8060ff84160691505092915050565b60ff81811683821601908111156102de576102de612655565b600061ffff80831681810361294157612941612655565b6001019392505050565b818103600083128015838313168383128216171561296b5761296b612655565b5092915050565b600082612981576129816128d9565b600160ff1b82146000198414161561299b5761299b612655565b500590565b80820182811260008312801582168215821617156129c0576129c0612655565b505092915050565b80820260008212600160ff1b841416156129e4576129e4612655565b81810583148215176102de576102de61265556fea26469706673582212203718a7e9e50a4f07565325df33ba83f03bd8e8f7b787577bbb0628965d0b031e64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/NullifierRegistry.json",
    "content": "{\n  \"address\": \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"nullifier\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NullifierAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_nullifier\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addNullifier\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWriters\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isNullified\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWriter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removedWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"writers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd7fb107671a992be9e8185170e8ee9ef39c4d12e1124f65a96ff901715a23c70\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"transactionIndex\": 14,\n    \"gasUsed\": \"610041\",\n    \"logsBloom\": \"0x00000020000000000000000000000000000000000000000000800000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x9eb0a911a14e0c8fe2aeba1911f5f8ecf40c7e90f120a8a62c80ea286474adf8\",\n    \"transactionHash\": \"0xd7fb107671a992be9e8185170e8ee9ef39c4d12e1124f65a96ff901715a23c70\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 14,\n        \"blockNumber\": 6510426,\n        \"transactionHash\": \"0xd7fb107671a992be9e8185170e8ee9ef39c4d12e1124f65a96ff901715a23c70\",\n        \"address\": \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 18,\n        \"blockHash\": \"0x9eb0a911a14e0c8fe2aeba1911f5f8ecf40c7e90f120a8a62c80ea286474adf8\"\n      }\n    ],\n    \"blockNumber\": 6510426,\n    \"cumulativeGasUsed\": \"2089033\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3235f00afe52b593578a06ba6b1f711c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"nullifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NullifierAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_nullifier\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addNullifier\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWriters\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isNullified\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWriter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removedWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"writers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"params\\\":{\\\"_nullifier\\\":\\\"The nullifier to store\\\"}},\\\"addWritePermission(address)\\\":{\\\"params\\\":{\\\"_newWriter\\\":\\\"The nullifier to store\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeWritePermission(address)\\\":{\\\"params\\\":{\\\"_removedWriter\\\":\\\"The nullifier to store\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"notice\\\":\\\"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\"},\\\"addWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\"},\\\"removeWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":\\\"NullifierRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"../../external/AddressArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\\\n    event WriterAdded(address writer);\\\\n    event WriterRemoved(address writer);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyWriter() {\\\\n        require(isWriter[msg.sender], \\\\\\\"Only addresses with write permissions can call\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(bytes32 => bool) public isNullified;\\\\n    mapping(address => bool) public isWriter;\\\\n    address[] public writers;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor() Ownable() {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\\n     *\\\\n     * @param _nullifier    The nullifier to store\\\\n     */\\\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\\\n        require(!isNullified[_nullifier], \\\\\\\"Nullifier already exists\\\\\\\");\\\\n\\\\n        isNullified[_nullifier] = true;\\\\n\\\\n        emit NullifierAdded(_nullifier, msg.sender);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\\n     *\\\\n     * @param _newWriter    The nullifier to store\\\\n     */\\\\n    function addWritePermission(address _newWriter) external onlyOwner {\\\\n        require(!isWriter[_newWriter], \\\\\\\"Address is already a writer\\\\\\\");\\\\n\\\\n        isWriter[_newWriter] = true;\\\\n        writers.push(_newWriter);\\\\n\\\\n        emit WriterAdded(_newWriter);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\\n     *\\\\n     * @param _removedWriter    The nullifier to store\\\\n     */\\\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\\\n        require(isWriter[_removedWriter], \\\\\\\"Address is not a writer\\\\\\\");\\\\n\\\\n        isWriter[_removedWriter] = false;\\\\n        writers.removeStorage(_removedWriter);\\\\n\\\\n        emit WriterRemoved(_removedWriter);\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getWriters() external view returns(address[] memory) {\\\\n       return writers;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x20f773bb8f52b109301fca328369f2d5cebc8d105d2d0cf9588adccab2f9d1c8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61099f8061007e6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"params\": {\n          \"_nullifier\": \"The nullifier to store\"\n        }\n      },\n      \"addWritePermission(address)\": {\n        \"params\": {\n          \"_newWriter\": \"The nullifier to store\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"params\": {\n          \"_removedWriter\": \"The nullifier to store\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"notice\": \"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\"\n      },\n      \"addWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5807,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isNullified\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 5811,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isWriter\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 5814,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"writers\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/Poseidon3.json",
    "content": "{\n  \"address\": \"0xfdb7153989116F650387813013A047B6Ab56aEff\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[3]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd3e6ed9a8dc0817c1968a5976e478f444da8de84b63b64d9016332b936daeaa7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xfdb7153989116F650387813013A047B6Ab56aEff\",\n    \"transactionIndex\": 1,\n    \"gasUsed\": \"2744494\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x987f380dda86a43cb164cff4fb6122b06cfb3f3e772a6607a19f90fb9fb35a93\",\n    \"transactionHash\": \"0xd3e6ed9a8dc0817c1968a5976e478f444da8de84b63b64d9016332b936daeaa7\",\n    \"logs\": [],\n    \"blockNumber\": 6510417,\n    \"cumulativeGasUsed\": \"2791407\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c6000396130af6000f37c010000000000000000000000000000000000000000000000000000000060003504806325cc70e81490635a53025d14176200003757fe5b7f236d13393ef85cc48a351dd786dd7a1de5e39942296127fd87947223ae5108ad6020527f277686494f7644bbc4a9b194e10724eb967f1dc58718e59e3cedc821b2a7ae196040527f023db68784e3f0cc0b85618826a9b3505129c16479973b0a84a4529e66b09c626060527f1d359d245f286c12d50d663bae733f978af08cdbd63017c57b3a75646ff382c16080527f2a75a171563b807db525be259699ab28fe9bc7fb1f70943ff049bc970e841a0c60a0527f083abff5e10051f078e2827d092e1ae808b4dd3e15ccc3706f38ce4157b6770e60c0527f1a5ad71bbbecd8a97dc49cfdbae303ad24d5c4741eab8b7568a9ff8253a1eb6f60e0527f0d745fd00dd167fb86772133640f02ce945004a7bc2c59e8790f725c5d84f0af610100527f2070679e798782ef592a52ca9cef820d497ad2eecbaa7e42f366b3e521c4ed42610120527f2e18c8570d20bf5df800739a53da75d906ece318cd224ab6b3a2be979e2d7eab610140527f0fa86f0f27e4d3dd7f3367ce86f684f1f2e4386d3e5b9f38fa283c6aa723b608610160527f03f3e6fab791f16628168e4b14dbaeb657035ee3da6b2ca83f0c2491e0b403eb610180527f2f545e578202c9732488540e41f783b68ff0613fd79375f8ba8b3d30958e76776101a0527f23810bf82877fc19bff7eefeae3faf4bb8104c32ba4cd701596a15623d01476e6101c0527f014fcd5eb0be6d5beeafc4944034cf321c068ef930f10be2207ed58d2a34cdd66101e0527f00c15fc3a1d5733dd835eae0823e377f8ba4a8b627627cc2bb661c25d20fb52a610200527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016044356024356004356000847f19b849f69450b06848da1d39bd5e4a4302bb86744edc26238b0878e269ed23e582089050847f265ddfe127dd51bd7239347b758f0a1320eb2cc7450acc1dad47f80c8dcf34d683089150847f199750ec472f1809e0f66a545e1e51624108ac845015c2aa3dfc36bab497d8aa84089250847f157ff3fe65ac7208110f06a5f74302b14d743ea25067f0ffd032f787c7f1cdf8850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200038160005262003015565b847f2e49c43c4569dd9c5fd35ac45fca33f10b15c590692f8beefe18f4896ac9490282089050847f0e35fb89981890520d4aef2b6d6506c3cb2f0b6973c24fa82731345ffa2d1f1e83089150847f251ad47cb15c4f1105f109ae5e944f1ba9d9e7806d667ffec6fe723002e0b99684089250847f13da07dc64d428369873e97160234641f8beb56fdd05e5f3563fa39d9c22df4e850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200045660005262003015565b847f0c009b84e650e6d23dc00c7dccef7483a553939689d350cd46e7b89055fd473882089050847f011f16b1c63a854f01992e3956f42d8b04eb650c6d535eb0203dec74befdca0683089150847f0ed69e5e383a688f209d9a561daa79612f3f78d0467ad45485df07093f36754984089250847f04dba94a7b0ce9e221acad41472b6bbe3aec507f5eb3d33f463672264c9f789b850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200052b60005262003015565b847f0a3f2637d840f3a16eb094271c9d237b6036757d4bb50bf7ce732ff1d4fa28e882089050847f259a666f129eea198f8a1c502fdb38fa39b1f075569564b6e54a485d1182323f83089150847f28bf7459c9b2f4c6d8e7d06a4ee3a47f7745d4271038e5157a32fdf7ede0d6a184089250847f0a1ca941f057037526ea200f489be8d4c37c85bbcce6a2aeec91bd6941432447850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200060060005262003015565b847f0c6f8f958be0e93053d7fd4fc54512855535ed1539f051dcb43a26fd926361cf82089050847f123106a93cd17578d426e8128ac9d90aa9e8a00708e296e084dd57e69caaf81183089150847f26e1ba52ad9285d97dd3ab52f8e840085e8fa83ff1e8f1877b074867cd2dee7584089250847f1cb55cad7bd133de18a64c5c47b9c97cbe4d8b7bf9e095864471537e6a4ae2c585089350848181808280098009099050620006b160005262003015565b847f1dcd73e46acd8f8e0e2c7ce04bde7f6d2a53043d5060a41c7143f08e6e9055d082089050847f011003e32f6d9c66f5852f05474a4def0cda294a0eb4e9b9b12b9bb4512e557483089150847f2b1e809ac1d10ab29ad5f20d03a57dfebadfe5903f58bafed7c508dd2287ae8c84089250847f2539de1785b735999fb4dac35ee17ed0ef995d05ab2fc5faeaa69ae87bcec0a5850893508481818082800980090990506200076260005262003015565b847f0c246c5a2ef8ee0126497f222b3e0a0ef4e1c3d41c86d46e43982cb11d77951d82089050847f192089c4974f68e95408148f7c0632edbb09e6a6ad1a1c2f3f0305f5d03b527b83089150847f1eae0ad8ab68b2f06a0ee36eeb0d0c058529097d91096b756d8fdc2fb5a60d8584089250847f179190e5d0e22179e46f8282872abc88db6e2fdc0dee99e69768bd98c5d06bfb850893508481818082800980090990506200081360005262003015565b847f29bb9e2c9076732576e9a81c7ac4b83214528f7db00f31bf6cafe794a9b3cd1c82089050847f225d394e42207599403efd0c2464a90d52652645882aac35b10e590e6e691e0883089150847f064760623c25c8cf753d238055b444532be13557451c087de09efd454b23fd5984089250847f10ba3a0e01df92e87f301c4b716d8a394d67f4bf42a75c10922910a78f6b5b8785089350848181808280098009099050620008c460005262003015565b847f0e070bf53f8451b24f9c6e96b0c2a801cb511bc0c242eb9d361b77693f21471c82089050847f1b94cd61b051b04dd39755ff93821a73ccd6cb11d2491d8aa7f921014de252fb83089150847f1d7cb39bafb8c744e148787a2e70230f9d4e917d5713bb050487b5aa7d74070b84089250847f2ec93189bd1ab4f69117d0fe980c80ff8785c2961829f701bb74ac1f303b17db850893508481818082800980090990506200097560005262003015565b847f2db366bfdd36d277a692bb825b86275beac404a19ae07a9082ea46bd8351792682089050847f062100eb485db06269655cf186a68532985275428450359adc99cec6960711b883089150847f0761d33c66614aaa570e7f1e8244ca1120243f92fa59e4f900c567bf41f5a59b84089250847f20fc411a114d13992c2705aa034e3f315d78608a0f7de4ccf7a72e494855ad0d8508935084818180828009800909905062000a2660005262003015565b847f25b5c004a4bdfcb5add9ec4e9ab219ba102c67e8b3effb5fc3a30f317250bc5a82089050847f23b1822d278ed632a494e58f6df6f5ed038b186d8474155ad87e7dff62b37f4b83089150847f22734b4c5c3f9493606c4ba9012499bf0f14d13bfcfcccaa16102a29cc2f69e084089250847f26c0c8fe09eb30b7e27a74dc33492347e5bdff409aa3610254413d3fad795ce58508935084818180828009800909905062000ad760005262003015565b847f070dd0ccb6bd7bbae88eac03fa1fbb26196be3083a809829bbd626df348ccad982089050847f12b6595bdb329b6fb043ba78bb28c3bec2c0a6de46d8c5ad6067c4ebfd4250da83089150847f248d97d7f76283d63bec30e7a5876c11c06fca9b275c671c5e33d95bb7e8d72984089250847f1a306d439d463b0816fc6fd64cc939318b45eb759ddde4aa106d15d9bd9baaaa8508935084818180828009800909905062000b8860005262003015565b847f28a8f8372e3c38daced7c00421cb4621f4f1b54ddc27821b0d62d3d6ec7c56cf82089050847f0094975717f9a8a8bb35152f24d43294071ce320c829f388bc852183e1e2ce7e83089150847f04d5ee4c3aa78f7d80fde60d716480d3593f74d4f653ae83f4103246db2e8d6584089250847f2a6cf5e9aa03d4336349ad6fb8ed2269c7bef54b8822cc76d08495c12efde1878508935084818180828009800909905062000c3960005262003015565b847f2304d31eaab960ba9274da43e19ddeb7f792180808fd6e43baae48d7efcba3f382089050847f03fd9ac865a4b2a6d5e7009785817249bff08a7e0726fcb4e1c11d39d199f0b083089150847f00b7258ded52bbda2248404d55ee5044798afc3a209193073f7954d4d63b0b6484089250847f159f81ada0771799ec38fca2d4bf65ebb13d3a74f3298db36272c5ca65e92d9a8508935084818180828009800909905062000cea60005262003015565b847f1ef90e67437fbc8550237a75bc28e3bb9000130ea25f0c5471e144cf4264431f82089050847f1e65f838515e5ff0196b49aa41a2d2568df739bc176b08ec95a79ed82932e30d83089150847f2b1b045def3a166cec6ce768d079ba74b18c844e570e1f826575c1068c94c33f84089250847f0832e5753ceb0ff6402543b1109229c165dc2d73bef715e3f1c6e07c168bb1738508935084818180828009800909905062000d9b60005262003015565b847f02f614e9cedfb3dc6b762ae0a37d41bab1b841c2e8b6451bc5a8e3c390b6ad1682089050847f0e2427d38bd46a60dd640b8e362cad967370ebb777bedff40f6a0be27e7ed70583089150847f0493630b7c670b6deb7c84d414e7ce79049f0ec098c3c7c50768bbe29214a53a84089250847f22ead100e8e482674decdab17066c5a26bb1515355d5461a3dc06cc85327cea98508935084818180828009800909905062000e4c60005262003015565b847f25b3e56e655b42cdaae2626ed2554d48583f1ae35626d04de5084e0b6d2a6f1682089050847f1e32752ada8836ef5837a6cde8ff13dbb599c336349e4c584b4fdc0a0cf6f9d083089150847f2fa2a871c15a387cc50f68f6f3c3455b23c00995f05078f672a9864074d412e584089250847f2f569b8a9a4424c9278e1db7311e889f54ccbf10661bab7fcd18e7c7a7d835058508935084818180828009800909905062000efd60005262003015565b847f044cb455110a8fdd531ade530234c518a7df93f7332ffd2144165374b246b43d82089050847f227808de93906d5d420246157f2e42b191fe8c90adfe118178ddc723a531902583089150847f02fcca2934e046bc623adead873579865d03781ae090ad4a8579d2e7a680035584089250847f0ef915f0ac120b876abccceb344a1d36bad3f3c5ab91a8ddcbec2e060d8befac8508935084818180828009800909905062000fae60005262003015565b847f1797130f4b7a3e1777eb757bc6f287f6ab0fb85f6be63b09f3b16ef2b1405d3882089050847f0a76225dc04170ae3306c85abab59e608c7f497c20156d4d36c668555decc6e583089150847f1fffb9ec1992d66ba1e77a7b93209af6f8fa76d48acb664796174b5326a31a5c84089250847f25721c4fc15a3f2853b57c338fa538d85f8fbba6c6b9c6090611889b797b9c5f850893508481818082800980090990506200105f60005262003015565b847f0c817fd42d5f7a41215e3d07ba197216adb4c3790705da95eb63b982bfcaf75a82089050847f13abe3f5239915d39f7e13c2c24970b6df8cf86ce00a22002bc15866e52b5a9683089150847f2106feea546224ea12ef7f39987a46c85c1bc3dc29bdbd7a92cd60acb4d391ce84089250847f21ca859468a746b6aaa79474a37dab49f1ca5a28c748bc7157e1b3345bb0f959850893508481818082800980090990506200111060005262003015565b847f05ccd6255c1e6f0c5cf1f0df934194c62911d14d0321662a8f1a48999e34185b82089050847f0f0e34a64b70a626e464d846674c4c8816c4fb267fe44fe6ea28678cb09490a483089150847f0558531a4e25470c6157794ca36d0e9647dbfcfe350d64838f5b1a8a2de0d4bf84089250847f09d3dca9173ed2faceea125157683d18924cadad3f655a60b72f5864961f145585089350848181808280098009099050620011c160005262003015565b847f0328cbd54e8c0913493f866ed03d218bf23f92d68aaec48617d4c722e5bd433582089050847f2bf07216e2aff0a223a487b1a7094e07e79e7bcc9798c648ee3347dd5329d34b83089150847f1daf345a58006b736499c583cb76c316d6f78ed6a6dffc82111e11a63fe412df84089250847f176563472456aaa746b694c60e1823611ef39039b2edc7ff391e6f2293d2c404850893508481818082800980090990506200127260005262003015565b847f2ef1e0fad9f08e87a3bb5e47d7e33538ca964d2b7d1083d4fb0225035bd3f8db82089050847f226c9b1af95babcf17b2b1f57c7310179c1803dec5ae8f0a1779ed36c817ae2a83089150847f14bce3549cc3db7428126b4c3a15ae0ff8148c89f13fb35d35734eb5d4ad0def84089250847f2debff156e276bb5742c3373f2635b48b8e923d301f372f8e550cfd4034212c7850893508481818082800980090990506200132360005262003015565b847f2d4083cf5a87f5b6fc2395b22e356b6441afe1b6b29c47add7d0432d1d4760c782089050847f0c225b7bcd04bf9c34b911262fdc9c1b91bf79a10c0184d89c317c53d7161c2983089150847f03152169d4f3d06ec33a79bfac91a02c99aa0200db66d5aa7b835265f9c9c8f384089250847f0b61811a9210be78b05974587486d58bddc8f51bfdfebbb87afe8b7aa7d3199c85089350848181808280098009099050620013d460005262003015565b847f203e000cad298daaf7eba6a5c5921878b8ae48acf7048f16046d637a533b6f7882089050847f1a44bf0937c722d1376672b69f6c9655ba7ee386fda1112c0757143d1bfa914683089150847f0376b4fae08cb03d3500afec1a1f56acb8e0fde75a2106d7002f59c5611d4daa84089250847f00780af2ca1cad6465a2171250fdfc32d6fc241d3214177f3d553ef363182185850893508481818082800980090990506200148560005262003015565b847f10774d9ab80c25bdeb808bedfd72a8d9b75dbe18d5221c87e9d857079bdc31d582089050847f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e883089150847f00544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac1684089250847f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428c850893508481818082800980090990506200153660005262003015565b847f2840d045e9bc22b259cfb8811b1e0f45b77f7bdb7f7e2b46151a1430f608e3c582089050847f062752f86eebe11a009c937e468c335b04554574c2990196508e01fa5860186b83089150847f06041bdac48205ac87adb87c20a478a71c9950c12a80bc0a55a8e83eaaf0474684089250847f04a533f236c422d1ff900a368949b0022c7a2ae092f308d82b1dcbbf51f5000d85089350848181808280098009099050620015e760005262003015565b847f13e31d7a67232fd811d6a955b3d4f25dfe066d1e7dc33df04bde50a2b2d05b2a82089050847f011c2683ae91eb4dfbc13d6357e8599a9279d1648ff2c95d2f79905bb13920f183089150847f0b0d219346b8574525b1a270e0b4cba5d56c928e3e2c2bd0a1ecaed015aaf6ae84089250847f14abdec8db9c6dc970291ee638690209b65080781ef9fd13d84c7a726b5f1364850893508481818082800980090990506200169860005262003015565b847f1a0b70b4b26fdc28fcd32aa3d266478801eb12202ef47ced988d0376610be10682089050847f278543721f96d1307b6943f9804e7fe56401deb2ef99c4d12704882e7278b60783089150847f16eb59494a9776cf57866214dbd1473f3f0738a325638d8ba36535e011d5825984089250847f2567a658a81ffb444f240088fa5524c69a9e53eeab6b7f8c41c3479dcf8c644a850893508481818082800980090990506200174960005262003015565b847f29aa1d7c151e9ad0a7ab39f1abd9cf77ab78e0215a5715a6b882ade840bb13d882089050847f15c091233e60efe0d4bbfce2b36415006a4f017f9a85388ce206b91f99f2c98483089150847f16bd7d22ff858e5e0882c2c999558d77e7673ad5f1915f9feb679a8115f014cf84089250847f02db50480a07be0eb2c2e13ed6ef4074c0182d9b668b8e08ffe676925004202585089350848181808280098009099050620017fa60005262003015565b847f05e4a220e6a3bc9f7b6806ec9d6cdba186330ef2bf7adb4c13ba866343b7311982089050847f1dda05ebc30170bc98cbf2a5ee3b50e8b5f70bc424d39fa4104d37f1cbcf7a4283089150847f0184bef721888187f645b6fee3667f3c91da214414d89ba5cd301f22b0de899084089250847f1498a307e68900065f5e8276f62aef1c37414b84494e1577ad1a6d64341b78ec85089350848181808280098009099050620018ab60005262003015565b847f25f40f82b31dacc4f4939800b9d2c3eacef737b8fab1f864fe33548ad46bd49d82089050847f09d317cc670251943f6f5862a30d2ea9e83056ce4907bfbbcb1ff31ce5bb965083089150847f2f77d77786d979b23ba4ce4a4c1b3bd0a41132cd467a86ab29b913b6cf3149d084089250847f0f53dafd535a9f4473dc266b6fccc6841bbd336963f254c152f89e785f729bbf850893508481818082800980090990506200195c60005262003015565b847f25c1fd72e223045265c3a099e17526fa0e6976e1c00baf16de96de85deef2fa282089050847f2a902c8980c17faae368d385d52d16be41af95c84eaea3cf893e65d6ce4a8f6283089150847f1ce1580a3452ecf302878c8976b82be96676dd114d1dc8d25527405762f8352984089250847f24a6073f91addc33a49a1fa306df008801c5ec569609034d2fc50f7f0f4d00568508935084818180828009800909905062001a0d60005262003015565b847f25e52dbd6124530d9fc27fe306d71d4583e07ca554b5d1577f256c68b0be2b7482089050847f23dffae3c423fa7a93468dbccfb029855974be4d0a7b29946796e5b6cd70f15d83089150847f06342da370cc0d8c49b77594f6b027c480615d50be36243a99591bc9924ed6f584089250847f2754114281286546b75f09f115fc751b4778303d0405c1b4cc7df0d8e9f639258508935084818180828009800909905062001abe60005262003015565b847f15c19e8534c5c1a8862c2bc1d119eddeabf214153833d7bdb59ee197f8187cf582089050847f265fe062766d08fab4c78d0d9ef3cabe366f3be0a821061679b4b3d2d77d5f3e83089150847f13ccf689d67a3ec9f22cb7cd0ac3a327d377ac5cd0146f048debfd098d3ec7be84089250847f17662f7456789739f81cd3974827a887d92a5e05bdf3fe6b9fbccca4524aaebd8508935084818180828009800909905062001b6f60005262003015565b847f21b29c76329b31c8ef18631e515f7f2f82ca6a5cca70cee4e809fd624be7ad5d82089050847f18137478382aadba441eb97fe27901989c06738165215319939eb17b01fa975c83089150847f2bc07ea2bfad68e8dc724f5fef2b37c2d34f761935ffd3b739ceec4668f37e8884089250847f2ddb2e376f54d64a563840480df993feb4173203c2bd94ad0e602077aef9a03e8508935084818180828009800909905062001c2060005262003015565b847f277eb50f2baa706106b41cb24c602609e8a20f8d72f613708adb25373596c3f782089050847f0d4de47e1aba34269d0c620904f01a56b33fc4b450c0db50bb7f87734c9a1fe583089150847f0b8442bfe9e4a1b4428673b6bd3eea6f9f445697058f134aae908d0279a29f0c84089250847f11fe5b18fbbea1a86e06930cb89f7d4a26e186a65945e96574247fddb720f8f58508935084818180828009800909905062001cd160005262003015565b847f224026f6dfaf71e24d25d8f6d9f90021df5b774dcad4d883170e4ad89c33a0d682089050847f0b2ca6a999fe6887e0704dad58d03465a96bc9e37d1091f61bc9f9c62bbeb82483089150847f221b63d66f0b45f9d40c54053a28a06b1d0a4ce41d364797a1a7e0c96529f42184089250847f30185c48b7b2f1d53d4120801b047d087493bce64d4d24aedce2f4836bb84ad48508935084818180828009800909905062001d8260005262003015565b847f23f5d372a3f0e3cba989e223056227d3533356f0faa48f27f8267318632a61f082089050847f2716683b32c755fd1bf8235ea162b1f388e1e0090d06162e8e6dfbe4328f3e3b83089150847f0977545836866fa204ca1d853ec0909e3d140770c80ac67dc930c69748d5d4bc84089250847f1444e8f592bdbfd8025d91ab4982dd425f51682d31472b05e81c43c0f9434b318508935084818180828009800909905062001e3360005262003015565b847f26e04b65e9ca8270beb74a1c5cb8fee8be3ffbfe583f7012a00f874e7718fbe382089050847f22a5c2fa860d11fe34ee47a5cd9f869800f48f4febe29ad6df69816fb1a914d283089150847f174b54d9907d8f5c6afd672a738f42737ec338f3a0964c629f7474dd44c5c8d784089250847f1db1db8aa45283f31168fa66694cf2808d2189b87c8c8143d56c871907b39b878508935084818180828009800909905062001ee460005262003015565b847f1530bf0f46527e889030b8c7b7dfde126f65faf8cce0ab66387341d813d1bfd182089050847f0b73f613993229f59f01c1cec8760e9936ead9edc8f2814889330a2f2bade45783089150847f29c25a22fe2164604552aaea377f448d587ab977fc8227787bd2dc0f36bcf41e84089250847f2b30d53ed1759bfb8503da66c92cf4077abe82795dc272b377df57d77c8755268508935084818180828009800909905062001f9560005262003015565b847f12f6d703b5702aab7b7b7e69359d53a2756c08c85ede7227cf5f0a2916787cd282089050847f2520e18300afda3f61a40a0b8837293a55ad01071028d4841ffa9ac70636411383089150847f1ec9daea860971ecdda8ed4f346fa967ac9bc59278277393c68f09fa03b8b95f84089250847f0a99b3e178db2e2e432f5cd5bef8fe4483bf5cbf70ed407c08aae24b830ad725850893508481818082800980090990506200204660005262003015565b847f07cda9e63db6e39f086b89b601c2bbe407ee0abac3c817a1317abad7c577849282089050847f08c9c65a4f955e8952d571b191bb0adb49bd8290963203b35d48aab38f8fc3a383089150847f2737f8ce1d5a67b349590ddbfbd709ed9af54a2a3f2719d33801c9c17bdd9c9e84089250847f1049a6c65ff019f0d28770072798e8b7909432bd0c129813a9f179ba627f7d6a85089350848181808280098009099050620020f760005262003015565b847f18b4fe968732c462c0ea5a9beb27cecbde8868944fdf64ee60a5122361daeddb82089050847f2ff2b6fd22df49d2440b2eaeeefa8c02a6f478cfcf11f1b2a4f7473483885d1983089150847f2ec5f2f1928fe932e56c789b8f6bbcb3e8be4057cbd8dbd18a1b352f5cef42ff84089250847f265a5eccd8b92975e33ad9f75bf3426d424a4c6a7794ee3f08c1d100378e545e85089350848181808280098009099050620021a860005262003015565b847f2405eaa4c0bde1129d6242bb5ada0e68778e656cfcb366bf20517da1dfd4279c82089050847f094c97d8c194c42e88018004cbbf2bc5fdb51955d8b2d66b76dd98a2dbf6041783089150847f2c30d5f33bb32c5c22b9979a605bf64d508b705221e6a686330c9625c2afe0b884089250847f01a75666f6241f6825d01cc6dcb1622d4886ea583e87299e6aa2fc716fdb6cf5850893508481818082800980090990506200225960005262003015565b847f0a3290e8398113ea4d12ac091e87be7c6d359ab9a66979fcf47bf2e87d382fcb82089050847f154ade9ca36e268dfeb38461425bb0d8c31219d8fa0dfc75ecd21bf69aa0cc7483089150847f27aa8d3e25380c0b1b172d79c6f22eee99231ef5dc69d8dc13a4b5095d02877284089250847f2cf4051e6cab48301a8b2e3bca6099d756bbdf485afa1f549d395bbcbd806461850893508481818082800980090990506200230a60005262003015565b847f301e70f729f3c94b1d3f517ddff9f2015131feab8afa5eebb0843d7f84b23e7182089050847f298beb64f812d25d8b4d9620347ab02332dc4cef113ae60d17a8d7a4c91f83bc83089150847f1b362e72a5f847f84d03fd291c3c471ed1c14a15b221680acf11a3f02e46aa9584089250847f0dc8a2146110c0b375432902999223d5aa1ef6e78e1e5ebcbc1d9ba41dc1c73785089350848181808280098009099050620023bb60005262003015565b847f0a48663b34ce5e1c05dc93092cb69778cb21729a72ddc03a08afa1eb922ff27982089050847f0a87391fb1cd8cdf6096b64a82f9e95f0fe46f143b702d74545bb314881098ee83089150847f1b5b2946f7c28975f0512ff8e6ca362f8826edd7ea9c29f382ba8a2a0892fd5d84089250847f01001cf512ac241d47ebe2239219bc6a173a8bbcb8a5b987b4eac1f533315b6b850893508481818082800980090990506200246c60005262003015565b847f2fd977c70f645db4f704fa7d7693da727ac093d3fb5f5febc72beb17d8358a3282089050847f23c0039a3fab4ad3c2d7cc688164f39e761d5355c05444d99be763a97793a9c483089150847f19d43ee0c6081c052c9c0df6161eaac1aec356cf435888e79f27f22ff03fa25d84089250847f2d9b10c2f2e7ac1afddccffd94a563028bf29b646d020830919f9d5ca1cefe59850893508481818082800980090990506200251d60005262003015565b847f2457ca6c2f2aa30ec47e4aff5a66f5ce2799283e166fc81cdae2f2b9f83e426782089050847f0abc392fe85eda855820592445094022811ee8676ed6f0c3044dfb54a7c10b3583089150847f19d2cc5ca549d1d40cebcd37f3ea54f31161ac3993acf3101d2c2bc30eac1eb084089250847f0f97ae3033ffa01608aafb26ae13cd393ee0e4ec041ba644a3d3ab546e98c9c885089350848181808280098009099050620025ce60005262003015565b847f16dbc78fd28b7fb8260e404cf1d427a7fa15537ea4e168e88a166496e88cfeca82089050847f240faf28f11499b916f085f73bc4f22eef8344e576f8ad3d1827820366d5e07b83089150847f0a1bb075aa37ff0cfe6c8531e55e1770eaba808c8fdb6dbf46f8cab58d9ef1af84089250847f2e47e15ea4a47ff1a6a853aaf3a644ca38d5b085ac1042fdc4a705a7ce089f4d850893508481818082800980090990506200267f60005262003015565b847f166e5bf073378348860ca4a9c09d39e1673ab059935f4df35fb14528375772b682089050847f18b42d7ffdd2ea4faf235902f057a2740cacccd027233001ed10f96538f0916f83089150847f089cb1b032238f5e4914788e3e3c7ead4fc368020b3ed38221deab1051c3770284089250847f242acd3eb3a2f72baf7c7076dd165adf89f9339c7b971921d9e70863451dd8d1850893508481818082800980090990506200273060005262003015565b847f174fbb104a4ee302bf47f2bd82fce896eac9a068283f326474af860457245c3b82089050847f17340e71d96f466d61f3058ce092c67d2891fb2bb318613f780c275fe1116c6b83089150847f1e8e40ac853b7d42f00f2e383982d024f098b9f8fd455953a2fd380c4df7f6b284089250847f0529898dc0649907e1d4d5e284b8d1075198c55cad66e8a9bf40f92938e2e96185089350848181808280098009099050620027e160005262003015565b847f2162754db0baa030bf7de5bb797364dce8c77aa017ee1d7bf65f21c4d4e5df8f82089050847f12c7553698c4bf6f3ceb250ae00c58c2a9f9291efbde4c8421bef44741752ec683089150847f292643e3ba2026affcb8c5279313bd51a733c93353e9d9c79cb723136526508e84089250847f00ccf13e0cb6f9d81d52951bea990bd5b6c07c5d98e66ff71db6e74d5b87d158850893508481818082800980090990506200289260005262003015565b847f185d1e20e23b0917dd654128cf2f3aaab6723873cb30fc22b0f86c15ab645b4b82089050847f14c61c836d55d3df742bdf11c60efa186778e3de0f024c0f13fe53f8d8764e1f83089150847f0f356841b3f556fce5dbe4680457691c2919e2af53008184d03ee1195d72449e84089250847f1b8fd9ff39714e075df124f887bf40b383143374fd2080ba0c0a6b6e8fa5b3e8850893508481818082800980090990506200294360005262003015565b847f0e86a8c2009c140ca3f873924e2aaa14fc3c8ae04e9df0b3e9103418796f602482089050847f2e6c5e898f5547770e5462ad932fcdd2373fc43820ca2b16b0861421e79155c883089150847f05d797f1ab3647237c14f9d1df032bc9ff9fe1a0ecd377972ce5fd5a0c01460484089250847f29a3110463a5aae76c3d152875981d0c1daf2dcd65519ef5ca8929851da8c00885089350848181808280098009099050620029f460005262003015565b847f2974da7bc074322273c3a4b91c05354cdc71640a8bbd1f864b732f816388331482089050847f1ed0fb06699ba249b2a30621c05eb12ca29cb91aa082c8bfcce9c522889b47dc83089150847f1c793ef0dcc51123654ff26d8d863feeae29e8c572eca912d80c8ae36e40fe9b84089250847f1e6aac1c6d3dd3157956257d3d234ef18c91e82589a78169fbb4a8770977dc2f8508935084818180828009800909905062002aa560005262003015565b847f1a20ada7576234eee6273dd6fa98b25ed037748080a47d948fcda33256fb6bf582089050847f191033d6d85ceaa6fc7a9a23a6fd9996642d772045ece51335d49306728af96c83089150847f006e5979da7e7ef53a825aa6fddc3abfc76f200b3740b8b232ef481f5d06297b84089250847f0b0d7e69c651910bbef3e68d417e9fa0fbd57f596c8f29831eff8c0174cdb06d8508935084818180828009800909905062002b5660005262003015565b847f25caf5b0c1b93bc516435ec084e2ecd44ac46dbbb033c5112c4b20a25c9cdf9d82089050847f12c1ea892cc31e0d9af8b796d9645872f7f77442d62fd4c8085b2f150f72472a83089150847f16af29695157aba9b8bbe3afeb245feee5a929d9f928b9b81de6dadc78c32aae84089250847f0136df457c80588dd687fb2f3be18691705b87ec5a4cfdc168d31084256b67dc8508935084818180828009800909905062002c0760005262003015565b847f1639a28c5b4c81166aea984fba6e71479e07b1efbc74434db95a285060e7b08982089050847f03d62fbf82fd1d4313f8e650f587ec06816c28b700bdc50f7e232bd9b5ca9b7683089150847f11aeeb527dc8ce44b4d14aaddca3cfe2f77a1e40fc6da97c249830de1edfde5484089250847f13f9b9a41274129479c5e6138c6c8ee36a670e6bc68c7a49642b645807bfc8248508935084818180828009800909905062002cb860005262003015565b847f0e4772fa3d75179dc8484cd26c7c1f635ddeeed7a939440c506cae8b7ebcd15b82089050847f1b39a00cbc81e427de4bdec58febe8d8b5971752067a612b39fc46a68c5d4db483089150847f2bedb66e1ad5a1d571e16e2953f48731f66463c2eb54a245444d1c0a3a25707e84089250847f2cf0a09a55ca93af8abd068f06a7287fb08b193b608582a27379ce35da915dec8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002d8d60005262003015565b847f2d1bd78fa90e77aa88830cabfef2f8d27d1a512050ba7db0753c8fb863efb38782089050847f065610c6f4f92491f423d3071eb83539f7c0d49c1387062e630d7fd283dc339483089150847f2d933ff19217a5545013b12873452bebcc5f9969033f15ec642fb464bd60736884089250847f1aa9d3fe4c644910f76b92b3e13b30d500dae5354e79508c3c49c8aa99e0258b8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002e6260005262003015565b847f027ef04869e482b1c748638c59111c6b27095fa773e1aca078cea1f1c8450bdd82089050847f2b7d524c5172cbbb15db4e00668a8c449f67a2605d9ec03802e3fa136ad0b8fb83089150847f0c7c382443c6aa787c8718d86747c7f74693ae25b1e55df13f7c3c1dd735db0f84089250847f00b4567186bc3f7c62a7b56acf4f76207a1f43c2d30d0fe4a627dcdd9bd790788508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002f3760005262003015565b847f1e41fc29b825454fe6d61737fe08b47fb07fe739e4c1e61d0337490883db4fd582089050847f12507cd556b7bbcc72ee6dafc616584421e1af872d8c0e89002ae8d3ba0653b683089150847f13d437083553006bcef312e5e6f52a5d97eb36617ef36fe4d77d3e97f71cb5db84089250847f163ec73251f85443687222487dda9a65467d90b22f0b38664686077c6a4486d5850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200300c60005262003015565b60005260206000f35b8460205182098560405184098691088560605185098691088560805186098691088560a05183098660c05185098791088660e05186098791088661010051870987910886610120518409876101405186098891088761016051870988910887610180518809889108876101a0518509886101c0518709899108886101e051880989910888610200518909899108965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/Poseidon6.json",
    "content": "{\n  \"address\": \"0x95Fc5D19C778FABE6Aec8948C1a7A32eF8DeC791\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[6]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[6]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xdbdaf3a3ce7c9dd8b8d4aba8c0a9a21599945cb8885f643d5599da4211c167fd\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x95Fc5D19C778FABE6Aec8948C1a7A32eF8DeC791\",\n    \"transactionIndex\": 7,\n    \"gasUsed\": \"5162502\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xea8cef7038ebba1255ae0c6dda33d90eff07078add8b3278739583cbe4aee8c0\",\n    \"transactionHash\": \"0xdbdaf3a3ce7c9dd8b8d4aba8c0a9a21599945cb8885f643d5599da4211c167fd\",\n    \"logs\": [],\n    \"blockNumber\": 9155536,\n    \"cumulativeGasUsed\": \"5776418\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c600039615c596000f37c0100000000000000000000000000000000000000000000000000000000600035048063f5b4a7881490636afa4b7a14176200003757fe5b7f2abd9e16b7b48289aa19cdfec726fa3fa15cc1625102ae511bca45f39d337e9d6020527f1b4bc5885d1cfc8eb691875300db5a0c7362ae381898acaf8b63cad04ecb36c66040527f08a72fbb55dde3e93c5818571a424a54953695029eedbcf91eaeb012751c7f836060527f0f95359a1f6845d4921892f83e500bbb1b3d3763d8fc762400af039b0abb83f56080527f16f01751ce985328afde34d81619defb43e6c7b5dadf52d0f82472fbce7770d960a0527f1c391626328457fcafa629f3e6d33e2555e8d885e3c07cecc8af1f4d5659641760c0527f00970f671b9ba35e3e3c642d1e0b8032023ed5bac91c2c1056f03965a42c529760e0527f1fe9feb5c7f7c7a426bff032cd6a3158278b6c6b2cc57a871213fcafd6427989610100527f0cc7eabb154aa7955eac47a19f6437a2b8dec0fe9e5686150ff6e88b1a7b4bc4610120527f0393efd96399aa0726ef9af79be8b6c715e429906ca0d15076b5a990fea75ace610140527f0871233835b752ea030cf8a4f43771296eeb33f697d1b0825db47d39ac9e5955610160527f1a02798f047a51baaea34fcfb26ca6afe96a5fad1d2db4270497b6e6504891cb610180527f055665d76df3cd0fcb713c234ea79d06a31d6e3e4c3bcc657dba4c664d5a0da06101a0527f26ee9691a638edc7c91887e302fc55e8e7758286a44845ad88fd7de3bb1052c16101c0527f00cdb2db9e4f9d732d217c5e3114821165d49e5a2d41556bcd53d0c4d433224c6101e0527f012f3bb29c972793182123f5c49306e16a3a787c4bcd9c798a131b70856d1cbe610200527f0bba9006404c5ede82b527677daf444ed43fd1e0dbdc5528dd2cd1f17ad73481610220527f17e4e73bf701f88d219acf1ca6390cc1e17c9f84b1713820837ca070be84a2dc610240527f234b8a077ef52b53a343b8da5b20cc358ad60760dd60276d485015f73d53d207610260527f2dc3fd77394b7b5ac1cbd1b46e6ded5b835d7217a4c50a487ae9a35a7fd45d9d610280527f1668477640fab14c72b1c16ff0192e48cf882f12276bd12f97f82c6ee2e61e486102a0527f09664216ca565c1a44fc2b98347ea8b36904b3877f2159dcc999895adeb4d70b6102c0527f111fd8dfce2bd3b7ba0cfa93e20fb685abf76d77305857b8df30914e4849ecef6102e0527f19f53c0a592b3ea93497a511e56f66753598265b1ab6774da48eec04e4d93426610300527f19b683c39d3b002fc3523b7bee5a60148b1dbdf18dd1c318e6a541e8cf66a174610320527f2547113a818779f13e3448719c7ef100b8036bb3e882dd5e6456c35311c1bd5b610340527f00cf148f8045cdbe7bb1013f72ebd4126a3e35cba9a970441ba8d5bc76943b0b610360527f3008421eed767a093322a09c3733973a038168cb28cd2e1f709076c00b869599610380527f1463f51d4a4cb1eba16dbc115566aa48fe77b43c244c9988a3c658d2f56493d66103a0527f16afd8f4c39038b8006a59d292aea84731c0f83832a61b82250ed90118e8fec26103c0527f2296361f3bf154efbab996921936e9b1dff8352711f958638172055333e075796103e0527f1c3160ebaeb10f809f69843cf8d5bbaca198d1f8e3439be29beb92d909ec891c610400527f094c66bdcff54382cd9213abe43312edb5b4d414c6e09acca24912a7635404c6610420527f2e883bd408c4c826d004ff777d7c0938434ab5bb84f3420e5d94b853b1746f89610440527f228af6d425e91a783dd18fd89a6b38bda053f2f23c094b875f27cb3abba2030b610460527f214e41788bd2b990347c7f2a8f47612d4dfceb1a1e6da38165873df66ce51f59610480527f03fba82d3f783620873da94e9f4e84c8b529d76f54e4b5d7d4805272af9b97756104a0527f066782fe3e869de2cebd7ebbf60fb435785329dfb12ad9bd1b4e46ed362895116104c0527f1c5cd6b23ef336be01efa37a27e6b7aae5d1643fceeb212cdff51588835fb5376104e0527f2f3b4bf0f105f88e27248af094e29feed9ff3fad9a794e15830bd2b311539453610500527f2f4085eaa9f80a69b739fc23f2fe4057f64729b311783fcfab3a0a36fc1ff432610520527f2363603349e94f520fa1f98fe2507f6aae361934078aa59a16214c088185638b610540527f0548541724f64e20128260899abe8fbcdff184a1957a9385fb715923bf0fc79d610560527f21c5e25a6991364e59a205e5b01c811deeb095680a72928369cfd2de71b14f98610580527f11c5cc53f6338c825817aff7792a2efbce8fff171300d41455a2edac37663d026105a0527f27a0949fdc9f10495c4ee7214aa0edd2ad8eef68f577da8b96f9d87a39504bf96105c0527f1c7fc68f3fbde4a23c455ef0d0dbce0ce556a0194e6d552c0455cbb5b0c230e26105e0527f11d0f56fc00e7d85b3a2939fd33991dc8abc1ced0c3f3c530cbfb4500d63de9c610600527f01b2e9d20d9b55deb048cabe1636f0e96363bec886679cbd91f332fb2bade44f610620527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a4356084356064356044356024356004356000877f2197703fceb4cbf07c6dbf46c4ad93e7d14e554db66d09102ff84824743fe4e782089050877f1322f0fffc7e4854bd8b5fc23e7106b51f59bd5061d8b565aca2fd3efe512f7983089150877f19e414f80380aa2d222133118c337d82a8c5894c2f88861ee46f448fa9d6135984089250877f22241199a4df9cb7d65249d9562cad6c65f16460e79a7939cbfdd6d7b9209d9a85089350877f0301061735384dfcecf9a311c22ade327b51c78b211615f41c77f6d85e8a41b686089450877f229e1d86c1f2810f4a2633b7b4b5bb61b7dc5d19ac95fd8d379548ff2b6850ee87089550877f0e31dcf9c53209a817eeb292e989727c3f56bff65883afe5fdc28ac3dfbea67588089650878181808280098009099050878281808280098009099150878381808280098009099250878481808280098009099350878581808280098009099450878681808280098009099550878781808280098009099650620008e560005262005a78565b877f222c7318ebe96306c9d79ac11237263c6b8eb25272eb88407e8c29a358b40f2a82089050877f0cb416b42c53a829cf4fc823be8f4fedd12593394cd529053ff4e3604974a2c683089150877f0892729d09594a8d8b1adfbf2e2ed75399dee612842b6db3d2d2c2aaddb6c0aa84089250877f18e39e9ae45f14ba97a15bd672711ae124375d9f482a4487a0e334dee2d27c7185089350877f2560c9ff672e6ea69dbb33844d0d22870461d18eaf0f8992d4d7ac649edd661086089450877f21bee2b8ed54b726ef17f77366b1dcfbda7ccf1e487f9916e5f963e814c5731287089550877f300e1b28dabebdc0d4bdbc19be29a3dee4eda8425dd0c7c6e82fec147cb070ba8808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000a5060005262005a78565b877f2c44a5ff45deea69dd2961d67011af4982b9405f9fe38de4a732d2aeae88cc2382089050877f0c8d59fe1b7f55095e6aaad9e3b4e7b1c93d876ba3234dd1ac5ec64108291bfd83089150877f06cf82bc5fd115d348a30b0c45378d90cca1660446ba049759fa53103fcd78b584089250877f2f80ed01a2118d02e2145111c3fe6ca70efdf95d8abeaee8829293347dc9061c85089350877f0bdfe7f6803e4dee7b026e079075908cb8414e3d651dd12fda67df08dded9e4286089450877f06cc48ed882405595b34d39138f50bb5b31a963a0dba66aef17c19ad622e29b187089550877f2a67f3ba6d15949932ac5622cf9e2b493801bf16a50336a4518258bcc6867c958808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000bbb60005262005a78565b877f2572725a67c60718df656934aa78fbeb80c8f395aeb6a20cd833c4b14fef412a82089050877f03bb7f6ca43545b11f19721265b416166579cb753330b1879b79685d1df0bfa783089150877f2412815e863f8f3bc28bfcbb957faa5f393300b25133e9221b8eb3156ed5c12b84089250877f0dbf64d58df212e4307871966de097a5db09a93e5bc305cebdcd0630f433af4585089350877f274c06c01158e047ff4a791e25b7bb3db190529df8f50b6386273f810f15c6ab86089450877f23cf40693f52abf0ed3d842f7bc85d1a2111d0abecfc18acd0fe3991ee5fd33d87089550877f1daaa926528f3368f4e4cf924166b8bd3ff8daefbcf900e6dcc4ee63c40996988808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000d2660005262005a78565b877f10103789dc9471ad718657bebb6781e39bd92fd20ee1a32d0de3ea2817a0155582089050877f0009bc25065080e6c6e9932e34bfde78d1085f19e9ffc8965a4660a4d9b6d60783089150877f1312c727cb5489bb174e1dcb82588edfab31a2999b377dabece466e9dcd6afee84089250877f20294a462c7d0c25aeb5374618e5e77316682ae3d726824f15f00f7cb9a7009f85089350877f25e0c6be89bbb04bd8391c90cf35588f0e9d73fdb06259f47a05513ad7a23e9186089450877f0084a0b87e0b336c9a911069f89d875a38be313efc420d28b9ec287f28810fd387089550877f28a03ee29f612aab268f76241d54d477a1d97f5807ba2e1812f4d350d7c6f7da8808965087818180828009800909905062000e4960005262005a78565b877f0b6794182b723a12e0b35f76bd55a7d106ee6a4035527c4d329a6f33068d7eda82089050877f015b9a698465428fc686b79db4959c8495b92b85122f6a6932940836facea86d83089150877f1bfe52289f811f5c3619f14866138ae9a1279bb76e8cec9a8936fdc36f59df7b84089250877f1cd574fe8d5e4c428b92b23a9717342176e1d309a7e259052c31bdc9af091fa385089350877f212d1bbdfaaf0200735bc5851a156adcbfa4f607f5da122e1f63afaecd38cab786089450877f0b0479e28820e883d903a951f95b13093788e9e1ca64ddf2abb94b13fee9edbc87089550877f0110f5257c21c9379d73b76e9ca95c513c77a15cc8ee0ef726d8460d4fbbdaaa8808965087818180828009800909905062000f6c60005262005a78565b877f08c52e9401a9764f0c2487dfed34e215c186b6c2838e38eb5a50cca4f0bc699482089050877f2e422b4323cb4c0af46f4b0e5052f75744c538abccc7643f339440dc3aaeeca383089150877f2e12482ba160472d45549ff79cd04aebc4a327c4bb9d78c2573b835b05c55fe684089250877f124fa5f9c5a96d6cce92cfc73ea2446202f09100eed203ae4267aa637a032d3685089350877f0bf651f82f83ca1fa037a941d4e2a4b3e08f5e1603f933a1723adf4135796de786089450877f21c674ea7b834741cbad39b21b242ab9a5554c6c9f92e801cb1fe4382b61946387089550877f214f91d6c4aef57e83186b57fd9fa48a193e1caf16d7f6dc1559d144a271b341880896508781818082800980090990506200108f60005262005a78565b877f203e2218389729c26c6f66213f2269c262785ec68c759599c2d8e3f68035055b82089050877f1aa934198713ce17658f51293fad44b1c22fc80391405ce76c92b2349b7eb3a283089150877f1014d4e5ddd9c17b3c2b29684476afdbaf7fc56e8b799616a67bbc6678e4535184089250877f033c13ed45b4762a47e1d2d45d7fc8fbf9d4e24546e20dc596911fb99171035885089350877f09bc1c3274c569e7e5c5d77c51fe69b23b7e435138f4f3217016a2d70ce71d5e86089450877f1803171c9dbc0610e38d8308db101d6a99ca90137f6ab8cdab2a91b36b63322a87089550877f0ba6071aa98afec3fbdeb46a88e4a5d17bd4454c0e7da8c74b15b084488cfdcf88089650878181808280098009099050620011b260005262005a78565b877f179e90ab4b08a4ead281a8709057487e077b710879911f215fbd6e8ebf838e9782089050877f1cbca88b8ab3f0588ff87deea978d00008adbad808e6510897238ea007f491a483089150877f2f50b20b33692bb0f62777de5e3198377d7923ef2fa8ede08831e10f7e9b9f5a84089250877f15ba030e8f1ef6f260566fd6fcfffcd21a1cfc1232f7ec7148ff076d1ba6870785089350877f0dbe053da01aa4b7c0fad83a3cc966f0b8281bb4940f97a5516cfb9dcd543a6f86089450877f222eca5d754afeca8997f31d6fcb94a5d799afb795e68d4d8b0ce6d839f6dd7e87089550877f2abffa43d756ef242db7f584bd62405991112618362f1b29a33ee2131b46a44688089650878181808280098009099050620012d560005262005a78565b877f03c92524ebe67300d0dd0aac464f0e6ecf962d6ad41bf2685f077bfd788eb3fd82089050877f282241758ade4ef8ff3858305288d3b4a52209295d1a4bc89d885b2f5dc3341a83089150877f02635cb973d71bb3d2137bd81680dd3bc607fc5487e898c4c2d83c1dc281768784089250877f13c866aa66e8d506079dc24c2df7b1e691994887d35622f4cfcf014bbea223e985089350877f151f0007ccf42a7ef969f1b6f6315992e6594bb5344d2839fee6620b60e2c02386089450877f1c1c6a5ebccee8caa4dc7ef18e194274f6e198d2b140ddcc97cb15c92ba1409c87089550877f18330c9e67d62f7861a996d7ed69bba904b0dd459f2b254fc7cc53dd28e45a6588089650878181808280098009099050620013f860005262005a78565b877f26b747740c95bf139cb11bdf02fa63a4bdb29a90f158933a1822cdde5387290d82089050877f1475676fb205084246ef9bc7234f312c214f426852dcb2ec7dc3772f579af8b183089150877f1b03ad9080d29b70aaf30bbc3200efffe73ee269dc032d2e32bd190767bc380d84089250877f21c175f937c2f82e99735bc7c201284f89577b27a1f84fa24642eceb552f445585089350877f1192e0269a6b66a8c5887527aa4474c2de91cf8c71ebda835df2cdccdd4a4e4b86089450877f0f3a12c0ee52f0d34f2b4a0dcd13541b48aeb3d5121d311113bba9792a45a58d87089550877f07fb521883bdf78b33689205b45e52269458a061bcb87eeb3b1e183c6d7eb5b7880896508781818082800980090990506200151b60005262005a78565b877f248d0e8051c1a965640c96c6f010c4931fe648b96f95ef6f5b8e474f64cf316982089050877f2ab553db9ead2c82ce91febe180529eff3521875f7e90a9b8b7a3c4de4877cd683089150877f211ee3bda3c95f1954eef22a0a82c2ede8444e42a72a8200bab6a133846d5b5c84089250877f111db3b5184ff7412f79c129904a9cac4ee65a51c2062d66732f54bcdf767be485089350877f1a73843264cf9a3a1bb6fb68ef76037c4fa98337e5c10096c630b449ec4a5f6786089450877f1c2e5a2d9332f65128c85358662d6a7c44353add09c27cd07da02f9144da855e87089550877f0e2b35fe1021b879de5b67a7458fa6188bbdea39e2bf468a1a24e3625cafff98880896508781818082800980090990506200163e60005262005a78565b877f2e568594e5dfbfadf272b8d6e8c99bd785c4fa94ce9e87fa8a9a37e32c7a28de82089050877f07043c7571cb7dc5205bfda42d693527a4bcb58238ed6a6a248e7917ddaf0c3a83089150877f239e18a0c85b845ffd6b85e96343f1a8378f3c691dadfb228da6ff7aa79efe1f84089250877f25e247af250c564c00f5ff1cf1f2bc8606600f173cb65ef0780af9f5a1b676c885089350877f031ba3385664544e3e0801f1698b15033a6049b2504e9cdc2c6e3eb2fd12100d86089450877f2a33777739e2ab0adfb1ca5687db1e059b20370cbeeccad32da5c3609431ff6587089550877f2bfd6f0e9e996ba13749327b9c5cec69903d413b2df29b777d05384b3e7af952880896508781818082800980090990506200176160005262005a78565b877f2d453d93fb36fbf8e36747ee92d90cad9e02e692d0748c07fd43eafc2cc5e82382089050877f187bd8043f8642cda2b6bad82958d115818880eb80f6b730381d974ac5d5037e83089150877f21aca605f92a48ac35708fe5140729fb35c3e48ccec441217713b0864944393084089250877f173fd164f5224ac06c2e99f3e2eaa6379df113de30aa485e8bbcc7f0fd2d1e0385089350877f071c66a6463c3fd4292bf1e5acb6de611142d73cd1db590e89b61b57d44d69bd86089450877f044a40e396855be550d8ccce7b82ee2caaef6675bebe92266c666982ff72bbf887089550877f1176d9f52e12df67f087110a15aaf98d1ded293ffdf99599fedef2e51569e4f6880896508781818082800980090990506200188460005262005a78565b877f06e8eb7dd026d257b15c6624bee2f37d5b67b4a671cfcdfee5797e8457b6391682089050877f0696aa48c1d5fe84ca5cf59009ab0baaefbb612e32c91d5ef306def38dc5673a83089150877f0853c33a9c7a7c3b355c92c75de444365db82d241eef9f3fac417004a3a1accc84089250877f3016c0ba34678e0a67f59cf96ce16e908154f5f9802591717e66e95ba25ab77f85089350877f0af008601dc9552517f303ff9e22c793a682caa93256f2f09a4f746542603b0e86089450877f04cb6d76b5a27a5aae387cb647790318c25fc16f8d7d1855a38765f847f731b087089550877f2ecf70c372d8e5edcad49e58d47875f26933d62614f266e6b4f586177148565f88089650878181808280098009099050620019a760005262005a78565b877f01f393a6ee74dd6c4d52b0e7820a7132f8c4889742313c06caa6ecc55f3dd41382089050877f2e4d4ce3f97bf96ff86b88e969d13e415e14721282769f7cf8c3a73723f094db83089150877f306000ef24a7f5a9c652e3a9367578554ea59bf8efa0bd8bc5776460c18c1add84089250877f26e58d6287678f3db9c225c1d3b93ae7c43a69024ebf249c8bde40617c2b3d4985089350877f09eee09f873d1bf683971df4d7ce56c8f0b8b98ddc05b9612c0a0d317310655a86089450877f0f08879dfd4fa0dc11ded556ef01c6f94cc6f4d18553b08bcb1dd604392ec00c87089550877f11459f7e9f0e3c727777e34d6d93ec28a25bd867171523bad5be0d5a20029eb78808965087818180828009800909905062001aca60005262005a78565b877f04e9cbb6f6e8e805a20fbd801a53b723f78c1f5acd227880f7f37f4e5b0528ad82089050877f2d2ff32eb7a0c0266dd46bd5939c9a9aae88b3e9af5dad01a7304f9868f7c7c683089150877f23b77eb0f27e950200a590447d645a723d9b405fa2538a5cb76fc5fdae16d83984089250877f2cd6d2c5658ec0792daee2067e2f958d6849886318a6c1c27233a469e9998c2f85089350877f0ae1daa420bac90780d0c83026bfcc84af83953e26eca839da76861e739855e786089450877f2b495b854553d02a75b68763bda6dd8ef0e81fe32b5cb072d3f580a914967bf087089550877f056fa5d7ce2c32bc5735351d2d48af5d6c9256a4b72e12a35640b53ea959e2968808965087818180828009800909905062001bed60005262005a78565b877f2ecbe1a06b28ec78ea7d22df11cd224a0e1a0ac7a3476c5cc3c4e50da961a87b82089050877f143053c1c387f9353bd677e5db6e9975792bffeecf02d6aa0fe8f627579fe6cf83089150877f04064b25584499a011ea74ac047a8b37494189bc63342bb1182e234212d42bdb84089250877f100f61f6b81542156760a6d29af5dd8644c82deab5b90e6ac66de8b4a069564a85089350877f18d331b2e8180b7aa7055c029fa77aff4f02b0e2a2078bff67688ed65b51d6dd86089450877f0fcf9b89e19b1a55f9b03255cf80ccb9fb6aafde2b46207d873fac80ccef085c87089550877f254f801f3c89c62436ef63df67d912c1f231bb1f76c6c7b497f7708dbcfdc17b8808965087818180828009800909905062001d1060005262005a78565b877f16d8e85e57819a10a61461bcd8d3d3c963c4f95afba3e4d8fd0d6ec882b9d16182089050877f29c9565aa702088bd443e4620d84bb2bfb93253a8f0f04e5cf408c92820ada8483089150877f294fb68064643d8beb237bd705a557871b5f1408624eda46d47b583a60d29cf984089250877f2c26f3083140c104baf24c3df922317584aa11770451e6a846de7dc79519731385089350877f231811279854707dbaa537cb27241e7021a949a1d9671380a7d6944c838904cb86089450877f1419365adbb91f1f7d1bb0aa8a4b5d11c7ad0570cc6cf3638be9c5a2a275b49587089550877f1674425f2e9fcaa66eb001feca48ddd4b2a29e86d451f00d176ea35b4e02fb848808965087818180828009800909905062001e3360005262005a78565b877f291f956def59b878028000cef03d7b54dcc2fe1dd5a75dc180d6d5bed898cd3082089050877f2f1302894fe6a26b5bc03fbaa69c4d95012394d78de494549c7057b7ef965bcc83089150877f0627d6d6d94d0a19a17db45c0796f7db8de13d278a2b24c99ac5d92d0a1a1ce284089250877f2ee297662bafebcb01df8e62bd5f50f03025515b10465d59f3a294f0bfbb2fc585089350877f118029945df773f52fef5429da766b902eeae7d967062fdd879c60a1bfaba75b86089450877f306042d262f6268ba789eb4323c2169279752ffec6b8536cc68b53bd4df0e85887089550877f0472a13ac7da9ebe1132e05f9ef609135c82a0ebd9278def2b34f8ce709aee4a8808965087818180828009800909905062001f5660005262005a78565b877f2e8f76b27b474180f00c5a6c2d65850bbf96019bf0d76dbb4743a970f42a130f82089050877f1e33984165f47c204a33fee31f613544b7d846a7d5ea45280ede4b362c32aaa483089150877f17f22e27252bdcf91a72b59eb276a666ce4fea7adfbacb2ea9fdf28524b7b43d84089250877f00547e7c70ee4e3fb4a4d386c8baa55d823a0f02bc963b43039b8847cff6e6c985089350877f08ea4ccbf815be325ccd15494f38f3f97153ab09c54a87a852b2a99480724e2586089450877f277cb45f3e632718673ba05d48c712fe7404df9eff5401cebe45d194c67fa8db87089550877f0159ec7ea49aadb3a8b0a23c1dba0023807b0d099d3c40b69df866a92dc87b37880896508781818082800980090990506200207960005262005a78565b877f0c33489297e244956de579c5c112ab40c7fb2d89866a28418f660a86ee18524e82089050877f01bb4fcbae28a2f3399568c6b3849da27d6ddf4fe6adabb591151679ed37d21f83089150877f2a23343d24a9cfa3b8f413f52ee1b233ce4c1d5b9bf34b03dbc6d733d52305c984089250877f0707a6d515b3bad03a9b06d6be048defa850134aacd120f38fa93264016b778685089350877f1837db5401dd6ec30ba6b866184da56e8db439ffd04154ec469b62120ce35cb486089450877f244872a0d2766b8547e6b6a5afeabf198e1409a0f0026de36c101793952f6cfb87089550877f204fb17927ce873c761196395f7da46f679ca331832a59fddd2ae31e84eba1f5880896508781818082800980090990506200219c60005262005a78565b877f056f53037d5d8efc7cf6a6feba18d102bf818bbba70b86dd9b763a12072f4c2e82089050877f1df4bc5d73239f5ec3b89efad53df9cd8ad8fca543be01f5f40fea2952071bd683089150877f1ffb6ccbba001155d46e167d1fad1c13bf2892ac87cd9c347c734ab5ef65836784089250877f08ee36e881496539b0abd647d353e51b63fef91fc944880006f2c26c2ecf2a2485089350877f1c3080c254443332a3e6283d5bab6f7fce8aaa68487b9ee4e372cbc6cc17266586089450877f2dc6040500e7329f75a3cefa4db49f9b47085b1660f8873b3e81b7b1af82af5387089550877f2c8bca9dd293bb67db1f66ff2e82047ae9385ce67d7f33568cd4c216a89994b788089650878181808280098009099050620022bf60005262005a78565b877f2a157b9786f9224cf63648aaec1b9f61c7a7087ed6eb8ab20c6c5469d401b7df82089050877f1e0fb0cdd8a54591c42e7c26b9027b77417e4e6522b472bfe61ff89c39bc40e983089150877f250144d1cea033fd78bd73ee4ea4cfdcd6a42f7c00e2d7ee6794d464207d2b3d84089250877f0b6b3fe9a7a525ca60443c4b78a8e830957aae0403116d22983a2e680eedff6585089350877f2fdf613e67d176569f4743b4963f8c53e52482fa32e705247eb650bc7bd616e986089450877f048f64b14275fb86fc55b3c0469cd89306752827c3c04463be5bea66fbd7b38c87089550877f0f2027b781c2c52490e11ed4b7b494d66cdc16e690b6a4b3c924dc9d6e85483288089650878181808280098009099050620023e260005262005a78565b877f29652785160b261c1c20c741524a26147cc3191f33b74ebf17d44ce2f88b0f9182089050877f1176909e02a5b37bfd47810fcbe73af87fea130470aa44bdf6b058c4d359e17983089150877f180f26c6ce2a3a477baf0da58d069769c2bf0156d636f2255e1bc35c01e9899384089250877f2afeedcc2cec57285ad22e734fb7fe3dd65f62601c1ca4884a86c7a6a05f083d85089350877f0dd21a87ee22626998dbcd73dd751affb49d47a02e995a41bca26399103087d286089450877f1d21baa09d7f50f0159fa8a0b6e0d61446d1c7db5d1566469da6a85aa722496287089550877f2dc59c4c9e275cd8c2506282cc5bb842c014bea4236b1bc27a856351b48af802880896508781818082800980090990506200250560005262005a78565b877f2cf62d08541dff0919ba68a697f44f4791c42d1447a41513ab9d5f755eb1f38a82089050877f2f5b8853e2cd2e47a9fedeea4047e46083c97acd4b687aebd2264e7a0eb354b183089150877f05865328a9b2fd469170c391c5ba8db5c66eef9938e4da5bae33f2703c47073084089250877f29761c9fc3d2c4cc1b126be1dc0470a97b8f2725d327c6d1ca923c2aa8092b1e85089350877f1d3fb1f8dc3c77cb515c37bc810d3a5e3b96552d4bbb57fdb01c2aeeb1d9a04886089450877f05f2fbeb7cae0a35ee2f3a4d2964d241a0ceeb47b3f7c4c87bb3b052c8705d9087089550877f1f445014a0f266082a50257152609cc219062154f4d7c13288746954b97998f8880896508781818082800980090990506200262860005262005a78565b877f2d35917cb1d0ca611ee37cfd9078c924fc84bd1a4bfd7db3ce39e05b38f698b182089050877f05a89a4eb40387b8512f2f398b6526efe76716951c500fc8dabc835775335ced83089150877f04e26aa3f02601174f46ced15594329e4f4e5bd5d7d53d5df6c8633a94dd01de84089250877f204d587d61526c1e047e1dc6b6d403b9eb8730f2e2dfb7bc7350d939bac5b90f85089350877f21c8ca213d2f44446ae90a6bdae5843b7c2cb53ed699f36675ea8280a2a420e586089450877f1303bd921f32fa4c4e73af21457c46b6d69e2e6a2c396716217787b46e822ebf87089550877f0613823c5b6abeef14387465317e713b45ace79c0e4433d7c4d352097e5c8399880896508781818082800980090990506200274b60005262005a78565b877f0f27c5305ee978f4f775e213e3ba12a901f51144ce1ea89bb5046930f5ec55d182089050877f2cad11c693c6a627531950a307e07b30ea8a495115f5a5388827792120c7bdb083089150877f16bb256883c44cf37366618e46c6db4e3da97a9d4ae7d5c585959de3272f82b184089250877f29afe50bd78f72cc763695976410324bfd67157a5ccdb7ae45b00032e1d57a5185089350877f09329902e59e5243a726ae5ca35408a207148609ab3698139725aefe29aeb16786089450877f04b1800e600c90ec4776bc6af1764ccbdc10bf55c3314f42acd0531ad53420fd87089550877f298d0110bb90e4c35e293c7a7dacedef7ee9342a591b4330e27276aa13b67ad1880896508781818082800980090990506200286e60005262005a78565b877f024ea6e68cb1aa6b407e022649aa32d1b7ea4a350e510c07eee43929395e4f8282089050877f22ae3a1a81c4550f5fa0116e135d2df2bd9f6835a0f0d03f4dd934e1320a3d8d83089150877f1f0f5eee9e9abb2a2f4ae04d6fe09311fe0115c1e199c28e22705e681442ed3784089250877f023c86606616f317af022464f350b4bee80c2fca32064bcbf83e8cd35dac06c785089350877f2a89c4e5b074fbe67d04cb03efe18c4bf904bec4759b33dad6b2c86ebfd2b9d586089450877f04b0f48c4f2e05bda4b9cf806075f9c275df2cf60b5fd11470eaa7394a82727e87089550877f0edde5a2c01327ad042a686f443417bd8f107c99eb7c02900c931a7bd8cb349e880896508781818082800980090990506200299160005262005a78565b877f2cacacc9c9d8b0004d8932080f9378b60675a8bd853aad1dc50672f137212cc182089050877f0816f33508621f2d56371156b0a3f7731030e4b218e44c90a88cecaf07170dec83089150877f2ef8e0a455d472b49bffda935c8d3bee1ae9248608e2a52d53f4b76313c9792084089250877f17184a8af9199aba605dd1f2dd18ebc02e3055ce408068eccaaf3ea7c0a334af85089350877f16395e153937a83660db6f78446cb995836436602777d81f0607130b4488144886089450877f0e174088223c38e9440fc77307d6720ac32784c9d2f591e2437eaea9b8f5e2bb87089550877f19e70fa937788f7a2127573d56c8197bd0dd096140f39064865c65c31b47d4028808965087818180828009800909905062002ab460005262005a78565b877f0e434c329d5242adbdab24780495ff97230beb344b918f6f8d6bd7d21b03692e82089050877f2c88a82eb87c81ba42a211bf2ef3c15875ac157c7f3868fff35af9f55a8c22bc83089150877f111dc223e3c9fc7452a9c2de469383915f33adf4cf5b49fd2e01c51d09ccf43684089250877f10647353de3197b9cb48f4539b507e45393b000842e8baa1218af097f871baea85089350877f0e53d64121c0a851c1b3f07423582034abce698525d0a47724354c07152f703b86089450877f2891938acb83ee193754969f4aa5a62a531081dbca4dec226258ea92984b434887089550877f04106f95e4ba3fb74dbe4bc53abc170262ba00c7c63ed8c457c3227532c12ce38808965087818180828009800909905062002bd760005262005a78565b877f2a73e61b8f1babfbb38b186f401eed0d92c5613ba25dd2ff4d099f7dd3c19fe582089050877f18e16b24642f19193b798b923b8dd25f6e4856d6b21b729aed2281ab154f7c5f83089150877f0d5f849b166ab9f6fc1a64467c5557029f359a2d0f194030c4dd875e12ae348584089250877f0e25250c57365a29c63a4f1531b8b0ef523eaa93c1d70acd0aa7cd7844dd044285089350877f0f813d14af0c85bcedfbf480b3d80b9f335853c60188526d80761274074a599a86089450877f0d2356a92dbaae8c24a8cebed6428083ef2f469460f166a6e774377e7805543587089550877f1fb6dceb495bf90fff56c8aad70b40bf773ea1003cdd092fd77a43961e9d7dc78808965087818180828009800909905062002cfa60005262005a78565b877f2c0a70ced79951a75e23c5a323fd706c2ab87c381cfc3c269081627741c2bbe882089050877f13dc6b3bdb05167dceb4b11037064ac5fd22db5e229e4c6ba55e8382321dc5ee83089150877f210fa8b777907ec30bb88dbd7c0e6ca9004eb3425d498025da6c90a47c35025c84089250877f0c5cfa957139b45a72fbbf80a410aab5454a982668baf24b0dd3c04e4d599cd985089350877f1f1f3bc4c21d633400fcf8bdb7be59b7f65cedc06bb2fc93a873b6ef12e0f52b86089450877f188f0ee95a9dfb03cd5e3fb30827057e933711644ee7bd57490374c0d67532e187089550877f0823877ebf8a842b77e8e0f3b44873e9409727101b186cae2b80d0cfa726ec8c8808965087818180828009800909905062002e1d60005262005a78565b877f0fe81603de39ccf148ca6390d6f8bdc9395ca2f3f50878283d98f1f0e61b1aff82089050877f2ef61fe192f52a9d7cebf41c134098f2ccae35cabcaa12963566768ff1b8370683089150877f0db6d076b2dd1b9f4d56d2f66fab4d7bfc6a38fef7f9ae1d4c2f8c44b1510f5184089250877f2a194a4ae8583f28189f9c011d107b82f279e6a0f8ca8bc9cb0aa581831c7d0685089350877f0ae539fa9ca67d4af48fb292f9188c9e72f2eeaae2e500b7e7201718c8da8de986089450877f23f66a894b1df4d26a8baa6d05b1ace511faffd4605b36cfd12bb4c6dc2bb4d787089550877f137cef522af2942aee9a4fb8017bf330e64601f466b56d32245669d9fe5ba7078808965087818180828009800909905062002f4060005262005a78565b877f187aafcb87841b2df9d64c1767789a6b221767e4634f0d550063a0bf92788c3282089050877f23212e75f4b89992a3647036ee36d74938bb9a9851e13d7b6e52daf66c4cbd2583089150877f0f54cbe967770dfa9d068b2fc53abc96489bb7d266212654d326de6b9af16d6384089250877f23d83a60b9887ab4359b8569ff3a219bb81367955fde72a62002d3cd51101fcc85089350877f2ea676fe7f21fc583ab0b0e189020d42cb22f044607ee15bfac7dd66da5ebe7686089450877f16f37f357a0c584821a356ab56a16d41f045029cb515f58ede001f05a807890b87089550877f139093b78fc9603a4288ae5811ed1311be916e4c97d35a5cf18e4b7e47d13b03880896508781818082800980090990506200306360005262005a78565b877f0aaba5fcad1c047030c8bf246f41610b68d60bad285cc15f55900f52778a11ba82089050877f1611827956f3435c1fc67dd3d37954a255eaa0196cddc5d5a6187fa0a2839efb83089150877f23db56362f248912421e5f087ad16e0c9e6d2bb59db30a52818e41964b7d812684089250877f2f215e640207a88b02999c98f1af8fa17331d19ea3de1decfe8f2e478224209c85089350877f2b2a261917c0fecf2bce19021f8506e378e9d3e1afb451e9d162b3d93eed861286089450877f2f662e4cdfef5f822cb956df75b17b46f17b08f930f54bab4324a0363e23384b87089550877f0870eeab2e7bb1e82c426c2ab1d65fda25d426749a538b4ea669eaa31f661a00880896508781818082800980090990506200318660005262005a78565b877f169418dffc99f2ef5dc6b1013717c134409349d846457985725b15ac6a152fac82089050877f021d3cb240d6400339ad5bc535b4fbb40919ce6b90162e51ec6895a7cabb437583089150877f12e45c46c45b660b6addc149e4216eeb6fb19474c8cce4d78e34c3cc18024afb84089250877f0c7c86394b7ad61d8c348d185403dc77152fd310b5d05970375a11b5abd0354885089350877f3024e78b217f85d8efeb60008ff70d33c3e84c238d9c21a04121b498a2fbb13186089450877f235977101b56071ced3163c1ec7187909a3ed7679bb54ad40811ba318e1afc8187089550877f14bf885e66f7c01fd974efdc0bc2d628ed79ad6fc6ba511c5a8ec383e1a73a7088089650878181808280098009099050620032a960005262005a78565b877f223325ae7e73cf093e1d5891aa92ed43f82610f1283f265f56548b38072f38d382089050877f239a5ae138dce6a019f44560ef7c19d2b8025dadf040559226f54870d318a57e83089150877f01dcc35115d9057efaf468d7c8a7d46048e01359c974855bc99738f0b247672e84089250877f1359a40012c5332587a4deb5604a436e269c282ba240cca0a6d77b343e76bbf385089350877f0a9ee39712223d4c0c37c26a96f267c85fc8e31acaee0c07354d3798dc5003e786089450877f11812d1ca3671ae688a9877233eeb5ec29868f7cd7c5e13275391a84167e023187089550877f2435cd699bc94985945d878960770f9298d40c0e28b6b5979069e0590952f0b888089650878181808280098009099050620033cc60005262005a78565b877f2bf020785e4117a1ea5930cd5355303bf9aab2a1ea0d6685391f40eeab2af0a082089050877f2cef6c78577c9e97a76855292ca92e4269ac53e9b7439dffbac2eda5c675802483089150877f09a30e00c9f0f6f260f05f029cdaa7c7afca506a5ce562c877b3b8d54313542984089250877f1fd85928f8c8053c9b264a74f121b90bbf9ae8063e0e89670165b9ba66a3e7cd85089350877f24482279d9efa57862a6cd4524aa289e6950606df8cdf8fbcaed4b674fdade9186089450877f10260a39cfb0d82ad8182a6951f9c780a455fc1de48c417d6ce6b27f3646218587089550877f25207827a76052d489bb2698730d5c3fc97192a4420578d2474a37ae7d7e314888089650878181808280098009099050620034ef60005262005a78565b877f28e36b634ecbdf7b8e4f9e1a347df95d771f15d97f2d5c401edf6a6e375874bd82089050877f073f0dea6f83d443ee3ba27c5b7f0064ab7cc0d34babae859f6bf66d46a1e16583089150877f14c6618569f748ff65514437adbcfa97f87b9b0d169048e84c553ba9888c451e84089250877f0c7675a042ba6cc74fa588a0b26fdc4f2d1f119a0fe6ef111be6a2d45b4bbcad85089350877f03dfad7db3f32c6ed8130c43cff604dbe1c29dbff250c684c955f09e495fb34c86089450877f20114281fbe35c188164fc6d4144200fc1d9ec433efc677480bd2cdcb35b64e687089550877f29e42f5218b1ea3fad06a48e2292c0fe3df08a2c4a823a3be4b998955da8a21d880896508781818082800980090990506200361260005262005a78565b877f13bf4039488d94b1b6a67f256296daeb6c7c80fad2726d6e9be11e17c235281682089050877f1847a4e36b3eace13de58fa4662a9f88c9c17a464e6dbd2083c2938c227ee3fa83089150877f0a7a2056c7b79384af9fe3c6826830145f51f6f8ca5d1a344e295ca7663ada2784089250877f181278caa15bdfb5940cff2bc3216ff06a45962d4979dfc0d6c94993bb7de86d85089350877f0a8a6f4fbba2ee09a36d390fbb1485fb789cf3f9f641dae011520c8f10e57a4386089450877f08f6b4c0d7bd5e4c87fbc6874520e3329c067b6841fc833aa37514435e987cea87089550877f2206b2c18f3292e7a9a91039683a55d813dd914b0c7d523210424ff0f2817df7880896508781818082800980090990506200373560005262005a78565b877f0186cef5c04b3a6c32da26405a16cdd359df57be8e93291acbeba3f487329cfc82089050877f075aff67570ea17c7c79c9114c7a10d533c6080b6d15a5bebd1204fdcde772f083089150877f2b06d8389ba9621c3869d2e8b25ac15e2c97389caaf7f97a35700be66c1655a884089250877f04fc6d0a6b67744428161cb5228a94e7c0e95dede804b2b47a18055acd737aeb85089350877f25e4a295b4e7a2dc71394d41ec2a8f4b124e58c234448a028a2c3bc6ad25e69b86089450877f0094c24ab01c6db594fda907b639a7b3a54301439340e889b6ca9cb6cba067b087089550877f2751821a6e3b2206cd6bc3cd5d98cbae8850745ec6cbbea413e7254d2a514549880896508781818082800980090990506200385860005262005a78565b877f145aaecc24e3878db9a8d77149b2419ed5b42df025ecbd1a8e97d8b817904bb982089050877f0d2aa00cc6e5167d845ee1877b7aa059b5e5151c57e4c163da3403f9a95755f283089150877f24233b69861c70c449ebd36e4420ddfc3c242b69ff6e3d4c6090c2bd08a764c284089250877f2c55fe1a75147c9c826f762f836d5645ac4184ba1927dd56a76dc056a989566785089350877f19779b1cb16a9c79654016674978b8b6ee1a78b64579de93ed2d67b9e49f098e86089450877f1807721ba60fbae476ff60120c1f47ec0bce692cfc00102ae50bd9376c5a22a187089550877f1c0208f5aba12750802fbdc3bf12eac9e00ada708f167d4b167bd7d4b03d76f1880896508781818082800980090990506200397b60005262005a78565b877f090b6e28ff541cc38869abe2f5dbfb9fbe888d21021f29d2bddb9127d3c273be82089050877f193d6c7e76ad94eb59a20010a799c7bf96a8dda8c90887d65214c8665ecda01b83089150877f09ddd5bc0b1f8d4c4f1a7a102c1ba12ec7e7540cda285a564ea7c4753af8a8d184089250877f300a1dd5fda15d1a9cfe2a287801817168721da2f970139549e16811f555be1f85089350877f1520908df2eefba075bb41cfe0740e1e5a1ee181ce492016e152706e493cf47086089450877f0b3f215d52e85ec3c682698ebcb6228233ae9518f9450f480689e7cf3013784687089550877f050996a07af6765c56a8ee2f736650deb4972bfcddb194a0efeb1954daa8a4d78808965087818180828009800909905062003a9e60005262005a78565b877f23a59326daf5f94f3b5192c18ed06cc58cd9608e44138686399dc4f1ee807add82089050877f1d220b9add0592866898ce834b1bdc2003976e815c0cf7d3f6b8bf967ad5649683089150877f19b49c4da3d9e3a26d36566738658923477c504e76a38a82b1b1247104f681e184089250877f139decc567b06b495bd6f3cf006c05b7e1f25d5b7ac554445c37dd285beaae7a85089350877f1a5a7d8bca8d4f07d4cd6e9bcd00c009e3099e99af3080debbb21f90f8e5b42586089450877f0621e3811d3dcb9584d0a8be41e431d588c93274c8549e625f98fd15983a809e87089550877f02a41c2d2bcf14664a0130a021daa6efd4a3b0c3aded38635bff97e3785ed6bd8808965087818180828009800909905062003bc160005262005a78565b877f21cfb54ba72fc06794947cc3bda33d815355416e2aae19084d84471eedca399d82089050877f05115093894089a202a4cf8d0aea329d83cbe0ece741160f9975cf01b7c85dc683089150877f2e40541caca7653212827129559ab422a1c06a6f48c974291470c65fc070dfb684089250877f07eeadd730284f5ab60778900b60300d27970001aa63e46ebb7f9cda1157600e85089350877f0cf33e4964d350adf2051f8e2e8448d3324d24d3f4858407f4fd60d3333bd98d86089450877f287c60483e2db313f1a2bda92c1e1c28b65ef0b99df4acfb75709edf6a3bfcb987089550877f289440f4b7fdb8b2b22661d0742e9695139c1a1ecef53c3febde0b5f6d9bb4a58808965087818180828009800909905062003ce460005262005a78565b877f291bda2c37fac962a24555a7abeb36d8e8b9eb25222f97f4817ef2e5b0bc720882089050877f0e105449589412404cda7b82f14d527594ff99d04cea894d6ecc315119f42b7383089150877f0e6097f0ad418ac7123ae7eba6cd4522b7ffa8dc8cf60a1f836be23e41ec25e584089250877f22fdb676724017afa8a8069c62d307aa4ff52c1445ad41b94c3e406e33e0def185089350877f0204d594ad7855ad0f6950742b19e60c2c5338817aab7ee7bf631c3aa92160f186089450877f0b6a643dad3f953877110517f7b336518c8fc11d868bc72e76cd76c3b2f7dc1b87089550877f04189ea6c2bd4b00fa6349adde17027eb7d76353a10bd07d0942639447cb43d38808965087818180828009800909905062003e0760005262005a78565b877f23bc8449d898a7524b2dfde263036cac2e14935134f8c3baf7f1e13ea2deec3c82089050877f0017efa608d9941bc64d39e0b2593b742576dba257fab323d4c99c7a42107a1683089150877f02f061475e9d8888b3877f9308e7758a16f91e3a34a5856f15ad0b9f2f92e2b484089250877f1f257d4d6f3277674a061330d73d6ba135da7cb0cba318686872fe1ef6d52e2585089350877f195340f6c1f7b5f6158884bd237715149cea488edbfd80fc9b9cc61c384853ab86089450877f273e200179c5c45d860b26a20b2c0853c1008f942459d5cdbed633ede031aa1d87089550877f24bd0ecea1e1df97af0f296c0e792d676e2c8e02e808a158bdbe01431c5e4a488808965087818180828009800909905062003f2a60005262005a78565b877f0c6e6f0f7c20811f404599d458af5c6cb41ab671599d6350df38e82104bc683582089050877f1dee1352470235cd8e129b5611fa953706bc08d58f6a3ef3d80370d8d19683a283089150877f1be0cc30343a168fda7c757ac0c7e5e16afddbfb7265878080725a12fa12ad4c84089250877f1a449abf644f68a64c217c6a042a231107ca8d9c619208580eb76bbd9215d98485089350877f080117dde58f228a459f59d90e64babe2daf476a9a2ca018faa3c5fecaac178986089450877f24ab9a167b61855e0f2c60bff098d5eb7d15166fab51f2b62c809de318d6d17687089550877f2b56aca9d595460503363292bccdc80e823201f71b54bda684c93eb0893784f6880896508781818082800980090990506200404d60005262005a78565b877f057361ec23c87b30080ff1cdf3467d57c95a12afbfc48ab5e1e4de0162a41b5a82089050877f1baed177177a25ecbbfaf4f204d9921eade3689ba1378cd9362cc14145089f9583089150877f00ccdb6d5f4913d7656889c312975fdbe0e0309a841849fd808d75f593a7148184089250877f2c52f5e1ef57de5dde528471cc1f0ee7839929df98ee743d9eff96251556191085089350877f0234a4a32f767f2e1ca48dad3a2fdd3ff54b2ca3d53ce13fc9052414ad7f755586089450877f182b4c0c551ab0ce1990b472278f794ba9cc62abcc90a89efdd80776558e343387089550877f001ab2bbdbd043d2d7d1a4eb76db4de71fddf19edf10d7cdb9550e1846e53fd5880896508781818082800980090990506200417060005262005a78565b877f206e6cd1e3154c113a762a628e24940907b41e90e7c2d43aa256ea524997835882089050877f27816cab4bec18577bd335bdaf8298798a261bb175137177d46ba95dd03dc8bb83089150877f1680b632a04be3eb1ed64ef589440b3f9526b2ad82cf0b8839d3e7b0f585bc8c84089250877f196b2cc0e6e07628df8234f58c027c190c75b0342511efea4c3724c4fedd6e7585089350877f29ab0b6065ebbefc684608acc6bf3b5fc693770c38bf91b4be38fe6f7264748686089450877f224ce814d39c382da2d65eccd9deb48056ede18c5efcb8e25515b727e540a85987089550877f195e1cb28f38a9cb57b2c719b504f5fdd1d42559b6a368264fd0fbfefa66559f880896508781818082800980090990506200429360005262005a78565b877f0e9e5eb70f4490ba6dbd1c0ee1d6724ccdd58acdf138785ce98ee3848ffb784082089050877f1995c9c8e520014e4412ec653839d781548cf71f46fbeb51919582226cbd5b2183089150877f0886095cc376c87fa653000283a6eae11008982f27104afee198fc377f26e32484089250877f13761e206b3e89b23de2342bfca860f9b0d9a36d486aa115565f9f52369c124d85089350877f22a8c6cfc0e38a500a47515c519ad6a72506ec0d508de25942c10f51f0dfab8186089450877f18985e9c7ea6f1a16962e4e27cf1aa4aa3086938b13f8ee9465a5ec7bebdee0387089550877f215b523ce3f055c92eb148c00027d1ad406a2abd64081043e0d15492845b31a488089650878181808280098009099050620043b660005262005a78565b877f0102f78c7513b093b885726b7df2e70298801b3e4019cdd42239d76448588c3182089050877f0bce88602fd3a0f0ab8885891ad44045058f9ace11fdabd24e8dfa1b0a4ae72783089150877f0745f760f8d466fc21043e2292e6cbb20b6227517f5200251129c5481f52fa4b84089250877f0406de3807445c6d3cbdf7b174c410a998a1530fcca991535a2a262de4e2ee5685089350877f26779e7346349068dbba66f784f87e243cc27cab59e887f7ed7a0117887d1acd86089450877f25150652a08af8ca574c7c5c77ffd98b17259a1d914a6ea41db75014267949d887089550877f00bb8d13438040f674a79ed42202c5bf6e67de6fc3f6b65ca837ceab795fcc6f88089650878181808280098009099050620044d960005262005a78565b877f0c1ebf40eeaac3d4a192dd50ee25c0067f66eff6229d045d5a801067639ccf2c82089050877f1a39731eb32fdb51dd793754f76103b5cab86947aad12d490d4951932ff2072783089150877f2baad3d41b18ae10c463af1662ecb28c6988524edded36943672a0e857b960f884089250877f2e778da1518b6a4fad2e833e41466fb2fe82f4f8df1b5c218cdd3b7e49af67e185089350877f156dc717930d6490167743911e9bf4d4634ae049b53adab281698645f8b16dc686089450877f117f2ef1712692ab9dbdc51db4968b45f5e0104f9e5281329349d908b23e231c87089550877f0b281b5d9dd2ca1a92e2d83b5087b6a08d6ab08330f47512aa047b2f88ba68cc88089650878181808280098009099050620045fc60005262005a78565b877f1c2803766dd9096567a3366061764f8c916f2a2dd640b6eec0942ccb75d4076782089050877f120174d53ba57d1a141bf40e4c705683668bd55800000aab6f34766b7b6575a283089150877f0c37b25020f8c76ea5536de54c722e47d01795d31b5ed73466e7d8b8ad376d4684089250877f0a508f345cc9a8b0c30ba27651ba1c3ad8398025a4000a5c2500228c44fa91b885089350877f12afa49ff4d8b4c6c372f7e065840783cb9497eeacc847a340f61f1823cb2a8d86089450877f29fc37eb5ec7cd004809516b7aa3c716f4f7f6e7772f443e0730b01dd5071a5587089550877f2048fb9c1fdaced0fdc5159490db2977e57dbcbff7514ad1e52a271bf84dd1a8880896508781818082800980090990506200471f60005262005a78565b877f00a6c4223aabe583e899bbcd0314a4743181f1d5e03dbc11c8a4d02550fab64f82089050877f15f462ab5b21c31557e25d9c22d8dc6a0cca93c8ed68a35655cff745686764d083089150877f27bc1c9af68edf8e3730197124be559f1472e7e3bba0d35e079b2d1b9e4271ef84089250877f1a2ec148f900eeae38c0d3d6efda64e146929c71eb82da3139a3a85968ec6ebc85089350877f04ff41cb553ca616d0616545922f2030b71b2354bcd1c55d7eabcaea8904c22e86089450877f2f2c4e7b18a845fcd6add67009fc237b14a984619260a7b3d38712e03a0849b787089550877f22925c606a1f091c1d5c7122f8e1a8ffea6a140031106826ac53a9c69d84c0ab880896508781818082800980090990506200484260005262005a78565b877f10e2a8c7b12bf70266c257573ca2594d8811633f77822d7c232b329c5b4e727982089050877f1712319595ae464992524bf8e488b783fa45b3548cd3f162d586bce31ec7184c83089150877f2e9616987d3333388ea5a1cb56b4c161f279ff19454a64ade43daed4dcda5c0b84089250877f2c68210d75660df5d9a8392a2805ea1612fc6137cf5b35a68fc1f03acfbfe4ca85089350877f053cf3707283df8730b6e1f637d23c67b0b3533061a35bcb0cb0f9bbe4e8adc286089450877f07577491483d03d7769dacc79607b9897081c0095decdce3d227c059ddeddb6687089550877f05639b2324c0b0af81c5b256ca6b2d46b95eaf855fc26cedbf90411312de4a12880896508781818082800980090990506200496560005262005a78565b877f0ec90944eb8fc36c52f3fd13763714f41cea1ff487ea39d70bd94e9b7f8f16d582089050877f1e96cd3ac345bb2e5bd3e755922f84afaf303d6fb227fc68f703b93665f5ea9683089150877f0408425405c66baa7d49858e6d5871e5b42ffebb0df885a824942da1e2e36d5884089250877f284d77566b42f3913d41ebb0528b899426e0805aadb9957a534b022b081aa97785089350877f0b044e5984887cda337f58c7ca50a78126deb5624f644516239427948d7d06bc86089450877f0486972179ee3496795bded1c2fc9674c0c3f71b58150c9c525063a6f2b340d887089550877f25b7568316c4b2fef9b72543b6033b317a7bfe406623e47cb68e5c79296e6bee8808965087818180828009800909905062004a8860005262005a78565b877f0cec9e74c344198703ceff28a4d11275f6c5c15738aa5a54a19269261ec6a8a882089050877f2bcc34a99345174c97a65e8978194486a9957c9d736f0ca39b98130801d1a11483089150877f2ddb2ebc0ac98f6498c0f2be2d73e86a786940a1e8c558d8dbed8d6f44b0255184089250877f2642b4a208e503e3480718d4d205351f43da183ed284ed7a385ef7cdca80bea885089350877f23fabdb09b481bc764102ae85ccf1e6ff71c7762f8bad04a2de3f7a025cb508786089450877f0ae4ed0ea6adb74b9d327fbcd01dbf37f5f6c467480c8aa5f495124cf70b823e87089550877f09034e1a646d6674bef041afa774e3634faf8adcc7c71bc2ed6e03b0b44920168808965087818180828009800909905062004bab60005262005a78565b877f2817ea20b471a4bf138dec79d84f9f6c0015e0ca147b650683df4b3372b55ef282089050877f2dfb7f81425c2def6bfa4e833e51e912298397de78fd2aa17f6d1dd2f1379ca983089150877f137b5bdb746523c051d680be08daa6b0d54c9ff7099f2bf5ce894c24a8ef1f3784089250877f03900ec7adc8e28af7046833dbad3fa1024e382aebe02bcb535243ddca21aa8585089350877f2b285b6c23b25c52f2079863c759e6a10c33df8f191551ead53ea508511cb55586089450877f1242067be2202d1b2c32b79c464e2d6c977e6fd12d8b35281e84c375864613d887089550877f1e8690f5b0a8729b9536ef2920abe7e6f3eee805237b158d997db63b17525eef8808965087818180828009800909905062004cce60005262005a78565b877f047f5113e1287b5572c82edb369fb0f717a91f261ef9d81764a5b279ad9c13ba82089050877f2d8800f21cd6774d5a6aa58ae2cd32593593d173b687122a4d61c4474390210583089150877f274ba1521d5bc5c580647f10d1a4c4cadeef088685d1976979bad813756f84b084089250877f17895b7c10d6a475310d34a0737efaedddca8f1eee9d8d56e7fe4934c8b5644185089350877f06eed11ae9f70df5ced09b1a6db258978cf5becad2f66d15761bf61e7dc1344086089450877f3036b521c631ce5d3599e37f6a5daf928842cefcbcd2c6bf84e2db5ded748f0987089550877f1f52d6e9ac28976c5a6fbf168c818478645c90d72e367609d7d7805a6367482d8808965087818180828009800909905062004df160005262005a78565b877f2a0e60356875d6ace1055932b3dd9ef39c3dd871091e96a323c1596cedb35e6b82089050877f02089633a6194f3ed38eeec2c8f54d0c7f434938fdebb9c0e1830dbe5311c38f83089150877f178c73d2769765d85383283fdb0d769457cfef0612baa963336bac1240b604c284089250877f2fc20bcaba9e3d96ebcdd710e3b341837d5d0db849e789f28c4be5004afa19a085089350877f151a423bee67fb14d5ad279f425213db7e0f21494982df872354c01f0f4a722c86089450877f25d61619e135690c4e10e4afeb4f5578ad0f8e25c20735366895b31eebcdf47e87089550877f15dd579bbd075429301d7295d3e685d832bf9f36c51277d09f2c3a664b045cd78808965087818180828009800909905062004f1460005262005a78565b877f236fa29b81678c8a109fd361c1ca90adf4423c13cf5b8cc1032b7283bcc959b182089050877f2a80cbac9b884e20368691bf1567cb7320537a977da10e53c5baea3446c01d1d83089150877f11d4cb8957937b3628a3b3f4d27f276cc0c179b0c22b2c13fffbde85fd91237884089250877f1289bf8ec507bf752a07c9b71efc0f800a52fbeb1637c5010fa54eadab40294685089350877f26f842b1a99394297d25799f2f03dc9e4903e77d2ddc03ec2fb155466da6f30386089450877f15944b9954b6182314e878fa2f9e091dcc40eadc48d37d39bdd5f09905c3a36987089550877f0742166dcd8ebd8576a6bfe0f1fed13793928f84442c7465a0012f584426fadf880896508781818082800980090990506200503760005262005a78565b877f08603d5a0e937b5353b56b05768fd50bde792e72fd61c06344cbd735707b68ff82089050877f0caa1711c66e9301b6f25e21a31683d80bf58d86032d03bfd25b9777edb74a7583089150877f2d6506da695d2087dff87b5f636ee676fab00c32ae45c75b3db345f3fe74a31184089250877f0d9244b07af9b6eaeff6f84049cb2e01d75dc4cb68533606e976b8b300758c8485089350877f243abc3c3382faa5dde3f1c3b432042d3f030ef6a1f5401aa37acd15cb1c8c4686089450877f168416e0a6d275d30eda3989242e0723024727d3b0791b06f8e1bfe8efe4019887089550877f1bcdeef03693d1ad0ea80c65688654affe634aa14cb11ae3a491681d9c5f8eeb880896508781818082800980090990506200515a60005262005a78565b877f02f66bfda3d2a1bdedb0ab8bf7eb1c4e551bef58d94fad7f7c231107e565390982089050877f019f6802171ab82a5922f023fdecc097eb8ac1fd0a1ed349afe9a7b94298975a83089150877f195a1c738398feed8c760468a0556c232645a1dd862d87c1f508c949ad52c3ae84089250877f0a36a3a46e6ec16567dfae1f853f360e6f24924810e838cb24ed1b0fce37f1e385089350877f002123c29ea87f7ea7b35c25f9e8dd3e81bbc3974c3c17c607cd840c09f374ae86089450877f02a717499cb6c31f71f0f0352b0f5bfef3005b80e93a520b6e42b3985789e2d387089550877f0fc053584b0a4607a2293e18baa309c52fdc933e9ba90fd327aaa8c8cfc4daa1880896508781818082800980090990506200527d60005262005a78565b877f1310d1942129737b32e87a86f4573032b1b99ae3c6d71bafef7b49479485554182089050877f1bfadae53fc82900f5761c558fee5e1218e6b2a6657e74b540969eeb49e0b8de83089150877f28c08a69e5f3641460ff2c60b7579395650c5b6afb392da142d32de8677556ea84089250877f223222ee42b6ca997f44d643ed6a3f2b040f47fe8cd922163d9d9d8b2622d90985089350877f064dad4752e708ff29bb0842d2c452a71448b43949345690031cb125588876a086089450877f2d5ddc21797043996b22dcabb9a1ba6c82b71e9a1bc5919db8befd35411056a587089550877f26315fcd9b5e1a266ec8e9f6600f5a6e0bcdb22f926d61591e83fa21069c0e0b88089650878181808280098009099050620053a060005262005a78565b877f0759273a4177fcdeab23da38b478faf2d4f22e82f346aa754b0a1331bc8371ee82089050877f09e13300eade70568fa0a840ea9729896ddd84c364d6279d34a0b9d1478fcf2a83089150877f13e97ed3c16fad6cb5b7bb954f278f2434b22f8cc054463a145cbe0240d4f8bc84089250877f05cd3486dca58f4eb221bc2cbedb8aa3027cde5765971bb1f61c272c5aa51ad085089350877f005ce523f6bc21daf1df468b12fd3e8665e1c1697816a9a671a3b2b6149c7de486089450877f2103066cc5df55e67cd7914028145fb71f089d671c83c5b537abea482b2d8cbb87089550877f039f8077bd9b71f91ca0502eaccc1672c539f72329317aaf8173d2edd763692888089650878181808280098009099050620054c360005262005a78565b877f2247bc0cc4373705b89672a2205346e6af3a6422e81b4f4885dc3af7cadcc5c582089050877f27bcc768bd31b9d00687a7e53c3ce53c426762706188790ea20b2e819638df8083089150877f0d91cef51a76f7a62c51c73a2809732d79ac350159814ea536487368cfdfd70884089250877f20a9ecdc649a26388dc68dc02343a0f167bad46d6aa1cd008537f627ba14073085089350877f23134149a0d4567c6dfc911d5cb80c1a1016220d39e0c230325dae2941f528bb86089450877f2a07507e9f030a42c6f29ccf1c9cc4f3e5a5b0dbf05874d5edadc03fe74b947487089550877f1bdf66bb1d57fd788e54ef29f06f35fdb2729b718ce81152cf3aafc64966110b880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200562e60005262005a78565b877f275c33d07f9e7338ddf50783bf158d51be619bf77a12020cf5630b78e7e0d0b982089050877f16411554e55fe604a1ff1b3b5b7afb6a2bfd0f32c4070b55bf1ad234e8b2811683089150877f073e6ac7e6af227557249ca1a5c55222a36c641bc2851a0dfcfb60831f6759a884089250877f10a6fde88c5f621d748543c76a218f95c202bbc3baca06838f31331b0556e12f85089350877f29c5865a26588ca8a88128a072c8434cc97a1bcec23e136f038d29dcf96b0eb686089450877f233e0ef6ad132ed211b1911cdd569576fea8c17ca64e4d5dd516fcca07212c1a87089550877f096f9b92b9cf2c7d664408a29860365f5b6adc238d878a476bded3e4d2e0b840880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200579960005262005a78565b877f2fc788fe8aad4c28b943bb57cb90edf6d7b1f1e835de1fbf3192e395db78555482089050877f1bac0ed609233148503795fc5e114076ef7c9d722bc648dd0338d9689f6e023a83089150877f001c35268aa030d6cd148e106e3fc23094e561573d8c72a69fc383643e2adc8284089250877f2bb1f8fe5d998d0b8b92837ffb27bfe7a39ce39ff94fc167ddcc95a7202e34b285089350877f1a98576450a43e5e705b9af68cd0c145422da23945630b10b8e821dd61f9a2b286089450877f2714d37ee506efbc2ba9941043fb23f16af966f123d653f38388bcbdd50e603787089550877f175d0480ba14abf0bcb8075a03f4a2a01ff7ed75413917b53e50ea00cc2a4ad0880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200590460005262005a78565b877f203de45a037b75ef63761750dce08da2be7709701ec8158c17fc026fd084d54182089050877f265aabfc78b70ca985c329080d6329a12560f76b01cc3d431a7283022193abf883089150877f135468dfbeb70e8c2edaffac8658a6c22b2ad1520ac0819c127af2ea5f3a87a884089250877f216a41e24329deda65a8a82001c84ce8286c61758447ff1bfa9d9293b6711fdd85089350877f2887ed49797bd6652bed8bb99ae345ad70d1a27cdb21b9460bb6fd0d4fe482e686089450877f03e2bf82690c804bb6ee3c79dabd1892ea53a9811e2424a19fae446b8ae49cad87089550877f0e6dce1bbe6e9e465cbe14dcc615611867414676dd8a8ce9946649b1c4e811168808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062005a6f60005262005a78565b60005260206000f35b8760205182098860405184098991088860605185098991088860805186098991088860a05187098991088860c05188098991088860e051890989910888610100518309896101205185098a9108896101405186098a9108896101605187098a9108896101805188098a9108896101a05189098a9108896101c0518a098a9108896101e05184098a6102005186098b91088a6102205187098b91088a6102405188098b91088a6102605189098b91088a610280518a098b91088a6102a0518b098b91088a6102c05185098b6102e05187098c91088b6103005188098c91088b6103205189098c91088b610340518a098c91088b610360518b098c91088b610380518c098c91088b6103a05186098c6103c05188098d91088c6103e05189098d91088c610400518a098d91088c610420518b098d91088c610440518c098d91088c610460518d098d91088c6104805187098d6104a05189098e91088d6104c0518a098e91088d6104e0518b098e91088d610500518c098e91088d610520518d098e91088d610540518e098e91088d6105605188098e610580518a098f91088e6105a0518b098f91088e6105c0518c098f91088e6105e0518d098f91088e610600518e098f91088e610620518f098f91089c509a509850965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/Ramp.json",
    "content": "{\n  \"address\": \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x325221aa6b19b613f79c6dfbe253752d2a63d288b98150a90fe7b77b2f036e00\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n    \"transactionIndex\": 2,\n    \"gasUsed\": \"3566608\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000001000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x37999491faefcc7420f7b08bbfe8e79d1b21ed2a1639fa4b9b643ad454f39783\",\n    \"transactionHash\": \"0x325221aa6b19b613f79c6dfbe253752d2a63d288b98150a90fe7b77b2f036e00\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 2,\n        \"blockNumber\": 6510420,\n        \"transactionHash\": \"0x325221aa6b19b613f79c6dfbe253752d2a63d288b98150a90fe7b77b2f036e00\",\n        \"address\": \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 2,\n        \"blockHash\": \"0x37999491faefcc7420f7b08bbfe8e79d1b21ed2a1639fa4b9b643ad454f39783\"\n      },\n      {\n        \"transactionIndex\": 2,\n        \"blockNumber\": 6510420,\n        \"transactionHash\": \"0x325221aa6b19b613f79c6dfbe253752d2a63d288b98150a90fe7b77b2f036e00\",\n        \"address\": \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 3,\n        \"blockHash\": \"0x37999491faefcc7420f7b08bbfe8e79d1b21ed2a1639fa4b9b643ad454f39783\"\n      }\n    ],\n    \"blockNumber\": 6510420,\n    \"cumulativeGasUsed\": \"3718608\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"0xfdb7153989116F650387813013A047B6Ab56aEff\",\n    \"20000000\",\n    \"999000000\",\n    \"180\",\n    \"180\",\n    \"0\",\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3235f00afe52b593578a06ba6b1f711c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Ramp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Ramp.sol\\\":\\\"Ramp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"./external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"./interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0673d848a6f2d2a80803fe45e2f186625c1a09998eb1da414a39573afcaa4f4f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c06040523480156200001157600080fd5b5060405162003fa138038062003fa18339810160408190526200003491620001e4565b6200003f336200009d565b6001600160a01b0388811660805287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b0319169183169190911790556200008e89620000ed565b50505050505050505062000280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f762000170565b6001600160a01b038116620001625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200016d816200009d565b50565b6000546001600160a01b03163314620001cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000159565b565b6001600160a01b03811681146200016d57600080fd5b60008060008060008060008060006101208a8c0312156200020457600080fd5b89516200021181620001ce565b60208b01519099506200022481620001ce565b60408b01519098506200023781620001ce565b8097505060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a01516200026f81620001ce565b809150509295985092959850929598565b60805160a051613cd8620002c9600039600081816105e701526110cb015260008181610354015281816114110152818161192701528181612e260152612ed50152613cd86000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212209f5c02fc7d99d9a29ddbf394d50a84e561027a6b405d2ef7b323f6d8a34006c964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212209f5c02fc7d99d9a29ddbf394d50a84e561027a6b405d2ef7b323f6d8a34006c964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2121,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)4837\"\n      },\n      {\n        \"astId\": 2124,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)4875\"\n      },\n      {\n        \"astId\": 2126,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 2131,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)2082_storage)\"\n      },\n      {\n        \"astId\": 2136,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)2023_storage)\"\n      },\n      {\n        \"astId\": 2141,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)2041_storage)\"\n      },\n      {\n        \"astId\": 2146,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)2060_storage)\"\n      },\n      {\n        \"astId\": 2148,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2150,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2152,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2154,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2156,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2158,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2160,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessor)4837\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)4875\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)2023_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct Ramp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)2023_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)2082_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)2082_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)2060_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)2060_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)2041_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct Ramp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)2041_storage\"\n      },\n      \"t_struct(AccountInfo)2023_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 2019,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 2022,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)2074_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 2069,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 2073,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)2041_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 2025,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 2029,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 2031,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2033,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2035,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2037,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2040,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)2082_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 2076,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 2078,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2081,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)2074_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)2060_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 2051,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 2053,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 2055,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2057,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 2059,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/RevolutAccountRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0x96fa6C854F35665c0B5C6365c64a9EECa5793411\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_notaryKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_endpoint\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_host\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"VerifierSigningKeySet\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"endpoint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"host\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"notaryKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRampId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setVerifierSigningKey\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifierSigningKey\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"host\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"profileId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"userAddress\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n          \"name\": \"_publicValues\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_proof\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x46fd5c6c178c1a2a40b7ee671ed84175778d8edf88f38f979c256810680a4ede\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x96fa6C854F35665c0B5C6365c64a9EECa5793411\",\n    \"transactionIndex\": 13,\n    \"gasUsed\": \"1473085\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000080000000000000000\",\n    \"blockHash\": \"0x5ae20519798166f8188b0f61ee233fdb1b15df1d54c507b78803f4f2190e3f7f\",\n    \"transactionHash\": \"0x46fd5c6c178c1a2a40b7ee671ed84175778d8edf88f38f979c256810680a4ede\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 13,\n        \"blockNumber\": 14219482,\n        \"transactionHash\": \"0x46fd5c6c178c1a2a40b7ee671ed84175778d8edf88f38f979c256810680a4ede\",\n        \"address\": \"0x96fa6C854F35665c0B5C6365c64a9EECa5793411\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 29,\n        \"blockHash\": \"0x5ae20519798166f8188b0f61ee233fdb1b15df1d54c507b78803f4f2190e3f7f\"\n      }\n    ],\n    \"blockNumber\": 14219482,\n    \"cumulativeGasUsed\": \"2703939\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x44115b15Ff0Db10702DFC72Cb2fd3179215623df\",\n    \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n    \"0xfa15be4a0fff051ec52e2738d0d62f7e8c0e951705885ed7290a6daff1ed7aee\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"0\",\n    \"GET https://app.revolut.com/api/retail/user/current\",\n    \"app.revolut.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3d00f158650f73562ebab290bf8faab9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_host\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"VerifierSigningKeySet\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"endpoint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"host\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"notaryKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRampId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setVerifierSigningKey\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifierSigningKey\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"_publicValues\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated TLS calls\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\\\":\\\"RevolutAccountRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/TLSBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TLSBaseProcessor is Ownable {\\\\n\\\\n    using SignatureChecker for address;\\\\n    using ECDSA for bytes32;\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    string public endpoint;\\\\n    string public host;\\\\n\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        endpoint = _endpoint;\\\\n        host = _host;\\\\n\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateTLSEndpoint(\\\\n        string memory _expectedEndpoint,\\\\n        string memory _passedEndpoint\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\\\n            \\\\\\\"Endpoint does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateTLSHost(\\\\n        string memory _expectedHost,\\\\n        string memory _passedHost\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\\\n            \\\\\\\"Host does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n\\\\n    function _isValidSignature(\\\\n        bytes memory _message,\\\\n        bytes memory _signature,\\\\n        address _signer\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\\\n\\\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x366ab1cc4ebfdb4ba68fdb43b902676e67e7760ae1987e4252e5839e8370a6c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRevolutAccountRegistrationProcessor } from \\\\\\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TLSBaseProcessor } from \\\\\\\"../../processors/TLSBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\\\n\\\\n    using ECDSA for bytes32;\\\\n    using SignatureChecker for address;\\\\n    using StringConversionUtils for string;\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\\\n    \\\\n    /* ============ Public Variables ============ */\\\\n    address public verifierSigningKey;\\\\n    bytes32 public notaryKeyHash;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        address _verifierSigningKey,\\\\n        bytes32 _notaryKeyHash,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        TLSBaseProcessor(\\\\n            _ramp,\\\\n            _nullifierRegistry,\\\\n            _timestampBuffer,\\\\n            _endpoint,\\\\n            _host\\\\n        )\\\\n    {\\\\n        verifierSigningKey = _verifierSigningKey;\\\\n        notaryKeyHash = _notaryKeyHash;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 onRampId)\\\\n    {\\\\n        _validateProof(_proof.public_values, _proof.proof);\\\\n\\\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\\\n        _validateTLSHost(host, _proof.public_values.host);\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\\\n\\\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\\\n    }\\\\n\\\\n    /* ============ External Admin Functions ============ */\\\\n\\\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\\\n        verifierSigningKey = _verifierSigningKey;\\\\n\\\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function verifyProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\\\n        bytes memory _proof\\\\n    )\\\\n        public\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes memory encodedMessage = abi.encode(\\\\n            _publicValues.endpoint,\\\\n            _publicValues.host,\\\\n            _publicValues.profileId,\\\\n            _publicValues.userAddress,\\\\n            _publicValues.notaryKeyHash\\\\n        );\\\\n\\\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\\\\\"Invalid notary key hash\\\\\\\");\\\\n\\\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n    {   \\\\n        require(\\\\n            verifyProof(_publicValues, _proof),\\\\n            \\\\\\\"Invalid proof\\\\\\\"\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x2e0d697451ba4cc026f7299f269f90bbba6f4efdda1be1f9a9575ba4af1b5cc2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistrationProcessor {\\\\n\\\\n    struct RegistrationData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string profileId;\\\\n        address userAddress;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct RegistrationProof {\\\\n        RegistrationData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb3e358861c8fb5d7c81c48e3eac4e0f4ce3c03ddfe4136aada9759b61e5e465a\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001a2c38038062001a2c8339810160408190526200003491620001e8565b86848484846200004433620000ba565b6001600160a01b03851660805260016200005f838262000335565b5060026200006e828262000335565b5050600380546001600160a01b039485166001600160a01b0319918216179091556004929092555060058054999092169816979097179096555050506006919091555062000401915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014b57600080fd5b81516001600160401b038082111562000168576200016862000123565b604051601f8301601f19908116603f0116810190828211818310171562000193576200019362000123565b81604052838152602092508683858801011115620001b057600080fd5b600091505b83821015620001d45785820183015181830184015290820190620001b5565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200020457600080fd5b875162000211816200010a565b602089015190975062000224816200010a565b604089015160608a015191975095506200023e816200010a565b608089015160a08a015191955093506001600160401b03808211156200026357600080fd5b620002718b838c0162000139565b935060c08a01519150808211156200028857600080fd5b50620002978a828b0162000139565b91505092959891949750929550565b600181811c90821680620002bb57607f821691505b602082108103620002dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033057600081815260208120601f850160051c810160208610156200030b5750805b601f850160051c820191505b818110156200032c5782815560010162000317565b5050505b505050565b81516001600160401b0381111562000351576200035162000123565b6200036981620003628454620002a6565b84620002e2565b602080601f831160018114620003a15760008415620003885750858301515b600019600386901b1c1916600185901b1785556200032c565b600085815260208120601f198616915b82811015620003d257888601518255948401946001909101908401620003b1565b5085821015620003f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611608620004246000396000818161012401526103f901526116086000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063b870676c1161008c578063dec965d311610066578063dec965d3146101e9578063f193eda6146101fc578063f2fde38b14610205578063f437bc591461021857600080fd5b8063b870676c1461019c578063beb15c21146101af578063dbac5821146101d257600080fd5b80635e280f11116100c85780635e280f111461015b578063715018a6146101705780638da5cb5b14610178578063b2a3fda41461018957600080fd5b80630fa4ed4d146100ef57806315d276e11461011f5780634e06a32b14610146575b600080fd5b600554610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101027f000000000000000000000000000000000000000000000000000000000000000081565b610159610154366004610fca565b610220565b005b61016361027c565b6040516101169190611035565b61015961030a565b6000546001600160a01b0316610102565b610159610197366004611048565b61031e565b600354610102906001600160a01b031681565b6101c26101bd3660046111e5565b61032b565b6040519015158152602001610116565b6101db60045481565b604051908152602001610116565b6101db6101f736600461125d565b6103ec565b6101db60065481565b610159610213366004610fca565b610744565b6101636107bd565b6102286107ca565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fb8603ceabf8ee4633f1fd8c0ae9e0e64f2fc2fea5cb79a96c18efd007aab6f969060200160405180910390a150565b6001805461028990611298565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611298565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050505081565b6103126107ca565b61031c6000610824565b565b6103266107ca565b600455565b6000808360000151846020015185604001518660600151876080015160405160200161035b9594939291906112d2565b6040516020818303038152906040529050600654846080015160001b146103c95760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e6f74617279206b6579206861736800000000000000000060448201526064015b60405180910390fd5b6005546103e290829085906001600160a01b0316610874565b9150505b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104665760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064016103c0565b6104c36104738380611329565b61047c90611349565b6104896020850185611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108c892505050565b6105a3600180546104d390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff90611298565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b5061055f93508792508291506113299050565b6105699080611355565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091292505050565b610687600280546105b390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546105df90611298565b801561062c5780601f106106015761010080835404028352916020019161062c565b820191906000526020600020905b81548152906001019060200180831161060f57829003601f168201915b5061063f93508792508291506113299050565b61064d906020810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ad92505050565b6106ea6106948380611329565b6106a5906080810190606001610fca565b6106af8480611329565b6106bd906040810190611355565b6040516020016106cf9392919061139c565b60405160208183030381529060405280519060200120610a48565b6103e660006106f98480611329565b610707906040810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610b639050565b61074c6107ca565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c0565b6107ba81610824565b50565b6002805461028990611298565b6000546001600160a01b0316331461031c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c81206108bf6001600160a01b0384168286610b7b565b95945050505050565b6108d2828261032b565b61090e5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016103c0565b5050565b806040516020016109239190611035565b604051602081830303815290604052805190602001208260405160200161094a9190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d6174636820657870656374656460448201526064016103c0565b806040516020016109be9190611035565b60405160208183030381529060405280519060200120826040516020016109e59190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d617463682065787065637465640000000060448201526064016103c0565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113dc565b15610b025760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016103c0565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610b4857600080fd5b505af1158015610b5c573d6000803e3d6000fd5b5050505050565b6000610b7483601760f91b84610bdc565b9392505050565b6000806000610b8a8585610db9565b90925090506000816004811115610ba357610ba36113fe565b148015610bc15750856001600160a01b0316826001600160a01b0316145b80610bd25750610bd2868686610dfe565b9695505050505050565b600083818080805b8451811015610d3257603060f81b858281518110610c0457610c04611414565b01602001516001600160f81b03191610801590610c455750603960f81b858281518110610c3357610c33611414565b01602001516001600160f81b03191611155b15610c88576030858281518110610c5e57610c5e611414565b0160200151610c70919060f81c611440565b610c7b85600a611453565b610c85919061146a565b93505b8115610c9c5782610c988161147d565b9350505b876001600160f81b031916858281518110610cb957610cb9611414565b01602001516001600160f81b03191603610d20578115610d1b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c730000000060448201526064016103c0565b600191505b80610d2a8161147d565b915050610be4565b5085821115610d8e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b60648201526084016103c0565b610d988287611440565b610da390600a61157a565b610dad9084611453565b98975050505050505050565b6000808251604103610def5760208301516040840151606085015160001a610de387828585610eea565b94509450505050610df7565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401610e28929190611586565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e6691906115a7565b600060405180830381855afa9150503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea6565b606091505b5091509150818015610eba57506020815110155b8015610bd257508051630b135d3f60e11b90610edf90830160209081019084016115b9565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f215750600090506003610fa5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610f75573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f9e57600060019250925050610fa5565b9150600090505b94509492505050565b80356001600160a01b0381168114610fc557600080fd5b919050565b600060208284031215610fdc57600080fd5b610b7482610fae565b60005b83811015611000578181015183820152602001610fe8565b50506000910152565b60008151808452611021816020860160208601610fe5565b601f01601f19169290920160200192915050565b602081526000610b746020830184611009565b60006020828403121561105a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561109a5761109a611061565b60405290565b600067ffffffffffffffff808411156110bb576110bb611061565b604051601f8501601f19908116603f011681019082821181831017156110e3576110e3611061565b816040528093508581528686860111156110fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261112757600080fd5b610b74838335602085016110a0565b600060a0828403121561114857600080fd5b611150611077565b9050813567ffffffffffffffff8082111561116a57600080fd5b61117685838601611116565b8352602084013591508082111561118c57600080fd5b61119885838601611116565b602084015260408401359150808211156111b157600080fd5b506111be84828501611116565b6040830152506111d060608301610fae565b60608201526080820135608082015292915050565b600080604083850312156111f857600080fd5b823567ffffffffffffffff8082111561121057600080fd5b61121c86838701611136565b9350602085013591508082111561123257600080fd5b508301601f8101851361124457600080fd5b611253858235602084016110a0565b9150509250929050565b60006020828403121561126f57600080fd5b813567ffffffffffffffff81111561128657600080fd5b820160408185031215610b7457600080fd5b600181811c908216806112ac57607f821691505b6020821081036112cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60a0815260006112e560a0830188611009565b82810360208401526112f78188611009565b9050828103604084015261130b8187611009565b6001600160a01b039590951660608401525050608001529392505050565b60008235609e1983360301811261133f57600080fd5b9190910192915050565b60006103e63683611136565b6000808335601e1984360301811261136c57600080fd5b83018035915067ffffffffffffffff82111561138757600080fd5b602001915036819003821315610df757600080fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156113ee57600080fd5b81518015158114610b7457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156103e6576103e661142a565b80820281158282048414176103e6576103e661142a565b808201808211156103e6576103e661142a565b60006001820161148f5761148f61142a565b5060010190565b600181815b808511156114d15781600019048211156114b7576114b761142a565b808516156114c457918102915b93841c939080029061149b565b509250929050565b6000826114e8575060016103e6565b816114f5575060006103e6565b816001811461150b576002811461151557611531565b60019150506103e6565b60ff8411156115265761152661142a565b50506001821b6103e6565b5060208310610133831016604e8410600b8410161715611554575081810a6103e6565b61155e8383611496565b80600019048211156115725761157261142a565b029392505050565b6000610b7483836114d9565b82815260406020820152600061159f6040830184611009565b949350505050565b6000825161133f818460208701610fe5565b6000602082840312156115cb57600080fd5b505191905056fea2646970667358221220d18dcf7b2dc9bd7697240198bf08fb73c2276ae25cdbf1ddb3e827fd7b93aa0f64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063b870676c1161008c578063dec965d311610066578063dec965d3146101e9578063f193eda6146101fc578063f2fde38b14610205578063f437bc591461021857600080fd5b8063b870676c1461019c578063beb15c21146101af578063dbac5821146101d257600080fd5b80635e280f11116100c85780635e280f111461015b578063715018a6146101705780638da5cb5b14610178578063b2a3fda41461018957600080fd5b80630fa4ed4d146100ef57806315d276e11461011f5780634e06a32b14610146575b600080fd5b600554610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101027f000000000000000000000000000000000000000000000000000000000000000081565b610159610154366004610fca565b610220565b005b61016361027c565b6040516101169190611035565b61015961030a565b6000546001600160a01b0316610102565b610159610197366004611048565b61031e565b600354610102906001600160a01b031681565b6101c26101bd3660046111e5565b61032b565b6040519015158152602001610116565b6101db60045481565b604051908152602001610116565b6101db6101f736600461125d565b6103ec565b6101db60065481565b610159610213366004610fca565b610744565b6101636107bd565b6102286107ca565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fb8603ceabf8ee4633f1fd8c0ae9e0e64f2fc2fea5cb79a96c18efd007aab6f969060200160405180910390a150565b6001805461028990611298565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611298565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050505081565b6103126107ca565b61031c6000610824565b565b6103266107ca565b600455565b6000808360000151846020015185604001518660600151876080015160405160200161035b9594939291906112d2565b6040516020818303038152906040529050600654846080015160001b146103c95760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e6f74617279206b6579206861736800000000000000000060448201526064015b60405180910390fd5b6005546103e290829085906001600160a01b0316610874565b9150505b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104665760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064016103c0565b6104c36104738380611329565b61047c90611349565b6104896020850185611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108c892505050565b6105a3600180546104d390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff90611298565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b5061055f93508792508291506113299050565b6105699080611355565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091292505050565b610687600280546105b390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546105df90611298565b801561062c5780601f106106015761010080835404028352916020019161062c565b820191906000526020600020905b81548152906001019060200180831161060f57829003601f168201915b5061063f93508792508291506113299050565b61064d906020810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ad92505050565b6106ea6106948380611329565b6106a5906080810190606001610fca565b6106af8480611329565b6106bd906040810190611355565b6040516020016106cf9392919061139c565b60405160208183030381529060405280519060200120610a48565b6103e660006106f98480611329565b610707906040810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610b639050565b61074c6107ca565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c0565b6107ba81610824565b50565b6002805461028990611298565b6000546001600160a01b0316331461031c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c81206108bf6001600160a01b0384168286610b7b565b95945050505050565b6108d2828261032b565b61090e5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016103c0565b5050565b806040516020016109239190611035565b604051602081830303815290604052805190602001208260405160200161094a9190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d6174636820657870656374656460448201526064016103c0565b806040516020016109be9190611035565b60405160208183030381529060405280519060200120826040516020016109e59190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d617463682065787065637465640000000060448201526064016103c0565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113dc565b15610b025760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016103c0565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610b4857600080fd5b505af1158015610b5c573d6000803e3d6000fd5b5050505050565b6000610b7483601760f91b84610bdc565b9392505050565b6000806000610b8a8585610db9565b90925090506000816004811115610ba357610ba36113fe565b148015610bc15750856001600160a01b0316826001600160a01b0316145b80610bd25750610bd2868686610dfe565b9695505050505050565b600083818080805b8451811015610d3257603060f81b858281518110610c0457610c04611414565b01602001516001600160f81b03191610801590610c455750603960f81b858281518110610c3357610c33611414565b01602001516001600160f81b03191611155b15610c88576030858281518110610c5e57610c5e611414565b0160200151610c70919060f81c611440565b610c7b85600a611453565b610c85919061146a565b93505b8115610c9c5782610c988161147d565b9350505b876001600160f81b031916858281518110610cb957610cb9611414565b01602001516001600160f81b03191603610d20578115610d1b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c730000000060448201526064016103c0565b600191505b80610d2a8161147d565b915050610be4565b5085821115610d8e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b60648201526084016103c0565b610d988287611440565b610da390600a61157a565b610dad9084611453565b98975050505050505050565b6000808251604103610def5760208301516040840151606085015160001a610de387828585610eea565b94509450505050610df7565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401610e28929190611586565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e6691906115a7565b600060405180830381855afa9150503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea6565b606091505b5091509150818015610eba57506020815110155b8015610bd257508051630b135d3f60e11b90610edf90830160209081019084016115b9565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f215750600090506003610fa5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610f75573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f9e57600060019250925050610fa5565b9150600090505b94509492505050565b80356001600160a01b0381168114610fc557600080fd5b919050565b600060208284031215610fdc57600080fd5b610b7482610fae565b60005b83811015611000578181015183820152602001610fe8565b50506000910152565b60008151808452611021816020860160208601610fe5565b601f01601f19169290920160200192915050565b602081526000610b746020830184611009565b60006020828403121561105a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561109a5761109a611061565b60405290565b600067ffffffffffffffff808411156110bb576110bb611061565b604051601f8501601f19908116603f011681019082821181831017156110e3576110e3611061565b816040528093508581528686860111156110fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261112757600080fd5b610b74838335602085016110a0565b600060a0828403121561114857600080fd5b611150611077565b9050813567ffffffffffffffff8082111561116a57600080fd5b61117685838601611116565b8352602084013591508082111561118c57600080fd5b61119885838601611116565b602084015260408401359150808211156111b157600080fd5b506111be84828501611116565b6040830152506111d060608301610fae565b60608201526080820135608082015292915050565b600080604083850312156111f857600080fd5b823567ffffffffffffffff8082111561121057600080fd5b61121c86838701611136565b9350602085013591508082111561123257600080fd5b508301601f8101851361124457600080fd5b611253858235602084016110a0565b9150509250929050565b60006020828403121561126f57600080fd5b813567ffffffffffffffff81111561128657600080fd5b820160408185031215610b7457600080fd5b600181811c908216806112ac57607f821691505b6020821081036112cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60a0815260006112e560a0830188611009565b82810360208401526112f78188611009565b9050828103604084015261130b8187611009565b6001600160a01b039590951660608401525050608001529392505050565b60008235609e1983360301811261133f57600080fd5b9190910192915050565b60006103e63683611136565b6000808335601e1984360301811261136c57600080fd5b83018035915067ffffffffffffffff82111561138757600080fd5b602001915036819003821315610df757600080fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156113ee57600080fd5b81518015158114610b7457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156103e6576103e661142a565b80820281158282048414176103e6576103e661142a565b808201808211156103e6576103e661142a565b60006001820161148f5761148f61142a565b5060010190565b600181815b808511156114d15781600019048211156114b7576114b761142a565b808516156114c457918102915b93841c939080029061149b565b509250929050565b6000826114e8575060016103e6565b816114f5575060006103e6565b816001811461150b576002811461151557611531565b60019150506103e6565b60ff8411156115265761152661142a565b50506001821b6103e6565b5060208310610133831016604e8410600b8410161715611554575081810a6103e6565b61155e8383611496565b80600019048211156115725761157261142a565b029392505050565b6000610b7483836114d9565b82815260406020820152600061159f6040830184611009565b949350505050565b6000825161133f818460208701610fe5565b6000602082840312156115cb57600080fd5b505191905056fea2646970667358221220d18dcf7b2dc9bd7697240198bf08fb73c2276ae25cdbf1ddb3e827fd7b93aa0f64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated TLS calls\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2232,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"endpoint\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2234,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"host\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2237,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_contract(INullifierRegistry)2402\"\n      },\n      {\n        \"astId\": 2239,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2435,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"verifierSigningKey\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"notaryKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_bytes32\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(INullifierRegistry)2402\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/RevolutAccountRegistry.json",
    "content": "{\n  \"address\": \"0x44115b15Ff0Db10702DFC72Cb2fd3179215623df\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"accountId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AllowlistEnabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewAccountRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accountRegistrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_allowedUsers\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"addAccountsToAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAllowedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"_accountRegistrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAllowedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isAllowlistEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isRegisteredUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_disallowedUsers\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"removeAccountsFromAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setAccountRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd29b6822b12418e7b4da24472a39fb8a3ad89a60bc57ad6c9f9568679d980c6e\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x44115b15Ff0Db10702DFC72Cb2fd3179215623df\",\n    \"transactionIndex\": 18,\n    \"gasUsed\": \"1200937\",\n    \"logsBloom\": \"0x00000000000004000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000010000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xf878a6c5b385c61b21c7260e93a7db4fb1f7d12fb86ddb62e3144e5843d75cb6\",\n    \"transactionHash\": \"0xd29b6822b12418e7b4da24472a39fb8a3ad89a60bc57ad6c9f9568679d980c6e\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 18,\n        \"blockNumber\": 14219479,\n        \"transactionHash\": \"0xd29b6822b12418e7b4da24472a39fb8a3ad89a60bc57ad6c9f9568679d980c6e\",\n        \"address\": \"0x44115b15Ff0Db10702DFC72Cb2fd3179215623df\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 40,\n        \"blockHash\": \"0xf878a6c5b385c61b21c7260e93a7db4fb1f7d12fb86ddb62e3144e5843d75cb6\"\n      },\n      {\n        \"transactionIndex\": 18,\n        \"blockNumber\": 14219479,\n        \"transactionHash\": \"0xd29b6822b12418e7b4da24472a39fb8a3ad89a60bc57ad6c9f9568679d980c6e\",\n        \"address\": \"0x44115b15Ff0Db10702DFC72Cb2fd3179215623df\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 41,\n        \"blockHash\": \"0xf878a6c5b385c61b21c7260e93a7db4fb1f7d12fb86ddb62e3144e5843d75cb6\"\n      }\n    ],\n    \"blockNumber\": 14219479,\n    \"cumulativeGasUsed\": \"3317109\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"accountId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AllowlistEnabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewAccountRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"accountRegistrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_allowedUsers\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"addAccountsToAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountId\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAllowedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"_accountRegistrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAllowedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isAllowlistEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isRegisteredUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_disallowedUsers\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"removeAccountsFromAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setAccountRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"accountId being banned\\\"}},\\\"addAccountsToAllowlist(bytes32[])\\\":{\\\"params\\\":{\\\"_allowedUsers\\\":\\\"List of accountIds allowed to signal intents on the user's deposit\\\"}},\\\"initialize(address)\\\":{\\\"params\\\":{\\\"_accountRegistrationProcessor\\\":\\\"Account Registration processor address\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(((string,string,string,address,uint256),bytes))\\\":{\\\"params\\\":{\\\"_proof\\\":\\\"Registration proof consisting of unredacted data being notarized and a signature\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"accountId being approved\\\"}},\\\"removeAccountsFromAllowlist(bytes32[])\\\":{\\\"params\\\":{\\\"_disallowedUsers\\\":\\\"List of accountIds being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setAccountRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"addAccountsToAllowlist(bytes32[])\\\":{\\\"notice\\\":\\\"Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will be able to signal intents on the user's deposit.\\\"},\\\"enableAllowlist()\\\":{\\\"notice\\\":\\\"Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\\"},\\\"initialize(address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"register(((string,string,string,address,uint256),bytes))\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the profileId from the proof and assigning the account owner to the sender of the transaction.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes an accountId from a depositor's deny list.\\\"},\\\"removeAccountsFromAllowlist(bytes32[])\\\":{\\\"notice\\\":\\\"Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be able to signal intents on the user's deposit.\\\"},\\\"setAccountRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutAccountRegistry.sol\\\":\\\"RevolutAccountRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/ramps/revolut/RevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IRevolutAccountRegistrationProcessor } from \\\\\\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\\\\\";\\\\nimport { IRevolutAccountRegistry } from \\\\\\\"./interfaces/IRevolutAccountRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\\\n\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n\\\\n    event AllowlistEnabled(bytes32 listOwner);\\\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\\\n\\\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    struct AllowList {\\\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(isRegisteredUser(msg.sender), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\\\n\\\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\\\n\\\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\\\n                                                                                // resulting hash is the accountId for our system\\\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\\\n     */\\\\n    function initialize(\\\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\\\n     * sender of the transaction.\\\\n     *\\\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\\\n     */\\\\n    function register(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    {\\\\n        require(msg.sender == _proof.public_values.userAddress, \\\\\\\"Caller must be address specified in proof\\\\\\\");\\\\n        require(accounts[msg.sender] == bytes32(0), \\\\\\\"Account already associated with accountId\\\\\\\");\\\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\\\n\\\\n        accounts[msg.sender] = accountId;\\\\n\\\\n        emit AccountRegistered(msg.sender, accountId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   accountId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender];\\\\n\\\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes an accountId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   accountId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender];\\\\n\\\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\\\n     */\\\\n    function enableAllowlist() external onlyRegisteredUser {\\\\n        bytes32 allowingUser = accounts[msg.sender];\\\\n\\\\n        require(!allowList[allowingUser].isEnabled, \\\\\\\"Allow list already enabled\\\\\\\");\\\\n\\\\n        allowList[allowingUser].isEnabled = true;\\\\n\\\\n        emit AllowlistEnabled(allowingUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\\\n     * be able to signal intents on the user's deposit.\\\\n     *\\\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\\\n     */\\\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\\\n        bytes32 allowingUser = accounts[msg.sender];\\\\n\\\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\\\n            bytes32 allowedUser = _allowedUsers[i];\\\\n\\\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\\\\\"User already on allowlist\\\\\\\");\\\\n\\\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\\\n\\\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\\\n     * able to signal intents on the user's deposit.\\\\n     *\\\\n     * @param _disallowedUsers   List of accountIds being approved\\\\n     */\\\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\\\n        bytes32 disallowingUser = accounts[msg.sender];\\\\n\\\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\\\n            bytes32 disallowedUser = _disallowedUsers[i];\\\\n\\\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\\\\\"User not on allowlist\\\\\\\");\\\\n\\\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\\\n\\\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        accountRegistrationProcessor = _registrationProcessor;\\\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getAccountId(address _account) public view returns (bytes32) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function isRegisteredUser(address _account) public view returns (bool) {\\\\n        return getAccountId(_account) != bytes32(0);\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return denyList[getAccountId(_account)].deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\\\n        return allowList[getAccountId(_account)].isEnabled;\\\\n    }\\\\n\\\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return allowList[getAccountId(_account)].allowedUsers;\\\\n    }\\\\n\\\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\\\n        bytes32 allowingUser = getAccountId(_account);\\\\n\\\\n        // Deny list overrides, if user on deny list then they are not allowed\\\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\\\n\\\\n        // Check if allow list is enabled, if so return status of user, else return true\\\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\\\n     * it can't be used again.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        internal\\\\n        returns (bytes32 accountId)\\\\n    {\\\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x686d9b6ae09e5786bb2e18735d5e8a515657f99ca2850e261058fc4ffce3d64c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistrationProcessor {\\\\n\\\\n    struct RegistrationData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string profileId;\\\\n        address userAddress;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct RegistrationProof {\\\\n        RegistrationData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb3e358861c8fb5d7c81c48e3eac4e0f4ce3c03ddfe4136aada9759b61e5e465a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistry {\\\\n    function getAccountId(address _account) external view returns (bytes32);\\\\n    function isRegisteredUser(address _account) external view returns (bool);\\\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5c58e8996f2d06f3d8bad7b3cef912c6370eecb2f3523ff8c1e15ec05dfb8e74\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523480156200001157600080fd5b50604051620015ee380380620015ee833981016040819052620000349162000182565b6200003f3362000051565b6200004a81620000a1565b50620001b4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000ab62000124565b6001600160a01b038116620001165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001218162000051565b50565b6000546001600160a01b03163314620001805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200010d565b565b6000602082840312156200019557600080fd5b81516001600160a01b0381168114620001ad57600080fd5b9392505050565b61142a80620001c46000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063d884524511610071578063d884524514610273578063e0b490f714610286578063e39ca3b4146102a7578063f2fde38b146102ba578063fbf15b1f146102cd57600080fd5b8063715018a61461022c5780638da5cb5b146102345780639b357b5a14610245578063c4d66de814610258578063c6a2aac81461026b57600080fd5b80631f5bdf5d116100f45780631f5bdf5d146101bf5780633056eb28146101d257806338e4bef6146101e5578063392e53cd146101f85780634595bba01461020c57600080fd5b8063066a82fe146101315780630876dda314610146578063148172da146101765780631acd84d8146101895780631e48fe6b146101ac575b600080fd5b61014461013f366004610fe8565b6102e0565b005b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014461018436600461102a565b61042d565b61019c610197366004611058565b61054b565b604051901515815260200161016d565b6101446101ba36600461109a565b6105d1565b61019c6101cd366004611158565b610720565b6101446101e0366004611158565b610734565b61019c6101f3366004611158565b610791565b60015461019c90600160a01b900460ff1681565b61021f61021a366004611158565b6107ba565b60405161016d9190611175565b610144610830565b6000546001600160a01b0316610159565b61014461025336600461102a565b610844565b610144610266366004611158565b610943565b6101446109c2565b61014461028136600461109a565b610aa1565b610299610294366004611158565b610bfc565b60405190815260200161016d565b61021f6102b5366004611158565b610c17565b6101446102c8366004611158565b610c8b565b61019c6102db366004611058565b610d04565b6102ea81806111b9565b6102fb906080810190606001611158565b6001600160a01b0316336001600160a01b0316146103725760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206d7573742062652061646472657373207370656369666965646044820152681034b710383937b7b360b91b60648201526084015b60405180910390fd5b33600090815260026020526040902054156103e15760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152681858d8dbdd5b9d125960ba1b6064820152608401610369565b60006103ec82610d3f565b336000818152600260205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050565b61043633610720565b6104525760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff16156104cc5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610369565b600081815260036020818152604080842086855260018181018452828620805460ff191682179055938352805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061053f9083908590918252602082015260400190565b60405180910390a15050565b60008061055784610bfc565b600081815260036020908152604080832087845260010190915290205490915060ff16156105895760009150506105cb565b60008181526004602052604090205460ff166105a65760016105c7565b600081815260046020908152604080832086845260020190915290205460ff165b9150505b92915050565b6105da33610720565b6105f65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b57600083828151811061062557610625611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff166106975760405162461bcd60e51b8152602060048201526015602482015274155cd95c881b9bdd081bdb88185b1b1bdddb1a5cdd605a1b6044820152606401610369565b6000838152600460208181526040808420858552600281018352908420805460ff1916905592869052526106ce9060010182610db3565b827fe87ba7050133e8b4c8b879f99b3276368eaca3b81f4ea415d9528843a15d8c638260405161070091815260200190565b60405180910390a250806107138161123c565b915050610608565b505050565b60008061072c83610bfc565b141592915050565b61073c610edb565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd4e734c9a89ace3649766f5233487313285fe97ca577c2602beda889ef46dd3906020015b60405180910390a150565b6000600460006107a084610bfc565b815260208101919091526040016000205460ff1692915050565b6060600360006107c984610bfc565b815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020905b815481526020019060010190808311610810575b50505050509050919050565b610838610edb565b6108426000610f35565b565b61084d33610720565b6108695760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff166108d95760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610369565b6000818152600360208181526040808420868552600181018352908420805460ff19169055928490525261090d9083610db3565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161053f565b61094b610edb565b600154600160a01b900460ff161561099b5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610369565b600180546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6109cb33610720565b6109e75760405162461bcd60e51b8152600401610369906111d9565b3360009081526002602090815260408083205480845260049092529091205460ff1615610a565760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f77206c69737420616c726561647920656e61626c65640000000000006044820152606401610369565b60008181526004602052604090819020805460ff19166001179055517f08df0a71ea3e5565a2138936ed06eaba47996a3ccfde2dae1f3edd1164e299d7906107869083815260200190565b610aaa33610720565b610ac65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b576000838281518110610af557610af5611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff1615610b705760405162461bcd60e51b815260206004820152601960248201527f5573657220616c7265616479206f6e20616c6c6f776c697374000000000000006044820152606401610369565b6000838152600460208181526040808420858552600281018352818520805460ff1916600190811790915593835283018054938401815584529220018290555183907f857ce673abc5a303fa8303102f12b42079aa85b97bca15b56428764dd1dec4d290610be19084815260200190565b60405180910390a25080610bf48161123c565b915050610ad8565b6001600160a01b031660009081526002602052604090205490565b606060046000610c2684610bfc565b815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020908154815260200190600101908083116108105750505050509050919050565b610c93610edb565b6001600160a01b038116610cf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610369565b610d0181610f35565b50565b600060036000610d1385610bfc565b81526020808201929092526040908101600090812085825260010190925290205460ff16905092915050565b60015460405163dec965d360e01b81526000916001600160a01b03169063dec965d390610d709085906004016112c4565b6020604051808303816000875af1158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cb91906113b2565b600080610e0f84805480602002602001604051908101604052809291908181526020018280548015610e0457602002820191906000526020600020905b815481526020019060010190808311610df0575b505050505084610f85565b9150915080610e585760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610369565b8354600090610e69906001906113cb565b9050808314610eae57848181548110610e8457610e84611210565b9060005260206000200154858481548110610ea157610ea1611210565b6000918252602090912001555b84805480610ebe57610ebe6113de565b600190038181906000526020600020016000905590555050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610369565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b81811015610fd55784868281518110610fa957610fa9611210565b602002602001015103610fc357925060019150610fe19050565b80610fcd8161123c565b915050610f8e565b50600019600092509250505b9250929050565b600060208284031215610ffa57600080fd5b813567ffffffffffffffff81111561101157600080fd5b82016040818503121561102357600080fd5b9392505050565b60006020828403121561103c57600080fd5b5035919050565b6001600160a01b0381168114610d0157600080fd5b6000806040838503121561106b57600080fd5b823561107681611043565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156110ad57600080fd5b823567ffffffffffffffff808211156110c557600080fd5b818501915085601f8301126110d957600080fd5b8135818111156110eb576110eb611084565b8060051b604051601f19603f8301168101818110858211171561111057611110611084565b60405291825284820192508381018501918883111561112e57600080fd5b938501935b8285101561114c57843584529385019392850192611133565b98975050505050505050565b60006020828403121561116a57600080fd5b813561102381611043565b6020808252825182820181905260009190848201906040850190845b818110156111ad57835183529284019291840191600101611191565b50909695505050505050565b60008235609e198336030181126111cf57600080fd5b9190910192915050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161124e5761124e611226565b5060010190565b6000808335601e1984360301811261126c57600080fd5b830160208101925035905067ffffffffffffffff81111561128c57600080fd5b803603821315610fe157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235609e198436030181126112de57600080fd5b6040602084015283016112f18180611255565b60a060608601526113076101008601828461129b565b9150506113176020830183611255565b605f198087850301608088015261132f84838561129b565b935061133e6040860186611255565b93509150808785030160a08801525061135883838361129b565b92505050606082013561136a81611043565b6001600160a01b031660c0850152608082013560e085015261138f6020860186611255565b858303601f1901604087015292506113a882848361129b565b9695505050505050565b6000602082840312156113c457600080fd5b5051919050565b818103818111156105cb576105cb611226565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204d908448568dee8f178658c3e858dab36e0dff4876b3de68433ba819907de6b964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063d884524511610071578063d884524514610273578063e0b490f714610286578063e39ca3b4146102a7578063f2fde38b146102ba578063fbf15b1f146102cd57600080fd5b8063715018a61461022c5780638da5cb5b146102345780639b357b5a14610245578063c4d66de814610258578063c6a2aac81461026b57600080fd5b80631f5bdf5d116100f45780631f5bdf5d146101bf5780633056eb28146101d257806338e4bef6146101e5578063392e53cd146101f85780634595bba01461020c57600080fd5b8063066a82fe146101315780630876dda314610146578063148172da146101765780631acd84d8146101895780631e48fe6b146101ac575b600080fd5b61014461013f366004610fe8565b6102e0565b005b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014461018436600461102a565b61042d565b61019c610197366004611058565b61054b565b604051901515815260200161016d565b6101446101ba36600461109a565b6105d1565b61019c6101cd366004611158565b610720565b6101446101e0366004611158565b610734565b61019c6101f3366004611158565b610791565b60015461019c90600160a01b900460ff1681565b61021f61021a366004611158565b6107ba565b60405161016d9190611175565b610144610830565b6000546001600160a01b0316610159565b61014461025336600461102a565b610844565b610144610266366004611158565b610943565b6101446109c2565b61014461028136600461109a565b610aa1565b610299610294366004611158565b610bfc565b60405190815260200161016d565b61021f6102b5366004611158565b610c17565b6101446102c8366004611158565b610c8b565b61019c6102db366004611058565b610d04565b6102ea81806111b9565b6102fb906080810190606001611158565b6001600160a01b0316336001600160a01b0316146103725760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206d7573742062652061646472657373207370656369666965646044820152681034b710383937b7b360b91b60648201526084015b60405180910390fd5b33600090815260026020526040902054156103e15760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152681858d8dbdd5b9d125960ba1b6064820152608401610369565b60006103ec82610d3f565b336000818152600260205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050565b61043633610720565b6104525760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff16156104cc5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610369565b600081815260036020818152604080842086855260018181018452828620805460ff191682179055938352805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061053f9083908590918252602082015260400190565b60405180910390a15050565b60008061055784610bfc565b600081815260036020908152604080832087845260010190915290205490915060ff16156105895760009150506105cb565b60008181526004602052604090205460ff166105a65760016105c7565b600081815260046020908152604080832086845260020190915290205460ff165b9150505b92915050565b6105da33610720565b6105f65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b57600083828151811061062557610625611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff166106975760405162461bcd60e51b8152602060048201526015602482015274155cd95c881b9bdd081bdb88185b1b1bdddb1a5cdd605a1b6044820152606401610369565b6000838152600460208181526040808420858552600281018352908420805460ff1916905592869052526106ce9060010182610db3565b827fe87ba7050133e8b4c8b879f99b3276368eaca3b81f4ea415d9528843a15d8c638260405161070091815260200190565b60405180910390a250806107138161123c565b915050610608565b505050565b60008061072c83610bfc565b141592915050565b61073c610edb565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd4e734c9a89ace3649766f5233487313285fe97ca577c2602beda889ef46dd3906020015b60405180910390a150565b6000600460006107a084610bfc565b815260208101919091526040016000205460ff1692915050565b6060600360006107c984610bfc565b815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020905b815481526020019060010190808311610810575b50505050509050919050565b610838610edb565b6108426000610f35565b565b61084d33610720565b6108695760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff166108d95760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610369565b6000818152600360208181526040808420868552600181018352908420805460ff19169055928490525261090d9083610db3565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161053f565b61094b610edb565b600154600160a01b900460ff161561099b5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610369565b600180546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6109cb33610720565b6109e75760405162461bcd60e51b8152600401610369906111d9565b3360009081526002602090815260408083205480845260049092529091205460ff1615610a565760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f77206c69737420616c726561647920656e61626c65640000000000006044820152606401610369565b60008181526004602052604090819020805460ff19166001179055517f08df0a71ea3e5565a2138936ed06eaba47996a3ccfde2dae1f3edd1164e299d7906107869083815260200190565b610aaa33610720565b610ac65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b576000838281518110610af557610af5611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff1615610b705760405162461bcd60e51b815260206004820152601960248201527f5573657220616c7265616479206f6e20616c6c6f776c697374000000000000006044820152606401610369565b6000838152600460208181526040808420858552600281018352818520805460ff1916600190811790915593835283018054938401815584529220018290555183907f857ce673abc5a303fa8303102f12b42079aa85b97bca15b56428764dd1dec4d290610be19084815260200190565b60405180910390a25080610bf48161123c565b915050610ad8565b6001600160a01b031660009081526002602052604090205490565b606060046000610c2684610bfc565b815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020908154815260200190600101908083116108105750505050509050919050565b610c93610edb565b6001600160a01b038116610cf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610369565b610d0181610f35565b50565b600060036000610d1385610bfc565b81526020808201929092526040908101600090812085825260010190925290205460ff16905092915050565b60015460405163dec965d360e01b81526000916001600160a01b03169063dec965d390610d709085906004016112c4565b6020604051808303816000875af1158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cb91906113b2565b600080610e0f84805480602002602001604051908101604052809291908181526020018280548015610e0457602002820191906000526020600020905b815481526020019060010190808311610df0575b505050505084610f85565b9150915080610e585760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610369565b8354600090610e69906001906113cb565b9050808314610eae57848181548110610e8457610e84611210565b9060005260206000200154858481548110610ea157610ea1611210565b6000918252602090912001555b84805480610ebe57610ebe6113de565b600190038181906000526020600020016000905590555050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610369565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b81811015610fd55784868281518110610fa957610fa9611210565b602002602001015103610fc357925060019150610fe19050565b80610fcd8161123c565b915050610f8e565b50600019600092509250505b9250929050565b600060208284031215610ffa57600080fd5b813567ffffffffffffffff81111561101157600080fd5b82016040818503121561102357600080fd5b9392505050565b60006020828403121561103c57600080fd5b5035919050565b6001600160a01b0381168114610d0157600080fd5b6000806040838503121561106b57600080fd5b823561107681611043565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156110ad57600080fd5b823567ffffffffffffffff808211156110c557600080fd5b818501915085601f8301126110d957600080fd5b8135818111156110eb576110eb611084565b8060051b604051601f19603f8301168101818110858211171561111057611110611084565b60405291825284820192508381018501918883111561112e57600080fd5b938501935b8285101561114c57843584529385019392850192611133565b98975050505050505050565b60006020828403121561116a57600080fd5b813561102381611043565b6020808252825182820181905260009190848201906040850190845b818110156111ad57835183529284019291840191600101611191565b50909695505050505050565b60008235609e198336030181126111cf57600080fd5b9190910192915050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161124e5761124e611226565b5060010190565b6000808335601e1984360301811261126c57600080fd5b830160208101925035905067ffffffffffffffff81111561128c57600080fd5b803603821315610fe157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235609e198436030181126112de57600080fd5b6040602084015283016112f18180611255565b60a060608601526113076101008601828461129b565b9150506113176020830183611255565b605f198087850301608088015261132f84838561129b565b935061133e6040860186611255565b93509150808785030160a08801525061135883838361129b565b92505050606082013561136a81611043565b6001600160a01b031660c0850152608082013560e085015261138f6020860186611255565b858303601f1901604087015292506113a882848361129b565b9695505050505050565b6000602082840312156113c457600080fd5b5051919050565b818103818111156105cb576105cb611226565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204d908448568dee8f178658c3e858dab36e0dff4876b3de68433ba819907de6b964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"accountId being banned\"\n        }\n      },\n      \"addAccountsToAllowlist(bytes32[])\": {\n        \"params\": {\n          \"_allowedUsers\": \"List of accountIds allowed to signal intents on the user's deposit\"\n        }\n      },\n      \"initialize(address)\": {\n        \"params\": {\n          \"_accountRegistrationProcessor\": \"Account Registration processor address\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(((string,string,string,address,uint256),bytes))\": {\n        \"params\": {\n          \"_proof\": \"Registration proof consisting of unredacted data being notarized and a signature\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"accountId being approved\"\n        }\n      },\n      \"removeAccountsFromAllowlist(bytes32[])\": {\n        \"params\": {\n          \"_disallowedUsers\": \"List of accountIds being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setAccountRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"addAccountsToAllowlist(bytes32[])\": {\n        \"notice\": \"Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will be able to signal intents on the user's deposit.\"\n      },\n      \"enableAllowlist()\": {\n        \"notice\": \"Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\"\n      },\n      \"initialize(address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"register(((string,string,string,address,uint256),bytes))\": {\n        \"notice\": \"Registers a new account by pulling the profileId from the proof and assigning the account owner to the sender of the transaction.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes an accountId from a depositor's deny list.\"\n      },\n      \"removeAccountsFromAllowlist(bytes32[])\": {\n        \"notice\": \"Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be able to signal intents on the user's deposit.\"\n      },\n      \"setAccountRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 12732,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"accountRegistrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRevolutAccountRegistrationProcessor)15419\"\n      },\n      {\n        \"astId\": 12734,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"1\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 12738,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bytes32)\"\n      },\n      {\n        \"astId\": 12743,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"denyList\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(DenyList)12707_storage)\"\n      },\n      {\n        \"astId\": 12748,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"allowList\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(AllowList)12717_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRevolutAccountRegistrationProcessor)15419\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutAccountRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_bytes32)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bytes32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(AllowList)12717_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutAccountRegistry.AllowList)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AllowList)12717_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(DenyList)12707_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutAccountRegistry.DenyList)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(DenyList)12707_storage\"\n      },\n      \"t_struct(AllowList)12717_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutAccountRegistry.AllowList\",\n        \"members\": [\n          {\n            \"astId\": 12709,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isEnabled\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 12712,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"allowedUsers\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 12716,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isAllowed\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_struct(DenyList)12707_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutAccountRegistry.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 12702,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 12706,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/RevolutRamp.json",
    "content": "{\n  \"address\": \"0x84268621B45C24A7A2A3fb700156B0D5Ac75Ee0b\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRampId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"currencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"accountId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accountRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"revolutTag\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"notaryKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"receiveCurrencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"revolutTag\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"receiveCurrencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHashAsUint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistry\",\n          \"name\": \"_accountRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_revolutTag\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_receiveCurrencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_notaryKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"host\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"transferId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"recipientId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"amount\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"currencyId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"status\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"timestamp\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentHash\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n          \"name\": \"_sendData\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_verifierSignature\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd4f653922a59a21aae36ded56e4236be984ee62c64aea178df1cfa946bc81357\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x84268621B45C24A7A2A3fb700156B0D5Ac75Ee0b\",\n    \"transactionIndex\": 35,\n    \"gasUsed\": \"4065941\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200001000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000\",\n    \"blockHash\": \"0x8567454d7efdebf4c18b2c4b263eb45332c84351cf106eae173c0b9af61991ae\",\n    \"transactionHash\": \"0xd4f653922a59a21aae36ded56e4236be984ee62c64aea178df1cfa946bc81357\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 35,\n        \"blockNumber\": 14219476,\n        \"transactionHash\": \"0xd4f653922a59a21aae36ded56e4236be984ee62c64aea178df1cfa946bc81357\",\n        \"address\": \"0x84268621B45C24A7A2A3fb700156B0D5Ac75Ee0b\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 141,\n        \"blockHash\": \"0x8567454d7efdebf4c18b2c4b263eb45332c84351cf106eae173c0b9af61991ae\"\n      },\n      {\n        \"transactionIndex\": 35,\n        \"blockNumber\": 14219476,\n        \"transactionHash\": \"0xd4f653922a59a21aae36ded56e4236be984ee62c64aea178df1cfa946bc81357\",\n        \"address\": \"0x84268621B45C24A7A2A3fb700156B0D5Ac75Ee0b\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 142,\n        \"blockHash\": \"0x8567454d7efdebf4c18b2c4b263eb45332c84351cf106eae173c0b9af61991ae\"\n      }\n    ],\n    \"blockNumber\": 14219476,\n    \"cumulativeGasUsed\": \"9136071\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"10000000\",\n    \"10000000\",\n    \"180\",\n    \"180\",\n    \"0\",\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRampId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"accountId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"accountRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHashAsUint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistry\\\",\\\"name\\\":\\\"_accountRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"transferId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"recipientId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendData\\\",\\\"name\\\":\\\"_sendData\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_verifierSignature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_accountRegistry\\\":\\\"Account Registry contract for Revolut\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(string,bytes32,uint256,uint256,address,bytes32)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_notaryKeyHash\\\":\\\"Hash of the notary public key that is required to do notarization\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\",\\\"_receiveCurrencyId\\\":\\\"Id of the currency to be received off-chain\\\",\\\"_revolutTag\\\":\\\"Depositor's Revolut tag to receive payments\\\",\\\"_verifierSigningKey\\\":\\\"Public key of the verifier depositor wants to sign the TLS proof\\\"}},\\\"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\\\":{\\\"params\\\":{\\\"_sendData\\\":\\\"Struct containing unredacted data from API call to Revolut\\\",\\\"_verifierSignature\\\":\\\"Signature by verifier of the unredacted data\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(string,bytes32,uint256,uint256,address,bytes32)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutRamp.sol\\\":\\\"RevolutRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/ramps/revolut/RevolutRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IRevolutAccountRegistry } from \\\\\\\"./interfaces/IRevolutAccountRegistry.sol\\\\\\\";\\\\nimport { IRevolutSendProcessor } from \\\\\\\"./interfaces/IRevolutSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed offRampId,\\\\n        bytes32 indexed currencyId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed accountId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        string revolutTag;\\\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _accountRegistry     Account Registry contract for Revolut\\\\n     * @param _sendProcessor       Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRevolutAccountRegistry _accountRegistry,\\\\n        IRevolutSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        accountRegistry = _accountRegistry;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\\\n     * @param _depositAmount        The amount of USDC to off-ramp\\\\n     * @param _receiveAmount        The amount of USD to receive\\\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\\\n     */\\\\n    function offRamp(\\\\n        string calldata _revolutTag,\\\\n        bytes32 _receiveCurrencyId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount,\\\\n        address _verifierSigningKey,\\\\n        bytes32 _notaryKeyHash\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\\\n\\\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\\\\\"Revolut tag must match id\\\\\\\");\\\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        globalAccountInfo.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            revolutTag: _revolutTag,\\\\n            receiveCurrencyId: _receiveCurrencyId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0),\\\\n            verifierSigningKey: _verifierSigningKey,\\\\n            notaryKeyHash: _notaryKeyHash\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n\\\\n        // Caller validity checks\\\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\\\n     */\\\\n    function onRamp(\\\\n        IRevolutSendProcessor.SendData calldata _sendData,\\\\n        bytes calldata _verifierSignature\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\\\n        return uint256(getIdCurrentIntentHash(_account));\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _accountId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        IRevolutSendProcessor.SendData calldata _data,\\\\n        bytes calldata _verifierSignature\\\\n    )\\\\n        internal\\\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\\\n    {\\\\n        intentHash = bytes32(_data.intentHash);\\\\n        intent = intents[intentHash];\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Caller must be the on-ramper\\\\\\\");\\\\n\\\\n        deposit = deposits[intent.deposit];\\\\n\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperId,\\\\n            bytes32 currencyId,\\\\n            bytes32 notaryKeyHash\\\\n        ) = sendProcessor.processProof(\\\\n            IRevolutSendProcessor.SendProof({\\\\n                public_values: _data,\\\\n                proof: _verifierSignature\\\\n            }),\\\\n            deposit.verifierSigningKey\\\\n        );\\\\n\\\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\\\\\"Incorrect notary used for notarization\\\\\\\");\\\\n        require(currencyId == deposit.receiveCurrencyId, \\\\\\\"Wrong currency sent\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x576f519d82b98521832a1ac34c2ec806e438a73ed562e67718920effcf9f9b2b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistry {\\\\n    function getAccountId(address _account) external view returns (bytes32);\\\\n    function isRegisteredUser(address _account) external view returns (bool);\\\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5c58e8996f2d06f3d8bad7b3cef912c6370eecb2f3523ff8c1e15ec05dfb8e74\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutSendProcessor {\\\\n\\\\n    struct SendData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string transferId;\\\\n        string recipientId;\\\\n        string amount;\\\\n        string currencyId;\\\\n        string status;\\\\n        string timestamp;\\\\n        uint256 intentHash;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct SendProof {\\\\n        SendData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6bb42393fe8c5f9ac83fa56e126413638b4a0c110602eecaa70d2b41cf77f1a3\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162004878380380620048788339810160408190526200003491620001dd565b6200003f3362000096565b6001600160a01b038781166080526006879055600786905560098590556008849055600a839055600b80546001600160a01b0319169183169190911790556200008888620000e6565b505050505050505062000263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f062000169565b6001600160a01b0381166200015b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001668162000096565b50565b6000546001600160a01b03163314620001c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000152565b565b6001600160a01b03811681146200016657600080fd5b600080600080600080600080610100898b031215620001fb57600080fd5b88516200020881620001c7565b60208a01519098506200021b81620001c7565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151915060e08901516200025281620001c7565b809150509295985092959890939650565b6080516145dd6200029b600039600081816102e5015281816119b901528181611e6e015281816133af015261345e01526145dd6000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80637113476211610130578063b3c0cfa4116100b8578063e279d9641161007c578063e279d96414610541578063ecb3dc881461054a578063ecd618f014610553578063eea1d19714610573578063f2fde38b1461058657600080fd5b8063b3c0cfa4146104e2578063b3fa4c01146104f5578063d089e11a14610508578063d55f960d1461051b578063d9478d201461052e57600080fd5b80639021578a116100ff5780639021578a146104025780639087beff1461047e5780639f9fb96814610491578063a1a954b7146104b1578063b02c43d0146104ba57600080fd5b806371134762146103c3578063715018a6146103d657806371a28f69146103de5780638da5cb5b146103f157600080fd5b80633e85fc25116101b35780635081d952116101825780635081d952146103615780635d108a22146103815780635dd7651514610394578063645006ca146103a757806366ec8419146103b057600080fd5b80633e85fc251461031f5780634298734914610332578063485cc95514610345578063495223e71461035857600080fd5b80632a80cda3116101fa5780632a80cda314610283578063317dcc9614610296578063392e53cd146102a95780633adba28a146102cd5780633e413bee146102e057600080fd5b80630f1ef98c1461022c578063133de6cb1461025257806314ec32fa14610267578063238c84941461027a575b600080fd5b61023f61023a366004613948565b610599565b6040519081526020015b60405180910390f35b610265610260366004613948565b610628565b005b61023f610275366004613948565b610685565b61023f600a5481565b61026561029136600461396c565b610712565b6102656102a436600461396c565b6107a4565b6002546102bd90600160a01b900460ff1681565b6040519015158152602001610249565b6102656102db366004613985565b6107e1565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b61026561032d3660046139ff565b610ee4565b61026561034036600461396c565b611013565b610265610353366004613a70565b6110b4565b61023f60085481565b61037461036f366004613948565b611147565b6040516102499190613bd1565b61026561038f366004613c5d565b611511565b6102656103a236600461396c565b611a82565b61023f60065481565b6102656103be36600461396c565b611b21565b6102656103d1366004613d49565b611cf0565b610265611ee3565b6103746103ec366004613d49565b611ef7565b6000546001600160a01b0316610307565b61044b61041036600461396c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610249565b61026561048c36600461396c565b6121e9565b6104a461049f36600461396c565b612280565b6040516102499190613dee565b61023f60095481565b6104cd6104c836600461396c565b612411565b60405161024999989796959493929190613e01565b61023f6104f0366004613948565b6124f6565b610265610503366004613948565b612507565b600154610307906001600160a01b031681565b61026561052936600461396c565b6125bf565b600b54610307906001600160a01b031681565b61023f60075481565b61023f600c5481565b610566610561366004613e5f565b6127df565b6040516102499190613ed3565b600254610307906001600160a01b031681565b610265610594366004613948565b6129d6565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f9190613f63565b8152602001908152602001600020600101549050919050565b610630612a4f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190613f63565b815260208101919091526040016000205492915050565b61071a612a4f565b8060000361076f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064015b60405180910390fd5b60068190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161067a565b6107ac612a4f565b60088190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161067a565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190613f7c565b6108995760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613f63565b60008581526004602081905260409182902060015481549351630359b09b60e31b81526001600160a01b039485169381019390935260248301859052939450929190911690631acd84d890604401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190613f7c565b6109e15760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610766565b6008546000838152600360205260409020600101544291610a0191613fb4565b1115610a5b5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610766565b60008281526003602052604090205415610ab75760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610766565b600154815460405163e0b490f760e01b81526001600160a01b0391821660048201528492919091169063e0b490f790602401602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613f63565b03610b775760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610766565b80546001600160a01b0316610bc75760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610766565b60008411610c265760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610766565b600754841115610c955760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610766565b6001600160a01b038316610ceb5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610766565b6000610cf78387612aa9565b90508482600601541015610dac57600080610d1188612b14565b9150915086818560060154610d269190613fb4565b1015610d6b5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610766565b610d758483612cbb565b80846006016000828254610d899190613fb4565b9250508190555080846007016000828254610da49190613fc7565b909155505050505b6040805160a0810182523381526001600160a01b0386811660208084019182528385018b8152606085018b81524260808701908152600089815260058552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558681529152908120829055600683018054879290610e53908490613fc7565b9250508190555084826007016000828254610e6e9190613fb4565b9091555050600982018054600181018255600091825260209182902001829055604080516001600160a01b038716815291820187905242908201528390879083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a4505050505050565b6000806000610ef4868686612d1d565b6040805160a08101825284546001600160a01b039081168252600186015416602082015260028501549181019190915260038401546060820152600490930154608084015291945092509050610f4a828261308c565b8260600151826007016000828254610f629190613fc7565b9091555050600154835160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190613f63565b8152602001908152602001600020600101819055506110018360400151836131d5565b61100b8184613352565b505050505050565b61101b612a4f565b8060000361107f5760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610766565b60098190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161067a565b6110bc612a4f565b600254600160a01b900460ff161561110c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610766565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60015460405163e0b490f760e01b81526001600160a01b0383811660048301526060926000926003928492169063e0b490f790602401602060405180830381865afa15801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190613f63565b815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561121957602002820191906000526020600020905b815481526020019060010190808311611205575b5050505050905080516001600160401b0381111561123957611239613cda565b60405190808252806020026020018201604052801561127257816020015b61125f613800565b8152602001906001900390816112575790505b50915060005b815181101561150a57600082828151811061129557611295613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b0316825260018101805494965092949193909291840191906112e390613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461130f90613ff0565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561141f57602002820191906000526020600020905b81548152602001906001019080831161140b575b5050505050815250509050600061143583612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f63565b8152602001838152602001828460c001516114d69190613fb4565b8152508685815181106114eb576114eb613fda565b60200260200101819052505050508061150390614024565b9050611278565b5050919050565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190613f7c565b6115c95760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190613f63565b9050600060036000838152602001908152602001600020905081898960405160200161166392919061403d565b60405160208183030381529060405280519060200120146116c65760405162461bcd60e51b815260206004820152601960248201527f5265766f6c757420746167206d757374206d61746368206964000000000000006044820152606401610766565b600281015460051161171a5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610766565b60065486101561178b5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610766565b600085116117e95760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610766565b6000856117fe670de0b6b3a76400008961406c565b6118089190614099565b600c8054919250600091908261181d83614024565b9091555060028401805460018101825560009182526020918290200182905560408051610140810182523381528151601f8f018490048402810184019092528d8252929350828201918e908e908190840183828082843760009201829052509385525050506001600160a01b03891660208084019190915260408084018a9052606084018d9052608084018e905260a084018d905260c0840183905260e084018790528051838152918201905261010090920191905090526000828152600460209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061191590826140f3565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e082015160078201556101008201516008820155610120820151805161199591600984019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018a90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2f9190613f7c565b508884827f94c4b6f8843ea372709c89bc4a9ed85ef74ab10a68713ffdddc31716a76a6c958b86604051611a6d929190918252602082015260400190565b60405180910390a45050505050505050505050565b611a8a612a4f565b66b1a2bc2ec50000811115611aec5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610766565b600a8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004938401546080840152865291909352922081519192909116611bc75760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b80546001600160a01b03163314611c205760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b611c2a818461308c565b8160600151816007016000828254611c429190613fc7565b9091555050600154825160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015611c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbe9190613f63565b815260200190815260200160002060010181905550611ce18260400151826131d5565b611ceb8383613352565b505050565b6000805b8251811015611e51576000838281518110611d1157611d11613fda565b6020908102919091018101516000818152600490925260409091208054919250906001600160a01b03163314611d895760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b600080611d9584612b14565b91509150611da38383612cbb565b808360060154611db39190613fb4565b611dbd9087613fb4565b955080836007016000828254611dd39190613fc7565b9091555050825460068401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611e1a908590613fb4565b60405190815260200160405180910390a360006006840155611e3c84846131d5565b5050505080611e4a90614024565b9050611cf4565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190613f7c565b611eeb612a4f565b611ef56000613530565b565b606081516001600160401b03811115611f1257611f12613cda565b604051908082528060200260200182016040528015611f4b57816020015b611f38613800565b815260200190600190039081611f305790505b50905060005b82518110156121e3576000838281518110611f6e57611f6e613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b031682526001810180549496509294919390929184019190611fbc90613ff0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890613ff0565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201548152602001600982018054806020026020016040519081016040528092919081815260200182805480156120f857602002820191906000526020600020905b8154815260200190600101908083116120e4575b5050505050815250509050600061210e83612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015612170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121949190613f63565b8152602001838152602001828460c001516121af9190613fb4565b8152508585815181106121c4576121c4613fda565b6020026020010181905250505050806121dc90614024565b9050611f51565b50919050565b6121f1612a4f565b8060000361224b5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610766565b60078190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161067a565b612288613877565b6000828152600460209081526040918290208251610140810190935280546001600160a01b0316835260018101805491928401916122c590613ff0565b80601f01602080910402602001604051908101604052809291908181526020018280546122f190613ff0565b801561233e5780601f106123135761010080835404028352916020019161233e565b820191906000526020600020905b81548152906001019060200180831161232157829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561240157602002820191906000526020600020905b8154815260200190600101908083116123ed575b5050505050815250509050919050565b600460205260009081526040902080546001820180546001600160a01b03909216929161243d90613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461246990613ff0565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b5050505060028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b03909516969395509193909289565b600061250182610685565b92915050565b61250f612a4f565b6001600160a01b0381166125715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610766565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361265c5760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b60015460405163e0b490f760e01b81523360048201526001600160a01b039091169063e0b490f790602401602060405180830381865afa1580156126a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c89190613f63565b600154825160405163e0b490f760e01b81526001600160a01b03918216600482015291169063e0b490f790602401602060405180830381865afa158015612713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127379190613f63565b146127845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b604080820151600090815260046020522061279f818461308c565b81606001518160060160008282546127b79190613fb4565b909155505060608201516007820180546000906127d5908490613fc7565b9091555050505050565b60606000826001600160401b038111156127fb576127fb613cda565b60405190808252806020026020018201604052801561287557816020015b61286260408051606080820183526000808352835160a0810185528181526020818101839052948101829052918201819052608082015290918201908152600060209091015290565b8152602001906001900390816128195790505b50905060005b838110156129ce57600085858381811061289757612897613fda565b60209081029290920135600081815260058452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061291657612916613fda565b60209081029290920135835250810183905260015483516040805163e0b490f760e01b81526001600160a01b03928316600482015293019291169063e0b490f790602401602060405180830381865afa158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b9190613f63565b8152508484815181106129b0576129b0613fda565b60200260200101819052505050806129c790614024565b905061287b565b509392505050565b6129de612a4f565b6001600160a01b038116612a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610766565b612a4c81613530565b50565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610766565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b0c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826141b2565b949350505050565b60008181526004602090815260408083206009018054825181850281018501909352808352606094938493929190830182828015612b7157602002820191906000526020600020905b815481526020019060010190808311612b5d575b5050505050905080516001600160401b03811115612b9157612b91613cda565b604051908082528060200260200182016040528015612bba578160200160208202803683370190505b50925060005b8151811015612cb457600060056000848481518110612be157612be1613fda565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190526009549192504291612c5491613fb4565b1015612ca357828281518110612c6c57612c6c613fda565b6020026020010151858381518110612c8657612c86613fda565b60209081029190910101526060810151612ca09085613fb4565b93505b50612cad81614024565b9050612bc0565b5050915091565b60005b8151811015611ceb576000801b828281518110612cdd57612cdd613fda565b602002602001015114612d0d57612d0d83838381518110612d0057612d00613fda565b602002602001015161308c565b612d1681614024565b9050612cbe565b610100830135600081815260056020526040812080549092906001600160a01b03163314612d8d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b60028084015460009081526004602052604080822092548151808301909252929450909182918291829182916001600160a01b031690630f2d076d9080612dd38f614235565b81526020018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525060028a01546040516001600160e01b031960e085901b168152612e4092916001600160a01b031690600401614397565b60a0604051808303816000875af1158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8391906144db565b9450945094509450945086600301548114612eef5760405162461bcd60e51b815260206004820152602660248201527f496e636f7272656374206e6f74617279207573656420666f72206e6f746172696044820152653d30ba34b7b760d11b6064820152608401610766565b86600501548214612f385760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c818dd5c9c995b98de481cd95b9d606a1b6044820152606401610766565b8388600401541115612f975760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610766565b8287600101604051602001612fac919061451b565b604051602081830303815290604052805190602001201461300f5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610766565b8660080154670de0b6b3a7640000896003015461302c919061406c565b6130369190614099565b85101561307e5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610766565b505050505093509350939050565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116808352600180850154831696840196909652600284015483860152600380850154606085015260049485015460808501529554945163e0b490f760e01b815293840152909492169063e0b490f790602401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131449190613f63565b8152602080820192909252604090810160009081208190558481526005909252812080546001600160a01b0319908116825560018201805490911690556002810182905560038101829055600401556131a06009840183613580565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816006015482600701546131eb9190613fb4565b905080600003611ceb57600154825460405163e0b490f760e01b81526001600160a01b039182166004820152613291928692600392600092919091169063e0b490f790602401602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132729190613f63565b81526020019081526020016000206002016136a890919063ffffffff16565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260046020526040812080546001600160a01b0319168155906132ff60018301826138ca565b6002820180546001600160a01b0319169055600060038301819055600483018190556005830181905560068301819055600783018190556008830181905561334b906009840190613904565b5050505050565b6000600a5460001461341e57670de0b6b3a7640000600a548360600151613379919061406c565b6133839190614099565b600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613f7c565b505b60008183606001516134309190613fc7565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156134a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cb9190613f7c565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806135dc848054806020026020016040519081016040528092919081815260200182805480156135d157602002820191906000526020600020905b8154815260200190600101908083116135bd575b50505050508461374d565b91509150806136255760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610766565b835460009061363690600190613fc7565b905080831461367b5784818154811061365157613651613fda565b906000526020600020015485848154811061366e5761366e613fda565b6000918252602090912001555b8480548061368b5761368b614591565b600190038181906000526020600020016000905590555050505050565b600080613704848054806020026020016040519081016040528092919081815260200182805480156136f957602002820191906000526020600020905b8154815260200190600101908083116136e5575b5050505050846137b0565b91509150806136255760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610766565b81516000908190815b8181101561379d578486828151811061377157613771613fda565b60200260200101510361378b579250600191506137a99050565b8061379581614024565b915050613756565b50600019600092509250505b9250929050565b81516000908190815b8181101561379d57848682815181106137d4576137d4613fda565b6020026020010151036137ee579250600191506137a99050565b806137f881614024565b9150506137b9565b604080516080810182526000808252602082015290810161381f613877565b8152602001600081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b5061387392915061391e565b5090565b604080516101408101825260008082526060602083018190529282018190528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261012081019190915290565b5080546138d690613ff0565b6000825580601f106138e6575050565b601f016020900490600052602060002090810190612a4c919061391e565b5080546000825590600052602060002090810190612a4c91905b5b80821115613873576000815560010161391f565b6001600160a01b0381168114612a4c57600080fd5b60006020828403121561395a57600080fd5b813561396581613933565b9392505050565b60006020828403121561397e57600080fd5b5035919050565b60008060006060848603121561399a57600080fd5b833592506020840135915060408401356139b381613933565b809150509250925092565b60008083601f8401126139d057600080fd5b5081356001600160401b038111156139e757600080fd5b6020830191508360208285010111156137a957600080fd5b600080600060408486031215613a1457600080fd5b83356001600160401b0380821115613a2b57600080fd5b908501906101408288031215613a4057600080fd5b90935060208501359080821115613a5657600080fd5b50613a63868287016139be565b9497909650939450505050565b60008060408385031215613a8357600080fd5b8235613a8e81613933565b91506020830135613a9e81613933565b809150509250929050565b6000815180845260005b81811015613acf57602081850181015186830182015201613ab3565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613b1f57815187529582019590820190600101613b03565b509495945050505050565b80516001600160a01b0316825260006101406020830151816020860152613b5382860182613aa9565b9150506040830151613b7060408601826001600160a01b03169052565b50606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015185830382870152613bc78382613aef565b9695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613c4f57603f1989840301855281516080815185528882015189860152878201518189870152613c2e82870182613b2a565b60609384015196909301959095525094870194925090860190600101613bf8565b509098975050505050505050565b600080600080600080600060c0888a031215613c7857600080fd5b87356001600160401b03811115613c8e57600080fd5b613c9a8a828b016139be565b9098509650506020880135945060408801359350606088013592506080880135613cc381613933565b8092505060a0880135905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613d1357613d13613cda565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613d4157613d41613cda565b604052919050565b60006020808385031215613d5c57600080fd5b82356001600160401b0380821115613d7357600080fd5b818501915085601f830112613d8757600080fd5b813581811115613d9957613d99613cda565b8060051b9150613daa848301613d19565b8181529183018401918481019088841115613dc457600080fd5b938501935b83851015613de257843582529385019390850190613dc9565b98975050505050505050565b6020815260006139656020830184613b2a565b6001600160a01b038a8116825261012060208301819052600091613e278483018d613aa9565b9a16604084015250506060810196909652608086019490945260a085019290925260c084015260e08301526101009091015292915050565b60008060208385031215613e7257600080fd5b82356001600160401b0380821115613e8957600080fd5b818501915085601f830112613e9d57600080fd5b813581811115613eac57600080fd5b8660208260051b8501011115613ec157600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613f56578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613ef0565b5091979650505050505050565b600060208284031215613f7557600080fd5b5051919050565b600060208284031215613f8e57600080fd5b8151801515811461396557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561250157612501613f9e565b8181038181111561250157612501613f9e565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061400457607f821691505b6020821081036121e357634e487b7160e01b600052602260045260246000fd5b60006001820161403657614036613f9e565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b808202811582820484141761250157612501613f9e565b634e487b7160e01b600052601260045260246000fd5b6000826140a8576140a8614083565b500490565b601f821115611ceb57600081815260208120601f850160051c810160208610156140d45750805b601f850160051c820191505b8181101561100b578281556001016140e0565b81516001600160401b0381111561410c5761410c613cda565b6141208161411a8454613ff0565b846140ad565b602080601f831160018114614155576000841561413d5750858301515b600019600386901b1c1916600185901b17855561100b565b600085815260208120601f198616915b8281101561418457888601518255948401946001909101908401614165565b50858210156141a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826141c1576141c1614083565b500690565b600082601f8301126141d757600080fd5b81356001600160401b038111156141f0576141f0613cda565b614203601f8201601f1916602001613d19565b81815284602083860101111561421857600080fd5b816020850160208301376000918101602001919091529392505050565b6000610140823603121561424857600080fd5b614250613cf0565b82356001600160401b038082111561426757600080fd5b614273368387016141c6565b8352602085013591508082111561428957600080fd5b614295368387016141c6565b602084015260408501359150808211156142ae57600080fd5b6142ba368387016141c6565b604084015260608501359150808211156142d357600080fd5b6142df368387016141c6565b606084015260808501359150808211156142f857600080fd5b614304368387016141c6565b608084015260a085013591508082111561431d57600080fd5b614329368387016141c6565b60a084015260c085013591508082111561434257600080fd5b61434e368387016141c6565b60c084015260e085013591508082111561436757600080fd5b50614374368286016141c6565b60e083015250610100838101359082015261012092830135928101929092525090565b604081526000835160408084015280516101408060808601526143be6101c0860183613aa9565b91506020830151607f19808785030160a08801526143dc8483613aa9565b935060408501519150808785030160c08801526143f98483613aa9565b935060608501519150808785030160e08801526144168483613aa9565b9350608085015191506101008188860301818901526144358584613aa9565b945060a086015192506101208289870301818a01526144548685613aa9565b955060c087015193508289870301858a01526144708685613aa9565b955060e0870151945082898703016101608a015261448e8686613aa9565b918701516101808a0152909501516101a0880152505050506020850151838203603f19016060850152906144c28183613aa9565b9250505061396560208301846001600160a01b03169052565b600080600080600060a086880312156144f357600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600080835461452981613ff0565b60018281168015614541576001811461455657614585565b60ff1984168752821515830287019450614585565b8760005260208060002060005b8581101561457c5781548a820152908401908201614563565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200c1dd6603fe23e3215869ddb17de6764c2212ab6a689276b98bc4ec806c8a8df64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106102275760003560e01c80637113476211610130578063b3c0cfa4116100b8578063e279d9641161007c578063e279d96414610541578063ecb3dc881461054a578063ecd618f014610553578063eea1d19714610573578063f2fde38b1461058657600080fd5b8063b3c0cfa4146104e2578063b3fa4c01146104f5578063d089e11a14610508578063d55f960d1461051b578063d9478d201461052e57600080fd5b80639021578a116100ff5780639021578a146104025780639087beff1461047e5780639f9fb96814610491578063a1a954b7146104b1578063b02c43d0146104ba57600080fd5b806371134762146103c3578063715018a6146103d657806371a28f69146103de5780638da5cb5b146103f157600080fd5b80633e85fc25116101b35780635081d952116101825780635081d952146103615780635d108a22146103815780635dd7651514610394578063645006ca146103a757806366ec8419146103b057600080fd5b80633e85fc251461031f5780634298734914610332578063485cc95514610345578063495223e71461035857600080fd5b80632a80cda3116101fa5780632a80cda314610283578063317dcc9614610296578063392e53cd146102a95780633adba28a146102cd5780633e413bee146102e057600080fd5b80630f1ef98c1461022c578063133de6cb1461025257806314ec32fa14610267578063238c84941461027a575b600080fd5b61023f61023a366004613948565b610599565b6040519081526020015b60405180910390f35b610265610260366004613948565b610628565b005b61023f610275366004613948565b610685565b61023f600a5481565b61026561029136600461396c565b610712565b6102656102a436600461396c565b6107a4565b6002546102bd90600160a01b900460ff1681565b6040519015158152602001610249565b6102656102db366004613985565b6107e1565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b61026561032d3660046139ff565b610ee4565b61026561034036600461396c565b611013565b610265610353366004613a70565b6110b4565b61023f60085481565b61037461036f366004613948565b611147565b6040516102499190613bd1565b61026561038f366004613c5d565b611511565b6102656103a236600461396c565b611a82565b61023f60065481565b6102656103be36600461396c565b611b21565b6102656103d1366004613d49565b611cf0565b610265611ee3565b6103746103ec366004613d49565b611ef7565b6000546001600160a01b0316610307565b61044b61041036600461396c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610249565b61026561048c36600461396c565b6121e9565b6104a461049f36600461396c565b612280565b6040516102499190613dee565b61023f60095481565b6104cd6104c836600461396c565b612411565b60405161024999989796959493929190613e01565b61023f6104f0366004613948565b6124f6565b610265610503366004613948565b612507565b600154610307906001600160a01b031681565b61026561052936600461396c565b6125bf565b600b54610307906001600160a01b031681565b61023f60075481565b61023f600c5481565b610566610561366004613e5f565b6127df565b6040516102499190613ed3565b600254610307906001600160a01b031681565b610265610594366004613948565b6129d6565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f9190613f63565b8152602001908152602001600020600101549050919050565b610630612a4f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190613f63565b815260208101919091526040016000205492915050565b61071a612a4f565b8060000361076f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064015b60405180910390fd5b60068190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161067a565b6107ac612a4f565b60088190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161067a565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190613f7c565b6108995760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613f63565b60008581526004602081905260409182902060015481549351630359b09b60e31b81526001600160a01b039485169381019390935260248301859052939450929190911690631acd84d890604401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190613f7c565b6109e15760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610766565b6008546000838152600360205260409020600101544291610a0191613fb4565b1115610a5b5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610766565b60008281526003602052604090205415610ab75760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610766565b600154815460405163e0b490f760e01b81526001600160a01b0391821660048201528492919091169063e0b490f790602401602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613f63565b03610b775760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610766565b80546001600160a01b0316610bc75760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610766565b60008411610c265760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610766565b600754841115610c955760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610766565b6001600160a01b038316610ceb5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610766565b6000610cf78387612aa9565b90508482600601541015610dac57600080610d1188612b14565b9150915086818560060154610d269190613fb4565b1015610d6b5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610766565b610d758483612cbb565b80846006016000828254610d899190613fb4565b9250508190555080846007016000828254610da49190613fc7565b909155505050505b6040805160a0810182523381526001600160a01b0386811660208084019182528385018b8152606085018b81524260808701908152600089815260058552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558681529152908120829055600683018054879290610e53908490613fc7565b9250508190555084826007016000828254610e6e9190613fb4565b9091555050600982018054600181018255600091825260209182902001829055604080516001600160a01b038716815291820187905242908201528390879083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a4505050505050565b6000806000610ef4868686612d1d565b6040805160a08101825284546001600160a01b039081168252600186015416602082015260028501549181019190915260038401546060820152600490930154608084015291945092509050610f4a828261308c565b8260600151826007016000828254610f629190613fc7565b9091555050600154835160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190613f63565b8152602001908152602001600020600101819055506110018360400151836131d5565b61100b8184613352565b505050505050565b61101b612a4f565b8060000361107f5760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610766565b60098190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161067a565b6110bc612a4f565b600254600160a01b900460ff161561110c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610766565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60015460405163e0b490f760e01b81526001600160a01b0383811660048301526060926000926003928492169063e0b490f790602401602060405180830381865afa15801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190613f63565b815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561121957602002820191906000526020600020905b815481526020019060010190808311611205575b5050505050905080516001600160401b0381111561123957611239613cda565b60405190808252806020026020018201604052801561127257816020015b61125f613800565b8152602001906001900390816112575790505b50915060005b815181101561150a57600082828151811061129557611295613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b0316825260018101805494965092949193909291840191906112e390613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461130f90613ff0565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561141f57602002820191906000526020600020905b81548152602001906001019080831161140b575b5050505050815250509050600061143583612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f63565b8152602001838152602001828460c001516114d69190613fb4565b8152508685815181106114eb576114eb613fda565b60200260200101819052505050508061150390614024565b9050611278565b5050919050565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190613f7c565b6115c95760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190613f63565b9050600060036000838152602001908152602001600020905081898960405160200161166392919061403d565b60405160208183030381529060405280519060200120146116c65760405162461bcd60e51b815260206004820152601960248201527f5265766f6c757420746167206d757374206d61746368206964000000000000006044820152606401610766565b600281015460051161171a5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610766565b60065486101561178b5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610766565b600085116117e95760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610766565b6000856117fe670de0b6b3a76400008961406c565b6118089190614099565b600c8054919250600091908261181d83614024565b9091555060028401805460018101825560009182526020918290200182905560408051610140810182523381528151601f8f018490048402810184019092528d8252929350828201918e908e908190840183828082843760009201829052509385525050506001600160a01b03891660208084019190915260408084018a9052606084018d9052608084018e905260a084018d905260c0840183905260e084018790528051838152918201905261010090920191905090526000828152600460209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061191590826140f3565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e082015160078201556101008201516008820155610120820151805161199591600984019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018a90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2f9190613f7c565b508884827f94c4b6f8843ea372709c89bc4a9ed85ef74ab10a68713ffdddc31716a76a6c958b86604051611a6d929190918252602082015260400190565b60405180910390a45050505050505050505050565b611a8a612a4f565b66b1a2bc2ec50000811115611aec5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610766565b600a8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004938401546080840152865291909352922081519192909116611bc75760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b80546001600160a01b03163314611c205760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b611c2a818461308c565b8160600151816007016000828254611c429190613fc7565b9091555050600154825160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015611c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbe9190613f63565b815260200190815260200160002060010181905550611ce18260400151826131d5565b611ceb8383613352565b505050565b6000805b8251811015611e51576000838281518110611d1157611d11613fda565b6020908102919091018101516000818152600490925260409091208054919250906001600160a01b03163314611d895760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b600080611d9584612b14565b91509150611da38383612cbb565b808360060154611db39190613fb4565b611dbd9087613fb4565b955080836007016000828254611dd39190613fc7565b9091555050825460068401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611e1a908590613fb4565b60405190815260200160405180910390a360006006840155611e3c84846131d5565b5050505080611e4a90614024565b9050611cf4565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190613f7c565b611eeb612a4f565b611ef56000613530565b565b606081516001600160401b03811115611f1257611f12613cda565b604051908082528060200260200182016040528015611f4b57816020015b611f38613800565b815260200190600190039081611f305790505b50905060005b82518110156121e3576000838281518110611f6e57611f6e613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b031682526001810180549496509294919390929184019190611fbc90613ff0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890613ff0565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201548152602001600982018054806020026020016040519081016040528092919081815260200182805480156120f857602002820191906000526020600020905b8154815260200190600101908083116120e4575b5050505050815250509050600061210e83612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015612170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121949190613f63565b8152602001838152602001828460c001516121af9190613fb4565b8152508585815181106121c4576121c4613fda565b6020026020010181905250505050806121dc90614024565b9050611f51565b50919050565b6121f1612a4f565b8060000361224b5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610766565b60078190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161067a565b612288613877565b6000828152600460209081526040918290208251610140810190935280546001600160a01b0316835260018101805491928401916122c590613ff0565b80601f01602080910402602001604051908101604052809291908181526020018280546122f190613ff0565b801561233e5780601f106123135761010080835404028352916020019161233e565b820191906000526020600020905b81548152906001019060200180831161232157829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561240157602002820191906000526020600020905b8154815260200190600101908083116123ed575b5050505050815250509050919050565b600460205260009081526040902080546001820180546001600160a01b03909216929161243d90613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461246990613ff0565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b5050505060028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b03909516969395509193909289565b600061250182610685565b92915050565b61250f612a4f565b6001600160a01b0381166125715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610766565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361265c5760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b60015460405163e0b490f760e01b81523360048201526001600160a01b039091169063e0b490f790602401602060405180830381865afa1580156126a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c89190613f63565b600154825160405163e0b490f760e01b81526001600160a01b03918216600482015291169063e0b490f790602401602060405180830381865afa158015612713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127379190613f63565b146127845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b604080820151600090815260046020522061279f818461308c565b81606001518160060160008282546127b79190613fb4565b909155505060608201516007820180546000906127d5908490613fc7565b9091555050505050565b60606000826001600160401b038111156127fb576127fb613cda565b60405190808252806020026020018201604052801561287557816020015b61286260408051606080820183526000808352835160a0810185528181526020818101839052948101829052918201819052608082015290918201908152600060209091015290565b8152602001906001900390816128195790505b50905060005b838110156129ce57600085858381811061289757612897613fda565b60209081029290920135600081815260058452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061291657612916613fda565b60209081029290920135835250810183905260015483516040805163e0b490f760e01b81526001600160a01b03928316600482015293019291169063e0b490f790602401602060405180830381865afa158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b9190613f63565b8152508484815181106129b0576129b0613fda565b60200260200101819052505050806129c790614024565b905061287b565b509392505050565b6129de612a4f565b6001600160a01b038116612a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610766565b612a4c81613530565b50565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610766565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b0c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826141b2565b949350505050565b60008181526004602090815260408083206009018054825181850281018501909352808352606094938493929190830182828015612b7157602002820191906000526020600020905b815481526020019060010190808311612b5d575b5050505050905080516001600160401b03811115612b9157612b91613cda565b604051908082528060200260200182016040528015612bba578160200160208202803683370190505b50925060005b8151811015612cb457600060056000848481518110612be157612be1613fda565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190526009549192504291612c5491613fb4565b1015612ca357828281518110612c6c57612c6c613fda565b6020026020010151858381518110612c8657612c86613fda565b60209081029190910101526060810151612ca09085613fb4565b93505b50612cad81614024565b9050612bc0565b5050915091565b60005b8151811015611ceb576000801b828281518110612cdd57612cdd613fda565b602002602001015114612d0d57612d0d83838381518110612d0057612d00613fda565b602002602001015161308c565b612d1681614024565b9050612cbe565b610100830135600081815260056020526040812080549092906001600160a01b03163314612d8d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b60028084015460009081526004602052604080822092548151808301909252929450909182918291829182916001600160a01b031690630f2d076d9080612dd38f614235565b81526020018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525060028a01546040516001600160e01b031960e085901b168152612e4092916001600160a01b031690600401614397565b60a0604051808303816000875af1158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8391906144db565b9450945094509450945086600301548114612eef5760405162461bcd60e51b815260206004820152602660248201527f496e636f7272656374206e6f74617279207573656420666f72206e6f746172696044820152653d30ba34b7b760d11b6064820152608401610766565b86600501548214612f385760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c818dd5c9c995b98de481cd95b9d606a1b6044820152606401610766565b8388600401541115612f975760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610766565b8287600101604051602001612fac919061451b565b604051602081830303815290604052805190602001201461300f5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610766565b8660080154670de0b6b3a7640000896003015461302c919061406c565b6130369190614099565b85101561307e5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610766565b505050505093509350939050565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116808352600180850154831696840196909652600284015483860152600380850154606085015260049485015460808501529554945163e0b490f760e01b815293840152909492169063e0b490f790602401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131449190613f63565b8152602080820192909252604090810160009081208190558481526005909252812080546001600160a01b0319908116825560018201805490911690556002810182905560038101829055600401556131a06009840183613580565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816006015482600701546131eb9190613fb4565b905080600003611ceb57600154825460405163e0b490f760e01b81526001600160a01b039182166004820152613291928692600392600092919091169063e0b490f790602401602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132729190613f63565b81526020019081526020016000206002016136a890919063ffffffff16565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260046020526040812080546001600160a01b0319168155906132ff60018301826138ca565b6002820180546001600160a01b0319169055600060038301819055600483018190556005830181905560068301819055600783018190556008830181905561334b906009840190613904565b5050505050565b6000600a5460001461341e57670de0b6b3a7640000600a548360600151613379919061406c565b6133839190614099565b600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613f7c565b505b60008183606001516134309190613fc7565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156134a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cb9190613f7c565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806135dc848054806020026020016040519081016040528092919081815260200182805480156135d157602002820191906000526020600020905b8154815260200190600101908083116135bd575b50505050508461374d565b91509150806136255760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610766565b835460009061363690600190613fc7565b905080831461367b5784818154811061365157613651613fda565b906000526020600020015485848154811061366e5761366e613fda565b6000918252602090912001555b8480548061368b5761368b614591565b600190038181906000526020600020016000905590555050505050565b600080613704848054806020026020016040519081016040528092919081815260200182805480156136f957602002820191906000526020600020905b8154815260200190600101908083116136e5575b5050505050846137b0565b91509150806136255760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610766565b81516000908190815b8181101561379d578486828151811061377157613771613fda565b60200260200101510361378b579250600191506137a99050565b8061379581614024565b915050613756565b50600019600092509250505b9250929050565b81516000908190815b8181101561379d57848682815181106137d4576137d4613fda565b6020026020010151036137ee579250600191506137a99050565b806137f881614024565b9150506137b9565b604080516080810182526000808252602082015290810161381f613877565b8152602001600081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b5061387392915061391e565b5090565b604080516101408101825260008082526060602083018190529282018190528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261012081019190915290565b5080546138d690613ff0565b6000825580601f106138e6575050565b601f016020900490600052602060002090810190612a4c919061391e565b5080546000825590600052602060002090810190612a4c91905b5b80821115613873576000815560010161391f565b6001600160a01b0381168114612a4c57600080fd5b60006020828403121561395a57600080fd5b813561396581613933565b9392505050565b60006020828403121561397e57600080fd5b5035919050565b60008060006060848603121561399a57600080fd5b833592506020840135915060408401356139b381613933565b809150509250925092565b60008083601f8401126139d057600080fd5b5081356001600160401b038111156139e757600080fd5b6020830191508360208285010111156137a957600080fd5b600080600060408486031215613a1457600080fd5b83356001600160401b0380821115613a2b57600080fd5b908501906101408288031215613a4057600080fd5b90935060208501359080821115613a5657600080fd5b50613a63868287016139be565b9497909650939450505050565b60008060408385031215613a8357600080fd5b8235613a8e81613933565b91506020830135613a9e81613933565b809150509250929050565b6000815180845260005b81811015613acf57602081850181015186830182015201613ab3565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613b1f57815187529582019590820190600101613b03565b509495945050505050565b80516001600160a01b0316825260006101406020830151816020860152613b5382860182613aa9565b9150506040830151613b7060408601826001600160a01b03169052565b50606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015185830382870152613bc78382613aef565b9695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613c4f57603f1989840301855281516080815185528882015189860152878201518189870152613c2e82870182613b2a565b60609384015196909301959095525094870194925090860190600101613bf8565b509098975050505050505050565b600080600080600080600060c0888a031215613c7857600080fd5b87356001600160401b03811115613c8e57600080fd5b613c9a8a828b016139be565b9098509650506020880135945060408801359350606088013592506080880135613cc381613933565b8092505060a0880135905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613d1357613d13613cda565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613d4157613d41613cda565b604052919050565b60006020808385031215613d5c57600080fd5b82356001600160401b0380821115613d7357600080fd5b818501915085601f830112613d8757600080fd5b813581811115613d9957613d99613cda565b8060051b9150613daa848301613d19565b8181529183018401918481019088841115613dc457600080fd5b938501935b83851015613de257843582529385019390850190613dc9565b98975050505050505050565b6020815260006139656020830184613b2a565b6001600160a01b038a8116825261012060208301819052600091613e278483018d613aa9565b9a16604084015250506060810196909652608086019490945260a085019290925260c084015260e08301526101009091015292915050565b60008060208385031215613e7257600080fd5b82356001600160401b0380821115613e8957600080fd5b818501915085601f830112613e9d57600080fd5b813581811115613eac57600080fd5b8660208260051b8501011115613ec157600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613f56578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613ef0565b5091979650505050505050565b600060208284031215613f7557600080fd5b5051919050565b600060208284031215613f8e57600080fd5b8151801515811461396557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561250157612501613f9e565b8181038181111561250157612501613f9e565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061400457607f821691505b6020821081036121e357634e487b7160e01b600052602260045260246000fd5b60006001820161403657614036613f9e565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b808202811582820484141761250157612501613f9e565b634e487b7160e01b600052601260045260246000fd5b6000826140a8576140a8614083565b500490565b601f821115611ceb57600081815260208120601f850160051c810160208610156140d45750805b601f850160051c820191505b8181101561100b578281556001016140e0565b81516001600160401b0381111561410c5761410c613cda565b6141208161411a8454613ff0565b846140ad565b602080601f831160018114614155576000841561413d5750858301515b600019600386901b1c1916600185901b17855561100b565b600085815260208120601f198616915b8281101561418457888601518255948401946001909101908401614165565b50858210156141a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826141c1576141c1614083565b500690565b600082601f8301126141d757600080fd5b81356001600160401b038111156141f0576141f0613cda565b614203601f8201601f1916602001613d19565b81815284602083860101111561421857600080fd5b816020850160208301376000918101602001919091529392505050565b6000610140823603121561424857600080fd5b614250613cf0565b82356001600160401b038082111561426757600080fd5b614273368387016141c6565b8352602085013591508082111561428957600080fd5b614295368387016141c6565b602084015260408501359150808211156142ae57600080fd5b6142ba368387016141c6565b604084015260608501359150808211156142d357600080fd5b6142df368387016141c6565b606084015260808501359150808211156142f857600080fd5b614304368387016141c6565b608084015260a085013591508082111561431d57600080fd5b614329368387016141c6565b60a084015260c085013591508082111561434257600080fd5b61434e368387016141c6565b60c084015260e085013591508082111561436757600080fd5b50614374368286016141c6565b60e083015250610100838101359082015261012092830135928101929092525090565b604081526000835160408084015280516101408060808601526143be6101c0860183613aa9565b91506020830151607f19808785030160a08801526143dc8483613aa9565b935060408501519150808785030160c08801526143f98483613aa9565b935060608501519150808785030160e08801526144168483613aa9565b9350608085015191506101008188860301818901526144358584613aa9565b945060a086015192506101208289870301818a01526144548685613aa9565b955060c087015193508289870301858a01526144708685613aa9565b955060e0870151945082898703016101608a015261448e8686613aa9565b918701516101808a0152909501516101a0880152505050506020850151838203603f19016060850152906144c28183613aa9565b9250505061396560208301846001600160a01b03169052565b600080600080600060a086880312156144f357600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600080835461452981613ff0565b60018281168015614541576001811461455657614585565b60ff1984168752821515830287019450614585565b8760005260208060002060005b8581101561457c5781548a820152908401908201614563565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200c1dd6603fe23e3215869ddb17de6764c2212ab6a689276b98bc4ec806c8a8df64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_accountRegistry\": \"Account Registry contract for Revolut\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(string,bytes32,uint256,uint256,address,bytes32)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_notaryKeyHash\": \"Hash of the notary public key that is required to do notarization\",\n          \"_receiveAmount\": \"The amount of USD to receive\",\n          \"_receiveCurrencyId\": \"Id of the currency to be received off-chain\",\n          \"_revolutTag\": \"Depositor's Revolut tag to receive payments\",\n          \"_verifierSigningKey\": \"Public key of the verifier depositor wants to sign the TLS proof\"\n        }\n      },\n      \"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\": {\n        \"params\": {\n          \"_sendData\": \"Struct containing unredacted data from API call to Revolut\",\n          \"_verifierSignature\": \"Signature by verifier of the unredacted data\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(string,bytes32,uint256,uint256,address,bytes32)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 13477,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"accountRegistry\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRevolutAccountRegistry)15445\"\n      },\n      {\n        \"astId\": 13480,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IRevolutSendProcessor)15493\"\n      },\n      {\n        \"astId\": 13482,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 13487,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)13446_storage)\"\n      },\n      {\n        \"astId\": 13492,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)13409_storage)\"\n      },\n      {\n        \"astId\": 13497,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)13430_storage)\"\n      },\n      {\n        \"astId\": 13499,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13501,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13503,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13505,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13507,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13509,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 13511,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRevolutAccountRegistry)15445\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutAccountRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IRevolutSendProcessor)15493\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)13446_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)13446_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)13430_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)13430_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)13409_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct RevolutRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)13409_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Deposit)13409_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 13389,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13391,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"revolutTag\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 13393,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"verifierSigningKey\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13395,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"notaryKeyHash\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13397,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13399,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"receiveCurrencyId\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13401,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13403,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13405,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13408,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"320\"\n      },\n      \"t_struct(GlobalAccountInfo)13446_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 13440,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13442,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13445,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_struct(Intent)13430_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 13421,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13423,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13425,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13427,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13429,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/RevolutSendProcessor.json",
    "content": "{\n  \"address\": \"0xC2039e46f59cAC1ddC9a045563946A08D58d6f6A\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_endpoint\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_host\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PAYMENT_STATUS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"endpoint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"host\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"transferId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"recipientId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"amount\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"currencyId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"status\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"timestamp\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"currencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"notaryKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x091755764ae556aaefe9c4224dd730e91503b361db921587617522ba7c7e890f\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xC2039e46f59cAC1ddC9a045563946A08D58d6f6A\",\n    \"transactionIndex\": 20,\n    \"gasUsed\": \"1724801\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000008000000000800000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xb44c16088de980b0a7c62013ea50c215d0a5b66202ad67d220bba1b863d2f3f0\",\n    \"transactionHash\": \"0x091755764ae556aaefe9c4224dd730e91503b361db921587617522ba7c7e890f\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 20,\n        \"blockNumber\": 14219485,\n        \"transactionHash\": \"0x091755764ae556aaefe9c4224dd730e91503b361db921587617522ba7c7e890f\",\n        \"address\": \"0xC2039e46f59cAC1ddC9a045563946A08D58d6f6A\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 76,\n        \"blockHash\": \"0xb44c16088de980b0a7c62013ea50c215d0a5b66202ad67d220bba1b863d2f3f0\"\n      }\n    ],\n    \"blockNumber\": 14219485,\n    \"cumulativeGasUsed\": \"5016179\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x84268621B45C24A7A2A3fb700156B0D5Ac75Ee0b\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"30\",\n    \"GET https://app.revolut.com/api/retail/transaction/*\",\n    \"app.revolut.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_host\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PAYMENT_STATUS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"endpoint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"host\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"transferId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"recipientId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated TLS calls\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutSendProcessor.sol\\\":\\\"RevolutSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/TLSBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TLSBaseProcessor is Ownable {\\\\n\\\\n    using SignatureChecker for address;\\\\n    using ECDSA for bytes32;\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    string public endpoint;\\\\n    string public host;\\\\n\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        endpoint = _endpoint;\\\\n        host = _host;\\\\n\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateTLSEndpoint(\\\\n        string memory _expectedEndpoint,\\\\n        string memory _passedEndpoint\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\\\n            \\\\\\\"Endpoint does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateTLSHost(\\\\n        string memory _expectedHost,\\\\n        string memory _passedHost\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\\\n            \\\\\\\"Host does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n\\\\n    function _isValidSignature(\\\\n        bytes memory _message,\\\\n        bytes memory _signature,\\\\n        address _signer\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\\\n\\\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x366ab1cc4ebfdb4ba68fdb43b902676e67e7760ae1987e4252e5839e8370a6c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/RevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRevolutSendProcessor } from \\\\\\\"./interfaces/IRevolutSendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TLSBaseProcessor } from \\\\\\\"../../processors/TLSBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\\\n\\\\n    using ECDSA for bytes32;\\\\n    using SignatureChecker for address;\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\\\\\"COMPLETED\\\\\\\"));\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        TLSBaseProcessor(\\\\n            _ramp,\\\\n            _nullifierRegistry,\\\\n            _timestampBuffer,\\\\n            _endpoint,\\\\n            _host\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IRevolutSendProcessor.SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperId,\\\\n            bytes32 currencyId,\\\\n            bytes32 notaryKeyHash\\\\n        )\\\\n    {\\\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\\\n\\\\n        _validateTLSEndpoint(\\\\n            endpoint.replaceString(\\\\\\\"*\\\\\\\", _proof.public_values.transferId),\\\\n            _proof.public_values.endpoint\\\\n        );\\\\n        _validateTLSHost(host, _proof.public_values.host);\\\\n        \\\\n        // Validate status\\\\n        require(\\\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\\\n            \\\\\\\"Payment status not confirmed as sent\\\\\\\"\\\\n        );\\\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\\\\\"Revolut\\\\\\\", _proof.public_values.transferId)));\\\\n\\\\n        amount = _parseAmount(_proof.public_values.amount);\\\\n\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\\\n\\\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function verifyProof(\\\\n        address _verifierSigningKey,\\\\n        IRevolutSendProcessor.SendData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {   \\\\n        bytes memory encodedMessage = abi.encode(\\\\n            _publicValues.endpoint,\\\\n            _publicValues.host,\\\\n            _publicValues.transferId,\\\\n            _publicValues.recipientId,\\\\n            _publicValues.amount,\\\\n            _publicValues.currencyId,\\\\n            _publicValues.status,\\\\n            _publicValues.timestamp,\\\\n            _publicValues.intentHash,\\\\n            _publicValues.notaryKeyHash\\\\n        );\\\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProof(\\\\n        address _verifierSigningKey,\\\\n        IRevolutSendProcessor.SendData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n    {   \\\\n        require(\\\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\\\n            \\\\\\\"Invalid proof\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\\\n        // it would be a receive transaction\\\\n        require(bytes(amount)[0] == 0x2D, \\\\\\\"Not a send transaction\\\\\\\");   \\\\n        return amount.stringToUint(6);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x12ec921517e7364323e67c11d38da7e712b63c65a7cfb91f68b24a9725bf3e95\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutSendProcessor {\\\\n\\\\n    struct SendData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string transferId;\\\\n        string recipientId;\\\\n        string amount;\\\\n        string currencyId;\\\\n        string status;\\\\n        string timestamp;\\\\n        uint256 intentHash;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct SendProof {\\\\n        SendData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6bb42393fe8c5f9ac83fa56e126413638b4a0c110602eecaa70d2b41cf77f1a3\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001efa38038062001efa8339810160408190526200003491620001d0565b84848484846200004433620000a2565b6001600160a01b03851660805260016200005f8382620002fe565b5060026200006e8282620002fe565b5050600380546001600160a01b0319166001600160a01b03949094169390931790925560045550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013357600080fd5b81516001600160401b03808211156200015057620001506200010b565b604051601f8301601f19908116603f011681019082821181831017156200017b576200017b6200010b565b816040528381526020925086838588010111156200019857600080fd5b600091505b83821015620001bc57858201830151818301840152908201906200019d565b600093810190920192909252949350505050565b600080600080600060a08688031215620001e957600080fd5b8551620001f681620000f2565b60208701519095506200020981620000f2565b6040870151606088015191955093506001600160401b03808211156200022e57600080fd5b6200023c89838a0162000121565b935060808801519150808211156200025357600080fd5b50620002628882890162000121565b9150509295509295909350565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a6200010b565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611b0e620003ec6000396000818160f301526101fa0152611b0e6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b2a3fda411610071578063b2a3fda41461015d578063b870676c14610170578063dbac582114610183578063f2fde38b1461019a578063f437bc59146101ad578063faec91e0146101b557600080fd5b80630f2d076d146100ae57806315d276e1146100ee5780635e280f111461012d578063715018a6146101425780638da5cb5b1461014c575b600080fd5b6100c16100bc3660046113d2565b6101e9565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e5565b610135610785565b6040516100e59190611475565b61014a610813565b005b6000546001600160a01b0316610115565b61014a61016b366004611488565b610827565b600354610115906001600160a01b031681565b61018c60045481565b6040519081526020016100e5565b61014a6101a83660046114a1565b610834565b6101356108ad565b61018c6040516810d3d354131155115160ba1b60208201526029016040516020818303038152906040528051906020012081565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026c5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6102ca8661027a89806114bc565b610283906115aa565b61029060208b018b61170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108ba92505050565b6040805180820190915260018152601560f91b6020820152610420906103d2906102f48a806114bc565b61030290604081019061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600180549092506103459150611754565b80601f016020809104026020016040519081016040528092919081815260200182805461037190611754565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50505050506109069092919063ffffffff16565b6103dc89806114bc565b6103e6908061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098b92505050565b6105046002805461043090611754565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611754565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b506104bc93508c92508291506114bc9050565b6104ca90602081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a2a92505050565b6040516810d3d354131155115160ba1b602082015260290160408051601f19818403018152919052805160209091012061053e88806114bc565b61054c9060c081019061170d565b60405160200161055d92919061178e565b60405160208183030381529060405280519060200120146105cc5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7420737461747573206e6f7420636f6e6669726d6564206173206044820152631cd95b9d60e21b6064820152608401610263565b6106136105d988806114bc565b6105e790604081019061170d565b6040516020016105f892919061179e565b60405160208183030381529060405280519060200120610ac5565b61066861062088806114bc565b61062e90608081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610be092505050565b6004549095506103e86106cb60006106808b806114bc565b61068e9060e081019061170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610c619050565b6106d591906117d7565b6106df91906117f9565b93506106eb87806114bc565b6106f990606081019061170d565b60405160200161070a92919061178e565b60408051601f198184030181529190528051602090910120925061072e87806114bc565b61073c9060a081019061170d565b60405160200161074d92919061178e565b60408051601f198184030181529190528051602090910120915061077187806114bc565b610120013560001b90509295509295909350565b6001805461079290611754565b80601f01602080910402602001604051908101604052809291908181526020018280546107be90611754565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b610c72565b6108256000610ccc565b565b61082f610c72565b600455565b61083c610c72565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610263565b6108aa81610ccc565b50565b6002805461079290611754565b6108c5838383610d1c565b6109015760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610263565b505050565b6060838360006109168383610d91565b9050600019810361092c57869350505050610984565b600061093a88600084610e70565b905060006109568985518561094f91906117f9565b8751610e70565b905081878260405160200161096d9392919061180c565b604051602081830303815290604052955050505050505b9392505050565b8060405160200161099c9190611475565b60405160208183030381529060405280519060200120826040516020016109c39190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d617463682065787065637465646044820152606401610263565b5050565b80604051602001610a3b9190611475565b6040516020818303038152906040528051906020012082604051602001610a629190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d61746368206578706563746564000000006044820152606401610263565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061184f565b15610b7f5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610263565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b5050505050565b600081600081518110610bf557610bf5611871565b6020910101516001600160f81b031916602d60f81b14610c505760405162461bcd60e51b81526020600482015260166024820152752737ba10309039b2b732103a3930b739b0b1ba34b7b760511b6044820152606401610263565b610c5b826006610c61565b92915050565b600061098483601760f91b84610f3d565b6000546001600160a01b031633146108255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c6101200151604051602001610d6c9a99989796959493929190611887565b6040516020818303038152906040529050610d8881848761111a565b95945050505050565b80518251600091849184911115610dae5760001992505050610c5b565b60005b81518351610dbf9190611943565b8111610e6357600160005b8351811015610e3e57838181518110610de557610de5611871565b01602001516001600160f81b03191685610dff83866117f9565b81518110610e0f57610e0f611871565b01602001516001600160f81b03191614610e2c5760009150610e3e565b80610e3681611956565b915050610dca565b508015610e5057509250610c5b915050565b5080610e5b81611956565b915050610db1565b5060001995945050505050565b6060836000610e7f8585611943565b67ffffffffffffffff811115610e9757610e976114dd565b6040519080825280601f01601f191660200182016040528015610ec1576020820181803683370190505b509050845b84811015610f3357828181518110610ee057610ee0611871565b01602001516001600160f81b03191682610efa8884611943565b81518110610f0a57610f0a611871565b60200101906001600160f81b031916908160001a90535080610f2b81611956565b915050610ec6565b5095945050505050565b600083818080805b845181101561109357603060f81b858281518110610f6557610f65611871565b01602001516001600160f81b03191610801590610fa65750603960f81b858281518110610f9457610f94611871565b01602001516001600160f81b03191611155b15610fe9576030858281518110610fbf57610fbf611871565b0160200151610fd1919060f81c611943565b610fdc85600a61196f565b610fe691906117f9565b93505b8115610ffd5782610ff981611956565b9350505b876001600160f81b03191685828151811061101a5761101a611871565b01602001516001600160f81b0319160361108157811561107c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610263565b600191505b8061108b81611956565b915050610f45565b50858211156110ef5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610263565b6110f98287611943565b61110490600a611a6a565b61110e908461196f565b98975050505050505050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c8120610d886001600160a01b0384168286600080600061116f85856111c1565b9092509050600081600481111561118857611188611a76565b1480156111a65750856001600160a01b0316826001600160a01b0316145b806111b757506111b7868686611206565b9695505050505050565b60008082516041036111f75760208301516040840151606085015160001a6111eb878285856112f2565b945094505050506111ff565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401611230929190611a8c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161126e9190611aad565b600060405180830381855afa9150503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091508180156112c257506020815110155b80156111b757508051630b135d3f60e11b906112e79083016020908101908401611abf565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561132957506000905060036113ad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a6576000600192509250506113ad565b9150600090505b94509492505050565b80356001600160a01b03811681146113cd57600080fd5b919050565b600080604083850312156113e557600080fd5b823567ffffffffffffffff8111156113fc57600080fd5b83016040818603121561140e57600080fd5b915061141c602084016113b6565b90509250929050565b60005b83811015611440578181015183820152602001611428565b50506000910152565b60008151808452611461816020860160208601611425565b601f01601f19169290920160200192915050565b6020815260006109846020830184611449565b60006020828403121561149a57600080fd5b5035919050565b6000602082840312156114b357600080fd5b610984826113b6565b6000823561013e198336030181126114d357600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715611517576115176114dd565b60405290565b600082601f83011261152e57600080fd5b813567ffffffffffffffff80821115611549576115496114dd565b604051601f8301601f19908116603f01168101908282118183101715611571576115716114dd565b8160405283815286602085880101111561158a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061014082360312156115bd57600080fd5b6115c56114f3565b823567ffffffffffffffff808211156115dd57600080fd5b6115e93683870161151d565b835260208501359150808211156115ff57600080fd5b61160b3683870161151d565b6020840152604085013591508082111561162457600080fd5b6116303683870161151d565b6040840152606085013591508082111561164957600080fd5b6116553683870161151d565b6060840152608085013591508082111561166e57600080fd5b61167a3683870161151d565b608084015260a085013591508082111561169357600080fd5b61169f3683870161151d565b60a084015260c08501359150808211156116b857600080fd5b6116c43683870161151d565b60c084015260e08501359150808211156116dd57600080fd5b506116ea3682860161151d565b60e083015250610100838101359082015261012092830135928101929092525090565b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b6020019150368190038213156111ff57600080fd5b600181811c9082168061176857607f821691505b60208210810361178857634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6614995d9bdb1d5d60ca1b81528183600783013760009101600701908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826117f457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b6117c1565b6000845161181e818460208901611425565b845190830190611832818360208901611425565b8451910190611845818360208801611425565b0195945050505050565b60006020828403121561186157600080fd5b8151801515811461098457600080fd5b634e487b7160e01b600052603260045260246000fd5b600061014080835261189b8184018e611449565b905082810360208401526118af818d611449565b905082810360408401526118c3818c611449565b905082810360608401526118d7818b611449565b905082810360808401526118eb818a611449565b905082810360a08401526118ff8189611449565b905082810360c08401526119138188611449565b905082810360e08401526119278187611449565b6101008401959095525050610120015298975050505050505050565b81810381811115610c5b57610c5b6117c1565b600060018201611968576119686117c1565b5060010190565b8082028115828204841417610c5b57610c5b6117c1565b600181815b808511156119c15781600019048211156119a7576119a76117c1565b808516156119b457918102915b93841c939080029061198b565b509250929050565b6000826119d857506001610c5b565b816119e557506000610c5b565b81600181146119fb5760028114611a0557611a21565b6001915050610c5b565b60ff841115611a1657611a166117c1565b50506001821b610c5b565b5060208310610133831016604e8410600b8410161715611a44575081810a610c5b565b611a4e8383611986565b8060001904821115611a6257611a626117c1565b029392505050565b600061098483836119c9565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000611aa56040830184611449565b949350505050565b600082516114d3818460208701611425565b600060208284031215611ad157600080fd5b505191905056fea2646970667358221220e18a6a6191feef83c74663dc447936038dada8ef62a251e16ee5c3a5e6ad0e3b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b2a3fda411610071578063b2a3fda41461015d578063b870676c14610170578063dbac582114610183578063f2fde38b1461019a578063f437bc59146101ad578063faec91e0146101b557600080fd5b80630f2d076d146100ae57806315d276e1146100ee5780635e280f111461012d578063715018a6146101425780638da5cb5b1461014c575b600080fd5b6100c16100bc3660046113d2565b6101e9565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e5565b610135610785565b6040516100e59190611475565b61014a610813565b005b6000546001600160a01b0316610115565b61014a61016b366004611488565b610827565b600354610115906001600160a01b031681565b61018c60045481565b6040519081526020016100e5565b61014a6101a83660046114a1565b610834565b6101356108ad565b61018c6040516810d3d354131155115160ba1b60208201526029016040516020818303038152906040528051906020012081565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026c5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6102ca8661027a89806114bc565b610283906115aa565b61029060208b018b61170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108ba92505050565b6040805180820190915260018152601560f91b6020820152610420906103d2906102f48a806114bc565b61030290604081019061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600180549092506103459150611754565b80601f016020809104026020016040519081016040528092919081815260200182805461037190611754565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50505050506109069092919063ffffffff16565b6103dc89806114bc565b6103e6908061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098b92505050565b6105046002805461043090611754565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611754565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b506104bc93508c92508291506114bc9050565b6104ca90602081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a2a92505050565b6040516810d3d354131155115160ba1b602082015260290160408051601f19818403018152919052805160209091012061053e88806114bc565b61054c9060c081019061170d565b60405160200161055d92919061178e565b60405160208183030381529060405280519060200120146105cc5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7420737461747573206e6f7420636f6e6669726d6564206173206044820152631cd95b9d60e21b6064820152608401610263565b6106136105d988806114bc565b6105e790604081019061170d565b6040516020016105f892919061179e565b60405160208183030381529060405280519060200120610ac5565b61066861062088806114bc565b61062e90608081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610be092505050565b6004549095506103e86106cb60006106808b806114bc565b61068e9060e081019061170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610c619050565b6106d591906117d7565b6106df91906117f9565b93506106eb87806114bc565b6106f990606081019061170d565b60405160200161070a92919061178e565b60408051601f198184030181529190528051602090910120925061072e87806114bc565b61073c9060a081019061170d565b60405160200161074d92919061178e565b60408051601f198184030181529190528051602090910120915061077187806114bc565b610120013560001b90509295509295909350565b6001805461079290611754565b80601f01602080910402602001604051908101604052809291908181526020018280546107be90611754565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b610c72565b6108256000610ccc565b565b61082f610c72565b600455565b61083c610c72565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610263565b6108aa81610ccc565b50565b6002805461079290611754565b6108c5838383610d1c565b6109015760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610263565b505050565b6060838360006109168383610d91565b9050600019810361092c57869350505050610984565b600061093a88600084610e70565b905060006109568985518561094f91906117f9565b8751610e70565b905081878260405160200161096d9392919061180c565b604051602081830303815290604052955050505050505b9392505050565b8060405160200161099c9190611475565b60405160208183030381529060405280519060200120826040516020016109c39190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d617463682065787065637465646044820152606401610263565b5050565b80604051602001610a3b9190611475565b6040516020818303038152906040528051906020012082604051602001610a629190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d61746368206578706563746564000000006044820152606401610263565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061184f565b15610b7f5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610263565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b5050505050565b600081600081518110610bf557610bf5611871565b6020910101516001600160f81b031916602d60f81b14610c505760405162461bcd60e51b81526020600482015260166024820152752737ba10309039b2b732103a3930b739b0b1ba34b7b760511b6044820152606401610263565b610c5b826006610c61565b92915050565b600061098483601760f91b84610f3d565b6000546001600160a01b031633146108255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c6101200151604051602001610d6c9a99989796959493929190611887565b6040516020818303038152906040529050610d8881848761111a565b95945050505050565b80518251600091849184911115610dae5760001992505050610c5b565b60005b81518351610dbf9190611943565b8111610e6357600160005b8351811015610e3e57838181518110610de557610de5611871565b01602001516001600160f81b03191685610dff83866117f9565b81518110610e0f57610e0f611871565b01602001516001600160f81b03191614610e2c5760009150610e3e565b80610e3681611956565b915050610dca565b508015610e5057509250610c5b915050565b5080610e5b81611956565b915050610db1565b5060001995945050505050565b6060836000610e7f8585611943565b67ffffffffffffffff811115610e9757610e976114dd565b6040519080825280601f01601f191660200182016040528015610ec1576020820181803683370190505b509050845b84811015610f3357828181518110610ee057610ee0611871565b01602001516001600160f81b03191682610efa8884611943565b81518110610f0a57610f0a611871565b60200101906001600160f81b031916908160001a90535080610f2b81611956565b915050610ec6565b5095945050505050565b600083818080805b845181101561109357603060f81b858281518110610f6557610f65611871565b01602001516001600160f81b03191610801590610fa65750603960f81b858281518110610f9457610f94611871565b01602001516001600160f81b03191611155b15610fe9576030858281518110610fbf57610fbf611871565b0160200151610fd1919060f81c611943565b610fdc85600a61196f565b610fe691906117f9565b93505b8115610ffd5782610ff981611956565b9350505b876001600160f81b03191685828151811061101a5761101a611871565b01602001516001600160f81b0319160361108157811561107c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610263565b600191505b8061108b81611956565b915050610f45565b50858211156110ef5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610263565b6110f98287611943565b61110490600a611a6a565b61110e908461196f565b98975050505050505050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c8120610d886001600160a01b0384168286600080600061116f85856111c1565b9092509050600081600481111561118857611188611a76565b1480156111a65750856001600160a01b0316826001600160a01b0316145b806111b757506111b7868686611206565b9695505050505050565b60008082516041036111f75760208301516040840151606085015160001a6111eb878285856112f2565b945094505050506111ff565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401611230929190611a8c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161126e9190611aad565b600060405180830381855afa9150503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091508180156112c257506020815110155b80156111b757508051630b135d3f60e11b906112e79083016020908101908401611abf565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561132957506000905060036113ad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a6576000600192509250506113ad565b9150600090505b94509492505050565b80356001600160a01b03811681146113cd57600080fd5b919050565b600080604083850312156113e557600080fd5b823567ffffffffffffffff8111156113fc57600080fd5b83016040818603121561140e57600080fd5b915061141c602084016113b6565b90509250929050565b60005b83811015611440578181015183820152602001611428565b50506000910152565b60008151808452611461816020860160208601611425565b601f01601f19169290920160200192915050565b6020815260006109846020830184611449565b60006020828403121561149a57600080fd5b5035919050565b6000602082840312156114b357600080fd5b610984826113b6565b6000823561013e198336030181126114d357600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715611517576115176114dd565b60405290565b600082601f83011261152e57600080fd5b813567ffffffffffffffff80821115611549576115496114dd565b604051601f8301601f19908116603f01168101908282118183101715611571576115716114dd565b8160405283815286602085880101111561158a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061014082360312156115bd57600080fd5b6115c56114f3565b823567ffffffffffffffff808211156115dd57600080fd5b6115e93683870161151d565b835260208501359150808211156115ff57600080fd5b61160b3683870161151d565b6020840152604085013591508082111561162457600080fd5b6116303683870161151d565b6040840152606085013591508082111561164957600080fd5b6116553683870161151d565b6060840152608085013591508082111561166e57600080fd5b61167a3683870161151d565b608084015260a085013591508082111561169357600080fd5b61169f3683870161151d565b60a084015260c08501359150808211156116b857600080fd5b6116c43683870161151d565b60c084015260e08501359150808211156116dd57600080fd5b506116ea3682860161151d565b60e083015250610100838101359082015261012092830135928101929092525090565b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b6020019150368190038213156111ff57600080fd5b600181811c9082168061176857607f821691505b60208210810361178857634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6614995d9bdb1d5d60ca1b81528183600783013760009101600701908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826117f457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b6117c1565b6000845161181e818460208901611425565b845190830190611832818360208901611425565b8451910190611845818360208801611425565b0195945050505050565b60006020828403121561186157600080fd5b8151801515811461098457600080fd5b634e487b7160e01b600052603260045260246000fd5b600061014080835261189b8184018e611449565b905082810360208401526118af818d611449565b905082810360408401526118c3818c611449565b905082810360608401526118d7818b611449565b905082810360808401526118eb818a611449565b905082810360a08401526118ff8189611449565b905082810360c08401526119138188611449565b905082810360e08401526119278187611449565b6101008401959095525050610120015298975050505050505050565b81810381811115610c5b57610c5b6117c1565b600060018201611968576119686117c1565b5060010190565b8082028115828204841417610c5b57610c5b6117c1565b600181815b808511156119c15781600019048211156119a7576119a76117c1565b808516156119b457918102915b93841c939080029061198b565b509250929050565b6000826119d857506001610c5b565b816119e557506000610c5b565b81600181146119fb5760028114611a0557611a21565b6001915050610c5b565b60ff841115611a1657611a166117c1565b50506001821b610c5b565b5060208310610133831016604e8410600b8410161715611a44575081810a610c5b565b611a4e8383611986565b8060001904821115611a6257611a626117c1565b029392505050565b600061098483836119c9565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000611aa56040830184611449565b949350505050565b600082516114d3818460208701611425565b600060208284031215611ad157600080fd5b505191905056fea2646970667358221220e18a6a6191feef83c74663dc447936038dada8ef62a251e16ee5c3a5e6ad0e3b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated TLS calls\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5432,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"endpoint\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5434,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"host\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5437,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_contract(INullifierRegistry)5831\"\n      },\n      {\n        \"astId\": 5439,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)5831\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/VenmoManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x28B23225877AedFe6A9FB1B480026aFdF9801213\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4ef68dc3550a7b9ac2be3b3f6b71efebbb0ad4618c1ffc2853fc2c2d82ed04e8\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x28B23225877AedFe6A9FB1B480026aFdF9801213\",\n    \"transactionIndex\": 4,\n    \"gasUsed\": \"242603\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000220000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000008000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xfb8d22ed3bfac6a7cd43da6d83367f7b4682a20dbbf2de0d218500d9f41ef16f\",\n    \"transactionHash\": \"0x4ef68dc3550a7b9ac2be3b3f6b71efebbb0ad4618c1ffc2853fc2c2d82ed04e8\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 4,\n        \"blockNumber\": 6510423,\n        \"transactionHash\": \"0x4ef68dc3550a7b9ac2be3b3f6b71efebbb0ad4618c1ffc2853fc2c2d82ed04e8\",\n        \"address\": \"0x28B23225877AedFe6A9FB1B480026aFdF9801213\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 14,\n        \"blockHash\": \"0xfb8d22ed3bfac6a7cd43da6d83367f7b4682a20dbbf2de0d218500d9f41ef16f\"\n      }\n    ],\n    \"blockNumber\": 6510423,\n    \"cumulativeGasUsed\": \"1124455\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3235f00afe52b593578a06ba6b1f711c\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setMailserverKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":\\\"ManagedKeyHashAdapter\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./IKeyHashAdapter.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n\\\\n    bytes32 public mailserverKeyHash;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32 _mailserverKeyHash\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x348720e86ab8fd55374953f267d674884f0cbfd3a612859dae5988363bd71c5c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161034338038061034383398101604081905261002f91610090565b61003833610040565b6001556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b61028b806100b86000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5721,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"mailserverKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_bytes32\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/VenmoManagedKeyHashAdapterV2.json",
    "content": "{\n  \"address\": \"0xbf452ee0B221A4dDdD118772848A360722850ffc\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x41ce0d9fcbe2da1fb9ece44b644d20080cb8522981a5debc25e11667295886ea\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xbf452ee0B221A4dDdD118772848A360722850ffc\",\n    \"transactionIndex\": 6,\n    \"gasUsed\": \"608926\",\n    \"logsBloom\": \"0x00010000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000020000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x2085d5bed2d9b976b9af14fcdf3428ef73d33d80ebd6394dd18d1e44cfe6ad83\",\n    \"transactionHash\": \"0x41ce0d9fcbe2da1fb9ece44b644d20080cb8522981a5debc25e11667295886ea\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 6,\n        \"blockNumber\": 9155637,\n        \"transactionHash\": \"0x41ce0d9fcbe2da1fb9ece44b644d20080cb8522981a5debc25e11667295886ea\",\n        \"address\": \"0xbf452ee0B221A4dDdD118772848A360722850ffc\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 7,\n        \"blockHash\": \"0x2085d5bed2d9b976b9af14fcdf3428ef73d33d80ebd6394dd18d1e44cfe6ad83\"\n      }\n    ],\n    \"blockNumber\": 9155637,\n    \"cumulativeGasUsed\": \"1017123\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\",\n      \"0x1163C7F4AF2E63FE2DCB73B8EDF51A3AC04A257979D7877EDFE4AB37B9C807B1\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"1dc9a2624d5fa8a2a6f6105ee74be00a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3574,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/VenmoRampV2.json",
    "content": "{\n  \"address\": \"0x80e5aB2921e23192B2454f6a386Fd7032dad932E\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountVenmoIdHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x10293dc1b89503d780815147c99298aaec4beaf7490b42a4cf16208f20708c2b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x80e5aB2921e23192B2454f6a386Fd7032dad932E\",\n    \"transactionIndex\": 10,\n    \"gasUsed\": \"3777441\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000080000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x65193021e8c5f534b6df903f91d961503bcf86f88d6a4d55362c2d679396ac0f\",\n    \"transactionHash\": \"0x10293dc1b89503d780815147c99298aaec4beaf7490b42a4cf16208f20708c2b\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 10,\n        \"blockNumber\": 9155634,\n        \"transactionHash\": \"0x10293dc1b89503d780815147c99298aaec4beaf7490b42a4cf16208f20708c2b\",\n        \"address\": \"0x80e5aB2921e23192B2454f6a386Fd7032dad932E\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 24,\n        \"blockHash\": \"0x65193021e8c5f534b6df903f91d961503bcf86f88d6a4d55362c2d679396ac0f\"\n      },\n      {\n        \"transactionIndex\": 10,\n        \"blockNumber\": 9155634,\n        \"transactionHash\": \"0x10293dc1b89503d780815147c99298aaec4beaf7490b42a4cf16208f20708c2b\",\n        \"address\": \"0x80e5aB2921e23192B2454f6a386Fd7032dad932E\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 25,\n        \"blockHash\": \"0x65193021e8c5f534b6df903f91d961503bcf86f88d6a4d55362c2d679396ac0f\"\n      }\n    ],\n    \"blockNumber\": 9155634,\n    \"cumulativeGasUsed\": \"5088562\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n    \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"0xfdb7153989116F650387813013A047B6Ab56aEff\",\n    \"10000000\",\n    \"999000000\",\n    \"180\",\n    \"180\",\n    \"0\",\n    \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"1dc9a2624d5fa8a2a6f6105ee74be00a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountVenmoIdHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":\\\"VenmoRampV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55cb1c9701d9b03ff4e445f03993659c7d3b6922ad280d3b2a88edfad8af9fed\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRamp } from \\\\\\\"./interfaces/IRamp.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRampV2 is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IRamp _ramp,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        ramp = _ramp;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessorV2 _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return AccountInfo({\\\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\\\n            deposits: accounts[_account].deposits\\\\n        });\\\\n    }\\\\n\\\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\\\n            ramp.getAccountInfo(_account).venmoIdHash :\\\\n            accounts[_account].venmoIdHash;\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessorV2.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x518dcdcb17faceecc71150a2a412462429cdb61856603e23affd44394523dea8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ramp } from \\\\\\\"../../venmo-v1/Ramp.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRamp {\\\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xffaff7b2fe82cb5756f2c472987d6cfd157312da87a355f21ef7aaf62df27161\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b506040516200439a3803806200439a8339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0388811660805289811660c05287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c0516140a2620002f8600039600081816102f5015261217d015260008181610628015261112801526000818161039a0152818161146601528181611ad301528181612bd70152612c8601526140a26000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d36600461355b565b61073a565b6040519081526020015b60405180910390f35b6102a26102c336600461355b565b610762565b6102db6102d636600461355b565b610788565b005b6102db6102eb36600461357f565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db61034636600461357f565b610914565b6102db61035936600461357f565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db610390366004613598565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca36600461357f565b610f39565b6103e26103dd36600461355b565b610fda565b6040516102ac91906135d1565b6102db6103fd366004613615565b611053565b6102db6104103660046136bc565b6110e6565b6102a260095481565b61043161042c36600461355b565b611522565b6040516102ac919061380a565b6102db61044c36600461357f565b611770565b6102a260075481565b6102db61046836600461357f565b61180f565b6102db61047b3660046138b9565b611955565b6102db611b48565b6104316104963660046138b9565b611b5c565b6104ae6104a936600461355b565b611d42565b6040516102ac919061394e565b6000546001600160a01b0316610317565b6105156104da36600461357f565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db61055636600461357f565b611de1565b6102db61056936600461357f565b611e78565b61058161057c36600461357f565b611f7c565b6040516102ac91906139a6565b6102a2600a5481565b6105de6105a536600461357f565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e36600461355b565b61206a565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a261065836600461355b565b612122565b6102db61066b366004613a58565b6121f4565b6102db61067e36600461357f565b6122ae565b600c54610317906001600160a01b031681565b6102db6106a4366004613b0f565b6123df565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b84565b612467565b6040516102ac9190613bf8565b6102db6106fc36600461355b565b6125b7565b600254610317906001600160a01b031681565b6102db61072236600461355b565b61260d565b610372610735366004613c88565b612686565b60006003600061074984612122565b8152602001908152602001600020600101549050919050565b60006003600061077184612122565b815260208101919091526040016000205492915050565b6107906126c1565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f033612122565b036108165760405162461bcd60e51b815260040161080d90613cb4565b60405180910390fd5b600061082133612122565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c6126c1565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a96126c1565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e933612122565b03610a065760405162461bcd60e51b815260040161080d90613cb4565b6000610a1133612122565b6000858152600560205260408120805492935091610a37906001600160a01b0316612122565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613d01565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b848861271b565b90508583600501541015610e0057600080610d6589612786565b9150915087818660050154610d7a9190613d01565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc9858361292d565b80856005016000828254610ddd9190613d01565b9250508190555080856006016000828254610df89190613d14565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613d14565b9250508190555085836006016000828254610ec29190613d01565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f416126c1565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe984612122565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b6126c1565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f133612122565b0361110e5760405162461bcd60e51b815260040161080d90613cb4565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613d27565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d35565b9050806111aa33612122565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d4e565b6113479190613d7b565b600d8054919250600091908261135c83613d8f565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe91830190600361339c565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133da565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613da8565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a461364e565b6040519080825280602002602001820160405280156115dd57816020015b6115ca613414565b8152602001906001900390816115c25790505b50915060005b815181101561176957600082828151811061160057611600613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612786565b915050604051806080016040528084815260200161171a8460000151612122565b81526020018381526020018284606001516117359190613d01565b81525086858151811061174a5761174a613dca565b60200260200101819052505050508061176290613d8f565b90506115e3565b5050919050565b6117786126c1565b66b1a2bc2ec500008111156117da5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661188f5760405162461bcd60e51b815260040161080d90613de0565b80546001600160a01b031633146118e85760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118f2818461298f565b816060015181600601600082825461190a9190613d14565b9250508190555042600360006119238560000151612122565b815260200190815260200160002060010181905550611946826040015182612a87565b6119508383612b7a565b505050565b6000805b8251811015611ab657600083828151811061197657611976613dca565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119ee5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119fa84612786565b91509150611a08838361292d565b808360050154611a189190613d01565b611a229087613d01565b955080836006016000828254611a389190613d14565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a7f908590613d01565b60405190815260200160405180910390a360006005840155611aa18484612a87565b5050505080611aaf90613d8f565b9050611959565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613da8565b611b506126c1565b611b5a6000612d58565b565b606081516001600160401b03811115611b7757611b7761364e565b604051908082528060200260200182016040528015611bb057816020015b611b9d613414565b815260200190600190039081611b955790505b50905060005b8251811015611d3c576000838281518110611bd357611bd3613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c2357505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611cb657602002820191906000526020600020905b815481526020019060010190808311611ca2575b50505050508152505090506000611ccc83612786565b9150506040518060800160405280848152602001611ced8460000151612122565b8152602001838152602001828460600151611d089190613d01565b815250858581518110611d1d57611d1d613dca565b602002602001018190525050505080611d3590613d8f565b9050611bb6565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d6b84612122565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b50505050508152509050919050565b611de96126c1565b80600003611e435760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e8333612122565b03611ea05760405162461bcd60e51b815260040161080d90613cb4565b6000611eab33612122565b6000818152600360208181526040808420878552909201905290205490915060ff16611f105760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f469060020183612da8565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f84613440565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fc75750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561205a57602002820191906000526020600020905b815481526020019060010190808311612046575b5050505050815250509050919050565b6120726126c1565b6001600160a01b0381166120d45760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561215e576001600160a01b0382166000908152600460205260409020546121ee565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ec9190810190613e0f565b515b92915050565b60006121ff33612122565b1461225c5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061226a85858585612ed1565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036123235760405162461bcd60e51b815260040161080d90613de0565b61232c33612122565b815161233790612122565b146123845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061239f818461298f565b81606001518160050160008282546123b79190613d01565b909155505060608201516006820180546000906123d5908490613d14565b9091555050505050565b60008060006123f087878787612f71565b925092509250612400828261298f565b82606001518260060160008282546124189190613d14565b9250508190555042600360006124318660000151612122565b815260200190815260200160002060010181905550612454836040015183612a87565b61245e8184612b7a565b50505050505050565b60606000826001600160401b038111156124835761248361364e565b6040519080825280602002602001820160405280156124bc57816020015b6124a961348c565b8152602001906001900390816124a15790505b50905060005b838110156125af5760008585838181106124de576124de613dca565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061255d5761255d613dca565b90506020020135815260200182815260200161257c8360000151612122565b81525084848151811061259157612591613dca565b60200260200101819052505050806125a890613d8f565b90506124c2565b509392505050565b6125bf6126c1565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6126156126c1565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61268381612d58565b50565b60006003600061269585612122565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061277e7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613edd565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127e357602002820191906000526020600020905b8154815260200190600101908083116127cf575b5050505050905080516001600160401b038111156128035761280361364e565b60405190808252806020026020018201604052801561282c578160200160208202803683370190505b50925060005b81518110156129265760006006600084848151811061285357612853613dca565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128c691613d01565b1015612915578282815181106128de576128de613dca565b60200260200101518583815181106128f8576128f8613dca565b602090810291909101015260608101516129129085613d01565b93505b5061291f81613d8f565b9050612832565b5050915091565b60005b8151811015611950576000801b82828151811061294f5761294f613dca565b60200260200101511461297f5761297f8383838151811061297257612972613dca565b602002602001015161298f565b61298881613d8f565b9050612930565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129f690612122565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a526008840183612da8565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a9d9190613d01565b9050806000036119505781546001600160a01b03166000908152600460205260409020612acd9060010184613244565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b7391906134b4565b5050505050565b6000600b54600014612c4657670de0b6b3a7640000600b548360600151612ba19190613d4e565b612bab9190613d7b565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190613da8565b505b6000818360600151612c589190613d14565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf39190613da8565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612e0484805480602002602001604051908101604052809291908181526020018280548015612df957602002820191906000526020600020905b815481526020019060010190808311612de5575b5050505050846132e9565b9150915080612e4d5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e5e90600190613d14565b9050808314612ea357848181548110612e7957612e79613dca565b9060005260206000200154858481548110612e9657612e96613dca565b6000918252602090912001555b84805480612eb357612eb3613ef1565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f2491600401613f58565b6020604051808303816000875af1158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f679190613d35565b9695505050505050565b612f796134d2565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fd59190600401613fc7565b60a0604051808303816000875af1158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613018919061402c565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130a45760405162461bcd60e51b815260040161080d90613de0565b85826080015111156131035760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b80548590613119906001600160a01b0316612122565b146131665760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b836131748360000151612122565b146131c15760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131de9190613d4e565b6131e89190613d7b565b8710156132305760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b6000806132a08480548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050508461334c565b9150915080612e4d5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b81811015613339578486828151811061330d5761330d613dca565b602002602001015103613327579250600191506133459050565b8061333181613d8f565b9150506132f2565b50600019600092509250505b9250929050565b81516000908190815b81811015613339578486828151811061337057613370613dca565b60200260200101510361338a579250600191506133459050565b8061339481613d8f565b915050613355565b82600381019282156133ca579160200282015b828111156133ca5782518255916020019190600101906133af565b506133d6929150613513565b5090565b8280548282559060005260206000209081019282156133ca57916020028201828111156133ca5782518255916020019190600101906133af565b6040805160808101825260008082526020820152908101613433613440565b8152602001600081525090565b6040518060e0016040528060006001600160a01b03168152602001613463613528565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134a76134d2565b8152600060209091015290565b50805460008255906000526020600020908101906126839190613513565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133d65760008155600101613514565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461268357600080fd5b60006020828403121561356d57600080fd5b813561357881613546565b9392505050565b60006020828403121561359157600080fd5b5035919050565b6000806000606084860312156135ad57600080fd5b833592506020840135915060408401356135c681613546565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613609578351835292840192918401916001016135ed565b50909695505050505050565b6000806040838503121561362857600080fd5b823561363381613546565b9150602083013561364381613546565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156136865761368661364e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136b4576136b461364e565b604052919050565b600080600060a084860312156136d157600080fd5b84601f8501126136e057600080fd5b604051606081018181106001600160401b03821117156137025761370261364e565b60405280606086018781111561371757600080fd5b865b81811015613731578035835260209283019201613719565b5091979135965050608094909401359392505050565b8060005b6003811015612ecb57815184526020938401939091019060010161374b565b600061012080840160018060a01b03845116855260208085015161379082880182613747565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137fe57835185529382019392820192600191909101906137de565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561388857603f19898403018552815160808151855288820151898601528782015181898701526138678287018261376a565b60609384015196909301959095525094870194925090860190600101613831565b509098975050505050505050565b60006001600160401b038211156138af576138af61364e565b5060051b60200190565b600060208083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b8301601f810185136138f357600080fd5b803561390661390182613896565b61368c565b81815260059190911b8201830190838101908783111561392557600080fd5b928401925b828410156139435783358252928401929084019061392a565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561399b578351825292840192600192909201919084019061397b565b509695505050505050565b602081526000613578602083018461376a565b600082601f8301126139ca57600080fd5b6139d2613664565b8060408401858111156139e457600080fd5b845b818110156139fe5780358452602093840193016139e6565b509095945050505050565b600082601f830112613a1a57600080fd5b613a22613664565b806080840185811115613a3457600080fd5b845b818110156139fe57613a4887826139b9565b8452602090930192604001613a36565b6000806000806101a0808688031215613a7057600080fd5b613a7a87876139b9565b9450613a898760408801613a09565b9350613a988760c088016139b9565b92508661011f870112613aaa57600080fd5b60405160a081018181106001600160401b0382111715613acc57613acc61364e565b604052908601908088831115613ae157600080fd5b61010088015b83811015613aff578035825260209182019101613ae7565b5050809250505092959194509250565b600080600080610280808688031215613b2757600080fd5b613b3187876139b9565b9450613b408760408801613a09565b9350613b4f8760c088016139b9565b92508661011f870112613b6157600080fd5b60405161018081018181106001600160401b0382111715613acc57613acc61364e565b60008060208385031215613b9757600080fd5b82356001600160401b0380821115613bae57600080fd5b818501915085601f830112613bc257600080fd5b813581811115613bd157600080fd5b8660208260051b8501011115613be657600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7b578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c15565b5091979650505050505050565b60008060408385031215613c9b57600080fd5b8235613ca681613546565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ee576121ee613ceb565b818103818111156121ee576121ee613ceb565b606081016121ee8284613747565b600060208284031215613d4757600080fd5b5051919050565b80820281158282048414176121ee576121ee613ceb565b634e487b7160e01b600052601260045260246000fd5b600082613d8a57613d8a613d65565b500490565b600060018201613da157613da1613ceb565b5060010190565b600060208284031215613dba57600080fd5b8151801515811461357857600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613e2257600080fd5b82516001600160401b0380821115613e3957600080fd5b9084019060408287031215613e4d57600080fd5b613e55613664565b825181528383015182811115613e6a57600080fd5b80840193505086601f840112613e7f57600080fd5b82519150613e8f61390183613896565b82815260059290921b83018401918481019088841115613eae57600080fd5b938501935b83851015613ecc57845182529385019390850190613eb3565b948201949094529695505050505050565b600082613eec57613eec613d65565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ecb578151845260209384019390910190600101613f0b565b8060005b6002811015612ecb57613f42848351613f07565b6040939093019260209190910190600101613f2e565b60006101a082019050613f6c828451613f07565b602080840151613f7f6040850182613f2a565b506040840151613f9260c0850182613f07565b506060840151610100840160005b6005811015613fbd57825182529183019190830190600101613fa0565b5050505092915050565b600061028082019050613fdb828451613f07565b602080840151613fee6040850182613f2a565b50604084015161400160c0850182613f07565b506060840151610100840160005b600c811015613fbd5782518252918301919083019060010161400f565b600080600080600060a0868803121561404457600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212205f324bcc64951b344706a8dfc43dadc49148f6b3a1ef8999a96c6941721f73f764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d36600461355b565b61073a565b6040519081526020015b60405180910390f35b6102a26102c336600461355b565b610762565b6102db6102d636600461355b565b610788565b005b6102db6102eb36600461357f565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db61034636600461357f565b610914565b6102db61035936600461357f565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db610390366004613598565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca36600461357f565b610f39565b6103e26103dd36600461355b565b610fda565b6040516102ac91906135d1565b6102db6103fd366004613615565b611053565b6102db6104103660046136bc565b6110e6565b6102a260095481565b61043161042c36600461355b565b611522565b6040516102ac919061380a565b6102db61044c36600461357f565b611770565b6102a260075481565b6102db61046836600461357f565b61180f565b6102db61047b3660046138b9565b611955565b6102db611b48565b6104316104963660046138b9565b611b5c565b6104ae6104a936600461355b565b611d42565b6040516102ac919061394e565b6000546001600160a01b0316610317565b6105156104da36600461357f565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db61055636600461357f565b611de1565b6102db61056936600461357f565b611e78565b61058161057c36600461357f565b611f7c565b6040516102ac91906139a6565b6102a2600a5481565b6105de6105a536600461357f565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e36600461355b565b61206a565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a261065836600461355b565b612122565b6102db61066b366004613a58565b6121f4565b6102db61067e36600461357f565b6122ae565b600c54610317906001600160a01b031681565b6102db6106a4366004613b0f565b6123df565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b84565b612467565b6040516102ac9190613bf8565b6102db6106fc36600461355b565b6125b7565b600254610317906001600160a01b031681565b6102db61072236600461355b565b61260d565b610372610735366004613c88565b612686565b60006003600061074984612122565b8152602001908152602001600020600101549050919050565b60006003600061077184612122565b815260208101919091526040016000205492915050565b6107906126c1565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f033612122565b036108165760405162461bcd60e51b815260040161080d90613cb4565b60405180910390fd5b600061082133612122565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c6126c1565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a96126c1565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e933612122565b03610a065760405162461bcd60e51b815260040161080d90613cb4565b6000610a1133612122565b6000858152600560205260408120805492935091610a37906001600160a01b0316612122565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613d01565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b848861271b565b90508583600501541015610e0057600080610d6589612786565b9150915087818660050154610d7a9190613d01565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc9858361292d565b80856005016000828254610ddd9190613d01565b9250508190555080856006016000828254610df89190613d14565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613d14565b9250508190555085836006016000828254610ec29190613d01565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f416126c1565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe984612122565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b6126c1565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f133612122565b0361110e5760405162461bcd60e51b815260040161080d90613cb4565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613d27565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d35565b9050806111aa33612122565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d4e565b6113479190613d7b565b600d8054919250600091908261135c83613d8f565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe91830190600361339c565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133da565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613da8565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a461364e565b6040519080825280602002602001820160405280156115dd57816020015b6115ca613414565b8152602001906001900390816115c25790505b50915060005b815181101561176957600082828151811061160057611600613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612786565b915050604051806080016040528084815260200161171a8460000151612122565b81526020018381526020018284606001516117359190613d01565b81525086858151811061174a5761174a613dca565b60200260200101819052505050508061176290613d8f565b90506115e3565b5050919050565b6117786126c1565b66b1a2bc2ec500008111156117da5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661188f5760405162461bcd60e51b815260040161080d90613de0565b80546001600160a01b031633146118e85760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118f2818461298f565b816060015181600601600082825461190a9190613d14565b9250508190555042600360006119238560000151612122565b815260200190815260200160002060010181905550611946826040015182612a87565b6119508383612b7a565b505050565b6000805b8251811015611ab657600083828151811061197657611976613dca565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119ee5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119fa84612786565b91509150611a08838361292d565b808360050154611a189190613d01565b611a229087613d01565b955080836006016000828254611a389190613d14565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a7f908590613d01565b60405190815260200160405180910390a360006005840155611aa18484612a87565b5050505080611aaf90613d8f565b9050611959565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613da8565b611b506126c1565b611b5a6000612d58565b565b606081516001600160401b03811115611b7757611b7761364e565b604051908082528060200260200182016040528015611bb057816020015b611b9d613414565b815260200190600190039081611b955790505b50905060005b8251811015611d3c576000838281518110611bd357611bd3613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c2357505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611cb657602002820191906000526020600020905b815481526020019060010190808311611ca2575b50505050508152505090506000611ccc83612786565b9150506040518060800160405280848152602001611ced8460000151612122565b8152602001838152602001828460600151611d089190613d01565b815250858581518110611d1d57611d1d613dca565b602002602001018190525050505080611d3590613d8f565b9050611bb6565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d6b84612122565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b50505050508152509050919050565b611de96126c1565b80600003611e435760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e8333612122565b03611ea05760405162461bcd60e51b815260040161080d90613cb4565b6000611eab33612122565b6000818152600360208181526040808420878552909201905290205490915060ff16611f105760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f469060020183612da8565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f84613440565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fc75750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561205a57602002820191906000526020600020905b815481526020019060010190808311612046575b5050505050815250509050919050565b6120726126c1565b6001600160a01b0381166120d45760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561215e576001600160a01b0382166000908152600460205260409020546121ee565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ec9190810190613e0f565b515b92915050565b60006121ff33612122565b1461225c5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061226a85858585612ed1565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036123235760405162461bcd60e51b815260040161080d90613de0565b61232c33612122565b815161233790612122565b146123845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061239f818461298f565b81606001518160050160008282546123b79190613d01565b909155505060608201516006820180546000906123d5908490613d14565b9091555050505050565b60008060006123f087878787612f71565b925092509250612400828261298f565b82606001518260060160008282546124189190613d14565b9250508190555042600360006124318660000151612122565b815260200190815260200160002060010181905550612454836040015183612a87565b61245e8184612b7a565b50505050505050565b60606000826001600160401b038111156124835761248361364e565b6040519080825280602002602001820160405280156124bc57816020015b6124a961348c565b8152602001906001900390816124a15790505b50905060005b838110156125af5760008585838181106124de576124de613dca565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061255d5761255d613dca565b90506020020135815260200182815260200161257c8360000151612122565b81525084848151811061259157612591613dca565b60200260200101819052505050806125a890613d8f565b90506124c2565b509392505050565b6125bf6126c1565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6126156126c1565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61268381612d58565b50565b60006003600061269585612122565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061277e7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613edd565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127e357602002820191906000526020600020905b8154815260200190600101908083116127cf575b5050505050905080516001600160401b038111156128035761280361364e565b60405190808252806020026020018201604052801561282c578160200160208202803683370190505b50925060005b81518110156129265760006006600084848151811061285357612853613dca565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128c691613d01565b1015612915578282815181106128de576128de613dca565b60200260200101518583815181106128f8576128f8613dca565b602090810291909101015260608101516129129085613d01565b93505b5061291f81613d8f565b9050612832565b5050915091565b60005b8151811015611950576000801b82828151811061294f5761294f613dca565b60200260200101511461297f5761297f8383838151811061297257612972613dca565b602002602001015161298f565b61298881613d8f565b9050612930565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129f690612122565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a526008840183612da8565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a9d9190613d01565b9050806000036119505781546001600160a01b03166000908152600460205260409020612acd9060010184613244565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b7391906134b4565b5050505050565b6000600b54600014612c4657670de0b6b3a7640000600b548360600151612ba19190613d4e565b612bab9190613d7b565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190613da8565b505b6000818360600151612c589190613d14565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf39190613da8565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612e0484805480602002602001604051908101604052809291908181526020018280548015612df957602002820191906000526020600020905b815481526020019060010190808311612de5575b5050505050846132e9565b9150915080612e4d5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e5e90600190613d14565b9050808314612ea357848181548110612e7957612e79613dca565b9060005260206000200154858481548110612e9657612e96613dca565b6000918252602090912001555b84805480612eb357612eb3613ef1565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f2491600401613f58565b6020604051808303816000875af1158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f679190613d35565b9695505050505050565b612f796134d2565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fd59190600401613fc7565b60a0604051808303816000875af1158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613018919061402c565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130a45760405162461bcd60e51b815260040161080d90613de0565b85826080015111156131035760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b80548590613119906001600160a01b0316612122565b146131665760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b836131748360000151612122565b146131c15760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131de9190613d4e565b6131e89190613d7b565b8710156132305760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b6000806132a08480548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050508461334c565b9150915080612e4d5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b81811015613339578486828151811061330d5761330d613dca565b602002602001015103613327579250600191506133459050565b8061333181613d8f565b9150506132f2565b50600019600092509250505b9250929050565b81516000908190815b81811015613339578486828151811061337057613370613dca565b60200260200101510361338a579250600191506133459050565b8061339481613d8f565b915050613355565b82600381019282156133ca579160200282015b828111156133ca5782518255916020019190600101906133af565b506133d6929150613513565b5090565b8280548282559060005260206000209081019282156133ca57916020028201828111156133ca5782518255916020019190600101906133af565b6040805160808101825260008082526020820152908101613433613440565b8152602001600081525090565b6040518060e0016040528060006001600160a01b03168152602001613463613528565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134a76134d2565b8152600060209091015290565b50805460008255906000526020600020908101906126839190613513565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133d65760008155600101613514565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461268357600080fd5b60006020828403121561356d57600080fd5b813561357881613546565b9392505050565b60006020828403121561359157600080fd5b5035919050565b6000806000606084860312156135ad57600080fd5b833592506020840135915060408401356135c681613546565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613609578351835292840192918401916001016135ed565b50909695505050505050565b6000806040838503121561362857600080fd5b823561363381613546565b9150602083013561364381613546565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156136865761368661364e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136b4576136b461364e565b604052919050565b600080600060a084860312156136d157600080fd5b84601f8501126136e057600080fd5b604051606081018181106001600160401b03821117156137025761370261364e565b60405280606086018781111561371757600080fd5b865b81811015613731578035835260209283019201613719565b5091979135965050608094909401359392505050565b8060005b6003811015612ecb57815184526020938401939091019060010161374b565b600061012080840160018060a01b03845116855260208085015161379082880182613747565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137fe57835185529382019392820192600191909101906137de565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561388857603f19898403018552815160808151855288820151898601528782015181898701526138678287018261376a565b60609384015196909301959095525094870194925090860190600101613831565b509098975050505050505050565b60006001600160401b038211156138af576138af61364e565b5060051b60200190565b600060208083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b8301601f810185136138f357600080fd5b803561390661390182613896565b61368c565b81815260059190911b8201830190838101908783111561392557600080fd5b928401925b828410156139435783358252928401929084019061392a565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561399b578351825292840192600192909201919084019061397b565b509695505050505050565b602081526000613578602083018461376a565b600082601f8301126139ca57600080fd5b6139d2613664565b8060408401858111156139e457600080fd5b845b818110156139fe5780358452602093840193016139e6565b509095945050505050565b600082601f830112613a1a57600080fd5b613a22613664565b806080840185811115613a3457600080fd5b845b818110156139fe57613a4887826139b9565b8452602090930192604001613a36565b6000806000806101a0808688031215613a7057600080fd5b613a7a87876139b9565b9450613a898760408801613a09565b9350613a988760c088016139b9565b92508661011f870112613aaa57600080fd5b60405160a081018181106001600160401b0382111715613acc57613acc61364e565b604052908601908088831115613ae157600080fd5b61010088015b83811015613aff578035825260209182019101613ae7565b5050809250505092959194509250565b600080600080610280808688031215613b2757600080fd5b613b3187876139b9565b9450613b408760408801613a09565b9350613b4f8760c088016139b9565b92508661011f870112613b6157600080fd5b60405161018081018181106001600160401b0382111715613acc57613acc61364e565b60008060208385031215613b9757600080fd5b82356001600160401b0380821115613bae57600080fd5b818501915085601f830112613bc257600080fd5b813581811115613bd157600080fd5b8660208260051b8501011115613be657600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7b578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c15565b5091979650505050505050565b60008060408385031215613c9b57600080fd5b8235613ca681613546565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ee576121ee613ceb565b818103818111156121ee576121ee613ceb565b606081016121ee8284613747565b600060208284031215613d4757600080fd5b5051919050565b80820281158282048414176121ee576121ee613ceb565b634e487b7160e01b600052601260045260246000fd5b600082613d8a57613d8a613d65565b500490565b600060018201613da157613da1613ceb565b5060010190565b600060208284031215613dba57600080fd5b8151801515811461357857600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613e2257600080fd5b82516001600160401b0380821115613e3957600080fd5b9084019060408287031215613e4d57600080fd5b613e55613664565b825181528383015182811115613e6a57600080fd5b80840193505086601f840112613e7f57600080fd5b82519150613e8f61390183613896565b82815260059290921b83018401918481019088841115613eae57600080fd5b938501935b83851015613ecc57845182529385019390850190613eb3565b948201949094529695505050505050565b600082613eec57613eec613d65565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ecb578151845260209384019390910190600101613f0b565b8060005b6002811015612ecb57613f42848351613f07565b6040939093019260209190910190600101613f2e565b60006101a082019050613f6c828451613f07565b602080840151613f7f6040850182613f2a565b506040840151613f9260c0850182613f07565b506060840151610100840160005b6005811015613fbd57825182529183019190830190600101613fa0565b5050505092915050565b600061028082019050613fdb828451613f07565b602080840151613fee6040850182613f2a565b50604084015161400160c0850182613f07565b506060840151610100840160005b600c811015613fbd5782518252918301919083019060010161400f565b600080600080600060a0868803121561404457600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212205f324bcc64951b344706a8dfc43dadc49148f6b3a1ef8999a96c6941721f73f764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9938,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessorV2)12363\"\n      },\n      {\n        \"astId\": 9941,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)9598\"\n      },\n      {\n        \"astId\": 9943,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 9948,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)9897_storage)\"\n      },\n      {\n        \"astId\": 9953,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)9834_storage)\"\n      },\n      {\n        \"astId\": 9958,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)9852_storage)\"\n      },\n      {\n        \"astId\": 9963,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)9873_storage)\"\n      },\n      {\n        \"astId\": 9965,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9967,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9969,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9971,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9973,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9975,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9977,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessorV2)12363\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessorV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)9598\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)9834_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct VenmoRampV2.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)9834_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)9897_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)9897_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)9873_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)9873_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)9852_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct VenmoRampV2.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)9852_storage\"\n      },\n      \"t_struct(AccountInfo)9834_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 9830,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 9833,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)9889_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 9884,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 9888,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)9852_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 9836,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9840,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 9842,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9844,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9846,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9848,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9851,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)9897_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 9891,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 9893,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9896,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)9889_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)9873_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Intent\",\n        \"members\": [\n          {\n            \"astId\": 9864,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9866,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9868,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9870,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9872,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/VenmoRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0xEf15b6Fd708F35a85c19C30F78119Ff8595aD627\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x67f7d6a42675a0c7cf1c2395a4fe5420c9361ea407d202957a10566a22d90e2e\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xEf15b6Fd708F35a85c19C30F78119Ff8595aD627\",\n    \"transactionIndex\": 3,\n    \"gasUsed\": \"1470150\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000001000200000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x0903858d65ed518ac6040ab42133b17981a7c1e4e8555439ac290e5f6c49a548\",\n    \"transactionHash\": \"0x67f7d6a42675a0c7cf1c2395a4fe5420c9361ea407d202957a10566a22d90e2e\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 3,\n        \"blockNumber\": 6676859,\n        \"transactionHash\": \"0x67f7d6a42675a0c7cf1c2395a4fe5420c9361ea407d202957a10566a22d90e2e\",\n        \"address\": \"0xEf15b6Fd708F35a85c19C30F78119Ff8595aD627\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 2,\n        \"blockHash\": \"0x0903858d65ed518ac6040ab42133b17981a7c1e4e8555439ac290e5f6c49a548\"\n      }\n    ],\n    \"blockNumber\": 6676859,\n    \"cumulativeGasUsed\": \"1670011\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n    \"0x28B23225877AedFe6A9FB1B480026aFdF9801213\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"582bda84e77341f31e48e553d6955fd7\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/VenmoRegistrationProcessor.sol\\\":\\\"VenmoRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/VenmoRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"./BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"../interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        view\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x645b79a0384d43f2377b4eef122c3768c74891a81afff855f1cc48840b538c9c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\\\n    \\\\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\\\n    \\\\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\\\n    \\\\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\\\n    \\\\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\\\n    \\\\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xe75e7981040431d65fa54187d75ef19b77cded328e050458c5921256be2d6d2d\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001b5e38038062001b5e833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516117b7620003a76000396000818160f4015261022b01526117b76000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220c37304a5850f0d98f58c41f8f0556acf17acc66166d0212dec997b906584df2364736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220c37304a5850f0d98f58c41f8f0556acf17acc66166d0212dec997b906584df2364736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1403,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)1958\"\n      },\n      {\n        \"astId\": 1406,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)1973\"\n      },\n      {\n        \"astId\": 1408,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)1958\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)1973\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/VenmoRegistrationProcessorV2.json",
    "content": "{\n  \"address\": \"0x050F07A4E7C0F4Ee6Cc8E8EdC5B694F9Fdd1e769\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessorV2.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb6344f32fdabba9b06305275169160d10a182dbbff54d6fd1c53ff942819deee\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x050F07A4E7C0F4Ee6Cc8E8EdC5B694F9Fdd1e769\",\n    \"transactionIndex\": 51,\n    \"gasUsed\": \"1572947\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000001000000020000000000000000000000000000000000000000000000000000000000800000000\",\n    \"blockHash\": \"0x52c2c5e019e5d60afc0b806d08f45b51ea0ca7a4078189e57394a9542c8ff967\",\n    \"transactionHash\": \"0xb6344f32fdabba9b06305275169160d10a182dbbff54d6fd1c53ff942819deee\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 51,\n        \"blockNumber\": 16891383,\n        \"transactionHash\": \"0xb6344f32fdabba9b06305275169160d10a182dbbff54d6fd1c53ff942819deee\",\n        \"address\": \"0x050F07A4E7C0F4Ee6Cc8E8EdC5B694F9Fdd1e769\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 219,\n        \"blockHash\": \"0x52c2c5e019e5d60afc0b806d08f45b51ea0ca7a4078189e57394a9542c8ff967\"\n      }\n    ],\n    \"blockNumber\": 16891383,\n    \"cumulativeGasUsed\": \"10266396\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x80e5aB2921e23192B2454f6a386Fd7032dad932E\",\n    \"0xbf452ee0B221A4dDdD118772848A360722850ffc\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"venmo@venmo.com\",\n    \"0\"\n  ],\n  \"numDeployments\": 3,\n  \"solcInputHash\": \"3ead3a1930264a5f1428c2beccc481e4\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessorV2.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":\\\"VenmoRegistrationProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _venmoMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x96fed71c2e264aaec9a1bcaaa6ae0b497742b6cba06f2e2c76715815d8d9e755\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 16692827623879808830126666424117838150546424161010311559130132272860078100250;\\\\n    uint256 constant deltax2 = 10427071116080203280483990720065140241625477298313711514843941053378169062748;\\\\n    uint256 constant deltay1 = 12292291730534257963793035250750833013505862587513324721305952905575695195722;\\\\n    uint256 constant deltay2 = 20744227296603881754617447489692206687227195961073977292626564883622660146422;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 8444387327591820163253359883706304250001395835708102283881672029412593968774;\\\\n    uint256 constant IC0y = 277567402350001170949287541204029095267467381858853916455216632597839881894;\\\\n    \\\\n    uint256 constant IC1x = 11766018000598374647690511651127745003630346152255765679463620118729063279220;\\\\n    uint256 constant IC1y = 9973870620290232174118930849612458053973396098852917252709131237691777167431;\\\\n    \\\\n    uint256 constant IC2x = 21007152236406284962452665998326532111064818140624217664323424373713986554835;\\\\n    uint256 constant IC2y = 21775424933265972488601591944473690558387975377218817711132857025038427581344;\\\\n    \\\\n    uint256 constant IC3x = 19548332954070589452554863336717712265670681575029463650291986455368503640194;\\\\n    uint256 constant IC3y = 9885572105525346384114396000793852863725331019928798599079916138124811450063;\\\\n    \\\\n    uint256 constant IC4x = 20459688676260758193620894047864540995062748169615148342851161008796903469478;\\\\n    uint256 constant IC4y = 7185096966400904659568958817597117358528438755253953902329001546341542579806;\\\\n    \\\\n    uint256 constant IC5x = 15566588852465957839914470257479783208753427872712540953155019219989274639291;\\\\n    uint256 constant IC5y = 13117341851862511824800803143692229606087651943401230287864971446454834743578;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xff9780d09b9ca02c5ffe9a87891c78e8248d0c7a3529fc60a5a19dc26c6ab0e3\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001d3c38038062001d3c83398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611984620003b86000396000818161010a015261026801526119846000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d2565b61025b565b604051908152602001610140565b61017d6101783660046113eb565b6104bd565b6040519015158152602001610140565b61017d61019b366004611415565b610531565b61015c600781565b6101b0610b05565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113eb565b610b19565b60025461012c906001600160a01b031681565b610204610b26565b604051610140919061149f565b610204610bb4565b6101b06102273660046114e7565b610c46565b61015c60045481565b6101b06102433660046114e7565b610c70565b6101b0610256366004611521565b610ce6565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fc565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162d565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cfe565b905060036040516104089190611699565b604051809103902081604051602001610421919061170f565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172b565b60405160208183030381529060405280519060200120610dd9565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162d565b92915050565b6000610a93565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f12ab5a9624956b76265fc0eec1d900b529add7b70792dbf4e5a843dd604b268685527e9d18fb29076cc91333c58ed5efb1c16e4c4895b9f4163f7d1b3f7c8d4026a660208601526000608086018661067387357f160d02be8268c1b255c0a0ebde2da936232ed0e153d6f8996f1defac51f930477f1a0354875e82d8f0ac2ac8aeb2dd4fc16d0da2df59f5071140d037af419e2a748461056c565b6106c360208801357f30247428f688b9e3e1d9a0b69811eac6c928394e70e275120108106592076ba07f2e71a076d6490c2f15b995d8b68ad3a0bfa3eb68a58fa33df69c0cfc955a8bd38461056c565b61071360408801357f15db0918919bf88282f6a317b654c06195e674b6d4d833681dab4bd774d036cf7f2b37f6e04a0bca3b2cdcaa0a9f8c2d544a3c5b360d4874c9c1894c59225bc0828461056c565b61076360608801357f0fe29eea9c50213502ef28c871f902b18884958f4eb0596758a1f8389a9cce5e7f2d3bc5feca96b1abbee7368fbcb0ade12a856a5785d8fc3cfb0ac8215850f1a68461056c565b6107b360808801357f1d002702c6a69936e861d6e2a0d8e2ac85847afea1277294beebdb36af9cc91a7f226a60872afad35dabefcc99fd4f84eb93add0df114af28147b4dd2770793bbb8461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f24e7ce3cf2d75f0b3bc44ddeeceef45d789f7c66da38ae223ef2eed52d894f1a6102808201527f170d835b2c98451e8b4e152ee67a3ceda06bbed8e6c68adc4a5c6f4342fec55c6102a08201527f1b2d30c8edee55fa0308f573fe5d1737f2e76ae12c5263f338e3b68e62911e4a6102c08201527f2ddcd10acc578091831b7e1a6edb36fb628c81b530513c55ffba19948e2004f66102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aab6000840135610538565b610ab86020840135610538565b610ac56040840135610538565b610ad26060840135610538565b610adf6080840135610538565b610aec60a0840135610538565b610af9818486888a6105d7565b90508060005260206000f35b610b0d610eed565b610b176000610f47565b565b610b21610eed565b600455565b60038054610b3390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f90611665565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b505050505081565b606060038054610bc390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef90611665565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b610c4e610eed565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c78610eed565b6001600160a01b038116610cdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f47565b610cee610eed565b6003610cfa82826117b2565b5050565b60606000610d0c8484611888565b60ff1667ffffffffffffffff811115610d2757610d2761150b565b604051908082528060200260200182016040528015610d50578160200160208202803683370190505b50905060ff84165b8360ff16811015610db557858160058110610d7557610d7561164f565b602002013582610d8860ff8816846118a1565b81518110610d9857610d9861164f565b602090810291909101015280610dad816118b4565b915050610d58565b50610dd060078251610dc791906118cd565b82906007610f97565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061162d565b15610e935760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610ed957600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610fa991906118cd565b67ffffffffffffffff811115610fc157610fc161150b565b6040519080825280601f01601f191660200182016040528015610feb576020820181803683370190505b5090506000805b87518161ffff1610156111a2576000888261ffff16815181106110175761101761164f565b6020026020010151905060008767ffffffffffffffff81111561103c5761103c61150b565b604051908082528060200260200182016040528015611065578160200160208202803683370190505b50905060005b888110156110b75761107e8160086118cd565b83901c8282815181106110935761109361164f565b60ff90921660209283029190910190910152806110af816118b4565b91505061106b565b5060005b8881101561118c5760008282815181106110d7576110d761164f565b602002602001015160ff1690508060001461114f578060f81b8787815181106111025761110261164f565b60200101906001600160f81b031916908160001a90535085611123816118b4565b965061113290506002896118e4565b60ff1660000361114a57611147600189611914565b97505b611172565b61115a6002896118e4565b60ff166001036111725761116f600189611914565b97505b5060089290921c9180611184816118b4565b9150506110bb565b505050808061119a9061192d565b915050610ff2565b5060018360ff1610156112435760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b15760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bc836112c8565b98975050505050505050565b8051606090829060005b825181101561131d578281815181106112ed576112ed61164f565b01602001516001600160f81b03191660000361130b5780915061131d565b80611315816118b4565b9150506112d2565b5060008167ffffffffffffffff8111156113395761133961150b565b6040519080825280601f01601f191660200182016040528015611363576020820181803683370190505b50905060005b828110156113c9578381815181106113835761138361164f565b602001015160f81c60f81b8282815181106113a0576113a061164f565b60200101906001600160f81b031916908160001a905350806113c1816118b4565b915050611369565b50949350505050565b60006101a082840312156113e557600080fd5b50919050565b6000602082840312156113fd57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142d57600080fd5b6114378787611404565b945060c086018781111561144a57600080fd5b60408701945061145a8882611404565b93505086818701111561146c57600080fd5b50929591945092610100019150565b60005b8381101561149657818101518382015260200161147e565b50506000910152565b60208152600082518060208401526114be81604085016020870161147b565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114f957600080fd5b8135611504816114d2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153357600080fd5b813567ffffffffffffffff8082111561154b57600080fd5b818401915084601f83011261155f57600080fd5b8135818111156115715761157161150b565b604051601f8201601f19908116603f011681019083821181831017156115995761159961150b565b816040528281528760208487010111156115b257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f6576040808386379384019391909101906001016115d6565b50505050565b6101a08101604086833761161360408301866115d2565b60408460c084013760a08361010084013795945050505050565b60006020828403121561163f57600080fd5b8151801515811461150457600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167957607f821691505b6020821081036113e557634e487b7160e01b600052602260045260246000fd5b60008083546116a781611665565b600182811680156116bf57600181146116d457611703565b60ff1984168752821515830287019450611703565b8760005260208060002060005b858110156116fa5781548a8201529084019082016116e1565b50505082870194505b50929695505050505050565b6000825161172181846020870161147b565b9190910192915050565b6101a08101604083833761174560408301604085016115d2565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ad57600081815260208120601f850160051c8101602086101561178a5750805b601f850160051c820191505b818110156117a957828155600101611796565b5050505b505050565b815167ffffffffffffffff8111156117cc576117cc61150b565b6117e0816117da8454611665565b84611763565b602080601f83116001811461181557600084156117fd5750858301515b600019600386901b1c1916600185901b1785556117a9565b600085815260208120601f198616915b8281101561184457888601518255948401946001909101908401611825565b50858210156118625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611872565b8181038181111561052b5761052b611872565b6000600182016118c6576118c6611872565b5060010190565b808202811582820484141761052b5761052b611872565b600060ff83168061190557634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611872565b600061ffff80831681810361194457611944611872565b600101939250505056fea2646970667358221220d6515d1a8d86d1f4115f4f3d893789e2b8693c613cb1473c8a8ae536457a746164736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d2565b61025b565b604051908152602001610140565b61017d6101783660046113eb565b6104bd565b6040519015158152602001610140565b61017d61019b366004611415565b610531565b61015c600781565b6101b0610b05565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113eb565b610b19565b60025461012c906001600160a01b031681565b610204610b26565b604051610140919061149f565b610204610bb4565b6101b06102273660046114e7565b610c46565b61015c60045481565b6101b06102433660046114e7565b610c70565b6101b0610256366004611521565b610ce6565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fc565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162d565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cfe565b905060036040516104089190611699565b604051809103902081604051602001610421919061170f565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172b565b60405160208183030381529060405280519060200120610dd9565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162d565b92915050565b6000610a93565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f12ab5a9624956b76265fc0eec1d900b529add7b70792dbf4e5a843dd604b268685527e9d18fb29076cc91333c58ed5efb1c16e4c4895b9f4163f7d1b3f7c8d4026a660208601526000608086018661067387357f160d02be8268c1b255c0a0ebde2da936232ed0e153d6f8996f1defac51f930477f1a0354875e82d8f0ac2ac8aeb2dd4fc16d0da2df59f5071140d037af419e2a748461056c565b6106c360208801357f30247428f688b9e3e1d9a0b69811eac6c928394e70e275120108106592076ba07f2e71a076d6490c2f15b995d8b68ad3a0bfa3eb68a58fa33df69c0cfc955a8bd38461056c565b61071360408801357f15db0918919bf88282f6a317b654c06195e674b6d4d833681dab4bd774d036cf7f2b37f6e04a0bca3b2cdcaa0a9f8c2d544a3c5b360d4874c9c1894c59225bc0828461056c565b61076360608801357f0fe29eea9c50213502ef28c871f902b18884958f4eb0596758a1f8389a9cce5e7f2d3bc5feca96b1abbee7368fbcb0ade12a856a5785d8fc3cfb0ac8215850f1a68461056c565b6107b360808801357f1d002702c6a69936e861d6e2a0d8e2ac85847afea1277294beebdb36af9cc91a7f226a60872afad35dabefcc99fd4f84eb93add0df114af28147b4dd2770793bbb8461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f24e7ce3cf2d75f0b3bc44ddeeceef45d789f7c66da38ae223ef2eed52d894f1a6102808201527f170d835b2c98451e8b4e152ee67a3ceda06bbed8e6c68adc4a5c6f4342fec55c6102a08201527f1b2d30c8edee55fa0308f573fe5d1737f2e76ae12c5263f338e3b68e62911e4a6102c08201527f2ddcd10acc578091831b7e1a6edb36fb628c81b530513c55ffba19948e2004f66102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aab6000840135610538565b610ab86020840135610538565b610ac56040840135610538565b610ad26060840135610538565b610adf6080840135610538565b610aec60a0840135610538565b610af9818486888a6105d7565b90508060005260206000f35b610b0d610eed565b610b176000610f47565b565b610b21610eed565b600455565b60038054610b3390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f90611665565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b505050505081565b606060038054610bc390611665565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef90611665565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b610c4e610eed565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c78610eed565b6001600160a01b038116610cdd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f47565b610cee610eed565b6003610cfa82826117b2565b5050565b60606000610d0c8484611888565b60ff1667ffffffffffffffff811115610d2757610d2761150b565b604051908082528060200260200182016040528015610d50578160200160208202803683370190505b50905060ff84165b8360ff16811015610db557858160058110610d7557610d7561164f565b602002013582610d8860ff8816846118a1565b81518110610d9857610d9861164f565b602090810291909101015280610dad816118b4565b915050610d58565b50610dd060078251610dc791906118cd565b82906007610f97565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061162d565b15610e935760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610ed957600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610fa991906118cd565b67ffffffffffffffff811115610fc157610fc161150b565b6040519080825280601f01601f191660200182016040528015610feb576020820181803683370190505b5090506000805b87518161ffff1610156111a2576000888261ffff16815181106110175761101761164f565b6020026020010151905060008767ffffffffffffffff81111561103c5761103c61150b565b604051908082528060200260200182016040528015611065578160200160208202803683370190505b50905060005b888110156110b75761107e8160086118cd565b83901c8282815181106110935761109361164f565b60ff90921660209283029190910190910152806110af816118b4565b91505061106b565b5060005b8881101561118c5760008282815181106110d7576110d761164f565b602002602001015160ff1690508060001461114f578060f81b8787815181106111025761110261164f565b60200101906001600160f81b031916908160001a90535085611123816118b4565b965061113290506002896118e4565b60ff1660000361114a57611147600189611914565b97505b611172565b61115a6002896118e4565b60ff166001036111725761116f600189611914565b97505b5060089290921c9180611184816118b4565b9150506110bb565b505050808061119a9061192d565b915050610ff2565b5060018360ff1610156112435760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b15760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bc836112c8565b98975050505050505050565b8051606090829060005b825181101561131d578281815181106112ed576112ed61164f565b01602001516001600160f81b03191660000361130b5780915061131d565b80611315816118b4565b9150506112d2565b5060008167ffffffffffffffff8111156113395761133961150b565b6040519080825280601f01601f191660200182016040528015611363576020820181803683370190505b50905060005b828110156113c9578381815181106113835761138361164f565b602001015160f81c60f81b8282815181106113a0576113a061164f565b60200101906001600160f81b031916908160001a905350806113c1816118b4565b915050611369565b50949350505050565b60006101a082840312156113e557600080fd5b50919050565b6000602082840312156113fd57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142d57600080fd5b6114378787611404565b945060c086018781111561144a57600080fd5b60408701945061145a8882611404565b93505086818701111561146c57600080fd5b50929591945092610100019150565b60005b8381101561149657818101518382015260200161147e565b50506000910152565b60208152600082518060208401526114be81604085016020870161147b565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114f957600080fd5b8135611504816114d2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153357600080fd5b813567ffffffffffffffff8082111561154b57600080fd5b818401915084601f83011261155f57600080fd5b8135818111156115715761157161150b565b604051601f8201601f19908116603f011681019083821181831017156115995761159961150b565b816040528281528760208487010111156115b257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f6576040808386379384019391909101906001016115d6565b50505050565b6101a08101604086833761161360408301866115d2565b60408460c084013760a08361010084013795945050505050565b60006020828403121561163f57600080fd5b8151801515811461150457600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167957607f821691505b6020821081036113e557634e487b7160e01b600052602260045260246000fd5b60008083546116a781611665565b600182811680156116bf57600181146116d457611703565b60ff1984168752821515830287019450611703565b8760005260208060002060005b858110156116fa5781548a8201529084019082016116e1565b50505082870194505b50929695505050505050565b6000825161172181846020870161147b565b9190910192915050565b6101a08101604083833761174560408301604085016115d2565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ad57600081815260208120601f850160051c8101602086101561178a5750805b601f850160051c820191505b818110156117a957828155600101611796565b5050505b505050565b815167ffffffffffffffff8111156117cc576117cc61150b565b6117e0816117da8454611665565b84611763565b602080601f83116001811461181557600084156117fd5750858301515b600019600386901b1c1916600185901b1785556117a9565b600085815260208120601f198616915b8281101561184457888601518255948401946001909101908401611825565b50858210156118625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611872565b8181038181111561052b5761052b611872565b6000600182016118c6576118c6611872565b5060010190565b808202811582820484141761052b5761052b611872565b600060ff83168061190557634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611872565b600061ffff80831681810361194457611944611872565b600101939250505056fea2646970667358221220d6515d1a8d86d1f4115f4f3d893789e2b8693c613cb1473c8a8ae536457a746164736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5263,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)5626\"\n      },\n      {\n        \"astId\": 5266,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)5831\"\n      },\n      {\n        \"astId\": 5268,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 5270,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)5626\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)5831\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/VenmoSendProcessor.json",
    "content": "{\n  \"address\": \"0x574ACe7463dD126D2D22825BAa846cf1B3d87D4F\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x8a063a199777964415212c3ab9b7f2de763e2f9573b01eda36d3ea3bcfbd3bac\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0x574ACe7463dD126D2D22825BAa846cf1B3d87D4F\",\n    \"transactionIndex\": 3,\n    \"gasUsed\": \"1858638\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000001800000000000000000000000000000000400004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd7fc66049d718ecdacf33f87c7d951b97f3ac35bd0e3320e257c9e761005c6cd\",\n    \"transactionHash\": \"0x8a063a199777964415212c3ab9b7f2de763e2f9573b01eda36d3ea3bcfbd3bac\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 3,\n        \"blockNumber\": 6676863,\n        \"transactionHash\": \"0x8a063a199777964415212c3ab9b7f2de763e2f9573b01eda36d3ea3bcfbd3bac\",\n        \"address\": \"0x574ACe7463dD126D2D22825BAa846cf1B3d87D4F\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 4,\n        \"blockHash\": \"0xd7fc66049d718ecdacf33f87c7d951b97f3ac35bd0e3320e257c9e761005c6cd\"\n      }\n    ],\n    \"blockNumber\": 6676863,\n    \"cumulativeGasUsed\": \"2122104\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n    \"0x28B23225877AedFe6A9FB1B480026aFdF9801213\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"582bda84e77341f31e48e553d6955fd7\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/VenmoSendProcessor.sol\\\":\\\"VenmoSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa2162361ad63f6e15153b6c989746c3a21f95e4bb2ae9ee9806421413e2157c9\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/VenmoSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"./BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../verifiers/venmo_send_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70d57e9a07e2db041569362549e16a2f53a08a63a7ff92aaee69d1f71c0f5569\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\\\n    \\\\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\\\n    \\\\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\\\n    \\\\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\\\n    \\\\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\\\n    \\\\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\\\n    \\\\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\\\n    \\\\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\\\n    \\\\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\\\n    \\\\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\\\n    \\\\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\\\n    \\\\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\\\n    \\\\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xb757585b2fbeabdb975afef07753da27f657d8d34bd62130109e2d0bf28e0e63\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b506040516200226438038062002264833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611ebd620003a76000396000818160f40152610ad30152611ebd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea26469706673582212202c7aa89ec8dfecaa3afd18cf0ffdf3880e5900eeff3f10f9d4ce6d0193d3213b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea26469706673582212202c7aa89ec8dfecaa3afd18cf0ffdf3880e5900eeff3f10f9d4ce6d0193d3213b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1403,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)1958\"\n      },\n      {\n        \"astId\": 1406,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)1973\"\n      },\n      {\n        \"astId\": 1408,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)1958\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)1973\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/VenmoSendProcessorV2.json",
    "content": "{\n  \"address\": \"0xd654400e33c54E4E811b979b8D14F9fc9543683C\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xfcd6325b5bfb24881831dc70a3f1d99688d245aa37b6ade7c1d650d8af3290d6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n    \"contractAddress\": \"0xd654400e33c54E4E811b979b8D14F9fc9543683C\",\n    \"transactionIndex\": 47,\n    \"gasUsed\": \"1903044\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000400000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000800000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xa3caad646f341d6b34a53047588bf726f3ba3e17e2dd4f68efa72d726a4b8add\",\n    \"transactionHash\": \"0xfcd6325b5bfb24881831dc70a3f1d99688d245aa37b6ade7c1d650d8af3290d6\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 47,\n        \"blockNumber\": 16891386,\n        \"transactionHash\": \"0xfcd6325b5bfb24881831dc70a3f1d99688d245aa37b6ade7c1d650d8af3290d6\",\n        \"address\": \"0xd654400e33c54E4E811b979b8D14F9fc9543683C\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x000000000000000000000000dd93e0f5fc32c86a568d87cb4f08598f55e980f3\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 145,\n        \"blockHash\": \"0xa3caad646f341d6b34a53047588bf726f3ba3e17e2dd4f68efa72d726a4b8add\"\n      }\n    ],\n    \"blockNumber\": 16891386,\n    \"cumulativeGasUsed\": \"8501480\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x80e5aB2921e23192B2454f6a386Fd7032dad932E\",\n    \"0xbf452ee0B221A4dDdD118772848A360722850ffc\",\n    \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n    \"venmo@venmo.com\",\n    \"30\"\n  ],\n  \"numDeployments\": 3,\n  \"solcInputHash\": \"3ead3a1930264a5f1428c2beccc481e4\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":\\\"VenmoSendProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_send_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _venmoMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x32dac49aa74b2b58ae06f85454adfcef11355c507f18c79ffa57cc0ca7a62ed0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 5710629204359318057562498392234897061794505526378244639613545081979421872324;\\\\n    uint256 constant deltax2 = 990656993167988662763349194790300993619547607285680693352122387169954518876;\\\\n    uint256 constant deltay1 = 716219014029453087010203485855017030343957665868140907538168510860723855404;\\\\n    uint256 constant deltay2 = 15567073068481787678459322691280596720950847803967120869528969231388542383007;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 3627016935680980991432758845809120437097698562642321662019774941798047598180;\\\\n    uint256 constant IC0y = 16742737478481137559777273336649173908087975045426893354724005348183061433359;\\\\n    \\\\n    uint256 constant IC1x = 1454889468509402624274228018232533000837827531552657849863656594197598947498;\\\\n    uint256 constant IC1y = 21114519264105667881501109217530601184286085076749464919673271702318856586869;\\\\n    \\\\n    uint256 constant IC2x = 15214926606177919954497590021391485480795904680262796779354958872907701613369;\\\\n    uint256 constant IC2y = 3436701283643568631088610954415601741399004409005447167420424641912447528939;\\\\n    \\\\n    uint256 constant IC3x = 4535577697185795754970511618264939460763831131849914629687538976336257649268;\\\\n    uint256 constant IC3y = 7758558535557743288212279084775965030097651866120453423634300893790511261820;\\\\n    \\\\n    uint256 constant IC4x = 874294953994422297831973347765527399192587644625708091600444498339317231142;\\\\n    uint256 constant IC4y = 987062449590966973283739390864507348641413150099442677760662058272414279274;\\\\n    \\\\n    uint256 constant IC5x = 21093306057635441117249393023592254587788813974241613308459037792013982125271;\\\\n    uint256 constant IC5y = 2674227458751675036151996130714025181946977717008550031124827209614433661640;\\\\n    \\\\n    uint256 constant IC6x = 13846687013867984054231693830774779045583700534400211257658890706223553634739;\\\\n    uint256 constant IC6y = 8017285138819571587063238313118652954321504644123983130004849545264828919081;\\\\n    \\\\n    uint256 constant IC7x = 13134004890952141957850059371765174729898824494756098133509785273144965229605;\\\\n    uint256 constant IC7y = 19833383650616654544301917274181853787895876513168493371626228893058581160277;\\\\n    \\\\n    uint256 constant IC8x = 15730855678085463666228938279082107543444904323060443712618683292548728266981;\\\\n    uint256 constant IC8y = 11187003173972315212472857297424367154976035201682387760241185052675631112914;\\\\n    \\\\n    uint256 constant IC9x = 19431007015983296833648365920726396734910027676221391642968597625199383752634;\\\\n    uint256 constant IC9y = 21132440606561643161647678729377817341013518219983716149257194049459184921050;\\\\n    \\\\n    uint256 constant IC10x = 4559717915456495626304866642697317683057747436742022494016974327403606371979;\\\\n    uint256 constant IC10y = 11478380993372530002009436682140297146781606321299572933211280870931334446617;\\\\n    \\\\n    uint256 constant IC11x = 16525805622865173604160997674689687443990633252176419982940261013647563901344;\\\\n    uint256 constant IC11y = 792201218354373970098710160330509619168590675536085985581042389294282406443;\\\\n    \\\\n    uint256 constant IC12x = 10525116069038722935367461628431297752051968830490923775813610986261326824582;\\\\n    uint256 constant IC12y = 10970802876973329565857167947893820731407652682848506683295471907792738767120;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x1ddacf233eeb13eaeaac81146d4f8b3421d8724ffdb00e3fbf439c34c479373c\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b50604051620022d7380380620022d783398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611f1f620003b86000396000818161010a0152610b850152611f1f6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610241578063dbac582114610254578063f2fde38b1461025d578063f6c7226b1461027057600080fd5b8063b2a3fda4146101fe578063b870676c14610211578063c0d05fed14610224578063ced1e9781461023957600080fd5b80638cbac0fa116100d35780638cbac0fa1461018c5780638da5cb5b1461019f5780638fe0ab8e146101b0578063a8ef333f146101eb57600080fd5b806315d276e11461010557806319d09152146101495780633d0c9cc41461016c578063715018a614610182575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046118b7565b610283565b6040519015158152602001610140565b610174600781565b604051908152602001610140565b61018a6102f7565b005b61015c61019a3660046118e1565b61030b565b6000546001600160a01b031661012c565b6101c36101be366004611947565b610b74565b604080519586526020860194909452928401919091526060830152608082015260a001610140565b60015461012c906001600160a01b031681565b61018a61020c3660046118b7565b610e15565b60025461012c906001600160a01b031681565b61022c610e22565b6040516101409190611984565b61022c610eb0565b61018a61024f3660046119cc565b610f42565b61017460045481565b61018a61026b3660046119cc565b610f6c565b61018a61027e3660046119ff565b610fe2565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190611ab0565b92915050565b6102ff610ffa565b6103096000611054565b565b6000610aa2565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610343576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610379576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103aa576000805260206000f35b5050505050565b7f0804d19f43c6e0aa984ef2d1e375b431a8fe0835289c656e6bba9441f166c66485527f25040db85863a4bb8731ec62d2c93ad23ff5aeba9f07860c47e85bd014a20c0f60208601526000608086018661044e87357f2eae64f73b7738369e069525e66cfe0748a4ff7a2278be1c2ff348129e5cc6757f03377031a6d2d0e51c3ba8115124ff36fbec49d2cf074f1317f2b0797133c8aa84610346565b61049e60208801357f07991a9f64c6f476627d8224834870d0468de2a4dda39e3f640486598d9d6feb7f21a357e17fb9c4a2035b9157f3ee366a49b2ddf8f741b8bc295664ce3d74f33984610346565b6104ee60408801357f1127304267d4dc4109446b0bc64adf5d2fc1b09e30d6bb5172b9e6237793687c7f0a070bc6e9c8f2337f5e496e80a7dfb2f7d8120e051f6e7a82431cd477768a7484610346565b61053e60608801357f022ea8551762fb0d484eaf5dbaa9ebfc61570969e16c50553fc5256593dca66a7f01eed55a356e1365ecafc63de65edc7ed13717958ea0c4749452d7e393812e2684610346565b61058e60808801357f05e98f216225c8fd66611cf79935b4df8b4e1c1fffb6ede6384de90c66eb32c87f2ea2635dac52a7d0d21dfd61ef9bb70c5e6c969cfa3a53de181fd4ea568c4cd784610346565b6105de60a08801357f11b99f617cbc07d59b321ae93d4fb398afc90fa19aea298eb111c4f62c8e2d297f1e9cf276628411884bf183a85eeccacbb63bf25d35a6d4554f87f4efc6cce1b384610346565b61062e60c08801357f2bd94c1e4213428e3647ba827fb2e473dd95460a9b8b0879693fb8c0a9b061557f1d0995553f2d35c98c8945170ee69c13085388df1221105c8ef10e7086426c2584610346565b61067e60e08801357f18bb9e91ce7be822a53d86b569077a4a12059e6923182dd5813951c1c6de62d27f22c7594a5e07dd0ac0bcfd42e3865beeb3b8996939e882e48c172393ec06a0e584610346565b6106cf6101008801357f2eb8899ac4d9f3c81edff23c8e14363a0e8998432c3e72bd886cd5e7fe16e9da7f2af58f6b609a74fe1a52d27026ef1fd8e719145496bc31704cc23c8144772fba84610346565b6107206101208801357f1960888dce35e4417f924cafc664f31501a7a0e0bb584179b7d0de2402783e197f0a14b5795fc594ff84bacee8fa1e316c5cf9b9dfff5f16ed5d4c8cd1d7e2ee8b84610346565b6107716101408801357f01c05eb851284bf3d8d069756a0a26c55d0b53ccd29b1be951cda7061c8f7a2b7f248946469d2ca9a1b04005223ad17489f4a081ae906286952ac7ebb5308349a084610346565b6107c26101608801357f1841411f17ad3fbb997447e9f644114194d820241b5ad22e424a8e79340ad1107f1745012c998ad198581a529c8ad6dacca6372bf1b865978299698c2716fb848684610346565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0ca01a01b0e88539a2eb8751fa5a97c62e0c0d170309c2a63cdbf4d824bc50c46102808201527f0230b1261f6ff569ba908e8b64b3457d4457f211379daf0d8bdf40230ed4575c6102a08201527f01955d97b88498fecafedeaacfddd0d70ef179ff31d1a88f9ea74d1e9f45a02c6102c08201527f226aa6afbcf630c798ca6ef7896ed4b17694d0ec43e17e74fc5a68b68e9a339f6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aba6000840135610312565b610ac76020840135610312565b610ad46040840135610312565b610ae16060840135610312565b610aee6080840135610312565b610afb60a0840135610312565b610b0860c0840135610312565b610b1560e0840135610312565b610b23610100840135610312565b610b31610120840135610312565b610b3f610140840135610312565b610b4d610160840135610312565b610b5b610180840135610312565b610b68818486888a6103b1565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf75760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610c2a918a919082019060c0830190610100840190600401611ad2565b602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611ab0565b610ca75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bee565b610cb5610100870135610283565b610d015760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bee565b6000610d148761010001600160046110a4565b90506003604051610d259190611b69565b604051809103902081604051602001610d3e9190611bdf565b6040516020818303038152906040528051906020012014610da15760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bee565b610dbd6006610db78961010001600460066110a4565b9061117f565b9550600454610dd86000610db78a61010001600660086110a4565b610de29190611c11565b945061020087013593506102208701359250610e02610240880135611197565b5093959294919350916102609091013590565b610e1d610ffa565b600455565b60038054610e2f90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90611b35565b8015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b505050505081565b606060038054610ebf90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb90611b35565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b610f4a610ffa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f74610ffa565b6001600160a01b038116610fd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bee565b61034381611054565b610fea610ffa565b6003610ff68282611c73565b5050565b6000546001600160a01b031633146103095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110b28484611d33565b60ff1667ffffffffffffffff8111156110cd576110cd6119e9565b6040519080825280602002602001820160405280156110f6578160200160208202803683370190505b50905060ff84165b8360ff1681101561115b578581600c811061111b5761111b611b1f565b60200201358261112e60ff881684611d4c565b8151811061113e5761113e611b1f565b60209081029190910101528061115381611d5f565b9150506110fe565b506111766007825161116d9190611d78565b829060076112ab565b95945050505050565b600061119083601760f91b846115dc565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190611ab0565b156112515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bee565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561129757600080fd5b505af11580156103aa573d6000803e3d6000fd5b60606000808386516112bd9190611d78565b67ffffffffffffffff8111156112d5576112d56119e9565b6040519080825280601f01601f1916602001820160405280156112ff576020820181803683370190505b5090506000805b87518161ffff1610156114b6576000888261ffff168151811061132b5761132b611b1f565b6020026020010151905060008767ffffffffffffffff811115611350576113506119e9565b604051908082528060200260200182016040528015611379578160200160208202803683370190505b50905060005b888110156113cb57611392816008611d78565b83901c8282815181106113a7576113a7611b1f565b60ff90921660209283029190910190910152806113c381611d5f565b91505061137f565b5060005b888110156114a05760008282815181106113eb576113eb611b1f565b602002602001015160ff16905080600014611463578060f81b87878151811061141657611416611b1f565b60200101906001600160f81b031916908160001a9053508561143781611d5f565b96506114469050600289611d8f565b60ff1660000361145e5761145b600189611dbf565b97505b611486565b61146e600289611d8f565b60ff1660010361148657611483600189611dbf565b97505b5060089290921c918061149881611d5f565b9150506113cf565b50505080806114ae90611dd8565b915050611306565b5060018360ff1610156115575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bee565b858111156115c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bee565b60006115d0836117ad565b98975050505050505050565b600083818080805b845181101561173257603060f81b85828151811061160457611604611b1f565b01602001516001600160f81b031916108015906116455750603960f81b85828151811061163357611633611b1f565b01602001516001600160f81b03191611155b1561168857603085828151811061165e5761165e611b1f565b0160200151611670919060f81c611d4c565b61167b85600a611d78565b6116859190611c11565b93505b811561169c578261169881611d5f565b9350505b876001600160f81b0319168582815181106116b9576116b9611b1f565b01602001516001600160f81b0319160361172057811561171b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bee565b600191505b8061172a81611d5f565b9150506115e4565b508582111561178e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bee565b6117988287611d4c565b6117a390600a611edd565b6115d09084611d78565b8051606090829060005b8251811015611802578281815181106117d2576117d2611b1f565b01602001516001600160f81b0319166000036117f057809150611802565b806117fa81611d5f565b9150506117b7565b5060008167ffffffffffffffff81111561181e5761181e6119e9565b6040519080825280601f01601f191660200182016040528015611848576020820181803683370190505b50905060005b828110156118ae5783818151811061186857611868611b1f565b602001015160f81c60f81b82828151811061188557611885611b1f565b60200101906001600160f81b031916908160001a905350806118a681611d5f565b91505061184e565b50949350505050565b6000602082840312156118c957600080fd5b5035919050565b80604081018310156102f157600080fd5b6000806000806102808086880312156118f957600080fd5b61190387876118d0565b945060c086018781111561191657600080fd5b60408701945061192688826118d0565b93505086818701111561193857600080fd5b50929591945092610100019150565b6000610280828403121561195a57600080fd5b50919050565b60005b8381101561197b578181015183820152602001611963565b50506000910152565b60208152600082518060208401526119a3816040850160208701611960565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034357600080fd5b6000602082840312156119de57600080fd5b8135611190816119b7565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a1157600080fd5b813567ffffffffffffffff80821115611a2957600080fd5b818401915084601f830112611a3d57600080fd5b813581811115611a4f57611a4f6119e9565b604051601f8201601f19908116603f01168101908382118183101715611a7757611a776119e9565b81604052828152876020848701011115611a9057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611ac257600080fd5b8151801515811461119057600080fd5b61028081016040808784378083018660005b6002811015611b0157838284379183019190830190600101611ae4565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611b4957607f821691505b60208210810361195a57634e487b7160e01b600052602260045260246000fd5b6000808354611b7781611b35565b60018281168015611b8f5760018114611ba457611bd3565b60ff1984168752821515830287019450611bd3565b8760005260208060002060005b85811015611bca5781548a820152908401908201611bb1565b50505082870194505b50929695505050505050565b60008251611bf1818460208701611960565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102f1576102f1611bfb565b601f821115611c6e57600081815260208120601f850160051c81016020861015611c4b5750805b601f850160051c820191505b81811015611c6a57828155600101611c57565b5050505b505050565b815167ffffffffffffffff811115611c8d57611c8d6119e9565b611ca181611c9b8454611b35565b84611c24565b602080601f831160018114611cd65760008415611cbe5750858301515b600019600386901b1c1916600185901b178555611c6a565b600085815260208120601f198616915b82811015611d0557888601518255948401946001909101908401611ce6565b5085821015611d235787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102f1576102f1611bfb565b818103818111156102f1576102f1611bfb565b600060018201611d7157611d71611bfb565b5060010190565b80820281158282048414176102f1576102f1611bfb565b600060ff831680611db057634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102f1576102f1611bfb565b600061ffff808316818103611def57611def611bfb565b6001019392505050565b600181815b80851115611e34578160001904821115611e1a57611e1a611bfb565b80851615611e2757918102915b93841c9390800290611dfe565b509250929050565b600082611e4b575060016102f1565b81611e58575060006102f1565b8160018114611e6e5760028114611e7857611e94565b60019150506102f1565b60ff841115611e8957611e89611bfb565b50506001821b6102f1565b5060208310610133831016604e8410600b8410161715611eb7575081810a6102f1565b611ec18383611df9565b8060001904821115611ed557611ed5611bfb565b029392505050565b60006111908383611e3c56fea26469706673582212200be7e3b9a6eb7de8c23a1e84055a3d9c74d2675fb90c7a9d41d8e516037cec9a64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610241578063dbac582114610254578063f2fde38b1461025d578063f6c7226b1461027057600080fd5b8063b2a3fda4146101fe578063b870676c14610211578063c0d05fed14610224578063ced1e9781461023957600080fd5b80638cbac0fa116100d35780638cbac0fa1461018c5780638da5cb5b1461019f5780638fe0ab8e146101b0578063a8ef333f146101eb57600080fd5b806315d276e11461010557806319d09152146101495780633d0c9cc41461016c578063715018a614610182575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046118b7565b610283565b6040519015158152602001610140565b610174600781565b604051908152602001610140565b61018a6102f7565b005b61015c61019a3660046118e1565b61030b565b6000546001600160a01b031661012c565b6101c36101be366004611947565b610b74565b604080519586526020860194909452928401919091526060830152608082015260a001610140565b60015461012c906001600160a01b031681565b61018a61020c3660046118b7565b610e15565b60025461012c906001600160a01b031681565b61022c610e22565b6040516101409190611984565b61022c610eb0565b61018a61024f3660046119cc565b610f42565b61017460045481565b61018a61026b3660046119cc565b610f6c565b61018a61027e3660046119ff565b610fe2565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190611ab0565b92915050565b6102ff610ffa565b6103096000611054565b565b6000610aa2565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610343576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610379576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103aa576000805260206000f35b5050505050565b7f0804d19f43c6e0aa984ef2d1e375b431a8fe0835289c656e6bba9441f166c66485527f25040db85863a4bb8731ec62d2c93ad23ff5aeba9f07860c47e85bd014a20c0f60208601526000608086018661044e87357f2eae64f73b7738369e069525e66cfe0748a4ff7a2278be1c2ff348129e5cc6757f03377031a6d2d0e51c3ba8115124ff36fbec49d2cf074f1317f2b0797133c8aa84610346565b61049e60208801357f07991a9f64c6f476627d8224834870d0468de2a4dda39e3f640486598d9d6feb7f21a357e17fb9c4a2035b9157f3ee366a49b2ddf8f741b8bc295664ce3d74f33984610346565b6104ee60408801357f1127304267d4dc4109446b0bc64adf5d2fc1b09e30d6bb5172b9e6237793687c7f0a070bc6e9c8f2337f5e496e80a7dfb2f7d8120e051f6e7a82431cd477768a7484610346565b61053e60608801357f022ea8551762fb0d484eaf5dbaa9ebfc61570969e16c50553fc5256593dca66a7f01eed55a356e1365ecafc63de65edc7ed13717958ea0c4749452d7e393812e2684610346565b61058e60808801357f05e98f216225c8fd66611cf79935b4df8b4e1c1fffb6ede6384de90c66eb32c87f2ea2635dac52a7d0d21dfd61ef9bb70c5e6c969cfa3a53de181fd4ea568c4cd784610346565b6105de60a08801357f11b99f617cbc07d59b321ae93d4fb398afc90fa19aea298eb111c4f62c8e2d297f1e9cf276628411884bf183a85eeccacbb63bf25d35a6d4554f87f4efc6cce1b384610346565b61062e60c08801357f2bd94c1e4213428e3647ba827fb2e473dd95460a9b8b0879693fb8c0a9b061557f1d0995553f2d35c98c8945170ee69c13085388df1221105c8ef10e7086426c2584610346565b61067e60e08801357f18bb9e91ce7be822a53d86b569077a4a12059e6923182dd5813951c1c6de62d27f22c7594a5e07dd0ac0bcfd42e3865beeb3b8996939e882e48c172393ec06a0e584610346565b6106cf6101008801357f2eb8899ac4d9f3c81edff23c8e14363a0e8998432c3e72bd886cd5e7fe16e9da7f2af58f6b609a74fe1a52d27026ef1fd8e719145496bc31704cc23c8144772fba84610346565b6107206101208801357f1960888dce35e4417f924cafc664f31501a7a0e0bb584179b7d0de2402783e197f0a14b5795fc594ff84bacee8fa1e316c5cf9b9dfff5f16ed5d4c8cd1d7e2ee8b84610346565b6107716101408801357f01c05eb851284bf3d8d069756a0a26c55d0b53ccd29b1be951cda7061c8f7a2b7f248946469d2ca9a1b04005223ad17489f4a081ae906286952ac7ebb5308349a084610346565b6107c26101608801357f1841411f17ad3fbb997447e9f644114194d820241b5ad22e424a8e79340ad1107f1745012c998ad198581a529c8ad6dacca6372bf1b865978299698c2716fb848684610346565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0ca01a01b0e88539a2eb8751fa5a97c62e0c0d170309c2a63cdbf4d824bc50c46102808201527f0230b1261f6ff569ba908e8b64b3457d4457f211379daf0d8bdf40230ed4575c6102a08201527f01955d97b88498fecafedeaacfddd0d70ef179ff31d1a88f9ea74d1e9f45a02c6102c08201527f226aa6afbcf630c798ca6ef7896ed4b17694d0ec43e17e74fc5a68b68e9a339f6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aba6000840135610312565b610ac76020840135610312565b610ad46040840135610312565b610ae16060840135610312565b610aee6080840135610312565b610afb60a0840135610312565b610b0860c0840135610312565b610b1560e0840135610312565b610b23610100840135610312565b610b31610120840135610312565b610b3f610140840135610312565b610b4d610160840135610312565b610b5b610180840135610312565b610b68818486888a6103b1565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf75760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610c2a918a919082019060c0830190610100840190600401611ad2565b602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611ab0565b610ca75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bee565b610cb5610100870135610283565b610d015760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bee565b6000610d148761010001600160046110a4565b90506003604051610d259190611b69565b604051809103902081604051602001610d3e9190611bdf565b6040516020818303038152906040528051906020012014610da15760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bee565b610dbd6006610db78961010001600460066110a4565b9061117f565b9550600454610dd86000610db78a61010001600660086110a4565b610de29190611c11565b945061020087013593506102208701359250610e02610240880135611197565b5093959294919350916102609091013590565b610e1d610ffa565b600455565b60038054610e2f90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90611b35565b8015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b505050505081565b606060038054610ebf90611b35565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb90611b35565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b5050505050905090565b610f4a610ffa565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f74610ffa565b6001600160a01b038116610fd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bee565b61034381611054565b610fea610ffa565b6003610ff68282611c73565b5050565b6000546001600160a01b031633146103095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110b28484611d33565b60ff1667ffffffffffffffff8111156110cd576110cd6119e9565b6040519080825280602002602001820160405280156110f6578160200160208202803683370190505b50905060ff84165b8360ff1681101561115b578581600c811061111b5761111b611b1f565b60200201358261112e60ff881684611d4c565b8151811061113e5761113e611b1f565b60209081029190910101528061115381611d5f565b9150506110fe565b506111766007825161116d9190611d78565b829060076112ab565b95945050505050565b600061119083601760f91b846115dc565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190611ab0565b156112515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bee565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561129757600080fd5b505af11580156103aa573d6000803e3d6000fd5b60606000808386516112bd9190611d78565b67ffffffffffffffff8111156112d5576112d56119e9565b6040519080825280601f01601f1916602001820160405280156112ff576020820181803683370190505b5090506000805b87518161ffff1610156114b6576000888261ffff168151811061132b5761132b611b1f565b6020026020010151905060008767ffffffffffffffff811115611350576113506119e9565b604051908082528060200260200182016040528015611379578160200160208202803683370190505b50905060005b888110156113cb57611392816008611d78565b83901c8282815181106113a7576113a7611b1f565b60ff90921660209283029190910190910152806113c381611d5f565b91505061137f565b5060005b888110156114a05760008282815181106113eb576113eb611b1f565b602002602001015160ff16905080600014611463578060f81b87878151811061141657611416611b1f565b60200101906001600160f81b031916908160001a9053508561143781611d5f565b96506114469050600289611d8f565b60ff1660000361145e5761145b600189611dbf565b97505b611486565b61146e600289611d8f565b60ff1660010361148657611483600189611dbf565b97505b5060089290921c918061149881611d5f565b9150506113cf565b50505080806114ae90611dd8565b915050611306565b5060018360ff1610156115575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bee565b858111156115c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bee565b60006115d0836117ad565b98975050505050505050565b600083818080805b845181101561173257603060f81b85828151811061160457611604611b1f565b01602001516001600160f81b031916108015906116455750603960f81b85828151811061163357611633611b1f565b01602001516001600160f81b03191611155b1561168857603085828151811061165e5761165e611b1f565b0160200151611670919060f81c611d4c565b61167b85600a611d78565b6116859190611c11565b93505b811561169c578261169881611d5f565b9350505b876001600160f81b0319168582815181106116b9576116b9611b1f565b01602001516001600160f81b0319160361172057811561171b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bee565b600191505b8061172a81611d5f565b9150506115e4565b508582111561178e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bee565b6117988287611d4c565b6117a390600a611edd565b6115d09084611d78565b8051606090829060005b8251811015611802578281815181106117d2576117d2611b1f565b01602001516001600160f81b0319166000036117f057809150611802565b806117fa81611d5f565b9150506117b7565b5060008167ffffffffffffffff81111561181e5761181e6119e9565b6040519080825280601f01601f191660200182016040528015611848576020820181803683370190505b50905060005b828110156118ae5783818151811061186857611868611b1f565b602001015160f81c60f81b82828151811061188557611885611b1f565b60200101906001600160f81b031916908160001a905350806118a681611d5f565b91505061184e565b50949350505050565b6000602082840312156118c957600080fd5b5035919050565b80604081018310156102f157600080fd5b6000806000806102808086880312156118f957600080fd5b61190387876118d0565b945060c086018781111561191657600080fd5b60408701945061192688826118d0565b93505086818701111561193857600080fd5b50929591945092610100019150565b6000610280828403121561195a57600080fd5b50919050565b60005b8381101561197b578181015183820152602001611963565b50506000910152565b60208152600082518060208401526119a3816040850160208701611960565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034357600080fd5b6000602082840312156119de57600080fd5b8135611190816119b7565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a1157600080fd5b813567ffffffffffffffff80821115611a2957600080fd5b818401915084601f830112611a3d57600080fd5b813581811115611a4f57611a4f6119e9565b604051601f8201601f19908116603f01168101908382118183101715611a7757611a776119e9565b81604052828152876020848701011115611a9057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611ac257600080fd5b8151801515811461119057600080fd5b61028081016040808784378083018660005b6002811015611b0157838284379183019190830190600101611ae4565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611b4957607f821691505b60208210810361195a57634e487b7160e01b600052602260045260246000fd5b6000808354611b7781611b35565b60018281168015611b8f5760018114611ba457611bd3565b60ff1984168752821515830287019450611bd3565b8760005260208060002060005b85811015611bca5781548a820152908401908201611bb1565b50505082870194505b50929695505050505050565b60008251611bf1818460208701611960565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102f1576102f1611bfb565b601f821115611c6e57600081815260208120601f850160051c81016020861015611c4b5750805b601f850160051c820191505b81811015611c6a57828155600101611c57565b5050505b505050565b815167ffffffffffffffff811115611c8d57611c8d6119e9565b611ca181611c9b8454611b35565b84611c24565b602080601f831160018114611cd65760008415611cbe5750858301515b600019600386901b1c1916600185901b178555611c6a565b600085815260208120601f198616915b82811015611d0557888601518255948401946001909101908401611ce6565b5085821015611d235787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102f1576102f1611bfb565b818103818111156102f1576102f1611bfb565b600060018201611d7157611d71611bfb565b5060010190565b80820281158282048414176102f1576102f1611bfb565b600060ff831680611db057634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102f1576102f1611bfb565b600061ffff808316818103611def57611def611bfb565b6001019392505050565b600181815b80851115611e34578160001904821115611e1a57611e1a611bfb565b80851615611e2757918102915b93841c9390800290611dfe565b509250929050565b600082611e4b575060016102f1565b81611e58575060006102f1565b8160018114611e6e5760028114611e7857611e94565b60019150506102f1565b60ff841115611e8957611e89611bfb565b50506001821b6102f1565b5060208310610133831016604e8410600b8410161715611eb7575081810a6102f1565b611ec18383611df9565b8060001904821115611ed557611ed5611bfb565b029392505050565b60006111908383611e3c56fea26469706673582212200be7e3b9a6eb7de8c23a1e84055a3d9c74d2675fb90c7a9d41d8e516037cec9a64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5263,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)5626\"\n      },\n      {\n        \"astId\": 5266,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)5831\"\n      },\n      {\n        \"astId\": 5268,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 5270,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)5626\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)5831\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/1dc9a2624d5fa8a2a6f6105ee74be00a.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 6865443700594715891152328791607889526330887414086993633068747938072457241685;\\n    uint256 constant IC0y = 10468945301756143970646006543367573774178372611766681195220999860357915797944;\\n    \\n    uint256 constant IC1x = 10704722446523266721180562643447437149651020230245607194259102672100716655622;\\n    uint256 constant IC1y = 13835922647350771093409292403482106984225273572439540259619248291997497190338;\\n    \\n    uint256 constant IC2x = 9082820476663057749813862646863505694595521088627361022677522902057835975674;\\n    uint256 constant IC2y = 2956559811855122372464720724455222044024045806141600873519434424076727259549;\\n    \\n    uint256 constant IC3x = 3792740326745716842453603765202940845282157902511414580984405164815472719626;\\n    uint256 constant IC3y = 13398930886279937280023561976368048826175146409027429215170876003688906362216;\\n    \\n    uint256 constant IC4x = 1141781699151428606267044235130552909660238448565862470582441408755286403649;\\n    uint256 constant IC4y = 16789658000733015308721768726691601134554495877403753820826002406384958395008;\\n    \\n    uint256 constant IC5x = 12543171042042072636131914829125043929342724675040777036405607612956292855474;\\n    uint256 constant IC5y = 4103351600393692854136490223669999878503018507420468298933278541160167154342;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n\\n    uint256 constant IC0x = 7948712917874849781328365661027367011398916994267746344840851439625837578323;\\n    uint256 constant IC0y = 14445610336427827969214783890094209349619216720637343095223018572693254280923;\\n\\n    uint256 constant IC1x = 3654976868371838169631577898462947005550108125685649400186026683210975806547;\\n    uint256 constant IC1y = 7383470632301847779131345725687431208414525939319998905342796582584383932784;\\n\\n    uint256 constant IC2x = 15960136517117002583905099076229506420678130465330836605642076667698312488907;\\n    uint256 constant IC2y = 10981003641590459938830276725941498612829685925850889415515039958666798745545;\\n\\n    uint256 constant IC3x = 18064147597098347735634254758923927729758051955626895483758091493962336324910;\\n    uint256 constant IC3y = 14561976814062079545004557051651175882415454473414826337411715544694691078488;\\n\\n    uint256 constant IC4x = 5479872440797886105045613557892343574379959348291323344571145668056905130790;\\n    uint256 constant IC4y = 19816668883377774512316396795679515122358992446677555233530823190449668202575;\\n\\n    uint256 constant IC5x = 9764995418164291848924916053122788044578670279004409359935206951759326535751;\\n    uint256 constant IC5y = 11151240738595525109186562114546767429226785384258075837825604200334229399893;\\n\\n    uint256 constant IC6x = 8592289604370662283816667811371636409851377122184258261984779162566069289701;\\n    uint256 constant IC6y = 14924863702174947616504138427154175911132478861008643941575632275190130139352;\\n\\n    uint256 constant IC7x = 18144310048336844926716356091507529474953804436633311455291234260603469939801;\\n    uint256 constant IC7y = 20695654519010539727518673528536864282905304035588394263484365314168181698771;\\n\\n    uint256 constant IC8x = 6502380984206062082509747555585722773109086149921002084837192664976139632635;\\n    uint256 constant IC8y = 20559694265554344023542679863623632229239552087994730960172389697388976005511;\\n\\n    uint256 constant IC9x = 20112907151747105787761530796573701791334087761671369712034010592321424588594;\\n    uint256 constant IC9y = 7868275330531868976088552522626764067554872392097431803379373791917043873429;\\n\\n    uint256 constant IC10x = 21738568466342470712305504479308744377477421607586657477021567762815751353985;\\n    uint256 constant IC10y = 15899136431442502164449286654852349998271141738582178828650897248716421930967;\\n\\n    uint256 constant IC11x = 8797574036872579022038442307145559829777119719185174358600414786794648200526;\\n    uint256 constant IC11y = 19158045316273481821441527564745598208594831388291307046183673615092116714767;\\n\\n    uint256 constant IC12x = 1856159710792583584076099033562199824825551035760525968182870506068750338922;\\n    uint256 constant IC12y = 5431689035393664841658365783566955093050903672278814147361678362199701787106;\\n\\n    uint256 constant IC13x = 1326184215165888620491943578175089960460457074386949049899809721605475868360;\\n    uint256 constant IC13y = 19798068085286831236096103256261325470985925228876029833389405086405680467005;\\n\\n    uint256 constant IC14x = 21303925226345182261601479972988106925149727015068245014063996271014722518363;\\n    uint256 constant IC14y = 13822581075918761258491041321378418848172590182506086615070972333032971332948;\\n\\n    uint256 constant IC15x = 7601301681882298785665130103217482061846330487834337423048688553591898089998;\\n    uint256 constant IC15y = 16353595650180105876268966027044363473882857313997670459546834066677499432092;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4244199450261939264855608361292422830494076317114087381524682052624987594898;\\n    uint256 constant IC0y = 19645046663091251713731947178298410964505911169469312617571077810087266152857;\\n    \\n    uint256 constant IC1x = 8174035567318043885708495283345132428559378659325609203776402978017320167293;\\n    uint256 constant IC1y = 14468913963303826866215469807518170784403093656434266017779773880257875040240;\\n    \\n    uint256 constant IC2x = 1616603017751755006393562987905285502270823546542543926944627007410237341389;\\n    uint256 constant IC2y = 19363001402611389684892375352655759926342431445082754246958964085276938403807;\\n    \\n    uint256 constant IC3x = 18206398417831844023515176703806764449138507779128726420915001707110434960674;\\n    uint256 constant IC3y = 15788322487150289973315668363845259348952014356217153206401112660482394149984;\\n    \\n    uint256 constant IC4x = 5556506419684194840114638678281266193177223336781663103282498332205775709966;\\n    uint256 constant IC4y = 3612832929973582572292953270578481883198123808328242543078950263985599193867;\\n    \\n    uint256 constant IC5x = 12215062759329544988171802286780059092087193981868301475398051148747302789508;\\n    uint256 constant IC5y = 1980305058569746313443850675062124742589110071159814897086099250727381686120;\\n    \\n    uint256 constant IC6x = 3493933421620238986193524740698678015926658911199434587596433896655331481231;\\n    uint256 constant IC6y = 7459045126206245262756783739697871731196375298112634212173672404853831309786;\\n    \\n    uint256 constant IC7x = 10740551677743158382441062386501298848646053145865823442847610791968594528289;\\n    uint256 constant IC7y = 21657167241153225314135589387079002708587418842864077521693977210968021048721;\\n    \\n    uint256 constant IC8x = 20536476234797263831643189740064053117160337195791856385892992834482370287512;\\n    uint256 constant IC8y = 18258699057873865588245369435578918571756469704183085011165098139074862434543;\\n    \\n    uint256 constant IC9x = 18293662353150822330749373485066335943093182919888710919053977794688677443843;\\n    uint256 constant IC9y = 3365197130606871938439382259561012622230793791152518122576869893531830020051;\\n    \\n    uint256 constant IC10x = 10464268927660994961936771610761322397633069758803976833400107641287034964420;\\n    uint256 constant IC10y = 15896600235017903857295002971756639107391153447838560723402307560050234141111;\\n    \\n    uint256 constant IC11x = 19786751484513045884347111989063082084450406057425687794673931698452346081044;\\n    uint256 constant IC11y = 5313251178585910055977156446218999699936391470697302222575669547157687947710;\\n    \\n    uint256 constant IC12x = 1684055055646723719894355280156760702291183222236626601663480311877006377437;\\n    uint256 constant IC12y = 14613128874599604159663378872994588938053027721510091765805321127316501622056;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/3235f00afe52b593578a06ba6b1f711c.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString();\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_send_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString();\\n    }\\n}\\n\"\n    },\n    \"contracts/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"./external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"./external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"./interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n\\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n\\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n\\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n\\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n\\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n\\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n\\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n\\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n\\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n\\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n\\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n\\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n\\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/3d00f158650f73562ebab290bf8faab9.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/3ead3a1930264a5f1428c2beccc481e4.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistry {\\n    function getAccountId(address _account) external view returns (bytes32);\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"../interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessorMock is IRevolutAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId)\\n    {\\n        return bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutSendProcessor } from \\\"../interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessorMock is IRevolutSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 revolutTagHash,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            keccak256(abi.encodePacked(_proof.public_values.recipientId)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId)),\\n            bytes32(_proof.public_values.notaryKeyHash)\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\n                                                                                // resulting hash is the accountId for our system\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender] == bytes32(0), \\\"Account already associated with accountId\\\");\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender] = accountId;\\n\\n        emit AccountRegistered(msg.sender, accountId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender];\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender];\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account];\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\n     * it can't be used again.\\n     */\\n    function _verifyRegistrationProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns (bytes32 accountId)\\n    {\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string revolutTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Revolut\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistry _accountRegistry,\\n        IRevolutSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\n     */\\n    function offRamp(\\n        string calldata _revolutTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\n\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\"Revolut tag must match id\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            revolutTag: _revolutTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey,\\n            notaryKeyHash: _notaryKeyHash\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IRevolutSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IRevolutSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        ) = sendProcessor.processProof(\\n            IRevolutSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\"Incorrect notary used for notarization\\\");\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"COMPLETED\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IRevolutSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.transferId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Revolut\\\", _proof.public_values.transferId)));\\n\\n        amount = _parseAmount(_proof.public_values.amount);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash,\\n            _publicValues.notaryKeyHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\n        // it would be a receive transaction\\n        require(bytes(amount)[0] == 0x2D, \\\"Not a send transaction\\\");   \\n        return amount.stringToUint(6);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string wiseTagHash;\\n        address userAddress;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistry {\\n\\n    // Each Account is tied to a Wise ID and is represented by an Ethereum address.\\n    struct AccountInfo {\\n        bytes32 accountId;                  // User's Wise account ID\\n        bytes32 offRampId;                  // Multi-currency account ID to receive funds\\n        bytes32 wiseTagHash;                // Hash of user's wise tag account stored on register. Used to verify offramper's wise tag\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory);\\n    function getAccountId(address _account) external view returns (bytes32);\\n\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    \\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseOffRamperRegistrationProcessor {\\n\\n    struct OffRamperRegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string mcAccountId;\\n    }\\n\\n    struct OffRamperRegistrationProof {\\n        OffRamperRegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string senderId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"../interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessorMock is IWiseAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.wiseTagHash.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseOffRamperRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"../interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessorMock is IWiseOffRamperRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n       OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.mcAccountId.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseSendProcessor } from \\\"../interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessorMock is IWiseSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 currencyId\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            bytes32(_proof.public_values.recipientId.stringToUint(0)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessor is IWiseAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        wiseTagHash = bytes32(_proof.public_values.wiseTagHash.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.wiseTagHash,\\n            _publicValues.userAddress\\n        );\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistry is IWiseAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed wiseTagHash);\\n    event OffRamperRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed offRampId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n    event NewOffRamperRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IWiseAccountRegistrationProcessor public accountRegistrationProcessor;      // Address of Account registration processor contract\\n    IWiseOffRamperRegistrationProcessor public offRamperRegistrationProcessor;  // Address of Off-ramper registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => AccountInfo) internal accounts;                          // Mapping of Ethereum accounts to their account information (IDs and deposits)\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     * @param _offRamperRegistrationProcessor   Off-ramper Registration processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistrationProcessor _accountRegistrationProcessor,\\n        IWiseOffRamperRegistrationProcessor _offRamperRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n        offRamperRegistrationProcessor = _offRamperRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender].accountId == bytes32(0), \\\"Account already associated with accountId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 wiseTagHash\\n        ) = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender].accountId = accountId;\\n        accounts[msg.sender].wiseTagHash = wiseTagHash;\\n\\n        emit AccountRegistered(msg.sender, accountId, wiseTagHash);\\n    }\\n\\n    /**\\n     * @notice Registers an account for off-ramping by pulling the multi-currency account id from the proof and assigning\\n     * the account owner to the sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function registerAsOffRamper(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].offRampId == bytes32(0), \\\"Account already associated with offRampId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 offRampId\\n        ) = _verifyOffRamperRegistrationProof(_proof);\\n\\n        accounts[msg.sender].offRampId = offRampId;\\n\\n        emit OffRamperRegistered(msg.sender, accountId, offRampId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].accountId;\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].accountId;\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IWiseAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the off ramper registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setOffRamperRegistrationProcessor(IWiseOffRamperRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        offRamperRegistrationProcessor = _registrationProcessor;\\n        emit NewOffRamperRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account].accountId;\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 wiseTagHash)\\n    {\\n        (\\n            accountId,\\n            wiseTagHash\\n        ) = accountRegistrationProcessor.processProof(_proof);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyOffRamperRegistrationProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 offRampId)\\n    {\\n        (\\n            accountId,\\n            offRampId\\n        ) = offRamperRegistrationProcessor.processProof(_proof);\\n\\n        require(accountId == accounts[msg.sender].accountId, \\\"AccountId does not match\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessor is IWiseOffRamperRegistrationProcessor, TLSBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 offRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint.replaceString(\\\"*\\\", _proof.public_values.profileId), _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        offRampId = bytes32(_proof.public_values.mcAccountId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(_publicValues.endpoint, _publicValues.host, _publicValues.profileId, _publicValues.mcAccountId);\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string wiseTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Wise currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's offRampId \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Wise account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IWiseAccountRegistry public accountRegistry;                    // Account Registry contract for Wise\\n    IWiseSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Wise\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistry _accountRegistry,\\n        IWiseSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _wiseTag              Depositor's Wise tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     */\\n    function offRamp(\\n        string calldata _wiseTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        IWiseAccountRegistry.AccountInfo memory account = accountRegistry.getAccountInfo(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account.accountId];\\n\\n        require(account.offRampId != bytes32(0), \\\"Must be registered as off ramper\\\");\\n        require(keccak256(abi.encode(_wiseTag)) == account.wiseTagHash, \\\"Wise tag does not match registered wise tag\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            wiseTag: _wiseTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.accountId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Wise\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IWiseSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IWiseSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IWiseSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        ) = sendProcessor.processProof(\\n            IWiseSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accountRegistry.getAccountInfo(deposit.depositor).offRampId == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessor is IWiseSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"OUTGOING_PAYMENT_SENT\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IWiseSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.senderId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Wise\\\", _proof.public_values.transferId)));\\n\\n        amount = _proof.public_values.amount.stringToUint(6);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = bytes32(_proof.public_values.recipientId.stringToUint(0));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.senderId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16692827623879808830126666424117838150546424161010311559130132272860078100250;\\n    uint256 constant deltax2 = 10427071116080203280483990720065140241625477298313711514843941053378169062748;\\n    uint256 constant deltay1 = 12292291730534257963793035250750833013505862587513324721305952905575695195722;\\n    uint256 constant deltay2 = 20744227296603881754617447489692206687227195961073977292626564883622660146422;\\n\\n    \\n    uint256 constant IC0x = 8444387327591820163253359883706304250001395835708102283881672029412593968774;\\n    uint256 constant IC0y = 277567402350001170949287541204029095267467381858853916455216632597839881894;\\n    \\n    uint256 constant IC1x = 11766018000598374647690511651127745003630346152255765679463620118729063279220;\\n    uint256 constant IC1y = 9973870620290232174118930849612458053973396098852917252709131237691777167431;\\n    \\n    uint256 constant IC2x = 21007152236406284962452665998326532111064818140624217664323424373713986554835;\\n    uint256 constant IC2y = 21775424933265972488601591944473690558387975377218817711132857025038427581344;\\n    \\n    uint256 constant IC3x = 19548332954070589452554863336717712265670681575029463650291986455368503640194;\\n    uint256 constant IC3y = 9885572105525346384114396000793852863725331019928798599079916138124811450063;\\n    \\n    uint256 constant IC4x = 20459688676260758193620894047864540995062748169615148342851161008796903469478;\\n    uint256 constant IC4y = 7185096966400904659568958817597117358528438755253953902329001546341542579806;\\n    \\n    uint256 constant IC5x = 15566588852465957839914470257479783208753427872712540953155019219989274639291;\\n    uint256 constant IC5y = 13117341851862511824800803143692229606087651943401230287864971446454834743578;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5710629204359318057562498392234897061794505526378244639613545081979421872324;\\n    uint256 constant deltax2 = 990656993167988662763349194790300993619547607285680693352122387169954518876;\\n    uint256 constant deltay1 = 716219014029453087010203485855017030343957665868140907538168510860723855404;\\n    uint256 constant deltay2 = 15567073068481787678459322691280596720950847803967120869528969231388542383007;\\n\\n    \\n    uint256 constant IC0x = 3627016935680980991432758845809120437097698562642321662019774941798047598180;\\n    uint256 constant IC0y = 16742737478481137559777273336649173908087975045426893354724005348183061433359;\\n    \\n    uint256 constant IC1x = 1454889468509402624274228018232533000837827531552657849863656594197598947498;\\n    uint256 constant IC1y = 21114519264105667881501109217530601184286085076749464919673271702318856586869;\\n    \\n    uint256 constant IC2x = 15214926606177919954497590021391485480795904680262796779354958872907701613369;\\n    uint256 constant IC2y = 3436701283643568631088610954415601741399004409005447167420424641912447528939;\\n    \\n    uint256 constant IC3x = 4535577697185795754970511618264939460763831131849914629687538976336257649268;\\n    uint256 constant IC3y = 7758558535557743288212279084775965030097651866120453423634300893790511261820;\\n    \\n    uint256 constant IC4x = 874294953994422297831973347765527399192587644625708091600444498339317231142;\\n    uint256 constant IC4y = 987062449590966973283739390864507348641413150099442677760662058272414279274;\\n    \\n    uint256 constant IC5x = 21093306057635441117249393023592254587788813974241613308459037792013982125271;\\n    uint256 constant IC5y = 2674227458751675036151996130714025181946977717008550031124827209614433661640;\\n    \\n    uint256 constant IC6x = 13846687013867984054231693830774779045583700534400211257658890706223553634739;\\n    uint256 constant IC6y = 8017285138819571587063238313118652954321504644123983130004849545264828919081;\\n    \\n    uint256 constant IC7x = 13134004890952141957850059371765174729898824494756098133509785273144965229605;\\n    uint256 constant IC7y = 19833383650616654544301917274181853787895876513168493371626228893058581160277;\\n    \\n    uint256 constant IC8x = 15730855678085463666228938279082107543444904323060443712618683292548728266981;\\n    uint256 constant IC8y = 11187003173972315212472857297424367154976035201682387760241185052675631112914;\\n    \\n    uint256 constant IC9x = 19431007015983296833648365920726396734910027676221391642968597625199383752634;\\n    uint256 constant IC9y = 21132440606561643161647678729377817341013518219983716149257194049459184921050;\\n    \\n    uint256 constant IC10x = 4559717915456495626304866642697317683057747436742022494016974327403606371979;\\n    uint256 constant IC10y = 11478380993372530002009436682140297146781606321299572933211280870931334446617;\\n    \\n    uint256 constant IC11x = 16525805622865173604160997674689687443990633252176419982940261013647563901344;\\n    uint256 constant IC11y = 792201218354373970098710160330509619168590675536085985581042389294282406443;\\n    \\n    uint256 constant IC12x = 10525116069038722935367461628431297752051968830490923775813610986261326824582;\\n    uint256 constant IC12y = 10970802876973329565857167947893820731407652682848506683295471907792738767120;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/582bda84e77341f31e48e553d6955fd7.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_send_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/62e130016f0ae1eb6799549b2feee2a6.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 9394740747776187241597029104953484261679012526425116554159524966233999111263;\\n    uint256 constant IC0y = 19689273204164097728177651836883812205170784316328518073257553118356569721529;\\n    \\n    uint256 constant IC1x = 2103298983762510908301138293943056608631520025630826390321569873465337843612;\\n    uint256 constant IC1y = 3051671505392171758204845789745109750013350293754815803257290082249002704162;\\n    \\n    uint256 constant IC2x = 16449197615353463639054592956247688316837441704346035760206288894539930814077;\\n    uint256 constant IC2y = 6335892290253569886213727820048151796384993861106408353434365713962828062536;\\n    \\n    uint256 constant IC3x = 13909339620076649767883466299398757372347682133758066729503408416549131081314;\\n    uint256 constant IC3y = 680939940507125217800291279675392811201474158796517777404806360441256992511;\\n    \\n    uint256 constant IC4x = 5567565339001906931154550109868824777928665956120696988986942291349201008482;\\n    uint256 constant IC4y = 14182369860111175092039963088428935808239168726019022822913308258774428350169;\\n    \\n    uint256 constant IC5x = 4528931757641575110352830627683078786226227744379836276335458021091600396184;\\n    uint256 constant IC5y = 18809760409635068499937315446477117440887658318231718225159843539196113242397;\\n    \\n    uint256 constant IC6x = 217249737022013148790853614054515288744843070463361996227143243753146454558;\\n    uint256 constant IC6y = 5843595604928112686285135260361410764846211093271852947892142733907981483475;\\n    \\n    uint256 constant IC7x = 16382783349015794414606292731397855206031202794459940530289465235845935294599;\\n    uint256 constant IC7y = 8313689883004195951872015712057362672054743656979611883792351037811710281664;\\n    \\n    uint256 constant IC8x = 12091879935696046645654533776196374113414754479661743359672798704639476620661;\\n    uint256 constant IC8y = 13607368754408928105528637625253051479212460464623135888354013366424189726618;\\n    \\n    uint256 constant IC9x = 1427687473863783182488178317364745261019085244973035264375279293174848549312;\\n    uint256 constant IC9y = 7042084296523600520065911790797906589532524342562812887761489075993835181146;\\n    \\n    uint256 constant IC10x = 19579875689027874433809077324776940508857197381913748776343129158527029914029;\\n    uint256 constant IC10y = 11360688967181958431013518844967411744837522897538508687548664595854123094206;\\n    \\n    uint256 constant IC11x = 15489617821697871842044770938846172737438163666835784991442660969573132279238;\\n    uint256 constant IC11y = 9208709180384759640941195473336890577882300724746282442631899048305657377731;\\n    \\n    uint256 constant IC12x = 12219340695113383303094720678815419311566874168360126633878210542379865206498;\\n    uint256 constant IC12y = 19748310142198112801532265275227626809399838784073257383942928475531551524126;\\n    \\n    uint256 constant IC13x = 9809600841880559730361608794352502078553304084649850859459331073975327390409;\\n    uint256 constant IC13y = 11320259074840511785906545984642922355663228703151484107043641197226422843416;\\n    \\n    uint256 constant IC14x = 16059817887658775120436765365711045350150793283463695196041726740989539679801;\\n    uint256 constant IC14y = 4842923321162840856934661309117966577909319066986869353905580462534729375402;\\n    \\n    uint256 constant IC15x = 12339372070549065744144308230683430247880602184204850330715911885647781887335;\\n    uint256 constant IC15y = 18316443093151957129338732113138820850818943232578658491484809647188395368957;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/8224d865df725416aec66f5f50bc0a5a.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18574627869058290718249846286416066923787357305653818275198119569110729063307;\\n    uint256 constant deltax2 = 13915999697294316428724933304884230300804768925316324388637447994944303207122;\\n    uint256 constant deltay1 = 6098255674121565970551903974560935137843957314441504769450899063293175181557;\\n    uint256 constant deltay2 = 15143967207878882858319171473723762116395973746480761427454690602499031508717;\\n\\n    \\n    uint256 constant IC0x = 6865443700594715891152328791607889526330887414086993633068747938072457241685;\\n    uint256 constant IC0y = 10468945301756143970646006543367573774178372611766681195220999860357915797944;\\n    \\n    uint256 constant IC1x = 10704722446523266721180562643447437149651020230245607194259102672100716655622;\\n    uint256 constant IC1y = 13835922647350771093409292403482106984225273572439540259619248291997497190338;\\n    \\n    uint256 constant IC2x = 9082820476663057749813862646863505694595521088627361022677522902057835975674;\\n    uint256 constant IC2y = 2956559811855122372464720724455222044024045806141600873519434424076727259549;\\n    \\n    uint256 constant IC3x = 3792740326745716842453603765202940845282157902511414580984405164815472719626;\\n    uint256 constant IC3y = 13398930886279937280023561976368048826175146409027429215170876003688906362216;\\n    \\n    uint256 constant IC4x = 1141781699151428606267044235130552909660238448565862470582441408755286403649;\\n    uint256 constant IC4y = 16789658000733015308721768726691601134554495877403753820826002406384958395008;\\n    \\n    uint256 constant IC5x = 12543171042042072636131914829125043929342724675040777036405607612956292855474;\\n    uint256 constant IC5y = 4103351600393692854136490223669999878503018507420468298933278541160167154342;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 13715093910953477444594932613394637161592645326267490952383773258932680530785;\\n    uint256 constant deltax2 = 6917355939685380899148753334446963866296679557559265300195124805902372568736;\\n    uint256 constant deltay1 = 10027537635408556375640886021174498274338207339803607940642263434646237658144;\\n    uint256 constant deltay2 = 19825314797083105356154821733414236732602675829642895849779157432388025780748;\\n\\n    \\n    uint256 constant IC0x = 7948712917874849781328365661027367011398916994267746344840851439625837578323;\\n    uint256 constant IC0y = 14445610336427827969214783890094209349619216720637343095223018572693254280923;\\n    \\n    uint256 constant IC1x = 3654976868371838169631577898462947005550108125685649400186026683210975806547;\\n    uint256 constant IC1y = 7383470632301847779131345725687431208414525939319998905342796582584383932784;\\n    \\n    uint256 constant IC2x = 15960136517117002583905099076229506420678130465330836605642076667698312488907;\\n    uint256 constant IC2y = 10981003641590459938830276725941498612829685925850889415515039958666798745545;\\n    \\n    uint256 constant IC3x = 18064147597098347735634254758923927729758051955626895483758091493962336324910;\\n    uint256 constant IC3y = 14561976814062079545004557051651175882415454473414826337411715544694691078488;\\n    \\n    uint256 constant IC4x = 5479872440797886105045613557892343574379959348291323344571145668056905130790;\\n    uint256 constant IC4y = 19816668883377774512316396795679515122358992446677555233530823190449668202575;\\n    \\n    uint256 constant IC5x = 9764995418164291848924916053122788044578670279004409359935206951759326535751;\\n    uint256 constant IC5y = 11151240738595525109186562114546767429226785384258075837825604200334229399893;\\n    \\n    uint256 constant IC6x = 8592289604370662283816667811371636409851377122184258261984779162566069289701;\\n    uint256 constant IC6y = 14924863702174947616504138427154175911132478861008643941575632275190130139352;\\n    \\n    uint256 constant IC7x = 18144310048336844926716356091507529474953804436633311455291234260603469939801;\\n    uint256 constant IC7y = 20695654519010539727518673528536864282905304035588394263484365314168181698771;\\n    \\n    uint256 constant IC8x = 6502380984206062082509747555585722773109086149921002084837192664976139632635;\\n    uint256 constant IC8y = 20559694265554344023542679863623632229239552087994730960172389697388976005511;\\n    \\n    uint256 constant IC9x = 20112907151747105787761530796573701791334087761671369712034010592321424588594;\\n    uint256 constant IC9y = 7868275330531868976088552522626764067554872392097431803379373791917043873429;\\n    \\n    uint256 constant IC10x = 21738568466342470712305504479308744377477421607586657477021567762815751353985;\\n    uint256 constant IC10y = 15899136431442502164449286654852349998271141738582178828650897248716421930967;\\n    \\n    uint256 constant IC11x = 8797574036872579022038442307145559829777119719185174358600414786794648200526;\\n    uint256 constant IC11y = 19158045316273481821441527564745598208594831388291307046183673615092116714767;\\n    \\n    uint256 constant IC12x = 1856159710792583584076099033562199824825551035760525968182870506068750338922;\\n    uint256 constant IC12y = 5431689035393664841658365783566955093050903672278814147361678362199701787106;\\n    \\n    uint256 constant IC13x = 1326184215165888620491943578175089960460457074386949049899809721605475868360;\\n    uint256 constant IC13y = 19798068085286831236096103256261325470985925228876029833389405086405680467005;\\n    \\n    uint256 constant IC14x = 21303925226345182261601479972988106925149727015068245014063996271014722518363;\\n    uint256 constant IC14y = 13822581075918761258491041321378418848172590182506086615070972333032971332948;\\n    \\n    uint256 constant IC15x = 7601301681882298785665130103217482061846330487834337423048688553591898089998;\\n    uint256 constant IC15y = 16353595650180105876268966027044363473882857313997670459546834066677499432092;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 10075444819728828528059511311364183377585011636666347250599008316664107494584;\\n    uint256 constant deltax2 = 19327888262652149651858559507688929247845982563456569545298956783712290831031;\\n    uint256 constant deltay1 = 19352801460895629485256782282819819495690526597376096989389923034283130776118;\\n    uint256 constant deltay2 = 11668517376357679640486892005206332407941243522830734898219813555969756490527;\\n\\n    \\n    uint256 constant IC0x = 4244199450261939264855608361292422830494076317114087381524682052624987594898;\\n    uint256 constant IC0y = 19645046663091251713731947178298410964505911169469312617571077810087266152857;\\n    \\n    uint256 constant IC1x = 8174035567318043885708495283345132428559378659325609203776402978017320167293;\\n    uint256 constant IC1y = 14468913963303826866215469807518170784403093656434266017779773880257875040240;\\n    \\n    uint256 constant IC2x = 1616603017751755006393562987905285502270823546542543926944627007410237341389;\\n    uint256 constant IC2y = 19363001402611389684892375352655759926342431445082754246958964085276938403807;\\n    \\n    uint256 constant IC3x = 18206398417831844023515176703806764449138507779128726420915001707110434960674;\\n    uint256 constant IC3y = 15788322487150289973315668363845259348952014356217153206401112660482394149984;\\n    \\n    uint256 constant IC4x = 5556506419684194840114638678281266193177223336781663103282498332205775709966;\\n    uint256 constant IC4y = 3612832929973582572292953270578481883198123808328242543078950263985599193867;\\n    \\n    uint256 constant IC5x = 12215062759329544988171802286780059092087193981868301475398051148747302789508;\\n    uint256 constant IC5y = 1980305058569746313443850675062124742589110071159814897086099250727381686120;\\n    \\n    uint256 constant IC6x = 3493933421620238986193524740698678015926658911199434587596433896655331481231;\\n    uint256 constant IC6y = 7459045126206245262756783739697871731196375298112634212173672404853831309786;\\n    \\n    uint256 constant IC7x = 10740551677743158382441062386501298848646053145865823442847610791968594528289;\\n    uint256 constant IC7y = 21657167241153225314135589387079002708587418842864077521693977210968021048721;\\n    \\n    uint256 constant IC8x = 20536476234797263831643189740064053117160337195791856385892992834482370287512;\\n    uint256 constant IC8y = 18258699057873865588245369435578918571756469704183085011165098139074862434543;\\n    \\n    uint256 constant IC9x = 18293662353150822330749373485066335943093182919888710919053977794688677443843;\\n    uint256 constant IC9y = 3365197130606871938439382259561012622230793791152518122576869893531830020051;\\n    \\n    uint256 constant IC10x = 10464268927660994961936771610761322397633069758803976833400107641287034964420;\\n    uint256 constant IC10y = 15896600235017903857295002971756639107391153447838560723402307560050234141111;\\n    \\n    uint256 constant IC11x = 19786751484513045884347111989063082084450406057425687794673931698452346081044;\\n    uint256 constant IC11y = 5313251178585910055977156446218999699936391470697302222575669547157687947710;\\n    \\n    uint256 constant IC12x = 1684055055646723719894355280156760702291183222236626601663480311877006377437;\\n    uint256 constant IC12y = 14613128874599604159663378872994588938053027721510091765805321127316501622056;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/8bc81ff8830ebb82cab81dfebf9e965a.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistry {\\n    function getAccountId(address _account) external view returns (bytes32);\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"../interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessorMock is IRevolutAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId)\\n    {\\n        return bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutSendProcessor } from \\\"../interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessorMock is IRevolutSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 revolutTagHash,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            keccak256(abi.encodePacked(_proof.public_values.recipientId)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId)),\\n            bytes32(_proof.public_values.notaryKeyHash)\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    event NotaryKeyHashSet(bytes32 _notaryKeyHash);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    function setNotaryKeyHash(bytes32 _notaryKeyHash) external onlyOwner {\\n        notaryKeyHash = _notaryKeyHash;\\n\\n        emit NotaryKeyHashSet(_notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\n                                                                                // resulting hash is the accountId for our system\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender] == bytes32(0), \\\"Account already associated with accountId\\\");\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender] = accountId;\\n\\n        emit AccountRegistered(msg.sender, accountId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender];\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender];\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account];\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\n     * it can't be used again.\\n     */\\n    function _verifyRegistrationProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns (bytes32 accountId)\\n    {\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string revolutTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Revolut\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistry _accountRegistry,\\n        IRevolutSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\n     */\\n    function offRamp(\\n        string calldata _revolutTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\n\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\"Revolut tag must match id\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            revolutTag: _revolutTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey,\\n            notaryKeyHash: _notaryKeyHash\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IRevolutSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IRevolutSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        ) = sendProcessor.processProof(\\n            IRevolutSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\"Incorrect notary used for notarization\\\");\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"COMPLETED\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IRevolutSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.transferId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Revolut\\\", _proof.public_values.transferId)));\\n\\n        amount = _parseAmount(_proof.public_values.amount);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash,\\n            _publicValues.notaryKeyHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\n        // it would be a receive transaction\\n        require(bytes(amount)[0] == 0x2D, \\\"Not a send transaction\\\");   \\n        return amount.stringToUint(6);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string wiseTagHash;\\n        address userAddress;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistry {\\n\\n    // Each Account is tied to a Wise ID and is represented by an Ethereum address.\\n    struct AccountInfo {\\n        bytes32 accountId;                  // User's Wise account ID\\n        bytes32 offRampId;                  // Multi-currency account ID to receive funds\\n        bytes32 wiseTagHash;                // Hash of user's wise tag account stored on register. Used to verify offramper's wise tag\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory);\\n    function getAccountId(address _account) external view returns (bytes32);\\n\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    \\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseOffRamperRegistrationProcessor {\\n\\n    struct OffRamperRegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string mcAccountId;\\n    }\\n\\n    struct OffRamperRegistrationProof {\\n        OffRamperRegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string senderId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"../interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessorMock is IWiseAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.wiseTagHash.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseOffRamperRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"../interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessorMock is IWiseOffRamperRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n       OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.mcAccountId.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseSendProcessor } from \\\"../interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessorMock is IWiseSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 currencyId\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            bytes32(_proof.public_values.recipientId.stringToUint(0)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessor is IWiseAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        wiseTagHash = bytes32(_proof.public_values.wiseTagHash.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.wiseTagHash,\\n            _publicValues.userAddress\\n        );\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistry is IWiseAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed wiseTagHash);\\n    event OffRamperRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed offRampId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n    event NewOffRamperRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IWiseAccountRegistrationProcessor public accountRegistrationProcessor;      // Address of Account registration processor contract\\n    IWiseOffRamperRegistrationProcessor public offRamperRegistrationProcessor;  // Address of Off-ramper registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => AccountInfo) internal accounts;                          // Mapping of Ethereum accounts to their account information (IDs and deposits)\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     * @param _offRamperRegistrationProcessor   Off-ramper Registration processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistrationProcessor _accountRegistrationProcessor,\\n        IWiseOffRamperRegistrationProcessor _offRamperRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n        offRamperRegistrationProcessor = _offRamperRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender].accountId == bytes32(0), \\\"Account already associated with accountId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 wiseTagHash\\n        ) = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender].accountId = accountId;\\n        accounts[msg.sender].wiseTagHash = wiseTagHash;\\n\\n        emit AccountRegistered(msg.sender, accountId, wiseTagHash);\\n    }\\n\\n    /**\\n     * @notice Registers an account for off-ramping by pulling the multi-currency account id from the proof and assigning\\n     * the account owner to the sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function registerAsOffRamper(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].offRampId == bytes32(0), \\\"Account already associated with offRampId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 offRampId\\n        ) = _verifyOffRamperRegistrationProof(_proof);\\n\\n        accounts[msg.sender].offRampId = offRampId;\\n\\n        emit OffRamperRegistered(msg.sender, accountId, offRampId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].accountId;\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].accountId;\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IWiseAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the off ramper registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setOffRamperRegistrationProcessor(IWiseOffRamperRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        offRamperRegistrationProcessor = _registrationProcessor;\\n        emit NewOffRamperRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account].accountId;\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 wiseTagHash)\\n    {\\n        (\\n            accountId,\\n            wiseTagHash\\n        ) = accountRegistrationProcessor.processProof(_proof);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyOffRamperRegistrationProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 offRampId)\\n    {\\n        (\\n            accountId,\\n            offRampId\\n        ) = offRamperRegistrationProcessor.processProof(_proof);\\n\\n        require(accountId == accounts[msg.sender].accountId, \\\"AccountId does not match\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessor is IWiseOffRamperRegistrationProcessor, TLSBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 offRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint.replaceString(\\\"*\\\", _proof.public_values.profileId), _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        offRampId = bytes32(_proof.public_values.mcAccountId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(_publicValues.endpoint, _publicValues.host, _publicValues.profileId, _publicValues.mcAccountId);\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string wiseTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Wise currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's offRampId \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Wise account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IWiseAccountRegistry public accountRegistry;                    // Account Registry contract for Wise\\n    IWiseSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Wise\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistry _accountRegistry,\\n        IWiseSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _wiseTag              Depositor's Wise tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     */\\n    function offRamp(\\n        string calldata _wiseTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        IWiseAccountRegistry.AccountInfo memory account = accountRegistry.getAccountInfo(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account.accountId];\\n\\n        require(account.offRampId != bytes32(0), \\\"Must be registered as off ramper\\\");\\n        require(keccak256(abi.encode(_wiseTag)) == account.wiseTagHash, \\\"Wise tag does not match registered wise tag\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            wiseTag: _wiseTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.accountId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Wise\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IWiseSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IWiseSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IWiseSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        ) = sendProcessor.processProof(\\n            IWiseSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accountRegistry.getAccountInfo(deposit.depositor).offRampId == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessor is IWiseSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"OUTGOING_PAYMENT_SENT\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IWiseSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.senderId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Wise\\\", _proof.public_values.transferId)));\\n\\n        amount = _proof.public_values.amount.stringToUint(6);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = bytes32(_proof.public_values.recipientId.stringToUint(0));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.senderId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/96d924ca10695a353bfa4c997166694e.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11133828657934177089004312995558009171494340641763879517673191421017863452495;\\n    uint256 constant deltax2 = 15578605622679797628916481587424069927318004999014864187840594050063358446429;\\n    uint256 constant deltay1 = 10776460641737156525775554271006285498298598522158976318346806579207101706777;\\n    uint256 constant deltay2 = 13370712488507592422860031641109290699443204427500458532551752051737078074683;\\n\\n    \\n    uint256 constant IC0x = 9394740747776187241597029104953484261679012526425116554159524966233999111263;\\n    uint256 constant IC0y = 19689273204164097728177651836883812205170784316328518073257553118356569721529;\\n    \\n    uint256 constant IC1x = 2103298983762510908301138293943056608631520025630826390321569873465337843612;\\n    uint256 constant IC1y = 3051671505392171758204845789745109750013350293754815803257290082249002704162;\\n    \\n    uint256 constant IC2x = 16449197615353463639054592956247688316837441704346035760206288894539930814077;\\n    uint256 constant IC2y = 6335892290253569886213727820048151796384993861106408353434365713962828062536;\\n    \\n    uint256 constant IC3x = 13909339620076649767883466299398757372347682133758066729503408416549131081314;\\n    uint256 constant IC3y = 680939940507125217800291279675392811201474158796517777404806360441256992511;\\n    \\n    uint256 constant IC4x = 5567565339001906931154550109868824777928665956120696988986942291349201008482;\\n    uint256 constant IC4y = 14182369860111175092039963088428935808239168726019022822913308258774428350169;\\n    \\n    uint256 constant IC5x = 4528931757641575110352830627683078786226227744379836276335458021091600396184;\\n    uint256 constant IC5y = 18809760409635068499937315446477117440887658318231718225159843539196113242397;\\n    \\n    uint256 constant IC6x = 217249737022013148790853614054515288744843070463361996227143243753146454558;\\n    uint256 constant IC6y = 5843595604928112686285135260361410764846211093271852947892142733907981483475;\\n    \\n    uint256 constant IC7x = 16382783349015794414606292731397855206031202794459940530289465235845935294599;\\n    uint256 constant IC7y = 8313689883004195951872015712057362672054743656979611883792351037811710281664;\\n    \\n    uint256 constant IC8x = 12091879935696046645654533776196374113414754479661743359672798704639476620661;\\n    uint256 constant IC8y = 13607368754408928105528637625253051479212460464623135888354013366424189726618;\\n    \\n    uint256 constant IC9x = 1427687473863783182488178317364745261019085244973035264375279293174848549312;\\n    uint256 constant IC9y = 7042084296523600520065911790797906589532524342562812887761489075993835181146;\\n    \\n    uint256 constant IC10x = 19579875689027874433809077324776940508857197381913748776343129158527029914029;\\n    uint256 constant IC10y = 11360688967181958431013518844967411744837522897538508687548664595854123094206;\\n    \\n    uint256 constant IC11x = 15489617821697871842044770938846172737438163666835784991442660969573132279238;\\n    uint256 constant IC11y = 9208709180384759640941195473336890577882300724746282442631899048305657377731;\\n    \\n    uint256 constant IC12x = 12219340695113383303094720678815419311566874168360126633878210542379865206498;\\n    uint256 constant IC12y = 19748310142198112801532265275227626809399838784073257383942928475531551524126;\\n    \\n    uint256 constant IC13x = 9809600841880559730361608794352502078553304084649850859459331073975327390409;\\n    uint256 constant IC13y = 11320259074840511785906545984642922355663228703151484107043641197226422843416;\\n    \\n    uint256 constant IC14x = 16059817887658775120436765365711045350150793283463695196041726740989539679801;\\n    uint256 constant IC14y = 4842923321162840856934661309117966577909319066986869353905580462534729375402;\\n    \\n    uint256 constant IC15x = 12339372070549065744144308230683430247880602184204850330715911885647781887335;\\n    uint256 constant IC15y = 18316443093151957129338732113138820850818943232578658491484809647188395368957;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/b37c1ae3295cdbee97a5fae6e06eede9.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/f47db0aba1ef1355cf5a362858260c2b.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/base_staging/solcInputs/fddf950e5f6f8abf0d9e29e0433009ae.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/.chainId",
    "content": "5"
  },
  {
    "path": "contracts-ramp/deployments/goerli/HDFCManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x6Fe827dEb7606024BE7D2Bbd0a9400F33e0e0bC4\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb2bbb11732632535bb0b15f8b7b1cdbe413dcaaf4cab177452386168309fa42b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x6Fe827dEb7606024BE7D2Bbd0a9400F33e0e0bC4\",\n    \"transactionIndex\": 27,\n    \"gasUsed\": \"608914\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000800000000000000000004000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xc93873eddb4bb19ce1f1d926cdbc563fc62c7bced25796c447a2c625ed62a43d\",\n    \"transactionHash\": \"0xb2bbb11732632535bb0b15f8b7b1cdbe413dcaaf4cab177452386168309fa42b\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 27,\n        \"blockNumber\": 10176694,\n        \"transactionHash\": \"0xb2bbb11732632535bb0b15f8b7b1cdbe413dcaaf4cab177452386168309fa42b\",\n        \"address\": \"0x6Fe827dEb7606024BE7D2Bbd0a9400F33e0e0bC4\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 19,\n        \"blockHash\": \"0xc93873eddb4bb19ce1f1d926cdbc563fc62c7bced25796c447a2c625ed62a43d\"\n      }\n    ],\n    \"blockNumber\": 10176694,\n    \"cumulativeGasUsed\": \"2415921\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x06b0ad846d386f60e777f1d11b82922c6bb694216eed9c23535796ac404a7dfa\",\n      \"0x1c1b5a203a9f1f15f6172969b9359e6a7572001de09471efd1586a67f7956fd8\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f04018ca3672426744531c5b0e9c8cda\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9242,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 9245,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/HDFCRamp.json",
    "content": "{\n  \"address\": \"0x7edd66b19a22293af86a2d96761fd7146ba3ff6c\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"_poseidon3\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"_poseidon6\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[8]\",\n              \"name\": \"upiId\",\n              \"type\": \"uint256[8]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[8]\",\n          \"name\": \"_upiId\",\n          \"type\": \"uint256[8]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon3\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon6\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf2bc5f1c59ef076d9c2cb046513b983bfa19d0a32ccf1a97973e51c58ec69db6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cf8578698131c57404e8bc3eec820eda51d8\",\n    \"contractAddress\": \"0x7edd66b19a22293af86a2d96761fd7146ba3ff6c\",\n    \"transactionIndex\": \"0x39\",\n    \"gasUsed\": \"0x398515\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000120000000000000100000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x1545584821c49541c7f8c054a55eefcff03df3c1dbe9e00fc82a79d2c7f36f70\",\n    \"transactionHash\": \"0xf2bc5f1c59ef076d9c2cb046513b983bfa19d0a32ccf1a97973e51c58ec69db6\",\n    \"logs\": [\n      {\n        \"address\": \"0x7edd66b19a22293af86a2d96761fd7146ba3ff6c\",\n        \"blockHash\": \"0x1545584821c49541c7f8c054a55eefcff03df3c1dbe9e00fc82a79d2c7f36f70\",\n        \"blockNumber\": \"0x9cdc05\",\n        \"data\": \"0x\",\n        \"logIndex\": \"0x5f\",\n        \"removed\": false,\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"transactionHash\": \"0xf2bc5f1c59ef076d9c2cb046513b983bfa19d0a32ccf1a97973e51c58ec69db6\",\n        \"transactionIndex\": \"0x39\"\n      },\n      {\n        \"address\": \"0x7edd66b19a22293af86a2d96761fd7146ba3ff6c\",\n        \"blockHash\": \"0x1545584821c49541c7f8c054a55eefcff03df3c1dbe9e00fc82a79d2c7f36f70\",\n        \"blockNumber\": \"0x9cdc05\",\n        \"data\": \"0x\",\n        \"logIndex\": \"0x60\",\n        \"removed\": false,\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"transactionHash\": \"0xf2bc5f1c59ef076d9c2cb046513b983bfa19d0a32ccf1a97973e51c58ec69db6\",\n        \"transactionIndex\": \"0x39\"\n      }\n    ],\n    \"blockNumber\": \"0x9cdc05\",\n    \"cumulativeGasUsed\": \"0xbf7346\",\n    \"status\": \"0x1\"\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n    \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n    \"0x85541202D0692Cdf9f4ce9Aa66a1116D36c96Fe6\",\n    {\n      \"type\": \"BigNumber\",\n      \"hex\": \"0x01312d00\"\n    },\n    {\n      \"type\": \"BigNumber\",\n      \"hex\": \"0x3b8b87c0\"\n    },\n    {\n      \"type\": \"BigNumber\",\n      \"hex\": \"0x012c\"\n    },\n    {\n      \"type\": \"BigNumber\",\n      \"hex\": \"0xb4\"\n    },\n    {\n      \"type\": \"BigNumber\",\n      \"hex\": \"0x038d7ea4c68000\"\n    },\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"8704d78b2acb3413578e4ecb20a5b51d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"_poseidon3\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"_poseidon6\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"_upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon3\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon6\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the idHash being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\",\\\"_upiId\\\":\\\"The upi ID of the depositor\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the idHash being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a idHash from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":\\\"HDFCRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon3.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon3 {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x39cd67d4a7ef93e243c77b7c8a40c3842c060a7f444b0b2c875bce7d8d0c24fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IPoseidon6.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon6 {\\\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9609bcff68e45a22b551bf5f42a5ea62ea0b33e433a89f7c89a6b0714df09229\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon3 } from \\\\\\\"../../interfaces/IPoseidon3.sol\\\\\\\";\\\\nimport { IPoseidon6 } from \\\\\\\"../../interfaces/IPoseidon6.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the idHash\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the idHash\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 idHash;                     // Hash of payment processor id\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[8] upiId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon3 _poseidon3,\\\\n        IPoseidon6 _poseidon6,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon3 = _poseidon3;\\\\n        poseidon6 = _poseidon6;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        IHDFCSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\\\\\"Account already associated with idHash\\\\\\\");\\\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].idHash = idHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, idHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _upiId            The upi ID of the depositor\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[8] memory _upiId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        AccountInfo storage account = accounts[msg.sender];\\\\n        account.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            upiId: _upiId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 idHash = accounts[msg.sender].idHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorIdHash != idHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[idHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a idHash from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _idHash,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            IHDFCSendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 idHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return idHash;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\\\n     */\\\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\\\n        uint256[6] memory temp1;\\\\n        uint256[3] memory temp2;\\\\n\\\\n        for (uint256 i = 0; i < 6; ++i) {\\\\n            temp1[i] = _upiId[i];\\\\n        }\\\\n        temp2[0] = poseidon6.poseidon(temp1);\\\\n        temp2[1] = _upiId[6];\\\\n        temp2[2] = _upiId[7];\\\\n\\\\n        return bytes32(poseidon3.poseidon(temp2));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbe06c5fd6949aa00a39dc46bec9e2a1cf3f10ce4ae11cf3020e908f32d0f880a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b5060405162004318380380620043188339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0389811660805288811660a05287811660c05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c051614020620002f86000396000818161038601526130f301526000818161067901526131900152600081816103d80152818161172701528181611d5701528181612ce50152612d9401526140206000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd61029236600461356c565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de36600461356c565b610799565b005b6102e36102f3366004613590565b6107f6565b6102bd61030636600461356c565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e3610345366004613590565b610928565b6102e3610358366004613590565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce3660046135a9565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36104083660046136f1565b610f47565b6102e361041b366004613590565b610fd4565b61043361042e36600461356c565b611075565b6040516102c791906137aa565b6102e361044e3660046137ee565b6110ee565b6102bd60095481565b61046f61046a36600461356c565b611181565b6040516102c791906138ef565b6102e361048a366004613590565b6113bf565b6102bd60075481565b6102e36104a6366004613590565b61145e565b6102e36104b9366004613970565b6115a9565b6102e361179c565b61046f6104d4366004613970565b6117b0565b6104ec6104e736600461356c565b611986565b6040516102c79190613a16565b6000546001600160a01b03166103a8565b610553610518366004613590565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e3610594366004613590565b611a20565b6102e36105a7366004613a6e565b611ab7565b6102e36105ba366004613590565b611e13565b6105d26105cd366004613590565b611f1a565b6040516102c79190613afc565b6102bd600a5481565b61062f6105f6366004613590565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f36600461356c565b612007565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b0f565b6120bf565b6102e36106bc366004613590565b61217d565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613b84565b6122bb565b6040516102c79190613bf9565b6102e361072736600461356c565b612420565b6002546103a8906001600160a01b031681565b6102e361074d36600461356c565b612476565b610371610760366004613c89565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a16124ef565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613cb5565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b6109306124ef565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd6124ef565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613cb5565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d02565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d598488612549565b90508583600a01541015610e0e57600080610d73896125b4565b91509150878186600a0154610d889190613d02565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd7858361275c565b8085600a016000828254610deb9190613d02565b925050819055508085600b016000828254610e069190613d15565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d15565b925050819055508583600b016000828254610ed09190613d02565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f58878787876127be565b925092509250610f688282612ac4565b826060015182600b016000828254610f809190613d15565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612b9d565b610fcb8184612c88565b50505050505050565b610fdc6124ef565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f66124ef565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff811115611204576112046135e2565b60405190808252806020026020018201604052801561123d57816020015b61122a613366565b8152602001906001900390816112225790505b50915060005b81518110156113b857600082828151811061126057611260613d28565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a836125b4565b91505060405180606001604052808481526020018381526020018284606001516113849190613d02565b81525086858151811061139957611399613d28565b6020026020010181905250505050806113b190613d3e565b9050611243565b5050919050565b6113c76124ef565b66b1a2bc2ec500008111156114295760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166114de5760405162461bcd60e51b815260040161082290613d57565b80546001600160a01b031633146115375760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115418184612ac4565b816060015181600b0160008282546115599190613d15565b909155505081516001600160a01b031660009081526004602090815260408083205483526003909152908190204260019091015582015161159a9082612b9d565b6115a48383612c88565b505050565b6000805b825181101561170a5760008382815181106115ca576115ca613d28565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061164e846125b4565b9150915061165c838361275c565b8083600a015461166c9190613d02565b6116769087613d02565b95508083600b01600082825461168c9190613d15565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906116d3908590613d02565b60405190815260200160405180910390a36000600a8401556116f58484612b9d565b505050508061170390613d3e565b90506115ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611778573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a49190613d86565b6117a46124ef565b6117ae6000612e66565b565b6060815167ffffffffffffffff8111156117cc576117cc6135e2565b60405190808252806020026020018201604052801561180557816020015b6117f2613366565b8152602001906001900390816117ea5790505b50905060005b825181101561198057600083828151811061182857611828613d28565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b815481526020019060010190808311611879575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561190c57602002820191906000526020600020905b8154815260200190600101908083116118f8575b50505050508152505090506000611922836125b4565b915050604051806060016040528084815260200183815260200182846060015161194c9190613d02565b81525085858151811061196157611961613d28565b60200260200101819052505050508061197990613d3e565b905061180b565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a1057602002820191906000526020600020905b8154815260200190600101908083116119fc575b5050505050815250509050919050565b611a286124ef565b80600003611a825760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611ae35760405162461bcd60e51b815260040161082290613cb5565b33600090815260046020526040902060010154600511611b455760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611bb65760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c145760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c29670de0b6b3a764000085613da8565b611c339190613dd5565b600d80549192506000919082611c4883613d3e565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611cef9190830190600861338d565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d3391600d8401916020909101906133cb565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190613d86565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611e3f5760405162461bcd60e51b815260040161082290613cb5565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611eae5760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611ee49060020183612eb6565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f22613405565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611f66575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a1057602002820191906000526020600020908154815260200190600101908083116119fc575050505050815250509050919050565b61200f6124ef565b6001600160a01b0381166120715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561212b5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061213985858585612fdf565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036121f25760405162461bcd60e51b815260040161082290613d57565b336000908152600460205260408082205483516001600160a01b03168352912054146122605760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b604080820151600090815260056020522061227b8184612ac4565b816060015181600a0160008282546122939190613d02565b90915550506060820151600b820180546000906122b1908490613d15565b9091555050505050565b606060008267ffffffffffffffff8111156122d8576122d86135e2565b60405190808252806020026020018201604052801561231157816020015b6122fe613451565b8152602001906001900390816122f65790505b50905060005b8381101561241657600085858381811061233357612333613d28565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b039081168252600183015416958101959095526002810154858301526003810154606080870191909152600490910154608086015281519081019091529093509050808888868181106123b2576123b2613d28565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106123f8576123f8613d28565b602002602001018190525050508061240f90613d3e565b9050612317565b5090505b92915050565b6124286124ef565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b61247e6124ef565b6001600160a01b0381166124e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b6124ec81612e66565b50565b6000546001600160a01b031633146117ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506125ac7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613de9565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561261157602002820191906000526020600020905b8154815260200190600101908083116125fd575b50505050509050805167ffffffffffffffff811115612632576126326135e2565b60405190808252806020026020018201604052801561265b578160200160208202803683370190505b50925060005b81518110156127555760006006600084848151811061268257612682613d28565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916126f591613d02565b10156127445782828151811061270d5761270d613d28565b602002602001015185838151811061272757612727613d28565b602090810291909101015260608101516127419085613d02565b93505b5061274e81613d3e565b9050612661565b5050915091565b60005b81518110156115a4576000801b82828151811061277e5761277e613d28565b6020026020010151146127ae576127ae838383815181106127a1576127a1613d28565b6020026020010151612ac4565b6127b781613d3e565b905061275f565b6127c6613479565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128229190600401613e4e565b60a0604051808303816000875af1158015612841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128659190613ebd565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166128f15760405162461bcd60e51b815260040161082290613d57565b85826080015111156129505760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b60408051610100810191829052869161298c9190600185019060089082845b81548152602001906001019080831161296f57505050505061307f565b146129d95760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612a415760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612a5e9190613da8565b612a689190613dd5565b871015612ab05760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612b68600d840183612eb6565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612bb39190613d02565b9050806000036115a45781546001600160a01b03166000908152600460205260409020612be3906001018461320e565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612c5160018301826134ba565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612c8191906134c9565b5050505050565b6000600b54600014612d5457670de0b6b3a7640000600b548360600151612caf9190613da8565b612cb99190613dd5565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d529190613d86565b505b6000818360600151612d669190613d15565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e019190613d86565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f1284805480602002602001604051908101604052809291908181526020018280548015612f0757602002820191906000526020600020905b815481526020019060010190808311612ef3575b5050505050846132b3565b9150915080612f5b5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612f6c90600190613d15565b9050808314612fb157848181548110612f8757612f87613d28565b9060005260206000200154858481548110612fa457612fa4613d28565b6000918252602090912001555b84805480612fc157612fc1613efd565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161303291600401613f13565b6020604051808303816000875af1158015613051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130759190613f78565b9695505050505050565b60006130896134e7565b613091613505565b60005b60068110156130db578481600881106130af576130af613d28565b60200201518382600681106130c6576130c6613d28565b60200201526130d481613d3e565b9050613094565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a78890613128908590600401613f91565b602060405180830381865afa158015613145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131699190613f78565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e8906131cd908490600401613fc2565b602060405180830381865afa1580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ac9190613f78565b60008061326a8480548060200260200160405190810160405280929190818152602001828054801561325f57602002820191906000526020600020905b81548152602001906001019080831161324b575b505050505084613316565b9150915080612f5b5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b8181101561330357848682815181106132d7576132d7613d28565b6020026020010151036132f15792506001915061330f9050565b806132fb81613d3e565b9150506132bc565b50600019600092509250505b9250929050565b81516000908190815b81811015613303578486828151811061333a5761333a613d28565b6020026020010151036133545792506001915061330f9050565b8061335e81613d3e565b91505061331f565b604051806060016040528060008152602001613380613405565b8152602001600081525090565b82600881019282156133bb579160200282015b828111156133bb5782518255916020019190600101906133a0565b506133c7929150613523565b5090565b8280548282559060005260206000209081019282156133bb57916020028201828111156133bb5782518255916020019190600101906133a0565b6040518060e0016040528060006001600160a01b03168152602001613428613538565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b6040805160608101909152600081526020810161346c613479565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b506124ec906008810190613523565b50805460008255906000526020600020908101906124ec9190613523565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b808211156133c75760008155600101613524565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b03811681146124ec57600080fd5b60006020828403121561357e57600080fd5b813561358981613557565b9392505050565b6000602082840312156135a257600080fd5b5035919050565b6000806000606084860312156135be57600080fd5b833592506020840135915060408401356135d781613557565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561361b5761361b6135e2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561364a5761364a6135e2565b604052919050565b600082601f83011261366357600080fd5b61366b6135f8565b80604084018581111561367d57600080fd5b845b8181101561369757803584526020938401930161367f565b509095945050505050565b600082601f8301126136b357600080fd5b6136bb6135f8565b8060808401858111156136cd57600080fd5b845b81811015613697576136e18782613652565b84526020909301926040016136cf565b6000806000806102e080868803121561370957600080fd5b6137138787613652565b945061372287604088016136a2565b93506137318760c08801613652565b92508661011f87011261374357600080fd5b6040516101e0810181811067ffffffffffffffff82111715613767576137676135e2565b60405290860190808883111561377c57600080fd5b61010088015b8381101561379a578035825260209182019101613782565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b818110156137e2578351835292840192918401916001016137c6565b50909695505050505050565b6000806040838503121561380157600080fd5b823561380c81613557565b9150602083013561381c81613557565b809150509250929050565b600081518084526020808501945080840160005b838110156138575781518752958201959082019060010161383b565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b600881101561389e57825182529183019190830190600101613881565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a08601526138e682860182613827565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561396257603f19898403018552815160608151855288820151818a87015261394482870182613862565b92890151958901959095525094870194925090860190600101613916565b509098975050505050505050565b6000602080838503121561398357600080fd5b823567ffffffffffffffff8082111561399b57600080fd5b818501915085601f8301126139af57600080fd5b8135818111156139c1576139c16135e2565b8060051b91506139d2848301613621565b81815291830184019184810190888411156139ec57600080fd5b938501935b83851015613a0a578435825293850193908501906139f1565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613a635783518252928401926001929092019190840190613a43565b509695505050505050565b60008060006101408486031215613a8457600080fd5b84601f850112613a9357600080fd5b60405161010080820182811067ffffffffffffffff82111715613ab857613ab86135e2565b60405285018187821115613acb57600080fd5b865b82811015613ae5578035825260209182019101613acd565b509197903596506101209590950135949350505050565b6020815260006135896020830184613862565b6000806000806101a0808688031215613b2757600080fd5b613b318787613652565b9450613b4087604088016136a2565b9350613b4f8760c08801613652565b92508661011f870112613b6157600080fd5b60405160a0810181811067ffffffffffffffff82111715613767576137676135e2565b60008060208385031215613b9757600080fd5b823567ffffffffffffffff80821115613baf57600080fd5b818501915085601f830112613bc357600080fd5b813581811115613bd257600080fd5b8660208260051b8501011115613be757600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7c578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c16565b5091979650505050505050565b60008060408385031215613c9c57600080fd5b8235613ca781613557565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561241a5761241a613cec565b8181038181111561241a5761241a613cec565b634e487b7160e01b600052603260045260246000fd5b600060018201613d5057613d50613cec565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613d9857600080fd5b8151801515811461358957600080fd5b808202811582820484141761241a5761241a613cec565b634e487b7160e01b600052601260045260246000fd5b600082613de457613de4613dbf565b500490565b600082613df857613df8613dbf565b500690565b8060005b6002811015612fd9578151845260209384019390910190600101613e01565b8060005b6002811015612fd957613e38848351613dfd565b6040939093019260209190910190600101613e24565b60006102e082019050613e62828451613dfd565b602080840151613e756040850182613e20565b506040840151613e8860c0850182613dfd565b506060840151610100840160005b600f811015613eb357825182529183019190830190600101613e96565b5050505092915050565b600080600080600060a08688031215613ed557600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f27828451613dfd565b602080840151613f3a6040850182613e20565b506040840151613f4d60c0850182613dfd565b506060840151610100840160005b6005811015613eb357825182529183019190830190600101613f5b565b600060208284031215613f8a57600080fd5b5051919050565b60c08101818360005b6006811015613fb9578151835260209283019290910190600101613f9a565b50505092915050565b60608101818360005b6003811015613fb9578151835260209283019290910190600101613fcb56fea2646970667358221220c00812e76066a43a3b32a1497fd6bf724ee43afeeacc7f266f707633cbe8a4de64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd61029236600461356c565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de36600461356c565b610799565b005b6102e36102f3366004613590565b6107f6565b6102bd61030636600461356c565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e3610345366004613590565b610928565b6102e3610358366004613590565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce3660046135a9565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36104083660046136f1565b610f47565b6102e361041b366004613590565b610fd4565b61043361042e36600461356c565b611075565b6040516102c791906137aa565b6102e361044e3660046137ee565b6110ee565b6102bd60095481565b61046f61046a36600461356c565b611181565b6040516102c791906138ef565b6102e361048a366004613590565b6113bf565b6102bd60075481565b6102e36104a6366004613590565b61145e565b6102e36104b9366004613970565b6115a9565b6102e361179c565b61046f6104d4366004613970565b6117b0565b6104ec6104e736600461356c565b611986565b6040516102c79190613a16565b6000546001600160a01b03166103a8565b610553610518366004613590565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e3610594366004613590565b611a20565b6102e36105a7366004613a6e565b611ab7565b6102e36105ba366004613590565b611e13565b6105d26105cd366004613590565b611f1a565b6040516102c79190613afc565b6102bd600a5481565b61062f6105f6366004613590565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f36600461356c565b612007565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b0f565b6120bf565b6102e36106bc366004613590565b61217d565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613b84565b6122bb565b6040516102c79190613bf9565b6102e361072736600461356c565b612420565b6002546103a8906001600160a01b031681565b6102e361074d36600461356c565b612476565b610371610760366004613c89565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a16124ef565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613cb5565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b6109306124ef565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd6124ef565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613cb5565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d02565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d598488612549565b90508583600a01541015610e0e57600080610d73896125b4565b91509150878186600a0154610d889190613d02565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd7858361275c565b8085600a016000828254610deb9190613d02565b925050819055508085600b016000828254610e069190613d15565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d15565b925050819055508583600b016000828254610ed09190613d02565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f58878787876127be565b925092509250610f688282612ac4565b826060015182600b016000828254610f809190613d15565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612b9d565b610fcb8184612c88565b50505050505050565b610fdc6124ef565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f66124ef565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff811115611204576112046135e2565b60405190808252806020026020018201604052801561123d57816020015b61122a613366565b8152602001906001900390816112225790505b50915060005b81518110156113b857600082828151811061126057611260613d28565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a836125b4565b91505060405180606001604052808481526020018381526020018284606001516113849190613d02565b81525086858151811061139957611399613d28565b6020026020010181905250505050806113b190613d3e565b9050611243565b5050919050565b6113c76124ef565b66b1a2bc2ec500008111156114295760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166114de5760405162461bcd60e51b815260040161082290613d57565b80546001600160a01b031633146115375760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115418184612ac4565b816060015181600b0160008282546115599190613d15565b909155505081516001600160a01b031660009081526004602090815260408083205483526003909152908190204260019091015582015161159a9082612b9d565b6115a48383612c88565b505050565b6000805b825181101561170a5760008382815181106115ca576115ca613d28565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061164e846125b4565b9150915061165c838361275c565b8083600a015461166c9190613d02565b6116769087613d02565b95508083600b01600082825461168c9190613d15565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906116d3908590613d02565b60405190815260200160405180910390a36000600a8401556116f58484612b9d565b505050508061170390613d3e565b90506115ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611778573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a49190613d86565b6117a46124ef565b6117ae6000612e66565b565b6060815167ffffffffffffffff8111156117cc576117cc6135e2565b60405190808252806020026020018201604052801561180557816020015b6117f2613366565b8152602001906001900390816117ea5790505b50905060005b825181101561198057600083828151811061182857611828613d28565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b815481526020019060010190808311611879575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561190c57602002820191906000526020600020905b8154815260200190600101908083116118f8575b50505050508152505090506000611922836125b4565b915050604051806060016040528084815260200183815260200182846060015161194c9190613d02565b81525085858151811061196157611961613d28565b60200260200101819052505050508061197990613d3e565b905061180b565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a1057602002820191906000526020600020905b8154815260200190600101908083116119fc575b5050505050815250509050919050565b611a286124ef565b80600003611a825760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611ae35760405162461bcd60e51b815260040161082290613cb5565b33600090815260046020526040902060010154600511611b455760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611bb65760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c145760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c29670de0b6b3a764000085613da8565b611c339190613dd5565b600d80549192506000919082611c4883613d3e565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611cef9190830190600861338d565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d3391600d8401916020909101906133cb565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190613d86565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611e3f5760405162461bcd60e51b815260040161082290613cb5565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611eae5760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611ee49060020183612eb6565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f22613405565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611f66575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a1057602002820191906000526020600020908154815260200190600101908083116119fc575050505050815250509050919050565b61200f6124ef565b6001600160a01b0381166120715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561212b5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061213985858585612fdf565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036121f25760405162461bcd60e51b815260040161082290613d57565b336000908152600460205260408082205483516001600160a01b03168352912054146122605760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b604080820151600090815260056020522061227b8184612ac4565b816060015181600a0160008282546122939190613d02565b90915550506060820151600b820180546000906122b1908490613d15565b9091555050505050565b606060008267ffffffffffffffff8111156122d8576122d86135e2565b60405190808252806020026020018201604052801561231157816020015b6122fe613451565b8152602001906001900390816122f65790505b50905060005b8381101561241657600085858381811061233357612333613d28565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b039081168252600183015416958101959095526002810154858301526003810154606080870191909152600490910154608086015281519081019091529093509050808888868181106123b2576123b2613d28565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106123f8576123f8613d28565b602002602001018190525050508061240f90613d3e565b9050612317565b5090505b92915050565b6124286124ef565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b61247e6124ef565b6001600160a01b0381166124e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b6124ec81612e66565b50565b6000546001600160a01b031633146117ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506125ac7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613de9565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561261157602002820191906000526020600020905b8154815260200190600101908083116125fd575b50505050509050805167ffffffffffffffff811115612632576126326135e2565b60405190808252806020026020018201604052801561265b578160200160208202803683370190505b50925060005b81518110156127555760006006600084848151811061268257612682613d28565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916126f591613d02565b10156127445782828151811061270d5761270d613d28565b602002602001015185838151811061272757612727613d28565b602090810291909101015260608101516127419085613d02565b93505b5061274e81613d3e565b9050612661565b5050915091565b60005b81518110156115a4576000801b82828151811061277e5761277e613d28565b6020026020010151146127ae576127ae838383815181106127a1576127a1613d28565b6020026020010151612ac4565b6127b781613d3e565b905061275f565b6127c6613479565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128229190600401613e4e565b60a0604051808303816000875af1158015612841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128659190613ebd565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166128f15760405162461bcd60e51b815260040161082290613d57565b85826080015111156129505760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b60408051610100810191829052869161298c9190600185019060089082845b81548152602001906001019080831161296f57505050505061307f565b146129d95760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612a415760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612a5e9190613da8565b612a689190613dd5565b871015612ab05760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612b68600d840183612eb6565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612bb39190613d02565b9050806000036115a45781546001600160a01b03166000908152600460205260409020612be3906001018461320e565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612c5160018301826134ba565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612c8191906134c9565b5050505050565b6000600b54600014612d5457670de0b6b3a7640000600b548360600151612caf9190613da8565b612cb99190613dd5565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d529190613d86565b505b6000818360600151612d669190613d15565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e019190613d86565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f1284805480602002602001604051908101604052809291908181526020018280548015612f0757602002820191906000526020600020905b815481526020019060010190808311612ef3575b5050505050846132b3565b9150915080612f5b5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612f6c90600190613d15565b9050808314612fb157848181548110612f8757612f87613d28565b9060005260206000200154858481548110612fa457612fa4613d28565b6000918252602090912001555b84805480612fc157612fc1613efd565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161303291600401613f13565b6020604051808303816000875af1158015613051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130759190613f78565b9695505050505050565b60006130896134e7565b613091613505565b60005b60068110156130db578481600881106130af576130af613d28565b60200201518382600681106130c6576130c6613d28565b60200201526130d481613d3e565b9050613094565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a78890613128908590600401613f91565b602060405180830381865afa158015613145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131699190613f78565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e8906131cd908490600401613fc2565b602060405180830381865afa1580156131ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ac9190613f78565b60008061326a8480548060200260200160405190810160405280929190818152602001828054801561325f57602002820191906000526020600020905b81548152602001906001019080831161324b575b505050505084613316565b9150915080612f5b5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b8181101561330357848682815181106132d7576132d7613d28565b6020026020010151036132f15792506001915061330f9050565b806132fb81613d3e565b9150506132bc565b50600019600092509250505b9250929050565b81516000908190815b81811015613303578486828151811061333a5761333a613d28565b6020026020010151036133545792506001915061330f9050565b8061335e81613d3e565b91505061331f565b604051806060016040528060008152602001613380613405565b8152602001600081525090565b82600881019282156133bb579160200282015b828111156133bb5782518255916020019190600101906133a0565b506133c7929150613523565b5090565b8280548282559060005260206000209081019282156133bb57916020028201828111156133bb5782518255916020019190600101906133a0565b6040518060e0016040528060006001600160a01b03168152602001613428613538565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b6040805160608101909152600081526020810161346c613479565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b506124ec906008810190613523565b50805460008255906000526020600020908101906124ec9190613523565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b808211156133c75760008155600101613524565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b03811681146124ec57600080fd5b60006020828403121561357e57600080fd5b813561358981613557565b9392505050565b6000602082840312156135a257600080fd5b5035919050565b6000806000606084860312156135be57600080fd5b833592506020840135915060408401356135d781613557565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561361b5761361b6135e2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561364a5761364a6135e2565b604052919050565b600082601f83011261366357600080fd5b61366b6135f8565b80604084018581111561367d57600080fd5b845b8181101561369757803584526020938401930161367f565b509095945050505050565b600082601f8301126136b357600080fd5b6136bb6135f8565b8060808401858111156136cd57600080fd5b845b81811015613697576136e18782613652565b84526020909301926040016136cf565b6000806000806102e080868803121561370957600080fd5b6137138787613652565b945061372287604088016136a2565b93506137318760c08801613652565b92508661011f87011261374357600080fd5b6040516101e0810181811067ffffffffffffffff82111715613767576137676135e2565b60405290860190808883111561377c57600080fd5b61010088015b8381101561379a578035825260209182019101613782565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b818110156137e2578351835292840192918401916001016137c6565b50909695505050505050565b6000806040838503121561380157600080fd5b823561380c81613557565b9150602083013561381c81613557565b809150509250929050565b600081518084526020808501945080840160005b838110156138575781518752958201959082019060010161383b565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b600881101561389e57825182529183019190830190600101613881565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a08601526138e682860182613827565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561396257603f19898403018552815160608151855288820151818a87015261394482870182613862565b92890151958901959095525094870194925090860190600101613916565b509098975050505050505050565b6000602080838503121561398357600080fd5b823567ffffffffffffffff8082111561399b57600080fd5b818501915085601f8301126139af57600080fd5b8135818111156139c1576139c16135e2565b8060051b91506139d2848301613621565b81815291830184019184810190888411156139ec57600080fd5b938501935b83851015613a0a578435825293850193908501906139f1565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613a635783518252928401926001929092019190840190613a43565b509695505050505050565b60008060006101408486031215613a8457600080fd5b84601f850112613a9357600080fd5b60405161010080820182811067ffffffffffffffff82111715613ab857613ab86135e2565b60405285018187821115613acb57600080fd5b865b82811015613ae5578035825260209182019101613acd565b509197903596506101209590950135949350505050565b6020815260006135896020830184613862565b6000806000806101a0808688031215613b2757600080fd5b613b318787613652565b9450613b4087604088016136a2565b9350613b4f8760c08801613652565b92508661011f870112613b6157600080fd5b60405160a0810181811067ffffffffffffffff82111715613767576137676135e2565b60008060208385031215613b9757600080fd5b823567ffffffffffffffff80821115613baf57600080fd5b818501915085601f830112613bc357600080fd5b813581811115613bd257600080fd5b8660208260051b8501011115613be757600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7c578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c16565b5091979650505050505050565b60008060408385031215613c9c57600080fd5b8235613ca781613557565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561241a5761241a613cec565b8181038181111561241a5761241a613cec565b634e487b7160e01b600052603260045260246000fd5b600060018201613d5057613d50613cec565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613d9857600080fd5b8151801515811461358957600080fd5b808202811582820484141761241a5761241a613cec565b634e487b7160e01b600052601260045260246000fd5b600082613de457613de4613dbf565b500490565b600082613df857613df8613dbf565b500690565b8060005b6002811015612fd9578151845260209384019390910190600101613e01565b8060005b6002811015612fd957613e38848351613dfd565b6040939093019260209190910190600101613e24565b60006102e082019050613e62828451613dfd565b602080840151613e756040850182613e20565b506040840151613e8860c0850182613dfd565b506060840151610100840160005b600f811015613eb357825182529183019190830190600101613e96565b5050505092915050565b600080600080600060a08688031215613ed557600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f27828451613dfd565b602080840151613f3a6040850182613e20565b506040840151613f4d60c0850182613dfd565b506060840151610100840160005b6005811015613eb357825182529183019190830190600101613f5b565b600060208284031215613f8a57600080fd5b5051919050565b60c08101818360005b6006811015613fb9578151835260209283019290910190600101613f9a565b50505092915050565b60608101818360005b6003811015613fb9578151835260209283019290910190600101613fcb56fea2646970667358221220c00812e76066a43a3b32a1497fd6bf724ee43afeeacc7f266f707633cbe8a4de64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the idHash being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_receiveAmount\": \"The amount of USD to receive\",\n          \"_upiId\": \"The upi ID of the depositor\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the idHash being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a idHash from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1018,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)3073\"\n      },\n      {\n        \"astId\": 1021,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IHDFCSendProcessor)3043\"\n      },\n      {\n        \"astId\": 1023,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 1028,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)976_storage)\"\n      },\n      {\n        \"astId\": 1033,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)915_storage)\"\n      },\n      {\n        \"astId\": 1038,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)933_storage)\"\n      },\n      {\n        \"astId\": 1043,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)952_storage)\"\n      },\n      {\n        \"astId\": 1045,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 1047,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 1049,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 1051,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 1053,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 1055,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 1057,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)8_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[8]\",\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IHDFCSendProcessor)3043\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IHDFCSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IRegistrationProcessor)3073\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)915_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct HDFCRamp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)915_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)976_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)976_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)952_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)952_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)933_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct HDFCRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)933_storage\"\n      },\n      \"t_struct(AccountInfo)915_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 911,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"idHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 914,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)968_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 963,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 967,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)933_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 917,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 921,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"upiId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)8_storage\"\n          },\n          {\n            \"astId\": 923,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 925,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"10\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 927,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"11\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 929,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"12\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 932,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"13\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"448\"\n      },\n      \"t_struct(GlobalAccountInfo)976_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 970,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 972,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 975,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)968_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)952_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 943,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 945,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 947,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 949,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 951,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/HDFCRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0x8E9ca43089F380A904D2d121fAa021bb4fbb0f4a\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x9d3e6e18e6239868997ac4b56838f84284d6bcf9ff1ee0e2fc1fe352d98dcd91\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x8E9ca43089F380A904D2d121fAa021bb4fbb0f4a\",\n    \"transactionIndex\": 105,\n    \"gasUsed\": \"1556838\",\n    \"logsBloom\": \"0x00000000000000000100000000000000000000000000000000800000000000040000000000000000000000100000000000000000000000000000000000002000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x33ad2cb3398a08976798584c9acbc690f2bcac0e3d1b64a4e646299a00c396a4\",\n    \"transactionHash\": \"0x9d3e6e18e6239868997ac4b56838f84284d6bcf9ff1ee0e2fc1fe352d98dcd91\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 105,\n        \"blockNumber\": 10279952,\n        \"transactionHash\": \"0x9d3e6e18e6239868997ac4b56838f84284d6bcf9ff1ee0e2fc1fe352d98dcd91\",\n        \"address\": \"0x8E9ca43089F380A904D2d121fAa021bb4fbb0f4a\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 84,\n        \"blockHash\": \"0x33ad2cb3398a08976798584c9acbc690f2bcac0e3d1b64a4e646299a00c396a4\"\n      }\n    ],\n    \"blockNumber\": 10279952,\n    \"cumulativeGasUsed\": \"8778799\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x7edd66b19a22293af86a2d96761fd7146ba3ff6c\",\n    \"0x6Fe827dEb7606024BE7D2Bbd0a9400F33e0e0bC4\",\n    \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n    \"alerts@hdfcbank.net\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"9f5b84b5a4484299f202298c88bacb39\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":\\\"HDFCRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x85ec4f2b6130ed9f6c91e6a5874ba0a3df09992147056c2010a88fd7be519c82\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xaa4915cfa098a03e7892a41a03da8a163e6abe3b113532b146df93404f6d71cd\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 6865443700594715891152328791607889526330887414086993633068747938072457241685;\\\\n    uint256 constant IC0y = 10468945301756143970646006543367573774178372611766681195220999860357915797944;\\\\n    \\\\n    uint256 constant IC1x = 10704722446523266721180562643447437149651020230245607194259102672100716655622;\\\\n    uint256 constant IC1y = 13835922647350771093409292403482106984225273572439540259619248291997497190338;\\\\n    \\\\n    uint256 constant IC2x = 9082820476663057749813862646863505694595521088627361022677522902057835975674;\\\\n    uint256 constant IC2y = 2956559811855122372464720724455222044024045806141600873519434424076727259549;\\\\n    \\\\n    uint256 constant IC3x = 3792740326745716842453603765202940845282157902511414580984405164815472719626;\\\\n    uint256 constant IC3y = 13398930886279937280023561976368048826175146409027429215170876003688906362216;\\\\n    \\\\n    uint256 constant IC4x = 1141781699151428606267044235130552909660238448565862470582441408755286403649;\\\\n    uint256 constant IC4y = 16789658000733015308721768726691601134554495877403753820826002406384958395008;\\\\n    \\\\n    uint256 constant IC5x = 12543171042042072636131914829125043929342724675040777036405607612956292855474;\\\\n    uint256 constant IC5y = 4103351600393692854136490223669999878503018507420468298933278541160167154342;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xfda139e5a6d84f2834f957effdbc1fe8547a49cab56f6765a48b6e4b9efa532d\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001ced38038062001ced833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611946620003a76000396000818160f4015261023601526119466000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a8ef333f1161008c578063ced1e97811610066578063ced1e978146101e8578063d0b71f99146101f0578063f2fde38b14610203578063f6c7226b1461021657600080fd5b8063a8ef333f146101ad578063b870676c146101c0578063c0d05fed146101d357600080fd5b806334baeab9116100c857806334baeab9146101775780633d0c9cc41461018a578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806319d0915214610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611394565b610229565b60405190815260200161012a565b6101676101623660046113ad565b61048b565b604051901515815260200161012a565b6101676101853660046113d7565b6104ff565b610146600781565b61019a610ad4565b005b6000546001600160a01b0316610116565b600154610116906001600160a01b031681565b600254610116906001600160a01b031681565b6101db610ae8565b60405161012a9190611461565b6101db610b76565b61019a6101fe3660046114a9565b610c08565b61019a6102113660046114a9565b610c32565b61019a6102243660046114e3565b610ca8565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102db9186919082019060c08301906101008401906004016115be565b602060405180830381865afa1580156102f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031c91906115ef565b6103585760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161029f565b61036661010083013561048b565b6103b25760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161029f565b60006103c5836101000160016004610cc0565b905060036040516103d6919061165b565b6040518091039020816040516020016103ef91906116d1565b60405160208183030381529060405280519060200120146104525760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161029f565b6104818360405160200161046691906116ed565b60405160208183030381529060405280519060200120610d9b565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f991906115ef565b92915050565b6000610a62565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610537576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161056d576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061059e576000805260206000f35b5050505050565b7f0f2db41403b26d16a6477f3f560c5fb8733a7f87750511d2bd8b7fffb3fde45585527f1725368b0b7aae6dbfe59f682a4ebca518b9a1250b908bc65cc566ed5960e9b860208601526000608086018661064287357f1e96dacdd702f236cbc6e08a50a2d482a78e7ee9466a3b02c3a87baa061067c27f17aaa87f66846abafb32ae46744660e44fc6f3d0d43f861c1eea3498a1fb34068461053a565b61069260208801357f06895a8263dc74eb795e63357084ef094c398d431a988d75e8583ea69290919d7f1414b1b7c6ba7696c5f6432fbc270f241dd3990520416b7db6544615bfd653fa8461053a565b6106e260408801357f1d9f86b08f6cadc2cda6b62f0504118b7c944a4da04ef6dd38a701b960fa0d687f08629d6d7ab06972ce7d84b96d5386d54ac1d0e9ea18950060a21095869cf70a8461053a565b61073260608801357f251e9c133e192e9f2b71e2b395b486c8b312eed2f141f7c23051085a62cb52807f028639bd03293f66441c223f0071718cd4e13cedf6bc2c2d35a6be2e08afea418461053a565b61078260808801357f09126a29f235cfb46d32f97f5c0081245ec79c4ed43f436ed180643384caa2a67f1bbb2ee7c85cef8065d233d9db5ea89236397496fb862ab25b84c85f7d76b6b28461053a565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a7a6000840135610506565b610a876020840135610506565b610a946040840135610506565b610aa16060840135610506565b610aae6080840135610506565b610abb60a0840135610506565b610ac8818486888a6105a5565b90508060005260206000f35b610adc610eaf565b610ae66000610f09565b565b60038054610af590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2190611627565b8015610b6e5780601f10610b4357610100808354040283529160200191610b6e565b820191906000526020600020905b815481529060010190602001808311610b5157829003601f168201915b505050505081565b606060038054610b8590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb190611627565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b610c10610eaf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c3a610eaf565b6001600160a01b038116610c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161029f565b61053781610f09565b610cb0610eaf565b6003610cbc8282611774565b5050565b60606000610cce848461184a565b60ff1667ffffffffffffffff811115610ce957610ce96114cd565b604051908082528060200260200182016040528015610d12578160200160208202803683370190505b50905060ff84165b8360ff16811015610d7757858160058110610d3757610d37611611565b602002013582610d4a60ff881684611863565b81518110610d5a57610d5a611611565b602090810291909101015280610d6f81611876565b915050610d1a565b50610d9260078251610d89919061188f565b82906007610f59565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0891906115ef565b15610e555760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161029f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610e9b57600080fd5b505af115801561059e573d6000803e3d6000fd5b6000546001600160a01b03163314610ae65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610f6b919061188f565b67ffffffffffffffff811115610f8357610f836114cd565b6040519080825280601f01601f191660200182016040528015610fad576020820181803683370190505b5090506000805b87518161ffff161015611164576000888261ffff1681518110610fd957610fd9611611565b6020026020010151905060008767ffffffffffffffff811115610ffe57610ffe6114cd565b604051908082528060200260200182016040528015611027578160200160208202803683370190505b50905060005b888110156110795761104081600861188f565b83901c82828151811061105557611055611611565b60ff909216602092830291909101909101528061107181611876565b91505061102d565b5060005b8881101561114e57600082828151811061109957611099611611565b602002602001015160ff16905080600014611111578060f81b8787815181106110c4576110c4611611565b60200101906001600160f81b031916908160001a905350856110e581611876565b96506110f490506002896118a6565b60ff1660000361110c576111096001896118d6565b97505b611134565b61111c6002896118a6565b60ff16600103611134576111316001896118d6565b97505b5060089290921c918061114681611876565b91505061107d565b505050808061115c906118ef565b915050610fb4565b5060018360ff1610156112055760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161029f565b858111156112735760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161029f565b600061127e8361128a565b98975050505050505050565b8051606090829060005b82518110156112df578281815181106112af576112af611611565b01602001516001600160f81b0319166000036112cd578091506112df565b806112d781611876565b915050611294565b5060008167ffffffffffffffff8111156112fb576112fb6114cd565b6040519080825280601f01601f191660200182016040528015611325576020820181803683370190505b50905060005b8281101561138b5783818151811061134557611345611611565b602001015160f81c60f81b82828151811061136257611362611611565b60200101906001600160f81b031916908160001a9053508061138381611876565b91505061132b565b50949350505050565b60006101a082840312156113a757600080fd5b50919050565b6000602082840312156113bf57600080fd5b5035919050565b80604081018310156104f957600080fd5b6000806000806101a08086880312156113ef57600080fd5b6113f987876113c6565b945060c086018781111561140c57600080fd5b60408701945061141c88826113c6565b93505086818701111561142e57600080fd5b50929591945092610100019150565b60005b83811015611458578181015183820152602001611440565b50506000910152565b602081526000825180602084015261148081604085016020870161143d565b601f01601f19169190910160400192915050565b6001600160a01b038116811461053757600080fd5b6000602082840312156114bb57600080fd5b81356114c681611494565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156114f557600080fd5b813567ffffffffffffffff8082111561150d57600080fd5b818401915084601f83011261152157600080fd5b813581811115611533576115336114cd565b604051601f8201601f19908116603f0116810190838211818310171561155b5761155b6114cd565b8160405282815287602084870101111561157457600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115b857604080838637938401939190910190600101611598565b50505050565b6101a0810160408683376115d56040830186611594565b60408460c084013760a08361010084013795945050505050565b60006020828403121561160157600080fd5b815180151581146114c657600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061163b57607f821691505b6020821081036113a757634e487b7160e01b600052602260045260246000fd5b600080835461166981611627565b600182811680156116815760018114611696576116c5565b60ff19841687528215158302870194506116c5565b8760005260208060002060005b858110156116bc5781548a8201529084019082016116a3565b50505082870194505b50929695505050505050565b600082516116e381846020870161143d565b9190910192915050565b6101a0810160408383376117076040830160408501611594565b604060c0840160c084013761010060a0818501828501375092915050565b601f82111561176f57600081815260208120601f850160051c8101602086101561174c5750805b601f850160051c820191505b8181101561176b57828155600101611758565b5050505b505050565b815167ffffffffffffffff81111561178e5761178e6114cd565b6117a28161179c8454611627565b84611725565b602080601f8311600181146117d757600084156117bf5750858301515b600019600386901b1c1916600185901b17855561176b565b600085815260208120601f198616915b82811015611806578886015182559484019460019091019084016117e7565b50858210156118245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156104f9576104f9611834565b818103818111156104f9576104f9611834565b60006001820161188857611888611834565b5060010190565b80820281158282048414176104f9576104f9611834565b600060ff8316806118c757634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156104f9576104f9611834565b600061ffff80831681810361190657611906611834565b600101939250505056fea264697066735822122017a25456349cef222e065fa5c5290eba6b011a9d328610b280333cd50525780064736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a8ef333f1161008c578063ced1e97811610066578063ced1e978146101e8578063d0b71f99146101f0578063f2fde38b14610203578063f6c7226b1461021657600080fd5b8063a8ef333f146101ad578063b870676c146101c0578063c0d05fed146101d357600080fd5b806334baeab9116100c857806334baeab9146101775780633d0c9cc41461018a578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806319d0915214610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611394565b610229565b60405190815260200161012a565b6101676101623660046113ad565b61048b565b604051901515815260200161012a565b6101676101853660046113d7565b6104ff565b610146600781565b61019a610ad4565b005b6000546001600160a01b0316610116565b600154610116906001600160a01b031681565b600254610116906001600160a01b031681565b6101db610ae8565b60405161012a9190611461565b6101db610b76565b61019a6101fe3660046114a9565b610c08565b61019a6102113660046114a9565b610c32565b61019a6102243660046114e3565b610ca8565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102db9186919082019060c08301906101008401906004016115be565b602060405180830381865afa1580156102f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031c91906115ef565b6103585760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161029f565b61036661010083013561048b565b6103b25760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161029f565b60006103c5836101000160016004610cc0565b905060036040516103d6919061165b565b6040518091039020816040516020016103ef91906116d1565b60405160208183030381529060405280519060200120146104525760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161029f565b6104818360405160200161046691906116ed565b60405160208183030381529060405280519060200120610d9b565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f991906115ef565b92915050565b6000610a62565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610537576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161056d576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061059e576000805260206000f35b5050505050565b7f0f2db41403b26d16a6477f3f560c5fb8733a7f87750511d2bd8b7fffb3fde45585527f1725368b0b7aae6dbfe59f682a4ebca518b9a1250b908bc65cc566ed5960e9b860208601526000608086018661064287357f1e96dacdd702f236cbc6e08a50a2d482a78e7ee9466a3b02c3a87baa061067c27f17aaa87f66846abafb32ae46744660e44fc6f3d0d43f861c1eea3498a1fb34068461053a565b61069260208801357f06895a8263dc74eb795e63357084ef094c398d431a988d75e8583ea69290919d7f1414b1b7c6ba7696c5f6432fbc270f241dd3990520416b7db6544615bfd653fa8461053a565b6106e260408801357f1d9f86b08f6cadc2cda6b62f0504118b7c944a4da04ef6dd38a701b960fa0d687f08629d6d7ab06972ce7d84b96d5386d54ac1d0e9ea18950060a21095869cf70a8461053a565b61073260608801357f251e9c133e192e9f2b71e2b395b486c8b312eed2f141f7c23051085a62cb52807f028639bd03293f66441c223f0071718cd4e13cedf6bc2c2d35a6be2e08afea418461053a565b61078260808801357f09126a29f235cfb46d32f97f5c0081245ec79c4ed43f436ed180643384caa2a67f1bbb2ee7c85cef8065d233d9db5ea89236397496fb862ab25b84c85f7d76b6b28461053a565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a7a6000840135610506565b610a876020840135610506565b610a946040840135610506565b610aa16060840135610506565b610aae6080840135610506565b610abb60a0840135610506565b610ac8818486888a6105a5565b90508060005260206000f35b610adc610eaf565b610ae66000610f09565b565b60038054610af590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2190611627565b8015610b6e5780601f10610b4357610100808354040283529160200191610b6e565b820191906000526020600020905b815481529060010190602001808311610b5157829003601f168201915b505050505081565b606060038054610b8590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb190611627565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b610c10610eaf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c3a610eaf565b6001600160a01b038116610c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161029f565b61053781610f09565b610cb0610eaf565b6003610cbc8282611774565b5050565b60606000610cce848461184a565b60ff1667ffffffffffffffff811115610ce957610ce96114cd565b604051908082528060200260200182016040528015610d12578160200160208202803683370190505b50905060ff84165b8360ff16811015610d7757858160058110610d3757610d37611611565b602002013582610d4a60ff881684611863565b81518110610d5a57610d5a611611565b602090810291909101015280610d6f81611876565b915050610d1a565b50610d9260078251610d89919061188f565b82906007610f59565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0891906115ef565b15610e555760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161029f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610e9b57600080fd5b505af115801561059e573d6000803e3d6000fd5b6000546001600160a01b03163314610ae65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610f6b919061188f565b67ffffffffffffffff811115610f8357610f836114cd565b6040519080825280601f01601f191660200182016040528015610fad576020820181803683370190505b5090506000805b87518161ffff161015611164576000888261ffff1681518110610fd957610fd9611611565b6020026020010151905060008767ffffffffffffffff811115610ffe57610ffe6114cd565b604051908082528060200260200182016040528015611027578160200160208202803683370190505b50905060005b888110156110795761104081600861188f565b83901c82828151811061105557611055611611565b60ff909216602092830291909101909101528061107181611876565b91505061102d565b5060005b8881101561114e57600082828151811061109957611099611611565b602002602001015160ff16905080600014611111578060f81b8787815181106110c4576110c4611611565b60200101906001600160f81b031916908160001a905350856110e581611876565b96506110f490506002896118a6565b60ff1660000361110c576111096001896118d6565b97505b611134565b61111c6002896118a6565b60ff16600103611134576111316001896118d6565b97505b5060089290921c918061114681611876565b91505061107d565b505050808061115c906118ef565b915050610fb4565b5060018360ff1610156112055760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161029f565b858111156112735760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161029f565b600061127e8361128a565b98975050505050505050565b8051606090829060005b82518110156112df578281815181106112af576112af611611565b01602001516001600160f81b0319166000036112cd578091506112df565b806112d781611876565b915050611294565b5060008167ffffffffffffffff8111156112fb576112fb6114cd565b6040519080825280601f01601f191660200182016040528015611325576020820181803683370190505b50905060005b8281101561138b5783818151811061134557611345611611565b602001015160f81c60f81b82828151811061136257611362611611565b60200101906001600160f81b031916908160001a9053508061138381611876565b91505061132b565b50949350505050565b60006101a082840312156113a757600080fd5b50919050565b6000602082840312156113bf57600080fd5b5035919050565b80604081018310156104f957600080fd5b6000806000806101a08086880312156113ef57600080fd5b6113f987876113c6565b945060c086018781111561140c57600080fd5b60408701945061141c88826113c6565b93505086818701111561142e57600080fd5b50929591945092610100019150565b60005b83811015611458578181015183820152602001611440565b50506000910152565b602081526000825180602084015261148081604085016020870161143d565b601f01601f19169190910160400192915050565b6001600160a01b038116811461053757600080fd5b6000602082840312156114bb57600080fd5b81356114c681611494565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156114f557600080fd5b813567ffffffffffffffff8082111561150d57600080fd5b818401915084601f83011261152157600080fd5b813581811115611533576115336114cd565b604051601f8201601f19908116603f0116810190838211818310171561155b5761155b6114cd565b8160405282815287602084870101111561157457600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115b857604080838637938401939190910190600101611598565b50505050565b6101a0810160408683376115d56040830186611594565b60408460c084013760a08361010084013795945050505050565b60006020828403121561160157600080fd5b815180151581146114c657600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061163b57607f821691505b6020821081036113a757634e487b7160e01b600052602260045260246000fd5b600080835461166981611627565b600182811680156116815760018114611696576116c5565b60ff19841687528215158302870194506116c5565b8760005260208060002060005b858110156116bc5781548a8201529084019082016116a3565b50505082870194505b50929695505050505050565b600082516116e381846020870161143d565b9190910192915050565b6101a0810160408383376117076040830160408501611594565b604060c0840160c084013761010060a0818501828501375092915050565b601f82111561176f57600081815260208120601f850160051c8101602086101561174c5750805b601f850160051c820191505b8181101561176b57828155600101611758565b5050505b505050565b815167ffffffffffffffff81111561178e5761178e6114cd565b6117a28161179c8454611627565b84611725565b602080601f8311600181146117d757600084156117bf5750858301515b600019600386901b1c1916600185901b17855561176b565b600085815260208120601f198616915b82811015611806578886015182559484019460019091019084016117e7565b50858210156118245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156104f9576104f9611834565b818103818111156104f9576104f9611834565b60006001820161188857611888611834565b5060010190565b80820281158282048414176104f9576104f9611834565b600060ff8316806118c757634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156104f9576104f9611834565b600061ffff80831681810361190657611906611834565b600101939250505056fea264697066735822122017a25456349cef222e065fa5c5290eba6b011a9d328610b280333cd50525780064736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3509\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3714\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3509\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3714\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/HDFCSendProcessor.json",
    "content": "{\n  \"address\": \"0xEF14b8a0196002dA629c1eC585371274FA9Da7d8\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"internalType\": \"struct IHDFCSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xd100ed16c80b9b50442c661f1d6583b1a2792d306d2f781d0933b5c941e70075\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xEF14b8a0196002dA629c1eC585371274FA9Da7d8\",\n    \"transactionIndex\": 63,\n    \"gasUsed\": \"2404168\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000001000000000000000000000000000000000000030000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000200000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x84f17ed7001b5f34d717ba1955dc14211a515d7d39b7ef695522b4c21fc9f6c4\",\n    \"transactionHash\": \"0xd100ed16c80b9b50442c661f1d6583b1a2792d306d2f781d0933b5c941e70075\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 63,\n        \"blockNumber\": 10279953,\n        \"transactionHash\": \"0xd100ed16c80b9b50442c661f1d6583b1a2792d306d2f781d0933b5c941e70075\",\n        \"address\": \"0xEF14b8a0196002dA629c1eC585371274FA9Da7d8\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 68,\n        \"blockHash\": \"0x84f17ed7001b5f34d717ba1955dc14211a515d7d39b7ef695522b4c21fc9f6c4\"\n      }\n    ],\n    \"blockNumber\": 10279953,\n    \"cumulativeGasUsed\": \"7845503\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x7edd66b19a22293af86a2d96761fd7146ba3ff6c\",\n    \"0x6Fe827dEb7606024BE7D2Bbd0a9400F33e0e0bC4\",\n    \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n    \"alerts@hdfcbank.net\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"9f5b84b5a4484299f202298c88bacb39\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"internalType\\\":\\\"struct IHDFCSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":\\\"HDFCSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/DateTime.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.0;\\\\n\\\\n// ----------------------------------------------------------------------------\\\\n// DateTime Library v2.0\\\\n//\\\\n// A gas-efficient Solidity date and time library\\\\n//\\\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\\\n//\\\\n// Tested date range 1970/01/01 to 2345/12/31\\\\n//\\\\n// Conventions:\\\\n// Unit      | Range         | Notes\\\\n// :-------- |:-------------:|:-----\\\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\\\n// year      | 1970 ... 2345 |\\\\n// month     | 1 ... 12      |\\\\n// day       | 1 ... 31      |\\\\n// hour      | 0 ... 23      |\\\\n// minute    | 0 ... 59      |\\\\n// second    | 0 ... 59      |\\\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\\\n//\\\\n//\\\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\\\n//\\\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\\\n// ----------------------------------------------------------------------------\\\\n\\\\nlibrary DateTime {\\\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\\\n    int256 constant OFFSET19700101 = 2440588;\\\\n\\\\n    uint256 constant DOW_MON = 1;\\\\n    uint256 constant DOW_TUE = 2;\\\\n    uint256 constant DOW_WED = 3;\\\\n    uint256 constant DOW_THU = 4;\\\\n    uint256 constant DOW_FRI = 5;\\\\n    uint256 constant DOW_SAT = 6;\\\\n    uint256 constant DOW_SUN = 7;\\\\n\\\\n    // ------------------------------------------------------------------------\\\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\\\n    // the date conversion algorithm from\\\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\\\n    //\\\\n    // days = day\\\\n    //      - 32075\\\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\\\n    //      - offset\\\\n    // ------------------------------------------------------------------------\\\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\\\n        require(year >= 1970);\\\\n        int256 _year = int256(year);\\\\n        int256 _month = int256(month);\\\\n        int256 _day = int256(day);\\\\n\\\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\\\n\\\\n        _days = uint256(__days);\\\\n    }\\\\n\\\\n    function timestampFromDateTime(\\\\n        uint256 year,\\\\n        uint256 month,\\\\n        uint256 day,\\\\n        uint256 hour,\\\\n        uint256 minute,\\\\n        uint256 second\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256 timestamp)\\\\n    {\\\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\\\n            + minute * SECONDS_PER_MINUTE + second;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x64f6113ad342f8bd3c2eb74fde279401d604faf77dd08f6c16c3912c3519f170\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x85ec4f2b6130ed9f6c91e6a5874ba0a3df09992147056c2010a88fd7be519c82\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { DateTime } from \\\\\\\"../../external/DateTime.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_send_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 7;\\\\n    uint256 constant IST_OFFSET = 19800;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IHDFCSendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, , that we need to\\\\n        // parse and convert to a unix timestamp\\\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\\\n\\\\n        // Signals [11] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\\\n\\\\n        // Signals [12] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\\\n\\\\n        // Signals [14] is intentHash\\\\n        intentHash = bytes32(_proof.signals[14]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\\\n     */\\\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\\\n        string[8] memory extractedStrings;\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\\\n                lastBreak = i + 1;\\\\n                breakCounter++;\\\\n            }\\\\n        }\\\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\\\n        require(breakCounter == 7, \\\\\\\"Invalid date string\\\\\\\");\\\\n\\\\n        return DateTime.timestampFromDateTime(\\\\n            extractedStrings[3].stringToUint(0), // year\\\\n            _parseMonth(extractedStrings[2]), // month\\\\n            extractedStrings[1].stringToUint(0), // day\\\\n            extractedStrings[4].stringToUint(0), // hour\\\\n            extractedStrings[5].stringToUint(0), // minute\\\\n            extractedStrings[6].stringToUint(0) // second\\\\n        ) - IST_OFFSET;\\\\n    }\\\\n\\\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jan\\\\\\\")) {\\\\n            return 1;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Feb\\\\\\\")) {\\\\n            return 2;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Mar\\\\\\\")) {\\\\n            return 3;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Apr\\\\\\\")) {\\\\n            return 4;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"May\\\\\\\")) {\\\\n            return 5;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jun\\\\\\\")) {\\\\n            return 6;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jul\\\\\\\")) {\\\\n            return 7;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Aug\\\\\\\")) {\\\\n            return 8;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Sep\\\\\\\")) {\\\\n            return 9;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Oct\\\\\\\")) {\\\\n            return 10;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Nov\\\\\\\")) {\\\\n            return 11;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Dec\\\\\\\")) {\\\\n            return 12;\\\\n        } else {\\\\n            revert(\\\\\\\"Invalid month\\\\\\\");\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x465b140a464db62aa52b10787e1be21e278166939abb3cd4d8aa6400555917c3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n\\\\n\\\\n    uint256 constant IC0x = 7948712917874849781328365661027367011398916994267746344840851439625837578323;\\\\n    uint256 constant IC0y = 14445610336427827969214783890094209349619216720637343095223018572693254280923;\\\\n\\\\n    uint256 constant IC1x = 3654976868371838169631577898462947005550108125685649400186026683210975806547;\\\\n    uint256 constant IC1y = 7383470632301847779131345725687431208414525939319998905342796582584383932784;\\\\n\\\\n    uint256 constant IC2x = 15960136517117002583905099076229506420678130465330836605642076667698312488907;\\\\n    uint256 constant IC2y = 10981003641590459938830276725941498612829685925850889415515039958666798745545;\\\\n\\\\n    uint256 constant IC3x = 18064147597098347735634254758923927729758051955626895483758091493962336324910;\\\\n    uint256 constant IC3y = 14561976814062079545004557051651175882415454473414826337411715544694691078488;\\\\n\\\\n    uint256 constant IC4x = 5479872440797886105045613557892343574379959348291323344571145668056905130790;\\\\n    uint256 constant IC4y = 19816668883377774512316396795679515122358992446677555233530823190449668202575;\\\\n\\\\n    uint256 constant IC5x = 9764995418164291848924916053122788044578670279004409359935206951759326535751;\\\\n    uint256 constant IC5y = 11151240738595525109186562114546767429226785384258075837825604200334229399893;\\\\n\\\\n    uint256 constant IC6x = 8592289604370662283816667811371636409851377122184258261984779162566069289701;\\\\n    uint256 constant IC6y = 14924863702174947616504138427154175911132478861008643941575632275190130139352;\\\\n\\\\n    uint256 constant IC7x = 18144310048336844926716356091507529474953804436633311455291234260603469939801;\\\\n    uint256 constant IC7y = 20695654519010539727518673528536864282905304035588394263484365314168181698771;\\\\n\\\\n    uint256 constant IC8x = 6502380984206062082509747555585722773109086149921002084837192664976139632635;\\\\n    uint256 constant IC8y = 20559694265554344023542679863623632229239552087994730960172389697388976005511;\\\\n\\\\n    uint256 constant IC9x = 20112907151747105787761530796573701791334087761671369712034010592321424588594;\\\\n    uint256 constant IC9y = 7868275330531868976088552522626764067554872392097431803379373791917043873429;\\\\n\\\\n    uint256 constant IC10x = 21738568466342470712305504479308744377477421607586657477021567762815751353985;\\\\n    uint256 constant IC10y = 15899136431442502164449286654852349998271141738582178828650897248716421930967;\\\\n\\\\n    uint256 constant IC11x = 8797574036872579022038442307145559829777119719185174358600414786794648200526;\\\\n    uint256 constant IC11y = 19158045316273481821441527564745598208594831388291307046183673615092116714767;\\\\n\\\\n    uint256 constant IC12x = 1856159710792583584076099033562199824825551035760525968182870506068750338922;\\\\n    uint256 constant IC12y = 5431689035393664841658365783566955093050903672278814147361678362199701787106;\\\\n\\\\n    uint256 constant IC13x = 1326184215165888620491943578175089960460457074386949049899809721605475868360;\\\\n    uint256 constant IC13y = 19798068085286831236096103256261325470985925228876029833389405086405680467005;\\\\n\\\\n    uint256 constant IC14x = 21303925226345182261601479972988106925149727015068245014063996271014722518363;\\\\n    uint256 constant IC14y = 13822581075918761258491041321378418848172590182506086615070972333032971332948;\\\\n\\\\n    uint256 constant IC15x = 7601301681882298785665130103217482061846330487834337423048688553591898089998;\\\\n    uint256 constant IC15y = 16353595650180105876268966027044363473882857313997670459546834066677499432092;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n\\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n\\\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\\\n\\\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\\\n\\\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 416)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 448)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 480)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x9b7c8835baab146dac72845ba07958ac6ea18b67b55647e1a4ada90c89d61874\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162002c3d38038062002c3d833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612896620003a76000396000818160d901526102b901526128966000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063bf93fde11161008c578063d0b71f9911610066578063d0b71f99146101d4578063f054a9a3146101e7578063f2fde38b146101fa578063f6c7226b1461020d57600080fd5b8063bf93fde11461017c578063c0d05fed146101b7578063ced1e978146101cc57600080fd5b806315d276e1146100d457806319d0915214610118578063715018a61461013b5780638da5cb5b14610145578063a8ef333f14610156578063b870676c14610169575b600080fd5b6100fb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61012b610126366004612172565b610220565b604051901515815260200161010f565b610143610294565b005b6000546001600160a01b03166100fb565b6001546100fb906001600160a01b031681565b6002546100fb906001600160a01b031681565b61018f61018a36600461218b565b6102a8565b604080519586526020860194909452928401919091526060830152608082015260a00161010f565b6101bf610547565b60405161010f91906121c8565b6101bf6105d5565b6101436101e2366004612210565b610667565b61012b6101f5366004612245565b610691565b610143610208366004612210565b611017565b61014361021b3660046122c1565b61108d565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa15801561026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028e9190612372565b92915050565b61029c6110a5565b6102a660006110ff565b565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461032b5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a39161035e918a919082019060c0830190610100840190600401612394565b602060405180830381865afa15801561037b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039f9190612372565b6103db5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610322565b6103e9610100870135610220565b6104355760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610322565b600061044887610100016001600461114f565b90506003604051610459919061242b565b60405180910390208160405160200161047291906124a1565b60405160208183030381529060405280519060200120146104d55760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610322565b6104f160066104eb89610100016004600661114f565b9061122a565b9550600061050688610100016006600b61114f565b905061051181611400565b9550610280880135945061026088013593506105316102a0890135611576565b509496939592945090926102c090920135919050565b60038054610554906123f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610580906123f7565b80156105cd5780601f106105a2576101008083540402835291602001916105cd565b820191906000526020600020905b8154815290600101906020018083116105b057829003601f168201915b505050505081565b6060600380546105e4906123f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610610906123f7565b801561065d5780601f106106325761010080835404028352916020019161065d565b820191906000526020600020905b81548152906001019060200180831161064057829003601f168201915b5050505050905090565b61066f6110a5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f1b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781106106c9576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816106ff576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610730576000805260206000f35b5050505050565b7f1192cfe47346d47a3d54b56a571d87d19ca23fbdd99e971626ac1ce626dd885385527f1fefecfb1a66000f84cc50c428cadc39f0f411b87900b91d696aa8148c6d96db6020860152600060808601866107d487357f1052e572d3d9a24a7dbd5f82eaf774938e6e2b5469bbb39dad893c06f9af89707f0814a4c2cecf4e01b1c9c33bc5b896f4aecc69ec353bf843da39e5cfd9560453846106cc565b61082460208801357f1847071e7b28427ff89b02b112ed0c8e9b7001a09148f45819db6ec968c8c7c97f23491dfd59dbfdd40973e01cb7abe689229136cbf955f8ea245c1a7d8891a7cb846106cc565b61087460408801357f2031c96ba61c2380347848f5f5aeb8a9dc5cb48ee66709978e0a72b88c2621587f27eff1f9bda6c4f917b1b2f79bbae13913da4d4261e943599d2f5cfabd1e4d2e846106cc565b6108c460608801357f2bcfd64d15676238f2ca22edbb0a213b57d789d36546493c26d95adb7e9fa04f7f0c1d7f759fb7eb003ef2fca2d05be32496040b5af4f2a193506bbe8fd0ffa326846106cc565b61091460808801357f18a760eb5a9c3f79fa070392ea988ecf52f7c2231ec24f0431fa8a92044e69557f1596caa2aa368ba130136a0ba36d77345e4a5d862bec76d5297f3f5c7de8e047846106cc565b61096460a08801357f20ff2c6a6c3bcdf9a3d88d4665f7ac4a3fb351df12d53c2591f03ecfaabbe0d87f12ff10467d7d41a14e1ee97e95b7d2f1220db995c6b3a1557817fcd0a85782e5846106cc565b6109b460c08801357f2dc1534a581ac0b0ee1550a2b421d73509c22d76b045cac677327a52835330d37f281d50c8500d81a7b40e409e2e04baa9d61815cbfb08af90770644e24abdc459846106cc565b610a0460e08801357f2d745fe442ae36cb87de1502efe86320eedb4c6819d7131567037522e0ffe1877f0e60379b6844d926d3e748d7093c403e905d54b30443c37b66457012e7ea3ffb846106cc565b610a556101008801357f11654938835b1e85bbd7f1d19e7729e77cab08521887d373ec36196ebb3bf6957f2c778085279765f9ce6d2ec5490971196c38c253963c4ca0c265241fd523ff32846106cc565b610aa66101208801357f232697a26bd7085c4aca969e97e8e8963200d364c99e65eb479791871ce91fd77f300f97fe9ffe1c5a063c5a119c4623bea625d5751dc40e90caff122761dcf681846106cc565b610af76101408801357f2a5b11c33902d497e923442dd426692bba812e4d3f374b229bb13328ed31750f7f1373401d497609d91f87d814450592989f601b1c210f94fa4f13b250dca7654e846106cc565b610b486101608801357f0c023a1fc97b326612fd041fea93911daa8e0a0f6eaff5469a1dc151562b11e27f041a8c9628c7e898ae40d4fec14836c1948e8e4f07de3a7fc90c94d3c5c78b6a846106cc565b610b996101808801357f2bc54f3723018f2f925397ff82a005195621e7e7f5f568fa69487e6f70808c3d7f02ee97fa7a770940595f90fa5cd9b4d5c02d27a54326efa0065bb9532b251ec8846106cc565b610bea6101a08801357f1e8f4dbb73a4daeb3247550b43c66065214cc929e37eaafe57950bc3a75a6d547f2f199828d55ca11010e83070e17756f3aec7a9f5b8f742d27792a0c66fe9bd5b846106cc565b610c3b6101c08801357f2427ce9fb70c46fe9bbd844d0032485a256dc4befcddc1039cef7ecbb1800c9c7f10ce2f2d844571bc9154dabbec265f336073944708b5b63aeaf9499abc07aa0e846106cc565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f336000840135610698565b610f406020840135610698565b610f4d6040840135610698565b610f5a6060840135610698565b610f676080840135610698565b610f7460a0840135610698565b610f8160c0840135610698565b610f8e60e0840135610698565b610f9c610100840135610698565b610faa610120840135610698565b610fb8610140840135610698565b610fc6610160840135610698565b610fd4610180840135610698565b610fe26101a0840135610698565b610ff06101c0840135610698565b610ffe6101e0840135610698565b61100b818486888a610737565b90508060005260206000f35b61101f6110a5565b6001600160a01b0381166110845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b6106c9816110ff565b6110956110a5565b60036110a1828261250c565b5050565b6000546001600160a01b031633146102a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061115d84846125e2565b60ff1667ffffffffffffffff811115611178576111786122ab565b6040519080825280602002602001820160405280156111a1578160200160208202803683370190505b50905060ff84165b8360ff16811015611206578581600f81106111c6576111c66123e1565b6020020135826111d960ff8816846125fb565b815181106111e9576111e96123e1565b6020908102919091010152806111fe8161260e565b9150506111a9565b50611221600782516112189190612627565b8290600761168a565b95945050505050565b600082818080805b845181101561137a57603060f81b858281518110611252576112526123e1565b01602001516001600160f81b031916108015906112935750603960f81b858281518110611281576112816123e1565b01602001516001600160f81b03191611155b156112d65760308582815181106112ac576112ac6123e1565b01602001516112be919060f81c6125fb565b6112c985600a612627565b6112d3919061263e565b93505b81156112ea57826112e68161260e565b9350505b8481815181106112fc576112fc6123e1565b01602001516001600160f81b031916601760f91b036113685781156113635760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610322565b600191505b806113728161260e565b915050611232565b50858211156113d65760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610322565b6113e082876125fb565b6113eb90600a612735565b6113f59084612627565b979650505050505050565b600061140a61214a565b60008060005b85518110156114c45785818151811061142b5761142b6123e1565b6020910101516001600160f81b031916600160fd1b14806114705750858181518110611459576114596123e1565b6020910101516001600160f81b031916601d60f91b145b156114b2576114808683836119bb565b848460088110611492576114926123e1565b60200201526114a281600161263e565b9150826114ae8161260e565b9350505b806114bc8161260e565b915050611410565b508160071461150b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606401610322565b614d5861156c61152560008660035b60200201519061122a565b604086015161153390611a88565b611540600088600161151a565b61154d600089600461151a565b61155a60008a600561151a565b61156760008b600661151a565b611ebe565b61122191906125fb565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156115bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e39190612372565b156116305760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610322565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561167657600080fd5b505af1158015610730573d6000803e3d6000fd5b606060008083865161169c9190612627565b67ffffffffffffffff8111156116b4576116b46122ab565b6040519080825280601f01601f1916602001820160405280156116de576020820181803683370190505b5090506000805b87518161ffff161015611895576000888261ffff168151811061170a5761170a6123e1565b6020026020010151905060008767ffffffffffffffff81111561172f5761172f6122ab565b604051908082528060200260200182016040528015611758578160200160208202803683370190505b50905060005b888110156117aa57611771816008612627565b83901c828281518110611786576117866123e1565b60ff90921660209283029190910190910152806117a28161260e565b91505061175e565b5060005b8881101561187f5760008282815181106117ca576117ca6123e1565b602002602001015160ff16905080600014611842578060f81b8787815181106117f5576117f56123e1565b60200101906001600160f81b031916908160001a905350856118168161260e565b96506118259050600289612757565b60ff1660000361183d5761183a600189612779565b97505b611865565b61184d600289612757565b60ff1660010361186557611862600189612779565b97505b5060089290921c91806118778161260e565b9150506117ae565b505050808061188d90612792565b9150506116e5565b5060018360ff1610156119365760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610322565b858111156119a45760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610322565b60006119af83611f0f565b98975050505050505050565b60608360006119ca85856125fb565b67ffffffffffffffff8111156119e2576119e26122ab565b6040519080825280601f01601f191660200182016040528015611a0c576020820181803683370190505b509050845b84811015611a7e57828181518110611a2b57611a2b6123e1565b01602001516001600160f81b03191682611a4588846125fb565b81518110611a5557611a556123e1565b60200101906001600160f81b031916908160001a90535080611a768161260e565b915050611a11565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611abc91906124a1565b6040516020818303038152906040528051906020012003611adf57506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611b1191906124a1565b6040516020818303038152906040528051906020012003611b3457506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611b6691906124a1565b6040516020818303038152906040528051906020012003611b8957506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611bbb91906124a1565b6040516020818303038152906040528051906020012003611bde57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611c1091906124a1565b6040516020818303038152906040528051906020012003611c3357506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611c6591906124a1565b6040516020818303038152906040528051906020012003611c8857506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611cba91906124a1565b6040516020818303038152906040528051906020012003611cdd57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611d0f91906124a1565b6040516020818303038152906040528051906020012003611d3257506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611d6491906124a1565b6040516020818303038152906040528051906020012003611d8757506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611db991906124a1565b6040516020818303038152906040528051906020012003611ddc5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611e0e91906124a1565b6040516020818303038152906040528051906020012003611e315750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611e6391906124a1565b6040516020818303038152906040528051906020012003611e865750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b6044820152606401610322565b600081611ecc603c85612627565b611ed8610e1087612627565b62015180611ee78b8b8b612019565b611ef19190612627565b611efb919061263e565b611f05919061263e565b6113f5919061263e565b8051606090829060005b8251811015611f6457828181518110611f3457611f346123e1565b01602001516001600160f81b031916600003611f5257809150611f64565b80611f5c8161260e565b915050611f19565b5060008167ffffffffffffffff811115611f8057611f806122ab565b6040519080825280601f01601f191660200182016040528015611faa576020820181803683370190505b50905060005b8281101561201057838181518110611fca57611fca6123e1565b602001015160f81c60f81b828281518110611fe757611fe76123e1565b60200101906001600160f81b031916908160001a905350806120088161260e565b915050611fb0565b50949350505050565b60006107b284101561202a57600080fd5b838383600062253d8c60046064600c612044600e886127b3565b61204e91906127da565b61205a88611324612808565b6120649190612808565b61206e91906127da565b612079906003612830565b61208391906127da565b600c80612091600e886127b3565b61209b91906127da565b6120a690600c612830565b6120b16002886127b3565b6120bb91906127b3565b6120c79061016f612830565b6120d191906127da565b6004600c6120e0600e896127b3565b6120ea91906127da565b6120f6896112c0612808565b6121009190612808565b61210c906105b5612830565b61211691906127da565b612122617d4b876127b3565b61212c9190612808565b6121369190612808565b61214091906127b3565b6119af91906127b3565b6040518061010001604052806008905b606081526020019060019003908161215a5790505090565b60006020828403121561218457600080fd5b5035919050565b60006102e0828403121561219e57600080fd5b50919050565b60005b838110156121bf5781810151838201526020016121a7565b50506000910152565b60208152600082518060208401526121e78160408501602087016121a4565b601f01601f19169190910160400192915050565b6001600160a01b03811681146106c957600080fd5b60006020828403121561222257600080fd5b813561222d816121fb565b9392505050565b806040810183101561028e57600080fd5b6000806000806102e080868803121561225d57600080fd5b6122678787612234565b945060c086018781111561227a57600080fd5b60408701945061228a8882612234565b93505086818701111561229c57600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156122d357600080fd5b813567ffffffffffffffff808211156122eb57600080fd5b818401915084601f8301126122ff57600080fd5b813581811115612311576123116122ab565b604051601f8201601f19908116603f01168101908382118183101715612339576123396122ab565b8160405282815287602084870101111561235257600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561238457600080fd5b8151801515811461222d57600080fd5b6102e081016040808784378083018660005b60028110156123c3578382843791830191908301906001016123a6565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061240b57607f821691505b60208210810361219e57634e487b7160e01b600052602260045260246000fd5b6000808354612439816123f7565b60018281168015612451576001811461246657612495565b60ff1984168752821515830287019450612495565b8760005260208060002060005b8581101561248c5781548a820152908401908201612473565b50505082870194505b50929695505050505050565b600082516124b38184602087016121a4565b9190910192915050565b601f82111561250757600081815260208120601f850160051c810160208610156124e45750805b601f850160051c820191505b81811015612503578281556001016124f0565b5050505b505050565b815167ffffffffffffffff811115612526576125266122ab565b61253a8161253484546123f7565b846124bd565b602080601f83116001811461256f57600084156125575750858301515b600019600386901b1c1916600185901b178555612503565b600085815260208120601f198616915b8281101561259e5788860151825594840194600190910190840161257f565b50858210156125bc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561028e5761028e6125cc565b8181038181111561028e5761028e6125cc565b600060018201612620576126206125cc565b5060010190565b808202811582820484141761028e5761028e6125cc565b8082018082111561028e5761028e6125cc565b600181815b8085111561268c578160001904821115612672576126726125cc565b8085161561267f57918102915b93841c9390800290612656565b509250929050565b6000826126a35750600161028e565b816126b05750600061028e565b81600181146126c657600281146126d0576126ec565b600191505061028e565b60ff8411156126e1576126e16125cc565b50506001821b61028e565b5060208310610133831016604e8410600b841016171561270f575081810a61028e565b6127198383612651565b806000190482111561272d5761272d6125cc565b029392505050565b600061222d8383612694565b634e487b7160e01b600052601260045260246000fd5b600060ff83168061276a5761276a612741565b8060ff84160691505092915050565b60ff818116838216019081111561028e5761028e6125cc565b600061ffff8083168181036127a9576127a96125cc565b6001019392505050565b81810360008312801583831316838312821617156127d3576127d36125cc565b5092915050565b6000826127e9576127e9612741565b600160ff1b821460001984141615612803576128036125cc565b500590565b8082018281126000831280158216821582161715612828576128286125cc565b505092915050565b80820260008212600160ff1b8414161561284c5761284c6125cc565b818105831482151761028e5761028e6125cc56fea26469706673582212205d3be1a2ef134703d7a1ca464a905f0993d9ce8d211ee9eb0bca12641b48791d64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063bf93fde11161008c578063d0b71f9911610066578063d0b71f99146101d4578063f054a9a3146101e7578063f2fde38b146101fa578063f6c7226b1461020d57600080fd5b8063bf93fde11461017c578063c0d05fed146101b7578063ced1e978146101cc57600080fd5b806315d276e1146100d457806319d0915214610118578063715018a61461013b5780638da5cb5b14610145578063a8ef333f14610156578063b870676c14610169575b600080fd5b6100fb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61012b610126366004612172565b610220565b604051901515815260200161010f565b610143610294565b005b6000546001600160a01b03166100fb565b6001546100fb906001600160a01b031681565b6002546100fb906001600160a01b031681565b61018f61018a36600461218b565b6102a8565b604080519586526020860194909452928401919091526060830152608082015260a00161010f565b6101bf610547565b60405161010f91906121c8565b6101bf6105d5565b6101436101e2366004612210565b610667565b61012b6101f5366004612245565b610691565b610143610208366004612210565b611017565b61014361021b3660046122c1565b61108d565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa15801561026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028e9190612372565b92915050565b61029c6110a5565b6102a660006110ff565b565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461032b5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a39161035e918a919082019060c0830190610100840190600401612394565b602060405180830381865afa15801561037b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039f9190612372565b6103db5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610322565b6103e9610100870135610220565b6104355760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610322565b600061044887610100016001600461114f565b90506003604051610459919061242b565b60405180910390208160405160200161047291906124a1565b60405160208183030381529060405280519060200120146104d55760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610322565b6104f160066104eb89610100016004600661114f565b9061122a565b9550600061050688610100016006600b61114f565b905061051181611400565b9550610280880135945061026088013593506105316102a0890135611576565b509496939592945090926102c090920135919050565b60038054610554906123f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610580906123f7565b80156105cd5780601f106105a2576101008083540402835291602001916105cd565b820191906000526020600020905b8154815290600101906020018083116105b057829003601f168201915b505050505081565b6060600380546105e4906123f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610610906123f7565b801561065d5780601f106106325761010080835404028352916020019161065d565b820191906000526020600020905b81548152906001019060200180831161064057829003601f168201915b5050505050905090565b61066f6110a5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f1b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781106106c9576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816106ff576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610730576000805260206000f35b5050505050565b7f1192cfe47346d47a3d54b56a571d87d19ca23fbdd99e971626ac1ce626dd885385527f1fefecfb1a66000f84cc50c428cadc39f0f411b87900b91d696aa8148c6d96db6020860152600060808601866107d487357f1052e572d3d9a24a7dbd5f82eaf774938e6e2b5469bbb39dad893c06f9af89707f0814a4c2cecf4e01b1c9c33bc5b896f4aecc69ec353bf843da39e5cfd9560453846106cc565b61082460208801357f1847071e7b28427ff89b02b112ed0c8e9b7001a09148f45819db6ec968c8c7c97f23491dfd59dbfdd40973e01cb7abe689229136cbf955f8ea245c1a7d8891a7cb846106cc565b61087460408801357f2031c96ba61c2380347848f5f5aeb8a9dc5cb48ee66709978e0a72b88c2621587f27eff1f9bda6c4f917b1b2f79bbae13913da4d4261e943599d2f5cfabd1e4d2e846106cc565b6108c460608801357f2bcfd64d15676238f2ca22edbb0a213b57d789d36546493c26d95adb7e9fa04f7f0c1d7f759fb7eb003ef2fca2d05be32496040b5af4f2a193506bbe8fd0ffa326846106cc565b61091460808801357f18a760eb5a9c3f79fa070392ea988ecf52f7c2231ec24f0431fa8a92044e69557f1596caa2aa368ba130136a0ba36d77345e4a5d862bec76d5297f3f5c7de8e047846106cc565b61096460a08801357f20ff2c6a6c3bcdf9a3d88d4665f7ac4a3fb351df12d53c2591f03ecfaabbe0d87f12ff10467d7d41a14e1ee97e95b7d2f1220db995c6b3a1557817fcd0a85782e5846106cc565b6109b460c08801357f2dc1534a581ac0b0ee1550a2b421d73509c22d76b045cac677327a52835330d37f281d50c8500d81a7b40e409e2e04baa9d61815cbfb08af90770644e24abdc459846106cc565b610a0460e08801357f2d745fe442ae36cb87de1502efe86320eedb4c6819d7131567037522e0ffe1877f0e60379b6844d926d3e748d7093c403e905d54b30443c37b66457012e7ea3ffb846106cc565b610a556101008801357f11654938835b1e85bbd7f1d19e7729e77cab08521887d373ec36196ebb3bf6957f2c778085279765f9ce6d2ec5490971196c38c253963c4ca0c265241fd523ff32846106cc565b610aa66101208801357f232697a26bd7085c4aca969e97e8e8963200d364c99e65eb479791871ce91fd77f300f97fe9ffe1c5a063c5a119c4623bea625d5751dc40e90caff122761dcf681846106cc565b610af76101408801357f2a5b11c33902d497e923442dd426692bba812e4d3f374b229bb13328ed31750f7f1373401d497609d91f87d814450592989f601b1c210f94fa4f13b250dca7654e846106cc565b610b486101608801357f0c023a1fc97b326612fd041fea93911daa8e0a0f6eaff5469a1dc151562b11e27f041a8c9628c7e898ae40d4fec14836c1948e8e4f07de3a7fc90c94d3c5c78b6a846106cc565b610b996101808801357f2bc54f3723018f2f925397ff82a005195621e7e7f5f568fa69487e6f70808c3d7f02ee97fa7a770940595f90fa5cd9b4d5c02d27a54326efa0065bb9532b251ec8846106cc565b610bea6101a08801357f1e8f4dbb73a4daeb3247550b43c66065214cc929e37eaafe57950bc3a75a6d547f2f199828d55ca11010e83070e17756f3aec7a9f5b8f742d27792a0c66fe9bd5b846106cc565b610c3b6101c08801357f2427ce9fb70c46fe9bbd844d0032485a256dc4befcddc1039cef7ecbb1800c9c7f10ce2f2d844571bc9154dabbec265f336073944708b5b63aeaf9499abc07aa0e846106cc565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f336000840135610698565b610f406020840135610698565b610f4d6040840135610698565b610f5a6060840135610698565b610f676080840135610698565b610f7460a0840135610698565b610f8160c0840135610698565b610f8e60e0840135610698565b610f9c610100840135610698565b610faa610120840135610698565b610fb8610140840135610698565b610fc6610160840135610698565b610fd4610180840135610698565b610fe26101a0840135610698565b610ff06101c0840135610698565b610ffe6101e0840135610698565b61100b818486888a610737565b90508060005260206000f35b61101f6110a5565b6001600160a01b0381166110845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b6106c9816110ff565b6110956110a5565b60036110a1828261250c565b5050565b6000546001600160a01b031633146102a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061115d84846125e2565b60ff1667ffffffffffffffff811115611178576111786122ab565b6040519080825280602002602001820160405280156111a1578160200160208202803683370190505b50905060ff84165b8360ff16811015611206578581600f81106111c6576111c66123e1565b6020020135826111d960ff8816846125fb565b815181106111e9576111e96123e1565b6020908102919091010152806111fe8161260e565b9150506111a9565b50611221600782516112189190612627565b8290600761168a565b95945050505050565b600082818080805b845181101561137a57603060f81b858281518110611252576112526123e1565b01602001516001600160f81b031916108015906112935750603960f81b858281518110611281576112816123e1565b01602001516001600160f81b03191611155b156112d65760308582815181106112ac576112ac6123e1565b01602001516112be919060f81c6125fb565b6112c985600a612627565b6112d3919061263e565b93505b81156112ea57826112e68161260e565b9350505b8481815181106112fc576112fc6123e1565b01602001516001600160f81b031916601760f91b036113685781156113635760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610322565b600191505b806113728161260e565b915050611232565b50858211156113d65760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610322565b6113e082876125fb565b6113eb90600a612735565b6113f59084612627565b979650505050505050565b600061140a61214a565b60008060005b85518110156114c45785818151811061142b5761142b6123e1565b6020910101516001600160f81b031916600160fd1b14806114705750858181518110611459576114596123e1565b6020910101516001600160f81b031916601d60f91b145b156114b2576114808683836119bb565b848460088110611492576114926123e1565b60200201526114a281600161263e565b9150826114ae8161260e565b9350505b806114bc8161260e565b915050611410565b508160071461150b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b6044820152606401610322565b614d5861156c61152560008660035b60200201519061122a565b604086015161153390611a88565b611540600088600161151a565b61154d600089600461151a565b61155a60008a600561151a565b61156760008b600661151a565b611ebe565b61122191906125fb565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156115bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e39190612372565b156116305760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610322565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561167657600080fd5b505af1158015610730573d6000803e3d6000fd5b606060008083865161169c9190612627565b67ffffffffffffffff8111156116b4576116b46122ab565b6040519080825280601f01601f1916602001820160405280156116de576020820181803683370190505b5090506000805b87518161ffff161015611895576000888261ffff168151811061170a5761170a6123e1565b6020026020010151905060008767ffffffffffffffff81111561172f5761172f6122ab565b604051908082528060200260200182016040528015611758578160200160208202803683370190505b50905060005b888110156117aa57611771816008612627565b83901c828281518110611786576117866123e1565b60ff90921660209283029190910190910152806117a28161260e565b91505061175e565b5060005b8881101561187f5760008282815181106117ca576117ca6123e1565b602002602001015160ff16905080600014611842578060f81b8787815181106117f5576117f56123e1565b60200101906001600160f81b031916908160001a905350856118168161260e565b96506118259050600289612757565b60ff1660000361183d5761183a600189612779565b97505b611865565b61184d600289612757565b60ff1660010361186557611862600189612779565b97505b5060089290921c91806118778161260e565b9150506117ae565b505050808061188d90612792565b9150506116e5565b5060018360ff1610156119365760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610322565b858111156119a45760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610322565b60006119af83611f0f565b98975050505050505050565b60608360006119ca85856125fb565b67ffffffffffffffff8111156119e2576119e26122ab565b6040519080825280601f01601f191660200182016040528015611a0c576020820181803683370190505b509050845b84811015611a7e57828181518110611a2b57611a2b6123e1565b01602001516001600160f81b03191682611a4588846125fb565b81518110611a5557611a556123e1565b60200101906001600160f81b031916908160001a90535080611a768161260e565b915050611a11565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611abc91906124a1565b6040516020818303038152906040528051906020012003611adf57506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611b1191906124a1565b6040516020818303038152906040528051906020012003611b3457506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611b6691906124a1565b6040516020818303038152906040528051906020012003611b8957506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611bbb91906124a1565b6040516020818303038152906040528051906020012003611bde57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611c1091906124a1565b6040516020818303038152906040528051906020012003611c3357506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611c6591906124a1565b6040516020818303038152906040528051906020012003611c8857506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611cba91906124a1565b6040516020818303038152906040528051906020012003611cdd57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611d0f91906124a1565b6040516020818303038152906040528051906020012003611d3257506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611d6491906124a1565b6040516020818303038152906040528051906020012003611d8757506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611db991906124a1565b6040516020818303038152906040528051906020012003611ddc5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611e0e91906124a1565b6040516020818303038152906040528051906020012003611e315750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611e6391906124a1565b6040516020818303038152906040528051906020012003611e865750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b6044820152606401610322565b600081611ecc603c85612627565b611ed8610e1087612627565b62015180611ee78b8b8b612019565b611ef19190612627565b611efb919061263e565b611f05919061263e565b6113f5919061263e565b8051606090829060005b8251811015611f6457828181518110611f3457611f346123e1565b01602001516001600160f81b031916600003611f5257809150611f64565b80611f5c8161260e565b915050611f19565b5060008167ffffffffffffffff811115611f8057611f806122ab565b6040519080825280601f01601f191660200182016040528015611faa576020820181803683370190505b50905060005b8281101561201057838181518110611fca57611fca6123e1565b602001015160f81c60f81b828281518110611fe757611fe76123e1565b60200101906001600160f81b031916908160001a905350806120088161260e565b915050611fb0565b50949350505050565b60006107b284101561202a57600080fd5b838383600062253d8c60046064600c612044600e886127b3565b61204e91906127da565b61205a88611324612808565b6120649190612808565b61206e91906127da565b612079906003612830565b61208391906127da565b600c80612091600e886127b3565b61209b91906127da565b6120a690600c612830565b6120b16002886127b3565b6120bb91906127b3565b6120c79061016f612830565b6120d191906127da565b6004600c6120e0600e896127b3565b6120ea91906127da565b6120f6896112c0612808565b6121009190612808565b61210c906105b5612830565b61211691906127da565b612122617d4b876127b3565b61212c9190612808565b6121369190612808565b61214091906127b3565b6119af91906127b3565b6040518061010001604052806008905b606081526020019060019003908161215a5790505090565b60006020828403121561218457600080fd5b5035919050565b60006102e0828403121561219e57600080fd5b50919050565b60005b838110156121bf5781810151838201526020016121a7565b50506000910152565b60208152600082518060208401526121e78160408501602087016121a4565b601f01601f19169190910160400192915050565b6001600160a01b03811681146106c957600080fd5b60006020828403121561222257600080fd5b813561222d816121fb565b9392505050565b806040810183101561028e57600080fd5b6000806000806102e080868803121561225d57600080fd5b6122678787612234565b945060c086018781111561227a57600080fd5b60408701945061228a8882612234565b93505086818701111561229c57600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156122d357600080fd5b813567ffffffffffffffff808211156122eb57600080fd5b818401915084601f8301126122ff57600080fd5b813581811115612311576123116122ab565b604051601f8201601f19908116603f01168101908382118183101715612339576123396122ab565b8160405282815287602084870101111561235257600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561238457600080fd5b8151801515811461222d57600080fd5b6102e081016040808784378083018660005b60028110156123c3578382843791830191908301906001016123a6565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061240b57607f821691505b60208210810361219e57634e487b7160e01b600052602260045260246000fd5b6000808354612439816123f7565b60018281168015612451576001811461246657612495565b60ff1984168752821515830287019450612495565b8760005260208060002060005b8581101561248c5781548a820152908401908201612473565b50505082870194505b50929695505050505050565b600082516124b38184602087016121a4565b9190910192915050565b601f82111561250757600081815260208120601f850160051c810160208610156124e45750805b601f850160051c820191505b81811015612503578281556001016124f0565b5050505b505050565b815167ffffffffffffffff811115612526576125266122ab565b61253a8161253484546123f7565b846124bd565b602080601f83116001811461256f57600084156125575750858301515b600019600386901b1c1916600185901b178555612503565b600085815260208120601f198616915b8281101561259e5788860151825594840194600190910190840161257f565b50858210156125bc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561028e5761028e6125cc565b8181038181111561028e5761028e6125cc565b600060018201612620576126206125cc565b5060010190565b808202811582820484141761028e5761028e6125cc565b8082018082111561028e5761028e6125cc565b600181815b8085111561268c578160001904821115612672576126726125cc565b8085161561267f57918102915b93841c9390800290612656565b509250929050565b6000826126a35750600161028e565b816126b05750600061028e565b81600181146126c657600281146126d0576126ec565b600191505061028e565b60ff8411156126e1576126e16125cc565b50506001821b61028e565b5060208310610133831016604e8410600b841016171561270f575081810a61028e565b6127198383612651565b806000190482111561272d5761272d6125cc565b029392505050565b600061222d8383612694565b634e487b7160e01b600052601260045260246000fd5b600060ff83168061276a5761276a612741565b8060ff84160691505092915050565b60ff818116838216019081111561028e5761028e6125cc565b600061ffff8083168181036127a9576127a96125cc565b6001019392505050565b81810360008312801583831316838312821617156127d3576127d36125cc565b5092915050565b6000826127e9576127e9612741565b600160ff1b821460001984141615612803576128036125cc565b500590565b8082018281126000831280158216821582161715612828576128286125cc565b505092915050565b80820260008212600160ff1b8414161561284c5761284c6125cc565b818105831482151761028e5761028e6125cc56fea26469706673582212205d3be1a2ef134703d7a1ca464a905f0993d9ce8d211ee9eb0bca12641b48791d64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3509\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3714\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3509\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3714\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/NullifierRegistry.json",
    "content": "{\n  \"address\": \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"nullifier\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NullifierAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_nullifier\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addNullifier\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWriters\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isNullified\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWriter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removedWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"writers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc08253c1059f1c5d0386fa7dc2785faa96858021ba5697fc7dac57b5d4ac9c9c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n    \"transactionIndex\": 16,\n    \"gasUsed\": \"610203\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000008000000000000400000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x022612ff27c2cd7d135b709546877a11b1a9319caafec21e9be6cd273dfb3ae8\",\n    \"transactionHash\": \"0xc08253c1059f1c5d0386fa7dc2785faa96858021ba5697fc7dac57b5d4ac9c9c\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 16,\n        \"blockNumber\": 10176684,\n        \"transactionHash\": \"0xc08253c1059f1c5d0386fa7dc2785faa96858021ba5697fc7dac57b5d4ac9c9c\",\n        \"address\": \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 81,\n        \"blockHash\": \"0x022612ff27c2cd7d135b709546877a11b1a9319caafec21e9be6cd273dfb3ae8\"\n      }\n    ],\n    \"blockNumber\": 10176684,\n    \"cumulativeGasUsed\": \"3954149\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f04018ca3672426744531c5b0e9c8cda\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"nullifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NullifierAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_nullifier\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addNullifier\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWriters\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isNullified\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWriter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removedWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"writers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"params\\\":{\\\"_nullifier\\\":\\\"The nullifier to store\\\"}},\\\"addWritePermission(address)\\\":{\\\"params\\\":{\\\"_newWriter\\\":\\\"The nullifier to store\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeWritePermission(address)\\\":{\\\"params\\\":{\\\"_removedWriter\\\":\\\"The nullifier to store\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"notice\\\":\\\"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\"},\\\"addWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\"},\\\"removeWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":\\\"NullifierRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"../../external/AddressArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\\\n    event WriterAdded(address writer);\\\\n    event WriterRemoved(address writer);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyWriter() {\\\\n        require(isWriter[msg.sender], \\\\\\\"Only addresses with write permissions can call\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(bytes32 => bool) public isNullified;\\\\n    mapping(address => bool) public isWriter;\\\\n    address[] public writers;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor() Ownable() {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\\n     *\\\\n     * @param _nullifier    The nullifier to store\\\\n     */\\\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\\\n        require(!isNullified[_nullifier], \\\\\\\"Nullifier already exists\\\\\\\");\\\\n\\\\n        isNullified[_nullifier] = true;\\\\n\\\\n        emit NullifierAdded(_nullifier, msg.sender);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\\n     *\\\\n     * @param _newWriter    The nullifier to store\\\\n     */\\\\n    function addWritePermission(address _newWriter) external onlyOwner {\\\\n        require(!isWriter[_newWriter], \\\\\\\"Address is already a writer\\\\\\\");\\\\n\\\\n        isWriter[_newWriter] = true;\\\\n        writers.push(_newWriter);\\\\n\\\\n        emit WriterAdded(_newWriter);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\\n     *\\\\n     * @param _removedWriter    The nullifier to store\\\\n     */\\\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\\\n        require(isWriter[_removedWriter], \\\\\\\"Address is not a writer\\\\\\\");\\\\n\\\\n        isWriter[_removedWriter] = false;\\\\n        writers.removeStorage(_removedWriter);\\\\n\\\\n        emit WriterRemoved(_removedWriter);\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getWriters() external view returns(address[] memory) {\\\\n       return writers;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x20f773bb8f52b109301fca328369f2d5cebc8d105d2d0cf9588adccab2f9d1c8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61099f8061007e6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"params\": {\n          \"_nullifier\": \"The nullifier to store\"\n        }\n      },\n      \"addWritePermission(address)\": {\n        \"params\": {\n          \"_newWriter\": \"The nullifier to store\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"params\": {\n          \"_removedWriter\": \"The nullifier to store\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"notice\": \"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\"\n      },\n      \"addWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9428,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isNullified\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 9432,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isWriter\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 9435,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"writers\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/Poseidon3.json",
    "content": "{\n  \"address\": \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[3]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xbca9b3ad3fac95465b8e7c5d96be7e934adbb4ecfef6bd8e304953a9af0038cd\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n    \"transactionIndex\": 7,\n    \"gasUsed\": \"2745274\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x13fd6e5553e9f36b9024a5742a138c46baaf1445fde11f4278ad14c3ae755324\",\n    \"transactionHash\": \"0xbca9b3ad3fac95465b8e7c5d96be7e934adbb4ecfef6bd8e304953a9af0038cd\",\n    \"logs\": [],\n    \"blockNumber\": 10176680,\n    \"cumulativeGasUsed\": \"3232680\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c6000396130af6000f37c010000000000000000000000000000000000000000000000000000000060003504806325cc70e81490635a53025d14176200003757fe5b7f236d13393ef85cc48a351dd786dd7a1de5e39942296127fd87947223ae5108ad6020527f277686494f7644bbc4a9b194e10724eb967f1dc58718e59e3cedc821b2a7ae196040527f023db68784e3f0cc0b85618826a9b3505129c16479973b0a84a4529e66b09c626060527f1d359d245f286c12d50d663bae733f978af08cdbd63017c57b3a75646ff382c16080527f2a75a171563b807db525be259699ab28fe9bc7fb1f70943ff049bc970e841a0c60a0527f083abff5e10051f078e2827d092e1ae808b4dd3e15ccc3706f38ce4157b6770e60c0527f1a5ad71bbbecd8a97dc49cfdbae303ad24d5c4741eab8b7568a9ff8253a1eb6f60e0527f0d745fd00dd167fb86772133640f02ce945004a7bc2c59e8790f725c5d84f0af610100527f2070679e798782ef592a52ca9cef820d497ad2eecbaa7e42f366b3e521c4ed42610120527f2e18c8570d20bf5df800739a53da75d906ece318cd224ab6b3a2be979e2d7eab610140527f0fa86f0f27e4d3dd7f3367ce86f684f1f2e4386d3e5b9f38fa283c6aa723b608610160527f03f3e6fab791f16628168e4b14dbaeb657035ee3da6b2ca83f0c2491e0b403eb610180527f2f545e578202c9732488540e41f783b68ff0613fd79375f8ba8b3d30958e76776101a0527f23810bf82877fc19bff7eefeae3faf4bb8104c32ba4cd701596a15623d01476e6101c0527f014fcd5eb0be6d5beeafc4944034cf321c068ef930f10be2207ed58d2a34cdd66101e0527f00c15fc3a1d5733dd835eae0823e377f8ba4a8b627627cc2bb661c25d20fb52a610200527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016044356024356004356000847f19b849f69450b06848da1d39bd5e4a4302bb86744edc26238b0878e269ed23e582089050847f265ddfe127dd51bd7239347b758f0a1320eb2cc7450acc1dad47f80c8dcf34d683089150847f199750ec472f1809e0f66a545e1e51624108ac845015c2aa3dfc36bab497d8aa84089250847f157ff3fe65ac7208110f06a5f74302b14d743ea25067f0ffd032f787c7f1cdf8850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200038160005262003015565b847f2e49c43c4569dd9c5fd35ac45fca33f10b15c590692f8beefe18f4896ac9490282089050847f0e35fb89981890520d4aef2b6d6506c3cb2f0b6973c24fa82731345ffa2d1f1e83089150847f251ad47cb15c4f1105f109ae5e944f1ba9d9e7806d667ffec6fe723002e0b99684089250847f13da07dc64d428369873e97160234641f8beb56fdd05e5f3563fa39d9c22df4e850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200045660005262003015565b847f0c009b84e650e6d23dc00c7dccef7483a553939689d350cd46e7b89055fd473882089050847f011f16b1c63a854f01992e3956f42d8b04eb650c6d535eb0203dec74befdca0683089150847f0ed69e5e383a688f209d9a561daa79612f3f78d0467ad45485df07093f36754984089250847f04dba94a7b0ce9e221acad41472b6bbe3aec507f5eb3d33f463672264c9f789b850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200052b60005262003015565b847f0a3f2637d840f3a16eb094271c9d237b6036757d4bb50bf7ce732ff1d4fa28e882089050847f259a666f129eea198f8a1c502fdb38fa39b1f075569564b6e54a485d1182323f83089150847f28bf7459c9b2f4c6d8e7d06a4ee3a47f7745d4271038e5157a32fdf7ede0d6a184089250847f0a1ca941f057037526ea200f489be8d4c37c85bbcce6a2aeec91bd6941432447850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200060060005262003015565b847f0c6f8f958be0e93053d7fd4fc54512855535ed1539f051dcb43a26fd926361cf82089050847f123106a93cd17578d426e8128ac9d90aa9e8a00708e296e084dd57e69caaf81183089150847f26e1ba52ad9285d97dd3ab52f8e840085e8fa83ff1e8f1877b074867cd2dee7584089250847f1cb55cad7bd133de18a64c5c47b9c97cbe4d8b7bf9e095864471537e6a4ae2c585089350848181808280098009099050620006b160005262003015565b847f1dcd73e46acd8f8e0e2c7ce04bde7f6d2a53043d5060a41c7143f08e6e9055d082089050847f011003e32f6d9c66f5852f05474a4def0cda294a0eb4e9b9b12b9bb4512e557483089150847f2b1e809ac1d10ab29ad5f20d03a57dfebadfe5903f58bafed7c508dd2287ae8c84089250847f2539de1785b735999fb4dac35ee17ed0ef995d05ab2fc5faeaa69ae87bcec0a5850893508481818082800980090990506200076260005262003015565b847f0c246c5a2ef8ee0126497f222b3e0a0ef4e1c3d41c86d46e43982cb11d77951d82089050847f192089c4974f68e95408148f7c0632edbb09e6a6ad1a1c2f3f0305f5d03b527b83089150847f1eae0ad8ab68b2f06a0ee36eeb0d0c058529097d91096b756d8fdc2fb5a60d8584089250847f179190e5d0e22179e46f8282872abc88db6e2fdc0dee99e69768bd98c5d06bfb850893508481818082800980090990506200081360005262003015565b847f29bb9e2c9076732576e9a81c7ac4b83214528f7db00f31bf6cafe794a9b3cd1c82089050847f225d394e42207599403efd0c2464a90d52652645882aac35b10e590e6e691e0883089150847f064760623c25c8cf753d238055b444532be13557451c087de09efd454b23fd5984089250847f10ba3a0e01df92e87f301c4b716d8a394d67f4bf42a75c10922910a78f6b5b8785089350848181808280098009099050620008c460005262003015565b847f0e070bf53f8451b24f9c6e96b0c2a801cb511bc0c242eb9d361b77693f21471c82089050847f1b94cd61b051b04dd39755ff93821a73ccd6cb11d2491d8aa7f921014de252fb83089150847f1d7cb39bafb8c744e148787a2e70230f9d4e917d5713bb050487b5aa7d74070b84089250847f2ec93189bd1ab4f69117d0fe980c80ff8785c2961829f701bb74ac1f303b17db850893508481818082800980090990506200097560005262003015565b847f2db366bfdd36d277a692bb825b86275beac404a19ae07a9082ea46bd8351792682089050847f062100eb485db06269655cf186a68532985275428450359adc99cec6960711b883089150847f0761d33c66614aaa570e7f1e8244ca1120243f92fa59e4f900c567bf41f5a59b84089250847f20fc411a114d13992c2705aa034e3f315d78608a0f7de4ccf7a72e494855ad0d8508935084818180828009800909905062000a2660005262003015565b847f25b5c004a4bdfcb5add9ec4e9ab219ba102c67e8b3effb5fc3a30f317250bc5a82089050847f23b1822d278ed632a494e58f6df6f5ed038b186d8474155ad87e7dff62b37f4b83089150847f22734b4c5c3f9493606c4ba9012499bf0f14d13bfcfcccaa16102a29cc2f69e084089250847f26c0c8fe09eb30b7e27a74dc33492347e5bdff409aa3610254413d3fad795ce58508935084818180828009800909905062000ad760005262003015565b847f070dd0ccb6bd7bbae88eac03fa1fbb26196be3083a809829bbd626df348ccad982089050847f12b6595bdb329b6fb043ba78bb28c3bec2c0a6de46d8c5ad6067c4ebfd4250da83089150847f248d97d7f76283d63bec30e7a5876c11c06fca9b275c671c5e33d95bb7e8d72984089250847f1a306d439d463b0816fc6fd64cc939318b45eb759ddde4aa106d15d9bd9baaaa8508935084818180828009800909905062000b8860005262003015565b847f28a8f8372e3c38daced7c00421cb4621f4f1b54ddc27821b0d62d3d6ec7c56cf82089050847f0094975717f9a8a8bb35152f24d43294071ce320c829f388bc852183e1e2ce7e83089150847f04d5ee4c3aa78f7d80fde60d716480d3593f74d4f653ae83f4103246db2e8d6584089250847f2a6cf5e9aa03d4336349ad6fb8ed2269c7bef54b8822cc76d08495c12efde1878508935084818180828009800909905062000c3960005262003015565b847f2304d31eaab960ba9274da43e19ddeb7f792180808fd6e43baae48d7efcba3f382089050847f03fd9ac865a4b2a6d5e7009785817249bff08a7e0726fcb4e1c11d39d199f0b083089150847f00b7258ded52bbda2248404d55ee5044798afc3a209193073f7954d4d63b0b6484089250847f159f81ada0771799ec38fca2d4bf65ebb13d3a74f3298db36272c5ca65e92d9a8508935084818180828009800909905062000cea60005262003015565b847f1ef90e67437fbc8550237a75bc28e3bb9000130ea25f0c5471e144cf4264431f82089050847f1e65f838515e5ff0196b49aa41a2d2568df739bc176b08ec95a79ed82932e30d83089150847f2b1b045def3a166cec6ce768d079ba74b18c844e570e1f826575c1068c94c33f84089250847f0832e5753ceb0ff6402543b1109229c165dc2d73bef715e3f1c6e07c168bb1738508935084818180828009800909905062000d9b60005262003015565b847f02f614e9cedfb3dc6b762ae0a37d41bab1b841c2e8b6451bc5a8e3c390b6ad1682089050847f0e2427d38bd46a60dd640b8e362cad967370ebb777bedff40f6a0be27e7ed70583089150847f0493630b7c670b6deb7c84d414e7ce79049f0ec098c3c7c50768bbe29214a53a84089250847f22ead100e8e482674decdab17066c5a26bb1515355d5461a3dc06cc85327cea98508935084818180828009800909905062000e4c60005262003015565b847f25b3e56e655b42cdaae2626ed2554d48583f1ae35626d04de5084e0b6d2a6f1682089050847f1e32752ada8836ef5837a6cde8ff13dbb599c336349e4c584b4fdc0a0cf6f9d083089150847f2fa2a871c15a387cc50f68f6f3c3455b23c00995f05078f672a9864074d412e584089250847f2f569b8a9a4424c9278e1db7311e889f54ccbf10661bab7fcd18e7c7a7d835058508935084818180828009800909905062000efd60005262003015565b847f044cb455110a8fdd531ade530234c518a7df93f7332ffd2144165374b246b43d82089050847f227808de93906d5d420246157f2e42b191fe8c90adfe118178ddc723a531902583089150847f02fcca2934e046bc623adead873579865d03781ae090ad4a8579d2e7a680035584089250847f0ef915f0ac120b876abccceb344a1d36bad3f3c5ab91a8ddcbec2e060d8befac8508935084818180828009800909905062000fae60005262003015565b847f1797130f4b7a3e1777eb757bc6f287f6ab0fb85f6be63b09f3b16ef2b1405d3882089050847f0a76225dc04170ae3306c85abab59e608c7f497c20156d4d36c668555decc6e583089150847f1fffb9ec1992d66ba1e77a7b93209af6f8fa76d48acb664796174b5326a31a5c84089250847f25721c4fc15a3f2853b57c338fa538d85f8fbba6c6b9c6090611889b797b9c5f850893508481818082800980090990506200105f60005262003015565b847f0c817fd42d5f7a41215e3d07ba197216adb4c3790705da95eb63b982bfcaf75a82089050847f13abe3f5239915d39f7e13c2c24970b6df8cf86ce00a22002bc15866e52b5a9683089150847f2106feea546224ea12ef7f39987a46c85c1bc3dc29bdbd7a92cd60acb4d391ce84089250847f21ca859468a746b6aaa79474a37dab49f1ca5a28c748bc7157e1b3345bb0f959850893508481818082800980090990506200111060005262003015565b847f05ccd6255c1e6f0c5cf1f0df934194c62911d14d0321662a8f1a48999e34185b82089050847f0f0e34a64b70a626e464d846674c4c8816c4fb267fe44fe6ea28678cb09490a483089150847f0558531a4e25470c6157794ca36d0e9647dbfcfe350d64838f5b1a8a2de0d4bf84089250847f09d3dca9173ed2faceea125157683d18924cadad3f655a60b72f5864961f145585089350848181808280098009099050620011c160005262003015565b847f0328cbd54e8c0913493f866ed03d218bf23f92d68aaec48617d4c722e5bd433582089050847f2bf07216e2aff0a223a487b1a7094e07e79e7bcc9798c648ee3347dd5329d34b83089150847f1daf345a58006b736499c583cb76c316d6f78ed6a6dffc82111e11a63fe412df84089250847f176563472456aaa746b694c60e1823611ef39039b2edc7ff391e6f2293d2c404850893508481818082800980090990506200127260005262003015565b847f2ef1e0fad9f08e87a3bb5e47d7e33538ca964d2b7d1083d4fb0225035bd3f8db82089050847f226c9b1af95babcf17b2b1f57c7310179c1803dec5ae8f0a1779ed36c817ae2a83089150847f14bce3549cc3db7428126b4c3a15ae0ff8148c89f13fb35d35734eb5d4ad0def84089250847f2debff156e276bb5742c3373f2635b48b8e923d301f372f8e550cfd4034212c7850893508481818082800980090990506200132360005262003015565b847f2d4083cf5a87f5b6fc2395b22e356b6441afe1b6b29c47add7d0432d1d4760c782089050847f0c225b7bcd04bf9c34b911262fdc9c1b91bf79a10c0184d89c317c53d7161c2983089150847f03152169d4f3d06ec33a79bfac91a02c99aa0200db66d5aa7b835265f9c9c8f384089250847f0b61811a9210be78b05974587486d58bddc8f51bfdfebbb87afe8b7aa7d3199c85089350848181808280098009099050620013d460005262003015565b847f203e000cad298daaf7eba6a5c5921878b8ae48acf7048f16046d637a533b6f7882089050847f1a44bf0937c722d1376672b69f6c9655ba7ee386fda1112c0757143d1bfa914683089150847f0376b4fae08cb03d3500afec1a1f56acb8e0fde75a2106d7002f59c5611d4daa84089250847f00780af2ca1cad6465a2171250fdfc32d6fc241d3214177f3d553ef363182185850893508481818082800980090990506200148560005262003015565b847f10774d9ab80c25bdeb808bedfd72a8d9b75dbe18d5221c87e9d857079bdc31d582089050847f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e883089150847f00544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac1684089250847f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428c850893508481818082800980090990506200153660005262003015565b847f2840d045e9bc22b259cfb8811b1e0f45b77f7bdb7f7e2b46151a1430f608e3c582089050847f062752f86eebe11a009c937e468c335b04554574c2990196508e01fa5860186b83089150847f06041bdac48205ac87adb87c20a478a71c9950c12a80bc0a55a8e83eaaf0474684089250847f04a533f236c422d1ff900a368949b0022c7a2ae092f308d82b1dcbbf51f5000d85089350848181808280098009099050620015e760005262003015565b847f13e31d7a67232fd811d6a955b3d4f25dfe066d1e7dc33df04bde50a2b2d05b2a82089050847f011c2683ae91eb4dfbc13d6357e8599a9279d1648ff2c95d2f79905bb13920f183089150847f0b0d219346b8574525b1a270e0b4cba5d56c928e3e2c2bd0a1ecaed015aaf6ae84089250847f14abdec8db9c6dc970291ee638690209b65080781ef9fd13d84c7a726b5f1364850893508481818082800980090990506200169860005262003015565b847f1a0b70b4b26fdc28fcd32aa3d266478801eb12202ef47ced988d0376610be10682089050847f278543721f96d1307b6943f9804e7fe56401deb2ef99c4d12704882e7278b60783089150847f16eb59494a9776cf57866214dbd1473f3f0738a325638d8ba36535e011d5825984089250847f2567a658a81ffb444f240088fa5524c69a9e53eeab6b7f8c41c3479dcf8c644a850893508481818082800980090990506200174960005262003015565b847f29aa1d7c151e9ad0a7ab39f1abd9cf77ab78e0215a5715a6b882ade840bb13d882089050847f15c091233e60efe0d4bbfce2b36415006a4f017f9a85388ce206b91f99f2c98483089150847f16bd7d22ff858e5e0882c2c999558d77e7673ad5f1915f9feb679a8115f014cf84089250847f02db50480a07be0eb2c2e13ed6ef4074c0182d9b668b8e08ffe676925004202585089350848181808280098009099050620017fa60005262003015565b847f05e4a220e6a3bc9f7b6806ec9d6cdba186330ef2bf7adb4c13ba866343b7311982089050847f1dda05ebc30170bc98cbf2a5ee3b50e8b5f70bc424d39fa4104d37f1cbcf7a4283089150847f0184bef721888187f645b6fee3667f3c91da214414d89ba5cd301f22b0de899084089250847f1498a307e68900065f5e8276f62aef1c37414b84494e1577ad1a6d64341b78ec85089350848181808280098009099050620018ab60005262003015565b847f25f40f82b31dacc4f4939800b9d2c3eacef737b8fab1f864fe33548ad46bd49d82089050847f09d317cc670251943f6f5862a30d2ea9e83056ce4907bfbbcb1ff31ce5bb965083089150847f2f77d77786d979b23ba4ce4a4c1b3bd0a41132cd467a86ab29b913b6cf3149d084089250847f0f53dafd535a9f4473dc266b6fccc6841bbd336963f254c152f89e785f729bbf850893508481818082800980090990506200195c60005262003015565b847f25c1fd72e223045265c3a099e17526fa0e6976e1c00baf16de96de85deef2fa282089050847f2a902c8980c17faae368d385d52d16be41af95c84eaea3cf893e65d6ce4a8f6283089150847f1ce1580a3452ecf302878c8976b82be96676dd114d1dc8d25527405762f8352984089250847f24a6073f91addc33a49a1fa306df008801c5ec569609034d2fc50f7f0f4d00568508935084818180828009800909905062001a0d60005262003015565b847f25e52dbd6124530d9fc27fe306d71d4583e07ca554b5d1577f256c68b0be2b7482089050847f23dffae3c423fa7a93468dbccfb029855974be4d0a7b29946796e5b6cd70f15d83089150847f06342da370cc0d8c49b77594f6b027c480615d50be36243a99591bc9924ed6f584089250847f2754114281286546b75f09f115fc751b4778303d0405c1b4cc7df0d8e9f639258508935084818180828009800909905062001abe60005262003015565b847f15c19e8534c5c1a8862c2bc1d119eddeabf214153833d7bdb59ee197f8187cf582089050847f265fe062766d08fab4c78d0d9ef3cabe366f3be0a821061679b4b3d2d77d5f3e83089150847f13ccf689d67a3ec9f22cb7cd0ac3a327d377ac5cd0146f048debfd098d3ec7be84089250847f17662f7456789739f81cd3974827a887d92a5e05bdf3fe6b9fbccca4524aaebd8508935084818180828009800909905062001b6f60005262003015565b847f21b29c76329b31c8ef18631e515f7f2f82ca6a5cca70cee4e809fd624be7ad5d82089050847f18137478382aadba441eb97fe27901989c06738165215319939eb17b01fa975c83089150847f2bc07ea2bfad68e8dc724f5fef2b37c2d34f761935ffd3b739ceec4668f37e8884089250847f2ddb2e376f54d64a563840480df993feb4173203c2bd94ad0e602077aef9a03e8508935084818180828009800909905062001c2060005262003015565b847f277eb50f2baa706106b41cb24c602609e8a20f8d72f613708adb25373596c3f782089050847f0d4de47e1aba34269d0c620904f01a56b33fc4b450c0db50bb7f87734c9a1fe583089150847f0b8442bfe9e4a1b4428673b6bd3eea6f9f445697058f134aae908d0279a29f0c84089250847f11fe5b18fbbea1a86e06930cb89f7d4a26e186a65945e96574247fddb720f8f58508935084818180828009800909905062001cd160005262003015565b847f224026f6dfaf71e24d25d8f6d9f90021df5b774dcad4d883170e4ad89c33a0d682089050847f0b2ca6a999fe6887e0704dad58d03465a96bc9e37d1091f61bc9f9c62bbeb82483089150847f221b63d66f0b45f9d40c54053a28a06b1d0a4ce41d364797a1a7e0c96529f42184089250847f30185c48b7b2f1d53d4120801b047d087493bce64d4d24aedce2f4836bb84ad48508935084818180828009800909905062001d8260005262003015565b847f23f5d372a3f0e3cba989e223056227d3533356f0faa48f27f8267318632a61f082089050847f2716683b32c755fd1bf8235ea162b1f388e1e0090d06162e8e6dfbe4328f3e3b83089150847f0977545836866fa204ca1d853ec0909e3d140770c80ac67dc930c69748d5d4bc84089250847f1444e8f592bdbfd8025d91ab4982dd425f51682d31472b05e81c43c0f9434b318508935084818180828009800909905062001e3360005262003015565b847f26e04b65e9ca8270beb74a1c5cb8fee8be3ffbfe583f7012a00f874e7718fbe382089050847f22a5c2fa860d11fe34ee47a5cd9f869800f48f4febe29ad6df69816fb1a914d283089150847f174b54d9907d8f5c6afd672a738f42737ec338f3a0964c629f7474dd44c5c8d784089250847f1db1db8aa45283f31168fa66694cf2808d2189b87c8c8143d56c871907b39b878508935084818180828009800909905062001ee460005262003015565b847f1530bf0f46527e889030b8c7b7dfde126f65faf8cce0ab66387341d813d1bfd182089050847f0b73f613993229f59f01c1cec8760e9936ead9edc8f2814889330a2f2bade45783089150847f29c25a22fe2164604552aaea377f448d587ab977fc8227787bd2dc0f36bcf41e84089250847f2b30d53ed1759bfb8503da66c92cf4077abe82795dc272b377df57d77c8755268508935084818180828009800909905062001f9560005262003015565b847f12f6d703b5702aab7b7b7e69359d53a2756c08c85ede7227cf5f0a2916787cd282089050847f2520e18300afda3f61a40a0b8837293a55ad01071028d4841ffa9ac70636411383089150847f1ec9daea860971ecdda8ed4f346fa967ac9bc59278277393c68f09fa03b8b95f84089250847f0a99b3e178db2e2e432f5cd5bef8fe4483bf5cbf70ed407c08aae24b830ad725850893508481818082800980090990506200204660005262003015565b847f07cda9e63db6e39f086b89b601c2bbe407ee0abac3c817a1317abad7c577849282089050847f08c9c65a4f955e8952d571b191bb0adb49bd8290963203b35d48aab38f8fc3a383089150847f2737f8ce1d5a67b349590ddbfbd709ed9af54a2a3f2719d33801c9c17bdd9c9e84089250847f1049a6c65ff019f0d28770072798e8b7909432bd0c129813a9f179ba627f7d6a85089350848181808280098009099050620020f760005262003015565b847f18b4fe968732c462c0ea5a9beb27cecbde8868944fdf64ee60a5122361daeddb82089050847f2ff2b6fd22df49d2440b2eaeeefa8c02a6f478cfcf11f1b2a4f7473483885d1983089150847f2ec5f2f1928fe932e56c789b8f6bbcb3e8be4057cbd8dbd18a1b352f5cef42ff84089250847f265a5eccd8b92975e33ad9f75bf3426d424a4c6a7794ee3f08c1d100378e545e85089350848181808280098009099050620021a860005262003015565b847f2405eaa4c0bde1129d6242bb5ada0e68778e656cfcb366bf20517da1dfd4279c82089050847f094c97d8c194c42e88018004cbbf2bc5fdb51955d8b2d66b76dd98a2dbf6041783089150847f2c30d5f33bb32c5c22b9979a605bf64d508b705221e6a686330c9625c2afe0b884089250847f01a75666f6241f6825d01cc6dcb1622d4886ea583e87299e6aa2fc716fdb6cf5850893508481818082800980090990506200225960005262003015565b847f0a3290e8398113ea4d12ac091e87be7c6d359ab9a66979fcf47bf2e87d382fcb82089050847f154ade9ca36e268dfeb38461425bb0d8c31219d8fa0dfc75ecd21bf69aa0cc7483089150847f27aa8d3e25380c0b1b172d79c6f22eee99231ef5dc69d8dc13a4b5095d02877284089250847f2cf4051e6cab48301a8b2e3bca6099d756bbdf485afa1f549d395bbcbd806461850893508481818082800980090990506200230a60005262003015565b847f301e70f729f3c94b1d3f517ddff9f2015131feab8afa5eebb0843d7f84b23e7182089050847f298beb64f812d25d8b4d9620347ab02332dc4cef113ae60d17a8d7a4c91f83bc83089150847f1b362e72a5f847f84d03fd291c3c471ed1c14a15b221680acf11a3f02e46aa9584089250847f0dc8a2146110c0b375432902999223d5aa1ef6e78e1e5ebcbc1d9ba41dc1c73785089350848181808280098009099050620023bb60005262003015565b847f0a48663b34ce5e1c05dc93092cb69778cb21729a72ddc03a08afa1eb922ff27982089050847f0a87391fb1cd8cdf6096b64a82f9e95f0fe46f143b702d74545bb314881098ee83089150847f1b5b2946f7c28975f0512ff8e6ca362f8826edd7ea9c29f382ba8a2a0892fd5d84089250847f01001cf512ac241d47ebe2239219bc6a173a8bbcb8a5b987b4eac1f533315b6b850893508481818082800980090990506200246c60005262003015565b847f2fd977c70f645db4f704fa7d7693da727ac093d3fb5f5febc72beb17d8358a3282089050847f23c0039a3fab4ad3c2d7cc688164f39e761d5355c05444d99be763a97793a9c483089150847f19d43ee0c6081c052c9c0df6161eaac1aec356cf435888e79f27f22ff03fa25d84089250847f2d9b10c2f2e7ac1afddccffd94a563028bf29b646d020830919f9d5ca1cefe59850893508481818082800980090990506200251d60005262003015565b847f2457ca6c2f2aa30ec47e4aff5a66f5ce2799283e166fc81cdae2f2b9f83e426782089050847f0abc392fe85eda855820592445094022811ee8676ed6f0c3044dfb54a7c10b3583089150847f19d2cc5ca549d1d40cebcd37f3ea54f31161ac3993acf3101d2c2bc30eac1eb084089250847f0f97ae3033ffa01608aafb26ae13cd393ee0e4ec041ba644a3d3ab546e98c9c885089350848181808280098009099050620025ce60005262003015565b847f16dbc78fd28b7fb8260e404cf1d427a7fa15537ea4e168e88a166496e88cfeca82089050847f240faf28f11499b916f085f73bc4f22eef8344e576f8ad3d1827820366d5e07b83089150847f0a1bb075aa37ff0cfe6c8531e55e1770eaba808c8fdb6dbf46f8cab58d9ef1af84089250847f2e47e15ea4a47ff1a6a853aaf3a644ca38d5b085ac1042fdc4a705a7ce089f4d850893508481818082800980090990506200267f60005262003015565b847f166e5bf073378348860ca4a9c09d39e1673ab059935f4df35fb14528375772b682089050847f18b42d7ffdd2ea4faf235902f057a2740cacccd027233001ed10f96538f0916f83089150847f089cb1b032238f5e4914788e3e3c7ead4fc368020b3ed38221deab1051c3770284089250847f242acd3eb3a2f72baf7c7076dd165adf89f9339c7b971921d9e70863451dd8d1850893508481818082800980090990506200273060005262003015565b847f174fbb104a4ee302bf47f2bd82fce896eac9a068283f326474af860457245c3b82089050847f17340e71d96f466d61f3058ce092c67d2891fb2bb318613f780c275fe1116c6b83089150847f1e8e40ac853b7d42f00f2e383982d024f098b9f8fd455953a2fd380c4df7f6b284089250847f0529898dc0649907e1d4d5e284b8d1075198c55cad66e8a9bf40f92938e2e96185089350848181808280098009099050620027e160005262003015565b847f2162754db0baa030bf7de5bb797364dce8c77aa017ee1d7bf65f21c4d4e5df8f82089050847f12c7553698c4bf6f3ceb250ae00c58c2a9f9291efbde4c8421bef44741752ec683089150847f292643e3ba2026affcb8c5279313bd51a733c93353e9d9c79cb723136526508e84089250847f00ccf13e0cb6f9d81d52951bea990bd5b6c07c5d98e66ff71db6e74d5b87d158850893508481818082800980090990506200289260005262003015565b847f185d1e20e23b0917dd654128cf2f3aaab6723873cb30fc22b0f86c15ab645b4b82089050847f14c61c836d55d3df742bdf11c60efa186778e3de0f024c0f13fe53f8d8764e1f83089150847f0f356841b3f556fce5dbe4680457691c2919e2af53008184d03ee1195d72449e84089250847f1b8fd9ff39714e075df124f887bf40b383143374fd2080ba0c0a6b6e8fa5b3e8850893508481818082800980090990506200294360005262003015565b847f0e86a8c2009c140ca3f873924e2aaa14fc3c8ae04e9df0b3e9103418796f602482089050847f2e6c5e898f5547770e5462ad932fcdd2373fc43820ca2b16b0861421e79155c883089150847f05d797f1ab3647237c14f9d1df032bc9ff9fe1a0ecd377972ce5fd5a0c01460484089250847f29a3110463a5aae76c3d152875981d0c1daf2dcd65519ef5ca8929851da8c00885089350848181808280098009099050620029f460005262003015565b847f2974da7bc074322273c3a4b91c05354cdc71640a8bbd1f864b732f816388331482089050847f1ed0fb06699ba249b2a30621c05eb12ca29cb91aa082c8bfcce9c522889b47dc83089150847f1c793ef0dcc51123654ff26d8d863feeae29e8c572eca912d80c8ae36e40fe9b84089250847f1e6aac1c6d3dd3157956257d3d234ef18c91e82589a78169fbb4a8770977dc2f8508935084818180828009800909905062002aa560005262003015565b847f1a20ada7576234eee6273dd6fa98b25ed037748080a47d948fcda33256fb6bf582089050847f191033d6d85ceaa6fc7a9a23a6fd9996642d772045ece51335d49306728af96c83089150847f006e5979da7e7ef53a825aa6fddc3abfc76f200b3740b8b232ef481f5d06297b84089250847f0b0d7e69c651910bbef3e68d417e9fa0fbd57f596c8f29831eff8c0174cdb06d8508935084818180828009800909905062002b5660005262003015565b847f25caf5b0c1b93bc516435ec084e2ecd44ac46dbbb033c5112c4b20a25c9cdf9d82089050847f12c1ea892cc31e0d9af8b796d9645872f7f77442d62fd4c8085b2f150f72472a83089150847f16af29695157aba9b8bbe3afeb245feee5a929d9f928b9b81de6dadc78c32aae84089250847f0136df457c80588dd687fb2f3be18691705b87ec5a4cfdc168d31084256b67dc8508935084818180828009800909905062002c0760005262003015565b847f1639a28c5b4c81166aea984fba6e71479e07b1efbc74434db95a285060e7b08982089050847f03d62fbf82fd1d4313f8e650f587ec06816c28b700bdc50f7e232bd9b5ca9b7683089150847f11aeeb527dc8ce44b4d14aaddca3cfe2f77a1e40fc6da97c249830de1edfde5484089250847f13f9b9a41274129479c5e6138c6c8ee36a670e6bc68c7a49642b645807bfc8248508935084818180828009800909905062002cb860005262003015565b847f0e4772fa3d75179dc8484cd26c7c1f635ddeeed7a939440c506cae8b7ebcd15b82089050847f1b39a00cbc81e427de4bdec58febe8d8b5971752067a612b39fc46a68c5d4db483089150847f2bedb66e1ad5a1d571e16e2953f48731f66463c2eb54a245444d1c0a3a25707e84089250847f2cf0a09a55ca93af8abd068f06a7287fb08b193b608582a27379ce35da915dec8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002d8d60005262003015565b847f2d1bd78fa90e77aa88830cabfef2f8d27d1a512050ba7db0753c8fb863efb38782089050847f065610c6f4f92491f423d3071eb83539f7c0d49c1387062e630d7fd283dc339483089150847f2d933ff19217a5545013b12873452bebcc5f9969033f15ec642fb464bd60736884089250847f1aa9d3fe4c644910f76b92b3e13b30d500dae5354e79508c3c49c8aa99e0258b8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002e6260005262003015565b847f027ef04869e482b1c748638c59111c6b27095fa773e1aca078cea1f1c8450bdd82089050847f2b7d524c5172cbbb15db4e00668a8c449f67a2605d9ec03802e3fa136ad0b8fb83089150847f0c7c382443c6aa787c8718d86747c7f74693ae25b1e55df13f7c3c1dd735db0f84089250847f00b4567186bc3f7c62a7b56acf4f76207a1f43c2d30d0fe4a627dcdd9bd790788508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002f3760005262003015565b847f1e41fc29b825454fe6d61737fe08b47fb07fe739e4c1e61d0337490883db4fd582089050847f12507cd556b7bbcc72ee6dafc616584421e1af872d8c0e89002ae8d3ba0653b683089150847f13d437083553006bcef312e5e6f52a5d97eb36617ef36fe4d77d3e97f71cb5db84089250847f163ec73251f85443687222487dda9a65467d90b22f0b38664686077c6a4486d5850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200300c60005262003015565b60005260206000f35b8460205182098560405184098691088560605185098691088560805186098691088560a05183098660c05185098791088660e05186098791088661010051870987910886610120518409876101405186098891088761016051870988910887610180518809889108876101a0518509886101c0518709899108886101e051880989910888610200518909899108965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/Poseidon6.json",
    "content": "{\n  \"address\": \"0x85541202D0692Cdf9f4ce9Aa66a1116D36c96Fe6\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[6]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[6]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xbd5f3a491736f4984af02bf629a8309369f2784eac5f98a29a3018110b7a18d6\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x85541202D0692Cdf9f4ce9Aa66a1116D36c96Fe6\",\n    \"transactionIndex\": 46,\n    \"gasUsed\": \"5162502\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x6a971dcd20a9ab5ebd64b85232d7a126c0c0f99d39243517f5284268ce51f45c\",\n    \"transactionHash\": \"0xbd5f3a491736f4984af02bf629a8309369f2784eac5f98a29a3018110b7a18d6\",\n    \"logs\": [],\n    \"blockNumber\": 10176692,\n    \"cumulativeGasUsed\": \"10041111\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c600039615c596000f37c0100000000000000000000000000000000000000000000000000000000600035048063f5b4a7881490636afa4b7a14176200003757fe5b7f2abd9e16b7b48289aa19cdfec726fa3fa15cc1625102ae511bca45f39d337e9d6020527f1b4bc5885d1cfc8eb691875300db5a0c7362ae381898acaf8b63cad04ecb36c66040527f08a72fbb55dde3e93c5818571a424a54953695029eedbcf91eaeb012751c7f836060527f0f95359a1f6845d4921892f83e500bbb1b3d3763d8fc762400af039b0abb83f56080527f16f01751ce985328afde34d81619defb43e6c7b5dadf52d0f82472fbce7770d960a0527f1c391626328457fcafa629f3e6d33e2555e8d885e3c07cecc8af1f4d5659641760c0527f00970f671b9ba35e3e3c642d1e0b8032023ed5bac91c2c1056f03965a42c529760e0527f1fe9feb5c7f7c7a426bff032cd6a3158278b6c6b2cc57a871213fcafd6427989610100527f0cc7eabb154aa7955eac47a19f6437a2b8dec0fe9e5686150ff6e88b1a7b4bc4610120527f0393efd96399aa0726ef9af79be8b6c715e429906ca0d15076b5a990fea75ace610140527f0871233835b752ea030cf8a4f43771296eeb33f697d1b0825db47d39ac9e5955610160527f1a02798f047a51baaea34fcfb26ca6afe96a5fad1d2db4270497b6e6504891cb610180527f055665d76df3cd0fcb713c234ea79d06a31d6e3e4c3bcc657dba4c664d5a0da06101a0527f26ee9691a638edc7c91887e302fc55e8e7758286a44845ad88fd7de3bb1052c16101c0527f00cdb2db9e4f9d732d217c5e3114821165d49e5a2d41556bcd53d0c4d433224c6101e0527f012f3bb29c972793182123f5c49306e16a3a787c4bcd9c798a131b70856d1cbe610200527f0bba9006404c5ede82b527677daf444ed43fd1e0dbdc5528dd2cd1f17ad73481610220527f17e4e73bf701f88d219acf1ca6390cc1e17c9f84b1713820837ca070be84a2dc610240527f234b8a077ef52b53a343b8da5b20cc358ad60760dd60276d485015f73d53d207610260527f2dc3fd77394b7b5ac1cbd1b46e6ded5b835d7217a4c50a487ae9a35a7fd45d9d610280527f1668477640fab14c72b1c16ff0192e48cf882f12276bd12f97f82c6ee2e61e486102a0527f09664216ca565c1a44fc2b98347ea8b36904b3877f2159dcc999895adeb4d70b6102c0527f111fd8dfce2bd3b7ba0cfa93e20fb685abf76d77305857b8df30914e4849ecef6102e0527f19f53c0a592b3ea93497a511e56f66753598265b1ab6774da48eec04e4d93426610300527f19b683c39d3b002fc3523b7bee5a60148b1dbdf18dd1c318e6a541e8cf66a174610320527f2547113a818779f13e3448719c7ef100b8036bb3e882dd5e6456c35311c1bd5b610340527f00cf148f8045cdbe7bb1013f72ebd4126a3e35cba9a970441ba8d5bc76943b0b610360527f3008421eed767a093322a09c3733973a038168cb28cd2e1f709076c00b869599610380527f1463f51d4a4cb1eba16dbc115566aa48fe77b43c244c9988a3c658d2f56493d66103a0527f16afd8f4c39038b8006a59d292aea84731c0f83832a61b82250ed90118e8fec26103c0527f2296361f3bf154efbab996921936e9b1dff8352711f958638172055333e075796103e0527f1c3160ebaeb10f809f69843cf8d5bbaca198d1f8e3439be29beb92d909ec891c610400527f094c66bdcff54382cd9213abe43312edb5b4d414c6e09acca24912a7635404c6610420527f2e883bd408c4c826d004ff777d7c0938434ab5bb84f3420e5d94b853b1746f89610440527f228af6d425e91a783dd18fd89a6b38bda053f2f23c094b875f27cb3abba2030b610460527f214e41788bd2b990347c7f2a8f47612d4dfceb1a1e6da38165873df66ce51f59610480527f03fba82d3f783620873da94e9f4e84c8b529d76f54e4b5d7d4805272af9b97756104a0527f066782fe3e869de2cebd7ebbf60fb435785329dfb12ad9bd1b4e46ed362895116104c0527f1c5cd6b23ef336be01efa37a27e6b7aae5d1643fceeb212cdff51588835fb5376104e0527f2f3b4bf0f105f88e27248af094e29feed9ff3fad9a794e15830bd2b311539453610500527f2f4085eaa9f80a69b739fc23f2fe4057f64729b311783fcfab3a0a36fc1ff432610520527f2363603349e94f520fa1f98fe2507f6aae361934078aa59a16214c088185638b610540527f0548541724f64e20128260899abe8fbcdff184a1957a9385fb715923bf0fc79d610560527f21c5e25a6991364e59a205e5b01c811deeb095680a72928369cfd2de71b14f98610580527f11c5cc53f6338c825817aff7792a2efbce8fff171300d41455a2edac37663d026105a0527f27a0949fdc9f10495c4ee7214aa0edd2ad8eef68f577da8b96f9d87a39504bf96105c0527f1c7fc68f3fbde4a23c455ef0d0dbce0ce556a0194e6d552c0455cbb5b0c230e26105e0527f11d0f56fc00e7d85b3a2939fd33991dc8abc1ced0c3f3c530cbfb4500d63de9c610600527f01b2e9d20d9b55deb048cabe1636f0e96363bec886679cbd91f332fb2bade44f610620527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a4356084356064356044356024356004356000877f2197703fceb4cbf07c6dbf46c4ad93e7d14e554db66d09102ff84824743fe4e782089050877f1322f0fffc7e4854bd8b5fc23e7106b51f59bd5061d8b565aca2fd3efe512f7983089150877f19e414f80380aa2d222133118c337d82a8c5894c2f88861ee46f448fa9d6135984089250877f22241199a4df9cb7d65249d9562cad6c65f16460e79a7939cbfdd6d7b9209d9a85089350877f0301061735384dfcecf9a311c22ade327b51c78b211615f41c77f6d85e8a41b686089450877f229e1d86c1f2810f4a2633b7b4b5bb61b7dc5d19ac95fd8d379548ff2b6850ee87089550877f0e31dcf9c53209a817eeb292e989727c3f56bff65883afe5fdc28ac3dfbea67588089650878181808280098009099050878281808280098009099150878381808280098009099250878481808280098009099350878581808280098009099450878681808280098009099550878781808280098009099650620008e560005262005a78565b877f222c7318ebe96306c9d79ac11237263c6b8eb25272eb88407e8c29a358b40f2a82089050877f0cb416b42c53a829cf4fc823be8f4fedd12593394cd529053ff4e3604974a2c683089150877f0892729d09594a8d8b1adfbf2e2ed75399dee612842b6db3d2d2c2aaddb6c0aa84089250877f18e39e9ae45f14ba97a15bd672711ae124375d9f482a4487a0e334dee2d27c7185089350877f2560c9ff672e6ea69dbb33844d0d22870461d18eaf0f8992d4d7ac649edd661086089450877f21bee2b8ed54b726ef17f77366b1dcfbda7ccf1e487f9916e5f963e814c5731287089550877f300e1b28dabebdc0d4bdbc19be29a3dee4eda8425dd0c7c6e82fec147cb070ba8808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000a5060005262005a78565b877f2c44a5ff45deea69dd2961d67011af4982b9405f9fe38de4a732d2aeae88cc2382089050877f0c8d59fe1b7f55095e6aaad9e3b4e7b1c93d876ba3234dd1ac5ec64108291bfd83089150877f06cf82bc5fd115d348a30b0c45378d90cca1660446ba049759fa53103fcd78b584089250877f2f80ed01a2118d02e2145111c3fe6ca70efdf95d8abeaee8829293347dc9061c85089350877f0bdfe7f6803e4dee7b026e079075908cb8414e3d651dd12fda67df08dded9e4286089450877f06cc48ed882405595b34d39138f50bb5b31a963a0dba66aef17c19ad622e29b187089550877f2a67f3ba6d15949932ac5622cf9e2b493801bf16a50336a4518258bcc6867c958808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000bbb60005262005a78565b877f2572725a67c60718df656934aa78fbeb80c8f395aeb6a20cd833c4b14fef412a82089050877f03bb7f6ca43545b11f19721265b416166579cb753330b1879b79685d1df0bfa783089150877f2412815e863f8f3bc28bfcbb957faa5f393300b25133e9221b8eb3156ed5c12b84089250877f0dbf64d58df212e4307871966de097a5db09a93e5bc305cebdcd0630f433af4585089350877f274c06c01158e047ff4a791e25b7bb3db190529df8f50b6386273f810f15c6ab86089450877f23cf40693f52abf0ed3d842f7bc85d1a2111d0abecfc18acd0fe3991ee5fd33d87089550877f1daaa926528f3368f4e4cf924166b8bd3ff8daefbcf900e6dcc4ee63c40996988808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000d2660005262005a78565b877f10103789dc9471ad718657bebb6781e39bd92fd20ee1a32d0de3ea2817a0155582089050877f0009bc25065080e6c6e9932e34bfde78d1085f19e9ffc8965a4660a4d9b6d60783089150877f1312c727cb5489bb174e1dcb82588edfab31a2999b377dabece466e9dcd6afee84089250877f20294a462c7d0c25aeb5374618e5e77316682ae3d726824f15f00f7cb9a7009f85089350877f25e0c6be89bbb04bd8391c90cf35588f0e9d73fdb06259f47a05513ad7a23e9186089450877f0084a0b87e0b336c9a911069f89d875a38be313efc420d28b9ec287f28810fd387089550877f28a03ee29f612aab268f76241d54d477a1d97f5807ba2e1812f4d350d7c6f7da8808965087818180828009800909905062000e4960005262005a78565b877f0b6794182b723a12e0b35f76bd55a7d106ee6a4035527c4d329a6f33068d7eda82089050877f015b9a698465428fc686b79db4959c8495b92b85122f6a6932940836facea86d83089150877f1bfe52289f811f5c3619f14866138ae9a1279bb76e8cec9a8936fdc36f59df7b84089250877f1cd574fe8d5e4c428b92b23a9717342176e1d309a7e259052c31bdc9af091fa385089350877f212d1bbdfaaf0200735bc5851a156adcbfa4f607f5da122e1f63afaecd38cab786089450877f0b0479e28820e883d903a951f95b13093788e9e1ca64ddf2abb94b13fee9edbc87089550877f0110f5257c21c9379d73b76e9ca95c513c77a15cc8ee0ef726d8460d4fbbdaaa8808965087818180828009800909905062000f6c60005262005a78565b877f08c52e9401a9764f0c2487dfed34e215c186b6c2838e38eb5a50cca4f0bc699482089050877f2e422b4323cb4c0af46f4b0e5052f75744c538abccc7643f339440dc3aaeeca383089150877f2e12482ba160472d45549ff79cd04aebc4a327c4bb9d78c2573b835b05c55fe684089250877f124fa5f9c5a96d6cce92cfc73ea2446202f09100eed203ae4267aa637a032d3685089350877f0bf651f82f83ca1fa037a941d4e2a4b3e08f5e1603f933a1723adf4135796de786089450877f21c674ea7b834741cbad39b21b242ab9a5554c6c9f92e801cb1fe4382b61946387089550877f214f91d6c4aef57e83186b57fd9fa48a193e1caf16d7f6dc1559d144a271b341880896508781818082800980090990506200108f60005262005a78565b877f203e2218389729c26c6f66213f2269c262785ec68c759599c2d8e3f68035055b82089050877f1aa934198713ce17658f51293fad44b1c22fc80391405ce76c92b2349b7eb3a283089150877f1014d4e5ddd9c17b3c2b29684476afdbaf7fc56e8b799616a67bbc6678e4535184089250877f033c13ed45b4762a47e1d2d45d7fc8fbf9d4e24546e20dc596911fb99171035885089350877f09bc1c3274c569e7e5c5d77c51fe69b23b7e435138f4f3217016a2d70ce71d5e86089450877f1803171c9dbc0610e38d8308db101d6a99ca90137f6ab8cdab2a91b36b63322a87089550877f0ba6071aa98afec3fbdeb46a88e4a5d17bd4454c0e7da8c74b15b084488cfdcf88089650878181808280098009099050620011b260005262005a78565b877f179e90ab4b08a4ead281a8709057487e077b710879911f215fbd6e8ebf838e9782089050877f1cbca88b8ab3f0588ff87deea978d00008adbad808e6510897238ea007f491a483089150877f2f50b20b33692bb0f62777de5e3198377d7923ef2fa8ede08831e10f7e9b9f5a84089250877f15ba030e8f1ef6f260566fd6fcfffcd21a1cfc1232f7ec7148ff076d1ba6870785089350877f0dbe053da01aa4b7c0fad83a3cc966f0b8281bb4940f97a5516cfb9dcd543a6f86089450877f222eca5d754afeca8997f31d6fcb94a5d799afb795e68d4d8b0ce6d839f6dd7e87089550877f2abffa43d756ef242db7f584bd62405991112618362f1b29a33ee2131b46a44688089650878181808280098009099050620012d560005262005a78565b877f03c92524ebe67300d0dd0aac464f0e6ecf962d6ad41bf2685f077bfd788eb3fd82089050877f282241758ade4ef8ff3858305288d3b4a52209295d1a4bc89d885b2f5dc3341a83089150877f02635cb973d71bb3d2137bd81680dd3bc607fc5487e898c4c2d83c1dc281768784089250877f13c866aa66e8d506079dc24c2df7b1e691994887d35622f4cfcf014bbea223e985089350877f151f0007ccf42a7ef969f1b6f6315992e6594bb5344d2839fee6620b60e2c02386089450877f1c1c6a5ebccee8caa4dc7ef18e194274f6e198d2b140ddcc97cb15c92ba1409c87089550877f18330c9e67d62f7861a996d7ed69bba904b0dd459f2b254fc7cc53dd28e45a6588089650878181808280098009099050620013f860005262005a78565b877f26b747740c95bf139cb11bdf02fa63a4bdb29a90f158933a1822cdde5387290d82089050877f1475676fb205084246ef9bc7234f312c214f426852dcb2ec7dc3772f579af8b183089150877f1b03ad9080d29b70aaf30bbc3200efffe73ee269dc032d2e32bd190767bc380d84089250877f21c175f937c2f82e99735bc7c201284f89577b27a1f84fa24642eceb552f445585089350877f1192e0269a6b66a8c5887527aa4474c2de91cf8c71ebda835df2cdccdd4a4e4b86089450877f0f3a12c0ee52f0d34f2b4a0dcd13541b48aeb3d5121d311113bba9792a45a58d87089550877f07fb521883bdf78b33689205b45e52269458a061bcb87eeb3b1e183c6d7eb5b7880896508781818082800980090990506200151b60005262005a78565b877f248d0e8051c1a965640c96c6f010c4931fe648b96f95ef6f5b8e474f64cf316982089050877f2ab553db9ead2c82ce91febe180529eff3521875f7e90a9b8b7a3c4de4877cd683089150877f211ee3bda3c95f1954eef22a0a82c2ede8444e42a72a8200bab6a133846d5b5c84089250877f111db3b5184ff7412f79c129904a9cac4ee65a51c2062d66732f54bcdf767be485089350877f1a73843264cf9a3a1bb6fb68ef76037c4fa98337e5c10096c630b449ec4a5f6786089450877f1c2e5a2d9332f65128c85358662d6a7c44353add09c27cd07da02f9144da855e87089550877f0e2b35fe1021b879de5b67a7458fa6188bbdea39e2bf468a1a24e3625cafff98880896508781818082800980090990506200163e60005262005a78565b877f2e568594e5dfbfadf272b8d6e8c99bd785c4fa94ce9e87fa8a9a37e32c7a28de82089050877f07043c7571cb7dc5205bfda42d693527a4bcb58238ed6a6a248e7917ddaf0c3a83089150877f239e18a0c85b845ffd6b85e96343f1a8378f3c691dadfb228da6ff7aa79efe1f84089250877f25e247af250c564c00f5ff1cf1f2bc8606600f173cb65ef0780af9f5a1b676c885089350877f031ba3385664544e3e0801f1698b15033a6049b2504e9cdc2c6e3eb2fd12100d86089450877f2a33777739e2ab0adfb1ca5687db1e059b20370cbeeccad32da5c3609431ff6587089550877f2bfd6f0e9e996ba13749327b9c5cec69903d413b2df29b777d05384b3e7af952880896508781818082800980090990506200176160005262005a78565b877f2d453d93fb36fbf8e36747ee92d90cad9e02e692d0748c07fd43eafc2cc5e82382089050877f187bd8043f8642cda2b6bad82958d115818880eb80f6b730381d974ac5d5037e83089150877f21aca605f92a48ac35708fe5140729fb35c3e48ccec441217713b0864944393084089250877f173fd164f5224ac06c2e99f3e2eaa6379df113de30aa485e8bbcc7f0fd2d1e0385089350877f071c66a6463c3fd4292bf1e5acb6de611142d73cd1db590e89b61b57d44d69bd86089450877f044a40e396855be550d8ccce7b82ee2caaef6675bebe92266c666982ff72bbf887089550877f1176d9f52e12df67f087110a15aaf98d1ded293ffdf99599fedef2e51569e4f6880896508781818082800980090990506200188460005262005a78565b877f06e8eb7dd026d257b15c6624bee2f37d5b67b4a671cfcdfee5797e8457b6391682089050877f0696aa48c1d5fe84ca5cf59009ab0baaefbb612e32c91d5ef306def38dc5673a83089150877f0853c33a9c7a7c3b355c92c75de444365db82d241eef9f3fac417004a3a1accc84089250877f3016c0ba34678e0a67f59cf96ce16e908154f5f9802591717e66e95ba25ab77f85089350877f0af008601dc9552517f303ff9e22c793a682caa93256f2f09a4f746542603b0e86089450877f04cb6d76b5a27a5aae387cb647790318c25fc16f8d7d1855a38765f847f731b087089550877f2ecf70c372d8e5edcad49e58d47875f26933d62614f266e6b4f586177148565f88089650878181808280098009099050620019a760005262005a78565b877f01f393a6ee74dd6c4d52b0e7820a7132f8c4889742313c06caa6ecc55f3dd41382089050877f2e4d4ce3f97bf96ff86b88e969d13e415e14721282769f7cf8c3a73723f094db83089150877f306000ef24a7f5a9c652e3a9367578554ea59bf8efa0bd8bc5776460c18c1add84089250877f26e58d6287678f3db9c225c1d3b93ae7c43a69024ebf249c8bde40617c2b3d4985089350877f09eee09f873d1bf683971df4d7ce56c8f0b8b98ddc05b9612c0a0d317310655a86089450877f0f08879dfd4fa0dc11ded556ef01c6f94cc6f4d18553b08bcb1dd604392ec00c87089550877f11459f7e9f0e3c727777e34d6d93ec28a25bd867171523bad5be0d5a20029eb78808965087818180828009800909905062001aca60005262005a78565b877f04e9cbb6f6e8e805a20fbd801a53b723f78c1f5acd227880f7f37f4e5b0528ad82089050877f2d2ff32eb7a0c0266dd46bd5939c9a9aae88b3e9af5dad01a7304f9868f7c7c683089150877f23b77eb0f27e950200a590447d645a723d9b405fa2538a5cb76fc5fdae16d83984089250877f2cd6d2c5658ec0792daee2067e2f958d6849886318a6c1c27233a469e9998c2f85089350877f0ae1daa420bac90780d0c83026bfcc84af83953e26eca839da76861e739855e786089450877f2b495b854553d02a75b68763bda6dd8ef0e81fe32b5cb072d3f580a914967bf087089550877f056fa5d7ce2c32bc5735351d2d48af5d6c9256a4b72e12a35640b53ea959e2968808965087818180828009800909905062001bed60005262005a78565b877f2ecbe1a06b28ec78ea7d22df11cd224a0e1a0ac7a3476c5cc3c4e50da961a87b82089050877f143053c1c387f9353bd677e5db6e9975792bffeecf02d6aa0fe8f627579fe6cf83089150877f04064b25584499a011ea74ac047a8b37494189bc63342bb1182e234212d42bdb84089250877f100f61f6b81542156760a6d29af5dd8644c82deab5b90e6ac66de8b4a069564a85089350877f18d331b2e8180b7aa7055c029fa77aff4f02b0e2a2078bff67688ed65b51d6dd86089450877f0fcf9b89e19b1a55f9b03255cf80ccb9fb6aafde2b46207d873fac80ccef085c87089550877f254f801f3c89c62436ef63df67d912c1f231bb1f76c6c7b497f7708dbcfdc17b8808965087818180828009800909905062001d1060005262005a78565b877f16d8e85e57819a10a61461bcd8d3d3c963c4f95afba3e4d8fd0d6ec882b9d16182089050877f29c9565aa702088bd443e4620d84bb2bfb93253a8f0f04e5cf408c92820ada8483089150877f294fb68064643d8beb237bd705a557871b5f1408624eda46d47b583a60d29cf984089250877f2c26f3083140c104baf24c3df922317584aa11770451e6a846de7dc79519731385089350877f231811279854707dbaa537cb27241e7021a949a1d9671380a7d6944c838904cb86089450877f1419365adbb91f1f7d1bb0aa8a4b5d11c7ad0570cc6cf3638be9c5a2a275b49587089550877f1674425f2e9fcaa66eb001feca48ddd4b2a29e86d451f00d176ea35b4e02fb848808965087818180828009800909905062001e3360005262005a78565b877f291f956def59b878028000cef03d7b54dcc2fe1dd5a75dc180d6d5bed898cd3082089050877f2f1302894fe6a26b5bc03fbaa69c4d95012394d78de494549c7057b7ef965bcc83089150877f0627d6d6d94d0a19a17db45c0796f7db8de13d278a2b24c99ac5d92d0a1a1ce284089250877f2ee297662bafebcb01df8e62bd5f50f03025515b10465d59f3a294f0bfbb2fc585089350877f118029945df773f52fef5429da766b902eeae7d967062fdd879c60a1bfaba75b86089450877f306042d262f6268ba789eb4323c2169279752ffec6b8536cc68b53bd4df0e85887089550877f0472a13ac7da9ebe1132e05f9ef609135c82a0ebd9278def2b34f8ce709aee4a8808965087818180828009800909905062001f5660005262005a78565b877f2e8f76b27b474180f00c5a6c2d65850bbf96019bf0d76dbb4743a970f42a130f82089050877f1e33984165f47c204a33fee31f613544b7d846a7d5ea45280ede4b362c32aaa483089150877f17f22e27252bdcf91a72b59eb276a666ce4fea7adfbacb2ea9fdf28524b7b43d84089250877f00547e7c70ee4e3fb4a4d386c8baa55d823a0f02bc963b43039b8847cff6e6c985089350877f08ea4ccbf815be325ccd15494f38f3f97153ab09c54a87a852b2a99480724e2586089450877f277cb45f3e632718673ba05d48c712fe7404df9eff5401cebe45d194c67fa8db87089550877f0159ec7ea49aadb3a8b0a23c1dba0023807b0d099d3c40b69df866a92dc87b37880896508781818082800980090990506200207960005262005a78565b877f0c33489297e244956de579c5c112ab40c7fb2d89866a28418f660a86ee18524e82089050877f01bb4fcbae28a2f3399568c6b3849da27d6ddf4fe6adabb591151679ed37d21f83089150877f2a23343d24a9cfa3b8f413f52ee1b233ce4c1d5b9bf34b03dbc6d733d52305c984089250877f0707a6d515b3bad03a9b06d6be048defa850134aacd120f38fa93264016b778685089350877f1837db5401dd6ec30ba6b866184da56e8db439ffd04154ec469b62120ce35cb486089450877f244872a0d2766b8547e6b6a5afeabf198e1409a0f0026de36c101793952f6cfb87089550877f204fb17927ce873c761196395f7da46f679ca331832a59fddd2ae31e84eba1f5880896508781818082800980090990506200219c60005262005a78565b877f056f53037d5d8efc7cf6a6feba18d102bf818bbba70b86dd9b763a12072f4c2e82089050877f1df4bc5d73239f5ec3b89efad53df9cd8ad8fca543be01f5f40fea2952071bd683089150877f1ffb6ccbba001155d46e167d1fad1c13bf2892ac87cd9c347c734ab5ef65836784089250877f08ee36e881496539b0abd647d353e51b63fef91fc944880006f2c26c2ecf2a2485089350877f1c3080c254443332a3e6283d5bab6f7fce8aaa68487b9ee4e372cbc6cc17266586089450877f2dc6040500e7329f75a3cefa4db49f9b47085b1660f8873b3e81b7b1af82af5387089550877f2c8bca9dd293bb67db1f66ff2e82047ae9385ce67d7f33568cd4c216a89994b788089650878181808280098009099050620022bf60005262005a78565b877f2a157b9786f9224cf63648aaec1b9f61c7a7087ed6eb8ab20c6c5469d401b7df82089050877f1e0fb0cdd8a54591c42e7c26b9027b77417e4e6522b472bfe61ff89c39bc40e983089150877f250144d1cea033fd78bd73ee4ea4cfdcd6a42f7c00e2d7ee6794d464207d2b3d84089250877f0b6b3fe9a7a525ca60443c4b78a8e830957aae0403116d22983a2e680eedff6585089350877f2fdf613e67d176569f4743b4963f8c53e52482fa32e705247eb650bc7bd616e986089450877f048f64b14275fb86fc55b3c0469cd89306752827c3c04463be5bea66fbd7b38c87089550877f0f2027b781c2c52490e11ed4b7b494d66cdc16e690b6a4b3c924dc9d6e85483288089650878181808280098009099050620023e260005262005a78565b877f29652785160b261c1c20c741524a26147cc3191f33b74ebf17d44ce2f88b0f9182089050877f1176909e02a5b37bfd47810fcbe73af87fea130470aa44bdf6b058c4d359e17983089150877f180f26c6ce2a3a477baf0da58d069769c2bf0156d636f2255e1bc35c01e9899384089250877f2afeedcc2cec57285ad22e734fb7fe3dd65f62601c1ca4884a86c7a6a05f083d85089350877f0dd21a87ee22626998dbcd73dd751affb49d47a02e995a41bca26399103087d286089450877f1d21baa09d7f50f0159fa8a0b6e0d61446d1c7db5d1566469da6a85aa722496287089550877f2dc59c4c9e275cd8c2506282cc5bb842c014bea4236b1bc27a856351b48af802880896508781818082800980090990506200250560005262005a78565b877f2cf62d08541dff0919ba68a697f44f4791c42d1447a41513ab9d5f755eb1f38a82089050877f2f5b8853e2cd2e47a9fedeea4047e46083c97acd4b687aebd2264e7a0eb354b183089150877f05865328a9b2fd469170c391c5ba8db5c66eef9938e4da5bae33f2703c47073084089250877f29761c9fc3d2c4cc1b126be1dc0470a97b8f2725d327c6d1ca923c2aa8092b1e85089350877f1d3fb1f8dc3c77cb515c37bc810d3a5e3b96552d4bbb57fdb01c2aeeb1d9a04886089450877f05f2fbeb7cae0a35ee2f3a4d2964d241a0ceeb47b3f7c4c87bb3b052c8705d9087089550877f1f445014a0f266082a50257152609cc219062154f4d7c13288746954b97998f8880896508781818082800980090990506200262860005262005a78565b877f2d35917cb1d0ca611ee37cfd9078c924fc84bd1a4bfd7db3ce39e05b38f698b182089050877f05a89a4eb40387b8512f2f398b6526efe76716951c500fc8dabc835775335ced83089150877f04e26aa3f02601174f46ced15594329e4f4e5bd5d7d53d5df6c8633a94dd01de84089250877f204d587d61526c1e047e1dc6b6d403b9eb8730f2e2dfb7bc7350d939bac5b90f85089350877f21c8ca213d2f44446ae90a6bdae5843b7c2cb53ed699f36675ea8280a2a420e586089450877f1303bd921f32fa4c4e73af21457c46b6d69e2e6a2c396716217787b46e822ebf87089550877f0613823c5b6abeef14387465317e713b45ace79c0e4433d7c4d352097e5c8399880896508781818082800980090990506200274b60005262005a78565b877f0f27c5305ee978f4f775e213e3ba12a901f51144ce1ea89bb5046930f5ec55d182089050877f2cad11c693c6a627531950a307e07b30ea8a495115f5a5388827792120c7bdb083089150877f16bb256883c44cf37366618e46c6db4e3da97a9d4ae7d5c585959de3272f82b184089250877f29afe50bd78f72cc763695976410324bfd67157a5ccdb7ae45b00032e1d57a5185089350877f09329902e59e5243a726ae5ca35408a207148609ab3698139725aefe29aeb16786089450877f04b1800e600c90ec4776bc6af1764ccbdc10bf55c3314f42acd0531ad53420fd87089550877f298d0110bb90e4c35e293c7a7dacedef7ee9342a591b4330e27276aa13b67ad1880896508781818082800980090990506200286e60005262005a78565b877f024ea6e68cb1aa6b407e022649aa32d1b7ea4a350e510c07eee43929395e4f8282089050877f22ae3a1a81c4550f5fa0116e135d2df2bd9f6835a0f0d03f4dd934e1320a3d8d83089150877f1f0f5eee9e9abb2a2f4ae04d6fe09311fe0115c1e199c28e22705e681442ed3784089250877f023c86606616f317af022464f350b4bee80c2fca32064bcbf83e8cd35dac06c785089350877f2a89c4e5b074fbe67d04cb03efe18c4bf904bec4759b33dad6b2c86ebfd2b9d586089450877f04b0f48c4f2e05bda4b9cf806075f9c275df2cf60b5fd11470eaa7394a82727e87089550877f0edde5a2c01327ad042a686f443417bd8f107c99eb7c02900c931a7bd8cb349e880896508781818082800980090990506200299160005262005a78565b877f2cacacc9c9d8b0004d8932080f9378b60675a8bd853aad1dc50672f137212cc182089050877f0816f33508621f2d56371156b0a3f7731030e4b218e44c90a88cecaf07170dec83089150877f2ef8e0a455d472b49bffda935c8d3bee1ae9248608e2a52d53f4b76313c9792084089250877f17184a8af9199aba605dd1f2dd18ebc02e3055ce408068eccaaf3ea7c0a334af85089350877f16395e153937a83660db6f78446cb995836436602777d81f0607130b4488144886089450877f0e174088223c38e9440fc77307d6720ac32784c9d2f591e2437eaea9b8f5e2bb87089550877f19e70fa937788f7a2127573d56c8197bd0dd096140f39064865c65c31b47d4028808965087818180828009800909905062002ab460005262005a78565b877f0e434c329d5242adbdab24780495ff97230beb344b918f6f8d6bd7d21b03692e82089050877f2c88a82eb87c81ba42a211bf2ef3c15875ac157c7f3868fff35af9f55a8c22bc83089150877f111dc223e3c9fc7452a9c2de469383915f33adf4cf5b49fd2e01c51d09ccf43684089250877f10647353de3197b9cb48f4539b507e45393b000842e8baa1218af097f871baea85089350877f0e53d64121c0a851c1b3f07423582034abce698525d0a47724354c07152f703b86089450877f2891938acb83ee193754969f4aa5a62a531081dbca4dec226258ea92984b434887089550877f04106f95e4ba3fb74dbe4bc53abc170262ba00c7c63ed8c457c3227532c12ce38808965087818180828009800909905062002bd760005262005a78565b877f2a73e61b8f1babfbb38b186f401eed0d92c5613ba25dd2ff4d099f7dd3c19fe582089050877f18e16b24642f19193b798b923b8dd25f6e4856d6b21b729aed2281ab154f7c5f83089150877f0d5f849b166ab9f6fc1a64467c5557029f359a2d0f194030c4dd875e12ae348584089250877f0e25250c57365a29c63a4f1531b8b0ef523eaa93c1d70acd0aa7cd7844dd044285089350877f0f813d14af0c85bcedfbf480b3d80b9f335853c60188526d80761274074a599a86089450877f0d2356a92dbaae8c24a8cebed6428083ef2f469460f166a6e774377e7805543587089550877f1fb6dceb495bf90fff56c8aad70b40bf773ea1003cdd092fd77a43961e9d7dc78808965087818180828009800909905062002cfa60005262005a78565b877f2c0a70ced79951a75e23c5a323fd706c2ab87c381cfc3c269081627741c2bbe882089050877f13dc6b3bdb05167dceb4b11037064ac5fd22db5e229e4c6ba55e8382321dc5ee83089150877f210fa8b777907ec30bb88dbd7c0e6ca9004eb3425d498025da6c90a47c35025c84089250877f0c5cfa957139b45a72fbbf80a410aab5454a982668baf24b0dd3c04e4d599cd985089350877f1f1f3bc4c21d633400fcf8bdb7be59b7f65cedc06bb2fc93a873b6ef12e0f52b86089450877f188f0ee95a9dfb03cd5e3fb30827057e933711644ee7bd57490374c0d67532e187089550877f0823877ebf8a842b77e8e0f3b44873e9409727101b186cae2b80d0cfa726ec8c8808965087818180828009800909905062002e1d60005262005a78565b877f0fe81603de39ccf148ca6390d6f8bdc9395ca2f3f50878283d98f1f0e61b1aff82089050877f2ef61fe192f52a9d7cebf41c134098f2ccae35cabcaa12963566768ff1b8370683089150877f0db6d076b2dd1b9f4d56d2f66fab4d7bfc6a38fef7f9ae1d4c2f8c44b1510f5184089250877f2a194a4ae8583f28189f9c011d107b82f279e6a0f8ca8bc9cb0aa581831c7d0685089350877f0ae539fa9ca67d4af48fb292f9188c9e72f2eeaae2e500b7e7201718c8da8de986089450877f23f66a894b1df4d26a8baa6d05b1ace511faffd4605b36cfd12bb4c6dc2bb4d787089550877f137cef522af2942aee9a4fb8017bf330e64601f466b56d32245669d9fe5ba7078808965087818180828009800909905062002f4060005262005a78565b877f187aafcb87841b2df9d64c1767789a6b221767e4634f0d550063a0bf92788c3282089050877f23212e75f4b89992a3647036ee36d74938bb9a9851e13d7b6e52daf66c4cbd2583089150877f0f54cbe967770dfa9d068b2fc53abc96489bb7d266212654d326de6b9af16d6384089250877f23d83a60b9887ab4359b8569ff3a219bb81367955fde72a62002d3cd51101fcc85089350877f2ea676fe7f21fc583ab0b0e189020d42cb22f044607ee15bfac7dd66da5ebe7686089450877f16f37f357a0c584821a356ab56a16d41f045029cb515f58ede001f05a807890b87089550877f139093b78fc9603a4288ae5811ed1311be916e4c97d35a5cf18e4b7e47d13b03880896508781818082800980090990506200306360005262005a78565b877f0aaba5fcad1c047030c8bf246f41610b68d60bad285cc15f55900f52778a11ba82089050877f1611827956f3435c1fc67dd3d37954a255eaa0196cddc5d5a6187fa0a2839efb83089150877f23db56362f248912421e5f087ad16e0c9e6d2bb59db30a52818e41964b7d812684089250877f2f215e640207a88b02999c98f1af8fa17331d19ea3de1decfe8f2e478224209c85089350877f2b2a261917c0fecf2bce19021f8506e378e9d3e1afb451e9d162b3d93eed861286089450877f2f662e4cdfef5f822cb956df75b17b46f17b08f930f54bab4324a0363e23384b87089550877f0870eeab2e7bb1e82c426c2ab1d65fda25d426749a538b4ea669eaa31f661a00880896508781818082800980090990506200318660005262005a78565b877f169418dffc99f2ef5dc6b1013717c134409349d846457985725b15ac6a152fac82089050877f021d3cb240d6400339ad5bc535b4fbb40919ce6b90162e51ec6895a7cabb437583089150877f12e45c46c45b660b6addc149e4216eeb6fb19474c8cce4d78e34c3cc18024afb84089250877f0c7c86394b7ad61d8c348d185403dc77152fd310b5d05970375a11b5abd0354885089350877f3024e78b217f85d8efeb60008ff70d33c3e84c238d9c21a04121b498a2fbb13186089450877f235977101b56071ced3163c1ec7187909a3ed7679bb54ad40811ba318e1afc8187089550877f14bf885e66f7c01fd974efdc0bc2d628ed79ad6fc6ba511c5a8ec383e1a73a7088089650878181808280098009099050620032a960005262005a78565b877f223325ae7e73cf093e1d5891aa92ed43f82610f1283f265f56548b38072f38d382089050877f239a5ae138dce6a019f44560ef7c19d2b8025dadf040559226f54870d318a57e83089150877f01dcc35115d9057efaf468d7c8a7d46048e01359c974855bc99738f0b247672e84089250877f1359a40012c5332587a4deb5604a436e269c282ba240cca0a6d77b343e76bbf385089350877f0a9ee39712223d4c0c37c26a96f267c85fc8e31acaee0c07354d3798dc5003e786089450877f11812d1ca3671ae688a9877233eeb5ec29868f7cd7c5e13275391a84167e023187089550877f2435cd699bc94985945d878960770f9298d40c0e28b6b5979069e0590952f0b888089650878181808280098009099050620033cc60005262005a78565b877f2bf020785e4117a1ea5930cd5355303bf9aab2a1ea0d6685391f40eeab2af0a082089050877f2cef6c78577c9e97a76855292ca92e4269ac53e9b7439dffbac2eda5c675802483089150877f09a30e00c9f0f6f260f05f029cdaa7c7afca506a5ce562c877b3b8d54313542984089250877f1fd85928f8c8053c9b264a74f121b90bbf9ae8063e0e89670165b9ba66a3e7cd85089350877f24482279d9efa57862a6cd4524aa289e6950606df8cdf8fbcaed4b674fdade9186089450877f10260a39cfb0d82ad8182a6951f9c780a455fc1de48c417d6ce6b27f3646218587089550877f25207827a76052d489bb2698730d5c3fc97192a4420578d2474a37ae7d7e314888089650878181808280098009099050620034ef60005262005a78565b877f28e36b634ecbdf7b8e4f9e1a347df95d771f15d97f2d5c401edf6a6e375874bd82089050877f073f0dea6f83d443ee3ba27c5b7f0064ab7cc0d34babae859f6bf66d46a1e16583089150877f14c6618569f748ff65514437adbcfa97f87b9b0d169048e84c553ba9888c451e84089250877f0c7675a042ba6cc74fa588a0b26fdc4f2d1f119a0fe6ef111be6a2d45b4bbcad85089350877f03dfad7db3f32c6ed8130c43cff604dbe1c29dbff250c684c955f09e495fb34c86089450877f20114281fbe35c188164fc6d4144200fc1d9ec433efc677480bd2cdcb35b64e687089550877f29e42f5218b1ea3fad06a48e2292c0fe3df08a2c4a823a3be4b998955da8a21d880896508781818082800980090990506200361260005262005a78565b877f13bf4039488d94b1b6a67f256296daeb6c7c80fad2726d6e9be11e17c235281682089050877f1847a4e36b3eace13de58fa4662a9f88c9c17a464e6dbd2083c2938c227ee3fa83089150877f0a7a2056c7b79384af9fe3c6826830145f51f6f8ca5d1a344e295ca7663ada2784089250877f181278caa15bdfb5940cff2bc3216ff06a45962d4979dfc0d6c94993bb7de86d85089350877f0a8a6f4fbba2ee09a36d390fbb1485fb789cf3f9f641dae011520c8f10e57a4386089450877f08f6b4c0d7bd5e4c87fbc6874520e3329c067b6841fc833aa37514435e987cea87089550877f2206b2c18f3292e7a9a91039683a55d813dd914b0c7d523210424ff0f2817df7880896508781818082800980090990506200373560005262005a78565b877f0186cef5c04b3a6c32da26405a16cdd359df57be8e93291acbeba3f487329cfc82089050877f075aff67570ea17c7c79c9114c7a10d533c6080b6d15a5bebd1204fdcde772f083089150877f2b06d8389ba9621c3869d2e8b25ac15e2c97389caaf7f97a35700be66c1655a884089250877f04fc6d0a6b67744428161cb5228a94e7c0e95dede804b2b47a18055acd737aeb85089350877f25e4a295b4e7a2dc71394d41ec2a8f4b124e58c234448a028a2c3bc6ad25e69b86089450877f0094c24ab01c6db594fda907b639a7b3a54301439340e889b6ca9cb6cba067b087089550877f2751821a6e3b2206cd6bc3cd5d98cbae8850745ec6cbbea413e7254d2a514549880896508781818082800980090990506200385860005262005a78565b877f145aaecc24e3878db9a8d77149b2419ed5b42df025ecbd1a8e97d8b817904bb982089050877f0d2aa00cc6e5167d845ee1877b7aa059b5e5151c57e4c163da3403f9a95755f283089150877f24233b69861c70c449ebd36e4420ddfc3c242b69ff6e3d4c6090c2bd08a764c284089250877f2c55fe1a75147c9c826f762f836d5645ac4184ba1927dd56a76dc056a989566785089350877f19779b1cb16a9c79654016674978b8b6ee1a78b64579de93ed2d67b9e49f098e86089450877f1807721ba60fbae476ff60120c1f47ec0bce692cfc00102ae50bd9376c5a22a187089550877f1c0208f5aba12750802fbdc3bf12eac9e00ada708f167d4b167bd7d4b03d76f1880896508781818082800980090990506200397b60005262005a78565b877f090b6e28ff541cc38869abe2f5dbfb9fbe888d21021f29d2bddb9127d3c273be82089050877f193d6c7e76ad94eb59a20010a799c7bf96a8dda8c90887d65214c8665ecda01b83089150877f09ddd5bc0b1f8d4c4f1a7a102c1ba12ec7e7540cda285a564ea7c4753af8a8d184089250877f300a1dd5fda15d1a9cfe2a287801817168721da2f970139549e16811f555be1f85089350877f1520908df2eefba075bb41cfe0740e1e5a1ee181ce492016e152706e493cf47086089450877f0b3f215d52e85ec3c682698ebcb6228233ae9518f9450f480689e7cf3013784687089550877f050996a07af6765c56a8ee2f736650deb4972bfcddb194a0efeb1954daa8a4d78808965087818180828009800909905062003a9e60005262005a78565b877f23a59326daf5f94f3b5192c18ed06cc58cd9608e44138686399dc4f1ee807add82089050877f1d220b9add0592866898ce834b1bdc2003976e815c0cf7d3f6b8bf967ad5649683089150877f19b49c4da3d9e3a26d36566738658923477c504e76a38a82b1b1247104f681e184089250877f139decc567b06b495bd6f3cf006c05b7e1f25d5b7ac554445c37dd285beaae7a85089350877f1a5a7d8bca8d4f07d4cd6e9bcd00c009e3099e99af3080debbb21f90f8e5b42586089450877f0621e3811d3dcb9584d0a8be41e431d588c93274c8549e625f98fd15983a809e87089550877f02a41c2d2bcf14664a0130a021daa6efd4a3b0c3aded38635bff97e3785ed6bd8808965087818180828009800909905062003bc160005262005a78565b877f21cfb54ba72fc06794947cc3bda33d815355416e2aae19084d84471eedca399d82089050877f05115093894089a202a4cf8d0aea329d83cbe0ece741160f9975cf01b7c85dc683089150877f2e40541caca7653212827129559ab422a1c06a6f48c974291470c65fc070dfb684089250877f07eeadd730284f5ab60778900b60300d27970001aa63e46ebb7f9cda1157600e85089350877f0cf33e4964d350adf2051f8e2e8448d3324d24d3f4858407f4fd60d3333bd98d86089450877f287c60483e2db313f1a2bda92c1e1c28b65ef0b99df4acfb75709edf6a3bfcb987089550877f289440f4b7fdb8b2b22661d0742e9695139c1a1ecef53c3febde0b5f6d9bb4a58808965087818180828009800909905062003ce460005262005a78565b877f291bda2c37fac962a24555a7abeb36d8e8b9eb25222f97f4817ef2e5b0bc720882089050877f0e105449589412404cda7b82f14d527594ff99d04cea894d6ecc315119f42b7383089150877f0e6097f0ad418ac7123ae7eba6cd4522b7ffa8dc8cf60a1f836be23e41ec25e584089250877f22fdb676724017afa8a8069c62d307aa4ff52c1445ad41b94c3e406e33e0def185089350877f0204d594ad7855ad0f6950742b19e60c2c5338817aab7ee7bf631c3aa92160f186089450877f0b6a643dad3f953877110517f7b336518c8fc11d868bc72e76cd76c3b2f7dc1b87089550877f04189ea6c2bd4b00fa6349adde17027eb7d76353a10bd07d0942639447cb43d38808965087818180828009800909905062003e0760005262005a78565b877f23bc8449d898a7524b2dfde263036cac2e14935134f8c3baf7f1e13ea2deec3c82089050877f0017efa608d9941bc64d39e0b2593b742576dba257fab323d4c99c7a42107a1683089150877f02f061475e9d8888b3877f9308e7758a16f91e3a34a5856f15ad0b9f2f92e2b484089250877f1f257d4d6f3277674a061330d73d6ba135da7cb0cba318686872fe1ef6d52e2585089350877f195340f6c1f7b5f6158884bd237715149cea488edbfd80fc9b9cc61c384853ab86089450877f273e200179c5c45d860b26a20b2c0853c1008f942459d5cdbed633ede031aa1d87089550877f24bd0ecea1e1df97af0f296c0e792d676e2c8e02e808a158bdbe01431c5e4a488808965087818180828009800909905062003f2a60005262005a78565b877f0c6e6f0f7c20811f404599d458af5c6cb41ab671599d6350df38e82104bc683582089050877f1dee1352470235cd8e129b5611fa953706bc08d58f6a3ef3d80370d8d19683a283089150877f1be0cc30343a168fda7c757ac0c7e5e16afddbfb7265878080725a12fa12ad4c84089250877f1a449abf644f68a64c217c6a042a231107ca8d9c619208580eb76bbd9215d98485089350877f080117dde58f228a459f59d90e64babe2daf476a9a2ca018faa3c5fecaac178986089450877f24ab9a167b61855e0f2c60bff098d5eb7d15166fab51f2b62c809de318d6d17687089550877f2b56aca9d595460503363292bccdc80e823201f71b54bda684c93eb0893784f6880896508781818082800980090990506200404d60005262005a78565b877f057361ec23c87b30080ff1cdf3467d57c95a12afbfc48ab5e1e4de0162a41b5a82089050877f1baed177177a25ecbbfaf4f204d9921eade3689ba1378cd9362cc14145089f9583089150877f00ccdb6d5f4913d7656889c312975fdbe0e0309a841849fd808d75f593a7148184089250877f2c52f5e1ef57de5dde528471cc1f0ee7839929df98ee743d9eff96251556191085089350877f0234a4a32f767f2e1ca48dad3a2fdd3ff54b2ca3d53ce13fc9052414ad7f755586089450877f182b4c0c551ab0ce1990b472278f794ba9cc62abcc90a89efdd80776558e343387089550877f001ab2bbdbd043d2d7d1a4eb76db4de71fddf19edf10d7cdb9550e1846e53fd5880896508781818082800980090990506200417060005262005a78565b877f206e6cd1e3154c113a762a628e24940907b41e90e7c2d43aa256ea524997835882089050877f27816cab4bec18577bd335bdaf8298798a261bb175137177d46ba95dd03dc8bb83089150877f1680b632a04be3eb1ed64ef589440b3f9526b2ad82cf0b8839d3e7b0f585bc8c84089250877f196b2cc0e6e07628df8234f58c027c190c75b0342511efea4c3724c4fedd6e7585089350877f29ab0b6065ebbefc684608acc6bf3b5fc693770c38bf91b4be38fe6f7264748686089450877f224ce814d39c382da2d65eccd9deb48056ede18c5efcb8e25515b727e540a85987089550877f195e1cb28f38a9cb57b2c719b504f5fdd1d42559b6a368264fd0fbfefa66559f880896508781818082800980090990506200429360005262005a78565b877f0e9e5eb70f4490ba6dbd1c0ee1d6724ccdd58acdf138785ce98ee3848ffb784082089050877f1995c9c8e520014e4412ec653839d781548cf71f46fbeb51919582226cbd5b2183089150877f0886095cc376c87fa653000283a6eae11008982f27104afee198fc377f26e32484089250877f13761e206b3e89b23de2342bfca860f9b0d9a36d486aa115565f9f52369c124d85089350877f22a8c6cfc0e38a500a47515c519ad6a72506ec0d508de25942c10f51f0dfab8186089450877f18985e9c7ea6f1a16962e4e27cf1aa4aa3086938b13f8ee9465a5ec7bebdee0387089550877f215b523ce3f055c92eb148c00027d1ad406a2abd64081043e0d15492845b31a488089650878181808280098009099050620043b660005262005a78565b877f0102f78c7513b093b885726b7df2e70298801b3e4019cdd42239d76448588c3182089050877f0bce88602fd3a0f0ab8885891ad44045058f9ace11fdabd24e8dfa1b0a4ae72783089150877f0745f760f8d466fc21043e2292e6cbb20b6227517f5200251129c5481f52fa4b84089250877f0406de3807445c6d3cbdf7b174c410a998a1530fcca991535a2a262de4e2ee5685089350877f26779e7346349068dbba66f784f87e243cc27cab59e887f7ed7a0117887d1acd86089450877f25150652a08af8ca574c7c5c77ffd98b17259a1d914a6ea41db75014267949d887089550877f00bb8d13438040f674a79ed42202c5bf6e67de6fc3f6b65ca837ceab795fcc6f88089650878181808280098009099050620044d960005262005a78565b877f0c1ebf40eeaac3d4a192dd50ee25c0067f66eff6229d045d5a801067639ccf2c82089050877f1a39731eb32fdb51dd793754f76103b5cab86947aad12d490d4951932ff2072783089150877f2baad3d41b18ae10c463af1662ecb28c6988524edded36943672a0e857b960f884089250877f2e778da1518b6a4fad2e833e41466fb2fe82f4f8df1b5c218cdd3b7e49af67e185089350877f156dc717930d6490167743911e9bf4d4634ae049b53adab281698645f8b16dc686089450877f117f2ef1712692ab9dbdc51db4968b45f5e0104f9e5281329349d908b23e231c87089550877f0b281b5d9dd2ca1a92e2d83b5087b6a08d6ab08330f47512aa047b2f88ba68cc88089650878181808280098009099050620045fc60005262005a78565b877f1c2803766dd9096567a3366061764f8c916f2a2dd640b6eec0942ccb75d4076782089050877f120174d53ba57d1a141bf40e4c705683668bd55800000aab6f34766b7b6575a283089150877f0c37b25020f8c76ea5536de54c722e47d01795d31b5ed73466e7d8b8ad376d4684089250877f0a508f345cc9a8b0c30ba27651ba1c3ad8398025a4000a5c2500228c44fa91b885089350877f12afa49ff4d8b4c6c372f7e065840783cb9497eeacc847a340f61f1823cb2a8d86089450877f29fc37eb5ec7cd004809516b7aa3c716f4f7f6e7772f443e0730b01dd5071a5587089550877f2048fb9c1fdaced0fdc5159490db2977e57dbcbff7514ad1e52a271bf84dd1a8880896508781818082800980090990506200471f60005262005a78565b877f00a6c4223aabe583e899bbcd0314a4743181f1d5e03dbc11c8a4d02550fab64f82089050877f15f462ab5b21c31557e25d9c22d8dc6a0cca93c8ed68a35655cff745686764d083089150877f27bc1c9af68edf8e3730197124be559f1472e7e3bba0d35e079b2d1b9e4271ef84089250877f1a2ec148f900eeae38c0d3d6efda64e146929c71eb82da3139a3a85968ec6ebc85089350877f04ff41cb553ca616d0616545922f2030b71b2354bcd1c55d7eabcaea8904c22e86089450877f2f2c4e7b18a845fcd6add67009fc237b14a984619260a7b3d38712e03a0849b787089550877f22925c606a1f091c1d5c7122f8e1a8ffea6a140031106826ac53a9c69d84c0ab880896508781818082800980090990506200484260005262005a78565b877f10e2a8c7b12bf70266c257573ca2594d8811633f77822d7c232b329c5b4e727982089050877f1712319595ae464992524bf8e488b783fa45b3548cd3f162d586bce31ec7184c83089150877f2e9616987d3333388ea5a1cb56b4c161f279ff19454a64ade43daed4dcda5c0b84089250877f2c68210d75660df5d9a8392a2805ea1612fc6137cf5b35a68fc1f03acfbfe4ca85089350877f053cf3707283df8730b6e1f637d23c67b0b3533061a35bcb0cb0f9bbe4e8adc286089450877f07577491483d03d7769dacc79607b9897081c0095decdce3d227c059ddeddb6687089550877f05639b2324c0b0af81c5b256ca6b2d46b95eaf855fc26cedbf90411312de4a12880896508781818082800980090990506200496560005262005a78565b877f0ec90944eb8fc36c52f3fd13763714f41cea1ff487ea39d70bd94e9b7f8f16d582089050877f1e96cd3ac345bb2e5bd3e755922f84afaf303d6fb227fc68f703b93665f5ea9683089150877f0408425405c66baa7d49858e6d5871e5b42ffebb0df885a824942da1e2e36d5884089250877f284d77566b42f3913d41ebb0528b899426e0805aadb9957a534b022b081aa97785089350877f0b044e5984887cda337f58c7ca50a78126deb5624f644516239427948d7d06bc86089450877f0486972179ee3496795bded1c2fc9674c0c3f71b58150c9c525063a6f2b340d887089550877f25b7568316c4b2fef9b72543b6033b317a7bfe406623e47cb68e5c79296e6bee8808965087818180828009800909905062004a8860005262005a78565b877f0cec9e74c344198703ceff28a4d11275f6c5c15738aa5a54a19269261ec6a8a882089050877f2bcc34a99345174c97a65e8978194486a9957c9d736f0ca39b98130801d1a11483089150877f2ddb2ebc0ac98f6498c0f2be2d73e86a786940a1e8c558d8dbed8d6f44b0255184089250877f2642b4a208e503e3480718d4d205351f43da183ed284ed7a385ef7cdca80bea885089350877f23fabdb09b481bc764102ae85ccf1e6ff71c7762f8bad04a2de3f7a025cb508786089450877f0ae4ed0ea6adb74b9d327fbcd01dbf37f5f6c467480c8aa5f495124cf70b823e87089550877f09034e1a646d6674bef041afa774e3634faf8adcc7c71bc2ed6e03b0b44920168808965087818180828009800909905062004bab60005262005a78565b877f2817ea20b471a4bf138dec79d84f9f6c0015e0ca147b650683df4b3372b55ef282089050877f2dfb7f81425c2def6bfa4e833e51e912298397de78fd2aa17f6d1dd2f1379ca983089150877f137b5bdb746523c051d680be08daa6b0d54c9ff7099f2bf5ce894c24a8ef1f3784089250877f03900ec7adc8e28af7046833dbad3fa1024e382aebe02bcb535243ddca21aa8585089350877f2b285b6c23b25c52f2079863c759e6a10c33df8f191551ead53ea508511cb55586089450877f1242067be2202d1b2c32b79c464e2d6c977e6fd12d8b35281e84c375864613d887089550877f1e8690f5b0a8729b9536ef2920abe7e6f3eee805237b158d997db63b17525eef8808965087818180828009800909905062004cce60005262005a78565b877f047f5113e1287b5572c82edb369fb0f717a91f261ef9d81764a5b279ad9c13ba82089050877f2d8800f21cd6774d5a6aa58ae2cd32593593d173b687122a4d61c4474390210583089150877f274ba1521d5bc5c580647f10d1a4c4cadeef088685d1976979bad813756f84b084089250877f17895b7c10d6a475310d34a0737efaedddca8f1eee9d8d56e7fe4934c8b5644185089350877f06eed11ae9f70df5ced09b1a6db258978cf5becad2f66d15761bf61e7dc1344086089450877f3036b521c631ce5d3599e37f6a5daf928842cefcbcd2c6bf84e2db5ded748f0987089550877f1f52d6e9ac28976c5a6fbf168c818478645c90d72e367609d7d7805a6367482d8808965087818180828009800909905062004df160005262005a78565b877f2a0e60356875d6ace1055932b3dd9ef39c3dd871091e96a323c1596cedb35e6b82089050877f02089633a6194f3ed38eeec2c8f54d0c7f434938fdebb9c0e1830dbe5311c38f83089150877f178c73d2769765d85383283fdb0d769457cfef0612baa963336bac1240b604c284089250877f2fc20bcaba9e3d96ebcdd710e3b341837d5d0db849e789f28c4be5004afa19a085089350877f151a423bee67fb14d5ad279f425213db7e0f21494982df872354c01f0f4a722c86089450877f25d61619e135690c4e10e4afeb4f5578ad0f8e25c20735366895b31eebcdf47e87089550877f15dd579bbd075429301d7295d3e685d832bf9f36c51277d09f2c3a664b045cd78808965087818180828009800909905062004f1460005262005a78565b877f236fa29b81678c8a109fd361c1ca90adf4423c13cf5b8cc1032b7283bcc959b182089050877f2a80cbac9b884e20368691bf1567cb7320537a977da10e53c5baea3446c01d1d83089150877f11d4cb8957937b3628a3b3f4d27f276cc0c179b0c22b2c13fffbde85fd91237884089250877f1289bf8ec507bf752a07c9b71efc0f800a52fbeb1637c5010fa54eadab40294685089350877f26f842b1a99394297d25799f2f03dc9e4903e77d2ddc03ec2fb155466da6f30386089450877f15944b9954b6182314e878fa2f9e091dcc40eadc48d37d39bdd5f09905c3a36987089550877f0742166dcd8ebd8576a6bfe0f1fed13793928f84442c7465a0012f584426fadf880896508781818082800980090990506200503760005262005a78565b877f08603d5a0e937b5353b56b05768fd50bde792e72fd61c06344cbd735707b68ff82089050877f0caa1711c66e9301b6f25e21a31683d80bf58d86032d03bfd25b9777edb74a7583089150877f2d6506da695d2087dff87b5f636ee676fab00c32ae45c75b3db345f3fe74a31184089250877f0d9244b07af9b6eaeff6f84049cb2e01d75dc4cb68533606e976b8b300758c8485089350877f243abc3c3382faa5dde3f1c3b432042d3f030ef6a1f5401aa37acd15cb1c8c4686089450877f168416e0a6d275d30eda3989242e0723024727d3b0791b06f8e1bfe8efe4019887089550877f1bcdeef03693d1ad0ea80c65688654affe634aa14cb11ae3a491681d9c5f8eeb880896508781818082800980090990506200515a60005262005a78565b877f02f66bfda3d2a1bdedb0ab8bf7eb1c4e551bef58d94fad7f7c231107e565390982089050877f019f6802171ab82a5922f023fdecc097eb8ac1fd0a1ed349afe9a7b94298975a83089150877f195a1c738398feed8c760468a0556c232645a1dd862d87c1f508c949ad52c3ae84089250877f0a36a3a46e6ec16567dfae1f853f360e6f24924810e838cb24ed1b0fce37f1e385089350877f002123c29ea87f7ea7b35c25f9e8dd3e81bbc3974c3c17c607cd840c09f374ae86089450877f02a717499cb6c31f71f0f0352b0f5bfef3005b80e93a520b6e42b3985789e2d387089550877f0fc053584b0a4607a2293e18baa309c52fdc933e9ba90fd327aaa8c8cfc4daa1880896508781818082800980090990506200527d60005262005a78565b877f1310d1942129737b32e87a86f4573032b1b99ae3c6d71bafef7b49479485554182089050877f1bfadae53fc82900f5761c558fee5e1218e6b2a6657e74b540969eeb49e0b8de83089150877f28c08a69e5f3641460ff2c60b7579395650c5b6afb392da142d32de8677556ea84089250877f223222ee42b6ca997f44d643ed6a3f2b040f47fe8cd922163d9d9d8b2622d90985089350877f064dad4752e708ff29bb0842d2c452a71448b43949345690031cb125588876a086089450877f2d5ddc21797043996b22dcabb9a1ba6c82b71e9a1bc5919db8befd35411056a587089550877f26315fcd9b5e1a266ec8e9f6600f5a6e0bcdb22f926d61591e83fa21069c0e0b88089650878181808280098009099050620053a060005262005a78565b877f0759273a4177fcdeab23da38b478faf2d4f22e82f346aa754b0a1331bc8371ee82089050877f09e13300eade70568fa0a840ea9729896ddd84c364d6279d34a0b9d1478fcf2a83089150877f13e97ed3c16fad6cb5b7bb954f278f2434b22f8cc054463a145cbe0240d4f8bc84089250877f05cd3486dca58f4eb221bc2cbedb8aa3027cde5765971bb1f61c272c5aa51ad085089350877f005ce523f6bc21daf1df468b12fd3e8665e1c1697816a9a671a3b2b6149c7de486089450877f2103066cc5df55e67cd7914028145fb71f089d671c83c5b537abea482b2d8cbb87089550877f039f8077bd9b71f91ca0502eaccc1672c539f72329317aaf8173d2edd763692888089650878181808280098009099050620054c360005262005a78565b877f2247bc0cc4373705b89672a2205346e6af3a6422e81b4f4885dc3af7cadcc5c582089050877f27bcc768bd31b9d00687a7e53c3ce53c426762706188790ea20b2e819638df8083089150877f0d91cef51a76f7a62c51c73a2809732d79ac350159814ea536487368cfdfd70884089250877f20a9ecdc649a26388dc68dc02343a0f167bad46d6aa1cd008537f627ba14073085089350877f23134149a0d4567c6dfc911d5cb80c1a1016220d39e0c230325dae2941f528bb86089450877f2a07507e9f030a42c6f29ccf1c9cc4f3e5a5b0dbf05874d5edadc03fe74b947487089550877f1bdf66bb1d57fd788e54ef29f06f35fdb2729b718ce81152cf3aafc64966110b880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200562e60005262005a78565b877f275c33d07f9e7338ddf50783bf158d51be619bf77a12020cf5630b78e7e0d0b982089050877f16411554e55fe604a1ff1b3b5b7afb6a2bfd0f32c4070b55bf1ad234e8b2811683089150877f073e6ac7e6af227557249ca1a5c55222a36c641bc2851a0dfcfb60831f6759a884089250877f10a6fde88c5f621d748543c76a218f95c202bbc3baca06838f31331b0556e12f85089350877f29c5865a26588ca8a88128a072c8434cc97a1bcec23e136f038d29dcf96b0eb686089450877f233e0ef6ad132ed211b1911cdd569576fea8c17ca64e4d5dd516fcca07212c1a87089550877f096f9b92b9cf2c7d664408a29860365f5b6adc238d878a476bded3e4d2e0b840880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200579960005262005a78565b877f2fc788fe8aad4c28b943bb57cb90edf6d7b1f1e835de1fbf3192e395db78555482089050877f1bac0ed609233148503795fc5e114076ef7c9d722bc648dd0338d9689f6e023a83089150877f001c35268aa030d6cd148e106e3fc23094e561573d8c72a69fc383643e2adc8284089250877f2bb1f8fe5d998d0b8b92837ffb27bfe7a39ce39ff94fc167ddcc95a7202e34b285089350877f1a98576450a43e5e705b9af68cd0c145422da23945630b10b8e821dd61f9a2b286089450877f2714d37ee506efbc2ba9941043fb23f16af966f123d653f38388bcbdd50e603787089550877f175d0480ba14abf0bcb8075a03f4a2a01ff7ed75413917b53e50ea00cc2a4ad0880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200590460005262005a78565b877f203de45a037b75ef63761750dce08da2be7709701ec8158c17fc026fd084d54182089050877f265aabfc78b70ca985c329080d6329a12560f76b01cc3d431a7283022193abf883089150877f135468dfbeb70e8c2edaffac8658a6c22b2ad1520ac0819c127af2ea5f3a87a884089250877f216a41e24329deda65a8a82001c84ce8286c61758447ff1bfa9d9293b6711fdd85089350877f2887ed49797bd6652bed8bb99ae345ad70d1a27cdb21b9460bb6fd0d4fe482e686089450877f03e2bf82690c804bb6ee3c79dabd1892ea53a9811e2424a19fae446b8ae49cad87089550877f0e6dce1bbe6e9e465cbe14dcc615611867414676dd8a8ce9946649b1c4e811168808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062005a6f60005262005a78565b60005260206000f35b8760205182098860405184098991088860605185098991088860805186098991088860a05187098991088860c05188098991088860e051890989910888610100518309896101205185098a9108896101405186098a9108896101605187098a9108896101805188098a9108896101a05189098a9108896101c0518a098a9108896101e05184098a6102005186098b91088a6102205187098b91088a6102405188098b91088a6102605189098b91088a610280518a098b91088a6102a0518b098b91088a6102c05185098b6102e05187098c91088b6103005188098c91088b6103205189098c91088b610340518a098c91088b610360518b098c91088b610380518c098c91088b6103a05186098c6103c05188098d91088c6103e05189098d91088c610400518a098d91088c610420518b098d91088c610440518c098d91088c610460518d098d91088c6104805187098d6104a05189098e91088d6104c0518a098e91088d6104e0518b098e91088d610500518c098e91088d610520518d098e91088d610540518e098e91088d6105605188098e610580518a098f91088e6105a0518b098f91088e6105c0518c098f91088e6105e0518d098f91088e610600518e098f91088e610620518f098f91089c509a509850965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/Ramp.json",
    "content": "{\n  \"address\": \"0x9916fec54D428bAf38d43B9D91ac968b8DDA51Bd\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xa36b83549f6f9970d696ca47183697bc97d16731befa9fc4b92981a919374886\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x9916fec54D428bAf38d43B9D91ac968b8DDA51Bd\",\n    \"transactionIndex\": 98,\n    \"gasUsed\": \"3587642\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000080100000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000004000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x61a27beeaaa0f1c0bc382d60b15ce46fecbc3b3135e3c6cbb32ac3f8aa5d674b\",\n    \"transactionHash\": \"0xa36b83549f6f9970d696ca47183697bc97d16731befa9fc4b92981a919374886\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 98,\n        \"blockNumber\": 10176682,\n        \"transactionHash\": \"0xa36b83549f6f9970d696ca47183697bc97d16731befa9fc4b92981a919374886\",\n        \"address\": \"0x9916fec54D428bAf38d43B9D91ac968b8DDA51Bd\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 195,\n        \"blockHash\": \"0x61a27beeaaa0f1c0bc382d60b15ce46fecbc3b3135e3c6cbb32ac3f8aa5d674b\"\n      },\n      {\n        \"transactionIndex\": 98,\n        \"blockNumber\": 10176682,\n        \"transactionHash\": \"0xa36b83549f6f9970d696ca47183697bc97d16731befa9fc4b92981a919374886\",\n        \"address\": \"0x9916fec54D428bAf38d43B9D91ac968b8DDA51Bd\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 196,\n        \"blockHash\": \"0x61a27beeaaa0f1c0bc382d60b15ce46fecbc3b3135e3c6cbb32ac3f8aa5d674b\"\n      }\n    ],\n    \"blockNumber\": 10176682,\n    \"cumulativeGasUsed\": \"28926171\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n    \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n    \"20000000\",\n    \"999000000\",\n    \"86400\",\n    \"180\",\n    \"1000000000000000\",\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f04018ca3672426744531c5b0e9c8cda\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Ramp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Ramp.sol\\\":\\\"Ramp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"./external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"./external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"./interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0673d848a6f2d2a80803fe45e2f186625c1a09998eb1da414a39573afcaa4f4f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c06040523480156200001157600080fd5b5060405162003fa138038062003fa18339810160408190526200003491620001e4565b6200003f336200009d565b6001600160a01b0388811660805287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b0319169183169190911790556200008e89620000ed565b50505050505050505062000280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f762000170565b6001600160a01b038116620001625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200016d816200009d565b50565b6000546001600160a01b03163314620001cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000159565b565b6001600160a01b03811681146200016d57600080fd5b60008060008060008060008060006101208a8c0312156200020457600080fd5b89516200021181620001ce565b60208b01519099506200022481620001ce565b60408b01519098506200023781620001ce565b8097505060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a01516200026f81620001ce565b809150509295985092959850929598565b60805160a051613cd8620002c9600039600081816105e701526110cb015260008181610354015281816114110152818161192701528181612e260152612ed50152613cd86000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212209f5c02fc7d99d9a29ddbf394d50a84e561027a6b405d2ef7b323f6d8a34006c964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212209f5c02fc7d99d9a29ddbf394d50a84e561027a6b405d2ef7b323f6d8a34006c964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4265,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)7234\"\n      },\n      {\n        \"astId\": 4268,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)7272\"\n      },\n      {\n        \"astId\": 4270,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4275,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4226_storage)\"\n      },\n      {\n        \"astId\": 4280,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)4167_storage)\"\n      },\n      {\n        \"astId\": 4285,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)4185_storage)\"\n      },\n      {\n        \"astId\": 4290,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)4204_storage)\"\n      },\n      {\n        \"astId\": 4292,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4294,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4296,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4298,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4300,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4302,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4304,\n        \"contract\": \"contracts/Ramp.sol:Ramp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessor)7234\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)7272\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)4167_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct Ramp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)4167_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4226_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)4226_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)4204_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)4204_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)4185_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct Ramp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)4185_storage\"\n      },\n      \"t_struct(AccountInfo)4167_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4163,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4166,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)4218_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 4213,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 4217,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)4185_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 4169,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4173,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 4175,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4177,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4179,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4181,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4184,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)4226_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4220,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4222,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4225,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)4218_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)4204_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 4195,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4197,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4199,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4201,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4203,\n            \"contract\": \"contracts/Ramp.sol:Ramp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/USDCMock.json",
    "content": "{\n  \"address\": \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_mintAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"symbol\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"allowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"subtractedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"decreaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"addedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transfer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xbef6a45ad597b631f4051247951c479e9e83833f54abc8dffe8b03faa5794801\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n    \"transactionIndex\": 19,\n    \"gasUsed\": \"621998\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000020000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000100000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000\",\n    \"blockHash\": \"0x200b1b9f805d6c29ea50831e8f69f9ca13b9045bc3d418fc480018c5e405f37a\",\n    \"transactionHash\": \"0xbef6a45ad597b631f4051247951c479e9e83833f54abc8dffe8b03faa5794801\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 19,\n        \"blockNumber\": 10176679,\n        \"transactionHash\": \"0xbef6a45ad597b631f4051247951c479e9e83833f54abc8dffe8b03faa5794801\",\n        \"address\": \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n        \"topics\": [\n          \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x000000000000000000000000000000000000000000000000000000e8d4a51000\",\n        \"logIndex\": 15,\n        \"blockHash\": \"0x200b1b9f805d6c29ea50831e8f69f9ca13b9045bc3d418fc480018c5e405f37a\"\n      }\n    ],\n    \"blockNumber\": 10176679,\n    \"cumulativeGasUsed\": \"2259471\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"1000000000000\",\n    \"USDC\",\n    \"USDC\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f04018ca3672426744531c5b0e9c8cda\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_mintAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Approval\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"allowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"approve\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"subtractedValue\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"decreaseAllowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"addedValue\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseAllowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"totalSupply\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Approval(address,address,uint256)\\\":{\\\"details\\\":\\\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\\\"},\\\"Transfer(address,address,uint256)\\\":{\\\"details\\\":\\\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"allowance(address,address)\\\":{\\\"details\\\":\\\"See {IERC20-allowance}.\\\"},\\\"approve(address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\\\"},\\\"balanceOf(address)\\\":{\\\"details\\\":\\\"See {IERC20-balanceOf}.\\\"},\\\"decimals()\\\":{\\\"details\\\":\\\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\\\"},\\\"decreaseAllowance(address,uint256)\\\":{\\\"details\\\":\\\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\\\"},\\\"increaseAllowance(address,uint256)\\\":{\\\"details\\\":\\\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\\\"},\\\"name()\\\":{\\\"details\\\":\\\"Returns the name of the token.\\\"},\\\"symbol()\\\":{\\\"details\\\":\\\"Returns the symbol of the token, usually a shorter version of the name.\\\"},\\\"totalSupply()\\\":{\\\"details\\\":\\\"See {IERC20-totalSupply}.\\\"},\\\"transfer(address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\\\"},\\\"transferFrom(address,address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/mocks/USDCMock.sol\\\":\\\"USDCMock\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./IERC20.sol\\\\\\\";\\\\nimport \\\\\\\"./extensions/IERC20Metadata.sol\\\\\\\";\\\\nimport \\\\\\\"../../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Implementation of the {IERC20} interface.\\\\n *\\\\n * This implementation is agnostic to the way tokens are created. This means\\\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\\\n *\\\\n * TIP: For a detailed writeup see our guide\\\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\\\n * to implement supply mechanisms].\\\\n *\\\\n * The default value of {decimals} is 18. To change this, you should override\\\\n * this function so it returns a different value.\\\\n *\\\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\\\n * instead returning `false` on failure. This behavior is nonetheless\\\\n * conventional and does not conflict with the expectations of ERC20\\\\n * applications.\\\\n *\\\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\\\n * This allows applications to reconstruct the allowance for all accounts just\\\\n * by listening to said events. Other implementations of the EIP may not emit\\\\n * these events, as it isn't required by the specification.\\\\n *\\\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\\\n * functions have been added to mitigate the well-known issues around setting\\\\n * allowances. See {IERC20-approve}.\\\\n */\\\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\\\n    mapping(address => uint256) private _balances;\\\\n\\\\n    mapping(address => mapping(address => uint256)) private _allowances;\\\\n\\\\n    uint256 private _totalSupply;\\\\n\\\\n    string private _name;\\\\n    string private _symbol;\\\\n\\\\n    /**\\\\n     * @dev Sets the values for {name} and {symbol}.\\\\n     *\\\\n     * All two of these values are immutable: they can only be set once during\\\\n     * construction.\\\\n     */\\\\n    constructor(string memory name_, string memory symbol_) {\\\\n        _name = name_;\\\\n        _symbol = symbol_;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the name of the token.\\\\n     */\\\\n    function name() public view virtual override returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\\\n     * name.\\\\n     */\\\\n    function symbol() public view virtual override returns (string memory) {\\\\n        return _symbol;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the number of decimals used to get its user representation.\\\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\\\n     *\\\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\\\n     * Ether and Wei. This is the default value returned by this function, unless\\\\n     * it's overridden.\\\\n     *\\\\n     * NOTE: This information is only used for _display_ purposes: it in\\\\n     * no way affects any of the arithmetic of the contract, including\\\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\\\n     */\\\\n    function decimals() public view virtual override returns (uint8) {\\\\n        return 18;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-totalSupply}.\\\\n     */\\\\n    function totalSupply() public view virtual override returns (uint256) {\\\\n        return _totalSupply;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-balanceOf}.\\\\n     */\\\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\\\n        return _balances[account];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-transfer}.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `to` cannot be the zero address.\\\\n     * - the caller must have a balance of at least `amount`.\\\\n     */\\\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _transfer(owner, to, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-allowance}.\\\\n     */\\\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\\\n        return _allowances[owner][spender];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-approve}.\\\\n     *\\\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _approve(owner, spender, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-transferFrom}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\\\n     *\\\\n     * NOTE: Does not update the allowance if the current allowance\\\\n     * is the maximum `uint256`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `from` and `to` cannot be the zero address.\\\\n     * - `from` must have a balance of at least `amount`.\\\\n     * - the caller must have allowance for ``from``'s tokens of at least\\\\n     * `amount`.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\\\n        address spender = _msgSender();\\\\n        _spendAllowance(from, spender, amount);\\\\n        _transfer(from, to, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\\\n     *\\\\n     * This is an alternative to {approve} that can be used as a mitigation for\\\\n     * problems described in {IERC20-approve}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\\\n     *\\\\n     * This is an alternative to {approve} that can be used as a mitigation for\\\\n     * problems described in {IERC20-approve}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     * - `spender` must have allowance for the caller of at least\\\\n     * `subtractedValue`.\\\\n     */\\\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\\\n        address owner = _msgSender();\\\\n        uint256 currentAllowance = allowance(owner, spender);\\\\n        require(currentAllowance >= subtractedValue, \\\\\\\"ERC20: decreased allowance below zero\\\\\\\");\\\\n        unchecked {\\\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\\\n     *\\\\n     * This internal function is equivalent to {transfer}, and can be used to\\\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `from` cannot be the zero address.\\\\n     * - `to` cannot be the zero address.\\\\n     * - `from` must have a balance of at least `amount`.\\\\n     */\\\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\\\n        require(from != address(0), \\\\\\\"ERC20: transfer from the zero address\\\\\\\");\\\\n        require(to != address(0), \\\\\\\"ERC20: transfer to the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(from, to, amount);\\\\n\\\\n        uint256 fromBalance = _balances[from];\\\\n        require(fromBalance >= amount, \\\\\\\"ERC20: transfer amount exceeds balance\\\\\\\");\\\\n        unchecked {\\\\n            _balances[from] = fromBalance - amount;\\\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\\\n            // decrementing then incrementing.\\\\n            _balances[to] += amount;\\\\n        }\\\\n\\\\n        emit Transfer(from, to, amount);\\\\n\\\\n        _afterTokenTransfer(from, to, amount);\\\\n    }\\\\n\\\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\\\n     * the total supply.\\\\n     *\\\\n     * Emits a {Transfer} event with `from` set to the zero address.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `account` cannot be the zero address.\\\\n     */\\\\n    function _mint(address account, uint256 amount) internal virtual {\\\\n        require(account != address(0), \\\\\\\"ERC20: mint to the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(address(0), account, amount);\\\\n\\\\n        _totalSupply += amount;\\\\n        unchecked {\\\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\\\n            _balances[account] += amount;\\\\n        }\\\\n        emit Transfer(address(0), account, amount);\\\\n\\\\n        _afterTokenTransfer(address(0), account, amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\\\n     * total supply.\\\\n     *\\\\n     * Emits a {Transfer} event with `to` set to the zero address.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `account` cannot be the zero address.\\\\n     * - `account` must have at least `amount` tokens.\\\\n     */\\\\n    function _burn(address account, uint256 amount) internal virtual {\\\\n        require(account != address(0), \\\\\\\"ERC20: burn from the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(account, address(0), amount);\\\\n\\\\n        uint256 accountBalance = _balances[account];\\\\n        require(accountBalance >= amount, \\\\\\\"ERC20: burn amount exceeds balance\\\\\\\");\\\\n        unchecked {\\\\n            _balances[account] = accountBalance - amount;\\\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\\\n            _totalSupply -= amount;\\\\n        }\\\\n\\\\n        emit Transfer(account, address(0), amount);\\\\n\\\\n        _afterTokenTransfer(account, address(0), amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\\\n     *\\\\n     * This internal function is equivalent to `approve`, and can be used to\\\\n     * e.g. set automatic allowances for certain subsystems, etc.\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `owner` cannot be the zero address.\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\\\n        require(owner != address(0), \\\\\\\"ERC20: approve from the zero address\\\\\\\");\\\\n        require(spender != address(0), \\\\\\\"ERC20: approve to the zero address\\\\\\\");\\\\n\\\\n        _allowances[owner][spender] = amount;\\\\n        emit Approval(owner, spender, amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\\\n     *\\\\n     * Does not update the allowance amount in case of infinite allowance.\\\\n     * Revert if not enough allowance is available.\\\\n     *\\\\n     * Might emit an {Approval} event.\\\\n     */\\\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\\\n        uint256 currentAllowance = allowance(owner, spender);\\\\n        if (currentAllowance != type(uint256).max) {\\\\n            require(currentAllowance >= amount, \\\\\\\"ERC20: insufficient allowance\\\\\\\");\\\\n            unchecked {\\\\n                _approve(owner, spender, currentAllowance - amount);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Hook that is called before any transfer of tokens. This includes\\\\n     * minting and burning.\\\\n     *\\\\n     * Calling conditions:\\\\n     *\\\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\\\n     * will be transferred to `to`.\\\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\\\n     * - `from` and `to` are never both zero.\\\\n     *\\\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\\\n     */\\\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\\\n\\\\n    /**\\\\n     * @dev Hook that is called after any transfer of tokens. This includes\\\\n     * minting and burning.\\\\n     *\\\\n     * Calling conditions:\\\\n     *\\\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\\\n     * has been transferred to `to`.\\\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\\\n     * - `from` and `to` are never both zero.\\\\n     *\\\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\\\n     */\\\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../IERC20.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC20Metadata is IERC20 {\\\\n    /**\\\\n     * @dev Returns the name of the token.\\\\n     */\\\\n    function name() external view returns (string memory);\\\\n\\\\n    /**\\\\n     * @dev Returns the symbol of the token.\\\\n     */\\\\n    function symbol() external view returns (string memory);\\\\n\\\\n    /**\\\\n     * @dev Returns the decimals places of the token.\\\\n     */\\\\n    function decimals() external view returns (uint8);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/mocks/USDCMock.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract USDCMock is ERC20 {\\\\n\\\\n    constructor(\\\\n        uint256 _mintAmount,\\\\n        string memory name,\\\\n        string memory symbol\\\\n    )\\\\n        ERC20(name, symbol)\\\\n    {\\\\n        _mint(msg.sender, _mintAmount);\\\\n    }\\\\n\\\\n    function decimals() public pure override returns (uint8) {\\\\n        return 6;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xda097618a7499396c5d4b8bdf4d296d687408a91b442333254f8ef8ba8f29953\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523480156200001157600080fd5b5060405162000c5938038062000c59833981016040819052620000349162000201565b8181600362000044838262000303565b50600462000053828262000303565b5050506200006833846200007160201b60201c565b505050620003f7565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e09190620003cf565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016457600080fd5b81516001600160401b03808211156200018157620001816200013c565b604051601f8301601f19908116603f01168101908282118183101715620001ac57620001ac6200013c565b81604052838152602092508683858801011115620001c957600080fd5b600091505b83821015620001ed5785820183015181830184015290820190620001ce565b600093810190920192909252949350505050565b6000806000606084860312156200021757600080fd5b835160208501519093506001600160401b03808211156200023757600080fd5b620002458783880162000152565b935060408601519150808211156200025c57600080fd5b506200026b8682870162000152565b9150509250925092565b600181811c908216806200028a57607f821691505b602082108103620002ab57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013757600081815260208120601f850160051c81016020861015620002da5750805b601f850160051c820191505b81811015620002fb57828155600101620002e6565b505050505050565b81516001600160401b038111156200031f576200031f6200013c565b620003378162000330845462000275565b84620002b1565b602080601f8311600181146200036f5760008415620003565750858301515b600019600386901b1c1916600185901b178555620002fb565b600085815260208120601f198616915b82811015620003a0578886015182559484019460019091019084016200037f565b5085821015620003bf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003f157634e487b7160e01b600052601160045260246000fd5b92915050565b61085280620004076000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051600681526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220efe6415e90792d0cf044032b100c1fdb039304f0a71def77d3c85fb83a1e0e4764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051600681526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220efe6415e90792d0cf044032b100c1fdb039304f0a71def77d3c85fb83a1e0e4764736f6c63430008120033\",\n  \"devdoc\": {\n    \"events\": {\n      \"Approval(address,address,uint256)\": {\n        \"details\": \"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"\n      },\n      \"Transfer(address,address,uint256)\": {\n        \"details\": \"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"allowance(address,address)\": {\n        \"details\": \"See {IERC20-allowance}.\"\n      },\n      \"approve(address,uint256)\": {\n        \"details\": \"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"\n      },\n      \"balanceOf(address)\": {\n        \"details\": \"See {IERC20-balanceOf}.\"\n      },\n      \"decimals()\": {\n        \"details\": \"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"\n      },\n      \"decreaseAllowance(address,uint256)\": {\n        \"details\": \"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"\n      },\n      \"increaseAllowance(address,uint256)\": {\n        \"details\": \"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"\n      },\n      \"name()\": {\n        \"details\": \"Returns the name of the token.\"\n      },\n      \"symbol()\": {\n        \"details\": \"Returns the symbol of the token, usually a shorter version of the name.\"\n      },\n      \"totalSupply()\": {\n        \"details\": \"See {IERC20-totalSupply}.\"\n      },\n      \"transfer(address,uint256)\": {\n        \"details\": \"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"\n      },\n      \"transferFrom(address,address,uint256)\": {\n        \"details\": \"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 128,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_balances\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 134,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_allowances\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_address,t_uint256))\"\n      },\n      {\n        \"astId\": 136,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_totalSupply\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 138,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 140,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_symbol\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_string_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_uint256))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => uint256))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_uint256)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/VenmoManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x3566E24242a0B9D291adB9071711615662e17C8A\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xa9af4277cfd8b44f497b06a79a7e87f5152d46fbe0defc72e80936a2d72110d4\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x3566E24242a0B9D291adB9071711615662e17C8A\",\n    \"transactionIndex\": 27,\n    \"gasUsed\": \"242659\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000020000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000020000020000000000000000000800000000000000000000000000000000400000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x118044fd881c2461e835755922f5de90aeef81a21cb946759ef7e83639a0b22f\",\n    \"transactionHash\": \"0xa9af4277cfd8b44f497b06a79a7e87f5152d46fbe0defc72e80936a2d72110d4\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 27,\n        \"blockNumber\": 10176683,\n        \"transactionHash\": \"0xa9af4277cfd8b44f497b06a79a7e87f5152d46fbe0defc72e80936a2d72110d4\",\n        \"address\": \"0x3566E24242a0B9D291adB9071711615662e17C8A\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 102,\n        \"blockHash\": \"0x118044fd881c2461e835755922f5de90aeef81a21cb946759ef7e83639a0b22f\"\n      }\n    ],\n    \"blockNumber\": 10176683,\n    \"cumulativeGasUsed\": \"5095026\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f04018ca3672426744531c5b0e9c8cda\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setMailserverKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":\\\"ManagedKeyHashAdapter\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./IKeyHashAdapter.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n\\\\n    bytes32 public mailserverKeyHash;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32 _mailserverKeyHash\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x348720e86ab8fd55374953f267d674884f0cbfd3a612859dae5988363bd71c5c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161034338038061034383398101604081905261002f91610090565b61003833610040565b6001556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b61028b806100b86000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9189,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"mailserverKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_bytes32\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/VenmoManagedKeyHashAdapterV2.json",
    "content": "{\n  \"address\": \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x23bc7a9d9decfa1212d03f146b552efeab66ae8cdf057090046e8f2da2e60242\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n    \"transactionIndex\": 92,\n    \"gasUsed\": \"563417\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000040000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000080000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000004000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xdb315412bef88028f195bded5bc31047200009da9e5b824147ace0a16c99b955\",\n    \"transactionHash\": \"0x23bc7a9d9decfa1212d03f146b552efeab66ae8cdf057090046e8f2da2e60242\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 92,\n        \"blockNumber\": 10275356,\n        \"transactionHash\": \"0x23bc7a9d9decfa1212d03f146b552efeab66ae8cdf057090046e8f2da2e60242\",\n        \"address\": \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 37,\n        \"blockHash\": \"0xdb315412bef88028f195bded5bc31047200009da9e5b824147ace0a16c99b955\"\n      }\n    ],\n    \"blockNumber\": 10275356,\n    \"cumulativeGasUsed\": \"6419622\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"20e2dd243dc355ae5f984256d33e4969\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3574,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/VenmoRampV2.json",
    "content": "{\n  \"address\": \"0xfD04fb0538479ad70DFae539c875B2C180205012\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountVenmoIdHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x61e43e3e7ea40ab014dd91f326974502461a792d227d6d25da51b8082b832286\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xfD04fb0538479ad70DFae539c875B2C180205012\",\n    \"transactionIndex\": 384,\n    \"gasUsed\": \"3786199\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000060000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x85681c6a69c14b8d3f958f06bbda3680909a4ea0a6eafbf605b5672b729532b8\",\n    \"transactionHash\": \"0x61e43e3e7ea40ab014dd91f326974502461a792d227d6d25da51b8082b832286\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 384,\n        \"blockNumber\": 10279957,\n        \"transactionHash\": \"0x61e43e3e7ea40ab014dd91f326974502461a792d227d6d25da51b8082b832286\",\n        \"address\": \"0xfD04fb0538479ad70DFae539c875B2C180205012\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 158,\n        \"blockHash\": \"0x85681c6a69c14b8d3f958f06bbda3680909a4ea0a6eafbf605b5672b729532b8\"\n      },\n      {\n        \"transactionIndex\": 384,\n        \"blockNumber\": 10279957,\n        \"transactionHash\": \"0x61e43e3e7ea40ab014dd91f326974502461a792d227d6d25da51b8082b832286\",\n        \"address\": \"0xfD04fb0538479ad70DFae539c875B2C180205012\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 159,\n        \"blockHash\": \"0x85681c6a69c14b8d3f958f06bbda3680909a4ea0a6eafbf605b5672b729532b8\"\n      }\n    ],\n    \"blockNumber\": 10279957,\n    \"cumulativeGasUsed\": \"22339056\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0x9916fec54D428bAf38d43B9D91ac968b8DDA51Bd\",\n    \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n    \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n    \"20000000\",\n    \"999000000\",\n    \"86400\",\n    \"180\",\n    \"1000000000000000\",\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"8704d78b2acb3413578e4ecb20a5b51d\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountVenmoIdHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":\\\"VenmoRampV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55cb1c9701d9b03ff4e445f03993659c7d3b6922ad280d3b2a88edfad8af9fed\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRamp } from \\\\\\\"./interfaces/IRamp.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRampV2 is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IRamp _ramp,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        ramp = _ramp;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessorV2 _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return AccountInfo({\\\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\\\n            deposits: accounts[_account].deposits\\\\n        });\\\\n    }\\\\n\\\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\\\n            ramp.getAccountInfo(_account).venmoIdHash :\\\\n            accounts[_account].venmoIdHash;\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessorV2.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x31d951a54e9ee26add105192a274d2ac15bb52f74205f008d10189277d397da5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ramp } from \\\\\\\"../../venmo-v1/Ramp.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRamp {\\\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xffaff7b2fe82cb5756f2c472987d6cfd157312da87a355f21ef7aaf62df27161\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b5060405162004366380380620043668339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0388811660805289811660c05287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c05161406e620002f8600039600081816102f50152612159015260008181610628015261112801526000818161039a0152818161146601528181611ac101528181612bb30152612c62015261406e6000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d366004613532565b61073a565b6040519081526020015b60405180910390f35b6102a26102c3366004613532565b610762565b6102db6102d6366004613532565b610788565b005b6102db6102eb366004613556565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db610346366004613556565b610914565b6102db610359366004613556565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db61039036600461356f565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca366004613556565b610f39565b6103e26103dd366004613532565b610fda565b6040516102ac91906135a8565b6102db6103fd3660046135ec565b611053565b6102db610410366004613693565b6110e6565b6102a260095481565b61043161042c366004613532565b611522565b6040516102ac91906137e1565b6102db61044c366004613556565b61175e565b6102a260075481565b6102db610468366004613556565b6117fd565b6102db61047b366004613885565b611943565b6102db611b36565b610431610496366004613885565b611b4a565b6104ae6104a9366004613532565b611d1e565b6040516102ac919061391a565b6000546001600160a01b0316610317565b6105156104da366004613556565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db610556366004613556565b611dbd565b6102db610569366004613556565b611e54565b61058161057c366004613556565b611f58565b6040516102ac9190613972565b6102a2600a5481565b6105de6105a5366004613556565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e366004613532565b612046565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a2610658366004613532565b6120fe565b6102db61066b366004613a24565b6121d0565b6102db61067e366004613556565b61228a565b600c54610317906001600160a01b031681565b6102db6106a4366004613adb565b6123bb565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b50565b612443565b6040516102ac9190613bc4565b6102db6106fc366004613532565b612593565b600254610317906001600160a01b031681565b6102db610722366004613532565b6125e9565b610372610735366004613c54565b612662565b600060036000610749846120fe565b8152602001908152602001600020600101549050919050565b600060036000610771846120fe565b815260208101919091526040016000205492915050565b61079061269d565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f0336120fe565b036108165760405162461bcd60e51b815260040161080d90613c80565b60405180910390fd5b6000610821336120fe565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c61269d565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a961269d565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e9336120fe565b03610a065760405162461bcd60e51b815260040161080d90613c80565b6000610a11336120fe565b6000858152600560205260408120805492935091610a37906001600160a01b03166120fe565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613ccd565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b84886126f7565b90508583600501541015610e0057600080610d6589612762565b9150915087818660050154610d7a9190613ccd565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc98583612909565b80856005016000828254610ddd9190613ccd565b9250508190555080856006016000828254610df89190613ce0565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613ce0565b9250508190555085836006016000828254610ec29190613ccd565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f4161269d565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe9846120fe565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b61269d565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f1336120fe565b0361110e5760405162461bcd60e51b815260040161080d90613c80565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613cf3565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d01565b9050806111aa336120fe565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d1a565b6113479190613d47565b600d8054919250600091908261135c83613d5b565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe918301906003613378565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133b6565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613d74565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a4613625565b6040519080825280602002602001820160405280156115dd57816020015b6115ca6133f0565b8152602001906001900390816115c25790505b50915060005b815181101561175757600082828151811061160057611600613d96565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612762565b91505060405180606001604052808481526020018381526020018284606001516117239190613ccd565b81525086858151811061173857611738613d96565b60200260200101819052505050508061175090613d5b565b90506115e3565b5050919050565b61176661269d565b66b1a2bc2ec500008111156117c85760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661187d5760405162461bcd60e51b815260040161080d90613dac565b80546001600160a01b031633146118d65760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118e0818461296b565b81606001518160060160008282546118f89190613ce0565b92505081905550426003600061191185600001516120fe565b815260200190815260200160002060010181905550611934826040015182612a63565b61193e8383612b56565b505050565b6000805b8251811015611aa457600083828151811061196457611964613d96565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119dc5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119e884612762565b915091506119f68383612909565b808360050154611a069190613ccd565b611a109087613ccd565b955080836006016000828254611a269190613ce0565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a6d908590613ccd565b60405190815260200160405180910390a360006005840155611a8f8484612a63565b5050505080611a9d90613d5b565b9050611947565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193e9190613d74565b611b3e61269d565b611b486000612d34565b565b606081516001600160401b03811115611b6557611b65613625565b604051908082528060200260200182016040528015611b9e57816020015b611b8b6133f0565b815260200190600190039081611b835790505b50905060005b8251811015611d18576000838281518110611bc157611bc1613d96565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c1157505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611ca457602002820191906000526020600020905b815481526020019060010190808311611c90575b50505050508152505090506000611cba83612762565b9150506040518060600160405280848152602001838152602001828460600151611ce49190613ccd565b815250858581518110611cf957611cf9613d96565b602002602001018190525050505080611d1190613d5b565b9050611ba4565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d47846120fe565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dae57602002820191906000526020600020905b815481526020019060010190808311611d9a575b50505050508152509050919050565b611dc561269d565b80600003611e1f5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e5f336120fe565b03611e7c5760405162461bcd60e51b815260040161080d90613c80565b6000611e87336120fe565b6000818152600360208181526040808420878552909201905290205490915060ff16611eec5760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f229060020183612d84565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f60613417565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fa35750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561203657602002820191906000526020600020905b815481526020019060010190808311612022575b5050505050815250509050919050565b61204e61269d565b6001600160a01b0381166120b05760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561213a576001600160a01b0382166000908152600460205260409020546121ca565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121c89190810190613ddb565b515b92915050565b60006121db336120fe565b146122385760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061224685858585612ead565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122ff5760405162461bcd60e51b815260040161080d90613dac565b612308336120fe565b8151612313906120fe565b146123605760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061237b818461296b565b81606001518160050160008282546123939190613ccd565b909155505060608201516006820180546000906123b1908490613ce0565b9091555050505050565b60008060006123cc87878787612f4d565b9250925092506123dc828261296b565b82606001518260060160008282546123f49190613ce0565b92505081905550426003600061240d86600001516120fe565b815260200190815260200160002060010181905550612430836040015183612a63565b61243a8184612b56565b50505050505050565b60606000826001600160401b0381111561245f5761245f613625565b60405190808252806020026020018201604052801561249857816020015b612485613463565b81526020019060019003908161247d5790505b50905060005b8381101561258b5760008585838181106124ba576124ba613d96565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061253957612539613d96565b90506020020135815260200182815260200161255883600001516120fe565b81525084848151811061256d5761256d613d96565b602002602001018190525050508061258490613d5b565b905061249e565b509392505050565b61259b61269d565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6125f161269d565b6001600160a01b0381166126565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61265f81612d34565b50565b600060036000612671856120fe565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061275a7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613ea9565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127bf57602002820191906000526020600020905b8154815260200190600101908083116127ab575b5050505050905080516001600160401b038111156127df576127df613625565b604051908082528060200260200182016040528015612808578160200160208202803683370190505b50925060005b81518110156129025760006006600084848151811061282f5761282f613d96565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128a291613ccd565b10156128f1578282815181106128ba576128ba613d96565b60200260200101518583815181106128d4576128d4613d96565b602090810291909101015260608101516128ee9085613ccd565b93505b506128fb81613d5b565b905061280e565b5050915091565b60005b815181101561193e576000801b82828151811061292b5761292b613d96565b60200260200101511461295b5761295b8383838151811061294e5761294e613d96565b602002602001015161296b565b61296481613d5b565b905061290c565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129d2906120fe565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a2e6008840183612d84565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a799190613ccd565b90508060000361193e5781546001600160a01b03166000908152600460205260409020612aa99060010184613220565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b4f919061348b565b5050505050565b6000600b54600014612c2257670de0b6b3a7640000600b548360600151612b7d9190613d1a565b612b879190613d47565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c209190613d74565b505b6000818360600151612c349190613ce0565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccf9190613d74565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612de084805480602002602001604051908101604052809291908181526020018280548015612dd557602002820191906000526020600020905b815481526020019060010190808311612dc1575b5050505050846132c5565b9150915080612e295760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e3a90600190613ce0565b9050808314612e7f57848181548110612e5557612e55613d96565b9060005260206000200154858481548110612e7257612e72613d96565b6000918252602090912001555b84805480612e8f57612e8f613ebd565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f0091600401613f24565b6020604051808303816000875af1158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f439190613d01565b9695505050505050565b612f556134a9565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fb19190600401613f93565b60a0604051808303816000875af1158015612fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff49190613ff8565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130805760405162461bcd60e51b815260040161080d90613dac565b85826080015111156130df5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b805485906130f5906001600160a01b03166120fe565b146131425760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b8361315083600001516120fe565b1461319d5760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131ba9190613d1a565b6131c49190613d47565b87101561320c5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b60008061327c8480548060200260200160405190810160405280929190818152602001828054801561327157602002820191906000526020600020905b81548152602001906001019080831161325d575b505050505084613328565b9150915080612e295760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b8181101561331557848682815181106132e9576132e9613d96565b602002602001015103613303579250600191506133219050565b8061330d81613d5b565b9150506132ce565b50600019600092509250505b9250929050565b81516000908190815b81811015613315578486828151811061334c5761334c613d96565b602002602001015103613366579250600191506133219050565b8061337081613d5b565b915050613331565b82600381019282156133a6579160200282015b828111156133a657825182559160200191906001019061338b565b506133b29291506134ea565b5090565b8280548282559060005260206000209081019282156133a657916020028201828111156133a657825182559160200191906001019061338b565b60405180606001604052806000815260200161340a613417565b8152602001600081525090565b6040518060e0016040528060006001600160a01b0316815260200161343a6134ff565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b6040805160608101909152600081526020810161347e6134a9565b8152600060209091015290565b508054600082559060005260206000209081019061265f91906134ea565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133b257600081556001016134eb565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461265f57600080fd5b60006020828403121561354457600080fd5b813561354f8161351d565b9392505050565b60006020828403121561356857600080fd5b5035919050565b60008060006060848603121561358457600080fd5b8335925060208401359150604084013561359d8161351d565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156135e0578351835292840192918401916001016135c4565b50909695505050505050565b600080604083850312156135ff57600080fd5b823561360a8161351d565b9150602083013561361a8161351d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561365d5761365d613625565b60405290565b604051601f8201601f191681016001600160401b038111828210171561368b5761368b613625565b604052919050565b600080600060a084860312156136a857600080fd5b84601f8501126136b757600080fd5b604051606081018181106001600160401b03821117156136d9576136d9613625565b6040528060608601878111156136ee57600080fd5b865b818110156137085780358352602092830192016136f0565b5091979135965050608094909401359392505050565b8060005b6003811015612ea7578151845260209384019390910190600101613722565b600061012080840160018060a01b0384511685526020808501516137678288018261371e565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137d557835185529382019392820192600191909101906137b5565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561385457603f19898403018552815160608151855288820151818a87015261383682870182613741565b92890151958901959095525094870194925090860190600101613808565b509098975050505050505050565b60006001600160401b0382111561387b5761387b613625565b5060051b60200190565b6000602080838503121561389857600080fd5b82356001600160401b038111156138ae57600080fd5b8301601f810185136138bf57600080fd5b80356138d26138cd82613862565b613663565b81815260059190911b820183019083810190878311156138f157600080fd5b928401925b8284101561390f578335825292840192908401906138f6565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156139675783518252928401926001929092019190840190613947565b509695505050505050565b60208152600061354f6020830184613741565b600082601f83011261399657600080fd5b61399e61363b565b8060408401858111156139b057600080fd5b845b818110156139ca5780358452602093840193016139b2565b509095945050505050565b600082601f8301126139e657600080fd5b6139ee61363b565b806080840185811115613a0057600080fd5b845b818110156139ca57613a148782613985565b8452602090930192604001613a02565b6000806000806101a0808688031215613a3c57600080fd5b613a468787613985565b9450613a5587604088016139d5565b9350613a648760c08801613985565b92508661011f870112613a7657600080fd5b60405160a081018181106001600160401b0382111715613a9857613a98613625565b604052908601908088831115613aad57600080fd5b61010088015b83811015613acb578035825260209182019101613ab3565b5050809250505092959194509250565b600080600080610280808688031215613af357600080fd5b613afd8787613985565b9450613b0c87604088016139d5565b9350613b1b8760c08801613985565b92508661011f870112613b2d57600080fd5b60405161018081018181106001600160401b0382111715613a9857613a98613625565b60008060208385031215613b6357600080fd5b82356001600160401b0380821115613b7a57600080fd5b818501915085601f830112613b8e57600080fd5b813581811115613b9d57600080fd5b8660208260051b8501011115613bb257600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c47578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613be1565b5091979650505050505050565b60008060408385031215613c6757600080fd5b8235613c728161351d565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ca576121ca613cb7565b818103818111156121ca576121ca613cb7565b606081016121ca828461371e565b600060208284031215613d1357600080fd5b5051919050565b80820281158282048414176121ca576121ca613cb7565b634e487b7160e01b600052601260045260246000fd5b600082613d5657613d56613d31565b500490565b600060018201613d6d57613d6d613cb7565b5060010190565b600060208284031215613d8657600080fd5b8151801515811461354f57600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613dee57600080fd5b82516001600160401b0380821115613e0557600080fd5b9084019060408287031215613e1957600080fd5b613e2161363b565b825181528383015182811115613e3657600080fd5b80840193505086601f840112613e4b57600080fd5b82519150613e5b6138cd83613862565b82815260059290921b83018401918481019088841115613e7a57600080fd5b938501935b83851015613e9857845182529385019390850190613e7f565b948201949094529695505050505050565b600082613eb857613eb8613d31565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ea7578151845260209384019390910190600101613ed7565b8060005b6002811015612ea757613f0e848351613ed3565b6040939093019260209190910190600101613efa565b60006101a082019050613f38828451613ed3565b602080840151613f4b6040850182613ef6565b506040840151613f5e60c0850182613ed3565b506060840151610100840160005b6005811015613f8957825182529183019190830190600101613f6c565b5050505092915050565b600061028082019050613fa7828451613ed3565b602080840151613fba6040850182613ef6565b506040840151613fcd60c0850182613ed3565b506060840151610100840160005b600c811015613f8957825182529183019190830190600101613fdb565b600080600080600060a0868803121561401057600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea264697066735822122053bbb9601d248b6917b7d9defbec9421dd6e4c522a2e072ad0ab478cc9d2cd3664736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d366004613532565b61073a565b6040519081526020015b60405180910390f35b6102a26102c3366004613532565b610762565b6102db6102d6366004613532565b610788565b005b6102db6102eb366004613556565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db610346366004613556565b610914565b6102db610359366004613556565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db61039036600461356f565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca366004613556565b610f39565b6103e26103dd366004613532565b610fda565b6040516102ac91906135a8565b6102db6103fd3660046135ec565b611053565b6102db610410366004613693565b6110e6565b6102a260095481565b61043161042c366004613532565b611522565b6040516102ac91906137e1565b6102db61044c366004613556565b61175e565b6102a260075481565b6102db610468366004613556565b6117fd565b6102db61047b366004613885565b611943565b6102db611b36565b610431610496366004613885565b611b4a565b6104ae6104a9366004613532565b611d1e565b6040516102ac919061391a565b6000546001600160a01b0316610317565b6105156104da366004613556565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db610556366004613556565b611dbd565b6102db610569366004613556565b611e54565b61058161057c366004613556565b611f58565b6040516102ac9190613972565b6102a2600a5481565b6105de6105a5366004613556565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e366004613532565b612046565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a2610658366004613532565b6120fe565b6102db61066b366004613a24565b6121d0565b6102db61067e366004613556565b61228a565b600c54610317906001600160a01b031681565b6102db6106a4366004613adb565b6123bb565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b50565b612443565b6040516102ac9190613bc4565b6102db6106fc366004613532565b612593565b600254610317906001600160a01b031681565b6102db610722366004613532565b6125e9565b610372610735366004613c54565b612662565b600060036000610749846120fe565b8152602001908152602001600020600101549050919050565b600060036000610771846120fe565b815260208101919091526040016000205492915050565b61079061269d565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f0336120fe565b036108165760405162461bcd60e51b815260040161080d90613c80565b60405180910390fd5b6000610821336120fe565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c61269d565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a961269d565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e9336120fe565b03610a065760405162461bcd60e51b815260040161080d90613c80565b6000610a11336120fe565b6000858152600560205260408120805492935091610a37906001600160a01b03166120fe565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613ccd565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b84886126f7565b90508583600501541015610e0057600080610d6589612762565b9150915087818660050154610d7a9190613ccd565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc98583612909565b80856005016000828254610ddd9190613ccd565b9250508190555080856006016000828254610df89190613ce0565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613ce0565b9250508190555085836006016000828254610ec29190613ccd565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f4161269d565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe9846120fe565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b61269d565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f1336120fe565b0361110e5760405162461bcd60e51b815260040161080d90613c80565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613cf3565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d01565b9050806111aa336120fe565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d1a565b6113479190613d47565b600d8054919250600091908261135c83613d5b565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe918301906003613378565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133b6565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613d74565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a4613625565b6040519080825280602002602001820160405280156115dd57816020015b6115ca6133f0565b8152602001906001900390816115c25790505b50915060005b815181101561175757600082828151811061160057611600613d96565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612762565b91505060405180606001604052808481526020018381526020018284606001516117239190613ccd565b81525086858151811061173857611738613d96565b60200260200101819052505050508061175090613d5b565b90506115e3565b5050919050565b61176661269d565b66b1a2bc2ec500008111156117c85760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661187d5760405162461bcd60e51b815260040161080d90613dac565b80546001600160a01b031633146118d65760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118e0818461296b565b81606001518160060160008282546118f89190613ce0565b92505081905550426003600061191185600001516120fe565b815260200190815260200160002060010181905550611934826040015182612a63565b61193e8383612b56565b505050565b6000805b8251811015611aa457600083828151811061196457611964613d96565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119dc5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119e884612762565b915091506119f68383612909565b808360050154611a069190613ccd565b611a109087613ccd565b955080836006016000828254611a269190613ce0565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a6d908590613ccd565b60405190815260200160405180910390a360006005840155611a8f8484612a63565b5050505080611a9d90613d5b565b9050611947565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193e9190613d74565b611b3e61269d565b611b486000612d34565b565b606081516001600160401b03811115611b6557611b65613625565b604051908082528060200260200182016040528015611b9e57816020015b611b8b6133f0565b815260200190600190039081611b835790505b50905060005b8251811015611d18576000838281518110611bc157611bc1613d96565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c1157505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611ca457602002820191906000526020600020905b815481526020019060010190808311611c90575b50505050508152505090506000611cba83612762565b9150506040518060600160405280848152602001838152602001828460600151611ce49190613ccd565b815250858581518110611cf957611cf9613d96565b602002602001018190525050505080611d1190613d5b565b9050611ba4565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d47846120fe565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dae57602002820191906000526020600020905b815481526020019060010190808311611d9a575b50505050508152509050919050565b611dc561269d565b80600003611e1f5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e5f336120fe565b03611e7c5760405162461bcd60e51b815260040161080d90613c80565b6000611e87336120fe565b6000818152600360208181526040808420878552909201905290205490915060ff16611eec5760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f229060020183612d84565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f60613417565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fa35750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561203657602002820191906000526020600020905b815481526020019060010190808311612022575b5050505050815250509050919050565b61204e61269d565b6001600160a01b0381166120b05760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561213a576001600160a01b0382166000908152600460205260409020546121ca565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121c89190810190613ddb565b515b92915050565b60006121db336120fe565b146122385760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061224685858585612ead565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122ff5760405162461bcd60e51b815260040161080d90613dac565b612308336120fe565b8151612313906120fe565b146123605760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061237b818461296b565b81606001518160050160008282546123939190613ccd565b909155505060608201516006820180546000906123b1908490613ce0565b9091555050505050565b60008060006123cc87878787612f4d565b9250925092506123dc828261296b565b82606001518260060160008282546123f49190613ce0565b92505081905550426003600061240d86600001516120fe565b815260200190815260200160002060010181905550612430836040015183612a63565b61243a8184612b56565b50505050505050565b60606000826001600160401b0381111561245f5761245f613625565b60405190808252806020026020018201604052801561249857816020015b612485613463565b81526020019060019003908161247d5790505b50905060005b8381101561258b5760008585838181106124ba576124ba613d96565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061253957612539613d96565b90506020020135815260200182815260200161255883600001516120fe565b81525084848151811061256d5761256d613d96565b602002602001018190525050508061258490613d5b565b905061249e565b509392505050565b61259b61269d565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6125f161269d565b6001600160a01b0381166126565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61265f81612d34565b50565b600060036000612671856120fe565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061275a7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613ea9565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127bf57602002820191906000526020600020905b8154815260200190600101908083116127ab575b5050505050905080516001600160401b038111156127df576127df613625565b604051908082528060200260200182016040528015612808578160200160208202803683370190505b50925060005b81518110156129025760006006600084848151811061282f5761282f613d96565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128a291613ccd565b10156128f1578282815181106128ba576128ba613d96565b60200260200101518583815181106128d4576128d4613d96565b602090810291909101015260608101516128ee9085613ccd565b93505b506128fb81613d5b565b905061280e565b5050915091565b60005b815181101561193e576000801b82828151811061292b5761292b613d96565b60200260200101511461295b5761295b8383838151811061294e5761294e613d96565b602002602001015161296b565b61296481613d5b565b905061290c565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129d2906120fe565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a2e6008840183612d84565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a799190613ccd565b90508060000361193e5781546001600160a01b03166000908152600460205260409020612aa99060010184613220565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b4f919061348b565b5050505050565b6000600b54600014612c2257670de0b6b3a7640000600b548360600151612b7d9190613d1a565b612b879190613d47565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c209190613d74565b505b6000818360600151612c349190613ce0565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccf9190613d74565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612de084805480602002602001604051908101604052809291908181526020018280548015612dd557602002820191906000526020600020905b815481526020019060010190808311612dc1575b5050505050846132c5565b9150915080612e295760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e3a90600190613ce0565b9050808314612e7f57848181548110612e5557612e55613d96565b9060005260206000200154858481548110612e7257612e72613d96565b6000918252602090912001555b84805480612e8f57612e8f613ebd565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f0091600401613f24565b6020604051808303816000875af1158015612f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f439190613d01565b9695505050505050565b612f556134a9565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fb19190600401613f93565b60a0604051808303816000875af1158015612fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff49190613ff8565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130805760405162461bcd60e51b815260040161080d90613dac565b85826080015111156130df5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b805485906130f5906001600160a01b03166120fe565b146131425760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b8361315083600001516120fe565b1461319d5760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131ba9190613d1a565b6131c49190613d47565b87101561320c5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b60008061327c8480548060200260200160405190810160405280929190818152602001828054801561327157602002820191906000526020600020905b81548152602001906001019080831161325d575b505050505084613328565b9150915080612e295760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b8181101561331557848682815181106132e9576132e9613d96565b602002602001015103613303579250600191506133219050565b8061330d81613d5b565b9150506132ce565b50600019600092509250505b9250929050565b81516000908190815b81811015613315578486828151811061334c5761334c613d96565b602002602001015103613366579250600191506133219050565b8061337081613d5b565b915050613331565b82600381019282156133a6579160200282015b828111156133a657825182559160200191906001019061338b565b506133b29291506134ea565b5090565b8280548282559060005260206000209081019282156133a657916020028201828111156133a657825182559160200191906001019061338b565b60405180606001604052806000815260200161340a613417565b8152602001600081525090565b6040518060e0016040528060006001600160a01b0316815260200161343a6134ff565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b6040805160608101909152600081526020810161347e6134a9565b8152600060209091015290565b508054600082559060005260206000209081019061265f91906134ea565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133b257600081556001016134eb565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461265f57600080fd5b60006020828403121561354457600080fd5b813561354f8161351d565b9392505050565b60006020828403121561356857600080fd5b5035919050565b60008060006060848603121561358457600080fd5b8335925060208401359150604084013561359d8161351d565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156135e0578351835292840192918401916001016135c4565b50909695505050505050565b600080604083850312156135ff57600080fd5b823561360a8161351d565b9150602083013561361a8161351d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561365d5761365d613625565b60405290565b604051601f8201601f191681016001600160401b038111828210171561368b5761368b613625565b604052919050565b600080600060a084860312156136a857600080fd5b84601f8501126136b757600080fd5b604051606081018181106001600160401b03821117156136d9576136d9613625565b6040528060608601878111156136ee57600080fd5b865b818110156137085780358352602092830192016136f0565b5091979135965050608094909401359392505050565b8060005b6003811015612ea7578151845260209384019390910190600101613722565b600061012080840160018060a01b0384511685526020808501516137678288018261371e565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137d557835185529382019392820192600191909101906137b5565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561385457603f19898403018552815160608151855288820151818a87015261383682870182613741565b92890151958901959095525094870194925090860190600101613808565b509098975050505050505050565b60006001600160401b0382111561387b5761387b613625565b5060051b60200190565b6000602080838503121561389857600080fd5b82356001600160401b038111156138ae57600080fd5b8301601f810185136138bf57600080fd5b80356138d26138cd82613862565b613663565b81815260059190911b820183019083810190878311156138f157600080fd5b928401925b8284101561390f578335825292840192908401906138f6565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156139675783518252928401926001929092019190840190613947565b509695505050505050565b60208152600061354f6020830184613741565b600082601f83011261399657600080fd5b61399e61363b565b8060408401858111156139b057600080fd5b845b818110156139ca5780358452602093840193016139b2565b509095945050505050565b600082601f8301126139e657600080fd5b6139ee61363b565b806080840185811115613a0057600080fd5b845b818110156139ca57613a148782613985565b8452602090930192604001613a02565b6000806000806101a0808688031215613a3c57600080fd5b613a468787613985565b9450613a5587604088016139d5565b9350613a648760c08801613985565b92508661011f870112613a7657600080fd5b60405160a081018181106001600160401b0382111715613a9857613a98613625565b604052908601908088831115613aad57600080fd5b61010088015b83811015613acb578035825260209182019101613ab3565b5050809250505092959194509250565b600080600080610280808688031215613af357600080fd5b613afd8787613985565b9450613b0c87604088016139d5565b9350613b1b8760c08801613985565b92508661011f870112613b2d57600080fd5b60405161018081018181106001600160401b0382111715613a9857613a98613625565b60008060208385031215613b6357600080fd5b82356001600160401b0380821115613b7a57600080fd5b818501915085601f830112613b8e57600080fd5b813581811115613b9d57600080fd5b8660208260051b8501011115613bb257600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c47578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613be1565b5091979650505050505050565b60008060408385031215613c6757600080fd5b8235613c728161351d565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ca576121ca613cb7565b818103818111156121ca576121ca613cb7565b606081016121ca828461371e565b600060208284031215613d1357600080fd5b5051919050565b80820281158282048414176121ca576121ca613cb7565b634e487b7160e01b600052601260045260246000fd5b600082613d5657613d56613d31565b500490565b600060018201613d6d57613d6d613cb7565b5060010190565b600060208284031215613d8657600080fd5b8151801515811461354f57600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613dee57600080fd5b82516001600160401b0380821115613e0557600080fd5b9084019060408287031215613e1957600080fd5b613e2161363b565b825181528383015182811115613e3657600080fd5b80840193505086601f840112613e4b57600080fd5b82519150613e5b6138cd83613862565b82815260059290921b83018401918481019088841115613e7a57600080fd5b938501935b83851015613e9857845182529385019390850190613e7f565b948201949094529695505050505050565b600082613eb857613eb8613d31565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ea7578151845260209384019390910190600101613ed7565b8060005b6002811015612ea757613f0e848351613ed3565b6040939093019260209190910190600101613efa565b60006101a082019050613f38828451613ed3565b602080840151613f4b6040850182613ef6565b506040840151613f5e60c0850182613ed3565b506060840151610100840160005b6005811015613f8957825182529183019190830190600101613f6c565b5050505092915050565b600061028082019050613fa7828451613ed3565b602080840151613fba6040850182613ef6565b506040840151613fcd60c0850182613ed3565b506060840151610100840160005b600c811015613f8957825182529183019190830190600101613fdb565b600080600080600060a0868803121561401057600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea264697066735822122053bbb9601d248b6917b7d9defbec9421dd6e4c522a2e072ad0ab478cc9d2cd3664736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5454,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessorV2)7433\"\n      },\n      {\n        \"astId\": 5457,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)5206\"\n      },\n      {\n        \"astId\": 5459,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 5464,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)5413_storage)\"\n      },\n      {\n        \"astId\": 5469,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)5352_storage)\"\n      },\n      {\n        \"astId\": 5474,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)5370_storage)\"\n      },\n      {\n        \"astId\": 5479,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)5389_storage)\"\n      },\n      {\n        \"astId\": 5481,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5483,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5485,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5487,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5489,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 5491,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5493,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessorV2)7433\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessorV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)5206\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)5352_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct VenmoRampV2.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)5352_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)5413_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)5413_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)5389_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)5389_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)5370_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct VenmoRampV2.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)5370_storage\"\n      },\n      \"t_struct(AccountInfo)5352_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 5348,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5351,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)5405_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 5400,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 5404,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)5370_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 5354,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 5358,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 5360,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 5362,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 5364,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 5366,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 5369,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)5413_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 5407,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 5409,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 5412,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)5405_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)5389_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Intent\",\n        \"members\": [\n          {\n            \"astId\": 5380,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 5382,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 5384,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 5386,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 5388,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/VenmoRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0xCe2328d025fc779a144C7899b1462Cd3660A2EB2\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x591b33bcee1d4790b42937fd25e5274f1ced5610c1e5c19916c6a6b368f1047a\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xCe2328d025fc779a144C7899b1462Cd3660A2EB2\",\n    \"transactionIndex\": 18,\n    \"gasUsed\": \"1470600\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000001000000000000020000000000000000000000000000000000004000000000000000000000000000000\",\n    \"blockHash\": \"0xca36537918b90ebbf2f8cb7bce3bb34db48793d3fd91d02314bec4b6ab8685b7\",\n    \"transactionHash\": \"0x591b33bcee1d4790b42937fd25e5274f1ced5610c1e5c19916c6a6b368f1047a\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 18,\n        \"blockNumber\": 10176685,\n        \"transactionHash\": \"0x591b33bcee1d4790b42937fd25e5274f1ced5610c1e5c19916c6a6b368f1047a\",\n        \"address\": \"0xCe2328d025fc779a144C7899b1462Cd3660A2EB2\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 65,\n        \"blockHash\": \"0xca36537918b90ebbf2f8cb7bce3bb34db48793d3fd91d02314bec4b6ab8685b7\"\n      }\n    ],\n    \"blockNumber\": 10176685,\n    \"cumulativeGasUsed\": \"4336566\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x9916fec54D428bAf38d43B9D91ac968b8DDA51Bd\",\n    \"0x3566E24242a0B9D291adB9071711615662e17C8A\",\n    \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f04018ca3672426744531c5b0e9c8cda\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/VenmoRegistrationProcessor.sol\\\":\\\"VenmoRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/VenmoRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"./BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"../interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        view\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x645b79a0384d43f2377b4eef122c3768c74891a81afff855f1cc48840b538c9c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\\\n    \\\\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\\\n    \\\\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\\\n    \\\\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\\\n    \\\\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\\\n    \\\\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xe75e7981040431d65fa54187d75ef19b77cded328e050458c5921256be2d6d2d\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001b5e38038062001b5e833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516117b7620003a76000396000818160f4015261022b01526117b76000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220c37304a5850f0d98f58c41f8f0556acf17acc66166d0212dec997b906584df2364736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220c37304a5850f0d98f58c41f8f0556acf17acc66166d0212dec997b906584df2364736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 7713,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)9151\"\n      },\n      {\n        \"astId\": 7716,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)9382\"\n      },\n      {\n        \"astId\": 7718,\n        \"contract\": \"contracts/processors/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)9151\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)9382\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/VenmoRegistrationProcessorV2.json",
    "content": "{\n  \"address\": \"0xcE2f93E2f05Fc4B65E771e5b982d0dbD41cE307D\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessorV2.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x9669b3dbe264c718136c5418d0e7dade8be7f12102ab52f50687b191e33632a8\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xcE2f93E2f05Fc4B65E771e5b982d0dbD41cE307D\",\n    \"transactionIndex\": 30,\n    \"gasUsed\": \"1556850\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000001000000000000000000000000000000000000020000000000000000000c00000000000000000000000000000000400000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x53ae71a0f06f53491cc9c025c4f892cc87108ea6598c62e507e7894bb0566401\",\n    \"transactionHash\": \"0x9669b3dbe264c718136c5418d0e7dade8be7f12102ab52f50687b191e33632a8\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 30,\n        \"blockNumber\": 10279958,\n        \"transactionHash\": \"0x9669b3dbe264c718136c5418d0e7dade8be7f12102ab52f50687b191e33632a8\",\n        \"address\": \"0xcE2f93E2f05Fc4B65E771e5b982d0dbD41cE307D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 101,\n        \"blockHash\": \"0x53ae71a0f06f53491cc9c025c4f892cc87108ea6598c62e507e7894bb0566401\"\n      }\n    ],\n    \"blockNumber\": 10279958,\n    \"cumulativeGasUsed\": \"9145471\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xfD04fb0538479ad70DFae539c875B2C180205012\",\n    \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n    \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"9f5b84b5a4484299f202298c88bacb39\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessorV2.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":\\\"VenmoRegistrationProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x85ec4f2b6130ed9f6c91e6a5874ba0a3df09992147056c2010a88fd7be519c82\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x88085eae1bcc8f71df06940add24aeb14512390d6f5b30100621f5bce5bfe5d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\\\n    \\\\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\\\n    \\\\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\\\n    \\\\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\\\n    \\\\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\\\n    \\\\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xe75e7981040431d65fa54187d75ef19b77cded328e050458c5921256be2d6d2d\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001ced38038062001ced833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611946620003a76000396000818160f4015261023601526119466000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a8ef333f1161008c578063ced1e97811610066578063ced1e978146101e8578063d0b71f99146101f0578063f2fde38b14610203578063f6c7226b1461021657600080fd5b8063a8ef333f146101ad578063b870676c146101c0578063c0d05fed146101d357600080fd5b806334baeab9116100c857806334baeab9146101775780633d0c9cc41461018a578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806319d0915214610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611394565b610229565b60405190815260200161012a565b6101676101623660046113ad565b61048b565b604051901515815260200161012a565b6101676101853660046113d7565b6104ff565b610146600781565b61019a610ad4565b005b6000546001600160a01b0316610116565b600154610116906001600160a01b031681565b600254610116906001600160a01b031681565b6101db610ae8565b60405161012a9190611461565b6101db610b76565b61019a6101fe3660046114a9565b610c08565b61019a6102113660046114a9565b610c32565b61019a6102243660046114e3565b610ca8565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102db9186919082019060c08301906101008401906004016115be565b602060405180830381865afa1580156102f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031c91906115ef565b6103585760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161029f565b61036661010083013561048b565b6103b25760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161029f565b60006103c5836101000160016004610cc0565b905060036040516103d6919061165b565b6040518091039020816040516020016103ef91906116d1565b60405160208183030381529060405280519060200120146104525760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161029f565b6104818360405160200161046691906116ed565b60405160208183030381529060405280519060200120610d9b565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f991906115ef565b92915050565b6000610a62565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610537576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161056d576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061059e576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661064287357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461053a565b61069260208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461053a565b6106e260408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461053a565b61073260608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461053a565b61078260808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461053a565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a7a6000840135610506565b610a876020840135610506565b610a946040840135610506565b610aa16060840135610506565b610aae6080840135610506565b610abb60a0840135610506565b610ac8818486888a6105a5565b90508060005260206000f35b610adc610eaf565b610ae66000610f09565b565b60038054610af590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2190611627565b8015610b6e5780601f10610b4357610100808354040283529160200191610b6e565b820191906000526020600020905b815481529060010190602001808311610b5157829003601f168201915b505050505081565b606060038054610b8590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb190611627565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b610c10610eaf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c3a610eaf565b6001600160a01b038116610c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161029f565b61053781610f09565b610cb0610eaf565b6003610cbc8282611774565b5050565b60606000610cce848461184a565b60ff1667ffffffffffffffff811115610ce957610ce96114cd565b604051908082528060200260200182016040528015610d12578160200160208202803683370190505b50905060ff84165b8360ff16811015610d7757858160058110610d3757610d37611611565b602002013582610d4a60ff881684611863565b81518110610d5a57610d5a611611565b602090810291909101015280610d6f81611876565b915050610d1a565b50610d9260078251610d89919061188f565b82906007610f59565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0891906115ef565b15610e555760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161029f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610e9b57600080fd5b505af115801561059e573d6000803e3d6000fd5b6000546001600160a01b03163314610ae65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610f6b919061188f565b67ffffffffffffffff811115610f8357610f836114cd565b6040519080825280601f01601f191660200182016040528015610fad576020820181803683370190505b5090506000805b87518161ffff161015611164576000888261ffff1681518110610fd957610fd9611611565b6020026020010151905060008767ffffffffffffffff811115610ffe57610ffe6114cd565b604051908082528060200260200182016040528015611027578160200160208202803683370190505b50905060005b888110156110795761104081600861188f565b83901c82828151811061105557611055611611565b60ff909216602092830291909101909101528061107181611876565b91505061102d565b5060005b8881101561114e57600082828151811061109957611099611611565b602002602001015160ff16905080600014611111578060f81b8787815181106110c4576110c4611611565b60200101906001600160f81b031916908160001a905350856110e581611876565b96506110f490506002896118a6565b60ff1660000361110c576111096001896118d6565b97505b611134565b61111c6002896118a6565b60ff16600103611134576111316001896118d6565b97505b5060089290921c918061114681611876565b91505061107d565b505050808061115c906118ef565b915050610fb4565b5060018360ff1610156112055760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161029f565b858111156112735760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161029f565b600061127e8361128a565b98975050505050505050565b8051606090829060005b82518110156112df578281815181106112af576112af611611565b01602001516001600160f81b0319166000036112cd578091506112df565b806112d781611876565b915050611294565b5060008167ffffffffffffffff8111156112fb576112fb6114cd565b6040519080825280601f01601f191660200182016040528015611325576020820181803683370190505b50905060005b8281101561138b5783818151811061134557611345611611565b602001015160f81c60f81b82828151811061136257611362611611565b60200101906001600160f81b031916908160001a9053508061138381611876565b91505061132b565b50949350505050565b60006101a082840312156113a757600080fd5b50919050565b6000602082840312156113bf57600080fd5b5035919050565b80604081018310156104f957600080fd5b6000806000806101a08086880312156113ef57600080fd5b6113f987876113c6565b945060c086018781111561140c57600080fd5b60408701945061141c88826113c6565b93505086818701111561142e57600080fd5b50929591945092610100019150565b60005b83811015611458578181015183820152602001611440565b50506000910152565b602081526000825180602084015261148081604085016020870161143d565b601f01601f19169190910160400192915050565b6001600160a01b038116811461053757600080fd5b6000602082840312156114bb57600080fd5b81356114c681611494565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156114f557600080fd5b813567ffffffffffffffff8082111561150d57600080fd5b818401915084601f83011261152157600080fd5b813581811115611533576115336114cd565b604051601f8201601f19908116603f0116810190838211818310171561155b5761155b6114cd565b8160405282815287602084870101111561157457600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115b857604080838637938401939190910190600101611598565b50505050565b6101a0810160408683376115d56040830186611594565b60408460c084013760a08361010084013795945050505050565b60006020828403121561160157600080fd5b815180151581146114c657600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061163b57607f821691505b6020821081036113a757634e487b7160e01b600052602260045260246000fd5b600080835461166981611627565b600182811680156116815760018114611696576116c5565b60ff19841687528215158302870194506116c5565b8760005260208060002060005b858110156116bc5781548a8201529084019082016116a3565b50505082870194505b50929695505050505050565b600082516116e381846020870161143d565b9190910192915050565b6101a0810160408383376117076040830160408501611594565b604060c0840160c084013761010060a0818501828501375092915050565b601f82111561176f57600081815260208120601f850160051c8101602086101561174c5750805b601f850160051c820191505b8181101561176b57828155600101611758565b5050505b505050565b815167ffffffffffffffff81111561178e5761178e6114cd565b6117a28161179c8454611627565b84611725565b602080601f8311600181146117d757600084156117bf5750858301515b600019600386901b1c1916600185901b17855561176b565b600085815260208120601f198616915b82811015611806578886015182559484019460019091019084016117e7565b50858210156118245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156104f9576104f9611834565b818103818111156104f9576104f9611834565b60006001820161188857611888611834565b5060010190565b80820281158282048414176104f9576104f9611834565b600060ff8316806118c757634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156104f9576104f9611834565b600061ffff80831681810361190657611906611834565b600101939250505056fea2646970667358221220d236c6c1f3f34f233a008eaa48578eef326b9e16605b71df53ae3528459c194d64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a8ef333f1161008c578063ced1e97811610066578063ced1e978146101e8578063d0b71f99146101f0578063f2fde38b14610203578063f6c7226b1461021657600080fd5b8063a8ef333f146101ad578063b870676c146101c0578063c0d05fed146101d357600080fd5b806334baeab9116100c857806334baeab9146101775780633d0c9cc41461018a578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806319d0915214610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611394565b610229565b60405190815260200161012a565b6101676101623660046113ad565b61048b565b604051901515815260200161012a565b6101676101853660046113d7565b6104ff565b610146600781565b61019a610ad4565b005b6000546001600160a01b0316610116565b600154610116906001600160a01b031681565b600254610116906001600160a01b031681565b6101db610ae8565b60405161012a9190611461565b6101db610b76565b61019a6101fe3660046114a9565b610c08565b61019a6102113660046114a9565b610c32565b61019a6102243660046114e3565b610ca8565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102db9186919082019060c08301906101008401906004016115be565b602060405180830381865afa1580156102f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031c91906115ef565b6103585760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161029f565b61036661010083013561048b565b6103b25760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161029f565b60006103c5836101000160016004610cc0565b905060036040516103d6919061165b565b6040518091039020816040516020016103ef91906116d1565b60405160208183030381529060405280519060200120146104525760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161029f565b6104818360405160200161046691906116ed565b60405160208183030381529060405280519060200120610d9b565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f991906115ef565b92915050565b6000610a62565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610537576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161056d576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061059e576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661064287357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461053a565b61069260208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461053a565b6106e260408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461053a565b61073260608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461053a565b61078260808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461053a565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a7a6000840135610506565b610a876020840135610506565b610a946040840135610506565b610aa16060840135610506565b610aae6080840135610506565b610abb60a0840135610506565b610ac8818486888a6105a5565b90508060005260206000f35b610adc610eaf565b610ae66000610f09565b565b60038054610af590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2190611627565b8015610b6e5780601f10610b4357610100808354040283529160200191610b6e565b820191906000526020600020905b815481529060010190602001808311610b5157829003601f168201915b505050505081565b606060038054610b8590611627565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb190611627565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b610c10610eaf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c3a610eaf565b6001600160a01b038116610c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161029f565b61053781610f09565b610cb0610eaf565b6003610cbc8282611774565b5050565b60606000610cce848461184a565b60ff1667ffffffffffffffff811115610ce957610ce96114cd565b604051908082528060200260200182016040528015610d12578160200160208202803683370190505b50905060ff84165b8360ff16811015610d7757858160058110610d3757610d37611611565b602002013582610d4a60ff881684611863565b81518110610d5a57610d5a611611565b602090810291909101015280610d6f81611876565b915050610d1a565b50610d9260078251610d89919061188f565b82906007610f59565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0891906115ef565b15610e555760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161029f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610e9b57600080fd5b505af115801561059e573d6000803e3d6000fd5b6000546001600160a01b03163314610ae65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610f6b919061188f565b67ffffffffffffffff811115610f8357610f836114cd565b6040519080825280601f01601f191660200182016040528015610fad576020820181803683370190505b5090506000805b87518161ffff161015611164576000888261ffff1681518110610fd957610fd9611611565b6020026020010151905060008767ffffffffffffffff811115610ffe57610ffe6114cd565b604051908082528060200260200182016040528015611027578160200160208202803683370190505b50905060005b888110156110795761104081600861188f565b83901c82828151811061105557611055611611565b60ff909216602092830291909101909101528061107181611876565b91505061102d565b5060005b8881101561114e57600082828151811061109957611099611611565b602002602001015160ff16905080600014611111578060f81b8787815181106110c4576110c4611611565b60200101906001600160f81b031916908160001a905350856110e581611876565b96506110f490506002896118a6565b60ff1660000361110c576111096001896118d6565b97505b611134565b61111c6002896118a6565b60ff16600103611134576111316001896118d6565b97505b5060089290921c918061114681611876565b91505061107d565b505050808061115c906118ef565b915050610fb4565b5060018360ff1610156112055760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161029f565b858111156112735760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161029f565b600061127e8361128a565b98975050505050505050565b8051606090829060005b82518110156112df578281815181106112af576112af611611565b01602001516001600160f81b0319166000036112cd578091506112df565b806112d781611876565b915050611294565b5060008167ffffffffffffffff8111156112fb576112fb6114cd565b6040519080825280601f01601f191660200182016040528015611325576020820181803683370190505b50905060005b8281101561138b5783818151811061134557611345611611565b602001015160f81c60f81b82828151811061136257611362611611565b60200101906001600160f81b031916908160001a9053508061138381611876565b91505061132b565b50949350505050565b60006101a082840312156113a757600080fd5b50919050565b6000602082840312156113bf57600080fd5b5035919050565b80604081018310156104f957600080fd5b6000806000806101a08086880312156113ef57600080fd5b6113f987876113c6565b945060c086018781111561140c57600080fd5b60408701945061141c88826113c6565b93505086818701111561142e57600080fd5b50929591945092610100019150565b60005b83811015611458578181015183820152602001611440565b50506000910152565b602081526000825180602084015261148081604085016020870161143d565b601f01601f19169190910160400192915050565b6001600160a01b038116811461053757600080fd5b6000602082840312156114bb57600080fd5b81356114c681611494565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156114f557600080fd5b813567ffffffffffffffff8082111561150d57600080fd5b818401915084601f83011261152157600080fd5b813581811115611533576115336114cd565b604051601f8201601f19908116603f0116810190838211818310171561155b5761155b6114cd565b8160405282815287602084870101111561157457600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115b857604080838637938401939190910190600101611598565b50505050565b6101a0810160408683376115d56040830186611594565b60408460c084013760a08361010084013795945050505050565b60006020828403121561160157600080fd5b815180151581146114c657600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061163b57607f821691505b6020821081036113a757634e487b7160e01b600052602260045260246000fd5b600080835461166981611627565b600182811680156116815760018114611696576116c5565b60ff19841687528215158302870194506116c5565b8760005260208060002060005b858110156116bc5781548a8201529084019082016116a3565b50505082870194505b50929695505050505050565b600082516116e381846020870161143d565b9190910192915050565b6101a0810160408383376117076040830160408501611594565b604060c0840160c084013761010060a0818501828501375092915050565b601f82111561176f57600081815260208120601f850160051c8101602086101561174c5750805b601f850160051c820191505b8181101561176b57828155600101611758565b5050505b505050565b815167ffffffffffffffff81111561178e5761178e6114cd565b6117a28161179c8454611627565b84611725565b602080601f8311600181146117d757600084156117bf5750858301515b600019600386901b1c1916600185901b17855561176b565b600085815260208120601f198616915b82811015611806578886015182559484019460019091019084016117e7565b50858210156118245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156104f9576104f9611834565b818103818111156104f9576104f9611834565b60006001820161188857611888611834565b5060010190565b80820281158282048414176104f9576104f9611834565b600060ff8316806118c757634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156104f9576104f9611834565b600061ffff80831681810361190657611906611834565b600101939250505056fea2646970667358221220d236c6c1f3f34f233a008eaa48578eef326b9e16605b71df53ae3528459c194d64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3509\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3714\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3509\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3714\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/VenmoSendProcessor.json",
    "content": "{\n  \"address\": \"0xE231f5127859683C0FCb8eE5eBFfBdA1359b30Bb\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xba0f04dc1067f58d29ce871e33e8cbf0c4e3c381fadbc7901b701dd08fc0b98b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xE231f5127859683C0FCb8eE5eBFfBdA1359b30Bb\",\n    \"transactionIndex\": 36,\n    \"gasUsed\": \"1859214\",\n    \"logsBloom\": \"0x00000000000000000000000000000000001000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000040000000000000\",\n    \"blockHash\": \"0x818926e6e07e6c7939d2e538c6a826b09ef12f28cbdcbc967968a4770c93ed27\",\n    \"transactionHash\": \"0xba0f04dc1067f58d29ce871e33e8cbf0c4e3c381fadbc7901b701dd08fc0b98b\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 36,\n        \"blockNumber\": 10176686,\n        \"transactionHash\": \"0xba0f04dc1067f58d29ce871e33e8cbf0c4e3c381fadbc7901b701dd08fc0b98b\",\n        \"address\": \"0xE231f5127859683C0FCb8eE5eBFfBdA1359b30Bb\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 86,\n        \"blockHash\": \"0x818926e6e07e6c7939d2e538c6a826b09ef12f28cbdcbc967968a4770c93ed27\"\n      }\n    ],\n    \"blockNumber\": 10176686,\n    \"cumulativeGasUsed\": \"10717838\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x9916fec54D428bAf38d43B9D91ac968b8DDA51Bd\",\n    \"0x3566E24242a0B9D291adB9071711615662e17C8A\",\n    \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"f04018ca3672426744531c5b0e9c8cda\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/VenmoSendProcessor.sol\\\":\\\"VenmoSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/VenmoSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"./BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../verifiers/venmo_send_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70d57e9a07e2db041569362549e16a2f53a08a63a7ff92aaee69d1f71c0f5569\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\\\n    \\\\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\\\n    \\\\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\\\n    \\\\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\\\n    \\\\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\\\n    \\\\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\\\n    \\\\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\\\n    \\\\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\\\n    \\\\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\\\n    \\\\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\\\n    \\\\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\\\n    \\\\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\\\n    \\\\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xb757585b2fbeabdb975afef07753da27f657d8d34bd62130109e2d0bf28e0e63\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b506040516200226438038062002264833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611ebd620003a76000396000818160f40152610ad30152611ebd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea264697066735822122060e273e631a640e1a2688422df10630835f30b547a3f9da61c2c1867e1788c7064736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea264697066735822122060e273e631a640e1a2688422df10630835f30b547a3f9da61c2c1867e1788c7064736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 7713,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)9151\"\n      },\n      {\n        \"astId\": 7716,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)9382\"\n      },\n      {\n        \"astId\": 7718,\n        \"contract\": \"contracts/processors/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)9151\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)9382\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/VenmoSendProcessorV2.json",
    "content": "{\n  \"address\": \"0x3C754B95F72Aeb2447244402155779A8B69f3d70\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb66a6022b1a1842caace2093c9cf079f3068a497030935401ac510c49baa2bb9\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x3C754B95F72Aeb2447244402155779A8B69f3d70\",\n    \"transactionIndex\": 26,\n    \"gasUsed\": \"1861393\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000200000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000100000000\",\n    \"blockHash\": \"0x8318a838e82a8e5e69839e4550923ffc0defd5f6711859ce37e37f940ab6260e\",\n    \"transactionHash\": \"0xb66a6022b1a1842caace2093c9cf079f3068a497030935401ac510c49baa2bb9\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 26,\n        \"blockNumber\": 10279959,\n        \"transactionHash\": \"0xb66a6022b1a1842caace2093c9cf079f3068a497030935401ac510c49baa2bb9\",\n        \"address\": \"0x3C754B95F72Aeb2447244402155779A8B69f3d70\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 40,\n        \"blockHash\": \"0x8318a838e82a8e5e69839e4550923ffc0defd5f6711859ce37e37f940ab6260e\"\n      }\n    ],\n    \"blockNumber\": 10279959,\n    \"cumulativeGasUsed\": \"4558928\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xfD04fb0538479ad70DFae539c875B2C180205012\",\n    \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n    \"0x113472f45b22df297f811FdeDC1B03d0e7fb32B6\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"9f5b84b5a4484299f202298c88bacb39\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":\\\"VenmoSendProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x85ec4f2b6130ed9f6c91e6a5874ba0a3df09992147056c2010a88fd7be519c82\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_send_verifier_v2.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfaa20e09f7a19b4b0f193aea94698feeb4ffb5dc041d5e6dd7629a3a91a3cc8a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier_v2.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 4244199450261939264855608361292422830494076317114087381524682052624987594898;\\\\n    uint256 constant IC0y = 19645046663091251713731947178298410964505911169469312617571077810087266152857;\\\\n    \\\\n    uint256 constant IC1x = 8174035567318043885708495283345132428559378659325609203776402978017320167293;\\\\n    uint256 constant IC1y = 14468913963303826866215469807518170784403093656434266017779773880257875040240;\\\\n    \\\\n    uint256 constant IC2x = 1616603017751755006393562987905285502270823546542543926944627007410237341389;\\\\n    uint256 constant IC2y = 19363001402611389684892375352655759926342431445082754246958964085276938403807;\\\\n    \\\\n    uint256 constant IC3x = 18206398417831844023515176703806764449138507779128726420915001707110434960674;\\\\n    uint256 constant IC3y = 15788322487150289973315668363845259348952014356217153206401112660482394149984;\\\\n    \\\\n    uint256 constant IC4x = 5556506419684194840114638678281266193177223336781663103282498332205775709966;\\\\n    uint256 constant IC4y = 3612832929973582572292953270578481883198123808328242543078950263985599193867;\\\\n    \\\\n    uint256 constant IC5x = 12215062759329544988171802286780059092087193981868301475398051148747302789508;\\\\n    uint256 constant IC5y = 1980305058569746313443850675062124742589110071159814897086099250727381686120;\\\\n    \\\\n    uint256 constant IC6x = 3493933421620238986193524740698678015926658911199434587596433896655331481231;\\\\n    uint256 constant IC6y = 7459045126206245262756783739697871731196375298112634212173672404853831309786;\\\\n    \\\\n    uint256 constant IC7x = 10740551677743158382441062386501298848646053145865823442847610791968594528289;\\\\n    uint256 constant IC7y = 21657167241153225314135589387079002708587418842864077521693977210968021048721;\\\\n    \\\\n    uint256 constant IC8x = 20536476234797263831643189740064053117160337195791856385892992834482370287512;\\\\n    uint256 constant IC8y = 18258699057873865588245369435578918571756469704183085011165098139074862434543;\\\\n    \\\\n    uint256 constant IC9x = 18293662353150822330749373485066335943093182919888710919053977794688677443843;\\\\n    uint256 constant IC9y = 3365197130606871938439382259561012622230793791152518122576869893531830020051;\\\\n    \\\\n    uint256 constant IC10x = 10464268927660994961936771610761322397633069758803976833400107641287034964420;\\\\n    uint256 constant IC10y = 15896600235017903857295002971756639107391153447838560723402307560050234141111;\\\\n    \\\\n    uint256 constant IC11x = 19786751484513045884347111989063082084450406057425687794673931698452346081044;\\\\n    uint256 constant IC11y = 5313251178585910055977156446218999699936391470697302222575669547157687947710;\\\\n    \\\\n    uint256 constant IC12x = 1684055055646723719894355280156760702291183222236626601663480311877006377437;\\\\n    uint256 constant IC12y = 14613128874599604159663378872994588938053027721510091765805321127316501622056;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xc12743a5968a6abc15d09038662ad2ac388c31db79cbfde927de20be40a175d5\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b506040516200226e3803806200226e833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611ec7620003a76000396000818160f40152610b530152611ec76000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a8ef333f1161008c578063ced1e97811610066578063ced1e97814610210578063d0b71f9914610218578063f2fde38b1461022b578063f6c7226b1461023e57600080fd5b8063a8ef333f146101d5578063b870676c146101e8578063c0d05fed146101fb57600080fd5b8063715018a6116100c8578063715018a61461016c5780638cbac0fa146101765780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef57806319d09152146101335780633d0c9cc414610156575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611858565b610251565b604051901515815260200161012a565b61015e600781565b60405190815260200161012a565b6101746102c5565b005b610146610184366004611882565b6102d9565b6000546001600160a01b0316610116565b6101ad6101a83660046118e8565b610b42565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b600154610116906001600160a01b031681565b600254610116906001600160a01b031681565b610203610dd6565b60405161012a9190611925565b610203610e64565b61017461022636600461196d565b610ef6565b61017461023936600461196d565b610f20565b61017461024c3660046119a7565b610f96565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa15801561029b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102bf9190611a58565b92915050565b6102cd610fae565b6102d76000611008565b565b6000610a70565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610311576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610347576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610378576000805260206000f35b5050505050565b7f096221bb0e7a8eaf8963066e14d77e007c1b41ac88c07085b577d840ea52209285527f2b6eb3cf21fed60c49a21a94dcba73c09193df7e5aa621a276de66741f1cf19960208601526000608086018661041c87357f1ffd1d76aa1f13b9a610899f29a8b52f6556a80865d90d3922fc66114d4057f07f1212571605b7f7323508112a3f35aa53291795994286718175da962f5fa8e77d84610314565b61046c60208801357f2acf1206fbbd0b60ef9ec7f5ce67095f9b63b66bac7cbb82da2c0ab1a910ffdf7f0392f702910fbfc9bfcda7b8fb5215391897aad1f5aa50b56f89f9bd9d3bfecd84610314565b6104bc60408801357f22e7dfb4c8a36f5e2b153ed73955b414fcbbfab38cdd5991095b2c31dab7d4607f284074d1eed0f85be6b8ae22bac6bbaf21d7669a7eab79770f145f757dfd752284610314565b61050c60608801357f07fcca7d40ad0faac562df449227eb785b283154890f2d1e94d5fb331054a30b7f0c48df05e1dc49be31da09dadb89e36d384430493675e1647d18d9f8eeede70e84610314565b61055c60808801357f0460d01d08eb7b6f8c83ad5336b315ceac780fb440378144c630192bcd80d7687f1b017b032debdb460c919843336c66363321764ba56e59ff363d78803f08618484610314565b6105ac60a08801357f107dab809a922337b880650ddd808a8c2ca23fa5ad7256d3a8084d261ef119da7f07b97f09602b581c06fadb8459c5cc024119db5c539fd305ec59958dc1f3568f84610314565b6105fc60c08801357f2fe185b35f9ecb6b75a770a25d4b3bf57cacb7ebd83c719f1f59b3bbcdd69d917f17beefd372d81f40179b5cb2e10c625bb7fbc8fc6f07f89fc01fa6f522d9082184610314565b61064c60e08801357f285e0eb47d7b5dff4606dbbbae590e62a04eb27608d3994cbc5628f5b916c8ef7f2d673bcfa2b41acd750b2c15b8858ca8e511edf5055da10a55a9e11e9180979884610314565b61069d6101008801357f0770a252f38397fedfc26d3955968808b12c12621b31a9df543ab136ec6367d37f2871d8913066353532e0242f2019a65f05f0e11b4035c86f4256794397f5f90384610314565b6106ee6101208801357f23252829aadfa727567c2f81b6b7de98394a9cccdfed890c426ef14c6e36a9b77f172290fab07447cb1933e87f9e33cf1c3bb9f07aa179b63c3e5bb61a1fc289c484610314565b61073f6101408801357f0bbf318f8480279293fd63359dc797d228ce7bd67e25fac2325f4132ccb8d1be7f2bbee78b15b4f70a253609b9be3450180f383f1caf3bb76ee3f2eac25b028f1484610314565b6107906101608801357f204ebce3064778de73aeed88b4d8bb9e499d6f1e7660a5d917f076ba1854ed287f03b92431b47b95afdb985882996bc8d72cd9d9c92afc855d2dc1a69cb5f9c1dd84610314565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a8860008401356102e0565b610a9560208401356102e0565b610aa260408401356102e0565b610aaf60608401356102e0565b610abc60808401356102e0565b610ac960a08401356102e0565b610ad660c08401356102e0565b610ae360e08401356102e0565b610af16101008401356102e0565b610aff6101208401356102e0565b610b0d6101408401356102e0565b610b1b6101608401356102e0565b610b296101808401356102e0565b610b36818486888a61037f565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc55760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610bf8918a919082019060c0830190610100840190600401611a7a565b602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190611a58565b610c755760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bbc565b610c83610100870135610251565b610ccf5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bbc565b6000610ce2876101000160016004611058565b90506003604051610cf39190611b11565b604051809103902081604051602001610d0c9190611b87565b6040516020818303038152906040528051906020012014610d6f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bbc565b610d8b6006610d85896101000160046006611058565b90611133565b9550610da36000610d85896101000160066008611058565b945061020087013593506102208701359250610dc3610240880135611309565b5093959294919350916102609091013590565b60038054610de390611add565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0f90611add565b8015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b505050505081565b606060038054610e7390611add565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f90611add565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050905090565b610efe610fae565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f28610fae565b6001600160a01b038116610f8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbc565b61031181611008565b610f9e610fae565b6003610faa8282611bf2565b5050565b6000546001600160a01b031633146102d75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110668484611cc8565b60ff1667ffffffffffffffff81111561108157611081611991565b6040519080825280602002602001820160405280156110aa578160200160208202803683370190505b50905060ff84165b8360ff1681101561110f578581600c81106110cf576110cf611ac7565b6020020135826110e260ff881684611ce1565b815181106110f2576110f2611ac7565b60209081029190910101528061110781611cf4565b9150506110b2565b5061112a600782516111219190611d0d565b8290600761141d565b95945050505050565b600082818080805b845181101561128357603060f81b85828151811061115b5761115b611ac7565b01602001516001600160f81b0319161080159061119c5750603960f81b85828151811061118a5761118a611ac7565b01602001516001600160f81b03191611155b156111df5760308582815181106111b5576111b5611ac7565b01602001516111c7919060f81c611ce1565b6111d285600a611d0d565b6111dc9190611d24565b93505b81156111f357826111ef81611cf4565b9350505b84818151811061120557611205611ac7565b01602001516001600160f81b031916601760f91b0361127157811561126c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bbc565b600191505b8061127b81611cf4565b91505061113b565b50858211156112df5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bbc565b6112e98287611ce1565b6112f490600a611e1b565b6112fe9084611d0d565b979650505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113769190611a58565b156113c35760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bbc565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561140957600080fd5b505af1158015610378573d6000803e3d6000fd5b606060008083865161142f9190611d0d565b67ffffffffffffffff81111561144757611447611991565b6040519080825280601f01601f191660200182016040528015611471576020820181803683370190505b5090506000805b87518161ffff161015611628576000888261ffff168151811061149d5761149d611ac7565b6020026020010151905060008767ffffffffffffffff8111156114c2576114c2611991565b6040519080825280602002602001820160405280156114eb578160200160208202803683370190505b50905060005b8881101561153d57611504816008611d0d565b83901c82828151811061151957611519611ac7565b60ff909216602092830291909101909101528061153581611cf4565b9150506114f1565b5060005b8881101561161257600082828151811061155d5761155d611ac7565b602002602001015160ff169050806000146115d5578060f81b87878151811061158857611588611ac7565b60200101906001600160f81b031916908160001a905350856115a981611cf4565b96506115b89050600289611e27565b60ff166000036115d0576115cd600189611e57565b97505b6115f8565b6115e0600289611e27565b60ff166001036115f8576115f5600189611e57565b97505b5060089290921c918061160a81611cf4565b915050611541565b505050808061162090611e70565b915050611478565b5060018360ff1610156116c95760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bbc565b858111156117375760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bbc565b60006117428361174e565b98975050505050505050565b8051606090829060005b82518110156117a35782818151811061177357611773611ac7565b01602001516001600160f81b031916600003611791578091506117a3565b8061179b81611cf4565b915050611758565b5060008167ffffffffffffffff8111156117bf576117bf611991565b6040519080825280601f01601f1916602001820160405280156117e9576020820181803683370190505b50905060005b8281101561184f5783818151811061180957611809611ac7565b602001015160f81c60f81b82828151811061182657611826611ac7565b60200101906001600160f81b031916908160001a9053508061184781611cf4565b9150506117ef565b50949350505050565b60006020828403121561186a57600080fd5b5035919050565b80604081018310156102bf57600080fd5b60008060008061028080868803121561189a57600080fd5b6118a48787611871565b945060c08601878111156118b757600080fd5b6040870194506118c78882611871565b9350508681870111156118d957600080fd5b50929591945092610100019150565b600061028082840312156118fb57600080fd5b50919050565b60005b8381101561191c578181015183820152602001611904565b50506000910152565b6020815260008251806020840152611944816040850160208701611901565b601f01601f19169190910160400192915050565b6001600160a01b038116811461031157600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156119b957600080fd5b813567ffffffffffffffff808211156119d157600080fd5b818401915084601f8301126119e557600080fd5b8135818111156119f7576119f7611991565b604051601f8201601f19908116603f01168101908382118183101715611a1f57611a1f611991565b81604052828152876020848701011115611a3857600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a6a57600080fd5b8151801515811461198a57600080fd5b61028081016040808784378083018660005b6002811015611aa957838284379183019190830190600101611a8c565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611af157607f821691505b6020821081036118fb57634e487b7160e01b600052602260045260246000fd5b6000808354611b1f81611add565b60018281168015611b375760018114611b4c57611b7b565b60ff1984168752821515830287019450611b7b565b8760005260208060002060005b85811015611b725781548a820152908401908201611b59565b50505082870194505b50929695505050505050565b60008251611b99818460208701611901565b9190910192915050565b601f821115611bed57600081815260208120601f850160051c81016020861015611bca5750805b601f850160051c820191505b81811015611be957828155600101611bd6565b5050505b505050565b815167ffffffffffffffff811115611c0c57611c0c611991565b611c2081611c1a8454611add565b84611ba3565b602080601f831160018114611c555760008415611c3d5750858301515b600019600386901b1c1916600185901b178555611be9565b600085815260208120601f198616915b82811015611c8457888601518255948401946001909101908401611c65565b5085821015611ca25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102bf576102bf611cb2565b818103818111156102bf576102bf611cb2565b600060018201611d0657611d06611cb2565b5060010190565b80820281158282048414176102bf576102bf611cb2565b808201808211156102bf576102bf611cb2565b600181815b80851115611d72578160001904821115611d5857611d58611cb2565b80851615611d6557918102915b93841c9390800290611d3c565b509250929050565b600082611d89575060016102bf565b81611d96575060006102bf565b8160018114611dac5760028114611db657611dd2565b60019150506102bf565b60ff841115611dc757611dc7611cb2565b50506001821b6102bf565b5060208310610133831016604e8410600b8410161715611df5575081810a6102bf565b611dff8383611d37565b8060001904821115611e1357611e13611cb2565b029392505050565b600061198a8383611d7a565b600060ff831680611e4857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102bf576102bf611cb2565b600061ffff808316818103611e8757611e87611cb2565b600101939250505056fea2646970667358221220460a634a6459ba4f5ca5742ca13def5e8a89b1527e18c17412fb2c16cdf833c364736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a8ef333f1161008c578063ced1e97811610066578063ced1e97814610210578063d0b71f9914610218578063f2fde38b1461022b578063f6c7226b1461023e57600080fd5b8063a8ef333f146101d5578063b870676c146101e8578063c0d05fed146101fb57600080fd5b8063715018a6116100c8578063715018a61461016c5780638cbac0fa146101765780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef57806319d09152146101335780633d0c9cc414610156575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611858565b610251565b604051901515815260200161012a565b61015e600781565b60405190815260200161012a565b6101746102c5565b005b610146610184366004611882565b6102d9565b6000546001600160a01b0316610116565b6101ad6101a83660046118e8565b610b42565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b600154610116906001600160a01b031681565b600254610116906001600160a01b031681565b610203610dd6565b60405161012a9190611925565b610203610e64565b61017461022636600461196d565b610ef6565b61017461023936600461196d565b610f20565b61017461024c3660046119a7565b610f96565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa15801561029b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102bf9190611a58565b92915050565b6102cd610fae565b6102d76000611008565b565b6000610a70565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610311576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610347576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa91505080610378576000805260206000f35b5050505050565b7f096221bb0e7a8eaf8963066e14d77e007c1b41ac88c07085b577d840ea52209285527f2b6eb3cf21fed60c49a21a94dcba73c09193df7e5aa621a276de66741f1cf19960208601526000608086018661041c87357f1ffd1d76aa1f13b9a610899f29a8b52f6556a80865d90d3922fc66114d4057f07f1212571605b7f7323508112a3f35aa53291795994286718175da962f5fa8e77d84610314565b61046c60208801357f2acf1206fbbd0b60ef9ec7f5ce67095f9b63b66bac7cbb82da2c0ab1a910ffdf7f0392f702910fbfc9bfcda7b8fb5215391897aad1f5aa50b56f89f9bd9d3bfecd84610314565b6104bc60408801357f22e7dfb4c8a36f5e2b153ed73955b414fcbbfab38cdd5991095b2c31dab7d4607f284074d1eed0f85be6b8ae22bac6bbaf21d7669a7eab79770f145f757dfd752284610314565b61050c60608801357f07fcca7d40ad0faac562df449227eb785b283154890f2d1e94d5fb331054a30b7f0c48df05e1dc49be31da09dadb89e36d384430493675e1647d18d9f8eeede70e84610314565b61055c60808801357f0460d01d08eb7b6f8c83ad5336b315ceac780fb440378144c630192bcd80d7687f1b017b032debdb460c919843336c66363321764ba56e59ff363d78803f08618484610314565b6105ac60a08801357f107dab809a922337b880650ddd808a8c2ca23fa5ad7256d3a8084d261ef119da7f07b97f09602b581c06fadb8459c5cc024119db5c539fd305ec59958dc1f3568f84610314565b6105fc60c08801357f2fe185b35f9ecb6b75a770a25d4b3bf57cacb7ebd83c719f1f59b3bbcdd69d917f17beefd372d81f40179b5cb2e10c625bb7fbc8fc6f07f89fc01fa6f522d9082184610314565b61064c60e08801357f285e0eb47d7b5dff4606dbbbae590e62a04eb27608d3994cbc5628f5b916c8ef7f2d673bcfa2b41acd750b2c15b8858ca8e511edf5055da10a55a9e11e9180979884610314565b61069d6101008801357f0770a252f38397fedfc26d3955968808b12c12621b31a9df543ab136ec6367d37f2871d8913066353532e0242f2019a65f05f0e11b4035c86f4256794397f5f90384610314565b6106ee6101208801357f23252829aadfa727567c2f81b6b7de98394a9cccdfed890c426ef14c6e36a9b77f172290fab07447cb1933e87f9e33cf1c3bb9f07aa179b63c3e5bb61a1fc289c484610314565b61073f6101408801357f0bbf318f8480279293fd63359dc797d228ce7bd67e25fac2325f4132ccb8d1be7f2bbee78b15b4f70a253609b9be3450180f383f1caf3bb76ee3f2eac25b028f1484610314565b6107906101608801357f204ebce3064778de73aeed88b4d8bb9e499d6f1e7660a5d917f076ba1854ed287f03b92431b47b95afdb985882996bc8d72cd9d9c92afc855d2dc1a69cb5f9c1dd84610314565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a8860008401356102e0565b610a9560208401356102e0565b610aa260408401356102e0565b610aaf60608401356102e0565b610abc60808401356102e0565b610ac960a08401356102e0565b610ad660c08401356102e0565b610ae360e08401356102e0565b610af16101008401356102e0565b610aff6101208401356102e0565b610b0d6101408401356102e0565b610b1b6101608401356102e0565b610b296101808401356102e0565b610b36818486888a61037f565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc55760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610bf8918a919082019060c0830190610100840190600401611a7a565b602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190611a58565b610c755760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bbc565b610c83610100870135610251565b610ccf5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bbc565b6000610ce2876101000160016004611058565b90506003604051610cf39190611b11565b604051809103902081604051602001610d0c9190611b87565b6040516020818303038152906040528051906020012014610d6f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bbc565b610d8b6006610d85896101000160046006611058565b90611133565b9550610da36000610d85896101000160066008611058565b945061020087013593506102208701359250610dc3610240880135611309565b5093959294919350916102609091013590565b60038054610de390611add565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0f90611add565b8015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b505050505081565b606060038054610e7390611add565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f90611add565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050905090565b610efe610fae565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f28610fae565b6001600160a01b038116610f8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbc565b61031181611008565b610f9e610fae565b6003610faa8282611bf2565b5050565b6000546001600160a01b031633146102d75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110668484611cc8565b60ff1667ffffffffffffffff81111561108157611081611991565b6040519080825280602002602001820160405280156110aa578160200160208202803683370190505b50905060ff84165b8360ff1681101561110f578581600c81106110cf576110cf611ac7565b6020020135826110e260ff881684611ce1565b815181106110f2576110f2611ac7565b60209081029190910101528061110781611cf4565b9150506110b2565b5061112a600782516111219190611d0d565b8290600761141d565b95945050505050565b600082818080805b845181101561128357603060f81b85828151811061115b5761115b611ac7565b01602001516001600160f81b0319161080159061119c5750603960f81b85828151811061118a5761118a611ac7565b01602001516001600160f81b03191611155b156111df5760308582815181106111b5576111b5611ac7565b01602001516111c7919060f81c611ce1565b6111d285600a611d0d565b6111dc9190611d24565b93505b81156111f357826111ef81611cf4565b9350505b84818151811061120557611205611ac7565b01602001516001600160f81b031916601760f91b0361127157811561126c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bbc565b600191505b8061127b81611cf4565b91505061113b565b50858211156112df5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bbc565b6112e98287611ce1565b6112f490600a611e1b565b6112fe9084611d0d565b979650505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113769190611a58565b156113c35760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bbc565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561140957600080fd5b505af1158015610378573d6000803e3d6000fd5b606060008083865161142f9190611d0d565b67ffffffffffffffff81111561144757611447611991565b6040519080825280601f01601f191660200182016040528015611471576020820181803683370190505b5090506000805b87518161ffff161015611628576000888261ffff168151811061149d5761149d611ac7565b6020026020010151905060008767ffffffffffffffff8111156114c2576114c2611991565b6040519080825280602002602001820160405280156114eb578160200160208202803683370190505b50905060005b8881101561153d57611504816008611d0d565b83901c82828151811061151957611519611ac7565b60ff909216602092830291909101909101528061153581611cf4565b9150506114f1565b5060005b8881101561161257600082828151811061155d5761155d611ac7565b602002602001015160ff169050806000146115d5578060f81b87878151811061158857611588611ac7565b60200101906001600160f81b031916908160001a905350856115a981611cf4565b96506115b89050600289611e27565b60ff166000036115d0576115cd600189611e57565b97505b6115f8565b6115e0600289611e27565b60ff166001036115f8576115f5600189611e57565b97505b5060089290921c918061160a81611cf4565b915050611541565b505050808061162090611e70565b915050611478565b5060018360ff1610156116c95760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bbc565b858111156117375760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bbc565b60006117428361174e565b98975050505050505050565b8051606090829060005b82518110156117a35782818151811061177357611773611ac7565b01602001516001600160f81b031916600003611791578091506117a3565b8061179b81611cf4565b915050611758565b5060008167ffffffffffffffff8111156117bf576117bf611991565b6040519080825280601f01601f1916602001820160405280156117e9576020820181803683370190505b50905060005b8281101561184f5783818151811061180957611809611ac7565b602001015160f81c60f81b82828151811061182657611826611ac7565b60200101906001600160f81b031916908160001a9053508061184781611cf4565b9150506117ef565b50949350505050565b60006020828403121561186a57600080fd5b5035919050565b80604081018310156102bf57600080fd5b60008060008061028080868803121561189a57600080fd5b6118a48787611871565b945060c08601878111156118b757600080fd5b6040870194506118c78882611871565b9350508681870111156118d957600080fd5b50929591945092610100019150565b600061028082840312156118fb57600080fd5b50919050565b60005b8381101561191c578181015183820152602001611904565b50506000910152565b6020815260008251806020840152611944816040850160208701611901565b601f01601f19169190910160400192915050565b6001600160a01b038116811461031157600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156119b957600080fd5b813567ffffffffffffffff808211156119d157600080fd5b818401915084601f8301126119e557600080fd5b8135818111156119f7576119f7611991565b604051601f8201601f19908116603f01168101908382118183101715611a1f57611a1f611991565b81604052828152876020848701011115611a3857600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a6a57600080fd5b8151801515811461198a57600080fd5b61028081016040808784378083018660005b6002811015611aa957838284379183019190830190600101611a8c565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611af157607f821691505b6020821081036118fb57634e487b7160e01b600052602260045260246000fd5b6000808354611b1f81611add565b60018281168015611b375760018114611b4c57611b7b565b60ff1984168752821515830287019450611b7b565b8760005260208060002060005b85811015611b725781548a820152908401908201611b59565b50505082870194505b50929695505050505050565b60008251611b99818460208701611901565b9190910192915050565b601f821115611bed57600081815260208120601f850160051c81016020861015611bca5750805b601f850160051c820191505b81811015611be957828155600101611bd6565b5050505b505050565b815167ffffffffffffffff811115611c0c57611c0c611991565b611c2081611c1a8454611add565b84611ba3565b602080601f831160018114611c555760008415611c3d5750858301515b600019600386901b1c1916600185901b178555611be9565b600085815260208120601f198616915b82811015611c8457888601518255948401946001909101908401611c65565b5085821015611ca25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102bf576102bf611cb2565b818103818111156102bf576102bf611cb2565b600060018201611d0657611d06611cb2565b5060010190565b80820281158282048414176102bf576102bf611cb2565b808201808211156102bf576102bf611cb2565b600181815b80851115611d72578160001904821115611d5857611d58611cb2565b80851615611d6557918102915b93841c9390800290611d3c565b509250929050565b600082611d89575060016102bf565b81611d96575060006102bf565b8160018114611dac5760028114611db657611dd2565b60019150506102bf565b60ff841115611dc757611dc7611cb2565b50506001821b6102bf565b5060208310610133831016604e8410600b8410161715611df5575081810a6102bf565b611dff8383611d37565b8060001904821115611e1357611e13611cb2565b029392505050565b600061198a8383611d7a565b600060ff831680611e4857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102bf576102bf611cb2565b600061ffff808316818103611e8757611e87611cb2565b600101939250505056fea2646970667358221220460a634a6459ba4f5ca5742ca13def5e8a89b1527e18c17412fb2c16cdf833c364736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3509\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3714\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3509\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3714\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/solcInputs/20e2dd243dc355ae5f984256d33e4969.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the idHash\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, , that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 17506601062729203246470310549966876806346595277178622638695894576434523274090;\\n    uint256 constant IC0y = 17604862702797636734943023772103441585855049955213821412975126068788009085970;\\n    \\n    uint256 constant IC1x = 5241799868600518437129648664629191166782058940328354300527912875567714533060;\\n    uint256 constant IC1y = 15270744620080267404245445393908999824585786383818154864348391866165268445453;\\n    \\n    uint256 constant IC2x = 9322658998551228151379532231277641805226903395863035111041965577289983367186;\\n    uint256 constant IC2y = 4279864528397470012468813728240009146912571656771805648927706885337251937886;\\n    \\n    uint256 constant IC3x = 17452376331896564556958287783349437354199198163723047148438896296674662693471;\\n    uint256 constant IC3y = 21268379489172816589914142154319254915980775734742323224380002003384899217201;\\n    \\n    uint256 constant IC4x = 10082473279583916034135807271858019107173858434738732412893120737298721366587;\\n    uint256 constant IC4y = 1620336015479864153329563277525515559868951787497616878950468968134830408661;\\n    \\n    uint256 constant IC5x = 13879052192142034444808241655017630780232481570574976803752781783047195928358;\\n    uint256 constant IC5y = 10353219971192701576846391519817872415954082704046915764391647730656393980888;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 2826088890037430119930760412787323191381769399462820409794056007361294814722;\\n    uint256 constant IC0y = 16511304687589210714068250418425566769935777467055671877286194519705348265437;\\n    \\n    uint256 constant IC1x = 1842633417305311600426629021980037213436085367849770138661153889411058436824;\\n    uint256 constant IC1y = 13584093642479820514931510127233896303245411934362029538258008521576820631870;\\n    \\n    uint256 constant IC2x = 3963821922763711198136636302497123642059766015436875450602036262466261933486;\\n    uint256 constant IC2y = 2741309634437267633467239291807934467120628146138841930493980261145955014125;\\n    \\n    uint256 constant IC3x = 9523860789215927952964278880757054676124334332871934331937487084428006456082;\\n    uint256 constant IC3y = 1841762711904697198291697165753658703483891571189689269687665163009695638957;\\n    \\n    uint256 constant IC4x = 6144256483854967652970118013868250882507064847388329985812397444066891144013;\\n    uint256 constant IC4y = 14065523357042894313549316787133965641674156917121486771443341558010310501655;\\n    \\n    uint256 constant IC5x = 17520604619160630893481019976363469085142761807660608646570466393290236973039;\\n    uint256 constant IC5y = 17472595612642962192641183062029398122960768138813735558841050179800777665786;\\n    \\n    uint256 constant IC6x = 821680568383136699264199387856843509614034384201112341510906936551026224297;\\n    uint256 constant IC6y = 7716040758609494121324972271844709354239348485209858437273370847209012517498;\\n    \\n    uint256 constant IC7x = 3550399336245766022762654624256427964740257177608704148391750033822372660402;\\n    uint256 constant IC7y = 13869092266047212434291707306721208215725647076094496348614626854488814838758;\\n    \\n    uint256 constant IC8x = 16797728206383007311743725420794328123982168048329919984526462601080600905553;\\n    uint256 constant IC8y = 10031311846128909842167455386938464744824849046003256270744077504698848071620;\\n    \\n    uint256 constant IC9x = 9917486629856782296668388250031629726909650162870414354044878276001269506494;\\n    uint256 constant IC9y = 11850969144017696112957824138792005361423951717725935105150913960472363960867;\\n    \\n    uint256 constant IC10x = 11515085580217467690671228633469170934607120435829337744372023352806901545497;\\n    uint256 constant IC10y = 2810184659017728570779116651221387980422884145320046574349357601383091251840;\\n    \\n    uint256 constant IC11x = 8138580599215741119278949265555488395034875459161499346142092177976380888912;\\n    uint256 constant IC11y = 12614819287061637483680805185134657921351626893461537216586964096472077007068;\\n    \\n    uint256 constant IC12x = 5800215063560920851353232183176977899721117666831035340942707162061864386805;\\n    uint256 constant IC12y = 21863235977735095102605178424545156970945923086470669950247451665484979704483;\\n    \\n    uint256 constant IC13x = 3724024194875938775125426178556046800882363514501216922380940797823569024307;\\n    uint256 constant IC13y = 20616921116944293393197156859530717259363980160070906113262234592557417595466;\\n    \\n    uint256 constant IC14x = 14931359143802923452373668434913556516519032955424516421232912161729748196138;\\n    uint256 constant IC14y = 18005266610478789004077634175433619260466631213438696859821580403552802879261;\\n    \\n    uint256 constant IC15x = 991835108522766197705731995579426350869527975977902666402666230277449215213;\\n    uint256 constant IC15y = 7133336965479072801341335708729379443312428202852529971202665221959706336457;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 5553018504240994192142285229371655424882906988402996492594576660281381690349;\\n    uint256 constant IC0y = 11162413034617779074766762458022857724647135095524110813331056049969893509944;\\n    \\n    uint256 constant IC1x = 16233005805632869986661777213409875539676169367361322096358480468466672606561;\\n    uint256 constant IC1y = 10378232944979383786865979921967038162350388199513685725696087035646255798020;\\n    \\n    uint256 constant IC2x = 7118646166649699603908642926704551733194893788979260367153888416127414190893;\\n    uint256 constant IC2y = 2319302268192241896879184586060170938205618374383089567174928015569254256583;\\n    \\n    uint256 constant IC3x = 12999230089461911145804056826289686060787917302405390897975534446011135080702;\\n    uint256 constant IC3y = 7065626680476526382237127732630528952502903307612200744264842545623687065152;\\n    \\n    uint256 constant IC4x = 16549676917639134388172704355271536425623182343629260953465769196378789935428;\\n    uint256 constant IC4y = 8692647580951968308824258572259654968576665598341614079359925049496032791930;\\n    \\n    uint256 constant IC5x = 9487835164740264195436905125063177265644678741430065093178970627432987423347;\\n    uint256 constant IC5y = 11761388892765444679025307229575724051092953405380652106085200754881776345207;\\n    \\n    uint256 constant IC6x = 19532045123544546592521406112487251767663464903327072198698521319101515083306;\\n    uint256 constant IC6y = 6063348309651541111865897421717491910378474207915324596536156761675760381452;\\n    \\n    uint256 constant IC7x = 12985494520420244346979872318441743532765680076860681612240654043191032656979;\\n    uint256 constant IC7y = 14527113063804352017576394024563428298707737685017584207343232458548441344709;\\n    \\n    uint256 constant IC8x = 3619454786460144404697490404346599189450213589304706233107203556470693349992;\\n    uint256 constant IC8y = 10693307452197438976295057326687977795303220711023499612378511347965109418168;\\n    \\n    uint256 constant IC9x = 15796717441417343862011934360133990818137789486475284248257924123279185878903;\\n    uint256 constant IC9y = 1928769557876446933716225703428681647759457355912177905917549968966499989769;\\n    \\n    uint256 constant IC10x = 16822692090540583973150765307462313250537107218577297903599336913270052408471;\\n    uint256 constant IC10y = 19304187684261638848255657938567828200891869550477898557080363121093037901361;\\n    \\n    uint256 constant IC11x = 9546262525278829622151419326162286438990271604601705380870682751891538722934;\\n    uint256 constant IC11y = 10515939111576129485516150463077845221002412641675701092019159336709850679321;\\n    \\n    uint256 constant IC12x = 9791415807360353064484853463522700292817356800094308404088360116609283025477;\\n    uint256 constant IC12y = 8470188484328252367566737686630506375178693809125224667347243000412893900534;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/solcInputs/76890714b227e5b64057f01ecc7e4f3a.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the idHash\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, , that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 17506601062729203246470310549966876806346595277178622638695894576434523274090;\\n    uint256 constant IC0y = 17604862702797636734943023772103441585855049955213821412975126068788009085970;\\n    \\n    uint256 constant IC1x = 5241799868600518437129648664629191166782058940328354300527912875567714533060;\\n    uint256 constant IC1y = 15270744620080267404245445393908999824585786383818154864348391866165268445453;\\n    \\n    uint256 constant IC2x = 9322658998551228151379532231277641805226903395863035111041965577289983367186;\\n    uint256 constant IC2y = 4279864528397470012468813728240009146912571656771805648927706885337251937886;\\n    \\n    uint256 constant IC3x = 17452376331896564556958287783349437354199198163723047148438896296674662693471;\\n    uint256 constant IC3y = 21268379489172816589914142154319254915980775734742323224380002003384899217201;\\n    \\n    uint256 constant IC4x = 10082473279583916034135807271858019107173858434738732412893120737298721366587;\\n    uint256 constant IC4y = 1620336015479864153329563277525515559868951787497616878950468968134830408661;\\n    \\n    uint256 constant IC5x = 13879052192142034444808241655017630780232481570574976803752781783047195928358;\\n    uint256 constant IC5y = 10353219971192701576846391519817872415954082704046915764391647730656393980888;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 2826088890037430119930760412787323191381769399462820409794056007361294814722;\\n    uint256 constant IC0y = 16511304687589210714068250418425566769935777467055671877286194519705348265437;\\n    \\n    uint256 constant IC1x = 1842633417305311600426629021980037213436085367849770138661153889411058436824;\\n    uint256 constant IC1y = 13584093642479820514931510127233896303245411934362029538258008521576820631870;\\n    \\n    uint256 constant IC2x = 3963821922763711198136636302497123642059766015436875450602036262466261933486;\\n    uint256 constant IC2y = 2741309634437267633467239291807934467120628146138841930493980261145955014125;\\n    \\n    uint256 constant IC3x = 9523860789215927952964278880757054676124334332871934331937487084428006456082;\\n    uint256 constant IC3y = 1841762711904697198291697165753658703483891571189689269687665163009695638957;\\n    \\n    uint256 constant IC4x = 6144256483854967652970118013868250882507064847388329985812397444066891144013;\\n    uint256 constant IC4y = 14065523357042894313549316787133965641674156917121486771443341558010310501655;\\n    \\n    uint256 constant IC5x = 17520604619160630893481019976363469085142761807660608646570466393290236973039;\\n    uint256 constant IC5y = 17472595612642962192641183062029398122960768138813735558841050179800777665786;\\n    \\n    uint256 constant IC6x = 821680568383136699264199387856843509614034384201112341510906936551026224297;\\n    uint256 constant IC6y = 7716040758609494121324972271844709354239348485209858437273370847209012517498;\\n    \\n    uint256 constant IC7x = 3550399336245766022762654624256427964740257177608704148391750033822372660402;\\n    uint256 constant IC7y = 13869092266047212434291707306721208215725647076094496348614626854488814838758;\\n    \\n    uint256 constant IC8x = 16797728206383007311743725420794328123982168048329919984526462601080600905553;\\n    uint256 constant IC8y = 10031311846128909842167455386938464744824849046003256270744077504698848071620;\\n    \\n    uint256 constant IC9x = 9917486629856782296668388250031629726909650162870414354044878276001269506494;\\n    uint256 constant IC9y = 11850969144017696112957824138792005361423951717725935105150913960472363960867;\\n    \\n    uint256 constant IC10x = 11515085580217467690671228633469170934607120435829337744372023352806901545497;\\n    uint256 constant IC10y = 2810184659017728570779116651221387980422884145320046574349357601383091251840;\\n    \\n    uint256 constant IC11x = 8138580599215741119278949265555488395034875459161499346142092177976380888912;\\n    uint256 constant IC11y = 12614819287061637483680805185134657921351626893461537216586964096472077007068;\\n    \\n    uint256 constant IC12x = 5800215063560920851353232183176977899721117666831035340942707162061864386805;\\n    uint256 constant IC12y = 21863235977735095102605178424545156970945923086470669950247451665484979704483;\\n    \\n    uint256 constant IC13x = 3724024194875938775125426178556046800882363514501216922380940797823569024307;\\n    uint256 constant IC13y = 20616921116944293393197156859530717259363980160070906113262234592557417595466;\\n    \\n    uint256 constant IC14x = 14931359143802923452373668434913556516519032955424516421232912161729748196138;\\n    uint256 constant IC14y = 18005266610478789004077634175433619260466631213438696859821580403552802879261;\\n    \\n    uint256 constant IC15x = 991835108522766197705731995579426350869527975977902666402666230277449215213;\\n    uint256 constant IC15y = 7133336965479072801341335708729379443312428202852529971202665221959706336457;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 5553018504240994192142285229371655424882906988402996492594576660281381690349;\\n    uint256 constant IC0y = 11162413034617779074766762458022857724647135095524110813331056049969893509944;\\n    \\n    uint256 constant IC1x = 16233005805632869986661777213409875539676169367361322096358480468466672606561;\\n    uint256 constant IC1y = 10378232944979383786865979921967038162350388199513685725696087035646255798020;\\n    \\n    uint256 constant IC2x = 7118646166649699603908642926704551733194893788979260367153888416127414190893;\\n    uint256 constant IC2y = 2319302268192241896879184586060170938205618374383089567174928015569254256583;\\n    \\n    uint256 constant IC3x = 12999230089461911145804056826289686060787917302405390897975534446011135080702;\\n    uint256 constant IC3y = 7065626680476526382237127732630528952502903307612200744264842545623687065152;\\n    \\n    uint256 constant IC4x = 16549676917639134388172704355271536425623182343629260953465769196378789935428;\\n    uint256 constant IC4y = 8692647580951968308824258572259654968576665598341614079359925049496032791930;\\n    \\n    uint256 constant IC5x = 9487835164740264195436905125063177265644678741430065093178970627432987423347;\\n    uint256 constant IC5y = 11761388892765444679025307229575724051092953405380652106085200754881776345207;\\n    \\n    uint256 constant IC6x = 19532045123544546592521406112487251767663464903327072198698521319101515083306;\\n    uint256 constant IC6y = 6063348309651541111865897421717491910378474207915324596536156761675760381452;\\n    \\n    uint256 constant IC7x = 12985494520420244346979872318441743532765680076860681612240654043191032656979;\\n    uint256 constant IC7y = 14527113063804352017576394024563428298707737685017584207343232458548441344709;\\n    \\n    uint256 constant IC8x = 3619454786460144404697490404346599189450213589304706233107203556470693349992;\\n    uint256 constant IC8y = 10693307452197438976295057326687977795303220711023499612378511347965109418168;\\n    \\n    uint256 constant IC9x = 15796717441417343862011934360133990818137789486475284248257924123279185878903;\\n    uint256 constant IC9y = 1928769557876446933716225703428681647759457355912177905917549968966499989769;\\n    \\n    uint256 constant IC10x = 16822692090540583973150765307462313250537107218577297903599336913270052408471;\\n    uint256 constant IC10y = 19304187684261638848255657938567828200891869550477898557080363121093037901361;\\n    \\n    uint256 constant IC11x = 9546262525278829622151419326162286438990271604601705380870682751891538722934;\\n    uint256 constant IC11y = 10515939111576129485516150463077845221002412641675701092019159336709850679321;\\n    \\n    uint256 constant IC12x = 9791415807360353064484853463522700292817356800094308404088360116609283025477;\\n    uint256 constant IC12y = 8470188484328252367566737686630506375178693809125224667347243000412893900534;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/solcInputs/8704d78b2acb3413578e4ecb20a5b51d.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the idHash\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/solcInputs/9f5b84b5a4484299f202298c88bacb39.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the idHash\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, , that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 6865443700594715891152328791607889526330887414086993633068747938072457241685;\\n    uint256 constant IC0y = 10468945301756143970646006543367573774178372611766681195220999860357915797944;\\n    \\n    uint256 constant IC1x = 10704722446523266721180562643447437149651020230245607194259102672100716655622;\\n    uint256 constant IC1y = 13835922647350771093409292403482106984225273572439540259619248291997497190338;\\n    \\n    uint256 constant IC2x = 9082820476663057749813862646863505694595521088627361022677522902057835975674;\\n    uint256 constant IC2y = 2956559811855122372464720724455222044024045806141600873519434424076727259549;\\n    \\n    uint256 constant IC3x = 3792740326745716842453603765202940845282157902511414580984405164815472719626;\\n    uint256 constant IC3y = 13398930886279937280023561976368048826175146409027429215170876003688906362216;\\n    \\n    uint256 constant IC4x = 1141781699151428606267044235130552909660238448565862470582441408755286403649;\\n    uint256 constant IC4y = 16789658000733015308721768726691601134554495877403753820826002406384958395008;\\n    \\n    uint256 constant IC5x = 12543171042042072636131914829125043929342724675040777036405607612956292855474;\\n    uint256 constant IC5y = 4103351600393692854136490223669999878503018507420468298933278541160167154342;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n\\n    uint256 constant IC0x = 7948712917874849781328365661027367011398916994267746344840851439625837578323;\\n    uint256 constant IC0y = 14445610336427827969214783890094209349619216720637343095223018572693254280923;\\n\\n    uint256 constant IC1x = 3654976868371838169631577898462947005550108125685649400186026683210975806547;\\n    uint256 constant IC1y = 7383470632301847779131345725687431208414525939319998905342796582584383932784;\\n\\n    uint256 constant IC2x = 15960136517117002583905099076229506420678130465330836605642076667698312488907;\\n    uint256 constant IC2y = 10981003641590459938830276725941498612829685925850889415515039958666798745545;\\n\\n    uint256 constant IC3x = 18064147597098347735634254758923927729758051955626895483758091493962336324910;\\n    uint256 constant IC3y = 14561976814062079545004557051651175882415454473414826337411715544694691078488;\\n\\n    uint256 constant IC4x = 5479872440797886105045613557892343574379959348291323344571145668056905130790;\\n    uint256 constant IC4y = 19816668883377774512316396795679515122358992446677555233530823190449668202575;\\n\\n    uint256 constant IC5x = 9764995418164291848924916053122788044578670279004409359935206951759326535751;\\n    uint256 constant IC5y = 11151240738595525109186562114546767429226785384258075837825604200334229399893;\\n\\n    uint256 constant IC6x = 8592289604370662283816667811371636409851377122184258261984779162566069289701;\\n    uint256 constant IC6y = 14924863702174947616504138427154175911132478861008643941575632275190130139352;\\n\\n    uint256 constant IC7x = 18144310048336844926716356091507529474953804436633311455291234260603469939801;\\n    uint256 constant IC7y = 20695654519010539727518673528536864282905304035588394263484365314168181698771;\\n\\n    uint256 constant IC8x = 6502380984206062082509747555585722773109086149921002084837192664976139632635;\\n    uint256 constant IC8y = 20559694265554344023542679863623632229239552087994730960172389697388976005511;\\n\\n    uint256 constant IC9x = 20112907151747105787761530796573701791334087761671369712034010592321424588594;\\n    uint256 constant IC9y = 7868275330531868976088552522626764067554872392097431803379373791917043873429;\\n\\n    uint256 constant IC10x = 21738568466342470712305504479308744377477421607586657477021567762815751353985;\\n    uint256 constant IC10y = 15899136431442502164449286654852349998271141738582178828650897248716421930967;\\n\\n    uint256 constant IC11x = 8797574036872579022038442307145559829777119719185174358600414786794648200526;\\n    uint256 constant IC11y = 19158045316273481821441527564745598208594831388291307046183673615092116714767;\\n\\n    uint256 constant IC12x = 1856159710792583584076099033562199824825551035760525968182870506068750338922;\\n    uint256 constant IC12y = 5431689035393664841658365783566955093050903672278814147361678362199701787106;\\n\\n    uint256 constant IC13x = 1326184215165888620491943578175089960460457074386949049899809721605475868360;\\n    uint256 constant IC13y = 19798068085286831236096103256261325470985925228876029833389405086405680467005;\\n\\n    uint256 constant IC14x = 21303925226345182261601479972988106925149727015068245014063996271014722518363;\\n    uint256 constant IC14y = 13822581075918761258491041321378418848172590182506086615070972333032971332948;\\n\\n    uint256 constant IC15x = 7601301681882298785665130103217482061846330487834337423048688553591898089998;\\n    uint256 constant IC15y = 16353595650180105876268966027044363473882857313997670459546834066677499432092;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4244199450261939264855608361292422830494076317114087381524682052624987594898;\\n    uint256 constant IC0y = 19645046663091251713731947178298410964505911169469312617571077810087266152857;\\n    \\n    uint256 constant IC1x = 8174035567318043885708495283345132428559378659325609203776402978017320167293;\\n    uint256 constant IC1y = 14468913963303826866215469807518170784403093656434266017779773880257875040240;\\n    \\n    uint256 constant IC2x = 1616603017751755006393562987905285502270823546542543926944627007410237341389;\\n    uint256 constant IC2y = 19363001402611389684892375352655759926342431445082754246958964085276938403807;\\n    \\n    uint256 constant IC3x = 18206398417831844023515176703806764449138507779128726420915001707110434960674;\\n    uint256 constant IC3y = 15788322487150289973315668363845259348952014356217153206401112660482394149984;\\n    \\n    uint256 constant IC4x = 5556506419684194840114638678281266193177223336781663103282498332205775709966;\\n    uint256 constant IC4y = 3612832929973582572292953270578481883198123808328242543078950263985599193867;\\n    \\n    uint256 constant IC5x = 12215062759329544988171802286780059092087193981868301475398051148747302789508;\\n    uint256 constant IC5y = 1980305058569746313443850675062124742589110071159814897086099250727381686120;\\n    \\n    uint256 constant IC6x = 3493933421620238986193524740698678015926658911199434587596433896655331481231;\\n    uint256 constant IC6y = 7459045126206245262756783739697871731196375298112634212173672404853831309786;\\n    \\n    uint256 constant IC7x = 10740551677743158382441062386501298848646053145865823442847610791968594528289;\\n    uint256 constant IC7y = 21657167241153225314135589387079002708587418842864077521693977210968021048721;\\n    \\n    uint256 constant IC8x = 20536476234797263831643189740064053117160337195791856385892992834482370287512;\\n    uint256 constant IC8y = 18258699057873865588245369435578918571756469704183085011165098139074862434543;\\n    \\n    uint256 constant IC9x = 18293662353150822330749373485066335943093182919888710919053977794688677443843;\\n    uint256 constant IC9y = 3365197130606871938439382259561012622230793791152518122576869893531830020051;\\n    \\n    uint256 constant IC10x = 10464268927660994961936771610761322397633069758803976833400107641287034964420;\\n    uint256 constant IC10y = 15896600235017903857295002971756639107391153447838560723402307560050234141111;\\n    \\n    uint256 constant IC11x = 19786751484513045884347111989063082084450406057425687794673931698452346081044;\\n    uint256 constant IC11y = 5313251178585910055977156446218999699936391470697302222575669547157687947710;\\n    \\n    uint256 constant IC12x = 1684055055646723719894355280156760702291183222236626601663480311877006377437;\\n    uint256 constant IC12y = 14613128874599604159663378872994588938053027721510091765805321127316501622056;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/solcInputs/abdf02aaee54cd0feb794abb995bbd6c.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the idHash\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/goerli/solcInputs/f04018ca3672426744531c5b0e9c8cda.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"./external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"./external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"./interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"./interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the idHash\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"./BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"./BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, , that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"./BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../verifiers/venmo_send_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"./external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"./external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"./interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 17506601062729203246470310549966876806346595277178622638695894576434523274090;\\n    uint256 constant IC0y = 17604862702797636734943023772103441585855049955213821412975126068788009085970;\\n    \\n    uint256 constant IC1x = 5241799868600518437129648664629191166782058940328354300527912875567714533060;\\n    uint256 constant IC1y = 15270744620080267404245445393908999824585786383818154864348391866165268445453;\\n    \\n    uint256 constant IC2x = 9322658998551228151379532231277641805226903395863035111041965577289983367186;\\n    uint256 constant IC2y = 4279864528397470012468813728240009146912571656771805648927706885337251937886;\\n    \\n    uint256 constant IC3x = 17452376331896564556958287783349437354199198163723047148438896296674662693471;\\n    uint256 constant IC3y = 21268379489172816589914142154319254915980775734742323224380002003384899217201;\\n    \\n    uint256 constant IC4x = 10082473279583916034135807271858019107173858434738732412893120737298721366587;\\n    uint256 constant IC4y = 1620336015479864153329563277525515559868951787497616878950468968134830408661;\\n    \\n    uint256 constant IC5x = 13879052192142034444808241655017630780232481570574976803752781783047195928358;\\n    uint256 constant IC5y = 10353219971192701576846391519817872415954082704046915764391647730656393980888;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 2826088890037430119930760412787323191381769399462820409794056007361294814722;\\n    uint256 constant IC0y = 16511304687589210714068250418425566769935777467055671877286194519705348265437;\\n    \\n    uint256 constant IC1x = 1842633417305311600426629021980037213436085367849770138661153889411058436824;\\n    uint256 constant IC1y = 13584093642479820514931510127233896303245411934362029538258008521576820631870;\\n    \\n    uint256 constant IC2x = 3963821922763711198136636302497123642059766015436875450602036262466261933486;\\n    uint256 constant IC2y = 2741309634437267633467239291807934467120628146138841930493980261145955014125;\\n    \\n    uint256 constant IC3x = 9523860789215927952964278880757054676124334332871934331937487084428006456082;\\n    uint256 constant IC3y = 1841762711904697198291697165753658703483891571189689269687665163009695638957;\\n    \\n    uint256 constant IC4x = 6144256483854967652970118013868250882507064847388329985812397444066891144013;\\n    uint256 constant IC4y = 14065523357042894313549316787133965641674156917121486771443341558010310501655;\\n    \\n    uint256 constant IC5x = 17520604619160630893481019976363469085142761807660608646570466393290236973039;\\n    uint256 constant IC5y = 17472595612642962192641183062029398122960768138813735558841050179800777665786;\\n    \\n    uint256 constant IC6x = 821680568383136699264199387856843509614034384201112341510906936551026224297;\\n    uint256 constant IC6y = 7716040758609494121324972271844709354239348485209858437273370847209012517498;\\n    \\n    uint256 constant IC7x = 3550399336245766022762654624256427964740257177608704148391750033822372660402;\\n    uint256 constant IC7y = 13869092266047212434291707306721208215725647076094496348614626854488814838758;\\n    \\n    uint256 constant IC8x = 16797728206383007311743725420794328123982168048329919984526462601080600905553;\\n    uint256 constant IC8y = 10031311846128909842167455386938464744824849046003256270744077504698848071620;\\n    \\n    uint256 constant IC9x = 9917486629856782296668388250031629726909650162870414354044878276001269506494;\\n    uint256 constant IC9y = 11850969144017696112957824138792005361423951717725935105150913960472363960867;\\n    \\n    uint256 constant IC10x = 11515085580217467690671228633469170934607120435829337744372023352806901545497;\\n    uint256 constant IC10y = 2810184659017728570779116651221387980422884145320046574349357601383091251840;\\n    \\n    uint256 constant IC11x = 8138580599215741119278949265555488395034875459161499346142092177976380888912;\\n    uint256 constant IC11y = 12614819287061637483680805185134657921351626893461537216586964096472077007068;\\n    \\n    uint256 constant IC12x = 5800215063560920851353232183176977899721117666831035340942707162061864386805;\\n    uint256 constant IC12y = 21863235977735095102605178424545156970945923086470669950247451665484979704483;\\n    \\n    uint256 constant IC13x = 3724024194875938775125426178556046800882363514501216922380940797823569024307;\\n    uint256 constant IC13y = 20616921116944293393197156859530717259363980160070906113262234592557417595466;\\n    \\n    uint256 constant IC14x = 14931359143802923452373668434913556516519032955424516421232912161729748196138;\\n    uint256 constant IC14y = 18005266610478789004077634175433619260466631213438696859821580403552802879261;\\n    \\n    uint256 constant IC15x = 991835108522766197705731995579426350869527975977902666402666230277449215213;\\n    uint256 constant IC15y = 7133336965479072801341335708729379443312428202852529971202665221959706336457;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/helpers.ts",
    "content": "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address } from \"../utils/types\";\n\nexport function getDeployedContractAddress(network: string, contractName: string): string {\n  return require(`./${network}/${contractName}.json`).address;\n}\n\nexport async function setNewOwner(\n  hre: HardhatRuntimeEnvironment,\n  contract: any,\n  newOwner: Address\n): Promise<void> {\n  const currentOwner = await contract.owner();\n\n  if (currentOwner != newOwner) {\n    const data = contract.interface.encodeFunctionData(\"transferOwnership\", [newOwner]);\n\n    await hre.deployments.rawTx({\n      from: currentOwner,\n      to: contract.address,\n      data\n    });\n  }\n}\n\nexport async function addWritePermission(\n  hre: HardhatRuntimeEnvironment,\n  contract: any,\n  newPermission: Address\n): Promise<void> {\n  const currentOwner = await contract.owner();\n  if (!(await contract.isWriter(newPermission))) {\n    if ((await hre.getUnnamedAccounts()).includes(currentOwner)) {\n        const data = contract.interface.encodeFunctionData(\"addWritePermission\", [newPermission]);\n\n        await hre.deployments.rawTx({\n          from: currentOwner,\n          to: contract.address,\n          data\n        });\n    } else {\n      console.log(\n        `Contract owner is not in the list of accounts, must be manually added with the following calldata:\n        ${contract.interface.encodeFunctionData(\"addWritePermission\", [newPermission])}\n        `\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "contracts-ramp/deployments/outputs/baseContracts.ts",
    "content": "export default {\n  \"name\": \"base\",\n  \"chainId\": \"8453\",\n  \"contracts\": {\n    \"GarantiBodyHashVerifier\": {\n      \"address\": \"0x2D86A67402E9d9FbD616E02BeFFc21Edc30Ae64E\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiManagedKeyHashAdapter\": {\n      \"address\": \"0x3Ff1c29f2406c9351B06F377f03e71023962DfdA\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiRamp\": {\n      \"address\": \"0x4Edc42B8925CF307C3DD5e7Fd9a3B04453A3e37d\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiIban\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiIban\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiName\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct GarantiRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"idHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiIban\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiName\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct GarantiRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct GarantiRamp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IGarantiRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IGarantiSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_iban\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"isValidIban\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_garantiIban\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_garantiName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[28]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[28]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[11]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[11]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiSendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IGarantiRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IGarantiSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiRegistrationProcessor\": {\n      \"address\": \"0x4893d6b0A9dc0B11f373f673bC2bCfAE74c0a1f9\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_garantiMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"_bodyHashVerifier\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bodyHashVerifier\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[11]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[11]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiSendProcessor\": {\n      \"address\": \"0x29666c1dB00852c5378d4299ae24B6CB8081057f\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_garantiMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"_bodyHashVerifier\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bodyHashVerifier\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[28]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[28]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperNameHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCManagedKeyHashAdapter\": {\n      \"address\": \"0xd4257D0d4224Da79da4909b99458F9A7b6Da8195\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCRamp\": {\n      \"address\": \"0xf3c9a6CA0DF1950a62ea868704678b1e8C34918a\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon3\",\n              \"name\": \"_poseidon3\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon6\",\n              \"name\": \"_poseidon6\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[8]\",\n                      \"name\": \"upiId\",\n                      \"type\": \"uint256[8]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct HDFCRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"idHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[8]\",\n                      \"name\": \"upiId\",\n                      \"type\": \"uint256[8]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct HDFCRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct HDFCRamp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IHDFCSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[8]\",\n              \"name\": \"_upiId\",\n              \"type\": \"uint256[8]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon3\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon3\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon6\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon6\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IHDFCSendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IHDFCSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCRegistrationProcessor\": {\n      \"address\": \"0xD2B4CcA64Fc4B7588D6546780fEdb4c71A4b75D6\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_hdfcMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[5]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[5]\"\n                }\n              ],\n              \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCSendProcessor\": {\n      \"address\": \"0x03eB0ba3f7A4451C41278Af74E8384079Ae40170\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_hdfcMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[15]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[15]\"\n                }\n              ],\n              \"internalType\": \"struct IHDFCSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"NullifierRegistry\": {\n      \"address\": \"0x8Ccd3701bD7120D9b390B8b2060AF154f8fD190b\",\n      \"abi\": [\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"nullifier\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NullifierAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_nullifier\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addNullifier\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getWriters\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isNullified\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isWriter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_removedWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"writers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Poseidon3\": {\n      \"address\": \"0xC87eFE0445fbA1FDb8a73553F293272B7bE91c64\",\n      \"abi\": [\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[3]\",\n              \"name\": \"input\",\n              \"type\": \"bytes32[3]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"input\",\n              \"type\": \"uint256[3]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Poseidon6\": {\n      \"address\": \"0xcEC79FdDBaA7C9cfed2E9AD23Bb272c71e7E2144\",\n      \"abi\": [\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[6]\",\n              \"name\": \"input\",\n              \"type\": \"bytes32[6]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[6]\",\n              \"name\": \"input\",\n              \"type\": \"uint256[6]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Ramp\": {\n      \"address\": \"0xB084f36C5B7193af8Dd17025b36FBe2DD496a06f\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"_poseidon\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"venmoIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getVenmoIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"_packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutAccountRegistrationProcessor\": {\n      \"address\": \"0x7699Fce34011688a67cC44af4C76d1B38BA1a3a8\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_notaryKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_host\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"VerifierSigningKeySet\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"endpoint\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"host\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"notaryKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"endpoint\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"host\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"profileId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"userAddress\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n                  \"name\": \"public_values\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"proof\",\n                  \"type\": \"bytes\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRampId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setVerifierSigningKey\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"verifierSigningKey\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"_publicValues\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"_proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutAccountRegistry\": {\n      \"address\": \"0x969FD0eD23A44756678af779FD0206aE123261B2\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"accountId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AllowlistEnabled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewAccountRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"allowedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"allowedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"accountRegistrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_allowedUsers\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"addAccountsToAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"enableAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountId\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAllowedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n              \"name\": \"_accountRegistrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_allowedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isAllowedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isAllowlistEnabled\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isRegisteredUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"endpoint\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"host\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"profileId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"userAddress\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n                  \"name\": \"public_values\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"proof\",\n                  \"type\": \"bytes\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_disallowedUsers\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"removeAccountsFromAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setAccountRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutRamp\": {\n      \"address\": \"0xeb33C544dBd9a487de0522fE886fc38D66887533\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRampId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"currencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"accountId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"accountRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"revolutTag\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"receiveCurrencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"revolutTag\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"verifierSigningKey\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"receiveCurrencyId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct RevolutRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"revolutTag\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"verifierSigningKey\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"receiveCurrencyId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct RevolutRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHashAsUint\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct RevolutRamp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperId\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistry\",\n              \"name\": \"_accountRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IRevolutSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_revolutTag\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_receiveCurrencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_notaryKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"transferId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"recipientId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"amount\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"currencyId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"status\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"timestamp\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n              \"name\": \"_sendData\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"_verifierSignature\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRevolutSendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutSendProcessor\": {\n      \"address\": \"0xaD7cC2A3a83Fb13F3A82D6cC31928d3E91fF25cc\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_host\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PAYMENT_STATUS\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"endpoint\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"host\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"endpoint\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"host\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"transferId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"recipientId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"amount\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"currencyId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"status\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"timestamp\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentHash\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n                  \"name\": \"public_values\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"proof\",\n                  \"type\": \"bytes\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"currencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoManagedKeyHashAdapter\": {\n      \"address\": \"0x8FF8F6698Bd7bafFaD97D23ed46c5dD0b515B0BA\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoManagedKeyHashAdapterV2\": {\n      \"address\": \"0xc7350FFc8d7e92Bc4cD116A09b3D36121144061b\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoRampV2\": {\n      \"address\": \"0xbcE0B9e082F6619411dd8d029DFf8116BA36A76D\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IRamp\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"_poseidon\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct VenmoRampV2.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"venmoIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountVenmoIdHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct VenmoRampV2.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct VenmoRampV2.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getVenmoIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessorV2\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"_packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRamp\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessorV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessorV2\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoRegistrationProcessor\": {\n      \"address\": \"0x71EAD6E8FC3331da65191BCbdD3BE81F04EAa3CA\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[5]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[5]\"\n                }\n              ],\n              \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_mailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoRegistrationProcessorV2\": {\n      \"address\": \"0x209E0fa47FAbdb656B8b4bb8fBA01322e9d5cf00\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[5]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[5]\"\n                }\n              ],\n              \"internalType\": \"struct IRegistrationProcessorV2.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoSendProcessor\": {\n      \"address\": \"0x9011fC66C34546511cf1e514F248fB98Af95b96d\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[12]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[12]\"\n                }\n              ],\n              \"internalType\": \"struct ISendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_mailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoSendProcessorV2\": {\n      \"address\": \"0x170Cfa26a1fC6868dC45B251e7a482188A84A1d4\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[12]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[12]\"\n                }\n              ],\n              \"internalType\": \"struct ISendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    }\n  }\n} as const;"
  },
  {
    "path": "contracts-ramp/deployments/outputs/baseStagingContracts.ts",
    "content": "export default {\n  \"name\": \"base_staging\",\n  \"chainId\": \"8453\",\n  \"contracts\": {\n    \"GarantiBodyHashVerifier\": {\n      \"address\": \"0xA52E53Efa715a2909328Bffb3d7f2eE2B84A5Cb7\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiManagedKeyHashAdapter\": {\n      \"address\": \"0xB68b9bCBEA54540F41c8F597aC6415F33114016f\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiRamp\": {\n      \"address\": \"0x27a6Ecb917B4BbCb6450f50Fa873510Ac3077171\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiIban\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiIban\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiName\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct GarantiRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"idHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiIban\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"garantiName\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct GarantiRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct GarantiRamp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IGarantiRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IGarantiSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_iban\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"isValidIban\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_garantiIban\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_garantiName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[28]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[28]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[11]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[11]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiSendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IGarantiRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IGarantiSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiRegistrationProcessor\": {\n      \"address\": \"0x6E6eAc7e8995fb6d44aE5E559874B8C969010293\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_garantiMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"_bodyHashVerifier\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bodyHashVerifier\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[11]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[11]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"GarantiSendProcessor\": {\n      \"address\": \"0x1048dd39f95aBE7712291752B63f61BD397c695E\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_garantiMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"_bodyHashVerifier\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"bodyHashVerifier\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[28]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[28]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[4]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[4]\"\n                }\n              ],\n              \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n              \"name\": \"_bodyHashProof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperNameHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCManagedKeyHashAdapter\": {\n      \"address\": \"0x3f53c1f28237862FF14ab4f34152d8C6659bA242\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCRamp\": {\n      \"address\": \"0xc137d22fa93316Df55b5F896F5180c722D02b01D\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon3\",\n              \"name\": \"_poseidon3\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon6\",\n              \"name\": \"_poseidon6\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[8]\",\n                      \"name\": \"upiId\",\n                      \"type\": \"uint256[8]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct HDFCRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"idHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[8]\",\n                      \"name\": \"upiId\",\n                      \"type\": \"uint256[8]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct HDFCRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct HDFCRamp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IHDFCSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[8]\",\n              \"name\": \"_upiId\",\n              \"type\": \"uint256[8]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon3\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon3\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon6\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon6\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IHDFCSendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IHDFCSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCRegistrationProcessor\": {\n      \"address\": \"0xC8d7C6a5a8B2158012FB679DB1c3d7fbC1cC2980\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_hdfcMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[5]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[5]\"\n                }\n              ],\n              \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"HDFCSendProcessor\": {\n      \"address\": \"0x3bCC71916d9d2BB5F52Fdb386814bd84C9312A04\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_hdfcMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[15]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[15]\"\n                }\n              ],\n              \"internalType\": \"struct IHDFCSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"NullifierRegistry\": {\n      \"address\": \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n      \"abi\": [\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"nullifier\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NullifierAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_nullifier\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addNullifier\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getWriters\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isNullified\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isWriter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_removedWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"writers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Poseidon3\": {\n      \"address\": \"0xfdb7153989116F650387813013A047B6Ab56aEff\",\n      \"abi\": [\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[3]\",\n              \"name\": \"input\",\n              \"type\": \"bytes32[3]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"input\",\n              \"type\": \"uint256[3]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Poseidon6\": {\n      \"address\": \"0x95Fc5D19C778FABE6Aec8948C1a7A32eF8DeC791\",\n      \"abi\": [\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[6]\",\n              \"name\": \"input\",\n              \"type\": \"bytes32[6]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[6]\",\n              \"name\": \"input\",\n              \"type\": \"uint256[6]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Ramp\": {\n      \"address\": \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"_poseidon\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"venmoIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getVenmoIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"_packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutAccountRegistrationProcessor\": {\n      \"address\": \"0x96fa6C854F35665c0B5C6365c64a9EECa5793411\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_notaryKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_host\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"VerifierSigningKeySet\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"endpoint\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"host\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"notaryKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"endpoint\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"host\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"profileId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"userAddress\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n                  \"name\": \"public_values\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"proof\",\n                  \"type\": \"bytes\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRampId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setVerifierSigningKey\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"verifierSigningKey\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"_publicValues\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"_proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutAccountRegistry\": {\n      \"address\": \"0x44115b15Ff0Db10702DFC72Cb2fd3179215623df\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"accountId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AllowlistEnabled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewAccountRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"allowedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"allowedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromAllowlist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"accountRegistrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_allowedUsers\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"addAccountsToAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"enableAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountId\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAllowedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n              \"name\": \"_accountRegistrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_allowedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isAllowedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isAllowlistEnabled\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isRegisteredUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"endpoint\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"host\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"profileId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"userAddress\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n                  \"name\": \"public_values\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"proof\",\n                  \"type\": \"bytes\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_disallowedUsers\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"removeAccountsFromAllowlist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setAccountRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutRamp\": {\n      \"address\": \"0x84268621B45C24A7A2A3fb700156B0D5Ac75Ee0b\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRampId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"currencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"accountId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"accountRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"revolutTag\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"receiveCurrencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"revolutTag\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"verifierSigningKey\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"receiveCurrencyId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct RevolutRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"revolutTag\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"verifierSigningKey\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32\",\n                      \"name\": \"receiveCurrencyId\",\n                      \"type\": \"bytes32\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct RevolutRamp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getIdCurrentIntentHashAsUint\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct RevolutRamp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperId\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutAccountRegistry\",\n              \"name\": \"_accountRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IRevolutSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_revolutTag\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_receiveCurrencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_notaryKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"transferId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"recipientId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"amount\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"currencyId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"status\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"timestamp\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n              \"name\": \"_sendData\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"_verifierSignature\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRevolutSendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRevolutSendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"RevolutSendProcessor\": {\n      \"address\": \"0xC2039e46f59cAC1ddC9a045563946A08D58d6f6A\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_host\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PAYMENT_STATUS\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"endpoint\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"host\",\n          \"outputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"endpoint\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"host\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"transferId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"recipientId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"amount\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"currencyId\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"status\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"string\",\n                      \"name\": \"timestamp\",\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentHash\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"notaryKeyHash\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n                  \"name\": \"public_values\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes\",\n                  \"name\": \"proof\",\n                  \"type\": \"bytes\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutSendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_verifierSigningKey\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"currencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoManagedKeyHashAdapter\": {\n      \"address\": \"0x28B23225877AedFe6A9FB1B480026aFdF9801213\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoManagedKeyHashAdapterV2\": {\n      \"address\": \"0xbf452ee0B221A4dDdD118772848A360722850ffc\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_mailServerKeyHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"MailServerKeyHashRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"mailServerKeyHashes\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeMailServerKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoRampV2\": {\n      \"address\": \"0x80e5aB2921e23192B2454f6a386Fd7032dad932E\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IRamp\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"_poseidon\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct VenmoRampV2.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"venmoIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountVenmoIdHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"depositorIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct VenmoRampV2.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct VenmoRampV2.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getVenmoIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessorV2\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"isInitialized\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"_packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRamp\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessorV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"releaseFundsToOnramper\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessorV2\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoRegistrationProcessor\": {\n      \"address\": \"0xEf15b6Fd708F35a85c19C30F78119Ff8595aD627\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[5]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[5]\"\n                }\n              ],\n              \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_mailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoRegistrationProcessorV2\": {\n      \"address\": \"0x050F07A4E7C0F4Ee6Cc8E8EdC5B694F9Fdd1e769\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[5]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[5]\"\n                }\n              ],\n              \"internalType\": \"struct IRegistrationProcessorV2.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoSendProcessor\": {\n      \"address\": \"0x574ACe7463dD126D2D22825BAa846cf1B3d87D4F\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[12]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[12]\"\n                }\n              ],\n              \"internalType\": \"struct ISendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_mailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoSendProcessorV2\": {\n      \"address\": \"0xd654400e33c54E4E811b979b8D14F9fc9543683C\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"PACK_SIZE\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_keyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isMailServerKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailServerKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[12]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[12]\"\n                }\n              ],\n              \"internalType\": \"struct ISendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapterV2\",\n              \"name\": \"_mailServerKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_timestampBuffer\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setTimestampBuffer\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"timestampBuffer\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    }\n  }\n} as const;"
  },
  {
    "path": "contracts-ramp/deployments/outputs/baseStagingContractsOld.ts",
    "content": "export default {\n  \"name\": \"base_staging\",\n  \"chainId\": \"8453\",\n  \"contracts\": {\n    \"ManagedKeyHashAdapter\": {\n      \"address\": \"0x28B23225877AedFe6A9FB1B480026aFdF9801213\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_mailserverKeyHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHash\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"NullifierRegistry\": {\n      \"address\": \"0x3DD68Da97Eaf62Dd5cdD0767AA20b5AF665D0a34\",\n      \"abi\": [\n        {\n          \"inputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"nullifier\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NullifierAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterAdded\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"writer\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"WriterRemoved\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_nullifier\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addNullifier\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_newWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"addWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getWriters\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"\",\n              \"type\": \"address[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isNullified\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"isWriter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_removedWriter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"removeWritePermission\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"writers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Poseidon\": {\n      \"address\": \"0xfdb7153989116F650387813013A047B6Ab56aEff\",\n      \"abi\": [\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[3]\",\n              \"name\": \"input\",\n              \"type\": \"bytes32[3]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        },\n        {\n          \"constant\": true,\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"input\",\n              \"type\": \"uint256[3]\"\n            }\n          ],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"payable\": false,\n          \"stateMutability\": \"pure\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"Ramp\": {\n      \"address\": \"0xa08d9952196ABECB2BaCD14188093314053f6335\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"_usdc\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"_poseidon\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_sustainabilityFee\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_sustainabilityFeeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"accountOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"AccountRegistered\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"DepositClosed\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositReceived\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"DepositWithdrawn\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentExpirationPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"feeAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentFulfilled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentPruned\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"IntentSignaled\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MaxOnRampAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"MinDepositAmountSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"receiveProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewReceiveProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewRegistrationProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"NewSendProcessorSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"OnRampCooldownPeriodSet\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"address\",\n              \"name\": \"feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeRecipientUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"uint256\",\n              \"name\": \"fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"SustainabilityFeeUpdated\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserAddedToDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"listOwner\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"indexed\": false,\n              \"internalType\": \"bytes32\",\n              \"name\": \"approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"UserRemovedFromDenylist\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"addAccountToDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"cancelIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"depositCounter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"deposits\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountDeposits\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"accountDeposits\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getAccountInfo\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"venmoIdHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256[]\",\n                  \"name\": \"deposits\",\n                  \"type\": \"uint256[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.AccountInfo\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getDeniedUsers\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"getDeposit\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"getDepositFromIds\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositId\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"depositor\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256[3]\",\n                      \"name\": \"packedVenmoId\",\n                      \"type\": \"uint256[3]\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"depositAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"remainingDeposits\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"outstandingIntentAmount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"conversionRate\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"bytes32[]\",\n                      \"name\": \"intentHashes\",\n                      \"type\": \"bytes32[]\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Deposit\",\n                  \"name\": \"deposit\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"availableLiquidity\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n              \"name\": \"depositArray\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"_intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"name\": \"getIntentsWithOnRamperId\",\n          \"outputs\": [\n            {\n              \"components\": [\n                {\n                  \"components\": [\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"onRamper\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"address\",\n                      \"name\": \"to\",\n                      \"type\": \"address\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"deposit\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"amount\",\n                      \"type\": \"uint256\"\n                    },\n                    {\n                      \"internalType\": \"uint256\",\n                      \"name\": \"intentTimestamp\",\n                      \"type\": \"uint256\"\n                    }\n                  ],\n                  \"internalType\": \"struct Ramp.Intent\",\n                  \"name\": \"intent\",\n                  \"type\": \"tuple\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"onRamperIdHash\",\n                  \"type\": \"bytes32\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n              \"name\": \"\",\n              \"type\": \"tuple[]\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getLastOnRampTimestamp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"getVenmoIdCurrentIntentHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"initialize\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"intentExpirationPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"intents\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"onRamper\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"to\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"deposit\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentTimestamp\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_account\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_deniedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"isDeniedUser\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"maxOnRampAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"minDepositAmount\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"_packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_receiveAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"offRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"onRamp\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"onRampCooldownPeriod\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"poseidon\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IPoseidon\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"register\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"registrationProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"_approvedUser\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"name\": \"removeAccountFromDenylist\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sendProcessor\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_intentExpirationPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setIntentExpirationPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_maxOnRampAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMaxOnRampAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_minDepositAmount\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setMinDepositAmount\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_onRampCooldownPeriod\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setOnRampCooldownPeriod\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IRegistrationProcessor\",\n              \"name\": \"_registrationProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setRegistrationProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract ISendProcessor\",\n              \"name\": \"_sendProcessor\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSendProcessor\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_fee\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"name\": \"setSustainabilityFee\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_feeRecipient\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setSustainabilityFeeRecipient\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"_amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_to\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"signalIntent\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFee\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"sustainabilityFeeRecipient\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"usdc\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IERC20\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"_depositIds\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"name\": \"withdrawDeposit\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoRegistrationProcessor\": {\n      \"address\": \"0xC536C23C2dc76be96eb25A444c857053a591923E\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[5]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[5]\"\n                }\n              ],\n              \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"userIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_mailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    },\n    \"VenmoSendProcessor\": {\n      \"address\": \"0x38074075e15057C83f9A6A7E31C2eB74E6362c57\",\n      \"abi\": [\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"_ramp\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_venmoMailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"_nullifierRegistry\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"constructor\"\n        },\n        {\n          \"anonymous\": false,\n          \"inputs\": [\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"previousOwner\",\n              \"type\": \"address\"\n            },\n            {\n              \"indexed\": true,\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"OwnershipTransferred\",\n          \"type\": \"event\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"emailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getEmailFromAddress\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"getMailserverKeyHash\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"mailserverKeyHashAdapter\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"nullifierRegistry\",\n          \"outputs\": [\n            {\n              \"internalType\": \"contract INullifierRegistry\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"owner\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"a\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2][2]\",\n                  \"name\": \"b\",\n                  \"type\": \"uint256[2][2]\"\n                },\n                {\n                  \"internalType\": \"uint256[2]\",\n                  \"name\": \"c\",\n                  \"type\": \"uint256[2]\"\n                },\n                {\n                  \"internalType\": \"uint256[12]\",\n                  \"name\": \"signals\",\n                  \"type\": \"uint256[12]\"\n                }\n              ],\n              \"internalType\": \"struct ISendProcessor.SendProof\",\n              \"name\": \"_proof\",\n              \"type\": \"tuple\"\n            }\n          ],\n          \"name\": \"processProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"timestamp\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"offRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"ramp\",\n          \"outputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"\",\n              \"type\": \"address\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [],\n          \"name\": \"renounceOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"_emailFromAddress\",\n              \"type\": \"string\"\n            }\n          ],\n          \"name\": \"setEmailFromAddress\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"contract IKeyHashAdapter\",\n              \"name\": \"_mailserverKeyHashAdapter\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"setMailserverKeyHashAdapter\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"newOwner\",\n              \"type\": \"address\"\n            }\n          ],\n          \"name\": \"transferOwnership\",\n          \"outputs\": [],\n          \"stateMutability\": \"nonpayable\",\n          \"type\": \"function\"\n        },\n        {\n          \"inputs\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pA\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"_pB\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"_pC\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"_pubSignals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"name\": \"verifyProof\",\n          \"outputs\": [\n            {\n              \"internalType\": \"bool\",\n              \"name\": \"\",\n              \"type\": \"bool\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        }\n      ]\n    }\n  }\n} as const;"
  },
  {
    "path": "contracts-ramp/deployments/parameters.ts",
    "content": "import \"module-alias/register\";\nimport { BigNumber } from \"ethers\";\nimport { ONE_DAY_IN_SECONDS, THREE_MINUTES_IN_SECONDS, ZERO } from \"@utils/constants\";\nimport { ether, usdc } from \"@utils/common/units\";\nimport { TLSParams } from \"@utils/types\";\n\n// Deployment Parameters\nexport const SERVER_KEY_HASH = {\n  \"venmo\": [\n    \"0x2ea3f223adbee4865e0cbfa3a6e748b1505a0094fd92c53d3d0dd2d4b0cd19d3\", // selector: lycwyfwp74k6gitv7a7jiergkl3mgkrg\n    // Below modulus hashes are out of date because they use an old hashing algorithm\n    //\"0x1163C7F4AF2E63FE2DCB73B8EDF51A3AC04A257979D7877EDFE4AB37B9C807B1\",   // selector: lycwyfwp74k6gitv7a7jiergkl3mgkrg\n  ],\n  \"hdfc\": [\n    \"0x23421f99fa0b530a42c1d1cd7c7b45e09cf4a02963646248bee3ec4aee13c214\", // acls01\n    \"0x2d6f556514af89727d18b24fc9f30e24015663eb289cb69c712b5814420b3fed\" // acls03\n    // Below modulus hashes are out of date because they use an old hashing algorithm\n    // \"0x06b0ad846d386f60e777f1d11b82922c6bb694216eed9c23535796ac404a7dfa\", // acls01\n    // \"0x1c1b5a203a9f1f15f6172969b9359e6a7572001de09471efd1586a67f7956fd8\" // acls03\n  ],\n  \"garanti\": [\n    \"0x03a9c8babd6b4ad94d711f3ffbee84b7aa69f4cb0dd08d491c5a5c32eca15f60\", \n  ]\n};\n\nexport const FROM_EMAIL = {\n  \"venmo\": \"venmo@venmo.com\",\n  \"hdfc\": \"alerts@hdfcbank.net\",\n  \"garanti\": \"garanti@info.garantibbva.com.tr\",\n};\n\ninterface EnvironmentTLSParams {\n  [environment: string]: TLSParams;\n}\n\nexport const ACCOUNT_TLS_PARAMS = {\n  \"wise\": {\n    \"localhost\": {\n      verifierSigningKey: \"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\",\n      notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),\n      endpoint: \"POST https://wise.com/gateway/v1/payments\",\n      host: \"wise.com\",\n    } as TLSParams,\n  } as EnvironmentTLSParams,\n  \"revolut\": {\n    \"localhost\": {\n      verifierSigningKey: \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n      notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),\n      endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n    \"sepolia\": {\n      verifierSigningKey: \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n      notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),\n      endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n    \"base_staging\": {\n      verifierSigningKey: \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n      notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),\n      endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n    \"base\": {\n      verifierSigningKey: \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n      notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),\n      endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n  } as EnvironmentTLSParams,\n}\n\nexport const OFFRAMPER_TLS_PARAMS = {\n  \"wise\": {\n    \"localhost\": {\n      verifierSigningKey: \"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\",\n      notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),\n      endpoint: \"GET https://wise.com/gateway/v3/profiles/*/transfers\",\n      host: \"wise.com\",\n    } as TLSParams,\n    \"base\": {} as TLSParams,\n  } as EnvironmentTLSParams,\n}\n\nexport const SEND_TLS_PARAMS = {\n  \"wise\": {\n    \"localhost\": {\n      verifierSigningKey: \"\",             // We don't pass this in for deploys\n      notaryKeyHash: ZERO.toHexString(),  // We don't pass this in for deploys\n      endpoint: \"GET https://wise.com/gateway/v3/profiles/*/transfers\",\n      host: \"wise.com\",\n    } as TLSParams,\n    \"base\": {} as TLSParams,\n  } as EnvironmentTLSParams,\n  \"revolut\": {\n    \"localhost\": {\n      verifierSigningKey: \"\",             // We don't pass this in for deploys\n      notaryKeyHash: ZERO.toHexString(),  // We don't pass this in for deploys\n      endpoint: \"GET https://app.revolut.com/api/retail/transaction/*\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n    \"sepolia\": {\n      verifierSigningKey: \"\",             // We don't pass this in for deploys\n      notaryKeyHash: ZERO.toHexString(),  // We don't pass this in for deploys\n      endpoint: \"GET https://app.revolut.com/api/retail/transaction/*\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n    \"base_staging\": {\n      verifierSigningKey: \"\",             // We don't pass this in for deploys\n      notaryKeyHash: ZERO.toHexString(),  // We don't pass this in for deploys\n      endpoint: \"GET https://app.revolut.com/api/retail/transaction/*\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n    \"base\": {\n      verifierSigningKey: \"\",             // We don't pass this in for deploys\n      notaryKeyHash: ZERO.toHexString(),  // We don't pass this in for deploys\n      endpoint: \"GET https://app.revolut.com/api/retail/transaction/*\",\n      host: \"app.revolut.com\",\n    } as TLSParams,\n  } as EnvironmentTLSParams,\n}\n\nexport const TIMESTAMP_BUFFER = {\n  \"venmo\": BigNumber.from(30),\n  \"hdfc\": BigNumber.from(30),\n  \"garanti\": BigNumber.from(30),\n  \"wise\": BigNumber.from(30),\n  \"revolut\": BigNumber.from(30),\n};\n\nexport const MIN_DEPOSIT_AMOUNT: any = {\n  \"venmo\": {\n    \"localhost\": usdc(20),\n    \"goerli\": usdc(20),\n    \"sepolia\": usdc(20),\n    \"base\": usdc(20),\n    \"base_staging\": usdc(10),\n  },\n  \"hdfc\": {\n    \"localhost\": usdc(21),\n    \"goerli\": usdc(20),\n    \"sepolia\": usdc(20),\n    \"base\": usdc(20),\n    \"base_staging\": usdc(10),\n  },\n  \"garanti\": {\n    \"localhost\": usdc(21),\n    \"goerli\": usdc(20),\n    \"sepolia\": usdc(20),\n    \"base\": usdc(20),\n    \"base_staging\": usdc(10),\n  },\n  \"wise\": {\n    \"localhost\": usdc(21),\n    \"goerli\": usdc(20),\n    \"sepolia\": usdc(20),\n    \"base\": usdc(20),\n    \"base_staging\": usdc(10),\n  },\n  \"revolut\": {\n    \"localhost\": usdc(22),\n    \"goerli\": usdc(20),\n    \"sepolia\": usdc(20),\n    \"base\": usdc(20),\n    \"base_staging\": usdc(10),\n  },\n};\nexport const MAX_ONRAMP_AMOUNT: any = {\n  \"venmo\": {\n    \"localhost\": usdc(999),\n    \"goerli\": usdc(999),\n    \"sepolia\": usdc(999),\n    \"base\": usdc(500),\n    \"base_staging\": usdc(999),\n  },\n  \"hdfc\": {\n    \"localhost\": usdc(998),\n    \"goerli\": usdc(999),\n    \"sepolia\": usdc(999),\n    \"base\": usdc(100),\n    \"base_staging\": usdc(100),\n  },\n  \"garanti\": {\n    \"localhost\": usdc(998),\n    \"goerli\": usdc(999),\n    \"sepolia\": usdc(999),\n    \"base\": usdc(100),\n    \"base_staging\": usdc(100),\n  },\n  \"wise\": {\n    \"localhost\": usdc(998),\n    \"goerli\": usdc(999),\n    \"sepolia\": usdc(999),\n    \"base\": usdc(200),\n    \"base_staging\": usdc(200),\n  },\n  \"revolut\": {\n    \"localhost\": usdc(22),\n    \"goerli\": usdc(20),\n    \"sepolia\": usdc(20),\n    \"base\": usdc(250),\n    \"base_staging\": usdc(10),\n  },\n};\nexport const INTENT_EXPIRATION_PERIOD: any = {\n  \"venmo\": {\n    \"localhost\": ONE_DAY_IN_SECONDS,\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS,\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"hdfc\": {\n    \"localhost\": ONE_DAY_IN_SECONDS.sub(1),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS,\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"garanti\": {\n    \"localhost\": ONE_DAY_IN_SECONDS.sub(2),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS,\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"wise\": {\n    \"localhost\": ONE_DAY_IN_SECONDS.sub(2),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS,\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"revolut\": {\n    \"localhost\": ONE_DAY_IN_SECONDS.sub(3),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS,\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n};\nexport const ONRAMP_COOL_DOWN_PERIOD: any = {\n  \"venmo\": {\n    \"localhost\": THREE_MINUTES_IN_SECONDS,\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS.div(2),\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"hdfc\": {\n    \"localhost\": THREE_MINUTES_IN_SECONDS.sub(1),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS.div(2),\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"garanti\": {\n    \"localhost\": THREE_MINUTES_IN_SECONDS.sub(2),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS.div(2),\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"wise\": {\n    \"localhost\": THREE_MINUTES_IN_SECONDS.sub(2),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS.div(2),\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n  \"revolut\": {\n    \"localhost\": THREE_MINUTES_IN_SECONDS.sub(3),\n    \"goerli\": THREE_MINUTES_IN_SECONDS,\n    \"sepolia\": THREE_MINUTES_IN_SECONDS,\n    \"base\": ONE_DAY_IN_SECONDS.div(2),\n    \"base_staging\": THREE_MINUTES_IN_SECONDS,\n  },\n};\nexport const SUSTAINABILITY_FEE: any = {\n  \"venmo\": {\n    \"localhost\": ether(.001),\n    \"goerli\": ether(.001),\n    \"sepolia\": ether(.001),\n    \"base\": ZERO,\n    \"base_staging\": ZERO,\n  },\n  \"hdfc\": {\n    \"localhost\": ether(.002),\n    \"goerli\": ether(.001),\n    \"sepolia\": ether(.001),\n    \"base\": ZERO,\n    \"base_staging\": ZERO,\n  },\n  \"garanti\": {\n    \"localhost\": ether(.002),\n    \"goerli\": ether(.001),\n    \"sepolia\": ether(.001),\n    \"base\": ZERO,\n    \"base_staging\": ZERO,\n  },\n  \"wise\": {\n    \"localhost\": ether(.002),\n    \"goerli\": ether(.001),\n    \"sepolia\": ether(.001),\n    \"base\": ZERO,\n    \"base_staging\": ZERO,\n  },\n  \"revolut\": {\n    \"localhost\": ether(.003),\n    \"goerli\": ether(.001),\n    \"sepolia\": ether(.001),\n    \"base\": ZERO,\n    \"base_staging\": ZERO,\n  },\n};\nexport const SUSTAINABILITY_FEE_RECIPIENT: any = {\n  \"venmo\": {\n    \"localhost\": \"\",\n    \"goerli\": \"\",\n    \"sepolia\": \"\",\n    \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n    \"base_staging\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n  },\n  \"hdfc\": {\n    \"localhost\": \"\",\n    \"goerli\": \"\",\n    \"sepolia\": \"\",\n    \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n    \"base_staging\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n  },\n  \"garanti\": {\n    \"localhost\": \"\",\n    \"goerli\": \"\",\n    \"sepolia\": \"\",\n    \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n    \"base_staging\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n  },\n  \"wise\": {\n    \"localhost\": \"\",\n    \"goerli\": \"\",\n    \"sepolia\": \"\",\n    \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n    \"base_staging\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n  },\n  \"revolut\": {\n    \"localhost\": \"\",\n    \"goerli\": \"\",\n    \"sepolia\": \"\",\n    \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n    \"base_staging\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n  },\n};\n\n// Global Parameters\nexport const MULTI_SIG: any = {\n  \"localhost\": \"0x70997970C51812dc3A010C7d01b50e0d17dc79C8\",\n  \"goerli\": \"\",\n  \"sepolia\": \"\",\n  \"base\": \"0x0bC26FF515411396DD588Abd6Ef6846E04470227\",\n  \"base_staging\": \"0xdd93E0f5fC32c86A568d87Cb4f08598f55E980F3\",\n};\n\n// USDC\nexport const USDC: any = {\n  \"base\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n  \"base_staging\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n};\n\n// For Goerli and localhost\nexport const USDC_MINT_AMOUNT = usdc(1000000);\nexport const USDC_RECIPIENT = \"0x1d2033DC6720e3eCC14aBB8C2349C7ED77E831ad\";\n"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/.chainId",
    "content": "11155111"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/GarantiBodyHashVerifier.json",
    "content": "{\n  \"address\": \"0x951be14c65cF2a8F854BD29cf353Dc1b0f61F372\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[4]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[4]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf345173a1891e5a9f506ec553469af9ecb8a85a83a0e124acebd3f8e81eaabd2\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x951be14c65cF2a8F854BD29cf353Dc1b0f61F372\",\n    \"transactionIndex\": 27,\n    \"gasUsed\": \"414222\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x2e0493f246311fa88b8d76232a5a963398546879d269f263e4c866f23094c644\",\n    \"transactionHash\": \"0xf345173a1891e5a9f506ec553469af9ecb8a85a83a0e124acebd3f8e81eaabd2\",\n    \"logs\": [],\n    \"blockNumber\": 5343966,\n    \"cumulativeGasUsed\": \"18630610\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"fddf950e5f6f8abf0d9e29e0433009ae\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\\\":\\\"Groth16Verifier\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\\\n    \\\\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\\\n    \\\\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\\\n    \\\\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\\\n    \\\\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x34f23022d66ef2114d8f42db369281cb2f06647bb0715d55b7fac28fa249ae79\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610687806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004361003e3660046105f7565b610057565b604051901515815260200160405180910390f35b600061056a565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2d84602728848e471bd1ba9e560f82ab8a7eec80bd3014f76ebd173d6ca628bc85527f1a7ded6d8fdaf30f436cf3f3bfa878a07585d245de1b30e632ec87025f97e82560208601526000608086018661019a87357f2eacdafb8a074f55c7eeaeaba8e637580efd6becf4cc32e3ffcb29d5f7d5c47c7f0ba89cd7566d8ba7283a2c695154fd3596a3fa79ceb3fff200e4a1bc6df50c0684610092565b6101ea60208801357f22c4fc2bb63514decde9458ccb4bc65a47aa468ef49618e4eda09120cf429d707f0fdf44fe63793ab49f743161b2aecf184517b4bb0fae7702da1f596ed3c85bd384610092565b61023a60408801357f260137477524ec7727275599f381fb4d4dcc29fed4c0333d45ca9638a7ad42c47f05b0b02830349454814f64e84c47e6efc8ab5b2eb0b771a4ba2079c48facffde84610092565b61028a60608801357f12c261380019d137f4c8e7e13bbb8231d5f1e834377311c5dc5e0f2b9d758db97f1f359c754273ab6f981835d1bb37f8c007d8b75ac24d775ff24098f2577f70f584610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610582600084013561005e565b61058f602084013561005e565b61059c604084013561005e565b6105a9606084013561005e565b6105b6608084013561005e565b6105c3818486888a6100fd565b90508060005260206000f35b80604081018310156105e057600080fd5b92915050565b80608081018310156105e057600080fd5b600080600080610180858703121561060e57600080fd5b61061886866105cf565b935061062786604087016105e6565b92506106368660c087016105cf565b91506106468661010087016105e6565b90509295919450925056fea264697066735822122046874129ae20c502a345d63d67e7592eee3ecb66a86222770db193011fa60b2164736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004361003e3660046105f7565b610057565b604051901515815260200160405180910390f35b600061056a565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2d84602728848e471bd1ba9e560f82ab8a7eec80bd3014f76ebd173d6ca628bc85527f1a7ded6d8fdaf30f436cf3f3bfa878a07585d245de1b30e632ec87025f97e82560208601526000608086018661019a87357f2eacdafb8a074f55c7eeaeaba8e637580efd6becf4cc32e3ffcb29d5f7d5c47c7f0ba89cd7566d8ba7283a2c695154fd3596a3fa79ceb3fff200e4a1bc6df50c0684610092565b6101ea60208801357f22c4fc2bb63514decde9458ccb4bc65a47aa468ef49618e4eda09120cf429d707f0fdf44fe63793ab49f743161b2aecf184517b4bb0fae7702da1f596ed3c85bd384610092565b61023a60408801357f260137477524ec7727275599f381fb4d4dcc29fed4c0333d45ca9638a7ad42c47f05b0b02830349454814f64e84c47e6efc8ab5b2eb0b771a4ba2079c48facffde84610092565b61028a60608801357f12c261380019d137f4c8e7e13bbb8231d5f1e834377311c5dc5e0f2b9d758db97f1f359c754273ab6f981835d1bb37f8c007d8b75ac24d775ff24098f2577f70f584610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610582600084013561005e565b61058f602084013561005e565b61059c604084013561005e565b6105a9606084013561005e565b6105b6608084013561005e565b6105c3818486888a6100fd565b90508060005260206000f35b80604081018310156105e057600080fd5b92915050565b80608081018310156105e057600080fd5b600080600080610180858703121561060e57600080fd5b61061886866105cf565b935061062786604087016105e6565b92506106368660c087016105cf565b91506106468661010087016105e6565b90509295919450925056fea264697066735822122046874129ae20c502a345d63d67e7592eee3ecb66a86222770db193011fa60b2164736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [],\n    \"types\": null\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/GarantiManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0xfA3f44be615a138F4f051D42A1A81641cA474E12\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xa2893e676c809f8a89474ecdb6b0e531562559c2f6b59c5fcc1ac731d70e1466\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xfA3f44be615a138F4f051D42A1A81641cA474E12\",\n    \"transactionIndex\": 13,\n    \"gasUsed\": \"563417\",\n    \"logsBloom\": \"0x00000000000000000000000100000000000000000000000000804000000000040000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x88efbd7c12a9f1a392c2d9e29fd4fadaecb7cf8b6e5efcbfbc3a9ae90076b1c3\",\n    \"transactionHash\": \"0xa2893e676c809f8a89474ecdb6b0e531562559c2f6b59c5fcc1ac731d70e1466\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 13,\n        \"blockNumber\": 5343965,\n        \"transactionHash\": \"0xa2893e676c809f8a89474ecdb6b0e531562559c2f6b59c5fcc1ac731d70e1466\",\n        \"address\": \"0xfA3f44be615a138F4f051D42A1A81641cA474E12\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 323,\n        \"blockHash\": \"0x88efbd7c12a9f1a392c2d9e29fd4fadaecb7cf8b6e5efcbfbc3a9ae90076b1c3\"\n      }\n    ],\n    \"blockNumber\": 5343965,\n    \"cumulativeGasUsed\": \"17255640\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x03a9c8babd6b4ad94d711f3ffbee84b7aa69f4cb0dd08d491c5a5c32eca15f60\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"fddf950e5f6f8abf0d9e29e0433009ae\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3631,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3634,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/GarantiRamp.json",
    "content": "{\n  \"address\": \"0xEfBDf422FA81071A04D2f89A70A0D938FEFA0795\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"garantiIban\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"garantiName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiIban\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"garantiName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiIban\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"garantiName\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct GarantiRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct GarantiRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_iban\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"isValidIban\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_garantiIban\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_garantiName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IGarantiSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf05bddae62fc89aec8e52f184f2f95d91ec77a482871fd33b66e388e27610b77\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xEfBDf422FA81071A04D2f89A70A0D938FEFA0795\",\n    \"transactionIndex\": 14,\n    \"gasUsed\": \"4032598\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000004000000000020000000000000000000800000000000040000000000000000000400000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xe9cecfc6b95f5a78e753b58f13f48ad22e65295a99debcb26dd3f9901c0583db\",\n    \"transactionHash\": \"0xf05bddae62fc89aec8e52f184f2f95d91ec77a482871fd33b66e388e27610b77\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 14,\n        \"blockNumber\": 5343964,\n        \"transactionHash\": \"0xf05bddae62fc89aec8e52f184f2f95d91ec77a482871fd33b66e388e27610b77\",\n        \"address\": \"0xEfBDf422FA81071A04D2f89A70A0D938FEFA0795\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 1591,\n        \"blockHash\": \"0xe9cecfc6b95f5a78e753b58f13f48ad22e65295a99debcb26dd3f9901c0583db\"\n      },\n      {\n        \"transactionIndex\": 14,\n        \"blockNumber\": 5343964,\n        \"transactionHash\": \"0xf05bddae62fc89aec8e52f184f2f95d91ec77a482871fd33b66e388e27610b77\",\n        \"address\": \"0xEfBDf422FA81071A04D2f89A70A0D938FEFA0795\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 1592,\n        \"blockHash\": \"0xe9cecfc6b95f5a78e753b58f13f48ad22e65295a99debcb26dd3f9901c0583db\"\n      }\n    ],\n    \"blockNumber\": 5343964,\n    \"cumulativeGasUsed\": \"27032759\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n    \"20000000\",\n    \"999000000\",\n    \"180\",\n    \"180\",\n    \"1000000000000000\",\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"fddf950e5f6f8abf0d9e29e0433009ae\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct GarantiRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_iban\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"isValidIban\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_garantiIban\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_garantiName\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"internalType\\\":\\\"struct IGarantiSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"internalType\\\":\\\"struct IGarantiRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the idHash being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(string,string,uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_garantiIban\\\":\\\"IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\",\\\"_garantiName\\\":\\\"Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"params\\\":{\\\"_bodyHashProof\\\":\\\"Parameters and signals for body hash proof\\\",\\\"_proof\\\":\\\"Parameters and signals for send email proof\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"params\\\":{\\\"_bodyHashProof\\\":\\\"Parameters and signals for body hash proof\\\",\\\"_proof\\\":\\\"Parameters and signals for registration email proof\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the idHash being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(string,string,uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a idHash from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiRamp.sol\\\":\\\"GarantiRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon3.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon3 {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x39cd67d4a7ef93e243c77b7c8a40c3842c060a7f444b0b2c875bce7d8d0c24fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IPoseidon6.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon6 {\\\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9609bcff68e45a22b551bf5f42a5ea62ea0b33e433a89f7c89a6b0714df09229\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon3 } from \\\\\\\"../../interfaces/IPoseidon3.sol\\\\\\\";\\\\nimport { IPoseidon6 } from \\\\\\\"../../interfaces/IPoseidon6.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiRegistrationProcessor } from \\\\\\\"./interfaces/IGarantiRegistrationProcessor.sol\\\\\\\";\\\\nimport { IGarantiSendProcessor } from \\\\\\\"./interfaces/IGarantiSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the idHash\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 idHash;                     // Hash of payment processor id\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's idHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IGarantiRegistrationProcessor _registrationProcessor,\\\\n        IGarantiSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _proof            Parameters and signals for registration email proof\\\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\\\n     */\\\\n    function register(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\\\\\"Account already associated with idHash\\\\\\\");\\\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\\\n\\\\n        accounts[msg.sender].idHash = idHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, idHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\\\\\"TR## #### #### #### #### #### ##\\\\\\\"\\\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        string memory _garantiIban,\\\\n        string memory _garantiName,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        require(isValidIban(_garantiIban), \\\\\\\"Invalid IBAN\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        AccountInfo storage account = accounts[msg.sender];\\\\n        account.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            garantiIban: _garantiIban,\\\\n            garantiName: _garantiName,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 idHash = accounts[msg.sender].idHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorIdHash != idHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[idHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _proof            Parameters and signals for send email proof\\\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\\\n     */\\\\n    function onRamp(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a idHash from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\\\n        bytes memory ibanBytes = bytes(_iban);\\\\n        if(ibanBytes.length != 32) { return false; }\\\\n\\\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\\\n            if (i < 2) {\\\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\\\n            } else if (i % 5 == 4) {\\\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\\\n                if(ibanBytes[i] != 0x20) { return false; }\\\\n            } else {\\\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\\\n            }\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _idHash,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperNameHash,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\\\n\\\\n        return idHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x11095008d889ee4205c6e43f9628207ec364b25ad6e9082e5b4647094fb99b7a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[11] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0f70e4fda7e77a71110f14b943f0be18414d3fde1f89611659f3bfa61e7d220\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[28] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70a70e2bf4861b7095bff34a55b10da9bc705735e40bed6104e179c0ecc3da25\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162004782380380620047828339810160408190526200003491620001dd565b6200003f3362000096565b6001600160a01b0387811660805260078790556008869055600a8590556009849055600b839055600c80546001600160a01b0319169183169190911790556200008888620000e6565b505050505050505062000263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f062000169565b6001600160a01b0381166200015b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001668162000096565b50565b6000546001600160a01b03163314620001c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000152565b565b6001600160a01b03811681146200016657600080fd5b600080600080600080600080610100898b031215620001fb57600080fd5b88516200020881620001c7565b60208a01519098506200021b81620001c7565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151915060e08901516200025281620001c7565b809150509295985092959890939650565b6080516144e76200029b600039600081816103a1015281816119c20152818161245d01528181613360015261340f01526144e76000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c8063715018a611610151578063b3fa4c01116100c3578063ecb3dc8811610087578063ecb3dc8814610657578063ecd618f014610660578063ed1692b814610680578063eea1d19714610693578063f2fde38b146106a6578063fbf15b1f146106b957600080fd5b8063b3fa4c0114610602578063d55f960d14610615578063d9478d2014610628578063e215ad591461063b578063e279d9641461064e57600080fd5b80639087beff116101155780639087beff1461057a5780639b357b5a1461058d5780639f9fb968146105a0578063a00555b3146105c0578063a1a954b7146105d3578063b02c43d0146105dc57600080fd5b8063715018a6146104b257806371a28f69146104ba5780637b510fe8146104cd5780638da5cb5b146104ed5780639021578a146104fe57600080fd5b806342987349116101ea5780635081d952116101ae5780635081d9521461043d5780635dd765151461045d57806360e0d21e14610470578063645006ca1461048357806366ec84191461048c578063711347621461049f57600080fd5b806342987349146103db57806343a170e6146103ee5780634595bba014610401578063485cc95514610421578063495223e71461043457600080fd5b80632a80cda31161023c5780632a80cda31461032c578063317dcc961461033f5780633389d5d514610352578063392e53cd146103755780633adba28a146103895780633e413bee1461039c57600080fd5b80630f1ef98c14610279578063133de6cb146102c5578063148172da146102da57806314ec32fa146102ed578063238c849414610323575b600080fd5b6102b261028736600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102d86102d336600461395e565b610700565b005b6102d86102e8366004613982565b61075d565b6102b26102fb36600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102b2600b5481565b6102d861033a366004613982565b61088f565b6102d861034d366004613982565b61091c565b610365610360366004613a52565b610959565b60405190151581526020016102bc565b60025461036590600160a01b900460ff1681565b6102d8610397366004613a87565b610ab4565b6103c37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102bc565b6102d86103e9366004613982565b611005565b6102d86103fc366004613ad3565b6110a6565b61041461040f36600461395e565b611160565b6040516102bc9190613b12565b6102d861042f366004613b56565b6111d9565b6102b260095481565b61045061044b36600461395e565b61126c565b6040516102bc9190613c9d565b6102d861046b366004613982565b6115d1565b6102d861047e366004613d29565b611670565b6102b260075481565b6102d861049a366004613982565b6116f9565b6102d86104ad366004613d4e565b611844565b6102d8611a37565b6104506104c8366004613d4e565b611a4b565b6104e06104db36600461395e565b611d48565b6040516102bc9190613df4565b6000546001600160a01b03166103c3565b61054761050c366004613982565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102bc565b6102d8610588366004613982565b611de2565b6102d861059b366004613982565b611e79565b6105b36105ae366004613982565b611f80565b6040516102bc9190613e4c565b6102d86105ce366004613e5f565b61215e565b6102b2600a5481565b6105ef6105ea366004613982565b61251a565b6040516102bc9796959493929190613ed3565b6102d861061036600461395e565b61266f565b6102d8610623366004613982565b612727565b600c546103c3906001600160a01b031681565b6001546103c3906001600160a01b031681565b6102b260085481565b6102b2600d5481565b61067361066e366004613f30565b612865565b6040516102bc9190613fa5565b6102d861068e36600461395e565b6129ca565b6002546103c3906001600160a01b031681565b6102d86106b436600461395e565b612a20565b6103656106c7366004614035565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b610708612a99565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107925760405162461bcd60e51b815260040161078990614061565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff161561080b5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610789565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108839083908590918252602082015260400190565b60405180910390a15050565b610897612a99565b806000036108e75760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610789565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc90602001610752565b610924612a99565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e90602001610752565b805160009082906020146109705750600092915050565b60005b8151811015610aaa5760028110156109ee57604160f81b82828151811061099c5761099c614098565b01602001516001600160f81b03191610806109da5750605a60f81b8282815181106109c9576109c9614098565b01602001516001600160f81b031916115b156109e9575060009392505050565b610a9a565b6109f96005826140c4565b600403610a3657818181518110610a1257610a12614098565b6020910101516001600160f81b031916600160fd1b146109e9575060009392505050565b603060f81b828281518110610a4d57610a4d614098565b01602001516001600160f81b0319161080610a8b5750603960f81b828281518110610a7a57610a7a614098565b01602001516001600160f81b031916115b15610a9a575060009392505050565b610aa3816140ee565b9050610973565b5060019392505050565b33600090815260046020526040902054610ae05760405162461bcd60e51b815260040161078990614061565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610b765760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610789565b6009546000848152600360205260409020600101544291610b9691614107565b1115610bf05760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610789565b60008381526003602052604090205415610c4c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610789565b828103610c9b5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610789565b81546001600160a01b0316610ceb5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610789565b60008511610d4a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610789565b600854851115610db95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610789565b6001600160a01b038416610e0f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610789565b6000610e1b8488612af3565b90508583600401541015610ed057600080610e3589612b5e565b9150915087818660040154610e4a9190614107565b1015610e8f5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610789565b610e998583612d06565b80856004016000828254610ead9190614107565b9250508190555080856005016000828254610ec8919061411a565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188546001600160a01b03199081169189169190911789559551600189018054909716971696909617909455905160028601555160038086019190915591516004948501558883525291822083905584018054889290610f7390849061411a565b9250508190555085836005016000828254610f8e9190614107565b9091555050600783018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b61100d612a99565b806000036110715760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610789565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a80390602001610752565b33600090815260046020526040902054156111125760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610789565b600061111e8383612d68565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a3505050565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156111cd57602002820191906000526020600020905b8154815260200190600101908083116111b9575b50505050509050919050565b6111e1612a99565b600254600160a01b900460ff16156112315760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610789565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156112ce57602002820191906000526020600020905b8154815260200190600101908083116112ba575b50505050509050805167ffffffffffffffff8111156112ef576112ef61399b565b60405190808252806020026020018201604052801561132857816020015b6113156137b2565b81526020019060019003908161130d5790505b50915060005b81518110156115ca57600082828151811061134b5761134b614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b0316825260018101805494965092949193909291840191906113999061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546113c59061412d565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b5050505050815260200160028201805461142b9061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546114579061412d565b80156114a45780601f10611479576101008083540402835291602001916114a4565b820191906000526020600020905b81548152906001019060200180831161148757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820180548060200260200160405190810160405280929190818152602001828054801561152457602002820191906000526020600020905b815481526020019060010190808311611510575b5050505050815250509050600061153a83612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284608001516115969190614107565b8152508685815181106115ab576115ab614098565b6020026020010181905250505050806115c3906140ee565b905061132e565b5050919050565b6115d9612a99565b66b1a2bc2ec5000081111561163b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610789565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e72567090602001610752565b600080600061167f8585612de2565b92509250925061168f8282613138565b82606001518260050160008282546116a7919061411a565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516116e89083613211565b6116f28184613303565b5050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166117795760405162461bcd60e51b815260040161078990614161565b80546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6117dc8184613138565b81606001518160050160008282546117f4919061411a565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516118359082613211565b61183f8383613303565b505050565b6000805b82518110156119a557600083828151811061186557611865614098565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6000806118e984612b5e565b915091506118f78383612d06565b8083600401546119079190614107565b6119119087614107565b955080836005016000828254611927919061411a565b9091555050825460048401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c643129061196e908590614107565b60405190815260200160405180910390a3600060048401556119908484613211565b505050508061199e906140ee565b9050611848565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f9190614190565b611a3f612a99565b611a4960006134e1565b565b6060815167ffffffffffffffff811115611a6757611a6761399b565b604051908082528060200260200182016040528015611aa057816020015b611a8d6137b2565b815260200190600190039081611a855790505b50905060005b8251811015611d42576000838281518110611ac357611ac3614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b031682526001810180549496509294919390929184019190611b119061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3d9061412d565b8015611b8a5780601f10611b5f57610100808354040283529160200191611b8a565b820191906000526020600020905b815481529060010190602001808311611b6d57829003601f168201915b50505050508152602001600282018054611ba39061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcf9061412d565b8015611c1c5780601f10611bf157610100808354040283529160200191611c1c565b820191906000526020600020905b815481529060010190602001808311611bff57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c9c57602002820191906000526020600020905b815481526020019060010190808311611c88575b50505050508152505090506000611cb283612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b03168152602001908152602001600020600001548152602001838152602001828460800151611d0e9190614107565b815250858581518110611d2357611d23614098565b602002602001018190525050505080611d3b906140ee565b9050611aa6565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b5050505050815250509050919050565b611dea612a99565b80600003611e445760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610789565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b3990602001610752565b33600090815260046020526040902054611ea55760405162461bcd60e51b815260040161078990614061565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f145760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610789565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f4a9060020183613531565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610883565b611f886137de565b6000828152600560209081526040918290208251610100810190935280546001600160a01b031683526001810180549192840191611fc59061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff19061412d565b801561203e5780601f106120135761010080835404028352916020019161203e565b820191906000526020600020905b81548152906001019060200180831161202157829003601f168201915b505050505081526020016002820180546120579061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546120839061412d565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611dd25760200282019190600052602060002090815481526020019060010190808311611dbe575050505050815250509050919050565b3360009081526004602052604090205461218a5760405162461bcd60e51b815260040161078990614061565b61219384610959565b6121ce5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b21024a120a760a11b6044820152606401610789565b336000908152600460205260409020600101546005116122305760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610789565b6007548210156122a15760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610789565b600081116122ff5760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610789565b600081612314670de0b6b3a7640000856141b2565b61231e91906141c9565b600d80549192506000919082612333836140ee565b90915550336000818152600460209081526040808320600180820180548083018255908652848620018790558251610100810184529586528584018d81528684018d9052606087018c9052608087018c905260a0870186905260c087018a90528351868152808601855260e0880152878652600590945291909320845181546001600160a01b0319166001600160a01b039091161781559151949550919390918201906123e0908261422b565b50604082015160028201906123f5908261422b565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151805161243991600784019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190614190565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a350505050505050565b600560205260009081526040902080546001820180546001600160a01b0390921692916125469061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546125729061412d565b80156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b5050505050908060020180546125d49061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546126009061412d565b801561264d5780601f106126225761010080835404028352916020019161264d565b820191906000526020600020905b81548152906001019060200180831161263057829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b612677612a99565b6001600160a01b0381166126d95760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610789565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e490602001610752565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361279c5760405162461bcd60e51b815260040161078990614161565b336000908152600460205260408082205483516001600160a01b031683529120541461280a5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610789565b60408082015160009081526005602052206128258184613138565b816060015181600401600082825461283d9190614107565b9091555050606082015160058201805460009061285b90849061411a565b9091555050505050565b606060008267ffffffffffffffff8111156128825761288261399b565b6040519080825280602002602001820160405280156128bb57816020015b6128a8613877565b8152602001906001900390816128a05790505b50905060005b838110156129c05760008585838181106128dd576128dd614098565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061295c5761295c614098565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106129a2576129a2614098565b60200260200101819052505050806129b9906140ee565b90506128c1565b5090505b92915050565b6129d2612a99565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c4190602001610752565b612a28612a99565b6001600160a01b038116612a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b612a96816134e1565b50565b6000546001600160a01b03163314611a495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610789565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b567f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826140c4565b949350505050565b60008181526005602090815260408083206007018054825181850281018501909352808352606094938493929190830182828015612bbb57602002820191906000526020600020905b815481526020019060010190808311612ba7575b50505050509050805167ffffffffffffffff811115612bdc57612bdc61399b565b604051908082528060200260200182016040528015612c05578160200160208202803683370190505b50925060005b8151811015612cff57600060066000848481518110612c2c57612c2c614098565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a549192504291612c9f91614107565b1015612cee57828281518110612cb757612cb7614098565b6020026020010151858381518110612cd157612cd1614098565b60209081029190910101526060810151612ceb9085614107565b93505b50612cf8816140ee565b9050612c0b565b5050915091565b60005b815181101561183f576000801b828281518110612d2857612d28614098565b602002602001015114612d5857612d5883838381518110612d4b57612d4b614098565b6020026020010151613138565b612d61816140ee565b9050612d09565b60015460405163dc28b2bf60e01b815260009182916001600160a01b039091169063dc28b2bf90612d9f9087908790600401614340565b6020604051808303816000875af1158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190614381565b612dea61389f565b600254604051630c44b27760e01b815260009182918291829182918291829182916001600160a01b0390911690630c44b27790612e2d908e908e9060040161439a565b60c0604051808303816000875af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7091906143db565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151989e50969c50949a509298509096509450909216612eff5760405162461bcd60e51b815260040161078990614161565b8682608001511115612f5e5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610789565b8581600201604051602001612f739190614425565b6040516020818303038152906040528051906020012014612fd65760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b8481600101604051602001612feb9190614425565b604051602081830303815290604052805190602001201461304e5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b81516001600160a01b031660009081526004602052604090205484146130b65760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610789565b8060060154670de0b6b3a764000083606001516130d391906141b2565b6130dd91906141c9565b8810156131255760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610789565b9099509750955050505050509250925092565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b0319908116909355805490921690915592849055839055919091556131dc6007840183613531565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816004015482600501546132279190614107565b90508060000361183f5781546001600160a01b03166000908152600460205260409020613257906001018461365a565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155906132c560018301826138e0565b6132d36002830160006138e0565b60038201600090556004820160009055600582016000905560068201600090556007820160006116f2919061391a565b6000600b546000146133cf57670de0b6b3a7640000600b54836060015161332a91906141b2565b61333491906141c9565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cd9190614190565b505b60008183606001516133e1919061411a565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015613458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347c9190614190565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061358d8480548060200260200160405190810160405280929190818152602001828054801561358257602002820191906000526020600020905b81548152602001906001019080831161356e575b5050505050846136ff565b91509150806135d65760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610789565b83546000906135e79060019061411a565b905080831461362c5784818154811061360257613602614098565b906000526020600020015485848154811061361f5761361f614098565b6000918252602090912001555b8480548061363c5761363c61449b565b60019003818190600052602060002001600090559055505b50505050565b6000806136b6848054806020026020016040519081016040528092919081815260200182805480156136ab57602002820191906000526020600020905b815481526020019060010190808311613697575b505050505084613762565b91509150806135d65760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610789565b81516000908190815b8181101561374f578486828151811061372357613723614098565b60200260200101510361373d5792506001915061375b9050565b80613747816140ee565b915050613708565b50600019600092509250505b9250929050565b81516000908190815b8181101561374f578486828151811061378657613786614098565b6020026020010151036137a05792506001915061375b9050565b806137aa816140ee565b91505061376b565b60408051608081018252600080825260208201529081016137d16137de565b8152602001600081525090565b60405180610100016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b50613873929150613934565b5090565b6040805160608101909152600081526020810161389261389f565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5080546138ec9061412d565b6000825580601f106138fc575050565b601f016020900490600052602060002090810190612a969190613934565b5080546000825590600052602060002090810190612a9691905b5b808211156138735760008155600101613935565b6001600160a01b0381168114612a9657600080fd5b60006020828403121561397057600080fd5b813561397b81613949565b9392505050565b60006020828403121561399457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139da576139da61399b565b604052919050565b600082601f8301126139f357600080fd5b813567ffffffffffffffff811115613a0d57613a0d61399b565b613a20601f8201601f19166020016139b1565b818152846020838601011115613a3557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613a6457600080fd5b813567ffffffffffffffff811115613a7b57600080fd5b612b56848285016139e2565b600080600060608486031215613a9c57600080fd5b83359250602084013591506040840135613ab581613949565b809150509250925092565b60006101808284031215611d4257600080fd5b6000808284036103e0811215613ae857600080fd5b61026080821215613af857600080fd5b849350613b0786828701613ac0565b925050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613b4a57835183529284019291840191600101613b2e565b50909695505050505050565b60008060408385031215613b6957600080fd5b8235613b7481613949565b91506020830135613b8481613949565b809150509250929050565b6000815180845260005b81811015613bb557602081850181015186830182015201613b99565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613c0557815187529582019590820190600101613be9565b509495945050505050565b600061010060018060a01b0383511684526020830151816020860152613c3882860182613b8f565b91505060408301518482036040860152613c528282613b8f565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152613c948282613bd5565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613d1b57603f1989840301855281516080815185528882015189860152878201518189870152613cfa82870182613c10565b60609384015196909301959095525094870194925090860190600101613cc4565b509098975050505050505050565b600080828403610600811215613d3e57600080fd5b61048080821215613af857600080fd5b60006020808385031215613d6157600080fd5b823567ffffffffffffffff80821115613d7957600080fd5b818501915085601f830112613d8d57600080fd5b813581811115613d9f57613d9f61399b565b8060051b9150613db08483016139b1565b8181529183018401918481019088841115613dca57600080fd5b938501935b83851015613de857843582529385019390850190613dcf565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613e415783518252928401926001929092019190840190613e21565b509695505050505050565b60208152600061397b6020830184613c10565b60008060008060808587031215613e7557600080fd5b843567ffffffffffffffff80821115613e8d57600080fd5b613e99888389016139e2565b95506020870135915080821115613eaf57600080fd5b50613ebc878288016139e2565b949794965050505060408301359260600135919050565b6001600160a01b038816815260e060208201819052600090613ef790830189613b8f565b8281036040840152613f098189613b8f565b9150508560608301528460808301528360a08301528260c083015298975050505050505050565b60008060208385031215613f4357600080fd5b823567ffffffffffffffff80821115613f5b57600080fd5b818501915085601f830112613f6f57600080fd5b813581811115613f7e57600080fd5b8660208260051b8501011115613f9357600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015614028578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613fc2565b5091979650505050505050565b6000806040838503121561404857600080fd5b823561405381613949565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600060018201614100576141006140d8565b5060010190565b808201808211156129c4576129c46140d8565b818103818111156129c4576129c46140d8565b600181811c9082168061414157607f821691505b602082108103611d4257634e487b7160e01b600052602260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6000602082840312156141a257600080fd5b8151801515811461397b57600080fd5b80820281158282048414176129c4576129c46140d8565b6000826141d8576141d86140ae565b500490565b601f82111561183f57600081815260208120601f850160051c810160208610156142045750805b601f850160051c820191505b8181101561422357828155600101614210565b505050505050565b815167ffffffffffffffff8111156142455761424561399b565b61425981614253845461412d565b846141dd565b602080601f83116001811461428e57600084156142765750858301515b600019600386901b1c1916600185901b178555614223565b600085815260208120601f198616915b828110156142bd5788860151825594840194600190910190840161429e565b50858210156142db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8060005b6002811015613654576040808386379384019391909101906001016142ef565b604081833761432460408301604083016142eb565b604060c0820160c0840137610100608081830182850137505050565b6103e08101604084833761435a60408301604086016142eb565b604060c0850160c0840137610100610160818601828501375061397b61026083018461430f565b60006020828403121561439357600080fd5b5051919050565b610600810160408483376143b460408301604086016142eb565b604060c0850160c0840137610100610380818601828501375061397b61048083018461430f565b60008060008060008060c087890312156143f457600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008083546144338161412d565b6001828116801561444b57600181146144605761448f565b60ff198416875282151583028701945061448f565b8760005260208060002060005b858110156144865781548a82015290840190820161446d565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea264697066735822122065e22fa908aee992b0d94bfe127dfd0a35300e5aac610167919a4c44944ddd6164736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106102745760003560e01c8063715018a611610151578063b3fa4c01116100c3578063ecb3dc8811610087578063ecb3dc8814610657578063ecd618f014610660578063ed1692b814610680578063eea1d19714610693578063f2fde38b146106a6578063fbf15b1f146106b957600080fd5b8063b3fa4c0114610602578063d55f960d14610615578063d9478d2014610628578063e215ad591461063b578063e279d9641461064e57600080fd5b80639087beff116101155780639087beff1461057a5780639b357b5a1461058d5780639f9fb968146105a0578063a00555b3146105c0578063a1a954b7146105d3578063b02c43d0146105dc57600080fd5b8063715018a6146104b257806371a28f69146104ba5780637b510fe8146104cd5780638da5cb5b146104ed5780639021578a146104fe57600080fd5b806342987349116101ea5780635081d952116101ae5780635081d9521461043d5780635dd765151461045d57806360e0d21e14610470578063645006ca1461048357806366ec84191461048c578063711347621461049f57600080fd5b806342987349146103db57806343a170e6146103ee5780634595bba014610401578063485cc95514610421578063495223e71461043457600080fd5b80632a80cda31161023c5780632a80cda31461032c578063317dcc961461033f5780633389d5d514610352578063392e53cd146103755780633adba28a146103895780633e413bee1461039c57600080fd5b80630f1ef98c14610279578063133de6cb146102c5578063148172da146102da57806314ec32fa146102ed578063238c849414610323575b600080fd5b6102b261028736600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102d86102d336600461395e565b610700565b005b6102d86102e8366004613982565b61075d565b6102b26102fb36600461395e565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102b2600b5481565b6102d861033a366004613982565b61088f565b6102d861034d366004613982565b61091c565b610365610360366004613a52565b610959565b60405190151581526020016102bc565b60025461036590600160a01b900460ff1681565b6102d8610397366004613a87565b610ab4565b6103c37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102bc565b6102d86103e9366004613982565b611005565b6102d86103fc366004613ad3565b6110a6565b61041461040f36600461395e565b611160565b6040516102bc9190613b12565b6102d861042f366004613b56565b6111d9565b6102b260095481565b61045061044b36600461395e565b61126c565b6040516102bc9190613c9d565b6102d861046b366004613982565b6115d1565b6102d861047e366004613d29565b611670565b6102b260075481565b6102d861049a366004613982565b6116f9565b6102d86104ad366004613d4e565b611844565b6102d8611a37565b6104506104c8366004613d4e565b611a4b565b6104e06104db36600461395e565b611d48565b6040516102bc9190613df4565b6000546001600160a01b03166103c3565b61054761050c366004613982565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102bc565b6102d8610588366004613982565b611de2565b6102d861059b366004613982565b611e79565b6105b36105ae366004613982565b611f80565b6040516102bc9190613e4c565b6102d86105ce366004613e5f565b61215e565b6102b2600a5481565b6105ef6105ea366004613982565b61251a565b6040516102bc9796959493929190613ed3565b6102d861061036600461395e565b61266f565b6102d8610623366004613982565b612727565b600c546103c3906001600160a01b031681565b6001546103c3906001600160a01b031681565b6102b260085481565b6102b2600d5481565b61067361066e366004613f30565b612865565b6040516102bc9190613fa5565b6102d861068e36600461395e565b6129ca565b6002546103c3906001600160a01b031681565b6102d86106b436600461395e565b612a20565b6103656106c7366004614035565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b610708612a99565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107925760405162461bcd60e51b815260040161078990614061565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff161561080b5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610789565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108839083908590918252602082015260400190565b60405180910390a15050565b610897612a99565b806000036108e75760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610789565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc90602001610752565b610924612a99565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e90602001610752565b805160009082906020146109705750600092915050565b60005b8151811015610aaa5760028110156109ee57604160f81b82828151811061099c5761099c614098565b01602001516001600160f81b03191610806109da5750605a60f81b8282815181106109c9576109c9614098565b01602001516001600160f81b031916115b156109e9575060009392505050565b610a9a565b6109f96005826140c4565b600403610a3657818181518110610a1257610a12614098565b6020910101516001600160f81b031916600160fd1b146109e9575060009392505050565b603060f81b828281518110610a4d57610a4d614098565b01602001516001600160f81b0319161080610a8b5750603960f81b828281518110610a7a57610a7a614098565b01602001516001600160f81b031916115b15610a9a575060009392505050565b610aa3816140ee565b9050610973565b5060019392505050565b33600090815260046020526040902054610ae05760405162461bcd60e51b815260040161078990614061565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610b765760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610789565b6009546000848152600360205260409020600101544291610b9691614107565b1115610bf05760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610789565b60008381526003602052604090205415610c4c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610789565b828103610c9b5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610789565b81546001600160a01b0316610ceb5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610789565b60008511610d4a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610789565b600854851115610db95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610789565b6001600160a01b038416610e0f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610789565b6000610e1b8488612af3565b90508583600401541015610ed057600080610e3589612b5e565b9150915087818660040154610e4a9190614107565b1015610e8f5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610789565b610e998583612d06565b80856004016000828254610ead9190614107565b9250508190555080856005016000828254610ec8919061411a565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188546001600160a01b03199081169189169190911789559551600189018054909716971696909617909455905160028601555160038086019190915591516004948501558883525291822083905584018054889290610f7390849061411a565b9250508190555085836005016000828254610f8e9190614107565b9091555050600783018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b61100d612a99565b806000036110715760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610789565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a80390602001610752565b33600090815260046020526040902054156111125760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610789565b600061111e8383612d68565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a3505050565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156111cd57602002820191906000526020600020905b8154815260200190600101908083116111b9575b50505050509050919050565b6111e1612a99565b600254600160a01b900460ff16156112315760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610789565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156112ce57602002820191906000526020600020905b8154815260200190600101908083116112ba575b50505050509050805167ffffffffffffffff8111156112ef576112ef61399b565b60405190808252806020026020018201604052801561132857816020015b6113156137b2565b81526020019060019003908161130d5790505b50915060005b81518110156115ca57600082828151811061134b5761134b614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b0316825260018101805494965092949193909291840191906113999061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546113c59061412d565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b5050505050815260200160028201805461142b9061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546114579061412d565b80156114a45780601f10611479576101008083540402835291602001916114a4565b820191906000526020600020905b81548152906001019060200180831161148757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820180548060200260200160405190810160405280929190818152602001828054801561152457602002820191906000526020600020905b815481526020019060010190808311611510575b5050505050815250509050600061153a83612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284608001516115969190614107565b8152508685815181106115ab576115ab614098565b6020026020010181905250505050806115c3906140ee565b905061132e565b5050919050565b6115d9612a99565b66b1a2bc2ec5000081111561163b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610789565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e72567090602001610752565b600080600061167f8585612de2565b92509250925061168f8282613138565b82606001518260050160008282546116a7919061411a565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516116e89083613211565b6116f28184613303565b5050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166117795760405162461bcd60e51b815260040161078990614161565b80546001600160a01b031633146117d25760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6117dc8184613138565b81606001518160050160008282546117f4919061411a565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516118359082613211565b61183f8383613303565b505050565b6000805b82518110156119a557600083828151811061186557611865614098565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118dd5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610789565b6000806118e984612b5e565b915091506118f78383612d06565b8083600401546119079190614107565b6119119087614107565b955080836005016000828254611927919061411a565b9091555050825460048401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c643129061196e908590614107565b60405190815260200160405180910390a3600060048401556119908484613211565b505050508061199e906140ee565b9050611848565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f9190614190565b611a3f612a99565b611a4960006134e1565b565b6060815167ffffffffffffffff811115611a6757611a6761399b565b604051908082528060200260200182016040528015611aa057816020015b611a8d6137b2565b815260200190600190039081611a855790505b50905060005b8251811015611d42576000838281518110611ac357611ac3614098565b60209081029190910181015160008181526005835260408082208151610100810190925280546001600160a01b031682526001810180549496509294919390929184019190611b119061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3d9061412d565b8015611b8a5780601f10611b5f57610100808354040283529160200191611b8a565b820191906000526020600020905b815481529060010190602001808311611b6d57829003601f168201915b50505050508152602001600282018054611ba39061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcf9061412d565b8015611c1c5780601f10611bf157610100808354040283529160200191611c1c565b820191906000526020600020905b815481529060010190602001808311611bff57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c9c57602002820191906000526020600020905b815481526020019060010190808311611c88575b50505050508152505090506000611cb283612b5e565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b03168152602001908152602001600020600001548152602001838152602001828460800151611d0e9190614107565b815250858581518110611d2357611d23614098565b602002602001018190525050505080611d3b906140ee565b9050611aa6565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b5050505050815250509050919050565b611dea612a99565b80600003611e445760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610789565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b3990602001610752565b33600090815260046020526040902054611ea55760405162461bcd60e51b815260040161078990614061565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f145760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610789565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f4a9060020183613531565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610883565b611f886137de565b6000828152600560209081526040918290208251610100810190935280546001600160a01b031683526001810180549192840191611fc59061412d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff19061412d565b801561203e5780601f106120135761010080835404028352916020019161203e565b820191906000526020600020905b81548152906001019060200180831161202157829003601f168201915b505050505081526020016002820180546120579061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546120839061412d565b80156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020018280548015611dd25760200282019190600052602060002090815481526020019060010190808311611dbe575050505050815250509050919050565b3360009081526004602052604090205461218a5760405162461bcd60e51b815260040161078990614061565b61219384610959565b6121ce5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b21024a120a760a11b6044820152606401610789565b336000908152600460205260409020600101546005116122305760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610789565b6007548210156122a15760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610789565b600081116122ff5760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610789565b600081612314670de0b6b3a7640000856141b2565b61231e91906141c9565b600d80549192506000919082612333836140ee565b90915550336000818152600460209081526040808320600180820180548083018255908652848620018790558251610100810184529586528584018d81528684018d9052606087018c9052608087018c905260a0870186905260c087018a90528351868152808601855260e0880152878652600590945291909320845181546001600160a01b0319166001600160a01b039091161781559151949550919390918201906123e0908261422b565b50604082015160028201906123f5908261422b565b50606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151805161243991600784019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156124af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d39190614190565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a350505050505050565b600560205260009081526040902080546001820180546001600160a01b0390921692916125469061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546125729061412d565b80156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b5050505050908060020180546125d49061412d565b80601f01602080910402602001604051908101604052809291908181526020018280546126009061412d565b801561264d5780601f106126225761010080835404028352916020019161264d565b820191906000526020600020905b81548152906001019060200180831161263057829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b612677612a99565b6001600160a01b0381166126d95760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610789565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e490602001610752565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361279c5760405162461bcd60e51b815260040161078990614161565b336000908152600460205260408082205483516001600160a01b031683529120541461280a5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610789565b60408082015160009081526005602052206128258184613138565b816060015181600401600082825461283d9190614107565b9091555050606082015160058201805460009061285b90849061411a565b9091555050505050565b606060008267ffffffffffffffff8111156128825761288261399b565b6040519080825280602002602001820160405280156128bb57816020015b6128a8613877565b8152602001906001900390816128a05790505b50905060005b838110156129c05760008585838181106128dd576128dd614098565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061295c5761295c614098565b6020908102929092013583525081810184905283516001600160a01b0316600090815260049091526040908190205491015284518590859081106129a2576129a2614098565b60200260200101819052505050806129b9906140ee565b90506128c1565b5090505b92915050565b6129d2612a99565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c4190602001610752565b612a28612a99565b6001600160a01b038116612a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b612a96816134e1565b50565b6000546001600160a01b03163314611a495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610789565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b567f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826140c4565b949350505050565b60008181526005602090815260408083206007018054825181850281018501909352808352606094938493929190830182828015612bbb57602002820191906000526020600020905b815481526020019060010190808311612ba7575b50505050509050805167ffffffffffffffff811115612bdc57612bdc61399b565b604051908082528060200260200182016040528015612c05578160200160208202803683370190505b50925060005b8151811015612cff57600060066000848481518110612c2c57612c2c614098565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a549192504291612c9f91614107565b1015612cee57828281518110612cb757612cb7614098565b6020026020010151858381518110612cd157612cd1614098565b60209081029190910101526060810151612ceb9085614107565b93505b50612cf8816140ee565b9050612c0b565b5050915091565b60005b815181101561183f576000801b828281518110612d2857612d28614098565b602002602001015114612d5857612d5883838381518110612d4b57612d4b614098565b6020026020010151613138565b612d61816140ee565b9050612d09565b60015460405163dc28b2bf60e01b815260009182916001600160a01b039091169063dc28b2bf90612d9f9087908790600401614340565b6020604051808303816000875af1158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190614381565b612dea61389f565b600254604051630c44b27760e01b815260009182918291829182918291829182916001600160a01b0390911690630c44b27790612e2d908e908e9060040161439a565b60c0604051808303816000875af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7091906143db565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151989e50969c50949a509298509096509450909216612eff5760405162461bcd60e51b815260040161078990614161565b8682608001511115612f5e5760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610789565b8581600201604051602001612f739190614425565b6040516020818303038152906040528051906020012014612fd65760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b8481600101604051602001612feb9190614425565b604051602081830303815290604052805190602001201461304e5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610789565b81516001600160a01b031660009081526004602052604090205484146130b65760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610789565b8060060154670de0b6b3a764000083606001516130d391906141b2565b6130dd91906141c9565b8810156131255760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610789565b9099509750955050505050509250925092565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b0319908116909355805490921690915592849055839055919091556131dc6007840183613531565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816004015482600501546132279190614107565b90508060000361183f5781546001600160a01b03166000908152600460205260409020613257906001018461365a565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155906132c560018301826138e0565b6132d36002830160006138e0565b60038201600090556004820160009055600582016000905560068201600090556007820160006116f2919061391a565b6000600b546000146133cf57670de0b6b3a7640000600b54836060015161332a91906141b2565b61333491906141c9565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cd9190614190565b505b60008183606001516133e1919061411a565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015613458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347c9190614190565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061358d8480548060200260200160405190810160405280929190818152602001828054801561358257602002820191906000526020600020905b81548152602001906001019080831161356e575b5050505050846136ff565b91509150806135d65760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610789565b83546000906135e79060019061411a565b905080831461362c5784818154811061360257613602614098565b906000526020600020015485848154811061361f5761361f614098565b6000918252602090912001555b8480548061363c5761363c61449b565b60019003818190600052602060002001600090559055505b50505050565b6000806136b6848054806020026020016040519081016040528092919081815260200182805480156136ab57602002820191906000526020600020905b815481526020019060010190808311613697575b505050505084613762565b91509150806135d65760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610789565b81516000908190815b8181101561374f578486828151811061372357613723614098565b60200260200101510361373d5792506001915061375b9050565b80613747816140ee565b915050613708565b50600019600092509250505b9250929050565b81516000908190815b8181101561374f578486828151811061378657613786614098565b6020026020010151036137a05792506001915061375b9050565b806137aa816140ee565b91505061376b565b60408051608081018252600080825260208201529081016137d16137de565b8152602001600081525090565b60405180610100016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b50613873929150613934565b5090565b6040805160608101909152600081526020810161389261389f565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5080546138ec9061412d565b6000825580601f106138fc575050565b601f016020900490600052602060002090810190612a969190613934565b5080546000825590600052602060002090810190612a9691905b5b808211156138735760008155600101613935565b6001600160a01b0381168114612a9657600080fd5b60006020828403121561397057600080fd5b813561397b81613949565b9392505050565b60006020828403121561399457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139da576139da61399b565b604052919050565b600082601f8301126139f357600080fd5b813567ffffffffffffffff811115613a0d57613a0d61399b565b613a20601f8201601f19166020016139b1565b818152846020838601011115613a3557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613a6457600080fd5b813567ffffffffffffffff811115613a7b57600080fd5b612b56848285016139e2565b600080600060608486031215613a9c57600080fd5b83359250602084013591506040840135613ab581613949565b809150509250925092565b60006101808284031215611d4257600080fd5b6000808284036103e0811215613ae857600080fd5b61026080821215613af857600080fd5b849350613b0786828701613ac0565b925050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613b4a57835183529284019291840191600101613b2e565b50909695505050505050565b60008060408385031215613b6957600080fd5b8235613b7481613949565b91506020830135613b8481613949565b809150509250929050565b6000815180845260005b81811015613bb557602081850181015186830182015201613b99565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613c0557815187529582019590820190600101613be9565b509495945050505050565b600061010060018060a01b0383511684526020830151816020860152613c3882860182613b8f565b91505060408301518482036040860152613c528282613b8f565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152613c948282613bd5565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613d1b57603f1989840301855281516080815185528882015189860152878201518189870152613cfa82870182613c10565b60609384015196909301959095525094870194925090860190600101613cc4565b509098975050505050505050565b600080828403610600811215613d3e57600080fd5b61048080821215613af857600080fd5b60006020808385031215613d6157600080fd5b823567ffffffffffffffff80821115613d7957600080fd5b818501915085601f830112613d8d57600080fd5b813581811115613d9f57613d9f61399b565b8060051b9150613db08483016139b1565b8181529183018401918481019088841115613dca57600080fd5b938501935b83851015613de857843582529385019390850190613dcf565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613e415783518252928401926001929092019190840190613e21565b509695505050505050565b60208152600061397b6020830184613c10565b60008060008060808587031215613e7557600080fd5b843567ffffffffffffffff80821115613e8d57600080fd5b613e99888389016139e2565b95506020870135915080821115613eaf57600080fd5b50613ebc878288016139e2565b949794965050505060408301359260600135919050565b6001600160a01b038816815260e060208201819052600090613ef790830189613b8f565b8281036040840152613f098189613b8f565b9150508560608301528460808301528360a08301528260c083015298975050505050505050565b60008060208385031215613f4357600080fd5b823567ffffffffffffffff80821115613f5b57600080fd5b818501915085601f830112613f6f57600080fd5b813581811115613f7e57600080fd5b8660208260051b8501011115613f9357600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015614028578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613fc2565b5091979650505050505050565b6000806040838503121561404857600080fd5b823561405381613949565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600060018201614100576141006140d8565b5060010190565b808201808211156129c4576129c46140d8565b818103818111156129c4576129c46140d8565b600181811c9082168061414157607f821691505b602082108103611d4257634e487b7160e01b600052602260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6000602082840312156141a257600080fd5b8151801515811461397b57600080fd5b80820281158282048414176129c4576129c46140d8565b6000826141d8576141d86140ae565b500490565b601f82111561183f57600081815260208120601f850160051c810160208610156142045750805b601f850160051c820191505b8181101561422357828155600101614210565b505050505050565b815167ffffffffffffffff8111156142455761424561399b565b61425981614253845461412d565b846141dd565b602080601f83116001811461428e57600084156142765750858301515b600019600386901b1c1916600185901b178555614223565b600085815260208120601f198616915b828110156142bd5788860151825594840194600190910190840161429e565b50858210156142db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8060005b6002811015613654576040808386379384019391909101906001016142ef565b604081833761432460408301604083016142eb565b604060c0820160c0840137610100608081830182850137505050565b6103e08101604084833761435a60408301604086016142eb565b604060c0850160c0840137610100610160818601828501375061397b61026083018461430f565b60006020828403121561439357600080fd5b5051919050565b610600810160408483376143b460408301604086016142eb565b604060c0850160c0840137610100610380818601828501375061397b61048083018461430f565b60008060008060008060c087890312156143f457600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60008083546144338161412d565b6001828116801561444b57600181146144605761448f565b60ff198416875282151583028701945061448f565b8760005260208060002060005b858110156144865781548a82015290840190820161446d565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea264697066735822122065e22fa908aee992b0d94bfe127dfd0a35300e5aac610167919a4c44944ddd6164736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the idHash being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(string,string,uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_garantiIban\": \"IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\",\n          \"_garantiName\": \"Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"params\": {\n          \"_bodyHashProof\": \"Parameters and signals for body hash proof\",\n          \"_proof\": \"Parameters and signals for send email proof\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"params\": {\n          \"_bodyHashProof\": \"Parameters and signals for body hash proof\",\n          \"_proof\": \"Parameters and signals for registration email proof\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the idHash being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(string,string,uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp((uint256[2],uint256[2][2],uint256[2],uint256[28]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register((uint256[2],uint256[2][2],uint256[2],uint256[11]),(uint256[2],uint256[2][2],uint256[2],uint256[4]))\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a idHash from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4181,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IGarantiRegistrationProcessor)6876\"\n      },\n      {\n        \"astId\": 4184,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IGarantiSendProcessor)6921\"\n      },\n      {\n        \"astId\": 4186,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4191,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4145_storage)\"\n      },\n      {\n        \"astId\": 4196,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)4082_storage)\"\n      },\n      {\n        \"astId\": 4201,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)4100_storage)\"\n      },\n      {\n        \"astId\": 4206,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)4121_storage)\"\n      },\n      {\n        \"astId\": 4208,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4210,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4212,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4214,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4216,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4218,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4220,\n        \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiRegistrationProcessor)6876\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IGarantiSendProcessor)6921\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)4082_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct GarantiRamp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)4082_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4145_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct GarantiRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)4145_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)4121_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct GarantiRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)4121_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)4100_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct GarantiRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)4100_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(AccountInfo)4082_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4078,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"idHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4081,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)4137_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 4132,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 4136,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)4100_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 4084,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4086,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"garantiIban\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4088,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"garantiName\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 4090,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4092,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4094,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4096,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4099,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_struct(GlobalAccountInfo)4145_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4139,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4141,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4144,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)4137_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)4121_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct GarantiRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 4112,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4114,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4116,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4118,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4120,\n            \"contract\": \"contracts/ramps/garanti/GarantiRamp.sol:GarantiRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/GarantiRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_garantiMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"_bodyHashVerifier\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bodyHashVerifier\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[11]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[11]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[11]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[11]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf01ef69a140c11d4b7c18e297cd97ebfdecdce8c51c7abc3b11f0f33c5c11fd0\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n    \"transactionIndex\": 25,\n    \"gasUsed\": \"1843313\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000040000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000080000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000004000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x6c36297b1dc6abe5a01f2acbd41f5bb44e52cb1d0a05b9c12902a2b2cae33d25\",\n    \"transactionHash\": \"0xf01ef69a140c11d4b7c18e297cd97ebfdecdce8c51c7abc3b11f0f33c5c11fd0\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 25,\n        \"blockNumber\": 5343967,\n        \"transactionHash\": \"0xf01ef69a140c11d4b7c18e297cd97ebfdecdce8c51c7abc3b11f0f33c5c11fd0\",\n        \"address\": \"0xFbBdAa7354fB1d40B48130F026e6DD371474dB8D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 329,\n        \"blockHash\": \"0x6c36297b1dc6abe5a01f2acbd41f5bb44e52cb1d0a05b9c12902a2b2cae33d25\"\n      }\n    ],\n    \"blockNumber\": 5343967,\n    \"cumulativeGasUsed\": \"19304269\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xEfBDf422FA81071A04D2f89A70A0D938FEFA0795\",\n    \"0xfA3f44be615a138F4f051D42A1A81641cA474E12\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"0x951be14c65cF2a8F854BD29cf353Dc1b0f61F372\",\n    \"garanti@info.garantibbva.com.tr\",\n    \"0\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"fddf950e5f6f8abf0d9e29e0433009ae\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_garantiMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"_bodyHashVerifier\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bodyHashVerifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"internalType\\\":\\\"struct IGarantiRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[11]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[11]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\\\":\\\"GarantiRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/garanti_registration_verifier.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiRegistrationProcessor } from \\\\\\\"./interfaces/IGarantiRegistrationProcessor.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiRegistrationProcessor is\\\\n    Groth16Verifier,\\\\n    IGarantiRegistrationProcessor,\\\\n    BaseProcessorV2\\\\n{\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n        /* ============ Public Variables ============ */\\\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _garantiMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {\\\\n        bodyHashVerifier = _bodyHashVerifier;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n        require(\\\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\\\n            \\\\\\\"Invalid body hash proof\\\\\\\"\\\\n        );\\\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [5:10] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [10] is the packed userIdHash\\\\n        userIdHash = bytes32(_proof.signals[10]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n\\\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\\\n        require(intermediateHash == inputHash, \\\\\\\"Invalid intermediate or output hash\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x898ba95c7383b134a46d8cb477e8550d4d5e317e56bbb44618a722fec6a22aa6\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[11] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc0f70e4fda7e77a71110f14b943f0be18414d3fde1f89611659f3bfa61e7d220\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/garanti_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\\\n    \\\\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\\\n    \\\\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\\\n    \\\\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\\\n    \\\\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\\\n    \\\\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\\\n    \\\\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\\\n    \\\\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\\\n    \\\\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\\\n    \\\\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\\\n    \\\\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\\\n    \\\\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x4e286a4edda914b22be175a44ccec43787ae1e04005831f5329b40dfde498a0c\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b50604051620021e7380380620021e783398101604081905262000034916200013b565b85858584846200004433620000bc565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002fe565b506004555050600580546001600160a01b0319166001600160a01b03969096169590951790945550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200015557600080fd5b865162000162816200010c565b8096505060208088015162000177816200010c565b60408901519096506200018a816200010c565b60608901519095506200019d816200010c565b60808901519094506001600160401b0380821115620001bb57600080fd5b818a0191508a601f830112620001d057600080fd5b815181811115620001e557620001e562000125565b604051601f8201601f19908116603f0116810190838211818310171562000210576200021062000125565b816040528281528d868487010111156200022957600080fd5b600093505b828410156200024d57848401860151818501870152928501926200022e565b600086848301015280975050505050505060a087015190509295509295509295565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a62000125565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611dfa620003ed600039600081816101150152610c6f0152611dfa6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063b870676c116100a2578063d0b71f9911610071578063d0b71f9914610224578063dbac582114610237578063dc28b2bf14610240578063f2fde38b14610253578063f6c7226b1461026657600080fd5b8063b870676c146101e1578063b9c6ea87146101f4578063c0d05fed14610207578063ced1e9781461021c57600080fd5b80638da5cb5b116100de5780638da5cb5b146101975780639895e5b7146101a8578063a8ef333f146101bb578063b2a3fda4146101ce57600080fd5b806315d276e11461011057806319d09152146101545780633d0c9cc414610177578063715018a61461018d575b600080fd5b6101377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101676101623660046117e6565b610279565b604051901515815260200161014b565b61017f600781565b60405190815260200161014b565b6101956102ed565b005b6000546001600160a01b0316610137565b600554610137906001600160a01b031681565b600154610137906001600160a01b031681565b6101956101dc3660046117e6565b610301565b600254610137906001600160a01b031681565b610167610202366004611810565b61030e565b61020f610b18565b60405161014b919061189a565b61020f610ba6565b6101956102323660046118e2565b610c38565b61017f60045481565b61017f61024e366004611906565b610c62565b6101956102613660046118e2565b610fa3565b610195610274366004611964565b611019565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e79190611a15565b92915050565b6102f5611031565b6102ff600061108b565b565b610309611031565b600455565b6000610a54565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610346576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161037c576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103ad576000805260206000f35b5050505050565b7f152dbeb8b8ab5eac60f4eef36d566fc91e5bb94e9ef0a08ec6c32127b1e5a5f285527f141de924cf08572281bf199f2e95a5e4b2573700ac3bf62f391ea2c4fbf78cee60208601526000608086018661045187357f053ddcea331e82cb4f9383d3df2ceb5d593bd9818ac8fc8bb1067ba10e629aa37f25041758d837741ae0d2ef251976f958e3c2705396cea1e9274039c0b18e8d7c84610349565b6104a160208801357f03c565627ff60ffc102246e6011808710c2ded87eb016e91cb18da96b1f3133b7f02a65c41c7e83b0c9f02b9370500a2f8355a6bbd5b1d9b06c4aa66f8799a40b284610349565b6104f160408801357f2c5b5bbde6c28b0991602a967c1fe5e32c2246d7d2880808e48265fb448e8f127f1230e04a6fd464834afed47a0ceaaaf77075c298e0db455136f4c2e218552d2b84610349565b61054160608801357f120c68be04314a872c0c388ec55c9cf3b368684ba8a50dab6d2abfb8996527827f0fc0e7d2a54f0a5a5133c038fc67a6d078b688e3c7ce78d00afb06e5b795273284610349565b61059160808801357f23819bc7be63a25573e216a2fc729f78d4bd4733558a6a6a4e98d2e175497ab27f2e6c0c05c2879447c6a65803421ba7ec6b6ba7c636f85f8e6a9ea529716abd1784610349565b6105e160a08801357f0ba21ee1f8053b9ff0fb5e743a04ec8ea70d255d0da0cbeb96556b0744a9a19c7f25a1bb0f9d263a96e44514dcba335f1991134fb33e77bf8a98e400a14ba6724b84610349565b61063160c08801357f20ac36f76fb33007fe57317ad2a6f39b907fe7da3d0c817d30ef35869d9dc4fb7f181a3c6101a924a62e0423a93c5a8ee369634777d8c4d38a4e4f9f19c0c2198384610349565b61068160e08801357f07dea76d67502b94bb38d5cd0a11ffff409213105254477105eae49a52f4ea217f1ef2ffedde9413306e78a2d35b9e6ca44cc080626abd82b44da4a9abad937cfb84610349565b6106d26101008801357f2b4a0f65746c64cfdf33690e101dc7ad6ab74e9269f2fca0a3d102d7a074a8167f01f3543d78cc7400d2d3581aaea774bb4ef7529860d8fd1c25db5a5d9cf9e07384610349565b6107236101208801357f059775a03288dbaecef98e8bbbf58b3b18cbddab69166669fde01f14460255157f2858e3c69ac92153a24e1bca97f59caecbce8d6f6d7100c615b4262a4cce619484610349565b6107746101408801357f101766538ecad8f3ad02975172f78d4a1b68dfe85762b81cfc20b5c15aedce857f1b846bd35a2b1db5876801ef17b9c07aa4be33cbf19511eada4a1d6a6ae42ef284610349565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a6c6000840135610315565b610a796020840135610315565b610a866040840135610315565b610a936060840135610315565b610aa06080840135610315565b610aad60a0840135610315565b610aba60c0840135610315565b610ac760e0840135610315565b610ad5610100840135610315565b610ae3610120840135610315565b610af1610140840135610315565b610aff610160840135610315565b610b0c818486888a6103b4565b90508060005260206000f35b60038054610b2590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190611a37565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b606060038054610bb590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190611a37565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b610c40611031565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ce15760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163b9c6ea8760e01b8152309163b9c6ea8791610d149187919082019060c0830190610100840190600401611a95565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611a15565b610d915760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610cd8565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610dd091869182019060c0830190610100840190600401611ac7565b602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611a15565b610e5d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f660000000000000000006044820152606401610cd8565b610e6f836101000183610100016110db565b610e7d610100840135610279565b610ec95760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610cd8565b6000610edc84610100016005600a6111bc565b90506003604051610eed9190611b0e565b604051809103902081604051602001610f069190611b84565b6040516020818303038152906040528051906020012014610f695760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610cd8565b610f9884604051602001610f7d9190611ba0565b60405160208183030381529060405280519060200120611297565b505050610240013590565b610fab611031565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd8565b6103468161108b565b611021611031565b600361102d8282611c28565b5050565b6000546001600160a01b031633146102ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cd8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e08501528585013561010085015290850135610120808501919091528451808503909101815261014090930190935281519101208082146111b65760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b6064820152608401610cd8565b50505050565b606060006111ca8484611cfe565b60ff1667ffffffffffffffff8111156111e5576111e561194e565b60405190808252806020026020018201604052801561120e578160200160208202803683370190505b50905060ff84165b8360ff16811015611273578581600b811061123357611233611af8565b60200201358261124660ff881684611d17565b8151811061125657611256611af8565b60209081029190910101528061126b81611d2a565b915050611216565b5061128e600782516112859190611d43565b829060076113ab565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190611a15565b156113515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610cd8565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561139757600080fd5b505af11580156103ad573d6000803e3d6000fd5b60606000808386516113bd9190611d43565b67ffffffffffffffff8111156113d5576113d561194e565b6040519080825280601f01601f1916602001820160405280156113ff576020820181803683370190505b5090506000805b87518161ffff1610156115b6576000888261ffff168151811061142b5761142b611af8565b6020026020010151905060008767ffffffffffffffff8111156114505761145061194e565b604051908082528060200260200182016040528015611479578160200160208202803683370190505b50905060005b888110156114cb57611492816008611d43565b83901c8282815181106114a7576114a7611af8565b60ff90921660209283029190910190910152806114c381611d2a565b91505061147f565b5060005b888110156115a05760008282815181106114eb576114eb611af8565b602002602001015160ff16905080600014611563578060f81b87878151811061151657611516611af8565b60200101906001600160f81b031916908160001a9053508561153781611d2a565b96506115469050600289611d5a565b60ff1660000361155e5761155b600189611d8a565b97505b611586565b61156e600289611d5a565b60ff1660010361158657611583600189611d8a565b97505b5060089290921c918061159881611d2a565b9150506114cf565b50505080806115ae90611da3565b915050611406565b5060018360ff1610156116575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610cd8565b858111156116c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610cd8565b60006116d0836116dc565b98975050505050505050565b8051606090829060005b82518110156117315782818151811061170157611701611af8565b01602001516001600160f81b03191660000361171f57809150611731565b8061172981611d2a565b9150506116e6565b5060008167ffffffffffffffff81111561174d5761174d61194e565b6040519080825280601f01601f191660200182016040528015611777576020820181803683370190505b50905060005b828110156117dd5783818151811061179757611797611af8565b602001015160f81c60f81b8282815181106117b4576117b4611af8565b60200101906001600160f81b031916908160001a905350806117d581611d2a565b91505061177d565b50949350505050565b6000602082840312156117f857600080fd5b5035919050565b80604081018310156102e757600080fd5b60008060008061026080868803121561182857600080fd5b61183287876117ff565b945060c086018781111561184557600080fd5b60408701945061185588826117ff565b93505086818701111561186757600080fd5b50929591945092610100019150565b60005b83811015611891578181015183820152602001611879565b50506000910152565b60208152600082518060208401526118b9816040850160208701611876565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034657600080fd5b6000602082840312156118f457600080fd5b81356118ff816118cd565b9392505050565b6000808284036103e081121561191b57600080fd5b6102608082121561192b57600080fd5b84935061018061025f198301121561194257600080fd5b92959390920193505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561197657600080fd5b813567ffffffffffffffff8082111561198e57600080fd5b818401915084601f8301126119a257600080fd5b8135818111156119b4576119b461194e565b604051601f8201601f19908116603f011681019083821181831017156119dc576119dc61194e565b816040528281528760208487010111156119f557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a2757600080fd5b815180151581146118ff57600080fd5b600181811c90821680611a4b57607f821691505b602082108103611a6b57634e487b7160e01b600052602260045260246000fd5b50919050565b8060005b60028110156111b657604080838637938401939190910190600101611a75565b61026081016040868337611aac6040830186611a71565b60408460c08401376101608361010084013795945050505050565b61018081016040868337611ade6040830186611a71565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808354611b1c81611a37565b60018281168015611b345760018114611b4957611b78565b60ff1984168752821515830287019450611b78565b8760005260208060002060005b85811015611b6f5781548a820152908401908201611b56565b50505082870194505b50929695505050505050565b60008251611b96818460208701611876565b9190910192915050565b61026081016040838337611bba6040830160408501611a71565b604060c0840160c0840137610100610160818501828501375092915050565b601f821115611c2357600081815260208120601f850160051c81016020861015611c005750805b601f850160051c820191505b81811015611c1f57828155600101611c0c565b5050505b505050565b815167ffffffffffffffff811115611c4257611c4261194e565b611c5681611c508454611a37565b84611bd9565b602080601f831160018114611c8b5760008415611c735750858301515b600019600386901b1c1916600185901b178555611c1f565b600085815260208120601f198616915b82811015611cba57888601518255948401946001909101908401611c9b565b5085821015611cd85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102e7576102e7611ce8565b818103818111156102e7576102e7611ce8565b600060018201611d3c57611d3c611ce8565b5060010190565b80820281158282048414176102e7576102e7611ce8565b600060ff831680611d7b57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102e7576102e7611ce8565b600061ffff808316818103611dba57611dba611ce8565b600101939250505056fea2646970667358221220443e0fcd4400904de06631c587525d0efb294c3850dcd37e7ae7b03e227b650d64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063b870676c116100a2578063d0b71f9911610071578063d0b71f9914610224578063dbac582114610237578063dc28b2bf14610240578063f2fde38b14610253578063f6c7226b1461026657600080fd5b8063b870676c146101e1578063b9c6ea87146101f4578063c0d05fed14610207578063ced1e9781461021c57600080fd5b80638da5cb5b116100de5780638da5cb5b146101975780639895e5b7146101a8578063a8ef333f146101bb578063b2a3fda4146101ce57600080fd5b806315d276e11461011057806319d09152146101545780633d0c9cc414610177578063715018a61461018d575b600080fd5b6101377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101676101623660046117e6565b610279565b604051901515815260200161014b565b61017f600781565b60405190815260200161014b565b6101956102ed565b005b6000546001600160a01b0316610137565b600554610137906001600160a01b031681565b600154610137906001600160a01b031681565b6101956101dc3660046117e6565b610301565b600254610137906001600160a01b031681565b610167610202366004611810565b61030e565b61020f610b18565b60405161014b919061189a565b61020f610ba6565b6101956102323660046118e2565b610c38565b61017f60045481565b61017f61024e366004611906565b610c62565b6101956102613660046118e2565b610fa3565b610195610274366004611964565b611019565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e79190611a15565b92915050565b6102f5611031565b6102ff600061108b565b565b610309611031565b600455565b6000610a54565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610346576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161037c576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103ad576000805260206000f35b5050505050565b7f152dbeb8b8ab5eac60f4eef36d566fc91e5bb94e9ef0a08ec6c32127b1e5a5f285527f141de924cf08572281bf199f2e95a5e4b2573700ac3bf62f391ea2c4fbf78cee60208601526000608086018661045187357f053ddcea331e82cb4f9383d3df2ceb5d593bd9818ac8fc8bb1067ba10e629aa37f25041758d837741ae0d2ef251976f958e3c2705396cea1e9274039c0b18e8d7c84610349565b6104a160208801357f03c565627ff60ffc102246e6011808710c2ded87eb016e91cb18da96b1f3133b7f02a65c41c7e83b0c9f02b9370500a2f8355a6bbd5b1d9b06c4aa66f8799a40b284610349565b6104f160408801357f2c5b5bbde6c28b0991602a967c1fe5e32c2246d7d2880808e48265fb448e8f127f1230e04a6fd464834afed47a0ceaaaf77075c298e0db455136f4c2e218552d2b84610349565b61054160608801357f120c68be04314a872c0c388ec55c9cf3b368684ba8a50dab6d2abfb8996527827f0fc0e7d2a54f0a5a5133c038fc67a6d078b688e3c7ce78d00afb06e5b795273284610349565b61059160808801357f23819bc7be63a25573e216a2fc729f78d4bd4733558a6a6a4e98d2e175497ab27f2e6c0c05c2879447c6a65803421ba7ec6b6ba7c636f85f8e6a9ea529716abd1784610349565b6105e160a08801357f0ba21ee1f8053b9ff0fb5e743a04ec8ea70d255d0da0cbeb96556b0744a9a19c7f25a1bb0f9d263a96e44514dcba335f1991134fb33e77bf8a98e400a14ba6724b84610349565b61063160c08801357f20ac36f76fb33007fe57317ad2a6f39b907fe7da3d0c817d30ef35869d9dc4fb7f181a3c6101a924a62e0423a93c5a8ee369634777d8c4d38a4e4f9f19c0c2198384610349565b61068160e08801357f07dea76d67502b94bb38d5cd0a11ffff409213105254477105eae49a52f4ea217f1ef2ffedde9413306e78a2d35b9e6ca44cc080626abd82b44da4a9abad937cfb84610349565b6106d26101008801357f2b4a0f65746c64cfdf33690e101dc7ad6ab74e9269f2fca0a3d102d7a074a8167f01f3543d78cc7400d2d3581aaea774bb4ef7529860d8fd1c25db5a5d9cf9e07384610349565b6107236101208801357f059775a03288dbaecef98e8bbbf58b3b18cbddab69166669fde01f14460255157f2858e3c69ac92153a24e1bca97f59caecbce8d6f6d7100c615b4262a4cce619484610349565b6107746101408801357f101766538ecad8f3ad02975172f78d4a1b68dfe85762b81cfc20b5c15aedce857f1b846bd35a2b1db5876801ef17b9c07aa4be33cbf19511eada4a1d6a6ae42ef284610349565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a6c6000840135610315565b610a796020840135610315565b610a866040840135610315565b610a936060840135610315565b610aa06080840135610315565b610aad60a0840135610315565b610aba60c0840135610315565b610ac760e0840135610315565b610ad5610100840135610315565b610ae3610120840135610315565b610af1610140840135610315565b610aff610160840135610315565b610b0c818486888a6103b4565b90508060005260206000f35b60038054610b2590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190611a37565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b606060038054610bb590611a37565b80601f0160208091040260200160405190810160405280929190818152602001828054610be190611a37565b8015610c2e5780601f10610c0357610100808354040283529160200191610c2e565b820191906000526020600020905b815481529060010190602001808311610c1157829003601f168201915b5050505050905090565b610c40611031565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ce15760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163b9c6ea8760e01b8152309163b9c6ea8791610d149187919082019060c0830190610100840190600401611a95565b602060405180830381865afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611a15565b610d915760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610cd8565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610dd091869182019060c0830190610100840190600401611ac7565b602060405180830381865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611a15565b610e5d5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f660000000000000000006044820152606401610cd8565b610e6f836101000183610100016110db565b610e7d610100840135610279565b610ec95760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610cd8565b6000610edc84610100016005600a6111bc565b90506003604051610eed9190611b0e565b604051809103902081604051602001610f069190611b84565b6040516020818303038152906040528051906020012014610f695760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610cd8565b610f9884604051602001610f7d9190611ba0565b60405160208183030381529060405280519060200120611297565b505050610240013590565b610fab611031565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd8565b6103468161108b565b611021611031565b600361102d8282611c28565b5050565b6000546001600160a01b031633146102ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cd8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e08501528585013561010085015290850135610120808501919091528451808503909101815261014090930190935281519101208082146111b65760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b6064820152608401610cd8565b50505050565b606060006111ca8484611cfe565b60ff1667ffffffffffffffff8111156111e5576111e561194e565b60405190808252806020026020018201604052801561120e578160200160208202803683370190505b50905060ff84165b8360ff16811015611273578581600b811061123357611233611af8565b60200201358261124660ff881684611d17565b8151811061125657611256611af8565b60209081029190910101528061126b81611d2a565b915050611216565b5061128e600782516112859190611d43565b829060076113ab565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190611a15565b156113515760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610cd8565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561139757600080fd5b505af11580156103ad573d6000803e3d6000fd5b60606000808386516113bd9190611d43565b67ffffffffffffffff8111156113d5576113d561194e565b6040519080825280601f01601f1916602001820160405280156113ff576020820181803683370190505b5090506000805b87518161ffff1610156115b6576000888261ffff168151811061142b5761142b611af8565b6020026020010151905060008767ffffffffffffffff8111156114505761145061194e565b604051908082528060200260200182016040528015611479578160200160208202803683370190505b50905060005b888110156114cb57611492816008611d43565b83901c8282815181106114a7576114a7611af8565b60ff90921660209283029190910190910152806114c381611d2a565b91505061147f565b5060005b888110156115a05760008282815181106114eb576114eb611af8565b602002602001015160ff16905080600014611563578060f81b87878151811061151657611516611af8565b60200101906001600160f81b031916908160001a9053508561153781611d2a565b96506115469050600289611d5a565b60ff1660000361155e5761155b600189611d8a565b97505b611586565b61156e600289611d5a565b60ff1660010361158657611583600189611d8a565b97505b5060089290921c918061159881611d2a565b9150506114cf565b50505080806115ae90611da3565b915050611406565b5060018360ff1610156116575760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610cd8565b858111156116c55760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610cd8565b60006116d0836116dc565b98975050505050505050565b8051606090829060005b82518110156117315782818151811061170157611701611af8565b01602001516001600160f81b03191660000361171f57809150611731565b8061172981611d2a565b9150506116e6565b5060008167ffffffffffffffff81111561174d5761174d61194e565b6040519080825280601f01601f191660200182016040528015611777576020820181803683370190505b50905060005b828110156117dd5783818151811061179757611797611af8565b602001015160f81c60f81b8282815181106117b4576117b4611af8565b60200101906001600160f81b031916908160001a905350806117d581611d2a565b91505061177d565b50949350505050565b6000602082840312156117f857600080fd5b5035919050565b80604081018310156102e757600080fd5b60008060008061026080868803121561182857600080fd5b61183287876117ff565b945060c086018781111561184557600080fd5b60408701945061185588826117ff565b93505086818701111561186757600080fd5b50929591945092610100019150565b60005b83811015611891578181015183820152602001611879565b50506000910152565b60208152600082518060208401526118b9816040850160208701611876565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034657600080fd5b6000602082840312156118f457600080fd5b81356118ff816118cd565b9392505050565b6000808284036103e081121561191b57600080fd5b6102608082121561192b57600080fd5b84935061018061025f198301121561194257600080fd5b92959390920193505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561197657600080fd5b813567ffffffffffffffff8082111561198e57600080fd5b818401915084601f8301126119a257600080fd5b8135818111156119b4576119b461194e565b604051601f8201601f19908116603f011681019083821181831017156119dc576119dc61194e565b816040528281528760208487010111156119f557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611a2757600080fd5b815180151581146118ff57600080fd5b600181811c90821680611a4b57607f821691505b602082108103611a6b57634e487b7160e01b600052602260045260246000fd5b50919050565b8060005b60028110156111b657604080838637938401939190910190600101611a75565b61026081016040868337611aac6040830186611a71565b60408460c08401376101608361010084013795945050505050565b61018081016040868337611ade6040830186611a71565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808354611b1c81611a37565b60018281168015611b345760018114611b4957611b78565b60ff1984168752821515830287019450611b78565b8760005260208060002060005b85811015611b6f5781548a820152908401908201611b56565b50505082870194505b50929695505050505050565b60008251611b96818460208701611876565b9190910192915050565b61026081016040838337611bba6040830160408501611a71565b604060c0840160c0840137610100610160818501828501375092915050565b601f821115611c2357600081815260208120601f850160051c81016020861015611c005750805b601f850160051c820191505b81811015611c1f57828155600101611c0c565b5050505b505050565b815167ffffffffffffffff811115611c4257611c4261194e565b611c5681611c508454611a37565b84611bd9565b602080601f831160018114611c8b5760008415611c735750858301515b600019600386901b1c1916600185901b178555611c1f565b600085815260208120601f198616915b82811015611cba57888601518255948401946001909101908401611c9b565b5085821015611cd85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102e7576102e7611ce8565b818103818111156102e7576102e7611ce8565b600060018201611d3c57611d3c611ce8565b5060010190565b80820281158282048414176102e7576102e7611ce8565b600060ff831680611d7b57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102e7576102e7611ce8565b600061ffff808316818103611dba57611dba611ce8565b600101939250505056fea2646970667358221220443e0fcd4400904de06631c587525d0efb294c3850dcd37e7ae7b03e227b650d64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3392,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3566\"\n      },\n      {\n        \"astId\": 3395,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3771\"\n      },\n      {\n        \"astId\": 3397,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3399,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 6169,\n        \"contract\": \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol:GarantiRegistrationProcessor\",\n        \"label\": \"bodyHashVerifier\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_contract(IGarantiBodySuffixHashVerifier)6841\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiBodySuffixHashVerifier)6841\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3566\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3771\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/GarantiSendProcessor.json",
    "content": "{\n  \"address\": \"0xd30087458186424C12BEAEbf1167142284E33437\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_garantiMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"_bodyHashVerifier\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"bodyHashVerifier\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IGarantiBodySuffixHashVerifier\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[28]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[28]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[4]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[4]\"\n            }\n          ],\n          \"internalType\": \"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\",\n          \"name\": \"_bodyHashProof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperNameHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[28]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[28]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xe2bb61397f53d883ebdedec41376a0d800bc3c0158e31bcfe70f7750e1e8e767\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xd30087458186424C12BEAEbf1167142284E33437\",\n    \"transactionIndex\": 14,\n    \"gasUsed\": \"2404289\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000010000000000000800000000000040000000000000000000000000008000000000000000000000000002000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x7e1f19b835585403e025fd7edd1ce7cf8deae48d85e29bba23db129dede60520\",\n    \"transactionHash\": \"0xe2bb61397f53d883ebdedec41376a0d800bc3c0158e31bcfe70f7750e1e8e767\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 14,\n        \"blockNumber\": 5343968,\n        \"transactionHash\": \"0xe2bb61397f53d883ebdedec41376a0d800bc3c0158e31bcfe70f7750e1e8e767\",\n        \"address\": \"0xd30087458186424C12BEAEbf1167142284E33437\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 16,\n        \"blockHash\": \"0x7e1f19b835585403e025fd7edd1ce7cf8deae48d85e29bba23db129dede60520\"\n      }\n    ],\n    \"blockNumber\": 5343968,\n    \"cumulativeGasUsed\": \"3785743\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xEfBDf422FA81071A04D2f89A70A0D938FEFA0795\",\n    \"0xfA3f44be615a138F4f051D42A1A81641cA474E12\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"0x951be14c65cF2a8F854BD29cf353Dc1b0f61F372\",\n    \"garanti@info.garantibbva.com.tr\",\n    \"30\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"fddf950e5f6f8abf0d9e29e0433009ae\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_garantiMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"_bodyHashVerifier\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"bodyHashVerifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IGarantiBodySuffixHashVerifier\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"internalType\\\":\\\"struct IGarantiSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[4]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[4]\\\"}],\\\"internalType\\\":\\\"struct IGarantiBodySuffixHashVerifier.BodySuffixHashProof\\\",\\\"name\\\":\\\"_bodyHashProof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperNameHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[28]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[28]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/garanti/GarantiSendProcessor.sol\\\":\\\"GarantiSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xbe0863ae4a59b5b7e5f6b554ac86e3d15e4f51c54974cc89fff8f0df2864787a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/GarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/garanti_send_verifier.sol\\\\\\\";\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\nimport { IGarantiSendProcessor } from \\\\\\\"./interfaces/IGarantiSendProcessor.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 7;\\\\n\\\\n    /* ============ Public Variables ============ */\\\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _garantiMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {\\\\n        bodyHashVerifier = _bodyHashVerifier;\\\\n    }\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IGarantiSendProcessor.SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperNameHash,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n        require(\\\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\\\n            \\\\\\\"Invalid body hash proof\\\\\\\"\\\\n        );\\\\n\\\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [5:10] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\\\n\\\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\\\n        // parse and convert to a unix timestamp\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\\\n\\\\n        // Signals [19] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\\\n\\\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\\\n\\\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\\\n\\\\n        // Signals [14] is intentHash\\\\n        intentHash = bytes32(_proof.signals[27]);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n\\\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\\\n        require(intermediateHash == inputHash, \\\\\\\"Invalid intermediate or output hash\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x81ae73e29bc87913b8746b041a6d208c3d0fedd21f80d42be44546d8e19ef10f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IGarantiBodySuffixHashVerifier {\\\\n\\\\n    struct BodySuffixHashProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[4] signals;\\\\n    }\\\\n\\\\n    function verifyProof(\\\\n        uint[2] calldata _pA,\\\\n        uint[2][2] calldata _pB,\\\\n        uint[2] calldata _pC,\\\\n        uint[4] calldata _pubSignals\\\\n    )\\\\n        external\\\\n        view\\\\n        returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0905608291062ba9262aa3aac9434df6150243ad61d2dba863ac695c97db36d3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nimport { IGarantiBodySuffixHashVerifier } from \\\\\\\"./IGarantiBodySuffixHashVerifier.sol\\\\\\\";\\\\n\\\\ninterface IGarantiSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[28] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x70a70e2bf4861b7095bff34a55b10da9bc705735e40bed6104e179c0ecc3da25\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/garanti_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\\\n    \\\\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\\\n    \\\\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\\\n    \\\\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\\\n    \\\\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\\\n    \\\\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\\\n    \\\\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\\\n    \\\\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\\\n    \\\\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\\\n    \\\\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\\\n    \\\\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\\\n    \\\\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\\\n    \\\\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\\\n    \\\\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\\\n    \\\\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\\\n    \\\\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\\\n    \\\\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\\\n    \\\\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\\\n    \\\\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\\\n    \\\\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\\\n    \\\\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\\\n    \\\\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\\\n    \\\\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\\\n    \\\\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\\\n    \\\\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\\\n    \\\\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\\\n    \\\\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\\\n    \\\\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\\\n    \\\\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 416)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 448)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 480)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 512)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 544)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 576)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 608)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 640)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 672)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 704)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 736)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 768)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 800)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 832)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 864)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 896)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0x2d298980facd86662b5aad3165d3e1a74bf87955816c92758c57864a03a5ed9d\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162002bae38038062002bae83398101604081905262000034916200013b565b85858584846200004433620000bc565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002fe565b506004555050600580546001600160a01b0319166001600160a01b03969096169590951790945550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200015557600080fd5b865162000162816200010c565b8096505060208088015162000177816200010c565b60408901519096506200018a816200010c565b60608901519095506200019d816200010c565b60808901519094506001600160401b0380821115620001bb57600080fd5b818a0191508a601f830112620001d057600080fd5b815181811115620001e557620001e562000125565b604051601f8201601f19908116603f0116810190838211818310171562000210576200021062000125565b816040528281528d868487010111156200022957600080fd5b600093505b828410156200024d57848401860151818501870152928501926200022e565b600086848301015280975050505050505060a087015190509295509295509295565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a62000125565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516127c1620003ed6000396000818161014f01526102a501526127c16000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610243578063dbac582114610256578063f2fde38b1461026d578063f6c7226b1461028057600080fd5b8063b2a3fda414610200578063b870676c14610213578063c0d05fed14610226578063ced1e9781461023b57600080fd5b8063715018a6116100d3578063715018a6146101bf5780638da5cb5b146101c95780639895e5b7146101da578063a8ef333f146101ed57600080fd5b80630c44b2771461010557806315d276e11461014a57806319d09152146101895780635b2d12ea146101ac575b600080fd5b6101186101133660046120ea565b610293565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b6101717f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610141565b61019c610197366004612132565b61068e565b6040519015158152602001610141565b61019c6101ba36600461215c565b610702565b6101c7611558565b005b6000546001600160a01b0316610171565b600554610171906001600160a01b031681565b600154610171906001600160a01b031681565b6101c761020e366004612132565b61156c565b600254610171906001600160a01b031681565b61022e611579565b60405161014191906121e6565b61022e611607565b6101c761025136600461222e565b611699565b61025f60045481565b604051908152602001610141565b6101c761027b36600461222e565b6116c3565b6101c761028e366004612261565b611739565b60008080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103175760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b60408051632d96897560e11b81523091635b2d12ea9161034a918c919082019060c0830190610100840190600401612336565b602060405180830381865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b9190612368565b6103c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161030e565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610406918b9182019060c083019061010084019060040161238a565b602060405180830381865afa158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190612368565b6104935760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f66000000000000000000604482015260640161030e565b6104a588610100018861010001611751565b6104b361010089013561068e565b6104ff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161030e565b600061051289610100016005600a611832565b90506003604051610523919061240b565b60405180910390208160405160200161053c9190612481565b604051602081830303815290604052805190602001201461059f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161030e565b6105c1600b60fa1b60066105ba6101008d0160176019611832565b919061190d565b96506004546105e260006105dc8c61010001600a600c611832565b90611aea565b6105ec91906124b3565b955061042089013592506106076101008a01600c6012611832565b6040516020016106179190612481565b604051602081830303815290604052805190602001209450610640896101000160126017611832565b6040516020016106509190612481565b60408051808303601f19018152919052805160209091012093506106786104408a0135611b02565b5094979396929550909350916104609091013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190612368565b92915050565b60006113a6565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061073a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610770576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806107a1576000805260206000f35b5050505050565b7f23fe0119e0d86d98fef3296d3987953338f409989ee0d25c2e6f65f1ac69a0ce85527f01c6e591e4f2be7957d3c4d6e6a4bc56531b0b5853fae4cbbb9979dc3fb4054760208601526000608086018661084587357f22ab60c4aec5bc92a88fb158ea2f8650a673a4c6b22d1129ac1d00be9390f9b47f0c6c5c5e9cd44842f22ea4148cb673cd03856d7a1470fcbadeedfc16e4fdeada8461073d565b61089560208801357f101cf9529c1420aba7bd89319bbe0a2d90c912fdfc582d65c26d563341eb4e047f0ca42b1575a9a329c09d91b81f8b84c130808565de3467e32e109ac740ab9b6e8461073d565b6108e560408801357f089d945945e413f66f09d7d05eced536c1b1c76af63307988e5602c5fa18a2647f19e936c17e4e70f8d4a74a0c5d3c0b6ca8882523a94617e4a8eed449efe2d63e8461073d565b61093560608801357f2a7d9db6e93fe306547d1509e3152be1ad664b5a56700e6d01e1b0ad177562227f2570aa6d600dcb3626e9bdedd465d8f4d67f1662ea70e514fcccdc37dbeb30628461073d565b61098560808801357f22441bd33d5f7d352f09f043001ead6d8dce01fe4f1e06f6d52a3ec025a50e477f2f62d4ab058625a42df361a06e432ea669df600b018d57a3cc9e06d3b32352908461073d565b6109d560a08801357f2bd98244eb34f527cddde82bc7ecd3d82572341b6723c7e204b4b13b4483a0067f2bc1835204d308c4560a3db92bffeb83d72eee6fcc8c286c5f46b11ff20819718461073d565b610a2560c08801357f076ee4439bed6ba9c0363880a2a678899b2ca3f4a8b60c954e4ef908658a959a7f1a1de9f43ef35c391fcc525fe1350dbf6158cb4b977402b318e7a69646b4d9038461073d565b610a7560e08801357f0ff1e251abd89fcb1a7d7933e30545ed1d70fdaa8aefaf38e4f0a8d7a03bc41e7f08162360d15cfd2c53d5ed4f2a5ced2cddc4ca82ce6094b2155d53bc934317798461073d565b610ac66101008801357f2675a0ba71a63d06d61dd6379583ad1c910138768349d0028ab3341a9ddd97c67f061570d382129dff2bac14d938281bc6c434663611bffd8ebae841e89b3a91438461073d565b610b176101208801357f2e7ee0dfebd18a5dce23ca2c9281caadd1e64d18a299c052a315130f01acd7857f198da0e315822dc430064816fa30bff8dc44b12dcaf3bb1f7969e1ed3d1f123c8461073d565b610b676101408801357f1f1dbe73fe0b80437353249d8a85e029446996809fc833c20d4f2ce5298fc0397e7795fe454ffc3f3e74f9da55cdce061a5e0b00097ddc642b0ce7246bbd5c468461073d565b610bb86101608801357f12273cff18addf941caf2bfcca416d3ff48b65a5c23f2470379ccc91c1a1988a7f0b125c630f757966a1277c4ba48ee8f917dc2355c9b0ae1e344611c66de4f6c08461073d565b610c096101808801357f128f40c4e75ffaad2b197a6a59752a2a47c91a4cca174dc0efab9f0286c52d5d7f1d63fa7d27b65bae515baf04e661a140a4f6c0429067223beb3b7ab4c36d2ffe8461073d565b610c5a6101a08801357f2ca69ffae97a540015d7c340ba9d751bdddd22c1226e850f47b86fba3bc9c4ee7f2776a05d98ee9432c323b360cae02e275acf2a8d0af78ac0fee9e017c63c60c98461073d565b610cab6101c08801357f2b6af433c35897a0f9458c8c8dc529ae00bd2f485e0fd1eb1aa9c33510d8b5af7f26668060050e6db758e60e3b944075a05b1708c45c0a7b74609ddcf2e78396658461073d565b610cfc6101e08801357f087083b6345e3b3a634f91ebac116834623185ce32bee1b57b80bf249e5082dc7f2b742c812404bde4218c3c0d3830669c3bdaf023717c8c6e16342dcd7fae8dcb8461073d565b610d4d6102008801357f0613ef91c62c4fe8695af930288e88015cb0db3f9421f9bd29da3675aa6403177f110e8f6a568e37356c1f05b9f063142461b41e4869e76784d10ef0c52c1422308461073d565b610d9e6102208801357f14420a530bff2b7dbc9956771e90b019ca0035fcd22623c064145c7de21d64127f029819dce317f0ed390d1e4525fb803cd0594a5fc1cd708cc118bf8b46d906d78461073d565b610def6102408801357f08d51bc7ed9e0fa0a16095a14d1f08e59a542a37610dc382c154dba6021eb65e7f12f54cc9fc215b9665fcec7f0ea84278ccfdec9ce0721b3d54c8aad79dadaf2e8461073d565b610e406102608801357f1a5601de789a9b9676133a0ca9c5db25d5a96113c9c975e7a102cec68848a4b07f23fd9af7d041dbb03d11a3431c72b5a460a1d36c9c8794d2d3b76093d6dbba3f8461073d565b610e916102808801357f1f20e53fb46193851de0c5290fe68ef454d2c0aee9d718d3a26dc1b9a0d1fbf37f0119d365c9bd85d15ae0cfd05222329bedbd2b5af1152bb01a06fd6e927d72df8461073d565b610ee16102a08801357e3c7a3b50dc6c29bbecafaf5c20327657603b3f5cdf7e1cfe0b9a872c8937557f0573d6da8283a957bede0e1d662a7826475a7f3503b61ce6731cda9e05b9061f8461073d565b610f326102c08801357f17899f38cd9c61264b3a0b6bd8849bccb8d7752a18e26ac11d755f3dde8b61097f169a46074f60fe92e7e2f51c1cb9f1ef137bd9a056c3391eb9f6a7c656ce6f3e8461073d565b610f836102e08801357f288723a08481f3ba64b49862bb693af72875ed303cba67d71d79ac19605ebb067f100e99c7a85374b98df7f70dee671d985be259cf23b941d97c9903742aec653d8461073d565b610fd46103008801357f094162cf3f32de9b93a59ef13c9a33ac297fd5b803cd9a6b7c888510375d67207f1df59b2a12d7a478bb3abc00b26d86973722485658d0466c5bcb7136b8d00ee88461073d565b6110256103208801357f26d2dd8bcb721ddddf7a89fce7a8174360bfde331abacdcc4e95a544437623c97f222355ee8b12fd4b953be489ce7ac9e0c45c41ae9f9a3e818018a2ef27c8fe868461073d565b6110766103408801357f0ac9b2a5b59662bfe8d866a43ff5280402ceaff7bf4d0d3321bd5cffb8238cbf7f118feff08485cffea53d0e5750f0cfad7d5f6415985d002708c0ba4cdb806d778461073d565b6110c66103608801357f1ef601660e69a4d6b550f31e03b229bc114ae46a0dbc611a88c5f2b9da5d67637e2b50469bb49cfb2b946d134a99c282cb9ae18a70ce144bf7bbbe74be9e5cd48461073d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526113be6000840135610709565b6113cb6020840135610709565b6113d86040840135610709565b6113e56060840135610709565b6113f26080840135610709565b6113ff60a0840135610709565b61140c60c0840135610709565b61141960e0840135610709565b611427610100840135610709565b611435610120840135610709565b611443610140840135610709565b611451610160840135610709565b61145f610180840135610709565b61146d6101a0840135610709565b61147b6101c0840135610709565b6114896101e0840135610709565b611497610200840135610709565b6114a5610220840135610709565b6114b3610240840135610709565b6114c1610260840135610709565b6114cf610280840135610709565b6114dd6102a0840135610709565b6114eb6102c0840135610709565b6114f96102e0840135610709565b611507610300840135610709565b611515610320840135610709565b611523610340840135610709565b611531610360840135610709565b61153f610380840135610709565b61154c818486888a6107a8565b90508060005260206000f35b611560611c16565b61156a6000611c70565b565b611574611c16565b600455565b60038054611586906123d1565b80601f01602080910402602001604051908101604052809291908181526020018280546115b2906123d1565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b505050505081565b606060038054611616906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906123d1565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b6116a1611c16565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6116cb611c16565b6001600160a01b0381166117305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030e565b61073a81611c70565b611741611c16565b600361174d8282612515565b5050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e085015285850135610100850152908501356101208085019190915284518085039091018152610140909301909352815191012080821461182c5760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b606482015260840161030e565b50505050565b6060600061184084846125d5565b60ff1667ffffffffffffffff81111561185b5761185b61224b565b604051908082528060200260200182016040528015611884578160200160208202803683370190505b50905060ff84165b8360ff168110156118e9578581601c81106118a9576118a96123bb565b6020020135826118bc60ff8816846125ee565b815181106118cc576118cc6123bb565b6020908102919091010152806118e181612601565b91505061188c565b50611904600782516118fb919061261a565b82906007611cc0565b95945050505050565b600083818080805b8451811015611a6357603060f81b858281518110611935576119356123bb565b01602001516001600160f81b031916108015906119765750603960f81b858281518110611964576119646123bb565b01602001516001600160f81b03191611155b156119b957603085828151811061198f5761198f6123bb565b01602001516119a1919060f81c6125ee565b6119ac85600a61261a565b6119b691906124b3565b93505b81156119cd57826119c981612601565b9350505b876001600160f81b0319168582815181106119ea576119ea6123bb565b01602001516001600160f81b03191603611a51578115611a4c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161030e565b600191505b80611a5b81612601565b915050611915565b5085821115611abf5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161030e565b611ac982876125ee565b611ad490600a612715565b611ade908461261a565b98975050505050505050565b6000611afb83601760f91b8461190d565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190612368565b15611bbc5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161030e565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015611c0257600080fd5b505af11580156107a1573d6000803e3d6000fd5b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651611cd2919061261a565b67ffffffffffffffff811115611cea57611cea61224b565b6040519080825280601f01601f191660200182016040528015611d14576020820181803683370190505b5090506000805b87518161ffff161015611ecb576000888261ffff1681518110611d4057611d406123bb565b6020026020010151905060008767ffffffffffffffff811115611d6557611d6561224b565b604051908082528060200260200182016040528015611d8e578160200160208202803683370190505b50905060005b88811015611de057611da781600861261a565b83901c828281518110611dbc57611dbc6123bb565b60ff9092166020928302919091019091015280611dd881612601565b915050611d94565b5060005b88811015611eb5576000828281518110611e0057611e006123bb565b602002602001015160ff16905080600014611e78578060f81b878781518110611e2b57611e2b6123bb565b60200101906001600160f81b031916908160001a90535085611e4c81612601565b9650611e5b9050600289612721565b60ff16600003611e7357611e70600189612751565b97505b611e9b565b611e83600289612721565b60ff16600103611e9b57611e98600189612751565b97505b5060089290921c9180611ead81612601565b915050611de4565b5050508080611ec39061276a565b915050611d1b565b5060018360ff161015611f6c5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161030e565b85811115611fda5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161030e565b6000611ade838051606090829060005b825181101561203557828181518110612005576120056123bb565b01602001516001600160f81b03191660000361202357809150612035565b8061202d81612601565b915050611fea565b5060008167ffffffffffffffff8111156120515761205161224b565b6040519080825280601f01601f19166020018201604052801561207b576020820181803683370190505b50905060005b828110156120e15783818151811061209b5761209b6123bb565b602001015160f81c60f81b8282815181106120b8576120b86123bb565b60200101906001600160f81b031916908160001a905350806120d981612601565b915050612081565b50949350505050565b6000808284036106008112156120ff57600080fd5b6104808082121561210f57600080fd5b84935061018061047f198301121561212657600080fd5b92959390920193505050565b60006020828403121561214457600080fd5b5035919050565b80604081018310156106fc57600080fd5b60008060008061048080868803121561217457600080fd5b61217e878761214b565b945060c086018781111561219157600080fd5b6040870194506121a1888261214b565b9350508681870111156121b357600080fd5b50929591945092610100019150565b60005b838110156121dd5781810151838201526020016121c5565b50506000910152565b60208152600082518060208401526122058160408501602087016121c2565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073a57600080fd5b60006020828403121561224057600080fd5b8135611afb81612219565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561227357600080fd5b813567ffffffffffffffff8082111561228b57600080fd5b818401915084601f83011261229f57600080fd5b8135818111156122b1576122b161224b565b604051601f8201601f19908116603f011681019083821181831017156122d9576122d961224b565b816040528281528760208487010111156122f257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b600281101561182c57604080838637938401939190910190600101612316565b6104808101604086833761234d6040830186612312565b60408460c08401376103808361010084013795945050505050565b60006020828403121561237a57600080fd5b81518015158114611afb57600080fd5b610180810160408683376123a16040830186612312565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612419816123d1565b60018281168015612431576001811461244657612475565b60ff1984168752821515830287019450612475565b8760005260208060002060005b8581101561246c5781548a820152908401908201612453565b50505082870194505b50929695505050505050565b600082516124938184602087016121c2565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106fc576106fc61249d565b601f82111561251057600081815260208120601f850160051c810160208610156124ed5750805b601f850160051c820191505b8181101561250c578281556001016124f9565b5050505b505050565b815167ffffffffffffffff81111561252f5761252f61224b565b6125438161253d84546123d1565b846124c6565b602080601f83116001811461257857600084156125605750858301515b600019600386901b1c1916600185901b17855561250c565b600085815260208120601f198616915b828110156125a757888601518255948401946001909101908401612588565b50858210156125c55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156106fc576106fc61249d565b818103818111156106fc576106fc61249d565b6000600182016126135761261361249d565b5060010190565b80820281158282048414176106fc576106fc61249d565b600181815b8085111561266c5781600019048211156126525761265261249d565b8085161561265f57918102915b93841c9390800290612636565b509250929050565b600082612683575060016106fc565b81612690575060006106fc565b81600181146126a657600281146126b0576126cc565b60019150506106fc565b60ff8411156126c1576126c161249d565b50506001821b6106fc565b5060208310610133831016604e8410600b84101617156126ef575081810a6106fc565b6126f98383612631565b806000190482111561270d5761270d61249d565b029392505050565b6000611afb8383612674565b600060ff83168061274257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156106fc576106fc61249d565b600061ffff8083168181036127815761278161249d565b600101939250505056fea2646970667358221220e73d741a789cb72401a34f4ed5d57e32088558064e558746e26a3063123bb69464736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610243578063dbac582114610256578063f2fde38b1461026d578063f6c7226b1461028057600080fd5b8063b2a3fda414610200578063b870676c14610213578063c0d05fed14610226578063ced1e9781461023b57600080fd5b8063715018a6116100d3578063715018a6146101bf5780638da5cb5b146101c95780639895e5b7146101da578063a8ef333f146101ed57600080fd5b80630c44b2771461010557806315d276e11461014a57806319d09152146101895780635b2d12ea146101ac575b600080fd5b6101186101133660046120ea565b610293565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b6101717f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610141565b61019c610197366004612132565b61068e565b6040519015158152602001610141565b61019c6101ba36600461215c565b610702565b6101c7611558565b005b6000546001600160a01b0316610171565b600554610171906001600160a01b031681565b600154610171906001600160a01b031681565b6101c761020e366004612132565b61156c565b600254610171906001600160a01b031681565b61022e611579565b60405161014191906121e6565b61022e611607565b6101c761025136600461222e565b611699565b61025f60045481565b604051908152602001610141565b6101c761027b36600461222e565b6116c3565b6101c761028e366004612261565b611739565b60008080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103175760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b60408051632d96897560e11b81523091635b2d12ea9161034a918c919082019060c0830190610100840190600401612336565b602060405180830381865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b9190612368565b6103c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161030e565b60055460408051635fe8c13b60e01b81526001600160a01b0390921691635fe8c13b91610406918b9182019060c083019061010084019060040161238a565b602060405180830381865afa158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190612368565b6104935760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420626f647920686173682070726f6f66000000000000000000604482015260640161030e565b6104a588610100018861010001611751565b6104b361010089013561068e565b6104ff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161030e565b600061051289610100016005600a611832565b90506003604051610523919061240b565b60405180910390208160405160200161053c9190612481565b604051602081830303815290604052805190602001201461059f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161030e565b6105c1600b60fa1b60066105ba6101008d0160176019611832565b919061190d565b96506004546105e260006105dc8c61010001600a600c611832565b90611aea565b6105ec91906124b3565b955061042089013592506106076101008a01600c6012611832565b6040516020016106179190612481565b604051602081830303815290604052805190602001209450610640896101000160126017611832565b6040516020016106509190612481565b60408051808303601f19018152919052805160209091012093506106786104408a0135611b02565b5094979396929550909350916104609091013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190612368565b92915050565b60006113a6565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061073a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610770576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806107a1576000805260206000f35b5050505050565b7f23fe0119e0d86d98fef3296d3987953338f409989ee0d25c2e6f65f1ac69a0ce85527f01c6e591e4f2be7957d3c4d6e6a4bc56531b0b5853fae4cbbb9979dc3fb4054760208601526000608086018661084587357f22ab60c4aec5bc92a88fb158ea2f8650a673a4c6b22d1129ac1d00be9390f9b47f0c6c5c5e9cd44842f22ea4148cb673cd03856d7a1470fcbadeedfc16e4fdeada8461073d565b61089560208801357f101cf9529c1420aba7bd89319bbe0a2d90c912fdfc582d65c26d563341eb4e047f0ca42b1575a9a329c09d91b81f8b84c130808565de3467e32e109ac740ab9b6e8461073d565b6108e560408801357f089d945945e413f66f09d7d05eced536c1b1c76af63307988e5602c5fa18a2647f19e936c17e4e70f8d4a74a0c5d3c0b6ca8882523a94617e4a8eed449efe2d63e8461073d565b61093560608801357f2a7d9db6e93fe306547d1509e3152be1ad664b5a56700e6d01e1b0ad177562227f2570aa6d600dcb3626e9bdedd465d8f4d67f1662ea70e514fcccdc37dbeb30628461073d565b61098560808801357f22441bd33d5f7d352f09f043001ead6d8dce01fe4f1e06f6d52a3ec025a50e477f2f62d4ab058625a42df361a06e432ea669df600b018d57a3cc9e06d3b32352908461073d565b6109d560a08801357f2bd98244eb34f527cddde82bc7ecd3d82572341b6723c7e204b4b13b4483a0067f2bc1835204d308c4560a3db92bffeb83d72eee6fcc8c286c5f46b11ff20819718461073d565b610a2560c08801357f076ee4439bed6ba9c0363880a2a678899b2ca3f4a8b60c954e4ef908658a959a7f1a1de9f43ef35c391fcc525fe1350dbf6158cb4b977402b318e7a69646b4d9038461073d565b610a7560e08801357f0ff1e251abd89fcb1a7d7933e30545ed1d70fdaa8aefaf38e4f0a8d7a03bc41e7f08162360d15cfd2c53d5ed4f2a5ced2cddc4ca82ce6094b2155d53bc934317798461073d565b610ac66101008801357f2675a0ba71a63d06d61dd6379583ad1c910138768349d0028ab3341a9ddd97c67f061570d382129dff2bac14d938281bc6c434663611bffd8ebae841e89b3a91438461073d565b610b176101208801357f2e7ee0dfebd18a5dce23ca2c9281caadd1e64d18a299c052a315130f01acd7857f198da0e315822dc430064816fa30bff8dc44b12dcaf3bb1f7969e1ed3d1f123c8461073d565b610b676101408801357f1f1dbe73fe0b80437353249d8a85e029446996809fc833c20d4f2ce5298fc0397e7795fe454ffc3f3e74f9da55cdce061a5e0b00097ddc642b0ce7246bbd5c468461073d565b610bb86101608801357f12273cff18addf941caf2bfcca416d3ff48b65a5c23f2470379ccc91c1a1988a7f0b125c630f757966a1277c4ba48ee8f917dc2355c9b0ae1e344611c66de4f6c08461073d565b610c096101808801357f128f40c4e75ffaad2b197a6a59752a2a47c91a4cca174dc0efab9f0286c52d5d7f1d63fa7d27b65bae515baf04e661a140a4f6c0429067223beb3b7ab4c36d2ffe8461073d565b610c5a6101a08801357f2ca69ffae97a540015d7c340ba9d751bdddd22c1226e850f47b86fba3bc9c4ee7f2776a05d98ee9432c323b360cae02e275acf2a8d0af78ac0fee9e017c63c60c98461073d565b610cab6101c08801357f2b6af433c35897a0f9458c8c8dc529ae00bd2f485e0fd1eb1aa9c33510d8b5af7f26668060050e6db758e60e3b944075a05b1708c45c0a7b74609ddcf2e78396658461073d565b610cfc6101e08801357f087083b6345e3b3a634f91ebac116834623185ce32bee1b57b80bf249e5082dc7f2b742c812404bde4218c3c0d3830669c3bdaf023717c8c6e16342dcd7fae8dcb8461073d565b610d4d6102008801357f0613ef91c62c4fe8695af930288e88015cb0db3f9421f9bd29da3675aa6403177f110e8f6a568e37356c1f05b9f063142461b41e4869e76784d10ef0c52c1422308461073d565b610d9e6102208801357f14420a530bff2b7dbc9956771e90b019ca0035fcd22623c064145c7de21d64127f029819dce317f0ed390d1e4525fb803cd0594a5fc1cd708cc118bf8b46d906d78461073d565b610def6102408801357f08d51bc7ed9e0fa0a16095a14d1f08e59a542a37610dc382c154dba6021eb65e7f12f54cc9fc215b9665fcec7f0ea84278ccfdec9ce0721b3d54c8aad79dadaf2e8461073d565b610e406102608801357f1a5601de789a9b9676133a0ca9c5db25d5a96113c9c975e7a102cec68848a4b07f23fd9af7d041dbb03d11a3431c72b5a460a1d36c9c8794d2d3b76093d6dbba3f8461073d565b610e916102808801357f1f20e53fb46193851de0c5290fe68ef454d2c0aee9d718d3a26dc1b9a0d1fbf37f0119d365c9bd85d15ae0cfd05222329bedbd2b5af1152bb01a06fd6e927d72df8461073d565b610ee16102a08801357e3c7a3b50dc6c29bbecafaf5c20327657603b3f5cdf7e1cfe0b9a872c8937557f0573d6da8283a957bede0e1d662a7826475a7f3503b61ce6731cda9e05b9061f8461073d565b610f326102c08801357f17899f38cd9c61264b3a0b6bd8849bccb8d7752a18e26ac11d755f3dde8b61097f169a46074f60fe92e7e2f51c1cb9f1ef137bd9a056c3391eb9f6a7c656ce6f3e8461073d565b610f836102e08801357f288723a08481f3ba64b49862bb693af72875ed303cba67d71d79ac19605ebb067f100e99c7a85374b98df7f70dee671d985be259cf23b941d97c9903742aec653d8461073d565b610fd46103008801357f094162cf3f32de9b93a59ef13c9a33ac297fd5b803cd9a6b7c888510375d67207f1df59b2a12d7a478bb3abc00b26d86973722485658d0466c5bcb7136b8d00ee88461073d565b6110256103208801357f26d2dd8bcb721ddddf7a89fce7a8174360bfde331abacdcc4e95a544437623c97f222355ee8b12fd4b953be489ce7ac9e0c45c41ae9f9a3e818018a2ef27c8fe868461073d565b6110766103408801357f0ac9b2a5b59662bfe8d866a43ff5280402ceaff7bf4d0d3321bd5cffb8238cbf7f118feff08485cffea53d0e5750f0cfad7d5f6415985d002708c0ba4cdb806d778461073d565b6110c66103608801357f1ef601660e69a4d6b550f31e03b229bc114ae46a0dbc611a88c5f2b9da5d67637e2b50469bb49cfb2b946d134a99c282cb9ae18a70ce144bf7bbbe74be9e5cd48461073d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526113be6000840135610709565b6113cb6020840135610709565b6113d86040840135610709565b6113e56060840135610709565b6113f26080840135610709565b6113ff60a0840135610709565b61140c60c0840135610709565b61141960e0840135610709565b611427610100840135610709565b611435610120840135610709565b611443610140840135610709565b611451610160840135610709565b61145f610180840135610709565b61146d6101a0840135610709565b61147b6101c0840135610709565b6114896101e0840135610709565b611497610200840135610709565b6114a5610220840135610709565b6114b3610240840135610709565b6114c1610260840135610709565b6114cf610280840135610709565b6114dd6102a0840135610709565b6114eb6102c0840135610709565b6114f96102e0840135610709565b611507610300840135610709565b611515610320840135610709565b611523610340840135610709565b611531610360840135610709565b61153f610380840135610709565b61154c818486888a6107a8565b90508060005260206000f35b611560611c16565b61156a6000611c70565b565b611574611c16565b600455565b60038054611586906123d1565b80601f01602080910402602001604051908101604052809291908181526020018280546115b2906123d1565b80156115ff5780601f106115d4576101008083540402835291602001916115ff565b820191906000526020600020905b8154815290600101906020018083116115e257829003601f168201915b505050505081565b606060038054611616906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906123d1565b801561168f5780601f106116645761010080835404028352916020019161168f565b820191906000526020600020905b81548152906001019060200180831161167257829003601f168201915b5050505050905090565b6116a1611c16565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6116cb611c16565b6001600160a01b0381166117305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030e565b61073a81611c70565b611741611c16565b600361174d8282612515565b5050565b6040805160208481013581830152848301358284015260608086013581840152608080870135818501528451808503909101815260a084018552805190830120853560c08501528583013560e085015285850135610100850152908501356101208085019190915284518085039091018152610140909301909352815191012080821461182c5760405162461bcd60e51b815260206004820152602360248201527f496e76616c696420696e7465726d656469617465206f72206f757470757420686044820152620c2e6d60eb1b606482015260840161030e565b50505050565b6060600061184084846125d5565b60ff1667ffffffffffffffff81111561185b5761185b61224b565b604051908082528060200260200182016040528015611884578160200160208202803683370190505b50905060ff84165b8360ff168110156118e9578581601c81106118a9576118a96123bb565b6020020135826118bc60ff8816846125ee565b815181106118cc576118cc6123bb565b6020908102919091010152806118e181612601565b91505061188c565b50611904600782516118fb919061261a565b82906007611cc0565b95945050505050565b600083818080805b8451811015611a6357603060f81b858281518110611935576119356123bb565b01602001516001600160f81b031916108015906119765750603960f81b858281518110611964576119646123bb565b01602001516001600160f81b03191611155b156119b957603085828151811061198f5761198f6123bb565b01602001516119a1919060f81c6125ee565b6119ac85600a61261a565b6119b691906124b3565b93505b81156119cd57826119c981612601565b9350505b876001600160f81b0319168582815181106119ea576119ea6123bb565b01602001516001600160f81b03191603611a51578115611a4c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161030e565b600191505b80611a5b81612601565b915050611915565b5085821115611abf5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161030e565b611ac982876125ee565b611ad490600a612715565b611ade908461261a565b98975050505050505050565b6000611afb83601760f91b8461190d565b9392505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190612368565b15611bbc5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161030e565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015611c0257600080fd5b505af11580156107a1573d6000803e3d6000fd5b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651611cd2919061261a565b67ffffffffffffffff811115611cea57611cea61224b565b6040519080825280601f01601f191660200182016040528015611d14576020820181803683370190505b5090506000805b87518161ffff161015611ecb576000888261ffff1681518110611d4057611d406123bb565b6020026020010151905060008767ffffffffffffffff811115611d6557611d6561224b565b604051908082528060200260200182016040528015611d8e578160200160208202803683370190505b50905060005b88811015611de057611da781600861261a565b83901c828281518110611dbc57611dbc6123bb565b60ff9092166020928302919091019091015280611dd881612601565b915050611d94565b5060005b88811015611eb5576000828281518110611e0057611e006123bb565b602002602001015160ff16905080600014611e78578060f81b878781518110611e2b57611e2b6123bb565b60200101906001600160f81b031916908160001a90535085611e4c81612601565b9650611e5b9050600289612721565b60ff16600003611e7357611e70600189612751565b97505b611e9b565b611e83600289612721565b60ff16600103611e9b57611e98600189612751565b97505b5060089290921c9180611ead81612601565b915050611de4565b5050508080611ec39061276a565b915050611d1b565b5060018360ff161015611f6c5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161030e565b85811115611fda5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161030e565b6000611ade838051606090829060005b825181101561203557828181518110612005576120056123bb565b01602001516001600160f81b03191660000361202357809150612035565b8061202d81612601565b915050611fea565b5060008167ffffffffffffffff8111156120515761205161224b565b6040519080825280601f01601f19166020018201604052801561207b576020820181803683370190505b50905060005b828110156120e15783818151811061209b5761209b6123bb565b602001015160f81c60f81b8282815181106120b8576120b86123bb565b60200101906001600160f81b031916908160001a905350806120d981612601565b915050612081565b50949350505050565b6000808284036106008112156120ff57600080fd5b6104808082121561210f57600080fd5b84935061018061047f198301121561212657600080fd5b92959390920193505050565b60006020828403121561214457600080fd5b5035919050565b80604081018310156106fc57600080fd5b60008060008061048080868803121561217457600080fd5b61217e878761214b565b945060c086018781111561219157600080fd5b6040870194506121a1888261214b565b9350508681870111156121b357600080fd5b50929591945092610100019150565b60005b838110156121dd5781810151838201526020016121c5565b50506000910152565b60208152600082518060208401526122058160408501602087016121c2565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073a57600080fd5b60006020828403121561224057600080fd5b8135611afb81612219565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561227357600080fd5b813567ffffffffffffffff8082111561228b57600080fd5b818401915084601f83011261229f57600080fd5b8135818111156122b1576122b161224b565b604051601f8201601f19908116603f011681019083821181831017156122d9576122d961224b565b816040528281528760208487010111156122f257600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b600281101561182c57604080838637938401939190910190600101612316565b6104808101604086833761234d6040830186612312565b60408460c08401376103808361010084013795945050505050565b60006020828403121561237a57600080fd5b81518015158114611afb57600080fd5b610180810160408683376123a16040830186612312565b60408460c084013760808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612419816123d1565b60018281168015612431576001811461244657612475565b60ff1984168752821515830287019450612475565b8760005260208060002060005b8581101561246c5781548a820152908401908201612453565b50505082870194505b50929695505050505050565b600082516124938184602087016121c2565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106fc576106fc61249d565b601f82111561251057600081815260208120601f850160051c810160208610156124ed5750805b601f850160051c820191505b8181101561250c578281556001016124f9565b5050505b505050565b815167ffffffffffffffff81111561252f5761252f61224b565b6125438161253d84546123d1565b846124c6565b602080601f83116001811461257857600084156125605750858301515b600019600386901b1c1916600185901b17855561250c565b600085815260208120601f198616915b828110156125a757888601518255948401946001909101908401612588565b50858210156125c55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156106fc576106fc61249d565b818103818111156106fc576106fc61249d565b6000600182016126135761261361249d565b5060010190565b80820281158282048414176106fc576106fc61249d565b600181815b8085111561266c5781600019048211156126525761265261249d565b8085161561265f57918102915b93841c9390800290612636565b509250929050565b600082612683575060016106fc565b81612690575060006106fc565b81600181146126a657600281146126b0576126cc565b60019150506106fc565b60ff8411156126c1576126c161249d565b50506001821b6106fc565b5060208310610133831016604e8410600b84101617156126ef575081810a6106fc565b6126f98383612631565b806000190482111561270d5761270d61249d565b029392505050565b6000611afb8383612674565b600060ff83168061274257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156106fc576106fc61249d565b600061ffff8083168181036127815761278161249d565b600101939250505056fea2646970667358221220e73d741a789cb72401a34f4ed5d57e32088558064e558746e26a3063123bb69464736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3392,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3566\"\n      },\n      {\n        \"astId\": 3395,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3771\"\n      },\n      {\n        \"astId\": 3397,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3399,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 6463,\n        \"contract\": \"contracts/ramps/garanti/GarantiSendProcessor.sol:GarantiSendProcessor\",\n        \"label\": \"bodyHashVerifier\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_contract(IGarantiBodySuffixHashVerifier)6841\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IGarantiBodySuffixHashVerifier)6841\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IGarantiBodySuffixHashVerifier\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3566\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3771\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/HDFCManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0x1A2dcc7AfC7Bf09bE718E54466aA18166C00E4FD\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xf18be5941fee629e40d80693305dfda08b9173b9546473e10145abf60961552b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x1A2dcc7AfC7Bf09bE718E54466aA18166C00E4FD\",\n    \"transactionIndex\": 81,\n    \"gasUsed\": \"608914\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000010000000400000000\",\n    \"blockHash\": \"0xd6db10fbd0e67b5427e1857d64d0d07ea673fb498d1d7a4b2e8f85495b00dd45\",\n    \"transactionHash\": \"0xf18be5941fee629e40d80693305dfda08b9173b9546473e10145abf60961552b\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 81,\n        \"blockNumber\": 5081898,\n        \"transactionHash\": \"0xf18be5941fee629e40d80693305dfda08b9173b9546473e10145abf60961552b\",\n        \"address\": \"0x1A2dcc7AfC7Bf09bE718E54466aA18166C00E4FD\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 120,\n        \"blockHash\": \"0xd6db10fbd0e67b5427e1857d64d0d07ea673fb498d1d7a4b2e8f85495b00dd45\"\n      }\n    ],\n    \"blockNumber\": 5081898,\n    \"cumulativeGasUsed\": \"12781247\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x06b0ad846d386f60e777f1d11b82922c6bb694216eed9c23535796ac404a7dfa\",\n      \"0x1c1b5a203a9f1f15f6172969b9359e6a7572001de09471efd1586a67f7956fd8\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3574,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/HDFCRamp.json",
    "content": "{\n  \"address\": \"0xb4A7486b0EFa264D5FC6A8181bfc7A150cD57849\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"_poseidon3\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"_poseidon6\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"idHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"idHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[8]\",\n              \"name\": \"upiId\",\n              \"type\": \"uint256[8]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[8]\",\n                  \"name\": \"upiId\",\n                  \"type\": \"uint256[8]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct HDFCRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct HDFCRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[8]\",\n          \"name\": \"_upiId\",\n          \"type\": \"uint256[8]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon3\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon3\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon6\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon6\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IHDFCSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb985dab643450d0969afcad34145915dd37f15d34fd9795c36f38b53c3705ed2\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xb4A7486b0EFa264D5FC6A8181bfc7A150cD57849\",\n    \"transactionIndex\": 77,\n    \"gasUsed\": \"3794585\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000900000000000000000000000000000000400000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000020000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xb402c8669a11a52ce11ec5a9eae7a34672f0ddd0637d3565409bc6fdf6decc8f\",\n    \"transactionHash\": \"0xb985dab643450d0969afcad34145915dd37f15d34fd9795c36f38b53c3705ed2\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 77,\n        \"blockNumber\": 5081897,\n        \"transactionHash\": \"0xb985dab643450d0969afcad34145915dd37f15d34fd9795c36f38b53c3705ed2\",\n        \"address\": \"0xb4A7486b0EFa264D5FC6A8181bfc7A150cD57849\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 70,\n        \"blockHash\": \"0xb402c8669a11a52ce11ec5a9eae7a34672f0ddd0637d3565409bc6fdf6decc8f\"\n      },\n      {\n        \"transactionIndex\": 77,\n        \"blockNumber\": 5081897,\n        \"transactionHash\": \"0xb985dab643450d0969afcad34145915dd37f15d34fd9795c36f38b53c3705ed2\",\n        \"address\": \"0xb4A7486b0EFa264D5FC6A8181bfc7A150cD57849\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 71,\n        \"blockHash\": \"0xb402c8669a11a52ce11ec5a9eae7a34672f0ddd0637d3565409bc6fdf6decc8f\"\n      }\n    ],\n    \"blockNumber\": 5081897,\n    \"cumulativeGasUsed\": \"10323460\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n    \"0xd8850EC08960716725B51941348e8b3F1DC47C38\",\n    \"0x0a5A6f847899e185a14e54266036CE8260142659\",\n    \"20000000\",\n    \"999000000\",\n    \"180\",\n    \"180\",\n    \"1000000000000000\",\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"_poseidon3\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"_poseidon6\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"idHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct HDFCRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[8]\\\",\\\"name\\\":\\\"_upiId\\\",\\\"type\\\":\\\"uint256[8]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon3\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon3\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon6\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon6\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IHDFCSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the idHash being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\",\\\"_upiId\\\":\\\"The packed upi ID of the depositor\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the idHash being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[8],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a idHash from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":\\\"HDFCRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon3.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon3 {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x39cd67d4a7ef93e243c77b7c8a40c3842c060a7f444b0b2c875bce7d8d0c24fa\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/interfaces/IPoseidon6.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon6 {\\\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9609bcff68e45a22b551bf5f42a5ea62ea0b33e433a89f7c89a6b0714df09229\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon3 } from \\\\\\\"../../interfaces/IPoseidon3.sol\\\\\\\";\\\\nimport { IPoseidon6 } from \\\\\\\"../../interfaces/IPoseidon6.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed idHash,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the idHash\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 idHash;                     // Hash of payment processor id\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[8] upiId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's idHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon3 _poseidon3,\\\\n        IPoseidon6 _poseidon6,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon3 = _poseidon3;\\\\n        poseidon6 = _poseidon6;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        IHDFCSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\\\\\"Account already associated with idHash\\\\\\\");\\\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].idHash = idHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, idHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _upiId            The packed upi ID of the depositor\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[8] memory _upiId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        AccountInfo storage account = accounts[msg.sender];\\\\n        account.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            upiId: _upiId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 idHash = accounts[msg.sender].idHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorIdHash != idHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[idHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a idHash from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _idHash,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[15] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            IHDFCSendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 idHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return idHash;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\\\n     */\\\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\\\n        uint256[6] memory temp1;\\\\n        uint256[3] memory temp2;\\\\n\\\\n        for (uint256 i = 0; i < 6; ++i) {\\\\n            temp1[i] = _upiId[i];\\\\n        }\\\\n        temp2[0] = poseidon6.poseidon(temp1);\\\\n        temp2[1] = _upiId[6];\\\\n        temp2[2] = _upiId[7];\\\\n\\\\n        return bytes32(poseidon3.poseidon(temp2));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xae7d672b1734e0e13737762b6317bc5de9f2a4070b1b1af2d40a2ce74ed3957f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b506040516200438c3803806200438c8339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0389811660805288811660a05287811660c05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c051614094620002f860003960008181610386015261315701526000818161067901526131f40152600081816103d80152818161175901528181611dbb01528181612d490152612df801526140946000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd6102923660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de3660046135d5565b610799565b005b6102e36102f33660046135f9565b6107f6565b6102bd6103063660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e36103453660046135f9565b610928565b6102e36103583660046135f9565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce366004613612565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e361040836600461375a565b610f47565b6102e361041b3660046135f9565b610fd4565b61043361042e3660046135d5565b611075565b6040516102c79190613813565b6102e361044e366004613857565b6110ee565b6102bd60095481565b61046f61046a3660046135d5565b611181565b6040516102c79190613958565b6102e361048a3660046135f9565b6113f1565b6102bd60075481565b6102e36104a63660046135f9565b611490565b6102e36104b93660046139e4565b6115db565b6102e36117ce565b61046f6104d43660046139e4565b6117e2565b6104ec6104e73660046135d5565b6119ea565b6040516102c79190613a8a565b6000546001600160a01b03166103a8565b6105536105183660046135f9565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e36105943660046135f9565b611a84565b6102e36105a7366004613ae2565b611b1b565b6102e36105ba3660046135f9565b611e77565b6105d26105cd3660046135f9565b611f7e565b6040516102c79190613b70565b6102bd600a5481565b61062f6105f63660046135f9565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f3660046135d5565b61206b565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b83565b612123565b6102e36106bc3660046135f9565b6121e1565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613bf8565b61231f565b6040516102c79190613c6d565b6102e36107273660046135d5565b612484565b6002546103a8906001600160a01b031681565b6102e361074d3660046135d5565b6124da565b610371610760366004613cfd565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a1612553565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613d29565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b610930612553565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd612553565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613d29565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d76565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d5984886125ad565b90508583600a01541015610e0e57600080610d7389612618565b91509150878186600a0154610d889190613d76565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd785836127c0565b8085600a016000828254610deb9190613d76565b925050819055508085600b016000828254610e069190613d89565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d89565b925050819055508583600b016000828254610ed09190613d76565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f5887878787612822565b925092509250610f688282612b28565b826060015182600b016000828254610f809190613d89565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612c01565b610fcb8184612cec565b50505050505050565b610fdc612553565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f6612553565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff8111156112045761120461364b565b60405190808252806020026020018201604052801561123d57816020015b61122a6133ca565b8152602001906001900390816112225790505b50915060005b81518110156113ea57600082828151811061126057611260613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a83612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516113b69190613d76565b8152508685815181106113cb576113cb613d9c565b6020026020010181905250505050806113e390613db2565b9050611243565b5050919050565b6113f9612553565b66b1a2bc2ec5000081111561145b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166115105760405162461bcd60e51b815260040161082290613dcb565b80546001600160a01b031633146115695760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115738184612b28565b816060015181600b01600082825461158b9190613d89565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516115cc9082612c01565b6115d68383612cec565b505050565b6000805b825181101561173c5760008382815181106115fc576115fc613d9c565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116745760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061168084612618565b9150915061168e83836127c0565b8083600a015461169e9190613d76565b6116a89087613d76565b95508083600b0160008282546116be9190613d89565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611705908590613d76565b60405190815260200160405180910390a36000600a8401556117278484612c01565b505050508061173590613db2565b90506115df565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190613dfa565b6117d6612553565b6117e06000612eca565b565b6060815167ffffffffffffffff8111156117fe576117fe61364b565b60405190808252806020026020018201604052801561183757816020015b6118246133ca565b81526020019060019003908161181c5790505b50905060005b82518110156119e457600083828151811061185a5761185a613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116118ab575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561193e57602002820191906000526020600020905b81548152602001906001019080831161192a575b5050505050815250509050600061195483612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516119b09190613d76565b8152508585815181106119c5576119c5613d9c565b6020026020010181905250505050806119dd90613db2565b905061183d565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a7457602002820191906000526020600020905b815481526020019060010190808311611a60575b5050505050815250509050919050565b611a8c612553565b80600003611ae65760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611b475760405162461bcd60e51b815260040161082290613d29565b33600090815260046020526040902060010154600511611ba95760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611c1a5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c785760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c8d670de0b6b3a764000085613e1c565b611c979190613e49565b600d80549192506000919082611cac83613db2565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611d53919083019060086133f6565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d9791600d840191602090910190613434565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e319190613dfa565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611ea35760405162461bcd60e51b815260040161082290613d29565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f125760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f489060020183612f1a565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f8661346e565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611fca575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a745760200282019190600052602060002090815481526020019060010190808311611a60575050505050815250509050919050565b612073612553565b6001600160a01b0381166120d55760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561218f5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061219d85858585613043565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122565760405162461bcd60e51b815260040161082290613dcb565b336000908152600460205260408082205483516001600160a01b03168352912054146122c45760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b60408082015160009081526005602052206122df8184612b28565b816060015181600a0160008282546122f79190613d76565b90915550506060820151600b82018054600090612315908490613d89565b9091555050505050565b606060008267ffffffffffffffff81111561233c5761233c61364b565b60405190808252806020026020018201604052801561237557816020015b6123626134ba565b81526020019060019003908161235a5790505b50905060005b8381101561247a57600085858381811061239757612397613d9c565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061241657612416613d9c565b6020908102929092013583525081810184905283516001600160a01b03166000908152600490915260409081902054910152845185908590811061245c5761245c613d9c565b602002602001018190525050508061247390613db2565b905061237b565b5090505b92915050565b61248c612553565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b6124e2612553565b6001600160a01b0381166125475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b61255081612eca565b50565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506126107f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613e5d565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561267557602002820191906000526020600020905b815481526020019060010190808311612661575b50505050509050805167ffffffffffffffff8111156126965761269661364b565b6040519080825280602002602001820160405280156126bf578160200160208202803683370190505b50925060005b81518110156127b9576000600660008484815181106126e6576126e6613d9c565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161275991613d76565b10156127a85782828151811061277157612771613d9c565b602002602001015185838151811061278b5761278b613d9c565b602090810291909101015260608101516127a59085613d76565b93505b506127b281613db2565b90506126c5565b5050915091565b60005b81518110156115d6576000801b8282815181106127e2576127e2613d9c565b602002602001015114612812576128128383838151811061280557612805613d9c565b6020026020010151612b28565b61281b81613db2565b90506127c3565b61282a6134e2565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128869190600401613ec2565b60a0604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613f31565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166129555760405162461bcd60e51b815260040161082290613dcb565b85826080015111156129b45760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b6040805161010081019182905286916129f09190600185019060089082845b8154815260200190600101908083116129d35750505050506130e3565b14612a3d5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612aa55760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612ac29190613e1c565b612acc9190613e49565b871015612b145760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612bcc600d840183612f1a565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612c179190613d76565b9050806000036115d65781546001600160a01b03166000908152600460205260409020612c479060010184613272565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612cb56001830182613523565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612ce59190613532565b5050505050565b6000600b54600014612db857670de0b6b3a7640000600b548360600151612d139190613e1c565b612d1d9190613e49565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613dfa565b505b6000818360600151612dca9190613d89565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e659190613dfa565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f7684805480602002602001604051908101604052809291908181526020018280548015612f6b57602002820191906000526020600020905b815481526020019060010190808311612f57575b505050505084613317565b9150915080612fbf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612fd090600190613d89565b905080831461301557848181548110612feb57612feb613d9c565b906000526020600020015485848154811061300857613008613d9c565b6000918252602090912001555b8480548061302557613025613f71565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161309691600401613f87565b6020604051808303816000875af11580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613fec565b9695505050505050565b60006130ed613550565b6130f561356e565b60005b600681101561313f5784816008811061311357613113613d9c565b602002015183826006811061312a5761312a613d9c565b602002015261313881613db2565b90506130f8565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a7889061318c908590600401614005565b602060405180830381865afa1580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd9190613fec565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e890613231908490600401614036565b602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613fec565b6000806132ce848054806020026020016040519081016040528092919081815260200182805480156132c357602002820191906000526020600020905b8154815260200190600101908083116132af575b50505050508461337a565b9150915080612fbf5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b81811015613367578486828151811061333b5761333b613d9c565b602002602001015103613355579250600191506133739050565b8061335f81613db2565b915050613320565b50600019600092509250505b9250929050565b81516000908190815b81811015613367578486828151811061339e5761339e613d9c565b6020026020010151036133b8579250600191506133739050565b806133c281613db2565b915050613383565b60408051608081018252600080825260208201529081016133e961346e565b8152602001600081525090565b8260088101928215613424579160200282015b82811115613424578251825591602001919060010190613409565b5061343092915061358c565b5090565b8280548282559060005260206000209081019282156134245791602002820182811115613424578251825591602001919060010190613409565b6040518060e0016040528060006001600160a01b031681526020016134916135a1565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134d56134e2565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5061255090600881019061358c565b5080546000825590600052602060002090810190612550919061358c565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b80821115613430576000815560010161358d565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b038116811461255057600080fd5b6000602082840312156135e757600080fd5b81356135f2816135c0565b9392505050565b60006020828403121561360b57600080fd5b5035919050565b60008060006060848603121561362757600080fd5b83359250602084013591506040840135613640816135c0565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156136845761368461364b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364b565b604052919050565b600082601f8301126136cc57600080fd5b6136d4613661565b8060408401858111156136e657600080fd5b845b818110156137005780358452602093840193016136e8565b509095945050505050565b600082601f83011261371c57600080fd5b613724613661565b80608084018581111561373657600080fd5b845b818110156137005761374a87826136bb565b8452602090930192604001613738565b6000806000806102e080868803121561377257600080fd5b61377c87876136bb565b945061378b876040880161370b565b935061379a8760c088016136bb565b92508661011f8701126137ac57600080fd5b6040516101e0810181811067ffffffffffffffff821117156137d0576137d061364b565b6040529086019080888311156137e557600080fd5b61010088015b838110156138035780358252602091820191016137eb565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561384b5783518352928401929184019160010161382f565b50909695505050505050565b6000806040838503121561386a57600080fd5b8235613875816135c0565b91506020830135613885816135c0565b809150509250929050565b600081518084526020808501945080840160005b838110156138c0578151875295820195908201906001016138a4565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b6008811015613907578251825291830191908301906001016138ea565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a086015261394f82860182613890565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156139d657603f19898403018552815160808151855288820151898601528782015181898701526139b5828701826138cb565b6060938401519690930195909552509487019492509086019060010161397f565b509098975050505050505050565b600060208083850312156139f757600080fd5b823567ffffffffffffffff80821115613a0f57600080fd5b818501915085601f830112613a2357600080fd5b813581811115613a3557613a3561364b565b8060051b9150613a4684830161368a565b8181529183018401918481019088841115613a6057600080fd5b938501935b83851015613a7e57843582529385019390850190613a65565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613ad75783518252928401926001929092019190840190613ab7565b509695505050505050565b60008060006101408486031215613af857600080fd5b84601f850112613b0757600080fd5b60405161010080820182811067ffffffffffffffff82111715613b2c57613b2c61364b565b60405285018187821115613b3f57600080fd5b865b82811015613b59578035825260209182019101613b41565b509197903596506101209590950135949350505050565b6020815260006135f260208301846138cb565b6000806000806101a0808688031215613b9b57600080fd5b613ba587876136bb565b9450613bb4876040880161370b565b9350613bc38760c088016136bb565b92508661011f870112613bd557600080fd5b60405160a0810181811067ffffffffffffffff821117156137d0576137d061364b565b60008060208385031215613c0b57600080fd5b823567ffffffffffffffff80821115613c2357600080fd5b818501915085601f830112613c3757600080fd5b813581811115613c4657600080fd5b8660208260051b8501011115613c5b57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613cf0578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c8a565b5091979650505050505050565b60008060408385031215613d1057600080fd5b8235613d1b816135c0565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561247e5761247e613d60565b8181038181111561247e5761247e613d60565b634e487b7160e01b600052603260045260246000fd5b600060018201613dc457613dc4613d60565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613e0c57600080fd5b815180151581146135f257600080fd5b808202811582820484141761247e5761247e613d60565b634e487b7160e01b600052601260045260246000fd5b600082613e5857613e58613e33565b500490565b600082613e6c57613e6c613e33565b500690565b8060005b600281101561303d578151845260209384019390910190600101613e75565b8060005b600281101561303d57613eac848351613e71565b6040939093019260209190910190600101613e98565b60006102e082019050613ed6828451613e71565b602080840151613ee96040850182613e94565b506040840151613efc60c0850182613e71565b506060840151610100840160005b600f811015613f2757825182529183019190830190600101613f0a565b5050505092915050565b600080600080600060a08688031215613f4957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f9b828451613e71565b602080840151613fae6040850182613e94565b506040840151613fc160c0850182613e71565b506060840151610100840160005b6005811015613f2757825182529183019190830190600101613fcf565b600060208284031215613ffe57600080fd5b5051919050565b60c08101818360005b600681101561402d57815183526020928301929091019060010161400e565b50505092915050565b60608101818360005b600381101561402d57815183526020928301929091019060010161403f56fea2646970667358221220ce4b5ac012d074f8459b3087900f248a83a7859401303ac0546d4eb7feb3ba5064736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061027f5760003560e01c806371a28f691161015c578063cce3e038116100ce578063ecb3dc8811610087578063ecb3dc88146106f0578063ecd618f0146106f9578063ed1692b814610719578063eea1d1971461072c578063f2fde38b1461073f578063fbf15b1f1461075257600080fd5b8063cce3e03814610674578063ce523ca31461069b578063d55f960d146106ae578063d9478d20146106c1578063e215ad59146106d4578063e279d964146106e757600080fd5b8063985ade1511610120578063985ade15146105995780639b357b5a146105ac5780639f9fb968146105bf578063a1a954b7146105df578063b02c43d0146105e8578063b3fa4c011461066157600080fd5b806371a28f69146104c65780637b510fe8146104d95780638da5cb5b146104f95780639021578a1461050a5780639087beff1461058657600080fd5b80633f838d0d116101f55780635081d952116101b95780635081d9521461045c5780635dd765151461047c578063645006ca1461048f57806366ec84191461049857806371134762146104ab578063715018a6146104be57600080fd5b80633f838d0d146103fa578063429873491461040d5780634595bba014610420578063485cc95514610440578063495223e71461045357600080fd5b80632a80cda3116102475780632a80cda314610337578063317dcc961461034a578063392e53cd1461035d5780633930a439146103815780633adba28a146103c05780633e413bee146103d357600080fd5b80630f1ef98c14610284578063133de6cb146102d0578063148172da146102e557806314ec32fa146102f8578063238c84941461032e575b600080fd5b6102bd6102923660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b6102e36102de3660046135d5565b610799565b005b6102e36102f33660046135f9565b6107f6565b6102bd6103063660046135d5565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102bd600b5481565b6102e36103453660046135f9565b610928565b6102e36103583660046135f9565b6109b5565b60025461037190600160a01b900460ff1681565b60405190151581526020016102c7565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c7565b6102e36103ce366004613612565b6109f2565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e361040836600461375a565b610f47565b6102e361041b3660046135f9565b610fd4565b61043361042e3660046135d5565b611075565b6040516102c79190613813565b6102e361044e366004613857565b6110ee565b6102bd60095481565b61046f61046a3660046135d5565b611181565b6040516102c79190613958565b6102e361048a3660046135f9565b6113f1565b6102bd60075481565b6102e36104a63660046135f9565b611490565b6102e36104b93660046139e4565b6115db565b6102e36117ce565b61046f6104d43660046139e4565b6117e2565b6104ec6104e73660046135d5565b6119ea565b6040516102c79190613a8a565b6000546001600160a01b03166103a8565b6105536105183660046135f9565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102c7565b6102e36105943660046135f9565b611a84565b6102e36105a7366004613ae2565b611b1b565b6102e36105ba3660046135f9565b611e77565b6105d26105cd3660046135f9565b611f7e565b6040516102c79190613b70565b6102bd600a5481565b61062f6105f63660046135f9565b600560205260009081526040902080546009820154600a830154600b840154600c909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102c7565b6102e361066f3660046135d5565b61206b565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6102e36106a9366004613b83565b612123565b6102e36106bc3660046135f9565b6121e1565b600c546103a8906001600160a01b031681565b6001546103a8906001600160a01b031681565b6102bd60085481565b6102bd600d5481565b61070c610707366004613bf8565b61231f565b6040516102c79190613c6d565b6102e36107273660046135d5565b612484565b6002546103a8906001600160a01b031681565b6102e361074d3660046135d5565b6124da565b610371610760366004613cfd565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b6107a1612553565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b3360009081526004602052604090205461082b5760405162461bcd60e51b815260040161082290613d29565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108a45760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610822565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061091c9083908590918252602082015260400190565b60405180910390a15050565b610930612553565b806000036109805760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f00006044820152606401610822565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107eb565b6109bd612553565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107eb565b33600090815260046020526040902054610a1e5760405162461bcd60e51b815260040161082290613d29565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610ab45760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610822565b6009546000848152600360205260409020600101544291610ad491613d76565b1115610b2e5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610822565b60008381526003602052604090205415610b8a5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610822565b828103610bd95760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610822565b81546001600160a01b0316610c295760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610822565b60008511610c885760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610822565b600854851115610cf75760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610822565b6001600160a01b038416610d4d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610822565b6000610d5984886125ad565b90508583600a01541015610e0e57600080610d7389612618565b91509150878186600a0154610d889190613d76565b1015610dcd5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610822565b610dd785836127c0565b8085600a016000828254610deb9190613d76565b925050819055508085600b016000828254610e069190613d89565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600a84018054889290610eb5908490613d89565b925050819055508583600b016000828254610ed09190613d76565b9091555050600d83018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b6000806000610f5887878787612822565b925092509250610f688282612b28565b826060015182600b016000828254610f809190613d89565b909155505082516001600160a01b0316600090815260046020908152604080832054835260039091529081902042600190910155830151610fc19083612c01565b610fcb8184612cec565b50505050505050565b610fdc612553565b806000036110405760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610822565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107eb565b6001600160a01b038116600090815260046020908152604080832054835260038252918290206002018054835181840281018401909452808452606093928301828280156110e257602002820191906000526020600020905b8154815260200190600101908083116110ce575b50505050509050919050565b6110f6612553565b600254600160a01b900460ff16156111465760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610822565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b6001600160a01b03811660009081526004602090815260408083206001018054825181850281018501909352808352606094938301828280156111e357602002820191906000526020600020905b8154815260200190600101908083116111cf575b50505050509050805167ffffffffffffffff8111156112045761120461364b565b60405190808252806020026020018201604052801561123d57816020015b61122a6133ca565b8152602001906001900390816112225790505b50915060005b81518110156113ea57600082828151811061126057611260613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116112b1575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561134457602002820191906000526020600020905b815481526020019060010190808311611330575b5050505050815250509050600061135a83612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516113b69190613d76565b8152508685815181106113cb576113cb613d9c565b6020026020010181905250505050806113e390613db2565b9050611243565b5050919050565b6113f9612553565b66b1a2bc2ec5000081111561145b5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610822565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107eb565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811682526001830154811682860152600283015482850181905260038401546060840152600490930154608083015291855260059093529220815191929091166115105760405162461bcd60e51b815260040161082290613dcb565b80546001600160a01b031633146115695760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b6115738184612b28565b816060015181600b01600082825461158b9190613d89565b909155505081516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558201516115cc9082612c01565b6115d68383612cec565b505050565b6000805b825181101561173c5760008382815181106115fc576115fc613d9c565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146116745760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610822565b60008061168084612618565b9150915061168e83836127c0565b8083600a015461169e9190613d76565b6116a89087613d76565b95508083600b0160008282546116be9190613d89565b90915550508254600a8401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611705908590613d76565b60405190815260200160405180910390a36000600a8401556117278484612c01565b505050508061173590613db2565b90506115df565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190613dfa565b6117d6612553565b6117e06000612eca565b565b6060815167ffffffffffffffff8111156117fe576117fe61364b565b60405190808252806020026020018201604052801561183757816020015b6118246133ca565b81526020019060019003908161181c5790505b50905060005b82518110156119e457600083828151811061185a5761185a613d9c565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b031681528251610100810190935293955091938301906001830160088282826020028201915b8154815260200190600101908083116118ab575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820180548060200260200160405190810160405280929190818152602001828054801561193e57602002820191906000526020600020905b81548152602001906001019080831161192a575b5050505050815250509050600061195483612618565b91505060405180608001604052808481526020016004600085600001516001600160a01b03166001600160a01b031681526020019081526020016000206000015481526020018381526020018284606001516119b09190613d76565b8152508585815181106119c5576119c5613d9c565b6020026020010181905250505050806119dd90613db2565b905061183d565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611a7457602002820191906000526020600020905b815481526020019060010190808311611a60575b5050505050815250509050919050565b611a8c612553565b80600003611ae65760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610822565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107eb565b33600090815260046020526040902054611b475760405162461bcd60e51b815260040161082290613d29565b33600090815260046020526040902060010154600511611ba95760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610822565b600754821015611c1a5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610822565b60008111611c785760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610822565b600081611c8d670de0b6b3a764000085613e1c565b611c979190613e49565b600d80549192506000919082611cac83613db2565b9091555033600081815260046020908152604080832060018082018054808301825590865284862001879055825160e0810184529586528584018c81528684018c9052606087018c90526080870186905260a087018a90528351868152808601855260c0880152878652600590945291909320845181546001600160a01b0319166001600160a01b03909116178155915194955091939091611d53919083019060086133f6565b50604082015160098201556060820151600a8201556080820151600b82015560a0820151600c82015560c08201518051611d9791600d840191602090910190613434565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e319190613dfa565b508054604080518781526020810186905284917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b33600090815260046020526040902054611ea35760405162461bcd60e51b815260040161082290613d29565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611f125760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610822565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f489060020183612f1a565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161091c565b611f8661346e565b600082815260056020908152604091829020825160e08101845281546001600160a01b03168152835161010081019485905290939192840191600184019060089082845b815481526020019060010190808311611fca575050505050815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201805480602002602001604051908101604052809291908181526020018280548015611a745760200282019190600052602060002090815481526020019060010190808311611a60575050505050815250509050919050565b612073612553565b6001600160a01b0381166120d55760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610822565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107eb565b336000908152600460205260409020541561218f5760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152650d2c890c2e6d60d31b6064820152608401610822565b600061219d85858585613043565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036122565760405162461bcd60e51b815260040161082290613dcb565b336000908152600460205260408082205483516001600160a01b03168352912054146122c45760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610822565b60408082015160009081526005602052206122df8184612b28565b816060015181600a0160008282546122f79190613d76565b90915550506060820151600b82018054600090612315908490613d89565b9091555050505050565b606060008267ffffffffffffffff81111561233c5761233c61364b565b60405190808252806020026020018201604052801561237557816020015b6123626134ba565b81526020019060019003908161235a5790505b50905060005b8381101561247a57600085858381811061239757612397613d9c565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061241657612416613d9c565b6020908102929092013583525081810184905283516001600160a01b03166000908152600490915260409081902054910152845185908590811061245c5761245c613d9c565b602002602001018190525050508061247390613db2565b905061237b565b5090505b92915050565b61248c612553565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107eb565b6124e2612553565b6001600160a01b0381166125475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610822565b61255081612eca565b50565b6000546001600160a01b031633146117e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610822565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506126107f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613e5d565b949350505050565b6000818152600560209081526040808320600d01805482518185028101850190935280835260609493849392919083018282801561267557602002820191906000526020600020905b815481526020019060010190808311612661575b50505050509050805167ffffffffffffffff8111156126965761269661364b565b6040519080825280602002602001820160405280156126bf578160200160208202803683370190505b50925060005b81518110156127b9576000600660008484815181106126e6576126e6613d9c565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161275991613d76565b10156127a85782828151811061277157612771613d9c565b602002602001015185838151811061278b5761278b613d9c565b602090810291909101015260608101516127a59085613d76565b93505b506127b281613db2565b90506126c5565b5050915091565b60005b81518110156115d6576000801b8282815181106127e2576127e2613d9c565b602002602001015114612812576128128383838151811061280557612805613d9c565b6020026020010151612b28565b61281b81613db2565b90506127c3565b61282a6134e2565b600254604080516080810182528781526020810187905280820186905260608101859052905163bf93fde160e01b81526000928392839283928392839283926001600160a01b03169163bf93fde1916128869190600401613ec2565b60a0604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613f31565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166129555760405162461bcd60e51b815260040161082290613dcb565b85826080015111156129b45760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610822565b6040805161010081019182905286916129f09190600185019060089082845b8154815260200190600101908083116129d35750505050506130e3565b14612a3d5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610822565b81516001600160a01b03166000908152600460205260409020548414612aa55760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d617463680000000000006044820152606401610822565b80600c0154670de0b6b3a76400008360600151612ac29190613e1c565b612acc9190613e49565b871015612b145760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610822565b909d909c50909a5098505050505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612bcc600d840183612f1a565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600a015482600b0154612c179190613d76565b9050806000036115d65781546001600160a01b03166000908152600460205260409020612c479060010184613272565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b031916815590612cb56001830182613523565b6009820160009055600a820160009055600b820160009055600c820160009055600d82016000612ce59190613532565b5050505050565b6000600b54600014612db857670de0b6b3a7640000600b548360600151612d139190613e1c565b612d1d9190613e49565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190613dfa565b505b6000818360600151612dca9190613d89565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e659190613dfa565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612f7684805480602002602001604051908101604052809291908181526020018280548015612f6b57602002820191906000526020600020905b815481526020019060010190808311612f57575b505050505084613317565b9150915080612fbf5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610822565b8354600090612fd090600190613d89565b905080831461301557848181548110612feb57612feb613d9c565b906000526020600020015485848154811061300857613008613d9c565b6000918252602090912001555b8480548061302557613025613f71565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161309691600401613f87565b6020604051808303816000875af11580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190613fec565b9695505050505050565b60006130ed613550565b6130f561356e565b60005b600681101561313f5784816008811061311357613113613d9c565b602002015183826006811061312a5761312a613d9c565b602002015261313881613db2565b90506130f8565b50604051631eb694f160e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5b4a7889061318c908590600401614005565b602060405180830381865afa1580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd9190613fec565b815260c0840151602082015260e0840151604080830191909152516304b98e1d60e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325cc70e890613231908490600401614036565b602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613fec565b6000806132ce848054806020026020016040519081016040528092919081815260200182805480156132c357602002820191906000526020600020905b8154815260200190600101908083116132af575b50505050508461337a565b9150915080612fbf5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610822565b81516000908190815b81811015613367578486828151811061333b5761333b613d9c565b602002602001015103613355579250600191506133739050565b8061335f81613db2565b915050613320565b50600019600092509250505b9250929050565b81516000908190815b81811015613367578486828151811061339e5761339e613d9c565b6020026020010151036133b8579250600191506133739050565b806133c281613db2565b915050613383565b60408051608081018252600080825260208201529081016133e961346e565b8152602001600081525090565b8260088101928215613424579160200282015b82811115613424578251825591602001919060010190613409565b5061343092915061358c565b5090565b8280548282559060005260206000209081019282156134245791602002820182811115613424578251825591602001919060010190613409565b6040518060e0016040528060006001600160a01b031681526020016134916135a1565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134d56134e2565b8152600060209091015290565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5061255090600881019061358c565b5080546000825590600052602060002090810190612550919061358c565b6040518060c001604052806006906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b5b80821115613430576000815560010161358d565b6040518061010001604052806008906020820280368337509192915050565b6001600160a01b038116811461255057600080fd5b6000602082840312156135e757600080fd5b81356135f2816135c0565b9392505050565b60006020828403121561360b57600080fd5b5035919050565b60008060006060848603121561362757600080fd5b83359250602084013591506040840135613640816135c0565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156136845761368461364b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364b565b604052919050565b600082601f8301126136cc57600080fd5b6136d4613661565b8060408401858111156136e657600080fd5b845b818110156137005780358452602093840193016136e8565b509095945050505050565b600082601f83011261371c57600080fd5b613724613661565b80608084018581111561373657600080fd5b845b818110156137005761374a87826136bb565b8452602090930192604001613738565b6000806000806102e080868803121561377257600080fd5b61377c87876136bb565b945061378b876040880161370b565b935061379a8760c088016136bb565b92508661011f8701126137ac57600080fd5b6040516101e0810181811067ffffffffffffffff821117156137d0576137d061364b565b6040529086019080888311156137e557600080fd5b61010088015b838110156138035780358252602091820191016137eb565b5050809250505092959194509250565b6020808252825182820181905260009190848201906040850190845b8181101561384b5783518352928401929184019160010161382f565b50909695505050505050565b6000806040838503121561386a57600080fd5b8235613875816135c0565b91506020830135613885816135c0565b809150509250929050565b600081518084526020808501945080840160005b838110156138c0578151875295820195908201906001016138a4565b509495945050505050565b80516001600160a01b031682526020808201516000916101c091818601845b6008811015613907578251825291830191908301906001016138ea565b5050505060408301516101208501526060830151610140850152608083015161016085015260a083015161018085015260c0830151816101a086015261394f82860182613890565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156139d657603f19898403018552815160808151855288820151898601528782015181898701526139b5828701826138cb565b6060938401519690930195909552509487019492509086019060010161397f565b509098975050505050505050565b600060208083850312156139f757600080fd5b823567ffffffffffffffff80821115613a0f57600080fd5b818501915085601f830112613a2357600080fd5b813581811115613a3557613a3561364b565b8060051b9150613a4684830161368a565b8181529183018401918481019088841115613a6057600080fd5b938501935b83851015613a7e57843582529385019390850190613a65565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b80831015613ad75783518252928401926001929092019190840190613ab7565b509695505050505050565b60008060006101408486031215613af857600080fd5b84601f850112613b0757600080fd5b60405161010080820182811067ffffffffffffffff82111715613b2c57613b2c61364b565b60405285018187821115613b3f57600080fd5b865b82811015613b59578035825260209182019101613b41565b509197903596506101209590950135949350505050565b6020815260006135f260208301846138cb565b6000806000806101a0808688031215613b9b57600080fd5b613ba587876136bb565b9450613bb4876040880161370b565b9350613bc38760c088016136bb565b92508661011f870112613bd557600080fd5b60405160a0810181811067ffffffffffffffff821117156137d0576137d061364b565b60008060208385031215613c0b57600080fd5b823567ffffffffffffffff80821115613c2357600080fd5b818501915085601f830112613c3757600080fd5b813581811115613c4657600080fd5b8660208260051b8501011115613c5b57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613cf0578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c8a565b5091979650505050505050565b60008060408385031215613d1057600080fd5b8235613d1b816135c0565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561247e5761247e613d60565b8181038181111561247e5761247e613d60565b634e487b7160e01b600052603260045260246000fd5b600060018201613dc457613dc4613d60565b5060010190565b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b600060208284031215613e0c57600080fd5b815180151581146135f257600080fd5b808202811582820484141761247e5761247e613d60565b634e487b7160e01b600052601260045260246000fd5b600082613e5857613e58613e33565b500490565b600082613e6c57613e6c613e33565b500690565b8060005b600281101561303d578151845260209384019390910190600101613e75565b8060005b600281101561303d57613eac848351613e71565b6040939093019260209190910190600101613e98565b60006102e082019050613ed6828451613e71565b602080840151613ee96040850182613e94565b506040840151613efc60c0850182613e71565b506060840151610100840160005b600f811015613f2757825182529183019190830190600101613f0a565b5050505092915050565b600080600080600060a08688031215613f4957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052603160045260246000fd5b60006101a082019050613f9b828451613e71565b602080840151613fae6040850182613e94565b506040840151613fc160c0850182613e71565b506060840151610100840160005b6005811015613f2757825182529183019190830190600101613fcf565b600060208284031215613ffe57600080fd5b5051919050565b60c08101818360005b600681101561402d57815183526020928301929091019060010161400e565b50505092915050565b60608101818360005b600381101561402d57815183526020928301929091019060010161403f56fea2646970667358221220ce4b5ac012d074f8459b3087900f248a83a7859401303ac0546d4eb7feb3ba5064736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the idHash being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_receiveAmount\": \"The amount of USD to receive\",\n          \"_upiId\": \"The packed upi ID of the depositor\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the idHash being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[8],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[15])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a idHash from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4128,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)6944\"\n      },\n      {\n        \"astId\": 4131,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IHDFCSendProcessor)6914\"\n      },\n      {\n        \"astId\": 4133,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 4138,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4086_storage)\"\n      },\n      {\n        \"astId\": 4143,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)4023_storage)\"\n      },\n      {\n        \"astId\": 4148,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)4041_storage)\"\n      },\n      {\n        \"astId\": 4153,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)4062_storage)\"\n      },\n      {\n        \"astId\": 4155,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4157,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4159,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4161,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4163,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 4165,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 4167,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)8_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[8]\",\n        \"numberOfBytes\": \"256\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IHDFCSendProcessor)6914\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IHDFCSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IRegistrationProcessor)6944\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)4023_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct HDFCRamp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)4023_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)4086_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)4086_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)4062_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct HDFCRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)4062_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)4041_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct HDFCRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)4041_storage\"\n      },\n      \"t_struct(AccountInfo)4023_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4019,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"idHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4022,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)4078_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 4073,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 4077,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)4041_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 4025,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4029,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"upiId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)8_storage\"\n          },\n          {\n            \"astId\": 4031,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4033,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"10\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4035,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"11\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4037,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"12\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4040,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"13\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"448\"\n      },\n      \"t_struct(GlobalAccountInfo)4086_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 4080,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 4082,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4085,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)4078_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)4062_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct HDFCRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 4053,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4055,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 4057,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4059,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 4061,\n            \"contract\": \"contracts/ramps/hdfc/HDFCRamp.sol:HDFCRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/HDFCRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0xE5e50A9F071DF9185183c6523c9a4162eB278583\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x427f5459e66dd9eaf55c22ca02a785043005f920494a554d2a31764315405dd8\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xE5e50A9F071DF9185183c6523c9a4162eB278583\",\n    \"transactionIndex\": 151,\n    \"gasUsed\": \"1573175\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000001000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xd0f3fde82a303d9be5569b9e8aad99122407749031cec1c0c5b6de0e43a13795\",\n    \"transactionHash\": \"0x427f5459e66dd9eaf55c22ca02a785043005f920494a554d2a31764315405dd8\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 151,\n        \"blockNumber\": 5239492,\n        \"transactionHash\": \"0x427f5459e66dd9eaf55c22ca02a785043005f920494a554d2a31764315405dd8\",\n        \"address\": \"0xE5e50A9F071DF9185183c6523c9a4162eB278583\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 166,\n        \"blockHash\": \"0xd0f3fde82a303d9be5569b9e8aad99122407749031cec1c0c5b6de0e43a13795\"\n      }\n    ],\n    \"blockNumber\": 5239492,\n    \"cumulativeGasUsed\": \"12161576\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xb4A7486b0EFa264D5FC6A8181bfc7A150cD57849\",\n    \"0x1A2dcc7AfC7Bf09bE718E54466aA18166C00E4FD\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"alerts@hdfcbank.net\",\n    \"0\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":\\\"HDFCRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _hdfcMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed userIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x201e3eb65e17171b5359065b51e78356853be26e598180822ebb4305b0cc3884\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6a89de57b7dfd51409bd06565af608c976dda3fc267d939df728b37d4c1f5006\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\\\n\\\\n\\\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\\\n\\\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\\\n\\\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\\\n\\\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\\\n\\\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\\\n\\\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x2bc6b9f3db91263227b1e3a6b8fa9a965b9aa896bf3d12434766198a8b823e81\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001d3d38038062001d3d83398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611985620003b86000396000818161010a015261026801526119856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f289eb82230faad0c62fbd2f540384142221e6b43882036be535e03d4d49f7f7285527f090b259da85021f388985bd3de1665a5d035c5a770be66b75093da97e178d7eb60208601526000608086018661067487357f1d466572d6fee03f19c311206ca5817e0088ca3817fae4f83ffc87f87c6d81247f202032329a66a39b16ab45b84d1a4c5fb030644957050a46b628de101ffb73248461056c565b6106c460208801357f215448eb180d4812a749a8eb0085b5cc108dbaea6af4614ea38ca86ddd3adcfa7f1f1a33746fb5bb57c457768bab47b04fe76d00a7290a62f71344a8ed659f80f08461056c565b61071460408801357f0159c8912a08d29aa9af11e4daf0adbf26108fe74c45ff2d636ecc69d5437f2f7f050406f4edf6a26e9227eebdac7c9c6ef22a1275fc6bdbd59e3f5072dd62d91b8461056c565b61076460608801357f16be9a7484c0895cd1cdb9526ccf2d6d1645e53f5cda64cfa00749884c58ab3e7f1ee0821a01e9f589b248ac2c66efa1961e7f82aad907d0d30b1fae4495d4adbf8461056c565b6107b460808801357f0c94a4026750622d8fcbe4f7a710552a26a1fdbddec11103d3eaf25f3e8253d47f2367adfd5521befb39f7482424f3ca32be5f36c7b79096f04cd51e5760b8e6398461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29e0c9df733e35f5a0f4a592c344dfa5669b61230266e156d86ac98bd3dfa6cc6102808201527f23f7f7e68d1d08a306a9752966290057d6167da414f3a75de9e253febc9e56ae6102a08201527f036dd57a7bd3ead51c3d0d5bd18cf6182b104511db118a576c0b7050a7c3b5ac6102c08201527f2a6aab1f59ba4c8b68d1835c9518fb5e30d07e1699f58ceec65b5bd38b461b656102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea26469706673582212204649a612b2c53a9a408c66298ccaa4832140576b76a617e8103caa711e7533a764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f289eb82230faad0c62fbd2f540384142221e6b43882036be535e03d4d49f7f7285527f090b259da85021f388985bd3de1665a5d035c5a770be66b75093da97e178d7eb60208601526000608086018661067487357f1d466572d6fee03f19c311206ca5817e0088ca3817fae4f83ffc87f87c6d81247f202032329a66a39b16ab45b84d1a4c5fb030644957050a46b628de101ffb73248461056c565b6106c460208801357f215448eb180d4812a749a8eb0085b5cc108dbaea6af4614ea38ca86ddd3adcfa7f1f1a33746fb5bb57c457768bab47b04fe76d00a7290a62f71344a8ed659f80f08461056c565b61071460408801357f0159c8912a08d29aa9af11e4daf0adbf26108fe74c45ff2d636ecc69d5437f2f7f050406f4edf6a26e9227eebdac7c9c6ef22a1275fc6bdbd59e3f5072dd62d91b8461056c565b61076460608801357f16be9a7484c0895cd1cdb9526ccf2d6d1645e53f5cda64cfa00749884c58ab3e7f1ee0821a01e9f589b248ac2c66efa1961e7f82aad907d0d30b1fae4495d4adbf8461056c565b6107b460808801357f0c94a4026750622d8fcbe4f7a710552a26a1fdbddec11103d3eaf25f3e8253d47f2367adfd5521befb39f7482424f3ca32be5f36c7b79096f04cd51e5760b8e6398461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f29e0c9df733e35f5a0f4a592c344dfa5669b61230266e156d86ac98bd3dfa6cc6102808201527f23f7f7e68d1d08a306a9752966290057d6167da414f3a75de9e253febc9e56ae6102a08201527f036dd57a7bd3ead51c3d0d5bd18cf6182b104511db118a576c0b7050a7c3b5ac6102c08201527f2a6aab1f59ba4c8b68d1835c9518fb5e30d07e1699f58ceec65b5bd38b461b656102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea26469706673582212204649a612b2c53a9a408c66298ccaa4832140576b76a617e8103caa711e7533a764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol:HDFCRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/HDFCSendProcessor.json",
    "content": "{\n  \"address\": \"0x668109Fb6c6D2a563F9b7FB3dA3367CCb726B4af\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_hdfcMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[15]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[15]\"\n            }\n          ],\n          \"internalType\": \"struct IHDFCSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[15]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[15]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x1cc384f011cf0369510fc33fa28049b5e26c96f8e6c35a9287c0e4368748b389\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x668109Fb6c6D2a563F9b7FB3dA3367CCb726B4af\",\n    \"transactionIndex\": 90,\n    \"gasUsed\": \"2514882\",\n    \"logsBloom\": \"0x04000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000100000000000000400000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xbcd9dc9f0b45e2149473105b957b5103d580fd64c2e9d2fecba915af534b2faa\",\n    \"transactionHash\": \"0x1cc384f011cf0369510fc33fa28049b5e26c96f8e6c35a9287c0e4368748b389\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 90,\n        \"blockNumber\": 5239493,\n        \"transactionHash\": \"0x1cc384f011cf0369510fc33fa28049b5e26c96f8e6c35a9287c0e4368748b389\",\n        \"address\": \"0x668109Fb6c6D2a563F9b7FB3dA3367CCb726B4af\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 87,\n        \"blockHash\": \"0xbcd9dc9f0b45e2149473105b957b5103d580fd64c2e9d2fecba915af534b2faa\"\n      }\n    ],\n    \"blockNumber\": 5239493,\n    \"cumulativeGasUsed\": \"9082976\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0xb4A7486b0EFa264D5FC6A8181bfc7A150cD57849\",\n    \"0x1A2dcc7AfC7Bf09bE718E54466aA18166C00E4FD\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"alerts@hdfcbank.net\",\n    \"30\"\n  ],\n  \"numDeployments\": 5,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_hdfcMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"internalType\\\":\\\"struct IHDFCSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[15]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[15]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":\\\"HDFCSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/DateTime.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity ^0.8.0;\\\\n\\\\n// ----------------------------------------------------------------------------\\\\n// DateTime Library v2.0\\\\n//\\\\n// A gas-efficient Solidity date and time library\\\\n//\\\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\\\n//\\\\n// Tested date range 1970/01/01 to 2345/12/31\\\\n//\\\\n// Conventions:\\\\n// Unit      | Range         | Notes\\\\n// :-------- |:-------------:|:-----\\\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\\\n// year      | 1970 ... 2345 |\\\\n// month     | 1 ... 12      |\\\\n// day       | 1 ... 31      |\\\\n// hour      | 0 ... 23      |\\\\n// minute    | 0 ... 59      |\\\\n// second    | 0 ... 59      |\\\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\\\n//\\\\n//\\\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\\\n//\\\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\\\n// ----------------------------------------------------------------------------\\\\n\\\\nlibrary DateTime {\\\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\\\n    int256 constant OFFSET19700101 = 2440588;\\\\n\\\\n    uint256 constant DOW_MON = 1;\\\\n    uint256 constant DOW_TUE = 2;\\\\n    uint256 constant DOW_WED = 3;\\\\n    uint256 constant DOW_THU = 4;\\\\n    uint256 constant DOW_FRI = 5;\\\\n    uint256 constant DOW_SAT = 6;\\\\n    uint256 constant DOW_SUN = 7;\\\\n\\\\n    // ------------------------------------------------------------------------\\\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\\\n    // the date conversion algorithm from\\\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\\\n    //\\\\n    // days = day\\\\n    //      - 32075\\\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\\\n    //      - offset\\\\n    // ------------------------------------------------------------------------\\\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\\\n        require(year >= 1970);\\\\n        int256 _year = int256(year);\\\\n        int256 _month = int256(month);\\\\n        int256 _day = int256(day);\\\\n\\\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\\\n\\\\n        _days = uint256(__days);\\\\n    }\\\\n\\\\n    function timestampFromDateTime(\\\\n        uint256 year,\\\\n        uint256 month,\\\\n        uint256 day,\\\\n        uint256 hour,\\\\n        uint256 minute,\\\\n        uint256 second\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256 timestamp)\\\\n    {\\\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\\\n            + minute * SECONDS_PER_MINUTE + second;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x64f6113ad342f8bd3c2eb74fde279401d604faf77dd08f6c16c3912c3519f170\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/HDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/hdfc_send_verifier.sol\\\\\\\";\\\\nimport { HDFCTimestampParsing } from \\\\\\\"./lib/HDFCTimestampParsing.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IHDFCSendProcessor } from \\\\\\\"./interfaces/IHDFCSendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _hdfcMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IHDFCSendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        )\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\\\n        // parse and convert to a unix timestamp\\\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\\\n\\\\n        // Signals [11] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\\\n\\\\n        // Signals [12] is the packed offRamper UPI ID hash\\\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\\\n\\\\n        // Signals [14] is intentHash\\\\n        intentHash = bytes32(_proof.signals[14]);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x817fbb9806670719d4e42665dfdf60a3beb3852f3ad8178049e3836732de7034\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IHDFCSendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[15] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe022a0768bd0928ca85ebcfc7541907038fc0b786572701c5a37b97ec6040847\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { DateTime } from \\\\\\\"../../../external/DateTime.sol\\\\\\\";\\\\n\\\\nimport { StringConversionUtils } from \\\\\\\"../../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\nlibrary HDFCTimestampParsing {\\\\n\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /**\\\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\\\n     */\\\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\\\n        string[8] memory extractedStrings;\\\\n        uint256 breakCounter;\\\\n        uint256 lastBreak;\\\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\\\n                lastBreak = i + 1;\\\\n                breakCounter++;\\\\n            }\\\\n        }\\\\n        // Add last substring to array\\\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\\\n\\\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\\\n        require(breakCounter == 7, \\\\\\\"Invalid date string\\\\\\\");\\\\n\\\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\\\n            extractedStrings[3].stringToUint(0), // year\\\\n            _parseMonth(extractedStrings[2]), // month\\\\n            extractedStrings[1].stringToUint(0), // day\\\\n            extractedStrings[4].stringToUint(0), // hour\\\\n            extractedStrings[5].stringToUint(0), // minute\\\\n            extractedStrings[6].stringToUint(0) // second\\\\n        );\\\\n\\\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\\\n     * string is of the format \\\\\\\"+0530\\\\\\\" or \\\\\\\"-0530\\\\\\\" where the first character is either a \\\\\\\"+\\\\\\\" or a \\\\\\\"-\\\\\\\" and the next 4 characters are hhmm. If\\\\n     * the _timeOffsetString is \\\\\\\"+0530\\\\\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\\\n     *\\\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\\\n     */\\\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\\\n        require(bytes(_timeOffsetString).length == 5, \\\\\\\"Invalid timezone offset\\\\\\\");\\\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\\\n\\\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\\\n\\\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\\\\\"+\\\\\\\" meaning the tz is ahead of GMT and must\\\\n        // be subtracted\\\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\\\n    }\\\\n\\\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jan\\\\\\\")) {\\\\n            return 1;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Feb\\\\\\\")) {\\\\n            return 2;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Mar\\\\\\\")) {\\\\n            return 3;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Apr\\\\\\\")) {\\\\n            return 4;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"May\\\\\\\")) {\\\\n            return 5;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jun\\\\\\\")) {\\\\n            return 6;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Jul\\\\\\\")) {\\\\n            return 7;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Aug\\\\\\\")) {\\\\n            return 8;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Sep\\\\\\\")) {\\\\n            return 9;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Oct\\\\\\\")) {\\\\n            return 10;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Nov\\\\\\\")) {\\\\n            return 11;\\\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\\\\\"Dec\\\\\\\")) {\\\\n            return 12;\\\\n        } else {\\\\n            revert(\\\\\\\"Invalid month\\\\\\\");\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x74067d5ce3820b0763d3faee918d58f423377b0729af325e8f7670ee4466b713\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/hdfc_send_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\\\n\\\\n\\\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\\\n\\\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\\\n\\\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\\\n\\\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\\\n\\\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\\\n\\\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\\\n\\\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\\\n\\\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\\\n\\\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\\\n\\\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\\\n\\\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\\\n\\\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\\\n\\\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\\\n\\\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\\\n\\\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\\\n\\\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n\\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n\\\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\\\n\\\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\\\n\\\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 416)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 448)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 480)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x708985be21c0895b2b06ac50102da21cdf2bb14ab8f3f7c0a7be754bcc4207d8\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162002de538038062002de583398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612a2e620003b76000396000818160ff01526103160152612a2e6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063bf93fde111610097578063dbac582111610066578063dbac582114610220578063f054a9a314610237578063f2fde38b1461024a578063f6c7226b1461025d57600080fd5b8063bf93fde1146101b5578063c0d05fed146101f0578063ced1e97814610205578063d0b71f991461020d57600080fd5b80638da5cb5b116100d35780638da5cb5b1461016b578063a8ef333f1461017c578063b2a3fda41461018f578063b870676c146101a257600080fd5b806315d276e1146100fa57806319d091521461013e578063715018a614610161575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015161014c36600461230a565b610270565b6040519015158152602001610135565b6101696102e4565b005b6000546001600160a01b0316610121565b600154610121906001600160a01b031681565b61016961019d36600461230a565b6102f8565b600254610121906001600160a01b031681565b6101c86101c3366004612323565b610305565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6101f86105b1565b6040516101359190612360565b6101f861063f565b61016961021b3660046123a8565b6106d1565b61022960045481565b604051908152602001610135565b6101516102453660046123dd565b6106fb565b6101696102583660046123a8565b611081565b61016961026b366004612459565b6110f7565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de919061250a565b92915050565b6102ec61110f565b6102f66000611169565b565b61030061110f565b600455565b600080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103885760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a3916103bb918a919082019060c083019061010084019060040161252c565b602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc919061250a565b6104385760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161037f565b610446610100870135610270565b6104925760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161037f565b60006104a58761010001600160046111b9565b905060036040516104b691906125c3565b6040518091039020816040516020016104cf9190612639565b60405160208183030381529060405280519060200120146105325760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161037f565b61054e60066105488961010001600460066111b9565b90611294565b9550600061056388610100016006600b6111b9565b90506004546105718261146a565b61057b919061266b565b95506102808801359450610260880135935061059b6102a0890135611617565b509496939592945090926102c090920135919050565b600380546105be9061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea9061258f565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60606003805461064e9061258f565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061258f565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b6106d961110f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f85565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610733576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610769576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061079a576000805260206000f35b5050505050565b7f11c0fa536785a14ea232244faf4db797ed78290ed4fb27d5038cac6ae9a3915285527f25d09a0e68aa815305c2995cc88de47499c6bf8dd88aebc829db24846944696160208601526000608086018661083e87357f06e757dafa88a886ce63a8c2b453fedcc71a0eb31f0131a905a4913207355d4c7f1364e9163e5b15b2805a6aac65afcb4001017d5343017c737564a23b6d08428684610736565b61088e60208801357f29ca5087e79a2d1fb754d59033fec517f164dfd734b75a8cc89c6e2894cec0687f15d07987dd5b551b72857cefaed299e7a1989a2927f859a6d0ad593beba9361384610736565b6108de60408801357f2b6a88b3112d75e15c1fc7f737cf28da3a22df26156e80d1dceb1d792aa6f5697f24580e32cd5353fa5aa622fec5d0cb8834ad9a35a5d7ed3de960648f39fa42af84610736565b61092e60608801357f24a9fdbfeb9e558ea7eb1c0f9d2f59adb3e19fee489181e0649cac9968d92c3d7f23ea51f6d35583a15c0e0f0bb44cdb055ddccb3109365d0feb10559bce3f682484610736565b61097e60808801357f083b0d8149f542f7d51ff78dd5bd947ac228adf4765f13cbb8ae4b0c9de33d197f04282c6bb25a8a05b9d698fa726e427251a636a05ae11f8178ed74ce70c7b38384610736565b6109ce60a08801357f1803098aec4fded4fc5b2bab68cf7fb1f5cdfc173e8b4c2d6f3ad5ae8b7d5ce47f02cf06b9216abdbe0d145ee6ba106240740f6554ba338900ae157bc1d113612384610736565b610a1e60c08801357f2e7c4cf7b58d9b12bb9cee35f053430f80678fe1885b216886c042d0cde497487f12a5802440d5b5d29b299b8818078e7c2165b5d2f49776e55ac4c8da11581e2f84610736565b610a6e60e08801357f1d78c8b32944313d7e911c1c721109f4a04d0879fe1e1802e3ddf943612a4ddd7f245b7127d480d0e750564b78818a037a57e3a17f889b15dbb01e9e243ad4218084610736565b610abf6101008801357f2568c716b634adaf4106a56b42776b724d5ef21e52864a1347088de129b478fe7f17565054db4aa08be111cfc14344b79875bc704e563362d7a9d3992271be350984610736565b610b106101208801357f0400bd816ec371a36d4594b5466ba7a092139238746fcee0f5e254b7944c51617f013d5ee8b0b9e671e5bde7130e47682c47ca38dd479db7331ca393bf5edfa02484610736565b610b616101408801357f10444a550566f8186e8fd121fe8a929e92f66e479515b67833a3d4bc07e5eeb77f24042e12cbcf48ac6d7b05da02753790ed095694fe2b3184239ec60500d3a86a84610736565b610bb26101608801357f29d1fba93734715a1dee7b66433894a2fb3304bcc7784a98f5f54b57c5f31f9e7f297559c6982845ac8cbc9d10c68703d05fff58f59bd022718930361da7d6240584610736565b610c036101808801357f01fbfd0d8299e28fe5b7b1e44840e0e49175cd784ea29456a5544d41ec56ed4f7f0120f0145b0c23de99655163334fafda2296421f9ff6d616a4381b731bcf8e9284610736565b610c546101a08801357f272e3f68e4dde921f3fecbf1da3e48be0375066071f79cf60d12a94909b013137f1c172fb9ad177d1f52f6f867020a4fd1d20819d027b26b5306eabd3d6a2da44884610736565b610ca56101c08801357f29bf2dd28bddc6677bfc29ae10bc2fc88614c805470de8f9c3bd943ef5b56b477f0bbe36a822bf94a2563eccdcdf022dce00eb8770630efa37084f7dabe6ec84f384610736565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0a656bd3ce0f460dfb7f25d7c71d52fecdc0eb363d413b2585775d8283eb0b046102808201527f0717de189821c8fd7338c4b95469c6dd47ee1aad6c8510dc9bcd7983852514eb6102a08201527f2d5f46e1cbebc83f7340eecebc2fff23e5da01cab367c8f7ec52c1bd3f6a2bc36102c08201527f1c0356f78812a13151f9212f9c69e8a7a9b2a7634c2b43617adda632ce9954d86102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f9d6000840135610702565b610faa6020840135610702565b610fb76040840135610702565b610fc46060840135610702565b610fd16080840135610702565b610fde60a0840135610702565b610feb60c0840135610702565b610ff860e0840135610702565b611006610100840135610702565b611014610120840135610702565b611022610140840135610702565b611030610160840135610702565b61103e610180840135610702565b61104c6101a0840135610702565b61105a6101c0840135610702565b6110686101e0840135610702565b611075818486888a6107a1565b90508060005260206000f35b61108961110f565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161037f565b61073381611169565b6110ff61110f565b600361110b82826126cd565b5050565b6000546001600160a01b031633146102f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006111c7848461278d565b60ff1667ffffffffffffffff8111156111e2576111e2612443565b60405190808252806020026020018201604052801561120b578160200160208202803683370190505b50905060ff84165b8360ff16811015611270578581600f811061123057611230612579565b60200201358261124360ff8816846127a6565b8151811061125357611253612579565b602090810291909101015280611268816127b9565b915050611213565b5061128b6007825161128291906127d2565b8290600761172b565b95945050505050565b600082818080805b84518110156113e457603060f81b8582815181106112bc576112bc612579565b01602001516001600160f81b031916108015906112fd5750603960f81b8582815181106112eb576112eb612579565b01602001516001600160f81b03191611155b1561134057603085828151811061131657611316612579565b0160200151611328919060f81c6127a6565b61133385600a6127d2565b61133d919061266b565b93505b81156113545782611350816127b9565b9350505b84818151811061136657611366612579565b01602001516001600160f81b031916601760f91b036113d25781156113cd5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161037f565b600191505b806113dc816127b9565b91505061129c565b50858211156114405760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161037f565b61144a82876127a6565b61145590600a6128cd565b61145f90846127d2565b979650505050505050565b60006114746122e2565b60008060005b855181101561152e5785818151811061149557611495612579565b6020910101516001600160f81b031916600160fd1b14806114da57508581815181106114c3576114c3612579565b6020910101516001600160f81b031916601d60f91b145b1561151c576114ea868383611a5c565b8484600881106114fc576114fc612579565b602002015261150c81600161266b565b915082611518816127b9565b9350505b80611526816127b9565b91505061147a565b50845161153e9086908390611a5c565b83836008811061155057611550612579565b60200201526007821461159b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b604482015260640161037f565b60006115fa6115b3828660035b602002015190611294565b60408601516115c190611b29565b6115ce60008860016115a8565b6115db60008960046115a8565b6115e860008a60056115a8565b6115f560008b60066115a8565b611f5f565b905061160d818560076020020151611fb0565b9695505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611684919061250a565b156116d15760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161037f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561171757600080fd5b505af115801561079a573d6000803e3d6000fd5b606060008083865161173d91906127d2565b67ffffffffffffffff81111561175557611755612443565b6040519080825280601f01601f19166020018201604052801561177f576020820181803683370190505b5090506000805b87518161ffff161015611936576000888261ffff16815181106117ab576117ab612579565b6020026020010151905060008767ffffffffffffffff8111156117d0576117d0612443565b6040519080825280602002602001820160405280156117f9578160200160208202803683370190505b50905060005b8881101561184b576118128160086127d2565b83901c82828151811061182757611827612579565b60ff9092166020928302919091019091015280611843816127b9565b9150506117ff565b5060005b8881101561192057600082828151811061186b5761186b612579565b602002602001015160ff169050806000146118e3578060f81b87878151811061189657611896612579565b60200101906001600160f81b031916908160001a905350856118b7816127b9565b96506118c690506002896128ef565b60ff166000036118de576118db600189612911565b97505b611906565b6118ee6002896128ef565b60ff1660010361190657611903600189612911565b97505b5060089290921c9180611918816127b9565b91505061184f565b505050808061192e9061292a565b915050611786565b5060018360ff1610156119d75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161037f565b85811115611a455760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161037f565b6000611a50836120a7565b98975050505050505050565b6060836000611a6b85856127a6565b67ffffffffffffffff811115611a8357611a83612443565b6040519080825280601f01601f191660200182016040528015611aad576020820181803683370190505b509050845b84811015611b1f57828181518110611acc57611acc612579565b01602001516001600160f81b03191682611ae688846127a6565b81518110611af657611af6612579565b60200101906001600160f81b031916908160001a90535080611b17816127b9565b915050611ab2565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611b5d9190612639565b6040516020818303038152906040528051906020012003611b8057506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611bb29190612639565b6040516020818303038152906040528051906020012003611bd557506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611c079190612639565b6040516020818303038152906040528051906020012003611c2a57506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611c5c9190612639565b6040516020818303038152906040528051906020012003611c7f57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611cb19190612639565b6040516020818303038152906040528051906020012003611cd457506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611d069190612639565b6040516020818303038152906040528051906020012003611d2957506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611d5b9190612639565b6040516020818303038152906040528051906020012003611d7e57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611db09190612639565b6040516020818303038152906040528051906020012003611dd357506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611e059190612639565b6040516020818303038152906040528051906020012003611e2857506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611e5a9190612639565b6040516020818303038152906040528051906020012003611e7d5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611eaf9190612639565b6040516020818303038152906040528051906020012003611ed25750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611f049190612639565b6040516020818303038152906040528051906020012003611f275750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b604482015260640161037f565b600081611f6d603c856127d2565b611f79610e10876127d2565b62015180611f888b8b8b6121b1565b611f9291906127d2565b611f9c919061266b565b611fa6919061266b565b61145f919061266b565b600081516005146120035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d657a6f6e65206f6666736574000000000000000000604482015260640161037f565b6000612016816105488560016003611a5c565b9050600061202b816105488660036005611a5c565b9050600061203a82603c6127d2565b61204684610e106127d2565b612050919061266b565b9050600061206086826001611a5c565b60008151811061207257612072612579565b01602001516001600160f81b0319169050602b60f81b811461209d57612098828861266b565b61145f565b61145f82886127a6565b8051606090829060005b82518110156120fc578281815181106120cc576120cc612579565b01602001516001600160f81b0319166000036120ea578091506120fc565b806120f4816127b9565b9150506120b1565b5060008167ffffffffffffffff81111561211857612118612443565b6040519080825280601f01601f191660200182016040528015612142576020820181803683370190505b50905060005b828110156121a85783818151811061216257612162612579565b602001015160f81c60f81b82828151811061217f5761217f612579565b60200101906001600160f81b031916908160001a905350806121a0816127b9565b915050612148565b50949350505050565b60006107b28410156121c257600080fd5b838383600062253d8c60046064600c6121dc600e8861294b565b6121e69190612972565b6121f2886113246129a0565b6121fc91906129a0565b6122069190612972565b6122119060036129c8565b61221b9190612972565b600c80612229600e8861294b565b6122339190612972565b61223e90600c6129c8565b61224960028861294b565b612253919061294b565b61225f9061016f6129c8565b6122699190612972565b6004600c612278600e8961294b565b6122829190612972565b61228e896112c06129a0565b61229891906129a0565b6122a4906105b56129c8565b6122ae9190612972565b6122ba617d4b8761294b565b6122c491906129a0565b6122ce91906129a0565b6122d8919061294b565b611a50919061294b565b6040518061010001604052806008905b60608152602001906001900390816122f25790505090565b60006020828403121561231c57600080fd5b5035919050565b60006102e0828403121561233657600080fd5b50919050565b60005b8381101561235757818101518382015260200161233f565b50506000910152565b602081526000825180602084015261237f81604085016020870161233c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073357600080fd5b6000602082840312156123ba57600080fd5b81356123c581612393565b9392505050565b80604081018310156102de57600080fd5b6000806000806102e08086880312156123f557600080fd5b6123ff87876123cc565b945060c086018781111561241257600080fd5b60408701945061242288826123cc565b93505086818701111561243457600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561246b57600080fd5b813567ffffffffffffffff8082111561248357600080fd5b818401915084601f83011261249757600080fd5b8135818111156124a9576124a9612443565b604051601f8201601f19908116603f011681019083821181831017156124d1576124d1612443565b816040528281528760208487010111156124ea57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561251c57600080fd5b815180151581146123c557600080fd5b6102e081016040808784378083018660005b600281101561255b5783828437918301919083019060010161253e565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806125a357607f821691505b60208210810361233657634e487b7160e01b600052602260045260246000fd5b60008083546125d18161258f565b600182811680156125e957600181146125fe5761262d565b60ff198416875282151583028701945061262d565b8760005260208060002060005b858110156126245781548a82015290840190820161260b565b50505082870194505b50929695505050505050565b6000825161264b81846020870161233c565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102de576102de612655565b601f8211156126c857600081815260208120601f850160051c810160208610156126a55750805b601f850160051c820191505b818110156126c4578281556001016126b1565b5050505b505050565b815167ffffffffffffffff8111156126e7576126e7612443565b6126fb816126f5845461258f565b8461267e565b602080601f83116001811461273057600084156127185750858301515b600019600386901b1c1916600185901b1785556126c4565b600085815260208120601f198616915b8281101561275f57888601518255948401946001909101908401612740565b508582101561277d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102de576102de612655565b818103818111156102de576102de612655565b6000600182016127cb576127cb612655565b5060010190565b80820281158282048414176102de576102de612655565b600181815b8085111561282457816000190482111561280a5761280a612655565b8085161561281757918102915b93841c93908002906127ee565b509250929050565b60008261283b575060016102de565b81612848575060006102de565b816001811461285e576002811461286857612884565b60019150506102de565b60ff84111561287957612879612655565b50506001821b6102de565b5060208310610133831016604e8410600b84101617156128a7575081810a6102de565b6128b183836127e9565b80600019048211156128c5576128c5612655565b029392505050565b60006123c5838361282c565b634e487b7160e01b600052601260045260246000fd5b600060ff831680612902576129026128d9565b8060ff84160691505092915050565b60ff81811683821601908111156102de576102de612655565b600061ffff80831681810361294157612941612655565b6001019392505050565b818103600083128015838313168383128216171561296b5761296b612655565b5092915050565b600082612981576129816128d9565b600160ff1b82146000198414161561299b5761299b612655565b500590565b80820182811260008312801582168215821617156129c0576129c0612655565b505092915050565b80820260008212600160ff1b841416156129e4576129e4612655565b81810583148215176102de576102de61265556fea26469706673582212203718a7e9e50a4f07565325df33ba83f03bd8e8f7b787577bbb0628965d0b031e64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063bf93fde111610097578063dbac582111610066578063dbac582114610220578063f054a9a314610237578063f2fde38b1461024a578063f6c7226b1461025d57600080fd5b8063bf93fde1146101b5578063c0d05fed146101f0578063ced1e97814610205578063d0b71f991461020d57600080fd5b80638da5cb5b116100d35780638da5cb5b1461016b578063a8ef333f1461017c578063b2a3fda41461018f578063b870676c146101a257600080fd5b806315d276e1146100fa57806319d091521461013e578063715018a614610161575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015161014c36600461230a565b610270565b6040519015158152602001610135565b6101696102e4565b005b6000546001600160a01b0316610121565b600154610121906001600160a01b031681565b61016961019d36600461230a565b6102f8565b600254610121906001600160a01b031681565b6101c86101c3366004612323565b610305565b604080519586526020860194909452928401919091526060830152608082015260a001610135565b6101f86105b1565b6040516101359190612360565b6101f861063f565b61016961021b3660046123a8565b6106d1565b61022960045481565b604051908152602001610135565b6101516102453660046123dd565b6106fb565b6101696102583660046123a8565b611081565b61016961026b366004612459565b6110f7565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de919061250a565b92915050565b6102ec61110f565b6102f66000611169565b565b61030061110f565b600455565b600080808080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103885760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163f054a9a360e01b8152309163f054a9a3916103bb918a919082019060c083019061010084019060040161252c565b602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc919061250a565b6104385760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b604482015260640161037f565b610446610100870135610270565b6104925760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b657920686173680000000000604482015260640161037f565b60006104a58761010001600160046111b9565b905060036040516104b691906125c3565b6040518091039020816040516020016104cf9190612639565b60405160208183030381529060405280519060200120146105325760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d2061646472657373000000000000604482015260640161037f565b61054e60066105488961010001600460066111b9565b90611294565b9550600061056388610100016006600b6111b9565b90506004546105718261146a565b61057b919061266b565b95506102808801359450610260880135935061059b6102a0890135611617565b509496939592945090926102c090920135919050565b600380546105be9061258f565b80601f01602080910402602001604051908101604052809291908181526020018280546105ea9061258f565b80156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505050505081565b60606003805461064e9061258f565b80601f016020809104026020016040519081016040528092919081815260200182805461067a9061258f565b80156106c75780601f1061069c576101008083540402835291602001916106c7565b820191906000526020600020905b8154815290600101906020018083116106aa57829003601f168201915b5050505050905090565b6106d961110f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f85565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610733576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610769576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa9150508061079a576000805260206000f35b5050505050565b7f11c0fa536785a14ea232244faf4db797ed78290ed4fb27d5038cac6ae9a3915285527f25d09a0e68aa815305c2995cc88de47499c6bf8dd88aebc829db24846944696160208601526000608086018661083e87357f06e757dafa88a886ce63a8c2b453fedcc71a0eb31f0131a905a4913207355d4c7f1364e9163e5b15b2805a6aac65afcb4001017d5343017c737564a23b6d08428684610736565b61088e60208801357f29ca5087e79a2d1fb754d59033fec517f164dfd734b75a8cc89c6e2894cec0687f15d07987dd5b551b72857cefaed299e7a1989a2927f859a6d0ad593beba9361384610736565b6108de60408801357f2b6a88b3112d75e15c1fc7f737cf28da3a22df26156e80d1dceb1d792aa6f5697f24580e32cd5353fa5aa622fec5d0cb8834ad9a35a5d7ed3de960648f39fa42af84610736565b61092e60608801357f24a9fdbfeb9e558ea7eb1c0f9d2f59adb3e19fee489181e0649cac9968d92c3d7f23ea51f6d35583a15c0e0f0bb44cdb055ddccb3109365d0feb10559bce3f682484610736565b61097e60808801357f083b0d8149f542f7d51ff78dd5bd947ac228adf4765f13cbb8ae4b0c9de33d197f04282c6bb25a8a05b9d698fa726e427251a636a05ae11f8178ed74ce70c7b38384610736565b6109ce60a08801357f1803098aec4fded4fc5b2bab68cf7fb1f5cdfc173e8b4c2d6f3ad5ae8b7d5ce47f02cf06b9216abdbe0d145ee6ba106240740f6554ba338900ae157bc1d113612384610736565b610a1e60c08801357f2e7c4cf7b58d9b12bb9cee35f053430f80678fe1885b216886c042d0cde497487f12a5802440d5b5d29b299b8818078e7c2165b5d2f49776e55ac4c8da11581e2f84610736565b610a6e60e08801357f1d78c8b32944313d7e911c1c721109f4a04d0879fe1e1802e3ddf943612a4ddd7f245b7127d480d0e750564b78818a037a57e3a17f889b15dbb01e9e243ad4218084610736565b610abf6101008801357f2568c716b634adaf4106a56b42776b724d5ef21e52864a1347088de129b478fe7f17565054db4aa08be111cfc14344b79875bc704e563362d7a9d3992271be350984610736565b610b106101208801357f0400bd816ec371a36d4594b5466ba7a092139238746fcee0f5e254b7944c51617f013d5ee8b0b9e671e5bde7130e47682c47ca38dd479db7331ca393bf5edfa02484610736565b610b616101408801357f10444a550566f8186e8fd121fe8a929e92f66e479515b67833a3d4bc07e5eeb77f24042e12cbcf48ac6d7b05da02753790ed095694fe2b3184239ec60500d3a86a84610736565b610bb26101608801357f29d1fba93734715a1dee7b66433894a2fb3304bcc7784a98f5f54b57c5f31f9e7f297559c6982845ac8cbc9d10c68703d05fff58f59bd022718930361da7d6240584610736565b610c036101808801357f01fbfd0d8299e28fe5b7b1e44840e0e49175cd784ea29456a5544d41ec56ed4f7f0120f0145b0c23de99655163334fafda2296421f9ff6d616a4381b731bcf8e9284610736565b610c546101a08801357f272e3f68e4dde921f3fecbf1da3e48be0375066071f79cf60d12a94909b013137f1c172fb9ad177d1f52f6f867020a4fd1d20819d027b26b5306eabd3d6a2da44884610736565b610ca56101c08801357f29bf2dd28bddc6677bfc29ae10bc2fc88614c805470de8f9c3bd943ef5b56b477f0bbe36a822bf94a2563eccdcdf022dce00eb8770630efa37084f7dabe6ec84f384610736565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0a656bd3ce0f460dfb7f25d7c71d52fecdc0eb363d413b2585775d8283eb0b046102808201527f0717de189821c8fd7338c4b95469c6dd47ee1aad6c8510dc9bcd7983852514eb6102a08201527f2d5f46e1cbebc83f7340eecebc2fff23e5da01cab367c8f7ec52c1bd3f6a2bc36102c08201527f1c0356f78812a13151f9212f9c69e8a7a9b2a7634c2b43617adda632ce9954d86102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610f9d6000840135610702565b610faa6020840135610702565b610fb76040840135610702565b610fc46060840135610702565b610fd16080840135610702565b610fde60a0840135610702565b610feb60c0840135610702565b610ff860e0840135610702565b611006610100840135610702565b611014610120840135610702565b611022610140840135610702565b611030610160840135610702565b61103e610180840135610702565b61104c6101a0840135610702565b61105a6101c0840135610702565b6110686101e0840135610702565b611075818486888a6107a1565b90508060005260206000f35b61108961110f565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161037f565b61073381611169565b6110ff61110f565b600361110b82826126cd565b5050565b6000546001600160a01b031633146102f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006111c7848461278d565b60ff1667ffffffffffffffff8111156111e2576111e2612443565b60405190808252806020026020018201604052801561120b578160200160208202803683370190505b50905060ff84165b8360ff16811015611270578581600f811061123057611230612579565b60200201358261124360ff8816846127a6565b8151811061125357611253612579565b602090810291909101015280611268816127b9565b915050611213565b5061128b6007825161128291906127d2565b8290600761172b565b95945050505050565b600082818080805b84518110156113e457603060f81b8582815181106112bc576112bc612579565b01602001516001600160f81b031916108015906112fd5750603960f81b8582815181106112eb576112eb612579565b01602001516001600160f81b03191611155b1561134057603085828151811061131657611316612579565b0160200151611328919060f81c6127a6565b61133385600a6127d2565b61133d919061266b565b93505b81156113545782611350816127b9565b9350505b84818151811061136657611366612579565b01602001516001600160f81b031916601760f91b036113d25781156113cd5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c7300000000604482015260640161037f565b600191505b806113dc816127b9565b91505061129c565b50858211156114405760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b606482015260840161037f565b61144a82876127a6565b61145590600a6128cd565b61145f90846127d2565b979650505050505050565b60006114746122e2565b60008060005b855181101561152e5785818151811061149557611495612579565b6020910101516001600160f81b031916600160fd1b14806114da57508581815181106114c3576114c3612579565b6020910101516001600160f81b031916601d60f91b145b1561151c576114ea868383611a5c565b8484600881106114fc576114fc612579565b602002015261150c81600161266b565b915082611518816127b9565b9350505b80611526816127b9565b91505061147a565b50845161153e9086908390611a5c565b83836008811061155057611550612579565b60200201526007821461159b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206461746520737472696e6760681b604482015260640161037f565b60006115fa6115b3828660035b602002015190611294565b60408601516115c190611b29565b6115ce60008860016115a8565b6115db60008960046115a8565b6115e860008a60056115a8565b6115f560008b60066115a8565b611f5f565b905061160d818560076020020151611fb0565b9695505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611684919061250a565b156116d15760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e207573656400604482015260640161037f565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561171757600080fd5b505af115801561079a573d6000803e3d6000fd5b606060008083865161173d91906127d2565b67ffffffffffffffff81111561175557611755612443565b6040519080825280601f01601f19166020018201604052801561177f576020820181803683370190505b5090506000805b87518161ffff161015611936576000888261ffff16815181106117ab576117ab612579565b6020026020010151905060008767ffffffffffffffff8111156117d0576117d0612443565b6040519080825280602002602001820160405280156117f9578160200160208202803683370190505b50905060005b8881101561184b576118128160086127d2565b83901c82828151811061182757611827612579565b60ff9092166020928302919091019091015280611843816127b9565b9150506117ff565b5060005b8881101561192057600082828151811061186b5761186b612579565b602002602001015160ff169050806000146118e3578060f81b87878151811061189657611896612579565b60200101906001600160f81b031916908160001a905350856118b7816127b9565b96506118c690506002896128ef565b60ff166000036118de576118db600189612911565b97505b611906565b6118ee6002896128ef565b60ff1660010361190657611903600189612911565b97505b5060089290921c9180611918816127b9565b91505061184f565b505050808061192e9061292a565b915050611786565b5060018360ff1610156119d75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a40161037f565b85811115611a455760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b606482015260840161037f565b6000611a50836120a7565b98975050505050505050565b6060836000611a6b85856127a6565b67ffffffffffffffff811115611a8357611a83612443565b6040519080825280601f01601f191660200182016040528015611aad576020820181803683370190505b509050845b84811015611b1f57828181518110611acc57611acc612579565b01602001516001600160f81b03191682611ae688846127a6565b81518110611af657611af6612579565b60200101906001600160f81b031916908160001a90535080611b17816127b9565b915050611ab2565b5095945050505050565b60007f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d982604051602001611b5d9190612639565b6040516020818303038152906040528051906020012003611b8057506001919050565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a82604051602001611bb29190612639565b6040516020818303038152906040528051906020012003611bd557506002919050565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec382604051602001611c079190612639565b6040516020818303038152906040528051906020012003611c2a57506003919050565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac18882604051602001611c5c9190612639565b6040516020818303038152906040528051906020012003611c7f57506004919050565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d382604051602001611cb19190612639565b6040516020818303038152906040528051906020012003611cd457506005919050565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d82604051602001611d069190612639565b6040516020818303038152906040528051906020012003611d2957506006919050565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c82604051602001611d5b9190612639565b6040516020818303038152906040528051906020012003611d7e57506007919050565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6482604051602001611db09190612639565b6040516020818303038152906040528051906020012003611dd357506008919050565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac82604051602001611e059190612639565b6040516020818303038152906040528051906020012003611e2857506009919050565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516482604051602001611e5a9190612639565b6040516020818303038152906040528051906020012003611e7d5750600a919050565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf482604051602001611eaf9190612639565b6040516020818303038152906040528051906020012003611ed25750600b919050565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc82604051602001611f049190612639565b6040516020818303038152906040528051906020012003611f275750600c919050565b60405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840dadedce8d609b1b604482015260640161037f565b600081611f6d603c856127d2565b611f79610e10876127d2565b62015180611f888b8b8b6121b1565b611f9291906127d2565b611f9c919061266b565b611fa6919061266b565b61145f919061266b565b600081516005146120035760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642074696d657a6f6e65206f6666736574000000000000000000604482015260640161037f565b6000612016816105488560016003611a5c565b9050600061202b816105488660036005611a5c565b9050600061203a82603c6127d2565b61204684610e106127d2565b612050919061266b565b9050600061206086826001611a5c565b60008151811061207257612072612579565b01602001516001600160f81b0319169050602b60f81b811461209d57612098828861266b565b61145f565b61145f82886127a6565b8051606090829060005b82518110156120fc578281815181106120cc576120cc612579565b01602001516001600160f81b0319166000036120ea578091506120fc565b806120f4816127b9565b9150506120b1565b5060008167ffffffffffffffff81111561211857612118612443565b6040519080825280601f01601f191660200182016040528015612142576020820181803683370190505b50905060005b828110156121a85783818151811061216257612162612579565b602001015160f81c60f81b82828151811061217f5761217f612579565b60200101906001600160f81b031916908160001a905350806121a0816127b9565b915050612148565b50949350505050565b60006107b28410156121c257600080fd5b838383600062253d8c60046064600c6121dc600e8861294b565b6121e69190612972565b6121f2886113246129a0565b6121fc91906129a0565b6122069190612972565b6122119060036129c8565b61221b9190612972565b600c80612229600e8861294b565b6122339190612972565b61223e90600c6129c8565b61224960028861294b565b612253919061294b565b61225f9061016f6129c8565b6122699190612972565b6004600c612278600e8961294b565b6122829190612972565b61228e896112c06129a0565b61229891906129a0565b6122a4906105b56129c8565b6122ae9190612972565b6122ba617d4b8761294b565b6122c491906129a0565b6122ce91906129a0565b6122d8919061294b565b611a50919061294b565b6040518061010001604052806008905b60608152602001906001900390816122f25790505090565b60006020828403121561231c57600080fd5b5035919050565b60006102e0828403121561233657600080fd5b50919050565b60005b8381101561235757818101518382015260200161233f565b50506000910152565b602081526000825180602084015261237f81604085016020870161233c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461073357600080fd5b6000602082840312156123ba57600080fd5b81356123c581612393565b9392505050565b80604081018310156102de57600080fd5b6000806000806102e08086880312156123f557600080fd5b6123ff87876123cc565b945060c086018781111561241257600080fd5b60408701945061242288826123cc565b93505086818701111561243457600080fd5b50929591945092610100019150565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561246b57600080fd5b813567ffffffffffffffff8082111561248357600080fd5b818401915084601f83011261249757600080fd5b8135818111156124a9576124a9612443565b604051601f8201601f19908116603f011681019083821181831017156124d1576124d1612443565b816040528281528760208487010111156124ea57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561251c57600080fd5b815180151581146123c557600080fd5b6102e081016040808784378083018660005b600281101561255b5783828437918301919083019060010161253e565b505050808560c0850137506101e08361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806125a357607f821691505b60208210810361233657634e487b7160e01b600052602260045260246000fd5b60008083546125d18161258f565b600182811680156125e957600181146125fe5761262d565b60ff198416875282151583028701945061262d565b8760005260208060002060005b858110156126245781548a82015290840190820161260b565b50505082870194505b50929695505050505050565b6000825161264b81846020870161233c565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102de576102de612655565b601f8211156126c857600081815260208120601f850160051c810160208610156126a55750805b601f850160051c820191505b818110156126c4578281556001016126b1565b5050505b505050565b815167ffffffffffffffff8111156126e7576126e7612443565b6126fb816126f5845461258f565b8461267e565b602080601f83116001811461273057600084156127185750858301515b600019600386901b1c1916600185901b1785556126c4565b600085815260208120601f198616915b8281101561275f57888601518255948401946001909101908401612740565b508582101561277d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102de576102de612655565b818103818111156102de576102de612655565b6000600182016127cb576127cb612655565b5060010190565b80820281158282048414176102de576102de612655565b600181815b8085111561282457816000190482111561280a5761280a612655565b8085161561281757918102915b93841c93908002906127ee565b509250929050565b60008261283b575060016102de565b81612848575060006102de565b816001811461285e576002811461286857612884565b60019150506102de565b60ff84111561287957612879612655565b50506001821b6102de565b5060208310610133831016604e8410600b84101617156128a7575081810a6102de565b6128b183836127e9565b80600019048211156128c5576128c5612655565b029392505050565b60006123c5838361282c565b634e487b7160e01b600052601260045260246000fd5b600060ff831680612902576129026128d9565b8060ff84160691505092915050565b60ff81811683821601908111156102de576102de612655565b600061ffff80831681810361294157612941612655565b6001019392505050565b818103600083128015838313168383128216171561296b5761296b612655565b5092915050565b600082612981576129816128d9565b600160ff1b82146000198414161561299b5761299b612655565b500590565b80820182811260008312801582168215821617156129c0576129c0612655565b505092915050565b80820260008212600160ff1b841416156129e4576129e4612655565b81810583148215176102de576102de61265556fea26469706673582212203718a7e9e50a4f07565325df33ba83f03bd8e8f7b787577bbb0628965d0b031e64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/hdfc/HDFCSendProcessor.sol:HDFCSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/NullifierRegistry.json",
    "content": "{\n  \"address\": \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"nullifier\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NullifierAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"writer\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"WriterRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_nullifier\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addNullifier\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_newWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"addWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getWriters\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isNullified\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isWriter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_removedWriter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"removeWritePermission\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"writers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x5393b41adc9a1bca5df9b4b21675eb9da950221d5b727665d581485ba9ffa53b\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"transactionIndex\": 49,\n    \"gasUsed\": \"610203\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000080000000000020000000000000000000880000000000000000000000000000000400000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x05256ae237d998eb3ff11a4656507213e19d1f33dc5ae1440f900c5630279d83\",\n    \"transactionHash\": \"0x5393b41adc9a1bca5df9b4b21675eb9da950221d5b727665d581485ba9ffa53b\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 49,\n        \"blockNumber\": 5081891,\n        \"transactionHash\": \"0x5393b41adc9a1bca5df9b4b21675eb9da950221d5b727665d581485ba9ffa53b\",\n        \"address\": \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 44,\n        \"blockHash\": \"0x05256ae237d998eb3ff11a4656507213e19d1f33dc5ae1440f900c5630279d83\"\n      }\n    ],\n    \"blockNumber\": 5081891,\n    \"cumulativeGasUsed\": \"6015391\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"nullifier\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NullifierAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"writer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"WriterRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_nullifier\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addNullifier\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_newWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"addWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getWriters\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isNullified\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isWriter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_removedWriter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeWritePermission\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"writers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"params\\\":{\\\"_nullifier\\\":\\\"The nullifier to store\\\"}},\\\"addWritePermission(address)\\\":{\\\"params\\\":{\\\"_newWriter\\\":\\\"The nullifier to store\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"removeWritePermission(address)\\\":{\\\"params\\\":{\\\"_removedWriter\\\":\\\"The nullifier to store\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addNullifier(bytes32)\\\":{\\\"notice\\\":\\\"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\"},\\\"addWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\"},\\\"removeWritePermission(address)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":\\\"NullifierRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/AddressArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: MIT\\\\n*/\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title AddressArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Address Arrays\\\\n *\\\\n * CHANGELOG:\\\\n * - 4/21/21: Added validatePairsWithArray methods\\\\n */\\\\nlibrary AddressArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            address current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(address[] memory A, address a)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            (address[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The address to remove\\\\n     */\\\\n    function removeStorage(address[] storage A, address a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"Address not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(address[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (address[] memory, address)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        address[] memory newAddresses = new address[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newAddresses[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newAddresses[j - 1] = A[j];\\\\n        }\\\\n        return (newAddresses, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x486f1a373f33aa167227600ac2d0bf95b37685413d98a3e745107188f00ae405\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/NullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { AddressArrayUtils } from \\\\\\\"../../external/AddressArrayUtils.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\\\n\\\\n    using AddressArrayUtils for address[];\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\\\n    event WriterAdded(address writer);\\\\n    event WriterRemoved(address writer);\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyWriter() {\\\\n        require(isWriter[msg.sender], \\\\\\\"Only addresses with write permissions can call\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    mapping(bytes32 => bool) public isNullified;\\\\n    mapping(address => bool) public isWriter;\\\\n    address[] public writers;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor() Ownable() {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\\\n     *\\\\n     * @param _nullifier    The nullifier to store\\\\n     */\\\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\\\n        require(!isNullified[_nullifier], \\\\\\\"Nullifier already exists\\\\\\\");\\\\n\\\\n        isNullified[_nullifier] = true;\\\\n\\\\n        emit NullifierAdded(_nullifier, msg.sender);\\\\n    }\\\\n\\\\n    /* ============ Admin Functions ============ */\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\\\n     *\\\\n     * @param _newWriter    The nullifier to store\\\\n     */\\\\n    function addWritePermission(address _newWriter) external onlyOwner {\\\\n        require(!isWriter[_newWriter], \\\\\\\"Address is already a writer\\\\\\\");\\\\n\\\\n        isWriter[_newWriter] = true;\\\\n        writers.push(_newWriter);\\\\n\\\\n        emit WriterAdded(_newWriter);\\\\n    }\\\\n\\\\n    /**\\\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\\\n     *\\\\n     * @param _removedWriter    The nullifier to store\\\\n     */\\\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\\\n        require(isWriter[_removedWriter], \\\\\\\"Address is not a writer\\\\\\\");\\\\n\\\\n        isWriter[_removedWriter] = false;\\\\n        writers.removeStorage(_removedWriter);\\\\n\\\\n        emit WriterRemoved(_removedWriter);\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getWriters() external view returns(address[] memory) {\\\\n       return writers;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x20f773bb8f52b109301fca328369f2d5cebc8d105d2d0cf9588adccab2f9d1c8\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61099f8061007e6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101515780638da5cb5b14610159578063cb01316c1461016a578063d6da03261461017f578063f2fde38b1461019257600080fd5b8063169394bb146100a3578063286f9201146100db5780632b29ba23146100f05780635bd4df321461011357806366a5267214610126575b600080fd5b6100c66100b136600461085f565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100ee6100e9366004610878565b6101a5565b005b6100c66100fe366004610878565b60026020526000908152604090205460ff1681565b6100ee61012136600461085f565b610285565b61013961013436600461085f565b6103ad565b6040516001600160a01b0390911681526020016100d2565b6100ee6103d7565b6000546001600160a01b0316610139565b6101726103eb565b6040516100d291906108a8565b6100ee61018d366004610878565b61044d565b6100ee6101a0366004610878565b610554565b6101ad6105cd565b6001600160a01b03811660009081526002602052604090205460ff1661021a5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420612077726974657200000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600260205260409020805460ff19169055610245600382610627565b6040516001600160a01b03821681527f86e5bbceda94081c32220d685f37cc4e3ea7bb0be2dfbf0cb703579505a5390e906020015b60405180910390a150565b3360009081526002602052604090205460ff166102fb5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206164647265737365732077697468207772697465207065726d697360448201526d1cda5bdb9cc818d85b8818d85b1b60921b6064820152608401610211565b60008181526001602052604090205460ff161561035a5760405162461bcd60e51b815260206004820152601860248201527f4e756c6c696669657220616c72656164792065786973747300000000000000006044820152606401610211565b600081815260016020818152604092839020805460ff1916909217909155905182815233917f57d64412939564693aa1e17d56c93933396b3a990f47c84dfc16a201fc2f3f83910160405180910390a250565b600381815481106103bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6103df6105cd565b6103e9600061079a565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561044357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610425575b5050505050905090565b6104556105cd565b6001600160a01b03811660009081526002602052604090205460ff16156104be5760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920612077726974657200000000006044820152606401610211565b6001600160a01b0381166000818152600260209081526040808320805460ff191660019081179091556003805491820181559093527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90920180546001600160a01b0319168417905590519182527f6ff3aa2ea7b53070f6d9d07a445d338d89e8edef44250ffa8be19f53910d4a2e910161027a565b61055c6105cd565b6001600160a01b0381166105c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610211565b6105ca8161079a565b50565b6000546001600160a01b031633146103e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610211565b60008061068d8480548060200260200160405190810160405280929190818152602001828054801561068257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610664575b5050505050846107ea565b91509150806106d65760405162461bcd60e51b815260206004820152601560248201527420b2323932b9b9903737ba1034b71030b93930bc9760591b6044820152606401610211565b83546000906106e79060019061090b565b90508083146107615784818154811061070257610702610924565b9060005260206000200160009054906101000a90046001600160a01b031685848154811061073257610732610924565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806107715761077161093a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b8181101561084c57846001600160a01b031686828151811061081757610817610924565b60200260200101516001600160a01b03160361083a579250600191506108589050565b8061084481610950565b9150506107f3565b50600019600092509250505b9250929050565b60006020828403121561087157600080fd5b5035919050565b60006020828403121561088a57600080fd5b81356001600160a01b03811681146108a157600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108e95783516001600160a01b0316835292840192918401916001016108c4565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091e5761091e6108f5565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610962576109626108f5565b506001019056fea264697066735822122007aca5bc38db42820b1db3f118969e99568c84a5e065fd384c1df67e3a504bca64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"params\": {\n          \"_nullifier\": \"The nullifier to store\"\n        }\n      },\n      \"addWritePermission(address)\": {\n        \"params\": {\n          \"_newWriter\": \"The nullifier to store\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"params\": {\n          \"_removedWriter\": \"The nullifier to store\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addNullifier(bytes32)\": {\n        \"notice\": \"ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\"\n      },\n      \"addWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\"\n      },\n      \"removeWritePermission(address)\": {\n        \"notice\": \"ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3760,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isNullified\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3764,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"isWriter\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bool)\"\n      },\n      {\n        \"astId\": 3767,\n        \"contract\": \"contracts/processors/nullifierRegistries/NullifierRegistry.sol:NullifierRegistry\",\n        \"label\": \"writers\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_array(t_address)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_address)dyn_storage\": {\n        \"base\": \"t_address\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"address[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_address,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/Poseidon3.json",
    "content": "{\n  \"address\": \"0xd8850EC08960716725B51941348e8b3F1DC47C38\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[3]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[3]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4ec023b6050a79496a348fb970f0847e20b0f0333b91e32a35e5f11452d1d49f\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xd8850EC08960716725B51941348e8b3F1DC47C38\",\n    \"transactionIndex\": 51,\n    \"gasUsed\": \"2745274\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x5ca372e5533d081c7c594f98017b1ccd0f5a51527c9483a64b6b63f293b0767a\",\n    \"transactionHash\": \"0x4ec023b6050a79496a348fb970f0847e20b0f0333b91e32a35e5f11452d1d49f\",\n    \"logs\": [],\n    \"blockNumber\": 5080692,\n    \"cumulativeGasUsed\": \"6534463\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c6000396130af6000f37c010000000000000000000000000000000000000000000000000000000060003504806325cc70e81490635a53025d14176200003757fe5b7f236d13393ef85cc48a351dd786dd7a1de5e39942296127fd87947223ae5108ad6020527f277686494f7644bbc4a9b194e10724eb967f1dc58718e59e3cedc821b2a7ae196040527f023db68784e3f0cc0b85618826a9b3505129c16479973b0a84a4529e66b09c626060527f1d359d245f286c12d50d663bae733f978af08cdbd63017c57b3a75646ff382c16080527f2a75a171563b807db525be259699ab28fe9bc7fb1f70943ff049bc970e841a0c60a0527f083abff5e10051f078e2827d092e1ae808b4dd3e15ccc3706f38ce4157b6770e60c0527f1a5ad71bbbecd8a97dc49cfdbae303ad24d5c4741eab8b7568a9ff8253a1eb6f60e0527f0d745fd00dd167fb86772133640f02ce945004a7bc2c59e8790f725c5d84f0af610100527f2070679e798782ef592a52ca9cef820d497ad2eecbaa7e42f366b3e521c4ed42610120527f2e18c8570d20bf5df800739a53da75d906ece318cd224ab6b3a2be979e2d7eab610140527f0fa86f0f27e4d3dd7f3367ce86f684f1f2e4386d3e5b9f38fa283c6aa723b608610160527f03f3e6fab791f16628168e4b14dbaeb657035ee3da6b2ca83f0c2491e0b403eb610180527f2f545e578202c9732488540e41f783b68ff0613fd79375f8ba8b3d30958e76776101a0527f23810bf82877fc19bff7eefeae3faf4bb8104c32ba4cd701596a15623d01476e6101c0527f014fcd5eb0be6d5beeafc4944034cf321c068ef930f10be2207ed58d2a34cdd66101e0527f00c15fc3a1d5733dd835eae0823e377f8ba4a8b627627cc2bb661c25d20fb52a610200527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016044356024356004356000847f19b849f69450b06848da1d39bd5e4a4302bb86744edc26238b0878e269ed23e582089050847f265ddfe127dd51bd7239347b758f0a1320eb2cc7450acc1dad47f80c8dcf34d683089150847f199750ec472f1809e0f66a545e1e51624108ac845015c2aa3dfc36bab497d8aa84089250847f157ff3fe65ac7208110f06a5f74302b14d743ea25067f0ffd032f787c7f1cdf8850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200038160005262003015565b847f2e49c43c4569dd9c5fd35ac45fca33f10b15c590692f8beefe18f4896ac9490282089050847f0e35fb89981890520d4aef2b6d6506c3cb2f0b6973c24fa82731345ffa2d1f1e83089150847f251ad47cb15c4f1105f109ae5e944f1ba9d9e7806d667ffec6fe723002e0b99684089250847f13da07dc64d428369873e97160234641f8beb56fdd05e5f3563fa39d9c22df4e850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200045660005262003015565b847f0c009b84e650e6d23dc00c7dccef7483a553939689d350cd46e7b89055fd473882089050847f011f16b1c63a854f01992e3956f42d8b04eb650c6d535eb0203dec74befdca0683089150847f0ed69e5e383a688f209d9a561daa79612f3f78d0467ad45485df07093f36754984089250847f04dba94a7b0ce9e221acad41472b6bbe3aec507f5eb3d33f463672264c9f789b850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200052b60005262003015565b847f0a3f2637d840f3a16eb094271c9d237b6036757d4bb50bf7ce732ff1d4fa28e882089050847f259a666f129eea198f8a1c502fdb38fa39b1f075569564b6e54a485d1182323f83089150847f28bf7459c9b2f4c6d8e7d06a4ee3a47f7745d4271038e5157a32fdf7ede0d6a184089250847f0a1ca941f057037526ea200f489be8d4c37c85bbcce6a2aeec91bd6941432447850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200060060005262003015565b847f0c6f8f958be0e93053d7fd4fc54512855535ed1539f051dcb43a26fd926361cf82089050847f123106a93cd17578d426e8128ac9d90aa9e8a00708e296e084dd57e69caaf81183089150847f26e1ba52ad9285d97dd3ab52f8e840085e8fa83ff1e8f1877b074867cd2dee7584089250847f1cb55cad7bd133de18a64c5c47b9c97cbe4d8b7bf9e095864471537e6a4ae2c585089350848181808280098009099050620006b160005262003015565b847f1dcd73e46acd8f8e0e2c7ce04bde7f6d2a53043d5060a41c7143f08e6e9055d082089050847f011003e32f6d9c66f5852f05474a4def0cda294a0eb4e9b9b12b9bb4512e557483089150847f2b1e809ac1d10ab29ad5f20d03a57dfebadfe5903f58bafed7c508dd2287ae8c84089250847f2539de1785b735999fb4dac35ee17ed0ef995d05ab2fc5faeaa69ae87bcec0a5850893508481818082800980090990506200076260005262003015565b847f0c246c5a2ef8ee0126497f222b3e0a0ef4e1c3d41c86d46e43982cb11d77951d82089050847f192089c4974f68e95408148f7c0632edbb09e6a6ad1a1c2f3f0305f5d03b527b83089150847f1eae0ad8ab68b2f06a0ee36eeb0d0c058529097d91096b756d8fdc2fb5a60d8584089250847f179190e5d0e22179e46f8282872abc88db6e2fdc0dee99e69768bd98c5d06bfb850893508481818082800980090990506200081360005262003015565b847f29bb9e2c9076732576e9a81c7ac4b83214528f7db00f31bf6cafe794a9b3cd1c82089050847f225d394e42207599403efd0c2464a90d52652645882aac35b10e590e6e691e0883089150847f064760623c25c8cf753d238055b444532be13557451c087de09efd454b23fd5984089250847f10ba3a0e01df92e87f301c4b716d8a394d67f4bf42a75c10922910a78f6b5b8785089350848181808280098009099050620008c460005262003015565b847f0e070bf53f8451b24f9c6e96b0c2a801cb511bc0c242eb9d361b77693f21471c82089050847f1b94cd61b051b04dd39755ff93821a73ccd6cb11d2491d8aa7f921014de252fb83089150847f1d7cb39bafb8c744e148787a2e70230f9d4e917d5713bb050487b5aa7d74070b84089250847f2ec93189bd1ab4f69117d0fe980c80ff8785c2961829f701bb74ac1f303b17db850893508481818082800980090990506200097560005262003015565b847f2db366bfdd36d277a692bb825b86275beac404a19ae07a9082ea46bd8351792682089050847f062100eb485db06269655cf186a68532985275428450359adc99cec6960711b883089150847f0761d33c66614aaa570e7f1e8244ca1120243f92fa59e4f900c567bf41f5a59b84089250847f20fc411a114d13992c2705aa034e3f315d78608a0f7de4ccf7a72e494855ad0d8508935084818180828009800909905062000a2660005262003015565b847f25b5c004a4bdfcb5add9ec4e9ab219ba102c67e8b3effb5fc3a30f317250bc5a82089050847f23b1822d278ed632a494e58f6df6f5ed038b186d8474155ad87e7dff62b37f4b83089150847f22734b4c5c3f9493606c4ba9012499bf0f14d13bfcfcccaa16102a29cc2f69e084089250847f26c0c8fe09eb30b7e27a74dc33492347e5bdff409aa3610254413d3fad795ce58508935084818180828009800909905062000ad760005262003015565b847f070dd0ccb6bd7bbae88eac03fa1fbb26196be3083a809829bbd626df348ccad982089050847f12b6595bdb329b6fb043ba78bb28c3bec2c0a6de46d8c5ad6067c4ebfd4250da83089150847f248d97d7f76283d63bec30e7a5876c11c06fca9b275c671c5e33d95bb7e8d72984089250847f1a306d439d463b0816fc6fd64cc939318b45eb759ddde4aa106d15d9bd9baaaa8508935084818180828009800909905062000b8860005262003015565b847f28a8f8372e3c38daced7c00421cb4621f4f1b54ddc27821b0d62d3d6ec7c56cf82089050847f0094975717f9a8a8bb35152f24d43294071ce320c829f388bc852183e1e2ce7e83089150847f04d5ee4c3aa78f7d80fde60d716480d3593f74d4f653ae83f4103246db2e8d6584089250847f2a6cf5e9aa03d4336349ad6fb8ed2269c7bef54b8822cc76d08495c12efde1878508935084818180828009800909905062000c3960005262003015565b847f2304d31eaab960ba9274da43e19ddeb7f792180808fd6e43baae48d7efcba3f382089050847f03fd9ac865a4b2a6d5e7009785817249bff08a7e0726fcb4e1c11d39d199f0b083089150847f00b7258ded52bbda2248404d55ee5044798afc3a209193073f7954d4d63b0b6484089250847f159f81ada0771799ec38fca2d4bf65ebb13d3a74f3298db36272c5ca65e92d9a8508935084818180828009800909905062000cea60005262003015565b847f1ef90e67437fbc8550237a75bc28e3bb9000130ea25f0c5471e144cf4264431f82089050847f1e65f838515e5ff0196b49aa41a2d2568df739bc176b08ec95a79ed82932e30d83089150847f2b1b045def3a166cec6ce768d079ba74b18c844e570e1f826575c1068c94c33f84089250847f0832e5753ceb0ff6402543b1109229c165dc2d73bef715e3f1c6e07c168bb1738508935084818180828009800909905062000d9b60005262003015565b847f02f614e9cedfb3dc6b762ae0a37d41bab1b841c2e8b6451bc5a8e3c390b6ad1682089050847f0e2427d38bd46a60dd640b8e362cad967370ebb777bedff40f6a0be27e7ed70583089150847f0493630b7c670b6deb7c84d414e7ce79049f0ec098c3c7c50768bbe29214a53a84089250847f22ead100e8e482674decdab17066c5a26bb1515355d5461a3dc06cc85327cea98508935084818180828009800909905062000e4c60005262003015565b847f25b3e56e655b42cdaae2626ed2554d48583f1ae35626d04de5084e0b6d2a6f1682089050847f1e32752ada8836ef5837a6cde8ff13dbb599c336349e4c584b4fdc0a0cf6f9d083089150847f2fa2a871c15a387cc50f68f6f3c3455b23c00995f05078f672a9864074d412e584089250847f2f569b8a9a4424c9278e1db7311e889f54ccbf10661bab7fcd18e7c7a7d835058508935084818180828009800909905062000efd60005262003015565b847f044cb455110a8fdd531ade530234c518a7df93f7332ffd2144165374b246b43d82089050847f227808de93906d5d420246157f2e42b191fe8c90adfe118178ddc723a531902583089150847f02fcca2934e046bc623adead873579865d03781ae090ad4a8579d2e7a680035584089250847f0ef915f0ac120b876abccceb344a1d36bad3f3c5ab91a8ddcbec2e060d8befac8508935084818180828009800909905062000fae60005262003015565b847f1797130f4b7a3e1777eb757bc6f287f6ab0fb85f6be63b09f3b16ef2b1405d3882089050847f0a76225dc04170ae3306c85abab59e608c7f497c20156d4d36c668555decc6e583089150847f1fffb9ec1992d66ba1e77a7b93209af6f8fa76d48acb664796174b5326a31a5c84089250847f25721c4fc15a3f2853b57c338fa538d85f8fbba6c6b9c6090611889b797b9c5f850893508481818082800980090990506200105f60005262003015565b847f0c817fd42d5f7a41215e3d07ba197216adb4c3790705da95eb63b982bfcaf75a82089050847f13abe3f5239915d39f7e13c2c24970b6df8cf86ce00a22002bc15866e52b5a9683089150847f2106feea546224ea12ef7f39987a46c85c1bc3dc29bdbd7a92cd60acb4d391ce84089250847f21ca859468a746b6aaa79474a37dab49f1ca5a28c748bc7157e1b3345bb0f959850893508481818082800980090990506200111060005262003015565b847f05ccd6255c1e6f0c5cf1f0df934194c62911d14d0321662a8f1a48999e34185b82089050847f0f0e34a64b70a626e464d846674c4c8816c4fb267fe44fe6ea28678cb09490a483089150847f0558531a4e25470c6157794ca36d0e9647dbfcfe350d64838f5b1a8a2de0d4bf84089250847f09d3dca9173ed2faceea125157683d18924cadad3f655a60b72f5864961f145585089350848181808280098009099050620011c160005262003015565b847f0328cbd54e8c0913493f866ed03d218bf23f92d68aaec48617d4c722e5bd433582089050847f2bf07216e2aff0a223a487b1a7094e07e79e7bcc9798c648ee3347dd5329d34b83089150847f1daf345a58006b736499c583cb76c316d6f78ed6a6dffc82111e11a63fe412df84089250847f176563472456aaa746b694c60e1823611ef39039b2edc7ff391e6f2293d2c404850893508481818082800980090990506200127260005262003015565b847f2ef1e0fad9f08e87a3bb5e47d7e33538ca964d2b7d1083d4fb0225035bd3f8db82089050847f226c9b1af95babcf17b2b1f57c7310179c1803dec5ae8f0a1779ed36c817ae2a83089150847f14bce3549cc3db7428126b4c3a15ae0ff8148c89f13fb35d35734eb5d4ad0def84089250847f2debff156e276bb5742c3373f2635b48b8e923d301f372f8e550cfd4034212c7850893508481818082800980090990506200132360005262003015565b847f2d4083cf5a87f5b6fc2395b22e356b6441afe1b6b29c47add7d0432d1d4760c782089050847f0c225b7bcd04bf9c34b911262fdc9c1b91bf79a10c0184d89c317c53d7161c2983089150847f03152169d4f3d06ec33a79bfac91a02c99aa0200db66d5aa7b835265f9c9c8f384089250847f0b61811a9210be78b05974587486d58bddc8f51bfdfebbb87afe8b7aa7d3199c85089350848181808280098009099050620013d460005262003015565b847f203e000cad298daaf7eba6a5c5921878b8ae48acf7048f16046d637a533b6f7882089050847f1a44bf0937c722d1376672b69f6c9655ba7ee386fda1112c0757143d1bfa914683089150847f0376b4fae08cb03d3500afec1a1f56acb8e0fde75a2106d7002f59c5611d4daa84089250847f00780af2ca1cad6465a2171250fdfc32d6fc241d3214177f3d553ef363182185850893508481818082800980090990506200148560005262003015565b847f10774d9ab80c25bdeb808bedfd72a8d9b75dbe18d5221c87e9d857079bdc31d582089050847f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e883089150847f00544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac1684089250847f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428c850893508481818082800980090990506200153660005262003015565b847f2840d045e9bc22b259cfb8811b1e0f45b77f7bdb7f7e2b46151a1430f608e3c582089050847f062752f86eebe11a009c937e468c335b04554574c2990196508e01fa5860186b83089150847f06041bdac48205ac87adb87c20a478a71c9950c12a80bc0a55a8e83eaaf0474684089250847f04a533f236c422d1ff900a368949b0022c7a2ae092f308d82b1dcbbf51f5000d85089350848181808280098009099050620015e760005262003015565b847f13e31d7a67232fd811d6a955b3d4f25dfe066d1e7dc33df04bde50a2b2d05b2a82089050847f011c2683ae91eb4dfbc13d6357e8599a9279d1648ff2c95d2f79905bb13920f183089150847f0b0d219346b8574525b1a270e0b4cba5d56c928e3e2c2bd0a1ecaed015aaf6ae84089250847f14abdec8db9c6dc970291ee638690209b65080781ef9fd13d84c7a726b5f1364850893508481818082800980090990506200169860005262003015565b847f1a0b70b4b26fdc28fcd32aa3d266478801eb12202ef47ced988d0376610be10682089050847f278543721f96d1307b6943f9804e7fe56401deb2ef99c4d12704882e7278b60783089150847f16eb59494a9776cf57866214dbd1473f3f0738a325638d8ba36535e011d5825984089250847f2567a658a81ffb444f240088fa5524c69a9e53eeab6b7f8c41c3479dcf8c644a850893508481818082800980090990506200174960005262003015565b847f29aa1d7c151e9ad0a7ab39f1abd9cf77ab78e0215a5715a6b882ade840bb13d882089050847f15c091233e60efe0d4bbfce2b36415006a4f017f9a85388ce206b91f99f2c98483089150847f16bd7d22ff858e5e0882c2c999558d77e7673ad5f1915f9feb679a8115f014cf84089250847f02db50480a07be0eb2c2e13ed6ef4074c0182d9b668b8e08ffe676925004202585089350848181808280098009099050620017fa60005262003015565b847f05e4a220e6a3bc9f7b6806ec9d6cdba186330ef2bf7adb4c13ba866343b7311982089050847f1dda05ebc30170bc98cbf2a5ee3b50e8b5f70bc424d39fa4104d37f1cbcf7a4283089150847f0184bef721888187f645b6fee3667f3c91da214414d89ba5cd301f22b0de899084089250847f1498a307e68900065f5e8276f62aef1c37414b84494e1577ad1a6d64341b78ec85089350848181808280098009099050620018ab60005262003015565b847f25f40f82b31dacc4f4939800b9d2c3eacef737b8fab1f864fe33548ad46bd49d82089050847f09d317cc670251943f6f5862a30d2ea9e83056ce4907bfbbcb1ff31ce5bb965083089150847f2f77d77786d979b23ba4ce4a4c1b3bd0a41132cd467a86ab29b913b6cf3149d084089250847f0f53dafd535a9f4473dc266b6fccc6841bbd336963f254c152f89e785f729bbf850893508481818082800980090990506200195c60005262003015565b847f25c1fd72e223045265c3a099e17526fa0e6976e1c00baf16de96de85deef2fa282089050847f2a902c8980c17faae368d385d52d16be41af95c84eaea3cf893e65d6ce4a8f6283089150847f1ce1580a3452ecf302878c8976b82be96676dd114d1dc8d25527405762f8352984089250847f24a6073f91addc33a49a1fa306df008801c5ec569609034d2fc50f7f0f4d00568508935084818180828009800909905062001a0d60005262003015565b847f25e52dbd6124530d9fc27fe306d71d4583e07ca554b5d1577f256c68b0be2b7482089050847f23dffae3c423fa7a93468dbccfb029855974be4d0a7b29946796e5b6cd70f15d83089150847f06342da370cc0d8c49b77594f6b027c480615d50be36243a99591bc9924ed6f584089250847f2754114281286546b75f09f115fc751b4778303d0405c1b4cc7df0d8e9f639258508935084818180828009800909905062001abe60005262003015565b847f15c19e8534c5c1a8862c2bc1d119eddeabf214153833d7bdb59ee197f8187cf582089050847f265fe062766d08fab4c78d0d9ef3cabe366f3be0a821061679b4b3d2d77d5f3e83089150847f13ccf689d67a3ec9f22cb7cd0ac3a327d377ac5cd0146f048debfd098d3ec7be84089250847f17662f7456789739f81cd3974827a887d92a5e05bdf3fe6b9fbccca4524aaebd8508935084818180828009800909905062001b6f60005262003015565b847f21b29c76329b31c8ef18631e515f7f2f82ca6a5cca70cee4e809fd624be7ad5d82089050847f18137478382aadba441eb97fe27901989c06738165215319939eb17b01fa975c83089150847f2bc07ea2bfad68e8dc724f5fef2b37c2d34f761935ffd3b739ceec4668f37e8884089250847f2ddb2e376f54d64a563840480df993feb4173203c2bd94ad0e602077aef9a03e8508935084818180828009800909905062001c2060005262003015565b847f277eb50f2baa706106b41cb24c602609e8a20f8d72f613708adb25373596c3f782089050847f0d4de47e1aba34269d0c620904f01a56b33fc4b450c0db50bb7f87734c9a1fe583089150847f0b8442bfe9e4a1b4428673b6bd3eea6f9f445697058f134aae908d0279a29f0c84089250847f11fe5b18fbbea1a86e06930cb89f7d4a26e186a65945e96574247fddb720f8f58508935084818180828009800909905062001cd160005262003015565b847f224026f6dfaf71e24d25d8f6d9f90021df5b774dcad4d883170e4ad89c33a0d682089050847f0b2ca6a999fe6887e0704dad58d03465a96bc9e37d1091f61bc9f9c62bbeb82483089150847f221b63d66f0b45f9d40c54053a28a06b1d0a4ce41d364797a1a7e0c96529f42184089250847f30185c48b7b2f1d53d4120801b047d087493bce64d4d24aedce2f4836bb84ad48508935084818180828009800909905062001d8260005262003015565b847f23f5d372a3f0e3cba989e223056227d3533356f0faa48f27f8267318632a61f082089050847f2716683b32c755fd1bf8235ea162b1f388e1e0090d06162e8e6dfbe4328f3e3b83089150847f0977545836866fa204ca1d853ec0909e3d140770c80ac67dc930c69748d5d4bc84089250847f1444e8f592bdbfd8025d91ab4982dd425f51682d31472b05e81c43c0f9434b318508935084818180828009800909905062001e3360005262003015565b847f26e04b65e9ca8270beb74a1c5cb8fee8be3ffbfe583f7012a00f874e7718fbe382089050847f22a5c2fa860d11fe34ee47a5cd9f869800f48f4febe29ad6df69816fb1a914d283089150847f174b54d9907d8f5c6afd672a738f42737ec338f3a0964c629f7474dd44c5c8d784089250847f1db1db8aa45283f31168fa66694cf2808d2189b87c8c8143d56c871907b39b878508935084818180828009800909905062001ee460005262003015565b847f1530bf0f46527e889030b8c7b7dfde126f65faf8cce0ab66387341d813d1bfd182089050847f0b73f613993229f59f01c1cec8760e9936ead9edc8f2814889330a2f2bade45783089150847f29c25a22fe2164604552aaea377f448d587ab977fc8227787bd2dc0f36bcf41e84089250847f2b30d53ed1759bfb8503da66c92cf4077abe82795dc272b377df57d77c8755268508935084818180828009800909905062001f9560005262003015565b847f12f6d703b5702aab7b7b7e69359d53a2756c08c85ede7227cf5f0a2916787cd282089050847f2520e18300afda3f61a40a0b8837293a55ad01071028d4841ffa9ac70636411383089150847f1ec9daea860971ecdda8ed4f346fa967ac9bc59278277393c68f09fa03b8b95f84089250847f0a99b3e178db2e2e432f5cd5bef8fe4483bf5cbf70ed407c08aae24b830ad725850893508481818082800980090990506200204660005262003015565b847f07cda9e63db6e39f086b89b601c2bbe407ee0abac3c817a1317abad7c577849282089050847f08c9c65a4f955e8952d571b191bb0adb49bd8290963203b35d48aab38f8fc3a383089150847f2737f8ce1d5a67b349590ddbfbd709ed9af54a2a3f2719d33801c9c17bdd9c9e84089250847f1049a6c65ff019f0d28770072798e8b7909432bd0c129813a9f179ba627f7d6a85089350848181808280098009099050620020f760005262003015565b847f18b4fe968732c462c0ea5a9beb27cecbde8868944fdf64ee60a5122361daeddb82089050847f2ff2b6fd22df49d2440b2eaeeefa8c02a6f478cfcf11f1b2a4f7473483885d1983089150847f2ec5f2f1928fe932e56c789b8f6bbcb3e8be4057cbd8dbd18a1b352f5cef42ff84089250847f265a5eccd8b92975e33ad9f75bf3426d424a4c6a7794ee3f08c1d100378e545e85089350848181808280098009099050620021a860005262003015565b847f2405eaa4c0bde1129d6242bb5ada0e68778e656cfcb366bf20517da1dfd4279c82089050847f094c97d8c194c42e88018004cbbf2bc5fdb51955d8b2d66b76dd98a2dbf6041783089150847f2c30d5f33bb32c5c22b9979a605bf64d508b705221e6a686330c9625c2afe0b884089250847f01a75666f6241f6825d01cc6dcb1622d4886ea583e87299e6aa2fc716fdb6cf5850893508481818082800980090990506200225960005262003015565b847f0a3290e8398113ea4d12ac091e87be7c6d359ab9a66979fcf47bf2e87d382fcb82089050847f154ade9ca36e268dfeb38461425bb0d8c31219d8fa0dfc75ecd21bf69aa0cc7483089150847f27aa8d3e25380c0b1b172d79c6f22eee99231ef5dc69d8dc13a4b5095d02877284089250847f2cf4051e6cab48301a8b2e3bca6099d756bbdf485afa1f549d395bbcbd806461850893508481818082800980090990506200230a60005262003015565b847f301e70f729f3c94b1d3f517ddff9f2015131feab8afa5eebb0843d7f84b23e7182089050847f298beb64f812d25d8b4d9620347ab02332dc4cef113ae60d17a8d7a4c91f83bc83089150847f1b362e72a5f847f84d03fd291c3c471ed1c14a15b221680acf11a3f02e46aa9584089250847f0dc8a2146110c0b375432902999223d5aa1ef6e78e1e5ebcbc1d9ba41dc1c73785089350848181808280098009099050620023bb60005262003015565b847f0a48663b34ce5e1c05dc93092cb69778cb21729a72ddc03a08afa1eb922ff27982089050847f0a87391fb1cd8cdf6096b64a82f9e95f0fe46f143b702d74545bb314881098ee83089150847f1b5b2946f7c28975f0512ff8e6ca362f8826edd7ea9c29f382ba8a2a0892fd5d84089250847f01001cf512ac241d47ebe2239219bc6a173a8bbcb8a5b987b4eac1f533315b6b850893508481818082800980090990506200246c60005262003015565b847f2fd977c70f645db4f704fa7d7693da727ac093d3fb5f5febc72beb17d8358a3282089050847f23c0039a3fab4ad3c2d7cc688164f39e761d5355c05444d99be763a97793a9c483089150847f19d43ee0c6081c052c9c0df6161eaac1aec356cf435888e79f27f22ff03fa25d84089250847f2d9b10c2f2e7ac1afddccffd94a563028bf29b646d020830919f9d5ca1cefe59850893508481818082800980090990506200251d60005262003015565b847f2457ca6c2f2aa30ec47e4aff5a66f5ce2799283e166fc81cdae2f2b9f83e426782089050847f0abc392fe85eda855820592445094022811ee8676ed6f0c3044dfb54a7c10b3583089150847f19d2cc5ca549d1d40cebcd37f3ea54f31161ac3993acf3101d2c2bc30eac1eb084089250847f0f97ae3033ffa01608aafb26ae13cd393ee0e4ec041ba644a3d3ab546e98c9c885089350848181808280098009099050620025ce60005262003015565b847f16dbc78fd28b7fb8260e404cf1d427a7fa15537ea4e168e88a166496e88cfeca82089050847f240faf28f11499b916f085f73bc4f22eef8344e576f8ad3d1827820366d5e07b83089150847f0a1bb075aa37ff0cfe6c8531e55e1770eaba808c8fdb6dbf46f8cab58d9ef1af84089250847f2e47e15ea4a47ff1a6a853aaf3a644ca38d5b085ac1042fdc4a705a7ce089f4d850893508481818082800980090990506200267f60005262003015565b847f166e5bf073378348860ca4a9c09d39e1673ab059935f4df35fb14528375772b682089050847f18b42d7ffdd2ea4faf235902f057a2740cacccd027233001ed10f96538f0916f83089150847f089cb1b032238f5e4914788e3e3c7ead4fc368020b3ed38221deab1051c3770284089250847f242acd3eb3a2f72baf7c7076dd165adf89f9339c7b971921d9e70863451dd8d1850893508481818082800980090990506200273060005262003015565b847f174fbb104a4ee302bf47f2bd82fce896eac9a068283f326474af860457245c3b82089050847f17340e71d96f466d61f3058ce092c67d2891fb2bb318613f780c275fe1116c6b83089150847f1e8e40ac853b7d42f00f2e383982d024f098b9f8fd455953a2fd380c4df7f6b284089250847f0529898dc0649907e1d4d5e284b8d1075198c55cad66e8a9bf40f92938e2e96185089350848181808280098009099050620027e160005262003015565b847f2162754db0baa030bf7de5bb797364dce8c77aa017ee1d7bf65f21c4d4e5df8f82089050847f12c7553698c4bf6f3ceb250ae00c58c2a9f9291efbde4c8421bef44741752ec683089150847f292643e3ba2026affcb8c5279313bd51a733c93353e9d9c79cb723136526508e84089250847f00ccf13e0cb6f9d81d52951bea990bd5b6c07c5d98e66ff71db6e74d5b87d158850893508481818082800980090990506200289260005262003015565b847f185d1e20e23b0917dd654128cf2f3aaab6723873cb30fc22b0f86c15ab645b4b82089050847f14c61c836d55d3df742bdf11c60efa186778e3de0f024c0f13fe53f8d8764e1f83089150847f0f356841b3f556fce5dbe4680457691c2919e2af53008184d03ee1195d72449e84089250847f1b8fd9ff39714e075df124f887bf40b383143374fd2080ba0c0a6b6e8fa5b3e8850893508481818082800980090990506200294360005262003015565b847f0e86a8c2009c140ca3f873924e2aaa14fc3c8ae04e9df0b3e9103418796f602482089050847f2e6c5e898f5547770e5462ad932fcdd2373fc43820ca2b16b0861421e79155c883089150847f05d797f1ab3647237c14f9d1df032bc9ff9fe1a0ecd377972ce5fd5a0c01460484089250847f29a3110463a5aae76c3d152875981d0c1daf2dcd65519ef5ca8929851da8c00885089350848181808280098009099050620029f460005262003015565b847f2974da7bc074322273c3a4b91c05354cdc71640a8bbd1f864b732f816388331482089050847f1ed0fb06699ba249b2a30621c05eb12ca29cb91aa082c8bfcce9c522889b47dc83089150847f1c793ef0dcc51123654ff26d8d863feeae29e8c572eca912d80c8ae36e40fe9b84089250847f1e6aac1c6d3dd3157956257d3d234ef18c91e82589a78169fbb4a8770977dc2f8508935084818180828009800909905062002aa560005262003015565b847f1a20ada7576234eee6273dd6fa98b25ed037748080a47d948fcda33256fb6bf582089050847f191033d6d85ceaa6fc7a9a23a6fd9996642d772045ece51335d49306728af96c83089150847f006e5979da7e7ef53a825aa6fddc3abfc76f200b3740b8b232ef481f5d06297b84089250847f0b0d7e69c651910bbef3e68d417e9fa0fbd57f596c8f29831eff8c0174cdb06d8508935084818180828009800909905062002b5660005262003015565b847f25caf5b0c1b93bc516435ec084e2ecd44ac46dbbb033c5112c4b20a25c9cdf9d82089050847f12c1ea892cc31e0d9af8b796d9645872f7f77442d62fd4c8085b2f150f72472a83089150847f16af29695157aba9b8bbe3afeb245feee5a929d9f928b9b81de6dadc78c32aae84089250847f0136df457c80588dd687fb2f3be18691705b87ec5a4cfdc168d31084256b67dc8508935084818180828009800909905062002c0760005262003015565b847f1639a28c5b4c81166aea984fba6e71479e07b1efbc74434db95a285060e7b08982089050847f03d62fbf82fd1d4313f8e650f587ec06816c28b700bdc50f7e232bd9b5ca9b7683089150847f11aeeb527dc8ce44b4d14aaddca3cfe2f77a1e40fc6da97c249830de1edfde5484089250847f13f9b9a41274129479c5e6138c6c8ee36a670e6bc68c7a49642b645807bfc8248508935084818180828009800909905062002cb860005262003015565b847f0e4772fa3d75179dc8484cd26c7c1f635ddeeed7a939440c506cae8b7ebcd15b82089050847f1b39a00cbc81e427de4bdec58febe8d8b5971752067a612b39fc46a68c5d4db483089150847f2bedb66e1ad5a1d571e16e2953f48731f66463c2eb54a245444d1c0a3a25707e84089250847f2cf0a09a55ca93af8abd068f06a7287fb08b193b608582a27379ce35da915dec8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002d8d60005262003015565b847f2d1bd78fa90e77aa88830cabfef2f8d27d1a512050ba7db0753c8fb863efb38782089050847f065610c6f4f92491f423d3071eb83539f7c0d49c1387062e630d7fd283dc339483089150847f2d933ff19217a5545013b12873452bebcc5f9969033f15ec642fb464bd60736884089250847f1aa9d3fe4c644910f76b92b3e13b30d500dae5354e79508c3c49c8aa99e0258b8508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002e6260005262003015565b847f027ef04869e482b1c748638c59111c6b27095fa773e1aca078cea1f1c8450bdd82089050847f2b7d524c5172cbbb15db4e00668a8c449f67a2605d9ec03802e3fa136ad0b8fb83089150847f0c7c382443c6aa787c8718d86747c7f74693ae25b1e55df13f7c3c1dd735db0f84089250847f00b4567186bc3f7c62a7b56acf4f76207a1f43c2d30d0fe4a627dcdd9bd790788508935084818180828009800909905084828180828009800909915084838180828009800909925084848180828009800909935062002f3760005262003015565b847f1e41fc29b825454fe6d61737fe08b47fb07fe739e4c1e61d0337490883db4fd582089050847f12507cd556b7bbcc72ee6dafc616584421e1af872d8c0e89002ae8d3ba0653b683089150847f13d437083553006bcef312e5e6f52a5d97eb36617ef36fe4d77d3e97f71cb5db84089250847f163ec73251f85443687222487dda9a65467d90b22f0b38664686077c6a4486d5850893508481818082800980090990508482818082800980090991508483818082800980090992508484818082800980090993506200300c60005262003015565b60005260206000f35b8460205182098560405184098691088560605185098691088560805186098691088560a05183098660c05185098791088660e05186098791088661010051870987910886610120518409876101405186098891088761016051870988910887610180518809889108876101a0518509886101c0518709899108886101e051880989910888610200518909899108965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/Poseidon6.json",
    "content": "{\n  \"address\": \"0x0a5A6f847899e185a14e54266036CE8260142659\",\n  \"abi\": [\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[6]\",\n          \"name\": \"input\",\n          \"type\": \"bytes32[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"constant\": true,\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[6]\",\n          \"name\": \"input\",\n          \"type\": \"uint256[6]\"\n        }\n      ],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"payable\": false,\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x4286107b048b45e833b049185465458e83e6c855f3c2a9576764a2551cf56148\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x0a5A6f847899e185a14e54266036CE8260142659\",\n    \"transactionIndex\": 81,\n    \"gasUsed\": \"5162502\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x035fe2e633a50bb6f84906b4d910b4436092648f306705beda9ffaa731c3e4f9\",\n    \"transactionHash\": \"0x4286107b048b45e833b049185465458e83e6c855f3c2a9576764a2551cf56148\",\n    \"logs\": [],\n    \"blockNumber\": 5081896,\n    \"cumulativeGasUsed\": \"13654059\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [],\n  \"numDeployments\": 1,\n  \"bytecode\": \"0x38600c600039615c596000f37c0100000000000000000000000000000000000000000000000000000000600035048063f5b4a7881490636afa4b7a14176200003757fe5b7f2abd9e16b7b48289aa19cdfec726fa3fa15cc1625102ae511bca45f39d337e9d6020527f1b4bc5885d1cfc8eb691875300db5a0c7362ae381898acaf8b63cad04ecb36c66040527f08a72fbb55dde3e93c5818571a424a54953695029eedbcf91eaeb012751c7f836060527f0f95359a1f6845d4921892f83e500bbb1b3d3763d8fc762400af039b0abb83f56080527f16f01751ce985328afde34d81619defb43e6c7b5dadf52d0f82472fbce7770d960a0527f1c391626328457fcafa629f3e6d33e2555e8d885e3c07cecc8af1f4d5659641760c0527f00970f671b9ba35e3e3c642d1e0b8032023ed5bac91c2c1056f03965a42c529760e0527f1fe9feb5c7f7c7a426bff032cd6a3158278b6c6b2cc57a871213fcafd6427989610100527f0cc7eabb154aa7955eac47a19f6437a2b8dec0fe9e5686150ff6e88b1a7b4bc4610120527f0393efd96399aa0726ef9af79be8b6c715e429906ca0d15076b5a990fea75ace610140527f0871233835b752ea030cf8a4f43771296eeb33f697d1b0825db47d39ac9e5955610160527f1a02798f047a51baaea34fcfb26ca6afe96a5fad1d2db4270497b6e6504891cb610180527f055665d76df3cd0fcb713c234ea79d06a31d6e3e4c3bcc657dba4c664d5a0da06101a0527f26ee9691a638edc7c91887e302fc55e8e7758286a44845ad88fd7de3bb1052c16101c0527f00cdb2db9e4f9d732d217c5e3114821165d49e5a2d41556bcd53d0c4d433224c6101e0527f012f3bb29c972793182123f5c49306e16a3a787c4bcd9c798a131b70856d1cbe610200527f0bba9006404c5ede82b527677daf444ed43fd1e0dbdc5528dd2cd1f17ad73481610220527f17e4e73bf701f88d219acf1ca6390cc1e17c9f84b1713820837ca070be84a2dc610240527f234b8a077ef52b53a343b8da5b20cc358ad60760dd60276d485015f73d53d207610260527f2dc3fd77394b7b5ac1cbd1b46e6ded5b835d7217a4c50a487ae9a35a7fd45d9d610280527f1668477640fab14c72b1c16ff0192e48cf882f12276bd12f97f82c6ee2e61e486102a0527f09664216ca565c1a44fc2b98347ea8b36904b3877f2159dcc999895adeb4d70b6102c0527f111fd8dfce2bd3b7ba0cfa93e20fb685abf76d77305857b8df30914e4849ecef6102e0527f19f53c0a592b3ea93497a511e56f66753598265b1ab6774da48eec04e4d93426610300527f19b683c39d3b002fc3523b7bee5a60148b1dbdf18dd1c318e6a541e8cf66a174610320527f2547113a818779f13e3448719c7ef100b8036bb3e882dd5e6456c35311c1bd5b610340527f00cf148f8045cdbe7bb1013f72ebd4126a3e35cba9a970441ba8d5bc76943b0b610360527f3008421eed767a093322a09c3733973a038168cb28cd2e1f709076c00b869599610380527f1463f51d4a4cb1eba16dbc115566aa48fe77b43c244c9988a3c658d2f56493d66103a0527f16afd8f4c39038b8006a59d292aea84731c0f83832a61b82250ed90118e8fec26103c0527f2296361f3bf154efbab996921936e9b1dff8352711f958638172055333e075796103e0527f1c3160ebaeb10f809f69843cf8d5bbaca198d1f8e3439be29beb92d909ec891c610400527f094c66bdcff54382cd9213abe43312edb5b4d414c6e09acca24912a7635404c6610420527f2e883bd408c4c826d004ff777d7c0938434ab5bb84f3420e5d94b853b1746f89610440527f228af6d425e91a783dd18fd89a6b38bda053f2f23c094b875f27cb3abba2030b610460527f214e41788bd2b990347c7f2a8f47612d4dfceb1a1e6da38165873df66ce51f59610480527f03fba82d3f783620873da94e9f4e84c8b529d76f54e4b5d7d4805272af9b97756104a0527f066782fe3e869de2cebd7ebbf60fb435785329dfb12ad9bd1b4e46ed362895116104c0527f1c5cd6b23ef336be01efa37a27e6b7aae5d1643fceeb212cdff51588835fb5376104e0527f2f3b4bf0f105f88e27248af094e29feed9ff3fad9a794e15830bd2b311539453610500527f2f4085eaa9f80a69b739fc23f2fe4057f64729b311783fcfab3a0a36fc1ff432610520527f2363603349e94f520fa1f98fe2507f6aae361934078aa59a16214c088185638b610540527f0548541724f64e20128260899abe8fbcdff184a1957a9385fb715923bf0fc79d610560527f21c5e25a6991364e59a205e5b01c811deeb095680a72928369cfd2de71b14f98610580527f11c5cc53f6338c825817aff7792a2efbce8fff171300d41455a2edac37663d026105a0527f27a0949fdc9f10495c4ee7214aa0edd2ad8eef68f577da8b96f9d87a39504bf96105c0527f1c7fc68f3fbde4a23c455ef0d0dbce0ce556a0194e6d552c0455cbb5b0c230e26105e0527f11d0f56fc00e7d85b3a2939fd33991dc8abc1ced0c3f3c530cbfb4500d63de9c610600527f01b2e9d20d9b55deb048cabe1636f0e96363bec886679cbd91f332fb2bade44f610620527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a4356084356064356044356024356004356000877f2197703fceb4cbf07c6dbf46c4ad93e7d14e554db66d09102ff84824743fe4e782089050877f1322f0fffc7e4854bd8b5fc23e7106b51f59bd5061d8b565aca2fd3efe512f7983089150877f19e414f80380aa2d222133118c337d82a8c5894c2f88861ee46f448fa9d6135984089250877f22241199a4df9cb7d65249d9562cad6c65f16460e79a7939cbfdd6d7b9209d9a85089350877f0301061735384dfcecf9a311c22ade327b51c78b211615f41c77f6d85e8a41b686089450877f229e1d86c1f2810f4a2633b7b4b5bb61b7dc5d19ac95fd8d379548ff2b6850ee87089550877f0e31dcf9c53209a817eeb292e989727c3f56bff65883afe5fdc28ac3dfbea67588089650878181808280098009099050878281808280098009099150878381808280098009099250878481808280098009099350878581808280098009099450878681808280098009099550878781808280098009099650620008e560005262005a78565b877f222c7318ebe96306c9d79ac11237263c6b8eb25272eb88407e8c29a358b40f2a82089050877f0cb416b42c53a829cf4fc823be8f4fedd12593394cd529053ff4e3604974a2c683089150877f0892729d09594a8d8b1adfbf2e2ed75399dee612842b6db3d2d2c2aaddb6c0aa84089250877f18e39e9ae45f14ba97a15bd672711ae124375d9f482a4487a0e334dee2d27c7185089350877f2560c9ff672e6ea69dbb33844d0d22870461d18eaf0f8992d4d7ac649edd661086089450877f21bee2b8ed54b726ef17f77366b1dcfbda7ccf1e487f9916e5f963e814c5731287089550877f300e1b28dabebdc0d4bdbc19be29a3dee4eda8425dd0c7c6e82fec147cb070ba8808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000a5060005262005a78565b877f2c44a5ff45deea69dd2961d67011af4982b9405f9fe38de4a732d2aeae88cc2382089050877f0c8d59fe1b7f55095e6aaad9e3b4e7b1c93d876ba3234dd1ac5ec64108291bfd83089150877f06cf82bc5fd115d348a30b0c45378d90cca1660446ba049759fa53103fcd78b584089250877f2f80ed01a2118d02e2145111c3fe6ca70efdf95d8abeaee8829293347dc9061c85089350877f0bdfe7f6803e4dee7b026e079075908cb8414e3d651dd12fda67df08dded9e4286089450877f06cc48ed882405595b34d39138f50bb5b31a963a0dba66aef17c19ad622e29b187089550877f2a67f3ba6d15949932ac5622cf9e2b493801bf16a50336a4518258bcc6867c958808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000bbb60005262005a78565b877f2572725a67c60718df656934aa78fbeb80c8f395aeb6a20cd833c4b14fef412a82089050877f03bb7f6ca43545b11f19721265b416166579cb753330b1879b79685d1df0bfa783089150877f2412815e863f8f3bc28bfcbb957faa5f393300b25133e9221b8eb3156ed5c12b84089250877f0dbf64d58df212e4307871966de097a5db09a93e5bc305cebdcd0630f433af4585089350877f274c06c01158e047ff4a791e25b7bb3db190529df8f50b6386273f810f15c6ab86089450877f23cf40693f52abf0ed3d842f7bc85d1a2111d0abecfc18acd0fe3991ee5fd33d87089550877f1daaa926528f3368f4e4cf924166b8bd3ff8daefbcf900e6dcc4ee63c40996988808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062000d2660005262005a78565b877f10103789dc9471ad718657bebb6781e39bd92fd20ee1a32d0de3ea2817a0155582089050877f0009bc25065080e6c6e9932e34bfde78d1085f19e9ffc8965a4660a4d9b6d60783089150877f1312c727cb5489bb174e1dcb82588edfab31a2999b377dabece466e9dcd6afee84089250877f20294a462c7d0c25aeb5374618e5e77316682ae3d726824f15f00f7cb9a7009f85089350877f25e0c6be89bbb04bd8391c90cf35588f0e9d73fdb06259f47a05513ad7a23e9186089450877f0084a0b87e0b336c9a911069f89d875a38be313efc420d28b9ec287f28810fd387089550877f28a03ee29f612aab268f76241d54d477a1d97f5807ba2e1812f4d350d7c6f7da8808965087818180828009800909905062000e4960005262005a78565b877f0b6794182b723a12e0b35f76bd55a7d106ee6a4035527c4d329a6f33068d7eda82089050877f015b9a698465428fc686b79db4959c8495b92b85122f6a6932940836facea86d83089150877f1bfe52289f811f5c3619f14866138ae9a1279bb76e8cec9a8936fdc36f59df7b84089250877f1cd574fe8d5e4c428b92b23a9717342176e1d309a7e259052c31bdc9af091fa385089350877f212d1bbdfaaf0200735bc5851a156adcbfa4f607f5da122e1f63afaecd38cab786089450877f0b0479e28820e883d903a951f95b13093788e9e1ca64ddf2abb94b13fee9edbc87089550877f0110f5257c21c9379d73b76e9ca95c513c77a15cc8ee0ef726d8460d4fbbdaaa8808965087818180828009800909905062000f6c60005262005a78565b877f08c52e9401a9764f0c2487dfed34e215c186b6c2838e38eb5a50cca4f0bc699482089050877f2e422b4323cb4c0af46f4b0e5052f75744c538abccc7643f339440dc3aaeeca383089150877f2e12482ba160472d45549ff79cd04aebc4a327c4bb9d78c2573b835b05c55fe684089250877f124fa5f9c5a96d6cce92cfc73ea2446202f09100eed203ae4267aa637a032d3685089350877f0bf651f82f83ca1fa037a941d4e2a4b3e08f5e1603f933a1723adf4135796de786089450877f21c674ea7b834741cbad39b21b242ab9a5554c6c9f92e801cb1fe4382b61946387089550877f214f91d6c4aef57e83186b57fd9fa48a193e1caf16d7f6dc1559d144a271b341880896508781818082800980090990506200108f60005262005a78565b877f203e2218389729c26c6f66213f2269c262785ec68c759599c2d8e3f68035055b82089050877f1aa934198713ce17658f51293fad44b1c22fc80391405ce76c92b2349b7eb3a283089150877f1014d4e5ddd9c17b3c2b29684476afdbaf7fc56e8b799616a67bbc6678e4535184089250877f033c13ed45b4762a47e1d2d45d7fc8fbf9d4e24546e20dc596911fb99171035885089350877f09bc1c3274c569e7e5c5d77c51fe69b23b7e435138f4f3217016a2d70ce71d5e86089450877f1803171c9dbc0610e38d8308db101d6a99ca90137f6ab8cdab2a91b36b63322a87089550877f0ba6071aa98afec3fbdeb46a88e4a5d17bd4454c0e7da8c74b15b084488cfdcf88089650878181808280098009099050620011b260005262005a78565b877f179e90ab4b08a4ead281a8709057487e077b710879911f215fbd6e8ebf838e9782089050877f1cbca88b8ab3f0588ff87deea978d00008adbad808e6510897238ea007f491a483089150877f2f50b20b33692bb0f62777de5e3198377d7923ef2fa8ede08831e10f7e9b9f5a84089250877f15ba030e8f1ef6f260566fd6fcfffcd21a1cfc1232f7ec7148ff076d1ba6870785089350877f0dbe053da01aa4b7c0fad83a3cc966f0b8281bb4940f97a5516cfb9dcd543a6f86089450877f222eca5d754afeca8997f31d6fcb94a5d799afb795e68d4d8b0ce6d839f6dd7e87089550877f2abffa43d756ef242db7f584bd62405991112618362f1b29a33ee2131b46a44688089650878181808280098009099050620012d560005262005a78565b877f03c92524ebe67300d0dd0aac464f0e6ecf962d6ad41bf2685f077bfd788eb3fd82089050877f282241758ade4ef8ff3858305288d3b4a52209295d1a4bc89d885b2f5dc3341a83089150877f02635cb973d71bb3d2137bd81680dd3bc607fc5487e898c4c2d83c1dc281768784089250877f13c866aa66e8d506079dc24c2df7b1e691994887d35622f4cfcf014bbea223e985089350877f151f0007ccf42a7ef969f1b6f6315992e6594bb5344d2839fee6620b60e2c02386089450877f1c1c6a5ebccee8caa4dc7ef18e194274f6e198d2b140ddcc97cb15c92ba1409c87089550877f18330c9e67d62f7861a996d7ed69bba904b0dd459f2b254fc7cc53dd28e45a6588089650878181808280098009099050620013f860005262005a78565b877f26b747740c95bf139cb11bdf02fa63a4bdb29a90f158933a1822cdde5387290d82089050877f1475676fb205084246ef9bc7234f312c214f426852dcb2ec7dc3772f579af8b183089150877f1b03ad9080d29b70aaf30bbc3200efffe73ee269dc032d2e32bd190767bc380d84089250877f21c175f937c2f82e99735bc7c201284f89577b27a1f84fa24642eceb552f445585089350877f1192e0269a6b66a8c5887527aa4474c2de91cf8c71ebda835df2cdccdd4a4e4b86089450877f0f3a12c0ee52f0d34f2b4a0dcd13541b48aeb3d5121d311113bba9792a45a58d87089550877f07fb521883bdf78b33689205b45e52269458a061bcb87eeb3b1e183c6d7eb5b7880896508781818082800980090990506200151b60005262005a78565b877f248d0e8051c1a965640c96c6f010c4931fe648b96f95ef6f5b8e474f64cf316982089050877f2ab553db9ead2c82ce91febe180529eff3521875f7e90a9b8b7a3c4de4877cd683089150877f211ee3bda3c95f1954eef22a0a82c2ede8444e42a72a8200bab6a133846d5b5c84089250877f111db3b5184ff7412f79c129904a9cac4ee65a51c2062d66732f54bcdf767be485089350877f1a73843264cf9a3a1bb6fb68ef76037c4fa98337e5c10096c630b449ec4a5f6786089450877f1c2e5a2d9332f65128c85358662d6a7c44353add09c27cd07da02f9144da855e87089550877f0e2b35fe1021b879de5b67a7458fa6188bbdea39e2bf468a1a24e3625cafff98880896508781818082800980090990506200163e60005262005a78565b877f2e568594e5dfbfadf272b8d6e8c99bd785c4fa94ce9e87fa8a9a37e32c7a28de82089050877f07043c7571cb7dc5205bfda42d693527a4bcb58238ed6a6a248e7917ddaf0c3a83089150877f239e18a0c85b845ffd6b85e96343f1a8378f3c691dadfb228da6ff7aa79efe1f84089250877f25e247af250c564c00f5ff1cf1f2bc8606600f173cb65ef0780af9f5a1b676c885089350877f031ba3385664544e3e0801f1698b15033a6049b2504e9cdc2c6e3eb2fd12100d86089450877f2a33777739e2ab0adfb1ca5687db1e059b20370cbeeccad32da5c3609431ff6587089550877f2bfd6f0e9e996ba13749327b9c5cec69903d413b2df29b777d05384b3e7af952880896508781818082800980090990506200176160005262005a78565b877f2d453d93fb36fbf8e36747ee92d90cad9e02e692d0748c07fd43eafc2cc5e82382089050877f187bd8043f8642cda2b6bad82958d115818880eb80f6b730381d974ac5d5037e83089150877f21aca605f92a48ac35708fe5140729fb35c3e48ccec441217713b0864944393084089250877f173fd164f5224ac06c2e99f3e2eaa6379df113de30aa485e8bbcc7f0fd2d1e0385089350877f071c66a6463c3fd4292bf1e5acb6de611142d73cd1db590e89b61b57d44d69bd86089450877f044a40e396855be550d8ccce7b82ee2caaef6675bebe92266c666982ff72bbf887089550877f1176d9f52e12df67f087110a15aaf98d1ded293ffdf99599fedef2e51569e4f6880896508781818082800980090990506200188460005262005a78565b877f06e8eb7dd026d257b15c6624bee2f37d5b67b4a671cfcdfee5797e8457b6391682089050877f0696aa48c1d5fe84ca5cf59009ab0baaefbb612e32c91d5ef306def38dc5673a83089150877f0853c33a9c7a7c3b355c92c75de444365db82d241eef9f3fac417004a3a1accc84089250877f3016c0ba34678e0a67f59cf96ce16e908154f5f9802591717e66e95ba25ab77f85089350877f0af008601dc9552517f303ff9e22c793a682caa93256f2f09a4f746542603b0e86089450877f04cb6d76b5a27a5aae387cb647790318c25fc16f8d7d1855a38765f847f731b087089550877f2ecf70c372d8e5edcad49e58d47875f26933d62614f266e6b4f586177148565f88089650878181808280098009099050620019a760005262005a78565b877f01f393a6ee74dd6c4d52b0e7820a7132f8c4889742313c06caa6ecc55f3dd41382089050877f2e4d4ce3f97bf96ff86b88e969d13e415e14721282769f7cf8c3a73723f094db83089150877f306000ef24a7f5a9c652e3a9367578554ea59bf8efa0bd8bc5776460c18c1add84089250877f26e58d6287678f3db9c225c1d3b93ae7c43a69024ebf249c8bde40617c2b3d4985089350877f09eee09f873d1bf683971df4d7ce56c8f0b8b98ddc05b9612c0a0d317310655a86089450877f0f08879dfd4fa0dc11ded556ef01c6f94cc6f4d18553b08bcb1dd604392ec00c87089550877f11459f7e9f0e3c727777e34d6d93ec28a25bd867171523bad5be0d5a20029eb78808965087818180828009800909905062001aca60005262005a78565b877f04e9cbb6f6e8e805a20fbd801a53b723f78c1f5acd227880f7f37f4e5b0528ad82089050877f2d2ff32eb7a0c0266dd46bd5939c9a9aae88b3e9af5dad01a7304f9868f7c7c683089150877f23b77eb0f27e950200a590447d645a723d9b405fa2538a5cb76fc5fdae16d83984089250877f2cd6d2c5658ec0792daee2067e2f958d6849886318a6c1c27233a469e9998c2f85089350877f0ae1daa420bac90780d0c83026bfcc84af83953e26eca839da76861e739855e786089450877f2b495b854553d02a75b68763bda6dd8ef0e81fe32b5cb072d3f580a914967bf087089550877f056fa5d7ce2c32bc5735351d2d48af5d6c9256a4b72e12a35640b53ea959e2968808965087818180828009800909905062001bed60005262005a78565b877f2ecbe1a06b28ec78ea7d22df11cd224a0e1a0ac7a3476c5cc3c4e50da961a87b82089050877f143053c1c387f9353bd677e5db6e9975792bffeecf02d6aa0fe8f627579fe6cf83089150877f04064b25584499a011ea74ac047a8b37494189bc63342bb1182e234212d42bdb84089250877f100f61f6b81542156760a6d29af5dd8644c82deab5b90e6ac66de8b4a069564a85089350877f18d331b2e8180b7aa7055c029fa77aff4f02b0e2a2078bff67688ed65b51d6dd86089450877f0fcf9b89e19b1a55f9b03255cf80ccb9fb6aafde2b46207d873fac80ccef085c87089550877f254f801f3c89c62436ef63df67d912c1f231bb1f76c6c7b497f7708dbcfdc17b8808965087818180828009800909905062001d1060005262005a78565b877f16d8e85e57819a10a61461bcd8d3d3c963c4f95afba3e4d8fd0d6ec882b9d16182089050877f29c9565aa702088bd443e4620d84bb2bfb93253a8f0f04e5cf408c92820ada8483089150877f294fb68064643d8beb237bd705a557871b5f1408624eda46d47b583a60d29cf984089250877f2c26f3083140c104baf24c3df922317584aa11770451e6a846de7dc79519731385089350877f231811279854707dbaa537cb27241e7021a949a1d9671380a7d6944c838904cb86089450877f1419365adbb91f1f7d1bb0aa8a4b5d11c7ad0570cc6cf3638be9c5a2a275b49587089550877f1674425f2e9fcaa66eb001feca48ddd4b2a29e86d451f00d176ea35b4e02fb848808965087818180828009800909905062001e3360005262005a78565b877f291f956def59b878028000cef03d7b54dcc2fe1dd5a75dc180d6d5bed898cd3082089050877f2f1302894fe6a26b5bc03fbaa69c4d95012394d78de494549c7057b7ef965bcc83089150877f0627d6d6d94d0a19a17db45c0796f7db8de13d278a2b24c99ac5d92d0a1a1ce284089250877f2ee297662bafebcb01df8e62bd5f50f03025515b10465d59f3a294f0bfbb2fc585089350877f118029945df773f52fef5429da766b902eeae7d967062fdd879c60a1bfaba75b86089450877f306042d262f6268ba789eb4323c2169279752ffec6b8536cc68b53bd4df0e85887089550877f0472a13ac7da9ebe1132e05f9ef609135c82a0ebd9278def2b34f8ce709aee4a8808965087818180828009800909905062001f5660005262005a78565b877f2e8f76b27b474180f00c5a6c2d65850bbf96019bf0d76dbb4743a970f42a130f82089050877f1e33984165f47c204a33fee31f613544b7d846a7d5ea45280ede4b362c32aaa483089150877f17f22e27252bdcf91a72b59eb276a666ce4fea7adfbacb2ea9fdf28524b7b43d84089250877f00547e7c70ee4e3fb4a4d386c8baa55d823a0f02bc963b43039b8847cff6e6c985089350877f08ea4ccbf815be325ccd15494f38f3f97153ab09c54a87a852b2a99480724e2586089450877f277cb45f3e632718673ba05d48c712fe7404df9eff5401cebe45d194c67fa8db87089550877f0159ec7ea49aadb3a8b0a23c1dba0023807b0d099d3c40b69df866a92dc87b37880896508781818082800980090990506200207960005262005a78565b877f0c33489297e244956de579c5c112ab40c7fb2d89866a28418f660a86ee18524e82089050877f01bb4fcbae28a2f3399568c6b3849da27d6ddf4fe6adabb591151679ed37d21f83089150877f2a23343d24a9cfa3b8f413f52ee1b233ce4c1d5b9bf34b03dbc6d733d52305c984089250877f0707a6d515b3bad03a9b06d6be048defa850134aacd120f38fa93264016b778685089350877f1837db5401dd6ec30ba6b866184da56e8db439ffd04154ec469b62120ce35cb486089450877f244872a0d2766b8547e6b6a5afeabf198e1409a0f0026de36c101793952f6cfb87089550877f204fb17927ce873c761196395f7da46f679ca331832a59fddd2ae31e84eba1f5880896508781818082800980090990506200219c60005262005a78565b877f056f53037d5d8efc7cf6a6feba18d102bf818bbba70b86dd9b763a12072f4c2e82089050877f1df4bc5d73239f5ec3b89efad53df9cd8ad8fca543be01f5f40fea2952071bd683089150877f1ffb6ccbba001155d46e167d1fad1c13bf2892ac87cd9c347c734ab5ef65836784089250877f08ee36e881496539b0abd647d353e51b63fef91fc944880006f2c26c2ecf2a2485089350877f1c3080c254443332a3e6283d5bab6f7fce8aaa68487b9ee4e372cbc6cc17266586089450877f2dc6040500e7329f75a3cefa4db49f9b47085b1660f8873b3e81b7b1af82af5387089550877f2c8bca9dd293bb67db1f66ff2e82047ae9385ce67d7f33568cd4c216a89994b788089650878181808280098009099050620022bf60005262005a78565b877f2a157b9786f9224cf63648aaec1b9f61c7a7087ed6eb8ab20c6c5469d401b7df82089050877f1e0fb0cdd8a54591c42e7c26b9027b77417e4e6522b472bfe61ff89c39bc40e983089150877f250144d1cea033fd78bd73ee4ea4cfdcd6a42f7c00e2d7ee6794d464207d2b3d84089250877f0b6b3fe9a7a525ca60443c4b78a8e830957aae0403116d22983a2e680eedff6585089350877f2fdf613e67d176569f4743b4963f8c53e52482fa32e705247eb650bc7bd616e986089450877f048f64b14275fb86fc55b3c0469cd89306752827c3c04463be5bea66fbd7b38c87089550877f0f2027b781c2c52490e11ed4b7b494d66cdc16e690b6a4b3c924dc9d6e85483288089650878181808280098009099050620023e260005262005a78565b877f29652785160b261c1c20c741524a26147cc3191f33b74ebf17d44ce2f88b0f9182089050877f1176909e02a5b37bfd47810fcbe73af87fea130470aa44bdf6b058c4d359e17983089150877f180f26c6ce2a3a477baf0da58d069769c2bf0156d636f2255e1bc35c01e9899384089250877f2afeedcc2cec57285ad22e734fb7fe3dd65f62601c1ca4884a86c7a6a05f083d85089350877f0dd21a87ee22626998dbcd73dd751affb49d47a02e995a41bca26399103087d286089450877f1d21baa09d7f50f0159fa8a0b6e0d61446d1c7db5d1566469da6a85aa722496287089550877f2dc59c4c9e275cd8c2506282cc5bb842c014bea4236b1bc27a856351b48af802880896508781818082800980090990506200250560005262005a78565b877f2cf62d08541dff0919ba68a697f44f4791c42d1447a41513ab9d5f755eb1f38a82089050877f2f5b8853e2cd2e47a9fedeea4047e46083c97acd4b687aebd2264e7a0eb354b183089150877f05865328a9b2fd469170c391c5ba8db5c66eef9938e4da5bae33f2703c47073084089250877f29761c9fc3d2c4cc1b126be1dc0470a97b8f2725d327c6d1ca923c2aa8092b1e85089350877f1d3fb1f8dc3c77cb515c37bc810d3a5e3b96552d4bbb57fdb01c2aeeb1d9a04886089450877f05f2fbeb7cae0a35ee2f3a4d2964d241a0ceeb47b3f7c4c87bb3b052c8705d9087089550877f1f445014a0f266082a50257152609cc219062154f4d7c13288746954b97998f8880896508781818082800980090990506200262860005262005a78565b877f2d35917cb1d0ca611ee37cfd9078c924fc84bd1a4bfd7db3ce39e05b38f698b182089050877f05a89a4eb40387b8512f2f398b6526efe76716951c500fc8dabc835775335ced83089150877f04e26aa3f02601174f46ced15594329e4f4e5bd5d7d53d5df6c8633a94dd01de84089250877f204d587d61526c1e047e1dc6b6d403b9eb8730f2e2dfb7bc7350d939bac5b90f85089350877f21c8ca213d2f44446ae90a6bdae5843b7c2cb53ed699f36675ea8280a2a420e586089450877f1303bd921f32fa4c4e73af21457c46b6d69e2e6a2c396716217787b46e822ebf87089550877f0613823c5b6abeef14387465317e713b45ace79c0e4433d7c4d352097e5c8399880896508781818082800980090990506200274b60005262005a78565b877f0f27c5305ee978f4f775e213e3ba12a901f51144ce1ea89bb5046930f5ec55d182089050877f2cad11c693c6a627531950a307e07b30ea8a495115f5a5388827792120c7bdb083089150877f16bb256883c44cf37366618e46c6db4e3da97a9d4ae7d5c585959de3272f82b184089250877f29afe50bd78f72cc763695976410324bfd67157a5ccdb7ae45b00032e1d57a5185089350877f09329902e59e5243a726ae5ca35408a207148609ab3698139725aefe29aeb16786089450877f04b1800e600c90ec4776bc6af1764ccbdc10bf55c3314f42acd0531ad53420fd87089550877f298d0110bb90e4c35e293c7a7dacedef7ee9342a591b4330e27276aa13b67ad1880896508781818082800980090990506200286e60005262005a78565b877f024ea6e68cb1aa6b407e022649aa32d1b7ea4a350e510c07eee43929395e4f8282089050877f22ae3a1a81c4550f5fa0116e135d2df2bd9f6835a0f0d03f4dd934e1320a3d8d83089150877f1f0f5eee9e9abb2a2f4ae04d6fe09311fe0115c1e199c28e22705e681442ed3784089250877f023c86606616f317af022464f350b4bee80c2fca32064bcbf83e8cd35dac06c785089350877f2a89c4e5b074fbe67d04cb03efe18c4bf904bec4759b33dad6b2c86ebfd2b9d586089450877f04b0f48c4f2e05bda4b9cf806075f9c275df2cf60b5fd11470eaa7394a82727e87089550877f0edde5a2c01327ad042a686f443417bd8f107c99eb7c02900c931a7bd8cb349e880896508781818082800980090990506200299160005262005a78565b877f2cacacc9c9d8b0004d8932080f9378b60675a8bd853aad1dc50672f137212cc182089050877f0816f33508621f2d56371156b0a3f7731030e4b218e44c90a88cecaf07170dec83089150877f2ef8e0a455d472b49bffda935c8d3bee1ae9248608e2a52d53f4b76313c9792084089250877f17184a8af9199aba605dd1f2dd18ebc02e3055ce408068eccaaf3ea7c0a334af85089350877f16395e153937a83660db6f78446cb995836436602777d81f0607130b4488144886089450877f0e174088223c38e9440fc77307d6720ac32784c9d2f591e2437eaea9b8f5e2bb87089550877f19e70fa937788f7a2127573d56c8197bd0dd096140f39064865c65c31b47d4028808965087818180828009800909905062002ab460005262005a78565b877f0e434c329d5242adbdab24780495ff97230beb344b918f6f8d6bd7d21b03692e82089050877f2c88a82eb87c81ba42a211bf2ef3c15875ac157c7f3868fff35af9f55a8c22bc83089150877f111dc223e3c9fc7452a9c2de469383915f33adf4cf5b49fd2e01c51d09ccf43684089250877f10647353de3197b9cb48f4539b507e45393b000842e8baa1218af097f871baea85089350877f0e53d64121c0a851c1b3f07423582034abce698525d0a47724354c07152f703b86089450877f2891938acb83ee193754969f4aa5a62a531081dbca4dec226258ea92984b434887089550877f04106f95e4ba3fb74dbe4bc53abc170262ba00c7c63ed8c457c3227532c12ce38808965087818180828009800909905062002bd760005262005a78565b877f2a73e61b8f1babfbb38b186f401eed0d92c5613ba25dd2ff4d099f7dd3c19fe582089050877f18e16b24642f19193b798b923b8dd25f6e4856d6b21b729aed2281ab154f7c5f83089150877f0d5f849b166ab9f6fc1a64467c5557029f359a2d0f194030c4dd875e12ae348584089250877f0e25250c57365a29c63a4f1531b8b0ef523eaa93c1d70acd0aa7cd7844dd044285089350877f0f813d14af0c85bcedfbf480b3d80b9f335853c60188526d80761274074a599a86089450877f0d2356a92dbaae8c24a8cebed6428083ef2f469460f166a6e774377e7805543587089550877f1fb6dceb495bf90fff56c8aad70b40bf773ea1003cdd092fd77a43961e9d7dc78808965087818180828009800909905062002cfa60005262005a78565b877f2c0a70ced79951a75e23c5a323fd706c2ab87c381cfc3c269081627741c2bbe882089050877f13dc6b3bdb05167dceb4b11037064ac5fd22db5e229e4c6ba55e8382321dc5ee83089150877f210fa8b777907ec30bb88dbd7c0e6ca9004eb3425d498025da6c90a47c35025c84089250877f0c5cfa957139b45a72fbbf80a410aab5454a982668baf24b0dd3c04e4d599cd985089350877f1f1f3bc4c21d633400fcf8bdb7be59b7f65cedc06bb2fc93a873b6ef12e0f52b86089450877f188f0ee95a9dfb03cd5e3fb30827057e933711644ee7bd57490374c0d67532e187089550877f0823877ebf8a842b77e8e0f3b44873e9409727101b186cae2b80d0cfa726ec8c8808965087818180828009800909905062002e1d60005262005a78565b877f0fe81603de39ccf148ca6390d6f8bdc9395ca2f3f50878283d98f1f0e61b1aff82089050877f2ef61fe192f52a9d7cebf41c134098f2ccae35cabcaa12963566768ff1b8370683089150877f0db6d076b2dd1b9f4d56d2f66fab4d7bfc6a38fef7f9ae1d4c2f8c44b1510f5184089250877f2a194a4ae8583f28189f9c011d107b82f279e6a0f8ca8bc9cb0aa581831c7d0685089350877f0ae539fa9ca67d4af48fb292f9188c9e72f2eeaae2e500b7e7201718c8da8de986089450877f23f66a894b1df4d26a8baa6d05b1ace511faffd4605b36cfd12bb4c6dc2bb4d787089550877f137cef522af2942aee9a4fb8017bf330e64601f466b56d32245669d9fe5ba7078808965087818180828009800909905062002f4060005262005a78565b877f187aafcb87841b2df9d64c1767789a6b221767e4634f0d550063a0bf92788c3282089050877f23212e75f4b89992a3647036ee36d74938bb9a9851e13d7b6e52daf66c4cbd2583089150877f0f54cbe967770dfa9d068b2fc53abc96489bb7d266212654d326de6b9af16d6384089250877f23d83a60b9887ab4359b8569ff3a219bb81367955fde72a62002d3cd51101fcc85089350877f2ea676fe7f21fc583ab0b0e189020d42cb22f044607ee15bfac7dd66da5ebe7686089450877f16f37f357a0c584821a356ab56a16d41f045029cb515f58ede001f05a807890b87089550877f139093b78fc9603a4288ae5811ed1311be916e4c97d35a5cf18e4b7e47d13b03880896508781818082800980090990506200306360005262005a78565b877f0aaba5fcad1c047030c8bf246f41610b68d60bad285cc15f55900f52778a11ba82089050877f1611827956f3435c1fc67dd3d37954a255eaa0196cddc5d5a6187fa0a2839efb83089150877f23db56362f248912421e5f087ad16e0c9e6d2bb59db30a52818e41964b7d812684089250877f2f215e640207a88b02999c98f1af8fa17331d19ea3de1decfe8f2e478224209c85089350877f2b2a261917c0fecf2bce19021f8506e378e9d3e1afb451e9d162b3d93eed861286089450877f2f662e4cdfef5f822cb956df75b17b46f17b08f930f54bab4324a0363e23384b87089550877f0870eeab2e7bb1e82c426c2ab1d65fda25d426749a538b4ea669eaa31f661a00880896508781818082800980090990506200318660005262005a78565b877f169418dffc99f2ef5dc6b1013717c134409349d846457985725b15ac6a152fac82089050877f021d3cb240d6400339ad5bc535b4fbb40919ce6b90162e51ec6895a7cabb437583089150877f12e45c46c45b660b6addc149e4216eeb6fb19474c8cce4d78e34c3cc18024afb84089250877f0c7c86394b7ad61d8c348d185403dc77152fd310b5d05970375a11b5abd0354885089350877f3024e78b217f85d8efeb60008ff70d33c3e84c238d9c21a04121b498a2fbb13186089450877f235977101b56071ced3163c1ec7187909a3ed7679bb54ad40811ba318e1afc8187089550877f14bf885e66f7c01fd974efdc0bc2d628ed79ad6fc6ba511c5a8ec383e1a73a7088089650878181808280098009099050620032a960005262005a78565b877f223325ae7e73cf093e1d5891aa92ed43f82610f1283f265f56548b38072f38d382089050877f239a5ae138dce6a019f44560ef7c19d2b8025dadf040559226f54870d318a57e83089150877f01dcc35115d9057efaf468d7c8a7d46048e01359c974855bc99738f0b247672e84089250877f1359a40012c5332587a4deb5604a436e269c282ba240cca0a6d77b343e76bbf385089350877f0a9ee39712223d4c0c37c26a96f267c85fc8e31acaee0c07354d3798dc5003e786089450877f11812d1ca3671ae688a9877233eeb5ec29868f7cd7c5e13275391a84167e023187089550877f2435cd699bc94985945d878960770f9298d40c0e28b6b5979069e0590952f0b888089650878181808280098009099050620033cc60005262005a78565b877f2bf020785e4117a1ea5930cd5355303bf9aab2a1ea0d6685391f40eeab2af0a082089050877f2cef6c78577c9e97a76855292ca92e4269ac53e9b7439dffbac2eda5c675802483089150877f09a30e00c9f0f6f260f05f029cdaa7c7afca506a5ce562c877b3b8d54313542984089250877f1fd85928f8c8053c9b264a74f121b90bbf9ae8063e0e89670165b9ba66a3e7cd85089350877f24482279d9efa57862a6cd4524aa289e6950606df8cdf8fbcaed4b674fdade9186089450877f10260a39cfb0d82ad8182a6951f9c780a455fc1de48c417d6ce6b27f3646218587089550877f25207827a76052d489bb2698730d5c3fc97192a4420578d2474a37ae7d7e314888089650878181808280098009099050620034ef60005262005a78565b877f28e36b634ecbdf7b8e4f9e1a347df95d771f15d97f2d5c401edf6a6e375874bd82089050877f073f0dea6f83d443ee3ba27c5b7f0064ab7cc0d34babae859f6bf66d46a1e16583089150877f14c6618569f748ff65514437adbcfa97f87b9b0d169048e84c553ba9888c451e84089250877f0c7675a042ba6cc74fa588a0b26fdc4f2d1f119a0fe6ef111be6a2d45b4bbcad85089350877f03dfad7db3f32c6ed8130c43cff604dbe1c29dbff250c684c955f09e495fb34c86089450877f20114281fbe35c188164fc6d4144200fc1d9ec433efc677480bd2cdcb35b64e687089550877f29e42f5218b1ea3fad06a48e2292c0fe3df08a2c4a823a3be4b998955da8a21d880896508781818082800980090990506200361260005262005a78565b877f13bf4039488d94b1b6a67f256296daeb6c7c80fad2726d6e9be11e17c235281682089050877f1847a4e36b3eace13de58fa4662a9f88c9c17a464e6dbd2083c2938c227ee3fa83089150877f0a7a2056c7b79384af9fe3c6826830145f51f6f8ca5d1a344e295ca7663ada2784089250877f181278caa15bdfb5940cff2bc3216ff06a45962d4979dfc0d6c94993bb7de86d85089350877f0a8a6f4fbba2ee09a36d390fbb1485fb789cf3f9f641dae011520c8f10e57a4386089450877f08f6b4c0d7bd5e4c87fbc6874520e3329c067b6841fc833aa37514435e987cea87089550877f2206b2c18f3292e7a9a91039683a55d813dd914b0c7d523210424ff0f2817df7880896508781818082800980090990506200373560005262005a78565b877f0186cef5c04b3a6c32da26405a16cdd359df57be8e93291acbeba3f487329cfc82089050877f075aff67570ea17c7c79c9114c7a10d533c6080b6d15a5bebd1204fdcde772f083089150877f2b06d8389ba9621c3869d2e8b25ac15e2c97389caaf7f97a35700be66c1655a884089250877f04fc6d0a6b67744428161cb5228a94e7c0e95dede804b2b47a18055acd737aeb85089350877f25e4a295b4e7a2dc71394d41ec2a8f4b124e58c234448a028a2c3bc6ad25e69b86089450877f0094c24ab01c6db594fda907b639a7b3a54301439340e889b6ca9cb6cba067b087089550877f2751821a6e3b2206cd6bc3cd5d98cbae8850745ec6cbbea413e7254d2a514549880896508781818082800980090990506200385860005262005a78565b877f145aaecc24e3878db9a8d77149b2419ed5b42df025ecbd1a8e97d8b817904bb982089050877f0d2aa00cc6e5167d845ee1877b7aa059b5e5151c57e4c163da3403f9a95755f283089150877f24233b69861c70c449ebd36e4420ddfc3c242b69ff6e3d4c6090c2bd08a764c284089250877f2c55fe1a75147c9c826f762f836d5645ac4184ba1927dd56a76dc056a989566785089350877f19779b1cb16a9c79654016674978b8b6ee1a78b64579de93ed2d67b9e49f098e86089450877f1807721ba60fbae476ff60120c1f47ec0bce692cfc00102ae50bd9376c5a22a187089550877f1c0208f5aba12750802fbdc3bf12eac9e00ada708f167d4b167bd7d4b03d76f1880896508781818082800980090990506200397b60005262005a78565b877f090b6e28ff541cc38869abe2f5dbfb9fbe888d21021f29d2bddb9127d3c273be82089050877f193d6c7e76ad94eb59a20010a799c7bf96a8dda8c90887d65214c8665ecda01b83089150877f09ddd5bc0b1f8d4c4f1a7a102c1ba12ec7e7540cda285a564ea7c4753af8a8d184089250877f300a1dd5fda15d1a9cfe2a287801817168721da2f970139549e16811f555be1f85089350877f1520908df2eefba075bb41cfe0740e1e5a1ee181ce492016e152706e493cf47086089450877f0b3f215d52e85ec3c682698ebcb6228233ae9518f9450f480689e7cf3013784687089550877f050996a07af6765c56a8ee2f736650deb4972bfcddb194a0efeb1954daa8a4d78808965087818180828009800909905062003a9e60005262005a78565b877f23a59326daf5f94f3b5192c18ed06cc58cd9608e44138686399dc4f1ee807add82089050877f1d220b9add0592866898ce834b1bdc2003976e815c0cf7d3f6b8bf967ad5649683089150877f19b49c4da3d9e3a26d36566738658923477c504e76a38a82b1b1247104f681e184089250877f139decc567b06b495bd6f3cf006c05b7e1f25d5b7ac554445c37dd285beaae7a85089350877f1a5a7d8bca8d4f07d4cd6e9bcd00c009e3099e99af3080debbb21f90f8e5b42586089450877f0621e3811d3dcb9584d0a8be41e431d588c93274c8549e625f98fd15983a809e87089550877f02a41c2d2bcf14664a0130a021daa6efd4a3b0c3aded38635bff97e3785ed6bd8808965087818180828009800909905062003bc160005262005a78565b877f21cfb54ba72fc06794947cc3bda33d815355416e2aae19084d84471eedca399d82089050877f05115093894089a202a4cf8d0aea329d83cbe0ece741160f9975cf01b7c85dc683089150877f2e40541caca7653212827129559ab422a1c06a6f48c974291470c65fc070dfb684089250877f07eeadd730284f5ab60778900b60300d27970001aa63e46ebb7f9cda1157600e85089350877f0cf33e4964d350adf2051f8e2e8448d3324d24d3f4858407f4fd60d3333bd98d86089450877f287c60483e2db313f1a2bda92c1e1c28b65ef0b99df4acfb75709edf6a3bfcb987089550877f289440f4b7fdb8b2b22661d0742e9695139c1a1ecef53c3febde0b5f6d9bb4a58808965087818180828009800909905062003ce460005262005a78565b877f291bda2c37fac962a24555a7abeb36d8e8b9eb25222f97f4817ef2e5b0bc720882089050877f0e105449589412404cda7b82f14d527594ff99d04cea894d6ecc315119f42b7383089150877f0e6097f0ad418ac7123ae7eba6cd4522b7ffa8dc8cf60a1f836be23e41ec25e584089250877f22fdb676724017afa8a8069c62d307aa4ff52c1445ad41b94c3e406e33e0def185089350877f0204d594ad7855ad0f6950742b19e60c2c5338817aab7ee7bf631c3aa92160f186089450877f0b6a643dad3f953877110517f7b336518c8fc11d868bc72e76cd76c3b2f7dc1b87089550877f04189ea6c2bd4b00fa6349adde17027eb7d76353a10bd07d0942639447cb43d38808965087818180828009800909905062003e0760005262005a78565b877f23bc8449d898a7524b2dfde263036cac2e14935134f8c3baf7f1e13ea2deec3c82089050877f0017efa608d9941bc64d39e0b2593b742576dba257fab323d4c99c7a42107a1683089150877f02f061475e9d8888b3877f9308e7758a16f91e3a34a5856f15ad0b9f2f92e2b484089250877f1f257d4d6f3277674a061330d73d6ba135da7cb0cba318686872fe1ef6d52e2585089350877f195340f6c1f7b5f6158884bd237715149cea488edbfd80fc9b9cc61c384853ab86089450877f273e200179c5c45d860b26a20b2c0853c1008f942459d5cdbed633ede031aa1d87089550877f24bd0ecea1e1df97af0f296c0e792d676e2c8e02e808a158bdbe01431c5e4a488808965087818180828009800909905062003f2a60005262005a78565b877f0c6e6f0f7c20811f404599d458af5c6cb41ab671599d6350df38e82104bc683582089050877f1dee1352470235cd8e129b5611fa953706bc08d58f6a3ef3d80370d8d19683a283089150877f1be0cc30343a168fda7c757ac0c7e5e16afddbfb7265878080725a12fa12ad4c84089250877f1a449abf644f68a64c217c6a042a231107ca8d9c619208580eb76bbd9215d98485089350877f080117dde58f228a459f59d90e64babe2daf476a9a2ca018faa3c5fecaac178986089450877f24ab9a167b61855e0f2c60bff098d5eb7d15166fab51f2b62c809de318d6d17687089550877f2b56aca9d595460503363292bccdc80e823201f71b54bda684c93eb0893784f6880896508781818082800980090990506200404d60005262005a78565b877f057361ec23c87b30080ff1cdf3467d57c95a12afbfc48ab5e1e4de0162a41b5a82089050877f1baed177177a25ecbbfaf4f204d9921eade3689ba1378cd9362cc14145089f9583089150877f00ccdb6d5f4913d7656889c312975fdbe0e0309a841849fd808d75f593a7148184089250877f2c52f5e1ef57de5dde528471cc1f0ee7839929df98ee743d9eff96251556191085089350877f0234a4a32f767f2e1ca48dad3a2fdd3ff54b2ca3d53ce13fc9052414ad7f755586089450877f182b4c0c551ab0ce1990b472278f794ba9cc62abcc90a89efdd80776558e343387089550877f001ab2bbdbd043d2d7d1a4eb76db4de71fddf19edf10d7cdb9550e1846e53fd5880896508781818082800980090990506200417060005262005a78565b877f206e6cd1e3154c113a762a628e24940907b41e90e7c2d43aa256ea524997835882089050877f27816cab4bec18577bd335bdaf8298798a261bb175137177d46ba95dd03dc8bb83089150877f1680b632a04be3eb1ed64ef589440b3f9526b2ad82cf0b8839d3e7b0f585bc8c84089250877f196b2cc0e6e07628df8234f58c027c190c75b0342511efea4c3724c4fedd6e7585089350877f29ab0b6065ebbefc684608acc6bf3b5fc693770c38bf91b4be38fe6f7264748686089450877f224ce814d39c382da2d65eccd9deb48056ede18c5efcb8e25515b727e540a85987089550877f195e1cb28f38a9cb57b2c719b504f5fdd1d42559b6a368264fd0fbfefa66559f880896508781818082800980090990506200429360005262005a78565b877f0e9e5eb70f4490ba6dbd1c0ee1d6724ccdd58acdf138785ce98ee3848ffb784082089050877f1995c9c8e520014e4412ec653839d781548cf71f46fbeb51919582226cbd5b2183089150877f0886095cc376c87fa653000283a6eae11008982f27104afee198fc377f26e32484089250877f13761e206b3e89b23de2342bfca860f9b0d9a36d486aa115565f9f52369c124d85089350877f22a8c6cfc0e38a500a47515c519ad6a72506ec0d508de25942c10f51f0dfab8186089450877f18985e9c7ea6f1a16962e4e27cf1aa4aa3086938b13f8ee9465a5ec7bebdee0387089550877f215b523ce3f055c92eb148c00027d1ad406a2abd64081043e0d15492845b31a488089650878181808280098009099050620043b660005262005a78565b877f0102f78c7513b093b885726b7df2e70298801b3e4019cdd42239d76448588c3182089050877f0bce88602fd3a0f0ab8885891ad44045058f9ace11fdabd24e8dfa1b0a4ae72783089150877f0745f760f8d466fc21043e2292e6cbb20b6227517f5200251129c5481f52fa4b84089250877f0406de3807445c6d3cbdf7b174c410a998a1530fcca991535a2a262de4e2ee5685089350877f26779e7346349068dbba66f784f87e243cc27cab59e887f7ed7a0117887d1acd86089450877f25150652a08af8ca574c7c5c77ffd98b17259a1d914a6ea41db75014267949d887089550877f00bb8d13438040f674a79ed42202c5bf6e67de6fc3f6b65ca837ceab795fcc6f88089650878181808280098009099050620044d960005262005a78565b877f0c1ebf40eeaac3d4a192dd50ee25c0067f66eff6229d045d5a801067639ccf2c82089050877f1a39731eb32fdb51dd793754f76103b5cab86947aad12d490d4951932ff2072783089150877f2baad3d41b18ae10c463af1662ecb28c6988524edded36943672a0e857b960f884089250877f2e778da1518b6a4fad2e833e41466fb2fe82f4f8df1b5c218cdd3b7e49af67e185089350877f156dc717930d6490167743911e9bf4d4634ae049b53adab281698645f8b16dc686089450877f117f2ef1712692ab9dbdc51db4968b45f5e0104f9e5281329349d908b23e231c87089550877f0b281b5d9dd2ca1a92e2d83b5087b6a08d6ab08330f47512aa047b2f88ba68cc88089650878181808280098009099050620045fc60005262005a78565b877f1c2803766dd9096567a3366061764f8c916f2a2dd640b6eec0942ccb75d4076782089050877f120174d53ba57d1a141bf40e4c705683668bd55800000aab6f34766b7b6575a283089150877f0c37b25020f8c76ea5536de54c722e47d01795d31b5ed73466e7d8b8ad376d4684089250877f0a508f345cc9a8b0c30ba27651ba1c3ad8398025a4000a5c2500228c44fa91b885089350877f12afa49ff4d8b4c6c372f7e065840783cb9497eeacc847a340f61f1823cb2a8d86089450877f29fc37eb5ec7cd004809516b7aa3c716f4f7f6e7772f443e0730b01dd5071a5587089550877f2048fb9c1fdaced0fdc5159490db2977e57dbcbff7514ad1e52a271bf84dd1a8880896508781818082800980090990506200471f60005262005a78565b877f00a6c4223aabe583e899bbcd0314a4743181f1d5e03dbc11c8a4d02550fab64f82089050877f15f462ab5b21c31557e25d9c22d8dc6a0cca93c8ed68a35655cff745686764d083089150877f27bc1c9af68edf8e3730197124be559f1472e7e3bba0d35e079b2d1b9e4271ef84089250877f1a2ec148f900eeae38c0d3d6efda64e146929c71eb82da3139a3a85968ec6ebc85089350877f04ff41cb553ca616d0616545922f2030b71b2354bcd1c55d7eabcaea8904c22e86089450877f2f2c4e7b18a845fcd6add67009fc237b14a984619260a7b3d38712e03a0849b787089550877f22925c606a1f091c1d5c7122f8e1a8ffea6a140031106826ac53a9c69d84c0ab880896508781818082800980090990506200484260005262005a78565b877f10e2a8c7b12bf70266c257573ca2594d8811633f77822d7c232b329c5b4e727982089050877f1712319595ae464992524bf8e488b783fa45b3548cd3f162d586bce31ec7184c83089150877f2e9616987d3333388ea5a1cb56b4c161f279ff19454a64ade43daed4dcda5c0b84089250877f2c68210d75660df5d9a8392a2805ea1612fc6137cf5b35a68fc1f03acfbfe4ca85089350877f053cf3707283df8730b6e1f637d23c67b0b3533061a35bcb0cb0f9bbe4e8adc286089450877f07577491483d03d7769dacc79607b9897081c0095decdce3d227c059ddeddb6687089550877f05639b2324c0b0af81c5b256ca6b2d46b95eaf855fc26cedbf90411312de4a12880896508781818082800980090990506200496560005262005a78565b877f0ec90944eb8fc36c52f3fd13763714f41cea1ff487ea39d70bd94e9b7f8f16d582089050877f1e96cd3ac345bb2e5bd3e755922f84afaf303d6fb227fc68f703b93665f5ea9683089150877f0408425405c66baa7d49858e6d5871e5b42ffebb0df885a824942da1e2e36d5884089250877f284d77566b42f3913d41ebb0528b899426e0805aadb9957a534b022b081aa97785089350877f0b044e5984887cda337f58c7ca50a78126deb5624f644516239427948d7d06bc86089450877f0486972179ee3496795bded1c2fc9674c0c3f71b58150c9c525063a6f2b340d887089550877f25b7568316c4b2fef9b72543b6033b317a7bfe406623e47cb68e5c79296e6bee8808965087818180828009800909905062004a8860005262005a78565b877f0cec9e74c344198703ceff28a4d11275f6c5c15738aa5a54a19269261ec6a8a882089050877f2bcc34a99345174c97a65e8978194486a9957c9d736f0ca39b98130801d1a11483089150877f2ddb2ebc0ac98f6498c0f2be2d73e86a786940a1e8c558d8dbed8d6f44b0255184089250877f2642b4a208e503e3480718d4d205351f43da183ed284ed7a385ef7cdca80bea885089350877f23fabdb09b481bc764102ae85ccf1e6ff71c7762f8bad04a2de3f7a025cb508786089450877f0ae4ed0ea6adb74b9d327fbcd01dbf37f5f6c467480c8aa5f495124cf70b823e87089550877f09034e1a646d6674bef041afa774e3634faf8adcc7c71bc2ed6e03b0b44920168808965087818180828009800909905062004bab60005262005a78565b877f2817ea20b471a4bf138dec79d84f9f6c0015e0ca147b650683df4b3372b55ef282089050877f2dfb7f81425c2def6bfa4e833e51e912298397de78fd2aa17f6d1dd2f1379ca983089150877f137b5bdb746523c051d680be08daa6b0d54c9ff7099f2bf5ce894c24a8ef1f3784089250877f03900ec7adc8e28af7046833dbad3fa1024e382aebe02bcb535243ddca21aa8585089350877f2b285b6c23b25c52f2079863c759e6a10c33df8f191551ead53ea508511cb55586089450877f1242067be2202d1b2c32b79c464e2d6c977e6fd12d8b35281e84c375864613d887089550877f1e8690f5b0a8729b9536ef2920abe7e6f3eee805237b158d997db63b17525eef8808965087818180828009800909905062004cce60005262005a78565b877f047f5113e1287b5572c82edb369fb0f717a91f261ef9d81764a5b279ad9c13ba82089050877f2d8800f21cd6774d5a6aa58ae2cd32593593d173b687122a4d61c4474390210583089150877f274ba1521d5bc5c580647f10d1a4c4cadeef088685d1976979bad813756f84b084089250877f17895b7c10d6a475310d34a0737efaedddca8f1eee9d8d56e7fe4934c8b5644185089350877f06eed11ae9f70df5ced09b1a6db258978cf5becad2f66d15761bf61e7dc1344086089450877f3036b521c631ce5d3599e37f6a5daf928842cefcbcd2c6bf84e2db5ded748f0987089550877f1f52d6e9ac28976c5a6fbf168c818478645c90d72e367609d7d7805a6367482d8808965087818180828009800909905062004df160005262005a78565b877f2a0e60356875d6ace1055932b3dd9ef39c3dd871091e96a323c1596cedb35e6b82089050877f02089633a6194f3ed38eeec2c8f54d0c7f434938fdebb9c0e1830dbe5311c38f83089150877f178c73d2769765d85383283fdb0d769457cfef0612baa963336bac1240b604c284089250877f2fc20bcaba9e3d96ebcdd710e3b341837d5d0db849e789f28c4be5004afa19a085089350877f151a423bee67fb14d5ad279f425213db7e0f21494982df872354c01f0f4a722c86089450877f25d61619e135690c4e10e4afeb4f5578ad0f8e25c20735366895b31eebcdf47e87089550877f15dd579bbd075429301d7295d3e685d832bf9f36c51277d09f2c3a664b045cd78808965087818180828009800909905062004f1460005262005a78565b877f236fa29b81678c8a109fd361c1ca90adf4423c13cf5b8cc1032b7283bcc959b182089050877f2a80cbac9b884e20368691bf1567cb7320537a977da10e53c5baea3446c01d1d83089150877f11d4cb8957937b3628a3b3f4d27f276cc0c179b0c22b2c13fffbde85fd91237884089250877f1289bf8ec507bf752a07c9b71efc0f800a52fbeb1637c5010fa54eadab40294685089350877f26f842b1a99394297d25799f2f03dc9e4903e77d2ddc03ec2fb155466da6f30386089450877f15944b9954b6182314e878fa2f9e091dcc40eadc48d37d39bdd5f09905c3a36987089550877f0742166dcd8ebd8576a6bfe0f1fed13793928f84442c7465a0012f584426fadf880896508781818082800980090990506200503760005262005a78565b877f08603d5a0e937b5353b56b05768fd50bde792e72fd61c06344cbd735707b68ff82089050877f0caa1711c66e9301b6f25e21a31683d80bf58d86032d03bfd25b9777edb74a7583089150877f2d6506da695d2087dff87b5f636ee676fab00c32ae45c75b3db345f3fe74a31184089250877f0d9244b07af9b6eaeff6f84049cb2e01d75dc4cb68533606e976b8b300758c8485089350877f243abc3c3382faa5dde3f1c3b432042d3f030ef6a1f5401aa37acd15cb1c8c4686089450877f168416e0a6d275d30eda3989242e0723024727d3b0791b06f8e1bfe8efe4019887089550877f1bcdeef03693d1ad0ea80c65688654affe634aa14cb11ae3a491681d9c5f8eeb880896508781818082800980090990506200515a60005262005a78565b877f02f66bfda3d2a1bdedb0ab8bf7eb1c4e551bef58d94fad7f7c231107e565390982089050877f019f6802171ab82a5922f023fdecc097eb8ac1fd0a1ed349afe9a7b94298975a83089150877f195a1c738398feed8c760468a0556c232645a1dd862d87c1f508c949ad52c3ae84089250877f0a36a3a46e6ec16567dfae1f853f360e6f24924810e838cb24ed1b0fce37f1e385089350877f002123c29ea87f7ea7b35c25f9e8dd3e81bbc3974c3c17c607cd840c09f374ae86089450877f02a717499cb6c31f71f0f0352b0f5bfef3005b80e93a520b6e42b3985789e2d387089550877f0fc053584b0a4607a2293e18baa309c52fdc933e9ba90fd327aaa8c8cfc4daa1880896508781818082800980090990506200527d60005262005a78565b877f1310d1942129737b32e87a86f4573032b1b99ae3c6d71bafef7b49479485554182089050877f1bfadae53fc82900f5761c558fee5e1218e6b2a6657e74b540969eeb49e0b8de83089150877f28c08a69e5f3641460ff2c60b7579395650c5b6afb392da142d32de8677556ea84089250877f223222ee42b6ca997f44d643ed6a3f2b040f47fe8cd922163d9d9d8b2622d90985089350877f064dad4752e708ff29bb0842d2c452a71448b43949345690031cb125588876a086089450877f2d5ddc21797043996b22dcabb9a1ba6c82b71e9a1bc5919db8befd35411056a587089550877f26315fcd9b5e1a266ec8e9f6600f5a6e0bcdb22f926d61591e83fa21069c0e0b88089650878181808280098009099050620053a060005262005a78565b877f0759273a4177fcdeab23da38b478faf2d4f22e82f346aa754b0a1331bc8371ee82089050877f09e13300eade70568fa0a840ea9729896ddd84c364d6279d34a0b9d1478fcf2a83089150877f13e97ed3c16fad6cb5b7bb954f278f2434b22f8cc054463a145cbe0240d4f8bc84089250877f05cd3486dca58f4eb221bc2cbedb8aa3027cde5765971bb1f61c272c5aa51ad085089350877f005ce523f6bc21daf1df468b12fd3e8665e1c1697816a9a671a3b2b6149c7de486089450877f2103066cc5df55e67cd7914028145fb71f089d671c83c5b537abea482b2d8cbb87089550877f039f8077bd9b71f91ca0502eaccc1672c539f72329317aaf8173d2edd763692888089650878181808280098009099050620054c360005262005a78565b877f2247bc0cc4373705b89672a2205346e6af3a6422e81b4f4885dc3af7cadcc5c582089050877f27bcc768bd31b9d00687a7e53c3ce53c426762706188790ea20b2e819638df8083089150877f0d91cef51a76f7a62c51c73a2809732d79ac350159814ea536487368cfdfd70884089250877f20a9ecdc649a26388dc68dc02343a0f167bad46d6aa1cd008537f627ba14073085089350877f23134149a0d4567c6dfc911d5cb80c1a1016220d39e0c230325dae2941f528bb86089450877f2a07507e9f030a42c6f29ccf1c9cc4f3e5a5b0dbf05874d5edadc03fe74b947487089550877f1bdf66bb1d57fd788e54ef29f06f35fdb2729b718ce81152cf3aafc64966110b880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200562e60005262005a78565b877f275c33d07f9e7338ddf50783bf158d51be619bf77a12020cf5630b78e7e0d0b982089050877f16411554e55fe604a1ff1b3b5b7afb6a2bfd0f32c4070b55bf1ad234e8b2811683089150877f073e6ac7e6af227557249ca1a5c55222a36c641bc2851a0dfcfb60831f6759a884089250877f10a6fde88c5f621d748543c76a218f95c202bbc3baca06838f31331b0556e12f85089350877f29c5865a26588ca8a88128a072c8434cc97a1bcec23e136f038d29dcf96b0eb686089450877f233e0ef6ad132ed211b1911cdd569576fea8c17ca64e4d5dd516fcca07212c1a87089550877f096f9b92b9cf2c7d664408a29860365f5b6adc238d878a476bded3e4d2e0b840880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200579960005262005a78565b877f2fc788fe8aad4c28b943bb57cb90edf6d7b1f1e835de1fbf3192e395db78555482089050877f1bac0ed609233148503795fc5e114076ef7c9d722bc648dd0338d9689f6e023a83089150877f001c35268aa030d6cd148e106e3fc23094e561573d8c72a69fc383643e2adc8284089250877f2bb1f8fe5d998d0b8b92837ffb27bfe7a39ce39ff94fc167ddcc95a7202e34b285089350877f1a98576450a43e5e705b9af68cd0c145422da23945630b10b8e821dd61f9a2b286089450877f2714d37ee506efbc2ba9941043fb23f16af966f123d653f38388bcbdd50e603787089550877f175d0480ba14abf0bcb8075a03f4a2a01ff7ed75413917b53e50ea00cc2a4ad0880896508781818082800980090990508782818082800980090991508783818082800980090992508784818082800980090993508785818082800980090994508786818082800980090995508787818082800980090996506200590460005262005a78565b877f203de45a037b75ef63761750dce08da2be7709701ec8158c17fc026fd084d54182089050877f265aabfc78b70ca985c329080d6329a12560f76b01cc3d431a7283022193abf883089150877f135468dfbeb70e8c2edaffac8658a6c22b2ad1520ac0819c127af2ea5f3a87a884089250877f216a41e24329deda65a8a82001c84ce8286c61758447ff1bfa9d9293b6711fdd85089350877f2887ed49797bd6652bed8bb99ae345ad70d1a27cdb21b9460bb6fd0d4fe482e686089450877f03e2bf82690c804bb6ee3c79dabd1892ea53a9811e2424a19fae446b8ae49cad87089550877f0e6dce1bbe6e9e465cbe14dcc615611867414676dd8a8ce9946649b1c4e811168808965087818180828009800909905087828180828009800909915087838180828009800909925087848180828009800909935087858180828009800909945087868180828009800909955087878180828009800909965062005a6f60005262005a78565b60005260206000f35b8760205182098860405184098991088860605185098991088860805186098991088860a05187098991088860c05188098991088860e051890989910888610100518309896101205185098a9108896101405186098a9108896101605187098a9108896101805188098a9108896101a05189098a9108896101c0518a098a9108896101e05184098a6102005186098b91088a6102205187098b91088a6102405188098b91088a6102605189098b91088a610280518a098b91088a6102a0518b098b91088a6102c05185098b6102e05187098c91088b6103005188098c91088b6103205189098c91088b610340518a098c91088b610360518b098c91088b610380518c098c91088b6103a05186098c6103c05188098d91088c6103e05189098d91088c610400518a098d91088c610420518b098d91088c610440518c098d91088c610460518d098d91088c6104805187098d6104a05189098e91088d6104c0518a098e91088d6104e0518b098e91088d610500518c098e91088d610520518d098e91088d610540518e098e91088d6105605188098e610580518a098f91088e6105a0518b098f91088e6105c0518c098f91088e6105e0518d098f91088e610600518e098f91088e610620518f098f91089c509a509850965094509250905060005156\"\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/Ramp.json",
    "content": "{\n  \"address\": \"0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct Ramp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct Ramp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb5739df80582e75e8a0262b0ab1026867e832095ca22aea7467e52604e878ee7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6\",\n    \"transactionIndex\": 39,\n    \"gasUsed\": \"3587618\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000020000000000100000000000000000000000000000000000000800000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x25085b2087124c3a98560b73e1cdf96f907ee1f070144ff7a0524398fa621c48\",\n    \"transactionHash\": \"0xb5739df80582e75e8a0262b0ab1026867e832095ca22aea7467e52604e878ee7\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 39,\n        \"blockNumber\": 5081889,\n        \"transactionHash\": \"0xb5739df80582e75e8a0262b0ab1026867e832095ca22aea7467e52604e878ee7\",\n        \"address\": \"0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 81,\n        \"blockHash\": \"0x25085b2087124c3a98560b73e1cdf96f907ee1f070144ff7a0524398fa621c48\"\n      },\n      {\n        \"transactionIndex\": 39,\n        \"blockNumber\": 5081889,\n        \"transactionHash\": \"0xb5739df80582e75e8a0262b0ab1026867e832095ca22aea7467e52604e878ee7\",\n        \"address\": \"0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 82,\n        \"blockHash\": \"0x25085b2087124c3a98560b73e1cdf96f907ee1f070144ff7a0524398fa621c48\"\n      }\n    ],\n    \"blockNumber\": 5081889,\n    \"cumulativeGasUsed\": \"8920205\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n    \"0xd8850EC08960716725B51941348e8b3F1DC47C38\",\n    \"20000000\",\n    \"999000000\",\n    \"180\",\n    \"180\",\n    \"1000000000000000\",\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct Ramp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct Ramp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct Ramp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v1/Ramp.sol\\\":\\\"Ramp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55cb1c9701d9b03ff4e445f03993659c7d3b6922ad280d3b2a88edfad8af9fed\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c06040523480156200001157600080fd5b5060405162003fa138038062003fa18339810160408190526200003491620001e4565b6200003f336200009d565b6001600160a01b0388811660805287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b0319169183169190911790556200008e89620000ed565b50505050505050505062000280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f762000170565b6001600160a01b038116620001625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200016d816200009d565b50565b6000546001600160a01b03163314620001cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000159565b565b6001600160a01b03811681146200016d57600080fd5b60008060008060008060008060006101208a8c0312156200020457600080fd5b89516200021181620001ce565b60208b01519099506200022481620001ce565b60408b01519098506200023781620001ce565b8097505060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a01516200026f81620001ce565b809150509295985092959850929598565b60805160a051613cd8620002c9600039600081816105e701526110cb015260008181610354015281816114110152818161192701528181612e260152612ed50152613cd86000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea264697066735822122041115da0b00f46aa7abbf2063951503a318bd7fa914ad1f39b9a9b1e6bd3d61764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80638da5cb5b11610146578063d55f960d116100c3578063ecb3dc8811610087578063ecb3dc8814610671578063ecd618f01461067a578063ed1692b81461069a578063eea1d197146106ad578063f2fde38b146106c0578063fbf15b1f146106d357600080fd5b8063d55f960d1461061c578063d9478d201461062f578063da26c18914610642578063e215ad5914610655578063e279d9641461066857600080fd5b8063a1a954b71161010a578063a1a954b71461054d578063b02c43d014610556578063b3fa4c01146105cf578063c62b919e146105e2578063ce523ca31461060957600080fd5b80638da5cb5b1461047a5780639021578a1461048b5780639087beff146105075780639b357b5a1461051a5780639f9fb9681461052d57600080fd5b80634595bba0116101df5780635dd76515116101a35780635dd7651514610410578063645006ca14610423578063711347621461042c578063715018a61461043f57806371a28f69146104475780637b510fe81461045a57600080fd5b80634595bba0146103a1578063485cc955146103c15780634877b7b6146103d4578063495223e7146103e75780635081d952146103f057600080fd5b80632a80cda3116102265780632a80cda314610316578063317dcc96146103295780633adba28a1461033c5780633e413bee1461034f578063429873491461038e57600080fd5b80630f1ef98c14610263578063123a11e4146102af578063133de6cb146102e5578063148172da146102fa578063238c84941461030d575b600080fd5b61029c6102713660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290206001015490565b6040519081526020015b60405180910390f35b61029c6102bd3660046132b1565b6001600160a01b03166000908152600460209081526040808320548352600390915290205490565b6102f86102f33660046132b1565b61072a565b005b6102f86103083660046132d5565b610787565b61029c600b5481565b6102f86103243660046132d5565b6108b9565b6102f86103373660046132d5565b610946565b6102f861034a3660046132ee565b610983565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a6565b6102f861039c3660046132d5565b610ed8565b6103b46103af3660046132b1565b610f79565b6040516102a69190613327565b6102f86103cf36600461336b565b610ff2565b6102f86103e2366004613414565b611085565b61029c60095481565b6104036103fe3660046132b1565b6114cd565b6040516102a69190613563565b6102f861041e3660046132d5565b61170a565b61029c60075481565b6102f861043a3660046135e4565b6117a9565b6102f86119a1565b6104036104553660046135e4565b6119b5565b61046d6104683660046132b1565b611b8a565b6040516102a6919061368a565b6000546001600160a01b0316610376565b6104d46104993660046132d5565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102a6565b6102f86105153660046132d5565b611c24565b6102f86105283660046132d5565b611cbb565b61054061053b3660046132d5565b611dc2565b6040516102a691906136e2565b61029c600a5481565b61059d6105643660046132d5565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102a6565b6102f86105dd3660046132b1565b611eae565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b6102f8610617366004613794565b611f66565b6102f861062a3660046132d5565b612025565b600c54610376906001600160a01b031681565b6102f861065036600461384c565b612176565b600154610376906001600160a01b031681565b61029c60085481565b61029c600d5481565b61068d6106883660046138c2565b612203565b6040516102a69190613937565b6102f86106a83660046132b1565b61233b565b600254610376906001600160a01b031681565b6102f86106ce3660046132b1565b612391565b61071a6106e13660046139bb565b6001600160a01b038216600090815260046020908152604080832054835260038083528184208585520190915290205460ff1692915050565b60405190151581526020016102a6565b61073261240a565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b336000908152600460205260409020546107bc5760405162461bcd60e51b81526004016107b3906139e7565b60405180910390fd5b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16156108355760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c697374000000000000000060448201526064016107b3565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906108ad9083908590918252602082015260400190565b60405180910390a15050565b6108c161240a565b806000036109115760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064016107b3565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161077c565b61094e61240a565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161077c565b336000908152600460205260409020546109af5760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460208181526040808420548785526005835281852080546001600160a01b031686529383528185205480865260038085528387208388520190935293205460ff1615610a455760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c69737460448201526064016107b3565b6009546000848152600360205260409020600101544291610a6591613a34565b1115610abf5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b60648201526084016107b3565b60008381526003602052604090205415610b1b5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e67000000000000000060448201526064016107b3565b828103610b6a5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f72000060448201526064016107b3565b81546001600160a01b0316610bba5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016107b3565b60008511610c195760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016107b3565b600854851115610c885760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b60648201526084016107b3565b6001600160a01b038416610cde5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016107b3565b6000610cea8488612464565b90508583600501541015610d9f57600080610d04896124cf565b9150915087818660050154610d199190613a34565b1015610d5e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b60448201526064016107b3565b610d688583612677565b80856005016000828254610d7c9190613a34565b9250508190555080856006016000828254610d979190613a47565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610e46908490613a47565b9250508190555085836006016000828254610e619190613a34565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610ee061240a565b80600003610f445760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b60648201526084016107b3565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161077c565b6001600160a01b03811660009081526004602090815260408083205483526003825291829020600201805483518184028101840190945280845260609392830182828015610fe657602002820191906000526020600020905b815481526020019060010190808311610fd2575b50505050509050919050565b610ffa61240a565b600254600160a01b900460ff161561104a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016107b3565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b336000908152600460205260409020546110b15760405162461bcd60e51b81526004016107b3906139e7565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e890611100908790600401613a5a565b602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190613a68565b3360009081526004602052604090205490915081146111a25760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e657260448201526064016107b3565b336000908152600460205260409020600101546005116112045760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e742072656163686564000060448201526064016107b3565b6007548310156112755760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b60648201526084016107b3565b600082116112d35760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b60648201526084016107b3565b6000826112e8670de0b6b3a764000086613a81565b6112f29190613aae565b600d8054919250600091908261130783613ac2565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113a99183019060036130ff565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516113ed91600884019160209091019061313d565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190613adb565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561152f57602002820191906000526020600020905b81548152602001906001019080831161151b575b50505050509050805167ffffffffffffffff811115611550576115506133a4565b60405190808252806020026020018201604052801561158957816020015b611576613177565b81526020019060019003908161156e5790505b50915060005b81518110156117035760008282815181106115ac576115ac613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b8154815260200190600101908083116115fc5750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561168f57602002820191906000526020600020905b81548152602001906001019080831161167b575b505050505081525050905060006116a5836124cf565b91505060405180606001604052808481526020018381526020018284606001516116cf9190613a34565b8152508685815181106116e4576116e4613afd565b6020026020010181905250505050806116fc90613ac2565b905061158f565b5050919050565b61171261240a565b66b1a2bc2ec500008111156117745760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b60648201526084016107b3565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161077c565b6000805b825181101561190a5760008382815181106117ca576117ca613afd565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146118425760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f720000000060448201526064016107b3565b60008061184e846124cf565b9150915061185c8383612677565b80836005015461186c9190613a34565b6118769087613a34565b95508083600601600082825461188c9190613a47565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c64312906118d3908590613a34565b60405190815260200160405180910390a3600060058401556118f584846126d9565b505050508061190390613ac2565b90506117ad565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613adb565b505050565b6119a961240a565b6119b360006127cc565b565b6060815167ffffffffffffffff8111156119d1576119d16133a4565b604051908082528060200260200182016040528015611a0a57816020015b6119f7613177565b8152602001906001900390816119ef5790505b50905060005b8251811015611b84576000838281518110611a2d57611a2d613afd565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611a7d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611b1057602002820191906000526020600020905b815481526020019060010190808311611afc575b50505050508152505090506000611b26836124cf565b9150506040518060600160405280848152602001838152602001828460600151611b509190613a34565b815250858581518110611b6557611b65613afd565b602002602001018190525050505080611b7d90613ac2565b9050611a10565b50919050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260046020908152604091829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015611c1457602002820191906000526020600020905b815481526020019060010190808311611c00575b5050505050815250509050919050565b611c2c61240a565b80600003611c865760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107b3565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161077c565b33600090815260046020526040902054611ce75760405162461bcd60e51b81526004016107b3906139e7565b336000908152600460209081526040808320548084526003808452828520868652019092529091205460ff16611d565760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b60448201526064016107b3565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611d8c906002018361281c565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f91016108ad565b611dca61319e565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611e0d57505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611c145760200282019190600052602060002090815481526020019060010190808311611c00575050505050815250509050919050565b611eb661240a565b6001600160a01b038116611f185760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016107b3565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161077c565b3360009081526004602052604090205415611fd35760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b60648201526084016107b3565b6000611fe185858585612945565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036120c25760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b80516001600160a01b0316331461211b5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d7065720000000060448201526064016107b3565b604080820151600090815260056020522061213681846129e3565b816060015181600501600082825461214e9190613a34565b9091555050606082015160068201805460009061216c908490613a47565b9091555050505050565b600080600061218787878787612abc565b92509250925061219782826129e3565b82606001518260060160008282546121af9190613a47565b909155505082516001600160a01b03166000908152600460209081526040808320548352600390915290819020426001909101558301516121f090836126d9565b6121fa8184612dc9565b50505050505050565b606060008267ffffffffffffffff811115612220576122206133a4565b60405190808252806020026020018201604052801561225957816020015b6122466131ea565b81526020019060019003908161223e5790505b50905060005b838110156123315760006006600087878581811061227f5761227f613afd565b602090810292909201358352508181019290925260409081016000908120825160a08101845281546001600160a01b03908116825260018301548116828701526002830154828601526003830154606083015260049283015460808301528451808601865282815282519091168452918552929091205492810192909252845190925084908490811061231457612314613afd565b6020026020010181905250508061232a90613ac2565b905061225f565b5090505b92915050565b61234361240a565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c419060200161077c565b61239961240a565b6001600160a01b0381166123fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107b3565b612407816127cc565b50565b6000546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b3565b6040805160208101849052908101829052426060820152600090819060800160408051601f19818403018152919052805160209091012090506124c77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613b13565b949350505050565b6000818152600560209081526040808320600801805482518185028101850190935280835260609493849392919083018282801561252c57602002820191906000526020600020905b815481526020019060010190808311612518575b50505050509050805167ffffffffffffffff81111561254d5761254d6133a4565b604051908082528060200260200182016040528015612576578160200160208202803683370190505b50925060005b81518110156126705760006006600084848151811061259d5761259d613afd565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a54919250429161261091613a34565b101561265f5782828151811061262857612628613afd565b602002602001015185838151811061264257612642613afd565b6020908102919091010152606081015161265c9085613a34565b93505b5061266981613ac2565b905061257c565b5050915091565b60005b815181101561199c576000801b82828151811061269957612699613afd565b6020026020010151146126c9576126c9838383815181106126bc576126bc613afd565b60200260200101516129e3565b6126d281613ac2565b905061267a565b6000816005015482600601546126ef9190613a34565b90508060000361199c5781546001600160a01b0316600090815260046020526040902061271f9060010184612fa7565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b03191681556001810182905560028101829055600381018290559060048201600090556005820160009055600682016000905560078201600090556008820160006127c5919061320a565b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806128788480548060200260200160405190810160405280929190818152602001828054801561286d57602002820191906000526020600020905b815481526020019060010190808311612859575b50505050508461304c565b91509150806128c15760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016107b3565b83546000906128d290600190613a47565b9050808314612917578481815481106128ed576128ed613afd565b906000526020600020015485848154811061290a5761290a613afd565b6000918252602090912001555b8480548061292757612927613b27565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf29161299891600401613b8e565b602060405180830381865afa1580156129b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d99190613a68565b9695505050505050565b6000818152600660208181526040808420815160a08101835281546001600160a01b039081168083526001840180549092168387015260028401805484870152600380860180546060870152600480880180546080890152948c528952878b20548b529088529589208990558989529690955282546001600160a01b031990811690935580549092169091559284905583905591909155612a87600884018361281c565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b612ac4613228565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612b209190600401613bfd565b60a0604051808303816000875af1158015612b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b639190613c62565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a509398509196509450909216612c175760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b60448201526064016107b3565b8582608001511115612c765760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b60648201526084016107b3565b80546001600160a01b03166000908152600460205260409020548514612cde5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d61746368000000000060448201526064016107b3565b81516001600160a01b03166000908152600460205260409020548414612d465760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d6174636800000000000060448201526064016107b3565b8060070154670de0b6b3a76400008360600151612d639190613a81565b612d6d9190613aae565b871015612db55760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b60448201526064016107b3565b909d909c50909a5098505050505050505050565b6000600b54600014612e9557670de0b6b3a7640000600b548360600151612df09190613a81565b612dfa9190613aae565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613adb565b505b6000818360600151612ea79190613a47565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613adb565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b60008061300384805480602002602001604051908101604052809291908181526020018280548015612ff857602002820191906000526020600020905b815481526020019060010190808311612fe4575b5050505050846130af565b91509150806128c15760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b60448201526064016107b3565b81516000908190815b8181101561309c578486828151811061307057613070613afd565b60200260200101510361308a579250600191506130a89050565b8061309481613ac2565b915050613055565b50600019600092509250505b9250929050565b81516000908190815b8181101561309c57848682815181106130d3576130d3613afd565b6020026020010151036130ed579250600191506130a89050565b806130f781613ac2565b9150506130b8565b826003810192821561312d579160200282015b8281111561312d578251825591602001919060010190613112565b50613139929150613269565b5090565b82805482825590600052602060002090810192821561312d579160200282018281111561312d578251825591602001919060010190613112565b60405180606001604052806000815260200161319161319e565b8152602001600081525090565b6040518060e0016040528060006001600160a01b031681526020016131c161327e565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b60405180604001604052806131fd613228565b8152600060209091015290565b50805460008255906000526020600020908101906124079190613269565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b80821115613139576000815560010161326a565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461240757600080fd5b6000602082840312156132c357600080fd5b81356132ce8161329c565b9392505050565b6000602082840312156132e757600080fd5b5035919050565b60008060006060848603121561330357600080fd5b8335925060208401359150604084013561331c8161329c565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561335f57835183529284019291840191600101613343565b50909695505050505050565b6000806040838503121561337e57600080fd5b82356133898161329c565b915060208301356133998161329c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156133dd576133dd6133a4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561340c5761340c6133a4565b604052919050565b600080600060a0848603121561342957600080fd5b84601f85011261343857600080fd5b6040516060810181811067ffffffffffffffff8211171561345b5761345b6133a4565b60405280606086018781111561347057600080fd5b865b8181101561348a578035835260209283019201613472565b5091979135965050608094909401359392505050565b8060005b600381101561293f5781518452602093840193909101906001016134a4565b600061012080840160018060a01b0384511685526020808501516134e9828801826134a0565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156135575783518552938201939282019260019190910190613537565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156135d657603f19898403018552815160608151855288820151818a8701526135b8828701826134c3565b9289015195890195909552509487019492509086019060010161358a565b509098975050505050505050565b600060208083850312156135f757600080fd5b823567ffffffffffffffff8082111561360f57600080fd5b818501915085601f83011261362357600080fd5b813581811115613635576136356133a4565b8060051b91506136468483016133e3565b818152918301840191848101908884111561366057600080fd5b938501935b8385101561367e57843582529385019390850190613665565b98975050505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b808310156136d757835182529284019260019290920191908401906136b7565b509695505050505050565b6020815260006132ce60208301846134c3565b600082601f83011261370657600080fd5b61370e6133ba565b80604084018581111561372057600080fd5b845b8181101561373a578035845260209384019301613722565b509095945050505050565b600082601f83011261375657600080fd5b61375e6133ba565b80608084018581111561377057600080fd5b845b8181101561373a5761378487826136f5565b8452602090930192604001613772565b6000806000806101a08086880312156137ac57600080fd5b6137b687876136f5565b94506137c58760408801613745565b93506137d48760c088016136f5565b92508661011f8701126137e657600080fd5b60405160a0810181811067ffffffffffffffff82111715613809576138096133a4565b60405290860190808883111561381e57600080fd5b61010088015b8381101561383c578035825260209182019101613824565b5050809250505092959194509250565b60008060008061028080868803121561386457600080fd5b61386e87876136f5565b945061387d8760408801613745565b935061388c8760c088016136f5565b92508661011f87011261389e57600080fd5b604051610180810181811067ffffffffffffffff82111715613809576138096133a4565b600080602083850312156138d557600080fd5b823567ffffffffffffffff808211156138ed57600080fd5b818501915085601f83011261390157600080fd5b81358181111561391057600080fd5b8660208260051b850101111561392557600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b828110156139ae578151805180516001600160a01b0390811687528882015116888701528681015187870152606080820151908701526080908101519086015286015160a085015260c09093019290850190600101613954565b5091979650505050505050565b600080604083850312156139ce57600080fd5b82356139d98161329c565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561233557612335613a1e565b8181038181111561233557612335613a1e565b6060810161233582846134a0565b600060208284031215613a7a57600080fd5b5051919050565b808202811582820484141761233557612335613a1e565b634e487b7160e01b600052601260045260246000fd5b600082613abd57613abd613a98565b500490565b600060018201613ad457613ad4613a1e565b5060010190565b600060208284031215613aed57600080fd5b815180151581146132ce57600080fd5b634e487b7160e01b600052603260045260246000fd5b600082613b2257613b22613a98565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b600281101561293f578151845260209384019390910190600101613b41565b8060005b600281101561293f57613b78848351613b3d565b6040939093019260209190910190600101613b64565b60006101a082019050613ba2828451613b3d565b602080840151613bb56040850182613b60565b506040840151613bc860c0850182613b3d565b506060840151610100840160005b6005811015613bf357825182529183019190830190600101613bd6565b5050505092915050565b600061028082019050613c11828451613b3d565b602080840151613c246040850182613b60565b506040840151613c3760c0850182613b3d565b506060840151610100840160005b600c811015613bf357825182529183019190830190600101613c45565b600080600080600060a08688031215613c7a57600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea264697066735822122041115da0b00f46aa7abbf2063951503a318bd7fa914ad1f39b9a9b1e6bd3d61764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 7276,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessor)9560\"\n      },\n      {\n        \"astId\": 7279,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)9598\"\n      },\n      {\n        \"astId\": 7281,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 7286,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)7237_storage)\"\n      },\n      {\n        \"astId\": 7291,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)7178_storage)\"\n      },\n      {\n        \"astId\": 7296,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)7196_storage)\"\n      },\n      {\n        \"astId\": 7301,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)7215_storage)\"\n      },\n      {\n        \"astId\": 7303,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 7305,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 7307,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 7309,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 7311,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 7313,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 7315,\n        \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessor)9560\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)9598\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)7178_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct Ramp.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)7178_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)7237_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)7237_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)7215_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct Ramp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)7215_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)7196_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct Ramp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)7196_storage\"\n      },\n      \"t_struct(AccountInfo)7178_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 7174,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 7177,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)7229_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 7224,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 7228,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)7196_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 7180,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 7184,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 7186,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 7188,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 7190,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 7192,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 7195,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)7237_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 7231,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 7233,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 7236,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)7229_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)7215_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct Ramp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 7206,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 7208,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 7210,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 7212,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 7214,\n            \"contract\": \"contracts/ramps/venmo-v1/Ramp.sol:Ramp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/RevolutAccountRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0x57068ef4f64734Ef4f84705E38A00176E53f0000\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_notaryKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_endpoint\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_host\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"VerifierSigningKeySet\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"endpoint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"host\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"notaryKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRampId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setVerifierSigningKey\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"verifierSigningKey\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"host\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"profileId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"userAddress\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n          \"name\": \"_publicValues\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_proof\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x20049ba1ddf982096d64da07e8933eb76805363aa250ee16d87ce8bf1a2aae43\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x57068ef4f64734Ef4f84705E38A00176E53f0000\",\n    \"transactionIndex\": 34,\n    \"gasUsed\": \"1473085\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000000000800008000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x01af4162d2776ec2ce067bb8291865615f33bce54e7def2a6af808014cb533a5\",\n    \"transactionHash\": \"0x20049ba1ddf982096d64da07e8933eb76805363aa250ee16d87ce8bf1a2aae43\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 34,\n        \"blockNumber\": 5864684,\n        \"transactionHash\": \"0x20049ba1ddf982096d64da07e8933eb76805363aa250ee16d87ce8bf1a2aae43\",\n        \"address\": \"0x57068ef4f64734Ef4f84705E38A00176E53f0000\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 90,\n        \"blockHash\": \"0x01af4162d2776ec2ce067bb8291865615f33bce54e7def2a6af808014cb533a5\"\n      }\n    ],\n    \"blockNumber\": 5864684,\n    \"cumulativeGasUsed\": \"4707697\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4b6db2939E09A642afb90cEd37126213aBbA0f4F\",\n    \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n    \"0xFA15BE4A0FFF051EC52E2738D0D62F7E8C0E951705885ED7290A6DAFF1ED7AEE\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"0\",\n    \"GET https://app.revolut.com/api/retail/user/current\",\n    \"app.revolut.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"3d00f158650f73562ebab290bf8faab9\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_host\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"VerifierSigningKeySet\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"endpoint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"host\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"notaryKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRampId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setVerifierSigningKey\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"verifierSigningKey\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"_publicValues\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated TLS calls\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\\\":\\\"RevolutAccountRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/TLSBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TLSBaseProcessor is Ownable {\\\\n\\\\n    using SignatureChecker for address;\\\\n    using ECDSA for bytes32;\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    string public endpoint;\\\\n    string public host;\\\\n\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        endpoint = _endpoint;\\\\n        host = _host;\\\\n\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateTLSEndpoint(\\\\n        string memory _expectedEndpoint,\\\\n        string memory _passedEndpoint\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\\\n            \\\\\\\"Endpoint does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateTLSHost(\\\\n        string memory _expectedHost,\\\\n        string memory _passedHost\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\\\n            \\\\\\\"Host does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n\\\\n    function _isValidSignature(\\\\n        bytes memory _message,\\\\n        bytes memory _signature,\\\\n        address _signer\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\\\n\\\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x366ab1cc4ebfdb4ba68fdb43b902676e67e7760ae1987e4252e5839e8370a6c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRevolutAccountRegistrationProcessor } from \\\\\\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TLSBaseProcessor } from \\\\\\\"../../processors/TLSBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\\\n\\\\n    using ECDSA for bytes32;\\\\n    using SignatureChecker for address;\\\\n    using StringConversionUtils for string;\\\\n    \\\\n    /* ============ Events ============ */\\\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\\\n    \\\\n    /* ============ Public Variables ============ */\\\\n    address public verifierSigningKey;\\\\n    bytes32 public notaryKeyHash;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        address _verifierSigningKey,\\\\n        bytes32 _notaryKeyHash,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        TLSBaseProcessor(\\\\n            _ramp,\\\\n            _nullifierRegistry,\\\\n            _timestampBuffer,\\\\n            _endpoint,\\\\n            _host\\\\n        )\\\\n    {\\\\n        verifierSigningKey = _verifierSigningKey;\\\\n        notaryKeyHash = _notaryKeyHash;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 onRampId)\\\\n    {\\\\n        _validateProof(_proof.public_values, _proof.proof);\\\\n\\\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\\\n        _validateTLSHost(host, _proof.public_values.host);\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\\\n\\\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\\\n    }\\\\n\\\\n    /* ============ External Admin Functions ============ */\\\\n\\\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\\\n        verifierSigningKey = _verifierSigningKey;\\\\n\\\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function verifyProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\\\n        bytes memory _proof\\\\n    )\\\\n        public\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes memory encodedMessage = abi.encode(\\\\n            _publicValues.endpoint,\\\\n            _publicValues.host,\\\\n            _publicValues.profileId,\\\\n            _publicValues.userAddress,\\\\n            _publicValues.notaryKeyHash\\\\n        );\\\\n\\\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\\\\\"Invalid notary key hash\\\\\\\");\\\\n\\\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n    {   \\\\n        require(\\\\n            verifyProof(_publicValues, _proof),\\\\n            \\\\\\\"Invalid proof\\\\\\\"\\\\n        );\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x2e0d697451ba4cc026f7299f269f90bbba6f4efdda1be1f9a9575ba4af1b5cc2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistrationProcessor {\\\\n\\\\n    struct RegistrationData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string profileId;\\\\n        address userAddress;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct RegistrationProof {\\\\n        RegistrationData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb3e358861c8fb5d7c81c48e3eac4e0f4ce3c03ddfe4136aada9759b61e5e465a\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001a2c38038062001a2c8339810160408190526200003491620001e8565b86848484846200004433620000ba565b6001600160a01b03851660805260016200005f838262000335565b5060026200006e828262000335565b5050600380546001600160a01b039485166001600160a01b0319918216179091556004929092555060058054999092169816979097179096555050506006919091555062000401915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200012057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014b57600080fd5b81516001600160401b038082111562000168576200016862000123565b604051601f8301601f19908116603f0116810190828211818310171562000193576200019362000123565b81604052838152602092508683858801011115620001b057600080fd5b600091505b83821015620001d45785820183015181830184015290820190620001b5565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200020457600080fd5b875162000211816200010a565b602089015190975062000224816200010a565b604089015160608a015191975095506200023e816200010a565b608089015160a08a015191955093506001600160401b03808211156200026357600080fd5b620002718b838c0162000139565b935060c08a01519150808211156200028857600080fd5b50620002978a828b0162000139565b91505092959891949750929550565b600181811c90821680620002bb57607f821691505b602082108103620002dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033057600081815260208120601f850160051c810160208610156200030b5750805b601f850160051c820191505b818110156200032c5782815560010162000317565b5050505b505050565b81516001600160401b0381111562000351576200035162000123565b6200036981620003628454620002a6565b84620002e2565b602080601f831160018114620003a15760008415620003885750858301515b600019600386901b1c1916600185901b1785556200032c565b600085815260208120601f198616915b82811015620003d257888601518255948401946001909101908401620003b1565b5085821015620003f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611608620004246000396000818161012401526103f901526116086000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063b870676c1161008c578063dec965d311610066578063dec965d3146101e9578063f193eda6146101fc578063f2fde38b14610205578063f437bc591461021857600080fd5b8063b870676c1461019c578063beb15c21146101af578063dbac5821146101d257600080fd5b80635e280f11116100c85780635e280f111461015b578063715018a6146101705780638da5cb5b14610178578063b2a3fda41461018957600080fd5b80630fa4ed4d146100ef57806315d276e11461011f5780634e06a32b14610146575b600080fd5b600554610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101027f000000000000000000000000000000000000000000000000000000000000000081565b610159610154366004610fca565b610220565b005b61016361027c565b6040516101169190611035565b61015961030a565b6000546001600160a01b0316610102565b610159610197366004611048565b61031e565b600354610102906001600160a01b031681565b6101c26101bd3660046111e5565b61032b565b6040519015158152602001610116565b6101db60045481565b604051908152602001610116565b6101db6101f736600461125d565b6103ec565b6101db60065481565b610159610213366004610fca565b610744565b6101636107bd565b6102286107ca565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fb8603ceabf8ee4633f1fd8c0ae9e0e64f2fc2fea5cb79a96c18efd007aab6f969060200160405180910390a150565b6001805461028990611298565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611298565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050505081565b6103126107ca565b61031c6000610824565b565b6103266107ca565b600455565b6000808360000151846020015185604001518660600151876080015160405160200161035b9594939291906112d2565b6040516020818303038152906040529050600654846080015160001b146103c95760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e6f74617279206b6579206861736800000000000000000060448201526064015b60405180910390fd5b6005546103e290829085906001600160a01b0316610874565b9150505b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104665760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064016103c0565b6104c36104738380611329565b61047c90611349565b6104896020850185611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108c892505050565b6105a3600180546104d390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff90611298565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b5061055f93508792508291506113299050565b6105699080611355565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091292505050565b610687600280546105b390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546105df90611298565b801561062c5780601f106106015761010080835404028352916020019161062c565b820191906000526020600020905b81548152906001019060200180831161060f57829003601f168201915b5061063f93508792508291506113299050565b61064d906020810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ad92505050565b6106ea6106948380611329565b6106a5906080810190606001610fca565b6106af8480611329565b6106bd906040810190611355565b6040516020016106cf9392919061139c565b60405160208183030381529060405280519060200120610a48565b6103e660006106f98480611329565b610707906040810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610b639050565b61074c6107ca565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c0565b6107ba81610824565b50565b6002805461028990611298565b6000546001600160a01b0316331461031c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c81206108bf6001600160a01b0384168286610b7b565b95945050505050565b6108d2828261032b565b61090e5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016103c0565b5050565b806040516020016109239190611035565b604051602081830303815290604052805190602001208260405160200161094a9190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d6174636820657870656374656460448201526064016103c0565b806040516020016109be9190611035565b60405160208183030381529060405280519060200120826040516020016109e59190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d617463682065787065637465640000000060448201526064016103c0565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113dc565b15610b025760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016103c0565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610b4857600080fd5b505af1158015610b5c573d6000803e3d6000fd5b5050505050565b6000610b7483601760f91b84610bdc565b9392505050565b6000806000610b8a8585610db9565b90925090506000816004811115610ba357610ba36113fe565b148015610bc15750856001600160a01b0316826001600160a01b0316145b80610bd25750610bd2868686610dfe565b9695505050505050565b600083818080805b8451811015610d3257603060f81b858281518110610c0457610c04611414565b01602001516001600160f81b03191610801590610c455750603960f81b858281518110610c3357610c33611414565b01602001516001600160f81b03191611155b15610c88576030858281518110610c5e57610c5e611414565b0160200151610c70919060f81c611440565b610c7b85600a611453565b610c85919061146a565b93505b8115610c9c5782610c988161147d565b9350505b876001600160f81b031916858281518110610cb957610cb9611414565b01602001516001600160f81b03191603610d20578115610d1b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c730000000060448201526064016103c0565b600191505b80610d2a8161147d565b915050610be4565b5085821115610d8e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b60648201526084016103c0565b610d988287611440565b610da390600a61157a565b610dad9084611453565b98975050505050505050565b6000808251604103610def5760208301516040840151606085015160001a610de387828585610eea565b94509450505050610df7565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401610e28929190611586565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e6691906115a7565b600060405180830381855afa9150503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea6565b606091505b5091509150818015610eba57506020815110155b8015610bd257508051630b135d3f60e11b90610edf90830160209081019084016115b9565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f215750600090506003610fa5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610f75573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f9e57600060019250925050610fa5565b9150600090505b94509492505050565b80356001600160a01b0381168114610fc557600080fd5b919050565b600060208284031215610fdc57600080fd5b610b7482610fae565b60005b83811015611000578181015183820152602001610fe8565b50506000910152565b60008151808452611021816020860160208601610fe5565b601f01601f19169290920160200192915050565b602081526000610b746020830184611009565b60006020828403121561105a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561109a5761109a611061565b60405290565b600067ffffffffffffffff808411156110bb576110bb611061565b604051601f8501601f19908116603f011681019082821181831017156110e3576110e3611061565b816040528093508581528686860111156110fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261112757600080fd5b610b74838335602085016110a0565b600060a0828403121561114857600080fd5b611150611077565b9050813567ffffffffffffffff8082111561116a57600080fd5b61117685838601611116565b8352602084013591508082111561118c57600080fd5b61119885838601611116565b602084015260408401359150808211156111b157600080fd5b506111be84828501611116565b6040830152506111d060608301610fae565b60608201526080820135608082015292915050565b600080604083850312156111f857600080fd5b823567ffffffffffffffff8082111561121057600080fd5b61121c86838701611136565b9350602085013591508082111561123257600080fd5b508301601f8101851361124457600080fd5b611253858235602084016110a0565b9150509250929050565b60006020828403121561126f57600080fd5b813567ffffffffffffffff81111561128657600080fd5b820160408185031215610b7457600080fd5b600181811c908216806112ac57607f821691505b6020821081036112cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60a0815260006112e560a0830188611009565b82810360208401526112f78188611009565b9050828103604084015261130b8187611009565b6001600160a01b039590951660608401525050608001529392505050565b60008235609e1983360301811261133f57600080fd5b9190910192915050565b60006103e63683611136565b6000808335601e1984360301811261136c57600080fd5b83018035915067ffffffffffffffff82111561138757600080fd5b602001915036819003821315610df757600080fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156113ee57600080fd5b81518015158114610b7457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156103e6576103e661142a565b80820281158282048414176103e6576103e661142a565b808201808211156103e6576103e661142a565b60006001820161148f5761148f61142a565b5060010190565b600181815b808511156114d15781600019048211156114b7576114b761142a565b808516156114c457918102915b93841c939080029061149b565b509250929050565b6000826114e8575060016103e6565b816114f5575060006103e6565b816001811461150b576002811461151557611531565b60019150506103e6565b60ff8411156115265761152661142a565b50506001821b6103e6565b5060208310610133831016604e8410600b8410161715611554575081810a6103e6565b61155e8383611496565b80600019048211156115725761157261142a565b029392505050565b6000610b7483836114d9565b82815260406020820152600061159f6040830184611009565b949350505050565b6000825161133f818460208701610fe5565b6000602082840312156115cb57600080fd5b505191905056fea2646970667358221220d18dcf7b2dc9bd7697240198bf08fb73c2276ae25cdbf1ddb3e827fd7b93aa0f64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063b870676c1161008c578063dec965d311610066578063dec965d3146101e9578063f193eda6146101fc578063f2fde38b14610205578063f437bc591461021857600080fd5b8063b870676c1461019c578063beb15c21146101af578063dbac5821146101d257600080fd5b80635e280f11116100c85780635e280f111461015b578063715018a6146101705780638da5cb5b14610178578063b2a3fda41461018957600080fd5b80630fa4ed4d146100ef57806315d276e11461011f5780634e06a32b14610146575b600080fd5b600554610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101027f000000000000000000000000000000000000000000000000000000000000000081565b610159610154366004610fca565b610220565b005b61016361027c565b6040516101169190611035565b61015961030a565b6000546001600160a01b0316610102565b610159610197366004611048565b61031e565b600354610102906001600160a01b031681565b6101c26101bd3660046111e5565b61032b565b6040519015158152602001610116565b6101db60045481565b604051908152602001610116565b6101db6101f736600461125d565b6103ec565b6101db60065481565b610159610213366004610fca565b610744565b6101636107bd565b6102286107ca565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fb8603ceabf8ee4633f1fd8c0ae9e0e64f2fc2fea5cb79a96c18efd007aab6f969060200160405180910390a150565b6001805461028990611298565b80601f01602080910402602001604051908101604052809291908181526020018280546102b590611298565b80156103025780601f106102d757610100808354040283529160200191610302565b820191906000526020600020905b8154815290600101906020018083116102e557829003601f168201915b505050505081565b6103126107ca565b61031c6000610824565b565b6103266107ca565b600455565b6000808360000151846020015185604001518660600151876080015160405160200161035b9594939291906112d2565b6040516020818303038152906040529050600654846080015160001b146103c95760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e6f74617279206b6579206861736800000000000000000060448201526064015b60405180910390fd5b6005546103e290829085906001600160a01b0316610874565b9150505b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104665760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064016103c0565b6104c36104738380611329565b61047c90611349565b6104896020850185611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108c892505050565b6105a3600180546104d390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff90611298565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b5061055f93508792508291506113299050565b6105699080611355565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091292505050565b610687600280546105b390611298565b80601f01602080910402602001604051908101604052809291908181526020018280546105df90611298565b801561062c5780601f106106015761010080835404028352916020019161062c565b820191906000526020600020905b81548152906001019060200180831161060f57829003601f168201915b5061063f93508792508291506113299050565b61064d906020810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ad92505050565b6106ea6106948380611329565b6106a5906080810190606001610fca565b6106af8480611329565b6106bd906040810190611355565b6040516020016106cf9392919061139c565b60405160208183030381529060405280519060200120610a48565b6103e660006106f98480611329565b610707906040810190611355565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610b639050565b61074c6107ca565b6001600160a01b0381166107b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c0565b6107ba81610824565b50565b6002805461028990611298565b6000546001600160a01b0316331461031c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c81206108bf6001600160a01b0384168286610b7b565b95945050505050565b6108d2828261032b565b61090e5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016103c0565b5050565b806040516020016109239190611035565b604051602081830303815290604052805190602001208260405160200161094a9190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d6174636820657870656374656460448201526064016103c0565b806040516020016109be9190611035565b60405160208183030381529060405280519060200120826040516020016109e59190611035565b604051602081830303815290604052805190602001201461090e5760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d617463682065787065637465640000000060448201526064016103c0565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113dc565b15610b025760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016103c0565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610b4857600080fd5b505af1158015610b5c573d6000803e3d6000fd5b5050505050565b6000610b7483601760f91b84610bdc565b9392505050565b6000806000610b8a8585610db9565b90925090506000816004811115610ba357610ba36113fe565b148015610bc15750856001600160a01b0316826001600160a01b0316145b80610bd25750610bd2868686610dfe565b9695505050505050565b600083818080805b8451811015610d3257603060f81b858281518110610c0457610c04611414565b01602001516001600160f81b03191610801590610c455750603960f81b858281518110610c3357610c33611414565b01602001516001600160f81b03191611155b15610c88576030858281518110610c5e57610c5e611414565b0160200151610c70919060f81c611440565b610c7b85600a611453565b610c85919061146a565b93505b8115610c9c5782610c988161147d565b9350505b876001600160f81b031916858281518110610cb957610cb9611414565b01602001516001600160f81b03191603610d20578115610d1b5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c730000000060448201526064016103c0565b600191505b80610d2a8161147d565b915050610be4565b5085821115610d8e5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b60648201526084016103c0565b610d988287611440565b610da390600a61157a565b610dad9084611453565b98975050505050505050565b6000808251604103610def5760208301516040840151606085015160001a610de387828585610eea565b94509450505050610df7565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401610e28929190611586565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e6691906115a7565b600060405180830381855afa9150503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea6565b606091505b5091509150818015610eba57506020815110155b8015610bd257508051630b135d3f60e11b90610edf90830160209081019084016115b9565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f215750600090506003610fa5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610f75573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f9e57600060019250925050610fa5565b9150600090505b94509492505050565b80356001600160a01b0381168114610fc557600080fd5b919050565b600060208284031215610fdc57600080fd5b610b7482610fae565b60005b83811015611000578181015183820152602001610fe8565b50506000910152565b60008151808452611021816020860160208601610fe5565b601f01601f19169290920160200192915050565b602081526000610b746020830184611009565b60006020828403121561105a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561109a5761109a611061565b60405290565b600067ffffffffffffffff808411156110bb576110bb611061565b604051601f8501601f19908116603f011681019082821181831017156110e3576110e3611061565b816040528093508581528686860111156110fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261112757600080fd5b610b74838335602085016110a0565b600060a0828403121561114857600080fd5b611150611077565b9050813567ffffffffffffffff8082111561116a57600080fd5b61117685838601611116565b8352602084013591508082111561118c57600080fd5b61119885838601611116565b602084015260408401359150808211156111b157600080fd5b506111be84828501611116565b6040830152506111d060608301610fae565b60608201526080820135608082015292915050565b600080604083850312156111f857600080fd5b823567ffffffffffffffff8082111561121057600080fd5b61121c86838701611136565b9350602085013591508082111561123257600080fd5b508301601f8101851361124457600080fd5b611253858235602084016110a0565b9150509250929050565b60006020828403121561126f57600080fd5b813567ffffffffffffffff81111561128657600080fd5b820160408185031215610b7457600080fd5b600181811c908216806112ac57607f821691505b6020821081036112cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60a0815260006112e560a0830188611009565b82810360208401526112f78188611009565b9050828103604084015261130b8187611009565b6001600160a01b039590951660608401525050608001529392505050565b60008235609e1983360301811261133f57600080fd5b9190910192915050565b60006103e63683611136565b6000808335601e1984360301811261136c57600080fd5b83018035915067ffffffffffffffff82111561138757600080fd5b602001915036819003821315610df757600080fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156113ee57600080fd5b81518015158114610b7457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156103e6576103e661142a565b80820281158282048414176103e6576103e661142a565b808201808211156103e6576103e661142a565b60006001820161148f5761148f61142a565b5060010190565b600181815b808511156114d15781600019048211156114b7576114b761142a565b808516156114c457918102915b93841c939080029061149b565b509250929050565b6000826114e8575060016103e6565b816114f5575060006103e6565b816001811461150b576002811461151557611531565b60019150506103e6565b60ff8411156115265761152661142a565b50506001821b6103e6565b5060208310610133831016604e8410600b8410161715611554575081810a6103e6565b61155e8383611496565b80600019048211156115725761157261142a565b029392505050565b6000610b7483836114d9565b82815260406020820152600061159f6040830184611009565b949350505050565b6000825161133f818460208701610fe5565b6000602082840312156115cb57600080fd5b505191905056fea2646970667358221220d18dcf7b2dc9bd7697240198bf08fb73c2276ae25cdbf1ddb3e827fd7b93aa0f64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated TLS calls\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2232,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"endpoint\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2234,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"host\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 2237,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_contract(INullifierRegistry)2402\"\n      },\n      {\n        \"astId\": 2239,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 2435,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"verifierSigningKey\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 2437,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol:RevolutAccountRegistrationProcessor\",\n        \"label\": \"notaryKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_bytes32\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(INullifierRegistry)2402\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/RevolutAccountRegistry.json",
    "content": "{\n  \"address\": \"0x4b6db2939E09A642afb90cEd37126213aBbA0f4F\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"accountId\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AllowlistEnabled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewAccountRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromAllowlist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accountRegistrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_allowedUsers\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"addAccountsToAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"enableAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAllowedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"_accountRegistrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_allowedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isAllowedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isAllowlistEnabled\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isRegisteredUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"profileId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"userAddress\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutAccountRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_disallowedUsers\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"removeAccountsFromAllowlist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistrationProcessor\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setAccountRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x6e5f3a1e4902ffaf3b7bd32c9bccb1771a31adfdf69712ccf6f39de829b05cbb\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x4b6db2939E09A642afb90cEd37126213aBbA0f4F\",\n    \"transactionIndex\": 51,\n    \"gasUsed\": \"1200937\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000020000000000100000000000000000000080000000000000000000000000000000000000000000000000020000000000000000040000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x0d6fd0c5ad9fd678240868c04ae3779b236d011d03b76ada96f52c64417978ce\",\n    \"transactionHash\": \"0x6e5f3a1e4902ffaf3b7bd32c9bccb1771a31adfdf69712ccf6f39de829b05cbb\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 51,\n        \"blockNumber\": 5864683,\n        \"transactionHash\": \"0x6e5f3a1e4902ffaf3b7bd32c9bccb1771a31adfdf69712ccf6f39de829b05cbb\",\n        \"address\": \"0x4b6db2939E09A642afb90cEd37126213aBbA0f4F\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 180,\n        \"blockHash\": \"0x0d6fd0c5ad9fd678240868c04ae3779b236d011d03b76ada96f52c64417978ce\"\n      },\n      {\n        \"transactionIndex\": 51,\n        \"blockNumber\": 5864683,\n        \"transactionHash\": \"0x6e5f3a1e4902ffaf3b7bd32c9bccb1771a31adfdf69712ccf6f39de829b05cbb\",\n        \"address\": \"0x4b6db2939E09A642afb90cEd37126213aBbA0f4F\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 181,\n        \"blockHash\": \"0x0d6fd0c5ad9fd678240868c04ae3779b236d011d03b76ada96f52c64417978ce\"\n      }\n    ],\n    \"blockNumber\": 5864683,\n    \"cumulativeGasUsed\": \"14370315\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"accountId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AllowlistEnabled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewAccountRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromAllowlist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"accountRegistrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_allowedUsers\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"addAccountsToAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"enableAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountId\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAllowedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"_accountRegistrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_allowedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isAllowedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isAllowlistEnabled\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isRegisteredUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"profileId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"userAddress\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutAccountRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_disallowedUsers\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"removeAccountsFromAllowlist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistrationProcessor\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setAccountRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"accountId being banned\\\"}},\\\"addAccountsToAllowlist(bytes32[])\\\":{\\\"params\\\":{\\\"_allowedUsers\\\":\\\"List of accountIds allowed to signal intents on the user's deposit\\\"}},\\\"initialize(address)\\\":{\\\"params\\\":{\\\"_accountRegistrationProcessor\\\":\\\"Account Registration processor address\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(((string,string,string,address,uint256),bytes))\\\":{\\\"params\\\":{\\\"_proof\\\":\\\"Registration proof consisting of unredacted data being notarized and a signature\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"accountId being approved\\\"}},\\\"removeAccountsFromAllowlist(bytes32[])\\\":{\\\"params\\\":{\\\"_disallowedUsers\\\":\\\"List of accountIds being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setAccountRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"addAccountsToAllowlist(bytes32[])\\\":{\\\"notice\\\":\\\"Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will be able to signal intents on the user's deposit.\\\"},\\\"enableAllowlist()\\\":{\\\"notice\\\":\\\"Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\\"},\\\"initialize(address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"register(((string,string,string,address,uint256),bytes))\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the profileId from the proof and assigning the account owner to the sender of the transaction.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes an accountId from a depositor's deny list.\\\"},\\\"removeAccountsFromAllowlist(bytes32[])\\\":{\\\"notice\\\":\\\"Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be able to signal intents on the user's deposit.\\\"},\\\"setAccountRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutAccountRegistry.sol\\\":\\\"RevolutAccountRegistry\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/ramps/revolut/RevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IRevolutAccountRegistrationProcessor } from \\\\\\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\\\\\";\\\\nimport { IRevolutAccountRegistry } from \\\\\\\"./interfaces/IRevolutAccountRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\\\n\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n\\\\n    event AllowlistEnabled(bytes32 listOwner);\\\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\\\n\\\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    struct AllowList {\\\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(isRegisteredUser(msg.sender), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\\\n\\\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\\\n\\\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\\\n                                                                                // resulting hash is the accountId for our system\\\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\\\n     */\\\\n    function initialize(\\\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\\\n     * sender of the transaction.\\\\n     *\\\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\\\n     */\\\\n    function register(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    {\\\\n        require(msg.sender == _proof.public_values.userAddress, \\\\\\\"Caller must be address specified in proof\\\\\\\");\\\\n        require(accounts[msg.sender] == bytes32(0), \\\\\\\"Account already associated with accountId\\\\\\\");\\\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\\\n\\\\n        accounts[msg.sender] = accountId;\\\\n\\\\n        emit AccountRegistered(msg.sender, accountId);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   accountId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender];\\\\n\\\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes an accountId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   accountId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender];\\\\n\\\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\\\n     */\\\\n    function enableAllowlist() external onlyRegisteredUser {\\\\n        bytes32 allowingUser = accounts[msg.sender];\\\\n\\\\n        require(!allowList[allowingUser].isEnabled, \\\\\\\"Allow list already enabled\\\\\\\");\\\\n\\\\n        allowList[allowingUser].isEnabled = true;\\\\n\\\\n        emit AllowlistEnabled(allowingUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\\\n     * be able to signal intents on the user's deposit.\\\\n     *\\\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\\\n     */\\\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\\\n        bytes32 allowingUser = accounts[msg.sender];\\\\n\\\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\\\n            bytes32 allowedUser = _allowedUsers[i];\\\\n\\\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\\\\\"User already on allowlist\\\\\\\");\\\\n\\\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\\\n\\\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\\\n     * able to signal intents on the user's deposit.\\\\n     *\\\\n     * @param _disallowedUsers   List of accountIds being approved\\\\n     */\\\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\\\n        bytes32 disallowingUser = accounts[msg.sender];\\\\n\\\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\\\n            bytes32 disallowedUser = _disallowedUsers[i];\\\\n\\\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\\\\\"User not on allowlist\\\\\\\");\\\\n\\\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\\\n\\\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        accountRegistrationProcessor = _registrationProcessor;\\\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getAccountId(address _account) public view returns (bytes32) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function isRegisteredUser(address _account) public view returns (bool) {\\\\n        return getAccountId(_account) != bytes32(0);\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return denyList[getAccountId(_account)].deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\\\n        return allowList[getAccountId(_account)].isEnabled;\\\\n    }\\\\n\\\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return allowList[getAccountId(_account)].allowedUsers;\\\\n    }\\\\n\\\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\\\n        bytes32 allowingUser = getAccountId(_account);\\\\n\\\\n        // Deny list overrides, if user on deny list then they are not allowed\\\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\\\n\\\\n        // Check if allow list is enabled, if so return status of user, else return true\\\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\\\n    }\\\\n    \\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\\\n     * it can't be used again.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        internal\\\\n        returns (bytes32 accountId)\\\\n    {\\\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x686d9b6ae09e5786bb2e18735d5e8a515657f99ca2850e261058fc4ffce3d64c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistrationProcessor {\\\\n\\\\n    struct RegistrationData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string profileId;\\\\n        address userAddress;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct RegistrationProof {\\\\n        RegistrationData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb3e358861c8fb5d7c81c48e3eac4e0f4ce3c03ddfe4136aada9759b61e5e465a\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistry {\\\\n    function getAccountId(address _account) external view returns (bytes32);\\\\n    function isRegisteredUser(address _account) external view returns (bool);\\\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5c58e8996f2d06f3d8bad7b3cef912c6370eecb2f3523ff8c1e15ec05dfb8e74\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523480156200001157600080fd5b50604051620015ee380380620015ee833981016040819052620000349162000182565b6200003f3362000051565b6200004a81620000a1565b50620001b4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000ab62000124565b6001600160a01b038116620001165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001218162000051565b50565b6000546001600160a01b03163314620001805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200010d565b565b6000602082840312156200019557600080fd5b81516001600160a01b0381168114620001ad57600080fd5b9392505050565b61142a80620001c46000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063d884524511610071578063d884524514610273578063e0b490f714610286578063e39ca3b4146102a7578063f2fde38b146102ba578063fbf15b1f146102cd57600080fd5b8063715018a61461022c5780638da5cb5b146102345780639b357b5a14610245578063c4d66de814610258578063c6a2aac81461026b57600080fd5b80631f5bdf5d116100f45780631f5bdf5d146101bf5780633056eb28146101d257806338e4bef6146101e5578063392e53cd146101f85780634595bba01461020c57600080fd5b8063066a82fe146101315780630876dda314610146578063148172da146101765780631acd84d8146101895780631e48fe6b146101ac575b600080fd5b61014461013f366004610fe8565b6102e0565b005b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014461018436600461102a565b61042d565b61019c610197366004611058565b61054b565b604051901515815260200161016d565b6101446101ba36600461109a565b6105d1565b61019c6101cd366004611158565b610720565b6101446101e0366004611158565b610734565b61019c6101f3366004611158565b610791565b60015461019c90600160a01b900460ff1681565b61021f61021a366004611158565b6107ba565b60405161016d9190611175565b610144610830565b6000546001600160a01b0316610159565b61014461025336600461102a565b610844565b610144610266366004611158565b610943565b6101446109c2565b61014461028136600461109a565b610aa1565b610299610294366004611158565b610bfc565b60405190815260200161016d565b61021f6102b5366004611158565b610c17565b6101446102c8366004611158565b610c8b565b61019c6102db366004611058565b610d04565b6102ea81806111b9565b6102fb906080810190606001611158565b6001600160a01b0316336001600160a01b0316146103725760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206d7573742062652061646472657373207370656369666965646044820152681034b710383937b7b360b91b60648201526084015b60405180910390fd5b33600090815260026020526040902054156103e15760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152681858d8dbdd5b9d125960ba1b6064820152608401610369565b60006103ec82610d3f565b336000818152600260205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050565b61043633610720565b6104525760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff16156104cc5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610369565b600081815260036020818152604080842086855260018181018452828620805460ff191682179055938352805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061053f9083908590918252602082015260400190565b60405180910390a15050565b60008061055784610bfc565b600081815260036020908152604080832087845260010190915290205490915060ff16156105895760009150506105cb565b60008181526004602052604090205460ff166105a65760016105c7565b600081815260046020908152604080832086845260020190915290205460ff165b9150505b92915050565b6105da33610720565b6105f65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b57600083828151811061062557610625611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff166106975760405162461bcd60e51b8152602060048201526015602482015274155cd95c881b9bdd081bdb88185b1b1bdddb1a5cdd605a1b6044820152606401610369565b6000838152600460208181526040808420858552600281018352908420805460ff1916905592869052526106ce9060010182610db3565b827fe87ba7050133e8b4c8b879f99b3276368eaca3b81f4ea415d9528843a15d8c638260405161070091815260200190565b60405180910390a250806107138161123c565b915050610608565b505050565b60008061072c83610bfc565b141592915050565b61073c610edb565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd4e734c9a89ace3649766f5233487313285fe97ca577c2602beda889ef46dd3906020015b60405180910390a150565b6000600460006107a084610bfc565b815260208101919091526040016000205460ff1692915050565b6060600360006107c984610bfc565b815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020905b815481526020019060010190808311610810575b50505050509050919050565b610838610edb565b6108426000610f35565b565b61084d33610720565b6108695760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff166108d95760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610369565b6000818152600360208181526040808420868552600181018352908420805460ff19169055928490525261090d9083610db3565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161053f565b61094b610edb565b600154600160a01b900460ff161561099b5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610369565b600180546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6109cb33610720565b6109e75760405162461bcd60e51b8152600401610369906111d9565b3360009081526002602090815260408083205480845260049092529091205460ff1615610a565760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f77206c69737420616c726561647920656e61626c65640000000000006044820152606401610369565b60008181526004602052604090819020805460ff19166001179055517f08df0a71ea3e5565a2138936ed06eaba47996a3ccfde2dae1f3edd1164e299d7906107869083815260200190565b610aaa33610720565b610ac65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b576000838281518110610af557610af5611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff1615610b705760405162461bcd60e51b815260206004820152601960248201527f5573657220616c7265616479206f6e20616c6c6f776c697374000000000000006044820152606401610369565b6000838152600460208181526040808420858552600281018352818520805460ff1916600190811790915593835283018054938401815584529220018290555183907f857ce673abc5a303fa8303102f12b42079aa85b97bca15b56428764dd1dec4d290610be19084815260200190565b60405180910390a25080610bf48161123c565b915050610ad8565b6001600160a01b031660009081526002602052604090205490565b606060046000610c2684610bfc565b815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020908154815260200190600101908083116108105750505050509050919050565b610c93610edb565b6001600160a01b038116610cf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610369565b610d0181610f35565b50565b600060036000610d1385610bfc565b81526020808201929092526040908101600090812085825260010190925290205460ff16905092915050565b60015460405163dec965d360e01b81526000916001600160a01b03169063dec965d390610d709085906004016112c4565b6020604051808303816000875af1158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cb91906113b2565b600080610e0f84805480602002602001604051908101604052809291908181526020018280548015610e0457602002820191906000526020600020905b815481526020019060010190808311610df0575b505050505084610f85565b9150915080610e585760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610369565b8354600090610e69906001906113cb565b9050808314610eae57848181548110610e8457610e84611210565b9060005260206000200154858481548110610ea157610ea1611210565b6000918252602090912001555b84805480610ebe57610ebe6113de565b600190038181906000526020600020016000905590555050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610369565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b81811015610fd55784868281518110610fa957610fa9611210565b602002602001015103610fc357925060019150610fe19050565b80610fcd8161123c565b915050610f8e565b50600019600092509250505b9250929050565b600060208284031215610ffa57600080fd5b813567ffffffffffffffff81111561101157600080fd5b82016040818503121561102357600080fd5b9392505050565b60006020828403121561103c57600080fd5b5035919050565b6001600160a01b0381168114610d0157600080fd5b6000806040838503121561106b57600080fd5b823561107681611043565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156110ad57600080fd5b823567ffffffffffffffff808211156110c557600080fd5b818501915085601f8301126110d957600080fd5b8135818111156110eb576110eb611084565b8060051b604051601f19603f8301168101818110858211171561111057611110611084565b60405291825284820192508381018501918883111561112e57600080fd5b938501935b8285101561114c57843584529385019392850192611133565b98975050505050505050565b60006020828403121561116a57600080fd5b813561102381611043565b6020808252825182820181905260009190848201906040850190845b818110156111ad57835183529284019291840191600101611191565b50909695505050505050565b60008235609e198336030181126111cf57600080fd5b9190910192915050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161124e5761124e611226565b5060010190565b6000808335601e1984360301811261126c57600080fd5b830160208101925035905067ffffffffffffffff81111561128c57600080fd5b803603821315610fe157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235609e198436030181126112de57600080fd5b6040602084015283016112f18180611255565b60a060608601526113076101008601828461129b565b9150506113176020830183611255565b605f198087850301608088015261132f84838561129b565b935061133e6040860186611255565b93509150808785030160a08801525061135883838361129b565b92505050606082013561136a81611043565b6001600160a01b031660c0850152608082013560e085015261138f6020860186611255565b858303601f1901604087015292506113a882848361129b565b9695505050505050565b6000602082840312156113c457600080fd5b5051919050565b818103818111156105cb576105cb611226565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204d908448568dee8f178658c3e858dab36e0dff4876b3de68433ba819907de6b964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063d884524511610071578063d884524514610273578063e0b490f714610286578063e39ca3b4146102a7578063f2fde38b146102ba578063fbf15b1f146102cd57600080fd5b8063715018a61461022c5780638da5cb5b146102345780639b357b5a14610245578063c4d66de814610258578063c6a2aac81461026b57600080fd5b80631f5bdf5d116100f45780631f5bdf5d146101bf5780633056eb28146101d257806338e4bef6146101e5578063392e53cd146101f85780634595bba01461020c57600080fd5b8063066a82fe146101315780630876dda314610146578063148172da146101765780631acd84d8146101895780631e48fe6b146101ac575b600080fd5b61014461013f366004610fe8565b6102e0565b005b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61014461018436600461102a565b61042d565b61019c610197366004611058565b61054b565b604051901515815260200161016d565b6101446101ba36600461109a565b6105d1565b61019c6101cd366004611158565b610720565b6101446101e0366004611158565b610734565b61019c6101f3366004611158565b610791565b60015461019c90600160a01b900460ff1681565b61021f61021a366004611158565b6107ba565b60405161016d9190611175565b610144610830565b6000546001600160a01b0316610159565b61014461025336600461102a565b610844565b610144610266366004611158565b610943565b6101446109c2565b61014461028136600461109a565b610aa1565b610299610294366004611158565b610bfc565b60405190815260200161016d565b61021f6102b5366004611158565b610c17565b6101446102c8366004611158565b610c8b565b61019c6102db366004611058565b610d04565b6102ea81806111b9565b6102fb906080810190606001611158565b6001600160a01b0316336001600160a01b0316146103725760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206d7573742062652061646472657373207370656369666965646044820152681034b710383937b7b360b91b60648201526084015b60405180910390fd5b33600090815260026020526040902054156103e15760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152681858d8dbdd5b9d125960ba1b6064820152608401610369565b60006103ec82610d3f565b336000818152600260205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050565b61043633610720565b6104525760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff16156104cc5760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c69737400000000000000006044820152606401610369565b600081815260036020818152604080842086855260018181018452828620805460ff191682179055938352805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee9061053f9083908590918252602082015260400190565b60405180910390a15050565b60008061055784610bfc565b600081815260036020908152604080832087845260010190915290205490915060ff16156105895760009150506105cb565b60008181526004602052604090205460ff166105a65760016105c7565b600081815260046020908152604080832086845260020190915290205460ff165b9150505b92915050565b6105da33610720565b6105f65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b57600083828151811061062557610625611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff166106975760405162461bcd60e51b8152602060048201526015602482015274155cd95c881b9bdd081bdb88185b1b1bdddb1a5cdd605a1b6044820152606401610369565b6000838152600460208181526040808420858552600281018352908420805460ff1916905592869052526106ce9060010182610db3565b827fe87ba7050133e8b4c8b879f99b3276368eaca3b81f4ea415d9528843a15d8c638260405161070091815260200190565b60405180910390a250806107138161123c565b915050610608565b505050565b60008061072c83610bfc565b141592915050565b61073c610edb565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd4e734c9a89ace3649766f5233487313285fe97ca577c2602beda889ef46dd3906020015b60405180910390a150565b6000600460006107a084610bfc565b815260208101919091526040016000205460ff1692915050565b6060600360006107c984610bfc565b815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020905b815481526020019060010190808311610810575b50505050509050919050565b610838610edb565b6108426000610f35565b565b61084d33610720565b6108695760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020908152604080832054808452600383528184208585526001019092529091205460ff166108d95760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b6044820152606401610369565b6000818152600360208181526040808420868552600181018352908420805460ff19169055928490525261090d9083610db3565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f910161053f565b61094b610edb565b600154600160a01b900460ff161561099b5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610369565b600180546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6109cb33610720565b6109e75760405162461bcd60e51b8152600401610369906111d9565b3360009081526002602090815260408083205480845260049092529091205460ff1615610a565760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f77206c69737420616c726561647920656e61626c65640000000000006044820152606401610369565b60008181526004602052604090819020805460ff19166001179055517f08df0a71ea3e5565a2138936ed06eaba47996a3ccfde2dae1f3edd1164e299d7906107869083815260200190565b610aaa33610720565b610ac65760405162461bcd60e51b8152600401610369906111d9565b33600090815260026020526040812054905b825181101561071b576000838281518110610af557610af5611210565b6020908102919091018101516000858152600483526040808220838352600201909352919091205490915060ff1615610b705760405162461bcd60e51b815260206004820152601960248201527f5573657220616c7265616479206f6e20616c6c6f776c697374000000000000006044820152606401610369565b6000838152600460208181526040808420858552600281018352818520805460ff1916600190811790915593835283018054938401815584529220018290555183907f857ce673abc5a303fa8303102f12b42079aa85b97bca15b56428764dd1dec4d290610be19084815260200190565b60405180910390a25080610bf48161123c565b915050610ad8565b6001600160a01b031660009081526002602052604090205490565b606060046000610c2684610bfc565b815260200190815260200160002060010180548060200260200160405190810160405280929190818152602001828054801561082457602002820191906000526020600020908154815260200190600101908083116108105750505050509050919050565b610c93610edb565b6001600160a01b038116610cf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610369565b610d0181610f35565b50565b600060036000610d1385610bfc565b81526020808201929092526040908101600090812085825260010190925290205460ff16905092915050565b60015460405163dec965d360e01b81526000916001600160a01b03169063dec965d390610d709085906004016112c4565b6020604051808303816000875af1158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cb91906113b2565b600080610e0f84805480602002602001604051908101604052809291908181526020018280548015610e0457602002820191906000526020600020905b815481526020019060010190808311610df0575b505050505084610f85565b9150915080610e585760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610369565b8354600090610e69906001906113cb565b9050808314610eae57848181548110610e8457610e84611210565b9060005260206000200154858481548110610ea157610ea1611210565b6000918252602090912001555b84805480610ebe57610ebe6113de565b600190038181906000526020600020016000905590555050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610369565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81516000908190815b81811015610fd55784868281518110610fa957610fa9611210565b602002602001015103610fc357925060019150610fe19050565b80610fcd8161123c565b915050610f8e565b50600019600092509250505b9250929050565b600060208284031215610ffa57600080fd5b813567ffffffffffffffff81111561101157600080fd5b82016040818503121561102357600080fd5b9392505050565b60006020828403121561103c57600080fd5b5035919050565b6001600160a01b0381168114610d0157600080fd5b6000806040838503121561106b57600080fd5b823561107681611043565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156110ad57600080fd5b823567ffffffffffffffff808211156110c557600080fd5b818501915085601f8301126110d957600080fd5b8135818111156110eb576110eb611084565b8060051b604051601f19603f8301168101818110858211171561111057611110611084565b60405291825284820192508381018501918883111561112e57600080fd5b938501935b8285101561114c57843584529385019392850192611133565b98975050505050505050565b60006020828403121561116a57600080fd5b813561102381611043565b6020808252825182820181905260009190848201906040850190845b818110156111ad57835183529284019291840191600101611191565b50909695505050505050565b60008235609e198336030181126111cf57600080fd5b9190910192915050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161124e5761124e611226565b5060010190565b6000808335601e1984360301811261126c57600080fd5b830160208101925035905067ffffffffffffffff81111561128c57600080fd5b803603821315610fe157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235609e198436030181126112de57600080fd5b6040602084015283016112f18180611255565b60a060608601526113076101008601828461129b565b9150506113176020830183611255565b605f198087850301608088015261132f84838561129b565b935061133e6040860186611255565b93509150808785030160a08801525061135883838361129b565b92505050606082013561136a81611043565b6001600160a01b031660c0850152608082013560e085015261138f6020860186611255565b858303601f1901604087015292506113a882848361129b565b9695505050505050565b6000602082840312156113c457600080fd5b5051919050565b818103818111156105cb576105cb611226565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204d908448568dee8f178658c3e858dab36e0dff4876b3de68433ba819907de6b964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"accountId being banned\"\n        }\n      },\n      \"addAccountsToAllowlist(bytes32[])\": {\n        \"params\": {\n          \"_allowedUsers\": \"List of accountIds allowed to signal intents on the user's deposit\"\n        }\n      },\n      \"initialize(address)\": {\n        \"params\": {\n          \"_accountRegistrationProcessor\": \"Account Registration processor address\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(((string,string,string,address,uint256),bytes))\": {\n        \"params\": {\n          \"_proof\": \"Registration proof consisting of unredacted data being notarized and a signature\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"accountId being approved\"\n        }\n      },\n      \"removeAccountsFromAllowlist(bytes32[])\": {\n        \"params\": {\n          \"_disallowedUsers\": \"List of accountIds being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setAccountRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"addAccountsToAllowlist(bytes32[])\": {\n        \"notice\": \"Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will be able to signal intents on the user's deposit.\"\n      },\n      \"enableAllowlist()\": {\n        \"notice\": \"Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\"\n      },\n      \"initialize(address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"register(((string,string,string,address,uint256),bytes))\": {\n        \"notice\": \"Registers a new account by pulling the profileId from the proof and assigning the account owner to the sender of the transaction.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes an accountId from a depositor's deny list.\"\n      },\n      \"removeAccountsFromAllowlist(bytes32[])\": {\n        \"notice\": \"Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be able to signal intents on the user's deposit.\"\n      },\n      \"setAccountRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 12732,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"accountRegistrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRevolutAccountRegistrationProcessor)15419\"\n      },\n      {\n        \"astId\": 12734,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"1\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 12738,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_mapping(t_address,t_bytes32)\"\n      },\n      {\n        \"astId\": 12743,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"denyList\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(DenyList)12707_storage)\"\n      },\n      {\n        \"astId\": 12748,\n        \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n        \"label\": \"allowList\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(AllowList)12717_storage)\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRevolutAccountRegistrationProcessor)15419\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutAccountRegistrationProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_bytes32)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => bytes32)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bytes32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(AllowList)12717_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutAccountRegistry.AllowList)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AllowList)12717_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(DenyList)12707_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutAccountRegistry.DenyList)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(DenyList)12707_storage\"\n      },\n      \"t_struct(AllowList)12717_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutAccountRegistry.AllowList\",\n        \"members\": [\n          {\n            \"astId\": 12709,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isEnabled\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bool\"\n          },\n          {\n            \"astId\": 12712,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"allowedUsers\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 12716,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isAllowed\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_struct(DenyList)12707_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutAccountRegistry.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 12702,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 12706,\n            \"contract\": \"contracts/ramps/revolut/RevolutAccountRegistry.sol:RevolutAccountRegistry\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/RevolutRamp.json",
    "content": "{\n  \"address\": \"0x11E267C4861BBF3AA3368Bb78dE2Cdb380c9000D\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRampId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"currencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"accountId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accountRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"revolutTag\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"notaryKeyHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"receiveCurrencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"revolutTag\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"verifierSigningKey\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"receiveCurrencyId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorId\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"revolutTag\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"verifierSigningKey\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32\",\n                  \"name\": \"receiveCurrencyId\",\n                  \"type\": \"bytes32\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getIdCurrentIntentHashAsUint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct RevolutRamp.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperId\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct RevolutRamp.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutAccountRegistry\",\n          \"name\": \"_accountRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_revolutTag\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_receiveCurrencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_notaryKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"endpoint\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"host\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"transferId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"recipientId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"amount\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"currencyId\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"status\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"timestamp\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"intentHash\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"notaryKeyHash\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n          \"name\": \"_sendData\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_verifierSignature\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRevolutSendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x7d507fd9e1d3c17daa7208fab6e881f87df4ee1bf75cd7f0b05ed7fe6cb29cea\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x11E267C4861BBF3AA3368Bb78dE2Cdb380c9000D\",\n    \"transactionIndex\": 55,\n    \"gasUsed\": \"4085913\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000020000000000100000000000000000000000000000000000000000400000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x4670bbbc61b2e8548fafbf7d877d758e13199560216cfe8628ebeabdb86555d6\",\n    \"transactionHash\": \"0x7d507fd9e1d3c17daa7208fab6e881f87df4ee1bf75cd7f0b05ed7fe6cb29cea\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 55,\n        \"blockNumber\": 5864682,\n        \"transactionHash\": \"0x7d507fd9e1d3c17daa7208fab6e881f87df4ee1bf75cd7f0b05ed7fe6cb29cea\",\n        \"address\": \"0x11E267C4861BBF3AA3368Bb78dE2Cdb380c9000D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 187,\n        \"blockHash\": \"0x4670bbbc61b2e8548fafbf7d877d758e13199560216cfe8628ebeabdb86555d6\"\n      },\n      {\n        \"transactionIndex\": 55,\n        \"blockNumber\": 5864682,\n        \"transactionHash\": \"0x7d507fd9e1d3c17daa7208fab6e881f87df4ee1bf75cd7f0b05ed7fe6cb29cea\",\n        \"address\": \"0x11E267C4861BBF3AA3368Bb78dE2Cdb380c9000D\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 188,\n        \"blockHash\": \"0x4670bbbc61b2e8548fafbf7d877d758e13199560216cfe8628ebeabdb86555d6\"\n      }\n    ],\n    \"blockNumber\": 5864682,\n    \"cumulativeGasUsed\": \"20252044\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n    \"20000000\",\n    \"20000000\",\n    \"180\",\n    \"180\",\n    \"1000000000000000\",\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRampId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"accountId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"accountRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getIdCurrentIntentHashAsUint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperId\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct RevolutRamp.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutAccountRegistry\\\",\\\"name\\\":\\\"_accountRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_revolutTag\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_receiveCurrencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"transferId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"recipientId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendData\\\",\\\"name\\\":\\\"_sendData\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_verifierSignature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRevolutSendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_accountRegistry\\\":\\\"Account Registry contract for Revolut\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(string,bytes32,uint256,uint256,address,bytes32)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_notaryKeyHash\\\":\\\"Hash of the notary public key that is required to do notarization\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\",\\\"_receiveCurrencyId\\\":\\\"Id of the currency to be received off-chain\\\",\\\"_revolutTag\\\":\\\"Depositor's Revolut tag to receive payments\\\",\\\"_verifierSigningKey\\\":\\\"Public key of the verifier depositor wants to sign the TLS proof\\\"}},\\\"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\\\":{\\\"params\\\":{\\\"_sendData\\\":\\\"Struct containing unredacted data from API call to Revolut\\\",\\\"_verifierSignature\\\":\\\"Signature by verifier of the unredacted data\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(string,bytes32,uint256,uint256,address,bytes32)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutRamp.sol\\\":\\\"RevolutRamp\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/ramps/revolut/RevolutRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IRevolutAccountRegistry } from \\\\\\\"./interfaces/IRevolutAccountRegistry.sol\\\\\\\";\\\\nimport { IRevolutSendProcessor } from \\\\\\\"./interfaces/IRevolutSendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutRamp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed offRampId,\\\\n        bytes32 indexed currencyId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed accountId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        string revolutTag;\\\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _accountRegistry     Account Registry contract for Revolut\\\\n     * @param _sendProcessor       Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRevolutAccountRegistry _accountRegistry,\\\\n        IRevolutSendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        accountRegistry = _accountRegistry;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\\\n     * @param _depositAmount        The amount of USDC to off-ramp\\\\n     * @param _receiveAmount        The amount of USD to receive\\\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\\\n     */\\\\n    function offRamp(\\\\n        string calldata _revolutTag,\\\\n        bytes32 _receiveCurrencyId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount,\\\\n        address _verifierSigningKey,\\\\n        bytes32 _notaryKeyHash\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\\\n\\\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\\\\\"Revolut tag must match id\\\\\\\");\\\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        globalAccountInfo.deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            revolutTag: _revolutTag,\\\\n            receiveCurrencyId: _receiveCurrencyId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0),\\\\n            verifierSigningKey: _verifierSigningKey,\\\\n            notaryKeyHash: _notaryKeyHash\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n\\\\n        // Caller validity checks\\\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\\\n     */\\\\n    function onRamp(\\\\n        IRevolutSendProcessor.SendData calldata _sendData,\\\\n        bytes calldata _verifierSignature\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\\\n    }\\\\n\\\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\\\n        return uint256(getIdCurrentIntentHash(_account));\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _accountId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        IRevolutSendProcessor.SendData calldata _data,\\\\n        bytes calldata _verifierSignature\\\\n    )\\\\n        internal\\\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\\\n    {\\\\n        intentHash = bytes32(_data.intentHash);\\\\n        intent = intents[intentHash];\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Caller must be the on-ramper\\\\\\\");\\\\n\\\\n        deposit = deposits[intent.deposit];\\\\n\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperId,\\\\n            bytes32 currencyId,\\\\n            bytes32 notaryKeyHash\\\\n        ) = sendProcessor.processProof(\\\\n            IRevolutSendProcessor.SendProof({\\\\n                public_values: _data,\\\\n                proof: _verifierSignature\\\\n            }),\\\\n            deposit.verifierSigningKey\\\\n        );\\\\n\\\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\\\\\"Incorrect notary used for notarization\\\\\\\");\\\\n        require(currencyId == deposit.receiveCurrencyId, \\\\\\\"Wrong currency sent\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x576f519d82b98521832a1ac34c2ec806e438a73ed562e67718920effcf9f9b2b\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutAccountRegistry {\\\\n    function getAccountId(address _account) external view returns (bytes32);\\\\n    function isRegisteredUser(address _account) external view returns (bool);\\\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x5c58e8996f2d06f3d8bad7b3cef912c6370eecb2f3523ff8c1e15ec05dfb8e74\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutSendProcessor {\\\\n\\\\n    struct SendData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string transferId;\\\\n        string recipientId;\\\\n        string amount;\\\\n        string currencyId;\\\\n        string status;\\\\n        string timestamp;\\\\n        uint256 intentHash;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct SendProof {\\\\n        SendData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6bb42393fe8c5f9ac83fa56e126413638b4a0c110602eecaa70d2b41cf77f1a3\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162004878380380620048788339810160408190526200003491620001dd565b6200003f3362000096565b6001600160a01b038781166080526006879055600786905560098590556008849055600a839055600b80546001600160a01b0319169183169190911790556200008888620000e6565b505050505050505062000263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000f062000169565b6001600160a01b0381166200015b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620001668162000096565b50565b6000546001600160a01b03163314620001c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000152565b565b6001600160a01b03811681146200016657600080fd5b600080600080600080600080610100898b031215620001fb57600080fd5b88516200020881620001c7565b60208a01519098506200021b81620001c7565b8097505060408901519550606089015194506080890151935060a0890151925060c0890151915060e08901516200025281620001c7565b809150509295985092959890939650565b6080516145dd6200029b600039600081816102e5015281816119b901528181611e6e015281816133af015261345e01526145dd6000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80637113476211610130578063b3c0cfa4116100b8578063e279d9641161007c578063e279d96414610541578063ecb3dc881461054a578063ecd618f014610553578063eea1d19714610573578063f2fde38b1461058657600080fd5b8063b3c0cfa4146104e2578063b3fa4c01146104f5578063d089e11a14610508578063d55f960d1461051b578063d9478d201461052e57600080fd5b80639021578a116100ff5780639021578a146104025780639087beff1461047e5780639f9fb96814610491578063a1a954b7146104b1578063b02c43d0146104ba57600080fd5b806371134762146103c3578063715018a6146103d657806371a28f69146103de5780638da5cb5b146103f157600080fd5b80633e85fc25116101b35780635081d952116101825780635081d952146103615780635d108a22146103815780635dd7651514610394578063645006ca146103a757806366ec8419146103b057600080fd5b80633e85fc251461031f5780634298734914610332578063485cc95514610345578063495223e71461035857600080fd5b80632a80cda3116101fa5780632a80cda314610283578063317dcc9614610296578063392e53cd146102a95780633adba28a146102cd5780633e413bee146102e057600080fd5b80630f1ef98c1461022c578063133de6cb1461025257806314ec32fa14610267578063238c84941461027a575b600080fd5b61023f61023a366004613948565b610599565b6040519081526020015b60405180910390f35b610265610260366004613948565b610628565b005b61023f610275366004613948565b610685565b61023f600a5481565b61026561029136600461396c565b610712565b6102656102a436600461396c565b6107a4565b6002546102bd90600160a01b900460ff1681565b6040519015158152602001610249565b6102656102db366004613985565b6107e1565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b61026561032d3660046139ff565b610ee4565b61026561034036600461396c565b611013565b610265610353366004613a70565b6110b4565b61023f60085481565b61037461036f366004613948565b611147565b6040516102499190613bd1565b61026561038f366004613c5d565b611511565b6102656103a236600461396c565b611a82565b61023f60065481565b6102656103be36600461396c565b611b21565b6102656103d1366004613d49565b611cf0565b610265611ee3565b6103746103ec366004613d49565b611ef7565b6000546001600160a01b0316610307565b61044b61041036600461396c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610249565b61026561048c36600461396c565b6121e9565b6104a461049f36600461396c565b612280565b6040516102499190613dee565b61023f60095481565b6104cd6104c836600461396c565b612411565b60405161024999989796959493929190613e01565b61023f6104f0366004613948565b6124f6565b610265610503366004613948565b612507565b600154610307906001600160a01b031681565b61026561052936600461396c565b6125bf565b600b54610307906001600160a01b031681565b61023f60075481565b61023f600c5481565b610566610561366004613e5f565b6127df565b6040516102499190613ed3565b600254610307906001600160a01b031681565b610265610594366004613948565b6129d6565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f9190613f63565b8152602001908152602001600020600101549050919050565b610630612a4f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190613f63565b815260208101919091526040016000205492915050565b61071a612a4f565b8060000361076f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064015b60405180910390fd5b60068190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161067a565b6107ac612a4f565b60088190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161067a565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190613f7c565b6108995760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613f63565b60008581526004602081905260409182902060015481549351630359b09b60e31b81526001600160a01b039485169381019390935260248301859052939450929190911690631acd84d890604401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190613f7c565b6109e15760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610766565b6008546000838152600360205260409020600101544291610a0191613fb4565b1115610a5b5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610766565b60008281526003602052604090205415610ab75760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610766565b600154815460405163e0b490f760e01b81526001600160a01b0391821660048201528492919091169063e0b490f790602401602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613f63565b03610b775760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610766565b80546001600160a01b0316610bc75760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610766565b60008411610c265760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610766565b600754841115610c955760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610766565b6001600160a01b038316610ceb5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610766565b6000610cf78387612aa9565b90508482600601541015610dac57600080610d1188612b14565b9150915086818560060154610d269190613fb4565b1015610d6b5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610766565b610d758483612cbb565b80846006016000828254610d899190613fb4565b9250508190555080846007016000828254610da49190613fc7565b909155505050505b6040805160a0810182523381526001600160a01b0386811660208084019182528385018b8152606085018b81524260808701908152600089815260058552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558681529152908120829055600683018054879290610e53908490613fc7565b9250508190555084826007016000828254610e6e9190613fb4565b9091555050600982018054600181018255600091825260209182902001829055604080516001600160a01b038716815291820187905242908201528390879083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a4505050505050565b6000806000610ef4868686612d1d565b6040805160a08101825284546001600160a01b039081168252600186015416602082015260028501549181019190915260038401546060820152600490930154608084015291945092509050610f4a828261308c565b8260600151826007016000828254610f629190613fc7565b9091555050600154835160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190613f63565b8152602001908152602001600020600101819055506110018360400151836131d5565b61100b8184613352565b505050505050565b61101b612a4f565b8060000361107f5760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610766565b60098190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161067a565b6110bc612a4f565b600254600160a01b900460ff161561110c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610766565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60015460405163e0b490f760e01b81526001600160a01b0383811660048301526060926000926003928492169063e0b490f790602401602060405180830381865afa15801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190613f63565b815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561121957602002820191906000526020600020905b815481526020019060010190808311611205575b5050505050905080516001600160401b0381111561123957611239613cda565b60405190808252806020026020018201604052801561127257816020015b61125f613800565b8152602001906001900390816112575790505b50915060005b815181101561150a57600082828151811061129557611295613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b0316825260018101805494965092949193909291840191906112e390613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461130f90613ff0565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561141f57602002820191906000526020600020905b81548152602001906001019080831161140b575b5050505050815250509050600061143583612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f63565b8152602001838152602001828460c001516114d69190613fb4565b8152508685815181106114eb576114eb613fda565b60200260200101819052505050508061150390614024565b9050611278565b5050919050565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190613f7c565b6115c95760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190613f63565b9050600060036000838152602001908152602001600020905081898960405160200161166392919061403d565b60405160208183030381529060405280519060200120146116c65760405162461bcd60e51b815260206004820152601960248201527f5265766f6c757420746167206d757374206d61746368206964000000000000006044820152606401610766565b600281015460051161171a5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610766565b60065486101561178b5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610766565b600085116117e95760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610766565b6000856117fe670de0b6b3a76400008961406c565b6118089190614099565b600c8054919250600091908261181d83614024565b9091555060028401805460018101825560009182526020918290200182905560408051610140810182523381528151601f8f018490048402810184019092528d8252929350828201918e908e908190840183828082843760009201829052509385525050506001600160a01b03891660208084019190915260408084018a9052606084018d9052608084018e905260a084018d905260c0840183905260e084018790528051838152918201905261010090920191905090526000828152600460209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061191590826140f3565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e082015160078201556101008201516008820155610120820151805161199591600984019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018a90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2f9190613f7c565b508884827f94c4b6f8843ea372709c89bc4a9ed85ef74ab10a68713ffdddc31716a76a6c958b86604051611a6d929190918252602082015260400190565b60405180910390a45050505050505050505050565b611a8a612a4f565b66b1a2bc2ec50000811115611aec5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610766565b600a8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004938401546080840152865291909352922081519192909116611bc75760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b80546001600160a01b03163314611c205760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b611c2a818461308c565b8160600151816007016000828254611c429190613fc7565b9091555050600154825160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015611c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbe9190613f63565b815260200190815260200160002060010181905550611ce18260400151826131d5565b611ceb8383613352565b505050565b6000805b8251811015611e51576000838281518110611d1157611d11613fda565b6020908102919091018101516000818152600490925260409091208054919250906001600160a01b03163314611d895760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b600080611d9584612b14565b91509150611da38383612cbb565b808360060154611db39190613fb4565b611dbd9087613fb4565b955080836007016000828254611dd39190613fc7565b9091555050825460068401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611e1a908590613fb4565b60405190815260200160405180910390a360006006840155611e3c84846131d5565b5050505080611e4a90614024565b9050611cf4565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190613f7c565b611eeb612a4f565b611ef56000613530565b565b606081516001600160401b03811115611f1257611f12613cda565b604051908082528060200260200182016040528015611f4b57816020015b611f38613800565b815260200190600190039081611f305790505b50905060005b82518110156121e3576000838281518110611f6e57611f6e613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b031682526001810180549496509294919390929184019190611fbc90613ff0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890613ff0565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201548152602001600982018054806020026020016040519081016040528092919081815260200182805480156120f857602002820191906000526020600020905b8154815260200190600101908083116120e4575b5050505050815250509050600061210e83612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015612170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121949190613f63565b8152602001838152602001828460c001516121af9190613fb4565b8152508585815181106121c4576121c4613fda565b6020026020010181905250505050806121dc90614024565b9050611f51565b50919050565b6121f1612a4f565b8060000361224b5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610766565b60078190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161067a565b612288613877565b6000828152600460209081526040918290208251610140810190935280546001600160a01b0316835260018101805491928401916122c590613ff0565b80601f01602080910402602001604051908101604052809291908181526020018280546122f190613ff0565b801561233e5780601f106123135761010080835404028352916020019161233e565b820191906000526020600020905b81548152906001019060200180831161232157829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561240157602002820191906000526020600020905b8154815260200190600101908083116123ed575b5050505050815250509050919050565b600460205260009081526040902080546001820180546001600160a01b03909216929161243d90613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461246990613ff0565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b5050505060028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b03909516969395509193909289565b600061250182610685565b92915050565b61250f612a4f565b6001600160a01b0381166125715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610766565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361265c5760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b60015460405163e0b490f760e01b81523360048201526001600160a01b039091169063e0b490f790602401602060405180830381865afa1580156126a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c89190613f63565b600154825160405163e0b490f760e01b81526001600160a01b03918216600482015291169063e0b490f790602401602060405180830381865afa158015612713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127379190613f63565b146127845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b604080820151600090815260046020522061279f818461308c565b81606001518160060160008282546127b79190613fb4565b909155505060608201516007820180546000906127d5908490613fc7565b9091555050505050565b60606000826001600160401b038111156127fb576127fb613cda565b60405190808252806020026020018201604052801561287557816020015b61286260408051606080820183526000808352835160a0810185528181526020818101839052948101829052918201819052608082015290918201908152600060209091015290565b8152602001906001900390816128195790505b50905060005b838110156129ce57600085858381811061289757612897613fda565b60209081029290920135600081815260058452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061291657612916613fda565b60209081029290920135835250810183905260015483516040805163e0b490f760e01b81526001600160a01b03928316600482015293019291169063e0b490f790602401602060405180830381865afa158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b9190613f63565b8152508484815181106129b0576129b0613fda565b60200260200101819052505050806129c790614024565b905061287b565b509392505050565b6129de612a4f565b6001600160a01b038116612a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610766565b612a4c81613530565b50565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610766565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b0c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826141b2565b949350505050565b60008181526004602090815260408083206009018054825181850281018501909352808352606094938493929190830182828015612b7157602002820191906000526020600020905b815481526020019060010190808311612b5d575b5050505050905080516001600160401b03811115612b9157612b91613cda565b604051908082528060200260200182016040528015612bba578160200160208202803683370190505b50925060005b8151811015612cb457600060056000848481518110612be157612be1613fda565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190526009549192504291612c5491613fb4565b1015612ca357828281518110612c6c57612c6c613fda565b6020026020010151858381518110612c8657612c86613fda565b60209081029190910101526060810151612ca09085613fb4565b93505b50612cad81614024565b9050612bc0565b5050915091565b60005b8151811015611ceb576000801b828281518110612cdd57612cdd613fda565b602002602001015114612d0d57612d0d83838381518110612d0057612d00613fda565b602002602001015161308c565b612d1681614024565b9050612cbe565b610100830135600081815260056020526040812080549092906001600160a01b03163314612d8d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b60028084015460009081526004602052604080822092548151808301909252929450909182918291829182916001600160a01b031690630f2d076d9080612dd38f614235565b81526020018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525060028a01546040516001600160e01b031960e085901b168152612e4092916001600160a01b031690600401614397565b60a0604051808303816000875af1158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8391906144db565b9450945094509450945086600301548114612eef5760405162461bcd60e51b815260206004820152602660248201527f496e636f7272656374206e6f74617279207573656420666f72206e6f746172696044820152653d30ba34b7b760d11b6064820152608401610766565b86600501548214612f385760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c818dd5c9c995b98de481cd95b9d606a1b6044820152606401610766565b8388600401541115612f975760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610766565b8287600101604051602001612fac919061451b565b604051602081830303815290604052805190602001201461300f5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610766565b8660080154670de0b6b3a7640000896003015461302c919061406c565b6130369190614099565b85101561307e5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610766565b505050505093509350939050565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116808352600180850154831696840196909652600284015483860152600380850154606085015260049485015460808501529554945163e0b490f760e01b815293840152909492169063e0b490f790602401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131449190613f63565b8152602080820192909252604090810160009081208190558481526005909252812080546001600160a01b0319908116825560018201805490911690556002810182905560038101829055600401556131a06009840183613580565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816006015482600701546131eb9190613fb4565b905080600003611ceb57600154825460405163e0b490f760e01b81526001600160a01b039182166004820152613291928692600392600092919091169063e0b490f790602401602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132729190613f63565b81526020019081526020016000206002016136a890919063ffffffff16565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260046020526040812080546001600160a01b0319168155906132ff60018301826138ca565b6002820180546001600160a01b0319169055600060038301819055600483018190556005830181905560068301819055600783018190556008830181905561334b906009840190613904565b5050505050565b6000600a5460001461341e57670de0b6b3a7640000600a548360600151613379919061406c565b6133839190614099565b600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613f7c565b505b60008183606001516134309190613fc7565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156134a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cb9190613f7c565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806135dc848054806020026020016040519081016040528092919081815260200182805480156135d157602002820191906000526020600020905b8154815260200190600101908083116135bd575b50505050508461374d565b91509150806136255760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610766565b835460009061363690600190613fc7565b905080831461367b5784818154811061365157613651613fda565b906000526020600020015485848154811061366e5761366e613fda565b6000918252602090912001555b8480548061368b5761368b614591565b600190038181906000526020600020016000905590555050505050565b600080613704848054806020026020016040519081016040528092919081815260200182805480156136f957602002820191906000526020600020905b8154815260200190600101908083116136e5575b5050505050846137b0565b91509150806136255760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610766565b81516000908190815b8181101561379d578486828151811061377157613771613fda565b60200260200101510361378b579250600191506137a99050565b8061379581614024565b915050613756565b50600019600092509250505b9250929050565b81516000908190815b8181101561379d57848682815181106137d4576137d4613fda565b6020026020010151036137ee579250600191506137a99050565b806137f881614024565b9150506137b9565b604080516080810182526000808252602082015290810161381f613877565b8152602001600081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b5061387392915061391e565b5090565b604080516101408101825260008082526060602083018190529282018190528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261012081019190915290565b5080546138d690613ff0565b6000825580601f106138e6575050565b601f016020900490600052602060002090810190612a4c919061391e565b5080546000825590600052602060002090810190612a4c91905b5b80821115613873576000815560010161391f565b6001600160a01b0381168114612a4c57600080fd5b60006020828403121561395a57600080fd5b813561396581613933565b9392505050565b60006020828403121561397e57600080fd5b5035919050565b60008060006060848603121561399a57600080fd5b833592506020840135915060408401356139b381613933565b809150509250925092565b60008083601f8401126139d057600080fd5b5081356001600160401b038111156139e757600080fd5b6020830191508360208285010111156137a957600080fd5b600080600060408486031215613a1457600080fd5b83356001600160401b0380821115613a2b57600080fd5b908501906101408288031215613a4057600080fd5b90935060208501359080821115613a5657600080fd5b50613a63868287016139be565b9497909650939450505050565b60008060408385031215613a8357600080fd5b8235613a8e81613933565b91506020830135613a9e81613933565b809150509250929050565b6000815180845260005b81811015613acf57602081850181015186830182015201613ab3565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613b1f57815187529582019590820190600101613b03565b509495945050505050565b80516001600160a01b0316825260006101406020830151816020860152613b5382860182613aa9565b9150506040830151613b7060408601826001600160a01b03169052565b50606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015185830382870152613bc78382613aef565b9695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613c4f57603f1989840301855281516080815185528882015189860152878201518189870152613c2e82870182613b2a565b60609384015196909301959095525094870194925090860190600101613bf8565b509098975050505050505050565b600080600080600080600060c0888a031215613c7857600080fd5b87356001600160401b03811115613c8e57600080fd5b613c9a8a828b016139be565b9098509650506020880135945060408801359350606088013592506080880135613cc381613933565b8092505060a0880135905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613d1357613d13613cda565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613d4157613d41613cda565b604052919050565b60006020808385031215613d5c57600080fd5b82356001600160401b0380821115613d7357600080fd5b818501915085601f830112613d8757600080fd5b813581811115613d9957613d99613cda565b8060051b9150613daa848301613d19565b8181529183018401918481019088841115613dc457600080fd5b938501935b83851015613de257843582529385019390850190613dc9565b98975050505050505050565b6020815260006139656020830184613b2a565b6001600160a01b038a8116825261012060208301819052600091613e278483018d613aa9565b9a16604084015250506060810196909652608086019490945260a085019290925260c084015260e08301526101009091015292915050565b60008060208385031215613e7257600080fd5b82356001600160401b0380821115613e8957600080fd5b818501915085601f830112613e9d57600080fd5b813581811115613eac57600080fd5b8660208260051b8501011115613ec157600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613f56578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613ef0565b5091979650505050505050565b600060208284031215613f7557600080fd5b5051919050565b600060208284031215613f8e57600080fd5b8151801515811461396557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561250157612501613f9e565b8181038181111561250157612501613f9e565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061400457607f821691505b6020821081036121e357634e487b7160e01b600052602260045260246000fd5b60006001820161403657614036613f9e565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b808202811582820484141761250157612501613f9e565b634e487b7160e01b600052601260045260246000fd5b6000826140a8576140a8614083565b500490565b601f821115611ceb57600081815260208120601f850160051c810160208610156140d45750805b601f850160051c820191505b8181101561100b578281556001016140e0565b81516001600160401b0381111561410c5761410c613cda565b6141208161411a8454613ff0565b846140ad565b602080601f831160018114614155576000841561413d5750858301515b600019600386901b1c1916600185901b17855561100b565b600085815260208120601f198616915b8281101561418457888601518255948401946001909101908401614165565b50858210156141a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826141c1576141c1614083565b500690565b600082601f8301126141d757600080fd5b81356001600160401b038111156141f0576141f0613cda565b614203601f8201601f1916602001613d19565b81815284602083860101111561421857600080fd5b816020850160208301376000918101602001919091529392505050565b6000610140823603121561424857600080fd5b614250613cf0565b82356001600160401b038082111561426757600080fd5b614273368387016141c6565b8352602085013591508082111561428957600080fd5b614295368387016141c6565b602084015260408501359150808211156142ae57600080fd5b6142ba368387016141c6565b604084015260608501359150808211156142d357600080fd5b6142df368387016141c6565b606084015260808501359150808211156142f857600080fd5b614304368387016141c6565b608084015260a085013591508082111561431d57600080fd5b614329368387016141c6565b60a084015260c085013591508082111561434257600080fd5b61434e368387016141c6565b60c084015260e085013591508082111561436757600080fd5b50614374368286016141c6565b60e083015250610100838101359082015261012092830135928101929092525090565b604081526000835160408084015280516101408060808601526143be6101c0860183613aa9565b91506020830151607f19808785030160a08801526143dc8483613aa9565b935060408501519150808785030160c08801526143f98483613aa9565b935060608501519150808785030160e08801526144168483613aa9565b9350608085015191506101008188860301818901526144358584613aa9565b945060a086015192506101208289870301818a01526144548685613aa9565b955060c087015193508289870301858a01526144708685613aa9565b955060e0870151945082898703016101608a015261448e8686613aa9565b918701516101808a0152909501516101a0880152505050506020850151838203603f19016060850152906144c28183613aa9565b9250505061396560208301846001600160a01b03169052565b600080600080600060a086880312156144f357600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600080835461452981613ff0565b60018281168015614541576001811461455657614585565b60ff1984168752821515830287019450614585565b8760005260208060002060005b8581101561457c5781548a820152908401908201614563565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200c1dd6603fe23e3215869ddb17de6764c2212ab6a689276b98bc4ec806c8a8df64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106102275760003560e01c80637113476211610130578063b3c0cfa4116100b8578063e279d9641161007c578063e279d96414610541578063ecb3dc881461054a578063ecd618f014610553578063eea1d19714610573578063f2fde38b1461058657600080fd5b8063b3c0cfa4146104e2578063b3fa4c01146104f5578063d089e11a14610508578063d55f960d1461051b578063d9478d201461052e57600080fd5b80639021578a116100ff5780639021578a146104025780639087beff1461047e5780639f9fb96814610491578063a1a954b7146104b1578063b02c43d0146104ba57600080fd5b806371134762146103c3578063715018a6146103d657806371a28f69146103de5780638da5cb5b146103f157600080fd5b80633e85fc25116101b35780635081d952116101825780635081d952146103615780635d108a22146103815780635dd7651514610394578063645006ca146103a757806366ec8419146103b057600080fd5b80633e85fc251461031f5780634298734914610332578063485cc95514610345578063495223e71461035857600080fd5b80632a80cda3116101fa5780632a80cda314610283578063317dcc9614610296578063392e53cd146102a95780633adba28a146102cd5780633e413bee146102e057600080fd5b80630f1ef98c1461022c578063133de6cb1461025257806314ec32fa14610267578063238c84941461027a575b600080fd5b61023f61023a366004613948565b610599565b6040519081526020015b60405180910390f35b610265610260366004613948565b610628565b005b61023f610275366004613948565b610685565b61023f600a5481565b61026561029136600461396c565b610712565b6102656102a436600461396c565b6107a4565b6002546102bd90600160a01b900460ff1681565b6040519015158152602001610249565b6102656102db366004613985565b6107e1565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b61026561032d3660046139ff565b610ee4565b61026561034036600461396c565b611013565b610265610353366004613a70565b6110b4565b61023f60085481565b61037461036f366004613948565b611147565b6040516102499190613bd1565b61026561038f366004613c5d565b611511565b6102656103a236600461396c565b611a82565b61023f60065481565b6102656103be36600461396c565b611b21565b6102656103d1366004613d49565b611cf0565b610265611ee3565b6103746103ec366004613d49565b611ef7565b6000546001600160a01b0316610307565b61044b61041036600461396c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610249565b61026561048c36600461396c565b6121e9565b6104a461049f36600461396c565b612280565b6040516102499190613dee565b61023f60095481565b6104cd6104c836600461396c565b612411565b60405161024999989796959493929190613e01565b61023f6104f0366004613948565b6124f6565b610265610503366004613948565b612507565b600154610307906001600160a01b031681565b61026561052936600461396c565b6125bf565b600b54610307906001600160a01b031681565b61023f60075481565b61023f600c5481565b610566610561366004613e5f565b6127df565b6040516102499190613ed3565b600254610307906001600160a01b031681565b610265610594366004613948565b6129d6565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f9190613f63565b8152602001908152602001600020600101549050919050565b610630612a4f565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60015460405163e0b490f760e01b81526001600160a01b03838116600483015260009260039284929091169063e0b490f790602401602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb9190613f63565b815260208101919091526040016000205492915050565b61071a612a4f565b8060000361076f5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f000060448201526064015b60405180910390fd5b60068190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc9060200161067a565b6107ac612a4f565b60088190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e9060200161067a565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084d9190613f7c565b6108995760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190613f63565b60008581526004602081905260409182902060015481549351630359b09b60e31b81526001600160a01b039485169381019390935260248301859052939450929190911690631acd84d890604401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190613f7c565b6109e15760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c6973746044820152606401610766565b6008546000838152600360205260409020600101544291610a0191613fb4565b1115610a5b5760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b6064820152608401610766565b60008281526003602052604090205415610ab75760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e6700000000000000006044820152606401610766565b600154815460405163e0b490f760e01b81526001600160a01b0391821660048201528492919091169063e0b490f790602401602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613f63565b03610b775760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f7200006044820152606401610766565b80546001600160a01b0316610bc75760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610766565b60008411610c265760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610766565b600754841115610c955760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b6064820152608401610766565b6001600160a01b038316610ceb5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f206164647265737300000000006044820152606401610766565b6000610cf78387612aa9565b90508482600601541015610dac57600080610d1188612b14565b9150915086818560060154610d269190613fb4565b1015610d6b5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b6044820152606401610766565b610d758483612cbb565b80846006016000828254610d899190613fb4565b9250508190555080846007016000828254610da49190613fc7565b909155505050505b6040805160a0810182523381526001600160a01b0386811660208084019182528385018b8152606085018b81524260808701908152600089815260058552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558681529152908120829055600683018054879290610e53908490613fc7565b9250508190555084826007016000828254610e6e9190613fb4565b9091555050600982018054600181018255600091825260209182902001829055604080516001600160a01b038716815291820187905242908201528390879083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a4505050505050565b6000806000610ef4868686612d1d565b6040805160a08101825284546001600160a01b039081168252600186015416602082015260028501549181019190915260038401546060820152600490930154608084015291945092509050610f4a828261308c565b8260600151826007016000828254610f629190613fc7565b9091555050600154835160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde9190613f63565b8152602001908152602001600020600101819055506110018360400151836131d5565b61100b8184613352565b505050505050565b61101b612a4f565b8060000361107f5760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b6064820152608401610766565b60098190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a8039060200161067a565b6110bc612a4f565b600254600160a01b900460ff161561110c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610766565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60015460405163e0b490f760e01b81526001600160a01b0383811660048301526060926000926003928492169063e0b490f790602401602060405180830381865afa15801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190613f63565b815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561121957602002820191906000526020600020905b815481526020019060010190808311611205575b5050505050905080516001600160401b0381111561123957611239613cda565b60405190808252806020026020018201604052801561127257816020015b61125f613800565b8152602001906001900390816112575790505b50915060005b815181101561150a57600082828151811061129557611295613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b0316825260018101805494965092949193909291840191906112e390613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461130f90613ff0565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561141f57602002820191906000526020600020905b81548152602001906001019080831161140b575b5050505050815250509050600061143583612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f63565b8152602001838152602001828460c001516114d69190613fb4565b8152508685815181106114eb576114eb613fda565b60200260200101819052505050508061150390614024565b9050611278565b5050919050565b600154604051631f5bdf5d60e01b81523360048201526001600160a01b0390911690631f5bdf5d90602401602060405180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190613f7c565b6115c95760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206d7573742062652072656769737465726564207573657200006044820152606401610766565b60015460405163e0b490f760e01b81523360048201526000916001600160a01b03169063e0b490f790602401602060405180830381865afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190613f63565b9050600060036000838152602001908152602001600020905081898960405160200161166392919061403d565b60405160208183030381529060405280519060200120146116c65760405162461bcd60e51b815260206004820152601960248201527f5265766f6c757420746167206d757374206d61746368206964000000000000006044820152606401610766565b600281015460051161171a5760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e74207265616368656400006044820152606401610766565b60065486101561178b5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b6064820152608401610766565b600085116117e95760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610766565b6000856117fe670de0b6b3a76400008961406c565b6118089190614099565b600c8054919250600091908261181d83614024565b9091555060028401805460018101825560009182526020918290200182905560408051610140810182523381528151601f8f018490048402810184019092528d8252929350828201918e908e908190840183828082843760009201829052509385525050506001600160a01b03891660208084019190915260408084018a9052606084018d9052608084018e905260a084018d905260c0840183905260e084018790528051838152918201905261010090920191905090526000828152600460209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061191590826140f3565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e082015160078201556101008201516008820155610120820151805161199591600984019160209091019061382c565b50506040516323b872dd60e01b8152336004820152306024820152604481018a90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af1158015611a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2f9190613f7c565b508884827f94c4b6f8843ea372709c89bc4a9ed85ef74ab10a68713ffdddc31716a76a6c958b86604051611a6d929190918252602082015260400190565b60405180910390a45050505050505050505050565b611a8a612a4f565b66b1a2bc2ec50000811115611aec5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b6064820152608401610766565b600a8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e7256709060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004938401546080840152865291909352922081519192909116611bc75760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b80546001600160a01b03163314611c205760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b611c2a818461308c565b8160600151816007016000828254611c429190613fc7565b9091555050600154825160405163e0b490f760e01b81526001600160a01b039182166004820152429260039260009291169063e0b490f790602401602060405180830381865afa158015611c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbe9190613f63565b815260200190815260200160002060010181905550611ce18260400151826131d5565b611ceb8383613352565b505050565b6000805b8251811015611e51576000838281518110611d1157611d11613fda565b6020908102919091018101516000818152600490925260409091208054919250906001600160a01b03163314611d895760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f72000000006044820152606401610766565b600080611d9584612b14565b91509150611da38383612cbb565b808360060154611db39190613fb4565b611dbd9087613fb4565b955080836007016000828254611dd39190613fc7565b9091555050825460068401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611e1a908590613fb4565b60405190815260200160405180910390a360006006840155611e3c84846131d5565b5050505080611e4a90614024565b9050611cf4565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190613f7c565b611eeb612a4f565b611ef56000613530565b565b606081516001600160401b03811115611f1257611f12613cda565b604051908082528060200260200182016040528015611f4b57816020015b611f38613800565b815260200190600190039081611f305790505b50905060005b82518110156121e3576000838281518110611f6e57611f6e613fda565b60209081029190910181015160008181526004835260408082208151610140810190925280546001600160a01b031682526001810180549496509294919390929184019190611fbc90613ff0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890613ff0565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201548152602001600982018054806020026020016040519081016040528092919081815260200182805480156120f857602002820191906000526020600020905b8154815260200190600101908083116120e4575b5050505050815250509050600061210e83612b14565b604080516080810182528681526001548651925163e0b490f760e01b81526001600160a01b039384166004820152939550909350602084019291169063e0b490f790602401602060405180830381865afa158015612170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121949190613f63565b8152602001838152602001828460c001516121af9190613fb4565b8152508585815181106121c4576121c4613fda565b6020026020010181905250505050806121dc90614024565b9050611f51565b50919050565b6121f1612a4f565b8060000361224b5760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b6064820152608401610766565b60078190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b399060200161067a565b612288613877565b6000828152600460209081526040918290208251610140810190935280546001600160a01b0316835260018101805491928401916122c590613ff0565b80601f01602080910402602001604051908101604052809291908181526020018280546122f190613ff0565b801561233e5780601f106123135761010080835404028352916020019161233e565b820191906000526020600020905b81548152906001019060200180831161232157829003601f168201915b505050505081526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180548060200260200160405190810160405280929190818152602001828054801561240157602002820191906000526020600020905b8154815260200190600101908083116123ed575b5050505050815250509050919050565b600460205260009081526040902080546001820180546001600160a01b03909216929161243d90613ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461246990613ff0565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b5050505060028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b03909516969395509193909289565b600061250182610685565b92915050565b61250f612a4f565b6001600160a01b0381166125715760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610766565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e49060200161067a565b6000818152600560209081526040808320815160a08101835281546001600160a01b0390811682526001830154169381019390935260028101549183019190915260038101546060830152600401546080820181905290910361265c5760405162461bcd60e51b8152602060048201526015602482015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606401610766565b60015460405163e0b490f760e01b81523360048201526001600160a01b039091169063e0b490f790602401602060405180830381865afa1580156126a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c89190613f63565b600154825160405163e0b490f760e01b81526001600160a01b03918216600482015291169063e0b490f790602401602060405180830381865afa158015612713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127379190613f63565b146127845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b604080820151600090815260046020522061279f818461308c565b81606001518160060160008282546127b79190613fb4565b909155505060608201516007820180546000906127d5908490613fc7565b9091555050505050565b60606000826001600160401b038111156127fb576127fb613cda565b60405190808252806020026020018201604052801561287557816020015b61286260408051606080820183526000808352835160a0810185528181526020818101839052948101829052918201819052608082015290918201908152600060209091015290565b8152602001906001900390816128195790505b50905060005b838110156129ce57600085858381811061289757612897613fda565b60209081029290920135600081815260058452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061291657612916613fda565b60209081029290920135835250810183905260015483516040805163e0b490f760e01b81526001600160a01b03928316600482015293019291169063e0b490f790602401602060405180830381865afa158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b9190613f63565b8152508484815181106129b0576129b0613fda565b60200260200101819052505050806129c790614024565b905061287b565b509392505050565b6129de612a4f565b6001600160a01b038116612a435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610766565b612a4c81613530565b50565b6000546001600160a01b03163314611ef55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610766565b6040805160208101849052908101829052426060820152600090819060800160408051601f1981840301815291905280516020909101209050612b0c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826141b2565b949350505050565b60008181526004602090815260408083206009018054825181850281018501909352808352606094938493929190830182828015612b7157602002820191906000526020600020905b815481526020019060010190808311612b5d575b5050505050905080516001600160401b03811115612b9157612b91613cda565b604051908082528060200260200182016040528015612bba578160200160208202803683370190505b50925060005b8151811015612cb457600060056000848481518110612be157612be1613fda565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190526009549192504291612c5491613fb4565b1015612ca357828281518110612c6c57612c6c613fda565b6020026020010151858381518110612c8657612c86613fda565b60209081029190910101526060810151612ca09085613fb4565b93505b50612cad81614024565b9050612bc0565b5050915091565b60005b8151811015611ceb576000801b828281518110612cdd57612cdd613fda565b602002602001015114612d0d57612d0d83838381518110612d0057612d00613fda565b602002602001015161308c565b612d1681614024565b9050612cbe565b610100830135600081815260056020526040812080549092906001600160a01b03163314612d8d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206f6e2d72616d706572000000006044820152606401610766565b60028084015460009081526004602052604080822092548151808301909252929450909182918291829182916001600160a01b031690630f2d076d9080612dd38f614235565b81526020018d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525060028a01546040516001600160e01b031960e085901b168152612e4092916001600160a01b031690600401614397565b60a0604051808303816000875af1158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8391906144db565b9450945094509450945086600301548114612eef5760405162461bcd60e51b815260206004820152602660248201527f496e636f7272656374206e6f74617279207573656420666f72206e6f746172696044820152653d30ba34b7b760d11b6064820152608401610766565b86600501548214612f385760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c818dd5c9c995b98de481cd95b9d606a1b6044820152606401610766565b8388600401541115612f975760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b6064820152608401610766565b8287600101604051602001612fac919061451b565b604051602081830303815290604052805190602001201461300f5760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d6174636800000000006044820152606401610766565b8660080154670de0b6b3a7640000896003015461302c919061406c565b6130369190614099565b85101561307e5760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b6044820152606401610766565b505050505093509350939050565b6000818152600560209081526040808320815160a08101835281546001600160a01b03908116808352600180850154831696840196909652600284015483860152600380850154606085015260049485015460808501529554945163e0b490f760e01b815293840152909492169063e0b490f790602401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131449190613f63565b8152602080820192909252604090810160009081208190558481526005909252812080546001600160a01b0319908116825560018201805490911690556002810182905560038101829055600401556131a06009840183613580565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b6000816006015482600701546131eb9190613fb4565b905080600003611ceb57600154825460405163e0b490f760e01b81526001600160a01b039182166004820152613291928692600392600092919091169063e0b490f790602401602060405180830381865afa15801561324e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132729190613f63565b81526020019081526020016000206002016136a890919063ffffffff16565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260046020526040812080546001600160a01b0319168155906132ff60018301826138ca565b6002820180546001600160a01b0319169055600060038301819055600483018190556005830181905560068301819055600783018190556008830181905561334b906009840190613904565b5050505050565b6000600a5460001461341e57670de0b6b3a7640000600a548360600151613379919061406c565b6133839190614099565b600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190613f7c565b505b60008183606001516134309190613fc7565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156134a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134cb9190613f7c565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806135dc848054806020026020016040519081016040528092919081815260200182805480156135d157602002820191906000526020600020905b8154815260200190600101908083116135bd575b50505050508461374d565b91509150806136255760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b6044820152606401610766565b835460009061363690600190613fc7565b905080831461367b5784818154811061365157613651613fda565b906000526020600020015485848154811061366e5761366e613fda565b6000918252602090912001555b8480548061368b5761368b614591565b600190038181906000526020600020016000905590555050505050565b600080613704848054806020026020016040519081016040528092919081815260200182805480156136f957602002820191906000526020600020905b8154815260200190600101908083116136e5575b5050505050846137b0565b91509150806136255760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b6044820152606401610766565b81516000908190815b8181101561379d578486828151811061377157613771613fda565b60200260200101510361378b579250600191506137a99050565b8061379581614024565b915050613756565b50600019600092509250505b9250929050565b81516000908190815b8181101561379d57848682815181106137d4576137d4613fda565b6020026020010151036137ee579250600191506137a99050565b806137f881614024565b9150506137b9565b604080516080810182526000808252602082015290810161381f613877565b8152602001600081525090565b828054828255906000526020600020908101928215613867579160200282015b8281111561386757825182559160200191906001019061384c565b5061387392915061391e565b5090565b604080516101408101825260008082526060602083018190529282018190528282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015261012081019190915290565b5080546138d690613ff0565b6000825580601f106138e6575050565b601f016020900490600052602060002090810190612a4c919061391e565b5080546000825590600052602060002090810190612a4c91905b5b80821115613873576000815560010161391f565b6001600160a01b0381168114612a4c57600080fd5b60006020828403121561395a57600080fd5b813561396581613933565b9392505050565b60006020828403121561397e57600080fd5b5035919050565b60008060006060848603121561399a57600080fd5b833592506020840135915060408401356139b381613933565b809150509250925092565b60008083601f8401126139d057600080fd5b5081356001600160401b038111156139e757600080fd5b6020830191508360208285010111156137a957600080fd5b600080600060408486031215613a1457600080fd5b83356001600160401b0380821115613a2b57600080fd5b908501906101408288031215613a4057600080fd5b90935060208501359080821115613a5657600080fd5b50613a63868287016139be565b9497909650939450505050565b60008060408385031215613a8357600080fd5b8235613a8e81613933565b91506020830135613a9e81613933565b809150509250929050565b6000815180845260005b81811015613acf57602081850181015186830182015201613ab3565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613b1f57815187529582019590820190600101613b03565b509495945050505050565b80516001600160a01b0316825260006101406020830151816020860152613b5382860182613aa9565b9150506040830151613b7060408601826001600160a01b03169052565b50606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015185830382870152613bc78382613aef565b9695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015613c4f57603f1989840301855281516080815185528882015189860152878201518189870152613c2e82870182613b2a565b60609384015196909301959095525094870194925090860190600101613bf8565b509098975050505050505050565b600080600080600080600060c0888a031215613c7857600080fd5b87356001600160401b03811115613c8e57600080fd5b613c9a8a828b016139be565b9098509650506020880135945060408801359350606088013592506080880135613cc381613933565b8092505060a0880135905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613d1357613d13613cda565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613d4157613d41613cda565b604052919050565b60006020808385031215613d5c57600080fd5b82356001600160401b0380821115613d7357600080fd5b818501915085601f830112613d8757600080fd5b813581811115613d9957613d99613cda565b8060051b9150613daa848301613d19565b8181529183018401918481019088841115613dc457600080fd5b938501935b83851015613de257843582529385019390850190613dc9565b98975050505050505050565b6020815260006139656020830184613b2a565b6001600160a01b038a8116825261012060208301819052600091613e278483018d613aa9565b9a16604084015250506060810196909652608086019490945260a085019290925260c084015260e08301526101009091015292915050565b60008060208385031215613e7257600080fd5b82356001600160401b0380821115613e8957600080fd5b818501915085601f830112613e9d57600080fd5b813581811115613eac57600080fd5b8660208260051b8501011115613ec157600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613f56578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613ef0565b5091979650505050505050565b600060208284031215613f7557600080fd5b5051919050565b600060208284031215613f8e57600080fd5b8151801515811461396557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561250157612501613f9e565b8181038181111561250157612501613f9e565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061400457607f821691505b6020821081036121e357634e487b7160e01b600052602260045260246000fd5b60006001820161403657614036613f9e565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b808202811582820484141761250157612501613f9e565b634e487b7160e01b600052601260045260246000fd5b6000826140a8576140a8614083565b500490565b601f821115611ceb57600081815260208120601f850160051c810160208610156140d45750805b601f850160051c820191505b8181101561100b578281556001016140e0565b81516001600160401b0381111561410c5761410c613cda565b6141208161411a8454613ff0565b846140ad565b602080601f831160018114614155576000841561413d5750858301515b600019600386901b1c1916600185901b17855561100b565b600085815260208120601f198616915b8281101561418457888601518255948401946001909101908401614165565b50858210156141a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826141c1576141c1614083565b500690565b600082601f8301126141d757600080fd5b81356001600160401b038111156141f0576141f0613cda565b614203601f8201601f1916602001613d19565b81815284602083860101111561421857600080fd5b816020850160208301376000918101602001919091529392505050565b6000610140823603121561424857600080fd5b614250613cf0565b82356001600160401b038082111561426757600080fd5b614273368387016141c6565b8352602085013591508082111561428957600080fd5b614295368387016141c6565b602084015260408501359150808211156142ae57600080fd5b6142ba368387016141c6565b604084015260608501359150808211156142d357600080fd5b6142df368387016141c6565b606084015260808501359150808211156142f857600080fd5b614304368387016141c6565b608084015260a085013591508082111561431d57600080fd5b614329368387016141c6565b60a084015260c085013591508082111561434257600080fd5b61434e368387016141c6565b60c084015260e085013591508082111561436757600080fd5b50614374368286016141c6565b60e083015250610100838101359082015261012092830135928101929092525090565b604081526000835160408084015280516101408060808601526143be6101c0860183613aa9565b91506020830151607f19808785030160a08801526143dc8483613aa9565b935060408501519150808785030160c08801526143f98483613aa9565b935060608501519150808785030160e08801526144168483613aa9565b9350608085015191506101008188860301818901526144358584613aa9565b945060a086015192506101208289870301818a01526144548685613aa9565b955060c087015193508289870301858a01526144708685613aa9565b955060e0870151945082898703016101608a015261448e8686613aa9565b918701516101808a0152909501516101a0880152505050506020850151838203603f19016060850152906144c28183613aa9565b9250505061396560208301846001600160a01b03169052565b600080600080600060a086880312156144f357600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600080835461452981613ff0565b60018281168015614541576001811461455657614585565b60ff1984168752821515830287019450614585565b8760005260208060002060005b8581101561457c5781548a820152908401908201614563565b50505082870194505b50929695505050505050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212200c1dd6603fe23e3215869ddb17de6764c2212ab6a689276b98bc4ec806c8a8df64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_accountRegistry\": \"Account Registry contract for Revolut\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(string,bytes32,uint256,uint256,address,bytes32)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_notaryKeyHash\": \"Hash of the notary public key that is required to do notarization\",\n          \"_receiveAmount\": \"The amount of USD to receive\",\n          \"_receiveCurrencyId\": \"Id of the currency to be received off-chain\",\n          \"_revolutTag\": \"Depositor's Revolut tag to receive payments\",\n          \"_verifierSigningKey\": \"Public key of the verifier depositor wants to sign the TLS proof\"\n        }\n      },\n      \"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\": {\n        \"params\": {\n          \"_sendData\": \"Struct containing unredacted data from API call to Revolut\",\n          \"_verifierSignature\": \"Signature by verifier of the unredacted data\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(string,bytes32,uint256,uint256,address,bytes32)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp((string,string,string,string,string,string,string,string,uint256,uint256),bytes)\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 13477,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"accountRegistry\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRevolutAccountRegistry)15445\"\n      },\n      {\n        \"astId\": 13480,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(IRevolutSendProcessor)15493\"\n      },\n      {\n        \"astId\": 13482,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 13487,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)13446_storage)\"\n      },\n      {\n        \"astId\": 13492,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)13409_storage)\"\n      },\n      {\n        \"astId\": 13497,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)13430_storage)\"\n      },\n      {\n        \"astId\": 13499,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13501,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13503,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13505,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13507,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 13509,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 13511,\n        \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRevolutAccountRegistry)15445\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutAccountRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(IRevolutSendProcessor)15493\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRevolutSendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)13446_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutRamp.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)13446_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)13430_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct RevolutRamp.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)13430_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)13409_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct RevolutRamp.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)13409_storage\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_struct(Deposit)13409_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 13389,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13391,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"revolutTag\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_string_storage\"\n          },\n          {\n            \"astId\": 13393,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"verifierSigningKey\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13395,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"notaryKeyHash\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13397,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13399,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"receiveCurrencyId\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13401,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13403,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13405,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13408,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"9\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"320\"\n      },\n      \"t_struct(GlobalAccountInfo)13446_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 13440,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 13442,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13445,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_struct(Intent)13430_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct RevolutRamp.Intent\",\n        \"members\": [\n          {\n            \"astId\": 13421,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13423,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 13425,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13427,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 13429,\n            \"contract\": \"contracts/ramps/revolut/RevolutRamp.sol:RevolutRamp\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/RevolutSendProcessor.json",
    "content": "{\n  \"address\": \"0xB3017240379888Ba2022351Ab6fd4fB0b8FF5e23\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_endpoint\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_host\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PAYMENT_STATUS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"endpoint\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"host\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"endpoint\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"host\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"transferId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"recipientId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"amount\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"currencyId\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"status\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"string\",\n                  \"name\": \"timestamp\",\n                  \"type\": \"string\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentHash\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"notaryKeyHash\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct IRevolutSendProcessor.SendData\",\n              \"name\": \"public_values\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"proof\",\n              \"type\": \"bytes\"\n            }\n          ],\n          \"internalType\": \"struct IRevolutSendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_verifierSigningKey\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"currencyId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"notaryKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc4e32429cb247ad0addc7a708992a2061ed8a42cee5c78cc2af3c17890dbeb55\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xB3017240379888Ba2022351Ab6fd4fB0b8FF5e23\",\n    \"transactionIndex\": 37,\n    \"gasUsed\": \"1724789\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000100000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x4d5f161b7d71133223e1384fd68dd0bd30c3ddc9853698885026fa65ab20c882\",\n    \"transactionHash\": \"0xc4e32429cb247ad0addc7a708992a2061ed8a42cee5c78cc2af3c17890dbeb55\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 37,\n        \"blockNumber\": 5864685,\n        \"transactionHash\": \"0xc4e32429cb247ad0addc7a708992a2061ed8a42cee5c78cc2af3c17890dbeb55\",\n        \"address\": \"0xB3017240379888Ba2022351Ab6fd4fB0b8FF5e23\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 161,\n        \"blockHash\": \"0x4d5f161b7d71133223e1384fd68dd0bd30c3ddc9853698885026fa65ab20c882\"\n      }\n    ],\n    \"blockNumber\": 5864685,\n    \"cumulativeGasUsed\": \"9392247\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x11E267C4861BBF3AA3368Bb78dE2Cdb380c9000D\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"30\",\n    \"GET https://app.revolut.com/api/retail/transaction/*\",\n    \"app.revolut.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"8bc81ff8830ebb82cab81dfebf9e965a\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_host\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PAYMENT_STATUS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"endpoint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"host\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"endpoint\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"host\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"transferId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"recipientId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendData\\\",\\\"name\\\":\\\"public_values\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"proof\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"internalType\\\":\\\"struct IRevolutSendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_verifierSigningKey\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"currencyId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"notaryKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated TLS calls\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/revolut/RevolutSendProcessor.sol\\\":\\\"RevolutSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/interfaces/IERC1271.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC1271 standard signature validation method for\\\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC1271 {\\\\n    /**\\\\n     * @dev Should return whether the signature provided is valid for the provided data\\\\n     * @param hash      Hash of the data to be signed\\\\n     * @param signature Signature byte array associated with _data\\\\n     */\\\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Strings.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./math/Math.sol\\\\\\\";\\\\nimport \\\\\\\"./math/SignedMath.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev String operations.\\\\n */\\\\nlibrary Strings {\\\\n    bytes16 private constant _SYMBOLS = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            uint256 length = Math.log10(value) + 1;\\\\n            string memory buffer = new string(length);\\\\n            uint256 ptr;\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                ptr := add(buffer, add(32, length))\\\\n            }\\\\n            while (true) {\\\\n                ptr--;\\\\n                /// @solidity memory-safe-assembly\\\\n                assembly {\\\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\\\n                }\\\\n                value /= 10;\\\\n                if (value == 0) break;\\\\n            }\\\\n            return buffer;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\\\n     */\\\\n    function toString(int256 value) internal pure returns (string memory) {\\\\n        return string(abi.encodePacked(value < 0 ? \\\\\\\"-\\\\\\\" : \\\\\\\"\\\\\\\", toString(SignedMath.abs(value))));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\\\n        unchecked {\\\\n            return toHexString(value, Math.log256(value) + 1);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n     */\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = _SYMBOLS[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\\\n     */\\\\n    function toHexString(address addr) internal pure returns (string memory) {\\\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns true if the two strings are equal.\\\\n     */\\\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../Strings.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\\\n *\\\\n * These functions can be used to verify that a message was signed by the holder\\\\n * of the private keys of a given address.\\\\n */\\\\nlibrary ECDSA {\\\\n    enum RecoverError {\\\\n        NoError,\\\\n        InvalidSignature,\\\\n        InvalidSignatureLength,\\\\n        InvalidSignatureS,\\\\n        InvalidSignatureV // Deprecated in v4.8\\\\n    }\\\\n\\\\n    function _throwError(RecoverError error) private pure {\\\\n        if (error == RecoverError.NoError) {\\\\n            return; // no error: do nothing\\\\n        } else if (error == RecoverError.InvalidSignature) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature length\\\\\\\");\\\\n        } else if (error == RecoverError.InvalidSignatureS) {\\\\n            revert(\\\\\\\"ECDSA: invalid signature 's' value\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature` or error string. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     *\\\\n     * Documentation for signature generation:\\\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\\\n        if (signature.length == 65) {\\\\n            bytes32 r;\\\\n            bytes32 s;\\\\n            uint8 v;\\\\n            // ecrecover takes the signature parameters, and the only way to get them\\\\n            // currently is to use assembly.\\\\n            /// @solidity memory-safe-assembly\\\\n            assembly {\\\\n                r := mload(add(signature, 0x20))\\\\n                s := mload(add(signature, 0x40))\\\\n                v := byte(0, mload(add(signature, 0x60)))\\\\n            }\\\\n            return tryRecover(hash, v, r, s);\\\\n        } else {\\\\n            return (address(0), RecoverError.InvalidSignatureLength);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\\\n     * `signature`. This address can then be used for verification purposes.\\\\n     *\\\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\\\n     * this function rejects them by requiring the `s` value to be in the lower\\\\n     * half order, and the `v` value to be either 27 or 28.\\\\n     *\\\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\\\n     * verification to be secure: it is possible to craft signatures that\\\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\\\n     * this is by receiving a hash of the original message (which may otherwise\\\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\\\n     */\\\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\\\n     *\\\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\\\n        return tryRecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\\\n     *\\\\n     * _Available since v4.2._\\\\n     */\\\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     *\\\\n     * _Available since v4.3._\\\\n     */\\\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\\\n        // the valid range for s in (301): 0 < s < secp256k1n \\\\u00f7 2 + 1, and for v in (302): v \\\\u2208 {27, 28}. Most\\\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\\\n        //\\\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\\\n        // these malleable signatures as well.\\\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\\\n            return (address(0), RecoverError.InvalidSignatureS);\\\\n        }\\\\n\\\\n        // If the signature is valid (and not malleable), return the signer address\\\\n        address signer = ecrecover(hash, v, r, s);\\\\n        if (signer == address(0)) {\\\\n            return (address(0), RecoverError.InvalidSignature);\\\\n        }\\\\n\\\\n        return (signer, RecoverError.NoError);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\\\n     * `r` and `s` signature fields separately.\\\\n     */\\\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\\\n        _throwError(error);\\\\n        return recovered;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\\\n        // 32 is the length in bytes of hash,\\\\n        // enforced by the type signature above\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            mstore(0x00, \\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\")\\\\n            mstore(0x1c, hash)\\\\n            message := keccak256(0x00, 0x3c)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\\\n     * produces hash corresponding to the one signed with the\\\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\\\n     * JSON-RPC method as part of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n\\\\\\\", Strings.toString(s.length), s));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\\\n     * to the one signed with the\\\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\\\n     * JSON-RPC method as part of EIP-712.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\\\n        /// @solidity memory-safe-assembly\\\\n        assembly {\\\\n            let ptr := mload(0x40)\\\\n            mstore(ptr, \\\\\\\"\\\\\\\\x19\\\\\\\\x01\\\\\\\")\\\\n            mstore(add(ptr, 0x02), domainSeparator)\\\\n            mstore(add(ptr, 0x22), structHash)\\\\n            data := keccak256(ptr, 0x42)\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\\\n     * `validator` and `data` according to the version 0 of EIP-191.\\\\n     *\\\\n     * See {recover}.\\\\n     */\\\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\\\n        return keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19\\\\\\\\x00\\\\\\\", validator, data));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./ECDSA.sol\\\\\\\";\\\\nimport \\\\\\\"../../interfaces/IERC1271.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\\\n * Argent and Gnosis Safe.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\nlibrary SignatureChecker {\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\\\n        return\\\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\\\n            isValidERC1271SignatureNow(signer, hash, signature);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\\\n     * against the signer smart contract using ERC1271.\\\\n     *\\\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\\\n     */\\\\n    function isValidERC1271SignatureNow(\\\\n        address signer,\\\\n        bytes32 hash,\\\\n        bytes memory signature\\\\n    ) internal view returns (bool) {\\\\n        (bool success, bytes memory result) = signer.staticcall(\\\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\\\n        );\\\\n        return (success &&\\\\n            result.length >= 32 &&\\\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x3af3ca86df39aac39a0514c84459d691434a108d2151c8ce9d69f32e315cab80\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/Math.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard math utilities missing in the Solidity language.\\\\n */\\\\nlibrary Math {\\\\n    enum Rounding {\\\\n        Down, // Toward negative infinity\\\\n        Up, // Toward infinity\\\\n        Zero // Toward zero\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the largest of two numbers.\\\\n     */\\\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two numbers.\\\\n     */\\\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two numbers. The result is rounded towards\\\\n     * zero.\\\\n     */\\\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b) / 2 can overflow.\\\\n        return (a & b) + (a ^ b) / 2;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the ceiling of the division of two numbers.\\\\n     *\\\\n     * This differs from standard division with `/` in that it rounds up instead\\\\n     * of rounding down.\\\\n     */\\\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\\\n     * with further edits by Uniswap Labs also under MIT license.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\\\n        unchecked {\\\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\\\n            // variables such that product = prod1 * 2^256 + prod0.\\\\n            uint256 prod0; // Least significant 256 bits of the product\\\\n            uint256 prod1; // Most significant 256 bits of the product\\\\n            assembly {\\\\n                let mm := mulmod(x, y, not(0))\\\\n                prod0 := mul(x, y)\\\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\\\n            }\\\\n\\\\n            // Handle non-overflow cases, 256 by 256 division.\\\\n            if (prod1 == 0) {\\\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\\\n                // The surrounding unchecked block does not change this fact.\\\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\\\n                return prod0 / denominator;\\\\n            }\\\\n\\\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\\\n            require(denominator > prod1, \\\\\\\"Math: mulDiv overflow\\\\\\\");\\\\n\\\\n            ///////////////////////////////////////////////\\\\n            // 512 by 256 division.\\\\n            ///////////////////////////////////////////////\\\\n\\\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\\\n            uint256 remainder;\\\\n            assembly {\\\\n                // Compute remainder using mulmod.\\\\n                remainder := mulmod(x, y, denominator)\\\\n\\\\n                // Subtract 256 bit number from 512 bit number.\\\\n                prod1 := sub(prod1, gt(remainder, prod0))\\\\n                prod0 := sub(prod0, remainder)\\\\n            }\\\\n\\\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\\\n            // See https://cs.stackexchange.com/q/138556/92363.\\\\n\\\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\\\n            uint256 twos = denominator & (~denominator + 1);\\\\n            assembly {\\\\n                // Divide denominator by twos.\\\\n                denominator := div(denominator, twos)\\\\n\\\\n                // Divide [prod1 prod0] by twos.\\\\n                prod0 := div(prod0, twos)\\\\n\\\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\\\n                twos := add(div(sub(0, twos), twos), 1)\\\\n            }\\\\n\\\\n            // Shift in bits from prod1 into prod0.\\\\n            prod0 |= prod1 * twos;\\\\n\\\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\\\n            uint256 inverse = (3 * denominator) ^ 2;\\\\n\\\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\\\n            // in modular arithmetic, doubling the correct bits in each step.\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\\\n\\\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\\\n            // is no longer required.\\\\n            result = prod0 * inverse;\\\\n            return result;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\\\n     */\\\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\\\n        uint256 result = mulDiv(x, y, denominator);\\\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\\\n            result += 1;\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\\\n     *\\\\n     * Inspired by Henry S. Warren, Jr.'s \\\\\\\"Hacker's Delight\\\\\\\" (Chapter 11).\\\\n     */\\\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\\\n        if (a == 0) {\\\\n            return 0;\\\\n        }\\\\n\\\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\\\n        //\\\\n        // We know that the \\\\\\\"msb\\\\\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\\\n        //\\\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\\\n        // \\\\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\\\n        // \\\\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\\\n        //\\\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\\\n        uint256 result = 1 << (log2(a) >> 1);\\\\n\\\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\\\n        // into the expected uint128 result.\\\\n        unchecked {\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            result = (result + a / result) >> 1;\\\\n            return min(result, a / result);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\\\n     */\\\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = sqrt(a);\\\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 128;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                value >>= 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 4 > 0) {\\\\n                value >>= 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 2 > 0) {\\\\n                value >>= 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 1 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log2(value);\\\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >= 10 ** 64) {\\\\n                value /= 10 ** 64;\\\\n                result += 64;\\\\n            }\\\\n            if (value >= 10 ** 32) {\\\\n                value /= 10 ** 32;\\\\n                result += 32;\\\\n            }\\\\n            if (value >= 10 ** 16) {\\\\n                value /= 10 ** 16;\\\\n                result += 16;\\\\n            }\\\\n            if (value >= 10 ** 8) {\\\\n                value /= 10 ** 8;\\\\n                result += 8;\\\\n            }\\\\n            if (value >= 10 ** 4) {\\\\n                value /= 10 ** 4;\\\\n                result += 4;\\\\n            }\\\\n            if (value >= 10 ** 2) {\\\\n                value /= 10 ** 2;\\\\n                result += 2;\\\\n            }\\\\n            if (value >= 10 ** 1) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log10(value);\\\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     *\\\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\\\n     */\\\\n    function log256(uint256 value) internal pure returns (uint256) {\\\\n        uint256 result = 0;\\\\n        unchecked {\\\\n            if (value >> 128 > 0) {\\\\n                value >>= 128;\\\\n                result += 16;\\\\n            }\\\\n            if (value >> 64 > 0) {\\\\n                value >>= 64;\\\\n                result += 8;\\\\n            }\\\\n            if (value >> 32 > 0) {\\\\n                value >>= 32;\\\\n                result += 4;\\\\n            }\\\\n            if (value >> 16 > 0) {\\\\n                value >>= 16;\\\\n                result += 2;\\\\n            }\\\\n            if (value >> 8 > 0) {\\\\n                result += 1;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\\\n     * Returns 0 if given 0.\\\\n     */\\\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            uint256 result = log256(value);\\\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/math/SignedMath.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Standard signed math utilities missing in the Solidity language.\\\\n */\\\\nlibrary SignedMath {\\\\n    /**\\\\n     * @dev Returns the largest of two signed numbers.\\\\n     */\\\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a > b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the smallest of two signed numbers.\\\\n     */\\\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\\\n        return a < b ? a : b;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the average of two signed numbers without overflow.\\\\n     * The result is rounded towards zero.\\\\n     */\\\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\\\n        // Formula from the book \\\\\\\"Hacker's Delight\\\\\\\"\\\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the absolute unsigned value of a signed value.\\\\n     */\\\\n    function abs(int256 n) internal pure returns (uint256) {\\\\n        unchecked {\\\\n            // must be unchecked in order to support `n = type(int256).min`\\\\n            return uint256(n >= 0 ? n : -n);\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\\\n    }\\\\n\\\\n    function stringToUint(\\\\n        string memory _s,\\\\n        bytes1 _decimalCharacter,\\\\n        uint256 _desiredDecimals\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (uint256)\\\\n    {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == _decimalCharacter) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n\\\\n    function replaceString(\\\\n        string memory _str,\\\\n        string memory _lookupValue,\\\\n        string memory _replaceValue\\\\n    )\\\\n        internal\\\\n        pure\\\\n        returns (string memory)\\\\n    {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory lookupBytes = bytes(_lookupValue);\\\\n\\\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\\\n        if (lookupIndex == type(uint256).max) {\\\\n            return _str;\\\\n        }\\\\n\\\\n        // Split the original string into two parts: before and after the keyword\\\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\\\n        \\\\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\\\n    }\\\\n\\\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\\\n        bytes memory strBytes = bytes(str);\\\\n        bytes memory substrBytes = bytes(substr);\\\\n        \\\\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\\\n        \\\\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\\\n            bool found = true;\\\\n            for (uint j = 0; j < substrBytes.length; j++) {\\\\n                if (strBytes[i + j] != substrBytes[j]) {\\\\n                    found = false;\\\\n                    break;\\\\n                }\\\\n            }\\\\n            if (found) return i;\\\\n        }\\\\n        \\\\n        return type(uint256).max;\\\\n    }\\\\n\\\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfcdfb3c2c8d5a6b7f480f827049782a70fb98f8b3838dcad0e0bb95237b94a0c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/TLSBaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract TLSBaseProcessor is Ownable {\\\\n\\\\n    using SignatureChecker for address;\\\\n    using ECDSA for bytes32;\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    string public endpoint;\\\\n    string public host;\\\\n\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        endpoint = _endpoint;\\\\n        host = _host;\\\\n\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateTLSEndpoint(\\\\n        string memory _expectedEndpoint,\\\\n        string memory _passedEndpoint\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\\\n            \\\\\\\"Endpoint does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateTLSHost(\\\\n        string memory _expectedHost,\\\\n        string memory _passedHost\\\\n    )\\\\n        internal\\\\n        pure\\\\n    {\\\\n        require(\\\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\\\n            \\\\\\\"Host does not match expected\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n\\\\n    function _isValidSignature(\\\\n        bytes memory _message,\\\\n        bytes memory _signature,\\\\n        address _signer\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {\\\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\\\n\\\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x366ab1cc4ebfdb4ba68fdb43b902676e67e7760ae1987e4252e5839e8370a6c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/RevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ECDSA } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\\\\\";\\\\nimport { SignatureChecker } from \\\\\\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRevolutSendProcessor } from \\\\\\\"./interfaces/IRevolutSendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\nimport { TLSBaseProcessor } from \\\\\\\"../../processors/TLSBaseProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\\\n\\\\n    using ECDSA for bytes32;\\\\n    using SignatureChecker for address;\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\\\\\"COMPLETED\\\\\\\"));\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        uint256 _timestampBuffer,\\\\n        string memory _endpoint,\\\\n        string memory _host\\\\n    )\\\\n        TLSBaseProcessor(\\\\n            _ramp,\\\\n            _nullifierRegistry,\\\\n            _timestampBuffer,\\\\n            _endpoint,\\\\n            _host\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        IRevolutSendProcessor.SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperId,\\\\n            bytes32 currencyId,\\\\n            bytes32 notaryKeyHash\\\\n        )\\\\n    {\\\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\\\n\\\\n        _validateTLSEndpoint(\\\\n            endpoint.replaceString(\\\\\\\"*\\\\\\\", _proof.public_values.transferId),\\\\n            _proof.public_values.endpoint\\\\n        );\\\\n        _validateTLSHost(host, _proof.public_values.host);\\\\n        \\\\n        // Validate status\\\\n        require(\\\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\\\n            \\\\\\\"Payment status not confirmed as sent\\\\\\\"\\\\n        );\\\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\\\\\"Revolut\\\\\\\", _proof.public_values.transferId)));\\\\n\\\\n        amount = _parseAmount(_proof.public_values.amount);\\\\n\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\\\n\\\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\\\n    }\\\\n\\\\n    /* ============ View Functions ============ */\\\\n\\\\n    function verifyProof(\\\\n        address _verifierSigningKey,\\\\n        IRevolutSendProcessor.SendData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bool)\\\\n    {   \\\\n        bytes memory encodedMessage = abi.encode(\\\\n            _publicValues.endpoint,\\\\n            _publicValues.host,\\\\n            _publicValues.transferId,\\\\n            _publicValues.recipientId,\\\\n            _publicValues.amount,\\\\n            _publicValues.currencyId,\\\\n            _publicValues.status,\\\\n            _publicValues.timestamp,\\\\n            _publicValues.intentHash,\\\\n            _publicValues.notaryKeyHash\\\\n        );\\\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateProof(\\\\n        address _verifierSigningKey,\\\\n        IRevolutSendProcessor.SendData memory _publicValues, \\\\n        bytes memory _proof\\\\n    )\\\\n        internal\\\\n        view\\\\n    {   \\\\n        require(\\\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\\\n            \\\\\\\"Invalid proof\\\\\\\"\\\\n        );\\\\n    }\\\\n\\\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\\\n        // it would be a receive transaction\\\\n        require(bytes(amount)[0] == 0x2D, \\\\\\\"Not a send transaction\\\\\\\");   \\\\n        return amount.stringToUint(6);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x12ec921517e7364323e67c11d38da7e712b63c65a7cfb91f68b24a9725bf3e95\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRevolutSendProcessor {\\\\n\\\\n    struct SendData {\\\\n        string endpoint;\\\\n        string host;\\\\n        string transferId;\\\\n        string recipientId;\\\\n        string amount;\\\\n        string currencyId;\\\\n        string status;\\\\n        string timestamp;\\\\n        uint256 intentHash;\\\\n        uint256 notaryKeyHash;\\\\n    }\\\\n\\\\n    struct SendProof {\\\\n        SendData public_values;\\\\n        bytes proof;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof,\\\\n        address _verifierSigningKey\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x6bb42393fe8c5f9ac83fa56e126413638b4a0c110602eecaa70d2b41cf77f1a3\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001efa38038062001efa8339810160408190526200003491620001d0565b84848484846200004433620000a2565b6001600160a01b03851660805260016200005f8382620002fe565b5060026200006e8282620002fe565b5050600380546001600160a01b0319166001600160a01b03949094169390931790925560045550620003ca95505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013357600080fd5b81516001600160401b03808211156200015057620001506200010b565b604051601f8301601f19908116603f011681019082821181831017156200017b576200017b6200010b565b816040528381526020925086838588010111156200019857600080fd5b600091505b83821015620001bc57858201830151818301840152908201906200019d565b600093810190920192909252949350505050565b600080600080600060a08688031215620001e957600080fd5b8551620001f681620000f2565b60208701519095506200020981620000f2565b6040870151606088015191955093506001600160401b03808211156200022e57600080fd5b6200023c89838a0162000121565b935060808801519150808211156200025357600080fd5b50620002628882890162000121565b9150509295509295909350565b600181811c908216806200028457607f821691505b602082108103620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f957600081815260208120601f850160051c81016020861015620002d45750805b601f850160051c820191505b81811015620002f557828155600101620002e0565b5050505b505050565b81516001600160401b038111156200031a576200031a6200010b565b62000332816200032b84546200026f565b84620002ab565b602080601f8311600181146200036a5760008415620003515750858301515b600019600386901b1c1916600185901b178555620002f5565b600085815260208120601f198616915b828110156200039b578886015182559484019460019091019084016200037a565b5085821015620003ba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611b0e620003ec6000396000818160f301526101fa0152611b0e6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b2a3fda411610071578063b2a3fda41461015d578063b870676c14610170578063dbac582114610183578063f2fde38b1461019a578063f437bc59146101ad578063faec91e0146101b557600080fd5b80630f2d076d146100ae57806315d276e1146100ee5780635e280f111461012d578063715018a6146101425780638da5cb5b1461014c575b600080fd5b6100c16100bc3660046113d2565b6101e9565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e5565b610135610785565b6040516100e59190611475565b61014a610813565b005b6000546001600160a01b0316610115565b61014a61016b366004611488565b610827565b600354610115906001600160a01b031681565b61018c60045481565b6040519081526020016100e5565b61014a6101a83660046114a1565b610834565b6101356108ad565b61018c6040516810d3d354131155115160ba1b60208201526029016040516020818303038152906040528051906020012081565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026c5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6102ca8661027a89806114bc565b610283906115aa565b61029060208b018b61170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108ba92505050565b6040805180820190915260018152601560f91b6020820152610420906103d2906102f48a806114bc565b61030290604081019061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600180549092506103459150611754565b80601f016020809104026020016040519081016040528092919081815260200182805461037190611754565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50505050506109069092919063ffffffff16565b6103dc89806114bc565b6103e6908061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098b92505050565b6105046002805461043090611754565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611754565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b506104bc93508c92508291506114bc9050565b6104ca90602081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a2a92505050565b6040516810d3d354131155115160ba1b602082015260290160408051601f19818403018152919052805160209091012061053e88806114bc565b61054c9060c081019061170d565b60405160200161055d92919061178e565b60405160208183030381529060405280519060200120146105cc5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7420737461747573206e6f7420636f6e6669726d6564206173206044820152631cd95b9d60e21b6064820152608401610263565b6106136105d988806114bc565b6105e790604081019061170d565b6040516020016105f892919061179e565b60405160208183030381529060405280519060200120610ac5565b61066861062088806114bc565b61062e90608081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610be092505050565b6004549095506103e86106cb60006106808b806114bc565b61068e9060e081019061170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610c619050565b6106d591906117d7565b6106df91906117f9565b93506106eb87806114bc565b6106f990606081019061170d565b60405160200161070a92919061178e565b60408051601f198184030181529190528051602090910120925061072e87806114bc565b61073c9060a081019061170d565b60405160200161074d92919061178e565b60408051601f198184030181529190528051602090910120915061077187806114bc565b610120013560001b90509295509295909350565b6001805461079290611754565b80601f01602080910402602001604051908101604052809291908181526020018280546107be90611754565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b610c72565b6108256000610ccc565b565b61082f610c72565b600455565b61083c610c72565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610263565b6108aa81610ccc565b50565b6002805461079290611754565b6108c5838383610d1c565b6109015760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610263565b505050565b6060838360006109168383610d91565b9050600019810361092c57869350505050610984565b600061093a88600084610e70565b905060006109568985518561094f91906117f9565b8751610e70565b905081878260405160200161096d9392919061180c565b604051602081830303815290604052955050505050505b9392505050565b8060405160200161099c9190611475565b60405160208183030381529060405280519060200120826040516020016109c39190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d617463682065787065637465646044820152606401610263565b5050565b80604051602001610a3b9190611475565b6040516020818303038152906040528051906020012082604051602001610a629190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d61746368206578706563746564000000006044820152606401610263565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061184f565b15610b7f5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610263565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b5050505050565b600081600081518110610bf557610bf5611871565b6020910101516001600160f81b031916602d60f81b14610c505760405162461bcd60e51b81526020600482015260166024820152752737ba10309039b2b732103a3930b739b0b1ba34b7b760511b6044820152606401610263565b610c5b826006610c61565b92915050565b600061098483601760f91b84610f3d565b6000546001600160a01b031633146108255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c6101200151604051602001610d6c9a99989796959493929190611887565b6040516020818303038152906040529050610d8881848761111a565b95945050505050565b80518251600091849184911115610dae5760001992505050610c5b565b60005b81518351610dbf9190611943565b8111610e6357600160005b8351811015610e3e57838181518110610de557610de5611871565b01602001516001600160f81b03191685610dff83866117f9565b81518110610e0f57610e0f611871565b01602001516001600160f81b03191614610e2c5760009150610e3e565b80610e3681611956565b915050610dca565b508015610e5057509250610c5b915050565b5080610e5b81611956565b915050610db1565b5060001995945050505050565b6060836000610e7f8585611943565b67ffffffffffffffff811115610e9757610e976114dd565b6040519080825280601f01601f191660200182016040528015610ec1576020820181803683370190505b509050845b84811015610f3357828181518110610ee057610ee0611871565b01602001516001600160f81b03191682610efa8884611943565b81518110610f0a57610f0a611871565b60200101906001600160f81b031916908160001a90535080610f2b81611956565b915050610ec6565b5095945050505050565b600083818080805b845181101561109357603060f81b858281518110610f6557610f65611871565b01602001516001600160f81b03191610801590610fa65750603960f81b858281518110610f9457610f94611871565b01602001516001600160f81b03191611155b15610fe9576030858281518110610fbf57610fbf611871565b0160200151610fd1919060f81c611943565b610fdc85600a61196f565b610fe691906117f9565b93505b8115610ffd5782610ff981611956565b9350505b876001600160f81b03191685828151811061101a5761101a611871565b01602001516001600160f81b0319160361108157811561107c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610263565b600191505b8061108b81611956565b915050610f45565b50858211156110ef5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610263565b6110f98287611943565b61110490600a611a6a565b61110e908461196f565b98975050505050505050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c8120610d886001600160a01b0384168286600080600061116f85856111c1565b9092509050600081600481111561118857611188611a76565b1480156111a65750856001600160a01b0316826001600160a01b0316145b806111b757506111b7868686611206565b9695505050505050565b60008082516041036111f75760208301516040840151606085015160001a6111eb878285856112f2565b945094505050506111ff565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401611230929190611a8c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161126e9190611aad565b600060405180830381855afa9150503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091508180156112c257506020815110155b80156111b757508051630b135d3f60e11b906112e79083016020908101908401611abf565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561132957506000905060036113ad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a6576000600192509250506113ad565b9150600090505b94509492505050565b80356001600160a01b03811681146113cd57600080fd5b919050565b600080604083850312156113e557600080fd5b823567ffffffffffffffff8111156113fc57600080fd5b83016040818603121561140e57600080fd5b915061141c602084016113b6565b90509250929050565b60005b83811015611440578181015183820152602001611428565b50506000910152565b60008151808452611461816020860160208601611425565b601f01601f19169290920160200192915050565b6020815260006109846020830184611449565b60006020828403121561149a57600080fd5b5035919050565b6000602082840312156114b357600080fd5b610984826113b6565b6000823561013e198336030181126114d357600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715611517576115176114dd565b60405290565b600082601f83011261152e57600080fd5b813567ffffffffffffffff80821115611549576115496114dd565b604051601f8301601f19908116603f01168101908282118183101715611571576115716114dd565b8160405283815286602085880101111561158a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061014082360312156115bd57600080fd5b6115c56114f3565b823567ffffffffffffffff808211156115dd57600080fd5b6115e93683870161151d565b835260208501359150808211156115ff57600080fd5b61160b3683870161151d565b6020840152604085013591508082111561162457600080fd5b6116303683870161151d565b6040840152606085013591508082111561164957600080fd5b6116553683870161151d565b6060840152608085013591508082111561166e57600080fd5b61167a3683870161151d565b608084015260a085013591508082111561169357600080fd5b61169f3683870161151d565b60a084015260c08501359150808211156116b857600080fd5b6116c43683870161151d565b60c084015260e08501359150808211156116dd57600080fd5b506116ea3682860161151d565b60e083015250610100838101359082015261012092830135928101929092525090565b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b6020019150368190038213156111ff57600080fd5b600181811c9082168061176857607f821691505b60208210810361178857634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6614995d9bdb1d5d60ca1b81528183600783013760009101600701908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826117f457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b6117c1565b6000845161181e818460208901611425565b845190830190611832818360208901611425565b8451910190611845818360208801611425565b0195945050505050565b60006020828403121561186157600080fd5b8151801515811461098457600080fd5b634e487b7160e01b600052603260045260246000fd5b600061014080835261189b8184018e611449565b905082810360208401526118af818d611449565b905082810360408401526118c3818c611449565b905082810360608401526118d7818b611449565b905082810360808401526118eb818a611449565b905082810360a08401526118ff8189611449565b905082810360c08401526119138188611449565b905082810360e08401526119278187611449565b6101008401959095525050610120015298975050505050505050565b81810381811115610c5b57610c5b6117c1565b600060018201611968576119686117c1565b5060010190565b8082028115828204841417610c5b57610c5b6117c1565b600181815b808511156119c15781600019048211156119a7576119a76117c1565b808516156119b457918102915b93841c939080029061198b565b509250929050565b6000826119d857506001610c5b565b816119e557506000610c5b565b81600181146119fb5760028114611a0557611a21565b6001915050610c5b565b60ff841115611a1657611a166117c1565b50506001821b610c5b565b5060208310610133831016604e8410600b8410161715611a44575081810a610c5b565b611a4e8383611986565b8060001904821115611a6257611a626117c1565b029392505050565b600061098483836119c9565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000611aa56040830184611449565b949350505050565b600082516114d3818460208701611425565b600060208284031215611ad157600080fd5b505191905056fea2646970667358221220e18a6a6191feef83c74663dc447936038dada8ef62a251e16ee5c3a5e6ad0e3b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b2a3fda411610071578063b2a3fda41461015d578063b870676c14610170578063dbac582114610183578063f2fde38b1461019a578063f437bc59146101ad578063faec91e0146101b557600080fd5b80630f2d076d146100ae57806315d276e1146100ee5780635e280f111461012d578063715018a6146101425780638da5cb5b1461014c575b600080fd5b6100c16100bc3660046113d2565b6101e9565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e5565b610135610785565b6040516100e59190611475565b61014a610813565b005b6000546001600160a01b0316610115565b61014a61016b366004611488565b610827565b600354610115906001600160a01b031681565b61018c60045481565b6040519081526020016100e5565b61014a6101a83660046114a1565b610834565b6101356108ad565b61018c6040516810d3d354131155115160ba1b60208201526029016040516020818303038152906040528051906020012081565b600080808080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461026c5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6102ca8661027a89806114bc565b610283906115aa565b61029060208b018b61170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108ba92505050565b6040805180820190915260018152601560f91b6020820152610420906103d2906102f48a806114bc565b61030290604081019061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600180549092506103459150611754565b80601f016020809104026020016040519081016040528092919081815260200182805461037190611754565b80156103be5780601f10610393576101008083540402835291602001916103be565b820191906000526020600020905b8154815290600101906020018083116103a157829003601f168201915b50505050506109069092919063ffffffff16565b6103dc89806114bc565b6103e6908061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098b92505050565b6105046002805461043090611754565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611754565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b506104bc93508c92508291506114bc9050565b6104ca90602081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a2a92505050565b6040516810d3d354131155115160ba1b602082015260290160408051601f19818403018152919052805160209091012061053e88806114bc565b61054c9060c081019061170d565b60405160200161055d92919061178e565b60405160208183030381529060405280519060200120146105cc5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7420737461747573206e6f7420636f6e6669726d6564206173206044820152631cd95b9d60e21b6064820152608401610263565b6106136105d988806114bc565b6105e790604081019061170d565b6040516020016105f892919061179e565b60405160208183030381529060405280519060200120610ac5565b61066861062088806114bc565b61062e90608081019061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610be092505050565b6004549095506103e86106cb60006106808b806114bc565b61068e9060e081019061170d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610c619050565b6106d591906117d7565b6106df91906117f9565b93506106eb87806114bc565b6106f990606081019061170d565b60405160200161070a92919061178e565b60408051601f198184030181529190528051602090910120925061072e87806114bc565b61073c9060a081019061170d565b60405160200161074d92919061178e565b60408051601f198184030181529190528051602090910120915061077187806114bc565b610120013560001b90509295509295909350565b6001805461079290611754565b80601f01602080910402602001604051908101604052809291908181526020018280546107be90611754565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b610c72565b6108256000610ccc565b565b61082f610c72565b600455565b61083c610c72565b6001600160a01b0381166108a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610263565b6108aa81610ccc565b50565b6002805461079290611754565b6108c5838383610d1c565b6109015760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610263565b505050565b6060838360006109168383610d91565b9050600019810361092c57869350505050610984565b600061093a88600084610e70565b905060006109568985518561094f91906117f9565b8751610e70565b905081878260405160200161096d9392919061180c565b604051602081830303815290604052955050505050505b9392505050565b8060405160200161099c9190611475565b60405160208183030381529060405280519060200120826040516020016109c39190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820181905260248201527f456e64706f696e7420646f6573206e6f74206d617463682065787065637465646044820152606401610263565b5050565b80604051602001610a3b9190611475565b6040516020818303038152906040528051906020012082604051602001610a629190611475565b6040516020818303038152906040528051906020012014610a265760405162461bcd60e51b815260206004820152601c60248201527f486f737420646f6573206e6f74206d61746368206578706563746564000000006044820152606401610263565b60035460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061184f565b15610b7f5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610263565b600354604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b5050505050565b600081600081518110610bf557610bf5611871565b6020910101516001600160f81b031916602d60f81b14610c505760405162461bcd60e51b81526020600482015260166024820152752737ba10309039b2b732103a3930b739b0b1ba34b7b760511b6044820152606401610263565b610c5b826006610c61565b92915050565b600061098483601760f91b84610f3d565b6000546001600160a01b031633146108255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610263565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c6101200151604051602001610d6c9a99989796959493929190611887565b6040516020818303038152906040529050610d8881848761111a565b95945050505050565b80518251600091849184911115610dae5760001992505050610c5b565b60005b81518351610dbf9190611943565b8111610e6357600160005b8351811015610e3e57838181518110610de557610de5611871565b01602001516001600160f81b03191685610dff83866117f9565b81518110610e0f57610e0f611871565b01602001516001600160f81b03191614610e2c5760009150610e3e565b80610e3681611956565b915050610dca565b508015610e5057509250610c5b915050565b5080610e5b81611956565b915050610db1565b5060001995945050505050565b6060836000610e7f8585611943565b67ffffffffffffffff811115610e9757610e976114dd565b6040519080825280601f01601f191660200182016040528015610ec1576020820181803683370190505b509050845b84811015610f3357828181518110610ee057610ee0611871565b01602001516001600160f81b03191682610efa8884611943565b81518110610f0a57610f0a611871565b60200101906001600160f81b031916908160001a90535080610f2b81611956565b915050610ec6565b5095945050505050565b600083818080805b845181101561109357603060f81b858281518110610f6557610f65611871565b01602001516001600160f81b03191610801590610fa65750603960f81b858281518110610f9457610f94611871565b01602001516001600160f81b03191611155b15610fe9576030858281518110610fbf57610fbf611871565b0160200151610fd1919060f81c611943565b610fdc85600a61196f565b610fe691906117f9565b93505b8115610ffd5782610ff981611956565b9350505b876001600160f81b03191685828151811061101a5761101a611871565b01602001516001600160f81b0319160361108157811561107c5760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610263565b600191505b8061108b81611956565b915050610f45565b50858211156110ef5760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610263565b6110f98287611943565b61110490600a611a6a565b61110e908461196f565b98975050505050505050565b825160208401207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c8120610d886001600160a01b0384168286600080600061116f85856111c1565b9092509050600081600481111561118857611188611a76565b1480156111a65750856001600160a01b0316826001600160a01b0316145b806111b757506111b7868686611206565b9695505050505050565b60008082516041036111f75760208301516040840151606085015160001a6111eb878285856112f2565b945094505050506111ff565b506000905060025b9250929050565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401611230929190611a8c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161126e9190611aad565b600060405180830381855afa9150503d80600081146112a9576040519150601f19603f3d011682016040523d82523d6000602084013e6112ae565b606091505b50915091508180156112c257506020815110155b80156111b757508051630b135d3f60e11b906112e79083016020908101908401611abf565b149695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561132957506000905060036113ad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a6576000600192509250506113ad565b9150600090505b94509492505050565b80356001600160a01b03811681146113cd57600080fd5b919050565b600080604083850312156113e557600080fd5b823567ffffffffffffffff8111156113fc57600080fd5b83016040818603121561140e57600080fd5b915061141c602084016113b6565b90509250929050565b60005b83811015611440578181015183820152602001611428565b50506000910152565b60008151808452611461816020860160208601611425565b601f01601f19169290920160200192915050565b6020815260006109846020830184611449565b60006020828403121561149a57600080fd5b5035919050565b6000602082840312156114b357600080fd5b610984826113b6565b6000823561013e198336030181126114d357600080fd5b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715611517576115176114dd565b60405290565b600082601f83011261152e57600080fd5b813567ffffffffffffffff80821115611549576115496114dd565b604051601f8301601f19908116603f01168101908282118183101715611571576115716114dd565b8160405283815286602085880101111561158a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600061014082360312156115bd57600080fd5b6115c56114f3565b823567ffffffffffffffff808211156115dd57600080fd5b6115e93683870161151d565b835260208501359150808211156115ff57600080fd5b61160b3683870161151d565b6020840152604085013591508082111561162457600080fd5b6116303683870161151d565b6040840152606085013591508082111561164957600080fd5b6116553683870161151d565b6060840152608085013591508082111561166e57600080fd5b61167a3683870161151d565b608084015260a085013591508082111561169357600080fd5b61169f3683870161151d565b60a084015260c08501359150808211156116b857600080fd5b6116c43683870161151d565b60c084015260e08501359150808211156116dd57600080fd5b506116ea3682860161151d565b60e083015250610100838101359082015261012092830135928101929092525090565b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b6020019150368190038213156111ff57600080fd5b600181811c9082168061176857607f821691505b60208210810361178857634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6614995d9bdb1d5d60ca1b81528183600783013760009101600701908152919050565b634e487b7160e01b600052601160045260246000fd5b6000826117f457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b6117c1565b6000845161181e818460208901611425565b845190830190611832818360208901611425565b8451910190611845818360208801611425565b0195945050505050565b60006020828403121561186157600080fd5b8151801515811461098457600080fd5b634e487b7160e01b600052603260045260246000fd5b600061014080835261189b8184018e611449565b905082810360208401526118af818d611449565b905082810360408401526118c3818c611449565b905082810360608401526118d7818b611449565b905082810360808401526118eb818a611449565b905082810360a08401526118ff8189611449565b905082810360c08401526119138188611449565b905082810360e08401526119278187611449565b6101008401959095525050610120015298975050505050505050565b81810381811115610c5b57610c5b6117c1565b600060018201611968576119686117c1565b5060010190565b8082028115828204841417610c5b57610c5b6117c1565b600181815b808511156119c15781600019048211156119a7576119a76117c1565b808516156119b457918102915b93841c939080029061198b565b509250929050565b6000826119d857506001610c5b565b816119e557506000610c5b565b81600181146119fb5760028114611a0557611a21565b6001915050610c5b565b60ff841115611a1657611a166117c1565b50506001821b610c5b565b5060208310610133831016604e8410600b8410161715611a44575081810a610c5b565b611a4e8383611986565b8060001904821115611a6257611a626117c1565b029392505050565b600061098483836119c9565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000611aa56040830184611449565b949350505050565b600082516114d3818460208701611425565b600060208284031215611ad157600080fd5b505191905056fea2646970667358221220e18a6a6191feef83c74663dc447936038dada8ef62a251e16ee5c3a5e6ad0e3b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated TLS calls\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 5432,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"endpoint\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5434,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"host\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 5437,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_contract(INullifierRegistry)5831\"\n      },\n      {\n        \"astId\": 5439,\n        \"contract\": \"contracts/ramps/revolut/RevolutSendProcessor.sol:RevolutSendProcessor\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)5831\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/USDCMock.json",
    "content": "{\n  \"address\": \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_mintAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"symbol\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"allowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"subtractedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"decreaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"addedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transfer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x312a061760d306c8be47ba28ade3ec10ee951eca993f808b7a33e9b04b9f9890\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n    \"transactionIndex\": 39,\n    \"gasUsed\": \"621998\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000040000000000000000000000001000000000000000000000000000004000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x35ef86bc74b73611f04ebb1fdaa3c28ed206506c35ced45d2bcd9acf822d6a62\",\n    \"transactionHash\": \"0x312a061760d306c8be47ba28ade3ec10ee951eca993f808b7a33e9b04b9f9890\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 39,\n        \"blockNumber\": 5080691,\n        \"transactionHash\": \"0x312a061760d306c8be47ba28ade3ec10ee951eca993f808b7a33e9b04b9f9890\",\n        \"address\": \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n        \"topics\": [\n          \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x000000000000000000000000000000000000000000000000000000e8d4a51000\",\n        \"logIndex\": 129,\n        \"blockHash\": \"0x35ef86bc74b73611f04ebb1fdaa3c28ed206506c35ced45d2bcd9acf822d6a62\"\n      }\n    ],\n    \"blockNumber\": 5080691,\n    \"cumulativeGasUsed\": \"6280367\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"1000000000000\",\n    \"USDC\",\n    \"USDC\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_mintAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Approval\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"allowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"approve\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"subtractedValue\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"decreaseAllowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"addedValue\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"increaseAllowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"totalSupply\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"events\\\":{\\\"Approval(address,address,uint256)\\\":{\\\"details\\\":\\\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\\\"},\\\"Transfer(address,address,uint256)\\\":{\\\"details\\\":\\\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"allowance(address,address)\\\":{\\\"details\\\":\\\"See {IERC20-allowance}.\\\"},\\\"approve(address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\\\"},\\\"balanceOf(address)\\\":{\\\"details\\\":\\\"See {IERC20-balanceOf}.\\\"},\\\"decimals()\\\":{\\\"details\\\":\\\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\\\"},\\\"decreaseAllowance(address,uint256)\\\":{\\\"details\\\":\\\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\\\"},\\\"increaseAllowance(address,uint256)\\\":{\\\"details\\\":\\\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\\\"},\\\"name()\\\":{\\\"details\\\":\\\"Returns the name of the token.\\\"},\\\"symbol()\\\":{\\\"details\\\":\\\"Returns the symbol of the token, usually a shorter version of the name.\\\"},\\\"totalSupply()\\\":{\\\"details\\\":\\\"See {IERC20-totalSupply}.\\\"},\\\"transfer(address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\\\"},\\\"transferFrom(address,address,uint256)\\\":{\\\"details\\\":\\\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/mocks/USDCMock.sol\\\":\\\"USDCMock\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"./IERC20.sol\\\\\\\";\\\\nimport \\\\\\\"./extensions/IERC20Metadata.sol\\\\\\\";\\\\nimport \\\\\\\"../../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Implementation of the {IERC20} interface.\\\\n *\\\\n * This implementation is agnostic to the way tokens are created. This means\\\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\\\n *\\\\n * TIP: For a detailed writeup see our guide\\\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\\\n * to implement supply mechanisms].\\\\n *\\\\n * The default value of {decimals} is 18. To change this, you should override\\\\n * this function so it returns a different value.\\\\n *\\\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\\\n * instead returning `false` on failure. This behavior is nonetheless\\\\n * conventional and does not conflict with the expectations of ERC20\\\\n * applications.\\\\n *\\\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\\\n * This allows applications to reconstruct the allowance for all accounts just\\\\n * by listening to said events. Other implementations of the EIP may not emit\\\\n * these events, as it isn't required by the specification.\\\\n *\\\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\\\n * functions have been added to mitigate the well-known issues around setting\\\\n * allowances. See {IERC20-approve}.\\\\n */\\\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\\\n    mapping(address => uint256) private _balances;\\\\n\\\\n    mapping(address => mapping(address => uint256)) private _allowances;\\\\n\\\\n    uint256 private _totalSupply;\\\\n\\\\n    string private _name;\\\\n    string private _symbol;\\\\n\\\\n    /**\\\\n     * @dev Sets the values for {name} and {symbol}.\\\\n     *\\\\n     * All two of these values are immutable: they can only be set once during\\\\n     * construction.\\\\n     */\\\\n    constructor(string memory name_, string memory symbol_) {\\\\n        _name = name_;\\\\n        _symbol = symbol_;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the name of the token.\\\\n     */\\\\n    function name() public view virtual override returns (string memory) {\\\\n        return _name;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\\\n     * name.\\\\n     */\\\\n    function symbol() public view virtual override returns (string memory) {\\\\n        return _symbol;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the number of decimals used to get its user representation.\\\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\\\n     *\\\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\\\n     * Ether and Wei. This is the default value returned by this function, unless\\\\n     * it's overridden.\\\\n     *\\\\n     * NOTE: This information is only used for _display_ purposes: it in\\\\n     * no way affects any of the arithmetic of the contract, including\\\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\\\n     */\\\\n    function decimals() public view virtual override returns (uint8) {\\\\n        return 18;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-totalSupply}.\\\\n     */\\\\n    function totalSupply() public view virtual override returns (uint256) {\\\\n        return _totalSupply;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-balanceOf}.\\\\n     */\\\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\\\n        return _balances[account];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-transfer}.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `to` cannot be the zero address.\\\\n     * - the caller must have a balance of at least `amount`.\\\\n     */\\\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _transfer(owner, to, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-allowance}.\\\\n     */\\\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\\\n        return _allowances[owner][spender];\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-approve}.\\\\n     *\\\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _approve(owner, spender, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev See {IERC20-transferFrom}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\\\n     *\\\\n     * NOTE: Does not update the allowance if the current allowance\\\\n     * is the maximum `uint256`.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `from` and `to` cannot be the zero address.\\\\n     * - `from` must have a balance of at least `amount`.\\\\n     * - the caller must have allowance for ``from``'s tokens of at least\\\\n     * `amount`.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\\\n        address spender = _msgSender();\\\\n        _spendAllowance(from, spender, amount);\\\\n        _transfer(from, to, amount);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\\\n     *\\\\n     * This is an alternative to {approve} that can be used as a mitigation for\\\\n     * problems described in {IERC20-approve}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\\\n        address owner = _msgSender();\\\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\\\n     *\\\\n     * This is an alternative to {approve} that can be used as a mitigation for\\\\n     * problems described in {IERC20-approve}.\\\\n     *\\\\n     * Emits an {Approval} event indicating the updated allowance.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `spender` cannot be the zero address.\\\\n     * - `spender` must have allowance for the caller of at least\\\\n     * `subtractedValue`.\\\\n     */\\\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\\\n        address owner = _msgSender();\\\\n        uint256 currentAllowance = allowance(owner, spender);\\\\n        require(currentAllowance >= subtractedValue, \\\\\\\"ERC20: decreased allowance below zero\\\\\\\");\\\\n        unchecked {\\\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\\\n        }\\\\n\\\\n        return true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\\\n     *\\\\n     * This internal function is equivalent to {transfer}, and can be used to\\\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `from` cannot be the zero address.\\\\n     * - `to` cannot be the zero address.\\\\n     * - `from` must have a balance of at least `amount`.\\\\n     */\\\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\\\n        require(from != address(0), \\\\\\\"ERC20: transfer from the zero address\\\\\\\");\\\\n        require(to != address(0), \\\\\\\"ERC20: transfer to the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(from, to, amount);\\\\n\\\\n        uint256 fromBalance = _balances[from];\\\\n        require(fromBalance >= amount, \\\\\\\"ERC20: transfer amount exceeds balance\\\\\\\");\\\\n        unchecked {\\\\n            _balances[from] = fromBalance - amount;\\\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\\\n            // decrementing then incrementing.\\\\n            _balances[to] += amount;\\\\n        }\\\\n\\\\n        emit Transfer(from, to, amount);\\\\n\\\\n        _afterTokenTransfer(from, to, amount);\\\\n    }\\\\n\\\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\\\n     * the total supply.\\\\n     *\\\\n     * Emits a {Transfer} event with `from` set to the zero address.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `account` cannot be the zero address.\\\\n     */\\\\n    function _mint(address account, uint256 amount) internal virtual {\\\\n        require(account != address(0), \\\\\\\"ERC20: mint to the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(address(0), account, amount);\\\\n\\\\n        _totalSupply += amount;\\\\n        unchecked {\\\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\\\n            _balances[account] += amount;\\\\n        }\\\\n        emit Transfer(address(0), account, amount);\\\\n\\\\n        _afterTokenTransfer(address(0), account, amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\\\n     * total supply.\\\\n     *\\\\n     * Emits a {Transfer} event with `to` set to the zero address.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `account` cannot be the zero address.\\\\n     * - `account` must have at least `amount` tokens.\\\\n     */\\\\n    function _burn(address account, uint256 amount) internal virtual {\\\\n        require(account != address(0), \\\\\\\"ERC20: burn from the zero address\\\\\\\");\\\\n\\\\n        _beforeTokenTransfer(account, address(0), amount);\\\\n\\\\n        uint256 accountBalance = _balances[account];\\\\n        require(accountBalance >= amount, \\\\\\\"ERC20: burn amount exceeds balance\\\\\\\");\\\\n        unchecked {\\\\n            _balances[account] = accountBalance - amount;\\\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\\\n            _totalSupply -= amount;\\\\n        }\\\\n\\\\n        emit Transfer(account, address(0), amount);\\\\n\\\\n        _afterTokenTransfer(account, address(0), amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\\\n     *\\\\n     * This internal function is equivalent to `approve`, and can be used to\\\\n     * e.g. set automatic allowances for certain subsystems, etc.\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     *\\\\n     * Requirements:\\\\n     *\\\\n     * - `owner` cannot be the zero address.\\\\n     * - `spender` cannot be the zero address.\\\\n     */\\\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\\\n        require(owner != address(0), \\\\\\\"ERC20: approve from the zero address\\\\\\\");\\\\n        require(spender != address(0), \\\\\\\"ERC20: approve to the zero address\\\\\\\");\\\\n\\\\n        _allowances[owner][spender] = amount;\\\\n        emit Approval(owner, spender, amount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\\\n     *\\\\n     * Does not update the allowance amount in case of infinite allowance.\\\\n     * Revert if not enough allowance is available.\\\\n     *\\\\n     * Might emit an {Approval} event.\\\\n     */\\\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\\\n        uint256 currentAllowance = allowance(owner, spender);\\\\n        if (currentAllowance != type(uint256).max) {\\\\n            require(currentAllowance >= amount, \\\\\\\"ERC20: insufficient allowance\\\\\\\");\\\\n            unchecked {\\\\n                _approve(owner, spender, currentAllowance - amount);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Hook that is called before any transfer of tokens. This includes\\\\n     * minting and burning.\\\\n     *\\\\n     * Calling conditions:\\\\n     *\\\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\\\n     * will be transferred to `to`.\\\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\\\n     * - `from` and `to` are never both zero.\\\\n     *\\\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\\\n     */\\\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\\\n\\\\n    /**\\\\n     * @dev Hook that is called after any transfer of tokens. This includes\\\\n     * minting and burning.\\\\n     *\\\\n     * Calling conditions:\\\\n     *\\\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\\\n     * has been transferred to `to`.\\\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\\\n     * - `from` and `to` are never both zero.\\\\n     *\\\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\\\n     */\\\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../IERC20.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\\\n *\\\\n * _Available since v4.1._\\\\n */\\\\ninterface IERC20Metadata is IERC20 {\\\\n    /**\\\\n     * @dev Returns the name of the token.\\\\n     */\\\\n    function name() external view returns (string memory);\\\\n\\\\n    /**\\\\n     * @dev Returns the symbol of the token.\\\\n     */\\\\n    function symbol() external view returns (string memory);\\\\n\\\\n    /**\\\\n     * @dev Returns the decimals places of the token.\\\\n     */\\\\n    function decimals() external view returns (uint8);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/mocks/USDCMock.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { ERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract USDCMock is ERC20 {\\\\n\\\\n    constructor(\\\\n        uint256 _mintAmount,\\\\n        string memory name,\\\\n        string memory symbol\\\\n    )\\\\n        ERC20(name, symbol)\\\\n    {\\\\n        _mint(msg.sender, _mintAmount);\\\\n    }\\\\n\\\\n    function decimals() public pure override returns (uint8) {\\\\n        return 6;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xda097618a7499396c5d4b8bdf4d296d687408a91b442333254f8ef8ba8f29953\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60806040523480156200001157600080fd5b5060405162000c5938038062000c59833981016040819052620000349162000201565b8181600362000044838262000303565b50600462000053828262000303565b5050506200006833846200007160201b60201c565b505050620003f7565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e09190620003cf565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016457600080fd5b81516001600160401b03808211156200018157620001816200013c565b604051601f8301601f19908116603f01168101908282118183101715620001ac57620001ac6200013c565b81604052838152602092508683858801011115620001c957600080fd5b600091505b83821015620001ed5785820183015181830184015290820190620001ce565b600093810190920192909252949350505050565b6000806000606084860312156200021757600080fd5b835160208501519093506001600160401b03808211156200023757600080fd5b620002458783880162000152565b935060408601519150808211156200025c57600080fd5b506200026b8682870162000152565b9150509250925092565b600181811c908216806200028a57607f821691505b602082108103620002ab57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013757600081815260208120601f850160051c81016020861015620002da5750805b601f850160051c820191505b81811015620002fb57828155600101620002e6565b505050505050565b81516001600160401b038111156200031f576200031f6200013c565b620003378162000330845462000275565b84620002b1565b602080601f8311600181146200036f5760008415620003565750858301515b600019600386901b1c1916600185901b178555620002fb565b600085815260208120601f198616915b82811015620003a0578886015182559484019460019091019084016200037f565b5085821015620003bf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003f157634e487b7160e01b600052601160045260246000fd5b92915050565b61085280620004076000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051600681526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220efe6415e90792d0cf044032b100c1fdb039304f0a71def77d3c85fb83a1e0e4764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051600681526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220efe6415e90792d0cf044032b100c1fdb039304f0a71def77d3c85fb83a1e0e4764736f6c63430008120033\",\n  \"devdoc\": {\n    \"events\": {\n      \"Approval(address,address,uint256)\": {\n        \"details\": \"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"\n      },\n      \"Transfer(address,address,uint256)\": {\n        \"details\": \"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"allowance(address,address)\": {\n        \"details\": \"See {IERC20-allowance}.\"\n      },\n      \"approve(address,uint256)\": {\n        \"details\": \"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"\n      },\n      \"balanceOf(address)\": {\n        \"details\": \"See {IERC20-balanceOf}.\"\n      },\n      \"decimals()\": {\n        \"details\": \"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"\n      },\n      \"decreaseAllowance(address,uint256)\": {\n        \"details\": \"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"\n      },\n      \"increaseAllowance(address,uint256)\": {\n        \"details\": \"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"\n      },\n      \"name()\": {\n        \"details\": \"Returns the name of the token.\"\n      },\n      \"symbol()\": {\n        \"details\": \"Returns the symbol of the token, usually a shorter version of the name.\"\n      },\n      \"totalSupply()\": {\n        \"details\": \"See {IERC20-totalSupply}.\"\n      },\n      \"transfer(address,uint256)\": {\n        \"details\": \"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"\n      },\n      \"transferFrom(address,address,uint256)\": {\n        \"details\": \"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 128,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_balances\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_mapping(t_address,t_uint256)\"\n      },\n      {\n        \"astId\": 134,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_allowances\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_address,t_mapping(t_address,t_uint256))\"\n      },\n      {\n        \"astId\": 136,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_totalSupply\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 138,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_name\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_string_storage\"\n      },\n      {\n        \"astId\": 140,\n        \"contract\": \"contracts/mocks/USDCMock.sol:USDCMock\",\n        \"label\": \"_symbol\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_string_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_mapping(t_address,t_uint256))\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => mapping(address => uint256))\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_mapping(t_address,t_uint256)\"\n      },\n      \"t_mapping(t_address,t_uint256)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => uint256)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_uint256\"\n      },\n      \"t_string_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"string\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/VenmoManagedKeyHashAdapter.json",
    "content": "{\n  \"address\": \"0xaF4c9cb40eAFc51E39707aCDaA4eF3e6FF6e896c\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x5eb3dac67b4b298570f0cca95ba4b07a496a34f7edd82367909c9e0dcb98b20c\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xaF4c9cb40eAFc51E39707aCDaA4eF3e6FF6e896c\",\n    \"transactionIndex\": 35,\n    \"gasUsed\": \"242659\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000001000000000010000000000000000000000080000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x0a1b588722c86c5d7b4519fdc8b2f515c9589aac8df495d5fb5aaf5730645f8e\",\n    \"transactionHash\": \"0x5eb3dac67b4b298570f0cca95ba4b07a496a34f7edd82367909c9e0dcb98b20c\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 35,\n        \"blockNumber\": 5081890,\n        \"transactionHash\": \"0x5eb3dac67b4b298570f0cca95ba4b07a496a34f7edd82367909c9e0dcb98b20c\",\n        \"address\": \"0xaF4c9cb40eAFc51E39707aCDaA4eF3e6FF6e896c\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 61,\n        \"blockHash\": \"0x0a1b588722c86c5d7b4519fdc8b2f515c9589aac8df495d5fb5aaf5730645f8e\"\n      }\n    ],\n    \"blockNumber\": 5081890,\n    \"cumulativeGasUsed\": \"3613832\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setMailserverKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":\\\"ManagedKeyHashAdapter\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./IKeyHashAdapter.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n\\\\n    bytes32 public mailserverKeyHash;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32 _mailserverKeyHash\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        mailserverKeyHash = _mailserverKeyHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x348720e86ab8fd55374953f267d674884f0cbfd3a612859dae5988363bd71c5c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161034338038061034383398101604081905261002f91610090565b61003833610040565b6001556100a9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b5051919050565b61028b806100b86000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c806336406e641461005c578063715018a6146100785780638da5cb5b146100825780638f06c5df1461009d578063f2fde38b146100b0575b600080fd5b61006560015481565b6040519081526020015b60405180910390f35b6100806100c3565b005b6000546040516001600160a01b03909116815260200161006f565b6100806100ab36600461020c565b6100d7565b6100806100be366004610225565b6100e4565b6100cb610162565b6100d560006101bc565b565b6100df610162565b600155565b6100ec610162565b6001600160a01b0381166101565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61015f816101bc565b50565b6000546001600160a01b031633146100d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561021e57600080fd5b5035919050565b60006020828403121561023757600080fd5b81356001600160a01b038116811461024e57600080fd5b939250505056fea2646970667358221220f25d7899406ba5c37842f4d5f15cd28cec5ede4f0dfafa2261224aadb2413bc964736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3521,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol:ManagedKeyHashAdapter\",\n        \"label\": \"mailserverKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_bytes32\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/VenmoManagedKeyHashAdapterV2.json",
    "content": "{\n  \"address\": \"0x64c5B59877121F9ed95D539536389BBdF1c678Ee\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_mailServerKeyHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashAdded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"MailServerKeyHashRemoved\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"mailServerKeyHashes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_mailserverKeyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeMailServerKeyHash\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x54bd3415417d369ada8df8a8875826d8bd1861e3b3fb0ce935f4f9ff15b15622\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x64c5B59877121F9ed95D539536389BBdF1c678Ee\",\n    \"transactionIndex\": 43,\n    \"gasUsed\": \"608926\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000080000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xb76067dfa5af396c2b1e6d6880eb97fd20c4b27c53bd2b261da24b453b48659f\",\n    \"transactionHash\": \"0x54bd3415417d369ada8df8a8875826d8bd1861e3b3fb0ce935f4f9ff15b15622\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 43,\n        \"blockNumber\": 5081905,\n        \"transactionHash\": \"0x54bd3415417d369ada8df8a8875826d8bd1861e3b3fb0ce935f4f9ff15b15622\",\n        \"address\": \"0x64c5B59877121F9ed95D539536389BBdF1c678Ee\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 2062,\n        \"blockHash\": \"0xb76067dfa5af396c2b1e6d6880eb97fd20c4b27c53bd2b261da24b453b48659f\"\n      }\n    ],\n    \"blockNumber\": 5081905,\n    \"cumulativeGasUsed\": \"21208802\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    [\n      \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\",\n      \"0x1163C7F4AF2E63FE2DCB73B8EDF51A3AC04A257979D7877EDFE4AB37B9C807B1\"\n    ]\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_mailServerKeyHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"MailServerKeyHashRemoved\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mailServerKeyHashes\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_mailserverKeyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeMailServerKeyHash\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":\\\"ManagedKeyHashAdapterV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\\\n    \\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\\\n\\\\n    /* ============ State Variables ============ */\\\\n\\\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\\\n    bytes32[] public mailServerKeyHashes;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n\\\\n    constructor(\\\\n        bytes32[] memory _mailServerKeyHashes\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n            \\\\n            isMailServerKeyHash[mailserverKeyHash] = true;\\\\n            mailServerKeyHashes.push(mailserverKeyHash);\\\\n        }\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash already added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\\\\\"Key hash not added\\\\\\\");\\\\n\\\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\\\n\\\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\\\n    }\\\\n\\\\n    /* ============ External Getter Functions ============ */\\\\n\\\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\\\n        return mailServerKeyHashes;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb508d88dca3849e44c40adf29466772b5e6368e0b2eabad5652961344c72f58c\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516109ff3803806109ff83398101604081905261002f91610193565b6100383361012d565b60005b815181101561012657600082828151811061005857610058610250565b6020908102919091018101516000818152600190925260409091205490915060ff16156100cb5760405162461bcd60e51b815260206004820152601660248201527f4b6579206861736820616c726561647920616464656400000000000000000000604482015260640160405180910390fd5b60008181526001602081905260408220805460ff1916821790556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01558061011e81610266565b91505061003b565b505061028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156101a657600080fd5b82516001600160401b03808211156101bd57600080fd5b818501915085601f8301126101d157600080fd5b8151818111156101e3576101e361017d565b8060051b604051601f19603f830116810181811085821117156102085761020861017d565b60405291825284820192508381018501918883111561022657600080fd5b938501935b828510156102445784518452938501939285019261022b565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161028657634e487b7160e01b600052601160045260246000fd5b5060010190565b6107638061029c6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100f7578063a26c04ee14610112578063b86e2d7214610125578063f2fde38b1461014657600080fd5b806319d091521461008d57806361ba662a146100c5578063687bc0ab146100da578063715018a6146100ef575b600080fd5b6100b061009b36600461062c565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d336600461062c565b610159565b005b6100e2610245565b6040516100bc9190610645565b6100d861029d565b6000546040516001600160a01b0390911681526020016100bc565b6100d861012036600461062c565b6102b1565b61013861013336600461062c565b61035d565b6040519081526020016100bc565b6100d8610154366004610689565b61037e565b6101616103f7565b60008181526001602052604090205460ff16156101be5760405162461bcd60e51b815260206004820152601660248201527512d95e481a185cda08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6000818152600160208190526040808320805460ff1916831790556002805492830181559092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01829055517fc1674d5f4b3c1397f7aad948ab8fb7adfb24a8f170f8c07349d880c342da030b9061023a9083815260200190565b60405180910390a150565b6060600280548060200260200160405190810160405280929190818152602001828054801561029357602002820191906000526020600020905b81548152602001906001019080831161027f575b5050505050905090565b6102a56103f7565b6102af6000610451565b565b6102b96103f7565b60008181526001602052604090205460ff1661030c5760405162461bcd60e51b815260206004820152601260248201527112d95e481a185cda081b9bdd08185919195960721b60448201526064016101b5565b6000818152600160205260409020805460ff1916905561032d6002826104a1565b6040518181527f57f03401c03965ea5770efca656f696bdaa598efbaa2c899de9c70749634fabd9060200161023a565b6002818154811061036d57600080fd5b600091825260209091200154905081565b6103866103f7565b6001600160a01b0381166103eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b5565b6103f481610451565b50565b6000546001600160a01b031633146102af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806104fd848054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020905b8154815260200190600101908083116104de575b5050505050846105c9565b91509150806105465760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b60448201526064016101b5565b8354600090610557906001906106cf565b905080831461059c57848181548110610572576105726106e8565b906000526020600020015485848154811061058f5761058f6106e8565b6000918252602090912001555b848054806105ac576105ac6106fe565b600190038181906000526020600020016000905590555050505050565b81516000908190815b8181101561061957848682815181106105ed576105ed6106e8565b602002602001015103610607579250600191506106259050565b8061061181610714565b9150506105d2565b50600019600092509250505b9250929050565b60006020828403121561063e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561067d57835183529284019291840191600101610661565b50909695505050505050565b60006020828403121561069b57600080fd5b81356001600160a01b03811681146106b257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156106e2576106e26106b9565b92915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201610726576107266106b9565b506001019056fea26469706673582212202d4373ec0ad3852f8fff2b39d82394e0338fb7588a155a90b06758b2bba5e1ea64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3574,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"isMailServerKeyHash\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_mapping(t_bytes32,t_bool)\"\n      },\n      {\n        \"astId\": 3577,\n        \"contract\": \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol:ManagedKeyHashAdapterV2\",\n        \"label\": \"mailServerKeyHashes\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_array(t_bytes32)dyn_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/VenmoRampV2.json",
    "content": "{\n  \"address\": \"0x38637CD256d70994f2d5533BEAfe52eEfC2a96Ab\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"_usdc\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"_poseidon\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_sustainabilityFee\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_sustainabilityFeeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"accountOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"AccountRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"DepositClosed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositReceived\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"DepositWithdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentExpirationPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"feeAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentFulfilled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentPruned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"venmoId\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IntentSignaled\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MaxOnRampAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"MinDepositAmountSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"receiveProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewReceiveProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewRegistrationProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewSendProcessorSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"OnRampCooldownPeriodSet\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeRecipientUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"SustainabilityFeeUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserAddedToDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"listOwner\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"UserRemovedFromDenylist\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"addAccountToDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"cancelIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"depositCounter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"deposits\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"depositor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"remainingDeposits\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"outstandingIntentAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"conversionRate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountDeposits\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"accountDeposits\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountInfo\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"venmoIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"internalType\": \"uint256[]\",\n              \"name\": \"deposits\",\n              \"type\": \"uint256[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.AccountInfo\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getAccountVenmoIdHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getDeniedUsers\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getDeposit\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"depositor\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"uint256[3]\",\n              \"name\": \"packedVenmoId\",\n              \"type\": \"uint256[3]\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"remainingDeposits\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"outstandingIntentAmount\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"conversionRate\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32[]\",\n              \"name\": \"intentHashes\",\n              \"type\": \"bytes32[]\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.Deposit\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"getDepositFromIds\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"depositId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"depositorIdHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"depositor\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256[3]\",\n                  \"name\": \"packedVenmoId\",\n                  \"type\": \"uint256[3]\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"depositAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"remainingDeposits\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"outstandingIntentAmount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"conversionRate\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"bytes32[]\",\n                  \"name\": \"intentHashes\",\n                  \"type\": \"bytes32[]\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Deposit\",\n              \"name\": \"deposit\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"availableLiquidity\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.DepositWithAvailableLiquidity[]\",\n          \"name\": \"depositArray\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32[]\",\n          \"name\": \"_intentHashes\",\n          \"type\": \"bytes32[]\"\n        }\n      ],\n      \"name\": \"getIntentsWithOnRamperId\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"intentHash\",\n              \"type\": \"bytes32\"\n            },\n            {\n              \"components\": [\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"onRamper\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"address\",\n                  \"name\": \"to\",\n                  \"type\": \"address\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"deposit\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"amount\",\n                  \"type\": \"uint256\"\n                },\n                {\n                  \"internalType\": \"uint256\",\n                  \"name\": \"intentTimestamp\",\n                  \"type\": \"uint256\"\n                }\n              ],\n              \"internalType\": \"struct VenmoRampV2.Intent\",\n              \"name\": \"intent\",\n              \"type\": \"tuple\"\n            },\n            {\n              \"internalType\": \"bytes32\",\n              \"name\": \"onRamperIdHash\",\n              \"type\": \"bytes32\"\n            }\n          ],\n          \"internalType\": \"struct VenmoRampV2.IntentWithOnRamperId[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getLastOnRampTimestamp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVenmoIdCurrentIntentHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"intentExpirationPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"intents\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"onRamper\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"deposit\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"intentTimestamp\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_account\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_deniedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isDeniedUser\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"isInitialized\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxOnRampAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"minDepositAmount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[3]\",\n          \"name\": \"_packedVenmoId\",\n          \"type\": \"uint256[3]\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositAmount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_receiveAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"offRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"onRamp\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"onRampCooldownPeriod\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poseidon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IPoseidon\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRamp\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_a\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_b\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_c\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_signals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registrationProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"releaseFundsToOnramper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_approvedUser\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"removeAccountFromDenylist\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sendProcessor\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_intentExpirationPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setIntentExpirationPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxOnRampAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxOnRampAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_minDepositAmount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMinDepositAmount\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_onRampCooldownPeriod\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setOnRampCooldownPeriod\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IRegistrationProcessorV2\",\n          \"name\": \"_registrationProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setRegistrationProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ISendProcessor\",\n          \"name\": \"_sendProcessor\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSendProcessor\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_fee\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setSustainabilityFee\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeRecipient\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setSustainabilityFeeRecipient\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_depositId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"signalIntent\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFee\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"sustainabilityFeeRecipient\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"usdc\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"_depositIds\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"name\": \"withdrawDeposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x9099fb94cf6d7656386f8f16ef60106608d364d649c893f906be27e6cd6086fc\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x38637CD256d70994f2d5533BEAfe52eEfC2a96Ab\",\n    \"transactionIndex\": 57,\n    \"gasUsed\": \"3797413\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x3bc7da58bea2410537fa95dccfe0f3318d3a50f1edd32f9f08f6aa757f17c084\",\n    \"transactionHash\": \"0x9099fb94cf6d7656386f8f16ef60106608d364d649c893f906be27e6cd6086fc\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 57,\n        \"blockNumber\": 5081904,\n        \"transactionHash\": \"0x9099fb94cf6d7656386f8f16ef60106608d364d649c893f906be27e6cd6086fc\",\n        \"address\": \"0x38637CD256d70994f2d5533BEAfe52eEfC2a96Ab\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 2072,\n        \"blockHash\": \"0x3bc7da58bea2410537fa95dccfe0f3318d3a50f1edd32f9f08f6aa757f17c084\"\n      },\n      {\n        \"transactionIndex\": 57,\n        \"blockNumber\": 5081904,\n        \"transactionHash\": \"0x9099fb94cf6d7656386f8f16ef60106608d364d649c893f906be27e6cd6086fc\",\n        \"address\": \"0x38637CD256d70994f2d5533BEAfe52eEfC2a96Ab\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 2073,\n        \"blockHash\": \"0x3bc7da58bea2410537fa95dccfe0f3318d3a50f1edd32f9f08f6aa757f17c084\"\n      }\n    ],\n    \"blockNumber\": 5081904,\n    \"cumulativeGasUsed\": \"25061646\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6\",\n    \"0xBBA5C9bd54a4293f4261b38e5aD41820eC41ed86\",\n    \"0xd8850EC08960716725B51941348e8b3F1DC47C38\",\n    \"20000000\",\n    \"999000000\",\n    \"180\",\n    \"180\",\n    \"1000000000000000\",\n    \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"_usdc\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"_poseidon\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_sustainabilityFee\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_sustainabilityFeeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"accountOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"AccountRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DepositClosed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositReceived\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DepositWithdrawn\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentExpirationPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"feeAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentFulfilled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentPruned\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoId\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"IntentSignaled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MaxOnRampAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"MinDepositAmountSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"receiveProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewReceiveProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewRegistrationProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewSendProcessorSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"OnRampCooldownPeriodSet\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"SustainabilityFeeRecipientUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"SustainabilityFeeUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserAddedToDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"listOwner\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"UserRemovedFromDenylist\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addAccountToDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"depositCounter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"deposits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountDeposits\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"accountDeposits\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountInfo\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"venmoIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"deposits\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.AccountInfo\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountVenmoIdHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getDeniedUsers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getDeposit\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"getDepositFromIds\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"depositorIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"depositor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remainingDeposits\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"outstandingIntentAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"conversionRate\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Deposit\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"availableLiquidity\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.DepositWithAvailableLiquidity[]\\\",\\\"name\\\":\\\"depositArray\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32[]\\\",\\\"name\\\":\\\"_intentHashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"getIntentsWithOnRamperId\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.Intent\\\",\\\"name\\\":\\\"intent\\\",\\\"type\\\":\\\"tuple\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"internalType\\\":\\\"struct VenmoRampV2.IntentWithOnRamperId[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getLastOnRampTimestamp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getVenmoIdCurrentIntentHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"intentExpirationPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"intents\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"onRamper\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"intentTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_deniedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isDeniedUser\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isInitialized\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxOnRampAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minDepositAmount\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[3]\\\",\\\"name\\\":\\\"_packedVenmoId\\\",\\\"type\\\":\\\"uint256[3]\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_receiveAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"offRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"onRamp\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"onRampCooldownPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"poseidon\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IPoseidon\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRamp\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registrationProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseFundsToOnramper\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_approvedUser\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"removeAccountFromDenylist\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sendProcessor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_intentExpirationPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setIntentExpirationPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxOnRampAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMaxOnRampAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_minDepositAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setMinDepositAmount\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_onRampCooldownPeriod\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setOnRampCooldownPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IRegistrationProcessorV2\\\",\\\"name\\\":\\\"_registrationProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrationProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ISendProcessor\\\",\\\"name\\\":\\\"_sendProcessor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSendProcessor\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_fee\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setSustainabilityFee\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_feeRecipient\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSustainabilityFeeRecipient\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_depositId\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_to\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"signalIntent\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"sustainabilityFeeRecipient\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"usdc\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"_depositIds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"withdrawDeposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_deniedUser\\\":\\\"Poseidon hash of the venmoId being banned\\\"}},\\\"cancelIntent(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent being cancelled\\\"}},\\\"initialize(address,address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"Registration processor address\\\",\\\"_sendProcessor\\\":\\\"Send processor address\\\"}},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"params\\\":{\\\"_depositAmount\\\":\\\"The amount of USDC to off-ramp\\\",\\\"_packedVenmoId\\\":\\\"The packed venmo id of the account owner (we pack for easy use with poseidon)\\\",\\\"_receiveAmount\\\":\\\"The amount of USD to receive\\\"}},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\\\"}},\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"params\\\":{\\\"_a\\\":\\\"Parameter of zk proof\\\",\\\"_b\\\":\\\"Parameter of zk proof\\\",\\\"_c\\\":\\\"Parameter of zk proof\\\",\\\"_signals\\\":\\\"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\"}},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"params\\\":{\\\"_intentHash\\\":\\\"Hash of intent to resolve by releasing the funds\\\"}},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"params\\\":{\\\"_approvedUser\\\":\\\"Poseidon hash of the venmoId being approved\\\"}},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"params\\\":{\\\"_intentExpirationPeriod\\\":\\\"New intent expiration period\\\"}},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"params\\\":{\\\"_maxOnRampAmount\\\":\\\"The new max on ramp amount\\\"}},\\\"setMinDepositAmount(uint256)\\\":{\\\"params\\\":{\\\"_minDepositAmount\\\":\\\"The new minimum deposit amount\\\"}},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"params\\\":{\\\"_onRampCooldownPeriod\\\":\\\"New on-ramp cooldown period\\\"}},\\\"setRegistrationProcessor(address)\\\":{\\\"params\\\":{\\\"_registrationProcessor\\\":\\\"New registration proccesor address\\\"}},\\\"setSendProcessor(address)\\\":{\\\"params\\\":{\\\"_sendProcessor\\\":\\\"New send proccesor address\\\"}},\\\"setSustainabilityFee(uint256)\\\":{\\\"params\\\":{\\\"_fee\\\":\\\"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\"}},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"params\\\":{\\\"_feeRecipient\\\":\\\"The new fee recipient address\\\"}},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"params\\\":{\\\"_amount\\\":\\\"The amount of USDC the user wants to on-ramp\\\",\\\"_depositId\\\":\\\"The ID of the deposit the on-ramper intends to use for \\\",\\\"_to\\\":\\\"Address to forward funds to (can be same as onRamper)\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"params\\\":{\\\"_depositIds\\\":\\\"Array of depositIds the depositor is attempting to withdraw\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"addAccountToDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\\\"},\\\"cancelIntent(bytes32)\\\":{\\\"notice\\\":\\\"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\\\"},\\\"initialize(address,address)\\\":{\\\"notice\\\":\\\"Initialize Ramp with the addresses of the Processors\\\"},\\\"offRamp(uint256[3],uint256,uint256)\\\":{\\\"notice\\\":\\\"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\\\"},\\\"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\\\":{\\\"notice\\\":\\\"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\\\":{\\\"notice\\\":\\\"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\"},\\\"releaseFundsToOnramper(bytes32)\\\":{\\\"notice\\\":\\\"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\\\"},\\\"removeAccountFromDenylist(bytes32)\\\":{\\\"notice\\\":\\\"Removes a venmoId from a depositor's deny list.\\\"},\\\"setIntentExpirationPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\\\"},\\\"setMaxOnRampAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\\\"},\\\"setMinDepositAmount(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\"},\\\"setOnRampCooldownPeriod(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\\\"},\\\"setRegistrationProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\"},\\\"setSendProcessor(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\"},\\\"setSustainabilityFee(uint256)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\"},\\\"setSustainabilityFeeRecipient(address)\\\":{\\\"notice\\\":\\\"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\"},\\\"signalIntent(uint256,uint256,address)\\\":{\\\"notice\\\":\\\"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\\\"},\\\"withdrawDeposit(uint256[])\\\":{\\\"notice\\\":\\\"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":\\\"VenmoRampV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\\\n */\\\\ninterface IERC20 {\\\\n    /**\\\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\\\n     * another (`to`).\\\\n     *\\\\n     * Note that `value` may be zero.\\\\n     */\\\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\\\n     * a call to {approve}. `value` is the new allowance.\\\\n     */\\\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens in existence.\\\\n     */\\\\n    function totalSupply() external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Returns the amount of tokens owned by `account`.\\\\n     */\\\\n    function balanceOf(address account) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transfer(address to, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Returns the remaining number of tokens that `spender` will be\\\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\\\n     * zero by default.\\\\n     *\\\\n     * This value changes when {approve} or {transferFrom} are called.\\\\n     */\\\\n    function allowance(address owner, address spender) external view returns (uint256);\\\\n\\\\n    /**\\\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\\\n     * that someone may use both the old and the new allowance by unfortunate\\\\n     * transaction ordering. One possible solution to mitigate this race\\\\n     * condition is to first reduce the spender's allowance to 0 and set the\\\\n     * desired value afterwards:\\\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\\\n     *\\\\n     * Emits an {Approval} event.\\\\n     */\\\\n    function approve(address spender, uint256 amount) external returns (bool);\\\\n\\\\n    /**\\\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\\\n     * allowance mechanism. `amount` is then deducted from the caller's\\\\n     * allowance.\\\\n     *\\\\n     * Returns a boolean value indicating whether the operation succeeded.\\\\n     *\\\\n     * Emits a {Transfer} event.\\\\n     */\\\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Bytes32ArrayUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.17;\\\\n\\\\n/**\\\\n * @title Bytes32ArrayUtils\\\\n * @author ZKP2P\\\\n *\\\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\\\n */\\\\nlibrary Bytes32ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\\\n    * @param A The input array to search\\\\n    * @param a The value to find\\\\n    * @return Returns isIn for the first occurrence starting from index 0\\\\n    */\\\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\\\n        (, bool isIn) = indexOf(A, a);\\\\n        return isIn;\\\\n    }\\\\n\\\\n    /**\\\\n    * Returns true if there are 2 elements that are the same in an array\\\\n    * @param A The input array to search\\\\n    * @return Returns boolean for the first occurrence of a duplicate\\\\n    */\\\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\\\n        require(A.length > 0, \\\\\\\"A is empty\\\\\\\");\\\\n\\\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\\\n            bytes32 current = A[i];\\\\n            for (uint256 j = i + 1; j < A.length; j++) {\\\\n                if (current == A[j]) {\\\\n                    return true;\\\\n                }\\\\n            }\\\\n        }\\\\n        return false;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     * @return Returns the array with the object removed.\\\\n     */\\\\n    function remove(bytes32[] memory A, bytes32 a)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory)\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            (bytes32[] memory _A,) = pop(A, index);\\\\n            return _A;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"bytes32 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n    * Removes specified index from array\\\\n    * @param A The input array to search\\\\n    * @param index The index to remove\\\\n    * @return Returns the new array and the removed entry\\\\n    */\\\\n    function pop(bytes32[] memory A, uint256 index)\\\\n        internal\\\\n        pure\\\\n        returns (bytes32[] memory, bytes32)\\\\n    {\\\\n        uint256 length = A.length;\\\\n        require(index < A.length, \\\\\\\"Index must be < A length\\\\\\\");\\\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\\\n        for (uint256 i = 0; i < index; i++) {\\\\n            newBytes[i] = A[i];\\\\n        }\\\\n        for (uint256 j = index + 1; j < length; j++) {\\\\n            newBytes[j - 1] = A[j];\\\\n        }\\\\n        return (newBytes, A[index]);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x14d572deda126ff812eb5ab0eed33120e13cc568fd611a4a6bff652f3e8440a8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/external/Uint256ArrayUtils.sol\\\":{\\\"content\\\":\\\"/*\\\\n    Copyright 2020 Set Labs Inc.\\\\n\\\\n    Licensed under the Apache License, Version 2.0 (the \\\\\\\"License\\\\\\\");\\\\n    you may not use this file except in compliance with the License.\\\\n    You may obtain a copy of the License at\\\\n\\\\n    http://www.apache.org/licenses/LICENSE-2.0\\\\n\\\\n    Unless required by applicable law or agreed to in writing, software\\\\n    distributed under the License is distributed on an \\\\\\\"AS IS\\\\\\\" BASIS,\\\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\\\n    See the License for the specific language governing permissions and\\\\n    limitations under the License.\\\\n\\\\n    SPDX-License-Identifier: Apache-2.0\\\\n*/\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n/**\\\\n * @title Uint256ArrayUtils\\\\n * @author Set Protocol\\\\n *\\\\n * Utility functions to handle Uint256 Arrays\\\\n */\\\\nlibrary Uint256ArrayUtils {\\\\n\\\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\\\n\\\\n    /**\\\\n     * Finds the index of the first occurrence of the given element.\\\\n     * @param A The input array to search\\\\n     * @param a The value to find\\\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\\\n     */\\\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\\\n        uint256 length = A.length;\\\\n        for (uint256 i = 0; i < length; i++) {\\\\n            if (A[i] == a) {\\\\n                return (i, true);\\\\n            }\\\\n        }\\\\n        return (MAX_INT, false);\\\\n    }\\\\n\\\\n    /**\\\\n     * Returns the combination of the two arrays\\\\n     * @param A The first array\\\\n     * @param B The second array\\\\n     * @return Returns A extended by B\\\\n     */\\\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\\\n        uint256 aLength = A.length;\\\\n        uint256 bLength = B.length;\\\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\\\n        for (uint256 i = 0; i < aLength; i++) {\\\\n            newUints[i] = A[i];\\\\n        }\\\\n        for (uint256 j = 0; j < bLength; j++) {\\\\n            newUints[aLength + j] = B[j];\\\\n        }\\\\n        return newUints;\\\\n    }\\\\n\\\\n    /**\\\\n     * @param A The input array to search\\\\n     * @param a The bytes32 to remove\\\\n     */\\\\n    function removeStorage(uint256[] storage A, uint256 a)\\\\n        internal\\\\n    {\\\\n        (uint256 index, bool isIn) = indexOf(A, a);\\\\n        if (!isIn) {\\\\n            revert(\\\\\\\"uint256 not in array.\\\\\\\");\\\\n        } else {\\\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\\\n            A.pop();\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x102021415f8444ff563fc6d0082f39296f47c09ce73fb4cd642e700ac489eefe\\\",\\\"license\\\":\\\"Apache-2.0\\\"},\\\"contracts/interfaces/IPoseidon.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IPoseidon {\\\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9ba8b00cf908c8eb9e0ef5a3b116341f6c50f7745399fc7805a148bf500991b5\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/Ramp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract Ramp is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessor _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.onRamper == msg.sender, \\\\\\\"Sender must be the on-ramper\\\\\\\");\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return accounts[_account];\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[_intentHashes[i]];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intent: intent,\\\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessor.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x55cb1c9701d9b03ff4e445f03993659c7d3b6922ad280d3b2a88edfad8af9fed\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRampV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { IERC20 } from \\\\\\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\\\\\";\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { Bytes32ArrayUtils } from \\\\\\\"../../external/Bytes32ArrayUtils.sol\\\\\\\";\\\\nimport { Uint256ArrayUtils } from \\\\\\\"../../external/Uint256ArrayUtils.sol\\\\\\\";\\\\n\\\\nimport { IPoseidon } from \\\\\\\"../../interfaces/IPoseidon.sol\\\\\\\";\\\\nimport { IRamp } from \\\\\\\"./interfaces/IRamp.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRampV2 is Ownable {\\\\n\\\\n    using Bytes32ArrayUtils for bytes32[];\\\\n    using Uint256ArrayUtils for uint256[];\\\\n\\\\n    /* ============ Events ============ */\\\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\\\n    event DepositReceived(\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        uint256 amount,\\\\n        uint256 conversionRate\\\\n    );\\\\n    event IntentSignaled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        bytes32 indexed venmoId,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 timestamp\\\\n    );\\\\n\\\\n    event IntentPruned(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId\\\\n    );\\\\n    // Do we want to emit the onRamper or the venmoId\\\\n    event IntentFulfilled(\\\\n        bytes32 indexed intentHash,\\\\n        uint256 indexed depositId,\\\\n        address indexed onRamper,\\\\n        address to,\\\\n        uint256 amount,\\\\n        uint256 feeAmount\\\\n    );\\\\n    // Do we want to emit the depositor or the venmoId\\\\n    event DepositWithdrawn(\\\\n        uint256 indexed depositId,\\\\n        address indexed depositor,\\\\n        uint256 amount\\\\n    );\\\\n\\\\n    event DepositClosed(uint256 depositId, address depositor);\\\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\\\n    event SustainabilityFeeUpdated(uint256 fee);\\\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\\\n    event NewSendProcessorSet(address sendProcessor);\\\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\\\n    event NewReceiveProcessorSet(address receiveProcessor);\\\\n\\\\n    /* ============ Structs ============ */\\\\n\\\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\\\n    // and is allowed to have at most 5 deposits associated with it.\\\\n    struct AccountInfo {\\\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\\\n        uint256[] deposits;                 // Array of open account deposits\\\\n    }\\\\n\\\\n    struct Deposit {\\\\n        address depositor;\\\\n        uint256[3] packedVenmoId;\\\\n        uint256 depositAmount;              // Amount of USDC deposited\\\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\\\n    }\\\\n\\\\n    struct DepositWithAvailableLiquidity {\\\\n        uint256 depositId;                  // ID of the deposit\\\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\\\n        Deposit deposit;                    // Deposit struct\\\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\\\n    }\\\\n\\\\n    struct Intent {\\\\n        address onRamper;                   // On-ramper's address\\\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\\\n    }\\\\n\\\\n    struct IntentWithOnRamperId {\\\\n        bytes32 intentHash;                 // Intent hash\\\\n        Intent intent;                      // Intent struct\\\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\\\n    }\\\\n\\\\n    struct DenyList {\\\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\\\n    }\\\\n\\\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\\\n    struct GlobalAccountInfo {\\\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\\\n        DenyList denyList;                  // Deny list of the account\\\\n    }\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRegisteredUser() {\\\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\\\\\"Caller must be registered user\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\\\n    \\\\n    /* ============ State Variables ============ */\\\\n    IERC20 public immutable usdc;                                   // USDC token contract\\\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\\\n\\\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\\\n\\\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\\\n\\\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\\\n\\\\n    uint256 public depositCounter;                                  // Counter for depositIds\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _owner,\\\\n        IRamp _ramp,\\\\n        IERC20 _usdc,\\\\n        IPoseidon _poseidon,\\\\n        uint256 _minDepositAmount,\\\\n        uint256 _maxOnRampAmount,\\\\n        uint256 _intentExpirationPeriod,\\\\n        uint256 _onRampCooldownPeriod,\\\\n        uint256 _sustainabilityFee,\\\\n        address _sustainabilityFeeRecipient\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        usdc = _usdc;\\\\n        ramp = _ramp;\\\\n        poseidon = _poseidon;\\\\n        minDepositAmount = _minDepositAmount;\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        sustainabilityFee = _sustainabilityFee;\\\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\\\n\\\\n        transferOwnership(_owner);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Initialize Ramp with the addresses of the Processors\\\\n     *\\\\n     * @param _registrationProcessor    Registration processor address\\\\n     * @param _sendProcessor            Send processor address\\\\n     */\\\\n    function initialize(\\\\n        IRegistrationProcessorV2 _registrationProcessor,\\\\n        ISendProcessor _sendProcessor\\\\n    )\\\\n        external\\\\n        onlyOwner\\\\n    {\\\\n        require(!isInitialized, \\\\\\\"Already initialized\\\\\\\");\\\\n\\\\n        registrationProcessor = _registrationProcessor;\\\\n        sendProcessor = _sendProcessor;\\\\n\\\\n        isInitialized = true;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\\\n     */\\\\n    function register(\\\\n        uint[2] memory _a,\\\\n        uint[2][2] memory _b,\\\\n        uint[2] memory _c,\\\\n        uint[5] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\\\\\"Account already associated with venmoId\\\\\\\");\\\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\\\n\\\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\\\n\\\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\\\n     * of USDC.\\\\n     *\\\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\\\n     * @param _depositAmount    The amount of USDC to off-ramp\\\\n     * @param _receiveAmount    The amount of USD to receive\\\\n     */\\\\n    function offRamp(\\\\n        uint256[3] memory _packedVenmoId,\\\\n        uint256 _depositAmount,\\\\n        uint256 _receiveAmount\\\\n    )\\\\n        external\\\\n        onlyRegisteredUser\\\\n    {\\\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\\\n\\\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\\\\\"Sender must be the account owner\\\\\\\");\\\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\\\\\"Maximum deposit amount reached\\\\\\\");\\\\n        require(_depositAmount >= minDepositAmount, \\\\\\\"Deposit amount must be greater than min deposit amount\\\\\\\");\\\\n        require(_receiveAmount > 0, \\\\\\\"Receive amount must be greater than 0\\\\\\\");\\\\n\\\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\\\n        uint256 depositId = depositCounter++;\\\\n\\\\n        accounts[msg.sender].deposits.push(depositId);\\\\n\\\\n        deposits[depositId] = Deposit({\\\\n            depositor: msg.sender,\\\\n            packedVenmoId: _packedVenmoId,\\\\n            depositAmount: _depositAmount,\\\\n            remainingDeposits: _depositAmount,\\\\n            outstandingIntentAmount: 0,\\\\n            conversionRate: conversionRate,\\\\n            intentHashes: new bytes32[](0)\\\\n        });\\\\n\\\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\\\n\\\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\\\n     *\\\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\\\n     * @param _amount       The amount of USDC the user wants to on-ramp\\\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\\\n     */\\\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\\\n        Deposit storage deposit = deposits[_depositId];\\\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\\\n\\\\n        // Caller validity checks\\\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\\\\\"Onramper on depositor's denylist\\\\\\\");\\\\n        require(\\\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\\\n            \\\\\\\"On ramp cool down period not elapsed\\\\\\\"\\\\n        );\\\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\\\\\"Intent still outstanding\\\\\\\");\\\\n        require(depositorVenmoIdHash != venmoIdHash, \\\\\\\"Sender cannot be the depositor\\\\\\\");\\\\n\\\\n        // Intent information checks\\\\n        require(deposit.depositor != address(0), \\\\\\\"Deposit does not exist\\\\\\\");\\\\n        require(_amount > 0, \\\\\\\"Signaled amount must be greater than 0\\\\\\\");\\\\n        require(_amount <= maxOnRampAmount, \\\\\\\"Signaled amount must be less than max on-ramp amount\\\\\\\");\\\\n        require(_to != address(0), \\\\\\\"Cannot send to zero address\\\\\\\");\\\\n\\\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\\\n\\\\n        if (deposit.remainingDeposits < _amount) {\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(_depositId);\\\\n\\\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\\\\\"Not enough liquidity\\\\\\\");\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n            deposit.remainingDeposits += reclaimableAmount;\\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n        }\\\\n\\\\n        intents[intentHash] = Intent({\\\\n            onRamper: msg.sender,\\\\n            to: _to,\\\\n            deposit: _depositId,\\\\n            amount: _amount,\\\\n            intentTimestamp: block.timestamp\\\\n        });\\\\n\\\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\\\n\\\\n        deposit.remainingDeposits -= _amount;\\\\n        deposit.outstandingIntentAmount += _amount;\\\\n        deposit.intentHashes.push(intentHash);\\\\n\\\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\\\n     *\\\\n     * @param _intentHash    Hash of intent being cancelled\\\\n     */\\\\n    function cancelIntent(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        \\\\n        require(intent.intentTimestamp != 0, \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(\\\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\\\n            \\\\\\\"Sender must be the on-ramper\\\\\\\"\\\\n        );\\\\n\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.remainingDeposits += intent.amount;\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _a        Parameter of zk proof\\\\n     * @param _b        Parameter of zk proof\\\\n     * @param _c        Parameter of zk proof\\\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\\\n     *                  nullifier, intentHash\\\\n     */\\\\n    function onRamp(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        external\\\\n    {\\\\n        (\\\\n            Intent memory intent,\\\\n            Deposit storage deposit,\\\\n            bytes32 intentHash\\\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\\\n\\\\n        _pruneIntent(deposit, intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\\\n     * deposit state is updated. USDC is transferred to the on-ramper.\\\\n     *\\\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\\\n     */\\\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\\\n        Intent memory intent = intents[_intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(deposit.depositor == msg.sender, \\\\\\\"Caller must be the depositor\\\\\\\");\\\\n\\\\n        _pruneIntent(deposit, _intentHash);\\\\n\\\\n        deposit.outstandingIntentAmount -= intent.amount;\\\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\\\n\\\\n        _transferFunds(_intentHash, intent);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\\\n     *\\\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\\\n     */\\\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\\\n        uint256 returnAmount;\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit storage deposit = deposits[depositId];\\\\n\\\\n            require(deposit.depositor == msg.sender, \\\\\\\"Sender must be the depositor\\\\\\\");\\\\n\\\\n            (\\\\n                bytes32[] memory prunableIntents,\\\\n                uint256 reclaimableAmount\\\\n            ) = _getPrunableIntents(depositId);\\\\n\\\\n            _pruneIntents(deposit, prunableIntents);\\\\n\\\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\\\n            \\\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\\\n\\\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\\\n            \\\\n            delete deposit.remainingDeposits;\\\\n            _closeDepositIfNecessary(depositId, deposit);\\\\n        }\\\\n\\\\n        usdc.transfer(msg.sender, returnAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\\\n     * signal an intent on the user's deposit they will be denied.\\\\n     *\\\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\\\n     */\\\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\\\\\"User already on denylist\\\\\\\");\\\\n\\\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\\\n\\\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a venmoId from a depositor's deny list.\\\\n     *\\\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\\\n     */\\\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\\\n\\\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\\\\\"User not on denylist\\\\\\\");\\\\n\\\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\\\n\\\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\\\n    }\\\\n\\\\n    /* ============ Governance Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _sendProcessor   New send proccesor address\\\\n     */\\\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\\\n        sendProcessor = _sendProcessor;\\\\n        emit NewSendProcessorSet(address(_sendProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\\\n     *\\\\n     * @param _registrationProcessor   New registration proccesor address\\\\n     */\\\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\\\n        registrationProcessor = _registrationProcessor;\\\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\\\n     *\\\\n     * @param _minDepositAmount   The new minimum deposit amount\\\\n     */\\\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\\\n        require(_minDepositAmount != 0, \\\\\\\"Minimum deposit cannot be zero\\\\\\\");\\\\n\\\\n        minDepositAmount = _minDepositAmount;\\\\n        emit MinDepositAmountSet(_minDepositAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\\\n     *\\\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\\\n     */\\\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\\\\\"Fee cannot be greater than max fee\\\\\\\");\\\\n\\\\n        sustainabilityFee = _fee;\\\\n        emit SustainabilityFeeUpdated(_fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\\\n     *\\\\n     * @param _feeRecipient   The new fee recipient address\\\\n     */\\\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\\\n        require(_feeRecipient != address(0), \\\\\\\"Fee recipient cannot be zero address\\\\\\\");\\\\n\\\\n        sustainabilityFeeRecipient = _feeRecipient;\\\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\\\n     * this amount a user must make multiple transactions.\\\\n     *\\\\n     * @param _maxOnRampAmount   The new max on ramp amount\\\\n     */\\\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\\\n        require(_maxOnRampAmount != 0, \\\\\\\"Max on ramp amount cannot be zero\\\\\\\");\\\\n\\\\n        maxOnRampAmount = _maxOnRampAmount;\\\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\\\n     * amount of time before they can signalIntent to on-ramp again.\\\\n     *\\\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\\\n     */\\\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\\\n     * locking up a depositor's funds.\\\\n     *\\\\n     * @param _intentExpirationPeriod   New intent expiration period\\\\n     */\\\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\\\n        require(_intentExpirationPeriod != 0, \\\\\\\"Max intent expiration period cannot be zero\\\\\\\");\\\\n\\\\n        intentExpirationPeriod = _intentExpirationPeriod;\\\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\\\n    }\\\\n\\\\n\\\\n    /* ============ External View Functions ============ */\\\\n\\\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\\\n        return deposits[_depositId];\\\\n    }\\\\n\\\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\\\n        return AccountInfo({\\\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\\\n            deposits: accounts[_account].deposits\\\\n        });\\\\n    }\\\\n\\\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\\\n            ramp.getAccountInfo(_account).venmoIdHash :\\\\n            accounts[_account].venmoIdHash;\\\\n    }\\\\n\\\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\\\n    }\\\\n\\\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\\\n    }\\\\n\\\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\\\n    }\\\\n\\\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\\\n    }\\\\n\\\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\\\n            bytes32 intentHash = _intentHashes[i];\\\\n            Intent memory intent = intents[intentHash];\\\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\\\n                intentHash: _intentHashes[i],\\\\n                intent: intent,\\\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\\\n            });\\\\n        }\\\\n\\\\n        return intentsWithOnRamperId;\\\\n    }\\\\n\\\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\\\n        \\\\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\\\n            uint256 depositId = accountDepositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n    }\\\\n\\\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\\\n\\\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\\\n            uint256 depositId = _depositIds[i];\\\\n            Deposit memory deposit = deposits[depositId];\\\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\\\n\\\\n            depositArray[i] = DepositWithAvailableLiquidity({\\\\n                depositId: depositId,\\\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\\\n                deposit: deposit,\\\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\\\n            });\\\\n        }\\\\n\\\\n        return depositArray;\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    /**\\\\n     * @notice Calculates the intentHash of new intent\\\\n     */\\\\n    function _calculateIntentHash(\\\\n        bytes32 _venmoId,\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        virtual\\\\n        returns (bytes32 intentHash)\\\\n    {\\\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\\\n     */\\\\n    function _getPrunableIntents(\\\\n        uint256 _depositId\\\\n    )\\\\n        internal\\\\n        view\\\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\\\n    {\\\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\\\n        prunableIntents = new bytes32[](intentHashes.length);\\\\n\\\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\\\n            Intent memory intent = intents[intentHashes[i]];\\\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\\\n                prunableIntents[i] = intentHashes[i];\\\\n                reclaimedAmount += intent.amount;\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\\\n            if (_intents[i] != bytes32(0)) {\\\\n                _pruneIntent(_deposit, _intents[i]);\\\\n            }\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\\\n     */\\\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\\\n        Intent memory intent = intents[_intentHash];\\\\n\\\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\\\n        delete intents[_intentHash];\\\\n        _deposit.intentHashes.removeStorage(_intentHash);\\\\n\\\\n        emit IntentPruned(_intentHash, intent.deposit);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\\\n     */\\\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\\\n        if (openDepositAmount == 0) {\\\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\\\n            emit DepositClosed(_depositId, _deposit.depositor);\\\\n            delete deposits[_depositId];\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\\\n     */\\\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\\\n        uint256 fee;\\\\n        if (sustainabilityFee != 0) {\\\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\\\n        }\\\\n\\\\n        uint256 onRampAmount = _intent.amount - fee;\\\\n        usdc.transfer(_intent.to, onRampAmount);\\\\n\\\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\\\n     * was paid off-chain inclusive of the conversionRate.\\\\n     */\\\\n    function _verifyOnRampProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[12] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(Intent memory, Deposit storage, bytes32)\\\\n    {\\\\n        (\\\\n            uint256 amount,\\\\n            uint256 timestamp,\\\\n            bytes32 offRamperIdHash,\\\\n            bytes32 onRamperIdHash,\\\\n            bytes32 intentHash\\\\n        ) = sendProcessor.processProof(\\\\n            ISendProcessor.SendProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        Intent memory intent = intents[intentHash];\\\\n        Deposit storage deposit = deposits[intent.deposit];\\\\n\\\\n        require(intent.onRamper != address(0), \\\\\\\"Intent does not exist\\\\\\\");\\\\n        require(intent.intentTimestamp <= timestamp, \\\\\\\"Intent was not created before send\\\\\\\");\\\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\\\\\"Offramper id does not match\\\\\\\");\\\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\\\\\"Onramper id does not match\\\\\\\");\\\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\\\\\"Payment was not enough\\\\\\\");\\\\n\\\\n        return (intent, deposit, intentHash);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\\\n     * different addresses.\\\\n     */\\\\n    function _verifyRegistrationProof(\\\\n        uint256[2] memory _a,\\\\n        uint256[2][2] memory _b,\\\\n        uint256[2] memory _c,\\\\n        uint256[5] memory _signals\\\\n    )\\\\n        internal\\\\n        returns(bytes32)\\\\n    {\\\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\\\n            IRegistrationProcessorV2.RegistrationProof({\\\\n                a: _a,\\\\n                b: _b,\\\\n                c: _c,\\\\n                signals: _signals\\\\n            })\\\\n        );\\\\n\\\\n        return venmoIdHash;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x518dcdcb17faceecc71150a2a412462429cdb61856603e23affd44394523dea8\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRamp.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ramp } from \\\\\\\"../../venmo-v1/Ramp.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRamp {\\\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xffaff7b2fe82cb5756f2c472987d6cfd157312da87a355f21ef7aaf62df27161\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60e06040523480156200001157600080fd5b506040516200439a3803806200439a8339810160408190526200003491620001eb565b6200003f33620000a4565b6001600160a01b0388811660805289811660c05287811660a05260078790556008869055600a8590556009849055600b839055600c80546001600160a01b031916918316919091179055620000948a620000f4565b505050505050505050506200029e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000fe62000177565b6001600160a01b038116620001695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200017481620000a4565b50565b6000546001600160a01b03163314620001d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000160565b565b6001600160a01b03811681146200017457600080fd5b6000806000806000806000806000806101408b8d0312156200020c57600080fd5b8a516200021981620001d5565b60208c0151909a506200022c81620001d5565b60408c01519099506200023f81620001d5565b60608c01519098506200025281620001d5565b8097505060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b01516200028b81620001d5565b809150509295989b9194979a5092959850565b60805160a05160c0516140a2620002f8600039600081816102f5015261217d015260008181610628015261112801526000818161039a0152818161146601528181611ad301528181612bd70152612c8601526140a26000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d36600461355b565b61073a565b6040519081526020015b60405180910390f35b6102a26102c336600461355b565b610762565b6102db6102d636600461355b565b610788565b005b6102db6102eb36600461357f565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db61034636600461357f565b610914565b6102db61035936600461357f565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db610390366004613598565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca36600461357f565b610f39565b6103e26103dd36600461355b565b610fda565b6040516102ac91906135d1565b6102db6103fd366004613615565b611053565b6102db6104103660046136bc565b6110e6565b6102a260095481565b61043161042c36600461355b565b611522565b6040516102ac919061380a565b6102db61044c36600461357f565b611770565b6102a260075481565b6102db61046836600461357f565b61180f565b6102db61047b3660046138b9565b611955565b6102db611b48565b6104316104963660046138b9565b611b5c565b6104ae6104a936600461355b565b611d42565b6040516102ac919061394e565b6000546001600160a01b0316610317565b6105156104da36600461357f565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db61055636600461357f565b611de1565b6102db61056936600461357f565b611e78565b61058161057c36600461357f565b611f7c565b6040516102ac91906139a6565b6102a2600a5481565b6105de6105a536600461357f565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e36600461355b565b61206a565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a261065836600461355b565b612122565b6102db61066b366004613a58565b6121f4565b6102db61067e36600461357f565b6122ae565b600c54610317906001600160a01b031681565b6102db6106a4366004613b0f565b6123df565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b84565b612467565b6040516102ac9190613bf8565b6102db6106fc36600461355b565b6125b7565b600254610317906001600160a01b031681565b6102db61072236600461355b565b61260d565b610372610735366004613c88565b612686565b60006003600061074984612122565b8152602001908152602001600020600101549050919050565b60006003600061077184612122565b815260208101919091526040016000205492915050565b6107906126c1565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f033612122565b036108165760405162461bcd60e51b815260040161080d90613cb4565b60405180910390fd5b600061082133612122565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c6126c1565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a96126c1565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e933612122565b03610a065760405162461bcd60e51b815260040161080d90613cb4565b6000610a1133612122565b6000858152600560205260408120805492935091610a37906001600160a01b0316612122565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613d01565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b848861271b565b90508583600501541015610e0057600080610d6589612786565b9150915087818660050154610d7a9190613d01565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc9858361292d565b80856005016000828254610ddd9190613d01565b9250508190555080856006016000828254610df89190613d14565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613d14565b9250508190555085836006016000828254610ec29190613d01565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f416126c1565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe984612122565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b6126c1565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f133612122565b0361110e5760405162461bcd60e51b815260040161080d90613cb4565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613d27565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d35565b9050806111aa33612122565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d4e565b6113479190613d7b565b600d8054919250600091908261135c83613d8f565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe91830190600361339c565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133da565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613da8565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a461364e565b6040519080825280602002602001820160405280156115dd57816020015b6115ca613414565b8152602001906001900390816115c25790505b50915060005b815181101561176957600082828151811061160057611600613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612786565b915050604051806080016040528084815260200161171a8460000151612122565b81526020018381526020018284606001516117359190613d01565b81525086858151811061174a5761174a613dca565b60200260200101819052505050508061176290613d8f565b90506115e3565b5050919050565b6117786126c1565b66b1a2bc2ec500008111156117da5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661188f5760405162461bcd60e51b815260040161080d90613de0565b80546001600160a01b031633146118e85760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118f2818461298f565b816060015181600601600082825461190a9190613d14565b9250508190555042600360006119238560000151612122565b815260200190815260200160002060010181905550611946826040015182612a87565b6119508383612b7a565b505050565b6000805b8251811015611ab657600083828151811061197657611976613dca565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119ee5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119fa84612786565b91509150611a08838361292d565b808360050154611a189190613d01565b611a229087613d01565b955080836006016000828254611a389190613d14565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a7f908590613d01565b60405190815260200160405180910390a360006005840155611aa18484612a87565b5050505080611aaf90613d8f565b9050611959565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613da8565b611b506126c1565b611b5a6000612d58565b565b606081516001600160401b03811115611b7757611b7761364e565b604051908082528060200260200182016040528015611bb057816020015b611b9d613414565b815260200190600190039081611b955790505b50905060005b8251811015611d3c576000838281518110611bd357611bd3613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c2357505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611cb657602002820191906000526020600020905b815481526020019060010190808311611ca2575b50505050508152505090506000611ccc83612786565b9150506040518060800160405280848152602001611ced8460000151612122565b8152602001838152602001828460600151611d089190613d01565b815250858581518110611d1d57611d1d613dca565b602002602001018190525050505080611d3590613d8f565b9050611bb6565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d6b84612122565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b50505050508152509050919050565b611de96126c1565b80600003611e435760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e8333612122565b03611ea05760405162461bcd60e51b815260040161080d90613cb4565b6000611eab33612122565b6000818152600360208181526040808420878552909201905290205490915060ff16611f105760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f469060020183612da8565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f84613440565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fc75750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561205a57602002820191906000526020600020905b815481526020019060010190808311612046575b5050505050815250509050919050565b6120726126c1565b6001600160a01b0381166120d45760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561215e576001600160a01b0382166000908152600460205260409020546121ee565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ec9190810190613e0f565b515b92915050565b60006121ff33612122565b1461225c5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061226a85858585612ed1565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036123235760405162461bcd60e51b815260040161080d90613de0565b61232c33612122565b815161233790612122565b146123845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061239f818461298f565b81606001518160050160008282546123b79190613d01565b909155505060608201516006820180546000906123d5908490613d14565b9091555050505050565b60008060006123f087878787612f71565b925092509250612400828261298f565b82606001518260060160008282546124189190613d14565b9250508190555042600360006124318660000151612122565b815260200190815260200160002060010181905550612454836040015183612a87565b61245e8184612b7a565b50505050505050565b60606000826001600160401b038111156124835761248361364e565b6040519080825280602002602001820160405280156124bc57816020015b6124a961348c565b8152602001906001900390816124a15790505b50905060005b838110156125af5760008585838181106124de576124de613dca565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061255d5761255d613dca565b90506020020135815260200182815260200161257c8360000151612122565b81525084848151811061259157612591613dca565b60200260200101819052505050806125a890613d8f565b90506124c2565b509392505050565b6125bf6126c1565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6126156126c1565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61268381612d58565b50565b60006003600061269585612122565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061277e7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613edd565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127e357602002820191906000526020600020905b8154815260200190600101908083116127cf575b5050505050905080516001600160401b038111156128035761280361364e565b60405190808252806020026020018201604052801561282c578160200160208202803683370190505b50925060005b81518110156129265760006006600084848151811061285357612853613dca565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128c691613d01565b1015612915578282815181106128de576128de613dca565b60200260200101518583815181106128f8576128f8613dca565b602090810291909101015260608101516129129085613d01565b93505b5061291f81613d8f565b9050612832565b5050915091565b60005b8151811015611950576000801b82828151811061294f5761294f613dca565b60200260200101511461297f5761297f8383838151811061297257612972613dca565b602002602001015161298f565b61298881613d8f565b9050612930565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129f690612122565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a526008840183612da8565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a9d9190613d01565b9050806000036119505781546001600160a01b03166000908152600460205260409020612acd9060010184613244565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b7391906134b4565b5050505050565b6000600b54600014612c4657670de0b6b3a7640000600b548360600151612ba19190613d4e565b612bab9190613d7b565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190613da8565b505b6000818360600151612c589190613d14565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf39190613da8565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612e0484805480602002602001604051908101604052809291908181526020018280548015612df957602002820191906000526020600020905b815481526020019060010190808311612de5575b5050505050846132e9565b9150915080612e4d5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e5e90600190613d14565b9050808314612ea357848181548110612e7957612e79613dca565b9060005260206000200154858481548110612e9657612e96613dca565b6000918252602090912001555b84805480612eb357612eb3613ef1565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f2491600401613f58565b6020604051808303816000875af1158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f679190613d35565b9695505050505050565b612f796134d2565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fd59190600401613fc7565b60a0604051808303816000875af1158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613018919061402c565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130a45760405162461bcd60e51b815260040161080d90613de0565b85826080015111156131035760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b80548590613119906001600160a01b0316612122565b146131665760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b836131748360000151612122565b146131c15760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131de9190613d4e565b6131e89190613d7b565b8710156132305760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b6000806132a08480548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050508461334c565b9150915080612e4d5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b81811015613339578486828151811061330d5761330d613dca565b602002602001015103613327579250600191506133459050565b8061333181613d8f565b9150506132f2565b50600019600092509250505b9250929050565b81516000908190815b81811015613339578486828151811061337057613370613dca565b60200260200101510361338a579250600191506133459050565b8061339481613d8f565b915050613355565b82600381019282156133ca579160200282015b828111156133ca5782518255916020019190600101906133af565b506133d6929150613513565b5090565b8280548282559060005260206000209081019282156133ca57916020028201828111156133ca5782518255916020019190600101906133af565b6040805160808101825260008082526020820152908101613433613440565b8152602001600081525090565b6040518060e0016040528060006001600160a01b03168152602001613463613528565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134a76134d2565b8152600060209091015290565b50805460008255906000526020600020908101906126839190613513565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133d65760008155600101613514565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461268357600080fd5b60006020828403121561356d57600080fd5b813561357881613546565b9392505050565b60006020828403121561359157600080fd5b5035919050565b6000806000606084860312156135ad57600080fd5b833592506020840135915060408401356135c681613546565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613609578351835292840192918401916001016135ed565b50909695505050505050565b6000806040838503121561362857600080fd5b823561363381613546565b9150602083013561364381613546565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156136865761368661364e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136b4576136b461364e565b604052919050565b600080600060a084860312156136d157600080fd5b84601f8501126136e057600080fd5b604051606081018181106001600160401b03821117156137025761370261364e565b60405280606086018781111561371757600080fd5b865b81811015613731578035835260209283019201613719565b5091979135965050608094909401359392505050565b8060005b6003811015612ecb57815184526020938401939091019060010161374b565b600061012080840160018060a01b03845116855260208085015161379082880182613747565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137fe57835185529382019392820192600191909101906137de565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561388857603f19898403018552815160808151855288820151898601528782015181898701526138678287018261376a565b60609384015196909301959095525094870194925090860190600101613831565b509098975050505050505050565b60006001600160401b038211156138af576138af61364e565b5060051b60200190565b600060208083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b8301601f810185136138f357600080fd5b803561390661390182613896565b61368c565b81815260059190911b8201830190838101908783111561392557600080fd5b928401925b828410156139435783358252928401929084019061392a565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561399b578351825292840192600192909201919084019061397b565b509695505050505050565b602081526000613578602083018461376a565b600082601f8301126139ca57600080fd5b6139d2613664565b8060408401858111156139e457600080fd5b845b818110156139fe5780358452602093840193016139e6565b509095945050505050565b600082601f830112613a1a57600080fd5b613a22613664565b806080840185811115613a3457600080fd5b845b818110156139fe57613a4887826139b9565b8452602090930192604001613a36565b6000806000806101a0808688031215613a7057600080fd5b613a7a87876139b9565b9450613a898760408801613a09565b9350613a988760c088016139b9565b92508661011f870112613aaa57600080fd5b60405160a081018181106001600160401b0382111715613acc57613acc61364e565b604052908601908088831115613ae157600080fd5b61010088015b83811015613aff578035825260209182019101613ae7565b5050809250505092959194509250565b600080600080610280808688031215613b2757600080fd5b613b3187876139b9565b9450613b408760408801613a09565b9350613b4f8760c088016139b9565b92508661011f870112613b6157600080fd5b60405161018081018181106001600160401b0382111715613acc57613acc61364e565b60008060208385031215613b9757600080fd5b82356001600160401b0380821115613bae57600080fd5b818501915085601f830112613bc257600080fd5b813581811115613bd157600080fd5b8660208260051b8501011115613be657600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7b578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c15565b5091979650505050505050565b60008060408385031215613c9b57600080fd5b8235613ca681613546565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ee576121ee613ceb565b818103818111156121ee576121ee613ceb565b606081016121ee8284613747565b600060208284031215613d4757600080fd5b5051919050565b80820281158282048414176121ee576121ee613ceb565b634e487b7160e01b600052601260045260246000fd5b600082613d8a57613d8a613d65565b500490565b600060018201613da157613da1613ceb565b5060010190565b600060208284031215613dba57600080fd5b8151801515811461357857600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613e2257600080fd5b82516001600160401b0380821115613e3957600080fd5b9084019060408287031215613e4d57600080fd5b613e55613664565b825181528383015182811115613e6a57600080fd5b80840193505086601f840112613e7f57600080fd5b82519150613e8f61390183613896565b82815260059290921b83018401918481019088841115613eae57600080fd5b938501935b83851015613ecc57845182529385019390850190613eb3565b948201949094529695505050505050565b600082613eec57613eec613d65565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ecb578151845260209384019390910190600101613f0b565b8060005b6002811015612ecb57613f42848351613f07565b6040939093019260209190910190600101613f2e565b60006101a082019050613f6c828451613f07565b602080840151613f7f6040850182613f2a565b506040840151613f9260c0850182613f07565b506060840151610100840160005b6005811015613fbd57825182529183019190830190600101613fa0565b5050505092915050565b600061028082019050613fdb828451613f07565b602080840151613fee6040850182613f2a565b50604084015161400160c0850182613f07565b506060840151610100840160005b600c811015613fbd5782518252918301919083019060010161400f565b600080600080600060a0868803121561404457600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212205f324bcc64951b344706a8dfc43dadc49148f6b3a1ef8999a96c6941721f73f764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80637b510fe81161015c578063ce523ca3116100ce578063ecb3dc8811610087578063ecb3dc88146106c5578063ecd618f0146106ce578063ed1692b8146106ee578063eea1d19714610701578063f2fde38b14610714578063fbf15b1f1461072757600080fd5b8063ce523ca31461065d578063d55f960d14610670578063d9478d2014610683578063da26c18914610696578063e215ad59146106a9578063e279d964146106bc57600080fd5b80639f9fb968116101205780639f9fb9681461056e578063a1a954b71461058e578063b02c43d014610597578063b3fa4c0114610610578063c62b919e14610623578063cc181c2e1461064a57600080fd5b80637b510fe81461049b5780638da5cb5b146104bb5780639021578a146104cc5780639087beff146105485780639b357b5a1461055b57600080fd5b806342987349116102005780635dd76515116101b95780635dd765151461043e578063645006ca1461045157806366ec84191461045a578063711347621461046d578063715018a61461048057806371a28f691461048857600080fd5b806342987349146103bc5780634595bba0146103cf578063485cc955146103ef5780634877b7b614610402578063495223e7146104155780635081d9521461041e57600080fd5b8063238c849411610252578063238c84941461032f5780632a80cda314610338578063317dcc961461034b578063392e53cd1461035e5780633adba28a146103825780633e413bee1461039557600080fd5b80630f1ef98c1461028f578063123a11e4146102b5578063133de6cb146102c8578063148172da146102dd57806315d276e1146102f0575b600080fd5b6102a261029d36600461355b565b61073a565b6040519081526020015b60405180910390f35b6102a26102c336600461355b565b610762565b6102db6102d636600461355b565b610788565b005b6102db6102eb36600461357f565b6107e5565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ac565b6102a2600b5481565b6102db61034636600461357f565b610914565b6102db61035936600461357f565b6109a1565b60025461037290600160a01b900460ff1681565b60405190151581526020016102ac565b6102db610390366004613598565b6109de565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102db6103ca36600461357f565b610f39565b6103e26103dd36600461355b565b610fda565b6040516102ac91906135d1565b6102db6103fd366004613615565b611053565b6102db6104103660046136bc565b6110e6565b6102a260095481565b61043161042c36600461355b565b611522565b6040516102ac919061380a565b6102db61044c36600461357f565b611770565b6102a260075481565b6102db61046836600461357f565b61180f565b6102db61047b3660046138b9565b611955565b6102db611b48565b6104316104963660046138b9565b611b5c565b6104ae6104a936600461355b565b611d42565b6040516102ac919061394e565b6000546001600160a01b0316610317565b6105156104da36600461357f565b600660205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03938416949390921692909185565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a0016102ac565b6102db61055636600461357f565b611de1565b6102db61056936600461357f565b611e78565b61058161057c36600461357f565b611f7c565b6040516102ac91906139a6565b6102a2600a5481565b6105de6105a536600461357f565b6005602081905260009182526040909120805460048201549282015460068301546007909301546001600160a01b039092169392909185565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102ac565b6102db61061e36600461355b565b61206a565b6103177f000000000000000000000000000000000000000000000000000000000000000081565b6102a261065836600461355b565b612122565b6102db61066b366004613a58565b6121f4565b6102db61067e36600461357f565b6122ae565b600c54610317906001600160a01b031681565b6102db6106a4366004613b0f565b6123df565b600154610317906001600160a01b031681565b6102a260085481565b6102a2600d5481565b6106e16106dc366004613b84565b612467565b6040516102ac9190613bf8565b6102db6106fc36600461355b565b6125b7565b600254610317906001600160a01b031681565b6102db61072236600461355b565b61260d565b610372610735366004613c88565b612686565b60006003600061074984612122565b8152602001908152602001600020600101549050919050565b60006003600061077184612122565b815260208101919091526040016000205492915050565b6107906126c1565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6e7665a41605edc0d70f4b991d652755f380754eb092d81ef9ab93664778d59e906020015b60405180910390a150565b60006107f033612122565b036108165760405162461bcd60e51b815260040161080d90613cb4565b60405180910390fd5b600061082133612122565b6000818152600360208181526040808420878552909201905290205490915060ff16156108905760405162461bcd60e51b815260206004820152601860248201527f5573657220616c7265616479206f6e2064656e796c6973740000000000000000604482015260640161080d565b60008181526003602081815260408084208685528084018352818520805460ff19166001908117909155938352600201805493840181558452922001839055517f976c693d56f27ba17d902bda80c4fa0416b773fbf268bcb0ee71689234d769ee906109089083908590918252602082015260400190565b60405180910390a15050565b61091c6126c1565b8060000361096c5760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206465706f7369742063616e6e6f74206265207a65726f0000604482015260640161080d565b60078190556040518181527fbdde72a6d8d8b42770c9899945ccdce09d0c5c794d3326cdb2d2cca61b12a9fc906020016107da565b6109a96126c1565b60098190556040518181527f88397975d177ce5e18abf3a5fdb8de773e80673d85eeb54f48cfaf688b3d2c3e906020016107da565b60006109e933612122565b03610a065760405162461bcd60e51b815260040161080d90613cb4565b6000610a1133612122565b6000858152600560205260408120805492935091610a37906001600160a01b0316612122565b6000818152600360208181526040808420888552909201905290205490915060ff1615610aa65760405162461bcd60e51b815260206004820181905260248201527f4f6e72616d706572206f6e206465706f7369746f7227732064656e796c697374604482015260640161080d565b6009546000848152600360205260409020600101544291610ac691613d01565b1115610b205760405162461bcd60e51b8152602060048201526024808201527f4f6e2072616d7020636f6f6c20646f776e20706572696f64206e6f7420656c616044820152631c1cd95960e21b606482015260840161080d565b60008381526003602052604090205415610b7c5760405162461bcd60e51b815260206004820152601860248201527f496e74656e74207374696c6c206f75747374616e64696e670000000000000000604482015260640161080d565b828103610bcb5760405162461bcd60e51b815260206004820152601e60248201527f53656e6465722063616e6e6f7420626520746865206465706f7369746f720000604482015260640161080d565b81546001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b604482015260640161080d565b60008511610c7a5760405162461bcd60e51b815260206004820152602660248201527f5369676e616c656420616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161080d565b600854851115610ce95760405162461bcd60e51b815260206004820152603460248201527f5369676e616c656420616d6f756e74206d757374206265206c657373207468616044820152731b881b585e081bdb8b5c985b5c08185b5bdd5b9d60621b606482015260840161080d565b6001600160a01b038416610d3f5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f20616464726573730000000000604482015260640161080d565b6000610d4b848861271b565b90508583600501541015610e0057600080610d6589612786565b9150915087818660050154610d7a9190613d01565b1015610dbf5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f756768206c697175696469747960601b604482015260640161080d565b610dc9858361292d565b80856005016000828254610ddd9190613d01565b9250508190555080856006016000828254610df89190613d14565b909155505050505b6040805160a0810182523381526001600160a01b0387811660208084019182528385018c8152606085018c81524260808701908152600089815260068552888120975188549088166001600160a01b0319918216178955955160018901805491909816961695909517909555905160028601555160038086019190915592516004909401939093558781529152908120829055600584018054889290610ea7908490613d14565b9250508190555085836006016000828254610ec29190613d01565b9091555050600883018054600181018255600091825260209182902001829055604080516001600160a01b038816815291820188905242908201528490889083907f1a1292e170a0f000ccf956afba79bee0f9ec1d81f3f901c1d4d11e1f336aae109060600160405180910390a450505050505050565b610f416126c1565b80600003610fa55760405162461bcd60e51b815260206004820152602b60248201527f4d617820696e74656e742065787069726174696f6e20706572696f642063616e60448201526a6e6f74206265207a65726f60a81b606482015260840161080d565b600a8190556040518181527f55e3f6b95de9a0ec782f892e93fafe4e56be0696df204ddf8e0a40a9a713a803906020016107da565b606060036000610fe984612122565b815260200190815260200160002060020160000180548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b61105b6126c1565b600254600160a01b900460ff16156110ab5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161080d565b600180546001600160a01b039384166001600160a01b0319909116179055600280546001600160a81b0319169190921617600160a01b179055565b60006110f133612122565b0361110e5760405162461bcd60e51b815260040161080d90613cb4565b6040516304b98e1d60e31b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325cc70e89061115d908790600401613d27565b602060405180830381865afa15801561117a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119e9190613d35565b9050806111aa33612122565b146111f75760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d75737420626520746865206163636f756e74206f776e6572604482015260640161080d565b336000908152600460205260409020600101546005116112595760405162461bcd60e51b815260206004820152601e60248201527f4d6178696d756d206465706f73697420616d6f756e7420726561636865640000604482015260640161080d565b6007548310156112ca5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b881b5a5b8819195c1bdcda5d08185b5bdd5b9d60521b606482015260840161080d565b600082116113285760405162461bcd60e51b815260206004820152602560248201527f5265636569766520616d6f756e74206d75737420626520677265617465722074604482015264068616e20360dc1b606482015260840161080d565b60008261133d670de0b6b3a764000086613d4e565b6113479190613d7b565b600d8054919250600091908261135c83613d8f565b9091555033600081815260046020908152604080832060019081018054808301825590855283852001869055815160e0810183529485528483018c81528583018c9052606086018c90526080860185905260a086018990528251858152808501845260c087015286855260059093529220835181546001600160a01b0319166001600160a01b03909116178155905193945091926113fe91830190600361339c565b5060408201516004820155606082015160058201556080820151600682015560a0820151600782015560c082015180516114429160088401916020909101906133da565b50506040516323b872dd60e01b8152336004820152306024820152604481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd906064016020604051808303816000875af11580156114b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114dc9190613da8565b506040805186815260208101849052849183917f36b046df2c296f2a5a78570d5e52a92773cbb616825b1af59a49a4d02df2b109910160405180910390a3505050505050565b6001600160a01b038116600090815260046020908152604080832060010180548251818502810185019093528083526060949383018282801561158457602002820191906000526020600020905b815481526020019060010190808311611570575b5050505050905080516001600160401b038111156115a4576115a461364e565b6040519080825280602002602001820160405280156115dd57816020015b6115ca613414565b8152602001906001900390816115c25790505b50915060005b815181101561176957600082828151811061160057611600613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611650575050505050815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882018054806020026020016040519081016040528092919081815260200182805480156116e357602002820191906000526020600020905b8154815260200190600101908083116116cf575b505050505081525050905060006116f983612786565b915050604051806080016040528084815260200161171a8460000151612122565b81526020018381526020018284606001516117359190613d01565b81525086858151811061174a5761174a613dca565b60200260200101819052505050508061176290613d8f565b90506115e3565b5050919050565b6117786126c1565b66b1a2bc2ec500008111156117da5760405162461bcd60e51b815260206004820152602260248201527f4665652063616e6e6f742062652067726561746572207468616e206d61782066604482015261656560f01b606482015260840161080d565b600b8190556040518181527f44f48e1b871e6db1e909a7b253b054b7150a0b4ddf4d59b159c827d82e725670906020016107da565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151919290911661188f5760405162461bcd60e51b815260040161080d90613de0565b80546001600160a01b031633146118e85760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6118f2818461298f565b816060015181600601600082825461190a9190613d14565b9250508190555042600360006119238560000151612122565b815260200190815260200160002060010181905550611946826040015182612a87565b6119508383612b7a565b505050565b6000805b8251811015611ab657600083828151811061197657611976613dca565b6020908102919091018101516000818152600590925260409091208054919250906001600160a01b031633146119ee5760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206465706f7369746f7200000000604482015260640161080d565b6000806119fa84612786565b91509150611a08838361292d565b808360050154611a189190613d01565b611a229087613d01565b955080836006016000828254611a389190613d14565b9091555050825460058401546001600160a01b039091169085907fae1f357660ab777dcfd38c0ab6357834684ec26289ecfa07ec65dbf6c3c6431290611a7f908590613d01565b60405190815260200160405180910390a360006005840155611aa18484612a87565b5050505080611aaf90613d8f565b9050611959565b5060405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611b24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119509190613da8565b611b506126c1565b611b5a6000612d58565b565b606081516001600160401b03811115611b7757611b7761364e565b604051908082528060200260200182016040528015611bb057816020015b611b9d613414565b815260200190600190039081611b955790505b50905060005b8251811015611d3c576000838281518110611bd357611bd3613dca565b6020908102919091018101516000818152600583526040808220815160e08101835281546001600160a01b0316815282516060810190935293955091938301906001830160038282826020028201915b815481526020019060010190808311611c2357505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201805480602002602001604051908101604052809291908181526020018280548015611cb657602002820191906000526020600020905b815481526020019060010190808311611ca2575b50505050508152505090506000611ccc83612786565b9150506040518060800160405280848152602001611ced8460000151612122565b8152602001838152602001828460600151611d089190613d01565b815250858581518110611d1d57611d1d613dca565b602002602001018190525050505080611d3590613d8f565b9050611bb6565b50919050565b6040805180820190915260008152606060208201526040518060400160405280611d6b84612122565b81526001600160a01b0384166000908152600460209081526040918290206001018054835181840281018401909452808452938201939091830182828015611dd257602002820191906000526020600020905b815481526020019060010190808311611dbe575b50505050508152509050919050565b611de96126c1565b80600003611e435760405162461bcd60e51b815260206004820152602160248201527f4d6178206f6e2072616d7020616d6f756e742063616e6e6f74206265207a65726044820152606f60f81b606482015260840161080d565b60088190556040518181527fcab6b49ca21dd111cf4a55d507bbe89dd12d69216e28247060d4b2163ca41b39906020016107da565b6000611e8333612122565b03611ea05760405162461bcd60e51b815260040161080d90613cb4565b6000611eab33612122565b6000818152600360208181526040808420878552909201905290205490915060ff16611f105760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081bdb8819195b9e5b1a5cdd60621b604482015260640161080d565b60008181526003602081815260408084208685528084018352908420805460ff191690559284905252611f469060020183612da8565b60408051828152602081018490527f8935205b1b382095d2d95efbb36f81a11a34c548d45af26adc1a02d2f2bb546f9101610908565b611f84613440565b600082815260056020908152604091829020825160e08101845281546001600160a01b031681528351606081019485905290939192840191600184019060039082845b815481526020019060010190808311611fc75750505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820180548060200260200160405190810160405280929190818152602001828054801561205a57602002820191906000526020600020905b815481526020019060010190808311612046575b5050505050815250509050919050565b6120726126c1565b6001600160a01b0381166120d45760405162461bcd60e51b8152602060048201526024808201527f46656520726563697069656e742063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840161080d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f594ad6ee98bfc0c73e6d15fd4e762502f359e05d26907b7fa1ff82eb5e99f6e4906020016107da565b6001600160a01b0381166000908152600460205260408120541561215e576001600160a01b0382166000908152600460205260409020546121ee565b604051630f6a21fd60e31b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b510fe890602401600060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ec9190810190613e0f565b515b92915050565b60006121ff33612122565b1461225c5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616c7265616479206173736f6369617465642077697468206044820152661d995b9b5bd25960ca1b606482015260840161080d565b600061226a85858585612ed1565b336000818152600460205260408082208490555192935083927f672144042732f7b1cdbf0772464ae545aedd7f41d38b8487dafd9085496a5d519190a35050505050565b6000818152600660209081526040808320815160a08101835281546001600160a01b039081168252600183015416938101939093526002810154918301919091526003810154606083015260040154608082018190529091036123235760405162461bcd60e51b815260040161080d90613de0565b61232c33612122565b815161233790612122565b146123845760405162461bcd60e51b815260206004820152601c60248201527f53656e646572206d75737420626520746865206f6e2d72616d70657200000000604482015260640161080d565b604080820151600090815260056020522061239f818461298f565b81606001518160050160008282546123b79190613d01565b909155505060608201516006820180546000906123d5908490613d14565b9091555050505050565b60008060006123f087878787612f71565b925092509250612400828261298f565b82606001518260060160008282546124189190613d14565b9250508190555042600360006124318660000151612122565b815260200190815260200160002060010181905550612454836040015183612a87565b61245e8184612b7a565b50505050505050565b60606000826001600160401b038111156124835761248361364e565b6040519080825280602002602001820160405280156124bc57816020015b6124a961348c565b8152602001906001900390816124a15790505b50905060005b838110156125af5760008585838181106124de576124de613dca565b60209081029290920135600081815260068452604090819020815160a08101835281546001600160a01b0390811682526001830154169581019590955260028101548583015260038101546060808701919091526004909101546080860152815190810190915290935090508088888681811061255d5761255d613dca565b90506020020135815260200182815260200161257c8360000151612122565b81525084848151811061259157612591613dca565b60200260200101819052505050806125a890613d8f565b90506124c2565b509392505050565b6125bf6126c1565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f73d3ac111d5926fbfd68ade03832f0b1a4daef0cd0effc1fa0829264bcc57c41906020016107da565b6126156126c1565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080d565b61268381612d58565b50565b60006003600061269585612122565b81526020808201929092526040908101600090812085825260030190925290205460ff16905092915050565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080d565b6040805160208101849052908101829052426060820152600090819060800160408051601f198184030181529190528051602090910120905061277e7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182613edd565b949350505050565b600081815260056020908152604080832060080180548251818502810185019093528083526060949384939291908301828280156127e357602002820191906000526020600020905b8154815260200190600101908083116127cf575b5050505050905080516001600160401b038111156128035761280361364e565b60405190808252806020026020018201604052801561282c578160200160208202803683370190505b50925060005b81518110156129265760006006600084848151811061285357612853613dca565b6020908102919091018101518252818101929092526040908101600020815160a08101835281546001600160a01b03908116825260018301541693810193909352600281015491830191909152600381015460608301526004015460808201819052600a5491925042916128c691613d01565b1015612915578282815181106128de576128de613dca565b60200260200101518583815181106128f8576128f8613dca565b602090810291909101015260608101516129129085613d01565b93505b5061291f81613d8f565b9050612832565b5050915091565b60005b8151811015611950576000801b82828151811061294f5761294f613dca565b60200260200101511461297f5761297f8383838151811061297257612972613dca565b602002602001015161298f565b61298881613d8f565b9050612930565b6000818152600660209081526040808320815160a08101835281546001600160a01b0390811680835260018401549091169482019490945260028201549281019290925260038082015460608401526004909101546080830152909290916129f690612122565b8152602080820192909252604090810160009081208190558481526006909252812080546001600160a01b031990811682556001820180549091169055600281018290556003810182905560040155612a526008840183612da8565b604080820151905183907fe8a865b4bab023c399cbd1f2cdd0df2199beb6e5012a4bd2d7691cf7e4199d5a90600090a3505050565b600081600501548260060154612a9d9190613d01565b9050806000036119505781546001600160a01b03166000908152600460205260409020612acd9060010184613244565b8154604080518581526001600160a01b0390921660208301527f8ac07cc6e38c6222dd0309c80353c1962354bacf222b825d7401cc80e93ff3cc910160405180910390a1600083815260056020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055906004820160009055600582016000905560068201600090556007820160009055600882016000612b7391906134b4565b5050505050565b6000600b54600014612c4657670de0b6b3a7640000600b548360600151612ba19190613d4e565b612bab9190613d7b565b600c5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190613da8565b505b6000818360600151612c589190613d14565b602084015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf39190613da8565b50825160408085015160208087015183516001600160a01b03918216815291820186905292810186905291909216919086907ffa03438194e61c243c6bb5349f1e1dc674431b86f119b5e3b2b327bc43446bce9060600160405180910390a450505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080612e0484805480602002602001604051908101604052809291908181526020018280548015612df957602002820191906000526020600020905b815481526020019060010190808311612de5575b5050505050846132e9565b9150915080612e4d5760405162461bcd60e51b8152602060048201526015602482015274313cba32b99999103737ba1034b71030b93930bc9760591b604482015260640161080d565b8354600090612e5e90600190613d14565b9050808314612ea357848181548110612e7957612e79613dca565b9060005260206000200154858481548110612e9657612e96613dca565b6000918252602090912001555b84805480612eb357612eb3613ef1565b60019003818190600052602060002001600090559055505b50505050565b6001546040805160808101825286815260208101869052808201859052606081018490529051630be4767960e11b815260009283926001600160a01b03909116916317c8ecf291612f2491600401613f58565b6020604051808303816000875af1158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f679190613d35565b9695505050505050565b612f796134d2565b60025460408051608081018252878152602081018790528082018690526060810185905290516347f055c760e11b81526000928392839283928392839283926001600160a01b031691638fe0ab8e91612fd59190600401613fc7565b60a0604051808303816000875af1158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613018919061402c565b6000818152600660209081526040808320815160a08101835281546001600160a01b03908116825260018301548116828601526002830154828501819052600384015460608401526004909301546080830152918552600590935292208151979c50959a5093985091965094509092166130a45760405162461bcd60e51b815260040161080d90613de0565b85826080015111156131035760405162461bcd60e51b815260206004820152602260248201527f496e74656e7420776173206e6f742063726561746564206265666f72652073656044820152611b9960f21b606482015260840161080d565b80548590613119906001600160a01b0316612122565b146131665760405162461bcd60e51b815260206004820152601b60248201527f4f666672616d70657220696420646f6573206e6f74206d617463680000000000604482015260640161080d565b836131748360000151612122565b146131c15760405162461bcd60e51b815260206004820152601a60248201527f4f6e72616d70657220696420646f6573206e6f74206d61746368000000000000604482015260640161080d565b8060070154670de0b6b3a764000083606001516131de9190613d4e565b6131e89190613d7b565b8710156132305760405162461bcd60e51b81526020600482015260166024820152750a0c2f2dacadce840eec2e640dcdee840cadcdeeaced60531b604482015260640161080d565b909d909c50909a5098505050505050505050565b6000806132a08480548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050508461334c565b9150915080612e4d5760405162461bcd60e51b81526020600482015260156024820152743ab4b73a191a9b103737ba1034b71030b93930bc9760591b604482015260640161080d565b81516000908190815b81811015613339578486828151811061330d5761330d613dca565b602002602001015103613327579250600191506133459050565b8061333181613d8f565b9150506132f2565b50600019600092509250505b9250929050565b81516000908190815b81811015613339578486828151811061337057613370613dca565b60200260200101510361338a579250600191506133459050565b8061339481613d8f565b915050613355565b82600381019282156133ca579160200282015b828111156133ca5782518255916020019190600101906133af565b506133d6929150613513565b5090565b8280548282559060005260206000209081019282156133ca57916020028201828111156133ca5782518255916020019190600101906133af565b6040805160808101825260008082526020820152908101613433613440565b8152602001600081525090565b6040518060e0016040528060006001600160a01b03168152602001613463613528565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604080516060810190915260008152602081016134a76134d2565b8152600060209091015290565b50805460008255906000526020600020908101906126839190613513565b6040518060a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b5b808211156133d65760008155600101613514565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b038116811461268357600080fd5b60006020828403121561356d57600080fd5b813561357881613546565b9392505050565b60006020828403121561359157600080fd5b5035919050565b6000806000606084860312156135ad57600080fd5b833592506020840135915060408401356135c681613546565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015613609578351835292840192918401916001016135ed565b50909695505050505050565b6000806040838503121561362857600080fd5b823561363381613546565b9150602083013561364381613546565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156136865761368661364e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136b4576136b461364e565b604052919050565b600080600060a084860312156136d157600080fd5b84601f8501126136e057600080fd5b604051606081018181106001600160401b03821117156137025761370261364e565b60405280606086018781111561371757600080fd5b865b81811015613731578035835260209283019201613719565b5091979135965050608094909401359392505050565b8060005b6003811015612ecb57815184526020938401939091019060010161374b565b600061012080840160018060a01b03845116855260208085015161379082880182613747565b5060408501516080870152606085015160a0870152608085015160c087015260a085015160e087015260c0850151836101008801528293508051808452610140880194508282019350600091505b808210156137fe57835185529382019392820192600191909101906137de565b50929695505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561388857603f19898403018552815160808151855288820151898601528782015181898701526138678287018261376a565b60609384015196909301959095525094870194925090860190600101613831565b509098975050505050505050565b60006001600160401b038211156138af576138af61364e565b5060051b60200190565b600060208083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b8301601f810185136138f357600080fd5b803561390661390182613896565b61368c565b81815260059190911b8201830190838101908783111561392557600080fd5b928401925b828410156139435783358252928401929084019061392a565b979650505050505050565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561399b578351825292840192600192909201919084019061397b565b509695505050505050565b602081526000613578602083018461376a565b600082601f8301126139ca57600080fd5b6139d2613664565b8060408401858111156139e457600080fd5b845b818110156139fe5780358452602093840193016139e6565b509095945050505050565b600082601f830112613a1a57600080fd5b613a22613664565b806080840185811115613a3457600080fd5b845b818110156139fe57613a4887826139b9565b8452602090930192604001613a36565b6000806000806101a0808688031215613a7057600080fd5b613a7a87876139b9565b9450613a898760408801613a09565b9350613a988760c088016139b9565b92508661011f870112613aaa57600080fd5b60405160a081018181106001600160401b0382111715613acc57613acc61364e565b604052908601908088831115613ae157600080fd5b61010088015b83811015613aff578035825260209182019101613ae7565b5050809250505092959194509250565b600080600080610280808688031215613b2757600080fd5b613b3187876139b9565b9450613b408760408801613a09565b9350613b4f8760c088016139b9565b92508661011f870112613b6157600080fd5b60405161018081018181106001600160401b0382111715613acc57613acc61364e565b60008060208385031215613b9757600080fd5b82356001600160401b0380821115613bae57600080fd5b818501915085601f830112613bc257600080fd5b813581811115613bd157600080fd5b8660208260051b8501011115613be657600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613c7b578151805185528681015180516001600160a01b039081168988015281890151168787015286810151606080880191909152810151608080880191909152015160a086015285015160c085015260e09093019290850190600101613c15565b5091979650505050505050565b60008060408385031215613c9b57600080fd5b8235613ca681613546565b946020939093013593505050565b6020808252601e908201527f43616c6c6572206d757374206265207265676973746572656420757365720000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156121ee576121ee613ceb565b818103818111156121ee576121ee613ceb565b606081016121ee8284613747565b600060208284031215613d4757600080fd5b5051919050565b80820281158282048414176121ee576121ee613ceb565b634e487b7160e01b600052601260045260246000fd5b600082613d8a57613d8a613d65565b500490565b600060018201613da157613da1613ceb565b5060010190565b600060208284031215613dba57600080fd5b8151801515811461357857600080fd5b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274125b9d195b9d08191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b60006020808385031215613e2257600080fd5b82516001600160401b0380821115613e3957600080fd5b9084019060408287031215613e4d57600080fd5b613e55613664565b825181528383015182811115613e6a57600080fd5b80840193505086601f840112613e7f57600080fd5b82519150613e8f61390183613896565b82815260059290921b83018401918481019088841115613eae57600080fd5b938501935b83851015613ecc57845182529385019390850190613eb3565b948201949094529695505050505050565b600082613eec57613eec613d65565b500690565b634e487b7160e01b600052603160045260246000fd5b8060005b6002811015612ecb578151845260209384019390910190600101613f0b565b8060005b6002811015612ecb57613f42848351613f07565b6040939093019260209190910190600101613f2e565b60006101a082019050613f6c828451613f07565b602080840151613f7f6040850182613f2a565b506040840151613f9260c0850182613f07565b506060840151610100840160005b6005811015613fbd57825182529183019190830190600101613fa0565b5050505092915050565b600061028082019050613fdb828451613f07565b602080840151613fee6040850182613f2a565b50604084015161400160c0850182613f07565b506060840151610100840160005b600c811015613fbd5782518252918301919083019060010161400f565b600080600080600060a0868803121561404457600080fd5b505083516020850151604086015160608701516080909701519298919750959450909250905056fea26469706673582212205f324bcc64951b344706a8dfc43dadc49148f6b3a1ef8999a96c6941721f73f764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"params\": {\n          \"_deniedUser\": \"Poseidon hash of the venmoId being banned\"\n        }\n      },\n      \"cancelIntent(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent being cancelled\"\n        }\n      },\n      \"initialize(address,address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"Registration processor address\",\n          \"_sendProcessor\": \"Send processor address\"\n        }\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"params\": {\n          \"_depositAmount\": \"The amount of USDC to off-ramp\",\n          \"_packedVenmoId\": \"The packed venmo id of the account owner (we pack for easy use with poseidon)\",\n          \"_receiveAmount\": \"The amount of USD to receive\"\n        }\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,                  nullifier, intentHash\"\n        }\n      },\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"params\": {\n          \"_a\": \"Parameter of zk proof\",\n          \"_b\": \"Parameter of zk proof\",\n          \"_c\": \"Parameter of zk proof\",\n          \"_signals\": \"Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\"\n        }\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"params\": {\n          \"_intentHash\": \"Hash of intent to resolve by releasing the funds\"\n        }\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"params\": {\n          \"_approvedUser\": \"Poseidon hash of the venmoId being approved\"\n        }\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"params\": {\n          \"_intentExpirationPeriod\": \"New intent expiration period\"\n        }\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"params\": {\n          \"_maxOnRampAmount\": \"The new max on ramp amount\"\n        }\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"params\": {\n          \"_minDepositAmount\": \"The new minimum deposit amount\"\n        }\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"params\": {\n          \"_onRampCooldownPeriod\": \"New on-ramp cooldown period\"\n        }\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"params\": {\n          \"_registrationProcessor\": \"New registration proccesor address\"\n        }\n      },\n      \"setSendProcessor(address)\": {\n        \"params\": {\n          \"_sendProcessor\": \"New send proccesor address\"\n        }\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"params\": {\n          \"_fee\": \"The new sustainability fee in precise units (10**18, ie 10% = 1e17)\"\n        }\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"params\": {\n          \"_feeRecipient\": \"The new fee recipient address\"\n        }\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"params\": {\n          \"_amount\": \"The amount of USDC the user wants to on-ramp\",\n          \"_depositId\": \"The ID of the deposit the on-ramper intends to use for \",\n          \"_to\": \"Address to forward funds to (can be same as onRamper)\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"params\": {\n          \"_depositIds\": \"Array of depositIds the depositor is attempting to withdraw\"\n        }\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"addAccountToDenylist(bytes32)\": {\n        \"notice\": \"Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to signal an intent on the user's deposit they will be denied.\"\n      },\n      \"cancelIntent(bytes32)\": {\n        \"notice\": \"Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new intent. Deposit state is updated to reflect the cancelled intent.\"\n      },\n      \"initialize(address,address)\": {\n        \"notice\": \"Initialize Ramp with the addresses of the Processors\"\n      },\n      \"offRamp(uint256[3],uint256,uint256)\": {\n        \"notice\": \"Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount of USDC.\"\n      },\n      \"onRamp(uint256[2],uint256[2][2],uint256[2],uint256[12])\": {\n        \"notice\": \"Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated, intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"register(uint256[2],uint256[2][2],uint256[2],uint256[5])\": {\n        \"notice\": \"Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\"\n      },\n      \"releaseFundsToOnramper(bytes32)\": {\n        \"notice\": \"Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and  deposit state is updated. USDC is transferred to the on-ramper.\"\n      },\n      \"removeAccountFromDenylist(bytes32)\": {\n        \"notice\": \"Removes a venmoId from a depositor's deny list.\"\n      },\n      \"setIntentExpirationPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent locking up a depositor's funds.\"\n      },\n      \"setMaxOnRampAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than this amount a user must make multiple transactions.\"\n      },\n      \"setMinDepositAmount(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\"\n      },\n      \"setOnRampCooldownPeriod(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this amount of time before they can signalIntent to on-ramp again.\"\n      },\n      \"setRegistrationProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSendProcessor(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\"\n      },\n      \"setSustainabilityFee(uint256)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\"\n      },\n      \"setSustainabilityFeeRecipient(address)\": {\n        \"notice\": \"GOVERNANCE ONLY: Updates the recepient of sustainability fees.\"\n      },\n      \"signalIntent(uint256,uint256,address)\": {\n        \"notice\": \"Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then they will be deleted from the deposit to be able to maintain state hygiene.\"\n      },\n      \"withdrawDeposit(uint256[])\": {\n        \"notice\": \"Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be returned. Deposit will be deleted as long as there are no more outstanding intents.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9938,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"registrationProcessor\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IRegistrationProcessorV2)12363\"\n      },\n      {\n        \"astId\": 9941,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sendProcessor\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(ISendProcessor)9598\"\n      },\n      {\n        \"astId\": 9943,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"isInitialized\",\n        \"offset\": 20,\n        \"slot\": \"2\",\n        \"type\": \"t_bool\"\n      },\n      {\n        \"astId\": 9948,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"globalAccount\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)9897_storage)\"\n      },\n      {\n        \"astId\": 9953,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"accounts\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_mapping(t_address,t_struct(AccountInfo)9834_storage)\"\n      },\n      {\n        \"astId\": 9958,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"deposits\",\n        \"offset\": 0,\n        \"slot\": \"5\",\n        \"type\": \"t_mapping(t_uint256,t_struct(Deposit)9852_storage)\"\n      },\n      {\n        \"astId\": 9963,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intents\",\n        \"offset\": 0,\n        \"slot\": \"6\",\n        \"type\": \"t_mapping(t_bytes32,t_struct(Intent)9873_storage)\"\n      },\n      {\n        \"astId\": 9965,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"minDepositAmount\",\n        \"offset\": 0,\n        \"slot\": \"7\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9967,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"maxOnRampAmount\",\n        \"offset\": 0,\n        \"slot\": \"8\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9969,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"onRampCooldownPeriod\",\n        \"offset\": 0,\n        \"slot\": \"9\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9971,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"intentExpirationPeriod\",\n        \"offset\": 0,\n        \"slot\": \"10\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9973,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFee\",\n        \"offset\": 0,\n        \"slot\": \"11\",\n        \"type\": \"t_uint256\"\n      },\n      {\n        \"astId\": 9975,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"sustainabilityFeeRecipient\",\n        \"offset\": 0,\n        \"slot\": \"12\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 9977,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n        \"label\": \"depositCounter\",\n        \"offset\": 0,\n        \"slot\": \"13\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_array(t_bytes32)dyn_storage\": {\n        \"base\": \"t_bytes32\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"bytes32[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_array(t_uint256)3_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256[3]\",\n        \"numberOfBytes\": \"96\"\n      },\n      \"t_array(t_uint256)dyn_storage\": {\n        \"base\": \"t_uint256\",\n        \"encoding\": \"dynamic_array\",\n        \"label\": \"uint256[]\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_bool\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bool\",\n        \"numberOfBytes\": \"1\"\n      },\n      \"t_bytes32\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"bytes32\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IRegistrationProcessorV2)12363\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IRegistrationProcessorV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(ISendProcessor)9598\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract ISendProcessor\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_mapping(t_address,t_struct(AccountInfo)9834_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_address\",\n        \"label\": \"mapping(address => struct VenmoRampV2.AccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(AccountInfo)9834_storage\"\n      },\n      \"t_mapping(t_bytes32,t_bool)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => bool)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_bool\"\n      },\n      \"t_mapping(t_bytes32,t_struct(GlobalAccountInfo)9897_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.GlobalAccountInfo)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(GlobalAccountInfo)9897_storage\"\n      },\n      \"t_mapping(t_bytes32,t_struct(Intent)9873_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_bytes32\",\n        \"label\": \"mapping(bytes32 => struct VenmoRampV2.Intent)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Intent)9873_storage\"\n      },\n      \"t_mapping(t_uint256,t_struct(Deposit)9852_storage)\": {\n        \"encoding\": \"mapping\",\n        \"key\": \"t_uint256\",\n        \"label\": \"mapping(uint256 => struct VenmoRampV2.Deposit)\",\n        \"numberOfBytes\": \"32\",\n        \"value\": \"t_struct(Deposit)9852_storage\"\n      },\n      \"t_struct(AccountInfo)9834_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.AccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 9830,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"venmoIdHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 9833,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposits\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(DenyList)9889_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.DenyList\",\n        \"members\": [\n          {\n            \"astId\": 9884,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deniedUsers\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          },\n          {\n            \"astId\": 9888,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"isDenied\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_mapping(t_bytes32,t_bool)\"\n          }\n        ],\n        \"numberOfBytes\": \"64\"\n      },\n      \"t_struct(Deposit)9852_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Deposit\",\n        \"members\": [\n          {\n            \"astId\": 9836,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositor\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9840,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"packedVenmoId\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_array(t_uint256)3_storage\"\n          },\n          {\n            \"astId\": 9842,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"depositAmount\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9844,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"remainingDeposits\",\n            \"offset\": 0,\n            \"slot\": \"5\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9846,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"outstandingIntentAmount\",\n            \"offset\": 0,\n            \"slot\": \"6\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9848,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"conversionRate\",\n            \"offset\": 0,\n            \"slot\": \"7\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9851,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentHashes\",\n            \"offset\": 0,\n            \"slot\": \"8\",\n            \"type\": \"t_array(t_bytes32)dyn_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"288\"\n      },\n      \"t_struct(GlobalAccountInfo)9897_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.GlobalAccountInfo\",\n        \"members\": [\n          {\n            \"astId\": 9891,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"currentIntentHash\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_bytes32\"\n          },\n          {\n            \"astId\": 9893,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"lastOnrampTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9896,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"denyList\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_struct(DenyList)9889_storage\"\n          }\n        ],\n        \"numberOfBytes\": \"128\"\n      },\n      \"t_struct(Intent)9873_storage\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"struct VenmoRampV2.Intent\",\n        \"members\": [\n          {\n            \"astId\": 9864,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"onRamper\",\n            \"offset\": 0,\n            \"slot\": \"0\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9866,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"to\",\n            \"offset\": 0,\n            \"slot\": \"1\",\n            \"type\": \"t_address\"\n          },\n          {\n            \"astId\": 9868,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"deposit\",\n            \"offset\": 0,\n            \"slot\": \"2\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9870,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"amount\",\n            \"offset\": 0,\n            \"slot\": \"3\",\n            \"type\": \"t_uint256\"\n          },\n          {\n            \"astId\": 9872,\n            \"contract\": \"contracts/ramps/venmo-v2/VenmoRampV2.sol:VenmoRampV2\",\n            \"label\": \"intentTimestamp\",\n            \"offset\": 0,\n            \"slot\": \"4\",\n            \"type\": \"t_uint256\"\n          }\n        ],\n        \"numberOfBytes\": \"160\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/VenmoRegistrationProcessor.json",
    "content": "{\n  \"address\": \"0xF05627d52F3b4b173002Ee64E90FEc169db77057\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessor.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xe84a16a0b09dc897b031842566020aeeddabb7e158e7be9fc9caae2683c358c7\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0xF05627d52F3b4b173002Ee64E90FEc169db77057\",\n    \"transactionIndex\": 69,\n    \"gasUsed\": \"1470600\",\n    \"logsBloom\": \"0x00000000000000000000000000000100000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000002000000000000000000000000400000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xc10a916f5417a247cf46512eea50f91a14ce389f52578141bfcd56b11b72cfde\",\n    \"transactionHash\": \"0xe84a16a0b09dc897b031842566020aeeddabb7e158e7be9fc9caae2683c358c7\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 69,\n        \"blockNumber\": 5081892,\n        \"transactionHash\": \"0xe84a16a0b09dc897b031842566020aeeddabb7e158e7be9fc9caae2683c358c7\",\n        \"address\": \"0xF05627d52F3b4b173002Ee64E90FEc169db77057\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 2074,\n        \"blockHash\": \"0xc10a916f5417a247cf46512eea50f91a14ce389f52578141bfcd56b11b72cfde\"\n      }\n    ],\n    \"blockNumber\": 5081892,\n    \"cumulativeGasUsed\": \"24894927\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6\",\n    \"0xaF4c9cb40eAFc51E39707aCDaA4eF3e6FF6e896c\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessor.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\\\":\\\"VenmoRegistrationProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"../../processors/BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessor } from \\\\\\\"./interfaces/IRegistrationProcessor.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        view\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xca7ad66cae637a7afc58121262db2990f290ad945de08f0765c7917031ad8a35\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessor {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n        view\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc80e1b5561af1a8631547c72e6c6dcdf4e66c06b3eb34b1a8db1bb0f6d3ea90f\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\\\n    \\\\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\\\n    \\\\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\\\n    \\\\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\\\n    \\\\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\\\n    \\\\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\\n\\\",\\\"keccak256\\\":\\\"0xe75e7981040431d65fa54187d75ef19b77cded328e050458c5921256be2d6d2d\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001b5e38038062001b5e833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516117b7620003a76000396000818160f4015261022b01526117b76000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220b1efe7984ab93bea8093c3fa59ee402caee5d7aa6fdb055502c537b95ecf671b64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e978146101dd578063d0b71f99146101e5578063f2fde38b146101f8578063f6c7226b1461020b57600080fd5b8063a87cb6ea146101ad578063b870676c146101b5578063c0d05fed146101c857600080fd5b80633d0c9cc4116100c85780633d0c9cc414610177578063672ae5971461017f578063715018a6146101925780638da5cb5b1461019c57600080fd5b806315d276e1146100ef57806317c8ecf21461013357806334baeab914610154575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004611246565b61021e565b60405190815260200161012a565b610167610162366004611276565b610452565b604051901515815260200161012a565b610146600781565b600154610116906001600160a01b031681565b61019a610a27565b005b6000546001600160a01b0316610116565b610146610a3b565b600254610116906001600160a01b031681565b6101d0610aae565b60405161012a9190611300565b6101d0610b3c565b61019a6101f3366004611348565b610bce565b61019a610206366004611348565b610bf8565b61019a610219366004611382565b610c6e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab9916102d09186919082019060c0830190610100840190600401611433565b602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610311919061147f565b61034d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610294565b610355610a3b565b610100830135146103a85760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610294565b60006103bb836101000160016004610c86565b905060036040516103cc91906114eb565b6040518091039020816040516020016103e59190611561565b60405160208183030381529060405280519060200120146104485760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610294565b5050610180013590565b60006109b5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47811061048a576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816104c0576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806104f1576000805260206000f35b5050505050565b7f2bdc28cf197869db34c4fbf63b9a297acd233d737b149971c2a8425b9c18652e85527f306322808e39c492479f77b7c6d9d9c96db63defd9f77e05fdb4dc71e50856c560208601526000608086018661059587357f16fecceda7a3ec24e6993b49dacb0da64a04645dc170e6e88ef8f670239b43f57f15719ff6e212cf103557222bea4166d196037fd47f2466318df3f8b38079e8ec8461048d565b6105e560208801357f25ca6dc2d5078f1df81f9cb83db1356bdc3ab88c0b909cc4303f1f719a42bbca7f148bb0919456a3967918c0836f6ce527324c03fd875e4c92cb1e47bdab168c6d8461048d565b61063560408801357f18993ebc76aecfeb0e738ea06deeb99222e3b2f54e0b0c885924b7c5a4c994627f2b2ed6baeafa361c3f7448ba9bb05ab97ca55803b2f480e6733b0470f910a8cf8461048d565b61068560608801357f093560719a998c7c85b28f437b8bc98a7de3174df77e34c962c8f4ac0617d80b7f17b8d170ced474cb0317fadbee0f815f4101a01adbf532b089c0d820040ec6cd8461048d565b6106d560808801357f1380d3bede45e22cc0f0055b07dea924f730665065249f8bc22d4304cddd67347f1682fc24321cdb3ae7a70763090061d86324a74803d0fd4bd3770a546054895d8461048d565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f1a8b43ed42330a24019905c80dd9ea46d7fc2213c61cea7d345fd391adfafe6f6102808201527f16b7ce8220c1ececc7832189759bfa8b1734f3b55c986440a4b903bd563907436102a08201527f1ad4dd1c82e79f81677bd957aa831fd6fe6bd75c6629a2eabd28411945d999546102c08201527f05589547d5c5a7f052a6f83c9a95cfca04c3bc1e4ccfbedf50cfa0391419b1586102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526109cd6000840135610459565b6109da6020840135610459565b6109e76040840135610459565b6109f46060840135610459565b610a016080840135610459565b610a0e60a0840135610459565b610a1b818486888a6104f8565b90508060005260206000f35b610a2f610d61565b610a396000610dbb565b565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061157d565b905090565b60038054610abb906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906114b7565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b505050505081565b606060038054610b4b906114b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b77906114b7565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b610bd6610d61565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c00610d61565b6001600160a01b038116610c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61048a81610dbb565b610c76610d61565b6003610c8282826115e5565b5050565b60606000610c9484846116bb565b60ff1667ffffffffffffffff811115610caf57610caf61136c565b604051908082528060200260200182016040528015610cd8578160200160208202803683370190505b50905060ff84165b8360ff16811015610d3d57858160058110610cfd57610cfd6114a1565b602002013582610d1060ff8816846116d4565b81518110610d2057610d206114a1565b602090810291909101015280610d35816116e7565b915050610ce0565b50610d5860078251610d4f9190611700565b82906007610e0b565b95945050505050565b6000546001600160a01b03163314610a395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610e1d9190611700565b67ffffffffffffffff811115610e3557610e3561136c565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b5090506000805b87518161ffff161015611016576000888261ffff1681518110610e8b57610e8b6114a1565b6020026020010151905060008767ffffffffffffffff811115610eb057610eb061136c565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b88811015610f2b57610ef2816008611700565b83901c828281518110610f0757610f076114a1565b60ff9092166020928302919091019091015280610f23816116e7565b915050610edf565b5060005b88811015611000576000828281518110610f4b57610f4b6114a1565b602002602001015160ff16905080600014610fc3578060f81b878781518110610f7657610f766114a1565b60200101906001600160f81b031916908160001a90535085610f97816116e7565b9650610fa69050600289611717565b60ff16600003610fbe57610fbb600189611747565b97505b610fe6565b610fce600289611717565b60ff16600103610fe657610fe3600189611747565b97505b5060089290921c9180610ff8816116e7565b915050610f2f565b505050808061100e90611760565b915050610e66565b5060018360ff1610156110b75760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610294565b858111156111255760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610294565b60006111308361113c565b98975050505050505050565b8051606090829060005b825181101561119157828181518110611161576111616114a1565b01602001516001600160f81b03191660000361117f57809150611191565b80611189816116e7565b915050611146565b5060008167ffffffffffffffff8111156111ad576111ad61136c565b6040519080825280601f01601f1916602001820160405280156111d7576020820181803683370190505b50905060005b8281101561123d578381815181106111f7576111f76114a1565b602001015160f81c60f81b828281518110611214576112146114a1565b60200101906001600160f81b031916908160001a90535080611235816116e7565b9150506111dd565b50949350505050565b60006101a0828403121561125957600080fd5b50919050565b806040810183101561127057600080fd5b92915050565b6000806000806101a080868803121561128e57600080fd5b611298878761125f565b945060c08601878111156112ab57600080fd5b6040870194506112bb888261125f565b9350508681870111156112cd57600080fd5b50929591945092610100019150565b60005b838110156112f75781810151838201526020016112df565b50506000910152565b602081526000825180602084015261131f8160408501602087016112dc565b601f01601f19169190910160400192915050565b6001600160a01b038116811461048a57600080fd5b60006020828403121561135a57600080fd5b813561136581611333565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561139457600080fd5b813567ffffffffffffffff808211156113ac57600080fd5b818401915084601f8301126113c057600080fd5b8135818111156113d2576113d261136c565b604051601f8201601f19908116603f011681019083821181831017156113fa576113fa61136c565b8160405282815287602084870101111561141357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6101a081016040808784378083018660005b600281101561146257838284379183019190830190600101611445565b505050808560c08501375060a08361010084013795945050505050565b60006020828403121561149157600080fd5b8151801515811461136557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c908216806114cb57607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60008083546114f9816114b7565b60018281168015611511576001811461152657611555565b60ff1984168752821515830287019450611555565b8760005260208060002060005b8581101561154c5781548a820152908401908201611533565b50505082870194505b50929695505050505050565b600082516115738184602087016112dc565b9190910192915050565b60006020828403121561158f57600080fd5b5051919050565b601f8211156115e057600081815260208120601f850160051c810160208610156115bd5750805b601f850160051c820191505b818110156115dc578281556001016115c9565b5050505b505050565b815167ffffffffffffffff8111156115ff576115ff61136c565b6116138161160d84546114b7565b84611596565b602080601f83116001811461164857600084156116305750858301515b600019600386901b1c1916600185901b1785556115dc565b600085815260208120601f198616915b8281101561167757888601518255948401946001909101908401611658565b50858210156116955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611270576112706116a5565b81810381811115611270576112706116a5565b6000600182016116f9576116f96116a5565b5060010190565b8082028115828204841417611270576112706116a5565b600060ff83168061173857634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff8181168382160190811115611270576112706116a5565b600061ffff808316818103611777576117776116a5565b600101939250505056fea2646970667358221220b1efe7984ab93bea8093c3fa59ee402caee5d7aa6fdb055502c537b95ecf671b64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3218,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)3483\"\n      },\n      {\n        \"astId\": 3221,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3714\"\n      },\n      {\n        \"astId\": 3223,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol:VenmoRegistrationProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)3483\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3714\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/VenmoRegistrationProcessorV2.json",
    "content": "{\n  \"address\": \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[5]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[5]\"\n            }\n          ],\n          \"internalType\": \"struct IRegistrationProcessorV2.RegistrationProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"userIdHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[5]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[5]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xc812d94bc3e25e74a1534666c4d40cce6582fdeae4f776a905a763cbcff20bc9\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n    \"transactionIndex\": 100,\n    \"gasUsed\": \"1573175\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000\",\n    \"blockHash\": \"0x296c04649f47792a7c5fa6235b39d75eee9d1725358833cbbf09cf9d2a26049f\",\n    \"transactionHash\": \"0xc812d94bc3e25e74a1534666c4d40cce6582fdeae4f776a905a763cbcff20bc9\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 100,\n        \"blockNumber\": 5239496,\n        \"transactionHash\": \"0xc812d94bc3e25e74a1534666c4d40cce6582fdeae4f776a905a763cbcff20bc9\",\n        \"address\": \"0x8374d6e81363fE432F98E46E8A6Fe0873e526FB8\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 116,\n        \"blockHash\": \"0x296c04649f47792a7c5fa6235b39d75eee9d1725358833cbbf09cf9d2a26049f\"\n      }\n    ],\n    \"blockNumber\": 5239496,\n    \"cumulativeGasUsed\": \"8528526\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x38637CD256d70994f2d5533BEAfe52eEfC2a96Ab\",\n    \"0x64c5B59877121F9ed95D539536389BBdF1c678Ee\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"venmo@venmo.com\",\n    \"0\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"internalType\\\":\\\"struct IRegistrationProcessorV2.RegistrationProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"userIdHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[5]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[5]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":\\\"VenmoRegistrationProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_registration_verifier.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { IRegistrationProcessorV2 } from \\\\\\\"./interfaces/IRegistrationProcessorV2.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\\\n\\\\n    using StringUtils for uint256[];\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n    \\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _venmoMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function processProof(\\\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(bytes32 userIdHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\\\n\\\\n        // Signals [4] is the packed onRamperIdHash\\\\n        userIdHash = bytes32(_proof.signals[4]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x96fed71c2e264aaec9a1bcaaa6ae0b497742b6cba06f2e2c76715815d8d9e755\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IRegistrationProcessorV2 {\\\\n\\\\n    struct RegistrationProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[5] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        RegistrationProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x67a284be0f71e8f1518098567b7dc9200c8b312ea90e44600d4efeb9d8986f91\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_registration_verifier.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\\\n\\\\n\\\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\\\n\\\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\\\n\\\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\\\n\\\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\\\n\\\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\\\n\\\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0xeb86da9d18040aa1460acb454cca19deca314275f506f1d1f0f74d06431f04ca\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b5060405162001d3d38038062001d3d83398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611985620003b86000396000818161010a015261026801526119856000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f20c2f6379100a68f4b5f265aa587995059b578b120520edb583d6f157b267f9b85527f181a1d1247c6e73b4ac127fbc34ec118b9f863fe3960a82e8ff76f827be72d2b60208601526000608086018661067487357f254f847f01ab0bb9a1d3aaf4ff25b9031e461668b74d238fcc1599fe0740d8057f2534543b059b0a2bfd0e08d0a49955090cd40abffba56755037f7aea6df14ca28461056c565b6106c460208801357f08dd1b1a7dcab529a0076bf73348b566ae1bbe3aca1bb4f9ac659269f8b5a3d37f21d6077582524a0ddaa77454bec9df469dc7a2fade708cd42b94c31793cf41508461056c565b61071460408801357f07a56dbfdb8c0e1d7c52c4f9e901cc0f06bcfff7805207b62945ce229d6bf76f7f258132dc21a21aefabb24f3179cd647c39ea56eb9402cb85b2c1570fb9c877398461056c565b61076460608801357f173802dabda518d57fe35d9cf62c1baa881fd619582d1af759cd9c7b68ad6f977f1599317fad0cdfd26456c5e0d157a1c7200fed2ea81ffbdb2a4362e9a59174868461056c565b6107b460808801357f1322c5dd06061fbd9601ab886ce1aa62c5eb3a51278f474e376f9eb47fe29dfc7f23bfcbb31b1e4203ebabd9ae1201fff345a74a68b63fffe36f5a3991fb0ac10e8461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0cc12f3ac2799bd9d801d23bb04b07def931b537d050908bdef5e22489416bc76102808201527f02b3b2704146fd8e54e96b5794717ca7a2992dde97429abaef06cd8726f7ed766102a08201527f1d12f94d82c69073f342706f79eda13ee967012e85f7342bb335ee8a485efea86102c08201527f0ec8ab0ae62b455dddaaaac1f60f6801dc3714cc2256ee08c8b5c9d689d2aa286102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea2646970667358221220080de63658ee9f8a05da858ec3603cffcd15df05d5b0ca8296456933173ccad164736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610219578063dbac58211461022c578063f2fde38b14610235578063f6c7226b1461024857600080fd5b8063b2a3fda4146101d6578063b870676c146101e9578063c0d05fed146101fc578063ced1e9781461021157600080fd5b80633d0c9cc4116100d35780633d0c9cc4146101a0578063715018a6146101a85780638da5cb5b146101b2578063a8ef333f146101c357600080fd5b806315d276e11461010557806317c8ecf21461014957806319d091521461016a57806334baeab91461018d575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046113d3565b61025b565b604051908152602001610140565b61017d6101783660046113ec565b6104bd565b6040519015158152602001610140565b61017d61019b366004611416565b610531565b61015c600781565b6101b0610b06565b005b6000546001600160a01b031661012c565b60015461012c906001600160a01b031681565b6101b06101e43660046113ec565b610b1a565b60025461012c906001600160a01b031681565b610204610b27565b60405161014091906114a0565b610204610bb5565b6101b06102273660046114e8565b610c47565b61015c60045481565b6101b06102433660046114e8565b610c71565b6101b0610256366004611522565b610ce7565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b604080516334baeab960e01b815230916334baeab99161030d9186919082019060c08301906101008401906004016115fd565b602060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061162e565b61038a5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b60448201526064016102d1565b6103986101008301356104bd565b6103e45760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b65792068617368000000000060448201526064016102d1565b60006103f7836101000160016004610cff565b90506003604051610408919061169a565b6040518091039020816040516020016104219190611710565b60405160208183030381529060405280519060200120146104845760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d206164647265737300000000000060448201526064016102d1565b6104b383604051602001610498919061172c565b60405160208183030381529060405280519060200120610dda565b5050610180013590565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b919061162e565b92915050565b6000610a94565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610569576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa91508161059f576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806105d0576000805260206000f35b5050505050565b7f20c2f6379100a68f4b5f265aa587995059b578b120520edb583d6f157b267f9b85527f181a1d1247c6e73b4ac127fbc34ec118b9f863fe3960a82e8ff76f827be72d2b60208601526000608086018661067487357f254f847f01ab0bb9a1d3aaf4ff25b9031e461668b74d238fcc1599fe0740d8057f2534543b059b0a2bfd0e08d0a49955090cd40abffba56755037f7aea6df14ca28461056c565b6106c460208801357f08dd1b1a7dcab529a0076bf73348b566ae1bbe3aca1bb4f9ac659269f8b5a3d37f21d6077582524a0ddaa77454bec9df469dc7a2fade708cd42b94c31793cf41508461056c565b61071460408801357f07a56dbfdb8c0e1d7c52c4f9e901cc0f06bcfff7805207b62945ce229d6bf76f7f258132dc21a21aefabb24f3179cd647c39ea56eb9402cb85b2c1570fb9c877398461056c565b61076460608801357f173802dabda518d57fe35d9cf62c1baa881fd619582d1af759cd9c7b68ad6f977f1599317fad0cdfd26456c5e0d157a1c7200fed2ea81ffbdb2a4362e9a59174868461056c565b6107b460808801357f1322c5dd06061fbd9601ab886ce1aa62c5eb3a51278f474e376f9eb47fe29dfc7f23bfcbb31b1e4203ebabd9ae1201fff345a74a68b63fffe36f5a3991fb0ac10e8461056c565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f0cc12f3ac2799bd9d801d23bb04b07def931b537d050908bdef5e22489416bc76102808201527f02b3b2704146fd8e54e96b5794717ca7a2992dde97429abaef06cd8726f7ed766102a08201527f1d12f94d82c69073f342706f79eda13ee967012e85f7342bb335ee8a485efea86102c08201527f0ec8ab0ae62b455dddaaaac1f60f6801dc3714cc2256ee08c8b5c9d689d2aa286102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610aac6000840135610538565b610ab96020840135610538565b610ac66040840135610538565b610ad36060840135610538565b610ae06080840135610538565b610aed60a0840135610538565b610afa818486888a6105d7565b90508060005260206000f35b610b0e610eee565b610b186000610f48565b565b610b22610eee565b600455565b60038054610b3490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6090611666565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b505050505081565b606060038054610bc490611666565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090611666565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b610c4f610eee565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610c79610eee565b6001600160a01b038116610cde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102d1565b61056981610f48565b610cef610eee565b6003610cfb82826117b3565b5050565b60606000610d0d8484611889565b60ff1667ffffffffffffffff811115610d2857610d2861150c565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060ff84165b8360ff16811015610db657858160058110610d7657610d76611650565b602002013582610d8960ff8816846118a2565b81518110610d9957610d99611650565b602090810291909101015280610dae816118b5565b915050610d59565b50610dd160078251610dc891906118ce565b82906007610f98565b95945050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061162e565b15610e945760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e20757365640060448201526064016102d1565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b158015610eda57600080fd5b505af11580156105d0573d6000803e3d6000fd5b6000546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600080838651610faa91906118ce565b67ffffffffffffffff811115610fc257610fc261150c565b6040519080825280601f01601f191660200182016040528015610fec576020820181803683370190505b5090506000805b87518161ffff1610156111a3576000888261ffff168151811061101857611018611650565b6020026020010151905060008767ffffffffffffffff81111561103d5761103d61150c565b604051908082528060200260200182016040528015611066578160200160208202803683370190505b50905060005b888110156110b85761107f8160086118ce565b83901c82828151811061109457611094611650565b60ff90921660209283029190910190910152806110b0816118b5565b91505061106c565b5060005b8881101561118d5760008282815181106110d8576110d8611650565b602002602001015160ff16905080600014611150578060f81b87878151811061110357611103611650565b60200101906001600160f81b031916908160001a90535085611124816118b5565b965061113390506002896118e5565b60ff1660000361114b57611148600189611915565b97505b611173565b61115b6002896118e5565b60ff1660010361117357611170600189611915565b97505b5060089290921c9180611185816118b5565b9150506110bc565b505050808061119b9061192e565b915050610ff3565b5060018360ff1610156112445760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a4016102d1565b858111156112b25760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b60648201526084016102d1565b60006112bd836112c9565b98975050505050505050565b8051606090829060005b825181101561131e578281815181106112ee576112ee611650565b01602001516001600160f81b03191660000361130c5780915061131e565b80611316816118b5565b9150506112d3565b5060008167ffffffffffffffff81111561133a5761133a61150c565b6040519080825280601f01601f191660200182016040528015611364576020820181803683370190505b50905060005b828110156113ca5783818151811061138457611384611650565b602001015160f81c60f81b8282815181106113a1576113a1611650565b60200101906001600160f81b031916908160001a905350806113c2816118b5565b91505061136a565b50949350505050565b60006101a082840312156113e657600080fd5b50919050565b6000602082840312156113fe57600080fd5b5035919050565b806040810183101561052b57600080fd5b6000806000806101a080868803121561142e57600080fd5b6114388787611405565b945060c086018781111561144b57600080fd5b60408701945061145b8882611405565b93505086818701111561146d57600080fd5b50929591945092610100019150565b60005b8381101561149757818101518382015260200161147f565b50506000910152565b60208152600082518060208401526114bf81604085016020870161147c565b601f01601f19169190910160400192915050565b6001600160a01b038116811461056957600080fd5b6000602082840312156114fa57600080fd5b8135611505816114d3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561153457600080fd5b813567ffffffffffffffff8082111561154c57600080fd5b818401915084601f83011261156057600080fd5b8135818111156115725761157261150c565b604051601f8201601f19908116603f0116810190838211818310171561159a5761159a61150c565b816040528281528760208487010111156115b357600080fd5b826020860160208301376000928101602001929092525095945050505050565b8060005b60028110156115f7576040808386379384019391909101906001016115d7565b50505050565b6101a08101604086833761161460408301866115d3565b60408460c084013760a08361010084013795945050505050565b60006020828403121561164057600080fd5b8151801515811461150557600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061167a57607f821691505b6020821081036113e657634e487b7160e01b600052602260045260246000fd5b60008083546116a881611666565b600182811680156116c057600181146116d557611704565b60ff1984168752821515830287019450611704565b8760005260208060002060005b858110156116fb5781548a8201529084019082016116e2565b50505082870194505b50929695505050505050565b6000825161172281846020870161147c565b9190910192915050565b6101a08101604083833761174660408301604085016115d3565b604060c0840160c084013761010060a0818501828501375092915050565b601f8211156117ae57600081815260208120601f850160051c8101602086101561178b5750805b601f850160051c820191505b818110156117aa57828155600101611797565b5050505b505050565b815167ffffffffffffffff8111156117cd576117cd61150c565b6117e1816117db8454611666565b84611764565b602080601f83116001811461181657600084156117fe5750858301515b600019600386901b1c1916600185901b1785556117aa565b600085815260208120601f198616915b8281101561184557888601518255948401946001909101908401611826565b50858210156118635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561052b5761052b611873565b8181038181111561052b5761052b611873565b6000600182016118c7576118c7611873565b5060010190565b808202811582820484141761052b5761052b611873565b600060ff83168061190657634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff818116838216019081111561052b5761052b611873565b600061ffff80831681810361194557611945611873565b600101939250505056fea2646970667358221220080de63658ee9f8a05da858ec3603cffcd15df05d5b0ca8296456933173ccad164736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol:VenmoRegistrationProcessorV2\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/VenmoSendProcessor.json",
    "content": "{\n  \"address\": \"0x951E072a8eD9ad9F8dCe89a3Be274a96966097Bb\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getMailserverKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailserverKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapter\",\n          \"name\": \"_mailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0x678eb3f5e375e40251e27e278bddcba2655397ceea2f566cef917079d5373f16\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x951E072a8eD9ad9F8dCe89a3Be274a96966097Bb\",\n    \"transactionIndex\": 73,\n    \"gasUsed\": \"1859214\",\n    \"logsBloom\": \"0x00000000000000000000000000000000000000000001000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0x759df74893b9d0e64f54e40e310856b877cd3ae107fdbe08486a7b8d397fff60\",\n    \"transactionHash\": \"0x678eb3f5e375e40251e27e278bddcba2655397ceea2f566cef917079d5373f16\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 73,\n        \"blockNumber\": 5081893,\n        \"transactionHash\": \"0x678eb3f5e375e40251e27e278bddcba2655397ceea2f566cef917079d5373f16\",\n        \"address\": \"0x951E072a8eD9ad9F8dCe89a3Be274a96966097Bb\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 2090,\n        \"blockHash\": \"0x759df74893b9d0e64f54e40e310856b877cd3ae107fdbe08486a7b8d397fff60\"\n      }\n    ],\n    \"blockNumber\": 5081893,\n    \"cumulativeGasUsed\": \"25280440\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x75422735DD94dfD04b7ef5D7044Aba0ce4E3a7A6\",\n    \"0xaF4c9cb40eAFc51E39707aCDaA4eF3e6FF6e896c\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"venmo@venmo.com\"\n  ],\n  \"numDeployments\": 1,\n  \"solcInputHash\": \"c76db42e3552a72f819af71bb2be52ce\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getMailserverKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailserverKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapter\\\",\\\"name\\\":\\\"_mailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\\\":\\\"VenmoSendProcessor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapter } from \\\\\\\"./keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessor is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function getMailserverKeyHash() public view returns (bytes32) {\\\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xfc86cb8d817fe51078572d31095cf563cec19d8baec590746bfc9183fa361740\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapter {\\\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function mailserverKeyHash() external view returns (bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb009a89c52a6e84972852d8c9e60758ca45aca9ac301268fb738459a91090873\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessor } from \\\\\\\"../../processors/BaseProcessor.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_send_verifier_v1.sol\\\\\\\";\\\\nimport { IKeyHashAdapter } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"./interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc2b09fbac32fd08e4a183fd9479cea74d83ffab9c90d6f745e2ac621fa20383e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier_v1.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\\\n\\\\n    \\\\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\\\n    \\\\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\\\n    \\\\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\\\n    \\\\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\\\n    \\\\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\\\n    \\\\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\\\n    \\\\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\\\n    \\\\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\\\n    \\\\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\\\n    \\\\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\\\n    \\\\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\\\n    \\\\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\\\n    \\\\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\\\n    \\\\n \\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n            \\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n                \\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n                \\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n                \\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n            \\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n            \\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0xb46605787554cd622d1fc6100e5097902ec0c4c57b787d48ef3a27e2b1e1beb7\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b506040516200226438038062002264833981016040819052620000349162000114565b83838383620000433362000095565b6001600160a01b03848116608052600180546001600160a01b031990811686841617909155600280549091169184169190911790556003620000868282620002b9565b50505050505050505062000385565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fb57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200012b57600080fd5b84516200013881620000e5565b809450506020808601516200014d81620000e5565b60408701519094506200016081620000e5565b60608701519093506001600160401b03808211156200017e57600080fd5b818801915088601f8301126200019357600080fd5b815181811115620001a857620001a8620000fe565b604051601f8201601f19908116603f01168101908382118183101715620001d357620001d3620000fe565b816040528281528b86848701011115620001ec57600080fd5b600093505b82841015620002105784840186015181850187015292850192620001f1565b600086848301015280965050505050505092959194509250565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d5620000fe565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611ebd620003a76000396000818160f40152610ad30152611ebd6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea2646970667358221220a1149bd2a94ba8e2c44b365ae0e95a90bcecf8596a20f4fd1b2ed7e673a0099764736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a87cb6ea1161008c578063ced1e97811610066578063ced1e97814610205578063d0b71f991461020d578063f2fde38b14610220578063f6c7226b1461023357600080fd5b8063a87cb6ea146101d5578063b870676c146101dd578063c0d05fed146101f057600080fd5b8063715018a6116100c8578063715018a61461015c5780638cbac0fa146101665780638da5cb5b146101895780638fe0ab8e1461019a57600080fd5b806315d276e1146100ef5780633d0c9cc414610133578063672ae59714610149575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61013b600781565b60405190815260200161012a565b600154610116906001600160a01b031681565b610164610246565b005b61017961017436600461185f565b61025a565b604051901515815260200161012a565b6000546001600160a01b0316610116565b6101ad6101a83660046118c5565b610ac2565b604080519586526020860194909452928401919091526060830152608082015260a00161012a565b61013b610d57565b600254610116906001600160a01b031681565b6101f8610dca565b60405161012a9190611902565b6101f8610e58565b61016461021b36600461194a565b610eea565b61016461022e36600461194a565b610f14565b610164610241366004611984565b610f8a565b61024e610fa2565b6102586000610ffc565b565b60006109f0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610292576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816102c8576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806102f9576000805260206000f35b5050505050565b7f0f42ccd1d09da2e97c7da52e3141035e6b7e29969488d781cc5907e911f2aef485527f22fcca6ed9538287a5d63ddd6213998aca52d06bd1a9ea2ba0000e6c0abcda0f60208601526000608086018661039d87357f0cae773c551389c4b3748876eb879fd5a22df84214423ccdffcb6b2580d7bf167f052a04c97a2182b6a1b2907b2cc1e38ec3a31f802548459a134bac0d7636509984610295565b6103ed60208801357f04a3290596fa6594ac4116f78951e6613a335fb4a55575fccc749f7e0047182a7f0ddc62daadf2242f06ed2fc536f6506d2c9c2b8aca41cef637e48643f42d8a4484610295565b61043d60408801357f1d885ff71ea4bb465c1156808c77dc42b4109067a9817e25c049b7e286486bd27f15b78b03c0442b3c971ab6085dc2d971895a91484fad7490112b418f5acbf98b84610295565b61048d60608801357f046af46ee1b42873cef47bef79ee3b6c3a3858b963b830a1392b74980842d1747f208abe3bef839194b75dfce6f70774a09f0159d6b6ee8d9c4a3fb56dbbbad35a84610295565b6104dc60808801357f0957e53908d052485184ec6ce32d3f28b35b4098c84faa43193147c67605ca407ecbb167565d1fc4ff126056f6ad5ae6d7ee36240d58724adace5b93d8bda45e84610295565b61052c60a08801357f0584e4a8541cf7270af7b54ca5b9b7d6356113d303ceb57742bd1ef633ca77f37f11fa2ebf5417b4549c753e84aca2920f9bb5f0cc20653ee4c4dc9fcba77d837a84610295565b61057c60c08801357f174d3871564045120f8d87478d04f57d15ff67945f107417d75dd7d98e3a52157f0bc5b9a3762ffbc89579ac3efa6366f610946639a924884c149d6b882663412f84610295565b6105cc60e08801357f050c39cf04b7e31780a9530e8c37cf035af9bb0771f9b97b043b5da06fa9c3087f2f4f503f73c7e882f95d7c60d6a1d949fc692d10f7e7d1a46848955b38fdf09b84610295565b61061d6101008801357f2cb8a1f363d9ee404ae54ea0e20f3f914a407fe0515415dba540fe52e28d98557f245e879af3861119e5c5b2a274fa09fd79254dab1c167d927f206c0e3ce1366e84610295565b61066e6101208801357f1f91f64be622f47fa11f93a86381c5361fbb73a73bbfc92d24ecaf865f0a018c7f0321e87db17c101496865d1841aef0981b235e079c4cc0e6b292ead4b9feeff884610295565b6106bf6101408801357f1ed877c0515893c450a07970e36b669ade589147607ebb95e648eb8417ae91eb7f1841f54a2c24330cf3d50547868a8ad41209f45b33e9286b40386214e66c400884610295565b6107106101608801357f0b5c9c02e164fd7e26208c6fcd1024f172411845c45b76543488da69d66e822a7f1728d566cfd864539960fb0e369fdcd413176050d48e4f32cdf89fc4789c6bb884610295565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f10aa234815d8947d72c1a64fbb4e78aac6858af89d49f9070f9039968b9659d16102808201527f28bc6b65a8c0751bd05adbaba004ec5da668ca9c05371b02540d2954e198af016102a08201527f1585aa9b4d728104ede3ab504f56e6e0ed2b4b0fe8e026f431e2b8720416487d6102c08201527f2af1b8085331fb26d7218460fc6aa847165175389ebef6e6c4713d2a674d89306102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610a086000840135610261565b610a156020840135610261565b610a226040840135610261565b610a2f6060840135610261565b610a3c6080840135610261565b610a4960a0840135610261565b610a5660c0840135610261565b610a6360e0840135610261565b610a71610100840135610261565b610a7f610120840135610261565b610a8d610140840135610261565b610a9b610160840135610261565b610aa9610180840135610261565b610ab6818486888a610300565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610b78918a919082019060c0830190610100840190600401611a35565b602060405180830381865afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611a82565b610bf55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610b3c565b610bfd610d57565b61010087013514610c505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610b3c565b6000610c6387610100016001600461104c565b90506003604051610c749190611aee565b604051809103902081604051602001610c8d9190611b64565b6040516020818303038152906040528051906020012014610cf05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610b3c565b610d0c6006610d0689610100016004600661104c565b90611127565b9550610d246000610d0689610100016006600861104c565b945061020087013593506102208701359250610d446102408801356112ff565b5093959294919350916102609091013590565b60015460408051630d901b9960e21b815290516000926001600160a01b0316916336406e649160048083019260209291908290030181865afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190611b80565b905090565b60038054610dd790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390611aba565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b505050505081565b606060038054610e6790611aba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9390611aba565b8015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b5050505050905090565b610ef2610fa2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f1c610fa2565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3c565b61029281610ffc565b610f92610fa2565b6003610f9e8282611be8565b5050565b6000546001600160a01b031633146102585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b3c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061105a8484611cbe565b60ff1667ffffffffffffffff8111156110755761107561196e565b60405190808252806020026020018201604052801561109e578160200160208202803683370190505b50905060ff84165b8360ff16811015611103578581600c81106110c3576110c3611aa4565b6020020135826110d660ff881684611cd7565b815181106110e6576110e6611aa4565b6020908102919091010152806110fb81611cea565b9150506110a6565b5061111e600782516111159190611d03565b82906007611413565b95945050505050565b600082818080805b845181101561127757603060f81b85828151811061114f5761114f611aa4565b01602001516001600160f81b031916108015906111905750603960f81b85828151811061117e5761117e611aa4565b01602001516001600160f81b03191611155b156111d35760308582815181106111a9576111a9611aa4565b01602001516111bb919060f81c611cd7565b6111c685600a611d03565b6111d09190611d1a565b93505b81156111e757826111e381611cea565b9350505b8481815181106111f9576111f9611aa4565b01602001516001600160f81b031916601760f91b036112655781156112605760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610b3c565b600191505b8061126f81611cea565b91505061112f565b50858211156112d35760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610b3c565b6112dd8287611cd7565b6112e890600a611e11565b6112f29084611d03565b9450505050505b92915050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190611a82565b156113b95760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610b3c565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b1580156113ff57600080fd5b505af11580156102f9573d6000803e3d6000fd5b60606000808386516114259190611d03565b67ffffffffffffffff81111561143d5761143d61196e565b6040519080825280601f01601f191660200182016040528015611467576020820181803683370190505b5090506000805b87518161ffff16101561161e576000888261ffff168151811061149357611493611aa4565b6020026020010151905060008767ffffffffffffffff8111156114b8576114b861196e565b6040519080825280602002602001820160405280156114e1578160200160208202803683370190505b50905060005b88811015611533576114fa816008611d03565b83901c82828151811061150f5761150f611aa4565b60ff909216602092830291909101909101528061152b81611cea565b9150506114e7565b5060005b8881101561160857600082828151811061155357611553611aa4565b602002602001015160ff169050806000146115cb578060f81b87878151811061157e5761157e611aa4565b60200101906001600160f81b031916908160001a9053508561159f81611cea565b96506115ae9050600289611e1d565b60ff166000036115c6576115c3600189611e4d565b97505b6115ee565b6115d6600289611e1d565b60ff166001036115ee576115eb600189611e4d565b97505b5060089290921c918061160081611cea565b915050611537565b505050808061161690611e66565b91505061146e565b5060018360ff1610156116bf5760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610b3c565b8581111561172d5760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610b3c565b600061173883611744565b98975050505050505050565b8051606090829060005b82518110156117995782818151811061176957611769611aa4565b01602001516001600160f81b03191660000361178757809150611799565b8061179181611cea565b91505061174e565b5060008167ffffffffffffffff8111156117b5576117b561196e565b6040519080825280601f01601f1916602001820160405280156117df576020820181803683370190505b50905060005b82811015611845578381815181106117ff576117ff611aa4565b602001015160f81c60f81b82828151811061181c5761181c611aa4565b60200101906001600160f81b031916908160001a9053508061183d81611cea565b9150506117e5565b50949350505050565b80604081018310156112f957600080fd5b60008060008061028080868803121561187757600080fd5b611881878761184e565b945060c086018781111561189457600080fd5b6040870194506118a4888261184e565b9350508681870111156118b657600080fd5b50929591945092610100019150565b600061028082840312156118d857600080fd5b50919050565b60005b838110156118f95781810151838201526020016118e1565b50506000910152565b60208152600082518060208401526119218160408501602087016118de565b601f01601f19169190910160400192915050565b6001600160a01b038116811461029257600080fd5b60006020828403121561195c57600080fd5b813561196781611935565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561199657600080fd5b813567ffffffffffffffff808211156119ae57600080fd5b818401915084601f8301126119c257600080fd5b8135818111156119d4576119d461196e565b604051601f8201601f19908116603f011681019083821181831017156119fc576119fc61196e565b81604052828152876020848701011115611a1557600080fd5b826020860160208301376000928101602001929092525095945050505050565b61028081016040808784378083018660005b6002811015611a6457838284379183019190830190600101611a47565b505050808560c0850137506101808361010084013795945050505050565b600060208284031215611a9457600080fd5b8151801515811461196757600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611ace57607f821691505b6020821081036118d857634e487b7160e01b600052602260045260246000fd5b6000808354611afc81611aba565b60018281168015611b145760018114611b2957611b58565b60ff1984168752821515830287019450611b58565b8760005260208060002060005b85811015611b4f5781548a820152908401908201611b36565b50505082870194505b50929695505050505050565b60008251611b768184602087016118de565b9190910192915050565b600060208284031215611b9257600080fd5b5051919050565b601f821115611be357600081815260208120601f850160051c81016020861015611bc05750805b601f850160051c820191505b81811015611bdf57828155600101611bcc565b5050505b505050565b815167ffffffffffffffff811115611c0257611c0261196e565b611c1681611c108454611aba565b84611b99565b602080601f831160018114611c4b5760008415611c335750858301515b600019600386901b1c1916600185901b178555611bdf565b600085815260208120601f198616915b82811015611c7a57888601518255948401946001909101908401611c5b565b5085821015611c985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156112f9576112f9611ca8565b818103818111156112f9576112f9611ca8565b600060018201611cfc57611cfc611ca8565b5060010190565b80820281158282048414176112f9576112f9611ca8565b808201808211156112f9576112f9611ca8565b600181815b80851115611d68578160001904821115611d4e57611d4e611ca8565b80851615611d5b57918102915b93841c9390800290611d32565b509250929050565b600082611d7f575060016112f9565b81611d8c575060006112f9565b8160018114611da25760028114611dac57611dc8565b60019150506112f9565b60ff841115611dbd57611dbd611ca8565b50506001821b6112f9565b5060208310610133831016604e8410600b8410161715611deb575081810a6112f9565b611df58383611d2d565b8060001904821115611e0957611e09611ca8565b029392505050565b60006119678383611d70565b600060ff831680611e3e57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156112f9576112f9611ca8565b600061ffff808316818103611e7d57611e7d611ca8565b600101939250505056fea2646970667358221220a1149bd2a94ba8e2c44b365ae0e95a90bcecf8596a20f4fd1b2ed7e673a0099764736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3218,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"mailserverKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapter)3483\"\n      },\n      {\n        \"astId\": 3221,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3714\"\n      },\n      {\n        \"astId\": 3223,\n        \"contract\": \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol:VenmoSendProcessor\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapter)3483\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapter\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3714\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/VenmoSendProcessorV2.json",
    "content": "{\n  \"address\": \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_ramp\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_venmoMailserverKeyHashAdapter\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"_nullifierRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PACK_SIZE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"emailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getEmailFromAddress\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_keyHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"isMailServerKeyHash\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"mailServerKeyHashAdapter\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nullifierRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract INullifierRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"a\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[2][2]\",\n              \"name\": \"b\",\n              \"type\": \"uint256[2][2]\"\n            },\n            {\n              \"internalType\": \"uint256[2]\",\n              \"name\": \"c\",\n              \"type\": \"uint256[2]\"\n            },\n            {\n              \"internalType\": \"uint256[12]\",\n              \"name\": \"signals\",\n              \"type\": \"uint256[12]\"\n            }\n          ],\n          \"internalType\": \"struct ISendProcessor.SendProof\",\n          \"name\": \"_proof\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"processProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"timestamp\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"offRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"onRamperIdHash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"intentHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ramp\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_emailFromAddress\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setEmailFromAddress\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract IKeyHashAdapterV2\",\n          \"name\": \"_mailServerKeyHashAdapter\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setMailserverKeyHashAdapter\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_timestampBuffer\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setTimestampBuffer\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"timestampBuffer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pA\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[2][2]\",\n          \"name\": \"_pB\",\n          \"type\": \"uint256[2][2]\"\n        },\n        {\n          \"internalType\": \"uint256[2]\",\n          \"name\": \"_pC\",\n          \"type\": \"uint256[2]\"\n        },\n        {\n          \"internalType\": \"uint256[12]\",\n          \"name\": \"_pubSignals\",\n          \"type\": \"uint256[12]\"\n        }\n      ],\n      \"name\": \"verifyProof\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"transactionHash\": \"0xb2c12e68aa08932224dfe3717211d88b9e27191eaadb5bd66ec6ace5798f8b10\",\n  \"receipt\": {\n    \"to\": null,\n    \"from\": \"0x4e39cF8578698131c57404e8bc3eEC820EDa51d8\",\n    \"contractAddress\": \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n    \"transactionIndex\": 80,\n    \"gasUsed\": \"1899996\",\n    \"logsBloom\": \"0x00000000000040000000000000000000000000000000000000800000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000000000000000000000000000000000000000000000020000000000000000002000000000000000000000000000000000000000000000000\",\n    \"blockHash\": \"0xc6f8ff713106ed35eec29089e943ae265b073717b0273a069a68e824f5d9d249\",\n    \"transactionHash\": \"0xb2c12e68aa08932224dfe3717211d88b9e27191eaadb5bd66ec6ace5798f8b10\",\n    \"logs\": [\n      {\n        \"transactionIndex\": 80,\n        \"blockNumber\": 5239497,\n        \"transactionHash\": \"0xb2c12e68aa08932224dfe3717211d88b9e27191eaadb5bd66ec6ace5798f8b10\",\n        \"address\": \"0x84ac07EfC0c7093416aCd6189a600AD479CFA045\",\n        \"topics\": [\n          \"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\",\n          \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n          \"0x0000000000000000000000004e39cf8578698131c57404e8bc3eec820eda51d8\"\n        ],\n        \"data\": \"0x\",\n        \"logIndex\": 96,\n        \"blockHash\": \"0xc6f8ff713106ed35eec29089e943ae265b073717b0273a069a68e824f5d9d249\"\n      }\n    ],\n    \"blockNumber\": 5239497,\n    \"cumulativeGasUsed\": \"7525013\",\n    \"status\": 1,\n    \"byzantium\": true\n  },\n  \"args\": [\n    \"0x38637CD256d70994f2d5533BEAfe52eEfC2a96Ab\",\n    \"0x64c5B59877121F9ed95D539536389BBdF1c678Ee\",\n    \"0xAf0196f22a1383B779E3f833AD35BFf38722c8AD\",\n    \"venmo@venmo.com\",\n    \"30\"\n  ],\n  \"numDeployments\": 2,\n  \"solcInputHash\": \"f47db0aba1ef1355cf5a362858260c2b\",\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.18+commit.87f61d96\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_ramp\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_venmoMailserverKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"_nullifierRegistry\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"PACK_SIZE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"emailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getEmailFromAddress\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"_keyHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"isMailServerKeyHash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"mailServerKeyHashAdapter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"nullifierRegistry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract INullifierRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"c\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"signals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"internalType\\\":\\\"struct ISendProcessor.SendProof\\\",\\\"name\\\":\\\"_proof\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"name\\\":\\\"processProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"offRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"onRamperIdHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"intentHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ramp\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_emailFromAddress\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setEmailFromAddress\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IKeyHashAdapterV2\\\",\\\"name\\\":\\\"_mailServerKeyHashAdapter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setMailserverKeyHashAdapter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_timestampBuffer\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setTimestampBuffer\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"timestampBuffer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pA\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[2][2]\\\",\\\"name\\\":\\\"_pB\\\",\\\"type\\\":\\\"uint256[2][2]\\\"},{\\\"internalType\\\":\\\"uint256[2]\\\",\\\"name\\\":\\\"_pC\\\",\\\"type\\\":\\\"uint256[2]\\\"},{\\\"internalType\\\":\\\"uint256[12]\\\",\\\"name\\\":\\\"_pubSignals\\\",\\\"type\\\":\\\"uint256[12]\\\"}],\\\"name\\\":\\\"verifyProof\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"owner()\\\":{\\\"details\\\":\\\"Returns the address of the current owner.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\\\"},\\\"setEmailFromAddress(string)\\\":{\\\"params\\\":{\\\"_emailFromAddress\\\":\\\"The from email address for validated emails, MUST BE PROPERLY PADDED\\\"}},\\\"setTimestampBuffer(uint256)\\\":{\\\"params\\\":{\\\"_timestampBuffer\\\":\\\"The timestamp buffer for validated emails\\\"}},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"setEmailFromAddress(string)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\"},\\\"setTimestampBuffer(uint256)\\\":{\\\"notice\\\":\\\"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":\\\"VenmoSendProcessorV2\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"@openzeppelin/contracts/access/Ownable.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\nimport \\\\\\\"../utils/Context.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @dev Contract module which provides a basic access control mechanism, where\\\\n * there is an account (an owner) that can be granted exclusive access to\\\\n * specific functions.\\\\n *\\\\n * By default, the owner account will be the one that deploys the contract. This\\\\n * can later be changed with {transferOwnership}.\\\\n *\\\\n * This module is used through inheritance. It will make available the modifier\\\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\\\n * the owner.\\\\n */\\\\nabstract contract Ownable is Context {\\\\n    address private _owner;\\\\n\\\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\\\n\\\\n    /**\\\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\\\n     */\\\\n    constructor() {\\\\n        _transferOwnership(_msgSender());\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if called by any account other than the owner.\\\\n     */\\\\n    modifier onlyOwner() {\\\\n        _checkOwner();\\\\n        _;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Returns the address of the current owner.\\\\n     */\\\\n    function owner() public view virtual returns (address) {\\\\n        return _owner;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Throws if the sender is not the owner.\\\\n     */\\\\n    function _checkOwner() internal view virtual {\\\\n        require(owner() == _msgSender(), \\\\\\\"Ownable: caller is not the owner\\\\\\\");\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Leaves the contract without owner. It will not be possible to call\\\\n     * `onlyOwner` functions. Can only be called by the current owner.\\\\n     *\\\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\\\n     * thereby disabling any functionality that is only available to the owner.\\\\n     */\\\\n    function renounceOwnership() public virtual onlyOwner {\\\\n        _transferOwnership(address(0));\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Can only be called by the current owner.\\\\n     */\\\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\\\n        require(newOwner != address(0), \\\\\\\"Ownable: new owner is the zero address\\\\\\\");\\\\n        _transferOwnership(newOwner);\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\\\n     * Internal function without access restriction.\\\\n     */\\\\n    function _transferOwnership(address newOwner) internal virtual {\\\\n        address oldOwner = _owner;\\\\n        _owner = newOwner;\\\\n        emit OwnershipTransferred(oldOwner, newOwner);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@openzeppelin/contracts/utils/Context.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\\\n\\\\npragma solidity ^0.8.0;\\\\n\\\\n/**\\\\n * @dev Provides information about the current execution context, including the\\\\n * sender of the transaction and its data. While these are generally available\\\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\\\n * manner, since when dealing with meta-transactions the account sending and\\\\n * paying for execution may not be the actual sender (as far as an application\\\\n * is concerned).\\\\n *\\\\n * This contract is only required for intermediate, library-like contracts.\\\\n */\\\\nabstract contract Context {\\\\n    function _msgSender() internal view virtual returns (address) {\\\\n        return msg.sender;\\\\n    }\\\\n\\\\n    function _msgData() internal view virtual returns (bytes calldata) {\\\\n        return msg.data;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"@zk-email/contracts/utils/StringUtils.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: MIT\\\\npragma solidity >=0.7.6;\\\\n\\\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\\\nlibrary StringUtils {\\\\n    bytes16 internal constant ALPHABET = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\\\n\\\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length + 2);\\\\n        buffer[0] = \\\\\\\"0\\\\\\\";\\\\n        buffer[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\\\n            buffer[i] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        require(value == 0, \\\\\\\"Strings: hex length insufficient\\\\\\\");\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\\\n        bytes memory buffer = new bytes(2 * length);\\\\n        for (uint256 i = buffer.length; i > 0; i--) {\\\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\\\n            value >>= 4;\\\\n        }\\\\n        return string(buffer);\\\\n    }\\\\n\\\\n    function toString(uint256 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(bytes32 value) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(value));\\\\n    }\\\\n\\\\n    function toString(address account) internal pure returns (string memory) {\\\\n        return toString(abi.encodePacked(account));\\\\n    }\\\\n\\\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\\\n    }\\\\n\\\\n    function toString(bytes memory data) internal pure returns (string memory) {\\\\n        bytes memory alphabet = \\\\\\\"0123456789abcdef\\\\\\\";\\\\n\\\\n        bytes memory str = new bytes(2 + data.length * 2);\\\\n        str[0] = \\\\\\\"0\\\\\\\";\\\\n        str[1] = \\\\\\\"x\\\\\\\";\\\\n        for (uint256 i = 0; i < data.length; i++) {\\\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\\\n        }\\\\n        return string(str);\\\\n    }\\\\n\\\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\\\n    // Note that this is not 32 due to the field modulus of circom\\\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint256[] memory packedBytes = new uint256[](1);\\\\n        packedBytes[0] = packedByte;\\\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\\\n    }\\\\n\\\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\\\n    // This defaults to 31 bytes per packed byte\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\\\n    }\\\\n\\\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\\\n        internal\\\\n        pure\\\\n        returns (string memory extractedString)\\\\n    {\\\\n        uint8 state = 0;\\\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\\\n        uint256 nonzeroBytesArrayIndex = 0;\\\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\\\n            uint256 packedByte = packedBytes[i];\\\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\\\n            }\\\\n            for (uint256 j = 0; j < packSize; j++) {\\\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\\\n                if (unpackedByte != 0) {\\\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\\\n                    nonzeroBytesArrayIndex++;\\\\n                    if (state % 2 == 0) {\\\\n                        state += 1;\\\\n                    }\\\\n                } else {\\\\n                    if (state % 2 == 1) {\\\\n                        state += 1;\\\\n                    }\\\\n                }\\\\n                packedByte = packedByte >> 8;\\\\n            }\\\\n        }\\\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\\\n\\\\n        // require(state == 1 || state == 2, \\\\\\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\\\\\");\\\\n        require(state >= 1, \\\\\\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\\\\\");\\\\n        require(nonzeroBytesArrayIndex <= signals, \\\\\\\"Packed bytes more than allowed max number of signals!\\\\\\\");\\\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\\\n        return returnValue;\\\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\\\n    }\\\\n\\\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\\\n        uint256 i;\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\\\n        bytes memory resultBytes = new bytes(i);\\\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\\\n            resultBytes[i] = input[i];\\\\n        }\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\\\n        require(start <= end && end <= input.length, \\\\\\\"Invalid slice indices\\\\\\\");\\\\n        uint256[] memory result = new uint256[](end - start);\\\\n        for (uint256 i = start; i < end; i++) {\\\\n            result[i - start] = input[i];\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // stringToUint is used to convert a string like \\\\\\\"45\\\\\\\" to a uint256 4\\\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(s);\\\\n        uint256 result = 0;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            // TODO: Currently truncates decimals\\\\n            if (b[i] == 0x2E) {\\\\n                return result;\\\\n            }\\\\n        }\\\\n        return result;\\\\n    }\\\\n\\\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\\\n        bytes memory emailBytes = bytes(fromEmail);\\\\n        uint256 atIndex;\\\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\\\n            if (emailBytes[i] == \\\\\\\"@\\\\\\\") {\\\\n                atIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\\\n        }\\\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\\\n    }\\\\n\\\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\\\n        bytes memory inputBytes = bytes(input);\\\\n        uint256 endIndex = inputBytes.length;\\\\n\\\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\\\n            if (inputBytes[i] == 0) {\\\\n                endIndex = i;\\\\n                break;\\\\n            }\\\\n        }\\\\n\\\\n        bytes memory resultBytes = new bytes(endIndex);\\\\n        for (uint256 i = 0; i < endIndex; i++) {\\\\n            resultBytes[i] = inputBytes[i];\\\\n        }\\\\n\\\\n        return string(resultBytes);\\\\n    }\\\\n\\\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Converts all the values of a string to their corresponding upper case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to upper case\\\\n     * @return string\\\\n     */\\\\n    function upper(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Converts all the values of a string to their corresponding lower case\\\\n     * value.\\\\n     *\\\\n     * @param _base When being used for a data type this is the extended object\\\\n     *              otherwise this is the string base to convert to lower case\\\\n     * @return string\\\\n     */\\\\n    function lower(string memory _base) public pure returns (string memory) {\\\\n        bytes memory _baseBytes = bytes(_base);\\\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\\\n        }\\\\n        return string(_baseBytes);\\\\n    }\\\\n\\\\n    /**\\\\n     * Upper\\\\n     *\\\\n     * Convert an alphabetic character to upper case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to upper case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a lower case otherwise returns the original value\\\\n     */\\\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\\\n            return bytes1(uint8(_b1) - 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n\\\\n    /**\\\\n     * Lower\\\\n     *\\\\n     * Convert an alphabetic character to lower case and return the original\\\\n     * value when not alphabetic\\\\n     *\\\\n     * @param _b1 The byte to be converted to lower case\\\\n     * @return bytes1 The converted value if the passed value was alphabetic\\\\n     *                and in a upper case otherwise returns the original value\\\\n     */\\\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\\\n            return bytes1(uint8(_b1) + 32);\\\\n        }\\\\n\\\\n        return _b1;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x8c5b56494116a0c056c63e28fe892eea9bee5b056b09efa6aba1c9a82dc26c18\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/lib/StringConversionUtils.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\\\n// converting from string to Uint\\\\nlibrary StringConversionUtils {\\\\n    \\\\n    /**\\\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\\\n     * the returned number has multiple floating points then the function will revert.\\\\n     *\\\\n     * Examples: _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 6 => 12340000\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 2 => 1234\\\\n     *           _s = \\\\\\\"12.34\\\\\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\\\n     *           _s = \\\\\\\"12.34.56\\\\\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\\\n     *\\\\n     * @param _s                    String being processed\\\\n     * @param _desiredDecimals      Desired amount of decimal places\\\\n     */\\\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\\\n        bytes memory b = bytes(_s);\\\\n\\\\n        uint256 result = 0;\\\\n        uint256 decimalPlaces = 0;\\\\n\\\\n        bool decimals = false;\\\\n        for (uint256 i = 0; i < b.length; i++) {\\\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\\\n            }\\\\n\\\\n            if (decimals) {\\\\n                decimalPlaces++;\\\\n            }\\\\n\\\\n            if (b[i] == 0x2E) {\\\\n                require(decimals == false, \\\\\\\"String has multiple decimals\\\\\\\");\\\\n                decimals = true;\\\\n            }\\\\n        }\\\\n\\\\n        require(decimalPlaces <= _desiredDecimals, \\\\\\\"String has too many decimal places\\\\\\\");\\\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\\\n     *\\\\n     * @param _str           String being processed\\\\n     * @param _startIndex    Index to start parsing from\\\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\\\n     */\\\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\\\n        bytes memory strBytes = bytes(_str);\\\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\\\n            result[i-_startIndex] = strBytes[i];\\\\n        }\\\\n        return string(result);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xa90dee5481e04437ab9ff0dac63fa4023a6505f184b01926f48a2d3c9cce7381\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/BaseProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { Ownable } from \\\\\\\"@openzeppelin/contracts/access/Ownable.sol\\\\\\\";\\\\n\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"./nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract BaseProcessorV2 is Ownable {\\\\n\\\\n    /* ============ Modifiers ============ */\\\\n    modifier onlyRamp() {\\\\n        require(msg.sender == ramp, \\\\\\\"Only Ramp can call this function\\\\\\\");\\\\n        _;\\\\n    }\\\\n\\\\n    /* ============ State Variables ============ */\\\\n    address public immutable ramp;\\\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\\\n    INullifierRegistry public nullifierRegistry;\\\\n    bytes public emailFromAddress;\\\\n    uint256 public timestampBuffer;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Ownable()\\\\n    {\\\\n        ramp = _ramp;\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n        nullifierRegistry = _nullifierRegistry;\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Functions ============ */\\\\n\\\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\\\n     *\\\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\\\n     */\\\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\\\n        emailFromAddress = bytes(_emailFromAddress);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\\\n     * timestamps.\\\\n     *\\\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\\\n     */\\\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\\\n        timestampBuffer = _timestampBuffer;\\\\n    }\\\\n\\\\n    /* ============ External Getters ============ */\\\\n\\\\n    function getEmailFromAddress() external view returns (bytes memory) {\\\\n        return emailFromAddress;\\\\n    }\\\\n\\\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\\\\\"Nullifier has already been used\\\\\\\");\\\\n        nullifierRegistry.addNullifier(_nullifier);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x207174fcbbfa8d2de65a5a5665f05e3f2d668f7df33b682a0f139c967dd3f6be\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface IKeyHashAdapterV2 {\\\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xc849f2dc34e4463550b8e0a16541bde429cb1adf43776b2c4179e9d4e4e656a2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/processors/nullifierRegistries/INullifierRegistry.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface INullifierRegistry {\\\\n    function addNullifier(bytes32 _nullifier) external;\\\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x107164bc9a320938b513305878163b7fa884da4cdae58d0c8e81bfbb00c97c5e\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ninterface ISendProcessor {\\\\n\\\\n    struct SendProof {\\\\n        uint256[2] a;\\\\n        uint256[2][2] b;\\\\n        uint256[2] c;\\\\n        uint256[12] signals;\\\\n    }\\\\n\\\\n    function processProof(\\\\n        SendProof calldata _proof\\\\n    )\\\\n        external\\\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16811e82d90b1e15eafd8f3de30b6a05a48c906c96e65d263c557c66e9fcedb7\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\\\":{\\\"content\\\":\\\"//SPDX-License-Identifier: MIT\\\\n\\\\nimport { StringUtils } from \\\\\\\"@zk-email/contracts/utils/StringUtils.sol\\\\\\\";\\\\n\\\\nimport { BaseProcessorV2 } from \\\\\\\"../../processors/BaseProcessorV2.sol\\\\\\\";\\\\nimport { Groth16Verifier } from \\\\\\\"../../verifiers/venmo_send_verifier_v2.sol\\\\\\\";\\\\nimport { IKeyHashAdapterV2 } from \\\\\\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\\\\\";\\\\nimport { INullifierRegistry } from \\\\\\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\\\\\";\\\\nimport { ISendProcessor } from \\\\\\\"../venmo-v1/interfaces/ISendProcessor.sol\\\\\\\";\\\\nimport { StringConversionUtils } from \\\\\\\"../../lib/StringConversionUtils.sol\\\\\\\";\\\\n\\\\npragma solidity ^0.8.18;\\\\n\\\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\\\n    \\\\n    using StringUtils for uint256[];\\\\n    using StringConversionUtils for string;\\\\n\\\\n    /* ============ Constants ============ */\\\\n    uint256 constant public PACK_SIZE = 7;\\\\n\\\\n    /* ============ Constructor ============ */\\\\n    constructor(\\\\n        address _ramp,\\\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\\\n        INullifierRegistry _nullifierRegistry,\\\\n        string memory _emailFromAddress,\\\\n        uint256 _timestampBuffer\\\\n    )\\\\n        Groth16Verifier()\\\\n        BaseProcessorV2(\\\\n            _ramp,\\\\n            _venmoMailserverKeyHashAdapter,\\\\n            _nullifierRegistry,\\\\n            _emailFromAddress,\\\\n            _timestampBuffer\\\\n        )\\\\n    {}\\\\n    \\\\n    /* ============ External Functions ============ */\\\\n    function processProof(\\\\n        ISendProcessor.SendProof calldata _proof\\\\n    )\\\\n        public\\\\n        override\\\\n        onlyRamp\\\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\\\n    {\\\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\\\\\"Invalid Proof\\\\\\\"); // checks effects iteractions, this should come first\\\\n\\\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\\\\\"Invalid mailserver key hash\\\\\\\");\\\\n\\\\n        // Signals [1:4] are the packed from email address\\\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\\\\\"Invalid email from address\\\\\\\");\\\\n\\\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\\\n\\\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\\\n        // specify 0 decimals, if any decimal appears this function will revert\\\\n        // Add the buffer to build in flexibility with L2 timestamps\\\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\\\n\\\\n        // Signals [8] is the packed offRamperIdHash\\\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\\\n\\\\n        // Signals [9] is the packed onRamperIdHash\\\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\\\n\\\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\\\n\\\\n        // Signals [11] is intentHash\\\\n        intentHash = bytes32(_proof.signals[11]);\\\\n    }\\\\n\\\\n    /* ============ Internal Functions ============ */\\\\n\\\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\\\n        for (uint256 i = _from; i < _to; i++) {\\\\n            signalArray[i - _from] = _signals[i];\\\\n        }\\\\n\\\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xf04ac4ebce2da88c699306ff13d6a2bd8f665d2e9195bfb824eb039a0fce61c2\\\",\\\"license\\\":\\\"MIT\\\"},\\\"contracts/verifiers/venmo_send_verifier_v2.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n/*\\\\n    Copyright 2021 0KIMS association.\\\\n\\\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\\\n\\\\n    snarkJS is a free software: you can redistribute it and/or modify it\\\\n    under the terms of the GNU General Public License as published by\\\\n    the Free Software Foundation, either version 3 of the License, or\\\\n    (at your option) any later version.\\\\n\\\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\\\n    License for more details.\\\\n\\\\n    You should have received a copy of the GNU General Public License\\\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\\\n*/\\\\n\\\\npragma solidity >=0.7.0 <0.9.0;\\\\n\\\\ncontract Groth16Verifier {\\\\n    // Scalar field size\\\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\\\n    // Base field size\\\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\\\n\\\\n    // Verification Key data\\\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\\\n\\\\n\\\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\\\n\\\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\\\n\\\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\\\n\\\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\\\n\\\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\\\n\\\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\\\n\\\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\\\n\\\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\\\n\\\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\\\n\\\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\\\n\\\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\\\n\\\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\\\n\\\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\\\n\\\\n\\\\n    // Memory data\\\\n    uint16 constant pVk = 0;\\\\n    uint16 constant pPairing = 128;\\\\n\\\\n    uint16 constant pLastMem = 896;\\\\n\\\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\\\n        assembly {\\\\n            function checkField(v) {\\\\n                if iszero(lt(v, q)) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\\\n            function g1_mulAccC(pR, x, y, s) {\\\\n                let success\\\\n                let mIn := mload(0x40)\\\\n                mstore(mIn, x)\\\\n                mstore(add(mIn, 32), y)\\\\n                mstore(add(mIn, 64), s)\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n\\\\n                mstore(add(mIn, 64), mload(pR))\\\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\\\n\\\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\\\n\\\\n                if iszero(success) {\\\\n                    mstore(0, 0)\\\\n                    return(0, 0x20)\\\\n                }\\\\n            }\\\\n\\\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\\\n                let _pPairing := add(pMem, pPairing)\\\\n                let _pVk := add(pMem, pVk)\\\\n\\\\n                mstore(_pVk, IC0x)\\\\n                mstore(add(_pVk, 32), IC0y)\\\\n\\\\n                // Compute the linear combination vk_x\\\\n\\\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\\\n\\\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\\\n\\\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\\\n\\\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\\\n\\\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\\\n\\\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\\\n\\\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\\\n\\\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\\\n\\\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\\\n\\\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\\\n\\\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\\\n\\\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\\\n\\\\n\\\\n                // -A\\\\n                mstore(_pPairing, calldataload(pA))\\\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\\\n\\\\n                // B\\\\n                mstore(add(_pPairing, 64), calldataload(pB))\\\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\\\n\\\\n                // alpha1\\\\n                mstore(add(_pPairing, 192), alphax)\\\\n                mstore(add(_pPairing, 224), alphay)\\\\n\\\\n                // beta2\\\\n                mstore(add(_pPairing, 256), betax1)\\\\n                mstore(add(_pPairing, 288), betax2)\\\\n                mstore(add(_pPairing, 320), betay1)\\\\n                mstore(add(_pPairing, 352), betay2)\\\\n\\\\n                // vk_x\\\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\\\n\\\\n\\\\n                // gamma2\\\\n                mstore(add(_pPairing, 448), gammax1)\\\\n                mstore(add(_pPairing, 480), gammax2)\\\\n                mstore(add(_pPairing, 512), gammay1)\\\\n                mstore(add(_pPairing, 544), gammay2)\\\\n\\\\n                // C\\\\n                mstore(add(_pPairing, 576), calldataload(pC))\\\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\\\n\\\\n                // delta2\\\\n                mstore(add(_pPairing, 640), deltax1)\\\\n                mstore(add(_pPairing, 672), deltax2)\\\\n                mstore(add(_pPairing, 704), deltay1)\\\\n                mstore(add(_pPairing, 736), deltay2)\\\\n\\\\n\\\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\\\n\\\\n                isOk := and(success, mload(_pPairing))\\\\n            }\\\\n\\\\n            let pMem := mload(0x40)\\\\n            mstore(0x40, add(pMem, pLastMem))\\\\n\\\\n            // Validate that all evaluations \\\\u2208 F\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 0)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 32)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 64)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 96)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 128)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 160)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 192)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 224)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 256)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 288)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 320)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 352)))\\\\n\\\\n            checkField(calldataload(add(_pubSignals, 384)))\\\\n\\\\n\\\\n            // Validate all evaluations\\\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\\\n\\\\n            mstore(0, isValid)\\\\n             return(0, 0x20)\\\\n         }\\\\n     }\\\\n }\\\",\\\"keccak256\\\":\\\"0x98a7dc28d65df0afdfe3cfd43c979f616555f660616de6495059d0741d48056f\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a06040523480156200001157600080fd5b50604051620022c9380380620022c983398101604081905262000034916200011a565b848484848462000044336200009b565b6001600160a01b03858116608052600180546001600160a01b031990811687841617909155600280549091169185169190911790556003620000878382620002c9565b506004555062000395975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200010157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156200013357600080fd5b85516200014081620000eb565b809550506020808701516200015581620000eb565b60408801519095506200016881620000eb565b60608801519094506001600160401b03808211156200018657600080fd5b818901915089601f8301126200019b57600080fd5b815181811115620001b057620001b062000104565b604051601f8201601f19908116603f01168101908382118183101715620001db57620001db62000104565b816040528281528c86848701011115620001f457600080fd5b600093505b82841015620002185784840186015181850187015292850192620001f9565b6000868483010152809750505050505050608086015190509295509295909350565b600181811c908216806200024f57607f821691505b6020821081036200027057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c457600081815260208120601f850160051c810160208610156200029f5750805b601f850160051c820191505b81811015620002c057828155600101620002ab565b5050505b505050565b81516001600160401b03811115620002e557620002e562000104565b620002fd81620002f684546200023a565b8462000276565b602080601f8311600181146200033557600084156200031c5750858301515b600019600386901b1c1916600185901b178555620002c0565b600085815260208120601f198616915b82811015620003665788860151825594840194600190910190840162000345565b5085821015620003855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611f11620003b86000396000818161010a0152610b830152611f116000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610241578063dbac582114610254578063f2fde38b1461025d578063f6c7226b1461027057600080fd5b8063b2a3fda4146101fe578063b870676c14610211578063c0d05fed14610224578063ced1e9781461023957600080fd5b80638cbac0fa116100d35780638cbac0fa1461018c5780638da5cb5b1461019f5780638fe0ab8e146101b0578063a8ef333f146101eb57600080fd5b806315d276e11461010557806319d09152146101495780633d0c9cc41461016c578063715018a614610182575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046118a2565b610283565b6040519015158152602001610140565b610174600781565b604051908152602001610140565b61018a6102f7565b005b61015c61019a3660046118cc565b61030b565b6000546001600160a01b031661012c565b6101c36101be366004611932565b610b72565b604080519586526020860194909452928401919091526060830152608082015260a001610140565b60015461012c906001600160a01b031681565b61018a61020c3660046118a2565b610e13565b60025461012c906001600160a01b031681565b61022c610e20565b604051610140919061196f565b61022c610eae565b61018a61024f3660046119b7565b610f40565b61017460045481565b61018a61026b3660046119b7565b610f6a565b61018a61027e3660046119f1565b610fe0565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190611aa2565b92915050565b6102ff610ff8565b6103096000611052565b565b6000610aa0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610343576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610379576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103aa576000805260206000f35b5050505050565b7f0182d4fc0f939f1912ce4c8cef181e3c502bbbbe1ba8755babb7e5c3af2d734c85527f2944b4683ec8b70be366dddf86945e3c3b1d34b3d504eb6649c387fac8a7c36c60208601526000608086018661044e87357f260eb07d3eb99d832e55fa3f1f4b05cfcf80427e26e02abb7415d2ba28d8195b7f0d2bd1d76b7657184ec3c3a0439909a68a1a4d3c832d1392f454c98a9298403d84610346565b61049e60208801357f11ef143a246a3a72d6fda7677609e2b84ca0e598b72e5df839ef881e301796da7f0bacb5ab1dc08f4ae8518e6153caf7990e200a146f72597a2b6ccf0e91b18a8984610346565b6104ed60408801357f092b8fef5bc67b9734050d968c7f9289d8d08956da77239871fd0d1f4e2011af7e642b3df77deb8ce73ba647a30b1ef43952d85418fd4ecc33a5c973fd30ab1084610346565b61053d60608801357f21bb8189b64e32ebe2f01610695f2349f2fb4e01a6a04f219dd1e14373ec90227f0f83472ff21a011f79a807b170bcfaa3f373ce0479ccf882fd663a9bb0e834ec84610346565b61058d60808801357f068021f51f6823a9efe9be7f216512f805f9764e71e046ad5603cb21572c0d307f22f883f75f39cd247a4cd5f599a3e49cabd7842c6544ca25d8b1802ee969473884610346565b6105dd60a08801357f07dced99a1040fb280e8910681f563479c99ee30264ced7daa3c715065a6c0ad7f13877d5b7a693fb419c360430fd345f8ddcdffcc414b2d68b43355785f600d2a84610346565b61062d60c08801357f0f86e0d9fa941e6dba0ee2e8522ee1a4b2c16b55d5e6e61d6d4c925066731e4f7f1604a049b532eb7b479ab94d194134b2b20fad7b923d356b12c8f6013fd416f384610346565b61067d60e08801357f131c1dead755f8f821ac503300e565f720a9ee30bfd5654546beac47806199687f1225284a5cb9cfc0d88712834c57165b04d59d6fc1013302f051f0a223a7ec4b84610346565b6106ce6101008801357f23e89705b334e5f1a510cf866cdfbeaed0d1be98438964e893e4dbba1c3bda1e7f1b6ac8e843540c476c75cfe9f789e564a087e1d1ee2f6c8a90b870ef3178dd1584610346565b61071f6101208801357f1fabd11e7ea9505077394b319dce69b044c5b8e41448f45c0e49509f8c3274557f17d6f05d6a0b6644e605a70468b7f569cd5f173d157132555b2e8f5cd454706784610346565b61076f6101408801357f242b36bd22a7175983c14ab9e91c25ab2fe6467632f26716b7548dc114b953f77e15826e501b505d3a54a26536e2f6a00cf25221c517b6bf69d829a7e84e893f84610346565b6107c06101608801357f0c6da889f98691d3973cb5f68ba738045186f1327c7e9d1edb715f925c0b977b7f0934876403c615f66f720c061d95869e9553ca93f131c18c2d9dc03dbc67a0a184610346565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f28857fdbd6f69280f9a0aff6d111687d604e8ca8715d3b129189624a29a2efb16102808201527f077cd8ba816fe7260bd49a4105586fbbdcb7135774670340655ffc9f3cfc952d6102a08201527f2530c2a9594cbb58671fa3208e4cba4fab89316fde6c3fe54eb26e28f017ae086102c08201527f027bf8ac6045165c3080ced1a885f88e36f83e1ec80aac0580dad6a93ac1424a6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610ab86000840135610312565b610ac56020840135610312565b610ad26040840135610312565b610adf6060840135610312565b610aec6080840135610312565b610af960a0840135610312565b610b0660c0840135610312565b610b1360e0840135610312565b610b21610100840135610312565b610b2f610120840135610312565b610b3d610140840135610312565b610b4b610160840135610312565b610b59610180840135610312565b610b66818486888a6103b1565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf55760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610c28918a919082019060c0830190610100840190600401611ac4565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190611aa2565b610ca55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bec565b610cb3610100870135610283565b610cff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bec565b6000610d128761010001600160046110a2565b90506003604051610d239190611b5b565b604051809103902081604051602001610d3c9190611bd1565b6040516020818303038152906040528051906020012014610d9f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bec565b610dbb6006610db58961010001600460066110a2565b9061117d565b9550600454610dd66000610db58a61010001600660086110a2565b610de09190611c03565b945061020087013593506102208701359250610e00610240880135611353565b5093959294919350916102609091013590565b610e1b610ff8565b600455565b60038054610e2d90611b27565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5990611b27565b8015610ea65780601f10610e7b57610100808354040283529160200191610ea6565b820191906000526020600020905b815481529060010190602001808311610e8957829003601f168201915b505050505081565b606060038054610ebd90611b27565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee990611b27565b8015610f365780601f10610f0b57610100808354040283529160200191610f36565b820191906000526020600020905b815481529060010190602001808311610f1957829003601f168201915b5050505050905090565b610f48610ff8565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f72610ff8565b6001600160a01b038116610fd75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bec565b61034381611052565b610fe8610ff8565b6003610ff48282611c65565b5050565b6000546001600160a01b031633146103095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bec565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110b08484611d25565b60ff1667ffffffffffffffff8111156110cb576110cb6119db565b6040519080825280602002602001820160405280156110f4578160200160208202803683370190505b50905060ff84165b8360ff16811015611159578581600c811061111957611119611b11565b60200201358261112c60ff881684611d3e565b8151811061113c5761113c611b11565b60209081029190910101528061115181611d51565b9150506110fc565b506111746007825161116b9190611d6a565b82906007611467565b95945050505050565b600082818080805b84518110156112cd57603060f81b8582815181106111a5576111a5611b11565b01602001516001600160f81b031916108015906111e65750603960f81b8582815181106111d4576111d4611b11565b01602001516001600160f81b03191611155b156112295760308582815181106111ff576111ff611b11565b0160200151611211919060f81c611d3e565b61121c85600a611d6a565b6112269190611c03565b93505b811561123d578261123981611d51565b9350505b84818151811061124f5761124f611b11565b01602001516001600160f81b031916601760f91b036112bb5781156112b65760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bec565b600191505b806112c581611d51565b915050611185565b50858211156113295760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bec565b6113338287611d3e565b61133e90600a611e65565b6113489084611d6a565b979650505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa15801561139c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c09190611aa2565b1561140d5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bec565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561145357600080fd5b505af11580156103aa573d6000803e3d6000fd5b60606000808386516114799190611d6a565b67ffffffffffffffff811115611491576114916119db565b6040519080825280601f01601f1916602001820160405280156114bb576020820181803683370190505b5090506000805b87518161ffff161015611672576000888261ffff16815181106114e7576114e7611b11565b6020026020010151905060008767ffffffffffffffff81111561150c5761150c6119db565b604051908082528060200260200182016040528015611535578160200160208202803683370190505b50905060005b888110156115875761154e816008611d6a565b83901c82828151811061156357611563611b11565b60ff909216602092830291909101909101528061157f81611d51565b91505061153b565b5060005b8881101561165c5760008282815181106115a7576115a7611b11565b602002602001015160ff1690508060001461161f578060f81b8787815181106115d2576115d2611b11565b60200101906001600160f81b031916908160001a905350856115f381611d51565b96506116029050600289611e71565b60ff1660000361161a57611617600189611ea1565b97505b611642565b61162a600289611e71565b60ff166001036116425761163f600189611ea1565b97505b5060089290921c918061165481611d51565b91505061158b565b505050808061166a90611eba565b9150506114c2565b5060018360ff1610156117135760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bec565b858111156117815760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bec565b600061178c83611798565b98975050505050505050565b8051606090829060005b82518110156117ed578281815181106117bd576117bd611b11565b01602001516001600160f81b0319166000036117db578091506117ed565b806117e581611d51565b9150506117a2565b5060008167ffffffffffffffff811115611809576118096119db565b6040519080825280601f01601f191660200182016040528015611833576020820181803683370190505b50905060005b828110156118995783818151811061185357611853611b11565b602001015160f81c60f81b82828151811061187057611870611b11565b60200101906001600160f81b031916908160001a9053508061189181611d51565b915050611839565b50949350505050565b6000602082840312156118b457600080fd5b5035919050565b80604081018310156102f157600080fd5b6000806000806102808086880312156118e457600080fd5b6118ee87876118bb565b945060c086018781111561190157600080fd5b60408701945061191188826118bb565b93505086818701111561192357600080fd5b50929591945092610100019150565b6000610280828403121561194557600080fd5b50919050565b60005b8381101561196657818101518382015260200161194e565b50506000910152565b602081526000825180602084015261198e81604085016020870161194b565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034357600080fd5b6000602082840312156119c957600080fd5b81356119d4816119a2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a0357600080fd5b813567ffffffffffffffff80821115611a1b57600080fd5b818401915084601f830112611a2f57600080fd5b813581811115611a4157611a416119db565b604051601f8201601f19908116603f01168101908382118183101715611a6957611a696119db565b81604052828152876020848701011115611a8257600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611ab457600080fd5b815180151581146119d457600080fd5b61028081016040808784378083018660005b6002811015611af357838284379183019190830190600101611ad6565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611b3b57607f821691505b60208210810361194557634e487b7160e01b600052602260045260246000fd5b6000808354611b6981611b27565b60018281168015611b815760018114611b9657611bc5565b60ff1984168752821515830287019450611bc5565b8760005260208060002060005b85811015611bbc5781548a820152908401908201611ba3565b50505082870194505b50929695505050505050565b60008251611be381846020870161194b565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102f1576102f1611bed565b601f821115611c6057600081815260208120601f850160051c81016020861015611c3d5750805b601f850160051c820191505b81811015611c5c57828155600101611c49565b5050505b505050565b815167ffffffffffffffff811115611c7f57611c7f6119db565b611c9381611c8d8454611b27565b84611c16565b602080601f831160018114611cc85760008415611cb05750858301515b600019600386901b1c1916600185901b178555611c5c565b600085815260208120601f198616915b82811015611cf757888601518255948401946001909101908401611cd8565b5085821015611d155787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102f1576102f1611bed565b818103818111156102f1576102f1611bed565b600060018201611d6357611d63611bed565b5060010190565b80820281158282048414176102f1576102f1611bed565b600181815b80851115611dbc578160001904821115611da257611da2611bed565b80851615611daf57918102915b93841c9390800290611d86565b509250929050565b600082611dd3575060016102f1565b81611de0575060006102f1565b8160018114611df65760028114611e0057611e1c565b60019150506102f1565b60ff841115611e1157611e11611bed565b50506001821b6102f1565b5060208310610133831016604e8410600b8410161715611e3f575081810a6102f1565b611e498383611d81565b8060001904821115611e5d57611e5d611bed565b029392505050565b60006119d48383611dc4565b600060ff831680611e9257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102f1576102f1611bed565b600061ffff808316818103611ed157611ed1611bed565b600101939250505056fea2646970667358221220f566f3c59bb9f6a6dc29825daf532de86ba70f707686bfe1e901174ed37cbdab64736f6c63430008120033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063b2a3fda411610097578063d0b71f9911610066578063d0b71f9914610241578063dbac582114610254578063f2fde38b1461025d578063f6c7226b1461027057600080fd5b8063b2a3fda4146101fe578063b870676c14610211578063c0d05fed14610224578063ced1e9781461023957600080fd5b80638cbac0fa116100d35780638cbac0fa1461018c5780638da5cb5b1461019f5780638fe0ab8e146101b0578063a8ef333f146101eb57600080fd5b806315d276e11461010557806319d09152146101495780633d0c9cc41461016c578063715018a614610182575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61015c6101573660046118a2565b610283565b6040519015158152602001610140565b610174600781565b604051908152602001610140565b61018a6102f7565b005b61015c61019a3660046118cc565b61030b565b6000546001600160a01b031661012c565b6101c36101be366004611932565b610b72565b604080519586526020860194909452928401919091526060830152608082015260a001610140565b60015461012c906001600160a01b031681565b61018a61020c3660046118a2565b610e13565b60025461012c906001600160a01b031681565b61022c610e20565b604051610140919061196f565b61022c610eae565b61018a61024f3660046119b7565b610f40565b61017460045481565b61018a61026b3660046119b7565b610f6a565b61018a61027e3660046119f1565b610fe0565b600154604051630ce848a960e11b8152600481018390526000916001600160a01b0316906319d0915290602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190611aa2565b92915050565b6102ff610ff8565b6103096000611052565b565b6000610aa0565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478110610343576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa915081610379576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806103aa576000805260206000f35b5050505050565b7f0182d4fc0f939f1912ce4c8cef181e3c502bbbbe1ba8755babb7e5c3af2d734c85527f2944b4683ec8b70be366dddf86945e3c3b1d34b3d504eb6649c387fac8a7c36c60208601526000608086018661044e87357f260eb07d3eb99d832e55fa3f1f4b05cfcf80427e26e02abb7415d2ba28d8195b7f0d2bd1d76b7657184ec3c3a0439909a68a1a4d3c832d1392f454c98a9298403d84610346565b61049e60208801357f11ef143a246a3a72d6fda7677609e2b84ca0e598b72e5df839ef881e301796da7f0bacb5ab1dc08f4ae8518e6153caf7990e200a146f72597a2b6ccf0e91b18a8984610346565b6104ed60408801357f092b8fef5bc67b9734050d968c7f9289d8d08956da77239871fd0d1f4e2011af7e642b3df77deb8ce73ba647a30b1ef43952d85418fd4ecc33a5c973fd30ab1084610346565b61053d60608801357f21bb8189b64e32ebe2f01610695f2349f2fb4e01a6a04f219dd1e14373ec90227f0f83472ff21a011f79a807b170bcfaa3f373ce0479ccf882fd663a9bb0e834ec84610346565b61058d60808801357f068021f51f6823a9efe9be7f216512f805f9764e71e046ad5603cb21572c0d307f22f883f75f39cd247a4cd5f599a3e49cabd7842c6544ca25d8b1802ee969473884610346565b6105dd60a08801357f07dced99a1040fb280e8910681f563479c99ee30264ced7daa3c715065a6c0ad7f13877d5b7a693fb419c360430fd345f8ddcdffcc414b2d68b43355785f600d2a84610346565b61062d60c08801357f0f86e0d9fa941e6dba0ee2e8522ee1a4b2c16b55d5e6e61d6d4c925066731e4f7f1604a049b532eb7b479ab94d194134b2b20fad7b923d356b12c8f6013fd416f384610346565b61067d60e08801357f131c1dead755f8f821ac503300e565f720a9ee30bfd5654546beac47806199687f1225284a5cb9cfc0d88712834c57165b04d59d6fc1013302f051f0a223a7ec4b84610346565b6106ce6101008801357f23e89705b334e5f1a510cf866cdfbeaed0d1be98438964e893e4dbba1c3bda1e7f1b6ac8e843540c476c75cfe9f789e564a087e1d1ee2f6c8a90b870ef3178dd1584610346565b61071f6101208801357f1fabd11e7ea9505077394b319dce69b044c5b8e41448f45c0e49509f8c3274557f17d6f05d6a0b6644e605a70468b7f569cd5f173d157132555b2e8f5cd454706784610346565b61076f6101408801357f242b36bd22a7175983c14ab9e91c25ab2fe6467632f26716b7548dc114b953f77e15826e501b505d3a54a26536e2f6a00cf25221c517b6bf69d829a7e84e893f84610346565b6107c06101608801357f0c6da889f98691d3973cb5f68ba738045186f1327c7e9d1edb715f925c0b977b7f0934876403c615f66f720c061d95869e9553ca93f131c18c2d9dc03dbc67a0a184610346565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08201527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08201527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008201527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208201527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408201527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f28857fdbd6f69280f9a0aff6d111687d604e8ca8715d3b129189624a29a2efb16102808201527f077cd8ba816fe7260bd49a4105586fbbdcb7135774670340655ffc9f3cfc952d6102a08201527f2530c2a9594cbb58671fa3208e4cba4fab89316fde6c3fe54eb26e28f017ae086102c08201527f027bf8ac6045165c3080ced1a885f88e36f83e1ec80aac0580dad6a93ac1424a6102e08201526020816103008360086107d05a03fa9051169695505050505050565b6040516103808101604052610ab86000840135610312565b610ac56020840135610312565b610ad26040840135610312565b610adf6060840135610312565b610aec6080840135610312565b610af960a0840135610312565b610b0660c0840135610312565b610b1360e0840135610312565b610b21610100840135610312565b610b2f610120840135610312565b610b3d610140840135610312565b610b4b610160840135610312565b610b59610180840135610312565b610b66818486888a6103b1565b90508060005260206000f35b600080808080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf55760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792052616d702063616e2063616c6c20746869732066756e6374696f6e60448201526064015b60405180910390fd5b6040805163465d607d60e11b81523091638cbac0fa91610c28918a919082019060c0830190610100840190600401611ac4565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190611aa2565b610ca55760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210283937b7b360991b6044820152606401610bec565b610cb3610100870135610283565b610cff5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206d61696c736572766572206b6579206861736800000000006044820152606401610bec565b6000610d128761010001600160046110a2565b90506003604051610d239190611b5b565b604051809103902081604051602001610d3c9190611bd1565b6040516020818303038152906040528051906020012014610d9f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420656d61696c2066726f6d20616464726573730000000000006044820152606401610bec565b610dbb6006610db58961010001600460066110a2565b9061117d565b9550600454610dd66000610db58a61010001600660086110a2565b610de09190611c03565b945061020087013593506102208701359250610e00610240880135611353565b5093959294919350916102609091013590565b610e1b610ff8565b600455565b60038054610e2d90611b27565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5990611b27565b8015610ea65780601f10610e7b57610100808354040283529160200191610ea6565b820191906000526020600020905b815481529060010190602001808311610e8957829003601f168201915b505050505081565b606060038054610ebd90611b27565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee990611b27565b8015610f365780601f10610f0b57610100808354040283529160200191610f36565b820191906000526020600020905b815481529060010190602001808311610f1957829003601f168201915b5050505050905090565b610f48610ff8565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f72610ff8565b6001600160a01b038116610fd75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bec565b61034381611052565b610fe8610ff8565b6003610ff48282611c65565b5050565b6000546001600160a01b031633146103095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bec565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006110b08484611d25565b60ff1667ffffffffffffffff8111156110cb576110cb6119db565b6040519080825280602002602001820160405280156110f4578160200160208202803683370190505b50905060ff84165b8360ff16811015611159578581600c811061111957611119611b11565b60200201358261112c60ff881684611d3e565b8151811061113c5761113c611b11565b60209081029190910101528061115181611d51565b9150506110fc565b506111746007825161116b9190611d6a565b82906007611467565b95945050505050565b600082818080805b84518110156112cd57603060f81b8582815181106111a5576111a5611b11565b01602001516001600160f81b031916108015906111e65750603960f81b8582815181106111d4576111d4611b11565b01602001516001600160f81b03191611155b156112295760308582815181106111ff576111ff611b11565b0160200151611211919060f81c611d3e565b61121c85600a611d6a565b6112269190611c03565b93505b811561123d578261123981611d51565b9350505b84818151811061124f5761124f611b11565b01602001516001600160f81b031916601760f91b036112bb5781156112b65760405162461bcd60e51b815260206004820152601c60248201527f537472696e6720686173206d756c7469706c6520646563696d616c73000000006044820152606401610bec565b600191505b806112c581611d51565b915050611185565b50858211156113295760405162461bcd60e51b815260206004820152602260248201527f537472696e672068617320746f6f206d616e7920646563696d616c20706c6163604482015261657360f01b6064820152608401610bec565b6113338287611d3e565b61133e90600a611e65565b6113489084611d6a565b979650505050505050565b60025460405163169394bb60e01b8152600481018390526001600160a01b039091169063169394bb90602401602060405180830381865afa15801561139c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c09190611aa2565b1561140d5760405162461bcd60e51b815260206004820152601f60248201527f4e756c6c69666965722068617320616c7265616479206265656e2075736564006044820152606401610bec565b600254604051632dea6f9960e11b8152600481018390526001600160a01b0390911690635bd4df3290602401600060405180830381600087803b15801561145357600080fd5b505af11580156103aa573d6000803e3d6000fd5b60606000808386516114799190611d6a565b67ffffffffffffffff811115611491576114916119db565b6040519080825280601f01601f1916602001820160405280156114bb576020820181803683370190505b5090506000805b87518161ffff161015611672576000888261ffff16815181106114e7576114e7611b11565b6020026020010151905060008767ffffffffffffffff81111561150c5761150c6119db565b604051908082528060200260200182016040528015611535578160200160208202803683370190505b50905060005b888110156115875761154e816008611d6a565b83901c82828151811061156357611563611b11565b60ff909216602092830291909101909101528061157f81611d51565b91505061153b565b5060005b8881101561165c5760008282815181106115a7576115a7611b11565b602002602001015160ff1690508060001461161f578060f81b8787815181106115d2576115d2611b11565b60200101906001600160f81b031916908160001a905350856115f381611d51565b96506116029050600289611e71565b60ff1660000361161a57611617600189611ea1565b97505b611642565b61162a600289611e71565b60ff166001036116425761163f600189611ea1565b97505b5060089290921c918061165481611d51565b91505061158b565b505050808061166a90611eba565b9150506114c2565b5060018360ff1610156117135760405162461bcd60e51b815260206004820152605760248201527f4e6f207061636b656420627974657320666f756e642120496e76616c6964206660448201527f696e616c207374617465206f66207061636b656420627974657320696e20656d60648201527f61696c3b2076616c7565206973206c696b656c79203021000000000000000000608482015260a401610bec565b858111156117815760405162461bcd60e51b815260206004820152603560248201527f5061636b6564206279746573206d6f7265207468616e20616c6c6f776564206d6044820152746178206e756d626572206f66207369676e616c732160581b6064820152608401610bec565b600061178c83611798565b98975050505050505050565b8051606090829060005b82518110156117ed578281815181106117bd576117bd611b11565b01602001516001600160f81b0319166000036117db578091506117ed565b806117e581611d51565b9150506117a2565b5060008167ffffffffffffffff811115611809576118096119db565b6040519080825280601f01601f191660200182016040528015611833576020820181803683370190505b50905060005b828110156118995783818151811061185357611853611b11565b602001015160f81c60f81b82828151811061187057611870611b11565b60200101906001600160f81b031916908160001a9053508061189181611d51565b915050611839565b50949350505050565b6000602082840312156118b457600080fd5b5035919050565b80604081018310156102f157600080fd5b6000806000806102808086880312156118e457600080fd5b6118ee87876118bb565b945060c086018781111561190157600080fd5b60408701945061191188826118bb565b93505086818701111561192357600080fd5b50929591945092610100019150565b6000610280828403121561194557600080fd5b50919050565b60005b8381101561196657818101518382015260200161194e565b50506000910152565b602081526000825180602084015261198e81604085016020870161194b565b601f01601f19169190910160400192915050565b6001600160a01b038116811461034357600080fd5b6000602082840312156119c957600080fd5b81356119d4816119a2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a0357600080fd5b813567ffffffffffffffff80821115611a1b57600080fd5b818401915084601f830112611a2f57600080fd5b813581811115611a4157611a416119db565b604051601f8201601f19908116603f01168101908382118183101715611a6957611a696119db565b81604052828152876020848701011115611a8257600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215611ab457600080fd5b815180151581146119d457600080fd5b61028081016040808784378083018660005b6002811015611af357838284379183019190830190600101611ad6565b505050808560c0850137506101808361010084013795945050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611b3b57607f821691505b60208210810361194557634e487b7160e01b600052602260045260246000fd5b6000808354611b6981611b27565b60018281168015611b815760018114611b9657611bc5565b60ff1984168752821515830287019450611bc5565b8760005260208060002060005b85811015611bbc5781548a820152908401908201611ba3565b50505082870194505b50929695505050505050565b60008251611be381846020870161194b565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102f1576102f1611bed565b601f821115611c6057600081815260208120601f850160051c81016020861015611c3d5750805b601f850160051c820191505b81811015611c5c57828155600101611c49565b5050505b505050565b815167ffffffffffffffff811115611c7f57611c7f6119db565b611c9381611c8d8454611b27565b84611c16565b602080601f831160018114611cc85760008415611cb05750858301515b600019600386901b1c1916600185901b178555611c5c565b600085815260208120601f198616915b82811015611cf757888601518255948401946001909101908401611cd8565b5085821015611d155787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff82811682821603908111156102f1576102f1611bed565b818103818111156102f1576102f1611bed565b600060018201611d6357611d63611bed565b5060010190565b80820281158282048414176102f1576102f1611bed565b600181815b80851115611dbc578160001904821115611da257611da2611bed565b80851615611daf57918102915b93841c9390800290611d86565b509250929050565b600082611dd3575060016102f1565b81611de0575060006102f1565b8160018114611df65760028114611e0057611e1c565b60019150506102f1565b60ff841115611e1157611e11611bed565b50506001821b6102f1565b5060208310610133831016604e8410600b8410161715611e3f575081810a6102f1565b611e498383611d81565b8060001904821115611e5d57611e5d611bed565b029392505050565b60006119d48383611dc4565b600060ff831680611e9257634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b60ff81811683821601908111156102f1576102f1611bed565b600061ffff808316818103611ed157611ed1611bed565b600101939250505056fea2646970667358221220f566f3c59bb9f6a6dc29825daf532de86ba70f707686bfe1e901174ed37cbdab64736f6c63430008120033\",\n  \"devdoc\": {\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"owner()\": {\n        \"details\": \"Returns the address of the current owner.\"\n      },\n      \"renounceOwnership()\": {\n        \"details\": \"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"\n      },\n      \"setEmailFromAddress(string)\": {\n        \"params\": {\n          \"_emailFromAddress\": \"The from email address for validated emails, MUST BE PROPERLY PADDED\"\n        }\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"params\": {\n          \"_timestampBuffer\": \"The timestamp buffer for validated emails\"\n        }\n      },\n      \"transferOwnership(address)\": {\n        \"details\": \"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"setEmailFromAddress(string)\": {\n        \"notice\": \"ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\"\n      },\n      \"setTimestampBuffer(uint256)\": {\n        \"notice\": \"ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2 timestamps.\"\n      }\n    },\n    \"version\": 1\n  },\n  \"storageLayout\": {\n    \"storage\": [\n      {\n        \"astId\": 7,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"_owner\",\n        \"offset\": 0,\n        \"slot\": \"0\",\n        \"type\": \"t_address\"\n      },\n      {\n        \"astId\": 3356,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"mailServerKeyHashAdapter\",\n        \"offset\": 0,\n        \"slot\": \"1\",\n        \"type\": \"t_contract(IKeyHashAdapterV2)3530\"\n      },\n      {\n        \"astId\": 3359,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"nullifierRegistry\",\n        \"offset\": 0,\n        \"slot\": \"2\",\n        \"type\": \"t_contract(INullifierRegistry)3735\"\n      },\n      {\n        \"astId\": 3361,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"emailFromAddress\",\n        \"offset\": 0,\n        \"slot\": \"3\",\n        \"type\": \"t_bytes_storage\"\n      },\n      {\n        \"astId\": 3363,\n        \"contract\": \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol:VenmoSendProcessorV2\",\n        \"label\": \"timestampBuffer\",\n        \"offset\": 0,\n        \"slot\": \"4\",\n        \"type\": \"t_uint256\"\n      }\n    ],\n    \"types\": {\n      \"t_address\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"address\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_bytes_storage\": {\n        \"encoding\": \"bytes\",\n        \"label\": \"bytes\",\n        \"numberOfBytes\": \"32\"\n      },\n      \"t_contract(IKeyHashAdapterV2)3530\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract IKeyHashAdapterV2\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_contract(INullifierRegistry)3735\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"contract INullifierRegistry\",\n        \"numberOfBytes\": \"20\"\n      },\n      \"t_uint256\": {\n        \"encoding\": \"inplace\",\n        \"label\": \"uint256\",\n        \"numberOfBytes\": \"32\"\n      }\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/17fa5544cf874024d623cdbb27eac115.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 9394740747776187241597029104953484261679012526425116554159524966233999111263;\\n    uint256 constant IC0y = 19689273204164097728177651836883812205170784316328518073257553118356569721529;\\n    \\n    uint256 constant IC1x = 2103298983762510908301138293943056608631520025630826390321569873465337843612;\\n    uint256 constant IC1y = 3051671505392171758204845789745109750013350293754815803257290082249002704162;\\n    \\n    uint256 constant IC2x = 16449197615353463639054592956247688316837441704346035760206288894539930814077;\\n    uint256 constant IC2y = 6335892290253569886213727820048151796384993861106408353434365713962828062536;\\n    \\n    uint256 constant IC3x = 13909339620076649767883466299398757372347682133758066729503408416549131081314;\\n    uint256 constant IC3y = 680939940507125217800291279675392811201474158796517777404806360441256992511;\\n    \\n    uint256 constant IC4x = 5567565339001906931154550109868824777928665956120696988986942291349201008482;\\n    uint256 constant IC4y = 14182369860111175092039963088428935808239168726019022822913308258774428350169;\\n    \\n    uint256 constant IC5x = 4528931757641575110352830627683078786226227744379836276335458021091600396184;\\n    uint256 constant IC5y = 18809760409635068499937315446477117440887658318231718225159843539196113242397;\\n    \\n    uint256 constant IC6x = 217249737022013148790853614054515288744843070463361996227143243753146454558;\\n    uint256 constant IC6y = 5843595604928112686285135260361410764846211093271852947892142733907981483475;\\n    \\n    uint256 constant IC7x = 16382783349015794414606292731397855206031202794459940530289465235845935294599;\\n    uint256 constant IC7y = 8313689883004195951872015712057362672054743656979611883792351037811710281664;\\n    \\n    uint256 constant IC8x = 12091879935696046645654533776196374113414754479661743359672798704639476620661;\\n    uint256 constant IC8y = 13607368754408928105528637625253051479212460464623135888354013366424189726618;\\n    \\n    uint256 constant IC9x = 1427687473863783182488178317364745261019085244973035264375279293174848549312;\\n    uint256 constant IC9y = 7042084296523600520065911790797906589532524342562812887761489075993835181146;\\n    \\n    uint256 constant IC10x = 19579875689027874433809077324776940508857197381913748776343129158527029914029;\\n    uint256 constant IC10y = 11360688967181958431013518844967411744837522897538508687548664595854123094206;\\n    \\n    uint256 constant IC11x = 15489617821697871842044770938846172737438163666835784991442660969573132279238;\\n    uint256 constant IC11y = 9208709180384759640941195473336890577882300724746282442631899048305657377731;\\n    \\n    uint256 constant IC12x = 12219340695113383303094720678815419311566874168360126633878210542379865206498;\\n    uint256 constant IC12y = 19748310142198112801532265275227626809399838784073257383942928475531551524126;\\n    \\n    uint256 constant IC13x = 9809600841880559730361608794352502078553304084649850859459331073975327390409;\\n    uint256 constant IC13y = 11320259074840511785906545984642922355663228703151484107043641197226422843416;\\n    \\n    uint256 constant IC14x = 16059817887658775120436765365711045350150793283463695196041726740989539679801;\\n    uint256 constant IC14y = 4842923321162840856934661309117966577909319066986869353905580462534729375402;\\n    \\n    uint256 constant IC15x = 12339372070549065744144308230683430247880602184204850330715911885647781887335;\\n    uint256 constant IC15y = 18316443093151957129338732113138820850818943232578658491484809647188395368957;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 10075444819728828528059511311364183377585011636666347250599008316664107494584;\\n    uint256 constant deltax2 = 19327888262652149651858559507688929247845982563456569545298956783712290831031;\\n    uint256 constant deltay1 = 19352801460895629485256782282819819495690526597376096989389923034283130776118;\\n    uint256 constant deltay2 = 11668517376357679640486892005206332407941243522830734898219813555969756490527;\\n\\n    \\n    uint256 constant IC0x = 4244199450261939264855608361292422830494076317114087381524682052624987594898;\\n    uint256 constant IC0y = 19645046663091251713731947178298410964505911169469312617571077810087266152857;\\n    \\n    uint256 constant IC1x = 8174035567318043885708495283345132428559378659325609203776402978017320167293;\\n    uint256 constant IC1y = 14468913963303826866215469807518170784403093656434266017779773880257875040240;\\n    \\n    uint256 constant IC2x = 1616603017751755006393562987905285502270823546542543926944627007410237341389;\\n    uint256 constant IC2y = 19363001402611389684892375352655759926342431445082754246958964085276938403807;\\n    \\n    uint256 constant IC3x = 18206398417831844023515176703806764449138507779128726420915001707110434960674;\\n    uint256 constant IC3y = 15788322487150289973315668363845259348952014356217153206401112660482394149984;\\n    \\n    uint256 constant IC4x = 5556506419684194840114638678281266193177223336781663103282498332205775709966;\\n    uint256 constant IC4y = 3612832929973582572292953270578481883198123808328242543078950263985599193867;\\n    \\n    uint256 constant IC5x = 12215062759329544988171802286780059092087193981868301475398051148747302789508;\\n    uint256 constant IC5y = 1980305058569746313443850675062124742589110071159814897086099250727381686120;\\n    \\n    uint256 constant IC6x = 3493933421620238986193524740698678015926658911199434587596433896655331481231;\\n    uint256 constant IC6y = 7459045126206245262756783739697871731196375298112634212173672404853831309786;\\n    \\n    uint256 constant IC7x = 10740551677743158382441062386501298848646053145865823442847610791968594528289;\\n    uint256 constant IC7y = 21657167241153225314135589387079002708587418842864077521693977210968021048721;\\n    \\n    uint256 constant IC8x = 20536476234797263831643189740064053117160337195791856385892992834482370287512;\\n    uint256 constant IC8y = 18258699057873865588245369435578918571756469704183085011165098139074862434543;\\n    \\n    uint256 constant IC9x = 18293662353150822330749373485066335943093182919888710919053977794688677443843;\\n    uint256 constant IC9y = 3365197130606871938439382259561012622230793791152518122576869893531830020051;\\n    \\n    uint256 constant IC10x = 10464268927660994961936771610761322397633069758803976833400107641287034964420;\\n    uint256 constant IC10y = 15896600235017903857295002971756639107391153447838560723402307560050234141111;\\n    \\n    uint256 constant IC11x = 19786751484513045884347111989063082084450406057425687794673931698452346081044;\\n    uint256 constant IC11y = 5313251178585910055977156446218999699936391470697302222575669547157687947710;\\n    \\n    uint256 constant IC12x = 1684055055646723719894355280156760702291183222236626601663480311877006377437;\\n    uint256 constant IC12y = 14613128874599604159663378872994588938053027721510091765805321127316501622056;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/3d00f158650f73562ebab290bf8faab9.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/8bc81ff8830ebb82cab81dfebf9e965a.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _signer\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _signer.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistry {\\n    function getAccountId(address _account) external view returns (bytes32);\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n        uint256 notaryKeyHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"../interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessorMock is IRevolutAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId)\\n    {\\n        return bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutSendProcessor } from \\\"../interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessorMock is IRevolutSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 revolutTagHash,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            keccak256(abi.encodePacked(_proof.public_values.recipientId)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId)),\\n            bytes32(_proof.public_values.notaryKeyHash)\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    event NotaryKeyHashSet(bytes32 _notaryKeyHash);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    bytes32 public notaryKeyHash;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n        notaryKeyHash = _notaryKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    function setNotaryKeyHash(bytes32 _notaryKeyHash) external onlyOwner {\\n        notaryKeyHash = _notaryKeyHash;\\n\\n        emit NotaryKeyHashSet(_notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        require(bytes32(_publicValues.notaryKeyHash) == notaryKeyHash, \\\"Invalid notary key hash\\\");\\n\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress,\\n            _publicValues.notaryKeyHash\\n        );\\n\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to hash of original Rev Tag\\n                                                                                // resulting hash is the accountId for our system\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender] == bytes32(0), \\\"Account already associated with accountId\\\");\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender] = accountId;\\n\\n        emit AccountRegistered(msg.sender, accountId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender];\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender];\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account];\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Revolut account. We nullify this accountId along with the calling address so that\\n     * it can't be used again.\\n     */\\n    function _verifyRegistrationProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns (bytes32 accountId)\\n    {\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string revolutTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        bytes32 notaryKeyHash;              // Hash of notary's public key\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's accountId, this ID is a hash of the user's original Rev Tag \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId, this ID is a hash of the user's original Rev Tag\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Revolut\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistry _accountRegistry,\\n        IRevolutSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     * @param _notaryKeyHash        Hash of the notary public key that is required to do notarization\\n     */\\n    function offRamp(\\n        string calldata _revolutTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey,\\n        bytes32 _notaryKeyHash\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 offRamperId = accountRegistry.getAccountId(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[offRamperId];\\n\\n        require(keccak256(abi.encode(_revolutTag)) == offRamperId, \\\"Revolut tag must match id\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            revolutTag: _revolutTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey,\\n            notaryKeyHash: _notaryKeyHash\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, offRamperId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IRevolutSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IRevolutSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        ) = sendProcessor.processProof(\\n            IRevolutSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(notaryKeyHash == deposit.notaryKeyHash, \\\"Incorrect notary used for notarization\\\");\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"COMPLETED\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IRevolutSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId,\\n            bytes32 notaryKeyHash\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.transferId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Revolut\\\", _proof.public_values.transferId)));\\n\\n        amount = _parseAmount(_proof.public_values.amount);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n        notaryKeyHash = bytes32(_proof.public_values.notaryKeyHash);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash,\\n            _publicValues.notaryKeyHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\n        // For send transactions, the amount is prefixed with a '-' character, if the character doesn't exist then\\n        // it would be a receive transaction\\n        require(bytes(amount)[0] == 0x2D, \\\"Not a send transaction\\\");   \\n        return amount.stringToUint(6);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string wiseTagHash;\\n        address userAddress;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistry {\\n\\n    // Each Account is tied to a Wise ID and is represented by an Ethereum address.\\n    struct AccountInfo {\\n        bytes32 accountId;                  // User's Wise account ID\\n        bytes32 offRampId;                  // Multi-currency account ID to receive funds\\n        bytes32 wiseTagHash;                // Hash of user's wise tag account stored on register. Used to verify offramper's wise tag\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory);\\n    function getAccountId(address _account) external view returns (bytes32);\\n\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    \\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseOffRamperRegistrationProcessor {\\n\\n    struct OffRamperRegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string mcAccountId;\\n    }\\n\\n    struct OffRamperRegistrationProof {\\n        OffRamperRegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string senderId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"../interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessorMock is IWiseAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.wiseTagHash.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseOffRamperRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"../interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessorMock is IWiseOffRamperRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n       OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.mcAccountId.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseSendProcessor } from \\\"../interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessorMock is IWiseSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 currencyId\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            bytes32(_proof.public_values.recipientId.stringToUint(0)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessor is IWiseAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        wiseTagHash = bytes32(_proof.public_values.wiseTagHash.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.wiseTagHash,\\n            _publicValues.userAddress\\n        );\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistry is IWiseAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed wiseTagHash);\\n    event OffRamperRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed offRampId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n    event NewOffRamperRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IWiseAccountRegistrationProcessor public accountRegistrationProcessor;      // Address of Account registration processor contract\\n    IWiseOffRamperRegistrationProcessor public offRamperRegistrationProcessor;  // Address of Off-ramper registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => AccountInfo) internal accounts;                          // Mapping of Ethereum accounts to their account information (IDs and deposits)\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     * @param _offRamperRegistrationProcessor   Off-ramper Registration processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistrationProcessor _accountRegistrationProcessor,\\n        IWiseOffRamperRegistrationProcessor _offRamperRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n        offRamperRegistrationProcessor = _offRamperRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender].accountId == bytes32(0), \\\"Account already associated with accountId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 wiseTagHash\\n        ) = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender].accountId = accountId;\\n        accounts[msg.sender].wiseTagHash = wiseTagHash;\\n\\n        emit AccountRegistered(msg.sender, accountId, wiseTagHash);\\n    }\\n\\n    /**\\n     * @notice Registers an account for off-ramping by pulling the multi-currency account id from the proof and assigning\\n     * the account owner to the sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function registerAsOffRamper(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].offRampId == bytes32(0), \\\"Account already associated with offRampId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 offRampId\\n        ) = _verifyOffRamperRegistrationProof(_proof);\\n\\n        accounts[msg.sender].offRampId = offRampId;\\n\\n        emit OffRamperRegistered(msg.sender, accountId, offRampId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].accountId;\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].accountId;\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IWiseAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the off ramper registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setOffRamperRegistrationProcessor(IWiseOffRamperRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        offRamperRegistrationProcessor = _registrationProcessor;\\n        emit NewOffRamperRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account].accountId;\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 wiseTagHash)\\n    {\\n        (\\n            accountId,\\n            wiseTagHash\\n        ) = accountRegistrationProcessor.processProof(_proof);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyOffRamperRegistrationProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 offRampId)\\n    {\\n        (\\n            accountId,\\n            offRampId\\n        ) = offRamperRegistrationProcessor.processProof(_proof);\\n\\n        require(accountId == accounts[msg.sender].accountId, \\\"AccountId does not match\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessor is IWiseOffRamperRegistrationProcessor, TLSBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 offRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint.replaceString(\\\"*\\\", _proof.public_values.profileId), _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        offRampId = bytes32(_proof.public_values.mcAccountId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(_publicValues.endpoint, _publicValues.host, _publicValues.profileId, _publicValues.mcAccountId);\\n        return _isValidSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string wiseTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Wise currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's offRampId \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Wise account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IWiseAccountRegistry public accountRegistry;                    // Account Registry contract for Wise\\n    IWiseSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Wise\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistry _accountRegistry,\\n        IWiseSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _wiseTag              Depositor's Wise tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     */\\n    function offRamp(\\n        string calldata _wiseTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        IWiseAccountRegistry.AccountInfo memory account = accountRegistry.getAccountInfo(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account.accountId];\\n\\n        require(account.offRampId != bytes32(0), \\\"Must be registered as off ramper\\\");\\n        require(keccak256(abi.encode(_wiseTag)) == account.wiseTagHash, \\\"Wise tag does not match registered wise tag\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            wiseTag: _wiseTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.accountId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Wise\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IWiseSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IWiseSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IWiseSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        ) = sendProcessor.processProof(\\n            IWiseSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accountRegistry.getAccountInfo(deposit.depositor).offRampId == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessor is IWiseSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"OUTGOING_PAYMENT_SENT\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IWiseSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.senderId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Wise\\\", _proof.public_values.transferId)));\\n\\n        amount = _proof.public_values.amount.stringToUint(6);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = bytes32(_proof.public_values.recipientId.stringToUint(0));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.senderId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash\\n        );\\n        return _isValidSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid proof\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/8f4bf7f45c28925cb238117838cfd64c.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/interfaces/IERC1271.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC1271 standard signature validation method for\\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC1271 {\\n    /**\\n     * @dev Should return whether the signature provided is valid for the provided data\\n     * @param hash      Hash of the data to be signed\\n     * @param signature Signature byte array associated with _data\\n     */\\n    function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\")\\n            mstore(0x1c, hash)\\n            message := keccak256(0x00, 0x3c)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(ptr, \\\"\\\\x19\\\\x01\\\")\\n            mstore(add(ptr, 0x02), domainSeparator)\\n            mstore(add(ptr, 0x22), structHash)\\n            data := keccak256(ptr, 0x42)\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Data with intended validator, created from a\\n     * `validator` and `data` according to the version 0 of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x00\\\", validator, data));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/SignatureChecker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\nimport \\\"../../interfaces/IERC1271.sol\\\";\\n\\n/**\\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\\n * Argent and Gnosis Safe.\\n *\\n * _Available since v4.1._\\n */\\nlibrary SignatureChecker {\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\\n     * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\\n        (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature);\\n        return\\n            (error == ECDSA.RecoverError.NoError && recovered == signer) ||\\n            isValidERC1271SignatureNow(signer, hash, signature);\\n    }\\n\\n    /**\\n     * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\\n     * against the signer smart contract using ERC1271.\\n     *\\n     * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\\n     * change through time. It could return true at block N and false at block N+1 (or the opposite).\\n     */\\n    function isValidERC1271SignatureNow(\\n        address signer,\\n        bytes32 hash,\\n        bytes memory signature\\n    ) internal view returns (bool) {\\n        (bool success, bytes memory result) = signer.staticcall(\\n            abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature)\\n        );\\n        return (success &&\\n            result.length >= 32 &&\\n            abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/Math.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n                // The surrounding unchecked block does not change this fact.\\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10 ** 64) {\\n                value /= 10 ** 64;\\n                result += 64;\\n            }\\n            if (value >= 10 ** 32) {\\n                value /= 10 ** 32;\\n                result += 32;\\n            }\\n            if (value >= 10 ** 16) {\\n                value /= 10 ** 16;\\n                result += 16;\\n            }\\n            if (value >= 10 ** 8) {\\n                value /= 10 ** 8;\\n                result += 8;\\n            }\\n            if (value >= 10 ** 4) {\\n                value /= 10 ** 4;\\n                result += 4;\\n            }\\n            if (value >= 10 ** 2) {\\n                value /= 10 ** 2;\\n                result += 2;\\n            }\\n            if (value >= 10 ** 1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/math/SignedMath.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n    /**\\n     * @dev Returns the largest of two signed numbers.\\n     */\\n    function max(int256 a, int256 b) internal pure returns (int256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two signed numbers.\\n     */\\n    function min(int256 a, int256 b) internal pure returns (int256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two signed numbers without overflow.\\n     * The result is rounded towards zero.\\n     */\\n    function average(int256 a, int256 b) internal pure returns (int256) {\\n        // Formula from the book \\\"Hacker's Delight\\\"\\n        int256 x = (a & b) + ((a ^ b) >> 1);\\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\\n    }\\n\\n    /**\\n     * @dev Returns the absolute unsigned value of a signed value.\\n     */\\n    function abs(int256 n) internal pure returns (uint256) {\\n        unchecked {\\n            // must be unchecked in order to support `n = type(int256).min`\\n            return uint256(n >= 0 ? n : -n);\\n        }\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Strings.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(int256 value) internal pure returns (string memory) {\\n        return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n\\n    /**\\n     * @dev Returns true if the two strings are equal.\\n     */\\n    function equal(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(bytes(a)) == keccak256(bytes(b));\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n\\n    function replaceString(\\n        string memory _str,\\n        string memory _lookupValue,\\n        string memory _replaceValue\\n    )\\n        internal\\n        pure\\n        returns (string memory)\\n    {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory lookupBytes = bytes(_lookupValue);\\n\\n        uint256 lookupIndex = indexOf(_str, _lookupValue);\\n        if (lookupIndex == type(uint256).max) {\\n            return _str;\\n        }\\n\\n        // Split the original string into two parts: before and after the keyword\\n        string memory beforeKeyword = substring(_str, 0, lookupIndex);\\n        string memory afterKeyword = substring(_str, lookupIndex + lookupBytes.length, strBytes.length);\\n        \\n        return string.concat(beforeKeyword, _replaceValue, afterKeyword);\\n    }\\n\\n    function indexOf(string memory str, string memory substr) internal pure returns (uint) {\\n        bytes memory strBytes = bytes(str);\\n        bytes memory substrBytes = bytes(substr);\\n        \\n        if (strBytes.length < substrBytes.length) return type(uint256).max;\\n        \\n        for (uint i = 0; i <= strBytes.length - substrBytes.length; i++) {\\n            bool found = true;\\n            for (uint j = 0; j < substrBytes.length; j++) {\\n                if (strBytes[i + j] != substrBytes[j]) {\\n                    found = false;\\n                    break;\\n                }\\n            }\\n            if (found) return i;\\n        }\\n        \\n        return type(uint256).max;\\n    }\\n\\n    function stringComparison(string memory _a, string memory _b) internal pure returns (bool) {\\n        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/TLSBaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract TLSBaseProcessor is Ownable {\\n\\n    using SignatureChecker for address;\\n    using ECDSA for bytes32;\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    string public endpoint;\\n    string public host;\\n\\n    INullifierRegistry public nullifierRegistry;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        endpoint = _endpoint;\\n        host = _host;\\n\\n        nullifierRegistry = _nullifierRegistry;\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated TLS calls. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated TLS calls\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateTLSEndpoint(\\n        string memory _expectedEndpoint,\\n        string memory _passedEndpoint\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedEndpoint)) == keccak256(abi.encode(_passedEndpoint)),\\n            \\\"Endpoint does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateTLSHost(\\n        string memory _expectedHost,\\n        string memory _passedHost\\n    )\\n        internal\\n        pure\\n    {\\n        require(\\n            keccak256(abi.encode(_expectedHost)) == keccak256(abi.encode(_passedHost)),\\n            \\\"Host does not match expected\\\"\\n        );\\n    }\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n\\n    function _isValidVerifierSignature(\\n        bytes memory _message,\\n        bytes memory _signature,\\n        address _verifier\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {\\n        bytes32 verifierPayload = keccak256(_message).toEthSignedMessageHash();\\n\\n        return _verifier.isValidSignatureNow(verifierPayload, _signature);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        address userAddress;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutAccountRegistry {\\n    function getAccountId(address _account) external view returns (bytes32);\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/interfaces/IRevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRevolutSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"../interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessorMock is IRevolutAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId)\\n    {\\n        return bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/mocks/RevolutSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRevolutSendProcessor } from \\\"../interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessorMock is IRevolutSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 revolutTagHash,\\n            bytes32 currencyId\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            keccak256(abi.encodePacked(_proof.public_values.recipientId)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistrationProcessor is IRevolutAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.userAddress\\n        );\\n        return _isValidVerifierSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid signature from verifier\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistrationProcessor } from \\\"./interfaces/IRevolutAccountRegistrationProcessor.sol\\\";\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutAccountRegistry is IRevolutAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IRevolutAccountRegistrationProcessor public accountRegistrationProcessor;   // Address of Account registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => bytes32) internal accounts;                              // Mapping of Ethereum accounts to their Revolut accountId\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistrationProcessor _accountRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender] == bytes32(0), \\\"Account already associated with accountId\\\");\\n        bytes32 accountId = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender] = accountId;\\n\\n        emit AccountRegistered(msg.sender, accountId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender];\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender];\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender];\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IRevolutAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account];\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Revolut account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IRevolutAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns (bytes32 accountId)\\n    {\\n        accountId = accountRegistrationProcessor.processProof(_proof);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IRevolutAccountRegistry } from \\\"./interfaces/IRevolutAccountRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string revolutTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Revolut currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's offRampId \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Revolut account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IRevolutAccountRegistry public accountRegistry;                    // Account Registry contract for Revolut\\n    IRevolutSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Revolut\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IRevolutAccountRegistry _accountRegistry,\\n        IRevolutSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _revolutTag           Depositor's Revolut tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     */\\n    function offRamp(\\n        string calldata _revolutTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 account = accountRegistry.getAccountId(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account];\\n\\n        require(keccak256(abi.encode(_revolutTag)) == account, \\\"Revolut tag must match id\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            revolutTag: _revolutTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Revolut\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IRevolutSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IRevolutSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IRevolutSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        ) = sendProcessor.processProof(\\n            IRevolutSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.revolutTag)) == offRamperId, \\\"Revolut tag does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/revolut/RevolutSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRevolutSendProcessor } from \\\"./interfaces/IRevolutSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract RevolutSendProcessor is IRevolutSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"COMPLETED\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IRevolutSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.transferId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Revolut\\\", _proof.public_values.transferId)));\\n\\n        amount = _parseAmount(_proof.public_values.amount);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = keccak256(abi.encodePacked(_proof.public_values.recipientId));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash\\n        );\\n        return _isValidVerifierSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IRevolutSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid signature from verifier\\\"\\n        );\\n    }\\n\\n    function _parseAmount(string memory amount) internal pure returns(uint256) {\\n        require(bytes(amount)[0] == 0x2D, \\\"Not a send transaction\\\");   \\n        return amount.stringToUint(6);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistrationProcessor {\\n\\n    struct RegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string wiseTagHash;\\n        address userAddress;\\n    }\\n\\n    struct RegistrationProof {\\n        RegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseAccountRegistry {\\n\\n    // Each Account is tied to a Wise ID and is represented by an Ethereum address.\\n    struct AccountInfo {\\n        bytes32 accountId;                  // User's Wise account ID\\n        bytes32 offRampId;                  // Multi-currency account ID to receive funds\\n        bytes32 wiseTagHash;                // Hash of user's wise tag account stored on register. Used to verify offramper's wise tag\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory);\\n    function getAccountId(address _account) external view returns (bytes32);\\n\\n    function isRegisteredUser(address _account) external view returns (bool);\\n    \\n    function isAllowedUser(address _account, bytes32 _deniedUser) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseOffRamperRegistrationProcessor {\\n\\n    struct OffRamperRegistrationData {\\n        string endpoint;\\n        string host;\\n        string profileId;\\n        string mcAccountId;\\n    }\\n\\n    struct OffRamperRegistrationProof {\\n        OffRamperRegistrationData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/interfaces/IWiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IWiseSendProcessor {\\n\\n    struct SendData {\\n        string endpoint;\\n        string host;\\n        string transferId;\\n        string senderId;\\n        string recipientId;\\n        string amount;\\n        string currencyId;\\n        string status;\\n        string timestamp;\\n        uint256 intentHash;\\n    }\\n\\n    struct SendProof {\\n        SendData public_values;\\n        bytes proof;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseAccountRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"../interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessorMock is IWiseAccountRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.wiseTagHash.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseOffRamperRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"../interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessorMock is IWiseOffRamperRegistrationProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n       OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        return(\\n            bytes32(_proof.public_values.profileId.stringToUint(0)),\\n            bytes32(_proof.public_values.mcAccountId.stringToUint(0))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/mocks/WiseSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IWiseSendProcessor } from \\\"../interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessorMock is IWiseSendProcessor {\\n\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        address /*_verifierSigningKey*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 currencyId\\n        )\\n    {\\n        return(\\n            _proof.public_values.amount.stringToUint(6),\\n            _proof.public_values.timestamp.stringToUint(0),\\n            bytes32(_proof.public_values.recipientId.stringToUint(0)),\\n            keccak256(abi.encodePacked(_proof.public_values.currencyId))\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistrationProcessor is IWiseAccountRegistrationProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 wiseTagHash)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint, _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof.public_values.userAddress, _proof.public_values.profileId)));\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        wiseTagHash = bytes32(_proof.public_values.wiseTagHash.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues,\\n        bytes memory _proof\\n    )\\n        public\\n        view\\n        returns(bool)\\n    {\\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.profileId,\\n            _publicValues.wiseTagHash,\\n            _publicValues.userAddress\\n        );\\n        return _isValidVerifierSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseAccountRegistrationProcessor.RegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid signature from verifier\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseAccountRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistrationProcessor } from \\\"./interfaces/IWiseAccountRegistrationProcessor.sol\\\";\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseAccountRegistry is IWiseAccountRegistry, Ownable {\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed wiseTagHash);\\n    event OffRamperRegistered(address indexed accountOwner, bytes32 indexed accountId, bytes32 indexed offRampId);\\n\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n\\n    event AllowlistEnabled(bytes32 listOwner);\\n    event UserAddedToAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n    event UserRemovedFromAllowlist(bytes32 indexed listOwner, bytes32 allowedUser);\\n\\n    event NewAccountRegistrationProcessorSet(address registrationProcessor);\\n    event NewOffRamperRegistrationProcessorSet(address registrationProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of accountIds that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of accountId to boolean indicating if the user is denied\\n    }\\n\\n    struct AllowList {\\n        bool isEnabled;                     // Boolean indicating if the allowlist is enabled\\n        bytes32[] allowedUsers;             // Array of accountIds that are allowed from taking depositors liquidity\\n        mapping(bytes32 => bool) isAllowed; // Mapping of accountId to boolean indicating if the user is allowed\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    IWiseAccountRegistrationProcessor public accountRegistrationProcessor;      // Address of Account registration processor contract\\n    IWiseOffRamperRegistrationProcessor public offRamperRegistrationProcessor;  // Address of Off-ramper registration processor contract\\n\\n    bool public isInitialized;                                                  // Indicates if contract has been initialized\\n\\n    mapping(address => AccountInfo) internal accounts;                          // Mapping of Ethereum accounts to their account information (IDs and deposits)\\n    mapping(bytes32 => DenyList) internal denyList;                             // Mapping of accountId to denylist\\n    mapping(bytes32 => AllowList) internal allowList;                           // Mapping of accountId to allow list\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner\\n    )\\n        Ownable()\\n    {\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistrationProcessor     Account Registration processor address\\n     * @param _offRamperRegistrationProcessor   Off-ramper Registration processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistrationProcessor _accountRegistrationProcessor,\\n        IWiseOffRamperRegistrationProcessor _offRamperRegistrationProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistrationProcessor = _accountRegistrationProcessor;\\n        offRamperRegistrationProcessor = _offRamperRegistrationProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the profileId from the proof and assigning the account owner to the\\n     * sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function register(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        external\\n    {\\n        require(msg.sender == _proof.public_values.userAddress, \\\"Caller must be address specified in proof\\\");\\n        require(accounts[msg.sender].accountId == bytes32(0), \\\"Account already associated with accountId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 wiseTagHash\\n        ) = _verifyRegistrationProof(_proof);\\n\\n        accounts[msg.sender].accountId = accountId;\\n        accounts[msg.sender].wiseTagHash = wiseTagHash;\\n\\n        emit AccountRegistered(msg.sender, accountId, wiseTagHash);\\n    }\\n\\n    /**\\n     * @notice Registers an account for off-ramping by pulling the multi-currency account id from the proof and assigning\\n     * the account owner to the sender of the transaction.\\n     *\\n     * @param _proof    Registration proof consisting of unredacted data being notarized and a signature\\n     */\\n    function registerAsOffRamper(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].offRampId == bytes32(0), \\\"Account already associated with offRampId\\\");\\n        (\\n            bytes32 accountId,\\n            bytes32 offRampId\\n        ) = _verifyOffRamperRegistrationProof(_proof);\\n\\n        accounts[msg.sender].offRampId = offRampId;\\n\\n        emit OffRamperRegistered(msg.sender, accountId, offRampId);\\n    }\\n\\n    /**\\n     * @notice Adds an accountId to a depositor's deny list. If an address associated with the banned accountId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   accountId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].accountId;\\n\\n        require(!denyList[denyingUser].isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        denyList[denyingUser].isDenied[_deniedUser] = true;\\n        denyList[denyingUser].deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes an accountId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   accountId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].accountId;\\n\\n        require(denyList[approvingUser].isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        denyList[approvingUser].isDenied[_approvedUser] = false;\\n        denyList[approvingUser].deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /**\\n     * @notice Enables allow list for user, only users on the allow list will be able to signal intents on the user's deposit.\\n     */\\n    function enableAllowlist() external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        require(!allowList[allowingUser].isEnabled, \\\"Allow list already enabled\\\");\\n\\n        allowList[allowingUser].isEnabled = true;\\n\\n        emit AllowlistEnabled(allowingUser);\\n    }\\n\\n    /**\\n     * @notice Adds passed accountIds to a depositor's allow list. All addresses associated with the allowed accountIds will\\n     * be able to signal intents on the user's deposit.\\n     *\\n     * @param _allowedUsers   List of accountIds allowed to signal intents on the user's deposit\\n     */\\n    function addAccountsToAllowlist(bytes32[] memory _allowedUsers) external onlyRegisteredUser {\\n        bytes32 allowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _allowedUsers.length; i++) {\\n            bytes32 allowedUser = _allowedUsers[i];\\n\\n            require(!allowList[allowingUser].isAllowed[allowedUser], \\\"User already on allowlist\\\");\\n\\n            allowList[allowingUser].isAllowed[allowedUser] = true;\\n            allowList[allowingUser].allowedUsers.push(allowedUser);\\n\\n            emit UserAddedToAllowlist(allowingUser, allowedUser);\\n        }\\n    }\\n\\n    /**\\n     * @notice Removes an passed accountId's from allow list. If allow list is enabled only users on the allow list will be\\n     * able to signal intents on the user's deposit.\\n     *\\n     * @param _disallowedUsers   List of accountIds being approved\\n     */\\n    function removeAccountsFromAllowlist(bytes32[] memory _disallowedUsers) external onlyRegisteredUser {\\n        bytes32 disallowingUser = accounts[msg.sender].accountId;\\n\\n        for(uint256 i = 0; i < _disallowedUsers.length; i++) {\\n            bytes32 disallowedUser = _disallowedUsers[i];\\n\\n            require(allowList[disallowingUser].isAllowed[disallowedUser], \\\"User not on allowlist\\\");\\n\\n            allowList[disallowingUser].isAllowed[disallowedUser] = false;\\n            allowList[disallowingUser].allowedUsers.removeStorage(disallowedUser);\\n\\n            emit UserRemovedFromAllowlist(disallowingUser, disallowedUser);\\n        }\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the account registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setAccountRegistrationProcessor(IWiseAccountRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        accountRegistrationProcessor = _registrationProcessor;\\n        emit NewAccountRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the off ramper registration processor address used for validating and interpreting tls proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setOffRamperRegistrationProcessor(IWiseOffRamperRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        offRamperRegistrationProcessor = _registrationProcessor;\\n        emit NewOffRamperRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getAccountId(address _account) public view returns (bytes32) {\\n        return accounts[_account].accountId;\\n    }\\n\\n    function isRegisteredUser(address _account) public view returns (bool) {\\n        return getAccountId(_account) != bytes32(0);\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return denyList[getAccountId(_account)].deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return denyList[getAccountId(_account)].isDenied[_deniedUser];\\n    }\\n\\n    function isAllowlistEnabled(address _account) external view returns (bool) {\\n        return allowList[getAccountId(_account)].isEnabled;\\n    }\\n\\n    function getAllowedUsers(address _account) external view returns (bytes32[] memory) {\\n        return allowList[getAccountId(_account)].allowedUsers;\\n    }\\n\\n    function isAllowedUser(address _account, bytes32 _allowedUser) external view returns (bool) {\\n        bytes32 allowingUser = getAccountId(_account);\\n\\n        // Deny list overrides, if user on deny list then they are not allowed\\n        if(denyList[allowingUser].isDenied[_allowedUser]) { return false; }\\n\\n        // Check if allow list is enabled, if so return status of user, else return true\\n        return allowList[allowingUser].isEnabled ? allowList[allowingUser].isAllowed[_allowedUser] : true;\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IWiseAccountRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 wiseTagHash)\\n    {\\n        (\\n            accountId,\\n            wiseTagHash\\n        ) = accountRegistrationProcessor.processProof(_proof);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Wise account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyOffRamperRegistrationProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        internal\\n        returns(bytes32 accountId, bytes32 offRampId)\\n    {\\n        (\\n            accountId,\\n            offRampId\\n        ) = offRamperRegistrationProcessor.processProof(_proof);\\n\\n        require(accountId == accounts[msg.sender].accountId, \\\"AccountId does not match\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseOffRamperRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseOffRamperRegistrationProcessor } from \\\"./interfaces/IWiseOffRamperRegistrationProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseOffRamperRegistrationProcessor is IWiseOffRamperRegistrationProcessor, TLSBaseProcessor {\\n\\n    using StringConversionUtils for string;\\n    \\n    /* ============ Events ============ */\\n    event VerifierSigningKeySet(address _verifierSigningKey);\\n    \\n    /* ============ Public Variables ============ */\\n    address public verifierSigningKey;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        address _verifierSigningKey,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {\\n        verifierSigningKey = _verifierSigningKey;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 onRampId, bytes32 offRampId)\\n    {\\n        _validateProof(_proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(endpoint.replaceString(\\\"*\\\", _proof.public_values.profileId), _proof.public_values.endpoint);\\n        _validateTLSHost(host, _proof.public_values.host);\\n\\n        onRampId = bytes32(_proof.public_values.profileId.stringToUint(0));\\n        offRampId = bytes32(_proof.public_values.mcAccountId.stringToUint(0));\\n    }\\n\\n    /* ============ External Admin Functions ============ */\\n\\n    function setVerifierSigningKey(address _verifierSigningKey) external onlyOwner {\\n        verifierSigningKey = _verifierSigningKey;\\n\\n        emit VerifierSigningKeySet(_verifierSigningKey);\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(_publicValues.endpoint, _publicValues.host, _publicValues.profileId, _publicValues.mcAccountId);\\n        return _isValidVerifierSignature(encodedMessage, _proof, verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        IWiseOffRamperRegistrationProcessor.OffRamperRegistrationData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_publicValues, _proof),\\n            \\\"Invalid signature from verifier\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IWiseAccountRegistry } from \\\"./interfaces/IWiseAccountRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed offRampId,\\n        bytes32 indexed currencyId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed accountId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    struct Deposit {\\n        address depositor;\\n        string wiseTag;\\n        address verifierSigningKey;         // Public key of the verifier depositor wants to sign the TLS proof\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        bytes32 receiveCurrencyId;          // Id of the currency to be received off-chain (bytes32(Wise currency code))\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorId;                // Depositor's offRampId \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperId;                 // onRamper's onRamperId\\n    }\\n\\n    // A Global Account is defined as an account represented by one accountId. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that accountId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Wise account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accountRegistry.isRegisteredUser(msg.sender), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IWiseAccountRegistry public accountRegistry;                    // Account Registry contract for Wise\\n    IWiseSendProcessor public sendProcessor;                        // Address of send processor contract\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of onRamp ID to information used to enforce actions across Ethereum accounts\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _accountRegistry     Account Registry contract for Wise\\n     * @param _sendProcessor       Send processor address\\n     */\\n    function initialize(\\n        IWiseAccountRegistry _accountRegistry,\\n        IWiseSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        accountRegistry = _accountRegistry;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _wiseTag              Depositor's Wise tag to receive payments\\n     * @param _receiveCurrencyId    Id of the currency to be received off-chain\\n     * @param _depositAmount        The amount of USDC to off-ramp\\n     * @param _receiveAmount        The amount of USD to receive\\n     * @param _verifierSigningKey   Public key of the verifier depositor wants to sign the TLS proof\\n     */\\n    function offRamp(\\n        string calldata _wiseTag,\\n        bytes32 _receiveCurrencyId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount,\\n        address _verifierSigningKey\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        IWiseAccountRegistry.AccountInfo memory account = accountRegistry.getAccountInfo(msg.sender);\\n        GlobalAccountInfo storage globalAccountInfo = globalAccount[account.accountId];\\n\\n        require(account.offRampId != bytes32(0), \\\"Must be registered as off ramper\\\");\\n        require(keccak256(abi.encode(_wiseTag)) == account.wiseTagHash, \\\"Wise tag does not match registered wise tag\\\");\\n        require(globalAccountInfo.deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        globalAccountInfo.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            wiseTag: _wiseTag,\\n            receiveCurrencyId: _receiveCurrencyId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0),\\n            verifierSigningKey: _verifierSigningKey\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.accountId, _receiveCurrencyId, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using accountId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 onRamperId = accountRegistry.getAccountId(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n\\n        // Caller validity checks\\n        require(accountRegistry.isAllowedUser(deposit.depositor, onRamperId), \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[onRamperId].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[onRamperId].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(accountRegistry.getAccountId(deposit.depositor) != onRamperId, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(onRamperId, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[onRamperId].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, onRamperId, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accountRegistry.getAccountId(intent.onRamper) == accountRegistry.getAccountId(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _sendData         Struct containing unredacted data from API call to Wise\\n     * @param _verifierSignature  Signature by verifier of the unredacted data\\n     */\\n    function onRamp(\\n        IWiseSendProcessor.SendData calldata _sendData,\\n        bytes calldata _verifierSignature\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_sendData, _verifierSignature);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accountRegistry.getAccountId(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IWiseSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) public view returns (bytes32) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].currentIntentHash;\\n    }\\n\\n    function getIdCurrentIntentHashAsUint(address _account) external view returns (uint256) {\\n        return uint256(getIdCurrentIntentHash(_account));\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accountRegistry.getAccountId(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperId: accountRegistry.getAccountId(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = globalAccount[accountRegistry.getAccountId(_account)].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorId: accountRegistry.getAccountId(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _accountId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_accountId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accountRegistry.getAccountId(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            globalAccount[accountRegistry.getAccountId(_deposit.depositor)].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperId matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IWiseSendProcessor.SendData calldata _data,\\n        bytes calldata _verifierSignature\\n    )\\n        internal\\n        returns(Intent storage intent, Deposit storage deposit, bytes32 intentHash)\\n    {\\n        intentHash = bytes32(_data.intentHash);\\n        intent = intents[intentHash];\\n        require(intent.onRamper == msg.sender, \\\"Caller must be the on-ramper\\\");\\n\\n        deposit = deposits[intent.deposit];\\n\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        ) = sendProcessor.processProof(\\n            IWiseSendProcessor.SendProof({\\n                public_values: _data,\\n                proof: _verifierSignature\\n            }),\\n            deposit.verifierSigningKey\\n        );\\n\\n        require(currencyId == deposit.receiveCurrencyId, \\\"Wrong currency sent\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accountRegistry.getAccountInfo(deposit.depositor).offRampId == offRamperId, \\\"Offramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/wise/WiseSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport { SignatureChecker } from \\\"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IWiseSendProcessor } from \\\"./interfaces/IWiseSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\nimport { TLSBaseProcessor } from \\\"../../processors/TLSBaseProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract WiseSendProcessor is IWiseSendProcessor, TLSBaseProcessor {\\n\\n    using ECDSA for bytes32;\\n    using SignatureChecker for address;\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    bytes32 public constant PAYMENT_STATUS = keccak256(abi.encodePacked(\\\"OUTGOING_PAYMENT_SENT\\\"));\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        INullifierRegistry _nullifierRegistry,\\n        uint256 _timestampBuffer,\\n        string memory _endpoint,\\n        string memory _host\\n    )\\n        TLSBaseProcessor(\\n            _ramp,\\n            _nullifierRegistry,\\n            _timestampBuffer,\\n            _endpoint,\\n            _host\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IWiseSendProcessor.SendProof calldata _proof,\\n        address _verifierSigningKey\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperId,\\n            bytes32 currencyId\\n        )\\n    {\\n        _validateProof(_verifierSigningKey, _proof.public_values, _proof.proof);\\n\\n        _validateTLSEndpoint(\\n            endpoint.replaceString(\\\"*\\\", _proof.public_values.senderId),\\n            _proof.public_values.endpoint\\n        );\\n        _validateTLSHost(host, _proof.public_values.host);\\n        \\n        // Validate status\\n        require(\\n            keccak256(abi.encodePacked(_proof.public_values.status)) == PAYMENT_STATUS,\\n            \\\"Payment status not confirmed as sent\\\"\\n        );\\n        _validateAndAddNullifier(keccak256(abi.encodePacked(\\\"Wise\\\", _proof.public_values.transferId)));\\n\\n        amount = _proof.public_values.amount.stringToUint(6);\\n\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _proof.public_values.timestamp.stringToUint(0) / 1000 + timestampBuffer;\\n\\n        offRamperId = bytes32(_proof.public_values.recipientId.stringToUint(0));\\n        currencyId = keccak256(abi.encodePacked(_proof.public_values.currencyId));\\n    }\\n\\n    /* ============ View Functions ============ */\\n\\n    function verifyProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n        returns(bool)\\n    {   \\n        bytes memory encodedMessage = abi.encode(\\n            _publicValues.endpoint,\\n            _publicValues.host,\\n            _publicValues.transferId,\\n            _publicValues.senderId,\\n            _publicValues.recipientId,\\n            _publicValues.amount,\\n            _publicValues.currencyId,\\n            _publicValues.status,\\n            _publicValues.timestamp,\\n            _publicValues.intentHash\\n        );\\n        return _isValidVerifierSignature(encodedMessage, _proof, _verifierSigningKey);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateProof(\\n        address _verifierSigningKey,\\n        IWiseSendProcessor.SendData memory _publicValues, \\n        bytes memory _proof\\n    )\\n        internal\\n        view\\n    {   \\n        require(\\n            verifyProof(_verifierSigningKey, _publicValues, _proof),\\n            \\\"Invalid signature from verifier\\\"\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11538879775846674526835491352245177428215656017176257554677806790730122530182;\\n    uint256 constant deltax2 = 10342899044037521395319393040886647066391079897134856423910842052487918973972;\\n    uint256 constant deltay1 = 7673810604697646469980418300855404491906175026657152448502078673835866310816;\\n    uint256 constant deltay2 = 19203038665686855899042926072269909772185515054222824546695896577042064928540;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18981494493146797699413473584003903337500344026674158748356152365740882604347;\\n    uint256 constant deltax2 = 18221584421696726841818737862375935398226401959970671461464876789891440943773;\\n    uint256 constant deltay1 = 13182257072392169632964104391551423396767366986119198763222331185570216766141;\\n    uint256 constant deltay2 = 1055999763619532764683818987535346820930542189966934424182524126391532263114;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 16343044642992925849324144222241208767090826466619068823722193270756586862401;\\n    uint256 constant deltax2 = 10314194466904948834262239669041981907722654474458582136706961656951325286580;\\n    uint256 constant deltay1 = 18870959210104009605384605724613549900634110254044850171595460926756475612559;\\n    uint256 constant deltay2 = 20925792905154616635554201642170069367235560764483397919960492041377193399415;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/96d924ca10695a353bfa4c997166694e.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11133828657934177089004312995558009171494340641763879517673191421017863452495;\\n    uint256 constant deltax2 = 15578605622679797628916481587424069927318004999014864187840594050063358446429;\\n    uint256 constant deltay1 = 10776460641737156525775554271006285498298598522158976318346806579207101706777;\\n    uint256 constant deltay2 = 13370712488507592422860031641109290699443204427500458532551752051737078074683;\\n\\n    \\n    uint256 constant IC0x = 9394740747776187241597029104953484261679012526425116554159524966233999111263;\\n    uint256 constant IC0y = 19689273204164097728177651836883812205170784316328518073257553118356569721529;\\n    \\n    uint256 constant IC1x = 2103298983762510908301138293943056608631520025630826390321569873465337843612;\\n    uint256 constant IC1y = 3051671505392171758204845789745109750013350293754815803257290082249002704162;\\n    \\n    uint256 constant IC2x = 16449197615353463639054592956247688316837441704346035760206288894539930814077;\\n    uint256 constant IC2y = 6335892290253569886213727820048151796384993861106408353434365713962828062536;\\n    \\n    uint256 constant IC3x = 13909339620076649767883466299398757372347682133758066729503408416549131081314;\\n    uint256 constant IC3y = 680939940507125217800291279675392811201474158796517777404806360441256992511;\\n    \\n    uint256 constant IC4x = 5567565339001906931154550109868824777928665956120696988986942291349201008482;\\n    uint256 constant IC4y = 14182369860111175092039963088428935808239168726019022822913308258774428350169;\\n    \\n    uint256 constant IC5x = 4528931757641575110352830627683078786226227744379836276335458021091600396184;\\n    uint256 constant IC5y = 18809760409635068499937315446477117440887658318231718225159843539196113242397;\\n    \\n    uint256 constant IC6x = 217249737022013148790853614054515288744843070463361996227143243753146454558;\\n    uint256 constant IC6y = 5843595604928112686285135260361410764846211093271852947892142733907981483475;\\n    \\n    uint256 constant IC7x = 16382783349015794414606292731397855206031202794459940530289465235845935294599;\\n    uint256 constant IC7y = 8313689883004195951872015712057362672054743656979611883792351037811710281664;\\n    \\n    uint256 constant IC8x = 12091879935696046645654533776196374113414754479661743359672798704639476620661;\\n    uint256 constant IC8y = 13607368754408928105528637625253051479212460464623135888354013366424189726618;\\n    \\n    uint256 constant IC9x = 1427687473863783182488178317364745261019085244973035264375279293174848549312;\\n    uint256 constant IC9y = 7042084296523600520065911790797906589532524342562812887761489075993835181146;\\n    \\n    uint256 constant IC10x = 19579875689027874433809077324776940508857197381913748776343129158527029914029;\\n    uint256 constant IC10y = 11360688967181958431013518844967411744837522897538508687548664595854123094206;\\n    \\n    uint256 constant IC11x = 15489617821697871842044770938846172737438163666835784991442660969573132279238;\\n    uint256 constant IC11y = 9208709180384759640941195473336890577882300724746282442631899048305657377731;\\n    \\n    uint256 constant IC12x = 12219340695113383303094720678815419311566874168360126633878210542379865206498;\\n    uint256 constant IC12y = 19748310142198112801532265275227626809399838784073257383942928475531551524126;\\n    \\n    uint256 constant IC13x = 9809600841880559730361608794352502078553304084649850859459331073975327390409;\\n    uint256 constant IC13y = 11320259074840511785906545984642922355663228703151484107043641197226422843416;\\n    \\n    uint256 constant IC14x = 16059817887658775120436765365711045350150793283463695196041726740989539679801;\\n    uint256 constant IC14y = 4842923321162840856934661309117966577909319066986869353905580462534729375402;\\n    \\n    uint256 constant IC15x = 12339372070549065744144308230683430247880602184204850330715911885647781887335;\\n    uint256 constant IC15y = 18316443093151957129338732113138820850818943232578658491484809647188395368957;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/c76db42e3552a72f819af71bb2be52ce.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { DateTime } from \\\"../../external/DateTime.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _hdfcMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        timestamp = _dateStringToTimestamp(rawTimestamp);\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        return DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        ) - IST_OFFSET;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18574627869058290718249846286416066923787357305653818275198119569110729063307;\\n    uint256 constant deltax2 = 13915999697294316428724933304884230300804768925316324388637447994944303207122;\\n    uint256 constant deltay1 = 6098255674121565970551903974560935137843957314441504769450899063293175181557;\\n    uint256 constant deltay2 = 15143967207878882858319171473723762116395973746480761427454690602499031508717;\\n\\n    \\n    uint256 constant IC0x = 6865443700594715891152328791607889526330887414086993633068747938072457241685;\\n    uint256 constant IC0y = 10468945301756143970646006543367573774178372611766681195220999860357915797944;\\n    \\n    uint256 constant IC1x = 10704722446523266721180562643447437149651020230245607194259102672100716655622;\\n    uint256 constant IC1y = 13835922647350771093409292403482106984225273572439540259619248291997497190338;\\n    \\n    uint256 constant IC2x = 9082820476663057749813862646863505694595521088627361022677522902057835975674;\\n    uint256 constant IC2y = 2956559811855122372464720724455222044024045806141600873519434424076727259549;\\n    \\n    uint256 constant IC3x = 3792740326745716842453603765202940845282157902511414580984405164815472719626;\\n    uint256 constant IC3y = 13398930886279937280023561976368048826175146409027429215170876003688906362216;\\n    \\n    uint256 constant IC4x = 1141781699151428606267044235130552909660238448565862470582441408755286403649;\\n    uint256 constant IC4y = 16789658000733015308721768726691601134554495877403753820826002406384958395008;\\n    \\n    uint256 constant IC5x = 12543171042042072636131914829125043929342724675040777036405607612956292855474;\\n    uint256 constant IC5y = 4103351600393692854136490223669999878503018507420468298933278541160167154342;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 13715093910953477444594932613394637161592645326267490952383773258932680530785;\\n    uint256 constant deltax2 = 6917355939685380899148753334446963866296679557559265300195124805902372568736;\\n    uint256 constant deltay1 = 10027537635408556375640886021174498274338207339803607940642263434646237658144;\\n    uint256 constant deltay2 = 19825314797083105356154821733414236732602675829642895849779157432388025780748;\\n\\n    \\n    uint256 constant IC0x = 7948712917874849781328365661027367011398916994267746344840851439625837578323;\\n    uint256 constant IC0y = 14445610336427827969214783890094209349619216720637343095223018572693254280923;\\n    \\n    uint256 constant IC1x = 3654976868371838169631577898462947005550108125685649400186026683210975806547;\\n    uint256 constant IC1y = 7383470632301847779131345725687431208414525939319998905342796582584383932784;\\n    \\n    uint256 constant IC2x = 15960136517117002583905099076229506420678130465330836605642076667698312488907;\\n    uint256 constant IC2y = 10981003641590459938830276725941498612829685925850889415515039958666798745545;\\n    \\n    uint256 constant IC3x = 18064147597098347735634254758923927729758051955626895483758091493962336324910;\\n    uint256 constant IC3y = 14561976814062079545004557051651175882415454473414826337411715544694691078488;\\n    \\n    uint256 constant IC4x = 5479872440797886105045613557892343574379959348291323344571145668056905130790;\\n    uint256 constant IC4y = 19816668883377774512316396795679515122358992446677555233530823190449668202575;\\n    \\n    uint256 constant IC5x = 9764995418164291848924916053122788044578670279004409359935206951759326535751;\\n    uint256 constant IC5y = 11151240738595525109186562114546767429226785384258075837825604200334229399893;\\n    \\n    uint256 constant IC6x = 8592289604370662283816667811371636409851377122184258261984779162566069289701;\\n    uint256 constant IC6y = 14924863702174947616504138427154175911132478861008643941575632275190130139352;\\n    \\n    uint256 constant IC7x = 18144310048336844926716356091507529474953804436633311455291234260603469939801;\\n    uint256 constant IC7y = 20695654519010539727518673528536864282905304035588394263484365314168181698771;\\n    \\n    uint256 constant IC8x = 6502380984206062082509747555585722773109086149921002084837192664976139632635;\\n    uint256 constant IC8y = 20559694265554344023542679863623632229239552087994730960172389697388976005511;\\n    \\n    uint256 constant IC9x = 20112907151747105787761530796573701791334087761671369712034010592321424588594;\\n    uint256 constant IC9y = 7868275330531868976088552522626764067554872392097431803379373791917043873429;\\n    \\n    uint256 constant IC10x = 21738568466342470712305504479308744377477421607586657477021567762815751353985;\\n    uint256 constant IC10y = 15899136431442502164449286654852349998271141738582178828650897248716421930967;\\n    \\n    uint256 constant IC11x = 8797574036872579022038442307145559829777119719185174358600414786794648200526;\\n    uint256 constant IC11y = 19158045316273481821441527564745598208594831388291307046183673615092116714767;\\n    \\n    uint256 constant IC12x = 1856159710792583584076099033562199824825551035760525968182870506068750338922;\\n    uint256 constant IC12y = 5431689035393664841658365783566955093050903672278814147361678362199701787106;\\n    \\n    uint256 constant IC13x = 1326184215165888620491943578175089960460457074386949049899809721605475868360;\\n    uint256 constant IC13y = 19798068085286831236096103256261325470985925228876029833389405086405680467005;\\n    \\n    uint256 constant IC14x = 21303925226345182261601479972988106925149727015068245014063996271014722518363;\\n    uint256 constant IC14y = 13822581075918761258491041321378418848172590182506086615070972333032971332948;\\n    \\n    uint256 constant IC15x = 7601301681882298785665130103217482061846330487834337423048688553591898089998;\\n    uint256 constant IC15y = 16353595650180105876268966027044363473882857313997670459546834066677499432092;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 12006194618653324330619797325561692185103396486467733121574833560223777226351;\\n    uint256 constant deltax2 = 10275640949676580114201318329089520303504033027756471013178457200812927551299;\\n    uint256 constant deltay1 = 12136231695504973090923334559104216217418357111893421900290805157591122549076;\\n    uint256 constant deltay2 = 2418077081491544016604888756651038315978101879826004594427259819354270314840;\\n\\n    \\n    uint256 constant IC0x = 19838440496576873508202595947517628313617788891112459343485705915087906694446;\\n    uint256 constant IC0y = 21886172716636920699945637367171168399507739788681268725878221796808197691077;\\n    \\n    uint256 constant IC1x = 9699327572192886829300872542188710314155208077109401897324087953875172714732;\\n    uint256 constant IC1y = 10401076186702262042009814297502398599949958637196239435917769211841095615477;\\n    \\n    uint256 constant IC2x = 9293067345840685455712546523020163358912538466031624456372407721128787086445;\\n    uint256 constant IC2y = 17093236047682171341704012967094529232234688044831730294877016265806911290314;\\n    \\n    uint256 constant IC3x = 19532209467074560887127372369271403342354076647517597960330563751014703343823;\\n    uint256 constant IC3y = 11126268956151724539442763810314859186358887128001103444071504045565387838562;\\n    \\n    uint256 constant IC4x = 10729740883616587102334460603399682586624058055041785805759767738675952010957;\\n    uint256 constant IC4y = 4165124162087176366214130197497953634405986211958070784318131423230477981707;\\n    \\n    uint256 constant IC5x = 10182313003168007151069229219258446160605025735463541433631273981979571554653;\\n    uint256 constant IC5y = 8821561961650811293815311722326329795297665885235663503476730644181047666484;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 10075444819728828528059511311364183377585011636666347250599008316664107494584;\\n    uint256 constant deltax2 = 19327888262652149651858559507688929247845982563456569545298956783712290831031;\\n    uint256 constant deltay1 = 19352801460895629485256782282819819495690526597376096989389923034283130776118;\\n    uint256 constant deltay2 = 11668517376357679640486892005206332407941243522830734898219813555969756490527;\\n\\n    \\n    uint256 constant IC0x = 4244199450261939264855608361292422830494076317114087381524682052624987594898;\\n    uint256 constant IC0y = 19645046663091251713731947178298410964505911169469312617571077810087266152857;\\n    \\n    uint256 constant IC1x = 8174035567318043885708495283345132428559378659325609203776402978017320167293;\\n    uint256 constant IC1y = 14468913963303826866215469807518170784403093656434266017779773880257875040240;\\n    \\n    uint256 constant IC2x = 1616603017751755006393562987905285502270823546542543926944627007410237341389;\\n    uint256 constant IC2y = 19363001402611389684892375352655759926342431445082754246958964085276938403807;\\n    \\n    uint256 constant IC3x = 18206398417831844023515176703806764449138507779128726420915001707110434960674;\\n    uint256 constant IC3y = 15788322487150289973315668363845259348952014356217153206401112660482394149984;\\n    \\n    uint256 constant IC4x = 5556506419684194840114638678281266193177223336781663103282498332205775709966;\\n    uint256 constant IC4y = 3612832929973582572292953270578481883198123808328242543078950263985599193867;\\n    \\n    uint256 constant IC5x = 12215062759329544988171802286780059092087193981868301475398051148747302789508;\\n    uint256 constant IC5y = 1980305058569746313443850675062124742589110071159814897086099250727381686120;\\n    \\n    uint256 constant IC6x = 3493933421620238986193524740698678015926658911199434587596433896655331481231;\\n    uint256 constant IC6y = 7459045126206245262756783739697871731196375298112634212173672404853831309786;\\n    \\n    uint256 constant IC7x = 10740551677743158382441062386501298848646053145865823442847610791968594528289;\\n    uint256 constant IC7y = 21657167241153225314135589387079002708587418842864077521693977210968021048721;\\n    \\n    uint256 constant IC8x = 20536476234797263831643189740064053117160337195791856385892992834482370287512;\\n    uint256 constant IC8y = 18258699057873865588245369435578918571756469704183085011165098139074862434543;\\n    \\n    uint256 constant IC9x = 18293662353150822330749373485066335943093182919888710919053977794688677443843;\\n    uint256 constant IC9y = 3365197130606871938439382259561012622230793791152518122576869893531830020051;\\n    \\n    uint256 constant IC10x = 10464268927660994961936771610761322397633069758803976833400107641287034964420;\\n    uint256 constant IC10y = 15896600235017903857295002971756639107391153447838560723402307560050234141111;\\n    \\n    uint256 constant IC11x = 19786751484513045884347111989063082084450406057425687794673931698452346081044;\\n    uint256 constant IC11y = 5313251178585910055977156446218999699936391470697302222575669547157687947710;\\n    \\n    uint256 constant IC12x = 1684055055646723719894355280156760702291183222236626601663480311877006377437;\\n    uint256 constant IC12y = 14613128874599604159663378872994588938053027721510091765805321127316501622056;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/f47db0aba1ef1355cf5a362858260c2b.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/fa5ebdb8a9b4513b8497f92665de3bf6.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == 0x2E) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n    uint256 constant IST_OFFSET = 19800;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 9394740747776187241597029104953484261679012526425116554159524966233999111263;\\n    uint256 constant IC0y = 19689273204164097728177651836883812205170784316328518073257553118356569721529;\\n    \\n    uint256 constant IC1x = 2103298983762510908301138293943056608631520025630826390321569873465337843612;\\n    uint256 constant IC1y = 3051671505392171758204845789745109750013350293754815803257290082249002704162;\\n    \\n    uint256 constant IC2x = 16449197615353463639054592956247688316837441704346035760206288894539930814077;\\n    uint256 constant IC2y = 6335892290253569886213727820048151796384993861106408353434365713962828062536;\\n    \\n    uint256 constant IC3x = 13909339620076649767883466299398757372347682133758066729503408416549131081314;\\n    uint256 constant IC3y = 680939940507125217800291279675392811201474158796517777404806360441256992511;\\n    \\n    uint256 constant IC4x = 5567565339001906931154550109868824777928665956120696988986942291349201008482;\\n    uint256 constant IC4y = 14182369860111175092039963088428935808239168726019022822913308258774428350169;\\n    \\n    uint256 constant IC5x = 4528931757641575110352830627683078786226227744379836276335458021091600396184;\\n    uint256 constant IC5y = 18809760409635068499937315446477117440887658318231718225159843539196113242397;\\n    \\n    uint256 constant IC6x = 217249737022013148790853614054515288744843070463361996227143243753146454558;\\n    uint256 constant IC6y = 5843595604928112686285135260361410764846211093271852947892142733907981483475;\\n    \\n    uint256 constant IC7x = 16382783349015794414606292731397855206031202794459940530289465235845935294599;\\n    uint256 constant IC7y = 8313689883004195951872015712057362672054743656979611883792351037811710281664;\\n    \\n    uint256 constant IC8x = 12091879935696046645654533776196374113414754479661743359672798704639476620661;\\n    uint256 constant IC8y = 13607368754408928105528637625253051479212460464623135888354013366424189726618;\\n    \\n    uint256 constant IC9x = 1427687473863783182488178317364745261019085244973035264375279293174848549312;\\n    uint256 constant IC9y = 7042084296523600520065911790797906589532524342562812887761489075993835181146;\\n    \\n    uint256 constant IC10x = 19579875689027874433809077324776940508857197381913748776343129158527029914029;\\n    uint256 constant IC10y = 11360688967181958431013518844967411744837522897538508687548664595854123094206;\\n    \\n    uint256 constant IC11x = 15489617821697871842044770938846172737438163666835784991442660969573132279238;\\n    uint256 constant IC11y = 9208709180384759640941195473336890577882300724746282442631899048305657377731;\\n    \\n    uint256 constant IC12x = 12219340695113383303094720678815419311566874168360126633878210542379865206498;\\n    uint256 constant IC12y = 19748310142198112801532265275227626809399838784073257383942928475531551524126;\\n    \\n    uint256 constant IC13x = 9809600841880559730361608794352502078553304084649850859459331073975327390409;\\n    uint256 constant IC13y = 11320259074840511785906545984642922355663228703151484107043641197226422843416;\\n    \\n    uint256 constant IC14x = 16059817887658775120436765365711045350150793283463695196041726740989539679801;\\n    uint256 constant IC14y = 4842923321162840856934661309117966577909319066986869353905580462534729375402;\\n    \\n    uint256 constant IC15x = 12339372070549065744144308230683430247880602184204850330715911885647781887335;\\n    uint256 constant IC15y = 18316443093151957129338732113138820850818943232578658491484809647188395368957;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/deployments/sepolia/solcInputs/fddf950e5f6f8abf0d9e29e0433009ae.json",
    "content": "{\n  \"language\": \"Solidity\",\n  \"sources\": {\n    \"@openzeppelin/contracts/access/Ownable.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/ERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the default value returned by this function, unless\\n     * it's overridden.\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(address from, address to, uint256 amount) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/token/ERC20/IERC20.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\"\n    },\n    \"@openzeppelin/contracts/utils/Context.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\"\n    },\n    \"@zk-email/contracts/utils/StringUtils.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity >=0.7.6;\\n\\n// https://github.com/nalinbhardwaj/ethdosnumber/blob/main/ethdos-contracts/src/HexStrings.sol\\nlibrary StringUtils {\\n    bytes16 internal constant ALPHABET = \\\"0123456789abcdef\\\";\\n    uint256 internal constant DEFAULT_PACK_SIZE = 31;\\n\\n    /// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n    /// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length);\\n        for (uint256 i = buffer.length; i > 0; i--) {\\n            buffer[i - 1] = ALPHABET[value & 0xf];\\n            value >>= 4;\\n        }\\n        return string(buffer);\\n    }\\n\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(bytes32 value) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(value));\\n    }\\n\\n    function toString(address account) internal pure returns (string memory) {\\n        return toString(abi.encodePacked(account));\\n    }\\n\\n    function stringEq(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b));\\n    }\\n\\n    function toString(bytes memory data) internal pure returns (string memory) {\\n        bytes memory alphabet = \\\"0123456789abcdef\\\";\\n\\n        bytes memory str = new bytes(2 + data.length * 2);\\n        str[0] = \\\"0\\\";\\n        str[1] = \\\"x\\\";\\n        for (uint256 i = 0; i < data.length; i++) {\\n            str[2 + i * 2] = alphabet[uint256(uint8(data[i] >> 4))];\\n            str[3 + i * 2] = alphabet[uint256(uint8(data[i] & 0x0f))];\\n        }\\n        return string(str);\\n    }\\n\\n    // 1 packed byte = packSize (usually 31) normal bytes, all in one 255/256-bit value\\n    // Note that this is not 32 due to the field modulus of circom\\n    function convertPackedByteToString(uint256 packedByte, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint256[] memory packedBytes = new uint256[](1);\\n        packedBytes[0] = packedByte;\\n        return convertPackedBytesToString(packedBytes, packSize, packSize);\\n    }\\n\\n    // Note: This convenience function removes the max string length check, which may cause misalignment with the circom\\n    // If using this, then the circom needs to rangecheck packed length in the circuit itself\\n    // This defaults to 31 bytes per packed byte\\n    function convertPackedBytesToString(uint256[] memory packedBytes) \\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        return convertPackedBytesToString(packedBytes, packedBytes.length * DEFAULT_PACK_SIZE, DEFAULT_PACK_SIZE);\\n    }\\n\\n    // Unpacks uint256s into bytes and then extracts the non-zero characters\\n    // Only extracts contiguous non-zero characters and ensures theres only 1 such state\\n    // Note that unpackedLen may be more than packedBytes.length * 8 since there may be 0s\\n    // signals is the total number of signals (i.e. bytes) packed into the packedBytes. it defaults to packedBytes.length * packSize\\n    function convertPackedBytesToString(uint256[] memory packedBytes, uint256 signals, uint256 packSize)\\n        internal\\n        pure\\n        returns (string memory extractedString)\\n    {\\n        uint8 state = 0;\\n        // bytes: 0 0 0 0 y u s h _ g 0 0 0\\n        // state: 0 0 0 0 1 1 1 1 1 1 2 2 2\\n        bytes memory nonzeroBytesArray = new bytes(packedBytes.length * packSize);\\n        uint256 nonzeroBytesArrayIndex = 0;\\n        for (uint16 i = 0; i < packedBytes.length; i++) {\\n            uint256 packedByte = packedBytes[i];\\n            uint8[] memory unpackedBytes = new uint8[](packSize);\\n            for (uint256 j = 0; j < packSize; j++) {\\n                unpackedBytes[j] = uint8(packedByte >> (j * 8));\\n            }\\n            for (uint256 j = 0; j < packSize; j++) {\\n                uint256 unpackedByte = unpackedBytes[j]; //unpackedBytes[j];\\n                if (unpackedByte != 0) {\\n                    nonzeroBytesArray[nonzeroBytesArrayIndex] = bytes1(uint8(unpackedByte));\\n                    nonzeroBytesArrayIndex++;\\n                    if (state % 2 == 0) {\\n                        state += 1;\\n                    }\\n                } else {\\n                    if (state % 2 == 1) {\\n                        state += 1;\\n                    }\\n                }\\n                packedByte = packedByte >> 8;\\n            }\\n        }\\n        // TODO: You might want to assert that the state is exactly 1 or 2\\n        // If not, that means empty bytse have been removed from the middle and things have been concatenated.\\n        // We removed due to some tests failing, but this is not ideal and the require should be uncommented as soon as tests pass with it.\\n\\n        // require(state == 1 || state == 2, \\\"Invalid final state of packed bytes in email; more than two non-zero regions found!\\\");\\n        require(state >= 1, \\\"No packed bytes found! Invalid final state of packed bytes in email; value is likely 0!\\\");\\n        require(nonzeroBytesArrayIndex <= signals, \\\"Packed bytes more than allowed max number of signals!\\\");\\n        string memory returnValue = removeTrailingZeros(string(nonzeroBytesArray));\\n        return returnValue;\\n        // Have to end at the end of the email -- state cannot be 1 since there should be an email footer\\n    }\\n\\n    function bytes32ToString(bytes32 input) internal pure returns (string memory) {\\n        uint256 i;\\n        for (i = 0; i < 32 && input[i] != 0; i++) {}\\n        bytes memory resultBytes = new bytes(i);\\n        for (i = 0; i < 32 && input[i] != 0; i++) {\\n            resultBytes[i] = input[i];\\n        }\\n        return string(resultBytes);\\n    }\\n\\n    // sliceArray is used to slice an array of uint256s from start-end into a new array of uint256s\\n    function sliceArray(uint256[] memory input, uint256 start, uint256 end) internal pure returns (uint256[] memory) {\\n        require(start <= end && end <= input.length, \\\"Invalid slice indices\\\");\\n        uint256[] memory result = new uint256[](end - start);\\n        for (uint256 i = start; i < end; i++) {\\n            result[i - start] = input[i];\\n        }\\n        return result;\\n    }\\n\\n    // stringToUint is used to convert a string like \\\"45\\\" to a uint256 4\\n    function stringToUint(string memory s) internal pure returns (uint256) {\\n        bytes memory b = bytes(s);\\n        uint256 result = 0;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            // TODO: Currently truncates decimals\\n            if (b[i] == 0x2E) {\\n                return result;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    // getDomainFromEmail is used to extract the domain from an email i.e. the part after the @\\n    function getDomainFromEmail(string memory fromEmail) internal pure returns (string memory) {\\n        bytes memory emailBytes = bytes(fromEmail);\\n        uint256 atIndex;\\n        for (uint256 i = 0; i < emailBytes.length; i++) {\\n            if (emailBytes[i] == \\\"@\\\") {\\n                atIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory domainBytes = new bytes(emailBytes.length - atIndex - 1);\\n        for (uint256 j = 0; j < domainBytes.length; j++) {\\n            domainBytes[j] = emailBytes[atIndex + 1 + j];\\n        }\\n        return bytes32ToString(bytes32(bytes(domainBytes)));\\n    }\\n\\n    function removeTrailingZeros(string memory input) public pure returns (string memory) {\\n        bytes memory inputBytes = bytes(input);\\n        uint256 endIndex = inputBytes.length;\\n\\n        for (uint256 i = 0; i < inputBytes.length; i++) {\\n            if (inputBytes[i] == 0) {\\n                endIndex = i;\\n                break;\\n            }\\n        }\\n\\n        bytes memory resultBytes = new bytes(endIndex);\\n        for (uint256 i = 0; i < endIndex; i++) {\\n            resultBytes[i] = inputBytes[i];\\n        }\\n\\n        return string(resultBytes);\\n    }\\n\\n    // Upper/lower string utils from https://github.com/willitscale/solidity-util/blob/master/lib/Strings.sol\\n    /**\\n     * Upper\\n     *\\n     * Converts all the values of a string to their corresponding upper case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to upper case\\n     * @return string\\n     */\\n    function upper(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _upper(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Converts all the values of a string to their corresponding lower case\\n     * value.\\n     *\\n     * @param _base When being used for a data type this is the extended object\\n     *              otherwise this is the string base to convert to lower case\\n     * @return string\\n     */\\n    function lower(string memory _base) public pure returns (string memory) {\\n        bytes memory _baseBytes = bytes(_base);\\n        for (uint256 i = 0; i < _baseBytes.length; i++) {\\n            _baseBytes[i] = _lower(_baseBytes[i]);\\n        }\\n        return string(_baseBytes);\\n    }\\n\\n    /**\\n     * Upper\\n     *\\n     * Convert an alphabetic character to upper case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to upper case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a lower case otherwise returns the original value\\n     */\\n    function _upper(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x61 && _b1 <= 0x7A) {\\n            return bytes1(uint8(_b1) - 32);\\n        }\\n\\n        return _b1;\\n    }\\n\\n    /**\\n     * Lower\\n     *\\n     * Convert an alphabetic character to lower case and return the original\\n     * value when not alphabetic\\n     *\\n     * @param _b1 The byte to be converted to lower case\\n     * @return bytes1 The converted value if the passed value was alphabetic\\n     *                and in a upper case otherwise returns the original value\\n     */\\n    function _lower(bytes1 _b1) private pure returns (bytes1) {\\n        if (_b1 >= 0x41 && _b1 <= 0x5A) {\\n            return bytes1(uint8(_b1) + 32);\\n        }\\n\\n        return _b1;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/AddressArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: MIT\\n*/\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title AddressArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Address Arrays\\n *\\n * CHANGELOG:\\n * - 4/21/21: Added validatePairsWithArray methods\\n */\\nlibrary AddressArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(address[] memory A, address a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(address[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            address current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(address[] memory A, address a)\\n        internal\\n        pure\\n        returns (address[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            (address[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The address to remove\\n     */\\n    function removeStorage(address[] storage A, address a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"Address not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(address[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (address[] memory, address)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        address[] memory newAddresses = new address[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newAddresses[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newAddresses[j - 1] = A[j];\\n        }\\n        return (newAddresses, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Bytes32ArrayUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.17;\\n\\n/**\\n * @title Bytes32ArrayUtils\\n * @author ZKP2P\\n *\\n * Fork of Set Protocol's AddressArrayUtils library adapted for usage with bytes32 arrays.\\n */\\nlibrary Bytes32ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(bytes32[] memory A, bytes32 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n    * Returns true if the value is present in the list. Uses indexOf internally.\\n    * @param A The input array to search\\n    * @param a The value to find\\n    * @return Returns isIn for the first occurrence starting from index 0\\n    */\\n    function contains(bytes32[] memory A, bytes32 a) internal pure returns (bool) {\\n        (, bool isIn) = indexOf(A, a);\\n        return isIn;\\n    }\\n\\n    /**\\n    * Returns true if there are 2 elements that are the same in an array\\n    * @param A The input array to search\\n    * @return Returns boolean for the first occurrence of a duplicate\\n    */\\n    function hasDuplicate(bytes32[] memory A) internal pure returns(bool) {\\n        require(A.length > 0, \\\"A is empty\\\");\\n\\n        for (uint256 i = 0; i < A.length - 1; i++) {\\n            bytes32 current = A[i];\\n            for (uint256 j = i + 1; j < A.length; j++) {\\n                if (current == A[j]) {\\n                    return true;\\n                }\\n            }\\n        }\\n        return false;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     * @return Returns the array with the object removed.\\n     */\\n    function remove(bytes32[] memory A, bytes32 a)\\n        internal\\n        pure\\n        returns (bytes32[] memory)\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            (bytes32[] memory _A,) = pop(A, index);\\n            return _A;\\n        }\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(bytes32[] storage A, bytes32 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"bytes32 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n\\n    /**\\n    * Removes specified index from array\\n    * @param A The input array to search\\n    * @param index The index to remove\\n    * @return Returns the new array and the removed entry\\n    */\\n    function pop(bytes32[] memory A, uint256 index)\\n        internal\\n        pure\\n        returns (bytes32[] memory, bytes32)\\n    {\\n        uint256 length = A.length;\\n        require(index < A.length, \\\"Index must be < A length\\\");\\n        bytes32[] memory newBytes = new bytes32[](length - 1);\\n        for (uint256 i = 0; i < index; i++) {\\n            newBytes[i] = A[i];\\n        }\\n        for (uint256 j = index + 1; j < length; j++) {\\n            newBytes[j - 1] = A[j];\\n        }\\n        return (newBytes, A[index]);\\n    }\\n}\\n\"\n    },\n    \"contracts/external/DateTime.sol\": {\n      \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// ----------------------------------------------------------------------------\\n// DateTime Library v2.0\\n//\\n// A gas-efficient Solidity date and time library\\n//\\n// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary\\n//\\n// Tested date range 1970/01/01 to 2345/12/31\\n//\\n// Conventions:\\n// Unit      | Range         | Notes\\n// :-------- |:-------------:|:-----\\n// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC\\n// year      | 1970 ... 2345 |\\n// month     | 1 ... 12      |\\n// day       | 1 ... 31      |\\n// hour      | 0 ... 23      |\\n// minute    | 0 ... 59      |\\n// second    | 0 ... 59      |\\n// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday\\n//\\n//\\n// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.\\n//\\n// NOTE: This library has been pruned to keep only functions needed by zkp2p\\n// ----------------------------------------------------------------------------\\n\\nlibrary DateTime {\\n    uint256 constant SECONDS_PER_DAY = 24 * 60 * 60;\\n    uint256 constant SECONDS_PER_HOUR = 60 * 60;\\n    uint256 constant SECONDS_PER_MINUTE = 60;\\n    int256 constant OFFSET19700101 = 2440588;\\n\\n    uint256 constant DOW_MON = 1;\\n    uint256 constant DOW_TUE = 2;\\n    uint256 constant DOW_WED = 3;\\n    uint256 constant DOW_THU = 4;\\n    uint256 constant DOW_FRI = 5;\\n    uint256 constant DOW_SAT = 6;\\n    uint256 constant DOW_SUN = 7;\\n\\n    // ------------------------------------------------------------------------\\n    // Calculate the number of days from 1970/01/01 to year/month/day using\\n    // the date conversion algorithm from\\n    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php\\n    // and subtracting the offset 2440588 so that 1970/01/01 is day 0\\n    //\\n    // days = day\\n    //      - 32075\\n    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4\\n    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12\\n    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4\\n    //      - offset\\n    // ------------------------------------------------------------------------\\n    function _daysFromDate(uint256 year, uint256 month, uint256 day) internal pure returns (uint256 _days) {\\n        require(year >= 1970);\\n        int256 _year = int256(year);\\n        int256 _month = int256(month);\\n        int256 _day = int256(day);\\n\\n        int256 __days = _day - 32075 + (1461 * (_year + 4800 + (_month - 14) / 12)) / 4\\n            + (367 * (_month - 2 - ((_month - 14) / 12) * 12)) / 12\\n            - (3 * ((_year + 4900 + (_month - 14) / 12) / 100)) / 4 - OFFSET19700101;\\n\\n        _days = uint256(__days);\\n    }\\n\\n    function timestampFromDateTime(\\n        uint256 year,\\n        uint256 month,\\n        uint256 day,\\n        uint256 hour,\\n        uint256 minute,\\n        uint256 second\\n    )\\n        internal\\n        pure\\n        returns (uint256 timestamp)\\n    {\\n        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR\\n            + minute * SECONDS_PER_MINUTE + second;\\n    }\\n}\\n\"\n    },\n    \"contracts/external/Uint256ArrayUtils.sol\": {\n      \"content\": \"/*\\n    Copyright 2020 Set Labs Inc.\\n\\n    Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n    you may not use this file except in compliance with the License.\\n    You may obtain a copy of the License at\\n\\n    http://www.apache.org/licenses/LICENSE-2.0\\n\\n    Unless required by applicable law or agreed to in writing, software\\n    distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n    See the License for the specific language governing permissions and\\n    limitations under the License.\\n\\n    SPDX-License-Identifier: Apache-2.0\\n*/\\n\\npragma solidity ^0.8.18;\\n\\n/**\\n * @title Uint256ArrayUtils\\n * @author Set Protocol\\n *\\n * Utility functions to handle Uint256 Arrays\\n */\\nlibrary Uint256ArrayUtils {\\n\\n    uint256 constant internal MAX_INT = 2**256 - 1;\\n\\n    /**\\n     * Finds the index of the first occurrence of the given element.\\n     * @param A The input array to search\\n     * @param a The value to find\\n     * @return Returns (index and isIn) for the first occurrence starting from index 0\\n     */\\n    function indexOf(uint256[] memory A, uint256 a) internal pure returns (uint256, bool) {\\n        uint256 length = A.length;\\n        for (uint256 i = 0; i < length; i++) {\\n            if (A[i] == a) {\\n                return (i, true);\\n            }\\n        }\\n        return (MAX_INT, false);\\n    }\\n\\n    /**\\n     * Returns the combination of the two arrays\\n     * @param A The first array\\n     * @param B The second array\\n     * @return Returns A extended by B\\n     */\\n    function extend(uint256[] memory A, uint256[] memory B) internal pure returns (uint256[] memory) {\\n        uint256 aLength = A.length;\\n        uint256 bLength = B.length;\\n        uint256[] memory newUints = new uint256[](aLength + bLength);\\n        for (uint256 i = 0; i < aLength; i++) {\\n            newUints[i] = A[i];\\n        }\\n        for (uint256 j = 0; j < bLength; j++) {\\n            newUints[aLength + j] = B[j];\\n        }\\n        return newUints;\\n    }\\n\\n    /**\\n     * @param A The input array to search\\n     * @param a The bytes32 to remove\\n     */\\n    function removeStorage(uint256[] storage A, uint256 a)\\n        internal\\n    {\\n        (uint256 index, bool isIn) = indexOf(A, a);\\n        if (!isIn) {\\n            revert(\\\"uint256 not in array.\\\");\\n        } else {\\n            uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here\\n            if (index != lastIndex) { A[index] = A[lastIndex]; }\\n            A.pop();\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon3.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon3 {\\n    function poseidon(uint256[3] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/interfaces/IPoseidon6.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IPoseidon6 {\\n    function poseidon(uint256[6] memory _a) external pure returns(uint256);\\n}\\n\"\n    },\n    \"contracts/lib/StringConversionUtils.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\n// Building on zk-email's StringUtils library we add the ability to handle decimals when\\n// converting from string to Uint\\nlibrary StringConversionUtils {\\n    \\n    /**\\n     * @notice Function that parses numbers returned as strings including floating point numbers. Returned floating point\\n     * numbers are to have the desired amount of decimal specified. If the stringified version of the floating point\\n     * number has more decimal places than desired then the function will revert in order to be maximally safe. If\\n     * the returned number has multiple floating points then the function will revert.\\n     *\\n     * Examples: _s = \\\"12.34\\\", _expectedDecimals = 6 => 12340000\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 2 => 1234\\n     *           _s = \\\"12.34\\\", _expectedDecimals = 1 => REVERT (we never want loss of precision only addition)\\n     *           _s = \\\"12.34.56\\\", _expectedDecimals = 6 => REVERT (Invalid number)\\n     *\\n     * @param _s                    String being processed\\n     * @param _desiredDecimals      Desired amount of decimal places\\n     */\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) internal pure returns (uint256) {\\n        return stringToUint(_s, 0x2E, _desiredDecimals);\\n    }\\n\\n    function stringToUint(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        internal\\n        pure\\n        returns (uint256)\\n    {\\n        bytes memory b = bytes(_s);\\n\\n        uint256 result = 0;\\n        uint256 decimalPlaces = 0;\\n\\n        bool decimals = false;\\n        for (uint256 i = 0; i < b.length; i++) {\\n            if (b[i] >= 0x30 && b[i] <= 0x39) {\\n                result = result * 10 + (uint256(uint8(b[i])) - 48);\\n            }\\n\\n            if (decimals) {\\n                decimalPlaces++;\\n            }\\n\\n            if (b[i] == _decimalCharacter) {\\n                require(decimals == false, \\\"String has multiple decimals\\\");\\n                decimals = true;\\n            }\\n        }\\n\\n        require(decimalPlaces <= _desiredDecimals, \\\"String has too many decimal places\\\");\\n        return result * (10 ** (_desiredDecimals - decimalPlaces));\\n    }\\n\\n    /**\\n     * @notice Function that returns a substring from _startIndex to _endIndex (non-inclusive).\\n     *\\n     * @param _str           String being processed\\n     * @param _startIndex    Index to start parsing from\\n     * @param _endIndex      Index to stop parsing at (index not included in result)\\n     */\\n    function substring(string memory _str, uint _startIndex, uint _endIndex) internal pure returns (string memory ) {\\n        bytes memory strBytes = bytes(_str);\\n        bytes memory result = new bytes(_endIndex-_startIndex);\\n        for(uint i = _startIndex; i < _endIndex; i++) {\\n            result[i-_startIndex] = strBytes[i];\\n        }\\n        return string(result);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/StringConversionUtilsMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringConversionUtils } from \\\"../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract StringConversionUtilsMock {\\n\\n    using StringConversionUtils for string;\\n\\n    function stringToUint(string memory _s, uint256 _desiredDecimals) public pure returns (uint256) {\\n        return _s.stringToUint(_desiredDecimals);\\n    }\\n\\n    function stringToUintDefinedCharacter(\\n        string memory _s,\\n        bytes1 _decimalCharacter,\\n        uint256 _desiredDecimals\\n    )\\n        public\\n        pure\\n        returns (uint256)\\n    {\\n        return _s.stringToUint(_decimalCharacter, _desiredDecimals);\\n    }\\n}\\n\"\n    },\n    \"contracts/mocks/USDCMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract USDCMock is ERC20 {\\n\\n    constructor(\\n        uint256 _mintAmount,\\n        string memory name,\\n        string memory symbol\\n    )\\n        ERC20(name, symbol)\\n    {\\n        _mint(msg.sender, _mintAmount);\\n    }\\n\\n    function decimals() public pure override returns (uint8) {\\n        return 6;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessor is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapter public mailserverKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _mailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapter _mailserverKeyHashAdapter) external onlyOwner {\\n        mailserverKeyHashAdapter = _mailserverKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function getMailserverKeyHash() public view returns (bytes32) {\\n        return IKeyHashAdapter(mailserverKeyHashAdapter).mailserverKeyHash();\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/BaseProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"./nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract BaseProcessorV2 is Ownable {\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRamp() {\\n        require(msg.sender == ramp, \\\"Only Ramp can call this function\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    address public immutable ramp;\\n    IKeyHashAdapterV2 public mailServerKeyHashAdapter;\\n    INullifierRegistry public nullifierRegistry;\\n    bytes public emailFromAddress;\\n    uint256 public timestampBuffer;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _mailServerKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Ownable()\\n    {\\n        ramp = _ramp;\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n        nullifierRegistry = _nullifierRegistry;\\n        emailFromAddress = bytes(_emailFromAddress);\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHashAdapter(IKeyHashAdapterV2 _mailServerKeyHashAdapter) external onlyOwner {\\n        mailServerKeyHashAdapter = _mailServerKeyHashAdapter;\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the from email address for validated emails. Check that email address is properly\\n     * padded (if necessary). Padding will be dependent on if unpacking functions cut trailing 0s or not.\\n     *\\n     * @param _emailFromAddress    The from email address for validated emails, MUST BE PROPERLY PADDED\\n     */\\n    function setEmailFromAddress(string memory _emailFromAddress) external onlyOwner {\\n        emailFromAddress = bytes(_emailFromAddress);\\n    }\\n\\n    /**\\n     * @notice ONLY OWNER: Sets the timestamp buffer for validated emails. This is the amount of time in seconds\\n     * that the timestamp can be off by and still be considered valid. Necessary to build in flexibility with L2\\n     * timestamps.\\n     *\\n     * @param _timestampBuffer    The timestamp buffer for validated emails\\n     */\\n    function setTimestampBuffer(uint256 _timestampBuffer) external onlyOwner {\\n        timestampBuffer = _timestampBuffer;\\n    }\\n\\n    /* ============ External Getters ============ */\\n\\n    function getEmailFromAddress() external view returns (bytes memory) {\\n        return emailFromAddress;\\n    }\\n\\n    function isMailServerKeyHash(bytes32 _keyHash) public view returns (bool) {\\n        return IKeyHashAdapterV2(mailServerKeyHashAdapter).isMailServerKeyHash(_keyHash);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _validateAndAddNullifier(bytes32 _nullifier) internal {\\n        require(!nullifierRegistry.isNullified(_nullifier), \\\"Nullifier has already been used\\\");\\n        nullifierRegistry.addNullifier(_nullifier);\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapter {\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external;\\n    function mailserverKeyHash() external view returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/IKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IKeyHashAdapterV2 {\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external;\\n    function getMailServerKeyHashes() external view returns (bytes32[] memory);\\n    function isMailServerKeyHash(bytes32 _mailserverKeyHash) external view returns (bool);\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapter.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapter } from \\\"./IKeyHashAdapter.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapter is Ownable, IKeyHashAdapter {\\n    \\n    /* ============ State Variables ============ */\\n\\n    bytes32 public mailserverKeyHash;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32 _mailserverKeyHash\\n    )\\n        Ownable()\\n    {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function setMailserverKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        mailserverKeyHash = _mailserverKeyHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/keyHashAdapters/ManagedKeyHashAdapterV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { IKeyHashAdapterV2 } from \\\"./IKeyHashAdapterV2.sol\\\";\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract ManagedKeyHashAdapterV2 is Ownable, IKeyHashAdapterV2 {\\n    \\n    using Bytes32ArrayUtils for bytes32[];\\n\\n    /* ============ Events ============ */\\n    event MailServerKeyHashAdded(bytes32 mailserverKeyHash);\\n    event MailServerKeyHashRemoved(bytes32 mailserverKeyHash);\\n\\n    /* ============ State Variables ============ */\\n\\n    mapping(bytes32 => bool) public isMailServerKeyHash;\\n    bytes32[] public mailServerKeyHashes;\\n\\n    /* ============ Constructor ============ */\\n\\n    constructor(\\n        bytes32[] memory _mailServerKeyHashes\\n    )\\n        Ownable()\\n    {\\n        for (uint256 i = 0; i < _mailServerKeyHashes.length; i++) {\\n            bytes32 mailserverKeyHash = _mailServerKeyHashes[i];\\n            require(!isMailServerKeyHash[mailserverKeyHash], \\\"Key hash already added\\\");\\n            \\n            isMailServerKeyHash[mailserverKeyHash] = true;\\n            mailServerKeyHashes.push(mailserverKeyHash);\\n        }\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function addMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(!isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash already added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = true;\\n        mailServerKeyHashes.push(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashAdded(_mailserverKeyHash);\\n    }\\n\\n    function removeMailServerKeyHash(bytes32 _mailserverKeyHash) external onlyOwner {\\n        require(isMailServerKeyHash[_mailserverKeyHash], \\\"Key hash not added\\\");\\n\\n        isMailServerKeyHash[_mailserverKeyHash] = false;\\n        mailServerKeyHashes.removeStorage(_mailserverKeyHash);\\n\\n        emit MailServerKeyHashRemoved(_mailserverKeyHash);\\n    }\\n\\n    /* ============ External Getter Functions ============ */\\n\\n    function getMailServerKeyHashes() external view override returns (bytes32[] memory) {\\n        return mailServerKeyHashes;\\n    }\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/INullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface INullifierRegistry {\\n    function addNullifier(bytes32 _nullifier) external;\\n    function isNullified(bytes32 _nullifier) external view returns(bool);\\n}\\n\"\n    },\n    \"contracts/processors/nullifierRegistries/NullifierRegistry.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { AddressArrayUtils } from \\\"../../external/AddressArrayUtils.sol\\\";\\nimport { INullifierRegistry } from \\\"./INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract NullifierRegistry is Ownable, INullifierRegistry {\\n\\n    using AddressArrayUtils for address[];\\n    \\n    /* ============ Events ============ */\\n    event NullifierAdded(bytes32 nullifier, address indexed writer);\\n    event WriterAdded(address writer);\\n    event WriterRemoved(address writer);\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyWriter() {\\n        require(isWriter[msg.sender], \\\"Only addresses with write permissions can call\\\");\\n        _;\\n    }\\n\\n    /* ============ State Variables ============ */\\n    mapping(bytes32 => bool) public isNullified;\\n    mapping(address => bool) public isWriter;\\n    address[] public writers;\\n\\n    /* ============ Constructor ============ */\\n    constructor() Ownable() {}\\n    \\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * ONLY WRITER: Only addresses with permission to write to this contract can call. Stores a nullifier for an email.\\n     *\\n     * @param _nullifier    The nullifier to store\\n     */\\n    function addNullifier(bytes32 _nullifier) external onlyWriter {\\n        require(!isNullified[_nullifier], \\\"Nullifier already exists\\\");\\n\\n        isNullified[_nullifier] = true;\\n\\n        emit NullifierAdded(_nullifier, msg.sender);\\n    }\\n\\n    /* ============ Admin Functions ============ */\\n\\n    /**\\n     * ONLY OWNER: Add address that has write permissions to the registry. Writer must not have been previously added.\\n     *\\n     * @param _newWriter    The nullifier to store\\n     */\\n    function addWritePermission(address _newWriter) external onlyOwner {\\n        require(!isWriter[_newWriter], \\\"Address is already a writer\\\");\\n\\n        isWriter[_newWriter] = true;\\n        writers.push(_newWriter);\\n\\n        emit WriterAdded(_newWriter);\\n    }\\n\\n    /**\\n     * ONLY OWNER: Remove address that has write permissions to the registry. Writer must have been previously added.\\n     *\\n     * @param _removedWriter    The nullifier to store\\n     */\\n    function removeWritePermission(address _removedWriter) external onlyOwner {\\n        require(isWriter[_removedWriter], \\\"Address is not a writer\\\");\\n\\n        isWriter[_removedWriter] = false;\\n        writers.removeStorage(_removedWriter);\\n\\n        emit WriterRemoved(_removedWriter);\\n    }\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getWriters() external view returns(address[] memory) {\\n       return writers;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        string garantiIban;                 // IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n        string garantiName;                 // Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each Garanti account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IGarantiRegistrationProcessor public registrationProcessor;     // Address of registration processor contract, verifies registration e-mails\\n    IGarantiSendProcessor public sendProcessor;                     // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IGarantiRegistrationProcessor _registrationProcessor,\\n        IGarantiSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One Garanti account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _proof            Parameters and signals for registration email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function register(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_proof, _bodyHashProof);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _garantiIban      IBAN number of the depositor with spacing as such: \\\"TR## #### #### #### #### #### ##\\\"\\n     * @param _garantiName      Name given for Garanti IBAN account, necessary for on-rampers to complete on-ramp\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        string memory _garantiIban,\\n        string memory _garantiName,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(isValidIban(_garantiIban), \\\"Invalid IBAN\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            garantiIban: _garantiIban,\\n            garantiName: _garantiName,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _proof            Parameters and signals for send email proof\\n     * @param _bodyHashProof    Parameters and signals for body hash proof\\n     */\\n    function onRamp(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_proof, _bodyHashProof);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IGarantiSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IGarantiRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    function isValidIban(string memory _iban) public pure returns(bool) {\\n        bytes memory ibanBytes = bytes(_iban);\\n        if(ibanBytes.length != 32) { return false; }\\n\\n        for (uint256 i = 0; i < ibanBytes.length; ++i) {\\n            if (i < 2) {\\n                if(ibanBytes[i] < 0x41 || ibanBytes[i] > 0x5a) { return false; }\\n            } else if (i % 5 == 4) {\\n                // i = 4, 9, 14, 19, 24, 29 should be spaces\\n                if(ibanBytes[i] != 0x20) { return false; }\\n            } else {\\n                if(ibanBytes[i] < 0x30 || ibanBytes[i] > 0x39) { return false; }\\n            }\\n        }\\n\\n        return true;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(_proof, _bodyHashProof);\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiName)) == offRamperNameHash, \\\"Offramper id does not match\\\");\\n        require(keccak256(abi.encodePacked(deposit.garantiIban)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an Garanti account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(_proof, _bodyHashProof);\\n\\n        return idHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_registration_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"./interfaces/IGarantiRegistrationProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessor is\\n    Groth16Verifier,\\n    IGarantiRegistrationProcessor,\\n    BaseProcessorV2\\n{\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n        /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IGarantiRegistrationProcessor.RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [10] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[10]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[11] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[11] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/GarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/garanti_send_verifier.sol\\\";\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"./interfaces/IGarantiSendProcessor.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessor is Groth16Verifier, IGarantiSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Public Variables ============ */\\n    IGarantiBodySuffixHashVerifier public bodyHashVerifier;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _garantiMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        IGarantiBodySuffixHashVerifier _bodyHashVerifier,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _garantiMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {\\n        bodyHashVerifier = _bodyHashVerifier;\\n    }\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IGarantiSendProcessor.SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n        require(\\n            bodyHashVerifier.verifyProof(_bodyHashProof.a, _bodyHashProof.b, _bodyHashProof.c, _bodyHashProof.signals),\\n            \\\"Invalid body hash proof\\\"\\n        );\\n\\n        _validateIntermediateHash(_proof.signals, _bodyHashProof.signals);\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [5:10] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 5, 10);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [17:19] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 23, 25).stringToUint(0x2C, 6);\\n\\n        // Signals [10:12] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 10, 12).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [19] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[25]);\\n\\n        // Signals [12:17] is the packed name of the Garanti account owner which must be hashed to get the offRamperNameHash\\n        offRamperNameHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 12, 18)));\\n\\n        // Signals [12:17] is the packed IBAN number which must be hashed to get the offRamperIdHash\\n        offRamperIdHash = keccak256(abi.encodePacked(_parseSignalArray(_proof.signals, 18, 23)));\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[26]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[27]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[28] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n\\n    function _validateIntermediateHash(uint256[28] calldata _sendSignals, uint256[4] calldata _bodyHashSignals) internal pure {\\n        bytes32 intermediateHash = keccak256(abi.encode(_sendSignals[1], _sendSignals[2], _sendSignals[3], _sendSignals[4]));\\n        bytes32 inputHash = keccak256(abi.encode(_bodyHashSignals[0], _bodyHashSignals[1], _bodyHashSignals[2], _bodyHashSignals[3]));\\n        require(intermediateHash == inputHash, \\\"Invalid intermediate or output hash\\\");\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiBodySuffixHashVerifier.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IGarantiBodySuffixHashVerifier {\\n\\n    struct BodySuffixHashProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[4] signals;\\n    }\\n\\n    function verifyProof(\\n        uint[2] calldata _pA,\\n        uint[2][2] calldata _pB,\\n        uint[2] calldata _pC,\\n        uint[4] calldata _pubSignals\\n    )\\n        external\\n        view\\n        returns (bool);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[11] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/interfaces/IGarantiSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"./IGarantiBodySuffixHashVerifier.sol\\\";\\n\\ninterface IGarantiSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[28] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata _bodyHashProof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiRegistrationProcessor } from \\\"../interfaces/IGarantiRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiRegistrationProcessorMock is IGarantiRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/garanti/mocks/GarantiSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IGarantiBodySuffixHashVerifier } from \\\"../interfaces/IGarantiBodySuffixHashVerifier.sol\\\";\\nimport { IGarantiSendProcessor } from \\\"../interfaces/IGarantiSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract GarantiSendProcessorMock is IGarantiSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof,\\n        IGarantiBodySuffixHashVerifier.BodySuffixHashProof calldata /*_bodyHashProof*/\\n    )\\n        public\\n        pure\\n        override\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperNameHash,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4]),\\n            bytes32(_proof.signals[5])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon3 } from \\\"../../interfaces/IPoseidon3.sol\\\";\\nimport { IPoseidon6 } from \\\"../../interfaces/IPoseidon6.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRamp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed idHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed idHash,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the idHash\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated idHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 idHash;                     // Hash of payment processor id\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[8] upiId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's idHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's idHash\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of idHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of idHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one idHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that idHash. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each HDFC account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].idHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon3 public immutable poseidon3;                           // Poseidon hashing contract\\n    IPoseidon6 public immutable poseidon6;                          // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    IHDFCSendProcessor public sendProcessor;                        // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of idHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (idHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon3 _poseidon3,\\n        IPoseidon6 _poseidon6,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon3 = _poseidon3;\\n        poseidon6 = _poseidon6;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        IHDFCSendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One HDFC account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].idHash == bytes32(0), \\\"Account already associated with idHash\\\");\\n        bytes32 idHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].idHash = idHash;\\n\\n        emit AccountRegistered(msg.sender, idHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _upiId            The packed upi ID of the depositor\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[8] memory _upiId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        AccountInfo storage account = accounts[msg.sender];\\n        account.deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            upiId: _upiId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, account.idHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using idHash). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 idHash = accounts[msg.sender].idHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorIdHash = accounts[deposit.depositor].idHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorIdHash].denyList.isDenied[idHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[idHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[idHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorIdHash != idHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(idHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[idHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, idHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            accounts[intent.onRamper].idHash == accounts[msg.sender].idHash,\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].idHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds an idHash to a depositor's deny list. If an address associated with the banned idHash attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the idHash being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].idHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a idHash from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the idHash being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].idHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(IHDFCSendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].idHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].idHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].idHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].idHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].idHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: accounts[deposit.depositor].idHash,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _idHash,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_idHash, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].idHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[15] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            IHDFCSendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(bytes32(_getUpiIdHash(deposit.upiId)) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].idHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has an HDFC account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 idHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return idHash;\\n    }\\n\\n    /**\\n     * @notice Returns the poseidon hash of the given raw UPI ID    \\n     */\\n    function _getUpiIdHash(uint256[8] memory _upiId) internal view returns (bytes32) {\\n        uint256[6] memory temp1;\\n        uint256[3] memory temp2;\\n\\n        for (uint256 i = 0; i < 6; ++i) {\\n            temp1[i] = _upiId[i];\\n        }\\n        temp2[0] = poseidon6.poseidon(temp1);\\n        temp2[1] = _upiId[6];\\n        temp2[2] = _upiId[7];\\n\\n        return bytes32(poseidon3.poseidon(temp2));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed userIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/HDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/hdfc_send_verifier.sol\\\";\\nimport { HDFCTimestampParsing } from \\\"./lib/HDFCTimestampParsing.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IHDFCSendProcessor } from \\\"./interfaces/IHDFCSendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessor is Groth16Verifier, IHDFCSendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _hdfcMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _hdfcMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        IHDFCSendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        )\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:6] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [6:11] are the packed timestamp, the timestamp is returned as a string in the format, that we need to\\n        // parse and convert to a unix timestamp\\n        string memory rawTimestamp = _parseSignalArray(_proof.signals, 6, 11);\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = HDFCTimestampParsing._dateStringToTimestamp(rawTimestamp) + timestampBuffer;\\n\\n        // Signals [11] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[11]);\\n\\n        // Signals [12] is the packed offRamper UPI ID hash\\n        offRamperIdHash = bytes32(_proof.signals[12]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[13]));\\n\\n        // Signals [14] is intentHash\\n        intentHash = bytes32(_proof.signals[14]);\\n    }\\n    \\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[15] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IHDFCSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IHDFCSendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[15] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/lib/HDFCTimestampParsing.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { DateTime } from \\\"../../../external/DateTime.sol\\\";\\n\\nimport { StringConversionUtils } from \\\"../../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\nlibrary HDFCTimestampParsing {\\n\\n    using StringConversionUtils for string;\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function _dateStringToTimestamp(string memory _dateString) internal pure returns (uint256) {\\n        string[8] memory extractedStrings;\\n        uint256 breakCounter;\\n        uint256 lastBreak;\\n        for (uint256 i = 0; i < bytes(_dateString).length; i++) {\\n            if (bytes(_dateString)[i] == 0x20 || bytes(_dateString)[i] == 0x3a) {\\n                extractedStrings[breakCounter] = _dateString.substring(lastBreak, i);\\n                lastBreak = i + 1;\\n                breakCounter++;\\n            }\\n        }\\n        // Add last substring to array\\n        extractedStrings[breakCounter] = _dateString.substring(lastBreak, bytes(_dateString).length);\\n\\n        // Check that exactly 8 substrings were found (string is split at 7 different places)\\n        require(breakCounter == 7, \\\"Invalid date string\\\");\\n\\n        uint256 unOffsetTimestamp = DateTime.timestampFromDateTime(\\n            extractedStrings[3].stringToUint(0), // year\\n            _parseMonth(extractedStrings[2]), // month\\n            extractedStrings[1].stringToUint(0), // day\\n            extractedStrings[4].stringToUint(0), // hour\\n            extractedStrings[5].stringToUint(0), // minute\\n            extractedStrings[6].stringToUint(0) // second\\n        );\\n\\n        return _calculateTimestampWithOffset(unOffsetTimestamp, extractedStrings[7]);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) internal pure returns (uint256) {\\n        require(bytes(_timeOffsetString).length == 5, \\\"Invalid timezone offset\\\");\\n        uint256 tzHours = _timeOffsetString.substring(1, 3).stringToUint(0);\\n        uint256 tzMinutes = _timeOffsetString.substring(3, 5).stringToUint(0);\\n\\n        uint256 rawOffset = tzHours * 3600 + tzMinutes * 60;\\n\\n        // Check if tz offset is positive or negative relative to GMT, 0x2b is the hex value for \\\"+\\\" meaning the tz is ahead of GMT and must\\n        // be subtracted\\n        bytes1 _offsetDirection = bytes(_timeOffsetString.substring(0, 1))[0];\\n        return _offsetDirection == 0x2b ? unOffsetTimestamp - rawOffset : unOffsetTimestamp + rawOffset;\\n    }\\n\\n    function _parseMonth(string memory _month) internal pure returns (uint256) {\\n        if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jan\\\")) {\\n            return 1;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Feb\\\")) {\\n            return 2;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Mar\\\")) {\\n            return 3;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Apr\\\")) {\\n            return 4;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"May\\\")) {\\n            return 5;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jun\\\")) {\\n            return 6;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Jul\\\")) {\\n            return 7;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Aug\\\")) {\\n            return 8;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Sep\\\")) {\\n            return 9;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Oct\\\")) {\\n            return 10;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Nov\\\")) {\\n            return 11;\\n        } else if (keccak256(abi.encodePacked(_month)) == keccak256(\\\"Dec\\\")) {\\n            return 12;\\n        } else {\\n            revert(\\\"Invalid month\\\");\\n        }\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 userIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IHDFCSendProcessor } from \\\"../interfaces/IHDFCSendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCSendProcessorMock is IHDFCSendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 onRamperIdHash, bytes32 offRamperIdHash, bytes32 intentHash)\\n    {\\n        return(\\n            _proof.signals[0],\\n            _proof.signals[1],\\n            bytes32(_proof.signals[2]),\\n            bytes32(_proof.signals[3]),\\n            bytes32(_proof.signals[4])\\n        );\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/hdfc/mocks/HDFCTimestampParsingMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { HDFCTimestampParsing } from \\\"../lib/HDFCTimestampParsing.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract HDFCTimestampParsingMock {\\n\\n    /**\\n     * @notice Iterates through every character in the date string and splits the string at each space or colon. Function will revert\\n     * if there are not 8 substrings formed from the split. The substrings are then converted to uints and passed to the DateTime lib\\n     * to get the unix timestamp. This function is specific to the date format used by HDFC, not suitable for use with other date formats.\\n     */\\n    function dateStringToTimestamp(string memory _dateString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._dateStringToTimestamp(_dateString);\\n    }\\n\\n    /**\\n     * @notice Adds or subtracts an offset from the calculated unOffset timestamp based on the timezone offset string. The timezone offset\\n     * string is of the format \\\"+0530\\\" or \\\"-0530\\\" where the first character is either a \\\"+\\\" or a \\\"-\\\" and the next 4 characters are hhmm. If\\n     * the _timeOffsetString is \\\"+0530\\\" then we subtract 5 hours and 30 minutes (19800s) from the unOffset timestamp, to get a GMT timestamp.\\n     * We constrain the _timeOffsetString to be 5 characters long to be of the format +/-hhmm.\\n     *\\n     * @param unOffsetTimestamp     The unix timestamp without any timezone offset applied\\n     * @param _timeOffsetString     The timezone offset string indicating the magnitude and direction of the timezone offset\\n     */\\n    function _calculateTimestampWithOffset(uint256 unOffsetTimestamp, string memory _timeOffsetString) external pure returns (uint256) {\\n        return HDFCTimestampParsing._calculateTimestampWithOffset(unOffsetTimestamp, _timeOffsetString);\\n    }\\n\\n    function _parseMonth(string memory _month) external pure returns (uint256) {\\n        return HDFCTimestampParsing._parseMonth(_month);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/IRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessor {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n        view\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/interfaces/ISendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface ISendProcessor {\\n\\n    struct SendProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[12] signals;\\n    }\\n\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        external\\n    returns(uint256, uint256, bytes32, bytes32, bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoRegistrationProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IRegistrationProcessor } from \\\"../interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorMock is IRegistrationProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(bytes32 onRamperIdHash)\\n    {\\n        return(bytes32(_proof.signals[1]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/mocks/VenmoSendProcessorMock.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { ISendProcessor } from \\\"../interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorMock is ISendProcessor {\\n\\n    /* ============ Constructor ============ */\\n    constructor() {}\\n\\n    /* ============ External View Functions ============ */\\n    function processProof(\\n        SendProof calldata _proof\\n    )\\n        public\\n        pure\\n        override\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        return(_proof.signals[0], _proof.signals[1], bytes32(_proof.signals[2]), bytes32(_proof.signals[3]), bytes32(_proof.signals[4]));\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/Ramp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract Ramp is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(accounts[msg.sender].venmoIdHash != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRegistrationProcessor public registrationProcessor;            // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool internal isInitialized;                                    // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessor _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(accounts[msg.sender].venmoIdHash == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(accounts[msg.sender].venmoIdHash == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = accounts[msg.sender].venmoIdHash;\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = accounts[deposit.depositor].venmoIdHash;\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(intent.onRamper == msg.sender, \\\"Sender must be the on-ramper\\\");\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[accounts[intent.onRamper].venmoIdHash].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = accounts[msg.sender].venmoIdHash;\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessor _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return accounts[_account];\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[accounts[_account].venmoIdHash].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[accounts[_account].venmoIdHash].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[accounts[_account].venmoIdHash].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            Intent memory intent = intents[_intentHashes[i]];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intent: intent,\\n                onRamperIdHash: accounts[intent.onRamper].venmoIdHash\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[accounts[intent.onRamper].venmoIdHash].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(accounts[deposit.depositor].venmoIdHash == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(accounts[intent.onRamper].venmoIdHash == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        view\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessor.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoRegistrationProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessor } from \\\"./interfaces/IRegistrationProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessor is Groth16Verifier, IRegistrationProcessor, BaseProcessor {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessor.RegistrationProof calldata _proof\\n    )\\n        public\\n        view\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v1/VenmoSendProcessor.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessor } from \\\"../../processors/BaseProcessor.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v1.sol\\\";\\nimport { IKeyHashAdapter } from \\\"../../processors/keyHashAdapters/IKeyHashAdapter.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"./interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessor is Groth16Verifier, ISendProcessor, BaseProcessor {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapter _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress\\n    )\\n        Groth16Verifier()\\n        BaseProcessor(_ramp, _venmoMailserverKeyHashAdapter, _nullifierRegistry, _emailFromAddress)\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(bytes32(_proof.signals[0]) == getMailserverKeyHash(), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0);\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRamp.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { Ramp } from \\\"../../venmo-v1/Ramp.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRamp {\\n    function getAccountInfo(address _account) external view returns (Ramp.AccountInfo memory);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/interfaces/IRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.18;\\n\\ninterface IRegistrationProcessorV2 {\\n\\n    struct RegistrationProof {\\n        uint256[2] a;\\n        uint256[2][2] b;\\n        uint256[2] c;\\n        uint256[5] signals;\\n    }\\n\\n    function processProof(\\n        RegistrationProof calldata _proof\\n    )\\n        external\\n    returns (bytes32);\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRampV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport { Bytes32ArrayUtils } from \\\"../../external/Bytes32ArrayUtils.sol\\\";\\nimport { Uint256ArrayUtils } from \\\"../../external/Uint256ArrayUtils.sol\\\";\\n\\nimport { IPoseidon } from \\\"../../interfaces/IPoseidon.sol\\\";\\nimport { IRamp } from \\\"./interfaces/IRamp.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRampV2 is Ownable {\\n\\n    using Bytes32ArrayUtils for bytes32[];\\n    using Uint256ArrayUtils for uint256[];\\n\\n    /* ============ Events ============ */\\n    event AccountRegistered(address indexed accountOwner, bytes32 indexed venmoIdHash);\\n    event DepositReceived(\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        uint256 amount,\\n        uint256 conversionRate\\n    );\\n    event IntentSignaled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        bytes32 indexed venmoId,\\n        address to,\\n        uint256 amount,\\n        uint256 timestamp\\n    );\\n\\n    event IntentPruned(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId\\n    );\\n    // Do we want to emit the onRamper or the venmoId\\n    event IntentFulfilled(\\n        bytes32 indexed intentHash,\\n        uint256 indexed depositId,\\n        address indexed onRamper,\\n        address to,\\n        uint256 amount,\\n        uint256 feeAmount\\n    );\\n    // Do we want to emit the depositor or the venmoId\\n    event DepositWithdrawn(\\n        uint256 indexed depositId,\\n        address indexed depositor,\\n        uint256 amount\\n    );\\n\\n    event DepositClosed(uint256 depositId, address depositor);\\n    event UserAddedToDenylist(bytes32 listOwner, bytes32 deniedUser);\\n    event UserRemovedFromDenylist(bytes32 listOwner, bytes32 approvedUser);\\n    event MinDepositAmountSet(uint256 minDepositAmount);\\n    event MaxOnRampAmountSet(uint256 maxOnRampAmount);\\n    event IntentExpirationPeriodSet(uint256 intentExpirationPeriod);\\n    event OnRampCooldownPeriodSet(uint256 onRampCooldownPeriod);\\n    event SustainabilityFeeUpdated(uint256 fee);\\n    event SustainabilityFeeRecipientUpdated(address feeRecipient);\\n    event NewSendProcessorSet(address sendProcessor);\\n    event NewRegistrationProcessorSet(address registrationProcessor);\\n    event NewReceiveProcessorSet(address receiveProcessor);\\n\\n    /* ============ Structs ============ */\\n\\n    // Each Account is tied to a GlobalAccount via its associated venmoIdHash. Each account is represented by an Ethereum address\\n    // and is allowed to have at most 5 deposits associated with it.\\n    struct AccountInfo {\\n        bytes32 venmoIdHash;                // Poseidon hash of account's venmoId\\n        uint256[] deposits;                 // Array of open account deposits\\n    }\\n\\n    struct Deposit {\\n        address depositor;\\n        uint256[3] packedVenmoId;\\n        uint256 depositAmount;              // Amount of USDC deposited\\n        uint256 remainingDeposits;          // Amount of remaining deposited liquidity\\n        uint256 outstandingIntentAmount;    // Amount of outstanding intents (may include expired intents)\\n        uint256 conversionRate;             // Conversion required by off-ramper between USDC/USD\\n        bytes32[] intentHashes;             // Array of hashes of all open intents (may include some expired if not pruned)\\n    }\\n\\n    struct DepositWithAvailableLiquidity {\\n        uint256 depositId;                  // ID of the deposit\\n        bytes32 depositorIdHash;            // Depositor's venmoIdHash \\n        Deposit deposit;                    // Deposit struct\\n        uint256 availableLiquidity;         // Amount of liquidity available to signal intents (net of expired intents)\\n    }\\n\\n    struct Intent {\\n        address onRamper;                   // On-ramper's address\\n        address to;                         // Address to forward funds to (can be same as onRamper)\\n        uint256 deposit;                    // ID of the deposit the intent is signaling on\\n        uint256 amount;                     // Amount of USDC the on-ramper signals intent for on-chain\\n        uint256 intentTimestamp;            // Timestamp of when the intent was signaled\\n    }\\n\\n    struct IntentWithOnRamperId {\\n        bytes32 intentHash;                 // Intent hash\\n        Intent intent;                      // Intent struct\\n        bytes32 onRamperIdHash;             // Poseidon hash of the on-ramper's venmoId\\n    }\\n\\n    struct DenyList {\\n        bytes32[] deniedUsers;              // Array of venmoIdHashes that are denied from taking depositors liquidity\\n        mapping(bytes32 => bool) isDenied;  // Mapping of venmoIdHash to boolean indicating if the user is denied\\n    }\\n\\n    // A Global Account is defined as an account represented by one venmoIdHash. This is used to enforce limitations on actions across\\n    // all Ethereum addresses that are associated with that venmoId. In this case we use it to enforce a cooldown period between on ramps,\\n    // restrict each venmo account to one outstanding intent at a time, and to enforce deny lists.\\n    struct GlobalAccountInfo {\\n        bytes32 currentIntentHash;          // Hash of the current open intent (if exists)\\n        uint256 lastOnrampTimestamp;        // Timestamp of the last on-ramp transaction used to check if cooldown period elapsed\\n        DenyList denyList;                  // Deny list of the account\\n    }\\n\\n    /* ============ Modifiers ============ */\\n    modifier onlyRegisteredUser() {\\n        require(getAccountVenmoIdHash(msg.sender) != bytes32(0), \\\"Caller must be registered user\\\");\\n        _;\\n    }\\n\\n    /* ============ Constants ============ */\\n    uint256 internal constant PRECISE_UNIT = 1e18;\\n    uint256 internal constant MAX_DEPOSITS = 5;       // An account can only have max 5 different deposit parameterizations to prevent locking funds\\n    uint256 constant CIRCOM_PRIME_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant MAX_SUSTAINABILITY_FEE = 5e16;   // 5% max sustainability fee\\n    \\n    /* ============ State Variables ============ */\\n    IERC20 public immutable usdc;                                   // USDC token contract\\n    IPoseidon public immutable poseidon;                            // Poseidon hashing contract\\n    IRamp public immutable ramp;                                    // V1 Ramp contract, used to share registration state\\n    IRegistrationProcessorV2 public registrationProcessor;          // Address of registration processor contract, verifies registration e-mails\\n    ISendProcessor public sendProcessor;                            // Address of send processor contract, verifies onRamp emails\\n\\n    bool public isInitialized;                                      // Indicates if contract has been initialized\\n\\n    mapping(bytes32 => GlobalAccountInfo) internal globalAccount;   // Mapping of venmoIdHash to information used to enforce actions across Ethereum accounts\\n    mapping(address => AccountInfo) internal accounts;              // Mapping of Ethereum accounts to their account information (venmoIdHash and deposits)\\n    mapping(uint256 => Deposit) public deposits;                    // Mapping of depositIds to deposit structs\\n    mapping(bytes32 => Intent) public intents;                      // Mapping of intentHashes to intent structs\\n\\n    uint256 public minDepositAmount;                                // Minimum amount of USDC that can be deposited\\n    uint256 public maxOnRampAmount;                                 // Maximum amount of USDC that can be on-ramped in a single transaction\\n    uint256 public onRampCooldownPeriod;                            // Time period that must elapse between completing an on-ramp and signaling a new intent\\n    uint256 public intentExpirationPeriod;                          // Time period after which an intent can be pruned from the system\\n    uint256 public sustainabilityFee;                               // Fee charged to on-rampers in preciseUnits (1e16 = 1%)\\n    address public sustainabilityFeeRecipient;                      // Address that receives the sustainability fee\\n\\n    uint256 public depositCounter;                                  // Counter for depositIds\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _owner,\\n        IRamp _ramp,\\n        IERC20 _usdc,\\n        IPoseidon _poseidon,\\n        uint256 _minDepositAmount,\\n        uint256 _maxOnRampAmount,\\n        uint256 _intentExpirationPeriod,\\n        uint256 _onRampCooldownPeriod,\\n        uint256 _sustainabilityFee,\\n        address _sustainabilityFeeRecipient\\n    )\\n        Ownable()\\n    {\\n        usdc = _usdc;\\n        ramp = _ramp;\\n        poseidon = _poseidon;\\n        minDepositAmount = _minDepositAmount;\\n        maxOnRampAmount = _maxOnRampAmount;\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        sustainabilityFee = _sustainabilityFee;\\n        sustainabilityFeeRecipient = _sustainabilityFeeRecipient;\\n\\n        transferOwnership(_owner);\\n    }\\n\\n    /* ============ External Functions ============ */\\n\\n    /**\\n     * @notice Initialize Ramp with the addresses of the Processors\\n     *\\n     * @param _registrationProcessor    Registration processor address\\n     * @param _sendProcessor            Send processor address\\n     */\\n    function initialize(\\n        IRegistrationProcessorV2 _registrationProcessor,\\n        ISendProcessor _sendProcessor\\n    )\\n        external\\n        onlyOwner\\n    {\\n        require(!isInitialized, \\\"Already initialized\\\");\\n\\n        registrationProcessor = _registrationProcessor;\\n        sendProcessor = _sendProcessor;\\n\\n        isInitialized = true;\\n    }\\n\\n    /**\\n     * @notice Registers a new account by pulling the hash of the account id from the proof and assigning the account owner to the\\n     * sender of the transaction. One venmo account can be registered to multiple Ethereum addresses.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, userIdHash\\n     */\\n    function register(\\n        uint[2] memory _a,\\n        uint[2][2] memory _b,\\n        uint[2] memory _c,\\n        uint[5] memory _signals\\n    )\\n        external\\n    {\\n        require(getAccountVenmoIdHash(msg.sender) == bytes32(0), \\\"Account already associated with venmoId\\\");\\n        bytes32 venmoIdHash = _verifyRegistrationProof(_a, _b, _c, _signals);\\n\\n        accounts[msg.sender].venmoIdHash = venmoIdHash;\\n\\n        emit AccountRegistered(msg.sender, venmoIdHash);\\n    }\\n\\n    /**\\n     * @notice Generates a deposit entry for off-rampers that can then be fulfilled by an on-ramper. This function will not add to\\n     * previous deposits. Every deposit has it's own unique identifier. User must approve the contract to transfer the deposit amount\\n     * of USDC.\\n     *\\n     * @param _packedVenmoId    The packed venmo id of the account owner (we pack for easy use with poseidon)\\n     * @param _depositAmount    The amount of USDC to off-ramp\\n     * @param _receiveAmount    The amount of USD to receive\\n     */\\n    function offRamp(\\n        uint256[3] memory _packedVenmoId,\\n        uint256 _depositAmount,\\n        uint256 _receiveAmount\\n    )\\n        external\\n        onlyRegisteredUser\\n    {\\n        bytes32 venmoIdHash = bytes32(poseidon.poseidon(_packedVenmoId));\\n\\n        require(getAccountVenmoIdHash(msg.sender) == venmoIdHash, \\\"Sender must be the account owner\\\");\\n        require(accounts[msg.sender].deposits.length < MAX_DEPOSITS, \\\"Maximum deposit amount reached\\\");\\n        require(_depositAmount >= minDepositAmount, \\\"Deposit amount must be greater than min deposit amount\\\");\\n        require(_receiveAmount > 0, \\\"Receive amount must be greater than 0\\\");\\n\\n        uint256 conversionRate = (_depositAmount * PRECISE_UNIT) / _receiveAmount;\\n        uint256 depositId = depositCounter++;\\n\\n        accounts[msg.sender].deposits.push(depositId);\\n\\n        deposits[depositId] = Deposit({\\n            depositor: msg.sender,\\n            packedVenmoId: _packedVenmoId,\\n            depositAmount: _depositAmount,\\n            remainingDeposits: _depositAmount,\\n            outstandingIntentAmount: 0,\\n            conversionRate: conversionRate,\\n            intentHashes: new bytes32[](0)\\n        });\\n\\n        usdc.transferFrom(msg.sender, address(this), _depositAmount);\\n\\n        emit DepositReceived(depositId, venmoIdHash, _depositAmount, conversionRate);\\n    }\\n\\n    /**\\n     * @notice Signals intent to pay the depositor defined in the _depositId the _amount * deposit conversionRate off-chain\\n     * in order to unlock _amount of funds on-chain. Each user can only have one outstanding intent at a time regardless of\\n     * address (tracked using venmoId). Caller must not be on the depositor's deny list. If there are prunable intents then\\n     * they will be deleted from the deposit to be able to maintain state hygiene.\\n     *\\n     * @param _depositId    The ID of the deposit the on-ramper intends to use for \\n     * @param _amount       The amount of USDC the user wants to on-ramp\\n     * @param _to           Address to forward funds to (can be same as onRamper)\\n     */\\n    function signalIntent(uint256 _depositId, uint256 _amount, address _to) external onlyRegisteredUser {\\n        bytes32 venmoIdHash = getAccountVenmoIdHash(msg.sender);\\n        Deposit storage deposit = deposits[_depositId];\\n        bytes32 depositorVenmoIdHash = getAccountVenmoIdHash(deposit.depositor);\\n\\n        // Caller validity checks\\n        require(!globalAccount[depositorVenmoIdHash].denyList.isDenied[venmoIdHash], \\\"Onramper on depositor's denylist\\\");\\n        require(\\n            globalAccount[venmoIdHash].lastOnrampTimestamp + onRampCooldownPeriod <= block.timestamp,\\n            \\\"On ramp cool down period not elapsed\\\"\\n        );\\n        require(globalAccount[venmoIdHash].currentIntentHash == bytes32(0), \\\"Intent still outstanding\\\");\\n        require(depositorVenmoIdHash != venmoIdHash, \\\"Sender cannot be the depositor\\\");\\n\\n        // Intent information checks\\n        require(deposit.depositor != address(0), \\\"Deposit does not exist\\\");\\n        require(_amount > 0, \\\"Signaled amount must be greater than 0\\\");\\n        require(_amount <= maxOnRampAmount, \\\"Signaled amount must be less than max on-ramp amount\\\");\\n        require(_to != address(0), \\\"Cannot send to zero address\\\");\\n\\n        bytes32 intentHash = _calculateIntentHash(venmoIdHash, _depositId);\\n\\n        if (deposit.remainingDeposits < _amount) {\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(_depositId);\\n\\n            require(deposit.remainingDeposits + reclaimableAmount >= _amount, \\\"Not enough liquidity\\\");\\n\\n            _pruneIntents(deposit, prunableIntents);\\n            deposit.remainingDeposits += reclaimableAmount;\\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n        }\\n\\n        intents[intentHash] = Intent({\\n            onRamper: msg.sender,\\n            to: _to,\\n            deposit: _depositId,\\n            amount: _amount,\\n            intentTimestamp: block.timestamp\\n        });\\n\\n        globalAccount[venmoIdHash].currentIntentHash = intentHash;\\n\\n        deposit.remainingDeposits -= _amount;\\n        deposit.outstandingIntentAmount += _amount;\\n        deposit.intentHashes.push(intentHash);\\n\\n        emit IntentSignaled(intentHash, _depositId, venmoIdHash, _to, _amount, block.timestamp);\\n    }\\n\\n    /**\\n     * @notice Only callable by the originator of the intent. Cancels an outstanding intent thus allowing user to signal a new\\n     * intent. Deposit state is updated to reflect the cancelled intent.\\n     *\\n     * @param _intentHash    Hash of intent being cancelled\\n     */\\n    function cancelIntent(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        \\n        require(intent.intentTimestamp != 0, \\\"Intent does not exist\\\");\\n        require(\\n            getAccountVenmoIdHash(intent.onRamper) == getAccountVenmoIdHash(msg.sender),\\n            \\\"Sender must be the on-ramper\\\"\\n        );\\n\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.remainingDeposits += intent.amount;\\n        deposit.outstandingIntentAmount -= intent.amount;\\n    }\\n\\n    /**\\n     * @notice Anyone can submit an on-ramp transaction, even if caller isn't on-ramper. Upon submission the proof is validated,\\n     * intent is removed, and deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _a        Parameter of zk proof\\n     * @param _b        Parameter of zk proof\\n     * @param _c        Parameter of zk proof\\n     * @param _signals  Encoded public signals of the zk proof, contains mailserverHash, fromEmail, timestamp, onRamperIdHash,\\n     *                  nullifier, intentHash\\n     */\\n    function onRamp(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        external\\n    {\\n        (\\n            Intent memory intent,\\n            Deposit storage deposit,\\n            bytes32 intentHash\\n        ) = _verifyOnRampProof(_a, _b, _c, _signals);\\n\\n        _pruneIntent(deposit, intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Allows off-ramper to release funds to the on-ramper in case of a failed on-ramp or because of some other arrangement\\n     * between the two parties. Upon submission we check to make sure the msg.sender is the depositor, the  intent is removed, and \\n     * deposit state is updated. USDC is transferred to the on-ramper.\\n     *\\n     * @param _intentHash        Hash of intent to resolve by releasing the funds\\n     */\\n    function releaseFundsToOnramper(bytes32 _intentHash) external {\\n        Intent memory intent = intents[_intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(deposit.depositor == msg.sender, \\\"Caller must be the depositor\\\");\\n\\n        _pruneIntent(deposit, _intentHash);\\n\\n        deposit.outstandingIntentAmount -= intent.amount;\\n        globalAccount[getAccountVenmoIdHash(intent.onRamper)].lastOnrampTimestamp = block.timestamp;\\n        _closeDepositIfNecessary(intent.deposit, deposit);\\n\\n        _transferFunds(_intentHash, intent);\\n    }\\n\\n    /**\\n     * @notice Caller must be the depositor for each depositId in the array, if not whole function fails. Depositor is returned all\\n     * remaining deposits and any outstanding intents that are expired. If an intent is not expired then those funds will not be\\n     * returned. Deposit will be deleted as long as there are no more outstanding intents.\\n     *\\n     * @param _depositIds   Array of depositIds the depositor is attempting to withdraw\\n     */\\n    function withdrawDeposit(uint256[] memory _depositIds) external {\\n        uint256 returnAmount;\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit storage deposit = deposits[depositId];\\n\\n            require(deposit.depositor == msg.sender, \\\"Sender must be the depositor\\\");\\n\\n            (\\n                bytes32[] memory prunableIntents,\\n                uint256 reclaimableAmount\\n            ) = _getPrunableIntents(depositId);\\n\\n            _pruneIntents(deposit, prunableIntents);\\n\\n            returnAmount += deposit.remainingDeposits + reclaimableAmount;\\n            \\n            deposit.outstandingIntentAmount -= reclaimableAmount;\\n\\n            emit DepositWithdrawn(depositId, deposit.depositor, deposit.remainingDeposits + reclaimableAmount);\\n            \\n            delete deposit.remainingDeposits;\\n            _closeDepositIfNecessary(depositId, deposit);\\n        }\\n\\n        usdc.transfer(msg.sender, returnAmount);\\n    }\\n\\n    /**\\n     * @notice Adds a venmoId to a depositor's deny list. If an address associated with the banned venmoId attempts to\\n     * signal an intent on the user's deposit they will be denied.\\n     *\\n     * @param _deniedUser   Poseidon hash of the venmoId being banned\\n     */\\n    function addAccountToDenylist(bytes32 _deniedUser) external onlyRegisteredUser {\\n        bytes32 denyingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(!globalAccount[denyingUser].denyList.isDenied[_deniedUser], \\\"User already on denylist\\\");\\n\\n        globalAccount[denyingUser].denyList.isDenied[_deniedUser] = true;\\n        globalAccount[denyingUser].denyList.deniedUsers.push(_deniedUser);\\n\\n        emit UserAddedToDenylist(denyingUser, _deniedUser);\\n    }\\n\\n    /**\\n     * @notice Removes a venmoId from a depositor's deny list.\\n     *\\n     * @param _approvedUser   Poseidon hash of the venmoId being approved\\n     */\\n    function removeAccountFromDenylist(bytes32 _approvedUser) external onlyRegisteredUser {\\n        bytes32 approvingUser = getAccountVenmoIdHash(msg.sender);\\n\\n        require(globalAccount[approvingUser].denyList.isDenied[_approvedUser], \\\"User not on denylist\\\");\\n\\n        globalAccount[approvingUser].denyList.isDenied[_approvedUser] = false;\\n        globalAccount[approvingUser].denyList.deniedUsers.removeStorage(_approvedUser);\\n\\n        emit UserRemovedFromDenylist(approvingUser, _approvedUser);\\n    }\\n\\n    /* ============ Governance Functions ============ */\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the send processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _sendProcessor   New send proccesor address\\n     */\\n    function setSendProcessor(ISendProcessor _sendProcessor) external onlyOwner {\\n        sendProcessor = _sendProcessor;\\n        emit NewSendProcessorSet(address(_sendProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the registration processor address used for validating and interpreting zk proofs.\\n     *\\n     * @param _registrationProcessor   New registration proccesor address\\n     */\\n    function setRegistrationProcessor(IRegistrationProcessorV2 _registrationProcessor) external onlyOwner {\\n        registrationProcessor = _registrationProcessor;\\n        emit NewRegistrationProcessorSet(address(_registrationProcessor));\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the minimum deposit amount a user can specify for off-ramping.\\n     *\\n     * @param _minDepositAmount   The new minimum deposit amount\\n     */\\n    function setMinDepositAmount(uint256 _minDepositAmount) external onlyOwner {\\n        require(_minDepositAmount != 0, \\\"Minimum deposit cannot be zero\\\");\\n\\n        minDepositAmount = _minDepositAmount;\\n        emit MinDepositAmountSet(_minDepositAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the sustainability fee. This fee is charged to on-rampers upon a successful on-ramp.\\n     *\\n     * @param _fee   The new sustainability fee in precise units (10**18, ie 10% = 1e17)\\n     */\\n    function setSustainabilityFee(uint256 _fee) external onlyOwner {\\n        require(_fee <= MAX_SUSTAINABILITY_FEE, \\\"Fee cannot be greater than max fee\\\");\\n\\n        sustainabilityFee = _fee;\\n        emit SustainabilityFeeUpdated(_fee);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the recepient of sustainability fees.\\n     *\\n     * @param _feeRecipient   The new fee recipient address\\n     */\\n    function setSustainabilityFeeRecipient(address _feeRecipient) external onlyOwner {\\n        require(_feeRecipient != address(0), \\\"Fee recipient cannot be zero address\\\");\\n\\n        sustainabilityFeeRecipient = _feeRecipient;\\n        emit SustainabilityFeeRecipientUpdated(_feeRecipient);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the max amount allowed to be on-ramped in each transaction. To on-ramp more than\\n     * this amount a user must make multiple transactions.\\n     *\\n     * @param _maxOnRampAmount   The new max on ramp amount\\n     */\\n    function setMaxOnRampAmount(uint256 _maxOnRampAmount) external onlyOwner {\\n        require(_maxOnRampAmount != 0, \\\"Max on ramp amount cannot be zero\\\");\\n\\n        maxOnRampAmount = _maxOnRampAmount;\\n        emit MaxOnRampAmountSet(_maxOnRampAmount);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the on-ramp cooldown period, once an on-ramp transaction is completed the user must wait this\\n     * amount of time before they can signalIntent to on-ramp again.\\n     *\\n     * @param _onRampCooldownPeriod   New on-ramp cooldown period\\n     */\\n    function setOnRampCooldownPeriod(uint256 _onRampCooldownPeriod) external onlyOwner {\\n        onRampCooldownPeriod = _onRampCooldownPeriod;\\n        emit OnRampCooldownPeriodSet(_onRampCooldownPeriod);\\n    }\\n\\n    /**\\n     * @notice GOVERNANCE ONLY: Updates the intent expiration period, after this period elapses an intent can be pruned to prevent\\n     * locking up a depositor's funds.\\n     *\\n     * @param _intentExpirationPeriod   New intent expiration period\\n     */\\n    function setIntentExpirationPeriod(uint256 _intentExpirationPeriod) external onlyOwner {\\n        require(_intentExpirationPeriod != 0, \\\"Max intent expiration period cannot be zero\\\");\\n\\n        intentExpirationPeriod = _intentExpirationPeriod;\\n        emit IntentExpirationPeriodSet(_intentExpirationPeriod);\\n    }\\n\\n\\n    /* ============ External View Functions ============ */\\n\\n    function getDeposit(uint256 _depositId) external view returns (Deposit memory) {\\n        return deposits[_depositId];\\n    }\\n\\n    function getAccountInfo(address _account) external view returns (AccountInfo memory) {\\n        return AccountInfo({\\n            venmoIdHash: getAccountVenmoIdHash(_account),\\n            deposits: accounts[_account].deposits\\n        });\\n    }\\n\\n    function getAccountVenmoIdHash(address _account) public view returns (bytes32) {\\n        return accounts[_account].venmoIdHash == bytes32(0) ?\\n            ramp.getAccountInfo(_account).venmoIdHash :\\n            accounts[_account].venmoIdHash;\\n    }\\n\\n    function getVenmoIdCurrentIntentHash(address _account) external view returns (bytes32) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].currentIntentHash;\\n    }\\n\\n    function getLastOnRampTimestamp(address _account) external view returns (uint256) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].lastOnrampTimestamp;\\n    }\\n\\n    function getDeniedUsers(address _account) external view returns (bytes32[] memory) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.deniedUsers;\\n    }\\n\\n    function isDeniedUser(address _account, bytes32 _deniedUser) external view returns (bool) {\\n        return globalAccount[getAccountVenmoIdHash(_account)].denyList.isDenied[_deniedUser];\\n    }\\n\\n    function getIntentsWithOnRamperId(bytes32[] calldata _intentHashes) external view returns (IntentWithOnRamperId[] memory) {\\n        IntentWithOnRamperId[] memory intentsWithOnRamperId = new IntentWithOnRamperId[](_intentHashes.length);\\n\\n        for (uint256 i = 0; i < _intentHashes.length; ++i) {\\n            bytes32 intentHash = _intentHashes[i];\\n            Intent memory intent = intents[intentHash];\\n            intentsWithOnRamperId[i] = IntentWithOnRamperId({\\n                intentHash: _intentHashes[i],\\n                intent: intent,\\n                onRamperIdHash: getAccountVenmoIdHash(intent.onRamper)\\n            });\\n        }\\n\\n        return intentsWithOnRamperId;\\n    }\\n\\n    function getAccountDeposits(address _account) external view returns (DepositWithAvailableLiquidity[] memory accountDeposits) {\\n        uint256[] memory accountDepositIds = accounts[_account].deposits;\\n        accountDeposits = new DepositWithAvailableLiquidity[](accountDepositIds.length);\\n        \\n        for (uint256 i = 0; i < accountDepositIds.length; ++i) {\\n            uint256 depositId = accountDepositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            accountDeposits[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n    }\\n\\n    function getDepositFromIds(uint256[] memory _depositIds) external view returns (DepositWithAvailableLiquidity[] memory depositArray) {\\n        depositArray = new DepositWithAvailableLiquidity[](_depositIds.length);\\n\\n        for (uint256 i = 0; i < _depositIds.length; ++i) {\\n            uint256 depositId = _depositIds[i];\\n            Deposit memory deposit = deposits[depositId];\\n            ( , uint256 reclaimableAmount) = _getPrunableIntents(depositId);\\n\\n            depositArray[i] = DepositWithAvailableLiquidity({\\n                depositId: depositId,\\n                depositorIdHash: getAccountVenmoIdHash(deposit.depositor),\\n                deposit: deposit,\\n                availableLiquidity: deposit.remainingDeposits + reclaimableAmount\\n            });\\n        }\\n\\n        return depositArray;\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    /**\\n     * @notice Calculates the intentHash of new intent\\n     */\\n    function _calculateIntentHash(\\n        bytes32 _venmoId,\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        virtual\\n        returns (bytes32 intentHash)\\n    {\\n        // Mod with circom prime field to make sure it fits in a 254-bit field\\n        uint256 intermediateHash = uint256(keccak256(abi.encodePacked(_venmoId, _depositId, block.timestamp)));\\n        intentHash = bytes32(intermediateHash % CIRCOM_PRIME_FIELD);\\n    }\\n\\n    /**\\n     * @notice Cycles through all intents currently open on a deposit and sees if any have expired. If they have expired\\n     * the outstanding amounts are summed and returned alongside the intentHashes\\n     */\\n    function _getPrunableIntents(\\n        uint256 _depositId\\n    )\\n        internal\\n        view\\n        returns(bytes32[] memory prunableIntents, uint256 reclaimedAmount)\\n    {\\n        bytes32[] memory intentHashes = deposits[_depositId].intentHashes;\\n        prunableIntents = new bytes32[](intentHashes.length);\\n\\n        for (uint256 i = 0; i < intentHashes.length; ++i) {\\n            Intent memory intent = intents[intentHashes[i]];\\n            if (intent.intentTimestamp + intentExpirationPeriod < block.timestamp) {\\n                prunableIntents[i] = intentHashes[i];\\n                reclaimedAmount += intent.amount;\\n            }\\n        }\\n    }\\n\\n    function _pruneIntents(Deposit storage _deposit, bytes32[] memory _intents) internal {\\n        for (uint256 i = 0; i < _intents.length; ++i) {\\n            if (_intents[i] != bytes32(0)) {\\n                _pruneIntent(_deposit, _intents[i]);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @notice Pruning an intent involves deleting its state from the intents mapping, zeroing out the intendee's currentIntentHash in\\n     * their global account mapping, and deleting the intentHash from the deposit's intentHashes array.\\n     */\\n    function _pruneIntent(Deposit storage _deposit, bytes32 _intentHash) internal {\\n        Intent memory intent = intents[_intentHash];\\n\\n        delete globalAccount[getAccountVenmoIdHash(intent.onRamper)].currentIntentHash;\\n        delete intents[_intentHash];\\n        _deposit.intentHashes.removeStorage(_intentHash);\\n\\n        emit IntentPruned(_intentHash, intent.deposit);\\n    }\\n\\n    /**\\n     * @notice Removes a deposit if no outstanding intents AND no remaining deposits. Deleting a deposit deletes it from the\\n     * deposits mapping and removes tracking it in the user's accounts mapping.\\n     */\\n    function _closeDepositIfNecessary(uint256 _depositId, Deposit storage _deposit) internal {\\n        uint256 openDepositAmount = _deposit.outstandingIntentAmount + _deposit.remainingDeposits;\\n        if (openDepositAmount == 0) {\\n            accounts[_deposit.depositor].deposits.removeStorage(_depositId);\\n            emit DepositClosed(_depositId, _deposit.depositor);\\n            delete deposits[_depositId];\\n        }\\n    }\\n\\n    /**\\n     * @notice Checks if sustainability fee has been defined, if so sends fee to the fee recipient and intent amount minus fee\\n     * to the on-ramper. If sustainability fee is undefined then full intent amount is transferred to on-ramper.\\n     */\\n    function _transferFunds(bytes32 _intentHash, Intent memory _intent) internal {\\n        uint256 fee;\\n        if (sustainabilityFee != 0) {\\n            fee = (_intent.amount * sustainabilityFee) / PRECISE_UNIT;\\n            usdc.transfer(sustainabilityFeeRecipient, fee);\\n        }\\n\\n        uint256 onRampAmount = _intent.amount - fee;\\n        usdc.transfer(_intent.to, onRampAmount);\\n\\n        emit IntentFulfilled(_intentHash, _intent.deposit, _intent.onRamper, _intent.to, onRampAmount, fee);\\n    }\\n\\n    /**\\n     * @notice Validate venmo send payment email and check that it hasn't already been used (done on SendProcessor).\\n     * Additionally, we validate that the offRamperIdHash matches the one from the specified intent and that enough\\n     * was paid off-chain inclusive of the conversionRate.\\n     */\\n    function _verifyOnRampProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[12] memory _signals\\n    )\\n        internal\\n        returns(Intent memory, Deposit storage, bytes32)\\n    {\\n        (\\n            uint256 amount,\\n            uint256 timestamp,\\n            bytes32 offRamperIdHash,\\n            bytes32 onRamperIdHash,\\n            bytes32 intentHash\\n        ) = sendProcessor.processProof(\\n            ISendProcessor.SendProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        Intent memory intent = intents[intentHash];\\n        Deposit storage deposit = deposits[intent.deposit];\\n\\n        require(intent.onRamper != address(0), \\\"Intent does not exist\\\");\\n        require(intent.intentTimestamp <= timestamp, \\\"Intent was not created before send\\\");\\n        require(getAccountVenmoIdHash(deposit.depositor) == offRamperIdHash, \\\"Offramper id does not match\\\");\\n        require(getAccountVenmoIdHash(intent.onRamper) == onRamperIdHash, \\\"Onramper id does not match\\\");\\n        require(amount >= (intent.amount * PRECISE_UNIT) / deposit.conversionRate, \\\"Payment was not enough\\\");\\n\\n        return (intent, deposit, intentHash);\\n    }\\n\\n    /**\\n     * @notice Validate the user has a venmo account, we do not nullify this email since it can be reused to register under\\n     * different addresses.\\n     */\\n    function _verifyRegistrationProof(\\n        uint256[2] memory _a,\\n        uint256[2][2] memory _b,\\n        uint256[2] memory _c,\\n        uint256[5] memory _signals\\n    )\\n        internal\\n        returns(bytes32)\\n    {\\n        bytes32 venmoIdHash = registrationProcessor.processProof(\\n            IRegistrationProcessorV2.RegistrationProof({\\n                a: _a,\\n                b: _b,\\n                c: _c,\\n                signals: _signals\\n            })\\n        );\\n\\n        return venmoIdHash;\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoRegistrationProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_registration_verifier.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { IRegistrationProcessorV2 } from \\\"./interfaces/IRegistrationProcessorV2.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoRegistrationProcessorV2 is Groth16Verifier, IRegistrationProcessorV2, BaseProcessorV2 {\\n\\n    using StringUtils for uint256[];\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n    \\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n\\n    /* ============ External Functions ============ */\\n\\n    function processProof(\\n        IRegistrationProcessorV2.RegistrationProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(bytes32 userIdHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        _validateAndAddNullifier(keccak256(abi.encode(_proof)));\\n\\n        // Signals [4] is the packed onRamperIdHash\\n        userIdHash = bytes32(_proof.signals[4]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[5] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/ramps/venmo-v2/VenmoSendProcessorV2.sol\": {\n      \"content\": \"//SPDX-License-Identifier: MIT\\n\\nimport { StringUtils } from \\\"@zk-email/contracts/utils/StringUtils.sol\\\";\\n\\nimport { BaseProcessorV2 } from \\\"../../processors/BaseProcessorV2.sol\\\";\\nimport { Groth16Verifier } from \\\"../../verifiers/venmo_send_verifier_v2.sol\\\";\\nimport { IKeyHashAdapterV2 } from \\\"../../processors/keyHashAdapters/IKeyHashAdapterV2.sol\\\";\\nimport { INullifierRegistry } from \\\"../../processors/nullifierRegistries/INullifierRegistry.sol\\\";\\nimport { ISendProcessor } from \\\"../venmo-v1/interfaces/ISendProcessor.sol\\\";\\nimport { StringConversionUtils } from \\\"../../lib/StringConversionUtils.sol\\\";\\n\\npragma solidity ^0.8.18;\\n\\ncontract VenmoSendProcessorV2 is Groth16Verifier, ISendProcessor, BaseProcessorV2 {\\n    \\n    using StringUtils for uint256[];\\n    using StringConversionUtils for string;\\n\\n    /* ============ Constants ============ */\\n    uint256 constant public PACK_SIZE = 7;\\n\\n    /* ============ Constructor ============ */\\n    constructor(\\n        address _ramp,\\n        IKeyHashAdapterV2 _venmoMailserverKeyHashAdapter,\\n        INullifierRegistry _nullifierRegistry,\\n        string memory _emailFromAddress,\\n        uint256 _timestampBuffer\\n    )\\n        Groth16Verifier()\\n        BaseProcessorV2(\\n            _ramp,\\n            _venmoMailserverKeyHashAdapter,\\n            _nullifierRegistry,\\n            _emailFromAddress,\\n            _timestampBuffer\\n        )\\n    {}\\n    \\n    /* ============ External Functions ============ */\\n    function processProof(\\n        ISendProcessor.SendProof calldata _proof\\n    )\\n        public\\n        override\\n        onlyRamp\\n        returns(uint256 amount, uint256 timestamp, bytes32 offRamperIdHash, bytes32 onRamperIdHash, bytes32 intentHash)\\n    {\\n        require(this.verifyProof(_proof.a, _proof.b, _proof.c, _proof.signals), \\\"Invalid Proof\\\"); // checks effects iteractions, this should come first\\n\\n        require(isMailServerKeyHash(bytes32(_proof.signals[0])), \\\"Invalid mailserver key hash\\\");\\n\\n        // Signals [1:4] are the packed from email address\\n        string memory fromEmail = _parseSignalArray(_proof.signals, 1, 4);\\n        require(keccak256(abi.encodePacked(fromEmail)) == keccak256(emailFromAddress), \\\"Invalid email from address\\\");\\n\\n        // Signals [4:5] is the packed amount, since this is a USDC amount we want to make sure the returned number is\\n        // properly padded to 6 decimals. If the parsed has more than 6 figures to the right of the decimal it will revert\\n        amount = _parseSignalArray(_proof.signals, 4, 6).stringToUint(6);\\n\\n        // Signals [5:7] are the packed timestamp, we do not expect there to be any decimal places in this number so we\\n        // specify 0 decimals, if any decimal appears this function will revert\\n        // Add the buffer to build in flexibility with L2 timestamps\\n        timestamp = _parseSignalArray(_proof.signals, 6, 8).stringToUint(0) + timestampBuffer;\\n\\n        // Signals [8] is the packed offRamperIdHash\\n        offRamperIdHash = bytes32(_proof.signals[8]);\\n\\n        // Signals [9] is the packed onRamperIdHash\\n        onRamperIdHash = bytes32(_proof.signals[9]);\\n\\n        // Check if email has been used previously, if not nullify it so it can't be used again\\n        _validateAndAddNullifier(bytes32(_proof.signals[10]));\\n\\n        // Signals [11] is intentHash\\n        intentHash = bytes32(_proof.signals[11]);\\n    }\\n\\n    /* ============ Internal Functions ============ */\\n\\n    function _parseSignalArray(uint256[12] calldata _signals, uint8 _from, uint8 _to) internal pure returns (string memory) {\\n        uint256[] memory signalArray = new uint256[](_to - _from);\\n        for (uint256 i = _from; i < _to; i++) {\\n            signalArray[i - _from] = _signals[i];\\n        }\\n\\n        return signalArray.convertPackedBytesToString(signalArray.length * PACK_SIZE, PACK_SIZE);\\n    }\\n}\\n\"\n    },\n    \"contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 20587965622151968069995649582541315422977747903983693959922015701361725155516;\\n    uint256 constant IC0y = 11982628613930328510673935238960631358206293440826148517770479845792210741285;\\n    \\n    uint256 constant IC1x = 5273354119219253101148387206199535064921520774240409596621174025648940059654;\\n    uint256 constant IC1y = 21111800092158453137375162645358573333185713447967811304768419840931409544316;\\n    \\n    uint256 constant IC2x = 7179175801248398469937796235742931530426723599609730333951354848886540229587;\\n    uint256 constant IC2y = 15726679295073391999231605242588933096637939096505469654743841929466661215600;\\n    \\n    uint256 constant IC3x = 2573745117148849325739153454910100127780727692332106642244822573322697768926;\\n    uint256 constant IC3y = 17190036615770915642770313751070930945137672912553152769513644794677235106500;\\n    \\n    uint256 constant IC4x = 14116421034256566786657627477297711601610402849971726529887805013466353201397;\\n    uint256 constant IC4y = 8485070584229074200559412926578438645883198277594792037977619628201373699513;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[4] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 9579394250047657534563426426095079127489461685731836585345036136643186501106;\\n    uint256 constant IC0y = 9099104635803858536528567879429672150768221243251986952752931620888312777966;\\n    \\n    uint256 constant IC1x = 16742803921251520060956705617051970891800993226648453532191536908864553127292;\\n    uint256 constant IC1y = 2370866612075105760679084555015532787057818492816729720553168629900878453411;\\n    \\n    uint256 constant IC2x = 1198559044032862867053778079830233446818498911409168176648000603364093739186;\\n    uint256 constant IC2y = 1705707149442825364231032898199260673345453686156603650050734584575953146683;\\n    \\n    uint256 constant IC3x = 8227987931602929528667070816607404329077624702451836798457232294948292078891;\\n    uint256 constant IC3y = 20063181599207889574438820489532781853843300843638785745397328806539284090642;\\n    \\n    uint256 constant IC4x = 7125527347590397815378809200378110039642415532864842326060497590633383667506;\\n    uint256 constant IC4y = 8163556343727594939335759011237867566342023627791431441294508737734621079426;\\n    \\n    uint256 constant IC5x = 20997293494068572835171892599738628766725761987729696402069061203595826478359;\\n    uint256 constant IC5y = 16059948127534196987124792060676979843199916529699136496438545284995501095602;\\n    \\n    uint256 constant IC6x = 17021328822525982324390769568000212688520466580333628288761906560962941841995;\\n    uint256 constant IC6y = 5261883703408033387118117055674706016521465932763230261610744756010618560924;\\n    \\n    uint256 constant IC7x = 10901863109753159213080424471809415914535140513760405640349521060137871219075;\\n    uint256 constant IC7y = 14778288214979337896639472664043167455491393250289008539543476005381670290683;\\n    \\n    uint256 constant IC8x = 13998728805440395622299361078362563277551541602983787454571111205410111192315;\\n    uint256 constant IC8y = 3559585529617912948298445099059517654792071369006112940929259959502551444001;\\n    \\n    uint256 constant IC9x = 882238089295873026642043167782680157609481002907959944699397709882967318643;\\n    uint256 constant IC9y = 19580305433284686836351193255169672439178344945533214806182941836067594348566;\\n    \\n    uint256 constant IC10x = 18249568535822147984640535315870134333016531565170750204717365905873651523988;\\n    uint256 constant IC10y = 2529169972933823970798378850481383664704791812605724365414811723841765790997;\\n    \\n    uint256 constant IC11x = 12446414909202635741535199485188270293088983356699925634672281045851347103474;\\n    uint256 constant IC11y = 7278349290662903089838342599021073819845167033436014498220846982051650195077;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/garanti_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 16279736454292033378580080582261180344588543377812411740103484792347015356622;\\n    uint256 constant IC0y = 803733000626129867641117797978078317549395205362063131280860756724996638023;\\n    \\n    uint256 constant IC1x = 5619211177410198973702607025162236734773579252262834151760411624196842318554;\\n    uint256 constant IC1y = 15681435570112682455420063796287496568176754470688920089793013849736514435508;\\n    \\n    uint256 constant IC2x = 5717814455265966580691161694191686582106132906777222823293831790775696595822;\\n    uint256 constant IC2y = 7288198057139032054533375522924224835499925739466115677964293122948640493060;\\n    \\n    uint256 constant IC3x = 11719874491549074336746418596127831936593847863714866444448223031713643812414;\\n    uint256 constant IC3y = 3896921643091289790188930365771248018546305504721622929270212144308780835428;\\n    \\n    uint256 constant IC4x = 16934638514464830968323332218909199124530296213903795969456913426832964661346;\\n    uint256 constant IC4y = 19219084029045271363030542000358821303054800197657303997612890875588511097378;\\n    \\n    uint256 constant IC5x = 21433322676719947948419816354200354171932787369257885135630906528192815911568;\\n    uint256 constant IC5y = 15498974494399429179225623039072826422890776979301626083872919197439857331783;\\n    \\n    uint256 constant IC6x = 19791360312577802765870043762144676029009513261081081551634408233199622166897;\\n    uint256 constant IC6y = 19833757387208994290140152520904701847141710351997160555863681935452894633990;\\n    \\n    uint256 constant IC7x = 11812987319798762911565293502198240965361030266171903511793751983047671339267;\\n    uint256 constant IC7y = 3362118538113056304065427216001833533279308090045141448508689267731951424922;\\n    \\n    uint256 constant IC8x = 3657617595416795675551564184500064160630109848673253434901020037985236883321;\\n    uint256 constant IC8y = 7212064867888157055116070351675888907682605134292867650646453862420866384926;\\n    \\n    uint256 constant IC9x = 2751759577697788291515493518584254550958879092432516239681454344732308836675;\\n    uint256 constant IC9y = 17395718658677435768781780150392352856658297249604860622676183225242767693766;\\n    \\n    uint256 constant IC10x = 11558057052303902400059702043280340777083666103888311295557744738942786146876;\\n    uint256 constant IC10y = 21030565793076706653087540750237162719144743600115243962610282019181365614469;\\n    \\n    uint256 constant IC11x = 211290016040205171000789973300768147213249959649767730538575620641807752262;\\n    uint256 constant IC11y = 14074251329913641447383549058545049618774236675214643503129059817355211685945;\\n    \\n    uint256 constant IC12x = 5007882212908576436870074686757285949917671554669174089445073689337366116032;\\n    uint256 constant IC12y = 8210959292191381885861754575475610556426433048220439915161269333131257813130;\\n    \\n    uint256 constant IC13x = 13293719279090013504236450573751283305572177027415191811669599490547722825726;\\n    uint256 constant IC13y = 8394737425044468237637593002772009401923423400600154508468919657373196692829;\\n    \\n    uint256 constant IC14x = 17849795851187379032917708589772528668451956196405749334825448419860699439305;\\n    uint256 constant IC14y = 20196166092660826205542664729835753060825163009279265243562561763561842525422;\\n    \\n    uint256 constant IC15x = 17368992658991284229859666999462406799966588789284178471226211727121441855077;\\n    uint256 constant IC15y = 19638423699585201994958334447594876287044896849536887922062219468095291438511;\\n    \\n    uint256 constant IC16x = 19654713907060319277441312033604826926154173819497970431557465349988247571915;\\n    uint256 constant IC16y = 3817298700918036836886147395996118992183906216420518826507097883667875267292;\\n    \\n    uint256 constant IC17x = 7715044101419724963760869030711123766888906257960572330606070125777728578096;\\n    uint256 constant IC17y = 2749100633169600021571256078032739990539406582409355713895084604499131892503;\\n    \\n    uint256 constant IC18x = 1173364949775522746248454406902101588760396247931949401978732835369488287447;\\n    uint256 constant IC18y = 9162940134343148423841367568602434228374502231432445416424257085827811468306;\\n    \\n    uint256 constant IC19x = 8575038783593555420096523497046480724134527603142091243347577907184483020590;\\n    uint256 constant IC19y = 3995032950668712745213557428894999127778473468206002684518315008696369722974;\\n    \\n    uint256 constant IC20x = 16279031557779536503297581695798771201855657790427788979382231118751393888831;\\n    uint256 constant IC20y = 11912095810291450993597456027203060366509629970620014777813772359854497244336;\\n    \\n    uint256 constant IC21x = 497943037882247940402571514635505206539213343750949867327216752909870789343;\\n    uint256 constant IC21y = 14079819629540574449052320474177348262506545728548218346242372754966492347379;\\n    \\n    uint256 constant IC22x = 2466234520097193073740775906158395638512443576205561976749084142029636175391;\\n    uint256 constant IC22y = 106854436093524765859901864629893863994296607336300054760758587613638113109;\\n    \\n    uint256 constant IC23x = 10223460436131205976086221904034407754257122156968155547422280250210902765374;\\n    uint256 constant IC23y = 10646352474369269228971861663558957719664548073963349507349868931039896494345;\\n    \\n    uint256 constant IC24x = 7262802786186402103264187138606829015445409360219261120109243327566500881725;\\n    uint256 constant IC24y = 18331284185744023511439764643398593091927871820445384971993219024493909818118;\\n    \\n    uint256 constant IC25x = 13551021044771273396960595497281785961547884026117011307870286500103178948328;\\n    uint256 constant IC25y = 4186342654966538951118943039446911387678070729114812060402041727621399406368;\\n    \\n    uint256 constant IC26x = 15441069578651304978207067953794626204821594755773027544683951205991389396614;\\n    uint256 constant IC26y = 17560455184568150998457976400911956640491317398464001157951114666917781447625;\\n    \\n    uint256 constant IC27x = 7943633557899190383766787269575005363322575426463196731233157476227666177399;\\n    uint256 constant IC27y = 4879497724217437831661729305237201086591299485711452428791616388363643489471;\\n    \\n    uint256 constant IC28x = 76528467087185644481693720110962395284170988413766942453585983860142660820;\\n    uint256 constant IC28y = 14004039488612212499780635126224013900123007327247416988670721391551869445987;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[28] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n                \\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n                \\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n                \\n                g1_mulAccC(_pVk, IC16x, IC16y, calldataload(add(pubSignals, 480)))\\n                \\n                g1_mulAccC(_pVk, IC17x, IC17y, calldataload(add(pubSignals, 512)))\\n                \\n                g1_mulAccC(_pVk, IC18x, IC18y, calldataload(add(pubSignals, 544)))\\n                \\n                g1_mulAccC(_pVk, IC19x, IC19y, calldataload(add(pubSignals, 576)))\\n                \\n                g1_mulAccC(_pVk, IC20x, IC20y, calldataload(add(pubSignals, 608)))\\n                \\n                g1_mulAccC(_pVk, IC21x, IC21y, calldataload(add(pubSignals, 640)))\\n                \\n                g1_mulAccC(_pVk, IC22x, IC22y, calldataload(add(pubSignals, 672)))\\n                \\n                g1_mulAccC(_pVk, IC23x, IC23y, calldataload(add(pubSignals, 704)))\\n                \\n                g1_mulAccC(_pVk, IC24x, IC24y, calldataload(add(pubSignals, 736)))\\n                \\n                g1_mulAccC(_pVk, IC25x, IC25y, calldataload(add(pubSignals, 768)))\\n                \\n                g1_mulAccC(_pVk, IC26x, IC26y, calldataload(add(pubSignals, 800)))\\n                \\n                g1_mulAccC(_pVk, IC27x, IC27y, calldataload(add(pubSignals, 832)))\\n                \\n                g1_mulAccC(_pVk, IC28x, IC28y, calldataload(add(pubSignals, 864)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n            checkField(calldataload(add(_pubSignals, 416)))\\n            \\n            checkField(calldataload(add(_pubSignals, 448)))\\n            \\n            checkField(calldataload(add(_pubSignals, 480)))\\n            \\n            checkField(calldataload(add(_pubSignals, 512)))\\n            \\n            checkField(calldataload(add(_pubSignals, 544)))\\n            \\n            checkField(calldataload(add(_pubSignals, 576)))\\n            \\n            checkField(calldataload(add(_pubSignals, 608)))\\n            \\n            checkField(calldataload(add(_pubSignals, 640)))\\n            \\n            checkField(calldataload(add(_pubSignals, 672)))\\n            \\n            checkField(calldataload(add(_pubSignals, 704)))\\n            \\n            checkField(calldataload(add(_pubSignals, 736)))\\n            \\n            checkField(calldataload(add(_pubSignals, 768)))\\n            \\n            checkField(calldataload(add(_pubSignals, 800)))\\n            \\n            checkField(calldataload(add(_pubSignals, 832)))\\n            \\n            checkField(calldataload(add(_pubSignals, 864)))\\n            \\n            checkField(calldataload(add(_pubSignals, 896)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/hdfc_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18941993809644597263122344954710203970320565994383305999328476744235410761420;\\n    uint256 constant deltax2 = 16269071872410952148518498647090098652233286976541031880547316776610079594158;\\n    uint256 constant deltay1 = 1550998249936592441357989923809006764271578090146442710328018508594456802732;\\n    uint256 constant deltay2 = 19185606473196777841488599791312660844041715603856581158138067158870364920677;\\n\\n\\n    uint256 constant IC0x = 18372946622689748518823039356212228839772233944452095064036571257568061521778;\\n    uint256 constant IC0y = 4090510570013847365600433655993260067276592374276000919765717308908464822251;\\n\\n    uint256 constant IC1x = 14530896712312421799791723884957588697322730616061235674192507548768166179620;\\n    uint256 constant IC1y = 13241452075905838374684838766757247775031921510259565862881370673172146127140;\\n\\n    uint256 constant IC2x = 14067991457947420245134633075363919619678925016010769439544345434672907387120;\\n    uint256 constant IC2y = 15075242420546569507483308905973479840611557062002193416356995522848676830458;\\n\\n    uint256 constant IC3x = 2268679644940985681075191131123258317084928252651134980820814399102444034331;\\n    uint256 constant IC3y = 610946500236913130324137013956528865009524976591765517218479867010763423535;\\n\\n    uint256 constant IC4x = 13966057128193603356523191212776509611934676597484902071144796821963056393663;\\n    uint256 constant IC4y = 10287649621411400155282198379447556062773569989590617756213092986925054733118;\\n\\n    uint256 constant IC5x = 16014135780036425835288045946537103382733734245255165282336104564746920453689;\\n    uint256 constant IC5y = 5690379499787398426952245667412062460369879600268772354791710800039878218708;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/hdfc_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 4702324236483749359376242949045822465319116726958430523945202749659299908356;\\n    uint256 constant deltax2 = 3208360273321841799729262863226982899406813453791710733556183670543714948331;\\n    uint256 constant deltay1 = 20522417867108599823821076712059869373887669366867675744686285826246555872195;\\n    uint256 constant deltay2 = 12670660525148580266180384698238910692596142688879851786303352145688714106072;\\n\\n\\n    uint256 constant IC0x = 8030280747517387687084877954234429976549976554414160216395914656104281510226;\\n    uint256 constant IC0y = 17104142844454039490663032536549076577086340484025562888729760759694808607073;\\n\\n    uint256 constant IC1x = 8772237536144360869027888991210947226074582978952325102593968904821952496262;\\n    uint256 constant IC1y = 3122625119048240212134605236752638202088112691321561361183603728052095638860;\\n\\n    uint256 constant IC2x = 9866912783934848269401547176895297308112639832209806585476829119584997553683;\\n    uint256 constant IC2y = 18902285702690262680512478183614519704432813846276579831365492715033962922088;\\n\\n    uint256 constant IC3x = 16438843084767575186842465721500270558254188834133860009416059973276198912687;\\n    uint256 constant IC3y = 19637681743089590686621664763467973754245190088097969027495488201226096932201;\\n\\n    uint256 constant IC4x = 16244957609429507716576008270804128279750543290646474514068167892102606186532;\\n    uint256 constant IC4y = 16583611018934211828874350883177026517224756607611408661470436361325164178493;\\n\\n    uint256 constant IC5x = 1880231857260586659536997649990861400508081010769531584628586338531085366147;\\n    uint256 constant IC5y = 3722839973812376181715232865179709729667208171660553266886579036419738778905;\\n\\n    uint256 constant IC6x = 1270409441163088899313281517456149544998439975345678595006767836844214411555;\\n    uint256 constant IC6y = 10860874768269047281776646019661374802388524425936615586287903660208564296932;\\n\\n    uint256 constant IC7x = 8434045441105599576935866859120453521448783233787069448109618000861402242607;\\n    uint256 constant IC7y = 21026011281811734411736486883798620858743532933669000129465844405873540372296;\\n\\n    uint256 constant IC8x = 16444826603046727982676650569240181121009190318002859965831975618430480163200;\\n    uint256 constant IC8y = 13330479436133799576954496017456751243468101156567577943444875506883800747485;\\n\\n    uint256 constant IC9x = 10555698792423422968534735611731058731769401972428000627056129295681285141769;\\n    uint256 constant IC9y = 16920701552148154082888907960678652530790355790484478529127070630322055182590;\\n\\n    uint256 constant IC10x = 560745557010411154560455562795570257381559403111495489793631749127360454692;\\n    uint256 constant IC10y = 1810559313890482073038275535517759684260573040004038901411592861530654003553;\\n\\n    uint256 constant IC11x = 16290647924331362744847363177877456121951933254859466501497770055360811608170;\\n    uint256 constant IC11y = 7357664199131242056460365154843603175601302622408068632904637798809388576439;\\n\\n    uint256 constant IC12x = 18752167508011332686902609807404507911733917202367475123738963433802316522501;\\n    uint256 constant IC12y = 18915834728830385178845869536888475042275783085177607701559012212414153432990;\\n\\n    uint256 constant IC13x = 510508922566750460861825255921948971141871467672055616177326398295988211346;\\n    uint256 constant IC13y = 897537967901588078181449387398733392563087304136250554173225523551061601615;\\n\\n    uint256 constant IC14x = 12705726630718483467144829385938528127462379446304491139120491926133440095304;\\n    uint256 constant IC14y = 17721913697683987271820073115272158306375363130125429582329456762454201602835;\\n\\n    uint256 constant IC15x = 5311519503957019671658191600270827412585500467097722438446167059198229906675;\\n    uint256 constant IC15y = 18882610836190640499297283067779602696308349987082087123526913107849320426311;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[15] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n                g1_mulAccC(_pVk, IC13x, IC13y, calldataload(add(pubSignals, 384)))\\n\\n                g1_mulAccC(_pVk, IC14x, IC14y, calldataload(add(pubSignals, 416)))\\n\\n                g1_mulAccC(_pVk, IC15x, IC15y, calldataload(add(pubSignals, 448)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n            checkField(calldataload(add(_pubSignals, 416)))\\n\\n            checkField(calldataload(add(_pubSignals, 448)))\\n\\n            checkField(calldataload(add(_pubSignals, 480)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/paylah_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 12318562733668318057967382830221427666237239699225987985032893645092597896963;\\n    uint256 constant IC0y = 15657855671899618400007556951504294630273940980996673137263735010085055707390;\\n    \\n    uint256 constant IC1x = 16318436856423729107287918093922545458632495139231320565602979356428303462569;\\n    uint256 constant IC1y = 4810495723973346753789371240387123720895262429716398137877195360051164546484;\\n    \\n    uint256 constant IC2x = 19814687963098454533998306163824705102640821485692777137542340920712268514939;\\n    uint256 constant IC2y = 12257167397615177534567396175047492625199161266145909600553858630293299369528;\\n    \\n    uint256 constant IC3x = 13408219487503284549933183576863274981455900506485858464155495162051949037230;\\n    uint256 constant IC3y = 9837915164010549514666046938539565570695561213547492187431353950688871824403;\\n    \\n    uint256 constant IC4x = 15543791996387053481579384412794738528925166527611579250450212802063639702844;\\n    uint256 constant IC4y = 5711235029861715956844520578122416240878608085931395321340665939384951185140;\\n    \\n    uint256 constant IC5x = 9285521198372927293693672678871700213226154499641345273147438129961321930909;\\n    uint256 constant IC5y = 6639545694811747222574459017287704241632404869005602957496735525145341964055;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/paylah_send_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n\\n    \\n    uint256 constant IC0x = 4319092860097441316049418287444305039048095779893231017821104130403285480292;\\n    uint256 constant IC0y = 3344270019018610365449998567906450467594170878535598825094680934991584852741;\\n    \\n    uint256 constant IC1x = 11429228706986239563767652983220536909858458799154303285237181995899415633242;\\n    uint256 constant IC1y = 6545942313783633046339776542891696224348608938393152226164374231576653212555;\\n    \\n    uint256 constant IC2x = 14507068915704780413895893436584481111775977127382466290584364276286279184041;\\n    uint256 constant IC2y = 12776142996006275734195042667469848917703677799581851578857261713008840863587;\\n    \\n    uint256 constant IC3x = 14620516799603281774801254498631557026600888569007394605375777517068998816879;\\n    uint256 constant IC3y = 20976214052881772763019511760449083741597478065750993373689562141499728441796;\\n    \\n    uint256 constant IC4x = 16766647170945501501541003327281802167884713355161858308462457164639811605202;\\n    uint256 constant IC4y = 11886305766668108824339744801942299055520242182778941834166632869362289143493;\\n    \\n    uint256 constant IC5x = 11263898715798439144132753806492009129785774651116390021927310377487984024124;\\n    uint256 constant IC5y = 7543303976811892298907828969898468450551675871586411621350951724138970946737;\\n    \\n    uint256 constant IC6x = 15153415750327097394944359932059175991634488891027708778561653867959201049294;\\n    uint256 constant IC6y = 12307113852217971769318985952244808209695770821561174396817655585087333742160;\\n    \\n    uint256 constant IC7x = 21196231101285620583549326665225815879246352177423395771525369700801116630992;\\n    uint256 constant IC7y = 14459731184654830201793061011757567801109181845548939353216436254601523234552;\\n    \\n    uint256 constant IC8x = 7203912293872733817769230689902912693525332881269205037210466412487983872706;\\n    uint256 constant IC8y = 2940690450033114274124219354713399179597380520169733279056465256673148319135;\\n    \\n    uint256 constant IC9x = 11984207621756507416244014805108208533750302466835052107461830843008928620881;\\n    uint256 constant IC9y = 2430148058811900854399441420965836415485217642124795150473630732384740578596;\\n    \\n    uint256 constant IC10x = 10106847969584100379020046975698681078894886225943410562611583385863259672832;\\n    uint256 constant IC10y = 1329585604772287813230345578109804382389620429996175314125687849382909846276;\\n    \\n    uint256 constant IC11x = 11456165332954408921987303410118414759538447430037079456477186229507006675539;\\n    uint256 constant IC11y = 12923074421638603217293676161886695123100153432410892646493728460724993816182;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[11] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\\n\"\n    },\n    \"contracts/verifiers/venmo_registration_verifier.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 5769081632737242226708060316478642108025678562723404961104055110881549315015;\\n    uint256 constant deltax2 = 1222122859000121749932892287501863917661609724968348375635593315864943258998;\\n    uint256 constant deltay1 = 13150596480609262921150848552073010906292382340377222466620015945346818440872;\\n    uint256 constant deltay2 = 6686929785585801886747369085147750642655167663948404274080476289998846601768;\\n\\n\\n    uint256 constant IC0x = 14818478812900458102992225913018308409668384475703088663067499662922777788315;\\n    uint256 constant IC0y = 10901647033164725007515459068147925796342036058280305799619846965857861709099;\\n\\n    uint256 constant IC1x = 16828032782869657229636903862185764285796508252015292353427738045110029470882;\\n    uint256 constant IC1y = 16876070770305028267445598641339355244015598862704534388481727400951641331717;\\n\\n    uint256 constant IC2x = 15304480755373002414138391084023699720264920906012309695863952601627981988176;\\n    uint256 constant IC2y = 4009163051339556290748848145551058149023156213541749494531529061959606838227;\\n\\n    uint256 constant IC3x = 16963849690984866094119713808490898308222321239194931827986712562092984530745;\\n    uint256 constant IC3y = 3458477168593918947356779319414991587347052701838858364785725248244145715055;\\n\\n    uint256 constant IC4x = 9769239048868229064190785274196104348612006448596802490152528127147281314950;\\n    uint256 constant IC4y = 10502158653775723570028518583968089926108236542140470880906875222249832279959;\\n\\n    uint256 constant IC5x = 16169823372981726146181950539304161855883038115899371886787139190252590776590;\\n    uint256 constant IC5y = 8655382526097450639633584630116903847881078177250795121066456606139371134460;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[5] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v1.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 7537613082883539239998105689980695625949864158911233083307240523481447029201;\\n    uint256 constant deltax2 = 18425422419094349166845299166446400283955610392693002196033474730898100891393;\\n    uint256 constant deltay1 = 9734737963690957740179121580228276788359472364486142941618892845265550985341;\\n    uint256 constant deltay2 = 19424219928877642960622596960718531292261548324721236723020030007333427710256;\\n\\n    \\n    uint256 constant IC0x = 6902718247877772411363845861177050309258223353503700050311359326150519336692;\\n    uint256 constant IC0y = 15825279453398516401265572637576445394013091560186110937875220954546679110159;\\n    \\n    uint256 constant IC1x = 2335804858433576387747825582160359354916267733138827948973385608187184828569;\\n    uint256 constant IC1y = 5736008506642285963655345198014496364551739958976504633673791816202163044118;\\n    \\n    uint256 constant IC2x = 6269455652562704144793722062373279568471767955901279627797463015040136088132;\\n    uint256 constant IC2y = 2097530588191744967177200393826023428699458382295316095274264671302200006698;\\n    \\n    uint256 constant IC3x = 9822862276973085434476438868692851322487547916783049654593145248962644277643;\\n    uint256 constant IC3y = 13358026137961492797393341724052128319258593462853360012627607362475815103442;\\n    \\n    uint256 constant IC4x = 14719148997270446956997289375593821114034084437550001883662517657000734282586;\\n    uint256 constant IC4y = 1998224198671702911531451107100115167770885039941574729645701907241412776308;\\n    \\n    uint256 constant IC5x = 359894349223066781310974365307972581164914770698407647854073977658157147230;\\n    uint256 constant IC5y = 4226113369443688791926415338604034925838584747992607214489363181365627308608;\\n    \\n    uint256 constant IC6x = 8131352830647874407773009521188360590887607801163495436549679220199551501178;\\n    uint256 constant IC6y = 2496366191763335194055513493653718797330181861495912467368843578731618007027;\\n    \\n    uint256 constant IC7x = 5324791436169324680862288927376094103624123876195563861346513574577173643567;\\n    uint256 constant IC7y = 10539632294755752334066059856447171990510491871168341570429569842426314117653;\\n    \\n    uint256 constant IC8x = 21398838651908546916551334433437076903885176753396417385115556979686206468251;\\n    uint256 constant IC8y = 2283165388441295638775771203114643615346617529992451266709724264297809953544;\\n    \\n    uint256 constant IC9x = 16450282086321400334368283708403499847573182040077819178856321188442820130414;\\n    uint256 constant IC9y = 20227982940527385555692156484806747209260038014579804010296344969319860246613;\\n    \\n    uint256 constant IC10x = 1416849092724586759478061558363222409117668509275228664731118821895695167480;\\n    uint256 constant IC10y = 14279591006307641048883156401797861581231631415414897920853119376578010808716;\\n    \\n    uint256 constant IC11x = 10972046352748637769234591589921324542843146653569482848432798172628944437256;\\n    uint256 constant IC11y = 13951850916181885013998871924877530212665252857591601803360542322172843954667;\\n    \\n    uint256 constant IC12x = 10475342243781351585273160940612655577727791739250775206756870040352542452664;\\n    uint256 constant IC12y = 5139068014462344879213636708300130277178459139177464895691208627008733872682;\\n    \\n \\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n            \\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n                \\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n                \\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n                \\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n                \\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n                \\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n                \\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n                \\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n                \\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n                \\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n                \\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n                \\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n                \\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n                \\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n            \\n            checkField(calldataload(add(_pubSignals, 0)))\\n            \\n            checkField(calldataload(add(_pubSignals, 32)))\\n            \\n            checkField(calldataload(add(_pubSignals, 64)))\\n            \\n            checkField(calldataload(add(_pubSignals, 96)))\\n            \\n            checkField(calldataload(add(_pubSignals, 128)))\\n            \\n            checkField(calldataload(add(_pubSignals, 160)))\\n            \\n            checkField(calldataload(add(_pubSignals, 192)))\\n            \\n            checkField(calldataload(add(_pubSignals, 224)))\\n            \\n            checkField(calldataload(add(_pubSignals, 256)))\\n            \\n            checkField(calldataload(add(_pubSignals, 288)))\\n            \\n            checkField(calldataload(add(_pubSignals, 320)))\\n            \\n            checkField(calldataload(add(_pubSignals, 352)))\\n            \\n            checkField(calldataload(add(_pubSignals, 384)))\\n            \\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    },\n    \"contracts/verifiers/venmo_send_verifier_v2.sol\": {\n      \"content\": \"// SPDX-License-Identifier: GPL-3.0\\n/*\\n    Copyright 2021 0KIMS association.\\n\\n    This file is generated with [snarkJS](https://github.com/iden3/snarkjs).\\n\\n    snarkJS is a free software: you can redistribute it and/or modify it\\n    under the terms of the GNU General Public License as published by\\n    the Free Software Foundation, either version 3 of the License, or\\n    (at your option) any later version.\\n\\n    snarkJS is distributed in the hope that it will be useful, but WITHOUT\\n    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\\n    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\\n    License for more details.\\n\\n    You should have received a copy of the GNU General Public License\\n    along with snarkJS. If not, see <https://www.gnu.org/licenses/>.\\n*/\\n\\npragma solidity >=0.7.0 <0.9.0;\\n\\ncontract Groth16Verifier {\\n    // Scalar field size\\n    uint256 constant r    = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    // Base field size\\n    uint256 constant q   = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n    // Verification Key data\\n    uint256 constant alphax  = 20491192805390485299153009773594534940189261866228447918068658471970481763042;\\n    uint256 constant alphay  = 9383485363053290200918347156157836566562967994039712273449902621266178545958;\\n    uint256 constant betax1  = 4252822878758300859123897981450591353533073413197771768651442665752259397132;\\n    uint256 constant betax2  = 6375614351688725206403948262868962793625744043794305715222011528459656738731;\\n    uint256 constant betay1  = 21847035105528745403288232691147584728191162732299865338377159692350059136679;\\n    uint256 constant betay2  = 10505242626370262277552901082094356697409835680220590971873171140371331206856;\\n    uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;\\n    uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;\\n    uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;\\n    uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;\\n    uint256 constant deltax1 = 18328387051598807528249493314514145024937042250885627547959044883136494366641;\\n    uint256 constant deltax2 = 3386774781507691045496398544280778263778440812515279208798807180083491280173;\\n    uint256 constant deltay1 = 16821727561116842532884384419138673375540064786328931249817719916404888022536;\\n    uint256 constant deltay2 = 1123664166477505744129630415618405338920235895404387079679232588612219519562;\\n\\n\\n    uint256 constant IC0x = 683472932776948400750928183065263098669615563556360338372833924600438813516;\\n    uint256 constant IC0y = 18666217517107659198468932537223289488211162204021049201152947701274582172524;\\n\\n    uint256 constant IC1x = 5957489728060043789412617245535794043845955108950274902279429275472126033981;\\n    uint256 constant IC1y = 17213842189027108453793126183491372346749115594951602121554021001250817448283;\\n\\n    uint256 constant IC2x = 5280592858930732491081692246698697527250251794316036984307511741279974296201;\\n    uint256 constant IC2y = 8111734476836347257234571099465898187033625933584344316720010645066801977050;\\n\\n    uint256 constant IC3x = 176983152191433697844590348335722945315715793420756570889736101696034089744;\\n    uint256 constant IC3y = 4147783463854782141079943196300178088429603752756004708323436962592942199215;\\n\\n    uint256 constant IC4x = 7016641010839351826808883117249407312720210763319474150330325663058498172140;\\n    uint256 constant IC4y = 15257618442351784318448796698076117344608912509409931913911370631502942212130;\\n\\n    uint256 constant IC5x = 15817725721802798668222148653046845952443466764768454194052249826220321621816;\\n    uint256 constant IC5y = 2940267881915130534698359759164565925974426096153642581826065077020524285232;\\n\\n    uint256 constant IC6x = 8833333661367035240569025508763324883570403851344432159561900646778286378282;\\n    uint256 constant IC6y = 3556536150047088396537732554265301999296282372311505822332350804480691191981;\\n\\n    uint256 constant IC7x = 9959056323665039276989174002345573767882071324121097256708298686272275486451;\\n    uint256 constant IC7y = 7023002103308412666408975880294927323004827513171170207971973197470018772559;\\n\\n    uint256 constant IC8x = 8207282690550689468584562794282986294440142872347002351019411985498318040139;\\n    uint256 constant IC8y = 8643622322844942938685778286305956077045792123184210921354210423962087823720;\\n\\n    uint256 constant IC9x = 12401119311682184985808768788213841283516443570850536486255767033548969139477;\\n    uint256 constant IC9y = 16241900536813668741972736250522049008644456869472181028111305624265055525406;\\n\\n    uint256 constant IC10x = 10782959726843763353999019108675107447363568230835523629682248381458082459751;\\n    uint256 constant IC10y = 14325272441282241380202625730402651125881798640016732547740500645998775923797;\\n\\n    uint256 constant IC11x = 38003989415781860274750588784706013486298216837357322126260012146590910783;\\n    uint256 constant IC11y = 16359614766165062542993995673953446181450261979749599674250920047691643311095;\\n\\n    uint256 constant IC12x = 4163626116766781564865195283570334511561738797859190315348089812662616563873;\\n    uint256 constant IC12y = 5621503726237114129092618034079311909999731069956955773990556602251925493627;\\n\\n\\n    // Memory data\\n    uint16 constant pVk = 0;\\n    uint16 constant pPairing = 128;\\n\\n    uint16 constant pLastMem = 896;\\n\\n    function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[12] calldata _pubSignals) public view returns (bool) {\\n        assembly {\\n            function checkField(v) {\\n                if iszero(lt(v, q)) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            // G1 function to multiply a G1 value(x,y) to value in an address\\n            function g1_mulAccC(pR, x, y, s) {\\n                let success\\n                let mIn := mload(0x40)\\n                mstore(mIn, x)\\n                mstore(add(mIn, 32), y)\\n                mstore(add(mIn, 64), s)\\n\\n                success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n\\n                mstore(add(mIn, 64), mload(pR))\\n                mstore(add(mIn, 96), mload(add(pR, 32)))\\n\\n                success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)\\n\\n                if iszero(success) {\\n                    mstore(0, 0)\\n                    return(0, 0x20)\\n                }\\n            }\\n\\n            function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk {\\n                let _pPairing := add(pMem, pPairing)\\n                let _pVk := add(pMem, pVk)\\n\\n                mstore(_pVk, IC0x)\\n                mstore(add(_pVk, 32), IC0y)\\n\\n                // Compute the linear combination vk_x\\n\\n                g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0)))\\n\\n                g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32)))\\n\\n                g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64)))\\n\\n                g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96)))\\n\\n                g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128)))\\n\\n                g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160)))\\n\\n                g1_mulAccC(_pVk, IC7x, IC7y, calldataload(add(pubSignals, 192)))\\n\\n                g1_mulAccC(_pVk, IC8x, IC8y, calldataload(add(pubSignals, 224)))\\n\\n                g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))\\n\\n                g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))\\n\\n                g1_mulAccC(_pVk, IC11x, IC11y, calldataload(add(pubSignals, 320)))\\n\\n                g1_mulAccC(_pVk, IC12x, IC12y, calldataload(add(pubSignals, 352)))\\n\\n\\n                // -A\\n                mstore(_pPairing, calldataload(pA))\\n                mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))\\n\\n                // B\\n                mstore(add(_pPairing, 64), calldataload(pB))\\n                mstore(add(_pPairing, 96), calldataload(add(pB, 32)))\\n                mstore(add(_pPairing, 128), calldataload(add(pB, 64)))\\n                mstore(add(_pPairing, 160), calldataload(add(pB, 96)))\\n\\n                // alpha1\\n                mstore(add(_pPairing, 192), alphax)\\n                mstore(add(_pPairing, 224), alphay)\\n\\n                // beta2\\n                mstore(add(_pPairing, 256), betax1)\\n                mstore(add(_pPairing, 288), betax2)\\n                mstore(add(_pPairing, 320), betay1)\\n                mstore(add(_pPairing, 352), betay2)\\n\\n                // vk_x\\n                mstore(add(_pPairing, 384), mload(add(pMem, pVk)))\\n                mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))\\n\\n\\n                // gamma2\\n                mstore(add(_pPairing, 448), gammax1)\\n                mstore(add(_pPairing, 480), gammax2)\\n                mstore(add(_pPairing, 512), gammay1)\\n                mstore(add(_pPairing, 544), gammay2)\\n\\n                // C\\n                mstore(add(_pPairing, 576), calldataload(pC))\\n                mstore(add(_pPairing, 608), calldataload(add(pC, 32)))\\n\\n                // delta2\\n                mstore(add(_pPairing, 640), deltax1)\\n                mstore(add(_pPairing, 672), deltax2)\\n                mstore(add(_pPairing, 704), deltay1)\\n                mstore(add(_pPairing, 736), deltay2)\\n\\n\\n                let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)\\n\\n                isOk := and(success, mload(_pPairing))\\n            }\\n\\n            let pMem := mload(0x40)\\n            mstore(0x40, add(pMem, pLastMem))\\n\\n            // Validate that all evaluations ∈ F\\n\\n            checkField(calldataload(add(_pubSignals, 0)))\\n\\n            checkField(calldataload(add(_pubSignals, 32)))\\n\\n            checkField(calldataload(add(_pubSignals, 64)))\\n\\n            checkField(calldataload(add(_pubSignals, 96)))\\n\\n            checkField(calldataload(add(_pubSignals, 128)))\\n\\n            checkField(calldataload(add(_pubSignals, 160)))\\n\\n            checkField(calldataload(add(_pubSignals, 192)))\\n\\n            checkField(calldataload(add(_pubSignals, 224)))\\n\\n            checkField(calldataload(add(_pubSignals, 256)))\\n\\n            checkField(calldataload(add(_pubSignals, 288)))\\n\\n            checkField(calldataload(add(_pubSignals, 320)))\\n\\n            checkField(calldataload(add(_pubSignals, 352)))\\n\\n            checkField(calldataload(add(_pubSignals, 384)))\\n\\n\\n            // Validate all evaluations\\n            let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)\\n\\n            mstore(0, isValid)\\n             return(0, 0x20)\\n         }\\n     }\\n }\"\n    }\n  },\n  \"settings\": {\n    \"optimizer\": {\n      \"enabled\": true,\n      \"runs\": 200\n    },\n    \"outputSelection\": {\n      \"*\": {\n        \"*\": [\n          \"abi\",\n          \"evm.bytecode\",\n          \"evm.deployedBytecode\",\n          \"evm.methodIdentifiers\",\n          \"metadata\",\n          \"devdoc\",\n          \"userdoc\",\n          \"storageLayout\",\n          \"evm.gasEstimates\"\n        ],\n        \"\": [\n          \"ast\"\n        ]\n      }\n    },\n    \"metadata\": {\n      \"useLiteralContent\": true\n    }\n  }\n}"
  },
  {
    "path": "contracts-ramp/hardhat.config.ts",
    "content": "import * as dotenv from 'dotenv';\n\nimport '@typechain/hardhat'\nimport 'solidity-coverage'\nimport '@nomiclabs/hardhat-ethers'\nimport 'hardhat-deploy';\nimport '@nomiclabs/hardhat-etherscan';\nimport '@nomicfoundation/hardhat-chai-matchers'\n\nimport { HardhatUserConfig } from \"hardhat/config\";\n\ndotenv.config();\n\nconst config: HardhatUserConfig = {\n  solidity: {\n    compilers: [\n      {\n        version: \"0.8.18\",\n        settings: {\n          optimizer: {\n            enabled: true,\n            runs: 200,\n          },\n        },\n      },\n    ],\n  },\n  networks: {\n    hardhat: {\n      allowBlocksWithSameTimestamp: true,\n    },\n    localhost: {\n      allowBlocksWithSameTimestamp: true,\n    },\n    base_staging: {\n      url: \"https://developer-access-mainnet.base.org\",\n      // @ts-ignore\n      accounts: [\n        `0x${process.env.BASE_DEPLOY_PRIVATE_KEY}`,\n      ],\n      verify: {\n        etherscan: {\n          apiUrl: \"https://api.basescan.org/\",\n          apiKey: process.env.BASESCAN_API_KEY\n        }\n      },\n    },\n    sepolia: {\n      url: \"https://sepolia.infura.io/v3/\" + process.env.INFURA_TOKEN,\n      // @ts-ignore\n      accounts: [\n        `0x${process.env.TESTNET_DEPLOY_PRIVATE_KEY}`,\n      ],\n      verify: {\n        etherscan: {\n          apiKey: process.env.ETHERSCAN_KEY\n        }\n      },\n    },\n    goerli: {\n      url: \"https://goerli.infura.io/v3/\" + process.env.INFURA_TOKEN,\n      // @ts-ignore\n      accounts: [\n        `0x${process.env.TESTNET_DEPLOY_PRIVATE_KEY}`,\n      ],\n      verify: {\n        etherscan: {\n          apiKey: process.env.ETHERSCAN_KEY\n        }\n      },\n    },\n    base: {\n      url: \"https://developer-access-mainnet.base.org\",\n      // @ts-ignore\n      accounts: [\n        `0x${process.env.BASE_DEPLOY_PRIVATE_KEY}`,\n      ],\n      verify: {\n        etherscan: {\n          apiUrl: \"https://api.basescan.org/\",\n          apiKey: process.env.BASESCAN_API_KEY\n        }\n      },\n    },\n  },\n  // @ts-ignore\n  typechain: {\n    outDir: \"typechain\",\n    target: \"ethers-v5\",\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "contracts-ramp/package.json",
    "content": "{\n  \"name\": \"zkp2p-contracts\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Contracts for the ZK Peer to Peer fiat on/off-ramp\",\n  \"main\": \"index.js\",\n  \"author\": \"bweick <brian.weickmann@gmail.com>\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"build\": \"yarn clean && yarn compile && yarn build:ts:latest\",\n    \"build:ts:latest\": \"yarn typechain && yarn transpile\",\n    \"chain\": \"npx hardhat node --no-deploy\",\n    \"clean\": \"rm -f coverage.json; rm -rf .coverage_cache; rm -rf .coverage_contracts; rm -rf cache; rm -rf coverage; rm -rf typechain; rm -rf artifacts; rm -rf dist\",\n    \"compile\": \"hardhat compile\",\n    \"coverage\": \"yarn clean && yarn build && npx hardhat coverage --testfiles 'test/{libs,processors,ramps}/{*,**/*}.ts'\",\n    \"deploy:localhost\": \"npx hardhat deploy --network localhost\",\n    \"deploy:goerli\": \"npx hardhat deploy --network goerli\",\n    \"deploy:sepolia\": \"npx hardhat deploy --network sepolia\",\n    \"deploy:base\": \"npx hardhat deploy --network base  && npx hardhat export --network base --export ./deployments/outputs/baseContracts.ts\",\n    \"deploy:base_staging\": \"npx hardhat deploy --network base_staging && npx hardhat export --network base_staging --export ./deployments/outputs/baseStagingContracts.ts\",\n    \"etherscan:goerli\": \"yarn hardhat --network goerli etherscan-verify\",\n    \"etherscan:sepolia\": \"yarn hardhat --network sepolia etherscan-verify\",\n    \"etherscan:base\": \"yarn hardhat --network base etherscan-verify\",\n    \"etherscan:base_staging\": \"yarn hardhat --network base_staging etherscan-verify\",\n    \"importVerifier\": \"rm -r ./contracts/verifiers/* && find ../circuits-circom -type d -name 'circuits' -exec sh -c 'cp -r {}/*/contracts/* ./contracts/verifiers/' \\\\;\",\n    \"test\": \"npx hardhat test test/libs/*.ts test/processors/*.ts test/ramps/**/*.ts\",\n    \"test:clean\": \"yarn build && yarn test\",\n    \"test:fast\": \"NO_COMPILE=true TS_NODE_TRANSPILE_ONLY=1 yarn test --no-compile\",\n    \"test:deploy\": \"npx hardhat test test/deploy/*.ts\",\n    \"typechain\": \"hardhat typechain\",\n    \"transpile\": \"tsc\"\n  },\n  \"devDependencies\": {\n    \"@nomicfoundation/hardhat-chai-matchers\": \"^1.0.6\",\n    \"@nomicfoundation/hardhat-network-helpers\": \"^1.0.8\",\n    \"@nomicfoundation/hardhat-verify\": \"^1.1.1\",\n    \"@nomiclabs/hardhat-ethers\": \"^2.2.2\",\n    \"@nomiclabs/hardhat-etherscan\": \"^3.1.7\",\n    \"@typechain/ethers-v5\": \"^10.2.0\",\n    \"@typechain/hardhat\": \"^6.1.5\",\n    \"@types/chai\": \"^4.2.0\",\n    \"@types/mocha\": \">=9.1.0\",\n    \"@types/node\": \">=12.0.0\",\n    \"chai\": \"^4.2.0\",\n    \"ethers\": \"^5.7.2\",\n    \"hardhat\": \"^2.12.6\",\n    \"hardhat-deploy\": \"^0.11.34\",\n    \"hardhat-gas-reporter\": \"^1.0.8\",\n    \"module-alias\": \"^2.2.3\",\n    \"solidity-coverage\": \"^0.8.4\",\n    \"ts-node\": \">=8.0.0\",\n    \"typechain\": \"^8.1.0\",\n    \"typescript\": \">=4.5.0\"\n  },\n  \"dependencies\": {\n    \"@openzeppelin/contracts\": \"^4.9.2\",\n    \"@zk-email/contracts\": \"^3.2.0\",\n    \"circomlibjs\": \"^0.1.7\",\n    \"dotenv\": \"^16.3.1\",\n    \"ethereum-waffle\": \"^4.0.10\"\n  },\n  \"_moduleAliases\": {\n    \"@utils\": \"utils\",\n    \"@typechain\": \"typechain\"\n  }\n}\n"
  },
  {
    "path": "contracts-ramp/test/deploy/garantiDeploy.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { deployments, ethers } from \"hardhat\";\n\nimport {\n  ManagedKeyHashAdapterV2,\n  NullifierRegistry,\n  GarantiRamp,\n  GarantiRegistrationProcessor,\n  GarantiSendProcessor,\n} from \"../../utils/contracts\"\nimport {\n  ManagedKeyHashAdapterV2__factory,\n  NullifierRegistry__factory,\n  GarantiRamp__factory,\n  GarantiRegistrationProcessor__factory,\n  GarantiSendProcessor__factory,\n} from \"../../typechain\"\n\nimport {\n  getAccounts,\n  getWaffleExpect,\n} from \"../../utils/test\";\nimport {\n  Account\n} from \"../../utils/test/types\";\nimport {\n  Address\n} from \"../../utils/types\";\n\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../../deployments/parameters\";\nimport { PaymentProviders } from \"../../utils/types\"\n\nconst expect = getWaffleExpect();\n\nconst paymentProvider = PaymentProviders.Garanti;\n\ndescribe(\"Garanti Deploy\", () => {\n  let deployer: Account;\n  let multiSig: Address;\n\n  let garantiRamp: GarantiRamp;\n  let garantiRegistrationProcessor: GarantiRegistrationProcessor;\n  let garantiSendProcessor: GarantiSendProcessor;\n  let nullifierRegistry: NullifierRegistry;\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n\n  const network: string = deployments.getNetworkName();\n\n  function getDeployedContractAddress(network: string, contractName: string): string {\n    return require(`../../deployments/${network}/${contractName}.json`).address;\n  }\n\n  before(async () => {\n    [\n      deployer,\n    ] = await getAccounts();\n\n    multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer.address;\n\n    const garantiRampAddress  = await getDeployedContractAddress(network, \"GarantiRamp\");\n    garantiRamp = new GarantiRamp__factory(deployer.wallet).attach(garantiRampAddress);\n\n    const garantiRegistrationProcessorAddress  = await getDeployedContractAddress(network, \"GarantiRegistrationProcessor\");\n    garantiRegistrationProcessor = new GarantiRegistrationProcessor__factory(deployer.wallet).attach(garantiRegistrationProcessorAddress);\n\n    const garantiSendProcessorAddress  = await getDeployedContractAddress(network, \"GarantiSendProcessor\");\n    garantiSendProcessor = new GarantiSendProcessor__factory(deployer.wallet).attach(garantiSendProcessorAddress);\n\n    const nullifierRegistryAddress  = await getDeployedContractAddress(network, \"NullifierRegistry\");\n    nullifierRegistry = new NullifierRegistry__factory(deployer.wallet).attach(nullifierRegistryAddress);\n\n    const keyHashAdapterAddress  = await getDeployedContractAddress(network, \"GarantiManagedKeyHashAdapter\");\n    keyHashAdapter = new ManagedKeyHashAdapterV2__factory(deployer.wallet).attach(keyHashAdapterAddress);\n  });\n\n  describe(\"GarantiRamp\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualRegistrationProcessor = await garantiRamp.registrationProcessor();\n      const actualSendProcessor = await garantiRamp.sendProcessor();\n      const actualUsdc = await garantiRamp.usdc();\n\n      const expectedUsdc = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n      expect(actualRegistrationProcessor).to.eq(garantiRegistrationProcessor.address);\n      expect(actualSendProcessor).to.eq(garantiSendProcessor.address);\n      expect(actualUsdc).to.eq(expectedUsdc);\n    });\n\n    it(\"should have the correct limitations set\", async () => {\n      const actualCoolDownPeriod = await garantiRamp.onRampCooldownPeriod();\n      const actualMinDepositAmount = await garantiRamp.minDepositAmount();\n      const actualMaxOnRampAmount = await garantiRamp.maxOnRampAmount();\n      const actualIntentExpirationPeriod = await garantiRamp.intentExpirationPeriod();\n\n      expect(actualCoolDownPeriod).to.eq(ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network]);\n      expect(actualMinDepositAmount).to.eq(MIN_DEPOSIT_AMOUNT[paymentProvider][network]);\n      expect(actualMaxOnRampAmount).to.eq(MAX_ONRAMP_AMOUNT[paymentProvider][network]);\n      expect(actualIntentExpirationPeriod).to.eq(INTENT_EXPIRATION_PERIOD[paymentProvider][network]);\n    });\n\n    it(\"should correctly fee and ownership params\", async () => {\n      const actualSustainabilityFee = await garantiRamp.sustainabilityFee();\n      const actualSustainabilityFeeRecipient = await garantiRamp.sustainabilityFeeRecipient();\n      const actualOwner = await garantiRamp.owner();\n\n      const expectedSustainabilityFeeRecipient = SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer.address;\n\n      expect(actualSustainabilityFee).to.eq(SUSTAINABILITY_FEE[paymentProvider][network]);\n      expect(actualSustainabilityFeeRecipient).to.eq(expectedSustainabilityFeeRecipient);\n      expect(actualOwner).to.eq(multiSig);\n    });\n  });\n\n  describe(\"GarantiRegistrationProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await garantiRegistrationProcessor.ramp();\n      const actualOwner = await garantiRegistrationProcessor.owner();\n      const actualKeyHashAdapter = await garantiRegistrationProcessor.mailServerKeyHashAdapter();\n      const actualNullifierRegistry = await garantiRegistrationProcessor.nullifierRegistry();\n      const actualBodyHashVerifier = await garantiSendProcessor.bodyHashVerifier();\n      const actualEmailFromAddress = await garantiRegistrationProcessor.emailFromAddress();\n      const actualTimestampBuffer = await garantiRegistrationProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(garantiRamp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(actualBodyHashVerifier).to.eq(getDeployedContractAddress(network, \"GarantiBodyHashVerifier\"))\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n      expect(actualTimestampBuffer).to.eq(0);\n    });\n  });\n\n  describe(\"GarantiSendProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await garantiSendProcessor.ramp();\n      const actualOwner = await garantiSendProcessor.owner();\n      const actualKeyHashAdapter = await garantiSendProcessor.mailServerKeyHashAdapter();\n      const actualNullifierRegistry = await garantiSendProcessor.nullifierRegistry();\n      const actualBodyHashVerifier = await garantiSendProcessor.bodyHashVerifier();\n      const actualEmailFromAddress = await garantiSendProcessor.emailFromAddress();\n      const actualTimestampBuffer = await garantiSendProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(garantiRamp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(actualBodyHashVerifier).to.eq(getDeployedContractAddress(network, \"GarantiBodyHashVerifier\"));\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n      expect(actualTimestampBuffer).to.eq(TIMESTAMP_BUFFER[paymentProvider]);\n    });\n  });\n\n  describe(\"ManagedKeyHashAdapterV2\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await keyHashAdapter.owner();\n      const actualMailserverKeyHashes = await keyHashAdapter.getMailServerKeyHashes();\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualMailserverKeyHashes).to.contain(SERVER_KEY_HASH[paymentProvider][0]);\n    });\n  });\n\n  describe(\"NullifierRegistry\", async () => {\n    it(\"should have the correct write permissions set\", async () => {\n      const sendHasWritePermission = await nullifierRegistry.isWriter(garantiSendProcessor.address);\n      const registrationHasWritePermission = await nullifierRegistry.isWriter(garantiRegistrationProcessor.address);\n\n      expect(sendHasWritePermission).to.be.true;\n      expect(registrationHasWritePermission).to.be.true;\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/deploy/hdfcDeploy.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { deployments, ethers } from \"hardhat\";\n\nimport {\n  ManagedKeyHashAdapterV2,\n  NullifierRegistry,\n  HDFCRamp,\n  HDFCRegistrationProcessor,\n  HDFCSendProcessor,\n} from \"../../utils/contracts\"\nimport {\n  ManagedKeyHashAdapterV2__factory,\n  NullifierRegistry__factory,\n  HDFCRamp__factory,\n  HDFCRegistrationProcessor__factory,\n  HDFCSendProcessor__factory,\n} from \"../../typechain\"\n\nimport {\n  getAccounts,\n  getWaffleExpect,\n} from \"../../utils/test\";\nimport {\n  Account\n} from \"../../utils/test/types\";\nimport {\n  Address\n} from \"../../utils/types\";\n\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../../deployments/parameters\";\nimport { PaymentProviders } from \"../../utils/types\"\n\nconst expect = getWaffleExpect();\n\nconst paymentProvider = PaymentProviders.HDFC;\n\ndescribe(\"HDFC Deploy\", () => {\n  let deployer: Account;\n  let multiSig: Address;\n\n  let hdfcRamp: HDFCRamp;\n  let hdfcRegistrationProcessor: HDFCRegistrationProcessor;\n  let hdfcSendProcessor: HDFCSendProcessor;\n  let nullifierRegistry: NullifierRegistry;\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n\n  const network: string = deployments.getNetworkName();\n\n  function getDeployedContractAddress(network: string, contractName: string): string {\n    return require(`../../deployments/${network}/${contractName}.json`).address;\n  }\n\n  before(async () => {\n    [\n      deployer,\n    ] = await getAccounts();\n\n    multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer.address;\n\n    const hdfcRampAddress  = await getDeployedContractAddress(network, \"HDFCRamp\");\n    hdfcRamp = new HDFCRamp__factory(deployer.wallet).attach(hdfcRampAddress);\n\n    const hdfcRegistrationProcessorAddress  = await getDeployedContractAddress(network, \"HDFCRegistrationProcessor\");\n    hdfcRegistrationProcessor = new HDFCRegistrationProcessor__factory(deployer.wallet).attach(hdfcRegistrationProcessorAddress);\n\n    const hdfcSendProcessorAddress  = await getDeployedContractAddress(network, \"HDFCSendProcessor\");\n    hdfcSendProcessor = new HDFCSendProcessor__factory(deployer.wallet).attach(hdfcSendProcessorAddress);\n\n    const nullifierRegistryAddress  = await getDeployedContractAddress(network, \"NullifierRegistry\");\n    nullifierRegistry = new NullifierRegistry__factory(deployer.wallet).attach(nullifierRegistryAddress);\n\n    const keyHashAdapterAddress  = await getDeployedContractAddress(network, \"HDFCManagedKeyHashAdapter\");\n    keyHashAdapter = new ManagedKeyHashAdapterV2__factory(deployer.wallet).attach(keyHashAdapterAddress);\n  });\n\n  describe(\"HDFCRamp\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualRegistrationProcessor = await hdfcRamp.registrationProcessor();\n      const actualSendProcessor = await hdfcRamp.sendProcessor();\n      const actualUsdc = await hdfcRamp.usdc();\n      const actualPoseidon3 = await hdfcRamp.poseidon3();\n      const actualPoseidon6 = await hdfcRamp.poseidon6();\n\n      const expectedUsdc = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n      expect(actualRegistrationProcessor).to.eq(hdfcRegistrationProcessor.address);\n      expect(actualSendProcessor).to.eq(hdfcSendProcessor.address);\n      expect(actualUsdc).to.eq(expectedUsdc);\n      expect(actualPoseidon3).to.eq(await getDeployedContractAddress(network, \"Poseidon3\"));\n      expect(actualPoseidon6).to.eq(await getDeployedContractAddress(network, \"Poseidon6\"));\n    });\n\n    it(\"should have the correct limitations set\", async () => {\n      const actualCoolDownPeriod = await hdfcRamp.onRampCooldownPeriod();\n      const actualMinDepositAmount = await hdfcRamp.minDepositAmount();\n      const actualMaxOnRampAmount = await hdfcRamp.maxOnRampAmount();\n      const actualIntentExpirationPeriod = await hdfcRamp.intentExpirationPeriod();\n\n      expect(actualCoolDownPeriod).to.eq(ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network]);\n      expect(actualMinDepositAmount).to.eq(MIN_DEPOSIT_AMOUNT[paymentProvider][network]);\n      expect(actualMaxOnRampAmount).to.eq(MAX_ONRAMP_AMOUNT[paymentProvider][network]);\n      expect(actualIntentExpirationPeriod).to.eq(INTENT_EXPIRATION_PERIOD[paymentProvider][network]);\n    });\n\n    it(\"should correctly fee and ownership params\", async () => {\n      const actualSustainabilityFee = await hdfcRamp.sustainabilityFee();\n      const actualSustainabilityFeeRecipient = await hdfcRamp.sustainabilityFeeRecipient();\n      const actualOwner = await hdfcRamp.owner();\n\n      const expectedSustainabilityFeeRecipient = SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer.address;\n\n      expect(actualSustainabilityFee).to.eq(SUSTAINABILITY_FEE[paymentProvider][network]);\n      expect(actualSustainabilityFeeRecipient).to.eq(expectedSustainabilityFeeRecipient);\n      expect(actualOwner).to.eq(multiSig);\n    });\n  });\n\n  describe(\"HDFCRegistrationProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await hdfcRegistrationProcessor.ramp();\n      const actualOwner = await hdfcRegistrationProcessor.owner();\n      const actualKeyHashAdapter = await hdfcRegistrationProcessor.mailServerKeyHashAdapter();\n      const actualNullifierRegistry = await hdfcRegistrationProcessor.nullifierRegistry();\n      const actualEmailFromAddress = await hdfcRegistrationProcessor.emailFromAddress();\n      const actualTimestampBuffer = await hdfcRegistrationProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(hdfcRamp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n      expect(actualTimestampBuffer).to.eq(0);\n    });\n  });\n\n  describe(\"HDFCSendProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await hdfcSendProcessor.ramp();\n      const actualOwner = await hdfcSendProcessor.owner();\n      const actualKeyHashAdapter = await hdfcSendProcessor.mailServerKeyHashAdapter();\n      const actualNullifierRegistry = await hdfcSendProcessor.nullifierRegistry();\n      const actualEmailFromAddress = await hdfcSendProcessor.emailFromAddress();\n      const actualTimestampBuffer = await hdfcSendProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(hdfcRamp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n      expect(actualTimestampBuffer).to.eq(TIMESTAMP_BUFFER[paymentProvider]);\n    });\n  });\n\n  describe(\"ManagedKeyHashAdapterV2\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await keyHashAdapter.owner();\n      const actualMailserverKeyHashes = await keyHashAdapter.getMailServerKeyHashes();\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualMailserverKeyHashes).to.contain(SERVER_KEY_HASH[paymentProvider][0]);\n      expect(actualMailserverKeyHashes).to.contain(SERVER_KEY_HASH[paymentProvider][1]);\n    });\n  });\n\n  describe(\"NullifierRegistry\", async () => {\n    it(\"should have the correct write permissions set\", async () => {\n      const sendHasWritePermission = await nullifierRegistry.isWriter(hdfcSendProcessor.address);\n      const registrationHasWritePermission = await nullifierRegistry.isWriter(hdfcRegistrationProcessor.address);\n\n      expect(sendHasWritePermission).to.be.true;\n      expect(registrationHasWritePermission).to.be.true;\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/deploy/revolutDeploy.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { deployments, ethers } from \"hardhat\";\n\nimport {\n  NullifierRegistry,\n  RevolutRamp,\n  RevolutAccountRegistry,\n  RevolutAccountRegistrationProcessor,\n  RevolutSendProcessor,\n} from \"../../utils/contracts\"\nimport {\n  NullifierRegistry__factory,\n  RevolutRamp__factory,\n  RevolutAccountRegistry__factory,\n  RevolutAccountRegistrationProcessor__factory,\n  RevolutSendProcessor__factory,\n} from \"../../typechain\"\n\nimport {\n  getAccounts,\n  getWaffleExpect,\n} from \"../../utils/test\";\nimport {\n  Account\n} from \"../../utils/test/types\";\nimport {\n  Address\n} from \"../../utils/types\";\n\nimport {\n  ACCOUNT_TLS_PARAMS,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../../deployments/parameters\";\nimport { PaymentProviders } from \"../../utils/types\"\n\nconst expect = getWaffleExpect();\n\nconst paymentProvider = PaymentProviders.Revolut;\n\ndescribe(\"Revolut Deploy\", () => {\n  let deployer: Account;\n  let multiSig: Address;\n\n  let wiseRamp: RevolutRamp;\n  let wiseAccountRegistry: RevolutAccountRegistry;\n  let wiseAccountRegistrationProcessor: RevolutAccountRegistrationProcessor;\n  let wiseSendProcessor: RevolutSendProcessor;\n  let nullifierRegistry: NullifierRegistry;\n\n  const network: string = deployments.getNetworkName();\n\n  function getDeployedContractAddress(network: string, contractName: string): string {\n    return require(`../../deployments/${network}/${contractName}.json`).address;\n  }\n\n  before(async () => {\n    [\n      deployer,\n    ] = await getAccounts();\n\n    multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer.address;\n\n    const wiseRampAddress  = await getDeployedContractAddress(network, \"RevolutRamp\");\n    wiseRamp = new RevolutRamp__factory(deployer.wallet).attach(wiseRampAddress);\n\n    const wiseAccountRegistryAddress  = await getDeployedContractAddress(network, \"RevolutAccountRegistry\");\n    wiseAccountRegistry = new RevolutAccountRegistry__factory(deployer.wallet).attach(wiseAccountRegistryAddress);\n\n    const wiseAccountRegistrationProcessorAddress  = await getDeployedContractAddress(network, \"RevolutAccountRegistrationProcessor\");\n    wiseAccountRegistrationProcessor = new RevolutAccountRegistrationProcessor__factory(deployer.wallet).attach(wiseAccountRegistrationProcessorAddress);\n\n    const wiseSendProcessorAddress  = await getDeployedContractAddress(network, \"RevolutSendProcessor\");\n    wiseSendProcessor = new RevolutSendProcessor__factory(deployer.wallet).attach(wiseSendProcessorAddress);\n\n    const nullifierRegistryAddress  = await getDeployedContractAddress(network, \"NullifierRegistry\");\n    nullifierRegistry = new NullifierRegistry__factory(deployer.wallet).attach(nullifierRegistryAddress);\n  });\n\n  describe(\"RevolutRamp\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualAccountRegistry = await wiseRamp.accountRegistry();\n      const actualSendProcessor = await wiseRamp.sendProcessor();\n      const actualUsdc = await wiseRamp.usdc();\n      const isInitialized = await wiseAccountRegistry.isInitialized();\n\n      const expectedUsdc = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n      expect(actualAccountRegistry).to.eq(wiseAccountRegistry.address);\n      expect(actualSendProcessor).to.eq(wiseSendProcessor.address);\n      expect(actualUsdc).to.eq(expectedUsdc);\n      expect(isInitialized).to.be.true;\n    });\n\n    it(\"should have the correct limitations set\", async () => {\n      const actualCoolDownPeriod = await wiseRamp.onRampCooldownPeriod();\n      const actualMinDepositAmount = await wiseRamp.minDepositAmount();\n      const actualMaxOnRampAmount = await wiseRamp.maxOnRampAmount();\n      const actualIntentExpirationPeriod = await wiseRamp.intentExpirationPeriod();\n\n      expect(actualCoolDownPeriod).to.eq(ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network]);\n      expect(actualMinDepositAmount).to.eq(MIN_DEPOSIT_AMOUNT[paymentProvider][network]);\n      expect(actualMaxOnRampAmount).to.eq(MAX_ONRAMP_AMOUNT[paymentProvider][network]);\n      expect(actualIntentExpirationPeriod).to.eq(INTENT_EXPIRATION_PERIOD[paymentProvider][network]);\n    });\n\n    it(\"should correctly fee and ownership params\", async () => {\n      const actualSustainabilityFee = await wiseRamp.sustainabilityFee();\n      const actualSustainabilityFeeRecipient = await wiseRamp.sustainabilityFeeRecipient();\n      const actualOwner = await wiseRamp.owner();\n\n      const expectedSustainabilityFeeRecipient = SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer.address;\n\n      expect(actualSustainabilityFee).to.eq(SUSTAINABILITY_FEE[paymentProvider][network]);\n      expect(actualSustainabilityFeeRecipient).to.eq(expectedSustainabilityFeeRecipient);\n      expect(actualOwner).to.eq(multiSig);\n    });\n  });\n\n  describe(\"RevolutAccountRegistry\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualAccountRegistrationProcessor = await wiseAccountRegistry.accountRegistrationProcessor();\n      const isInitialized = await wiseAccountRegistry.isInitialized();\n\n      expect(actualAccountRegistrationProcessor).to.eq(wiseAccountRegistrationProcessor.address);\n      expect(isInitialized).to.be.true;\n    });\n  });\n\n\n  describe(\"RevolutAccountRegistrationProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await wiseAccountRegistrationProcessor.ramp();\n      const actualOwner = await wiseAccountRegistrationProcessor.owner();\n      const actualNullifierRegistry = await wiseAccountRegistrationProcessor.nullifierRegistry();\n      const actualAccountEndpoint = await wiseAccountRegistrationProcessor.endpoint();\n      const actualAccountHost = await wiseAccountRegistrationProcessor.host();\n      const actualAccountVerifierSigningKey = await wiseAccountRegistrationProcessor.verifierSigningKey();\n      const actualAccountNotaryKeyHash = await wiseAccountRegistrationProcessor.notaryKeyHash();\n      const actualTimestampBuffer = await wiseAccountRegistrationProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(wiseAccountRegistry.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(actualAccountEndpoint).to.eq(ACCOUNT_TLS_PARAMS[paymentProvider][network].endpoint);\n      expect(actualAccountHost).to.eq(ACCOUNT_TLS_PARAMS[paymentProvider][network].host);\n      expect(actualAccountVerifierSigningKey).to.eq(ACCOUNT_TLS_PARAMS[paymentProvider][network].verifierSigningKey);\n      expect(actualAccountNotaryKeyHash).to.eq(ACCOUNT_TLS_PARAMS[paymentProvider][network].notaryKeyHash);\n      expect(actualTimestampBuffer).to.eq(0);\n    });\n  });\n\n  describe(\"RevolutSendProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await wiseSendProcessor.ramp();\n      const actualOwner = await wiseSendProcessor.owner();\n      const actualNullifierRegistry = await wiseSendProcessor.nullifierRegistry();\n      const actualTimestampBuffer = await wiseSendProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(wiseRamp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(actualTimestampBuffer).to.eq(TIMESTAMP_BUFFER[paymentProvider]);\n    });\n  });\n\n  describe(\"NullifierRegistry\", async () => {\n    it(\"should have the correct write permissions set\", async () => {\n      const sendHasWritePermission = await nullifierRegistry.isWriter(wiseSendProcessor.address);\n      const accountRegistrationHasWritePermission = await nullifierRegistry.isWriter(wiseAccountRegistrationProcessor.address);\n\n      expect(sendHasWritePermission).to.be.true;\n      expect(accountRegistrationHasWritePermission).to.be.true;\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/deploy/venmoDeploy.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { deployments, ethers } from \"hardhat\";\n\nimport {\n  ManagedKeyHashAdapter,\n  NullifierRegistry,\n  Ramp,\n  VenmoRegistrationProcessor,\n  VenmoSendProcessor,\n} from \"../../utils/contracts\"\nimport {\n  ManagedKeyHashAdapter__factory,\n  NullifierRegistry__factory,\n  Ramp__factory,\n  VenmoRegistrationProcessor__factory,\n  VenmoSendProcessor__factory,\n} from \"../../typechain\"\n\nimport {\n  getAccounts,\n  getWaffleExpect,\n} from \"../../utils/test\";\nimport {\n  Account\n} from \"../../utils/test/types\";\nimport {\n  Address\n} from \"../../utils/types\";\n\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  USDC,\n} from \"../../deployments/parameters\";\nimport { PaymentProviders } from \"../../utils/types\"\n\nconst expect = getWaffleExpect();\n\nconst paymentProvider = PaymentProviders.Venmo;\n\ndescribe(\"System and Venmo Deploy\", () => {\n  let deployer: Account;\n  let multiSig: Address;\n\n  let ramp: Ramp;\n  let venmoRegistrationProcessor: VenmoRegistrationProcessor;\n  let venmoSendProcessor: VenmoSendProcessor;\n  let nullifierRegistry: NullifierRegistry;\n  let keyHashAdapter: ManagedKeyHashAdapter;\n\n  const network: string = deployments.getNetworkName();\n\n  function getDeployedContractAddress(network: string, contractName: string): string {\n    return require(`../../deployments/${network}/${contractName}.json`).address;\n  }\n\n  before(async () => {\n    [\n      deployer,\n    ] = await getAccounts();\n\n    multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer.address;\n\n    const rampAddress  = await getDeployedContractAddress(network, \"Ramp\");\n    ramp = new Ramp__factory(deployer.wallet).attach(rampAddress);\n\n    const venmoRegistrationProcessorAddress  = await getDeployedContractAddress(network, \"VenmoRegistrationProcessor\");\n    venmoRegistrationProcessor = new VenmoRegistrationProcessor__factory(deployer.wallet).attach(venmoRegistrationProcessorAddress);\n\n    const venmoSendProcessorAddress  = await getDeployedContractAddress(network, \"VenmoSendProcessor\");\n    venmoSendProcessor = new VenmoSendProcessor__factory(deployer.wallet).attach(venmoSendProcessorAddress);\n\n    const nullifierRegistryAddress  = await getDeployedContractAddress(network, \"NullifierRegistry\");\n    nullifierRegistry = new NullifierRegistry__factory(deployer.wallet).attach(nullifierRegistryAddress);\n\n    const keyHashAdapterAddress  = await getDeployedContractAddress(network, \"VenmoManagedKeyHashAdapter\");\n    keyHashAdapter = new ManagedKeyHashAdapter__factory(deployer.wallet).attach(keyHashAdapterAddress);\n  });\n\n  describe(\"Ramp\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualRegistrationProcessor = await ramp.registrationProcessor();\n      const actualSendProcessor = await ramp.sendProcessor();\n      const actualPoseidon = await ramp.poseidon();\n      const actualUsdc = await ramp.usdc();\n\n      const expectedUsdc = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n      expect(actualRegistrationProcessor).to.eq(venmoRegistrationProcessor.address);\n      expect(actualSendProcessor).to.eq(venmoSendProcessor.address);\n      expect(actualPoseidon).to.eq(await getDeployedContractAddress(network, \"Poseidon3\"));\n      expect(actualUsdc).to.eq(expectedUsdc);\n    });\n\n    it(\"should have the correct limitations set\", async () => {\n      const actualCoolDownPeriod = await ramp.onRampCooldownPeriod();\n      const actualMinDepositAmount = await ramp.minDepositAmount();\n      const actualMaxOnRampAmount = await ramp.maxOnRampAmount();\n      const actualIntentExpirationPeriod = await ramp.intentExpirationPeriod();\n\n      expect(actualCoolDownPeriod).to.eq(ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network]);\n      expect(actualMinDepositAmount).to.eq(MIN_DEPOSIT_AMOUNT[paymentProvider][network]);\n      expect(actualMaxOnRampAmount).to.eq(MAX_ONRAMP_AMOUNT[paymentProvider][network]);\n      expect(actualIntentExpirationPeriod).to.eq(INTENT_EXPIRATION_PERIOD[paymentProvider][network]);\n    });\n\n    it(\"should correctly fee and ownership params\", async () => {\n      const actualSustainabilityFee = await ramp.sustainabilityFee();\n      const actualSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n      const actualOwner = await ramp.owner();\n\n      const expectedSustainabilityFeeRecipient = SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer.address;\n\n      expect(actualSustainabilityFee).to.eq(SUSTAINABILITY_FEE[paymentProvider][network]);\n      expect(actualSustainabilityFeeRecipient).to.eq(expectedSustainabilityFeeRecipient);\n      expect(actualOwner).to.eq(multiSig);\n    });\n  });\n\n  describe(\"VenmoRegistrationProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await venmoRegistrationProcessor.ramp();\n      const actualOwner = await venmoRegistrationProcessor.owner();\n      const actualKeyHashAdapter = await venmoRegistrationProcessor.mailserverKeyHashAdapter();\n      const actualNullifierRegistry = await venmoRegistrationProcessor.nullifierRegistry();\n      const actualEmailFromAddress = await venmoRegistrationProcessor.emailFromAddress();\n\n      expect(actualRamp).to.eq(ramp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n    });\n  });\n\n  describe(\"VenmoSendProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await venmoSendProcessor.ramp();\n      const actualOwner = await venmoSendProcessor.owner();\n      const actualKeyHashAdapter = await venmoSendProcessor.mailserverKeyHashAdapter();\n      const actualNullifierRegistry = await venmoSendProcessor.nullifierRegistry();\n      const actualEmailFromAddress = await venmoSendProcessor.emailFromAddress();\n\n      expect(actualRamp).to.eq(ramp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n    });\n  });\n\n  describe(\"ManagedKeyHashAdapter\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await keyHashAdapter.owner();\n      const actualMailserverKeyHash = await keyHashAdapter.mailserverKeyHash();\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualMailserverKeyHash).to.eq(SERVER_KEY_HASH[paymentProvider][0]);\n    });\n  });\n\n  describe(\"NullifierRegistry\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await nullifierRegistry.owner();\n      const hasWritePermission = await nullifierRegistry.isWriter(venmoSendProcessor.address);\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(hasWritePermission).to.be.true;\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/deploy/venmoV2Deploy.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { deployments, ethers } from \"hardhat\";\n\nimport {\n  ManagedKeyHashAdapterV2,\n  NullifierRegistry,\n  VenmoRampV2,\n  VenmoRegistrationProcessorV2,\n  VenmoSendProcessorV2,\n} from \"../../utils/contracts\"\nimport {\n  ManagedKeyHashAdapterV2__factory,\n  NullifierRegistry__factory,\n  VenmoRampV2__factory,\n  VenmoRegistrationProcessorV2__factory,\n  VenmoSendProcessorV2__factory,\n} from \"../../typechain\"\n\nimport {\n  getAccounts,\n  getWaffleExpect,\n} from \"../../utils/test\";\nimport {\n  Account\n} from \"../../utils/test/types\";\nimport {\n  Address\n} from \"../../utils/types\";\n\nimport {\n  FROM_EMAIL,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SERVER_KEY_HASH,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../../deployments/parameters\";\nimport { PaymentProviders } from \"../../utils/types\"\n\nconst expect = getWaffleExpect();\n\nconst paymentProvider = PaymentProviders.Venmo;\n\ndescribe(\"VenmoV2 Deploy\", () => {\n  let deployer: Account;\n  let multiSig: Address;\n\n  let ramp: VenmoRampV2;\n  let venmoRegistrationProcessor: VenmoRegistrationProcessorV2;\n  let venmoSendProcessor: VenmoSendProcessorV2;\n  let nullifierRegistry: NullifierRegistry;\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n\n  const network: string = deployments.getNetworkName();\n\n  function getDeployedContractAddress(network: string, contractName: string): string {\n    return require(`../../deployments/${network}/${contractName}.json`).address;\n  }\n\n  before(async () => {\n    [\n      deployer,\n    ] = await getAccounts();\n\n    multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer.address;\n\n    const rampAddress  = await getDeployedContractAddress(network, \"VenmoRampV2\");\n    ramp = new VenmoRampV2__factory(deployer.wallet).attach(rampAddress);\n\n    const venmoRegistrationProcessorAddress  = await getDeployedContractAddress(network, \"VenmoRegistrationProcessorV2\");\n    venmoRegistrationProcessor = new VenmoRegistrationProcessorV2__factory(deployer.wallet).attach(venmoRegistrationProcessorAddress);\n\n    const venmoSendProcessorAddress  = await getDeployedContractAddress(network, \"VenmoSendProcessorV2\");\n    venmoSendProcessor = new VenmoSendProcessorV2__factory(deployer.wallet).attach(venmoSendProcessorAddress);\n\n    const nullifierRegistryAddress  = await getDeployedContractAddress(network, \"NullifierRegistry\");\n    nullifierRegistry = new NullifierRegistry__factory(deployer.wallet).attach(nullifierRegistryAddress);\n\n    const keyHashAdapterAddress  = await getDeployedContractAddress(network, \"VenmoManagedKeyHashAdapterV2\");\n    keyHashAdapter = new ManagedKeyHashAdapterV2__factory(deployer.wallet).attach(keyHashAdapterAddress);\n  });\n\n  describe(\"VenmoRampV2\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualRegistrationProcessor = await ramp.registrationProcessor();\n      const actualSendProcessor = await ramp.sendProcessor();\n      const actualPoseidon = await ramp.poseidon();\n      const actualUsdc = await ramp.usdc();\n\n      const expectedUsdc = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n      expect(actualRegistrationProcessor).to.eq(venmoRegistrationProcessor.address);\n      expect(actualSendProcessor).to.eq(venmoSendProcessor.address);\n      expect(actualPoseidon).to.eq(await getDeployedContractAddress(network, \"Poseidon3\"));\n      expect(actualUsdc).to.eq(expectedUsdc);\n    });\n\n    it(\"should have the correct limitations set\", async () => {\n      const actualCoolDownPeriod = await ramp.onRampCooldownPeriod();\n      const actualMinDepositAmount = await ramp.minDepositAmount();\n      const actualMaxOnRampAmount = await ramp.maxOnRampAmount();\n      const actualIntentExpirationPeriod = await ramp.intentExpirationPeriod();\n\n      expect(actualCoolDownPeriod).to.eq(ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network]);\n      expect(actualMinDepositAmount).to.eq(MIN_DEPOSIT_AMOUNT[paymentProvider][network]);\n      expect(actualMaxOnRampAmount).to.eq(MAX_ONRAMP_AMOUNT[paymentProvider][network]);\n      expect(actualIntentExpirationPeriod).to.eq(INTENT_EXPIRATION_PERIOD[paymentProvider][network]);\n    });\n\n    it(\"should correctly fee and ownership params\", async () => {\n      const actualSustainabilityFee = await ramp.sustainabilityFee();\n      const actualSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n      const actualOwner = await ramp.owner();\n\n      const expectedSustainabilityFeeRecipient = SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer.address;\n\n      expect(actualSustainabilityFee).to.eq(SUSTAINABILITY_FEE[paymentProvider][network]);\n      expect(actualSustainabilityFeeRecipient).to.eq(expectedSustainabilityFeeRecipient);\n      expect(actualOwner).to.eq(multiSig);\n    });\n  });\n\n  describe(\"VenmoRegistrationProcessorV2\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await venmoRegistrationProcessor.ramp();\n      const actualOwner = await venmoRegistrationProcessor.owner();\n      const actualKeyHashAdapter = await venmoRegistrationProcessor.mailServerKeyHashAdapter();\n      const actualNullifierRegistry = await venmoRegistrationProcessor.nullifierRegistry();\n      const actualEmailFromAddress = await venmoRegistrationProcessor.emailFromAddress();\n      const actualTimestampBuffer = await venmoRegistrationProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(ramp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n      expect(actualTimestampBuffer).to.eq(0);\n    });\n  });\n\n  describe(\"VenmoSendProcessorV2\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await venmoSendProcessor.ramp();\n      const actualOwner = await venmoSendProcessor.owner();\n      const actualKeyHashAdapter = await venmoSendProcessor.mailServerKeyHashAdapter();\n      const actualNullifierRegistry = await venmoSendProcessor.nullifierRegistry();\n      const actualEmailFromAddress = await venmoSendProcessor.emailFromAddress();\n      const actualTimestampBuffer = await venmoSendProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(ramp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualKeyHashAdapter).to.eq(keyHashAdapter.address);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(ethers.utils.arrayify(actualEmailFromAddress)).to.deep.eq(ethers.utils.toUtf8Bytes(FROM_EMAIL[paymentProvider]));\n      expect(actualTimestampBuffer).to.eq(TIMESTAMP_BUFFER[paymentProvider]);\n    });\n  });\n\n  describe(\"ManagedKeyHashAdapterV2\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await keyHashAdapter.owner();\n      const isMailServerKeyHash = await keyHashAdapter.isMailServerKeyHash(SERVER_KEY_HASH[paymentProvider][0]);\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(isMailServerKeyHash).to.be.true;\n    });\n  });\n\n  describe(\"NullifierRegistry\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualOwner = await nullifierRegistry.owner();\n      const hasWritePermission = await nullifierRegistry.isWriter(venmoSendProcessor.address);\n\n      expect(actualOwner).to.eq(multiSig);\n      expect(hasWritePermission).to.be.true;\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/deploy/wiseDeploy.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { deployments, ethers } from \"hardhat\";\n\nimport {\n  NullifierRegistry,\n  WiseRamp,\n  WiseAccountRegistry,\n  WiseAccountRegistrationProcessor,\n  WiseOffRamperRegistrationProcessor,\n  WiseSendProcessor,\n} from \"../../utils/contracts\"\nimport {\n  NullifierRegistry__factory,\n  WiseRamp__factory,\n  WiseAccountRegistry__factory,\n  WiseAccountRegistrationProcessor__factory,\n  WiseOffRamperRegistrationProcessor__factory,  \n  WiseSendProcessor__factory,\n} from \"../../typechain\"\n\nimport {\n  getAccounts,\n  getWaffleExpect,\n} from \"../../utils/test\";\nimport {\n  Account\n} from \"../../utils/test/types\";\nimport {\n  Address\n} from \"../../utils/types\";\n\nimport {\n  ACCOUNT_TLS_PARAMS,\n  INTENT_EXPIRATION_PERIOD,\n  MAX_ONRAMP_AMOUNT,\n  MIN_DEPOSIT_AMOUNT,\n  MULTI_SIG,\n  OFFRAMPER_TLS_PARAMS,\n  ONRAMP_COOL_DOWN_PERIOD,\n  SUSTAINABILITY_FEE,\n  SUSTAINABILITY_FEE_RECIPIENT,\n  TIMESTAMP_BUFFER,\n  USDC,\n} from \"../../deployments/parameters\";\nimport { PaymentProviders } from \"../../utils/types\"\n\nconst expect = getWaffleExpect();\n\nconst paymentProvider = PaymentProviders.Wise;\n\ndescribe.skip(\"Wise Deploy\", () => {\n  let deployer: Account;\n  let multiSig: Address;\n\n  let wiseRamp: WiseRamp;\n  let wiseAccountRegistry: WiseAccountRegistry;\n  let wiseAccountRegistrationProcessor: WiseAccountRegistrationProcessor;\n  let wiseOffRamperRegistrationProcessor: WiseOffRamperRegistrationProcessor;\n  let wiseSendProcessor: WiseSendProcessor;\n  let nullifierRegistry: NullifierRegistry;\n\n  const network: string = deployments.getNetworkName();\n\n  function getDeployedContractAddress(network: string, contractName: string): string {\n    return require(`../../deployments/${network}/${contractName}.json`).address;\n  }\n\n  before(async () => {\n    [\n      deployer,\n    ] = await getAccounts();\n\n    multiSig = MULTI_SIG[network] ? MULTI_SIG[network] : deployer.address;\n\n    const wiseRampAddress  = await getDeployedContractAddress(network, \"WiseRamp\");\n    wiseRamp = new WiseRamp__factory(deployer.wallet).attach(wiseRampAddress);\n\n    const wiseAccountRegistryAddress  = await getDeployedContractAddress(network, \"WiseAccountRegistry\");\n    wiseAccountRegistry = new WiseAccountRegistry__factory(deployer.wallet).attach(wiseAccountRegistryAddress);\n\n    const wiseAccountRegistrationProcessorAddress  = await getDeployedContractAddress(network, \"WiseAccountRegistrationProcessor\");\n    wiseAccountRegistrationProcessor = new WiseAccountRegistrationProcessor__factory(deployer.wallet).attach(wiseAccountRegistrationProcessorAddress);\n\n    const wiseOffRamperRegistrationProcessorAddress  = await getDeployedContractAddress(network, \"WiseOffRamperRegistrationProcessor\");\n    wiseOffRamperRegistrationProcessor = new WiseOffRamperRegistrationProcessor__factory(deployer.wallet).attach(wiseOffRamperRegistrationProcessorAddress);\n\n    const wiseSendProcessorAddress  = await getDeployedContractAddress(network, \"WiseSendProcessor\");\n    wiseSendProcessor = new WiseSendProcessor__factory(deployer.wallet).attach(wiseSendProcessorAddress);\n\n    const nullifierRegistryAddress  = await getDeployedContractAddress(network, \"NullifierRegistry\");\n    nullifierRegistry = new NullifierRegistry__factory(deployer.wallet).attach(nullifierRegistryAddress);\n  });\n\n  describe(\"WiseRamp\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualAccountRegistry = await wiseRamp.accountRegistry();\n      const actualSendProcessor = await wiseRamp.sendProcessor();\n      const actualUsdc = await wiseRamp.usdc();\n      const isInitialized = await wiseAccountRegistry.isInitialized();\n\n      const expectedUsdc = USDC[network] ? USDC[network] : getDeployedContractAddress(network, \"USDCMock\");\n\n      expect(actualAccountRegistry).to.eq(wiseAccountRegistry.address);\n      expect(actualSendProcessor).to.eq(wiseSendProcessor.address);\n      expect(actualUsdc).to.eq(expectedUsdc);\n      expect(isInitialized).to.be.true;\n    });\n\n    it(\"should have the correct limitations set\", async () => {\n      const actualCoolDownPeriod = await wiseRamp.onRampCooldownPeriod();\n      const actualMinDepositAmount = await wiseRamp.minDepositAmount();\n      const actualMaxOnRampAmount = await wiseRamp.maxOnRampAmount();\n      const actualIntentExpirationPeriod = await wiseRamp.intentExpirationPeriod();\n\n      expect(actualCoolDownPeriod).to.eq(ONRAMP_COOL_DOWN_PERIOD[paymentProvider][network]);\n      expect(actualMinDepositAmount).to.eq(MIN_DEPOSIT_AMOUNT[paymentProvider][network]);\n      expect(actualMaxOnRampAmount).to.eq(MAX_ONRAMP_AMOUNT[paymentProvider][network]);\n      expect(actualIntentExpirationPeriod).to.eq(INTENT_EXPIRATION_PERIOD[paymentProvider][network]);\n    });\n\n    it(\"should correctly fee and ownership params\", async () => {\n      const actualSustainabilityFee = await wiseRamp.sustainabilityFee();\n      const actualSustainabilityFeeRecipient = await wiseRamp.sustainabilityFeeRecipient();\n      const actualOwner = await wiseRamp.owner();\n\n      const expectedSustainabilityFeeRecipient = SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network] != \"\"\n        ? SUSTAINABILITY_FEE_RECIPIENT[paymentProvider][network]\n        : deployer.address;\n\n      expect(actualSustainabilityFee).to.eq(SUSTAINABILITY_FEE[paymentProvider][network]);\n      expect(actualSustainabilityFeeRecipient).to.eq(expectedSustainabilityFeeRecipient);\n      expect(actualOwner).to.eq(multiSig);\n    });\n  });\n\n  describe(\"WiseAccountRegistry\", async () => {\n    it(\"should have the correct processors, usdc, and poseidon set\", async () => {\n      const actualAccountRegistrationProcessor = await wiseAccountRegistry.accountRegistrationProcessor();\n      const actualOffRamperRegistrationProcessor = await wiseAccountRegistry.offRamperRegistrationProcessor();\n      const isInitialized = await wiseAccountRegistry.isInitialized();\n\n      expect(actualAccountRegistrationProcessor).to.eq(wiseAccountRegistrationProcessor.address);\n      expect(actualOffRamperRegistrationProcessor).to.eq(wiseOffRamperRegistrationProcessor.address);\n      expect(isInitialized).to.be.true;\n    });\n  });\n\n\n  describe(\"WiseAccountRegistrationProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await wiseAccountRegistrationProcessor.ramp();\n      const actualOwner = await wiseAccountRegistrationProcessor.owner();\n      const actualNullifierRegistry = await wiseAccountRegistrationProcessor.nullifierRegistry();\n      const actualAccountEndpoint = await wiseAccountRegistrationProcessor.endpoint();\n      const actualAccountHost = await wiseAccountRegistrationProcessor.host();\n      const actualAccountVerifierSigningKey = await wiseAccountRegistrationProcessor.verifierSigningKey();\n      const actualTimestampBuffer = await wiseAccountRegistrationProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(wiseAccountRegistry.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(actualAccountEndpoint).to.eq(ACCOUNT_TLS_PARAMS[paymentProvider][network].endpoint);\n      expect(actualAccountHost).to.eq(ACCOUNT_TLS_PARAMS[paymentProvider][network].host);\n      expect(actualAccountVerifierSigningKey).to.eq(ACCOUNT_TLS_PARAMS[paymentProvider][network].verifierSigningKey);\n      expect(actualTimestampBuffer).to.eq(0);\n    });\n  });\n\n  describe(\"WiseOffRamperRegistrationProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await wiseOffRamperRegistrationProcessor.ramp();\n      const actualOwner = await wiseOffRamperRegistrationProcessor.owner();\n      const actualNullifierRegistry = await wiseOffRamperRegistrationProcessor.nullifierRegistry();\n      const actualOffRamperEndpoint = await wiseOffRamperRegistrationProcessor.endpoint();\n      const actualOffRamperHost = await wiseOffRamperRegistrationProcessor.host();\n      const actualOffRamperVerifierSigningKey = await wiseOffRamperRegistrationProcessor.verifierSigningKey();\n      const actualTimestampBuffer = await wiseOffRamperRegistrationProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(wiseAccountRegistry.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(actualOffRamperEndpoint).to.eq(OFFRAMPER_TLS_PARAMS[paymentProvider][network].endpoint);\n      expect(actualOffRamperHost).to.eq(OFFRAMPER_TLS_PARAMS[paymentProvider][network].host);\n      expect(actualOffRamperVerifierSigningKey).to.eq(OFFRAMPER_TLS_PARAMS[paymentProvider][network].verifierSigningKey);\n      expect(actualTimestampBuffer).to.eq(0);\n    });\n  });\n\n  describe(\"WiseSendProcessor\", async () => {\n    it(\"should have the correct parameters set\", async () => {\n      const actualRamp = await wiseSendProcessor.ramp();\n      const actualOwner = await wiseSendProcessor.owner();\n      const actualNullifierRegistry = await wiseSendProcessor.nullifierRegistry();\n      const actualTimestampBuffer = await wiseSendProcessor.timestampBuffer();\n\n      expect(actualRamp).to.eq(wiseRamp.address);\n      expect(actualOwner).to.eq(multiSig);\n      expect(actualNullifierRegistry).to.eq(nullifierRegistry.address);\n      expect(actualTimestampBuffer).to.eq(TIMESTAMP_BUFFER[paymentProvider]);\n    });\n  });\n\n  describe(\"NullifierRegistry\", async () => {\n    it(\"should have the correct write permissions set\", async () => {\n      const sendHasWritePermission = await nullifierRegistry.isWriter(wiseSendProcessor.address);\n      const accountRegistrationHasWritePermission = await nullifierRegistry.isWriter(wiseAccountRegistrationProcessor.address);\n      const offRamperRegistrationHasWritePermission = await nullifierRegistry.isWriter(wiseOffRamperRegistrationProcessor.address);\n\n      expect(sendHasWritePermission).to.be.true;\n      expect(accountRegistrationHasWritePermission).to.be.true;\n      expect(offRamperRegistrationHasWritePermission).to.be.true;\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/libs/stringConversionUtils.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport { Account } from \"@utils/test/types\";\nimport { StringConversionUtilsMock } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { BigNumber } from \"ethers\";\nimport { ONE, ZERO } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\ndescribe(\"StringConversionUtils\", () => {\n  let owner: Account;\n\n  let stringUtils: StringConversionUtilsMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    stringUtils = await deployer.deployStringConversionUtilsMock();\n  });\n\n  describe(\"#stringToUint\", async () => {\n    let subjectString: string;\n    let subjectDesiredDecimals: BigNumber;\n\n    beforeEach(async () => {\n      subjectString = \"123.456\";\n      subjectDesiredDecimals = BigNumber.from(5);\n    });\n\n    async function subject(): Promise<any> {\n      return await stringUtils.stringToUint(subjectString, subjectDesiredDecimals);\n    }\n\n    it(\"should return the correct value\", async () => {\n      const output = await subject();\n\n      expect(output).to.equal(BigNumber.from(12345600));\n    });\n\n    describe(\"when the amount of decimals equals the amount of decimals in the string\", async () => {\n      beforeEach(async () => {\n        subjectDesiredDecimals = BigNumber.from(3);\n      });\n\n      it(\"should return the correct value\", async () => {\n        const output = await subject();\n  \n        expect(output).to.equal(BigNumber.from(123456));\n      });\n    });\n\n    describe(\"when the desired decimals is 0 and no decimal is found\", async () => {\n      beforeEach(async () => {\n        subjectString = \"120459\"\n        subjectDesiredDecimals = ZERO\n      });\n\n      it(\"should return the correct value\", async () => {\n        const output = await subject();\n  \n        expect(output).to.equal(BigNumber.from(120459));\n      });\n    });\n\n    describe(\"when the desired decimals is 0 and a decimal is found at the very end\", async () => {\n      beforeEach(async () => {\n        subjectString = \"123456.\"\n        subjectDesiredDecimals = ZERO\n      });\n\n      it(\"should return the correct value\", async () => {\n        const output = await subject();\n  \n        expect(output).to.equal(BigNumber.from(123456));\n      });\n    });\n\n    describe(\"when passed string has more decimal places than the desired decimals\", async () => {\n      beforeEach(async () => {\n        subjectDesiredDecimals = ONE;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"String has too many decimal places\");\n      });\n    });\n\n    describe(\"when passed string has more than one decimal point\", async () => {\n      beforeEach(async () => {\n        subjectString = \"123.45.6\";\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"String has multiple decimals\");\n      });\n    });\n  });\n\n  describe(\"#stringToUint (with specified decimal character)\", async () => {\n    let subjectString: string;\n    let subjectDecimalCharacter: string;\n    let subjectDesiredDecimals: BigNumber;\n\n    beforeEach(async () => {\n      subjectString = \"123.456\";\n      subjectDecimalCharacter = \"0x2E\";\n      subjectDesiredDecimals = BigNumber.from(5);\n    });\n\n    async function subject(): Promise<any> {\n      return await stringUtils.stringToUintDefinedCharacter(\n        subjectString,\n        subjectDecimalCharacter,\n        subjectDesiredDecimals\n      );\n    }\n\n    it(\"should return the correct value\", async () => {\n      const output = await subject();\n\n      expect(output).to.equal(BigNumber.from(12345600));\n    });\n\n    describe(\"when the decimal character is a comma\", async () => {\n      beforeEach(async () => {\n        subjectString = \"123,456\";\n        subjectDecimalCharacter = \"0x2C\";\n      });\n\n      it(\"should return the correct value\", async () => {\n        const output = await subject();\n  \n        expect(output).to.equal(BigNumber.from(12345600));\n      });\n    });\n\n    describe(\"when the amount of decimals equals the amount of decimals in the string\", async () => {\n      beforeEach(async () => {\n        subjectDesiredDecimals = BigNumber.from(3);\n      });\n\n      it(\"should return the correct value\", async () => {\n        const output = await subject();\n  \n        expect(output).to.equal(BigNumber.from(123456));\n      });\n    });\n\n    describe(\"when the desired decimals is 0 and no decimal is found\", async () => {\n      beforeEach(async () => {\n        subjectString = \"120459\"\n        subjectDesiredDecimals = ZERO\n      });\n\n      it(\"should return the correct value\", async () => {\n        const output = await subject();\n  \n        expect(output).to.equal(BigNumber.from(120459));\n      });\n    });\n\n    describe(\"when the desired decimals is 0 and a decimal is found at the very end\", async () => {\n      beforeEach(async () => {\n        subjectString = \"123456.\"\n        subjectDesiredDecimals = ZERO\n      });\n\n      it(\"should return the correct value\", async () => {\n        const output = await subject();\n  \n        expect(output).to.equal(BigNumber.from(123456));\n      });\n    });\n\n    describe(\"when passed string has more decimal places than the desired decimals\", async () => {\n      beforeEach(async () => {\n        subjectDesiredDecimals = ONE;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"String has too many decimal places\");\n      });\n    });\n\n    describe(\"when passed string has more than one decimal point\", async () => {\n      beforeEach(async () => {\n        subjectString = \"123.45.6\";\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"String has multiple decimals\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/processors/managedKeyHashAdapter.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapter } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\n\nconst expect = getWaffleExpect();\n\nconst venmoKeyHash = \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\";\n\ndescribe(\"ManagedKeyHashAdapter\", () => {\n  let owner: Account;\n  let attacker: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapter;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapter(venmoKeyHash);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should have the correct key hash\", async () => {\n      const keyHash = await keyHashAdapter.mailserverKeyHash();\n      expect(keyHash).to.eq(venmoKeyHash);\n    });\n\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await keyHashAdapter.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#setMailserverKeyHash\", async () => {\n    let subjectVenmoMailserverKeyHash: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHash = \"0x2db6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\";\n    });\n\n    async function subject(): Promise<any> {\n      return await keyHashAdapter.connect(subjectCaller.wallet).setMailserverKeyHash(subjectVenmoMailserverKeyHash);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHash = await keyHashAdapter.mailserverKeyHash();\n      expect(venmoKeyHash).to.equal(subjectVenmoMailserverKeyHash);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/processors/managedKeyHashAdapterV2.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapterV2 } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\n\nconst expect = getWaffleExpect();\n\nconst keyHash1 = \"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\";\nconst keyHash2 = \"0x1cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\";\n\ndescribe(\"ManagedKeyHashAdapterV2\", () => {\n  let owner: Account;\n  let attacker: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n        owner,\n        attacker,\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([keyHash1, keyHash2]);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should have the correct key hash\", async () => {\n        const keyHashes = await keyHashAdapter.getMailServerKeyHashes();\n\n        const isKeyHashOne = await keyHashAdapter.isMailServerKeyHash(keyHash1);\n        const isKeyHashTwo = await keyHashAdapter.isMailServerKeyHash(keyHash2);\n\n        expect(isKeyHashOne).to.be.true;\n        expect(isKeyHashTwo).to.be.true;\n        expect(keyHashes).to.contain(keyHash1);\n        expect(keyHashes).to.contain(keyHash2);\n    });\n\n    it(\"should have the correct owner set\", async () => {\n        const _owner = await keyHashAdapter.owner();\n        expect(_owner).to.eq(owner.address);\n    });\n\n    describe(\"when duplicate keyHashes are passed\", async () => {\n      async function subject(): Promise<any> {\n        keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([keyHash1, keyHash1]);\n      };\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Key hash already added\");\n      });\n    });\n  });\n\n  describe(\"#addMailServerKeyHash\", async () => {\n    let subjectMailServerKeyHash: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectMailServerKeyHash = \"0x06b0ad846d386f60e777f1d11b82922c6bb694216eed9c23535796ac404a7dfa\";\n    });\n\n    async function subject(): Promise<any> {\n      return await keyHashAdapter.connect(subjectCaller.wallet).addMailServerKeyHash(subjectMailServerKeyHash);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const isKeyHash = await keyHashAdapter.isMailServerKeyHash(subjectMailServerKeyHash);\n      const keyHashes = await keyHashAdapter.getMailServerKeyHashes();\n\n      expect(isKeyHash).to.be.true;\n      expect(keyHashes).to.contain(subjectMailServerKeyHash);\n    });\n\n    it(\"should emit the correct MailServerKeyHashAdded event\", async () => {\n      await expect(subject()).to.emit(keyHashAdapter, \"MailServerKeyHashAdded\").withArgs(\n          subjectMailServerKeyHash\n      );\n    });\n\n    describe(\"when the key hash has already been added\", async () => {\n      beforeEach(async () => {\n          await subject();\n      });\n\n      it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Key hash already added\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n          subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#removeMailServerKeyHash\", async () => {\n    let subjectMailServerKeyHash: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectMailServerKeyHash = \"0x06b0ad846d386f60e777f1d11b82922c6bb694216eed9c23535796ac404a7dfa\";\n\n      await keyHashAdapter.addMailServerKeyHash(subjectMailServerKeyHash);\n\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return await keyHashAdapter.connect(subjectCaller.wallet).removeMailServerKeyHash(subjectMailServerKeyHash);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      const preIsKeyHash = await keyHashAdapter.isMailServerKeyHash(subjectMailServerKeyHash);\n      const preKeyHashes = await keyHashAdapter.getMailServerKeyHashes();\n      expect(preIsKeyHash).to.be.true;\n      expect(preKeyHashes).to.contain(subjectMailServerKeyHash);\n\n      await subject();\n\n      const isKeyHash = await keyHashAdapter.isMailServerKeyHash(subjectMailServerKeyHash);\n      const keyHashes = await keyHashAdapter.getMailServerKeyHashes();\n\n      expect(isKeyHash).to.be.false;\n      expect(keyHashes).to.not.contain(subjectMailServerKeyHash);\n    });\n\n    it(\"should emit the correct MailServerKeyHashRemoved event\", async () => {\n      await expect(subject()).to.emit(keyHashAdapter, \"MailServerKeyHashRemoved\").withArgs(\n        subjectMailServerKeyHash\n      );\n    });\n\n    describe(\"when the key hash has already been removed\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Key hash not added\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/processors/nullifierRegistry.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport { Account } from \"@utils/test/types\";\nimport { NullifierRegistry } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\nimport { Address } from \"@utils/types\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\n\nconst expect = getWaffleExpect();\n\ndescribe(\"NullifierRegistry\", () => {\n  let owner: Account;\n  let writer: Account;\n  let attacker: Account;\n\n  let nullifierRegistry: NullifierRegistry;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      writer,\n      attacker,\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await nullifierRegistry.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#addNullifier\", async () => {\n    let subjectNullifier: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await nullifierRegistry.addWritePermission(writer.address);\n\n      subjectCaller = writer;\n\n      subjectNullifier = ethers.utils.formatBytes32String(\"nullifier\");\n    });\n\n    async function subject(): Promise<any> {\n      return await nullifierRegistry.connect(subjectCaller.wallet).addNullifier(subjectNullifier);\n    }\n\n    it(\"should correctly add the nullifier\", async () => {\n      await subject();\n\n      const isNullified = await nullifierRegistry.isNullified(subjectNullifier);\n      expect(isNullified).to.be.true;\n    });\n\n    it(\"should emit the correct NullifierAdded event\", async () => {\n      await expect(subject()).to.emit(nullifierRegistry, \"NullifierAdded\").withArgs(\n        subjectNullifier,\n        subjectCaller.address\n      );\n    });\n\n    describe(\"when the nullifier has already been added\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier already exists\");\n      });\n    });\n\n    describe(\"when the caller is not an allowed writer\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only addresses with write permissions can call\");\n      });\n    });\n  });\n\n  describe(\"#addWritePermission\", async () => {\n    let subjectNewWriter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectNewWriter = writer.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return await nullifierRegistry.connect(subjectCaller.wallet).addWritePermission(subjectNewWriter);\n    }\n\n    it(\"should correctly add the new writer\", async () => {\n      const preIsWriter = await nullifierRegistry.isWriter(subjectNewWriter);\n      const preWriters = await nullifierRegistry.getWriters();\n\n      expect(preIsWriter).to.be.false;\n      expect(preWriters).to.not.contain(subjectNewWriter);\n\n      await subject();\n\n      const isWriter = await nullifierRegistry.isWriter(subjectNewWriter);\n      const writers = await nullifierRegistry.getWriters();\n\n      expect(isWriter).to.be.true;\n      expect(writers).to.contain(subjectNewWriter);\n    });\n\n    it(\"should emit the correct WriterAdded event\", async () => {\n      await expect(subject()).to.emit(nullifierRegistry, \"WriterAdded\").withArgs(\n        subjectNewWriter\n      );\n    });\n\n    describe(\"when the writer has already been added\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Address is already a writer\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#removeWritePermission\", async () => {\n    let subjectRemovedWriter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await nullifierRegistry.addWritePermission(writer.address);\n\n      subjectRemovedWriter = writer.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return await nullifierRegistry.connect(subjectCaller.wallet).removeWritePermission(subjectRemovedWriter);\n    }\n\n    it(\"should correctly remove the new writer\", async () => {\n      const preIsWriter = await nullifierRegistry.isWriter(subjectRemovedWriter);\n      const preWriters = await nullifierRegistry.getWriters();\n\n      expect(preIsWriter).to.be.true;\n      expect(preWriters).to.contain(subjectRemovedWriter);\n\n      await subject();\n\n      const isWriter = await nullifierRegistry.isWriter(subjectRemovedWriter);\n      const writers = await nullifierRegistry.getWriters();\n\n      expect(isWriter).to.be.false;\n      expect(writers).to.not.contain(subjectRemovedWriter);\n    });\n\n    it(\"should emit the correct WriterRemoved event\", async () => {\n      await expect(subject()).to.emit(nullifierRegistry, \"WriterRemoved\").withArgs(\n        subjectRemovedWriter\n      );\n    });\n\n    describe(\"when the writer has already been removed\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Address is not a writer\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/garanti/garantiRamp.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport {\n  Address,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  GarantiRamp,\n  USDCMock,\n  GarantiRegistrationProcessorMock,\n  GarantiSendProcessorMock\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Blockchain, ether, usdc } from \"@utils/common\";\nimport { BigNumber } from \"ethers\";\nimport { ZERO, ZERO_BYTES32, ADDRESS_ZERO, ONE } from \"@utils/constants\";\nimport { calculateIntentHash, calculateGarantiIdHash, calculateIbanHash, createBlankGarantiBodyHashProof } from \"@utils/protocolUtils\";\nimport { ONE_DAY_IN_SECONDS } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\nconst blockchain = new Blockchain(ethers.provider);\n\ndescribe(\"GarantiRamp\", () => {\n  let owner: Account;\n  let offRamper: Account;\n  let offRamperNewAcct: Account;\n  let onRamper: Account;\n  let onRamperOtherAddress: Account;\n  let onRamperTwo: Account;\n  let receiver: Account;\n  let maliciousOnRamper: Account;\n  let unregisteredUser: Account;\n  let feeRecipient: Account;\n\n  let ramp: GarantiRamp;\n  let usdcToken: USDCMock;\n  let registrationProcessor: GarantiRegistrationProcessorMock;\n  let sendProcessor: GarantiSendProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      offRamper,\n      onRamper,\n      onRamperOtherAddress,\n      onRamperTwo,\n      receiver,\n      maliciousOnRamper,\n      unregisteredUser,\n      offRamperNewAcct,\n      feeRecipient\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n    registrationProcessor = await deployer.deployGarantiRegistrationProcessorMock();\n    sendProcessor = await deployer.deployGarantiSendProcessorMock();\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    ramp = await deployer.deployGarantiRamp(\n      owner.address,\n      usdcToken.address,\n      usdc(20),                          // $20 min deposit amount\n      usdc(999),\n      ONE_DAY_IN_SECONDS,\n      ONE_DAY_IN_SECONDS,                // On ramp cooldown period\n      ZERO,                              // Sustainability fee\n      feeRecipient.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await ramp.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n\n    it(\"should set the correct usdc\", async () => {\n      const usdcAddress: Address = await ramp.usdc();\n      expect(usdcAddress).to.eq(usdcToken.address);\n    });\n\n    it(\"should set the correct min deposit amount\", async () => {\n      const minDepositAmount: BigNumber = await ramp.minDepositAmount();\n      expect(minDepositAmount).to.eq(usdc(20));\n    });\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const maxOnRampAmount: BigNumber = await ramp.maxOnRampAmount();\n      expect(maxOnRampAmount).to.eq(usdc(999));\n    });\n\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await ramp.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectRegistrationProcessor: Address;\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectRegistrationProcessor = registrationProcessor.address;\n      subjectSendProcessor = sendProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).initialize(\n        subjectRegistrationProcessor,\n        subjectSendProcessor\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const registrationProcessorAddress: Address = await ramp.registrationProcessor();\n      const sendProcessorAddress: Address = await ramp.sendProcessor();\n\n      expect(registrationProcessorAddress).to.eq(registrationProcessor.address);\n      expect(sendProcessorAddress).to.eq(sendProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#register\", async () => {\n    let subjectProof: any;\n    let subjectBodyHashProof: any;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      const registerSignals = new Array<BigNumber>(11).fill(ZERO);\n      registerSignals[0] = BigNumber.from(1);\n      registerSignals[1] = BigNumber.from(await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"));\n\n      subjectProof = {\n        a: [ZERO, ZERO],\n        b: [[ZERO, ZERO], [ZERO, ZERO]],\n        c: [ZERO, ZERO],\n        signals: registerSignals\n      }\n      subjectBodyHashProof = createBlankGarantiBodyHashProof();\n      subjectCaller = offRamper;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).register(subjectProof, subjectBodyHashProof);\n    }\n\n    it(\"should register the caller\", async () => {\n      await subject();\n\n      const offRamperIdHash = (await ramp.getAccountInfo(subjectCaller.address)).idHash;\n      expect(offRamperIdHash).to.eq(subjectProof.signals[1]);\n    });\n\n    it(\"should emit an AccountRegistered event\", async () => {\n      await expect(subject()).to.emit(ramp, \"AccountRegistered\").withArgs(\n        subjectCaller.address,\n        subjectProof.signals[1]\n      );\n    });\n\n    describe(\"when the caller is already registered\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectProof.signals[1] = BigNumber.from(await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Account already associated with idHash\");\n      });\n    });\n  });\n\n  context(\"when the on and off ramper are registered\", async () => {\n    let signalsOffRamp: BigNumber[];\n    let signalsOnRamp: BigNumber[];\n    let signalsOnRampTwo: BigNumber[];\n    let signalsMaliciousOnRamp: BigNumber[];\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n      const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n      const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n      signalsOffRamp = new Array<BigNumber>(11).fill(ZERO);\n      signalsOffRamp[1] = BigNumber.from(await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"));\n      signalsOnRamp = new Array<BigNumber>(11).fill(ZERO);\n      signalsOnRamp[1] = BigNumber.from(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"));\n      signalsOnRampTwo = new Array<BigNumber>(11).fill(ZERO);\n      signalsOnRampTwo[1] = BigNumber.from(await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"));\n      signalsMaliciousOnRamp = new Array<BigNumber>(11).fill(ZERO);\n      signalsMaliciousOnRamp[1] = BigNumber.from(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"));\n\n      await ramp.connect(offRamper.wallet).register(\n        {\n          a: _a,\n          b: _b,\n          c: _c,\n          signals: signalsOffRamp\n        },\n        createBlankGarantiBodyHashProof()\n      );\n      await ramp.connect(onRamper.wallet).register(\n        {\n          a: _a,\n          b: _b,\n          c: _c,\n          signals: signalsOnRamp\n        },\n        createBlankGarantiBodyHashProof()\n      );\n\n      await ramp.connect(onRamperTwo.wallet).register(\n        {\n          a: _a,\n          b: _b,\n          c: _c,\n          signals: signalsOnRampTwo\n        },\n        createBlankGarantiBodyHashProof()\n      );\n\n      await ramp.connect(maliciousOnRamper.wallet).register(\n        {\n          a: _a,\n          b: _b,\n          c: _c,\n          signals: signalsMaliciousOnRamp\n        },\n        createBlankGarantiBodyHashProof()\n      );\n\n      await usdcToken.connect(offRamper.wallet).approve(ramp.address, usdc(10000));\n    });\n\n    describe(\"#offRamp\", async () => {\n      let subjectGarantiIban: string;\n      let subjectGarantiName: string;\n      let subjectDepositAmount: BigNumber;\n      let subjectReceiveAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectGarantiIban = \"TR01 2345 6789 0123 4567 8901 23\";\n        subjectGarantiName = \"John Doe\";\n        subjectDepositAmount = usdc(100);\n        subjectReceiveAmount = usdc(101);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).offRamp(\n          subjectGarantiIban,\n          subjectGarantiName,\n          subjectDepositAmount,\n          subjectReceiveAmount\n        );\n      }\n\n      it(\"should transfer the usdc to the Ramp contract\", async () => {\n        await subject();\n\n        const rampUsdcBalance = await usdcToken.balanceOf(ramp.address);\n        const offRamperUsdcBalance = await usdcToken.balanceOf(offRamper.address);\n        expect(rampUsdcBalance).to.eq(subjectDepositAmount);\n        expect(offRamperUsdcBalance).to.eq(usdc(9900));\n      });\n\n      it(\"should correctly update the deposits mapping with the correct key\", async () => {\n        await subject();\n\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        const deposit = await ramp.getDeposit(ZERO);\n\n        expect(deposit.depositor).to.eq(subjectCaller.address);\n        expect(JSON.stringify(deposit.garantiIban)).to.eq(JSON.stringify(subjectGarantiIban));\n        expect(JSON.stringify(deposit.garantiName)).to.eq(JSON.stringify(subjectGarantiName));\n        expect(deposit.depositAmount).to.eq(subjectDepositAmount);\n        expect(deposit.remainingDeposits).to.eq(subjectDepositAmount);\n        expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposit.conversionRate).to.eq(conversionRate);\n      });\n\n      it(\"should increment the deposit counter correctly\", async () => {\n        await subject();\n\n        const depositCounter = await ramp.depositCounter();\n\n        expect(depositCounter).to.eq(ONE);\n      });\n\n      it(\"should emit a DepositReceived event\", async () => {\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        await expect(subject()).to.emit(ramp, \"DepositReceived\").withArgs(\n          ZERO,\n          await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"),\n          subjectDepositAmount,\n          conversionRate\n        );\n      });\n\n      describe(\"when an invalid IBAN is provided\", async () => {\n        beforeEach(async () => {\n          subjectGarantiIban = \"TR01 23456789 0123 4567 8901 23\";\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Invalid IBAN\");\n        });\n      });\n\n      describe(\"when the deposited amount is less than the minimum\", async () => {\n        beforeEach(async () => {\n          subjectDepositAmount = usdc(19.99);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit amount must be greater than min deposit amount\");\n        });\n      });\n\n      describe(\"when the depositor has reached their max amount of deposits\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectGarantiIban, subjectGarantiName, subjectDepositAmount, usdc(102));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectGarantiIban, subjectGarantiName, subjectDepositAmount, usdc(103));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectGarantiIban, subjectGarantiName, subjectDepositAmount, usdc(104));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectGarantiIban, subjectGarantiName, subjectDepositAmount, usdc(105));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectGarantiIban, subjectGarantiName, subjectDepositAmount, usdc(106));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Maximum deposit amount reached\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the receive amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectReceiveAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Receive amount must be greater than 0\");\n        });\n      });\n    });\n\n    describe(\"#signalIntent\", async () => {\n      let subjectDepositId: BigNumber;\n      let subjectAmount: BigNumber;\n      let subjectTo: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        subjectDepositId = ZERO;\n        subjectAmount = usdc(50);\n        subjectTo = receiver.address;\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).signalIntent(subjectDepositId, subjectAmount, subjectTo);\n      }\n\n      it(\"should create the correct entry in the intents mapping\", async () => {\n        await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), subjectDepositId, currentTimestamp);\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(subjectCaller.address);\n        expect(intent.to).to.eq(subjectTo);\n        expect(intent.deposit).to.eq(subjectDepositId);\n        expect(intent.amount).to.eq(subjectAmount);\n        expect(intent.intentTimestamp).to.eq(currentTimestamp);\n      });\n\n      it(\"should update the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n        await subject();\n\n        const intentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n\n        const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.add(subjectAmount));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(subjectAmount));\n        expect(postDeposit.intentHashes).to.include(intentHash);\n      });\n\n      it(\"should update the account's current intent hash\", async () => {\n        await subject();\n\n        const expectedIntentHash = calculateIntentHash(\n          await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"),\n          subjectDepositId,\n          await blockchain.getCurrentTimestamp()\n        );\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(expectedIntentHash).to.eq(intentHash);\n      });\n\n      it(\"should emit an IntentSignaled event\", async () => {\n        const txn = await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), subjectDepositId, currentTimestamp);\n\n        expect(txn).to.emit(ramp, \"IntentSignaled\").withArgs(\n          intentHash,\n          subjectDepositId,\n          await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"),\n          subjectTo,\n          subjectAmount,\n          currentTimestamp\n        );\n      });\n\n      describe(\"when there aren't enough deposits to cover requested amount but there are prunable intents\", async () => {\n        let timeJump: number;\n        let oldIntentHash: string;\n\n        before(async () => {\n          timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n        });\n\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          oldIntentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), subjectDepositId, currentTimestamp);\n\n          await blockchain.increaseTimeAsync(timeJump);\n\n          subjectAmount = usdc(60);\n          subjectCaller = onRamperTwo;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(preDeposit.intentHashes).to.include(oldIntentHash);\n\n          await subject();\n\n          const newIntentHash = calculateIntentHash(await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n          const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(postDeposit.outstandingIntentAmount).to.eq(subjectAmount);\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(usdc(10))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.include(newIntentHash);\n          expect(postDeposit.intentHashes).to.not.include(oldIntentHash);\n        });\n\n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n\n          const intent = await ramp.intents(oldIntentHash);\n\n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n\n        it(\"should correctly add a new intent to the intents mapping\", async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"), subjectDepositId, currentTimestamp);\n\n          const intent = await ramp.intents(intentHash);\n\n          expect(intent.onRamper).to.eq(subjectCaller.address);\n          expect(intent.deposit).to.eq(subjectDepositId);\n          expect(intent.amount).to.eq(subjectAmount);\n          expect(intent.intentTimestamp).to.eq(currentTimestamp);\n        });\n\n        it(\"should update the account's current intent hash\", async () => {\n          await subject();\n\n          const expectedIntentHash = calculateIntentHash(\n            await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"),\n            subjectDepositId,\n            await blockchain.getCurrentTimestamp()\n          );\n\n          const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n          expect(expectedIntentHash).to.eq(intentHash);\n        });\n\n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(oldIntentHash, subjectDepositId);\n        });\n\n        describe(\"when the reclaimable amount can't cover the new intent\", async () => {\n          before(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.div(2).toNumber();\n          });\n\n          after(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Not enough liquidity\");\n          });\n        });\n      });\n\n      describe(\"when the caller is on the depositor's denylist\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(offRamper.wallet).addAccountToDenylist(calculateGarantiIdHash(\"janedoe@gmail.com987654321\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper on depositor's denylist\");\n        });\n      });\n\n      describe(\"when the caller is the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the caller is the depositor from another Ethereum account\", async () => {\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(offRamperNewAcct.wallet).register(\n            {\n              a: _a,\n              b: _b,\n              c: _c,\n              signals: signalsOffRamp\n            },\n            createBlankGarantiBodyHashProof()\n          );\n\n          subjectCaller = offRamperNewAcct;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the to address is zero\", async () => {\n        beforeEach(async () => {\n          subjectTo = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Cannot send to zero address\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be greater than 0\");\n        });\n      });\n\n      describe(\"when the amount exceeds the max on ramp amount\", async () => {\n        beforeEach(async () => {\n          subjectAmount = usdc(1000);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be less than max on-ramp amount\");\n        });\n      });\n\n      describe(\"when the cool down period hasn't elapsed\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), subjectDepositId, currentTimestamp);\n\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          const signals = new Array<BigNumber>(28).fill(ZERO);\n          signals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n          signals[1] = currentTimestamp;\n          signals[2] = BigNumber.from(await calculateIbanHash(\"John Doe\"));\n          signals[3] = BigNumber.from(await calculateIbanHash(\"TR01 2345 6789 0123 4567 8901 23\"));\n          signals[4] = BigNumber.from(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"));\n          signals[5] = BigNumber.from(intentHash);\n\n          const proof = {\n            a: _a,\n            b: _b,\n            c: _c,\n            signals\n          }\n\n          await ramp.connect(onRamper.wallet).onRamp(proof, createBlankGarantiBodyHashProof());\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"On ramp cool down period not elapsed\");\n        });\n      });\n\n      describe(\"when the deposit does not exist\", async () => {\n        beforeEach(async () => {\n          subjectDepositId = BigNumber.from(10);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit does not exist\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent but is calling from a different address\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          subjectCaller = maliciousOnRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n    });\n\n    describe(\"#cancelIntent\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        const idHash = await calculateGarantiIdHash(\"janedoe@gmail.com987654321\");\n        depositId = ZERO;\n\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).cancelIntent(subjectIntentHash);\n      }\n\n      it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should delete the original intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should update the accounts current intent hash\", async () => {\n        await subject();\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(intentHash).to.eq(ZERO_BYTES32);\n      });\n\n      it(\"should emit an IntentPruned event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n      });\n\n      describe(\"when the call comes from a different Eth address tied to the same venmoIdHash\", async () => {\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(onRamperOtherAddress.wallet).register(\n            {\n              a: _a,\n              b: _b,\n              c: _c,\n              signals: signalsOnRamp\n            },\n            createBlankGarantiBodyHashProof()\n          );\n\n          subjectCaller = onRamperOtherAddress;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(depositId);\n  \n          expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n  \n          await subject();\n  \n          const postDeposit = await ramp.getDeposit(depositId);\n  \n          expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n  \n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n  \n          const intent = await ramp.intents(subjectIntentHash);\n  \n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n  \n        it(\"should update the accounts current intent hash\", async () => {\n          await subject();\n  \n          const intentHash = await ramp.getIdCurrentIntentHash(onRamper.address);\n  \n          expect(intentHash).to.eq(ZERO_BYTES32);\n        });\n  \n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n        });\n      });\n\n      describe(\"when the intentHash does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = ZERO_BYTES32;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the caller did not originate the intent\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the on-ramper\");\n        });\n      });\n    });\n\n    describe(\"#onRamp\", async () => {\n      let subjectProof: any;\n      let subjectBodyHashProof: any;\n      let subjectCaller: Account;\n\n      let intentHash: string;\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = await calculateGarantiIdHash(\"janedoe@gmail.com987654321\");\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        intentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n\n        const sendSignals = new Array<BigNumber>(28).fill(ZERO);\n        sendSignals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n        sendSignals[1] = currentTimestamp;\n        sendSignals[2] = BigNumber.from(await calculateIbanHash(\"John Doe\"));\n        sendSignals[3] = BigNumber.from(await calculateIbanHash(\"TR01 2345 6789 0123 4567 8901 23\"));\n        sendSignals[4] = BigNumber.from(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"));\n        sendSignals[5] = BigNumber.from(intentHash);\n        \n        subjectProof = {\n          a: [ZERO, ZERO],\n          b: [[ZERO, ZERO], [ZERO, ZERO]],\n          c: [ZERO, ZERO],\n          signals: sendSignals\n        }\n        subjectBodyHashProof = createBlankGarantiBodyHashProof();\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).onRamp(subjectProof, subjectBodyHashProof);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(intentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(subjectCaller.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          intentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            intentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          intentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), depositId, currentTimestamp);\n\n          subjectProof.signals[1] = currentTimestamp;\n          subjectProof.signals[5] = BigNumber.from(intentHash);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountInfo.deposits).to.not.include(depositId);\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(intentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the amount paid was not enough\", async () => {\n        beforeEach(async () => {\n          subjectProof.signals[0] = usdc(50);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Payment was not enough\");\n        });\n      });\n\n      describe(\"when the email timestamp is before the intent was signaled\", async () => {\n        beforeEach(async () => {\n          subjectProof.signals[1] = ONE;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent was not created before send\");\n        });\n      });\n\n      describe(\"when the intent has already been pruned\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the offRamperNameHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectProof.signals[3] = BigNumber.from(await calculateIbanHash(\"Jane Doe\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Offramper id does not match\");\n        });\n      });\n\n      describe(\"when the offRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectProof.signals[3] = BigNumber.from(await calculateIbanHash(\"TR00 2345 6789 0123 4567 8901 23\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Offramper id does not match\");\n        });\n      });\n\n      describe(\"when the onRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectProof.signals[4] = BigNumber.from(await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper id does not match\");\n        });\n      });\n    });\n\n    describe(\"#releaseFundsToOnramper\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = await calculateGarantiIdHash(\"janedoe@gmail.com987654321\");\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).releaseFundsToOnramper(subjectIntentHash);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(onRamper.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          subjectIntentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            subjectIntentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          subjectIntentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), depositId, currentTimestamp);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountInfo.deposits).to.not.include(depositId);\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the intent does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), depositId, ONE);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the sender is not the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#withdrawDeposit\", async () => {\n      let subjectDepositIds: BigNumber[];\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(50),\n          usdc(51)\n        );\n\n        const currentDepositCounter = await ramp.depositCounter();\n        const depositIdOne = BigNumber.from(currentDepositCounter.sub(2));\n        const depositIdTwo = BigNumber.from(currentDepositCounter.sub(1));\n\n        subjectDepositIds = [depositIdOne, depositIdTwo];\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).withdrawDeposit(subjectDepositIds);\n      }\n\n      it(\"should transfer the usdc to the caller\", async () => {\n        const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n      });\n\n      it(\"should delete the deposits\", async () => {\n        const preDepositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const preDepositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(preDepositOne.depositor).to.not.eq(ADDRESS_ZERO);\n        expect(preDepositTwo.depositor).to.not.eq(ADDRESS_ZERO);\n\n        await subject();\n\n        const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n        expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n      });\n\n      it(\"should remove the deposits from the depositors account info\", async () => {\n        const preAccountInfo = await ramp.getAccountInfo(subjectCaller.address);\n        expect(preAccountInfo.deposits[0]).to.eq(subjectDepositIds[0]);\n        expect(preAccountInfo.deposits[1]).to.eq(subjectDepositIds[1]);\n\n        await subject();\n\n        const accountInfo = await ramp.getAccountInfo(subjectCaller.address);\n\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[0]);\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n      });\n\n      it(\"should emit a DepositWithdrawn event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[0],\n          offRamper.address,\n          usdc(100),\n        );\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[1],\n          offRamper.address,\n          usdc(50),\n        );\n      });\n\n      it(\"should emit DepositClosed events for both deposits\", async () => {\n        const tx = await subject();\n\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n      });\n\n      describe(\"when there is an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(onRamper.wallet).signalIntent(subjectDepositIds[0], usdc(50), receiver.address);\n        });\n\n        it(\"should transfer the correct amount of usdc to the caller\", async () => {\n          const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n          await subject();\n\n          const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n          expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(100)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(100)));\n        });\n\n        it(\"should zero out remainingDeposits on depositOne\", async () => {\n          await subject();\n\n          const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n\n          expect(depositOne.depositor).to.not.eq(ZERO_BYTES32);\n          expect(depositOne.intentHashes.length).to.eq(1);\n          expect(depositOne.remainingDeposits).to.eq(ZERO);\n          expect(depositOne.outstandingIntentAmount).to.eq(usdc(50));\n        });\n\n        it(\"should delete deposit two from deposits and account info\", async () => {\n          await subject();\n\n          const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n\n          expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n          expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n        });\n\n        it(\"should emit a DepositClosed event for deposit two\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        });\n\n        describe(\"but the intent is expired\", async () => {\n          beforeEach(async () => {\n            await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n          });\n\n          it(\"should transfer the correct amount of usdc to the caller\", async () => {\n            const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n            await subject();\n\n            const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n            expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n            expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n          });\n\n          it(\"should delete both deposits\", async () => {\n            await subject();\n\n            const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n            const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n            expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n            expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n          });\n\n          it(\"should delete the intent\", async () => {\n            const intentHash = (await ramp.getDeposit(subjectDepositIds[0])).intentHashes[0];\n\n            const preIntent = await ramp.intents(intentHash);\n            expect(preIntent.amount).to.eq(usdc(50));\n\n            await subject();\n\n            const postIntent = await ramp.intents(intentHash);\n\n            expect(postIntent.onRamper).to.eq(ADDRESS_ZERO);\n            expect(postIntent.deposit).to.eq(ZERO_BYTES32);\n            expect(postIntent.amount).to.eq(ZERO);\n            expect(postIntent.intentTimestamp).to.eq(ZERO);\n          });\n        });\n      });\n\n      describe(\"when the caller is not the offRamper\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#addAccountToDenylist\", async () => {\n      let subjectDeniedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectDeniedUser = await calculateGarantiIdHash(\"janedoe@gmail.com987654321\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).addAccountToDenylist(subjectDeniedUser);\n      }\n\n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectDeniedUser);\n\n        expect(deniedUsers).to.include(subjectDeniedUser);\n        expect(isDenied).to.be.true;\n      });\n\n      it(\"should emit a UserAddedToDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserAddedToDenylist\").withArgs(\n          await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"),\n          await calculateGarantiIdHash(\"janedoe@gmail.com987654321\")\n        );\n      });\n\n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#removeAccountFromDenylist\", async () => {\n      let subjectApprovedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).addAccountToDenylist(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"));\n\n        subjectApprovedUser = await calculateGarantiIdHash(\"janedoe@gmail.com987654321\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).removeAccountFromDenylist(subjectApprovedUser);\n      }\n\n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preDeniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n\n        expect(preDeniedUsers).to.include(subjectApprovedUser);\n\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectApprovedUser);\n\n        expect(deniedUsers).to.not.include(subjectApprovedUser);\n        expect(isDenied).to.be.false;\n      });\n\n      it(\"should emit a UserRemovedFromDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserRemovedFromDenylist\").withArgs(\n          await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"),\n          await calculateGarantiIdHash(\"janedoe@gmail.com987654321\")\n        );\n      });\n\n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#setMinDepositAmount\", async () => {\n      let subjectMinDepositAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMinDepositAmount = usdc(10);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMinDepositAmount(subjectMinDepositAmount);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const depositAmount = await ramp.minDepositAmount();\n\n        expect(depositAmount).to.eq(subjectMinDepositAmount);\n      });\n\n      it(\"should emit a MinDepositAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MinDepositAmountSet\").withArgs(subjectMinDepositAmount);\n      });\n\n      describe(\"when the min deposit amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMinDepositAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Minimum deposit cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setMaxOnRampAmount\", async () => {\n      let subjectMaxOnRampAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMaxOnRampAmount = usdc(998);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMaxOnRampAmount(subjectMaxOnRampAmount);\n      }\n\n      it(\"should set the correct max on ramp amount\", async () => {\n        const preMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(preMaxOnRampAmount).to.eq(usdc(999));\n\n        await subject();\n\n        const postMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(postMaxOnRampAmount).to.eq(subjectMaxOnRampAmount);\n      });\n\n      it(\"should emit a MaxOnRampAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MaxOnRampAmountSet\").withArgs(subjectMaxOnRampAmount);\n      });\n\n      describe(\"when the max amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMaxOnRampAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max on ramp amount cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setIntentExpirationPeriod\", async () => {\n      let subjectIntentExpirationPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectIntentExpirationPeriod = ONE_DAY_IN_SECONDS.mul(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setIntentExpirationPeriod(subjectIntentExpirationPeriod);\n      }\n\n      it(\"should set the correct expiration time period\", async () => {\n        const preOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectIntentExpirationPeriod);\n      });\n\n      it(\"should emit a IntentExpirationPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"IntentExpirationPeriodSet\").withArgs(subjectIntentExpirationPeriod);\n      });\n\n      describe(\"when the intent expiration period is 0\", async () => {\n        beforeEach(async () => {\n          subjectIntentExpirationPeriod = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max intent expiration period cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setOnRampCooldownPeriod\", async () => {\n      let subjectOnRampCoolDownPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectOnRampCoolDownPeriod = ONE_DAY_IN_SECONDS.div(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setOnRampCooldownPeriod(subjectOnRampCoolDownPeriod);\n      }\n\n      it(\"should set the correct cool down time period\", async () => {\n        const preOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectOnRampCoolDownPeriod);\n      });\n\n      it(\"should emit a OnRampCooldownPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"OnRampCooldownPeriodSet\").withArgs(subjectOnRampCoolDownPeriod);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFee\", async () => {\n      let subjectSustainabilityFee: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFee = ether(.002);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFee(subjectSustainabilityFee);\n      }\n\n      it(\"should set the correct sustainability fee\", async () => {\n        const preSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(preSustainabilityFee).to.eq(ZERO);\n\n        await subject();\n\n        const postSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(postSustainabilityFee).to.eq(subjectSustainabilityFee);\n      });\n\n      it(\"should emit a SustainabilityFeeUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeUpdated\").withArgs(subjectSustainabilityFee);\n      });\n\n      describe(\"when the fee exceeds the max sustainability fee\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFee = ether(.1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee cannot be greater than max fee\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFeeRecipient\", async () => {\n      let subjectSustainabilityFeeRecipient: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFeeRecipient = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFeeRecipient(subjectSustainabilityFeeRecipient);\n      }\n\n      it(\"should set the correct sustainability fee recipient\", async () => {\n        const preSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(preSustainabilityFeeRecipient).to.eq(feeRecipient.address);\n\n        await subject();\n\n        const postSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(postSustainabilityFeeRecipient).to.eq(subjectSustainabilityFeeRecipient);\n      });\n\n      it(\"should emit a SustainabilityFeeRecipientUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeRecipientUpdated\").withArgs(subjectSustainabilityFeeRecipient);\n      });\n\n      describe(\"when the passed fee recipient is the zero address\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFeeRecipient = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee recipient cannot be zero address\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSendProcessor\", async () => {\n      let subjectSendProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSendProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSendProcessor(subjectSendProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newSendProcessor = await ramp.sendProcessor();\n\n        expect(newSendProcessor).to.eq(subjectSendProcessor);\n      });\n\n      it(\"should emit a NewSendProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewSendProcessorSet\").withArgs(subjectSendProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setRegistrationProcessor\", async () => {\n      let subjectRegistrationProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectRegistrationProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setRegistrationProcessor(subjectRegistrationProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newRegistrationProcessor = await ramp.registrationProcessor();\n\n        expect(newRegistrationProcessor).to.eq(subjectRegistrationProcessor);\n      });\n\n      it(\"should emit a NewRegistrationProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewRegistrationProcessorSet\").withArgs(subjectRegistrationProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#getAccountDeposits\", async () => {\n      let subjectAccount: Address;\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountDeposits(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].depositorIdHash).to.eq(await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"));\n        expect(deposits[1].depositorIdHash).to.eq(await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getDepositFromIds\", async () => {\n      let subjectDepositIds: BigNumber[];\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectDepositIds = [ZERO, ONE];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getDepositFromIds(subjectDepositIds);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n        expect(deposits[0].depositorIdHash).to.eq(await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"));\n        expect(deposits[1].depositorIdHash).to.eq(await calculateGarantiIdHash(\"johndoe@gmail.com123456789\"));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getIntentsWithOnRamperId\", async () => {\n      let subjectIntentHashes: string[];\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"TR01 2345 6789 0123 4567 8901 23\",\n          \"John Doe\",\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        const intentHashOne = calculateIntentHash(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"), ZERO, await blockchain.getCurrentTimestamp());\n        await ramp.connect(onRamperTwo.wallet).signalIntent(ZERO, usdc(40), receiver.address);\n        const intentHashTwo = calculateIntentHash(await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"), ZERO, await blockchain.getCurrentTimestamp());\n\n        subjectIntentHashes = [intentHashOne, intentHashTwo];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIntentsWithOnRamperId(subjectIntentHashes);\n      }\n\n      it(\"should return the expected intents\", async () => {\n        const intents = await subject();\n\n        expect(intents[0].intent.onRamper).to.eq(onRamper.address);\n        expect(intents[1].intent.onRamper).to.eq(onRamperTwo.address);\n        expect(intents[0].intent.deposit).to.eq(ZERO);\n        expect(intents[1].intent.deposit).to.eq(ZERO);\n        expect(intents[0].intent.amount).to.eq(usdc(50));\n        expect(intents[1].intent.amount).to.eq(usdc(40));\n        expect(intents[0].onRamperIdHash).to.eq(await calculateGarantiIdHash(\"janedoe@gmail.com987654321\"));\n        expect(intents[1].onRamperIdHash).to.eq(await calculateGarantiIdHash(\"satoshi@gmail.com123571113\"));\n        expect(intents[0].intentHash).to.eq(subjectIntentHashes[0]);\n        expect(intents[1].intentHash).to.eq(subjectIntentHashes[1]);\n      });\n    });\n  });\n\n  describe(\"#isValidIban\", async () => {\n    let subjectIban: string;\n\n    beforeEach(async () => {\n      subjectIban = \"TR01 2345 6789 0123 4567 8901 23\";\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.isValidIban(subjectIban);\n    }\n\n    it(\"should return true\", async () => {\n      const isValid = await subject();\n\n      expect(isValid).to.be.true;\n    });\n\n    describe(\"when IBAN isn't of correct length\", async () => {\n      beforeEach(async () => {\n        subjectIban = \"TR01 2345 6789 0123 4567 8901 2\";\n      });\n\n      it(\"should return false\", async () => {\n        const isValid = await subject();\n\n        expect(isValid).to.be.false;\n      });\n    });\n\n    describe(\"when first two characters aren't a capital letter\", async () => {\n      beforeEach(async () => {\n        subjectIban = \"tr01 2345 6789 0123 4567 8901 23\";\n      });\n\n      it(\"should return false\", async () => {\n        const isValid = await subject();\n\n        expect(isValid).to.be.false;\n      });\n    });\n\n    describe(\"when first two characters are a number\", async () => {\n      beforeEach(async () => {\n        subjectIban = \"0001 2345 6789 0123 4567 8901 23\";\n      });\n\n      it(\"should return false\", async () => {\n        const isValid = await subject();\n\n        expect(isValid).to.be.false;\n      });\n    });\n\n    describe(\"when a space is misplaced\", async () => {\n      beforeEach(async () => {\n        subjectIban = \"TR01 23456 789 0123 4567 8901 23\";\n      });\n\n      it(\"should return false\", async () => {\n        const isValid = await subject();\n\n        expect(isValid).to.be.false;\n      });\n    });\n\n    describe(\"when other characters are not numbers (greater than number range)\", async () => {\n      beforeEach(async () => {\n        subjectIban = \"TR01 2345 6789 0a23 4567 8901 23\";\n      });\n\n      it(\"should return false\", async () => {\n        const isValid = await subject();\n\n        expect(isValid).to.be.false;\n      });\n    });\n\n    describe(\"when other characters are not numbers (less than number range)\", async () => {\n      beforeEach(async () => {\n        subjectIban = \"TR01 2345 6789 0/23 4567 8901 23\";\n      });\n\n      it(\"should return false\", async () => {\n        const isValid = await subject();\n\n        expect(isValid).to.be.false;\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/garanti/garantiRegistrationProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapterV2, NullifierRegistry, GarantiRegistrationProcessor, GarantiBodyHashVerifier } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address } from \"@utils/types\";\nimport { createTypedGarantiBodyHashProof, createTypedSendProof } from \"@utils/protocolUtils\"\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\nconst rawSignals = [\"0x03a9c8babd6b4ad94d711f3ffbee84b7aa69f4cb0dd08d491c5a5c32eca15f60\",\"0x0000000000000000000000000000000074d5bfa8b7948faf4db367e093139ab0\",\"0x00000000000000000000000000000000cb1dd3b7fcf3534af5506dddda4bc17e\",\"0x00000000000000000000000000000000e164fb82a38d8a8437e9641c804eb311\",\"0x0000000000000000000000000000000081a6b7791c2c54f97d2ca0b69adfc33b\",\"0x0000000000000000000000000000000000000000000000000069746e61726167\",\"0x00000000000000000000000000000000000000000000000000672e6f666e6940\",\"0x000000000000000000000000000000000000000000000000006269746e617261\",\"0x000000000000000000000000000000000000000000000000006d6f632e617662\",\"0x000000000000000000000000000000000000000000000000000000000072742e\",\"0x071caee57e1bb6d2542fffa8b70fdd31f73ce937e8aa12735701d2481b7b0228\"];\n\ndescribe(\"GarantiRegistrationProcessor\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n  let nullifierRegistry: NullifierRegistry;\n  let bodyHashVerifier: GarantiBodyHashVerifier;\n  let registrationProcessor: GarantiRegistrationProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([rawSignals[0]]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    bodyHashVerifier = await deployer.deployGarantiBodyHashVerifier();\n    registrationProcessor = await deployer.deployGarantiRegistrationProcessor(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      bodyHashVerifier.address,\n      \"garanti@info.garantibbva.com.tr\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(registrationProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await registrationProcessor.ramp();\n      const venmoMailserverKeyHashAdapter = await registrationProcessor.mailServerKeyHashAdapter();\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoMailserverKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"garanti@info.garantibbva.com.tr\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: any;\n    let subjectBodyHashProof: any;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = createTypedSendProof(\n        [\"0x10b0fd956de88289ef2cf645d8346c0b7b33f056c1ba0567648c9308e3c27ed4\", \"0x0c1cc5144929c9476409a359c78543b39aa6a3c008d2d5c6be1a5dc9b50a0aa9\"],\n        [[\"0x27c65e310658b393814b100735b73e32f46c1a8f1c56e6dd506cf1e9e37a1443\", \"0x07e50a9e225e6a46565f674d64cfac26ef75e9411a428af4df9a74fa6f42b307\"],[\"0x00c799e545a1325f8f8240312cf8b50d06ed375668728f42804f15c05690f70c\", \"0x1af5163881df557ab8e2b30a757b5a0ec567d0ce7a4f911ce8cd1ccf264eba17\"]],\n        [\"0x17e8f2d021aae515741453b1d9a6d5e8b2113a3dac2d46927c79d462bd5940cd\", \"0x1b150e4dda4f9015820185eccdc9e7e81d07575a9c90d79a5610deb630b26947\"],\n        rawSignals\n      );\n\n      subjectBodyHashProof = createTypedGarantiBodyHashProof(\n        [\"0x064f2dc03125ae60ce37fca0861252ad5eade0bcd8de61137cfc90f695dfc9a9\", \"0x1d19869fbddb3ffb43b1fa4adea5741c185472cbca906fc252dcdb4b708a103f\"],\n        [[\"0x25f15ae8c6c6ab9e074b3e64a96a1eb109dfd55ab0b6e724e6ca137697cdfbd5\", \"0x0b438fc0542c9149bbac9c5a9d19f8dfaa72f7938e02f73f2b45041dca220ffc\"],[\"0x09fb9137a12f8f3ba7c5343e0bf7fb2168825e1115eb83337c8da0b3e15ca7de\", \"0x2f88a6a5fd7efa8b2740e8db6e52cd43de78cb41de211b859783887839ba9564\"]],\n        [\"0x0df753236289f8aa2d441e20a4d68d619ebd23b26c590ef38ee19d091f639079\", \"0x06c7effc5a391d41ea8853233d1c31af144ec3571973acd5c0e8c1fa628ae6f1\"],\n        [\"0x0000000000000000000000000000000074d5bfa8b7948faf4db367e093139ab0\",\"0x00000000000000000000000000000000cb1dd3b7fcf3534af5506dddda4bc17e\",\"0x00000000000000000000000000000000e164fb82a38d8a8437e9641c804eb311\",\"0x0000000000000000000000000000000081a6b7791c2c54f97d2ca0b69adfc33b\"]\n      );\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).processProof(subjectProof, subjectBodyHashProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof, subjectBodyHashProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const onRamperIdHash = await subjectCallStatic();\n\n      expect(onRamperIdHash).to.eq(subjectProof.signals[10]);\n    });\n\n    it(\"should add the hash of the proof inputs to the nullifier registry\", async () => {\n      await subject();\n\n      const expectedNullifier = ethers.utils.keccak256(\n        abiCoder.encode(\n          [\"tuple(uint256[2],uint256[2][2],uint256[2],uint256[11])\"],\n          [[subjectProof.a, subjectProof.b, subjectProof.c, subjectProof.signals]]\n        )\n      );\n      const isNullified = await nullifierRegistry.isNullified(expectedNullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the email has been used previously\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the body hash proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectBodyHashProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid body hash proof\");\n      });\n    });\n\n    describe(\"when the intermediate hash inputs or body hash outputs do not match registration proof\", async () => {\n      beforeEach(async () => {\n        subjectBodyHashProof = createTypedGarantiBodyHashProof(\n          [\"14653874762226132125813581944173037734680002926894352348432804459120790833709\",\"4234420865087992990623206285467306548429197251036324906379237459344206070342\"],\n          [[\"4125845894707116080045121935750809218242993114300380408255127016706351425352\",\"20248180750226637189124475786840065563207423742119523002941288249073406581495\"],[\"19719680405882474141535640065057829220766720268885201592278653483797737282362\",\"1237550097294003602289904713261161147452394470305459607873182705820463992626\"]],\n          [\"4902076314490420019554958417627753236288208391516898332296731504413924237172\",\"9411866177864923399792803176920660451367924614019213127846448747609230749753\"],\n          [\"184252605284363595149139887860778008382\",\"33631160057821328359498276332141373559\",\"81428775102482486021288598358053856364\",\"81392513454050495164061550799124406523\"]\n        );\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid intermediate or output hash\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await registrationProcessor.setEmailFromAddress(\"bad-garanti@info.garantibbva.com.tr\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.removeMailServerKeyHash(rawSignals[0]);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await registrationProcessor.mailServerKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-garanti@info.garantibbva.com.tr\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-garanti@info.garantibbva.com.tr\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await registrationProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/garanti/garantiSendProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapterV2, NullifierRegistry, GarantiBodyHashVerifier, GarantiSendProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\nimport { GrothProof } from \"@utils/types\";\nimport { calculateIbanHash, createTypedGarantiBodyHashProof, createTypedSendProof, unpackPackedGarantiId } from \"@utils/protocolUtils\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { usdc } from \"@utils/common\";\n\nconst expect = getWaffleExpect();\n\nconst rawSignals = [\"0x03a9c8babd6b4ad94d711f3ffbee84b7aa69f4cb0dd08d491c5a5c32eca15f60\",\"0x0000000000000000000000000000000074d5bfa8b7948faf4db367e093139ab0\",\"0x00000000000000000000000000000000cb1dd3b7fcf3534af5506dddda4bc17e\",\"0x00000000000000000000000000000000e164fb82a38d8a8437e9641c804eb311\",\"0x0000000000000000000000000000000081a6b7791c2c54f97d2ca0b69adfc33b\",\"0x0000000000000000000000000000000000000000000000000069746e61726167\",\"0x00000000000000000000000000000000000000000000000000672e6f666e6940\",\"0x000000000000000000000000000000000000000000000000006269746e617261\",\"0x000000000000000000000000000000000000000000000000006d6f632e617662\",\"0x000000000000000000000000000000000000000000000000000000000072742e\",\"0x0000000000000000000000000000000000000000000000000033353139303731\",\"0x0000000000000000000000000000000000000000000000000000000000333832\",\"0x000000000000000000000000000000000000000000000000004d206e61697242\",\"0x00000000000000000000000000000000000000000000000000206c6561686369\",\"0x00000000000000000000000000000000000000000000000000616d6b63696557\",\"0x0000000000000000000000000000000000000000000000000000000000006e6e\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x0000000000000000000000000000000000000000000000000030302032395254\",\"0x0000000000000000000000000000000000000000000000000030303033203031\",\"0x0000000000000000000000000000000000000000000000000030203030303020\",\"0x0000000000000000000000000000000000000000000000000036333620323630\",\"0x0000000000000000000000000000000000000000000000000000000036302039\",\"0x00000000000000000000000000000000000000000000000000000030302c3139\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x071caee57e1bb6d2542fffa8b70fdd31f73ce937e8aa12735701d2481b7b0228\",\"0x0c0bde4da674e6e42db3598df21fa56a4d7f825768ccf0786c7cea6342de8c1b\",\"0x0000000000000000000000000000000000000000000000000000000000003039\"];\n\ndescribe(\"GarantiSendProcessor\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n  let nullifierRegistry: NullifierRegistry;\n  let bodyHashVerifier: GarantiBodyHashVerifier;\n  let sendProcessor: GarantiSendProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([rawSignals[0]]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    bodyHashVerifier = await deployer.deployGarantiBodyHashVerifier();\n    sendProcessor = await deployer.deployGarantiSendProcessor(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      bodyHashVerifier.address,\n      \"garanti@info.garantibbva.com.tr\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(sendProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await sendProcessor.ramp();\n      const venmoKeyHashAdapter = await sendProcessor.mailServerKeyHashAdapter();\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"garanti@info.garantibbva.com.tr\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: GrothProof;\n    let subjectBodyHashProof: any;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = createTypedSendProof(\n        [\"0x048f0191a0c97d837f6d665f6ca2178adef3b0addd4125d970dfeaf1825a470c\", \"0x14860fbaf039aa48a059b902f6eb4f562991cff602e07078dba373d76614cd3c\"],\n        [[\"0x1175295c644d0e6eba8d75d5387f77d3ca8d6d38b914bcfcaaa2bb757dd32a60\", \"0x12d0731577461c3a0766731d3ab9a8b17768f1b99e17e9fc7f6d5a6dd6a74667\"],[\"0x12fc86ca6a28eba14f80b444a18eb297d8dc758d065f2ec5d91f637e8ec0ab49\", \"0x0234e89a9c9af4f7a352cba293dad73c4700835bba59e3141ec3f54343636f27\"]],\n        [\"0x29e62440bbdf906c21a96f6f84873d00e26ca0a67dd2861c601bc94202cc418b\", \"0x23000b0f83f884c580932b45d383eb432f16f583962a70c1921be40e5a4c46a3\"],\n        rawSignals\n      );\n\n      subjectBodyHashProof = createTypedGarantiBodyHashProof(\n        [\"0x064f2dc03125ae60ce37fca0861252ad5eade0bcd8de61137cfc90f695dfc9a9\", \"0x1d19869fbddb3ffb43b1fa4adea5741c185472cbca906fc252dcdb4b708a103f\"],\n        [[\"0x25f15ae8c6c6ab9e074b3e64a96a1eb109dfd55ab0b6e724e6ca137697cdfbd5\", \"0x0b438fc0542c9149bbac9c5a9d19f8dfaa72f7938e02f73f2b45041dca220ffc\"],[\"0x09fb9137a12f8f3ba7c5343e0bf7fb2168825e1115eb83337c8da0b3e15ca7de\", \"0x2f88a6a5fd7efa8b2740e8db6e52cd43de78cb41de211b859783887839ba9564\"]],\n        [\"0x0df753236289f8aa2d441e20a4d68d619ebd23b26c590ef38ee19d091f639079\", \"0x06c7effc5a391d41ea8853233d1c31af144ec3571973acd5c0e8c1fa628ae6f1\"],\n        [\"0x0000000000000000000000000000000074d5bfa8b7948faf4db367e093139ab0\",\"0x00000000000000000000000000000000cb1dd3b7fcf3534af5506dddda4bc17e\",\"0x00000000000000000000000000000000e164fb82a38d8a8437e9641c804eb311\",\"0x0000000000000000000000000000000081a6b7791c2c54f97d2ca0b69adfc33b\"]\n      );\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).processProof(subjectProof, subjectBodyHashProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof, subjectBodyHashProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const {\n        amount,\n        timestamp,\n        offRamperNameHash,\n        offRamperIdHash,\n        onRamperIdHash,\n        intentHash\n      } = await subjectCallStatic();\n\n      const unpackedGarantiId = unpackPackedGarantiId(rawSignals.slice(18,23).map(x => BigNumber.from(x)));\n\n      expect(amount).to.eq(usdc(91));\n      expect(timestamp).to.eq(BigNumber.from(1709153283).add(30));  // 30s is default timestamp buffer;\n      // Hardcoding value to protect privacy, confirmed that hashed value matches the extracted value from the email\n      expect(offRamperNameHash).to.eq(\"0x0155fe18a13bde7830d4f1253e8a58c038360e2116663a65ee44ef29e4f8f4ae\");\n      expect(offRamperIdHash).to.eq(calculateIbanHash(unpackedGarantiId));\n      expect(onRamperIdHash).to.eq(rawSignals[25]);\n      expect(intentHash).to.eq(rawSignals[27]);\n    });\n\n    it(\"should add the email to the nullifier mapping\", async () => {\n      await subject();\n\n      const isNullified = await nullifierRegistry.isNullified(subjectProof.signals[26].toHexString());\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the body hash proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectBodyHashProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid body hash proof\");\n      });\n    });\n\n    describe(\"when the intermediate hash inputs or body hash outputs do not match send proof\", async () => {\n      beforeEach(async () => {\n        subjectBodyHashProof = createTypedGarantiBodyHashProof(\n          [\"14653874762226132125813581944173037734680002926894352348432804459120790833709\",\"4234420865087992990623206285467306548429197251036324906379237459344206070342\"],\n          [[\"4125845894707116080045121935750809218242993114300380408255127016706351425352\",\"20248180750226637189124475786840065563207423742119523002941288249073406581495\"],[\"19719680405882474141535640065057829220766720268885201592278653483797737282362\",\"1237550097294003602289904713261161147452394470305459607873182705820463992626\"]],\n          [\"4902076314490420019554958417627753236288208391516898332296731504413924237172\",\"9411866177864923399792803176920660451367924614019213127846448747609230749753\"],\n          [\"184252605284363595149139887860778008382\",\"33631160057821328359498276332141373559\",\"81428775102482486021288598358053856364\",\"81392513454050495164061550799124406523\"]\n        );\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid intermediate or output hash\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await sendProcessor.setEmailFromAddress(\"bad-garanti@info.garantibbva.com.tr\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.removeMailServerKeyHash(rawSignals[0]);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the e-mail was used previously\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await sendProcessor.mailServerKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-garanti@info.garantibbva.com.tr\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-garanti@info.garantibbva.com.tr\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await sendProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/hdfc/hdfcRamp.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport {\n  Address,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  HDFCRamp,\n  USDCMock,\n  HDFCRegistrationProcessorMock,\n  HDFCSendProcessorMock\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Blockchain, ether, usdc } from \"@utils/common\";\nimport { BigNumber } from \"ethers\";\nimport { ZERO, ZERO_BYTES32, ADDRESS_ZERO, ONE } from \"@utils/constants\";\nimport { calculateIntentHash, calculatePackedUPIId, calculateUpiIdHash } from \"@utils/protocolUtils\";\nimport { ONE_DAY_IN_SECONDS } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\nconst blockchain = new Blockchain(ethers.provider);\n\ndescribe(\"HDFCRamp\", () => {\n  let owner: Account;\n  let offRamper: Account;\n  let offRamperNewAcct: Account;\n  let onRamper: Account;\n  let onRamperOtherAddress: Account;\n  let onRamperTwo: Account;\n  let receiver: Account;\n  let maliciousOnRamper: Account;\n  let unregisteredUser: Account;\n  let feeRecipient: Account;\n\n  let ramp: HDFCRamp;\n  let usdcToken: USDCMock;\n  let registrationProcessor: HDFCRegistrationProcessorMock;\n  let sendProcessor: HDFCSendProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      offRamper,\n      onRamper,\n      onRamperOtherAddress,\n      onRamperTwo,\n      receiver,\n      maliciousOnRamper,\n      unregisteredUser,\n      offRamperNewAcct,\n      feeRecipient\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    const poseidonContract3 = await deployer.deployPoseidon3();\n    const poseidonContract6 = await deployer.deployPoseidon6();\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n    registrationProcessor = await deployer.deployHDFCRegistrationProcessorMock();\n    sendProcessor = await deployer.deployHDFCSendProcessorMock();\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    ramp = await deployer.deployHDFCRamp(\n      owner.address,\n      usdcToken.address,\n      poseidonContract3.address,\n      poseidonContract6.address,\n      usdc(20),                          // $20 min deposit amount\n      usdc(999),\n      ONE_DAY_IN_SECONDS,\n      ONE_DAY_IN_SECONDS,               // On ramp cooldown period\n      ZERO,                             // Sustainability fee\n      feeRecipient.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await ramp.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n\n    it(\"should set the correct usdc\", async () => {\n      const usdcAddress: Address = await ramp.usdc();\n      expect(usdcAddress).to.eq(usdcToken.address);\n    });\n\n    it(\"should set the correct min deposit amount\", async () => {\n      const minDepositAmount: BigNumber = await ramp.minDepositAmount();\n      expect(minDepositAmount).to.eq(usdc(20));\n    });\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const maxOnRampAmount: BigNumber = await ramp.maxOnRampAmount();\n      expect(maxOnRampAmount).to.eq(usdc(999));\n    });\n\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await ramp.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectRegistrationProcessor: Address;\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectRegistrationProcessor = registrationProcessor.address;\n      subjectSendProcessor = sendProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).initialize(\n        subjectRegistrationProcessor,\n        subjectSendProcessor\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const registrationProcessorAddress: Address = await ramp.registrationProcessor();\n      const sendProcessorAddress: Address = await ramp.sendProcessor();\n\n      expect(registrationProcessorAddress).to.eq(registrationProcessor.address);\n      expect(sendProcessorAddress).to.eq(sendProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#register\", async () => {\n    let subjectA: [BigNumber, BigNumber];\n    let subjectB: [[BigNumber, BigNumber], [BigNumber, BigNumber]];\n    let subjectC: [BigNumber, BigNumber];\n    let subjectSignals: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      subjectSignals = [ZERO, ZERO, ZERO, ZERO, ZERO];\n      subjectSignals[0] = BigNumber.from(1);\n      subjectSignals[1] = BigNumber.from(await calculateUpiIdHash(\"21\"));\n\n      subjectA = [ZERO, ZERO];\n      subjectB = [[ZERO, ZERO], [ZERO, ZERO]];\n      subjectC = [ZERO, ZERO];\n      subjectCaller = offRamper;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).register(subjectA, subjectB, subjectC, subjectSignals);\n    }\n\n    it(\"should register the caller\", async () => {\n      await subject();\n\n      const offRamperIdHash = (await ramp.getAccountInfo(subjectCaller.address)).idHash;\n      expect(offRamperIdHash).to.eq(subjectSignals[1]);\n    });\n\n    it(\"should emit an AccountRegistered event\", async () => {\n      await expect(subject()).to.emit(ramp, \"AccountRegistered\").withArgs(\n        subjectCaller.address,\n        subjectSignals[1]\n      );\n    });\n\n    describe(\"when the caller is already registered\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectSignals[1] = BigNumber.from(await calculateUpiIdHash(\"23\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Account already associated with idHash\");\n      });\n    });\n  });\n\n  context(\"when the on and off ramper are registered\", async () => {\n    let signalsOffRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsOnRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsOnRampTwo: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsMaliciousOnRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n      const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n      const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n      signalsOffRamp = [ZERO, BigNumber.from(await calculateUpiIdHash(\"21\")), ZERO, ZERO, ZERO];\n      signalsOnRamp = [ZERO, BigNumber.from(await calculateUpiIdHash(\"22\")), ZERO, ZERO, ZERO];\n      signalsOnRampTwo = [ZERO, BigNumber.from(await calculateUpiIdHash(\"23\")), ZERO, ZERO, ZERO];\n      signalsMaliciousOnRamp = [ZERO, BigNumber.from(await calculateUpiIdHash(\"22\")), ZERO, ZERO, ZERO];\n\n      await ramp.connect(offRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOffRamp\n      );\n      await ramp.connect(onRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOnRamp\n      );\n\n      await ramp.connect(onRamperTwo.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOnRampTwo\n      );\n\n      await ramp.connect(maliciousOnRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsMaliciousOnRamp\n      );\n\n      await usdcToken.connect(offRamper.wallet).approve(ramp.address, usdc(10000));\n    });\n\n    describe(\"#offRamp\", async () => {\n      let subjectUpiId: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n      let subjectDepositAmount: BigNumber;\n      let subjectReceiveAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectUpiId = calculatePackedUPIId(\"1\");\n        subjectDepositAmount = usdc(100);\n        subjectReceiveAmount = usdc(101);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).offRamp(subjectUpiId, subjectDepositAmount, subjectReceiveAmount);\n      }\n\n      it(\"should transfer the usdc to the Ramp contract\", async () => {\n        await subject();\n\n        const rampUsdcBalance = await usdcToken.balanceOf(ramp.address);\n        const offRamperUsdcBalance = await usdcToken.balanceOf(offRamper.address);\n        expect(rampUsdcBalance).to.eq(subjectDepositAmount);\n        expect(offRamperUsdcBalance).to.eq(usdc(9900));\n      });\n\n      it(\"should correctly update the deposits mapping with the correct key\", async () => {\n        await subject();\n\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        const deposit = await ramp.getDeposit(ZERO);\n\n        expect(deposit.depositor).to.eq(subjectCaller.address);\n        expect(JSON.stringify(deposit.upiId)).to.eq(JSON.stringify(subjectUpiId));\n        expect(deposit.depositAmount).to.eq(subjectDepositAmount);\n        expect(deposit.remainingDeposits).to.eq(subjectDepositAmount);\n        expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposit.conversionRate).to.eq(conversionRate);\n      });\n\n      it(\"should increment the deposit counter correctly\", async () => {\n        await subject();\n\n        const depositCounter = await ramp.depositCounter();\n\n        expect(depositCounter).to.eq(ONE);\n      });\n\n      it(\"should emit a DepositReceived event\", async () => {\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        await expect(subject()).to.emit(ramp, \"DepositReceived\").withArgs(\n          ZERO,\n          await calculateUpiIdHash(\"21\"),\n          subjectDepositAmount,\n          conversionRate\n        );\n      });\n\n      describe(\"when the deposited amount is less than the minimum\", async () => {\n        beforeEach(async () => {\n          subjectDepositAmount = usdc(19.99);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit amount must be greater than min deposit amount\");\n        });\n      });\n\n      describe(\"when the depositor has reached their max amount of deposits\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectUpiId, subjectDepositAmount, usdc(102));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectUpiId, subjectDepositAmount, usdc(103));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectUpiId, subjectDepositAmount, usdc(104));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectUpiId, subjectDepositAmount, usdc(105));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectUpiId, subjectDepositAmount, usdc(106));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Maximum deposit amount reached\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the receive amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectReceiveAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Receive amount must be greater than 0\");\n        });\n      });\n    });\n\n    describe(\"#signalIntent\", async () => {\n      let subjectDepositId: BigNumber;\n      let subjectAmount: BigNumber;\n      let subjectTo: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        subjectDepositId = ZERO;\n        subjectAmount = usdc(50);\n        subjectTo = receiver.address;\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).signalIntent(subjectDepositId, subjectAmount, subjectTo);\n      }\n\n      it(\"should create the correct entry in the intents mapping\", async () => {\n        await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), subjectDepositId, currentTimestamp);\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(subjectCaller.address);\n        expect(intent.to).to.eq(subjectTo);\n        expect(intent.deposit).to.eq(subjectDepositId);\n        expect(intent.amount).to.eq(subjectAmount);\n        expect(intent.intentTimestamp).to.eq(currentTimestamp);\n      });\n\n      it(\"should update the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n        await subject();\n\n        const intentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n\n        const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.add(subjectAmount));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(subjectAmount));\n        expect(postDeposit.intentHashes).to.include(intentHash);\n      });\n\n      it(\"should update the account's current intent hash\", async () => {\n        await subject();\n\n        const expectedIntentHash = calculateIntentHash(\n          await calculateUpiIdHash(\"22\"),\n          subjectDepositId,\n          await blockchain.getCurrentTimestamp()\n        );\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(expectedIntentHash).to.eq(intentHash);\n      });\n\n      it(\"should emit an IntentSignaled event\", async () => {\n        const txn = await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), subjectDepositId, currentTimestamp);\n\n        expect(txn).to.emit(ramp, \"IntentSignaled\").withArgs(\n          intentHash,\n          subjectDepositId,\n          await calculateUpiIdHash(\"22\"),\n          subjectTo,\n          subjectAmount,\n          currentTimestamp\n        );\n      });\n\n      describe(\"when there aren't enough deposits to cover requested amount but there are prunable intents\", async () => {\n        let timeJump: number;\n        let oldIntentHash: string;\n\n        before(async () => {\n          timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n        });\n\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          oldIntentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), subjectDepositId, currentTimestamp);\n\n          await blockchain.increaseTimeAsync(timeJump);\n\n          subjectAmount = usdc(60);\n          subjectCaller = onRamperTwo;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(preDeposit.intentHashes).to.include(oldIntentHash);\n\n          await subject();\n\n          const newIntentHash = calculateIntentHash(await calculateUpiIdHash(\"23\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n          const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(postDeposit.outstandingIntentAmount).to.eq(subjectAmount);\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(usdc(10))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.include(newIntentHash);\n          expect(postDeposit.intentHashes).to.not.include(oldIntentHash);\n        });\n\n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n\n          const intent = await ramp.intents(oldIntentHash);\n\n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n\n        it(\"should correctly add a new intent to the intents mapping\", async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateUpiIdHash(\"23\"), subjectDepositId, currentTimestamp);\n\n          const intent = await ramp.intents(intentHash);\n\n          expect(intent.onRamper).to.eq(subjectCaller.address);\n          expect(intent.deposit).to.eq(subjectDepositId);\n          expect(intent.amount).to.eq(subjectAmount);\n          expect(intent.intentTimestamp).to.eq(currentTimestamp);\n        });\n\n        it(\"should update the account's current intent hash\", async () => {\n          await subject();\n\n          const expectedIntentHash = calculateIntentHash(\n            await calculateUpiIdHash(\"23\"),\n            subjectDepositId,\n            await blockchain.getCurrentTimestamp()\n          );\n\n          const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n          expect(expectedIntentHash).to.eq(intentHash);\n        });\n\n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(oldIntentHash, subjectDepositId);\n        });\n\n        describe(\"when the reclaimable amount can't cover the new intent\", async () => {\n          before(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.div(2).toNumber();\n          });\n\n          after(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Not enough liquidity\");\n          });\n        });\n      });\n\n      describe(\"when the caller is on the depositor's denylist\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(offRamper.wallet).addAccountToDenylist(calculateUpiIdHash(\"22\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper on depositor's denylist\");\n        });\n      });\n\n      describe(\"when the caller is the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the caller is the depositor from another Ethereum account\", async () => {\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(offRamperNewAcct.wallet).register(\n            _a,\n            _b,\n            _c,\n            signalsOffRamp\n          );\n\n          subjectCaller = offRamperNewAcct;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the to address is zero\", async () => {\n        beforeEach(async () => {\n          subjectTo = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Cannot send to zero address\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be greater than 0\");\n        });\n      });\n\n      describe(\"when the amount exceeds the max on ramp amount\", async () => {\n        beforeEach(async () => {\n          subjectAmount = usdc(1000);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be less than max on-ramp amount\");\n        });\n      });\n\n      describe(\"when the cool down period hasn't elapsed\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), subjectDepositId, currentTimestamp);\n\n          const signals = new Array<BigNumber>(15).fill(ZERO);\n          signals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n          signals[1] = currentTimestamp;\n          signals[2] = BigNumber.from(await calculateUpiIdHash(\"1\"));\n          signals[3] = BigNumber.from(await calculateUpiIdHash(\"22\"));\n          signals[4] = BigNumber.from(intentHash);\n\n          const a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(onRamper.wallet).onRamp(a, b, c, signals);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"On ramp cool down period not elapsed\");\n        });\n      });\n\n      describe(\"when the deposit does not exist\", async () => {\n        beforeEach(async () => {\n          subjectDepositId = BigNumber.from(10);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit does not exist\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent but is calling from a different address\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          subjectCaller = maliciousOnRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n    });\n\n    describe(\"#cancelIntent\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        const idHash = await calculateUpiIdHash(\"22\");\n        depositId = ZERO;\n\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).cancelIntent(subjectIntentHash);\n      }\n\n      it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should delete the original intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should update the accounts current intent hash\", async () => {\n        await subject();\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(intentHash).to.eq(ZERO_BYTES32);\n      });\n\n      it(\"should emit an IntentPruned event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n      });\n\n      describe(\"when the call comes from a different Eth address tied to the same venmoIdHash\", async () => {\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(onRamperOtherAddress.wallet).register(\n            _a,\n            _b,\n            _c,\n            signalsOnRamp\n          );\n\n          subjectCaller = onRamperOtherAddress;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(depositId);\n  \n          expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n  \n          await subject();\n  \n          const postDeposit = await ramp.getDeposit(depositId);\n  \n          expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n  \n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n  \n          const intent = await ramp.intents(subjectIntentHash);\n  \n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n  \n        it(\"should update the accounts current intent hash\", async () => {\n          await subject();\n  \n          const intentHash = await ramp.getIdCurrentIntentHash(onRamper.address);\n  \n          expect(intentHash).to.eq(ZERO_BYTES32);\n        });\n  \n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n        });\n      });\n\n      describe(\"when the intentHash does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = ZERO_BYTES32;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the caller did not originate the intent\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the on-ramper\");\n        });\n      });\n    });\n\n    describe(\"#onRamp\", async () => {\n      let subjectA: [BigNumber, BigNumber];\n      let subjectB: [[BigNumber, BigNumber], [BigNumber, BigNumber]];\n      let subjectC: [BigNumber, BigNumber];\n      let subjectSignals: BigNumber[];\n      let subjectCaller: Account;\n\n      let intentHash: string;\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = await calculateUpiIdHash(\"22\");\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        intentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n\n        subjectSignals = new Array<BigNumber>(15).fill(ZERO);\n        subjectSignals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n        subjectSignals[1] = currentTimestamp;\n        subjectSignals[2] = BigNumber.from(await calculateUpiIdHash(\"1\"));\n        subjectSignals[3] = BigNumber.from(await calculateUpiIdHash(\"22\"));\n        subjectSignals[4] = BigNumber.from(intentHash);\n\n        subjectA = [ZERO, ZERO];\n        subjectB = [[ZERO, ZERO], [ZERO, ZERO]];\n        subjectC = [ZERO, ZERO];\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).onRamp(subjectA, subjectB, subjectC, subjectSignals);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(intentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(subjectCaller.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          intentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            intentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          intentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), depositId, currentTimestamp);\n\n          subjectSignals[1] = currentTimestamp;\n          subjectSignals[4] = BigNumber.from(intentHash);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountInfo.deposits).to.not.include(depositId);\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(intentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the amount paid was not enough\", async () => {\n        beforeEach(async () => {\n          subjectSignals[0] = usdc(50);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Payment was not enough\");\n        });\n      });\n\n      describe(\"when the email timestamp is before the intent was signaled\", async () => {\n        beforeEach(async () => {\n          subjectSignals[1] = ONE;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent was not created before send\");\n        });\n      });\n\n      describe(\"when the intent has already been pruned\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the offRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSignals[2] = BigNumber.from(await calculateUpiIdHash(\"22\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Offramper id does not match\");\n        });\n      });\n\n      describe(\"when the onRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSignals[3] = BigNumber.from(await calculateUpiIdHash(\"23\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper id does not match\");\n        });\n      });\n    });\n\n    describe(\"#releaseFundsToOnramper\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = await calculateUpiIdHash(\"22\");\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).releaseFundsToOnramper(subjectIntentHash);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(onRamper.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          subjectIntentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            subjectIntentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          subjectIntentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), depositId, currentTimestamp);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountInfo.deposits).to.not.include(depositId);\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the intent does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), depositId, ONE);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the sender is not the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#withdrawDeposit\", async () => {\n      let subjectDepositIds: BigNumber[];\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedUPIId(\"1\"),\n          usdc(50),\n          usdc(51)\n        );\n\n        const currentDepositCounter = await ramp.depositCounter();\n        const depositIdOne = BigNumber.from(currentDepositCounter.sub(2));\n        const depositIdTwo = BigNumber.from(currentDepositCounter.sub(1));\n\n        subjectDepositIds = [depositIdOne, depositIdTwo];\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).withdrawDeposit(subjectDepositIds);\n      }\n\n      it(\"should transfer the usdc to the caller\", async () => {\n        const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n      });\n\n      it(\"should delete the deposits\", async () => {\n        const preDepositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const preDepositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(preDepositOne.depositor).to.not.eq(ADDRESS_ZERO);\n        expect(preDepositTwo.depositor).to.not.eq(ADDRESS_ZERO);\n\n        await subject();\n\n        const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n        expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n      });\n\n      it(\"should remove the deposits from the depositors account info\", async () => {\n        const preAccountInfo = await ramp.getAccountInfo(subjectCaller.address);\n        expect(preAccountInfo.deposits[0]).to.eq(subjectDepositIds[0]);\n        expect(preAccountInfo.deposits[1]).to.eq(subjectDepositIds[1]);\n\n        await subject();\n\n        const accountInfo = await ramp.getAccountInfo(subjectCaller.address);\n\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[0]);\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n      });\n\n      it(\"should emit a DepositWithdrawn event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[0],\n          offRamper.address,\n          usdc(100),\n        );\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[1],\n          offRamper.address,\n          usdc(50),\n        );\n      });\n\n      it(\"should emit DepositClosed events for both deposits\", async () => {\n        const tx = await subject();\n\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n      });\n\n      describe(\"when there is an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(onRamper.wallet).signalIntent(subjectDepositIds[0], usdc(50), receiver.address);\n        });\n\n        it(\"should transfer the correct amount of usdc to the caller\", async () => {\n          const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n          await subject();\n\n          const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n          expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(100)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(100)));\n        });\n\n        it(\"should zero out remainingDeposits on depositOne\", async () => {\n          await subject();\n\n          const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n\n          expect(depositOne.depositor).to.not.eq(ZERO_BYTES32);\n          expect(depositOne.intentHashes.length).to.eq(1);\n          expect(depositOne.remainingDeposits).to.eq(ZERO);\n          expect(depositOne.outstandingIntentAmount).to.eq(usdc(50));\n        });\n\n        it(\"should delete deposit two from deposits and account info\", async () => {\n          await subject();\n\n          const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n\n          expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n          expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n        });\n\n        it(\"should emit a DepositClosed event for deposit two\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        });\n\n        describe(\"but the intent is expired\", async () => {\n          beforeEach(async () => {\n            await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n          });\n\n          it(\"should transfer the correct amount of usdc to the caller\", async () => {\n            const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n            await subject();\n\n            const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n            expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n            expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n          });\n\n          it(\"should delete both deposits\", async () => {\n            await subject();\n\n            const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n            const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n            expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n            expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n          });\n\n          it(\"should delete the intent\", async () => {\n            const intentHash = (await ramp.getDeposit(subjectDepositIds[0])).intentHashes[0];\n\n            const preIntent = await ramp.intents(intentHash);\n            expect(preIntent.amount).to.eq(usdc(50));\n\n            await subject();\n\n            const postIntent = await ramp.intents(intentHash);\n\n            expect(postIntent.onRamper).to.eq(ADDRESS_ZERO);\n            expect(postIntent.deposit).to.eq(ZERO_BYTES32);\n            expect(postIntent.amount).to.eq(ZERO);\n            expect(postIntent.intentTimestamp).to.eq(ZERO);\n          });\n        });\n      });\n\n      describe(\"when the caller is not the offRamper\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#addAccountToDenylist\", async () => {\n      let subjectDeniedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectDeniedUser = await calculateUpiIdHash(\"22\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).addAccountToDenylist(subjectDeniedUser);\n      }\n\n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectDeniedUser);\n\n        expect(deniedUsers).to.include(subjectDeniedUser);\n        expect(isDenied).to.be.true;\n      });\n\n      it(\"should emit a UserAddedToDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserAddedToDenylist\").withArgs(\n          await calculateUpiIdHash(\"21\"),\n          await calculateUpiIdHash(\"22\")\n        );\n      });\n\n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#removeAccountFromDenylist\", async () => {\n      let subjectApprovedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).addAccountToDenylist(await calculateUpiIdHash(\"22\"));\n\n        subjectApprovedUser = await calculateUpiIdHash(\"22\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).removeAccountFromDenylist(subjectApprovedUser);\n      }\n\n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preDeniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n\n        expect(preDeniedUsers).to.include(subjectApprovedUser);\n\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectApprovedUser);\n\n        expect(deniedUsers).to.not.include(subjectApprovedUser);\n        expect(isDenied).to.be.false;\n      });\n\n      it(\"should emit a UserRemovedFromDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserRemovedFromDenylist\").withArgs(\n          await calculateUpiIdHash(\"21\"),\n          await calculateUpiIdHash(\"22\")\n        );\n      });\n\n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#setMinDepositAmount\", async () => {\n      let subjectMinDepositAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMinDepositAmount = usdc(10);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMinDepositAmount(subjectMinDepositAmount);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const depositAmount = await ramp.minDepositAmount();\n\n        expect(depositAmount).to.eq(subjectMinDepositAmount);\n      });\n\n      it(\"should emit a MinDepositAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MinDepositAmountSet\").withArgs(subjectMinDepositAmount);\n      });\n\n      describe(\"when the min deposit amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMinDepositAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Minimum deposit cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setMaxOnRampAmount\", async () => {\n      let subjectMaxOnRampAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMaxOnRampAmount = usdc(998);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMaxOnRampAmount(subjectMaxOnRampAmount);\n      }\n\n      it(\"should set the correct max on ramp amount\", async () => {\n        const preMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(preMaxOnRampAmount).to.eq(usdc(999));\n\n        await subject();\n\n        const postMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(postMaxOnRampAmount).to.eq(subjectMaxOnRampAmount);\n      });\n\n      it(\"should emit a MaxOnRampAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MaxOnRampAmountSet\").withArgs(subjectMaxOnRampAmount);\n      });\n\n      describe(\"when the max amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMaxOnRampAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max on ramp amount cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setIntentExpirationPeriod\", async () => {\n      let subjectIntentExpirationPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectIntentExpirationPeriod = ONE_DAY_IN_SECONDS.mul(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setIntentExpirationPeriod(subjectIntentExpirationPeriod);\n      }\n\n      it(\"should set the correct expiration time period\", async () => {\n        const preOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectIntentExpirationPeriod);\n      });\n\n      it(\"should emit a IntentExpirationPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"IntentExpirationPeriodSet\").withArgs(subjectIntentExpirationPeriod);\n      });\n\n      describe(\"when the intent expiration period is 0\", async () => {\n        beforeEach(async () => {\n          subjectIntentExpirationPeriod = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max intent expiration period cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setOnRampCooldownPeriod\", async () => {\n      let subjectOnRampCoolDownPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectOnRampCoolDownPeriod = ONE_DAY_IN_SECONDS.div(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setOnRampCooldownPeriod(subjectOnRampCoolDownPeriod);\n      }\n\n      it(\"should set the correct cool down time period\", async () => {\n        const preOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectOnRampCoolDownPeriod);\n      });\n\n      it(\"should emit a OnRampCooldownPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"OnRampCooldownPeriodSet\").withArgs(subjectOnRampCoolDownPeriod);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFee\", async () => {\n      let subjectSustainabilityFee: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFee = ether(.002);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFee(subjectSustainabilityFee);\n      }\n\n      it(\"should set the correct sustainability fee\", async () => {\n        const preSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(preSustainabilityFee).to.eq(ZERO);\n\n        await subject();\n\n        const postSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(postSustainabilityFee).to.eq(subjectSustainabilityFee);\n      });\n\n      it(\"should emit a SustainabilityFeeUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeUpdated\").withArgs(subjectSustainabilityFee);\n      });\n\n      describe(\"when the fee exceeds the max sustainability fee\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFee = ether(.1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee cannot be greater than max fee\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFeeRecipient\", async () => {\n      let subjectSustainabilityFeeRecipient: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFeeRecipient = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFeeRecipient(subjectSustainabilityFeeRecipient);\n      }\n\n      it(\"should set the correct sustainability fee recipient\", async () => {\n        const preSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(preSustainabilityFeeRecipient).to.eq(feeRecipient.address);\n\n        await subject();\n\n        const postSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(postSustainabilityFeeRecipient).to.eq(subjectSustainabilityFeeRecipient);\n      });\n\n      it(\"should emit a SustainabilityFeeRecipientUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeRecipientUpdated\").withArgs(subjectSustainabilityFeeRecipient);\n      });\n\n      describe(\"when the passed fee recipient is the zero address\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFeeRecipient = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee recipient cannot be zero address\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSendProcessor\", async () => {\n      let subjectSendProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSendProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSendProcessor(subjectSendProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newSendProcessor = await ramp.sendProcessor();\n\n        expect(newSendProcessor).to.eq(subjectSendProcessor);\n      });\n\n      it(\"should emit a NewSendProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewSendProcessorSet\").withArgs(subjectSendProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setRegistrationProcessor\", async () => {\n      let subjectRegistrationProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectRegistrationProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setRegistrationProcessor(subjectRegistrationProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newRegistrationProcessor = await ramp.registrationProcessor();\n\n        expect(newRegistrationProcessor).to.eq(subjectRegistrationProcessor);\n      });\n\n      it(\"should emit a NewRegistrationProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewRegistrationProcessorSet\").withArgs(subjectRegistrationProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#getAccountDeposits\", async () => {\n      let subjectAccount: Address;\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountDeposits(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].depositorIdHash).to.eq(await calculateUpiIdHash(\"21\"));\n        expect(deposits[1].depositorIdHash).to.eq(await calculateUpiIdHash(\"21\"));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getDepositFromIds\", async () => {\n      let subjectDepositIds: BigNumber[];\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateUpiIdHash(\"22\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectDepositIds = [ZERO, ONE];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getDepositFromIds(subjectDepositIds);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n        expect(deposits[0].depositorIdHash).to.eq(await calculateUpiIdHash(\"21\"));\n        expect(deposits[1].depositorIdHash).to.eq(await calculateUpiIdHash(\"21\"));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getIntentsWithOnRamperId\", async () => {\n      let subjectIntentHashes: string[];\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedUPIId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        const intentHashOne = calculateIntentHash(await calculateUpiIdHash(\"22\"), ZERO, await blockchain.getCurrentTimestamp());\n        await ramp.connect(onRamperTwo.wallet).signalIntent(ZERO, usdc(40), receiver.address);\n        const intentHashTwo = calculateIntentHash(await calculateUpiIdHash(\"23\"), ZERO, await blockchain.getCurrentTimestamp());\n\n        subjectIntentHashes = [intentHashOne, intentHashTwo];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIntentsWithOnRamperId(subjectIntentHashes);\n      }\n\n      it(\"should return the expected intents\", async () => {\n        const intents = await subject();\n\n        expect(intents[0].intent.onRamper).to.eq(onRamper.address);\n        expect(intents[1].intent.onRamper).to.eq(onRamperTwo.address);\n        expect(intents[0].intent.deposit).to.eq(ZERO);\n        expect(intents[1].intent.deposit).to.eq(ZERO);\n        expect(intents[0].intent.amount).to.eq(usdc(50));\n        expect(intents[1].intent.amount).to.eq(usdc(40));\n        expect(intents[0].onRamperIdHash).to.eq(await calculateUpiIdHash(\"22\"));\n        expect(intents[1].onRamperIdHash).to.eq(await calculateUpiIdHash(\"23\"));\n        expect(intents[0].intentHash).to.eq(subjectIntentHashes[0]);\n        expect(intents[1].intentHash).to.eq(subjectIntentHashes[1]);\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/hdfc/hdfcRegistrationProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapterV2, NullifierRegistry, HDFCRegistrationProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address } from \"@utils/types\";\nimport { createTypedRegistrationProof } from \"@utils/protocolUtils\";\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\nconst rawSignals = [\"0x23421f99fa0b530a42c1d1cd7c7b45e09cf4a02963646248bee3ec4aee13c214\",\"0x0000000000000000000000000000000000000000000000000040737472656c61\",\"0x000000000000000000000000000000000000000000000000006e616263666468\",\"0x00000000000000000000000000000000000000000000000000000074656e2e6b\",\"0x0002a3827adea74b0defe9e16af6f08534e7ab564151c404f52078194b90f417\"];\n\ndescribe(\"HDFCRegistrationProcessor\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n  let nullifierRegistry: NullifierRegistry;\n  let registrationProcessor: HDFCRegistrationProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([rawSignals[0]]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    registrationProcessor = await deployer.deployHDFCRegistrationProcessor(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      \"alerts@hdfcbank.net\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(registrationProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await registrationProcessor.ramp();\n      const venmoMailserverKeyHashAdapter = await registrationProcessor.mailServerKeyHashAdapter();\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoMailserverKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"alerts@hdfcbank.net\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: any;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = createTypedRegistrationProof(\n        [\"0x00b0fabc618b5a3b1b2171e534e4295b83c558f1e83781ee6f86b83b7726a661\", \"0x0906ef5ef5f59c3e5d606d65782b3c42a1078fdfb4ffb11da17068ba43ab3e3d\"],\n        [[\"0x1aab98c4cb5f5d14d1bde30793ec8a38ae0ce11420abee1d32621734e83ee64e\", \"0x1d7dc792dba63825ed689c10379beef2eaba600df35c9316dec5b2e7f1957723\"],[\"0x0a13f13b6914ffdfdaa059fc5044cb91b408d32017aac88d42dc346d1f926628\", \"0x305f41aa33d988b560c5f86bb737d289684c90491768bd0e06513928a5106c60\"]],\n        [\"0x0ec9fa56aefd5203ea55a37192fe76afe05cba13cfcaa2d427fe9a98aa2dedf8\", \"0x25729689ee80ea308c4f6653ccd3cc57a98a76c8b71d717aeb0e961fd5732644\"],\n        rawSignals\n      );\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const onRamperIdHash = await subjectCallStatic();\n\n      expect(onRamperIdHash).to.eq(subjectProof.signals[4]);\n    });\n\n    it(\"should add the hash of the proof inputs to the nullifier registry\", async () => {\n      await subject();\n\n      const expectedNullifier = ethers.utils.keccak256(\n        abiCoder.encode(\n          [\"tuple(uint256[2],uint256[2][2],uint256[2],uint256[5])\"],\n          [[subjectProof.a, subjectProof.b, subjectProof.c, subjectProof.signals]]\n        )\n      );\n      const isNullified = await nullifierRegistry.isNullified(expectedNullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the email has been used previously\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await registrationProcessor.setEmailFromAddress(\"bad-alerts@hdfcbank.net\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.removeMailServerKeyHash(rawSignals[0]);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await registrationProcessor.mailServerKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-alerts@hdfcbank.net\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-alerts@hdfcbank.net\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await registrationProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/hdfc/hdfcSendProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapterV2, NullifierRegistry, HDFCSendProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\nimport { GrothProof } from \"@utils/types\";\nimport { createTypedSendProof } from \"@utils/protocolUtils\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { usdc } from \"@utils/common\";\n\nconst expect = getWaffleExpect();\n\nconst rawSignals = [\"0x23421f99fa0b530a42c1d1cd7c7b45e09cf4a02963646248bee3ec4aee13c214\",\"0x0000000000000000000000000000000000000000000000000040737472656c61\",\"0x000000000000000000000000000000000000000000000000006e616263666468\",\"0x00000000000000000000000000000000000000000000000000000074656e2e6b\",\"0x000000000000000000000000000000000000000000000000000030302e303338\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x000000000000000000000000000000000000000000000000003631202c657554\",\"0x000000000000000000000000000000000000000000000000003032206e614a20\",\"0x00000000000000000000000000000000000000000000000000313a3331203432\",\"0x00000000000000000000000000000000000000000000000000302b2032333a38\",\"0x0000000000000000000000000000000000000000000000000000000000303335\",\"0x0002a3827adea74b0defe9e16af6f08534e7ab564151c404f52078194b90f417\",\"0x1711f5c70f1463f680457554c514be7bdf425b6009c7c4aff7e383166146d992\",\"0x1729abebef53c559452587dc1892a16123888738b0ddfaa54d357053949d07b2\",\"0x0000000000000000000000000000000000000000000000000000000000003039\"];\n\ndescribe(\"HDFCSendProcessor\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n  let nullifierRegistry: NullifierRegistry;\n  let sendProcessor: HDFCSendProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([rawSignals[0]]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    sendProcessor = await deployer.deployHDFCSendProcessor(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      \"alerts@hdfcbank.net\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(sendProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await sendProcessor.ramp();\n      const venmoKeyHashAdapter = await sendProcessor.mailServerKeyHashAdapter();\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"alerts@hdfcbank.net\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: GrothProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = createTypedSendProof(\n        [\"0x2c6e3b7f5c828d08e0b96e9f94d1b535e7881fa970a504ecdbfc94fd1b25c26c\", \"0x157f2c5492f6e0faea312c7e2f93429d403c1922c6a9fb7e05d494910a01a865\"],\n        [[\"0x1db4c96b9be91a44fdd4bfece966a239ae5bf2da548b33f8d6603050ad000fb5\", \"0x210bafe21d8f058bef28e65dbfa534ca49918f4898dd301dbe4fde1115f18149\"],[\"0x15a9ba09ba6e3e75197011192f3a96e5f13586c17646be29064fa280217c395e\", \"0x08bba5726b82733712653e1e7b51644c369fcf68932cc52494c94efbd6e6c49e\"]],\n        [\"0x0540cf599c77ad45211e09fe2ee872d177775bcdf814b0b19e24e85cdba91bc1\", \"0x076b40ce420590cfe5d2111230189725856b68ef5d17a993af573523a32a0228\"],\n        rawSignals\n      );\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const {\n        amount,\n        timestamp,\n        offRamperIdHash,\n        onRamperIdHash,\n        intentHash\n      } = await subjectCallStatic();\n\n      expect(amount).to.eq(usdc(830));\n      expect(timestamp).to.eq(BigNumber.from(1705391312).add(30));  // 30s is default timestamp buffer);\n      expect(offRamperIdHash).to.eq(rawSignals[12]);\n      expect(onRamperIdHash).to.eq(rawSignals[11]);\n      expect(intentHash).to.eq(rawSignals[14]);\n    });\n\n    it(\"should add the email to the nullifier mapping\", async () => {\n      await subject();\n\n      const isNullified = await nullifierRegistry.isNullified(subjectProof.signals[13].toHexString());\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await sendProcessor.setEmailFromAddress(\"bad-venmo@venmo.com\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.removeMailServerKeyHash(rawSignals[0]);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the e-mail was used previously\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await sendProcessor.mailServerKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-venmo@venmo.com\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-venmo@venmo.com\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await sendProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/hdfc/hdfcTimestampParsing.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { Account } from \"@utils/test/types\";\nimport { HDFCTimestampParsingMock } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { BigNumber } from \"ethers\";\nimport { ONE, ZERO } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\ndescribe(\"HDFCTimestampParsing\", () => {\n  let owner: Account;\n\n  let timestampParsingMock: HDFCTimestampParsingMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    timestampParsingMock = await deployer.deployHDFCTimestampParsingMock();\n  });\n\n  describe(\"#dateStringToTimestamp\", async () => {\n    let subjectDateString: string;\n\n    beforeEach(async () => {\n      subjectDateString = \"Wed, 17 Jan 2024 08:58:01 +0530\";\n    });\n\n    async function subject(): Promise<any> {\n      return await timestampParsingMock.dateStringToTimestamp(subjectDateString);\n    }\n\n    it(\"should return the correct value\", async () => {\n      const output = await subject();\n\n      // 1705481881 - 19800\n      expect(output).to.equal(BigNumber.from(1705462081));\n    });\n\n    describe(\"when the passed in date string has too many extracted strings\", async () => {\n      beforeEach(async () => {\n        subjectDateString = \"Wed, 17 Jan 2024 08:58:01 +0530 5\"\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Panic\");\n      });\n    });\n\n    describe(\"when the passed in date string does not have enough extracted strings\", async () => {\n      beforeEach(async () => {\n        subjectDateString = \"Wed, 17 Jan 2024 08:58:01\"\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid date string\");\n      });\n    });\n  });\n\n  describe(\"#calculateTimestampWithOffset\", async () => {\n    let subjectUnOffsetTimestamp: BigNumber;\n    let subjectTimeOffsetString: string;\n\n    beforeEach(async () => {\n      subjectUnOffsetTimestamp = BigNumber.from(1705481881);\n      subjectTimeOffsetString = \"+0530\";\n    });\n\n    async function subject(): Promise<any> {\n      return await timestampParsingMock._calculateTimestampWithOffset(subjectUnOffsetTimestamp, subjectTimeOffsetString);\n    }\n\n    it(\"should return the correct value\", async () => {\n      const output = await subject();\n\n      expect(output).to.equal(BigNumber.from(1705462081));\n    });\n\n    describe(\"when the passed offset string does not start with a +\", async () => {\n      beforeEach(async () => {\n        subjectTimeOffsetString = \"-0530\";\n      });\n\n      it(\"should calculate the correct timestamp with offset\", async () => {\n        const output = await subject();\n\n        expect(output).to.equal(BigNumber.from(1705501681));\n      });\n    });\n\n    describe(\"when the passed offset string is malformed\", async () => {\n      beforeEach(async () => {\n        subjectTimeOffsetString = \"+05300\";\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid timezone offset\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/revolut/revolutAccountRegistrationProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { NullifierRegistry, RevolutAccountRegistrationProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address, RevolutRegistrationData, RevolutRegistrationProof } from \"@utils/types\";\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\ndescribe(\"RevolutAccountRegistrationProcessor\", () => {\n  let owner: Account;\n  let verifier: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let nullifierRegistry: NullifierRegistry;\n  let registrationProcessor: RevolutAccountRegistrationProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      verifier,\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n\n    registrationProcessor = await deployer.deployRevolutAccountRegistrationProcessor(\n      ramp.address,\n      \"0x166338393593e85bfde8B65358Ec5801A3445D12\",\n      BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),\n      nullifierRegistry.address,\n      \"GET https://app.revolut.com/api/retail/user/current\",\n      \"app.revolut.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(registrationProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await registrationProcessor.ramp();\n      const nullifierRegistryAddress = await registrationProcessor.nullifierRegistry();\n      const actualVerifier = await registrationProcessor.verifierSigningKey();\n      const actualEndpoint = await registrationProcessor.endpoint();\n      const actualHost = await registrationProcessor.host();\n      const actualNotaryKeyHash = await registrationProcessor.notaryKeyHash();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(nullifierRegistryAddress).to.eq(nullifierRegistry.address);\n      expect(actualNotaryKeyHash).to.eq(BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\").toHexString(),);\n      expect(\"GET https://app.revolut.com/api/retail/user/current\").to.deep.equal(actualEndpoint);\n      expect(\"0x166338393593e85bfde8B65358Ec5801A3445D12\").to.deep.equal(actualVerifier);\n      expect(\"app.revolut.com\").to.deep.equal(actualHost);\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: RevolutRegistrationProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = {\n        public_values: {\n          endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n          host: \"app.revolut.com\",\n          profileId: \"21441300878620834626555326528464320548303703202526115662730864900894611908769\",\n          userAddress: \"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\",\n          notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\")\n        } as RevolutRegistrationData,\n        proof: \"0x0517fbc6fc6738b6ad1c0c638f635f4ad4e01616b92bb87b102fe9000c5b58f27eda7bf373636af301fbfaaf3b6f267d82ca0ec8b089cbd4d42159e1a957cdc11b\"\n      } as RevolutRegistrationProof;\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const onRamperId = await subjectCallStatic();\n\n      expect(onRamperId).to.eq(BigNumber.from(subjectProof.public_values.profileId).toHexString());\n    });\n\n    it(\"should add the hash of the proof inputs to the nullifier registry\", async () => {\n      await subject();\n\n      const expectedNullifier = ethers.utils.keccak256(\n        abiCoder.encode(\n          [\"address\", \"string\"],\n          [subjectProof.public_values.userAddress, subjectProof.public_values.profileId]\n        )\n      );\n\n      const isNullified = await nullifierRegistry.isNullified(expectedNullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the profile has already been verified\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.profileId = \"55990530848032332592411724135893856847123084097520685404734279999550883729893\";\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid proof\");\n      });\n    });\n\n    describe(\"when the notary key hash doesn't match\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.notaryKeyHash = BigNumber.from(\"55990530848032332592411724135893856847123084097520685404734279999550883729893\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid notary key hash\");\n      });\n    });\n\n    describe(\"when the TLS proof is for a different endpoint\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.endpoint = \"GET https://app.revolut.com/api/business/user/current\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"address\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.profileId,\n            subjectProof.public_values.userAddress,\n            subjectProof.public_values.notaryKeyHash\n          ]\n        );\n\n        await registrationProcessor.connect(owner.wallet).setVerifierSigningKey(verifier.address);\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Endpoint does not match expected\");\n      });\n    });\n\n    describe(\"when the host doesn't match\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.host = \"api.revolut.com\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"address\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.profileId,\n            subjectProof.public_values.userAddress,\n            subjectProof.public_values.notaryKeyHash\n          ]\n        );\n\n        await registrationProcessor.connect(owner.wallet).setVerifierSigningKey(verifier.address);\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Host does not match expected\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setVerifierSigningKey\", async () => {\n    let subjectVerifierSigningKey: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVerifierSigningKey = \"0x166338393593e85bfde8B65358Ec5801A3445D12\";\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setVerifierSigningKey(subjectVerifierSigningKey);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const actualVerifier = await registrationProcessor.verifierSigningKey();\n\n      expect(actualVerifier).to.equal(subjectVerifierSigningKey);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await registrationProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/revolut/revolutAccountRegistry.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { BigNumber } from \"ethers\";\nimport {\n  Address,\n  RevolutRegistrationData,\n  RevolutRegistrationProof,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  RevolutAccountRegistry,\n  USDCMock,\n  RevolutAccountRegistrationProcessorMock,\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { usdc } from \"@utils/common\";\nimport { calculateRevolutIdHash, calculateRevolutIdHashBN } from \"@utils/protocolUtils\";\n\nconst expect = getWaffleExpect();\n\ndescribe(\"RevolutAccountRegistry\", () => {\n  let owner: Account;\n  let offRamper: Account;\n  let onRamper: Account;\n  let unregisteredUser: Account;\n\n  let accountRegistry: RevolutAccountRegistry;\n  let usdcToken: USDCMock;\n  let accountRegistrationProcessor: RevolutAccountRegistrationProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      offRamper,\n      onRamper,\n      unregisteredUser,\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n    accountRegistrationProcessor = await deployer.deployRevolutAccountRegistrationProcessorMock();\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    accountRegistry = await deployer.deployRevolutAccountRegistry(\n      owner.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await accountRegistry.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectAccountRegistrationProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectAccountRegistrationProcessor = accountRegistrationProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return accountRegistry.connect(subjectCaller.wallet).initialize(\n        subjectAccountRegistrationProcessor,\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const accountRegistrationProcessorAddress: Address = await accountRegistry.accountRegistrationProcessor();\n\n      expect(accountRegistrationProcessorAddress).to.eq(accountRegistrationProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = offRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#register\", async () => {\n    let subjectProof: RevolutRegistrationProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await accountRegistry.initialize(\n        accountRegistrationProcessor.address\n      );\n\n      const registerPublicValues = {\n        endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n        host: \"app.revolut.com\",\n        profileId: calculateRevolutIdHashBN(\"johndo8egm\"),\n        userAddress: offRamper.address,\n        notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\")\n      } as RevolutRegistrationData\n\n      subjectProof = {\n        public_values: registerPublicValues,\n        proof: \"0x\"\n      } as RevolutRegistrationProof;\n\n      subjectCaller = offRamper;\n    });\n\n    async function subject(): Promise<any> {\n      return accountRegistry.connect(subjectCaller.wallet).register(subjectProof);\n    }\n\n    it(\"should register the caller\", async () => {\n      await subject();\n      const accountId = await accountRegistry.getAccountId(subjectCaller.address);\n\n      expect(accountId).to.eq(BigNumber.from(subjectProof.public_values.profileId).toHexString());\n    });\n\n    it(\"should emit an AccountRegistered event\", async () => {\n      await expect(subject()).to.emit(accountRegistry, \"AccountRegistered\").withArgs(\n        subjectCaller.address,\n        BigNumber.from(subjectProof.public_values.profileId).toHexString(),\n      );\n    });\n\n    describe(\"when the caller is not the address signed by verifier\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.userAddress = onRamper.address;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Caller must be address specified in proof\");\n      });\n    });\n\n    describe(\"when the caller is already registered\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectProof.public_values.profileId = calculateRevolutIdHashBN(\"405394441\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Account already associated with accountId\");\n      });\n    });\n  });\n\n  context(\"when the user is registered\", async () => {\n    let offRamperProof: RevolutRegistrationProof;\n    let onRamperProof: RevolutRegistrationProof;\n\n    beforeEach(async () => {\n      await accountRegistry.initialize(\n        accountRegistrationProcessor.address\n      );\n\n      const standardRegistrationData: RevolutRegistrationData = {\n        endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n        host: \"app.revolut.com\",\n        profileId: \"\",\n        userAddress: \"\",\n        notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\")\n      }\n      offRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      offRamperProof.public_values.profileId = calculateRevolutIdHashBN(\"012345678\");\n      offRamperProof.public_values.userAddress = offRamper.address;\n      onRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      onRamperProof.public_values.profileId = calculateRevolutIdHashBN(\"123456789\");\n      onRamperProof.public_values.userAddress = onRamper.address;\n\n      await accountRegistry.connect(offRamper.wallet).register(offRamperProof);\n    });\n  \n    describe(\"#addAccountToDenylist\", async () => {\n      let subjectDeniedUser: string;\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        subjectDeniedUser = BigNumber.from(onRamperProof.public_values.profileId).toHexString();\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).addAccountToDenylist(subjectDeniedUser);\n      }\n  \n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n  \n        const deniedUsers = await accountRegistry.getDeniedUsers(subjectCaller.address);\n        const isDenied = await accountRegistry.isDeniedUser(subjectCaller.address, subjectDeniedUser);\n  \n        expect(deniedUsers).to.include(subjectDeniedUser);\n        expect(isDenied).to.be.true;\n      });\n  \n      it(\"should emit a UserAddedToDenylist event\", async () => {\n        const tx = await subject();\n  \n        await expect(tx).to.emit(accountRegistry, \"UserAddedToDenylist\").withArgs(\n          BigNumber.from(offRamperProof.public_values.profileId).toHexString(),\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString()\n        );\n      });\n  \n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on denylist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n  \n    describe(\"#removeAccountFromDenylist\", async () => {\n      let subjectApprovedUser: string;\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        await accountRegistry.connect(offRamper.wallet).addAccountToDenylist(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString()\n        );\n  \n        subjectApprovedUser = BigNumber.from(onRamperProof.public_values.profileId).toHexString();\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).removeAccountFromDenylist(subjectApprovedUser);\n      }\n  \n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preDeniedUsers = await accountRegistry.getDeniedUsers(subjectCaller.address);\n  \n        expect(preDeniedUsers).to.include(subjectApprovedUser);\n  \n        await subject();\n  \n        const deniedUsers = await accountRegistry.getDeniedUsers(subjectCaller.address);\n        const isDenied = await accountRegistry.isDeniedUser(subjectCaller.address, subjectApprovedUser);\n  \n        expect(deniedUsers).to.not.include(subjectApprovedUser);\n        expect(isDenied).to.be.false;\n      });\n  \n      it(\"should emit a UserRemovedFromDenylist event\", async () => {\n        const tx = await subject();\n  \n        expect(tx).to.emit(accountRegistry, \"UserRemovedFromDenylist\").withArgs(\n          BigNumber.from(offRamperProof.public_values.profileId).toHexString(),\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString()\n        );\n      });\n  \n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on denylist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#enableAllowlist\", async () => {\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).enableAllowlist();\n      }\n  \n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n  \n        const isEnabled = await accountRegistry.isAllowlistEnabled(subjectCaller.address);\n  \n        expect(isEnabled).to.be.true;\n      });\n  \n      it(\"should emit a AllowlistEnabled event\", async () => {\n        const tx = await subject();\n        \n        const allowingId = await accountRegistry.getAccountId(subjectCaller.address);\n\n        expect(tx).to.emit(accountRegistry, \"AllowlistEnabled\").withArgs(allowingId);\n      });\n  \n      describe(\"when the allow list is already enabled\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Allow list already enabled\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#addAccountsToAllowlist\", async () => {\n      let subjectAllowedUsers: string[];\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        await accountRegistry.connect(offRamper.wallet).enableAllowlist();\n\n        subjectAllowedUsers = [\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          calculateRevolutIdHash(\"1111111\")\n        ];\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).addAccountsToAllowlist(subjectAllowedUsers);\n      }\n  \n      it(\"should add the allowed user to the allower's array and update mapping\", async () => {\n        await subject();\n  \n        const allowedUsers = await accountRegistry.getAllowedUsers(subjectCaller.address);\n        const isAllowedOne = await accountRegistry.isAllowedUser(subjectCaller.address, subjectAllowedUsers[0]);\n        const isAllowedTwo = await accountRegistry.isAllowedUser(subjectCaller.address, subjectAllowedUsers[1]);\n  \n        expect(allowedUsers).to.include(subjectAllowedUsers[0]);\n        expect(allowedUsers).to.include(subjectAllowedUsers[1]);\n        expect(isAllowedOne).to.be.true;\n        expect(isAllowedTwo).to.be.true;\n      });\n  \n      it(\"should emit a UserAddedToAllowlist event\", async () => {\n        const tx = await subject();\n  \n        expect(tx).to.emit(accountRegistry, \"UserAddedToAllowlist\").withArgs(\n          BigNumber.from(offRamperProof.public_values.profileId).toHexString(),\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString()\n        );\n\n        expect(tx).to.emit(accountRegistry, \"UserAddedToAllowlist\").withArgs(\n          BigNumber.from(offRamperProof.public_values.profileId).toHexString(),\n          calculateRevolutIdHash(\"1111111\")\n        );\n      });\n  \n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on allowlist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#removeAccountsFromAllowlist\", async () => {\n      let subjectRemovedUsers: string[];\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        await accountRegistry.connect(offRamper.wallet).enableAllowlist();\n\n        await accountRegistry.connect(offRamper.wallet).addAccountsToAllowlist(\n          [BigNumber.from(onRamperProof.public_values.profileId).toHexString(), calculateRevolutIdHash(\"1111111\")]\n        );\n  \n        subjectRemovedUsers = [BigNumber.from(onRamperProof.public_values.profileId).toHexString(), calculateRevolutIdHash(\"1111111\")];\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).removeAccountsFromAllowlist(subjectRemovedUsers);\n      }\n  \n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preAllowedUsers = await accountRegistry.getAllowedUsers(subjectCaller.address);\n  \n        expect(preAllowedUsers).to.include(subjectRemovedUsers[0]);\n        expect(preAllowedUsers).to.include(subjectRemovedUsers[1]);\n  \n        await subject();\n  \n        const allowedUsers = await accountRegistry.getAllowedUsers(subjectCaller.address);\n        const isAllowedOne = await accountRegistry.isAllowedUser(subjectCaller.address, subjectRemovedUsers[0]);\n        const isAllowedTwo = await accountRegistry.isAllowedUser(subjectCaller.address, subjectRemovedUsers[1]);\n\n        expect(allowedUsers).to.not.include(subjectRemovedUsers[0]);\n        expect(allowedUsers).to.not.include(subjectRemovedUsers[1]);\n        expect(isAllowedOne).to.be.false;\n        expect(isAllowedTwo).to.be.false;\n      });\n  \n      it(\"should emit a UserRemovedFromAllowlist event\", async () => {\n        const tx = await subject();\n  \n        await expect(tx).to.emit(accountRegistry, \"UserRemovedFromAllowlist\").withArgs(\n          BigNumber.from(offRamperProof.public_values.profileId).toHexString(),\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString()\n        );\n\n        await expect(tx).to.emit(accountRegistry, \"UserRemovedFromAllowlist\").withArgs(\n          BigNumber.from(offRamperProof.public_values.profileId).toHexString(),\n          calculateRevolutIdHash(\"1111111\")\n        );\n      });\n  \n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on allowlist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#isAllowedUser\", async () => {\n      let subjectAccount: Address;\n      let subjectAllowedUser: string;\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {  \n        subjectAccount = offRamper.address;\n        subjectAllowedUser = BigNumber.from(onRamperProof.public_values.profileId).toHexString();\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).isAllowedUser(subjectAccount, subjectAllowedUser);\n      }\n  \n      it(\"should allow the user since the allow list is not enabled and the user is not on the deny list\", async () => {  \n        const isAllowed = await subject();\n  \n        expect(isAllowed).to.be.true;\n      });\n\n      describe(\"when the allow list is enabled\", async () => {\n        beforeEach(async () => {\n          await accountRegistry.connect(offRamper.wallet).enableAllowlist();\n        });\n\n        it(\"should return false because the user hasn't been added to the allow list\", async () => {\n          const isAllowed = await subject();\n\n          expect(isAllowed).to.be.false;\n        });\n\n        describe(\"when the user is on the allow list\", async () => {\n          beforeEach(async () => {\n            await accountRegistry.connect(offRamper.wallet).addAccountsToAllowlist([subjectAllowedUser]);\n          });\n\n          it(\"should return true\", async () => {\n            const isAllowed = await subject();\n\n            expect(isAllowed).to.be.true;\n          });\n\n          describe(\"when the user is on the deny list\", async () => {\n            beforeEach(async () => {\n              await accountRegistry.connect(offRamper.wallet).addAccountToDenylist(subjectAllowedUser);\n            });\n\n            it(\"should return false\", async () => {\n              const isAllowed = await subject();\n\n              expect(isAllowed).to.be.false;\n            });\n          });\n        });\n      });\n    });\n  });\n\n  describe(\"#setAccountRegistrationProcessor\", async () => {\n    let subjectRegistrationProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectRegistrationProcessor = owner.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return accountRegistry.connect(subjectCaller.wallet).setAccountRegistrationProcessor(subjectRegistrationProcessor);\n    }\n\n    it(\"should set the correct account registration processor\", async () => {\n      await subject();\n\n      const newRegistrationProcessor = await accountRegistry.accountRegistrationProcessor();\n\n      expect(newRegistrationProcessor).to.eq(subjectRegistrationProcessor);\n    });\n\n    it(\"should emit a NewAccountRegistrationProcessorSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(accountRegistry, \"NewAccountRegistrationProcessorSet\").withArgs(subjectRegistrationProcessor);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = offRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/revolut/revolutRamp.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport {\n  Address,\n  RevolutRegistrationData,\n  RevolutRegistrationProof,\n  RevolutSendData,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  RevolutRamp,\n  USDCMock,\n  RevolutAccountRegistry,\n  RevolutSendProcessorMock\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Blockchain, ether, usdc } from \"@utils/common\";\nimport { BigNumber } from \"ethers\";\nimport { ZERO, ZERO_BYTES32, ADDRESS_ZERO, ONE } from \"@utils/constants\";\nimport { calculateIntentHash, calculateRevolutIdHash, calculateRevolutIdHashBN } from \"@utils/protocolUtils\";\nimport { ONE_DAY_IN_SECONDS } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\nconst blockchain = new Blockchain(ethers.provider);\n\ndescribe(\"RevolutRamp\", () => {\n  let owner: Account;\n  let verifier: Account;\n  let offRamper: Account;\n  let offRamperNewAcct: Account;\n  let onRamper: Account;\n  let onRamperOtherAddress: Account;\n  let onRamperTwo: Account;\n  let receiver: Account;\n  let maliciousOnRamper: Account;\n  let unregisteredUser: Account;\n  let feeRecipient: Account;\n\n  let ramp: RevolutRamp;\n  let usdcToken: USDCMock;\n  let accountRegistry: RevolutAccountRegistry;\n  let sendProcessor: RevolutSendProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      verifier,\n      offRamper,\n      onRamper,\n      onRamperOtherAddress,\n      onRamperTwo,\n      receiver,\n      maliciousOnRamper,\n      unregisteredUser,\n      offRamperNewAcct,\n      feeRecipient\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n\n    const accountRegistrationProcessor = await deployer.deployRevolutAccountRegistrationProcessorMock();\n    sendProcessor = await deployer.deployRevolutSendProcessorMock();\n\n    accountRegistry = await deployer.deployRevolutAccountRegistry(owner.address);\n    await accountRegistry.initialize(accountRegistrationProcessor.address);\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    ramp = await deployer.deployRevolutRamp(\n      owner.address,\n      usdcToken.address,\n      usdc(20),                          // $20 min deposit amount\n      usdc(999),\n      ONE_DAY_IN_SECONDS,\n      ONE_DAY_IN_SECONDS,                // On ramp cooldown period\n      ZERO,                              // Sustainability fee\n      feeRecipient.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await ramp.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n\n    it(\"should set the correct usdc\", async () => {\n      const usdcAddress: Address = await ramp.usdc();\n      expect(usdcAddress).to.eq(usdcToken.address);\n    });\n\n    it(\"should set the correct min deposit amount\", async () => {\n      const minDepositAmount: BigNumber = await ramp.minDepositAmount();\n      expect(minDepositAmount).to.eq(usdc(20));\n    });\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const maxOnRampAmount: BigNumber = await ramp.maxOnRampAmount();\n      expect(maxOnRampAmount).to.eq(usdc(999));\n    });\n\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await ramp.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectAccountRegistry: Address;\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectAccountRegistry = accountRegistry.address;\n      subjectSendProcessor = sendProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).initialize(\n        subjectAccountRegistry,\n        subjectSendProcessor\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const accountRegistrationProcessorAddress: Address = await ramp.accountRegistry();\n      const sendProcessorAddress: Address = await ramp.sendProcessor();\n\n      expect(accountRegistrationProcessorAddress).to.eq(accountRegistry.address);\n      expect(sendProcessorAddress).to.eq(sendProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  context(\"when the on and off ramper are registered\", async () => {\n    let offRamperProof: RevolutRegistrationProof;\n    let onRamperProof: RevolutRegistrationProof;\n    let onRamperTwoProof: RevolutRegistrationProof;\n    let maliciousOnRamperProof: RevolutRegistrationProof;\n\n    let offRamperMCAccountId: string;\n\n    beforeEach(async () => {\n      await ramp.initialize(\n        accountRegistry.address,\n        sendProcessor.address\n      );\n\n      const standardRegistrationData: RevolutRegistrationData = {\n        endpoint: \"GET https://app.revolut.com/api/retail/user/current\",\n        host: \"app.revolut.com\",\n        profileId: \"\",\n        userAddress: \"\",\n        notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\")\n      }\n\n      offRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      offRamperProof.public_values.profileId = calculateRevolutIdHashBN(\"johndo8egm\");\n      offRamperProof.public_values.userAddress = offRamper.address;\n      onRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      onRamperProof.public_values.profileId = calculateRevolutIdHashBN(\"janedo8egm\");\n      onRamperProof.public_values.userAddress = onRamper.address;\n      onRamperTwoProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      onRamperTwoProof.public_values.profileId = calculateRevolutIdHashBN(\"satonakegm\");\n      onRamperTwoProof.public_values.userAddress = onRamperTwo.address;\n      maliciousOnRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      maliciousOnRamperProof.public_values.profileId = calculateRevolutIdHashBN(\"janedo8egm\");\n      maliciousOnRamperProof.public_values.userAddress = maliciousOnRamper.address;\n\n      await accountRegistry.connect(offRamper.wallet).register(offRamperProof);\n      await accountRegistry.connect(onRamper.wallet).register(onRamperProof);\n      await accountRegistry.connect(onRamperTwo.wallet).register(onRamperTwoProof);\n      await accountRegistry.connect(maliciousOnRamper.wallet).register(maliciousOnRamperProof);\n\n      offRamperMCAccountId = \"402767982\";\n\n      await usdcToken.connect(offRamper.wallet).approve(ramp.address, usdc(10000));\n    });\n\n    describe(\"#offRamp\", async () => {\n      let subjectRevolutTag: string;\n      let subjectReceiveCurrencyId: string;\n      let subjectDepositAmount: BigNumber;\n      let subjectReceiveAmount: BigNumber;\n      let subjectVerifierSigningKey: Address;\n      let subjectNotaryKeyHash: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectRevolutTag = \"johndo8egm\";\n        subjectReceiveCurrencyId = ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]);\n        subjectDepositAmount = usdc(100);\n        subjectReceiveAmount = usdc(92);\n        subjectVerifierSigningKey = verifier.address;\n        subjectNotaryKeyHash = ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"]);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).offRamp(\n          subjectRevolutTag,\n          subjectReceiveCurrencyId,\n          subjectDepositAmount,\n          subjectReceiveAmount,\n          subjectVerifierSigningKey,\n          subjectNotaryKeyHash\n        );\n      }\n\n      it(\"should transfer the usdc to the Ramp contract\", async () => {\n        await subject();\n\n        const rampUsdcBalance = await usdcToken.balanceOf(ramp.address);\n        const offRamperUsdcBalance = await usdcToken.balanceOf(offRamper.address);\n        expect(rampUsdcBalance).to.eq(subjectDepositAmount);\n        expect(offRamperUsdcBalance).to.eq(usdc(9900));\n      });\n\n      it(\"should correctly update the deposits mapping with the correct key\", async () => {\n        await subject();\n\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        const deposit = await ramp.getDeposit(ZERO);\n\n        expect(deposit.depositor).to.eq(subjectCaller.address);\n        expect(deposit.revolutTag).to.eq(subjectRevolutTag);\n        expect(deposit.verifierSigningKey).to.eq(subjectVerifierSigningKey);\n        expect(deposit.notaryKeyHash).to.eq(subjectNotaryKeyHash);\n        expect(deposit.depositAmount).to.eq(subjectDepositAmount);\n        expect(deposit.remainingDeposits).to.eq(subjectDepositAmount);\n        expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposit.conversionRate).to.eq(conversionRate);\n      });\n\n      it(\"should increment the deposit counter correctly\", async () => {\n        await subject();\n\n        const depositCounter = await ramp.depositCounter();\n\n        expect(depositCounter).to.eq(ONE);\n      });\n\n      it(\"should emit a DepositReceived event\", async () => {\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        await expect(subject()).to.emit(ramp, \"DepositReceived\").withArgs(\n          ZERO,\n          calculateRevolutIdHash(\"johndo8egm\"),\n          subjectReceiveCurrencyId,\n          subjectDepositAmount,\n          conversionRate\n        );\n      });\n\n      describe(\"when the deposited amount is less than the minimum\", async () => {\n        beforeEach(async () => {\n          subjectDepositAmount = usdc(19.99);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit amount must be greater than min deposit amount\");\n        });\n      });\n\n      describe(\"when the depositor has reached their max amount of deposits\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectRevolutTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(102), subjectVerifierSigningKey, subjectNotaryKeyHash);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectRevolutTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(103), subjectVerifierSigningKey, subjectNotaryKeyHash);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectRevolutTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(104), subjectVerifierSigningKey, subjectNotaryKeyHash);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectRevolutTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(105), subjectVerifierSigningKey, subjectNotaryKeyHash);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectRevolutTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(106), subjectVerifierSigningKey, subjectNotaryKeyHash);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Maximum deposit amount reached\");\n        });\n      });\n\n      describe(\"when the passed revTag does not match the one encoded from registration\", async () => {\n        beforeEach(async () => {\n          subjectRevolutTag = \"johndo7egm\";\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Revolut tag must match id\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the receive amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectReceiveAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Receive amount must be greater than 0\");\n        });\n      });\n    });\n\n    describe(\"#signalIntent\", async () => {\n      let subjectDepositId: BigNumber;\n      let subjectAmount: BigNumber;\n      let subjectTo: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        subjectDepositId = ZERO;\n        subjectAmount = usdc(50);\n        subjectTo = receiver.address;\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).signalIntent(subjectDepositId, subjectAmount, subjectTo);\n      }\n\n      it(\"should create the correct entry in the intents mapping\", async () => {\n        await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          subjectDepositId,\n          currentTimestamp\n        );\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(subjectCaller.address);\n        expect(intent.to).to.eq(subjectTo);\n        expect(intent.deposit).to.eq(subjectDepositId);\n        expect(intent.amount).to.eq(subjectAmount);\n        expect(intent.intentTimestamp).to.eq(currentTimestamp);\n      });\n\n      it(\"should update the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n        await subject();\n\n        const intentHash = calculateIntentHash(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          subjectDepositId,\n          await blockchain.getCurrentTimestamp()\n        );\n\n        const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.add(subjectAmount));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(subjectAmount));\n        expect(postDeposit.intentHashes).to.include(intentHash);\n      });\n\n      it(\"should update the account's current intent hash\", async () => {\n        await subject();\n\n        const expectedIntentHash = calculateIntentHash(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          subjectDepositId,\n          await blockchain.getCurrentTimestamp()\n        );\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(expectedIntentHash).to.eq(intentHash);\n      });\n\n      it(\"should emit an IntentSignaled event\", async () => {\n        const txn = await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          subjectDepositId,\n          currentTimestamp\n        );\n\n        await expect(txn).to.emit(ramp, \"IntentSignaled\").withArgs(\n          intentHash,\n          subjectDepositId,\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          subjectTo,\n          subjectAmount,\n          currentTimestamp\n        );\n      });\n\n      describe(\"when there aren't enough deposits to cover requested amount but there are prunable intents\", async () => {\n        let timeJump: number;\n        let oldIntentHash: string;\n\n        before(async () => {\n          timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n        });\n\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          oldIntentHash = calculateIntentHash(\n            BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n            subjectDepositId,\n            currentTimestamp\n          );\n\n          await blockchain.increaseTimeAsync(timeJump);\n\n          subjectAmount = usdc(60);\n          subjectCaller = onRamperTwo;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(preDeposit.intentHashes).to.include(oldIntentHash);\n\n          await subject();\n\n          const newIntentHash = calculateIntentHash(\n            BigNumber.from(onRamperTwoProof.public_values.profileId).toHexString(),\n            subjectDepositId,\n            await blockchain.getCurrentTimestamp()\n          );\n          const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(postDeposit.outstandingIntentAmount).to.eq(subjectAmount);\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(usdc(10))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.include(newIntentHash);\n          expect(postDeposit.intentHashes).to.not.include(oldIntentHash);\n        });\n\n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n\n          const intent = await ramp.intents(oldIntentHash);\n\n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n\n        it(\"should correctly add a new intent to the intents mapping\", async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(\n            BigNumber.from(onRamperTwoProof.public_values.profileId).toHexString(),\n            subjectDepositId,\n            currentTimestamp\n          );\n\n          const intent = await ramp.intents(intentHash);\n\n          expect(intent.onRamper).to.eq(subjectCaller.address);\n          expect(intent.deposit).to.eq(subjectDepositId);\n          expect(intent.amount).to.eq(subjectAmount);\n          expect(intent.intentTimestamp).to.eq(currentTimestamp);\n        });\n\n        it(\"should update the account's current intent hash\", async () => {\n          await subject();\n\n          const expectedIntentHash = calculateIntentHash(\n            BigNumber.from(onRamperTwoProof.public_values.profileId).toHexString(),\n            subjectDepositId,\n            await blockchain.getCurrentTimestamp()\n          );\n\n          const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n          expect(expectedIntentHash).to.eq(intentHash);\n        });\n\n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(oldIntentHash, subjectDepositId);\n        });\n\n        describe(\"when the reclaimable amount can't cover the new intent\", async () => {\n          before(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.div(2).toNumber();\n          });\n\n          after(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Not enough liquidity\");\n          });\n        });\n      });\n\n      describe(\"when isAllowedUser is false\", async () => {\n        beforeEach(async () => {\n          await accountRegistry.connect(offRamper.wallet).addAccountToDenylist(BigNumber.from(onRamperProof.public_values.profileId).toHexString());\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper on depositor's denylist\");\n        });\n      });\n\n      describe(\"when the caller is the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the caller is the depositor from another Ethereum account\", async () => {\n        beforeEach(async () => {\n          offRamperProof.public_values.userAddress = offRamperNewAcct.address;\n          await accountRegistry.connect(offRamperNewAcct.wallet).register(offRamperProof);\n\n          subjectCaller = offRamperNewAcct;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the to address is zero\", async () => {\n        beforeEach(async () => {\n          subjectTo = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Cannot send to zero address\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be greater than 0\");\n        });\n      });\n\n      describe(\"when the amount exceeds the max on ramp amount\", async () => {\n        beforeEach(async () => {\n          subjectAmount = usdc(1000);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be less than max on-ramp amount\");\n        });\n      });\n\n      describe(\"when the cool down period hasn't elapsed\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          const depositId = (await ramp.depositCounter()).sub(1);\n  \n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(\n            BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n            depositId,\n            currentTimestamp\n          );\n          \n          const sendData = {\n            endpoint: \"GET https://app.revolut.com/api/retail/transaction/asdfsd-asdfasd-oidafda\",\n            host: \"app.revolut.com\",\n            transferId: \"736281573\",\n            senderId: onRamperProof.public_values.profileId,\n            recipientId: \"johndo8egm\",\n            timestamp: currentTimestamp.toString(),\n            currencyId: \"EUR\",\n            amount: \"46.00\",\n            status: \"outgoing_payment_sent\",\n            intentHash: intentHash,\n            notaryKeyHash: ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n          }\n          const verifierSignature = \"0x\";\n\n          return ramp.connect(subjectCaller.wallet).onRamp(sendData, verifierSignature);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"On ramp cool down period not elapsed\");\n        });\n      });\n\n      describe(\"when the deposit does not exist\", async () => {\n        beforeEach(async () => {\n          subjectDepositId = BigNumber.from(10);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit does not exist\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent but is calling from a different address\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          subjectCaller = maliciousOnRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n    });\n\n    describe(\"#cancelIntent\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(101),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        const idHash = onRamperProof.public_values.profileId;\n        depositId = ZERO;\n\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(BigNumber.from(idHash).toHexString(), depositId, currentTimestamp);\n\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).cancelIntent(subjectIntentHash);\n      }\n\n      it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should delete the original intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should update the accounts current intent hash\", async () => {\n        await subject();\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(intentHash).to.eq(ZERO_BYTES32);\n      });\n\n      it(\"should emit an IntentPruned event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n      });\n\n      describe(\"when the call comes from a different Eth address tied to the same venmoIdHash\", async () => {\n        beforeEach(async () => {\n          onRamperProof.public_values.userAddress = onRamperOtherAddress.address;\n          await accountRegistry.connect(onRamperOtherAddress.wallet).register(onRamperProof);\n\n          subjectCaller = onRamperOtherAddress;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(depositId);\n  \n          expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n  \n          await subject();\n  \n          const postDeposit = await ramp.getDeposit(depositId);\n  \n          expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n  \n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n  \n          const intent = await ramp.intents(subjectIntentHash);\n  \n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n  \n        it(\"should update the accounts current intent hash\", async () => {\n          await subject();\n  \n          const intentHash = await ramp.getIdCurrentIntentHash(onRamper.address);\n  \n          expect(intentHash).to.eq(ZERO_BYTES32);\n        });\n  \n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n        });\n      });\n\n      describe(\"when the intentHash does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = ZERO_BYTES32;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the caller did not originate the intent\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the on-ramper\");\n        });\n      });\n    });\n\n    describe(\"#onRamp\", async () => {\n      let subjectSendData: RevolutSendData;\n      let subjectNotarySignature: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = onRamperProof.public_values.profileId;\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        intentHash = calculateIntentHash(BigNumber.from(idHash).toHexString(), depositId, currentTimestamp);\n        \n        subjectSendData = {\n          endpoint: \"GET https://app.revolut.com/api/retail/transaction/asdfsd-asdfasd-oidafda\",\n          host: \"app.revolut.com\",\n          transferId: \"asdfsd-asdfasd-oidafda\",\n          recipientId: \"johndo8egm\",\n          amount: \"46.00\",\n          currencyId: \"EUR\",\n          status: \"outgoing_payment_sent\",\n          timestamp: currentTimestamp.toString(),\n          intentHash: BigNumber.from(intentHash),\n          notaryKeyHash: BigNumber.from(ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"]))\n        }\n        subjectNotarySignature = \"0x\";\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).onRamp(subjectSendData, subjectNotarySignature);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(intentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(subjectCaller.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          intentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            intentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          intentHash = calculateIntentHash(BigNumber.from(onRamperProof.public_values.profileId).toHexString(), depositId, currentTimestamp);\n\n          subjectSendData.timestamp = currentTimestamp.toString();\n          subjectSendData.intentHash = BigNumber.from(intentHash);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountDeposits = await ramp.getAccountDeposits(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountDeposits.some(obj => obj.depositId == depositId)).to.be.false;\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(intentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the caller is not the onRamper for the intent\", async () => {\n        beforeEach(async () => {\n          subjectSendData.intentHash = BigNumber.from(ZERO_BYTES32);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the on-ramper\");\n        });\n      });\n\n      describe(\"when the payment was in the incorrect currency\", async () => {\n        beforeEach(async () => {\n          subjectSendData.currencyId = \"SGD\";\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Wrong currency sent\");\n        });\n      });\n\n      describe(\"when the incorrect notary was used\", async () => {\n        beforeEach(async () => {\n          subjectSendData.notaryKeyHash = BigNumber.from(ethers.utils.solidityKeccak256([\"string\"], [\"wrong_notary_signing_key\"]));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Incorrect notary used for notarization\");\n        });\n      });\n\n      describe(\"when the amount paid was not enough\", async () => {\n        beforeEach(async () => {\n          subjectSendData.amount = \"45.00\";\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Payment was not enough\");\n        });\n      });\n\n      describe(\"when the email timestamp is before the intent was signaled\", async () => {\n        beforeEach(async () => {\n          subjectSendData.timestamp = ONE.toString();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent was not created before send\");\n        });\n      });\n\n      describe(\"when the intent has already been pruned\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the on-ramper\");\n        });\n      });\n\n      describe(\"when the offRamperId doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSendData.recipientId = calculateRevolutIdHash(\"124466989\");\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Offramper id does not match\");\n        });\n      });\n    });\n\n    describe(\"#releaseFundsToOnramper\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = onRamperProof.public_values.profileId;\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(BigNumber.from(idHash).toHexString(), depositId, currentTimestamp);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).releaseFundsToOnramper(subjectIntentHash);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(onRamper.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          subjectIntentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            subjectIntentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          subjectIntentHash = calculateIntentHash(\n            BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n            depositId,\n            currentTimestamp\n          );\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountDeposits = await ramp.getAccountDeposits(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountDeposits.some(obj => obj.depositId == depositId)).to.be.false;\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the intent does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = calculateIntentHash(\n            BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n            depositId,\n            ONE\n          );\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the sender is not the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#withdrawDeposit\", async () => {\n      let subjectDepositIds: BigNumber[];\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(50),\n          usdc(45),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        const currentDepositCounter = await ramp.depositCounter();\n        const depositIdOne = BigNumber.from(currentDepositCounter.sub(2));\n        const depositIdTwo = BigNumber.from(currentDepositCounter.sub(1));\n\n        subjectDepositIds = [depositIdOne, depositIdTwo];\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).withdrawDeposit(subjectDepositIds);\n      }\n\n      it(\"should transfer the usdc to the caller\", async () => {\n        const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n      });\n\n      it(\"should delete the deposits\", async () => {\n        const preDepositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const preDepositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(preDepositOne.depositor).to.not.eq(ADDRESS_ZERO);\n        expect(preDepositTwo.depositor).to.not.eq(ADDRESS_ZERO);\n\n        await subject();\n\n        const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n        expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n      });\n\n      it(\"should remove the deposits from the depositors account info\", async () => {\n        const preAccountDeposits = await ramp.getAccountDeposits(subjectCaller.address);\n        expect(preAccountDeposits[0].depositId).to.eq(subjectDepositIds[0]);\n        expect(preAccountDeposits[1].depositId).to.eq(subjectDepositIds[1]);\n\n        await subject();\n\n        const postAccountDeposits = await ramp.getAccountDeposits(subjectCaller.address);\n\n        expect(postAccountDeposits.some(obj => obj.depositId == subjectDepositIds[0])).to.be.false;\n        expect(postAccountDeposits.some(obj => obj.depositId == subjectDepositIds[1])).to.be.false;\n      });\n\n      it(\"should emit a DepositWithdrawn event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[0],\n          offRamper.address,\n          usdc(100),\n        );\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[1],\n          offRamper.address,\n          usdc(50),\n        );\n      });\n\n      it(\"should emit DepositClosed events for both deposits\", async () => {\n        const tx = await subject();\n\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n      });\n\n      describe(\"when there is an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(onRamper.wallet).signalIntent(subjectDepositIds[0], usdc(50), receiver.address);\n        });\n\n        it(\"should transfer the correct amount of usdc to the caller\", async () => {\n          const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n          await subject();\n\n          const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n          expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(100)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(100)));\n        });\n\n        it(\"should zero out remainingDeposits on depositOne\", async () => {\n          await subject();\n\n          const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n\n          expect(depositOne.depositor).to.not.eq(ZERO_BYTES32);\n          expect(depositOne.intentHashes.length).to.eq(1);\n          expect(depositOne.remainingDeposits).to.eq(ZERO);\n          expect(depositOne.outstandingIntentAmount).to.eq(usdc(50));\n        });\n\n        it(\"should delete deposit two from deposits and account info\", async () => {\n          await subject();\n\n          const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n          const accountDeposits = await ramp.getAccountDeposits(offRamper.address);\n\n          expect(accountDeposits.some(obj => obj.depositId == subjectDepositIds[1])).to.be.false;\n          expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n        });\n\n        it(\"should emit a DepositClosed event for deposit two\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        });\n\n        describe(\"but the intent is expired\", async () => {\n          beforeEach(async () => {\n            await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n          });\n\n          it(\"should transfer the correct amount of usdc to the caller\", async () => {\n            const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n            await subject();\n\n            const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n            expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n            expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n          });\n\n          it(\"should delete both deposits\", async () => {\n            await subject();\n\n            const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n            const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n            expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n            expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n          });\n\n          it(\"should delete the intent\", async () => {\n            const intentHash = (await ramp.getDeposit(subjectDepositIds[0])).intentHashes[0];\n\n            const preIntent = await ramp.intents(intentHash);\n            expect(preIntent.amount).to.eq(usdc(50));\n\n            await subject();\n\n            const postIntent = await ramp.intents(intentHash);\n\n            expect(postIntent.onRamper).to.eq(ADDRESS_ZERO);\n            expect(postIntent.deposit).to.eq(ZERO_BYTES32);\n            expect(postIntent.amount).to.eq(ZERO);\n            expect(postIntent.intentTimestamp).to.eq(ZERO);\n          });\n        });\n      });\n\n      describe(\"when the caller is not the offRamper\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#getIdCurrentIntentHashAsUint\", async () => {\n      let subjectAccount: Address;\n\n      let intentHash: string;\n\n      beforeEach(async () => {  \n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          ZERO,\n          await\n           blockchain.getCurrentTimestamp());\n\n        subjectAccount = onRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIdCurrentIntentHashAsUint(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const intentHashAsUint = await subject();\n\n        expect(intentHashAsUint).to.eq(BigNumber.from(intentHash));\n      });\n    });\n\n\n    describe(\"#getAccountDeposits\", async () => {\n      let subjectAccount: Address;\n\n      beforeEach(async () => {  \n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(93),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountDeposits(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(92));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(93));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.revolutTag).to.eq(\"johndo8egm\");\n        expect(deposits[1].deposit.revolutTag).to.eq(\"johndo8egm\");\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].deposit.verifierSigningKey).to.eq(verifier.address);\n        expect(deposits[1].deposit.verifierSigningKey).to.eq(verifier.address);\n        expect(deposits[0].depositorId).to.eq(BigNumber.from(offRamperProof.public_values.profileId).toHexString());\n        expect(deposits[1].depositorId).to.eq(BigNumber.from(offRamperProof.public_values.profileId).toHexString());\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getDepositFromIds\", async () => {\n      let subjectDepositIds: BigNumber[];\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(93),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          ONE,\n          await\n           blockchain.getCurrentTimestamp());\n\n\n        subjectDepositIds = [ZERO, ONE];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getDepositFromIds(subjectDepositIds);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(92));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(93));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n        expect(deposits[0].depositorId).to.eq(BigNumber.from(offRamperProof.public_values.profileId).toHexString());\n        expect(deposits[1].depositorId).to.eq(BigNumber.from(offRamperProof.public_values.profileId).toHexString());\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(JSON.stringify(deposits[0].deposit.intentHashes)).to.eq(JSON.stringify([]));\n        expect(JSON.stringify(deposits[1].deposit.intentHashes)).to.eq(JSON.stringify([intentHash]));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getIntentsWithOnRamperId\", async () => {\n      let subjectIntentHashes: string[];\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"johndo8egm\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n          ethers.utils.solidityKeccak256([\"string\"], [\"notary_signing_key\"])\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        const intentHashOne = calculateIntentHash(\n          BigNumber.from(onRamperProof.public_values.profileId).toHexString(),\n          ZERO,\n          await\n           blockchain.getCurrentTimestamp());\n        await ramp.connect(onRamperTwo.wallet).signalIntent(ZERO, usdc(40), receiver.address);\n        const intentHashTwo = calculateIntentHash(\n          BigNumber.from(onRamperTwoProof.public_values.profileId).toHexString(),\n          ZERO,\n          await\n           blockchain.getCurrentTimestamp());\n\n        subjectIntentHashes = [intentHashOne, intentHashTwo];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIntentsWithOnRamperId(subjectIntentHashes);\n      }\n\n      it(\"should return the expected intents\", async () => {\n        const intents = await subject();\n\n        expect(intents[0].intent.onRamper).to.eq(onRamper.address);\n        expect(intents[1].intent.onRamper).to.eq(onRamperTwo.address);\n        expect(intents[0].intent.deposit).to.eq(ZERO);\n        expect(intents[1].intent.deposit).to.eq(ZERO);\n        expect(intents[0].intent.amount).to.eq(usdc(50));\n        expect(intents[1].intent.amount).to.eq(usdc(40));\n        expect(intents[0].onRamperId).to.eq(BigNumber.from(onRamperProof.public_values.profileId).toHexString());\n        expect(intents[1].onRamperId).to.eq(BigNumber.from(onRamperTwoProof.public_values.profileId).toHexString());\n        expect(intents[0].intentHash).to.eq(subjectIntentHashes[0]);\n        expect(intents[1].intentHash).to.eq(subjectIntentHashes[1]);\n      });\n    });\n  });\n\n  describe(\"#setMinDepositAmount\", async () => {\n    let subjectMinDepositAmount: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectMinDepositAmount = usdc(10);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setMinDepositAmount(subjectMinDepositAmount);\n    }\n\n    it(\"should set the correct min deposit amount\", async () => {\n      await subject();\n\n      const depositAmount = await ramp.minDepositAmount();\n\n      expect(depositAmount).to.eq(subjectMinDepositAmount);\n    });\n\n    it(\"should emit a MinDepositAmountSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"MinDepositAmountSet\").withArgs(subjectMinDepositAmount);\n    });\n\n    describe(\"when the min deposit amount is 0\", async () => {\n      beforeEach(async () => {\n        subjectMinDepositAmount = ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Minimum deposit cannot be zero\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setMaxOnRampAmount\", async () => {\n    let subjectMaxOnRampAmount: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectMaxOnRampAmount = usdc(998);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setMaxOnRampAmount(subjectMaxOnRampAmount);\n    }\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const preMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n      expect(preMaxOnRampAmount).to.eq(usdc(999));\n\n      await subject();\n\n      const postMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n      expect(postMaxOnRampAmount).to.eq(subjectMaxOnRampAmount);\n    });\n\n    it(\"should emit a MaxOnRampAmountSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"MaxOnRampAmountSet\").withArgs(subjectMaxOnRampAmount);\n    });\n\n    describe(\"when the max amount is 0\", async () => {\n      beforeEach(async () => {\n        subjectMaxOnRampAmount = ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Max on ramp amount cannot be zero\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setIntentExpirationPeriod\", async () => {\n    let subjectIntentExpirationPeriod: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectIntentExpirationPeriod = ONE_DAY_IN_SECONDS.mul(2);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setIntentExpirationPeriod(subjectIntentExpirationPeriod);\n    }\n\n    it(\"should set the correct expiration time period\", async () => {\n      const preOnRampAmount = await ramp.intentExpirationPeriod();\n\n      expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n      await subject();\n\n      const postOnRampAmount = await ramp.intentExpirationPeriod();\n\n      expect(postOnRampAmount).to.eq(subjectIntentExpirationPeriod);\n    });\n\n    it(\"should emit a IntentExpirationPeriodSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"IntentExpirationPeriodSet\").withArgs(subjectIntentExpirationPeriod);\n    });\n\n    describe(\"when the intent expiration period is 0\", async () => {\n      beforeEach(async () => {\n        subjectIntentExpirationPeriod = ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Max intent expiration period cannot be zero\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setOnRampCooldownPeriod\", async () => {\n    let subjectOnRampCoolDownPeriod: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectOnRampCoolDownPeriod = ONE_DAY_IN_SECONDS.div(2);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setOnRampCooldownPeriod(subjectOnRampCoolDownPeriod);\n    }\n\n    it(\"should set the correct cool down time period\", async () => {\n      const preOnRampAmount = await ramp.onRampCooldownPeriod();\n\n      expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n      await subject();\n\n      const postOnRampAmount = await ramp.onRampCooldownPeriod();\n\n      expect(postOnRampAmount).to.eq(subjectOnRampCoolDownPeriod);\n    });\n\n    it(\"should emit a OnRampCooldownPeriodSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"OnRampCooldownPeriodSet\").withArgs(subjectOnRampCoolDownPeriod);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setSustainabilityFee\", async () => {\n    let subjectSustainabilityFee: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectSustainabilityFee = ether(.002);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setSustainabilityFee(subjectSustainabilityFee);\n    }\n\n    it(\"should set the correct sustainability fee\", async () => {\n      const preSustainabilityFee = await ramp.sustainabilityFee();\n\n      expect(preSustainabilityFee).to.eq(ZERO);\n\n      await subject();\n\n      const postSustainabilityFee = await ramp.sustainabilityFee();\n\n      expect(postSustainabilityFee).to.eq(subjectSustainabilityFee);\n    });\n\n    it(\"should emit a SustainabilityFeeUpdated event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"SustainabilityFeeUpdated\").withArgs(subjectSustainabilityFee);\n    });\n\n    describe(\"when the fee exceeds the max sustainability fee\", async () => {\n      beforeEach(async () => {\n        subjectSustainabilityFee = ether(.1);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Fee cannot be greater than max fee\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setSustainabilityFeeRecipient\", async () => {\n    let subjectSustainabilityFeeRecipient: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectSustainabilityFeeRecipient = owner.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setSustainabilityFeeRecipient(subjectSustainabilityFeeRecipient);\n    }\n\n    it(\"should set the correct sustainability fee recipient\", async () => {\n      const preSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n      expect(preSustainabilityFeeRecipient).to.eq(feeRecipient.address);\n\n      await subject();\n\n      const postSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n      expect(postSustainabilityFeeRecipient).to.eq(subjectSustainabilityFeeRecipient);\n    });\n\n    it(\"should emit a SustainabilityFeeRecipientUpdated event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"SustainabilityFeeRecipientUpdated\").withArgs(subjectSustainabilityFeeRecipient);\n    });\n\n    describe(\"when the passed fee recipient is the zero address\", async () => {\n      beforeEach(async () => {\n        subjectSustainabilityFeeRecipient = ADDRESS_ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Fee recipient cannot be zero address\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setSendProcessor\", async () => {\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectSendProcessor = owner.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setSendProcessor(subjectSendProcessor);\n    }\n\n    it(\"should set the correct min deposit amount\", async () => {\n      await subject();\n\n      const newSendProcessor = await ramp.sendProcessor();\n\n      expect(newSendProcessor).to.eq(subjectSendProcessor);\n    });\n\n    it(\"should emit a NewSendProcessorSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"NewSendProcessorSet\").withArgs(subjectSendProcessor);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/revolut/revolutSendProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { NullifierRegistry, RevolutSendProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address, RevolutSendData, RevolutSendProof } from \"@utils/types\";\nimport { usdc } from \"@utils/common\";\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\ndescribe(\"RevolutSendProcessor\", () => {\n  let owner: Account;\n  let verifier: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let nullifierRegistry: NullifierRegistry;\n  let sendProcessor: RevolutSendProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      verifier,\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n\n    sendProcessor = await deployer.deployRevolutSendProcessor(\n      ramp.address,\n      nullifierRegistry.address,\n      \"GET https://app.revolut.com/api/retail/transaction/*\",\n      \"app.revolut.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(sendProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await sendProcessor.ramp();\n      const nullifierRegistryAddress = await sendProcessor.nullifierRegistry();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(nullifierRegistryAddress).to.eq(nullifierRegistry.address);\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: RevolutSendProof;\n    let subjectVerifierSigningKey: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n\n      subjectProof = {\n        public_values: {\n          endpoint: 'GET https://app.revolut.com/api/retail/transaction/66335273-4566-ab95-ac86-e58884d04943',\n          host: \"app.revolut.com\",\n          transferId: \"66335273-4566-ab95-ac86-e58884d04943\",\n          recipientId: \"alexgx7gy\",\n          amount: \"-100\",\n          currencyId: \"EUR\",\n          status: \"COMPLETED\",\n          timestamp: \"1714639475235\",\n          intentHash: BigNumber.from(\"2109098755843864455034980037347310810989244226703714011137935097150268285982\"),\n          notaryKeyHash: BigNumber.from(\"113116629262703480258914951290401242193028831780154554089583031844538369800942\")\n        } as RevolutSendData,\n        proof: \"0xafd9888bfe6b5c00283d16cb63796822e0ee680159e6c237a0cfdafce2c693ef3ae64a5adf0cef74cba5d84207f12476d46dbe16a230349f60af6d702e9a3b331b\"\n      } as RevolutSendProof;\n\n      subjectVerifierSigningKey = \"0x166338393593e85bfde8B65358Ec5801A3445D12\";\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).processProof(subjectProof, subjectVerifierSigningKey);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof, subjectVerifierSigningKey);\n    }\n\n    it(\"should process the proof\", async () => {\n      const [\n        amount,\n        timestamp,\n        offRamperId,\n        currencyId,\n        notaryKeyHash\n      ] = await subjectCallStatic();\n\n      expect(amount).to.eq(usdc(100));\n      expect(timestamp).to.eq(BigNumber.from(subjectProof.public_values.timestamp).div(1000).add(30));\n      expect(offRamperId).to.eq(ethers.utils.solidityKeccak256([\"string\"], [subjectProof.public_values.recipientId]));\n      expect(currencyId).to.eq(ethers.utils.solidityKeccak256([\"string\"], [subjectProof.public_values.currencyId]));\n      expect(notaryKeyHash).to.eq(subjectProof.public_values.notaryKeyHash.toHexString());\n    });\n\n    it(\"should add the hash of the proof inputs to the nullifier registry\", async () => {\n      await subject();\n\n      const expectedNullifier = ethers.utils.solidityKeccak256(\n        [\"string\", \"string\"],\n        [\"Revolut\", subjectProof.public_values.transferId]\n      );\n\n      const isNullified = await nullifierRegistry.isNullified(expectedNullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the transfer has already been used\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectVerifierSigningKey = attacker.address;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid proof\");\n      });\n    });\n\n    describe(\"when the payment status is not OUTGOING_PAYMENT_SENT\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.status = \"PENDING\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"uint256\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.transferId,\n            subjectProof.public_values.recipientId,\n            subjectProof.public_values.amount,\n            subjectProof.public_values.currencyId,\n            subjectProof.public_values.status,\n            subjectProof.public_values.timestamp,\n            subjectProof.public_values.intentHash,\n            subjectProof.public_values.notaryKeyHash\n          ]\n        );\n\n        subjectVerifierSigningKey = verifier.address;\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Payment status not confirmed as sent\");\n      });\n    });\n\n    describe(\"when the amount is not preceded by a -\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.amount = \"100\"\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"uint256\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.transferId,\n            subjectProof.public_values.recipientId,\n            subjectProof.public_values.amount,\n            subjectProof.public_values.currencyId,\n            subjectProof.public_values.status,\n            subjectProof.public_values.timestamp,\n            subjectProof.public_values.intentHash,\n            subjectProof.public_values.notaryKeyHash\n          ]\n        );\n\n        subjectVerifierSigningKey = verifier.address;\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Not a send transaction\");\n      });\n    });\n\n    describe(\"when the TLS proof is for a different endpoint\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.endpoint = \"GET https://wise.com/gateway/v4/profiles/41213881\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"uint256\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.transferId,\n            subjectProof.public_values.recipientId,\n            subjectProof.public_values.amount,\n            subjectProof.public_values.currencyId,\n            subjectProof.public_values.status,\n            subjectProof.public_values.timestamp,\n            subjectProof.public_values.intentHash,\n            subjectProof.public_values.notaryKeyHash\n          ]\n        );\n\n        subjectVerifierSigningKey = verifier.address;\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Endpoint does not match expected\");\n      });\n    });\n\n    describe(\"when the host doesn't match\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.host = \"api.wise.com\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"uint256\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.transferId,\n            subjectProof.public_values.recipientId,\n            subjectProof.public_values.amount,\n            subjectProof.public_values.currencyId,\n            subjectProof.public_values.status,\n            subjectProof.public_values.timestamp,\n            subjectProof.public_values.intentHash,\n            subjectProof.public_values.notaryKeyHash\n          ]\n        );\n\n        subjectVerifierSigningKey = verifier.address;\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Host does not match expected\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await sendProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/venmo-v1/ramp.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport {\n  Address,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  Ramp,\n  USDCMock,\n  VenmoRegistrationProcessorMock,\n  VenmoSendProcessorMock\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Blockchain, ether, usdc } from \"@utils/common\";\nimport { BigNumber } from \"ethers\";\nimport { ZERO, ZERO_BYTES32, ADDRESS_ZERO, ONE } from \"@utils/constants\";\nimport { calculateIntentHash, calculatePackedId, calculateIdHash } from \"@utils/protocolUtils\";\nimport { ONE_DAY_IN_SECONDS } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\nconst blockchain = new Blockchain(ethers.provider);\n\ndescribe(\"Ramp\", () => {\n  let owner: Account;\n  let offRamper: Account;\n  let offRamperNewAcct: Account;\n  let onRamper: Account;\n  let onRamperTwo: Account;\n  let receiver: Account;\n  let maliciousOnRamper: Account;\n  let unregisteredUser: Account;\n  let feeRecipient: Account;\n\n  let ramp: Ramp;\n  let usdcToken: USDCMock;\n  let registrationProcessor: VenmoRegistrationProcessorMock;\n  let sendProcessor: VenmoSendProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      offRamper,\n      onRamper,\n      onRamperTwo,\n      receiver,\n      maliciousOnRamper,\n      unregisteredUser,\n      offRamperNewAcct,\n      feeRecipient\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    const poseidonContract = await deployer.deployPoseidon3();\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n    registrationProcessor = await deployer.deployVenmoRegistrationProcessorMock();\n    sendProcessor = await deployer.deployVenmoSendProcessorMock();\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    ramp = await deployer.deployRamp(\n      owner.address,\n      usdcToken.address,\n      poseidonContract.address,\n      usdc(20),                          // $20 min deposit amount\n      usdc(999),\n      ONE_DAY_IN_SECONDS,\n      ONE_DAY_IN_SECONDS,               // On ramp cooldown period\n      ZERO,                             // Sustainability fee\n      feeRecipient.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await ramp.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n\n    it(\"should set the correct usdc\", async () => {\n      const usdcAddress: Address = await ramp.usdc();\n      expect(usdcAddress).to.eq(usdcToken.address);\n    });\n\n    it(\"should set the correct min deposit amount\", async () => {\n      const minDepositAmount: BigNumber = await ramp.minDepositAmount();\n      expect(minDepositAmount).to.eq(usdc(20));\n    });\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const maxOnRampAmount: BigNumber = await ramp.maxOnRampAmount();\n      expect(maxOnRampAmount).to.eq(usdc(999));\n    });\n\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await ramp.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectRegistrationProcessor: Address;\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectRegistrationProcessor = registrationProcessor.address;\n      subjectSendProcessor = sendProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).initialize(\n        subjectRegistrationProcessor,\n        subjectSendProcessor\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const registrationProcessorAddress: Address = await ramp.registrationProcessor();\n      const sendProcessorAddress: Address = await ramp.sendProcessor();\n\n      expect(registrationProcessorAddress).to.eq(registrationProcessor.address);\n      expect(sendProcessorAddress).to.eq(sendProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#register\", async () => {\n    let subjectA: [BigNumber, BigNumber];\n    let subjectB: [[BigNumber, BigNumber], [BigNumber, BigNumber]];\n    let subjectC: [BigNumber, BigNumber];\n    let subjectSignals: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      subjectSignals = [ZERO, ZERO, ZERO, ZERO, ZERO];\n      subjectSignals[0] = BigNumber.from(1);\n      subjectSignals[1] = BigNumber.from(await calculateIdHash(\"1\"));\n\n      subjectA = [ZERO, ZERO];\n      subjectB = [[ZERO, ZERO], [ZERO, ZERO]];\n      subjectC = [ZERO, ZERO];\n      subjectCaller = offRamper;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).register(subjectA, subjectB, subjectC, subjectSignals);\n    }\n\n    it(\"should register the caller\", async () => {\n      await subject();\n\n      const offRamperVenmoIdHash = (await ramp.getAccountInfo(subjectCaller.address)).venmoIdHash;\n      expect(offRamperVenmoIdHash).to.eq(subjectSignals[1]);\n    });\n\n    it(\"should emit an AccountRegistered event\", async () => {\n      await expect(subject()).to.emit(ramp, \"AccountRegistered\").withArgs(\n        subjectCaller.address,\n        subjectSignals[1]\n      );\n    });\n\n    describe(\"when the caller is already registered\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectSignals[1] = BigNumber.from(await calculateIdHash(\"3\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Account already associated with venmoId\");\n      });\n    });\n  });\n\n  context(\"when the on and off ramper are registered\", async () => {\n    let signalsOffRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsOnRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsOnRampTwo: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsMaliciousOnRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n      const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n      const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n      signalsOffRamp = [ZERO, BigNumber.from(await calculateIdHash(\"1\")), ZERO, ZERO, ZERO];\n      signalsOnRamp = [ZERO, BigNumber.from(await calculateIdHash(\"2\")), ZERO, ZERO, ZERO];\n      signalsOnRampTwo = [ZERO, BigNumber.from(await calculateIdHash(\"3\")), ZERO, ZERO, ZERO];\n      signalsMaliciousOnRamp = [ZERO, BigNumber.from(await calculateIdHash(\"2\")), ZERO, ZERO, ZERO];\n\n      await ramp.connect(offRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOffRamp\n      );\n      await ramp.connect(onRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOnRamp\n      );\n\n      await ramp.connect(onRamperTwo.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOnRampTwo\n      );\n\n      await ramp.connect(maliciousOnRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsMaliciousOnRamp\n      );\n\n      await usdcToken.connect(offRamper.wallet).approve(ramp.address, usdc(10000));\n    });\n\n    describe(\"#offRamp\", async () => {\n      let subjectPackedVenmoId: [BigNumber, BigNumber, BigNumber];\n      let subjectDepositAmount: BigNumber;\n      let subjectReceiveAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectPackedVenmoId = calculatePackedId(\"1\");\n        subjectDepositAmount = usdc(100);\n        subjectReceiveAmount = usdc(101);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, subjectReceiveAmount);\n      }\n\n      it(\"should transfer the usdc to the Ramp contract\", async () => {\n        await subject();\n\n        const rampUsdcBalance = await usdcToken.balanceOf(ramp.address);\n        const offRamperUsdcBalance = await usdcToken.balanceOf(offRamper.address);\n        expect(rampUsdcBalance).to.eq(subjectDepositAmount);\n        expect(offRamperUsdcBalance).to.eq(usdc(9900));\n      });\n\n      it(\"should correctly update the deposits mapping with the correct key\", async () => {\n        await subject();\n\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        const deposit = await ramp.getDeposit(ZERO);\n\n        expect(deposit.depositor).to.eq(subjectCaller.address);\n        expect(JSON.stringify(deposit.packedVenmoId)).to.eq(JSON.stringify(subjectPackedVenmoId));\n        expect(deposit.depositAmount).to.eq(subjectDepositAmount);\n        expect(deposit.remainingDeposits).to.eq(subjectDepositAmount);\n        expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposit.conversionRate).to.eq(conversionRate);\n      });\n\n      it(\"should increment the deposit counter correctly\", async () => {\n        await subject();\n\n        const depositCounter = await ramp.depositCounter();\n\n        expect(depositCounter).to.eq(ONE);\n      });\n\n      it(\"should emit a DepositReceived event\", async () => {\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        await expect(subject()).to.emit(ramp, \"DepositReceived\").withArgs(\n          ZERO,\n          await calculateIdHash(\"1\"),\n          subjectDepositAmount,\n          conversionRate\n        );\n      });\n\n      describe(\"when the caller is not the address associated with the account\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the account owner\");\n        });\n      });\n\n      describe(\"when the deposited amount is less than the minimum\", async () => {\n        beforeEach(async () => {\n          subjectDepositAmount = usdc(19.99);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit amount must be greater than min deposit amount\");\n        });\n      });\n\n      describe(\"when the depositor has reached their max amount of deposits\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(102));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(103));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(104));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(105));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(106));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Maximum deposit amount reached\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the receive amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectReceiveAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Receive amount must be greater than 0\");\n        });\n      });\n    });\n\n    describe(\"#signalIntent\", async () => {\n      let subjectDepositId: BigNumber;\n      let subjectAmount: BigNumber;\n      let subjectTo: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        subjectDepositId = ZERO;\n        subjectAmount = usdc(50);\n        subjectTo = receiver.address;\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).signalIntent(subjectDepositId, subjectAmount, subjectTo);\n      }\n\n      it(\"should create the correct entry in the intents mapping\", async () => {\n        await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(subjectCaller.address);\n        expect(intent.to).to.eq(subjectTo);\n        expect(intent.deposit).to.eq(subjectDepositId);\n        expect(intent.amount).to.eq(subjectAmount);\n        expect(intent.intentTimestamp).to.eq(currentTimestamp);\n      });\n\n      it(\"should update the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n        await subject();\n\n        const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n\n        const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.add(subjectAmount));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(subjectAmount));\n        expect(postDeposit.intentHashes).to.include(intentHash);\n      });\n\n      it(\"should update the venmoIdIntent mapping correctly\", async () => {\n        await subject();\n\n        const expectedIntentHash = calculateIntentHash(\n          await calculateIdHash(\"2\"),\n          subjectDepositId,\n          await blockchain.getCurrentTimestamp()\n        );\n\n        const intentHash = await ramp.getVenmoIdCurrentIntentHash(subjectCaller.address);\n\n        expect(expectedIntentHash).to.eq(intentHash);\n      });\n\n      it(\"should emit an IntentSignaled event\", async () => {\n        const txn = await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n\n        expect(txn).to.emit(ramp, \"IntentSignaled\").withArgs(\n          intentHash,\n          subjectDepositId,\n          await calculateIdHash(\"2\"),\n          subjectTo,\n          subjectAmount,\n          currentTimestamp\n        );\n      });\n\n      describe(\"when there aren't enough deposits to cover requested amount but there are prunable intents\", async () => {\n        let timeJump: number;\n        let oldIntentHash: string;\n\n        before(async () => {\n          timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n        });\n\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          oldIntentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n\n          await blockchain.increaseTimeAsync(timeJump);\n\n          subjectAmount = usdc(60);\n          subjectCaller = onRamperTwo;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(preDeposit.intentHashes).to.include(oldIntentHash);\n\n          await subject();\n\n          const newIntentHash = calculateIntentHash(await calculateIdHash(\"3\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n          const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(postDeposit.outstandingIntentAmount).to.eq(subjectAmount);\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(usdc(10))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.include(newIntentHash);\n          expect(postDeposit.intentHashes).to.not.include(oldIntentHash);\n        });\n\n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n\n          const intent = await ramp.intents(oldIntentHash);\n\n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n\n        it(\"should correctly add a new intent to the intents mapping\", async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateIdHash(\"3\"), subjectDepositId, currentTimestamp);\n\n          const intent = await ramp.intents(intentHash);\n\n          expect(intent.onRamper).to.eq(subjectCaller.address);\n          expect(intent.deposit).to.eq(subjectDepositId);\n          expect(intent.amount).to.eq(subjectAmount);\n          expect(intent.intentTimestamp).to.eq(currentTimestamp);\n        });\n\n        it(\"should update the venmoIdIntent mapping correctly\", async () => {\n          await subject();\n\n          const expectedIntentHash = calculateIntentHash(\n            await calculateIdHash(\"3\"),\n            subjectDepositId,\n            await blockchain.getCurrentTimestamp()\n          );\n\n          const intentHash = await ramp.getVenmoIdCurrentIntentHash(subjectCaller.address);\n\n          expect(expectedIntentHash).to.eq(intentHash);\n        });\n\n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(oldIntentHash, subjectDepositId);\n        });\n\n        describe(\"when the reclaimable amount can't cover the new intent\", async () => {\n          before(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.div(2).toNumber();\n          });\n\n          after(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Not enough liquidity\");\n          });\n        });\n      });\n\n      describe(\"when the caller is on the depositor's denylist\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(offRamper.wallet).addAccountToDenylist(calculateIdHash(\"2\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper on depositor's denylist\");\n        });\n      });\n\n      describe(\"when the caller is the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the caller is the depositor from another Ethereum account\", async () => {\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(offRamperNewAcct.wallet).register(\n            _a,\n            _b,\n            _c,\n            signalsOffRamp\n          );\n\n          subjectCaller = offRamperNewAcct;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the to address is zero\", async () => {\n        beforeEach(async () => {\n          subjectTo = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Cannot send to zero address\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be greater than 0\");\n        });\n      });\n\n      describe(\"when the amount exceeds the max on ramp amount\", async () => {\n        beforeEach(async () => {\n          subjectAmount = usdc(1000);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be less than max on-ramp amount\");\n        });\n      });\n\n      describe(\"when the cool down period hasn't elapsed\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n  \n          const signals = new Array<BigNumber>(12).fill(ZERO);\n          signals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n          signals[1] = currentTimestamp;\n          signals[2] = BigNumber.from(await calculateIdHash(\"1\"));\n          signals[3] = BigNumber.from(await calculateIdHash(\"2\"));\n          signals[4] = BigNumber.from(intentHash);\n  \n          const a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const b: [[BigNumber, BigNumber],[BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const c: [BigNumber, BigNumber] = [ZERO, ZERO];\n          \n          await ramp.connect(onRamper.wallet).onRamp(a, b, c, signals);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"On ramp cool down period not elapsed\");\n        });\n      });\n\n      describe(\"when the deposit does not exist\", async () => {\n        beforeEach(async () => {\n          subjectDepositId = BigNumber.from(10);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit does not exist\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent but is calling from a different address\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          subjectCaller = maliciousOnRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n    });\n\n    describe(\"#cancelIntent\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        const venmoId = await calculateIdHash(\"2\");\n        depositId = ZERO;\n\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(venmoId, depositId, currentTimestamp);\n\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).cancelIntent(subjectIntentHash);\n      }\n\n      it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should delete the original intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should update the venmoIdIntent mapping correctly\", async () => {\n        await subject();\n\n        const intentHash = await ramp.getVenmoIdCurrentIntentHash(subjectCaller.address);\n\n        expect(intentHash).to.eq(ZERO_BYTES32);\n      });\n\n      it(\"should emit an IntentPruned event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n      });\n\n      describe(\"when the intentHash does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = ZERO_BYTES32;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the caller did not originate the intent\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the on-ramper\");\n        });\n      });\n    });\n\n    describe(\"#onRamp\", async () => {\n      let subjectA: [BigNumber, BigNumber];\n      let subjectB: [[BigNumber, BigNumber], [BigNumber, BigNumber]];\n      let subjectC: [BigNumber, BigNumber];\n      let subjectSignals: BigNumber[];\n      let subjectCaller: Account;\n\n      let intentHash: string;\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const venmoId = await calculateIdHash(\"2\");\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        intentHash = calculateIntentHash(venmoId, depositId, currentTimestamp);\n\n        subjectSignals = new Array<BigNumber>(12).fill(ZERO);\n        subjectSignals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n        subjectSignals[1] = currentTimestamp;\n        subjectSignals[2] = BigNumber.from(await calculateIdHash(\"1\"));\n        subjectSignals[3] = BigNumber.from(await calculateIdHash(\"2\"));\n        subjectSignals[4] = BigNumber.from(intentHash);\n\n        subjectA = [ZERO, ZERO];\n        subjectB = [[ZERO, ZERO], [ZERO, ZERO]];\n        subjectC = [ZERO, ZERO];\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).onRamp(subjectA, subjectB, subjectC, subjectSignals);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(intentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n        \n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(subjectCaller.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          intentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n  \n          await subject();\n  \n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n  \n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            intentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          intentHash = calculateIntentHash(await calculateIdHash(\"2\"), depositId, currentTimestamp);\n\n          subjectSignals[1] = currentTimestamp;\n          subjectSignals[4] = BigNumber.from(intentHash);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountInfo.deposits).to.not.include(depositId);\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(intentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the amount paid was not enough\", async () => {\n        beforeEach(async () => {\n          subjectSignals[0] = usdc(50);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Payment was not enough\");\n        });\n      });\n\n      describe(\"when the email timestamp is before the intent was signaled\", async () => {\n        beforeEach(async () => {\n          subjectSignals[1] = ONE;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent was not created before send\");\n        });\n      });\n\n      describe(\"when the intent has already been pruned\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the offRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSignals[2] = BigNumber.from(await calculateIdHash(\"2\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Offramper id does not match\");\n        });\n      });\n\n      describe(\"when the onRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSignals[3] = BigNumber.from(await calculateIdHash(\"1\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper id does not match\");\n        });\n      });\n    });\n\n    describe(\"#withdrawDeposit\", async () => {\n      let subjectDepositIds: BigNumber[];\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(50),\n          usdc(51)\n        );\n\n        const currentDepositCounter = await ramp.depositCounter();\n        const depositIdOne = BigNumber.from(currentDepositCounter.sub(2));\n        const depositIdTwo = BigNumber.from(currentDepositCounter.sub(1));\n\n        subjectDepositIds = [depositIdOne, depositIdTwo];\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).withdrawDeposit(subjectDepositIds);\n      }\n\n      it(\"should transfer the usdc to the caller\", async () => {\n        const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n      });\n\n      it(\"should delete the deposits\", async () => {\n        const preDepositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const preDepositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(preDepositOne.depositor).to.not.eq(ADDRESS_ZERO);\n        expect(preDepositTwo.depositor).to.not.eq(ADDRESS_ZERO);\n\n        await subject();\n\n        const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n        expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n      });\n\n      it(\"should remove the deposits from the depositors account info\", async () => {\n        const preAccountInfo = await ramp.getAccountInfo(subjectCaller.address);\n        expect(preAccountInfo.deposits[0]).to.eq(subjectDepositIds[0]);\n        expect(preAccountInfo.deposits[1]).to.eq(subjectDepositIds[1]);\n\n        await subject();\n\n        const accountInfo = await ramp.getAccountInfo(subjectCaller.address);\n\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[0]);\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n      });\n\n      it(\"should emit a DepositWithdrawn event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[0],\n          offRamper.address,\n          usdc(100),\n        );\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[1],\n          offRamper.address,\n          usdc(50),\n        );\n      });\n\n      it(\"should emit DepositClosed events for both deposits\", async () => {\n        const tx = await subject();\n\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n      });\n\n      describe(\"when there is an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(onRamper.wallet).signalIntent(subjectDepositIds[0], usdc(50), receiver.address);\n        });\n\n        it(\"should transfer the correct amount of usdc to the caller\", async () => {\n          const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n          await subject();\n\n          const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n          expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(100)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(100)));\n        });\n\n        it(\"should zero out remainingDeposits on depositOne\", async () => {\n          await subject();\n\n          const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n\n          expect(depositOne.depositor).to.not.eq(ZERO_BYTES32);\n          expect(depositOne.intentHashes.length).to.eq(1);\n          expect(depositOne.remainingDeposits).to.eq(ZERO);\n          expect(depositOne.outstandingIntentAmount).to.eq(usdc(50));\n        });\n\n        it(\"should delete deposit two from deposits and account info\", async () => {\n          await subject();\n\n          const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n\n          expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n          expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n        });\n\n        it(\"should emit a DepositClosed event for deposit two\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        });\n\n        describe(\"but the intent is expired\", async () => {\n          beforeEach(async () => {\n            await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n          });\n\n          it(\"should transfer the correct amount of usdc to the caller\", async () => {\n            const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n            await subject();\n\n            const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n            expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n            expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n          });\n\n          it(\"should delete both deposits\", async () => {\n            await subject();\n\n            const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n            const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n            expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n            expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n          });\n\n          it(\"should delete the intent\", async () => {\n            const intentHash = (await ramp.getDeposit(subjectDepositIds[0])).intentHashes[0];\n\n            const preIntent = await ramp.intents(intentHash);\n            expect(preIntent.amount).to.eq(usdc(50));\n\n            await subject();\n\n            const postIntent = await ramp.intents(intentHash);\n\n            expect(postIntent.onRamper).to.eq(ADDRESS_ZERO);\n            expect(postIntent.deposit).to.eq(ZERO_BYTES32);\n            expect(postIntent.amount).to.eq(ZERO);\n            expect(postIntent.intentTimestamp).to.eq(ZERO);\n          });\n        });\n      });\n\n      describe(\"when the caller is not the offRamper\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#addAccountToDenylist\", async () => {\n      let subjectDeniedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectDeniedUser = await calculateIdHash(\"2\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).addAccountToDenylist(subjectDeniedUser);\n      }\n\n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectDeniedUser);\n\n        expect(deniedUsers).to.include(subjectDeniedUser);\n        expect(isDenied).to.be.true;\n      });\n\n      it(\"should emit a UserAddedToDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserAddedToDenylist\").withArgs(\n          await calculateIdHash(\"1\"),\n          await calculateIdHash(\"2\")\n        );\n      });\n\n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#removeAccountFromDenylist\", async () => {\n      let subjectApprovedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).addAccountToDenylist(await calculateIdHash(\"2\"));\n\n        subjectApprovedUser = await calculateIdHash(\"2\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).removeAccountFromDenylist(subjectApprovedUser);\n      }\n\n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preDeniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n\n        expect(preDeniedUsers).to.include(subjectApprovedUser);\n\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectApprovedUser);\n\n        expect(deniedUsers).to.not.include(subjectApprovedUser);\n        expect(isDenied).to.be.false;\n      });\n\n      it(\"should emit a UserRemovedFromDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserRemovedFromDenylist\").withArgs(\n          await calculateIdHash(\"1\"),\n          await calculateIdHash(\"2\")\n        );\n      });\n\n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#setMinDepositAmount\", async () => {\n      let subjectMinDepositAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMinDepositAmount = usdc(10);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMinDepositAmount(subjectMinDepositAmount);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const depositAmount = await ramp.minDepositAmount();\n\n        expect(depositAmount).to.eq(subjectMinDepositAmount);\n      });\n\n      it(\"should emit a MinDepositAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MinDepositAmountSet\").withArgs(subjectMinDepositAmount);\n      });\n\n      describe(\"when the min deposit amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMinDepositAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Minimum deposit cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setMaxOnRampAmount\", async () => {\n      let subjectMaxOnRampAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMaxOnRampAmount = usdc(998);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMaxOnRampAmount(subjectMaxOnRampAmount);\n      }\n\n      it(\"should set the correct max on ramp amount\", async () => {\n        const preMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(preMaxOnRampAmount).to.eq(usdc(999));\n\n        await subject();\n\n        const postMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(postMaxOnRampAmount).to.eq(subjectMaxOnRampAmount);\n      });\n\n      it(\"should emit a MaxOnRampAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MaxOnRampAmountSet\").withArgs(subjectMaxOnRampAmount);\n      });\n\n      describe(\"when the max amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMaxOnRampAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max on ramp amount cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setIntentExpirationPeriod\", async () => {\n      let subjectIntentExpirationPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectIntentExpirationPeriod = ONE_DAY_IN_SECONDS.mul(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setIntentExpirationPeriod(subjectIntentExpirationPeriod);\n      }\n\n      it(\"should set the correct expiration time period\", async () => {\n        const preOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectIntentExpirationPeriod);\n      });\n\n      it(\"should emit a IntentExpirationPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"IntentExpirationPeriodSet\").withArgs(subjectIntentExpirationPeriod);\n      });\n\n      describe(\"when the intent expiration period is 0\", async () => {\n        beforeEach(async () => {\n          subjectIntentExpirationPeriod = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max intent expiration period cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setOnRampCooldownPeriod\", async () => {\n      let subjectOnRampCoolDownPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectOnRampCoolDownPeriod = ONE_DAY_IN_SECONDS.div(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setOnRampCooldownPeriod(subjectOnRampCoolDownPeriod);\n      }\n\n      it(\"should set the correct cool down time period\", async () => {\n        const preOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectOnRampCoolDownPeriod);\n      });\n\n      it(\"should emit a OnRampCooldownPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"OnRampCooldownPeriodSet\").withArgs(subjectOnRampCoolDownPeriod);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFee\", async () => {\n      let subjectSustainabilityFee: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFee = ether(.002);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFee(subjectSustainabilityFee);\n      }\n\n      it(\"should set the correct sustainability fee\", async () => {\n        const preSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(preSustainabilityFee).to.eq(ZERO);\n\n        await subject();\n\n        const postSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(postSustainabilityFee).to.eq(subjectSustainabilityFee);\n      });\n\n      it(\"should emit a SustainabilityFeeUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeUpdated\").withArgs(subjectSustainabilityFee);\n      });\n\n      describe(\"when the fee exceeds the max sustainability fee\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFee = ether(.1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee cannot be greater than max fee\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFeeRecipient\", async () => {\n      let subjectSustainabilityFeeRecipient: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFeeRecipient = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFeeRecipient(subjectSustainabilityFeeRecipient);\n      }\n\n      it(\"should set the correct sustainability fee recipient\", async () => {\n        const preSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(preSustainabilityFeeRecipient).to.eq(feeRecipient.address);\n\n        await subject();\n\n        const postSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(postSustainabilityFeeRecipient).to.eq(subjectSustainabilityFeeRecipient);\n      });\n\n      it(\"should emit a SustainabilityFeeRecipientUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeRecipientUpdated\").withArgs(subjectSustainabilityFeeRecipient);\n      });\n\n      describe(\"when the passed fee recipient is the zero address\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFeeRecipient = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee recipient cannot be zero address\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSendProcessor\", async () => {\n      let subjectSendProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSendProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSendProcessor(subjectSendProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newSendProcessor = await ramp.sendProcessor();\n\n        expect(newSendProcessor).to.eq(subjectSendProcessor);\n      });\n\n      it(\"should emit a NewSendProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewSendProcessorSet\").withArgs(subjectSendProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setRegistrationProcessor\", async () => {\n      let subjectRegistrationProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectRegistrationProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setRegistrationProcessor(subjectRegistrationProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newRegistrationProcessor = await ramp.registrationProcessor();\n\n        expect(newRegistrationProcessor).to.eq(subjectRegistrationProcessor);\n      });\n\n      it(\"should emit a NewRegistrationProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewRegistrationProcessorSet\").withArgs(subjectRegistrationProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#getAccountDeposits\", async () => {\n      let subjectAccount: Address;\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateIdHash(\"2\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountDeposits(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getDepositFromIds\", async () => {\n      let subjectDepositIds: BigNumber[];\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateIdHash(\"2\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectDepositIds = [ZERO, ONE];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getDepositFromIds(subjectDepositIds);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getIntentsWithOnRamperId\", async () => {\n      let subjectIntentHashes: string[];\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        const intentHashOne = calculateIntentHash(await calculateIdHash(\"2\"), ZERO, await blockchain.getCurrentTimestamp());\n        await ramp.connect(onRamperTwo.wallet).signalIntent(ZERO, usdc(40), receiver.address);\n        const intentHashTwo = calculateIntentHash(await calculateIdHash(\"3\"), ZERO, await blockchain.getCurrentTimestamp());\n\n        subjectIntentHashes = [intentHashOne, intentHashTwo];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIntentsWithOnRamperId(subjectIntentHashes);\n      }\n\n      it(\"should return the expected intents\", async () => {\n        const intents = await subject();\n\n        expect(intents[0].intent.onRamper).to.eq(onRamper.address);\n        expect(intents[1].intent.onRamper).to.eq(onRamperTwo.address);\n        expect(intents[0].intent.deposit).to.eq(ZERO);\n        expect(intents[1].intent.deposit).to.eq(ZERO);\n        expect(intents[0].intent.amount).to.eq(usdc(50));\n        expect(intents[1].intent.amount).to.eq(usdc(40));\n        expect(intents[0].onRamperIdHash).to.eq(await calculateIdHash(\"2\"));\n        expect(intents[1].onRamperIdHash).to.eq(await calculateIdHash(\"3\"));\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/venmo-v1/venmoRegistrationProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapter, NullifierRegistry, VenmoRegistrationProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { ZERO_BYTES32 } from \"@utils/constants\";\nimport { Address } from \"@utils/types\";\n\nconst expect = getWaffleExpect();\n\nconst rawSignals = [\"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\",\"0x0000000000000000000000000000000000000000000000000076406f6d6e6576\",\"0x000000000000000000000000000000000000000000000000006f632e6f6d6e65\",\"0x000000000000000000000000000000000000000000000000000000000000006d\",\"0x0741728e3aae72eda484e8ccbf00f843c38eae9c399b9bd7fb2b5ee7a055b6bf\"];\n\ndescribe.skip(\"VenmoRegistrationProcessor\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapter;\n  let nullifierRegistry: NullifierRegistry;\n  let registrationProcessor: VenmoRegistrationProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapter(rawSignals[0]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    registrationProcessor = await deployer.deployVenmoRegistrationProcessor(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      \"venmo@venmo.com\"\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await registrationProcessor.ramp();\n      const venmoMailserverKeyHashAdapter = await registrationProcessor.mailserverKeyHashAdapter();\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoMailserverKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"venmo@venmo.com\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: any;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      const a: [BigNumber, BigNumber] = [BigNumber.from(\"0x191e1b9bc41df5af8ee340c17b985e6568d07af205081006b58b051cfcb69747\"), BigNumber.from(\"0x12bf495fd858d78c2c1afe44a54c1e2e14816bb08e38d65ad7e433097330b3da\")];\n      const b: [[BigNumber, BigNumber],[BigNumber, BigNumber]] = [\n        [BigNumber.from(\"0x3045cf6ba2aa61bc7b601e7d7a8ad40e4934e206e8e6649f28bf2bab5633539b\"), BigNumber.from(\"0x12942590fa042c1852458a02ec03382fe954f41817bee90d00000f7c58813bbc\")],\n        [BigNumber.from(\"0x22d6aaad8804724c0103be2ebce7168375f960d61169b9f3df2dcb269ed1e91a\"), BigNumber.from(\"0x21afcce7edba700acadad481d70b3b987c6d66affee80165e9e37fc473e1cfe5\")]\n      ];\n      const c: [BigNumber, BigNumber] = [BigNumber.from(\"0x16c20e8962dccf386104148cf396cff59eb91df62e9b809f3844773901e360cb\"), BigNumber.from(\"0x1a086c71446c21cb5a114200211bd69c87095f750cf09726ab50f8ad551ff911\")];\n      const signals: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] = [BigNumber.from(rawSignals[0]), BigNumber.from(rawSignals[1]), BigNumber.from(rawSignals[2]), BigNumber.from(rawSignals[3]), BigNumber.from(rawSignals[4])];\n\n      subjectProof = {\n        a,\n        b,\n        c,\n        signals\n      };\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const onRamperIdHash = await subject();\n\n      expect(onRamperIdHash).to.eq(subjectProof.signals[4]);\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await registrationProcessor.setEmailFromAddress(\"bad-venmo@venmo.com\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.setMailserverKeyHash(ZERO_BYTES32);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await registrationProcessor.mailserverKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-venmo@venmo.com\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-venmo@venmo.com\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/venmo-v1/venmoSendProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapter, NullifierRegistry, VenmoSendProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\nimport { Address, GrothProof } from \"@utils/types\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { usdc } from \"@utils/common\";\nimport { ZERO_BYTES32 } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\nconst rawSignals = [\"0x2cf6a95f35c0d2b6160f07626e9737449a53d173d65d1683263892555b448d8f\",\"0x0000000000000000000000000000000000000000000000000076406f6d6e6576\",\"0x000000000000000000000000000000000000000000000000006f632e6f6d6e65\",\"0x000000000000000000000000000000000000000000000000000000000000006d\",\"0x00000000000000000000000000000000000000000000000000000030302e3033\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x0000000000000000000000000000000000000000000000000033373633383631\",\"0x0000000000000000000000000000000000000000000000000000000000393334\",\"0x14465b905804512ffd4ed3425fd0d9d0f50947bddfd35bb55be9c29cca1e1c3a\",\"0x0741728e3aae72eda484e8ccbf00f843c38eae9c399b9bd7fb2b5ee7a055b6bf\",\"0x1e1d37257be43685d944597f63d00a6b638b9b4ff1752cf8db9c5de48ececbe8\",\"0x0000000000000000000000000000000000000000000000000000000000003039\"];\n\ndescribe.skip(\"VenmoSendProcessor\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapter;\n  let nullifierRegistry: NullifierRegistry;\n  let sendProcessor: VenmoSendProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapter(rawSignals[0]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    sendProcessor = await deployer.deployVenmoSendProcessor(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      \"venmo@venmo.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(sendProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await sendProcessor.ramp();\n      const venmoKeyHashAdapter = await sendProcessor.mailserverKeyHashAdapter();\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"venmo@venmo.com\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: GrothProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      const a: [BigNumber, BigNumber] = [BigNumber.from(\"0x26ff6d28e02f70b6504333c1c859568a9f9448687e8d2353be18e873c1a1fc80\"), BigNumber.from(\"0x0c988ec5f63caf28e9b3e25b3282c717578a2dbb977029485acfff9cde455f21\")]\n      const b: [[BigNumber, BigNumber],[BigNumber, BigNumber]] = [\n        [BigNumber.from(\"0x02ce6de4c2c4c8a3d70b7dab7dbf910163845ee641f1abf24fcd6b7a4826d1f3\"), BigNumber.from(\"0x1b020bfdf12db1398722b03bc62ebc164bb55ccdfc149f5293b87ce8b7ce2843\")],\n        [BigNumber.from(\"0x1eb4a95382e681a3f1c878a8e438e60aaae1d31ac8af53819c95c0a8bc2363ce\"), BigNumber.from(\"0x1c0b7e9cf0656f50e9efd851a58b8ad4da7e3bfa4656bac41e26e2d8e469743d\")]\n      ];\n      const c: [BigNumber, BigNumber] = [BigNumber.from(\"0x2a3469161eb3b8aad8a0b83638a78a69396bcf00453006a39fd123682e3d3fc2\"), BigNumber.from(\"0x2f9bf3be48e9e31aed57dda963606c21e8ba543adbed6b163e5feaf60b622dea\")];\n      const signals: BigNumber[] = rawSignals.map((signal) => BigNumber.from(signal));\n\n      subjectProof = {\n        a,\n        b,\n        c,\n        signals\n      };\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const {\n        amount,\n        timestamp,\n        offRamperIdHash,\n        onRamperIdHash,\n        intentHash\n      } = await subjectCallStatic();\n\n      expect(amount).to.eq(usdc(30));\n      expect(timestamp).to.eq(BigNumber.from(1683673439));\n      expect(offRamperIdHash).to.eq(rawSignals[8]);\n      expect(onRamperIdHash).to.eq(rawSignals[9]);\n      expect(intentHash).to.eq(\"0x0000000000000000000000000000000000000000000000000000000000003039\");\n    });\n\n    it(\"should add the email to the nullifier mapping\", async () => {\n      await subject();\n\n      const isNullified = await nullifierRegistry.isNullified(subjectProof.signals[10].toHexString());\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await sendProcessor.setEmailFromAddress(\"bad-venmo@venmo.com\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.setMailserverKeyHash(ZERO_BYTES32);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the e-mail was used previously\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await sendProcessor.mailserverKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-venmo@venmo.com\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-venmo@venmo.com\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/venmo-v2/venmoRampV2.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport {\n  Address,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  Ramp,\n  VenmoRampV2,\n  USDCMock,\n  VenmoRegistrationProcessorMock,\n  VenmoSendProcessorMock\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Blockchain, ether, usdc } from \"@utils/common\";\nimport { BigNumber } from \"ethers\";\nimport { ZERO, ZERO_BYTES32, ADDRESS_ZERO, ONE } from \"@utils/constants\";\nimport { calculateIntentHash, calculatePackedId, calculateIdHash } from \"@utils/protocolUtils\";\nimport { ONE_DAY_IN_SECONDS } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\nconst blockchain = new Blockchain(ethers.provider);\n\ndescribe(\"VenmoRampV2\", () => {\n  let owner: Account;\n  let offRamper: Account;\n  let offRamperNewAcct: Account;\n  let onRamper: Account;\n  let onRamperOtherAddress: Account;\n  let onRamperTwo: Account;\n  let receiver: Account;\n  let maliciousOnRamper: Account;\n  let oldRampUser: Account;\n  let unregisteredUser: Account;\n  let feeRecipient: Account;\n\n  let oldRamp: Ramp;\n  let ramp: VenmoRampV2;\n  let usdcToken: USDCMock;\n  let registrationProcessor: VenmoRegistrationProcessorMock;\n  let sendProcessor: VenmoSendProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      offRamper,\n      onRamper,\n      onRamperOtherAddress,\n      onRamperTwo,\n      receiver,\n      maliciousOnRamper,\n      oldRampUser,\n      unregisteredUser,\n      offRamperNewAcct,\n      feeRecipient\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    const poseidonContract = await deployer.deployPoseidon3();\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n    registrationProcessor = await deployer.deployVenmoRegistrationProcessorMock();\n    sendProcessor = await deployer.deployVenmoSendProcessorMock();\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    oldRamp = await deployer.deployRamp(\n      owner.address,\n      usdcToken.address,\n      poseidonContract.address,\n      usdc(20),                          // $20 min deposit amount\n      usdc(999),\n      ONE_DAY_IN_SECONDS,\n      ONE_DAY_IN_SECONDS,               // On ramp cooldown period\n      ZERO,                             // Sustainability fee\n      feeRecipient.address\n    );\n\n    ramp = await deployer.deployVenmoRampV2(\n      owner.address,\n      oldRamp.address,\n      usdcToken.address,\n      poseidonContract.address,\n      usdc(20),                          // $20 min deposit amount\n      usdc(999),\n      ONE_DAY_IN_SECONDS,\n      ONE_DAY_IN_SECONDS,               // On ramp cooldown period\n      ZERO,                             // Sustainability fee\n      feeRecipient.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await ramp.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n\n    it(\"should set the correct usdc\", async () => {\n      const usdcAddress: Address = await ramp.usdc();\n      expect(usdcAddress).to.eq(usdcToken.address);\n    });\n\n    it(\"should set the correct old ramp address\", async () => {\n      const oldRampAddress: Address = await ramp.ramp();\n      expect(oldRampAddress).to.eq(oldRamp.address);\n    });\n\n    it(\"should set the correct min deposit amount\", async () => {\n      const minDepositAmount: BigNumber = await ramp.minDepositAmount();\n      expect(minDepositAmount).to.eq(usdc(20));\n    });\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const maxOnRampAmount: BigNumber = await ramp.maxOnRampAmount();\n      expect(maxOnRampAmount).to.eq(usdc(999));\n    });\n\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await ramp.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectRegistrationProcessor: Address;\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectRegistrationProcessor = registrationProcessor.address;\n      subjectSendProcessor = sendProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).initialize(\n        subjectRegistrationProcessor,\n        subjectSendProcessor\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const registrationProcessorAddress: Address = await ramp.registrationProcessor();\n      const sendProcessorAddress: Address = await ramp.sendProcessor();\n\n      expect(registrationProcessorAddress).to.eq(registrationProcessor.address);\n      expect(sendProcessorAddress).to.eq(sendProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#register\", async () => {\n    let subjectA: [BigNumber, BigNumber];\n    let subjectB: [[BigNumber, BigNumber], [BigNumber, BigNumber]];\n    let subjectC: [BigNumber, BigNumber];\n    let subjectSignals: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      subjectSignals = [ZERO, ZERO, ZERO, ZERO, ZERO];\n      subjectSignals[0] = BigNumber.from(1);\n      subjectSignals[1] = BigNumber.from(await calculateIdHash(\"1\"));\n\n      subjectA = [ZERO, ZERO];\n      subjectB = [[ZERO, ZERO], [ZERO, ZERO]];\n      subjectC = [ZERO, ZERO];\n      subjectCaller = offRamper;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).register(subjectA, subjectB, subjectC, subjectSignals);\n    }\n\n    it(\"should register the caller\", async () => {\n      await subject();\n\n      const offRamperVenmoIdHash = (await ramp.getAccountInfo(subjectCaller.address)).venmoIdHash;\n      expect(offRamperVenmoIdHash).to.eq(subjectSignals[1]);\n    });\n\n    it(\"should emit an AccountRegistered event\", async () => {\n      await expect(subject()).to.emit(ramp, \"AccountRegistered\").withArgs(\n        subjectCaller.address,\n        subjectSignals[1]\n      );\n    });\n\n    describe(\"when the caller is already registered\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectSignals[1] = BigNumber.from(await calculateIdHash(\"3\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Account already associated with venmoId\");\n      });\n    });\n\n\n    describe(\"when the caller is already registered on the old ramp contract\", async () => {\n      beforeEach(async () => {\n        await oldRamp.initialize(registrationProcessor.address, sendProcessor.address);\n        await oldRamp.connect(subjectCaller.wallet).register(subjectA, subjectB, subjectC, subjectSignals);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Account already associated with venmoId\");\n      });\n    });\n  });\n\n  context(\"when the on and off ramper are registered\", async () => {\n    let signalsOffRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsOnRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsOnRampTwo: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n    let signalsMaliciousOnRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n\n    beforeEach(async () => {\n      await ramp.initialize(registrationProcessor.address, sendProcessor.address);\n\n      const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n      const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n      const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n      signalsOffRamp = [ZERO, BigNumber.from(await calculateIdHash(\"1\")), ZERO, ZERO, ZERO];\n      signalsOnRamp = [ZERO, BigNumber.from(await calculateIdHash(\"2\")), ZERO, ZERO, ZERO];\n      signalsOnRampTwo = [ZERO, BigNumber.from(await calculateIdHash(\"3\")), ZERO, ZERO, ZERO];\n      signalsMaliciousOnRamp = [ZERO, BigNumber.from(await calculateIdHash(\"2\")), ZERO, ZERO, ZERO];\n\n      await ramp.connect(offRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOffRamp\n      );\n      await ramp.connect(onRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOnRamp\n      );\n\n      await ramp.connect(onRamperTwo.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsOnRampTwo\n      );\n\n      await ramp.connect(maliciousOnRamper.wallet).register(\n        _a,\n        _b,\n        _c,\n        signalsMaliciousOnRamp\n      );\n\n      await usdcToken.connect(offRamper.wallet).approve(ramp.address, usdc(10000));\n    });\n\n    describe(\"#offRamp\", async () => {\n      let subjectPackedVenmoId: [BigNumber, BigNumber, BigNumber];\n      let subjectDepositAmount: BigNumber;\n      let subjectReceiveAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectPackedVenmoId = calculatePackedId(\"1\");\n        subjectDepositAmount = usdc(100);\n        subjectReceiveAmount = usdc(101);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, subjectReceiveAmount);\n      }\n\n      it(\"should transfer the usdc to the Ramp contract\", async () => {\n        await subject();\n\n        const rampUsdcBalance = await usdcToken.balanceOf(ramp.address);\n        const offRamperUsdcBalance = await usdcToken.balanceOf(offRamper.address);\n        expect(rampUsdcBalance).to.eq(subjectDepositAmount);\n        expect(offRamperUsdcBalance).to.eq(usdc(9900));\n      });\n\n      it(\"should correctly update the deposits mapping with the correct key\", async () => {\n        await subject();\n\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        const deposit = await ramp.getDeposit(ZERO);\n\n        expect(deposit.depositor).to.eq(subjectCaller.address);\n        expect(JSON.stringify(deposit.packedVenmoId)).to.eq(JSON.stringify(subjectPackedVenmoId));\n        expect(deposit.depositAmount).to.eq(subjectDepositAmount);\n        expect(deposit.remainingDeposits).to.eq(subjectDepositAmount);\n        expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposit.conversionRate).to.eq(conversionRate);\n      });\n\n      it(\"should increment the deposit counter correctly\", async () => {\n        await subject();\n\n        const depositCounter = await ramp.depositCounter();\n\n        expect(depositCounter).to.eq(ONE);\n      });\n\n      it(\"should emit a DepositReceived event\", async () => {\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        await expect(subject()).to.emit(ramp, \"DepositReceived\").withArgs(\n          ZERO,\n          await calculateIdHash(\"1\"),\n          subjectDepositAmount,\n          conversionRate\n        );\n      });\n\n      describe(\"when the caller is not the address associated with the account\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the account owner\");\n        });\n      });\n\n      describe(\"when the deposited amount is less than the minimum\", async () => {\n        beforeEach(async () => {\n          subjectDepositAmount = usdc(19.99);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit amount must be greater than min deposit amount\");\n        });\n      });\n\n      describe(\"when the depositor has reached their max amount of deposits\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(102));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(103));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(104));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(105));\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectPackedVenmoId, subjectDepositAmount, usdc(106));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Maximum deposit amount reached\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the receive amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectReceiveAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Receive amount must be greater than 0\");\n        });\n      });\n    });\n\n    describe(\"#signalIntent\", async () => {\n      let subjectDepositId: BigNumber;\n      let subjectAmount: BigNumber;\n      let subjectTo: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        subjectDepositId = ZERO;\n        subjectAmount = usdc(50);\n        subjectTo = receiver.address;\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).signalIntent(subjectDepositId, subjectAmount, subjectTo);\n      }\n\n      it(\"should create the correct entry in the intents mapping\", async () => {\n        await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(subjectCaller.address);\n        expect(intent.to).to.eq(subjectTo);\n        expect(intent.deposit).to.eq(subjectDepositId);\n        expect(intent.amount).to.eq(subjectAmount);\n        expect(intent.intentTimestamp).to.eq(currentTimestamp);\n      });\n\n      it(\"should update the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n        await subject();\n\n        const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n\n        const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.add(subjectAmount));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(subjectAmount));\n        expect(postDeposit.intentHashes).to.include(intentHash);\n      });\n\n      it(\"should update the venmoIdIntent mapping correctly\", async () => {\n        await subject();\n\n        const expectedIntentHash = calculateIntentHash(\n          await calculateIdHash(\"2\"),\n          subjectDepositId,\n          await blockchain.getCurrentTimestamp()\n        );\n\n        const intentHash = await ramp.getVenmoIdCurrentIntentHash(subjectCaller.address);\n\n        expect(expectedIntentHash).to.eq(intentHash);\n      });\n\n      it(\"should emit an IntentSignaled event\", async () => {\n        const txn = await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n\n        expect(txn).to.emit(ramp, \"IntentSignaled\").withArgs(\n          intentHash,\n          subjectDepositId,\n          await calculateIdHash(\"2\"),\n          subjectTo,\n          subjectAmount,\n          currentTimestamp\n        );\n      });\n\n      describe(\"when there aren't enough deposits to cover requested amount but there are prunable intents\", async () => {\n        let timeJump: number;\n        let oldIntentHash: string;\n\n        before(async () => {\n          timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n        });\n\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          oldIntentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n\n          await blockchain.increaseTimeAsync(timeJump);\n\n          subjectAmount = usdc(60);\n          subjectCaller = onRamperTwo;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(preDeposit.intentHashes).to.include(oldIntentHash);\n\n          await subject();\n\n          const newIntentHash = calculateIntentHash(await calculateIdHash(\"3\"), subjectDepositId, await blockchain.getCurrentTimestamp());\n          const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(postDeposit.outstandingIntentAmount).to.eq(subjectAmount);\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(usdc(10))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.include(newIntentHash);\n          expect(postDeposit.intentHashes).to.not.include(oldIntentHash);\n        });\n\n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n\n          const intent = await ramp.intents(oldIntentHash);\n\n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n\n        it(\"should correctly add a new intent to the intents mapping\", async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateIdHash(\"3\"), subjectDepositId, currentTimestamp);\n\n          const intent = await ramp.intents(intentHash);\n\n          expect(intent.onRamper).to.eq(subjectCaller.address);\n          expect(intent.deposit).to.eq(subjectDepositId);\n          expect(intent.amount).to.eq(subjectAmount);\n          expect(intent.intentTimestamp).to.eq(currentTimestamp);\n        });\n\n        it(\"should update the venmoIdIntent mapping correctly\", async () => {\n          await subject();\n\n          const expectedIntentHash = calculateIntentHash(\n            await calculateIdHash(\"3\"),\n            subjectDepositId,\n            await blockchain.getCurrentTimestamp()\n          );\n\n          const intentHash = await ramp.getVenmoIdCurrentIntentHash(subjectCaller.address);\n\n          expect(expectedIntentHash).to.eq(intentHash);\n        });\n\n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(oldIntentHash, subjectDepositId);\n        });\n\n        describe(\"when the reclaimable amount can't cover the new intent\", async () => {\n          before(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.div(2).toNumber();\n          });\n\n          after(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Not enough liquidity\");\n          });\n        });\n      });\n\n      describe(\"when the caller is on the depositor's denylist\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(offRamper.wallet).addAccountToDenylist(calculateIdHash(\"2\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper on depositor's denylist\");\n        });\n      });\n\n      describe(\"when the caller is the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the caller is the depositor from another Ethereum account\", async () => {\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(offRamperNewAcct.wallet).register(\n            _a,\n            _b,\n            _c,\n            signalsOffRamp\n          );\n\n          subjectCaller = offRamperNewAcct;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the to address is zero\", async () => {\n        beforeEach(async () => {\n          subjectTo = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Cannot send to zero address\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be greater than 0\");\n        });\n      });\n\n      describe(\"when the amount exceeds the max on ramp amount\", async () => {\n        beforeEach(async () => {\n          subjectAmount = usdc(1000);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be less than max on-ramp amount\");\n        });\n      });\n\n      describe(\"when the cool down period hasn't elapsed\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(await calculateIdHash(\"2\"), subjectDepositId, currentTimestamp);\n  \n          const signals = new Array<BigNumber>(12).fill(ZERO);\n          signals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n          signals[1] = currentTimestamp;\n          signals[2] = BigNumber.from(await calculateIdHash(\"1\"));\n          signals[3] = BigNumber.from(await calculateIdHash(\"2\"));\n          signals[4] = BigNumber.from(intentHash);\n  \n          const a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const b: [[BigNumber, BigNumber],[BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const c: [BigNumber, BigNumber] = [ZERO, ZERO];\n          \n          await ramp.connect(onRamper.wallet).onRamp(a, b, c, signals);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"On ramp cool down period not elapsed\");\n        });\n      });\n\n      describe(\"when the deposit does not exist\", async () => {\n        beforeEach(async () => {\n          subjectDepositId = BigNumber.from(10);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit does not exist\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent but is calling from a different address\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          subjectCaller = maliciousOnRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n    });\n\n    describe(\"#cancelIntent\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        const venmoId = await calculateIdHash(\"2\");\n        depositId = ZERO;\n\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(venmoId, depositId, currentTimestamp);\n\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).cancelIntent(subjectIntentHash);\n      }\n\n      it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should delete the original intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should update the venmoIdIntent mapping correctly\", async () => {\n        await subject();\n\n        const intentHash = await ramp.getVenmoIdCurrentIntentHash(subjectCaller.address);\n\n        expect(intentHash).to.eq(ZERO_BYTES32);\n      });\n\n      it(\"should emit an IntentPruned event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n      });\n\n      describe(\"when the call comes from a different Eth address tied to the same venmoIdHash\", async () => {\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n\n          await ramp.connect(onRamperOtherAddress.wallet).register(\n            _a,\n            _b,\n            _c,\n            signalsOnRamp\n          );\n\n          subjectCaller = onRamperOtherAddress;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(depositId);\n  \n          expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n  \n          await subject();\n  \n          const postDeposit = await ramp.getDeposit(depositId);\n  \n          expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n  \n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n  \n          const intent = await ramp.intents(subjectIntentHash);\n  \n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n  \n        it(\"should update the accounts current intent hash\", async () => {\n          await subject();\n  \n          const intentHash = await ramp.getVenmoIdCurrentIntentHash(onRamper.address);\n  \n          expect(intentHash).to.eq(ZERO_BYTES32);\n        });\n  \n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n        });\n      });\n\n      describe(\"when the intentHash does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = ZERO_BYTES32;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the caller did not originate the intent\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the on-ramper\");\n        });\n      });\n    });\n\n    describe(\"#onRamp\", async () => {\n      let subjectA: [BigNumber, BigNumber];\n      let subjectB: [[BigNumber, BigNumber], [BigNumber, BigNumber]];\n      let subjectC: [BigNumber, BigNumber];\n      let subjectSignals: BigNumber[];\n      let subjectCaller: Account;\n\n      let intentHash: string;\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const venmoId = await calculateIdHash(\"2\");\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        intentHash = calculateIntentHash(venmoId, depositId, currentTimestamp);\n\n        subjectSignals = new Array<BigNumber>(12).fill(ZERO);\n        subjectSignals[0] = usdc(50).mul(usdc(101)).div(usdc(100));\n        subjectSignals[1] = currentTimestamp;\n        subjectSignals[2] = BigNumber.from(await calculateIdHash(\"1\"));\n        subjectSignals[3] = BigNumber.from(await calculateIdHash(\"2\"));\n        subjectSignals[4] = BigNumber.from(intentHash);\n\n        subjectA = [ZERO, ZERO];\n        subjectB = [[ZERO, ZERO], [ZERO, ZERO]];\n        subjectC = [ZERO, ZERO];\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).onRamp(subjectA, subjectB, subjectC, subjectSignals);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(intentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n        \n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(subjectCaller.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          intentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n  \n          await subject();\n  \n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n  \n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            intentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          intentHash = calculateIntentHash(await calculateIdHash(\"2\"), depositId, currentTimestamp);\n\n          subjectSignals[1] = currentTimestamp;\n          subjectSignals[4] = BigNumber.from(intentHash);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountInfo.deposits).to.not.include(depositId);\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(intentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the amount paid was not enough\", async () => {\n        beforeEach(async () => {\n          subjectSignals[0] = usdc(50);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Payment was not enough\");\n        });\n      });\n\n      describe(\"when the email timestamp is before the intent was signaled\", async () => {\n        beforeEach(async () => {\n          subjectSignals[1] = ONE;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent was not created before send\");\n        });\n      });\n\n      describe(\"when the intent has already been pruned\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the offRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSignals[2] = BigNumber.from(await calculateIdHash(\"2\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Offramper id does not match\");\n        });\n      });\n\n      describe(\"when the onRamperIdHash doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSignals[3] = BigNumber.from(await calculateIdHash(\"1\"));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper id does not match\");\n        });\n      });\n    });\n\n    describe(\"#releaseFundsToOnramper\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = await calculateIdHash(\"2\");\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).releaseFundsToOnramper(subjectIntentHash);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(onRamper.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          subjectIntentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            subjectIntentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          subjectIntentHash = calculateIntentHash(await calculateIdHash(\"2\"), depositId, currentTimestamp);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountInfo.deposits).to.not.include(depositId);\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the intent does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = calculateIntentHash(await calculateIdHash(\"22\"), depositId, ONE);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the sender is not the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#withdrawDeposit\", async () => {\n      let subjectDepositIds: BigNumber[];\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          await calculatePackedId(\"1\"),\n          usdc(50),\n          usdc(51)\n        );\n\n        const currentDepositCounter = await ramp.depositCounter();\n        const depositIdOne = BigNumber.from(currentDepositCounter.sub(2));\n        const depositIdTwo = BigNumber.from(currentDepositCounter.sub(1));\n\n        subjectDepositIds = [depositIdOne, depositIdTwo];\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).withdrawDeposit(subjectDepositIds);\n      }\n\n      it(\"should transfer the usdc to the caller\", async () => {\n        const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n      });\n\n      it(\"should delete the deposits\", async () => {\n        const preDepositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const preDepositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(preDepositOne.depositor).to.not.eq(ADDRESS_ZERO);\n        expect(preDepositTwo.depositor).to.not.eq(ADDRESS_ZERO);\n\n        await subject();\n\n        const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n        expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n      });\n\n      it(\"should remove the deposits from the depositors account info\", async () => {\n        const preAccountInfo = await ramp.getAccountInfo(subjectCaller.address);\n        expect(preAccountInfo.deposits[0]).to.eq(subjectDepositIds[0]);\n        expect(preAccountInfo.deposits[1]).to.eq(subjectDepositIds[1]);\n\n        await subject();\n\n        const accountInfo = await ramp.getAccountInfo(subjectCaller.address);\n\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[0]);\n        expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n      });\n\n      it(\"should emit a DepositWithdrawn event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[0],\n          offRamper.address,\n          usdc(100),\n        );\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[1],\n          offRamper.address,\n          usdc(50),\n        );\n      });\n\n      it(\"should emit DepositClosed events for both deposits\", async () => {\n        const tx = await subject();\n\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n      });\n\n      describe(\"when there is an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(onRamper.wallet).signalIntent(subjectDepositIds[0], usdc(50), receiver.address);\n        });\n\n        it(\"should transfer the correct amount of usdc to the caller\", async () => {\n          const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n          await subject();\n\n          const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n          expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(100)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(100)));\n        });\n\n        it(\"should zero out remainingDeposits on depositOne\", async () => {\n          await subject();\n\n          const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n\n          expect(depositOne.depositor).to.not.eq(ZERO_BYTES32);\n          expect(depositOne.intentHashes.length).to.eq(1);\n          expect(depositOne.remainingDeposits).to.eq(ZERO);\n          expect(depositOne.outstandingIntentAmount).to.eq(usdc(50));\n        });\n\n        it(\"should delete deposit two from deposits and account info\", async () => {\n          await subject();\n\n          const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n          const accountInfo = await ramp.getAccountInfo(offRamper.address);\n\n          expect(accountInfo.deposits).to.not.include(subjectDepositIds[1]);\n          expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n        });\n\n        it(\"should emit a DepositClosed event for deposit two\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        });\n\n        describe(\"but the intent is expired\", async () => {\n          beforeEach(async () => {\n            await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n          });\n\n          it(\"should transfer the correct amount of usdc to the caller\", async () => {\n            const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n            await subject();\n\n            const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n            expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n            expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n          });\n\n          it(\"should delete both deposits\", async () => {\n            await subject();\n\n            const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n            const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n            expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n            expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n          });\n\n          it(\"should delete the intent\", async () => {\n            const intentHash = (await ramp.getDeposit(subjectDepositIds[0])).intentHashes[0];\n\n            const preIntent = await ramp.intents(intentHash);\n            expect(preIntent.amount).to.eq(usdc(50));\n\n            await subject();\n\n            const postIntent = await ramp.intents(intentHash);\n\n            expect(postIntent.onRamper).to.eq(ADDRESS_ZERO);\n            expect(postIntent.deposit).to.eq(ZERO_BYTES32);\n            expect(postIntent.amount).to.eq(ZERO);\n            expect(postIntent.intentTimestamp).to.eq(ZERO);\n          });\n        });\n      });\n\n      describe(\"when the caller is not the offRamper\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#addAccountToDenylist\", async () => {\n      let subjectDeniedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectDeniedUser = await calculateIdHash(\"2\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).addAccountToDenylist(subjectDeniedUser);\n      }\n\n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectDeniedUser);\n\n        expect(deniedUsers).to.include(subjectDeniedUser);\n        expect(isDenied).to.be.true;\n      });\n\n      it(\"should emit a UserAddedToDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserAddedToDenylist\").withArgs(\n          await calculateIdHash(\"1\"),\n          await calculateIdHash(\"2\")\n        );\n      });\n\n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#removeAccountFromDenylist\", async () => {\n      let subjectApprovedUser: string;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).addAccountToDenylist(await calculateIdHash(\"2\"));\n\n        subjectApprovedUser = await calculateIdHash(\"2\");\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).removeAccountFromDenylist(subjectApprovedUser);\n      }\n\n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preDeniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n\n        expect(preDeniedUsers).to.include(subjectApprovedUser);\n\n        await subject();\n\n        const deniedUsers = await ramp.getDeniedUsers(subjectCaller.address);\n        const isDenied = await ramp.isDeniedUser(subjectCaller.address, subjectApprovedUser);\n\n        expect(deniedUsers).to.not.include(subjectApprovedUser);\n        expect(isDenied).to.be.false;\n      });\n\n      it(\"should emit a UserRemovedFromDenylist event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"UserRemovedFromDenylist\").withArgs(\n          await calculateIdHash(\"1\"),\n          await calculateIdHash(\"2\")\n        );\n      });\n\n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on denylist\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#setMinDepositAmount\", async () => {\n      let subjectMinDepositAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMinDepositAmount = usdc(10);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMinDepositAmount(subjectMinDepositAmount);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const depositAmount = await ramp.minDepositAmount();\n\n        expect(depositAmount).to.eq(subjectMinDepositAmount);\n      });\n\n      it(\"should emit a MinDepositAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MinDepositAmountSet\").withArgs(subjectMinDepositAmount);\n      });\n\n      describe(\"when the min deposit amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMinDepositAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Minimum deposit cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setMaxOnRampAmount\", async () => {\n      let subjectMaxOnRampAmount: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectMaxOnRampAmount = usdc(998);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setMaxOnRampAmount(subjectMaxOnRampAmount);\n      }\n\n      it(\"should set the correct max on ramp amount\", async () => {\n        const preMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(preMaxOnRampAmount).to.eq(usdc(999));\n\n        await subject();\n\n        const postMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n        expect(postMaxOnRampAmount).to.eq(subjectMaxOnRampAmount);\n      });\n\n      it(\"should emit a MaxOnRampAmountSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"MaxOnRampAmountSet\").withArgs(subjectMaxOnRampAmount);\n      });\n\n      describe(\"when the max amount is 0\", async () => {\n        beforeEach(async () => {\n          subjectMaxOnRampAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max on ramp amount cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setIntentExpirationPeriod\", async () => {\n      let subjectIntentExpirationPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectIntentExpirationPeriod = ONE_DAY_IN_SECONDS.mul(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setIntentExpirationPeriod(subjectIntentExpirationPeriod);\n      }\n\n      it(\"should set the correct expiration time period\", async () => {\n        const preOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.intentExpirationPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectIntentExpirationPeriod);\n      });\n\n      it(\"should emit a IntentExpirationPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"IntentExpirationPeriodSet\").withArgs(subjectIntentExpirationPeriod);\n      });\n\n      describe(\"when the intent expiration period is 0\", async () => {\n        beforeEach(async () => {\n          subjectIntentExpirationPeriod = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Max intent expiration period cannot be zero\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setOnRampCooldownPeriod\", async () => {\n      let subjectOnRampCoolDownPeriod: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectOnRampCoolDownPeriod = ONE_DAY_IN_SECONDS.div(2);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setOnRampCooldownPeriod(subjectOnRampCoolDownPeriod);\n      }\n\n      it(\"should set the correct cool down time period\", async () => {\n        const preOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n        await subject();\n\n        const postOnRampAmount = await ramp.onRampCooldownPeriod();\n\n        expect(postOnRampAmount).to.eq(subjectOnRampCoolDownPeriod);\n      });\n\n      it(\"should emit a OnRampCooldownPeriodSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"OnRampCooldownPeriodSet\").withArgs(subjectOnRampCoolDownPeriod);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFee\", async () => {\n      let subjectSustainabilityFee: BigNumber;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFee = ether(.002);\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFee(subjectSustainabilityFee);\n      }\n\n      it(\"should set the correct sustainability fee\", async () => {\n        const preSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(preSustainabilityFee).to.eq(ZERO);\n\n        await subject();\n\n        const postSustainabilityFee = await ramp.sustainabilityFee();\n\n        expect(postSustainabilityFee).to.eq(subjectSustainabilityFee);\n      });\n\n      it(\"should emit a SustainabilityFeeUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeUpdated\").withArgs(subjectSustainabilityFee);\n      });\n\n      describe(\"when the fee exceeds the max sustainability fee\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFee = ether(.1);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee cannot be greater than max fee\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSustainabilityFeeRecipient\", async () => {\n      let subjectSustainabilityFeeRecipient: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSustainabilityFeeRecipient = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSustainabilityFeeRecipient(subjectSustainabilityFeeRecipient);\n      }\n\n      it(\"should set the correct sustainability fee recipient\", async () => {\n        const preSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(preSustainabilityFeeRecipient).to.eq(feeRecipient.address);\n\n        await subject();\n\n        const postSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n        expect(postSustainabilityFeeRecipient).to.eq(subjectSustainabilityFeeRecipient);\n      });\n\n      it(\"should emit a SustainabilityFeeRecipientUpdated event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"SustainabilityFeeRecipientUpdated\").withArgs(subjectSustainabilityFeeRecipient);\n      });\n\n      describe(\"when the passed fee recipient is the zero address\", async () => {\n        beforeEach(async () => {\n          subjectSustainabilityFeeRecipient = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Fee recipient cannot be zero address\");\n        });\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setSendProcessor\", async () => {\n      let subjectSendProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectSendProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setSendProcessor(subjectSendProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newSendProcessor = await ramp.sendProcessor();\n\n        expect(newSendProcessor).to.eq(subjectSendProcessor);\n      });\n\n      it(\"should emit a NewSendProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewSendProcessorSet\").withArgs(subjectSendProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#setRegistrationProcessor\", async () => {\n      let subjectRegistrationProcessor: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectRegistrationProcessor = owner.address;\n        subjectCaller = owner;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).setRegistrationProcessor(subjectRegistrationProcessor);\n      }\n\n      it(\"should set the correct min deposit amount\", async () => {\n        await subject();\n\n        const newRegistrationProcessor = await ramp.registrationProcessor();\n\n        expect(newRegistrationProcessor).to.eq(subjectRegistrationProcessor);\n      });\n\n      it(\"should emit a NewRegistrationProcessorSet event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"NewRegistrationProcessorSet\").withArgs(subjectRegistrationProcessor);\n      });\n\n      describe(\"when the caller is not the owner\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n        });\n      });\n    });\n\n    describe(\"#getAccountDeposits\", async () => {\n      let subjectAccount: Address;\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateIdHash(\"2\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountDeposits(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(deposits[0].depositorIdHash).to.eq(await calculateIdHash(\"1\"));\n        expect(deposits[1].depositorIdHash).to.eq(await calculateIdHash(\"1\"));\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getDepositFromIds\", async () => {\n      let subjectDepositIds: BigNumber[];\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(102)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(await calculateIdHash(\"2\"), ONE, await blockchain.getCurrentTimestamp());\n\n        subjectDepositIds = [ZERO, ONE];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getDepositFromIds(subjectDepositIds);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(101));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(102));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(deposits[0].depositorIdHash).to.eq(await calculateIdHash(\"1\"));\n        expect(deposits[1].depositorIdHash).to.eq(await calculateIdHash(\"1\"));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getIntentsWithOnRamperId\", async () => {\n      let subjectIntentHashes: string[];\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        const intentHashOne = calculateIntentHash(await calculateIdHash(\"2\"), ZERO, await blockchain.getCurrentTimestamp());\n        await ramp.connect(onRamperTwo.wallet).signalIntent(ZERO, usdc(40), receiver.address);\n        const intentHashTwo = calculateIntentHash(await calculateIdHash(\"3\"), ZERO, await blockchain.getCurrentTimestamp());\n\n        subjectIntentHashes = [intentHashOne, intentHashTwo];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIntentsWithOnRamperId(subjectIntentHashes);\n      }\n\n      it(\"should return the expected intents\", async () => {\n        const intents = await subject();\n\n        expect(intents[0].intent.onRamper).to.eq(onRamper.address);\n        expect(intents[1].intent.onRamper).to.eq(onRamperTwo.address);\n        expect(intents[0].intent.deposit).to.eq(ZERO);\n        expect(intents[1].intent.deposit).to.eq(ZERO);\n        expect(intents[0].intent.amount).to.eq(usdc(50));\n        expect(intents[1].intent.amount).to.eq(usdc(40));\n        expect(intents[0].onRamperIdHash).to.eq(await calculateIdHash(\"2\"));\n        expect(intents[1].onRamperIdHash).to.eq(await calculateIdHash(\"3\"));\n        expect(intents[0].intentHash).to.eq(subjectIntentHashes[0]);\n        expect(intents[1].intentHash).to.eq(subjectIntentHashes[1]);\n      });\n    });\n\n    describe(\"#getAccountInfo\", async () => {\n      let subjectAccount: Address;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          calculatePackedId(\"1\"),\n          usdc(100),\n          usdc(101)\n        );\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountInfo(subjectAccount);\n      }\n\n      it(\"should return the expected account info\", async () => {\n        const accountInfo = await subject();\n\n        expect(accountInfo.venmoIdHash).to.eq(await calculateIdHash(\"1\"));\n        expect(accountInfo.deposits[0]).to.eq(ZERO);\n      });\n\n      describe(\"when the account is not registered on either ramp contract\", async () => {\n        beforeEach(async () => {\n          subjectAccount = unregisteredUser.address;\n        });\n\n        it(\"should return a null hash\", async () => {\n          const accountInfo = await subject();\n\n          expect(accountInfo.venmoIdHash).to.eq(ZERO_BYTES32);\n          expect(accountInfo.deposits.length).to.eq(0);\n        });\n      });\n\n      describe(\"when the account is registered with the old ramp contract but deposit made on new one\", async () => {\n        let signalsOffRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n    \n          signalsOffRamp = [ZERO, BigNumber.from(await calculateIdHash(\"4\")), ZERO, ZERO, ZERO];\n\n          await oldRamp.connect(owner.wallet).initialize(\n            registrationProcessor.address,\n            sendProcessor.address,\n          );\n\n          await oldRamp.connect(oldRampUser.wallet).register(\n            _a,\n            _b,\n            _c,\n            signalsOffRamp\n          );\n\n          await usdcToken.transfer(oldRampUser.address, usdc(10000));\n          await usdcToken.connect(oldRampUser.wallet).approve(ramp.address, usdc(10000));\n\n          await ramp.connect(oldRampUser.wallet).offRamp(\n            calculatePackedId(\"4\"),\n            usdc(100),\n            usdc(101)\n          );\n\n          subjectAccount = oldRampUser.address;\n        });\n\n        it(\"should return the correct id hash\", async () => {\n          const accountInfo = await subject();\n\n          expect(accountInfo.venmoIdHash).to.eq(await calculateIdHash(\"4\"));\n          expect(accountInfo.deposits[0]).to.eq(ONE);\n        });\n      });\n    });\n\n    describe(\"#getAccountVenmoIdHash\", async () => {\n      let subjectAccount: Address;\n\n      beforeEach(async () => {\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountVenmoIdHash(subjectAccount);\n      }\n\n      it(\"should return the expected venmoIdHash\", async () => {\n        const venmoIdHash = await subject();\n\n        expect(venmoIdHash).to.eq(await calculateIdHash(\"1\"));\n      });\n\n      describe(\"when the account is not registered on either ramp contract\", async () => {\n        beforeEach(async () => {\n          subjectAccount = unregisteredUser.address;\n        });\n\n        it(\"should return a null hash\", async () => {\n          const venmoIdHash = await subject();\n\n          expect(venmoIdHash).to.eq(ZERO_BYTES32);\n        });\n      });\n\n      describe(\"when the account is registered with the old ramp contract\", async () => {\n        let signalsOffRamp: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];\n\n        beforeEach(async () => {\n          const _a: [BigNumber, BigNumber] = [ZERO, ZERO];\n          const _b: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [[ZERO, ZERO], [ZERO, ZERO]];\n          const _c: [BigNumber, BigNumber] = [ZERO, ZERO];\n    \n          signalsOffRamp = [ZERO, BigNumber.from(await calculateIdHash(\"4\")), ZERO, ZERO, ZERO];\n\n          await oldRamp.connect(owner.wallet).initialize(\n            registrationProcessor.address,\n            sendProcessor.address,\n          );\n\n          await oldRamp.connect(oldRampUser.wallet).register(\n            _a,\n            _b,\n            _c,\n            signalsOffRamp\n          );\n\n          subjectAccount = oldRampUser.address;\n        });\n\n        it(\"should return the correct id hash\", async () => {\n          const venmoIdHash = await subject();\n\n          expect(venmoIdHash).to.eq(await calculateIdHash(\"4\"));\n        });\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/venmo-v2/venmoRegistrationProcessorV2.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapterV2, NullifierRegistry, VenmoRegistrationProcessorV2 } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address } from \"@utils/types\";\nimport { createTypedRegistrationProof } from \"@utils/protocolUtils\";\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\nconst rawSignals = [\"0x2ea3f223adbee4865e0cbfa3a6e748b1505a0094fd92c53d3d0dd2d4b0cd19d3\",\"0x0000000000000000000000000000000000000000000000000076406f6d6e6576\",\"0x000000000000000000000000000000000000000000000000006f632e6f6d6e65\",\"0x000000000000000000000000000000000000000000000000000000000000006d\",\"0x0741728e3aae72eda484e8ccbf00f843c38eae9c399b9bd7fb2b5ee7a055b6bf\"];\n\ndescribe(\"VenmoRegistrationProcessorV2\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n  let nullifierRegistry: NullifierRegistry;\n  let registrationProcessor: VenmoRegistrationProcessorV2;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([rawSignals[0]]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    registrationProcessor = await deployer.deployVenmoRegistrationProcessorV2(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      \"venmo@venmo.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(registrationProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await registrationProcessor.ramp();\n      const venmoMailserverKeyHashAdapter = await registrationProcessor.mailServerKeyHashAdapter();\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoMailserverKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"venmo@venmo.com\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: any;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = createTypedRegistrationProof(\n        [\"0x1faec667c8e8ae6b39abfbc905ea972aa0c3b4f581ee3107a1b19ced1f72bd7b\", \"0x1ca0438a01be1429a12a757e237df2c4a69eb4a46977a0f944e1ac467d47b937\"],\n        [[\"0x108568979f0d2fe27af79a8db081a2af111c259005b7b57876693f8a992111b4\", \"0x002c315d6aa2ce84cebd938d807dcea391a64c5d37d418f27459b02f51b3364a\"],[\"0x0f267747d018923c95e39a75ca4297389e9f5033eb4d1f9852bd77e92ef40bd3\", \"0x24f5c7a3dc99ed222ae8e16b8cbee53bd88897185f4e039a2685d72e77958dd0\"]],\n        [\"0x0b928a6d940502b856ff8a30fbd838a61aa31dec2c24cdfe9899a9be1612d797\", \"0x0e62ee8580746c8452532528511faa77f88f894c33b255b04456b9b173f803f6\"],\n        rawSignals\n      );\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const onRamperIdHash = await subjectCallStatic();\n\n      expect(onRamperIdHash).to.eq(subjectProof.signals[4]);\n    });\n\n    it(\"should add the hash of the proof inputs to the nullifier registry\", async () => {\n      await subject();\n\n      const expectedNullifier = ethers.utils.keccak256(\n        abiCoder.encode(\n          [\"tuple(uint256[2],uint256[2][2],uint256[2],uint256[5])\"],\n          [[subjectProof.a, subjectProof.b, subjectProof.c, subjectProof.signals]]\n        )\n      );\n      const isNullified = await nullifierRegistry.isNullified(expectedNullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the email has been used previously\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await registrationProcessor.setEmailFromAddress(\"bad-venmo@venmo.com\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.removeMailServerKeyHash(rawSignals[0]);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await registrationProcessor.mailServerKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-venmo@venmo.com\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await registrationProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-venmo@venmo.com\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await registrationProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/venmo-v2/venmoSendProcessorV2.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { ManagedKeyHashAdapterV2, NullifierRegistry, VenmoSendProcessorV2 } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\nimport { GrothProof } from \"@utils/types\";\nimport { createTypedSendProof } from \"@utils/protocolUtils\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { usdc } from \"@utils/common\";\n\nconst expect = getWaffleExpect();\n\nconst rawSignals = [\"0x2ea3f223adbee4865e0cbfa3a6e748b1505a0094fd92c53d3d0dd2d4b0cd19d3\",\"0x0000000000000000000000000000000000000000000000000076406f6d6e6576\",\"0x000000000000000000000000000000000000000000000000006f632e6f6d6e65\",\"0x000000000000000000000000000000000000000000000000000000000000006d\",\"0x0000000000000000000000000000000000000000000000000000000030302e31\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"0x0000000000000000000000000000000000000000000000000034373430323731\",\"0x0000000000000000000000000000000000000000000000000000000000383238\",\"0x29382ba0868fe29ecd3ea0681bcae58446512506b77a2d9a97b10f98e7dd0fed\",\"0x0741728e3aae72eda484e8ccbf00f843c38eae9c399b9bd7fb2b5ee7a055b6bf\",\"0x2853e9d887ea6659f8ef759f9b3a7ba9ce2e5a9a64d0c19d689199a57b16490e\",\"0x0000000000000000000000000000000000000000000000000000000000003039\"];\n\ndescribe(\"VenmoSendProcessorV2\", () => {\n  let owner: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let keyHashAdapter: ManagedKeyHashAdapterV2;\n  let nullifierRegistry: NullifierRegistry;\n  let sendProcessor: VenmoSendProcessorV2;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    keyHashAdapter = await deployer.deployManagedKeyHashAdapterV2([rawSignals[0]]);\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n    sendProcessor = await deployer.deployVenmoSendProcessorV2(\n      ramp.address,\n      keyHashAdapter.address,\n      nullifierRegistry.address,\n      \"venmo@venmo.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(sendProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await sendProcessor.ramp();\n      const venmoKeyHashAdapter = await sendProcessor.mailServerKeyHashAdapter();\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(venmoKeyHashAdapter).to.deep.equal(keyHashAdapter.address);\n      expect(ethers.utils.toUtf8Bytes(\"venmo@venmo.com\")).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: GrothProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = createTypedSendProof(\n        [\"0x0ef021063069a201fc0a18c75d1e5c416d8325a394f2bc26a022a77bb6ee142e\", \"0x23a720f18295af568cca4c4475830cb39bb30970d56ec89548972d16419d1534\"],\n        [[\"0x209ad56183c84729f598604a07514bddfc6037a7f762622595d434f19a843bb1\", \"0x055b12d60623f5fd2dbd6c862b928bc9ddd1d0ae68a5dde91f3aa98b762d5216\"],[\"0x2d444a7965fb75c22ece81dc2e752c38645ae5d2db665997c243200d53cecd22\", \"0x1c059913e6e4b4a2bcaea29679d3d692298ed08cf1d9d38fb8b688553342dd1d\"]],\n        [\"0x1a188bd46a3eff12a4cbd684783d7c18163845bf2a8410e9c38c145d42e199e0\", \"0x250783c44dff509251f089497c78f2daabbb8c4230b4c9bef84da406c375f322\"],\n        rawSignals\n      );\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const {\n        amount,\n        timestamp,\n        offRamperIdHash,\n        onRamperIdHash,\n        intentHash\n      } = await subjectCallStatic();\n\n      expect(amount).to.eq(usdc(1));\n      expect(timestamp).to.eq(BigNumber.from(1720474828).add(30));  // 30s is default timestamp buffer\n      expect(offRamperIdHash).to.eq(rawSignals[8]);\n      expect(onRamperIdHash).to.eq(rawSignals[9]);\n      expect(intentHash).to.eq(rawSignals[11]);\n    });\n\n    it(\"should add the email to the nullifier mapping\", async () => {\n      await subject();\n\n      const isNullified = await nullifierRegistry.isNullified(subjectProof.signals[10].toHexString());\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.signals[0] = BigNumber.from(\"0x0000000000000000000000000000000000000000000000000076406f6d6e6476\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid Proof\");\n      });\n    });\n\n    describe(\"when the email is from an invalid venmo address\", async () => {\n      beforeEach(async () => {\n        await sendProcessor.setEmailFromAddress(\"bad-venmo@venmo.com\".padEnd(21, \"\\0\"));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid email from address\");\n      });\n    });\n\n    describe(\"when the rsa modulus doesn't match\", async () => {\n      beforeEach(async () => {\n        await keyHashAdapter.removeMailServerKeyHash(rawSignals[0]);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid mailserver key hash\");\n      });\n    });\n\n    describe(\"when the e-mail was used previously\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setMailserverKeyHashAdapter\", async () => {\n    let subjectVenmoMailserverKeyHashAdapter: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVenmoMailserverKeyHashAdapter = attacker.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setMailserverKeyHashAdapter(subjectVenmoMailserverKeyHashAdapter);\n    }\n\n    it(\"should set the correct venmo keys\", async () => {\n      await subject();\n\n      const venmoKeyHashAdapter = await sendProcessor.mailServerKeyHashAdapter();\n      expect(venmoKeyHashAdapter).to.equal(subjectVenmoMailserverKeyHashAdapter);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setEmailFromAddress\", async () => {\n    let subjectEmailFromAddress: string;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectEmailFromAddress = \"new-venmo@venmo.com\".padEnd(21, \"\\0\");\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setEmailFromAddress(subjectEmailFromAddress);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const emailFromAddress = await sendProcessor.getEmailFromAddress();\n\n      expect(ethers.utils.toUtf8Bytes(\"new-venmo@venmo.com\".padEnd(21, \"\\0\"))).to.deep.equal(ethers.utils.arrayify(emailFromAddress));\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await sendProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/wise/wiseAccountRegistrationProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { NullifierRegistry, WiseAccountRegistrationProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address, WiseRegistrationData, WiseRegistrationProof } from \"@utils/types\";\nimport { calculateWiseId, calculateWiseTagHash } from \"@utils/protocolUtils\";\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\ndescribe(\"WiseAccountRegistrationProcessor\", () => {\n  let owner: Account;\n  let verifier: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let nullifierRegistry: NullifierRegistry;\n  let registrationProcessor: WiseAccountRegistrationProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      verifier,\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n\n    registrationProcessor = await deployer.deployWiseAccountRegistrationProcessor(\n      ramp.address,\n      verifier.address,\n      nullifierRegistry.address,\n      \"POST https://wise.com/gateway/v1/payments\",\n      \"wise.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(registrationProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await registrationProcessor.ramp();\n      const nullifierRegistryAddress = await registrationProcessor.nullifierRegistry();\n      const actualVerifier = await registrationProcessor.verifierSigningKey();\n      const actualEndpoint = await registrationProcessor.endpoint();\n      const actualHost = await registrationProcessor.host();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(nullifierRegistryAddress).to.eq(nullifierRegistry.address);\n\n      expect(\"POST https://wise.com/gateway/v1/payments\").to.deep.equal(actualEndpoint);\n      expect(verifier.address).to.deep.equal(actualVerifier);\n      expect(\"wise.com\").to.deep.equal(actualHost);\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: WiseRegistrationProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectProof = {\n        public_values: {\n          endpoint: \"POST https://wise.com/gateway/v1/payments\",\n          host: \"wise.com\",\n          profileId: \"41213881\",\n          wiseTagHash: \"61158579531006309039872672420732308054473459091416465738091051601559791768344\",\n          userAddress: \"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\"\n        } as WiseRegistrationData,\n        proof: \"0xe8d9937381ea1a4e4079d1007edc3d63fbeeb62b5759c9259f1c11b671ef8b7014fb621bea79abfe22aa3d29a77d2601adb25b55890c2f3e1f9f436870d549b61b\"\n      } as WiseRegistrationProof;\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const [ onRamperId, wiseTagHash ] = await subjectCallStatic();\n\n      expect(onRamperId).to.eq(calculateWiseId(subjectProof.public_values.profileId));\n      expect(wiseTagHash).to.eq(BigNumber.from(subjectProof.public_values.wiseTagHash).toHexString());\n    });\n\n    it(\"should add the hash of the proof inputs to the nullifier registry\", async () => {\n      await subject();\n\n      const expectedNullifier = ethers.utils.keccak256(\n        abiCoder.encode(\n          [\"address\", \"string\"],\n          [subjectProof.public_values.userAddress, subjectProof.public_values.profileId]\n        )\n      );\n\n      const isNullified = await nullifierRegistry.isNullified(expectedNullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the profile has already been verified\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.wiseTagHash = calculateWiseTagHash(\"snakamoto1234\");\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid proof\");\n      });\n    });\n\n    describe(\"when the TLS proof is for a different endpoint\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.endpoint = \"GET https://wise.com/gateway/v4/profiles/41213881\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"address\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.profileId,\n            subjectProof.public_values.wiseTagHash,\n            subjectProof.public_values.userAddress\n          ]\n        );\n\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Endpoint does not match expected\");\n      });\n    });\n\n    describe(\"when the host doesn't match\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.host = \"api.wise.com\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"address\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.profileId,\n            subjectProof.public_values.wiseTagHash,\n            subjectProof.public_values.userAddress\n          ]\n        );\n\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Host does not match expected\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setVerifierSigningKey\", async () => {\n    let subjectVerifierSigningKey: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVerifierSigningKey = verifier.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setVerifierSigningKey(subjectVerifierSigningKey);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const actualVerifier = await registrationProcessor.verifierSigningKey();\n\n      expect(actualVerifier).to.equal(subjectVerifierSigningKey);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await registrationProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/wise/wiseAccountRegistry.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport {\n  Address,\n  WiseOffRamperRegistrationData,\n  WiseOffRamperRegistrationProof,\n  WiseRegistrationData,\n  WiseRegistrationProof,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  WiseAccountRegistry,\n  USDCMock,\n  WiseAccountRegistrationProcessorMock,\n  WiseOffRamperRegistrationProcessorMock,\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { usdc } from \"@utils/common\";\nimport { BigNumber } from \"ethers\";\nimport { calculateWiseId, calculateWiseTagHash } from \"@utils/protocolUtils\";\n\nconst expect = getWaffleExpect();\n\ndescribe(\"WiseAccountRegistry\", () => {\n  let owner: Account;\n  let offRamper: Account;\n  let onRamper: Account;\n  let unregisteredUser: Account;\n\n  let accountRegistry: WiseAccountRegistry;\n  let usdcToken: USDCMock;\n  let accountRegistrationProcessor: WiseAccountRegistrationProcessorMock;\n  let offRamperRegistrationProcessor: WiseOffRamperRegistrationProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      offRamper,\n      onRamper,\n      unregisteredUser,\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n    accountRegistrationProcessor = await deployer.deployWiseAccountRegistrationProcessorMock();\n    offRamperRegistrationProcessor = await deployer.deployWiseOffRamperRegistrationProcessorMock();\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    accountRegistry = await deployer.deployWiseAccountRegistry(\n      owner.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await accountRegistry.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectAccountRegistrationProcessor: Address;\n    let subjectOffRamperRegistrationProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectAccountRegistrationProcessor = accountRegistrationProcessor.address;\n      subjectOffRamperRegistrationProcessor = offRamperRegistrationProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return accountRegistry.connect(subjectCaller.wallet).initialize(\n        subjectAccountRegistrationProcessor,\n        subjectOffRamperRegistrationProcessor,\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const accountRegistrationProcessorAddress: Address = await accountRegistry.accountRegistrationProcessor();\n      const offRamperRegistrationProcessorAddress: Address = await accountRegistry.offRamperRegistrationProcessor();\n\n      expect(accountRegistrationProcessorAddress).to.eq(accountRegistrationProcessor.address);\n      expect(offRamperRegistrationProcessorAddress).to.eq(offRamperRegistrationProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = offRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#register\", async () => {\n    let subjectProof: WiseRegistrationProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      await accountRegistry.initialize(\n        accountRegistrationProcessor.address,\n        offRamperRegistrationProcessor.address\n      );\n\n      const registerPublicValues = {\n        endpoint: \"GET https://api.transferwise.com/v4/profiles/41246868/multi-currency-account\",\n        host: \"api.transferwise.com\",\n        profileId: \"405394441\",\n        wiseTagHash: calculateWiseTagHash(\"jdoe1234\"),\n        userAddress: offRamper.address\n      } as WiseRegistrationData\n\n      subjectProof = {\n        public_values: registerPublicValues,\n        proof: \"0x\"\n      } as WiseRegistrationProof;\n\n      subjectCaller = offRamper;\n    });\n\n    async function subject(): Promise<any> {\n      return accountRegistry.connect(subjectCaller.wallet).register(subjectProof);\n    }\n\n    it(\"should register the caller\", async () => {\n      await subject();\n      const accountInfo = await accountRegistry.getAccountInfo(subjectCaller.address);\n\n      expect(accountInfo.accountId).to.eq(calculateWiseId(subjectProof.public_values.profileId));\n      expect(accountInfo.wiseTagHash).to.eq(BigNumber.from(subjectProof.public_values.wiseTagHash).toHexString());\n    });\n\n    it(\"should emit an AccountRegistered event\", async () => {\n      await expect(subject()).to.emit(accountRegistry, \"AccountRegistered\").withArgs(\n        subjectCaller.address,\n        calculateWiseId(subjectProof.public_values.profileId),\n        calculateWiseId(subjectProof.public_values.wiseTagHash)\n      );\n    });\n\n    describe(\"when the caller is not the address signed by verifier\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.userAddress = onRamper.address;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Caller must be address specified in proof\");\n      });\n    });\n\n    describe(\"when the caller is already registered\", async () => {\n      beforeEach(async () => {\n        await subject();\n\n        subjectProof.public_values.profileId = \"455324471\";\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Account already associated with accountId\");\n      });\n    });\n  });\n\n  context(\"when the user is registered\", async () => {\n    let offRamperProof: WiseRegistrationProof;\n    let onRamperProof: WiseRegistrationProof;\n\n    beforeEach(async () => {\n      await accountRegistry.initialize(\n        accountRegistrationProcessor.address,\n        offRamperRegistrationProcessor.address\n      );\n\n      const standardRegistrationData: WiseRegistrationData = {\n        endpoint: \"GET https://api.transferwise.com/v4/profiles/41246868/multi-currency-account\",\n        host: \"api.transferwise.com\",\n        profileId: \"\",\n        wiseTagHash: \"\",\n        userAddress: \"\"\n      }\n      offRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      offRamperProof.public_values.profileId = \"012345678\";\n      offRamperProof.public_values.wiseTagHash = calculateWiseTagHash(\"jdoe1234\");\n      offRamperProof.public_values.userAddress = offRamper.address;\n      onRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      onRamperProof.public_values.profileId = \"123456789\";\n      onRamperProof.public_values.userAddress = onRamper.address;\n\n      await accountRegistry.connect(offRamper.wallet).register(offRamperProof);\n    });\n\n    describe(\"#registerAsOffRamper\", async () => {\n      let subjectProof: WiseOffRamperRegistrationProof;\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        const registerPublicValues = {\n          endpoint: \"GET https://api.transferwise.com/v4/profiles/41246868/multi-currency-account\",\n          host: \"api.transferwise.com\",\n          profileId: \"012345678\",\n          mcAccountId: \"402767982\"\n        } as WiseOffRamperRegistrationData\n  \n        subjectProof = { public_values: registerPublicValues, proof: \"0x\"};\n  \n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).registerAsOffRamper(\n          subjectProof\n        );\n      }\n  \n      it(\"should register the caller\", async () => {\n        await subject();\n        const accountInfo = await accountRegistry.getAccountInfo(subjectCaller.address);\n  \n        expect(accountInfo.accountId).to.eq(calculateWiseId(subjectProof.public_values.profileId));\n        expect(accountInfo.offRampId).to.eq(calculateWiseId(subjectProof.public_values.mcAccountId));\n      });\n  \n      it(\"should emit an OffRamperRegistered event\", async () => {\n        await expect(subject()).to.emit(accountRegistry, \"OffRamperRegistered\").withArgs(\n          subjectCaller.address,\n          calculateWiseId(subjectProof.public_values.profileId),\n          calculateWiseId(subjectProof.public_values.mcAccountId)\n        );\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n  \n      describe(\"when the profileId doesn't match the registered profileId for the account\", async () => {\n        beforeEach(async () => {\n          subjectProof.public_values.profileId = \"454389071\";\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"AccountId does not match\");\n        });\n      });\n  \n      describe(\"when the caller is already registered\", async () => {\n        beforeEach(async () => {\n          await subject();\n  \n          subjectProof.public_values.profileId = \"455324471\";\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Account already associated with offRampId\");\n        });\n      });\n    });\n  \n    describe(\"#addAccountToDenylist\", async () => {\n      let subjectDeniedUser: string;\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        subjectDeniedUser = calculateWiseId(onRamperProof.public_values.profileId);\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).addAccountToDenylist(subjectDeniedUser);\n      }\n  \n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n  \n        const deniedUsers = await accountRegistry.getDeniedUsers(subjectCaller.address);\n        const isDenied = await accountRegistry.isDeniedUser(subjectCaller.address, subjectDeniedUser);\n  \n        expect(deniedUsers).to.include(subjectDeniedUser);\n        expect(isDenied).to.be.true;\n      });\n  \n      it(\"should emit a UserAddedToDenylist event\", async () => {\n        const tx = await subject();\n  \n        expect(tx).to.emit(accountRegistry, \"UserAddedToDenylist\").withArgs(\n          calculateWiseId(offRamperProof.public_values.profileId),\n          calculateWiseId(onRamperProof.public_values.profileId)\n        );\n      });\n  \n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on denylist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n  \n    describe(\"#removeAccountFromDenylist\", async () => {\n      let subjectApprovedUser: string;\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        await accountRegistry.connect(offRamper.wallet).addAccountToDenylist(calculateWiseId(onRamperProof.public_values.profileId));\n  \n        subjectApprovedUser = calculateWiseId(onRamperProof.public_values.profileId);\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).removeAccountFromDenylist(subjectApprovedUser);\n      }\n  \n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preDeniedUsers = await accountRegistry.getDeniedUsers(subjectCaller.address);\n  \n        expect(preDeniedUsers).to.include(subjectApprovedUser);\n  \n        await subject();\n  \n        const deniedUsers = await accountRegistry.getDeniedUsers(subjectCaller.address);\n        const isDenied = await accountRegistry.isDeniedUser(subjectCaller.address, subjectApprovedUser);\n  \n        expect(deniedUsers).to.not.include(subjectApprovedUser);\n        expect(isDenied).to.be.false;\n      });\n  \n      it(\"should emit a UserRemovedFromDenylist event\", async () => {\n        const tx = await subject();\n  \n        expect(tx).to.emit(accountRegistry, \"UserRemovedFromDenylist\").withArgs(\n          calculateWiseId(offRamperProof.public_values.profileId),\n          calculateWiseId(onRamperProof.public_values.profileId)\n        );\n      });\n  \n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on denylist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#enableAllowlist\", async () => {\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).enableAllowlist();\n      }\n  \n      it(\"should add the denied user to the denier's array and update mapping\", async () => {\n        await subject();\n  \n        const isEnabled = await accountRegistry.isAllowlistEnabled(subjectCaller.address);\n  \n        expect(isEnabled).to.be.true;\n      });\n  \n      it(\"should emit a AllowlistEnabled event\", async () => {\n        const tx = await subject();\n        \n        const allowingId = await accountRegistry.getAccountId(subjectCaller.address);\n\n        expect(tx).to.emit(accountRegistry, \"AllowlistEnabled\").withArgs(allowingId);\n      });\n  \n      describe(\"when the allow list is already enabled\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Allow list already enabled\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#addAccountsToAllowlist\", async () => {\n      let subjectAllowedUsers: string[];\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        await accountRegistry.connect(offRamper.wallet).enableAllowlist();\n\n        subjectAllowedUsers = [calculateWiseId(onRamperProof.public_values.profileId), calculateWiseId(\"1111111\")];\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).addAccountsToAllowlist(subjectAllowedUsers);\n      }\n  \n      it(\"should add the allowed user to the allower's array and update mapping\", async () => {\n        await subject();\n  \n        const allowedUsers = await accountRegistry.getAllowedUsers(subjectCaller.address);\n        const isAllowedOne = await accountRegistry.isAllowedUser(subjectCaller.address, subjectAllowedUsers[0]);\n        const isAllowedTwo = await accountRegistry.isAllowedUser(subjectCaller.address, subjectAllowedUsers[1]);\n  \n        expect(allowedUsers).to.include(subjectAllowedUsers[0]);\n        expect(allowedUsers).to.include(subjectAllowedUsers[1]);\n        expect(isAllowedOne).to.be.true;\n        expect(isAllowedTwo).to.be.true;\n      });\n  \n      it(\"should emit a UserAddedToAllowlist event\", async () => {\n        const tx = await subject();\n  \n        expect(tx).to.emit(accountRegistry, \"UserAddedToAllowlist\").withArgs(\n          calculateWiseId(offRamperProof.public_values.profileId),\n          calculateWiseId(onRamperProof.public_values.profileId)\n        );\n\n        expect(tx).to.emit(accountRegistry, \"UserAddedToAllowlist\").withArgs(\n          calculateWiseId(offRamperProof.public_values.profileId),\n          calculateWiseId(\"1111111\")\n        );\n      });\n  \n      describe(\"when the denied user is already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User already on allowlist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#removeAccountsFromAllowlist\", async () => {\n      let subjectRemovedUsers: string[];\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {\n        await accountRegistry.connect(offRamper.wallet).enableAllowlist();\n\n        await accountRegistry.connect(offRamper.wallet).addAccountsToAllowlist(\n          [calculateWiseId(onRamperProof.public_values.profileId), calculateWiseId(\"1111111\")]\n        );\n  \n        subjectRemovedUsers = [calculateWiseId(onRamperProof.public_values.profileId), calculateWiseId(\"1111111\")];\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).removeAccountsFromAllowlist(subjectRemovedUsers);\n      }\n  \n      it(\"should remove the denied user from the denier's array and update mapping\", async () => {\n        const preAllowedUsers = await accountRegistry.getAllowedUsers(subjectCaller.address);\n  \n        expect(preAllowedUsers).to.include(subjectRemovedUsers[0]);\n        expect(preAllowedUsers).to.include(subjectRemovedUsers[1]);\n  \n        await subject();\n  \n        const allowedUsers = await accountRegistry.getAllowedUsers(subjectCaller.address);\n        const isAllowedOne = await accountRegistry.isAllowedUser(subjectCaller.address, subjectRemovedUsers[0]);\n        const isAllowedTwo = await accountRegistry.isAllowedUser(subjectCaller.address, subjectRemovedUsers[1]);\n\n        expect(allowedUsers).to.not.include(subjectRemovedUsers[0]);\n        expect(allowedUsers).to.not.include(subjectRemovedUsers[1]);\n        expect(isAllowedOne).to.be.false;\n        expect(isAllowedTwo).to.be.false;\n      });\n  \n      it(\"should emit a UserRemovedFromAllowlist event\", async () => {\n        const tx = await subject();\n  \n        expect(tx).to.emit(accountRegistry, \"UserRemovedFromAllowlist\").withArgs(\n          calculateWiseId(offRamperProof.public_values.profileId),\n          calculateWiseId(onRamperProof.public_values.profileId)\n        );\n\n        expect(tx).to.emit(accountRegistry, \"UserRemovedFromAllowlist\").withArgs(\n          calculateWiseId(offRamperProof.public_values.profileId),\n          calculateWiseId(\"1111111\")\n        );\n      });\n  \n      describe(\"when the denied user is not already on the denylist\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"User not on allowlist\");\n        });\n      });\n  \n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n  \n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n    });\n\n    describe(\"#isAllowedUser\", async () => {\n      let subjectAccount: Address;\n      let subjectAllowedUser: string;\n      let subjectCaller: Account;\n  \n      beforeEach(async () => {  \n        subjectAccount = offRamper.address;\n        subjectAllowedUser = calculateWiseId(onRamperProof.public_values.profileId);\n        subjectCaller = offRamper;\n      });\n  \n      async function subject(): Promise<any> {\n        return accountRegistry.connect(subjectCaller.wallet).isAllowedUser(subjectAccount, subjectAllowedUser);\n      }\n  \n      it(\"should allow the user since the allow list is not enabled and the user is not on the deny list\", async () => {  \n        const isAllowed = await subject();\n  \n        expect(isAllowed).to.be.true;\n      });\n\n      describe(\"when the allow list is enabled\", async () => {\n        beforeEach(async () => {\n          await accountRegistry.connect(offRamper.wallet).enableAllowlist();\n        });\n\n        it(\"should return false because the user hasn't been added to the allow list\", async () => {\n          const isAllowed = await subject();\n\n          expect(isAllowed).to.be.false;\n        });\n\n        describe(\"when the user is on the allow list\", async () => {\n          beforeEach(async () => {\n            await accountRegistry.connect(offRamper.wallet).addAccountsToAllowlist([subjectAllowedUser]);\n          });\n\n          it(\"should return true\", async () => {\n            const isAllowed = await subject();\n\n            expect(isAllowed).to.be.true;\n          });\n\n          describe(\"when the user is on the deny list\", async () => {\n            beforeEach(async () => {\n              await accountRegistry.connect(offRamper.wallet).addAccountToDenylist(subjectAllowedUser);\n            });\n\n            it(\"should return false\", async () => {\n              const isAllowed = await subject();\n\n              expect(isAllowed).to.be.false;\n            });\n          });\n        });\n      });\n    });\n  });\n\n  describe(\"#setAccountRegistrationProcessor\", async () => {\n    let subjectRegistrationProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectRegistrationProcessor = owner.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return accountRegistry.connect(subjectCaller.wallet).setAccountRegistrationProcessor(subjectRegistrationProcessor);\n    }\n\n    it(\"should set the correct account registration processor\", async () => {\n      await subject();\n\n      const newRegistrationProcessor = await accountRegistry.accountRegistrationProcessor();\n\n      expect(newRegistrationProcessor).to.eq(subjectRegistrationProcessor);\n    });\n\n    it(\"should emit a NewAccountRegistrationProcessorSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(accountRegistry, \"NewAccountRegistrationProcessorSet\").withArgs(subjectRegistrationProcessor);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = offRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setOffRamperRegistrationProcessor\", async () => {\n    let subjectRegistrationProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectRegistrationProcessor = owner.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return accountRegistry.connect(subjectCaller.wallet).setOffRamperRegistrationProcessor(subjectRegistrationProcessor);\n    }\n\n    it(\"should set the correct off ramper registration processor\", async () => {\n      await subject();\n\n      const newRegistrationProcessor = await accountRegistry.offRamperRegistrationProcessor();\n\n      expect(newRegistrationProcessor).to.eq(subjectRegistrationProcessor);\n    });\n\n    it(\"should emit a NewOffRamperRegistrationProcessorSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(accountRegistry, \"NewOffRamperRegistrationProcessorSet\").withArgs(subjectRegistrationProcessor);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = offRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/wise/wiseOffRamperRegistrationProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { NullifierRegistry, WiseOffRamperRegistrationProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address, WiseOffRamperRegistrationProof } from \"@utils/types\";\nimport { calculateWiseId } from \"@utils/protocolUtils\";\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\ndescribe(\"WiseOffRamperRegistrationProcessor\", () => {\n  let owner: Account;\n  let verifier: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let nullifierRegistry: NullifierRegistry;\n  let registrationProcessor: WiseOffRamperRegistrationProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      verifier,\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n\n    registrationProcessor = await deployer.deployWiseOffRamperRegistrationProcessor(\n      ramp.address,\n      verifier.address,\n      nullifierRegistry.address,\n      \"GET https://wise.com/gateway/v3/profiles/*/transfers\",\n      \"wise.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(registrationProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await registrationProcessor.ramp();\n      const nullifierRegistryAddress = await registrationProcessor.nullifierRegistry();\n      const actualVerifier = await registrationProcessor.verifierSigningKey();\n      const actualEndpoint = await registrationProcessor.endpoint();\n      const actualHost = await registrationProcessor.host();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(nullifierRegistryAddress).to.eq(nullifierRegistry.address);\n\n      expect(\"GET https://wise.com/gateway/v3/profiles/*/transfers\").to.deep.equal(actualEndpoint);\n      expect(verifier.address).to.deep.equal(actualVerifier);\n      expect(\"wise.com\").to.deep.equal(actualHost);\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: WiseOffRamperRegistrationProof;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n\n      subjectProof = {\n        public_values: {\n          endpoint: \"GET https://wise.com/gateway/v3/profiles/41213881/transfers\",\n          host: \"wise.com\",\n          profileId: \"41213881\",\n          mcAccountId: \"402863684\"\n        },\n        proof: \"0xf7f5982ae351d80e6be4029899d152a43ad554380bd4aa9a335316f11757003423209e545af86c2835ebcb4e6b5ff60748a49e3bc73129772f04f633c2fe989c1b\"\n      } as WiseOffRamperRegistrationProof;\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).processProof(subjectProof);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof);\n    }\n\n    it(\"should process the proof\", async () => {\n      const [ onRamperId, offRamperId ] = await subjectCallStatic();\n      \n      expect(onRamperId).to.eq(calculateWiseId(subjectProof.public_values.profileId));\n      expect(offRamperId).to.eq(calculateWiseId(subjectProof.public_values.mcAccountId));\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.mcAccountId = \"555555555\"\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid proof\");\n      });\n    });\n\n    describe(\"when the TLS proof is for a different endpoint\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.endpoint = \"GET https://wise.com/gateway/v4/profiles/41213881\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.profileId,\n            subjectProof.public_values.mcAccountId\n          ]\n        );\n\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Endpoint does not match expected\");\n      });\n    });\n\n    describe(\"when the host doesn't match\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.host = \"api.wise.com\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.profileId,\n            subjectProof.public_values.mcAccountId\n          ]\n        );\n\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Host does not match expected\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setVerifierSigningKey\", async () => {\n    let subjectVerifierSigningKey: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectVerifierSigningKey = verifier.address;\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setVerifierSigningKey(subjectVerifierSigningKey);\n    }\n\n    it(\"should set the correct venmo address\", async () => {\n      await subject();\n\n      const actualVerifier = await registrationProcessor.verifierSigningKey();\n\n      expect(actualVerifier).to.equal(subjectVerifierSigningKey);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await registrationProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await registrationProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/wise/wiseRamp.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\n\nimport {\n  Address,\n  WiseOffRamperRegistrationData,\n  WiseRegistrationData,\n  WiseRegistrationProof,\n  WiseSendData,\n} from \"@utils/types\";\nimport { Account } from \"@utils/test/types\";\nimport {\n  WiseRamp,\n  USDCMock,\n  WiseAccountRegistry,\n  WiseSendProcessorMock\n} from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\n\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Blockchain, ether, usdc } from \"@utils/common\";\nimport { BigNumber } from \"ethers\";\nimport { ZERO, ZERO_BYTES32, ADDRESS_ZERO, ONE } from \"@utils/constants\";\nimport { calculateIntentHash, calculateWiseId, calculateWiseTagHash } from \"@utils/protocolUtils\";\nimport { ONE_DAY_IN_SECONDS } from \"@utils/constants\";\n\nconst expect = getWaffleExpect();\n\nconst blockchain = new Blockchain(ethers.provider);\n\ndescribe(\"WiseRamp\", () => {\n  let owner: Account;\n  let verifier: Account;\n  let offRamper: Account;\n  let offRamperNewAcct: Account;\n  let onRamper: Account;\n  let onRamperOtherAddress: Account;\n  let onRamperTwo: Account;\n  let receiver: Account;\n  let maliciousOnRamper: Account;\n  let unregisteredUser: Account;\n  let feeRecipient: Account;\n\n  let ramp: WiseRamp;\n  let usdcToken: USDCMock;\n  let accountRegistry: WiseAccountRegistry;\n  let sendProcessor: WiseSendProcessorMock;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      owner,\n      verifier,\n      offRamper,\n      onRamper,\n      onRamperOtherAddress,\n      onRamperTwo,\n      receiver,\n      maliciousOnRamper,\n      unregisteredUser,\n      offRamperNewAcct,\n      feeRecipient\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    usdcToken = await deployer.deployUSDCMock(usdc(1000000000), \"USDC\", \"USDC\");\n\n    const accountRegistrationProcessor = await deployer.deployWiseAccountRegistrationProcessorMock();\n    const offRamperRegistrationProcessor = await deployer.deployWiseOffRamperRegistrationProcessorMock();\n    sendProcessor = await deployer.deployWiseSendProcessorMock();\n\n    accountRegistry = await deployer.deployWiseAccountRegistry(owner.address);\n    await accountRegistry.initialize(\n      accountRegistrationProcessor.address,\n      offRamperRegistrationProcessor.address\n    );\n\n    await usdcToken.transfer(offRamper.address, usdc(10000));\n\n    ramp = await deployer.deployWiseRamp(\n      owner.address,\n      usdcToken.address,\n      usdc(20),                          // $20 min deposit amount\n      usdc(999),\n      ONE_DAY_IN_SECONDS,\n      ONE_DAY_IN_SECONDS,                // On ramp cooldown period\n      ZERO,                              // Sustainability fee\n      feeRecipient.address\n    );\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct owner\", async () => {\n      const ownerAddress: Address = await ramp.owner();\n      expect(ownerAddress).to.eq(owner.address);\n    });\n\n    it(\"should set the correct usdc\", async () => {\n      const usdcAddress: Address = await ramp.usdc();\n      expect(usdcAddress).to.eq(usdcToken.address);\n    });\n\n    it(\"should set the correct min deposit amount\", async () => {\n      const minDepositAmount: BigNumber = await ramp.minDepositAmount();\n      expect(minDepositAmount).to.eq(usdc(20));\n    });\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const maxOnRampAmount: BigNumber = await ramp.maxOnRampAmount();\n      expect(maxOnRampAmount).to.eq(usdc(999));\n    });\n\n    it(\"should have the correct owner set\", async () => {\n      const keyHash = await ramp.owner();\n      expect(keyHash).to.eq(owner.address);\n    });\n  });\n\n  describe(\"#initialize\", async () => {\n    let subjectAccountRegistry: Address;\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectAccountRegistry = accountRegistry.address;\n      subjectSendProcessor = sendProcessor.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).initialize(\n        subjectAccountRegistry,\n        subjectSendProcessor\n      );\n    }\n\n    it(\"should set the correct processor addresses\", async () => {\n      await subject();\n\n      const accountRegistrationProcessorAddress: Address = await ramp.accountRegistry();\n      const sendProcessorAddress: Address = await ramp.sendProcessor();\n\n      expect(accountRegistrationProcessorAddress).to.eq(accountRegistry.address);\n      expect(sendProcessorAddress).to.eq(sendProcessor.address);\n    });\n\n    describe(\"when the contract has already been initialized\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Already initialized\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  context(\"when the on and off ramper are registered\", async () => {\n    let offRamperProof: WiseRegistrationProof;\n    let onRamperProof: WiseRegistrationProof;\n    let onRamperTwoProof: WiseRegistrationProof;\n    let maliciousOnRamperProof: WiseRegistrationProof;\n\n    let offRamperMCAccountId: string;\n\n    beforeEach(async () => {\n      await ramp.initialize(\n        accountRegistry.address,\n        sendProcessor.address\n      );\n\n      const standardRegistrationData: WiseRegistrationData = {\n        endpoint: \"GET https://api.transferwise.com/v4/profiles/41246868/multi-currency-account\",\n        host: \"api.transferwise.com\",\n        profileId: \"\",\n        wiseTagHash: \"\",\n        userAddress: \"\"\n      }\n\n      offRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      offRamperProof.public_values.profileId = \"012345678\";\n      offRamperProof.public_values.wiseTagHash = calculateWiseTagHash(\"jdoe1234\");\n      offRamperProof.public_values.userAddress = offRamper.address;\n      onRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      onRamperProof.public_values.profileId = \"123456789\";\n      onRamperProof.public_values.userAddress = onRamper.address;\n      onRamperTwoProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      onRamperTwoProof.public_values.profileId = \"567890123\";\n      onRamperTwoProof.public_values.userAddress = onRamperTwo.address;\n      maliciousOnRamperProof = { public_values: {...standardRegistrationData}, proof: \"0x\"};\n      maliciousOnRamperProof.public_values.profileId = \"123456789\";\n      maliciousOnRamperProof.public_values.userAddress = maliciousOnRamper.address;\n\n      await accountRegistry.connect(offRamper.wallet).register(offRamperProof);\n      await accountRegistry.connect(onRamper.wallet).register(onRamperProof);\n      await accountRegistry.connect(onRamperTwo.wallet).register(onRamperTwoProof);\n      await accountRegistry.connect(maliciousOnRamper.wallet).register(maliciousOnRamperProof);\n\n      offRamperMCAccountId = \"402767982\";\n\n      const offRamperRegisterPublicValues = {\n        endpoint: \"GET https://api.transferwise.com/v4/profiles/41246868/multi-currency-account\",\n        host: \"api.transferwise.com\",\n        profileId: \"012345678\",\n        mcAccountId: offRamperMCAccountId\n      } as WiseOffRamperRegistrationData\n\n      await accountRegistry.connect(offRamper.wallet).registerAsOffRamper(\n        { public_values: offRamperRegisterPublicValues, proof: \"0x\" }\n      );\n\n      await usdcToken.connect(offRamper.wallet).approve(ramp.address, usdc(10000));\n    });\n\n    describe(\"#offRamp\", async () => {\n      let subjectWiseTag: string;\n      let subjectReceiveCurrencyId: string;\n      let subjectDepositAmount: BigNumber;\n      let subjectReceiveAmount: BigNumber;\n      let subjectVerifierSigningKey: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        subjectWiseTag = \"jdoe1234\";\n        subjectReceiveCurrencyId = ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]);\n        subjectDepositAmount = usdc(100);\n        subjectReceiveAmount = usdc(92);\n        subjectVerifierSigningKey = verifier.address;\n\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).offRamp(\n          subjectWiseTag,\n          subjectReceiveCurrencyId,\n          subjectDepositAmount,\n          subjectReceiveAmount,\n          subjectVerifierSigningKey\n        );\n      }\n\n      it(\"should transfer the usdc to the Ramp contract\", async () => {\n        await subject();\n\n        const rampUsdcBalance = await usdcToken.balanceOf(ramp.address);\n        const offRamperUsdcBalance = await usdcToken.balanceOf(offRamper.address);\n        expect(rampUsdcBalance).to.eq(subjectDepositAmount);\n        expect(offRamperUsdcBalance).to.eq(usdc(9900));\n      });\n\n      it(\"should correctly update the deposits mapping with the correct key\", async () => {\n        await subject();\n\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        const deposit = await ramp.getDeposit(ZERO);\n\n        expect(deposit.depositor).to.eq(subjectCaller.address);\n        expect(deposit.wiseTag).to.eq(subjectWiseTag);\n        expect(deposit.verifierSigningKey).to.eq(subjectVerifierSigningKey);\n        expect(deposit.depositAmount).to.eq(subjectDepositAmount);\n        expect(deposit.remainingDeposits).to.eq(subjectDepositAmount);\n        expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposit.conversionRate).to.eq(conversionRate);\n      });\n\n      it(\"should increment the deposit counter correctly\", async () => {\n        await subject();\n\n        const depositCounter = await ramp.depositCounter();\n\n        expect(depositCounter).to.eq(ONE);\n      });\n\n      it(\"should emit a DepositReceived event\", async () => {\n        const conversionRate = subjectDepositAmount.mul(ether(1)).div(subjectReceiveAmount);\n\n        await expect(subject()).to.emit(ramp, \"DepositReceived\").withArgs(\n          ZERO,\n          calculateWiseId(\"012345678\"),\n          subjectReceiveCurrencyId,\n          subjectDepositAmount,\n          conversionRate\n        );\n      });\n\n      describe(\"when the user has not registered as on off-ramper\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Must be registered as off ramper\");\n        });\n      });\n\n      describe(\"when the wise tag doesn't match tag provided during registration\", async () => {\n        beforeEach(async () => {\n          subjectWiseTag = \"snakamoto1234\"\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Wise tag does not match registered wise tag\");\n        });\n      });\n\n      describe(\"when the deposited amount is less than the minimum\", async () => {\n        beforeEach(async () => {\n          subjectDepositAmount = usdc(19.99);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit amount must be greater than min deposit amount\");\n        });\n      });\n\n      describe(\"when the depositor has reached their max amount of deposits\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectWiseTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(102), subjectVerifierSigningKey);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectWiseTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(103), subjectVerifierSigningKey);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectWiseTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(104), subjectVerifierSigningKey);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectWiseTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(105), subjectVerifierSigningKey);\n          await ramp.connect(subjectCaller.wallet).offRamp(subjectWiseTag, subjectReceiveCurrencyId, subjectDepositAmount, usdc(106), subjectVerifierSigningKey);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Maximum deposit amount reached\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the receive amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectReceiveAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Receive amount must be greater than 0\");\n        });\n      });\n    });\n\n    describe(\"#signalIntent\", async () => {\n      let subjectDepositId: BigNumber;\n      let subjectAmount: BigNumber;\n      let subjectTo: Address;\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address\n        );\n\n        subjectDepositId = ZERO;\n        subjectAmount = usdc(50);\n        subjectTo = receiver.address;\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).signalIntent(subjectDepositId, subjectAmount, subjectTo);\n      }\n\n      it(\"should create the correct entry in the intents mapping\", async () => {\n        await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), subjectDepositId, currentTimestamp);\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(subjectCaller.address);\n        expect(intent.to).to.eq(subjectTo);\n        expect(intent.deposit).to.eq(subjectDepositId);\n        expect(intent.amount).to.eq(subjectAmount);\n        expect(intent.intentTimestamp).to.eq(currentTimestamp);\n      });\n\n      it(\"should update the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n        await subject();\n\n        const intentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), subjectDepositId, await blockchain.getCurrentTimestamp());\n\n        const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.add(subjectAmount));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(subjectAmount));\n        expect(postDeposit.intentHashes).to.include(intentHash);\n      });\n\n      it(\"should update the account's current intent hash\", async () => {\n        await subject();\n\n        const expectedIntentHash = calculateIntentHash(\n          calculateWiseId(onRamperProof.public_values.profileId),\n          subjectDepositId,\n          await blockchain.getCurrentTimestamp()\n        );\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(expectedIntentHash).to.eq(intentHash);\n      });\n\n      it(\"should emit an IntentSignaled event\", async () => {\n        const txn = await subject();\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        const intentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), subjectDepositId, currentTimestamp);\n\n        expect(txn).to.emit(ramp, \"IntentSignaled\").withArgs(\n          intentHash,\n          subjectDepositId,\n          calculateWiseId(onRamperProof.public_values.profileId),\n          subjectTo,\n          subjectAmount,\n          currentTimestamp\n        );\n      });\n\n      describe(\"when there aren't enough deposits to cover requested amount but there are prunable intents\", async () => {\n        let timeJump: number;\n        let oldIntentHash: string;\n\n        before(async () => {\n          timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n        });\n\n        beforeEach(async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          oldIntentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), subjectDepositId, currentTimestamp);\n\n          await blockchain.increaseTimeAsync(timeJump);\n\n          subjectAmount = usdc(60);\n          subjectCaller = onRamperTwo;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(preDeposit.intentHashes).to.include(oldIntentHash);\n\n          await subject();\n\n          const newIntentHash = calculateIntentHash(calculateWiseId(onRamperTwoProof.public_values.profileId), subjectDepositId, await blockchain.getCurrentTimestamp());\n          const postDeposit = await ramp.getDeposit(subjectDepositId);\n\n          expect(postDeposit.outstandingIntentAmount).to.eq(subjectAmount);\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.sub(usdc(10))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.include(newIntentHash);\n          expect(postDeposit.intentHashes).to.not.include(oldIntentHash);\n        });\n\n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n\n          const intent = await ramp.intents(oldIntentHash);\n\n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n\n        it(\"should correctly add a new intent to the intents mapping\", async () => {\n          await subject();\n\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(calculateWiseId(onRamperTwoProof.public_values.profileId), subjectDepositId, currentTimestamp);\n\n          const intent = await ramp.intents(intentHash);\n\n          expect(intent.onRamper).to.eq(subjectCaller.address);\n          expect(intent.deposit).to.eq(subjectDepositId);\n          expect(intent.amount).to.eq(subjectAmount);\n          expect(intent.intentTimestamp).to.eq(currentTimestamp);\n        });\n\n        it(\"should update the account's current intent hash\", async () => {\n          await subject();\n\n          const expectedIntentHash = calculateIntentHash(\n            calculateWiseId(onRamperTwoProof.public_values.profileId),\n            subjectDepositId,\n            await blockchain.getCurrentTimestamp()\n          );\n\n          const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n          expect(expectedIntentHash).to.eq(intentHash);\n        });\n\n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(oldIntentHash, subjectDepositId);\n        });\n\n        describe(\"when the reclaimable amount can't cover the new intent\", async () => {\n          before(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.div(2).toNumber();\n          });\n\n          after(async () => {\n            timeJump = ONE_DAY_IN_SECONDS.add(1).toNumber();\n          });\n\n          it(\"should revert\", async () => {\n            await expect(subject()).to.be.revertedWith(\"Not enough liquidity\");\n          });\n        });\n      });\n\n      describe(\"when isAllowedUser is false\", async () => {\n        beforeEach(async () => {\n          await accountRegistry.connect(offRamper.wallet).addAccountToDenylist(calculateWiseId(onRamperProof.public_values.profileId));\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Onramper on depositor's denylist\");\n        });\n      });\n\n      describe(\"when the caller is the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the caller is the depositor from another Ethereum account\", async () => {\n        beforeEach(async () => {\n          offRamperProof.public_values.userAddress = offRamperNewAcct.address;\n          await accountRegistry.connect(offRamperNewAcct.wallet).register(offRamperProof);\n\n          subjectCaller = offRamperNewAcct;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender cannot be the depositor\");\n        });\n      });\n\n      describe(\"when the to address is zero\", async () => {\n        beforeEach(async () => {\n          subjectTo = ADDRESS_ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Cannot send to zero address\");\n        });\n      });\n\n      describe(\"when the caller is not a registered user\", async () => {\n        beforeEach(async () => {\n          subjectCaller = unregisteredUser;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be registered user\");\n        });\n      });\n\n      describe(\"when the amount is zero\", async () => {\n        beforeEach(async () => {\n          subjectAmount = ZERO;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be greater than 0\");\n        });\n      });\n\n      describe(\"when the amount exceeds the max on ramp amount\", async () => {\n        beforeEach(async () => {\n          subjectAmount = usdc(1000);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Signaled amount must be less than max on-ramp amount\");\n        });\n      });\n\n      describe(\"when the cool down period hasn't elapsed\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          const depositId = (await ramp.depositCounter()).sub(1);\n  \n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          const intentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), depositId, currentTimestamp);\n          \n          const sendData = {\n            endpoint: \"https://api.transferwise.com/v1/quotes\",\n            endpointType: \"POST\",\n            host: \"api.transferwise.com\",\n            transferId: \"736281573\",\n            senderId: onRamperProof.public_values.profileId,\n            recipientId: offRamperMCAccountId,\n            timestamp: currentTimestamp.toString(),\n            currencyId: \"EUR\",\n            amount: \"46.00\",\n            status: \"outgoing_payment_sent\",\n            intentHash: intentHash\n          }\n          const verifierSignature = \"0x\";\n\n          return ramp.connect(subjectCaller.wallet).onRamp(sendData, verifierSignature);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"On ramp cool down period not elapsed\");\n        });\n      });\n\n      describe(\"when the deposit does not exist\", async () => {\n        beforeEach(async () => {\n          subjectDepositId = BigNumber.from(10);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Deposit does not exist\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n\n      describe(\"when the caller already has an outstanding intent but is calling from a different address\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          subjectCaller = maliciousOnRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent still outstanding\");\n        });\n      });\n    });\n\n    describe(\"#cancelIntent\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(101),\n          verifier.address\n        );\n\n        const idHash = calculateWiseId(onRamperProof.public_values.profileId);\n        depositId = ZERO;\n\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).cancelIntent(subjectIntentHash);\n      }\n\n      it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should delete the original intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should update the accounts current intent hash\", async () => {\n        await subject();\n\n        const intentHash = await ramp.getIdCurrentIntentHash(subjectCaller.address);\n\n        expect(intentHash).to.eq(ZERO_BYTES32);\n      });\n\n      it(\"should emit an IntentPruned event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n      });\n\n      describe(\"when the call comes from a different Eth address tied to the same venmoIdHash\", async () => {\n        beforeEach(async () => {\n          onRamperProof.public_values.userAddress = onRamperOtherAddress.address;\n          await accountRegistry.connect(onRamperOtherAddress.wallet).register(onRamperProof);\n\n          subjectCaller = onRamperOtherAddress;\n        });\n\n        it(\"should prune the intent and update the rest of the deposit mapping correctly\", async () => {\n          const preDeposit = await ramp.getDeposit(depositId);\n  \n          expect(preDeposit.intentHashes).to.include(subjectIntentHash);\n  \n          await subject();\n  \n          const postDeposit = await ramp.getDeposit(depositId);\n  \n          expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n          expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits.add(usdc(50))); // 10 usdc difference between old and new intent\n          expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n  \n        it(\"should delete the original intent from the intents mapping\", async () => {\n          await subject();\n  \n          const intent = await ramp.intents(subjectIntentHash);\n  \n          expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n          expect(intent.deposit).to.eq(ZERO_BYTES32);\n          expect(intent.amount).to.eq(ZERO);\n          expect(intent.intentTimestamp).to.eq(ZERO);\n        });\n  \n        it(\"should update the accounts current intent hash\", async () => {\n          await subject();\n  \n          const intentHash = await ramp.getIdCurrentIntentHash(onRamper.address);\n  \n          expect(intentHash).to.eq(ZERO_BYTES32);\n        });\n  \n        it(\"should emit an IntentPruned event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentPruned\").withArgs(subjectIntentHash, depositId);\n        });\n      });\n\n      describe(\"when the intentHash does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = ZERO_BYTES32;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the caller did not originate the intent\", async () => {\n        beforeEach(async () => {\n          subjectCaller = offRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the on-ramper\");\n        });\n      });\n    });\n\n    describe(\"#onRamp\", async () => {\n      let subjectSendData: WiseSendData;\n      let subjectNotarySignature: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = calculateWiseId(onRamperProof.public_values.profileId);\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        intentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n        \n        subjectSendData = {\n          endpoint: \"POST https://api.transferwise.com/v1/quotes\",\n          host: \"api.transferwise.com\",\n          transferId: \"736281573\",\n          senderId: onRamperProof.public_values.profileId,\n          recipientId: offRamperMCAccountId,\n          timestamp: currentTimestamp.toString(),\n          currencyId: \"EUR\",\n          amount: \"46.00\",\n          status: \"outgoing_payment_sent\",\n          intentHash: BigNumber.from(intentHash)\n        }\n        subjectNotarySignature = \"0x\";\n        subjectCaller = onRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).onRamp(subjectSendData, subjectNotarySignature);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(intentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(intentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(subjectCaller.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          intentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            intentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          intentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), depositId, currentTimestamp);\n\n          subjectSendData.timestamp = currentTimestamp.toString();\n          subjectSendData.intentHash = BigNumber.from(intentHash);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountDeposits = await ramp.getAccountDeposits(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountDeposits.some(obj => obj.depositId == depositId)).to.be.false;\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(intentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the caller is not the onRamper for the intent\", async () => {\n        beforeEach(async () => {\n          subjectSendData.intentHash = BigNumber.from(ZERO_BYTES32);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the on-ramper\");\n        });\n      });\n\n      describe(\"when the payment was in the incorrect currency\", async () => {\n        beforeEach(async () => {\n          subjectSendData.currencyId = \"SGD\";\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Wrong currency sent\");\n        });\n      });\n\n      describe(\"when the amount paid was not enough\", async () => {\n        beforeEach(async () => {\n          subjectSendData.amount = \"45.00\";\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Payment was not enough\");\n        });\n      });\n\n      describe(\"when the email timestamp is before the intent was signaled\", async () => {\n        beforeEach(async () => {\n          subjectSendData.timestamp = ONE.toString();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent was not created before send\");\n        });\n      });\n\n      describe(\"when the intent has already been pruned\", async () => {\n        beforeEach(async () => {\n          await subject();\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the on-ramper\");\n        });\n      });\n\n      describe(\"when the offRamperId doesn't match the intent\", async () => {\n        beforeEach(async () => {\n          subjectSendData.recipientId = calculateWiseId(\"124466989\");\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Offramper id does not match\");\n        });\n      });\n    });\n\n    describe(\"#releaseFundsToOnramper\", async () => {\n      let subjectIntentHash: string;\n      let subjectCaller: Account;\n\n      let depositId: BigNumber;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address,\n        );\n\n        depositId = (await ramp.depositCounter()).sub(1);\n\n        const idHash = calculateWiseId(onRamperProof.public_values.profileId);\n        await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n\n        const currentTimestamp = await blockchain.getCurrentTimestamp();\n        subjectIntentHash = calculateIntentHash(idHash, depositId, currentTimestamp);\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).releaseFundsToOnramper(subjectIntentHash);\n      }\n\n      it(\"should transfer the usdc correctly to all parties\", async () => {\n        const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(50)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n      });\n\n      it(\"should delete the intent from the intents mapping\", async () => {\n        await subject();\n\n        const intent = await ramp.intents(subjectIntentHash);\n\n        expect(intent.onRamper).to.eq(ADDRESS_ZERO);\n        expect(intent.to).to.eq(ADDRESS_ZERO);\n        expect(intent.deposit).to.eq(ZERO_BYTES32);\n        expect(intent.amount).to.eq(ZERO);\n        expect(intent.intentTimestamp).to.eq(ZERO);\n      });\n\n      it(\"should correctly update state in the deposit mapping\", async () => {\n        const preDeposit = await ramp.getDeposit(depositId);\n\n        await subject();\n\n        const postDeposit = await ramp.getDeposit(depositId);\n\n        expect(postDeposit.remainingDeposits).to.eq(preDeposit.remainingDeposits);\n        expect(postDeposit.outstandingIntentAmount).to.eq(preDeposit.outstandingIntentAmount.sub(usdc(50)));\n        expect(postDeposit.intentHashes).to.not.include(subjectIntentHash);\n      });\n\n      it(\"should log the block timestamp for user's lastOnrampTimestamp\", async () => {\n        await subject();\n\n        const expectedLastOnRampTimestamp = await blockchain.getCurrentTimestamp();\n        const lastOnRampTimestamp = await ramp.getLastOnRampTimestamp(onRamper.address);\n\n        expect(lastOnRampTimestamp).to.eq(expectedLastOnRampTimestamp);\n      });\n\n      it(\"should emit an IntentFulfilled event\", async () => {\n        await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n          subjectIntentHash,\n          depositId,\n          onRamper.address,\n          receiver.address,\n          usdc(50),\n          ZERO\n        );\n      });\n\n      describe(\"when a sustainability fee is defined\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(owner.wallet).setSustainabilityFee(ether(0.01));\n        });\n\n        it(\"should transfer the usdc correctly to all parties\", async () => {\n          const receiverPreBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPreBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          await subject();\n\n          const receiverPostBalance = await usdcToken.balanceOf(receiver.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n          const feeRecipientPostBalance = await usdcToken.balanceOf(feeRecipient.address);\n\n          expect(receiverPostBalance).to.eq(receiverPreBalance.add(usdc(49.5)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(50)));\n          expect(feeRecipientPostBalance).to.eq(feeRecipientPreBalance.add(usdc(0.5)));\n        });\n\n        it(\"should emit an IntentFulfilled event\", async () => {\n          await expect(subject()).to.emit(ramp, \"IntentFulfilled\").withArgs(\n            subjectIntentHash,\n            depositId,\n            onRamper.address,\n            receiver.address,\n            usdc(49.5),\n            usdc(0.5)\n          );\n        });\n      });\n\n      describe(\"when the intent zeroes out the deposit\", async () => {\n        beforeEach(async () => {\n          await subject();\n\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(10).toNumber());\n\n          await ramp.connect(onRamper.wallet).signalIntent(depositId, usdc(50), receiver.address);\n          const currentTimestamp = await blockchain.getCurrentTimestamp();\n          subjectIntentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), depositId, currentTimestamp);\n        });\n\n        it(\"should prune the deposit\", async () => {\n          await subject();\n\n          const accountDeposits = await ramp.getAccountDeposits(offRamper.address);\n          const deposit = await ramp.getDeposit(depositId);\n\n          expect(accountDeposits.some(obj => obj.depositId == depositId)).to.be.false;\n          expect(deposit.remainingDeposits).to.eq(ZERO);\n          expect(deposit.outstandingIntentAmount).to.eq(ZERO);\n          expect(deposit.intentHashes).to.not.include(subjectIntentHash);\n        });\n\n        it(\"should emit a DepositClosed event\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(depositId, offRamper.address);\n        });\n      });\n\n      describe(\"when the intent does not exist\", async () => {\n        beforeEach(async () => {\n          subjectIntentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), depositId, ONE);\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Intent does not exist\");\n        });\n      });\n\n      describe(\"when the sender is not the depositor\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Caller must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#withdrawDeposit\", async () => {\n      let subjectDepositIds: BigNumber[];\n      let subjectCaller: Account;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(50),\n          usdc(45),\n          verifier.address\n        );\n\n        const currentDepositCounter = await ramp.depositCounter();\n        const depositIdOne = BigNumber.from(currentDepositCounter.sub(2));\n        const depositIdTwo = BigNumber.from(currentDepositCounter.sub(1));\n\n        subjectDepositIds = [depositIdOne, depositIdTwo];\n        subjectCaller = offRamper;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.connect(subjectCaller.wallet).withdrawDeposit(subjectDepositIds);\n      }\n\n      it(\"should transfer the usdc to the caller\", async () => {\n        const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n        await subject();\n\n        const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n        const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n        expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n        expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n      });\n\n      it(\"should delete the deposits\", async () => {\n        const preDepositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const preDepositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(preDepositOne.depositor).to.not.eq(ADDRESS_ZERO);\n        expect(preDepositTwo.depositor).to.not.eq(ADDRESS_ZERO);\n\n        await subject();\n\n        const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n        const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n        expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n        expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n      });\n\n      it(\"should remove the deposits from the depositors account info\", async () => {\n        const preAccountDeposits = await ramp.getAccountDeposits(subjectCaller.address);\n        expect(preAccountDeposits[0].depositId).to.eq(subjectDepositIds[0]);\n        expect(preAccountDeposits[1].depositId).to.eq(subjectDepositIds[1]);\n\n        await subject();\n\n        const postAccountDeposits = await ramp.getAccountDeposits(subjectCaller.address);\n\n        expect(postAccountDeposits.some(obj => obj.depositId == subjectDepositIds[0])).to.be.false;\n        expect(postAccountDeposits.some(obj => obj.depositId == subjectDepositIds[1])).to.be.false;\n      });\n\n      it(\"should emit a DepositWithdrawn event\", async () => {\n        const tx = await subject();\n\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[0],\n          offRamper.address,\n          usdc(100),\n        );\n        expect(tx).to.emit(ramp, \"DepositWithdrawn\").withArgs(\n          subjectDepositIds[1],\n          offRamper.address,\n          usdc(50),\n        );\n      });\n\n      it(\"should emit DepositClosed events for both deposits\", async () => {\n        const tx = await subject();\n\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        await expect(tx).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n      });\n\n      describe(\"when there is an outstanding intent\", async () => {\n        beforeEach(async () => {\n          await ramp.connect(onRamper.wallet).signalIntent(subjectDepositIds[0], usdc(50), receiver.address);\n        });\n\n        it(\"should transfer the correct amount of usdc to the caller\", async () => {\n          const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n          await subject();\n\n          const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n          const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n          expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(100)));\n          expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(100)));\n        });\n\n        it(\"should zero out remainingDeposits on depositOne\", async () => {\n          await subject();\n\n          const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n\n          expect(depositOne.depositor).to.not.eq(ZERO_BYTES32);\n          expect(depositOne.intentHashes.length).to.eq(1);\n          expect(depositOne.remainingDeposits).to.eq(ZERO);\n          expect(depositOne.outstandingIntentAmount).to.eq(usdc(50));\n        });\n\n        it(\"should delete deposit two from deposits and account info\", async () => {\n          await subject();\n\n          const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n          const accountDeposits = await ramp.getAccountDeposits(offRamper.address);\n\n          expect(accountDeposits.some(obj => obj.depositId == subjectDepositIds[1])).to.be.false;\n          expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n        });\n\n        it(\"should emit a DepositClosed event for deposit two\", async () => {\n          await expect(subject()).to.emit(ramp, \"DepositClosed\").withArgs(subjectDepositIds[1], offRamper.address);\n        });\n\n        describe(\"but the intent is expired\", async () => {\n          beforeEach(async () => {\n            await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n          });\n\n          it(\"should transfer the correct amount of usdc to the caller\", async () => {\n            const offRamperPreBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPreBalance = await usdcToken.balanceOf(ramp.address);\n\n            await subject();\n\n            const offRamperPostBalance = await usdcToken.balanceOf(offRamper.address);\n            const rampPostBalance = await usdcToken.balanceOf(ramp.address);\n\n            expect(offRamperPostBalance).to.eq(offRamperPreBalance.add(usdc(150)));\n            expect(rampPostBalance).to.eq(rampPreBalance.sub(usdc(150)));\n          });\n\n          it(\"should delete both deposits\", async () => {\n            await subject();\n\n            const depositOne = await ramp.getDeposit(subjectDepositIds[0]);\n            const depositTwo = await ramp.getDeposit(subjectDepositIds[1]);\n\n            expect(depositOne.depositor).to.eq(ADDRESS_ZERO);\n            expect(depositTwo.depositor).to.eq(ADDRESS_ZERO);\n          });\n\n          it(\"should delete the intent\", async () => {\n            const intentHash = (await ramp.getDeposit(subjectDepositIds[0])).intentHashes[0];\n\n            const preIntent = await ramp.intents(intentHash);\n            expect(preIntent.amount).to.eq(usdc(50));\n\n            await subject();\n\n            const postIntent = await ramp.intents(intentHash);\n\n            expect(postIntent.onRamper).to.eq(ADDRESS_ZERO);\n            expect(postIntent.deposit).to.eq(ZERO_BYTES32);\n            expect(postIntent.amount).to.eq(ZERO);\n            expect(postIntent.intentTimestamp).to.eq(ZERO);\n          });\n        });\n      });\n\n      describe(\"when the caller is not the offRamper\", async () => {\n        beforeEach(async () => {\n          subjectCaller = onRamper;\n        });\n\n        it(\"should revert\", async () => {\n          await expect(subject()).to.be.revertedWith(\"Sender must be the depositor\");\n        });\n      });\n    });\n\n    describe(\"#getIdCurrentIntentHashAsUint\", async () => {\n      let subjectAccount: Address;\n\n      let intentHash: string;\n\n      beforeEach(async () => {  \n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), ZERO, await blockchain.getCurrentTimestamp());\n\n        subjectAccount = onRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIdCurrentIntentHashAsUint(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const intentHashAsUint = await subject();\n\n        expect(intentHashAsUint).to.eq(BigNumber.from(intentHash));\n      });\n    });\n\n\n    describe(\"#getAccountDeposits\", async () => {\n      let subjectAccount: Address;\n\n      beforeEach(async () => {  \n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(93),\n          verifier.address\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n\n        subjectAccount = offRamper.address;\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getAccountDeposits(subjectAccount);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(92));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(93));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.wiseTag).to.eq(\"jdoe1234\");\n        expect(deposits[1].deposit.wiseTag).to.eq(\"jdoe1234\");\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].deposit.verifierSigningKey).to.eq(verifier.address);\n        expect(deposits[1].deposit.verifierSigningKey).to.eq(verifier.address);\n        expect(deposits[0].depositorId).to.eq(calculateWiseId(offRamperProof.public_values.profileId));\n        expect(deposits[1].depositorId).to.eq(calculateWiseId(offRamperProof.public_values.profileId));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getDepositFromIds\", async () => {\n      let subjectDepositIds: BigNumber[];\n\n      let intentHash: string;\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address\n        );\n\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(93),\n          verifier.address\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ONE, usdc(50), receiver.address);\n        intentHash = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), ONE, await blockchain.getCurrentTimestamp());\n\n\n        subjectDepositIds = [ZERO, ONE];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getDepositFromIds(subjectDepositIds);\n      }\n\n      it(\"should return the expected deposits\", async () => {\n        const deposits = await subject();\n\n        const conversionRateOne = usdc(100).mul(ether(1)).div(usdc(92));\n        const conversionRateTwo = usdc(100).mul(ether(1)).div(usdc(93));\n\n        expect(deposits[0].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[1].deposit.depositor).to.eq(offRamper.address);\n        expect(deposits[0].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[1].deposit.depositAmount).to.eq(usdc(100));\n        expect(deposits[0].deposit.remainingDeposits).to.eq(usdc(100));\n        expect(deposits[1].deposit.remainingDeposits).to.eq(usdc(50));\n        expect(deposits[0].deposit.outstandingIntentAmount).to.eq(ZERO);\n        expect(deposits[1].deposit.outstandingIntentAmount).to.eq(usdc(50));\n        expect(deposits[0].deposit.conversionRate).to.eq(conversionRateOne);\n        expect(deposits[1].deposit.conversionRate).to.eq(conversionRateTwo);\n        expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n        expect(deposits[1].availableLiquidity).to.eq(usdc(50));\n        expect(deposits[0].depositorId).to.eq(calculateWiseId(offRamperProof.public_values.profileId));\n        expect(deposits[1].depositorId).to.eq(calculateWiseId(offRamperProof.public_values.profileId));\n        expect(deposits[0].depositId).to.eq(ZERO);\n        expect(deposits[1].depositId).to.eq(ONE);\n        expect(JSON.stringify(deposits[0].deposit.intentHashes)).to.eq(JSON.stringify([]));\n        expect(JSON.stringify(deposits[1].deposit.intentHashes)).to.eq(JSON.stringify([intentHash]));\n      });\n\n      describe(\"when there are reclaimable intents\", async () => {\n        beforeEach(async () => {\n          await blockchain.increaseTimeAsync(ONE_DAY_IN_SECONDS.add(1).toNumber());\n        });\n\n        it(\"should return the expected deposits\", async () => {\n          const deposits = await subject();\n\n          expect(deposits[0].availableLiquidity).to.eq(usdc(100));\n          expect(deposits[1].availableLiquidity).to.eq(usdc(100));\n        });\n      });\n    });\n\n    describe(\"#getIntentsWithOnRamperId\", async () => {\n      let subjectIntentHashes: string[];\n\n      beforeEach(async () => {\n        await ramp.connect(offRamper.wallet).offRamp(\n          \"jdoe1234\",\n          ethers.utils.solidityKeccak256([\"string\"], [\"EUR\"]),\n          usdc(100),\n          usdc(92),\n          verifier.address\n        );\n\n        await ramp.connect(onRamper.wallet).signalIntent(ZERO, usdc(50), receiver.address);\n        const intentHashOne = calculateIntentHash(calculateWiseId(onRamperProof.public_values.profileId), ZERO, await blockchain.getCurrentTimestamp());\n        await ramp.connect(onRamperTwo.wallet).signalIntent(ZERO, usdc(40), receiver.address);\n        const intentHashTwo = calculateIntentHash(calculateWiseId(onRamperTwoProof.public_values.profileId), ZERO, await blockchain.getCurrentTimestamp());\n\n        subjectIntentHashes = [intentHashOne, intentHashTwo];\n      });\n\n      async function subject(): Promise<any> {\n        return ramp.getIntentsWithOnRamperId(subjectIntentHashes);\n      }\n\n      it(\"should return the expected intents\", async () => {\n        const intents = await subject();\n\n        expect(intents[0].intent.onRamper).to.eq(onRamper.address);\n        expect(intents[1].intent.onRamper).to.eq(onRamperTwo.address);\n        expect(intents[0].intent.deposit).to.eq(ZERO);\n        expect(intents[1].intent.deposit).to.eq(ZERO);\n        expect(intents[0].intent.amount).to.eq(usdc(50));\n        expect(intents[1].intent.amount).to.eq(usdc(40));\n        expect(intents[0].onRamperId).to.eq(calculateWiseId(onRamperProof.public_values.profileId));\n        expect(intents[1].onRamperId).to.eq(calculateWiseId(onRamperTwoProof.public_values.profileId));\n        expect(intents[0].intentHash).to.eq(subjectIntentHashes[0]);\n        expect(intents[1].intentHash).to.eq(subjectIntentHashes[1]);\n      });\n    });\n  });\n\n  describe(\"#setMinDepositAmount\", async () => {\n    let subjectMinDepositAmount: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectMinDepositAmount = usdc(10);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setMinDepositAmount(subjectMinDepositAmount);\n    }\n\n    it(\"should set the correct min deposit amount\", async () => {\n      await subject();\n\n      const depositAmount = await ramp.minDepositAmount();\n\n      expect(depositAmount).to.eq(subjectMinDepositAmount);\n    });\n\n    it(\"should emit a MinDepositAmountSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"MinDepositAmountSet\").withArgs(subjectMinDepositAmount);\n    });\n\n    describe(\"when the min deposit amount is 0\", async () => {\n      beforeEach(async () => {\n        subjectMinDepositAmount = ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Minimum deposit cannot be zero\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setMaxOnRampAmount\", async () => {\n    let subjectMaxOnRampAmount: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectMaxOnRampAmount = usdc(998);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setMaxOnRampAmount(subjectMaxOnRampAmount);\n    }\n\n    it(\"should set the correct max on ramp amount\", async () => {\n      const preMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n      expect(preMaxOnRampAmount).to.eq(usdc(999));\n\n      await subject();\n\n      const postMaxOnRampAmount = await ramp.maxOnRampAmount();\n\n      expect(postMaxOnRampAmount).to.eq(subjectMaxOnRampAmount);\n    });\n\n    it(\"should emit a MaxOnRampAmountSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"MaxOnRampAmountSet\").withArgs(subjectMaxOnRampAmount);\n    });\n\n    describe(\"when the max amount is 0\", async () => {\n      beforeEach(async () => {\n        subjectMaxOnRampAmount = ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Max on ramp amount cannot be zero\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setIntentExpirationPeriod\", async () => {\n    let subjectIntentExpirationPeriod: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectIntentExpirationPeriod = ONE_DAY_IN_SECONDS.mul(2);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setIntentExpirationPeriod(subjectIntentExpirationPeriod);\n    }\n\n    it(\"should set the correct expiration time period\", async () => {\n      const preOnRampAmount = await ramp.intentExpirationPeriod();\n\n      expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n      await subject();\n\n      const postOnRampAmount = await ramp.intentExpirationPeriod();\n\n      expect(postOnRampAmount).to.eq(subjectIntentExpirationPeriod);\n    });\n\n    it(\"should emit a IntentExpirationPeriodSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"IntentExpirationPeriodSet\").withArgs(subjectIntentExpirationPeriod);\n    });\n\n    describe(\"when the intent expiration period is 0\", async () => {\n      beforeEach(async () => {\n        subjectIntentExpirationPeriod = ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Max intent expiration period cannot be zero\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setOnRampCooldownPeriod\", async () => {\n    let subjectOnRampCoolDownPeriod: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectOnRampCoolDownPeriod = ONE_DAY_IN_SECONDS.div(2);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setOnRampCooldownPeriod(subjectOnRampCoolDownPeriod);\n    }\n\n    it(\"should set the correct cool down time period\", async () => {\n      const preOnRampAmount = await ramp.onRampCooldownPeriod();\n\n      expect(preOnRampAmount).to.eq(ONE_DAY_IN_SECONDS);\n\n      await subject();\n\n      const postOnRampAmount = await ramp.onRampCooldownPeriod();\n\n      expect(postOnRampAmount).to.eq(subjectOnRampCoolDownPeriod);\n    });\n\n    it(\"should emit a OnRampCooldownPeriodSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"OnRampCooldownPeriodSet\").withArgs(subjectOnRampCoolDownPeriod);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setSustainabilityFee\", async () => {\n    let subjectSustainabilityFee: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectSustainabilityFee = ether(.002);\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setSustainabilityFee(subjectSustainabilityFee);\n    }\n\n    it(\"should set the correct sustainability fee\", async () => {\n      const preSustainabilityFee = await ramp.sustainabilityFee();\n\n      expect(preSustainabilityFee).to.eq(ZERO);\n\n      await subject();\n\n      const postSustainabilityFee = await ramp.sustainabilityFee();\n\n      expect(postSustainabilityFee).to.eq(subjectSustainabilityFee);\n    });\n\n    it(\"should emit a SustainabilityFeeUpdated event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"SustainabilityFeeUpdated\").withArgs(subjectSustainabilityFee);\n    });\n\n    describe(\"when the fee exceeds the max sustainability fee\", async () => {\n      beforeEach(async () => {\n        subjectSustainabilityFee = ether(.1);\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Fee cannot be greater than max fee\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setSustainabilityFeeRecipient\", async () => {\n    let subjectSustainabilityFeeRecipient: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectSustainabilityFeeRecipient = owner.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setSustainabilityFeeRecipient(subjectSustainabilityFeeRecipient);\n    }\n\n    it(\"should set the correct sustainability fee recipient\", async () => {\n      const preSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n      expect(preSustainabilityFeeRecipient).to.eq(feeRecipient.address);\n\n      await subject();\n\n      const postSustainabilityFeeRecipient = await ramp.sustainabilityFeeRecipient();\n\n      expect(postSustainabilityFeeRecipient).to.eq(subjectSustainabilityFeeRecipient);\n    });\n\n    it(\"should emit a SustainabilityFeeRecipientUpdated event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"SustainabilityFeeRecipientUpdated\").withArgs(subjectSustainabilityFeeRecipient);\n    });\n\n    describe(\"when the passed fee recipient is the zero address\", async () => {\n      beforeEach(async () => {\n        subjectSustainabilityFeeRecipient = ADDRESS_ZERO;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Fee recipient cannot be zero address\");\n      });\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n\n  describe(\"#setSendProcessor\", async () => {\n    let subjectSendProcessor: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectSendProcessor = owner.address;\n      subjectCaller = owner;\n    });\n\n    async function subject(): Promise<any> {\n      return ramp.connect(subjectCaller.wallet).setSendProcessor(subjectSendProcessor);\n    }\n\n    it(\"should set the correct min deposit amount\", async () => {\n      await subject();\n\n      const newSendProcessor = await ramp.sendProcessor();\n\n      expect(newSendProcessor).to.eq(subjectSendProcessor);\n    });\n\n    it(\"should emit a NewSendProcessorSet event\", async () => {\n      const tx = await subject();\n\n      expect(tx).to.emit(ramp, \"NewSendProcessorSet\").withArgs(subjectSendProcessor);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = onRamper;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/test/ramps/wise/wiseSendProcessor.spec.ts",
    "content": "import \"module-alias/register\";\n\nimport { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nimport { Account } from \"@utils/test/types\";\nimport { NullifierRegistry, WiseSendProcessor } from \"@utils/contracts\";\nimport DeployHelper from \"@utils/deploys\";\nimport {\n  getWaffleExpect,\n  getAccounts\n} from \"@utils/test/index\";\nimport { Address, WiseSendData, WiseSendProof } from \"@utils/types\";\nimport { calculateWiseId } from \"@utils/protocolUtils\";\nimport { usdc } from \"@utils/common\";\n\nconst expect = getWaffleExpect();\nconst abiCoder = new ethers.utils.AbiCoder();\n\ndescribe(\"WiseSendProcessor\", () => {\n  let owner: Account;\n  let verifier: Account;\n  let attacker: Account;\n  let ramp: Account;\n\n  let nullifierRegistry: NullifierRegistry;\n  let sendProcessor: WiseSendProcessor;\n\n  let deployer: DeployHelper;\n\n  beforeEach(async () => {\n    [\n      verifier,\n      owner,\n      attacker,\n      ramp\n    ] = await getAccounts();\n\n    deployer = new DeployHelper(owner.wallet);\n\n    nullifierRegistry = await deployer.deployNullifierRegistry();\n\n    sendProcessor = await deployer.deployWiseSendProcessor(\n      ramp.address,\n      nullifierRegistry.address,\n      \"GET https://wise.com/gateway/v3/profiles/*/transfers\",\n      \"wise.com\"\n    );\n\n    await nullifierRegistry.connect(owner.wallet).addWritePermission(sendProcessor.address);\n  });\n\n  describe(\"#constructor\", async () => {\n    it(\"should set the correct state\", async () => {\n      const rampAddress = await sendProcessor.ramp();\n      const nullifierRegistryAddress = await sendProcessor.nullifierRegistry();\n\n      expect(rampAddress).to.eq(ramp.address);\n      expect(nullifierRegistryAddress).to.eq(nullifierRegistry.address);\n    });\n  });\n\n  describe(\"#processProof\", async () => {\n    let subjectProof: WiseSendProof;\n    let subjectVerifierSigningKey: Address;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n\n      subjectProof = {\n        public_values: {\n          endpoint: 'GET https://wise.com/gateway/v3/profiles/41213881/transfers',\n          host: \"wise.com\",\n          transferId: \"909460084\",\n          senderId: \"41213881\",\n          recipientId: \"403384647\",\n          timestamp: \"1703270934000\",\n          currencyId: \"EUR\",\n          amount: \"1.0\",\n          status: \"OUTGOING_PAYMENT_SENT\",\n          intentHash: BigNumber.from(\"2109098755843864455034980037347310810989244226703714011137935097150268285982\"),\n        } as WiseSendData,\n        proof: \"0x8fedde36a43e95dc6eedc10bc90dca4c8e7eebf43b7db19b62fc8bf3b043b5a668fda894f2f97dd981adff7130c1794f9ab780d69eef903f128d6200365da9331b\"\n      } as WiseSendProof;\n\n      subjectVerifierSigningKey = verifier.address;\n\n      subjectCaller = ramp;\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).processProof(subjectProof, subjectVerifierSigningKey);\n    }\n\n    async function subjectCallStatic(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).callStatic.processProof(subjectProof, subjectVerifierSigningKey);\n    }\n\n    it(\"should process the proof\", async () => {\n      const [\n        amount,\n        timestamp,\n        offRamperId,\n        currencyId\n      ] = await subjectCallStatic();\n      \n      expect(amount).to.eq(usdc(1));\n      expect(timestamp).to.eq(BigNumber.from(subjectProof.public_values.timestamp).div(1000).add(30));\n      expect(offRamperId).to.eq(calculateWiseId(subjectProof.public_values.recipientId));\n      expect(currencyId).to.eq(ethers.utils.solidityKeccak256([\"string\"], [subjectProof.public_values.currencyId]));\n    });\n\n    it(\"should add the hash of the proof inputs to the nullifier registry\", async () => {\n      await subject();\n\n      const expectedNullifier = ethers.utils.solidityKeccak256(\n        [\"string\", \"string\"],\n        [\"Wise\", subjectProof.public_values.transferId]\n      );\n\n      const isNullified = await nullifierRegistry.isNullified(expectedNullifier);\n\n      expect(isNullified).to.be.true;\n    });\n\n    describe(\"when the transfer has already been used\", async () => {\n      beforeEach(async () => {\n        await subject();\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Nullifier has already been used\");\n      });\n    });\n\n    describe(\"when the proof is invalid\", async () => {\n      beforeEach(async () => {\n        subjectVerifierSigningKey = attacker.address;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Invalid proof\");\n      });\n    });\n\n    describe(\"when the payment status is not OUTGOING_PAYMENT_SENT\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.status = \"PENDING\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.transferId,\n            subjectProof.public_values.senderId,\n            subjectProof.public_values.recipientId,\n            subjectProof.public_values.amount,\n            subjectProof.public_values.currencyId,\n            subjectProof.public_values.status,\n            subjectProof.public_values.timestamp,\n            subjectProof.public_values.intentHash\n          ]\n        );\n\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Payment status not confirmed as sent\");\n      });\n    });\n\n    describe(\"when the TLS proof is for a different endpoint\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.endpoint = \"GET https://wise.com/gateway/v4/profiles/41213881\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.transferId,\n            subjectProof.public_values.senderId,\n            subjectProof.public_values.recipientId,\n            subjectProof.public_values.amount,\n            subjectProof.public_values.currencyId,\n            subjectProof.public_values.status,\n            subjectProof.public_values.timestamp,\n            subjectProof.public_values.intentHash\n          ]\n        );\n\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Endpoint does not match expected\");\n      });\n    });\n\n    describe(\"when the host doesn't match\", async () => {\n      beforeEach(async () => {\n        subjectProof.public_values.host = \"api.wise.com\";\n\n        const encodedMsg = abiCoder.encode(\n          [\"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"string\", \"uint256\"],\n          [\n            subjectProof.public_values.endpoint,\n            subjectProof.public_values.host,\n            subjectProof.public_values.transferId,\n            subjectProof.public_values.senderId,\n            subjectProof.public_values.recipientId,\n            subjectProof.public_values.amount,\n            subjectProof.public_values.currencyId,\n            subjectProof.public_values.status,\n            subjectProof.public_values.timestamp,\n            subjectProof.public_values.intentHash\n          ]\n        );\n\n        subjectProof.proof = await verifier.wallet.signMessage(ethers.utils.arrayify(ethers.utils.keccak256(encodedMsg)));\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Host does not match expected\");\n      });\n    });\n\n    describe(\"when the caller is not the Ramp\", async () => {\n      beforeEach(async () => {\n        subjectCaller = owner;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Only Ramp can call this function\");\n      });\n    });\n  });\n\n  describe(\"#setTimestampBuffer\", async () => {\n    let subjectTimestampBuffer: BigNumber;\n    let subjectCaller: Account;\n\n    beforeEach(async () => {\n      subjectCaller = owner;\n\n      subjectTimestampBuffer = BigNumber.from(60);\n    });\n\n    async function subject(): Promise<any> {\n      return await sendProcessor.connect(subjectCaller.wallet).setTimestampBuffer(subjectTimestampBuffer);\n    }\n\n    it(\"should set the timestamp buffer\", async () => {\n      await subject();\n\n      const timestampBuffer = await sendProcessor.timestampBuffer();\n\n      expect(subjectTimestampBuffer).to.deep.equal(timestampBuffer);\n    });\n\n    describe(\"when the caller is not the owner\", async () => {\n      beforeEach(async () => {\n        subjectCaller = attacker;\n      });\n\n      it(\"should revert\", async () => {\n        await expect(subject()).to.be.revertedWith(\"Ownable: caller is not the owner\");\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "contracts-ramp/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es2020\",\n    \"module\": \"commonjs\",\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"resolveJsonModule\": true,\n    \"outDir\": \"dist\",\n    \"declaration\": true,\n    \"declarationDir\": \"./dist/types\",\n    \"declarationMap\": true,\n    \"sourceMap\": true,\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@utils/*\": [\"utils/*\"],\n      \"@typechain/*\": [\"typechain/*\"]\n    }\n  },\n  \"include\": [\n    \"index.ts\",\n    \"./test/**/*.ts\",\n    \"./utils/**/*.ts\",\n    \"./typechain/**/*.ts\",\n  ],\n  \"files\": [\n    \"hardhat.config.ts\",\n  ]\n}\n"
  },
  {
    "path": "contracts-ramp/utils/common/blockchainUtils.ts",
    "content": "import { ZERO } from \"@utils/constants\";\nimport { BigNumber, providers } from \"ethers\";\n\nexport class Blockchain {\n  public _provider: providers.Web3Provider | providers.JsonRpcProvider;\n  private _snapshotId: number;\n\n  constructor(_provider: providers.Web3Provider | providers.JsonRpcProvider) {\n    this._provider = _provider;\n\n    this._snapshotId = 0;\n  }\n\n  public async saveSnapshotAsync(): Promise<string> {\n    const response = await this.sendJSONRpcRequestAsync(\"evm_snapshot\", []);\n\n    this._snapshotId = response;\n    return response;\n  }\n\n  public async revertAsync(): Promise<void> {\n    await this.sendJSONRpcRequestAsync(\"evm_revert\", [this._snapshotId]);\n  }\n\n  public async revertByIdAsync(id: string): Promise<void> {\n    await this.sendJSONRpcRequestAsync(\"evm_revert\", [id]);\n  }\n\n  public async resetAsync(): Promise<void> {\n    await this.sendJSONRpcRequestAsync(\"evm_revert\", [\"0x1\"]);\n  }\n\n  public async getChainId(): Promise<number> {\n    return (await this._provider.getNetwork()).chainId;\n  }\n\n  public async increaseTimeAsync(duration: number): Promise<any> {\n    await this.sendJSONRpcRequestAsync(\"evm_increaseTime\", [duration]);\n    await this.sendJSONRpcRequestAsync(\"evm_mine\", []);\n  }\n\n  public async getCurrentTimestamp(): Promise<BigNumber> {\n    const block = await this._provider.getBlock(await this._provider.getBlockNumber());\n    return block ? BigNumber.from(block.timestamp) : ZERO;\n  }\n\n  public async setNextBlockTimestamp(timestamp: number): Promise<any> {\n    await this.sendJSONRpcRequestAsync(\"evm_setNextBlockTimestamp\", [timestamp]);\n  }\n\n  public async waitBlocksAsync(count: number) {\n    for (let i = 0; i < count; i++) {\n      await this.sendJSONRpcRequestAsync(\"evm_mine\", []);\n    }\n  }\n\n  public async getLatestBlockNumber(): Promise<BigNumber> {\n    const block = await this._provider.getBlock(\"latest\");\n    return block ? BigNumber.from(block.number) : ZERO;\n  }\n\n  private async sendJSONRpcRequestAsync(method: string, params: any[]): Promise<any> {\n    return this._provider.send(method, params);\n  }\n}\n"
  },
  {
    "path": "contracts-ramp/utils/common/index.ts",
    "content": "export { Blockchain } from \"./blockchainUtils\";\nexport * from \"./units\";\n"
  },
  {
    "path": "contracts-ramp/utils/common/units.ts",
    "content": "import { ethers } from \"hardhat\";\nimport { BigNumber } from \"ethers\";\n\nexport const ether = (amount: number | string): BigNumber => {\n  const weiString = ethers.utils.parseEther(amount.toString());\n  return BigNumber.from(weiString);\n};\n\nexport const usdc = (amount: number): BigNumber => {\n  const weiString = 1000000 * amount;\n  return BigNumber.from(weiString);\n};\n"
  },
  {
    "path": "contracts-ramp/utils/constants.ts",
    "content": "import { BigNumber, constants } from \"ethers\";\n\nexport const ADDRESS_ZERO = constants.AddressZero;\nexport const ZERO = constants.Zero;\nexport const ONE = constants.One;\nexport const ONE_DAY_IN_SECONDS = BigNumber.from(86400);\nexport const THREE_MINUTES_IN_SECONDS = BigNumber.from(180);\nexport const ZERO_BYTES32 = constants.HashZero;\n"
  },
  {
    "path": "contracts-ramp/utils/contracts.ts",
    "content": "export {\n  GarantiRamp,\n  GarantiRegistrationProcessor,\n  GarantiRegistrationProcessorMock,\n  GarantiSendProcessor,\n  GarantiSendProcessorMock,\n  Groth16Verifier as GarantiBodyHashVerifier,\n  HDFCRamp,\n  HDFCRegistrationProcessorMock,\n  HDFCRegistrationProcessor,\n  HDFCSendProcessorMock,\n  HDFCSendProcessor,\n  HDFCTimestampParsingMock,\n  ManagedKeyHashAdapter,\n  ManagedKeyHashAdapterV2,\n  NullifierRegistry,\n  Ramp,\n  RevolutAccountRegistry,\n  RevolutAccountRegistrationProcessor,\n  RevolutAccountRegistrationProcessorMock,\n  RevolutRamp,\n  RevolutSendProcessor,\n  RevolutSendProcessorMock,\n  StringConversionUtilsMock,\n  TLSBaseProcessor,\n  USDCMock,\n  VenmoRampV2,\n  VenmoRegistrationProcessor,\n  VenmoRegistrationProcessorV2,\n  VenmoRegistrationProcessorMock,\n  VenmoSendProcessorMock,\n  VenmoSendProcessor,\n  VenmoSendProcessorV2,\n  WiseRamp,\n  WiseAccountRegistrationProcessor,\n  WiseAccountRegistrationProcessorMock,\n  WiseAccountRegistry,\n  WiseOffRamperRegistrationProcessor,\n  WiseOffRamperRegistrationProcessorMock,\n  WiseSendProcessor,\n  WiseSendProcessorMock,\n} from \"../typechain\";\n"
  },
  {
    "path": "contracts-ramp/utils/deploys.ts",
    "content": "import { BigNumber, Signer, ethers } from \"ethers\";\n\nimport { Address, TLSParams } from \"@utils/types\";\n\nconst circom = require(\"circomlibjs\");\n\nimport {\n  GarantiBodyHashVerifier,\n  GarantiRamp,\n  GarantiRegistrationProcessor,\n  GarantiRegistrationProcessorMock,\n  GarantiSendProcessor,\n  GarantiSendProcessorMock,\n  HDFCRamp,\n  HDFCRegistrationProcessorMock,\n  HDFCRegistrationProcessor,\n  HDFCSendProcessorMock,\n  HDFCSendProcessor,\n  HDFCTimestampParsingMock,\n  ManagedKeyHashAdapter,\n  ManagedKeyHashAdapterV2,\n  NullifierRegistry,\n  Ramp,\n  RevolutAccountRegistry,\n  RevolutAccountRegistrationProcessor,\n  RevolutAccountRegistrationProcessorMock,\n  RevolutRamp,\n  RevolutSendProcessor,\n  RevolutSendProcessorMock,\n  StringConversionUtilsMock,\n  USDCMock,\n  VenmoRampV2,\n  VenmoRegistrationProcessor,\n  VenmoRegistrationProcessorMock,\n  VenmoRegistrationProcessorV2,\n  VenmoSendProcessorMock,\n  VenmoSendProcessor,\n  VenmoSendProcessorV2,\n  WiseAccountRegistrationProcessor,\n  WiseAccountRegistrationProcessorMock,\n  WiseAccountRegistry,\n  WiseOffRamperRegistrationProcessor,\n  WiseOffRamperRegistrationProcessorMock,\n  WiseRamp,\n  WiseSendProcessor,\n  WiseSendProcessorMock,\n} from \"./contracts\";\nimport {\n  GarantiRamp__factory,\n  GarantiRegistrationProcessor__factory,\n  GarantiSendProcessor__factory,\n  mocks as garantiMocks\n} from \"../typechain/factories/contracts/ramps/garanti\";\nimport {\n  Groth16Verifier__factory as GarantiBodyHashVerifier__factory,\n} from \"../typechain/factories/contracts/verifiers/garanti_body_suffix_hasher_verifier.sol\";\nimport {\n  HDFCRamp__factory,\n  HDFCRegistrationProcessor__factory,\n  HDFCSendProcessor__factory,\n  mocks as hdfcMocks\n} from \"../typechain/factories/contracts/ramps/hdfc\";\nimport {\n  Ramp__factory,\n  VenmoRegistrationProcessor__factory,\n  VenmoSendProcessor__factory,\n  mocks as venmoMocks\n} from \"../typechain/factories/contracts/ramps/venmo-v1\";\nimport {\n  VenmoRampV2__factory,\n  VenmoRegistrationProcessorV2__factory,\n  VenmoSendProcessorV2__factory,\n} from \"../typechain/factories/contracts/ramps/venmo-v2\";\nimport {\n  WiseRamp__factory,\n  WiseAccountRegistrationProcessor__factory,\n  WiseAccountRegistry__factory,\n  WiseOffRamperRegistrationProcessor__factory,\n  WiseSendProcessor__factory,\n  mocks as wiseMocks\n} from \"../typechain/factories/contracts/ramps/wise\";\nimport {\n  RevolutRamp__factory,\n  RevolutAccountRegistrationProcessor__factory,\n  RevolutAccountRegistry__factory,\n  RevolutSendProcessor__factory,\n  mocks as revolutMocks\n} from \"../typechain/factories/contracts/ramps/revolut\";\nimport {\n  StringConversionUtilsMock__factory,\n  USDCMock__factory,\n} from \"../typechain/factories/contracts/mocks\";\nimport {\n  ManagedKeyHashAdapter__factory,\n  ManagedKeyHashAdapterV2__factory\n} from \"../typechain/factories/contracts/processors/keyHashAdapters\";\nimport { NullifierRegistry__factory } from \"../typechain/factories/contracts/processors/nullifierRegistries\";\n\nexport default class DeployHelper {\n  private _deployerSigner: Signer;\n\n  constructor(deployerSigner: Signer) {\n    this._deployerSigner = deployerSigner;\n  }\n\n  public async deployUSDCMock(mintAmount: BigNumber, name: string, symbol: string): Promise<USDCMock> {\n    return await new USDCMock__factory(this._deployerSigner).deploy(mintAmount.toString(), name, symbol);\n  }\n\n  // Venmo-V1 Contracts\n  public async deployRamp(\n    owner: Address,\n    usdcToken: Address,\n    poseidon: Address,\n    minDepositAmount: BigNumber,\n    maxOnRampAmount: BigNumber,\n    intentExpirationPeriod: BigNumber,\n    onRampCoolDownPeriod: BigNumber,\n    sustainabilityFee: BigNumber,\n    sustainabilityFeeRecipient: Address,\n  ): Promise<Ramp> {\n    return await new Ramp__factory(this._deployerSigner).deploy(\n      owner,\n      usdcToken,\n      poseidon,\n      minDepositAmount,\n      maxOnRampAmount,\n      intentExpirationPeriod,\n      onRampCoolDownPeriod,\n      sustainabilityFee,\n      sustainabilityFeeRecipient\n    );\n  }\n\n  public async deployVenmoRegistrationProcessor(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    emailFromAddress: string,\n  ): Promise<VenmoRegistrationProcessor> {\n    return await new VenmoRegistrationProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      emailFromAddress\n    );\n  }\n\n  public async deployVenmoSendProcessor(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    emailFromAddress: string,\n  ): Promise<VenmoSendProcessor> {\n    return await new VenmoSendProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      emailFromAddress\n    );\n  }\n\n  // Venmo-V2 Contracts\n  public async deployVenmoRampV2(\n    owner: Address,\n    ramp: Address,\n    usdcToken: Address,\n    poseidon: Address,\n    minDepositAmount: BigNumber,\n    maxOnRampAmount: BigNumber,\n    intentExpirationPeriod: BigNumber,\n    onRampCoolDownPeriod: BigNumber,\n    sustainabilityFee: BigNumber,\n    sustainabilityFeeRecipient: Address,\n  ): Promise<VenmoRampV2> {\n    return await new VenmoRampV2__factory(this._deployerSigner).deploy(\n      owner,\n      ramp,\n      usdcToken,\n      poseidon,\n      minDepositAmount,\n      maxOnRampAmount,\n      intentExpirationPeriod,\n      onRampCoolDownPeriod,\n      sustainabilityFee,\n      sustainabilityFeeRecipient\n    );\n  }\n\n  public async deployVenmoRegistrationProcessorV2(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    emailFromAddress: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<VenmoRegistrationProcessorV2> {\n    return await new VenmoRegistrationProcessorV2__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      emailFromAddress,\n      timestampBuffer\n    );\n  }\n\n  public async deployVenmoSendProcessorV2(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    emailFromAddress: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<VenmoSendProcessorV2> {\n    return await new VenmoSendProcessorV2__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      emailFromAddress,\n      timestampBuffer\n    );\n  }\n\n  // HDFC Contracts\n  public async deployHDFCRamp(\n    owner: Address,\n    usdcToken: Address,\n    poseidon3: Address,\n    poseidon6: Address,\n    minDepositAmount: BigNumber,\n    maxOnRampAmount: BigNumber,\n    intentExpirationPeriod: BigNumber,\n    onRampCoolDownPeriod: BigNumber,\n    sustainabilityFee: BigNumber,\n    sustainabilityFeeRecipient: Address,\n  ): Promise<HDFCRamp> {\n    return await new HDFCRamp__factory(this._deployerSigner).deploy(\n      owner,\n      usdcToken,\n      poseidon3,\n      poseidon6,\n      minDepositAmount,\n      maxOnRampAmount,\n      intentExpirationPeriod,\n      onRampCoolDownPeriod,\n      sustainabilityFee,\n      sustainabilityFeeRecipient\n    );\n  }\n\n  public async deployHDFCRegistrationProcessor(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    emailFromAddress: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<HDFCRegistrationProcessor> {\n    return await new HDFCRegistrationProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      emailFromAddress,\n      timestampBuffer\n    );\n  }\n\n  public async deployHDFCSendProcessor(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    emailFromAddress: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<HDFCSendProcessor> {\n    return await new HDFCSendProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      emailFromAddress,\n      timestampBuffer\n    );\n  }\n\n  // Garanti Contracts\n  public async deployGarantiRamp(\n    owner: Address,\n    usdcToken: Address,\n    minDepositAmount: BigNumber,\n    maxOnRampAmount: BigNumber,\n    intentExpirationPeriod: BigNumber,\n    onRampCoolDownPeriod: BigNumber,\n    sustainabilityFee: BigNumber,\n    sustainabilityFeeRecipient: Address,\n  ): Promise<GarantiRamp> {\n    return await new GarantiRamp__factory(this._deployerSigner).deploy(\n      owner,\n      usdcToken,\n      minDepositAmount,\n      maxOnRampAmount,\n      intentExpirationPeriod,\n      onRampCoolDownPeriod,\n      sustainabilityFee,\n      sustainabilityFeeRecipient\n    );\n  }\n\n  public async deployGarantiRegistrationProcessor(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    bodyHashVerifier: Address,\n    emailFromAddress: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<GarantiRegistrationProcessor> {\n    return await new GarantiRegistrationProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      bodyHashVerifier,\n      emailFromAddress,\n      timestampBuffer\n    );\n  }\n\n  public async deployGarantiSendProcessor(\n    ramp: Address,\n    keyHashAdapter: Address,\n    nullifierRegistry: Address,\n    bodyHashVerifier: Address,\n    emailFromAddress: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<GarantiSendProcessor> {\n    return await new GarantiSendProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      keyHashAdapter,\n      nullifierRegistry,\n      bodyHashVerifier,\n      emailFromAddress,\n      timestampBuffer\n    );\n  }\n\n  public async deployGarantiBodyHashVerifier(): Promise<GarantiBodyHashVerifier> {\n    return await new GarantiBodyHashVerifier__factory(this._deployerSigner).deploy();\n  }\n\n  // Revolut Contracts\n  public async deployRevolutRamp(\n    owner: Address,\n    usdcToken: Address,\n    minDepositAmount: BigNumber,\n    maxOnRampAmount: BigNumber,\n    intentExpirationPeriod: BigNumber,\n    onRampCoolDownPeriod: BigNumber,\n    sustainabilityFee: BigNumber,\n    sustainabilityFeeRecipient: Address,\n  ): Promise<RevolutRamp> {\n    return await new RevolutRamp__factory(this._deployerSigner).deploy(\n      owner,\n      usdcToken,\n      minDepositAmount,\n      maxOnRampAmount,\n      intentExpirationPeriod,\n      onRampCoolDownPeriod,\n      sustainabilityFee,\n      sustainabilityFeeRecipient\n    );\n  }\n\n  public async deployRevolutAccountRegistry(\n    owner: Address,\n  ): Promise<RevolutAccountRegistry> {\n    return await new RevolutAccountRegistry__factory(this._deployerSigner).deploy(\n      owner\n    );\n  }\n\n  public async deployRevolutAccountRegistrationProcessor(\n    ramp: Address,\n    verifierSigningKey: Address,\n    notaryKeyHash: string,\n    nullifierRegistry: Address,\n    endpoint: string,\n    host: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<RevolutAccountRegistrationProcessor> {\n    return await new RevolutAccountRegistrationProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      verifierSigningKey,\n      notaryKeyHash,\n      nullifierRegistry,\n      timestampBuffer,\n      endpoint,\n      host\n    );\n  }\n\n  public async deployRevolutSendProcessor(\n    ramp: Address,\n    nullifierRegistry: Address,\n    endpoint: string,\n    host: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<RevolutSendProcessor> {\n    return await new RevolutSendProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      nullifierRegistry,\n      timestampBuffer,\n      endpoint,\n      host\n    );\n  }\n\n  // Wise Contracts\n  public async deployWiseRamp(\n    owner: Address,\n    usdcToken: Address,\n    minDepositAmount: BigNumber,\n    maxOnRampAmount: BigNumber,\n    intentExpirationPeriod: BigNumber,\n    onRampCoolDownPeriod: BigNumber,\n    sustainabilityFee: BigNumber,\n    sustainabilityFeeRecipient: Address,\n  ): Promise<WiseRamp> {\n    return await new WiseRamp__factory(this._deployerSigner).deploy(\n      owner,\n      usdcToken,\n      minDepositAmount,\n      maxOnRampAmount,\n      intentExpirationPeriod,\n      onRampCoolDownPeriod,\n      sustainabilityFee,\n      sustainabilityFeeRecipient\n    );\n  }\n\n  public async deployWiseAccountRegistry(\n    owner: Address,\n  ): Promise<WiseAccountRegistry> {\n    return await new WiseAccountRegistry__factory(this._deployerSigner).deploy(\n      owner\n    );\n  }\n\n  public async deployWiseAccountRegistrationProcessor(\n    ramp: Address,\n    verifierSigningKey: Address,\n    nullifierRegistry: Address,\n    endpoint: string,\n    host: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<WiseAccountRegistrationProcessor> {\n    return await new WiseAccountRegistrationProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      verifierSigningKey,\n      nullifierRegistry,\n      timestampBuffer,\n      endpoint,\n      host\n    );\n  }\n\n  public async deployWiseOffRamperRegistrationProcessor(\n    ramp: Address,\n    verifierSigningKey: Address,\n    nullifierRegistry: Address,\n    endpoint: string,\n    host: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<WiseOffRamperRegistrationProcessor> {\n    return await new WiseOffRamperRegistrationProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      verifierSigningKey,\n      nullifierRegistry,\n      timestampBuffer,\n      endpoint,\n      host\n    );\n  }\n\n  public async deployWiseSendProcessor(\n    ramp: Address,\n    nullifierRegistry: Address,\n    endpoint: string,\n    host: string,\n    timestampBuffer: BigNumber = BigNumber.from(30),\n  ): Promise<WiseSendProcessor> {\n    return await new WiseSendProcessor__factory(this._deployerSigner).deploy(\n      ramp,\n      nullifierRegistry,\n      timestampBuffer,\n      endpoint,\n      host\n    );\n  }\n\n  public async deployManagedKeyHashAdapter(venmoKeyHash: string): Promise<ManagedKeyHashAdapter> {\n    return await new ManagedKeyHashAdapter__factory(this._deployerSigner).deploy(venmoKeyHash);\n  }\n\n  public async deployManagedKeyHashAdapterV2(keyHashes: string[]): Promise<ManagedKeyHashAdapterV2> {\n    return await new ManagedKeyHashAdapterV2__factory(this._deployerSigner).deploy(keyHashes);\n  }\n\n  public async deployNullifierRegistry(): Promise<NullifierRegistry> {\n    return await new NullifierRegistry__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployVenmoSendProcessorMock(): Promise<VenmoSendProcessorMock> {\n    return await new venmoMocks.VenmoSendProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployVenmoRegistrationProcessorMock(): Promise<VenmoRegistrationProcessorMock> {\n    return await new venmoMocks.VenmoRegistrationProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployHDFCSendProcessorMock(): Promise<HDFCSendProcessorMock> {\n    return await new hdfcMocks.HDFCSendProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployHDFCRegistrationProcessorMock(): Promise<HDFCRegistrationProcessorMock> {\n    return await new hdfcMocks.HDFCRegistrationProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployHDFCTimestampParsingMock(): Promise<HDFCTimestampParsingMock> {\n    return await new hdfcMocks.HDFCTimestampParsingMock__factory(this._deployerSigner).deploy();\n  }   \n\n  public async deployGarantiSendProcessorMock(): Promise<GarantiSendProcessorMock> {\n    return await new garantiMocks.GarantiSendProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployGarantiRegistrationProcessorMock(): Promise<GarantiRegistrationProcessorMock> {\n    return await new garantiMocks.GarantiRegistrationProcessorMock__factory(this._deployerSigner).deploy();\n  }\n  public async deployWiseSendProcessorMock(): Promise<WiseSendProcessorMock> {\n    return await new wiseMocks.WiseSendProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployWiseAccountRegistrationProcessorMock(): Promise<WiseAccountRegistrationProcessorMock> {\n    return await new wiseMocks.WiseAccountRegistrationProcessorMock__factory(this._deployerSigner).deploy();\n  }\n  public async deployWiseOffRamperRegistrationProcessorMock(): Promise<WiseOffRamperRegistrationProcessorMock> {\n    return await new wiseMocks.WiseOffRamperRegistrationProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployRevolutSendProcessorMock(): Promise<RevolutSendProcessorMock> {\n    return await new revolutMocks.RevolutSendProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployRevolutAccountRegistrationProcessorMock(): Promise<RevolutAccountRegistrationProcessorMock> {\n    return await new revolutMocks.RevolutAccountRegistrationProcessorMock__factory(this._deployerSigner).deploy();\n  }\n\n  public async deployPoseidon3(): Promise<any> {\n    const contract = new ethers.ContractFactory(\n      circom.poseidonContract.generateABI(3),\n      circom.poseidonContract.createCode(3),\n      this._deployerSigner\n    );\n\n    return await contract.deploy();\n  }\n\n  public async deployPoseidon6(): Promise<any> {\n    const contract = new ethers.ContractFactory(\n      circom.poseidonContract.generateABI(6),\n      circom.poseidonContract.createCode(6),\n      this._deployerSigner\n    );\n\n    return await contract.deploy();\n  };\n\n  public async deployStringConversionUtilsMock(): Promise<StringConversionUtilsMock> {\n    return await new StringConversionUtilsMock__factory(this._deployerSigner).deploy();\n  }\n}\n"
  },
  {
    "path": "contracts-ramp/utils/protocolUtils.ts",
    "content": "import { ethers } from \"ethers\";\nimport { BigNumber } from \"ethers\";\nimport { ZERO } from \"./constants\";\nimport { AbiCoder } from \"ethers/lib/utils\";\nconst buildPoseidon = require(\"circomlibjs\").buildPoseidonOpt;\n\nconst CIRCOM_FIELD = BigNumber.from(\"21888242871839275222246405745257275088548364400416034343698204186575808495617\");\n\nlet abiCoder = new AbiCoder();\n\nexport const calculateIntentHash = (\n  venmoId: string,\n  depositId: BigNumber,\n  timestamp: BigNumber\n): string => {\n\n  const intermediateHash = ethers.utils.solidityKeccak256(\n    [\"bytes32\", \"uint256\", \"uint256\"],\n    [venmoId, depositId, timestamp]\n  );\n\n  return ethers.utils.hexZeroPad(BigNumber.from(intermediateHash).mod(CIRCOM_FIELD).toHexString(), 32);\n};\n\n// Calculate id hashes\n\nexport const calculateIdHash = async (venmoId: string): Promise<string> => {\n  const poseidon = await buildPoseidon();\n\n  const packedVenmoId = calculatePackedId(venmoId);\n\n  return BigNumber.from(poseidon.F.toString(poseidon(packedVenmoId))).toHexString();\n}\n\nexport const calculateUpiIdHash = async (upiId: string): Promise<string> => {\n  const poseidon = await buildPoseidon();\n\n  const packedUpiId = calculatePackedUPIId(upiId);\n\n  return BigNumber.from(\n    poseidon.F.toString(\n      poseidon([BigNumber.from(poseidon.F.toString(poseidon(packedUpiId.slice(0, 6))))].concat(packedUpiId.slice(6, 8)))\n    )\n  ).toHexString()\n}\n\nexport const calculateWiseId = (wiseAccount: string): string => {\n  return ethers.utils.hexZeroPad(BigNumber.from(wiseAccount).toHexString(), 32)\n}\n\nexport const calculateWiseTagHash = (wiseTag: string): string => {\n  return BigNumber.from(ethers.utils.keccak256(abiCoder.encode([\"string\"], [wiseTag]))).toString()\n}\n\nexport const calculateRevolutIdHash = (wiseTag: string): string => {\n  return ethers.utils.keccak256(abiCoder.encode([\"string\"], [wiseTag]))\n}\n\nexport const calculateRevolutIdHashBN = (wiseTag: string): string => {\n  return BigNumber.from(ethers.utils.keccak256(abiCoder.encode([\"string\"], [wiseTag]))).toString()\n}\n\nexport const calculateGarantiIdHash = async (garantiId: string): Promise<string> => {\n  const poseidon = await buildPoseidon();\n\n  // Use same packing scheme as UPI\n  const packedGarantiId = calculatePackedUPIId(garantiId);\n\n  // Different hashing scheme from UPI\n  return BigNumber.from(poseidon.F.toString(poseidon(packedGarantiId))).toHexString();\n}\n\nexport const calculateIbanHash = (iban: string): string => {\n  return ethers.utils.solidityKeccak256([\"string\"], [iban]);\n}\n\n// Calculate packed ids\n\nexport const calculatePackedUPIId = (upiId: string): [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] => {\n  const upiIdArray: number[] = upiId.split('').map(char => char.charCodeAt(0));\n\n  // Pad with zeros until length is 56\n  while (upiIdArray.length < 56) {\n    upiIdArray.push(0);\n  }\n\n  return Bytes2Packed8(7, upiIdArray);\n};\n\nexport const calculatePackedId = (venmoId: string): [BigNumber, BigNumber, BigNumber] => {\n  const venmoIdArray: number[] = venmoId.split('').map(char => char.charCodeAt(0));\n\n  // Pad with zeros until length is 21\n  while (venmoIdArray.length < 21) {\n    venmoIdArray.push(0);\n  }\n\n  return Bytes2Packed(7, venmoIdArray);\n};\n\nexport const createTypedRegistrationProof = (\n  a: string[], \n  b: string[][],\n  c: string[],\n  signals: string[]\n): any => {\n  const a_fixed: [BigNumber, BigNumber] = [BigNumber.from(a[0]), BigNumber.from(a[1])];\n  const b_fixed: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [\n    [BigNumber.from(b[0][0]), BigNumber.from(b[0][1])],\n    [BigNumber.from(b[1][0]), BigNumber.from(b[1][1])]\n  ];\n  const c_fixed: [BigNumber, BigNumber] = [BigNumber.from(c[0]), BigNumber.from(c[1])];\n  const signals_fixed: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] = [\n    BigNumber.from(signals[0]), BigNumber.from(signals[1]), BigNumber.from(signals[2]), BigNumber.from(signals[3]), BigNumber.from(signals[4])\n  ];\n  \n  return {\n    a: a_fixed,\n    b: b_fixed,\n    c: c_fixed,\n    signals: signals_fixed\n  };\n}\n\nexport const createTypedSendProof = (\n  a: string[], \n  b: string[][],\n  c: string[],\n  signals: string[]\n): any => {\n  const a_fixed: [BigNumber, BigNumber] = [BigNumber.from(a[0]), BigNumber.from(a[1])];\n  const b_fixed: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [\n    [BigNumber.from(b[0][0]), BigNumber.from(b[0][1])],\n    [BigNumber.from(b[1][0]), BigNumber.from(b[1][1])]\n  ];\n  const c_fixed: [BigNumber, BigNumber] = [BigNumber.from(c[0]), BigNumber.from(c[1])];\n  const signals_fixed: BigNumber[] = signals.map((signal) => BigNumber.from(signal));;\n  \n  return {\n    a: a_fixed,\n    b: b_fixed,\n    c: c_fixed,\n    signals: signals_fixed\n  };\n}\n\nexport const createBlankGarantiBodyHashProof = (): any => {\n  return {\n    a: [ZERO, ZERO],\n    b: [[ZERO, ZERO], [ZERO, ZERO]],\n    c: [ZERO, ZERO],\n    signals: [ZERO, ZERO, ZERO, ZERO]\n  };\n}\n\nexport const createTypedGarantiBodyHashProof = (\n  a: string[], \n  b: string[][],\n  c: string[],\n  signals: string[]\n): any => {\n  const a_fixed: [BigNumber, BigNumber] = [BigNumber.from(a[0]), BigNumber.from(a[1])];\n  const b_fixed: [[BigNumber, BigNumber], [BigNumber, BigNumber]] = [\n    [BigNumber.from(b[0][0]), BigNumber.from(b[0][1])],\n    [BigNumber.from(b[1][0]), BigNumber.from(b[1][1])]\n  ];\n  const c_fixed: [BigNumber, BigNumber] = [BigNumber.from(c[0]), BigNumber.from(c[1])];\n  const signals_fixed: [BigNumber, BigNumber, BigNumber, BigNumber] = [\n    BigNumber.from(signals[0]), BigNumber.from(signals[1]), BigNumber.from(signals[2]), BigNumber.from(signals[3])\n  ];\n  \n  return {\n    a: a_fixed,\n    b: b_fixed,\n    c: c_fixed,\n    signals: signals_fixed\n  };\n}\n\nfunction Bytes2Packed(n: number, inArr: number[]) {\n  let index = 0;\n  const out: [BigNumber, BigNumber, BigNumber] = [ZERO, ZERO, ZERO];\n\n  for (let i = 0; i < inArr.length; i += n) {\n    let packedValue = BigInt(0);\n    for (let k = 0; k < n; k++) {\n      if (i + k < inArr.length) {\n        packedValue += BigInt(inArr[i + k]) * (BigInt(2) ** BigInt(k * 8));\n      }\n    }\n\n    out[index] = BigNumber.from(packedValue);\n    index++\n  }\n\n  return out;\n}\n\nfunction Bytes2Packed8(n: number, inArr: number[]) {\n  let index = 0;\n  const out: [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] = [\n    ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO\n  ];\n\n  for (let i = 0; i < inArr.length; i += n) {\n    let packedValue = BigInt(0);\n    for (let k = 0; k < n; k++) {\n      if (i + k < inArr.length) {\n        packedValue += BigInt(inArr[i + k]) * (BigInt(2) ** BigInt(k * 8));\n      }\n    }\n\n    out[index] = BigNumber.from(packedValue);\n    index++\n  }\n\n  return out;\n}\n\nexport const unpackPackedGarantiId = (packedGarantiId: BigNumber[]): string => {\n  const n = 7;\n  let garantiIdArray: number[] = [];\n\n  for (const packedValue of packedGarantiId) {\n    let bigIntValue = BigInt(packedValue.toString());\n\n    for (let k = 0; k < n; k++) {\n      garantiIdArray.push(Number(bigIntValue & BigInt(0xFF)));\n      bigIntValue >>= BigInt(8);\n    }\n  }\n\n  // Remove padding zeros and convert back to string\n  const firstNonZeroIndex = garantiIdArray.reverse().findIndex(value => value !== 0);\n  if (firstNonZeroIndex !== -1) {\n    garantiIdArray = garantiIdArray.slice(firstNonZeroIndex).reverse();\n  }\n\n  return String.fromCharCode(...garantiIdArray);\n};\n\n"
  },
  {
    "path": "contracts-ramp/utils/test/accountUtils.ts",
    "content": "import { ethers } from \"hardhat\";\nimport { Account } from \"./types\";\nimport { SignerWithAddress } from \"@nomiclabs/hardhat-ethers/dist/src/signer-with-address\";\n\nconst provider = ethers.provider;\n\n// NOTE ethers.signers may be a hardhat specific function\nexport const getWallets = async (): Promise<SignerWithAddress[]> => {\n  return (await ethers.getSigners() as SignerWithAddress[]);\n};\n\n\nexport const getAccounts = async (): Promise<Account[]> => {\n  const accounts: Account[] = [];\n\n  const wallets = await getWallets();\n  for (let i = 0; i < wallets.length; i++) {\n    accounts.push({\n      wallet: wallets[i],\n      address: await wallets[i].getAddress(),\n    });\n  }\n\n  return accounts;\n};\n"
  },
  {
    "path": "contracts-ramp/utils/test/index.ts",
    "content": "export {\n  addSnapshotBeforeRestoreAfterEach,\n  getWaffleExpect,\n} from \"./testingUtils\"\n\nexport {\n  getAccounts\n} from \"./accountUtils\"\n"
  },
  {
    "path": "contracts-ramp/utils/test/testingUtils.ts",
    "content": "\nimport chai from \"chai\";\nimport { solidity } from \"ethereum-waffle\";\nimport { Blockchain } from \"../common\";\nimport { ethers } from \"hardhat\";\n\nchai.use(solidity);\n\nconst provider = ethers.provider;\n\n// HARDHAT / WAFFLE\nexport const getWaffleExpect = (): Chai.ExpectStatic => {\n  return chai.expect;\n};\n\nexport const addSnapshotBeforeRestoreAfterEach = () => {\n  const blockchain = new Blockchain(provider);\n  beforeEach(async () => {\n    await blockchain.saveSnapshotAsync();\n  });\n\n  afterEach(async () => {\n    await blockchain.revertAsync();\n  });\n};\n"
  },
  {
    "path": "contracts-ramp/utils/test/types.ts",
    "content": "import { SignerWithAddress } from \"@nomiclabs/hardhat-ethers/dist/src/signer-with-address\";\nimport { Address } from \"../types\";\n\nexport type Account = {\n  address: Address;\n  wallet: SignerWithAddress;\n};\n"
  },
  {
    "path": "contracts-ramp/utils/types.ts",
    "content": "import { BigNumber } from \"ethers\";\n\nexport type Address = string;\n\nexport type GrothProof = {\n  a: [BigNumber, BigNumber],\n  b: [[BigNumber, BigNumber], [BigNumber, BigNumber]],\n  c: [BigNumber, BigNumber],\n  signals: BigNumber[]\n}\n\nexport enum PaymentProviders {\n  Venmo = \"venmo\",\n  HDFC = \"hdfc\",\n  Garanti = \"garanti\",\n  Wise = \"wise\",\n  Revolut = \"revolut\",\n}\n\nexport interface TLSParams {\n  verifierSigningKey: Address;\n  notaryKeyHash: string;\n  endpoint: string;\n  host: string;\n}\n\n// Wise Proof Types\nexport interface WiseRegistrationData {\n  endpoint: string;\n  host: string;\n  profileId: string;\n  wiseTagHash: string;\n  userAddress: Address;\n}\n\nexport interface WiseRegistrationProof {\n  public_values: WiseRegistrationData;\n  proof: string;\n}\n\nexport interface WiseOffRamperRegistrationData {\n  endpoint: string;\n  host: string;\n  profileId: string;\n  mcAccountId: string;\n}\n\nexport interface WiseOffRamperRegistrationProof {\n  public_values: WiseOffRamperRegistrationData;\n  proof: string;\n}\n\nexport interface WiseSendData {\n  endpoint: string;\n  host: string;\n  transferId: string;\n  senderId: string;\n  recipientId: string;\n  timestamp: string;\n  currencyId: string;\n  amount: string;\n  status: string;\n  intentHash: BigNumber;\n}\n\nexport interface WiseSendProof {\n  public_values: WiseSendData;\n  proof: string;\n}\n\n// Revolut Proof Types\nexport interface RevolutRegistrationData {\n  endpoint: string;\n  host: string;\n  profileId: string;\n  userAddress: Address;\n  notaryKeyHash: BigNumber;\n}\n\nexport interface RevolutRegistrationProof {\n  public_values: RevolutRegistrationData;\n  proof: string;\n}\n\nexport interface RevolutSendData {\n  endpoint: string;\n  host: string;\n  transferId: string;\n  recipientId: string;\n  amount: string;\n  currencyId: string;\n  status: string;\n  timestamp: string;\n  intentHash: BigNumber;\n  notaryKeyHash: BigNumber;\n}\n\nexport interface RevolutSendProof {\n  public_values: RevolutSendData;\n  proof: string;\n}\n"
  }
]